summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.cirrus.yml41
-rw-r--r--.github/ISSUE_TEMPLATE.md8
-rw-r--r--.papr.sh14
-rw-r--r--.papr_prepare.sh4
-rwxr-xr-xAPI.md50
-rw-r--r--CONTRIBUTING.md28
-rw-r--r--Dockerfile9
-rw-r--r--Dockerfile.CentOS4
-rw-r--r--Dockerfile.Fedora4
-rw-r--r--Makefile78
-rw-r--r--README.md9
-rw-r--r--RELEASE_NOTES.md38
-rw-r--r--changelog.txt97
-rw-r--r--cmd/podman/commands.go150
-rw-r--r--cmd/podman/commands_remoteclient.go21
-rw-r--r--cmd/podman/common.go18
-rw-r--r--cmd/podman/container.go43
-rw-r--r--cmd/podman/create.go132
-rw-r--r--cmd/podman/create_cli.go8
-rw-r--r--cmd/podman/exec.go14
-rw-r--r--cmd/podman/exists.go13
-rw-r--r--cmd/podman/formats/formats.go13
-rw-r--r--cmd/podman/history.go8
-rw-r--r--cmd/podman/image.go17
-rw-r--r--cmd/podman/imagefilters/filters.go (renamed from libpod/image/filters.go)23
-rw-r--r--cmd/podman/images.go52
-rw-r--r--cmd/podman/images_prune.go15
-rw-r--r--cmd/podman/info.go21
-rw-r--r--cmd/podman/inspect.go45
-rw-r--r--cmd/podman/libpodruntime/runtime.go6
-rw-r--r--cmd/podman/login.go42
-rw-r--r--cmd/podman/main.go151
-rw-r--r--cmd/podman/mount.go34
-rw-r--r--cmd/podman/platform_linux.go17
-rw-r--r--cmd/podman/platform_unsupported.go6
-rw-r--r--cmd/podman/play_kube.go2
-rw-r--r--cmd/podman/pull.go8
-rw-r--r--cmd/podman/rmi.go15
-rw-r--r--cmd/podman/shared/container.go34
-rw-r--r--cmd/podman/shared/funcs.go4
-rw-r--r--cmd/podman/shared/prune.go24
-rw-r--r--cmd/podman/sign.go198
-rw-r--r--cmd/podman/start.go16
-rw-r--r--cmd/podman/tag.go6
-rw-r--r--cmd/podman/trust.go58
-rw-r--r--cmd/podman/umount.go65
-rw-r--r--cmd/podman/varlink/io.podman.varlink30
-rw-r--r--cmd/podman/version.go18
-rw-r--r--commands.md13
-rw-r--r--completions/bash/podman154
-rwxr-xr-xcontrib/cirrus/build_vm_images.sh4
-rwxr-xr-xcontrib/cirrus/integration_test.sh6
-rw-r--r--contrib/cirrus/lib.sh11
-rwxr-xr-xcontrib/cirrus/ooe.sh6
-rwxr-xr-xcontrib/cirrus/setup_environment.sh5
-rwxr-xr-xcontrib/cirrus/unit_test.sh4
-rw-r--r--contrib/python/.gitignore5
-rw-r--r--contrib/python/podman/.pylintrc564
-rw-r--r--contrib/python/podman/CHANGES.txt1
-rw-r--r--contrib/python/podman/MANIFEST.in3
-rw-r--r--contrib/python/podman/Makefile40
-rw-r--r--contrib/python/podman/README.md44
-rw-r--r--contrib/python/podman/examples/eg_attach.py18
-rw-r--r--contrib/python/podman/examples/eg_containers_by_image.py16
-rw-r--r--contrib/python/podman/examples/eg_image_list.py10
-rw-r--r--contrib/python/podman/examples/eg_inspect_fedora.py16
-rw-r--r--contrib/python/podman/examples/eg_latest_containers.py19
-rw-r--r--contrib/python/podman/examples/eg_new_image.py32
-rwxr-xr-xcontrib/python/podman/examples/run_example.sh43
-rw-r--r--contrib/python/podman/podman/__init__.py29
-rw-r--r--contrib/python/podman/podman/client.py212
-rw-r--r--contrib/python/podman/podman/libs/__init__.py75
-rw-r--r--contrib/python/podman/podman/libs/_containers_attach.py79
-rw-r--r--contrib/python/podman/podman/libs/_containers_start.py82
-rw-r--r--contrib/python/podman/podman/libs/containers.py248
-rw-r--r--contrib/python/podman/podman/libs/errors.py77
-rw-r--r--contrib/python/podman/podman/libs/images.py164
-rw-r--r--contrib/python/podman/podman/libs/pods.py163
-rw-r--r--contrib/python/podman/podman/libs/system.py40
-rw-r--r--contrib/python/podman/podman/libs/tunnel.py190
-rw-r--r--contrib/python/podman/requirements.txt4
-rwxr-xr-xcontrib/python/podman/setup.py38
-rw-r--r--contrib/python/podman/test/podman_testcase.py112
-rw-r--r--contrib/python/podman/test/retry_decorator.py43
-rw-r--r--contrib/python/podman/test/test_client.py35
-rw-r--r--contrib/python/podman/test/test_containers.py244
-rw-r--r--contrib/python/podman/test/test_images.py174
-rw-r--r--contrib/python/podman/test/test_libs.py53
-rw-r--r--contrib/python/podman/test/test_pods_ctnrs.py66
-rw-r--r--contrib/python/podman/test/test_pods_no_ctnrs.py94
-rwxr-xr-xcontrib/python/podman/test/test_runner.sh156
-rw-r--r--contrib/python/podman/test/test_system.py63
-rw-r--r--contrib/python/podman/test/test_tunnel.py86
-rw-r--r--contrib/python/podman/tox.ini8
-rw-r--r--contrib/python/pypodman/.pylintrc564
-rw-r--r--contrib/python/pypodman/MANIFEST.in2
-rw-r--r--contrib/python/pypodman/Makefile39
-rw-r--r--contrib/python/pypodman/README.md34
-rw-r--r--contrib/python/pypodman/docs/man1/pypodman.1101
-rw-r--r--contrib/python/pypodman/pypodman/lib/__init__.py43
-rw-r--r--contrib/python/pypodman/pypodman/lib/action_base.py79
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/__init__.py54
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/_create_args.py401
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/attach_action.py68
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/commit_action.py99
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/create_action.py55
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/export_action.py54
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/history_action.py79
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/images_action.py86
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/import_action.py69
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/info_action.py45
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/inspect_action.py89
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/kill_action.py49
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/logs_action.py61
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/mount_action.py78
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pause_action.py43
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod/__init__.py24
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod/create_parser.py76
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod/inspect_parser.py43
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod/kill_parser.py57
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod/pause_parser.py49
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod/processes_parser.py94
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod/remove_parser.py54
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod/restart_parser.py50
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod/start_parser.py45
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod/stop_parser.py44
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod/top_parser.py35
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod/unpause_parser.py50
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pod_action.py36
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/port_action.py61
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/ps_action.py80
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/pull_action.py46
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/push_action.py50
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/restart_action.py46
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/rm_action.py41
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/rmi_action.py40
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/run_action.py73
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/search_action.py160
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/start_action.py71
-rw-r--r--contrib/python/pypodman/pypodman/lib/actions/version_action.py35
-rw-r--r--contrib/python/pypodman/pypodman/lib/parser_actions.py247
-rw-r--r--contrib/python/pypodman/pypodman/lib/podman_parser.py255
-rw-r--r--contrib/python/pypodman/pypodman/lib/report.py87
-rwxr-xr-xcontrib/python/pypodman/pypodman/main.py81
-rw-r--r--contrib/python/pypodman/pypodman/test/test_report.py23
-rw-r--r--contrib/python/pypodman/requirements.txt5
-rwxr-xr-xcontrib/python/pypodman/setup.py45
-rw-r--r--contrib/spec/podman.spec.in54
-rw-r--r--docs/libpod.conf.5.md7
-rw-r--r--docs/podman-create.1.md34
-rw-r--r--docs/podman-exec.1.md8
-rw-r--r--docs/podman-image-sign.1.md52
-rw-r--r--docs/podman-image-trust.1.md2
-rw-r--r--docs/podman-image.1.md3
-rw-r--r--docs/podman-info.1.md1
-rw-r--r--docs/podman-mount.1.md10
-rw-r--r--docs/podman-rm.1.md8
-rw-r--r--docs/podman-run.1.md34
-rw-r--r--docs/podman-start.1.md2
-rw-r--r--docs/podman-umount.1.md6
-rw-r--r--docs/podman.1.md6
-rw-r--r--docs/tutorials/podman_tutorial.md4
-rwxr-xr-xhack/get_ci_vm.sh230
-rwxr-xr-xhack/install_catatonit.sh15
-rw-r--r--install.md60
-rw-r--r--libpod.conf26
-rw-r--r--libpod/adapter/client.go36
-rw-r--r--libpod/adapter/containers_remote.go50
-rw-r--r--libpod/adapter/images_remote.go24
-rw-r--r--libpod/adapter/info_remote.go56
-rw-r--r--libpod/adapter/runtime.go101
-rw-r--r--libpod/adapter/runtime_remote.go322
-rw-r--r--libpod/boltdb_state.go24
-rw-r--r--libpod/boltdb_state_internal.go15
-rw-r--r--libpod/boltdb_state_linux.go2
-rw-r--r--libpod/boltdb_state_unsupported.go2
-rw-r--r--libpod/common_test.go61
-rw-r--r--libpod/container.go70
-rw-r--r--libpod/container_api.go24
-rw-r--r--libpod/container_attach_linux.go (renamed from libpod/container_attach.go)21
-rw-r--r--libpod/container_attach_unsupported.go11
-rw-r--r--libpod/container_easyjson.go8191
-rw-r--r--libpod/container_graph_test.go160
-rw-r--r--libpod/container_inspect.go5
-rw-r--r--libpod/container_internal.go51
-rw-r--r--libpod/container_internal_linux.go33
-rw-r--r--libpod/container_internal_test.go4
-rw-r--r--libpod/image/image.go79
-rw-r--r--libpod/image/image_test.go55
-rw-r--r--libpod/image/parts.go123
-rw-r--r--libpod/image/parts_test.go118
-rw-r--r--libpod/image/pull.go59
-rw-r--r--libpod/image/pull_test.go28
-rw-r--r--libpod/image/utils.go10
-rw-r--r--libpod/info.go8
-rw-r--r--libpod/lock/in_memory_locks.go91
-rw-r--r--libpod/lock/lock.go61
-rw-r--r--libpod/lock/shm/shm_lock.c452
-rw-r--r--libpod/lock/shm/shm_lock.go216
-rw-r--r--libpod/lock/shm/shm_lock.h46
-rw-r--r--libpod/lock/shm/shm_lock_test.go278
-rw-r--r--libpod/lock/shm_lock_manager_linux.go102
-rw-r--r--libpod/lock/shm_lock_manager_unsupported.go29
-rw-r--r--libpod/networking_linux.go129
-rw-r--r--libpod/oci.go32
-rw-r--r--libpod/options.go6
-rw-r--r--libpod/pod.go7
-rw-r--r--libpod/pod_easyjson.go877
-rw-r--r--libpod/pod_internal.go21
-rw-r--r--libpod/runtime.go173
-rw-r--r--libpod/runtime_ctr.go38
-rw-r--r--libpod/runtime_pod_linux.go15
-rw-r--r--libpod/runtime_volume_linux.go9
-rw-r--r--libpod/runtime_volume_unsupported.go19
-rw-r--r--libpod/state_test.go916
-rw-r--r--libpod/storage.go1
-rw-r--r--libpod/version.go22
-rw-r--r--libpod/volume.go10
-rw-r--r--pkg/apparmor/apparmor.go7
-rw-r--r--pkg/apparmor/apparmor_linux.go66
-rw-r--r--pkg/apparmor/apparmor_unsupported.go16
-rw-r--r--pkg/hooks/exec/exec.go7
-rw-r--r--pkg/hooks/exec/exec_test.go6
-rw-r--r--pkg/hooks/exec/runtimeconfigfilter.go68
-rw-r--r--pkg/hooks/exec/runtimeconfigfilter_test.go266
-rw-r--r--pkg/rootless/rootless_linux.c9
-rw-r--r--pkg/rootless/rootless_unsupported.go13
-rw-r--r--pkg/spec/config_unsupported.go4
-rw-r--r--pkg/spec/createconfig.go54
-rw-r--r--pkg/spec/spec.go7
-rw-r--r--pkg/sysinfo/README.md (renamed from vendor/github.com/docker/docker/pkg/sysinfo/README.md)0
-rw-r--r--pkg/sysinfo/numcpu.go (renamed from vendor/github.com/docker/docker/pkg/sysinfo/numcpu.go)0
-rw-r--r--pkg/sysinfo/numcpu_linux.go (renamed from vendor/github.com/docker/docker/pkg/sysinfo/numcpu_linux.go)0
-rw-r--r--pkg/sysinfo/numcpu_windows.go (renamed from vendor/github.com/docker/docker/pkg/sysinfo/numcpu_windows.go)0
-rw-r--r--pkg/sysinfo/sysinfo.go (renamed from vendor/github.com/docker/docker/pkg/sysinfo/sysinfo.go)0
-rw-r--r--pkg/sysinfo/sysinfo_linux.go (renamed from vendor/github.com/docker/docker/pkg/sysinfo/sysinfo_linux.go)2
-rw-r--r--pkg/sysinfo/sysinfo_linux_test.go104
-rw-r--r--pkg/sysinfo/sysinfo_solaris.go (renamed from vendor/github.com/docker/docker/pkg/sysinfo/sysinfo_solaris.go)0
-rw-r--r--pkg/sysinfo/sysinfo_test.go26
-rw-r--r--pkg/sysinfo/sysinfo_unix.go (renamed from vendor/github.com/docker/docker/pkg/sysinfo/sysinfo_unix.go)0
-rw-r--r--pkg/sysinfo/sysinfo_windows.go (renamed from vendor/github.com/docker/docker/pkg/sysinfo/sysinfo_windows.go)0
-rw-r--r--pkg/trust/trust.go129
-rw-r--r--pkg/util/utils.go23
-rw-r--r--pkg/varlinkapi/containers.go86
-rw-r--r--pkg/varlinkapi/containers_create.go4
-rw-r--r--pkg/varlinkapi/images.go36
-rw-r--r--pkg/varlinkapi/system.go12
-rw-r--r--test/e2e/attach_test.go2
-rw-r--r--test/e2e/checkpoint_test.go47
-rw-r--r--test/e2e/commit_test.go2
-rw-r--r--test/e2e/common_test.go218
-rw-r--r--test/e2e/create_staticip_test.go2
-rw-r--r--test/e2e/create_test.go2
-rw-r--r--test/e2e/diff_test.go2
-rw-r--r--test/e2e/exec_test.go34
-rw-r--r--test/e2e/exists_test.go9
-rw-r--r--test/e2e/export_test.go2
-rw-r--r--test/e2e/generate_kube_test.go2
-rw-r--r--test/e2e/images_test.go15
-rw-r--r--test/e2e/import_test.go2
-rw-r--r--test/e2e/info_test.go2
-rw-r--r--test/e2e/inspect_test.go4
-rw-r--r--test/e2e/kill_test.go2
-rw-r--r--test/e2e/libpod_suite_remoteclient_test.go188
-rw-r--r--test/e2e/libpod_suite_test.go239
-rw-r--r--test/e2e/load_test.go2
-rw-r--r--test/e2e/logs_test.go2
-rw-r--r--test/e2e/mount_test.go2
-rw-r--r--test/e2e/namespace_test.go2
-rw-r--r--test/e2e/pause_test.go2
-rw-r--r--test/e2e/pod_create_test.go2
-rw-r--r--test/e2e/pod_infra_container_test.go2
-rw-r--r--test/e2e/pod_inspect_test.go2
-rw-r--r--test/e2e/pod_kill_test.go2
-rw-r--r--test/e2e/pod_pause_test.go2
-rw-r--r--test/e2e/pod_pod_namespaces.go2
-rw-r--r--test/e2e/pod_ps_test.go2
-rw-r--r--test/e2e/pod_restart_test.go2
-rw-r--r--test/e2e/pod_rm_test.go2
-rw-r--r--test/e2e/pod_start_test.go2
-rw-r--r--test/e2e/pod_stats_test.go2
-rw-r--r--test/e2e/pod_stop_test.go2
-rw-r--r--test/e2e/pod_top_test.go2
-rw-r--r--test/e2e/port_test.go2
-rw-r--r--test/e2e/prune_test.go2
-rw-r--r--test/e2e/ps_test.go2
-rw-r--r--test/e2e/pull_test.go2
-rw-r--r--test/e2e/push_test.go2
-rw-r--r--test/e2e/refresh_test.go2
-rw-r--r--test/e2e/restart_test.go2
-rw-r--r--test/e2e/rm_test.go2
-rw-r--r--test/e2e/rmi_test.go4
-rw-r--r--test/e2e/rootless_test.go6
-rw-r--r--test/e2e/run_cgroup_parent_test.go2
-rw-r--r--test/e2e/run_cleanup_test.go2
-rw-r--r--test/e2e/run_cpu_test.go2
-rw-r--r--test/e2e/run_device_test.go2
-rw-r--r--test/e2e/run_dns_test.go2
-rw-r--r--test/e2e/run_entrypoint_test.go2
-rw-r--r--test/e2e/run_exit_test.go2
-rw-r--r--test/e2e/run_memory_test.go2
-rw-r--r--test/e2e/run_networking_test.go2
-rw-r--r--test/e2e/run_ns_test.go2
-rw-r--r--test/e2e/run_passwd_test.go2
-rw-r--r--test/e2e/run_privileged_test.go2
-rw-r--r--test/e2e/run_restart_test.go2
-rw-r--r--test/e2e/run_selinux_test.go2
-rw-r--r--test/e2e/run_signal_test.go2
-rw-r--r--test/e2e/run_staticip_test.go2
-rw-r--r--test/e2e/run_test.go29
-rw-r--r--test/e2e/run_userns_test.go2
-rw-r--r--test/e2e/runlabel_test.go2
-rw-r--r--test/e2e/save_test.go2
-rw-r--r--test/e2e/search_test.go2
-rw-r--r--test/e2e/start_test.go12
-rw-r--r--test/e2e/stats_test.go2
-rw-r--r--test/e2e/stop_test.go2
-rw-r--r--test/e2e/systemd_test.go2
-rw-r--r--test/e2e/tag_test.go2
-rw-r--r--test/e2e/top_test.go2
-rw-r--r--test/e2e/trust_test.go2
-rw-r--r--test/e2e/volume_create_test.go2
-rw-r--r--test/e2e/volume_inspect_test.go2
-rw-r--r--test/e2e/volume_ls_test.go2
-rw-r--r--test/e2e/volume_prune_test.go2
-rw-r--r--test/e2e/volume_rm_test.go2
-rw-r--r--test/e2e/wait_test.go2
-rw-r--r--test/install/Dockerfile.Centos2
-rw-r--r--test/install/Dockerfile.Fedora2
-rwxr-xr-xtest/test_podman_baseline.sh24
-rwxr-xr-xtest/test_podman_pods.sh8
-rw-r--r--test/utils/utils.go24
-rw-r--r--transfer.md41
-rw-r--r--troubleshooting.md42
-rw-r--r--vendor.conf168
-rw-r--r--vendor/github.com/Azure/go-ansiterm/csi_entry_state.go4
-rw-r--r--vendor/github.com/Azure/go-ansiterm/csi_param_state.go4
-rw-r--r--vendor/github.com/Azure/go-ansiterm/escape_intermediate_state.go4
-rw-r--r--vendor/github.com/Azure/go-ansiterm/escape_state.go4
-rw-r--r--vendor/github.com/Azure/go-ansiterm/osc_string_state.go2
-rw-r--r--vendor/github.com/Azure/go-ansiterm/parser.go99
-rw-r--r--vendor/github.com/Azure/go-ansiterm/parser_action_helpers.go4
-rw-r--r--vendor/github.com/Azure/go-ansiterm/parser_actions.go17
-rw-r--r--vendor/github.com/Azure/go-ansiterm/winterm/ansi.go2
-rw-r--r--vendor/github.com/Azure/go-ansiterm/winterm/api.go27
-rw-r--r--vendor/github.com/Azure/go-ansiterm/winterm/cursor_helpers.go2
-rw-r--r--vendor/github.com/Azure/go-ansiterm/winterm/scroll_helper.go4
-rw-r--r--vendor/github.com/Azure/go-ansiterm/winterm/win_event_handler.go117
-rw-r--r--vendor/github.com/Microsoft/go-winio/backuptar/tar.go2
-rw-r--r--vendor/github.com/Microsoft/go-winio/ea.go274
-rw-r--r--vendor/github.com/Microsoft/go-winio/file.go3
-rw-r--r--vendor/github.com/Microsoft/go-winio/fileinfo.go3
-rw-r--r--vendor/github.com/Microsoft/go-winio/pipe.go121
-rw-r--r--vendor/github.com/Microsoft/go-winio/zsyscall_windows.go8
-rw-r--r--vendor/github.com/Microsoft/hcsshim/README.md49
-rw-r--r--vendor/github.com/Microsoft/hcsshim/activatelayer.go28
-rw-r--r--vendor/github.com/Microsoft/hcsshim/container.go742
-rw-r--r--vendor/github.com/Microsoft/hcsshim/createlayer.go27
-rw-r--r--vendor/github.com/Microsoft/hcsshim/createsandboxlayer.go35
-rw-r--r--vendor/github.com/Microsoft/hcsshim/deactivatelayer.go26
-rw-r--r--vendor/github.com/Microsoft/hcsshim/destroylayer.go27
-rw-r--r--vendor/github.com/Microsoft/hcsshim/errors.go120
-rw-r--r--vendor/github.com/Microsoft/hcsshim/expandsandboxsize.go26
-rw-r--r--vendor/github.com/Microsoft/hcsshim/exportlayer.go156
-rw-r--r--vendor/github.com/Microsoft/hcsshim/guid.go19
-rw-r--r--vendor/github.com/Microsoft/hcsshim/hcsshim.go146
-rw-r--r--vendor/github.com/Microsoft/hcsshim/hnsendpoint.go412
-rw-r--r--vendor/github.com/Microsoft/hcsshim/hnsglobals.go16
-rw-r--r--vendor/github.com/Microsoft/hcsshim/hnsnetwork.go178
-rw-r--r--vendor/github.com/Microsoft/hcsshim/hnspolicy.go152
-rw-r--r--vendor/github.com/Microsoft/hcsshim/hnspolicylist.go243
-rw-r--r--vendor/github.com/Microsoft/hcsshim/hnssupport.go13
-rw-r--r--vendor/github.com/Microsoft/hcsshim/importlayer.go212
-rw-r--r--vendor/github.com/Microsoft/hcsshim/interface.go101
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/guestrequest/types.go85
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/guid/guid.go69
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hcs/callback.go (renamed from vendor/github.com/Microsoft/hcsshim/callback.go)15
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hcs/cgo.go (renamed from vendor/github.com/Microsoft/hcsshim/cgo.go)2
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hcs/errors.go284
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hcs/hcs.go48
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hcs/log.go15
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hcs/process.go465
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go667
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hcs/utils.go (renamed from vendor/github.com/Microsoft/hcsshim/utils.go)2
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hcs/waithelper.go (renamed from vendor/github.com/Microsoft/hcsshim/waithelper.go)10
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hcs/watcher.go33
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hcs/zsyscall_windows.go462
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hcserror/hcserror.go51
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hns/hns.go23
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hns/hnsendpoint.go260
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hns/hnsfuncs.go (renamed from vendor/github.com/Microsoft/hcsshim/hnsfuncs.go)8
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hns/hnsglobals.go28
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hns/hnsnetwork.go141
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go98
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicylist.go201
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hns/hnssupport.go49
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hns/namespace.go110
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/hns/zsyscall_windows.go74
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/interop/interop.go27
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go48
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/logfields/fields.go37
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/longpath/longpath.go24
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/mergemaps/merge.go52
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/safefile/safeopen.go431
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/safefile/zsyscall_windows.go79
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema1/schema1.go245
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/attachment.go31
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/battery.go13
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/cache_query_stats_response.go19
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/chipset.go27
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/close_handle.go15
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/com_port.go18
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/compute_system.go27
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/configuration.go72
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/console_size.go17
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/container.go35
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/container_credential_guard_state.go25
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/container_memory_information.go26
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/device.go16
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/devices.go43
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/enhanced_mode_video.go15
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/flexible_io_device.go19
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_connection.go19
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_connection_info.go21
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_crash_reporting.go15
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_os.go15
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_state.go22
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/hosted_system.go17
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket.go17
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket_2.go16
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket_service_config.go22
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket_system_config.go22
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/keyboard.go13
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/layer.go22
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/linux_kernel_direct.go18
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/mapped_directory.go21
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/mapped_pipe.go19
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/memory.go15
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/memory_2.go25
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/memory_information_for_vm.go19
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/memory_stats.go20
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/modify_setting_request.go20
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/mouse.go13
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/network_adapter.go17
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/networking.go24
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/pause_notification.go16
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/pause_options.go18
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/plan9.go15
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/plan9_share.go26
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/process_details.go34
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/process_modify_request.go20
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/process_parameters.go47
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/process_status.go22
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/processor.go19
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/processor_2.go21
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/processor_stats.go20
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/properties.go47
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/property_query.go16
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/rdp_connection_options.go17
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/registry_changes.go17
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/registry_key.go19
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/registry_value.go31
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/restore_state.go19
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/save_options.go19
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/scsi.go16
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/shared_memory_configuration.go15
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/shared_memory_region.go23
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/shared_memory_region_info.go17
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/silo_properties.go18
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/statistics.go30
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/storage.go21
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/storage_qo_s.go17
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/storage_stats.go22
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/topology.go17
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/uefi.go21
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/uefi_boot_entry.go23
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/version.go17
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/video_monitor.go19
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_machine.go29
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_node_info.go21
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_p_mem_controller.go20
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_p_mem_device.go19
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_smb.go17
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_smb_share.go21
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_smb_share_options.go63
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/vm_memory.go27
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/schema2/windows_crash_reporting.go17
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/timeout/timeout.go70
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/activatelayer.go25
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/baselayer.go (renamed from vendor/github.com/Microsoft/hcsshim/baselayer.go)58
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/createlayer.go23
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/createscratchlayer.go31
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/deactivatelayer.go22
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/destroylayer.go23
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/expandscratchsize.go22
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/exportlayer.go68
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/getlayermountpath.go (renamed from vendor/github.com/Microsoft/hcsshim/getlayermountpath.go)30
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/getsharedbaseimages.go (renamed from vendor/github.com/Microsoft/hcsshim/getsharedbaseimages.go)12
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/grantvmaccess.go24
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/importlayer.go127
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerexists.go25
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerid.go13
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerutils.go (renamed from vendor/github.com/Microsoft/hcsshim/layerutils.go)31
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/legacy.go (renamed from vendor/github.com/Microsoft/hcsshim/legacy.go)350
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/nametoguid.go24
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/preparelayer.go (renamed from vendor/github.com/Microsoft/hcsshim/preparelayer.go)22
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/processimage.go (renamed from vendor/github.com/Microsoft/hcsshim/processimage.go)2
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/unpreparelayer.go23
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/wclayer.go27
-rw-r--r--vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go457
-rw-r--r--vendor/github.com/Microsoft/hcsshim/layer.go106
-rw-r--r--vendor/github.com/Microsoft/hcsshim/layerexists.go30
-rw-r--r--vendor/github.com/Microsoft/hcsshim/nametoguid.go20
-rw-r--r--vendor/github.com/Microsoft/hcsshim/process.go342
-rw-r--r--vendor/github.com/Microsoft/hcsshim/unpreparelayer.go27
-rw-r--r--vendor/github.com/Microsoft/hcsshim/version.go7
-rw-r--r--vendor/github.com/Microsoft/hcsshim/zhcsshim.go1042
-rw-r--r--vendor/github.com/Microsoft/hcsshim/zsyscall_windows.go52
-rw-r--r--vendor/github.com/boltdb/bolt/README.md19
-rw-r--r--vendor/github.com/boltdb/bolt/db.go4
-rw-r--r--vendor/github.com/boltdb/bolt/tx.go4
-rw-r--r--vendor/github.com/buger/goterm/LICENSE21
-rw-r--r--vendor/github.com/buger/goterm/README.md10
-rw-r--r--vendor/github.com/buger/goterm/plot.go8
-rw-r--r--vendor/github.com/buger/goterm/terminal.go14
-rw-r--r--vendor/github.com/buger/goterm/terminal_sysioctl.go28
-rw-r--r--vendor/github.com/checkpoint-restore/go-criu/README.md33
-rw-r--r--vendor/github.com/checkpoint-restore/go-criu/rpc/rpc.pb.go248
-rw-r--r--vendor/github.com/checkpoint-restore/go-criu/test/main.go133
-rw-r--r--vendor/github.com/checkpoint-restore/go-criu/test/phaul-main.go192
-rw-r--r--vendor/github.com/checkpoint-restore/go-criu/test/piggie.c57
-rw-r--r--vendor/github.com/containerd/cgroups/README.md14
-rw-r--r--vendor/github.com/containerd/cgroups/blkio.go55
-rw-r--r--vendor/github.com/containerd/cgroups/cgroup.go51
-rw-r--r--vendor/github.com/containerd/cgroups/control.go11
-rw-r--r--vendor/github.com/containerd/cgroups/cpuset.go10
-rw-r--r--vendor/github.com/containerd/cgroups/net_prio.go2
-rw-r--r--vendor/github.com/containerd/cgroups/subsystem.go2
-rw-r--r--vendor/github.com/containerd/cgroups/systemd.go2
-rw-r--r--vendor/github.com/containerd/cgroups/utils.go29
-rw-r--r--vendor/github.com/containerd/continuity/LICENSE19
-rw-r--r--vendor/github.com/containerd/continuity/README.md10
-rw-r--r--vendor/github.com/containerd/continuity/pathdriver/path_driver.go16
-rw-r--r--vendor/github.com/containerd/continuity/vendor.conf2
-rw-r--r--vendor/github.com/containernetworking/plugins/README.md8
-rw-r--r--vendor/github.com/containernetworking/plugins/pkg/ns/README.md15
-rw-r--r--vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go93
-rw-r--r--vendor/github.com/containers/buildah/common.go14
-rw-r--r--vendor/github.com/containers/buildah/config.go3
-rw-r--r--vendor/github.com/containers/buildah/image.go4
-rw-r--r--vendor/github.com/containers/buildah/imagebuildah/build.go8
-rw-r--r--vendor/github.com/containers/buildah/imagebuildah/chroot_symlink.go5
-rw-r--r--vendor/github.com/containers/buildah/pkg/blobcache/blobcache.go24
-rw-r--r--vendor/github.com/containers/buildah/pkg/cli/common.go4
-rw-r--r--vendor/github.com/containers/buildah/run.go16
-rw-r--r--vendor/github.com/containers/buildah/unshare/unshare.c3
-rw-r--r--vendor/github.com/containers/buildah/util.go23
-rw-r--r--vendor/github.com/containers/buildah/util/util.go50
-rw-r--r--vendor/github.com/containers/buildah/vendor.conf14
-rw-r--r--vendor/github.com/containers/image/copy/copy.go145
-rw-r--r--vendor/github.com/containers/image/directory/directory_dest.go5
-rw-r--r--vendor/github.com/containers/image/directory/directory_src.go5
-rw-r--r--vendor/github.com/containers/image/docker/docker_client.go35
-rw-r--r--vendor/github.com/containers/image/docker/docker_image_dest.go5
-rw-r--r--vendor/github.com/containers/image/docker/docker_image_src.go5
-rw-r--r--vendor/github.com/containers/image/docker/tarfile/dest.go5
-rw-r--r--vendor/github.com/containers/image/docker/tarfile/src.go5
-rw-r--r--vendor/github.com/containers/image/oci/archive/oci_dest.go5
-rw-r--r--vendor/github.com/containers/image/oci/archive/oci_src.go5
-rw-r--r--vendor/github.com/containers/image/oci/layout/oci_dest.go5
-rw-r--r--vendor/github.com/containers/image/oci/layout/oci_src.go5
-rw-r--r--vendor/github.com/containers/image/openshift/openshift.go10
-rw-r--r--vendor/github.com/containers/image/ostree/ostree_dest.go9
-rw-r--r--vendor/github.com/containers/image/ostree/ostree_src.go9
-rw-r--r--vendor/github.com/containers/image/pkg/blobinfocache/default.go2
-rw-r--r--vendor/github.com/containers/image/pkg/compression/compression.go4
-rw-r--r--vendor/github.com/containers/image/pkg/sysregistriesv2/system_registries_v2.go35
-rw-r--r--vendor/github.com/containers/image/storage/storage_image.go28
-rw-r--r--vendor/github.com/containers/image/tarball/tarball_src.go10
-rw-r--r--vendor/github.com/containers/image/types/types.go4
-rw-r--r--vendor/github.com/containers/image/vendor.conf10
-rw-r--r--vendor/github.com/containers/storage/containers_ffjson.go2
-rw-r--r--vendor/github.com/containers/storage/drivers/aufs/aufs.go5
-rw-r--r--vendor/github.com/containers/storage/drivers/btrfs/btrfs.go5
-rw-r--r--vendor/github.com/containers/storage/drivers/devmapper/device_setup.go2
-rw-r--r--vendor/github.com/containers/storage/drivers/devmapper/driver.go5
-rw-r--r--vendor/github.com/containers/storage/drivers/driver.go3
-rw-r--r--vendor/github.com/containers/storage/drivers/overlay/check.go66
-rw-r--r--vendor/github.com/containers/storage/drivers/overlay/overlay.go57
-rw-r--r--vendor/github.com/containers/storage/drivers/template.go45
-rw-r--r--vendor/github.com/containers/storage/drivers/vfs/driver.go8
-rw-r--r--vendor/github.com/containers/storage/drivers/windows/windows.go5
-rw-r--r--vendor/github.com/containers/storage/drivers/zfs/zfs.go65
-rw-r--r--vendor/github.com/containers/storage/drivers/zfs/zfs_freebsd.go2
-rw-r--r--vendor/github.com/containers/storage/drivers/zfs/zfs_linux.go21
-rw-r--r--vendor/github.com/containers/storage/drivers/zfs/zfs_solaris.go59
-rw-r--r--vendor/github.com/containers/storage/drivers/zfs/zfs_unsupported.go2
-rw-r--r--vendor/github.com/containers/storage/images.go4
-rw-r--r--vendor/github.com/containers/storage/images_ffjson.go2
-rw-r--r--vendor/github.com/containers/storage/layers.go52
-rw-r--r--vendor/github.com/containers/storage/layers_ffjson.go2
-rw-r--r--vendor/github.com/containers/storage/pkg/archive/archive.go9
-rw-r--r--vendor/github.com/containers/storage/pkg/archive/archive_110.go11
-rw-r--r--vendor/github.com/containers/storage/pkg/archive/archive_19.go3
-rw-r--r--vendor/github.com/containers/storage/pkg/archive/archive_ffjson.go2
-rw-r--r--vendor/github.com/containers/storage/store.go65
-rw-r--r--vendor/github.com/containers/storage/vendor.conf5
-rw-r--r--vendor/github.com/coreos/go-iptables/iptables/iptables.go97
-rw-r--r--vendor/github.com/cyphar/filepath-securejoin/join.go3
-rw-r--r--vendor/github.com/docker/distribution/blobs.go2
-rw-r--r--vendor/github.com/docker/distribution/context/context.go85
-rw-r--r--vendor/github.com/docker/distribution/context/doc.go89
-rw-r--r--vendor/github.com/docker/distribution/context/http.go366
-rw-r--r--vendor/github.com/docker/distribution/context/logger.go116
-rw-r--r--vendor/github.com/docker/distribution/context/trace.go104
-rw-r--r--vendor/github.com/docker/distribution/context/util.go24
-rw-r--r--vendor/github.com/docker/distribution/context/version.go16
-rw-r--r--vendor/github.com/docker/distribution/manifests.go2
-rw-r--r--vendor/github.com/docker/distribution/registry.go3
-rw-r--r--vendor/github.com/docker/distribution/registry/client/blob_writer.go2
-rw-r--r--vendor/github.com/docker/distribution/registry/client/repository.go2
-rw-r--r--vendor/github.com/docker/distribution/registry/storage/cache/cachedblobdescriptorstore.go30
-rw-r--r--vendor/github.com/docker/distribution/registry/storage/cache/memory/memory.go2
-rw-r--r--vendor/github.com/docker/distribution/tags.go2
-rw-r--r--vendor/github.com/docker/distribution/uuid/uuid.go126
-rw-r--r--vendor/github.com/docker/docker/contrib/README.md4
-rw-r--r--vendor/github.com/docker/docker/contrib/nnp-test/nnp-test.c10
-rw-r--r--vendor/github.com/docker/docker/contrib/syscall-test/acct.c16
-rw-r--r--vendor/github.com/docker/docker/contrib/syscall-test/exit32.s7
-rw-r--r--vendor/github.com/docker/docker/contrib/syscall-test/ns.c63
-rw-r--r--vendor/github.com/docker/docker/contrib/syscall-test/raw.c14
-rw-r--r--vendor/github.com/docker/docker/contrib/syscall-test/setgid.c11
-rw-r--r--vendor/github.com/docker/docker/contrib/syscall-test/setuid.c11
-rw-r--r--vendor/github.com/docker/docker/contrib/syscall-test/socket.c30
-rw-r--r--vendor/github.com/docker/docker/contrib/syscall-test/userns.c63
-rw-r--r--vendor/github.com/docker/docker/hack/README.md60
-rw-r--r--vendor/github.com/docker/docker/hack/integration-cli-on-swarm/README.md69
-rw-r--r--vendor/github.com/docker/docker/hack/integration-cli-on-swarm/agent/vendor.conf2
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/README.md1
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/archive.go1237
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/archive_other.go7
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/changes.go441
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/changes_linux.go313
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/changes_other.go97
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/changes_unix.go37
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/changes_windows.go30
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/copy.go472
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/copy_unix.go11
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/copy_windows.go9
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/diff.go256
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/time_linux.go16
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/time_unsupported.go16
-rw-r--r--vendor/github.com/docker/docker/pkg/archive/wrap.go59
-rw-r--r--vendor/github.com/docker/go-connections/nat/nat.go2
-rw-r--r--vendor/github.com/docker/go-connections/tlsconfig/certpool_other.go1
-rw-r--r--vendor/github.com/docker/go-connections/tlsconfig/config.go26
-rw-r--r--vendor/github.com/docker/spdystream/connection.go2
-rw-r--r--vendor/github.com/docker/spdystream/handlers.go4
-rw-r--r--vendor/github.com/fsnotify/fsnotify/inotify.go57
-rw-r--r--vendor/github.com/fsnotify/fsnotify/kqueue.go62
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/LICENSE17
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/auth.go24
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/client.go3
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/container.go1
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/env.go2
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/exec.go4
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/archive/archive.go505
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_linux.go (renamed from vendor/github.com/docker/docker/pkg/archive/archive_linux.go)12
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_other.go11
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_unix.go (renamed from vendor/github.com/docker/docker/pkg/archive/archive_unix.go)87
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_windows.go (renamed from vendor/github.com/docker/docker/pkg/archive/archive_windows.go)58
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/archive/changes_unix.go16
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/archive/changes_windows.go11
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/archive/copy.go29
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/archive/whiteouts.go (renamed from vendor/github.com/docker/docker/pkg/archive/whiteouts.go)4
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/jsonmessage/jsonmessage.go (renamed from vendor/github.com/docker/docker/pkg/jsonmessage/jsonmessage.go)50
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/term/term.go13
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/term/winsize.go16
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/internal/term/winsize_windows.go22
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/plugin.go2
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/tar.go2
-rw-r--r--vendor/github.com/fsouza/go-dockerclient/volume.go2
-rw-r--r--vendor/github.com/ghodss/yaml/README.md5
-rw-r--r--vendor/github.com/gogo/protobuf/LICENSE5
-rw-r--r--vendor/github.com/gogo/protobuf/README84
-rw-r--r--vendor/github.com/gogo/protobuf/Readme.md58
-rw-r--r--vendor/github.com/gogo/protobuf/gogoproto/doc.go2
-rw-r--r--vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go394
-rw-r--r--vendor/github.com/gogo/protobuf/gogoproto/gogo.proto12
-rw-r--r--vendor/github.com/gogo/protobuf/gogoproto/helper.go64
-rw-r--r--vendor/github.com/gogo/protobuf/proto/clone.go46
-rw-r--r--vendor/github.com/gogo/protobuf/proto/custom_gogo.go39
-rw-r--r--vendor/github.com/gogo/protobuf/proto/decode.go676
-rw-r--r--vendor/github.com/gogo/protobuf/proto/decode_gogo.go172
-rw-r--r--vendor/github.com/gogo/protobuf/proto/discard.go350
-rw-r--r--vendor/github.com/gogo/protobuf/proto/duration_gogo.go154
-rw-r--r--vendor/github.com/gogo/protobuf/proto/encode.go1207
-rw-r--r--vendor/github.com/gogo/protobuf/proto/encode_gogo.go317
-rw-r--r--vendor/github.com/gogo/protobuf/proto/equal.go30
-rw-r--r--vendor/github.com/gogo/protobuf/proto/extensions.go283
-rw-r--r--vendor/github.com/gogo/protobuf/proto/extensions_gogo.go162
-rw-r--r--vendor/github.com/gogo/protobuf/proto/lib.go147
-rw-r--r--vendor/github.com/gogo/protobuf/proto/lib_gogo.go8
-rw-r--r--vendor/github.com/gogo/protobuf/proto/message_set.go81
-rw-r--r--vendor/github.com/gogo/protobuf/proto/pointer_reflect.go595
-rw-r--r--vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go64
-rw-r--r--vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go366
-rw-r--r--vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go100
-rw-r--r--vendor/github.com/gogo/protobuf/proto/properties.go504
-rw-r--r--vendor/github.com/gogo/protobuf/proto/properties_gogo.go81
-rw-r--r--vendor/github.com/gogo/protobuf/proto/table_marshal.go3006
-rw-r--r--vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go388
-rw-r--r--vendor/github.com/gogo/protobuf/proto/table_merge.go657
-rw-r--r--vendor/github.com/gogo/protobuf/proto/table_unmarshal.go2245
-rw-r--r--vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go385
-rw-r--r--vendor/github.com/gogo/protobuf/proto/text.go88
-rw-r--r--vendor/github.com/gogo/protobuf/proto/text_parser.go101
-rw-r--r--vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go180
-rw-r--r--vendor/github.com/gogo/protobuf/proto/wrappers.go1888
-rw-r--r--vendor/github.com/gogo/protobuf/proto/wrappers_gogo.go113
-rw-r--r--vendor/github.com/gogo/protobuf/protobuf/google/protobuf/any.proto31
-rw-r--r--vendor/github.com/gogo/protobuf/protobuf/google/protobuf/api.proto210
-rw-r--r--vendor/github.com/gogo/protobuf/protobuf/google/protobuf/compiler/plugin.proto4
-rw-r--r--vendor/github.com/gogo/protobuf/protobuf/google/protobuf/descriptor.proto66
-rw-r--r--vendor/github.com/gogo/protobuf/protobuf/google/protobuf/duration.proto15
-rw-r--r--vendor/github.com/gogo/protobuf/protobuf/google/protobuf/field_mask.proto6
-rw-r--r--vendor/github.com/gogo/protobuf/protobuf/google/protobuf/source_context.proto48
-rw-r--r--vendor/github.com/gogo/protobuf/protobuf/google/protobuf/timestamp.proto27
-rw-r--r--vendor/github.com/gogo/protobuf/protobuf/google/protobuf/type.proto187
-rw-r--r--vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go1314
-rw-r--r--vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go101
-rw-r--r--vendor/github.com/gogo/protobuf/test/issue270/a/a1.proto12
-rw-r--r--vendor/github.com/gogo/protobuf/test/issue270/a/a2.proto12
-rw-r--r--vendor/github.com/gogo/protobuf/test/issue270/b/b.proto6
-rw-r--r--vendor/github.com/golang/protobuf/LICENSE3
-rw-r--r--vendor/github.com/golang/protobuf/README.md86
-rw-r--r--vendor/github.com/golang/protobuf/proto/clone.go46
-rw-r--r--vendor/github.com/golang/protobuf/proto/decode.go668
-rw-r--r--vendor/github.com/golang/protobuf/proto/discard.go350
-rw-r--r--vendor/github.com/golang/protobuf/proto/encode.go1200
-rw-r--r--vendor/github.com/golang/protobuf/proto/equal.go30
-rw-r--r--vendor/github.com/golang/protobuf/proto/extensions.go205
-rw-r--r--vendor/github.com/golang/protobuf/proto/lib.go129
-rw-r--r--vendor/github.com/golang/protobuf/proto/message_set.go81
-rw-r--r--vendor/github.com/golang/protobuf/proto/pointer_reflect.go595
-rw-r--r--vendor/github.com/golang/protobuf/proto/pointer_unsafe.go366
-rw-r--r--vendor/github.com/golang/protobuf/proto/properties.go442
-rw-r--r--vendor/github.com/golang/protobuf/proto/table_marshal.go2767
-rw-r--r--vendor/github.com/golang/protobuf/proto/table_merge.go654
-rw-r--r--vendor/github.com/golang/protobuf/proto/table_unmarshal.go2051
-rw-r--r--vendor/github.com/golang/protobuf/proto/text.go65
-rw-r--r--vendor/github.com/golang/protobuf/proto/text_parser.go81
-rw-r--r--vendor/github.com/google/gofuzz/fuzz.go96
-rw-r--r--vendor/github.com/gorilla/context/README.md3
-rw-r--r--vendor/github.com/gorilla/context/doc.go6
-rw-r--r--vendor/github.com/gorilla/mux/README.md460
-rw-r--r--vendor/github.com/gorilla/mux/doc.go76
-rw-r--r--vendor/github.com/gorilla/mux/middleware.go72
-rw-r--r--vendor/github.com/gorilla/mux/mux.go116
-rw-r--r--vendor/github.com/gorilla/mux/regexp.go81
-rw-r--r--vendor/github.com/gorilla/mux/route.go163
-rw-r--r--vendor/github.com/gorilla/mux/test_helpers.go19
-rw-r--r--vendor/github.com/hashicorp/errwrap/LICENSE1
-rw-r--r--vendor/github.com/hashicorp/errwrap/README.md2
-rw-r--r--vendor/github.com/hashicorp/go-multierror/format.go6
-rw-r--r--vendor/github.com/hashicorp/go-multierror/sort.go16
-rw-r--r--vendor/github.com/imdario/mergo/README.md138
-rw-r--r--vendor/github.com/imdario/mergo/map.go52
-rw-r--r--vendor/github.com/imdario/mergo/merge.go159
-rw-r--r--vendor/github.com/imdario/mergo/mergo.go9
-rw-r--r--vendor/github.com/json-iterator/go/README.md15
-rw-r--r--vendor/github.com/json-iterator/go/adapter.go (renamed from vendor/github.com/json-iterator/go/feature_adapter.go)55
-rw-r--r--vendor/github.com/json-iterator/go/any.go (renamed from vendor/github.com/json-iterator/go/feature_any.go)85
-rw-r--r--vendor/github.com/json-iterator/go/any_array.go (renamed from vendor/github.com/json-iterator/go/feature_any_array.go)0
-rw-r--r--vendor/github.com/json-iterator/go/any_bool.go (renamed from vendor/github.com/json-iterator/go/feature_any_bool.go)0
-rw-r--r--vendor/github.com/json-iterator/go/any_float.go (renamed from vendor/github.com/json-iterator/go/feature_any_float.go)0
-rw-r--r--vendor/github.com/json-iterator/go/any_int32.go (renamed from vendor/github.com/json-iterator/go/feature_any_int32.go)0
-rw-r--r--vendor/github.com/json-iterator/go/any_int64.go (renamed from vendor/github.com/json-iterator/go/feature_any_int64.go)0
-rw-r--r--vendor/github.com/json-iterator/go/any_invalid.go (renamed from vendor/github.com/json-iterator/go/feature_any_invalid.go)0
-rw-r--r--vendor/github.com/json-iterator/go/any_nil.go (renamed from vendor/github.com/json-iterator/go/feature_any_nil.go)0
-rw-r--r--vendor/github.com/json-iterator/go/any_number.go (renamed from vendor/github.com/json-iterator/go/feature_any_number.go)37
-rw-r--r--vendor/github.com/json-iterator/go/any_object.go (renamed from vendor/github.com/json-iterator/go/feature_any_object.go)0
-rw-r--r--vendor/github.com/json-iterator/go/any_str.go (renamed from vendor/github.com/json-iterator/go/feature_any_string.go)2
-rw-r--r--vendor/github.com/json-iterator/go/any_uint32.go (renamed from vendor/github.com/json-iterator/go/feature_any_uint32.go)0
-rw-r--r--vendor/github.com/json-iterator/go/any_uint64.go (renamed from vendor/github.com/json-iterator/go/feature_any_uint64.go)0
-rw-r--r--vendor/github.com/json-iterator/go/config.go375
-rw-r--r--vendor/github.com/json-iterator/go/feature_config.go312
-rw-r--r--vendor/github.com/json-iterator/go/feature_json_number.go15
-rw-r--r--vendor/github.com/json-iterator/go/feature_reflect.go691
-rw-r--r--vendor/github.com/json-iterator/go/feature_reflect_array.go99
-rw-r--r--vendor/github.com/json-iterator/go/feature_reflect_map.go244
-rw-r--r--vendor/github.com/json-iterator/go/feature_reflect_native.go672
-rw-r--r--vendor/github.com/json-iterator/go/feature_reflect_slice.go149
-rw-r--r--vendor/github.com/json-iterator/go/feature_stream_int.go320
-rw-r--r--vendor/github.com/json-iterator/go/iter.go (renamed from vendor/github.com/json-iterator/go/feature_iter.go)23
-rw-r--r--vendor/github.com/json-iterator/go/iter_array.go (renamed from vendor/github.com/json-iterator/go/feature_iter_array.go)6
-rw-r--r--vendor/github.com/json-iterator/go/iter_float.go (renamed from vendor/github.com/json-iterator/go/feature_iter_float.go)6
-rw-r--r--vendor/github.com/json-iterator/go/iter_int.go (renamed from vendor/github.com/json-iterator/go/feature_iter_int.go)87
-rw-r--r--vendor/github.com/json-iterator/go/iter_object.go (renamed from vendor/github.com/json-iterator/go/feature_iter_object.go)125
-rw-r--r--vendor/github.com/json-iterator/go/iter_skip.go (renamed from vendor/github.com/json-iterator/go/feature_iter_skip.go)6
-rw-r--r--vendor/github.com/json-iterator/go/iter_skip_sloppy.go (renamed from vendor/github.com/json-iterator/go/feature_iter_skip_sloppy.go)2
-rw-r--r--vendor/github.com/json-iterator/go/iter_skip_strict.go (renamed from vendor/github.com/json-iterator/go/feature_iter_skip_strict.go)4
-rw-r--r--vendor/github.com/json-iterator/go/iter_str.go (renamed from vendor/github.com/json-iterator/go/feature_iter_string.go)10
-rw-r--r--vendor/github.com/json-iterator/go/pool.go (renamed from vendor/github.com/json-iterator/go/feature_pool.go)37
-rw-r--r--vendor/github.com/json-iterator/go/reflect.go332
-rw-r--r--vendor/github.com/json-iterator/go/reflect_array.go104
-rw-r--r--vendor/github.com/json-iterator/go/reflect_dynamic.go70
-rw-r--r--vendor/github.com/json-iterator/go/reflect_extension.go (renamed from vendor/github.com/json-iterator/go/feature_reflect_extension.go)298
-rw-r--r--vendor/github.com/json-iterator/go/reflect_json_number.go112
-rw-r--r--vendor/github.com/json-iterator/go/reflect_json_raw_message.go60
-rw-r--r--vendor/github.com/json-iterator/go/reflect_map.go326
-rw-r--r--vendor/github.com/json-iterator/go/reflect_marshaler.go218
-rw-r--r--vendor/github.com/json-iterator/go/reflect_native.go451
-rw-r--r--vendor/github.com/json-iterator/go/reflect_optional.go133
-rw-r--r--vendor/github.com/json-iterator/go/reflect_slice.go99
-rw-r--r--vendor/github.com/json-iterator/go/reflect_struct_decoder.go (renamed from vendor/github.com/json-iterator/go/feature_reflect_struct_decoder.go)528
-rw-r--r--vendor/github.com/json-iterator/go/reflect_struct_encoder.go (renamed from vendor/github.com/json-iterator/go/feature_reflect_object.go)158
-rw-r--r--vendor/github.com/json-iterator/go/stream.go (renamed from vendor/github.com/json-iterator/go/feature_stream.go)168
-rw-r--r--vendor/github.com/json-iterator/go/stream_float.go (renamed from vendor/github.com/json-iterator/go/feature_stream_float.go)14
-rw-r--r--vendor/github.com/json-iterator/go/stream_int.go190
-rw-r--r--vendor/github.com/json-iterator/go/stream_str.go (renamed from vendor/github.com/json-iterator/go/feature_stream_string.go)40
-rw-r--r--vendor/github.com/klauspost/compress/LICENSE27
-rw-r--r--vendor/github.com/klauspost/compress/README.md160
-rw-r--r--vendor/github.com/klauspost/compress/flate/copy.go32
-rw-r--r--vendor/github.com/klauspost/compress/flate/crc32_amd64.go42
-rw-r--r--vendor/github.com/klauspost/compress/flate/crc32_amd64.s214
-rw-r--r--vendor/github.com/klauspost/compress/flate/crc32_noasm.go35
-rw-r--r--vendor/github.com/klauspost/compress/flate/deflate.go1353
-rw-r--r--vendor/github.com/klauspost/compress/flate/dict_decoder.go184
-rw-r--r--vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go701
-rw-r--r--vendor/github.com/klauspost/compress/flate/huffman_code.go344
-rw-r--r--vendor/github.com/klauspost/compress/flate/inflate.go880
-rw-r--r--vendor/github.com/klauspost/compress/flate/reverse_bits.go48
-rw-r--r--vendor/github.com/klauspost/compress/flate/snappy.go900
-rw-r--r--vendor/github.com/klauspost/compress/flate/token.go115
-rw-r--r--vendor/github.com/klauspost/cpuid/LICENSE22
-rw-r--r--vendor/github.com/klauspost/cpuid/README.md145
-rw-r--r--vendor/github.com/klauspost/cpuid/cpuid.go1040
-rw-r--r--vendor/github.com/klauspost/cpuid/cpuid_386.s42
-rw-r--r--vendor/github.com/klauspost/cpuid/cpuid_amd64.s42
-rw-r--r--vendor/github.com/klauspost/cpuid/detect_intel.go17
-rw-r--r--vendor/github.com/klauspost/cpuid/detect_ref.go23
-rw-r--r--vendor/github.com/klauspost/cpuid/generate.go4
-rw-r--r--vendor/github.com/klauspost/pgzip/GO_LICENSE27
-rw-r--r--vendor/github.com/klauspost/pgzip/LICENSE22
-rw-r--r--vendor/github.com/klauspost/pgzip/README.md136
-rw-r--r--vendor/github.com/klauspost/pgzip/gunzip.go573
-rw-r--r--vendor/github.com/klauspost/pgzip/gzip.go501
-rw-r--r--vendor/github.com/mailru/easyjson/LICENSE7
-rw-r--r--vendor/github.com/mailru/easyjson/README.md333
-rw-r--r--vendor/github.com/mailru/easyjson/buffer/pool.go270
-rw-r--r--vendor/github.com/mailru/easyjson/helpers.go78
-rw-r--r--vendor/github.com/mailru/easyjson/jlexer/bytestostr.go24
-rw-r--r--vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go13
-rw-r--r--vendor/github.com/mailru/easyjson/jlexer/error.go15
-rw-r--r--vendor/github.com/mailru/easyjson/jlexer/lexer.go1181
-rw-r--r--vendor/github.com/mailru/easyjson/jwriter/writer.go390
-rw-r--r--vendor/github.com/mailru/easyjson/raw.go45
-rw-r--r--vendor/github.com/mattn/go-runewidth/LICENSE21
-rw-r--r--vendor/github.com/mattn/go-runewidth/README.mkd1
-rw-r--r--vendor/github.com/mattn/go-runewidth/runewidth.go1157
-rw-r--r--vendor/github.com/mattn/go-runewidth/runewidth_appengine.go8
-rw-r--r--vendor/github.com/mattn/go-runewidth/runewidth_js.go1
-rw-r--r--vendor/github.com/mattn/go-runewidth/runewidth_posix.go76
-rw-r--r--vendor/github.com/mattn/go-runewidth/runewidth_windows.go4
-rw-r--r--vendor/github.com/modern-go/concurrent/LICENSE201
-rw-r--r--vendor/github.com/modern-go/concurrent/README.md49
-rw-r--r--vendor/github.com/modern-go/concurrent/executor.go14
-rw-r--r--vendor/github.com/modern-go/concurrent/go_above_19.go15
-rw-r--r--vendor/github.com/modern-go/concurrent/go_below_19.go33
-rw-r--r--vendor/github.com/modern-go/concurrent/log.go13
-rw-r--r--vendor/github.com/modern-go/concurrent/unbounded_executor.go119
-rw-r--r--vendor/github.com/modern-go/reflect2/LICENSE201
-rw-r--r--vendor/github.com/modern-go/reflect2/README.md71
-rw-r--r--vendor/github.com/modern-go/reflect2/go_above_17.go8
-rw-r--r--vendor/github.com/modern-go/reflect2/go_above_19.go14
-rw-r--r--vendor/github.com/modern-go/reflect2/go_below_17.go9
-rw-r--r--vendor/github.com/modern-go/reflect2/go_below_19.go14
-rw-r--r--vendor/github.com/modern-go/reflect2/reflect2.go298
-rw-r--r--vendor/github.com/modern-go/reflect2/reflect2_amd64.s (renamed from contrib/python/podman/test/__init__.py)0
-rw-r--r--vendor/github.com/modern-go/reflect2/reflect2_kind.go30
-rw-r--r--vendor/github.com/modern-go/reflect2/relfect2_386.s (renamed from contrib/python/pypodman/pypodman/__init__.py)0
-rw-r--r--vendor/github.com/modern-go/reflect2/relfect2_amd64p32.s0
-rw-r--r--vendor/github.com/modern-go/reflect2/relfect2_arm.s0
-rw-r--r--vendor/github.com/modern-go/reflect2/relfect2_arm64.s0
-rw-r--r--vendor/github.com/modern-go/reflect2/relfect2_mips64x.s0
-rw-r--r--vendor/github.com/modern-go/reflect2/relfect2_mipsx.s0
-rw-r--r--vendor/github.com/modern-go/reflect2/relfect2_ppc64x.s0
-rw-r--r--vendor/github.com/modern-go/reflect2/relfect2_s390x.s0
-rw-r--r--vendor/github.com/modern-go/reflect2/safe_field.go58
-rw-r--r--vendor/github.com/modern-go/reflect2/safe_map.go101
-rw-r--r--vendor/github.com/modern-go/reflect2/safe_slice.go92
-rw-r--r--vendor/github.com/modern-go/reflect2/safe_struct.go29
-rw-r--r--vendor/github.com/modern-go/reflect2/safe_type.go78
-rw-r--r--vendor/github.com/modern-go/reflect2/type_map.go113
-rw-r--r--vendor/github.com/modern-go/reflect2/unsafe_array.go65
-rw-r--r--vendor/github.com/modern-go/reflect2/unsafe_eface.go59
-rw-r--r--vendor/github.com/modern-go/reflect2/unsafe_field.go74
-rw-r--r--vendor/github.com/modern-go/reflect2/unsafe_iface.go64
-rw-r--r--vendor/github.com/modern-go/reflect2/unsafe_link.go70
-rw-r--r--vendor/github.com/modern-go/reflect2/unsafe_map.go138
-rw-r--r--vendor/github.com/modern-go/reflect2/unsafe_ptr.go46
-rw-r--r--vendor/github.com/modern-go/reflect2/unsafe_slice.go177
-rw-r--r--vendor/github.com/modern-go/reflect2/unsafe_struct.go59
-rw-r--r--vendor/github.com/modern-go/reflect2/unsafe_type.go85
-rw-r--r--vendor/github.com/opencontainers/go-digest/LICENSE (renamed from vendor/github.com/opencontainers/go-digest/LICENSE.code)0
-rw-r--r--vendor/github.com/opencontainers/go-digest/README.md2
-rw-r--r--vendor/github.com/opencontainers/go-digest/algorithm.go40
-rw-r--r--vendor/github.com/opencontainers/go-digest/digest.go42
-rw-r--r--vendor/github.com/opencontainers/runc/README.md17
-rw-r--r--vendor/github.com/opencontainers/runc/libcontainer/README.md8
-rw-r--r--vendor/github.com/opencontainers/runc/libcontainer/cgroups/utils.go59
-rw-r--r--vendor/github.com/opencontainers/runc/libcontainer/configs/config.go30
-rw-r--r--vendor/github.com/opencontainers/runc/libcontainer/configs/intelrdt.go4
-rw-r--r--vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_linux.go16
-rw-r--r--vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall.go13
-rw-r--r--vendor/github.com/opencontainers/runc/libcontainer/nsenter/README.md6
-rw-r--r--vendor/github.com/opencontainers/runc/libcontainer/nsenter/nsexec.c77
-rw-r--r--vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go22
-rw-r--r--vendor/github.com/opencontainers/runc/vendor.conf2
-rw-r--r--vendor/github.com/opencontainers/runtime-spec/specs-go/config.go22
-rw-r--r--vendor/github.com/opencontainers/runtime-tools/README.md4
-rw-r--r--vendor/github.com/opencontainers/runtime-tools/generate/generate.go34
-rw-r--r--vendor/github.com/opencontainers/selinux/go-selinux/label/label.go4
-rw-r--r--vendor/github.com/opencontainers/selinux/go-selinux/label/label_selinux.go62
-rw-r--r--vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go36
-rw-r--r--vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go8
-rw-r--r--vendor/github.com/ostreedev/ostree-go/pkg/otbuiltin/builtin.go4
-rw-r--r--vendor/github.com/pkg/errors/README.md4
-rw-r--r--vendor/github.com/pkg/errors/errors.go43
-rw-r--r--vendor/github.com/pkg/errors/stack.go51
-rw-r--r--vendor/github.com/pquerna/ffjson/fflib/v1/lexer.go2
-rw-r--r--vendor/github.com/seccomp/containers-golang/README.md14
-rw-r--r--vendor/github.com/seccomp/libseccomp-golang/seccomp.go80
-rw-r--r--vendor/github.com/seccomp/libseccomp-golang/seccomp_internal.go176
-rw-r--r--vendor/github.com/spf13/pflag/README.md25
-rw-r--r--vendor/github.com/spf13/pflag/bytes.go209
-rw-r--r--vendor/github.com/spf13/pflag/count.go16
-rw-r--r--vendor/github.com/spf13/pflag/duration_slice.go128
-rw-r--r--vendor/github.com/spf13/pflag/flag.go374
-rw-r--r--vendor/github.com/spf13/pflag/golangflag.go4
-rw-r--r--vendor/github.com/spf13/pflag/int16.go88
-rw-r--r--vendor/github.com/spf13/pflag/string_array.go8
-rw-r--r--vendor/github.com/spf13/pflag/string_slice.go20
-rw-r--r--vendor/github.com/spf13/pflag/string_to_int.go149
-rw-r--r--vendor/github.com/spf13/pflag/string_to_string.go160
-rw-r--r--vendor/github.com/stretchr/testify/LICENSE35
-rw-r--r--vendor/github.com/stretchr/testify/README.md56
-rw-r--r--vendor/github.com/stretchr/testify/assert/assertion_format.go484
-rw-r--r--vendor/github.com/stretchr/testify/assert/assertion_forward.go784
-rw-r--r--vendor/github.com/stretchr/testify/assert/assertions.go687
-rw-r--r--vendor/github.com/stretchr/testify/assert/forward_assertions.go2
-rw-r--r--vendor/github.com/stretchr/testify/assert/http_assertions.go81
-rw-r--r--vendor/github.com/stretchr/testify/require/forward_requirements.go2
-rw-r--r--vendor/github.com/stretchr/testify/require/require.go1120
-rw-r--r--vendor/github.com/stretchr/testify/require/require_forward.go784
-rw-r--r--vendor/github.com/stretchr/testify/require/requirements.go22
-rw-r--r--vendor/github.com/syndtr/gocapability/capability/capability.go71
-rw-r--r--vendor/github.com/syndtr/gocapability/capability/capability_linux.go16
-rw-r--r--vendor/github.com/syndtr/gocapability/capability/syscall_linux.go2
-rw-r--r--vendor/github.com/ulikunitz/xz/README.md72
-rw-r--r--vendor/github.com/ulikunitz/xz/example.go40
-rw-r--r--vendor/github.com/ulikunitz/xz/lzma/encoder.go2
-rw-r--r--vendor/github.com/urfave/cli/command.go2
-rw-r--r--vendor/github.com/varlink/go/.gitignore1
-rw-r--r--vendor/github.com/varlink/go/.travis.yml6
-rw-r--r--vendor/github.com/varlink/go/cmd/varlink/main.go295
-rw-r--r--vendor/github.com/varlink/go/varlink/bridge.go59
-rw-r--r--vendor/github.com/varlink/go/varlink/bridge_windows.go57
-rw-r--r--vendor/github.com/varlink/go/varlink/connection.go7
-rw-r--r--vendor/github.com/varlink/go/varlink/service.go67
-rw-r--r--vendor/github.com/varlink/go/varlink/socketactivation.go63
-rw-r--r--vendor/github.com/varlink/go/varlink/socketactivation_windows.go7
-rw-r--r--vendor/github.com/vbatts/tar-split/README.md3
-rw-r--r--vendor/github.com/vbatts/tar-split/archive/tar/common.go689
-rw-r--r--vendor/github.com/vbatts/tar-split/archive/tar/format.go303
-rw-r--r--vendor/github.com/vbatts/tar-split/archive/tar/reader.go1377
-rw-r--r--vendor/github.com/vbatts/tar-split/archive/tar/stat_actime1.go (renamed from vendor/github.com/vbatts/tar-split/archive/tar/stat_atim.go)0
-rw-r--r--vendor/github.com/vbatts/tar-split/archive/tar/stat_actime2.go (renamed from vendor/github.com/vbatts/tar-split/archive/tar/stat_atimespec.go)0
-rw-r--r--vendor/github.com/vbatts/tar-split/archive/tar/stat_unix.go72
-rw-r--r--vendor/github.com/vbatts/tar-split/archive/tar/strconv.go326
-rw-r--r--vendor/github.com/vbatts/tar-split/archive/tar/writer.go871
-rw-r--r--vendor/github.com/vishvananda/netlink/README.md1
-rw-r--r--vendor/github.com/vishvananda/netlink/addr_linux.go126
-rw-r--r--vendor/github.com/vishvananda/netlink/bpf_linux.go83
-rw-r--r--vendor/github.com/vishvananda/netlink/bridge_linux.go24
-rw-r--r--vendor/github.com/vishvananda/netlink/class_linux.go25
-rw-r--r--vendor/github.com/vishvananda/netlink/conntrack_linux.go14
-rw-r--r--vendor/github.com/vishvananda/netlink/filter.go27
-rw-r--r--vendor/github.com/vishvananda/netlink/filter_linux.go122
-rw-r--r--vendor/github.com/vishvananda/netlink/fou.go21
-rw-r--r--vendor/github.com/vishvananda/netlink/fou_linux.go215
-rw-r--r--vendor/github.com/vishvananda/netlink/fou_unspecified.go15
-rw-r--r--vendor/github.com/vishvananda/netlink/genetlink_linux.go7
-rw-r--r--vendor/github.com/vishvananda/netlink/gtp_linux.go15
-rw-r--r--vendor/github.com/vishvananda/netlink/handle_linux.go51
-rw-r--r--vendor/github.com/vishvananda/netlink/handle_unspecified.go40
-rw-r--r--vendor/github.com/vishvananda/netlink/ioctl_linux.go98
-rw-r--r--vendor/github.com/vishvananda/netlink/link.go126
-rw-r--r--vendor/github.com/vishvananda/netlink/link_linux.go965
-rw-r--r--vendor/github.com/vishvananda/netlink/neigh.go3
-rw-r--r--vendor/github.com/vishvananda/netlink/neigh_linux.go61
-rw-r--r--vendor/github.com/vishvananda/netlink/netlink_unspecified.go4
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/addr_linux.go13
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/link_linux.go75
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/nl_linux.go242
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/route_linux.go39
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/seg6_linux.go111
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/syscall.go10
-rw-r--r--vendor/github.com/vishvananda/netlink/nl/tc_linux.go35
-rw-r--r--vendor/github.com/vishvananda/netlink/protinfo_linux.go9
-rw-r--r--vendor/github.com/vishvananda/netlink/qdisc.go60
-rw-r--r--vendor/github.com/vishvananda/netlink/qdisc_linux.go212
-rw-r--r--vendor/github.com/vishvananda/netlink/route.go64
-rw-r--r--vendor/github.com/vishvananda/netlink/route_linux.go338
-rw-r--r--vendor/github.com/vishvananda/netlink/rule.go2
-rw-r--r--vendor/github.com/vishvananda/netlink/rule_linux.go53
-rw-r--r--vendor/github.com/vishvananda/netlink/socket_linux.go8
-rw-r--r--vendor/github.com/vishvananda/netlink/xfrm.go13
-rw-r--r--vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go7
-rw-r--r--vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go19
-rw-r--r--vendor/github.com/vishvananda/netlink/xfrm_state.go27
-rw-r--r--vendor/github.com/vishvananda/netlink/xfrm_state_linux.go39
-rw-r--r--vendor/github.com/vishvananda/netns/netns_linux.go6
-rw-r--r--vendor/github.com/xeipuuv/gojsonpointer/README.md33
-rw-r--r--vendor/github.com/xeipuuv/gojsonpointer/pointer.go21
-rw-r--r--vendor/github.com/xeipuuv/gojsonreference/reference.go18
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/README.md181
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/draft.go118
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/errors.go47
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/format_checkers.go123
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/jsonContext.go16
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/jsonLoader.go54
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/locales.go33
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/result.go49
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/schema.go452
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/schemaLoader.go203
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/schemaPool.go168
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/schemaReferencePool.go5
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/subSchema.go67
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/utils.go72
-rw-r--r--vendor/github.com/xeipuuv/gojsonschema/validation.go293
-rw-r--r--vendor/golang.org/x/crypto/curve25519/curve25519.go2
-rw-r--r--vendor/golang.org/x/crypto/openpgp/keys.go168
-rw-r--r--vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go9
-rw-r--r--vendor/golang.org/x/crypto/openpgp/packet/packet.go44
-rw-r--r--vendor/golang.org/x/crypto/openpgp/packet/private_key.go9
-rw-r--r--vendor/golang.org/x/crypto/openpgp/packet/public_key.go11
-rw-r--r--vendor/golang.org/x/crypto/openpgp/packet/signature.go2
-rw-r--r--vendor/golang.org/x/crypto/openpgp/packet/userattribute.go2
-rw-r--r--vendor/golang.org/x/crypto/openpgp/write.go174
-rw-r--r--vendor/golang.org/x/crypto/otr/libotr_test_helper.c197
-rw-r--r--vendor/golang.org/x/crypto/otr/otr.go1415
-rw-r--r--vendor/golang.org/x/crypto/otr/smp.go572
-rw-r--r--vendor/golang.org/x/crypto/ssh/terminal/terminal.go2
-rw-r--r--vendor/golang.org/x/crypto/ssh/terminal/util.go75
-rw-r--r--vendor/golang.org/x/crypto/ssh/terminal/util_aix.go12
-rw-r--r--vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go2
-rw-r--r--vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go42
-rw-r--r--vendor/golang.org/x/crypto/ssh/terminal/util_windows.go25
-rw-r--r--vendor/golang.org/x/crypto/ssh/test/doc.go7
-rw-r--r--vendor/golang.org/x/crypto/ssh/test/sshd_test_pw.c173
-rw-r--r--vendor/golang.org/x/net/README3
-rw-r--r--vendor/golang.org/x/net/README.md16
-rw-r--r--vendor/golang.org/x/net/context/context.go114
-rw-r--r--vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go5
-rw-r--r--vendor/golang.org/x/net/context/ctxhttp/ctxhttp_pre17.go147
-rw-r--r--vendor/golang.org/x/net/context/go17.go4
-rw-r--r--vendor/golang.org/x/net/context/go19.go20
-rw-r--r--vendor/golang.org/x/net/context/pre_go17.go18
-rw-r--r--vendor/golang.org/x/net/context/pre_go19.go109
-rw-r--r--vendor/golang.org/x/net/html/atom/atom.go78
-rw-r--r--vendor/golang.org/x/net/html/atom/table.go783
-rw-r--r--vendor/golang.org/x/net/html/charset/charset.go257
-rw-r--r--vendor/golang.org/x/net/html/const.go112
-rw-r--r--vendor/golang.org/x/net/html/doc.go106
-rw-r--r--vendor/golang.org/x/net/html/doctype.go156
-rw-r--r--vendor/golang.org/x/net/html/entity.go2253
-rw-r--r--vendor/golang.org/x/net/html/escape.go258
-rw-r--r--vendor/golang.org/x/net/html/foreign.go226
-rw-r--r--vendor/golang.org/x/net/html/node.go220
-rw-r--r--vendor/golang.org/x/net/html/parse.go2311
-rw-r--r--vendor/golang.org/x/net/html/render.go271
-rw-r--r--vendor/golang.org/x/net/html/token.go1219
-rw-r--r--vendor/golang.org/x/net/http/httpguts/guts.go50
-rw-r--r--vendor/golang.org/x/net/http/httpguts/httplex.go (renamed from vendor/golang.org/x/net/lex/httplex/httplex.go)7
-rw-r--r--vendor/golang.org/x/net/http2/ciphers.go641
-rw-r--r--vendor/golang.org/x/net/http2/client_conn_pool.go30
-rw-r--r--vendor/golang.org/x/net/http2/configure_transport.go80
-rw-r--r--vendor/golang.org/x/net/http2/databuffer.go146
-rw-r--r--vendor/golang.org/x/net/http2/errors.go13
-rw-r--r--vendor/golang.org/x/net/http2/fixed_buffer.go60
-rw-r--r--vendor/golang.org/x/net/http2/flow.go10
-rw-r--r--vendor/golang.org/x/net/http2/frame.go150
-rw-r--r--vendor/golang.org/x/net/http2/go111.go29
-rw-r--r--vendor/golang.org/x/net/http2/go16.go43
-rw-r--r--vendor/golang.org/x/net/http2/go17.go106
-rw-r--r--vendor/golang.org/x/net/http2/go17_not18.go36
-rw-r--r--vendor/golang.org/x/net/http2/go18.go50
-rw-r--r--vendor/golang.org/x/net/http2/headermap.go20
-rw-r--r--vendor/golang.org/x/net/http2/hpack/encode.go31
-rw-r--r--vendor/golang.org/x/net/http2/hpack/hpack.go118
-rw-r--r--vendor/golang.org/x/net/http2/hpack/huffman.go20
-rw-r--r--vendor/golang.org/x/net/http2/hpack/tables.go255
-rw-r--r--vendor/golang.org/x/net/http2/http2.go33
-rw-r--r--vendor/golang.org/x/net/http2/not_go111.go20
-rw-r--r--vendor/golang.org/x/net/http2/not_go16.go46
-rw-r--r--vendor/golang.org/x/net/http2/not_go17.go87
-rw-r--r--vendor/golang.org/x/net/http2/not_go18.go27
-rw-r--r--vendor/golang.org/x/net/http2/pipe.go18
-rw-r--r--vendor/golang.org/x/net/http2/server.go652
-rw-r--r--vendor/golang.org/x/net/http2/transport.go914
-rw-r--r--vendor/golang.org/x/net/http2/write.go15
-rw-r--r--vendor/golang.org/x/net/http2/writesched_priority.go2
-rw-r--r--vendor/golang.org/x/net/idna/idna.go424
-rw-r--r--vendor/golang.org/x/net/idna/punycode.go2
-rw-r--r--vendor/golang.org/x/net/idna/tables.go4400
-rw-r--r--vendor/golang.org/x/net/idna/trie.go5
-rw-r--r--vendor/golang.org/x/net/idna/trieval.go21
-rw-r--r--vendor/golang.org/x/net/internal/socks/client.go168
-rw-r--r--vendor/golang.org/x/net/internal/socks/socks.go317
-rw-r--r--vendor/golang.org/x/net/proxy/per_host.go8
-rw-r--r--vendor/golang.org/x/net/proxy/proxy.go44
-rw-r--r--vendor/golang.org/x/net/proxy/socks5.go212
-rw-r--r--vendor/golang.org/x/sync/LICENSE27
-rw-r--r--vendor/golang.org/x/sync/PATENTS22
-rw-r--r--vendor/golang.org/x/sync/README.md18
-rw-r--r--vendor/golang.org/x/sync/semaphore/semaphore.go127
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu.go87
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_arm.go9
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_arm64.go67
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_gc_x86.go16
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_gccgo.c43
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_gccgo.go26
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_linux.go61
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_mips64x.go11
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_mipsx.go11
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_ppc64x.go32
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_s390x.go9
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_x86.go55
-rw-r--r--vendor/golang.org/x/sys/cpu/cpu_x86.s27
-rw-r--r--vendor/golang.org/x/sys/unix/README.md4
-rw-r--r--vendor/golang.org/x/sys/unix/aliases.go14
-rw-r--r--vendor/golang.org/x/sys/unix/asm_aix_ppc64.s17
-rw-r--r--vendor/golang.org/x/sys/unix/asm_freebsd_arm64.s29
-rw-r--r--vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s12
-rw-r--r--vendor/golang.org/x/sys/unix/constants.go2
-rw-r--r--vendor/golang.org/x/sys/unix/dev_aix_ppc.go27
-rw-r--r--vendor/golang.org/x/sys/unix/dev_aix_ppc64.go29
-rw-r--r--vendor/golang.org/x/sys/unix/dirent.go2
-rw-r--r--vendor/golang.org/x/sys/unix/env_unix.go2
-rw-r--r--vendor/golang.org/x/sys/unix/fcntl.go2
-rw-r--r--vendor/golang.org/x/sys/unix/fcntl_darwin.go18
-rw-r--r--vendor/golang.org/x/sys/unix/gccgo.go1
-rw-r--r--vendor/golang.org/x/sys/unix/gccgo_c.c1
-rw-r--r--vendor/golang.org/x/sys/unix/ioctl.go30
-rw-r--r--vendor/golang.org/x/sys/unix/openbsd_pledge.go152
-rw-r--r--vendor/golang.org/x/sys/unix/openbsd_unveil.go44
-rw-r--r--vendor/golang.org/x/sys/unix/pagesize_unix.go2
-rw-r--r--vendor/golang.org/x/sys/unix/race0.go2
-rw-r--r--vendor/golang.org/x/sys/unix/sockcmsg_unix.go29
-rw-r--r--vendor/golang.org/x/sys/unix/str.go2
-rw-r--r--vendor/golang.org/x/sys/unix/syscall.go2
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_aix.go547
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_aix_ppc.go34
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go34
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_bsd.go8
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_darwin.go98
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_darwin_386.go23
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go23
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_darwin_arm.go26
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go26
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go31
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_dragonfly.go21
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_freebsd.go566
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go52
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux.go310
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux_amd64.go31
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux_arm.go8
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux_arm64.go9
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go9
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go7
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go22
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go209
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_linux_s390x.go13
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_netbsd.go58
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_openbsd.go59
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_openbsd_386.go4
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go4
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_solaris.go19
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_unix.go21
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_unix_gc.go2
-rw-r--r--vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go24
-rw-r--r--vendor/golang.org/x/sys/unix/timestruct.go2
-rw-r--r--vendor/golang.org/x/sys/unix/xattr_bsd.go240
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go1372
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go1373
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go66
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go29
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go29
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go29
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go1794
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_386.go163
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go163
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_arm.go163
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go163
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_mips.go162
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go162
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go162
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go162
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go164
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go164
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go2740
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go163
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go4561
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go44
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go44
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go44
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go54
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go59
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go54
-rw-r--r--vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go35
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go1450
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go1408
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go1162
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go1042
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go1810
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go1223
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s284
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go1810
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go1223
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s284
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go1793
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go1201
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s282
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go1793
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go1201
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s282
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go133
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go110
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go110
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go110
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go2015
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_386.go174
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go206
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go184
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go174
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go186
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go204
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go204
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go186
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go233
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go233
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go2191
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go189
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go204
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go389
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go389
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go389
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go186
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go186
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go186
-rw-r--r--vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go256
-rw-r--r--vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go13
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go2
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go176
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go738
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go738
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go738
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go395
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_386.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go287
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go6
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go4
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go223
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go215
-rw-r--r--vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go217
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go345
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go354
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_darwin_386.go10
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go10
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go10
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go10
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go27
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go276
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go294
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go298
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go602
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_386.go168
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go175
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_arm.go170
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go175
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_mips.go167
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go175
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go175
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go167
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go175
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go175
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go2005
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go180
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go1499
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go27
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go27
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go27
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go120
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go120
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go204
-rw-r--r--vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go27
-rw-r--r--vendor/golang.org/x/sys/windows/aliases.go13
-rw-r--r--vendor/golang.org/x/sys/windows/asm_windows_arm.s11
-rw-r--r--vendor/golang.org/x/sys/windows/service.go18
-rw-r--r--vendor/golang.org/x/sys/windows/svc/event.go48
-rw-r--r--vendor/golang.org/x/sys/windows/svc/go12.c24
-rw-r--r--vendor/golang.org/x/sys/windows/svc/go12.go11
-rw-r--r--vendor/golang.org/x/sys/windows/svc/go13.go31
-rw-r--r--vendor/golang.org/x/sys/windows/svc/security.go62
-rw-r--r--vendor/golang.org/x/sys/windows/svc/service.go363
-rw-r--r--vendor/golang.org/x/sys/windows/svc/sys_386.s68
-rw-r--r--vendor/golang.org/x/sys/windows/svc/sys_amd64.s42
-rw-r--r--vendor/golang.org/x/sys/windows/svc/sys_arm.s38
-rw-r--r--vendor/golang.org/x/sys/windows/syscall_windows.go60
-rw-r--r--vendor/golang.org/x/sys/windows/types_windows.go148
-rw-r--r--vendor/golang.org/x/sys/windows/types_windows_arm.go22
-rw-r--r--vendor/golang.org/x/text/README23
-rw-r--r--vendor/golang.org/x/text/README.md93
-rw-r--r--vendor/golang.org/x/text/collate/collate.go7
-rw-r--r--vendor/golang.org/x/text/collate/option.go4
-rw-r--r--vendor/golang.org/x/text/collate/tables.go2
-rw-r--r--vendor/golang.org/x/text/encoding/charmap/charmap.go249
-rw-r--r--vendor/golang.org/x/text/encoding/charmap/tables.go7410
-rw-r--r--vendor/golang.org/x/text/encoding/encoding.go335
-rw-r--r--vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go86
-rw-r--r--vendor/golang.org/x/text/encoding/htmlindex/map.go105
-rw-r--r--vendor/golang.org/x/text/encoding/htmlindex/tables.go353
-rw-r--r--vendor/golang.org/x/text/encoding/internal/identifier/identifier.go81
-rw-r--r--vendor/golang.org/x/text/encoding/internal/identifier/mib.go1621
-rw-r--r--vendor/golang.org/x/text/encoding/internal/internal.go75
-rw-r--r--vendor/golang.org/x/text/encoding/japanese/all.go12
-rw-r--r--vendor/golang.org/x/text/encoding/japanese/eucjp.go225
-rw-r--r--vendor/golang.org/x/text/encoding/japanese/iso2022jp.go299
-rw-r--r--vendor/golang.org/x/text/encoding/japanese/shiftjis.go189
-rw-r--r--vendor/golang.org/x/text/encoding/japanese/tables.go26971
-rw-r--r--vendor/golang.org/x/text/encoding/korean/euckr.go177
-rw-r--r--vendor/golang.org/x/text/encoding/korean/tables.go34152
-rw-r--r--vendor/golang.org/x/text/encoding/simplifiedchinese/all.go12
-rw-r--r--vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go269
-rw-r--r--vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go245
-rw-r--r--vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go43999
-rw-r--r--vendor/golang.org/x/text/encoding/traditionalchinese/big5.go199
-rw-r--r--vendor/golang.org/x/text/encoding/traditionalchinese/tables.go37142
-rw-r--r--vendor/golang.org/x/text/encoding/unicode/override.go82
-rw-r--r--vendor/golang.org/x/text/encoding/unicode/unicode.go434
-rw-r--r--vendor/golang.org/x/text/internal/colltab/collelem.go8
-rw-r--r--vendor/golang.org/x/text/internal/colltab/numeric.go2
-rw-r--r--vendor/golang.org/x/text/internal/language/common.go16
-rw-r--r--vendor/golang.org/x/text/internal/language/compact.go29
-rw-r--r--vendor/golang.org/x/text/internal/language/compact/compact.go61
-rw-r--r--vendor/golang.org/x/text/internal/language/compact/language.go260
-rw-r--r--vendor/golang.org/x/text/internal/language/compact/parents.go120
-rw-r--r--vendor/golang.org/x/text/internal/language/compact/tables.go1015
-rw-r--r--vendor/golang.org/x/text/internal/language/compact/tags.go91
-rw-r--r--vendor/golang.org/x/text/internal/language/compose.go167
-rw-r--r--vendor/golang.org/x/text/internal/language/coverage.go28
-rw-r--r--vendor/golang.org/x/text/internal/language/language.go596
-rw-r--r--vendor/golang.org/x/text/internal/language/lookup.go (renamed from vendor/golang.org/x/text/language/lookup.go)120
-rw-r--r--vendor/golang.org/x/text/internal/language/match.go226
-rw-r--r--vendor/golang.org/x/text/internal/language/parse.go594
-rw-r--r--vendor/golang.org/x/text/internal/language/tables.go3431
-rw-r--r--vendor/golang.org/x/text/internal/language/tags.go48
-rw-r--r--vendor/golang.org/x/text/internal/utf8internal/utf8internal.go87
-rw-r--r--vendor/golang.org/x/text/language/common.go16
-rw-r--r--vendor/golang.org/x/text/language/coverage.go34
-rw-r--r--vendor/golang.org/x/text/language/doc.go102
-rw-r--r--vendor/golang.org/x/text/language/index.go767
-rw-r--r--vendor/golang.org/x/text/language/language.go802
-rw-r--r--vendor/golang.org/x/text/language/match.go724
-rw-r--r--vendor/golang.org/x/text/language/parse.go737
-rw-r--r--vendor/golang.org/x/text/language/tables.go3771
-rw-r--r--vendor/golang.org/x/text/language/tags.go160
-rw-r--r--vendor/golang.org/x/text/runes/cond.go187
-rw-r--r--vendor/golang.org/x/text/runes/runes.go355
-rw-r--r--vendor/golang.org/x/text/secure/bidirule/bidirule.go8
-rw-r--r--vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go11
-rw-r--r--vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go14
-rw-r--r--vendor/golang.org/x/text/transform/transform.go4
-rw-r--r--vendor/golang.org/x/text/unicode/bidi/bidi.go2
-rw-r--r--vendor/golang.org/x/text/unicode/bidi/bracket.go4
-rw-r--r--vendor/golang.org/x/text/unicode/bidi/core.go4
-rw-r--r--vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go1815
-rw-r--r--vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go (renamed from vendor/golang.org/x/text/unicode/bidi/tables.go)4
-rw-r--r--vendor/golang.org/x/text/unicode/bidi/trieval.go2
-rw-r--r--vendor/golang.org/x/text/unicode/norm/composition.go26
-rw-r--r--vendor/golang.org/x/text/unicode/norm/forminfo.go68
-rw-r--r--vendor/golang.org/x/text/unicode/norm/input.go8
-rw-r--r--vendor/golang.org/x/text/unicode/norm/iter.go34
-rw-r--r--vendor/golang.org/x/text/unicode/norm/normalize.go23
-rw-r--r--vendor/golang.org/x/text/unicode/norm/readwriter.go4
-rw-r--r--vendor/golang.org/x/text/unicode/norm/tables10.0.0.go7657
-rw-r--r--vendor/golang.org/x/text/unicode/norm/tables9.0.0.go (renamed from vendor/golang.org/x/text/unicode/norm/tables.go)2910
-rw-r--r--vendor/golang.org/x/text/unicode/norm/transform.go12
-rw-r--r--vendor/golang.org/x/time/README1
-rw-r--r--vendor/golang.org/x/time/README.md17
-rw-r--r--vendor/golang.org/x/time/rate/rate.go11
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/README.md11
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/format.go84
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/pb.go193
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/pb_appengine.go2
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/pb_nix.go8
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/pb_solaris.go6
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/pb_win.go4
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/pb_x.go118
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/pool.go62
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/pool_win.go16
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/pool_x.go13
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/runecount.go2
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/termios_nix.go7
-rw-r--r--vendor/gopkg.in/cheggaaa/pb.v1/termios_sysv.go13
-rw-r--r--vendor/gopkg.in/inf.v0/dec.go2
-rw-r--r--vendor/gopkg.in/mgo.v2/LICENSE6
-rw-r--r--vendor/gopkg.in/mgo.v2/internal/sasl/sspi_windows.c2
-rw-r--r--vendor/gopkg.in/mgo.v2/internal/sasl/sspi_windows.h2
-rw-r--r--vendor/gopkg.in/yaml.v2/LICENSE208
-rw-r--r--vendor/gopkg.in/yaml.v2/NOTICE (renamed from contrib/python/podman/LICENSE.txt)2
-rw-r--r--vendor/gopkg.in/yaml.v2/README.md2
-rw-r--r--vendor/gopkg.in/yaml.v2/apic.go55
-rw-r--r--vendor/gopkg.in/yaml.v2/decode.go245
-rw-r--r--vendor/gopkg.in/yaml.v2/emitterc.go19
-rw-r--r--vendor/gopkg.in/yaml.v2/encode.go164
-rw-r--r--vendor/gopkg.in/yaml.v2/readerc.go20
-rw-r--r--vendor/gopkg.in/yaml.v2/resolve.go80
-rw-r--r--vendor/gopkg.in/yaml.v2/scannerc.go38
-rw-r--r--vendor/gopkg.in/yaml.v2/sorter.go9
-rw-r--r--vendor/gopkg.in/yaml.v2/writerc.go65
-rw-r--r--vendor/gopkg.in/yaml.v2/yaml.go136
-rw-r--r--vendor/gopkg.in/yaml.v2/yamlh.go32
-rw-r--r--vendor/k8s.io/api/core/v1/generated.pb.go1643
-rw-r--r--vendor/k8s.io/api/core/v1/generated.proto22
-rw-r--r--vendor/k8s.io/api/core/v1/types.go26
-rw-r--r--vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go6
-rw-r--r--vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go18
-rw-r--r--vendor/k8s.io/apimachinery/pkg/api/resource/zz_generated.deepcopy.go2
-rw-r--r--vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go58
-rw-r--r--vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.defaults.go2
-rw-r--r--vendor/k8s.io/apimachinery/pkg/labels/zz_generated.deepcopy.go2
-rw-r--r--vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go24
-rw-r--r--vendor/k8s.io/apimachinery/pkg/runtime/scheme.go1
-rw-r--r--vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go22
-rw-r--r--vendor/k8s.io/apimachinery/pkg/runtime/zz_generated.deepcopy.go8
-rw-r--r--vendor/k8s.io/apimachinery/pkg/util/net/http.go3
-rw-r--r--vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go6
-rw-r--r--vendor/k8s.io/apimachinery/pkg/watch/zz_generated.deepcopy.go2
-rw-r--r--vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go19
-rw-r--r--vendor/k8s.io/client-go/pkg/apis/clientauthentication/register.go50
-rw-r--r--vendor/k8s.io/client-go/pkg/apis/clientauthentication/types.go70
-rw-r--r--vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go23
-rw-r--r--vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/register.go55
-rw-r--r--vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go70
-rw-r--r--vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go141
-rw-r--r--vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go137
-rw-r--r--vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.defaults.go32
-rw-r--r--vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go137
-rw-r--r--vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go280
-rw-r--r--vendor/k8s.io/client-go/rest/config.go4
-rw-r--r--vendor/k8s.io/client-go/rest/transport.go15
-rw-r--r--vendor/k8s.io/client-go/rest/versions.go88
-rw-r--r--vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go2
-rw-r--r--vendor/k8s.io/client-go/tools/clientcmd/api/types.go32
-rw-r--r--vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go56
-rw-r--r--vendor/k8s.io/client-go/transport/cache.go6
-rw-r--r--vendor/k8s.io/client-go/transport/round_trippers.go112
-rw-r--r--vendor/k8s.io/client-go/transport/transport.go2
-rw-r--r--vendor/k8s.io/client-go/util/cert/cert.go40
-rw-r--r--version/version.go7
1488 files changed, 311346 insertions, 64808 deletions
diff --git a/.cirrus.yml b/.cirrus.yml
index d1029d554..3192d15ae 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -25,6 +25,16 @@ env:
CIRRUS_CLONE_DEPTH: 200
####
+ #### Cache-image names to test with
+ ###
+ FEDORA_CACHE_IMAGE_NAME: "fedora-29-libpod-9afa57a9"
+ PRIOR_FEDORA_CACHE_IMAGE_NAME: "fedora-28-libpod-9afa57a9"
+ UBUNTU_CACHE_IMAGE_NAME: "ubuntu-18-libpod-9afa57a9"
+ RHEL_CACHE_IMAGE_NAME: "rhel-8-notready"
+ PRIOR_RHEL_CACHE_IMAGE_NAME: "rhel-7-notready"
+ CENTOS_CACHE_IMAGE_NAME: "centos-7-notready"
+
+ ####
#### Variables for composing new cache-images (used in PR testing) from
#### base-images (pre-existing in GCE)
####
@@ -38,6 +48,8 @@ env:
PACKER_BUILDS: "ubuntu-18,fedora-29,fedora-28" # TODO: fah-29,rhel-7,centos-7
# Version of packer to use
PACKER_VER: "1.3.1"
+ # Special image w/ nested-libvirt + tools for creating new cache and base images
+ IMAGE_BUILDER_CACHE_IMAGE_NAME: "image-builder-image-1541772081"
# Google-maintained base-image names
UBUNTU_BASE_IMAGE: "ubuntu-1804-bionic-v20181203a"
CENTOS_BASE_IMAGE: "centos-7-v20181113"
@@ -113,9 +125,9 @@ build_each_commit_task:
memory: "4Gb"
disk: 40
matrix:
- image_name: "fedora-29-libpod-9afa57a9"
+ image_name: "${FEDORA_CACHE_IMAGE_NAME}"
- timeout_in: 20m
+ timeout_in: 30m
script:
- $SCRIPT_BASE/setup_environment.sh
@@ -139,14 +151,14 @@ testing_task:
# 'matrix' combinations.
matrix:
# Images are generated separately, from build_images_task (below)
- image_name: fedora-29-libpod-9afa57a9
- image_name: fedora-28-libpod-9afa57a9
- image_name: ubuntu-18-libpod-9afa57a9
+ image_name: "${FEDORA_CACHE_IMAGE_NAME}"
+ image_name: "${PRIOR_FEDORA_CACHE_IMAGE_NAME}"
+ image_name: "${UBUNTU_CACHE_IMAGE_NAME}"
# TODO: tests fail
- # image_name: "rhel-7-something-something"
- # image_name: "centos-7-something-something"
- # image_name: "fah-29-libpod-5070733157859328"
+ # image_name: "${RHEL_CACHE_IMAGE_NAME}
+ # image_name: "${PRIOR_RHEL_CACHE_IMAGE_NAME}
+ # image_name: "${CENTOS_CACHE_IMAGE_NAME}"
timeout_in: 120m
@@ -176,12 +188,13 @@ optional_testing_task:
gce_instance:
image_project: "libpod-218412"
matrix:
- image_name: fedora-29-libpod-9afa57a9
- image_name: fedora-28-libpod-9afa57a9
- image_name: ubuntu-18-libpod-9afa57a9
+ image_name: "${FEDORA_CACHE_IMAGE_NAME}"
+ image_name: "${PRIOR_FEDORA_CACHE_IMAGE_NAME}"
+ image_name: "${UBUNTU_CACHE_IMAGE_NAME}"
# TODO: Make these work (also build_images_task below)
- #image_name: "rhel-server-ec2-7-5-165-1-libpod-fce09afe"
- #image_name: "centos-7-v20180911-libpod-fce09afe"
+ # image_name: "${RHEL_CACHE_IMAGE_NAME}
+ # image_name: "${PRIOR_RHEL_CACHE_IMAGE_NAME}
+ # image_name: "${CENTOS_CACHE_IMAGE_NAME}"
timeout_in: 60m
@@ -214,7 +227,7 @@ cache_images_task:
cpu: 4
memory: "4Gb"
disk: 200
- image_name: "image-builder-image-1541772081" # Simply CentOS 7 + packer dependencies
+ image_name: "${IMAGE_BUILDER_CACHE_IMAGE_NAME}"
# Additional permissions for building GCE images, within a GCE VM
scopes:
- compute
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index acb2b2bd3..a7663f3e3 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -18,13 +18,11 @@ executes Buildah to perform container builds, and as such the Buildah
maintainers are best equipped to handle these bugs.
-->
-**Is this a BUG REPORT or FEATURE REQUEST?**:
+**Is this a BUG REPORT or FEATURE REQUEST? (leave only one on its own line)**
-[//]: # Uncomment only one, leave it on its own line:
+/kind bug
-[//]: # **kind bug**
-
-[//]: # **kind feature**
+/kind feature
**Description**
diff --git a/.papr.sh b/.papr.sh
index 284326709..c5aada904 100644
--- a/.papr.sh
+++ b/.papr.sh
@@ -25,14 +25,12 @@ pwd
# -t integration test
# -u unit test
# -v validate
-# -p run python tests
build=0
install=0
integrationtest=0
unittest=0
validate=0
-runpython=0
options=0
install_tools_made=0
@@ -44,9 +42,6 @@ while getopts "biptuv" opt; do
i) install=1
options=1
;;
- p) runpython=1
- options=1
- ;;
t) integrationtest=1
options=1
;;
@@ -115,6 +110,7 @@ fi
if [ $build -eq 1 ]; then
make_install_tools
make TAGS="${TAGS}" GOPATH=$GOPATH
+ make podman-remote TAGS="${TAGS}" GOPATH=$GOPATH
fi
# Install Podman
@@ -124,18 +120,12 @@ if [ $install -eq 1 ]; then
make TAGS="${TAGS}" install.man PREFIX=/usr ETCDIR=/etc
make TAGS="${TAGS}" install.cni PREFIX=/usr ETCDIR=/etc
make TAGS="${TAGS}" install.systemd PREFIX=/usr ETCDIR=/etc
- if [ $runpython -eq 1 ]; then
- make TAGS="${TAGS}" install.python PREFIX=/usr ETCDIR=/etc
- fi
-
fi
# Run integration tests
if [ $integrationtest -eq 1 ]; then
make TAGS="${TAGS}" test-binaries
make varlink_generate GOPATH=/go
- if [ $runpython -eq 1 ]; then
- make clientintegration GOPATH=/go
- fi
make ginkgo GOPATH=/go $INTEGRATION_TEST_ENVS
+ make ginkgo-remote GOPATH=/go $INTEGRATION_TEST_ENVS
fi
diff --git a/.papr_prepare.sh b/.papr_prepare.sh
index 5d7d21530..b93f7b91f 100644
--- a/.papr_prepare.sh
+++ b/.papr_prepare.sh
@@ -4,10 +4,8 @@ set -xeuo pipefail
DIST=${DIST:=Fedora}
CONTAINER_RUNTIME=${CONTAINER_RUNTIME:=docker}
IMAGE=fedorapodmanbuild
-PYTHON=python3
if [[ ${DIST} != "Fedora" ]]; then
IMAGE=centospodmanbuild
- PYTHON=python
fi
# Since CRIU 3.11 has been pushed to Fedora 28 the checkpoint/restore
@@ -21,4 +19,4 @@ modprobe iptable_nat || :
${CONTAINER_RUNTIME} build -t ${IMAGE} -f Dockerfile.${DIST} . 2>build.log
# Run the tests
-${CONTAINER_RUNTIME} run --rm --privileged --net=host -v $PWD:/go/src/github.com/containers/libpod:Z --workdir /go/src/github.com/containers/libpod -e CGROUP_MANAGER=cgroupfs -e PYTHON=$PYTHON -e STORAGE_OPTIONS="--storage-driver=vfs" -e CRIO_ROOT="/go/src/github.com/containers/libpod" -e PODMAN_BINARY="/usr/bin/podman" -e CONMON_BINARY="/usr/libexec/podman/conmon" -e DIST=$DIST -e CONTAINER_RUNTIME=$CONTAINER_RUNTIME $IMAGE sh ./.papr.sh -b -i -t
+${CONTAINER_RUNTIME} run --rm --privileged --net=host -v $PWD:/go/src/github.com/containers/libpod:Z --workdir /go/src/github.com/containers/libpod -e CGROUP_MANAGER=cgroupfs -e STORAGE_OPTIONS="--storage-driver=vfs" -e CRIO_ROOT="/go/src/github.com/containers/libpod" -e PODMAN_BINARY="/usr/bin/podman" -e CONMON_BINARY="/usr/libexec/podman/conmon" -e DIST=$DIST -e CONTAINER_RUNTIME=$CONTAINER_RUNTIME $IMAGE sh ./.papr.sh -b -i -t
diff --git a/API.md b/API.md
index 51787496c..fc14f1035 100755
--- a/API.md
+++ b/API.md
@@ -9,14 +9,22 @@ in the [API.md](https://github.com/containers/libpod/blob/master/API.md) file in
[func Commit(name: string, image_name: string, changes: []string, author: string, message: string, pause: bool, manifestType: string) string](#Commit)
+[func ContainerArtifacts(name: string, artifactName: string) string](#ContainerArtifacts)
+
[func ContainerCheckpoint(name: string, keep: bool, leaveRunning: bool, tcpEstablished: bool) string](#ContainerCheckpoint)
+[func ContainerConfig(name: string) string](#ContainerConfig)
+
[func ContainerExists(name: string) int](#ContainerExists)
+[func ContainerInspectData(name: string) string](#ContainerInspectData)
+
[func ContainerRestore(name: string, keep: bool, tcpEstablished: bool) string](#ContainerRestore)
[func ContainerRunlabel(runlabel: Runlabel) ](#ContainerRunlabel)
+[func ContainerStateData(name: string) string](#ContainerStateData)
+
[func CreateContainer(create: Create) string](#CreateContainer)
[func CreateImage() NotImplemented](#CreateImage)
@@ -57,6 +65,8 @@ in the [API.md](https://github.com/containers/libpod/blob/master/API.md) file in
[func ImageExists(name: string) int](#ImageExists)
+[func ImagesPrune() []string](#ImagesPrune)
+
[func ImportImage(source: string, reference: string, message: string, changes: []string) string](#ImportImage)
[func InspectContainer(name: string) string](#InspectContainer)
@@ -237,12 +247,24 @@ attributes: _CMD, ENTRYPOINT, ENV, EXPOSE, LABEL, ONBUILD, STOPSIGNAL, USER, VOL
container while it is being committed, pass a _true_ bool for the pause argument. If the container cannot
be found by the ID or name provided, a (ContainerNotFound)[#ContainerNotFound] error will be returned; otherwise,
the resulting image's ID will be returned as a string.
+### <a name="ContainerArtifacts"></a>func ContainerArtifacts
+<div style="background-color: #E8E8E8; padding: 15px; margin: 10px; border-radius: 10px;">
+
+method ContainerArtifacts(name: [string](https://godoc.org/builtin#string), artifactName: [string](https://godoc.org/builtin#string)) [string](https://godoc.org/builtin#string)</div>
+ContainerArtifacts returns a container's artifacts in string form. This call is for
+development of Podman only and generally should not be used.
### <a name="ContainerCheckpoint"></a>func ContainerCheckpoint
<div style="background-color: #E8E8E8; padding: 15px; margin: 10px; border-radius: 10px;">
method ContainerCheckpoint(name: [string](https://godoc.org/builtin#string), keep: [bool](https://godoc.org/builtin#bool), leaveRunning: [bool](https://godoc.org/builtin#bool), tcpEstablished: [bool](https://godoc.org/builtin#bool)) [string](https://godoc.org/builtin#string)</div>
ContainerCheckPoint performs a checkpopint on a container by its name or full/partial container
ID. On successful checkpoint, the id of the checkpointed container is returned.
+### <a name="ContainerConfig"></a>func ContainerConfig
+<div style="background-color: #E8E8E8; padding: 15px; margin: 10px; border-radius: 10px;">
+
+method ContainerConfig(name: [string](https://godoc.org/builtin#string)) [string](https://godoc.org/builtin#string)</div>
+ContainerConfig returns a container's config in string form. This call is for
+development of Podman only and generally should not be used.
### <a name="ContainerExists"></a>func ContainerExists
<div style="background-color: #E8E8E8; padding: 15px; margin: 10px; border-radius: 10px;">
@@ -256,6 +278,12 @@ $ varlink call -m unix:/run/podman/io.podman/io.podman.ContainerExists '{"name":
"exists": 0
}
~~~
+### <a name="ContainerInspectData"></a>func ContainerInspectData
+<div style="background-color: #E8E8E8; padding: 15px; margin: 10px; border-radius: 10px;">
+
+method ContainerInspectData(name: [string](https://godoc.org/builtin#string)) [string](https://godoc.org/builtin#string)</div>
+ContainerInspectData returns a container's inspect data in string form. This call is for
+development of Podman only and generally should not be used.
### <a name="ContainerRestore"></a>func ContainerRestore
<div style="background-color: #E8E8E8; padding: 15px; margin: 10px; border-radius: 10px;">
@@ -268,6 +296,12 @@ of the container's ID.
method ContainerRunlabel(runlabel: [Runlabel](#Runlabel)) </div>
ContainerRunlabel runs executes a command as described by a given container image label.
+### <a name="ContainerStateData"></a>func ContainerStateData
+<div style="background-color: #E8E8E8; padding: 15px; margin: 10px; border-radius: 10px;">
+
+method ContainerStateData(name: [string](https://godoc.org/builtin#string)) [string](https://godoc.org/builtin#string)</div>
+ContainerStateData returns a container's state config in string form. This call is for
+development of Podman only and generally should not be used.
### <a name="CreateContainer"></a>func CreateContainer
<div style="background-color: #E8E8E8; padding: 15px; margin: 10px; border-radius: 10px;">
@@ -543,6 +577,12 @@ $ varlink call -m unix:/run/podman/io.podman/io.podman.ImageExists '{"name": "im
"exists": 1
}
~~~
+### <a name="ImagesPrune"></a>func ImagesPrune
+<div style="background-color: #E8E8E8; padding: 15px; margin: 10px; border-radius: 10px;">
+
+method ImagesPrune() [[]string](#[]string)</div>
+ImagesPrune removes all unused images from the local store. Upon successful pruning,
+the IDs of the removed images are returned.
### <a name="ImportImage"></a>func ImportImage
<div style="background-color: #E8E8E8; padding: 15px; margin: 10px; border-radius: 10px;">
@@ -1169,6 +1209,10 @@ image [string](https://godoc.org/builtin#string)
image_id [string](https://godoc.org/builtin#string)
+init [bool](https://godoc.org/builtin#bool)
+
+init_path [string](https://godoc.org/builtin#string)
+
builtin_imgvolumes [[]string](#[]string)
id_mappings [IDMappingOptions](#IDMappingOptions)
@@ -1361,6 +1405,8 @@ virtualSize [int](https://godoc.org/builtin#int)
containers [int](https://godoc.org/builtin#int)
labels [map[string]](#map[string])
+
+isParent [bool](https://godoc.org/builtin#bool)
### <a name="ImageSearch"></a>type ImageSearch
ImageSearch is the returned structure for SearchImage. It is returned
@@ -1448,7 +1494,7 @@ graph_status [InfoGraphStatus](#InfoGraphStatus)
run_root [string](https://godoc.org/builtin#string)
### <a name="ListContainerData"></a>type ListContainerData
-ListContainer is the returned struct for an individual container
+ListContainerData is the returned struct for an individual container
id [string](https://godoc.org/builtin#string)
@@ -1608,6 +1654,8 @@ git_commit [string](https://godoc.org/builtin#string)
built [int](https://godoc.org/builtin#int)
os_arch [string](https://godoc.org/builtin#string)
+
+remote_api_version [int](https://godoc.org/builtin#int)
## Errors
### <a name="ContainerNotFound"></a>type ContainerNotFound
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 32ed94ad4..26e5473b2 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -226,3 +226,31 @@ and
tracking system.
[owners]: https://github.com/kubernetes/community/blob/master/contributors/guide/owners.md#owners
+
+
+### Bot Interactions
+
+The primary human-interface is through comments in pull-requests. Some of these are outlined
+below, along with their meaning and intended usage. Some of them require the comment
+author hold special privileges on the github repository. Others can be used by anyone.
+
+* ``/close``: Closes an issue or PR.
+
+* ``/approve``: Mark a PR as appropriate to the project, and as close to meeting
+ met all the contribution criteria above. Adds the *approved* label, marking
+ it as ready for review and possible future merging.
+
+* ``/lgtm``: A literal "Stamp of approval", signaling okay-to-merge. This causes
+ the bot to ad the *lgtm* label, then attempt a merge. In other words - Never,
+ ever, ever comment ``/lgtm``, unless a PR has actually, really, been fully
+ reviewed. The bot isn't too smart about these things, and could merge
+ unintentionally. Instead, just write ``LGTM``, or
+ spell it out.
+
+* ``[skip ci]``: Within the HEAD commit will cause Cirrus CI to ***NOT*** execute
+ tests on the PR. This is useful in basically two cases: 1) You're still working
+ and don't want to waste resources. 2) You haven't modified any code that would
+ be exercised by the tests. For example, documentation updates (outside of code).
+
+[The complete list may be found on the command-help page.](https://prow.k8s.io/command-help)
+However, not all commands are implemented for this repository. If in doubt, ask a maintainer.
diff --git a/Dockerfile b/Dockerfile
index c227207bd..59b5d5da3 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -27,7 +27,6 @@ RUN apt-get update && apt-get install -y \
libudev-dev \
protobuf-c-compiler \
protobuf-compiler \
- python-minimal \
libglib2.0-dev \
libapparmor-dev \
btrfs-tools \
@@ -37,11 +36,6 @@ RUN apt-get update && apt-get install -y \
liblzma-dev \
netcat \
socat \
- python3-pip \
- python3-dateutil \
- python3-setuptools \
- python3-psutil \
- python3-pytoml \
lsof \
xz-utils \
--no-install-recommends \
@@ -129,9 +123,6 @@ COPY cni/87-podman-bridge.conflist /etc/cni/net.d/87-podman-bridge.conflist
# Make sure we have some policy for pulling images
RUN mkdir -p /etc/containers && curl https://raw.githubusercontent.com/projectatomic/registries/master/registries.fedora -o /etc/containers/registries.conf
-# Install python3 varlink module from pypi
-RUN pip3 install varlink
-
COPY test/policy.json /etc/containers/policy.json
COPY test/redhat_sigstore.yaml /etc/containers/registries.d/registry.access.redhat.com.yaml
diff --git a/Dockerfile.CentOS b/Dockerfile.CentOS
index 3e14e59db..be4ae3eaf 100644
--- a/Dockerfile.CentOS
+++ b/Dockerfile.CentOS
@@ -19,10 +19,6 @@ RUN yum -y install btrfs-progs-devel \
runc \
make \
ostree-devel \
- python \
- python3-dateutil \
- python3-psutil \
- python3-pytoml \
lsof \
which\
golang-github-cpuguy83-go-md2man \
diff --git a/Dockerfile.Fedora b/Dockerfile.Fedora
index 2080b597b..aeee9c3cf 100644
--- a/Dockerfile.Fedora
+++ b/Dockerfile.Fedora
@@ -20,10 +20,6 @@ RUN dnf -y install btrfs-progs-devel \
runc \
make \
ostree-devel \
- python \
- python3-dateutil \
- python3-psutil \
- python3-pytoml \
lsof \
which\
golang-github-cpuguy83-go-md2man \
diff --git a/Makefile b/Makefile
index c423d82f2..f0f6a1fab 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
GO ?= go
DESTDIR ?= /
-EPOCH_TEST_COMMIT ?= e1732a5213147e3c0b7bf60b55a332c3720ecb4b
+EPOCH_TEST_COMMIT ?= 4406e1cfeed18fe89c0ad4e20a3c3b2f4b9ffcae
HEAD ?= HEAD
CHANGELOG_BASE ?= HEAD~
CHANGELOG_TARGET ?= HEAD
@@ -26,8 +26,6 @@ ifneq (,$(findstring varlink,$(BUILDTAGS)))
endif
CONTAINER_RUNTIME := $(shell command -v podman 2> /dev/null || echo docker)
-HAS_PYTHON3 := $(shell command -v python3 2>/dev/null)
-
BASHINSTALLDIR=${PREFIX}/share/bash-completion/completions
OCIUMOUNTINSTALLDIR=$(PREFIX)/share/oci-umount/oci-umount.d
@@ -88,9 +86,6 @@ endif
lint: .gopathok varlink_generate
@echo "checking lint"
@./.tool/lint
- # Not ready
- # @$(MAKE) -C contrib/python/podman lint
- # @$(MAKE) -C contrib/python/pypodman lint
gofmt:
find . -name '*.go' ! -path './vendor/*' -exec gofmt -s -w {} \+
@@ -111,6 +106,12 @@ test/goecho/goecho: .gopathok $(wildcard test/goecho/*.go)
podman: .gopathok $(PODMAN_VARLINK_DEPENDENCIES)
$(GO) build -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS)" -o bin/$@ $(PROJECT)/cmd/podman
+podman-remote: .gopathok $(PODMAN_VARLINK_DEPENDENCIES)
+ $(GO) build -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS) remoteclient" -o bin/$@ $(PROJECT)/cmd/podman
+
+podman-remote-darwin: .gopathok $(PODMAN_VARLINK_DEPENDENCIES)
+ GOOS=darwin $(GO) build -ldflags '$(LDFLAGS_PODMAN)' -tags "remoteclient containers_image_openpgp exclude_graphdriver_devicemapper" -o bin/$@ $(PROJECT)/cmd/podman
+
local-cross: $(CROSS_BUILD_TARGETS)
bin/podman.cross.%: .gopathok
@@ -119,12 +120,6 @@ bin/podman.cross.%: .gopathok
GOARCH="$${TARGET##*.}" \
$(GO) build -ldflags '$(LDFLAGS_PODMAN)' -tags '$(BUILDTAGS_CROSS)' -o "$@" $(PROJECT)/cmd/podman
-python:
-ifdef HAS_PYTHON3
- $(MAKE) -C contrib/python/podman python-podman
- $(MAKE) -C contrib/python/pypodman python-pypodman
-endif
-
clean:
rm -rf \
.gopathok \
@@ -144,8 +139,6 @@ clean:
$(MANPAGES) ||:
find . -name \*~ -delete
find . -name \#\* -delete
- $(MAKE) -C contrib/python/podman clean
- $(MAKE) -C contrib/python/pypodman clean
libpodimage:
${CONTAINER_RUNTIME} build -t ${LIBPOD_IMAGE} .
@@ -154,10 +147,10 @@ dbuild: libpodimage
${CONTAINER_RUNTIME} run --name=${LIBPOD_INSTANCE} --privileged -v ${PWD}:/go/src/${PROJECT} --rm ${LIBPOD_IMAGE} make all
test: libpodimage
- ${CONTAINER_RUNTIME} run -e STORAGE_OPTIONS="--storage-driver=vfs" -e TESTFLAGS -e CGROUP_MANAGER=cgroupfs -e TRAVIS -t --privileged --rm -v ${CURDIR}:/go/src/${PROJECT} ${LIBPOD_IMAGE} make clean all localunit localintegration
+ ${CONTAINER_RUNTIME} run -e STORAGE_OPTIONS="--storage-driver=vfs" -e TESTFLAGS -e CGROUP_MANAGER=cgroupfs -e TRAVIS -t --privileged --rm -v ${CURDIR}:/go/src/${PROJECT} ${LIBPOD_IMAGE} make clean all localunit install.catatonit localintegration
integration: libpodimage
- ${CONTAINER_RUNTIME} run -e STORAGE_OPTIONS="--storage-driver=vfs" -e TESTFLAGS -e CGROUP_MANAGER=cgroupfs -e TRAVIS -t --privileged --rm -v ${CURDIR}:/go/src/${PROJECT} ${LIBPOD_IMAGE} make clean all localintegration
+ ${CONTAINER_RUNTIME} run -e STORAGE_OPTIONS="--storage-driver=vfs" -e TESTFLAGS -e CGROUP_MANAGER=cgroupfs -e TRAVIS -t --privileged --rm -v ${CURDIR}:/go/src/${PROJECT} ${LIBPOD_IMAGE} make clean all install.catatonit localintegration
integration.fedora:
DIST=Fedora sh .papr_prepare.sh
@@ -178,7 +171,10 @@ localunit: test/goecho/goecho varlink_generate
ginkgo:
ginkgo -v -tags "$(BUILDTAGS)" -cover -flakeAttempts 3 -progress -trace -noColor test/e2e/.
-localintegration: varlink_generate test-binaries clientintegration ginkgo
+ginkgo-remote:
+ ginkgo -v -tags "$(BUILDTAGS) remoteclient" -cover -flakeAttempts 3 -progress -trace -noColor test/e2e/.
+
+localintegration: varlink_generate test-binaries ginkgo ginkgo-remote
localsystem: .install.ginkgo .install.gomega
ginkgo -v -noColor test/system/
@@ -186,10 +182,6 @@ localsystem: .install.ginkgo .install.gomega
system.test-binary: .install.ginkgo .install.gomega
$(GO) test -c ./test/system
-clientintegration:
- $(MAKE) -C contrib/python/podman integration
- $(MAKE) -C contrib/python/pypodman integration
-
perftest:
$ cd contrib/perftest;go build
@@ -199,9 +191,12 @@ run-perftest: perftest
vagrant-check:
BOX=$(BOX) sh ./vagrant.sh
-binaries: varlink_generate easyjson_generate podman
+binaries: varlink_generate podman podman-remote
+
+install.catatonit:
+ ./hack/install_catatonit.sh
-test-binaries: test/bin2img/bin2img test/copyimg/copyimg test/checkseccomp/checkseccomp test/goecho/goecho
+test-binaries: test/bin2img/bin2img test/copyimg/copyimg test/checkseccomp/checkseccomp test/goecho/goecho install.catatonit
MANPAGES_MD ?= $(wildcard docs/*.md pkg/*/docs/*.md)
MANPAGES ?= $(MANPAGES_MD:%.md=%)
@@ -224,7 +219,7 @@ changelog:
$(shell cat $(TMPFILE) >> changelog.txt)
$(shell rm $(TMPFILE))
-install: .gopathok install.bin install.man install.cni install.systemd install.python
+install: .gopathok install.bin install.man install.cni install.systemd
install.bin:
install ${SELINUXOPT} -d -m 755 $(BINDIR)
@@ -262,10 +257,6 @@ install.systemd:
install ${SELINUXOPT} -m 644 contrib/varlink/io.podman.service ${SYSTEMDDIR}/io.podman.service
install ${SELINUXOPT} -m 644 contrib/varlink/podman.conf ${TMPFILESDIR}/podman.conf
-install.python:
- $(MAKE) DESTDIR=${DESTDIR} -C contrib/python/podman install
- $(MAKE) DESTDIR=${DESTDIR} -C contrib/python/pypodman install
-
uninstall:
for i in $(filter %.1,$(MANPAGES)); do \
rm -f $(MANDIR)/man1/$$(basename $${i}); \
@@ -273,8 +264,6 @@ uninstall:
for i in $(filter %.5,$(MANPAGES)); do \
rm -f $(MANDIR)/man5/$$(basename $${i}); \
done
- $(MAKE) -C contrib/python/pypodman uninstall
- $(MAKE) -C contrib/python/podman uninstall
.PHONY: .gitvalidation
.gitvalidation: .gopathok
@@ -282,7 +271,7 @@ uninstall:
.PHONY: install.tools
-install.tools: .install.gitvalidation .install.gometalinter .install.md2man .install.easyjson .install.ginkgo .install.gomega
+install.tools: .install.gitvalidation .install.gometalinter .install.md2man .install.ginkgo .install.gomega
.install.gomega: .gopathok
$(GO) get github.com/onsi/gomega/...
@@ -311,11 +300,6 @@ install.tools: .install.gitvalidation .install.gometalinter .install.md2man .ins
$(GO) get -u github.com/cpuguy83/go-md2man; \
fi
-.install.easyjson: .gopathok
- if [ ! -x "$(GOBIN)/easyffjson" ]; then \
- $(GO) get -u github.com/mailru/easyjson/...; \
- fi
-
.install.ostree: .gopathok
if ! pkg-config ostree-1 2> /dev/null ; then \
git clone https://github.com/ostreedev/ostree $(FIRST_GOPATH)/src/github.com/ostreedev/ostree ; \
@@ -327,16 +311,6 @@ install.tools: .install.gitvalidation .install.gometalinter .install.md2man .ins
varlink_generate: .gopathok cmd/podman/varlink/iopodman.go
varlink_api_generate: .gopathok API.md
-easyjson_generate: .gopathok libpod/container_easyjson.go libpod/pod_easyjson.go
-
-libpod/container_easyjson.go: libpod/container.go
- rm -f libpod/container_easyjson.go
- cd "$(GOPKGDIR)" && easyjson -build_tags "$(BUILDTAGS)" ./libpod/container.go
-
-libpod/pod_easyjson.go: libpod/pod.go
- rm -f libpod/pod_easyjson.go
- cd "$(GOPKGDIR)" && easyjson -build_tags "$(BUILDTAGS)" ./libpod/pod.go
-
.PHONY: install.libseccomp.sudo
install.libseccomp.sudo:
rm -rf ../../seccomp/libseccomp
@@ -350,16 +324,23 @@ cmd/podman/varlink/iopodman.go: cmd/podman/varlink/io.podman.varlink
API.md: cmd/podman/varlink/io.podman.varlink
$(GO) generate ./docs/...
-validate: gofmt .gitvalidation
+validate.completions: completions/bash/podman
+ . completions/bash/podman
+
+validate: gofmt .gitvalidation validate.completions
build-all-new-commits:
# Validate that all the commits build on top of $(GIT_BASE_BRANCH)
git rebase $(GIT_BASE_BRANCH) -x make
+vendor:
+ vndr -whitelist "github.com/varlink/go"
+
.PHONY: \
.gopathok \
binaries \
clean \
+ validate.completions \
default \
docs \
gofmt \
@@ -372,5 +353,4 @@ build-all-new-commits:
changelog \
validate \
install.libseccomp.sudo \
- python \
- clientintegration
+ vendor
diff --git a/README.md b/README.md
index 714e879ca..93e780524 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ Libpod provides a library for applications looking to use the Container Pod conc
popularized by Kubernetes. libpod also contains the `podman` tool, for managing
Pods, Containers, and Container Images.
-* [Latest Version: 0.12.1](https://github.com/containers/libpod/releases/latest)
+* [Latest Version: 1.0.0](https://github.com/containers/libpod/releases/latest)
* [Continuous Integration:](contrib/cirrus/README.md) [![Build Status](https://api.cirrus-ci.com/github/containers/libpod.svg)](https://cirrus-ci.com/github/containers/libpod/master)
## Overview and scope
@@ -23,23 +23,22 @@ At a high level, the scope of libpod and podman is the following:
## Roadmap
-1. Python frontend for Varlink API
+1. Allow the Podman CLI to use a Varlink backend to connect to remote Podman instances
1. Integrate libpod into CRI-O to replace its existing container management backend
1. Further work on the podman pod command
1. Further improvements on rootless containers
-1. In-memory locking to replace file locks
## Out of scope
* Signing and pushing images to various image storages.
See [Skopeo](https://github.com/containers/skopeo/).
-* Container Runtimes daemons for working with Kubernetes CRIs.
+* Container Runtimes daemons for working with the Kubernetes CRI interface.
See [CRI-O](https://github.com/kubernetes-sigs/cri-o).
## OCI Projects Plans
The plan is to use OCI projects and best of breed libraries for different aspects:
-- Runtime: [runc](https://github.com/opencontainers/runc) (or any OCI compliant runtime) and [oci runtime tools](https://github.com/opencontainers/runtime-tools) to generate the spec
+- Runtime: [runc](https://github.com/opencontainers/runc) (or any OCI compliant runtime) and [OCI runtime tools](https://github.com/opencontainers/runtime-tools) to generate the spec
- Images: Image management using [containers/image](https://github.com/containers/image)
- Storage: Container and image storage is managed by [containers/storage](https://github.com/containers/storage)
- Networking: Networking support through use of [CNI](https://github.com/containernetworking/cni)
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 2d7ca6cbf..b8b475362 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,5 +1,43 @@
# Release Notes
+## 1.0.0
+### Features
+- The `podman exec` command now includes a `--workdir` option to set working directory for the executed command
+- The `podman create` and `podman run` commands now support the `--init` flag to use a minimal init process in the container
+- Added the `podman image sign` command to GPG sign images
+- The `podman run --device` flag now accepts directories, and will added any device nodes in the directory to the container
+- Added the `podman play kube` command to create pods and containers from Kubernetes pod YAML
+
+### Bugfixes
+- Fixed a bug where passing `podman create` or `podman run` volumes with an empty host or container path could cause a segfault
+- Fixed a bug where `storage.conf` was sometimes ignored for rootless containers
+- Fixed a bug where Podman run as root would error if CAP_SYS_RESOURCE was not available
+- Fixed a bug where Podman would fail to start containers after a system restart due to an out-of-date default Apparmor profile
+- Fixed a bug where Podman's bash completions were not working
+- Fixed a bug where `podman login` would use existing login credentials even if new credentials were provided
+- Fixed a bug where Podman could create some directories with the wrong permissions, breaking containers with user namespaces
+- Fixed a bug where `podman runlabel` was not properly setting container names when the `--name` was specified
+- Fixed a bug where `podman runlabel` sometimes included extra spaces in command output
+- Fixed a bug where `podman commit` was including invalid port numbers in created images when committing containers with published ports
+- Fixed a bug where `podman exec` was not honoring the container's environment variables
+- Fixed a bug where `podman run --device` would fail when a symlink to a device was specified
+- Fixed a bug where `podman build` was not properly picking up OCI runtime paths specified in `libpod.conf`
+- Fixed a bug where Podman would mount `/dev/shm` into the container read-only for read-only containers (`/dev/shm` should always be read-write)
+- Fixed a bug where Podman would ignore any mount whose container mountpoint was `/dev/shm`
+- Fixed a bug where `podman export` did not work with the default `fuse-overlayfs` storage driver
+- Fixed a bug where `podman inspect -f '{{ json .Config }}'` on images would not output anything (it now prints the image's config)
+- Fixed a bug where `podman rmi -fa` displayed the wrong error message when trying to remove images used by pod infra containers
+
+### Misc
+- Rootless containers now unconditionally use postrun cleanup processes, ensuring resources are freed when the container stops
+- A new version of Buildah is included for `podman build`, featuring improved build speed and numerous bugfixes
+- Pulling images has been parallelized, allowing individual layers to be pulled in parallel
+- The `podman start --attach` command now defaults the `sig-proxy` option to `true`, matching `podman create` and `podman run`
+- The `podman info` command now prints the path of the configuration file controlling container storage
+- Added `podman list` and `podman ls` as aliases for `podman ps`, and `podman container ps` and `podman container list` as aliases for `podman container ls`
+- Changed `podman generate kube` to generate Kubernetes service YAML in the same file as pod YAML, generating a single file instead of two
+- To improve compatability with the Docker command line, `podman inspect -f '{{ json .ContainerConfig }}'` on images is no longer valid; please use `podman inspect -f '{{ json .Config }}'` instead
+
## 0.12.1.2
### Bugfixes
- Fixed a bug where an empty path for named volumes could make it impossible to create containers
diff --git a/changelog.txt b/changelog.txt
index b0680a02c..8ee11cdc4 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,3 +1,100 @@
+- Changelog for v1.0.0 (2018-1-11)
+ * Update release notes for v1.0
+ * Remove clientintegration from Makefile
+ * Regenerate EasyJSON to fix JSON issues
+ * Update gitvalidation to avoid reverts w/o signoffs
+ * Cirrus: Post-Merge Testing for v1.0 Branch
+ * Move python code from contrib to it's own repo python-podman
+ * Use defaults if paths are not specified in storage.conf
+ * (Minor) Cirrus: Print timestamp at start
+ * fix up sigstore path
+ * Trivial readme updates
+ * podman: bump RLIMIT_NOFILE also without CAP_SYS_RESOURCE
+ * Fix handling of nil volumes
+ * sign: make all error messages lowercase
+ * sign: use filepath.Join instead of fmt.Sprintf
+ * createconfig: always cleanup a rootless container
+ * Fix 'image trust' from PR1899
+ * libpod/image: Use ParseNormalizedNamed in RepoDigests
+ * apparmor: apply default profile at container initialization
+ * Fix up image sign and trust
+ * List the long variant of each option before its shorter counterpart
+ * Use existing interface to request IP address during restore
+ * Added checkpoint/restore test for same IP
+ * Enable checkpoint test with established TCP connections
+ * .github/ISSUE_TEMPLATE: Suggest '/kind bug' and '/kind feature'
+ * pkg/hooks/exec: Include failed command in hook errors
+ * hooks/exec/runtimeconfigfilter: Log config changes
+ * hooks: Add pre-create hooks for runtime-config manipulation
+ * Add Validate completions
+ * Add a --workdir option to 'podman exec'
+ * Default --sig-proxy to true for 'podman start --attach'
+ * Test that 'podman start --sig-proxy' does not work without --attach
+ * [WIP]Support podman image sign
+ * vendor latest buildah
+ * Honor image environment variables with exec
+ * Minor: Remove redundant basename command in ooe.sh
+ * Rename libpod.Config back to ContainerConfig
+ * Add ability to build golang remote client
+ * vendor latest buildah
+ * Add the configuration file used to setup storage to podman info
+ * podman: set umask to 022
+ * podman-login: adhere to user input
+ * Vendor in latest containers/buildah code
+ * Readd Python testing
+ * Update vendor of runc
+ * [skip ci] Docs: Add Bot Interactions section
+ * container runlabel NAME implementation
+ * Bump time for build_each_commit step
+ * add container-init support
+ * If local storage file exists, then use it rather then defaults.
+ * vendor in new containers/storage
+ * Fix completions
+ * Touch up some troubleshooting nits
+ * Log container command before starting the container
+ * Use sprintf to generate port numbers while committing
+ * Add troubleshooting for sparse files
+ * Fix handling of symbolic links
+ * podman build is not using the default oci-runtime
+ * Re-enable checkpoint/restore CI tests on Fedora
+ * Fixes to handle /dev/shm correctly.
+ * rootless tests using stop is more reliable
+ * Allow alias for list, ls, ps to work
+ * Refactor: use idtools.ParseIDMap instead of bundling own version
+ * cirrus: Use updated images including new crui
+ * Switch all referencs to image.ContainerConfig to image.Config
+ * Allow users to specify a directory for additonal devices
+ * Change all 'can not' to 'cannot' for proper usage
+ * Invalid index for array
+ * Vendor in latest psgo code to fix race conditions
+ * test: add test for rootless export
+ * export: fix usage with rootless containers
+ * rootless: add function to join user and mount namespace
+ * libpod: always store the conmon pid file
+ * Use existing CRIU packages in CI setup
+ * skip test for blkio.weight when kernel does not support it
+ * Add Play
+ * Cirrus: Skip build all commits test on master
+ * prepare for move to validate on 1.11 only
+ * [skip ci] Gate: Update docs w/ safer local command
+ * Support podman image trust command
+ * Makefile: validate that each commit can at least build
+ * perf test a stress test to profile CPU load of podman
+ * all flakes must die
+ * Add information on --restart
+ * generate service object inline
+ * Cirrus: One IRC notice only
+ * docs/tutorials: add a basic network config
+ * display proper error when rmi -fa with infra containers
+ * add --get-login command to podman-login.
+ * Show image only once with images -q
+ * Add script to create CI VMs for debugging
+ * Cirrus: Migrate PAPR testing of F28 to Cirrus
+ * Skip checkpoint tests on Fedora <30
+ * Cirrus: Add text editors to cache-images
+ * Clean up some existing varlink endpoints
+ * mount: allow mount only when using vfs
+
- Changelog for v0.12.1.2 (2018-12-13)
* Add release notes for 0.12.1.2
* runlabel should sub podman for docker|/usr/bin/docker
diff --git a/cmd/podman/commands.go b/cmd/podman/commands.go
new file mode 100644
index 000000000..718717009
--- /dev/null
+++ b/cmd/podman/commands.go
@@ -0,0 +1,150 @@
+// +build !remoteclient
+
+package main
+
+import "github.com/urfave/cli"
+
+func getAppCommands() []cli.Command {
+ return []cli.Command{
+ attachCommand,
+ commitCommand,
+ buildCommand,
+ createCommand,
+ diffCommand,
+ execCommand,
+ exportCommand,
+ importCommand,
+ killCommand,
+ kubeCommand,
+ loadCommand,
+ loginCommand,
+ logoutCommand,
+ logsCommand,
+ mountCommand,
+ pauseCommand,
+ psCommand,
+ podCommand,
+ portCommand,
+ pushCommand,
+ playCommand,
+ restartCommand,
+ rmCommand,
+ runCommand,
+ saveCommand,
+ searchCommand,
+ startCommand,
+ statsCommand,
+ stopCommand,
+ topCommand,
+ umountCommand,
+ unpauseCommand,
+ volumeCommand,
+ waitCommand,
+ }
+}
+
+func getImageSubCommands() []cli.Command {
+ return []cli.Command{
+ buildCommand,
+ importCommand,
+ loadCommand,
+ pullCommand,
+ saveCommand,
+ trustCommand,
+ signCommand,
+ }
+}
+
+func getContainerSubCommands() []cli.Command {
+ return []cli.Command{
+ attachCommand,
+ checkpointCommand,
+ cleanupCommand,
+ containerExistsCommand,
+ commitCommand,
+ createCommand,
+ diffCommand,
+ execCommand,
+ exportCommand,
+ killCommand,
+ logsCommand,
+ psCommand,
+ mountCommand,
+ pauseCommand,
+ portCommand,
+ pruneContainersCommand,
+ refreshCommand,
+ restartCommand,
+ restoreCommand,
+ rmCommand,
+ runCommand,
+ runlabelCommand,
+ startCommand,
+ statsCommand,
+ stopCommand,
+ topCommand,
+ umountCommand,
+ unpauseCommand,
+ // updateCommand,
+ waitCommand,
+ }
+}
+func getMainAppFlags() []cli.Flag {
+ return []cli.Flag{
+ cli.StringFlag{
+ Name: "cgroup-manager",
+ Usage: "cgroup manager to use (cgroupfs or systemd, default systemd)",
+ },
+ cli.StringFlag{
+ Name: "cni-config-dir",
+ Usage: "path of the configuration directory for CNI networks",
+ },
+ cli.StringFlag{
+ Name: "conmon",
+ Usage: "path of the conmon binary",
+ },
+ cli.StringFlag{
+ Name: "default-mounts-file",
+ Usage: "path to default mounts file",
+ Hidden: true,
+ },
+ cli.StringSliceFlag{
+ Name: "hooks-dir",
+ Usage: "set the OCI hooks directory path (may be set multiple times)",
+ },
+ cli.IntFlag{
+ Name: "max-workers",
+ Usage: "the maximum number of workers for parallel operations",
+ Hidden: true,
+ },
+ cli.StringFlag{
+ Name: "namespace",
+ Usage: "set the libpod namespace, used to create separate views of the containers and pods on the system",
+ Value: "",
+ },
+ cli.StringFlag{
+ Name: "root",
+ Usage: "path to the root directory in which data, including images, is stored",
+ },
+ cli.StringFlag{
+ Name: "runroot",
+ Usage: "path to the 'run directory' where all state information is stored",
+ },
+ cli.StringFlag{
+ Name: "runtime",
+ Usage: "path to the OCI-compatible binary used to run containers, default is /usr/bin/runc",
+ },
+ cli.StringFlag{
+ Name: "storage-driver, s",
+ Usage: "select which storage driver is used to manage storage of images and containers (default is overlay)",
+ },
+ cli.StringSliceFlag{
+ Name: "storage-opt",
+ Usage: "used to pass an option to the storage driver",
+ },
+ cli.BoolFlag{
+ Name: "syslog",
+ Usage: "output logging information to syslog as well as the console",
+ },
+ }
+}
diff --git a/cmd/podman/commands_remoteclient.go b/cmd/podman/commands_remoteclient.go
new file mode 100644
index 000000000..6701e14a1
--- /dev/null
+++ b/cmd/podman/commands_remoteclient.go
@@ -0,0 +1,21 @@
+// +build remoteclient
+
+package main
+
+import "github.com/urfave/cli"
+
+func getAppCommands() []cli.Command {
+ return []cli.Command{}
+}
+
+func getImageSubCommands() []cli.Command {
+ return []cli.Command{}
+}
+
+func getContainerSubCommands() []cli.Command {
+ return []cli.Command{}
+}
+
+func getMainAppFlags() []cli.Flag {
+ return []cli.Flag{}
+}
diff --git a/cmd/podman/common.go b/cmd/podman/common.go
index 8404a29b8..d934c8699 100644
--- a/cmd/podman/common.go
+++ b/cmd/podman/common.go
@@ -28,6 +28,10 @@ var (
Name: "latest, l",
Usage: "act on the latest pod podman is aware of",
}
+ WorkDirFlag = cli.StringFlag{
+ Name: "workdir, w",
+ Usage: "Working directory inside the container",
+ }
)
const (
@@ -321,6 +325,15 @@ var createFlags = []cli.Flag{
Value: "bind",
},
cli.BoolFlag{
+ Name: "init",
+ Usage: "Run an init binary inside the container that forwards signals and reaps processes",
+ },
+ cli.StringFlag{
+ Name: "init-path",
+ // Do not use the Value field for setting the default value to determine user input (i.e., non-empty string)
+ Usage: fmt.Sprintf("Path to the container-init binary (default: %q)", libpod.DefaultInitPath),
+ },
+ cli.BoolFlag{
Name: "interactive, i",
Usage: "Keep STDIN open even if not attached",
},
@@ -513,10 +526,7 @@ var createFlags = []cli.Flag{
Name: "volumes-from",
Usage: "Mount volumes from the specified container(s) (default [])",
},
- cli.StringFlag{
- Name: "workdir, w",
- Usage: "Working `directory inside the container",
- },
+ WorkDirFlag,
}
func getFormat(c *cli.Context) (string, error) {
diff --git a/cmd/podman/container.go b/cmd/podman/container.go
index 4bb6f287a..acbcbb644 100644
--- a/cmd/podman/container.go
+++ b/cmd/podman/container.go
@@ -1,52 +1,29 @@
package main
import (
+ "sort"
+
"github.com/urfave/cli"
)
var (
- subCommands = []cli.Command{
- attachCommand,
- checkpointCommand,
- cleanupCommand,
- containerExistsCommand,
- commitCommand,
- createCommand,
- diffCommand,
- execCommand,
- exportCommand,
+ containerSubCommands = []cli.Command{
inspectCommand,
- killCommand,
- logsCommand,
- psCommand,
- mountCommand,
- pauseCommand,
- portCommand,
- pruneContainersCommand,
- refreshCommand,
- restartCommand,
- restoreCommand,
- rmCommand,
- runCommand,
- runlabelCommand,
- startCommand,
- statsCommand,
- stopCommand,
- topCommand,
- umountCommand,
- unpauseCommand,
- // updateCommand,
- waitCommand,
}
-
containerDescription = "Manage containers"
containerCommand = cli.Command{
Name: "container",
Usage: "Manage Containers",
Description: containerDescription,
ArgsUsage: "",
- Subcommands: subCommands,
+ Subcommands: getContainerSubCommandsSorted(),
UseShortOptionHandling: true,
OnUsageError: usageErrorHandler,
}
)
+
+func getContainerSubCommandsSorted() []cli.Command {
+ containerSubCommands = append(containerSubCommands, getContainerSubCommands()...)
+ sort.Sort(commandSortedAlpha{containerSubCommands})
+ return containerSubCommands
+}
diff --git a/cmd/podman/create.go b/cmd/podman/create.go
index dae429047..065d08df4 100644
--- a/cmd/podman/create.go
+++ b/cmd/podman/create.go
@@ -4,6 +4,7 @@ import (
"context"
"encoding/json"
"fmt"
+ "io/ioutil"
"os"
"path/filepath"
"strconv"
@@ -15,13 +16,11 @@ import (
"github.com/containers/libpod/libpod"
"github.com/containers/libpod/libpod/image"
ann "github.com/containers/libpod/pkg/annotations"
- "github.com/containers/libpod/pkg/apparmor"
"github.com/containers/libpod/pkg/inspect"
ns "github.com/containers/libpod/pkg/namespaces"
"github.com/containers/libpod/pkg/rootless"
cc "github.com/containers/libpod/pkg/spec"
"github.com/containers/libpod/pkg/util"
- libpodVersion "github.com/containers/libpod/version"
"github.com/docker/docker/pkg/signal"
"github.com/docker/go-connections/nat"
"github.com/docker/go-units"
@@ -146,7 +145,7 @@ func createContainer(c *cli.Context, runtime *libpod.Runtime) (*libpod.Container
return nil, nil, err
}
- ctr, err := createContainerFromCreateConfig(runtime, createConfig, ctx)
+ ctr, err := createContainerFromCreateConfig(runtime, createConfig, ctx, nil)
if err != nil {
return nil, nil, err
}
@@ -162,83 +161,9 @@ func createContainer(c *cli.Context, runtime *libpod.Runtime) (*libpod.Container
return ctr, createConfig, nil
}
-// Checks if a user-specified AppArmor profile is loaded, or loads the default profile if
-// AppArmor is enabled.
-// Any interaction with AppArmor requires root permissions.
-func loadAppArmor(config *cc.CreateConfig) error {
- if rootless.IsRootless() {
- noAAMsg := "AppArmor security is not available in rootless mode"
- switch config.ApparmorProfile {
- case "":
- logrus.Warn(noAAMsg)
- case "unconfined":
- default:
- return fmt.Errorf(noAAMsg)
- }
- return nil
- }
-
- if config.ApparmorProfile == "" && apparmor.IsEnabled() {
- // Unless specified otherwise, make sure that the default AppArmor
- // profile is installed. To avoid redundantly loading the profile
- // on each invocation, check if it's loaded before installing it.
- // Suffix the profile with the current libpod version to allow
- // loading the new, potentially updated profile after an update.
- profile := fmt.Sprintf("%s-%s", apparmor.DefaultLibpodProfile, libpodVersion.Version)
-
- loadProfile := func() error {
- isLoaded, err := apparmor.IsLoaded(profile)
- if err != nil {
- return err
- }
- if !isLoaded {
- err = apparmor.InstallDefault(profile)
- if err != nil {
- return err
- }
-
- }
- return nil
- }
-
- if err := loadProfile(); err != nil {
- switch err {
- case apparmor.ErrApparmorUnsupported:
- // do not set the profile when AppArmor isn't supported
- logrus.Debugf("AppArmor is not supported: setting empty profile")
- default:
- return err
- }
- } else {
- logrus.Infof("Sucessfully loaded AppAmor profile '%s'", profile)
- config.ApparmorProfile = profile
- }
- } else if config.ApparmorProfile != "" && config.ApparmorProfile != "unconfined" {
- if !apparmor.IsEnabled() {
- return fmt.Errorf("Profile specified but AppArmor is disabled on the host")
- }
-
- isLoaded, err := apparmor.IsLoaded(config.ApparmorProfile)
- if err != nil {
- switch err {
- case apparmor.ErrApparmorUnsupported:
- return fmt.Errorf("Profile specified but AppArmor is not supported")
- default:
- return fmt.Errorf("Error checking if AppArmor profile is loaded: %v", err)
- }
- }
- if !isLoaded {
- return fmt.Errorf("The specified AppArmor profile '%s' is not loaded", config.ApparmorProfile)
- }
- }
-
- return nil
-}
-
func parseSecurityOpt(config *cc.CreateConfig, securityOpts []string) error {
var (
labelOpts []string
- err error
)
if config.PidMode.IsHost() {
@@ -248,7 +173,11 @@ func parseSecurityOpt(config *cc.CreateConfig, securityOpts []string) error {
if err != nil {
return errors.Wrapf(err, "container %q not found", config.PidMode.Container())
}
- labelOpts = append(labelOpts, label.DupSecOpt(ctr.ProcessLabel())...)
+ secopts, err := label.DupSecOpt(ctr.ProcessLabel())
+ if err != nil {
+ return errors.Wrapf(err, "failed to duplicate label %q ", ctr.ProcessLabel())
+ }
+ labelOpts = append(labelOpts, secopts...)
}
if config.IpcMode.IsHost() {
@@ -258,7 +187,11 @@ func parseSecurityOpt(config *cc.CreateConfig, securityOpts []string) error {
if err != nil {
return errors.Wrapf(err, "container %q not found", config.IpcMode.Container())
}
- labelOpts = append(labelOpts, label.DupSecOpt(ctr.ProcessLabel())...)
+ secopts, err := label.DupSecOpt(ctr.ProcessLabel())
+ if err != nil {
+ return errors.Wrapf(err, "failed to duplicate label %q ", ctr.ProcessLabel())
+ }
+ labelOpts = append(labelOpts, secopts...)
}
for _, opt := range securityOpts {
@@ -283,10 +216,6 @@ func parseSecurityOpt(config *cc.CreateConfig, securityOpts []string) error {
}
}
- if err := loadAppArmor(config); err != nil {
- return err
- }
-
if config.SeccompProfilePath == "" {
if _, err := os.Stat(libpod.SeccompOverridePath); err == nil {
config.SeccompProfilePath = libpod.SeccompOverridePath
@@ -304,7 +233,7 @@ func parseSecurityOpt(config *cc.CreateConfig, securityOpts []string) error {
}
}
config.LabelOpts = labelOpts
- return err
+ return nil
}
// isPortInPortBindings determines if an exposed host port is in user
@@ -501,6 +430,16 @@ func parseCreateOpts(ctx context.Context, c *cli.Context, runtime *libpod.Runtim
}
if c.IsSet("pod") {
if strings.HasPrefix(originalPodName, "new:") {
+ if rootless.IsRootless() {
+ // To create a new pod, we must immediately create the userns.
+ became, ret, err := rootless.BecomeRootInUserNS()
+ if err != nil {
+ return nil, err
+ }
+ if became {
+ os.Exit(ret)
+ }
+ }
// pod does not exist; lets make it
var podOptions []libpod.PodCreateOption
podOptions = append(podOptions, libpod.WithPodName(podName), libpod.WithInfraContainer(), libpod.WithPodCgroups())
@@ -809,6 +748,16 @@ func parseCreateOpts(ctx context.Context, c *cli.Context, runtime *libpod.Runtim
Syslog: c.GlobalBool("syslog"),
}
+ if c.Bool("init") {
+ initPath := c.String("init-path")
+ if initPath == "" {
+ initPath = runtime.GetConfig().InitPath
+ }
+ if err := config.AddContainerInitBinary(initPath); err != nil {
+ return nil, err
+ }
+ }
+
if config.Privileged {
config.LabelOpts = label.DisableSecOpt()
} else {
@@ -855,11 +804,15 @@ func joinOrCreateRootlessUserNamespace(createConfig *cc.CreateConfig, runtime *l
if s != libpod.ContainerStateRunning && s != libpod.ContainerStatePaused {
continue
}
- pid, err := prevCtr.PID()
+ data, err := ioutil.ReadFile(prevCtr.Config().ConmonPidFile)
if err != nil {
- return false, -1, err
+ return false, -1, errors.Wrapf(err, "cannot read conmon PID file %q", prevCtr.Config().ConmonPidFile)
}
- return rootless.JoinNS(uint(pid))
+ conmonPid, err := strconv.Atoi(string(data))
+ if err != nil {
+ return false, -1, errors.Wrapf(err, "cannot parse PID %q", data)
+ }
+ return rootless.JoinDirectUserAndMountNS(uint(conmonPid))
}
}
@@ -887,17 +840,16 @@ func joinOrCreateRootlessUserNamespace(createConfig *cc.CreateConfig, runtime *l
return rootless.BecomeRootInUserNS()
}
-func createContainerFromCreateConfig(r *libpod.Runtime, createConfig *cc.CreateConfig, ctx context.Context) (*libpod.Container, error) {
+func createContainerFromCreateConfig(r *libpod.Runtime, createConfig *cc.CreateConfig, ctx context.Context, pod *libpod.Pod) (*libpod.Container, error) {
runtimeSpec, err := cc.CreateConfigToOCISpec(createConfig)
if err != nil {
return nil, err
}
- options, err := createConfig.GetContainerCreateOptions(r)
+ options, err := createConfig.GetContainerCreateOptions(r, pod)
if err != nil {
return nil, err
}
-
became, ret, err := joinOrCreateRootlessUserNamespace(createConfig, r)
if err != nil {
return nil, err
diff --git a/cmd/podman/create_cli.go b/cmd/podman/create_cli.go
index 2a820fa43..95b9321fd 100644
--- a/cmd/podman/create_cli.go
+++ b/cmd/podman/create_cli.go
@@ -7,7 +7,7 @@ import (
"strings"
cc "github.com/containers/libpod/pkg/spec"
- "github.com/docker/docker/pkg/sysinfo"
+ "github.com/containers/libpod/pkg/sysinfo"
"github.com/docker/go-units"
spec "github.com/opencontainers/runtime-spec/specs-go"
"github.com/pkg/errors"
@@ -201,6 +201,9 @@ func parseVolumesFrom(volumesFrom []string) error {
}
func validateVolumeHostDir(hostDir string) error {
+ if len(hostDir) == 0 {
+ return errors.Errorf("host directory cannot be empty")
+ }
if filepath.IsAbs(hostDir) {
if _, err := os.Stat(hostDir); err != nil {
return errors.Wrapf(err, "error checking path %q", hostDir)
@@ -212,6 +215,9 @@ func validateVolumeHostDir(hostDir string) error {
}
func validateVolumeCtrDir(ctrDir string) error {
+ if len(ctrDir) == 0 {
+ return errors.Errorf("container directory cannot be empty")
+ }
if !filepath.IsAbs(ctrDir) {
return errors.Errorf("invalid container path, must be an absolute path %q", ctrDir)
}
diff --git a/cmd/podman/exec.go b/cmd/podman/exec.go
index 1dcb88dbd..073e72e64 100644
--- a/cmd/podman/exec.go
+++ b/cmd/podman/exec.go
@@ -3,7 +3,6 @@ package main
import (
"fmt"
"os"
- "strings"
"github.com/containers/libpod/cmd/podman/libpodruntime"
"github.com/containers/libpod/libpod"
@@ -35,6 +34,7 @@ var (
Usage: "Sets the username or UID used and optionally the groupname or GID for the specified command",
},
LatestFlag,
+ WorkDirFlag,
}
execDescription = `
podman exec
@@ -99,15 +99,7 @@ func execCmd(c *cli.Context) error {
}
// ENVIRONMENT VARIABLES
- env := defaultEnvVariables
- for _, e := range c.StringSlice("env") {
- split := strings.SplitN(e, "=", 2)
- if len(split) > 1 {
- env[split[0]] = split[1]
- } else {
- env[split[0]] = ""
- }
- }
+ env := map[string]string{}
if err := readKVStrings(env, []string{}, c.StringSlice("env")); err != nil {
return errors.Wrapf(err, "unable to process environment variables")
@@ -117,5 +109,5 @@ func execCmd(c *cli.Context) error {
envs = append(envs, fmt.Sprintf("%s=%s", k, v))
}
- return ctr.Exec(c.Bool("tty"), c.Bool("privileged"), envs, cmd, c.String("user"))
+ return ctr.Exec(c.Bool("tty"), c.Bool("privileged"), envs, cmd, c.String("user"), c.String("workdir"))
}
diff --git a/cmd/podman/exists.go b/cmd/podman/exists.go
index 2e2559ec7..a7601aaa2 100644
--- a/cmd/podman/exists.go
+++ b/cmd/podman/exists.go
@@ -5,6 +5,7 @@ import (
"github.com/containers/libpod/cmd/podman/libpodruntime"
"github.com/containers/libpod/libpod"
+ "github.com/containers/libpod/libpod/adapter"
"github.com/containers/libpod/libpod/image"
"github.com/pkg/errors"
"github.com/urfave/cli"
@@ -66,13 +67,15 @@ func imageExistsCmd(c *cli.Context) error {
if len(args) > 1 || len(args) < 1 {
return errors.New("you may only check for the existence of one image at a time")
}
- runtime, err := libpodruntime.GetRuntime(c)
+ runtime, err := adapter.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "could not get runtime")
}
defer runtime.Shutdown(false)
- if _, err := runtime.ImageRuntime().NewFromLocal(args[0]); err != nil {
- if errors.Cause(err) == image.ErrNoSuchImage {
+ if _, err := runtime.NewImageFromLocal(args[0]); err != nil {
+ //TODO we need to ask about having varlink defined errors exposed
+ //so we can reuse them
+ if errors.Cause(err) == image.ErrNoSuchImage || err.Error() == "io.podman.ImageNotFound" {
os.Exit(1)
}
return err
@@ -85,13 +88,13 @@ func containerExistsCmd(c *cli.Context) error {
if len(args) > 1 || len(args) < 1 {
return errors.New("you may only check for the existence of one container at a time")
}
- runtime, err := libpodruntime.GetRuntime(c)
+ runtime, err := adapter.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "could not get runtime")
}
defer runtime.Shutdown(false)
if _, err := runtime.LookupContainer(args[0]); err != nil {
- if errors.Cause(err) == libpod.ErrNoSuchCtr {
+ if errors.Cause(err) == libpod.ErrNoSuchCtr || err.Error() == "io.podman.ContainerNotFound" {
os.Exit(1)
}
return err
diff --git a/cmd/podman/formats/formats.go b/cmd/podman/formats/formats.go
index 3da0ea385..c454c39bd 100644
--- a/cmd/podman/formats/formats.go
+++ b/cmd/podman/formats/formats.go
@@ -20,6 +20,8 @@ const (
JSONString = "json"
// IDString const to save on duplicates for Go templates
IDString = "{{.ID}}"
+
+ parsingErrorStr = "Template parsing error"
)
// Writer interface for outputs
@@ -96,7 +98,7 @@ func (t StdoutTemplateArray) Out() error {
t.Template = strings.Replace(strings.TrimSpace(t.Template[5:]), " ", "\t", -1)
headerTmpl, err := template.New("header").Funcs(headerFunctions).Parse(t.Template)
if err != nil {
- return errors.Wrapf(err, "Template parsing error")
+ return errors.Wrapf(err, parsingErrorStr)
}
err = headerTmpl.Execute(w, t.Fields)
if err != nil {
@@ -107,13 +109,12 @@ func (t StdoutTemplateArray) Out() error {
t.Template = strings.Replace(t.Template, " ", "\t", -1)
tmpl, err := template.New("image").Funcs(basicFunctions).Parse(t.Template)
if err != nil {
- return errors.Wrapf(err, "Template parsing error")
+ return errors.Wrapf(err, parsingErrorStr)
}
- for i, img := range t.Output {
+ for i, raw := range t.Output {
basicTmpl := tmpl.Funcs(basicFunctions)
- err = basicTmpl.Execute(w, img)
- if err != nil {
- return err
+ if err := basicTmpl.Execute(w, raw); err != nil {
+ return errors.Wrapf(err, parsingErrorStr)
}
if i != len(t.Output)-1 {
fmt.Fprintln(w, "")
diff --git a/cmd/podman/history.go b/cmd/podman/history.go
index 7c8c619c8..8a9b6cd94 100644
--- a/cmd/podman/history.go
+++ b/cmd/podman/history.go
@@ -7,9 +7,9 @@ import (
"time"
"github.com/containers/libpod/cmd/podman/formats"
- "github.com/containers/libpod/cmd/podman/libpodruntime"
+ "github.com/containers/libpod/libpod/adapter"
"github.com/containers/libpod/libpod/image"
- units "github.com/docker/go-units"
+ "github.com/docker/go-units"
"github.com/pkg/errors"
"github.com/urfave/cli"
)
@@ -72,7 +72,7 @@ func historyCmd(c *cli.Context) error {
return err
}
- runtime, err := libpodruntime.GetRuntime(c)
+ runtime, err := adapter.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "could not get runtime")
}
@@ -88,7 +88,7 @@ func historyCmd(c *cli.Context) error {
return errors.Errorf("podman history takes at most 1 argument")
}
- image, err := runtime.ImageRuntime().NewFromLocal(args[0])
+ image, err := runtime.NewImageFromLocal(args[0])
if err != nil {
return err
}
diff --git a/cmd/podman/image.go b/cmd/podman/image.go
index e978b9cf5..a51a90b0e 100644
--- a/cmd/podman/image.go
+++ b/cmd/podman/image.go
@@ -1,35 +1,36 @@
package main
import (
+ "sort"
+
"github.com/urfave/cli"
)
var (
imageSubCommands = []cli.Command{
- buildCommand,
historyCommand,
- importCommand,
imageExistsCommand,
inspectCommand,
- loadCommand,
lsImagesCommand,
pruneImagesCommand,
pullCommand,
- pushCommand,
rmImageCommand,
- saveCommand,
tagCommand,
- trustCommand,
}
-
imageDescription = "Manage images"
imageCommand = cli.Command{
Name: "image",
Usage: "Manage images",
Description: imageDescription,
ArgsUsage: "",
- Subcommands: imageSubCommands,
+ Subcommands: getImageSubCommandsSorted(),
UseShortOptionHandling: true,
OnUsageError: usageErrorHandler,
}
)
+
+func getImageSubCommandsSorted() []cli.Command {
+ imageSubCommands = append(imageSubCommands, getImageSubCommands()...)
+ sort.Sort(commandSortedAlpha{imageSubCommands})
+ return imageSubCommands
+}
diff --git a/libpod/image/filters.go b/cmd/podman/imagefilters/filters.go
index d0c3adfb5..366510202 100644
--- a/libpod/image/filters.go
+++ b/cmd/podman/imagefilters/filters.go
@@ -1,25 +1,26 @@
-package image
+package imagefilters
import (
"context"
"strings"
"time"
+ "github.com/containers/libpod/libpod/adapter"
"github.com/containers/libpod/pkg/inspect"
)
// ResultFilter is a mock function for image filtering
-type ResultFilter func(*Image) bool
+type ResultFilter func(*adapter.ContainerImage) bool
// Filter is a function to determine whether an image is included in
// command output. Images to be outputted are tested using the function. A true
// return will include the image, a false return will exclude it.
-type Filter func(*Image, *inspect.ImageData) bool
+type Filter func(*adapter.ContainerImage, *inspect.ImageData) bool
// CreatedBeforeFilter allows you to filter on images created before
// the given time.Time
func CreatedBeforeFilter(createTime time.Time) ResultFilter {
- return func(i *Image) bool {
+ return func(i *adapter.ContainerImage) bool {
return i.Created().Before(createTime)
}
}
@@ -27,14 +28,14 @@ func CreatedBeforeFilter(createTime time.Time) ResultFilter {
// CreatedAfterFilter allows you to filter on images created after
// the given time.Time
func CreatedAfterFilter(createTime time.Time) ResultFilter {
- return func(i *Image) bool {
+ return func(i *adapter.ContainerImage) bool {
return i.Created().After(createTime)
}
}
// DanglingFilter allows you to filter images for dangling images
func DanglingFilter() ResultFilter {
- return func(i *Image) bool {
+ return func(i *adapter.ContainerImage) bool {
return i.Dangling()
}
}
@@ -42,7 +43,7 @@ func DanglingFilter() ResultFilter {
// LabelFilter allows you to filter by images labels key and/or value
func LabelFilter(ctx context.Context, labelfilter string) ResultFilter {
// We need to handle both label=key and label=key=value
- return func(i *Image) bool {
+ return func(i *adapter.ContainerImage) bool {
var value string
splitFilter := strings.Split(labelfilter, "=")
key := splitFilter[0]
@@ -61,15 +62,15 @@ func LabelFilter(ctx context.Context, labelfilter string) ResultFilter {
}
// OutputImageFilter allows you to filter by an a specific image name
-func OutputImageFilter(userImage *Image) ResultFilter {
- return func(i *Image) bool {
+func OutputImageFilter(userImage *adapter.ContainerImage) ResultFilter {
+ return func(i *adapter.ContainerImage) bool {
return userImage.ID() == i.ID()
}
}
// FilterImages filters images using a set of predefined filter funcs
-func FilterImages(images []*Image, filters []ResultFilter) []*Image {
- var filteredImages []*Image
+func FilterImages(images []*adapter.ContainerImage, filters []ResultFilter) []*adapter.ContainerImage {
+ var filteredImages []*adapter.ContainerImage
for _, image := range images {
include := true
for _, filter := range filters {
diff --git a/cmd/podman/images.go b/cmd/podman/images.go
index 522863b1b..031f06618 100644
--- a/cmd/podman/images.go
+++ b/cmd/podman/images.go
@@ -9,11 +9,11 @@ import (
"unicode"
"github.com/containers/libpod/cmd/podman/formats"
- "github.com/containers/libpod/cmd/podman/libpodruntime"
- "github.com/containers/libpod/libpod"
+ "github.com/containers/libpod/cmd/podman/imagefilters"
+ "github.com/containers/libpod/libpod/adapter"
"github.com/containers/libpod/libpod/image"
"github.com/docker/go-units"
- digest "github.com/opencontainers/go-digest"
+ "github.com/opencontainers/go-digest"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
@@ -145,20 +145,20 @@ var (
func imagesCmd(c *cli.Context) error {
var (
- filterFuncs []image.ResultFilter
- newImage *image.Image
+ filterFuncs []imagefilters.ResultFilter
+ newImage *adapter.ContainerImage
)
if err := validateFlags(c, imagesFlags); err != nil {
return err
}
- runtime, err := libpodruntime.GetRuntime(c)
+ runtime, err := adapter.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "Could not get runtime")
}
defer runtime.Shutdown(false)
if len(c.Args()) == 1 {
- newImage, err = runtime.ImageRuntime().NewFromLocal(c.Args().Get(0))
+ newImage, err = runtime.NewImageFromLocal(c.Args().Get(0))
if err != nil {
return err
}
@@ -195,20 +195,20 @@ func imagesCmd(c *cli.Context) error {
children to the image once built. until buildah supports caching builds,
it will not generate these intermediate images.
*/
- images, err := runtime.ImageRuntime().GetImages()
+ images, err := runtime.GetImages()
if err != nil {
return errors.Wrapf(err, "unable to get images")
}
- var filteredImages []*image.Image
- // filter the images
+ var filteredImages []*adapter.ContainerImage
+ //filter the images
if len(c.StringSlice("filter")) > 0 || newImage != nil {
- filteredImages = image.FilterImages(images, filterFuncs)
+ filteredImages = imagefilters.FilterImages(images, filterFuncs)
} else {
filteredImages = images
}
- return generateImagesOutput(ctx, runtime, filteredImages, opts)
+ return generateImagesOutput(ctx, filteredImages, opts)
}
func (i imagesOptions) setOutputFormat() string {
@@ -263,7 +263,7 @@ func sortImagesOutput(sortBy string, imagesOutput imagesSorted) imagesSorted {
}
// getImagesTemplateOutput returns the images information to be printed in human readable format
-func getImagesTemplateOutput(ctx context.Context, runtime *libpod.Runtime, images []*image.Image, opts imagesOptions) (imagesOutput imagesSorted) {
+func getImagesTemplateOutput(ctx context.Context, images []*adapter.ContainerImage, opts imagesOptions) (imagesOutput imagesSorted) {
for _, img := range images {
// If all is false and the image doesn't have a name, check to see if the top layer of the image is a parent
// to another image's top layer. If it is, then it is an intermediate image so don't print out if the --all flag
@@ -319,7 +319,7 @@ func getImagesTemplateOutput(ctx context.Context, runtime *libpod.Runtime, image
}
// getImagesJSONOutput returns the images information in its raw form
-func getImagesJSONOutput(ctx context.Context, runtime *libpod.Runtime, images []*image.Image) (imagesOutput []imagesJSONParams) {
+func getImagesJSONOutput(ctx context.Context, images []*adapter.ContainerImage) (imagesOutput []imagesJSONParams) {
for _, img := range images {
size, err := img.Size(ctx)
if err != nil {
@@ -339,7 +339,7 @@ func getImagesJSONOutput(ctx context.Context, runtime *libpod.Runtime, images []
// generateImagesOutput generates the images based on the format provided
-func generateImagesOutput(ctx context.Context, runtime *libpod.Runtime, images []*image.Image, opts imagesOptions) error {
+func generateImagesOutput(ctx context.Context, images []*adapter.ContainerImage, opts imagesOptions) error {
if len(images) == 0 {
return nil
}
@@ -347,10 +347,10 @@ func generateImagesOutput(ctx context.Context, runtime *libpod.Runtime, images [
switch opts.format {
case formats.JSONString:
- imagesOutput := getImagesJSONOutput(ctx, runtime, images)
+ imagesOutput := getImagesJSONOutput(ctx, images)
out = formats.JSONStructArray{Output: imagesToGeneric([]imagesTemplateParams{}, imagesOutput)}
default:
- imagesOutput := getImagesTemplateOutput(ctx, runtime, images, opts)
+ imagesOutput := getImagesTemplateOutput(ctx, images, opts)
out = formats.StdoutTemplateArray{Output: imagesToGeneric(imagesOutput, []imagesJSONParams{}), Template: opts.outputformat, Fields: imagesOutput[0].HeaderMap()}
}
return formats.Writer(out).Out()
@@ -375,34 +375,34 @@ func (i *imagesTemplateParams) HeaderMap() map[string]string {
// CreateFilterFuncs returns an array of filter functions based on the user inputs
// and is later used to filter images for output
-func CreateFilterFuncs(ctx context.Context, r *libpod.Runtime, c *cli.Context, img *image.Image) ([]image.ResultFilter, error) {
- var filterFuncs []image.ResultFilter
+func CreateFilterFuncs(ctx context.Context, r *adapter.LocalRuntime, c *cli.Context, img *adapter.ContainerImage) ([]imagefilters.ResultFilter, error) {
+ var filterFuncs []imagefilters.ResultFilter
for _, filter := range c.StringSlice("filter") {
splitFilter := strings.Split(filter, "=")
switch splitFilter[0] {
case "before":
- before, err := r.ImageRuntime().NewFromLocal(splitFilter[1])
+ before, err := r.NewImageFromLocal(splitFilter[1])
if err != nil {
return nil, errors.Wrapf(err, "unable to find image %s in local stores", splitFilter[1])
}
- filterFuncs = append(filterFuncs, image.CreatedBeforeFilter(before.Created()))
+ filterFuncs = append(filterFuncs, imagefilters.CreatedBeforeFilter(before.Created()))
case "after":
- after, err := r.ImageRuntime().NewFromLocal(splitFilter[1])
+ after, err := r.NewImageFromLocal(splitFilter[1])
if err != nil {
return nil, errors.Wrapf(err, "unable to find image %s in local stores", splitFilter[1])
}
- filterFuncs = append(filterFuncs, image.CreatedAfterFilter(after.Created()))
+ filterFuncs = append(filterFuncs, imagefilters.CreatedAfterFilter(after.Created()))
case "dangling":
- filterFuncs = append(filterFuncs, image.DanglingFilter())
+ filterFuncs = append(filterFuncs, imagefilters.DanglingFilter())
case "label":
labelFilter := strings.Join(splitFilter[1:], "=")
- filterFuncs = append(filterFuncs, image.LabelFilter(ctx, labelFilter))
+ filterFuncs = append(filterFuncs, imagefilters.LabelFilter(ctx, labelFilter))
default:
return nil, errors.Errorf("invalid filter %s ", splitFilter[0])
}
}
if img != nil {
- filterFuncs = append(filterFuncs, image.OutputImageFilter(img))
+ filterFuncs = append(filterFuncs, imagefilters.OutputImageFilter(img))
}
return filterFuncs, nil
}
diff --git a/cmd/podman/images_prune.go b/cmd/podman/images_prune.go
index cb72a498f..06879e02d 100644
--- a/cmd/podman/images_prune.go
+++ b/cmd/podman/images_prune.go
@@ -1,8 +1,8 @@
package main
import (
+ "fmt"
"github.com/containers/libpod/cmd/podman/libpodruntime"
- "github.com/containers/libpod/cmd/podman/shared"
"github.com/pkg/errors"
"github.com/urfave/cli"
)
@@ -30,5 +30,16 @@ func pruneImagesCmd(c *cli.Context) error {
}
defer runtime.Shutdown(false)
- return shared.Prune(runtime.ImageRuntime())
+ pruneImages, err := runtime.ImageRuntime().GetPruneImages()
+ if err != nil {
+ return err
+ }
+
+ for _, i := range pruneImages {
+ if err := i.Remove(true); err != nil {
+ return errors.Wrapf(err, "failed to remove %s", i.ID())
+ }
+ fmt.Println(i.ID())
+ }
+ return nil
}
diff --git a/cmd/podman/info.go b/cmd/podman/info.go
index c0639725e..3888829a3 100644
--- a/cmd/podman/info.go
+++ b/cmd/podman/info.go
@@ -1,11 +1,13 @@
package main
import (
- "runtime"
+ "fmt"
+ rt "runtime"
"github.com/containers/libpod/cmd/podman/formats"
- "github.com/containers/libpod/cmd/podman/libpodruntime"
"github.com/containers/libpod/libpod"
+ "github.com/containers/libpod/libpod/adapter"
+ "github.com/containers/libpod/version"
"github.com/pkg/errors"
"github.com/urfave/cli"
)
@@ -38,8 +40,9 @@ func infoCmd(c *cli.Context) error {
return err
}
info := map[string]interface{}{}
+ remoteClientInfo := map[string]interface{}{}
- runtime, err := libpodruntime.GetRuntime(c)
+ runtime, err := adapter.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "could not get runtime")
}
@@ -49,8 +52,14 @@ func infoCmd(c *cli.Context) error {
if err != nil {
return errors.Wrapf(err, "error getting info")
}
+ if runtime.Remote {
+ remoteClientInfo["RemoteAPI Version"] = version.RemoteAPIVersion
+ remoteClientInfo["Podman Version"] = version.Version
+ remoteClientInfo["OS Arch"] = fmt.Sprintf("%s/%s", rt.GOOS, rt.GOARCH)
+ infoArr = append(infoArr, libpod.InfoData{Type: "client", Data: remoteClientInfo})
+ }
- if c.Bool("debug") {
+ if !runtime.Remote && c.Bool("debug") {
debugInfo := debugInfo(c)
infoArr = append(infoArr, libpod.InfoData{Type: "debug", Data: debugInfo})
}
@@ -78,8 +87,8 @@ func infoCmd(c *cli.Context) error {
// top-level "debug" info
func debugInfo(c *cli.Context) map[string]interface{} {
info := map[string]interface{}{}
- info["compiler"] = runtime.Compiler
- info["go version"] = runtime.Version()
+ info["compiler"] = rt.Compiler
+ info["go version"] = rt.Version()
info["podman version"] = c.App.Version
version, _ := libpod.GetVersion()
info["git commit"] = version.GitCommit
diff --git a/cmd/podman/inspect.go b/cmd/podman/inspect.go
index 6ffcde55f..3ef740463 100644
--- a/cmd/podman/inspect.go
+++ b/cmd/podman/inspect.go
@@ -2,12 +2,13 @@ package main
import (
"context"
+ "encoding/json"
"strings"
"github.com/containers/libpod/cmd/podman/formats"
- "github.com/containers/libpod/cmd/podman/libpodruntime"
"github.com/containers/libpod/cmd/podman/shared"
- "github.com/containers/libpod/libpod"
+ "github.com/containers/libpod/libpod/adapter"
+ cc "github.com/containers/libpod/pkg/spec"
"github.com/containers/libpod/pkg/util"
"github.com/pkg/errors"
"github.com/urfave/cli"
@@ -63,7 +64,7 @@ func inspectCmd(c *cli.Context) error {
return err
}
- runtime, err := libpodruntime.GetRuntime(c)
+ runtime, err := adapter.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "error creating libpod runtime")
}
@@ -87,6 +88,9 @@ func inspectCmd(c *cli.Context) error {
}
inspectedObjects, iterateErr := iterateInput(getContext(), c, args, runtime, inspectType)
+ if iterateErr != nil {
+ return iterateErr
+ }
var out formats.Writer
if outputFormat != "" && outputFormat != formats.JSONString {
@@ -97,12 +101,11 @@ func inspectCmd(c *cli.Context) error {
out = formats.JSONStructArray{Output: inspectedObjects}
}
- formats.Writer(out).Out()
- return iterateErr
+ return formats.Writer(out).Out()
}
// func iterateInput iterates the images|containers the user has requested and returns the inspect data and error
-func iterateInput(ctx context.Context, c *cli.Context, args []string, runtime *libpod.Runtime, inspectType string) ([]interface{}, error) {
+func iterateInput(ctx context.Context, c *cli.Context, args []string, runtime *adapter.LocalRuntime, inspectType string) ([]interface{}, error) {
var (
data interface{}
inspectedItems []interface{}
@@ -122,13 +125,18 @@ func iterateInput(ctx context.Context, c *cli.Context, args []string, runtime *l
inspectError = errors.Wrapf(err, "error getting libpod container inspect data %s", ctr.ID())
break
}
- data, err = shared.GetCtrInspectInfo(ctr, libpodInspectData)
+ artifact, err := getArtifact(ctr)
+ if inspectError != nil {
+ inspectError = err
+ break
+ }
+ data, err = shared.GetCtrInspectInfo(ctr.Config(), libpodInspectData, artifact)
if err != nil {
inspectError = errors.Wrapf(err, "error parsing container data %q", ctr.ID())
break
}
case inspectTypeImage:
- image, err := runtime.ImageRuntime().NewFromLocal(input)
+ image, err := runtime.NewImageFromLocal(input)
if err != nil {
inspectError = errors.Wrapf(err, "error getting image %q", input)
break
@@ -141,7 +149,7 @@ func iterateInput(ctx context.Context, c *cli.Context, args []string, runtime *l
case inspectAll:
ctr, err := runtime.LookupContainer(input)
if err != nil {
- image, err := runtime.ImageRuntime().NewFromLocal(input)
+ image, err := runtime.NewImageFromLocal(input)
if err != nil {
inspectError = errors.Wrapf(err, "error getting image %q", input)
break
@@ -157,7 +165,12 @@ func iterateInput(ctx context.Context, c *cli.Context, args []string, runtime *l
inspectError = errors.Wrapf(err, "error getting libpod container inspect data %s", ctr.ID())
break
}
- data, err = shared.GetCtrInspectInfo(ctr, libpodInspectData)
+ artifact, inspectError := getArtifact(ctr)
+ if inspectError != nil {
+ inspectError = err
+ break
+ }
+ data, err = shared.GetCtrInspectInfo(ctr.Config(), libpodInspectData, artifact)
if err != nil {
inspectError = errors.Wrapf(err, "error parsing container data %s", ctr.ID())
break
@@ -170,3 +183,15 @@ func iterateInput(ctx context.Context, c *cli.Context, args []string, runtime *l
}
return inspectedItems, inspectError
}
+
+func getArtifact(ctr *adapter.Container) (*cc.CreateConfig, error) {
+ var createArtifact cc.CreateConfig
+ artifact, err := ctr.GetArtifact("create-config")
+ if err != nil {
+ return nil, err
+ }
+ if err := json.Unmarshal(artifact, &createArtifact); err != nil {
+ return nil, err
+ }
+ return &createArtifact, nil
+}
diff --git a/cmd/podman/libpodruntime/runtime.go b/cmd/podman/libpodruntime/runtime.go
index d7a0dd931..dca2f5022 100644
--- a/cmd/podman/libpodruntime/runtime.go
+++ b/cmd/podman/libpodruntime/runtime.go
@@ -4,17 +4,15 @@ import (
"github.com/containers/libpod/libpod"
"github.com/containers/libpod/pkg/rootless"
"github.com/containers/libpod/pkg/util"
- "github.com/containers/storage"
"github.com/pkg/errors"
"github.com/urfave/cli"
)
// GetRuntime generates a new libpod runtime configured by command line options
func GetRuntime(c *cli.Context) (*libpod.Runtime, error) {
- storageOpts := new(storage.StoreOptions)
options := []libpod.RuntimeOption{}
- _, volumePath, err := util.GetDefaultStoreOptions()
+ storageOpts, volumePath, err := util.GetDefaultStoreOptions()
if err != nil {
return nil, err
}
@@ -44,7 +42,7 @@ func GetRuntime(c *cli.Context) (*libpod.Runtime, error) {
storageOpts.GraphDriverOptions = c.GlobalStringSlice("storage-opt")
}
- options = append(options, libpod.WithStorageConfig(*storageOpts))
+ options = append(options, libpod.WithStorageConfig(storageOpts))
// TODO CLI flags for image config?
// TODO CLI flag for signature policy?
diff --git a/cmd/podman/login.go b/cmd/podman/login.go
index 4452651f8..fc7b39ed8 100644
--- a/cmd/podman/login.go
+++ b/cmd/podman/login.go
@@ -62,12 +62,18 @@ func loginCmd(c *cli.Context) error {
return errors.Errorf("too many arguments, login takes only 1 argument")
}
if len(args) == 0 {
- return errors.Errorf("registry must be given")
+ return errors.Errorf("please specify a registry to login to")
}
server := registryFromFullName(scrubServer(args[0]))
authfile := getAuthFile(c.String("authfile"))
sc := common.GetSystemContext("", authfile, false)
+ if c.IsSet("tls-verify") {
+ sc.DockerInsecureSkipTLSVerify = types.NewOptionalBool(!c.BoolT("tls-verify"))
+ }
+ if c.String("cert-dir") != "" {
+ sc.DockerCertPath = c.String("cert-dir")
+ }
if c.IsSet("get-login") {
user, err := config.GetUserLoggedIn(sc, server)
@@ -87,39 +93,25 @@ func loginCmd(c *cli.Context) error {
// username of user logged in to server (if one exists)
userFromAuthFile, passFromAuthFile, err := config.GetAuthentication(sc, server)
if err != nil {
- return errors.Wrapf(err, "error getting logged-in user")
+ return errors.Wrapf(err, "error reading auth file")
}
ctx := getContext()
-
- var (
- username string
- password string
- )
-
- if userFromAuthFile != "" {
- username = userFromAuthFile
- password = passFromAuthFile
+ // If no username and no password is specified, try to use existing ones.
+ if c.String("username") == "" && c.String("password") == "" {
fmt.Println("Authenticating with existing credentials...")
- if err := docker.CheckAuth(ctx, sc, username, password, server); err == nil {
+ if err := docker.CheckAuth(ctx, sc, userFromAuthFile, passFromAuthFile, server); err == nil {
fmt.Println("Existing credentials are valid. Already logged in to", server)
return nil
}
fmt.Println("Existing credentials are invalid, please enter valid username and password")
}
- username, password, err = getUserAndPass(c.String("username"), c.String("password"), userFromAuthFile)
+ username, password, err := getUserAndPass(c.String("username"), c.String("password"), userFromAuthFile)
if err != nil {
return errors.Wrapf(err, "error getting username and password")
}
- if c.IsSet("tls-verify") {
- sc.DockerInsecureSkipTLSVerify = types.NewOptionalBool(!c.BoolT("tls-verify"))
- }
- if c.String("cert-dir") != "" {
- sc.DockerCertPath = c.String("cert-dir")
- }
-
if err = docker.CheckAuth(ctx, sc, username, password, server); err == nil {
// Write the new credentials to the authfile
if err = config.SetAuthentication(sc, server, username, password); err != nil {
@@ -131,14 +123,15 @@ func loginCmd(c *cli.Context) error {
fmt.Println("Login Succeeded!")
return nil
case docker.ErrUnauthorizedForCredentials:
- return errors.Errorf("error logging into %q: invalid username/password\n", server)
+ return errors.Errorf("error logging into %q: invalid username/password", server)
default:
return errors.Wrapf(err, "error authenticating creds for %q", server)
}
}
// getUserAndPass gets the username and password from STDIN if not given
-// using the -u and -p flags
+// using the -u and -p flags. If the username prompt is left empty, the
+// displayed userFromAuthFile will be used instead.
func getUserAndPass(username, password, userFromAuthFile string) (string, string, error) {
var err error
reader := bufio.NewReader(os.Stdin)
@@ -152,7 +145,10 @@ func getUserAndPass(username, password, userFromAuthFile string) (string, string
if err != nil {
return "", "", errors.Wrapf(err, "error reading username")
}
- // If no username provided, use userFromAuthFile instead.
+ // If the user just hit enter, use the displayed user from the
+ // the authentication file. This allows to do a lazy
+ // `$ podman login -p $NEW_PASSWORD` without specifying the
+ // user.
if strings.TrimSpace(username) == "" {
username = userFromAuthFile
}
diff --git a/cmd/podman/main.go b/cmd/podman/main.go
index 7ef22a93b..c10590006 100644
--- a/cmd/podman/main.go
+++ b/cmd/podman/main.go
@@ -6,6 +6,7 @@ import (
"os"
"os/exec"
"runtime/pprof"
+ "sort"
"syscall"
"github.com/containers/libpod/libpod"
@@ -47,6 +48,28 @@ var cmdsNotRequiringRootless = map[string]bool{
"top": true,
}
+type commandSorted []cli.Command
+
+func (a commandSorted) Len() int { return len(a) }
+func (a commandSorted) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+
+type commandSortedAlpha struct{ commandSorted }
+
+func (a commandSortedAlpha) Less(i, j int) bool {
+ return a.commandSorted[i].Name < a.commandSorted[j].Name
+}
+
+type flagSorted []cli.Flag
+
+func (a flagSorted) Len() int { return len(a) }
+func (a flagSorted) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+
+type flagSortedAlpha struct{ flagSorted }
+
+func (a flagSortedAlpha) Less(i, j int) bool {
+ return a.flagSorted[i].GetName() < a.flagSorted[j].GetName()
+}
+
func main() {
debug := false
cpuProfile := false
@@ -64,52 +87,21 @@ func main() {
app.Version = version.Version
app.Commands = []cli.Command{
- attachCommand,
- commitCommand,
containerCommand,
- buildCommand,
- createCommand,
- diffCommand,
- execCommand,
- exportCommand,
historyCommand,
imageCommand,
imagesCommand,
- importCommand,
infoCommand,
inspectCommand,
- killCommand,
- kubeCommand,
- loadCommand,
- loginCommand,
- logoutCommand,
- logsCommand,
- mountCommand,
- pauseCommand,
- psCommand,
- podCommand,
- portCommand,
pullCommand,
- pushCommand,
- playCommand,
- restartCommand,
- rmCommand,
rmiCommand,
- runCommand,
- saveCommand,
- searchCommand,
- startCommand,
- statsCommand,
- stopCommand,
tagCommand,
- topCommand,
- umountCommand,
- unpauseCommand,
versionCommand,
- volumeCommand,
- waitCommand,
}
+ app.Commands = append(app.Commands, getAppCommands()...)
+ sort.Sort(commandSortedAlpha{app.Commands})
+
if varlinkCommand != nil {
app.Commands = append(app.Commands, *varlinkCommand)
}
@@ -120,7 +112,7 @@ func main() {
os.Exit(1)
}
args := c.Args()
- if args.Present() {
+ if args.Present() && rootless.IsRootless() {
if _, notRequireRootless := cmdsNotRequiringRootless[args.First()]; !notRequireRootless {
became, ret, err := rootless.BecomeRootInUserNS()
if err != nil {
@@ -148,19 +140,26 @@ func main() {
logrus.SetLevel(level)
}
- // Only if not rootless, set rlimits for open files.
- // We open numerous FDs for ports opened
- if !rootless.IsRootless() {
- rlimits := new(syscall.Rlimit)
- rlimits.Cur = 1048576
- rlimits.Max = 1048576
+ rlimits := new(syscall.Rlimit)
+ rlimits.Cur = 1048576
+ rlimits.Max = 1048576
+ if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil {
+ if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil {
+ return errors.Wrapf(err, "error getting rlimits")
+ }
+ rlimits.Cur = rlimits.Max
if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil {
return errors.Wrapf(err, "error setting new rlimits")
}
- } else {
+ }
+
+ if rootless.IsRootless() {
logrus.Info("running as rootless")
}
+ // Be sure we can create directories with 0755 mode.
+ syscall.Umask(0022)
+
if logLevel == "debug" {
debug = true
@@ -185,84 +184,32 @@ func main() {
}
app.Flags = []cli.Flag{
cli.StringFlag{
- Name: "cgroup-manager",
- Usage: "cgroup manager to use (cgroupfs or systemd, default systemd)",
- },
- cli.StringFlag{
- Name: "cni-config-dir",
- Usage: "path of the configuration directory for CNI networks",
- },
- cli.StringFlag{
Name: "config, c",
Usage: "path of a libpod config file detailing container server configuration options",
Hidden: true,
},
cli.StringFlag{
- Name: "conmon",
- Usage: "path of the conmon binary",
- },
- cli.StringFlag{
Name: "cpu-profile",
Usage: "path for the cpu profiling results",
},
cli.StringFlag{
- Name: "default-mounts-file",
- Usage: "path to default mounts file",
- Hidden: true,
- },
- cli.StringSliceFlag{
- Name: "hooks-dir",
- Usage: "set the OCI hooks directory path (may be set multiple times)",
- },
- cli.IntFlag{
- Name: "max-workers",
- Usage: "the maximum number of workers for parallel operations",
- Hidden: true,
- },
- cli.StringFlag{
Name: "log-level",
Usage: "log messages above specified level: debug, info, warn, error (default), fatal or panic",
Value: "error",
},
cli.StringFlag{
- Name: "namespace",
- Usage: "set the libpod namespace, used to create separate views of the containers and pods on the system",
- Value: "",
- },
- cli.StringFlag{
- Name: "root",
- Usage: "path to the root directory in which data, including images, is stored",
- },
- cli.StringFlag{
Name: "tmpdir",
Usage: "path to the tmp directory",
},
- cli.StringFlag{
- Name: "runroot",
- Usage: "path to the 'run directory' where all state information is stored",
- },
- cli.StringFlag{
- Name: "runtime",
- Usage: "path to the OCI-compatible binary used to run containers, default is /usr/bin/runc",
- },
- cli.StringFlag{
- Name: "storage-driver, s",
- Usage: "select which storage driver is used to manage storage of images and containers (default is overlay)",
- },
- cli.StringSliceFlag{
- Name: "storage-opt",
- Usage: "used to pass an option to the storage driver",
- },
- cli.BoolFlag{
- Name: "syslog",
- Usage: "output logging information to syslog as well as the console",
- },
- }
- if _, err := os.Stat("/etc/containers/registries.conf"); err != nil {
- if os.IsNotExist(err) {
- logrus.Warn("unable to find /etc/containers/registries.conf. some podman (image shortnames) commands may be limited")
- }
}
+
+ app.Flags = append(app.Flags, getMainAppFlags()...)
+ sort.Sort(flagSortedAlpha{app.Flags})
+
+ // Check if /etc/containers/registries.conf exists when running in
+ // in a local environment.
+ CheckForRegistries()
+
if err := app.Run(os.Args); err != nil {
if debug {
logrus.Errorf(err.Error())
diff --git a/cmd/podman/mount.go b/cmd/podman/mount.go
index c91115597..86a6b2ad1 100644
--- a/cmd/podman/mount.go
+++ b/cmd/podman/mount.go
@@ -24,13 +24,18 @@ var (
mountFlags = []cli.Flag{
cli.BoolFlag{
- Name: "notruncate",
- Usage: "do not truncate output",
+ Name: "all, a",
+ Usage: "Mount all containers",
},
cli.StringFlag{
Name: "format",
Usage: "Change the output format to Go template",
},
+ cli.BoolFlag{
+ Name: "notruncate",
+ Usage: "do not truncate output",
+ },
+ LatestFlag,
}
mountCommand = cli.Command{
Name: "mount",
@@ -80,20 +85,31 @@ func mountCmd(c *cli.Context) error {
}
}
+ if c.Bool("all") && c.Bool("latest") {
+ return errors.Errorf("--all and --latest cannot be used together")
+ }
+
+ mountContainers, err := getAllOrLatestContainers(c, runtime, -1, "all")
+ if err != nil {
+ if len(mountContainers) == 0 {
+ return err
+ }
+ fmt.Println(err.Error())
+ }
+
formats := map[string]bool{
"": true,
of.JSONString: true,
}
- args := c.Args()
json := c.String("format") == of.JSONString
if !formats[c.String("format")] {
return errors.Errorf("%q is not a supported format", c.String("format"))
}
var lastError error
- if len(args) > 0 {
- for _, name := range args {
+ if len(mountContainers) > 0 {
+ for _, ctr := range mountContainers {
if json {
if lastError != nil {
logrus.Error(lastError)
@@ -101,14 +117,6 @@ func mountCmd(c *cli.Context) error {
lastError = errors.Wrapf(err, "json option cannot be used with a container id")
continue
}
- ctr, err := runtime.LookupContainer(name)
- if err != nil {
- if lastError != nil {
- logrus.Error(lastError)
- }
- lastError = errors.Wrapf(err, "error looking up container %q", name)
- continue
- }
mountPoint, err := ctr.Mount()
if err != nil {
if lastError != nil {
diff --git a/cmd/podman/platform_linux.go b/cmd/podman/platform_linux.go
new file mode 100644
index 000000000..2127923ae
--- /dev/null
+++ b/cmd/podman/platform_linux.go
@@ -0,0 +1,17 @@
+// +build linux
+
+package main
+
+import (
+ "os"
+
+ "github.com/sirupsen/logrus"
+)
+
+func CheckForRegistries() {
+ if _, err := os.Stat("/etc/containers/registries.conf"); err != nil {
+ if os.IsNotExist(err) {
+ logrus.Warn("unable to find /etc/containers/registries.conf. some podman (image shortnames) commands may be limited")
+ }
+ }
+}
diff --git a/cmd/podman/platform_unsupported.go b/cmd/podman/platform_unsupported.go
new file mode 100644
index 000000000..f39eeaf63
--- /dev/null
+++ b/cmd/podman/platform_unsupported.go
@@ -0,0 +1,6 @@
+// +build !linux
+
+package main
+
+func CheckForRegistries() {
+}
diff --git a/cmd/podman/play_kube.go b/cmd/podman/play_kube.go
index f165c5f0f..2ce2e21bb 100644
--- a/cmd/podman/play_kube.go
+++ b/cmd/podman/play_kube.go
@@ -154,7 +154,7 @@ func playKubeYAMLCmd(c *cli.Context) error {
if err != nil {
return err
}
- ctr, err := createContainerFromCreateConfig(runtime, createConfig, ctx)
+ ctr, err := createContainerFromCreateConfig(runtime, createConfig, ctx, pod)
if err != nil {
return err
}
diff --git a/cmd/podman/pull.go b/cmd/podman/pull.go
index 47130805e..2a78d0c54 100644
--- a/cmd/podman/pull.go
+++ b/cmd/podman/pull.go
@@ -9,7 +9,7 @@ import (
dockerarchive "github.com/containers/image/docker/archive"
"github.com/containers/image/transports/alltransports"
"github.com/containers/image/types"
- "github.com/containers/libpod/cmd/podman/libpodruntime"
+ "github.com/containers/libpod/libpod/adapter"
image2 "github.com/containers/libpod/libpod/image"
"github.com/containers/libpod/pkg/util"
"github.com/pkg/errors"
@@ -64,7 +64,7 @@ specified, the image with the 'latest' tag (if it exists) is pulled
// pullCmd gets the data from the command line and calls pullImage
// to copy an image from a registry to a local machine
func pullCmd(c *cli.Context) error {
- runtime, err := libpodruntime.GetRuntime(c)
+ runtime, err := adapter.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "could not get runtime")
}
@@ -116,14 +116,14 @@ func pullCmd(c *cli.Context) error {
if err != nil {
return errors.Wrapf(err, "error parsing %q", image)
}
- newImage, err := runtime.ImageRuntime().LoadFromArchiveReference(getContext(), srcRef, c.String("signature-policy"), writer)
+ newImage, err := runtime.LoadFromArchiveReference(getContext(), srcRef, c.String("signature-policy"), writer)
if err != nil {
return errors.Wrapf(err, "error pulling image from %q", image)
}
imgID = newImage[0].ID()
} else {
authfile := getAuthFile(c.String("authfile"))
- newImage, err := runtime.ImageRuntime().New(getContext(), image, c.String("signature-policy"), authfile, writer, &dockerRegistryOptions, image2.SigningOptions{}, true)
+ newImage, err := runtime.New(getContext(), image, c.String("signature-policy"), authfile, writer, &dockerRegistryOptions, image2.SigningOptions{}, true)
if err != nil {
return errors.Wrapf(err, "error pulling image %q", image)
}
diff --git a/cmd/podman/rmi.go b/cmd/podman/rmi.go
index 5e8ac81a2..fbf860eb2 100644
--- a/cmd/podman/rmi.go
+++ b/cmd/podman/rmi.go
@@ -4,8 +4,7 @@ import (
"fmt"
"os"
- "github.com/containers/libpod/cmd/podman/libpodruntime"
- "github.com/containers/libpod/libpod/image"
+ "github.com/containers/libpod/libpod/adapter"
"github.com/containers/storage"
"github.com/pkg/errors"
"github.com/urfave/cli"
@@ -58,7 +57,7 @@ func rmiCmd(c *cli.Context) error {
return err
}
removeAll := c.Bool("all")
- runtime, err := libpodruntime.GetRuntime(c)
+ runtime, err := adapter.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "could not get runtime")
}
@@ -74,7 +73,7 @@ func rmiCmd(c *cli.Context) error {
images := args[:]
- removeImage := func(img *image.Image) {
+ removeImage := func(img *adapter.ContainerImage) {
deleted = true
msg, deleteErr = runtime.RemoveImage(ctx, img, c.Bool("force"))
if deleteErr != nil {
@@ -91,8 +90,8 @@ func rmiCmd(c *cli.Context) error {
}
if removeAll {
- var imagesToDelete []*image.Image
- imagesToDelete, err = runtime.ImageRuntime().GetImages()
+ var imagesToDelete []*adapter.ContainerImage
+ imagesToDelete, err = runtime.GetImages()
if err != nil {
return errors.Wrapf(err, "unable to query local images")
}
@@ -112,7 +111,7 @@ func rmiCmd(c *cli.Context) error {
removeImage(i)
}
lastNumberofImages = len(imagesToDelete)
- imagesToDelete, err = runtime.ImageRuntime().GetImages()
+ imagesToDelete, err = runtime.GetImages()
if err != nil {
return err
}
@@ -130,7 +129,7 @@ func rmiCmd(c *cli.Context) error {
// See https://github.com/containers/libpod/issues/930 as
// an exemplary inconsistency issue.
for _, i := range images {
- newImage, err := runtime.ImageRuntime().NewFromLocal(i)
+ newImage, err := runtime.NewImageFromLocal(i)
if err != nil {
fmt.Fprintln(os.Stderr, err)
continue
diff --git a/cmd/podman/shared/container.go b/cmd/podman/shared/container.go
index 30beb4a49..9040c4a5c 100644
--- a/cmd/podman/shared/container.go
+++ b/cmd/podman/shared/container.go
@@ -2,8 +2,8 @@ package shared
import (
"context"
- "encoding/json"
"fmt"
+ "github.com/google/shlex"
"io"
"os"
"path/filepath"
@@ -51,7 +51,7 @@ type PsOptions struct {
// BatchContainerStruct is the return obkect from BatchContainer and contains
// container related information
type BatchContainerStruct struct {
- ConConfig *libpod.Config
+ ConConfig *libpod.ContainerConfig
ConState libpod.ContainerStatus
ExitCode int32
Exited bool
@@ -328,7 +328,7 @@ func PBatch(containers []*libpod.Container, workers int, opts PsOptions) []PsCon
// locks.
func BatchContainerOp(ctr *libpod.Container, opts PsOptions) (BatchContainerStruct, error) {
var (
- conConfig *libpod.Config
+ conConfig *libpod.ContainerConfig
conState libpod.ContainerStatus
err error
exitCode int32
@@ -445,8 +445,7 @@ func getStrFromSquareBrackets(cmd string) string {
// GetCtrInspectInfo takes container inspect data and collects all its info into a ContainerData
// structure for inspection related methods
-func GetCtrInspectInfo(ctr *libpod.Container, ctrInspectData *inspect.ContainerInspectData) (*inspect.ContainerData, error) {
- config := ctr.Config()
+func GetCtrInspectInfo(config *libpod.ContainerConfig, ctrInspectData *inspect.ContainerInspectData, createArtifact *cc.CreateConfig) (*inspect.ContainerData, error) {
spec := config.Spec
cpus, mems, period, quota, realtimePeriod, realtimeRuntime, shares := getCPUInfo(spec)
@@ -455,16 +454,6 @@ func GetCtrInspectInfo(ctr *libpod.Container, ctrInspectData *inspect.ContainerI
pidsLimit := getPidsInfo(spec)
cgroup := getCgroup(spec)
- var createArtifact cc.CreateConfig
- artifact, err := ctr.GetArtifact("create-config")
- if err == nil {
- if err := json.Unmarshal(artifact, &createArtifact); err != nil {
- return nil, err
- }
- } else {
- logrus.Errorf("couldn't get some inspect information, error getting artifact %q: %v", ctr.ID(), err)
- }
-
data := &inspect.ContainerData{
ctrInspectData,
&inspect.HostConfig{
@@ -492,7 +481,7 @@ func GetCtrInspectInfo(ctr *libpod.Container, ctrInspectData *inspect.ContainerI
PidsLimit: pidsLimit,
Privileged: config.Privileged,
ReadonlyRootfs: spec.Root.Readonly,
- Runtime: ctr.RuntimeName(),
+ Runtime: config.OCIRuntime,
NetworkMode: string(createArtifact.NetMode),
IpcMode: string(createArtifact.IpcMode),
Cgroup: cgroup,
@@ -640,6 +629,14 @@ func GetRunlabel(label string, runlabelImage string, ctx context.Context, runtim
// GenerateRunlabelCommand generates the command that will eventually be execucted by podman
func GenerateRunlabelCommand(runLabel, imageName, name string, opts map[string]string, extraArgs []string) ([]string, []string, error) {
+ // If no name is provided, we use the image's basename instead
+ if name == "" {
+ baseName, err := image.GetImageBaseName(imageName)
+ if err != nil {
+ return nil, nil, err
+ }
+ name = baseName
+ }
// The user provided extra arguments that need to be tacked onto the label's command
if len(extraArgs) > 0 {
runLabel = fmt.Sprintf("%s %s", runLabel, strings.Join(extraArgs, " "))
@@ -665,7 +662,10 @@ func GenerateRunlabelCommand(runLabel, imageName, name string, opts map[string]s
return ""
}
newS := os.Expand(strings.Join(cmd, " "), envmapper)
- cmd = strings.Split(newS, " ")
+ cmd, err = shlex.Split(newS)
+ if err != nil {
+ return nil, nil, err
+ }
return cmd, env, nil
}
diff --git a/cmd/podman/shared/funcs.go b/cmd/podman/shared/funcs.go
index 8770b8ec0..70d041fd2 100644
--- a/cmd/podman/shared/funcs.go
+++ b/cmd/podman/shared/funcs.go
@@ -65,6 +65,8 @@ func GenerateCommand(command, imageName, name string) ([]string, error) {
switch arg {
case "IMAGE":
newArg = imageName
+ case "$IMAGE":
+ newArg = imageName
case "IMAGE=IMAGE":
newArg = fmt.Sprintf("IMAGE=%s", imageName)
case "IMAGE=$IMAGE":
@@ -75,6 +77,8 @@ func GenerateCommand(command, imageName, name string) ([]string, error) {
newArg = fmt.Sprintf("NAME=%s", name)
case "NAME=$NAME":
newArg = fmt.Sprintf("NAME=%s", name)
+ case "$NAME":
+ newArg = name
default:
newArg = arg
}
diff --git a/cmd/podman/shared/prune.go b/cmd/podman/shared/prune.go
deleted file mode 100644
index 90cfe4475..000000000
--- a/cmd/podman/shared/prune.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package shared
-
-import (
- "fmt"
- "github.com/pkg/errors"
-
- "github.com/containers/libpod/libpod/image"
-)
-
-// Prune removes all unnamed and unused images from the local store
-func Prune(ir *image.Runtime) error {
- pruneImages, err := ir.GetPruneImages()
- if err != nil {
- return err
- }
-
- for _, i := range pruneImages {
- if err := i.Remove(true); err != nil {
- return errors.Wrapf(err, "failed to remove %s", i.ID())
- }
- fmt.Println(i.ID())
- }
- return nil
-}
diff --git a/cmd/podman/sign.go b/cmd/podman/sign.go
new file mode 100644
index 000000000..1d9aecdc9
--- /dev/null
+++ b/cmd/podman/sign.go
@@ -0,0 +1,198 @@
+package main
+
+import (
+ "io/ioutil"
+ "net/url"
+ "os"
+ "path/filepath"
+ "strconv"
+ "strings"
+
+ "github.com/containers/image/signature"
+ "github.com/containers/image/transports"
+ "github.com/containers/image/transports/alltransports"
+ "github.com/containers/libpod/cmd/podman/libpodruntime"
+ "github.com/containers/libpod/libpod/image"
+ "github.com/containers/libpod/pkg/trust"
+ "github.com/pkg/errors"
+ "github.com/sirupsen/logrus"
+ "github.com/urfave/cli"
+)
+
+var (
+ signFlags = []cli.Flag{
+ cli.StringFlag{
+ Name: "sign-by",
+ Usage: "Name of the signing key",
+ },
+ cli.StringFlag{
+ Name: "directory, d",
+ Usage: "Define an alternate directory to store signatures",
+ },
+ }
+
+ signDescription = "Create a signature file that can be used later to verify the image"
+ signCommand = cli.Command{
+ Name: "sign",
+ Usage: "Sign an image",
+ Description: signDescription,
+ Flags: sortFlags(signFlags),
+ Action: signCmd,
+ ArgsUsage: "IMAGE-NAME [IMAGE-NAME ...]",
+ OnUsageError: usageErrorHandler,
+ }
+)
+
+// SignatureStoreDir defines default directory to store signatures
+const SignatureStoreDir = "/var/lib/containers/sigstore"
+
+func signCmd(c *cli.Context) error {
+ args := c.Args()
+ if len(args) < 1 {
+ return errors.Errorf("at least one image name must be specified")
+ }
+ runtime, err := libpodruntime.GetRuntime(c)
+ if err != nil {
+ return errors.Wrapf(err, "could not create runtime")
+ }
+ defer runtime.Shutdown(false)
+
+ signby := c.String("sign-by")
+ if signby == "" {
+ return errors.Errorf("please provide an identity")
+ }
+
+ var sigStoreDir string
+ if c.IsSet("directory") {
+ sigStoreDir = c.String("directory")
+ if _, err := os.Stat(sigStoreDir); err != nil {
+ return errors.Wrapf(err, "invalid directory %s", sigStoreDir)
+ }
+ }
+
+ mech, err := signature.NewGPGSigningMechanism()
+ if err != nil {
+ return errors.Wrap(err, "error initializing GPG")
+ }
+ defer mech.Close()
+ if err := mech.SupportsSigning(); err != nil {
+ return errors.Wrap(err, "signing is not supported")
+ }
+
+ systemRegistriesDirPath := trust.RegistriesDirPath(runtime.SystemContext())
+ registryConfigs, err := trust.LoadAndMergeConfig(systemRegistriesDirPath)
+ if err != nil {
+ return errors.Wrapf(err, "error reading registry configuration")
+ }
+
+ for _, signimage := range args {
+ srcRef, err := alltransports.ParseImageName(signimage)
+ if err != nil {
+ return errors.Wrapf(err, "error parsing image name")
+ }
+ rawSource, err := srcRef.NewImageSource(getContext(), runtime.SystemContext())
+ if err != nil {
+ return errors.Wrapf(err, "error getting image source")
+ }
+ manifest, _, err := rawSource.GetManifest(getContext(), nil)
+ if err != nil {
+ return errors.Wrapf(err, "error getting manifest")
+ }
+ dockerReference := rawSource.Reference().DockerReference()
+ if dockerReference == nil {
+ return errors.Errorf("cannot determine canonical Docker reference for destination %s", transports.ImageName(rawSource.Reference()))
+ }
+
+ // create the signstore file
+ newImage, err := runtime.ImageRuntime().New(getContext(), signimage, runtime.GetConfig().SignaturePolicyPath, "", os.Stderr, nil, image.SigningOptions{SignBy: signby}, false)
+ if err != nil {
+ return errors.Wrapf(err, "error pulling image %s", signimage)
+ }
+
+ registryInfo := trust.HaveMatchRegistry(rawSource.Reference().DockerReference().String(), registryConfigs)
+ if registryInfo != nil {
+ if sigStoreDir == "" {
+ sigStoreDir = registryInfo.SigStoreStaging
+ if sigStoreDir == "" {
+ sigStoreDir = registryInfo.SigStore
+ }
+ }
+ sigStoreDir, err = isValidSigStoreDir(sigStoreDir)
+ if err != nil {
+ return errors.Wrapf(err, "invalid signature storage %s", sigStoreDir)
+ }
+ }
+ if sigStoreDir == "" {
+ sigStoreDir = SignatureStoreDir
+ }
+
+ repos, err := newImage.RepoDigests()
+ if err != nil {
+ return errors.Wrapf(err, "error calculating repo digests for %s", signimage)
+ }
+ if len(repos) == 0 {
+ logrus.Errorf("no repodigests associated with the image %s", signimage)
+ continue
+ }
+
+ // create signature
+ newSig, err := signature.SignDockerManifest(manifest, dockerReference.String(), mech, signby)
+ if err != nil {
+ return errors.Wrapf(err, "error creating new signature")
+ }
+
+ trimmedDigest := strings.TrimPrefix(repos[0], strings.Split(repos[0], "/")[0])
+ sigStoreDir = filepath.Join(sigStoreDir, strings.Replace(trimmedDigest, ":", "=", 1))
+ if err := os.MkdirAll(sigStoreDir, 0751); err != nil {
+ // The directory is allowed to exist
+ if !os.IsExist(err) {
+ logrus.Errorf("error creating directory %s: %s", sigStoreDir, err)
+ continue
+ }
+ }
+ sigFilename, err := getSigFilename(sigStoreDir)
+ if err != nil {
+ logrus.Errorf("error creating sigstore file: %v", err)
+ continue
+ }
+ err = ioutil.WriteFile(filepath.Join(sigStoreDir, sigFilename), newSig, 0644)
+ if err != nil {
+ logrus.Errorf("error storing signature for %s", rawSource.Reference().DockerReference().String())
+ continue
+ }
+ }
+ return nil
+}
+
+func getSigFilename(sigStoreDirPath string) (string, error) {
+ sigFileSuffix := 1
+ sigFiles, err := ioutil.ReadDir(sigStoreDirPath)
+ if err != nil {
+ return "", err
+ }
+ sigFilenames := make(map[string]bool)
+ for _, file := range sigFiles {
+ sigFilenames[file.Name()] = true
+ }
+ for {
+ sigFilename := "signature-" + strconv.Itoa(sigFileSuffix)
+ if _, exists := sigFilenames[sigFilename]; !exists {
+ return sigFilename, nil
+ }
+ sigFileSuffix++
+ }
+}
+
+func isValidSigStoreDir(sigStoreDir string) (string, error) {
+ writeURIs := map[string]bool{"file": true}
+ url, err := url.Parse(sigStoreDir)
+ if err != nil {
+ return sigStoreDir, errors.Wrapf(err, "invalid directory %s", sigStoreDir)
+ }
+ _, exists := writeURIs[url.Scheme]
+ if !exists {
+ return sigStoreDir, errors.Errorf("writing to %s is not supported. Use a supported scheme", sigStoreDir)
+ }
+ sigStoreDir = url.Path
+ return sigStoreDir, nil
+}
diff --git a/cmd/podman/start.go b/cmd/podman/start.go
index 8bb386c68..df34deec2 100644
--- a/cmd/podman/start.go
+++ b/cmd/podman/start.go
@@ -27,9 +27,9 @@ var (
Name: "interactive, i",
Usage: "Keep STDIN open even if not attached",
},
- cli.BoolFlag{
+ cli.BoolTFlag{
Name: "sig-proxy",
- Usage: "proxy received signals to the process",
+ Usage: "proxy received signals to the process (default true if attaching, false otherwise)",
},
LatestFlag,
}
@@ -67,8 +67,14 @@ func startCmd(c *cli.Context) error {
return err
}
- if c.Bool("sig-proxy") && !attach {
- return errors.Wrapf(libpod.ErrInvalidArg, "you cannot use sig-proxy without --attach")
+ sigProxy := c.BoolT("sig-proxy")
+
+ if sigProxy && !attach {
+ if c.IsSet("sig-proxy") {
+ return errors.Wrapf(libpod.ErrInvalidArg, "you cannot use sig-proxy without --attach")
+ } else {
+ sigProxy = false
+ }
}
runtime, err := libpodruntime.GetRuntime(c)
@@ -111,7 +117,7 @@ func startCmd(c *cli.Context) error {
}
// attach to the container and also start it not already running
- err = startAttachCtr(ctr, os.Stdout, os.Stderr, inputStream, c.String("detach-keys"), c.Bool("sig-proxy"), !ctrRunning)
+ err = startAttachCtr(ctr, os.Stdout, os.Stderr, inputStream, c.String("detach-keys"), sigProxy, !ctrRunning)
if ctrRunning {
return err
}
diff --git a/cmd/podman/tag.go b/cmd/podman/tag.go
index 29f66d41e..d19cf69a2 100644
--- a/cmd/podman/tag.go
+++ b/cmd/podman/tag.go
@@ -1,7 +1,7 @@
package main
import (
- "github.com/containers/libpod/cmd/podman/libpodruntime"
+ "github.com/containers/libpod/libpod/adapter"
"github.com/pkg/errors"
"github.com/urfave/cli"
)
@@ -23,13 +23,13 @@ func tagCmd(c *cli.Context) error {
if len(args) < 2 {
return errors.Errorf("image name and at least one new name must be specified")
}
- runtime, err := libpodruntime.GetRuntime(c)
+ runtime, err := adapter.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "could not create runtime")
}
defer runtime.Shutdown(false)
- newImage, err := runtime.ImageRuntime().NewFromLocal(args[0])
+ newImage, err := runtime.NewImageFromLocal(args[0])
if err != nil {
return err
}
diff --git a/cmd/podman/trust.go b/cmd/podman/trust.go
index 7c404cd3f..863f36d09 100644
--- a/cmd/podman/trust.go
+++ b/cmd/podman/trust.go
@@ -13,7 +13,6 @@ import (
"github.com/containers/libpod/libpod/image"
"github.com/containers/libpod/pkg/trust"
"github.com/pkg/errors"
- "github.com/sirupsen/logrus"
"github.com/urfave/cli"
)
@@ -132,7 +131,7 @@ func showTrustCmd(c *cli.Context) error {
if err := json.Unmarshal(policyContent, &policyContentStruct); err != nil {
return errors.Errorf("could not read trust policies")
}
- policyJSON, err := trust.GetPolicyJSON(policyContentStruct, systemRegistriesDirPath)
+ policyJSON, showOutputMap, err := trust.GetPolicy(policyContentStruct, systemRegistriesDirPath)
if err != nil {
return errors.Wrapf(err, "error reading registry config file")
}
@@ -144,31 +143,12 @@ func showTrustCmd(c *cli.Context) error {
}
sortedRepos := sortPolicyJSONKey(policyJSON)
- type policydefault struct {
- Repo string
- Trusttype string
- GPGid string
- Sigstore string
- }
- var policyoutput []policydefault
- for _, repo := range sortedRepos {
- repoval := policyJSON[repo]
- var defaultstruct policydefault
- defaultstruct.Repo = repo
- if repoval["type"] != nil {
- defaultstruct.Trusttype = trustTypeDescription(repoval["type"].(string))
- }
- if repoval["keys"] != nil && len(repoval["keys"].([]string)) > 0 {
- defaultstruct.GPGid = trust.GetGPGId(repoval["keys"].([]string))
- }
- if repoval["sigstore"] != nil {
- defaultstruct.Sigstore = repoval["sigstore"].(string)
- }
- policyoutput = append(policyoutput, defaultstruct)
- }
var output []interface{}
- for _, ele := range policyoutput {
- output = append(output, interface{}(ele))
+ for _, reponame := range sortedRepos {
+ showOutput, exists := showOutputMap[reponame]
+ if exists {
+ output = append(output, interface{}(showOutput))
+ }
}
out := formats.StdoutTemplateArray{Output: output, Template: "{{.Repo}}\t{{.Trusttype}}\t{{.GPGid}}\t{{.Sigstore}}"}
return formats.Writer(out).Out()
@@ -209,8 +189,10 @@ func setTrustCmd(c *cli.Context) error {
policyPath = trust.DefaultPolicyPath(runtime.SystemContext())
}
var policyContentStruct trust.PolicyContent
+ policyFileExists := false
_, err = os.Stat(policyPath)
if !os.IsNotExist(err) {
+ policyFileExists = true
policyContent, err := ioutil.ReadFile(policyPath)
if err != nil {
return errors.Wrapf(err, "unable to read %s", policyPath)
@@ -218,6 +200,9 @@ func setTrustCmd(c *cli.Context) error {
if err := json.Unmarshal(policyContent, &policyContentStruct); err != nil {
return errors.Errorf("could not read trust policies")
}
+ if args[0] != "default" && len(policyContentStruct.Default) == 0 {
+ return errors.Errorf("Default trust policy must be set.")
+ }
}
var newReposContent []trust.RepoContent
if len(pubkeysfile) != 0 {
@@ -230,15 +215,18 @@ func setTrustCmd(c *cli.Context) error {
if args[0] == "default" {
policyContentStruct.Default = newReposContent
} else {
- exists := false
+ if policyFileExists == false && len(policyContentStruct.Default) == 0 {
+ return errors.Errorf("Default trust policy must be set to create the policy file.")
+ }
+ registryExists := false
for transport, transportval := range policyContentStruct.Transports {
- _, exists = transportval[args[0]]
- if exists {
+ _, registryExists = transportval[args[0]]
+ if registryExists {
policyContentStruct.Transports[transport][args[0]] = newReposContent
break
}
}
- if !exists {
+ if !registryExists {
if policyContentStruct.Transports == nil {
policyContentStruct.Transports = make(map[string]trust.RepoMap)
}
@@ -260,16 +248,6 @@ func setTrustCmd(c *cli.Context) error {
return nil
}
-var typeDescription = map[string]string{"insecureAcceptAnything": "accept", "signedBy": "signed", "reject": "reject"}
-
-func trustTypeDescription(trustType string) string {
- trustDescription, exist := typeDescription[trustType]
- if !exist {
- logrus.Warnf("invalid trust type %s", trustType)
- }
- return trustDescription
-}
-
func sortPolicyJSONKey(m map[string]map[string]interface{}) []string {
keys := make([]string, len(m))
i := 0
diff --git a/cmd/podman/umount.go b/cmd/podman/umount.go
index 24f0f178b..7c9b5897b 100644
--- a/cmd/podman/umount.go
+++ b/cmd/podman/umount.go
@@ -21,6 +21,7 @@ var (
Name: "force, f",
Usage: "force the complete umount all of the currently mounted containers",
},
+ LatestFlag,
}
description = `
@@ -51,59 +52,37 @@ func umountCmd(c *cli.Context) error {
force := c.Bool("force")
umountAll := c.Bool("all")
- args := c.Args()
- if len(args) == 0 && !umountAll {
- return errors.Errorf("container ID must be specified")
+ if err := checkAllAndLatest(c); err != nil {
+ return err
}
- if len(args) > 0 && umountAll {
- return errors.Errorf("when using the --all switch, you may not pass any container IDs")
+
+ containers, err := getAllOrLatestContainers(c, runtime, -1, "all")
+ if err != nil {
+ if len(containers) == 0 {
+ return err
+ }
+ fmt.Println(err.Error())
}
umountContainerErrStr := "error unmounting container"
var lastError error
- if len(args) > 0 {
- for _, name := range args {
- ctr, err := runtime.LookupContainer(name)
- if err != nil {
- if lastError != nil {
- logrus.Error(lastError)
- }
- lastError = errors.Wrapf(err, "%s %s", umountContainerErrStr, name)
- continue
- }
-
- if err = ctr.Unmount(force); err != nil {
- if lastError != nil {
- logrus.Error(lastError)
- }
- lastError = errors.Wrapf(err, "%s %s", umountContainerErrStr, name)
- continue
- }
- fmt.Printf("%s\n", ctr.ID())
- }
- } else {
- containers, err := runtime.GetContainers()
- if err != nil {
- return errors.Wrapf(err, "error reading Containers")
+ for _, ctr := range containers {
+ ctrState, err := ctr.State()
+ if ctrState == libpod.ContainerStateRunning || err != nil {
+ continue
}
- for _, ctr := range containers {
- ctrState, err := ctr.State()
- if ctrState == libpod.ContainerStateRunning || err != nil {
- continue
- }
- if err = ctr.Unmount(force); err != nil {
- if umountAll && errors.Cause(err) == storage.ErrLayerNotMounted {
- continue
- }
- if lastError != nil {
- logrus.Error(lastError)
- }
- lastError = errors.Wrapf(err, "%s %s", umountContainerErrStr, ctr.ID())
+ if err = ctr.Unmount(force); err != nil {
+ if umountAll && errors.Cause(err) == storage.ErrLayerNotMounted {
continue
}
- fmt.Printf("%s\n", ctr.ID())
+ if lastError != nil {
+ logrus.Error(lastError)
+ }
+ lastError = errors.Wrapf(err, "%s %s", umountContainerErrStr, ctr.ID())
+ continue
}
+ fmt.Printf("%s\n", ctr.ID())
}
return lastError
}
diff --git a/cmd/podman/varlink/io.podman.varlink b/cmd/podman/varlink/io.podman.varlink
index c1b7c703a..86c3eb7ff 100644
--- a/cmd/podman/varlink/io.podman.varlink
+++ b/cmd/podman/varlink/io.podman.varlink
@@ -9,7 +9,8 @@ type Version (
go_version: string,
git_commit: string,
built: int,
- os_arch: string
+ os_arch: string,
+ remote_api_version: int
)
type NotImplemented (
@@ -37,7 +38,8 @@ type ImageInList (
size: int,
virtualSize: int,
containers: int,
- labels: [string]string
+ labels: [string]string,
+ isParent: bool
)
# ImageHistory describes the returned structure from ImageHistory.
@@ -60,7 +62,7 @@ type ImageSearch (
star_count: int
)
-# ListContainer is the returned struct for an individual container
+# ListContainerData is the returned struct for an individual container
type ListContainerData (
id: string,
image: string,
@@ -211,6 +213,8 @@ type Create (
hostname: string,
image: string,
image_id: string,
+ init: bool,
+ init_path: string,
builtin_imgvolumes: []string,
id_mappings: IDMappingOptions,
image_volume_type: string,
@@ -1013,6 +1017,10 @@ method MountContainer(name: string) -> (path: string)
# ~~~
method UnmountContainer(name: string, force: bool) -> ()
+# ImagesPrune removes all unused images from the local store. Upon successful pruning,
+# the IDs of the removed images are returned.
+method ImagesPrune() -> (pruned: []string)
+
# This function is not implemented yet.
method ListContainerPorts(name: string) -> (notimplemented: NotImplemented)
@@ -1028,6 +1036,22 @@ method GenerateKubeService() -> (notimplemented: NotImplemented)
# like that created by GenerateKube. See also [GenerateKube](GenerateKube).
method ReplayKube() -> (notimplemented: NotImplemented)
+# ContainerConfig returns a container's config in string form. This call is for
+# development of Podman only and generally should not be used.
+method ContainerConfig(name: string) -> (config: string)
+
+# ContainerArtifacts returns a container's artifacts in string form. This call is for
+# development of Podman only and generally should not be used.
+method ContainerArtifacts(name: string, artifactName: string) -> (config: string)
+
+# ContainerInspectData returns a container's inspect data in string form. This call is for
+# development of Podman only and generally should not be used.
+method ContainerInspectData(name: string) -> (config: string)
+
+# ContainerStateData returns a container's state config in string form. This call is for
+# development of Podman only and generally should not be used.
+method ContainerStateData(name: string) -> (config: string)
+
# ImageNotFound means the image could not be found by the provided name or ID in local storage.
error ImageNotFound (name: string)
diff --git a/cmd/podman/version.go b/cmd/podman/version.go
index d81deb696..fd7f06b7c 100644
--- a/cmd/podman/version.go
+++ b/cmd/podman/version.go
@@ -2,6 +2,8 @@ package main
import (
"fmt"
+ "os"
+ "text/tabwriter"
"time"
"github.com/containers/libpod/cmd/podman/formats"
@@ -26,20 +28,22 @@ func versionCmd(c *cli.Context) error {
default:
out = formats.StdoutTemplate{Output: output, Template: versionOutputFormat}
}
- formats.Writer(out).Out()
- return nil
+ return formats.Writer(out).Out()
}
- fmt.Println("Version: ", output.Version)
- fmt.Println("Go Version: ", output.GoVersion)
+ w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
+ defer w.Flush()
+ fmt.Fprintf(w, "Version:\t%s\n", output.Version)
+ fmt.Fprintf(w, "RemoteAPI Version:\t%d\n", output.RemoteAPIVersion)
+ fmt.Fprintf(w, "Go Version:\t%s\n", output.GoVersion)
if output.GitCommit != "" {
- fmt.Println("Git Commit: ", output.GitCommit)
+ fmt.Fprintf(w, "Git Commit:\t%s\n", output.GitCommit)
}
// Prints out the build time in readable format
if output.Built != 0 {
- fmt.Println("Built: ", time.Unix(output.Built, 0).Format(time.ANSIC))
+ fmt.Fprintf(w, "Built:\t%s\n", time.Unix(output.Built, 0).Format(time.ANSIC))
}
- fmt.Println("OS/Arch: ", output.OsArch)
+ fmt.Fprintf(w, "OS/Arch:\t%s\n", output.OsArch)
return nil
}
diff --git a/commands.md b/commands.md
index 43796722f..00be4f1bd 100644
--- a/commands.md
+++ b/commands.md
@@ -8,9 +8,14 @@
| [podman-attach(1)](/docs/podman-attach.1.md) | Attach to a running container |[![...](/docs/play.png)](https://asciinema.org/a/XDlocUrHVETFECg4zlO9nBbLf)|
| [podman-build(1)](/docs/podman-build.1.md) | Build an image using instructions from Dockerfiles ||
| [podman-commit(1)](/docs/podman-commit.1.md) | Create new image based on the changed container ||
-| [podman-container(1)](/docs/podman-container.1.md) | Manage Containers ||
+| [podman-container(1)](/docs/podman-container.1.md) | Manage Containers ||
+| [podman-container-checkpoint(1)](/docs/podman-container-checkpoint.1.md) | Checkpoints one or more running containers ||
| [podman-container-cleanup(1)](/docs/podman-container-cleanup.1.md) | Cleanup Container storage and networks ||
+| [podman-container-exists(1)](/docs/podman-container-exists.1.md) | Check if an container exists in local storage ||
+| [podman-container-prune(1)](/docs/podman-container-prune.1.md) | Remove all stopped containers ||
| [podman-container-refresh(1)](/docs/podman-container-refresh.1.md) | Refresh all containers state in database ||
+| [podman-container-restore(1)](/docs/podman-container-restore.1.md) | Restores one or more running containers ||
+| [podman-container-runlabel(1)](/docs/podman-container-runlabel.1.md) | Execute Image Label Method ||
| [podman-cp(1)](/docs/podman-cp.1.md) | Instead of providing a `podman cp` command, the man page `podman-cp` describes how to use the `podman mount` command to have even more flexibility and functionality||
| [podman-create(1)](/docs/podman-create.1.md) | Create a new container ||
| [podman-diff(1)](/docs/podman-diff.1.md) | Inspect changes on a container or image's filesystem |[![...](/docs/play.png)](https://asciinema.org/a/FXfWB9CKYFwYM4EfqW3NSZy1G)|
@@ -18,7 +23,11 @@
| [podman-export(1)](/docs/podman-export.1.md) | Export container's filesystem contents as a tar archive |[![...](/docs/play.png)](https://asciinema.org/a/913lBIRAg5hK8asyIhhkQVLtV)|
| [podman-generate(1)](/docs/podman-generate.1.md) | Generate structured output based on Podman containers and pods | |
| [podman-history(1)](/docs/podman-history.1.md) | Shows the history of an image |[![...](/docs/play.png)](https://asciinema.org/a/bCvUQJ6DkxInMELZdc5DinNSx)|
-| [podman-image(1)](/docs/podman-image.1.md) | Manage Images||
+| [podman-image(1)](/docs/podman-image.1.md) | Manage Images||
+| [podman-image-exists(1)](/docs/podman-image-exists.1.md) | Check if an image exists in local storage||
+| [podman-image-prune(1)](/docs/podman-image-prune.1.md) | Remove all unused images||
+| [podman-image-sign(1)](/docs/podman-image-sign.1.md) | Create a signature for an image||
+| [podman-image-trust(1)](/docs/podman-image-trust.1.md) | Manage container registry image trust policy||
| [podman-images(1)](/docs/podman-images.1.md) | List images in local storage |[![...](/docs/play.png)](https://asciinema.org/a/133649)|
| [podman-import(1)](/docs/podman-import.1.md) | Import a tarball and save it as a filesystem image ||
| [podman-info(1)](/docs/podman-info.1.md) | Display system information |[![...](/docs/play.png)](https://asciinema.org/a/yKbi5fQ89y5TJ8e1RfJd4ivTD)|
diff --git a/completions/bash/podman b/completions/bash/podman
index a85574d10..08891563c 100644
--- a/completions/bash/podman
+++ b/completions/bash/podman
@@ -32,6 +32,9 @@ __podman_containers() {
__podman_q ps --format "$format" "$@"
}
+__podman_list_registries() {
+ sed -n -e '/registries.*=/ {s/.*\[\([^]]*\).*/\1/p;q}' /etc/containers/registries.conf | sed -e "s/[,']//g"
+}
# __podman_pods returns a list of pods. Additional options to
# `podman pod ps` may be specified in order to filter the list, e.g.
@@ -47,10 +50,10 @@ __podman_pods() {
format='{{.ID}}'
shift
elif [ "$1" = "--name" ] ; then
- format='{{.Names}}'
+ format='{{.Name}}'
shift
else
- format='{{.Names}}'
+ format='{{.Name}}'
fi
__podman_q pod ps --format "$format" "$@"
}
@@ -365,6 +368,7 @@ __podman_subcommands() {
local subcommands="$1"
local counter=$(($command_pos + 1))
+
while [ $counter -lt $cword ]; do
case "${words[$counter]}" in
$(__podman_to_extglob "$subcommands") )
@@ -1111,6 +1115,8 @@ _podman_exec() {
--env
--user
-u
+ --workdir
+ -w
"
local boolean_options="
--help
@@ -1194,7 +1200,14 @@ _podman_import() {
COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur"))
;;
*)
- __podman_list_images
+ local counter=$( __podman_pos_first_nonflag "$options_with_args" )
+ if [ "$cword" -eq "$((counter))" ]; then
+ __podman_complete_images --repo --tag
+ return
+ else
+ _filedir
+ return
+ fi
;;
esac
}
@@ -1287,7 +1300,9 @@ _podman_image() {
push
rm
save
+ sign
tag
+ trust
"
local aliases="
list
@@ -1499,6 +1514,8 @@ _podman_umount() {
-h
--force
-f
+ --latest
+ -l
"
local options_with_args="
"
@@ -1516,8 +1533,12 @@ _podman_umount() {
_podman_mount() {
local boolean_options="
+ --all
+ -a
--help
-h
+ -l
+ --latest
--notruncate
"
@@ -2271,10 +2292,26 @@ _podman_generate_kube() {
local options_with_args=""
local boolean_options="
+ -h
+ --help
-s
--service
"
+ case "$cur" in
+ -*)
+ COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=( $( compgen -W "
+ $(__podman_containers --all)
+ $(__podman_pods)
+ " -- "$cur" ) )
+ __ltrim_colon_completions "$cur"
+ ;;
+ esac
+}
+
_podman_play_kube() {
local options_with_args="
--authfile
@@ -2291,6 +2328,16 @@ _podman_play_kube() {
--tls-verify
"
+ case "$cur" in
+ -*)
+ COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur"))
+ ;;
+ *)
+ _filedir
+ ;;
+ esac
+}
+
_podman_container_runlabel() {
local options_with_args="
--authfile
@@ -2321,6 +2368,92 @@ _podman_container_runlabel() {
esac
}
+_podman_image_sign() {
+ local options_with_args="
+ -d
+ --directory
+ --sign-by
+ "
+ local boolean_options="
+ --help
+ -h
+ "
+ case "$cur" in
+ -*)
+ COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur"))
+ ;;
+ *)
+ __podman_complete_images
+ ;;
+ esac
+}
+
+_podman_image_trust_set() {
+ echo hello
+ local options_with_args="
+ -f
+ --type
+ --pubkeysfile
+ "
+ local boolean_options="
+ --help
+ -h
+ "
+ case "$cur" in
+ -*)
+ COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur"))
+ ;;
+ *)
+ COMPREPLY=($(compgen -W "default $( __podman_list_registries )" -- "$cur"))
+ ;;
+ esac
+}
+
+_podman_image_trust_show() {
+ local options_with_args="
+ "
+ local boolean_options="
+ --help
+ -h
+ -j
+ --json
+ --raw
+ "
+ case "$cur" in
+ -*)
+ COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur"))
+ ;;
+ *)
+ __podman_complete_images
+ ;;
+ esac
+}
+
+_podman_image_trust() {
+ local boolean_options="
+ --help
+ -h
+ "
+ subcommands="
+ set
+ show
+ "
+ local aliases="
+ list
+ "
+ command=image_trust
+ __podman_subcommands "$subcommands $aliases" && return
+
+ case "$cur" in
+ -*)
+ COMPREPLY=( $( compgen -W "--help" -- "$cur" ) )
+ ;;
+ *)
+ COMPREPLY=( $( compgen -W "$subcommands" -- "$cur" ) )
+ ;;
+ esac
+}
+
_podman_images_prune() {
local options_with_args="
"
@@ -2329,6 +2462,11 @@ _podman_images_prune() {
-h
--help
"
+ case "$cur" in
+ -*)
+ COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur"))
+ ;;
+ esac
}
_podman_container_prune() {
@@ -2347,6 +2485,15 @@ _podman_container_exists() {
local boolean_options="
"
+ case "$cur" in
+ -*)
+ COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur"))
+ ;;
+ *)
+ __podman_complete_images
+ ;;
+ esac
+
}
_podman_pod_exists() {
@@ -2778,6 +2925,7 @@ _podman_podman() {
export
generate
history
+ image
images
import
info
diff --git a/contrib/cirrus/build_vm_images.sh b/contrib/cirrus/build_vm_images.sh
index ecdf1d877..ee45b1ead 100755
--- a/contrib/cirrus/build_vm_images.sh
+++ b/contrib/cirrus/build_vm_images.sh
@@ -23,6 +23,8 @@ SCRIPT_BASE $SCRIPT_BASE
PACKER_BASE $PACKER_BASE
"
+record_timestamp "cache-image build start"
+
show_env_vars
# Everything here is running on the 'image-builder-image' GCE image
@@ -50,3 +52,5 @@ make libpod_images \
SCRIPT_BASE=$SCRIPT_BASE \
PACKER_BASE=$PACKER_BASE \
BUILT_IMAGE_SUFFIX=$BUILT_IMAGE_SUFFIX
+
+record_timestamp "cache-image build end"
diff --git a/contrib/cirrus/integration_test.sh b/contrib/cirrus/integration_test.sh
index a50bd448f..627864f47 100755
--- a/contrib/cirrus/integration_test.sh
+++ b/contrib/cirrus/integration_test.sh
@@ -9,6 +9,8 @@ OS_RELEASE_ID $OS_RELEASE_ID
OS_RELEASE_VER $OS_RELEASE_VER
"
+record_timestamp "integration test start"
+
clean_env
set -x
@@ -24,8 +26,12 @@ case "${OS_RELEASE_ID}-${OS_RELEASE_VER}" in
centos-7) ;&
rhel-7)
make install PREFIX=/usr ETCDIR=/etc
+ make podman-remote
+ install bin/podman-remote /usr/bin
make test-binaries
make localintegration
;;
*) bad_os_id_ver ;;
esac
+
+record_timestamp "integration test end"
diff --git a/contrib/cirrus/lib.sh b/contrib/cirrus/lib.sh
index 9e9639223..32b2c91a5 100644
--- a/contrib/cirrus/lib.sh
+++ b/contrib/cirrus/lib.sh
@@ -17,6 +17,7 @@ PACKER_BASE=${PACKER_BASE:-./contrib/cirrus/packer}
CIRRUS_BUILD_ID=${CIRRUS_BUILD_ID:-DEADBEEF} # a human
CIRRUS_BASE_SHA=${CIRRUS_BASE_SHA:-HEAD}
CIRRUS_CHANGE_IN_REPO=${CIRRUS_CHANGE_IN_REPO:-FETCH_HEAD}
+TIMESTAMPS_FILEPATH="${TIMESTAMPS_FILEPATH:-/var/tmp/timestamps}"
if ! [[ "$PATH" =~ "/usr/local/bin" ]]
then
@@ -135,6 +136,16 @@ ircmsg() {
set -e
}
+record_timestamp() {
+ set +x # sometimes it's turned on
+ req_env_var "TIMESTAMPS_FILEPATH $TIMESTAMPS_FILEPATH"
+ echo "." # cirrus webui strips blank-lines
+ STAMPMSG="The $1 time at the tone will be:"
+ echo -e "$STAMPMSG\t$(date --iso-8601=seconds)" | \
+ tee -a $TIMESTAMPS_FILEPATH
+ echo -e "BLEEEEEEEEEEP!\n."
+}
+
# Run sudo in directory with GOPATH set
cdsudo() {
DIR="$1"
diff --git a/contrib/cirrus/ooe.sh b/contrib/cirrus/ooe.sh
index d79e574b2..3c8a0409d 100755
--- a/contrib/cirrus/ooe.sh
+++ b/contrib/cirrus/ooe.sh
@@ -7,10 +7,10 @@
set -eo pipefail
-SCRIPT_PATH="$0"
+SCRIPT_BASEDIR="$(basename $0)"
badusage() {
- echo "Incorrect usage: $(basename $SCRIPT_PATH) <command> [options]" > /dev/stderr
+ echo "Incorrect usage: $SCRIPT_BASEDIR) <command> [options]" > /dev/stderr
echo "ERROR: $1"
exit 121
}
@@ -18,7 +18,7 @@ badusage() {
COMMAND="$@"
[[ -n "$COMMAND" ]] || badusage "No command specified"
-OUTPUT_TMPFILE="$(mktemp -p '' $(basename $0)_output_XXXX)"
+OUTPUT_TMPFILE="$(mktemp -p '' ${SCRIPT_BASEDIR}_output_XXXX)"
output_on_error() {
RET=$?
set +e
diff --git a/contrib/cirrus/setup_environment.sh b/contrib/cirrus/setup_environment.sh
index 174bd3daf..bcfe7e396 100755
--- a/contrib/cirrus/setup_environment.sh
+++ b/contrib/cirrus/setup_environment.sh
@@ -1,8 +1,11 @@
#!/bin/bash
set -e
+
source $(dirname $0)/lib.sh
+record_timestamp "env. setup start"
+
req_env_var "
USER $USER
HOME $HOME
@@ -82,3 +85,5 @@ then
# Only testing-VMs need deps installed
[[ -n "$PACKER_BUILDS" ]] || install_testing_dependencies # must exist in $GOPATH
fi
+
+record_timestamp "env. setup end"
diff --git a/contrib/cirrus/unit_test.sh b/contrib/cirrus/unit_test.sh
index 61d9dc73d..15403b7a7 100755
--- a/contrib/cirrus/unit_test.sh
+++ b/contrib/cirrus/unit_test.sh
@@ -9,6 +9,8 @@ OS_RELEASE_ID $OS_RELEASE_ID
OS_RELEASE_VER $OS_RELEASE_VER
"
+record_timestamp "unit test start"
+
clean_env
set -x
@@ -29,3 +31,5 @@ case "${OS_RELEASE_ID}-${OS_RELEASE_VER}" in
;;
*) bad_os_id_ver ;;
esac
+
+record_timestamp "unit test end"
diff --git a/contrib/python/.gitignore b/contrib/python/.gitignore
deleted file mode 100644
index a3903c542..000000000
--- a/contrib/python/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-build
-dist
-*.egg-info
-*.pyc
-__pycache__
diff --git a/contrib/python/podman/.pylintrc b/contrib/python/podman/.pylintrc
deleted file mode 100644
index a5628a6cf..000000000
--- a/contrib/python/podman/.pylintrc
+++ /dev/null
@@ -1,564 +0,0 @@
-[MASTER]
-
-# A comma-separated list of package or module names from where C extensions may
-# be loaded. Extensions are loading into the active Python interpreter and may
-# run arbitrary code.
-extension-pkg-whitelist=
-
-# Add files or directories to the blacklist. They should be base names, not
-# paths.
-ignore=CVS
-
-# Add files or directories matching the regex patterns to the blacklist. The
-# regex matches against base names, not paths.
-ignore-patterns=
-
-# Python code to execute, usually for sys.path manipulation such as
-# pygtk.require().
-#init-hook=
-
-# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
-# number of processors available to use.
-jobs=0
-
-# Control the amount of potential inferred values when inferring a single
-# object. This can help the performance when dealing with large functions or
-# complex, nested conditions.
-limit-inference-results=100
-
-# List of plugins (as comma separated values of python modules names) to load,
-# usually to register additional checkers.
-load-plugins=
-
-# Pickle collected data for later comparisons.
-persistent=yes
-
-# Specify a configuration file.
-#rcfile=
-
-# When enabled, pylint would attempt to guess common misconfiguration and emit
-# user-friendly hints instead of false-positive error messages.
-suggestion-mode=yes
-
-# Allow loading of arbitrary C extensions. Extensions are imported into the
-# active Python interpreter and may run arbitrary code.
-unsafe-load-any-extension=no
-
-
-[MESSAGES CONTROL]
-
-# Only show warnings with the listed confidence levels. Leave empty to show
-# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED.
-confidence=
-
-# Disable the message, report, category or checker with the given id(s). You
-# can either give multiple identifiers separated by comma (,) or put this
-# option multiple times (only on the command line, not in the configuration
-# file where it should appear only once). You can also use "--disable=all" to
-# disable everything first and then reenable specific checks. For example, if
-# you want to run only the similarities checker, you can use "--disable=all
-# --enable=similarities". If you want to run only the classes checker, but have
-# no Warning level messages displayed, use "--disable=all --enable=classes
-# --disable=W".
-disable=print-statement,
- parameter-unpacking,
- unpacking-in-except,
- old-raise-syntax,
- backtick,
- long-suffix,
- old-ne-operator,
- old-octal-literal,
- import-star-module-level,
- non-ascii-bytes-literal,
- raw-checker-failed,
- bad-inline-option,
- locally-disabled,
- locally-enabled,
- file-ignored,
- suppressed-message,
- useless-suppression,
- deprecated-pragma,
- use-symbolic-message-instead,
- apply-builtin,
- basestring-builtin,
- buffer-builtin,
- cmp-builtin,
- coerce-builtin,
- execfile-builtin,
- file-builtin,
- long-builtin,
- raw_input-builtin,
- reduce-builtin,
- standarderror-builtin,
- unicode-builtin,
- xrange-builtin,
- coerce-method,
- delslice-method,
- getslice-method,
- setslice-method,
- no-absolute-import,
- old-division,
- dict-iter-method,
- dict-view-method,
- next-method-called,
- metaclass-assignment,
- indexing-exception,
- raising-string,
- reload-builtin,
- oct-method,
- hex-method,
- nonzero-method,
- cmp-method,
- input-builtin,
- round-builtin,
- intern-builtin,
- unichr-builtin,
- map-builtin-not-iterating,
- zip-builtin-not-iterating,
- range-builtin-not-iterating,
- filter-builtin-not-iterating,
- using-cmp-argument,
- eq-without-hash,
- div-method,
- idiv-method,
- rdiv-method,
- exception-message-attribute,
- invalid-str-codec,
- sys-max-int,
- bad-python3-import,
- deprecated-string-function,
- deprecated-str-translate-call,
- deprecated-itertools-function,
- deprecated-types-field,
- next-method-defined,
- dict-items-not-iterating,
- dict-keys-not-iterating,
- dict-values-not-iterating,
- deprecated-operator-function,
- deprecated-urllib-function,
- xreadlines-attribute,
- deprecated-sys-function,
- exception-escape,
- comprehension-escape
-
-# Enable the message, report, category or checker with the given id(s). You can
-# either give multiple identifier separated by comma (,) or put this option
-# multiple time (only on the command line, not in the configuration file where
-# it should appear only once). See also the "--disable" option for examples.
-enable=c-extension-no-member
-
-
-[REPORTS]
-
-# Python expression which should return a note less than 10 (10 is the highest
-# note). You have access to the variables errors warning, statement which
-# respectively contain the number of errors / warnings messages and the total
-# number of statements analyzed. This is used by the global evaluation report
-# (RP0004).
-evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
-
-# Template used to display messages. This is a python new-style format string
-# used to format the message information. See doc for all details.
-#msg-template=
-
-# Set the output format. Available formats are text, parseable, colorized, json
-# and msvs (visual studio). You can also give a reporter class, e.g.
-# mypackage.mymodule.MyReporterClass.
-output-format=text
-
-# Tells whether to display a full report or only the messages.
-reports=no
-
-# Activate the evaluation score.
-score=yes
-
-
-[REFACTORING]
-
-# Maximum number of nested blocks for function / method body
-max-nested-blocks=5
-
-# Complete name of functions that never returns. When checking for
-# inconsistent-return-statements if a never returning function is called then
-# it will be considered as an explicit return statement and no message will be
-# printed.
-never-returning-functions=sys.exit
-
-
-[TYPECHECK]
-
-# List of decorators that produce context managers, such as
-# contextlib.contextmanager. Add to this list to register other decorators that
-# produce valid context managers.
-contextmanager-decorators=contextlib.contextmanager
-
-# List of members which are set dynamically and missed by pylint inference
-# system, and so shouldn't trigger E1101 when accessed. Python regular
-# expressions are accepted.
-generated-members=
-
-# Tells whether missing members accessed in mixin class should be ignored. A
-# mixin class is detected if its name ends with "mixin" (case insensitive).
-ignore-mixin-members=yes
-
-# Tells whether to warn about missing members when the owner of the attribute
-# is inferred to be None.
-ignore-none=yes
-
-# This flag controls whether pylint should warn about no-member and similar
-# checks whenever an opaque object is returned when inferring. The inference
-# can return multiple potential results while evaluating a Python object, but
-# some branches might not be evaluated, which results in partial inference. In
-# that case, it might be useful to still emit no-member and other checks for
-# the rest of the inferred objects.
-ignore-on-opaque-inference=yes
-
-# List of class names for which member attributes should not be checked (useful
-# for classes with dynamically set attributes). This supports the use of
-# qualified names.
-ignored-classes=optparse.Values,thread._local,_thread._local
-
-# List of module names for which member attributes should not be checked
-# (useful for modules/projects where namespaces are manipulated during runtime
-# and thus existing member attributes cannot be deduced by static analysis. It
-# supports qualified module names, as well as Unix pattern matching.
-ignored-modules=
-
-# Show a hint with possible names when a member name was not found. The aspect
-# of finding the hint is based on edit distance.
-missing-member-hint=yes
-
-# The minimum edit distance a name should have in order to be considered a
-# similar match for a missing member name.
-missing-member-hint-distance=1
-
-# The total number of similar names that should be taken in consideration when
-# showing a hint for a missing member.
-missing-member-max-choices=1
-
-
-[SPELLING]
-
-# Limits count of emitted suggestions for spelling mistakes.
-max-spelling-suggestions=4
-
-# Spelling dictionary name. Available dictionaries: none. To make it working
-# install python-enchant package..
-spelling-dict=
-
-# List of comma separated words that should not be checked.
-spelling-ignore-words=
-
-# A path to a file that contains private dictionary; one word per line.
-spelling-private-dict-file=
-
-# Tells whether to store unknown words to indicated private dictionary in
-# --spelling-private-dict-file option instead of raising a message.
-spelling-store-unknown-words=no
-
-
-[MISCELLANEOUS]
-
-# List of note tags to take in consideration, separated by a comma.
-notes=FIXME,
- XXX,
- TODO
-
-
-[FORMAT]
-
-# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
-expected-line-ending-format=
-
-# Regexp for a line that is allowed to be longer than the limit.
-ignore-long-lines=^\s*(# )?<?https?://\S+>?$
-
-# Number of spaces of indent required inside a hanging or continued line.
-indent-after-paren=4
-
-# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
-# tab).
-indent-string=' '
-
-# Maximum number of characters on a single line.
-max-line-length=100
-
-# Maximum number of lines in a module.
-max-module-lines=1000
-
-# List of optional constructs for which whitespace checking is disabled. `dict-
-# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}.
-# `trailing-comma` allows a space between comma and closing bracket: (a, ).
-# `empty-line` allows space-only lines.
-no-space-check=trailing-comma,
- dict-separator
-
-# Allow the body of a class to be on the same line as the declaration if body
-# contains single statement.
-single-line-class-stmt=no
-
-# Allow the body of an if to be on the same line as the test if there is no
-# else.
-single-line-if-stmt=no
-
-
-[BASIC]
-
-# Naming style matching correct argument names.
-#argument-naming-style=snake_case
-
-# Regular expression matching correct argument names. Overrides argument-
-# naming-style.
-argument-rgx=[a-z_][a-z0-9_]{1,30}$
-argument-name-hint=[a-z_][a-z0-9_]{1,30}$
-
-# Naming style matching correct attribute names.
-attr-naming-style=snake_case
-
-# Regular expression matching correct attribute names. Overrides attr-naming-
-# style.
-#attr-rgx=
-
-# Bad variable names which should always be refused, separated by a comma.
-bad-names=foo,
- bar,
- baz,
- toto,
- tutu,
- tata
-
-# Naming style matching correct class attribute names.
-class-attribute-naming-style=any
-
-# Regular expression matching correct class attribute names. Overrides class-
-# attribute-naming-style.
-#class-attribute-rgx=
-
-# Naming style matching correct class names.
-class-naming-style=PascalCase
-
-# Regular expression matching correct class names. Overrides class-naming-
-# style.
-#class-rgx=
-
-# Naming style matching correct constant names.
-const-naming-style=UPPER_CASE
-
-# Regular expression matching correct constant names. Overrides const-naming-
-# style.
-#const-rgx=
-
-# Minimum line length for functions/classes that require docstrings, shorter
-# ones are exempt.
-docstring-min-length=-1
-
-# Naming style matching correct function names.
-function-naming-style=snake_case
-
-# Regular expression matching correct function names. Overrides function-
-# naming-style.
-#function-rgx=
-
-# Good variable names which should always be accepted, separated by a comma.
-good-names=c,
- e,
- i,
- j,
- k,
- r,
- v,
- ex,
- Run,
- _
-
-# Include a hint for the correct naming format with invalid-name.
-include-naming-hint=no
-
-# Naming style matching correct inline iteration names.
-inlinevar-naming-style=any
-
-# Regular expression matching correct inline iteration names. Overrides
-# inlinevar-naming-style.
-#inlinevar-rgx=
-
-# Naming style matching correct method names.
-method-naming-style=snake_case
-
-# Regular expression matching correct method names. Overrides method-naming-
-# style.
-#method-rgx=
-
-# Naming style matching correct module names.
-module-naming-style=snake_case
-
-# Regular expression matching correct module names. Overrides module-naming-
-# style.
-#module-rgx=
-
-# Colon-delimited sets of names that determine each other's naming style when
-# the name regexes allow several styles.
-name-group=
-
-# Regular expression which should only match function or class names that do
-# not require a docstring.
-no-docstring-rgx=^_
-
-# List of decorators that produce properties, such as abc.abstractproperty. Add
-# to this list to register other decorators that produce valid properties.
-# These decorators are taken in consideration only for invalid-name.
-property-classes=abc.abstractproperty
-
-# Naming style matching correct variable names.
-#variable-naming-style=snake_case
-
-# Regular expression matching correct variable names. Overrides variable-
-# naming-style.
-variable-rgx=[a-z_][a-z0-9_]{2,30}$
-variable-name-hint=[a-z_][a-z0-9_]{2,30}$
-
-[SIMILARITIES]
-
-# Ignore comments when computing similarities.
-ignore-comments=yes
-
-# Ignore docstrings when computing similarities.
-ignore-docstrings=yes
-
-# Ignore imports when computing similarities.
-ignore-imports=no
-
-# Minimum lines number of a similarity.
-min-similarity-lines=4
-
-
-[VARIABLES]
-
-# List of additional names supposed to be defined in builtins. Remember that
-# you should avoid to define new builtins when possible.
-additional-builtins=
-
-# Tells whether unused global variables should be treated as a violation.
-allow-global-unused-variables=yes
-
-# List of strings which can identify a callback function by name. A callback
-# name must start or end with one of those strings.
-callbacks=cb_,
- _cb
-
-# A regular expression matching the name of dummy variables (i.e. expected to
-# not be used).
-dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_
-
-# Argument names that match this expression will be ignored. Default to name
-# with leading underscore.
-ignored-argument-names=_.*|^ignored_|^unused_
-
-# Tells whether we should check for unused import in __init__ files.
-init-import=no
-
-# List of qualified module names which can have objects that can redefine
-# builtins.
-redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io
-
-
-[LOGGING]
-
-# Logging modules to check that the string format arguments are in logging
-# function parameter format.
-logging-modules=logging
-
-
-[IMPORTS]
-
-# Allow wildcard imports from modules that define __all__.
-allow-wildcard-with-all=no
-
-# Analyse import fallback blocks. This can be used to support both Python 2 and
-# 3 compatible code, which means that the block might have code that exists
-# only in one or another interpreter, leading to false positives when analysed.
-analyse-fallback-blocks=no
-
-# Deprecated modules which should not be used, separated by a comma.
-deprecated-modules=optparse,tkinter.tix
-
-# Create a graph of external dependencies in the given file (report RP0402 must
-# not be disabled).
-ext-import-graph=
-
-# Create a graph of every (i.e. internal and external) dependencies in the
-# given file (report RP0402 must not be disabled).
-import-graph=
-
-# Create a graph of internal dependencies in the given file (report RP0402 must
-# not be disabled).
-int-import-graph=
-
-# Force import order to recognize a module as part of the standard
-# compatibility libraries.
-known-standard-library=
-
-# Force import order to recognize a module as part of a third party library.
-known-third-party=enchant
-
-
-[DESIGN]
-
-# Support argparse.Action constructor API
-# Maximum number of arguments for function / method.
-max-args=12
-
-# Maximum number of attributes for a class (see R0902).
-max-attributes=7
-
-# Maximum number of boolean expressions in an if statement.
-max-bool-expr=5
-
-# Maximum number of branch for function / method body.
-max-branches=12
-
-# Maximum number of locals for function / method body.
-max-locals=15
-
-# Maximum number of parents for a class (see R0901).
-max-parents=10
-
-# Maximum number of public methods for a class (see R0904).
-max-public-methods=20
-
-# Maximum number of return / yield for function / method body.
-max-returns=6
-
-# Maximum number of statements in function / method body.
-max-statements=50
-
-# Minimum number of public methods for a class (see R0903).
-min-public-methods=2
-
-
-[CLASSES]
-
-# List of method names used to declare (i.e. assign) instance attributes.
-defining-attr-methods=__init__,
- __new__,
- setUp
-
-# List of member names, which should be excluded from the protected access
-# warning.
-exclude-protected=_asdict,
- _fields,
- _replace,
- _source,
- _make
-
-# List of valid names for the first argument in a class method.
-valid-classmethod-first-arg=cls
-
-# List of valid names for the first argument in a metaclass class method.
-valid-metaclass-classmethod-first-arg=cls
-
-
-[EXCEPTIONS]
-
-# Exceptions that will emit a warning when being caught. Defaults to
-# "Exception".
-overgeneral-exceptions=Exception
diff --git a/contrib/python/podman/CHANGES.txt b/contrib/python/podman/CHANGES.txt
deleted file mode 100644
index 2bac1c867..000000000
--- a/contrib/python/podman/CHANGES.txt
+++ /dev/null
@@ -1 +0,0 @@
-v0.1.0, 2018-05-11 -- Initial release.
diff --git a/contrib/python/podman/MANIFEST.in b/contrib/python/podman/MANIFEST.in
deleted file mode 100644
index a5897de50..000000000
--- a/contrib/python/podman/MANIFEST.in
+++ /dev/null
@@ -1,3 +0,0 @@
-prune test/
-include README.md
-include requirements.txt
diff --git a/contrib/python/podman/Makefile b/contrib/python/podman/Makefile
deleted file mode 100644
index 0cbfe2fb3..000000000
--- a/contrib/python/podman/Makefile
+++ /dev/null
@@ -1,40 +0,0 @@
-PYTHON ?= $(shell command -v python3 2>/dev/null || command -v python)
-DESTDIR ?= /
-PODMAN_VERSION ?= '0.11.1.1'
-
-.PHONY: python-podman
-python-podman:
- PODMAN_VERSION=$(PODMAN_VERSION) \
- $(PYTHON) setup.py sdist bdist
-
-.PHONY: lint
-lint:
- $(PYTHON) -m pylint podman
-
-.PHONY: integration
-integration:
- test/test_runner.sh -v
-
-.PHONY: install
-install:
- PODMAN_VERSION=$(PODMAN_VERSION) \
- $(PYTHON) setup.py install --root ${DESTDIR}
-
-.PHONY: upload
-upload:
- PODMAN_VERSION=$(PODMAN_VERSION) $(PYTHON) setup.py sdist bdist_wheel
- twine upload --verbose --repository-url https://test.pypi.org/legacy/ dist/*
-
-.PHONY: clobber
-clobber: uninstall clean
-
-.PHONY: uninstall
-uninstall:
- $(PYTHON) -m pip uninstall --yes podman ||:
-
-.PHONY: clean
-clean:
- rm -rf podman.egg-info dist
- find . -depth -name __pycache__ -exec rm -rf {} \;
- find . -depth -name \*.pyc -exec rm -f {} \;
- $(PYTHON) ./setup.py clean --all
diff --git a/contrib/python/podman/README.md b/contrib/python/podman/README.md
deleted file mode 100644
index 3254064b0..000000000
--- a/contrib/python/podman/README.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# podman - pythonic library for working with varlink interface to Podman
-
-## Status: Active Development
-
-See [libpod](https://github.com/containers/libpod)
-
-## Releases
-
-To build the podman egg and install as user:
-
-```sh
-cd ~/libpod/contrib/python/podman
-python3 setup.py clean -a && python3 setup.py sdist bdist
-python3 setup.py install --user
-```
-
-## Code snippets/examples:
-
-### Show images in storage
-
-```python
-import podman
-
-with podman.Client() as client:
- list(map(print, client.images.list()))
-```
-
-### Show containers created since midnight
-
-```python
-from datetime import datetime, time, timezone
-
-import podman
-
-midnight = datetime.combine(datetime.today(), time.min, tzinfo=timezone.utc)
-
-with podman.Client() as client:
- for c in client.containers.list():
- created_at = podman.datetime_parse(c.createdat)
-
- if created_at > midnight:
- print('Container {}: image: {} created at: {}'.format(
- c.id[:12], c.image[:32], podman.datetime_format(created_at)))
-```
diff --git a/contrib/python/podman/examples/eg_attach.py b/contrib/python/podman/examples/eg_attach.py
deleted file mode 100644
index f5070dc53..000000000
--- a/contrib/python/podman/examples/eg_attach.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python3
-"""Example: Run top on Alpine container."""
-
-import podman
-
-print('{}\n'.format(__doc__))
-
-with podman.Client() as client:
- id = client.images.pull('alpine:latest')
- img = client.images.get(id)
- cntr = img.create(detach=True, tty=True, command=['/usr/bin/top'])
- cntr.attach(eot=4)
-
- try:
- cntr.start()
- print()
- except (BrokenPipeError, KeyboardInterrupt):
- print('\nContainer disconnected.')
diff --git a/contrib/python/podman/examples/eg_containers_by_image.py b/contrib/python/podman/examples/eg_containers_by_image.py
deleted file mode 100644
index bf4fdebf1..000000000
--- a/contrib/python/podman/examples/eg_containers_by_image.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env python3
-"""Example: Show containers grouped by image id."""
-
-from itertools import groupby
-
-import podman
-
-print('{}\n'.format(__doc__))
-
-with podman.Client() as client:
- ctnrs = sorted(client.containers.list(), key=lambda k: k.imageid)
- for key, grp in groupby(ctnrs, key=lambda k: k.imageid):
- print('Image: {}'.format(key))
- for c in grp:
- print(' : container: {} created at: {}'.format(
- c.id[:12], podman.datetime_format(c.createdat)))
diff --git a/contrib/python/podman/examples/eg_image_list.py b/contrib/python/podman/examples/eg_image_list.py
deleted file mode 100644
index ef31fd708..000000000
--- a/contrib/python/podman/examples/eg_image_list.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python3
-"""Example: Show all images on system."""
-
-import podman
-
-print('{}\n'.format(__doc__))
-
-with podman.Client() as client:
- for img in client.images.list():
- print(img)
diff --git a/contrib/python/podman/examples/eg_inspect_fedora.py b/contrib/python/podman/examples/eg_inspect_fedora.py
deleted file mode 100644
index b5bbba46d..000000000
--- a/contrib/python/podman/examples/eg_inspect_fedora.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env python3
-"""Example: Pull Fedora and inspect image and container."""
-
-import podman
-
-print('{}\n'.format(__doc__))
-
-with podman.Client() as client:
- id = client.images.pull('registry.fedoraproject.org/fedora:28')
- img = client.images.get(id)
- print(img.inspect())
-
- cntr = img.create()
- print(cntr.inspect())
-
- cntr.remove()
diff --git a/contrib/python/podman/examples/eg_latest_containers.py b/contrib/python/podman/examples/eg_latest_containers.py
deleted file mode 100644
index 446f670dd..000000000
--- a/contrib/python/podman/examples/eg_latest_containers.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env python3
-"""Example: Show all containers created since midnight."""
-
-from datetime import datetime, time, timezone
-
-import podman
-
-print('{}\n'.format(__doc__))
-
-
-midnight = datetime.combine(datetime.today(), time.min, tzinfo=timezone.utc)
-
-with podman.Client() as client:
- for c in client.containers.list():
- created_at = podman.datetime_parse(c.createdat)
-
- if created_at > midnight:
- print('{}: image: {} createdAt: {}'.format(
- c.id[:12], c.image[:32], podman.datetime_format(created_at)))
diff --git a/contrib/python/podman/examples/eg_new_image.py b/contrib/python/podman/examples/eg_new_image.py
deleted file mode 100644
index 21e076dcb..000000000
--- a/contrib/python/podman/examples/eg_new_image.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python3
-"""Example: Create new image from container."""
-
-import sys
-
-import podman
-
-
-def print_history(details):
- """Format history data from an image, in a table."""
- for i, r in enumerate(details):
- print(
- '{}: {} {} {}'.format(i, r.id[:12],
- podman.datetime_format(r.created), r.tags),
- sep='\n')
- print("-" * 25)
-
-
-print('{}\n'.format(__doc__))
-
-with podman.Client() as client:
- ctnr = next(
- (c for c in client.containers.list() if 'alpine' in c['image']), None)
-
- if ctnr:
- print_history(client.images.get(ctnr.imageid).history())
-
- # Make changes as we save the container to a new image
- id = ctnr.commit('alpine-ash', changes=['CMD=/bin/ash'])
- print_history(client.images.get(id).history())
- else:
- print('Unable to find "alpine" container.', file=sys.stderr)
diff --git a/contrib/python/podman/examples/run_example.sh b/contrib/python/podman/examples/run_example.sh
deleted file mode 100755
index d81ddf456..000000000
--- a/contrib/python/podman/examples/run_example.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/bash
-
-export PYTHONPATH=..
-
-function examples {
- for file in $@; do
- python3 -c "import ast; f=open('"${file}"'); t=ast.parse(f.read()); print(ast.get_docstring(t) + ' -- "${file}"')"
- done
-}
-
-while getopts "lh" arg; do
- case $arg in
- l ) examples $(ls eg_*.py); exit 0 ;;
- h ) echo 1>&2 $0 [-l] [-h] filename ; exit 2 ;;
- esac
-done
-shift $((OPTIND-1))
-
-# podman needs to play some games with resources
-if [[ $(id -u) != 0 ]]; then
- echo 1>&2 $0 must be run as root.
- exit 2
-fi
-
-if ! systemctl --quiet is-active io.podman.socket; then
- echo 1>&2 'podman is not running. systemctl enable --now io.podman.socket'
- exit 1
-fi
-
-function cleanup {
- podman rm $1 >/dev/null 2>&1
-}
-
-# Setup storage with an image and container
-podman pull alpine:latest >/tmp/podman.output 2>&1
-CTNR=$(podman create alpine)
-trap "cleanup $CTNR" EXIT
-
-if [[ -f $1 ]]; then
- python3 $1
-else
- python3 $1.py
-fi
diff --git a/contrib/python/podman/podman/__init__.py b/contrib/python/podman/podman/__init__.py
deleted file mode 100644
index 1cdb72773..000000000
--- a/contrib/python/podman/podman/__init__.py
+++ /dev/null
@@ -1,29 +0,0 @@
-"""A client for communicating with a Podman server."""
-import pkg_resources
-
-from .client import Client
-from .libs import FoldedString, datetime_format, datetime_parse
-from .libs.errors import (ContainerNotFound, ErrorOccurred, ImageNotFound,
- NoContainerRunning, NoContainersInPod,
- PodContainerError, PodmanError, PodNotFound)
-
-assert FoldedString
-
-try:
- __version__ = pkg_resources.get_distribution('podman').version
-except Exception: # pylint: disable=broad-except
- __version__ = '0.0.0'
-
-__all__ = [
- 'Client',
- 'ContainerNotFound',
- 'datetime_format',
- 'datetime_parse',
- 'ErrorOccurred',
- 'ImageNotFound',
- 'NoContainerRunning',
- 'NoContainersInPod',
- 'PodContainerError',
- 'PodmanError',
- 'PodNotFound',
-]
diff --git a/contrib/python/podman/podman/client.py b/contrib/python/podman/podman/client.py
deleted file mode 100644
index ad603166e..000000000
--- a/contrib/python/podman/podman/client.py
+++ /dev/null
@@ -1,212 +0,0 @@
-"""A client for communicating with a Podman varlink service."""
-import errno
-import logging
-import os
-from urllib.parse import urlparse
-
-from varlink import Client as VarlinkClient
-from varlink import VarlinkError
-
-from .libs import cached_property
-from .libs.containers import Containers
-from .libs.errors import error_factory
-from .libs.images import Images
-from .libs.system import System
-from .libs.tunnel import Context, Portal, Tunnel
-from .libs.pods import Pods
-
-
-class BaseClient():
- """Context manager for API workers to access varlink."""
-
- def __init__(self, context):
- """Construct Client."""
- self._client = None
- self._iface = None
- self._context = context
-
- def __call__(self):
- """Support being called for old API."""
- return self
-
- @classmethod
- def factory(cls,
- uri=None,
- interface='io.podman',
- *args,
- **kwargs):
- """Construct a Client based on input."""
- log_level = os.environ.get('LOG_LEVEL')
- if log_level is not None:
- logging.basicConfig(level=logging.getLevelName(log_level.upper()))
-
- if uri is None:
- raise ValueError('uri is required and cannot be None')
- if interface is None:
- raise ValueError('interface is required and cannot be None')
-
- unsupported = set(kwargs.keys()).difference(
- ('uri', 'interface', 'remote_uri', 'identity_file'))
- if unsupported:
- raise ValueError('Unknown keyword arguments: {}'.format(
- ', '.join(unsupported)))
-
- local_path = urlparse(uri).path
- if local_path == '':
- raise ValueError('path is required for uri,'
- ' expected format "unix://path_to_socket"')
-
- if kwargs.get('remote_uri') is None:
- return LocalClient(Context(uri, interface))
-
- required = ('{} is required, expected format'
- ' "ssh://user@hostname[:port]/path_to_socket".')
-
- # Remote access requires the full tuple of information
- if kwargs.get('remote_uri') is None:
- raise ValueError(required.format('remote_uri'))
-
- remote = urlparse(kwargs['remote_uri'])
- if remote.username is None:
- raise ValueError(required.format('username'))
- if remote.path == '':
- raise ValueError(required.format('path'))
- if remote.hostname is None:
- raise ValueError(required.format('hostname'))
-
- return RemoteClient(
- Context(
- uri,
- interface,
- local_path,
- remote.path,
- remote.username,
- remote.hostname,
- remote.port,
- kwargs.get('identity_file'),
- ))
-
-
-class LocalClient(BaseClient):
- """Context manager for API workers to access varlink."""
-
- def __enter__(self):
- """Enter context for LocalClient."""
- self._client = VarlinkClient(address=self._context.uri)
- self._iface = self._client.open(self._context.interface)
- return self._iface
-
- def __exit__(self, e_type, e, e_traceback):
- """Cleanup context for LocalClient."""
- if hasattr(self._client, 'close'):
- self._client.close()
- self._iface.close()
-
- if isinstance(e, VarlinkError):
- raise error_factory(e)
-
-
-class RemoteClient(BaseClient):
- """Context manager for API workers to access remote varlink."""
-
- def __init__(self, context):
- """Construct RemoteCLient."""
- super().__init__(context)
- self._portal = Portal()
-
- def __enter__(self):
- """Context manager for API workers to access varlink."""
- tunnel = self._portal.get(self._context.uri)
- if tunnel is None:
- tunnel = Tunnel(self._context).bore()
- self._portal[self._context.uri] = tunnel
-
- try:
- self._client = VarlinkClient(address=self._context.uri)
- self._iface = self._client.open(self._context.interface)
- return self._iface
- except Exception:
- tunnel.close()
- raise
-
- def __exit__(self, e_type, e, e_traceback):
- """Cleanup context for RemoteClient."""
- if hasattr(self._client, 'close'):
- self._client.close()
- self._iface.close()
-
- # set timer to shutdown ssh tunnel
- # self._portal.get(self._context.uri).close()
- if isinstance(e, VarlinkError):
- raise error_factory(e)
-
-
-class Client():
- """A client for communicating with a Podman varlink service.
-
- Example:
-
- >>> import podman
- >>> c = podman.Client()
- >>> c.system.versions
-
- Example remote podman:
-
- >>> import podman
- >>> c = podman.Client(uri='unix:/tmp/podman.sock',
- remote_uri='ssh://user@host/run/podman/io.podman',
- identity_file='~/.ssh/id_rsa')
- """
-
- def __init__(self,
- uri='unix:/run/podman/io.podman',
- interface='io.podman',
- **kwargs):
- """Construct a podman varlink Client.
-
- uri from default systemd unit file.
- interface from io.podman.varlink, do not change unless
- you are a varlink guru.
- """
- self._client = BaseClient.factory(uri, interface, **kwargs)
-
- address = "{}-{}".format(uri, interface)
- # Quick validation of connection data provided
- try:
- if not System(self._client).ping():
- raise ConnectionRefusedError(
- errno.ECONNREFUSED,
- ('Failed varlink connection "{}"').format(address))
- except FileNotFoundError:
- raise ConnectionError(
- errno.ECONNREFUSED,
- ('Failed varlink connection "{}".'
- ' Is podman socket or service running?').format(address))
-
- def __enter__(self):
- """Return `self` upon entering the runtime context."""
- return self
-
- def __exit__(self, exc_type, exc_value, traceback):
- """Raise any exception triggered within the runtime context."""
- pass
-
- @cached_property
- def system(self):
- """Manage system model for podman."""
- return System(self._client)
-
- @cached_property
- def images(self):
- """Manage images model for libpod."""
- return Images(self._client)
-
- @cached_property
- def containers(self):
- """Manage containers model for libpod."""
- return Containers(self._client)
-
- @cached_property
- def pods(self):
- """Manage pods model for libpod."""
- return Pods(self._client)
diff --git a/contrib/python/podman/podman/libs/__init__.py b/contrib/python/podman/podman/libs/__init__.py
deleted file mode 100644
index 5193313ed..000000000
--- a/contrib/python/podman/podman/libs/__init__.py
+++ /dev/null
@@ -1,75 +0,0 @@
-"""Support files for podman API implementation."""
-import collections
-import datetime
-import functools
-
-from dateutil.parser import parse as dateutil_parse
-
-__all__ = [
- 'cached_property',
- 'datetime_format',
- 'datetime_parse',
- 'fold_keys',
-]
-
-
-def cached_property(fn):
- """Decorate property to cache return value."""
- return property(functools.lru_cache(maxsize=8)(fn))
-
-
-class ConfigDict(collections.UserDict):
- """Silently ignore None values, only take key once."""
-
- def __init__(self, **kwargs):
- """Construct dictionary."""
- super().__init__(kwargs)
-
- def __setitem__(self, key, value):
- """Store unique, not None values."""
- if value is None:
- return
-
- if super().__contains__(key):
- return
-
- super().__setitem__(key, value)
-
-
-class FoldedString(collections.UserString):
- """Foldcase sequences value."""
-
- def __init__(self, seq):
- super().__init__(seq)
- self.data.casefold()
-
-
-def fold_keys(): # noqa: D202
- """Fold case of dictionary keys."""
-
- @functools.wraps(fold_keys)
- def wrapped(mapping):
- """Fold case of dictionary keys."""
- return {k.casefold(): v for (k, v) in mapping.items()}
-
- return wrapped
-
-
-def datetime_parse(string):
- """Convert timestamps to datetime.
-
- tzinfo aware, if provided.
- """
- return dateutil_parse(string.upper(), fuzzy=True)
-
-
-def datetime_format(dt):
- """Format datetime in consistent style."""
- if isinstance(dt, str):
- return datetime_parse(dt).isoformat()
-
- if isinstance(dt, datetime.datetime):
- return dt.isoformat()
-
- raise ValueError('Unable to format {}. Type {} not supported.'.format(
- dt, type(dt)))
diff --git a/contrib/python/podman/podman/libs/_containers_attach.py b/contrib/python/podman/podman/libs/_containers_attach.py
deleted file mode 100644
index 94247d349..000000000
--- a/contrib/python/podman/podman/libs/_containers_attach.py
+++ /dev/null
@@ -1,79 +0,0 @@
-"""Exported method Container.attach()."""
-
-import collections
-import fcntl
-import logging
-import struct
-import sys
-import termios
-
-
-class Mixin:
- """Publish attach() for inclusion in Container class."""
-
- def attach(self, eot=4, stdin=None, stdout=None):
- """Attach to container's PID1 stdin and stdout.
-
- stderr is ignored.
- PseudoTTY work is done in start().
- """
- if stdin is None:
- stdin = sys.stdin.fileno()
- elif hasattr(stdin, 'fileno'):
- stdin = stdin.fileno()
-
- if stdout is None:
- stdout = sys.stdout.fileno()
- elif hasattr(stdout, 'fileno'):
- stdout = stdout.fileno()
-
- with self._client() as podman:
- attach = podman.GetAttachSockets(self._id)
-
- # This is the UDS where all the IO goes
- io_socket = attach['sockets']['io_socket']
- assert len(io_socket) <= 107,\
- 'Path length for sockets too long. {} > 107'.format(
- len(io_socket)
- )
-
- # This is the control socket where resizing events are sent to conmon
- # attach['sockets']['control_socket']
- self.pseudo_tty = collections.namedtuple(
- 'PseudoTTY',
- ['stdin', 'stdout', 'io_socket', 'control_socket', 'eot'])(
- stdin,
- stdout,
- attach['sockets']['io_socket'],
- attach['sockets']['control_socket'],
- eot,
- )
-
- @property
- def resize_handler(self):
- """Send the new window size to conmon."""
-
- def wrapped(signum, frame): # pylint: disable=unused-argument
- packed = fcntl.ioctl(self.pseudo_tty.stdout, termios.TIOCGWINSZ,
- struct.pack('HHHH', 0, 0, 0, 0))
- rows, cols, _, _ = struct.unpack('HHHH', packed)
- logging.debug('Resize window(%dx%d) using %s', rows, cols,
- self.pseudo_tty.control_socket)
-
- # TODO: Need some kind of timeout in case pipe is blocked
- with open(self.pseudo_tty.control_socket, 'w') as skt:
- # send conmon window resize message
- skt.write('1 {} {}\n'.format(rows, cols))
-
- return wrapped
-
- @property
- def log_handler(self):
- """Send command to reopen log to conmon."""
-
- def wrapped(signum, frame): # pylint: disable=unused-argument
- with open(self.pseudo_tty.control_socket, 'w') as skt:
- # send conmon reopen log message
- skt.write('2\n')
-
- return wrapped
diff --git a/contrib/python/podman/podman/libs/_containers_start.py b/contrib/python/podman/podman/libs/_containers_start.py
deleted file mode 100644
index 20130f5d6..000000000
--- a/contrib/python/podman/podman/libs/_containers_start.py
+++ /dev/null
@@ -1,82 +0,0 @@
-"""Exported method Container.start()."""
-import logging
-import os
-import select
-import signal
-import socket
-import sys
-import termios
-import tty
-
-CONMON_BUFSZ = 8192
-
-
-class Mixin:
- """Publish start() for inclusion in Container class."""
-
- def start(self):
- """Start container, return container on success.
-
- Will block if container has been detached.
- """
- with self._client() as podman:
- logging.debug('Starting Container "%s"', self._id)
- results = podman.StartContainer(self._id)
- logging.debug('Started Container "%s"', results['container'])
-
- if not hasattr(self, 'pseudo_tty') or self.pseudo_tty is None:
- return self._refresh(podman)
-
- logging.debug('Setting up PseudoTTY for Container "%s"',
- results['container'])
-
- try:
- # save off the old settings for terminal
- tcoldattr = termios.tcgetattr(self.pseudo_tty.stdin)
- tty.setraw(self.pseudo_tty.stdin)
-
- # initialize container's window size
- self.resize_handler(None, sys._getframe(0))
-
- # catch any resizing events and send the resize info
- # to the control fifo "socket"
- signal.signal(signal.SIGWINCH, self.resize_handler)
-
- except termios.error:
- tcoldattr = None
-
- try:
- # TODO: Is socket.SOCK_SEQPACKET supported in Windows?
- with socket.socket(socket.AF_UNIX,
- socket.SOCK_SEQPACKET) as skt:
- # Prepare socket for use with conmon/container
- skt.connect(self.pseudo_tty.io_socket)
-
- sources = [skt, self.pseudo_tty.stdin]
- while sources:
- logging.debug('Waiting on sources: %s', sources)
- readable, _, _ = select.select(sources, [], [])
-
- if skt in readable:
- data = skt.recv(CONMON_BUFSZ)
- if data:
- # Remove source marker when writing
- os.write(self.pseudo_tty.stdout, data[1:])
- else:
- sources.remove(skt)
-
- if self.pseudo_tty.stdin in readable:
- data = os.read(self.pseudo_tty.stdin, CONMON_BUFSZ)
- if data:
- skt.sendall(data)
-
- if self.pseudo_tty.eot in data:
- sources.clear()
- else:
- sources.remove(self.pseudo_tty.stdin)
- finally:
- if tcoldattr:
- termios.tcsetattr(self.pseudo_tty.stdin, termios.TCSADRAIN,
- tcoldattr)
- signal.signal(signal.SIGWINCH, signal.SIG_DFL)
- return self._refresh(podman)
diff --git a/contrib/python/podman/podman/libs/containers.py b/contrib/python/podman/podman/libs/containers.py
deleted file mode 100644
index 7adecea8f..000000000
--- a/contrib/python/podman/podman/libs/containers.py
+++ /dev/null
@@ -1,248 +0,0 @@
-"""Models for manipulating containers and storage."""
-import collections
-import getpass
-import json
-import logging
-import signal
-import time
-
-from . import fold_keys
-from ._containers_attach import Mixin as AttachMixin
-from ._containers_start import Mixin as StartMixin
-
-
-class Container(AttachMixin, StartMixin, collections.UserDict):
- """Model for a container."""
-
- def __init__(self, client, ident, data, refresh=True):
- """Construct Container Model."""
- super(Container, self).__init__(data)
- self._client = client
- self._id = ident
-
- if refresh:
- with client() as podman:
- self._refresh(podman)
- else:
- for k, v in self.data.items():
- setattr(self, k, v)
- if 'containerrunning' in self.data:
- setattr(self, 'running', self.data['containerrunning'])
- self.data['running'] = self.data['containerrunning']
-
- assert self._id == data['id'],\
- 'Requested container id({}) does not match store id({})'.format(
- self._id, data['id']
- )
-
- def _refresh(self, podman, tries=1):
- try:
- ctnr = podman.GetContainer(self._id)
- except BrokenPipeError:
- logging.debug('Failed GetContainer(%s) try %d/3', self._id, tries)
- if tries > 3:
- raise
- else:
- with self._client() as pman:
- self._refresh(pman, tries + 1)
- else:
- super().update(ctnr['container'])
-
- for k, v in self.data.items():
- setattr(self, k, v)
- if 'containerrunning' in self.data:
- setattr(self, 'running', self.data['containerrunning'])
- self.data['running'] = self.data['containerrunning']
-
- return self
-
- def refresh(self):
- """Refresh status fields for this container."""
- with self._client() as podman:
- return self._refresh(podman)
-
- def processes(self):
- """Show processes running in container."""
- with self._client() as podman:
- results = podman.ListContainerProcesses(self._id)
- yield from results['container']
-
- def changes(self):
- """Retrieve container changes."""
- with self._client() as podman:
- results = podman.ListContainerChanges(self._id)
- return results['container']
-
- def kill(self, sig=signal.SIGTERM, wait=25):
- """Send signal to container.
-
- default signal is signal.SIGTERM.
- wait n of seconds, 0 waits forever.
- """
- with self._client() as podman:
- podman.KillContainer(self._id, sig)
- timeout = time.time() + wait
- while True:
- self._refresh(podman)
- if self.status != 'running': # pylint: disable=no-member
- return self
-
- if wait and timeout < time.time():
- raise TimeoutError()
-
- time.sleep(0.5)
-
- def inspect(self):
- """Retrieve details about containers."""
- with self._client() as podman:
- results = podman.InspectContainer(self._id)
- obj = json.loads(results['container'], object_hook=fold_keys())
- return collections.namedtuple('ContainerInspect', obj.keys())(**obj)
-
- def export(self, target):
- """Export container from store to tarball.
-
- TODO: should there be a compress option, like images?
- """
- with self._client() as podman:
- results = podman.ExportContainer(self._id, target)
- return results['tarfile']
-
- def commit(self, image_name, **kwargs):
- """Create image from container.
-
- Keyword arguments:
- author -- change image's author
- message -- change image's message, docker format only.
- pause -- pause container during commit
- change -- Additional properties to change
-
- Change examples:
- CMD=/usr/bin/zsh
- ENTRYPOINT=/bin/sh date
- ENV=TEST=test_containers.TestContainers.test_commit
- EXPOSE=8888/tcp
- LABEL=unittest=test_commit
- USER=bozo:circus
- VOLUME=/data
- WORKDIR=/data/application
-
- All changes overwrite existing values.
- See inspect() to obtain current settings.
- """
- author = kwargs.get('author', None) or getpass.getuser()
- change = kwargs.get('change', None) or []
- message = kwargs.get('message', None) or ''
- pause = kwargs.get('pause', None) or True
-
- for c in change:
- if c.startswith('LABEL=') and c.count('=') < 2:
- raise ValueError(
- 'LABEL should have the format: LABEL=label=value, not {}'.
- format(c))
-
- with self._client() as podman:
- results = podman.Commit(self._id, image_name, change, author,
- message, pause)
- return results['image']
-
- def stop(self, timeout=25):
- """Stop container, return id on success."""
- with self._client() as podman:
- podman.StopContainer(self._id, timeout)
- return self._refresh(podman)
-
- def remove(self, force=False):
- """Remove container, return id on success.
-
- force=True, stop running container.
- """
- with self._client() as podman:
- results = podman.RemoveContainer(self._id, force)
- return results['container']
-
- def restart(self, timeout=25):
- """Restart container with timeout, return id on success."""
- with self._client() as podman:
- podman.RestartContainer(self._id, timeout)
- return self._refresh(podman)
-
- def rename(self, target): # pylint: disable=unused-argument
- """Rename container, return id on success."""
- with self._client() as podman:
- # TODO: Need arguments
- results = podman.RenameContainer()
- # TODO: fixup objects cached information
- return results['container']
-
- def resize_tty(self, width, height): # pylint: disable=unused-argument
- """Resize container tty."""
- with self._client() as podman:
- # TODO: magic re: attach(), arguments
- podman.ResizeContainerTty()
-
- def pause(self):
- """Pause container, return id on success."""
- with self._client() as podman:
- podman.PauseContainer(self._id)
- return self._refresh(podman)
-
- def unpause(self):
- """Unpause container, return id on success."""
- with self._client() as podman:
- podman.UnpauseContainer(self._id)
- return self._refresh(podman)
-
- def update_container(self, *args, **kwargs): \
- # pylint: disable=unused-argument
- """TODO: Update container..., return id on success."""
- with self._client() as podman:
- podman.UpdateContainer()
- return self._refresh(podman)
-
- def wait(self):
- """Wait for container to finish, return 'returncode'."""
- with self._client() as podman:
- results = podman.WaitContainer(self._id)
- return int(results['exitcode'])
-
- def stats(self):
- """Retrieve resource stats from the container."""
- with self._client() as podman:
- results = podman.GetContainerStats(self._id)
- obj = results['container']
- return collections.namedtuple('StatDetail', obj.keys())(**obj)
-
- def logs(self, *args, **kwargs): # pylint: disable=unused-argument
- """Retrieve container logs."""
- with self._client() as podman:
- results = podman.GetContainerLogs(self._id)
- yield from results['container']
-
-
-class Containers():
- """Model for Containers collection."""
-
- def __init__(self, client):
- """Construct model for Containers collection."""
- self._client = client
-
- def list(self):
- """List of containers in the container store."""
- with self._client() as podman:
- results = podman.ListContainers()
- for cntr in results['containers']:
- yield Container(self._client, cntr['id'], cntr, refresh=False)
-
- def delete_stopped(self):
- """Delete all stopped containers."""
- with self._client() as podman:
- results = podman.DeleteStoppedContainers()
- return results['containers']
-
- def get(self, id_):
- """Retrieve container details from store."""
- with self._client() as podman:
- cntr = podman.GetContainer(id_)
- return Container(self._client, cntr['container']['id'],
- cntr['container'])
diff --git a/contrib/python/podman/podman/libs/errors.py b/contrib/python/podman/podman/libs/errors.py
deleted file mode 100644
index 2821d3597..000000000
--- a/contrib/python/podman/podman/libs/errors.py
+++ /dev/null
@@ -1,77 +0,0 @@
-"""Error classes and wrappers for VarlinkError."""
-from varlink import VarlinkError
-
-
-class VarlinkErrorProxy(VarlinkError):
- """Class to Proxy VarlinkError methods."""
-
- def __init__(self, message, namespaced=False):
- """Construct proxy from Exception."""
- super().__init__(message.as_dict(), namespaced)
- self._message = message
- self.__module__ = 'libpod'
-
- def __getattr__(self, method):
- """Return attribute from proxied Exception."""
- if hasattr(self._message, method):
- return getattr(self._message, method)
-
- try:
- return self._message.parameters()[method]
- except KeyError:
- raise AttributeError('No such attribute: {}'.format(method))
-
-
-class ContainerNotFound(VarlinkErrorProxy):
- """Raised when Client cannot find requested container."""
-
-
-class ImageNotFound(VarlinkErrorProxy):
- """Raised when Client cannot find requested image."""
-
-
-class PodNotFound(VarlinkErrorProxy):
- """Raised when Client cannot find requested image."""
-
-
-class PodContainerError(VarlinkErrorProxy):
- """Raised when a container fails requested pod operation."""
-
-
-class NoContainerRunning(VarlinkErrorProxy):
- """Raised when no container is running in pod."""
-
-
-class NoContainersInPod(VarlinkErrorProxy):
- """Raised when Client fails to connect to runtime."""
-
-
-class ErrorOccurred(VarlinkErrorProxy):
- """Raised when an error occurs during the execution.
-
- See error() to see actual error text.
- """
-
-
-class PodmanError(VarlinkErrorProxy):
- """Raised when Client fails to connect to runtime."""
-
-
-ERROR_MAP = {
- 'io.podman.ContainerNotFound': ContainerNotFound,
- 'io.podman.ErrorOccurred': ErrorOccurred,
- 'io.podman.ImageNotFound': ImageNotFound,
- 'io.podman.NoContainerRunning': NoContainerRunning,
- 'io.podman.NoContainersInPod': NoContainersInPod,
- 'io.podman.PodContainerError': PodContainerError,
- 'io.podman.PodNotFound': PodNotFound,
- 'io.podman.RuntimeError': PodmanError,
-}
-
-
-def error_factory(exception):
- """Map Exceptions to a discrete type."""
- try:
- return ERROR_MAP[exception.error()](exception)
- except KeyError:
- return exception
diff --git a/contrib/python/podman/podman/libs/images.py b/contrib/python/podman/podman/libs/images.py
deleted file mode 100644
index 29ebe2c0f..000000000
--- a/contrib/python/podman/podman/libs/images.py
+++ /dev/null
@@ -1,164 +0,0 @@
-"""Models for manipulating images in/to/from storage."""
-import collections
-import copy
-import json
-import logging
-
-from . import ConfigDict, fold_keys
-from .containers import Container
-
-
-class Image(collections.UserDict):
- """Model for an Image."""
-
- def __init__(self, client, id, data):
- """Construct Image Model."""
- super().__init__(data)
- for k, v in data.items():
- setattr(self, k, v)
-
- self._id = id
- self._client = client
-
- assert self._id == data['id'],\
- 'Requested image id({}) does not match store id({})'.format(
- self._id, data['id']
- )
-
- @staticmethod
- def _split_token(values=None, sep='='):
- if not values:
- return {}
- return {
- k: v1 for k, v1 in (v0.split(sep, 1) for v0 in values)
- }
-
- def create(self, *args, **kwargs):
- """Create container from image.
-
- Pulls defaults from image.inspect()
- """
- details = self.inspect()
-
- config = ConfigDict(image_id=self._id, **kwargs)
- config['command'] = details.config.get('cmd')
- config['env'] = self._split_token(details.config.get('env'))
- config['image'] = copy.deepcopy(details.repotags[0])
- config['labels'] = copy.deepcopy(details.labels)
- config['net_mode'] = 'bridge'
- config['network'] = 'bridge'
-
- logging.debug('Image %s: create config: %s', self._id, config)
- with self._client() as podman:
- id_ = podman.CreateContainer(config)['container']
- cntr = podman.GetContainer(id_)
- return Container(self._client, id_, cntr['container'])
-
- container = create
-
- def export(self, dest, compressed=False):
- """Write image to dest, return id on success."""
- with self._client() as podman:
- results = podman.ExportImage(self._id, dest, compressed)
- return results['image']
-
- def history(self):
- """Retrieve image history."""
- with self._client() as podman:
- for r in podman.HistoryImage(self._id)['history']:
- yield collections.namedtuple('HistoryDetail', r.keys())(**r)
-
- def inspect(self):
- """Retrieve details about image."""
- with self._client() as podman:
- results = podman.InspectImage(self._id)
- obj = json.loads(results['image'], object_hook=fold_keys())
- return collections.namedtuple('ImageInspect', obj.keys())(**obj)
-
- def push(self, target, tlsverify=True):
- """Copy image to target, return id on success."""
- with self._client() as podman:
- results = podman.PushImage(self._id, target, tlsverify)
- return results['image']
-
- def remove(self, force=False):
- """Delete image, return id on success.
-
- force=True, stop any running containers using image.
- """
- with self._client() as podman:
- results = podman.RemoveImage(self._id, force)
- return results['image']
-
- def tag(self, tag):
- """Tag image."""
- with self._client() as podman:
- results = podman.TagImage(self._id, tag)
- return results['image']
-
-
-class Images():
- """Model for Images collection."""
-
- def __init__(self, client):
- """Construct model for Images collection."""
- self._client = client
-
- def list(self):
- """List all images in the libpod image store."""
- with self._client() as podman:
- results = podman.ListImages()
- for img in results['images']:
- yield Image(self._client, img['id'], img)
-
- def build(self, dockerfile=None, tags=None, **kwargs):
- """Build container from image.
-
- See podman-build.1.md for kwargs details.
- """
- if dockerfile is None:
- raise ValueError('"dockerfile" is a required argument.')
- elif not hasattr(dockerfile, '__iter__'):
- raise ValueError('"dockerfile" is required to be an iter.')
-
- if tags is None:
- raise ValueError('"tags" is a required argument.')
- elif not hasattr(tags, '__iter__'):
- raise ValueError('"tags" is required to be an iter.')
-
- config = ConfigDict(dockerfile=dockerfile, tags=tags, **kwargs)
- with self._client() as podman:
- result = podman.BuildImage(config)
- return self.get(result['image']['id']), \
- (line for line in result['image']['logs'])
-
- def delete_unused(self):
- """Delete Images not associated with a container."""
- with self._client() as podman:
- results = podman.DeleteUnusedImages()
- return results['images']
-
- def import_image(self, source, reference, message='', changes=None):
- """Read image tarball from source and save in image store."""
- with self._client() as podman:
- results = podman.ImportImage(source, reference, message, changes)
- return results['image']
-
- def pull(self, source):
- """Copy image from registry to image store."""
- with self._client() as podman:
- results = podman.PullImage(source)
- return results['id']
-
- def search(self, id_, limit=25):
- """Search registries for id."""
- with self._client() as podman:
- results = podman.SearchImage(id_, limit)
- for img in results['images']:
- yield collections.namedtuple('ImageSearch', img.keys())(**img)
-
- def get(self, id_):
- """Get Image from id."""
- with self._client() as podman:
- result = podman.GetImage(id_)
- return Image(self._client, result['image']['id'], result['image'])
diff --git a/contrib/python/podman/podman/libs/pods.py b/contrib/python/podman/podman/libs/pods.py
deleted file mode 100644
index 2a85f2624..000000000
--- a/contrib/python/podman/podman/libs/pods.py
+++ /dev/null
@@ -1,163 +0,0 @@
-"""Model for accessing details of Pods from podman service."""
-import collections
-import json
-import signal
-import time
-
-from . import ConfigDict, FoldedString, fold_keys
-
-
-class Pod(collections.UserDict):
- """Model for a Pod."""
-
- def __init__(self, client, ident, data):
- """Construct Pod model."""
- super().__init__(data)
-
- self._ident = ident
- self._client = client
-
- with client() as podman:
- self._refresh(podman)
-
- def _refresh(self, podman):
- pod = podman.GetPod(self._ident)
- super().update(pod['pod'])
-
- for k, v in self.data.items():
- setattr(self, k, v)
- return self
-
- def inspect(self):
- """Retrieve details about pod."""
- with self._client() as podman:
- results = podman.InspectPod(self._ident)
- obj = json.loads(results['pod'], object_hook=fold_keys())
- obj['id'] = obj['config']['id']
- return collections.namedtuple('PodInspect', obj.keys())(**obj)
-
- def kill(self, signal_=signal.SIGTERM, wait=25):
- """Send signal to all containers in pod.
-
- default signal is signal.SIGTERM.
- wait n of seconds, 0 waits forever.
- """
- with self._client() as podman:
- podman.KillPod(self._ident, signal_)
- timeout = time.time() + wait
- while True:
- # pylint: disable=maybe-no-member
- self._refresh(podman)
- running = FoldedString(self.status)
- if running != 'running':
- break
-
- if wait and timeout < time.time():
- raise TimeoutError()
-
- time.sleep(0.5)
- return self
-
- def pause(self):
- """Pause all containers in the pod."""
- with self._client() as podman:
- podman.PausePod(self._ident)
- return self._refresh(podman)
-
- def refresh(self):
- """Refresh status fields for this pod."""
- with self._client() as podman:
- return self._refresh(podman)
-
- def remove(self, force=False):
- """Remove pod and its containers returning pod ident.
-
- force=True, stop any running container.
- """
- with self._client() as podman:
- results = podman.RemovePod(self._ident, force)
- return results['pod']
-
- def restart(self):
- """Restart all containers in the pod."""
- with self._client() as podman:
- podman.RestartPod(self._ident)
- return self._refresh(podman)
-
- def stats(self):
- """Stats on all containers in the pod."""
- with self._client() as podman:
- results = podman.GetPodStats(self._ident)
- for obj in results['containers']:
- yield collections.namedtuple('ContainerStats', obj.keys())(**obj)
-
- def start(self):
- """Start all containers in the pod."""
- with self._client() as podman:
- podman.StartPod(self._ident)
- return self._refresh(podman)
-
- def stop(self):
- """Stop all containers in the pod."""
- with self._client() as podman:
- podman.StopPod(self._ident)
- return self._refresh(podman)
-
- def top(self):
- """Display stats for all containers."""
- with self._client() as podman:
- results = podman.TopPod(self._ident)
- return results['pod']
-
- def unpause(self):
- """Unpause all containers in the pod."""
- with self._client() as podman:
- podman.UnpausePod(self._ident)
- return self._refresh(podman)
-
- def wait(self):
- """Wait for all containers to exit."""
- with self._client() as podman:
- results = podman.WaitPod(self._ident)
- return results['pod']
-
-
-class Pods():
- """Model for accessing pods."""
-
- def __init__(self, client):
- """Construct pod model."""
- self._client = client
-
- def create(self,
- ident=None,
- cgroupparent=None,
- labels=None,
- share=None,
- infra=False):
- """Create a new empty pod."""
- config = ConfigDict(
- name=ident,
- cgroupParent=cgroupparent,
- labels=labels,
- share=share,
- infra=infra,
- )
-
- with self._client() as podman:
- result = podman.CreatePod(config)
- details = podman.GetPod(result['pod'])
- return Pod(self._client, result['pod'], details['pod'])
-
- def get(self, ident):
- """Get Pod from ident."""
- with self._client() as podman:
- result = podman.GetPod(ident)
- return Pod(self._client, result['pod']['id'], result['pod'])
-
- def list(self):
- """List all pods."""
- with self._client() as podman:
- results = podman.ListPods()
- for pod in results['pods']:
- yield Pod(self._client, pod['id'], pod)
diff --git a/contrib/python/podman/podman/libs/system.py b/contrib/python/podman/podman/libs/system.py
deleted file mode 100644
index c611341e4..000000000
--- a/contrib/python/podman/podman/libs/system.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""Models for accessing details from varlink server."""
-import collections
-
-import pkg_resources
-
-from . import cached_property
-
-
-class System():
- """Model for accessing system resources."""
-
- def __init__(self, client):
- """Construct system model."""
- self._client = client
-
- @cached_property
- def versions(self):
- """Access versions."""
- with self._client() as podman:
- vers = podman.GetVersion()['version']
-
- client = '0.0.0'
- try:
- client = pkg_resources.get_distribution('podman').version
- except Exception: # pylint: disable=broad-except
- pass
- vers['client_version'] = client
- return collections.namedtuple('Version', vers.keys())(**vers)
-
- def info(self):
- """Return podman info."""
- with self._client() as podman:
- info = podman.GetInfo()['info']
- return collections.namedtuple('Info', info.keys())(**info)
-
- def ping(self):
- """Return True if server awake."""
- with self._client() as podman:
- response = podman.Ping()
- return response['ping']['message'] == 'OK'
diff --git a/contrib/python/podman/podman/libs/tunnel.py b/contrib/python/podman/podman/libs/tunnel.py
deleted file mode 100644
index ac1dff594..000000000
--- a/contrib/python/podman/podman/libs/tunnel.py
+++ /dev/null
@@ -1,190 +0,0 @@
-"""Cache for SSH tunnels."""
-import collections
-import getpass
-import logging
-import os
-import subprocess
-import threading
-import time
-import weakref
-from contextlib import suppress
-
-import psutil
-
-Context = collections.namedtuple('Context', (
- 'uri',
- 'interface',
- 'local_socket',
- 'remote_socket',
- 'username',
- 'hostname',
- 'port',
- 'identity_file',
-))
-Context.__new__.__defaults__ = (None, ) * len(Context._fields)
-
-
-class Portal(collections.MutableMapping):
- """Expiring container for tunnels."""
-
- def __init__(self, sweap=25):
- """Construct portal, reap tunnels every sweap seconds."""
- self.data = collections.OrderedDict()
- self.sweap = sweap
- self.ttl = sweap * 2
- self.lock = threading.RLock()
- self._schedule_reaper()
-
- def __getitem__(self, key):
- """Given uri return tunnel and update TTL."""
- with self.lock:
- value, _ = self.data[key]
- self.data[key] = (value, time.time() + self.ttl)
- self.data.move_to_end(key)
- return value
-
- def __setitem__(self, key, value):
- """Store given tunnel keyed with uri."""
- if not isinstance(value, Tunnel):
- raise ValueError('Portals only support Tunnels.')
-
- with self.lock:
- self.data[key] = (value, time.time() + self.ttl)
- self.data.move_to_end(key)
-
- def __delitem__(self, key):
- """Remove and close tunnel from portal."""
- with self.lock:
- value, _ = self.data[key]
- del self.data[key]
- value.close()
- del value
-
- def __iter__(self):
- """Iterate tunnels."""
- with self.lock:
- values = self.data.values()
-
- for tunnel, _ in values:
- yield tunnel
-
- def __len__(self):
- """Return number of tunnels in portal."""
- with self.lock:
- return len(self.data)
-
- def _schedule_reaper(self):
- timer = threading.Timer(interval=self.sweap, function=self.reap)
- timer.setName('PortalReaper')
- timer.setDaemon(True)
- timer.start()
-
- def reap(self):
- """Remove tunnels who's TTL has expired."""
- now = time.time()
- with self.lock:
- reaped_data = self.data.copy()
- for entry in reaped_data.items():
- if entry[1][1] < now:
- del self.data[entry[0]]
- else:
- # StopIteration as soon as possible
- break
- self._schedule_reaper()
-
-
-class Tunnel():
- """SSH tunnel."""
-
- def __init__(self, context):
- """Construct Tunnel."""
- self.context = context
- self._closed = True
-
- @property
- def closed(self):
- """Is tunnel closed."""
- return self._closed
-
- def bore(self):
- """Create SSH tunnel from given context."""
- cmd = ['ssh', '-fNT']
-
- if logging.getLogger().getEffectiveLevel() == logging.DEBUG:
- cmd.append('-v')
- else:
- cmd.append('-q')
-
- if self.context.port:
- cmd.extend(('-p', str(self.context.port)))
-
- cmd.extend(('-L', '{}:{}'.format(self.context.local_socket,
- self.context.remote_socket)))
- if self.context.identity_file:
- cmd.extend(('-i', self.context.identity_file))
-
- cmd.append('{}@{}'.format(self.context.username,
- self.context.hostname))
-
- logging.debug('Opening tunnel "%s", cmd "%s"', self.context.uri,
- ' '.join(cmd))
-
- tunnel = subprocess.Popen(cmd, close_fds=True)
- # The return value of Popen() has no long term value as that process
- # has already exited by the time control is returned here. This is a
- # side effect of the -f option. wait() will be called to clean up
- # resources.
- for _ in range(300):
- # TODO: Make timeout configurable
- if os.path.exists(self.context.local_socket) \
- or tunnel.returncode is not None:
- break
- with suppress(subprocess.TimeoutExpired):
- # waiting for either socket to be created
- # or first child to exit
- tunnel.wait(0.5)
- else:
- raise TimeoutError(
- 'Failed to create tunnel "{}", using: "{}"'.format(
- self.context.uri, ' '.join(cmd)))
- if tunnel.returncode is not None and tunnel.returncode != 0:
- raise subprocess.CalledProcessError(tunnel.returncode,
- ' '.join(cmd))
- tunnel.wait()
-
- self._closed = False
- weakref.finalize(self, self.close)
- return self
-
- def close(self):
- """Close SSH tunnel."""
- logging.debug('Closing tunnel "%s"', self.context.uri)
-
- if self._closed:
- return
-
- # Find all ssh instances for user with uri tunnel the hard way...
- targets = [
- p
- for p in psutil.process_iter(attrs=['name', 'username', 'cmdline'])
- if p.info['username'] == getpass.getuser()
- and p.info['name'] == 'ssh'
- and self.context.local_socket in ' '.join(p.info['cmdline'])
- ] # yapf: disable
-
- # ask nicely for ssh to quit, reap results
- for proc in targets:
- proc.terminate()
- _, alive = psutil.wait_procs(targets, timeout=300)
-
- # kill off the uncooperative, then report any stragglers
- for proc in alive:
- proc.kill()
- _, alive = psutil.wait_procs(targets, timeout=300)
-
- for proc in alive:
- logging.info('process %d survived SIGKILL, giving up.', proc.pid)
-
- with suppress(OSError):
- os.remove(self.context.local_socket)
- self._closed = True
diff --git a/contrib/python/podman/requirements.txt b/contrib/python/podman/requirements.txt
deleted file mode 100644
index 1caf5e286..000000000
--- a/contrib/python/podman/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-psutil
-python-dateutil
-setuptools>=39
-varlink
diff --git a/contrib/python/podman/setup.py b/contrib/python/podman/setup.py
deleted file mode 100755
index 9d54bb3ac..000000000
--- a/contrib/python/podman/setup.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env python
-
-import os
-
-from setuptools import find_packages, setup
-
-
-root = os.path.abspath(os.path.dirname(__file__))
-
-with open(os.path.join(root, 'README.md')) as me:
- readme = me.read()
-
-with open(os.path.join(root, 'requirements.txt')) as r:
- requirements = r.read().splitlines()
-
-
-setup(
- name='podman',
- version=os.environ.get('PODMAN_VERSION', '0.0.0'),
- description='A library for communicating with a Podman server',
- author='Jhon Honce',
- author_email='jhonce@redhat.com',
- license='Apache Software License',
- long_description=readme,
- include_package_data=True,
- install_requires=requirements,
- packages=find_packages(exclude=['test']),
- python_requires='>=3',
- zip_safe=True,
- url='http://github.com/containers/libpod',
- keywords='varlink libpod podman',
- classifiers=[
- 'Development Status :: 3 - Alpha',
- 'Intended Audience :: Developers',
- 'License :: OSI Approved :: Apache Software License',
- 'Programming Language :: Python :: 3.4',
- 'Topic :: Software Development',
- ])
diff --git a/contrib/python/podman/test/podman_testcase.py b/contrib/python/podman/test/podman_testcase.py
deleted file mode 100644
index da73c1024..000000000
--- a/contrib/python/podman/test/podman_testcase.py
+++ /dev/null
@@ -1,112 +0,0 @@
-"""Base for podman tests."""
-import contextlib
-import functools
-import itertools
-import os
-import subprocess
-import time
-import unittest
-
-from varlink import VarlinkError
-
-MethodNotImplemented = 'org.varlink.service.MethodNotImplemented'
-
-
-class PodmanTestCase(unittest.TestCase):
- """Hide the sausage making of initializing storage."""
-
- @classmethod
- def setUpClass(cls):
- """Fixture to setup podman test case."""
- if hasattr(PodmanTestCase, 'alpine_process'):
- PodmanTestCase.tearDownClass()
-
- def run_cmd(*args):
- cmd = list(itertools.chain(*args))
- try:
- pid = subprocess.Popen(
- cmd,
- close_fds=True,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- out, err = pid.communicate()
- except OSError as e:
- print('{}: {}({})'.format(cmd, e.strerror, e.returncode))
- except ValueError as e:
- print('{}: {}'.format(cmd, e.message))
- raise
- else:
- return out.strip()
-
- tmpdir = os.environ.get('TMPDIR', '/tmp')
- podman_args = [
- '--storage-driver=vfs',
- '--cgroup-manager=cgroupfs',
- '--root={}/crio'.format(tmpdir),
- '--runroot={}/crio-run'.format(tmpdir),
- '--cni-config-dir={}/cni/net.d'.format(tmpdir),
- ]
-
- run_podman = functools.partial(run_cmd, ['podman'], podman_args)
-
- id = run_podman(['pull', 'alpine'])
- setattr(PodmanTestCase, 'alpine_id', id)
-
- run_podman(['pull', 'busybox'])
- run_podman(['images'])
-
- run_cmd(['rm', '-f', '{}/alpine_gold.tar'.format(tmpdir)])
- run_podman([
- 'save', '--output', '{}/alpine_gold.tar'.format(tmpdir), 'alpine'
- ])
-
- PodmanTestCase.alpine_log = open(
- os.path.join('/tmp/', 'alpine.log'), 'w')
-
- cmd = ['podman']
- cmd.extend(podman_args)
- # cmd.extend(['run', '-d', 'alpine', 'sleep', '500'])
- cmd.extend(['run', '-dt', 'alpine', '/bin/sh'])
- PodmanTestCase.alpine_process = subprocess.Popen(
- cmd,
- stdout=PodmanTestCase.alpine_log,
- stderr=subprocess.STDOUT,
- )
-
- PodmanTestCase.busybox_log = open(
- os.path.join('/tmp/', 'busybox.log'), 'w')
-
- cmd = ['podman']
- cmd.extend(podman_args)
- cmd.extend(['create', 'busybox'])
- PodmanTestCase.busybox_process = subprocess.Popen(
- cmd,
- stdout=PodmanTestCase.busybox_log,
- stderr=subprocess.STDOUT,
- )
- # give podman time to start ctnr
- time.sleep(2)
-
- # Close our handle of file
- PodmanTestCase.alpine_log.close()
- PodmanTestCase.busybox_log.close()
-
- @classmethod
- def tearDownClass(cls):
- """Fixture to clean up after podman unittest."""
- try:
- PodmanTestCase.alpine_process.kill()
- assert 0 == PodmanTestCase.alpine_process.wait(500)
- delattr(PodmanTestCase, 'alpine_process')
-
- PodmanTestCase.busybox_process.kill()
- assert 0 == PodmanTestCase.busybox_process.wait(500)
- except Exception as e:
- print('Exception: {}'.format(e))
- raise
-
- @contextlib.contextmanager
- def assertRaisesNotImplemented(self):
- """Sugar for unimplemented varlink methods."""
- with self.assertRaisesRegex(VarlinkError, MethodNotImplemented):
- yield
diff --git a/contrib/python/podman/test/retry_decorator.py b/contrib/python/podman/test/retry_decorator.py
deleted file mode 100644
index 31e06f382..000000000
--- a/contrib/python/podman/test/retry_decorator.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""Decorator to retry failed method."""
-import functools
-import time
-
-
-def retry(ExceptionToCheck, tries=4, delay=3, backoff=2, print_=None):
- """Retry calling the decorated function using an exponential backoff.
-
- Specialized for our unittests
- from:
- http://www.saltycrane.com/blog/2009/11/trying-out-retry-decorator-python/
- original from: http://wiki.python.org/moin/PythonDecoratorLibrary#Retry
-
- :param ExceptionToCheck: the exception to check. may be a tuple of
- exceptions to check
- :type ExceptionToCheck: Exception or tuple
- :param tries: number of times to try (not retry) before giving up
- :type tries: int
- :param delay: initial delay between retries in seconds
- :type delay: int
- :param backoff: backoff multiplier e.g. value of 2 will double the delay
- each retry
- :type backoff: int
- """
- def deco_retry(f):
- @functools.wraps(f)
- def f_retry(*args, **kwargs):
- mtries, mdelay = tries, delay
- while mtries > 1:
- try:
- return f(*args, **kwargs)
- except ExceptionToCheck as e:
- if print_:
- print_('{}, Retrying in {} seconds...'.format(
- str(e), mdelay))
- time.sleep(mdelay)
- mtries -= 1
- mdelay *= backoff
- return f(*args, **kwargs)
-
- return f_retry # true decorator
-
- return deco_retry
diff --git a/contrib/python/podman/test/test_client.py b/contrib/python/podman/test/test_client.py
deleted file mode 100644
index 3fc6d39dc..000000000
--- a/contrib/python/podman/test/test_client.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from __future__ import absolute_import
-
-import unittest
-from unittest.mock import patch
-
-import podman
-from podman.client import BaseClient, Client, LocalClient, RemoteClient
-
-
-class TestClient(unittest.TestCase):
- def setUp(self):
- pass
-
- @patch('podman.libs.system.System.ping', return_value=True)
- def test_local(self, mock_ping):
- p = Client(
- uri='unix:/run/podman',
- interface='io.podman',
- )
-
- self.assertIsInstance(p._client, LocalClient)
- self.assertIsInstance(p._client, BaseClient)
-
- mock_ping.assert_called_once_with()
-
- @patch('podman.libs.system.System.ping', return_value=True)
- def test_remote(self, mock_ping):
- p = Client(
- uri='unix:/run/podman',
- interface='io.podman',
- remote_uri='ssh://user@hostname/run/podman/podman',
- identity_file='~/.ssh/id_rsa')
-
- self.assertIsInstance(p._client, BaseClient)
- mock_ping.assert_called_once_with()
diff --git a/contrib/python/podman/test/test_containers.py b/contrib/python/podman/test/test_containers.py
deleted file mode 100644
index 5201956e8..000000000
--- a/contrib/python/podman/test/test_containers.py
+++ /dev/null
@@ -1,244 +0,0 @@
-import os
-import signal
-import unittest
-from pathlib import Path
-from test.podman_testcase import PodmanTestCase
-from test.retry_decorator import retry
-
-import podman
-
-
-class TestContainers(PodmanTestCase):
- @classmethod
- def setUpClass(cls):
- super().setUpClass()
-
- @classmethod
- def tearDownClass(cls):
- super().tearDownClass()
-
- def setUp(self):
- self.tmpdir = os.environ['TMPDIR']
- self.host = os.environ['PODMAN_HOST']
-
- self.pclient = podman.Client(self.host)
- self.loadCache()
-
- def tearDown(self):
- pass
-
- def loadCache(self):
- self.containers = list(self.pclient.containers.list())
-
- self.alpine_ctnr = next(
- iter([c for c in self.containers if 'alpine' in c['image']] or []),
- None)
-
- if self.alpine_ctnr and self.alpine_ctnr.status != 'running':
- self.alpine_ctnr.start()
-
- def test_list(self):
- self.assertGreaterEqual(len(self.containers), 2)
- self.assertIsNotNone(self.alpine_ctnr)
- self.assertIn('alpine', self.alpine_ctnr.image)
-
- def test_delete_stopped(self):
- before = len(self.containers)
-
- self.alpine_ctnr.stop()
- target = self.alpine_ctnr.id
- actual = self.pclient.containers.delete_stopped()
- self.assertIn(target, actual)
-
- self.loadCache()
- after = len(self.containers)
-
- self.assertLess(after, before)
- TestContainers.setUpClass()
-
- def test_get(self):
- actual = self.pclient.containers.get(self.alpine_ctnr.id)
- for k in ['id', 'status', 'ports']:
- self.assertEqual(actual[k], self.alpine_ctnr[k])
-
- with self.assertRaises(podman.ContainerNotFound):
- self.pclient.containers.get("bozo")
-
- def test_attach(self):
- # StringIO does not support fileno() so we had to go old school
- input = os.path.join(self.tmpdir, 'test_attach.stdin')
- output = os.path.join(self.tmpdir, 'test_attach.stdout')
-
- with open(input, 'w+') as mock_in, open(output, 'w+') as mock_out:
- # double quote is indeed in the expected place
- mock_in.write('echo H"ello, World"; exit\n')
- mock_in.seek(0, 0)
-
- ctnr = self.pclient.images.get(self.alpine_ctnr.image).container(
- detach=True, tty=True)
- ctnr.attach(stdin=mock_in.fileno(), stdout=mock_out.fileno())
- ctnr.start()
-
- mock_out.flush()
- mock_out.seek(0, 0)
- output = mock_out.read()
- self.assertIn('Hello', output)
-
- ctnr.remove(force=True)
-
- def test_processes(self):
- actual = list(self.alpine_ctnr.processes())
- self.assertGreaterEqual(len(actual), 2)
-
- def test_start_stop_wait(self):
- ctnr = self.alpine_ctnr.stop()
- self.assertFalse(ctnr['running'])
-
- ctnr.start()
- self.assertTrue(ctnr.running)
-
- ctnr.stop()
- self.assertFalse(ctnr['containerrunning'])
-
- actual = ctnr.wait()
- self.assertGreaterEqual(actual, 0)
-
- def test_changes(self):
- actual = self.alpine_ctnr.changes()
-
- self.assertListEqual(
- sorted(['changed', 'added', 'deleted']), sorted(
- list(actual.keys())))
-
- # TODO: brittle, depends on knowing history of ctnr
- self.assertGreaterEqual(len(actual['changed']), 0)
- self.assertGreaterEqual(len(actual['added']), 0)
- self.assertEqual(len(actual['deleted']), 0)
-
- def test_kill(self):
- self.assertTrue(self.alpine_ctnr.running)
- ctnr = self.alpine_ctnr.kill(signal.SIGKILL)
- self.assertFalse(ctnr.running)
-
- def test_inspect(self):
- actual = self.alpine_ctnr.inspect()
- self.assertEqual(actual.id, self.alpine_ctnr.id)
- # TODO: Datetime values from inspect missing offset in CI instance
- # self.assertEqual(
- # datetime_parse(actual.created),
- # datetime_parse(self.alpine_ctnr.createdat))
-
- def test_export(self):
- target = os.path.join(self.tmpdir, 'alpine_export_ctnr.tar')
-
- actual = self.alpine_ctnr.export(target)
- self.assertEqual(actual, target)
- self.assertTrue(os.path.isfile(target))
- self.assertGreater(os.path.getsize(target), 0)
-
- def test_commit(self):
- # TODO: Test for STOPSIGNAL when supported by OCI
- # TODO: Test for message when supported by OCI
- details = self.pclient.images.get(self.alpine_ctnr.image).inspect()
- changes = ['ENV=' + i for i in details.config['env']]
- changes.append('CMD=/usr/bin/zsh')
- changes.append('ENTRYPOINT=/bin/sh date')
- changes.append('ENV=TEST=test_containers.TestContainers.test_commit')
- changes.append('EXPOSE=80')
- changes.append('EXPOSE=8888')
- changes.append('LABEL=unittest=test_commit')
- changes.append('USER=bozo:circus')
- changes.append('VOLUME=/data')
- changes.append('WORKDIR=/data/application')
-
- id = self.alpine_ctnr.commit(
- 'alpine3', author='Bozo the clown', change=changes, pause=True)
- img = self.pclient.images.get(id)
- self.assertIsNotNone(img)
-
- details = img.inspect()
- self.assertEqual(details.author, 'Bozo the clown')
- self.assertListEqual(['/usr/bin/zsh'], details.config['cmd'])
- self.assertListEqual(['/bin/sh date'],
- details.config['entrypoint'])
- self.assertIn('TEST=test_containers.TestContainers.test_commit',
- details.config['env'])
- self.assertTrue(
- [e for e in details.config['env'] if 'PATH=' in e])
- self.assertDictEqual({
- '80': {},
- '8888': {},
- }, details.config['exposedports'])
- self.assertDictEqual({'unittest': 'test_commit'}, details.labels)
- self.assertEqual('bozo:circus', details.config['user'])
- self.assertEqual({'/data': {}}, details.config['volumes'])
- self.assertEqual('/data/application',
- details.config['workingdir'])
-
- def test_remove(self):
- before = len(self.containers)
-
- with self.assertRaises(podman.ErrorOccurred):
- self.alpine_ctnr.remove()
-
- self.assertEqual(
- self.alpine_ctnr.id, self.alpine_ctnr.remove(force=True))
- self.loadCache()
- after = len(self.containers)
-
- self.assertLess(after, before)
- TestContainers.setUpClass()
-
- def test_restart(self):
- self.assertTrue(self.alpine_ctnr.running)
- before = self.alpine_ctnr.runningfor
-
- ctnr = self.alpine_ctnr.restart()
- self.assertTrue(ctnr.running)
-
- after = self.alpine_ctnr.runningfor
-
- # TODO: restore check when restart zeros counter
- # self.assertLess(after, before)
-
- def test_rename(self):
- with self.assertRaisesNotImplemented():
- self.alpine_ctnr.rename('new_alpine')
-
- def test_resize_tty(self):
- with self.assertRaisesNotImplemented():
- self.alpine_ctnr.resize_tty(132, 43)
-
- def test_pause_unpause(self):
- self.assertTrue(self.alpine_ctnr.running)
-
- ctnr = self.alpine_ctnr.pause()
- self.assertEqual(ctnr.status, 'paused')
-
- ctnr = self.alpine_ctnr.unpause()
- self.assertTrue(ctnr.running)
- self.assertTrue(ctnr.status, 'running')
-
- # creating cgoups can be flakey
- @retry(podman.libs.errors.ErrorOccurred, tries=4, delay=2, print_=print)
- def test_stats(self):
- try:
- self.assertTrue(self.alpine_ctnr.running)
-
- actual = self.alpine_ctnr.stats()
- self.assertEqual(self.alpine_ctnr.id, actual.id)
- self.assertEqual(self.alpine_ctnr.names, actual.name)
- except Exception:
- info = Path('/proc/self/mountinfo')
- with info.open() as fd:
- print('{} {}'.format(self.alpine_ctnr.id, info))
- print(fd.read())
-
- def test_logs(self):
- self.assertTrue(self.alpine_ctnr.running)
- actual = list(self.alpine_ctnr.logs())
- self.assertIsNotNone(actual)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/contrib/python/podman/test/test_images.py b/contrib/python/podman/test/test_images.py
deleted file mode 100644
index af6d4741e..000000000
--- a/contrib/python/podman/test/test_images.py
+++ /dev/null
@@ -1,174 +0,0 @@
-import itertools
-import os
-import unittest
-from collections import Counter
-from datetime import datetime, timezone
-from test.podman_testcase import PodmanTestCase
-
-import podman
-from podman import FoldedString
-
-
-class TestImages(PodmanTestCase):
- @classmethod
- def setUpClass(cls):
- super().setUpClass()
-
- @classmethod
- def tearDownClass(cls):
- super().tearDownClass()
-
- def setUp(self):
- self.tmpdir = os.environ['TMPDIR']
- self.host = os.environ['PODMAN_HOST']
-
- self.pclient = podman.Client(self.host)
- self.images = self.loadCache()
-
- def tearDown(self):
- pass
-
- def loadCache(self):
- with podman.Client(self.host) as pclient:
- self.images = list(pclient.images.list())
-
- self.alpine_image = next(
- iter([
- i for i in self.images
- if 'docker.io/library/alpine:latest' in i['repoTags']
- ] or []), None)
-
- return self.images
-
- def test_list(self):
- actual = self.loadCache()
- self.assertGreaterEqual(len(actual), 2)
- self.assertIsNotNone(self.alpine_image)
-
- @unittest.skip('TODO: missing buildah json file')
- def test_build(self):
- path = os.path.join(self.tmpdir, 'ctnr', 'Dockerfile')
- img, logs = self.pclient.images.build(
- dockerfile=[path],
- tags=['alpine-unittest'],
- )
- self.assertIsNotNone(img)
- self.assertIn('localhost/alpine-unittest:latest', img.repoTags)
- self.assertLess(
- podman.datetime_parse(img.created), datetime.now(timezone.utc))
- self.assertTrue(logs)
-
- def test_create(self):
- img_details = self.alpine_image.inspect()
-
- actual = self.alpine_image.container(command=['sleep', '1h'])
- self.assertIsNotNone(actual)
- self.assertEqual(FoldedString(actual.status), 'configured')
-
- ctnr = actual.start()
- self.assertEqual(FoldedString(ctnr.status), 'running')
-
- ctnr_details = ctnr.inspect()
- for e in img_details.config['env']:
- self.assertIn(e, ctnr_details.config['env'])
-
- def test_export(self):
- path = os.path.join(self.tmpdir, 'alpine_export.tar')
- target = 'oci-archive:{}:latest'.format(path)
-
- actual = self.alpine_image.export(target, False)
- self.assertTrue(actual)
- self.assertTrue(os.path.isfile(path))
-
- def test_get(self):
- actual = self.pclient.images.get(self.alpine_image.id)
- self.assertEqual(actual, self.alpine_image)
-
- def test_history(self):
- records = []
- bucket = Counter()
- for record in self.alpine_image.history():
- self.assertIn(record.id, (self.alpine_image.id, '<missing>'))
- bucket[record.id] += 1
- records.append(record)
-
- self.assertGreater(bucket[self.alpine_image.id], 0)
- self.assertEqual(sum(bucket.values()), len(records))
-
- def test_inspect(self):
- actual = self.alpine_image.inspect()
- self.assertEqual(actual.id, self.alpine_image.id)
-
- def test_push(self):
- path = '{}/alpine_push'.format(self.tmpdir)
- target = 'dir:{}'.format(path)
- self.alpine_image.push(target, tlsverify=False)
-
- self.assertTrue(os.path.isfile(os.path.join(path, 'manifest.json')))
- self.assertTrue(os.path.isfile(os.path.join(path, 'version')))
-
- def test_tag(self):
- self.assertEqual(self.alpine_image.id,
- self.alpine_image.tag('alpine:fubar'))
- self.loadCache()
- self.assertIn('localhost/alpine:fubar', self.alpine_image.repoTags)
-
- def test_remove(self):
- before = self.loadCache()
-
- # assertRaises doesn't follow the import name :(
- with self.assertRaises(podman.ErrorOccurred):
- self.alpine_image.remove()
-
- actual = self.alpine_image.remove(force=True)
- self.assertEqual(self.alpine_image.id, actual)
- after = self.loadCache()
-
- self.assertLess(len(after), len(before))
- TestImages.setUpClass()
- self.loadCache()
-
- def test_import_delete_unused(self):
- before = self.loadCache()
- # create unused image, so we have something to delete
- source = os.path.join(self.tmpdir, 'alpine_gold.tar')
- new_img = self.pclient.images.import_image(
- source,
- 'alpine2:latest',
- 'unittest.test_import',
- )
- after = self.loadCache()
-
- self.assertEqual(len(before) + 1, len(after))
- self.assertIsNotNone(
- next(iter([i for i in after if new_img in i['id']] or []), None))
-
- actual = self.pclient.images.delete_unused()
- self.assertIn(new_img, actual)
-
- after = self.loadCache()
- self.assertGreaterEqual(len(before), len(after))
-
- TestImages.setUpClass()
- self.loadCache()
-
- def test_pull(self):
- before = self.loadCache()
- actual = self.pclient.images.pull('prom/busybox:latest')
- after = self.loadCache()
-
- self.assertEqual(len(before) + 1, len(after))
- self.assertIsNotNone(
- next(iter([i for i in after if actual in i['id']] or []), None))
-
- def test_search(self):
- actual = self.pclient.images.search('alpine', 25)
- names, length = itertools.tee(actual)
-
- for img in names:
- self.assertIn('alpine', img.name)
- self.assertTrue(0 < len(list(length)) <= 25)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/contrib/python/podman/test/test_libs.py b/contrib/python/podman/test/test_libs.py
deleted file mode 100644
index 202bed1d8..000000000
--- a/contrib/python/podman/test/test_libs.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import datetime
-import unittest
-
-import podman
-
-
-class TestLibs(unittest.TestCase):
- def setUp(self):
- pass
-
- def tearDown(self):
- pass
-
- def test_parse(self):
- expected = datetime.datetime.strptime(
- '2018-05-08T14:12:53.797795-0700', '%Y-%m-%dT%H:%M:%S.%f%z')
- for v in [
- '2018-05-08T14:12:53.797795191-07:00',
- '2018-05-08T14:12:53.797795-07:00',
- '2018-05-08T14:12:53.797795-0700',
- '2018-05-08 14:12:53.797795191 -0700 MST',
- ]:
- actual = podman.datetime_parse(v)
- self.assertEqual(actual, expected)
-
- expected = datetime.datetime.strptime(
- '2018-05-08T14:12:53.797795-0000', '%Y-%m-%dT%H:%M:%S.%f%z')
- for v in [
- '2018-05-08T14:12:53.797795191Z',
- '2018-05-08T14:12:53.797795191z',
- ]:
- actual = podman.datetime_parse(v)
- self.assertEqual(actual, expected)
-
- actual = podman.datetime_parse(datetime.datetime.now().isoformat())
- self.assertIsNotNone(actual)
-
- def test_parse_fail(self):
- for v in [
- 'There is no time here.',
- ]:
- with self.assertRaises(ValueError):
- podman.datetime_parse(v)
-
- def test_format(self):
- expected = '2018-05-08T18:24:52.753227-07:00'
- dt = podman.datetime_parse(expected)
- actual = podman.datetime_format(dt)
- self.assertEqual(actual, expected)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/contrib/python/podman/test/test_pods_ctnrs.py b/contrib/python/podman/test/test_pods_ctnrs.py
deleted file mode 100644
index 009e30720..000000000
--- a/contrib/python/podman/test/test_pods_ctnrs.py
+++ /dev/null
@@ -1,66 +0,0 @@
-import os
-from test.podman_testcase import PodmanTestCase
-
-import podman
-from podman import FoldedString
-
-pod = None
-
-
-class TestPodsCtnrs(PodmanTestCase):
- @classmethod
- def setUpClass(cls):
- # Populate storage
- super().setUpClass()
-
- @classmethod
- def tearDownClass(cls):
- super().tearDownClass()
-
- def setUp(self):
- self.tmpdir = os.environ['TMPDIR']
- self.host = os.environ['PODMAN_HOST']
-
- self.pclient = podman.Client(self.host)
-
- def test_010_populate(self):
- global pod
-
- pod = self.pclient.pods.create('pod1')
- self.assertEqual('pod1', pod.name)
-
- img = self.pclient.images.get('docker.io/library/alpine:latest')
- ctnr = img.container(pod=pod.id)
-
- pod.refresh()
- self.assertEqual('1', pod.numberofcontainers)
- self.assertEqual(ctnr.id, pod.containersinfo[0]['id'])
-
- def test_015_one_shot(self):
- global pod
-
- details = pod.inspect()
- state = FoldedString(details.containers[0]['state'])
- self.assertEqual(state, 'configured')
-
- pod = pod.start()
- status = FoldedString(pod.containersinfo[0]['status'])
- # Race on whether container is still running or finished
- self.assertIn(status, ('stopped', 'exited', 'running'))
-
- pod = pod.restart()
- status = FoldedString(pod.containersinfo[0]['status'])
- self.assertIn(status, ('stopped', 'exited', 'running'))
-
- # Pod kill is broken, so use stop for now
- killed = pod.stop()
- self.assertEqual(pod, killed)
-
- def test_999_remove(self):
- global pod
-
- ident = pod.remove(force=True)
- self.assertEqual(ident, pod.id)
-
- with self.assertRaises(StopIteration):
- next(self.pclient.pods.list())
diff --git a/contrib/python/podman/test/test_pods_no_ctnrs.py b/contrib/python/podman/test/test_pods_no_ctnrs.py
deleted file mode 100644
index 48b4f74e4..000000000
--- a/contrib/python/podman/test/test_pods_no_ctnrs.py
+++ /dev/null
@@ -1,94 +0,0 @@
-import os
-import unittest
-
-import podman
-import varlink
-
-ident = None
-pod = None
-
-
-class TestPodsNoCtnrs(unittest.TestCase):
- def setUp(self):
- self.tmpdir = os.environ['TMPDIR']
- self.host = os.environ['PODMAN_HOST']
-
- self.pclient = podman.Client(self.host)
-
- def test_010_create(self):
- global ident
-
- actual = self.pclient.pods.create('pod0')
- self.assertIsNotNone(actual)
- ident = actual.id
-
- def test_015_list(self):
- global ident, pod
-
- actual = next(self.pclient.pods.list())
- self.assertEqual('pod0', actual.name)
- self.assertEqual(ident, actual.id)
- self.assertEqual('Created', actual.status)
- self.assertEqual('0', actual.numberofcontainers)
- self.assertFalse(actual.containersinfo)
- pod = actual
-
- def test_020_get(self):
- global ident, pod
-
- actual = self.pclient.pods.get(pod.id)
- self.assertEqual('pod0', actual.name)
- self.assertEqual(ident, actual.id)
- self.assertEqual('Created', actual.status)
- self.assertEqual('0', actual.numberofcontainers)
- self.assertFalse(actual.containersinfo)
-
- def test_025_inspect(self):
- global ident, pod
-
- details = pod.inspect()
- self.assertEqual(ident, details.id)
- self.assertEqual('pod0', details.config['name'])
- self.assertIsNone(details.containers)
-
- def test_030_ident_no_ctnrs(self):
- global ident, pod
-
- actual = pod.kill()
- self.assertEqual(pod, actual)
-
- actual = pod.pause()
- self.assertEqual(pod, actual)
-
- actual = pod.unpause()
- self.assertEqual(pod, actual)
-
- actual = pod.stop()
- self.assertEqual(pod, actual)
-
- def test_045_raises_no_ctnrs(self):
- global ident, pod
-
- with self.assertRaises(podman.NoContainersInPod):
- pod.start()
-
- with self.assertRaises(podman.NoContainersInPod):
- pod.restart()
-
- with self.assertRaises(podman.NoContainerRunning):
- next(pod.stats())
-
- with self.assertRaises(varlink.error.MethodNotImplemented):
- pod.top()
-
- with self.assertRaises(varlink.error.MethodNotImplemented):
- pod.wait()
-
- def test_999_remove(self):
- global ident, pod
-
- actual = pod.remove()
- self.assertEqual(ident, actual)
-
- with self.assertRaises(StopIteration):
- next(self.pclient.pods.list())
diff --git a/contrib/python/podman/test/test_runner.sh b/contrib/python/podman/test/test_runner.sh
deleted file mode 100755
index 651b2e74f..000000000
--- a/contrib/python/podman/test/test_runner.sh
+++ /dev/null
@@ -1,156 +0,0 @@
-#!/bin/bash
-
-# podman needs to play some games with resources
-if [[ $(id -u) != 0 ]]; then
- echo >&2 $0 must be run as root.
- exit 2
-fi
-
-# setup path to find new binaries _NOT_ system binaries
-if [[ ! -x ../../../bin/podman ]]; then
- echo 1>&2 Cannot find podman binary from libpod root directory. Run \"make binaries\"
- exit 1
-fi
-export PATH=../../../bin:$PATH
-
-function usage {
- echo 1>&2 $0 '[-v] [-h] [test.<TestCase>|test.<TestCase>.<step>]'
-}
-
-while getopts "vh" arg; do
- case $arg in
- v ) VERBOSE='-v'; export LOG_LEVEL=debug ;;
- h ) usage ; exit 0 ;;
- \? ) usage ; exit 2 ;;
- esac
-done
-shift $((OPTIND -1))
-
-function cleanup {
- set +xeuo pipefail
- # aggressive cleanup as tests may crash leaving crap around
- umount '^(shm|nsfs)'
- umount '\/run\/netns'
- if [[ $RETURNCODE -eq 0 ]]; then
- rm -r "$1"
- fi
-}
-
-# Create temporary directory for storage
-export TMPDIR=`mktemp -d /tmp/podman.XXXXXXXXXX`
-trap "cleanup $TMPDIR" EXIT
-
-function umount {
- set +xeuo pipefail
- # xargs -r always ran once, so write any mount points to file first
- mount |awk "/$1/"' { print $3 }' >${TMPDIR}/mounts
- if [[ -s ${TMPDIR}/mounts ]]; then
- xargs <${TMPDIR}/mounts -t umount
- fi
-}
-
-function showlog {
- [[ -s $1 ]] && cat <<-EOT
-$1 =====
-$(cat "$1")
-
-EOT
-}
-
-# Need locations to store stuff
-mkdir -p ${TMPDIR}/{podman,crio,crio-run,cni/net.d,ctnr,tunnel}
-
-# Cannot be done in python unittest fixtures. EnvVar not picked up.
-export REGISTRIES_CONFIG_PATH=${TMPDIR}/registry.conf
-cat >$REGISTRIES_CONFIG_PATH <<-EOT
- [registries.search]
- registries = ['docker.io']
- [registries.insecure]
- registries = []
- [registries.block]
- registries = []
-EOT
-
-export CNI_CONFIG_PATH=${TMPDIR}/cni/net.d
-cat >$CNI_CONFIG_PATH/87-podman-bridge.conflist <<-EOT
-{
- "cniVersion": "0.3.0",
- "name": "podman",
- "plugins": [{
- "type": "bridge",
- "bridge": "cni0",
- "isGateway": true,
- "ipMasq": true,
- "ipam": {
- "type": "host-local",
- "subnet": "10.88.0.0/16",
- "routes": [{
- "dst": "0.0.0.0/0"
- }]
- }
- },
- {
- "type": "portmap",
- "capabilities": {
- "portMappings": true
- }
- }
- ]
-}
-EOT
-
-cat >$TMPDIR/ctnr/hello.sh <<-EOT
-echo 'Hello, World'
-exit 0
-EOT
-
-cat >$TMPDIR/ctnr/Dockerfile <<-EOT
-FROM alpine:latest
-COPY ./hello.sh /tmp/
-RUN chmod 755 /tmp/hello.sh
-ENTRYPOINT ["/tmp/hello.sh"]
-EOT
-
-export PODMAN_HOST="unix:${TMPDIR}/podman/io.podman"
-PODMAN_ARGS="--storage-driver=vfs \
- --root=${TMPDIR}/crio \
- --runroot=${TMPDIR}/crio-run \
- --cni-config-dir=$CNI_CONFIG_PATH \
- --cgroup-manager=cgroupfs \
- "
-if [[ -n $VERBOSE ]]; then
- PODMAN_ARGS="$PODMAN_ARGS --log-level=$LOG_LEVEL"
-fi
-PODMAN="podman $PODMAN_ARGS"
-
-cat <<-EOT |tee /tmp/test_podman.output
-$($PODMAN --version)
-$PODMAN varlink --timeout=0 ${PODMAN_HOST}
-==========================================
-EOT
-
-# Run podman in background without systemd for test purposes
-$PODMAN varlink --timeout=0 ${PODMAN_HOST} >>/tmp/test_podman.output 2>&1 &
-if [[ $? != 0 ]]; then
- echo 1>&2 Failed to start podman
- showlog /tmp/test_podman.output
-fi
-
-if [[ -z $1 ]]; then
- export PYTHONPATH=.
- python3 -m unittest discover -s . $VERBOSE
- RETURNCODE=$?
-else
- export PYTHONPATH=.:./test
- python3 -m unittest $1 $VERBOSE
- RETURNCODE=$?
-fi
-
-pkill -9 podman
-pkill -9 conmon
-
-showlog /tmp/test_podman.output
-showlog /tmp/alpine.log
-showlog /tmp/busybox.log
-
-exit $RETURNCODE
diff --git a/contrib/python/podman/test/test_system.py b/contrib/python/podman/test/test_system.py
deleted file mode 100644
index c483f3232..000000000
--- a/contrib/python/podman/test/test_system.py
+++ /dev/null
@@ -1,63 +0,0 @@
-import os
-import unittest
-from urllib.parse import urlparse
-
-import podman
-import varlink
-
-
-class TestSystem(unittest.TestCase):
- def setUp(self):
- self.host = os.environ['PODMAN_HOST']
- self.tmpdir = os.environ['TMPDIR']
-
- def tearDown(self):
- pass
-
- def test_bad_address(self):
- with self.assertRaisesRegex(varlink.client.ConnectionError,
- "Invalid address 'bad address'"):
- podman.Client('bad address')
-
- def test_ping(self):
- with podman.Client(self.host) as pclient:
- self.assertTrue(pclient.system.ping())
-
- @unittest.skip("TODO: Need to setup ssh under Travis")
- def test_remote_ping(self):
- host = urlparse(self.host)
- remote_uri = 'ssh://root@localhost{}'.format(host.path)
-
- local_uri = 'unix:{}/tunnel/podman.sock'.format(self.tmpdir)
- with podman.Client(
- uri=local_uri,
- remote_uri=remote_uri,
- identity_file=os.path.expanduser('~/.ssh/id_rsa'),
- ) as remote_client:
- self.assertTrue(remote_client.system.ping())
-
- def test_versions(self):
- with podman.Client(self.host) as pclient:
- # Values change with each build so we cannot test too much
- self.assertListEqual(
- sorted([
- 'built', 'client_version', 'git_commit', 'go_version',
- 'os_arch', 'version'
- ]), sorted(list(pclient.system.versions._fields)))
- pclient.system.versions
- self.assertIsNot(podman.__version__, '0.0.0')
-
- def test_info(self):
- with podman.Client(self.host) as pclient:
- actual = pclient.system.info()
- # Values change too much to do exhaustive testing
- self.assertIsNotNone(actual.podman['go_version'])
- self.assertListEqual(
- sorted([
- 'host', 'insecure_registries', 'podman', 'registries',
- 'store'
- ]), sorted(list(actual._fields)))
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/contrib/python/podman/test/test_tunnel.py b/contrib/python/podman/test/test_tunnel.py
deleted file mode 100644
index 9a33e76cd..000000000
--- a/contrib/python/podman/test/test_tunnel.py
+++ /dev/null
@@ -1,86 +0,0 @@
-from __future__ import absolute_import
-
-import logging
-import time
-import unittest
-from unittest.mock import MagicMock, patch
-
-from podman.libs.tunnel import Context, Portal, Tunnel
-
-
-class TestTunnel(unittest.TestCase):
- def setUp(self):
- self.tunnel_01 = MagicMock(spec=Tunnel)
- self.tunnel_02 = MagicMock(spec=Tunnel)
-
- def test_portal_ops(self):
- portal = Portal(sweap=500)
- portal['unix:/01'] = self.tunnel_01
- portal['unix:/02'] = self.tunnel_02
-
- self.assertEqual(portal.get('unix:/01'), self.tunnel_01)
- self.assertEqual(portal.get('unix:/02'), self.tunnel_02)
-
- del portal['unix:/02']
- with self.assertRaises(KeyError):
- portal['unix:/02']
- self.assertEqual(len(portal), 1)
-
- def test_portal_reaping(self):
- portal = Portal(sweap=0.5)
- portal['unix:/01'] = self.tunnel_01
- portal['unix:/02'] = self.tunnel_02
-
- self.assertEqual(len(portal), 2)
- for entry in portal:
- self.assertIn(entry, (self.tunnel_01, self.tunnel_02))
-
- time.sleep(1)
- portal.reap()
- self.assertEqual(len(portal), 0)
-
- def test_portal_no_reaping(self):
- portal = Portal(sweap=500)
- portal['unix:/01'] = self.tunnel_01
- portal['unix:/02'] = self.tunnel_02
-
- portal.reap()
- self.assertEqual(len(portal), 2)
- for entry in portal:
- self.assertIn(entry, (self.tunnel_01, self.tunnel_02))
-
- @patch('subprocess.Popen')
- @patch('os.path.exists', return_value=True)
- @patch('weakref.finalize')
- def test_tunnel(self, mock_finalize, mock_exists, mock_Popen):
- mock_Popen.return_value.returncode = 0
-
- context = Context(
- 'unix:/01',
- 'io.podman',
- '/tmp/user/socket',
- '/run/podman/socket',
- 'user',
- 'hostname',
- None,
- '~/.ssh/id_rsa',
- )
- tunnel = Tunnel(context).bore()
-
- cmd = ['ssh', '-fNT']
- if logging.getLogger().getEffectiveLevel() == logging.DEBUG:
- cmd.append('-v')
- else:
- cmd.append('-q')
-
- cmd.extend((
- '-L',
- '{}:{}'.format(context.local_socket, context.remote_socket),
- '-i',
- context.identity_file,
- '{}@{}'.format(context.username, context.hostname),
- ))
-
- mock_finalize.assert_called_once_with(tunnel, tunnel.close)
- mock_exists.assert_called_once_with(context.local_socket)
- mock_Popen.assert_called_once_with(cmd, close_fds=True)
diff --git a/contrib/python/podman/tox.ini b/contrib/python/podman/tox.ini
deleted file mode 100644
index 797eafbe3..000000000
--- a/contrib/python/podman/tox.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[tox]
-envlist = py34,py35,py36
-skipdist = True
-
-[testenv]
-deps=-rrequirements.txt
-whitelist_externals = bash
-commands=bash test/test_runner.sh
diff --git a/contrib/python/pypodman/.pylintrc b/contrib/python/pypodman/.pylintrc
deleted file mode 100644
index a5628a6cf..000000000
--- a/contrib/python/pypodman/.pylintrc
+++ /dev/null
@@ -1,564 +0,0 @@
-[MASTER]
-
-# A comma-separated list of package or module names from where C extensions may
-# be loaded. Extensions are loading into the active Python interpreter and may
-# run arbitrary code.
-extension-pkg-whitelist=
-
-# Add files or directories to the blacklist. They should be base names, not
-# paths.
-ignore=CVS
-
-# Add files or directories matching the regex patterns to the blacklist. The
-# regex matches against base names, not paths.
-ignore-patterns=
-
-# Python code to execute, usually for sys.path manipulation such as
-# pygtk.require().
-#init-hook=
-
-# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
-# number of processors available to use.
-jobs=0
-
-# Control the amount of potential inferred values when inferring a single
-# object. This can help the performance when dealing with large functions or
-# complex, nested conditions.
-limit-inference-results=100
-
-# List of plugins (as comma separated values of python modules names) to load,
-# usually to register additional checkers.
-load-plugins=
-
-# Pickle collected data for later comparisons.
-persistent=yes
-
-# Specify a configuration file.
-#rcfile=
-
-# When enabled, pylint would attempt to guess common misconfiguration and emit
-# user-friendly hints instead of false-positive error messages.
-suggestion-mode=yes
-
-# Allow loading of arbitrary C extensions. Extensions are imported into the
-# active Python interpreter and may run arbitrary code.
-unsafe-load-any-extension=no
-
-
-[MESSAGES CONTROL]
-
-# Only show warnings with the listed confidence levels. Leave empty to show
-# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED.
-confidence=
-
-# Disable the message, report, category or checker with the given id(s). You
-# can either give multiple identifiers separated by comma (,) or put this
-# option multiple times (only on the command line, not in the configuration
-# file where it should appear only once). You can also use "--disable=all" to
-# disable everything first and then reenable specific checks. For example, if
-# you want to run only the similarities checker, you can use "--disable=all
-# --enable=similarities". If you want to run only the classes checker, but have
-# no Warning level messages displayed, use "--disable=all --enable=classes
-# --disable=W".
-disable=print-statement,
- parameter-unpacking,
- unpacking-in-except,
- old-raise-syntax,
- backtick,
- long-suffix,
- old-ne-operator,
- old-octal-literal,
- import-star-module-level,
- non-ascii-bytes-literal,
- raw-checker-failed,
- bad-inline-option,
- locally-disabled,
- locally-enabled,
- file-ignored,
- suppressed-message,
- useless-suppression,
- deprecated-pragma,
- use-symbolic-message-instead,
- apply-builtin,
- basestring-builtin,
- buffer-builtin,
- cmp-builtin,
- coerce-builtin,
- execfile-builtin,
- file-builtin,
- long-builtin,
- raw_input-builtin,
- reduce-builtin,
- standarderror-builtin,
- unicode-builtin,
- xrange-builtin,
- coerce-method,
- delslice-method,
- getslice-method,
- setslice-method,
- no-absolute-import,
- old-division,
- dict-iter-method,
- dict-view-method,
- next-method-called,
- metaclass-assignment,
- indexing-exception,
- raising-string,
- reload-builtin,
- oct-method,
- hex-method,
- nonzero-method,
- cmp-method,
- input-builtin,
- round-builtin,
- intern-builtin,
- unichr-builtin,
- map-builtin-not-iterating,
- zip-builtin-not-iterating,
- range-builtin-not-iterating,
- filter-builtin-not-iterating,
- using-cmp-argument,
- eq-without-hash,
- div-method,
- idiv-method,
- rdiv-method,
- exception-message-attribute,
- invalid-str-codec,
- sys-max-int,
- bad-python3-import,
- deprecated-string-function,
- deprecated-str-translate-call,
- deprecated-itertools-function,
- deprecated-types-field,
- next-method-defined,
- dict-items-not-iterating,
- dict-keys-not-iterating,
- dict-values-not-iterating,
- deprecated-operator-function,
- deprecated-urllib-function,
- xreadlines-attribute,
- deprecated-sys-function,
- exception-escape,
- comprehension-escape
-
-# Enable the message, report, category or checker with the given id(s). You can
-# either give multiple identifier separated by comma (,) or put this option
-# multiple time (only on the command line, not in the configuration file where
-# it should appear only once). See also the "--disable" option for examples.
-enable=c-extension-no-member
-
-
-[REPORTS]
-
-# Python expression which should return a note less than 10 (10 is the highest
-# note). You have access to the variables errors warning, statement which
-# respectively contain the number of errors / warnings messages and the total
-# number of statements analyzed. This is used by the global evaluation report
-# (RP0004).
-evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
-
-# Template used to display messages. This is a python new-style format string
-# used to format the message information. See doc for all details.
-#msg-template=
-
-# Set the output format. Available formats are text, parseable, colorized, json
-# and msvs (visual studio). You can also give a reporter class, e.g.
-# mypackage.mymodule.MyReporterClass.
-output-format=text
-
-# Tells whether to display a full report or only the messages.
-reports=no
-
-# Activate the evaluation score.
-score=yes
-
-
-[REFACTORING]
-
-# Maximum number of nested blocks for function / method body
-max-nested-blocks=5
-
-# Complete name of functions that never returns. When checking for
-# inconsistent-return-statements if a never returning function is called then
-# it will be considered as an explicit return statement and no message will be
-# printed.
-never-returning-functions=sys.exit
-
-
-[TYPECHECK]
-
-# List of decorators that produce context managers, such as
-# contextlib.contextmanager. Add to this list to register other decorators that
-# produce valid context managers.
-contextmanager-decorators=contextlib.contextmanager
-
-# List of members which are set dynamically and missed by pylint inference
-# system, and so shouldn't trigger E1101 when accessed. Python regular
-# expressions are accepted.
-generated-members=
-
-# Tells whether missing members accessed in mixin class should be ignored. A
-# mixin class is detected if its name ends with "mixin" (case insensitive).
-ignore-mixin-members=yes
-
-# Tells whether to warn about missing members when the owner of the attribute
-# is inferred to be None.
-ignore-none=yes
-
-# This flag controls whether pylint should warn about no-member and similar
-# checks whenever an opaque object is returned when inferring. The inference
-# can return multiple potential results while evaluating a Python object, but
-# some branches might not be evaluated, which results in partial inference. In
-# that case, it might be useful to still emit no-member and other checks for
-# the rest of the inferred objects.
-ignore-on-opaque-inference=yes
-
-# List of class names for which member attributes should not be checked (useful
-# for classes with dynamically set attributes). This supports the use of
-# qualified names.
-ignored-classes=optparse.Values,thread._local,_thread._local
-
-# List of module names for which member attributes should not be checked
-# (useful for modules/projects where namespaces are manipulated during runtime
-# and thus existing member attributes cannot be deduced by static analysis. It
-# supports qualified module names, as well as Unix pattern matching.
-ignored-modules=
-
-# Show a hint with possible names when a member name was not found. The aspect
-# of finding the hint is based on edit distance.
-missing-member-hint=yes
-
-# The minimum edit distance a name should have in order to be considered a
-# similar match for a missing member name.
-missing-member-hint-distance=1
-
-# The total number of similar names that should be taken in consideration when
-# showing a hint for a missing member.
-missing-member-max-choices=1
-
-
-[SPELLING]
-
-# Limits count of emitted suggestions for spelling mistakes.
-max-spelling-suggestions=4
-
-# Spelling dictionary name. Available dictionaries: none. To make it working
-# install python-enchant package..
-spelling-dict=
-
-# List of comma separated words that should not be checked.
-spelling-ignore-words=
-
-# A path to a file that contains private dictionary; one word per line.
-spelling-private-dict-file=
-
-# Tells whether to store unknown words to indicated private dictionary in
-# --spelling-private-dict-file option instead of raising a message.
-spelling-store-unknown-words=no
-
-
-[MISCELLANEOUS]
-
-# List of note tags to take in consideration, separated by a comma.
-notes=FIXME,
- XXX,
- TODO
-
-
-[FORMAT]
-
-# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
-expected-line-ending-format=
-
-# Regexp for a line that is allowed to be longer than the limit.
-ignore-long-lines=^\s*(# )?<?https?://\S+>?$
-
-# Number of spaces of indent required inside a hanging or continued line.
-indent-after-paren=4
-
-# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
-# tab).
-indent-string=' '
-
-# Maximum number of characters on a single line.
-max-line-length=100
-
-# Maximum number of lines in a module.
-max-module-lines=1000
-
-# List of optional constructs for which whitespace checking is disabled. `dict-
-# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}.
-# `trailing-comma` allows a space between comma and closing bracket: (a, ).
-# `empty-line` allows space-only lines.
-no-space-check=trailing-comma,
- dict-separator
-
-# Allow the body of a class to be on the same line as the declaration if body
-# contains single statement.
-single-line-class-stmt=no
-
-# Allow the body of an if to be on the same line as the test if there is no
-# else.
-single-line-if-stmt=no
-
-
-[BASIC]
-
-# Naming style matching correct argument names.
-#argument-naming-style=snake_case
-
-# Regular expression matching correct argument names. Overrides argument-
-# naming-style.
-argument-rgx=[a-z_][a-z0-9_]{1,30}$
-argument-name-hint=[a-z_][a-z0-9_]{1,30}$
-
-# Naming style matching correct attribute names.
-attr-naming-style=snake_case
-
-# Regular expression matching correct attribute names. Overrides attr-naming-
-# style.
-#attr-rgx=
-
-# Bad variable names which should always be refused, separated by a comma.
-bad-names=foo,
- bar,
- baz,
- toto,
- tutu,
- tata
-
-# Naming style matching correct class attribute names.
-class-attribute-naming-style=any
-
-# Regular expression matching correct class attribute names. Overrides class-
-# attribute-naming-style.
-#class-attribute-rgx=
-
-# Naming style matching correct class names.
-class-naming-style=PascalCase
-
-# Regular expression matching correct class names. Overrides class-naming-
-# style.
-#class-rgx=
-
-# Naming style matching correct constant names.
-const-naming-style=UPPER_CASE
-
-# Regular expression matching correct constant names. Overrides const-naming-
-# style.
-#const-rgx=
-
-# Minimum line length for functions/classes that require docstrings, shorter
-# ones are exempt.
-docstring-min-length=-1
-
-# Naming style matching correct function names.
-function-naming-style=snake_case
-
-# Regular expression matching correct function names. Overrides function-
-# naming-style.
-#function-rgx=
-
-# Good variable names which should always be accepted, separated by a comma.
-good-names=c,
- e,
- i,
- j,
- k,
- r,
- v,
- ex,
- Run,
- _
-
-# Include a hint for the correct naming format with invalid-name.
-include-naming-hint=no
-
-# Naming style matching correct inline iteration names.
-inlinevar-naming-style=any
-
-# Regular expression matching correct inline iteration names. Overrides
-# inlinevar-naming-style.
-#inlinevar-rgx=
-
-# Naming style matching correct method names.
-method-naming-style=snake_case
-
-# Regular expression matching correct method names. Overrides method-naming-
-# style.
-#method-rgx=
-
-# Naming style matching correct module names.
-module-naming-style=snake_case
-
-# Regular expression matching correct module names. Overrides module-naming-
-# style.
-#module-rgx=
-
-# Colon-delimited sets of names that determine each other's naming style when
-# the name regexes allow several styles.
-name-group=
-
-# Regular expression which should only match function or class names that do
-# not require a docstring.
-no-docstring-rgx=^_
-
-# List of decorators that produce properties, such as abc.abstractproperty. Add
-# to this list to register other decorators that produce valid properties.
-# These decorators are taken in consideration only for invalid-name.
-property-classes=abc.abstractproperty
-
-# Naming style matching correct variable names.
-#variable-naming-style=snake_case
-
-# Regular expression matching correct variable names. Overrides variable-
-# naming-style.
-variable-rgx=[a-z_][a-z0-9_]{2,30}$
-variable-name-hint=[a-z_][a-z0-9_]{2,30}$
-
-[SIMILARITIES]
-
-# Ignore comments when computing similarities.
-ignore-comments=yes
-
-# Ignore docstrings when computing similarities.
-ignore-docstrings=yes
-
-# Ignore imports when computing similarities.
-ignore-imports=no
-
-# Minimum lines number of a similarity.
-min-similarity-lines=4
-
-
-[VARIABLES]
-
-# List of additional names supposed to be defined in builtins. Remember that
-# you should avoid to define new builtins when possible.
-additional-builtins=
-
-# Tells whether unused global variables should be treated as a violation.
-allow-global-unused-variables=yes
-
-# List of strings which can identify a callback function by name. A callback
-# name must start or end with one of those strings.
-callbacks=cb_,
- _cb
-
-# A regular expression matching the name of dummy variables (i.e. expected to
-# not be used).
-dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_
-
-# Argument names that match this expression will be ignored. Default to name
-# with leading underscore.
-ignored-argument-names=_.*|^ignored_|^unused_
-
-# Tells whether we should check for unused import in __init__ files.
-init-import=no
-
-# List of qualified module names which can have objects that can redefine
-# builtins.
-redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io
-
-
-[LOGGING]
-
-# Logging modules to check that the string format arguments are in logging
-# function parameter format.
-logging-modules=logging
-
-
-[IMPORTS]
-
-# Allow wildcard imports from modules that define __all__.
-allow-wildcard-with-all=no
-
-# Analyse import fallback blocks. This can be used to support both Python 2 and
-# 3 compatible code, which means that the block might have code that exists
-# only in one or another interpreter, leading to false positives when analysed.
-analyse-fallback-blocks=no
-
-# Deprecated modules which should not be used, separated by a comma.
-deprecated-modules=optparse,tkinter.tix
-
-# Create a graph of external dependencies in the given file (report RP0402 must
-# not be disabled).
-ext-import-graph=
-
-# Create a graph of every (i.e. internal and external) dependencies in the
-# given file (report RP0402 must not be disabled).
-import-graph=
-
-# Create a graph of internal dependencies in the given file (report RP0402 must
-# not be disabled).
-int-import-graph=
-
-# Force import order to recognize a module as part of the standard
-# compatibility libraries.
-known-standard-library=
-
-# Force import order to recognize a module as part of a third party library.
-known-third-party=enchant
-
-
-[DESIGN]
-
-# Support argparse.Action constructor API
-# Maximum number of arguments for function / method.
-max-args=12
-
-# Maximum number of attributes for a class (see R0902).
-max-attributes=7
-
-# Maximum number of boolean expressions in an if statement.
-max-bool-expr=5
-
-# Maximum number of branch for function / method body.
-max-branches=12
-
-# Maximum number of locals for function / method body.
-max-locals=15
-
-# Maximum number of parents for a class (see R0901).
-max-parents=10
-
-# Maximum number of public methods for a class (see R0904).
-max-public-methods=20
-
-# Maximum number of return / yield for function / method body.
-max-returns=6
-
-# Maximum number of statements in function / method body.
-max-statements=50
-
-# Minimum number of public methods for a class (see R0903).
-min-public-methods=2
-
-
-[CLASSES]
-
-# List of method names used to declare (i.e. assign) instance attributes.
-defining-attr-methods=__init__,
- __new__,
- setUp
-
-# List of member names, which should be excluded from the protected access
-# warning.
-exclude-protected=_asdict,
- _fields,
- _replace,
- _source,
- _make
-
-# List of valid names for the first argument in a class method.
-valid-classmethod-first-arg=cls
-
-# List of valid names for the first argument in a metaclass class method.
-valid-metaclass-classmethod-first-arg=cls
-
-
-[EXCEPTIONS]
-
-# Exceptions that will emit a warning when being caught. Defaults to
-# "Exception".
-overgeneral-exceptions=Exception
diff --git a/contrib/python/pypodman/MANIFEST.in b/contrib/python/pypodman/MANIFEST.in
deleted file mode 100644
index 72e638cb9..000000000
--- a/contrib/python/pypodman/MANIFEST.in
+++ /dev/null
@@ -1,2 +0,0 @@
-prune test/
-include README.md
diff --git a/contrib/python/pypodman/Makefile b/contrib/python/pypodman/Makefile
deleted file mode 100644
index 230eee44d..000000000
--- a/contrib/python/pypodman/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-PYTHON ?= $(shell command -v python3 2>/dev/null || command -v python)
-DESTDIR := /
-PODMAN_VERSION ?= '0.11.1.1'
-
-.PHONY: python-pypodman
-python-pypodman:
- PODMAN_VERSION=$(PODMAN_VERSION) \
- $(PYTHON) setup.py sdist bdist
-
-.PHONY: lint
-lint:
- $(PYTHON) -m pylint pypodman
-
-.PHONY: integration
-integration:
- true
-
-.PHONY: install
-install:
- PODMAN_VERSION=$(PODMAN_VERSION) \
- $(PYTHON) setup.py install --root ${DESTDIR}
-
-.PHONY: upload
-upload:
- PODMAN_VERSION=$(PODMAN_VERSION) $(PYTHON) setup.py sdist bdist_wheel
- twine upload --repository-url https://test.pypi.org/legacy/ dist/*
-
-.PHONY: clobber
-clobber: uninstall clean
-
-.PHONY: uninstall
- $(PYTHON) -m pip uninstall --yes pypodman ||:
-
-.PHONY: clean
-clean:
- rm -rf pypodman.egg-info dist
- find . -depth -name __pycache__ -exec rm -rf {} \;
- find . -depth -name \*.pyc -exec rm -f {} \;
- $(PYTHON) ./setup.py clean --all
diff --git a/contrib/python/pypodman/README.md b/contrib/python/pypodman/README.md
deleted file mode 100644
index 6991daffa..000000000
--- a/contrib/python/pypodman/README.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# pypodman - CLI for podman written in python
-
-## Status: Active Development
-
-See [libpod](https://github.com/containers/libpod/contrib/python/pypodman)
-
-## Releases
-
-To build the pypodman egg and install as user:
-
-```sh
-cd ~/libpod/contrib/python/pypodman
-python3 setup.py clean -a && python3 setup.py sdist bdist
-python3 setup.py install --user
-```
-Add `~/.local/bin` to your `PATH` to run pypodman command.
-
-## Running command:
-
-### Against local podman service
-```sh
-$ pypodman images
-```
-### Against remote podman service
-```sh
-$ pypodman --host node001.example.org images
-```
-### Full help system available
-```sh
-$ pypodman -h
-```
-```sh
-$ pypodman images -h
-```
diff --git a/contrib/python/pypodman/docs/man1/pypodman.1 b/contrib/python/pypodman/docs/man1/pypodman.1
deleted file mode 100644
index 45472dab0..000000000
--- a/contrib/python/pypodman/docs/man1/pypodman.1
+++ /dev/null
@@ -1,101 +0,0 @@
-.TH pypodman 1 2018-07-20 0.7.3
-.SH NAME
-pypodman \- CLI management tool for containers and images
-.SH SYNOPSIS
-\f[B]pypodman\f[] [\f[I]global options\f[]] \f[I]command\f[] [\f[I]options\f[]]
-.SH DESCRIPTION
-pypodman is a simple client only tool to help with debugging issues when daemons
-such as CRI runtime and the kubelet are not responding or failing.
-.P
-pypodman uses a VarLink API to commicate with a podman service running on either
-the local or remote machine. pypodman uses ssh to create secure tunnels when
-communicating with a remote service.
-.SH GLOBAL OPTIONS
-.PP
-\f[B]\[en]help, \-h\f[]
-.PP
-Print usage statement.
-.PP
-\f[B]\[en]version\f[]
-.PP
-Print program version number and exit.
-.PP
-\f[B]\[en]config\-home\f[]
-.PP
-Directory that will be namespaced with \f[C]pypodman\f[] to hold
-\f[C]pypodman.conf\f[].
-See FILES below for more details.
-.PP
-\f[B]\[en]log\-level\f[]
-.PP
-Log events above specified level: DEBUG, INFO, WARNING (default), ERROR,
-or CRITICAL.
-.PP
-\f[B]\[en]run\-dir\f[]
-.PP
-Directory that will be namespaced with \f[C]pypodman\f[] to hold local socket
-bindings. The default is `\f[C]$XDG_RUNTIME_DIR\\\f[].
-.PP
-\f[B]\[en]user\f[]
-.PP
-Authenicating user on remote host. \f[C]pypodman\f[] defaults to the logged in
-user.
-.PP
-\f[B]\[en]host\f[]
-.PP
-Name of remote host. There is no default, if not given \f[C]pypodman\f[]
-attempts to connect to \f[C]\-\-remote\-socket\-path\f[] on local host.
-.PP
-\f[B]\[en]port\f[]
-.PP
-The optional port for \f[C]ssh\f[] to connect tunnel to on remote host.
-Default is None and will allow \f[C]ssh\f[] to follow it's default configuration.
-.PP
-\f[B]\[en]remote\-socket\-path\f[]
-.PP
-Path on remote host for podman service's \f[C]AF_UNIX\f[] socket. The default is
-\f[C]/run/podman/io.podman\f[].
-.PP
-\f[B]\[en]identity\-file\f[]
-.PP
-The optional \f[C]ssh\f[] identity file to authenicate when tunnelling to remote
-host. Default is None and will allow \f[C]ssh\f[] to follow it's default methods
-for resolving the identity and private key using the logged in user.
-.SH COMMANDS
-.PP
-See podman(1) (podman.1.md)
-.SH FILES
-.PP
-\f[B]pypodman/pypodman.conf\f[]
-(\f[C]Any\ element\ of\ XDG_CONFIG_DIRS\f[] and/or
-\f[C]XDG_CONFIG_HOME\f[] and/or \f[B]\[en]config\-home\f[])
-.PP
-pypodman.conf is one or more configuration files for running the pypodman
-command. pypodman.conf is a TOML file with the stanza \f[C][default]\f[], with a
-map of \f[C]option: value\f[].
-.PP
-pypodman follows the XDG (freedesktop.org) conventions for resolving it's
-configuration. The list below are read from top to bottom with later items
-overwriting earlier. Any missing items are ignored.
-.IP \[bu] 2
-\f[C]pypodman/pypodman.conf\f[] from any path element in
-\f[C]XDG_CONFIG_DIRS\f[] or \f[C]\\etc\\xdg\f[]
-.IP \[bu] 2
-\f[C]XDG_CONFIG_HOME\f[] or $HOME/.config + \f[C]pypodman/pypodman.conf\f[]
-.IP \[bu] 2
-From \f[C]\-\-config\-home\f[] command line option + \f[C]pypodman/pypodman.conf\f[]
-.IP \[bu] 2
-From environment variable prefixed with PODMAN_, for example: PODMAN_RUN_DIR
-.IP \[bu] 2
-From command line option, for example: \[en]run\-dir
-.PP
-This should provide Operators the ability to setup basic configurations
-and allow users to customize them.
-.PP
-\f[B]XDG_RUNTIME_DIR\f[] (\f[C]XDG_RUNTIME_DIR/io.podman\f[])
-.PP
-Directory where pypodman stores non\-essential runtime files and other file
-objects (such as sockets, named pipes, \&...).
-.SH SEE ALSO
-.PP
-\f[C]podman(1)\f[], \f[C]libpod(8)\f[]
diff --git a/contrib/python/pypodman/pypodman/lib/__init__.py b/contrib/python/pypodman/pypodman/lib/__init__.py
deleted file mode 100644
index d9a434254..000000000
--- a/contrib/python/pypodman/pypodman/lib/__init__.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""Remote podman client support library."""
-import sys
-
-import podman
-from pypodman.lib.action_base import AbstractActionBase
-from pypodman.lib.parser_actions import (ChangeAction, PathAction,
- PositiveIntAction, SignalAction,
- UnitAction)
-from pypodman.lib.podman_parser import PodmanArgumentParser
-from pypodman.lib.report import Report, ReportColumn
-
-# Silence pylint overlording...
-assert ChangeAction
-assert PathAction
-assert PositiveIntAction
-assert SignalAction
-assert UnitAction
-
-__all__ = [
- 'AbstractActionBase',
- 'PodmanArgumentParser',
- 'Report',
- 'ReportColumn',
-]
-
-
-def query_model(model, identifiers=None):
- """Retrieve all (default) or given model(s)."""
- objs = []
- if identifiers is None:
- objs.extend(model.list())
- else:
- try:
- for ident in identifiers:
- objs.append(model.get(ident))
- except (
- podman.PodNotFound,
- podman.ImageNotFound,
- podman.ContainerNotFound,
- ) as ex:
- print(
- '"{}" not found'.format(ex.name), file=sys.stderr, flush=True)
- return objs
diff --git a/contrib/python/pypodman/pypodman/lib/action_base.py b/contrib/python/pypodman/pypodman/lib/action_base.py
deleted file mode 100644
index 5cba7ac5c..000000000
--- a/contrib/python/pypodman/pypodman/lib/action_base.py
+++ /dev/null
@@ -1,79 +0,0 @@
-"""Base class for all actions of remote client."""
-import abc
-from functools import lru_cache
-
-import podman
-
-
-class AbstractActionBase(abc.ABC):
- """Base class for all actions of remote client."""
-
- @classmethod
- @abc.abstractmethod
- def subparser(cls, parent):
- """Define parser for this action. Subclasses must implement.
-
- API:
- Use set_defaults() to set attributes "class_" and "method". These will
- be invoked as class_(parsed_args).method()
- """
- parent.add_flag(
- '--all',
- help='list all items.')
- parent.add_flag(
- '--truncate',
- '--trunc',
- default=True,
- help="Truncate id's and other long fields.")
- parent.add_flag(
- '--heading',
- default=True,
- help='Include table headings in the output.')
- parent.add_flag(
- '--quiet',
- help='List only the IDs.')
-
- def __init__(self, args):
- """Construct class."""
- # Dump all unset arguments before transmitting to service
- self._args = args
- self.opts = {
- k: v
- for k, v in vars(self._args).items() if v is not None
- }
-
- @property
- def remote_uri(self):
- """URI for remote side of connection."""
- return self._args.remote_uri
-
- @property
- def local_uri(self):
- """URI for local side of connection."""
- return self._args.local_uri
-
- @property
- def identity_file(self):
- """Key for authenication."""
- return self._args.identity_file
-
- @property
- @lru_cache(maxsize=1)
- def client(self):
- """Podman remote client for communicating."""
- if self._args.host is None:
- return podman.Client(uri=self.local_uri)
- return podman.Client(
- uri=self.local_uri,
- remote_uri=self.remote_uri,
- identity_file=self.identity_file)
-
- def __repr__(self):
- """Compute the “official” string representation of object."""
- return ("{}(local_uri='{}', remote_uri='{}',"
- " identity_file='{}')").format(
- self.__class__,
- self.local_uri,
- self.remote_uri,
- self.identity_file,
- )
diff --git a/contrib/python/pypodman/pypodman/lib/actions/__init__.py b/contrib/python/pypodman/pypodman/lib/actions/__init__.py
deleted file mode 100644
index c0d77ddb1..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/__init__.py
+++ /dev/null
@@ -1,54 +0,0 @@
-"""Module to export all the podman subcommands."""
-from pypodman.lib.actions.attach_action import Attach
-from pypodman.lib.actions.commit_action import Commit
-from pypodman.lib.actions.create_action import Create
-from pypodman.lib.actions.export_action import Export
-from pypodman.lib.actions.history_action import History
-from pypodman.lib.actions.images_action import Images
-from pypodman.lib.actions.import_action import Import
-from pypodman.lib.actions.info_action import Info
-from pypodman.lib.actions.inspect_action import Inspect
-from pypodman.lib.actions.kill_action import Kill
-from pypodman.lib.actions.logs_action import Logs
-from pypodman.lib.actions.mount_action import Mount
-from pypodman.lib.actions.pause_action import Pause
-from pypodman.lib.actions.pod_action import Pod
-from pypodman.lib.actions.port_action import Port
-from pypodman.lib.actions.ps_action import Ps
-from pypodman.lib.actions.pull_action import Pull
-from pypodman.lib.actions.push_action import Push
-from pypodman.lib.actions.restart_action import Restart
-from pypodman.lib.actions.rm_action import Rm
-from pypodman.lib.actions.rmi_action import Rmi
-from pypodman.lib.actions.run_action import Run
-from pypodman.lib.actions.search_action import Search
-from pypodman.lib.actions.start_action import Start
-from pypodman.lib.actions.version_action import Version
-
-__all__ = [
- 'Attach',
- 'Commit',
- 'Create',
- 'Export',
- 'History',
- 'Images',
- 'Import',
- 'Info',
- 'Inspect',
- 'Kill',
- 'Logs',
- 'Mount',
- 'Pause',
- 'Pod',
- 'Port',
- 'Ps',
- 'Pull',
- 'Push',
- 'Restart',
- 'Rm',
- 'Rmi',
- 'Run',
- 'Search',
- 'Start',
- 'Version',
-]
diff --git a/contrib/python/pypodman/pypodman/lib/actions/_create_args.py b/contrib/python/pypodman/pypodman/lib/actions/_create_args.py
deleted file mode 100644
index 8ab4292e8..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/_create_args.py
+++ /dev/null
@@ -1,401 +0,0 @@
-"""Implement common create container arguments together."""
-
-from pypodman.lib import SignalAction, UnitAction
-
-
-class CreateArguments():
- """Helper to add all the create flags to a command."""
-
- @classmethod
- def add_arguments(cls, parser):
- """Add CreateArguments to parser."""
- parser.add_argument(
- '--add-host',
- action='append',
- metavar='HOST',
- help='Add a line to /etc/hosts.'
- ' The option can be set multiple times.'
- ' (format: hostname:ip)')
- parser.add_argument(
- '--annotation',
- action='append',
- help='Add an annotation to the container.'
- 'The option can be set multiple times.'
- '(format: key=value)')
- parser.add_argument(
- '--attach',
- '-a',
- action='append',
- metavar='FD',
- help=('Attach to STDIN, STDOUT or STDERR. The option can be set'
- ' for each of stdin, stdout, and stderr.'))
- parser.add_argument(
- '--blkio-weight',
- choices=range(10, 1000),
- metavar='[10-1000]',
- help=('Block IO weight (relative weight) accepts a'
- ' weight value between 10 and 1000.'))
- parser.add_argument(
- '--blkio-weight-device',
- action='append',
- metavar='WEIGHT',
- help='Block IO weight, relative device weight.'
- ' (format: DEVICE_NAME:WEIGHT)')
- parser.add_argument(
- '--cap-add',
- action='append',
- metavar='CAP',
- help=('Add Linux capabilities'
- 'The option can be set multiple times.'))
- parser.add_argument(
- '--cap-drop',
- action='append',
- metavar='CAP',
- help=('Drop Linux capabilities'
- 'The option can be set multiple times.'))
- parser.add_argument(
- '--cgroup-parent',
- metavar='PATH',
- help='Path to cgroups under which the cgroup for the'
- ' container will be created. If the path is not'
- ' absolute, the path is considered to be relative'
- ' to the cgroups path of the init process. Cgroups'
- ' will be created if they do not already exist.')
- parser.add_argument(
- '--cidfile',
- metavar='PATH',
- help='Write the container ID to the file, on the remote host.')
- parser.add_argument(
- '--conmon-pidfile',
- metavar='PATH',
- help=('Write the pid of the conmon process to a file,'
- ' on the remote host.'))
- parser.add_argument(
- '--cpu-period',
- type=int,
- metavar='PERIOD',
- help=('Limit the CPU CFS (Completely Fair Scheduler) period.'))
- parser.add_argument(
- '--cpu-quota',
- type=int,
- metavar='QUOTA',
- help=('Limit the CPU CFS (Completely Fair Scheduler) quota.'))
- parser.add_argument(
- '--cpu-rt-period',
- type=int,
- metavar='PERIOD',
- help=('Limit the CPU real-time period in microseconds.'))
- parser.add_argument(
- '--cpu-rt-runtime',
- type=int,
- metavar='LIMIT',
- help=('Limit the CPU real-time runtime in microseconds.'))
- parser.add_argument(
- '--cpu-shares',
- type=int,
- metavar='SHARES',
- help=('CPU shares (relative weight)'))
- parser.add_argument(
- '--cpus',
- type=float,
- help=('Number of CPUs. The default is 0.0 which means no limit'))
- parser.add_argument(
- '--cpuset-cpus',
- metavar='LIST',
- help=('CPUs in which to allow execution (0-3, 0,1)'))
- parser.add_argument(
- '--cpuset-mems',
- metavar='NODES',
- help=('Memory nodes (MEMs) in which to allow execution (0-3, 0,1).'
- ' Only effective on NUMA systems'))
- parser.add_flag(
- '--detach',
- '-d',
- help='Detached mode: run the container in the background and'
- ' print the new container ID. (default: False)')
- parser.add_argument(
- '--detach-keys',
- metavar='KEY(s)',
- default=4,
- help='Override the key sequence for detaching a container.'
- ' (format: a single character [a-Z] or ctrl-<value> where'
- ' <value> is one of: a-z, @, ^, [, , or _)')
- parser.add_argument(
- '--device',
- action='append',
- help=('Add a host device to the container'
- 'The option can be set multiple times.'),
- )
- parser.add_argument(
- '--device-read-bps',
- action='append',
- metavar='LIMIT',
- help=('Limit read rate (bytes per second) from a device'
- ' (e.g. --device-read-bps=/dev/sda:1mb)'
- 'The option can be set multiple times.'),
- )
- parser.add_argument(
- '--device-read-iops',
- action='append',
- metavar='LIMIT',
- help=('Limit read rate (IO per second) from a device'
- ' (e.g. --device-read-iops=/dev/sda:1000)'
- 'The option can be set multiple times.'),
- )
- parser.add_argument(
- '--device-write-bps',
- action='append',
- metavar='LIMIT',
- help=('Limit write rate (bytes per second) to a device'
- ' (e.g. --device-write-bps=/dev/sda:1mb)'
- 'The option can be set multiple times.'),
- )
- parser.add_argument(
- '--device-write-iops',
- action='append',
- metavar='LIMIT',
- help=('Limit write rate (IO per second) to a device'
- ' (e.g. --device-write-iops=/dev/sda:1000)'
- 'The option can be set multiple times.'),
- )
- parser.add_argument(
- '--dns',
- action='append',
- metavar='SERVER',
- help=('Set custom DNS servers.'
- 'The option can be set multiple times.'),
- )
- parser.add_argument(
- '--dns-option',
- action='append',
- metavar='OPT',
- help=('Set custom DNS options.'
- 'The option can be set multiple times.'),
- )
- parser.add_argument(
- '--dns-search',
- action='append',
- metavar='DOMAIN',
- help=('Set custom DNS search domains.'
- 'The option can be set multiple times.'),
- )
- parser.add_argument(
- '--entrypoint',
- help=('Overwrite the default ENTRYPOINT of the image.'),
- )
- parser.add_argument(
- '--env',
- '-e',
- action='append',
- help=('Set environment variables.'),
- )
- parser.add_argument(
- '--env-file',
- help=('Read in a line delimited file of environment variables,'
- ' on the remote host.'),
- )
- parser.add_argument(
- '--expose',
- action='append',
- metavar='RANGE',
- help=('Expose a port, or a range of ports'
- ' (e.g. --expose=3300-3310) to set up port redirection.'),
- )
- parser.add_argument(
- '--gidmap',
- metavar='MAP',
- action='append',
- help=('GID map for the user namespace'),
- )
- parser.add_argument(
- '--group-add',
- action='append',
- metavar='GROUP',
- help=('Add additional groups to run as'))
- parser.add_argument('--hostname', help='Container host name')
-
- # only way for argparse to handle these options.
- vol_args = {
- 'choices': ('bind', 'tmpfs', 'ignore'),
- 'metavar': 'MODE',
- 'type': str.lower,
- 'help': 'Tells podman how to handle the builtin image volumes',
- }
-
- volume_group = parser.add_mutually_exclusive_group()
- volume_group.add_argument('--image-volume', **vol_args)
- volume_group.add_argument('--builtin-volume', **vol_args)
-
- parser.add_flag(
- '--interactive',
- '-i',
- help='Keep STDIN open even if not attached.')
- parser.add_argument('--ipc', help='Create namespace')
- parser.add_argument(
- '--kernel-memory', action=UnitAction, help='Kernel memory limit')
- parser.add_argument(
- '--label',
- '-l',
- action='append',
- help=('Add metadata to a container'
- ' (e.g., --label com.example.key=value)'))
- parser.add_argument(
- '--label-file', help='Read in a line delimited file of labels')
- parser.add_argument(
- '--log-driver',
- choices='json-file',
- metavar='json-file',
- default='json-file',
- help='Logging driver for the container. (default: %(default)s)')
- parser.add_argument(
- '--log-opt',
- action='append',
- help='Logging driver specific options')
- parser.add_argument(
- '--memory', '-m', action=UnitAction, help='Memory limit')
- parser.add_argument(
- '--memory-reservation',
- action=UnitAction,
- help='Memory soft limit')
- parser.add_argument(
- '--memory-swap',
- action=UnitAction,
- help=('A limit value equal to memory plus swap.'
- 'Must be used with the --memory flag'))
- parser.add_argument(
- '--memory-swappiness',
- choices=range(0, 100),
- metavar='[0-100]',
- help="Tune a container's memory swappiness behavior")
- parser.add_argument('--name', help='Assign a name to the container')
- parser.add_argument(
- '--network',
- '--net',
- metavar='BRIDGE',
- help='Set the Network mode for the container.'
- ' (format: bridge, host, container:UUID, ns:PATH, none)')
- parser.add_flag(
- '--oom-kill-disable',
- help='Whether to disable OOM Killer for the container or not.')
- parser.add_argument(
- '--oom-score-adj',
- choices=range(-1000, 1000),
- metavar='[-1000-1000]',
- help="Tune the host's OOM preferences for containers")
- parser.add_argument(
- '--pid',
- help='Set the PID Namespace mode for the container.'
- '(format: host, container:UUID, ns:PATH)')
- parser.add_argument(
- '--pids-limit',
- type=int,
- metavar='LIMIT',
- help=("Tune the container's pids limit."
- " Set -1 to have unlimited pids for the container."))
- parser.add_argument('--pod', help='Run container in an existing pod')
- parser.add_flag(
- '--privileged',
- help='Give extended privileges to this container.')
- parser.add_argument(
- '--publish',
- '-p',
- metavar='RANGE',
- help="Publish a container's port, or range of ports, to the host")
- parser.add_flag(
- '--publish-all',
- '-P',
- help='Publish all exposed ports to random'
- ' ports on the host interfaces.')
- parser.add_flag(
- '--quiet',
- '-q',
- help='Suppress output information when pulling images')
- parser.add_flag(
- '--read-only',
- help="Mount the container's root filesystem as read only.")
- parser.add_flag(
- '--rm',
- help='Automatically remove the container when it exits.')
- parser.add_argument(
- '--rootfs',
- help='If specified, the first argument refers to an'
- ' exploded container on the file system of remote host.')
- parser.add_argument(
- '--security-opt',
- action='append',
- metavar='OPT',
- help='Set security options.')
- parser.add_argument(
- '--shm-size', action=UnitAction, help='Size of /dev/shm')
- parser.add_flag(
- '--sig-proxy',
- help='Proxy signals sent to the podman run'
- ' command to the container process')
- parser.add_argument(
- '--stop-signal',
- action=SignalAction,
- default='TERM',
- help='Signal to stop a container')
- parser.add_argument(
- '--stop-timeout',
- metavar='TIMEOUT',
- type=int,
- default=10,
- help='Seconds to wait on stopping container.')
- parser.add_argument(
- '--subgidname',
- metavar='MAP',
- help='Name for GID map from the /etc/subgid file')
- parser.add_argument(
- '--subuidname',
- metavar='MAP',
- help='Name for UID map from the /etc/subuid file')
- parser.add_argument(
- '--sysctl',
- action='append',
- help='Configure namespaced kernel parameters at runtime')
- parser.add_argument(
- '--tmpfs',
- action='append',
- metavar='MOUNT',
- help='Create a tmpfs mount.'
- ' (default: rw,noexec,nosuid,nodev,size=65536k.)')
- parser.add_flag(
- '--tty',
- '-t',
- help='Allocate a pseudo-TTY for standard input of container.')
- parser.add_argument(
- '--uidmap',
- action='append',
- metavar='MAP',
- help='UID map for the user namespace')
- parser.add_argument(
- '--ulimit',
- action='append',
- metavar='OPT',
- help='Ulimit options',
- )
- parser.add_argument(
- '--user',
- '-u',
- help='Sets the username or UID used and optionally'
- ' the groupname or GID for the specified command.')
- parser.add_argument(
- '--userns',
- metavar='NAMESPACE',
- help='Set the user namespace mode for the container')
- parser.add_argument(
- '--uts',
- choices=('host', 'ns'),
- type=str.lower,
- help='Set the UTS mode for the container')
- parser.add_argument('--volume', '-v', help='Create a bind mount.')
- parser.add_argument(
- '--volumes-from',
- action='append',
- help='Mount volumes from the specified container(s).')
- parser.add_argument(
- '--workdir',
- '-w',
- metavar='PATH',
- help='Working directory inside the container')
diff --git a/contrib/python/pypodman/pypodman/lib/actions/attach_action.py b/contrib/python/pypodman/pypodman/lib/actions/attach_action.py
deleted file mode 100644
index e9829e894..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/attach_action.py
+++ /dev/null
@@ -1,68 +0,0 @@
-"""Remote client command for attaching to a container."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class Attach(AbstractActionBase):
- """Class for attaching to a running container."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Attach command to parent parser."""
- parser = parent.add_parser('attach', help='attach to container')
- parser.add_argument(
- '--image',
- help='image to instantiate and attach to',
- )
- parser.add_argument(
- 'command',
- nargs='*',
- help='image to instantiate and attach to',
- )
- parser.set_defaults(class_=cls, method='attach')
-
- def __init__(self, args):
- """Construct Attach class."""
- super().__init__(args)
- if not args.image:
- raise ValueError('You must supply one image id'
- ' or name to be attached.')
-
- def attach(self):
- """Attach to instantiated image."""
- args = {
- 'detach': True,
- 'tty': True,
- }
- if self._args.command:
- args['command'] = self._args.command
-
- try:
- try:
- ident = self.client.images.pull(self._args.image)
- img = self.client.images.get(ident)
- except podman.ImageNotFound as e:
- sys.stdout.flush()
- print(
- 'Image {} not found.'.format(e.name),
- file=sys.stderr,
- flush=True)
- return 1
-
- ctnr = img.create(**args)
- ctnr.attach(eot=4)
-
- try:
- ctnr.start()
- print()
- except (BrokenPipeError, KeyboardInterrupt):
- print('\nContainer disconnected.')
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
diff --git a/contrib/python/pypodman/pypodman/lib/actions/commit_action.py b/contrib/python/pypodman/pypodman/lib/actions/commit_action.py
deleted file mode 100644
index c166e1aff..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/commit_action.py
+++ /dev/null
@@ -1,99 +0,0 @@
-"""Remote client command for creating image from container."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase, ChangeAction
-
-
-class Commit(AbstractActionBase):
- """Class for creating image from container."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Commit command to parent parser."""
- parser = parent.add_parser(
- 'commit',
- help='create image from container',
- )
- parser.add_argument(
- '--author',
- help='Set the author for the committed image',
- )
- parser.add_argument(
- '--change',
- '-c',
- action=ChangeAction,
- )
- parser.add_argument(
- '--format',
- '-f',
- choices=('oci', 'docker'),
- default='oci',
- type=str.lower,
- help='Set the format of the image manifest and metadata.'
- ' (Ignored.)',
- )
- parser.add_argument(
- '--iidfile',
- metavar='PATH',
- help='Write the image ID to the file',
- )
- parser.add_argument(
- '--message',
- '-m',
- help='Set commit message for committed image'
- ' (Only on docker images.)',
- )
- parser.add_flag(
- '--pause',
- '-p',
- help='Pause the container when creating an image',
- )
- parser.add_flag(
- '--quiet',
- '-q',
- help='Suppress output',
- )
- parser.add_argument(
- 'container',
- nargs=1,
- help='container to use as source',
- )
- parser.add_argument(
- 'image',
- nargs=1,
- help='image name to create',
- )
- parser.set_defaults(class_=cls, method='commit')
-
- def commit(self):
- """Create image from container."""
- try:
- try:
- ctnr = self.client.containers.get(self._args.container[0])
- except podman.ContainerNotFound as e:
- sys.stdout.flush()
- print(
- 'Container {} not found.'.format(e.name),
- file=sys.stderr,
- flush=True)
- return 1
- else:
- ident = ctnr.commit(
- self.opts['image'][0],
- change=self.opts.get('change', None),
- message=self.opts.get('message', None),
- pause=self.opts['pause'],
- author=self.opts.get('author', None),
- )
-
- if not self.opts['quiet']:
- print(ident)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/create_action.py b/contrib/python/pypodman/pypodman/lib/actions/create_action.py
deleted file mode 100644
index 26a312bb1..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/create_action.py
+++ /dev/null
@@ -1,55 +0,0 @@
-"""Remote client command for creating container from image."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-from ._create_args import CreateArguments
-
-
-class Create(AbstractActionBase):
- """Class for creating container from image."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Create command to parent parser."""
- parser = parent.add_parser(
- 'create', help='create container from image')
-
- CreateArguments.add_arguments(parser)
-
- parser.add_argument('image', nargs=1, help='source image id')
- parser.add_argument(
- 'command',
- nargs=parent.REMAINDER,
- help='command and args to run.',
- )
- parser.set_defaults(class_=cls, method='create')
-
- def __init__(self, args):
- """Construct Create class."""
- super().__init__(args)
-
- # image id used only on client
- del self.opts['image']
-
- def create(self):
- """Create container."""
- try:
- for ident in self._args.image:
- try:
- img = self.client.images.get(ident)
- img.container(**self.opts)
- print(ident)
- except podman.ImageNotFound as e:
- sys.stdout.flush()
- print(
- 'Image {} not found.'.format(e.name),
- file=sys.stderr,
- flush=True)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/export_action.py b/contrib/python/pypodman/pypodman/lib/actions/export_action.py
deleted file mode 100644
index 7ef178c4c..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/export_action.py
+++ /dev/null
@@ -1,54 +0,0 @@
-"""Remote client command for export container filesystem to tarball."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class Export(AbstractActionBase):
- """Class for exporting container filesystem to tarball."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Export command to parent parser."""
- parser = parent.add_parser(
- 'export',
- help='export container to tarball',
- )
- parser.add_argument(
- '--output',
- '-o',
- metavar='PATH',
- nargs=1,
- required=True,
- help='Write to this file on host',
- )
- parser.add_argument(
- 'container',
- nargs=1,
- help='container to use as source',
- )
- parser.set_defaults(class_=cls, method='export')
-
- def export(self):
- """Create tarball from container filesystem."""
- try:
- try:
- ctnr = self.client.containers.get(self._args.container[0])
- except podman.ContainerNotFound as e:
- sys.stdout.flush()
- print(
- 'Container {} not found.'.format(e.name),
- file=sys.stderr,
- flush=True)
- return 1
- else:
- ctnr.export(self._args.output[0])
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/history_action.py b/contrib/python/pypodman/pypodman/lib/actions/history_action.py
deleted file mode 100644
index 76c3ad756..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/history_action.py
+++ /dev/null
@@ -1,79 +0,0 @@
-"""Remote client for reporting image history."""
-import json
-from collections import OrderedDict
-
-import humanize
-
-import podman
-from pypodman.lib import AbstractActionBase, Report, ReportColumn
-
-
-class History(AbstractActionBase):
- """Class for reporting Image History."""
-
- @classmethod
- def subparser(cls, parent):
- """Add History command to parent parser."""
- parser = parent.add_parser('history', help='report image history')
- super().subparser(parser)
- parser.add_flag(
- '--human',
- '-H',
- help='Display sizes and dates in human readable format.')
- parser.add_argument(
- '--format',
- choices=('json', 'table'),
- help="Alter the output for a format like 'json' or 'table'."
- " (default: table)")
- parser.add_argument(
- 'image', nargs='+', help='image for history report')
- parser.set_defaults(class_=cls, method='history')
-
- def __init__(self, args):
- """Construct History class."""
- super().__init__(args)
-
- self.columns = OrderedDict({
- 'id':
- ReportColumn('id', 'ID', 12),
- 'created':
- ReportColumn('created', 'CREATED', 11),
- 'createdBy':
- ReportColumn('createdBy', 'CREATED BY', 45),
- 'size':
- ReportColumn('size', 'SIZE', 8),
- 'comment':
- ReportColumn('comment', 'COMMENT', 0)
- })
-
- def history(self):
- """Report image history."""
- rows = list()
- for ident in self._args.image:
- for details in self.client.images.get(ident).history():
- fields = dict(details._asdict())
-
- if self._args.human:
- fields.update({
- 'size':
- humanize.naturalsize(details.size),
- 'created':
- humanize.naturaldate(
- podman.datetime_parse(details.created)),
- })
- del fields['tags']
-
- rows.append(fields)
-
- if self._args.quiet:
- for row in rows:
- ident = row['id'][:12] if self._args.truncate else row['id']
- print(ident)
- elif self._args.format == 'json':
- print(json.dumps(rows, indent=2), flush=True)
- else:
- with Report(self.columns, heading=self._args.heading) as report:
- report.layout(
- rows, self.columns.keys(), truncate=self._args.truncate)
- for row in rows:
- report.row(**row)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/images_action.py b/contrib/python/pypodman/pypodman/lib/actions/images_action.py
deleted file mode 100644
index 21376eeeb..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/images_action.py
+++ /dev/null
@@ -1,86 +0,0 @@
-"""Remote client commands dealing with images."""
-import operator
-from collections import OrderedDict
-
-import humanize
-
-import podman
-from pypodman.lib import AbstractActionBase, Report, ReportColumn
-
-
-class Images(AbstractActionBase):
- """Class for Image manipulation."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Images commands to parent parser."""
- parser = parent.add_parser('images', help='list images')
- super().subparser(parser)
- parser.add_argument(
- '--sort',
- choices=['created', 'id', 'repository', 'size', 'tag'],
- default='created',
- type=str.lower,
- help=('Change sort ordered of displayed images.'
- ' (default: %(default)s)'))
-
- parser.add_flag(
- '--digests',
- help='Include digests with images.')
- parser.set_defaults(class_=cls, method='list')
-
- def __init__(self, args):
- """Construct Images class."""
- super().__init__(args)
-
- self.columns = OrderedDict({
- 'name':
- ReportColumn('name', 'REPOSITORY', 0),
- 'tag':
- ReportColumn('tag', 'TAG', 10),
- 'id':
- ReportColumn('id', 'IMAGE ID', 12),
- 'created':
- ReportColumn('created', 'CREATED', 12),
- 'size':
- ReportColumn('size', 'SIZE', 8),
- 'repoDigests':
- ReportColumn('repoDigests', 'DIGESTS', 35),
- })
-
- def list(self):
- """List images."""
- images = sorted(
- self.client.images.list(),
- key=operator.attrgetter(self._args.sort))
- if not images:
- return
-
- rows = list()
- for image in images:
- fields = dict(image)
- fields.update({
- 'created':
- humanize.naturaldate(podman.datetime_parse(image.created)),
- 'size':
- humanize.naturalsize(int(image.size)),
- 'repoDigests':
- ' '.join(image.repoDigests),
- })
-
- for r in image.repoTags:
- name, tag = r.rsplit(':', 1)
- fields.update({
- 'name': name,
- 'tag': tag,
- })
- rows.append(fields)
-
- if not self._args.digests:
- del self.columns['repoDigests']
-
- with Report(self.columns, heading=self._args.heading) as report:
- report.layout(
- rows, self.columns.keys(), truncate=self._args.truncate)
- for row in rows:
- report.row(**row)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/import_action.py b/contrib/python/pypodman/pypodman/lib/actions/import_action.py
deleted file mode 100644
index 43448144a..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/import_action.py
+++ /dev/null
@@ -1,69 +0,0 @@
-"""Remote client command to import tarball as image filesystem."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase, ChangeAction
-
-
-class Import(AbstractActionBase):
- """Class for importing tarball as image filesystem."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Import command to parent parser."""
- parser = parent.add_parser(
- 'import',
- help='import tarball as image filesystem',
- )
- parser.add_argument(
- '--change',
- '-c',
- action=ChangeAction,
- )
- parser.add_argument(
- '--message',
- '-m',
- help='Set commit message for imported image.',
- )
- parser.add_argument(
- 'source',
- metavar='PATH',
- nargs=1,
- help='tarball to use as source on remote system',
- )
- parser.add_argument(
- 'reference',
- metavar='TAG',
- nargs='*',
- help='Optional tag for image. (default: None)',
- )
- parser.set_defaults(class_=cls, method='import_')
-
- def import_(self):
- """Import tarball as image filesystem."""
- # ImportImage() validates it's parameters therefore we need to create
- # pristine dict() for keywords
- options = {}
- if 'message' in self.opts:
- options['message'] = self.opts['message']
- if 'change' in self.opts and self.opts['change']:
- options['changes'] = self.opts['change']
-
- reference = self.opts['reference'][0] if 'reference' in self.opts\
- else None
-
- try:
- ident = self.client.images.import_image(
- self.opts['source'][0],
- reference,
- **options,
- )
- print(ident)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/info_action.py b/contrib/python/pypodman/pypodman/lib/actions/info_action.py
deleted file mode 100644
index 3c854a358..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/info_action.py
+++ /dev/null
@@ -1,45 +0,0 @@
-"""Remote client command for reporting on Podman service."""
-import json
-import sys
-
-import podman
-import yaml
-from pypodman.lib import AbstractActionBase
-
-
-class Info(AbstractActionBase):
- """Class for reporting on Podman Service."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Info command to parent parser."""
- parser = parent.add_parser(
- 'info', help='report info on podman service')
- parser.add_argument(
- '--format',
- choices=('json', 'yaml'),
- help="Alter the output for a format like 'json' or 'yaml'."
- " (default: yaml)")
- parser.set_defaults(class_=cls, method='info')
-
- def info(self):
- """Report on Podman Service."""
- try:
- info = self.client.system.info()
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- else:
- if self._args.format == 'json':
- print(json.dumps(info._asdict(), indent=2), flush=True)
- else:
- print(
- yaml.dump(
- dict(info._asdict()),
- canonical=False,
- default_flow_style=False),
- flush=True)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/inspect_action.py b/contrib/python/pypodman/pypodman/lib/actions/inspect_action.py
deleted file mode 100644
index ca5ad2215..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/inspect_action.py
+++ /dev/null
@@ -1,89 +0,0 @@
-"""Remote client command for inspecting podman objects."""
-import json
-import logging
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class Inspect(AbstractActionBase):
- """Class for inspecting podman objects."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Inspect command to parent parser."""
- parser = parent.add_parser('inspect', help='inspect objects')
- parser.add_argument(
- '--type',
- '-t',
- choices=('all', 'container', 'image'),
- default='all',
- type=str.lower,
- help='Type of object to inspect',
- )
- parser.add_flag(
- '--size',
- help='Display the total file size if the type is a container.')
- parser.add_argument(
- 'objects',
- nargs='+',
- help='objects to inspect',
- )
- parser.set_defaults(class_=cls, method='inspect')
-
- def _get_container(self, ident):
- try:
- logging.debug("Getting container %s", ident)
- ctnr = self.client.containers.get(ident)
- except podman.ContainerNotFound:
- pass
- else:
- return ctnr.inspect()
-
- def _get_image(self, ident):
- try:
- logging.debug("Getting image %s", ident)
- img = self.client.images.get(ident)
- except podman.ImageNotFound:
- pass
- else:
- return img.inspect()
-
- def inspect(self):
- """Inspect provided podman objects."""
- output = []
- try:
- for ident in self._args.objects:
- obj = None
-
- if self._args.type in ('all', 'container'):
- obj = self._get_container(ident)
- if obj is None and self._args.type in ('all', 'image'):
- obj = self._get_image(ident)
-
- if obj is None:
- if self._args.type == 'container':
- msg = 'Container "{}" not found'.format(ident)
- elif self._args.type == 'image':
- msg = 'Image "{}" not found'.format(ident)
- else:
- msg = 'Object "{}" not found'.format(ident)
- print(msg, file=sys.stderr, flush=True)
- else:
- fields = obj._asdict()
- if not self._args.size:
- try:
- del fields['sizerootfs']
- except KeyError:
- pass
- output.append(fields)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- else:
- print(json.dumps(output, indent=2))
diff --git a/contrib/python/pypodman/pypodman/lib/actions/kill_action.py b/contrib/python/pypodman/pypodman/lib/actions/kill_action.py
deleted file mode 100644
index e8fb4e74d..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/kill_action.py
+++ /dev/null
@@ -1,49 +0,0 @@
-"""Remote client command for signaling podman containers."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase, SignalAction
-
-
-class Kill(AbstractActionBase):
- """Class for sending signal to main process in container."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Kill command to parent parser."""
- parser = parent.add_parser('kill', help='signal container')
- parser.add_argument(
- '--signal',
- '-s',
- action=SignalAction,
- default=9,
- help='Signal to send to the container. (default: %(default)s)')
- parser.add_argument(
- 'containers',
- nargs='+',
- help='containers to signal',
- )
- parser.set_defaults(class_=cls, method='kill')
-
- def kill(self):
- """Signal provided containers."""
- try:
- for ident in self._args.containers:
- try:
- ctnr = self.client.containers.get(ident)
- ctnr.kill(self._args.signal)
- except podman.ContainerNotFound as e:
- sys.stdout.flush()
- print(
- 'Container "{}" not found'.format(e.name),
- file=sys.stderr,
- flush=True)
- else:
- print(ident)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
diff --git a/contrib/python/pypodman/pypodman/lib/actions/logs_action.py b/contrib/python/pypodman/pypodman/lib/actions/logs_action.py
deleted file mode 100644
index 91ff7bb08..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/logs_action.py
+++ /dev/null
@@ -1,61 +0,0 @@
-"""Remote client command for retrieving container logs."""
-import argparse
-import logging
-import sys
-from collections import deque
-
-import podman
-from pypodman.lib import AbstractActionBase, PositiveIntAction
-
-
-class Logs(AbstractActionBase):
- """Class for retrieving logs from container."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Logs command to parent parser."""
- parser = parent.add_parser('logs', help='retrieve logs from container')
- parser.add_argument(
- '--tail',
- metavar='LINES',
- action=PositiveIntAction,
- help='Output the specified number of LINES at the end of the logs')
- parser.add_argument(
- 'container',
- nargs=1,
- help='retrieve container logs',
- )
- parser.set_defaults(class_=cls, method='logs')
-
- def __init__(self, args):
- """Construct Logs class."""
- super().__init__(args)
-
- def logs(self):
- """Retrieve logs from containers."""
- try:
- ident = self._args.container[0]
- try:
- logging.debug('Get container "%s" logs', ident)
- ctnr = self.client.containers.get(ident)
- except podman.ContainerNotFound as e:
- sys.stdout.flush()
- print(
- 'Container "{}" not found'.format(e.name),
- file=sys.stderr,
- flush=True)
- else:
- if self._args.tail:
- logs = iter(deque(ctnr.logs(), maxlen=self._args.tail))
- else:
- logs = ctnr.logs()
-
- for line in logs:
- sys.stdout.write(line)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
diff --git a/contrib/python/pypodman/pypodman/lib/actions/mount_action.py b/contrib/python/pypodman/pypodman/lib/actions/mount_action.py
deleted file mode 100644
index 905eda6da..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/mount_action.py
+++ /dev/null
@@ -1,78 +0,0 @@
-"""Remote client command for retrieving mounts from containers."""
-import sys
-from collections import OrderedDict
-
-import podman
-from pypodman.lib import AbstractActionBase, Report, ReportColumn
-
-
-class Mount(AbstractActionBase):
- """Class for retrieving mounts from container."""
-
- @classmethod
- def subparser(cls, parent):
- """Add mount command to parent parser."""
- parser = parent.add_parser(
- 'mount', help='retrieve mounts from containers.')
- super().subparser(parser)
- parser.add_argument(
- 'containers',
- nargs='*',
- help='containers to list ports',
- )
- parser.set_defaults(class_=cls, method='mount')
-
- def __init__(self, args):
- """Construct Mount class."""
- super().__init__(args)
-
- self.columns = OrderedDict({
- 'id':
- ReportColumn('id', 'CONTAINER ID', 14),
- 'destination':
- ReportColumn('destination', 'DESTINATION', 0)
- })
-
- def mount(self):
- """Retrieve mounts from containers."""
- try:
- ctnrs = []
- if not self._args.containers:
- ctnrs = self.client.containers.list()
- else:
- for ident in self._args.containers:
- try:
- ctnrs.append(self.client.containers.get(ident))
- except podman.ContainerNotFound as e:
- sys.stdout.flush()
- print(
- 'Container "{}" not found'.format(e.name),
- file=sys.stderr,
- flush=True)
-
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
-
- if not ctnrs:
- print(
- 'Unable to find any containers.', file=sys.stderr, flush=True)
- return 1
-
- rows = list()
- for ctnr in ctnrs:
- details = ctnr.inspect()
- rows.append({
- 'id': ctnr.id,
- 'destination': details.graphdriver['data']['mergeddir']
- })
-
- with Report(self.columns, heading=self._args.heading) as report:
- report.layout(
- rows, self.columns.keys(), truncate=self._args.truncate)
- for row in rows:
- report.row(**row)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pause_action.py b/contrib/python/pypodman/pypodman/lib/actions/pause_action.py
deleted file mode 100644
index 7dc02f7fe..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pause_action.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""Remote client command for pausing processes in containers."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class Pause(AbstractActionBase):
- """Class for pausing processes in container."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pause command to parent parser."""
- parser = parent.add_parser('pause', help='pause container processes')
- parser.add_argument(
- 'containers',
- nargs='+',
- help='containers to pause',
- )
- parser.set_defaults(class_=cls, method='pause')
-
- def pause(self):
- """Pause provided containers."""
- try:
- for ident in self._args.containers:
- try:
- ctnr = self.client.containers.get(ident)
- ctnr.pause()
- except podman.ContainerNotFound as e:
- sys.stdout.flush()
- print(
- 'Container "{}" not found'.format(e.name),
- file=sys.stderr,
- flush=True)
- else:
- print(ident)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod/__init__.py b/contrib/python/pypodman/pypodman/lib/actions/pod/__init__.py
deleted file mode 100644
index 91c54f417..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""Provide subparsers for pod commands."""
-from pypodman.lib.actions.pod.create_parser import CreatePod
-from pypodman.lib.actions.pod.inspect_parser import InspectPod
-from pypodman.lib.actions.pod.kill_parser import KillPod
-from pypodman.lib.actions.pod.pause_parser import PausePod
-from pypodman.lib.actions.pod.processes_parser import ProcessesPod
-from pypodman.lib.actions.pod.remove_parser import RemovePod
-from pypodman.lib.actions.pod.start_parser import StartPod
-from pypodman.lib.actions.pod.stop_parser import StopPod
-from pypodman.lib.actions.pod.top_parser import TopPod
-from pypodman.lib.actions.pod.unpause_parser import UnpausePod
-
-__all__ = [
- 'CreatePod',
- 'InspectPod',
- 'KillPod',
- 'PausePod',
- 'ProcessesPod',
- 'RemovePod',
- 'StartPod',
- 'StopPod',
- 'TopPod',
- 'UnpausePod',
-]
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod/create_parser.py b/contrib/python/pypodman/pypodman/lib/actions/pod/create_parser.py
deleted file mode 100644
index 4e0bde777..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod/create_parser.py
+++ /dev/null
@@ -1,76 +0,0 @@
-"""Remote client command for creating pod."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class CreatePod(AbstractActionBase):
- """Implement Create Pod command."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pod Create command to parent parser."""
- parser = parent.add_parser('create', help='create pod')
- super().subparser(parser)
-
- parser.add_argument(
- '--cgroup-parent',
- dest='cgroupparent',
- type=str,
- help='Path to cgroups under which the'
- ' cgroup for the pod will be created.')
- parser.add_flag(
- '--infra',
- help='Create an infra container and associate it with the pod.')
- parser.add_argument(
- '-l',
- '--label',
- dest='labels',
- action='append',
- type=str,
- help='Add metadata to a pod (e.g., --label=com.example.key=value)')
- parser.add_argument(
- '-n',
- '--name',
- dest='ident',
- type=str,
- help='Assign name to the pod')
- parser.add_argument(
- '--share',
- choices=('ipc', 'net', 'pid', 'user', 'uts'),
- help='Comma deliminated list of kernel namespaces to share')
-
- parser.set_defaults(class_=cls, method='create')
-
- # TODO: Add golang CLI arguments not included in API.
- # parser.add_argument(
- # '--infra-command',
- # default='/pause',
- # help='Command to run to start the infra container.'
- # '(default: %(default)s)')
- # parser.add_argument(
- # '--infra-image',
- # default='k8s.gcr.io/pause:3.1',
- # help='Image to create for the infra container.'
- # '(default: %(default)s)')
- # parser.add_argument(
- # '--podidfile',
- # help='Write the pod ID to given file name on remote host')
-
- def create(self):
- """Create Pod from given options."""
- config = {}
- for key in ('ident', 'cgroupparent', 'infra', 'labels', 'share'):
- config[key] = self.opts.get(key)
-
- try:
- pod = self.client.pods.create(**config)
- except podman.ErrorOccurred as ex:
- sys.stdout.flush()
- print(
- '{}'.format(ex.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- else:
- print(pod.id)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod/inspect_parser.py b/contrib/python/pypodman/pypodman/lib/actions/pod/inspect_parser.py
deleted file mode 100644
index 3c42d636c..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod/inspect_parser.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""Remote client command for inspecting pods."""
-import json
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class InspectPod(AbstractActionBase):
- """Class for reporting on pods and their containers."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pod Inspect command to parent parser."""
- parser = parent.add_parser(
- 'inspect',
- help='configuration and state information about a given pod')
- parser.add_argument('pod', nargs='+', help='pod(s) to inspect')
- parser.set_defaults(class_=cls, method='inspect')
-
- def inspect(self):
- """Report on provided pods."""
- output = {}
- try:
- for ident in self._args.pod:
- try:
- pod = self.client.pods.get(ident)
- except podman.PodNotFound:
- print(
- 'Pod "{}" not found.'.format(ident),
- file=sys.stdout,
- flush=True)
- output.update(pod.inspect()._asdict())
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- else:
- print(json.dumps(output, indent=2))
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod/kill_parser.py b/contrib/python/pypodman/pypodman/lib/actions/pod/kill_parser.py
deleted file mode 100644
index 9b6229939..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod/kill_parser.py
+++ /dev/null
@@ -1,57 +0,0 @@
-"""Remote client command for signaling pods and their containers."""
-import signal
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase, SignalAction
-from pypodman.lib import query_model as query_pods
-
-
-class KillPod(AbstractActionBase):
- """Class for sending signal to processes in pod."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pod Kill command to parent parser."""
- parser = parent.add_parser('kill', help='signal containers in pod')
-
- parser.add_flag(
- '--all',
- '-a',
- help='Sends signal to all pods.')
- parser.add_argument(
- '-s',
- '--signal',
- action=SignalAction,
- default=9,
- help='Signal to send to the pod. (default: %(default)s)')
- parser.add_argument('pod', nargs='*', help='pod(s) to signal')
- parser.set_defaults(class_=cls, method='kill')
-
- def __init__(self, args):
- """Construct Pod Kill object."""
- if args.all and args.pod:
- raise ValueError('You may give a pod or use --all, but not both')
- super().__init__(args)
-
- def kill(self):
- """Signal provided pods."""
- idents = None if self._args.all else self._args.pod
- pods = query_pods(self.client.pods, idents)
-
- for pod in pods:
- try:
- pod.kill(self._args.signal)
- print(pod.id)
- except podman.PodNotFound as ex:
- print(
- 'Pod "{}" not found.'.format(ex.name),
- file=sys.stderr,
- flush=True)
- except podman.ErrorOccurred as e:
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod/pause_parser.py b/contrib/python/pypodman/pypodman/lib/actions/pod/pause_parser.py
deleted file mode 100644
index c751314ca..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod/pause_parser.py
+++ /dev/null
@@ -1,49 +0,0 @@
-"""Remote client command for pausing processes in pod."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-from pypodman.lib import query_model as query_pods
-
-
-class PausePod(AbstractActionBase):
- """Class for pausing containers in pod."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pod Pause command to parent parser."""
- parser = parent.add_parser('pause', help='pause containers in pod')
- parser.add_flag(
- '--all',
- '-a',
- help='Pause all pods.')
- parser.add_argument('pod', nargs='*', help='pod(s) to pause.')
- parser.set_defaults(class_=cls, method='pause')
-
- def __init__(self, args):
- """Construct Pod Pause object."""
- if args.all and args.pod:
- raise ValueError('You may give a pod or use --all, but not both')
- super().__init__(args)
-
- def pause(self):
- """Pause containers in provided Pod."""
- idents = None if self._args.all else self._args.pod
- pods = query_pods(self.client.pods, idents)
-
- for pod in pods:
- try:
- pod.pause()
- print(pod.id)
- except podman.PodNotFound as ex:
- print(
- 'Pod "{}" not found'.format(ex.name),
- file=sys.stderr,
- flush=True)
- except podman.ErrorOccurred as ex:
- print(
- '{}'.format(ex.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod/processes_parser.py b/contrib/python/pypodman/pypodman/lib/actions/pod/processes_parser.py
deleted file mode 100644
index 855e313c7..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod/processes_parser.py
+++ /dev/null
@@ -1,94 +0,0 @@
-"""Report on pod's containers' processes."""
-import operator
-from collections import OrderedDict
-
-from pypodman.lib import AbstractActionBase, Report, ReportColumn
-
-
-class ProcessesPod(AbstractActionBase):
- """Report on Pod's processes."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pod Ps command to parent parser."""
- parser = parent.add_parser('ps', help='list processes of pod')
- super().subparser(parser)
-
- parser.add_flag(
- '--ctr-names',
- help='Include container name in the info field.')
- parser.add_flag(
- '--ctr-ids',
- help='Include container ID in the info field.')
- parser.add_flag(
- '--ctr-status',
- help='Include container status in the info field.')
- parser.add_argument(
- '--format',
- choices=('json'),
- help='Pretty-print containers to JSON')
- parser.add_argument(
- '--sort',
- choices=('created', 'id', 'name', 'status', 'count'),
- default='created',
- type=str.lower,
- help='Sort on given field. (default: %(default)s)')
- parser.add_argument('--filter', help='Not Implemented')
- parser.set_defaults(class_=cls, method='processes')
-
- def __init__(self, args):
- """Construct ProcessesPod class."""
- if args.sort == 'created':
- args.sort = 'createdat'
- elif args.sort == 'count':
- args.sort = 'numberofcontainers'
-
- super().__init__(args)
-
- self.columns = OrderedDict({
- 'id':
- ReportColumn('id', 'POD ID', 14),
- 'name':
- ReportColumn('name', 'NAME', 30),
- 'status':
- ReportColumn('status', 'STATUS', 8),
- 'numberofcontainers':
- ReportColumn('numberofcontainers', 'NUMBER OF CONTAINERS', 0),
- 'info':
- ReportColumn('info', 'CONTAINER INFO', 0),
- })
-
- def processes(self):
- """List pods."""
- pods = sorted(
- self.client.pods.list(), key=operator.attrgetter(self._args.sort))
- if not pods:
- return
-
- rows = list()
- for pod in pods:
- fields = dict(pod)
- if self._args.ctr_ids \
- or self._args.ctr_names \
- or self._args.ctr_status:
- keys = ('id', 'name', 'status', 'info')
- info = []
- for ctnr in pod.containersinfo:
- ctnr_info = []
- if self._args.ctr_ids:
- ctnr_info.append(ctnr['id'])
- if self._args.ctr_names:
- ctnr_info.append(ctnr['name'])
- if self._args.ctr_status:
- ctnr_info.append(ctnr['status'])
- info.append("[ {} ]".format(" ".join(ctnr_info)))
- fields.update({'info': " ".join(info)})
- else:
- keys = ('id', 'name', 'status', 'numberofcontainers')
-
- rows.append(fields)
-
- with Report(self.columns, heading=self._args.heading) as report:
- report.layout(rows, keys, truncate=self._args.truncate)
- for row in rows:
- report.row(**row)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod/remove_parser.py b/contrib/python/pypodman/pypodman/lib/actions/pod/remove_parser.py
deleted file mode 100644
index 289325d14..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod/remove_parser.py
+++ /dev/null
@@ -1,54 +0,0 @@
-"""Remote client command for deleting pod and containers."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-from pypodman.lib import query_model as query_pods
-
-
-class RemovePod(AbstractActionBase):
- """Class for removing pod and containers from storage."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pod Rm command to parent parser."""
- parser = parent.add_parser('rm', help='Delete pod and container(s)')
- parser.add_flag(
- '--all',
- '-a',
- help='Remove all pods.')
- parser.add_flag(
- '--force',
- '-f',
- help='Stop and remove container(s) then delete pod.')
- parser.add_argument(
- 'pod', nargs='*', help='Pod to remove. Or, use --all')
- parser.set_defaults(class_=cls, method='remove')
-
- def __init__(self, args):
- """Construct RemovePod object."""
- if args.all and args.pod:
- raise ValueError('You may give a pod or use --all, but not both')
- super().__init__(args)
-
- def remove(self):
- """Remove pod and container(s)."""
- idents = None if self._args.all else self._args.pod
- pods = query_pods(self.client.pods, idents)
-
- for pod in pods:
- try:
- pod.remove(self._args.force)
- print(pod.id)
- except podman.PodNotFound as ex:
- print(
- 'Pod "{}" not found.'.format(ex.name),
- file=sys.stderr,
- flush=True)
- except podman.ErrorOccurred as ex:
- print(
- '{}'.format(ex.reason).capitalize,
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod/restart_parser.py b/contrib/python/pypodman/pypodman/lib/actions/pod/restart_parser.py
deleted file mode 100644
index 53f45b6de..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod/restart_parser.py
+++ /dev/null
@@ -1,50 +0,0 @@
-"""Remote client command for restarting pod and container(s)."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-from pypodman.lib import query_model as query_pods
-
-
-class RestartPod(AbstractActionBase):
- """Class for restarting containers in Pod."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pod Restart command to parent parser."""
- parser = parent.add_parser('restart', help='restart containers in pod')
- parser.add_flag(
- '--all',
- '-a',
- help='Restart all pods.')
- parser.add_argument(
- 'pod', nargs='*', help='Pod to restart. Or, use --all')
- parser.set_defaults(class_=cls, method='restart')
-
- def __init__(self, args):
- """Construct RestartPod object."""
- if args.all and args.pod:
- raise ValueError('You may give a pod or use --all, not both')
- super().__init__(args)
-
- def restart(self):
- """Restart pod and container(s)."""
- idents = None if self._args.all else self._args.pod
- pods = query_pods(self.client.pods, idents)
-
- for pod in pods:
- try:
- pod.restart()
- print(pod.id)
- except podman.PodNotFound as ex:
- print(
- 'Pod "{}" not found.'.format(ex.name),
- file=sys.stderr,
- flush=True)
- except podman.ErrorOccurred as ex:
- print(
- '{}'.format(ex.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod/start_parser.py b/contrib/python/pypodman/pypodman/lib/actions/pod/start_parser.py
deleted file mode 100644
index ff62b839e..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod/start_parser.py
+++ /dev/null
@@ -1,45 +0,0 @@
-"""Remote client command for starting pod and container(s)."""
-
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-from pypodman.lib import query_model as query_pods
-
-
-class StartPod(AbstractActionBase):
- """Class for starting pod and container(s)."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pod Start command to parent parser."""
- parser = parent.add_parser('start', help='start pod')
- parser.add_flag(
- '--all',
- '-a',
- help='Start all pods.')
- parser.add_argument(
- 'pod', nargs='*', help='Pod to start. Or, use --all')
- parser.set_defaults(class_=cls, method='start')
-
- def __init__(self, args):
- """Construct StartPod object."""
- if args.all and args.pod:
- raise ValueError('You may give a pod or use --all, but not both')
- super().__init__(args)
-
- def start(self):
- """Start pod and container(s)."""
- idents = None if self._args.all else self._args.pod
- pods = query_pods(self.client.pods, idents)
-
- for pod in pods:
- try:
- pod.start()
- except podman.ErrorOccurred as ex:
- print(
- '{}'.format(ex.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod/stop_parser.py b/contrib/python/pypodman/pypodman/lib/actions/pod/stop_parser.py
deleted file mode 100644
index cbf2bf1e7..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod/stop_parser.py
+++ /dev/null
@@ -1,44 +0,0 @@
-"""Remote client command for stopping pod and container(s)."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-from pypodman.lib import query_model as query_pods
-
-
-class StopPod(AbstractActionBase):
- """Class for stopping pod and container(s)."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pod Stop command to parent parser."""
- parser = parent.add_parser('stop', help='stop pod')
- parser.add_flag(
- '--all',
- '-a',
- help='Stop all pods.')
- parser.add_argument(
- 'pod', nargs='*', help='Pod to stop. Or, use --all')
- parser.set_defaults(class_=cls, method='stop')
-
- def __init__(self, args):
- """Contruct StopPod object."""
- if args.all and args.pod:
- raise ValueError('You may give a pod or use --all, not both')
- super().__init__(args)
-
- def stop(self):
- """Stop pod and container(s)."""
- idents = None if self._args.all else self._args.pod
- pods = query_pods(self.client.pods, idents)
-
- for pod in pods:
- try:
- pod.stop()
- except podman.ErrorOccurred as ex:
- print(
- '{}'.format(ex.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod/top_parser.py b/contrib/python/pypodman/pypodman/lib/actions/pod/top_parser.py
deleted file mode 100644
index f27d60f14..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod/top_parser.py
+++ /dev/null
@@ -1,35 +0,0 @@
-"""Remote client command for reporting on pod and container(s)."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class TopPod(AbstractActionBase):
- """Report on containers in Pod."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pod Top command to parent parser."""
- parser = parent.add_parser('top', help='report on containers in pod')
- parser.add_argument('pod', nargs=1, help='Pod to report on.')
- parser.set_defaults(class_=cls, method='top')
-
- def top(self):
- """Report on pod and container(s)."""
- try:
- for ident in self._args.pod:
- pod = self.client.pods.get(ident)
- print(pod.top())
- except podman.PodNotFound as ex:
- print(
- 'Pod "{}" not found.'.format(ex.name),
- file=sys.stderr,
- flush=True)
- except podman.ErrorOccurred as ex:
- print(
- '{}'.format(ex.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod/unpause_parser.py b/contrib/python/pypodman/pypodman/lib/actions/pod/unpause_parser.py
deleted file mode 100644
index 5186cf9cc..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod/unpause_parser.py
+++ /dev/null
@@ -1,50 +0,0 @@
-"""Remote client command for unpausing processes in pod."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-from pypodman.lib import query_model as query_pods
-
-
-class UnpausePod(AbstractActionBase):
- """Class for unpausing containers in pod."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pod Unpause command to parent parser."""
- parser = parent.add_parser('unpause', help='unpause pod')
- parser.add_flag(
- '--all',
- '-a',
- help='Unpause all pods.')
- parser.add_argument(
- 'pod', nargs='*', help='Pod to unpause. Or, use --all')
- parser.set_defaults(class_=cls, method='unpause')
-
- def __init__(self, args):
- """Construct Pod Unpause class."""
- if args.all and args.pod:
- raise ValueError('You may give a pod or use --all, but not both')
- super().__init__(args)
-
- def unpause(self):
- """Unpause containers in provided Pod."""
- idents = None if self._args.all else self._args.pod
- pods = query_pods(self.client.pods, idents)
-
- for pod in pods:
- try:
- pod.unpause()
- print(pod.id)
- except podman.PodNotFound as ex:
- print(
- 'Pod "{}" not found'.format(ex.name),
- file=sys.stderr,
- flush=True)
- except podman.ErrorOccurred as ex:
- print(
- '{}'.format(ex.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pod_action.py b/contrib/python/pypodman/pypodman/lib/actions/pod_action.py
deleted file mode 100644
index 4b8997a05..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pod_action.py
+++ /dev/null
@@ -1,36 +0,0 @@
-"""Remote client command for pod subcommands."""
-import inspect
-import logging
-import sys
-
-from pypodman.lib import AbstractActionBase
-
-# pylint: disable=wildcard-import
-# pylint: disable=unused-wildcard-import
-from .pod import *
-
-
-class Pod(AbstractActionBase):
- """Class for creating a pod."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pod Create command to parent parser."""
- pod_parser = parent.add_parser(
- 'pod',
- help='pod commands.'
- ' For subcommands, see: %(prog)s pod --help')
- subparser = pod_parser.add_subparsers()
-
- # pull in plugin(s) code for each subcommand
- for name, obj in inspect.getmembers(
- sys.modules['pypodman.lib.actions.pod'],
- predicate=inspect.isclass):
- if hasattr(obj, 'subparser'):
- try:
- obj.subparser(subparser)
- except NameError as e:
- logging.critical(e)
- logging.warning(
- 'See subparser configuration for Class "%s"', name)
- sys.exit(3)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/port_action.py b/contrib/python/pypodman/pypodman/lib/actions/port_action.py
deleted file mode 100644
index 6913f3813..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/port_action.py
+++ /dev/null
@@ -1,61 +0,0 @@
-"""Remote client command for retrieving ports from containers."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class Port(AbstractActionBase):
- """Class for retrieving ports from container."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Port command to parent parser."""
- parser = parent.add_parser(
- 'port', help='retrieve ports from containers')
- parser.add_flag(
- '--all',
- '-a',
- help='List all known port mappings for running containers')
- parser.add_argument(
- 'containers',
- nargs='*',
- help='containers to list ports',
- )
- parser.set_defaults(class_=cls, method='port')
-
- def __init__(self, args):
- """Construct Port class."""
- if not args.all and not args.containers:
- raise ValueError('You must supply at least one'
- ' container id or name, or --all.')
- super().__init__(args)
-
- def port(self):
- """Retrieve ports from containers."""
- try:
- ctnrs = []
- if self._args.all:
- ctnrs = self.client.containers.list()
- else:
- for ident in self._args.containers:
- try:
- ctnrs.append(self.client.containers.get(ident))
- except podman.ContainerNotFound as e:
- sys.stdout.flush()
- print(
- 'Container "{}" not found'.format(e.name),
- file=sys.stderr,
- flush=True)
-
- for ctnr in ctnrs:
- print("{}\n{}".format(ctnr.id, ctnr.ports))
-
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/ps_action.py b/contrib/python/pypodman/pypodman/lib/actions/ps_action.py
deleted file mode 100644
index 62ceb2e67..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/ps_action.py
+++ /dev/null
@@ -1,80 +0,0 @@
-"""Remote client commands dealing with containers."""
-import operator
-from collections import OrderedDict
-
-import humanize
-
-import podman
-from pypodman.lib import AbstractActionBase, Report, ReportColumn
-
-
-class Ps(AbstractActionBase):
- """Class for Container manipulation."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Images command to parent parser."""
- parser = parent.add_parser('ps', help='list containers')
- super().subparser(parser)
-
- parser.add_argument(
- '--sort',
- choices=('createdat', 'id', 'image', 'names', 'runningfor', 'size',
- 'status'),
- default='createdat',
- type=str.lower,
- help=('Change sort ordered of displayed containers.'
- ' (default: %(default)s)'))
- parser.set_defaults(class_=cls, method='list')
-
- def __init__(self, args):
- """Construct Ps class."""
- super().__init__(args)
-
- self.columns = OrderedDict({
- 'id':
- ReportColumn('id', 'CONTAINER ID', 12),
- 'image':
- ReportColumn('image', 'IMAGE', 31),
- 'command':
- ReportColumn('column', 'COMMAND', 20),
- 'createdat':
- ReportColumn('createdat', 'CREATED', 12),
- 'status':
- ReportColumn('status', 'STATUS', 10),
- 'ports':
- ReportColumn('ports', 'PORTS', 0),
- 'names':
- ReportColumn('names', 'NAMES', 18)
- })
-
- def list(self):
- """List containers."""
- if self._args.all:
- ictnrs = self.client.containers.list()
- else:
- ictnrs = filter(
- lambda c: podman.FoldedString(c['status']) == 'running',
- self.client.containers.list())
-
- # TODO: Verify sorting on dates and size
- ctnrs = sorted(ictnrs, key=operator.attrgetter(self._args.sort))
- if not ctnrs:
- return
-
- rows = list()
- for ctnr in ctnrs:
- fields = dict(ctnr)
- fields.update({
- 'command':
- ' '.join(ctnr.command),
- 'createdat':
- humanize.naturaldate(podman.datetime_parse(ctnr.createdat)),
- })
- rows.append(fields)
-
- with Report(self.columns, heading=self._args.heading) as report:
- report.layout(
- rows, self.columns.keys(), truncate=self._args.truncate)
- for row in rows:
- report.row(**row)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/pull_action.py b/contrib/python/pypodman/pypodman/lib/actions/pull_action.py
deleted file mode 100644
index d8fbfc1f0..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/pull_action.py
+++ /dev/null
@@ -1,46 +0,0 @@
-"""Remote client command for pulling images."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class Pull(AbstractActionBase):
- """Class for retrieving images from repository."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Pull command to parent parser."""
- parser = parent.add_parser(
- 'pull',
- help='retrieve image from repository',
- )
- parser.add_argument(
- 'targets',
- nargs='+',
- help='image id(s) to retrieve.',
- )
- parser.set_defaults(class_=cls, method='pull')
-
- def __init__(self, args):
- """Construct Pull class."""
- super().__init__(args)
-
- def pull(self):
- """Retrieve image."""
- for ident in self._args.targets:
- try:
- self.client.images.pull(ident)
- print(ident)
- except podman.ImageNotFound as e:
- sys.stdout.flush()
- print(
- 'Image {} not found.'.format(e.name),
- file=sys.stderr,
- flush=True)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/push_action.py b/contrib/python/pypodman/pypodman/lib/actions/push_action.py
deleted file mode 100644
index 8e86ca335..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/push_action.py
+++ /dev/null
@@ -1,50 +0,0 @@
-"""Remote client command for pushing image elsewhere."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class Push(AbstractActionBase):
- """Class for pushing images to repository."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Push command to parent parser."""
- parser = parent.add_parser(
- 'push',
- help='push image elsewhere',
- )
- parser.add_flag(
- '--tlsverify',
- help='Require HTTPS and verify certificates when'
- ' contacting registries.')
- parser.add_argument(
- 'image', nargs=1, help='name or id of image to push')
- parser.add_argument(
- 'tag',
- nargs=1,
- help='destination image id',
- )
- parser.set_defaults(class_=cls, method='push')
-
- def pull(self):
- """Store image elsewhere."""
- try:
- try:
- img = self.client.images.get(self._args.image[0])
- except podman.ImageNotFound as e:
- sys.stdout.flush()
- print(
- 'Image {} not found.'.format(e.name),
- file=sys.stderr,
- flush=True)
- else:
- img.push(self._args.tag[0], tlsverify=self._args.tlsverify)
- print(self._args.image[0])
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/restart_action.py b/contrib/python/pypodman/pypodman/lib/actions/restart_action.py
deleted file mode 100644
index 415594920..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/restart_action.py
+++ /dev/null
@@ -1,46 +0,0 @@
-"""Remote client command for restarting containers."""
-import logging
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase, PositiveIntAction
-
-
-class Restart(AbstractActionBase):
- """Class for Restarting containers."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Restart command to parent parser."""
- parser = parent.add_parser('restart', help='restart container(s)')
- parser.add_argument(
- '--timeout',
- action=PositiveIntAction,
- default=10,
- help='Timeout to wait before forcibly stopping the container'
- ' (default: %(default)s seconds)')
- parser.add_argument(
- 'targets', nargs='+', help='container id(s) to restart')
- parser.set_defaults(class_=cls, method='restart')
-
- def restart(self):
- """Restart container(s)."""
- try:
- for ident in self._args.targets:
- try:
- ctnr = self.client.containers.get(ident)
- logging.debug('Restarting Container %s', ctnr.id)
- ctnr.restart(timeout=self._args.timeout)
- print(ident)
- except podman.ContainerNotFound as e:
- sys.stdout.flush()
- print(
- 'Container {} not found.'.format(e.name),
- file=sys.stderr,
- flush=True)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/rm_action.py b/contrib/python/pypodman/pypodman/lib/actions/rm_action.py
deleted file mode 100644
index 99ff6c460..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/rm_action.py
+++ /dev/null
@@ -1,41 +0,0 @@
-"""Remote client command for deleting containers."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class Rm(AbstractActionBase):
- """Class for removing containers from storage."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Rm command to parent parser."""
- parser = parent.add_parser('rm', help='delete container(s)')
- parser.add_flag(
- '--force',
- '-f',
- help='force delete of running container(s).')
- parser.add_argument(
- 'targets', nargs='+', help='container id(s) to delete')
- parser.set_defaults(class_=cls, method='remove')
-
- def remove(self):
- """Remove container(s)."""
- for ident in self._args.targets:
- try:
- ctnr = self.client.containers.get(ident)
- ctnr.remove(self._args.force)
- print(ident)
- except podman.ContainerNotFound as e:
- sys.stdout.flush()
- print(
- 'Container {} not found.'.format(e.name),
- file=sys.stderr,
- flush=True)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/rmi_action.py b/contrib/python/pypodman/pypodman/lib/actions/rmi_action.py
deleted file mode 100644
index 7c3d0bd79..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/rmi_action.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""Remote client command for deleting images."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class Rmi(AbstractActionBase):
- """Class for removing images from storage."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Rmi command to parent parser."""
- parser = parent.add_parser('rmi', help='delete image(s)')
- parser.add_flag(
- '--force',
- '-f',
- help='force delete of image(s) and associated containers.')
- parser.add_argument('targets', nargs='+', help='image id(s) to delete')
- parser.set_defaults(class_=cls, method='remove')
-
- def remove(self):
- """Remove image(s)."""
- for ident in self._args.targets:
- try:
- img = self.client.images.get(ident)
- img.remove(self._args.force)
- print(ident)
- except podman.ImageNotFound as e:
- sys.stdout.flush()
- print(
- 'Image {} not found.'.format(e.name),
- file=sys.stderr,
- flush=True)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/run_action.py b/contrib/python/pypodman/pypodman/lib/actions/run_action.py
deleted file mode 100644
index 6a6b3cb2c..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/run_action.py
+++ /dev/null
@@ -1,73 +0,0 @@
-"""Remote client command for run a command in a new container."""
-import logging
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-from ._create_args import CreateArguments
-
-
-class Run(AbstractActionBase):
- """Class for running a command in a container."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Run command to parent parser."""
- parser = parent.add_parser('run', help='Run container from image')
-
- CreateArguments.add_arguments(parser)
-
- parser.add_argument('image', nargs=1, help='source image id.')
- parser.add_argument(
- 'command',
- nargs=parent.REMAINDER,
- help='command and args to run.',
- )
- parser.set_defaults(class_=cls, method='run')
-
- def __init__(self, args):
- """Construct Run class."""
- super().__init__(args)
- if args.detach and args.rm:
- raise ValueError('Incompatible options: --detach and --rm')
-
- # image id used only on client
- del self.opts['image']
-
- def run(self):
- """Run container."""
- for ident in self._args.image:
- try:
- try:
- img = self.client.images.get(ident)
- ctnr = img.container(**self.opts)
- except podman.ImageNotFound as e:
- sys.stdout.flush()
- print(
- 'Image {} not found.'.format(e.name),
- file=sys.stderr,
- flush=True)
- continue
- else:
- logging.debug('New container created "{}"'.format(ctnr.id))
-
- if self._args.detach:
- ctnr.start()
- print(ctnr.id)
- else:
- ctnr.attach(eot=4)
- ctnr.start()
- print(ctnr.id)
-
- if self._args.rm:
- ctnr.remove(force=True)
- except (BrokenPipeError, KeyboardInterrupt):
- print('\nContainer "{}" disconnected.'.format(ctnr.id))
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- 'Run for container "{}" failed: {} {}'.format(
- ctnr.id, repr(e), e.reason.capitalize()),
- file=sys.stderr,
- flush=True)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/search_action.py b/contrib/python/pypodman/pypodman/lib/actions/search_action.py
deleted file mode 100644
index b7b8b465d..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/search_action.py
+++ /dev/null
@@ -1,160 +0,0 @@
-"""Remote client command for searching registries for an image."""
-import argparse
-import sys
-from collections import OrderedDict
-
-import podman
-from pypodman.lib import (AbstractActionBase, PositiveIntAction, Report,
- ReportColumn)
-
-
-class FilterAction(argparse.Action):
- """Parse filter argument components."""
-
- def __init__(self,
- option_strings,
- dest,
- nargs=None,
- const=None,
- default=None,
- type=None,
- choices=None,
- required=False,
- help=None,
- metavar='FILTER'):
- """Create FilterAction object."""
- help = (help or '') + (' (format: stars=##'
- ' or is-automated=[True|False]'
- ' or is-official=[True|False])')
- super().__init__(
- option_strings=option_strings,
- dest=dest,
- nargs=nargs,
- const=const,
- default=default,
- type=type,
- choices=choices,
- required=required,
- help=help,
- metavar=metavar)
-
- def __call__(self, parser, namespace, values, option_string=None):
- """
- Convert and Validate input.
-
- Note: side effects
- 1) self.dest value is set to subargument dest
- 2) new attribute self.dest + '_value' is created with 2nd value.
- """
- opt, val = values.split('=', 1)
- if opt == 'stars':
- msg = ('{} option "stars" requires'
- ' a positive integer').format(self.dest)
- try:
- val = int(val)
- except ValueError:
- parser.error(msg)
-
- if val < 0:
- parser.error(msg)
- elif opt == 'is-automated':
- if val.capitalize() in ('True', 'False'):
- val = bool(val)
- else:
- msg = ('{} option "is-automated"'
- ' must be True or False.'.format(self.dest))
- parser.error(msg)
- elif opt == 'is-official':
- if val.capitalize() in ('True', 'False'):
- val = bool(val)
- else:
- msg = ('{} option "is-official"'
- ' must be True or False.'.format(self.dest))
- parser.error(msg)
- else:
- msg = ('{} only supports one of the following options:\n'
- ' stars, is-automated, or is-official').format(self.dest)
- parser.error(msg)
- setattr(namespace, self.dest, opt)
- setattr(namespace, self.dest + '_value', val)
-
-
-class Search(AbstractActionBase):
- """Class for searching registries for an image."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Search command to parent parser."""
- parser = parent.add_parser('search', help='search for images')
- super().subparser(parser)
- parser.add_argument(
- '--filter',
- '-f',
- action=FilterAction,
- help='Filter output based on conditions provided.')
- parser.add_argument(
- '--limit',
- action=PositiveIntAction,
- default=25,
- help='Limit the number of results.'
- ' (default: %(default)s)')
- parser.add_argument('term', nargs=1, help='search term for image')
- parser.set_defaults(class_=cls, method='search')
-
- def __init__(self, args):
- """Construct Search class."""
- super().__init__(args)
-
- self.columns = OrderedDict({
- 'name':
- ReportColumn('name', 'NAME', 44),
- 'description':
- ReportColumn('description', 'DESCRIPTION', 44),
- 'star_count':
- ReportColumn('star_count', 'STARS', 5),
- 'is_official':
- ReportColumn('is_official', 'OFFICIAL', 8),
- 'is_automated':
- ReportColumn('is_automated', 'AUTOMATED', 9),
- })
-
- def search(self):
- """Search registries for image."""
- try:
- rows = list()
- for entry in self.client.images.search(
- self._args.term[0], limit=self._args.limit):
-
- if self._args.filter == 'is-official':
- if self._args.filter_value != entry.is_official:
- continue
- elif self._args.filter == 'is-automated':
- if self._args.filter_value != entry.is_automated:
- continue
- elif self._args.filter == 'stars':
- if self._args.filter_value > entry.star_count:
- continue
-
- fields = dict(entry._asdict())
-
- status = '[OK]' if entry.is_official else ''
- fields['is_official'] = status
-
- status = '[OK]' if entry.is_automated else ''
- fields['is_automated'] = status
-
- if self._args.truncate:
- fields.update({'name': entry.name[-44:]})
- rows.append(fields)
-
- with Report(self.columns, heading=self._args.heading) as report:
- report.layout(
- rows, self.columns.keys(), truncate=self._args.truncate)
- for row in rows:
- report.row(**row)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
diff --git a/contrib/python/pypodman/pypodman/lib/actions/start_action.py b/contrib/python/pypodman/pypodman/lib/actions/start_action.py
deleted file mode 100644
index 5f88731dc..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/start_action.py
+++ /dev/null
@@ -1,71 +0,0 @@
-"""Remote client command for starting containers."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class Start(AbstractActionBase):
- """Class for starting container."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Start command to parent parser."""
- parser = parent.add_parser('start', help='start container')
- parser.add_flag(
- '--attach',
- '-a',
- help="Attach container's STDOUT and STDERR.")
- parser.add_argument(
- '--detach-keys',
- metavar='KEY(s)',
- default=4,
- help='Override the key sequence for detaching a container.'
- ' (format: a single character [a-Z] or ctrl-<value> where'
- ' <value> is one of: a-z, @, ^, [, , or _) (default: ^D)')
- parser.add_flag(
- '--interactive',
- '-i',
- help="Attach container's STDIN.")
- # TODO: Implement sig-proxy
- parser.add_flag(
- '--sig-proxy',
- help="Proxy received signals to the process."
- )
- parser.add_argument(
- 'containers',
- nargs='+',
- help='containers to start',
- )
- parser.set_defaults(class_=cls, method='start')
-
- def start(self):
- """Start provided containers."""
- stdin = sys.stdin if self.opts['interactive'] else None
- stdout = sys.stdout if self.opts['attach'] else None
-
- try:
- for ident in self._args.containers:
- try:
- ctnr = self.client.containers.get(ident)
- ctnr.attach(
- eot=self.opts['detach_keys'],
- stdin=stdin,
- stdout=stdout)
- ctnr.start()
- except podman.ContainerNotFound as e:
- sys.stdout.flush()
- print(
- 'Container "{}" not found'.format(e.name),
- file=sys.stderr,
- flush=True)
- else:
- print(ident)
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- return 0
diff --git a/contrib/python/pypodman/pypodman/lib/actions/version_action.py b/contrib/python/pypodman/pypodman/lib/actions/version_action.py
deleted file mode 100644
index 29a0cabe4..000000000
--- a/contrib/python/pypodman/pypodman/lib/actions/version_action.py
+++ /dev/null
@@ -1,35 +0,0 @@
-"""Remote client command for reporting on Podman service."""
-import sys
-
-import podman
-from pypodman.lib import AbstractActionBase
-
-
-class Version(AbstractActionBase):
- """Class for reporting on Podman Service."""
-
- @classmethod
- def subparser(cls, parent):
- """Add Version command to parent parser."""
- parser = parent.add_parser(
- 'version', help='report version on podman service')
- parser.set_defaults(class_=cls, method='version')
-
- def version(self):
- """Report on Podman Service."""
- try:
- info = self.client.system.info()
- except podman.ErrorOccurred as e:
- sys.stdout.flush()
- print(
- '{}'.format(e.reason).capitalize(),
- file=sys.stderr,
- flush=True)
- return 1
- else:
- version = info._asdict()['podman']
- host = info._asdict()['host']
- print("Version {}".format(version['podman_version']))
- print("Go Version {}".format(version['go_version']))
- print("Git Commit {}".format(version['git_commit']))
- print("OS/Arch {}/{}".format(host["os"], host["arch"]))
diff --git a/contrib/python/pypodman/pypodman/lib/parser_actions.py b/contrib/python/pypodman/pypodman/lib/parser_actions.py
deleted file mode 100644
index 3ff12cab8..000000000
--- a/contrib/python/pypodman/pypodman/lib/parser_actions.py
+++ /dev/null
@@ -1,247 +0,0 @@
-"""
-Supplimental argparse.Action converters and validaters.
-
-The constructors are very verbose but remain for IDE support.
-"""
-import argparse
-import copy
-import os
-import signal
-
-# API defined by argparse.Action therefore shut up pylint
-# pragma pylint: disable=redefined-builtin
-# pragma pylint: disable=too-few-public-methods
-# pragma pylint: disable=too-many-arguments
-
-
-class ChangeAction(argparse.Action):
- """Convert and validate change argument."""
-
- def __init__(self,
- option_strings,
- dest,
- nargs=None,
- const=None,
- default=None,
- type=None,
- choices=None,
- required=False,
- help=None,
- metavar='OPT=VALUE'):
- """Create ChangeAction object."""
- help = (help or '') + ('Apply change(s) to the new image.'
- ' May be given multiple times.')
- if default is None:
- default = []
-
- super().__init__(
- option_strings=option_strings,
- dest=dest,
- nargs=nargs,
- const=const,
- default=default,
- type=type,
- choices=choices,
- required=required,
- help=help,
- metavar=metavar)
-
- def __call__(self, parser, namespace, values, option_string=None):
- """Convert and Validate input."""
- items = getattr(namespace, self.dest, None) or []
- items = copy.copy(items)
-
- choices = ('CMD', 'ENTRYPOINT', 'ENV', 'EXPOSE', 'LABEL', 'ONBUILD',
- 'STOPSIGNAL', 'USER', 'VOLUME', 'WORKDIR')
-
- opt, _ = values.split('=', 1)
- if opt not in choices:
- parser.error('Option "{}" is not supported by argument "{}",'
- ' valid options are: {}'.format(
- opt, option_string, ', '.join(choices)))
- items.append(values)
- setattr(namespace, self.dest, items)
-
-
-class SignalAction(argparse.Action):
- """Validate input as a signal."""
-
- def __init__(self,
- option_strings,
- dest,
- nargs=None,
- const=None,
- default=None,
- type=str,
- choices=None,
- required=False,
- help='The signal to send.'
- ' It may be given as a name or a number.',
- metavar='SIGNAL'):
- """Create SignalAction object."""
- super().__init__(
- option_strings=option_strings,
- dest=dest,
- nargs=nargs,
- const=const,
- default=default,
- type=type,
- choices=choices,
- required=required,
- help=help,
- metavar=metavar)
-
- if hasattr(signal, "Signals"):
-
- def _signal_number(signame):
- cooked = 'SIG{}'.format(signame)
- try:
- return signal.Signals[cooked].value
- except ValueError:
- pass
- else:
-
- def _signal_number(signame):
- cooked = 'SIG{}'.format(signame)
- for n, v in sorted(signal.__dict__.items()):
- if n != cooked:
- continue
- if n.startswith("SIG") and not n.startswith("SIG_"):
- return v
-
- self._signal_number = _signal_number
-
- def __call__(self, parser, namespace, values, option_string=None):
- """Validate input is a signal for platform."""
- if values.isdigit():
- signum = int(values)
- if signal.SIGRTMIN <= signum >= signal.SIGRTMAX:
- raise ValueError('"{}" is not a valid signal. {}-{}'.format(
- values, signal.SIGRTMIN, signal.SIGRTMAX))
- else:
- signum = self._signal_number(values)
- if signum is None:
- parser.error(
- '"{}" is not a valid signal,'
- ' see your platform documentation.'.format(values))
- setattr(namespace, self.dest, signum)
-
-
-class UnitAction(argparse.Action):
- """Validate number given is positive integer, with optional suffix."""
-
- def __init__(self,
- option_strings,
- dest,
- nargs=None,
- const=None,
- default=None,
- type=None,
- choices=None,
- required=False,
- help=None,
- metavar='UNIT'):
- """Create UnitAction object."""
- help = (help or metavar or dest)\
- + ' (format: <number>[<unit>], where unit = b, k, m or g)'
- super().__init__(
- option_strings=option_strings,
- dest=dest,
- nargs=nargs,
- const=const,
- default=default,
- type=type,
- choices=choices,
- required=required,
- help=help,
- metavar=metavar)
-
- def __call__(self, parser, namespace, values, option_string=None):
- """Validate input as a UNIT."""
- try:
- val = int(values)
- except ValueError:
- if not values[:-1].isdigit():
- msg = ('{} must be a positive integer,'
- ' with optional suffix').format(option_string)
- parser.error(msg)
- if not values[-1] in ('b', 'k', 'm', 'g'):
- msg = '{} only supports suffices of: b, k, m, g'.format(
- option_string)
- parser.error(msg)
- else:
- if val <= 0:
- msg = '{} must be a positive integer'.format(option_string)
- parser.error(msg)
-
- setattr(namespace, self.dest, values)
-
-
-class PositiveIntAction(argparse.Action):
- """Validate number given is positive integer."""
-
- def __init__(self,
- option_strings,
- dest,
- nargs=None,
- const=None,
- default=None,
- type=int,
- choices=None,
- required=False,
- help='Must be a positive integer.',
- metavar=None):
- """Create PositiveIntAction object."""
- super().__init__(
- option_strings=option_strings,
- dest=dest,
- nargs=nargs,
- const=const,
- default=default,
- type=type,
- choices=choices,
- required=required,
- help=help,
- metavar=metavar)
-
- def __call__(self, parser, namespace, values, option_string=None):
- """Validate input."""
- if values > 0:
- setattr(namespace, self.dest, values)
- return
-
- msg = '{} must be a positive integer'.format(option_string)
- parser.error(msg)
-
-
-class PathAction(argparse.Action):
- """Expand user- and relative-paths."""
-
- def __init__(self,
- option_strings,
- dest,
- nargs=None,
- const=None,
- default=None,
- type=None,
- choices=None,
- required=False,
- help=None,
- metavar='PATH'):
- """Create PathAction object."""
- super().__init__(
- option_strings=option_strings,
- dest=dest,
- nargs=nargs,
- const=const,
- default=default,
- type=type,
- choices=choices,
- required=required,
- help=help,
- metavar=metavar)
-
- def __call__(self, parser, namespace, values, option_string=None):
- """Resolve full path value on local filesystem."""
- setattr(namespace, self.dest,
- os.path.abspath(os.path.expanduser(values)))
diff --git a/contrib/python/pypodman/pypodman/lib/podman_parser.py b/contrib/python/pypodman/pypodman/lib/podman_parser.py
deleted file mode 100644
index 913546a91..000000000
--- a/contrib/python/pypodman/pypodman/lib/podman_parser.py
+++ /dev/null
@@ -1,255 +0,0 @@
-"""Parse configuration while building subcommands."""
-import argparse
-import getpass
-import inspect
-import logging
-import os
-import shutil
-import sys
-from contextlib import suppress
-from pathlib import Path
-
-import pkg_resources
-import pytoml
-
-from .parser_actions import PathAction, PositiveIntAction
-
-# TODO: setup.py and obtain __version__ from rpm.spec
-try:
- __version__ = pkg_resources.get_distribution('pypodman').version
-except Exception: # pylint: disable=broad-except
- __version__ = '0.0.0'
-
-
-class HelpFormatter(argparse.RawDescriptionHelpFormatter):
- """Set help width to screen size."""
-
- def __init__(self, *args, **kwargs):
- """Construct HelpFormatter using screen width."""
- if 'width' not in kwargs:
- try:
- size = shutil.get_terminal_size()
- kwargs['width'] = size.columns
- except Exception: # pylint: disable=broad-except
- kwargs['width'] = 80
-
- super().__init__(*args, **kwargs)
-
-
-class PodmanArgumentParser(argparse.ArgumentParser):
- """Default remote podman configuration."""
-
- def __init__(self, **kwargs):
- """Construct the parser."""
- kwargs['add_help'] = True
- kwargs['description'] = ('Portable and simple management'
- ' tool for containers and images')
- kwargs['formatter_class'] = HelpFormatter
-
- super().__init__(**kwargs)
-
- def add_flag(self, *args, **kwargs):
- """Add flag to parser."""
- flags = [a for a in args if a[0] in self.prefix_chars]
- dest = flags[0].lstrip(self.prefix_chars)
- no_flag = '{0}{0}no-{1}'.format(self.prefix_chars, dest)
-
- group = self.add_mutually_exclusive_group(required=False)
- group.add_argument(*flags, action='store_true', dest=dest, **kwargs)
- group.add_argument(no_flag, action='store_false', dest=dest, **kwargs)
- default = kwargs.get('default', False)
- self.set_defaults(**{dest: default})
-
- def initialize_parser(self):
- """Initialize parser without causing recursion meltdown."""
- self.add_argument(
- '--version',
- action='version',
- version='%(prog)s v. ' + __version__)
- self.add_argument(
- '--log-level',
- choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
- default='WARNING',
- type=str.upper,
- help='set logging level for events. (default: %(default)s)',
- )
- self.add_argument(
- '--run-dir',
- metavar='DIRECTORY',
- help=('directory to place local socket bindings.'
- ' (default: XDG_RUNTIME_DIR/pypodman)'))
- self.add_argument(
- '--username',
- '-l',
- help='Authenicating user on remote host. (default: {})'.format(
- getpass.getuser()))
- self.add_argument(
- '--host', help='name of remote host. (default: None)')
- self.add_argument(
- '--port',
- '-p',
- action=PositiveIntAction,
- help='port for ssh tunnel to remote host. (default: 22)')
- self.add_argument(
- '--remote-socket-path',
- metavar='PATH',
- help=('path of podman socket on remote host'
- ' (default: /run/podman/io.podman)'))
- self.add_argument(
- '--identity-file',
- '-i',
- action=PathAction,
- help='path to ssh identity file. (default: ~user/.ssh/id_dsa)')
- self.add_argument(
- '--config-home',
- metavar='DIRECTORY',
- action=PathAction,
- help=('home of configuration "pypodman.conf".'
- ' (default: XDG_CONFIG_HOME/pypodman)'))
-
- actions_parser = self.add_subparsers(
- dest='subparser_name', help='commands')
- # For create/exec/run: don't process options intended for subcommand
- actions_parser.REMAINDER = argparse.REMAINDER
-
- # import buried here to prevent import loops
- import pypodman.lib.actions # pylint: disable=cyclic-import
- assert pypodman.lib.actions
-
- # pull in plugin(s) code for each subcommand
- for name, obj in inspect.getmembers(
- sys.modules['pypodman.lib.actions'],
- predicate=inspect.isclass):
- if hasattr(obj, 'subparser'):
- try:
- obj.subparser(actions_parser)
- except NameError as e:
- logging.critical(e)
- logging.warning(
- 'See subparser configuration for Class "%s"', name)
- sys.exit(3)
-
- def parse_args(self, args=None, namespace=None):
- """Parse command line arguments, backed by env var and config_file."""
- self.initialize_parser()
- cooked = super().parse_args(args, namespace)
- return self.resolve_configuration(cooked)
-
- def resolve_configuration(self, args):
- """Find and fill in any arguments not passed on command line."""
- args.xdg_runtime_dir = os.environ.get('XDG_RUNTIME_DIR', '/tmp')
- args.xdg_config_home = os.environ.get('XDG_CONFIG_HOME',
- os.path.expanduser('~/.config'))
- args.xdg_config_dirs = os.environ.get('XDG_CONFIG_DIRS', '/etc/xdg')
-
- # Configuration file(s) are optional,
- # required arguments may be provided elsewhere
- config = {'default': {}}
- dirs = args.xdg_config_dirs.split(':')
- dirs.extend((args.xdg_config_home, args.config_home))
- for dir_ in dirs:
- if dir_ is None:
- continue
- with suppress(OSError):
- cnf = Path(dir_, 'pypodman', 'pypodman.conf')
- with cnf.open() as stream:
- config.update(pytoml.load(stream))
-
- def reqattr(name, value):
- """Raise an error if value is unset."""
- if value:
- setattr(args, name, value)
- return value
- return self.error(
- 'Required argument "{}" is not configured.'.format(name))
-
- reqattr(
- 'run_dir',
- getattr(args, 'run_dir')
- or os.environ.get('PODMAN_RUN_DIR')
- or config['default'].get('run_dir')
- or str(Path(args.xdg_runtime_dir, 'pypodman'))
- ) # yapf: disable
-
- setattr(
- args,
- 'host',
- getattr(args, 'host')
- or os.environ.get('PODMAN_HOST')
- or config['default'].get('host')
- ) # yapf:disable
-
- reqattr(
- 'username',
- getattr(args, 'username')
- or os.environ.get('PODMAN_USER')
- or config['default'].get('username')
- or os.environ.get('USER')
- or os.environ.get('LOGNAME')
- or getpass.getuser()
- ) # yapf:disable
-
- reqattr(
- 'port',
- getattr(args, 'port')
- or os.environ.get('PODMAN_PORT')
- or config['default'].get('port', None)
- or 22
- ) # yapf:disable
-
- reqattr(
- 'remote_socket_path',
- getattr(args, 'remote_socket_path')
- or os.environ.get('PODMAN_REMOTE_SOCKET_PATH')
- or config['default'].get('remote_socket_path')
- or '/run/podman/io.podman'
- ) # yapf:disable
-
- reqattr(
- 'log_level',
- getattr(args, 'log_level')
- or os.environ.get('PODMAN_LOG_LEVEL')
- or config['default'].get('log_level')
- or logging.WARNING
- ) # yapf:disable
-
- setattr(
- args,
- 'identity_file',
- getattr(args, 'identity_file')
- or os.environ.get('PODMAN_IDENTITY_FILE')
- or config['default'].get('identity_file')
- or os.path.expanduser('~{}/.ssh/id_dsa'.format(args.username))
- ) # yapf:disable
-
- if not os.path.isfile(args.identity_file):
- args.identity_file = None
-
- if args.host:
- args.local_socket_path = str(Path(args.run_dir, 'podman.socket'))
- else:
- args.local_socket_path = args.remote_socket_path
-
- args.local_uri = 'unix:{}'.format(args.local_socket_path)
-
- if args.host:
- components = ['ssh://', args.username, '@', args.host]
- if args.port:
- components.extend((':', str(args.port)))
- components.append(args.remote_socket_path)
-
- args.remote_uri = ''.join(components)
- return args
-
- def exit(self, status=0, message=None):
- """Capture message and route to logger."""
- if message:
- log = logging.info if status == 0 else logging.error
- log(message)
- super().exit(status)
-
- def error(self, message):
- """Capture message and route to logger."""
- logging.error('%s: %s', self.prog, message)
- logging.error("Try '%s --help' for more information.", self.prog)
- super().exit(2)
diff --git a/contrib/python/pypodman/pypodman/lib/report.py b/contrib/python/pypodman/pypodman/lib/report.py
deleted file mode 100644
index b689390fd..000000000
--- a/contrib/python/pypodman/pypodman/lib/report.py
+++ /dev/null
@@ -1,87 +0,0 @@
-"""Report Manager."""
-import string
-import sys
-from collections import namedtuple
-
-
-class ReportFormatter(string.Formatter):
- """Custom formatter to default missing keys to '<none>'."""
-
- def get_value(self, key, args, kwargs):
- """Map missing key to value '<none>'."""
- try:
- if isinstance(key, int):
- return args[key]
- else:
- return kwargs[key]
- except KeyError:
- return '<none>'
-
-
-class ReportColumn(namedtuple('ReportColumn', 'key display width default')):
- """Hold attributes of output column."""
-
- __slots__ = ()
-
- def __new__(cls, key, display, width, default=None):
- """Add defaults for attributes."""
- return super(ReportColumn, cls).__new__(cls, key, display, width,
- default)
-
-
-class Report():
- """Report Manager."""
-
- def __init__(self, columns, heading=True, epilog=None, file=sys.stdout):
- """Construct Report.
-
- columns is a mapping for named fields to column headings.
- headers True prints headers on table.
- epilog will be printed when the report context is closed.
- """
- self._columns = columns
- self._file = file
- self._format_string = None
- self._formatter = ReportFormatter()
- self._heading = heading
- self.epilog = epilog
-
- def row(self, **fields):
- """Print row for report."""
- if self._heading:
- hdrs = {k: v.display for (k, v) in self._columns.items()}
- print(
- self._formatter.format(self._format_string, **hdrs),
- flush=True,
- file=self._file,
- )
- self._heading = False
-
- fields = {k: str(v) for k, v in fields.items()}
- print(self._formatter.format(self._format_string, **fields))
-
- def __enter__(self):
- """Return `self` upon entering the runtime context."""
- return self
-
- def __exit__(self, exc_type, exc_value, traceback):
- """Leave Report context and print epilog if provided."""
- if self.epilog:
- print(self.epilog, flush=True, file=self._file)
-
- def layout(self, iterable, keys, truncate=True):
- """Use data and headings build format for table to fit."""
- fmt = []
-
- for key in keys:
- slice_ = [str(i.get(key, '')) for i in iterable]
- data_len = len(max(slice_, key=len))
-
- info = self._columns.get(key,
- ReportColumn(key, key.upper(), data_len))
- display_len = max(data_len, len(info.display))
- if truncate and info.width != 0:
- display_len = info.width
-
- fmt.append('{{{0}:{1}.{1}}}'.format(key, display_len))
- self._format_string = ' '.join(fmt)
diff --git a/contrib/python/pypodman/pypodman/main.py b/contrib/python/pypodman/pypodman/main.py
deleted file mode 100755
index e512dc483..000000000
--- a/contrib/python/pypodman/pypodman/main.py
+++ /dev/null
@@ -1,81 +0,0 @@
-"""Remote podman client."""
-import logging
-import os
-import sys
-from subprocess import CalledProcessError
-
-from pypodman.lib import PodmanArgumentParser
-
-
-def main():
- """Entry point."""
- # Setup logging so we use stderr and can change logging level later
- # Do it now before there is any chance of a default setup hardcoding crap.
- log = logging.getLogger()
- fmt = logging.Formatter('%(asctime)s | %(levelname)-8s | %(message)s',
- '%Y-%m-%d %H:%M:%S %Z')
- stderr = logging.StreamHandler(stream=sys.stderr)
- stderr.setFormatter(fmt)
- log.addHandler(stderr)
- log.setLevel(logging.WARNING)
-
- parser = PodmanArgumentParser()
- args = parser.parse_args()
-
- log.setLevel(args.log_level)
- logging.debug(
- 'Logging initialized at level %s',
- logging.getLevelName(logging.getLogger().getEffectiveLevel()))
-
- def want_tb():
- """Add traceback when logging events."""
- return log.getEffectiveLevel() == logging.DEBUG
-
- try:
- if not os.path.exists(args.run_dir):
- os.makedirs(args.run_dir)
- except PermissionError as e:
- logging.critical(e, exc_info=want_tb())
- sys.exit(6)
-
- # class_(args).method() are set by the sub-command's parser
- returncode = None
- try:
- obj = args.class_(args)
- except AttributeError:
- parser.print_help(sys.stderr)
- sys.exit(1)
- except ValueError as e:
- print(e, file=sys.stderr, flush=True)
- sys.exit(1)
- except Exception as e: # pylint: disable=broad-except
- logging.critical(repr(e), exc_info=want_tb())
- logging.warning('See subparser "%s" configuration.',
- args.subparser_name)
- sys.exit(5)
-
- try:
- returncode = getattr(obj, args.method)()
- except KeyboardInterrupt:
- pass
- except AttributeError as e:
- logging.critical(e, exc_info=want_tb())
- logging.warning('See subparser "%s" configuration.',
- args.subparser_name)
- returncode = 3
- except (
- CalledProcessError,
- ConnectionError,
- ConnectionRefusedError,
- ConnectionResetError,
- TimeoutError,
- ) as e:
- logging.critical(e, exc_info=want_tb())
- logging.info('Review connection arguments for correctness.')
- returncode = 4
-
- return 0 if returncode is None else returncode
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/contrib/python/pypodman/pypodman/test/test_report.py b/contrib/python/pypodman/pypodman/test/test_report.py
deleted file mode 100644
index 280a9a954..000000000
--- a/contrib/python/pypodman/pypodman/test/test_report.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from __future__ import absolute_import
-
-import unittest
-
-from report import Report, ReportColumn
-
-
-class TestReport(unittest.TestCase):
- def setUp(self):
- pass
-
- def test_report_column(self):
- rc = ReportColumn('k', 'v', 3)
- self.assertEqual(rc.key, 'k')
- self.assertEqual(rc.display, 'v')
- self.assertEqual(rc.width, 3)
- self.assertIsNone(rc.default)
-
- rc = ReportColumn('k', 'v', 3, 'd')
- self.assertEqual(rc.key, 'k')
- self.assertEqual(rc.display, 'v')
- self.assertEqual(rc.width, 3)
- self.assertEqual(rc.default, 'd')
diff --git a/contrib/python/pypodman/requirements.txt b/contrib/python/pypodman/requirements.txt
deleted file mode 100644
index ba01ed36e..000000000
--- a/contrib/python/pypodman/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-humanize
-podman
-pytoml
-PyYAML
-setuptools>=39
diff --git a/contrib/python/pypodman/setup.py b/contrib/python/pypodman/setup.py
deleted file mode 100755
index f07e89201..000000000
--- a/contrib/python/pypodman/setup.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-
-import os
-
-from setuptools import find_packages, setup
-
-root = os.path.abspath(os.path.dirname(__file__))
-
-with open(os.path.join(root, 'README.md')) as me:
- readme = me.read()
-
-with open(os.path.join(root, 'requirements.txt')) as r:
- requirements = r.read().splitlines()
-
-
-setup(
- name='pypodman',
- version=os.environ.get('PODMAN_VERSION', '0.0.0'),
- description='A client for communicating with a Podman server',
- author_email='jhonce@redhat.com',
- author='Jhon Honce',
- license='Apache Software License',
- long_description=readme,
- entry_points={'console_scripts': [
- 'pypodman = pypodman.main:main',
- ]},
- include_package_data=True,
- install_requires=requirements,
- packages=find_packages(exclude=['test']),
- python_requires='>=3',
- zip_safe=True,
- url='http://github.com/containers/libpod',
- keywords='varlink libpod podman pypodman',
- classifiers=[
- 'Development Status :: 3 - Alpha',
- 'Intended Audience :: Developers',
- 'Intended Audience :: System Administrators',
- 'License :: OSI Approved :: Apache Software License',
- 'Operating System :: MacOS :: MacOS X',
- 'Operating System :: Microsoft :: Windows',
- 'Operating System :: POSIX',
- 'Programming Language :: Python :: 3.4',
- 'Topic :: System :: Systems Administration',
- 'Topic :: Utilities',
- ])
diff --git a/contrib/spec/podman.spec.in b/contrib/spec/podman.spec.in
index 20e2a84ea..bf75522dc 100644
--- a/contrib/spec/podman.spec.in
+++ b/contrib/spec/podman.spec.in
@@ -39,7 +39,7 @@
%global shortcommit_conmon %(c=%{commit_conmon}; echo ${c:0:7})
Name: podman
-Version: 0.12.2
+Version: 1.0.1
Release: #COMMITDATE#.git%{shortcommit0}%{?dist}
Summary: Manage Pods, Containers and Container Images
License: ASL 2.0
@@ -185,37 +185,6 @@ Provides: bundled(golang(k8s.io/utils)) = 258e2a2fa64568210fbd6267cf1d8fd87c3cb8
%{repo} provides a library for applications looking to use
the Container Pod concept popularized by Kubernetes.
-%if %{with varlink}
-%package -n python3-%{name}
-BuildArch: noarch
-BuildRequires: python3-devel
-BuildRequires: python3-setuptools
-BuildRequires: python3-varlink
-Requires: python3-setuptools
-Requires: python3-varlink
-Requires: python3-dateutil
-Requires: python3-humanize
-Provides: python3-%{name} = %{version}-%{release}
-Summary: Python 3 bindings for %{name}
-
-%description -n python3-%{name}
-This package contains Python 3 bindings for %{name}.
-
-%package -n python3-py%{name}
-BuildArch: noarch
-BuildRequires: python3-devel
-BuildRequires: python3-setuptools
-BuildRequires: python3-varlink
-Requires: python3-setuptools
-Requires: python3-varlink
-Requires: python3-dateutil
-Requires: python3-psutil
-Summary: Python 3 tool for %{name}
-
-%description -n python3-py%{name}
-This package contains Python 3 tool for %{name}.
-%endif # varlink
-
%if 0%{?with_devel}
%package devel
Summary: Library for applications looking to use Container Pods
@@ -421,10 +390,6 @@ PODMAN_VERSION=%{version} %{__make} PREFIX=%{buildroot}%{_prefix} ETCDIR=%{build
mv pkg/hooks/README.md pkg/hooks/README-hooks.md
-%if %{with varlink}
-PODMAN_VERSION=%{version} %{__make} DESTDIR=%{buildroot} install.python
-%endif # varlink
-
# install libpod.conf
install -dp %{buildroot}%{_datadir}/containers
install -p -m 644 %{repo}.conf %{buildroot}%{_datadir}/containers
@@ -514,23 +479,6 @@ export GOPATH=%{buildroot}/%{gopath}:$(pwd)/vendor:%{gopath}
%{_unitdir}/io.podman.socket
%{_usr}/lib/tmpfiles.d/%{name}.conf
-%if %{with varlink}
-%files -n python3-%{name}
-%license LICENSE
-%doc README.md CONTRIBUTING.md pkg/hooks/README-hooks.md install.md code-of-conduct.md transfer.md
-%dir %{python3_sitelib}/%{name}
-%{python3_sitelib}/%{name}/*
-%{python3_sitelib}/%{name}*.egg-info
-
-%files -n python3-py%{name}
-%license LICENSE
-%doc README.md CONTRIBUTING.md pkg/hooks/README-hooks.md install.md code-of-conduct.md transfer.md
-%dir %{python3_sitelib}/py%{name}
-%{python3_sitelib}/py%{name}/*
-%{python3_sitelib}/py%{name}*.egg-info
-%{_bindir}/py%{name}
-%endif # varlink
-
%if 0%{?with_devel}
%files -n libpod-devel -f devel.file-list
%license LICENSE
diff --git a/docs/libpod.conf.5.md b/docs/libpod.conf.5.md
index d63baeb88..98eb5bece 100644
--- a/docs/libpod.conf.5.md
+++ b/docs/libpod.conf.5.md
@@ -24,6 +24,9 @@ libpod to manage containers.
**cgroup_manager**=""
Specify the CGroup Manager to use; valid values are "systemd" and "cgroupfs"
+**init_path**=""
+ Path to the container-init binary, which forwards signals and reaps processes within containers. Note that the container-init binary will only be used when the `--init` for podman-create and podman-run is set.
+
**hooks_dir**=["*path*", ...]
Each `*.json` file in the path configures a hook for Podman containers. For more details on the syntax of the JSON files and the semantics of hook injection, see `oci-hooks(5)`. Podman and libpod currently support both the 1.0.0 and 0.1.0 hook schemas, although the 0.1.0 schema is deprecated.
@@ -34,7 +37,9 @@ libpod to manage containers.
For the bind-mount conditions, only mounts explicitly requested by the caller via `--volume` are considered. Bind mounts that libpod inserts by default (e.g. `/dev/shm`) are not considered.
- If `hooks_dir` is unset for root callers, Podman and libpod will currently default to `/usr/share/containers/oci/hooks.d` and `/etc/containers/oci/hooks.d` in order of increasing precedence. Using these defaults is deprecated, and callers should migrate to explicitly setting `hooks_dir`.
+ Podman and libpod currently support an additional `precreate` state which is called before the runtime's `create` operation. Unlike the other stages, which receive the container state on their standard input, `precreate` hooks receive the proposed runtime configuration on their standard input. They may alter that configuration as they see fit, and write the altered form to their standard output.
+
+ **WARNING**: the `precreate` hook lets you do powerful things, such as adding additional mounts to the runtime configuration. That power also makes it easy to break things. Before reporting libpod errors, try running your container with `precreate` hooks disabled to see if the problem is due to one of your hooks.
**static_dir**=""
Directory for persistent libpod files (database, etc)
diff --git a/docs/podman-create.1.md b/docs/podman-create.1.md
index 97d6e77b1..178542f0d 100644
--- a/docs/podman-create.1.md
+++ b/docs/podman-create.1.md
@@ -29,7 +29,7 @@ option can be set multiple times.
Add an annotation to the container. The format is key=value.
The **--annotation** option can be set multiple times.
-**-a**, **--attach**=[]
+**--attach**, **-a**=[]
Attach to STDIN, STDOUT or STDERR.
@@ -158,7 +158,7 @@ If you have four memory nodes on your system (0-3), use `--cpuset-mems=0,1`
then processes in your container will only use memory from the first
two memory nodes.
-**-d**, **--detach**=*true*|*false*
+**--detach**, **-d**=*true*|*false*
Detached mode: run the container in the background and print the new container ID. The default is *false*.
@@ -230,7 +230,7 @@ ENTRYPOINT.
You need to specify multi option commands in the form of a json string.
-**-e**, **--env**=[]
+**--env**, **-e**=[]
Set environment variables
@@ -276,7 +276,15 @@ tmpfs: The volume is mounted onto the container as a tmpfs, which allows the use
content that disappears when the container is stopped.
ignore: All volumes are just ignored and no action is taken.
-**-i**, **--interactive**=*true*|*false*
+**--init**
+
+Run an init inside the container that forwards signals and reaps processes.
+
+**--init-path**=""
+
+Path to the container-init binary.
+
+**--interactive**, **-i**=*true*|*false*
Keep STDIN open even if not attached. The default is *false*.
@@ -307,7 +315,7 @@ is not limited. If you specify a limit, it may be rounded up to a multiple
of the operating system's page size and the value can be very large,
millions of trillions.
-**-l**, **--label**=[]
+**--label**, **-l**=[]
Add metadata to a container (e.g., --label com.example.key=value)
@@ -339,7 +347,7 @@ according to RFC4862.
Not currently supported
-**-m**, **--memory**=""
+**--memory**, **-m**=""
Memory limit (format: <number>[<unit>], where unit = b, k, m or g)
@@ -418,7 +426,7 @@ to the container with **--name** then it will generate a random
string name. The name is useful any place you need to identify a container.
This works for both background and foreground containers.
-**--net**, **--network**="*bridge*"
+**--network**, **--net**="*bridge*"
Set the Network mode for the container
'bridge': create a network stack on the default bridge
@@ -472,7 +480,7 @@ to all devices on the host, turns off graphdriver mount options, as well as
turning off most of the security measures protecting the host from the
container.
-**-p**, **--publish**=[]
+**--publish**, **-p**=[]
Publish a container's port, or range of ports, to the host
@@ -484,7 +492,7 @@ but not `podman run -p 1230-1236:1230-1240 --name RangeContainerPortsBiggerThanR
With ip: `podman run -p 127.0.0.1:$HOSTPORT:$CONTAINERPORT --name CONTAINER -t someimage`
Use `podman port` to see the actual mapping: `podman port CONTAINER $CONTAINERPORT`
-**-P**, **--publish-all**=*true*|*false*
+**--publish-all**, **-P**=*true*|*false*
Publish all exposed ports to random ports on the host interfaces. The default is *false*.
@@ -613,7 +621,7 @@ options are the same as the Linux default `mount` flags. If you do not specify
any options, the systems uses the following options:
`rw,noexec,nosuid,nodev,size=65536k`.
-**-t**, **--tty**=*true*|*false*
+**--tty**, **-t**=*true*|*false*
Allocate a pseudo-TTY. The default is *false*.
@@ -634,7 +642,7 @@ The following example maps uids 0-2000 in the container to the uids 30000-31999
Ulimit options
-**-u**, **--user**=""
+**--user**, **-u**=""
Sets the username or UID used and optionally the groupname or GID for the specified command.
@@ -657,7 +665,7 @@ Set the UTS mode for the container
**ns**: specify the usernamespace to use.
Note: the host mode gives the container access to changing the host's hostname and is therefore considered insecure.
-**-v**|**--volume**[=*[HOST-DIR:CONTAINER-DIR[:OPTIONS]]*]
+**--volume**, **-v**[=*[HOST-DIR:CONTAINER-DIR[:OPTIONS]]*]
Create a bind mount. If you specify, ` -v /HOST-DIR:/CONTAINER-DIR`, podman
bind mounts `/HOST-DIR` in the host to `/CONTAINER-DIR` in the podman
@@ -756,7 +764,7 @@ If the location of the volume from the source container overlaps with
data residing on a target container, then the volume hides
that data on the target.
-**-w**, **--workdir**=""
+**--workdir**, **-w**=""
Working directory inside the container
diff --git a/docs/podman-exec.1.md b/docs/podman-exec.1.md
index 284fa5a4a..77317b0ca 100644
--- a/docs/podman-exec.1.md
+++ b/docs/podman-exec.1.md
@@ -38,6 +38,14 @@ Sets the username or UID used and optionally the groupname or GID for the specif
The following examples are all valid:
--user [user | user:group | uid | uid:gid | user:gid | uid:group ]
+**--workdir**, **-w**=""
+
+Working directory inside the container
+
+The default working directory for running binaries within a container is the root directory (/).
+The image developer can set a different default with the WORKDIR instruction, which can be overridden
+when creating the container.
+
## SEE ALSO
podman(1), podman-run(1)
diff --git a/docs/podman-image-sign.1.md b/docs/podman-image-sign.1.md
new file mode 100644
index 000000000..232bc87fe
--- /dev/null
+++ b/docs/podman-image-sign.1.md
@@ -0,0 +1,52 @@
+% podman-image-sign(1)
+
+# NAME
+podman-image-sign- Create a signature for an image
+
+# SYNOPSIS
+**podman image sign**
+[**--help**|**-h**]
+[**--directory**|**-d**]
+[**--sign-by**]
+[ IMAGE... ]
+
+# DESCRIPTION
+**podmain image sign** will create a local signature for one or more local images that have
+been pulled from a registry. The signature will be written to a directory
+derived from the registry configuration files in /etc/containers/registries.d. By default, the signature will be written into /var/lib/containers/sigstore directory.
+
+# OPTIONS
+**--help** **-h**
+ Print usage statement.
+
+**--directory** **-d**
+ Store the signatures in the specified directory. Default: /var/lib/containers/sigstore
+
+**--sign-by**
+ Override the default identity of the signature.
+
+# EXAMPLES
+Sign the busybox image with the identify of foo@bar.com with a user's keyring and save the signature in /tmp/signatures/.
+
+ sudo podman image sign --sign-by foo@bar.com --directory /tmp/signatures docker://privateregistry.example.com/foobar
+
+# RELATED CONFIGURATION
+
+The write (and read) location for signatures is defined in YAML-based
+configuration files in /etc/containers/registries.d/. When you sign
+an image, podman will use those configuration files to determine
+where to write the signature based on the the name of the originating
+registry or a default storage value unless overriden with the --directory
+option. For example, consider the following configuration file.
+
+docker:
+ privateregistry.example.com:
+ sigstore: file:///var/lib/containers/sigstore
+
+When signing an image preceeded with the registry name 'privateregistry.example.com',
+the signature will be written into subdirectories of
+/var/lib/containers/sigstore/privateregistry.example.com. The use of 'sigstore' also means
+the signature will be 'read' from that same location on a pull-related function.
+
+# HISTORY
+November 2018, Originally compiled by Qi Wang (qiwan at redhat dot com)
diff --git a/docs/podman-image-trust.1.md b/docs/podman-image-trust.1.md
index 24209698c..3b6564315 100644
--- a/docs/podman-image-trust.1.md
+++ b/docs/podman-image-trust.1.md
@@ -1,7 +1,7 @@
% podman-image-trust "1"
# NAME
-podman\-trust - Manage container image trust policy
+podman\-trust - Manage container registry image trust policy
# SYNOPSIS
diff --git a/docs/podman-image.1.md b/docs/podman-image.1.md
index 19893dfda..5a0c4e5f9 100644
--- a/docs/podman-image.1.md
+++ b/docs/podman-image.1.md
@@ -27,7 +27,8 @@ The image command allows you to manage images
| rm | [podman-rm(1)](podman-rmi.1.md) | Removes one or more locally stored images. |
| save | [podman-save(1)](podman-save.1.md) | Save an image to docker-archive or oci. |
| tag | [podman-tag(1)](podman-tag.1.md) | Add an additional name to a local image. |
-| trust | [podman-image-trust(1)](podman-image-trust.1.md) | Manage container image trust policy.
+| trust | [podman-image-trust(1)](podman-image-trust.1.md) | Manage container image trust policy. |
+| sign | [podman-image-sign(1)](podman-image-sign.1.md) | Sign an image. |
## SEE ALSO
podman
diff --git a/docs/podman-info.1.md b/docs/podman-info.1.md
index 478f79467..836a2c420 100644
--- a/docs/podman-info.1.md
+++ b/docs/podman-info.1.md
@@ -61,6 +61,7 @@ registries:
- docker.io
- registry.access.redhat.com
store:
+ ConfigFile: /etc/containers/storage.conf
ContainerStore:
number: 37
GraphDriverName: overlay
diff --git a/docs/podman-mount.1.md b/docs/podman-mount.1.md
index ccc2d386d..2cccf5ee0 100644
--- a/docs/podman-mount.1.md
+++ b/docs/podman-mount.1.md
@@ -19,10 +19,20 @@ returned.
## OPTIONS
+**--all, a**
+
+Mount all containers.
+
**--format**
Print the mounted containers in specified format (json)
+**--latest, -l**
+
+Instead of providing the container name or ID, use the last created container.
+If you use methods other than Podman to run containers such as CRI-O, the last
+started container could be from either of those methods.
+
**--notruncate**
Do not truncate IDs in output.
diff --git a/docs/podman-rm.1.md b/docs/podman-rm.1.md
index 56664a8c1..4fcb0b6c5 100644
--- a/docs/podman-rm.1.md
+++ b/docs/podman-rm.1.md
@@ -11,14 +11,14 @@ podman\-rm - Remove one or more containers
## OPTIONS
-**--force, f**
-
-Force the removal of a running and paused containers
-
**--all, a**
Remove all containers. Can be used in conjunction with -f as well.
+**--force, f**
+
+Force the removal of a running and paused containers
+
**--latest, -l**
Instead of providing the container name or ID, use the last created container. If you use methods other than Podman
diff --git a/docs/podman-run.1.md b/docs/podman-run.1.md
index c0a466a9c..8b96ea6d9 100644
--- a/docs/podman-run.1.md
+++ b/docs/podman-run.1.md
@@ -41,7 +41,7 @@ option can be set multiple times.
Add an annotation to the container. The format is key=value.
The **--annotation** option can be set multiple times.
-**-a**, **--attach**=[]
+**--attach**, **-a**=[]
Attach to STDIN, STDOUT or STDERR.
@@ -162,7 +162,7 @@ If you have four memory nodes on your system (0-3), use `--cpuset-mems=0,1`
then processes in your container will only use memory from the first
two memory nodes.
-**-d**, **--detach**=*true*|*false*
+**--detach**, **-d**=*true*|*false*
Detached mode: run the container in the background and print the new container ID. The default is *false*.
@@ -235,7 +235,7 @@ ENTRYPOINT.
You need to specify multi option commands in the form of a json string.
-**-e**, **--env**=[]
+**--env**, **-e**=[]
Set environment variables
@@ -285,7 +285,15 @@ the container for the volumes.
content that disappears when the container is stopped.
- `ignore`: All volumes are just ignored and no action is taken.
-**-i**, **--interactive**=*true*|*false*
+**--init**
+
+Run an init inside the container that forwards signals and reaps processes.
+
+**--init-path**=""
+
+Path to the container-init binary.
+
+**--interactive**, **-i**=*true*|*false*
Keep STDIN open even if not attached. The default is *false*.
@@ -319,7 +327,7 @@ is not limited. If you specify a limit, it may be rounded up to a multiple
of the operating system's page size and the value can be very large,
millions of trillions.
-**-l**, **--label**=[]
+**--label**, **-l**=[]
Add metadata to a container (e.g., --label com.example.key=value)
@@ -351,7 +359,7 @@ according to RFC4862.
Not currently supported
-**-m**, **--memory**=""
+**--memory**, **-m**=""
Memory limit (format: <number>[<unit>], where unit = b, k, m or g)
@@ -400,7 +408,7 @@ to the container with **--name** then it will generate a random
string name. The name is useful any place you need to identify a container.
This works for both background and foreground containers.
-**--net**, **--network**="*bridge*"
+**--network**, **--net**="*bridge*"
Set the Network mode for the container:
- `bridge`: create a network stack on the default bridge
@@ -456,7 +464,7 @@ to all devices on the host, turns off graphdriver mount options, as well as
turning off most of the security measures protecting the host from the
container.
-**-p**, **--publish**=[]
+**--publish**, **-p**=[]
Publish a container's port, or range of ports, to the host
@@ -472,7 +480,7 @@ With ip: `podman run -p 127.0.0.1:$HOSTPORT:$CONTAINERPORT --name CONTAINER -t s
Use `podman port` to see the actual mapping: `podman port CONTAINER $CONTAINERPORT`
-**-P**, **--publish-all**=*true*|*false*
+**--publish-all**, **-P**=*true*|*false*
Publish all exposed ports to random ports on the host interfaces. The default is *false*.
@@ -615,7 +623,7 @@ options are the same as the Linux default `mount` flags. If you do not specify
any options, the systems uses the following options:
`rw,noexec,nosuid,nodev,size=65536k`.
-**-t**, **--tty**=*true*|*false*
+**--tty**, **-t**=*true*|*false*
Allocate a pseudo-TTY. The default is *false*.
@@ -637,7 +645,7 @@ The example maps uids 0-2000 in the container to the uids 30000-31999 on the hos
Ulimit options
-**-u**, **--user**=""
+**--user**, **-u**=""
Sets the username or UID used and optionally the groupname or GID for the specified command.
@@ -695,7 +703,7 @@ Current supported mount TYPES are bind, and tmpfs.
· tmpfs-mode: File mode of the tmpfs in octal. (e.g. 700 or 0700.) Defaults to 1777 in Linux.
-**-v**|**--volume**[=*[HOST-DIR:CONTAINER-DIR[:OPTIONS]]*]
+**--volume**, **-v**[=*[HOST-DIR:CONTAINER-DIR[:OPTIONS]]*]
Create a bind mount. If you specify, ` -v /HOST-DIR:/CONTAINER-DIR`, podman
bind mounts `/HOST-DIR` in the host to `/CONTAINER-DIR` in the podman
@@ -794,7 +802,7 @@ If the location of the volume from the source container overlaps with
data residing on a target container, then the volume hides
that data on the target.
-**-w**, **--workdir**=""
+**--workdir**, **-w**=""
Working directory inside the container
diff --git a/docs/podman-start.1.md b/docs/podman-start.1.md
index cfd44ac3a..f16a20efa 100644
--- a/docs/podman-start.1.md
+++ b/docs/podman-start.1.md
@@ -35,7 +35,7 @@ to run containers such as CRI-O, the last started container could be from either
**--sig-proxy**=*true*|*false*
-Proxy received signals to the process (non-TTY mode only). SIGCHLD, SIGSTOP, and SIGKILL are not proxied. The default is false.
+Proxy received signals to the process (non-TTY mode only). SIGCHLD, SIGSTOP, and SIGKILL are not proxied. The default is *true* when attaching, *false* otherwise.
## EXAMPLE
diff --git a/docs/podman-umount.1.md b/docs/podman-umount.1.md
index 70f30869a..cceb63019 100644
--- a/docs/podman-umount.1.md
+++ b/docs/podman-umount.1.md
@@ -29,6 +29,12 @@ processes have mounted it.
Note: This could cause other processes that are using the file system to fail,
as the mount point could be removed without their knowledge.
+**--latest, -l**
+
+Instead of providing the container name or ID, use the last created container.
+If you use methods other than Podman to run containers such as CRI-O, the last
+started container could be from either of those methods.
+
## EXAMPLE
podman umount containerID
diff --git a/docs/podman.1.md b/docs/podman.1.md
index bde349e6f..74e700fac 100644
--- a/docs/podman.1.md
+++ b/docs/podman.1.md
@@ -43,6 +43,10 @@ For the bind-mount conditions, only mounts explicitly requested by the caller vi
If `--hooks-dir` is unset for root callers, Podman and libpod will currently default to `/usr/share/containers/oci/hooks.d` and `/etc/containers/oci/hooks.d` in order of increasing precedence. Using these defaults is deprecated, and callers should migrate to explicitly setting `--hooks-dir`.
+Podman and libpod currently support an additional `precreate` state which is called before the runtime's `create` operation. Unlike the other stages, which receive the container state on their standard input, `precreate` hooks receive the proposed runtime configuration on their standard input. They may alter that configuration as they see fit, and write the altered form to their standard output.
+
+**WARNING**: the `precreate` hook lets you do powerful things, such as adding additional mounts to the runtime configuration. That power also makes it easy to break things. Before reporting libpod errors, try running your container with `precreate` hooks disabled to see if the problem is due to one of your hooks.
+
**--log-level**
Log messages above specified level: debug, info, warn, error (default), fatal or panic
@@ -64,7 +68,7 @@ Default state dir is configured in /etc/containers/storage.conf.
**--runtime**=**value**
-Path to the OCI compatible binary used to run containers
+Name of the OCI runtime as specified in libpod.conf or absolute path to the OCI compatible binary used to run containers.
**--storage-driver, -s**=**value**
diff --git a/docs/tutorials/podman_tutorial.md b/docs/tutorials/podman_tutorial.md
index f8332c820..2b938319f 100644
--- a/docs/tutorials/podman_tutorial.md
+++ b/docs/tutorials/podman_tutorial.md
@@ -112,7 +112,7 @@ sudo make install PREFIX=/usr
This sample container will run a very basic httpd server that serves only its index
page.
```console
-sudo podman run -dt -e HTTPD_VAR_RUN=/var/run/httpd -e HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \
+podman run -dt -e HTTPD_VAR_RUN=/var/run/httpd -e HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \
-e HTTPD_MAIN_CONF_PATH=/etc/httpd/conf \
-e HTTPD_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/httpd/ \
registry.fedoraproject.org/f27/httpd /usr/bin/run-httpd
@@ -123,7 +123,7 @@ will print the container ID after it has run.
### Listing running containers
The Podman *ps* command is used to list creating and running containers.
```console
-sudo podman ps
+podman ps
```
Note: If you add *-a* to the *ps* command, Podman will show all containers.
diff --git a/hack/get_ci_vm.sh b/hack/get_ci_vm.sh
index e9a755dd4..b058b4273 100755
--- a/hack/get_ci_vm.sh
+++ b/hack/get_ci_vm.sh
@@ -2,9 +2,14 @@
set -e
-cd $(dirname $0)/../
-
-VMNAME="${USER}-twidling-$1"
+RED="\e[1;36;41m"
+YEL="\e[1;33;44m"
+NOR="\e[0m"
+USAGE_WARNING="
+${YEL}WARNING: This will not work without local sudo access to run podman,${NOR}
+ ${YEL}and prior authorization to use the libpod GCP project. Also,${NOR}
+ ${YEL}possession of the proper ssh private key is required.${NOR}
+"
# TODO: Many/most of these values should come from .cirrus.yml
ZONE="us-central1-a"
CPUS="2"
@@ -12,74 +17,187 @@ MEMORY="4Gb"
DISK="200"
PROJECT="libpod-218412"
GOSRC="/var/tmp/go/src/github.com/containers/libpod"
+# Command shortcuts save some typing
+PGCLOUD="sudo podman run -it --rm -e AS_ID=$UID -e AS_USER=$USER --security-opt label=disable -v /home/$USER:$HOME -v /tmp:/tmp:ro quay.io/cevich/gcloud_centos:latest --configuration=libpod --project=$PROJECT"
+SCP_CMD="$PGCLOUD compute scp"
+
+LIBPODROOT=$(realpath "$(dirname $0)/../")
+# else: Assume $PWD is the root of the libpod repository
+[[ "$LIBPODROOT" != "/" ]] || LIBPODROOT=$PWD
+
+showrun() {
+ if [[ "$1" == "--background" ]]
+ then
+ shift
+ # Properly escape any nested spaces, so command can be copy-pasted
+ echo '+ '$(printf " %q" "$@")' &' > /dev/stderr
+ "$@" &
+ echo -e "${RED}<backgrounded>${NOR}"
+ else
+ echo '+ '$(printf " %q" "$@") > /dev/stderr
+ "$@"
+ fi
+}
+
+TEMPFILE=$(mktemp -p '' $(basename $0)_XXXXX.tar.bz2)
+cleanup() {
+ set +e
+ wait
+ rm -f "$TEMPFILE"
+}
+trap cleanup EXIT
-PGCLOUD="sudo podman run -it --rm -e AS_ID=$UID -e AS_USER=$USER -v /home/$USER:$HOME:z quay.io/cevich/gcloud_centos:latest"
-CREATE_CMD="$PGCLOUD compute instances create --zone=$ZONE --image=$1 --custom-cpu=$CPUS --custom-memory=$MEMORY --boot-disk-size=$DISK --labels=in-use-by=$USER $VMNAME"
-SSH_CMD="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no -F /dev/null"
-CLEANUP_CMD="$PGCLOUD compute instances delete --zone $ZONE --delete-disks=all $VMNAME"
+delvm() {
+ cleanup
+ echo -e "\n"
+ echo -e "\n${YEL}Offering to Delete $VMNAME ${RED}(Might take a minute or two)${NOR}"
+ showrun $CLEANUP_CMD # prompts for Yes/No
+}
-# COLOR!
-RED="\e[1;36;41m"
-YEL="\e[1;33;44m"
-NOR="\e[0m"
+image_hints() {
+ egrep '[[:space:]]+[[:alnum:]].+_CACHE_IMAGE_NAME:[[:space:]+"[[:print:]]+"' \
+ "$LIBPODROOT/.cirrus.yml" | cut -d: -f 2 | tr -d '"[:blank:]' | \
+ grep -v 'notready' | grep -v 'image-builder' | sort -u
+}
-if [[ -z "$1" ]]
-then
- echo -e "\n${RED}Error: No image-name specified. Some possible values (from .cirrus.yml).${NOR}"
- egrep 'image_name' ".cirrus.yml" | grep -v '#' | cut -d: -f 2 | tr -d [:blank:]
+show_usage() {
+ echo -e "\n${RED}ERROR: $1${NOR}"
+ echo -e "${YEL}Usage: $(basename $0) [-s | -p] <image_name>${NOR}\n"
+ if [[ -r ".cirrus.yml" ]]
+ then
+ echo -e "${YEL}Some possible image_name values (from .cirrus.yml):${NOR}"
+ image_hints
+ echo ""
+ fi
exit 1
-fi
+}
+
+get_env_vars() {
+ python -c '
+import yaml
+env=yaml.load(open(".cirrus.yml"))["env"]
+keys=[k for k in env if "ENCRYPTED" not in str(env[k])]
+for k,v in env.items():
+ v=str(v)
+ if "ENCRYPTED" not in v:
+ print "{0}=\"{1}\"".format(k, v),
+ '
+}
+
+parse_args(){
+ if [[ -z "$1" ]]
+ then
+ show_usage "Must specify at least one command-line parameter."
+ elif [[ "$1" == "-p" ]]
+ then
+ DEPS="PACKAGE_DEPS=true SOURCE_DEPS=false"
+ IMAGE_NAME="$2"
+
+ elif [[ "$1" == "-s" ]]
+ then
+ DEPS="PACKAGE_DEPS=false SOURCE_DEPS=true"
+ IMAGE_NAME="$2"
+ else # no -s or -p
+ DEPS="$(get_env_vars)"
+ IMAGE_NAME="$1"
+ fi
+
+ if [[ -z "$IMAGE_NAME" ]]
+ then
+ show_usage "No image-name specified."
+ fi
+
+ if [[ "$USER" =~ "root" ]]
+ then
+ show_usage "This script must be run as a regular user."
+ fi
+
+ echo -e "$USAGE_WARNING"
+
+ SETUP_CMD="env $DEPS $GOSRC/contrib/cirrus/setup_environment.sh"
+ VMNAME="${VMNAME:-${USER}-${IMAGE_NAME}}"
+ CREATE_CMD="$PGCLOUD compute instances create --zone=$ZONE --image=${IMAGE_NAME} --custom-cpu=$CPUS --custom-memory=$MEMORY --boot-disk-size=$DISK --labels=in-use-by=$USER $VMNAME"
+ SSH_CMD="$PGCLOUD compute ssh root@$VMNAME"
+ CLEANUP_CMD="$PGCLOUD compute instances delete --zone $ZONE --delete-disks=all $VMNAME"
+}
+
+##### main
+
+parse_args $@
-echo -e "\n${YEL}WARNING: This will not work without local sudo access to run podman,${NOR}"
-echo -e " ${YEL}and prior authorization to use the libpod GCP project. Also,${NOR}"
-echo -e " ${YEL}possession of the proper ssh private key is required.${NOR}"
+cd $LIBPODROOT
-if [[ "$USER" =~ "root" ]]
+# Attempt to determine if named 'libpod' gcloud configuration exists
+showrun $PGCLOUD info > $TEMPFILE
+if egrep -q "Account:.*None" "$TEMPFILE"
then
- echo -e "\n${RED}ERROR: This script must be run as a regular user${NOR}"
- exit 2
+ echo -e "\n${YEL}WARNING: Can't find gcloud configuration for libpod, running init.${NOR}"
+ echo -e " ${RED}Please choose "#1: Re-initialize" and "login" if asked.${NOR}"
+ showrun $PGCLOUD init --project=$PROJECT --console-only --skip-diagnostics
+
+ # Verify it worked (account name == someone@example.com)
+ $PGCLOUD info > $TEMPFILE
+ if egrep -q "Account:.*None" "$TEMPFILE"
+ then
+ echo -e "${RED}ERROR: Could not initialize libpod configuration in gcloud.${NOR}"
+ exit 5
+ fi
+
+ # If this is the only config, make it the default to avoid persistent warnings from gcloud
+ [[ -r "$HOME/.config/gcloud/configurations/config_default" ]] || \
+ ln "$HOME/.config/gcloud/configurations/config_libpod" \
+ "$HOME/.config/gcloud/configurations/config_default"
fi
-if [[ ! -r "$HOME/.config/gcloud/active_config" ]]
+# Couldn't make rsync work with gcloud's ssh wrapper :(
+echo -e "\n${YEL}Packing up repository into a tarball $VMNAME.${NOR}"
+showrun --background tar cjf $TEMPFILE --warning=no-file-changed -C $LIBPODROOT .
+
+trap delvm INT # Allow deleting VM if CTRL-C during create
+# This fails if VM already exists: permit this usage to re-init
+echo -e "\n${YEL}Trying to creating a VM named $VMNAME ${RED}(might take a minute/two. Errors ignored).${NOR}"
+showrun $CREATE_CMD || true # allow re-running commands below when "delete: N"
+
+# Any subsequent failure should prompt for VM deletion
+trap delvm EXIT
+
+echo -e "\n${YEL}Waiting up to 30s for ssh port to open${NOR}"
+ATTEMPTS=10
+for (( COUNT=1 ; COUNT <= $ATTEMPTS ; COUNT++ ))
+do
+ if $SSH_CMD --command "true"; then break; else sleep 3s; fi
+done
+if (( COUNT > $ATTEMPTS ))
then
- echo -e "\n${RED}ERROR: Can't find gcloud configuration, attempting to run init.${NOR}"
- $PGCLOUD init --project=$PROJECT
+ echo -e "\n${RED}Failed${NOR}"
+ exit 7
fi
+echo -e "${YEL}Got it${NOR}"
-cleanup() {
- echo -e "\n${YEL}Deleting $VMNAME ${RED}(Might take a minute or two)${NOR}
-+ $CLEANUP_CMD
-"
- $CLEANUP_CMD # prompts for Yes/No
-}
-
-trap cleanup EXIT
+if $SSH_CMD --command "test -r /root/.bash_profile_original"
+then
+ echo -e "\n${YEL}Resetting environment configuration${NOR}"
+ showrun $SSH_CMD --command "cp /root/.bash_profile_original /root/.bash_profile"
+fi
-echo -e "\n${YEL}Trying to creating a VM named $VMNAME (not fatal if already exists).${NOR}"
-echo "+ $CREATE_CMD"
-$CREATE_CMD || true # allow re-running commands below when "delete: N"
+echo -e "\n${YEL}Removing and re-creating $GOSRC on $VMNAME.${NOR}"
+showrun $SSH_CMD --command "rm -rf $GOSRC"
+showrun $SSH_CMD --command "mkdir -p $GOSRC"
-echo -e "\n${YEL}Attempting to retrieve IP address of existing ${VMNAME}${NOR}."
-IP=`$PGCLOUD compute instances list --filter=name=$VMNAME --limit=1 '--format=csv(networkInterfaces.accessConfigs.natIP)' | tr --complement --delete .[:digit:]`
+echo -e "\n${YEL}Transfering tarball to $VMNAME.${NOR}"
+wait
+showrun $SCP_CMD $TEMPFILE root@$VMNAME:$TEMPFILE
-echo -e "\n${YEL}Creating $GOSRC directory.${NOR}"
-SSH_MKDIR="$SSH_CMD root@$IP mkdir -vp $GOSRC"
-echo "+ $SSH_MKDIR"
-$SSH_MKDIR
+echo -e "\n${YEL}Unpacking tarball into $GOSRC on $VMNAME.${NOR}"
+showrun $SSH_CMD --command "tar xjf $TEMPFILE -C $GOSRC"
-echo -e "\n${YEL}Synchronizing local repository to $IP:${GOSRC}${NOR} ."
-export RSYNC_RSH="$SSH_CMD"
-RSYNC_CMD="rsync --quiet --recursive --update --links --safe-links --perms --sparse $PWD/ root@$IP:$GOSRC/"
-echo "+ export RSYNC_RSH=\"$SSH_CMD\""
-echo "+ $RSYNC_CMD"
-$RSYNC_CMD
+echo -e "\n${YEL}Removing tarball on $VMNAME.${NOR}"
+showrun $SSH_CMD --command "rm -f $TEMPFILE"
echo -e "\n${YEL}Executing environment setup${NOR}"
-ENV_CMD="$SSH_CMD root@$IP env CI=true $GOSRC/contrib/cirrus/setup_environment.sh"
-echo "+ $ENV_CMD"
-$SSH_CMD root@$IP $GOSRC/contrib/cirrus/setup_environment.sh
-
-echo -e "\n${YEL}Connecting to $VMNAME ${RED}(option to delete VM upon logout).${NOR}"
-SSH_CMD="$SSH_CMD -t root@$IP"
-echo "+ $SSH_CMD"
-$SSH_CMD "cd $GOSRC ; bash -il"
+[[ "$1" == "-p" ]] && echo -e "${RED}Using package-based dependencies.${NOR}"
+[[ "$1" == "-s" ]] && echo -e "${RED}Using source-based dependencies.${NOR}"
+showrun $SSH_CMD --command "$SETUP_CMD"
+
+echo -e "\n${YEL}Connecting to $VMNAME ${RED}(option to delete VM upon logout).${NOR}\n"
+showrun $SSH_CMD -- -t "cd $GOSRC && exec env $DEPS bash -il"
diff --git a/hack/install_catatonit.sh b/hack/install_catatonit.sh
new file mode 100755
index 000000000..e5532a200
--- /dev/null
+++ b/hack/install_catatonit.sh
@@ -0,0 +1,15 @@
+#!/bin/bash -e
+BASE_PATH="/usr/libexec/podman"
+CATATONIT_PATH="${BASE_PATH}/catatonit"
+CATATONIT_VERSION="v0.1.3"
+
+if [ -f $CATATONIT_PATH ]; then
+ echo "skipping ... catatonit is already installed"
+else
+ echo "downloading catatonit to $CATATONIT_PATH"
+ curl -o catatonit -L https://github.com/openSUSE/catatonit/releases/download/$CATATONIT_VERSION/catatonit.x86_64
+ chmod +x catatonit
+ install ${SELINUXOPT} -d -m 755 $BASE_PATH
+ install ${SELINUXOPT} -m 755 catatonit $CATATONIT_PATH
+ rm catatonit
+fi
diff --git a/install.md b/install.md
index efb568b66..c5268c04d 100644
--- a/install.md
+++ b/install.md
@@ -1,5 +1,65 @@
# libpod Installation Instructions
+## Installing packaged versions of Podman
+
+#### [Arch Linux](https://www.archlinux.org)
+
+Podman is available in the AUR through the [libpod package](https://aur.archlinux.org/packages/libpod/)
+
+#### [Fedora](https://www.fedoraproject.org), [CentOS](https://www.centos.org)
+
+```bash
+sudo yum -y install podman
+```
+
+
+#### [Fedora-CoreOS](https://coreos.fedoraproject.org), [Fedora SilverBlue](https://silverblue.fedoraproject.org)
+
+Built-in, no need to install
+
+#### [Gentoo](https://www.gentoo.org)
+
+```bash
+sudo emerge app-emulation/libpod
+```
+
+#### [openSUSE](https://www.opensuse.org)
+
+```bash
+sudo zypper install podman
+```
+
+#### [openSUSE Kubic](https://kubic.opensuse.org)
+
+Built-in, no need to install
+
+#### [RHEL7](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux)
+
+Subscribe, then enable Extras channel and install podman.
+
+```bash
+sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
+sudo yum -y install podman
+```
+
+#### [RHEL8 Beta](https://www.redhat.com/en/blog/powering-its-future-while-preserving-present-introducing-red-hat-enterprise-linux-8-beta?intcmp=701f2000001Cz6OAAS)
+
+```bash
+sudo yum module enable -y container-tools:1.0
+sudo yum module install -y container-tools:1.0
+```
+
+#### [Ubuntu](https://www.ubuntu.com)
+
+```bash
+sudo apt-get update -qq
+sudo apt-get install -qq -y software-properties-common
+sudo add-apt-repository -y ppa:projectatomic/ppa
+sudo apt-get -qq -y install podman
+```
+
+## Building from scratch
+
### Prerequisites
#### runc installed
diff --git a/libpod.conf b/libpod.conf
index d7469af68..acd6c8982 100644
--- a/libpod.conf
+++ b/libpod.conf
@@ -4,17 +4,6 @@
# Default transport method for pulling and pushing for images
image_default_transport = "docker://"
-# Paths to look for a valid OCI runtime (runc, runv, etc)
-runtime_path = [
- "/usr/bin/runc",
- "/usr/sbin/runc",
- "/usr/local/bin/runc",
- "/usr/local/sbin/runc",
- "/sbin/runc",
- "/bin/runc",
- "/usr/lib/cri-o-runc/sbin/runc"
-]
-
# Paths to look for the Conmon container manager binary
conmon_path = [
"/usr/libexec/podman/conmon",
@@ -35,6 +24,9 @@ conmon_env_vars = [
# CGroup Manager - valid values are "systemd" and "cgroupfs"
cgroup_manager = "systemd"
+# Container init binary
+#init_path = "/usr/libexec/podman/catatonit"
+
# Directory for persistent libpod files (database, etc)
# By default, this will be configured relative to where containers/storage
# stores containers
@@ -95,3 +87,15 @@ pause_command = "/pause"
# Default libpod support for container labeling
# label=true
+
+# Paths to look for a valid OCI runtime (runc, runv, etc)
+[runtimes]
+runc = [
+ "/usr/bin/runc",
+ "/usr/sbin/runc",
+ "/usr/local/bin/runc",
+ "/usr/local/sbin/runc",
+ "/sbin/runc",
+ "/bin/runc",
+ "/usr/lib/cri-o-runc/sbin/runc"
+]
diff --git a/libpod/adapter/client.go b/libpod/adapter/client.go
new file mode 100644
index 000000000..b3bb9acae
--- /dev/null
+++ b/libpod/adapter/client.go
@@ -0,0 +1,36 @@
+// +build remoteclient
+
+package adapter
+
+import (
+ "os"
+
+ "github.com/sirupsen/logrus"
+ "github.com/varlink/go/varlink"
+)
+
+// DefaultAddress is the default address of the varlink socket
+const DefaultAddress = "unix:/run/podman/io.podman"
+
+// Connect provides a varlink connection
+func (r RemoteRuntime) Connect() (*varlink.Connection, error) {
+ var err error
+ var connection *varlink.Connection
+ if bridge := os.Getenv("PODMAN_VARLINK_BRIDGE"); bridge != "" {
+ logrus.Infof("Connecting with varlink bridge")
+ logrus.Debugf("%s", bridge)
+ connection, err = varlink.NewBridge(bridge)
+ } else {
+ address := os.Getenv("PODMAN_VARLINK_ADDRESS")
+ if address == "" {
+ address = DefaultAddress
+ }
+ logrus.Infof("Connecting with varlink address")
+ logrus.Debugf("%s", address)
+ connection, err = varlink.NewConnection(address)
+ }
+ if err != nil {
+ return nil, err
+ }
+ return connection, nil
+}
diff --git a/libpod/adapter/containers_remote.go b/libpod/adapter/containers_remote.go
new file mode 100644
index 000000000..9623304e5
--- /dev/null
+++ b/libpod/adapter/containers_remote.go
@@ -0,0 +1,50 @@
+// +build remoteclient
+
+package adapter
+
+import (
+ "encoding/json"
+
+ iopodman "github.com/containers/libpod/cmd/podman/varlink"
+ "github.com/containers/libpod/libpod"
+ "github.com/containers/libpod/pkg/inspect"
+)
+
+// Inspect returns an inspect struct from varlink
+func (c *Container) Inspect(size bool) (*inspect.ContainerInspectData, error) {
+ reply, err := iopodman.ContainerInspectData().Call(c.Runtime.Conn, c.ID())
+ if err != nil {
+ return nil, err
+ }
+ data := inspect.ContainerInspectData{}
+ if err := json.Unmarshal([]byte(reply), &data); err != nil {
+ return nil, err
+ }
+ return &data, err
+}
+
+// ID returns the ID of the container
+func (c *Container) ID() string {
+ return c.config.ID
+}
+
+// GetArtifact returns a container's artifacts
+func (c *Container) GetArtifact(name string) ([]byte, error) {
+ var data []byte
+ reply, err := iopodman.ContainerArtifacts().Call(c.Runtime.Conn, c.ID(), name)
+ if err != nil {
+ return nil, err
+ }
+ if err := json.Unmarshal([]byte(reply), &data); err != nil {
+ return nil, err
+ }
+ return data, err
+}
+
+// Config returns a container's Config ... same as ctr.Config()
+func (c *Container) Config() *libpod.ContainerConfig {
+ if c.config != nil {
+ return c.config
+ }
+ return c.Runtime.Config(c.ID())
+}
diff --git a/libpod/adapter/images_remote.go b/libpod/adapter/images_remote.go
new file mode 100644
index 000000000..e7b38dccc
--- /dev/null
+++ b/libpod/adapter/images_remote.go
@@ -0,0 +1,24 @@
+// +build remoteclient
+
+package adapter
+
+import (
+ "context"
+ "encoding/json"
+
+ iopodman "github.com/containers/libpod/cmd/podman/varlink"
+ "github.com/containers/libpod/pkg/inspect"
+)
+
+// Inspect returns returns an ImageData struct from over a varlink connection
+func (i *ContainerImage) Inspect(ctx context.Context) (*inspect.ImageData, error) {
+ reply, err := iopodman.InspectImage().Call(i.Runtime.Conn, i.ID())
+ if err != nil {
+ return nil, err
+ }
+ data := inspect.ImageData{}
+ if err := json.Unmarshal([]byte(reply), &data); err != nil {
+ return nil, err
+ }
+ return &data, nil
+}
diff --git a/libpod/adapter/info_remote.go b/libpod/adapter/info_remote.go
new file mode 100644
index 000000000..3b691ed17
--- /dev/null
+++ b/libpod/adapter/info_remote.go
@@ -0,0 +1,56 @@
+// +build remoteclient
+
+package adapter
+
+import (
+ "encoding/json"
+
+ "github.com/containers/libpod/cmd/podman/varlink"
+ "github.com/containers/libpod/libpod"
+)
+
+// Info returns information for the host system and its components
+func (r RemoteRuntime) Info() ([]libpod.InfoData, error) {
+ // TODO the varlink implementation for info should be updated to match the output for regular info
+ var (
+ reply []libpod.InfoData
+ hostInfo map[string]interface{}
+ store map[string]interface{}
+ )
+
+ registries := make(map[string]interface{})
+ insecureRegistries := make(map[string]interface{})
+ conn, err := r.Connect()
+ if err != nil {
+ return nil, err
+ }
+ defer conn.Close()
+ info, err := iopodman.GetInfo().Call(conn)
+ if err != nil {
+ return nil, err
+ }
+
+ // info.host -> map[string]interface{}
+ h, err := json.Marshal(info.Host)
+ if err != nil {
+ return nil, err
+ }
+ json.Unmarshal(h, &hostInfo)
+
+ // info.store -> map[string]interface{}
+ s, err := json.Marshal(info.Store)
+ if err != nil {
+ return nil, err
+ }
+ json.Unmarshal(s, &store)
+
+ registries["registries"] = info.Registries
+ insecureRegistries["registries"] = info.Insecure_registries
+
+ // Add everything to the reply
+ reply = append(reply, libpod.InfoData{Type: "host", Data: hostInfo})
+ reply = append(reply, libpod.InfoData{Type: "registries", Data: registries})
+ reply = append(reply, libpod.InfoData{Type: "insecure registries", Data: insecureRegistries})
+ reply = append(reply, libpod.InfoData{Type: "store", Data: store})
+ return reply, nil
+}
diff --git a/libpod/adapter/runtime.go b/libpod/adapter/runtime.go
new file mode 100644
index 000000000..1f3599082
--- /dev/null
+++ b/libpod/adapter/runtime.go
@@ -0,0 +1,101 @@
+// +build !remoteclient
+
+package adapter
+
+import (
+ "context"
+ "io"
+
+ "github.com/containers/image/types"
+ "github.com/containers/libpod/cmd/podman/libpodruntime"
+ "github.com/containers/libpod/libpod"
+ "github.com/containers/libpod/libpod/image"
+ "github.com/urfave/cli"
+)
+
+// LocalRuntime describes a typical libpod runtime
+type LocalRuntime struct {
+ *libpod.Runtime
+ Remote bool
+}
+
+// ContainerImage ...
+type ContainerImage struct {
+ *image.Image
+}
+
+// Container ...
+type Container struct {
+ *libpod.Container
+}
+
+// GetRuntime returns a LocalRuntime struct with the actual runtime embedded in it
+func GetRuntime(c *cli.Context) (*LocalRuntime, error) {
+ runtime, err := libpodruntime.GetRuntime(c)
+ if err != nil {
+ return nil, err
+ }
+ return &LocalRuntime{
+ Runtime: runtime,
+ }, nil
+}
+
+// GetImages returns a slice of images in containerimages
+func (r *LocalRuntime) GetImages() ([]*ContainerImage, error) {
+ var containerImages []*ContainerImage
+ images, err := r.Runtime.ImageRuntime().GetImages()
+ if err != nil {
+ return nil, err
+ }
+ for _, i := range images {
+ containerImages = append(containerImages, &ContainerImage{i})
+ }
+ return containerImages, nil
+
+}
+
+// NewImageFromLocal returns a containerimage representation of a image from local storage
+func (r *LocalRuntime) NewImageFromLocal(name string) (*ContainerImage, error) {
+ img, err := r.Runtime.ImageRuntime().NewFromLocal(name)
+ if err != nil {
+ return nil, err
+ }
+ return &ContainerImage{img}, nil
+}
+
+// LoadFromArchiveReference calls into local storage to load an image from an archive
+func (r *LocalRuntime) LoadFromArchiveReference(ctx context.Context, srcRef types.ImageReference, signaturePolicyPath string, writer io.Writer) ([]*ContainerImage, error) {
+ var containerImages []*ContainerImage
+ imgs, err := r.Runtime.ImageRuntime().LoadFromArchiveReference(ctx, srcRef, signaturePolicyPath, writer)
+ if err != nil {
+ return nil, err
+ }
+ for _, i := range imgs {
+ ci := ContainerImage{i}
+ containerImages = append(containerImages, &ci)
+ }
+ return containerImages, nil
+}
+
+// New calls into local storage to look for an image in local storage or to pull it
+func (r *LocalRuntime) New(ctx context.Context, name, signaturePolicyPath, authfile string, writer io.Writer, dockeroptions *image.DockerRegistryOptions, signingoptions image.SigningOptions, forcePull bool) (*ContainerImage, error) {
+ img, err := r.Runtime.ImageRuntime().New(ctx, name, signaturePolicyPath, authfile, writer, dockeroptions, signingoptions, forcePull)
+ if err != nil {
+ return nil, err
+ }
+ return &ContainerImage{img}, nil
+}
+
+// RemoveImage calls into local storage and removes an image
+func (r *LocalRuntime) RemoveImage(ctx context.Context, img *ContainerImage, force bool) (string, error) {
+ return r.Runtime.RemoveImage(ctx, img.Image, force)
+}
+
+// LookupContainer ...
+func (r *LocalRuntime) LookupContainer(idOrName string) (*Container, error) {
+ ctr, err := r.Runtime.LookupContainer(idOrName)
+ if err != nil {
+ return nil, err
+ }
+ return &Container{ctr}, nil
+}
diff --git a/libpod/adapter/runtime_remote.go b/libpod/adapter/runtime_remote.go
new file mode 100644
index 000000000..7189348bc
--- /dev/null
+++ b/libpod/adapter/runtime_remote.go
@@ -0,0 +1,322 @@
+// +build remoteclient
+
+package adapter
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "io"
+ "strings"
+ "time"
+
+ "github.com/containers/image/types"
+ "github.com/containers/libpod/cmd/podman/varlink"
+ "github.com/containers/libpod/libpod"
+ "github.com/containers/libpod/libpod/image"
+ "github.com/opencontainers/go-digest"
+ "github.com/sirupsen/logrus"
+ "github.com/urfave/cli"
+ "github.com/varlink/go/varlink"
+)
+
+// ImageRuntime is wrapper for image runtime
+type RemoteImageRuntime struct{}
+
+// RemoteRuntime describes a wrapper runtime struct
+type RemoteRuntime struct {
+ Conn *varlink.Connection
+ Remote bool
+}
+
+// LocalRuntime describes a typical libpod runtime
+type LocalRuntime struct {
+ *RemoteRuntime
+}
+
+// GetRuntime returns a LocalRuntime struct with the actual runtime embedded in it
+func GetRuntime(c *cli.Context) (*LocalRuntime, error) {
+ runtime := RemoteRuntime{}
+ conn, err := runtime.Connect()
+ if err != nil {
+ return nil, err
+ }
+ rr := RemoteRuntime{
+ Conn: conn,
+ Remote: true,
+ }
+ foo := LocalRuntime{
+ &rr,
+ }
+ return &foo, nil
+}
+
+// Shutdown is a bogus wrapper for compat with the libpod runtime
+func (r RemoteRuntime) Shutdown(force bool) error {
+ return nil
+}
+
+// ContainerImage
+type ContainerImage struct {
+ remoteImage
+}
+
+type remoteImage struct {
+ ID string
+ Labels map[string]string
+ RepoTags []string
+ RepoDigests []string
+ Parent string
+ Size int64
+ Created time.Time
+ InputName string
+ Names []string
+ Digest digest.Digest
+ isParent bool
+ Runtime *LocalRuntime
+}
+
+// Container ...
+type Container struct {
+ remoteContainer
+}
+
+// remoteContainer ....
+type remoteContainer struct {
+ Runtime *LocalRuntime
+ config *libpod.ContainerConfig
+ state *libpod.ContainerState
+}
+
+// GetImages returns a slice of containerimages over a varlink connection
+func (r *LocalRuntime) GetImages() ([]*ContainerImage, error) {
+ var newImages []*ContainerImage
+ images, err := iopodman.ListImages().Call(r.Conn)
+ if err != nil {
+ return nil, err
+ }
+ for _, i := range images {
+ name := i.Id
+ if len(i.RepoTags) > 1 {
+ name = i.RepoTags[0]
+ }
+ newImage, err := imageInListToContainerImage(i, name, r)
+ if err != nil {
+ return nil, err
+ }
+ newImages = append(newImages, newImage)
+ }
+ return newImages, nil
+}
+
+func imageInListToContainerImage(i iopodman.ImageInList, name string, runtime *LocalRuntime) (*ContainerImage, error) {
+ created, err := splitStringDate(i.Created)
+ if err != nil {
+ return nil, err
+ }
+ ri := remoteImage{
+ InputName: name,
+ ID: i.Id,
+ Labels: i.Labels,
+ RepoTags: i.RepoTags,
+ RepoDigests: i.RepoTags,
+ Parent: i.ParentId,
+ Size: i.Size,
+ Created: created,
+ Names: i.RepoTags,
+ isParent: i.IsParent,
+ Runtime: runtime,
+ }
+ return &ContainerImage{ri}, nil
+}
+
+// NewImageFromLocal returns a container image representation of a image over varlink
+func (r *LocalRuntime) NewImageFromLocal(name string) (*ContainerImage, error) {
+ img, err := iopodman.GetImage().Call(r.Conn, name)
+ if err != nil {
+ return nil, err
+ }
+ return imageInListToContainerImage(img, name, r)
+
+}
+
+// LoadFromArchiveReference creates an image from a local archive
+func (r *LocalRuntime) LoadFromArchiveReference(ctx context.Context, srcRef types.ImageReference, signaturePolicyPath string, writer io.Writer) ([]*ContainerImage, error) {
+ // TODO We need to find a way to leak certDir, creds, and the tlsverify into this function, normally this would
+ // come from cli options but we don't want want those in here either.
+ imageID, err := iopodman.PullImage().Call(r.Conn, srcRef.DockerReference().String(), "", "", signaturePolicyPath, true)
+ if err != nil {
+ return nil, err
+ }
+ newImage, err := r.NewImageFromLocal(imageID)
+ if err != nil {
+ return nil, err
+ }
+ return []*ContainerImage{newImage}, nil
+}
+
+// New calls into local storage to look for an image in local storage or to pull it
+func (r *LocalRuntime) New(ctx context.Context, name, signaturePolicyPath, authfile string, writer io.Writer, dockeroptions *image.DockerRegistryOptions, signingoptions image.SigningOptions, forcePull bool) (*ContainerImage, error) {
+ // TODO Creds needs to be figured out here too, like above
+ tlsBool := dockeroptions.DockerInsecureSkipTLSVerify
+ // Remember SkipTlsVerify is the opposite of tlsverify
+ // If tlsBook is true or undefined, we do not skip
+ SkipTlsVerify := false
+ if tlsBool == types.OptionalBoolFalse {
+ SkipTlsVerify = true
+ }
+ imageID, err := iopodman.PullImage().Call(r.Conn, name, dockeroptions.DockerCertPath, "", signaturePolicyPath, SkipTlsVerify)
+ if err != nil {
+ return nil, err
+ }
+ newImage, err := r.NewImageFromLocal(imageID)
+ if err != nil {
+ return nil, err
+ }
+ return newImage, nil
+}
+
+func splitStringDate(d string) (time.Time, error) {
+ fields := strings.Fields(d)
+ t := fmt.Sprintf("%sT%sZ", fields[0], fields[1])
+ return time.ParseInLocation(time.RFC3339Nano, t, time.UTC)
+}
+
+// IsParent goes through the layers in the store and checks if i.TopLayer is
+// the parent of any other layer in store. Double check that image with that
+// layer exists as well.
+func (ci *ContainerImage) IsParent() (bool, error) {
+ return ci.remoteImage.isParent, nil
+}
+
+// ID returns the image ID as a string
+func (ci *ContainerImage) ID() string {
+ return ci.remoteImage.ID
+}
+
+// Names returns a string array of names associated with the image
+func (ci *ContainerImage) Names() []string {
+ return ci.remoteImage.Names
+}
+
+// Created returns the time the image was created
+func (ci *ContainerImage) Created() time.Time {
+ return ci.remoteImage.Created
+}
+
+// Size returns the size of the image
+func (ci *ContainerImage) Size(ctx context.Context) (*uint64, error) {
+ usize := uint64(ci.remoteImage.Size)
+ return &usize, nil
+}
+
+// Digest returns the image's digest
+func (ci *ContainerImage) Digest() digest.Digest {
+ return ci.remoteImage.Digest
+}
+
+// Labels returns a map of the image's labels
+func (ci *ContainerImage) Labels(ctx context.Context) (map[string]string, error) {
+ return ci.remoteImage.Labels, nil
+}
+
+// Dangling returns a bool if the image is "dangling"
+func (ci *ContainerImage) Dangling() bool {
+ return len(ci.Names()) == 0
+}
+
+// TagImage ...
+func (ci *ContainerImage) TagImage(tag string) error {
+ _, err := iopodman.TagImage().Call(ci.Runtime.Conn, ci.ID(), tag)
+ return err
+}
+
+// RemoveImage calls varlink to remove an image
+func (r *LocalRuntime) RemoveImage(ctx context.Context, img *ContainerImage, force bool) (string, error) {
+ return iopodman.RemoveImage().Call(r.Conn, img.InputName, force)
+}
+
+// History returns the history of an image and its layers
+func (ci *ContainerImage) History(ctx context.Context) ([]*image.History, error) {
+ var imageHistories []*image.History
+
+ reply, err := iopodman.HistoryImage().Call(ci.Runtime.Conn, ci.InputName)
+ if err != nil {
+ return nil, err
+ }
+ for _, h := range reply {
+ created, err := splitStringDate(h.Created)
+ if err != nil {
+ return nil, err
+ }
+ ih := image.History{
+ ID: h.Id,
+ Created: &created,
+ CreatedBy: h.CreatedBy,
+ Size: h.Size,
+ Comment: h.Comment,
+ }
+ imageHistories = append(imageHistories, &ih)
+ }
+ return imageHistories, nil
+}
+
+// LookupContainer gets basic information about container over a varlink
+// connection and then translates it to a *Container
+func (r *LocalRuntime) LookupContainer(idOrName string) (*Container, error) {
+ state, err := r.ContainerState(idOrName)
+ if err != nil {
+ return nil, err
+ }
+ config := r.Config(idOrName)
+ if err != nil {
+ return nil, err
+ }
+
+ rc := remoteContainer{
+ r,
+ config,
+ state,
+ }
+
+ c := Container{
+ rc,
+ }
+ return &c, nil
+}
+
+func (r *LocalRuntime) GetLatestContainer() (*Container, error) {
+ return nil, libpod.ErrNotImplemented
+}
+
+// ContainerState returns the "state" of the container.
+func (r *LocalRuntime) ContainerState(name string) (*libpod.ContainerState, error) { //no-lint
+ reply, err := iopodman.ContainerStateData().Call(r.Conn, name)
+ if err != nil {
+ return nil, err
+ }
+ data := libpod.ContainerState{}
+ if err := json.Unmarshal([]byte(reply), &data); err != nil {
+ return nil, err
+ }
+ return &data, err
+
+}
+
+// Config returns a container config
+func (r *LocalRuntime) Config(name string) *libpod.ContainerConfig {
+ // TODO the Spec being returned is not populated. Matt and I could not figure out why. Will defer
+ // further looking into it for after devconf.
+ // The libpod function for this has no errors so we are kind of in a tough
+ // spot here. Logging the errors for now.
+ reply, err := iopodman.ContainerConfig().Call(r.Conn, name)
+ if err != nil {
+ logrus.Error("call to container.config failed")
+ }
+ data := libpod.ContainerConfig{}
+ if err := json.Unmarshal([]byte(reply), &data); err != nil {
+ logrus.Error("failed to unmarshal container inspect data")
+ }
+ return &data
+
+}
diff --git a/libpod/boltdb_state.go b/libpod/boltdb_state.go
index ba8f7375a..5bc15dd7f 100644
--- a/libpod/boltdb_state.go
+++ b/libpod/boltdb_state.go
@@ -2,15 +2,17 @@ package libpod
import (
"bytes"
- "encoding/json"
"strings"
"sync"
"github.com/boltdb/bolt"
+ jsoniter "github.com/json-iterator/go"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)
+var json = jsoniter.ConfigCompatibleWithStandardLibrary
+
// BoltState is a state implementation backed by a Bolt DB
type BoltState struct {
valid bool
@@ -203,7 +205,7 @@ func (s *BoltState) Refresh() error {
return errors.Wrapf(ErrInternal, "container %s missing state in DB", string(id))
}
- state := new(containerState)
+ state := new(ContainerState)
if err := json.Unmarshal(stateBytes, state); err != nil {
return errors.Wrapf(err, "error unmarshalling state for container %s", string(id))
@@ -322,8 +324,8 @@ func (s *BoltState) Container(id string) (*Container, error) {
ctrID := []byte(id)
ctr := new(Container)
- ctr.config = new(Config)
- ctr.state = new(containerState)
+ ctr.config = new(ContainerConfig)
+ ctr.state = new(ContainerState)
db, err := s.getDBCon()
if err != nil {
@@ -358,8 +360,8 @@ func (s *BoltState) LookupContainer(idOrName string) (*Container, error) {
}
ctr := new(Container)
- ctr.config = new(Config)
- ctr.state = new(containerState)
+ ctr.config = new(ContainerConfig)
+ ctr.state = new(ContainerState)
db, err := s.getDBCon()
if err != nil {
@@ -540,7 +542,7 @@ func (s *BoltState) UpdateContainer(ctr *Container) error {
return errors.Wrapf(ErrNSMismatch, "container %s is in namespace %q, does not match our namespace %q", ctr.ID(), ctr.config.Namespace, s.namespace)
}
- newState := new(containerState)
+ newState := new(ContainerState)
netNSPath := ""
ctrID := []byte(ctr.ID())
@@ -751,8 +753,8 @@ func (s *BoltState) AllContainers() ([]*Container, error) {
}
ctr := new(Container)
- ctr.config = new(Config)
- ctr.state = new(containerState)
+ ctr.config = new(ContainerConfig)
+ ctr.state = new(ContainerState)
if err := s.getContainerFromDB(id, ctr, ctrBucket); err != nil {
// If the error is a namespace mismatch, we can
@@ -1137,8 +1139,8 @@ func (s *BoltState) PodContainers(pod *Pod) ([]*Container, error) {
// Iterate through all containers in the pod
err = podCtrs.ForEach(func(id, val []byte) error {
newCtr := new(Container)
- newCtr.config = new(Config)
- newCtr.state = new(containerState)
+ newCtr.config = new(ContainerConfig)
+ newCtr.state = new(ContainerState)
ctrs = append(ctrs, newCtr)
return s.getContainerFromDB(id, newCtr, ctrBkt)
diff --git a/libpod/boltdb_state_internal.go b/libpod/boltdb_state_internal.go
index 06f8dcb24..ea150cfac 100644
--- a/libpod/boltdb_state_internal.go
+++ b/libpod/boltdb_state_internal.go
@@ -2,8 +2,6 @@ package libpod
import (
"bytes"
- "encoding/json"
- "path/filepath"
"runtime"
"strings"
@@ -288,10 +286,9 @@ func (s *BoltState) getContainerFromDB(id []byte, ctr *Container, ctrsBkt *bolt.
}
// Get the lock
- lockPath := filepath.Join(s.runtime.lockDir, string(id))
- lock, err := storage.GetLockfile(lockPath)
+ lock, err := s.runtime.lockManager.RetrieveLock(ctr.config.LockID)
if err != nil {
- return errors.Wrapf(err, "error retrieving lockfile for container %s", string(id))
+ return errors.Wrapf(err, "error retrieving lock for container %s", string(id))
}
ctr.lock = lock
@@ -324,10 +321,9 @@ func (s *BoltState) getPodFromDB(id []byte, pod *Pod, podBkt *bolt.Bucket) error
}
// Get the lock
- lockPath := filepath.Join(s.runtime.lockDir, string(id))
- lock, err := storage.GetLockfile(lockPath)
+ lock, err := s.runtime.lockManager.RetrieveLock(pod.config.LockID)
if err != nil {
- return errors.Wrapf(err, "error retrieving lockfile for pod %s", string(id))
+ return errors.Wrapf(err, "error retrieving lock for pod %s", string(id))
}
pod.lock = lock
@@ -353,8 +349,7 @@ func (s *BoltState) getVolumeFromDB(name []byte, volume *Volume, volBkt *bolt.Bu
}
// Get the lock
- lockPath := filepath.Join(s.runtime.lockDir, string(name))
- lock, err := storage.GetLockfile(lockPath)
+ lock, err := s.runtime.lockManager.RetrieveLock(volume.config.LockID)
if err != nil {
return errors.Wrapf(err, "error retrieving lockfile for volume %s", string(name))
}
diff --git a/libpod/boltdb_state_linux.go b/libpod/boltdb_state_linux.go
index d91f311e5..09a9be606 100644
--- a/libpod/boltdb_state_linux.go
+++ b/libpod/boltdb_state_linux.go
@@ -8,7 +8,7 @@ import (
// replaceNetNS handle network namespace transitions after updating a
// container's state.
-func replaceNetNS(netNSPath string, ctr *Container, newState *containerState) error {
+func replaceNetNS(netNSPath string, ctr *Container, newState *ContainerState) error {
if netNSPath != "" {
// Check if the container's old state has a good netns
if ctr.state.NetNS != nil && netNSPath == ctr.state.NetNS.Path() {
diff --git a/libpod/boltdb_state_unsupported.go b/libpod/boltdb_state_unsupported.go
index 64610d304..244dc51a0 100644
--- a/libpod/boltdb_state_unsupported.go
+++ b/libpod/boltdb_state_unsupported.go
@@ -3,7 +3,7 @@
package libpod
// replaceNetNS is exclusive to the Linux platform and is a no-op elsewhere
-func replaceNetNS(netNSPath string, ctr *Container, newState *containerState) error {
+func replaceNetNS(netNSPath string, ctr *Container, newState *ContainerState) error {
return nil
}
diff --git a/libpod/common_test.go b/libpod/common_test.go
index 6c7434fd2..df730098e 100644
--- a/libpod/common_test.go
+++ b/libpod/common_test.go
@@ -1,24 +1,22 @@
package libpod
import (
- "encoding/json"
"net"
- "path/filepath"
"reflect"
"strings"
"testing"
"time"
- "github.com/containers/storage"
+ "github.com/containers/libpod/libpod/lock"
"github.com/cri-o/ocicni/pkg/ocicni"
"github.com/opencontainers/runtime-tools/generate"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
-func getTestContainer(id, name, locksDir string) (*Container, error) {
+func getTestContainer(id, name string, manager lock.Manager) (*Container, error) {
ctr := &Container{
- config: &Config{
+ config: &ContainerConfig{
ID: id,
Name: name,
RootfsImageID: id,
@@ -50,7 +48,7 @@ func getTestContainer(id, name, locksDir string) (*Container, error) {
},
},
},
- state: &containerState{
+ state: &ContainerState{
State: ContainerStateRunning,
ConfigPath: "/does/not/exist/specs/" + id,
RunDir: "/does/not/exist/tmp/",
@@ -90,18 +88,18 @@ func getTestContainer(id, name, locksDir string) (*Container, error) {
ctr.config.Labels["test"] = "testing"
- // Must make lockfile or container will error on being retrieved from DB
- lockPath := filepath.Join(locksDir, id)
- lock, err := storage.GetLockfile(lockPath)
+ // Allocate a lock for the container
+ lock, err := manager.AllocateLock()
if err != nil {
return nil, err
}
ctr.lock = lock
+ ctr.config.LockID = lock.ID()
return ctr, nil
}
-func getTestPod(id, name, locksDir string) (*Pod, error) {
+func getTestPod(id, name string, manager lock.Manager) (*Pod, error) {
pod := &Pod{
config: &PodConfig{
ID: id,
@@ -115,38 +113,39 @@ func getTestPod(id, name, locksDir string) (*Pod, error) {
valid: true,
}
- lockPath := filepath.Join(locksDir, id)
- lock, err := storage.GetLockfile(lockPath)
+ // Allocate a lock for the pod
+ lock, err := manager.AllocateLock()
if err != nil {
return nil, err
}
pod.lock = lock
+ pod.config.LockID = lock.ID()
return pod, nil
}
-func getTestCtrN(n, lockPath string) (*Container, error) {
- return getTestContainer(strings.Repeat(n, 32), "test"+n, lockPath)
+func getTestCtrN(n string, manager lock.Manager) (*Container, error) {
+ return getTestContainer(strings.Repeat(n, 32), "test"+n, manager)
}
-func getTestCtr1(lockPath string) (*Container, error) {
- return getTestCtrN("1", lockPath)
+func getTestCtr1(manager lock.Manager) (*Container, error) {
+ return getTestCtrN("1", manager)
}
-func getTestCtr2(lockPath string) (*Container, error) {
- return getTestCtrN("2", lockPath)
+func getTestCtr2(manager lock.Manager) (*Container, error) {
+ return getTestCtrN("2", manager)
}
-func getTestPodN(n, lockPath string) (*Pod, error) {
- return getTestPod(strings.Repeat(n, 32), "test"+n, lockPath)
+func getTestPodN(n string, manager lock.Manager) (*Pod, error) {
+ return getTestPod(strings.Repeat(n, 32), "test"+n, manager)
}
-func getTestPod1(lockPath string) (*Pod, error) {
- return getTestPodN("1", lockPath)
+func getTestPod1(manager lock.Manager) (*Pod, error) {
+ return getTestPodN("1", manager)
}
-func getTestPod2(lockPath string) (*Pod, error) {
- return getTestPodN("2", lockPath)
+func getTestPod2(manager lock.Manager) (*Pod, error) {
+ return getTestPodN("2", manager)
}
// This horrible hack tests if containers are equal in a way that should handle
@@ -165,15 +164,17 @@ func testContainersEqual(t *testing.T, a, b *Container, allowedEmpty bool) {
require.NotNil(t, a.state)
require.NotNil(t, b.state)
- aConfig := new(Config)
- bConfig := new(Config)
- aState := new(containerState)
- bState := new(containerState)
+ aConfig := new(ContainerConfig)
+ bConfig := new(ContainerConfig)
+ aState := new(ContainerState)
+ bState := new(ContainerState)
- blankState := new(containerState)
+ blankState := new(ContainerState)
assert.Equal(t, a.valid, b.valid)
+ assert.Equal(t, a.lock.ID(), b.lock.ID())
+
aConfigJSON, err := json.Marshal(a.config)
assert.NoError(t, err)
err = json.Unmarshal(aConfigJSON, aConfig)
@@ -223,6 +224,8 @@ func testPodsEqual(t *testing.T, a, b *Pod, allowedEmpty bool) {
assert.Equal(t, a.valid, b.valid)
+ assert.Equal(t, a.lock.ID(), b.lock.ID())
+
assert.EqualValues(t, a.config, b.config)
if allowedEmpty {
diff --git a/libpod/container.go b/libpod/container.go
index b4190344a..b0589be3b 100644
--- a/libpod/container.go
+++ b/libpod/container.go
@@ -2,6 +2,7 @@ package libpod
import (
"fmt"
+ "io/ioutil"
"net"
"os"
"path/filepath"
@@ -9,6 +10,7 @@ import (
"github.com/containernetworking/cni/pkg/types"
cnitypes "github.com/containernetworking/cni/pkg/types/current"
+ "github.com/containers/libpod/libpod/lock"
"github.com/containers/libpod/pkg/namespaces"
"github.com/containers/storage"
"github.com/cri-o/ocicni/pkg/ocicni"
@@ -112,9 +114,9 @@ func (ns LinuxNS) String() string {
// syncContainer() immediately after locking.
// ffjson: skip
type Container struct {
- config *Config
+ config *ContainerConfig
- state *containerState
+ state *ContainerState
// Batched indicates that a container has been locked as part of a
// Batch() operation
@@ -122,17 +124,22 @@ type Container struct {
batched bool
valid bool
- lock storage.Locker
+ lock lock.Locker
runtime *Runtime
rootlessSlirpSyncR *os.File
rootlessSlirpSyncW *os.File
+
+ // A restored container should have the same IP address as before
+ // being checkpointed. If requestedIP is set it will be used instead
+ // of config.StaticIP.
+ requestedIP net.IP
}
-// containerState contains the current state of the container
+// ContainerState contains the current state of the container
// It is stored on disk in a tmpfs and recreated on reboot
// easyjson:json
-type containerState struct {
+type ContainerState struct {
// The current state of the running container
State ContainerStatus `json:"state"`
// The path to the JSON OCI runtime spec for this container
@@ -199,11 +206,11 @@ type ExecSession struct {
PID int `json:"pid"`
}
-// Config contains all information that was used to create the
+// ContainerConfig contains all information that was used to create the
// container. It may not be changed once created.
// It is stored, read-only, on disk
// easyjson:json
-type Config struct {
+type ContainerConfig struct {
Spec *spec.Spec `json:"spec"`
ID string `json:"id"`
Name string `json:"name"`
@@ -211,6 +218,8 @@ type Config struct {
Pod string `json:"pod,omitempty"`
// Namespace the container is in
Namespace string `json:"namespace,omitempty"`
+ // ID of this container's lock
+ LockID uint32 `json:"lockID"`
// TODO consider breaking these subsections up into smaller structs
@@ -341,6 +350,9 @@ type Config struct {
PostConfigureNetNS bool `json:"postConfigureNetNS"`
+ // OCIRuntime used to create the container
+ OCIRuntime string `json:"runtime,omitempty"`
+
// ExitCommand is the container's exit command.
// This Command will be executed when the container exits
ExitCommand []string `json:"exitCommand,omitempty"`
@@ -382,8 +394,8 @@ func (t ContainerStatus) String() string {
// Unlocked
// Config returns the configuration used to create the container
-func (c *Container) Config() *Config {
- returnConfig := new(Config)
+func (c *Container) Config() *ContainerConfig {
+ returnConfig := new(ContainerConfig)
deepcopier.Copy(c.config).To(returnConfig)
return returnConfig
@@ -399,6 +411,31 @@ func (c *Container) Spec() *spec.Spec {
return returnSpec
}
+// specFromState returns the unmarshalled json config of the container. If the
+// config does not exist (e.g., because the container was never started) return
+// the spec from the config.
+func (c *Container) specFromState() (*spec.Spec, error) {
+ returnSpec := c.config.Spec
+
+ if f, err := os.Open(c.state.ConfigPath); err == nil {
+ returnSpec = new(spec.Spec)
+ content, err := ioutil.ReadAll(f)
+ if err != nil {
+ return nil, errors.Wrapf(err, "error reading container config")
+ }
+ if err := json.Unmarshal([]byte(content), &returnSpec); err != nil {
+ return nil, errors.Wrapf(err, "error unmarshalling container config")
+ }
+ } else {
+ // ignore when the file does not exist
+ if !os.IsNotExist(err) {
+ return nil, errors.Wrapf(err, "error opening container config")
+ }
+ }
+
+ return returnSpec, nil
+}
+
// ID returns the container's ID
func (c *Container) ID() string {
return c.config.ID
@@ -1026,3 +1063,18 @@ func networkDisabled(c *Container) (bool, error) {
}
return false, nil
}
+
+// ContainerState returns containerstate struct
+func (c *Container) ContainerState() (*ContainerState, error) {
+ if !c.batched {
+ c.lock.Lock()
+ defer c.lock.Unlock()
+
+ if err := c.syncContainer(); err != nil {
+ return nil, err
+ }
+ }
+ returnConfig := new(ContainerState)
+ deepcopier.Copy(c.state).To(returnConfig)
+ return c.state, nil
+}
diff --git a/libpod/container_api.go b/libpod/container_api.go
index 09bc46905..149867759 100644
--- a/libpod/container_api.go
+++ b/libpod/container_api.go
@@ -3,6 +3,7 @@ package libpod
import (
"context"
"fmt"
+ "io"
"io/ioutil"
"os"
"strconv"
@@ -262,7 +263,7 @@ func (c *Container) Kill(signal uint) error {
// Exec starts a new process inside the container
// TODO allow specifying streams to attach to
// TODO investigate allowing exec without attaching
-func (c *Container) Exec(tty, privileged bool, env, cmd []string, user string) error {
+func (c *Container) Exec(tty, privileged bool, env, cmd []string, user, workDir string) error {
var capList []string
locked := false
@@ -324,7 +325,7 @@ func (c *Container) Exec(tty, privileged bool, env, cmd []string, user string) e
logrus.Debugf("Creating new exec session in container %s with session id %s", c.ID(), sessionID)
- execCmd, err := c.runtime.ociRuntime.execContainer(c, cmd, capList, env, tty, hostUser, sessionID)
+ execCmd, err := c.runtime.ociRuntime.execContainer(c, cmd, capList, env, tty, workDir, hostUser, sessionID)
if err != nil {
return errors.Wrapf(err, "error exec %s", c.ID())
}
@@ -413,6 +414,25 @@ func (c *Container) Exec(tty, privileged bool, env, cmd []string, user string) e
return waitErr
}
+// AttachStreams contains streams that will be attached to the container
+type AttachStreams struct {
+ // OutputStream will be attached to container's STDOUT
+ OutputStream io.WriteCloser
+ // ErrorStream will be attached to container's STDERR
+ ErrorStream io.WriteCloser
+ // InputStream will be attached to container's STDIN
+ InputStream io.Reader
+ // AttachOutput is whether to attach to STDOUT
+ // If false, stdout will not be attached
+ AttachOutput bool
+ // AttachError is whether to attach to STDERR
+ // If false, stdout will not be attached
+ AttachError bool
+ // AttachInput is whether to attach to STDIN
+ // If false, stdout will not be attached
+ AttachInput bool
+}
+
// Attach attaches to a container
func (c *Container) Attach(streams *AttachStreams, keys string, resize <-chan remotecommand.TerminalSize) error {
if !c.batched {
diff --git a/libpod/container_attach.go b/libpod/container_attach_linux.go
index f925c3897..1d6f0bd96 100644
--- a/libpod/container_attach.go
+++ b/libpod/container_attach_linux.go
@@ -1,3 +1,5 @@
+//+build linux
+
package libpod
import (
@@ -27,25 +29,6 @@ const (
AttachPipeStderr = 3
)
-// AttachStreams contains streams that will be attached to the container
-type AttachStreams struct {
- // OutputStream will be attached to container's STDOUT
- OutputStream io.WriteCloser
- // ErrorStream will be attached to container's STDERR
- ErrorStream io.WriteCloser
- // InputStream will be attached to container's STDIN
- InputStream io.Reader
- // AttachOutput is whether to attach to STDOUT
- // If false, stdout will not be attached
- AttachOutput bool
- // AttachError is whether to attach to STDERR
- // If false, stdout will not be attached
- AttachError bool
- // AttachInput is whether to attach to STDIN
- // If false, stdout will not be attached
- AttachInput bool
-}
-
// Attach to the given container
// Does not check if state is appropriate
func (c *Container) attach(streams *AttachStreams, keys string, resize <-chan remotecommand.TerminalSize, startContainer bool) error {
diff --git a/libpod/container_attach_unsupported.go b/libpod/container_attach_unsupported.go
new file mode 100644
index 000000000..068652b29
--- /dev/null
+++ b/libpod/container_attach_unsupported.go
@@ -0,0 +1,11 @@
+//+build !linux
+
+package libpod
+
+import (
+ "k8s.io/client-go/tools/remotecommand"
+)
+
+func (c *Container) attach(streams *AttachStreams, keys string, resize <-chan remotecommand.TerminalSize, startContainer bool) error {
+ return ErrNotImplemented
+}
diff --git a/libpod/container_easyjson.go b/libpod/container_easyjson.go
deleted file mode 100644
index 299a645e1..000000000
--- a/libpod/container_easyjson.go
+++ /dev/null
@@ -1,8191 +0,0 @@
-// +build seccomp ostree selinux varlink exclude_graphdriver_devicemapper
-
-// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT.
-
-package libpod
-
-import (
- json "encoding/json"
- types "github.com/containernetworking/cni/pkg/types"
- current "github.com/containernetworking/cni/pkg/types/current"
- namespaces "github.com/containers/libpod/pkg/namespaces"
- storage "github.com/containers/storage"
- idtools "github.com/containers/storage/pkg/idtools"
- ocicni "github.com/cri-o/ocicni/pkg/ocicni"
- easyjson "github.com/mailru/easyjson"
- jlexer "github.com/mailru/easyjson/jlexer"
- jwriter "github.com/mailru/easyjson/jwriter"
- specs_go "github.com/opencontainers/runtime-spec/specs-go"
- net "net"
- os "os"
-)
-
-// suppress unused package warning
-var (
- _ *json.RawMessage
- _ *jlexer.Lexer
- _ *jwriter.Writer
- _ easyjson.Marshaler
-)
-
-func easyjson1dbef17bDecodeGithubComContainersLibpodLibpod(in *jlexer.Lexer, out *containerState) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "state":
- out.State = ContainerStatus(in.Int())
- case "configPath":
- out.ConfigPath = string(in.String())
- case "runDir":
- out.RunDir = string(in.String())
- case "destinationRunDir":
- out.DestinationRunDir = string(in.String())
- case "mounted":
- out.Mounted = bool(in.Bool())
- case "mountPoint":
- out.Mountpoint = string(in.String())
- case "realMountPoint":
- out.RealMountpoint = string(in.String())
- case "startedTime":
- if data := in.Raw(); in.Ok() {
- in.AddError((out.StartedTime).UnmarshalJSON(data))
- }
- case "finishedTime":
- if data := in.Raw(); in.Ok() {
- in.AddError((out.FinishedTime).UnmarshalJSON(data))
- }
- case "exitCode":
- out.ExitCode = int32(in.Int32())
- case "exited":
- out.Exited = bool(in.Bool())
- case "oomKilled":
- out.OOMKilled = bool(in.Bool())
- case "pid":
- out.PID = int(in.Int())
- case "execSessions":
- if in.IsNull() {
- in.Skip()
- } else {
- in.Delim('{')
- if !in.IsDelim('}') {
- out.ExecSessions = make(map[string]*ExecSession)
- } else {
- out.ExecSessions = nil
- }
- for !in.IsDelim('}') {
- key := string(in.String())
- in.WantColon()
- var v1 *ExecSession
- if in.IsNull() {
- in.Skip()
- v1 = nil
- } else {
- if v1 == nil {
- v1 = new(ExecSession)
- }
- if data := in.Raw(); in.Ok() {
- in.AddError((*v1).UnmarshalJSON(data))
- }
- }
- (out.ExecSessions)[key] = v1
- in.WantComma()
- }
- in.Delim('}')
- }
- case "networkResults":
- if in.IsNull() {
- in.Skip()
- out.NetworkStatus = nil
- } else {
- in.Delim('[')
- if out.NetworkStatus == nil {
- if !in.IsDelim(']') {
- out.NetworkStatus = make([]*current.Result, 0, 8)
- } else {
- out.NetworkStatus = []*current.Result{}
- }
- } else {
- out.NetworkStatus = (out.NetworkStatus)[:0]
- }
- for !in.IsDelim(']') {
- var v2 *current.Result
- if in.IsNull() {
- in.Skip()
- v2 = nil
- } else {
- if v2 == nil {
- v2 = new(current.Result)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComContainernetworkingCniPkgTypesCurrent(in, &*v2)
- }
- out.NetworkStatus = append(out.NetworkStatus, v2)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "bindMounts":
- if in.IsNull() {
- in.Skip()
- } else {
- in.Delim('{')
- if !in.IsDelim('}') {
- out.BindMounts = make(map[string]string)
- } else {
- out.BindMounts = nil
- }
- for !in.IsDelim('}') {
- key := string(in.String())
- in.WantColon()
- var v3 string
- v3 = string(in.String())
- (out.BindMounts)[key] = v3
- in.WantComma()
- }
- in.Delim('}')
- }
- case "userNSRoot":
- out.UserNSRoot = string(in.String())
- case "extensionStageHooks":
- if in.IsNull() {
- in.Skip()
- } else {
- in.Delim('{')
- if !in.IsDelim('}') {
- out.ExtensionStageHooks = make(map[string][]specs_go.Hook)
- } else {
- out.ExtensionStageHooks = nil
- }
- for !in.IsDelim('}') {
- key := string(in.String())
- in.WantColon()
- var v4 []specs_go.Hook
- if in.IsNull() {
- in.Skip()
- v4 = nil
- } else {
- in.Delim('[')
- if v4 == nil {
- if !in.IsDelim(']') {
- v4 = make([]specs_go.Hook, 0, 1)
- } else {
- v4 = []specs_go.Hook{}
- }
- } else {
- v4 = (v4)[:0]
- }
- for !in.IsDelim(']') {
- var v5 specs_go.Hook
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo(in, &v5)
- v4 = append(v4, v5)
- in.WantComma()
- }
- in.Delim(']')
- }
- (out.ExtensionStageHooks)[key] = v4
- in.WantComma()
- }
- in.Delim('}')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodLibpod(out *jwriter.Writer, in containerState) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"state\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int(int(in.State))
- }
- if in.ConfigPath != "" {
- const prefix string = ",\"configPath\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.ConfigPath))
- }
- if in.RunDir != "" {
- const prefix string = ",\"runDir\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.RunDir))
- }
- if in.DestinationRunDir != "" {
- const prefix string = ",\"destinationRunDir\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.DestinationRunDir))
- }
- if in.Mounted {
- const prefix string = ",\"mounted\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.Mounted))
- }
- if in.Mountpoint != "" {
- const prefix string = ",\"mountPoint\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Mountpoint))
- }
- if in.RealMountpoint != "" {
- const prefix string = ",\"realMountPoint\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.RealMountpoint))
- }
- if true {
- const prefix string = ",\"startedTime\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Raw((in.StartedTime).MarshalJSON())
- }
- if true {
- const prefix string = ",\"finishedTime\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Raw((in.FinishedTime).MarshalJSON())
- }
- if in.ExitCode != 0 {
- const prefix string = ",\"exitCode\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int32(int32(in.ExitCode))
- }
- if in.Exited {
- const prefix string = ",\"exited\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.Exited))
- }
- if in.OOMKilled {
- const prefix string = ",\"oomKilled\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.OOMKilled))
- }
- if in.PID != 0 {
- const prefix string = ",\"pid\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int(int(in.PID))
- }
- if len(in.ExecSessions) != 0 {
- const prefix string = ",\"execSessions\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('{')
- v6First := true
- for v6Name, v6Value := range in.ExecSessions {
- if v6First {
- v6First = false
- } else {
- out.RawByte(',')
- }
- out.String(string(v6Name))
- out.RawByte(':')
- if v6Value == nil {
- out.RawString("null")
- } else {
- out.Raw((*v6Value).MarshalJSON())
- }
- }
- out.RawByte('}')
- }
- }
- if len(in.NetworkStatus) != 0 {
- const prefix string = ",\"networkResults\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v7, v8 := range in.NetworkStatus {
- if v7 > 0 {
- out.RawByte(',')
- }
- if v8 == nil {
- out.RawString("null")
- } else {
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComContainernetworkingCniPkgTypesCurrent(out, *v8)
- }
- }
- out.RawByte(']')
- }
- }
- if len(in.BindMounts) != 0 {
- const prefix string = ",\"bindMounts\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('{')
- v9First := true
- for v9Name, v9Value := range in.BindMounts {
- if v9First {
- v9First = false
- } else {
- out.RawByte(',')
- }
- out.String(string(v9Name))
- out.RawByte(':')
- out.String(string(v9Value))
- }
- out.RawByte('}')
- }
- }
- if in.UserNSRoot != "" {
- const prefix string = ",\"userNSRoot\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.UserNSRoot))
- }
- if len(in.ExtensionStageHooks) != 0 {
- const prefix string = ",\"extensionStageHooks\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('{')
- v10First := true
- for v10Name, v10Value := range in.ExtensionStageHooks {
- if v10First {
- v10First = false
- } else {
- out.RawByte(',')
- }
- out.String(string(v10Name))
- out.RawByte(':')
- if v10Value == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
- out.RawString("null")
- } else {
- out.RawByte('[')
- for v11, v12 := range v10Value {
- if v11 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo(out, v12)
- }
- out.RawByte(']')
- }
- }
- out.RawByte('}')
- }
- }
- out.RawByte('}')
-}
-
-// MarshalJSON supports json.Marshaler interface
-func (v containerState) MarshalJSON() ([]byte, error) {
- w := jwriter.Writer{}
- easyjson1dbef17bEncodeGithubComContainersLibpodLibpod(&w, v)
- return w.Buffer.BuildBytes(), w.Error
-}
-
-// MarshalEasyJSON supports easyjson.Marshaler interface
-func (v containerState) MarshalEasyJSON(w *jwriter.Writer) {
- easyjson1dbef17bEncodeGithubComContainersLibpodLibpod(w, v)
-}
-
-// UnmarshalJSON supports json.Unmarshaler interface
-func (v *containerState) UnmarshalJSON(data []byte) error {
- r := jlexer.Lexer{Data: data}
- easyjson1dbef17bDecodeGithubComContainersLibpodLibpod(&r, v)
- return r.Error()
-}
-
-// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
-func (v *containerState) UnmarshalEasyJSON(l *jlexer.Lexer) {
- easyjson1dbef17bDecodeGithubComContainersLibpodLibpod(l, v)
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo(in *jlexer.Lexer, out *specs_go.Hook) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "path":
- out.Path = string(in.String())
- case "args":
- if in.IsNull() {
- in.Skip()
- out.Args = nil
- } else {
- in.Delim('[')
- if out.Args == nil {
- if !in.IsDelim(']') {
- out.Args = make([]string, 0, 4)
- } else {
- out.Args = []string{}
- }
- } else {
- out.Args = (out.Args)[:0]
- }
- for !in.IsDelim(']') {
- var v13 string
- v13 = string(in.String())
- out.Args = append(out.Args, v13)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "env":
- if in.IsNull() {
- in.Skip()
- out.Env = nil
- } else {
- in.Delim('[')
- if out.Env == nil {
- if !in.IsDelim(']') {
- out.Env = make([]string, 0, 4)
- } else {
- out.Env = []string{}
- }
- } else {
- out.Env = (out.Env)[:0]
- }
- for !in.IsDelim(']') {
- var v14 string
- v14 = string(in.String())
- out.Env = append(out.Env, v14)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "timeout":
- if in.IsNull() {
- in.Skip()
- out.Timeout = nil
- } else {
- if out.Timeout == nil {
- out.Timeout = new(int)
- }
- *out.Timeout = int(in.Int())
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo(out *jwriter.Writer, in specs_go.Hook) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"path\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Path))
- }
- if len(in.Args) != 0 {
- const prefix string = ",\"args\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v15, v16 := range in.Args {
- if v15 > 0 {
- out.RawByte(',')
- }
- out.String(string(v16))
- }
- out.RawByte(']')
- }
- }
- if len(in.Env) != 0 {
- const prefix string = ",\"env\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v17, v18 := range in.Env {
- if v17 > 0 {
- out.RawByte(',')
- }
- out.String(string(v18))
- }
- out.RawByte(']')
- }
- }
- if in.Timeout != nil {
- const prefix string = ",\"timeout\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int(int(*in.Timeout))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComContainernetworkingCniPkgTypesCurrent(in *jlexer.Lexer, out *current.Result) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "cniVersion":
- out.CNIVersion = string(in.String())
- case "interfaces":
- if in.IsNull() {
- in.Skip()
- out.Interfaces = nil
- } else {
- in.Delim('[')
- if out.Interfaces == nil {
- if !in.IsDelim(']') {
- out.Interfaces = make([]*current.Interface, 0, 8)
- } else {
- out.Interfaces = []*current.Interface{}
- }
- } else {
- out.Interfaces = (out.Interfaces)[:0]
- }
- for !in.IsDelim(']') {
- var v19 *current.Interface
- if in.IsNull() {
- in.Skip()
- v19 = nil
- } else {
- if v19 == nil {
- v19 = new(current.Interface)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComContainernetworkingCniPkgTypesCurrent1(in, &*v19)
- }
- out.Interfaces = append(out.Interfaces, v19)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "ips":
- if in.IsNull() {
- in.Skip()
- out.IPs = nil
- } else {
- in.Delim('[')
- if out.IPs == nil {
- if !in.IsDelim(']') {
- out.IPs = make([]*current.IPConfig, 0, 8)
- } else {
- out.IPs = []*current.IPConfig{}
- }
- } else {
- out.IPs = (out.IPs)[:0]
- }
- for !in.IsDelim(']') {
- var v20 *current.IPConfig
- if in.IsNull() {
- in.Skip()
- v20 = nil
- } else {
- if v20 == nil {
- v20 = new(current.IPConfig)
- }
- if data := in.Raw(); in.Ok() {
- in.AddError((*v20).UnmarshalJSON(data))
- }
- }
- out.IPs = append(out.IPs, v20)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "routes":
- if in.IsNull() {
- in.Skip()
- out.Routes = nil
- } else {
- in.Delim('[')
- if out.Routes == nil {
- if !in.IsDelim(']') {
- out.Routes = make([]*types.Route, 0, 8)
- } else {
- out.Routes = []*types.Route{}
- }
- } else {
- out.Routes = (out.Routes)[:0]
- }
- for !in.IsDelim(']') {
- var v21 *types.Route
- if in.IsNull() {
- in.Skip()
- v21 = nil
- } else {
- if v21 == nil {
- v21 = new(types.Route)
- }
- if data := in.Raw(); in.Ok() {
- in.AddError((*v21).UnmarshalJSON(data))
- }
- }
- out.Routes = append(out.Routes, v21)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "dns":
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComContainernetworkingCniPkgTypes(in, &out.DNS)
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComContainernetworkingCniPkgTypesCurrent(out *jwriter.Writer, in current.Result) {
- out.RawByte('{')
- first := true
- _ = first
- if in.CNIVersion != "" {
- const prefix string = ",\"cniVersion\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.CNIVersion))
- }
- if len(in.Interfaces) != 0 {
- const prefix string = ",\"interfaces\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v22, v23 := range in.Interfaces {
- if v22 > 0 {
- out.RawByte(',')
- }
- if v23 == nil {
- out.RawString("null")
- } else {
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComContainernetworkingCniPkgTypesCurrent1(out, *v23)
- }
- }
- out.RawByte(']')
- }
- }
- if len(in.IPs) != 0 {
- const prefix string = ",\"ips\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v24, v25 := range in.IPs {
- if v24 > 0 {
- out.RawByte(',')
- }
- if v25 == nil {
- out.RawString("null")
- } else {
- out.Raw((*v25).MarshalJSON())
- }
- }
- out.RawByte(']')
- }
- }
- if len(in.Routes) != 0 {
- const prefix string = ",\"routes\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v26, v27 := range in.Routes {
- if v26 > 0 {
- out.RawByte(',')
- }
- if v27 == nil {
- out.RawString("null")
- } else {
- out.Raw((*v27).MarshalJSON())
- }
- }
- out.RawByte(']')
- }
- }
- if true {
- const prefix string = ",\"dns\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComContainernetworkingCniPkgTypes(out, in.DNS)
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComContainernetworkingCniPkgTypes(in *jlexer.Lexer, out *types.DNS) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "nameservers":
- if in.IsNull() {
- in.Skip()
- out.Nameservers = nil
- } else {
- in.Delim('[')
- if out.Nameservers == nil {
- if !in.IsDelim(']') {
- out.Nameservers = make([]string, 0, 4)
- } else {
- out.Nameservers = []string{}
- }
- } else {
- out.Nameservers = (out.Nameservers)[:0]
- }
- for !in.IsDelim(']') {
- var v28 string
- v28 = string(in.String())
- out.Nameservers = append(out.Nameservers, v28)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "domain":
- out.Domain = string(in.String())
- case "search":
- if in.IsNull() {
- in.Skip()
- out.Search = nil
- } else {
- in.Delim('[')
- if out.Search == nil {
- if !in.IsDelim(']') {
- out.Search = make([]string, 0, 4)
- } else {
- out.Search = []string{}
- }
- } else {
- out.Search = (out.Search)[:0]
- }
- for !in.IsDelim(']') {
- var v29 string
- v29 = string(in.String())
- out.Search = append(out.Search, v29)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "options":
- if in.IsNull() {
- in.Skip()
- out.Options = nil
- } else {
- in.Delim('[')
- if out.Options == nil {
- if !in.IsDelim(']') {
- out.Options = make([]string, 0, 4)
- } else {
- out.Options = []string{}
- }
- } else {
- out.Options = (out.Options)[:0]
- }
- for !in.IsDelim(']') {
- var v30 string
- v30 = string(in.String())
- out.Options = append(out.Options, v30)
- in.WantComma()
- }
- in.Delim(']')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComContainernetworkingCniPkgTypes(out *jwriter.Writer, in types.DNS) {
- out.RawByte('{')
- first := true
- _ = first
- if len(in.Nameservers) != 0 {
- const prefix string = ",\"nameservers\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v31, v32 := range in.Nameservers {
- if v31 > 0 {
- out.RawByte(',')
- }
- out.String(string(v32))
- }
- out.RawByte(']')
- }
- }
- if in.Domain != "" {
- const prefix string = ",\"domain\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Domain))
- }
- if len(in.Search) != 0 {
- const prefix string = ",\"search\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v33, v34 := range in.Search {
- if v33 > 0 {
- out.RawByte(',')
- }
- out.String(string(v34))
- }
- out.RawByte(']')
- }
- }
- if len(in.Options) != 0 {
- const prefix string = ",\"options\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v35, v36 := range in.Options {
- if v35 > 0 {
- out.RawByte(',')
- }
- out.String(string(v36))
- }
- out.RawByte(']')
- }
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComContainernetworkingCniPkgTypesCurrent1(in *jlexer.Lexer, out *current.Interface) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "name":
- out.Name = string(in.String())
- case "mac":
- out.Mac = string(in.String())
- case "sandbox":
- out.Sandbox = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComContainernetworkingCniPkgTypesCurrent1(out *jwriter.Writer, in current.Interface) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"name\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Name))
- }
- if in.Mac != "" {
- const prefix string = ",\"mac\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Mac))
- }
- if in.Sandbox != "" {
- const prefix string = ",\"sandbox\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Sandbox))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodLibpod1(in *jlexer.Lexer, out *ExecSession) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "id":
- out.ID = string(in.String())
- case "command":
- if in.IsNull() {
- in.Skip()
- out.Command = nil
- } else {
- in.Delim('[')
- if out.Command == nil {
- if !in.IsDelim(']') {
- out.Command = make([]string, 0, 4)
- } else {
- out.Command = []string{}
- }
- } else {
- out.Command = (out.Command)[:0]
- }
- for !in.IsDelim(']') {
- var v37 string
- v37 = string(in.String())
- out.Command = append(out.Command, v37)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "pid":
- out.PID = int(in.Int())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodLibpod1(out *jwriter.Writer, in ExecSession) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"id\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.ID))
- }
- {
- const prefix string = ",\"command\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.Command == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
- out.RawString("null")
- } else {
- out.RawByte('[')
- for v38, v39 := range in.Command {
- if v38 > 0 {
- out.RawByte(',')
- }
- out.String(string(v39))
- }
- out.RawByte(']')
- }
- }
- {
- const prefix string = ",\"pid\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int(int(in.PID))
- }
- out.RawByte('}')
-}
-
-// MarshalJSON supports json.Marshaler interface
-func (v ExecSession) MarshalJSON() ([]byte, error) {
- w := jwriter.Writer{}
- easyjson1dbef17bEncodeGithubComContainersLibpodLibpod1(&w, v)
- return w.Buffer.BuildBytes(), w.Error
-}
-
-// MarshalEasyJSON supports easyjson.Marshaler interface
-func (v ExecSession) MarshalEasyJSON(w *jwriter.Writer) {
- easyjson1dbef17bEncodeGithubComContainersLibpodLibpod1(w, v)
-}
-
-// UnmarshalJSON supports json.Unmarshaler interface
-func (v *ExecSession) UnmarshalJSON(data []byte) error {
- r := jlexer.Lexer{Data: data}
- easyjson1dbef17bDecodeGithubComContainersLibpodLibpod1(&r, v)
- return r.Error()
-}
-
-// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
-func (v *ExecSession) UnmarshalEasyJSON(l *jlexer.Lexer) {
- easyjson1dbef17bDecodeGithubComContainersLibpodLibpod1(l, v)
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodLibpod2(in *jlexer.Lexer, out *Config) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "spec":
- if in.IsNull() {
- in.Skip()
- out.Spec = nil
- } else {
- if out.Spec == nil {
- out.Spec = new(specs_go.Spec)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo1(in, &*out.Spec)
- }
- case "id":
- out.ID = string(in.String())
- case "name":
- out.Name = string(in.String())
- case "pod":
- out.Pod = string(in.String())
- case "namespace":
- out.Namespace = string(in.String())
- case "idMappingsOptions":
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComContainersStorage(in, &out.IDMappings)
- case "rootfsImageID":
- out.RootfsImageID = string(in.String())
- case "rootfsImageName":
- out.RootfsImageName = string(in.String())
- case "rootfs":
- out.Rootfs = string(in.String())
- case "imageVolumes":
- out.ImageVolumes = bool(in.Bool())
- case "ShmDir":
- out.ShmDir = string(in.String())
- case "shmSize":
- out.ShmSize = int64(in.Int64())
- case "staticDir":
- out.StaticDir = string(in.String())
- case "mounts":
- if in.IsNull() {
- in.Skip()
- out.Mounts = nil
- } else {
- in.Delim('[')
- if out.Mounts == nil {
- if !in.IsDelim(']') {
- out.Mounts = make([]string, 0, 4)
- } else {
- out.Mounts = []string{}
- }
- } else {
- out.Mounts = (out.Mounts)[:0]
- }
- for !in.IsDelim(']') {
- var v40 string
- v40 = string(in.String())
- out.Mounts = append(out.Mounts, v40)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "privileged":
- out.Privileged = bool(in.Bool())
- case "ProcessLabel":
- out.ProcessLabel = string(in.String())
- case "MountLabel":
- out.MountLabel = string(in.String())
- case "labelopts":
- if in.IsNull() {
- in.Skip()
- out.LabelOpts = nil
- } else {
- in.Delim('[')
- if out.LabelOpts == nil {
- if !in.IsDelim(']') {
- out.LabelOpts = make([]string, 0, 4)
- } else {
- out.LabelOpts = []string{}
- }
- } else {
- out.LabelOpts = (out.LabelOpts)[:0]
- }
- for !in.IsDelim(']') {
- var v41 string
- v41 = string(in.String())
- out.LabelOpts = append(out.LabelOpts, v41)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "user":
- out.User = string(in.String())
- case "groups":
- if in.IsNull() {
- in.Skip()
- out.Groups = nil
- } else {
- in.Delim('[')
- if out.Groups == nil {
- if !in.IsDelim(']') {
- out.Groups = make([]string, 0, 4)
- } else {
- out.Groups = []string{}
- }
- } else {
- out.Groups = (out.Groups)[:0]
- }
- for !in.IsDelim(']') {
- var v42 string
- v42 = string(in.String())
- out.Groups = append(out.Groups, v42)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "ipcNsCtr":
- out.IPCNsCtr = string(in.String())
- case "mountNsCtr":
- out.MountNsCtr = string(in.String())
- case "netNsCtr":
- out.NetNsCtr = string(in.String())
- case "pidNsCtr":
- out.PIDNsCtr = string(in.String())
- case "userNsCtr":
- out.UserNsCtr = string(in.String())
- case "utsNsCtr":
- out.UTSNsCtr = string(in.String())
- case "cgroupNsCtr":
- out.CgroupNsCtr = string(in.String())
- case "Dependencies":
- if in.IsNull() {
- in.Skip()
- out.Dependencies = nil
- } else {
- in.Delim('[')
- if out.Dependencies == nil {
- if !in.IsDelim(']') {
- out.Dependencies = make([]string, 0, 4)
- } else {
- out.Dependencies = []string{}
- }
- } else {
- out.Dependencies = (out.Dependencies)[:0]
- }
- for !in.IsDelim(']') {
- var v43 string
- v43 = string(in.String())
- out.Dependencies = append(out.Dependencies, v43)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "createNetNS":
- out.CreateNetNS = bool(in.Bool())
- case "staticIP":
- if data := in.UnsafeBytes(); in.Ok() {
- in.AddError((out.StaticIP).UnmarshalText(data))
- }
- case "portMappings":
- if in.IsNull() {
- in.Skip()
- out.PortMappings = nil
- } else {
- in.Delim('[')
- if out.PortMappings == nil {
- if !in.IsDelim(']') {
- out.PortMappings = make([]ocicni.PortMapping, 0, 1)
- } else {
- out.PortMappings = []ocicni.PortMapping{}
- }
- } else {
- out.PortMappings = (out.PortMappings)[:0]
- }
- for !in.IsDelim(']') {
- var v44 ocicni.PortMapping
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComCriOOcicniPkgOcicni(in, &v44)
- out.PortMappings = append(out.PortMappings, v44)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "dnsServer":
- if in.IsNull() {
- in.Skip()
- out.DNSServer = nil
- } else {
- in.Delim('[')
- if out.DNSServer == nil {
- if !in.IsDelim(']') {
- out.DNSServer = make([]net.IP, 0, 2)
- } else {
- out.DNSServer = []net.IP{}
- }
- } else {
- out.DNSServer = (out.DNSServer)[:0]
- }
- for !in.IsDelim(']') {
- var v45 net.IP
- if data := in.UnsafeBytes(); in.Ok() {
- in.AddError((v45).UnmarshalText(data))
- }
- out.DNSServer = append(out.DNSServer, v45)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "dnsSearch":
- if in.IsNull() {
- in.Skip()
- out.DNSSearch = nil
- } else {
- in.Delim('[')
- if out.DNSSearch == nil {
- if !in.IsDelim(']') {
- out.DNSSearch = make([]string, 0, 4)
- } else {
- out.DNSSearch = []string{}
- }
- } else {
- out.DNSSearch = (out.DNSSearch)[:0]
- }
- for !in.IsDelim(']') {
- var v46 string
- v46 = string(in.String())
- out.DNSSearch = append(out.DNSSearch, v46)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "dnsOption":
- if in.IsNull() {
- in.Skip()
- out.DNSOption = nil
- } else {
- in.Delim('[')
- if out.DNSOption == nil {
- if !in.IsDelim(']') {
- out.DNSOption = make([]string, 0, 4)
- } else {
- out.DNSOption = []string{}
- }
- } else {
- out.DNSOption = (out.DNSOption)[:0]
- }
- for !in.IsDelim(']') {
- var v47 string
- v47 = string(in.String())
- out.DNSOption = append(out.DNSOption, v47)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "hostsAdd":
- if in.IsNull() {
- in.Skip()
- out.HostAdd = nil
- } else {
- in.Delim('[')
- if out.HostAdd == nil {
- if !in.IsDelim(']') {
- out.HostAdd = make([]string, 0, 4)
- } else {
- out.HostAdd = []string{}
- }
- } else {
- out.HostAdd = (out.HostAdd)[:0]
- }
- for !in.IsDelim(']') {
- var v48 string
- v48 = string(in.String())
- out.HostAdd = append(out.HostAdd, v48)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "networks":
- if in.IsNull() {
- in.Skip()
- out.Networks = nil
- } else {
- in.Delim('[')
- if out.Networks == nil {
- if !in.IsDelim(']') {
- out.Networks = make([]string, 0, 4)
- } else {
- out.Networks = []string{}
- }
- } else {
- out.Networks = (out.Networks)[:0]
- }
- for !in.IsDelim(']') {
- var v49 string
- v49 = string(in.String())
- out.Networks = append(out.Networks, v49)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "networkMode":
- out.NetMode = namespaces.NetworkMode(in.String())
- case "userVolumes":
- if in.IsNull() {
- in.Skip()
- out.UserVolumes = nil
- } else {
- in.Delim('[')
- if out.UserVolumes == nil {
- if !in.IsDelim(']') {
- out.UserVolumes = make([]string, 0, 4)
- } else {
- out.UserVolumes = []string{}
- }
- } else {
- out.UserVolumes = (out.UserVolumes)[:0]
- }
- for !in.IsDelim(']') {
- var v50 string
- v50 = string(in.String())
- out.UserVolumes = append(out.UserVolumes, v50)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "entrypoint":
- if in.IsNull() {
- in.Skip()
- out.Entrypoint = nil
- } else {
- in.Delim('[')
- if out.Entrypoint == nil {
- if !in.IsDelim(']') {
- out.Entrypoint = make([]string, 0, 4)
- } else {
- out.Entrypoint = []string{}
- }
- } else {
- out.Entrypoint = (out.Entrypoint)[:0]
- }
- for !in.IsDelim(']') {
- var v51 string
- v51 = string(in.String())
- out.Entrypoint = append(out.Entrypoint, v51)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "command":
- if in.IsNull() {
- in.Skip()
- out.Command = nil
- } else {
- in.Delim('[')
- if out.Command == nil {
- if !in.IsDelim(']') {
- out.Command = make([]string, 0, 4)
- } else {
- out.Command = []string{}
- }
- } else {
- out.Command = (out.Command)[:0]
- }
- for !in.IsDelim(']') {
- var v52 string
- v52 = string(in.String())
- out.Command = append(out.Command, v52)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "stdin":
- out.Stdin = bool(in.Bool())
- case "labels":
- if in.IsNull() {
- in.Skip()
- } else {
- in.Delim('{')
- if !in.IsDelim('}') {
- out.Labels = make(map[string]string)
- } else {
- out.Labels = nil
- }
- for !in.IsDelim('}') {
- key := string(in.String())
- in.WantColon()
- var v53 string
- v53 = string(in.String())
- (out.Labels)[key] = v53
- in.WantComma()
- }
- in.Delim('}')
- }
- case "stopSignal":
- out.StopSignal = uint(in.Uint())
- case "stopTimeout":
- out.StopTimeout = uint(in.Uint())
- case "createdTime":
- if data := in.Raw(); in.Ok() {
- in.AddError((out.CreatedTime).UnmarshalJSON(data))
- }
- case "cgroupParent":
- out.CgroupParent = string(in.String())
- case "logPath":
- out.LogPath = string(in.String())
- case "conmonPidFile":
- out.ConmonPidFile = string(in.String())
- case "postConfigureNetNS":
- out.PostConfigureNetNS = bool(in.Bool())
- case "exitCommand":
- if in.IsNull() {
- in.Skip()
- out.ExitCommand = nil
- } else {
- in.Delim('[')
- if out.ExitCommand == nil {
- if !in.IsDelim(']') {
- out.ExitCommand = make([]string, 0, 4)
- } else {
- out.ExitCommand = []string{}
- }
- } else {
- out.ExitCommand = (out.ExitCommand)[:0]
- }
- for !in.IsDelim(']') {
- var v54 string
- v54 = string(in.String())
- out.ExitCommand = append(out.ExitCommand, v54)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "LocalVolumes":
- if in.IsNull() {
- in.Skip()
- out.LocalVolumes = nil
- } else {
- in.Delim('[')
- if out.LocalVolumes == nil {
- if !in.IsDelim(']') {
- out.LocalVolumes = make([]string, 0, 4)
- } else {
- out.LocalVolumes = []string{}
- }
- } else {
- out.LocalVolumes = (out.LocalVolumes)[:0]
- }
- for !in.IsDelim(']') {
- var v55 string
- v55 = string(in.String())
- out.LocalVolumes = append(out.LocalVolumes, v55)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "pause":
- out.IsInfra = bool(in.Bool())
- case "systemd":
- out.Systemd = bool(in.Bool())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodLibpod2(out *jwriter.Writer, in Config) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"spec\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.Spec == nil {
- out.RawString("null")
- } else {
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo1(out, *in.Spec)
- }
- }
- {
- const prefix string = ",\"id\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.ID))
- }
- {
- const prefix string = ",\"name\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Name))
- }
- if in.Pod != "" {
- const prefix string = ",\"pod\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Pod))
- }
- if in.Namespace != "" {
- const prefix string = ",\"namespace\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Namespace))
- }
- if true {
- const prefix string = ",\"idMappingsOptions\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComContainersStorage(out, in.IDMappings)
- }
- if in.RootfsImageID != "" {
- const prefix string = ",\"rootfsImageID\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.RootfsImageID))
- }
- if in.RootfsImageName != "" {
- const prefix string = ",\"rootfsImageName\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.RootfsImageName))
- }
- if in.Rootfs != "" {
- const prefix string = ",\"rootfs\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Rootfs))
- }
- {
- const prefix string = ",\"imageVolumes\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.ImageVolumes))
- }
- if in.ShmDir != "" {
- const prefix string = ",\"ShmDir\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.ShmDir))
- }
- {
- const prefix string = ",\"shmSize\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(in.ShmSize))
- }
- {
- const prefix string = ",\"staticDir\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.StaticDir))
- }
- if len(in.Mounts) != 0 {
- const prefix string = ",\"mounts\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v56, v57 := range in.Mounts {
- if v56 > 0 {
- out.RawByte(',')
- }
- out.String(string(v57))
- }
- out.RawByte(']')
- }
- }
- {
- const prefix string = ",\"privileged\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.Privileged))
- }
- if in.ProcessLabel != "" {
- const prefix string = ",\"ProcessLabel\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.ProcessLabel))
- }
- if in.MountLabel != "" {
- const prefix string = ",\"MountLabel\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.MountLabel))
- }
- if len(in.LabelOpts) != 0 {
- const prefix string = ",\"labelopts\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v58, v59 := range in.LabelOpts {
- if v58 > 0 {
- out.RawByte(',')
- }
- out.String(string(v59))
- }
- out.RawByte(']')
- }
- }
- if in.User != "" {
- const prefix string = ",\"user\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.User))
- }
- if len(in.Groups) != 0 {
- const prefix string = ",\"groups\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v60, v61 := range in.Groups {
- if v60 > 0 {
- out.RawByte(',')
- }
- out.String(string(v61))
- }
- out.RawByte(']')
- }
- }
- if in.IPCNsCtr != "" {
- const prefix string = ",\"ipcNsCtr\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.IPCNsCtr))
- }
- if in.MountNsCtr != "" {
- const prefix string = ",\"mountNsCtr\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.MountNsCtr))
- }
- if in.NetNsCtr != "" {
- const prefix string = ",\"netNsCtr\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.NetNsCtr))
- }
- if in.PIDNsCtr != "" {
- const prefix string = ",\"pidNsCtr\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.PIDNsCtr))
- }
- if in.UserNsCtr != "" {
- const prefix string = ",\"userNsCtr\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.UserNsCtr))
- }
- if in.UTSNsCtr != "" {
- const prefix string = ",\"utsNsCtr\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.UTSNsCtr))
- }
- if in.CgroupNsCtr != "" {
- const prefix string = ",\"cgroupNsCtr\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.CgroupNsCtr))
- }
- {
- const prefix string = ",\"Dependencies\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.Dependencies == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
- out.RawString("null")
- } else {
- out.RawByte('[')
- for v62, v63 := range in.Dependencies {
- if v62 > 0 {
- out.RawByte(',')
- }
- out.String(string(v63))
- }
- out.RawByte(']')
- }
- }
- {
- const prefix string = ",\"createNetNS\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.CreateNetNS))
- }
- {
- const prefix string = ",\"staticIP\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.RawText((in.StaticIP).MarshalText())
- }
- if len(in.PortMappings) != 0 {
- const prefix string = ",\"portMappings\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v64, v65 := range in.PortMappings {
- if v64 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComCriOOcicniPkgOcicni(out, v65)
- }
- out.RawByte(']')
- }
- }
- if len(in.DNSServer) != 0 {
- const prefix string = ",\"dnsServer\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v66, v67 := range in.DNSServer {
- if v66 > 0 {
- out.RawByte(',')
- }
- out.RawText((v67).MarshalText())
- }
- out.RawByte(']')
- }
- }
- if len(in.DNSSearch) != 0 {
- const prefix string = ",\"dnsSearch\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v68, v69 := range in.DNSSearch {
- if v68 > 0 {
- out.RawByte(',')
- }
- out.String(string(v69))
- }
- out.RawByte(']')
- }
- }
- if len(in.DNSOption) != 0 {
- const prefix string = ",\"dnsOption\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v70, v71 := range in.DNSOption {
- if v70 > 0 {
- out.RawByte(',')
- }
- out.String(string(v71))
- }
- out.RawByte(']')
- }
- }
- if len(in.HostAdd) != 0 {
- const prefix string = ",\"hostsAdd\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v72, v73 := range in.HostAdd {
- if v72 > 0 {
- out.RawByte(',')
- }
- out.String(string(v73))
- }
- out.RawByte(']')
- }
- }
- if len(in.Networks) != 0 {
- const prefix string = ",\"networks\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v74, v75 := range in.Networks {
- if v74 > 0 {
- out.RawByte(',')
- }
- out.String(string(v75))
- }
- out.RawByte(']')
- }
- }
- if in.NetMode != "" {
- const prefix string = ",\"networkMode\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.NetMode))
- }
- if len(in.UserVolumes) != 0 {
- const prefix string = ",\"userVolumes\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v76, v77 := range in.UserVolumes {
- if v76 > 0 {
- out.RawByte(',')
- }
- out.String(string(v77))
- }
- out.RawByte(']')
- }
- }
- if len(in.Entrypoint) != 0 {
- const prefix string = ",\"entrypoint\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v78, v79 := range in.Entrypoint {
- if v78 > 0 {
- out.RawByte(',')
- }
- out.String(string(v79))
- }
- out.RawByte(']')
- }
- }
- if len(in.Command) != 0 {
- const prefix string = ",\"command\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v80, v81 := range in.Command {
- if v80 > 0 {
- out.RawByte(',')
- }
- out.String(string(v81))
- }
- out.RawByte(']')
- }
- }
- if in.Stdin {
- const prefix string = ",\"stdin\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.Stdin))
- }
- if len(in.Labels) != 0 {
- const prefix string = ",\"labels\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('{')
- v82First := true
- for v82Name, v82Value := range in.Labels {
- if v82First {
- v82First = false
- } else {
- out.RawByte(',')
- }
- out.String(string(v82Name))
- out.RawByte(':')
- out.String(string(v82Value))
- }
- out.RawByte('}')
- }
- }
- if in.StopSignal != 0 {
- const prefix string = ",\"stopSignal\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint(uint(in.StopSignal))
- }
- if in.StopTimeout != 0 {
- const prefix string = ",\"stopTimeout\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint(uint(in.StopTimeout))
- }
- {
- const prefix string = ",\"createdTime\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Raw((in.CreatedTime).MarshalJSON())
- }
- {
- const prefix string = ",\"cgroupParent\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.CgroupParent))
- }
- {
- const prefix string = ",\"logPath\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.LogPath))
- }
- if in.ConmonPidFile != "" {
- const prefix string = ",\"conmonPidFile\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.ConmonPidFile))
- }
- {
- const prefix string = ",\"postConfigureNetNS\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.PostConfigureNetNS))
- }
- if len(in.ExitCommand) != 0 {
- const prefix string = ",\"exitCommand\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v83, v84 := range in.ExitCommand {
- if v83 > 0 {
- out.RawByte(',')
- }
- out.String(string(v84))
- }
- out.RawByte(']')
- }
- }
- {
- const prefix string = ",\"LocalVolumes\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.LocalVolumes == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
- out.RawString("null")
- } else {
- out.RawByte('[')
- for v85, v86 := range in.LocalVolumes {
- if v85 > 0 {
- out.RawByte(',')
- }
- out.String(string(v86))
- }
- out.RawByte(']')
- }
- }
- {
- const prefix string = ",\"pause\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.IsInfra))
- }
- {
- const prefix string = ",\"systemd\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.Systemd))
- }
- out.RawByte('}')
-}
-
-// MarshalJSON supports json.Marshaler interface
-func (v Config) MarshalJSON() ([]byte, error) {
- w := jwriter.Writer{}
- easyjson1dbef17bEncodeGithubComContainersLibpodLibpod2(&w, v)
- return w.Buffer.BuildBytes(), w.Error
-}
-
-// MarshalEasyJSON supports easyjson.Marshaler interface
-func (v Config) MarshalEasyJSON(w *jwriter.Writer) {
- easyjson1dbef17bEncodeGithubComContainersLibpodLibpod2(w, v)
-}
-
-// UnmarshalJSON supports json.Unmarshaler interface
-func (v *Config) UnmarshalJSON(data []byte) error {
- r := jlexer.Lexer{Data: data}
- easyjson1dbef17bDecodeGithubComContainersLibpodLibpod2(&r, v)
- return r.Error()
-}
-
-// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
-func (v *Config) UnmarshalEasyJSON(l *jlexer.Lexer) {
- easyjson1dbef17bDecodeGithubComContainersLibpodLibpod2(l, v)
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComCriOOcicniPkgOcicni(in *jlexer.Lexer, out *ocicni.PortMapping) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "hostPort":
- out.HostPort = int32(in.Int32())
- case "containerPort":
- out.ContainerPort = int32(in.Int32())
- case "protocol":
- out.Protocol = string(in.String())
- case "hostIP":
- out.HostIP = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComCriOOcicniPkgOcicni(out *jwriter.Writer, in ocicni.PortMapping) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"hostPort\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int32(int32(in.HostPort))
- }
- {
- const prefix string = ",\"containerPort\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int32(int32(in.ContainerPort))
- }
- {
- const prefix string = ",\"protocol\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Protocol))
- }
- {
- const prefix string = ",\"hostIP\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.HostIP))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComContainersStorage(in *jlexer.Lexer, out *storage.IDMappingOptions) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "HostUIDMapping":
- out.HostUIDMapping = bool(in.Bool())
- case "HostGIDMapping":
- out.HostGIDMapping = bool(in.Bool())
- case "UIDMap":
- if in.IsNull() {
- in.Skip()
- out.UIDMap = nil
- } else {
- in.Delim('[')
- if out.UIDMap == nil {
- if !in.IsDelim(']') {
- out.UIDMap = make([]idtools.IDMap, 0, 2)
- } else {
- out.UIDMap = []idtools.IDMap{}
- }
- } else {
- out.UIDMap = (out.UIDMap)[:0]
- }
- for !in.IsDelim(']') {
- var v87 idtools.IDMap
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComContainersStoragePkgIdtools(in, &v87)
- out.UIDMap = append(out.UIDMap, v87)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "GIDMap":
- if in.IsNull() {
- in.Skip()
- out.GIDMap = nil
- } else {
- in.Delim('[')
- if out.GIDMap == nil {
- if !in.IsDelim(']') {
- out.GIDMap = make([]idtools.IDMap, 0, 2)
- } else {
- out.GIDMap = []idtools.IDMap{}
- }
- } else {
- out.GIDMap = (out.GIDMap)[:0]
- }
- for !in.IsDelim(']') {
- var v88 idtools.IDMap
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComContainersStoragePkgIdtools(in, &v88)
- out.GIDMap = append(out.GIDMap, v88)
- in.WantComma()
- }
- in.Delim(']')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComContainersStorage(out *jwriter.Writer, in storage.IDMappingOptions) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"HostUIDMapping\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.HostUIDMapping))
- }
- {
- const prefix string = ",\"HostGIDMapping\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.HostGIDMapping))
- }
- {
- const prefix string = ",\"UIDMap\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.UIDMap == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
- out.RawString("null")
- } else {
- out.RawByte('[')
- for v89, v90 := range in.UIDMap {
- if v89 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComContainersStoragePkgIdtools(out, v90)
- }
- out.RawByte(']')
- }
- }
- {
- const prefix string = ",\"GIDMap\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.GIDMap == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
- out.RawString("null")
- } else {
- out.RawByte('[')
- for v91, v92 := range in.GIDMap {
- if v91 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComContainersStoragePkgIdtools(out, v92)
- }
- out.RawByte(']')
- }
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComContainersStoragePkgIdtools(in *jlexer.Lexer, out *idtools.IDMap) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "container_id":
- out.ContainerID = int(in.Int())
- case "host_id":
- out.HostID = int(in.Int())
- case "size":
- out.Size = int(in.Int())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComContainersStoragePkgIdtools(out *jwriter.Writer, in idtools.IDMap) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"container_id\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int(int(in.ContainerID))
- }
- {
- const prefix string = ",\"host_id\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int(int(in.HostID))
- }
- {
- const prefix string = ",\"size\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int(int(in.Size))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo1(in *jlexer.Lexer, out *specs_go.Spec) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "ociVersion":
- out.Version = string(in.String())
- case "process":
- if in.IsNull() {
- in.Skip()
- out.Process = nil
- } else {
- if out.Process == nil {
- out.Process = new(specs_go.Process)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo2(in, &*out.Process)
- }
- case "root":
- if in.IsNull() {
- in.Skip()
- out.Root = nil
- } else {
- if out.Root == nil {
- out.Root = new(specs_go.Root)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo3(in, &*out.Root)
- }
- case "hostname":
- out.Hostname = string(in.String())
- case "mounts":
- if in.IsNull() {
- in.Skip()
- out.Mounts = nil
- } else {
- in.Delim('[')
- if out.Mounts == nil {
- if !in.IsDelim(']') {
- out.Mounts = make([]specs_go.Mount, 0, 1)
- } else {
- out.Mounts = []specs_go.Mount{}
- }
- } else {
- out.Mounts = (out.Mounts)[:0]
- }
- for !in.IsDelim(']') {
- var v93 specs_go.Mount
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo4(in, &v93)
- out.Mounts = append(out.Mounts, v93)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "hooks":
- if in.IsNull() {
- in.Skip()
- out.Hooks = nil
- } else {
- if out.Hooks == nil {
- out.Hooks = new(specs_go.Hooks)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo5(in, &*out.Hooks)
- }
- case "annotations":
- if in.IsNull() {
- in.Skip()
- } else {
- in.Delim('{')
- if !in.IsDelim('}') {
- out.Annotations = make(map[string]string)
- } else {
- out.Annotations = nil
- }
- for !in.IsDelim('}') {
- key := string(in.String())
- in.WantColon()
- var v94 string
- v94 = string(in.String())
- (out.Annotations)[key] = v94
- in.WantComma()
- }
- in.Delim('}')
- }
- case "linux":
- if in.IsNull() {
- in.Skip()
- out.Linux = nil
- } else {
- if out.Linux == nil {
- out.Linux = new(specs_go.Linux)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo6(in, &*out.Linux)
- }
- case "solaris":
- if in.IsNull() {
- in.Skip()
- out.Solaris = nil
- } else {
- if out.Solaris == nil {
- out.Solaris = new(specs_go.Solaris)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo7(in, &*out.Solaris)
- }
- case "windows":
- if in.IsNull() {
- in.Skip()
- out.Windows = nil
- } else {
- if out.Windows == nil {
- out.Windows = new(specs_go.Windows)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo8(in, &*out.Windows)
- }
- case "vm":
- if in.IsNull() {
- in.Skip()
- out.VM = nil
- } else {
- if out.VM == nil {
- out.VM = new(specs_go.VM)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo9(in, &*out.VM)
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo1(out *jwriter.Writer, in specs_go.Spec) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"ociVersion\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Version))
- }
- if in.Process != nil {
- const prefix string = ",\"process\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo2(out, *in.Process)
- }
- if in.Root != nil {
- const prefix string = ",\"root\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo3(out, *in.Root)
- }
- if in.Hostname != "" {
- const prefix string = ",\"hostname\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Hostname))
- }
- if len(in.Mounts) != 0 {
- const prefix string = ",\"mounts\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v95, v96 := range in.Mounts {
- if v95 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo4(out, v96)
- }
- out.RawByte(']')
- }
- }
- if in.Hooks != nil {
- const prefix string = ",\"hooks\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo5(out, *in.Hooks)
- }
- if len(in.Annotations) != 0 {
- const prefix string = ",\"annotations\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('{')
- v97First := true
- for v97Name, v97Value := range in.Annotations {
- if v97First {
- v97First = false
- } else {
- out.RawByte(',')
- }
- out.String(string(v97Name))
- out.RawByte(':')
- out.String(string(v97Value))
- }
- out.RawByte('}')
- }
- }
- if in.Linux != nil {
- const prefix string = ",\"linux\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo6(out, *in.Linux)
- }
- if in.Solaris != nil {
- const prefix string = ",\"solaris\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo7(out, *in.Solaris)
- }
- if in.Windows != nil {
- const prefix string = ",\"windows\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo8(out, *in.Windows)
- }
- if in.VM != nil {
- const prefix string = ",\"vm\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo9(out, *in.VM)
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo9(in *jlexer.Lexer, out *specs_go.VM) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "hypervisor":
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo10(in, &out.Hypervisor)
- case "kernel":
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo11(in, &out.Kernel)
- case "image":
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo12(in, &out.Image)
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo9(out *jwriter.Writer, in specs_go.VM) {
- out.RawByte('{')
- first := true
- _ = first
- if true {
- const prefix string = ",\"hypervisor\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo10(out, in.Hypervisor)
- }
- {
- const prefix string = ",\"kernel\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo11(out, in.Kernel)
- }
- if true {
- const prefix string = ",\"image\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo12(out, in.Image)
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo12(in *jlexer.Lexer, out *specs_go.VMImage) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "path":
- out.Path = string(in.String())
- case "format":
- out.Format = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo12(out *jwriter.Writer, in specs_go.VMImage) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"path\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Path))
- }
- {
- const prefix string = ",\"format\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Format))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo11(in *jlexer.Lexer, out *specs_go.VMKernel) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "path":
- out.Path = string(in.String())
- case "parameters":
- out.Parameters = string(in.String())
- case "initrd":
- out.InitRD = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo11(out *jwriter.Writer, in specs_go.VMKernel) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"path\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Path))
- }
- if in.Parameters != "" {
- const prefix string = ",\"parameters\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Parameters))
- }
- if in.InitRD != "" {
- const prefix string = ",\"initrd\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.InitRD))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo10(in *jlexer.Lexer, out *specs_go.VMHypervisor) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "path":
- out.Path = string(in.String())
- case "parameters":
- out.Parameters = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo10(out *jwriter.Writer, in specs_go.VMHypervisor) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"path\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Path))
- }
- if in.Parameters != "" {
- const prefix string = ",\"parameters\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Parameters))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo8(in *jlexer.Lexer, out *specs_go.Windows) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "layerFolders":
- if in.IsNull() {
- in.Skip()
- out.LayerFolders = nil
- } else {
- in.Delim('[')
- if out.LayerFolders == nil {
- if !in.IsDelim(']') {
- out.LayerFolders = make([]string, 0, 4)
- } else {
- out.LayerFolders = []string{}
- }
- } else {
- out.LayerFolders = (out.LayerFolders)[:0]
- }
- for !in.IsDelim(']') {
- var v98 string
- v98 = string(in.String())
- out.LayerFolders = append(out.LayerFolders, v98)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "devices":
- if in.IsNull() {
- in.Skip()
- out.Devices = nil
- } else {
- in.Delim('[')
- if out.Devices == nil {
- if !in.IsDelim(']') {
- out.Devices = make([]specs_go.WindowsDevice, 0, 2)
- } else {
- out.Devices = []specs_go.WindowsDevice{}
- }
- } else {
- out.Devices = (out.Devices)[:0]
- }
- for !in.IsDelim(']') {
- var v99 specs_go.WindowsDevice
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo13(in, &v99)
- out.Devices = append(out.Devices, v99)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "resources":
- if in.IsNull() {
- in.Skip()
- out.Resources = nil
- } else {
- if out.Resources == nil {
- out.Resources = new(specs_go.WindowsResources)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo14(in, &*out.Resources)
- }
- case "credentialSpec":
- if m, ok := out.CredentialSpec.(easyjson.Unmarshaler); ok {
- m.UnmarshalEasyJSON(in)
- } else if m, ok := out.CredentialSpec.(json.Unmarshaler); ok {
- _ = m.UnmarshalJSON(in.Raw())
- } else {
- out.CredentialSpec = in.Interface()
- }
- case "servicing":
- out.Servicing = bool(in.Bool())
- case "ignoreFlushesDuringBoot":
- out.IgnoreFlushesDuringBoot = bool(in.Bool())
- case "hyperv":
- if in.IsNull() {
- in.Skip()
- out.HyperV = nil
- } else {
- if out.HyperV == nil {
- out.HyperV = new(specs_go.WindowsHyperV)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo15(in, &*out.HyperV)
- }
- case "network":
- if in.IsNull() {
- in.Skip()
- out.Network = nil
- } else {
- if out.Network == nil {
- out.Network = new(specs_go.WindowsNetwork)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo16(in, &*out.Network)
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo8(out *jwriter.Writer, in specs_go.Windows) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"layerFolders\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.LayerFolders == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
- out.RawString("null")
- } else {
- out.RawByte('[')
- for v100, v101 := range in.LayerFolders {
- if v100 > 0 {
- out.RawByte(',')
- }
- out.String(string(v101))
- }
- out.RawByte(']')
- }
- }
- if len(in.Devices) != 0 {
- const prefix string = ",\"devices\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v102, v103 := range in.Devices {
- if v102 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo13(out, v103)
- }
- out.RawByte(']')
- }
- }
- if in.Resources != nil {
- const prefix string = ",\"resources\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo14(out, *in.Resources)
- }
- if in.CredentialSpec != nil {
- const prefix string = ",\"credentialSpec\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if m, ok := in.CredentialSpec.(easyjson.Marshaler); ok {
- m.MarshalEasyJSON(out)
- } else if m, ok := in.CredentialSpec.(json.Marshaler); ok {
- out.Raw(m.MarshalJSON())
- } else {
- out.Raw(json.Marshal(in.CredentialSpec))
- }
- }
- if in.Servicing {
- const prefix string = ",\"servicing\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.Servicing))
- }
- if in.IgnoreFlushesDuringBoot {
- const prefix string = ",\"ignoreFlushesDuringBoot\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.IgnoreFlushesDuringBoot))
- }
- if in.HyperV != nil {
- const prefix string = ",\"hyperv\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo15(out, *in.HyperV)
- }
- if in.Network != nil {
- const prefix string = ",\"network\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo16(out, *in.Network)
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo16(in *jlexer.Lexer, out *specs_go.WindowsNetwork) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "endpointList":
- if in.IsNull() {
- in.Skip()
- out.EndpointList = nil
- } else {
- in.Delim('[')
- if out.EndpointList == nil {
- if !in.IsDelim(']') {
- out.EndpointList = make([]string, 0, 4)
- } else {
- out.EndpointList = []string{}
- }
- } else {
- out.EndpointList = (out.EndpointList)[:0]
- }
- for !in.IsDelim(']') {
- var v104 string
- v104 = string(in.String())
- out.EndpointList = append(out.EndpointList, v104)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "allowUnqualifiedDNSQuery":
- out.AllowUnqualifiedDNSQuery = bool(in.Bool())
- case "DNSSearchList":
- if in.IsNull() {
- in.Skip()
- out.DNSSearchList = nil
- } else {
- in.Delim('[')
- if out.DNSSearchList == nil {
- if !in.IsDelim(']') {
- out.DNSSearchList = make([]string, 0, 4)
- } else {
- out.DNSSearchList = []string{}
- }
- } else {
- out.DNSSearchList = (out.DNSSearchList)[:0]
- }
- for !in.IsDelim(']') {
- var v105 string
- v105 = string(in.String())
- out.DNSSearchList = append(out.DNSSearchList, v105)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "networkSharedContainerName":
- out.NetworkSharedContainerName = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo16(out *jwriter.Writer, in specs_go.WindowsNetwork) {
- out.RawByte('{')
- first := true
- _ = first
- if len(in.EndpointList) != 0 {
- const prefix string = ",\"endpointList\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v106, v107 := range in.EndpointList {
- if v106 > 0 {
- out.RawByte(',')
- }
- out.String(string(v107))
- }
- out.RawByte(']')
- }
- }
- if in.AllowUnqualifiedDNSQuery {
- const prefix string = ",\"allowUnqualifiedDNSQuery\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.AllowUnqualifiedDNSQuery))
- }
- if len(in.DNSSearchList) != 0 {
- const prefix string = ",\"DNSSearchList\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v108, v109 := range in.DNSSearchList {
- if v108 > 0 {
- out.RawByte(',')
- }
- out.String(string(v109))
- }
- out.RawByte(']')
- }
- }
- if in.NetworkSharedContainerName != "" {
- const prefix string = ",\"networkSharedContainerName\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.NetworkSharedContainerName))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo15(in *jlexer.Lexer, out *specs_go.WindowsHyperV) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "utilityVMPath":
- out.UtilityVMPath = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo15(out *jwriter.Writer, in specs_go.WindowsHyperV) {
- out.RawByte('{')
- first := true
- _ = first
- if in.UtilityVMPath != "" {
- const prefix string = ",\"utilityVMPath\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.UtilityVMPath))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo14(in *jlexer.Lexer, out *specs_go.WindowsResources) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "memory":
- if in.IsNull() {
- in.Skip()
- out.Memory = nil
- } else {
- if out.Memory == nil {
- out.Memory = new(specs_go.WindowsMemoryResources)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo17(in, &*out.Memory)
- }
- case "cpu":
- if in.IsNull() {
- in.Skip()
- out.CPU = nil
- } else {
- if out.CPU == nil {
- out.CPU = new(specs_go.WindowsCPUResources)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo18(in, &*out.CPU)
- }
- case "storage":
- if in.IsNull() {
- in.Skip()
- out.Storage = nil
- } else {
- if out.Storage == nil {
- out.Storage = new(specs_go.WindowsStorageResources)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo19(in, &*out.Storage)
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo14(out *jwriter.Writer, in specs_go.WindowsResources) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Memory != nil {
- const prefix string = ",\"memory\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo17(out, *in.Memory)
- }
- if in.CPU != nil {
- const prefix string = ",\"cpu\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo18(out, *in.CPU)
- }
- if in.Storage != nil {
- const prefix string = ",\"storage\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo19(out, *in.Storage)
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo19(in *jlexer.Lexer, out *specs_go.WindowsStorageResources) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "iops":
- if in.IsNull() {
- in.Skip()
- out.Iops = nil
- } else {
- if out.Iops == nil {
- out.Iops = new(uint64)
- }
- *out.Iops = uint64(in.Uint64())
- }
- case "bps":
- if in.IsNull() {
- in.Skip()
- out.Bps = nil
- } else {
- if out.Bps == nil {
- out.Bps = new(uint64)
- }
- *out.Bps = uint64(in.Uint64())
- }
- case "sandboxSize":
- if in.IsNull() {
- in.Skip()
- out.SandboxSize = nil
- } else {
- if out.SandboxSize == nil {
- out.SandboxSize = new(uint64)
- }
- *out.SandboxSize = uint64(in.Uint64())
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo19(out *jwriter.Writer, in specs_go.WindowsStorageResources) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Iops != nil {
- const prefix string = ",\"iops\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(*in.Iops))
- }
- if in.Bps != nil {
- const prefix string = ",\"bps\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(*in.Bps))
- }
- if in.SandboxSize != nil {
- const prefix string = ",\"sandboxSize\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(*in.SandboxSize))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo18(in *jlexer.Lexer, out *specs_go.WindowsCPUResources) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "count":
- if in.IsNull() {
- in.Skip()
- out.Count = nil
- } else {
- if out.Count == nil {
- out.Count = new(uint64)
- }
- *out.Count = uint64(in.Uint64())
- }
- case "shares":
- if in.IsNull() {
- in.Skip()
- out.Shares = nil
- } else {
- if out.Shares == nil {
- out.Shares = new(uint16)
- }
- *out.Shares = uint16(in.Uint16())
- }
- case "maximum":
- if in.IsNull() {
- in.Skip()
- out.Maximum = nil
- } else {
- if out.Maximum == nil {
- out.Maximum = new(uint16)
- }
- *out.Maximum = uint16(in.Uint16())
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo18(out *jwriter.Writer, in specs_go.WindowsCPUResources) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Count != nil {
- const prefix string = ",\"count\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(*in.Count))
- }
- if in.Shares != nil {
- const prefix string = ",\"shares\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint16(uint16(*in.Shares))
- }
- if in.Maximum != nil {
- const prefix string = ",\"maximum\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint16(uint16(*in.Maximum))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo17(in *jlexer.Lexer, out *specs_go.WindowsMemoryResources) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "limit":
- if in.IsNull() {
- in.Skip()
- out.Limit = nil
- } else {
- if out.Limit == nil {
- out.Limit = new(uint64)
- }
- *out.Limit = uint64(in.Uint64())
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo17(out *jwriter.Writer, in specs_go.WindowsMemoryResources) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Limit != nil {
- const prefix string = ",\"limit\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(*in.Limit))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo13(in *jlexer.Lexer, out *specs_go.WindowsDevice) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "id":
- out.ID = string(in.String())
- case "idType":
- out.IDType = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo13(out *jwriter.Writer, in specs_go.WindowsDevice) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"id\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.ID))
- }
- {
- const prefix string = ",\"idType\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.IDType))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo7(in *jlexer.Lexer, out *specs_go.Solaris) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "milestone":
- out.Milestone = string(in.String())
- case "limitpriv":
- out.LimitPriv = string(in.String())
- case "maxShmMemory":
- out.MaxShmMemory = string(in.String())
- case "anet":
- if in.IsNull() {
- in.Skip()
- out.Anet = nil
- } else {
- in.Delim('[')
- if out.Anet == nil {
- if !in.IsDelim(']') {
- out.Anet = make([]specs_go.SolarisAnet, 0, 1)
- } else {
- out.Anet = []specs_go.SolarisAnet{}
- }
- } else {
- out.Anet = (out.Anet)[:0]
- }
- for !in.IsDelim(']') {
- var v110 specs_go.SolarisAnet
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo20(in, &v110)
- out.Anet = append(out.Anet, v110)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "cappedCPU":
- if in.IsNull() {
- in.Skip()
- out.CappedCPU = nil
- } else {
- if out.CappedCPU == nil {
- out.CappedCPU = new(specs_go.SolarisCappedCPU)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo21(in, &*out.CappedCPU)
- }
- case "cappedMemory":
- if in.IsNull() {
- in.Skip()
- out.CappedMemory = nil
- } else {
- if out.CappedMemory == nil {
- out.CappedMemory = new(specs_go.SolarisCappedMemory)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo22(in, &*out.CappedMemory)
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo7(out *jwriter.Writer, in specs_go.Solaris) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Milestone != "" {
- const prefix string = ",\"milestone\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Milestone))
- }
- if in.LimitPriv != "" {
- const prefix string = ",\"limitpriv\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.LimitPriv))
- }
- if in.MaxShmMemory != "" {
- const prefix string = ",\"maxShmMemory\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.MaxShmMemory))
- }
- if len(in.Anet) != 0 {
- const prefix string = ",\"anet\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v111, v112 := range in.Anet {
- if v111 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo20(out, v112)
- }
- out.RawByte(']')
- }
- }
- if in.CappedCPU != nil {
- const prefix string = ",\"cappedCPU\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo21(out, *in.CappedCPU)
- }
- if in.CappedMemory != nil {
- const prefix string = ",\"cappedMemory\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo22(out, *in.CappedMemory)
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo22(in *jlexer.Lexer, out *specs_go.SolarisCappedMemory) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "physical":
- out.Physical = string(in.String())
- case "swap":
- out.Swap = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo22(out *jwriter.Writer, in specs_go.SolarisCappedMemory) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Physical != "" {
- const prefix string = ",\"physical\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Physical))
- }
- if in.Swap != "" {
- const prefix string = ",\"swap\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Swap))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo21(in *jlexer.Lexer, out *specs_go.SolarisCappedCPU) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "ncpus":
- out.Ncpus = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo21(out *jwriter.Writer, in specs_go.SolarisCappedCPU) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Ncpus != "" {
- const prefix string = ",\"ncpus\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Ncpus))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo20(in *jlexer.Lexer, out *specs_go.SolarisAnet) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "linkname":
- out.Linkname = string(in.String())
- case "lowerLink":
- out.Lowerlink = string(in.String())
- case "allowedAddress":
- out.Allowedaddr = string(in.String())
- case "configureAllowedAddress":
- out.Configallowedaddr = string(in.String())
- case "defrouter":
- out.Defrouter = string(in.String())
- case "linkProtection":
- out.Linkprotection = string(in.String())
- case "macAddress":
- out.Macaddress = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo20(out *jwriter.Writer, in specs_go.SolarisAnet) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Linkname != "" {
- const prefix string = ",\"linkname\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Linkname))
- }
- if in.Lowerlink != "" {
- const prefix string = ",\"lowerLink\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Lowerlink))
- }
- if in.Allowedaddr != "" {
- const prefix string = ",\"allowedAddress\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Allowedaddr))
- }
- if in.Configallowedaddr != "" {
- const prefix string = ",\"configureAllowedAddress\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Configallowedaddr))
- }
- if in.Defrouter != "" {
- const prefix string = ",\"defrouter\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Defrouter))
- }
- if in.Linkprotection != "" {
- const prefix string = ",\"linkProtection\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Linkprotection))
- }
- if in.Macaddress != "" {
- const prefix string = ",\"macAddress\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Macaddress))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo6(in *jlexer.Lexer, out *specs_go.Linux) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "uidMappings":
- if in.IsNull() {
- in.Skip()
- out.UIDMappings = nil
- } else {
- in.Delim('[')
- if out.UIDMappings == nil {
- if !in.IsDelim(']') {
- out.UIDMappings = make([]specs_go.LinuxIDMapping, 0, 5)
- } else {
- out.UIDMappings = []specs_go.LinuxIDMapping{}
- }
- } else {
- out.UIDMappings = (out.UIDMappings)[:0]
- }
- for !in.IsDelim(']') {
- var v113 specs_go.LinuxIDMapping
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo23(in, &v113)
- out.UIDMappings = append(out.UIDMappings, v113)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "gidMappings":
- if in.IsNull() {
- in.Skip()
- out.GIDMappings = nil
- } else {
- in.Delim('[')
- if out.GIDMappings == nil {
- if !in.IsDelim(']') {
- out.GIDMappings = make([]specs_go.LinuxIDMapping, 0, 5)
- } else {
- out.GIDMappings = []specs_go.LinuxIDMapping{}
- }
- } else {
- out.GIDMappings = (out.GIDMappings)[:0]
- }
- for !in.IsDelim(']') {
- var v114 specs_go.LinuxIDMapping
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo23(in, &v114)
- out.GIDMappings = append(out.GIDMappings, v114)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "sysctl":
- if in.IsNull() {
- in.Skip()
- } else {
- in.Delim('{')
- if !in.IsDelim('}') {
- out.Sysctl = make(map[string]string)
- } else {
- out.Sysctl = nil
- }
- for !in.IsDelim('}') {
- key := string(in.String())
- in.WantColon()
- var v115 string
- v115 = string(in.String())
- (out.Sysctl)[key] = v115
- in.WantComma()
- }
- in.Delim('}')
- }
- case "resources":
- if in.IsNull() {
- in.Skip()
- out.Resources = nil
- } else {
- if out.Resources == nil {
- out.Resources = new(specs_go.LinuxResources)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo24(in, &*out.Resources)
- }
- case "cgroupsPath":
- out.CgroupsPath = string(in.String())
- case "namespaces":
- if in.IsNull() {
- in.Skip()
- out.Namespaces = nil
- } else {
- in.Delim('[')
- if out.Namespaces == nil {
- if !in.IsDelim(']') {
- out.Namespaces = make([]specs_go.LinuxNamespace, 0, 2)
- } else {
- out.Namespaces = []specs_go.LinuxNamespace{}
- }
- } else {
- out.Namespaces = (out.Namespaces)[:0]
- }
- for !in.IsDelim(']') {
- var v116 specs_go.LinuxNamespace
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo25(in, &v116)
- out.Namespaces = append(out.Namespaces, v116)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "devices":
- if in.IsNull() {
- in.Skip()
- out.Devices = nil
- } else {
- in.Delim('[')
- if out.Devices == nil {
- if !in.IsDelim(']') {
- out.Devices = make([]specs_go.LinuxDevice, 0, 1)
- } else {
- out.Devices = []specs_go.LinuxDevice{}
- }
- } else {
- out.Devices = (out.Devices)[:0]
- }
- for !in.IsDelim(']') {
- var v117 specs_go.LinuxDevice
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo26(in, &v117)
- out.Devices = append(out.Devices, v117)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "seccomp":
- if in.IsNull() {
- in.Skip()
- out.Seccomp = nil
- } else {
- if out.Seccomp == nil {
- out.Seccomp = new(specs_go.LinuxSeccomp)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo27(in, &*out.Seccomp)
- }
- case "rootfsPropagation":
- out.RootfsPropagation = string(in.String())
- case "maskedPaths":
- if in.IsNull() {
- in.Skip()
- out.MaskedPaths = nil
- } else {
- in.Delim('[')
- if out.MaskedPaths == nil {
- if !in.IsDelim(']') {
- out.MaskedPaths = make([]string, 0, 4)
- } else {
- out.MaskedPaths = []string{}
- }
- } else {
- out.MaskedPaths = (out.MaskedPaths)[:0]
- }
- for !in.IsDelim(']') {
- var v118 string
- v118 = string(in.String())
- out.MaskedPaths = append(out.MaskedPaths, v118)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "readonlyPaths":
- if in.IsNull() {
- in.Skip()
- out.ReadonlyPaths = nil
- } else {
- in.Delim('[')
- if out.ReadonlyPaths == nil {
- if !in.IsDelim(']') {
- out.ReadonlyPaths = make([]string, 0, 4)
- } else {
- out.ReadonlyPaths = []string{}
- }
- } else {
- out.ReadonlyPaths = (out.ReadonlyPaths)[:0]
- }
- for !in.IsDelim(']') {
- var v119 string
- v119 = string(in.String())
- out.ReadonlyPaths = append(out.ReadonlyPaths, v119)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "mountLabel":
- out.MountLabel = string(in.String())
- case "intelRdt":
- if in.IsNull() {
- in.Skip()
- out.IntelRdt = nil
- } else {
- if out.IntelRdt == nil {
- out.IntelRdt = new(specs_go.LinuxIntelRdt)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo28(in, &*out.IntelRdt)
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo6(out *jwriter.Writer, in specs_go.Linux) {
- out.RawByte('{')
- first := true
- _ = first
- if len(in.UIDMappings) != 0 {
- const prefix string = ",\"uidMappings\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v120, v121 := range in.UIDMappings {
- if v120 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo23(out, v121)
- }
- out.RawByte(']')
- }
- }
- if len(in.GIDMappings) != 0 {
- const prefix string = ",\"gidMappings\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v122, v123 := range in.GIDMappings {
- if v122 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo23(out, v123)
- }
- out.RawByte(']')
- }
- }
- if len(in.Sysctl) != 0 {
- const prefix string = ",\"sysctl\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('{')
- v124First := true
- for v124Name, v124Value := range in.Sysctl {
- if v124First {
- v124First = false
- } else {
- out.RawByte(',')
- }
- out.String(string(v124Name))
- out.RawByte(':')
- out.String(string(v124Value))
- }
- out.RawByte('}')
- }
- }
- if in.Resources != nil {
- const prefix string = ",\"resources\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo24(out, *in.Resources)
- }
- if in.CgroupsPath != "" {
- const prefix string = ",\"cgroupsPath\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.CgroupsPath))
- }
- if len(in.Namespaces) != 0 {
- const prefix string = ",\"namespaces\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v125, v126 := range in.Namespaces {
- if v125 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo25(out, v126)
- }
- out.RawByte(']')
- }
- }
- if len(in.Devices) != 0 {
- const prefix string = ",\"devices\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v127, v128 := range in.Devices {
- if v127 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo26(out, v128)
- }
- out.RawByte(']')
- }
- }
- if in.Seccomp != nil {
- const prefix string = ",\"seccomp\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo27(out, *in.Seccomp)
- }
- if in.RootfsPropagation != "" {
- const prefix string = ",\"rootfsPropagation\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.RootfsPropagation))
- }
- if len(in.MaskedPaths) != 0 {
- const prefix string = ",\"maskedPaths\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v129, v130 := range in.MaskedPaths {
- if v129 > 0 {
- out.RawByte(',')
- }
- out.String(string(v130))
- }
- out.RawByte(']')
- }
- }
- if len(in.ReadonlyPaths) != 0 {
- const prefix string = ",\"readonlyPaths\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v131, v132 := range in.ReadonlyPaths {
- if v131 > 0 {
- out.RawByte(',')
- }
- out.String(string(v132))
- }
- out.RawByte(']')
- }
- }
- if in.MountLabel != "" {
- const prefix string = ",\"mountLabel\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.MountLabel))
- }
- if in.IntelRdt != nil {
- const prefix string = ",\"intelRdt\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo28(out, *in.IntelRdt)
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo28(in *jlexer.Lexer, out *specs_go.LinuxIntelRdt) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "l3CacheSchema":
- out.L3CacheSchema = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo28(out *jwriter.Writer, in specs_go.LinuxIntelRdt) {
- out.RawByte('{')
- first := true
- _ = first
- if in.L3CacheSchema != "" {
- const prefix string = ",\"l3CacheSchema\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.L3CacheSchema))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo27(in *jlexer.Lexer, out *specs_go.LinuxSeccomp) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "defaultAction":
- out.DefaultAction = specs_go.LinuxSeccompAction(in.String())
- case "architectures":
- if in.IsNull() {
- in.Skip()
- out.Architectures = nil
- } else {
- in.Delim('[')
- if out.Architectures == nil {
- if !in.IsDelim(']') {
- out.Architectures = make([]specs_go.Arch, 0, 4)
- } else {
- out.Architectures = []specs_go.Arch{}
- }
- } else {
- out.Architectures = (out.Architectures)[:0]
- }
- for !in.IsDelim(']') {
- var v133 specs_go.Arch
- v133 = specs_go.Arch(in.String())
- out.Architectures = append(out.Architectures, v133)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "syscalls":
- if in.IsNull() {
- in.Skip()
- out.Syscalls = nil
- } else {
- in.Delim('[')
- if out.Syscalls == nil {
- if !in.IsDelim(']') {
- out.Syscalls = make([]specs_go.LinuxSyscall, 0, 1)
- } else {
- out.Syscalls = []specs_go.LinuxSyscall{}
- }
- } else {
- out.Syscalls = (out.Syscalls)[:0]
- }
- for !in.IsDelim(']') {
- var v134 specs_go.LinuxSyscall
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo29(in, &v134)
- out.Syscalls = append(out.Syscalls, v134)
- in.WantComma()
- }
- in.Delim(']')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo27(out *jwriter.Writer, in specs_go.LinuxSeccomp) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"defaultAction\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.DefaultAction))
- }
- if len(in.Architectures) != 0 {
- const prefix string = ",\"architectures\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v135, v136 := range in.Architectures {
- if v135 > 0 {
- out.RawByte(',')
- }
- out.String(string(v136))
- }
- out.RawByte(']')
- }
- }
- if len(in.Syscalls) != 0 {
- const prefix string = ",\"syscalls\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v137, v138 := range in.Syscalls {
- if v137 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo29(out, v138)
- }
- out.RawByte(']')
- }
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo29(in *jlexer.Lexer, out *specs_go.LinuxSyscall) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "names":
- if in.IsNull() {
- in.Skip()
- out.Names = nil
- } else {
- in.Delim('[')
- if out.Names == nil {
- if !in.IsDelim(']') {
- out.Names = make([]string, 0, 4)
- } else {
- out.Names = []string{}
- }
- } else {
- out.Names = (out.Names)[:0]
- }
- for !in.IsDelim(']') {
- var v139 string
- v139 = string(in.String())
- out.Names = append(out.Names, v139)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "action":
- out.Action = specs_go.LinuxSeccompAction(in.String())
- case "args":
- if in.IsNull() {
- in.Skip()
- out.Args = nil
- } else {
- in.Delim('[')
- if out.Args == nil {
- if !in.IsDelim(']') {
- out.Args = make([]specs_go.LinuxSeccompArg, 0, 1)
- } else {
- out.Args = []specs_go.LinuxSeccompArg{}
- }
- } else {
- out.Args = (out.Args)[:0]
- }
- for !in.IsDelim(']') {
- var v140 specs_go.LinuxSeccompArg
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo30(in, &v140)
- out.Args = append(out.Args, v140)
- in.WantComma()
- }
- in.Delim(']')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo29(out *jwriter.Writer, in specs_go.LinuxSyscall) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"names\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.Names == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
- out.RawString("null")
- } else {
- out.RawByte('[')
- for v141, v142 := range in.Names {
- if v141 > 0 {
- out.RawByte(',')
- }
- out.String(string(v142))
- }
- out.RawByte(']')
- }
- }
- {
- const prefix string = ",\"action\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Action))
- }
- if len(in.Args) != 0 {
- const prefix string = ",\"args\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v143, v144 := range in.Args {
- if v143 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo30(out, v144)
- }
- out.RawByte(']')
- }
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo30(in *jlexer.Lexer, out *specs_go.LinuxSeccompArg) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "index":
- out.Index = uint(in.Uint())
- case "value":
- out.Value = uint64(in.Uint64())
- case "valueTwo":
- out.ValueTwo = uint64(in.Uint64())
- case "op":
- out.Op = specs_go.LinuxSeccompOperator(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo30(out *jwriter.Writer, in specs_go.LinuxSeccompArg) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"index\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint(uint(in.Index))
- }
- {
- const prefix string = ",\"value\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(in.Value))
- }
- if in.ValueTwo != 0 {
- const prefix string = ",\"valueTwo\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(in.ValueTwo))
- }
- {
- const prefix string = ",\"op\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Op))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo26(in *jlexer.Lexer, out *specs_go.LinuxDevice) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "path":
- out.Path = string(in.String())
- case "type":
- out.Type = string(in.String())
- case "major":
- out.Major = int64(in.Int64())
- case "minor":
- out.Minor = int64(in.Int64())
- case "fileMode":
- if in.IsNull() {
- in.Skip()
- out.FileMode = nil
- } else {
- if out.FileMode == nil {
- out.FileMode = new(os.FileMode)
- }
- *out.FileMode = os.FileMode(in.Uint32())
- }
- case "uid":
- if in.IsNull() {
- in.Skip()
- out.UID = nil
- } else {
- if out.UID == nil {
- out.UID = new(uint32)
- }
- *out.UID = uint32(in.Uint32())
- }
- case "gid":
- if in.IsNull() {
- in.Skip()
- out.GID = nil
- } else {
- if out.GID == nil {
- out.GID = new(uint32)
- }
- *out.GID = uint32(in.Uint32())
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo26(out *jwriter.Writer, in specs_go.LinuxDevice) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"path\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Path))
- }
- {
- const prefix string = ",\"type\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Type))
- }
- {
- const prefix string = ",\"major\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(in.Major))
- }
- {
- const prefix string = ",\"minor\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(in.Minor))
- }
- if in.FileMode != nil {
- const prefix string = ",\"fileMode\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint32(uint32(*in.FileMode))
- }
- if in.UID != nil {
- const prefix string = ",\"uid\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint32(uint32(*in.UID))
- }
- if in.GID != nil {
- const prefix string = ",\"gid\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint32(uint32(*in.GID))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo25(in *jlexer.Lexer, out *specs_go.LinuxNamespace) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "type":
- out.Type = specs_go.LinuxNamespaceType(in.String())
- case "path":
- out.Path = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo25(out *jwriter.Writer, in specs_go.LinuxNamespace) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"type\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Type))
- }
- if in.Path != "" {
- const prefix string = ",\"path\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Path))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo24(in *jlexer.Lexer, out *specs_go.LinuxResources) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "devices":
- if in.IsNull() {
- in.Skip()
- out.Devices = nil
- } else {
- in.Delim('[')
- if out.Devices == nil {
- if !in.IsDelim(']') {
- out.Devices = make([]specs_go.LinuxDeviceCgroup, 0, 1)
- } else {
- out.Devices = []specs_go.LinuxDeviceCgroup{}
- }
- } else {
- out.Devices = (out.Devices)[:0]
- }
- for !in.IsDelim(']') {
- var v145 specs_go.LinuxDeviceCgroup
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo31(in, &v145)
- out.Devices = append(out.Devices, v145)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "memory":
- if in.IsNull() {
- in.Skip()
- out.Memory = nil
- } else {
- if out.Memory == nil {
- out.Memory = new(specs_go.LinuxMemory)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo32(in, &*out.Memory)
- }
- case "cpu":
- if in.IsNull() {
- in.Skip()
- out.CPU = nil
- } else {
- if out.CPU == nil {
- out.CPU = new(specs_go.LinuxCPU)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo33(in, &*out.CPU)
- }
- case "pids":
- if in.IsNull() {
- in.Skip()
- out.Pids = nil
- } else {
- if out.Pids == nil {
- out.Pids = new(specs_go.LinuxPids)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo34(in, &*out.Pids)
- }
- case "blockIO":
- if in.IsNull() {
- in.Skip()
- out.BlockIO = nil
- } else {
- if out.BlockIO == nil {
- out.BlockIO = new(specs_go.LinuxBlockIO)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo35(in, &*out.BlockIO)
- }
- case "hugepageLimits":
- if in.IsNull() {
- in.Skip()
- out.HugepageLimits = nil
- } else {
- in.Delim('[')
- if out.HugepageLimits == nil {
- if !in.IsDelim(']') {
- out.HugepageLimits = make([]specs_go.LinuxHugepageLimit, 0, 2)
- } else {
- out.HugepageLimits = []specs_go.LinuxHugepageLimit{}
- }
- } else {
- out.HugepageLimits = (out.HugepageLimits)[:0]
- }
- for !in.IsDelim(']') {
- var v146 specs_go.LinuxHugepageLimit
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo36(in, &v146)
- out.HugepageLimits = append(out.HugepageLimits, v146)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "network":
- if in.IsNull() {
- in.Skip()
- out.Network = nil
- } else {
- if out.Network == nil {
- out.Network = new(specs_go.LinuxNetwork)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo37(in, &*out.Network)
- }
- case "rdma":
- if in.IsNull() {
- in.Skip()
- } else {
- in.Delim('{')
- if !in.IsDelim('}') {
- out.Rdma = make(map[string]specs_go.LinuxRdma)
- } else {
- out.Rdma = nil
- }
- for !in.IsDelim('}') {
- key := string(in.String())
- in.WantColon()
- var v147 specs_go.LinuxRdma
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo38(in, &v147)
- (out.Rdma)[key] = v147
- in.WantComma()
- }
- in.Delim('}')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo24(out *jwriter.Writer, in specs_go.LinuxResources) {
- out.RawByte('{')
- first := true
- _ = first
- if len(in.Devices) != 0 {
- const prefix string = ",\"devices\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v148, v149 := range in.Devices {
- if v148 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo31(out, v149)
- }
- out.RawByte(']')
- }
- }
- if in.Memory != nil {
- const prefix string = ",\"memory\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo32(out, *in.Memory)
- }
- if in.CPU != nil {
- const prefix string = ",\"cpu\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo33(out, *in.CPU)
- }
- if in.Pids != nil {
- const prefix string = ",\"pids\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo34(out, *in.Pids)
- }
- if in.BlockIO != nil {
- const prefix string = ",\"blockIO\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo35(out, *in.BlockIO)
- }
- if len(in.HugepageLimits) != 0 {
- const prefix string = ",\"hugepageLimits\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v150, v151 := range in.HugepageLimits {
- if v150 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo36(out, v151)
- }
- out.RawByte(']')
- }
- }
- if in.Network != nil {
- const prefix string = ",\"network\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo37(out, *in.Network)
- }
- if len(in.Rdma) != 0 {
- const prefix string = ",\"rdma\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('{')
- v152First := true
- for v152Name, v152Value := range in.Rdma {
- if v152First {
- v152First = false
- } else {
- out.RawByte(',')
- }
- out.String(string(v152Name))
- out.RawByte(':')
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo38(out, v152Value)
- }
- out.RawByte('}')
- }
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo38(in *jlexer.Lexer, out *specs_go.LinuxRdma) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "hcaHandles":
- if in.IsNull() {
- in.Skip()
- out.HcaHandles = nil
- } else {
- if out.HcaHandles == nil {
- out.HcaHandles = new(uint32)
- }
- *out.HcaHandles = uint32(in.Uint32())
- }
- case "hcaObjects":
- if in.IsNull() {
- in.Skip()
- out.HcaObjects = nil
- } else {
- if out.HcaObjects == nil {
- out.HcaObjects = new(uint32)
- }
- *out.HcaObjects = uint32(in.Uint32())
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo38(out *jwriter.Writer, in specs_go.LinuxRdma) {
- out.RawByte('{')
- first := true
- _ = first
- if in.HcaHandles != nil {
- const prefix string = ",\"hcaHandles\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint32(uint32(*in.HcaHandles))
- }
- if in.HcaObjects != nil {
- const prefix string = ",\"hcaObjects\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint32(uint32(*in.HcaObjects))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo37(in *jlexer.Lexer, out *specs_go.LinuxNetwork) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "classID":
- if in.IsNull() {
- in.Skip()
- out.ClassID = nil
- } else {
- if out.ClassID == nil {
- out.ClassID = new(uint32)
- }
- *out.ClassID = uint32(in.Uint32())
- }
- case "priorities":
- if in.IsNull() {
- in.Skip()
- out.Priorities = nil
- } else {
- in.Delim('[')
- if out.Priorities == nil {
- if !in.IsDelim(']') {
- out.Priorities = make([]specs_go.LinuxInterfacePriority, 0, 2)
- } else {
- out.Priorities = []specs_go.LinuxInterfacePriority{}
- }
- } else {
- out.Priorities = (out.Priorities)[:0]
- }
- for !in.IsDelim(']') {
- var v153 specs_go.LinuxInterfacePriority
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo39(in, &v153)
- out.Priorities = append(out.Priorities, v153)
- in.WantComma()
- }
- in.Delim(']')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo37(out *jwriter.Writer, in specs_go.LinuxNetwork) {
- out.RawByte('{')
- first := true
- _ = first
- if in.ClassID != nil {
- const prefix string = ",\"classID\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint32(uint32(*in.ClassID))
- }
- if len(in.Priorities) != 0 {
- const prefix string = ",\"priorities\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v154, v155 := range in.Priorities {
- if v154 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo39(out, v155)
- }
- out.RawByte(']')
- }
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo39(in *jlexer.Lexer, out *specs_go.LinuxInterfacePriority) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "name":
- out.Name = string(in.String())
- case "priority":
- out.Priority = uint32(in.Uint32())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo39(out *jwriter.Writer, in specs_go.LinuxInterfacePriority) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"name\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Name))
- }
- {
- const prefix string = ",\"priority\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint32(uint32(in.Priority))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo36(in *jlexer.Lexer, out *specs_go.LinuxHugepageLimit) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "pageSize":
- out.Pagesize = string(in.String())
- case "limit":
- out.Limit = uint64(in.Uint64())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo36(out *jwriter.Writer, in specs_go.LinuxHugepageLimit) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"pageSize\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Pagesize))
- }
- {
- const prefix string = ",\"limit\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(in.Limit))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo35(in *jlexer.Lexer, out *specs_go.LinuxBlockIO) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "weight":
- if in.IsNull() {
- in.Skip()
- out.Weight = nil
- } else {
- if out.Weight == nil {
- out.Weight = new(uint16)
- }
- *out.Weight = uint16(in.Uint16())
- }
- case "leafWeight":
- if in.IsNull() {
- in.Skip()
- out.LeafWeight = nil
- } else {
- if out.LeafWeight == nil {
- out.LeafWeight = new(uint16)
- }
- *out.LeafWeight = uint16(in.Uint16())
- }
- case "weightDevice":
- if in.IsNull() {
- in.Skip()
- out.WeightDevice = nil
- } else {
- in.Delim('[')
- if out.WeightDevice == nil {
- if !in.IsDelim(']') {
- out.WeightDevice = make([]specs_go.LinuxWeightDevice, 0, 2)
- } else {
- out.WeightDevice = []specs_go.LinuxWeightDevice{}
- }
- } else {
- out.WeightDevice = (out.WeightDevice)[:0]
- }
- for !in.IsDelim(']') {
- var v156 specs_go.LinuxWeightDevice
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo40(in, &v156)
- out.WeightDevice = append(out.WeightDevice, v156)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "throttleReadBpsDevice":
- if in.IsNull() {
- in.Skip()
- out.ThrottleReadBpsDevice = nil
- } else {
- in.Delim('[')
- if out.ThrottleReadBpsDevice == nil {
- if !in.IsDelim(']') {
- out.ThrottleReadBpsDevice = make([]specs_go.LinuxThrottleDevice, 0, 2)
- } else {
- out.ThrottleReadBpsDevice = []specs_go.LinuxThrottleDevice{}
- }
- } else {
- out.ThrottleReadBpsDevice = (out.ThrottleReadBpsDevice)[:0]
- }
- for !in.IsDelim(']') {
- var v157 specs_go.LinuxThrottleDevice
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo41(in, &v157)
- out.ThrottleReadBpsDevice = append(out.ThrottleReadBpsDevice, v157)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "throttleWriteBpsDevice":
- if in.IsNull() {
- in.Skip()
- out.ThrottleWriteBpsDevice = nil
- } else {
- in.Delim('[')
- if out.ThrottleWriteBpsDevice == nil {
- if !in.IsDelim(']') {
- out.ThrottleWriteBpsDevice = make([]specs_go.LinuxThrottleDevice, 0, 2)
- } else {
- out.ThrottleWriteBpsDevice = []specs_go.LinuxThrottleDevice{}
- }
- } else {
- out.ThrottleWriteBpsDevice = (out.ThrottleWriteBpsDevice)[:0]
- }
- for !in.IsDelim(']') {
- var v158 specs_go.LinuxThrottleDevice
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo41(in, &v158)
- out.ThrottleWriteBpsDevice = append(out.ThrottleWriteBpsDevice, v158)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "throttleReadIOPSDevice":
- if in.IsNull() {
- in.Skip()
- out.ThrottleReadIOPSDevice = nil
- } else {
- in.Delim('[')
- if out.ThrottleReadIOPSDevice == nil {
- if !in.IsDelim(']') {
- out.ThrottleReadIOPSDevice = make([]specs_go.LinuxThrottleDevice, 0, 2)
- } else {
- out.ThrottleReadIOPSDevice = []specs_go.LinuxThrottleDevice{}
- }
- } else {
- out.ThrottleReadIOPSDevice = (out.ThrottleReadIOPSDevice)[:0]
- }
- for !in.IsDelim(']') {
- var v159 specs_go.LinuxThrottleDevice
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo41(in, &v159)
- out.ThrottleReadIOPSDevice = append(out.ThrottleReadIOPSDevice, v159)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "throttleWriteIOPSDevice":
- if in.IsNull() {
- in.Skip()
- out.ThrottleWriteIOPSDevice = nil
- } else {
- in.Delim('[')
- if out.ThrottleWriteIOPSDevice == nil {
- if !in.IsDelim(']') {
- out.ThrottleWriteIOPSDevice = make([]specs_go.LinuxThrottleDevice, 0, 2)
- } else {
- out.ThrottleWriteIOPSDevice = []specs_go.LinuxThrottleDevice{}
- }
- } else {
- out.ThrottleWriteIOPSDevice = (out.ThrottleWriteIOPSDevice)[:0]
- }
- for !in.IsDelim(']') {
- var v160 specs_go.LinuxThrottleDevice
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo41(in, &v160)
- out.ThrottleWriteIOPSDevice = append(out.ThrottleWriteIOPSDevice, v160)
- in.WantComma()
- }
- in.Delim(']')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo35(out *jwriter.Writer, in specs_go.LinuxBlockIO) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Weight != nil {
- const prefix string = ",\"weight\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint16(uint16(*in.Weight))
- }
- if in.LeafWeight != nil {
- const prefix string = ",\"leafWeight\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint16(uint16(*in.LeafWeight))
- }
- if len(in.WeightDevice) != 0 {
- const prefix string = ",\"weightDevice\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v161, v162 := range in.WeightDevice {
- if v161 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo40(out, v162)
- }
- out.RawByte(']')
- }
- }
- if len(in.ThrottleReadBpsDevice) != 0 {
- const prefix string = ",\"throttleReadBpsDevice\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v163, v164 := range in.ThrottleReadBpsDevice {
- if v163 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo41(out, v164)
- }
- out.RawByte(']')
- }
- }
- if len(in.ThrottleWriteBpsDevice) != 0 {
- const prefix string = ",\"throttleWriteBpsDevice\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v165, v166 := range in.ThrottleWriteBpsDevice {
- if v165 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo41(out, v166)
- }
- out.RawByte(']')
- }
- }
- if len(in.ThrottleReadIOPSDevice) != 0 {
- const prefix string = ",\"throttleReadIOPSDevice\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v167, v168 := range in.ThrottleReadIOPSDevice {
- if v167 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo41(out, v168)
- }
- out.RawByte(']')
- }
- }
- if len(in.ThrottleWriteIOPSDevice) != 0 {
- const prefix string = ",\"throttleWriteIOPSDevice\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v169, v170 := range in.ThrottleWriteIOPSDevice {
- if v169 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo41(out, v170)
- }
- out.RawByte(']')
- }
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo41(in *jlexer.Lexer, out *specs_go.LinuxThrottleDevice) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "rate":
- out.Rate = uint64(in.Uint64())
- case "major":
- out.Major = int64(in.Int64())
- case "minor":
- out.Minor = int64(in.Int64())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo41(out *jwriter.Writer, in specs_go.LinuxThrottleDevice) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"rate\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(in.Rate))
- }
- {
- const prefix string = ",\"major\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(in.Major))
- }
- {
- const prefix string = ",\"minor\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(in.Minor))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo40(in *jlexer.Lexer, out *specs_go.LinuxWeightDevice) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "weight":
- if in.IsNull() {
- in.Skip()
- out.Weight = nil
- } else {
- if out.Weight == nil {
- out.Weight = new(uint16)
- }
- *out.Weight = uint16(in.Uint16())
- }
- case "leafWeight":
- if in.IsNull() {
- in.Skip()
- out.LeafWeight = nil
- } else {
- if out.LeafWeight == nil {
- out.LeafWeight = new(uint16)
- }
- *out.LeafWeight = uint16(in.Uint16())
- }
- case "major":
- out.Major = int64(in.Int64())
- case "minor":
- out.Minor = int64(in.Int64())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo40(out *jwriter.Writer, in specs_go.LinuxWeightDevice) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Weight != nil {
- const prefix string = ",\"weight\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint16(uint16(*in.Weight))
- }
- if in.LeafWeight != nil {
- const prefix string = ",\"leafWeight\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint16(uint16(*in.LeafWeight))
- }
- {
- const prefix string = ",\"major\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(in.Major))
- }
- {
- const prefix string = ",\"minor\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(in.Minor))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo34(in *jlexer.Lexer, out *specs_go.LinuxPids) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "limit":
- out.Limit = int64(in.Int64())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo34(out *jwriter.Writer, in specs_go.LinuxPids) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"limit\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(in.Limit))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo33(in *jlexer.Lexer, out *specs_go.LinuxCPU) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "shares":
- if in.IsNull() {
- in.Skip()
- out.Shares = nil
- } else {
- if out.Shares == nil {
- out.Shares = new(uint64)
- }
- *out.Shares = uint64(in.Uint64())
- }
- case "quota":
- if in.IsNull() {
- in.Skip()
- out.Quota = nil
- } else {
- if out.Quota == nil {
- out.Quota = new(int64)
- }
- *out.Quota = int64(in.Int64())
- }
- case "period":
- if in.IsNull() {
- in.Skip()
- out.Period = nil
- } else {
- if out.Period == nil {
- out.Period = new(uint64)
- }
- *out.Period = uint64(in.Uint64())
- }
- case "realtimeRuntime":
- if in.IsNull() {
- in.Skip()
- out.RealtimeRuntime = nil
- } else {
- if out.RealtimeRuntime == nil {
- out.RealtimeRuntime = new(int64)
- }
- *out.RealtimeRuntime = int64(in.Int64())
- }
- case "realtimePeriod":
- if in.IsNull() {
- in.Skip()
- out.RealtimePeriod = nil
- } else {
- if out.RealtimePeriod == nil {
- out.RealtimePeriod = new(uint64)
- }
- *out.RealtimePeriod = uint64(in.Uint64())
- }
- case "cpus":
- out.Cpus = string(in.String())
- case "mems":
- out.Mems = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo33(out *jwriter.Writer, in specs_go.LinuxCPU) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Shares != nil {
- const prefix string = ",\"shares\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(*in.Shares))
- }
- if in.Quota != nil {
- const prefix string = ",\"quota\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(*in.Quota))
- }
- if in.Period != nil {
- const prefix string = ",\"period\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(*in.Period))
- }
- if in.RealtimeRuntime != nil {
- const prefix string = ",\"realtimeRuntime\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(*in.RealtimeRuntime))
- }
- if in.RealtimePeriod != nil {
- const prefix string = ",\"realtimePeriod\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(*in.RealtimePeriod))
- }
- if in.Cpus != "" {
- const prefix string = ",\"cpus\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Cpus))
- }
- if in.Mems != "" {
- const prefix string = ",\"mems\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Mems))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo32(in *jlexer.Lexer, out *specs_go.LinuxMemory) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "limit":
- if in.IsNull() {
- in.Skip()
- out.Limit = nil
- } else {
- if out.Limit == nil {
- out.Limit = new(int64)
- }
- *out.Limit = int64(in.Int64())
- }
- case "reservation":
- if in.IsNull() {
- in.Skip()
- out.Reservation = nil
- } else {
- if out.Reservation == nil {
- out.Reservation = new(int64)
- }
- *out.Reservation = int64(in.Int64())
- }
- case "swap":
- if in.IsNull() {
- in.Skip()
- out.Swap = nil
- } else {
- if out.Swap == nil {
- out.Swap = new(int64)
- }
- *out.Swap = int64(in.Int64())
- }
- case "kernel":
- if in.IsNull() {
- in.Skip()
- out.Kernel = nil
- } else {
- if out.Kernel == nil {
- out.Kernel = new(int64)
- }
- *out.Kernel = int64(in.Int64())
- }
- case "kernelTCP":
- if in.IsNull() {
- in.Skip()
- out.KernelTCP = nil
- } else {
- if out.KernelTCP == nil {
- out.KernelTCP = new(int64)
- }
- *out.KernelTCP = int64(in.Int64())
- }
- case "swappiness":
- if in.IsNull() {
- in.Skip()
- out.Swappiness = nil
- } else {
- if out.Swappiness == nil {
- out.Swappiness = new(uint64)
- }
- *out.Swappiness = uint64(in.Uint64())
- }
- case "disableOOMKiller":
- if in.IsNull() {
- in.Skip()
- out.DisableOOMKiller = nil
- } else {
- if out.DisableOOMKiller == nil {
- out.DisableOOMKiller = new(bool)
- }
- *out.DisableOOMKiller = bool(in.Bool())
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo32(out *jwriter.Writer, in specs_go.LinuxMemory) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Limit != nil {
- const prefix string = ",\"limit\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(*in.Limit))
- }
- if in.Reservation != nil {
- const prefix string = ",\"reservation\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(*in.Reservation))
- }
- if in.Swap != nil {
- const prefix string = ",\"swap\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(*in.Swap))
- }
- if in.Kernel != nil {
- const prefix string = ",\"kernel\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(*in.Kernel))
- }
- if in.KernelTCP != nil {
- const prefix string = ",\"kernelTCP\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(*in.KernelTCP))
- }
- if in.Swappiness != nil {
- const prefix string = ",\"swappiness\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(*in.Swappiness))
- }
- if in.DisableOOMKiller != nil {
- const prefix string = ",\"disableOOMKiller\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(*in.DisableOOMKiller))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo31(in *jlexer.Lexer, out *specs_go.LinuxDeviceCgroup) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "allow":
- out.Allow = bool(in.Bool())
- case "type":
- out.Type = string(in.String())
- case "major":
- if in.IsNull() {
- in.Skip()
- out.Major = nil
- } else {
- if out.Major == nil {
- out.Major = new(int64)
- }
- *out.Major = int64(in.Int64())
- }
- case "minor":
- if in.IsNull() {
- in.Skip()
- out.Minor = nil
- } else {
- if out.Minor == nil {
- out.Minor = new(int64)
- }
- *out.Minor = int64(in.Int64())
- }
- case "access":
- out.Access = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo31(out *jwriter.Writer, in specs_go.LinuxDeviceCgroup) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"allow\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.Allow))
- }
- if in.Type != "" {
- const prefix string = ",\"type\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Type))
- }
- if in.Major != nil {
- const prefix string = ",\"major\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(*in.Major))
- }
- if in.Minor != nil {
- const prefix string = ",\"minor\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int64(int64(*in.Minor))
- }
- if in.Access != "" {
- const prefix string = ",\"access\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Access))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo23(in *jlexer.Lexer, out *specs_go.LinuxIDMapping) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "containerID":
- out.ContainerID = uint32(in.Uint32())
- case "hostID":
- out.HostID = uint32(in.Uint32())
- case "size":
- out.Size = uint32(in.Uint32())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo23(out *jwriter.Writer, in specs_go.LinuxIDMapping) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"containerID\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint32(uint32(in.ContainerID))
- }
- {
- const prefix string = ",\"hostID\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint32(uint32(in.HostID))
- }
- {
- const prefix string = ",\"size\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint32(uint32(in.Size))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo5(in *jlexer.Lexer, out *specs_go.Hooks) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "prestart":
- if in.IsNull() {
- in.Skip()
- out.Prestart = nil
- } else {
- in.Delim('[')
- if out.Prestart == nil {
- if !in.IsDelim(']') {
- out.Prestart = make([]specs_go.Hook, 0, 1)
- } else {
- out.Prestart = []specs_go.Hook{}
- }
- } else {
- out.Prestart = (out.Prestart)[:0]
- }
- for !in.IsDelim(']') {
- var v171 specs_go.Hook
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo(in, &v171)
- out.Prestart = append(out.Prestart, v171)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "poststart":
- if in.IsNull() {
- in.Skip()
- out.Poststart = nil
- } else {
- in.Delim('[')
- if out.Poststart == nil {
- if !in.IsDelim(']') {
- out.Poststart = make([]specs_go.Hook, 0, 1)
- } else {
- out.Poststart = []specs_go.Hook{}
- }
- } else {
- out.Poststart = (out.Poststart)[:0]
- }
- for !in.IsDelim(']') {
- var v172 specs_go.Hook
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo(in, &v172)
- out.Poststart = append(out.Poststart, v172)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "poststop":
- if in.IsNull() {
- in.Skip()
- out.Poststop = nil
- } else {
- in.Delim('[')
- if out.Poststop == nil {
- if !in.IsDelim(']') {
- out.Poststop = make([]specs_go.Hook, 0, 1)
- } else {
- out.Poststop = []specs_go.Hook{}
- }
- } else {
- out.Poststop = (out.Poststop)[:0]
- }
- for !in.IsDelim(']') {
- var v173 specs_go.Hook
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo(in, &v173)
- out.Poststop = append(out.Poststop, v173)
- in.WantComma()
- }
- in.Delim(']')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo5(out *jwriter.Writer, in specs_go.Hooks) {
- out.RawByte('{')
- first := true
- _ = first
- if len(in.Prestart) != 0 {
- const prefix string = ",\"prestart\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v174, v175 := range in.Prestart {
- if v174 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo(out, v175)
- }
- out.RawByte(']')
- }
- }
- if len(in.Poststart) != 0 {
- const prefix string = ",\"poststart\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v176, v177 := range in.Poststart {
- if v176 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo(out, v177)
- }
- out.RawByte(']')
- }
- }
- if len(in.Poststop) != 0 {
- const prefix string = ",\"poststop\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v178, v179 := range in.Poststop {
- if v178 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo(out, v179)
- }
- out.RawByte(']')
- }
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo4(in *jlexer.Lexer, out *specs_go.Mount) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "destination":
- out.Destination = string(in.String())
- case "type":
- out.Type = string(in.String())
- case "source":
- out.Source = string(in.String())
- case "options":
- if in.IsNull() {
- in.Skip()
- out.Options = nil
- } else {
- in.Delim('[')
- if out.Options == nil {
- if !in.IsDelim(']') {
- out.Options = make([]string, 0, 4)
- } else {
- out.Options = []string{}
- }
- } else {
- out.Options = (out.Options)[:0]
- }
- for !in.IsDelim(']') {
- var v180 string
- v180 = string(in.String())
- out.Options = append(out.Options, v180)
- in.WantComma()
- }
- in.Delim(']')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo4(out *jwriter.Writer, in specs_go.Mount) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"destination\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Destination))
- }
- if in.Type != "" {
- const prefix string = ",\"type\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Type))
- }
- if in.Source != "" {
- const prefix string = ",\"source\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Source))
- }
- if len(in.Options) != 0 {
- const prefix string = ",\"options\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v181, v182 := range in.Options {
- if v181 > 0 {
- out.RawByte(',')
- }
- out.String(string(v182))
- }
- out.RawByte(']')
- }
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo3(in *jlexer.Lexer, out *specs_go.Root) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "path":
- out.Path = string(in.String())
- case "readonly":
- out.Readonly = bool(in.Bool())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo3(out *jwriter.Writer, in specs_go.Root) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"path\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Path))
- }
- if in.Readonly {
- const prefix string = ",\"readonly\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.Readonly))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo2(in *jlexer.Lexer, out *specs_go.Process) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "terminal":
- out.Terminal = bool(in.Bool())
- case "consoleSize":
- if in.IsNull() {
- in.Skip()
- out.ConsoleSize = nil
- } else {
- if out.ConsoleSize == nil {
- out.ConsoleSize = new(specs_go.Box)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo42(in, &*out.ConsoleSize)
- }
- case "user":
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo43(in, &out.User)
- case "args":
- if in.IsNull() {
- in.Skip()
- out.Args = nil
- } else {
- in.Delim('[')
- if out.Args == nil {
- if !in.IsDelim(']') {
- out.Args = make([]string, 0, 4)
- } else {
- out.Args = []string{}
- }
- } else {
- out.Args = (out.Args)[:0]
- }
- for !in.IsDelim(']') {
- var v183 string
- v183 = string(in.String())
- out.Args = append(out.Args, v183)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "env":
- if in.IsNull() {
- in.Skip()
- out.Env = nil
- } else {
- in.Delim('[')
- if out.Env == nil {
- if !in.IsDelim(']') {
- out.Env = make([]string, 0, 4)
- } else {
- out.Env = []string{}
- }
- } else {
- out.Env = (out.Env)[:0]
- }
- for !in.IsDelim(']') {
- var v184 string
- v184 = string(in.String())
- out.Env = append(out.Env, v184)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "cwd":
- out.Cwd = string(in.String())
- case "capabilities":
- if in.IsNull() {
- in.Skip()
- out.Capabilities = nil
- } else {
- if out.Capabilities == nil {
- out.Capabilities = new(specs_go.LinuxCapabilities)
- }
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo44(in, &*out.Capabilities)
- }
- case "rlimits":
- if in.IsNull() {
- in.Skip()
- out.Rlimits = nil
- } else {
- in.Delim('[')
- if out.Rlimits == nil {
- if !in.IsDelim(']') {
- out.Rlimits = make([]specs_go.POSIXRlimit, 0, 2)
- } else {
- out.Rlimits = []specs_go.POSIXRlimit{}
- }
- } else {
- out.Rlimits = (out.Rlimits)[:0]
- }
- for !in.IsDelim(']') {
- var v185 specs_go.POSIXRlimit
- easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo45(in, &v185)
- out.Rlimits = append(out.Rlimits, v185)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "noNewPrivileges":
- out.NoNewPrivileges = bool(in.Bool())
- case "apparmorProfile":
- out.ApparmorProfile = string(in.String())
- case "oomScoreAdj":
- if in.IsNull() {
- in.Skip()
- out.OOMScoreAdj = nil
- } else {
- if out.OOMScoreAdj == nil {
- out.OOMScoreAdj = new(int)
- }
- *out.OOMScoreAdj = int(in.Int())
- }
- case "selinuxLabel":
- out.SelinuxLabel = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo2(out *jwriter.Writer, in specs_go.Process) {
- out.RawByte('{')
- first := true
- _ = first
- if in.Terminal {
- const prefix string = ",\"terminal\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.Terminal))
- }
- if in.ConsoleSize != nil {
- const prefix string = ",\"consoleSize\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo42(out, *in.ConsoleSize)
- }
- {
- const prefix string = ",\"user\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo43(out, in.User)
- }
- {
- const prefix string = ",\"args\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.Args == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
- out.RawString("null")
- } else {
- out.RawByte('[')
- for v186, v187 := range in.Args {
- if v186 > 0 {
- out.RawByte(',')
- }
- out.String(string(v187))
- }
- out.RawByte(']')
- }
- }
- if len(in.Env) != 0 {
- const prefix string = ",\"env\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v188, v189 := range in.Env {
- if v188 > 0 {
- out.RawByte(',')
- }
- out.String(string(v189))
- }
- out.RawByte(']')
- }
- }
- {
- const prefix string = ",\"cwd\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Cwd))
- }
- if in.Capabilities != nil {
- const prefix string = ",\"capabilities\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo44(out, *in.Capabilities)
- }
- if len(in.Rlimits) != 0 {
- const prefix string = ",\"rlimits\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v190, v191 := range in.Rlimits {
- if v190 > 0 {
- out.RawByte(',')
- }
- easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo45(out, v191)
- }
- out.RawByte(']')
- }
- }
- if in.NoNewPrivileges {
- const prefix string = ",\"noNewPrivileges\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.NoNewPrivileges))
- }
- if in.ApparmorProfile != "" {
- const prefix string = ",\"apparmorProfile\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.ApparmorProfile))
- }
- if in.OOMScoreAdj != nil {
- const prefix string = ",\"oomScoreAdj\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int(int(*in.OOMScoreAdj))
- }
- if in.SelinuxLabel != "" {
- const prefix string = ",\"selinuxLabel\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.SelinuxLabel))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo45(in *jlexer.Lexer, out *specs_go.POSIXRlimit) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "type":
- out.Type = string(in.String())
- case "hard":
- out.Hard = uint64(in.Uint64())
- case "soft":
- out.Soft = uint64(in.Uint64())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo45(out *jwriter.Writer, in specs_go.POSIXRlimit) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"type\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Type))
- }
- {
- const prefix string = ",\"hard\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(in.Hard))
- }
- {
- const prefix string = ",\"soft\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint64(uint64(in.Soft))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo44(in *jlexer.Lexer, out *specs_go.LinuxCapabilities) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "bounding":
- if in.IsNull() {
- in.Skip()
- out.Bounding = nil
- } else {
- in.Delim('[')
- if out.Bounding == nil {
- if !in.IsDelim(']') {
- out.Bounding = make([]string, 0, 4)
- } else {
- out.Bounding = []string{}
- }
- } else {
- out.Bounding = (out.Bounding)[:0]
- }
- for !in.IsDelim(']') {
- var v192 string
- v192 = string(in.String())
- out.Bounding = append(out.Bounding, v192)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "effective":
- if in.IsNull() {
- in.Skip()
- out.Effective = nil
- } else {
- in.Delim('[')
- if out.Effective == nil {
- if !in.IsDelim(']') {
- out.Effective = make([]string, 0, 4)
- } else {
- out.Effective = []string{}
- }
- } else {
- out.Effective = (out.Effective)[:0]
- }
- for !in.IsDelim(']') {
- var v193 string
- v193 = string(in.String())
- out.Effective = append(out.Effective, v193)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "inheritable":
- if in.IsNull() {
- in.Skip()
- out.Inheritable = nil
- } else {
- in.Delim('[')
- if out.Inheritable == nil {
- if !in.IsDelim(']') {
- out.Inheritable = make([]string, 0, 4)
- } else {
- out.Inheritable = []string{}
- }
- } else {
- out.Inheritable = (out.Inheritable)[:0]
- }
- for !in.IsDelim(']') {
- var v194 string
- v194 = string(in.String())
- out.Inheritable = append(out.Inheritable, v194)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "permitted":
- if in.IsNull() {
- in.Skip()
- out.Permitted = nil
- } else {
- in.Delim('[')
- if out.Permitted == nil {
- if !in.IsDelim(']') {
- out.Permitted = make([]string, 0, 4)
- } else {
- out.Permitted = []string{}
- }
- } else {
- out.Permitted = (out.Permitted)[:0]
- }
- for !in.IsDelim(']') {
- var v195 string
- v195 = string(in.String())
- out.Permitted = append(out.Permitted, v195)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "ambient":
- if in.IsNull() {
- in.Skip()
- out.Ambient = nil
- } else {
- in.Delim('[')
- if out.Ambient == nil {
- if !in.IsDelim(']') {
- out.Ambient = make([]string, 0, 4)
- } else {
- out.Ambient = []string{}
- }
- } else {
- out.Ambient = (out.Ambient)[:0]
- }
- for !in.IsDelim(']') {
- var v196 string
- v196 = string(in.String())
- out.Ambient = append(out.Ambient, v196)
- in.WantComma()
- }
- in.Delim(']')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo44(out *jwriter.Writer, in specs_go.LinuxCapabilities) {
- out.RawByte('{')
- first := true
- _ = first
- if len(in.Bounding) != 0 {
- const prefix string = ",\"bounding\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v197, v198 := range in.Bounding {
- if v197 > 0 {
- out.RawByte(',')
- }
- out.String(string(v198))
- }
- out.RawByte(']')
- }
- }
- if len(in.Effective) != 0 {
- const prefix string = ",\"effective\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v199, v200 := range in.Effective {
- if v199 > 0 {
- out.RawByte(',')
- }
- out.String(string(v200))
- }
- out.RawByte(']')
- }
- }
- if len(in.Inheritable) != 0 {
- const prefix string = ",\"inheritable\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v201, v202 := range in.Inheritable {
- if v201 > 0 {
- out.RawByte(',')
- }
- out.String(string(v202))
- }
- out.RawByte(']')
- }
- }
- if len(in.Permitted) != 0 {
- const prefix string = ",\"permitted\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v203, v204 := range in.Permitted {
- if v203 > 0 {
- out.RawByte(',')
- }
- out.String(string(v204))
- }
- out.RawByte(']')
- }
- }
- if len(in.Ambient) != 0 {
- const prefix string = ",\"ambient\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v205, v206 := range in.Ambient {
- if v205 > 0 {
- out.RawByte(',')
- }
- out.String(string(v206))
- }
- out.RawByte(']')
- }
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo43(in *jlexer.Lexer, out *specs_go.User) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "uid":
- out.UID = uint32(in.Uint32())
- case "gid":
- out.GID = uint32(in.Uint32())
- case "additionalGids":
- if in.IsNull() {
- in.Skip()
- out.AdditionalGids = nil
- } else {
- in.Delim('[')
- if out.AdditionalGids == nil {
- if !in.IsDelim(']') {
- out.AdditionalGids = make([]uint32, 0, 16)
- } else {
- out.AdditionalGids = []uint32{}
- }
- } else {
- out.AdditionalGids = (out.AdditionalGids)[:0]
- }
- for !in.IsDelim(']') {
- var v207 uint32
- v207 = uint32(in.Uint32())
- out.AdditionalGids = append(out.AdditionalGids, v207)
- in.WantComma()
- }
- in.Delim(']')
- }
- case "username":
- out.Username = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo43(out *jwriter.Writer, in specs_go.User) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"uid\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint32(uint32(in.UID))
- }
- {
- const prefix string = ",\"gid\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint32(uint32(in.GID))
- }
- if len(in.AdditionalGids) != 0 {
- const prefix string = ",\"additionalGids\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- {
- out.RawByte('[')
- for v208, v209 := range in.AdditionalGids {
- if v208 > 0 {
- out.RawByte(',')
- }
- out.Uint32(uint32(v209))
- }
- out.RawByte(']')
- }
- }
- if in.Username != "" {
- const prefix string = ",\"username\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Username))
- }
- out.RawByte('}')
-}
-func easyjson1dbef17bDecodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo42(in *jlexer.Lexer, out *specs_go.Box) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "height":
- out.Height = uint(in.Uint())
- case "width":
- out.Width = uint(in.Uint())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjson1dbef17bEncodeGithubComContainersLibpodVendorGithubComOpencontainersRuntimeSpecSpecsGo42(out *jwriter.Writer, in specs_go.Box) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"height\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint(uint(in.Height))
- }
- {
- const prefix string = ",\"width\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Uint(uint(in.Width))
- }
- out.RawByte('}')
-}
diff --git a/libpod/container_graph_test.go b/libpod/container_graph_test.go
index 25461f1f4..d1a52658d 100644
--- a/libpod/container_graph_test.go
+++ b/libpod/container_graph_test.go
@@ -1,10 +1,9 @@
package libpod
import (
- "io/ioutil"
- "os"
"testing"
+ "github.com/containers/libpod/libpod/lock"
"github.com/stretchr/testify/assert"
)
@@ -17,11 +16,12 @@ func TestBuildContainerGraphNoCtrsIsEmpty(t *testing.T) {
}
func TestBuildContainerGraphOneCtr(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
- assert.NoError(t, err)
- defer os.RemoveAll(tmpDir)
+ manager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ t.Fatalf("Error setting up locks: %v", err)
+ }
- ctr1, err := getTestCtr1(tmpDir)
+ ctr1, err := getTestCtr1(manager)
assert.NoError(t, err)
graph, err := buildContainerGraph([]*Container{ctr1})
@@ -39,13 +39,14 @@ func TestBuildContainerGraphOneCtr(t *testing.T) {
}
func TestBuildContainerGraphTwoCtrNoEdge(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
- assert.NoError(t, err)
- defer os.RemoveAll(tmpDir)
+ manager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ t.Fatalf("Error setting up locks: %v", err)
+ }
- ctr1, err := getTestCtr1(tmpDir)
+ ctr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- ctr2, err := getTestCtr2(tmpDir)
+ ctr2, err := getTestCtr2(manager)
assert.NoError(t, err)
graph, err := buildContainerGraph([]*Container{ctr1, ctr2})
@@ -64,13 +65,14 @@ func TestBuildContainerGraphTwoCtrNoEdge(t *testing.T) {
}
func TestBuildContainerGraphTwoCtrOneEdge(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
- assert.NoError(t, err)
- defer os.RemoveAll(tmpDir)
+ manager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ t.Fatalf("Error setting up locks: %v", err)
+ }
- ctr1, err := getTestCtr1(tmpDir)
+ ctr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- ctr2, err := getTestCtr2(tmpDir)
+ ctr2, err := getTestCtr2(manager)
assert.NoError(t, err)
ctr2.config.UserNsCtr = ctr1.config.ID
@@ -85,13 +87,14 @@ func TestBuildContainerGraphTwoCtrOneEdge(t *testing.T) {
}
func TestBuildContainerGraphTwoCtrCycle(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
- assert.NoError(t, err)
- defer os.RemoveAll(tmpDir)
+ manager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ t.Fatalf("Error setting up locks: %v", err)
+ }
- ctr1, err := getTestCtr1(tmpDir)
+ ctr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- ctr2, err := getTestCtr2(tmpDir)
+ ctr2, err := getTestCtr2(manager)
assert.NoError(t, err)
ctr2.config.UserNsCtr = ctr1.config.ID
ctr1.config.NetNsCtr = ctr2.config.ID
@@ -101,15 +104,16 @@ func TestBuildContainerGraphTwoCtrCycle(t *testing.T) {
}
func TestBuildContainerGraphThreeCtrNoEdges(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
- assert.NoError(t, err)
- defer os.RemoveAll(tmpDir)
+ manager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ t.Fatalf("Error setting up locks: %v", err)
+ }
- ctr1, err := getTestCtr1(tmpDir)
+ ctr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- ctr2, err := getTestCtr2(tmpDir)
+ ctr2, err := getTestCtr2(manager)
assert.NoError(t, err)
- ctr3, err := getTestCtrN("3", tmpDir)
+ ctr3, err := getTestCtrN("3", manager)
assert.NoError(t, err)
graph, err := buildContainerGraph([]*Container{ctr1, ctr2, ctr3})
@@ -132,15 +136,16 @@ func TestBuildContainerGraphThreeCtrNoEdges(t *testing.T) {
}
func TestBuildContainerGraphThreeContainersTwoInCycle(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
- assert.NoError(t, err)
- defer os.RemoveAll(tmpDir)
+ manager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ t.Fatalf("Error setting up locks: %v", err)
+ }
- ctr1, err := getTestCtr1(tmpDir)
+ ctr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- ctr2, err := getTestCtr2(tmpDir)
+ ctr2, err := getTestCtr2(manager)
assert.NoError(t, err)
- ctr3, err := getTestCtrN("3", tmpDir)
+ ctr3, err := getTestCtrN("3", manager)
assert.NoError(t, err)
ctr1.config.UserNsCtr = ctr2.config.ID
ctr2.config.IPCNsCtr = ctr1.config.ID
@@ -150,15 +155,16 @@ func TestBuildContainerGraphThreeContainersTwoInCycle(t *testing.T) {
}
func TestBuildContainerGraphThreeContainersCycle(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
- assert.NoError(t, err)
- defer os.RemoveAll(tmpDir)
+ manager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ t.Fatalf("Error setting up locks: %v", err)
+ }
- ctr1, err := getTestCtr1(tmpDir)
+ ctr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- ctr2, err := getTestCtr2(tmpDir)
+ ctr2, err := getTestCtr2(manager)
assert.NoError(t, err)
- ctr3, err := getTestCtrN("3", tmpDir)
+ ctr3, err := getTestCtrN("3", manager)
assert.NoError(t, err)
ctr1.config.UserNsCtr = ctr2.config.ID
ctr2.config.IPCNsCtr = ctr3.config.ID
@@ -169,15 +175,16 @@ func TestBuildContainerGraphThreeContainersCycle(t *testing.T) {
}
func TestBuildContainerGraphThreeContainersNoCycle(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
- assert.NoError(t, err)
- defer os.RemoveAll(tmpDir)
+ manager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ t.Fatalf("Error setting up locks: %v", err)
+ }
- ctr1, err := getTestCtr1(tmpDir)
+ ctr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- ctr2, err := getTestCtr2(tmpDir)
+ ctr2, err := getTestCtr2(manager)
assert.NoError(t, err)
- ctr3, err := getTestCtrN("3", tmpDir)
+ ctr3, err := getTestCtrN("3", manager)
assert.NoError(t, err)
ctr1.config.UserNsCtr = ctr2.config.ID
ctr1.config.NetNsCtr = ctr3.config.ID
@@ -194,17 +201,18 @@ func TestBuildContainerGraphThreeContainersNoCycle(t *testing.T) {
}
func TestBuildContainerGraphFourContainersNoEdges(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
- assert.NoError(t, err)
- defer os.RemoveAll(tmpDir)
+ manager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ t.Fatalf("Error setting up locks: %v", err)
+ }
- ctr1, err := getTestCtr1(tmpDir)
+ ctr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- ctr2, err := getTestCtr2(tmpDir)
+ ctr2, err := getTestCtr2(manager)
assert.NoError(t, err)
- ctr3, err := getTestCtrN("3", tmpDir)
+ ctr3, err := getTestCtrN("3", manager)
assert.NoError(t, err)
- ctr4, err := getTestCtrN("4", tmpDir)
+ ctr4, err := getTestCtrN("4", manager)
assert.NoError(t, err)
graph, err := buildContainerGraph([]*Container{ctr1, ctr2, ctr3, ctr4})
@@ -231,18 +239,20 @@ func TestBuildContainerGraphFourContainersNoEdges(t *testing.T) {
}
func TestBuildContainerGraphFourContainersTwoInCycle(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
- assert.NoError(t, err)
- defer os.RemoveAll(tmpDir)
+ manager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ t.Fatalf("Error setting up locks: %v", err)
+ }
- ctr1, err := getTestCtr1(tmpDir)
+ ctr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- ctr2, err := getTestCtr2(tmpDir)
+ ctr2, err := getTestCtr2(manager)
assert.NoError(t, err)
- ctr3, err := getTestCtrN("3", tmpDir)
+ ctr3, err := getTestCtrN("3", manager)
assert.NoError(t, err)
- ctr4, err := getTestCtrN("4", tmpDir)
+ ctr4, err := getTestCtrN("4", manager)
assert.NoError(t, err)
+
ctr1.config.IPCNsCtr = ctr2.config.ID
ctr2.config.UserNsCtr = ctr1.config.ID
@@ -251,18 +261,20 @@ func TestBuildContainerGraphFourContainersTwoInCycle(t *testing.T) {
}
func TestBuildContainerGraphFourContainersAllInCycle(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
- assert.NoError(t, err)
- defer os.RemoveAll(tmpDir)
+ manager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ t.Fatalf("Error setting up locks: %v", err)
+ }
- ctr1, err := getTestCtr1(tmpDir)
+ ctr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- ctr2, err := getTestCtr2(tmpDir)
+ ctr2, err := getTestCtr2(manager)
assert.NoError(t, err)
- ctr3, err := getTestCtrN("3", tmpDir)
+ ctr3, err := getTestCtrN("3", manager)
assert.NoError(t, err)
- ctr4, err := getTestCtrN("4", tmpDir)
+ ctr4, err := getTestCtrN("4", manager)
assert.NoError(t, err)
+
ctr1.config.IPCNsCtr = ctr2.config.ID
ctr2.config.UserNsCtr = ctr3.config.ID
ctr3.config.NetNsCtr = ctr4.config.ID
@@ -273,18 +285,20 @@ func TestBuildContainerGraphFourContainersAllInCycle(t *testing.T) {
}
func TestBuildContainerGraphFourContainersNoneInCycle(t *testing.T) {
- tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
- assert.NoError(t, err)
- defer os.RemoveAll(tmpDir)
+ manager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ t.Fatalf("Error setting up locks: %v", err)
+ }
- ctr1, err := getTestCtr1(tmpDir)
+ ctr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- ctr2, err := getTestCtr2(tmpDir)
+ ctr2, err := getTestCtr2(manager)
assert.NoError(t, err)
- ctr3, err := getTestCtrN("3", tmpDir)
+ ctr3, err := getTestCtrN("3", manager)
assert.NoError(t, err)
- ctr4, err := getTestCtrN("4", tmpDir)
+ ctr4, err := getTestCtrN("4", manager)
assert.NoError(t, err)
+
ctr1.config.IPCNsCtr = ctr2.config.ID
ctr1.config.NetNsCtr = ctr3.config.ID
ctr2.config.UserNsCtr = ctr3.config.ID
diff --git a/libpod/container_inspect.go b/libpod/container_inspect.go
index 06a0c9f32..e2730c282 100644
--- a/libpod/container_inspect.go
+++ b/libpod/container_inspect.go
@@ -12,7 +12,10 @@ import (
func (c *Container) getContainerInspectData(size bool, driverData *inspect.Data) (*inspect.ContainerInspectData, error) {
config := c.config
runtimeInfo := c.state
- spec := c.config.Spec
+ spec, err := c.specFromState()
+ if err != nil {
+ return nil, err
+ }
// Process is allowed to be nil in the spec
args := []string{}
diff --git a/libpod/container_internal.go b/libpod/container_internal.go
index 928be52ae..39c1501da 100644
--- a/libpod/container_internal.go
+++ b/libpod/container_internal.go
@@ -3,7 +3,6 @@ package libpod
import (
"bytes"
"context"
- "encoding/json"
"fmt"
"io"
"io/ioutil"
@@ -389,7 +388,7 @@ func (c *Container) teardownStorage() error {
// Reset resets state fields to default values
// It is performed before a refresh and clears the state after a reboot
// It does not save the results - assumes the database will do that for us
-func resetState(state *containerState) error {
+func resetState(state *ContainerState) error {
state.PID = 0
state.Mountpoint = ""
state.Mounted = false
@@ -401,7 +400,10 @@ func resetState(state *containerState) error {
return nil
}
-// Refresh refreshes the container's state after a restart
+// Refresh refreshes the container's state after a restart.
+// Refresh cannot perform any operations that would lock another container.
+// We cannot guarantee any other container has a valid lock at the time it is
+// running.
func (c *Container) refresh() error {
// Don't need a full sync, but we do need to update from the database to
// pick up potentially-missing container state
@@ -447,6 +449,13 @@ func (c *Container) refresh() error {
c.state.DestinationRunDir = filepath.Join(c.state.UserNSRoot, "rundir")
}
+ // We need to pick up a new lock
+ lock, err := c.runtime.lockManager.RetrieveLock(c.config.LockID)
+ if err != nil {
+ return errors.Wrapf(err, "error acquiring lock for container %s", c.ID())
+ }
+ c.lock = lock
+
if err := c.save(); err != nil {
return errors.Wrapf(err, "error refreshing state for container %s", c.ID())
}
@@ -531,7 +540,7 @@ func (c *Container) isStopped() (bool, error) {
if err != nil {
return true, err
}
- return (c.state.State == ContainerStateStopped || c.state.State == ContainerStateExited), nil
+ return (c.state.State != ContainerStateRunning && c.state.State != ContainerStatePaused), nil
}
// save container state to the database
@@ -748,6 +757,10 @@ func (c *Container) initAndStart(ctx context.Context) (err error) {
// Internal, non-locking function to start a container
func (c *Container) start() error {
+ if c.config.Spec.Process != nil {
+ logrus.Debugf("Starting container %s with command %v", c.ID(), c.config.Spec.Process.Args)
+ }
+
if err := c.runtime.ociRuntime.startContainer(c); err != nil {
return err
}
@@ -1167,6 +1180,7 @@ func (c *Container) saveSpec(spec *spec.Spec) error {
return nil
}
+// Warning: precreate hooks may alter 'config' in place.
func (c *Container) setupOCIHooks(ctx context.Context, config *spec.Spec) (extensionStageHooks map[string][]spec.Hook, err error) {
var locale string
var ok bool
@@ -1195,13 +1209,13 @@ func (c *Container) setupOCIHooks(ctx context.Context, config *spec.Spec) (exten
}
}
+ allHooks := make(map[string][]spec.Hook)
if c.runtime.config.HooksDir == nil {
if rootless.IsRootless() {
return nil, nil
}
- allHooks := make(map[string][]spec.Hook)
for _, hDir := range []string{hooks.DefaultDir, hooks.OverrideDir} {
- manager, err := hooks.New(ctx, []string{hDir}, []string{"poststop"}, lang)
+ manager, err := hooks.New(ctx, []string{hDir}, []string{"precreate", "poststop"}, lang)
if err != nil {
if os.IsNotExist(err) {
continue
@@ -1219,19 +1233,32 @@ func (c *Container) setupOCIHooks(ctx context.Context, config *spec.Spec) (exten
allHooks[i] = hook
}
}
- return allHooks, nil
+ } else {
+ manager, err := hooks.New(ctx, c.runtime.config.HooksDir, []string{"precreate", "poststop"}, lang)
+ if err != nil {
+ if os.IsNotExist(err) {
+ logrus.Warnf("Requested OCI hooks directory %q does not exist", c.runtime.config.HooksDir)
+ return nil, nil
+ }
+ return nil, err
+ }
+
+ allHooks, err = manager.Hooks(config, c.Spec().Annotations, len(c.config.UserVolumes) > 0)
+ if err != nil {
+ return nil, err
+ }
}
- manager, err := hooks.New(ctx, c.runtime.config.HooksDir, []string{"poststop"}, lang)
+ hookErr, err := exec.RuntimeConfigFilter(ctx, allHooks["precreate"], config, exec.DefaultPostKillTimeout)
if err != nil {
- if os.IsNotExist(err) {
- logrus.Warnf("Requested OCI hooks directory %q does not exist", c.runtime.config.HooksDir)
- return nil, nil
+ logrus.Warnf("container %s: precreate hook: %v", c.ID(), err)
+ if hookErr != nil && hookErr != err {
+ logrus.Debugf("container %s: precreate hook (hook error): %v", c.ID(), hookErr)
}
return nil, err
}
- return manager.Hooks(config, c.Spec().Annotations, len(c.config.UserVolumes) > 0)
+ return allHooks, nil
}
// mount mounts the container's root filesystem
diff --git a/libpod/container_internal_linux.go b/libpod/container_internal_linux.go
index 0745b7732..bcdfdaee3 100644
--- a/libpod/container_internal_linux.go
+++ b/libpod/container_internal_linux.go
@@ -4,7 +4,6 @@ package libpod
import (
"context"
- "encoding/json"
"fmt"
"io/ioutil"
"net"
@@ -20,6 +19,7 @@ import (
cnitypes "github.com/containernetworking/cni/pkg/types/current"
"github.com/containernetworking/plugins/pkg/ns"
crioAnnotations "github.com/containers/libpod/pkg/annotations"
+ "github.com/containers/libpod/pkg/apparmor"
"github.com/containers/libpod/pkg/criu"
"github.com/containers/libpod/pkg/lookup"
"github.com/containers/libpod/pkg/resolvconf"
@@ -185,6 +185,13 @@ func (c *Container) generateSpec(ctx context.Context) (*spec.Spec, error) {
}
}
+ // Apply AppArmor checks and load the default profile if needed.
+ updatedProfile, err := apparmor.CheckProfileAndLoadDefault(c.config.Spec.Process.ApparmorProfile)
+ if err != nil {
+ return nil, err
+ }
+ g.SetProcessApparmorProfile(updatedProfile)
+
if err := c.makeBindMounts(); err != nil {
return nil, err
}
@@ -219,7 +226,7 @@ func (c *Container) generateSpec(ctx context.Context) (*spec.Spec, error) {
Options: []string{"bind", "private"},
}
if c.IsReadOnly() && dstPath != "/dev/shm" {
- newMount.Options = append(newMount.Options, "ro")
+ newMount.Options = append(newMount.Options, "ro", "nosuid", "noexec", "nodev")
}
if !MountExists(g.Mounts(), dstPath) {
g.AddMount(newMount)
@@ -228,10 +235,6 @@ func (c *Container) generateSpec(ctx context.Context) (*spec.Spec, error) {
}
}
- if c.state.ExtensionStageHooks, err = c.setupOCIHooks(ctx, g.Config); err != nil {
- return nil, errors.Wrapf(err, "error setting up OCI Hooks")
- }
-
// Bind builtin image volumes
if c.config.Rootfs == "" && c.config.ImageVolumes {
if err := c.addLocalVolumes(ctx, &g, execUser); err != nil {
@@ -384,6 +387,12 @@ func (c *Container) generateSpec(ctx context.Context) (*spec.Spec, error) {
logrus.Debugf("set root propagation to %q", rootPropagation)
g.SetLinuxRootPropagation(rootPropagation)
}
+
+ // Warning: precreate hooks may alter g.Config in place.
+ if c.state.ExtensionStageHooks, err = c.setupOCIHooks(ctx, g.Config); err != nil {
+ return nil, errors.Wrapf(err, "error setting up OCI Hooks")
+ }
+
return g.Config, nil
}
@@ -481,7 +490,7 @@ func (c *Container) checkpoint(ctx context.Context, options ContainerCheckpointO
// Save network.status. This is needed to restore the container with
// the same IP. Currently limited to one IP address in a container
// with one interface.
- formatJSON, err := json.MarshalIndent(c.state.NetworkStatus, "", " ")
+ formatJSON, err := json.MarshalIndent(c.state.NetworkStatus, "", " ")
if err != nil {
return err
}
@@ -547,10 +556,8 @@ func (c *Container) restore(ctx context.Context, options ContainerCheckpointOpti
}
}
if IP != nil {
- env := fmt.Sprintf("IP=%s", IP)
// Tell CNI which IP address we want.
- os.Setenv("CNI_ARGS", env)
- logrus.Debugf("Restoring container with %s", env)
+ c.requestedIP = IP
}
}
@@ -566,12 +573,6 @@ func (c *Container) restore(ctx context.Context, options ContainerCheckpointOpti
return err
}
- // TODO: use existing way to request static IPs, once it is merged in ocicni
- // https://github.com/cri-o/ocicni/pull/23/
-
- // CNI_ARGS was used to request a certain IP address. Unconditionally remove it.
- os.Unsetenv("CNI_ARGS")
-
// Read config
jsonPath := filepath.Join(c.bundlePath(), "config.json")
logrus.Debugf("generate.NewFromFile at %v", jsonPath)
diff --git a/libpod/container_internal_test.go b/libpod/container_internal_test.go
index 51fb58713..f1e2b70a7 100644
--- a/libpod/container_internal_test.go
+++ b/libpod/container_internal_test.go
@@ -28,7 +28,7 @@ func TestPostDeleteHooks(t *testing.T) {
statePath := filepath.Join(dir, "state")
copyPath := filepath.Join(dir, "copy")
c := Container{
- config: &Config{
+ config: &ContainerConfig{
ID: "123abc",
Spec: &rspec.Spec{
Annotations: map[string]string{
@@ -37,7 +37,7 @@ func TestPostDeleteHooks(t *testing.T) {
},
StaticDir: dir, // not the bundle, but good enough for this test
},
- state: &containerState{
+ state: &ContainerState{
ExtensionStageHooks: map[string][]rspec.Hook{
"poststop": {
rspec.Hook{
diff --git a/libpod/image/image.go b/libpod/image/image.go
index 3a6d0e305..ea326d820 100644
--- a/libpod/image/image.go
+++ b/libpod/image/image.go
@@ -25,7 +25,7 @@ import (
"github.com/containers/libpod/pkg/util"
"github.com/containers/storage"
"github.com/containers/storage/pkg/reexec"
- "github.com/opencontainers/go-digest"
+ digest "github.com/opencontainers/go-digest"
ociv1 "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
@@ -226,7 +226,6 @@ func (i *Image) getLocalImage() (*storage.Image, error) {
i.InputName = dest.DockerReference().String()
}
- var taggedName string
img, err := i.imageruntime.getImage(stripSha256(i.InputName))
if err == nil {
return img.image, err
@@ -240,25 +239,18 @@ func (i *Image) getLocalImage() (*storage.Image, error) {
return nil, err
}
- // the inputname isn't tagged, so we assume latest and try again
- if !decomposedImage.isTagged {
- taggedName = fmt.Sprintf("%s:latest", i.InputName)
- img, err = i.imageruntime.getImage(taggedName)
- if err == nil {
- return img.image, nil
- }
- }
-
// The image has a registry name in it and we made sure we looked for it locally
// with a tag. It cannot be local.
if decomposedImage.hasRegistry {
return nil, errors.Wrapf(ErrNoSuchImage, imageError)
-
}
-
// if the image is saved with the repository localhost, searching with localhost prepended is necessary
// We don't need to strip the sha because we have already determined it is not an ID
- img, err = i.imageruntime.getImage(fmt.Sprintf("%s/%s", DefaultLocalRegistry, i.InputName))
+ ref, err := decomposedImage.referenceWithRegistry(DefaultLocalRegistry)
+ if err != nil {
+ return nil, err
+ }
+ img, err = i.imageruntime.getImage(ref.String())
if err == nil {
return img.image, err
}
@@ -305,12 +297,24 @@ func (i *Image) Names() []string {
}
// RepoDigests returns a string array of repodigests associated with the image
-func (i *Image) RepoDigests() []string {
+func (i *Image) RepoDigests() ([]string, error) {
var repoDigests []string
+ digest := i.Digest()
+
for _, name := range i.Names() {
- repoDigests = append(repoDigests, strings.SplitN(name, ":", 2)[0]+"@"+i.Digest().String())
+ named, err := reference.ParseNormalizedNamed(name)
+ if err != nil {
+ return nil, err
+ }
+
+ canonical, err := reference.WithDigest(reference.TrimNamed(named), digest)
+ if err != nil {
+ return nil, err
+ }
+
+ repoDigests = append(repoDigests, canonical.String())
}
- return repoDigests
+ return repoDigests, nil
}
// Created returns the time the image was created
@@ -440,35 +444,42 @@ func getImageDigest(ctx context.Context, src types.ImageReference, sc *types.Sys
return "@" + digest.Hex(), nil
}
-// normalizeTag returns the canonical version of tag for use in Image.Names()
-func normalizeTag(tag string) (string, error) {
+// normalizedTag returns the canonical version of tag for use in Image.Names()
+func normalizedTag(tag string) (reference.Named, error) {
decomposedTag, err := decompose(tag)
if err != nil {
- return "", err
- }
- // If the input does not have a tag, we need to add one (latest)
- if !decomposedTag.isTagged {
- tag = fmt.Sprintf("%s:%s", tag, decomposedTag.tag)
+ return nil, err
}
// If the input doesn't specify a registry, set the registry to localhost
+ var ref reference.Named
if !decomposedTag.hasRegistry {
- tag = fmt.Sprintf("%s/%s", DefaultLocalRegistry, tag)
+ ref, err = decomposedTag.referenceWithRegistry(DefaultLocalRegistry)
+ if err != nil {
+ return nil, err
+ }
+ } else {
+ ref, err = decomposedTag.normalizedReference()
+ if err != nil {
+ return nil, err
+ }
}
- return tag, nil
+ // If the input does not have a tag, we need to add one (latest)
+ ref = reference.TagNameOnly(ref)
+ return ref, nil
}
// TagImage adds a tag to the given image
func (i *Image) TagImage(tag string) error {
i.reloadImage()
- tag, err := normalizeTag(tag)
+ ref, err := normalizedTag(tag)
if err != nil {
return err
}
tags := i.Names()
- if util.StringInSlice(tag, tags) {
+ if util.StringInSlice(ref.String(), tags) {
return nil
}
- tags = append(tags, tag)
+ tags = append(tags, ref.String())
if err := i.imageruntime.store.SetNames(i.ID(), tags); err != nil {
return err
}
@@ -919,21 +930,23 @@ func (i *Image) MatchRepoTag(input string) (string, error) {
if err != nil {
return "", err
}
+ imageRegistry, imageName, imageSuspiciousTagValueForSearch := dcImage.suspiciousRefNameTagValuesForSearch()
for _, repoName := range i.Names() {
count := 0
dcRepoName, err := decompose(repoName)
if err != nil {
return "", err
}
- if dcRepoName.registry == dcImage.registry && dcImage.registry != "" {
+ repoNameRegistry, repoNameName, repoNameSuspiciousTagValueForSearch := dcRepoName.suspiciousRefNameTagValuesForSearch()
+ if repoNameRegistry == imageRegistry && imageRegistry != "" {
count++
}
- if dcRepoName.name == dcImage.name && dcImage.name != "" {
+ if repoNameName == imageName && imageName != "" {
count++
- } else if splitString(dcRepoName.name) == splitString(dcImage.name) {
+ } else if splitString(repoNameName) == splitString(imageName) {
count++
}
- if dcRepoName.tag == dcImage.tag {
+ if repoNameSuspiciousTagValueForSearch == imageSuspiciousTagValueForSearch {
count++
}
results[count] = append(results[count], repoName)
diff --git a/libpod/image/image_test.go b/libpod/image/image_test.go
index 91bb2411b..077ae460e 100644
--- a/libpod/image/image_test.go
+++ b/libpod/image/image_test.go
@@ -9,6 +9,7 @@ import (
"testing"
"github.com/containers/storage"
+ "github.com/opencontainers/go-digest"
"github.com/stretchr/testify/assert"
)
@@ -192,6 +193,51 @@ func TestImage_MatchRepoTag(t *testing.T) {
cleanup(workdir, ir)
}
+// TestImage_RepoDigests tests RepoDigest generation.
+func TestImage_RepoDigests(t *testing.T) {
+ dgst, err := digest.Parse("sha256:7173b809ca12ec5dee4506cd86be934c4596dd234ee82c0662eac04a8c2c71dc")
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ for _, test := range []struct {
+ name string
+ names []string
+ expected []string
+ }{
+ {
+ name: "empty",
+ names: []string{},
+ expected: nil,
+ },
+ {
+ name: "tagged",
+ names: []string{"docker.io/library/busybox:latest"},
+ expected: []string{"docker.io/library/busybox@sha256:7173b809ca12ec5dee4506cd86be934c4596dd234ee82c0662eac04a8c2c71dc"},
+ },
+ {
+ name: "digest",
+ names: []string{"docker.io/library/busybox@sha256:7173b809ca12ec5dee4506cd86be934c4596dd234ee82c0662eac04a8c2c71dc"},
+ expected: []string{"docker.io/library/busybox@sha256:7173b809ca12ec5dee4506cd86be934c4596dd234ee82c0662eac04a8c2c71dc"},
+ },
+ } {
+ t.Run(test.name, func(t *testing.T) {
+ image := &Image{
+ image: &storage.Image{
+ Names: test.names,
+ Digest: dgst,
+ },
+ }
+ actual, err := image.RepoDigests()
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ assert.Equal(t, test.expected, actual)
+ })
+ }
+}
+
// Test_splitString tests the splitString function in image that
// takes input and splits on / and returns the last array item
func Test_splitString(t *testing.T) {
@@ -211,24 +257,25 @@ func Test_stripSha256(t *testing.T) {
assert.Equal(t, stripSha256("sha256:a"), "a")
}
-func TestNormalizeTag(t *testing.T) {
+func TestNormalizedTag(t *testing.T) {
const digestSuffix = "@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
for _, c := range []struct{ input, expected string }{
{"#", ""}, // Clearly invalid
{"example.com/busybox", "example.com/busybox:latest"}, // Qualified name-only
{"example.com/busybox:notlatest", "example.com/busybox:notlatest"}, // Qualified name:tag
- {"example.com/busybox" + digestSuffix, "example.com/busybox" + digestSuffix + ":none"}, // Qualified name@digest; FIXME: The result is not even syntactically valid!
+ {"example.com/busybox" + digestSuffix, "example.com/busybox" + digestSuffix}, // Qualified name@digest; FIXME? Should we allow tagging with a digest at all?
{"example.com/busybox:notlatest" + digestSuffix, "example.com/busybox:notlatest" + digestSuffix}, // Qualified name:tag@digest
{"busybox:latest", "localhost/busybox:latest"}, // Unqualified name-only
{"ns/busybox:latest", "localhost/ns/busybox:latest"}, // Unqualified with a dot-less namespace
+ {"docker.io/busybox:latest", "docker.io/library/busybox:latest"}, // docker.io without /library/
} {
- res, err := normalizeTag(c.input)
+ res, err := normalizedTag(c.input)
if c.expected == "" {
assert.Error(t, err, c.input)
} else {
assert.NoError(t, err, c.input)
- assert.Equal(t, c.expected, res)
+ assert.Equal(t, c.expected, res.String())
}
}
}
diff --git a/libpod/image/parts.go b/libpod/image/parts.go
index 1509005e5..dfdf0b08a 100644
--- a/libpod/image/parts.go
+++ b/libpod/image/parts.go
@@ -1,79 +1,104 @@
package image
import (
- "fmt"
"strings"
"github.com/containers/image/docker/reference"
+ "github.com/pkg/errors"
)
// imageParts describes the parts of an image's name
type imageParts struct {
- transport string
- registry string
- name string
- tag string
- isTagged bool
- hasRegistry bool
+ unnormalizedRef reference.Named // WARNING: Did not go through docker.io[/library] normalization
+ hasRegistry bool
}
-// Registries must contain a ":" or a "." or be localhost
+// Registries must contain a ":" or a "." or be localhost; this helper exists for users of reference.Parse.
+// For inputs that should use the docker.io[/library] normalization, use reference.ParseNormalizedNamed instead.
func isRegistry(name string) bool {
return strings.ContainsAny(name, ".:") || name == "localhost"
}
+// GetImageBaseName uses decompose and string splits to obtain the base
+// name of an image. Doing this here because it beats changing the
+// imageParts struct names to be exported as well.
+func GetImageBaseName(input string) (string, error) {
+ decomposedImage, err := decompose(input)
+ if err != nil {
+ return "", err
+ }
+ splitImageName := strings.Split(decomposedImage.unnormalizedRef.Name(), "/")
+ return splitImageName[len(splitImageName)-1], nil
+}
+
// decompose breaks an input name into an imageParts description
func decompose(input string) (imageParts, error) {
- var (
- parts imageParts
- hasRegistry bool
- tag string
- )
imgRef, err := reference.Parse(input)
if err != nil {
- return parts, err
- }
- ntag, isTagged := imgRef.(reference.NamedTagged)
- if !isTagged {
- tag = "latest"
- if _, hasDigest := imgRef.(reference.Digested); hasDigest {
- tag = "none"
- }
- } else {
- tag = ntag.Tag()
- }
- registry := reference.Domain(imgRef.(reference.Named))
- imageName := reference.Path(imgRef.(reference.Named))
- // Is this a registry or a repo?
- if isRegistry(registry) {
- hasRegistry = true
- } else {
- if registry != "" {
- imageName = registry + "/" + imageName
- registry = ""
- }
+ return imageParts{}, err
}
+ unnormalizedNamed := imgRef.(reference.Named)
+ // ip.unnormalizedRef, because it uses reference.Parse and not reference.ParseNormalizedNamed,
+ // does not use the standard heuristics for domains vs. namespaces/repos, so we need to check
+ // explicitly.
+ hasRegistry := isRegistry(reference.Domain(unnormalizedNamed))
return imageParts{
- registry: registry,
- hasRegistry: hasRegistry,
- name: imageName,
- tag: tag,
- isTagged: isTagged,
- transport: DefaultTransport,
+ unnormalizedRef: unnormalizedNamed,
+ hasRegistry: hasRegistry,
}, nil
}
-// assemble concatenates an image's parts into a string
-func (ip *imageParts) assemble() string {
- spec := fmt.Sprintf("%s:%s", ip.name, ip.tag)
+// suspiciousRefNameTagValuesForSearch returns a "tag" value used in a previous implementation.
+// This exists only to preserve existing behavior in heuristic code; it’s dubious that that behavior is correct,
+// gespecially for the tag value.
+func (ip *imageParts) suspiciousRefNameTagValuesForSearch() (string, string, string) {
+ registry := reference.Domain(ip.unnormalizedRef)
+ imageName := reference.Path(ip.unnormalizedRef)
+ // ip.unnormalizedRef, because it uses reference.Parse and not reference.ParseNormalizedNamed,
+ // does not use the standard heuristics for domains vs. namespaces/repos.
+ if registry != "" && !isRegistry(registry) {
+ imageName = registry + "/" + imageName
+ registry = ""
+ }
- if ip.registry != "" {
- spec = fmt.Sprintf("%s/%s", ip.registry, spec)
+ var tag string
+ if tagged, isTagged := ip.unnormalizedRef.(reference.NamedTagged); isTagged {
+ tag = tagged.Tag()
+ } else if _, hasDigest := ip.unnormalizedRef.(reference.Digested); hasDigest {
+ tag = "none"
+ } else {
+ tag = "latest"
}
- return spec
+ return registry, imageName, tag
}
-// assemble concatenates an image's parts with transport into a string
-func (ip *imageParts) assembleWithTransport() string {
- return fmt.Sprintf("%s%s", ip.transport, ip.assemble())
+// referenceWithRegistry returns a (normalized) reference.Named composed of ip (with !ip.hasRegistry)
+// qualified with registry.
+func (ip *imageParts) referenceWithRegistry(registry string) (reference.Named, error) {
+ if ip.hasRegistry {
+ return nil, errors.Errorf("internal error: referenceWithRegistry called on imageParts with a registry (%#v)", *ip)
+ }
+ // We could build a reference.WithName+WithTag/WithDigest here, but we need to round-trip via a string
+ // and a ParseNormalizedNamed anyway to get the right normalization of docker.io/library, so
+ // just use a string directly.
+ qualified := registry + "/" + ip.unnormalizedRef.String()
+ ref, err := reference.ParseNormalizedNamed(qualified)
+ if err != nil {
+ return nil, errors.Wrapf(err, "error normalizing registry+unqualified reference %#v", qualified)
+ }
+ return ref, nil
+}
+
+// normalizedReference returns a (normalized) reference for ip (with ip.hasRegistry)
+func (ip *imageParts) normalizedReference() (reference.Named, error) {
+ if !ip.hasRegistry {
+ return nil, errors.Errorf("internal error: normalizedReference called on imageParts without a registry (%#v)", *ip)
+ }
+ // We need to round-trip via a string to get the right normalization of docker.io/library
+ s := ip.unnormalizedRef.String()
+ ref, err := reference.ParseNormalizedNamed(s)
+ if err != nil { // Should never happen
+ return nil, errors.Wrapf(err, "error normalizing qualified reference %#v", s)
+ }
+ return ref, nil
}
diff --git a/libpod/image/parts_test.go b/libpod/image/parts_test.go
index 518538f0b..726e55e86 100644
--- a/libpod/image/parts_test.go
+++ b/libpod/image/parts_test.go
@@ -4,64 +4,120 @@ import (
"testing"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
)
func TestDecompose(t *testing.T) {
const digestSuffix = "@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
for _, c := range []struct {
- input string
- transport, registry, name, tag string
- isTagged, hasRegistry bool
- assembled string
- assembledWithTransport string
+ input string
+ registry, name, suspiciousTagValueForSearch string
+ hasRegistry bool
}{
- {"#", "", "", "", "", false, false, "", ""}, // Entirely invalid input
+ {"#", "", "", "", false}, // Entirely invalid input
{ // Fully qualified docker.io, name-only input
- "docker.io/library/busybox", "docker://", "docker.io", "library/busybox", "latest", false, true,
- "docker.io/library/busybox:latest", "docker://docker.io/library/busybox:latest",
+ "docker.io/library/busybox", "docker.io", "library/busybox", "latest", true,
},
{ // Fully qualified example.com, name-only input
- "example.com/ns/busybox", "docker://", "example.com", "ns/busybox", "latest", false, true,
- "example.com/ns/busybox:latest", "docker://example.com/ns/busybox:latest",
+ "example.com/ns/busybox", "example.com", "ns/busybox", "latest", true,
},
{ // Unqualified single-name input
- "busybox", "docker://", "", "busybox", "latest", false, false,
- "busybox:latest", "docker://busybox:latest",
+ "busybox", "", "busybox", "latest", false,
},
{ // Unqualified namespaced input
- "ns/busybox", "docker://", "", "ns/busybox", "latest", false, false,
- "ns/busybox:latest", "docker://ns/busybox:latest",
+ "ns/busybox", "", "ns/busybox", "latest", false,
},
{ // name:tag
- "example.com/ns/busybox:notlatest", "docker://", "example.com", "ns/busybox", "notlatest", true, true,
- "example.com/ns/busybox:notlatest", "docker://example.com/ns/busybox:notlatest",
+ "example.com/ns/busybox:notlatest", "example.com", "ns/busybox", "notlatest", true,
},
{ // name@digest
- // FIXME? .tag == "none"
- "example.com/ns/busybox" + digestSuffix, "docker://", "example.com", "ns/busybox", "none", false, true,
- // FIXME: this drops the digest and replaces it with an incorrect tag.
- "example.com/ns/busybox:none", "docker://example.com/ns/busybox:none",
+ // FIXME? .suspiciousTagValueForSearch == "none"
+ "example.com/ns/busybox" + digestSuffix, "example.com", "ns/busybox", "none", true,
},
{ // name:tag@digest
- "example.com/ns/busybox:notlatest" + digestSuffix, "docker://", "example.com", "ns/busybox", "notlatest", true, true,
- // FIXME: This drops the digest
- "example.com/ns/busybox:notlatest", "docker://example.com/ns/busybox:notlatest",
+ "example.com/ns/busybox:notlatest" + digestSuffix, "example.com", "ns/busybox", "notlatest", true,
},
} {
parts, err := decompose(c.input)
- if c.transport == "" {
+ if c.name == "" {
assert.Error(t, err, c.input)
} else {
assert.NoError(t, err, c.input)
- assert.Equal(t, c.transport, parts.transport, c.input)
- assert.Equal(t, c.registry, parts.registry, c.input)
- assert.Equal(t, c.name, parts.name, c.input)
- assert.Equal(t, c.tag, parts.tag, c.input)
- assert.Equal(t, c.isTagged, parts.isTagged, c.input)
+ registry, name, suspiciousTagValueForSearch := parts.suspiciousRefNameTagValuesForSearch()
+ assert.Equal(t, c.registry, registry, c.input)
+ assert.Equal(t, c.name, name, c.input)
+ assert.Equal(t, c.suspiciousTagValueForSearch, suspiciousTagValueForSearch, c.input)
assert.Equal(t, c.hasRegistry, parts.hasRegistry, c.input)
- assert.Equal(t, c.assembled, parts.assemble(), c.input)
- assert.Equal(t, c.assembledWithTransport, parts.assembleWithTransport(), c.input)
+ }
+ }
+}
+
+func TestImagePartsReferenceWithRegistry(t *testing.T) {
+ const digestSuffix = "@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+
+ for _, c := range []struct {
+ input string
+ withDocker, withNonDocker string
+ }{
+ {"example.com/ns/busybox", "", ""}, // Fully-qualified input is invalid.
+ {"busybox", "docker.io/library/busybox", "example.com/busybox"}, // Single-name input
+ {"ns/busybox", "docker.io/ns/busybox", "example.com/ns/busybox"}, // Namespaced input
+ {"ns/busybox:notlatest", "docker.io/ns/busybox:notlatest", "example.com/ns/busybox:notlatest"}, // name:tag
+ {"ns/busybox" + digestSuffix, "docker.io/ns/busybox" + digestSuffix, "example.com/ns/busybox" + digestSuffix}, // name@digest
+ { // name:tag@digest
+ "ns/busybox:notlatest" + digestSuffix,
+ "docker.io/ns/busybox:notlatest" + digestSuffix, "example.com/ns/busybox:notlatest" + digestSuffix,
+ },
+ } {
+ parts, err := decompose(c.input)
+ require.NoError(t, err)
+ if c.withDocker == "" {
+ _, err := parts.referenceWithRegistry("docker.io")
+ assert.Error(t, err, c.input)
+ _, err = parts.referenceWithRegistry("example.com")
+ assert.Error(t, err, c.input)
+ } else {
+ ref, err := parts.referenceWithRegistry("docker.io")
+ require.NoError(t, err, c.input)
+ assert.Equal(t, c.withDocker, ref.String())
+ ref, err = parts.referenceWithRegistry("example.com")
+ require.NoError(t, err, c.input)
+ assert.Equal(t, c.withNonDocker, ref.String())
+ }
+ }
+
+ // Invalid registry value
+ parts, err := decompose("busybox")
+ require.NoError(t, err)
+ _, err = parts.referenceWithRegistry("invalid@domain")
+ assert.Error(t, err)
+}
+
+func TestImagePartsNormalizedReference(t *testing.T) {
+ const digestSuffix = "@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+
+ for _, c := range []struct{ input, expected string }{
+ {"busybox", ""}, // Unqualified input is invalid
+ {"docker.io/busybox", "docker.io/library/busybox"}, // docker.io single-name
+ {"example.com/busybox", "example.com/busybox"}, // example.com single-name
+ {"docker.io/ns/busybox", "docker.io/ns/busybox"}, // docker.io namespaced
+ {"example.com/ns/busybox", "example.com/ns/busybox"}, // example.com namespaced
+ {"example.com/ns/busybox:notlatest", "example.com/ns/busybox:notlatest"}, // name:tag
+ {"example.com/ns/busybox" + digestSuffix, "example.com/ns/busybox" + digestSuffix}, // name@digest
+ { // name:tag@digest
+ "example.com/ns/busybox:notlatest" + digestSuffix, "example.com/ns/busybox:notlatest" + digestSuffix,
+ },
+ } {
+ parts, err := decompose(c.input)
+ require.NoError(t, err)
+ if c.expected == "" {
+ _, err := parts.normalizedReference()
+ assert.Error(t, err, c.input)
+ } else {
+ ref, err := parts.normalizedReference()
+ require.NoError(t, err, c.input)
+ assert.Equal(t, c.expected, ref.String())
}
}
}
diff --git a/libpod/image/pull.go b/libpod/image/pull.go
index 09935fe7c..434b83520 100644
--- a/libpod/image/pull.go
+++ b/libpod/image/pull.go
@@ -4,7 +4,6 @@ import (
"context"
"fmt"
"io"
- "strings"
cp "github.com/containers/image/copy"
"github.com/containers/image/directory"
@@ -76,9 +75,11 @@ func (ir *Runtime) getPullRefPair(srcRef types.ImageReference, destName string)
decomposedDest, err := decompose(destName)
if err == nil && !decomposedDest.hasRegistry {
// If the image doesn't have a registry, set it as the default repo
- decomposedDest.registry = DefaultLocalRegistry
- decomposedDest.hasRegistry = true
- destName = decomposedDest.assemble()
+ ref, err := decomposedDest.referenceWithRegistry(DefaultLocalRegistry)
+ if err != nil {
+ return pullRefPair{}, err
+ }
+ destName = ref.String()
}
reference := destName
@@ -270,12 +271,6 @@ func (ir *Runtime) doPullImage(ctx context.Context, sc *types.SystemContext, goa
return images, nil
}
-// hasShaInInputName returns a bool as to whether the user provided an image name that includes
-// a reference to a specific sha
-func hasShaInInputName(inputName string) bool {
- return strings.Contains(inputName, "@sha256:")
-}
-
// pullGoalFromPossiblyUnqualifiedName looks at inputName and determines the possible
// image references to try pulling in combination with the registries.conf file as well
func (ir *Runtime) pullGoalFromPossiblyUnqualifiedName(inputName string) (*pullGoal, error) {
@@ -284,31 +279,11 @@ func (ir *Runtime) pullGoalFromPossiblyUnqualifiedName(inputName string) (*pullG
return nil, err
}
if decomposedImage.hasRegistry {
- var imageName, destName string
- if hasShaInInputName(inputName) {
- imageName = fmt.Sprintf("%s%s", decomposedImage.transport, inputName)
- } else {
- imageName = decomposedImage.assembleWithTransport()
- }
- srcRef, err := alltransports.ParseImageName(imageName)
+ srcRef, err := docker.ParseReference("//" + inputName)
if err != nil {
return nil, errors.Wrapf(err, "unable to parse '%s'", inputName)
}
- if hasShaInInputName(inputName) {
- destName = decomposedImage.assemble()
- } else {
- destName = inputName
- }
- destRef, err := is.Transport.ParseStoreReference(ir.store, destName)
- if err != nil {
- return nil, errors.Wrapf(err, "error parsing dest reference name %#v", destName)
- }
- ps := pullRefPair{
- image: inputName,
- srcRef: srcRef,
- dstRef: destRef,
- }
- return singlePullRefPairGoal(ps), nil
+ return ir.getSinglePullRefPairGoal(srcRef, inputName)
}
searchRegistries, err := registries.GetRegistries()
@@ -317,22 +292,18 @@ func (ir *Runtime) pullGoalFromPossiblyUnqualifiedName(inputName string) (*pullG
}
var refPairs []pullRefPair
for _, registry := range searchRegistries {
- decomposedImage.registry = registry
- imageName := decomposedImage.assembleWithTransport()
- if hasShaInInputName(inputName) {
- imageName = fmt.Sprintf("%s%s/%s", decomposedImage.transport, registry, inputName)
- }
- srcRef, err := alltransports.ParseImageName(imageName)
+ ref, err := decomposedImage.referenceWithRegistry(registry)
if err != nil {
- return nil, errors.Wrapf(err, "unable to parse '%s'", inputName)
+ return nil, err
}
- ps := pullRefPair{
- image: decomposedImage.assemble(),
- srcRef: srcRef,
+ imageName := ref.String()
+ srcRef, err := docker.ParseReference("//" + imageName)
+ if err != nil {
+ return nil, errors.Wrapf(err, "unable to parse '%s'", imageName)
}
- ps.dstRef, err = is.Transport.ParseStoreReference(ir.store, ps.image)
+ ps, err := ir.getPullRefPair(srcRef, imageName)
if err != nil {
- return nil, errors.Wrapf(err, "error parsing dest reference name %#v", ps.image)
+ return nil, err
}
refPairs = append(refPairs, ps)
}
diff --git a/libpod/image/pull_test.go b/libpod/image/pull_test.go
index 37b45dc83..3890c5e6c 100644
--- a/libpod/image/pull_test.go
+++ b/libpod/image/pull_test.go
@@ -76,9 +76,7 @@ func TestGetPullRefPair(t *testing.T) {
},
{ // name, no registry, no tag:
"dir:/dev/this-does-not-exist", "from-directory",
- // FIXME(?) Adding a registry also adds a :latest tag. OTOH that actually matches the used destination.
- // Either way it is surprising that the localhost/ addition changes this. (mitr hoping to remove the "image" member).
- "localhost/from-directory:latest", "localhost/from-directory:latest",
+ "localhost/from-directory", "localhost/from-directory:latest",
},
{ // registry/name:tag :
"dir:/dev/this-does-not-exist", "example.com/from-directory:notlatest",
@@ -90,8 +88,7 @@ func TestGetPullRefPair(t *testing.T) {
},
{ // name@digest, no registry:
"dir:/dev/this-does-not-exist", "from-directory" + digestSuffix,
- // FIXME?! Why is this dropping the digest, and adding :none?!
- "localhost/from-directory:none", "localhost/from-directory:none",
+ "localhost/from-directory" + digestSuffix, "localhost/from-directory" + digestSuffix,
},
{ // registry/name@digest:
"dir:/dev/this-does-not-exist", "example.com/from-directory" + digestSuffix,
@@ -211,14 +208,13 @@ func TestPullGoalFromImageReference(t *testing.T) {
false,
},
{ // Relative path, single element.
- // FIXME? Note the :latest difference in .image.
"dir:this-does-not-exist",
- []expected{{"localhost/this-does-not-exist:latest", "localhost/this-does-not-exist:latest"}},
+ []expected{{"localhost/this-does-not-exist", "localhost/this-does-not-exist:latest"}},
false,
},
{ // Relative path, multiple elements.
"dir:testdata/this-does-not-exist",
- []expected{{"localhost/testdata/this-does-not-exist:latest", "localhost/testdata/this-does-not-exist:latest"}},
+ []expected{{"localhost/testdata/this-does-not-exist", "localhost/testdata/this-does-not-exist:latest"}},
false,
},
@@ -324,8 +320,7 @@ func TestPullGoalFromPossiblyUnqualifiedName(t *testing.T) {
{ // Qualified example.com, name@digest.
"example.com/ns/busybox" + digestSuffix,
[]pullRefStrings{{"example.com/ns/busybox" + digestSuffix, "docker://example.com/ns/busybox" + digestSuffix,
- // FIXME?! Why is .dstName dropping the digest, and adding :none?!
- "example.com/ns/busybox:none"}},
+ "example.com/ns/busybox" + digestSuffix}},
false,
},
// Qualified example.com, name:tag@digest. This code is happy to try, but .srcRef parsing currently rejects such input.
@@ -333,16 +328,16 @@ func TestPullGoalFromPossiblyUnqualifiedName(t *testing.T) {
{ // Unqualified, single-name, name-only
"busybox",
[]pullRefStrings{
- {"example.com/busybox:latest", "docker://example.com/busybox:latest", "example.com/busybox:latest"},
+ {"example.com/busybox", "docker://example.com/busybox:latest", "example.com/busybox:latest"},
// (The docker:// representation is shortened by c/image/docker.Reference but it refers to "docker.io/library".)
- {"docker.io/busybox:latest", "docker://busybox:latest", "docker.io/library/busybox:latest"},
+ {"docker.io/library/busybox", "docker://busybox:latest", "docker.io/library/busybox:latest"},
},
true,
},
{ // Unqualified, namespaced, name-only
"ns/busybox",
[]pullRefStrings{
- {"example.com/ns/busybox:latest", "docker://example.com/ns/busybox:latest", "example.com/ns/busybox:latest"},
+ {"example.com/ns/busybox", "docker://example.com/ns/busybox:latest", "example.com/ns/busybox:latest"},
},
true,
},
@@ -351,17 +346,16 @@ func TestPullGoalFromPossiblyUnqualifiedName(t *testing.T) {
[]pullRefStrings{
{"example.com/busybox:notlatest", "docker://example.com/busybox:notlatest", "example.com/busybox:notlatest"},
// (The docker:// representation is shortened by c/image/docker.Reference but it refers to "docker.io/library".)
- {"docker.io/busybox:notlatest", "docker://busybox:notlatest", "docker.io/library/busybox:notlatest"},
+ {"docker.io/library/busybox:notlatest", "docker://busybox:notlatest", "docker.io/library/busybox:notlatest"},
},
true,
},
{ // Unqualified, name@digest
"busybox" + digestSuffix,
[]pullRefStrings{
- // FIXME?! Why is .input and .dstName dropping the digest, and adding :none?!
- {"example.com/busybox:none", "docker://example.com/busybox" + digestSuffix, "example.com/busybox:none"},
+ {"example.com/busybox" + digestSuffix, "docker://example.com/busybox" + digestSuffix, "example.com/busybox" + digestSuffix},
// (The docker:// representation is shortened by c/image/docker.Reference but it refers to "docker.io/library".)
- {"docker.io/busybox:none", "docker://busybox" + digestSuffix, "docker.io/library/busybox:none"},
+ {"docker.io/library/busybox" + digestSuffix, "docker://busybox" + digestSuffix, "docker.io/library/busybox" + digestSuffix},
},
true,
},
diff --git a/libpod/image/utils.go b/libpod/image/utils.go
index b944de1bb..ad027f32a 100644
--- a/libpod/image/utils.go
+++ b/libpod/image/utils.go
@@ -17,6 +17,7 @@ import (
// findImageInRepotags takes an imageParts struct and searches images' repotags for
// a match on name:tag
func findImageInRepotags(search imageParts, images []*Image) (*storage.Image, error) {
+ _, searchName, searchSuspiciousTagValueForSearch := search.suspiciousRefNameTagValuesForSearch()
var results []*storage.Image
for _, image := range images {
for _, name := range image.Names() {
@@ -25,21 +26,22 @@ func findImageInRepotags(search imageParts, images []*Image) (*storage.Image, er
if err != nil {
continue
}
- if d.name == search.name && d.tag == search.tag {
+ _, dName, dSuspiciousTagValueForSearch := d.suspiciousRefNameTagValuesForSearch()
+ if dName == searchName && dSuspiciousTagValueForSearch == searchSuspiciousTagValueForSearch {
results = append(results, image.image)
continue
}
// account for registry:/somedir/image
- if strings.HasSuffix(d.name, search.name) && d.tag == search.tag {
+ if strings.HasSuffix(dName, searchName) && dSuspiciousTagValueForSearch == searchSuspiciousTagValueForSearch {
results = append(results, image.image)
continue
}
}
}
if len(results) == 0 {
- return &storage.Image{}, errors.Errorf("unable to find a name and tag match for %s in repotags", search.name)
+ return &storage.Image{}, errors.Errorf("unable to find a name and tag match for %s in repotags", searchName)
} else if len(results) > 1 {
- return &storage.Image{}, errors.Errorf("found multiple name and tag matches for %s in repotags", search.name)
+ return &storage.Image{}, errors.Errorf("found multiple name and tag matches for %s in repotags", searchName)
}
return results[0], nil
}
diff --git a/libpod/info.go b/libpod/info.go
index 7044eba6a..191ce6810 100644
--- a/libpod/info.go
+++ b/libpod/info.go
@@ -4,7 +4,6 @@ import (
"bufio"
"bytes"
"fmt"
- "github.com/containers/buildah"
"io/ioutil"
"os"
"runtime"
@@ -12,7 +11,9 @@ import (
"strings"
"time"
+ "github.com/containers/buildah"
"github.com/containers/libpod/pkg/rootless"
+ "github.com/containers/libpod/pkg/util"
"github.com/containers/libpod/utils"
"github.com/containers/storage/pkg/system"
"github.com/pkg/errors"
@@ -115,6 +116,7 @@ func (r *Runtime) hostInfo() (map[string]interface{}, error) {
func (r *Runtime) storeInfo() (map[string]interface{}, error) {
// lets say storage driver in use, number of images, number of containers
info := map[string]interface{}{}
+ info["ConfigFile"] = util.StorageConfigFile()
info["GraphRoot"] = r.store.GraphRoot()
info["RunRoot"] = r.store.RunRoot()
info["GraphDriverName"] = r.store.GraphDriverName()
@@ -182,12 +184,12 @@ func (r *Runtime) GetConmonVersion() (string, error) {
// GetOCIRuntimePath returns the path to the OCI Runtime Path the runtime is using
func (r *Runtime) GetOCIRuntimePath() string {
- return r.ociRuntimePath
+ return r.ociRuntimePath.Paths[0]
}
// GetOCIRuntimeVersion returns a string representation of the oci runtimes version
func (r *Runtime) GetOCIRuntimeVersion() (string, error) {
- output, err := utils.ExecCmd(r.ociRuntimePath, "--version")
+ output, err := utils.ExecCmd(r.ociRuntimePath.Paths[0], "--version")
if err != nil {
return "", err
}
diff --git a/libpod/lock/in_memory_locks.go b/libpod/lock/in_memory_locks.go
new file mode 100644
index 000000000..db8f20e95
--- /dev/null
+++ b/libpod/lock/in_memory_locks.go
@@ -0,0 +1,91 @@
+package lock
+
+import (
+ "sync"
+
+ "github.com/pkg/errors"
+)
+
+// Mutex holds a single mutex and whether it has been allocated.
+type Mutex struct {
+ id uint32
+ lock sync.Mutex
+ allocated bool
+}
+
+// ID retrieves the ID of the mutex
+func (m *Mutex) ID() uint32 {
+ return m.id
+}
+
+// Lock locks the mutex
+func (m *Mutex) Lock() {
+ m.lock.Lock()
+}
+
+// Unlock unlocks the mutex
+func (m *Mutex) Unlock() {
+ m.lock.Unlock()
+}
+
+// Free deallocates the mutex to allow its reuse
+func (m *Mutex) Free() error {
+ m.allocated = false
+
+ return nil
+}
+
+// InMemoryManager is a lock manager that allocates and retrieves local-only
+// locks - that is, they are not multiprocess. This lock manager is intended
+// purely for unit and integration testing and should not be used in production
+// deployments.
+type InMemoryManager struct {
+ locks []*Mutex
+ numLocks uint32
+ localLock sync.Mutex
+}
+
+// NewInMemoryManager creates a new in-memory lock manager with the given number
+// of locks.
+func NewInMemoryManager(numLocks uint32) (Manager, error) {
+ if numLocks == 0 {
+ return nil, errors.Errorf("must provide a non-zero number of locks!")
+ }
+
+ manager := new(InMemoryManager)
+ manager.numLocks = numLocks
+ manager.locks = make([]*Mutex, numLocks)
+
+ var i uint32
+ for i = 0; i < numLocks; i++ {
+ lock := new(Mutex)
+ lock.id = i
+ manager.locks[i] = lock
+ }
+
+ return manager, nil
+}
+
+// AllocateLock allocates a lock from the manager.
+func (m *InMemoryManager) AllocateLock() (Locker, error) {
+ m.localLock.Lock()
+ defer m.localLock.Unlock()
+
+ for _, lock := range m.locks {
+ if !lock.allocated {
+ lock.allocated = true
+ return lock, nil
+ }
+ }
+
+ return nil, errors.Errorf("all locks have been allocated")
+}
+
+// RetrieveLock retrieves a lock from the manager.
+func (m *InMemoryManager) RetrieveLock(id uint32) (Locker, error) {
+ if id >= m.numLocks {
+ return nil, errors.Errorf("given lock ID %d is too large - this manager only supports lock indexes up to %d", id, m.numLocks-1)
+ }
+
+ return m.locks[id], nil
+}
diff --git a/libpod/lock/lock.go b/libpod/lock/lock.go
new file mode 100644
index 000000000..1f94171fe
--- /dev/null
+++ b/libpod/lock/lock.go
@@ -0,0 +1,61 @@
+package lock
+
+// Manager provides an interface for allocating multiprocess locks.
+// Locks returned by Manager MUST be multiprocess - allocating a lock in
+// process A and retrieving that lock's ID in process B must return handles for
+// the same lock, and locking the lock in A should exclude B from the lock until
+// it is unlocked in A.
+// All locks must be identified by a UUID (retrieved with Locker's ID() method).
+// All locks with a given UUID must refer to the same underlying lock, and it
+// must be possible to retrieve the lock given its UUID.
+// Each UUID should refer to a unique underlying lock.
+// Calls to AllocateLock() must return a unique, unallocated UUID.
+// AllocateLock() must fail once all available locks have been allocated.
+// Locks are returned to use by calls to Free(), and can subsequently be
+// reallocated.
+type Manager interface {
+ // AllocateLock returns an unallocated lock.
+ // It is guaranteed that the same lock will not be returned again by
+ // AllocateLock until the returned lock has Free() called on it.
+ // If all available locks are allocated, AllocateLock will return an
+ // error.
+ AllocateLock() (Locker, error)
+ // RetrieveLock retrieves a lock given its UUID.
+ // The underlying lock MUST be the same as another other lock with the
+ // same UUID.
+ RetrieveLock(id uint32) (Locker, error)
+}
+
+// Locker is similar to sync.Locker, but provides a method for freeing the lock
+// to allow its reuse.
+// All Locker implementations must maintain mutex semantics - the lock only
+// allows one caller in the critical section at a time.
+// All locks with the same ID must refer to the same underlying lock, even
+// if they are within multiple processes.
+type Locker interface {
+ // ID retrieves the lock's ID.
+ // ID is guaranteed to uniquely identify the lock within the
+ // Manager - that is, calling RetrieveLock with this ID will return
+ // another instance of the same lock.
+ ID() uint32
+ // Lock locks the lock.
+ // This call MUST block until it successfully acquires the lock or
+ // encounters a fatal error.
+ // All errors must be handled internally, as they are not returned. For
+ // the most part, panicking should be appropriate.
+ // Some lock implementations may require that Lock() and Unlock() occur
+ // within the same goroutine (SHM locking, for example). The usual Go
+ // Lock()/defer Unlock() pattern will still work fine in these cases.
+ Lock()
+ // Unlock unlocks the lock.
+ // All errors must be handled internally, as they are not returned. For
+ // the most part, panicking should be appropriate.
+ // This includes unlocking locks which are already unlocked.
+ Unlock()
+ // Free deallocates the underlying lock, allowing its reuse by other
+ // pods and containers.
+ // The lock MUST still be usable after a Free() - some libpod instances
+ // may still retain Container structs with the old lock. This simply
+ // advises the manager that the lock may be reallocated.
+ Free() error
+}
diff --git a/libpod/lock/shm/shm_lock.c b/libpod/lock/shm/shm_lock.c
new file mode 100644
index 000000000..4af58d857
--- /dev/null
+++ b/libpod/lock/shm/shm_lock.c
@@ -0,0 +1,452 @@
+#include <errno.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "shm_lock.h"
+
+// Compute the size of the SHM struct
+static size_t compute_shm_size(uint32_t num_bitmaps) {
+ return sizeof(shm_struct_t) + (num_bitmaps * sizeof(lock_group_t));
+}
+
+// Take the given mutex.
+// Handles exceptional conditions, including a mutex locked by a process that
+// died holding it.
+// Returns 0 on success, or positive errno on failure.
+static int take_mutex(pthread_mutex_t *mutex) {
+ int ret_code;
+
+ do {
+ ret_code = pthread_mutex_lock(mutex);
+ } while(ret_code == EAGAIN);
+
+ if (ret_code == EOWNERDEAD) {
+ // The previous owner of the mutex died while holding it
+ // Take it for ourselves
+ ret_code = pthread_mutex_consistent(mutex);
+ if (ret_code != 0) {
+ // Someone else may have gotten here first and marked the state consistent
+ // However, the mutex could also be invalid.
+ // Fail here instead of looping back to trying to lock the mutex.
+ return ret_code;
+ }
+ } else if (ret_code != 0) {
+ return ret_code;
+ }
+
+ return 0;
+}
+
+// Release the given mutex.
+// Returns 0 on success, or positive errno on failure.
+static int release_mutex(pthread_mutex_t *mutex) {
+ int ret_code;
+
+ do {
+ ret_code = pthread_mutex_unlock(mutex);
+ } while(ret_code == EAGAIN);
+
+ if (ret_code != 0) {
+ return ret_code;
+ }
+
+ return 0;
+}
+
+// Set up an SHM segment holding locks for libpod.
+// num_locks must not be 0.
+// Path is the path to the SHM segment. It must begin with a single / and
+// container no other / characters, and be at most 255 characters including
+// terminating NULL byte.
+// Returns a valid pointer on success or NULL on error.
+// If an error occurs, negative ERRNO values will be written to error_code.
+shm_struct_t *setup_lock_shm(char *path, uint32_t num_locks, int *error_code) {
+ int shm_fd, i, j, ret_code;
+ uint32_t num_bitmaps;
+ size_t shm_size;
+ shm_struct_t *shm;
+ pthread_mutexattr_t attr;
+
+ // If error_code doesn't point to anything, we can't reasonably return errors
+ // So fail immediately
+ if (error_code == NULL) {
+ return NULL;
+ }
+
+ // We need a nonzero number of locks
+ if (num_locks == 0) {
+ *error_code = -1 * EINVAL;
+ return NULL;
+ }
+
+ if (path == NULL) {
+ *error_code = -1 * EINVAL;
+ return NULL;
+ }
+
+ // Calculate the number of bitmaps required
+ num_bitmaps = num_locks / BITMAP_SIZE;
+ if (num_locks % BITMAP_SIZE != 0) {
+ // The actual number given is not an even multiple of our bitmap size
+ // So round up
+ num_bitmaps += 1;
+ }
+
+ // Calculate size of the shm segment
+ shm_size = compute_shm_size(num_bitmaps);
+
+ // Create a new SHM segment for us
+ shm_fd = shm_open(path, O_RDWR | O_CREAT | O_EXCL, 0600);
+ if (shm_fd < 0) {
+ *error_code = -1 * errno;
+ return NULL;
+ }
+
+ // Increase its size to what we need
+ ret_code = ftruncate(shm_fd, shm_size);
+ if (ret_code < 0) {
+ *error_code = -1 * errno;
+ goto CLEANUP_UNLINK;
+ }
+
+ // Map the shared memory in
+ shm = mmap(NULL, shm_size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
+ if (shm == MAP_FAILED) {
+ *error_code = -1 * errno;
+ goto CLEANUP_UNLINK;
+ }
+
+ // We have successfully mapped the memory, now initialize the region
+ shm->magic = MAGIC;
+ shm->unused = 0;
+ shm->num_locks = num_bitmaps * BITMAP_SIZE;
+ shm->num_bitmaps = num_bitmaps;
+
+ // Create an initializer for our pthread mutexes
+ ret_code = pthread_mutexattr_init(&attr);
+ if (ret_code != 0) {
+ *error_code = -1 * ret_code;
+ goto CLEANUP_UNMAP;
+ }
+
+ // Set mutexes to pshared - multiprocess-safe
+ ret_code = pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
+ if (ret_code != 0) {
+ *error_code = -1 * ret_code;
+ goto CLEANUP_FREEATTR;
+ }
+
+ // Set mutexes to robust - if a process dies while holding a mutex, we'll get
+ // a special error code on the next attempt to lock it.
+ // This should prevent panicing processes from leaving the state unusable.
+ ret_code = pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST);
+ if (ret_code != 0) {
+ *error_code = -1 * ret_code;
+ goto CLEANUP_FREEATTR;
+ }
+
+ // Initialize the mutex that protects the bitmaps using the mutex attributes
+ ret_code = pthread_mutex_init(&(shm->segment_lock), &attr);
+ if (ret_code != 0) {
+ *error_code = -1 * ret_code;
+ goto CLEANUP_FREEATTR;
+ }
+
+ // Initialize all bitmaps to 0 initially
+ // And initialize all semaphores they use
+ for (i = 0; i < num_bitmaps; i++) {
+ shm->locks[i].bitmap = 0;
+ for (j = 0; j < BITMAP_SIZE; j++) {
+ // Initialize each mutex
+ ret_code = pthread_mutex_init(&(shm->locks[i].locks[j]), &attr);
+ if (ret_code != 0) {
+ *error_code = -1 * ret_code;
+ goto CLEANUP_FREEATTR;
+ }
+ }
+ }
+
+ // Close the file descriptor, we're done with it
+ // Ignore errors, it's ok if we leak a single FD and this should only run once
+ close(shm_fd);
+
+ // Destroy the pthread initializer attribute.
+ // Again, ignore errors, this will only run once and we might leak a tiny bit
+ // of memory at worst.
+ pthread_mutexattr_destroy(&attr);
+
+ return shm;
+
+ // Cleanup after an error
+ CLEANUP_FREEATTR:
+ pthread_mutexattr_destroy(&attr);
+ CLEANUP_UNMAP:
+ munmap(shm, shm_size);
+ CLEANUP_UNLINK:
+ close(shm_fd);
+ shm_unlink(path);
+ return NULL;
+}
+
+// Open an existing SHM segment holding libpod locks.
+// num_locks is the number of locks that will be configured in the SHM segment.
+// num_locks cannot be 0.
+// Path is the path to the SHM segment. It must begin with a single / and
+// container no other / characters, and be at most 255 characters including
+// terminating NULL byte.
+// Returns a valid pointer on success or NULL on error.
+// If an error occurs, negative ERRNO values will be written to error_code.
+shm_struct_t *open_lock_shm(char *path, uint32_t num_locks, int *error_code) {
+ int shm_fd;
+ shm_struct_t *shm;
+ size_t shm_size;
+ uint32_t num_bitmaps;
+
+ if (error_code == NULL) {
+ return NULL;
+ }
+
+ // We need a nonzero number of locks
+ if (num_locks == 0) {
+ *error_code = -1 * EINVAL;
+ return NULL;
+ }
+
+ if (path == NULL) {
+ *error_code = -1 * EINVAL;
+ return NULL;
+ }
+
+ // Calculate the number of bitmaps required
+ num_bitmaps = num_locks / BITMAP_SIZE;
+ if (num_locks % BITMAP_SIZE != 0) {
+ num_bitmaps += 1;
+ }
+
+ // Calculate size of the shm segment
+ shm_size = compute_shm_size(num_bitmaps);
+
+ shm_fd = shm_open(path, O_RDWR, 0600);
+ if (shm_fd < 0) {
+ *error_code = -1 * errno;
+ return NULL;
+ }
+
+ // Map the shared memory in
+ shm = mmap(NULL, shm_size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
+ if (shm == MAP_FAILED) {
+ *error_code = -1 * errno;
+ }
+
+ // Ignore errors, it's ok if we leak a single FD since this only runs once
+ close(shm_fd);
+
+ // Check if we successfully mmap'd
+ if (shm == MAP_FAILED) {
+ return NULL;
+ }
+
+ // Need to check the SHM to see if it's actually our locks
+ if (shm->magic != MAGIC) {
+ *error_code = -1 * errno;
+ goto CLEANUP;
+ }
+ if (shm->num_locks != (num_bitmaps * BITMAP_SIZE)) {
+ *error_code = -1 * errno;
+ goto CLEANUP;
+ }
+
+ return shm;
+
+ CLEANUP:
+ munmap(shm, shm_size);
+ return NULL;
+}
+
+// Close an open SHM lock struct, unmapping the backing memory.
+// The given shm_struct_t will be rendered unusable as a result.
+// On success, 0 is returned. On failure, negative ERRNO values are returned.
+int32_t close_lock_shm(shm_struct_t *shm) {
+ int ret_code;
+ size_t shm_size;
+
+ // We can't unmap null...
+ if (shm == NULL) {
+ return -1 * EINVAL;
+ }
+
+ shm_size = compute_shm_size(shm->num_bitmaps);
+
+ ret_code = munmap(shm, shm_size);
+
+ if (ret_code != 0) {
+ return -1 * errno;
+ }
+
+ return 0;
+}
+
+// Allocate the first available semaphore
+// Returns a positive integer guaranteed to be less than UINT32_MAX on success,
+// or negative errno values on failure
+// On sucess, the returned integer is the number of the semaphore allocated
+int64_t allocate_semaphore(shm_struct_t *shm) {
+ int ret_code, i;
+ bitmap_t test_map;
+ int64_t sem_number, num_within_bitmap;
+
+ if (shm == NULL) {
+ return -1 * EINVAL;
+ }
+
+ // Lock the semaphore controlling access to our shared memory
+ ret_code = take_mutex(&(shm->segment_lock));
+ if (ret_code != 0) {
+ return -1 * ret_code;
+ }
+
+ // Loop through our bitmaps to search for one that is not full
+ for (i = 0; i < shm->num_bitmaps; i++) {
+ if (shm->locks[i].bitmap != 0xFFFFFFFF) {
+ test_map = 0x1;
+ num_within_bitmap = 0;
+ while (test_map != 0) {
+ if ((test_map & shm->locks[i].bitmap) == 0) {
+ // Compute the number of the semaphore we are allocating
+ sem_number = (BITMAP_SIZE * i) + num_within_bitmap;
+ // OR in the bitmap
+ shm->locks[i].bitmap = shm->locks[i].bitmap | test_map;
+
+ // Clear the mutex
+ ret_code = release_mutex(&(shm->segment_lock));
+ if (ret_code != 0) {
+ return -1 * ret_code;
+ }
+
+ // Return the semaphore we've allocated
+ return sem_number;
+ }
+ test_map = test_map << 1;
+ num_within_bitmap++;
+ }
+ // We should never fall through this loop
+ // TODO maybe an assert() here to panic if we do?
+ }
+ }
+
+ // Clear the mutex
+ ret_code = release_mutex(&(shm->segment_lock));
+ if (ret_code != 0) {
+ return -1 * ret_code;
+ }
+
+ // All bitmaps are full
+ // We have no available semaphores, report allocation failure
+ return -1 * ENOSPC;
+}
+
+// Deallocate a given semaphore
+// Returns 0 on success, negative ERRNO values on failure
+int32_t deallocate_semaphore(shm_struct_t *shm, uint32_t sem_index) {
+ bitmap_t test_map;
+ int bitmap_index, index_in_bitmap, ret_code, i;
+
+ if (shm == NULL) {
+ return -1 * EINVAL;
+ }
+
+ // Check if the lock index is valid
+ if (sem_index >= shm->num_locks) {
+ return -1 * EINVAL;
+ }
+
+ bitmap_index = sem_index / BITMAP_SIZE;
+ index_in_bitmap = sem_index % BITMAP_SIZE;
+
+ // This should never happen if the sem_index test above succeeded, but better
+ // safe than sorry
+ if (bitmap_index >= shm->num_bitmaps) {
+ return -1 * EFAULT;
+ }
+
+ test_map = 0x1 << index_in_bitmap;
+
+ // Lock the mutex controlling access to our shared memory
+ ret_code = take_mutex(&(shm->segment_lock));
+ if (ret_code != 0) {
+ return -1 * ret_code;
+ }
+
+ // Check if the semaphore is allocated
+ if ((test_map & shm->locks[bitmap_index].bitmap) == 0) {
+ ret_code = release_mutex(&(shm->segment_lock));
+ if (ret_code != 0) {
+ return -1 * ret_code;
+ }
+
+ return -1 * ENOENT;
+ }
+
+ // The semaphore is allocated, clear it
+ // Invert the bitmask we used to test to clear the bit
+ test_map = ~test_map;
+ shm->locks[bitmap_index].bitmap = shm->locks[bitmap_index].bitmap & test_map;
+
+ ret_code = release_mutex(&(shm->segment_lock));
+ if (ret_code != 0) {
+ return -1 * ret_code;
+ }
+
+ return 0;
+}
+
+// Lock a given semaphore
+// Does not check if the semaphore is allocated - this ensures that, even for
+// removed containers, we can still successfully lock to check status (and
+// subsequently realize they have been removed).
+// Returns 0 on success, -1 on failure
+int32_t lock_semaphore(shm_struct_t *shm, uint32_t sem_index) {
+ int bitmap_index, index_in_bitmap, ret_code;
+
+ if (shm == NULL) {
+ return -1 * EINVAL;
+ }
+
+ if (sem_index >= shm->num_locks) {
+ return -1 * EINVAL;
+ }
+
+ bitmap_index = sem_index / BITMAP_SIZE;
+ index_in_bitmap = sem_index % BITMAP_SIZE;
+
+ return -1 * take_mutex(&(shm->locks[bitmap_index].locks[index_in_bitmap]));
+}
+
+// Unlock a given semaphore
+// Does not check if the semaphore is allocated - this ensures that, even for
+// removed containers, we can still successfully lock to check status (and
+// subsequently realize they have been removed).
+// Returns 0 on success, -1 on failure
+int32_t unlock_semaphore(shm_struct_t *shm, uint32_t sem_index) {
+ int bitmap_index, index_in_bitmap, ret_code;
+
+ if (shm == NULL) {
+ return -1 * EINVAL;
+ }
+
+ if (sem_index >= shm->num_locks) {
+ return -1 * EINVAL;
+ }
+
+ bitmap_index = sem_index / BITMAP_SIZE;
+ index_in_bitmap = sem_index % BITMAP_SIZE;
+
+ return -1 * release_mutex(&(shm->locks[bitmap_index].locks[index_in_bitmap]));
+}
diff --git a/libpod/lock/shm/shm_lock.go b/libpod/lock/shm/shm_lock.go
new file mode 100644
index 000000000..87d28e5c1
--- /dev/null
+++ b/libpod/lock/shm/shm_lock.go
@@ -0,0 +1,216 @@
+package shm
+
+// #cgo LDFLAGS: -lrt -lpthread
+// #include <stdlib.h>
+// #include "shm_lock.h"
+// const uint32_t bitmap_size_c = BITMAP_SIZE;
+import "C"
+
+import (
+ "runtime"
+ "syscall"
+ "unsafe"
+
+ "github.com/pkg/errors"
+ "github.com/sirupsen/logrus"
+)
+
+var (
+ // BitmapSize is the size of the bitmap used when managing SHM locks.
+ // an SHM lock manager's max locks will be rounded up to a multiple of
+ // this number.
+ BitmapSize uint32 = uint32(C.bitmap_size_c)
+)
+
+// SHMLocks is a struct enabling POSIX semaphore locking in a shared memory
+// segment.
+type SHMLocks struct { // nolint
+ lockStruct *C.shm_struct_t
+ maxLocks uint32
+ valid bool
+}
+
+// CreateSHMLock sets up a shared-memory segment holding a given number of POSIX
+// semaphores, and returns a struct that can be used to operate on those locks.
+// numLocks must not be 0, and may be rounded up to a multiple of the bitmap
+// size used by the underlying implementation.
+func CreateSHMLock(path string, numLocks uint32) (*SHMLocks, error) {
+ if numLocks == 0 {
+ return nil, errors.Wrapf(syscall.EINVAL, "number of locks must be greater than 0")
+ }
+
+ locks := new(SHMLocks)
+
+ cPath := C.CString(path)
+ defer C.free(unsafe.Pointer(cPath))
+
+ var errCode C.int
+ lockStruct := C.setup_lock_shm(cPath, C.uint32_t(numLocks), &errCode)
+ if lockStruct == nil {
+ // We got a null pointer, so something errored
+ return nil, errors.Wrapf(syscall.Errno(-1*errCode), "failed to create %d locks in %s", numLocks, path)
+ }
+
+ locks.lockStruct = lockStruct
+ locks.maxLocks = uint32(lockStruct.num_locks)
+ locks.valid = true
+
+ logrus.Debugf("Initialized SHM lock manager at path %s", path)
+
+ return locks, nil
+}
+
+// OpenSHMLock opens an existing shared-memory segment holding a given number of
+// POSIX semaphores. numLocks must match the number of locks the shared memory
+// segment was created with.
+func OpenSHMLock(path string, numLocks uint32) (*SHMLocks, error) {
+ if numLocks == 0 {
+ return nil, errors.Wrapf(syscall.EINVAL, "number of locks must be greater than 0")
+ }
+
+ locks := new(SHMLocks)
+
+ cPath := C.CString(path)
+ defer C.free(unsafe.Pointer(cPath))
+
+ var errCode C.int
+ lockStruct := C.open_lock_shm(cPath, C.uint32_t(numLocks), &errCode)
+ if lockStruct == nil {
+ // We got a null pointer, so something errored
+ return nil, errors.Wrapf(syscall.Errno(-1*errCode), "failed to open %d locks in %s", numLocks, path)
+ }
+
+ locks.lockStruct = lockStruct
+ locks.maxLocks = numLocks
+ locks.valid = true
+
+ return locks, nil
+}
+
+// GetMaxLocks returns the maximum number of locks in the SHM
+func (locks *SHMLocks) GetMaxLocks() uint32 {
+ return locks.maxLocks
+}
+
+// Close closes an existing shared-memory segment.
+// The segment will be rendered unusable after closing.
+// WARNING: If you Close() while there are still locks locked, these locks may
+// fail to release, causing a program freeze.
+// Close() is only intended to be used while testing the locks.
+func (locks *SHMLocks) Close() error {
+ if !locks.valid {
+ return errors.Wrapf(syscall.EINVAL, "locks have already been closed")
+ }
+
+ locks.valid = false
+
+ retCode := C.close_lock_shm(locks.lockStruct)
+ if retCode < 0 {
+ // Negative errno returned
+ return syscall.Errno(-1 * retCode)
+ }
+
+ return nil
+}
+
+// AllocateSemaphore allocates a semaphore from a shared-memory segment for use
+// by a container or pod.
+// Returns the index of the semaphore that was allocated.
+// Allocations past the maximum number of locks given when the SHM segment was
+// created will result in an error, and no semaphore will be allocated.
+func (locks *SHMLocks) AllocateSemaphore() (uint32, error) {
+ if !locks.valid {
+ return 0, errors.Wrapf(syscall.EINVAL, "locks have already been closed")
+ }
+
+ // This returns a U64, so we have the full u32 range available for
+ // semaphore indexes, and can still return error codes.
+ retCode := C.allocate_semaphore(locks.lockStruct)
+ if retCode < 0 {
+ // Negative errno returned
+ return 0, syscall.Errno(-1 * retCode)
+ }
+
+ return uint32(retCode), nil
+}
+
+// DeallocateSemaphore frees a semaphore in a shared-memory segment so it can be
+// reallocated to another container or pod.
+// The given semaphore must be already allocated, or an error will be returned.
+func (locks *SHMLocks) DeallocateSemaphore(sem uint32) error {
+ if !locks.valid {
+ return errors.Wrapf(syscall.EINVAL, "locks have already been closed")
+ }
+
+ if sem > locks.maxLocks {
+ return errors.Wrapf(syscall.EINVAL, "given semaphore %d is higher than maximum locks count %d", sem, locks.maxLocks)
+ }
+
+ retCode := C.deallocate_semaphore(locks.lockStruct, C.uint32_t(sem))
+ if retCode < 0 {
+ // Negative errno returned
+ return syscall.Errno(-1 * retCode)
+ }
+
+ return nil
+}
+
+// LockSemaphore locks the given semaphore.
+// If the semaphore is already locked, LockSemaphore will block until the lock
+// can be acquired.
+// There is no requirement that the given semaphore be allocated.
+// This ensures that attempts to lock a container after it has been deleted,
+// but before the caller has queried the database to determine this, will
+// succeed.
+func (locks *SHMLocks) LockSemaphore(sem uint32) error {
+ if !locks.valid {
+ return errors.Wrapf(syscall.EINVAL, "locks have already been closed")
+ }
+
+ if sem > locks.maxLocks {
+ return errors.Wrapf(syscall.EINVAL, "given semaphore %d is higher than maximum locks count %d", sem, locks.maxLocks)
+ }
+
+ // For pthread mutexes, we have to guarantee lock and unlock happen in
+ // the same thread.
+ runtime.LockOSThread()
+
+ retCode := C.lock_semaphore(locks.lockStruct, C.uint32_t(sem))
+ if retCode < 0 {
+ // Negative errno returned
+ return syscall.Errno(-1 * retCode)
+ }
+
+ return nil
+}
+
+// UnlockSemaphore unlocks the given semaphore.
+// Unlocking a semaphore that is already unlocked with return EBUSY.
+// There is no requirement that the given semaphore be allocated.
+// This ensures that attempts to lock a container after it has been deleted,
+// but before the caller has queried the database to determine this, will
+// succeed.
+func (locks *SHMLocks) UnlockSemaphore(sem uint32) error {
+ if !locks.valid {
+ return errors.Wrapf(syscall.EINVAL, "locks have already been closed")
+ }
+
+ if sem > locks.maxLocks {
+ return errors.Wrapf(syscall.EINVAL, "given semaphore %d is higher than maximum locks count %d", sem, locks.maxLocks)
+ }
+
+ retCode := C.unlock_semaphore(locks.lockStruct, C.uint32_t(sem))
+ if retCode < 0 {
+ // Negative errno returned
+ return syscall.Errno(-1 * retCode)
+ }
+
+ // For pthread mutexes, we have to guarantee lock and unlock happen in
+ // the same thread.
+ // OK if we take multiple locks - UnlockOSThread() won't actually unlock
+ // until the number of calls equals the number of calls to
+ // LockOSThread()
+ runtime.UnlockOSThread()
+
+ return nil
+}
diff --git a/libpod/lock/shm/shm_lock.h b/libpod/lock/shm/shm_lock.h
new file mode 100644
index 000000000..8e7e23fb7
--- /dev/null
+++ b/libpod/lock/shm/shm_lock.h
@@ -0,0 +1,46 @@
+#ifndef shm_locks_h_
+#define shm_locks_h_
+
+#include <pthread.h>
+#include <stdint.h>
+
+// Magic number to ensure we open the right SHM segment
+#define MAGIC 0x87D1
+
+// Type for our bitmaps
+typedef uint32_t bitmap_t;
+
+// bitmap size
+#define BITMAP_SIZE (sizeof(bitmap_t) * 8)
+
+// Struct to hold a single bitmap and associated locks
+typedef struct lock_group {
+ bitmap_t bitmap;
+ pthread_mutex_t locks[BITMAP_SIZE];
+} lock_group_t;
+
+// Struct to hold our SHM locks.
+// Unused is required to be 0 in the current implementation. If we ever make
+// changes to this structure in the future, this will be repurposed as a version
+// field.
+typedef struct shm_struct {
+ uint16_t magic;
+ uint16_t unused;
+ pthread_mutex_t segment_lock;
+ uint32_t num_bitmaps;
+ uint32_t num_locks;
+ lock_group_t locks[];
+} shm_struct_t;
+
+static size_t compute_shm_size(uint32_t num_bitmaps);
+static int take_mutex(pthread_mutex_t *mutex);
+static int release_mutex(pthread_mutex_t *mutex);
+shm_struct_t *setup_lock_shm(char *path, uint32_t num_locks, int *error_code);
+shm_struct_t *open_lock_shm(char *path, uint32_t num_locks, int *error_code);
+int32_t close_lock_shm(shm_struct_t *shm);
+int64_t allocate_semaphore(shm_struct_t *shm);
+int32_t deallocate_semaphore(shm_struct_t *shm, uint32_t sem_index);
+int32_t lock_semaphore(shm_struct_t *shm, uint32_t sem_index);
+int32_t unlock_semaphore(shm_struct_t *shm, uint32_t sem_index);
+
+#endif
diff --git a/libpod/lock/shm/shm_lock_test.go b/libpod/lock/shm/shm_lock_test.go
new file mode 100644
index 000000000..594eb5d8e
--- /dev/null
+++ b/libpod/lock/shm/shm_lock_test.go
@@ -0,0 +1,278 @@
+package shm
+
+import (
+ "fmt"
+ "os"
+ "runtime"
+ "syscall"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+// All tests here are in the same process, which somewhat limits their utility
+// The big intent of this package it multiprocess locking, which is really hard
+// to test without actually having multiple processes...
+// We can at least verify that the locks work within the local process.
+
+var (
+ // 4 * BITMAP_SIZE to ensure we have to traverse bitmaps
+ numLocks = 4 * BitmapSize
+)
+
+const lockPath = "/libpod_test"
+
+// We need a test main to ensure that the SHM is created before the tests run
+func TestMain(m *testing.M) {
+ shmLock, err := CreateSHMLock(lockPath, numLocks)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Error creating SHM for tests: %v\n", err)
+ os.Exit(-1)
+ }
+
+ // Close the SHM - every subsequent test will reopen
+ if err := shmLock.Close(); err != nil {
+ fmt.Fprintf(os.Stderr, "Error closing SHM locks: %v\n", err)
+ os.Exit(-1)
+ }
+
+ exitCode := m.Run()
+
+ // We need to remove the SHM segment to clean up after ourselves
+ os.RemoveAll("/dev/shm/libpod_lock")
+
+ os.Exit(exitCode)
+}
+
+func runLockTest(t *testing.T, testFunc func(*testing.T, *SHMLocks)) {
+ locks, err := OpenSHMLock(lockPath, numLocks)
+ if err != nil {
+ t.Fatalf("Error opening locks: %v", err)
+ }
+ defer func() {
+ // Deallocate all locks
+ // Ignore ENOENT (lock is not allocated)
+ var i uint32
+ for i = 0; i < numLocks; i++ {
+ if err := locks.DeallocateSemaphore(i); err != nil && err != syscall.ENOENT {
+ t.Fatalf("Error deallocating semaphore %d: %v", i, err)
+ }
+ }
+
+ if err := locks.Close(); err != nil {
+ t.Fatalf("Error closing locks: %v", err)
+ }
+ }()
+
+ success := t.Run("locks", func(t *testing.T) {
+ testFunc(t, locks)
+ })
+ if !success {
+ t.Fail()
+ }
+}
+
+// Test that creating an SHM with a bad size rounds up to a good size
+func TestCreateNewSHMBadSizeRoundsUp(t *testing.T) {
+ // Odd number, not a power of 2, should never be a word size on a system
+ lock, err := CreateSHMLock("/test1", 7)
+ assert.NoError(t, err)
+
+ assert.Equal(t, lock.GetMaxLocks(), BitmapSize)
+
+ if err := lock.Close(); err != nil {
+ t.Fatalf("Error closing locks: %v", err)
+ }
+}
+
+// Test that creating an SHM with 0 size fails
+func TestCreateNewSHMZeroSize(t *testing.T) {
+ _, err := CreateSHMLock("/test2", 0)
+ assert.Error(t, err)
+}
+
+// Test that deallocating an unallocated lock errors
+func TestDeallocateUnallocatedLockErrors(t *testing.T) {
+ runLockTest(t, func(t *testing.T, locks *SHMLocks) {
+ err := locks.DeallocateSemaphore(0)
+ assert.Error(t, err)
+ })
+}
+
+// Test that unlocking an unlocked lock fails
+func TestUnlockingUnlockedLockFails(t *testing.T) {
+ runLockTest(t, func(t *testing.T, locks *SHMLocks) {
+ err := locks.UnlockSemaphore(0)
+ assert.Error(t, err)
+ })
+}
+
+// Test that locking and double-unlocking fails
+func TestDoubleUnlockFails(t *testing.T) {
+ runLockTest(t, func(t *testing.T, locks *SHMLocks) {
+ err := locks.LockSemaphore(0)
+ assert.NoError(t, err)
+
+ err = locks.UnlockSemaphore(0)
+ assert.NoError(t, err)
+
+ err = locks.UnlockSemaphore(0)
+ assert.Error(t, err)
+ })
+}
+
+// Test allocating - lock - unlock - deallocate cycle, single lock
+func TestLockLifecycleSingleLock(t *testing.T) {
+ runLockTest(t, func(t *testing.T, locks *SHMLocks) {
+ sem, err := locks.AllocateSemaphore()
+ require.NoError(t, err)
+
+ err = locks.LockSemaphore(sem)
+ assert.NoError(t, err)
+
+ err = locks.UnlockSemaphore(sem)
+ assert.NoError(t, err)
+
+ err = locks.DeallocateSemaphore(sem)
+ assert.NoError(t, err)
+ })
+}
+
+// Test allocate two locks returns different locks
+func TestAllocateTwoLocksGetsDifferentLocks(t *testing.T) {
+ runLockTest(t, func(t *testing.T, locks *SHMLocks) {
+ sem1, err := locks.AllocateSemaphore()
+ assert.NoError(t, err)
+
+ sem2, err := locks.AllocateSemaphore()
+ assert.NoError(t, err)
+
+ assert.NotEqual(t, sem1, sem2)
+ })
+}
+
+// Test allocate all locks successful and all are unique
+func TestAllocateAllLocksSucceeds(t *testing.T) {
+ runLockTest(t, func(t *testing.T, locks *SHMLocks) {
+ sems := make(map[uint32]bool)
+ var i uint32
+ for i = 0; i < numLocks; i++ {
+ sem, err := locks.AllocateSemaphore()
+ assert.NoError(t, err)
+
+ // Ensure the allocate semaphore is unique
+ _, ok := sems[sem]
+ assert.False(t, ok)
+
+ sems[sem] = true
+ }
+ })
+}
+
+// Test allocating more than the given max fails
+func TestAllocateTooManyLocksFails(t *testing.T) {
+ runLockTest(t, func(t *testing.T, locks *SHMLocks) {
+ // Allocate all locks
+ var i uint32
+ for i = 0; i < numLocks; i++ {
+ _, err := locks.AllocateSemaphore()
+ assert.NoError(t, err)
+ }
+
+ // Try and allocate one more
+ _, err := locks.AllocateSemaphore()
+ assert.Error(t, err)
+ })
+}
+
+// Test allocating max locks, deallocating one, and then allocating again succeeds
+func TestAllocateDeallocateCycle(t *testing.T) {
+ runLockTest(t, func(t *testing.T, locks *SHMLocks) {
+ // Allocate all locks
+ var i uint32
+ for i = 0; i < numLocks; i++ {
+ _, err := locks.AllocateSemaphore()
+ assert.NoError(t, err)
+ }
+
+ // Now loop through again, deallocating and reallocating.
+ // Each time we free 1 semaphore, allocate again, and make sure
+ // we get the same semaphore back.
+ var j uint32
+ for j = 0; j < numLocks; j++ {
+ err := locks.DeallocateSemaphore(j)
+ assert.NoError(t, err)
+
+ newSem, err := locks.AllocateSemaphore()
+ assert.NoError(t, err)
+ assert.Equal(t, j, newSem)
+ }
+ })
+}
+
+// Test that locks actually lock
+func TestLockSemaphoreActuallyLocks(t *testing.T) {
+ runLockTest(t, func(t *testing.T, locks *SHMLocks) {
+ // This entire test is very ugly - lots of sleeps to try and get
+ // things to occur in the right order.
+ // It also doesn't even exercise the multiprocess nature of the
+ // locks.
+
+ // Get the current time
+ startTime := time.Now()
+
+ // Start a goroutine to take the lock and then release it after
+ // a second.
+ go func() {
+ err := locks.LockSemaphore(0)
+ assert.NoError(t, err)
+
+ time.Sleep(1 * time.Second)
+
+ err = locks.UnlockSemaphore(0)
+ assert.NoError(t, err)
+ }()
+
+ // Sleep for a quarter of a second to give the goroutine time
+ // to kick off and grab the lock
+ time.Sleep(250 * time.Millisecond)
+
+ // Take the lock
+ err := locks.LockSemaphore(0)
+ assert.NoError(t, err)
+
+ // Get the current time
+ endTime := time.Now()
+
+ // Verify that at least 1 second has passed since start
+ duration := endTime.Sub(startTime)
+ assert.True(t, duration.Seconds() > 1.0)
+ })
+}
+
+// Test that locking and unlocking two semaphores succeeds
+// Ensures that runtime.LockOSThread() is doing its job
+func TestLockAndUnlockTwoSemaphore(t *testing.T) {
+ runLockTest(t, func(t *testing.T, locks *SHMLocks) {
+ err := locks.LockSemaphore(5)
+ assert.NoError(t, err)
+
+ err = locks.LockSemaphore(6)
+ assert.NoError(t, err)
+
+ err = locks.UnlockSemaphore(6)
+ assert.NoError(t, err)
+
+ // Now yield scheduling
+ // To try and get us on another OS thread
+ runtime.Gosched()
+
+ // And unlock the last semaphore
+ // If we are in a different OS thread, this should fail.
+ // However, runtime.UnlockOSThread() should guarantee we are not
+ err = locks.UnlockSemaphore(5)
+ assert.NoError(t, err)
+ })
+}
diff --git a/libpod/lock/shm_lock_manager_linux.go b/libpod/lock/shm_lock_manager_linux.go
new file mode 100644
index 000000000..94dfd7dd7
--- /dev/null
+++ b/libpod/lock/shm_lock_manager_linux.go
@@ -0,0 +1,102 @@
+// +build linux
+
+package lock
+
+import (
+ "syscall"
+
+ "github.com/containers/libpod/libpod/lock/shm"
+ "github.com/pkg/errors"
+)
+
+// SHMLockManager manages shared memory locks.
+type SHMLockManager struct {
+ locks *shm.SHMLocks
+}
+
+// NewSHMLockManager makes a new SHMLockManager with the given number of locks.
+// Due to the underlying implementation, the exact number of locks created may
+// be greater than the number given here.
+func NewSHMLockManager(path string, numLocks uint32) (Manager, error) {
+ locks, err := shm.CreateSHMLock(path, numLocks)
+ if err != nil {
+ return nil, err
+ }
+
+ manager := new(SHMLockManager)
+ manager.locks = locks
+
+ return manager, nil
+}
+
+// OpenSHMLockManager opens an existing SHMLockManager with the given number of
+// locks.
+func OpenSHMLockManager(path string, numLocks uint32) (Manager, error) {
+ locks, err := shm.OpenSHMLock(path, numLocks)
+ if err != nil {
+ return nil, err
+ }
+
+ manager := new(SHMLockManager)
+ manager.locks = locks
+
+ return manager, nil
+}
+
+// AllocateLock allocates a new lock from the manager.
+func (m *SHMLockManager) AllocateLock() (Locker, error) {
+ semIndex, err := m.locks.AllocateSemaphore()
+ if err != nil {
+ return nil, err
+ }
+
+ lock := new(SHMLock)
+ lock.lockID = semIndex
+ lock.manager = m
+
+ return lock, nil
+}
+
+// RetrieveLock retrieves a lock from the manager given its ID.
+func (m *SHMLockManager) RetrieveLock(id uint32) (Locker, error) {
+ lock := new(SHMLock)
+ lock.lockID = id
+ lock.manager = m
+
+ if id >= m.locks.GetMaxLocks() {
+ return nil, errors.Wrapf(syscall.EINVAL, "lock ID %d is too large - max lock size is %d",
+ id, m.locks.GetMaxLocks()-1)
+ }
+
+ return lock, nil
+}
+
+// SHMLock is an individual shared memory lock.
+type SHMLock struct {
+ lockID uint32
+ manager *SHMLockManager
+}
+
+// ID returns the ID of the lock.
+func (l *SHMLock) ID() uint32 {
+ return l.lockID
+}
+
+// Lock acquires the lock.
+func (l *SHMLock) Lock() {
+ if err := l.manager.locks.LockSemaphore(l.lockID); err != nil {
+ panic(err.Error())
+ }
+}
+
+// Unlock releases the lock.
+func (l *SHMLock) Unlock() {
+ if err := l.manager.locks.UnlockSemaphore(l.lockID); err != nil {
+ panic(err.Error())
+ }
+}
+
+// Free releases the lock, allowing it to be reused.
+func (l *SHMLock) Free() error {
+ return l.manager.locks.DeallocateSemaphore(l.lockID)
+}
diff --git a/libpod/lock/shm_lock_manager_unsupported.go b/libpod/lock/shm_lock_manager_unsupported.go
new file mode 100644
index 000000000..cbdb2f7bc
--- /dev/null
+++ b/libpod/lock/shm_lock_manager_unsupported.go
@@ -0,0 +1,29 @@
+// +build !linux
+
+package lock
+
+import "fmt"
+
+// SHMLockManager is a shared memory lock manager.
+// It is not supported on non-Unix platforms.
+type SHMLockManager struct{}
+
+// NewSHMLockManager is not supported on this platform
+func NewSHMLockManager(path string, numLocks uint32) (Manager, error) {
+ return nil, fmt.Errorf("not supported")
+}
+
+// OpenSHMLockManager is not supported on this platform
+func OpenSHMLockManager(path string, numLocks uint32) (Manager, error) {
+ return nil, fmt.Errorf("not supported")
+}
+
+// AllocateLock is not supported on this platform
+func (m *SHMLockManager) AllocateLock() (Locker, error) {
+ return nil, fmt.Errorf("not supported")
+}
+
+// RetrieveLock is not supported on this platform
+func (m *SHMLockManager) RetrieveLock(id string) (Locker, error) {
+ return nil, fmt.Errorf("not supported")
+}
diff --git a/libpod/networking_linux.go b/libpod/networking_linux.go
index 43d0a61a4..f9caf26d1 100644
--- a/libpod/networking_linux.go
+++ b/libpod/networking_linux.go
@@ -50,7 +50,16 @@ func (r *Runtime) getPodNetwork(id, name, nsPath string, networks []string, port
// Create and configure a new network namespace for a container
func (r *Runtime) configureNetNS(ctr *Container, ctrNS ns.NetNS) ([]*cnitypes.Result, error) {
- podNetwork := r.getPodNetwork(ctr.ID(), ctr.Name(), ctrNS.Path(), ctr.config.Networks, ctr.config.PortMappings, ctr.config.StaticIP)
+ var requestedIP net.IP
+ if ctr.requestedIP != nil {
+ requestedIP = ctr.requestedIP
+ // cancel request for a specific IP in case the container is reused later
+ ctr.requestedIP = nil
+ } else {
+ requestedIP = ctr.config.StaticIP
+ }
+
+ podNetwork := r.getPodNetwork(ctr.ID(), ctr.Name(), ctrNS.Path(), ctr.config.Networks, ctr.config.PortMappings, requestedIP)
results, err := r.netPlugin.SetUpPod(podNetwork)
if err != nil {
@@ -112,6 +121,19 @@ func (r *Runtime) createNetNS(ctr *Container) (n ns.NetNS, q []*cnitypes.Result,
return ctrNS, networkStatus, err
}
+type slirp4netnsCmdArg struct {
+ Proto string `json:"proto,omitempty"`
+ HostAddr string `json:"host_addr"`
+ HostPort int32 `json:"host_port"`
+ GuestAddr string `json:"guest_addr"`
+ GuestPort int32 `json:"guest_port"`
+}
+
+type slirp4netnsCmd struct {
+ Execute string `json:"execute"`
+ Args slirp4netnsCmdArg `json:"arguments"`
+}
+
// Configure the network namespace for a rootless container
func (r *Runtime) setupRootlessNetNS(ctr *Container) (err error) {
defer ctr.rootlessSlirpSyncR.Close()
@@ -130,7 +152,15 @@ func (r *Runtime) setupRootlessNetNS(ctr *Container) (err error) {
defer syncR.Close()
defer syncW.Close()
- cmd := exec.Command(path, "-c", "-e", "3", "-r", "4", fmt.Sprintf("%d", ctr.state.PID), "tap0")
+ havePortMapping := len(ctr.Config().PortMappings) > 0
+ apiSocket := filepath.Join(r.ociRuntime.tmpDir, fmt.Sprintf("%s.net", ctr.config.ID))
+ var cmd *exec.Cmd
+ if havePortMapping {
+ // if we need ports to be mapped from the host, create a API socket to use for communicating with slirp4netns.
+ cmd = exec.Command(path, "-c", "-e", "3", "-r", "4", "--api-socket", apiSocket, fmt.Sprintf("%d", ctr.state.PID), "tap0")
+ } else {
+ cmd = exec.Command(path, "-c", "-e", "3", "-r", "4", fmt.Sprintf("%d", ctr.state.PID), "tap0")
+ }
cmd.SysProcAttr = &syscall.SysProcAttr{
Setpgid: true,
@@ -153,19 +183,99 @@ func (r *Runtime) setupRootlessNetNS(ctr *Container) (err error) {
if os.IsTimeout(err) {
// Check if the process is still running.
var status syscall.WaitStatus
- _, err := syscall.Wait4(cmd.Process.Pid, &status, syscall.WNOHANG, nil)
+ pid, err := syscall.Wait4(cmd.Process.Pid, &status, syscall.WNOHANG, nil)
if err != nil {
return errors.Wrapf(err, "failed to read slirp4netns process status")
}
+ if pid != cmd.Process.Pid {
+ continue
+ }
if status.Exited() || status.Signaled() {
return errors.New("slirp4netns failed")
}
-
continue
}
return errors.Wrapf(err, "failed to read from slirp4netns sync pipe")
}
}
+
+ if havePortMapping {
+ const pidWaitTimeout = 60 * time.Second
+ chWait := make(chan error)
+ go func() {
+ interval := 25 * time.Millisecond
+ for i := time.Duration(0); i < pidWaitTimeout; i += interval {
+ // Check if the process is still running.
+ var status syscall.WaitStatus
+ pid, err := syscall.Wait4(cmd.Process.Pid, &status, syscall.WNOHANG, nil)
+ if err != nil {
+ break
+ }
+ if pid != cmd.Process.Pid {
+ continue
+ }
+ if status.Exited() || status.Signaled() {
+ chWait <- fmt.Errorf("slirp4netns exited with status %d", status.ExitStatus())
+ }
+ time.Sleep(interval)
+ }
+ }()
+ defer close(chWait)
+
+ // wait that API socket file appears before trying to use it.
+ if _, err := WaitForFile(apiSocket, chWait, pidWaitTimeout*time.Millisecond); err != nil {
+ return errors.Wrapf(err, "waiting for slirp4nets to create the api socket file %s", apiSocket)
+ }
+
+ // for each port we want to add we need to open a connection to the slirp4netns control socket
+ // and send the add_hostfwd command.
+ for _, i := range ctr.config.PortMappings {
+ conn, err := net.Dial("unix", apiSocket)
+ if err != nil {
+ return errors.Wrapf(err, "cannot open connection to %s", apiSocket)
+ }
+ defer conn.Close()
+ hostIP := i.HostIP
+ if hostIP == "" {
+ hostIP = "0.0.0.0"
+ }
+ cmd := slirp4netnsCmd{
+ Execute: "add_hostfwd",
+ Args: slirp4netnsCmdArg{
+ Proto: i.Protocol,
+ HostAddr: hostIP,
+ HostPort: i.HostPort,
+ GuestPort: i.ContainerPort,
+ },
+ }
+ // create the JSON payload and send it. Mark the end of request shutting down writes
+ // to the socket, as requested by slirp4netns.
+ data, err := json.Marshal(&cmd)
+ if err != nil {
+ return errors.Wrapf(err, "cannot marshal JSON for slirp4netns")
+ }
+ if _, err := conn.Write([]byte(fmt.Sprintf("%s\n", data))); err != nil {
+ return errors.Wrapf(err, "cannot write to control socket %s", apiSocket)
+ }
+ if err := conn.(*net.UnixConn).CloseWrite(); err != nil {
+ return errors.Wrapf(err, "cannot shutdown the socket %s", apiSocket)
+ }
+ buf := make([]byte, 2048)
+ len, err := conn.Read(buf)
+ if err != nil {
+ return errors.Wrapf(err, "cannot read from control socket %s", apiSocket)
+ }
+ // if there is no 'error' key in the received JSON data, then the operation was
+ // successful.
+ var y map[string]interface{}
+ if err := json.Unmarshal(buf[0:len], &y); err != nil {
+ return errors.Wrapf(err, "error parsing error status from slirp4netns")
+ }
+ if e, found := y["error"]; found {
+ return errors.Errorf("error from slirp4netns while setting up port redirection: %v", e)
+ }
+ }
+ }
return nil
}
@@ -258,7 +368,16 @@ func (r *Runtime) teardownNetNS(ctr *Container) error {
logrus.Debugf("Tearing down network namespace at %s for container %s", ctr.state.NetNS.Path(), ctr.ID())
- podNetwork := r.getPodNetwork(ctr.ID(), ctr.Name(), ctr.state.NetNS.Path(), ctr.config.Networks, ctr.config.PortMappings, ctr.config.StaticIP)
+ var requestedIP net.IP
+ if ctr.requestedIP != nil {
+ requestedIP = ctr.requestedIP
+ // cancel request for a specific IP in case the container is reused later
+ ctr.requestedIP = nil
+ } else {
+ requestedIP = ctr.config.StaticIP
+ }
+
+ podNetwork := r.getPodNetwork(ctr.ID(), ctr.Name(), ctr.state.NetNS.Path(), ctr.config.Networks, ctr.config.PortMappings, requestedIP)
// The network may have already been torn down, so don't fail here, just log
if err := r.netPlugin.TearDownPod(podNetwork); err != nil {
diff --git a/libpod/oci.go b/libpod/oci.go
index 093bfdd35..e55bd57dc 100644
--- a/libpod/oci.go
+++ b/libpod/oci.go
@@ -3,7 +3,6 @@ package libpod
import (
"bufio"
"bytes"
- "encoding/json"
"fmt"
"io/ioutil"
"net"
@@ -76,10 +75,10 @@ type syncInfo struct {
}
// Make a new OCI runtime with provided options
-func newOCIRuntime(name string, path string, conmonPath string, conmonEnv []string, cgroupManager string, tmpDir string, logSizeMax int64, noPivotRoot bool, reservePorts bool) (*OCIRuntime, error) {
+func newOCIRuntime(oruntime OCIRuntimePath, conmonPath string, conmonEnv []string, cgroupManager string, tmpDir string, logSizeMax int64, noPivotRoot bool, reservePorts bool) (*OCIRuntime, error) {
runtime := new(OCIRuntime)
- runtime.name = name
- runtime.path = path
+ runtime.name = oruntime.Name
+ runtime.path = oruntime.Paths[0]
runtime.conmonPath = conmonPath
runtime.conmonEnv = conmonEnv
runtime.cgroupManager = cgroupManager
@@ -324,7 +323,7 @@ func (r *OCIRuntime) createOCIContainer(ctr *Container, cgroupParent string, res
cmd.Env = append(cmd.Env, fmt.Sprintf("HOME=%s", os.Getenv("HOME")))
cmd.Env = append(cmd.Env, fmt.Sprintf("XDG_RUNTIME_DIR=%s", runtimeDir))
- if r.reservePorts {
+ if r.reservePorts && !ctr.config.NetMode.IsSlirp4netns() {
ports, err := bindPorts(ctr.config.PortMappings)
if err != nil {
return err
@@ -357,18 +356,25 @@ func (r *OCIRuntime) createOCIContainer(ctr *Container, cgroupParent string, res
// Set the label of the conmon process to be level :s0
// This will allow the container processes to talk to fifo-files
// passed into the container by conmon
- var plabel string
+ var (
+ plabel string
+ con selinux.Context
+ )
plabel, err = selinux.CurrentLabel()
if err != nil {
childPipe.Close()
return errors.Wrapf(err, "Failed to get current SELinux label")
}
- c := selinux.NewContext(plabel)
+ con, err = selinux.NewContext(plabel)
+ if err != nil {
+ return errors.Wrapf(err, "Failed to get new context from SELinux label")
+ }
+
runtime.LockOSThread()
- if c["level"] != "s0" && c["level"] != "" {
- c["level"] = "s0"
- if err = label.SetProcessLabel(c.Get()); err != nil {
+ if con["level"] != "s0" && con["level"] != "" {
+ con["level"] = "s0"
+ if err = label.SetProcessLabel(con.Get()); err != nil {
runtime.UnlockOSThread()
return err
}
@@ -728,7 +734,7 @@ func (r *OCIRuntime) unpauseContainer(ctr *Container) error {
// TODO: Add --detach support
// TODO: Convert to use conmon
// TODO: add --pid-file and use that to generate exec session tracking
-func (r *OCIRuntime) execContainer(c *Container, cmd, capAdd, env []string, tty bool, user, sessionID string) (*exec.Cmd, error) {
+func (r *OCIRuntime) execContainer(c *Container, cmd, capAdd, env []string, tty bool, cwd, user, sessionID string) (*exec.Cmd, error) {
if len(cmd) == 0 {
return nil, errors.Wrapf(ErrInvalidArg, "must provide a command to execute")
}
@@ -749,7 +755,9 @@ func (r *OCIRuntime) execContainer(c *Container, cmd, capAdd, env []string, tty
args = append(args, "exec")
- args = append(args, "--cwd", c.config.Spec.Process.Cwd)
+ if cwd != "" {
+ args = append(args, "--cwd", cwd)
+ }
args = append(args, "--pid-file", c.execPidPath(sessionID))
diff --git a/libpod/options.go b/libpod/options.go
index 319e1f6c6..d965c058e 100644
--- a/libpod/options.go
+++ b/libpod/options.go
@@ -137,17 +137,17 @@ func WithStateType(storeType RuntimeStateStore) RuntimeOption {
}
// WithOCIRuntime specifies an OCI runtime to use for running containers.
-func WithOCIRuntime(runtimePath string) RuntimeOption {
+func WithOCIRuntime(runtime string) RuntimeOption {
return func(rt *Runtime) error {
if rt.valid {
return ErrRuntimeFinalized
}
- if runtimePath == "" {
+ if runtime == "" {
return errors.Wrapf(ErrInvalidArg, "must provide a valid path")
}
- rt.config.RuntimePath = []string{runtimePath}
+ rt.config.OCIRuntime = runtime
return nil
}
diff --git a/libpod/pod.go b/libpod/pod.go
index 07f41f5c6..4ce697402 100644
--- a/libpod/pod.go
+++ b/libpod/pod.go
@@ -3,7 +3,7 @@ package libpod
import (
"time"
- "github.com/containers/storage"
+ "github.com/containers/libpod/libpod/lock"
"github.com/cri-o/ocicni/pkg/ocicni"
"github.com/pkg/errors"
)
@@ -26,7 +26,7 @@ type Pod struct {
valid bool
runtime *Runtime
- lock storage.Locker
+ lock lock.Locker
}
// PodConfig represents a pod's static configuration
@@ -60,6 +60,9 @@ type PodConfig struct {
// Time pod was created
CreatedTime time.Time `json:"created"`
+
+ // ID of the pod's lock
+ LockID uint32 `json:"lockID"`
}
// podState represents a pod's state
diff --git a/libpod/pod_easyjson.go b/libpod/pod_easyjson.go
deleted file mode 100644
index 8ea9a5e72..000000000
--- a/libpod/pod_easyjson.go
+++ /dev/null
@@ -1,877 +0,0 @@
-// +build seccomp ostree selinux varlink exclude_graphdriver_devicemapper
-
-// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT.
-
-package libpod
-
-import (
- json "encoding/json"
- ocicni "github.com/cri-o/ocicni/pkg/ocicni"
- easyjson "github.com/mailru/easyjson"
- jlexer "github.com/mailru/easyjson/jlexer"
- jwriter "github.com/mailru/easyjson/jwriter"
-)
-
-// suppress unused package warning
-var (
- _ *json.RawMessage
- _ *jlexer.Lexer
- _ *jwriter.Writer
- _ easyjson.Marshaler
-)
-
-func easyjsonBe091417DecodeGithubComContainersLibpodLibpod(in *jlexer.Lexer, out *podState) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "cgroupPath":
- out.CgroupPath = string(in.String())
- case "InfraContainerID":
- out.InfraContainerID = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjsonBe091417EncodeGithubComContainersLibpodLibpod(out *jwriter.Writer, in podState) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"cgroupPath\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.CgroupPath))
- }
- {
- const prefix string = ",\"InfraContainerID\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.InfraContainerID))
- }
- out.RawByte('}')
-}
-
-// MarshalJSON supports json.Marshaler interface
-func (v podState) MarshalJSON() ([]byte, error) {
- w := jwriter.Writer{}
- easyjsonBe091417EncodeGithubComContainersLibpodLibpod(&w, v)
- return w.Buffer.BuildBytes(), w.Error
-}
-
-// MarshalEasyJSON supports easyjson.Marshaler interface
-func (v podState) MarshalEasyJSON(w *jwriter.Writer) {
- easyjsonBe091417EncodeGithubComContainersLibpodLibpod(w, v)
-}
-
-// UnmarshalJSON supports json.Unmarshaler interface
-func (v *podState) UnmarshalJSON(data []byte) error {
- r := jlexer.Lexer{Data: data}
- easyjsonBe091417DecodeGithubComContainersLibpodLibpod(&r, v)
- return r.Error()
-}
-
-// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
-func (v *podState) UnmarshalEasyJSON(l *jlexer.Lexer) {
- easyjsonBe091417DecodeGithubComContainersLibpodLibpod(l, v)
-}
-func easyjsonBe091417DecodeGithubComContainersLibpodLibpod1(in *jlexer.Lexer, out *PodInspectState) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "cgroupPath":
- out.CgroupPath = string(in.String())
- case "infraContainerID":
- out.InfraContainerID = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjsonBe091417EncodeGithubComContainersLibpodLibpod1(out *jwriter.Writer, in PodInspectState) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"cgroupPath\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.CgroupPath))
- }
- {
- const prefix string = ",\"infraContainerID\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.InfraContainerID))
- }
- out.RawByte('}')
-}
-
-// MarshalJSON supports json.Marshaler interface
-func (v PodInspectState) MarshalJSON() ([]byte, error) {
- w := jwriter.Writer{}
- easyjsonBe091417EncodeGithubComContainersLibpodLibpod1(&w, v)
- return w.Buffer.BuildBytes(), w.Error
-}
-
-// MarshalEasyJSON supports easyjson.Marshaler interface
-func (v PodInspectState) MarshalEasyJSON(w *jwriter.Writer) {
- easyjsonBe091417EncodeGithubComContainersLibpodLibpod1(w, v)
-}
-
-// UnmarshalJSON supports json.Unmarshaler interface
-func (v *PodInspectState) UnmarshalJSON(data []byte) error {
- r := jlexer.Lexer{Data: data}
- easyjsonBe091417DecodeGithubComContainersLibpodLibpod1(&r, v)
- return r.Error()
-}
-
-// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
-func (v *PodInspectState) UnmarshalEasyJSON(l *jlexer.Lexer) {
- easyjsonBe091417DecodeGithubComContainersLibpodLibpod1(l, v)
-}
-func easyjsonBe091417DecodeGithubComContainersLibpodLibpod2(in *jlexer.Lexer, out *PodInspect) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "Config":
- if in.IsNull() {
- in.Skip()
- out.Config = nil
- } else {
- if out.Config == nil {
- out.Config = new(PodConfig)
- }
- if data := in.Raw(); in.Ok() {
- in.AddError((*out.Config).UnmarshalJSON(data))
- }
- }
- case "State":
- if in.IsNull() {
- in.Skip()
- out.State = nil
- } else {
- if out.State == nil {
- out.State = new(PodInspectState)
- }
- if data := in.Raw(); in.Ok() {
- in.AddError((*out.State).UnmarshalJSON(data))
- }
- }
- case "Containers":
- if in.IsNull() {
- in.Skip()
- out.Containers = nil
- } else {
- in.Delim('[')
- if out.Containers == nil {
- if !in.IsDelim(']') {
- out.Containers = make([]PodContainerInfo, 0, 2)
- } else {
- out.Containers = []PodContainerInfo{}
- }
- } else {
- out.Containers = (out.Containers)[:0]
- }
- for !in.IsDelim(']') {
- var v1 PodContainerInfo
- if data := in.Raw(); in.Ok() {
- in.AddError((v1).UnmarshalJSON(data))
- }
- out.Containers = append(out.Containers, v1)
- in.WantComma()
- }
- in.Delim(']')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjsonBe091417EncodeGithubComContainersLibpodLibpod2(out *jwriter.Writer, in PodInspect) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"Config\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.Config == nil {
- out.RawString("null")
- } else {
- out.Raw((*in.Config).MarshalJSON())
- }
- }
- {
- const prefix string = ",\"State\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.State == nil {
- out.RawString("null")
- } else {
- out.Raw((*in.State).MarshalJSON())
- }
- }
- {
- const prefix string = ",\"Containers\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.Containers == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
- out.RawString("null")
- } else {
- out.RawByte('[')
- for v2, v3 := range in.Containers {
- if v2 > 0 {
- out.RawByte(',')
- }
- out.Raw((v3).MarshalJSON())
- }
- out.RawByte(']')
- }
- }
- out.RawByte('}')
-}
-
-// MarshalJSON supports json.Marshaler interface
-func (v PodInspect) MarshalJSON() ([]byte, error) {
- w := jwriter.Writer{}
- easyjsonBe091417EncodeGithubComContainersLibpodLibpod2(&w, v)
- return w.Buffer.BuildBytes(), w.Error
-}
-
-// MarshalEasyJSON supports easyjson.Marshaler interface
-func (v PodInspect) MarshalEasyJSON(w *jwriter.Writer) {
- easyjsonBe091417EncodeGithubComContainersLibpodLibpod2(w, v)
-}
-
-// UnmarshalJSON supports json.Unmarshaler interface
-func (v *PodInspect) UnmarshalJSON(data []byte) error {
- r := jlexer.Lexer{Data: data}
- easyjsonBe091417DecodeGithubComContainersLibpodLibpod2(&r, v)
- return r.Error()
-}
-
-// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
-func (v *PodInspect) UnmarshalEasyJSON(l *jlexer.Lexer) {
- easyjsonBe091417DecodeGithubComContainersLibpodLibpod2(l, v)
-}
-func easyjsonBe091417DecodeGithubComContainersLibpodLibpod3(in *jlexer.Lexer, out *PodContainerInfo) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "id":
- out.ID = string(in.String())
- case "state":
- out.State = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjsonBe091417EncodeGithubComContainersLibpodLibpod3(out *jwriter.Writer, in PodContainerInfo) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"id\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.ID))
- }
- {
- const prefix string = ",\"state\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.State))
- }
- out.RawByte('}')
-}
-
-// MarshalJSON supports json.Marshaler interface
-func (v PodContainerInfo) MarshalJSON() ([]byte, error) {
- w := jwriter.Writer{}
- easyjsonBe091417EncodeGithubComContainersLibpodLibpod3(&w, v)
- return w.Buffer.BuildBytes(), w.Error
-}
-
-// MarshalEasyJSON supports easyjson.Marshaler interface
-func (v PodContainerInfo) MarshalEasyJSON(w *jwriter.Writer) {
- easyjsonBe091417EncodeGithubComContainersLibpodLibpod3(w, v)
-}
-
-// UnmarshalJSON supports json.Unmarshaler interface
-func (v *PodContainerInfo) UnmarshalJSON(data []byte) error {
- r := jlexer.Lexer{Data: data}
- easyjsonBe091417DecodeGithubComContainersLibpodLibpod3(&r, v)
- return r.Error()
-}
-
-// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
-func (v *PodContainerInfo) UnmarshalEasyJSON(l *jlexer.Lexer) {
- easyjsonBe091417DecodeGithubComContainersLibpodLibpod3(l, v)
-}
-func easyjsonBe091417DecodeGithubComContainersLibpodLibpod4(in *jlexer.Lexer, out *PodConfig) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "id":
- out.ID = string(in.String())
- case "name":
- out.Name = string(in.String())
- case "namespace":
- out.Namespace = string(in.String())
- case "labels":
- if in.IsNull() {
- in.Skip()
- } else {
- in.Delim('{')
- if !in.IsDelim('}') {
- out.Labels = make(map[string]string)
- } else {
- out.Labels = nil
- }
- for !in.IsDelim('}') {
- key := string(in.String())
- in.WantColon()
- var v4 string
- v4 = string(in.String())
- (out.Labels)[key] = v4
- in.WantComma()
- }
- in.Delim('}')
- }
- case "cgroupParent":
- out.CgroupParent = string(in.String())
- case "sharesCgroup":
- out.UsePodCgroup = bool(in.Bool())
- case "sharesPid":
- out.UsePodPID = bool(in.Bool())
- case "sharesIpc":
- out.UsePodIPC = bool(in.Bool())
- case "sharesNet":
- out.UsePodNet = bool(in.Bool())
- case "sharesMnt":
- out.UsePodMount = bool(in.Bool())
- case "sharesUser":
- out.UsePodUser = bool(in.Bool())
- case "sharesUts":
- out.UsePodUTS = bool(in.Bool())
- case "infraConfig":
- if in.IsNull() {
- in.Skip()
- out.InfraContainer = nil
- } else {
- if out.InfraContainer == nil {
- out.InfraContainer = new(InfraContainerConfig)
- }
- easyjsonBe091417DecodeGithubComContainersLibpodLibpod5(in, &*out.InfraContainer)
- }
- case "created":
- if data := in.Raw(); in.Ok() {
- in.AddError((out.CreatedTime).UnmarshalJSON(data))
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjsonBe091417EncodeGithubComContainersLibpodLibpod4(out *jwriter.Writer, in PodConfig) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"id\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.ID))
- }
- {
- const prefix string = ",\"name\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Name))
- }
- if in.Namespace != "" {
- const prefix string = ",\"namespace\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Namespace))
- }
- {
- const prefix string = ",\"labels\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.Labels == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 {
- out.RawString(`null`)
- } else {
- out.RawByte('{')
- v5First := true
- for v5Name, v5Value := range in.Labels {
- if v5First {
- v5First = false
- } else {
- out.RawByte(',')
- }
- out.String(string(v5Name))
- out.RawByte(':')
- out.String(string(v5Value))
- }
- out.RawByte('}')
- }
- }
- {
- const prefix string = ",\"cgroupParent\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.CgroupParent))
- }
- if in.UsePodCgroup {
- const prefix string = ",\"sharesCgroup\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.UsePodCgroup))
- }
- if in.UsePodPID {
- const prefix string = ",\"sharesPid\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.UsePodPID))
- }
- if in.UsePodIPC {
- const prefix string = ",\"sharesIpc\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.UsePodIPC))
- }
- if in.UsePodNet {
- const prefix string = ",\"sharesNet\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.UsePodNet))
- }
- if in.UsePodMount {
- const prefix string = ",\"sharesMnt\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.UsePodMount))
- }
- if in.UsePodUser {
- const prefix string = ",\"sharesUser\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.UsePodUser))
- }
- if in.UsePodUTS {
- const prefix string = ",\"sharesUts\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.UsePodUTS))
- }
- {
- const prefix string = ",\"infraConfig\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.InfraContainer == nil {
- out.RawString("null")
- } else {
- easyjsonBe091417EncodeGithubComContainersLibpodLibpod5(out, *in.InfraContainer)
- }
- }
- {
- const prefix string = ",\"created\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Raw((in.CreatedTime).MarshalJSON())
- }
- out.RawByte('}')
-}
-
-// MarshalJSON supports json.Marshaler interface
-func (v PodConfig) MarshalJSON() ([]byte, error) {
- w := jwriter.Writer{}
- easyjsonBe091417EncodeGithubComContainersLibpodLibpod4(&w, v)
- return w.Buffer.BuildBytes(), w.Error
-}
-
-// MarshalEasyJSON supports easyjson.Marshaler interface
-func (v PodConfig) MarshalEasyJSON(w *jwriter.Writer) {
- easyjsonBe091417EncodeGithubComContainersLibpodLibpod4(w, v)
-}
-
-// UnmarshalJSON supports json.Unmarshaler interface
-func (v *PodConfig) UnmarshalJSON(data []byte) error {
- r := jlexer.Lexer{Data: data}
- easyjsonBe091417DecodeGithubComContainersLibpodLibpod4(&r, v)
- return r.Error()
-}
-
-// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
-func (v *PodConfig) UnmarshalEasyJSON(l *jlexer.Lexer) {
- easyjsonBe091417DecodeGithubComContainersLibpodLibpod4(l, v)
-}
-func easyjsonBe091417DecodeGithubComContainersLibpodLibpod5(in *jlexer.Lexer, out *InfraContainerConfig) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "makeInfraContainer":
- out.HasInfraContainer = bool(in.Bool())
- case "infraPortBindings":
- if in.IsNull() {
- in.Skip()
- out.PortBindings = nil
- } else {
- in.Delim('[')
- if out.PortBindings == nil {
- if !in.IsDelim(']') {
- out.PortBindings = make([]ocicni.PortMapping, 0, 1)
- } else {
- out.PortBindings = []ocicni.PortMapping{}
- }
- } else {
- out.PortBindings = (out.PortBindings)[:0]
- }
- for !in.IsDelim(']') {
- var v6 ocicni.PortMapping
- easyjsonBe091417DecodeGithubComContainersLibpodVendorGithubComCriOOcicniPkgOcicni(in, &v6)
- out.PortBindings = append(out.PortBindings, v6)
- in.WantComma()
- }
- in.Delim(']')
- }
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjsonBe091417EncodeGithubComContainersLibpodLibpod5(out *jwriter.Writer, in InfraContainerConfig) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"makeInfraContainer\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Bool(bool(in.HasInfraContainer))
- }
- {
- const prefix string = ",\"infraPortBindings\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- if in.PortBindings == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
- out.RawString("null")
- } else {
- out.RawByte('[')
- for v7, v8 := range in.PortBindings {
- if v7 > 0 {
- out.RawByte(',')
- }
- easyjsonBe091417EncodeGithubComContainersLibpodVendorGithubComCriOOcicniPkgOcicni(out, v8)
- }
- out.RawByte(']')
- }
- }
- out.RawByte('}')
-}
-func easyjsonBe091417DecodeGithubComContainersLibpodVendorGithubComCriOOcicniPkgOcicni(in *jlexer.Lexer, out *ocicni.PortMapping) {
- isTopLevel := in.IsStart()
- if in.IsNull() {
- if isTopLevel {
- in.Consumed()
- }
- in.Skip()
- return
- }
- in.Delim('{')
- for !in.IsDelim('}') {
- key := in.UnsafeString()
- in.WantColon()
- if in.IsNull() {
- in.Skip()
- in.WantComma()
- continue
- }
- switch key {
- case "hostPort":
- out.HostPort = int32(in.Int32())
- case "containerPort":
- out.ContainerPort = int32(in.Int32())
- case "protocol":
- out.Protocol = string(in.String())
- case "hostIP":
- out.HostIP = string(in.String())
- default:
- in.SkipRecursive()
- }
- in.WantComma()
- }
- in.Delim('}')
- if isTopLevel {
- in.Consumed()
- }
-}
-func easyjsonBe091417EncodeGithubComContainersLibpodVendorGithubComCriOOcicniPkgOcicni(out *jwriter.Writer, in ocicni.PortMapping) {
- out.RawByte('{')
- first := true
- _ = first
- {
- const prefix string = ",\"hostPort\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int32(int32(in.HostPort))
- }
- {
- const prefix string = ",\"containerPort\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.Int32(int32(in.ContainerPort))
- }
- {
- const prefix string = ",\"protocol\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.Protocol))
- }
- {
- const prefix string = ",\"hostIP\":"
- if first {
- first = false
- out.RawString(prefix[1:])
- } else {
- out.RawString(prefix)
- }
- out.String(string(in.HostIP))
- }
- out.RawByte('}')
-}
diff --git a/libpod/pod_internal.go b/libpod/pod_internal.go
index 39a25c004..0f1f115e8 100644
--- a/libpod/pod_internal.go
+++ b/libpod/pod_internal.go
@@ -7,14 +7,13 @@ import (
"strings"
"time"
- "github.com/containers/storage"
"github.com/containers/storage/pkg/stringid"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)
// Creates a new, empty pod
-func newPod(lockDir string, runtime *Runtime) (*Pod, error) {
+func newPod(runtime *Runtime) (*Pod, error) {
pod := new(Pod)
pod.config = new(PodConfig)
pod.config.ID = stringid.GenerateNonCryptoID()
@@ -24,15 +23,6 @@ func newPod(lockDir string, runtime *Runtime) (*Pod, error) {
pod.state = new(podState)
pod.runtime = runtime
- // Path our lock file will reside at
- lockPath := filepath.Join(lockDir, pod.config.ID)
- // Grab a lockfile at the given path
- lock, err := storage.GetLockfile(lockPath)
- if err != nil {
- return nil, errors.Wrapf(err, "error creating lockfile for new pod")
- }
- pod.lock = lock
-
return pod, nil
}
@@ -55,6 +45,8 @@ func (p *Pod) save() error {
}
// Refresh a pod's state after restart
+// This cannot lock any other pod, but may lock individual containers, as those
+// will have refreshed by the time pod refresh runs.
func (p *Pod) refresh() error {
// Need to to an update from the DB to pull potentially-missing state
if err := p.runtime.state.UpdatePod(p); err != nil {
@@ -65,6 +57,13 @@ func (p *Pod) refresh() error {
return ErrPodRemoved
}
+ // Retrieve the pod's lock
+ lock, err := p.runtime.lockManager.RetrieveLock(p.config.LockID)
+ if err != nil {
+ return errors.Wrapf(err, "error retrieving lock for pod %s", p.ID())
+ }
+ p.lock = lock
+
// We need to recreate the pod's cgroup
if p.config.UsePodCgroup {
switch p.runtime.config.CgroupManager {
diff --git a/libpod/runtime.go b/libpod/runtime.go
index f390824dc..c7000d84a 100644
--- a/libpod/runtime.go
+++ b/libpod/runtime.go
@@ -1,6 +1,7 @@
package libpod
import (
+ "fmt"
"io/ioutil"
"os"
"os/exec"
@@ -11,6 +12,7 @@ import (
is "github.com/containers/image/storage"
"github.com/containers/image/types"
"github.com/containers/libpod/libpod/image"
+ "github.com/containers/libpod/libpod/lock"
"github.com/containers/libpod/pkg/firewall"
sysreg "github.com/containers/libpod/pkg/registries"
"github.com/containers/libpod/pkg/rootless"
@@ -61,6 +63,14 @@ const (
DefaultInfraImage = "k8s.gcr.io/pause:3.1"
// DefaultInfraCommand to be run in an infra container
DefaultInfraCommand = "/pause"
+
+ // DefaultInitPath is the default path to the container-init binary
+ DefaultInitPath = "/usr/libexec/podman/catatonit"
+
+ // DefaultSHMLockPath is the default path for SHM locks
+ DefaultSHMLockPath = "/libpod_lock"
+ // DefaultRootlessSHMLockPath is the default path for rootless SHM locks
+ DefaultRootlessSHMLockPath = "/libpod_rootless_lock"
)
// A RuntimeOption is a functional option which alters the Runtime created by
@@ -75,17 +85,25 @@ type Runtime struct {
storageService *storageService
imageContext *types.SystemContext
ociRuntime *OCIRuntime
- lockDir string
netPlugin ocicni.CNIPlugin
- ociRuntimePath string
+ ociRuntimePath OCIRuntimePath
conmonPath string
valid bool
lock sync.RWMutex
imageRuntime *image.Runtime
firewallBackend firewall.FirewallBackend
+ lockManager lock.Manager
configuredFrom *runtimeConfiguredFrom
}
+// OCIRuntimePath contains information about an OCI runtime.
+type OCIRuntimePath struct {
+ // Name of the runtime to refer to by the --runtime flag
+ Name string `toml:"name"`
+ // Paths to check for this executable
+ Paths []string `toml:"paths"`
+}
+
// RuntimeConfig contains configuration options used to set up the runtime
type RuntimeConfig struct {
// StorageConfig is the configuration used by containers/storage
@@ -108,10 +126,10 @@ type RuntimeConfig struct {
// cause conflicts in containers/storage
// As such this is not exposed via the config file
StateType RuntimeStateStore `toml:"-"`
- // RuntimePath is the path to OCI runtime binary for launching
- // containers
- // The first path pointing to a valid file will be used
- RuntimePath []string `toml:"runtime_path"`
+ // OCIRuntime is the OCI runtime to use.
+ OCIRuntime string `toml:"runtime"`
+ // OCIRuntimes are the set of configured OCI runtimes (default is runc)
+ OCIRuntimes map[string][]string `toml:"runtimes"`
// ConmonPath is the path to the Conmon binary used for managing
// containers
// The first path pointing to a valid file will be used
@@ -122,6 +140,8 @@ type RuntimeConfig struct {
// CGroupManager is the CGroup Manager to use
// Valid values are "cgroupfs" and "systemd"
CgroupManager string `toml:"cgroup_manager"`
+ // InitPath is the path to the container-init binary.
+ InitPath string `toml:"init_path"`
// StaticDir is the path to a persistent directory to store container
// files
StaticDir string `toml:"static_dir"`
@@ -160,6 +180,7 @@ type RuntimeConfig struct {
// and all containers and pods will be visible.
// The default namespace is "".
Namespace string `toml:"namespace,omitempty"`
+
// InfraImage is the image a pod infra container will use to manage namespaces
InfraImage string `toml:"infra_image"`
// InfraCommand is the command run to start up a pod infra container
@@ -174,6 +195,10 @@ type RuntimeConfig struct {
EnablePortReservation bool `toml:"enable_port_reservation"`
// EnableLabeling indicates wether libpod will support container labeling
EnableLabeling bool `toml:"label"`
+
+ // NumLocks is the number of locks to make available for containers and
+ // pods.
+ NumLocks uint32 `toml:"num_locks,omitempty"`
}
// runtimeConfiguredFrom is a struct used during early runtime init to help
@@ -196,14 +221,17 @@ var (
StorageConfig: storage.StoreOptions{},
ImageDefaultTransport: DefaultTransport,
StateType: BoltDBStateStore,
- RuntimePath: []string{
- "/usr/bin/runc",
- "/usr/sbin/runc",
- "/usr/local/bin/runc",
- "/usr/local/sbin/runc",
- "/sbin/runc",
- "/bin/runc",
- "/usr/lib/cri-o-runc/sbin/runc",
+ OCIRuntime: "runc",
+ OCIRuntimes: map[string][]string{
+ "runc": {
+ "/usr/bin/runc",
+ "/usr/sbin/runc",
+ "/usr/local/bin/runc",
+ "/usr/local/sbin/runc",
+ "/sbin/runc",
+ "/bin/runc",
+ "/usr/lib/cri-o-runc/sbin/runc",
+ },
},
ConmonPath: []string{
"/usr/libexec/podman/conmon",
@@ -217,6 +245,7 @@ var (
ConmonEnvVars: []string{
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
},
+ InitPath: DefaultInitPath,
CgroupManager: SystemdCgroupsManager,
StaticDir: filepath.Join(storage.DefaultStoreOptions.GraphRoot, "libpod"),
TmpDir: "",
@@ -228,6 +257,7 @@ var (
InfraImage: DefaultInfraImage,
EnablePortReservation: true,
EnableLabeling: true,
+ NumLocks: 2048,
}
)
@@ -395,8 +425,9 @@ func NewRuntimeFromConfig(configPath string, options ...RuntimeOption) (runtime
runtime.config = new(RuntimeConfig)
runtime.configuredFrom = new(runtimeConfiguredFrom)
- // Set two fields not in the TOML config
+ // Set three fields not in the TOML config
runtime.config.StateType = defaultRuntimeConfig.StateType
+ runtime.config.OCIRuntime = defaultRuntimeConfig.OCIRuntime
runtime.config.StorageConfig = storage.StoreOptions{}
// Check to see if the given configuration file exists
@@ -434,22 +465,35 @@ func NewRuntimeFromConfig(configPath string, options ...RuntimeOption) (runtime
func makeRuntime(runtime *Runtime) (err error) {
// Find a working OCI runtime binary
foundRuntime := false
- for _, path := range runtime.config.RuntimePath {
- stat, err := os.Stat(path)
- if err != nil {
- continue
- }
- if stat.IsDir() {
- continue
- }
+ // If runtime is an absolute path, then use it as it is.
+ if runtime.config.OCIRuntime[0] == '/' {
foundRuntime = true
- runtime.ociRuntimePath = path
- break
+ runtime.ociRuntimePath = OCIRuntimePath{Name: filepath.Base(runtime.config.OCIRuntime), Paths: []string{runtime.config.OCIRuntime}}
+ } else {
+ // If not, look it up in the configuration.
+ paths := runtime.config.OCIRuntimes[runtime.config.OCIRuntime]
+ if paths != nil {
+ for _, path := range paths {
+ stat, err := os.Stat(path)
+ if err != nil {
+ if os.IsNotExist(err) {
+ continue
+ }
+ return errors.Wrapf(err, "cannot stat %s", path)
+ }
+ if !stat.Mode().IsRegular() {
+ continue
+ }
+ foundRuntime = true
+ runtime.ociRuntimePath = OCIRuntimePath{Name: runtime.config.OCIRuntime, Paths: []string{path}}
+ break
+ }
+ }
}
if !foundRuntime {
return errors.Wrapf(ErrInvalidArg,
"could not find a working binary (configured options: %v)",
- runtime.config.RuntimePath)
+ runtime.config.OCIRuntimes)
}
// Find a working conmon binary
@@ -605,7 +649,7 @@ func makeRuntime(runtime *Runtime) (err error) {
}
// Make an OCI runtime to perform container operations
- ociRuntime, err := newOCIRuntime("runc", runtime.ociRuntimePath,
+ ociRuntime, err := newOCIRuntime(runtime.ociRuntimePath,
runtime.conmonPath, runtime.config.ConmonEnvVars,
runtime.config.CgroupManager, runtime.config.TmpDir,
runtime.config.MaxLogSize, runtime.config.NoPivotRoot,
@@ -615,17 +659,6 @@ func makeRuntime(runtime *Runtime) (err error) {
}
runtime.ociRuntime = ociRuntime
- // Make a directory to hold container lockfiles
- lockDir := filepath.Join(runtime.config.TmpDir, "lock")
- if err := os.MkdirAll(lockDir, 0755); err != nil {
- // The directory is allowed to exist
- if !os.IsExist(err) {
- return errors.Wrapf(err, "error creating runtime lockfiles directory %s",
- lockDir)
- }
- }
- runtime.lockDir = lockDir
-
// Make the per-boot files directory if it does not exist
if err := os.MkdirAll(runtime.config.TmpDir, 0755); err != nil {
// The directory is allowed to exist
@@ -670,6 +703,7 @@ func makeRuntime(runtime *Runtime) (err error) {
// and use it to lock important operations
aliveLock.Lock()
locked := true
+ doRefresh := false
defer func() {
if locked {
aliveLock.Unlock()
@@ -682,22 +716,46 @@ func makeRuntime(runtime *Runtime) (err error) {
// empty state only creates a single file
// As such, it's not really a performance concern
if os.IsNotExist(err) {
- if os.Geteuid() != 0 {
- aliveLock.Unlock()
- locked = false
- if err2 := runtime.refreshRootless(); err2 != nil {
- return err2
- }
- } else {
- if err2 := runtime.refresh(runtimeAliveFile); err2 != nil {
- return err2
- }
- }
+ doRefresh = true
} else {
return errors.Wrapf(err, "error reading runtime status file %s", runtimeAliveFile)
}
}
+ lockPath := DefaultSHMLockPath
+ if rootless.IsRootless() {
+ lockPath = fmt.Sprintf("%s_%d", DefaultRootlessSHMLockPath, rootless.GetRootlessUID())
+ }
+ // Set up the lock manager
+ manager, err := lock.OpenSHMLockManager(lockPath, runtime.config.NumLocks)
+ if err != nil {
+ if os.IsNotExist(errors.Cause(err)) {
+ manager, err = lock.NewSHMLockManager(lockPath, runtime.config.NumLocks)
+ if err != nil {
+ return err
+ }
+ } else {
+ return err
+ }
+ }
+ runtime.lockManager = manager
+
+ // If we need to refresh the state, do it now - things are guaranteed to
+ // be set up by now.
+ if doRefresh {
+ if os.Geteuid() != 0 {
+ aliveLock.Unlock()
+ locked = false
+ if err2 := runtime.refreshRootless(); err2 != nil {
+ return err2
+ }
+ } else {
+ if err2 := runtime.refresh(runtimeAliveFile); err2 != nil {
+ return err2
+ }
+ }
+ }
+
// Mark the runtime as valid - ready to be used, cannot be modified
// further
runtime.valid = true
@@ -771,7 +829,11 @@ func (r *Runtime) refreshRootless() error {
// Take advantage of a command that requires a new userns
// so that we are running as the root user and able to use refresh()
cmd := exec.Command(os.Args[0], "info")
- return cmd.Run()
+ err := cmd.Run()
+ if err != nil {
+ return errors.Wrapf(err, "Error running %s info while refreshing state", os.Args[0])
+ }
+ return nil
}
// Reconfigures the runtime after a reboot
@@ -793,19 +855,22 @@ func (r *Runtime) refresh(alivePath string) error {
if err != nil {
return errors.Wrapf(err, "error retrieving all pods from state")
}
+ // No locks are taken during pod and container refresh.
+ // Furthermore, the pod and container refresh() functions are not
+ // allowed to take locks themselves.
+ // We cannot assume that any pod or container has a valid lock until
+ // after this function has returned.
+ // The runtime alive lock should suffice to provide mutual exclusion
+ // until this has run.
for _, ctr := range ctrs {
- ctr.lock.Lock()
if err := ctr.refresh(); err != nil {
logrus.Errorf("Error refreshing container %s: %v", ctr.ID(), err)
}
- ctr.lock.Unlock()
}
for _, pod := range pods {
- pod.lock.Lock()
if err := pod.refresh(); err != nil {
logrus.Errorf("Error refreshing pod %s: %v", pod.ID(), err)
}
- pod.lock.Unlock()
}
// Create a file indicating the runtime is alive and ready
diff --git a/libpod/runtime_ctr.go b/libpod/runtime_ctr.go
index a9095c6d1..6d5ce5a7e 100644
--- a/libpod/runtime_ctr.go
+++ b/libpod/runtime_ctr.go
@@ -9,7 +9,6 @@ import (
"time"
"github.com/containers/libpod/pkg/rootless"
- "github.com/containers/storage"
"github.com/containers/storage/pkg/stringid"
spec "github.com/opencontainers/runtime-spec/specs-go"
"github.com/pkg/errors"
@@ -48,8 +47,8 @@ func (r *Runtime) newContainer(ctx context.Context, rSpec *spec.Spec, options ..
}
ctr := new(Container)
- ctr.config = new(Config)
- ctr.state = new(containerState)
+ ctr.config = new(ContainerConfig)
+ ctr.state = new(ContainerState)
ctr.config.ID = stringid.GenerateNonCryptoID()
@@ -61,17 +60,10 @@ func (r *Runtime) newContainer(ctx context.Context, rSpec *spec.Spec, options ..
ctr.state.BindMounts = make(map[string]string)
- // Path our lock file will reside at
- lockPath := filepath.Join(r.lockDir, ctr.config.ID)
- // Grab a lockfile at the given path
- lock, err := storage.GetLockfile(lockPath)
- if err != nil {
- return nil, errors.Wrapf(err, "error creating lockfile for new container")
- }
- ctr.lock = lock
-
ctr.config.StopTimeout = CtrRemoveTimeout
+ ctr.config.OCIRuntime = r.config.OCIRuntime
+
// Set namespace based on current runtime namespace
// Do so before options run so they can override it
if r.config.Namespace != "" {
@@ -85,6 +77,19 @@ func (r *Runtime) newContainer(ctx context.Context, rSpec *spec.Spec, options ..
}
}
+ // Allocate a lock for the container
+ lock, err := r.lockManager.AllocateLock()
+ if err != nil {
+ return nil, errors.Wrapf(err, "error allocating lock for new container")
+ }
+ ctr.lock = lock
+ ctr.config.LockID = ctr.lock.ID()
+ logrus.Debugf("Allocated lock %d for container %s", ctr.lock.ID(), ctr.ID())
+
+ ctr.valid = true
+ ctr.state.State = ContainerStateConfigured
+ ctr.runtime = r
+
ctr.valid = true
ctr.state.State = ContainerStateConfigured
@@ -379,6 +384,15 @@ func (r *Runtime) removeContainer(ctx context.Context, c *Container, force bool)
}
}
+ // Deallocate the container's lock
+ if err := c.lock.Free(); err != nil {
+ if cleanupErr == nil {
+ cleanupErr = err
+ } else {
+ logrus.Errorf("free container lock: %v", err)
+ }
+ }
+
return cleanupErr
}
diff --git a/libpod/runtime_pod_linux.go b/libpod/runtime_pod_linux.go
index 3d6fad52f..c6d497c0c 100644
--- a/libpod/runtime_pod_linux.go
+++ b/libpod/runtime_pod_linux.go
@@ -23,7 +23,7 @@ func (r *Runtime) NewPod(ctx context.Context, options ...PodCreateOption) (*Pod,
return nil, ErrRuntimeStopped
}
- pod, err := newPod(r.lockDir, r)
+ pod, err := newPod(r)
if err != nil {
return nil, errors.Wrapf(err, "error creating pod")
}
@@ -48,6 +48,14 @@ func (r *Runtime) NewPod(ctx context.Context, options ...PodCreateOption) (*Pod,
pod.config.Name = name
}
+ // Allocate a lock for the pod
+ lock, err := r.lockManager.AllocateLock()
+ if err != nil {
+ return nil, errors.Wrapf(err, "error allocating lock for new pod")
+ }
+ pod.lock = lock
+ pod.config.LockID = pod.lock.ID()
+
pod.valid = true
// Check CGroup parent sanity, and set it if it was not set
@@ -239,6 +247,11 @@ func (r *Runtime) removePod(ctx context.Context, p *Pod, removeCtrs, force bool)
return err
}
}
+
+ // Free the container's lock
+ if err := ctr.lock.Free(); err != nil {
+ return err
+ }
}
// Remove containers from the state
diff --git a/libpod/runtime_volume_linux.go b/libpod/runtime_volume_linux.go
index 5cc0938f0..0727cfedf 100644
--- a/libpod/runtime_volume_linux.go
+++ b/libpod/runtime_volume_linux.go
@@ -8,7 +8,6 @@ import (
"path/filepath"
"strings"
- "github.com/containers/storage"
"github.com/containers/storage/pkg/stringid"
"github.com/opencontainers/selinux/go-selinux/label"
"github.com/pkg/errors"
@@ -68,14 +67,12 @@ func (r *Runtime) newVolume(ctx context.Context, options ...VolumeCreateOption)
}
volume.config.MountPoint = fullVolPath
- // Path our lock file will reside at
- lockPath := filepath.Join(r.lockDir, volume.config.Name)
- // Grab a lockfile at the given path
- lock, err := storage.GetLockfile(lockPath)
+ lock, err := r.lockManager.AllocateLock()
if err != nil {
- return nil, errors.Wrapf(err, "error creating lockfile for new volume")
+ return nil, errors.Wrapf(err, "error allocating lock for new volume")
}
volume.lock = lock
+ volume.config.LockID = volume.lock.ID()
volume.valid = true
diff --git a/libpod/runtime_volume_unsupported.go b/libpod/runtime_volume_unsupported.go
new file mode 100644
index 000000000..d87459759
--- /dev/null
+++ b/libpod/runtime_volume_unsupported.go
@@ -0,0 +1,19 @@
+// +build !linux
+
+package libpod
+
+import (
+ "context"
+)
+
+func (r *Runtime) removeVolume(ctx context.Context, v *Volume, force, prune bool) error {
+ return ErrNotImplemented
+}
+
+func (r *Runtime) newVolume(ctx context.Context, options ...VolumeCreateOption) (*Volume, error) {
+ return nil, ErrNotImplemented
+}
+
+func (r *Runtime) NewVolume(ctx context.Context, options ...VolumeCreateOption) (*Volume, error) {
+ return nil, ErrNotImplemented
+}
diff --git a/libpod/state_test.go b/libpod/state_test.go
index 708ce7d4e..4bd00ab55 100644
--- a/libpod/state_test.go
+++ b/libpod/state_test.go
@@ -8,16 +8,17 @@ import (
"testing"
"time"
+ "github.com/containers/libpod/libpod/lock"
"github.com/containers/storage"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
-// Returns state, tmp directory containing all state files, locks directory
-// (subdirectory of tmp dir), and error
+// Returns state, tmp directory containing all state files, lock manager, and
+// error.
// Closing the state and removing the given tmp directory should be sufficient
-// to clean up
-type emptyStateFunc func() (State, string, string, error)
+// to clean up.
+type emptyStateFunc func() (State, string, lock.Manager, error)
const (
tmpDirPrefix = "libpod_state_test_"
@@ -31,10 +32,10 @@ var (
)
// Get an empty BoltDB state for use in tests
-func getEmptyBoltState() (s State, p string, p2 string, err error) {
+func getEmptyBoltState() (s State, p string, m lock.Manager, err error) {
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
if err != nil {
- return nil, "", "", err
+ return nil, "", nil, err
}
defer func() {
if err != nil {
@@ -43,30 +44,30 @@ func getEmptyBoltState() (s State, p string, p2 string, err error) {
}()
dbPath := filepath.Join(tmpDir, "db.sql")
- lockDir := filepath.Join(tmpDir, "locks")
- if err := os.Mkdir(lockDir, 0755); err != nil {
- return nil, "", "", err
+ lockManager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ return nil, "", nil, err
}
runtime := new(Runtime)
runtime.config = new(RuntimeConfig)
runtime.config.StorageConfig = storage.StoreOptions{}
- runtime.lockDir = lockDir
+ runtime.lockManager = lockManager
state, err := NewBoltState(dbPath, runtime)
if err != nil {
- return nil, "", "", err
+ return nil, "", nil, err
}
- return state, tmpDir, lockDir, nil
+ return state, tmpDir, lockManager, nil
}
// Get an empty in-memory state for use in tests
-func getEmptyInMemoryState() (s State, p string, p2 string, err error) {
+func getEmptyInMemoryState() (s State, p string, m lock.Manager, err error) {
tmpDir, err := ioutil.TempDir("", tmpDirPrefix)
if err != nil {
- return nil, "", "", err
+ return nil, "", nil, err
}
defer func() {
if err != nil {
@@ -76,17 +77,20 @@ func getEmptyInMemoryState() (s State, p string, p2 string, err error) {
state, err := NewInMemoryState()
if err != nil {
- return nil, "", "", err
+ return nil, "", nil, err
+ }
+
+ lockManager, err := lock.NewInMemoryManager(16)
+ if err != nil {
+ return nil, "", nil, err
}
- // Don't need a separate locks dir as InMemoryState stores nothing on
- // disk
- return state, tmpDir, tmpDir, nil
+ return state, tmpDir, lockManager, nil
}
-func runForAllStates(t *testing.T, testFunc func(*testing.T, State, string)) {
+func runForAllStates(t *testing.T, testFunc func(*testing.T, State, lock.Manager)) {
for stateName, stateFunc := range testedStates {
- state, path, lockPath, err := stateFunc()
+ state, path, manager, err := stateFunc()
if err != nil {
t.Fatalf("Error initializing state %s: %v", stateName, err)
}
@@ -94,7 +98,7 @@ func runForAllStates(t *testing.T, testFunc func(*testing.T, State, string)) {
defer state.Close()
success := t.Run(stateName, func(t *testing.T) {
- testFunc(t, state, lockPath)
+ testFunc(t, state, manager)
})
if !success {
t.Fail()
@@ -103,8 +107,8 @@ func runForAllStates(t *testing.T, testFunc func(*testing.T, State, string)) {
}
func TestAddAndGetContainer(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -118,10 +122,10 @@ func TestAddAndGetContainer(t *testing.T) {
}
func TestAddAndGetContainerFromMultiple(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr1)
@@ -138,8 +142,8 @@ func TestAddAndGetContainerFromMultiple(t *testing.T) {
}
func TestGetContainerPodSameIDFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -151,17 +155,17 @@ func TestGetContainerPodSameIDFails(t *testing.T) {
}
func TestAddInvalidContainerFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- err := state.AddContainer(&Container{config: &Config{ID: "1234"}})
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ err := state.AddContainer(&Container{config: &ContainerConfig{ID: "1234"}})
assert.Error(t, err)
})
}
func TestAddDuplicateCtrIDFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestContainer(testCtr1.ID(), "test2", lockPath)
+ testCtr2, err := getTestContainer(testCtr1.ID(), "test2", manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr1)
@@ -177,10 +181,10 @@ func TestAddDuplicateCtrIDFails(t *testing.T) {
}
func TestAddDuplicateCtrNameFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestContainer(strings.Repeat("2", 32), testCtr1.Name(), lockPath)
+ testCtr2, err := getTestContainer(strings.Repeat("2", 32), testCtr1.Name(), manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr1)
@@ -196,10 +200,10 @@ func TestAddDuplicateCtrNameFails(t *testing.T) {
}
func TestAddCtrPodDupIDFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestContainer(testPod.ID(), "testCtr", lockPath)
+ testCtr, err := getTestContainer(testPod.ID(), "testCtr", manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -215,10 +219,10 @@ func TestAddCtrPodDupIDFails(t *testing.T) {
}
func TestAddCtrPodDupNameFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestContainer(strings.Repeat("2", 32), testPod.Name(), lockPath)
+ testCtr, err := getTestContainer(strings.Repeat("2", 32), testPod.Name(), manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -234,11 +238,11 @@ func TestAddCtrPodDupNameFails(t *testing.T) {
}
func TestAddCtrInPodFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -256,16 +260,16 @@ func TestAddCtrInPodFails(t *testing.T) {
}
func TestAddCtrDepInPodFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.UserNsCtr = testCtr1.ID()
@@ -288,10 +292,10 @@ func TestAddCtrDepInPodFails(t *testing.T) {
}
func TestAddCtrDepInSameNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr2.config.UserNsCtr = testCtr1.config.ID
@@ -312,10 +316,10 @@ func TestAddCtrDepInSameNamespaceSucceeds(t *testing.T) {
}
func TestAddCtrDepInDifferentNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr2.config.UserNsCtr = testCtr1.config.ID
@@ -338,8 +342,8 @@ func TestAddCtrDepInDifferentNamespaceFails(t *testing.T) {
}
func TestAddCtrSameNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -357,8 +361,8 @@ func TestAddCtrSameNamespaceSucceeds(t *testing.T) {
}
func TestAddCtrDifferentNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -377,22 +381,22 @@ func TestAddCtrDifferentNamespaceFails(t *testing.T) {
}
func TestGetNonexistentContainerFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.Container("does not exist")
assert.Error(t, err)
})
}
func TestGetContainerWithEmptyIDFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.Container("")
assert.Error(t, err)
})
}
func TestGetContainerInDifferentNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test2"
@@ -408,8 +412,8 @@ func TestGetContainerInDifferentNamespaceFails(t *testing.T) {
}
func TestGetContainerInSameNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -427,8 +431,8 @@ func TestGetContainerInSameNamespaceSucceeds(t *testing.T) {
}
func TestGetContainerInNamespaceWhileNotInNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -444,22 +448,22 @@ func TestGetContainerInNamespaceWhileNotInNamespaceSucceeds(t *testing.T) {
}
func TestLookupContainerWithEmptyIDFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.LookupContainer("")
assert.Error(t, err)
})
}
func TestLookupNonexistentContainerFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.LookupContainer("does not exist")
assert.Error(t, err)
})
}
func TestLookupContainerByFullID(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -473,8 +477,8 @@ func TestLookupContainerByFullID(t *testing.T) {
}
func TestLookupContainerByUniquePartialID(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -488,10 +492,10 @@ func TestLookupContainerByUniquePartialID(t *testing.T) {
}
func TestLookupContainerByNonUniquePartialIDFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestContainer(strings.Repeat("0", 32), "test1", lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestContainer(strings.Repeat("0", 32), "test1", manager)
assert.NoError(t, err)
- testCtr2, err := getTestContainer(strings.Repeat("0", 31)+"1", "test2", lockPath)
+ testCtr2, err := getTestContainer(strings.Repeat("0", 31)+"1", "test2", manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr1)
@@ -506,8 +510,8 @@ func TestLookupContainerByNonUniquePartialIDFails(t *testing.T) {
}
func TestLookupContainerByName(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -521,8 +525,8 @@ func TestLookupContainerByName(t *testing.T) {
}
func TestLookupCtrByPodNameFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -534,8 +538,8 @@ func TestLookupCtrByPodNameFails(t *testing.T) {
}
func TestLookupCtrByPodIDFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -547,8 +551,8 @@ func TestLookupCtrByPodIDFails(t *testing.T) {
}
func TestLookupCtrInSameNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -566,8 +570,8 @@ func TestLookupCtrInSameNamespaceSucceeds(t *testing.T) {
}
func TestLookupCtrInDifferentNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -583,11 +587,11 @@ func TestLookupCtrInDifferentNamespaceFails(t *testing.T) {
}
func TestLookupContainerMatchInDifferentNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestContainer(strings.Repeat("0", 32), "test1", lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestContainer(strings.Repeat("0", 32), "test1", manager)
assert.NoError(t, err)
testCtr1.config.Namespace = "test2"
- testCtr2, err := getTestContainer(strings.Repeat("0", 31)+"1", "test2", lockPath)
+ testCtr2, err := getTestContainer(strings.Repeat("0", 31)+"1", "test2", manager)
assert.NoError(t, err)
testCtr2.config.Namespace = "test1"
@@ -607,14 +611,14 @@ func TestLookupContainerMatchInDifferentNamespaceSucceeds(t *testing.T) {
}
func TestHasContainerEmptyIDFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.HasContainer("")
assert.Error(t, err)
})
}
func TestHasContainerNoSuchContainerReturnsFalse(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
exists, err := state.HasContainer("does not exist")
assert.NoError(t, err)
assert.False(t, exists)
@@ -622,8 +626,8 @@ func TestHasContainerNoSuchContainerReturnsFalse(t *testing.T) {
}
func TestHasContainerFindsContainer(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -636,8 +640,8 @@ func TestHasContainerFindsContainer(t *testing.T) {
}
func TestHasContainerPodIDIsFalse(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -650,8 +654,8 @@ func TestHasContainerPodIDIsFalse(t *testing.T) {
}
func TestHasContainerSameNamespaceIsTrue(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -668,8 +672,8 @@ func TestHasContainerSameNamespaceIsTrue(t *testing.T) {
}
func TestHasContainerDifferentNamespaceIsFalse(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -686,8 +690,8 @@ func TestHasContainerDifferentNamespaceIsFalse(t *testing.T) {
}
func TestSaveAndUpdateContainer(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -711,8 +715,8 @@ func TestSaveAndUpdateContainer(t *testing.T) {
}
func TestSaveAndUpdateContainerSameNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -740,8 +744,8 @@ func TestSaveAndUpdateContainerSameNamespaceSucceeds(t *testing.T) {
}
func TestUpdateContainerNotInDatabaseReturnsError(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.UpdateContainer(testCtr)
@@ -751,15 +755,15 @@ func TestUpdateContainerNotInDatabaseReturnsError(t *testing.T) {
}
func TestUpdateInvalidContainerReturnsError(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- err := state.UpdateContainer(&Container{config: &Config{ID: "1234"}})
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ err := state.UpdateContainer(&Container{config: &ContainerConfig{ID: "1234"}})
assert.Error(t, err)
})
}
func TestUpdateContainerNotInNamespaceReturnsError(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -775,15 +779,15 @@ func TestUpdateContainerNotInNamespaceReturnsError(t *testing.T) {
}
func TestSaveInvalidContainerReturnsError(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- err := state.SaveContainer(&Container{config: &Config{ID: "1234"}})
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ err := state.SaveContainer(&Container{config: &ContainerConfig{ID: "1234"}})
assert.Error(t, err)
})
}
func TestSaveContainerNotInStateReturnsError(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.SaveContainer(testCtr)
@@ -793,8 +797,8 @@ func TestSaveContainerNotInStateReturnsError(t *testing.T) {
}
func TestSaveContainerNotInNamespaceReturnsError(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -810,8 +814,8 @@ func TestSaveContainerNotInNamespaceReturnsError(t *testing.T) {
}
func TestRemoveContainer(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -831,8 +835,8 @@ func TestRemoveContainer(t *testing.T) {
}
func TestRemoveNonexistantContainerFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.RemoveContainer(testCtr)
@@ -842,8 +846,8 @@ func TestRemoveNonexistantContainerFails(t *testing.T) {
}
func TestRemoveContainerNotInNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -869,7 +873,7 @@ func TestRemoveContainerNotInNamespaceFails(t *testing.T) {
}
func TestGetAllContainersOnNewStateIsEmpty(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
ctrs, err := state.AllContainers()
assert.NoError(t, err)
assert.Equal(t, 0, len(ctrs))
@@ -877,8 +881,8 @@ func TestGetAllContainersOnNewStateIsEmpty(t *testing.T) {
}
func TestGetAllContainersWithOneContainer(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -893,10 +897,10 @@ func TestGetAllContainersWithOneContainer(t *testing.T) {
}
func TestGetAllContainersTwoContainers(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr1)
@@ -912,8 +916,8 @@ func TestGetAllContainersTwoContainers(t *testing.T) {
}
func TestGetAllContainersNoContainerInNamespace(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -930,13 +934,13 @@ func TestGetAllContainersNoContainerInNamespace(t *testing.T) {
}
func TestGetContainerOneContainerInNamespace(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr1.config.Namespace = "test1"
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr1)
@@ -956,15 +960,15 @@ func TestGetContainerOneContainerInNamespace(t *testing.T) {
}
func TestContainerInUseInvalidContainer(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.ContainerInUse(&Container{})
assert.Error(t, err)
})
}
func TestContainerInUseCtrNotInState(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
_, err = state.ContainerInUse(testCtr)
assert.Error(t, err)
@@ -972,8 +976,8 @@ func TestContainerInUseCtrNotInState(t *testing.T) {
}
func TestContainerInUseCtrNotInNamespace(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -989,10 +993,10 @@ func TestContainerInUseCtrNotInNamespace(t *testing.T) {
}
func TestContainerInUseOneContainer(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr2.config.UserNsCtr = testCtr1.config.ID
@@ -1011,12 +1015,12 @@ func TestContainerInUseOneContainer(t *testing.T) {
}
func TestContainerInUseTwoContainers(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
- testCtr3, err := getTestCtrN("3", lockPath)
+ testCtr3, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.UserNsCtr = testCtr1.config.ID
@@ -1038,10 +1042,10 @@ func TestContainerInUseTwoContainers(t *testing.T) {
}
func TestContainerInUseOneContainerMultipleDependencies(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr2.config.UserNsCtr = testCtr1.config.ID
@@ -1061,10 +1065,10 @@ func TestContainerInUseOneContainerMultipleDependencies(t *testing.T) {
}
func TestContainerInUseGenericDependency(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr2.config.Dependencies = []string{testCtr1.config.ID}
@@ -1083,12 +1087,12 @@ func TestContainerInUseGenericDependency(t *testing.T) {
}
func TestContainerInUseMultipleGenericDependencies(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
- testCtr3, err := getTestCtrN("3", lockPath)
+ testCtr3, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr3.config.Dependencies = []string{testCtr1.config.ID, testCtr2.config.ID}
@@ -1115,10 +1119,10 @@ func TestContainerInUseMultipleGenericDependencies(t *testing.T) {
}
func TestContainerInUseGenericAndNamespaceDependencies(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr2.config.Dependencies = []string{testCtr1.config.ID}
@@ -1138,10 +1142,10 @@ func TestContainerInUseGenericAndNamespaceDependencies(t *testing.T) {
}
func TestCannotRemoveContainerWithDependency(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr2.config.UserNsCtr = testCtr1.config.ID
@@ -1162,10 +1166,10 @@ func TestCannotRemoveContainerWithDependency(t *testing.T) {
}
func TestCannotRemoveContainerWithGenericDependency(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr2.config.Dependencies = []string{testCtr1.config.ID}
@@ -1186,10 +1190,10 @@ func TestCannotRemoveContainerWithGenericDependency(t *testing.T) {
}
func TestCanRemoveContainerAfterDependencyRemoved(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr2.config.UserNsCtr = testCtr1.ID()
@@ -1213,10 +1217,10 @@ func TestCanRemoveContainerAfterDependencyRemoved(t *testing.T) {
}
func TestCanRemoveContainerAfterDependencyRemovedDuplicate(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr1, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr1, err := getTestCtr1(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtr2(lockPath)
+ testCtr2, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr2.config.UserNsCtr = testCtr1.ID()
@@ -1241,11 +1245,11 @@ func TestCanRemoveContainerAfterDependencyRemovedDuplicate(t *testing.T) {
}
func TestCannotUsePodAsDependency(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
- testPod, err := getTestPod2(lockPath)
+ testPod, err := getTestPod2(manager)
assert.NoError(t, err)
testCtr.config.UserNsCtr = testPod.ID()
@@ -1263,8 +1267,8 @@ func TestCannotUsePodAsDependency(t *testing.T) {
}
func TestCannotUseBadIDAsDependency(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.UserNsCtr = strings.Repeat("5", 32)
@@ -1279,8 +1283,8 @@ func TestCannotUseBadIDAsDependency(t *testing.T) {
}
func TestCannotUseBadIDAsGenericDependency(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
testCtr.config.Dependencies = []string{strings.Repeat("5", 32)}
@@ -1295,22 +1299,22 @@ func TestCannotUseBadIDAsGenericDependency(t *testing.T) {
}
func TestGetPodDoesNotExist(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.Pod("doesnotexist")
assert.Error(t, err)
})
}
func TestGetPodEmptyID(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.Pod("")
assert.Error(t, err)
})
}
func TestGetPodOnePod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -1324,11 +1328,11 @@ func TestGetPodOnePod(t *testing.T) {
}
func TestGetOnePodFromTwo(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod1, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod1, err := getTestPod1(manager)
assert.NoError(t, err)
- testPod2, err := getTestPod2(lockPath)
+ testPod2, err := getTestPod2(manager)
assert.NoError(t, err)
err = state.AddPod(testPod1)
@@ -1345,11 +1349,11 @@ func TestGetOnePodFromTwo(t *testing.T) {
}
func TestGetNotExistPodWithPods(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod1, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod1, err := getTestPod1(manager)
assert.NoError(t, err)
- testPod2, err := getTestPod2(lockPath)
+ testPod2, err := getTestPod2(manager)
assert.NoError(t, err)
err = state.AddPod(testPod1)
@@ -1364,8 +1368,8 @@ func TestGetNotExistPodWithPods(t *testing.T) {
}
func TestGetPodByCtrID(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -1377,8 +1381,8 @@ func TestGetPodByCtrID(t *testing.T) {
}
func TestGetPodInNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -1396,8 +1400,8 @@ func TestGetPodInNamespaceSucceeds(t *testing.T) {
}
func TestGetPodPodNotInNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -1413,22 +1417,22 @@ func TestGetPodPodNotInNamespaceFails(t *testing.T) {
}
func TestLookupPodEmptyID(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.LookupPod("")
assert.Error(t, err)
})
}
func TestLookupNotExistPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.LookupPod("doesnotexist")
assert.Error(t, err)
})
}
func TestLookupPodFullID(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -1442,8 +1446,8 @@ func TestLookupPodFullID(t *testing.T) {
}
func TestLookupPodUniquePartialID(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -1457,11 +1461,11 @@ func TestLookupPodUniquePartialID(t *testing.T) {
}
func TestLookupPodNonUniquePartialID(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod1, err := getTestPod(strings.Repeat("1", 32), "test1", lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod1, err := getTestPod(strings.Repeat("1", 32), "test1", manager)
assert.NoError(t, err)
- testPod2, err := getTestPod(strings.Repeat("1", 31)+"2", "test2", lockPath)
+ testPod2, err := getTestPod(strings.Repeat("1", 31)+"2", "test2", manager)
assert.NoError(t, err)
err = state.AddPod(testPod1)
@@ -1476,8 +1480,8 @@ func TestLookupPodNonUniquePartialID(t *testing.T) {
}
func TestLookupPodByName(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -1491,8 +1495,8 @@ func TestLookupPodByName(t *testing.T) {
}
func TestLookupPodByCtrID(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -1504,8 +1508,8 @@ func TestLookupPodByCtrID(t *testing.T) {
}
func TestLookupPodByCtrName(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -1517,8 +1521,8 @@ func TestLookupPodByCtrName(t *testing.T) {
}
func TestLookupPodInSameNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -1536,8 +1540,8 @@ func TestLookupPodInSameNamespaceSucceeds(t *testing.T) {
}
func TestLookupPodInDifferentNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -1553,13 +1557,13 @@ func TestLookupPodInDifferentNamespaceFails(t *testing.T) {
}
func TestLookupPodOneInDifferentNamespaceFindsRightPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod1, err := getTestPod(strings.Repeat("1", 32), "test1", lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod1, err := getTestPod(strings.Repeat("1", 32), "test1", manager)
assert.NoError(t, err)
testPod1.config.Namespace = "test1"
- testPod2, err := getTestPod(strings.Repeat("1", 31)+"2", "test2", lockPath)
+ testPod2, err := getTestPod(strings.Repeat("1", 31)+"2", "test2", manager)
assert.NoError(t, err)
testPod2.config.Namespace = "test2"
@@ -1580,14 +1584,14 @@ func TestLookupPodOneInDifferentNamespaceFindsRightPod(t *testing.T) {
}
func TestHasPodEmptyIDErrors(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.HasPod("")
assert.Error(t, err)
})
}
func TestHasPodNoSuchPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
exist, err := state.HasPod("notexist")
assert.NoError(t, err)
assert.False(t, exist)
@@ -1595,8 +1599,8 @@ func TestHasPodNoSuchPod(t *testing.T) {
}
func TestHasPodWrongIDFalse(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -1609,8 +1613,8 @@ func TestHasPodWrongIDFalse(t *testing.T) {
}
func TestHasPodRightIDTrue(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -1623,8 +1627,8 @@ func TestHasPodRightIDTrue(t *testing.T) {
}
func TestHasPodCtrIDFalse(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -1637,8 +1641,8 @@ func TestHasPodCtrIDFalse(t *testing.T) {
}
func TestHasPodSameNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -1655,8 +1659,8 @@ func TestHasPodSameNamespaceSucceeds(t *testing.T) {
}
func TestHasPodDifferentNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -1673,15 +1677,15 @@ func TestHasPodDifferentNamespaceFails(t *testing.T) {
}
func TestAddPodInvalidPodErrors(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
err := state.AddPod(&Pod{config: &PodConfig{}})
assert.Error(t, err)
})
}
func TestAddPodValidPodSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -1696,11 +1700,11 @@ func TestAddPodValidPodSucceeds(t *testing.T) {
}
func TestAddPodDuplicateIDFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod1, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod1, err := getTestPod1(manager)
assert.NoError(t, err)
- testPod2, err := getTestPod(testPod1.ID(), "testpod2", lockPath)
+ testPod2, err := getTestPod(testPod1.ID(), "testpod2", manager)
assert.NoError(t, err)
err = state.AddPod(testPod1)
@@ -1716,11 +1720,11 @@ func TestAddPodDuplicateIDFails(t *testing.T) {
}
func TestAddPodDuplicateNameFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod1, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod1, err := getTestPod1(manager)
assert.NoError(t, err)
- testPod2, err := getTestPod(strings.Repeat("2", 32), testPod1.Name(), lockPath)
+ testPod2, err := getTestPod(strings.Repeat("2", 32), testPod1.Name(), manager)
assert.NoError(t, err)
err = state.AddPod(testPod1)
@@ -1736,11 +1740,11 @@ func TestAddPodDuplicateNameFails(t *testing.T) {
}
func TestAddPodNonDuplicateSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod1, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod1, err := getTestPod1(manager)
assert.NoError(t, err)
- testPod2, err := getTestPod2(lockPath)
+ testPod2, err := getTestPod2(manager)
assert.NoError(t, err)
err = state.AddPod(testPod1)
@@ -1756,11 +1760,11 @@ func TestAddPodNonDuplicateSucceeds(t *testing.T) {
}
func TestAddPodCtrIDConflictFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
- testPod, err := getTestPod(testCtr.ID(), "testpod1", lockPath)
+ testPod, err := getTestPod(testCtr.ID(), "testpod1", manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -1776,11 +1780,11 @@ func TestAddPodCtrIDConflictFails(t *testing.T) {
}
func TestAddPodCtrNameConflictFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
- testPod, err := getTestPod(strings.Repeat("3", 32), testCtr.Name(), lockPath)
+ testPod, err := getTestPod(strings.Repeat("3", 32), testCtr.Name(), manager)
assert.NoError(t, err)
err = state.AddContainer(testCtr)
@@ -1796,8 +1800,8 @@ func TestAddPodCtrNameConflictFails(t *testing.T) {
}
func TestAddPodSameNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -1816,8 +1820,8 @@ func TestAddPodSameNamespaceSucceeds(t *testing.T) {
}
func TestAddPodDifferentNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -1836,15 +1840,15 @@ func TestAddPodDifferentNamespaceFails(t *testing.T) {
}
func TestRemovePodInvalidPodErrors(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
err := state.RemovePod(&Pod{config: &PodConfig{}})
assert.Error(t, err)
})
}
func TestRemovePodNotInStateFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.RemovePod(testPod)
@@ -1854,8 +1858,8 @@ func TestRemovePodNotInStateFails(t *testing.T) {
}
func TestRemovePodSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -1871,11 +1875,11 @@ func TestRemovePodSucceeds(t *testing.T) {
}
func TestRemovePodFromPods(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod1, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod1, err := getTestPod1(manager)
assert.NoError(t, err)
- testPod2, err := getTestPod2(lockPath)
+ testPod2, err := getTestPod2(manager)
assert.NoError(t, err)
err = state.AddPod(testPod1)
@@ -1896,11 +1900,11 @@ func TestRemovePodFromPods(t *testing.T) {
}
func TestRemovePodNotEmptyFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -1920,11 +1924,11 @@ func TestRemovePodNotEmptyFails(t *testing.T) {
}
func TestRemovePodAfterEmptySucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -1947,8 +1951,8 @@ func TestRemovePodAfterEmptySucceeds(t *testing.T) {
}
func TestRemovePodNotInNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -1970,7 +1974,7 @@ func TestRemovePodNotInNamespaceFails(t *testing.T) {
}
func TestAllPodsEmptyOnEmptyState(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
allPods, err := state.AllPods()
assert.NoError(t, err)
assert.Equal(t, 0, len(allPods))
@@ -1978,8 +1982,8 @@ func TestAllPodsEmptyOnEmptyState(t *testing.T) {
}
func TestAllPodsFindsPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -1994,14 +1998,14 @@ func TestAllPodsFindsPod(t *testing.T) {
}
func TestAllPodsMultiplePods(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod1, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod1, err := getTestPod1(manager)
assert.NoError(t, err)
- testPod2, err := getTestPod2(lockPath)
+ testPod2, err := getTestPod2(manager)
assert.NoError(t, err)
- testPod3, err := getTestPodN("3", lockPath)
+ testPod3, err := getTestPodN("3", manager)
assert.NoError(t, err)
allPods1, err := state.AllPods()
@@ -2032,8 +2036,8 @@ func TestAllPodsMultiplePods(t *testing.T) {
}
func TestAllPodsPodInDifferentNamespaces(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -2050,13 +2054,13 @@ func TestAllPodsPodInDifferentNamespaces(t *testing.T) {
}
func TestAllPodsOnePodInDifferentNamespace(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod1, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod1, err := getTestPod1(manager)
assert.NoError(t, err)
testPod1.config.Namespace = "test1"
- testPod2, err := getTestPod2(lockPath)
+ testPod2, err := getTestPod2(manager)
assert.NoError(t, err)
testPod2.config.Namespace = "test2"
@@ -2078,15 +2082,15 @@ func TestAllPodsOnePodInDifferentNamespace(t *testing.T) {
}
func TestPodHasContainerNoSuchPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.PodHasContainer(&Pod{config: &PodConfig{}}, strings.Repeat("0", 32))
assert.Error(t, err)
})
}
func TestPodHasContainerEmptyCtrID(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -2098,8 +2102,8 @@ func TestPodHasContainerEmptyCtrID(t *testing.T) {
}
func TestPodHasContainerNoSuchCtr(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -2112,11 +2116,11 @@ func TestPodHasContainerNoSuchCtr(t *testing.T) {
}
func TestPodHasContainerCtrNotInPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -2132,11 +2136,11 @@ func TestPodHasContainerCtrNotInPod(t *testing.T) {
}
func TestPodHasContainerSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -2154,8 +2158,8 @@ func TestPodHasContainerSucceeds(t *testing.T) {
}
func TestPodHasContainerPodNotInNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -2171,15 +2175,15 @@ func TestPodHasContainerPodNotInNamespaceFails(t *testing.T) {
}
func TestPodContainersByIDInvalidPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.PodContainersByID(&Pod{config: &PodConfig{}})
assert.Error(t, err)
})
}
func TestPodContainerdByIDPodNotInState(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
_, err = state.PodContainersByID(testPod)
@@ -2189,8 +2193,8 @@ func TestPodContainerdByIDPodNotInState(t *testing.T) {
}
func TestPodContainersByIDEmptyPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -2203,11 +2207,11 @@ func TestPodContainersByIDEmptyPod(t *testing.T) {
}
func TestPodContainersByIDOneContainer(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -2226,19 +2230,19 @@ func TestPodContainersByIDOneContainer(t *testing.T) {
}
func TestPodContainersByIDMultipleContainers(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
- testCtr3, err := getTestCtrN("4", lockPath)
+ testCtr3, err := getTestCtrN("4", manager)
assert.NoError(t, err)
testCtr3.config.Pod = testPod.ID()
@@ -2273,8 +2277,8 @@ func TestPodContainersByIDMultipleContainers(t *testing.T) {
}
func TestPodContainerByIDPodNotInNamespace(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -2290,15 +2294,15 @@ func TestPodContainerByIDPodNotInNamespace(t *testing.T) {
}
func TestPodContainersInvalidPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
_, err := state.PodContainers(&Pod{config: &PodConfig{}})
assert.Error(t, err)
})
}
func TestPodContainersPodNotInState(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
_, err = state.PodContainers(testPod)
@@ -2308,8 +2312,8 @@ func TestPodContainersPodNotInState(t *testing.T) {
}
func TestPodContainersEmptyPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -2322,11 +2326,11 @@ func TestPodContainersEmptyPod(t *testing.T) {
}
func TestPodContainersOneContainer(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -2346,19 +2350,19 @@ func TestPodContainersOneContainer(t *testing.T) {
}
func TestPodContainersMultipleContainers(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
- testCtr3, err := getTestCtrN("4", lockPath)
+ testCtr3, err := getTestCtrN("4", manager)
assert.NoError(t, err)
testCtr3.config.Pod = testPod.ID()
@@ -2393,8 +2397,8 @@ func TestPodContainersMultipleContainers(t *testing.T) {
}
func TestPodContainersPodNotInNamespace(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -2410,15 +2414,15 @@ func TestPodContainersPodNotInNamespace(t *testing.T) {
}
func TestRemovePodContainersInvalidPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
err := state.RemovePodContainers(&Pod{config: &PodConfig{}})
assert.Error(t, err)
})
}
func TestRemovePodContainersPodNotInState(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.RemovePodContainers(testPod)
@@ -2428,8 +2432,8 @@ func TestRemovePodContainersPodNotInState(t *testing.T) {
}
func TestRemovePodContainersNoContainers(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -2445,11 +2449,11 @@ func TestRemovePodContainersNoContainers(t *testing.T) {
}
func TestRemovePodContainersOneContainer(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -2469,15 +2473,15 @@ func TestRemovePodContainersOneContainer(t *testing.T) {
}
func TestRemovePodContainersPreservesCtrOutsidePod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -2503,15 +2507,15 @@ func TestRemovePodContainersPreservesCtrOutsidePod(t *testing.T) {
}
func TestRemovePodContainersTwoContainers(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
@@ -2534,15 +2538,15 @@ func TestRemovePodContainersTwoContainers(t *testing.T) {
}
func TestRemovePodContainerDependencyInPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
testCtr2.config.IPCNsCtr = testCtr1.ID()
@@ -2566,8 +2570,8 @@ func TestRemovePodContainerDependencyInPod(t *testing.T) {
}
func TestRemoveContainersNotInNamespace(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -2583,8 +2587,8 @@ func TestRemoveContainersNotInNamespace(t *testing.T) {
}
func TestAddContainerToPodInvalidPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.AddContainerToPod(&Pod{config: &PodConfig{}}, testCtr)
@@ -2593,14 +2597,14 @@ func TestAddContainerToPodInvalidPod(t *testing.T) {
}
func TestAddContainerToPodInvalidCtr(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
assert.NoError(t, err)
- err = state.AddContainerToPod(testPod, &Container{config: &Config{ID: "1234"}})
+ err = state.AddContainerToPod(testPod, &Container{config: &ContainerConfig{ID: "1234"}})
assert.Error(t, err)
ctrs, err := state.PodContainersByID(testPod)
@@ -2610,11 +2614,11 @@ func TestAddContainerToPodInvalidCtr(t *testing.T) {
}
func TestAddContainerToPodPodNotInState(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -2625,11 +2629,11 @@ func TestAddContainerToPodPodNotInState(t *testing.T) {
}
func TestAddContainerToPodSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -2653,15 +2657,15 @@ func TestAddContainerToPodSucceeds(t *testing.T) {
}
func TestAddContainerToPodTwoContainers(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
@@ -2685,15 +2689,15 @@ func TestAddContainerToPodTwoContainers(t *testing.T) {
}
func TestAddContainerToPodWithAddContainer(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -2718,14 +2722,14 @@ func TestAddContainerToPodWithAddContainer(t *testing.T) {
}
func TestAddContainerToPodCtrIDConflict(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
- testCtr2, err := getTestContainer(testCtr1.ID(), "testCtr3", lockPath)
+ testCtr2, err := getTestContainer(testCtr1.ID(), "testCtr3", manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
@@ -2749,14 +2753,14 @@ func TestAddContainerToPodCtrIDConflict(t *testing.T) {
}
func TestAddContainerToPodCtrNameConflict(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
- testCtr2, err := getTestContainer(strings.Repeat("4", 32), testCtr1.Name(), lockPath)
+ testCtr2, err := getTestContainer(strings.Repeat("4", 32), testCtr1.Name(), manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
@@ -2780,11 +2784,11 @@ func TestAddContainerToPodCtrNameConflict(t *testing.T) {
}
func TestAddContainerToPodPodIDConflict(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestContainer(testPod.ID(), "testCtr", lockPath)
+ testCtr, err := getTestContainer(testPod.ID(), "testCtr", manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -2805,11 +2809,11 @@ func TestAddContainerToPodPodIDConflict(t *testing.T) {
}
func TestAddContainerToPodPodNameConflict(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestContainer(strings.Repeat("2", 32), testPod.Name(), lockPath)
+ testCtr, err := getTestContainer(strings.Repeat("2", 32), testPod.Name(), manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -2830,15 +2834,15 @@ func TestAddContainerToPodPodNameConflict(t *testing.T) {
}
func TestAddContainerToPodAddsDependencies(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
testCtr2.config.IPCNsCtr = testCtr1.ID()
@@ -2860,11 +2864,11 @@ func TestAddContainerToPodAddsDependencies(t *testing.T) {
}
func TestAddContainerToPodPodDependencyFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
testCtr.config.IPCNsCtr = testPod.ID()
@@ -2882,11 +2886,11 @@ func TestAddContainerToPodPodDependencyFails(t *testing.T) {
}
func TestAddContainerToPodBadDependencyFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
testCtr.config.IPCNsCtr = strings.Repeat("8", 32)
@@ -2904,14 +2908,14 @@ func TestAddContainerToPodBadDependencyFails(t *testing.T) {
}
func TestAddContainerToPodDependencyOutsidePodFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
testCtr2.config.IPCNsCtr = testCtr1.ID()
@@ -2940,17 +2944,17 @@ func TestAddContainerToPodDependencyOutsidePodFails(t *testing.T) {
}
func TestAddContainerToPodDependencyInSameNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
testCtr1.config.Namespace = "test1"
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
testCtr2.config.IPCNsCtr = testCtr1.ID()
@@ -2973,17 +2977,17 @@ func TestAddContainerToPodDependencyInSameNamespaceSucceeds(t *testing.T) {
}
func TestAddContainerToPodDependencyInSeparateNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
testCtr1.config.Namespace = "test1"
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
testCtr2.config.IPCNsCtr = testCtr1.ID()
@@ -3013,12 +3017,12 @@ func TestAddContainerToPodDependencyInSeparateNamespaceFails(t *testing.T) {
}
func TestAddContainerToPodSameNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
testCtr.config.Pod = testPod.ID()
@@ -3037,12 +3041,12 @@ func TestAddContainerToPodSameNamespaceSucceeds(t *testing.T) {
}
func TestAddContainerToPodDifferentNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test2"
testCtr.config.Pod = testPod.ID()
@@ -3060,11 +3064,11 @@ func TestAddContainerToPodDifferentNamespaceFails(t *testing.T) {
}
func TestAddContainerToPodNamespaceOnCtrFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
testCtr.config.Pod = testPod.ID()
@@ -3082,12 +3086,12 @@ func TestAddContainerToPodNamespaceOnCtrFails(t *testing.T) {
}
func TestAddContainerToPodNamespaceOnPodFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -3104,11 +3108,11 @@ func TestAddContainerToPodNamespaceOnPodFails(t *testing.T) {
}
func TestAddCtrToPodSameNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
- testPod, err := getTestPod2(lockPath)
+ testPod, err := getTestPod2(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -3131,11 +3135,11 @@ func TestAddCtrToPodSameNamespaceSucceeds(t *testing.T) {
}
func TestAddCtrToPodDifferentNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
- testPod, err := getTestPod2(lockPath)
+ testPod, err := getTestPod2(manager)
assert.NoError(t, err)
testCtr.config.Namespace = "test1"
@@ -3159,8 +3163,8 @@ func TestAddCtrToPodDifferentNamespaceFails(t *testing.T) {
}
func TestRemoveContainerFromPodBadPodFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testCtr, err := getTestCtr1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testCtr, err := getTestCtr1(manager)
assert.NoError(t, err)
err = state.RemoveContainerFromPod(&Pod{config: &PodConfig{}}, testCtr)
@@ -3169,11 +3173,11 @@ func TestRemoveContainerFromPodBadPodFails(t *testing.T) {
}
func TestRemoveContainerFromPodPodNotInStateFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -3185,11 +3189,11 @@ func TestRemoveContainerFromPodPodNotInStateFails(t *testing.T) {
}
func TestRemoveContainerFromPodCtrNotInStateFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -3204,11 +3208,11 @@ func TestRemoveContainerFromPodCtrNotInStateFails(t *testing.T) {
}
func TestRemoveContainerFromPodCtrNotInPodFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -3229,11 +3233,11 @@ func TestRemoveContainerFromPodCtrNotInPodFails(t *testing.T) {
}
func TestRemoveContainerFromPodSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -3257,15 +3261,15 @@ func TestRemoveContainerFromPodSucceeds(t *testing.T) {
}
func TestRemoveContainerFromPodWithDependencyFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
testCtr2.config.IPCNsCtr = testCtr1.ID()
@@ -3293,15 +3297,15 @@ func TestRemoveContainerFromPodWithDependencyFails(t *testing.T) {
}
func TestRemoveContainerFromPodWithDependencySucceedsAfterDepRemoved(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
- testCtr1, err := getTestCtr2(lockPath)
+ testCtr1, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr1.config.Pod = testPod.ID()
- testCtr2, err := getTestCtrN("3", lockPath)
+ testCtr2, err := getTestCtrN("3", manager)
assert.NoError(t, err)
testCtr2.config.Pod = testPod.ID()
testCtr2.config.IPCNsCtr = testCtr1.ID()
@@ -3332,13 +3336,13 @@ func TestRemoveContainerFromPodWithDependencySucceedsAfterDepRemoved(t *testing.
}
func TestRemoveContainerFromPodSameNamespaceSucceeds(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -3366,13 +3370,13 @@ func TestRemoveContainerFromPodSameNamespaceSucceeds(t *testing.T) {
}
func TestRemoveContainerFromPodDifferentNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
- testCtr, err := getTestCtr2(lockPath)
+ testCtr, err := getTestCtr2(manager)
assert.NoError(t, err)
testCtr.config.Pod = testPod.ID()
@@ -3402,15 +3406,15 @@ func TestRemoveContainerFromPodDifferentNamespaceFails(t *testing.T) {
}
func TestUpdatePodInvalidPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
err := state.UpdatePod(&Pod{config: &PodConfig{}})
assert.Error(t, err)
})
}
func TestUpdatePodPodNotInStateFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.UpdatePod(testPod)
@@ -3419,8 +3423,8 @@ func TestUpdatePodPodNotInStateFails(t *testing.T) {
}
func TestUpdatePodNotInNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -3436,15 +3440,15 @@ func TestUpdatePodNotInNamespaceFails(t *testing.T) {
}
func TestSavePodInvalidPod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
err := state.SavePod(&Pod{config: &PodConfig{}})
assert.Error(t, err)
})
}
func TestSavePodPodNotInStateFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.SavePod(testPod)
@@ -3453,8 +3457,8 @@ func TestSavePodPodNotInStateFails(t *testing.T) {
}
func TestSavePodNotInNamespaceFails(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
@@ -3470,8 +3474,8 @@ func TestSavePodNotInNamespaceFails(t *testing.T) {
}
func TestSaveAndUpdatePod(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
err = state.AddPod(testPod)
@@ -3495,8 +3499,8 @@ func TestSaveAndUpdatePod(t *testing.T) {
}
func TestSaveAndUpdatePodSameNamespace(t *testing.T) {
- runForAllStates(t, func(t *testing.T, state State, lockPath string) {
- testPod, err := getTestPod1(lockPath)
+ runForAllStates(t, func(t *testing.T, state State, manager lock.Manager) {
+ testPod, err := getTestPod1(manager)
assert.NoError(t, err)
testPod.config.Namespace = "test1"
diff --git a/libpod/storage.go b/libpod/storage.go
index 10026efda..17d231171 100644
--- a/libpod/storage.go
+++ b/libpod/storage.go
@@ -2,7 +2,6 @@ package libpod
import (
"context"
- "encoding/json"
"time"
istorage "github.com/containers/image/storage"
diff --git a/libpod/version.go b/libpod/version.go
index 966588ae9..d2b99a275 100644
--- a/libpod/version.go
+++ b/libpod/version.go
@@ -19,11 +19,12 @@ var (
//Version is an output struct for varlink
type Version struct {
- Version string
- GoVersion string
- GitCommit string
- Built int64
- OsArch string
+ RemoteAPIVersion int64
+ Version string
+ GoVersion string
+ GitCommit string
+ Built int64
+ OsArch string
}
// GetVersion returns a VersionOutput struct for varlink and podman
@@ -39,10 +40,11 @@ func GetVersion() (Version, error) {
}
}
return Version{
- Version: podmanVersion.Version,
- GoVersion: runtime.Version(),
- GitCommit: gitCommit,
- Built: buildTime,
- OsArch: runtime.GOOS + "/" + runtime.GOARCH,
+ RemoteAPIVersion: podmanVersion.RemoteAPIVersion,
+ Version: podmanVersion.Version,
+ GoVersion: runtime.Version(),
+ GitCommit: gitCommit,
+ Built: buildTime,
+ OsArch: runtime.GOOS + "/" + runtime.GOARCH,
}, nil
}
diff --git a/libpod/volume.go b/libpod/volume.go
index b732e8aa7..026a3bf49 100644
--- a/libpod/volume.go
+++ b/libpod/volume.go
@@ -1,6 +1,6 @@
package libpod
-import "github.com/containers/storage"
+import "github.com/containers/libpod/libpod/lock"
// Volume is the type used to create named volumes
// TODO: all volumes should be created using this and the Volume API
@@ -9,13 +9,17 @@ type Volume struct {
valid bool
runtime *Runtime
- lock storage.Locker
+ lock lock.Locker
}
// VolumeConfig holds the volume's config information
//easyjson:json
type VolumeConfig struct {
- Name string `json:"name"`
+ // Name of the volume
+ Name string `json:"name"`
+ // ID of this volume's lock
+ LockID uint32 `json:"lockID"`
+
Labels map[string]string `json:"labels"`
MountPoint string `json:"mountPoint"`
Driver string `json:"driver"`
diff --git a/pkg/apparmor/apparmor.go b/pkg/apparmor/apparmor.go
index 8b9f99477..45c029c07 100644
--- a/pkg/apparmor/apparmor.go
+++ b/pkg/apparmor/apparmor.go
@@ -2,11 +2,16 @@ package apparmor
import (
"errors"
+ libpodVersion "github.com/containers/libpod/version"
)
var (
+ // DefaultLipodProfilePrefix is used for version-independent presence checks.
+ DefaultLipodProfilePrefix = "libpod-default" + "-"
// DefaultLibpodProfile is the name of default libpod AppArmor profile.
- DefaultLibpodProfile = "libpod-default"
+ DefaultLibpodProfile = DefaultLipodProfilePrefix + libpodVersion.Version
// ErrApparmorUnsupported indicates that AppArmor support is not supported.
ErrApparmorUnsupported = errors.New("AppArmor is not supported")
+ // ErrApparmorRootless indicates that AppArmor support is not supported in rootless mode.
+ ErrApparmorRootless = errors.New("AppArmor is not supported in rootless mode")
)
diff --git a/pkg/apparmor/apparmor_linux.go b/pkg/apparmor/apparmor_linux.go
index b0e3ca0fd..0787b3fa5 100644
--- a/pkg/apparmor/apparmor_linux.go
+++ b/pkg/apparmor/apparmor_linux.go
@@ -13,7 +13,10 @@ import (
"strings"
"text/template"
+ "github.com/containers/libpod/pkg/rootless"
runcaa "github.com/opencontainers/runc/libcontainer/apparmor"
+ "github.com/pkg/errors"
+ "github.com/sirupsen/logrus"
)
// profileDirectory is the file store for apparmor profiles and macros.
@@ -21,6 +24,9 @@ var profileDirectory = "/etc/apparmor.d"
// IsEnabled returns true if AppArmor is enabled on the host.
func IsEnabled() bool {
+ if rootless.IsRootless() {
+ return false
+ }
return runcaa.IsEnabled()
}
@@ -71,6 +77,10 @@ func macroExists(m string) bool {
// InstallDefault generates a default profile and loads it into the kernel
// using 'apparmor_parser'.
func InstallDefault(name string) error {
+ if rootless.IsRootless() {
+ return ErrApparmorRootless
+ }
+
p := profileData{
Name: name,
}
@@ -97,6 +107,10 @@ func InstallDefault(name string) error {
// IsLoaded checks if a profile with the given name has been loaded into the
// kernel.
func IsLoaded(name string) (bool, error) {
+ if name != "" && rootless.IsRootless() {
+ return false, errors.Wrapf(ErrApparmorRootless, "cannot load AppArmor profile %q", name)
+ }
+
file, err := os.Open("/sys/kernel/security/apparmor/profiles")
if err != nil {
if os.IsNotExist(err) {
@@ -188,3 +202,55 @@ func parseAAParserVersion(output string) (int, error) {
return numericVersion, nil
}
+
+// CheckProfileAndLoadDefault checks if the specified profile is loaded and
+// loads the DefaultLibpodProfile if the specified on is prefixed by
+// DefaultLipodProfilePrefix. This allows to always load and apply the latest
+// default AppArmor profile. Note that AppArmor requires root. If it's a
+// default profile, return DefaultLipodProfilePrefix, otherwise the specified
+// one.
+func CheckProfileAndLoadDefault(name string) (string, error) {
+ if name == "unconfined" {
+ return name, nil
+ }
+
+ if name != "" && rootless.IsRootless() {
+ return "", errors.Wrapf(ErrApparmorRootless, "cannot load AppArmor profile %q", name)
+ }
+
+ if name != "" && !runcaa.IsEnabled() {
+ return "", fmt.Errorf("profile %q specified but AppArmor is disabled on the host", name)
+ }
+
+ // If the specified name is not empty or is not a default libpod one,
+ // ignore it and return the name.
+ if name != "" && !strings.HasPrefix(name, DefaultLipodProfilePrefix) {
+ isLoaded, err := IsLoaded(name)
+ if err != nil {
+ return "", err
+ }
+ if !isLoaded {
+ return "", fmt.Errorf("AppArmor profile %q specified but not loaded")
+ }
+ return name, nil
+ }
+
+ name = DefaultLibpodProfile
+ // To avoid expensive redundant loads on each invocation, check
+ // if it's loaded before installing it.
+ isLoaded, err := IsLoaded(name)
+ if err != nil {
+ return "", err
+ }
+ if !isLoaded {
+ err = InstallDefault(name)
+ if err != nil {
+ return "", err
+ }
+ logrus.Infof("successfully loaded AppAmor profile %q", name)
+ } else {
+ logrus.Infof("AppAmor profile %q is already loaded", name)
+ }
+
+ return name, nil
+}
diff --git a/pkg/apparmor/apparmor_unsupported.go b/pkg/apparmor/apparmor_unsupported.go
index df1336b07..b2b4de5f5 100644
--- a/pkg/apparmor/apparmor_unsupported.go
+++ b/pkg/apparmor/apparmor_unsupported.go
@@ -2,19 +2,25 @@
package apparmor
-// IsEnabled returns true if AppArmor is enabled on the host.
+// IsEnabled dummy.
func IsEnabled() bool {
return false
}
-// InstallDefault generates a default profile in a temp directory determined by
-// os.TempDir(), then loads the profile into the kernel using 'apparmor_parser'.
+// InstallDefault dummy.
func InstallDefault(name string) error {
return ErrApparmorUnsupported
}
-// IsLoaded checks if a profile with the given name has been loaded into the
-// kernel.
+// IsLoaded dummy.
func IsLoaded(name string) (bool, error) {
return false, ErrApparmorUnsupported
}
+
+// CheckProfileAndLoadDefault dummy.
+func CheckProfileAndLoadDefault(name string) (string, error) {
+ if name == "" {
+ return "", nil
+ }
+ return "", ErrApparmorUnsupported
+}
diff --git a/pkg/hooks/exec/exec.go b/pkg/hooks/exec/exec.go
index 94469b1d2..0dd091561 100644
--- a/pkg/hooks/exec/exec.go
+++ b/pkg/hooks/exec/exec.go
@@ -10,6 +10,7 @@ import (
"time"
rspec "github.com/opencontainers/runtime-spec/specs-go"
+ "github.com/pkg/errors"
)
// DefaultPostKillTimeout is the recommended default post-kill timeout.
@@ -42,7 +43,11 @@ func Run(ctx context.Context, hook *rspec.Hook, state []byte, stdout io.Writer,
}
exit := make(chan error, 1)
go func() {
- exit <- cmd.Wait()
+ err := cmd.Wait()
+ if err != nil {
+ err = errors.Wrapf(err, "executing %v", cmd.Args)
+ }
+ exit <- err
}()
select {
diff --git a/pkg/hooks/exec/exec_test.go b/pkg/hooks/exec/exec_test.go
index 62e45ff3a..7aac315cb 100644
--- a/pkg/hooks/exec/exec_test.go
+++ b/pkg/hooks/exec/exec_test.go
@@ -163,14 +163,14 @@ func TestRunCancel(t *testing.T) {
name: "context timeout",
contextTimeout: time.Duration(1) * time.Second,
expectedStdout: "waiting\n",
- expectedHookError: "^signal: killed$",
+ expectedHookError: "^executing \\[sh -c echo waiting; sleep 2; echo done]: signal: killed$",
expectedRunError: context.DeadlineExceeded,
},
{
name: "hook timeout",
hookTimeout: &one,
expectedStdout: "waiting\n",
- expectedHookError: "^signal: killed$",
+ expectedHookError: "^executing \\[sh -c echo waiting; sleep 2; echo done]: signal: killed$",
expectedRunError: context.DeadlineExceeded,
},
} {
@@ -207,7 +207,7 @@ func TestRunKillTimeout(t *testing.T) {
}
hookErr, err := Run(ctx, hook, []byte("{}"), nil, nil, time.Duration(0))
assert.Equal(t, context.DeadlineExceeded, err)
- assert.Regexp(t, "^(failed to reap process within 0s of the kill signal|signal: killed)$", hookErr)
+ assert.Regexp(t, "^(failed to reap process within 0s of the kill signal|executing \\[sh -c sleep 1]: signal: killed)$", hookErr)
}
func init() {
diff --git a/pkg/hooks/exec/runtimeconfigfilter.go b/pkg/hooks/exec/runtimeconfigfilter.go
new file mode 100644
index 000000000..c6971f680
--- /dev/null
+++ b/pkg/hooks/exec/runtimeconfigfilter.go
@@ -0,0 +1,68 @@
+package exec
+
+import (
+ "bytes"
+ "context"
+ "encoding/json"
+ "reflect"
+ "time"
+
+ "github.com/davecgh/go-spew/spew"
+ spec "github.com/opencontainers/runtime-spec/specs-go"
+ "github.com/pkg/errors"
+ "github.com/pmezard/go-difflib/difflib"
+ "github.com/sirupsen/logrus"
+)
+
+var spewConfig = spew.ConfigState{
+ Indent: " ",
+ DisablePointerAddresses: true,
+ DisableCapacities: true,
+ SortKeys: true,
+}
+
+// RuntimeConfigFilter calls a series of hooks. But instead of
+// passing container state on their standard input,
+// RuntimeConfigFilter passes the proposed runtime configuration (and
+// reads back a possibly-altered form from their standard output).
+func RuntimeConfigFilter(ctx context.Context, hooks []spec.Hook, config *spec.Spec, postKillTimeout time.Duration) (hookErr, err error) {
+ data, err := json.Marshal(config)
+ for i, hook := range hooks {
+ var stdout bytes.Buffer
+ hookErr, err = Run(ctx, &hook, data, &stdout, nil, postKillTimeout)
+ if err != nil {
+ return hookErr, err
+ }
+
+ data = stdout.Bytes()
+ var newConfig spec.Spec
+ err = json.Unmarshal(data, &newConfig)
+ if err != nil {
+ logrus.Debugf("invalid JSON from config-filter hook %d:\n%s", i, string(data))
+ return nil, errors.Wrapf(err, "unmarshal output from config-filter hook %d", i)
+ }
+
+ if !reflect.DeepEqual(config, &newConfig) {
+ old := spewConfig.Sdump(config)
+ new := spewConfig.Sdump(&newConfig)
+ diff, err := difflib.GetUnifiedDiffString(difflib.UnifiedDiff{
+ A: difflib.SplitLines(old),
+ B: difflib.SplitLines(new),
+ FromFile: "Old",
+ FromDate: "",
+ ToFile: "New",
+ ToDate: "",
+ Context: 1,
+ })
+ if err == nil {
+ logrus.Debugf("precreate hook %d made configuration changes:\n%s", i, diff)
+ } else {
+ logrus.Warnf("precreate hook %d made configuration changes, but we could not compute a diff: %v", i, err)
+ }
+ }
+
+ *config = newConfig
+ }
+
+ return nil, nil
+}
diff --git a/pkg/hooks/exec/runtimeconfigfilter_test.go b/pkg/hooks/exec/runtimeconfigfilter_test.go
new file mode 100644
index 000000000..52d590d14
--- /dev/null
+++ b/pkg/hooks/exec/runtimeconfigfilter_test.go
@@ -0,0 +1,266 @@
+package exec
+
+import (
+ "context"
+ "encoding/json"
+ "os"
+ "testing"
+ "time"
+
+ spec "github.com/opencontainers/runtime-spec/specs-go"
+ "github.com/pkg/errors"
+ "github.com/stretchr/testify/assert"
+)
+
+func pointerInt(value int) *int {
+ return &value
+}
+
+func pointerUInt32(value uint32) *uint32 {
+ return &value
+}
+
+func pointerFileMode(value os.FileMode) *os.FileMode {
+ return &value
+}
+
+func TestRuntimeConfigFilter(t *testing.T) {
+ unexpectedEndOfJSONInput := json.Unmarshal([]byte("{\n"), nil)
+
+ for _, test := range []struct {
+ name string
+ contextTimeout time.Duration
+ hooks []spec.Hook
+ input *spec.Spec
+ expected *spec.Spec
+ expectedHookError string
+ expectedRunError error
+ }{
+ {
+ name: "no-op",
+ hooks: []spec.Hook{
+ {
+ Path: path,
+ Args: []string{"sh", "-c", "cat"},
+ },
+ },
+ input: &spec.Spec{
+ Version: "1.0.0",
+ Root: &spec.Root{
+ Path: "rootfs",
+ },
+ },
+ expected: &spec.Spec{
+ Version: "1.0.0",
+ Root: &spec.Root{
+ Path: "rootfs",
+ },
+ },
+ },
+ {
+ name: "device injection",
+ hooks: []spec.Hook{
+ {
+ Path: path,
+ Args: []string{"sh", "-c", `sed 's|\("gid":0}\)|\1,{"path": "/dev/sda","type":"b","major":8,"minor":0,"fileMode":384,"uid":0,"gid":0}|'`},
+ },
+ },
+ input: &spec.Spec{
+ Version: "1.0.0",
+ Root: &spec.Root{
+ Path: "rootfs",
+ },
+ Linux: &spec.Linux{
+ Devices: []spec.LinuxDevice{
+ {
+ Path: "/dev/fuse",
+ Type: "c",
+ Major: 10,
+ Minor: 229,
+ FileMode: pointerFileMode(0600),
+ UID: pointerUInt32(0),
+ GID: pointerUInt32(0),
+ },
+ },
+ },
+ },
+ expected: &spec.Spec{
+ Version: "1.0.0",
+ Root: &spec.Root{
+ Path: "rootfs",
+ },
+ Linux: &spec.Linux{
+ Devices: []spec.LinuxDevice{
+ {
+ Path: "/dev/fuse",
+ Type: "c",
+ Major: 10,
+ Minor: 229,
+ FileMode: pointerFileMode(0600),
+ UID: pointerUInt32(0),
+ GID: pointerUInt32(0),
+ },
+ {
+ Path: "/dev/sda",
+ Type: "b",
+ Major: 8,
+ Minor: 0,
+ FileMode: pointerFileMode(0600),
+ UID: pointerUInt32(0),
+ GID: pointerUInt32(0),
+ },
+ },
+ },
+ },
+ },
+ {
+ name: "chaining",
+ hooks: []spec.Hook{
+ {
+ Path: path,
+ Args: []string{"sh", "-c", `sed 's|\("gid":0}\)|\1,{"path": "/dev/sda","type":"b","major":8,"minor":0,"fileMode":384,"uid":0,"gid":0}|'`},
+ },
+ {
+ Path: path,
+ Args: []string{"sh", "-c", `sed 's|/dev/sda|/dev/sdb|'`},
+ },
+ },
+ input: &spec.Spec{
+ Version: "1.0.0",
+ Root: &spec.Root{
+ Path: "rootfs",
+ },
+ Linux: &spec.Linux{
+ Devices: []spec.LinuxDevice{
+ {
+ Path: "/dev/fuse",
+ Type: "c",
+ Major: 10,
+ Minor: 229,
+ FileMode: pointerFileMode(0600),
+ UID: pointerUInt32(0),
+ GID: pointerUInt32(0),
+ },
+ },
+ },
+ },
+ expected: &spec.Spec{
+ Version: "1.0.0",
+ Root: &spec.Root{
+ Path: "rootfs",
+ },
+ Linux: &spec.Linux{
+ Devices: []spec.LinuxDevice{
+ {
+ Path: "/dev/fuse",
+ Type: "c",
+ Major: 10,
+ Minor: 229,
+ FileMode: pointerFileMode(0600),
+ UID: pointerUInt32(0),
+ GID: pointerUInt32(0),
+ },
+ {
+ Path: "/dev/sdb",
+ Type: "b",
+ Major: 8,
+ Minor: 0,
+ FileMode: pointerFileMode(0600),
+ UID: pointerUInt32(0),
+ GID: pointerUInt32(0),
+ },
+ },
+ },
+ },
+ },
+ {
+ name: "context timeout",
+ contextTimeout: time.Duration(1) * time.Second,
+ hooks: []spec.Hook{
+ {
+ Path: path,
+ Args: []string{"sh", "-c", "sleep 2"},
+ },
+ },
+ input: &spec.Spec{
+ Version: "1.0.0",
+ Root: &spec.Root{
+ Path: "rootfs",
+ },
+ },
+ expected: &spec.Spec{
+ Version: "1.0.0",
+ Root: &spec.Root{
+ Path: "rootfs",
+ },
+ },
+ expectedHookError: "^executing \\[sh -c sleep 2]: signal: killed$",
+ expectedRunError: context.DeadlineExceeded,
+ },
+ {
+ name: "hook timeout",
+ hooks: []spec.Hook{
+ {
+ Path: path,
+ Args: []string{"sh", "-c", "sleep 2"},
+ Timeout: pointerInt(1),
+ },
+ },
+ input: &spec.Spec{
+ Version: "1.0.0",
+ Root: &spec.Root{
+ Path: "rootfs",
+ },
+ },
+ expected: &spec.Spec{
+ Version: "1.0.0",
+ Root: &spec.Root{
+ Path: "rootfs",
+ },
+ },
+ expectedHookError: "^executing \\[sh -c sleep 2]: signal: killed$",
+ expectedRunError: context.DeadlineExceeded,
+ },
+ {
+ name: "invalid JSON",
+ hooks: []spec.Hook{
+ {
+ Path: path,
+ Args: []string{"sh", "-c", "echo '{'"},
+ },
+ },
+ input: &spec.Spec{
+ Version: "1.0.0",
+ Root: &spec.Root{
+ Path: "rootfs",
+ },
+ },
+ expected: &spec.Spec{
+ Version: "1.0.0",
+ Root: &spec.Root{
+ Path: "rootfs",
+ },
+ },
+ expectedRunError: unexpectedEndOfJSONInput,
+ },
+ } {
+ t.Run(test.name, func(t *testing.T) {
+ ctx := context.Background()
+ if test.contextTimeout > 0 {
+ var cancel context.CancelFunc
+ ctx, cancel = context.WithTimeout(ctx, test.contextTimeout)
+ defer cancel()
+ }
+ hookErr, err := RuntimeConfigFilter(ctx, test.hooks, test.input, DefaultPostKillTimeout)
+ assert.Equal(t, test.expectedRunError, errors.Cause(err))
+ if test.expectedHookError == "" {
+ if hookErr != nil {
+ t.Fatal(hookErr)
+ }
+ } else {
+ assert.Regexp(t, test.expectedHookError, hookErr.Error())
+ }
+ assert.Equal(t, test.expected, test.input)
+ })
+ }
+}
diff --git a/pkg/rootless/rootless_linux.c b/pkg/rootless/rootless_linux.c
index 1d28ff68d..279a03d3f 100644
--- a/pkg/rootless/rootless_linux.c
+++ b/pkg/rootless/rootless_linux.c
@@ -70,9 +70,12 @@ get_cmd_line_args (pid_t pid)
if (allocated == used)
{
allocated += 512;
- buffer = realloc (buffer, allocated);
- if (buffer == NULL)
- return NULL;
+ char *tmp = realloc (buffer, allocated);
+ if (buffer == NULL) {
+ free(buffer);
+ return NULL;
+ }
+ buffer=tmp;
}
}
close (fd);
diff --git a/pkg/rootless/rootless_unsupported.go b/pkg/rootless/rootless_unsupported.go
index d72402c9f..1823c023e 100644
--- a/pkg/rootless/rootless_unsupported.go
+++ b/pkg/rootless/rootless_unsupported.go
@@ -14,7 +14,7 @@ func IsRootless() bool {
// BecomeRootInUserNS is a stub function that always returns false and an
// error on unsupported OS's
func BecomeRootInUserNS() (bool, int, error) {
- return false, -1, errors.New("this function is not supported on this os")
+ return false, -1, errors.New("this function is not supported on this os1")
}
// GetRootlessUID returns the UID of the user in the parent userNS
@@ -34,11 +34,18 @@ func SkipStorageSetup() bool {
// JoinNS re-exec podman in a new userNS and join the user namespace of the specified
// PID.
func JoinNS(pid uint) (bool, int, error) {
- return false, -1, errors.New("this function is not supported on this os")
+ return false, -1, errors.New("this function is not supported on this os2")
}
// JoinNSPath re-exec podman in a new userNS and join the owner user namespace of the
// specified path.
func JoinNSPath(path string) (bool, int, error) {
- return false, -1, errors.New("this function is not supported on this os")
+ return false, -1, errors.New("this function is not supported on this os3")
+}
+
+// JoinDirectUserAndMountNS re-exec podman in a new userNS and join the user and mount
+// namespace of the specified PID without looking up its parent. Useful to join directly
+// the conmon process.
+func JoinDirectUserAndMountNS(pid uint) (bool, int, error) {
+ return false, -1, errors.New("this function is not supported on this os4")
}
diff --git a/pkg/spec/config_unsupported.go b/pkg/spec/config_unsupported.go
index c2a58696d..160414878 100644
--- a/pkg/spec/config_unsupported.go
+++ b/pkg/spec/config_unsupported.go
@@ -26,3 +26,7 @@ func (c *CreateConfig) createBlockIO() (*spec.LinuxBlockIO, error) {
func makeThrottleArray(throttleInput []string, rateType int) ([]spec.LinuxThrottleDevice, error) {
return nil, errors.New("function not implemented")
}
+
+func devicesFromPath(g *generate.Generator, devicePath string) error {
+ return errors.New("function not implemented")
+}
diff --git a/pkg/spec/createconfig.go b/pkg/spec/createconfig.go
index 25f8cd7a1..344f4afb9 100644
--- a/pkg/spec/createconfig.go
+++ b/pkg/spec/createconfig.go
@@ -2,6 +2,7 @@ package createconfig
import (
"encoding/json"
+ "fmt"
"net"
"os"
"strconv"
@@ -145,6 +146,36 @@ func (c *CreateConfig) CreateBlockIO() (*spec.LinuxBlockIO, error) {
return c.createBlockIO()
}
+// AddContainerInitBinary adds the init binary specified by path iff the
+// container will run in a private PID namespace that is not shared with the
+// host or another pre-existing container, where an init-like process is
+// already running.
+//
+// Note that AddContainerInitBinary prepends "/dev/init" "--" to the command
+// to execute the bind-mounted binary as PID 1.
+func (c *CreateConfig) AddContainerInitBinary(path string) error {
+ if path == "" {
+ return fmt.Errorf("please specify a path to the container-init binary")
+ }
+ if !c.PidMode.IsPrivate() {
+ return fmt.Errorf("cannot add init binary as PID 1 (PID namespace isn't private)")
+ }
+ if c.Systemd {
+ return fmt.Errorf("cannot use container-init binary with systemd")
+ }
+ if _, err := os.Stat(path); os.IsNotExist(err) {
+ return errors.Wrap(err, "container-init binary not found on the host")
+ }
+ c.Command = append([]string{"/dev/init", "--"}, c.Command...)
+ c.Mounts = append(c.Mounts, spec.Mount{
+ Destination: "/dev/init",
+ Type: "bind",
+ Source: path,
+ Options: []string{"bind", "ro"},
+ })
+ return nil
+}
+
func processOptions(options []string) []string {
var (
foundrw, foundro bool
@@ -310,10 +341,9 @@ func (c *CreateConfig) createExitCommand() []string {
}
// GetContainerCreateOptions takes a CreateConfig and returns a slice of CtrCreateOptions
-func (c *CreateConfig) GetContainerCreateOptions(runtime *libpod.Runtime) ([]libpod.CtrCreateOption, error) {
+func (c *CreateConfig) GetContainerCreateOptions(runtime *libpod.Runtime, pod *libpod.Pod) ([]libpod.CtrCreateOption, error) {
var options []libpod.CtrCreateOption
var portBindings []ocicni.PortMapping
- var pod *libpod.Pod
var err error
if c.Interactive {
@@ -327,12 +357,14 @@ func (c *CreateConfig) GetContainerCreateOptions(runtime *libpod.Runtime) ([]lib
logrus.Debugf("appending name %s", c.Name)
options = append(options, libpod.WithName(c.Name))
}
- if c.Pod != "" {
- logrus.Debugf("adding container to pod %s", c.Pod)
- pod, err = runtime.LookupPod(c.Pod)
- if err != nil {
- return nil, errors.Wrapf(err, "unable to add container to pod %s", c.Pod)
+ if c.Pod != "" || pod != nil {
+ if pod == nil {
+ pod, err = runtime.LookupPod(c.Pod)
+ if err != nil {
+ return nil, errors.Wrapf(err, "unable to add container to pod %s", c.Pod)
+ }
}
+ logrus.Debugf("adding container to pod %s", c.Pod)
options = append(options, runtime.WithPod(pod))
}
if len(c.PortBindings) > 0 {
@@ -390,11 +422,7 @@ func (c *CreateConfig) GetContainerCreateOptions(runtime *libpod.Runtime) ([]lib
}
options = append(options, libpod.WithNetNSFrom(connectedCtr))
} else if !c.NetMode.IsHost() && !c.NetMode.IsNone() {
- isRootless := rootless.IsRootless()
postConfigureNetNS := c.NetMode.IsSlirp4netns() || (len(c.IDMappings.UIDMap) > 0 || len(c.IDMappings.GIDMap) > 0) && !c.UsernsMode.IsHost()
- if isRootless && len(portBindings) > 0 {
- return nil, errors.New("port bindings are not yet supported by rootless containers")
- }
options = append(options, libpod.WithNetNS(portBindings, postConfigureNetNS, string(c.NetMode), networks))
}
@@ -487,7 +515,9 @@ func (c *CreateConfig) GetContainerCreateOptions(runtime *libpod.Runtime) ([]lib
if c.CgroupParent != "" {
options = append(options, libpod.WithCgroupParent(c.CgroupParent))
}
- if c.Detach {
+ // For a rootless container always cleanup the storage/network as they
+ // run in a different namespace thus not reusable when we restart.
+ if c.Detach || rootless.IsRootless() {
options = append(options, libpod.WithExitCommand(c.createExitCommand()))
}
diff --git a/pkg/spec/spec.go b/pkg/spec/spec.go
index 3d6603364..46105af4a 100644
--- a/pkg/spec/spec.go
+++ b/pkg/spec/spec.go
@@ -6,8 +6,8 @@ import (
"strings"
"github.com/containers/libpod/pkg/rootless"
+ "github.com/containers/storage/pkg/mount"
"github.com/docker/docker/daemon/caps"
- "github.com/docker/docker/pkg/mount"
"github.com/docker/go-units"
spec "github.com/opencontainers/runtime-spec/specs-go"
"github.com/opencontainers/runtime-tools/generate"
@@ -252,6 +252,7 @@ func CreateConfigToOCISpec(config *CreateConfig) (*spec.Spec, error) { //nolint
}
// SECURITY OPTS
g.SetProcessNoNewPrivileges(config.NoNewPrivs)
+
g.SetProcessApparmorProfile(config.ApparmorProfile)
blockAccessToKernelFilesystems(config, &g)
@@ -375,6 +376,10 @@ func CreateConfigToOCISpec(config *CreateConfig) (*spec.Spec, error) { //nolint
}
func blockAccessToKernelFilesystems(config *CreateConfig, g *generate.Generator) {
+ if config.PidMode.IsHost() && rootless.IsRootless() {
+ return
+ }
+
if !config.Privileged {
for _, mp := range []string{
"/proc/acpi",
diff --git a/vendor/github.com/docker/docker/pkg/sysinfo/README.md b/pkg/sysinfo/README.md
index c1530cef0..c1530cef0 100644
--- a/vendor/github.com/docker/docker/pkg/sysinfo/README.md
+++ b/pkg/sysinfo/README.md
diff --git a/vendor/github.com/docker/docker/pkg/sysinfo/numcpu.go b/pkg/sysinfo/numcpu.go
index aeb1a3a80..aeb1a3a80 100644
--- a/vendor/github.com/docker/docker/pkg/sysinfo/numcpu.go
+++ b/pkg/sysinfo/numcpu.go
diff --git a/vendor/github.com/docker/docker/pkg/sysinfo/numcpu_linux.go b/pkg/sysinfo/numcpu_linux.go
index f1d2d9db3..f1d2d9db3 100644
--- a/vendor/github.com/docker/docker/pkg/sysinfo/numcpu_linux.go
+++ b/pkg/sysinfo/numcpu_linux.go
diff --git a/vendor/github.com/docker/docker/pkg/sysinfo/numcpu_windows.go b/pkg/sysinfo/numcpu_windows.go
index 1d89dd550..1d89dd550 100644
--- a/vendor/github.com/docker/docker/pkg/sysinfo/numcpu_windows.go
+++ b/pkg/sysinfo/numcpu_windows.go
diff --git a/vendor/github.com/docker/docker/pkg/sysinfo/sysinfo.go b/pkg/sysinfo/sysinfo.go
index f046de4b1..f046de4b1 100644
--- a/vendor/github.com/docker/docker/pkg/sysinfo/sysinfo.go
+++ b/pkg/sysinfo/sysinfo.go
diff --git a/vendor/github.com/docker/docker/pkg/sysinfo/sysinfo_linux.go b/pkg/sysinfo/sysinfo_linux.go
index 471f786a7..f4047b63c 100644
--- a/vendor/github.com/docker/docker/pkg/sysinfo/sysinfo_linux.go
+++ b/pkg/sysinfo/sysinfo_linux.go
@@ -227,7 +227,7 @@ func checkCgroupCpusetInfo(cgMounts map[string]string, quiet bool) cgroupCpusetI
// checkCgroupPids reads the pids information from the pids cgroup mount point.
func checkCgroupPids(quiet bool) cgroupPids {
- _, err := cgroups.FindCgroupMountpoint("pids")
+ _, err := cgroups.FindCgroupMountpoint("", "pids")
if err != nil {
if !quiet {
logrus.Warn(err)
diff --git a/pkg/sysinfo/sysinfo_linux_test.go b/pkg/sysinfo/sysinfo_linux_test.go
new file mode 100644
index 000000000..860784f2a
--- /dev/null
+++ b/pkg/sysinfo/sysinfo_linux_test.go
@@ -0,0 +1,104 @@
+package sysinfo
+
+import (
+ "io/ioutil"
+ "os"
+ "path"
+ "path/filepath"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "golang.org/x/sys/unix"
+)
+
+func TestReadProcBool(t *testing.T) {
+ tmpDir, err := ioutil.TempDir("", "test-sysinfo-proc")
+ require.NoError(t, err)
+ defer os.RemoveAll(tmpDir)
+
+ procFile := filepath.Join(tmpDir, "read-proc-bool")
+ err = ioutil.WriteFile(procFile, []byte("1"), 0644)
+ require.NoError(t, err)
+
+ if !readProcBool(procFile) {
+ t.Fatal("expected proc bool to be true, got false")
+ }
+
+ if err := ioutil.WriteFile(procFile, []byte("0"), 0644); err != nil {
+ t.Fatal(err)
+ }
+ if readProcBool(procFile) {
+ t.Fatal("expected proc bool to be false, got true")
+ }
+
+ if readProcBool(path.Join(tmpDir, "no-exist")) {
+ t.Fatal("should be false for non-existent entry")
+ }
+
+}
+
+func TestCgroupEnabled(t *testing.T) {
+ cgroupDir, err := ioutil.TempDir("", "cgroup-test")
+ require.NoError(t, err)
+ defer os.RemoveAll(cgroupDir)
+
+ if cgroupEnabled(cgroupDir, "test") {
+ t.Fatal("cgroupEnabled should be false")
+ }
+
+ err = ioutil.WriteFile(path.Join(cgroupDir, "test"), []byte{}, 0644)
+ require.NoError(t, err)
+
+ if !cgroupEnabled(cgroupDir, "test") {
+ t.Fatal("cgroupEnabled should be true")
+ }
+}
+
+func TestNew(t *testing.T) {
+ sysInfo := New(false)
+ require.NotNil(t, sysInfo)
+ checkSysInfo(t, sysInfo)
+
+ sysInfo = New(true)
+ require.NotNil(t, sysInfo)
+ checkSysInfo(t, sysInfo)
+}
+
+func checkSysInfo(t *testing.T, sysInfo *SysInfo) {
+ // Check if Seccomp is supported, via CONFIG_SECCOMP.then sysInfo.Seccomp must be TRUE , else FALSE
+ if err := unix.Prctl(unix.PR_GET_SECCOMP, 0, 0, 0, 0); err != unix.EINVAL {
+ // Make sure the kernel has CONFIG_SECCOMP_FILTER.
+ if err := unix.Prctl(unix.PR_SET_SECCOMP, unix.SECCOMP_MODE_FILTER, 0, 0, 0); err != unix.EINVAL {
+ require.True(t, sysInfo.Seccomp)
+ }
+ } else {
+ require.False(t, sysInfo.Seccomp)
+ }
+}
+
+func TestNewAppArmorEnabled(t *testing.T) {
+ // Check if AppArmor is supported. then it must be TRUE , else FALSE
+ if _, err := os.Stat("/sys/kernel/security/apparmor"); err != nil {
+ t.Skip("App Armor Must be Enabled")
+ }
+
+ sysInfo := New(true)
+ require.True(t, sysInfo.AppArmor)
+}
+
+func TestNewAppArmorDisabled(t *testing.T) {
+ // Check if AppArmor is supported. then it must be TRUE , else FALSE
+ if _, err := os.Stat("/sys/kernel/security/apparmor"); !os.IsNotExist(err) {
+ t.Skip("App Armor Must be Disabled")
+ }
+
+ sysInfo := New(true)
+ require.False(t, sysInfo.AppArmor)
+}
+
+func TestNumCPU(t *testing.T) {
+ cpuNumbers := NumCPU()
+ if cpuNumbers <= 0 {
+ t.Fatal("CPU returned must be greater than zero")
+ }
+}
diff --git a/vendor/github.com/docker/docker/pkg/sysinfo/sysinfo_solaris.go b/pkg/sysinfo/sysinfo_solaris.go
index c858d57e0..c858d57e0 100644
--- a/vendor/github.com/docker/docker/pkg/sysinfo/sysinfo_solaris.go
+++ b/pkg/sysinfo/sysinfo_solaris.go
diff --git a/pkg/sysinfo/sysinfo_test.go b/pkg/sysinfo/sysinfo_test.go
new file mode 100644
index 000000000..b61fbcf54
--- /dev/null
+++ b/pkg/sysinfo/sysinfo_test.go
@@ -0,0 +1,26 @@
+package sysinfo
+
+import "testing"
+
+func TestIsCpusetListAvailable(t *testing.T) {
+ cases := []struct {
+ provided string
+ available string
+ res bool
+ err bool
+ }{
+ {"1", "0-4", true, false},
+ {"01,3", "0-4", true, false},
+ {"", "0-7", true, false},
+ {"1--42", "0-7", false, true},
+ {"1-42", "00-1,8,,9", false, true},
+ {"1,41-42", "43,45", false, false},
+ {"0-3", "", false, false},
+ }
+ for _, c := range cases {
+ r, err := isCpusetListAvailable(c.provided, c.available)
+ if (c.err && err == nil) && r != c.res {
+ t.Fatalf("Expected pair: %v, %v for %s, %s. Got %v, %v instead", c.res, c.err, c.provided, c.available, (c.err && err == nil), r)
+ }
+ }
+}
diff --git a/vendor/github.com/docker/docker/pkg/sysinfo/sysinfo_unix.go b/pkg/sysinfo/sysinfo_unix.go
index 45f3ef1c6..45f3ef1c6 100644
--- a/vendor/github.com/docker/docker/pkg/sysinfo/sysinfo_unix.go
+++ b/pkg/sysinfo/sysinfo_unix.go
diff --git a/vendor/github.com/docker/docker/pkg/sysinfo/sysinfo_windows.go b/pkg/sysinfo/sysinfo_windows.go
index 4e6255bc5..4e6255bc5 100644
--- a/vendor/github.com/docker/docker/pkg/sysinfo/sysinfo_windows.go
+++ b/pkg/sysinfo/sysinfo_windows.go
diff --git a/pkg/trust/trust.go b/pkg/trust/trust.go
index efc760364..31e41903e 100644
--- a/pkg/trust/trust.go
+++ b/pkg/trust/trust.go
@@ -2,6 +2,7 @@ package trust
import (
"bufio"
+ "bytes"
"encoding/base64"
"encoding/json"
"io/ioutil"
@@ -9,7 +10,6 @@ import (
"os/exec"
"path/filepath"
"strings"
- "unsafe"
"github.com/containers/image/types"
"github.com/pkg/errors"
@@ -52,6 +52,14 @@ type RegistryNamespace struct {
SigStoreStaging string `json:"sigstore-staging"` // For writing only.
}
+// ShowOutput keep the fields for image trust show command
+type ShowOutput struct {
+ Repo string
+ Trusttype string
+ GPGid string
+ Sigstore string
+}
+
// DefaultPolicyPath returns a path to the default policy of the system.
func DefaultPolicyPath(sys *types.SystemContext) string {
systemDefaultPolicyPath := "/etc/containers/policy.json"
@@ -167,84 +175,127 @@ func CreateTmpFile(dir, pattern string, content []byte) (string, error) {
return tmpfile.Name(), nil
}
-// GetGPGId return GPG identity, either bracketed <email> or ID string
-// comma separated if more than one key
-func GetGPGId(keys []string) string {
+func getGPGIdFromKeyPath(path []string) []string {
+ var uids []string
+ for _, k := range path {
+ cmd := exec.Command("gpg2", "--with-colons", k)
+ results, err := cmd.Output()
+ if err != nil {
+ logrus.Warnf("error get key identity: %s", err)
+ continue
+ }
+ uids = append(uids, parseUids(results)...)
+ }
+ return uids
+}
+
+func getGPGIdFromKeyData(keys []string) []string {
+ var uids []string
for _, k := range keys {
- if _, err := os.Stat(k); err != nil {
- decodeKey, err := base64.StdEncoding.DecodeString(k)
- if err != nil {
- logrus.Warnf("error decoding key data")
- continue
- }
- tmpfileName, err := CreateTmpFile("/run/", "", decodeKey)
- if err != nil {
- logrus.Warnf("error creating key date temp file %s", err)
- }
- defer os.Remove(tmpfileName)
- k = tmpfileName
+ decodeKey, err := base64.StdEncoding.DecodeString(k)
+ if err != nil {
+ logrus.Warnf("error decoding key data")
+ continue
}
+ tmpfileName, err := CreateTmpFile("", "", decodeKey)
+ if err != nil {
+ logrus.Warnf("error creating key date temp file %s", err)
+ }
+ defer os.Remove(tmpfileName)
+ k = tmpfileName
cmd := exec.Command("gpg2", "--with-colons", k)
results, err := cmd.Output()
if err != nil {
logrus.Warnf("error get key identity: %s", err)
continue
}
- resultsStr := *(*string)(unsafe.Pointer(&results))
- scanner := bufio.NewScanner(strings.NewReader(resultsStr))
- var parseduids []string
- for scanner.Scan() {
- line := scanner.Text()
- if strings.HasPrefix(line, "uid:") || strings.HasPrefix(line, "pub:") {
- uid := strings.Split(line, ":")[9]
- if uid == "" {
- continue
- }
- parseduid := uid
- if strings.Contains(uid, "<") && strings.Contains(uid, ">") {
- parseduid = strings.SplitN(strings.SplitAfterN(uid, "<", 2)[1], ">", 2)[0]
- }
- parseduids = append(parseduids, parseduid)
+ uids = append(uids, parseUids(results)...)
+ }
+ return uids
+}
+
+func parseUids(colonDelimitKeys []byte) []string {
+ var parseduids []string
+ scanner := bufio.NewScanner(bytes.NewReader(colonDelimitKeys))
+ for scanner.Scan() {
+ line := scanner.Text()
+ if strings.HasPrefix(line, "uid:") || strings.HasPrefix(line, "pub:") {
+ uid := strings.Split(line, ":")[9]
+ if uid == "" {
+ continue
+ }
+ parseduid := uid
+ if strings.Contains(uid, "<") && strings.Contains(uid, ">") {
+ parseduid = strings.SplitN(strings.SplitAfterN(uid, "<", 2)[1], ">", 2)[0]
}
+ parseduids = append(parseduids, parseduid)
}
- return strings.Join(parseduids, ",")
}
- return ""
+ return parseduids
}
-// GetPolicyJSON return the struct to show policy.json in json format
-func GetPolicyJSON(policyContentStruct PolicyContent, systemRegistriesDirPath string) (map[string]map[string]interface{}, error) {
+var typeDescription = map[string]string{"insecureAcceptAnything": "accept", "signedBy": "signed", "reject": "reject"}
+
+func trustTypeDescription(trustType string) string {
+ trustDescription, exist := typeDescription[trustType]
+ if !exist {
+ logrus.Warnf("invalid trust type %s", trustType)
+ }
+ return trustDescription
+}
+
+// GetPolicy return the struct to show policy.json in json format and a map (reponame, ShowOutput) pair for image trust show command
+func GetPolicy(policyContentStruct PolicyContent, systemRegistriesDirPath string) (map[string]map[string]interface{}, map[string]ShowOutput, error) {
registryConfigs, err := LoadAndMergeConfig(systemRegistriesDirPath)
if err != nil {
- return nil, err
+ return nil, nil, err
}
+ trustShowOutputMap := make(map[string]ShowOutput)
policyJSON := make(map[string]map[string]interface{})
if len(policyContentStruct.Default) > 0 {
policyJSON["* (default)"] = make(map[string]interface{})
policyJSON["* (default)"]["type"] = policyContentStruct.Default[0].Type
+
+ var defaultPolicyStruct ShowOutput
+ defaultPolicyStruct.Repo = "default"
+ defaultPolicyStruct.Trusttype = trustTypeDescription(policyContentStruct.Default[0].Type)
+ trustShowOutputMap["* (default)"] = defaultPolicyStruct
}
for transname, transval := range policyContentStruct.Transports {
for repo, repoval := range transval {
+ tempTrustShowOutput := ShowOutput{
+ Repo: repo,
+ Trusttype: repoval[0].Type,
+ }
policyJSON[repo] = make(map[string]interface{})
policyJSON[repo]["type"] = repoval[0].Type
policyJSON[repo]["transport"] = transname
+ keyDataArr := []string{}
+ keyPathArr := []string{}
+ keyarr := []string{}
for _, repoele := range repoval {
- keyarr := []string{}
if len(repoele.KeyPath) > 0 {
keyarr = append(keyarr, repoele.KeyPath)
+ keyPathArr = append(keyPathArr, repoele.KeyPath)
}
if len(repoele.KeyData) > 0 {
keyarr = append(keyarr, string(repoele.KeyData))
+ keyDataArr = append(keyDataArr, string(repoele.KeyData))
}
- policyJSON[repo]["keys"] = keyarr
}
+ policyJSON[repo]["keys"] = keyarr
+ uids := append(getGPGIdFromKeyPath(keyPathArr), getGPGIdFromKeyData(keyDataArr)...)
+ tempTrustShowOutput.GPGid = strings.Join(uids, ",")
+
policyJSON[repo]["sigstore"] = ""
registryNamespace := HaveMatchRegistry(repo, registryConfigs)
if registryNamespace != nil {
policyJSON[repo]["sigstore"] = registryNamespace.SigStore
+ tempTrustShowOutput.Sigstore = registryNamespace.SigStore
}
+ trustShowOutputMap[repo] = tempTrustShowOutput
}
}
- return policyJSON, nil
+ return policyJSON, trustShowOutputMap, nil
}
diff --git a/pkg/util/utils.go b/pkg/util/utils.go
index a6f52cb3e..e0b94b011 100644
--- a/pkg/util/utils.go
+++ b/pkg/util/utils.go
@@ -314,9 +314,22 @@ func GetDefaultStoreOptions() (storage.StoreOptions, string, error) {
return storageOpts, volumePath, err
}
- storageConf := filepath.Join(os.Getenv("HOME"), ".config/containers/storage.conf")
+ storageConf := StorageConfigFile()
if _, err := os.Stat(storageConf); err == nil {
+ defaultRootlessRunRoot := storageOpts.RunRoot
+ defaultRootlessGraphRoot := storageOpts.GraphRoot
+ storageOpts = storage.StoreOptions{}
storage.ReloadConfigurationFile(storageConf, &storageOpts)
+
+ // If the file did not specify a graphroot or runroot,
+ // set sane defaults so we don't try and use root-owned
+ // directories
+ if storageOpts.RunRoot == "" {
+ storageOpts.RunRoot = defaultRootlessRunRoot
+ }
+ if storageOpts.GraphRoot == "" {
+ storageOpts.GraphRoot = defaultRootlessGraphRoot
+ }
} else if os.IsNotExist(err) {
os.MkdirAll(filepath.Dir(storageConf), 0755)
file, err := os.OpenFile(storageConf, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666)
@@ -334,3 +347,11 @@ func GetDefaultStoreOptions() (storage.StoreOptions, string, error) {
}
return storageOpts, volumePath, nil
}
+
+// StorageConfigFile returns the path to the storage config file used
+func StorageConfigFile() string {
+ if rootless.IsRootless() {
+ return filepath.Join(os.Getenv("HOME"), ".config/containers/storage.conf")
+ }
+ return storage.DefaultConfigFile
+}
diff --git a/pkg/varlinkapi/containers.go b/pkg/varlinkapi/containers.go
index 07d981786..a01e3cc2b 100644
--- a/pkg/varlinkapi/containers.go
+++ b/pkg/varlinkapi/containers.go
@@ -12,6 +12,7 @@ import (
"github.com/containers/libpod/cmd/podman/shared"
"github.com/containers/libpod/cmd/podman/varlink"
"github.com/containers/libpod/libpod"
+ cc "github.com/containers/libpod/pkg/spec"
"github.com/containers/storage/pkg/archive"
"github.com/pkg/errors"
)
@@ -68,7 +69,12 @@ func (i *LibpodAPI) InspectContainer(call iopodman.VarlinkCall, name string) err
if err != nil {
return call.ReplyErrorOccurred(err.Error())
}
- data, err := shared.GetCtrInspectInfo(ctr, inspectInfo)
+ artifact, err := getArtifact(ctr)
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+
+ data, err := shared.GetCtrInspectInfo(ctr.Config(), inspectInfo, artifact)
if err != nil {
return call.ReplyErrorOccurred(err.Error())
}
@@ -462,3 +468,81 @@ func (i *LibpodAPI) ContainerRestore(call iopodman.VarlinkCall, name string, kee
}
return call.ReplyContainerRestore(ctr.ID())
}
+
+func getArtifact(ctr *libpod.Container) (*cc.CreateConfig, error) {
+ var createArtifact cc.CreateConfig
+ artifact, err := ctr.GetArtifact("create-config")
+ if err != nil {
+ return nil, err
+ }
+ if err := json.Unmarshal(artifact, &createArtifact); err != nil {
+ return nil, err
+ }
+ return &createArtifact, nil
+}
+
+// ContainerConfig returns just the container.config struct
+func (i *LibpodAPI) ContainerConfig(call iopodman.VarlinkCall, name string) error {
+ ctr, err := i.Runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ config := ctr.Config()
+ b, err := json.Marshal(config)
+ if err != nil {
+ return call.ReplyErrorOccurred("unable to serialize container config")
+ }
+ return call.ReplyContainerConfig(string(b))
+}
+
+// ContainerArtifacts returns an untouched container's artifact in string format
+func (i *LibpodAPI) ContainerArtifacts(call iopodman.VarlinkCall, name, artifactName string) error {
+ ctr, err := i.Runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ artifacts, err := ctr.GetArtifact(artifactName)
+ if err != nil {
+ return call.ReplyErrorOccurred("unable to get container artifacts")
+ }
+ b, err := json.Marshal(artifacts)
+ if err != nil {
+ return call.ReplyErrorOccurred("unable to serialize container artifacts")
+ }
+ return call.ReplyContainerArtifacts(string(b))
+}
+
+// ContainerInspectData returns the inspect data of a container in string format
+func (i *LibpodAPI) ContainerInspectData(call iopodman.VarlinkCall, name string) error {
+ ctr, err := i.Runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ data, err := ctr.Inspect(true)
+ if err != nil {
+ return call.ReplyErrorOccurred("unable to inspect container")
+ }
+ b, err := json.Marshal(data)
+ if err != nil {
+ return call.ReplyErrorOccurred("unable to serialize container inspect data")
+ }
+ return call.ReplyContainerInspectData(string(b))
+
+}
+
+// ContainerStateData returns a container's state data in string format
+func (i *LibpodAPI) ContainerStateData(call iopodman.VarlinkCall, name string) error {
+ ctr, err := i.Runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ data, err := ctr.ContainerState()
+ if err != nil {
+ return call.ReplyErrorOccurred("unable to obtain container state")
+ }
+ b, err := json.Marshal(data)
+ if err != nil {
+ return call.ReplyErrorOccurred("unable to serialize container inspect data")
+ }
+ return call.ReplyContainerStateData(string(b))
+}
diff --git a/pkg/varlinkapi/containers_create.go b/pkg/varlinkapi/containers_create.go
index 63bc93686..d72eaeb18 100644
--- a/pkg/varlinkapi/containers_create.go
+++ b/pkg/varlinkapi/containers_create.go
@@ -41,7 +41,9 @@ func (i *LibpodAPI) CreateContainer(call iopodman.VarlinkCall, config iopodman.C
return call.ReplyErrorOccurred(err.Error())
}
- options, err := createConfig.GetContainerCreateOptions(i.Runtime)
+ // TODO fix when doing remote client and dealing with the ability to create a container
+ // within a non-existing pod (i.e. --pod new:foobar)
+ options, err := createConfig.GetContainerCreateOptions(i.Runtime, nil)
if err != nil {
return call.ReplyErrorOccurred(err.Error())
}
diff --git a/pkg/varlinkapi/images.go b/pkg/varlinkapi/images.go
index 5e4cb4ccb..744f031c0 100644
--- a/pkg/varlinkapi/images.go
+++ b/pkg/varlinkapi/images.go
@@ -41,18 +41,28 @@ func (i *LibpodAPI) ListImages(call iopodman.VarlinkCall) error {
for _, image := range images {
labels, _ := image.Labels(getContext())
containers, _ := image.Containers()
+ repoDigests, err := image.RepoDigests()
+ if err != nil {
+ return err
+ }
+
size, _ := image.Size(getContext())
+ isParent, err := image.IsParent()
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
i := iopodman.ImageInList{
Id: image.ID(),
ParentId: image.Parent,
RepoTags: image.Names(),
- RepoDigests: image.RepoDigests(),
+ RepoDigests: repoDigests,
Created: image.Created().String(),
Size: int64(*size),
VirtualSize: image.VirtualSize,
Containers: int64(len(containers)),
Labels: labels,
+ IsParent: isParent,
}
imageList = append(imageList, i)
}
@@ -73,6 +83,10 @@ func (i *LibpodAPI) GetImage(call iopodman.VarlinkCall, name string) error {
if err != nil {
return err
}
+ repoDigests, err := newImage.RepoDigests()
+ if err != nil {
+ return err
+ }
size, err := newImage.Size(getContext())
if err != nil {
return err
@@ -82,7 +96,7 @@ func (i *LibpodAPI) GetImage(call iopodman.VarlinkCall, name string) error {
Id: newImage.ID(),
ParentId: newImage.Parent,
RepoTags: newImage.Names(),
- RepoDigests: newImage.RepoDigests(),
+ RepoDigests: repoDigests,
Created: newImage.Created().String(),
Size: int64(*size),
VirtualSize: newImage.VirtualSize,
@@ -611,3 +625,21 @@ func (i *LibpodAPI) ContainerRunlabel(call iopodman.VarlinkCall, input iopodman.
}
return call.ReplyContainerRunlabel()
}
+
+// ImagesPrune ....
+func (i *LibpodAPI) ImagesPrune(call iopodman.VarlinkCall) error {
+ var (
+ pruned []string
+ )
+ pruneImages, err := i.Runtime.ImageRuntime().GetPruneImages()
+ if err != nil {
+ return err
+ }
+ for _, i := range pruneImages {
+ if err := i.Remove(true); err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ pruned = append(pruned, i.ID())
+ }
+ return call.ReplyImagesPrune(pruned)
+}
diff --git a/pkg/varlinkapi/system.go b/pkg/varlinkapi/system.go
index a29d22e7d..376502f21 100644
--- a/pkg/varlinkapi/system.go
+++ b/pkg/varlinkapi/system.go
@@ -16,11 +16,12 @@ func (i *LibpodAPI) GetVersion(call iopodman.VarlinkCall) error {
}
return call.ReplyGetVersion(iopodman.Version{
- Version: versionInfo.Version,
- Go_version: versionInfo.GoVersion,
- Git_commit: versionInfo.GitCommit,
- Built: versionInfo.Built,
- Os_arch: versionInfo.OsArch,
+ Remote_api_version: versionInfo.RemoteAPIVersion,
+ Version: versionInfo.Version,
+ Go_version: versionInfo.GoVersion,
+ Git_commit: versionInfo.GitCommit,
+ Built: versionInfo.Built,
+ Os_arch: versionInfo.OsArch,
})
}
@@ -102,6 +103,5 @@ func (i *LibpodAPI) GetInfo(call iopodman.VarlinkCall) error {
podmanInfo.Podman = pmaninfo
podmanInfo.Registries = registries
podmanInfo.Insecure_registries = insecureRegistries
-
return call.ReplyGetInfo(podmanInfo)
}
diff --git a/test/e2e/attach_test.go b/test/e2e/attach_test.go
index 6bc576461..42866d5a1 100644
--- a/test/e2e/attach_test.go
+++ b/test/e2e/attach_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/checkpoint_test.go b/test/e2e/checkpoint_test.go
index 4e892d11c..fda6eb085 100644
--- a/test/e2e/checkpoint_test.go
+++ b/test/e2e/checkpoint_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
@@ -199,14 +201,17 @@ var _ = Describe("Podman checkpoint", func() {
})
It("podman checkpoint container with established tcp connections", func() {
- Skip("Seems to not work (yet) in CI")
podmanTest.RestoreArtifact(redis)
- session := podmanTest.Podman([]string{"run", "-it", "--security-opt", "seccomp=unconfined", "--network", "host", "-d", redis})
+ session := podmanTest.Podman([]string{"run", "-it", "--security-opt", "seccomp=unconfined", "-d", redis})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
+ IP := podmanTest.Podman([]string{"inspect", "-l", "--format={{.NetworkSettings.IPAddress}}"})
+ IP.WaitWithDefaultTimeout()
+ Expect(IP.ExitCode()).To(Equal(0))
+
// Open a network connection to the redis server
- conn, err := net.Dial("tcp", "127.0.0.1:6379")
+ conn, err := net.Dial("tcp", IP.OutputToString()+":6379")
if err != nil {
os.Exit(1)
}
@@ -287,4 +292,40 @@ var _ = Describe("Podman checkpoint", func() {
Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
})
+ It("podman checkpoint and restore container with same IP", func() {
+ session := podmanTest.Podman([]string{"run", "-it", "--security-opt", "seccomp=unconfined", "--name", "test_name", "-d", ALPINE, "top"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ IPBefore := podmanTest.Podman([]string{"inspect", "-l", "--format={{.NetworkSettings.IPAddress}}"})
+ IPBefore.WaitWithDefaultTimeout()
+ Expect(IPBefore.ExitCode()).To(Equal(0))
+
+ result := podmanTest.Podman([]string{"container", "checkpoint", "test_name"})
+ result.WaitWithDefaultTimeout()
+
+ Expect(result.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
+ Expect(podmanTest.GetContainerStatus()).To(ContainSubstring("Exited"))
+
+ result = podmanTest.Podman([]string{"container", "restore", "test_name"})
+ result.WaitWithDefaultTimeout()
+
+ IPAfter := podmanTest.Podman([]string{"inspect", "-l", "--format={{.NetworkSettings.IPAddress}}"})
+ IPAfter.WaitWithDefaultTimeout()
+ Expect(IPAfter.ExitCode()).To(Equal(0))
+
+ // Check that IP address did not change between checkpointing and restoring
+ Expect(IPBefore.OutputToString()).To(Equal(IPAfter.OutputToString()))
+
+ Expect(result.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
+ Expect(podmanTest.GetContainerStatus()).To(ContainSubstring("Up"))
+
+ result = podmanTest.Podman([]string{"rm", "-fa"})
+ result.WaitWithDefaultTimeout()
+ Expect(result.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
+ })
+
})
diff --git a/test/e2e/commit_test.go b/test/e2e/commit_test.go
index 18771c09e..34b218621 100644
--- a/test/e2e/commit_test.go
+++ b/test/e2e/commit_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/common_test.go b/test/e2e/common_test.go
new file mode 100644
index 000000000..308a6bf29
--- /dev/null
+++ b/test/e2e/common_test.go
@@ -0,0 +1,218 @@
+package integration
+
+import (
+ "encoding/json"
+ "fmt"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+ "testing"
+
+ "github.com/containers/libpod/pkg/inspect"
+ . "github.com/containers/libpod/test/utils"
+ "github.com/containers/storage/pkg/reexec"
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+)
+
+var (
+ PODMAN_BINARY string
+ CONMON_BINARY string
+ CNI_CONFIG_DIR string
+ RUNC_BINARY string
+ INTEGRATION_ROOT string
+ CGROUP_MANAGER = "systemd"
+ ARTIFACT_DIR = "/tmp/.artifacts"
+ RESTORE_IMAGES = []string{ALPINE, BB}
+ defaultWaitTimeout = 90
+)
+
+// PodmanTestIntegration struct for command line options
+type PodmanTestIntegration struct {
+ PodmanTest
+ ConmonBinary string
+ CrioRoot string
+ CNIConfigDir string
+ RunCBinary string
+ RunRoot string
+ StorageOptions string
+ SignaturePolicyPath string
+ CgroupManager string
+ Host HostOS
+}
+
+// PodmanSessionIntegration sturct for command line session
+type PodmanSessionIntegration struct {
+ *PodmanSession
+}
+
+// TestLibpod ginkgo master function
+func TestLibpod(t *testing.T) {
+ if reexec.Init() {
+ os.Exit(1)
+ }
+ if os.Getenv("NOCACHE") == "1" {
+ CACHE_IMAGES = []string{}
+ RESTORE_IMAGES = []string{}
+ }
+ RegisterFailHandler(Fail)
+ RunSpecs(t, "Libpod Suite")
+}
+
+var _ = BeforeSuite(func() {
+ //Cache images
+ cwd, _ := os.Getwd()
+ INTEGRATION_ROOT = filepath.Join(cwd, "../../")
+ podman := PodmanTestCreate("/tmp")
+ podman.ArtifactPath = ARTIFACT_DIR
+ if _, err := os.Stat(ARTIFACT_DIR); os.IsNotExist(err) {
+ if err = os.Mkdir(ARTIFACT_DIR, 0777); err != nil {
+ fmt.Printf("%q\n", err)
+ os.Exit(1)
+ }
+ }
+ for _, image := range CACHE_IMAGES {
+ if err := podman.CreateArtifact(image); err != nil {
+ fmt.Printf("%q\n", err)
+ os.Exit(1)
+ }
+ }
+ host := GetHostDistributionInfo()
+ if host.Distribution == "rhel" && strings.HasPrefix(host.Version, "7") {
+ f, err := os.OpenFile("/proc/sys/user/max_user_namespaces", os.O_WRONLY, 0644)
+ if err != nil {
+ fmt.Println("Unable to enable userspace on RHEL 7")
+ os.Exit(1)
+ }
+ _, err = f.WriteString("15000")
+ if err != nil {
+ fmt.Println("Unable to enable userspace on RHEL 7")
+ os.Exit(1)
+ }
+ f.Close()
+ }
+})
+
+// PodmanTestCreate creates a PodmanTestIntegration instance for the tests
+func PodmanTestCreateUtil(tempDir string, remote bool) *PodmanTestIntegration {
+ var (
+ podmanRemoteBinary string
+ )
+
+ host := GetHostDistributionInfo()
+ cwd, _ := os.Getwd()
+
+ podmanBinary := filepath.Join(cwd, "../../bin/podman")
+ if os.Getenv("PODMAN_BINARY") != "" {
+ podmanBinary = os.Getenv("PODMAN_BINARY")
+ }
+
+ if remote {
+ podmanRemoteBinary = filepath.Join(cwd, "../../bin/podman-remote")
+ if os.Getenv("PODMAN_REMOTE_BINARY") != "" {
+ podmanRemoteBinary = os.Getenv("PODMAN_REMOTE_BINARY")
+ }
+ }
+ conmonBinary := filepath.Join("/usr/libexec/podman/conmon")
+ altConmonBinary := "/usr/libexec/crio/conmon"
+ if _, err := os.Stat(conmonBinary); os.IsNotExist(err) {
+ conmonBinary = altConmonBinary
+ }
+ if os.Getenv("CONMON_BINARY") != "" {
+ conmonBinary = os.Getenv("CONMON_BINARY")
+ }
+ storageOptions := STORAGE_OPTIONS
+ if os.Getenv("STORAGE_OPTIONS") != "" {
+ storageOptions = os.Getenv("STORAGE_OPTIONS")
+ }
+ cgroupManager := CGROUP_MANAGER
+ if os.Getenv("CGROUP_MANAGER") != "" {
+ cgroupManager = os.Getenv("CGROUP_MANAGER")
+ }
+
+ // Ubuntu doesn't use systemd cgroups
+ if host.Distribution == "ubuntu" {
+ cgroupManager = "cgroupfs"
+ }
+
+ runCBinary, err := exec.LookPath("runc")
+ // If we cannot find the runc binary, setting to something static as we have no way
+ // to return an error. The tests will fail and point out that the runc binary could
+ // not be found nicely.
+ if err != nil {
+ runCBinary = "/usr/bin/runc"
+ }
+
+ CNIConfigDir := "/etc/cni/net.d"
+
+ p := &PodmanTestIntegration{
+ PodmanTest: PodmanTest{
+ PodmanBinary: podmanBinary,
+ ArtifactPath: ARTIFACT_DIR,
+ TempDir: tempDir,
+ RemoteTest: remote,
+ },
+ ConmonBinary: conmonBinary,
+ CrioRoot: filepath.Join(tempDir, "crio"),
+ CNIConfigDir: CNIConfigDir,
+ RunCBinary: runCBinary,
+ RunRoot: filepath.Join(tempDir, "crio-run"),
+ StorageOptions: storageOptions,
+ SignaturePolicyPath: filepath.Join(INTEGRATION_ROOT, "test/policy.json"),
+ CgroupManager: cgroupManager,
+ Host: host,
+ }
+ if remote {
+ p.PodmanTest.RemotePodmanBinary = podmanRemoteBinary
+ }
+
+ // Setup registries.conf ENV variable
+ p.setDefaultRegistriesConfigEnv()
+ // Rewrite the PodmanAsUser function
+ p.PodmanMakeOptions = p.makeOptions
+ return p
+}
+
+// RestoreAllArtifacts unpacks all cached images
+func (p *PodmanTestIntegration) RestoreAllArtifacts() error {
+ if os.Getenv("NO_TEST_CACHE") != "" {
+ return nil
+ }
+ for _, image := range RESTORE_IMAGES {
+ if err := p.RestoreArtifact(image); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// CreateArtifact creates a cached image in the artifact dir
+func (p *PodmanTestIntegration) CreateArtifact(image string) error {
+ if os.Getenv("NO_TEST_CACHE") != "" {
+ return nil
+ }
+ fmt.Printf("Caching %s...", image)
+ dest := strings.Split(image, "/")
+ destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
+ if _, err := os.Stat(destName); os.IsNotExist(err) {
+ pull := p.Podman([]string{"pull", image})
+ pull.Wait(90)
+
+ save := p.Podman([]string{"save", "-o", destName, image})
+ save.Wait(90)
+ fmt.Printf("\n")
+ } else {
+ fmt.Printf(" already exists.\n")
+ }
+ return nil
+}
+
+// InspectImageJSON takes the session output of an inspect
+// image and returns json
+func (s *PodmanSessionIntegration) InspectImageJSON() []inspect.ImageData {
+ var i []inspect.ImageData
+ err := json.Unmarshal(s.Out.Contents(), &i)
+ Expect(err).To(BeNil())
+ return i
+}
diff --git a/test/e2e/create_staticip_test.go b/test/e2e/create_staticip_test.go
index 17ac5cb40..9bdc30342 100644
--- a/test/e2e/create_staticip_test.go
+++ b/test/e2e/create_staticip_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/create_test.go b/test/e2e/create_test.go
index 684a7cd88..b28a0c428 100644
--- a/test/e2e/create_test.go
+++ b/test/e2e/create_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/diff_test.go b/test/e2e/diff_test.go
index 2c0060dd5..94e150467 100644
--- a/test/e2e/diff_test.go
+++ b/test/e2e/diff_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/exec_test.go b/test/e2e/exec_test.go
index fec80717f..5839b364d 100644
--- a/test/e2e/exec_test.go
+++ b/test/e2e/exec_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
@@ -127,4 +129,36 @@ var _ = Describe("Podman exec", func() {
Expect(session2.ExitCode()).To(Equal(0))
Expect(session2.OutputToString()).To(Equal(testUser))
})
+
+ It("podman exec simple working directory test", func() {
+ setup := podmanTest.RunTopContainer("test1")
+ setup.WaitWithDefaultTimeout()
+ Expect(setup.ExitCode()).To(Equal(0))
+
+ session := podmanTest.Podman([]string{"exec", "-l", "--workdir", "/tmp", "pwd"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ match, _ := session.GrepString("/tmp")
+ Expect(match).Should(BeTrue())
+
+ session = podmanTest.Podman([]string{"exec", "-l", "-w", "/tmp", "pwd"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ match, _ = session.GrepString("/tmp")
+ Expect(match).Should(BeTrue())
+ })
+
+ It("podman exec missing working directory test", func() {
+ setup := podmanTest.RunTopContainer("test1")
+ setup.WaitWithDefaultTimeout()
+ Expect(setup.ExitCode()).To(Equal(0))
+
+ session := podmanTest.Podman([]string{"exec", "-l", "--workdir", "/missing", "pwd"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(1))
+
+ session = podmanTest.Podman([]string{"exec", "-l", "-w", "/missing", "pwd"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(1))
+ })
})
diff --git a/test/e2e/exists_test.go b/test/e2e/exists_test.go
index d9652de4b..c4b5e4968 100644
--- a/test/e2e/exists_test.go
+++ b/test/e2e/exists_test.go
@@ -32,6 +32,7 @@ var _ = Describe("Podman image|container exists", func() {
GinkgoWriter.Write([]byte(timedResult))
})
+
It("podman image exists in local storage by fq name", func() {
session := podmanTest.Podman([]string{"image", "exists", ALPINE})
session.WaitWithDefaultTimeout()
@@ -48,6 +49,7 @@ var _ = Describe("Podman image|container exists", func() {
Expect(session.ExitCode()).To(Equal(1))
})
It("podman container exists in local storage by name", func() {
+ SkipIfRemote()
setup := podmanTest.RunTopContainer("foobar")
setup.WaitWithDefaultTimeout()
Expect(setup.ExitCode()).To(Equal(0))
@@ -57,6 +59,7 @@ var _ = Describe("Podman image|container exists", func() {
Expect(session.ExitCode()).To(Equal(0))
})
It("podman container exists in local storage by container ID", func() {
+ SkipIfRemote()
setup := podmanTest.RunTopContainer("")
setup.WaitWithDefaultTimeout()
Expect(setup.ExitCode()).To(Equal(0))
@@ -67,6 +70,7 @@ var _ = Describe("Podman image|container exists", func() {
Expect(session.ExitCode()).To(Equal(0))
})
It("podman container exists in local storage by short container ID", func() {
+ SkipIfRemote()
setup := podmanTest.RunTopContainer("")
setup.WaitWithDefaultTimeout()
Expect(setup.ExitCode()).To(Equal(0))
@@ -77,12 +81,14 @@ var _ = Describe("Podman image|container exists", func() {
Expect(session.ExitCode()).To(Equal(0))
})
It("podman container does not exist in local storage", func() {
+ SkipIfRemote()
session := podmanTest.Podman([]string{"container", "exists", "foobar"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(1))
})
It("podman pod exists in local storage by name", func() {
+ SkipIfRemote()
setup, rc, _ := podmanTest.CreatePod("foobar")
setup.WaitWithDefaultTimeout()
Expect(rc).To(Equal(0))
@@ -92,6 +98,7 @@ var _ = Describe("Podman image|container exists", func() {
Expect(session.ExitCode()).To(Equal(0))
})
It("podman pod exists in local storage by container ID", func() {
+ SkipIfRemote()
setup, rc, podID := podmanTest.CreatePod("")
setup.WaitWithDefaultTimeout()
Expect(rc).To(Equal(0))
@@ -101,6 +108,7 @@ var _ = Describe("Podman image|container exists", func() {
Expect(session.ExitCode()).To(Equal(0))
})
It("podman pod exists in local storage by short container ID", func() {
+ SkipIfRemote()
setup, rc, podID := podmanTest.CreatePod("")
setup.WaitWithDefaultTimeout()
Expect(rc).To(Equal(0))
@@ -110,6 +118,7 @@ var _ = Describe("Podman image|container exists", func() {
Expect(session.ExitCode()).To(Equal(0))
})
It("podman pod does not exist in local storage", func() {
+ SkipIfRemote()
session := podmanTest.Podman([]string{"pod", "exists", "foobar"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(1))
diff --git a/test/e2e/export_test.go b/test/e2e/export_test.go
index 42ea45041..de3f23667 100644
--- a/test/e2e/export_test.go
+++ b/test/e2e/export_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/generate_kube_test.go b/test/e2e/generate_kube_test.go
index 0ee078455..94e02dc55 100644
--- a/test/e2e/generate_kube_test.go
+++ b/test/e2e/generate_kube_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/images_test.go b/test/e2e/images_test.go
index af32c032b..595084403 100644
--- a/test/e2e/images_test.go
+++ b/test/e2e/images_test.go
@@ -106,6 +106,9 @@ var _ = Describe("Podman images", func() {
})
It("podman images filter before image", func() {
+ if podmanTest.RemoteTest {
+ Skip("Does not work on remote client")
+ }
dockerfile := `FROM docker.io/library/alpine:latest
`
podmanTest.BuildImage(dockerfile, "foobar.com/before:latest", "false")
@@ -116,6 +119,9 @@ var _ = Describe("Podman images", func() {
})
It("podman images filter after image", func() {
+ if podmanTest.RemoteTest {
+ Skip("Does not work on remote client")
+ }
rmi := podmanTest.Podman([]string{"rmi", "busybox"})
rmi.WaitWithDefaultTimeout()
Expect(rmi.ExitCode()).To(Equal(0))
@@ -130,6 +136,9 @@ var _ = Describe("Podman images", func() {
})
It("podman images filter dangling", func() {
+ if podmanTest.RemoteTest {
+ Skip("Does not work on remote client")
+ }
dockerfile := `FROM docker.io/library/alpine:latest
`
podmanTest.BuildImage(dockerfile, "foobar.com/before:latest", "false")
@@ -141,6 +150,9 @@ var _ = Describe("Podman images", func() {
})
It("podman check for image with sha256: prefix", func() {
+ if podmanTest.RemoteTest {
+ Skip("Does not work on remote client")
+ }
session := podmanTest.Podman([]string{"inspect", "--format=json", ALPINE})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
@@ -175,6 +187,9 @@ var _ = Describe("Podman images", func() {
})
It("podman images --all flag", func() {
+ if podmanTest.RemoteTest {
+ Skip("Does not work on remote client")
+ }
dockerfile := `FROM docker.io/library/alpine:latest
RUN mkdir hello
RUN touch test.txt
diff --git a/test/e2e/import_test.go b/test/e2e/import_test.go
index 6f132fd93..dc7451f7b 100644
--- a/test/e2e/import_test.go
+++ b/test/e2e/import_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/info_test.go b/test/e2e/info_test.go
index e972c86c8..2022dff1b 100644
--- a/test/e2e/info_test.go
+++ b/test/e2e/info_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/inspect_test.go b/test/e2e/inspect_test.go
index 87c4db935..e5c471bf9 100644
--- a/test/e2e/inspect_test.go
+++ b/test/e2e/inspect_test.go
@@ -43,6 +43,7 @@ var _ = Describe("Podman inspect", func() {
})
It("podman inspect bogus container", func() {
+ SkipIfRemote()
session := podmanTest.Podman([]string{"inspect", "foobar4321"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Not(Equal(0)))
@@ -66,6 +67,7 @@ var _ = Describe("Podman inspect", func() {
})
It("podman inspect container with size", func() {
+ SkipIfRemote()
_, ec, _ := podmanTest.RunLsContainer("")
Expect(ec).To(Equal(0))
@@ -77,6 +79,7 @@ var _ = Describe("Podman inspect", func() {
})
It("podman inspect container and image", func() {
+ SkipIfRemote()
ls, ec, _ := podmanTest.RunLsContainer("")
Expect(ec).To(Equal(0))
cid := ls.OutputToString()
@@ -88,6 +91,7 @@ var _ = Describe("Podman inspect", func() {
})
It("podman inspect -l with additional input should fail", func() {
+ SkipIfRemote()
result := podmanTest.Podman([]string{"inspect", "-l", "1234foobar"})
result.WaitWithDefaultTimeout()
Expect(result.ExitCode()).To(Equal(125))
diff --git a/test/e2e/kill_test.go b/test/e2e/kill_test.go
index 913a843cb..5f1f5f4c1 100644
--- a/test/e2e/kill_test.go
+++ b/test/e2e/kill_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/libpod_suite_remoteclient_test.go b/test/e2e/libpod_suite_remoteclient_test.go
new file mode 100644
index 000000000..4b769a574
--- /dev/null
+++ b/test/e2e/libpod_suite_remoteclient_test.go
@@ -0,0 +1,188 @@
+// +build remoteclient
+
+package integration
+
+import (
+ "fmt"
+ "github.com/containers/libpod/libpod"
+ "github.com/containers/libpod/pkg/inspect"
+ "github.com/onsi/ginkgo"
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+)
+
+func SkipIfRemote() {
+ ginkgo.Skip("This function is not enabled for remote podman")
+}
+
+// Cleanup cleans up the temporary store
+func (p *PodmanTestIntegration) Cleanup() {
+ p.StopVarlink()
+ // TODO
+ // Stop all containers
+ // Rm all containers
+
+ if err := os.RemoveAll(p.TempDir); err != nil {
+ fmt.Printf("%q\n", err)
+ }
+
+ // Clean up the registries configuration file ENV variable set in Create
+ resetRegistriesConfigEnv()
+}
+
+// Podman is the exec call to podman on the filesystem
+func (p *PodmanTestIntegration) Podman(args []string) *PodmanSessionIntegration {
+ podmanSession := p.PodmanBase(args)
+ return &PodmanSessionIntegration{podmanSession}
+}
+
+//RunTopContainer runs a simple container in the background that
+// runs top. If the name passed != "", it will have a name
+func (p *PodmanTestIntegration) RunTopContainer(name string) *PodmanSessionIntegration {
+ // TODO
+ return nil
+}
+
+//RunLsContainer runs a simple container in the background that
+// simply runs ls. If the name passed != "", it will have a name
+func (p *PodmanTestIntegration) RunLsContainer(name string) (*PodmanSessionIntegration, int, string) {
+ // TODO
+ return nil, 0, ""
+}
+
+// InspectImageJSON takes the session output of an inspect
+// image and returns json
+//func (s *PodmanSessionIntegration) InspectImageJSON() []inspect.ImageData {
+// // TODO
+// return nil
+//}
+
+func (p *PodmanTestIntegration) setDefaultRegistriesConfigEnv() {
+ defaultFile := filepath.Join(INTEGRATION_ROOT, "test/registries.conf")
+ os.Setenv("REGISTRIES_CONFIG_PATH", defaultFile)
+}
+
+func (p *PodmanTestIntegration) setRegistriesConfigEnv(b []byte) {
+ outfile := filepath.Join(p.TempDir, "registries.conf")
+ os.Setenv("REGISTRIES_CONFIG_PATH", outfile)
+ ioutil.WriteFile(outfile, b, 0644)
+}
+
+func resetRegistriesConfigEnv() {
+ os.Setenv("REGISTRIES_CONFIG_PATH", "")
+}
+
+// InspectContainerToJSON takes the session output of an inspect
+// container and returns json
+func (s *PodmanSessionIntegration) InspectContainerToJSON() []inspect.ContainerData {
+ // TODO
+ return nil
+}
+
+// CreatePod creates a pod with no infra container
+// it optionally takes a pod name
+func (p *PodmanTestIntegration) CreatePod(name string) (*PodmanSessionIntegration, int, string) {
+ // TODO
+ return nil, 0, ""
+}
+
+func (p *PodmanTestIntegration) RunTopContainerInPod(name, pod string) *PodmanSessionIntegration {
+ // TODO
+ return nil
+}
+
+// BuildImage uses podman build and buildah to build an image
+// called imageName based on a string dockerfile
+func (p *PodmanTestIntegration) BuildImage(dockerfile, imageName string, layers string) {
+ // TODO
+}
+
+// CleanupPod cleans up the temporary store
+func (p *PodmanTestIntegration) CleanupPod() {
+ // TODO
+}
+
+// InspectPodToJSON takes the sessions output from a pod inspect and returns json
+func (s *PodmanSessionIntegration) InspectPodToJSON() libpod.PodInspect {
+ // TODO
+ return libpod.PodInspect{}
+}
+func (p *PodmanTestIntegration) RunLsContainerInPod(name, pod string) (*PodmanSessionIntegration, int, string) {
+ // TODO
+ return nil, 0, ""
+}
+
+// PullImages pulls multiple images
+func (p *PodmanTestIntegration) PullImages(images []string) error {
+ // TODO
+ return libpod.ErrNotImplemented
+}
+
+// PodmanPID execs podman and returns its PID
+func (p *PodmanTestIntegration) PodmanPID(args []string) (*PodmanSessionIntegration, int) {
+ // TODO
+ return nil, 0
+}
+
+// CleanupVolume cleans up the temporary store
+func (p *PodmanTestIntegration) CleanupVolume() {
+ // TODO
+}
+
+func PodmanTestCreate(tempDir string) *PodmanTestIntegration {
+ pti := PodmanTestCreateUtil(tempDir, true)
+ pti.StartVarlink()
+ return pti
+}
+
+func (p *PodmanTestIntegration) StartVarlink() {
+ if _, err := os.Stat("/path/to/whatever"); os.IsNotExist(err) {
+ os.MkdirAll("/run/podman", 0755)
+ }
+ args := []string{"varlink", "--timeout", "0", "unix:/run/podman/io.podman"}
+ podmanOptions := getVarlinkOptions(p, args)
+ command := exec.Command(p.PodmanBinary, podmanOptions...)
+ fmt.Printf("Running: %s %s\n", p.PodmanBinary, strings.Join(podmanOptions, " "))
+ command.Start()
+ p.VarlinkSession = command.Process
+}
+
+func (p *PodmanTestIntegration) StopVarlink() {
+ varlinkSession := p.VarlinkSession
+ varlinkSession.Kill()
+ varlinkSession.Wait()
+}
+
+//MakeOptions assembles all the podman main options
+func (p *PodmanTestIntegration) makeOptions(args []string) []string {
+ return args
+}
+
+//MakeOptions assembles all the podman main options
+func getVarlinkOptions(p *PodmanTestIntegration, args []string) []string {
+ podmanOptions := strings.Split(fmt.Sprintf("--root %s --runroot %s --runtime %s --conmon %s --cni-config-dir %s --cgroup-manager %s",
+ p.CrioRoot, p.RunRoot, p.RunCBinary, p.ConmonBinary, p.CNIConfigDir, p.CgroupManager), " ")
+ if os.Getenv("HOOK_OPTION") != "" {
+ podmanOptions = append(podmanOptions, os.Getenv("HOOK_OPTION"))
+ }
+ podmanOptions = append(podmanOptions, strings.Split(p.StorageOptions, " ")...)
+ podmanOptions = append(podmanOptions, args...)
+ return podmanOptions
+}
+
+// RestoreArtifact puts the cached image into our test store
+func (p *PodmanTestIntegration) RestoreArtifact(image string) error {
+ fmt.Printf("Restoring %s...\n", image)
+ dest := strings.Split(image, "/")
+ destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
+ args := []string{"load", "-q", "-i", destName}
+ podmanOptions := getVarlinkOptions(p, args)
+ command := exec.Command(p.PodmanBinary, podmanOptions...)
+ fmt.Printf("Running: %s %s\n", p.PodmanBinary, strings.Join(podmanOptions, " "))
+ command.Start()
+ command.Wait()
+ return nil
+}
diff --git a/test/e2e/libpod_suite_test.go b/test/e2e/libpod_suite_test.go
index d312124ab..1f218cbdf 100644
--- a/test/e2e/libpod_suite_test.go
+++ b/test/e2e/libpod_suite_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
@@ -8,172 +10,16 @@ import (
"os/exec"
"path/filepath"
"strings"
- "testing"
"github.com/containers/libpod/libpod"
"github.com/containers/libpod/pkg/inspect"
. "github.com/containers/libpod/test/utils"
- "github.com/containers/storage/pkg/reexec"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"github.com/onsi/gomega/gexec"
)
-var (
- PODMAN_BINARY string
- CONMON_BINARY string
- CNI_CONFIG_DIR string
- RUNC_BINARY string
- INTEGRATION_ROOT string
- CGROUP_MANAGER = "systemd"
- ARTIFACT_DIR = "/tmp/.artifacts"
- RESTORE_IMAGES = []string{ALPINE, BB}
- defaultWaitTimeout = 90
-)
-
-// PodmanTestIntegration struct for command line options
-type PodmanTestIntegration struct {
- PodmanTest
- ConmonBinary string
- CrioRoot string
- CNIConfigDir string
- RunCBinary string
- RunRoot string
- StorageOptions string
- SignaturePolicyPath string
- CgroupManager string
- Host HostOS
-}
-
-// PodmanSessionIntegration sturct for command line session
-type PodmanSessionIntegration struct {
- *PodmanSession
-}
-
-// TestLibpod ginkgo master function
-func TestLibpod(t *testing.T) {
- if reexec.Init() {
- os.Exit(1)
- }
- if os.Getenv("NOCACHE") == "1" {
- CACHE_IMAGES = []string{}
- RESTORE_IMAGES = []string{}
- }
- RegisterFailHandler(Fail)
- RunSpecs(t, "Libpod Suite")
-}
-
-var _ = BeforeSuite(func() {
- //Cache images
- cwd, _ := os.Getwd()
- INTEGRATION_ROOT = filepath.Join(cwd, "../../")
- podman := PodmanTestCreate("/tmp")
- podman.ArtifactPath = ARTIFACT_DIR
- if _, err := os.Stat(ARTIFACT_DIR); os.IsNotExist(err) {
- if err = os.Mkdir(ARTIFACT_DIR, 0777); err != nil {
- fmt.Printf("%q\n", err)
- os.Exit(1)
- }
- }
- for _, image := range CACHE_IMAGES {
- if err := podman.CreateArtifact(image); err != nil {
- fmt.Printf("%q\n", err)
- os.Exit(1)
- }
- }
- host := GetHostDistributionInfo()
- if host.Distribution == "rhel" && strings.HasPrefix(host.Version, "7") {
- f, err := os.OpenFile("/proc/sys/user/max_user_namespaces", os.O_WRONLY, 0644)
- if err != nil {
- fmt.Println("Unable to enable userspace on RHEL 7")
- os.Exit(1)
- }
- _, err = f.WriteString("15000")
- if err != nil {
- fmt.Println("Unable to enable userspace on RHEL 7")
- os.Exit(1)
- }
- f.Close()
- }
-})
-
-// PodmanTestCreate creates a PodmanTestIntegration instance for the tests
-func PodmanTestCreate(tempDir string) *PodmanTestIntegration {
-
- host := GetHostDistributionInfo()
- cwd, _ := os.Getwd()
-
- podmanBinary := filepath.Join(cwd, "../../bin/podman")
- if os.Getenv("PODMAN_BINARY") != "" {
- podmanBinary = os.Getenv("PODMAN_BINARY")
- }
- conmonBinary := filepath.Join("/usr/libexec/podman/conmon")
- altConmonBinary := "/usr/libexec/crio/conmon"
- if _, err := os.Stat(conmonBinary); os.IsNotExist(err) {
- conmonBinary = altConmonBinary
- }
- if os.Getenv("CONMON_BINARY") != "" {
- conmonBinary = os.Getenv("CONMON_BINARY")
- }
- storageOptions := STORAGE_OPTIONS
- if os.Getenv("STORAGE_OPTIONS") != "" {
- storageOptions = os.Getenv("STORAGE_OPTIONS")
- }
- cgroupManager := CGROUP_MANAGER
- if os.Getenv("CGROUP_MANAGER") != "" {
- cgroupManager = os.Getenv("CGROUP_MANAGER")
- }
-
- // Ubuntu doesn't use systemd cgroups
- if host.Distribution == "ubuntu" {
- cgroupManager = "cgroupfs"
- }
-
- runCBinary, err := exec.LookPath("runc")
- // If we cannot find the runc binary, setting to something static as we have no way
- // to return an error. The tests will fail and point out that the runc binary could
- // not be found nicely.
- if err != nil {
- runCBinary = "/usr/bin/runc"
- }
-
- CNIConfigDir := "/etc/cni/net.d"
-
- p := &PodmanTestIntegration{
- PodmanTest: PodmanTest{
- PodmanBinary: podmanBinary,
- ArtifactPath: ARTIFACT_DIR,
- TempDir: tempDir,
- },
- ConmonBinary: conmonBinary,
- CrioRoot: filepath.Join(tempDir, "crio"),
- CNIConfigDir: CNIConfigDir,
- RunCBinary: runCBinary,
- RunRoot: filepath.Join(tempDir, "crio-run"),
- StorageOptions: storageOptions,
- SignaturePolicyPath: filepath.Join(INTEGRATION_ROOT, "test/policy.json"),
- CgroupManager: cgroupManager,
- Host: host,
- }
-
- // Setup registries.conf ENV variable
- p.setDefaultRegistriesConfigEnv()
- // Rewrite the PodmanAsUser function
- p.PodmanMakeOptions = p.makeOptions
- return p
-}
-
-//MakeOptions assembles all the podman main options
-func (p *PodmanTestIntegration) makeOptions(args []string) []string {
- podmanOptions := strings.Split(fmt.Sprintf("--root %s --runroot %s --runtime %s --conmon %s --cni-config-dir %s --cgroup-manager %s",
- p.CrioRoot, p.RunRoot, p.RunCBinary, p.ConmonBinary, p.CNIConfigDir, p.CgroupManager), " ")
- if os.Getenv("HOOK_OPTION") != "" {
- podmanOptions = append(podmanOptions, os.Getenv("HOOK_OPTION"))
- }
- podmanOptions = append(podmanOptions, strings.Split(p.StorageOptions, " ")...)
- podmanOptions = append(podmanOptions, args...)
- return podmanOptions
-}
+func SkipIfRemote() {}
// Podman is the exec call to podman on the filesystem
func (p *PodmanTestIntegration) Podman(args []string) *PodmanSessionIntegration {
@@ -272,59 +118,6 @@ func (s *PodmanSessionIntegration) InspectPodToJSON() libpod.PodInspect {
return i
}
-// InspectImageJSON takes the session output of an inspect
-// image and returns json
-func (s *PodmanSessionIntegration) InspectImageJSON() []inspect.ImageData {
- var i []inspect.ImageData
- err := json.Unmarshal(s.Out.Contents(), &i)
- Expect(err).To(BeNil())
- return i
-}
-
-// CreateArtifact creates a cached image in the artifact dir
-func (p *PodmanTestIntegration) CreateArtifact(image string) error {
- if os.Getenv("NO_TEST_CACHE") != "" {
- return nil
- }
- fmt.Printf("Caching %s...", image)
- dest := strings.Split(image, "/")
- destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
- if _, err := os.Stat(destName); os.IsNotExist(err) {
- pull := p.Podman([]string{"pull", image})
- pull.Wait(90)
-
- save := p.Podman([]string{"save", "-o", destName, image})
- save.Wait(90)
- fmt.Printf("\n")
- } else {
- fmt.Printf(" already exists.\n")
- }
- return nil
-}
-
-// RestoreArtifact puts the cached image into our test store
-func (p *PodmanTestIntegration) RestoreArtifact(image string) error {
- fmt.Printf("Restoring %s...\n", image)
- dest := strings.Split(image, "/")
- destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
- restore := p.Podman([]string{"load", "-q", "-i", destName})
- restore.Wait(90)
- return nil
-}
-
-// RestoreAllArtifacts unpacks all cached images
-func (p *PodmanTestIntegration) RestoreAllArtifacts() error {
- if os.Getenv("NO_TEST_CACHE") != "" {
- return nil
- }
- for _, image := range RESTORE_IMAGES {
- if err := p.RestoreArtifact(image); err != nil {
- return err
- }
- }
- return nil
-}
-
// CreatePod creates a pod with no infra container
// it optionally takes a pod name
func (p *PodmanTestIntegration) CreatePod(name string) (*PodmanSessionIntegration, int, string) {
@@ -406,3 +199,29 @@ func (p *PodmanTestIntegration) setRegistriesConfigEnv(b []byte) {
func resetRegistriesConfigEnv() {
os.Setenv("REGISTRIES_CONFIG_PATH", "")
}
+
+func PodmanTestCreate(tempDir string) *PodmanTestIntegration {
+ return PodmanTestCreateUtil(tempDir, false)
+}
+
+//MakeOptions assembles all the podman main options
+func (p *PodmanTestIntegration) makeOptions(args []string) []string {
+ podmanOptions := strings.Split(fmt.Sprintf("--root %s --runroot %s --runtime %s --conmon %s --cni-config-dir %s --cgroup-manager %s",
+ p.CrioRoot, p.RunRoot, p.RunCBinary, p.ConmonBinary, p.CNIConfigDir, p.CgroupManager), " ")
+ if os.Getenv("HOOK_OPTION") != "" {
+ podmanOptions = append(podmanOptions, os.Getenv("HOOK_OPTION"))
+ }
+ podmanOptions = append(podmanOptions, strings.Split(p.StorageOptions, " ")...)
+ podmanOptions = append(podmanOptions, args...)
+ return podmanOptions
+}
+
+// RestoreArtifact puts the cached image into our test store
+func (p *PodmanTestIntegration) RestoreArtifact(image string) error {
+ fmt.Printf("Restoring %s...\n", image)
+ dest := strings.Split(image, "/")
+ destName := fmt.Sprintf("/tmp/%s.tar", strings.Replace(strings.Join(strings.Split(dest[len(dest)-1], "/"), ""), ":", "-", -1))
+ restore := p.Podman([]string{"load", "-q", "-i", destName})
+ restore.Wait(90)
+ return nil
+}
diff --git a/test/e2e/load_test.go b/test/e2e/load_test.go
index 4d7007191..423f99ac8 100644
--- a/test/e2e/load_test.go
+++ b/test/e2e/load_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/logs_test.go b/test/e2e/logs_test.go
index 236ddb221..d3c4fb802 100644
--- a/test/e2e/logs_test.go
+++ b/test/e2e/logs_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/mount_test.go b/test/e2e/mount_test.go
index a93a0aa4a..94218e6a9 100644
--- a/test/e2e/mount_test.go
+++ b/test/e2e/mount_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/namespace_test.go b/test/e2e/namespace_test.go
index ebce09f54..a0b6e6187 100644
--- a/test/e2e/namespace_test.go
+++ b/test/e2e/namespace_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pause_test.go b/test/e2e/pause_test.go
index e109bc077..f1ea17ead 100644
--- a/test/e2e/pause_test.go
+++ b/test/e2e/pause_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_create_test.go b/test/e2e/pod_create_test.go
index 5abf9613b..cb2b0e7b0 100644
--- a/test/e2e/pod_create_test.go
+++ b/test/e2e/pod_create_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_infra_container_test.go b/test/e2e/pod_infra_container_test.go
index 8c7c09c97..161bf7f9c 100644
--- a/test/e2e/pod_infra_container_test.go
+++ b/test/e2e/pod_infra_container_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_inspect_test.go b/test/e2e/pod_inspect_test.go
index 51e95f788..457acb373 100644
--- a/test/e2e/pod_inspect_test.go
+++ b/test/e2e/pod_inspect_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_kill_test.go b/test/e2e/pod_kill_test.go
index d9cec2cad..419a3a777 100644
--- a/test/e2e/pod_kill_test.go
+++ b/test/e2e/pod_kill_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_pause_test.go b/test/e2e/pod_pause_test.go
index 8f766d3db..a5192f84b 100644
--- a/test/e2e/pod_pause_test.go
+++ b/test/e2e/pod_pause_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_pod_namespaces.go b/test/e2e/pod_pod_namespaces.go
index b1d5abb1c..9815e37ef 100644
--- a/test/e2e/pod_pod_namespaces.go
+++ b/test/e2e/pod_pod_namespaces.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_ps_test.go b/test/e2e/pod_ps_test.go
index 9e816bcfa..3b7198861 100644
--- a/test/e2e/pod_ps_test.go
+++ b/test/e2e/pod_ps_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_restart_test.go b/test/e2e/pod_restart_test.go
index d0964e8de..e8acfd2ec 100644
--- a/test/e2e/pod_restart_test.go
+++ b/test/e2e/pod_restart_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_rm_test.go b/test/e2e/pod_rm_test.go
index 48767b33f..f63d2c8aa 100644
--- a/test/e2e/pod_rm_test.go
+++ b/test/e2e/pod_rm_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_start_test.go b/test/e2e/pod_start_test.go
index 346346425..77e8b586d 100644
--- a/test/e2e/pod_start_test.go
+++ b/test/e2e/pod_start_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_stats_test.go b/test/e2e/pod_stats_test.go
index d7b9a8f48..43d089a24 100644
--- a/test/e2e/pod_stats_test.go
+++ b/test/e2e/pod_stats_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_stop_test.go b/test/e2e/pod_stop_test.go
index 6c5319a3d..b3d7df252 100644
--- a/test/e2e/pod_stop_test.go
+++ b/test/e2e/pod_stop_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pod_top_test.go b/test/e2e/pod_top_test.go
index 3dc80ddfb..507d723b4 100644
--- a/test/e2e/pod_top_test.go
+++ b/test/e2e/pod_top_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/port_test.go b/test/e2e/port_test.go
index 09f3ab53a..fa633c379 100644
--- a/test/e2e/port_test.go
+++ b/test/e2e/port_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/prune_test.go b/test/e2e/prune_test.go
index 6679a676c..50a279232 100644
--- a/test/e2e/prune_test.go
+++ b/test/e2e/prune_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/ps_test.go b/test/e2e/ps_test.go
index 9caa6e7f1..bff2427d5 100644
--- a/test/e2e/ps_test.go
+++ b/test/e2e/ps_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/pull_test.go b/test/e2e/pull_test.go
index ad8742984..bfae15152 100644
--- a/test/e2e/pull_test.go
+++ b/test/e2e/pull_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/push_test.go b/test/e2e/push_test.go
index 3447cd57e..42aefd1f7 100644
--- a/test/e2e/push_test.go
+++ b/test/e2e/push_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/refresh_test.go b/test/e2e/refresh_test.go
index bf8fff105..de331bf88 100644
--- a/test/e2e/refresh_test.go
+++ b/test/e2e/refresh_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/restart_test.go b/test/e2e/restart_test.go
index 30801c272..3c77444d8 100644
--- a/test/e2e/restart_test.go
+++ b/test/e2e/restart_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/rm_test.go b/test/e2e/rm_test.go
index c6a2b61ee..bc1431bce 100644
--- a/test/e2e/rm_test.go
+++ b/test/e2e/rm_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/rmi_test.go b/test/e2e/rmi_test.go
index 22bfbbe8c..c160e1bc5 100644
--- a/test/e2e/rmi_test.go
+++ b/test/e2e/rmi_test.go
@@ -111,6 +111,7 @@ var _ = Describe("Podman rmi", func() {
})
It("podman rmi image that is a parent of another image", func() {
+ SkipIfRemote()
session := podmanTest.Podman([]string{"rmi", "-fa"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
@@ -148,6 +149,7 @@ var _ = Describe("Podman rmi", func() {
})
It("podman rmi image that is created from another named imaged", func() {
+ SkipIfRemote()
session := podmanTest.Podman([]string{"rmi", "-fa"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
@@ -183,6 +185,7 @@ var _ = Describe("Podman rmi", func() {
})
It("podman rmi with cached images", func() {
+ SkipIfRemote()
session := podmanTest.Podman([]string{"rmi", "-fa"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
@@ -252,6 +255,7 @@ var _ = Describe("Podman rmi", func() {
})
It("podman rmi -a with parent|child images", func() {
+ SkipIfRemote()
dockerfile := `FROM docker.io/library/alpine:latest AS base
RUN touch /1
ENV LOCAL=/1
diff --git a/test/e2e/rootless_test.go b/test/e2e/rootless_test.go
index 8e9f9fc8d..2b84d34c9 100644
--- a/test/e2e/rootless_test.go
+++ b/test/e2e/rootless_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
@@ -274,6 +276,10 @@ var _ = Describe("Podman rootless", func() {
runRootlessHelper([]string{"--net", "host"})
})
+ It("podman rootless rootfs --pid host", func() {
+ runRootlessHelper([]string{"--pid", "host"})
+ })
+
It("podman rootless rootfs --privileged", func() {
runRootlessHelper([]string{"--privileged"})
})
diff --git a/test/e2e/run_cgroup_parent_test.go b/test/e2e/run_cgroup_parent_test.go
index 57b3aa6b1..efc9a7009 100644
--- a/test/e2e/run_cgroup_parent_test.go
+++ b/test/e2e/run_cgroup_parent_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_cleanup_test.go b/test/e2e/run_cleanup_test.go
index 5b60efa86..aa823b4e6 100644
--- a/test/e2e/run_cleanup_test.go
+++ b/test/e2e/run_cleanup_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_cpu_test.go b/test/e2e/run_cpu_test.go
index 343fe656c..f74d3ed84 100644
--- a/test/e2e/run_cpu_test.go
+++ b/test/e2e/run_cpu_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_device_test.go b/test/e2e/run_device_test.go
index 7f1f7b2d0..4f26ac8ee 100644
--- a/test/e2e/run_device_test.go
+++ b/test/e2e/run_device_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_dns_test.go b/test/e2e/run_dns_test.go
index 444c568e0..6c649cdbc 100644
--- a/test/e2e/run_dns_test.go
+++ b/test/e2e/run_dns_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_entrypoint_test.go b/test/e2e/run_entrypoint_test.go
index 227037f92..a33e16b63 100644
--- a/test/e2e/run_entrypoint_test.go
+++ b/test/e2e/run_entrypoint_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_exit_test.go b/test/e2e/run_exit_test.go
index 788cbd8dd..03072f598 100644
--- a/test/e2e/run_exit_test.go
+++ b/test/e2e/run_exit_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_memory_test.go b/test/e2e/run_memory_test.go
index 91a311e85..e9262d4f0 100644
--- a/test/e2e/run_memory_test.go
+++ b/test/e2e/run_memory_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_networking_test.go b/test/e2e/run_networking_test.go
index 68b1f06de..1c09a4d0b 100644
--- a/test/e2e/run_networking_test.go
+++ b/test/e2e/run_networking_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_ns_test.go b/test/e2e/run_ns_test.go
index e4dcc5adc..9962185f2 100644
--- a/test/e2e/run_ns_test.go
+++ b/test/e2e/run_ns_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_passwd_test.go b/test/e2e/run_passwd_test.go
index 891f4fbd8..fcb81fb77 100644
--- a/test/e2e/run_passwd_test.go
+++ b/test/e2e/run_passwd_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_privileged_test.go b/test/e2e/run_privileged_test.go
index 770ea3e6b..0c0de30c5 100644
--- a/test/e2e/run_privileged_test.go
+++ b/test/e2e/run_privileged_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_restart_test.go b/test/e2e/run_restart_test.go
index 018c66b45..2659d2b11 100644
--- a/test/e2e/run_restart_test.go
+++ b/test/e2e/run_restart_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_selinux_test.go b/test/e2e/run_selinux_test.go
index 418382e16..57e488abc 100644
--- a/test/e2e/run_selinux_test.go
+++ b/test/e2e/run_selinux_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_signal_test.go b/test/e2e/run_signal_test.go
index 8f7894db8..9be8e7810 100644
--- a/test/e2e/run_signal_test.go
+++ b/test/e2e/run_signal_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_staticip_test.go b/test/e2e/run_staticip_test.go
index 749835b47..bf50e5eb7 100644
--- a/test/e2e/run_staticip_test.go
+++ b/test/e2e/run_staticip_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go
index cf366b197..22a36bb6c 100644
--- a/test/e2e/run_test.go
+++ b/test/e2e/run_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
@@ -87,6 +89,18 @@ var _ = Describe("Podman run", func() {
Expect(session.ExitCode()).To(Equal(0))
})
+ It("podman run a container with --init", func() {
+ session := podmanTest.Podman([]string{"run", "--init", ALPINE, "ls"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ })
+
+ It("podman run a container with --init and --init-path", func() {
+ session := podmanTest.Podman([]string{"run", "--init", "--init-path", "/usr/libexec/podman/catatonit", ALPINE, "ls"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ })
+
It("podman run seccomp test", func() {
jsonFile := filepath.Join(podmanTest.TempDir, "seccomp.json")
in := []byte(`{"defaultAction":"SCMP_ACT_ALLOW","syscalls":[{"name":"getcwd","action":"SCMP_ACT_ERRNO"}]}`)
@@ -584,6 +598,21 @@ USER mail`
Expect(session.ExitCode()).To(Equal(0))
})
+ It("podman run --volumes flag with empty host dir", func() {
+ vol1 := filepath.Join(podmanTest.TempDir, "vol-test1")
+ err := os.MkdirAll(vol1, 0755)
+ Expect(err).To(BeNil())
+
+ session := podmanTest.Podman([]string{"run", "--volume", ":/myvol1:z", ALPINE, "touch", "/myvol2/foo.txt"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).ToNot(Equal(0))
+ Expect(session.ErrorToString()).To(ContainSubstring("directory cannot be empty"))
+ session = podmanTest.Podman([]string{"run", "--volume", vol1 + ":", ALPINE, "touch", "/myvol2/foo.txt"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).ToNot(Equal(0))
+ Expect(session.ErrorToString()).To(ContainSubstring("directory cannot be empty"))
+ })
+
It("podman run --mount flag with multiple mounts", func() {
vol1 := filepath.Join(podmanTest.TempDir, "vol-test1")
err := os.MkdirAll(vol1, 0755)
diff --git a/test/e2e/run_userns_test.go b/test/e2e/run_userns_test.go
index b1f3d08b4..254897e70 100644
--- a/test/e2e/run_userns_test.go
+++ b/test/e2e/run_userns_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/runlabel_test.go b/test/e2e/runlabel_test.go
index 93a19ba30..9b4f584b0 100644
--- a/test/e2e/runlabel_test.go
+++ b/test/e2e/runlabel_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/save_test.go b/test/e2e/save_test.go
index 9f64e49a7..b354492b8 100644
--- a/test/e2e/save_test.go
+++ b/test/e2e/save_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/search_test.go b/test/e2e/search_test.go
index 0167e9062..1438fd97b 100644
--- a/test/e2e/search_test.go
+++ b/test/e2e/search_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/start_test.go b/test/e2e/start_test.go
index 64245c609..c4ed6f545 100644
--- a/test/e2e/start_test.go
+++ b/test/e2e/start_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
@@ -115,4 +117,14 @@ var _ = Describe("Podman start", func() {
numContainers := podmanTest.NumberOfContainers()
Expect(numContainers).To(Equal(1))
})
+
+ It("podman start --sig-proxy should not work without --attach", func() {
+ session := podmanTest.Podman([]string{"create", ALPINE, "ls"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"start", "-l", "--sig-proxy"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(125))
+ })
})
diff --git a/test/e2e/stats_test.go b/test/e2e/stats_test.go
index be00d68b2..e7b0b5f6e 100644
--- a/test/e2e/stats_test.go
+++ b/test/e2e/stats_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/stop_test.go b/test/e2e/stop_test.go
index 5c229b9b4..8fffedbb9 100644
--- a/test/e2e/stop_test.go
+++ b/test/e2e/stop_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/systemd_test.go b/test/e2e/systemd_test.go
index ce67bb469..a7e7a1500 100644
--- a/test/e2e/systemd_test.go
+++ b/test/e2e/systemd_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/tag_test.go b/test/e2e/tag_test.go
index 53896d1a2..9f67eaf80 100644
--- a/test/e2e/tag_test.go
+++ b/test/e2e/tag_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/top_test.go b/test/e2e/top_test.go
index cfcf2a959..067358468 100644
--- a/test/e2e/top_test.go
+++ b/test/e2e/top_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/trust_test.go b/test/e2e/trust_test.go
index bbf09eca4..0d36266f6 100644
--- a/test/e2e/trust_test.go
+++ b/test/e2e/trust_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/volume_create_test.go b/test/e2e/volume_create_test.go
index 50ee63f2a..9e525786e 100644
--- a/test/e2e/volume_create_test.go
+++ b/test/e2e/volume_create_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/volume_inspect_test.go b/test/e2e/volume_inspect_test.go
index d0d5a601e..aacdbe8be 100644
--- a/test/e2e/volume_inspect_test.go
+++ b/test/e2e/volume_inspect_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/volume_ls_test.go b/test/e2e/volume_ls_test.go
index 119d29d9b..d2ee558c1 100644
--- a/test/e2e/volume_ls_test.go
+++ b/test/e2e/volume_ls_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/volume_prune_test.go b/test/e2e/volume_prune_test.go
index 8c0a10e77..008acc2a2 100644
--- a/test/e2e/volume_prune_test.go
+++ b/test/e2e/volume_prune_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/volume_rm_test.go b/test/e2e/volume_rm_test.go
index cebb09467..295b290e4 100644
--- a/test/e2e/volume_rm_test.go
+++ b/test/e2e/volume_rm_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/e2e/wait_test.go b/test/e2e/wait_test.go
index a7e9b4c06..08da97aa0 100644
--- a/test/e2e/wait_test.go
+++ b/test/e2e/wait_test.go
@@ -1,3 +1,5 @@
+// +build !remoteclient
+
package integration
import (
diff --git a/test/install/Dockerfile.Centos b/test/install/Dockerfile.Centos
index 11f60029b..608d3c971 100644
--- a/test/install/Dockerfile.Centos
+++ b/test/install/Dockerfile.Centos
@@ -1,3 +1,3 @@
FROM registry.centos.org/centos/centos:7
-RUN yum install -y rpms/noarch/* rpms/x86_64/* \ No newline at end of file
+RUN yum install -y rpms/x86_64/*
diff --git a/test/install/Dockerfile.Fedora b/test/install/Dockerfile.Fedora
index 3a7b472de..74cee771d 100644
--- a/test/install/Dockerfile.Fedora
+++ b/test/install/Dockerfile.Fedora
@@ -1,3 +1,3 @@
FROM registry.fedoraproject.org/fedora:29
-RUN dnf install -y rpms/noarch/* rpms/x86_64/*
+RUN dnf install -y rpms/x86_64/*
diff --git a/test/test_podman_baseline.sh b/test/test_podman_baseline.sh
index ca19058fd..8a878b4e7 100755
--- a/test/test_podman_baseline.sh
+++ b/test/test_podman_baseline.sh
@@ -60,7 +60,7 @@ podman ps --all
########
# Run ls in redis container, this should work
########
-ctrid=$(podman pull registry.access.redhat.com/rhscl/redis-32-rhel7)
+ctrid=$(podman pull docker.io/library/redis:4-alpine3.8)
podman run $ctrid ls /
########
@@ -72,7 +72,7 @@ podman rmi --all
########
# Create Fedora based image
########
-image=$(podman pull fedora)
+image=$(podman pull registry.fedoraproject.org/fedora:latest)
echo $image
########
@@ -113,7 +113,7 @@ podman images
########
# Create Fedora based container
########
-image=$(podman pull fedora)
+image=$(podman pull registry.fedoraproject.org/fedora:latest)
echo $image
podman run $image ls /
@@ -207,7 +207,7 @@ mount -t xfs -o prjquota $device $TMPDIR
########
# Expected to succeed
########
-podman $PODMANBASE run --security-opt label=disable alpine sh -c 'touch file.txt && dd if=/dev/zero of=file.txt count=1048576 bs=1'
+podman $PODMANBASE run --security-opt label=disable docker.io/library/alpine:latest sh -c 'touch file.txt && dd if=/dev/zero of=file.txt count=1048576 bs=1'
rc=$?
if [ $rc == 0 ];
then
@@ -221,7 +221,7 @@ fi
########
if [ "$showerror" -ne 1 ]; then
- podman $PODMANBASE run --security-opt label=disable alpine sh -c 'touch file.txt && dd if=/dev/zero of=file.txt count=1048577 bs=1'
+ podman $PODMANBASE run --security-opt label=disable docker.io/library/alpine:latest sh -c 'touch file.txt && dd if=/dev/zero of=file.txt count=1048577 bs=1'
rc=$?
if [ $rc != 0 ];
then
@@ -283,7 +283,7 @@ chmod +x $FILE
########
FILE=./Dockerfile
/bin/cat <<EOM >$FILE
-FROM debian
+FROM docker.io/library/debian:latest
ADD ./runtest.sh /runtest.sh
EOM
chmod +x $FILE
@@ -327,7 +327,7 @@ rm -f ./Dockerfile
########
FILE=./Dockerfile
/bin/cat <<EOM >$FILE
-FROM alpine
+FROM docker.io/library/alpine:latest
RUN touch /foo
ONBUILD RUN touch /bar
EOM
@@ -363,7 +363,7 @@ rm ./Dockerfile*
########
if aa-enabled >/dev/null && getent passwd 1000 >/dev/null; then
# Expected to succeed
- sudo -u "#1000" podman run alpine echo hello
+ sudo -u "#1000" podman run docker.io/library/alpine:latest echo hello
rc=$?
echo -n "rootless with no AppArmor profile "
if [ $rc == 0 ]; then
@@ -373,7 +373,7 @@ if aa-enabled >/dev/null && getent passwd 1000 >/dev/null; then
fi
# Expected to succeed
- sudo -u "#1000" podman run --security-opt apparmor=unconfined alpine echo hello
+ sudo -u "#1000" podman run --security-opt apparmor=unconfined docker.io/library/alpine:latest echo hello
rc=$?
echo -n "rootless with unconfined AppArmor profile "
if [ $rc == 0 ]; then
@@ -402,7 +402,7 @@ EOF
apparmor_parser -Kr $aaFile
#Expected to pass (as root)
- podman run --security-opt apparmor=$aaProfile alpine echo hello
+ podman run --security-opt apparmor=$aaProfile docker.io/library/alpine:latest echo hello
rc=$?
echo -n "root with specified AppArmor profile: "
if [ $rc == 0 ]; then
@@ -412,7 +412,7 @@ EOF
fi
#Expected to fail (as rootless)
- sudo -u "#1000" podman run --security-opt apparmor=$aaProfile alpine echo hello
+ sudo -u "#1000" podman run --security-opt apparmor=$aaProfile docker.io/library/alpine:latest echo hello
rc=$?
echo -n "rootless with specified AppArmor profile: "
if [ $rc != 0 ]; then
@@ -437,7 +437,7 @@ fi
########
FILE=./Dockerfile
/bin/cat <<EOM >$FILE
-FROM docker/whalesay:latest
+FROM pharshal/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
EOM
diff --git a/test/test_podman_pods.sh b/test/test_podman_pods.sh
index 587f148cc..daa8acaee 100755
--- a/test/test_podman_pods.sh
+++ b/test/test_podman_pods.sh
@@ -60,8 +60,8 @@ podman ps --no-trunc | grep $ctrid
########
# Containers in a pod share network namespace
########
-podman run -dt --pod foobar quay.io/baude/alpine_nginx:latest
-podman run -it --rm --pod foobar fedora-minimal:28 curl http://localhost
+podman run -dt --pod foobar docker.io/library/nginx:latest
+podman run -it --rm --pod foobar registry.fedoraproject.org/fedora-minimal:29 curl http://localhost
########
# There should be 3 containers running now
@@ -91,7 +91,7 @@ podman pod stop foobar
# Start a pod and its containers
########
podman pod start foobar
-podman run -it --rm --pod foobar fedora-minimal:28 curl http://localhost
+podman run -it --rm --pod foobar registry.fedoraproject.org/fedora-minimal:29 curl http://localhost
########
# Pause a pod and its containers
@@ -103,7 +103,7 @@ podman pod pause foobar
# Unpause a pod and its containers
########
podman pod unpause foobar
-podman run -it --rm --pod foobar fedora-minimal:28 curl http://localhost
+podman run -it --rm --pod foobar registry.fedoraproject.org/fedora-minimal:29 curl http://localhost
########
# Kill a pod and its containers
diff --git a/test/utils/utils.go b/test/utils/utils.go
index 288c768d4..23dcb95e3 100644
--- a/test/utils/utils.go
+++ b/test/utils/utils.go
@@ -33,10 +33,13 @@ type PodmanTestCommon interface {
// PodmanTest struct for command line options
type PodmanTest struct {
- PodmanMakeOptions func(args []string) []string
- PodmanBinary string
- ArtifactPath string
- TempDir string
+ PodmanMakeOptions func(args []string) []string
+ PodmanBinary string
+ ArtifactPath string
+ TempDir string
+ RemoteTest bool
+ RemotePodmanBinary string
+ VarlinkSession *os.Process
}
// PodmanSession wraps the gexec.session so we can extend it
@@ -61,17 +64,20 @@ func (p *PodmanTest) MakeOptions(args []string) []string {
func (p *PodmanTest) PodmanAsUserBase(args []string, uid, gid uint32, env []string) *PodmanSession {
var command *exec.Cmd
podmanOptions := p.MakeOptions(args)
-
+ podmanBinary := p.PodmanBinary
+ if p.RemoteTest {
+ podmanBinary = p.RemotePodmanBinary
+ }
if env == nil {
- fmt.Printf("Running: %s %s\n", p.PodmanBinary, strings.Join(podmanOptions, " "))
+ fmt.Printf("Running: %s %s\n", podmanBinary, strings.Join(podmanOptions, " "))
} else {
- fmt.Printf("Running: (env: %v) %s %s\n", env, p.PodmanBinary, strings.Join(podmanOptions, " "))
+ fmt.Printf("Running: (env: %v) %s %s\n", env, podmanBinary, strings.Join(podmanOptions, " "))
}
if uid != 0 || gid != 0 {
- nsEnterOpts := append([]string{"--userspec", fmt.Sprintf("%d:%d", uid, gid), "/", p.PodmanBinary}, podmanOptions...)
+ nsEnterOpts := append([]string{"--userspec", fmt.Sprintf("%d:%d", uid, gid), "/", podmanBinary}, podmanOptions...)
command = exec.Command("chroot", nsEnterOpts...)
} else {
- command = exec.Command(p.PodmanBinary, podmanOptions...)
+ command = exec.Command(podmanBinary, podmanOptions...)
}
if env != nil {
command.Env = env
diff --git a/transfer.md b/transfer.md
index 00e732265..c0d309575 100644
--- a/transfer.md
+++ b/transfer.md
@@ -40,7 +40,7 @@ There are other equivalents for these tools
| `docker attach` | [`podman exec`](./docs/podman-attach.1.md) |
| `docker build` | [`podman build`](./docs/podman-build.1.md) |
| `docker commit` | [`podman commit`](./docs/podman-commit.1.md) |
-| `docker container`|[`podman container`](./docs/podman-container.1.md) |
+| `docker container`|[`podman container`](./docs/podman-container.1.md) |
| `docker cp` | [`podman mount`](./docs/podman-cp.1.md) **** |
| `docker create` | [`podman create`](./docs/podman-create.1.md) |
| `docker diff` | [`podman diff`](./docs/podman-diff.1.md) |
@@ -70,7 +70,13 @@ There are other equivalents for these tools
| `docker top` | [`podman top`](./docs/podman-top.1.md) |
| `docker unpause` | [`podman unpause`](./docs/podman-unpause.1.md) |
| `docker version` | [`podman version`](./docs/podman-version.1.md) |
-| `docker wait` | [`podman wait`](./docs/podman-wait.1.md) |
+| `docker volume` | [`podman volume`](./docs/podman-volume.1.md) |
+| `docker volume create` | [`podman volume create`](./docs/podman-volume-create.1.md) |
+| `docker volume inspect`| [`podman volume inspect`](./docs/podman-volume-inspect.1.md)|
+| `docker volume ls` | [`podman volume ls`](./docs/podman-volume-ls.1.md) |
+| `docker volume prune` | [`podman volume prune`](./docs/podman-volume-prune.1.md) |
+| `docker volume rm` | [`podman volume rm`](./docs/podman-volume-rm.1.md) |
+| `docker wait` | [`podman wait`](./docs/podman-wait.1.md) |
**** Use mount to take advantage of the entire linux tool chain rather then just cp. Read [`here`](./docs/podman-cp.1.md) for more information.
@@ -83,18 +89,45 @@ Those Docker commands currently do not have equivalents in `podman`:
| `docker events` ||
| `docker network` ||
| `docker node` ||
-| `docker plugin` |podman does not support plugins. We recommend you use alternative OCI Runtimes or OCI Runtime Hooks to alter behavior of podman.|
+| `docker plugin` | podman does not support plugins. We recommend you use alternative OCI Runtimes or OCI Runtime Hooks to alter behavior of podman.|
| `docker rename` | podman does not support rename, you need to use `podman rm` and `podman create` to rename a container.|
| `docker secret` ||
| `docker service` ||
| `docker stack` ||
| `docker swarm` | podman does not support swarm. We support Kubernetes for orchestration using [CRI-O](https://github.com/kubernetes-sigs/cri-o).|
| `docker system` ||
-| `docker volume` | podman does not support volumes. Volumes should be built on the host operating system and then volume mounted into the containers.|
+| `docker volume` | podman currently supports file volumes. Future enhancement planned to support Docker Volumes Plugins
## Missing commands in Docker
The following podman commands do not have a Docker equivalent:
+* [`podman generate`](./docs/podman-generate.1.md)
+* [`podman generate kube`](./docs/podman-generate-kube.1.md)
+* [`podman container checkpoint`](/docs/podman-container-checkpoint.1.md)
+* [`podman container cleanup`](/docs/podman-container-cleanup.1.md)
+* [`podman container exists`](/docs/podman-container-exists.1.md)
+* [`podman container refresh`](/docs/podman-container-refresh.1.md)
+* [`podman container runlabel`](/docs/podman-container-runlabel.1.md)
+* [`podman container restore`](/docs/podman-container-restore.1.md)
+* [`podman image exists`](./docs/podman-image-exists.1.md)
+* [`podman image sign`](./docs/podman-image-sign.1.md)
+* [`podman image trust`](./docs/podman-image-trust.1.md)
* [`podman mount`](./docs/podman-mount.1.md)
+* [`podman play`](./docs/podman-play.1.md)
+* [`podman play kube`](./docs/podman-play-kube.1.md)
+* [`podman pod`](./docs/podman-pod.1.md)
+* [`podman pod create`](./docs/podman-pod-create.1.md)
+* [`podman pod exists`](./docs/podman-pod-exists.1.md)
+* [`podman pod inspect`](./docs/podman-pod-inspect.1.md)
+* [`podman pod kill`](./docs/podman-pod-kill.1.md)
+* [`podman pod pause`](./docs/podman-pod-pause.1.md)
+* [`podman pod ps`](./docs/podman-pod-ps.1.md)
+* [`podman pod restart`](./docs/podman-pod-restart.1.md)
+* [`podman pod rm`](./docs/podman-pod-rm.1.md)
+* [`podman pod start`](./docs/podman-pod-start.1.md)
+* [`podman pod stop`](./docs/podman-pod-stop.1.md)
+* [`podman pod top`](./docs/podman-pod-top.1.md)
+* [`podman pod unpause`](./docs/podman-pod-unpause.1.md)
+* [`podman varlink`](./docs/podman-varlink.1.md)
* [`podman umount`](./docs/podman-umount.1.md)
diff --git a/troubleshooting.md b/troubleshooting.md
index 4649cccb3..d210d85df 100644
--- a/troubleshooting.md
+++ b/troubleshooting.md
@@ -9,7 +9,7 @@
A large number of issues reported against Podman are often found to already be fixed
in more current versions of the project. Before reporting an issue, please verify the
-version you are running with `podman version` and compare it to the lastest release
+version you are running with `podman version` and compare it to the latest release
documented on the top of Podman's [README.md](README.md).
If they differ, please update your version of PODMAN to the latest possible
@@ -86,6 +86,9 @@ could not get runtime: database run root /run/user/1000/run does not match our r
#### Solution
+This problem has been fixed in Podman release 0.12.1 and it is recommended
+to upgrade to that version. If that is not possible use the following procedure.
+
To work around the new default path, we can manually set the path Podman is
expecting in a configuration file.
@@ -101,7 +104,7 @@ the first path in the error message Podman gave (in this case,
`/run/user/1000/run`).
---
-### 4) rootless containers cannot ping hosts
+### 5) rootless containers cannot ping hosts
When using the ping command from a non-root container, the command may
fail because of a lack of privileges.
@@ -128,9 +131,10 @@ To change its value you can use something like: `sysctl -w
To make the change persistent, you'll need to add a file in
`/etc/sysctl.d` that contains `net.ipv4.ping_group_range=0 $MAX_UID`.
-### 5) Build hangs when the Dockerfile contains the useradd command
+---
+### 6) Build hangs when the Dockerfile contains the useradd command
-When the Dockerfile contains a command like RUN useradd -u 99999000 -g users newuser the build can hang.
+When the Dockerfile contains a command like `RUN useradd -u 99999000 -g users newuser` the build can hang.
#### Symptom
@@ -139,3 +143,33 @@ If you are using a useradd command within a Dockerfile with a large UID/GID, it
#### Solution
If the entry in the Dockerfile looked like: RUN useradd -u 99999000 -g users newuser then add the `--log-no-init` parameter to change it to: `RUN useradd --log-no-init -u 99999000 -g users newuser`. This option tells useradd to stop creating the lastlog file.
+
+### 7) Permission denied when running Podman commands
+
+When rootless podman attempts to execute a container on a non exec home directory a permission error will be raised.
+
+#### Symptom
+
+If you are running podman or buildah on a home directory that is mounted noexec,
+then they will fail. With a message like:
+
+```
+podman run centos:7
+standard_init_linux.go:203: exec user process caused "permission denied"
+```
+
+#### Solution
+
+Since the administrator of the system setup your home directory to be noexec, you will not be allowed to execute containers from storage in your home directory. It is possible to work around this by manually specifying a container storage path that is not on a noexec mount. Simply copy the file /etc/containers/storage.conf to ~/.config/containers/ (creating the directory if necessary). Specify a graphroot directory which is not on a noexec mount point and to which you have read/write privileges. You will need to modify other fields to writable directories as well.
+
+For example
+
+```
+cat ~/.config/containers/storage.conf
+[storage]
+ driver = "overlay"
+ runroot = "/run/user/1000"
+ graphroot = "/execdir/myuser/storage"
+ [storage.options]
+ mount_program = "/bin/fuse-overlayfs"
+```
diff --git a/vendor.conf b/vendor.conf
index 1ef9ada84..76c2b8810 100644
--- a/vendor.conf
+++ b/vendor.conf
@@ -1,103 +1,107 @@
+# Note: please use releases where possible. Vendoring branches (e.g., master)
+# should be avoided at all costs.
#
-github.com/Azure/go-ansiterm 19f72df4d05d31cbe1c56bfc8045c96babff6c7e
+# TODO: no release, can we find an alternative?
+github.com/Azure/go-ansiterm d6e3b3328b783f23731bc4d058875b0371ff8109
github.com/BurntSushi/toml v0.2.0
-github.com/Microsoft/go-winio 78439966b38d69bf38227fbf57ac8a6fee70f69a
-github.com/Microsoft/hcsshim 43f9725307998e09f2e3816c2c0c36dc98f0c982
+github.com/Microsoft/go-winio v0.4.11
+github.com/Microsoft/hcsshim v0.8.3
github.com/blang/semver v3.5.0
-github.com/boltdb/bolt master
-github.com/buger/goterm 2f8dfbc7dbbff5dd1d391ed91482c24df243b2d3
-github.com/checkpoint-restore/go-criu master
-github.com/containerd/cgroups 58556f5ad8448d99a6f7bea69ea4bdb7747cfeb0
-github.com/containerd/continuity master
+github.com/boltdb/bolt v1.3.1
+# TODO: no release, can we find an alternative?
+github.com/buger/goterm c206103e1f37c0c6c5c039706305ea2aa6e8ad3b
+github.com/checkpoint-restore/go-criu v3.11
+github.com/containerd/cgroups 39b18af02c4120960f517a3a4c2588fabb61d02c
+github.com/containerd/continuity 004b46473808b3e7a4a3049c20e4376c91eb966d
github.com/containernetworking/cni v0.7.0-alpha1
-github.com/containernetworking/plugins 1562a1e60ed101aacc5e08ed9dbeba8e9f3d4ec1
-github.com/containers/image d53afe179b381fafb427e6b9cf9b1996a98c1067
-github.com/containers/storage db40f96d853dfced60c563e61fb66ba231ce7c8d
-github.com/containers/psgo dc0bc9fac5b715034c4310ed4d795b3182360842
+github.com/containernetworking/plugins v0.7.4
+github.com/containers/image v1.3
+github.com/containers/storage v1.8
+github.com/containers/psgo v1.1
github.com/coreos/go-systemd v14
github.com/cri-o/ocicni 2d2983e40c242322a56c22a903785e7f83eb378c
github.com/cyphar/filepath-securejoin v0.2.1
github.com/davecgh/go-spew v1.1.0
-github.com/docker/distribution 7a8efe719e55bbfaff7bc5718cdf0ed51ca821df
+github.com/docker/distribution 5f6282db7d65e6d72ad7c2cc66310724a57be716
github.com/docker/docker 86f080cff0914e9694068ed78d503701667c4c00
-github.com/docker/docker-credential-helpers d68f9aeca33f5fd3f08eeae5e9d175edf4e731d1
-github.com/docker/go-connections 3ede32e2033de7505e6500d6c868c2b9ed9f169d
+github.com/docker/docker-credential-helpers v0.6.1
+github.com/docker/go-connections v0.4.0
github.com/docker/go-units v0.3.2
github.com/docker/libtrust aabc10ec26b754e797f9028f4589c5b7bd90dc20
-github.com/docker/spdystream ed496381df8283605c435b86d4fdd6f4f20b8c6e
-github.com/fatih/camelcase f6a740d52f961c60348ebb109adde9f4635d7540
-github.com/fsnotify/fsnotify 7d7316ed6e1ed2de075aab8dfc76de5d158d66e1
-github.com/ghodss/yaml 04f313413ffd65ce25f2541bfd2b2ceec5c0908c
-github.com/godbus/dbus a389bdde4dd695d414e47b755e95e72b7826432c
-github.com/gogo/protobuf c0656edd0d9eab7c66d1eb0c568f9039345796f7
+github.com/docker/spdystream 6480d4af844c189cf5dd913db24ddd339d3a4f85
+github.com/fatih/camelcase v1.0.0
+github.com/fsnotify/fsnotify v1.4.7
+github.com/ghodss/yaml v1.0.0
+# starting with dbus 5.0.0 coreos/go-systemd doesn't compile anymore
+github.com/godbus/dbus v4.1.0
+github.com/golang/protobuf v1.2.0
+github.com/gogo/protobuf v1.2.0
github.com/golang/glog 23def4e6c14b4da8ac2ed8007337bc5eb5007998
-github.com/golang/groupcache b710c8433bd175204919eb38776e944233235d03
-github.com/golang/protobuf 4bd1920723d7b7c925de087aa32e2187708897f7
-github.com/google/gofuzz 44d81051d367757e1c7c6a5a86423ece9afcf63c
-github.com/googleapis/gnostic 0c5108395e2debce0d731cf0287ddf7242066aba
-github.com/gorilla/context v1.1
-github.com/gorilla/mux v1.3.0
-github.com/hashicorp/errwrap 7554cd9344cec97297fa6649b055a8c98c2a1e55
-github.com/hashicorp/go-multierror 83588e72410abfbe4df460eeb6f30841ae47d4c4
-github.com/hashicorp/golang-lru 0a025b7e63adc15a622f29b0b2c4c3848243bbf6
-github.com/imdario/mergo 0.2.2
-github.com/json-iterator/go 1.0.0
-github.com/kr/pty v1.0.0
-github.com/mattn/go-runewidth v0.0.1
+github.com/google/gofuzz 24818f796faf91cd76ec7bddd72458fbced7a6c1
+github.com/gorilla/context v1.1.1
+github.com/gorilla/mux v1.6.2
+github.com/hashicorp/errwrap v1.0.0
+github.com/hashicorp/go-multierror v1.0.0
+github.com/imdario/mergo v0.3.6
+github.com/json-iterator/go 1.1.5
+github.com/modern-go/concurrent 1.0.3
+github.com/modern-go/reflect2 v1.0.1
+github.com/mattn/go-runewidth v0.0.4
github.com/mistifyio/go-zfs v2.1.1
github.com/mtrmac/gpgme b2432428689ca58c2b8e8dea9449d3295cf96fc9
-github.com/opencontainers/go-digest v1.0.0-rc0
+github.com/opencontainers/go-digest c9281466c8b2f606084ac71339773efd177436e7
github.com/opencontainers/image-spec v1.0.0
-github.com/opencontainers/runc b4e2ecb452d9ee4381137cc0a7e6715b96bed6de
-github.com/opencontainers/runtime-spec d810dbc60d8c5aeeb3d054bd1132fab2121968ce
-github.com/opencontainers/runtime-tools master
-github.com/opencontainers/selinux 51c6c0a5dbc675792e953298cb9871819d6f9bb8
-github.com/ostreedev/ostree-go master
-github.com/pkg/errors v0.8.0
-github.com/pmezard/go-difflib 792786c7400a136282c1664665ae0a8db921c6c2
-github.com/pquerna/ffjson d49c2bc1aa135aad0c6f4fc2056623ec78f5d5ac
+github.com/opencontainers/runc v1.0.0-rc6
+github.com/opencontainers/runtime-spec 1722abf79c2f8f2675f47367f827c6491472cf27
+github.com/opencontainers/runtime-tools v0.8.0
+github.com/opencontainers/selinux v1.1
+github.com/ostreedev/ostree-go d0388bd827cfac6fa8eec760246eb8375674b2a0
+github.com/pkg/errors v0.8.1
+github.com/pmezard/go-difflib v1.0.0
+github.com/pquerna/ffjson e517b90714f7c0eabe6d2e570a5886ae077d6db6
github.com/seccomp/libseccomp-golang v0.9.0
-github.com/seccomp/containers-golang master
+github.com/seccomp/containers-golang v0.1
+# TODO: logrus.IsTerminal() is private starting with v1.1.x and requires code changes in libpod
github.com/sirupsen/logrus v1.0.0
-github.com/spf13/pflag 9ff6c6923cfffbcd502984b8e0c80539a94968b7
-github.com/stretchr/testify 4d4bfba8f1d1027c4fdbe371823030df51419987
-github.com/syndtr/gocapability e7cb7fa329f456b3855136a2642b197bad7366ba
+github.com/spf13/pflag v1.0.3
+github.com/stretchr/testify v1.3.0
+github.com/syndtr/gocapability d98352740cb2c55f81556b63d4a1ec64c5a319c2
github.com/tchap/go-patricia v2.2.6
-github.com/ulule/deepcopier master
-github.com/urfave/cli 934abfb2f102315b5794e15ebc7949e4ca253920
-github.com/vbatts/tar-split v0.10.2
-github.com/vishvananda/netlink master
-github.com/vishvananda/netns master
-github.com/xeipuuv/gojsonpointer master
-github.com/xeipuuv/gojsonreference master
-github.com/xeipuuv/gojsonschema master
-golang.org/x/crypto 81e90905daefcd6fd217b62423c0908922eadb30
-golang.org/x/net c427ad74c6d7a814201695e9ffde0c5d400a7674
-golang.org/x/sys master
-golang.org/x/text f72d8390a633d5dfb0cc84043294db9f6c935756
-golang.org/x/time f51c12702a4d776e4c1fa9b0fabab841babae631
-golang.org/x/sync master
-google.golang.org/grpc v1.0.4 https://github.com/grpc/grpc-go
-gopkg.in/cheggaaa/pb.v1 v1.0.7
-gopkg.in/inf.v0 v0.9.0
+github.com/ulule/deepcopier ca99b135e50f526fde9cd88705f0ff2f3f95b77c
+# TODO: urfave/cli is not active anymore. We should transition to another library.
+github.com/urfave/cli b67dcf995b6a7b7f14fad5fcb7cc5441b05e814b
+github.com/vbatts/tar-split v0.11.1
+github.com/vishvananda/netlink v1.0.0
+github.com/vishvananda/netns 13995c7128ccc8e51e9a6bd2b551020a27180abd
+github.com/xeipuuv/gojsonpointer 4e3ac2762d5f479393488629ee9370b50873b3a6
+github.com/xeipuuv/gojsonreference bd5ef7bd5415a7ac448318e64f11a24cd21e594b
+github.com/xeipuuv/gojsonschema v1.1.0
+golang.org/x/crypto ff983b9c42bc9fbf91556e191cc8efb585c16908 https://github.com/golang/crypto
+golang.org/x/net 45ffb0cd1ba084b73e26dee67e667e1be5acce83 https://github.com/golang/net
+golang.org/x/sys 7fbe1cd0fcc20051e1fcb87fbabec4a1bacaaeba https://github.com/golang/sys
+golang.org/x/text e6919f6577db79269a6443b9dc46d18f2238fb5d https://github.com/golang/text
+golang.org/x/time 85acf8d2951cb2a3bde7632f9ff273ef0379bcbd https://github.com/golang/time
+golang.org/x/sync 37e7f081c4d4c64e13b10787722085407fe5d15f https://github.com/golang/sync
+gopkg.in/cheggaaa/pb.v1 v1.0.27
+gopkg.in/inf.v0 v0.9.1
gopkg.in/mgo.v2 v2
-gopkg.in/square/go-jose.v2 v2.1.3
-gopkg.in/yaml.v2 v2
-k8s.io/api 5ce4aa0bf2f097f6021127b3d879eeda82026be8 https://github.com/kubernetes/api
-k8s.io/apiextensions-apiserver 1b31e26d82f1ec2e945c560790e98f34bb5f2e63 https://github.com/kubernetes/apiextensions-apiserver
-k8s.io/apimachinery 616b23029fa3dc3e0ccefd47963f5651a6543d94 https://github.com/kubernetes/apimachinery
-k8s.io/apiserver 4d1163080139f1f9094baf8a3a6099e85e1867f6 https://github.com/kubernetes/apiserver
-k8s.io/client-go 7cd1d3291b7d9b1e2d54d4b69eb65995eaf8888e https://github.com/kubernetes/client-go
-k8s.io/kube-openapi 275e2ce91dec4c05a4094a7b1daee5560b555ac9 https://github.com/kubernetes/kube-openapi
-k8s.io/utils 258e2a2fa64568210fbd6267cf1d8fd87c3cb86e https://github.com/kubernetes/utils
-github.com/mrunalp/fileutils master
-github.com/varlink/go master
-github.com/containers/buildah dd0f4f1b1eb49b841179049ac498e4b0f874b462
-github.com/Nvveen/Gotty master
-github.com/fsouza/go-dockerclient master
-github.com/openshift/imagebuilder master
-github.com/ulikunitz/xz v0.5.4
-github.com/mailru/easyjson 03f2033d19d5860aef995fe360ac7d395cd8ce65
-github.com/coreos/go-iptables 25d087f3cffd9aedc0c2b7eff25f23cbf3c20fe1
+gopkg.in/yaml.v2 v2.2.2
+k8s.io/api kubernetes-1.10.13-beta.0 https://github.com/kubernetes/api
+k8s.io/apimachinery kubernetes-1.10.13-beta.0 https://github.com/kubernetes/apimachinery
+k8s.io/client-go kubernetes-1.10.13-beta.0 https://github.com/kubernetes/client-go
+github.com/mrunalp/fileutils 7d4729fb36185a7c1719923406c9d40e54fb93c7
+github.com/varlink/go 92687ab4eb68d99e43b1f5b93477ad76bb54f811
+github.com/containers/buildah e7ca330f923701dba8859f5c014d0a9a3f7f0a49
+# TODO: Gotty has not been updated since 2012. Can we find replacement?
+github.com/Nvveen/Gotty cd527374f1e5bff4938207604a14f2e38a9cf512
+# do not go beyond the below commit as the next one requires a more recent
+# docker which is in conflict with openshift/imagebuilder
+github.com/fsouza/go-dockerclient 29c1814d12c072344bb91aac5d2ff719db39c523
+github.com/openshift/imagebuilder 474d0f9df2cbabf006bd2b1c263a7b0789e228e0
+github.com/ulikunitz/xz v0.5.5
+github.com/coreos/go-iptables v0.4.0
github.com/google/shlex c34317bd91bf98fab745d77b03933cf8769299fe
github.com/pkg/profile v1.2.1
+github.com/klauspost/pgzip v1.2.1
+github.com/klauspost/compress v1.4.1
+github.com/klauspost/cpuid v1.2.0
diff --git a/vendor/github.com/Azure/go-ansiterm/csi_entry_state.go b/vendor/github.com/Azure/go-ansiterm/csi_entry_state.go
index 1bd6057da..bcbe00d0c 100644
--- a/vendor/github.com/Azure/go-ansiterm/csi_entry_state.go
+++ b/vendor/github.com/Azure/go-ansiterm/csi_entry_state.go
@@ -5,7 +5,7 @@ type csiEntryState struct {
}
func (csiState csiEntryState) Handle(b byte) (s state, e error) {
- logger.Infof("CsiEntry::Handle %#x", b)
+ csiState.parser.logf("CsiEntry::Handle %#x", b)
nextState, err := csiState.baseState.Handle(b)
if nextState != nil || err != nil {
@@ -25,7 +25,7 @@ func (csiState csiEntryState) Handle(b byte) (s state, e error) {
}
func (csiState csiEntryState) Transition(s state) error {
- logger.Infof("CsiEntry::Transition %s --> %s", csiState.Name(), s.Name())
+ csiState.parser.logf("CsiEntry::Transition %s --> %s", csiState.Name(), s.Name())
csiState.baseState.Transition(s)
switch s {
diff --git a/vendor/github.com/Azure/go-ansiterm/csi_param_state.go b/vendor/github.com/Azure/go-ansiterm/csi_param_state.go
index 4be35c5fd..7ed5e01c3 100644
--- a/vendor/github.com/Azure/go-ansiterm/csi_param_state.go
+++ b/vendor/github.com/Azure/go-ansiterm/csi_param_state.go
@@ -5,7 +5,7 @@ type csiParamState struct {
}
func (csiState csiParamState) Handle(b byte) (s state, e error) {
- logger.Infof("CsiParam::Handle %#x", b)
+ csiState.parser.logf("CsiParam::Handle %#x", b)
nextState, err := csiState.baseState.Handle(b)
if nextState != nil || err != nil {
@@ -26,7 +26,7 @@ func (csiState csiParamState) Handle(b byte) (s state, e error) {
}
func (csiState csiParamState) Transition(s state) error {
- logger.Infof("CsiParam::Transition %s --> %s", csiState.Name(), s.Name())
+ csiState.parser.logf("CsiParam::Transition %s --> %s", csiState.Name(), s.Name())
csiState.baseState.Transition(s)
switch s {
diff --git a/vendor/github.com/Azure/go-ansiterm/escape_intermediate_state.go b/vendor/github.com/Azure/go-ansiterm/escape_intermediate_state.go
index 2189eb6b6..1c719db9e 100644
--- a/vendor/github.com/Azure/go-ansiterm/escape_intermediate_state.go
+++ b/vendor/github.com/Azure/go-ansiterm/escape_intermediate_state.go
@@ -5,7 +5,7 @@ type escapeIntermediateState struct {
}
func (escState escapeIntermediateState) Handle(b byte) (s state, e error) {
- logger.Infof("escapeIntermediateState::Handle %#x", b)
+ escState.parser.logf("escapeIntermediateState::Handle %#x", b)
nextState, err := escState.baseState.Handle(b)
if nextState != nil || err != nil {
return nextState, err
@@ -24,7 +24,7 @@ func (escState escapeIntermediateState) Handle(b byte) (s state, e error) {
}
func (escState escapeIntermediateState) Transition(s state) error {
- logger.Infof("escapeIntermediateState::Transition %s --> %s", escState.Name(), s.Name())
+ escState.parser.logf("escapeIntermediateState::Transition %s --> %s", escState.Name(), s.Name())
escState.baseState.Transition(s)
switch s {
diff --git a/vendor/github.com/Azure/go-ansiterm/escape_state.go b/vendor/github.com/Azure/go-ansiterm/escape_state.go
index 7b1b9ad3f..6390abd23 100644
--- a/vendor/github.com/Azure/go-ansiterm/escape_state.go
+++ b/vendor/github.com/Azure/go-ansiterm/escape_state.go
@@ -5,7 +5,7 @@ type escapeState struct {
}
func (escState escapeState) Handle(b byte) (s state, e error) {
- logger.Infof("escapeState::Handle %#x", b)
+ escState.parser.logf("escapeState::Handle %#x", b)
nextState, err := escState.baseState.Handle(b)
if nextState != nil || err != nil {
return nextState, err
@@ -28,7 +28,7 @@ func (escState escapeState) Handle(b byte) (s state, e error) {
}
func (escState escapeState) Transition(s state) error {
- logger.Infof("Escape::Transition %s --> %s", escState.Name(), s.Name())
+ escState.parser.logf("Escape::Transition %s --> %s", escState.Name(), s.Name())
escState.baseState.Transition(s)
switch s {
diff --git a/vendor/github.com/Azure/go-ansiterm/osc_string_state.go b/vendor/github.com/Azure/go-ansiterm/osc_string_state.go
index 24062d420..593b10ab6 100644
--- a/vendor/github.com/Azure/go-ansiterm/osc_string_state.go
+++ b/vendor/github.com/Azure/go-ansiterm/osc_string_state.go
@@ -5,7 +5,7 @@ type oscStringState struct {
}
func (oscState oscStringState) Handle(b byte) (s state, e error) {
- logger.Infof("OscString::Handle %#x", b)
+ oscState.parser.logf("OscString::Handle %#x", b)
nextState, err := oscState.baseState.Handle(b)
if nextState != nil || err != nil {
return nextState, err
diff --git a/vendor/github.com/Azure/go-ansiterm/parser.go b/vendor/github.com/Azure/go-ansiterm/parser.go
index 3286a9cb5..03cec7ada 100644
--- a/vendor/github.com/Azure/go-ansiterm/parser.go
+++ b/vendor/github.com/Azure/go-ansiterm/parser.go
@@ -2,14 +2,10 @@ package ansiterm
import (
"errors"
- "io/ioutil"
+ "log"
"os"
-
- "github.com/sirupsen/logrus"
)
-var logger *logrus.Logger
-
type AnsiParser struct {
currState state
eventHandler AnsiEventHandler
@@ -23,50 +19,69 @@ type AnsiParser struct {
ground state
oscString state
stateMap []state
+
+ logf func(string, ...interface{})
}
-func CreateParser(initialState string, evtHandler AnsiEventHandler) *AnsiParser {
- logFile := ioutil.Discard
+type Option func(*AnsiParser)
- if isDebugEnv := os.Getenv(LogEnv); isDebugEnv == "1" {
- logFile, _ = os.Create("ansiParser.log")
- }
-
- logger = &logrus.Logger{
- Out: logFile,
- Formatter: new(logrus.TextFormatter),
- Level: logrus.InfoLevel,
+func WithLogf(f func(string, ...interface{})) Option {
+ return func(ap *AnsiParser) {
+ ap.logf = f
}
+}
- parser := &AnsiParser{
+func CreateParser(initialState string, evtHandler AnsiEventHandler, opts ...Option) *AnsiParser {
+ ap := &AnsiParser{
eventHandler: evtHandler,
context: &ansiContext{},
}
+ for _, o := range opts {
+ o(ap)
+ }
+
+ if isDebugEnv := os.Getenv(LogEnv); isDebugEnv == "1" {
+ logFile, _ := os.Create("ansiParser.log")
+ logger := log.New(logFile, "", log.LstdFlags)
+ if ap.logf != nil {
+ l := ap.logf
+ ap.logf = func(s string, v ...interface{}) {
+ l(s, v...)
+ logger.Printf(s, v...)
+ }
+ } else {
+ ap.logf = logger.Printf
+ }
+ }
+
+ if ap.logf == nil {
+ ap.logf = func(string, ...interface{}) {}
+ }
- parser.csiEntry = csiEntryState{baseState{name: "CsiEntry", parser: parser}}
- parser.csiParam = csiParamState{baseState{name: "CsiParam", parser: parser}}
- parser.dcsEntry = dcsEntryState{baseState{name: "DcsEntry", parser: parser}}
- parser.escape = escapeState{baseState{name: "Escape", parser: parser}}
- parser.escapeIntermediate = escapeIntermediateState{baseState{name: "EscapeIntermediate", parser: parser}}
- parser.error = errorState{baseState{name: "Error", parser: parser}}
- parser.ground = groundState{baseState{name: "Ground", parser: parser}}
- parser.oscString = oscStringState{baseState{name: "OscString", parser: parser}}
-
- parser.stateMap = []state{
- parser.csiEntry,
- parser.csiParam,
- parser.dcsEntry,
- parser.escape,
- parser.escapeIntermediate,
- parser.error,
- parser.ground,
- parser.oscString,
+ ap.csiEntry = csiEntryState{baseState{name: "CsiEntry", parser: ap}}
+ ap.csiParam = csiParamState{baseState{name: "CsiParam", parser: ap}}
+ ap.dcsEntry = dcsEntryState{baseState{name: "DcsEntry", parser: ap}}
+ ap.escape = escapeState{baseState{name: "Escape", parser: ap}}
+ ap.escapeIntermediate = escapeIntermediateState{baseState{name: "EscapeIntermediate", parser: ap}}
+ ap.error = errorState{baseState{name: "Error", parser: ap}}
+ ap.ground = groundState{baseState{name: "Ground", parser: ap}}
+ ap.oscString = oscStringState{baseState{name: "OscString", parser: ap}}
+
+ ap.stateMap = []state{
+ ap.csiEntry,
+ ap.csiParam,
+ ap.dcsEntry,
+ ap.escape,
+ ap.escapeIntermediate,
+ ap.error,
+ ap.ground,
+ ap.oscString,
}
- parser.currState = getState(initialState, parser.stateMap)
+ ap.currState = getState(initialState, ap.stateMap)
- logger.Infof("CreateParser: parser %p", parser)
- return parser
+ ap.logf("CreateParser: parser %p", ap)
+ return ap
}
func getState(name string, states []state) state {
@@ -97,7 +112,7 @@ func (ap *AnsiParser) handle(b byte) error {
}
if newState == nil {
- logger.Warning("newState is nil")
+ ap.logf("WARNING: newState is nil")
return errors.New("New state of 'nil' is invalid.")
}
@@ -111,23 +126,23 @@ func (ap *AnsiParser) handle(b byte) error {
}
func (ap *AnsiParser) changeState(newState state) error {
- logger.Infof("ChangeState %s --> %s", ap.currState.Name(), newState.Name())
+ ap.logf("ChangeState %s --> %s", ap.currState.Name(), newState.Name())
// Exit old state
if err := ap.currState.Exit(); err != nil {
- logger.Infof("Exit state '%s' failed with : '%v'", ap.currState.Name(), err)
+ ap.logf("Exit state '%s' failed with : '%v'", ap.currState.Name(), err)
return err
}
// Perform transition action
if err := ap.currState.Transition(newState); err != nil {
- logger.Infof("Transition from '%s' to '%s' failed with: '%v'", ap.currState.Name(), newState.Name, err)
+ ap.logf("Transition from '%s' to '%s' failed with: '%v'", ap.currState.Name(), newState.Name, err)
return err
}
// Enter new state
if err := newState.Enter(); err != nil {
- logger.Infof("Enter state '%s' failed with: '%v'", newState.Name(), err)
+ ap.logf("Enter state '%s' failed with: '%v'", newState.Name(), err)
return err
}
diff --git a/vendor/github.com/Azure/go-ansiterm/parser_action_helpers.go b/vendor/github.com/Azure/go-ansiterm/parser_action_helpers.go
index 8b69a67a5..de0a1f9cd 100644
--- a/vendor/github.com/Azure/go-ansiterm/parser_action_helpers.go
+++ b/vendor/github.com/Azure/go-ansiterm/parser_action_helpers.go
@@ -27,7 +27,6 @@ func parseParams(bytes []byte) ([]string, error) {
params = append(params, s)
}
- logger.Infof("Parsed params: %v with length: %d", params, len(params))
return params, nil
}
@@ -37,7 +36,6 @@ func parseCmd(context ansiContext) (string, error) {
func getInt(params []string, dflt int) int {
i := getInts(params, 1, dflt)[0]
- logger.Infof("getInt: %v", i)
return i
}
@@ -60,8 +58,6 @@ func getInts(params []string, minCount int, dflt int) []int {
}
}
- logger.Infof("getInts: %v", ints)
-
return ints
}
diff --git a/vendor/github.com/Azure/go-ansiterm/parser_actions.go b/vendor/github.com/Azure/go-ansiterm/parser_actions.go
index 58750a2d2..0bb5e51e9 100644
--- a/vendor/github.com/Azure/go-ansiterm/parser_actions.go
+++ b/vendor/github.com/Azure/go-ansiterm/parser_actions.go
@@ -1,19 +1,15 @@
package ansiterm
-import (
- "fmt"
-)
-
func (ap *AnsiParser) collectParam() error {
currChar := ap.context.currentChar
- logger.Infof("collectParam %#x", currChar)
+ ap.logf("collectParam %#x", currChar)
ap.context.paramBuffer = append(ap.context.paramBuffer, currChar)
return nil
}
func (ap *AnsiParser) collectInter() error {
currChar := ap.context.currentChar
- logger.Infof("collectInter %#x", currChar)
+ ap.logf("collectInter %#x", currChar)
ap.context.paramBuffer = append(ap.context.interBuffer, currChar)
return nil
}
@@ -21,8 +17,8 @@ func (ap *AnsiParser) collectInter() error {
func (ap *AnsiParser) escDispatch() error {
cmd, _ := parseCmd(*ap.context)
intermeds := ap.context.interBuffer
- logger.Infof("escDispatch currentChar: %#x", ap.context.currentChar)
- logger.Infof("escDispatch: %v(%v)", cmd, intermeds)
+ ap.logf("escDispatch currentChar: %#x", ap.context.currentChar)
+ ap.logf("escDispatch: %v(%v)", cmd, intermeds)
switch cmd {
case "D": // IND
@@ -43,8 +39,9 @@ func (ap *AnsiParser) escDispatch() error {
func (ap *AnsiParser) csiDispatch() error {
cmd, _ := parseCmd(*ap.context)
params, _ := parseParams(ap.context.paramBuffer)
+ ap.logf("Parsed params: %v with length: %d", params, len(params))
- logger.Infof("csiDispatch: %v(%v)", cmd, params)
+ ap.logf("csiDispatch: %v(%v)", cmd, params)
switch cmd {
case "@":
@@ -102,7 +99,7 @@ func (ap *AnsiParser) csiDispatch() error {
top, bottom := ints[0], ints[1]
return ap.eventHandler.DECSTBM(top, bottom)
default:
- logger.Errorf(fmt.Sprintf("Unsupported CSI command: '%s', with full context: %v", cmd, ap.context))
+ ap.logf("ERROR: Unsupported CSI command: '%s', with full context: %v", cmd, ap.context)
return nil
}
diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/ansi.go b/vendor/github.com/Azure/go-ansiterm/winterm/ansi.go
index daf2f0696..a67327972 100644
--- a/vendor/github.com/Azure/go-ansiterm/winterm/ansi.go
+++ b/vendor/github.com/Azure/go-ansiterm/winterm/ansi.go
@@ -175,7 +175,7 @@ func GetStdFile(nFile int) (*os.File, uintptr) {
fd, err := syscall.GetStdHandle(nFile)
if err != nil {
- panic(fmt.Errorf("Invalid standard handle indentifier: %v -- %v", nFile, err))
+ panic(fmt.Errorf("Invalid standard handle identifier: %v -- %v", nFile, err))
}
return file, uintptr(fd)
diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/api.go b/vendor/github.com/Azure/go-ansiterm/winterm/api.go
index 462d92f8e..6055e33b9 100644
--- a/vendor/github.com/Azure/go-ansiterm/winterm/api.go
+++ b/vendor/github.com/Azure/go-ansiterm/winterm/api.go
@@ -49,17 +49,22 @@ var (
const (
// Console modes
// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx.
- ENABLE_PROCESSED_INPUT = 0x0001
- ENABLE_LINE_INPUT = 0x0002
- ENABLE_ECHO_INPUT = 0x0004
- ENABLE_WINDOW_INPUT = 0x0008
- ENABLE_MOUSE_INPUT = 0x0010
- ENABLE_INSERT_MODE = 0x0020
- ENABLE_QUICK_EDIT_MODE = 0x0040
- ENABLE_EXTENDED_FLAGS = 0x0080
-
- ENABLE_PROCESSED_OUTPUT = 0x0001
- ENABLE_WRAP_AT_EOL_OUTPUT = 0x0002
+ ENABLE_PROCESSED_INPUT = 0x0001
+ ENABLE_LINE_INPUT = 0x0002
+ ENABLE_ECHO_INPUT = 0x0004
+ ENABLE_WINDOW_INPUT = 0x0008
+ ENABLE_MOUSE_INPUT = 0x0010
+ ENABLE_INSERT_MODE = 0x0020
+ ENABLE_QUICK_EDIT_MODE = 0x0040
+ ENABLE_EXTENDED_FLAGS = 0x0080
+ ENABLE_AUTO_POSITION = 0x0100
+ ENABLE_VIRTUAL_TERMINAL_INPUT = 0x0200
+
+ ENABLE_PROCESSED_OUTPUT = 0x0001
+ ENABLE_WRAP_AT_EOL_OUTPUT = 0x0002
+ ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004
+ DISABLE_NEWLINE_AUTO_RETURN = 0x0008
+ ENABLE_LVB_GRID_WORLDWIDE = 0x0010
// Character attributes
// Note:
diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/cursor_helpers.go b/vendor/github.com/Azure/go-ansiterm/winterm/cursor_helpers.go
index f015723ad..3ee06ea72 100644
--- a/vendor/github.com/Azure/go-ansiterm/winterm/cursor_helpers.go
+++ b/vendor/github.com/Azure/go-ansiterm/winterm/cursor_helpers.go
@@ -34,7 +34,7 @@ func (h *windowsAnsiEventHandler) setCursorPosition(position COORD, window SMALL
if err != nil {
return err
}
- logger.Infof("Cursor position set: (%d, %d)", position.X, position.Y)
+ h.logf("Cursor position set: (%d, %d)", position.X, position.Y)
return err
}
diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/scroll_helper.go b/vendor/github.com/Azure/go-ansiterm/winterm/scroll_helper.go
index 706d27057..2d27fa1d0 100644
--- a/vendor/github.com/Azure/go-ansiterm/winterm/scroll_helper.go
+++ b/vendor/github.com/Azure/go-ansiterm/winterm/scroll_helper.go
@@ -50,8 +50,8 @@ func (h *windowsAnsiEventHandler) insertLines(param int) error {
// scroll scrolls the provided scroll region by param lines. The scroll region is in buffer coordinates.
func (h *windowsAnsiEventHandler) scroll(param int, sr scrollRegion, info *CONSOLE_SCREEN_BUFFER_INFO) error {
- logger.Infof("scroll: scrollTop: %d, scrollBottom: %d", sr.top, sr.bottom)
- logger.Infof("scroll: windowTop: %d, windowBottom: %d", info.Window.Top, info.Window.Bottom)
+ h.logf("scroll: scrollTop: %d, scrollBottom: %d", sr.top, sr.bottom)
+ h.logf("scroll: windowTop: %d, windowBottom: %d", info.Window.Top, info.Window.Bottom)
// Copy from and clip to the scroll region (full buffer width)
scrollRect := SMALL_RECT{
diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/win_event_handler.go b/vendor/github.com/Azure/go-ansiterm/winterm/win_event_handler.go
index 48998bb05..2d40fb75a 100644
--- a/vendor/github.com/Azure/go-ansiterm/winterm/win_event_handler.go
+++ b/vendor/github.com/Azure/go-ansiterm/winterm/win_event_handler.go
@@ -4,16 +4,13 @@ package winterm
import (
"bytes"
- "io/ioutil"
+ "log"
"os"
"strconv"
"github.com/Azure/go-ansiterm"
- "github.com/sirupsen/logrus"
)
-var logger *logrus.Logger
-
type windowsAnsiEventHandler struct {
fd uintptr
file *os.File
@@ -28,32 +25,52 @@ type windowsAnsiEventHandler struct {
marginByte byte
curInfo *CONSOLE_SCREEN_BUFFER_INFO
curPos COORD
+ logf func(string, ...interface{})
}
-func CreateWinEventHandler(fd uintptr, file *os.File) ansiterm.AnsiEventHandler {
- logFile := ioutil.Discard
-
- if isDebugEnv := os.Getenv(ansiterm.LogEnv); isDebugEnv == "1" {
- logFile, _ = os.Create("winEventHandler.log")
- }
+type Option func(*windowsAnsiEventHandler)
- logger = &logrus.Logger{
- Out: logFile,
- Formatter: new(logrus.TextFormatter),
- Level: logrus.DebugLevel,
+func WithLogf(f func(string, ...interface{})) Option {
+ return func(w *windowsAnsiEventHandler) {
+ w.logf = f
}
+}
+func CreateWinEventHandler(fd uintptr, file *os.File, opts ...Option) ansiterm.AnsiEventHandler {
infoReset, err := GetConsoleScreenBufferInfo(fd)
if err != nil {
return nil
}
- return &windowsAnsiEventHandler{
+ h := &windowsAnsiEventHandler{
fd: fd,
file: file,
infoReset: infoReset,
attributes: infoReset.Attributes,
}
+ for _, o := range opts {
+ o(h)
+ }
+
+ if isDebugEnv := os.Getenv(ansiterm.LogEnv); isDebugEnv == "1" {
+ logFile, _ := os.Create("winEventHandler.log")
+ logger := log.New(logFile, "", log.LstdFlags)
+ if h.logf != nil {
+ l := h.logf
+ h.logf = func(s string, v ...interface{}) {
+ l(s, v...)
+ logger.Printf(s, v...)
+ }
+ } else {
+ h.logf = logger.Printf
+ }
+ }
+
+ if h.logf == nil {
+ h.logf = func(string, ...interface{}) {}
+ }
+
+ return h
}
type scrollRegion struct {
@@ -96,7 +113,7 @@ func (h *windowsAnsiEventHandler) simulateLF(includeCR bool) (bool, error) {
if err := h.Flush(); err != nil {
return false, err
}
- logger.Info("Simulating LF inside scroll region")
+ h.logf("Simulating LF inside scroll region")
if err := h.scrollUp(1); err != nil {
return false, err
}
@@ -119,7 +136,7 @@ func (h *windowsAnsiEventHandler) simulateLF(includeCR bool) (bool, error) {
} else {
// The cursor is at the bottom of the screen but outside the scroll
// region. Skip the LF.
- logger.Info("Simulating LF outside scroll region")
+ h.logf("Simulating LF outside scroll region")
if includeCR {
if err := h.Flush(); err != nil {
return false, err
@@ -151,7 +168,7 @@ func (h *windowsAnsiEventHandler) executeLF() error {
if err := h.Flush(); err != nil {
return err
}
- logger.Info("Resetting cursor position for LF without CR")
+ h.logf("Resetting cursor position for LF without CR")
if err := SetConsoleCursorPosition(h.fd, pos); err != nil {
return err
}
@@ -186,7 +203,7 @@ func (h *windowsAnsiEventHandler) Print(b byte) error {
func (h *windowsAnsiEventHandler) Execute(b byte) error {
switch b {
case ansiterm.ANSI_TAB:
- logger.Info("Execute(TAB)")
+ h.logf("Execute(TAB)")
// Move to the next tab stop, but preserve auto-wrap if already set.
if !h.wrapNext {
pos, info, err := h.getCurrentInfo()
@@ -269,7 +286,7 @@ func (h *windowsAnsiEventHandler) CUU(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("CUU: [%v]", []string{strconv.Itoa(param)})
+ h.logf("CUU: [%v]", []string{strconv.Itoa(param)})
h.clearWrap()
return h.moveCursorVertical(-param)
}
@@ -278,7 +295,7 @@ func (h *windowsAnsiEventHandler) CUD(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("CUD: [%v]", []string{strconv.Itoa(param)})
+ h.logf("CUD: [%v]", []string{strconv.Itoa(param)})
h.clearWrap()
return h.moveCursorVertical(param)
}
@@ -287,7 +304,7 @@ func (h *windowsAnsiEventHandler) CUF(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("CUF: [%v]", []string{strconv.Itoa(param)})
+ h.logf("CUF: [%v]", []string{strconv.Itoa(param)})
h.clearWrap()
return h.moveCursorHorizontal(param)
}
@@ -296,7 +313,7 @@ func (h *windowsAnsiEventHandler) CUB(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("CUB: [%v]", []string{strconv.Itoa(param)})
+ h.logf("CUB: [%v]", []string{strconv.Itoa(param)})
h.clearWrap()
return h.moveCursorHorizontal(-param)
}
@@ -305,7 +322,7 @@ func (h *windowsAnsiEventHandler) CNL(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("CNL: [%v]", []string{strconv.Itoa(param)})
+ h.logf("CNL: [%v]", []string{strconv.Itoa(param)})
h.clearWrap()
return h.moveCursorLine(param)
}
@@ -314,7 +331,7 @@ func (h *windowsAnsiEventHandler) CPL(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("CPL: [%v]", []string{strconv.Itoa(param)})
+ h.logf("CPL: [%v]", []string{strconv.Itoa(param)})
h.clearWrap()
return h.moveCursorLine(-param)
}
@@ -323,7 +340,7 @@ func (h *windowsAnsiEventHandler) CHA(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("CHA: [%v]", []string{strconv.Itoa(param)})
+ h.logf("CHA: [%v]", []string{strconv.Itoa(param)})
h.clearWrap()
return h.moveCursorColumn(param)
}
@@ -332,7 +349,7 @@ func (h *windowsAnsiEventHandler) VPA(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("VPA: [[%d]]", param)
+ h.logf("VPA: [[%d]]", param)
h.clearWrap()
info, err := GetConsoleScreenBufferInfo(h.fd)
if err != nil {
@@ -348,7 +365,7 @@ func (h *windowsAnsiEventHandler) CUP(row int, col int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("CUP: [[%d %d]]", row, col)
+ h.logf("CUP: [[%d %d]]", row, col)
h.clearWrap()
info, err := GetConsoleScreenBufferInfo(h.fd)
if err != nil {
@@ -364,7 +381,7 @@ func (h *windowsAnsiEventHandler) HVP(row int, col int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("HVP: [[%d %d]]", row, col)
+ h.logf("HVP: [[%d %d]]", row, col)
h.clearWrap()
return h.CUP(row, col)
}
@@ -373,7 +390,7 @@ func (h *windowsAnsiEventHandler) DECTCEM(visible bool) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("DECTCEM: [%v]", []string{strconv.FormatBool(visible)})
+ h.logf("DECTCEM: [%v]", []string{strconv.FormatBool(visible)})
h.clearWrap()
return nil
}
@@ -382,7 +399,7 @@ func (h *windowsAnsiEventHandler) DECOM(enable bool) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("DECOM: [%v]", []string{strconv.FormatBool(enable)})
+ h.logf("DECOM: [%v]", []string{strconv.FormatBool(enable)})
h.clearWrap()
h.originMode = enable
return h.CUP(1, 1)
@@ -392,7 +409,7 @@ func (h *windowsAnsiEventHandler) DECCOLM(use132 bool) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("DECCOLM: [%v]", []string{strconv.FormatBool(use132)})
+ h.logf("DECCOLM: [%v]", []string{strconv.FormatBool(use132)})
h.clearWrap()
if err := h.ED(2); err != nil {
return err
@@ -407,7 +424,7 @@ func (h *windowsAnsiEventHandler) DECCOLM(use132 bool) error {
}
if info.Size.X < targetWidth {
if err := SetConsoleScreenBufferSize(h.fd, COORD{targetWidth, info.Size.Y}); err != nil {
- logger.Info("set buffer failed:", err)
+ h.logf("set buffer failed: %v", err)
return err
}
}
@@ -415,12 +432,12 @@ func (h *windowsAnsiEventHandler) DECCOLM(use132 bool) error {
window.Left = 0
window.Right = targetWidth - 1
if err := SetConsoleWindowInfo(h.fd, true, window); err != nil {
- logger.Info("set window failed:", err)
+ h.logf("set window failed: %v", err)
return err
}
if info.Size.X > targetWidth {
if err := SetConsoleScreenBufferSize(h.fd, COORD{targetWidth, info.Size.Y}); err != nil {
- logger.Info("set buffer failed:", err)
+ h.logf("set buffer failed: %v", err)
return err
}
}
@@ -431,7 +448,7 @@ func (h *windowsAnsiEventHandler) ED(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("ED: [%v]", []string{strconv.Itoa(param)})
+ h.logf("ED: [%v]", []string{strconv.Itoa(param)})
h.clearWrap()
// [J -- Erases from the cursor to the end of the screen, including the cursor position.
@@ -490,7 +507,7 @@ func (h *windowsAnsiEventHandler) EL(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("EL: [%v]", strconv.Itoa(param))
+ h.logf("EL: [%v]", strconv.Itoa(param))
h.clearWrap()
// [K -- Erases from the cursor to the end of the line, including the cursor position.
@@ -531,7 +548,7 @@ func (h *windowsAnsiEventHandler) IL(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("IL: [%v]", strconv.Itoa(param))
+ h.logf("IL: [%v]", strconv.Itoa(param))
h.clearWrap()
return h.insertLines(param)
}
@@ -540,7 +557,7 @@ func (h *windowsAnsiEventHandler) DL(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("DL: [%v]", strconv.Itoa(param))
+ h.logf("DL: [%v]", strconv.Itoa(param))
h.clearWrap()
return h.deleteLines(param)
}
@@ -549,7 +566,7 @@ func (h *windowsAnsiEventHandler) ICH(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("ICH: [%v]", strconv.Itoa(param))
+ h.logf("ICH: [%v]", strconv.Itoa(param))
h.clearWrap()
return h.insertCharacters(param)
}
@@ -558,7 +575,7 @@ func (h *windowsAnsiEventHandler) DCH(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("DCH: [%v]", strconv.Itoa(param))
+ h.logf("DCH: [%v]", strconv.Itoa(param))
h.clearWrap()
return h.deleteCharacters(param)
}
@@ -572,7 +589,7 @@ func (h *windowsAnsiEventHandler) SGR(params []int) error {
strings = append(strings, strconv.Itoa(v))
}
- logger.Infof("SGR: [%v]", strings)
+ h.logf("SGR: [%v]", strings)
if len(params) <= 0 {
h.attributes = h.infoReset.Attributes
@@ -606,7 +623,7 @@ func (h *windowsAnsiEventHandler) SU(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("SU: [%v]", []string{strconv.Itoa(param)})
+ h.logf("SU: [%v]", []string{strconv.Itoa(param)})
h.clearWrap()
return h.scrollUp(param)
}
@@ -615,13 +632,13 @@ func (h *windowsAnsiEventHandler) SD(param int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("SD: [%v]", []string{strconv.Itoa(param)})
+ h.logf("SD: [%v]", []string{strconv.Itoa(param)})
h.clearWrap()
return h.scrollDown(param)
}
func (h *windowsAnsiEventHandler) DA(params []string) error {
- logger.Infof("DA: [%v]", params)
+ h.logf("DA: [%v]", params)
// DA cannot be implemented because it must send data on the VT100 input stream,
// which is not available to go-ansiterm.
return nil
@@ -631,7 +648,7 @@ func (h *windowsAnsiEventHandler) DECSTBM(top int, bottom int) error {
if err := h.Flush(); err != nil {
return err
}
- logger.Infof("DECSTBM: [%d, %d]", top, bottom)
+ h.logf("DECSTBM: [%d, %d]", top, bottom)
// Windows is 0 indexed, Linux is 1 indexed
h.sr.top = int16(top - 1)
@@ -646,7 +663,7 @@ func (h *windowsAnsiEventHandler) RI() error {
if err := h.Flush(); err != nil {
return err
}
- logger.Info("RI: []")
+ h.logf("RI: []")
h.clearWrap()
info, err := GetConsoleScreenBufferInfo(h.fd)
@@ -663,21 +680,21 @@ func (h *windowsAnsiEventHandler) RI() error {
}
func (h *windowsAnsiEventHandler) IND() error {
- logger.Info("IND: []")
+ h.logf("IND: []")
return h.executeLF()
}
func (h *windowsAnsiEventHandler) Flush() error {
h.curInfo = nil
if h.buffer.Len() > 0 {
- logger.Infof("Flush: [%s]", h.buffer.Bytes())
+ h.logf("Flush: [%s]", h.buffer.Bytes())
if _, err := h.buffer.WriteTo(h.file); err != nil {
return err
}
}
if h.wrapNext && !h.drewMarginByte {
- logger.Infof("Flush: drawing margin byte '%c'", h.marginByte)
+ h.logf("Flush: drawing margin byte '%c'", h.marginByte)
info, err := GetConsoleScreenBufferInfo(h.fd)
if err != nil {
diff --git a/vendor/github.com/Microsoft/go-winio/backuptar/tar.go b/vendor/github.com/Microsoft/go-winio/backuptar/tar.go
index 53da908f1..d6566dbf0 100644
--- a/vendor/github.com/Microsoft/go-winio/backuptar/tar.go
+++ b/vendor/github.com/Microsoft/go-winio/backuptar/tar.go
@@ -303,7 +303,7 @@ func FileInfoFromHeader(hdr *tar.Header) (name string, size int64, fileInfo *win
if err != nil {
return "", 0, nil, err
}
- fileInfo.FileAttributes = uintptr(attr)
+ fileInfo.FileAttributes = uint32(attr)
} else {
if hdr.Typeflag == tar.TypeDir {
fileInfo.FileAttributes |= syscall.FILE_ATTRIBUTE_DIRECTORY
diff --git a/vendor/github.com/Microsoft/go-winio/ea.go b/vendor/github.com/Microsoft/go-winio/ea.go
index b37e930d6..4051c1b33 100644
--- a/vendor/github.com/Microsoft/go-winio/ea.go
+++ b/vendor/github.com/Microsoft/go-winio/ea.go
@@ -1,137 +1,137 @@
-package winio
-
-import (
- "bytes"
- "encoding/binary"
- "errors"
-)
-
-type fileFullEaInformation struct {
- NextEntryOffset uint32
- Flags uint8
- NameLength uint8
- ValueLength uint16
-}
-
-var (
- fileFullEaInformationSize = binary.Size(&fileFullEaInformation{})
-
- errInvalidEaBuffer = errors.New("invalid extended attribute buffer")
- errEaNameTooLarge = errors.New("extended attribute name too large")
- errEaValueTooLarge = errors.New("extended attribute value too large")
-)
-
-// ExtendedAttribute represents a single Windows EA.
-type ExtendedAttribute struct {
- Name string
- Value []byte
- Flags uint8
-}
-
-func parseEa(b []byte) (ea ExtendedAttribute, nb []byte, err error) {
- var info fileFullEaInformation
- err = binary.Read(bytes.NewReader(b), binary.LittleEndian, &info)
- if err != nil {
- err = errInvalidEaBuffer
- return
- }
-
- nameOffset := fileFullEaInformationSize
- nameLen := int(info.NameLength)
- valueOffset := nameOffset + int(info.NameLength) + 1
- valueLen := int(info.ValueLength)
- nextOffset := int(info.NextEntryOffset)
- if valueLen+valueOffset > len(b) || nextOffset < 0 || nextOffset > len(b) {
- err = errInvalidEaBuffer
- return
- }
-
- ea.Name = string(b[nameOffset : nameOffset+nameLen])
- ea.Value = b[valueOffset : valueOffset+valueLen]
- ea.Flags = info.Flags
- if info.NextEntryOffset != 0 {
- nb = b[info.NextEntryOffset:]
- }
- return
-}
-
-// DecodeExtendedAttributes decodes a list of EAs from a FILE_FULL_EA_INFORMATION
-// buffer retrieved from BackupRead, ZwQueryEaFile, etc.
-func DecodeExtendedAttributes(b []byte) (eas []ExtendedAttribute, err error) {
- for len(b) != 0 {
- ea, nb, err := parseEa(b)
- if err != nil {
- return nil, err
- }
-
- eas = append(eas, ea)
- b = nb
- }
- return
-}
-
-func writeEa(buf *bytes.Buffer, ea *ExtendedAttribute, last bool) error {
- if int(uint8(len(ea.Name))) != len(ea.Name) {
- return errEaNameTooLarge
- }
- if int(uint16(len(ea.Value))) != len(ea.Value) {
- return errEaValueTooLarge
- }
- entrySize := uint32(fileFullEaInformationSize + len(ea.Name) + 1 + len(ea.Value))
- withPadding := (entrySize + 3) &^ 3
- nextOffset := uint32(0)
- if !last {
- nextOffset = withPadding
- }
- info := fileFullEaInformation{
- NextEntryOffset: nextOffset,
- Flags: ea.Flags,
- NameLength: uint8(len(ea.Name)),
- ValueLength: uint16(len(ea.Value)),
- }
-
- err := binary.Write(buf, binary.LittleEndian, &info)
- if err != nil {
- return err
- }
-
- _, err = buf.Write([]byte(ea.Name))
- if err != nil {
- return err
- }
-
- err = buf.WriteByte(0)
- if err != nil {
- return err
- }
-
- _, err = buf.Write(ea.Value)
- if err != nil {
- return err
- }
-
- _, err = buf.Write([]byte{0, 0, 0}[0 : withPadding-entrySize])
- if err != nil {
- return err
- }
-
- return nil
-}
-
-// EncodeExtendedAttributes encodes a list of EAs into a FILE_FULL_EA_INFORMATION
-// buffer for use with BackupWrite, ZwSetEaFile, etc.
-func EncodeExtendedAttributes(eas []ExtendedAttribute) ([]byte, error) {
- var buf bytes.Buffer
- for i := range eas {
- last := false
- if i == len(eas)-1 {
- last = true
- }
-
- err := writeEa(&buf, &eas[i], last)
- if err != nil {
- return nil, err
- }
- }
- return buf.Bytes(), nil
-}
+package winio
+
+import (
+ "bytes"
+ "encoding/binary"
+ "errors"
+)
+
+type fileFullEaInformation struct {
+ NextEntryOffset uint32
+ Flags uint8
+ NameLength uint8
+ ValueLength uint16
+}
+
+var (
+ fileFullEaInformationSize = binary.Size(&fileFullEaInformation{})
+
+ errInvalidEaBuffer = errors.New("invalid extended attribute buffer")
+ errEaNameTooLarge = errors.New("extended attribute name too large")
+ errEaValueTooLarge = errors.New("extended attribute value too large")
+)
+
+// ExtendedAttribute represents a single Windows EA.
+type ExtendedAttribute struct {
+ Name string
+ Value []byte
+ Flags uint8
+}
+
+func parseEa(b []byte) (ea ExtendedAttribute, nb []byte, err error) {
+ var info fileFullEaInformation
+ err = binary.Read(bytes.NewReader(b), binary.LittleEndian, &info)
+ if err != nil {
+ err = errInvalidEaBuffer
+ return
+ }
+
+ nameOffset := fileFullEaInformationSize
+ nameLen := int(info.NameLength)
+ valueOffset := nameOffset + int(info.NameLength) + 1
+ valueLen := int(info.ValueLength)
+ nextOffset := int(info.NextEntryOffset)
+ if valueLen+valueOffset > len(b) || nextOffset < 0 || nextOffset > len(b) {
+ err = errInvalidEaBuffer
+ return
+ }
+
+ ea.Name = string(b[nameOffset : nameOffset+nameLen])
+ ea.Value = b[valueOffset : valueOffset+valueLen]
+ ea.Flags = info.Flags
+ if info.NextEntryOffset != 0 {
+ nb = b[info.NextEntryOffset:]
+ }
+ return
+}
+
+// DecodeExtendedAttributes decodes a list of EAs from a FILE_FULL_EA_INFORMATION
+// buffer retrieved from BackupRead, ZwQueryEaFile, etc.
+func DecodeExtendedAttributes(b []byte) (eas []ExtendedAttribute, err error) {
+ for len(b) != 0 {
+ ea, nb, err := parseEa(b)
+ if err != nil {
+ return nil, err
+ }
+
+ eas = append(eas, ea)
+ b = nb
+ }
+ return
+}
+
+func writeEa(buf *bytes.Buffer, ea *ExtendedAttribute, last bool) error {
+ if int(uint8(len(ea.Name))) != len(ea.Name) {
+ return errEaNameTooLarge
+ }
+ if int(uint16(len(ea.Value))) != len(ea.Value) {
+ return errEaValueTooLarge
+ }
+ entrySize := uint32(fileFullEaInformationSize + len(ea.Name) + 1 + len(ea.Value))
+ withPadding := (entrySize + 3) &^ 3
+ nextOffset := uint32(0)
+ if !last {
+ nextOffset = withPadding
+ }
+ info := fileFullEaInformation{
+ NextEntryOffset: nextOffset,
+ Flags: ea.Flags,
+ NameLength: uint8(len(ea.Name)),
+ ValueLength: uint16(len(ea.Value)),
+ }
+
+ err := binary.Write(buf, binary.LittleEndian, &info)
+ if err != nil {
+ return err
+ }
+
+ _, err = buf.Write([]byte(ea.Name))
+ if err != nil {
+ return err
+ }
+
+ err = buf.WriteByte(0)
+ if err != nil {
+ return err
+ }
+
+ _, err = buf.Write(ea.Value)
+ if err != nil {
+ return err
+ }
+
+ _, err = buf.Write([]byte{0, 0, 0}[0 : withPadding-entrySize])
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// EncodeExtendedAttributes encodes a list of EAs into a FILE_FULL_EA_INFORMATION
+// buffer for use with BackupWrite, ZwSetEaFile, etc.
+func EncodeExtendedAttributes(eas []ExtendedAttribute) ([]byte, error) {
+ var buf bytes.Buffer
+ for i := range eas {
+ last := false
+ if i == len(eas)-1 {
+ last = true
+ }
+
+ err := writeEa(&buf, &eas[i], last)
+ if err != nil {
+ return nil, err
+ }
+ }
+ return buf.Bytes(), nil
+}
diff --git a/vendor/github.com/Microsoft/go-winio/file.go b/vendor/github.com/Microsoft/go-winio/file.go
index 57ac3696a..4334ff1cb 100644
--- a/vendor/github.com/Microsoft/go-winio/file.go
+++ b/vendor/github.com/Microsoft/go-winio/file.go
@@ -16,7 +16,6 @@ import (
//sys createIoCompletionPort(file syscall.Handle, port syscall.Handle, key uintptr, threadCount uint32) (newport syscall.Handle, err error) = CreateIoCompletionPort
//sys getQueuedCompletionStatus(port syscall.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) = GetQueuedCompletionStatus
//sys setFileCompletionNotificationModes(h syscall.Handle, flags uint8) (err error) = SetFileCompletionNotificationModes
-//sys timeBeginPeriod(period uint32) (n int32) = winmm.timeBeginPeriod
type atomicBool int32
@@ -153,8 +152,6 @@ func (f *win32File) prepareIo() (*ioOperation, error) {
// ioCompletionProcessor processes completed async IOs forever
func ioCompletionProcessor(h syscall.Handle) {
- // Set the timer resolution to 1. This fixes a performance regression in golang 1.6.
- timeBeginPeriod(1)
for {
var bytes uint32
var key uintptr
diff --git a/vendor/github.com/Microsoft/go-winio/fileinfo.go b/vendor/github.com/Microsoft/go-winio/fileinfo.go
index b1d60abb8..ada2fbab6 100644
--- a/vendor/github.com/Microsoft/go-winio/fileinfo.go
+++ b/vendor/github.com/Microsoft/go-winio/fileinfo.go
@@ -20,7 +20,8 @@ const (
// FileBasicInfo contains file access time and file attributes information.
type FileBasicInfo struct {
CreationTime, LastAccessTime, LastWriteTime, ChangeTime syscall.Filetime
- FileAttributes uintptr // includes padding
+ FileAttributes uint32
+ pad uint32 // padding
}
// GetFileBasicInfo retrieves times and attributes for a file.
diff --git a/vendor/github.com/Microsoft/go-winio/pipe.go b/vendor/github.com/Microsoft/go-winio/pipe.go
index 44340b816..d99eedb64 100644
--- a/vendor/github.com/Microsoft/go-winio/pipe.go
+++ b/vendor/github.com/Microsoft/go-winio/pipe.go
@@ -15,13 +15,13 @@ import (
//sys connectNamedPipe(pipe syscall.Handle, o *syscall.Overlapped) (err error) = ConnectNamedPipe
//sys createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *syscall.SecurityAttributes) (handle syscall.Handle, err error) [failretval==syscall.InvalidHandle] = CreateNamedPipeW
//sys createFile(name string, access uint32, mode uint32, sa *syscall.SecurityAttributes, createmode uint32, attrs uint32, templatefile syscall.Handle) (handle syscall.Handle, err error) [failretval==syscall.InvalidHandle] = CreateFileW
-//sys waitNamedPipe(name string, timeout uint32) (err error) = WaitNamedPipeW
//sys getNamedPipeInfo(pipe syscall.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) = GetNamedPipeInfo
//sys getNamedPipeHandleState(pipe syscall.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW
//sys localAlloc(uFlags uint32, length uint32) (ptr uintptr) = LocalAlloc
const (
cERROR_PIPE_BUSY = syscall.Errno(231)
+ cERROR_NO_DATA = syscall.Errno(232)
cERROR_PIPE_CONNECTED = syscall.Errno(535)
cERROR_SEM_TIMEOUT = syscall.Errno(121)
@@ -120,6 +120,11 @@ func (f *win32MessageBytePipe) Read(b []byte) (int, error) {
// zero-byte message, ensure that all future Read() calls
// also return EOF.
f.readEOF = true
+ } else if err == syscall.ERROR_MORE_DATA {
+ // ERROR_MORE_DATA indicates that the pipe's read mode is message mode
+ // and the message still has more bytes. Treat this as a success, since
+ // this package presents all named pipes as byte streams.
+ err = nil
}
return n, err
}
@@ -133,12 +138,14 @@ func (s pipeAddress) String() string {
}
// DialPipe connects to a named pipe by path, timing out if the connection
-// takes longer than the specified duration. If timeout is nil, then the timeout
-// is the default timeout established by the pipe server.
+// takes longer than the specified duration. If timeout is nil, then we use
+// a default timeout of 5 seconds. (We do not use WaitNamedPipe.)
func DialPipe(path string, timeout *time.Duration) (net.Conn, error) {
var absTimeout time.Time
if timeout != nil {
absTimeout = time.Now().Add(*timeout)
+ } else {
+ absTimeout = time.Now().Add(time.Second * 2)
}
var err error
var h syscall.Handle
@@ -147,22 +154,13 @@ func DialPipe(path string, timeout *time.Duration) (net.Conn, error) {
if err != cERROR_PIPE_BUSY {
break
}
- now := time.Now()
- var ms uint32
- if absTimeout.IsZero() {
- ms = cNMPWAIT_USE_DEFAULT_WAIT
- } else if now.After(absTimeout) {
- ms = cNMPWAIT_NOWAIT
- } else {
- ms = uint32(absTimeout.Sub(now).Nanoseconds() / 1000 / 1000)
- }
- err = waitNamedPipe(path, ms)
- if err != nil {
- if err == cERROR_SEM_TIMEOUT {
- return nil, ErrTimeout
- }
- break
+ if time.Now().After(absTimeout) {
+ return nil, ErrTimeout
}
+
+ // Wait 10 msec and try again. This is a rather simplistic
+ // view, as we always try each 10 milliseconds.
+ time.Sleep(time.Millisecond * 10)
}
if err != nil {
return nil, &os.PathError{Op: "open", Path: path, Err: err}
@@ -174,16 +172,6 @@ func DialPipe(path string, timeout *time.Duration) (net.Conn, error) {
return nil, err
}
- var state uint32
- err = getNamedPipeHandleState(h, &state, nil, nil, nil, nil, 0)
- if err != nil {
- return nil, err
- }
-
- if state&cPIPE_READMODE_MESSAGE != 0 {
- return nil, &os.PathError{Op: "open", Path: path, Err: errors.New("message readmode pipes not supported")}
- }
-
f, err := makeWin32File(h)
if err != nil {
syscall.Close(h)
@@ -254,6 +242,36 @@ func (l *win32PipeListener) makeServerPipe() (*win32File, error) {
return f, nil
}
+func (l *win32PipeListener) makeConnectedServerPipe() (*win32File, error) {
+ p, err := l.makeServerPipe()
+ if err != nil {
+ return nil, err
+ }
+
+ // Wait for the client to connect.
+ ch := make(chan error)
+ go func(p *win32File) {
+ ch <- connectPipe(p)
+ }(p)
+
+ select {
+ case err = <-ch:
+ if err != nil {
+ p.Close()
+ p = nil
+ }
+ case <-l.closeCh:
+ // Abort the connect request by closing the handle.
+ p.Close()
+ p = nil
+ err = <-ch
+ if err == nil || err == ErrFileClosed {
+ err = ErrPipeListenerClosed
+ }
+ }
+ return p, err
+}
+
func (l *win32PipeListener) listenerRoutine() {
closed := false
for !closed {
@@ -261,31 +279,20 @@ func (l *win32PipeListener) listenerRoutine() {
case <-l.closeCh:
closed = true
case responseCh := <-l.acceptCh:
- p, err := l.makeServerPipe()
- if err == nil {
- // Wait for the client to connect.
- ch := make(chan error)
- go func(p *win32File) {
- ch <- connectPipe(p)
- }(p)
- select {
- case err = <-ch:
- if err != nil {
- p.Close()
- p = nil
- }
- case <-l.closeCh:
- // Abort the connect request by closing the handle.
- p.Close()
- p = nil
- err = <-ch
- if err == nil || err == ErrFileClosed {
- err = ErrPipeListenerClosed
- }
- closed = true
+ var (
+ p *win32File
+ err error
+ )
+ for {
+ p, err = l.makeConnectedServerPipe()
+ // If the connection was immediately closed by the client, try
+ // again.
+ if err != cERROR_NO_DATA {
+ break
}
}
responseCh <- acceptResponse{p, err}
+ closed = err == ErrPipeListenerClosed
}
}
syscall.Close(l.firstHandle)
@@ -334,13 +341,23 @@ func ListenPipe(path string, c *PipeConfig) (net.Listener, error) {
if err != nil {
return nil, err
}
- // Immediately open and then close a client handle so that the named pipe is
- // created but not currently accepting connections.
+ // Create a client handle and connect it. This results in the pipe
+ // instance always existing, so that clients see ERROR_PIPE_BUSY
+ // rather than ERROR_FILE_NOT_FOUND. This ties the first instance
+ // up so that no other instances can be used. This would have been
+ // cleaner if the Win32 API matched CreateFile with ConnectNamedPipe
+ // instead of CreateNamedPipe. (Apparently created named pipes are
+ // considered to be in listening state regardless of whether any
+ // active calls to ConnectNamedPipe are outstanding.)
h2, err := createFile(path, 0, 0, nil, syscall.OPEN_EXISTING, cSECURITY_SQOS_PRESENT|cSECURITY_ANONYMOUS, 0)
if err != nil {
syscall.Close(h)
return nil, err
}
+ // Close the client handle. The server side of the instance will
+ // still be busy, leading to ERROR_PIPE_BUSY instead of
+ // ERROR_NOT_FOUND, as long as we don't close the server handle,
+ // or disconnect the client with DisconnectNamedPipe.
syscall.Close(h2)
l := &win32PipeListener{
firstHandle: h,
diff --git a/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go
index 4f7a52eeb..3f527639a 100644
--- a/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go
+++ b/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go
@@ -38,14 +38,12 @@ func errnoErr(e syscall.Errno) error {
var (
modkernel32 = windows.NewLazySystemDLL("kernel32.dll")
- modwinmm = windows.NewLazySystemDLL("winmm.dll")
modadvapi32 = windows.NewLazySystemDLL("advapi32.dll")
procCancelIoEx = modkernel32.NewProc("CancelIoEx")
procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort")
procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus")
procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes")
- proctimeBeginPeriod = modwinmm.NewProc("timeBeginPeriod")
procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe")
procCreateNamedPipeW = modkernel32.NewProc("CreateNamedPipeW")
procCreateFileW = modkernel32.NewProc("CreateFileW")
@@ -122,12 +120,6 @@ func setFileCompletionNotificationModes(h syscall.Handle, flags uint8) (err erro
return
}
-func timeBeginPeriod(period uint32) (n int32) {
- r0, _, _ := syscall.Syscall(proctimeBeginPeriod.Addr(), 1, uintptr(period), 0, 0)
- n = int32(r0)
- return
-}
-
func connectNamedPipe(pipe syscall.Handle, o *syscall.Overlapped) (err error) {
r1, _, e1 := syscall.Syscall(procConnectNamedPipe.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(o)), 0)
if r1 == 0 {
diff --git a/vendor/github.com/Microsoft/hcsshim/README.md b/vendor/github.com/Microsoft/hcsshim/README.md
index 30991a12e..15b39181a 100644
--- a/vendor/github.com/Microsoft/hcsshim/README.md
+++ b/vendor/github.com/Microsoft/hcsshim/README.md
@@ -1,12 +1,41 @@
# hcsshim
-This package supports launching Windows Server containers from Go. It is
-primarily used in the [Docker Engine](https://github.com/docker/docker) project,
-but it can be freely used by other projects as well.
-
-This project has adopted the [Microsoft Open Source Code of
-Conduct](https://opensource.microsoft.com/codeofconduct/). For more information
-see the [Code of Conduct
-FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact
-[opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional
-questions or comments.
+[![Build status](https://ci.appveyor.com/api/projects/status/nbcw28mnkqml0loa/branch/master?svg=true)](https://ci.appveyor.com/project/WindowsVirtualization/hcsshim/branch/master)
+
+This package contains the Golang interface for using the Windows [Host Compute Service](https://blogs.technet.microsoft.com/virtualization/2017/01/27/introducing-the-host-compute-service-hcs/) (HCS) to launch and manage [Windows Containers](https://docs.microsoft.com/en-us/virtualization/windowscontainers/about/). It also contains other helpers and functions for managing Windows Containers such as the Golang interface for the Host Network Service (HNS).
+
+It is primarily used in the [Moby Project](https://github.com/moby/moby), but it can be freely used by other projects as well.
+
+## Contributing
+
+This project welcomes contributions and suggestions. Most contributions require you to agree to a
+Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
+the rights to use your contribution. For details, visit https://cla.microsoft.com.
+
+When you submit a pull request, a CLA-bot will automatically determine whether you need to provide
+a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions
+provided by the bot. You will only need to do this once across all repos using our CLA.
+
+This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
+For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
+contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
+
+## Dependencies
+
+This project requires Golang 1.9 or newer to build.
+
+For system requirements to run this project, see the Microsoft docs on [Windows Container requirements](https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/system-requirements).
+
+## Reporting Security Issues
+
+Security issues and bugs should be reported privately, via email, to the Microsoft Security
+Response Center (MSRC) at [secure@microsoft.com](mailto:secure@microsoft.com). You should
+receive a response within 24 hours. If for some reason you do not, please follow up via
+email to ensure we received your original message. Further information, including the
+[MSRC PGP](https://technet.microsoft.com/en-us/security/dn606155) key, can be found in
+the [Security TechCenter](https://technet.microsoft.com/en-us/security/default).
+
+For additional details, see [Report a Computer Security Vulnerability](https://technet.microsoft.com/en-us/security/ff852094.aspx) on Technet
+
+---------------
+Copyright (c) 2018 Microsoft Corp. All rights reserved.
diff --git a/vendor/github.com/Microsoft/hcsshim/activatelayer.go b/vendor/github.com/Microsoft/hcsshim/activatelayer.go
deleted file mode 100644
index 6d824d7a7..000000000
--- a/vendor/github.com/Microsoft/hcsshim/activatelayer.go
+++ /dev/null
@@ -1,28 +0,0 @@
-package hcsshim
-
-import "github.com/sirupsen/logrus"
-
-// ActivateLayer will find the layer with the given id and mount it's filesystem.
-// For a read/write layer, the mounted filesystem will appear as a volume on the
-// host, while a read-only layer is generally expected to be a no-op.
-// An activated layer must later be deactivated via DeactivateLayer.
-func ActivateLayer(info DriverInfo, id string) error {
- title := "hcsshim::ActivateLayer "
- logrus.Debugf(title+"Flavour %d ID %s", info.Flavour, id)
-
- infop, err := convertDriverInfo(info)
- if err != nil {
- logrus.Error(err)
- return err
- }
-
- err = activateLayer(&infop, id)
- if err != nil {
- err = makeErrorf(err, title, "id=%s flavour=%d", id, info.Flavour)
- logrus.Error(err)
- return err
- }
-
- logrus.Debugf(title+" - succeeded id=%s flavour=%d", id, info.Flavour)
- return nil
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/container.go b/vendor/github.com/Microsoft/hcsshim/container.go
index b924d39f4..e142c3154 100644
--- a/vendor/github.com/Microsoft/hcsshim/container.go
+++ b/vendor/github.com/Microsoft/hcsshim/container.go
@@ -1,794 +1,192 @@
package hcsshim
import (
- "encoding/json"
"fmt"
"os"
- "sync"
- "syscall"
"time"
- "github.com/sirupsen/logrus"
+ "github.com/Microsoft/hcsshim/internal/hcs"
+ "github.com/Microsoft/hcsshim/internal/mergemaps"
+ "github.com/Microsoft/hcsshim/internal/schema1"
)
-var (
- defaultTimeout = time.Minute * 4
-)
-
-const (
- pendingUpdatesQuery = `{ "PropertyTypes" : ["PendingUpdates"]}`
- statisticsQuery = `{ "PropertyTypes" : ["Statistics"]}`
- processListQuery = `{ "PropertyTypes" : ["ProcessList"]}`
- mappedVirtualDiskQuery = `{ "PropertyTypes" : ["MappedVirtualDisk"]}`
-)
-
-type container struct {
- handleLock sync.RWMutex
- handle hcsSystem
- id string
- callbackNumber uintptr
-}
-
// ContainerProperties holds the properties for a container and the processes running in that container
-type ContainerProperties struct {
- ID string `json:"Id"`
- Name string
- SystemType string
- Owner string
- SiloGUID string `json:"SiloGuid,omitempty"`
- RuntimeID string `json:"RuntimeId,omitempty"`
- IsRuntimeTemplate bool `json:",omitempty"`
- RuntimeImagePath string `json:",omitempty"`
- Stopped bool `json:",omitempty"`
- ExitType string `json:",omitempty"`
- AreUpdatesPending bool `json:",omitempty"`
- ObRoot string `json:",omitempty"`
- Statistics Statistics `json:",omitempty"`
- ProcessList []ProcessListItem `json:",omitempty"`
- MappedVirtualDiskControllers map[int]MappedVirtualDiskController `json:",omitempty"`
-}
+type ContainerProperties = schema1.ContainerProperties
// MemoryStats holds the memory statistics for a container
-type MemoryStats struct {
- UsageCommitBytes uint64 `json:"MemoryUsageCommitBytes,omitempty"`
- UsageCommitPeakBytes uint64 `json:"MemoryUsageCommitPeakBytes,omitempty"`
- UsagePrivateWorkingSetBytes uint64 `json:"MemoryUsagePrivateWorkingSetBytes,omitempty"`
-}
+type MemoryStats = schema1.MemoryStats
// ProcessorStats holds the processor statistics for a container
-type ProcessorStats struct {
- TotalRuntime100ns uint64 `json:",omitempty"`
- RuntimeUser100ns uint64 `json:",omitempty"`
- RuntimeKernel100ns uint64 `json:",omitempty"`
-}
+type ProcessorStats = schema1.ProcessorStats
// StorageStats holds the storage statistics for a container
-type StorageStats struct {
- ReadCountNormalized uint64 `json:",omitempty"`
- ReadSizeBytes uint64 `json:",omitempty"`
- WriteCountNormalized uint64 `json:",omitempty"`
- WriteSizeBytes uint64 `json:",omitempty"`
-}
+type StorageStats = schema1.StorageStats
// NetworkStats holds the network statistics for a container
-type NetworkStats struct {
- BytesReceived uint64 `json:",omitempty"`
- BytesSent uint64 `json:",omitempty"`
- PacketsReceived uint64 `json:",omitempty"`
- PacketsSent uint64 `json:",omitempty"`
- DroppedPacketsIncoming uint64 `json:",omitempty"`
- DroppedPacketsOutgoing uint64 `json:",omitempty"`
- EndpointId string `json:",omitempty"`
- InstanceId string `json:",omitempty"`
-}
+type NetworkStats = schema1.NetworkStats
// Statistics is the structure returned by a statistics call on a container
-type Statistics struct {
- Timestamp time.Time `json:",omitempty"`
- ContainerStartTime time.Time `json:",omitempty"`
- Uptime100ns uint64 `json:",omitempty"`
- Memory MemoryStats `json:",omitempty"`
- Processor ProcessorStats `json:",omitempty"`
- Storage StorageStats `json:",omitempty"`
- Network []NetworkStats `json:",omitempty"`
-}
+type Statistics = schema1.Statistics
// ProcessList is the structure of an item returned by a ProcessList call on a container
-type ProcessListItem struct {
- CreateTimestamp time.Time `json:",omitempty"`
- ImageName string `json:",omitempty"`
- KernelTime100ns uint64 `json:",omitempty"`
- MemoryCommitBytes uint64 `json:",omitempty"`
- MemoryWorkingSetPrivateBytes uint64 `json:",omitempty"`
- MemoryWorkingSetSharedBytes uint64 `json:",omitempty"`
- ProcessId uint32 `json:",omitempty"`
- UserTime100ns uint64 `json:",omitempty"`
-}
+type ProcessListItem = schema1.ProcessListItem
// MappedVirtualDiskController is the structure of an item returned by a MappedVirtualDiskList call on a container
-type MappedVirtualDiskController struct {
- MappedVirtualDisks map[int]MappedVirtualDisk `json:",omitempty"`
-}
+type MappedVirtualDiskController = schema1.MappedVirtualDiskController
// Type of Request Support in ModifySystem
-type RequestType string
+type RequestType = schema1.RequestType
// Type of Resource Support in ModifySystem
-type ResourceType string
+type ResourceType = schema1.ResourceType
// RequestType const
const (
- Add RequestType = "Add"
- Remove RequestType = "Remove"
- Network ResourceType = "Network"
+ Add = schema1.Add
+ Remove = schema1.Remove
+ Network = schema1.Network
)
// ResourceModificationRequestResponse is the structure used to send request to the container to modify the system
// Supported resource types are Network and Request Types are Add/Remove
-type ResourceModificationRequestResponse struct {
- Resource ResourceType `json:"ResourceType"`
- Data interface{} `json:"Settings"`
- Request RequestType `json:"RequestType,omitempty"`
+type ResourceModificationRequestResponse = schema1.ResourceModificationRequestResponse
+
+type container struct {
+ system *hcs.System
}
-// createContainerAdditionalJSON is read from the environment at initialisation
+// createComputeSystemAdditionalJSON is read from the environment at initialisation
// time. It allows an environment variable to define additional JSON which
-// is merged in the CreateContainer call to HCS.
-var createContainerAdditionalJSON string
+// is merged in the CreateComputeSystem call to HCS.
+var createContainerAdditionalJSON []byte
func init() {
- createContainerAdditionalJSON = os.Getenv("HCSSHIM_CREATECONTAINER_ADDITIONALJSON")
+ createContainerAdditionalJSON = ([]byte)(os.Getenv("HCSSHIM_CREATECONTAINER_ADDITIONALJSON"))
}
// CreateContainer creates a new container with the given configuration but does not start it.
func CreateContainer(id string, c *ContainerConfig) (Container, error) {
- return createContainerWithJSON(id, c, "")
-}
-
-// CreateContainerWithJSON creates a new container with the given configuration but does not start it.
-// It is identical to CreateContainer except that optional additional JSON can be merged before passing to HCS.
-func CreateContainerWithJSON(id string, c *ContainerConfig, additionalJSON string) (Container, error) {
- return createContainerWithJSON(id, c, additionalJSON)
-}
-
-func createContainerWithJSON(id string, c *ContainerConfig, additionalJSON string) (Container, error) {
- operation := "CreateContainer"
- title := "HCSShim::" + operation
-
- container := &container{
- id: id,
- }
-
- configurationb, err := json.Marshal(c)
+ fullConfig, err := mergemaps.MergeJSON(c, createContainerAdditionalJSON)
if err != nil {
- return nil, err
+ return nil, fmt.Errorf("failed to merge additional JSON '%s': %s", createContainerAdditionalJSON, err)
}
- configuration := string(configurationb)
- logrus.Debugf(title+" id=%s config=%s", id, configuration)
-
- // Merge any additional JSON. Priority is given to what is passed in explicitly,
- // falling back to what's set in the environment.
- if additionalJSON == "" && createContainerAdditionalJSON != "" {
- additionalJSON = createContainerAdditionalJSON
- }
- if additionalJSON != "" {
- configurationMap := map[string]interface{}{}
- if err := json.Unmarshal([]byte(configuration), &configurationMap); err != nil {
- return nil, fmt.Errorf("failed to unmarshal %s: %s", configuration, err)
- }
-
- additionalMap := map[string]interface{}{}
- if err := json.Unmarshal([]byte(additionalJSON), &additionalMap); err != nil {
- return nil, fmt.Errorf("failed to unmarshal %s: %s", additionalJSON, err)
- }
-
- mergedMap := mergeMaps(additionalMap, configurationMap)
- mergedJSON, err := json.Marshal(mergedMap)
- if err != nil {
- return nil, fmt.Errorf("failed to marshal merged configuration map %+v: %s", mergedMap, err)
- }
-
- configuration = string(mergedJSON)
- logrus.Debugf(title+" id=%s merged config=%s", id, configuration)
- }
-
- var (
- resultp *uint16
- identity syscall.Handle
- )
- createError := hcsCreateComputeSystem(id, configuration, identity, &container.handle, &resultp)
-
- if createError == nil || IsPending(createError) {
- if err := container.registerCallback(); err != nil {
- return nil, makeContainerError(container, operation, "", err)
- }
- }
-
- err = processAsyncHcsResult(createError, resultp, container.callbackNumber, hcsNotificationSystemCreateCompleted, &defaultTimeout)
+ system, err := hcs.CreateComputeSystem(id, fullConfig)
if err != nil {
- return nil, makeContainerError(container, operation, configuration, err)
- }
-
- logrus.Debugf(title+" succeeded id=%s handle=%d", id, container.handle)
- return container, nil
-}
-
-// mergeMaps recursively merges map `fromMap` into map `ToMap`. Any pre-existing values
-// in ToMap are overwritten. Values in fromMap are added to ToMap.
-// From http://stackoverflow.com/questions/40491438/merging-two-json-strings-in-golang
-func mergeMaps(fromMap, ToMap interface{}) interface{} {
- switch fromMap := fromMap.(type) {
- case map[string]interface{}:
- ToMap, ok := ToMap.(map[string]interface{})
- if !ok {
- return fromMap
- }
- for keyToMap, valueToMap := range ToMap {
- if valueFromMap, ok := fromMap[keyToMap]; ok {
- fromMap[keyToMap] = mergeMaps(valueFromMap, valueToMap)
- } else {
- fromMap[keyToMap] = valueToMap
- }
- }
- case nil:
- // merge(nil, map[string]interface{...}) -> map[string]interface{...}
- ToMap, ok := ToMap.(map[string]interface{})
- if ok {
- return ToMap
- }
+ return nil, err
}
- return fromMap
+ return &container{system}, err
}
// OpenContainer opens an existing container by ID.
func OpenContainer(id string) (Container, error) {
- operation := "OpenContainer"
- title := "HCSShim::" + operation
- logrus.Debugf(title+" id=%s", id)
-
- container := &container{
- id: id,
- }
-
- var (
- handle hcsSystem
- resultp *uint16
- )
- err := hcsOpenComputeSystem(id, &handle, &resultp)
- err = processHcsResult(err, resultp)
+ system, err := hcs.OpenComputeSystem(id)
if err != nil {
- return nil, makeContainerError(container, operation, "", err)
- }
-
- container.handle = handle
-
- if err := container.registerCallback(); err != nil {
- return nil, makeContainerError(container, operation, "", err)
+ return nil, err
}
-
- logrus.Debugf(title+" succeeded id=%s handle=%d", id, handle)
- return container, nil
+ return &container{system}, err
}
// GetContainers gets a list of the containers on the system that match the query
func GetContainers(q ComputeSystemQuery) ([]ContainerProperties, error) {
- operation := "GetContainers"
- title := "HCSShim::" + operation
-
- queryb, err := json.Marshal(q)
- if err != nil {
- return nil, err
- }
-
- query := string(queryb)
- logrus.Debugf(title+" query=%s", query)
-
- var (
- resultp *uint16
- computeSystemsp *uint16
- )
- err = hcsEnumerateComputeSystems(query, &computeSystemsp, &resultp)
- err = processHcsResult(err, resultp)
- if err != nil {
- return nil, err
- }
-
- if computeSystemsp == nil {
- return nil, ErrUnexpectedValue
- }
- computeSystemsRaw := convertAndFreeCoTaskMemBytes(computeSystemsp)
- computeSystems := []ContainerProperties{}
- if err := json.Unmarshal(computeSystemsRaw, &computeSystems); err != nil {
- return nil, err
- }
-
- logrus.Debugf(title + " succeeded")
- return computeSystems, nil
+ return hcs.GetComputeSystems(q)
}
// Start synchronously starts the container.
func (container *container) Start() error {
- container.handleLock.RLock()
- defer container.handleLock.RUnlock()
- operation := "Start"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s", container.id)
-
- if container.handle == 0 {
- return makeContainerError(container, operation, "", ErrAlreadyClosed)
- }
-
- var resultp *uint16
- err := hcsStartComputeSystem(container.handle, "", &resultp)
- err = processAsyncHcsResult(err, resultp, container.callbackNumber, hcsNotificationSystemStartCompleted, &defaultTimeout)
- if err != nil {
- return makeContainerError(container, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded id=%s", container.id)
- return nil
+ return convertSystemError(container.system.Start(), container)
}
-// Shutdown requests a container shutdown, if IsPending() on the error returned is true,
-// it may not actually be shut down until Wait() succeeds.
+// Shutdown requests a container shutdown, but it may not actually be shutdown until Wait() succeeds.
func (container *container) Shutdown() error {
- container.handleLock.RLock()
- defer container.handleLock.RUnlock()
- operation := "Shutdown"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s", container.id)
-
- if container.handle == 0 {
- return makeContainerError(container, operation, "", ErrAlreadyClosed)
- }
-
- var resultp *uint16
- err := hcsShutdownComputeSystem(container.handle, "", &resultp)
- err = processHcsResult(err, resultp)
- if err != nil {
- return makeContainerError(container, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded id=%s", container.id)
- return nil
+ return convertSystemError(container.system.Shutdown(), container)
}
-// Terminate requests a container terminate, if IsPending() on the error returned is true,
-// it may not actually be shut down until Wait() succeeds.
+// Terminate requests a container terminate, but it may not actually be terminated until Wait() succeeds.
func (container *container) Terminate() error {
- container.handleLock.RLock()
- defer container.handleLock.RUnlock()
- operation := "Terminate"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s", container.id)
-
- if container.handle == 0 {
- return makeContainerError(container, operation, "", ErrAlreadyClosed)
- }
-
- var resultp *uint16
- err := hcsTerminateComputeSystem(container.handle, "", &resultp)
- err = processHcsResult(err, resultp)
- if err != nil {
- return makeContainerError(container, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded id=%s", container.id)
- return nil
+ return convertSystemError(container.system.Terminate(), container)
}
-// Wait synchronously waits for the container to shutdown or terminate.
+// Waits synchronously waits for the container to shutdown or terminate.
func (container *container) Wait() error {
- operation := "Wait"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s", container.id)
-
- err := waitForNotification(container.callbackNumber, hcsNotificationSystemExited, nil)
- if err != nil {
- return makeContainerError(container, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded id=%s", container.id)
- return nil
+ return convertSystemError(container.system.Wait(), container)
}
-// WaitTimeout synchronously waits for the container to terminate or the duration to elapse.
-// If the timeout expires, IsTimeout(err) == true
-func (container *container) WaitTimeout(timeout time.Duration) error {
- operation := "WaitTimeout"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s", container.id)
-
- err := waitForNotification(container.callbackNumber, hcsNotificationSystemExited, &timeout)
- if err != nil {
- return makeContainerError(container, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded id=%s", container.id)
- return nil
+// WaitTimeout synchronously waits for the container to terminate or the duration to elapse. It
+// returns false if timeout occurs.
+func (container *container) WaitTimeout(t time.Duration) error {
+ return convertSystemError(container.system.WaitTimeout(t), container)
}
-func (container *container) properties(query string) (*ContainerProperties, error) {
- var (
- resultp *uint16
- propertiesp *uint16
- )
- err := hcsGetComputeSystemProperties(container.handle, query, &propertiesp, &resultp)
- err = processHcsResult(err, resultp)
- if err != nil {
- return nil, err
- }
+// Pause pauses the execution of a container.
+func (container *container) Pause() error {
+ return convertSystemError(container.system.Pause(), container)
+}
- if propertiesp == nil {
- return nil, ErrUnexpectedValue
- }
- propertiesRaw := convertAndFreeCoTaskMemBytes(propertiesp)
- properties := &ContainerProperties{}
- if err := json.Unmarshal(propertiesRaw, properties); err != nil {
- return nil, err
- }
- return properties, nil
+// Resume resumes the execution of a container.
+func (container *container) Resume() error {
+ return convertSystemError(container.system.Resume(), container)
}
// HasPendingUpdates returns true if the container has updates pending to install
func (container *container) HasPendingUpdates() (bool, error) {
- container.handleLock.RLock()
- defer container.handleLock.RUnlock()
- operation := "HasPendingUpdates"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s", container.id)
-
- if container.handle == 0 {
- return false, makeContainerError(container, operation, "", ErrAlreadyClosed)
- }
-
- properties, err := container.properties(pendingUpdatesQuery)
- if err != nil {
- return false, makeContainerError(container, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded id=%s", container.id)
- return properties.AreUpdatesPending, nil
+ return false, nil
}
-// Statistics returns statistics for the container
+// Statistics returns statistics for the container. This is a legacy v1 call
func (container *container) Statistics() (Statistics, error) {
- container.handleLock.RLock()
- defer container.handleLock.RUnlock()
- operation := "Statistics"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s", container.id)
-
- if container.handle == 0 {
- return Statistics{}, makeContainerError(container, operation, "", ErrAlreadyClosed)
- }
-
- properties, err := container.properties(statisticsQuery)
+ properties, err := container.system.Properties(schema1.PropertyTypeStatistics)
if err != nil {
- return Statistics{}, makeContainerError(container, operation, "", err)
+ return Statistics{}, convertSystemError(err, container)
}
- logrus.Debugf(title+" succeeded id=%s", container.id)
return properties.Statistics, nil
}
-// ProcessList returns an array of ProcessListItems for the container
+// ProcessList returns an array of ProcessListItems for the container. This is a legacy v1 call
func (container *container) ProcessList() ([]ProcessListItem, error) {
- container.handleLock.RLock()
- defer container.handleLock.RUnlock()
- operation := "ProcessList"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s", container.id)
-
- if container.handle == 0 {
- return nil, makeContainerError(container, operation, "", ErrAlreadyClosed)
- }
-
- properties, err := container.properties(processListQuery)
+ properties, err := container.system.Properties(schema1.PropertyTypeProcessList)
if err != nil {
- return nil, makeContainerError(container, operation, "", err)
+ return nil, convertSystemError(err, container)
}
- logrus.Debugf(title+" succeeded id=%s", container.id)
return properties.ProcessList, nil
}
-// MappedVirtualDisks returns a map of the controllers and the disks mapped
-// to a container.
-//
-// Example of JSON returned by the query.
-//{
-// "Id":"1126e8d7d279c707a666972a15976371d365eaf622c02cea2c442b84f6f550a3_svm",
-// "SystemType":"Container",
-// "RuntimeOsType":"Linux",
-// "RuntimeId":"00000000-0000-0000-0000-000000000000",
-// "State":"Running",
-// "MappedVirtualDiskControllers":{
-// "0":{
-// "MappedVirtualDisks":{
-// "2":{
-// "HostPath":"C:\\lcow\\lcow\\scratch\\1126e8d7d279c707a666972a15976371d365eaf622c02cea2c442b84f6f550a3.vhdx",
-// "ContainerPath":"/mnt/gcs/LinuxServiceVM/scratch",
-// "Lun":2,
-// "CreateInUtilityVM":true
-// },
-// "3":{
-// "HostPath":"C:\\lcow\\lcow\\1126e8d7d279c707a666972a15976371d365eaf622c02cea2c442b84f6f550a3\\sandbox.vhdx",
-// "Lun":3,
-// "CreateInUtilityVM":true,
-// "AttachOnly":true
-// }
-// }
-// }
-// }
-//}
+// This is a legacy v1 call
func (container *container) MappedVirtualDisks() (map[int]MappedVirtualDiskController, error) {
- container.handleLock.RLock()
- defer container.handleLock.RUnlock()
- operation := "MappedVirtualDiskList"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s", container.id)
-
- if container.handle == 0 {
- return nil, makeContainerError(container, operation, "", ErrAlreadyClosed)
- }
-
- properties, err := container.properties(mappedVirtualDiskQuery)
+ properties, err := container.system.Properties(schema1.PropertyTypeMappedVirtualDisk)
if err != nil {
- return nil, makeContainerError(container, operation, "", err)
+ return nil, convertSystemError(err, container)
}
- logrus.Debugf(title+" succeeded id=%s", container.id)
return properties.MappedVirtualDiskControllers, nil
}
-// Pause pauses the execution of the container. This feature is not enabled in TP5.
-func (container *container) Pause() error {
- container.handleLock.RLock()
- defer container.handleLock.RUnlock()
- operation := "Pause"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s", container.id)
-
- if container.handle == 0 {
- return makeContainerError(container, operation, "", ErrAlreadyClosed)
- }
-
- var resultp *uint16
- err := hcsPauseComputeSystem(container.handle, "", &resultp)
- err = processAsyncHcsResult(err, resultp, container.callbackNumber, hcsNotificationSystemPauseCompleted, &defaultTimeout)
- if err != nil {
- return makeContainerError(container, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded id=%s", container.id)
- return nil
-}
-
-// Resume resumes the execution of the container. This feature is not enabled in TP5.
-func (container *container) Resume() error {
- container.handleLock.RLock()
- defer container.handleLock.RUnlock()
- operation := "Resume"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s", container.id)
-
- if container.handle == 0 {
- return makeContainerError(container, operation, "", ErrAlreadyClosed)
- }
-
- var resultp *uint16
- err := hcsResumeComputeSystem(container.handle, "", &resultp)
- err = processAsyncHcsResult(err, resultp, container.callbackNumber, hcsNotificationSystemResumeCompleted, &defaultTimeout)
- if err != nil {
- return makeContainerError(container, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded id=%s", container.id)
- return nil
-}
-
// CreateProcess launches a new process within the container.
func (container *container) CreateProcess(c *ProcessConfig) (Process, error) {
- container.handleLock.RLock()
- defer container.handleLock.RUnlock()
- operation := "CreateProcess"
- title := "HCSShim::Container::" + operation
- var (
- processInfo hcsProcessInformation
- processHandle hcsProcess
- resultp *uint16
- )
-
- if container.handle == 0 {
- return nil, makeContainerError(container, operation, "", ErrAlreadyClosed)
- }
-
- // If we are not emulating a console, ignore any console size passed to us
- if !c.EmulateConsole {
- c.ConsoleSize[0] = 0
- c.ConsoleSize[1] = 0
- }
-
- configurationb, err := json.Marshal(c)
+ p, err := container.system.CreateProcess(c)
if err != nil {
- return nil, makeContainerError(container, operation, "", err)
+ return nil, convertSystemError(err, container)
}
-
- configuration := string(configurationb)
- logrus.Debugf(title+" id=%s config=%s", container.id, configuration)
-
- err = hcsCreateProcess(container.handle, configuration, &processInfo, &processHandle, &resultp)
- err = processHcsResult(err, resultp)
- if err != nil {
- return nil, makeContainerError(container, operation, configuration, err)
- }
-
- process := &process{
- handle: processHandle,
- processID: int(processInfo.ProcessId),
- container: container,
- cachedPipes: &cachedPipes{
- stdIn: processInfo.StdInput,
- stdOut: processInfo.StdOutput,
- stdErr: processInfo.StdError,
- },
- }
-
- if err := process.registerCallback(); err != nil {
- return nil, makeContainerError(container, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded id=%s processid=%d", container.id, process.processID)
- return process, nil
+ return &process{p}, nil
}
// OpenProcess gets an interface to an existing process within the container.
func (container *container) OpenProcess(pid int) (Process, error) {
- container.handleLock.RLock()
- defer container.handleLock.RUnlock()
- operation := "OpenProcess"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s, processid=%d", container.id, pid)
- var (
- processHandle hcsProcess
- resultp *uint16
- )
-
- if container.handle == 0 {
- return nil, makeContainerError(container, operation, "", ErrAlreadyClosed)
- }
-
- err := hcsOpenProcess(container.handle, uint32(pid), &processHandle, &resultp)
- err = processHcsResult(err, resultp)
+ p, err := container.system.OpenProcess(pid)
if err != nil {
- return nil, makeContainerError(container, operation, "", err)
+ return nil, convertSystemError(err, container)
}
-
- process := &process{
- handle: processHandle,
- processID: pid,
- container: container,
- }
-
- if err := process.registerCallback(); err != nil {
- return nil, makeContainerError(container, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded id=%s processid=%s", container.id, process.processID)
- return process, nil
+ return &process{p}, nil
}
// Close cleans up any state associated with the container but does not terminate or wait for it.
func (container *container) Close() error {
- container.handleLock.Lock()
- defer container.handleLock.Unlock()
- operation := "Close"
- title := "HCSShim::Container::" + operation
- logrus.Debugf(title+" id=%s", container.id)
-
- // Don't double free this
- if container.handle == 0 {
- return nil
- }
-
- if err := container.unregisterCallback(); err != nil {
- return makeContainerError(container, operation, "", err)
- }
-
- if err := hcsCloseComputeSystem(container.handle); err != nil {
- return makeContainerError(container, operation, "", err)
- }
-
- container.handle = 0
-
- logrus.Debugf(title+" succeeded id=%s", container.id)
- return nil
-}
-
-func (container *container) registerCallback() error {
- context := &notifcationWatcherContext{
- channels: newChannels(),
- }
-
- callbackMapLock.Lock()
- callbackNumber := nextCallback
- nextCallback++
- callbackMap[callbackNumber] = context
- callbackMapLock.Unlock()
-
- var callbackHandle hcsCallback
- err := hcsRegisterComputeSystemCallback(container.handle, notificationWatcherCallback, callbackNumber, &callbackHandle)
- if err != nil {
- return err
- }
- context.handle = callbackHandle
- container.callbackNumber = callbackNumber
-
- return nil
-}
-
-func (container *container) unregisterCallback() error {
- callbackNumber := container.callbackNumber
-
- callbackMapLock.RLock()
- context := callbackMap[callbackNumber]
- callbackMapLock.RUnlock()
-
- if context == nil {
- return nil
- }
-
- handle := context.handle
-
- if handle == 0 {
- return nil
- }
-
- // hcsUnregisterComputeSystemCallback has its own syncronization
- // to wait for all callbacks to complete. We must NOT hold the callbackMapLock.
- err := hcsUnregisterComputeSystemCallback(handle)
- if err != nil {
- return err
- }
-
- closeChannels(context.channels)
-
- callbackMapLock.Lock()
- callbackMap[callbackNumber] = nil
- callbackMapLock.Unlock()
-
- handle = 0
-
- return nil
+ return convertSystemError(container.system.Close(), container)
}
-// Modifies the System by sending a request to HCS
+// Modify the System
func (container *container) Modify(config *ResourceModificationRequestResponse) error {
- container.handleLock.RLock()
- defer container.handleLock.RUnlock()
- operation := "Modify"
- title := "HCSShim::Container::" + operation
-
- if container.handle == 0 {
- return makeContainerError(container, operation, "", ErrAlreadyClosed)
- }
-
- requestJSON, err := json.Marshal(config)
- if err != nil {
- return err
- }
-
- requestString := string(requestJSON)
- logrus.Debugf(title+" id=%s request=%s", container.id, requestString)
-
- var resultp *uint16
- err = hcsModifyComputeSystem(container.handle, requestString, &resultp)
- err = processHcsResult(err, resultp)
- if err != nil {
- return makeContainerError(container, operation, "", err)
- }
- logrus.Debugf(title+" succeeded id=%s", container.id)
- return nil
+ return convertSystemError(container.system.Modify(config), container)
}
diff --git a/vendor/github.com/Microsoft/hcsshim/createlayer.go b/vendor/github.com/Microsoft/hcsshim/createlayer.go
deleted file mode 100644
index 035d9c394..000000000
--- a/vendor/github.com/Microsoft/hcsshim/createlayer.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package hcsshim
-
-import "github.com/sirupsen/logrus"
-
-// CreateLayer creates a new, empty, read-only layer on the filesystem based on
-// the parent layer provided.
-func CreateLayer(info DriverInfo, id, parent string) error {
- title := "hcsshim::CreateLayer "
- logrus.Debugf(title+"Flavour %d ID %s parent %s", info.Flavour, id, parent)
-
- // Convert info to API calling convention
- infop, err := convertDriverInfo(info)
- if err != nil {
- logrus.Error(err)
- return err
- }
-
- err = createLayer(&infop, id, parent)
- if err != nil {
- err = makeErrorf(err, title, "id=%s parent=%s flavour=%d", id, parent, info.Flavour)
- logrus.Error(err)
- return err
- }
-
- logrus.Debugf(title+" - succeeded id=%s parent=%s flavour=%d", id, parent, info.Flavour)
- return nil
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/createsandboxlayer.go b/vendor/github.com/Microsoft/hcsshim/createsandboxlayer.go
deleted file mode 100644
index 7a6a8854c..000000000
--- a/vendor/github.com/Microsoft/hcsshim/createsandboxlayer.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package hcsshim
-
-import "github.com/sirupsen/logrus"
-
-// CreateSandboxLayer creates and populates new read-write layer for use by a container.
-// This requires both the id of the direct parent layer, as well as the full list
-// of paths to all parent layers up to the base (and including the direct parent
-// whose id was provided).
-func CreateSandboxLayer(info DriverInfo, layerId, parentId string, parentLayerPaths []string) error {
- title := "hcsshim::CreateSandboxLayer "
- logrus.Debugf(title+"layerId %s parentId %s", layerId, parentId)
-
- // Generate layer descriptors
- layers, err := layerPathsToDescriptors(parentLayerPaths)
- if err != nil {
- return err
- }
-
- // Convert info to API calling convention
- infop, err := convertDriverInfo(info)
- if err != nil {
- logrus.Error(err)
- return err
- }
-
- err = createSandboxLayer(&infop, layerId, parentId, layers)
- if err != nil {
- err = makeErrorf(err, title, "layerId=%s parentId=%s", layerId, parentId)
- logrus.Error(err)
- return err
- }
-
- logrus.Debugf(title+"- succeeded layerId=%s parentId=%s", layerId, parentId)
- return nil
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/deactivatelayer.go b/vendor/github.com/Microsoft/hcsshim/deactivatelayer.go
deleted file mode 100644
index fd785030f..000000000
--- a/vendor/github.com/Microsoft/hcsshim/deactivatelayer.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package hcsshim
-
-import "github.com/sirupsen/logrus"
-
-// DeactivateLayer will dismount a layer that was mounted via ActivateLayer.
-func DeactivateLayer(info DriverInfo, id string) error {
- title := "hcsshim::DeactivateLayer "
- logrus.Debugf(title+"Flavour %d ID %s", info.Flavour, id)
-
- // Convert info to API calling convention
- infop, err := convertDriverInfo(info)
- if err != nil {
- logrus.Error(err)
- return err
- }
-
- err = deactivateLayer(&infop, id)
- if err != nil {
- err = makeErrorf(err, title, "id=%s flavour=%d", id, info.Flavour)
- logrus.Error(err)
- return err
- }
-
- logrus.Debugf(title+"succeeded flavour=%d id=%s", info.Flavour, id)
- return nil
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/destroylayer.go b/vendor/github.com/Microsoft/hcsshim/destroylayer.go
deleted file mode 100644
index b1e3b89fc..000000000
--- a/vendor/github.com/Microsoft/hcsshim/destroylayer.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package hcsshim
-
-import "github.com/sirupsen/logrus"
-
-// DestroyLayer will remove the on-disk files representing the layer with the given
-// id, including that layer's containing folder, if any.
-func DestroyLayer(info DriverInfo, id string) error {
- title := "hcsshim::DestroyLayer "
- logrus.Debugf(title+"Flavour %d ID %s", info.Flavour, id)
-
- // Convert info to API calling convention
- infop, err := convertDriverInfo(info)
- if err != nil {
- logrus.Error(err)
- return err
- }
-
- err = destroyLayer(&infop, id)
- if err != nil {
- err = makeErrorf(err, title, "id=%s flavour=%d", id, info.Flavour)
- logrus.Error(err)
- return err
- }
-
- logrus.Debugf(title+"succeeded flavour=%d id=%s", info.Flavour, id)
- return nil
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/errors.go b/vendor/github.com/Microsoft/hcsshim/errors.go
index d2f9cc8bd..63efa23c7 100644
--- a/vendor/github.com/Microsoft/hcsshim/errors.go
+++ b/vendor/github.com/Microsoft/hcsshim/errors.go
@@ -1,83 +1,91 @@
package hcsshim
import (
- "errors"
"fmt"
"syscall"
+
+ "github.com/Microsoft/hcsshim/internal/hns"
+
+ "github.com/Microsoft/hcsshim/internal/hcs"
+ "github.com/Microsoft/hcsshim/internal/hcserror"
)
var (
- // ErrComputeSystemDoesNotExist is an error encountered when the container being operated on no longer exists
- ErrComputeSystemDoesNotExist = syscall.Errno(0xc037010e)
+ // ErrComputeSystemDoesNotExist is an error encountered when the container being operated on no longer exists = hcs.exist
+ ErrComputeSystemDoesNotExist = hcs.ErrComputeSystemDoesNotExist
// ErrElementNotFound is an error encountered when the object being referenced does not exist
- ErrElementNotFound = syscall.Errno(0x490)
+ ErrElementNotFound = hcs.ErrElementNotFound
// ErrElementNotFound is an error encountered when the object being referenced does not exist
- ErrNotSupported = syscall.Errno(0x32)
+ ErrNotSupported = hcs.ErrNotSupported
// ErrInvalidData is an error encountered when the request being sent to hcs is invalid/unsupported
// decimal -2147024883 / hex 0x8007000d
- ErrInvalidData = syscall.Errno(0xd)
+ ErrInvalidData = hcs.ErrInvalidData
// ErrHandleClose is an error encountered when the handle generating the notification being waited on has been closed
- ErrHandleClose = errors.New("hcsshim: the handle generating this notification has been closed")
+ ErrHandleClose = hcs.ErrHandleClose
// ErrAlreadyClosed is an error encountered when using a handle that has been closed by the Close method
- ErrAlreadyClosed = errors.New("hcsshim: the handle has already been closed")
+ ErrAlreadyClosed = hcs.ErrAlreadyClosed
// ErrInvalidNotificationType is an error encountered when an invalid notification type is used
- ErrInvalidNotificationType = errors.New("hcsshim: invalid notification type")
+ ErrInvalidNotificationType = hcs.ErrInvalidNotificationType
// ErrInvalidProcessState is an error encountered when the process is not in a valid state for the requested operation
- ErrInvalidProcessState = errors.New("the process is in an invalid state for the attempted operation")
+ ErrInvalidProcessState = hcs.ErrInvalidProcessState
// ErrTimeout is an error encountered when waiting on a notification times out
- ErrTimeout = errors.New("hcsshim: timeout waiting for notification")
+ ErrTimeout = hcs.ErrTimeout
// ErrUnexpectedContainerExit is the error encountered when a container exits while waiting for
// a different expected notification
- ErrUnexpectedContainerExit = errors.New("unexpected container exit")
+ ErrUnexpectedContainerExit = hcs.ErrUnexpectedContainerExit
// ErrUnexpectedProcessAbort is the error encountered when communication with the compute service
// is lost while waiting for a notification
- ErrUnexpectedProcessAbort = errors.New("lost communication with compute service")
+ ErrUnexpectedProcessAbort = hcs.ErrUnexpectedProcessAbort
// ErrUnexpectedValue is an error encountered when hcs returns an invalid value
- ErrUnexpectedValue = errors.New("unexpected value returned from hcs")
+ ErrUnexpectedValue = hcs.ErrUnexpectedValue
// ErrVmcomputeAlreadyStopped is an error encountered when a shutdown or terminate request is made on a stopped container
- ErrVmcomputeAlreadyStopped = syscall.Errno(0xc0370110)
+ ErrVmcomputeAlreadyStopped = hcs.ErrVmcomputeAlreadyStopped
// ErrVmcomputeOperationPending is an error encountered when the operation is being completed asynchronously
- ErrVmcomputeOperationPending = syscall.Errno(0xC0370103)
+ ErrVmcomputeOperationPending = hcs.ErrVmcomputeOperationPending
// ErrVmcomputeOperationInvalidState is an error encountered when the compute system is not in a valid state for the requested operation
- ErrVmcomputeOperationInvalidState = syscall.Errno(0xc0370105)
+ ErrVmcomputeOperationInvalidState = hcs.ErrVmcomputeOperationInvalidState
// ErrProcNotFound is an error encountered when the the process cannot be found
- ErrProcNotFound = syscall.Errno(0x7f)
+ ErrProcNotFound = hcs.ErrProcNotFound
// ErrVmcomputeOperationAccessIsDenied is an error which can be encountered when enumerating compute systems in RS1/RS2
// builds when the underlying silo might be in the process of terminating. HCS was fixed in RS3.
- ErrVmcomputeOperationAccessIsDenied = syscall.Errno(0x5)
+ ErrVmcomputeOperationAccessIsDenied = hcs.ErrVmcomputeOperationAccessIsDenied
// ErrVmcomputeInvalidJSON is an error encountered when the compute system does not support/understand the messages sent by management
- ErrVmcomputeInvalidJSON = syscall.Errno(0xc037010d)
+ ErrVmcomputeInvalidJSON = hcs.ErrVmcomputeInvalidJSON
// ErrVmcomputeUnknownMessage is an error encountered guest compute system doesn't support the message
- ErrVmcomputeUnknownMessage = syscall.Errno(0xc037010b)
+ ErrVmcomputeUnknownMessage = hcs.ErrVmcomputeUnknownMessage
// ErrNotSupported is an error encountered when hcs doesn't support the request
- ErrPlatformNotSupported = errors.New("unsupported platform request")
+ ErrPlatformNotSupported = hcs.ErrPlatformNotSupported
)
+type EndpointNotFoundError = hns.EndpointNotFoundError
+type NetworkNotFoundError = hns.NetworkNotFoundError
+
// ProcessError is an error encountered in HCS during an operation on a Process object
type ProcessError struct {
Process *process
Operation string
ExtraInfo string
Err error
+ Events []hcs.ErrorEvent
}
// ContainerError is an error encountered in HCS during an operation on a Container object
@@ -86,6 +94,7 @@ type ContainerError struct {
Operation string
ExtraInfo string
Err error
+ Events []hcs.ErrorEvent
}
func (e *ContainerError) Error() string {
@@ -97,7 +106,7 @@ func (e *ContainerError) Error() string {
return "unexpected nil container for error: " + e.Err.Error()
}
- s := "container " + e.Container.id
+ s := "container " + e.Container.system.ID()
if e.Operation != "" {
s += " encountered an error during " + e.Operation
@@ -107,11 +116,15 @@ func (e *ContainerError) Error() string {
case nil:
break
case syscall.Errno:
- s += fmt.Sprintf(": failure in a Windows system call: %s (0x%x)", e.Err, win32FromError(e.Err))
+ s += fmt.Sprintf(": failure in a Windows system call: %s (0x%x)", e.Err, hcserror.Win32FromError(e.Err))
default:
s += fmt.Sprintf(": %s", e.Err.Error())
}
+ for _, ev := range e.Events {
+ s += "\n" + ev.String()
+ }
+
if e.ExtraInfo != "" {
s += " extra info: " + e.ExtraInfo
}
@@ -137,12 +150,7 @@ func (e *ProcessError) Error() string {
return "Unexpected nil process for error: " + e.Err.Error()
}
- s := fmt.Sprintf("process %d", e.Process.processID)
-
- if e.Process.container != nil {
- s += " in container " + e.Process.container.id
- }
-
+ s := fmt.Sprintf("process %d in container %s", e.Process.p.Pid(), e.Process.p.SystemID())
if e.Operation != "" {
s += " encountered an error during " + e.Operation
}
@@ -151,11 +159,15 @@ func (e *ProcessError) Error() string {
case nil:
break
case syscall.Errno:
- s += fmt.Sprintf(": failure in a Windows system call: %s (0x%x)", e.Err, win32FromError(e.Err))
+ s += fmt.Sprintf(": failure in a Windows system call: %s (0x%x)", e.Err, hcserror.Win32FromError(e.Err))
default:
s += fmt.Sprintf(": %s", e.Err.Error())
}
+ for _, ev := range e.Events {
+ s += "\n" + ev.String()
+ }
+
return s
}
@@ -173,31 +185,31 @@ func makeProcessError(process *process, operation string, extraInfo string, err
// already exited, or does not exist. Both IsAlreadyStopped and IsNotExist
// will currently return true when the error is ErrElementNotFound or ErrProcNotFound.
func IsNotExist(err error) bool {
- err = getInnerError(err)
- return err == ErrComputeSystemDoesNotExist ||
- err == ErrElementNotFound ||
- err == ErrProcNotFound
+ if _, ok := err.(EndpointNotFoundError); ok {
+ return true
+ }
+ if _, ok := err.(NetworkNotFoundError); ok {
+ return true
+ }
+ return hcs.IsNotExist(getInnerError(err))
}
// IsAlreadyClosed checks if an error is caused by the Container or Process having been
// already closed by a call to the Close() method.
func IsAlreadyClosed(err error) bool {
- err = getInnerError(err)
- return err == ErrAlreadyClosed
+ return hcs.IsAlreadyClosed(getInnerError(err))
}
// IsPending returns a boolean indicating whether the error is that
// the requested operation is being completed in the background.
func IsPending(err error) bool {
- err = getInnerError(err)
- return err == ErrVmcomputeOperationPending
+ return hcs.IsPending(getInnerError(err))
}
// IsTimeout returns a boolean indicating whether the error is caused by
// a timeout waiting for the operation to complete.
func IsTimeout(err error) bool {
- err = getInnerError(err)
- return err == ErrTimeout
+ return hcs.IsTimeout(getInnerError(err))
}
// IsAlreadyStopped returns a boolean indicating whether the error is caused by
@@ -206,10 +218,7 @@ func IsTimeout(err error) bool {
// already exited, or does not exist. Both IsAlreadyStopped and IsNotExist
// will currently return true when the error is ErrElementNotFound or ErrProcNotFound.
func IsAlreadyStopped(err error) bool {
- err = getInnerError(err)
- return err == ErrVmcomputeAlreadyStopped ||
- err == ErrElementNotFound ||
- err == ErrProcNotFound
+ return hcs.IsAlreadyStopped(getInnerError(err))
}
// IsNotSupported returns a boolean indicating whether the error is caused by
@@ -218,12 +227,7 @@ func IsAlreadyStopped(err error) bool {
// ErrVmcomputeInvalidJSON, ErrInvalidData, ErrNotSupported or ErrVmcomputeUnknownMessage
// is thrown from the Platform
func IsNotSupported(err error) bool {
- err = getInnerError(err)
- // If Platform doesn't recognize or support the request sent, below errors are seen
- return err == ErrVmcomputeInvalidJSON ||
- err == ErrInvalidData ||
- err == ErrNotSupported ||
- err == ErrVmcomputeUnknownMessage
+ return hcs.IsNotSupported(getInnerError(err))
}
func getInnerError(err error) error {
@@ -237,3 +241,17 @@ func getInnerError(err error) error {
}
return err
}
+
+func convertSystemError(err error, c *container) error {
+ if serr, ok := err.(*hcs.SystemError); ok {
+ return &ContainerError{Container: c, Operation: serr.Op, ExtraInfo: serr.Extra, Err: serr.Err, Events: serr.Events}
+ }
+ return err
+}
+
+func convertProcessError(err error, p *process) error {
+ if perr, ok := err.(*hcs.ProcessError); ok {
+ return &ProcessError{Process: p, Operation: perr.Op, Err: perr.Err, Events: perr.Events}
+ }
+ return err
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/expandsandboxsize.go b/vendor/github.com/Microsoft/hcsshim/expandsandboxsize.go
deleted file mode 100644
index 6946c6a84..000000000
--- a/vendor/github.com/Microsoft/hcsshim/expandsandboxsize.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package hcsshim
-
-import "github.com/sirupsen/logrus"
-
-// ExpandSandboxSize expands the size of a layer to at least size bytes.
-func ExpandSandboxSize(info DriverInfo, layerId string, size uint64) error {
- title := "hcsshim::ExpandSandboxSize "
- logrus.Debugf(title+"layerId=%s size=%d", layerId, size)
-
- // Convert info to API calling convention
- infop, err := convertDriverInfo(info)
- if err != nil {
- logrus.Error(err)
- return err
- }
-
- err = expandSandboxSize(&infop, layerId, size)
- if err != nil {
- err = makeErrorf(err, title, "layerId=%s size=%d", layerId, size)
- logrus.Error(err)
- return err
- }
-
- logrus.Debugf(title+"- succeeded layerId=%s size=%d", layerId, size)
- return nil
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/exportlayer.go b/vendor/github.com/Microsoft/hcsshim/exportlayer.go
deleted file mode 100644
index d7025f20b..000000000
--- a/vendor/github.com/Microsoft/hcsshim/exportlayer.go
+++ /dev/null
@@ -1,156 +0,0 @@
-package hcsshim
-
-import (
- "io"
- "io/ioutil"
- "os"
- "syscall"
-
- "github.com/Microsoft/go-winio"
- "github.com/sirupsen/logrus"
-)
-
-// ExportLayer will create a folder at exportFolderPath and fill that folder with
-// the transport format version of the layer identified by layerId. This transport
-// format includes any metadata required for later importing the layer (using
-// ImportLayer), and requires the full list of parent layer paths in order to
-// perform the export.
-func ExportLayer(info DriverInfo, layerId string, exportFolderPath string, parentLayerPaths []string) error {
- title := "hcsshim::ExportLayer "
- logrus.Debugf(title+"flavour %d layerId %s folder %s", info.Flavour, layerId, exportFolderPath)
-
- // Generate layer descriptors
- layers, err := layerPathsToDescriptors(parentLayerPaths)
- if err != nil {
- return err
- }
-
- // Convert info to API calling convention
- infop, err := convertDriverInfo(info)
- if err != nil {
- logrus.Error(err)
- return err
- }
-
- err = exportLayer(&infop, layerId, exportFolderPath, layers)
- if err != nil {
- err = makeErrorf(err, title, "layerId=%s flavour=%d folder=%s", layerId, info.Flavour, exportFolderPath)
- logrus.Error(err)
- return err
- }
-
- logrus.Debugf(title+"succeeded flavour=%d layerId=%s folder=%s", info.Flavour, layerId, exportFolderPath)
- return nil
-}
-
-type LayerReader interface {
- Next() (string, int64, *winio.FileBasicInfo, error)
- Read(b []byte) (int, error)
- Close() error
-}
-
-// FilterLayerReader provides an interface for extracting the contents of an on-disk layer.
-type FilterLayerReader struct {
- context uintptr
-}
-
-// Next reads the next available file from a layer, ensuring that parent directories are always read
-// before child files and directories.
-//
-// Next returns the file's relative path, size, and basic file metadata. Read() should be used to
-// extract a Win32 backup stream with the remainder of the metadata and the data.
-func (r *FilterLayerReader) Next() (string, int64, *winio.FileBasicInfo, error) {
- var fileNamep *uint16
- fileInfo := &winio.FileBasicInfo{}
- var deleted uint32
- var fileSize int64
- err := exportLayerNext(r.context, &fileNamep, fileInfo, &fileSize, &deleted)
- if err != nil {
- if err == syscall.ERROR_NO_MORE_FILES {
- err = io.EOF
- } else {
- err = makeError(err, "ExportLayerNext", "")
- }
- return "", 0, nil, err
- }
- fileName := convertAndFreeCoTaskMemString(fileNamep)
- if deleted != 0 {
- fileInfo = nil
- }
- if fileName[0] == '\\' {
- fileName = fileName[1:]
- }
- return fileName, fileSize, fileInfo, nil
-}
-
-// Read reads from the current file's Win32 backup stream.
-func (r *FilterLayerReader) Read(b []byte) (int, error) {
- var bytesRead uint32
- err := exportLayerRead(r.context, b, &bytesRead)
- if err != nil {
- return 0, makeError(err, "ExportLayerRead", "")
- }
- if bytesRead == 0 {
- return 0, io.EOF
- }
- return int(bytesRead), nil
-}
-
-// Close frees resources associated with the layer reader. It will return an
-// error if there was an error while reading the layer or of the layer was not
-// completely read.
-func (r *FilterLayerReader) Close() (err error) {
- if r.context != 0 {
- err = exportLayerEnd(r.context)
- if err != nil {
- err = makeError(err, "ExportLayerEnd", "")
- }
- r.context = 0
- }
- return
-}
-
-// NewLayerReader returns a new layer reader for reading the contents of an on-disk layer.
-// The caller must have taken the SeBackupPrivilege privilege
-// to call this and any methods on the resulting LayerReader.
-func NewLayerReader(info DriverInfo, layerID string, parentLayerPaths []string) (LayerReader, error) {
- if procExportLayerBegin.Find() != nil {
- // The new layer reader is not available on this Windows build. Fall back to the
- // legacy export code path.
- path, err := ioutil.TempDir("", "hcs")
- if err != nil {
- return nil, err
- }
- err = ExportLayer(info, layerID, path, parentLayerPaths)
- if err != nil {
- os.RemoveAll(path)
- return nil, err
- }
- return &legacyLayerReaderWrapper{newLegacyLayerReader(path)}, nil
- }
-
- layers, err := layerPathsToDescriptors(parentLayerPaths)
- if err != nil {
- return nil, err
- }
- infop, err := convertDriverInfo(info)
- if err != nil {
- return nil, err
- }
- r := &FilterLayerReader{}
- err = exportLayerBegin(&infop, layerID, layers, &r.context)
- if err != nil {
- return nil, makeError(err, "ExportLayerBegin", "")
- }
- return r, err
-}
-
-type legacyLayerReaderWrapper struct {
- *legacyLayerReader
-}
-
-func (r *legacyLayerReaderWrapper) Close() error {
- err := r.legacyLayerReader.Close()
- os.RemoveAll(r.root)
- return err
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/guid.go b/vendor/github.com/Microsoft/hcsshim/guid.go
deleted file mode 100644
index 620aba123..000000000
--- a/vendor/github.com/Microsoft/hcsshim/guid.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package hcsshim
-
-import (
- "crypto/sha1"
- "fmt"
-)
-
-type GUID [16]byte
-
-func NewGUID(source string) *GUID {
- h := sha1.Sum([]byte(source))
- var g GUID
- copy(g[0:], h[0:16])
- return &g
-}
-
-func (g *GUID) ToString() string {
- return fmt.Sprintf("%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x-%02x", g[3], g[2], g[1], g[0], g[5], g[4], g[7], g[6], g[8:10], g[10:])
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/hcsshim.go b/vendor/github.com/Microsoft/hcsshim/hcsshim.go
index 236ba1fa3..ceb3ac85e 100644
--- a/vendor/github.com/Microsoft/hcsshim/hcsshim.go
+++ b/vendor/github.com/Microsoft/hcsshim/hcsshim.go
@@ -4,80 +4,20 @@
package hcsshim
import (
- "fmt"
"syscall"
- "unsafe"
- "github.com/sirupsen/logrus"
+ "github.com/Microsoft/hcsshim/internal/hcserror"
)
-//go:generate go run mksyscall_windows.go -output zhcsshim.go hcsshim.go
+//go:generate go run mksyscall_windows.go -output zsyscall_windows.go hcsshim.go
-//sys coTaskMemFree(buffer unsafe.Pointer) = ole32.CoTaskMemFree
//sys SetCurrentThreadCompartmentId(compartmentId uint32) (hr error) = iphlpapi.SetCurrentThreadCompartmentId
-//sys activateLayer(info *driverInfo, id string) (hr error) = vmcompute.ActivateLayer?
-//sys copyLayer(info *driverInfo, srcId string, dstId string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.CopyLayer?
-//sys createLayer(info *driverInfo, id string, parent string) (hr error) = vmcompute.CreateLayer?
-//sys createSandboxLayer(info *driverInfo, id string, parent string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.CreateSandboxLayer?
-//sys expandSandboxSize(info *driverInfo, id string, size uint64) (hr error) = vmcompute.ExpandSandboxSize?
-//sys deactivateLayer(info *driverInfo, id string) (hr error) = vmcompute.DeactivateLayer?
-//sys destroyLayer(info *driverInfo, id string) (hr error) = vmcompute.DestroyLayer?
-//sys exportLayer(info *driverInfo, id string, path string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.ExportLayer?
-//sys getLayerMountPath(info *driverInfo, id string, length *uintptr, buffer *uint16) (hr error) = vmcompute.GetLayerMountPath?
-//sys getBaseImages(buffer **uint16) (hr error) = vmcompute.GetBaseImages?
-//sys importLayer(info *driverInfo, id string, path string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.ImportLayer?
-//sys layerExists(info *driverInfo, id string, exists *uint32) (hr error) = vmcompute.LayerExists?
-//sys nameToGuid(name string, guid *GUID) (hr error) = vmcompute.NameToGuid?
-//sys prepareLayer(info *driverInfo, id string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.PrepareLayer?
-//sys unprepareLayer(info *driverInfo, id string) (hr error) = vmcompute.UnprepareLayer?
-//sys processBaseImage(path string) (hr error) = vmcompute.ProcessBaseImage?
-//sys processUtilityImage(path string) (hr error) = vmcompute.ProcessUtilityImage?
-
-//sys importLayerBegin(info *driverInfo, id string, descriptors []WC_LAYER_DESCRIPTOR, context *uintptr) (hr error) = vmcompute.ImportLayerBegin?
-//sys importLayerNext(context uintptr, fileName string, fileInfo *winio.FileBasicInfo) (hr error) = vmcompute.ImportLayerNext?
-//sys importLayerWrite(context uintptr, buffer []byte) (hr error) = vmcompute.ImportLayerWrite?
-//sys importLayerEnd(context uintptr) (hr error) = vmcompute.ImportLayerEnd?
-
-//sys exportLayerBegin(info *driverInfo, id string, descriptors []WC_LAYER_DESCRIPTOR, context *uintptr) (hr error) = vmcompute.ExportLayerBegin?
-//sys exportLayerNext(context uintptr, fileName **uint16, fileInfo *winio.FileBasicInfo, fileSize *int64, deleted *uint32) (hr error) = vmcompute.ExportLayerNext?
-//sys exportLayerRead(context uintptr, buffer []byte, bytesRead *uint32) (hr error) = vmcompute.ExportLayerRead?
-//sys exportLayerEnd(context uintptr) (hr error) = vmcompute.ExportLayerEnd?
-
-//sys hcsEnumerateComputeSystems(query string, computeSystems **uint16, result **uint16) (hr error) = vmcompute.HcsEnumerateComputeSystems?
-//sys hcsCreateComputeSystem(id string, configuration string, identity syscall.Handle, computeSystem *hcsSystem, result **uint16) (hr error) = vmcompute.HcsCreateComputeSystem?
-//sys hcsOpenComputeSystem(id string, computeSystem *hcsSystem, result **uint16) (hr error) = vmcompute.HcsOpenComputeSystem?
-//sys hcsCloseComputeSystem(computeSystem hcsSystem) (hr error) = vmcompute.HcsCloseComputeSystem?
-//sys hcsStartComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) = vmcompute.HcsStartComputeSystem?
-//sys hcsShutdownComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) = vmcompute.HcsShutdownComputeSystem?
-//sys hcsTerminateComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) = vmcompute.HcsTerminateComputeSystem?
-//sys hcsPauseComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) = vmcompute.HcsPauseComputeSystem?
-//sys hcsResumeComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) = vmcompute.HcsResumeComputeSystem?
-//sys hcsGetComputeSystemProperties(computeSystem hcsSystem, propertyQuery string, properties **uint16, result **uint16) (hr error) = vmcompute.HcsGetComputeSystemProperties?
-//sys hcsModifyComputeSystem(computeSystem hcsSystem, configuration string, result **uint16) (hr error) = vmcompute.HcsModifyComputeSystem?
-//sys hcsRegisterComputeSystemCallback(computeSystem hcsSystem, callback uintptr, context uintptr, callbackHandle *hcsCallback) (hr error) = vmcompute.HcsRegisterComputeSystemCallback?
-//sys hcsUnregisterComputeSystemCallback(callbackHandle hcsCallback) (hr error) = vmcompute.HcsUnregisterComputeSystemCallback?
-
-//sys hcsCreateProcess(computeSystem hcsSystem, processParameters string, processInformation *hcsProcessInformation, process *hcsProcess, result **uint16) (hr error) = vmcompute.HcsCreateProcess?
-//sys hcsOpenProcess(computeSystem hcsSystem, pid uint32, process *hcsProcess, result **uint16) (hr error) = vmcompute.HcsOpenProcess?
-//sys hcsCloseProcess(process hcsProcess) (hr error) = vmcompute.HcsCloseProcess?
-//sys hcsTerminateProcess(process hcsProcess, result **uint16) (hr error) = vmcompute.HcsTerminateProcess?
-//sys hcsGetProcessInfo(process hcsProcess, processInformation *hcsProcessInformation, result **uint16) (hr error) = vmcompute.HcsGetProcessInfo?
-//sys hcsGetProcessProperties(process hcsProcess, processProperties **uint16, result **uint16) (hr error) = vmcompute.HcsGetProcessProperties?
-//sys hcsModifyProcess(process hcsProcess, settings string, result **uint16) (hr error) = vmcompute.HcsModifyProcess?
-//sys hcsGetServiceProperties(propertyQuery string, properties **uint16, result **uint16) (hr error) = vmcompute.HcsGetServiceProperties?
-//sys hcsRegisterProcessCallback(process hcsProcess, callback uintptr, context uintptr, callbackHandle *hcsCallback) (hr error) = vmcompute.HcsRegisterProcessCallback?
-//sys hcsUnregisterProcessCallback(callbackHandle hcsCallback) (hr error) = vmcompute.HcsUnregisterProcessCallback?
-
-//sys hcsModifyServiceSettings(settings string, result **uint16) (hr error) = vmcompute.HcsModifyServiceSettings?
-
-//sys _hnsCall(method string, path string, object string, response **uint16) (hr error) = vmcompute.HNSCall?
-
const (
// Specific user-visible exit codes
WaitErrExecFailed = 32767
- ERROR_GEN_FAILURE = syscall.Errno(31)
+ ERROR_GEN_FAILURE = hcserror.ERROR_GEN_FAILURE
ERROR_SHUTDOWN_IN_PROGRESS = syscall.Errno(1115)
WSAEINVAL = syscall.Errno(10022)
@@ -85,82 +25,4 @@ const (
TimeoutInfinite = 0xFFFFFFFF
)
-type HcsError struct {
- title string
- rest string
- Err error
-}
-
-type hcsSystem syscall.Handle
-type hcsProcess syscall.Handle
-type hcsCallback syscall.Handle
-
-type hcsProcessInformation struct {
- ProcessId uint32
- Reserved uint32
- StdInput syscall.Handle
- StdOutput syscall.Handle
- StdError syscall.Handle
-}
-
-func makeError(err error, title, rest string) error {
- // Pass through DLL errors directly since they do not originate from HCS.
- if _, ok := err.(*syscall.DLLError); ok {
- return err
- }
- return &HcsError{title, rest, err}
-}
-
-func makeErrorf(err error, title, format string, a ...interface{}) error {
- return makeError(err, title, fmt.Sprintf(format, a...))
-}
-
-func win32FromError(err error) uint32 {
- if herr, ok := err.(*HcsError); ok {
- return win32FromError(herr.Err)
- }
- if code, ok := err.(syscall.Errno); ok {
- return uint32(code)
- }
- return uint32(ERROR_GEN_FAILURE)
-}
-
-func win32FromHresult(hr uintptr) uintptr {
- if hr&0x1fff0000 == 0x00070000 {
- return hr & 0xffff
- }
- return hr
-}
-
-func (e *HcsError) Error() string {
- s := e.title
- if len(s) > 0 && s[len(s)-1] != ' ' {
- s += " "
- }
- s += fmt.Sprintf("failed in Win32: %s (0x%x)", e.Err, win32FromError(e.Err))
- if e.rest != "" {
- if e.rest[0] != ' ' {
- s += " "
- }
- s += e.rest
- }
- return s
-}
-
-func convertAndFreeCoTaskMemString(buffer *uint16) string {
- str := syscall.UTF16ToString((*[1 << 30]uint16)(unsafe.Pointer(buffer))[:])
- coTaskMemFree(unsafe.Pointer(buffer))
- return str
-}
-
-func convertAndFreeCoTaskMemBytes(buffer *uint16) []byte {
- return []byte(convertAndFreeCoTaskMemString(buffer))
-}
-
-func processHcsResult(err error, resultp *uint16) error {
- if resultp != nil {
- result := convertAndFreeCoTaskMemString(resultp)
- logrus.Debugf("Result: %s", result)
- }
- return err
-}
+type HcsError = hcserror.HcsError
diff --git a/vendor/github.com/Microsoft/hcsshim/hnsendpoint.go b/vendor/github.com/Microsoft/hcsshim/hnsendpoint.go
index 92afc0c24..eb013d2c4 100644
--- a/vendor/github.com/Microsoft/hcsshim/hnsendpoint.go
+++ b/vendor/github.com/Microsoft/hcsshim/hnsendpoint.go
@@ -1,318 +1,94 @@
-package hcsshim
-
-import (
- "encoding/json"
- "fmt"
- "net"
-
- "github.com/sirupsen/logrus"
-)
-
-// HNSEndpoint represents a network endpoint in HNS
-type HNSEndpoint struct {
- Id string `json:"ID,omitempty"`
- Name string `json:",omitempty"`
- VirtualNetwork string `json:",omitempty"`
- VirtualNetworkName string `json:",omitempty"`
- Policies []json.RawMessage `json:",omitempty"`
- MacAddress string `json:",omitempty"`
- IPAddress net.IP `json:",omitempty"`
- DNSSuffix string `json:",omitempty"`
- DNSServerList string `json:",omitempty"`
- GatewayAddress string `json:",omitempty"`
- EnableInternalDNS bool `json:",omitempty"`
- DisableICC bool `json:",omitempty"`
- PrefixLength uint8 `json:",omitempty"`
- IsRemoteEndpoint bool `json:",omitempty"`
-}
-
-//SystemType represents the type of the system on which actions are done
-type SystemType string
-
-// SystemType const
-const (
- ContainerType SystemType = "Container"
- VirtualMachineType SystemType = "VirtualMachine"
- HostType SystemType = "Host"
-)
-
-// EndpointAttachDetachRequest is the structure used to send request to the container to modify the system
-// Supported resource types are Network and Request Types are Add/Remove
-type EndpointAttachDetachRequest struct {
- ContainerID string `json:"ContainerId,omitempty"`
- SystemType SystemType `json:"SystemType"`
- CompartmentID uint16 `json:"CompartmentId,omitempty"`
- VirtualNICName string `json:"VirtualNicName,omitempty"`
-}
-
-// EndpointResquestResponse is object to get the endpoint request response
-type EndpointResquestResponse struct {
- Success bool
- Error string
-}
-
-// HNSEndpointRequest makes a HNS call to modify/query a network endpoint
-func HNSEndpointRequest(method, path, request string) (*HNSEndpoint, error) {
- endpoint := &HNSEndpoint{}
- err := hnsCall(method, "/endpoints/"+path, request, &endpoint)
- if err != nil {
- return nil, err
- }
-
- return endpoint, nil
-}
-
-// HNSListEndpointRequest makes a HNS call to query the list of available endpoints
-func HNSListEndpointRequest() ([]HNSEndpoint, error) {
- var endpoint []HNSEndpoint
- err := hnsCall("GET", "/endpoints/", "", &endpoint)
- if err != nil {
- return nil, err
- }
-
- return endpoint, nil
-}
-
-// HotAttachEndpoint makes a HCS Call to attach the endpoint to the container
-func HotAttachEndpoint(containerID string, endpointID string) error {
- return modifyNetworkEndpoint(containerID, endpointID, Add)
-}
-
-// HotDetachEndpoint makes a HCS Call to detach the endpoint from the container
-func HotDetachEndpoint(containerID string, endpointID string) error {
- return modifyNetworkEndpoint(containerID, endpointID, Remove)
-}
-
-// ModifyContainer corresponding to the container id, by sending a request
-func modifyContainer(id string, request *ResourceModificationRequestResponse) error {
- container, err := OpenContainer(id)
- if err != nil {
- if IsNotExist(err) {
- return ErrComputeSystemDoesNotExist
- }
- return getInnerError(err)
- }
- defer container.Close()
- err = container.Modify(request)
- if err != nil {
- if IsNotSupported(err) {
- return ErrPlatformNotSupported
- }
- return getInnerError(err)
- }
-
- return nil
-}
-
-func modifyNetworkEndpoint(containerID string, endpointID string, request RequestType) error {
- requestMessage := &ResourceModificationRequestResponse{
- Resource: Network,
- Request: request,
- Data: endpointID,
- }
- err := modifyContainer(containerID, requestMessage)
-
- if err != nil {
- return err
- }
-
- return nil
-}
-
-// GetHNSEndpointByID get the Endpoint by ID
-func GetHNSEndpointByID(endpointID string) (*HNSEndpoint, error) {
- return HNSEndpointRequest("GET", endpointID, "")
-}
-
-// GetHNSEndpointByName gets the endpoint filtered by Name
-func GetHNSEndpointByName(endpointName string) (*HNSEndpoint, error) {
- hnsResponse, err := HNSListEndpointRequest()
- if err != nil {
- return nil, err
- }
- for _, hnsEndpoint := range hnsResponse {
- if hnsEndpoint.Name == endpointName {
- return &hnsEndpoint, nil
- }
- }
- return nil, fmt.Errorf("Endpoint %v not found", endpointName)
-}
-
-// Create Endpoint by sending EndpointRequest to HNS. TODO: Create a separate HNS interface to place all these methods
-func (endpoint *HNSEndpoint) Create() (*HNSEndpoint, error) {
- operation := "Create"
- title := "HCSShim::HNSEndpoint::" + operation
- logrus.Debugf(title+" id=%s", endpoint.Id)
-
- jsonString, err := json.Marshal(endpoint)
- if err != nil {
- return nil, err
- }
- return HNSEndpointRequest("POST", "", string(jsonString))
-}
-
-// Delete Endpoint by sending EndpointRequest to HNS
-func (endpoint *HNSEndpoint) Delete() (*HNSEndpoint, error) {
- operation := "Delete"
- title := "HCSShim::HNSEndpoint::" + operation
- logrus.Debugf(title+" id=%s", endpoint.Id)
-
- return HNSEndpointRequest("DELETE", endpoint.Id, "")
-}
-
-// Update Endpoint
-func (endpoint *HNSEndpoint) Update() (*HNSEndpoint, error) {
- operation := "Update"
- title := "HCSShim::HNSEndpoint::" + operation
- logrus.Debugf(title+" id=%s", endpoint.Id)
- jsonString, err := json.Marshal(endpoint)
- if err != nil {
- return nil, err
- }
- err = hnsCall("POST", "/endpoints/"+endpoint.Id, string(jsonString), &endpoint)
-
- return endpoint, err
-}
-
-// ContainerHotAttach attaches an endpoint to a running container
-func (endpoint *HNSEndpoint) ContainerHotAttach(containerID string) error {
- operation := "ContainerHotAttach"
- title := "HCSShim::HNSEndpoint::" + operation
- logrus.Debugf(title+" id=%s, containerId=%s", endpoint.Id, containerID)
-
- return modifyNetworkEndpoint(containerID, endpoint.Id, Add)
-}
-
-// ContainerHotDetach detaches an endpoint from a running container
-func (endpoint *HNSEndpoint) ContainerHotDetach(containerID string) error {
- operation := "ContainerHotDetach"
- title := "HCSShim::HNSEndpoint::" + operation
- logrus.Debugf(title+" id=%s, containerId=%s", endpoint.Id, containerID)
-
- return modifyNetworkEndpoint(containerID, endpoint.Id, Remove)
-}
-
-// ApplyACLPolicy applies Acl Policy on the Endpoint
-func (endpoint *HNSEndpoint) ApplyACLPolicy(policy *ACLPolicy) error {
- operation := "ApplyACLPolicy"
- title := "HCSShim::HNSEndpoint::" + operation
- logrus.Debugf(title+" id=%s", endpoint.Id)
-
- jsonString, err := json.Marshal(policy)
- if err != nil {
- return err
- }
- endpoint.Policies[0] = jsonString
- _, err = endpoint.Update()
- return err
-}
-
-// ContainerAttach attaches an endpoint to container
-func (endpoint *HNSEndpoint) ContainerAttach(containerID string, compartmentID uint16) error {
- operation := "ContainerAttach"
- title := "HCSShim::HNSEndpoint::" + operation
- logrus.Debugf(title+" id=%s", endpoint.Id)
-
- requestMessage := &EndpointAttachDetachRequest{
- ContainerID: containerID,
- CompartmentID: compartmentID,
- SystemType: ContainerType,
- }
- response := &EndpointResquestResponse{}
- jsonString, err := json.Marshal(requestMessage)
- if err != nil {
- return err
- }
- return hnsCall("POST", "/endpoints/"+endpoint.Id+"/attach", string(jsonString), &response)
-}
-
-// ContainerDetach detaches an endpoint from container
-func (endpoint *HNSEndpoint) ContainerDetach(containerID string) error {
- operation := "ContainerDetach"
- title := "HCSShim::HNSEndpoint::" + operation
- logrus.Debugf(title+" id=%s", endpoint.Id)
-
- requestMessage := &EndpointAttachDetachRequest{
- ContainerID: containerID,
- SystemType: ContainerType,
- }
- response := &EndpointResquestResponse{}
-
- jsonString, err := json.Marshal(requestMessage)
- if err != nil {
- return err
- }
- return hnsCall("POST", "/endpoints/"+endpoint.Id+"/detach", string(jsonString), &response)
-}
-
-// HostAttach attaches a nic on the host
-func (endpoint *HNSEndpoint) HostAttach(compartmentID uint16) error {
- operation := "HostAttach"
- title := "HCSShim::HNSEndpoint::" + operation
- logrus.Debugf(title+" id=%s", endpoint.Id)
- requestMessage := &EndpointAttachDetachRequest{
- CompartmentID: compartmentID,
- SystemType: HostType,
- }
- response := &EndpointResquestResponse{}
-
- jsonString, err := json.Marshal(requestMessage)
- if err != nil {
- return err
- }
- return hnsCall("POST", "/endpoints/"+endpoint.Id+"/attach", string(jsonString), &response)
-
-}
-
-// HostDetach detaches a nic on the host
-func (endpoint *HNSEndpoint) HostDetach() error {
- operation := "HostDetach"
- title := "HCSShim::HNSEndpoint::" + operation
- logrus.Debugf(title+" id=%s", endpoint.Id)
- requestMessage := &EndpointAttachDetachRequest{
- SystemType: HostType,
- }
- response := &EndpointResquestResponse{}
-
- jsonString, err := json.Marshal(requestMessage)
- if err != nil {
- return err
- }
- return hnsCall("POST", "/endpoints/"+endpoint.Id+"/detach", string(jsonString), &response)
-}
-
-// VirtualMachineNICAttach attaches a endpoint to a virtual machine
-func (endpoint *HNSEndpoint) VirtualMachineNICAttach(virtualMachineNICName string) error {
- operation := "VirtualMachineNicAttach"
- title := "HCSShim::HNSEndpoint::" + operation
- logrus.Debugf(title+" id=%s", endpoint.Id)
- requestMessage := &EndpointAttachDetachRequest{
- VirtualNICName: virtualMachineNICName,
- SystemType: VirtualMachineType,
- }
- response := &EndpointResquestResponse{}
-
- jsonString, err := json.Marshal(requestMessage)
- if err != nil {
- return err
- }
- return hnsCall("POST", "/endpoints/"+endpoint.Id+"/attach", string(jsonString), &response)
-}
-
-// VirtualMachineNICDetach detaches a endpoint from a virtual machine
-func (endpoint *HNSEndpoint) VirtualMachineNICDetach() error {
- operation := "VirtualMachineNicDetach"
- title := "HCSShim::HNSEndpoint::" + operation
- logrus.Debugf(title+" id=%s", endpoint.Id)
-
- requestMessage := &EndpointAttachDetachRequest{
- SystemType: VirtualMachineType,
- }
- response := &EndpointResquestResponse{}
-
- jsonString, err := json.Marshal(requestMessage)
- if err != nil {
- return err
- }
- return hnsCall("POST", "/endpoints/"+endpoint.Id+"/detach", string(jsonString), &response)
-}
+package hcsshim
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hns"
+)
+
+// HNSEndpoint represents a network endpoint in HNS
+type HNSEndpoint = hns.HNSEndpoint
+
+// Namespace represents a Compartment.
+type Namespace = hns.Namespace
+
+//SystemType represents the type of the system on which actions are done
+type SystemType string
+
+// SystemType const
+const (
+ ContainerType SystemType = "Container"
+ VirtualMachineType SystemType = "VirtualMachine"
+ HostType SystemType = "Host"
+)
+
+// EndpointAttachDetachRequest is the structure used to send request to the container to modify the system
+// Supported resource types are Network and Request Types are Add/Remove
+type EndpointAttachDetachRequest = hns.EndpointAttachDetachRequest
+
+// EndpointResquestResponse is object to get the endpoint request response
+type EndpointResquestResponse = hns.EndpointResquestResponse
+
+// HNSEndpointRequest makes a HNS call to modify/query a network endpoint
+func HNSEndpointRequest(method, path, request string) (*HNSEndpoint, error) {
+ return hns.HNSEndpointRequest(method, path, request)
+}
+
+// HNSListEndpointRequest makes a HNS call to query the list of available endpoints
+func HNSListEndpointRequest() ([]HNSEndpoint, error) {
+ return hns.HNSListEndpointRequest()
+}
+
+// HotAttachEndpoint makes a HCS Call to attach the endpoint to the container
+func HotAttachEndpoint(containerID string, endpointID string) error {
+ return modifyNetworkEndpoint(containerID, endpointID, Add)
+}
+
+// HotDetachEndpoint makes a HCS Call to detach the endpoint from the container
+func HotDetachEndpoint(containerID string, endpointID string) error {
+ return modifyNetworkEndpoint(containerID, endpointID, Remove)
+}
+
+// ModifyContainer corresponding to the container id, by sending a request
+func modifyContainer(id string, request *ResourceModificationRequestResponse) error {
+ container, err := OpenContainer(id)
+ if err != nil {
+ if IsNotExist(err) {
+ return ErrComputeSystemDoesNotExist
+ }
+ return getInnerError(err)
+ }
+ defer container.Close()
+ err = container.Modify(request)
+ if err != nil {
+ if IsNotSupported(err) {
+ return ErrPlatformNotSupported
+ }
+ return getInnerError(err)
+ }
+
+ return nil
+}
+
+func modifyNetworkEndpoint(containerID string, endpointID string, request RequestType) error {
+ requestMessage := &ResourceModificationRequestResponse{
+ Resource: Network,
+ Request: request,
+ Data: endpointID,
+ }
+ err := modifyContainer(containerID, requestMessage)
+
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// GetHNSEndpointByID get the Endpoint by ID
+func GetHNSEndpointByID(endpointID string) (*HNSEndpoint, error) {
+ return hns.GetHNSEndpointByID(endpointID)
+}
+
+// GetHNSEndpointByName gets the endpoint filtered by Name
+func GetHNSEndpointByName(endpointName string) (*HNSEndpoint, error) {
+ return hns.GetHNSEndpointByName(endpointName)
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/hnsglobals.go b/vendor/github.com/Microsoft/hcsshim/hnsglobals.go
new file mode 100644
index 000000000..2b5381904
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/hnsglobals.go
@@ -0,0 +1,16 @@
+package hcsshim
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hns"
+)
+
+type HNSGlobals = hns.HNSGlobals
+type HNSVersion = hns.HNSVersion
+
+var (
+ HNSVersion1803 = hns.HNSVersion1803
+)
+
+func GetHNSGlobals() (*HNSGlobals, error) {
+ return hns.GetHNSGlobals()
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/hnsnetwork.go b/vendor/github.com/Microsoft/hcsshim/hnsnetwork.go
index 3345bfa3f..f775fa1d0 100644
--- a/vendor/github.com/Microsoft/hcsshim/hnsnetwork.go
+++ b/vendor/github.com/Microsoft/hcsshim/hnsnetwork.go
@@ -1,142 +1,36 @@
-package hcsshim
-
-import (
- "encoding/json"
- "fmt"
- "net"
-
- "github.com/sirupsen/logrus"
-)
-
-// Subnet is assoicated with a network and represents a list
-// of subnets available to the network
-type Subnet struct {
- AddressPrefix string `json:",omitempty"`
- GatewayAddress string `json:",omitempty"`
- Policies []json.RawMessage `json:",omitempty"`
-}
-
-// MacPool is assoicated with a network and represents a list
-// of macaddresses available to the network
-type MacPool struct {
- StartMacAddress string `json:",omitempty"`
- EndMacAddress string `json:",omitempty"`
-}
-
-// HNSNetwork represents a network in HNS
-type HNSNetwork struct {
- Id string `json:"ID,omitempty"`
- Name string `json:",omitempty"`
- Type string `json:",omitempty"`
- NetworkAdapterName string `json:",omitempty"`
- SourceMac string `json:",omitempty"`
- Policies []json.RawMessage `json:",omitempty"`
- MacPools []MacPool `json:",omitempty"`
- Subnets []Subnet `json:",omitempty"`
- DNSSuffix string `json:",omitempty"`
- DNSServerList string `json:",omitempty"`
- DNSServerCompartment uint32 `json:",omitempty"`
- ManagementIP string `json:",omitempty"`
- AutomaticDNS bool `json:",omitempty"`
-}
-
-type hnsNetworkResponse struct {
- Success bool
- Error string
- Output HNSNetwork
-}
-
-type hnsResponse struct {
- Success bool
- Error string
- Output json.RawMessage
-}
-
-// HNSNetworkRequest makes a call into HNS to update/query a single network
-func HNSNetworkRequest(method, path, request string) (*HNSNetwork, error) {
- var network HNSNetwork
- err := hnsCall(method, "/networks/"+path, request, &network)
- if err != nil {
- return nil, err
- }
-
- return &network, nil
-}
-
-// HNSListNetworkRequest makes a HNS call to query the list of available networks
-func HNSListNetworkRequest(method, path, request string) ([]HNSNetwork, error) {
- var network []HNSNetwork
- err := hnsCall(method, "/networks/"+path, request, &network)
- if err != nil {
- return nil, err
- }
-
- return network, nil
-}
-
-// GetHNSNetworkByID
-func GetHNSNetworkByID(networkID string) (*HNSNetwork, error) {
- return HNSNetworkRequest("GET", networkID, "")
-}
-
-// GetHNSNetworkName filtered by Name
-func GetHNSNetworkByName(networkName string) (*HNSNetwork, error) {
- hsnnetworks, err := HNSListNetworkRequest("GET", "", "")
- if err != nil {
- return nil, err
- }
- for _, hnsnetwork := range hsnnetworks {
- if hnsnetwork.Name == networkName {
- return &hnsnetwork, nil
- }
- }
- return nil, fmt.Errorf("Network %v not found", networkName)
-}
-
-// Create Network by sending NetworkRequest to HNS.
-func (network *HNSNetwork) Create() (*HNSNetwork, error) {
- operation := "Create"
- title := "HCSShim::HNSNetwork::" + operation
- logrus.Debugf(title+" id=%s", network.Id)
-
- jsonString, err := json.Marshal(network)
- if err != nil {
- return nil, err
- }
- return HNSNetworkRequest("POST", "", string(jsonString))
-}
-
-// Delete Network by sending NetworkRequest to HNS
-func (network *HNSNetwork) Delete() (*HNSNetwork, error) {
- operation := "Delete"
- title := "HCSShim::HNSNetwork::" + operation
- logrus.Debugf(title+" id=%s", network.Id)
-
- return HNSNetworkRequest("DELETE", network.Id, "")
-}
-
-// Creates an endpoint on the Network.
-func (network *HNSNetwork) NewEndpoint(ipAddress net.IP, macAddress net.HardwareAddr) *HNSEndpoint {
- return &HNSEndpoint{
- VirtualNetwork: network.Id,
- IPAddress: ipAddress,
- MacAddress: string(macAddress),
- }
-}
-
-func (network *HNSNetwork) CreateEndpoint(endpoint *HNSEndpoint) (*HNSEndpoint, error) {
- operation := "CreateEndpoint"
- title := "HCSShim::HNSNetwork::" + operation
- logrus.Debugf(title+" id=%s, endpointId=%s", network.Id, endpoint.Id)
-
- endpoint.VirtualNetwork = network.Id
- return endpoint.Create()
-}
-
-func (network *HNSNetwork) CreateRemoteEndpoint(endpoint *HNSEndpoint) (*HNSEndpoint, error) {
- operation := "CreateRemoteEndpoint"
- title := "HCSShim::HNSNetwork::" + operation
- logrus.Debugf(title+" id=%s", network.Id)
- endpoint.IsRemoteEndpoint = true
- return network.CreateEndpoint(endpoint)
-}
+package hcsshim
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hns"
+)
+
+// Subnet is assoicated with a network and represents a list
+// of subnets available to the network
+type Subnet = hns.Subnet
+
+// MacPool is assoicated with a network and represents a list
+// of macaddresses available to the network
+type MacPool = hns.MacPool
+
+// HNSNetwork represents a network in HNS
+type HNSNetwork = hns.HNSNetwork
+
+// HNSNetworkRequest makes a call into HNS to update/query a single network
+func HNSNetworkRequest(method, path, request string) (*HNSNetwork, error) {
+ return hns.HNSNetworkRequest(method, path, request)
+}
+
+// HNSListNetworkRequest makes a HNS call to query the list of available networks
+func HNSListNetworkRequest(method, path, request string) ([]HNSNetwork, error) {
+ return hns.HNSListNetworkRequest(method, path, request)
+}
+
+// GetHNSNetworkByID
+func GetHNSNetworkByID(networkID string) (*HNSNetwork, error) {
+ return hns.GetHNSNetworkByID(networkID)
+}
+
+// GetHNSNetworkName filtered by Name
+func GetHNSNetworkByName(networkName string) (*HNSNetwork, error) {
+ return hns.GetHNSNetworkByName(networkName)
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/hnspolicy.go b/vendor/github.com/Microsoft/hcsshim/hnspolicy.go
index ecfbf0eda..a3e03ff8f 100644
--- a/vendor/github.com/Microsoft/hcsshim/hnspolicy.go
+++ b/vendor/github.com/Microsoft/hcsshim/hnspolicy.go
@@ -1,95 +1,57 @@
-package hcsshim
-
-// Type of Request Support in ModifySystem
-type PolicyType string
-
-// RequestType const
-const (
- Nat PolicyType = "NAT"
- ACL PolicyType = "ACL"
- PA PolicyType = "PA"
- VLAN PolicyType = "VLAN"
- VSID PolicyType = "VSID"
- VNet PolicyType = "VNET"
- L2Driver PolicyType = "L2Driver"
- Isolation PolicyType = "Isolation"
- QOS PolicyType = "QOS"
- OutboundNat PolicyType = "OutBoundNAT"
- ExternalLoadBalancer PolicyType = "ELB"
- Route PolicyType = "ROUTE"
-)
-
-type NatPolicy struct {
- Type PolicyType `json:"Type"`
- Protocol string
- InternalPort uint16
- ExternalPort uint16
-}
-
-type QosPolicy struct {
- Type PolicyType `json:"Type"`
- MaximumOutgoingBandwidthInBytes uint64
-}
-
-type IsolationPolicy struct {
- Type PolicyType `json:"Type"`
- VLAN uint
- VSID uint
- InDefaultIsolation bool
-}
-
-type VlanPolicy struct {
- Type PolicyType `json:"Type"`
- VLAN uint
-}
-
-type VsidPolicy struct {
- Type PolicyType `json:"Type"`
- VSID uint
-}
-
-type PaPolicy struct {
- Type PolicyType `json:"Type"`
- PA string `json:"PA"`
-}
-
-type OutboundNatPolicy struct {
- Policy
- VIP string `json:"VIP,omitempty"`
- Exceptions []string `json:"ExceptionList,omitempty"`
-}
-
-type ActionType string
-type DirectionType string
-type RuleType string
-
-const (
- Allow ActionType = "Allow"
- Block ActionType = "Block"
-
- In DirectionType = "In"
- Out DirectionType = "Out"
-
- Host RuleType = "Host"
- Switch RuleType = "Switch"
-)
-
-type ACLPolicy struct {
- Type PolicyType `json:"Type"`
- Protocol uint16
- InternalPort uint16
- Action ActionType
- Direction DirectionType
- LocalAddress string
- RemoteAddress string
- LocalPort uint16
- RemotePort uint16
- RuleType RuleType `json:"RuleType,omitempty"`
-
- Priority uint16
- ServiceName string
-}
-
-type Policy struct {
- Type PolicyType `json:"Type"`
-}
+package hcsshim
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hns"
+)
+
+// Type of Request Support in ModifySystem
+type PolicyType = hns.PolicyType
+
+// RequestType const
+const (
+ Nat = hns.Nat
+ ACL = hns.ACL
+ PA = hns.PA
+ VLAN = hns.VLAN
+ VSID = hns.VSID
+ VNet = hns.VNet
+ L2Driver = hns.L2Driver
+ Isolation = hns.Isolation
+ QOS = hns.QOS
+ OutboundNat = hns.OutboundNat
+ ExternalLoadBalancer = hns.ExternalLoadBalancer
+ Route = hns.Route
+)
+
+type NatPolicy = hns.NatPolicy
+
+type QosPolicy = hns.QosPolicy
+
+type IsolationPolicy = hns.IsolationPolicy
+
+type VlanPolicy = hns.VlanPolicy
+
+type VsidPolicy = hns.VsidPolicy
+
+type PaPolicy = hns.PaPolicy
+
+type OutboundNatPolicy = hns.OutboundNatPolicy
+
+type ActionType = hns.ActionType
+type DirectionType = hns.DirectionType
+type RuleType = hns.RuleType
+
+const (
+ Allow = hns.Allow
+ Block = hns.Block
+
+ In = hns.In
+ Out = hns.Out
+
+ Host = hns.Host
+ Switch = hns.Switch
+)
+
+type ACLPolicy = hns.ACLPolicy
+
+type Policy = hns.Policy
diff --git a/vendor/github.com/Microsoft/hcsshim/hnspolicylist.go b/vendor/github.com/Microsoft/hcsshim/hnspolicylist.go
index 15653b4f4..55aaa4a50 100644
--- a/vendor/github.com/Microsoft/hcsshim/hnspolicylist.go
+++ b/vendor/github.com/Microsoft/hcsshim/hnspolicylist.go
@@ -1,196 +1,47 @@
-package hcsshim
-
-import (
- "encoding/json"
-
- "github.com/sirupsen/logrus"
-)
-
-// RoutePolicy is a structure defining schema for Route based Policy
-type RoutePolicy struct {
- Policy
- DestinationPrefix string `json:"DestinationPrefix,omitempty"`
- NextHop string `json:"NextHop,omitempty"`
- EncapEnabled bool `json:"NeedEncap,omitempty"`
-}
-
-// ELBPolicy is a structure defining schema for ELB LoadBalancing based Policy
-type ELBPolicy struct {
- LBPolicy
- SourceVIP string `json:"SourceVIP,omitempty"`
- VIPs []string `json:"VIPs,omitempty"`
- ILB bool `json:"ILB,omitempty"`
-}
-
-// LBPolicy is a structure defining schema for LoadBalancing based Policy
-type LBPolicy struct {
- Policy
- Protocol uint16 `json:"Protocol,omitempty"`
- InternalPort uint16
- ExternalPort uint16
-}
-
-// PolicyList is a structure defining schema for Policy list request
-type PolicyList struct {
- ID string `json:"ID,omitempty"`
- EndpointReferences []string `json:"References,omitempty"`
- Policies []json.RawMessage `json:"Policies,omitempty"`
-}
-
-// HNSPolicyListRequest makes a call into HNS to update/query a single network
-func HNSPolicyListRequest(method, path, request string) (*PolicyList, error) {
- var policy PolicyList
- err := hnsCall(method, "/policylists/"+path, request, &policy)
- if err != nil {
- return nil, err
- }
-
- return &policy, nil
-}
-
-// HNSListPolicyListRequest gets all the policy list
-func HNSListPolicyListRequest() ([]PolicyList, error) {
- var plist []PolicyList
- err := hnsCall("GET", "/policylists/", "", &plist)
- if err != nil {
- return nil, err
- }
-
- return plist, nil
-}
-
-// PolicyListRequest makes a HNS call to modify/query a network policy list
-func PolicyListRequest(method, path, request string) (*PolicyList, error) {
- policylist := &PolicyList{}
- err := hnsCall(method, "/policylists/"+path, request, &policylist)
- if err != nil {
- return nil, err
- }
-
- return policylist, nil
-}
-
-// GetPolicyListByID get the policy list by ID
-func GetPolicyListByID(policyListID string) (*PolicyList, error) {
- return PolicyListRequest("GET", policyListID, "")
-}
-
-// Create PolicyList by sending PolicyListRequest to HNS.
-func (policylist *PolicyList) Create() (*PolicyList, error) {
- operation := "Create"
- title := "HCSShim::PolicyList::" + operation
- logrus.Debugf(title+" id=%s", policylist.ID)
- jsonString, err := json.Marshal(policylist)
- if err != nil {
- return nil, err
- }
- return PolicyListRequest("POST", "", string(jsonString))
-}
-
-// Delete deletes PolicyList
-func (policylist *PolicyList) Delete() (*PolicyList, error) {
- operation := "Delete"
- title := "HCSShim::PolicyList::" + operation
- logrus.Debugf(title+" id=%s", policylist.ID)
-
- return PolicyListRequest("DELETE", policylist.ID, "")
-}
-
-// AddEndpoint add an endpoint to a Policy List
-func (policylist *PolicyList) AddEndpoint(endpoint *HNSEndpoint) (*PolicyList, error) {
- operation := "AddEndpoint"
- title := "HCSShim::PolicyList::" + operation
- logrus.Debugf(title+" id=%s, endpointId:%s", policylist.ID, endpoint.Id)
-
- _, err := policylist.Delete()
- if err != nil {
- return nil, err
- }
-
- // Add Endpoint to the Existing List
- policylist.EndpointReferences = append(policylist.EndpointReferences, "/endpoints/"+endpoint.Id)
-
- return policylist.Create()
-}
-
-// RemoveEndpoint removes an endpoint from the Policy List
-func (policylist *PolicyList) RemoveEndpoint(endpoint *HNSEndpoint) (*PolicyList, error) {
- operation := "RemoveEndpoint"
- title := "HCSShim::PolicyList::" + operation
- logrus.Debugf(title+" id=%s, endpointId:%s", policylist.ID, endpoint.Id)
-
- _, err := policylist.Delete()
- if err != nil {
- return nil, err
- }
-
- elementToRemove := "/endpoints/" + endpoint.Id
-
- var references []string
-
- for _, endpointReference := range policylist.EndpointReferences {
- if endpointReference == elementToRemove {
- continue
- }
- references = append(references, endpointReference)
- }
- policylist.EndpointReferences = references
- return policylist.Create()
-}
-
-// AddLoadBalancer policy list for the specified endpoints
-func AddLoadBalancer(endpoints []HNSEndpoint, isILB bool, vip string, protocol uint16, internalPort uint16, externalPort uint16) (*PolicyList, error) {
- operation := "AddLoadBalancer"
- title := "HCSShim::PolicyList::" + operation
- logrus.Debugf(title+" Vip:%s", vip)
-
- policylist := &PolicyList{}
-
- elbPolicy := &ELBPolicy{
- VIPs: []string{vip},
- ILB: isILB,
- }
- elbPolicy.Type = ExternalLoadBalancer
- elbPolicy.Protocol = protocol
- elbPolicy.InternalPort = internalPort
- elbPolicy.ExternalPort = externalPort
-
- for _, endpoint := range endpoints {
- policylist.EndpointReferences = append(policylist.EndpointReferences, "/endpoints/"+endpoint.Id)
- }
-
- jsonString, err := json.Marshal(elbPolicy)
- if err != nil {
- return nil, err
- }
- policylist.Policies = append(policylist.Policies, jsonString)
- return policylist.Create()
-}
-
-// AddRoute adds route policy list for the specified endpoints
-func AddRoute(endpoints []HNSEndpoint, destinationPrefix string, nextHop string, encapEnabled bool) (*PolicyList, error) {
- operation := "AddRoute"
- title := "HCSShim::PolicyList::" + operation
- logrus.Debugf(title+" destinationPrefix:%s", destinationPrefix)
-
- policylist := &PolicyList{}
-
- rPolicy := &RoutePolicy{
- DestinationPrefix: destinationPrefix,
- NextHop: nextHop,
- EncapEnabled: encapEnabled,
- }
- rPolicy.Type = Route
-
- for _, endpoint := range endpoints {
- policylist.EndpointReferences = append(policylist.EndpointReferences, "/endpoints/"+endpoint.Id)
- }
-
- jsonString, err := json.Marshal(rPolicy)
- if err != nil {
- return nil, err
- }
-
- policylist.Policies = append(policylist.Policies, jsonString)
- return policylist.Create()
-}
+package hcsshim
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hns"
+)
+
+// RoutePolicy is a structure defining schema for Route based Policy
+type RoutePolicy = hns.RoutePolicy
+
+// ELBPolicy is a structure defining schema for ELB LoadBalancing based Policy
+type ELBPolicy = hns.ELBPolicy
+
+// LBPolicy is a structure defining schema for LoadBalancing based Policy
+type LBPolicy = hns.LBPolicy
+
+// PolicyList is a structure defining schema for Policy list request
+type PolicyList = hns.PolicyList
+
+// HNSPolicyListRequest makes a call into HNS to update/query a single network
+func HNSPolicyListRequest(method, path, request string) (*PolicyList, error) {
+ return hns.HNSPolicyListRequest(method, path, request)
+}
+
+// HNSListPolicyListRequest gets all the policy list
+func HNSListPolicyListRequest() ([]PolicyList, error) {
+ return hns.HNSListPolicyListRequest()
+}
+
+// PolicyListRequest makes a HNS call to modify/query a network policy list
+func PolicyListRequest(method, path, request string) (*PolicyList, error) {
+ return hns.PolicyListRequest(method, path, request)
+}
+
+// GetPolicyListByID get the policy list by ID
+func GetPolicyListByID(policyListID string) (*PolicyList, error) {
+ return hns.GetPolicyListByID(policyListID)
+}
+
+// AddLoadBalancer policy list for the specified endpoints
+func AddLoadBalancer(endpoints []HNSEndpoint, isILB bool, sourceVIP, vip string, protocol uint16, internalPort uint16, externalPort uint16) (*PolicyList, error) {
+ return hns.AddLoadBalancer(endpoints, isILB, sourceVIP, vip, protocol, internalPort, externalPort)
+}
+
+// AddRoute adds route policy list for the specified endpoints
+func AddRoute(endpoints []HNSEndpoint, destinationPrefix string, nextHop string, encapEnabled bool) (*PolicyList, error) {
+ return hns.AddRoute(endpoints, destinationPrefix, nextHop, encapEnabled)
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/hnssupport.go b/vendor/github.com/Microsoft/hcsshim/hnssupport.go
new file mode 100644
index 000000000..69405244b
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/hnssupport.go
@@ -0,0 +1,13 @@
+package hcsshim
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hns"
+)
+
+type HNSSupportedFeatures = hns.HNSSupportedFeatures
+
+type HNSAclFeatures = hns.HNSAclFeatures
+
+func GetHNSSupportedFeatures() HNSSupportedFeatures {
+ return hns.GetHNSSupportedFeatures()
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/importlayer.go b/vendor/github.com/Microsoft/hcsshim/importlayer.go
deleted file mode 100644
index 3aed14376..000000000
--- a/vendor/github.com/Microsoft/hcsshim/importlayer.go
+++ /dev/null
@@ -1,212 +0,0 @@
-package hcsshim
-
-import (
- "errors"
- "io/ioutil"
- "os"
- "path/filepath"
-
- "github.com/Microsoft/go-winio"
- "github.com/sirupsen/logrus"
-)
-
-// ImportLayer will take the contents of the folder at importFolderPath and import
-// that into a layer with the id layerId. Note that in order to correctly populate
-// the layer and interperet the transport format, all parent layers must already
-// be present on the system at the paths provided in parentLayerPaths.
-func ImportLayer(info DriverInfo, layerID string, importFolderPath string, parentLayerPaths []string) error {
- title := "hcsshim::ImportLayer "
- logrus.Debugf(title+"flavour %d layerId %s folder %s", info.Flavour, layerID, importFolderPath)
-
- // Generate layer descriptors
- layers, err := layerPathsToDescriptors(parentLayerPaths)
- if err != nil {
- return err
- }
-
- // Convert info to API calling convention
- infop, err := convertDriverInfo(info)
- if err != nil {
- logrus.Error(err)
- return err
- }
-
- err = importLayer(&infop, layerID, importFolderPath, layers)
- if err != nil {
- err = makeErrorf(err, title, "layerId=%s flavour=%d folder=%s", layerID, info.Flavour, importFolderPath)
- logrus.Error(err)
- return err
- }
-
- logrus.Debugf(title+"succeeded flavour=%d layerId=%s folder=%s", info.Flavour, layerID, importFolderPath)
- return nil
-}
-
-// LayerWriter is an interface that supports writing a new container image layer.
-type LayerWriter interface {
- // Add adds a file to the layer with given metadata.
- Add(name string, fileInfo *winio.FileBasicInfo) error
- // AddLink adds a hard link to the layer. The target must already have been added.
- AddLink(name string, target string) error
- // Remove removes a file that was present in a parent layer from the layer.
- Remove(name string) error
- // Write writes data to the current file. The data must be in the format of a Win32
- // backup stream.
- Write(b []byte) (int, error)
- // Close finishes the layer writing process and releases any resources.
- Close() error
-}
-
-// FilterLayerWriter provides an interface to write the contents of a layer to the file system.
-type FilterLayerWriter struct {
- context uintptr
-}
-
-// Add adds a file or directory to the layer. The file's parent directory must have already been added.
-//
-// name contains the file's relative path. fileInfo contains file times and file attributes; the rest
-// of the file metadata and the file data must be written as a Win32 backup stream to the Write() method.
-// winio.BackupStreamWriter can be used to facilitate this.
-func (w *FilterLayerWriter) Add(name string, fileInfo *winio.FileBasicInfo) error {
- if name[0] != '\\' {
- name = `\` + name
- }
- err := importLayerNext(w.context, name, fileInfo)
- if err != nil {
- return makeError(err, "ImportLayerNext", "")
- }
- return nil
-}
-
-// AddLink adds a hard link to the layer. The target of the link must have already been added.
-func (w *FilterLayerWriter) AddLink(name string, target string) error {
- return errors.New("hard links not yet supported")
-}
-
-// Remove removes a file from the layer. The file must have been present in the parent layer.
-//
-// name contains the file's relative path.
-func (w *FilterLayerWriter) Remove(name string) error {
- if name[0] != '\\' {
- name = `\` + name
- }
- err := importLayerNext(w.context, name, nil)
- if err != nil {
- return makeError(err, "ImportLayerNext", "")
- }
- return nil
-}
-
-// Write writes more backup stream data to the current file.
-func (w *FilterLayerWriter) Write(b []byte) (int, error) {
- err := importLayerWrite(w.context, b)
- if err != nil {
- err = makeError(err, "ImportLayerWrite", "")
- return 0, err
- }
- return len(b), err
-}
-
-// Close completes the layer write operation. The error must be checked to ensure that the
-// operation was successful.
-func (w *FilterLayerWriter) Close() (err error) {
- if w.context != 0 {
- err = importLayerEnd(w.context)
- if err != nil {
- err = makeError(err, "ImportLayerEnd", "")
- }
- w.context = 0
- }
- return
-}
-
-type legacyLayerWriterWrapper struct {
- *legacyLayerWriter
- info DriverInfo
- layerID string
- path string
- parentLayerPaths []string
-}
-
-func (r *legacyLayerWriterWrapper) Close() error {
- defer os.RemoveAll(r.root)
- err := r.legacyLayerWriter.Close()
- if err != nil {
- return err
- }
-
- // Use the original path here because ImportLayer does not support long paths for the source in TP5.
- // But do use a long path for the destination to work around another bug with directories
- // with MAX_PATH - 12 < length < MAX_PATH.
- info := r.info
- fullPath, err := makeLongAbsPath(filepath.Join(info.HomeDir, r.layerID))
- if err != nil {
- return err
- }
-
- info.HomeDir = ""
- if err = ImportLayer(info, fullPath, r.path, r.parentLayerPaths); err != nil {
- return err
- }
- // Add any hard links that were collected.
- for _, lnk := range r.PendingLinks {
- if err = os.Remove(lnk.Path); err != nil && !os.IsNotExist(err) {
- return err
- }
- if err = os.Link(lnk.Target, lnk.Path); err != nil {
- return err
- }
- }
- // Prepare the utility VM for use if one is present in the layer.
- if r.HasUtilityVM {
- err = ProcessUtilityVMImage(filepath.Join(fullPath, "UtilityVM"))
- if err != nil {
- return err
- }
- }
- return nil
-}
-
-// NewLayerWriter returns a new layer writer for creating a layer on disk.
-// The caller must have taken the SeBackupPrivilege and SeRestorePrivilege privileges
-// to call this and any methods on the resulting LayerWriter.
-func NewLayerWriter(info DriverInfo, layerID string, parentLayerPaths []string) (LayerWriter, error) {
- if len(parentLayerPaths) == 0 {
- // This is a base layer. It gets imported differently.
- return &baseLayerWriter{
- root: filepath.Join(info.HomeDir, layerID),
- }, nil
- }
-
- if procImportLayerBegin.Find() != nil {
- // The new layer reader is not available on this Windows build. Fall back to the
- // legacy export code path.
- path, err := ioutil.TempDir("", "hcs")
- if err != nil {
- return nil, err
- }
- return &legacyLayerWriterWrapper{
- legacyLayerWriter: newLegacyLayerWriter(path, parentLayerPaths, filepath.Join(info.HomeDir, layerID)),
- info: info,
- layerID: layerID,
- path: path,
- parentLayerPaths: parentLayerPaths,
- }, nil
- }
- layers, err := layerPathsToDescriptors(parentLayerPaths)
- if err != nil {
- return nil, err
- }
-
- infop, err := convertDriverInfo(info)
- if err != nil {
- return nil, err
- }
-
- w := &FilterLayerWriter{}
- err = importLayerBegin(&infop, layerID, layers, &w.context)
- if err != nil {
- return nil, makeError(err, "ImportLayerStart", "")
- }
- return w, nil
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/interface.go b/vendor/github.com/Microsoft/hcsshim/interface.go
index 9fc7852e4..5b91e0cc5 100644
--- a/vendor/github.com/Microsoft/hcsshim/interface.go
+++ b/vendor/github.com/Microsoft/hcsshim/interface.go
@@ -1,105 +1,32 @@
package hcsshim
import (
- "encoding/json"
"io"
"time"
+
+ "github.com/Microsoft/hcsshim/internal/schema1"
)
// ProcessConfig is used as both the input of Container.CreateProcess
// and to convert the parameters to JSON for passing onto the HCS
-type ProcessConfig struct {
- ApplicationName string `json:",omitempty"`
- CommandLine string `json:",omitempty"`
- CommandArgs []string `json:",omitempty"` // Used by Linux Containers on Windows
- User string `json:",omitempty"`
- WorkingDirectory string `json:",omitempty"`
- Environment map[string]string `json:",omitempty"`
- EmulateConsole bool `json:",omitempty"`
- CreateStdInPipe bool `json:",omitempty"`
- CreateStdOutPipe bool `json:",omitempty"`
- CreateStdErrPipe bool `json:",omitempty"`
- ConsoleSize [2]uint `json:",omitempty"`
- CreateInUtilityVm bool `json:",omitempty"` // Used by Linux Containers on Windows
- OCISpecification *json.RawMessage `json:",omitempty"` // Used by Linux Containers on Windows
-}
-
-type Layer struct {
- ID string
- Path string
-}
-
-type MappedDir struct {
- HostPath string
- ContainerPath string
- ReadOnly bool
- BandwidthMaximum uint64
- IOPSMaximum uint64
-}
+type ProcessConfig = schema1.ProcessConfig
-type MappedPipe struct {
- HostPath string
- ContainerPipeName string
-}
-
-type HvRuntime struct {
- ImagePath string `json:",omitempty"`
- SkipTemplate bool `json:",omitempty"`
- LinuxInitrdFile string `json:",omitempty"` // File under ImagePath on host containing an initrd image for starting a Linux utility VM
- LinuxKernelFile string `json:",omitempty"` // File under ImagePath on host containing a kernel for starting a Linux utility VM
- LinuxBootParameters string `json:",omitempty"` // Additional boot parameters for starting a Linux Utility VM in initrd mode
- BootSource string `json:",omitempty"` // "Vhd" for Linux Utility VM booting from VHD
- WritableBootSource bool `json:",omitempty"` // Linux Utility VM booting from VHD
-}
+type Layer = schema1.Layer
+type MappedDir = schema1.MappedDir
+type MappedPipe = schema1.MappedPipe
+type HvRuntime = schema1.HvRuntime
+type MappedVirtualDisk = schema1.MappedVirtualDisk
-type MappedVirtualDisk struct {
- HostPath string `json:",omitempty"` // Path to VHD on the host
- ContainerPath string // Platform-specific mount point path in the container
- CreateInUtilityVM bool `json:",omitempty"`
- ReadOnly bool `json:",omitempty"`
- Cache string `json:",omitempty"` // "" (Unspecified); "Disabled"; "Enabled"; "Private"; "PrivateAllowSharing"
- AttachOnly bool `json:",omitempty:`
-}
+// AssignedDevice represents a device that has been directly assigned to a container
+//
+// NOTE: Support added in RS5
+type AssignedDevice = schema1.AssignedDevice
// ContainerConfig is used as both the input of CreateContainer
// and to convert the parameters to JSON for passing onto the HCS
-type ContainerConfig struct {
- SystemType string // HCS requires this to be hard-coded to "Container"
- Name string // Name of the container. We use the docker ID.
- Owner string `json:",omitempty"` // The management platform that created this container
- VolumePath string `json:",omitempty"` // Windows volume path for scratch space. Used by Windows Server Containers only. Format \\?\\Volume{GUID}
- IgnoreFlushesDuringBoot bool `json:",omitempty"` // Optimization hint for container startup in Windows
- LayerFolderPath string `json:",omitempty"` // Where the layer folders are located. Used by Windows Server Containers only. Format %root%\windowsfilter\containerID
- Layers []Layer // List of storage layers. Required for Windows Server and Hyper-V Containers. Format ID=GUID;Path=%root%\windowsfilter\layerID
- Credentials string `json:",omitempty"` // Credentials information
- ProcessorCount uint32 `json:",omitempty"` // Number of processors to assign to the container.
- ProcessorWeight uint64 `json:",omitempty"` // CPU shares (relative weight to other containers with cpu shares). Range is from 1 to 10000. A value of 0 results in default shares.
- ProcessorMaximum int64 `json:",omitempty"` // Specifies the portion of processor cycles that this container can use as a percentage times 100. Range is from 1 to 10000. A value of 0 results in no limit.
- StorageIOPSMaximum uint64 `json:",omitempty"` // Maximum Storage IOPS
- StorageBandwidthMaximum uint64 `json:",omitempty"` // Maximum Storage Bandwidth in bytes per second
- StorageSandboxSize uint64 `json:",omitempty"` // Size in bytes that the container system drive should be expanded to if smaller
- MemoryMaximumInMB int64 `json:",omitempty"` // Maximum memory available to the container in Megabytes
- HostName string `json:",omitempty"` // Hostname
- MappedDirectories []MappedDir `json:",omitempty"` // List of mapped directories (volumes/mounts)
- MappedPipes []MappedPipe `json:",omitempty"` // List of mapped Windows named pipes
- HvPartition bool // True if it a Hyper-V Container
- NetworkSharedContainerName string `json:",omitempty"` // Name (ID) of the container that we will share the network stack with.
- EndpointList []string `json:",omitempty"` // List of networking endpoints to be attached to container
- HvRuntime *HvRuntime `json:",omitempty"` // Hyper-V container settings. Used by Hyper-V containers only. Format ImagePath=%root%\BaseLayerID\UtilityVM
- Servicing bool `json:",omitempty"` // True if this container is for servicing
- AllowUnqualifiedDNSQuery bool `json:",omitempty"` // True to allow unqualified DNS name resolution
- DNSSearchList string `json:",omitempty"` // Comma seperated list of DNS suffixes to use for name resolution
- ContainerType string `json:",omitempty"` // "Linux" for Linux containers on Windows. Omitted otherwise.
- TerminateOnLastHandleClosed bool `json:",omitempty"` // Should HCS terminate the container once all handles have been closed
- MappedVirtualDisks []MappedVirtualDisk `json:",omitempty"` // Array of virtual disks to mount at start
-}
+type ContainerConfig = schema1.ContainerConfig
-type ComputeSystemQuery struct {
- IDs []string `json:"Ids,omitempty"`
- Types []string `json:",omitempty"`
- Names []string `json:",omitempty"`
- Owners []string `json:",omitempty"`
-}
+type ComputeSystemQuery = schema1.ComputeSystemQuery
// Container represents a created (but not necessarily running) container.
type Container interface {
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/guestrequest/types.go b/vendor/github.com/Microsoft/hcsshim/internal/guestrequest/types.go
new file mode 100644
index 000000000..9f926c6be
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/guestrequest/types.go
@@ -0,0 +1,85 @@
+package guestrequest
+
+import "github.com/Microsoft/hcsshim/internal/schema2"
+
+// Arguably, many of these (at least CombinedLayers) should have been generated
+// by swagger.
+//
+// This will also change package name due to an inbound breaking change.
+
+// This class is used by a modify request to add or remove a combined layers
+// structure in the guest. For windows, the GCS applies a filter in ContainerRootPath
+// using the specified layers as the parent content. Ignores property ScratchPath
+// since the container path is already the scratch path. For linux, the GCS unions
+// the specified layers and ScratchPath together, placing the resulting union
+// filesystem at ContainerRootPath.
+type CombinedLayers struct {
+ ContainerRootPath string `json:"ContainerRootPath,omitempty"`
+ Layers []hcsschema.Layer `json:"Layers,omitempty"`
+ ScratchPath string `json:"ScratchPath,omitempty"`
+}
+
+// Defines the schema for hosted settings passed to GCS and/or OpenGCS
+
+// SCSI. Scratch space for remote file-system commands, or R/W layer for containers
+type LCOWMappedVirtualDisk struct {
+ MountPath string `json:"MountPath,omitempty"` // /tmp/scratch for an LCOW utility VM being used as a service VM
+ Lun uint8 `json:"Lun,omitempty"`
+ Controller uint8 `json:"Controller,omitempty"`
+ ReadOnly bool `json:"ReadOnly,omitempty"`
+}
+
+type WCOWMappedVirtualDisk struct {
+ ContainerPath string `json:"ContainerPath,omitempty"`
+ Lun int32 `json:"Lun,omitempty"`
+}
+
+type LCOWMappedDirectory struct {
+ MountPath string `json:"MountPath,omitempty"`
+ Port int32 `json:"Port,omitempty"`
+ ShareName string `json:"ShareName,omitempty"` // If empty not using ANames (not currently supported)
+ ReadOnly bool `json:"ReadOnly,omitempty"`
+}
+
+// Read-only layers over VPMem
+type LCOWMappedVPMemDevice struct {
+ DeviceNumber uint32 `json:"DeviceNumber,omitempty"`
+ MountPath string `json:"MountPath,omitempty"` // /tmp/pN
+}
+
+type ResourceType string
+
+const (
+ // These are constants for v2 schema modify guest requests.
+ ResourceTypeMappedDirectory ResourceType = "MappedDirectory"
+ ResourceTypeMappedVirtualDisk ResourceType = "MappedVirtualDisk"
+ ResourceTypeNetwork ResourceType = "Network"
+ ResourceTypeNetworkNamespace ResourceType = "NetworkNamespace"
+ ResourceTypeCombinedLayers ResourceType = "CombinedLayers"
+ ResourceTypeVPMemDevice ResourceType = "VPMemDevice"
+)
+
+// GuestRequest is for modify commands passed to the guest.
+type GuestRequest struct {
+ RequestType string `json:"RequestType,omitempty"`
+ ResourceType ResourceType `json:"ResourceType,omitempty"`
+ Settings interface{} `json:"Settings,omitempty"`
+}
+
+type NetworkModifyRequest struct {
+ AdapterId string `json:"AdapterId,omitempty"`
+ RequestType string `json:"RequestType,omitempty"`
+ Settings interface{} `json:"Settings,omitempty"`
+}
+
+type RS4NetworkModifyRequest struct {
+ AdapterInstanceId string `json:"AdapterInstanceId,omitempty"`
+ RequestType string `json:"RequestType,omitempty"`
+ Settings interface{} `json:"Settings,omitempty"`
+}
+
+// SignalProcessOptions is the options passed to either WCOW or LCOW
+// to signal a given process.
+type SignalProcessOptions struct {
+ Signal int `json:,omitempty`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/guid/guid.go b/vendor/github.com/Microsoft/hcsshim/internal/guid/guid.go
new file mode 100644
index 000000000..e9e45c030
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/guid/guid.go
@@ -0,0 +1,69 @@
+package guid
+
+import (
+ "crypto/rand"
+ "encoding/json"
+ "fmt"
+ "io"
+ "strconv"
+ "strings"
+)
+
+var _ = (json.Marshaler)(&GUID{})
+var _ = (json.Unmarshaler)(&GUID{})
+
+type GUID [16]byte
+
+func New() GUID {
+ g := GUID{}
+ _, err := io.ReadFull(rand.Reader, g[:])
+ if err != nil {
+ panic(err)
+ }
+ return g
+}
+
+func (g GUID) String() string {
+ return fmt.Sprintf("%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x-%02x", g[3], g[2], g[1], g[0], g[5], g[4], g[7], g[6], g[8:10], g[10:])
+}
+
+func FromString(s string) GUID {
+ if len(s) != 36 {
+ panic(fmt.Sprintf("invalid GUID length: %d", len(s)))
+ }
+ if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' {
+ panic("invalid GUID format")
+ }
+ indexOrder := [16]int{
+ 0, 2, 4, 6,
+ 9, 11,
+ 14, 16,
+ 19, 21,
+ 24, 26, 28, 30, 32, 34,
+ }
+ byteOrder := [16]int{
+ 3, 2, 1, 0,
+ 5, 4,
+ 7, 6,
+ 8, 9,
+ 10, 11, 12, 13, 14, 15,
+ }
+ var g GUID
+ for i, x := range indexOrder {
+ b, err := strconv.ParseInt(s[x:x+2], 16, 16)
+ if err != nil {
+ panic(err)
+ }
+ g[byteOrder[i]] = byte(b)
+ }
+ return g
+}
+
+func (g GUID) MarshalJSON() ([]byte, error) {
+ return json.Marshal(g.String())
+}
+
+func (g *GUID) UnmarshalJSON(data []byte) error {
+ *g = FromString(strings.Trim(string(data), "\""))
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/callback.go b/vendor/github.com/Microsoft/hcsshim/internal/hcs/callback.go
index e8c2b00c8..5119c2555 100644
--- a/vendor/github.com/Microsoft/hcsshim/callback.go
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hcs/callback.go
@@ -1,8 +1,11 @@
-package hcsshim
+package hcs
import (
"sync"
"syscall"
+
+ "github.com/Microsoft/hcsshim/internal/interop"
+ "github.com/sirupsen/logrus"
)
var (
@@ -62,7 +65,7 @@ func closeChannels(channels notificationChannels) {
func notificationWatcher(notificationType hcsNotification, callbackNumber uintptr, notificationStatus uintptr, notificationData *uint16) uintptr {
var result error
if int32(notificationStatus) < 0 {
- result = syscall.Errno(win32FromHresult(notificationStatus))
+ result = interop.Win32FromHresult(notificationStatus)
}
callbackMapLock.RLock()
@@ -73,7 +76,13 @@ func notificationWatcher(notificationType hcsNotification, callbackNumber uintpt
return 0
}
- context.channels[notificationType] <- result
+ if channel, ok := context.channels[notificationType]; ok {
+ channel <- result
+ } else {
+ logrus.WithFields(logrus.Fields{
+ "notification-type": notificationType,
+ }).Warn("Received a callback of an unsupported type")
+ }
return 0
}
diff --git a/vendor/github.com/Microsoft/hcsshim/cgo.go b/vendor/github.com/Microsoft/hcsshim/internal/hcs/cgo.go
index 200333233..3669c34aa 100644
--- a/vendor/github.com/Microsoft/hcsshim/cgo.go
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hcs/cgo.go
@@ -1,4 +1,4 @@
-package hcsshim
+package hcs
import "C"
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hcs/errors.go b/vendor/github.com/Microsoft/hcsshim/internal/hcs/errors.go
new file mode 100644
index 000000000..6368b5717
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hcs/errors.go
@@ -0,0 +1,284 @@
+package hcs
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+ "syscall"
+
+ "github.com/Microsoft/hcsshim/internal/interop"
+ "github.com/Microsoft/hcsshim/internal/logfields"
+ "github.com/sirupsen/logrus"
+)
+
+var (
+ // ErrComputeSystemDoesNotExist is an error encountered when the container being operated on no longer exists
+ ErrComputeSystemDoesNotExist = syscall.Errno(0xc037010e)
+
+ // ErrElementNotFound is an error encountered when the object being referenced does not exist
+ ErrElementNotFound = syscall.Errno(0x490)
+
+ // ErrElementNotFound is an error encountered when the object being referenced does not exist
+ ErrNotSupported = syscall.Errno(0x32)
+
+ // ErrInvalidData is an error encountered when the request being sent to hcs is invalid/unsupported
+ // decimal -2147024883 / hex 0x8007000d
+ ErrInvalidData = syscall.Errno(0xd)
+
+ // ErrHandleClose is an error encountered when the handle generating the notification being waited on has been closed
+ ErrHandleClose = errors.New("hcsshim: the handle generating this notification has been closed")
+
+ // ErrAlreadyClosed is an error encountered when using a handle that has been closed by the Close method
+ ErrAlreadyClosed = errors.New("hcsshim: the handle has already been closed")
+
+ // ErrInvalidNotificationType is an error encountered when an invalid notification type is used
+ ErrInvalidNotificationType = errors.New("hcsshim: invalid notification type")
+
+ // ErrInvalidProcessState is an error encountered when the process is not in a valid state for the requested operation
+ ErrInvalidProcessState = errors.New("the process is in an invalid state for the attempted operation")
+
+ // ErrTimeout is an error encountered when waiting on a notification times out
+ ErrTimeout = errors.New("hcsshim: timeout waiting for notification")
+
+ // ErrUnexpectedContainerExit is the error encountered when a container exits while waiting for
+ // a different expected notification
+ ErrUnexpectedContainerExit = errors.New("unexpected container exit")
+
+ // ErrUnexpectedProcessAbort is the error encountered when communication with the compute service
+ // is lost while waiting for a notification
+ ErrUnexpectedProcessAbort = errors.New("lost communication with compute service")
+
+ // ErrUnexpectedValue is an error encountered when hcs returns an invalid value
+ ErrUnexpectedValue = errors.New("unexpected value returned from hcs")
+
+ // ErrVmcomputeAlreadyStopped is an error encountered when a shutdown or terminate request is made on a stopped container
+ ErrVmcomputeAlreadyStopped = syscall.Errno(0xc0370110)
+
+ // ErrVmcomputeOperationPending is an error encountered when the operation is being completed asynchronously
+ ErrVmcomputeOperationPending = syscall.Errno(0xC0370103)
+
+ // ErrVmcomputeOperationInvalidState is an error encountered when the compute system is not in a valid state for the requested operation
+ ErrVmcomputeOperationInvalidState = syscall.Errno(0xc0370105)
+
+ // ErrProcNotFound is an error encountered when the the process cannot be found
+ ErrProcNotFound = syscall.Errno(0x7f)
+
+ // ErrVmcomputeOperationAccessIsDenied is an error which can be encountered when enumerating compute systems in RS1/RS2
+ // builds when the underlying silo might be in the process of terminating. HCS was fixed in RS3.
+ ErrVmcomputeOperationAccessIsDenied = syscall.Errno(0x5)
+
+ // ErrVmcomputeInvalidJSON is an error encountered when the compute system does not support/understand the messages sent by management
+ ErrVmcomputeInvalidJSON = syscall.Errno(0xc037010d)
+
+ // ErrVmcomputeUnknownMessage is an error encountered guest compute system doesn't support the message
+ ErrVmcomputeUnknownMessage = syscall.Errno(0xc037010b)
+
+ // ErrNotSupported is an error encountered when hcs doesn't support the request
+ ErrPlatformNotSupported = errors.New("unsupported platform request")
+)
+
+type ErrorEvent struct {
+ Message string `json:"Message,omitempty"` // Fully formated error message
+ StackTrace string `json:"StackTrace,omitempty"` // Stack trace in string form
+ Provider string `json:"Provider,omitempty"`
+ EventID uint16 `json:"EventId,omitempty"`
+ Flags uint32 `json:"Flags,omitempty"`
+ Source string `json:"Source,omitempty"`
+ //Data []EventData `json:"Data,omitempty"` // Omit this as HCS doesn't encode this well. It's more confusing to include. It is however logged in debug mode (see processHcsResult function)
+}
+
+type hcsResult struct {
+ Error int32
+ ErrorMessage string
+ ErrorEvents []ErrorEvent `json:"ErrorEvents,omitempty"`
+}
+
+func (ev *ErrorEvent) String() string {
+ evs := "[Event Detail: " + ev.Message
+ if ev.StackTrace != "" {
+ evs += " Stack Trace: " + ev.StackTrace
+ }
+ if ev.Provider != "" {
+ evs += " Provider: " + ev.Provider
+ }
+ if ev.EventID != 0 {
+ evs = fmt.Sprintf("%s EventID: %d", evs, ev.EventID)
+ }
+ if ev.Flags != 0 {
+ evs = fmt.Sprintf("%s flags: %d", evs, ev.Flags)
+ }
+ if ev.Source != "" {
+ evs += " Source: " + ev.Source
+ }
+ evs += "]"
+ return evs
+}
+
+func processHcsResult(resultp *uint16) []ErrorEvent {
+ if resultp != nil {
+ resultj := interop.ConvertAndFreeCoTaskMemString(resultp)
+ logrus.WithField(logfields.JSON, resultj).
+ Debug("HCS Result")
+ result := &hcsResult{}
+ if err := json.Unmarshal([]byte(resultj), result); err != nil {
+ logrus.WithFields(logrus.Fields{
+ logfields.JSON: resultj,
+ logrus.ErrorKey: err,
+ }).Warning("Could not unmarshal HCS result")
+ return nil
+ }
+ return result.ErrorEvents
+ }
+ return nil
+}
+
+type HcsError struct {
+ Op string
+ Err error
+ Events []ErrorEvent
+}
+
+func (e *HcsError) Error() string {
+ s := e.Op + ": " + e.Err.Error()
+ for _, ev := range e.Events {
+ s += "\n" + ev.String()
+ }
+ return s
+}
+
+// ProcessError is an error encountered in HCS during an operation on a Process object
+type ProcessError struct {
+ SystemID string
+ Pid int
+ Op string
+ Err error
+ Events []ErrorEvent
+}
+
+// SystemError is an error encountered in HCS during an operation on a Container object
+type SystemError struct {
+ ID string
+ Op string
+ Err error
+ Extra string
+ Events []ErrorEvent
+}
+
+func (e *SystemError) Error() string {
+ s := e.Op + " " + e.ID + ": " + e.Err.Error()
+ for _, ev := range e.Events {
+ s += "\n" + ev.String()
+ }
+ if e.Extra != "" {
+ s += "\n(extra info: " + e.Extra + ")"
+ }
+ return s
+}
+
+func makeSystemError(system *System, op string, extra string, err error, events []ErrorEvent) error {
+ // Don't double wrap errors
+ if _, ok := err.(*SystemError); ok {
+ return err
+ }
+ return &SystemError{
+ ID: system.ID(),
+ Op: op,
+ Extra: extra,
+ Err: err,
+ Events: events,
+ }
+}
+
+func (e *ProcessError) Error() string {
+ s := fmt.Sprintf("%s %s:%d: %s", e.Op, e.SystemID, e.Pid, e.Err.Error())
+ for _, ev := range e.Events {
+ s += "\n" + ev.String()
+ }
+ return s
+}
+
+func makeProcessError(process *Process, op string, err error, events []ErrorEvent) error {
+ // Don't double wrap errors
+ if _, ok := err.(*ProcessError); ok {
+ return err
+ }
+ return &ProcessError{
+ Pid: process.Pid(),
+ SystemID: process.SystemID(),
+ Op: op,
+ Err: err,
+ Events: events,
+ }
+}
+
+// IsNotExist checks if an error is caused by the Container or Process not existing.
+// Note: Currently, ErrElementNotFound can mean that a Process has either
+// already exited, or does not exist. Both IsAlreadyStopped and IsNotExist
+// will currently return true when the error is ErrElementNotFound or ErrProcNotFound.
+func IsNotExist(err error) bool {
+ err = getInnerError(err)
+ return err == ErrComputeSystemDoesNotExist ||
+ err == ErrElementNotFound ||
+ err == ErrProcNotFound
+}
+
+// IsAlreadyClosed checks if an error is caused by the Container or Process having been
+// already closed by a call to the Close() method.
+func IsAlreadyClosed(err error) bool {
+ err = getInnerError(err)
+ return err == ErrAlreadyClosed
+}
+
+// IsPending returns a boolean indicating whether the error is that
+// the requested operation is being completed in the background.
+func IsPending(err error) bool {
+ err = getInnerError(err)
+ return err == ErrVmcomputeOperationPending
+}
+
+// IsTimeout returns a boolean indicating whether the error is caused by
+// a timeout waiting for the operation to complete.
+func IsTimeout(err error) bool {
+ err = getInnerError(err)
+ return err == ErrTimeout
+}
+
+// IsAlreadyStopped returns a boolean indicating whether the error is caused by
+// a Container or Process being already stopped.
+// Note: Currently, ErrElementNotFound can mean that a Process has either
+// already exited, or does not exist. Both IsAlreadyStopped and IsNotExist
+// will currently return true when the error is ErrElementNotFound or ErrProcNotFound.
+func IsAlreadyStopped(err error) bool {
+ err = getInnerError(err)
+ return err == ErrVmcomputeAlreadyStopped ||
+ err == ErrElementNotFound ||
+ err == ErrProcNotFound
+}
+
+// IsNotSupported returns a boolean indicating whether the error is caused by
+// unsupported platform requests
+// Note: Currently Unsupported platform requests can be mean either
+// ErrVmcomputeInvalidJSON, ErrInvalidData, ErrNotSupported or ErrVmcomputeUnknownMessage
+// is thrown from the Platform
+func IsNotSupported(err error) bool {
+ err = getInnerError(err)
+ // If Platform doesn't recognize or support the request sent, below errors are seen
+ return err == ErrVmcomputeInvalidJSON ||
+ err == ErrInvalidData ||
+ err == ErrNotSupported ||
+ err == ErrVmcomputeUnknownMessage
+}
+
+func getInnerError(err error) error {
+ switch pe := err.(type) {
+ case nil:
+ return nil
+ case *HcsError:
+ err = pe.Err
+ case *SystemError:
+ err = pe.Err
+ case *ProcessError:
+ err = pe.Err
+ }
+ return err
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hcs/hcs.go b/vendor/github.com/Microsoft/hcsshim/internal/hcs/hcs.go
new file mode 100644
index 000000000..b0d49cbcf
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hcs/hcs.go
@@ -0,0 +1,48 @@
+// Shim for the Host Compute Service (HCS) to manage Windows Server
+// containers and Hyper-V containers.
+
+package hcs
+
+import (
+ "syscall"
+)
+
+//go:generate go run ../../mksyscall_windows.go -output zsyscall_windows.go hcs.go
+
+//sys hcsEnumerateComputeSystems(query string, computeSystems **uint16, result **uint16) (hr error) = vmcompute.HcsEnumerateComputeSystems?
+//sys hcsCreateComputeSystem(id string, configuration string, identity syscall.Handle, computeSystem *hcsSystem, result **uint16) (hr error) = vmcompute.HcsCreateComputeSystem?
+//sys hcsOpenComputeSystem(id string, computeSystem *hcsSystem, result **uint16) (hr error) = vmcompute.HcsOpenComputeSystem?
+//sys hcsCloseComputeSystem(computeSystem hcsSystem) (hr error) = vmcompute.HcsCloseComputeSystem?
+//sys hcsStartComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) = vmcompute.HcsStartComputeSystem?
+//sys hcsShutdownComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) = vmcompute.HcsShutdownComputeSystem?
+//sys hcsTerminateComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) = vmcompute.HcsTerminateComputeSystem?
+//sys hcsPauseComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) = vmcompute.HcsPauseComputeSystem?
+//sys hcsResumeComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) = vmcompute.HcsResumeComputeSystem?
+//sys hcsGetComputeSystemProperties(computeSystem hcsSystem, propertyQuery string, properties **uint16, result **uint16) (hr error) = vmcompute.HcsGetComputeSystemProperties?
+//sys hcsModifyComputeSystem(computeSystem hcsSystem, configuration string, result **uint16) (hr error) = vmcompute.HcsModifyComputeSystem?
+//sys hcsRegisterComputeSystemCallback(computeSystem hcsSystem, callback uintptr, context uintptr, callbackHandle *hcsCallback) (hr error) = vmcompute.HcsRegisterComputeSystemCallback?
+//sys hcsUnregisterComputeSystemCallback(callbackHandle hcsCallback) (hr error) = vmcompute.HcsUnregisterComputeSystemCallback?
+
+//sys hcsCreateProcess(computeSystem hcsSystem, processParameters string, processInformation *hcsProcessInformation, process *hcsProcess, result **uint16) (hr error) = vmcompute.HcsCreateProcess?
+//sys hcsOpenProcess(computeSystem hcsSystem, pid uint32, process *hcsProcess, result **uint16) (hr error) = vmcompute.HcsOpenProcess?
+//sys hcsCloseProcess(process hcsProcess) (hr error) = vmcompute.HcsCloseProcess?
+//sys hcsTerminateProcess(process hcsProcess, result **uint16) (hr error) = vmcompute.HcsTerminateProcess?
+//sys hcsSignalProcess(process hcsProcess, options string, result **uint16) (hr error) = vmcompute.HcsTerminateProcess?
+//sys hcsGetProcessInfo(process hcsProcess, processInformation *hcsProcessInformation, result **uint16) (hr error) = vmcompute.HcsGetProcessInfo?
+//sys hcsGetProcessProperties(process hcsProcess, processProperties **uint16, result **uint16) (hr error) = vmcompute.HcsGetProcessProperties?
+//sys hcsModifyProcess(process hcsProcess, settings string, result **uint16) (hr error) = vmcompute.HcsModifyProcess?
+//sys hcsGetServiceProperties(propertyQuery string, properties **uint16, result **uint16) (hr error) = vmcompute.HcsGetServiceProperties?
+//sys hcsRegisterProcessCallback(process hcsProcess, callback uintptr, context uintptr, callbackHandle *hcsCallback) (hr error) = vmcompute.HcsRegisterProcessCallback?
+//sys hcsUnregisterProcessCallback(callbackHandle hcsCallback) (hr error) = vmcompute.HcsUnregisterProcessCallback?
+
+type hcsSystem syscall.Handle
+type hcsProcess syscall.Handle
+type hcsCallback syscall.Handle
+
+type hcsProcessInformation struct {
+ ProcessId uint32
+ Reserved uint32
+ StdInput syscall.Handle
+ StdOutput syscall.Handle
+ StdError syscall.Handle
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hcs/log.go b/vendor/github.com/Microsoft/hcsshim/internal/hcs/log.go
new file mode 100644
index 000000000..90d164e35
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hcs/log.go
@@ -0,0 +1,15 @@
+package hcs
+
+import "github.com/sirupsen/logrus"
+
+func logOperationBegin(ctx logrus.Fields, msg string) {
+ logrus.WithFields(ctx).Debug(msg)
+}
+
+func logOperationEnd(ctx logrus.Fields, msg string, err error) {
+ if err == nil {
+ logrus.WithFields(ctx).Debug(msg)
+ } else {
+ logrus.WithFields(ctx).WithError(err).Error(msg)
+ }
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hcs/process.go b/vendor/github.com/Microsoft/hcsshim/internal/hcs/process.go
new file mode 100644
index 000000000..42598cf2f
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hcs/process.go
@@ -0,0 +1,465 @@
+package hcs
+
+import (
+ "encoding/json"
+ "io"
+ "sync"
+ "syscall"
+ "time"
+
+ "github.com/Microsoft/hcsshim/internal/guestrequest"
+ "github.com/Microsoft/hcsshim/internal/interop"
+ "github.com/Microsoft/hcsshim/internal/logfields"
+ "github.com/sirupsen/logrus"
+)
+
+// ContainerError is an error encountered in HCS
+type Process struct {
+ handleLock sync.RWMutex
+ handle hcsProcess
+ processID int
+ system *System
+ cachedPipes *cachedPipes
+ callbackNumber uintptr
+
+ logctx logrus.Fields
+}
+
+func newProcess(process hcsProcess, processID int, computeSystem *System) *Process {
+ return &Process{
+ handle: process,
+ processID: processID,
+ system: computeSystem,
+ logctx: logrus.Fields{
+ logfields.HCSOperation: "",
+ logfields.ContainerID: computeSystem.ID(),
+ logfields.ProcessID: processID,
+ },
+ }
+}
+
+type cachedPipes struct {
+ stdIn syscall.Handle
+ stdOut syscall.Handle
+ stdErr syscall.Handle
+}
+
+type processModifyRequest struct {
+ Operation string
+ ConsoleSize *consoleSize `json:",omitempty"`
+ CloseHandle *closeHandle `json:",omitempty"`
+}
+
+type consoleSize struct {
+ Height uint16
+ Width uint16
+}
+
+type closeHandle struct {
+ Handle string
+}
+
+type ProcessStatus struct {
+ ProcessID uint32
+ Exited bool
+ ExitCode uint32
+ LastWaitResult int32
+}
+
+const (
+ stdIn string = "StdIn"
+ stdOut string = "StdOut"
+ stdErr string = "StdErr"
+)
+
+const (
+ modifyConsoleSize string = "ConsoleSize"
+ modifyCloseHandle string = "CloseHandle"
+)
+
+// Pid returns the process ID of the process within the container.
+func (process *Process) Pid() int {
+ return process.processID
+}
+
+// SystemID returns the ID of the process's compute system.
+func (process *Process) SystemID() string {
+ return process.system.ID()
+}
+
+func (process *Process) logOperationBegin(operation string) {
+ process.logctx[logfields.HCSOperation] = operation
+ logOperationBegin(
+ process.logctx,
+ "hcsshim::Process - Begin Operation")
+}
+
+func (process *Process) logOperationEnd(err error) {
+ var result string
+ if err == nil {
+ result = "Success"
+ } else {
+ result = "Error"
+ }
+
+ logOperationEnd(
+ process.logctx,
+ "hcsshim::Process - End Operation - "+result,
+ err)
+ process.logctx[logfields.HCSOperation] = ""
+}
+
+// Signal signals the process with `options`.
+func (process *Process) Signal(options guestrequest.SignalProcessOptions) (err error) {
+ process.handleLock.RLock()
+ defer process.handleLock.RUnlock()
+
+ operation := "hcsshim::Process::Signal"
+ process.logOperationBegin(operation)
+ defer process.logOperationEnd(err)
+
+ if process.handle == 0 {
+ return makeProcessError(process, operation, ErrAlreadyClosed, nil)
+ }
+
+ optionsb, err := json.Marshal(options)
+ if err != nil {
+ return err
+ }
+
+ optionsStr := string(optionsb)
+
+ var resultp *uint16
+ completed := false
+ go syscallWatcher(process.logctx, &completed)
+ err = hcsSignalProcess(process.handle, optionsStr, &resultp)
+ completed = true
+ events := processHcsResult(resultp)
+ if err != nil {
+ return makeProcessError(process, operation, err, events)
+ }
+
+ return nil
+}
+
+// Kill signals the process to terminate but does not wait for it to finish terminating.
+func (process *Process) Kill() (err error) {
+ process.handleLock.RLock()
+ defer process.handleLock.RUnlock()
+
+ operation := "hcsshim::Process::Kill"
+ process.logOperationBegin(operation)
+ defer process.logOperationEnd(err)
+
+ if process.handle == 0 {
+ return makeProcessError(process, operation, ErrAlreadyClosed, nil)
+ }
+
+ var resultp *uint16
+ completed := false
+ go syscallWatcher(process.logctx, &completed)
+ err = hcsTerminateProcess(process.handle, &resultp)
+ completed = true
+ events := processHcsResult(resultp)
+ if err != nil {
+ return makeProcessError(process, operation, err, events)
+ }
+
+ return nil
+}
+
+// Wait waits for the process to exit.
+func (process *Process) Wait() (err error) {
+ operation := "hcsshim::Process::Wait"
+ process.logOperationBegin(operation)
+ defer process.logOperationEnd(err)
+
+ err = waitForNotification(process.callbackNumber, hcsNotificationProcessExited, nil)
+ if err != nil {
+ return makeProcessError(process, operation, err, nil)
+ }
+
+ return nil
+}
+
+// WaitTimeout waits for the process to exit or the duration to elapse. It returns
+// false if timeout occurs.
+func (process *Process) WaitTimeout(timeout time.Duration) (err error) {
+ operation := "hcssshim::Process::WaitTimeout"
+ process.logOperationBegin(operation)
+ defer process.logOperationEnd(err)
+
+ err = waitForNotification(process.callbackNumber, hcsNotificationProcessExited, &timeout)
+ if err != nil {
+ return makeProcessError(process, operation, err, nil)
+ }
+
+ return nil
+}
+
+// ResizeConsole resizes the console of the process.
+func (process *Process) ResizeConsole(width, height uint16) (err error) {
+ process.handleLock.RLock()
+ defer process.handleLock.RUnlock()
+
+ operation := "hcsshim::Process::ResizeConsole"
+ process.logOperationBegin(operation)
+ defer process.logOperationEnd(err)
+
+ if process.handle == 0 {
+ return makeProcessError(process, operation, ErrAlreadyClosed, nil)
+ }
+
+ modifyRequest := processModifyRequest{
+ Operation: modifyConsoleSize,
+ ConsoleSize: &consoleSize{
+ Height: height,
+ Width: width,
+ },
+ }
+
+ modifyRequestb, err := json.Marshal(modifyRequest)
+ if err != nil {
+ return err
+ }
+
+ modifyRequestStr := string(modifyRequestb)
+
+ var resultp *uint16
+ err = hcsModifyProcess(process.handle, modifyRequestStr, &resultp)
+ events := processHcsResult(resultp)
+ if err != nil {
+ return makeProcessError(process, operation, err, events)
+ }
+
+ return nil
+}
+
+func (process *Process) Properties() (_ *ProcessStatus, err error) {
+ process.handleLock.RLock()
+ defer process.handleLock.RUnlock()
+
+ operation := "hcsshim::Process::Properties"
+ process.logOperationBegin(operation)
+ defer process.logOperationEnd(err)
+
+ if process.handle == 0 {
+ return nil, makeProcessError(process, operation, ErrAlreadyClosed, nil)
+ }
+
+ var (
+ resultp *uint16
+ propertiesp *uint16
+ )
+ completed := false
+ go syscallWatcher(process.logctx, &completed)
+ err = hcsGetProcessProperties(process.handle, &propertiesp, &resultp)
+ completed = true
+ events := processHcsResult(resultp)
+ if err != nil {
+ return nil, makeProcessError(process, operation, err, events)
+ }
+
+ if propertiesp == nil {
+ return nil, ErrUnexpectedValue
+ }
+ propertiesRaw := interop.ConvertAndFreeCoTaskMemBytes(propertiesp)
+
+ properties := &ProcessStatus{}
+ if err := json.Unmarshal(propertiesRaw, properties); err != nil {
+ return nil, makeProcessError(process, operation, err, nil)
+ }
+
+ return properties, nil
+}
+
+// ExitCode returns the exit code of the process. The process must have
+// already terminated.
+func (process *Process) ExitCode() (_ int, err error) {
+ operation := "hcsshim::Process::ExitCode"
+ process.logOperationBegin(operation)
+ defer process.logOperationEnd(err)
+
+ properties, err := process.Properties()
+ if err != nil {
+ return 0, makeProcessError(process, operation, err, nil)
+ }
+
+ if properties.Exited == false {
+ return 0, makeProcessError(process, operation, ErrInvalidProcessState, nil)
+ }
+
+ if properties.LastWaitResult != 0 {
+ return 0, makeProcessError(process, operation, syscall.Errno(properties.LastWaitResult), nil)
+ }
+
+ return int(properties.ExitCode), nil
+}
+
+// Stdio returns the stdin, stdout, and stderr pipes, respectively. Closing
+// these pipes does not close the underlying pipes; it should be possible to
+// call this multiple times to get multiple interfaces.
+func (process *Process) Stdio() (_ io.WriteCloser, _ io.ReadCloser, _ io.ReadCloser, err error) {
+ process.handleLock.RLock()
+ defer process.handleLock.RUnlock()
+
+ operation := "hcsshim::Process::Stdio"
+ process.logOperationBegin(operation)
+ defer process.logOperationEnd(err)
+
+ if process.handle == 0 {
+ return nil, nil, nil, makeProcessError(process, operation, ErrAlreadyClosed, nil)
+ }
+
+ var stdIn, stdOut, stdErr syscall.Handle
+
+ if process.cachedPipes == nil {
+ var (
+ processInfo hcsProcessInformation
+ resultp *uint16
+ )
+ err = hcsGetProcessInfo(process.handle, &processInfo, &resultp)
+ events := processHcsResult(resultp)
+ if err != nil {
+ return nil, nil, nil, makeProcessError(process, operation, err, events)
+ }
+
+ stdIn, stdOut, stdErr = processInfo.StdInput, processInfo.StdOutput, processInfo.StdError
+ } else {
+ // Use cached pipes
+ stdIn, stdOut, stdErr = process.cachedPipes.stdIn, process.cachedPipes.stdOut, process.cachedPipes.stdErr
+
+ // Invalidate the cache
+ process.cachedPipes = nil
+ }
+
+ pipes, err := makeOpenFiles([]syscall.Handle{stdIn, stdOut, stdErr})
+ if err != nil {
+ return nil, nil, nil, makeProcessError(process, operation, err, nil)
+ }
+
+ return pipes[0], pipes[1], pipes[2], nil
+}
+
+// CloseStdin closes the write side of the stdin pipe so that the process is
+// notified on the read side that there is no more data in stdin.
+func (process *Process) CloseStdin() (err error) {
+ process.handleLock.RLock()
+ defer process.handleLock.RUnlock()
+
+ operation := "hcsshim::Process::CloseStdin"
+ process.logOperationBegin(operation)
+ defer process.logOperationEnd(err)
+
+ if process.handle == 0 {
+ return makeProcessError(process, operation, ErrAlreadyClosed, nil)
+ }
+
+ modifyRequest := processModifyRequest{
+ Operation: modifyCloseHandle,
+ CloseHandle: &closeHandle{
+ Handle: stdIn,
+ },
+ }
+
+ modifyRequestb, err := json.Marshal(modifyRequest)
+ if err != nil {
+ return err
+ }
+
+ modifyRequestStr := string(modifyRequestb)
+
+ var resultp *uint16
+ err = hcsModifyProcess(process.handle, modifyRequestStr, &resultp)
+ events := processHcsResult(resultp)
+ if err != nil {
+ return makeProcessError(process, operation, err, events)
+ }
+
+ return nil
+}
+
+// Close cleans up any state associated with the process but does not kill
+// or wait on it.
+func (process *Process) Close() (err error) {
+ process.handleLock.Lock()
+ defer process.handleLock.Unlock()
+
+ operation := "hcsshim::Process::Close"
+ process.logOperationBegin(operation)
+ defer process.logOperationEnd(err)
+
+ // Don't double free this
+ if process.handle == 0 {
+ return nil
+ }
+
+ if err = process.unregisterCallback(); err != nil {
+ return makeProcessError(process, operation, err, nil)
+ }
+
+ if err = hcsCloseProcess(process.handle); err != nil {
+ return makeProcessError(process, operation, err, nil)
+ }
+
+ process.handle = 0
+
+ return nil
+}
+
+func (process *Process) registerCallback() error {
+ context := &notifcationWatcherContext{
+ channels: newChannels(),
+ }
+
+ callbackMapLock.Lock()
+ callbackNumber := nextCallback
+ nextCallback++
+ callbackMap[callbackNumber] = context
+ callbackMapLock.Unlock()
+
+ var callbackHandle hcsCallback
+ err := hcsRegisterProcessCallback(process.handle, notificationWatcherCallback, callbackNumber, &callbackHandle)
+ if err != nil {
+ return err
+ }
+ context.handle = callbackHandle
+ process.callbackNumber = callbackNumber
+
+ return nil
+}
+
+func (process *Process) unregisterCallback() error {
+ callbackNumber := process.callbackNumber
+
+ callbackMapLock.RLock()
+ context := callbackMap[callbackNumber]
+ callbackMapLock.RUnlock()
+
+ if context == nil {
+ return nil
+ }
+
+ handle := context.handle
+
+ if handle == 0 {
+ return nil
+ }
+
+ // hcsUnregisterProcessCallback has its own syncronization
+ // to wait for all callbacks to complete. We must NOT hold the callbackMapLock.
+ err := hcsUnregisterProcessCallback(handle)
+ if err != nil {
+ return err
+ }
+
+ closeChannels(context.channels)
+
+ callbackMapLock.Lock()
+ callbackMap[callbackNumber] = nil
+ callbackMapLock.Unlock()
+
+ handle = 0
+
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go b/vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go
new file mode 100644
index 000000000..2629380fd
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go
@@ -0,0 +1,667 @@
+package hcs
+
+import (
+ "encoding/json"
+ "os"
+ "strconv"
+ "sync"
+ "syscall"
+ "time"
+
+ "github.com/Microsoft/hcsshim/internal/interop"
+ "github.com/Microsoft/hcsshim/internal/logfields"
+ "github.com/Microsoft/hcsshim/internal/schema1"
+ "github.com/Microsoft/hcsshim/internal/timeout"
+ "github.com/sirupsen/logrus"
+)
+
+// currentContainerStarts is used to limit the number of concurrent container
+// starts.
+var currentContainerStarts containerStarts
+
+type containerStarts struct {
+ maxParallel int
+ inProgress int
+ sync.Mutex
+}
+
+func init() {
+ mpsS := os.Getenv("HCSSHIM_MAX_PARALLEL_START")
+ if len(mpsS) > 0 {
+ mpsI, err := strconv.Atoi(mpsS)
+ if err != nil || mpsI < 0 {
+ return
+ }
+ currentContainerStarts.maxParallel = mpsI
+ }
+}
+
+type System struct {
+ handleLock sync.RWMutex
+ handle hcsSystem
+ id string
+ callbackNumber uintptr
+
+ logctx logrus.Fields
+}
+
+func newSystem(id string) *System {
+ return &System{
+ id: id,
+ logctx: logrus.Fields{
+ logfields.HCSOperation: "",
+ logfields.ContainerID: id,
+ },
+ }
+}
+
+func (computeSystem *System) logOperationBegin(operation string) {
+ computeSystem.logctx[logfields.HCSOperation] = operation
+ logOperationBegin(
+ computeSystem.logctx,
+ "hcsshim::ComputeSystem - Begin Operation")
+}
+
+func (computeSystem *System) logOperationEnd(err error) {
+ var result string
+ if err == nil {
+ result = "Success"
+ } else {
+ result = "Error"
+ }
+
+ logOperationEnd(
+ computeSystem.logctx,
+ "hcsshim::ComputeSystem - End Operation - "+result,
+ err)
+ computeSystem.logctx[logfields.HCSOperation] = ""
+}
+
+// CreateComputeSystem creates a new compute system with the given configuration but does not start it.
+func CreateComputeSystem(id string, hcsDocumentInterface interface{}) (_ *System, err error) {
+ operation := "hcsshim::CreateComputeSystem"
+
+ computeSystem := newSystem(id)
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ hcsDocumentB, err := json.Marshal(hcsDocumentInterface)
+ if err != nil {
+ return nil, err
+ }
+
+ hcsDocument := string(hcsDocumentB)
+
+ logrus.WithFields(computeSystem.logctx).
+ WithField(logfields.JSON, hcsDocument).
+ Debug("HCS ComputeSystem Document")
+
+ var (
+ resultp *uint16
+ identity syscall.Handle
+ )
+ completed := false
+ go syscallWatcher(computeSystem.logctx, &completed)
+ createError := hcsCreateComputeSystem(id, hcsDocument, identity, &computeSystem.handle, &resultp)
+ completed = true
+
+ if createError == nil || IsPending(createError) {
+ if err = computeSystem.registerCallback(); err != nil {
+ // Terminate the compute system if it still exists. We're okay to
+ // ignore a failure here.
+ computeSystem.Terminate()
+ return nil, makeSystemError(computeSystem, operation, "", err, nil)
+ }
+ }
+
+ events, err := processAsyncHcsResult(createError, resultp, computeSystem.callbackNumber, hcsNotificationSystemCreateCompleted, &timeout.SystemCreate)
+ if err != nil {
+ if err == ErrTimeout {
+ // Terminate the compute system if it still exists. We're okay to
+ // ignore a failure here.
+ computeSystem.Terminate()
+ }
+ return nil, makeSystemError(computeSystem, operation, hcsDocument, err, events)
+ }
+
+ return computeSystem, nil
+}
+
+// OpenComputeSystem opens an existing compute system by ID.
+func OpenComputeSystem(id string) (_ *System, err error) {
+ operation := "hcsshim::OpenComputeSystem"
+
+ computeSystem := newSystem(id)
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ var (
+ handle hcsSystem
+ resultp *uint16
+ )
+ err = hcsOpenComputeSystem(id, &handle, &resultp)
+ events := processHcsResult(resultp)
+ if err != nil {
+ return nil, makeSystemError(computeSystem, operation, "", err, events)
+ }
+
+ computeSystem.handle = handle
+
+ if err = computeSystem.registerCallback(); err != nil {
+ return nil, makeSystemError(computeSystem, operation, "", err, nil)
+ }
+
+ return computeSystem, nil
+}
+
+// GetComputeSystems gets a list of the compute systems on the system that match the query
+func GetComputeSystems(q schema1.ComputeSystemQuery) (_ []schema1.ContainerProperties, err error) {
+ operation := "hcsshim::GetComputeSystems"
+ fields := logrus.Fields{
+ logfields.HCSOperation: operation,
+ }
+ logOperationBegin(
+ fields,
+ "hcsshim::ComputeSystem - Begin Operation")
+
+ defer func() {
+ var result string
+ if err == nil {
+ result = "Success"
+ } else {
+ result = "Error"
+ }
+
+ logOperationEnd(
+ fields,
+ "hcsshim::ComputeSystem - End Operation - "+result,
+ err)
+ }()
+
+ queryb, err := json.Marshal(q)
+ if err != nil {
+ return nil, err
+ }
+
+ query := string(queryb)
+
+ logrus.WithFields(fields).
+ WithField(logfields.JSON, query).
+ Debug("HCS ComputeSystem Query")
+
+ var (
+ resultp *uint16
+ computeSystemsp *uint16
+ )
+ completed := false
+ go syscallWatcher(fields, &completed)
+ err = hcsEnumerateComputeSystems(query, &computeSystemsp, &resultp)
+ completed = true
+ events := processHcsResult(resultp)
+ if err != nil {
+ return nil, &HcsError{Op: operation, Err: err, Events: events}
+ }
+
+ if computeSystemsp == nil {
+ return nil, ErrUnexpectedValue
+ }
+ computeSystemsRaw := interop.ConvertAndFreeCoTaskMemBytes(computeSystemsp)
+ computeSystems := []schema1.ContainerProperties{}
+ if err = json.Unmarshal(computeSystemsRaw, &computeSystems); err != nil {
+ return nil, err
+ }
+
+ return computeSystems, nil
+}
+
+// Start synchronously starts the computeSystem.
+func (computeSystem *System) Start() (err error) {
+ computeSystem.handleLock.RLock()
+ defer computeSystem.handleLock.RUnlock()
+
+ operation := "hcsshim::ComputeSystem::Start"
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ if computeSystem.handle == 0 {
+ return makeSystemError(computeSystem, "Start", "", ErrAlreadyClosed, nil)
+ }
+
+ // This is a very simple backoff-retry loop to limit the number
+ // of parallel container starts if environment variable
+ // HCSSHIM_MAX_PARALLEL_START is set to a positive integer.
+ // It should generally only be used as a workaround to various
+ // platform issues that exist between RS1 and RS4 as of Aug 2018
+ if currentContainerStarts.maxParallel > 0 {
+ for {
+ currentContainerStarts.Lock()
+ if currentContainerStarts.inProgress < currentContainerStarts.maxParallel {
+ currentContainerStarts.inProgress++
+ currentContainerStarts.Unlock()
+ break
+ }
+ if currentContainerStarts.inProgress == currentContainerStarts.maxParallel {
+ currentContainerStarts.Unlock()
+ time.Sleep(100 * time.Millisecond)
+ }
+ }
+ // Make sure we decrement the count when we are done.
+ defer func() {
+ currentContainerStarts.Lock()
+ currentContainerStarts.inProgress--
+ currentContainerStarts.Unlock()
+ }()
+ }
+
+ var resultp *uint16
+ completed := false
+ go syscallWatcher(computeSystem.logctx, &completed)
+ err = hcsStartComputeSystem(computeSystem.handle, "", &resultp)
+ completed = true
+ events, err := processAsyncHcsResult(err, resultp, computeSystem.callbackNumber, hcsNotificationSystemStartCompleted, &timeout.SystemStart)
+ if err != nil {
+ return makeSystemError(computeSystem, "Start", "", err, events)
+ }
+
+ return nil
+}
+
+// ID returns the compute system's identifier.
+func (computeSystem *System) ID() string {
+ return computeSystem.id
+}
+
+// Shutdown requests a compute system shutdown, if IsPending() on the error returned is true,
+// it may not actually be shut down until Wait() succeeds.
+func (computeSystem *System) Shutdown() (err error) {
+ computeSystem.handleLock.RLock()
+ defer computeSystem.handleLock.RUnlock()
+
+ operation := "hcsshim::ComputeSystem::Shutdown"
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ if computeSystem.handle == 0 {
+ return makeSystemError(computeSystem, "Shutdown", "", ErrAlreadyClosed, nil)
+ }
+
+ var resultp *uint16
+ completed := false
+ go syscallWatcher(computeSystem.logctx, &completed)
+ err = hcsShutdownComputeSystem(computeSystem.handle, "", &resultp)
+ completed = true
+ events := processHcsResult(resultp)
+ if err != nil {
+ return makeSystemError(computeSystem, "Shutdown", "", err, events)
+ }
+
+ return nil
+}
+
+// Terminate requests a compute system terminate, if IsPending() on the error returned is true,
+// it may not actually be shut down until Wait() succeeds.
+func (computeSystem *System) Terminate() (err error) {
+ computeSystem.handleLock.RLock()
+ defer computeSystem.handleLock.RUnlock()
+
+ operation := "hcsshim::ComputeSystem::Terminate"
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ if computeSystem.handle == 0 {
+ return makeSystemError(computeSystem, "Terminate", "", ErrAlreadyClosed, nil)
+ }
+
+ var resultp *uint16
+ completed := false
+ go syscallWatcher(computeSystem.logctx, &completed)
+ err = hcsTerminateComputeSystem(computeSystem.handle, "", &resultp)
+ completed = true
+ events := processHcsResult(resultp)
+ if err != nil {
+ return makeSystemError(computeSystem, "Terminate", "", err, events)
+ }
+
+ return nil
+}
+
+// Wait synchronously waits for the compute system to shutdown or terminate.
+func (computeSystem *System) Wait() (err error) {
+ operation := "hcsshim::ComputeSystem::Wait"
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ err = waitForNotification(computeSystem.callbackNumber, hcsNotificationSystemExited, nil)
+ if err != nil {
+ return makeSystemError(computeSystem, "Wait", "", err, nil)
+ }
+
+ return nil
+}
+
+// WaitTimeout synchronously waits for the compute system to terminate or the duration to elapse.
+// If the timeout expires, IsTimeout(err) == true
+func (computeSystem *System) WaitTimeout(timeout time.Duration) (err error) {
+ operation := "hcsshim::ComputeSystem::WaitTimeout"
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ err = waitForNotification(computeSystem.callbackNumber, hcsNotificationSystemExited, &timeout)
+ if err != nil {
+ return makeSystemError(computeSystem, "WaitTimeout", "", err, nil)
+ }
+
+ return nil
+}
+
+func (computeSystem *System) Properties(types ...schema1.PropertyType) (_ *schema1.ContainerProperties, err error) {
+ computeSystem.handleLock.RLock()
+ defer computeSystem.handleLock.RUnlock()
+
+ operation := "hcsshim::ComputeSystem::Properties"
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ queryj, err := json.Marshal(schema1.PropertyQuery{types})
+ if err != nil {
+ return nil, makeSystemError(computeSystem, "Properties", "", err, nil)
+ }
+
+ logrus.WithFields(computeSystem.logctx).
+ WithField(logfields.JSON, queryj).
+ Debug("HCS ComputeSystem Properties Query")
+
+ var resultp, propertiesp *uint16
+ completed := false
+ go syscallWatcher(computeSystem.logctx, &completed)
+ err = hcsGetComputeSystemProperties(computeSystem.handle, string(queryj), &propertiesp, &resultp)
+ completed = true
+ events := processHcsResult(resultp)
+ if err != nil {
+ return nil, makeSystemError(computeSystem, "Properties", "", err, events)
+ }
+
+ if propertiesp == nil {
+ return nil, ErrUnexpectedValue
+ }
+ propertiesRaw := interop.ConvertAndFreeCoTaskMemBytes(propertiesp)
+ properties := &schema1.ContainerProperties{}
+ if err := json.Unmarshal(propertiesRaw, properties); err != nil {
+ return nil, makeSystemError(computeSystem, "Properties", "", err, nil)
+ }
+
+ return properties, nil
+}
+
+// Pause pauses the execution of the computeSystem. This feature is not enabled in TP5.
+func (computeSystem *System) Pause() (err error) {
+ computeSystem.handleLock.RLock()
+ defer computeSystem.handleLock.RUnlock()
+
+ operation := "hcsshim::ComputeSystem::Pause"
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ if computeSystem.handle == 0 {
+ return makeSystemError(computeSystem, "Pause", "", ErrAlreadyClosed, nil)
+ }
+
+ var resultp *uint16
+ completed := false
+ go syscallWatcher(computeSystem.logctx, &completed)
+ err = hcsPauseComputeSystem(computeSystem.handle, "", &resultp)
+ completed = true
+ events, err := processAsyncHcsResult(err, resultp, computeSystem.callbackNumber, hcsNotificationSystemPauseCompleted, &timeout.SystemPause)
+ if err != nil {
+ return makeSystemError(computeSystem, "Pause", "", err, events)
+ }
+
+ return nil
+}
+
+// Resume resumes the execution of the computeSystem. This feature is not enabled in TP5.
+func (computeSystem *System) Resume() (err error) {
+ computeSystem.handleLock.RLock()
+ defer computeSystem.handleLock.RUnlock()
+
+ operation := "hcsshim::ComputeSystem::Resume"
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ if computeSystem.handle == 0 {
+ return makeSystemError(computeSystem, "Resume", "", ErrAlreadyClosed, nil)
+ }
+
+ var resultp *uint16
+ completed := false
+ go syscallWatcher(computeSystem.logctx, &completed)
+ err = hcsResumeComputeSystem(computeSystem.handle, "", &resultp)
+ completed = true
+ events, err := processAsyncHcsResult(err, resultp, computeSystem.callbackNumber, hcsNotificationSystemResumeCompleted, &timeout.SystemResume)
+ if err != nil {
+ return makeSystemError(computeSystem, "Resume", "", err, events)
+ }
+
+ return nil
+}
+
+// CreateProcess launches a new process within the computeSystem.
+func (computeSystem *System) CreateProcess(c interface{}) (_ *Process, err error) {
+ computeSystem.handleLock.RLock()
+ defer computeSystem.handleLock.RUnlock()
+
+ operation := "hcsshim::ComputeSystem::CreateProcess"
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ var (
+ processInfo hcsProcessInformation
+ processHandle hcsProcess
+ resultp *uint16
+ )
+
+ if computeSystem.handle == 0 {
+ return nil, makeSystemError(computeSystem, "CreateProcess", "", ErrAlreadyClosed, nil)
+ }
+
+ configurationb, err := json.Marshal(c)
+ if err != nil {
+ return nil, makeSystemError(computeSystem, "CreateProcess", "", err, nil)
+ }
+
+ configuration := string(configurationb)
+
+ logrus.WithFields(computeSystem.logctx).
+ WithField(logfields.JSON, configuration).
+ Debug("HCS ComputeSystem Process Document")
+
+ completed := false
+ go syscallWatcher(computeSystem.logctx, &completed)
+ err = hcsCreateProcess(computeSystem.handle, configuration, &processInfo, &processHandle, &resultp)
+ completed = true
+ events := processHcsResult(resultp)
+ if err != nil {
+ return nil, makeSystemError(computeSystem, "CreateProcess", configuration, err, events)
+ }
+
+ logrus.WithFields(computeSystem.logctx).
+ WithField(logfields.ProcessID, processInfo.ProcessId).
+ Debug("HCS ComputeSystem CreateProcess PID")
+
+ process := newProcess(processHandle, int(processInfo.ProcessId), computeSystem)
+ process.cachedPipes = &cachedPipes{
+ stdIn: processInfo.StdInput,
+ stdOut: processInfo.StdOutput,
+ stdErr: processInfo.StdError,
+ }
+
+ if err = process.registerCallback(); err != nil {
+ return nil, makeSystemError(computeSystem, "CreateProcess", "", err, nil)
+ }
+
+ return process, nil
+}
+
+// OpenProcess gets an interface to an existing process within the computeSystem.
+func (computeSystem *System) OpenProcess(pid int) (_ *Process, err error) {
+ computeSystem.handleLock.RLock()
+ defer computeSystem.handleLock.RUnlock()
+
+ // Add PID for the context of this operation
+ computeSystem.logctx[logfields.ProcessID] = pid
+ defer delete(computeSystem.logctx, logfields.ProcessID)
+
+ operation := "hcsshim::ComputeSystem::OpenProcess"
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ var (
+ processHandle hcsProcess
+ resultp *uint16
+ )
+
+ if computeSystem.handle == 0 {
+ return nil, makeSystemError(computeSystem, "OpenProcess", "", ErrAlreadyClosed, nil)
+ }
+
+ completed := false
+ go syscallWatcher(computeSystem.logctx, &completed)
+ err = hcsOpenProcess(computeSystem.handle, uint32(pid), &processHandle, &resultp)
+ completed = true
+ events := processHcsResult(resultp)
+ if err != nil {
+ return nil, makeSystemError(computeSystem, "OpenProcess", "", err, events)
+ }
+
+ process := newProcess(processHandle, pid, computeSystem)
+ if err = process.registerCallback(); err != nil {
+ return nil, makeSystemError(computeSystem, "OpenProcess", "", err, nil)
+ }
+
+ return process, nil
+}
+
+// Close cleans up any state associated with the compute system but does not terminate or wait for it.
+func (computeSystem *System) Close() (err error) {
+ computeSystem.handleLock.Lock()
+ defer computeSystem.handleLock.Unlock()
+
+ operation := "hcsshim::ComputeSystem::Close"
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ // Don't double free this
+ if computeSystem.handle == 0 {
+ return nil
+ }
+
+ if err = computeSystem.unregisterCallback(); err != nil {
+ return makeSystemError(computeSystem, "Close", "", err, nil)
+ }
+
+ completed := false
+ go syscallWatcher(computeSystem.logctx, &completed)
+ err = hcsCloseComputeSystem(computeSystem.handle)
+ completed = true
+ if err != nil {
+ return makeSystemError(computeSystem, "Close", "", err, nil)
+ }
+
+ computeSystem.handle = 0
+
+ return nil
+}
+
+func (computeSystem *System) registerCallback() error {
+ context := &notifcationWatcherContext{
+ channels: newChannels(),
+ }
+
+ callbackMapLock.Lock()
+ callbackNumber := nextCallback
+ nextCallback++
+ callbackMap[callbackNumber] = context
+ callbackMapLock.Unlock()
+
+ var callbackHandle hcsCallback
+ err := hcsRegisterComputeSystemCallback(computeSystem.handle, notificationWatcherCallback, callbackNumber, &callbackHandle)
+ if err != nil {
+ return err
+ }
+ context.handle = callbackHandle
+ computeSystem.callbackNumber = callbackNumber
+
+ return nil
+}
+
+func (computeSystem *System) unregisterCallback() error {
+ callbackNumber := computeSystem.callbackNumber
+
+ callbackMapLock.RLock()
+ context := callbackMap[callbackNumber]
+ callbackMapLock.RUnlock()
+
+ if context == nil {
+ return nil
+ }
+
+ handle := context.handle
+
+ if handle == 0 {
+ return nil
+ }
+
+ // hcsUnregisterComputeSystemCallback has its own syncronization
+ // to wait for all callbacks to complete. We must NOT hold the callbackMapLock.
+ err := hcsUnregisterComputeSystemCallback(handle)
+ if err != nil {
+ return err
+ }
+
+ closeChannels(context.channels)
+
+ callbackMapLock.Lock()
+ callbackMap[callbackNumber] = nil
+ callbackMapLock.Unlock()
+
+ handle = 0
+
+ return nil
+}
+
+// Modify the System by sending a request to HCS
+func (computeSystem *System) Modify(config interface{}) (err error) {
+ computeSystem.handleLock.RLock()
+ defer computeSystem.handleLock.RUnlock()
+
+ operation := "hcsshim::ComputeSystem::Modify"
+ computeSystem.logOperationBegin(operation)
+ defer computeSystem.logOperationEnd(err)
+
+ if computeSystem.handle == 0 {
+ return makeSystemError(computeSystem, "Modify", "", ErrAlreadyClosed, nil)
+ }
+
+ requestJSON, err := json.Marshal(config)
+ if err != nil {
+ return err
+ }
+
+ requestString := string(requestJSON)
+
+ logrus.WithFields(computeSystem.logctx).
+ WithField(logfields.JSON, requestString).
+ Debug("HCS ComputeSystem Modify Document")
+
+ var resultp *uint16
+ completed := false
+ go syscallWatcher(computeSystem.logctx, &completed)
+ err = hcsModifyComputeSystem(computeSystem.handle, requestString, &resultp)
+ completed = true
+ events := processHcsResult(resultp)
+ if err != nil {
+ return makeSystemError(computeSystem, "Modify", requestString, err, events)
+ }
+
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/utils.go b/vendor/github.com/Microsoft/hcsshim/internal/hcs/utils.go
index bd6e2d94a..a638677ed 100644
--- a/vendor/github.com/Microsoft/hcsshim/utils.go
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hcs/utils.go
@@ -1,4 +1,4 @@
-package hcsshim
+package hcs
import (
"io"
diff --git a/vendor/github.com/Microsoft/hcsshim/waithelper.go b/vendor/github.com/Microsoft/hcsshim/internal/hcs/waithelper.go
index b7be20ea0..91e212c57 100644
--- a/vendor/github.com/Microsoft/hcsshim/waithelper.go
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hcs/waithelper.go
@@ -1,4 +1,4 @@
-package hcsshim
+package hcs
import (
"time"
@@ -6,13 +6,13 @@ import (
"github.com/sirupsen/logrus"
)
-func processAsyncHcsResult(err error, resultp *uint16, callbackNumber uintptr, expectedNotification hcsNotification, timeout *time.Duration) error {
- err = processHcsResult(err, resultp)
+func processAsyncHcsResult(err error, resultp *uint16, callbackNumber uintptr, expectedNotification hcsNotification, timeout *time.Duration) ([]ErrorEvent, error) {
+ events := processHcsResult(resultp)
if IsPending(err) {
- return waitForNotification(callbackNumber, expectedNotification, timeout)
+ return nil, waitForNotification(callbackNumber, expectedNotification, timeout)
}
- return err
+ return events, err
}
func waitForNotification(callbackNumber uintptr, expectedNotification hcsNotification, timeout *time.Duration) error {
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hcs/watcher.go b/vendor/github.com/Microsoft/hcsshim/internal/hcs/watcher.go
new file mode 100644
index 000000000..e09dd1334
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hcs/watcher.go
@@ -0,0 +1,33 @@
+package hcs
+
+import (
+ "time"
+
+ "github.com/Microsoft/hcsshim/internal/logfields"
+ "github.com/Microsoft/hcsshim/internal/timeout"
+ "github.com/sirupsen/logrus"
+)
+
+// syscallWatcher is used as a very simple goroutine around calls into
+// the platform. In some cases, we have seen HCS APIs not returning due to
+// various bugs, and the goroutine making the syscall ends up not returning,
+// prior to its async callback. By spinning up a syscallWatcher, it allows
+// us to at least log a warning if a syscall doesn't complete in a reasonable
+// amount of time.
+//
+// Usage is:
+//
+// completed := false
+// go syscallWatcher(context, &completed)
+// <syscall>
+// completed = true
+//
+func syscallWatcher(context logrus.Fields, syscallCompleted *bool) {
+ time.Sleep(timeout.SyscallWatcher)
+ if *syscallCompleted {
+ return
+ }
+ logrus.WithFields(context).
+ WithField(logfields.Timeout, timeout.SyscallWatcher).
+ Warning("Syscall did not complete within operation timeout. This may indicate a platform issue. If it appears to be making no forward progress, obtain the stacks and see if there is a syscall stuck in the platform API for a significant length of time.")
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hcs/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/internal/hcs/zsyscall_windows.go
new file mode 100644
index 000000000..877c69a14
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hcs/zsyscall_windows.go
@@ -0,0 +1,462 @@
+// Code generated mksyscall_windows.exe DO NOT EDIT
+
+package hcs
+
+import (
+ "syscall"
+ "unsafe"
+
+ "github.com/Microsoft/hcsshim/internal/interop"
+ "golang.org/x/sys/windows"
+)
+
+var _ unsafe.Pointer
+
+// Do the interface allocations only once for common
+// Errno values.
+const (
+ errnoERROR_IO_PENDING = 997
+)
+
+var (
+ errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
+)
+
+// errnoErr returns common boxed Errno values, to prevent
+// allocations at runtime.
+func errnoErr(e syscall.Errno) error {
+ switch e {
+ case 0:
+ return nil
+ case errnoERROR_IO_PENDING:
+ return errERROR_IO_PENDING
+ }
+ // TODO: add more here, after collecting data on the common
+ // error values see on Windows. (perhaps when running
+ // all.bat?)
+ return e
+}
+
+var (
+ modvmcompute = windows.NewLazySystemDLL("vmcompute.dll")
+
+ procHcsEnumerateComputeSystems = modvmcompute.NewProc("HcsEnumerateComputeSystems")
+ procHcsCreateComputeSystem = modvmcompute.NewProc("HcsCreateComputeSystem")
+ procHcsOpenComputeSystem = modvmcompute.NewProc("HcsOpenComputeSystem")
+ procHcsCloseComputeSystem = modvmcompute.NewProc("HcsCloseComputeSystem")
+ procHcsStartComputeSystem = modvmcompute.NewProc("HcsStartComputeSystem")
+ procHcsShutdownComputeSystem = modvmcompute.NewProc("HcsShutdownComputeSystem")
+ procHcsTerminateComputeSystem = modvmcompute.NewProc("HcsTerminateComputeSystem")
+ procHcsPauseComputeSystem = modvmcompute.NewProc("HcsPauseComputeSystem")
+ procHcsResumeComputeSystem = modvmcompute.NewProc("HcsResumeComputeSystem")
+ procHcsGetComputeSystemProperties = modvmcompute.NewProc("HcsGetComputeSystemProperties")
+ procHcsModifyComputeSystem = modvmcompute.NewProc("HcsModifyComputeSystem")
+ procHcsRegisterComputeSystemCallback = modvmcompute.NewProc("HcsRegisterComputeSystemCallback")
+ procHcsUnregisterComputeSystemCallback = modvmcompute.NewProc("HcsUnregisterComputeSystemCallback")
+ procHcsCreateProcess = modvmcompute.NewProc("HcsCreateProcess")
+ procHcsOpenProcess = modvmcompute.NewProc("HcsOpenProcess")
+ procHcsCloseProcess = modvmcompute.NewProc("HcsCloseProcess")
+ procHcsTerminateProcess = modvmcompute.NewProc("HcsTerminateProcess")
+
+ procHcsGetProcessInfo = modvmcompute.NewProc("HcsGetProcessInfo")
+ procHcsGetProcessProperties = modvmcompute.NewProc("HcsGetProcessProperties")
+ procHcsModifyProcess = modvmcompute.NewProc("HcsModifyProcess")
+ procHcsGetServiceProperties = modvmcompute.NewProc("HcsGetServiceProperties")
+ procHcsRegisterProcessCallback = modvmcompute.NewProc("HcsRegisterProcessCallback")
+ procHcsUnregisterProcessCallback = modvmcompute.NewProc("HcsUnregisterProcessCallback")
+)
+
+func hcsEnumerateComputeSystems(query string, computeSystems **uint16, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(query)
+ if hr != nil {
+ return
+ }
+ return _hcsEnumerateComputeSystems(_p0, computeSystems, result)
+}
+
+func _hcsEnumerateComputeSystems(query *uint16, computeSystems **uint16, result **uint16) (hr error) {
+ if hr = procHcsEnumerateComputeSystems.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsEnumerateComputeSystems.Addr(), 3, uintptr(unsafe.Pointer(query)), uintptr(unsafe.Pointer(computeSystems)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsCreateComputeSystem(id string, configuration string, identity syscall.Handle, computeSystem *hcsSystem, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ var _p1 *uint16
+ _p1, hr = syscall.UTF16PtrFromString(configuration)
+ if hr != nil {
+ return
+ }
+ return _hcsCreateComputeSystem(_p0, _p1, identity, computeSystem, result)
+}
+
+func _hcsCreateComputeSystem(id *uint16, configuration *uint16, identity syscall.Handle, computeSystem *hcsSystem, result **uint16) (hr error) {
+ if hr = procHcsCreateComputeSystem.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procHcsCreateComputeSystem.Addr(), 5, uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(configuration)), uintptr(identity), uintptr(unsafe.Pointer(computeSystem)), uintptr(unsafe.Pointer(result)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsOpenComputeSystem(id string, computeSystem *hcsSystem, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ return _hcsOpenComputeSystem(_p0, computeSystem, result)
+}
+
+func _hcsOpenComputeSystem(id *uint16, computeSystem *hcsSystem, result **uint16) (hr error) {
+ if hr = procHcsOpenComputeSystem.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsOpenComputeSystem.Addr(), 3, uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(computeSystem)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsCloseComputeSystem(computeSystem hcsSystem) (hr error) {
+ if hr = procHcsCloseComputeSystem.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsCloseComputeSystem.Addr(), 1, uintptr(computeSystem), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsStartComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(options)
+ if hr != nil {
+ return
+ }
+ return _hcsStartComputeSystem(computeSystem, _p0, result)
+}
+
+func _hcsStartComputeSystem(computeSystem hcsSystem, options *uint16, result **uint16) (hr error) {
+ if hr = procHcsStartComputeSystem.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsStartComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsShutdownComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(options)
+ if hr != nil {
+ return
+ }
+ return _hcsShutdownComputeSystem(computeSystem, _p0, result)
+}
+
+func _hcsShutdownComputeSystem(computeSystem hcsSystem, options *uint16, result **uint16) (hr error) {
+ if hr = procHcsShutdownComputeSystem.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsShutdownComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsTerminateComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(options)
+ if hr != nil {
+ return
+ }
+ return _hcsTerminateComputeSystem(computeSystem, _p0, result)
+}
+
+func _hcsTerminateComputeSystem(computeSystem hcsSystem, options *uint16, result **uint16) (hr error) {
+ if hr = procHcsTerminateComputeSystem.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsTerminateComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsPauseComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(options)
+ if hr != nil {
+ return
+ }
+ return _hcsPauseComputeSystem(computeSystem, _p0, result)
+}
+
+func _hcsPauseComputeSystem(computeSystem hcsSystem, options *uint16, result **uint16) (hr error) {
+ if hr = procHcsPauseComputeSystem.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsPauseComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsResumeComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(options)
+ if hr != nil {
+ return
+ }
+ return _hcsResumeComputeSystem(computeSystem, _p0, result)
+}
+
+func _hcsResumeComputeSystem(computeSystem hcsSystem, options *uint16, result **uint16) (hr error) {
+ if hr = procHcsResumeComputeSystem.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsResumeComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsGetComputeSystemProperties(computeSystem hcsSystem, propertyQuery string, properties **uint16, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(propertyQuery)
+ if hr != nil {
+ return
+ }
+ return _hcsGetComputeSystemProperties(computeSystem, _p0, properties, result)
+}
+
+func _hcsGetComputeSystemProperties(computeSystem hcsSystem, propertyQuery *uint16, properties **uint16, result **uint16) (hr error) {
+ if hr = procHcsGetComputeSystemProperties.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procHcsGetComputeSystemProperties.Addr(), 4, uintptr(computeSystem), uintptr(unsafe.Pointer(propertyQuery)), uintptr(unsafe.Pointer(properties)), uintptr(unsafe.Pointer(result)), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsModifyComputeSystem(computeSystem hcsSystem, configuration string, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(configuration)
+ if hr != nil {
+ return
+ }
+ return _hcsModifyComputeSystem(computeSystem, _p0, result)
+}
+
+func _hcsModifyComputeSystem(computeSystem hcsSystem, configuration *uint16, result **uint16) (hr error) {
+ if hr = procHcsModifyComputeSystem.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsModifyComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(configuration)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsRegisterComputeSystemCallback(computeSystem hcsSystem, callback uintptr, context uintptr, callbackHandle *hcsCallback) (hr error) {
+ if hr = procHcsRegisterComputeSystemCallback.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procHcsRegisterComputeSystemCallback.Addr(), 4, uintptr(computeSystem), uintptr(callback), uintptr(context), uintptr(unsafe.Pointer(callbackHandle)), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsUnregisterComputeSystemCallback(callbackHandle hcsCallback) (hr error) {
+ if hr = procHcsUnregisterComputeSystemCallback.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsUnregisterComputeSystemCallback.Addr(), 1, uintptr(callbackHandle), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsCreateProcess(computeSystem hcsSystem, processParameters string, processInformation *hcsProcessInformation, process *hcsProcess, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(processParameters)
+ if hr != nil {
+ return
+ }
+ return _hcsCreateProcess(computeSystem, _p0, processInformation, process, result)
+}
+
+func _hcsCreateProcess(computeSystem hcsSystem, processParameters *uint16, processInformation *hcsProcessInformation, process *hcsProcess, result **uint16) (hr error) {
+ if hr = procHcsCreateProcess.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procHcsCreateProcess.Addr(), 5, uintptr(computeSystem), uintptr(unsafe.Pointer(processParameters)), uintptr(unsafe.Pointer(processInformation)), uintptr(unsafe.Pointer(process)), uintptr(unsafe.Pointer(result)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsOpenProcess(computeSystem hcsSystem, pid uint32, process *hcsProcess, result **uint16) (hr error) {
+ if hr = procHcsOpenProcess.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procHcsOpenProcess.Addr(), 4, uintptr(computeSystem), uintptr(pid), uintptr(unsafe.Pointer(process)), uintptr(unsafe.Pointer(result)), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsCloseProcess(process hcsProcess) (hr error) {
+ if hr = procHcsCloseProcess.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsCloseProcess.Addr(), 1, uintptr(process), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsTerminateProcess(process hcsProcess, result **uint16) (hr error) {
+ if hr = procHcsTerminateProcess.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsTerminateProcess.Addr(), 2, uintptr(process), uintptr(unsafe.Pointer(result)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsSignalProcess(process hcsProcess, options string, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(options)
+ if hr != nil {
+ return
+ }
+ return _hcsSignalProcess(process, _p0, result)
+}
+
+func _hcsSignalProcess(process hcsProcess, options *uint16, result **uint16) (hr error) {
+ if hr = procHcsTerminateProcess.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsTerminateProcess.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsGetProcessInfo(process hcsProcess, processInformation *hcsProcessInformation, result **uint16) (hr error) {
+ if hr = procHcsGetProcessInfo.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsGetProcessInfo.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(processInformation)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsGetProcessProperties(process hcsProcess, processProperties **uint16, result **uint16) (hr error) {
+ if hr = procHcsGetProcessProperties.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsGetProcessProperties.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(processProperties)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsModifyProcess(process hcsProcess, settings string, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(settings)
+ if hr != nil {
+ return
+ }
+ return _hcsModifyProcess(process, _p0, result)
+}
+
+func _hcsModifyProcess(process hcsProcess, settings *uint16, result **uint16) (hr error) {
+ if hr = procHcsModifyProcess.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsModifyProcess.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(settings)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsGetServiceProperties(propertyQuery string, properties **uint16, result **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(propertyQuery)
+ if hr != nil {
+ return
+ }
+ return _hcsGetServiceProperties(_p0, properties, result)
+}
+
+func _hcsGetServiceProperties(propertyQuery *uint16, properties **uint16, result **uint16) (hr error) {
+ if hr = procHcsGetServiceProperties.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsGetServiceProperties.Addr(), 3, uintptr(unsafe.Pointer(propertyQuery)), uintptr(unsafe.Pointer(properties)), uintptr(unsafe.Pointer(result)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsRegisterProcessCallback(process hcsProcess, callback uintptr, context uintptr, callbackHandle *hcsCallback) (hr error) {
+ if hr = procHcsRegisterProcessCallback.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procHcsRegisterProcessCallback.Addr(), 4, uintptr(process), uintptr(callback), uintptr(context), uintptr(unsafe.Pointer(callbackHandle)), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func hcsUnregisterProcessCallback(callbackHandle hcsCallback) (hr error) {
+ if hr = procHcsUnregisterProcessCallback.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procHcsUnregisterProcessCallback.Addr(), 1, uintptr(callbackHandle), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hcserror/hcserror.go b/vendor/github.com/Microsoft/hcsshim/internal/hcserror/hcserror.go
new file mode 100644
index 000000000..c8d362c66
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hcserror/hcserror.go
@@ -0,0 +1,51 @@
+package hcserror
+
+import (
+ "fmt"
+ "syscall"
+)
+
+const ERROR_GEN_FAILURE = syscall.Errno(31)
+
+type HcsError struct {
+ title string
+ rest string
+ Err error
+}
+
+func (e *HcsError) Error() string {
+ s := e.title
+ if len(s) > 0 && s[len(s)-1] != ' ' {
+ s += " "
+ }
+ s += fmt.Sprintf("failed in Win32: %s (0x%x)", e.Err, Win32FromError(e.Err))
+ if e.rest != "" {
+ if e.rest[0] != ' ' {
+ s += " "
+ }
+ s += e.rest
+ }
+ return s
+}
+
+func New(err error, title, rest string) error {
+ // Pass through DLL errors directly since they do not originate from HCS.
+ if _, ok := err.(*syscall.DLLError); ok {
+ return err
+ }
+ return &HcsError{title, rest, err}
+}
+
+func Errorf(err error, title, format string, a ...interface{}) error {
+ return New(err, title, fmt.Sprintf(format, a...))
+}
+
+func Win32FromError(err error) uint32 {
+ if herr, ok := err.(*HcsError); ok {
+ return Win32FromError(herr.Err)
+ }
+ if code, ok := err.(syscall.Errno); ok {
+ return uint32(code)
+ }
+ return uint32(ERROR_GEN_FAILURE)
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hns/hns.go b/vendor/github.com/Microsoft/hcsshim/internal/hns/hns.go
new file mode 100644
index 000000000..b2e475f53
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hns/hns.go
@@ -0,0 +1,23 @@
+package hns
+
+import "fmt"
+
+//go:generate go run ../../mksyscall_windows.go -output zsyscall_windows.go hns.go
+
+//sys _hnsCall(method string, path string, object string, response **uint16) (hr error) = vmcompute.HNSCall?
+
+type EndpointNotFoundError struct {
+ EndpointName string
+}
+
+func (e EndpointNotFoundError) Error() string {
+ return fmt.Sprintf("Endpoint %s not found", e.EndpointName)
+}
+
+type NetworkNotFoundError struct {
+ NetworkName string
+}
+
+func (e NetworkNotFoundError) Error() string {
+ return fmt.Sprintf("Network %s not found", e.NetworkName)
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsendpoint.go b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsendpoint.go
new file mode 100644
index 000000000..ce636458c
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsendpoint.go
@@ -0,0 +1,260 @@
+package hns
+
+import (
+ "encoding/json"
+ "net"
+
+ "github.com/sirupsen/logrus"
+)
+
+// HNSEndpoint represents a network endpoint in HNS
+type HNSEndpoint struct {
+ Id string `json:"ID,omitempty"`
+ Name string `json:",omitempty"`
+ VirtualNetwork string `json:",omitempty"`
+ VirtualNetworkName string `json:",omitempty"`
+ Policies []json.RawMessage `json:",omitempty"`
+ MacAddress string `json:",omitempty"`
+ IPAddress net.IP `json:",omitempty"`
+ DNSSuffix string `json:",omitempty"`
+ DNSServerList string `json:",omitempty"`
+ GatewayAddress string `json:",omitempty"`
+ EnableInternalDNS bool `json:",omitempty"`
+ DisableICC bool `json:",omitempty"`
+ PrefixLength uint8 `json:",omitempty"`
+ IsRemoteEndpoint bool `json:",omitempty"`
+ Namespace *Namespace `json:",omitempty"`
+}
+
+//SystemType represents the type of the system on which actions are done
+type SystemType string
+
+// SystemType const
+const (
+ ContainerType SystemType = "Container"
+ VirtualMachineType SystemType = "VirtualMachine"
+ HostType SystemType = "Host"
+)
+
+// EndpointAttachDetachRequest is the structure used to send request to the container to modify the system
+// Supported resource types are Network and Request Types are Add/Remove
+type EndpointAttachDetachRequest struct {
+ ContainerID string `json:"ContainerId,omitempty"`
+ SystemType SystemType `json:"SystemType"`
+ CompartmentID uint16 `json:"CompartmentId,omitempty"`
+ VirtualNICName string `json:"VirtualNicName,omitempty"`
+}
+
+// EndpointResquestResponse is object to get the endpoint request response
+type EndpointResquestResponse struct {
+ Success bool
+ Error string
+}
+
+// HNSEndpointRequest makes a HNS call to modify/query a network endpoint
+func HNSEndpointRequest(method, path, request string) (*HNSEndpoint, error) {
+ endpoint := &HNSEndpoint{}
+ err := hnsCall(method, "/endpoints/"+path, request, &endpoint)
+ if err != nil {
+ return nil, err
+ }
+
+ return endpoint, nil
+}
+
+// HNSListEndpointRequest makes a HNS call to query the list of available endpoints
+func HNSListEndpointRequest() ([]HNSEndpoint, error) {
+ var endpoint []HNSEndpoint
+ err := hnsCall("GET", "/endpoints/", "", &endpoint)
+ if err != nil {
+ return nil, err
+ }
+
+ return endpoint, nil
+}
+
+// GetHNSEndpointByID get the Endpoint by ID
+func GetHNSEndpointByID(endpointID string) (*HNSEndpoint, error) {
+ return HNSEndpointRequest("GET", endpointID, "")
+}
+
+// GetHNSEndpointByName gets the endpoint filtered by Name
+func GetHNSEndpointByName(endpointName string) (*HNSEndpoint, error) {
+ hnsResponse, err := HNSListEndpointRequest()
+ if err != nil {
+ return nil, err
+ }
+ for _, hnsEndpoint := range hnsResponse {
+ if hnsEndpoint.Name == endpointName {
+ return &hnsEndpoint, nil
+ }
+ }
+ return nil, EndpointNotFoundError{EndpointName: endpointName}
+}
+
+// Create Endpoint by sending EndpointRequest to HNS. TODO: Create a separate HNS interface to place all these methods
+func (endpoint *HNSEndpoint) Create() (*HNSEndpoint, error) {
+ operation := "Create"
+ title := "hcsshim::HNSEndpoint::" + operation
+ logrus.Debugf(title+" id=%s", endpoint.Id)
+
+ jsonString, err := json.Marshal(endpoint)
+ if err != nil {
+ return nil, err
+ }
+ return HNSEndpointRequest("POST", "", string(jsonString))
+}
+
+// Delete Endpoint by sending EndpointRequest to HNS
+func (endpoint *HNSEndpoint) Delete() (*HNSEndpoint, error) {
+ operation := "Delete"
+ title := "hcsshim::HNSEndpoint::" + operation
+ logrus.Debugf(title+" id=%s", endpoint.Id)
+
+ return HNSEndpointRequest("DELETE", endpoint.Id, "")
+}
+
+// Update Endpoint
+func (endpoint *HNSEndpoint) Update() (*HNSEndpoint, error) {
+ operation := "Update"
+ title := "hcsshim::HNSEndpoint::" + operation
+ logrus.Debugf(title+" id=%s", endpoint.Id)
+ jsonString, err := json.Marshal(endpoint)
+ if err != nil {
+ return nil, err
+ }
+ err = hnsCall("POST", "/endpoints/"+endpoint.Id, string(jsonString), &endpoint)
+
+ return endpoint, err
+}
+
+// ApplyACLPolicy applies a set of ACL Policies on the Endpoint
+func (endpoint *HNSEndpoint) ApplyACLPolicy(policies ...*ACLPolicy) error {
+ operation := "ApplyACLPolicy"
+ title := "hcsshim::HNSEndpoint::" + operation
+ logrus.Debugf(title+" id=%s", endpoint.Id)
+
+ for _, policy := range policies {
+ if policy == nil {
+ continue
+ }
+ jsonString, err := json.Marshal(policy)
+ if err != nil {
+ return err
+ }
+ endpoint.Policies = append(endpoint.Policies, jsonString)
+ }
+
+ _, err := endpoint.Update()
+ return err
+}
+
+// ContainerAttach attaches an endpoint to container
+func (endpoint *HNSEndpoint) ContainerAttach(containerID string, compartmentID uint16) error {
+ operation := "ContainerAttach"
+ title := "hcsshim::HNSEndpoint::" + operation
+ logrus.Debugf(title+" id=%s", endpoint.Id)
+
+ requestMessage := &EndpointAttachDetachRequest{
+ ContainerID: containerID,
+ CompartmentID: compartmentID,
+ SystemType: ContainerType,
+ }
+ response := &EndpointResquestResponse{}
+ jsonString, err := json.Marshal(requestMessage)
+ if err != nil {
+ return err
+ }
+ return hnsCall("POST", "/endpoints/"+endpoint.Id+"/attach", string(jsonString), &response)
+}
+
+// ContainerDetach detaches an endpoint from container
+func (endpoint *HNSEndpoint) ContainerDetach(containerID string) error {
+ operation := "ContainerDetach"
+ title := "hcsshim::HNSEndpoint::" + operation
+ logrus.Debugf(title+" id=%s", endpoint.Id)
+
+ requestMessage := &EndpointAttachDetachRequest{
+ ContainerID: containerID,
+ SystemType: ContainerType,
+ }
+ response := &EndpointResquestResponse{}
+
+ jsonString, err := json.Marshal(requestMessage)
+ if err != nil {
+ return err
+ }
+ return hnsCall("POST", "/endpoints/"+endpoint.Id+"/detach", string(jsonString), &response)
+}
+
+// HostAttach attaches a nic on the host
+func (endpoint *HNSEndpoint) HostAttach(compartmentID uint16) error {
+ operation := "HostAttach"
+ title := "hcsshim::HNSEndpoint::" + operation
+ logrus.Debugf(title+" id=%s", endpoint.Id)
+ requestMessage := &EndpointAttachDetachRequest{
+ CompartmentID: compartmentID,
+ SystemType: HostType,
+ }
+ response := &EndpointResquestResponse{}
+
+ jsonString, err := json.Marshal(requestMessage)
+ if err != nil {
+ return err
+ }
+ return hnsCall("POST", "/endpoints/"+endpoint.Id+"/attach", string(jsonString), &response)
+
+}
+
+// HostDetach detaches a nic on the host
+func (endpoint *HNSEndpoint) HostDetach() error {
+ operation := "HostDetach"
+ title := "hcsshim::HNSEndpoint::" + operation
+ logrus.Debugf(title+" id=%s", endpoint.Id)
+ requestMessage := &EndpointAttachDetachRequest{
+ SystemType: HostType,
+ }
+ response := &EndpointResquestResponse{}
+
+ jsonString, err := json.Marshal(requestMessage)
+ if err != nil {
+ return err
+ }
+ return hnsCall("POST", "/endpoints/"+endpoint.Id+"/detach", string(jsonString), &response)
+}
+
+// VirtualMachineNICAttach attaches a endpoint to a virtual machine
+func (endpoint *HNSEndpoint) VirtualMachineNICAttach(virtualMachineNICName string) error {
+ operation := "VirtualMachineNicAttach"
+ title := "hcsshim::HNSEndpoint::" + operation
+ logrus.Debugf(title+" id=%s", endpoint.Id)
+ requestMessage := &EndpointAttachDetachRequest{
+ VirtualNICName: virtualMachineNICName,
+ SystemType: VirtualMachineType,
+ }
+ response := &EndpointResquestResponse{}
+
+ jsonString, err := json.Marshal(requestMessage)
+ if err != nil {
+ return err
+ }
+ return hnsCall("POST", "/endpoints/"+endpoint.Id+"/attach", string(jsonString), &response)
+}
+
+// VirtualMachineNICDetach detaches a endpoint from a virtual machine
+func (endpoint *HNSEndpoint) VirtualMachineNICDetach() error {
+ operation := "VirtualMachineNicDetach"
+ title := "hcsshim::HNSEndpoint::" + operation
+ logrus.Debugf(title+" id=%s", endpoint.Id)
+
+ requestMessage := &EndpointAttachDetachRequest{
+ SystemType: VirtualMachineType,
+ }
+ response := &EndpointResquestResponse{}
+
+ jsonString, err := json.Marshal(requestMessage)
+ if err != nil {
+ return err
+ }
+ return hnsCall("POST", "/endpoints/"+endpoint.Id+"/detach", string(jsonString), &response)
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/hnsfuncs.go b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsfuncs.go
index 2c1b979ae..969d1b263 100644
--- a/vendor/github.com/Microsoft/hcsshim/hnsfuncs.go
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsfuncs.go
@@ -1,9 +1,11 @@
-package hcsshim
+package hns
import (
"encoding/json"
"fmt"
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/Microsoft/hcsshim/internal/interop"
"github.com/sirupsen/logrus"
)
@@ -13,9 +15,9 @@ func hnsCall(method, path, request string, returnResponse interface{}) error {
err := _hnsCall(method, path, request, &responseBuffer)
if err != nil {
- return makeError(err, "hnsCall ", "")
+ return hcserror.New(err, "hnsCall ", "")
}
- response := convertAndFreeCoTaskMemString(responseBuffer)
+ response := interop.ConvertAndFreeCoTaskMemString(responseBuffer)
hnsresponse := &hnsResponse{}
if err = json.Unmarshal([]byte(response), &hnsresponse); err != nil {
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsglobals.go b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsglobals.go
new file mode 100644
index 000000000..a8d8cc56a
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsglobals.go
@@ -0,0 +1,28 @@
+package hns
+
+type HNSGlobals struct {
+ Version HNSVersion `json:"Version"`
+}
+
+type HNSVersion struct {
+ Major int `json:"Major"`
+ Minor int `json:"Minor"`
+}
+
+var (
+ HNSVersion1803 = HNSVersion{Major: 7, Minor: 2}
+)
+
+func GetHNSGlobals() (*HNSGlobals, error) {
+ var version HNSVersion
+ err := hnsCall("GET", "/globals/version", "", &version)
+ if err != nil {
+ return nil, err
+ }
+
+ globals := &HNSGlobals{
+ Version: version,
+ }
+
+ return globals, nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsnetwork.go b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsnetwork.go
new file mode 100644
index 000000000..7e859de91
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnsnetwork.go
@@ -0,0 +1,141 @@
+package hns
+
+import (
+ "encoding/json"
+ "net"
+
+ "github.com/sirupsen/logrus"
+)
+
+// Subnet is assoicated with a network and represents a list
+// of subnets available to the network
+type Subnet struct {
+ AddressPrefix string `json:",omitempty"`
+ GatewayAddress string `json:",omitempty"`
+ Policies []json.RawMessage `json:",omitempty"`
+}
+
+// MacPool is assoicated with a network and represents a list
+// of macaddresses available to the network
+type MacPool struct {
+ StartMacAddress string `json:",omitempty"`
+ EndMacAddress string `json:",omitempty"`
+}
+
+// HNSNetwork represents a network in HNS
+type HNSNetwork struct {
+ Id string `json:"ID,omitempty"`
+ Name string `json:",omitempty"`
+ Type string `json:",omitempty"`
+ NetworkAdapterName string `json:",omitempty"`
+ SourceMac string `json:",omitempty"`
+ Policies []json.RawMessage `json:",omitempty"`
+ MacPools []MacPool `json:",omitempty"`
+ Subnets []Subnet `json:",omitempty"`
+ DNSSuffix string `json:",omitempty"`
+ DNSServerList string `json:",omitempty"`
+ DNSServerCompartment uint32 `json:",omitempty"`
+ ManagementIP string `json:",omitempty"`
+ AutomaticDNS bool `json:",omitempty"`
+}
+
+type hnsNetworkResponse struct {
+ Success bool
+ Error string
+ Output HNSNetwork
+}
+
+type hnsResponse struct {
+ Success bool
+ Error string
+ Output json.RawMessage
+}
+
+// HNSNetworkRequest makes a call into HNS to update/query a single network
+func HNSNetworkRequest(method, path, request string) (*HNSNetwork, error) {
+ var network HNSNetwork
+ err := hnsCall(method, "/networks/"+path, request, &network)
+ if err != nil {
+ return nil, err
+ }
+
+ return &network, nil
+}
+
+// HNSListNetworkRequest makes a HNS call to query the list of available networks
+func HNSListNetworkRequest(method, path, request string) ([]HNSNetwork, error) {
+ var network []HNSNetwork
+ err := hnsCall(method, "/networks/"+path, request, &network)
+ if err != nil {
+ return nil, err
+ }
+
+ return network, nil
+}
+
+// GetHNSNetworkByID
+func GetHNSNetworkByID(networkID string) (*HNSNetwork, error) {
+ return HNSNetworkRequest("GET", networkID, "")
+}
+
+// GetHNSNetworkName filtered by Name
+func GetHNSNetworkByName(networkName string) (*HNSNetwork, error) {
+ hsnnetworks, err := HNSListNetworkRequest("GET", "", "")
+ if err != nil {
+ return nil, err
+ }
+ for _, hnsnetwork := range hsnnetworks {
+ if hnsnetwork.Name == networkName {
+ return &hnsnetwork, nil
+ }
+ }
+ return nil, NetworkNotFoundError{NetworkName: networkName}
+}
+
+// Create Network by sending NetworkRequest to HNS.
+func (network *HNSNetwork) Create() (*HNSNetwork, error) {
+ operation := "Create"
+ title := "hcsshim::HNSNetwork::" + operation
+ logrus.Debugf(title+" id=%s", network.Id)
+
+ jsonString, err := json.Marshal(network)
+ if err != nil {
+ return nil, err
+ }
+ return HNSNetworkRequest("POST", "", string(jsonString))
+}
+
+// Delete Network by sending NetworkRequest to HNS
+func (network *HNSNetwork) Delete() (*HNSNetwork, error) {
+ operation := "Delete"
+ title := "hcsshim::HNSNetwork::" + operation
+ logrus.Debugf(title+" id=%s", network.Id)
+
+ return HNSNetworkRequest("DELETE", network.Id, "")
+}
+
+// Creates an endpoint on the Network.
+func (network *HNSNetwork) NewEndpoint(ipAddress net.IP, macAddress net.HardwareAddr) *HNSEndpoint {
+ return &HNSEndpoint{
+ VirtualNetwork: network.Id,
+ IPAddress: ipAddress,
+ MacAddress: string(macAddress),
+ }
+}
+
+func (network *HNSNetwork) CreateEndpoint(endpoint *HNSEndpoint) (*HNSEndpoint, error) {
+ operation := "CreateEndpoint"
+ title := "hcsshim::HNSNetwork::" + operation
+ logrus.Debugf(title+" id=%s, endpointId=%s", network.Id, endpoint.Id)
+
+ endpoint.VirtualNetwork = network.Id
+ return endpoint.Create()
+}
+
+func (network *HNSNetwork) CreateRemoteEndpoint(endpoint *HNSEndpoint) (*HNSEndpoint, error) {
+ operation := "CreateRemoteEndpoint"
+ title := "hcsshim::HNSNetwork::" + operation
+ logrus.Debugf(title+" id=%s", network.Id)
+ endpoint.IsRemoteEndpoint = true
+ return network.CreateEndpoint(endpoint)
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go
new file mode 100644
index 000000000..2318a4fce
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go
@@ -0,0 +1,98 @@
+package hns
+
+// Type of Request Support in ModifySystem
+type PolicyType string
+
+// RequestType const
+const (
+ Nat PolicyType = "NAT"
+ ACL PolicyType = "ACL"
+ PA PolicyType = "PA"
+ VLAN PolicyType = "VLAN"
+ VSID PolicyType = "VSID"
+ VNet PolicyType = "VNET"
+ L2Driver PolicyType = "L2Driver"
+ Isolation PolicyType = "Isolation"
+ QOS PolicyType = "QOS"
+ OutboundNat PolicyType = "OutBoundNAT"
+ ExternalLoadBalancer PolicyType = "ELB"
+ Route PolicyType = "ROUTE"
+)
+
+type NatPolicy struct {
+ Type PolicyType `json:"Type"`
+ Protocol string
+ InternalPort uint16
+ ExternalPort uint16
+}
+
+type QosPolicy struct {
+ Type PolicyType `json:"Type"`
+ MaximumOutgoingBandwidthInBytes uint64
+}
+
+type IsolationPolicy struct {
+ Type PolicyType `json:"Type"`
+ VLAN uint
+ VSID uint
+ InDefaultIsolation bool
+}
+
+type VlanPolicy struct {
+ Type PolicyType `json:"Type"`
+ VLAN uint
+}
+
+type VsidPolicy struct {
+ Type PolicyType `json:"Type"`
+ VSID uint
+}
+
+type PaPolicy struct {
+ Type PolicyType `json:"Type"`
+ PA string `json:"PA"`
+}
+
+type OutboundNatPolicy struct {
+ Policy
+ VIP string `json:"VIP,omitempty"`
+ Exceptions []string `json:"ExceptionList,omitempty"`
+}
+
+type ActionType string
+type DirectionType string
+type RuleType string
+
+const (
+ Allow ActionType = "Allow"
+ Block ActionType = "Block"
+
+ In DirectionType = "In"
+ Out DirectionType = "Out"
+
+ Host RuleType = "Host"
+ Switch RuleType = "Switch"
+)
+
+type ACLPolicy struct {
+ Type PolicyType `json:"Type"`
+ Id string `json:"Id,omitempty"`
+ Protocol uint16
+ Protocols string `json:"Protocols,omitempty"`
+ InternalPort uint16
+ Action ActionType
+ Direction DirectionType
+ LocalAddresses string
+ RemoteAddresses string
+ LocalPorts string `json:"LocalPorts,omitempty"`
+ LocalPort uint16
+ RemotePorts string `json:"RemotePorts,omitempty"`
+ RemotePort uint16
+ RuleType RuleType `json:"RuleType,omitempty"`
+ Priority uint16
+ ServiceName string
+}
+
+type Policy struct {
+ Type PolicyType `json:"Type"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicylist.go b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicylist.go
new file mode 100644
index 000000000..31322a681
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicylist.go
@@ -0,0 +1,201 @@
+package hns
+
+import (
+ "encoding/json"
+
+ "github.com/sirupsen/logrus"
+)
+
+// RoutePolicy is a structure defining schema for Route based Policy
+type RoutePolicy struct {
+ Policy
+ DestinationPrefix string `json:"DestinationPrefix,omitempty"`
+ NextHop string `json:"NextHop,omitempty"`
+ EncapEnabled bool `json:"NeedEncap,omitempty"`
+}
+
+// ELBPolicy is a structure defining schema for ELB LoadBalancing based Policy
+type ELBPolicy struct {
+ LBPolicy
+ SourceVIP string `json:"SourceVIP,omitempty"`
+ VIPs []string `json:"VIPs,omitempty"`
+ ILB bool `json:"ILB,omitempty"`
+ DSR bool `json:"IsDSR,omitempty"`
+}
+
+// LBPolicy is a structure defining schema for LoadBalancing based Policy
+type LBPolicy struct {
+ Policy
+ Protocol uint16 `json:"Protocol,omitempty"`
+ InternalPort uint16
+ ExternalPort uint16
+}
+
+// PolicyList is a structure defining schema for Policy list request
+type PolicyList struct {
+ ID string `json:"ID,omitempty"`
+ EndpointReferences []string `json:"References,omitempty"`
+ Policies []json.RawMessage `json:"Policies,omitempty"`
+}
+
+// HNSPolicyListRequest makes a call into HNS to update/query a single network
+func HNSPolicyListRequest(method, path, request string) (*PolicyList, error) {
+ var policy PolicyList
+ err := hnsCall(method, "/policylists/"+path, request, &policy)
+ if err != nil {
+ return nil, err
+ }
+
+ return &policy, nil
+}
+
+// HNSListPolicyListRequest gets all the policy list
+func HNSListPolicyListRequest() ([]PolicyList, error) {
+ var plist []PolicyList
+ err := hnsCall("GET", "/policylists/", "", &plist)
+ if err != nil {
+ return nil, err
+ }
+
+ return plist, nil
+}
+
+// PolicyListRequest makes a HNS call to modify/query a network policy list
+func PolicyListRequest(method, path, request string) (*PolicyList, error) {
+ policylist := &PolicyList{}
+ err := hnsCall(method, "/policylists/"+path, request, &policylist)
+ if err != nil {
+ return nil, err
+ }
+
+ return policylist, nil
+}
+
+// GetPolicyListByID get the policy list by ID
+func GetPolicyListByID(policyListID string) (*PolicyList, error) {
+ return PolicyListRequest("GET", policyListID, "")
+}
+
+// Create PolicyList by sending PolicyListRequest to HNS.
+func (policylist *PolicyList) Create() (*PolicyList, error) {
+ operation := "Create"
+ title := "hcsshim::PolicyList::" + operation
+ logrus.Debugf(title+" id=%s", policylist.ID)
+ jsonString, err := json.Marshal(policylist)
+ if err != nil {
+ return nil, err
+ }
+ return PolicyListRequest("POST", "", string(jsonString))
+}
+
+// Delete deletes PolicyList
+func (policylist *PolicyList) Delete() (*PolicyList, error) {
+ operation := "Delete"
+ title := "hcsshim::PolicyList::" + operation
+ logrus.Debugf(title+" id=%s", policylist.ID)
+
+ return PolicyListRequest("DELETE", policylist.ID, "")
+}
+
+// AddEndpoint add an endpoint to a Policy List
+func (policylist *PolicyList) AddEndpoint(endpoint *HNSEndpoint) (*PolicyList, error) {
+ operation := "AddEndpoint"
+ title := "hcsshim::PolicyList::" + operation
+ logrus.Debugf(title+" id=%s, endpointId:%s", policylist.ID, endpoint.Id)
+
+ _, err := policylist.Delete()
+ if err != nil {
+ return nil, err
+ }
+
+ // Add Endpoint to the Existing List
+ policylist.EndpointReferences = append(policylist.EndpointReferences, "/endpoints/"+endpoint.Id)
+
+ return policylist.Create()
+}
+
+// RemoveEndpoint removes an endpoint from the Policy List
+func (policylist *PolicyList) RemoveEndpoint(endpoint *HNSEndpoint) (*PolicyList, error) {
+ operation := "RemoveEndpoint"
+ title := "hcsshim::PolicyList::" + operation
+ logrus.Debugf(title+" id=%s, endpointId:%s", policylist.ID, endpoint.Id)
+
+ _, err := policylist.Delete()
+ if err != nil {
+ return nil, err
+ }
+
+ elementToRemove := "/endpoints/" + endpoint.Id
+
+ var references []string
+
+ for _, endpointReference := range policylist.EndpointReferences {
+ if endpointReference == elementToRemove {
+ continue
+ }
+ references = append(references, endpointReference)
+ }
+ policylist.EndpointReferences = references
+ return policylist.Create()
+}
+
+// AddLoadBalancer policy list for the specified endpoints
+func AddLoadBalancer(endpoints []HNSEndpoint, isILB bool, sourceVIP, vip string, protocol uint16, internalPort uint16, externalPort uint16) (*PolicyList, error) {
+ operation := "AddLoadBalancer"
+ title := "hcsshim::PolicyList::" + operation
+ logrus.Debugf(title+" endpointId=%v, isILB=%v, sourceVIP=%s, vip=%s, protocol=%v, internalPort=%v, externalPort=%v", endpoints, isILB, sourceVIP, vip, protocol, internalPort, externalPort)
+
+ policylist := &PolicyList{}
+
+ elbPolicy := &ELBPolicy{
+ SourceVIP: sourceVIP,
+ ILB: isILB,
+ }
+
+ if len(vip) > 0 {
+ elbPolicy.VIPs = []string{vip}
+ }
+ elbPolicy.Type = ExternalLoadBalancer
+ elbPolicy.Protocol = protocol
+ elbPolicy.InternalPort = internalPort
+ elbPolicy.ExternalPort = externalPort
+
+ for _, endpoint := range endpoints {
+ policylist.EndpointReferences = append(policylist.EndpointReferences, "/endpoints/"+endpoint.Id)
+ }
+
+ jsonString, err := json.Marshal(elbPolicy)
+ if err != nil {
+ return nil, err
+ }
+ policylist.Policies = append(policylist.Policies, jsonString)
+ return policylist.Create()
+}
+
+// AddRoute adds route policy list for the specified endpoints
+func AddRoute(endpoints []HNSEndpoint, destinationPrefix string, nextHop string, encapEnabled bool) (*PolicyList, error) {
+ operation := "AddRoute"
+ title := "hcsshim::PolicyList::" + operation
+ logrus.Debugf(title+" destinationPrefix:%s", destinationPrefix)
+
+ policylist := &PolicyList{}
+
+ rPolicy := &RoutePolicy{
+ DestinationPrefix: destinationPrefix,
+ NextHop: nextHop,
+ EncapEnabled: encapEnabled,
+ }
+ rPolicy.Type = Route
+
+ for _, endpoint := range endpoints {
+ policylist.EndpointReferences = append(policylist.EndpointReferences, "/endpoints/"+endpoint.Id)
+ }
+
+ jsonString, err := json.Marshal(rPolicy)
+ if err != nil {
+ return nil, err
+ }
+
+ policylist.Policies = append(policylist.Policies, jsonString)
+ return policylist.Create()
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hns/hnssupport.go b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnssupport.go
new file mode 100644
index 000000000..d5efba7f2
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hns/hnssupport.go
@@ -0,0 +1,49 @@
+package hns
+
+import (
+ "github.com/sirupsen/logrus"
+)
+
+type HNSSupportedFeatures struct {
+ Acl HNSAclFeatures `json:"ACL"`
+}
+
+type HNSAclFeatures struct {
+ AclAddressLists bool `json:"AclAddressLists"`
+ AclNoHostRulePriority bool `json:"AclHostRulePriority"`
+ AclPortRanges bool `json:"AclPortRanges"`
+ AclRuleId bool `json:"AclRuleId"`
+}
+
+func GetHNSSupportedFeatures() HNSSupportedFeatures {
+ var hnsFeatures HNSSupportedFeatures
+
+ globals, err := GetHNSGlobals()
+ if err != nil {
+ // Expected on pre-1803 builds, all features will be false/unsupported
+ logrus.Debugf("Unable to obtain HNS globals: %s", err)
+ return hnsFeatures
+ }
+
+ hnsFeatures.Acl = HNSAclFeatures{
+ AclAddressLists: isHNSFeatureSupported(globals.Version, HNSVersion1803),
+ AclNoHostRulePriority: isHNSFeatureSupported(globals.Version, HNSVersion1803),
+ AclPortRanges: isHNSFeatureSupported(globals.Version, HNSVersion1803),
+ AclRuleId: isHNSFeatureSupported(globals.Version, HNSVersion1803),
+ }
+
+ return hnsFeatures
+}
+
+func isHNSFeatureSupported(currentVersion HNSVersion, minVersionSupported HNSVersion) bool {
+ if currentVersion.Major < minVersionSupported.Major {
+ return false
+ }
+ if currentVersion.Major > minVersionSupported.Major {
+ return true
+ }
+ if currentVersion.Minor < minVersionSupported.Minor {
+ return false
+ }
+ return true
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hns/namespace.go b/vendor/github.com/Microsoft/hcsshim/internal/hns/namespace.go
new file mode 100644
index 000000000..45e2281b0
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hns/namespace.go
@@ -0,0 +1,110 @@
+package hns
+
+import (
+ "encoding/json"
+ "fmt"
+ "os"
+ "path"
+ "strings"
+)
+
+type namespaceRequest struct {
+ IsDefault bool `json:",omitempty"`
+}
+
+type namespaceEndpointRequest struct {
+ ID string `json:"Id"`
+}
+
+type NamespaceResource struct {
+ Type string
+ Data json.RawMessage
+}
+
+type namespaceResourceRequest struct {
+ Type string
+ Data interface{}
+}
+
+type Namespace struct {
+ ID string
+ IsDefault bool `json:",omitempty"`
+ ResourceList []NamespaceResource `json:",omitempty"`
+}
+
+func issueNamespaceRequest(id *string, method, subpath string, request interface{}) (*Namespace, error) {
+ var err error
+ hnspath := "/namespaces/"
+ if id != nil {
+ hnspath = path.Join(hnspath, *id)
+ }
+ if subpath != "" {
+ hnspath = path.Join(hnspath, subpath)
+ }
+ var reqJSON []byte
+ if request != nil {
+ if reqJSON, err = json.Marshal(request); err != nil {
+ return nil, err
+ }
+ }
+ var ns Namespace
+ err = hnsCall(method, hnspath, string(reqJSON), &ns)
+ if err != nil {
+ if strings.Contains(err.Error(), "Element not found.") {
+ return nil, os.ErrNotExist
+ }
+ return nil, fmt.Errorf("%s %s: %s", method, hnspath, err)
+ }
+ return &ns, err
+}
+
+func CreateNamespace() (string, error) {
+ req := namespaceRequest{}
+ ns, err := issueNamespaceRequest(nil, "POST", "", &req)
+ if err != nil {
+ return "", err
+ }
+ return ns.ID, nil
+}
+
+func RemoveNamespace(id string) error {
+ _, err := issueNamespaceRequest(&id, "DELETE", "", nil)
+ return err
+}
+
+func GetNamespaceEndpoints(id string) ([]string, error) {
+ ns, err := issueNamespaceRequest(&id, "GET", "", nil)
+ if err != nil {
+ return nil, err
+ }
+ var endpoints []string
+ for _, rsrc := range ns.ResourceList {
+ if rsrc.Type == "Endpoint" {
+ var endpoint namespaceEndpointRequest
+ err = json.Unmarshal(rsrc.Data, &endpoint)
+ if err != nil {
+ return nil, fmt.Errorf("unmarshal endpoint: %s", err)
+ }
+ endpoints = append(endpoints, endpoint.ID)
+ }
+ }
+ return endpoints, nil
+}
+
+func AddNamespaceEndpoint(id string, endpointID string) error {
+ resource := namespaceResourceRequest{
+ Type: "Endpoint",
+ Data: namespaceEndpointRequest{endpointID},
+ }
+ _, err := issueNamespaceRequest(&id, "POST", "addresource", &resource)
+ return err
+}
+
+func RemoveNamespaceEndpoint(id string, endpointID string) error {
+ resource := namespaceResourceRequest{
+ Type: "Endpoint",
+ Data: namespaceEndpointRequest{endpointID},
+ }
+ _, err := issueNamespaceRequest(&id, "POST", "removeresource", &resource)
+ return err
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/hns/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/internal/hns/zsyscall_windows.go
new file mode 100644
index 000000000..3a3232a06
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/hns/zsyscall_windows.go
@@ -0,0 +1,74 @@
+// Code generated mksyscall_windows.exe DO NOT EDIT
+
+package hns
+
+import (
+ "syscall"
+ "unsafe"
+
+ "github.com/Microsoft/hcsshim/internal/interop"
+ "golang.org/x/sys/windows"
+)
+
+var _ unsafe.Pointer
+
+// Do the interface allocations only once for common
+// Errno values.
+const (
+ errnoERROR_IO_PENDING = 997
+)
+
+var (
+ errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
+)
+
+// errnoErr returns common boxed Errno values, to prevent
+// allocations at runtime.
+func errnoErr(e syscall.Errno) error {
+ switch e {
+ case 0:
+ return nil
+ case errnoERROR_IO_PENDING:
+ return errERROR_IO_PENDING
+ }
+ // TODO: add more here, after collecting data on the common
+ // error values see on Windows. (perhaps when running
+ // all.bat?)
+ return e
+}
+
+var (
+ modvmcompute = windows.NewLazySystemDLL("vmcompute.dll")
+
+ procHNSCall = modvmcompute.NewProc("HNSCall")
+)
+
+func _hnsCall(method string, path string, object string, response **uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(method)
+ if hr != nil {
+ return
+ }
+ var _p1 *uint16
+ _p1, hr = syscall.UTF16PtrFromString(path)
+ if hr != nil {
+ return
+ }
+ var _p2 *uint16
+ _p2, hr = syscall.UTF16PtrFromString(object)
+ if hr != nil {
+ return
+ }
+ return __hnsCall(_p0, _p1, _p2, response)
+}
+
+func __hnsCall(method *uint16, path *uint16, object *uint16, response **uint16) (hr error) {
+ if hr = procHNSCall.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procHNSCall.Addr(), 4, uintptr(unsafe.Pointer(method)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(object)), uintptr(unsafe.Pointer(response)), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/interop/interop.go b/vendor/github.com/Microsoft/hcsshim/internal/interop/interop.go
new file mode 100644
index 000000000..f10c88d08
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/interop/interop.go
@@ -0,0 +1,27 @@
+package interop
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go interop.go
+
+//sys coTaskMemFree(buffer unsafe.Pointer) = ole32.CoTaskMemFree
+
+func ConvertAndFreeCoTaskMemString(buffer *uint16) string {
+ str := syscall.UTF16ToString((*[1 << 29]uint16)(unsafe.Pointer(buffer))[:])
+ coTaskMemFree(unsafe.Pointer(buffer))
+ return str
+}
+
+func ConvertAndFreeCoTaskMemBytes(buffer *uint16) []byte {
+ return []byte(ConvertAndFreeCoTaskMemString(buffer))
+}
+
+func Win32FromHresult(hr uintptr) syscall.Errno {
+ if hr&0x1fff0000 == 0x00070000 {
+ return syscall.Errno(hr & 0xffff)
+ }
+ return syscall.Errno(hr)
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go
new file mode 100644
index 000000000..2f5bf8f55
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/interop/zsyscall_windows.go
@@ -0,0 +1,48 @@
+// Code generated by 'go generate'; DO NOT EDIT.
+
+package interop
+
+import (
+ "syscall"
+ "unsafe"
+
+ "golang.org/x/sys/windows"
+)
+
+var _ unsafe.Pointer
+
+// Do the interface allocations only once for common
+// Errno values.
+const (
+ errnoERROR_IO_PENDING = 997
+)
+
+var (
+ errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
+)
+
+// errnoErr returns common boxed Errno values, to prevent
+// allocations at runtime.
+func errnoErr(e syscall.Errno) error {
+ switch e {
+ case 0:
+ return nil
+ case errnoERROR_IO_PENDING:
+ return errERROR_IO_PENDING
+ }
+ // TODO: add more here, after collecting data on the common
+ // error values see on Windows. (perhaps when running
+ // all.bat?)
+ return e
+}
+
+var (
+ modole32 = windows.NewLazySystemDLL("ole32.dll")
+
+ procCoTaskMemFree = modole32.NewProc("CoTaskMemFree")
+)
+
+func coTaskMemFree(buffer unsafe.Pointer) {
+ syscall.Syscall(procCoTaskMemFree.Addr(), 1, uintptr(buffer), 0, 0)
+ return
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/logfields/fields.go b/vendor/github.com/Microsoft/hcsshim/internal/logfields/fields.go
new file mode 100644
index 000000000..a1527d706
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/logfields/fields.go
@@ -0,0 +1,37 @@
+package logfields
+
+const (
+ // Identifiers
+
+ ContainerID = "cid"
+ UVMID = "uvm-id"
+ ProcessID = "pid"
+
+ // Common Misc
+
+ // Timeout represents an operation timeout.
+ Timeout = "timeout"
+ JSON = "json"
+
+ // Keys/values
+
+ Field = "field"
+ OCIAnnotation = "oci-annotation"
+ Value = "value"
+
+ // Golang type's
+
+ ExpectedType = "expected-type"
+ Bool = "bool"
+ Uint32 = "uint32"
+ Uint64 = "uint64"
+
+ // HCS
+
+ HCSOperation = "hcs-op"
+ HCSOperationResult = "hcs-op-result"
+
+ // runhcs
+
+ VMShimOperation = "vmshim-op"
+)
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/longpath/longpath.go b/vendor/github.com/Microsoft/hcsshim/internal/longpath/longpath.go
new file mode 100644
index 000000000..e5b8b85e0
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/longpath/longpath.go
@@ -0,0 +1,24 @@
+package longpath
+
+import (
+ "path/filepath"
+ "strings"
+)
+
+// LongAbs makes a path absolute and returns it in NT long path form.
+func LongAbs(path string) (string, error) {
+ if strings.HasPrefix(path, `\\?\`) || strings.HasPrefix(path, `\\.\`) {
+ return path, nil
+ }
+ if !filepath.IsAbs(path) {
+ absPath, err := filepath.Abs(path)
+ if err != nil {
+ return "", err
+ }
+ path = absPath
+ }
+ if strings.HasPrefix(path, `\\`) {
+ return `\\?\UNC\` + path[2:], nil
+ }
+ return `\\?\` + path, nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/mergemaps/merge.go b/vendor/github.com/Microsoft/hcsshim/internal/mergemaps/merge.go
new file mode 100644
index 000000000..7e95efb30
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/mergemaps/merge.go
@@ -0,0 +1,52 @@
+package mergemaps
+
+import "encoding/json"
+
+// Merge recursively merges map `fromMap` into map `ToMap`. Any pre-existing values
+// in ToMap are overwritten. Values in fromMap are added to ToMap.
+// From http://stackoverflow.com/questions/40491438/merging-two-json-strings-in-golang
+func Merge(fromMap, ToMap interface{}) interface{} {
+ switch fromMap := fromMap.(type) {
+ case map[string]interface{}:
+ ToMap, ok := ToMap.(map[string]interface{})
+ if !ok {
+ return fromMap
+ }
+ for keyToMap, valueToMap := range ToMap {
+ if valueFromMap, ok := fromMap[keyToMap]; ok {
+ fromMap[keyToMap] = Merge(valueFromMap, valueToMap)
+ } else {
+ fromMap[keyToMap] = valueToMap
+ }
+ }
+ case nil:
+ // merge(nil, map[string]interface{...}) -> map[string]interface{...}
+ ToMap, ok := ToMap.(map[string]interface{})
+ if ok {
+ return ToMap
+ }
+ }
+ return fromMap
+}
+
+// MergeJSON merges the contents of a JSON string into an object representation,
+// returning a new object suitable for translating to JSON.
+func MergeJSON(object interface{}, additionalJSON []byte) (interface{}, error) {
+ if len(additionalJSON) == 0 {
+ return object, nil
+ }
+ objectJSON, err := json.Marshal(object)
+ if err != nil {
+ return nil, err
+ }
+ var objectMap, newMap map[string]interface{}
+ err = json.Unmarshal(objectJSON, &objectMap)
+ if err != nil {
+ return nil, err
+ }
+ err = json.Unmarshal(additionalJSON, &newMap)
+ if err != nil {
+ return nil, err
+ }
+ return Merge(newMap, objectMap), nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/safefile/safeopen.go b/vendor/github.com/Microsoft/hcsshim/internal/safefile/safeopen.go
new file mode 100644
index 000000000..0c0b1159f
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/safefile/safeopen.go
@@ -0,0 +1,431 @@
+package safefile
+
+import (
+ "errors"
+ "io"
+ "os"
+ "path/filepath"
+ "strings"
+ "syscall"
+ "unicode/utf16"
+ "unsafe"
+
+ "github.com/Microsoft/hcsshim/internal/longpath"
+
+ winio "github.com/Microsoft/go-winio"
+)
+
+//go:generate go run $GOROOT\src\syscall\mksyscall_windows.go -output zsyscall_windows.go safeopen.go
+
+//sys ntCreateFile(handle *uintptr, accessMask uint32, oa *objectAttributes, iosb *ioStatusBlock, allocationSize *uint64, fileAttributes uint32, shareAccess uint32, createDisposition uint32, createOptions uint32, eaBuffer *byte, eaLength uint32) (status uint32) = ntdll.NtCreateFile
+//sys ntSetInformationFile(handle uintptr, iosb *ioStatusBlock, information uintptr, length uint32, class uint32) (status uint32) = ntdll.NtSetInformationFile
+//sys rtlNtStatusToDosError(status uint32) (winerr error) = ntdll.RtlNtStatusToDosErrorNoTeb
+//sys localAlloc(flags uint32, size int) (ptr uintptr) = kernel32.LocalAlloc
+//sys localFree(ptr uintptr) = kernel32.LocalFree
+
+type ioStatusBlock struct {
+ Status, Information uintptr
+}
+
+type objectAttributes struct {
+ Length uintptr
+ RootDirectory uintptr
+ ObjectName uintptr
+ Attributes uintptr
+ SecurityDescriptor uintptr
+ SecurityQoS uintptr
+}
+
+type unicodeString struct {
+ Length uint16
+ MaximumLength uint16
+ Buffer uintptr
+}
+
+type fileLinkInformation struct {
+ ReplaceIfExists bool
+ RootDirectory uintptr
+ FileNameLength uint32
+ FileName [1]uint16
+}
+
+type fileDispositionInformationEx struct {
+ Flags uintptr
+}
+
+const (
+ _FileLinkInformation = 11
+ _FileDispositionInformationEx = 64
+
+ FILE_READ_ATTRIBUTES = 0x0080
+ FILE_WRITE_ATTRIBUTES = 0x0100
+ DELETE = 0x10000
+
+ FILE_OPEN = 1
+ FILE_CREATE = 2
+
+ FILE_DIRECTORY_FILE = 0x00000001
+ FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020
+ FILE_DELETE_ON_CLOSE = 0x00001000
+ FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000
+ FILE_OPEN_REPARSE_POINT = 0x00200000
+
+ FILE_DISPOSITION_DELETE = 0x00000001
+
+ _OBJ_DONT_REPARSE = 0x1000
+
+ _STATUS_REPARSE_POINT_ENCOUNTERED = 0xC000050B
+)
+
+func OpenRoot(path string) (*os.File, error) {
+ longpath, err := longpath.LongAbs(path)
+ if err != nil {
+ return nil, err
+ }
+ return winio.OpenForBackup(longpath, syscall.GENERIC_READ, syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE, syscall.OPEN_EXISTING)
+}
+
+func ntRelativePath(path string) ([]uint16, error) {
+ path = filepath.Clean(path)
+ if strings.Contains(":", path) {
+ // Since alternate data streams must follow the file they
+ // are attached to, finding one here (out of order) is invalid.
+ return nil, errors.New("path contains invalid character `:`")
+ }
+ fspath := filepath.FromSlash(path)
+ if len(fspath) > 0 && fspath[0] == '\\' {
+ return nil, errors.New("expected relative path")
+ }
+
+ path16 := utf16.Encode(([]rune)(fspath))
+ if len(path16) > 32767 {
+ return nil, syscall.ENAMETOOLONG
+ }
+
+ return path16, nil
+}
+
+// openRelativeInternal opens a relative path from the given root, failing if
+// any of the intermediate path components are reparse points.
+func openRelativeInternal(path string, root *os.File, accessMask uint32, shareFlags uint32, createDisposition uint32, flags uint32) (*os.File, error) {
+ var (
+ h uintptr
+ iosb ioStatusBlock
+ oa objectAttributes
+ )
+
+ path16, err := ntRelativePath(path)
+ if err != nil {
+ return nil, err
+ }
+
+ if root == nil || root.Fd() == 0 {
+ return nil, errors.New("missing root directory")
+ }
+
+ upathBuffer := localAlloc(0, int(unsafe.Sizeof(unicodeString{}))+len(path16)*2)
+ defer localFree(upathBuffer)
+
+ upath := (*unicodeString)(unsafe.Pointer(upathBuffer))
+ upath.Length = uint16(len(path16) * 2)
+ upath.MaximumLength = upath.Length
+ upath.Buffer = upathBuffer + unsafe.Sizeof(*upath)
+ copy((*[32768]uint16)(unsafe.Pointer(upath.Buffer))[:], path16)
+
+ oa.Length = unsafe.Sizeof(oa)
+ oa.ObjectName = upathBuffer
+ oa.RootDirectory = uintptr(root.Fd())
+ oa.Attributes = _OBJ_DONT_REPARSE
+ status := ntCreateFile(
+ &h,
+ accessMask|syscall.SYNCHRONIZE,
+ &oa,
+ &iosb,
+ nil,
+ 0,
+ shareFlags,
+ createDisposition,
+ FILE_OPEN_FOR_BACKUP_INTENT|FILE_SYNCHRONOUS_IO_NONALERT|flags,
+ nil,
+ 0,
+ )
+ if status != 0 {
+ return nil, rtlNtStatusToDosError(status)
+ }
+
+ fullPath, err := longpath.LongAbs(filepath.Join(root.Name(), path))
+ if err != nil {
+ syscall.Close(syscall.Handle(h))
+ return nil, err
+ }
+
+ return os.NewFile(h, fullPath), nil
+}
+
+// OpenRelative opens a relative path from the given root, failing if
+// any of the intermediate path components are reparse points.
+func OpenRelative(path string, root *os.File, accessMask uint32, shareFlags uint32, createDisposition uint32, flags uint32) (*os.File, error) {
+ f, err := openRelativeInternal(path, root, accessMask, shareFlags, createDisposition, flags)
+ if err != nil {
+ err = &os.PathError{Op: "open", Path: filepath.Join(root.Name(), path), Err: err}
+ }
+ return f, err
+}
+
+// LinkRelative creates a hard link from oldname to newname (relative to oldroot
+// and newroot), failing if any of the intermediate path components are reparse
+// points.
+func LinkRelative(oldname string, oldroot *os.File, newname string, newroot *os.File) error {
+ // Open the old file.
+ oldf, err := openRelativeInternal(
+ oldname,
+ oldroot,
+ syscall.FILE_WRITE_ATTRIBUTES,
+ syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
+ FILE_OPEN,
+ 0,
+ )
+ if err != nil {
+ return &os.LinkError{Op: "link", Old: filepath.Join(oldroot.Name(), oldname), New: filepath.Join(newroot.Name(), newname), Err: err}
+ }
+ defer oldf.Close()
+
+ // Open the parent of the new file.
+ var parent *os.File
+ parentPath := filepath.Dir(newname)
+ if parentPath != "." {
+ parent, err = openRelativeInternal(
+ parentPath,
+ newroot,
+ syscall.GENERIC_READ,
+ syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
+ FILE_OPEN,
+ FILE_DIRECTORY_FILE)
+ if err != nil {
+ return &os.LinkError{Op: "link", Old: oldf.Name(), New: filepath.Join(newroot.Name(), newname), Err: err}
+ }
+ defer parent.Close()
+
+ fi, err := winio.GetFileBasicInfo(parent)
+ if err != nil {
+ return err
+ }
+ if (fi.FileAttributes & syscall.FILE_ATTRIBUTE_REPARSE_POINT) != 0 {
+ return &os.LinkError{Op: "link", Old: oldf.Name(), New: filepath.Join(newroot.Name(), newname), Err: rtlNtStatusToDosError(_STATUS_REPARSE_POINT_ENCOUNTERED)}
+ }
+
+ } else {
+ parent = newroot
+ }
+
+ // Issue an NT call to create the link. This will be safe because NT will
+ // not open any more directories to create the link, so it cannot walk any
+ // more reparse points.
+ newbase := filepath.Base(newname)
+ newbase16, err := ntRelativePath(newbase)
+ if err != nil {
+ return err
+ }
+
+ size := int(unsafe.Offsetof(fileLinkInformation{}.FileName)) + len(newbase16)*2
+ linkinfoBuffer := localAlloc(0, size)
+ defer localFree(linkinfoBuffer)
+ linkinfo := (*fileLinkInformation)(unsafe.Pointer(linkinfoBuffer))
+ linkinfo.RootDirectory = parent.Fd()
+ linkinfo.FileNameLength = uint32(len(newbase16) * 2)
+ copy((*[32768]uint16)(unsafe.Pointer(&linkinfo.FileName[0]))[:], newbase16)
+
+ var iosb ioStatusBlock
+ status := ntSetInformationFile(
+ oldf.Fd(),
+ &iosb,
+ linkinfoBuffer,
+ uint32(size),
+ _FileLinkInformation,
+ )
+ if status != 0 {
+ return &os.LinkError{Op: "link", Old: oldf.Name(), New: filepath.Join(parent.Name(), newbase), Err: rtlNtStatusToDosError(status)}
+ }
+
+ return nil
+}
+
+// deleteOnClose marks a file to be deleted when the handle is closed.
+func deleteOnClose(f *os.File) error {
+ disposition := fileDispositionInformationEx{Flags: FILE_DISPOSITION_DELETE}
+ var iosb ioStatusBlock
+ status := ntSetInformationFile(
+ f.Fd(),
+ &iosb,
+ uintptr(unsafe.Pointer(&disposition)),
+ uint32(unsafe.Sizeof(disposition)),
+ _FileDispositionInformationEx,
+ )
+ if status != 0 {
+ return rtlNtStatusToDosError(status)
+ }
+ return nil
+}
+
+// clearReadOnly clears the readonly attribute on a file.
+func clearReadOnly(f *os.File) error {
+ bi, err := winio.GetFileBasicInfo(f)
+ if err != nil {
+ return err
+ }
+ if bi.FileAttributes&syscall.FILE_ATTRIBUTE_READONLY == 0 {
+ return nil
+ }
+ sbi := winio.FileBasicInfo{
+ FileAttributes: bi.FileAttributes &^ syscall.FILE_ATTRIBUTE_READONLY,
+ }
+ if sbi.FileAttributes == 0 {
+ sbi.FileAttributes = syscall.FILE_ATTRIBUTE_NORMAL
+ }
+ return winio.SetFileBasicInfo(f, &sbi)
+}
+
+// RemoveRelative removes a file or directory relative to a root, failing if any
+// intermediate path components are reparse points.
+func RemoveRelative(path string, root *os.File) error {
+ f, err := openRelativeInternal(
+ path,
+ root,
+ FILE_READ_ATTRIBUTES|FILE_WRITE_ATTRIBUTES|DELETE,
+ syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
+ FILE_OPEN,
+ FILE_OPEN_REPARSE_POINT)
+ if err == nil {
+ defer f.Close()
+ err = deleteOnClose(f)
+ if err == syscall.ERROR_ACCESS_DENIED {
+ // Maybe the file is marked readonly. Clear the bit and retry.
+ clearReadOnly(f)
+ err = deleteOnClose(f)
+ }
+ }
+ if err != nil {
+ return &os.PathError{Op: "remove", Path: filepath.Join(root.Name(), path), Err: err}
+ }
+ return nil
+}
+
+// RemoveAllRelative removes a directory tree relative to a root, failing if any
+// intermediate path components are reparse points.
+func RemoveAllRelative(path string, root *os.File) error {
+ fi, err := LstatRelative(path, root)
+ if err != nil {
+ if os.IsNotExist(err) {
+ return nil
+ }
+ return err
+ }
+ fileAttributes := fi.Sys().(*syscall.Win32FileAttributeData).FileAttributes
+ if fileAttributes&syscall.FILE_ATTRIBUTE_DIRECTORY == 0 || fileAttributes&syscall.FILE_ATTRIBUTE_REPARSE_POINT != 0 {
+ // If this is a reparse point, it can't have children. Simple remove will do.
+ err := RemoveRelative(path, root)
+ if err == nil || os.IsNotExist(err) {
+ return nil
+ }
+ return err
+ }
+
+ // It is necessary to use os.Open as Readdirnames does not work with
+ // OpenRelative. This is safe because the above lstatrelative fails
+ // if the target is outside the root, and we know this is not a
+ // symlink from the above FILE_ATTRIBUTE_REPARSE_POINT check.
+ fd, err := os.Open(filepath.Join(root.Name(), path))
+ if err != nil {
+ if os.IsNotExist(err) {
+ // Race. It was deleted between the Lstat and Open.
+ // Return nil per RemoveAll's docs.
+ return nil
+ }
+ return err
+ }
+
+ // Remove contents & return first error.
+ for {
+ names, err1 := fd.Readdirnames(100)
+ for _, name := range names {
+ err1 := RemoveAllRelative(path+string(os.PathSeparator)+name, root)
+ if err == nil {
+ err = err1
+ }
+ }
+ if err1 == io.EOF {
+ break
+ }
+ // If Readdirnames returned an error, use it.
+ if err == nil {
+ err = err1
+ }
+ if len(names) == 0 {
+ break
+ }
+ }
+ fd.Close()
+
+ // Remove directory.
+ err1 := RemoveRelative(path, root)
+ if err1 == nil || os.IsNotExist(err1) {
+ return nil
+ }
+ if err == nil {
+ err = err1
+ }
+ return err
+}
+
+// MkdirRelative creates a directory relative to a root, failing if any
+// intermediate path components are reparse points.
+func MkdirRelative(path string, root *os.File) error {
+ f, err := openRelativeInternal(
+ path,
+ root,
+ 0,
+ syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
+ FILE_CREATE,
+ FILE_DIRECTORY_FILE)
+ if err == nil {
+ f.Close()
+ } else {
+ err = &os.PathError{Op: "mkdir", Path: filepath.Join(root.Name(), path), Err: err}
+ }
+ return err
+}
+
+// LstatRelative performs a stat operation on a file relative to a root, failing
+// if any intermediate path components are reparse points.
+func LstatRelative(path string, root *os.File) (os.FileInfo, error) {
+ f, err := openRelativeInternal(
+ path,
+ root,
+ FILE_READ_ATTRIBUTES,
+ syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
+ FILE_OPEN,
+ FILE_OPEN_REPARSE_POINT)
+ if err != nil {
+ return nil, &os.PathError{Op: "stat", Path: filepath.Join(root.Name(), path), Err: err}
+ }
+ defer f.Close()
+ return f.Stat()
+}
+
+// EnsureNotReparsePointRelative validates that a given file (relative to a
+// root) and all intermediate path components are not a reparse points.
+func EnsureNotReparsePointRelative(path string, root *os.File) error {
+ // Perform an open with OBJ_DONT_REPARSE but without specifying FILE_OPEN_REPARSE_POINT.
+ f, err := OpenRelative(
+ path,
+ root,
+ 0,
+ syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE,
+ FILE_OPEN,
+ 0)
+ if err != nil {
+ return err
+ }
+ f.Close()
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/safefile/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/internal/safefile/zsyscall_windows.go
new file mode 100644
index 000000000..709b9d347
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/safefile/zsyscall_windows.go
@@ -0,0 +1,79 @@
+// Code generated by 'go generate'; DO NOT EDIT.
+
+package safefile
+
+import (
+ "syscall"
+ "unsafe"
+
+ "golang.org/x/sys/windows"
+)
+
+var _ unsafe.Pointer
+
+// Do the interface allocations only once for common
+// Errno values.
+const (
+ errnoERROR_IO_PENDING = 997
+)
+
+var (
+ errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
+)
+
+// errnoErr returns common boxed Errno values, to prevent
+// allocations at runtime.
+func errnoErr(e syscall.Errno) error {
+ switch e {
+ case 0:
+ return nil
+ case errnoERROR_IO_PENDING:
+ return errERROR_IO_PENDING
+ }
+ // TODO: add more here, after collecting data on the common
+ // error values see on Windows. (perhaps when running
+ // all.bat?)
+ return e
+}
+
+var (
+ modntdll = windows.NewLazySystemDLL("ntdll.dll")
+ modkernel32 = windows.NewLazySystemDLL("kernel32.dll")
+
+ procNtCreateFile = modntdll.NewProc("NtCreateFile")
+ procNtSetInformationFile = modntdll.NewProc("NtSetInformationFile")
+ procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb")
+ procLocalAlloc = modkernel32.NewProc("LocalAlloc")
+ procLocalFree = modkernel32.NewProc("LocalFree")
+)
+
+func ntCreateFile(handle *uintptr, accessMask uint32, oa *objectAttributes, iosb *ioStatusBlock, allocationSize *uint64, fileAttributes uint32, shareAccess uint32, createDisposition uint32, createOptions uint32, eaBuffer *byte, eaLength uint32) (status uint32) {
+ r0, _, _ := syscall.Syscall12(procNtCreateFile.Addr(), 11, uintptr(unsafe.Pointer(handle)), uintptr(accessMask), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(fileAttributes), uintptr(shareAccess), uintptr(createDisposition), uintptr(createOptions), uintptr(unsafe.Pointer(eaBuffer)), uintptr(eaLength), 0)
+ status = uint32(r0)
+ return
+}
+
+func ntSetInformationFile(handle uintptr, iosb *ioStatusBlock, information uintptr, length uint32, class uint32) (status uint32) {
+ r0, _, _ := syscall.Syscall6(procNtSetInformationFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(information), uintptr(length), uintptr(class), 0)
+ status = uint32(r0)
+ return
+}
+
+func rtlNtStatusToDosError(status uint32) (winerr error) {
+ r0, _, _ := syscall.Syscall(procRtlNtStatusToDosErrorNoTeb.Addr(), 1, uintptr(status), 0, 0)
+ if r0 != 0 {
+ winerr = syscall.Errno(r0)
+ }
+ return
+}
+
+func localAlloc(flags uint32, size int) (ptr uintptr) {
+ r0, _, _ := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(flags), uintptr(size), 0)
+ ptr = uintptr(r0)
+ return
+}
+
+func localFree(ptr uintptr) {
+ syscall.Syscall(procLocalFree.Addr(), 1, uintptr(ptr), 0, 0)
+ return
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema1/schema1.go b/vendor/github.com/Microsoft/hcsshim/internal/schema1/schema1.go
new file mode 100644
index 000000000..995433ace
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema1/schema1.go
@@ -0,0 +1,245 @@
+package schema1
+
+import (
+ "encoding/json"
+ "time"
+
+ "github.com/Microsoft/hcsshim/internal/schema2"
+)
+
+// ProcessConfig is used as both the input of Container.CreateProcess
+// and to convert the parameters to JSON for passing onto the HCS
+type ProcessConfig struct {
+ ApplicationName string `json:",omitempty"`
+ CommandLine string `json:",omitempty"`
+ CommandArgs []string `json:",omitempty"` // Used by Linux Containers on Windows
+ User string `json:",omitempty"`
+ WorkingDirectory string `json:",omitempty"`
+ Environment map[string]string `json:",omitempty"`
+ EmulateConsole bool `json:",omitempty"`
+ CreateStdInPipe bool `json:",omitempty"`
+ CreateStdOutPipe bool `json:",omitempty"`
+ CreateStdErrPipe bool `json:",omitempty"`
+ ConsoleSize [2]uint `json:",omitempty"`
+ CreateInUtilityVm bool `json:",omitempty"` // Used by Linux Containers on Windows
+ OCISpecification *json.RawMessage `json:",omitempty"` // Used by Linux Containers on Windows
+}
+
+type Layer struct {
+ ID string
+ Path string
+}
+
+type MappedDir struct {
+ HostPath string
+ ContainerPath string
+ ReadOnly bool
+ BandwidthMaximum uint64
+ IOPSMaximum uint64
+ CreateInUtilityVM bool
+ // LinuxMetadata - Support added in 1803/RS4+.
+ LinuxMetadata bool `json:",omitempty"`
+}
+
+type MappedPipe struct {
+ HostPath string
+ ContainerPipeName string
+}
+
+type HvRuntime struct {
+ ImagePath string `json:",omitempty"`
+ SkipTemplate bool `json:",omitempty"`
+ LinuxInitrdFile string `json:",omitempty"` // File under ImagePath on host containing an initrd image for starting a Linux utility VM
+ LinuxKernelFile string `json:",omitempty"` // File under ImagePath on host containing a kernel for starting a Linux utility VM
+ LinuxBootParameters string `json:",omitempty"` // Additional boot parameters for starting a Linux Utility VM in initrd mode
+ BootSource string `json:",omitempty"` // "Vhd" for Linux Utility VM booting from VHD
+ WritableBootSource bool `json:",omitempty"` // Linux Utility VM booting from VHD
+}
+
+type MappedVirtualDisk struct {
+ HostPath string `json:",omitempty"` // Path to VHD on the host
+ ContainerPath string // Platform-specific mount point path in the container
+ CreateInUtilityVM bool `json:",omitempty"`
+ ReadOnly bool `json:",omitempty"`
+ Cache string `json:",omitempty"` // "" (Unspecified); "Disabled"; "Enabled"; "Private"; "PrivateAllowSharing"
+ AttachOnly bool `json:",omitempty:`
+}
+
+// AssignedDevice represents a device that has been directly assigned to a container
+//
+// NOTE: Support added in RS5
+type AssignedDevice struct {
+ // InterfaceClassGUID of the device to assign to container.
+ InterfaceClassGUID string `json:"InterfaceClassGuid,omitempty"`
+}
+
+// ContainerConfig is used as both the input of CreateContainer
+// and to convert the parameters to JSON for passing onto the HCS
+type ContainerConfig struct {
+ SystemType string // HCS requires this to be hard-coded to "Container"
+ Name string // Name of the container. We use the docker ID.
+ Owner string `json:",omitempty"` // The management platform that created this container
+ VolumePath string `json:",omitempty"` // Windows volume path for scratch space. Used by Windows Server Containers only. Format \\?\\Volume{GUID}
+ IgnoreFlushesDuringBoot bool `json:",omitempty"` // Optimization hint for container startup in Windows
+ LayerFolderPath string `json:",omitempty"` // Where the layer folders are located. Used by Windows Server Containers only. Format %root%\windowsfilter\containerID
+ Layers []Layer // List of storage layers. Required for Windows Server and Hyper-V Containers. Format ID=GUID;Path=%root%\windowsfilter\layerID
+ Credentials string `json:",omitempty"` // Credentials information
+ ProcessorCount uint32 `json:",omitempty"` // Number of processors to assign to the container.
+ ProcessorWeight uint64 `json:",omitempty"` // CPU shares (relative weight to other containers with cpu shares). Range is from 1 to 10000. A value of 0 results in default shares.
+ ProcessorMaximum int64 `json:",omitempty"` // Specifies the portion of processor cycles that this container can use as a percentage times 100. Range is from 1 to 10000. A value of 0 results in no limit.
+ StorageIOPSMaximum uint64 `json:",omitempty"` // Maximum Storage IOPS
+ StorageBandwidthMaximum uint64 `json:",omitempty"` // Maximum Storage Bandwidth in bytes per second
+ StorageSandboxSize uint64 `json:",omitempty"` // Size in bytes that the container system drive should be expanded to if smaller
+ MemoryMaximumInMB int64 `json:",omitempty"` // Maximum memory available to the container in Megabytes
+ HostName string `json:",omitempty"` // Hostname
+ MappedDirectories []MappedDir `json:",omitempty"` // List of mapped directories (volumes/mounts)
+ MappedPipes []MappedPipe `json:",omitempty"` // List of mapped Windows named pipes
+ HvPartition bool // True if it a Hyper-V Container
+ NetworkSharedContainerName string `json:",omitempty"` // Name (ID) of the container that we will share the network stack with.
+ EndpointList []string `json:",omitempty"` // List of networking endpoints to be attached to container
+ HvRuntime *HvRuntime `json:",omitempty"` // Hyper-V container settings. Used by Hyper-V containers only. Format ImagePath=%root%\BaseLayerID\UtilityVM
+ Servicing bool `json:",omitempty"` // True if this container is for servicing
+ AllowUnqualifiedDNSQuery bool `json:",omitempty"` // True to allow unqualified DNS name resolution
+ DNSSearchList string `json:",omitempty"` // Comma seperated list of DNS suffixes to use for name resolution
+ ContainerType string `json:",omitempty"` // "Linux" for Linux containers on Windows. Omitted otherwise.
+ TerminateOnLastHandleClosed bool `json:",omitempty"` // Should HCS terminate the container once all handles have been closed
+ MappedVirtualDisks []MappedVirtualDisk `json:",omitempty"` // Array of virtual disks to mount at start
+ AssignedDevices []AssignedDevice `json:",omitempty"` // Array of devices to assign. NOTE: Support added in RS5
+}
+
+type ComputeSystemQuery struct {
+ IDs []string `json:"Ids,omitempty"`
+ Types []string `json:",omitempty"`
+ Names []string `json:",omitempty"`
+ Owners []string `json:",omitempty"`
+}
+
+type PropertyType string
+
+const (
+ PropertyTypeStatistics PropertyType = "Statistics" // V1 and V2
+ PropertyTypeProcessList = "ProcessList" // V1 and V2
+ PropertyTypeMappedVirtualDisk = "MappedVirtualDisk" // Not supported in V2 schema call
+ PropertyTypeGuestConnection = "GuestConnection" // V1 and V2. Nil return from HCS before RS5
+)
+
+type PropertyQuery struct {
+ PropertyTypes []PropertyType `json:",omitempty"`
+}
+
+// ContainerProperties holds the properties for a container and the processes running in that container
+type ContainerProperties struct {
+ ID string `json:"Id"`
+ State string
+ Name string
+ SystemType string
+ Owner string
+ SiloGUID string `json:"SiloGuid,omitempty"`
+ RuntimeID string `json:"RuntimeId,omitempty"`
+ IsRuntimeTemplate bool `json:",omitempty"`
+ RuntimeImagePath string `json:",omitempty"`
+ Stopped bool `json:",omitempty"`
+ ExitType string `json:",omitempty"`
+ AreUpdatesPending bool `json:",omitempty"`
+ ObRoot string `json:",omitempty"`
+ Statistics Statistics `json:",omitempty"`
+ ProcessList []ProcessListItem `json:",omitempty"`
+ MappedVirtualDiskControllers map[int]MappedVirtualDiskController `json:",omitempty"`
+ GuestConnectionInfo GuestConnectionInfo `json:",omitempty"`
+}
+
+// MemoryStats holds the memory statistics for a container
+type MemoryStats struct {
+ UsageCommitBytes uint64 `json:"MemoryUsageCommitBytes,omitempty"`
+ UsageCommitPeakBytes uint64 `json:"MemoryUsageCommitPeakBytes,omitempty"`
+ UsagePrivateWorkingSetBytes uint64 `json:"MemoryUsagePrivateWorkingSetBytes,omitempty"`
+}
+
+// ProcessorStats holds the processor statistics for a container
+type ProcessorStats struct {
+ TotalRuntime100ns uint64 `json:",omitempty"`
+ RuntimeUser100ns uint64 `json:",omitempty"`
+ RuntimeKernel100ns uint64 `json:",omitempty"`
+}
+
+// StorageStats holds the storage statistics for a container
+type StorageStats struct {
+ ReadCountNormalized uint64 `json:",omitempty"`
+ ReadSizeBytes uint64 `json:",omitempty"`
+ WriteCountNormalized uint64 `json:",omitempty"`
+ WriteSizeBytes uint64 `json:",omitempty"`
+}
+
+// NetworkStats holds the network statistics for a container
+type NetworkStats struct {
+ BytesReceived uint64 `json:",omitempty"`
+ BytesSent uint64 `json:",omitempty"`
+ PacketsReceived uint64 `json:",omitempty"`
+ PacketsSent uint64 `json:",omitempty"`
+ DroppedPacketsIncoming uint64 `json:",omitempty"`
+ DroppedPacketsOutgoing uint64 `json:",omitempty"`
+ EndpointId string `json:",omitempty"`
+ InstanceId string `json:",omitempty"`
+}
+
+// Statistics is the structure returned by a statistics call on a container
+type Statistics struct {
+ Timestamp time.Time `json:",omitempty"`
+ ContainerStartTime time.Time `json:",omitempty"`
+ Uptime100ns uint64 `json:",omitempty"`
+ Memory MemoryStats `json:",omitempty"`
+ Processor ProcessorStats `json:",omitempty"`
+ Storage StorageStats `json:",omitempty"`
+ Network []NetworkStats `json:",omitempty"`
+}
+
+// ProcessList is the structure of an item returned by a ProcessList call on a container
+type ProcessListItem struct {
+ CreateTimestamp time.Time `json:",omitempty"`
+ ImageName string `json:",omitempty"`
+ KernelTime100ns uint64 `json:",omitempty"`
+ MemoryCommitBytes uint64 `json:",omitempty"`
+ MemoryWorkingSetPrivateBytes uint64 `json:",omitempty"`
+ MemoryWorkingSetSharedBytes uint64 `json:",omitempty"`
+ ProcessId uint32 `json:",omitempty"`
+ UserTime100ns uint64 `json:",omitempty"`
+}
+
+// MappedVirtualDiskController is the structure of an item returned by a MappedVirtualDiskList call on a container
+type MappedVirtualDiskController struct {
+ MappedVirtualDisks map[int]MappedVirtualDisk `json:",omitempty"`
+}
+
+// GuestDefinedCapabilities is part of the GuestConnectionInfo returned by a GuestConnection call on a utility VM
+type GuestDefinedCapabilities struct {
+ NamespaceAddRequestSupported bool `json:",omitempty"`
+ SignalProcessSupported bool `json:",omitempty"`
+}
+
+// GuestConnectionInfo is the structure of an iterm return by a GuestConnection call on a utility VM
+type GuestConnectionInfo struct {
+ SupportedSchemaVersions []hcsschema.Version `json:",omitempty"`
+ ProtocolVersion uint32 `json:",omitempty"`
+ GuestDefinedCapabilities GuestDefinedCapabilities `json:",omitempty"`
+}
+
+// Type of Request Support in ModifySystem
+type RequestType string
+
+// Type of Resource Support in ModifySystem
+type ResourceType string
+
+// RequestType const
+const (
+ Add RequestType = "Add"
+ Remove RequestType = "Remove"
+ Network ResourceType = "Network"
+)
+
+// ResourceModificationRequestResponse is the structure used to send request to the container to modify the system
+// Supported resource types are Network and Request Types are Add/Remove
+type ResourceModificationRequestResponse struct {
+ Resource ResourceType `json:"ResourceType"`
+ Data interface{} `json:"Settings"`
+ Request RequestType `json:"RequestType,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/attachment.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/attachment.go
new file mode 100644
index 000000000..09456cbc2
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/attachment.go
@@ -0,0 +1,31 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Attachment struct {
+
+ Type_ string `json:"Type,omitempty"`
+
+ Path string `json:"Path,omitempty"`
+
+ IgnoreFlushes bool `json:"IgnoreFlushes,omitempty"`
+
+ CachingMode string `json:"CachingMode,omitempty"`
+
+ NoWriteHardening bool `json:"NoWriteHardening,omitempty"`
+
+ DisableExpansionOptimization bool `json:"DisableExpansionOptimization,omitempty"`
+
+ IgnoreRelativeLocator bool `json:"IgnoreRelativeLocator,omitempty"`
+
+ CaptureIoAttributionContext bool `json:"CaptureIoAttributionContext,omitempty"`
+
+ ReadOnly bool `json:"ReadOnly,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/battery.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/battery.go
new file mode 100644
index 000000000..ecbbed4c2
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/battery.go
@@ -0,0 +1,13 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Battery struct {
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/cache_query_stats_response.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/cache_query_stats_response.go
new file mode 100644
index 000000000..243779eab
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/cache_query_stats_response.go
@@ -0,0 +1,19 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type CacheQueryStatsResponse struct {
+
+ L3OccupancyBytes int32 `json:"L3OccupancyBytes,omitempty"`
+
+ L3TotalBwBytes int32 `json:"L3TotalBwBytes,omitempty"`
+
+ L3LocalBwBytes int32 `json:"L3LocalBwBytes,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/chipset.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/chipset.go
new file mode 100644
index 000000000..ca75277a3
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/chipset.go
@@ -0,0 +1,27 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Chipset struct {
+ Uefi *Uefi `json:"Uefi,omitempty"`
+
+ IsNumLockDisabled bool `json:"IsNumLockDisabled,omitempty"`
+
+ BaseBoardSerialNumber string `json:"BaseBoardSerialNumber,omitempty"`
+
+ ChassisSerialNumber string `json:"ChassisSerialNumber,omitempty"`
+
+ ChassisAssetTag string `json:"ChassisAssetTag,omitempty"`
+
+ UseUtc bool `json:"UseUtc,omitempty"`
+
+ // LinuxKernelDirect - Added in v2.2 Builds >=181117
+ LinuxKernelDirect *LinuxKernelDirect `json:"LinuxKernelDirect,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/close_handle.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/close_handle.go
new file mode 100644
index 000000000..88f01707a
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/close_handle.go
@@ -0,0 +1,15 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type CloseHandle struct {
+
+ Handle string `json:"Handle,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/com_port.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/com_port.go
new file mode 100644
index 000000000..c665be3d5
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/com_port.go
@@ -0,0 +1,18 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// ComPort specifies the named pipe that will be used for the port, with empty string indicating a disconnected port.
+type ComPort struct {
+
+ NamedPipe string `json:"NamedPipe,omitempty"`
+
+ OptimizeForDebugger bool `json:"OptimizeForDebugger,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/compute_system.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/compute_system.go
new file mode 100644
index 000000000..85785d285
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/compute_system.go
@@ -0,0 +1,27 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type ComputeSystem struct {
+
+ Owner string `json:"Owner,omitempty"`
+
+ SchemaVersion *Version `json:"SchemaVersion,omitempty"`
+
+ HostingSystemId string `json:"HostingSystemId,omitempty"`
+
+ HostedSystem *HostedSystem `json:"HostedSystem,omitempty"`
+
+ Container *Container `json:"Container,omitempty"`
+
+ VirtualMachine *VirtualMachine `json:"VirtualMachine,omitempty"`
+
+ ShouldTerminateOnLastHandleClosed bool `json:"ShouldTerminateOnLastHandleClosed,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/configuration.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/configuration.go
new file mode 100644
index 000000000..1a47db7d9
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/configuration.go
@@ -0,0 +1,72 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+import (
+ "net/http"
+)
+
+// contextKeys are used to identify the type of value in the context.
+// Since these are string, it is possible to get a short description of the
+// context key for logging and debugging using key.String().
+
+type contextKey string
+
+func (c contextKey) String() string {
+ return "auth " + string(c)
+}
+
+var (
+ // ContextOAuth2 takes a oauth2.TokenSource as authentication for the request.
+ ContextOAuth2 = contextKey("token")
+
+ // ContextBasicAuth takes BasicAuth as authentication for the request.
+ ContextBasicAuth = contextKey("basic")
+
+ // ContextAccessToken takes a string oauth2 access token as authentication for the request.
+ ContextAccessToken = contextKey("accesstoken")
+
+ // ContextAPIKey takes an APIKey as authentication for the request
+ ContextAPIKey = contextKey("apikey")
+)
+
+// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth
+type BasicAuth struct {
+ UserName string `json:"userName,omitempty"`
+ Password string `json:"password,omitempty"`
+}
+
+// APIKey provides API key based authentication to a request passed via context using ContextAPIKey
+type APIKey struct {
+ Key string
+ Prefix string
+}
+
+type Configuration struct {
+ BasePath string `json:"basePath,omitempty"`
+ Host string `json:"host,omitempty"`
+ Scheme string `json:"scheme,omitempty"`
+ DefaultHeader map[string]string `json:"defaultHeader,omitempty"`
+ UserAgent string `json:"userAgent,omitempty"`
+ HTTPClient *http.Client
+}
+
+func NewConfiguration() *Configuration {
+ cfg := &Configuration{
+ BasePath: "https://localhost",
+ DefaultHeader: make(map[string]string),
+ UserAgent: "Swagger-Codegen/2.1.0/go",
+ }
+ return cfg
+}
+
+func (c *Configuration) AddDefaultHeader(key string, value string) {
+ c.DefaultHeader[key] = value
+} \ No newline at end of file
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/console_size.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/console_size.go
new file mode 100644
index 000000000..adbe07fe5
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/console_size.go
@@ -0,0 +1,17 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type ConsoleSize struct {
+
+ Height int32 `json:"Height,omitempty"`
+
+ Width int32 `json:"Width,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/container.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/container.go
new file mode 100644
index 000000000..17dce28bc
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/container.go
@@ -0,0 +1,35 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Container struct {
+
+ GuestOs *GuestOs `json:"GuestOs,omitempty"`
+
+ Storage *Storage `json:"Storage,omitempty"`
+
+ MappedDirectories []MappedDirectory `json:"MappedDirectories,omitempty"`
+
+ MappedPipes []MappedPipe `json:"MappedPipes,omitempty"`
+
+ Memory *Memory `json:"Memory,omitempty"`
+
+ Processor *Processor `json:"Processor,omitempty"`
+
+ Networking *Networking `json:"Networking,omitempty"`
+
+ HvSocket *HvSocket `json:"HvSocket,omitempty"`
+
+ ContainerCredentialGuard *ContainerCredentialGuardState `json:"ContainerCredentialGuard,omitempty"`
+
+ RegistryChanges *RegistryChanges `json:"RegistryChanges,omitempty"`
+
+ AssignedDevices []Device `json:"AssignedDevices,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/container_credential_guard_state.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/container_credential_guard_state.go
new file mode 100644
index 000000000..0f8f64437
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/container_credential_guard_state.go
@@ -0,0 +1,25 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type ContainerCredentialGuardState struct {
+
+ // Authentication cookie for calls to a Container Credential Guard instance.
+ Cookie string `json:"Cookie,omitempty"`
+
+ // Name of the RPC endpoint of the Container Credential Guard instance.
+ RpcEndpoint string `json:"RpcEndpoint,omitempty"`
+
+ // Transport used for the configured Container Credential Guard instance.
+ Transport string `json:"Transport,omitempty"`
+
+ // Credential spec used for the configured Container Credential Guard instance.
+ CredentialSpec string `json:"CredentialSpec,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/container_memory_information.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/container_memory_information.go
new file mode 100644
index 000000000..754797e21
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/container_memory_information.go
@@ -0,0 +1,26 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// memory usage as viewed from within the container
+type ContainerMemoryInformation struct {
+
+ TotalPhysicalBytes int32 `json:"TotalPhysicalBytes,omitempty"`
+
+ TotalUsage int32 `json:"TotalUsage,omitempty"`
+
+ CommittedBytes int32 `json:"CommittedBytes,omitempty"`
+
+ SharedCommittedBytes int32 `json:"SharedCommittedBytes,omitempty"`
+
+ CommitLimitBytes int32 `json:"CommitLimitBytes,omitempty"`
+
+ PeakCommitmentBytes int32 `json:"PeakCommitmentBytes,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/device.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/device.go
new file mode 100644
index 000000000..ca319bbbc
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/device.go
@@ -0,0 +1,16 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Device struct {
+
+ // The interface class guid of the device to assign to container.
+ InterfaceClassGuid string `json:"InterfaceClassGuid,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/devices.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/devices.go
new file mode 100644
index 000000000..b2191c571
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/devices.go
@@ -0,0 +1,43 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Devices struct {
+
+ ComPorts map[string]ComPort `json:"ComPorts,omitempty"`
+
+ Scsi map[string]Scsi `json:"Scsi,omitempty"`
+
+ VirtualPMem *VirtualPMemController `json:"VirtualPMem,omitempty"`
+
+ NetworkAdapters map[string]NetworkAdapter `json:"NetworkAdapters,omitempty"`
+
+ VideoMonitor *VideoMonitor `json:"VideoMonitor,omitempty"`
+
+ Keyboard *Keyboard `json:"Keyboard,omitempty"`
+
+ Mouse *Mouse `json:"Mouse,omitempty"`
+
+ HvSocket *HvSocket2 `json:"HvSocket,omitempty"`
+
+ EnhancedModeVideo *EnhancedModeVideo `json:"EnhancedModeVideo,omitempty"`
+
+ GuestCrashReporting *GuestCrashReporting `json:"GuestCrashReporting,omitempty"`
+
+ VirtualSmb *VirtualSmb `json:"VirtualSmb,omitempty"`
+
+ Plan9 *Plan9 `json:"Plan9,omitempty"`
+
+ Battery *Battery `json:"Battery,omitempty"`
+
+ FlexibleIov map[string]FlexibleIoDevice `json:"FlexibleIov,omitempty"`
+
+ SharedMemory *SharedMemoryConfiguration `json:"SharedMemory,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/enhanced_mode_video.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/enhanced_mode_video.go
new file mode 100644
index 000000000..4fe592f71
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/enhanced_mode_video.go
@@ -0,0 +1,15 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type EnhancedModeVideo struct {
+
+ ConnectionOptions *RdpConnectionOptions `json:"ConnectionOptions,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/flexible_io_device.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/flexible_io_device.go
new file mode 100644
index 000000000..51011afe4
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/flexible_io_device.go
@@ -0,0 +1,19 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type FlexibleIoDevice struct {
+
+ EmulatorId string `json:"EmulatorId,omitempty"`
+
+ HostingModel string `json:"HostingModel,omitempty"`
+
+ Configuration []string `json:"Configuration,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_connection.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_connection.go
new file mode 100644
index 000000000..7db29495b
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_connection.go
@@ -0,0 +1,19 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type GuestConnection struct {
+
+ // Use Vsock rather than Hyper-V sockets to communicate with the guest service.
+ UseVsock bool `json:"UseVsock,omitempty"`
+
+ // Don't disconnect the guest connection when pausing the virtual machine.
+ UseConnectedSuspend bool `json:"UseConnectedSuspend,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_connection_info.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_connection_info.go
new file mode 100644
index 000000000..8a369bab7
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_connection_info.go
@@ -0,0 +1,21 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// Information about the guest.
+type GuestConnectionInfo struct {
+
+ // Each schema version x.y stands for the range of versions a.b where a==x and b<=y. This list comes from the SupportedSchemaVersions field in GcsCapabilities.
+ SupportedSchemaVersions []Version `json:"SupportedSchemaVersions,omitempty"`
+
+ ProtocolVersion int32 `json:"ProtocolVersion,omitempty"`
+
+ GuestDefinedCapabilities *interface{} `json:"GuestDefinedCapabilities,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_crash_reporting.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_crash_reporting.go
new file mode 100644
index 000000000..c5fa76735
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_crash_reporting.go
@@ -0,0 +1,15 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type GuestCrashReporting struct {
+
+ WindowsCrashSettings *WindowsCrashReporting `json:"WindowsCrashSettings,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_os.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_os.go
new file mode 100644
index 000000000..c708fc7c3
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_os.go
@@ -0,0 +1,15 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type GuestOs struct {
+
+ HostName string `json:"HostName,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_state.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_state.go
new file mode 100644
index 000000000..ef1eec886
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/guest_state.go
@@ -0,0 +1,22 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type GuestState struct {
+
+ // The path to an existing file uses for persistent guest state storage. An empty string indicates the system should initialize new transient, in-memory guest state.
+ GuestStateFilePath string `json:"GuestStateFilePath,omitempty"`
+
+ // The path to an existing file for persistent runtime state storage. An empty string indicates the system should initialize new transient, in-memory runtime state.
+ RuntimeStateFilePath string `json:"RuntimeStateFilePath,omitempty"`
+
+ // If true, the guest state and runtime state files will be used as templates to populate transient, in-memory state instead of using the files as persistent backing store.
+ ForceTransientState bool `json:"ForceTransientState,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/hosted_system.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/hosted_system.go
new file mode 100644
index 000000000..0797584c5
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/hosted_system.go
@@ -0,0 +1,17 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type HostedSystem struct {
+
+ SchemaVersion *Version `json:"SchemaVersion,omitempty"`
+
+ Container *Container `json:"Container,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket.go
new file mode 100644
index 000000000..ef9ffb8dd
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket.go
@@ -0,0 +1,17 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type HvSocket struct {
+
+ Config *HvSocketSystemConfig `json:"Config,omitempty"`
+
+ EnablePowerShellDirect bool `json:"EnablePowerShellDirect,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket_2.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket_2.go
new file mode 100644
index 000000000..a19ba15c1
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket_2.go
@@ -0,0 +1,16 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// HvSocket configuration for a VM
+type HvSocket2 struct {
+
+ HvSocketConfig *HvSocketSystemConfig `json:"HvSocketConfig,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket_service_config.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket_service_config.go
new file mode 100644
index 000000000..a848e91e6
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket_service_config.go
@@ -0,0 +1,22 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type HvSocketServiceConfig struct {
+
+ // SDDL string that HvSocket will check before allowing a host process to bind to this specific service. If not specified, defaults to the system DefaultBindSecurityDescriptor, defined in HvSocketSystemWpConfig in V1.
+ BindSecurityDescriptor string `json:"BindSecurityDescriptor,omitempty"`
+
+ // SDDL string that HvSocket will check before allowing a host process to connect to this specific service. If not specified, defaults to the system DefaultConnectSecurityDescriptor, defined in HvSocketSystemWpConfig in V1.
+ ConnectSecurityDescriptor string `json:"ConnectSecurityDescriptor,omitempty"`
+
+ // If true, HvSocket will process wildcard binds for this service/system combination. Wildcard binds are secured in the registry at SOFTWARE/Microsoft/Windows NT/CurrentVersion/Virtualization/HvSocket/WildcardDescriptors
+ AllowWildcardBinds bool `json:"AllowWildcardBinds,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket_system_config.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket_system_config.go
new file mode 100644
index 000000000..69f4f9d39
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/hv_socket_system_config.go
@@ -0,0 +1,22 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// This is the HCS Schema version of the HvSocket configuration. The VMWP version is located in Config.Devices.IC in V1.
+type HvSocketSystemConfig struct {
+
+ // SDDL string that HvSocket will check before allowing a host process to bind to an unlisted service for this specific container/VM (not wildcard binds).
+ DefaultBindSecurityDescriptor string `json:"DefaultBindSecurityDescriptor,omitempty"`
+
+ // SDDL string that HvSocket will check before allowing a host process to connect to an unlisted service in the VM/container.
+ DefaultConnectSecurityDescriptor string `json:"DefaultConnectSecurityDescriptor,omitempty"`
+
+ ServiceTable map[string]HvSocketServiceConfig `json:"ServiceTable,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/keyboard.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/keyboard.go
new file mode 100644
index 000000000..3d3fa3b1c
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/keyboard.go
@@ -0,0 +1,13 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Keyboard struct {
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/layer.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/layer.go
new file mode 100644
index 000000000..b63b8ef12
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/layer.go
@@ -0,0 +1,22 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Layer struct {
+
+ Id string `json:"Id,omitempty"`
+
+ Path string `json:"Path,omitempty"`
+
+ PathType string `json:"PathType,omitempty"`
+
+ // Unspecified defaults to Enabled
+ Cache string `json:"Cache,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/linux_kernel_direct.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/linux_kernel_direct.go
new file mode 100644
index 000000000..0ab6c280f
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/linux_kernel_direct.go
@@ -0,0 +1,18 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.2
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type LinuxKernelDirect struct {
+ KernelFilePath string `json:"KernelFilePath,omitempty"`
+
+ InitRdPath string `json:"InitRdPath,omitempty"`
+
+ KernelCmdLine string `json:"KernelCmdLine,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/mapped_directory.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/mapped_directory.go
new file mode 100644
index 000000000..a823a6d3b
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/mapped_directory.go
@@ -0,0 +1,21 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type MappedDirectory struct {
+
+ HostPath string `json:"HostPath,omitempty"`
+
+ HostPathType string `json:"HostPathType,omitempty"`
+
+ ContainerPath string `json:"ContainerPath,omitempty"`
+
+ ReadOnly bool `json:"ReadOnly,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/mapped_pipe.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/mapped_pipe.go
new file mode 100644
index 000000000..2d1d2604a
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/mapped_pipe.go
@@ -0,0 +1,19 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type MappedPipe struct {
+
+ ContainerPipeName string `json:"ContainerPipeName,omitempty"`
+
+ HostPath string `json:"HostPath,omitempty"`
+
+ HostPathType string `json:"HostPathType,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/memory.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/memory.go
new file mode 100644
index 000000000..e1d135a3a
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/memory.go
@@ -0,0 +1,15 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Memory struct {
+
+ SizeInMB int32 `json:"SizeInMB,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/memory_2.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/memory_2.go
new file mode 100644
index 000000000..27d0b8c48
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/memory_2.go
@@ -0,0 +1,25 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Memory2 struct {
+ SizeInMB int32 `json:"SizeInMB,omitempty"`
+
+ AllowOvercommit bool `json:"AllowOvercommit,omitempty"`
+
+ EnableHotHint bool `json:"EnableHotHint,omitempty"`
+
+ EnableColdHint bool `json:"EnableColdHint,omitempty"`
+
+ EnableEpf bool `json:"EnableEpf,omitempty"`
+
+ // EnableDeferredCommit is private in the schema. If regenerated need to add back.
+ EnableDeferredCommit bool `json:"EnableDeferredCommit,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/memory_information_for_vm.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/memory_information_for_vm.go
new file mode 100644
index 000000000..bdd87dffd
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/memory_information_for_vm.go
@@ -0,0 +1,19 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type MemoryInformationForVm struct {
+
+ VirtualNodeCount int32 `json:"VirtualNodeCount,omitempty"`
+
+ VirtualMachineMemory *VmMemory `json:"VirtualMachineMemory,omitempty"`
+
+ VirtualNodes []VirtualNodeInfo `json:"VirtualNodes,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/memory_stats.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/memory_stats.go
new file mode 100644
index 000000000..6214970f6
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/memory_stats.go
@@ -0,0 +1,20 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// Memory runtime statistics
+type MemoryStats struct {
+
+ MemoryUsageCommitBytes int32 `json:"MemoryUsageCommitBytes,omitempty"`
+
+ MemoryUsageCommitPeakBytes int32 `json:"MemoryUsageCommitPeakBytes,omitempty"`
+
+ MemoryUsagePrivateWorkingSetBytes int32 `json:"MemoryUsagePrivateWorkingSetBytes,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/modify_setting_request.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/modify_setting_request.go
new file mode 100644
index 000000000..d29455a3e
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/modify_setting_request.go
@@ -0,0 +1,20 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type ModifySettingRequest struct {
+ ResourcePath string `json:"ResourcePath,omitempty"`
+
+ RequestType string `json:"RequestType,omitempty"`
+
+ Settings interface{} `json:"Settings,omitempty"` // NOTE: Swagger generated as *interface{}. Locally updated
+
+ GuestRequest interface{} `json:"GuestRequest,omitempty"` // NOTE: Swagger generated as *interface{}. Locally updated
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/mouse.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/mouse.go
new file mode 100644
index 000000000..ccf8b938f
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/mouse.go
@@ -0,0 +1,13 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Mouse struct {
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/network_adapter.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/network_adapter.go
new file mode 100644
index 000000000..c586f66c2
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/network_adapter.go
@@ -0,0 +1,17 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type NetworkAdapter struct {
+
+ EndpointId string `json:"EndpointId,omitempty"`
+
+ MacAddress string `json:"MacAddress,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/networking.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/networking.go
new file mode 100644
index 000000000..12c47827c
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/networking.go
@@ -0,0 +1,24 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Networking struct {
+
+ AllowUnqualifiedDnsQuery bool `json:"AllowUnqualifiedDnsQuery,omitempty"`
+
+ DnsSearchList string `json:"DnsSearchList,omitempty"`
+
+ NetworkSharedContainerName string `json:"NetworkSharedContainerName,omitempty"`
+
+ // Guid in windows; string in linux
+ Namespace string `json:"Namespace,omitempty"`
+
+ NetworkAdapters []string `json:"NetworkAdapters,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/pause_notification.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/pause_notification.go
new file mode 100644
index 000000000..1cd70d179
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/pause_notification.go
@@ -0,0 +1,16 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// Notification data that is indicated to components running in the Virtual Machine.
+type PauseNotification struct {
+
+ Reason string `json:"Reason,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/pause_options.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/pause_options.go
new file mode 100644
index 000000000..780a5cae2
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/pause_options.go
@@ -0,0 +1,18 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// Options for HcsPauseComputeSystem
+type PauseOptions struct {
+
+ SuspensionLevel string `json:"SuspensionLevel,omitempty"`
+
+ HostedNotification *PauseNotification `json:"HostedNotification,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/plan9.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/plan9.go
new file mode 100644
index 000000000..705c677e1
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/plan9.go
@@ -0,0 +1,15 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Plan9 struct {
+
+ Shares []Plan9Share `json:"Shares,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/plan9_share.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/plan9_share.go
new file mode 100644
index 000000000..b2bc58b83
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/plan9_share.go
@@ -0,0 +1,26 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Plan9Share struct {
+
+ Name string `json:"Name,omitempty"`
+
+ // The name by which the guest operation system can access this share, via the aname parameter in the Plan9 protocol.
+ AccessName string `json:"AccessName,omitempty"`
+
+ Path string `json:"Path,omitempty"`
+
+ Port int32 `json:"Port,omitempty"`
+
+ ReadOnly bool `json:"ReadOnly,omitempty"`
+
+ UseShareRootIdentity bool `json:"UseShareRootIdentity,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/process_details.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/process_details.go
new file mode 100644
index 000000000..63e0b7f8f
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/process_details.go
@@ -0,0 +1,34 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+import (
+ "time"
+)
+
+// Information about a process running in a container
+type ProcessDetails struct {
+
+ ProcessId int32 `json:"ProcessId,omitempty"`
+
+ ImageName string `json:"ImageName,omitempty"`
+
+ CreateTimestamp time.Time `json:"CreateTimestamp,omitempty"`
+
+ UserTime100ns int32 `json:"UserTime100ns,omitempty"`
+
+ KernelTime100ns int32 `json:"KernelTime100ns,omitempty"`
+
+ MemoryCommitBytes int32 `json:"MemoryCommitBytes,omitempty"`
+
+ MemoryWorkingSetPrivateBytes int32 `json:"MemoryWorkingSetPrivateBytes,omitempty"`
+
+ MemoryWorkingSetSharedBytes int32 `json:"MemoryWorkingSetSharedBytes,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/process_modify_request.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/process_modify_request.go
new file mode 100644
index 000000000..29bc2e3d0
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/process_modify_request.go
@@ -0,0 +1,20 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// Passed to HcsRpc_ModifyProcess
+type ProcessModifyRequest struct {
+
+ Operation string `json:"Operation,omitempty"`
+
+ ConsoleSize *ConsoleSize `json:"ConsoleSize,omitempty"`
+
+ CloseHandle *CloseHandle `json:"CloseHandle,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/process_parameters.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/process_parameters.go
new file mode 100644
index 000000000..470c55734
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/process_parameters.go
@@ -0,0 +1,47 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type ProcessParameters struct {
+
+ ApplicationName string `json:"ApplicationName,omitempty"`
+
+ CommandLine string `json:"CommandLine,omitempty"`
+
+ // optional alternative to CommandLine, currently only supported by Linux GCS
+ CommandArgs []string `json:"CommandArgs,omitempty"`
+
+ User string `json:"User,omitempty"`
+
+ WorkingDirectory string `json:"WorkingDirectory,omitempty"`
+
+ Environment map[string]string `json:"Environment,omitempty"`
+
+ // if set, will run as low-privilege process
+ RestrictedToken bool `json:"RestrictedToken,omitempty"`
+
+ // if set, ignore StdErrPipe
+ EmulateConsole bool `json:"EmulateConsole,omitempty"`
+
+ CreateStdInPipe bool `json:"CreateStdInPipe,omitempty"`
+
+ CreateStdOutPipe bool `json:"CreateStdOutPipe,omitempty"`
+
+ CreateStdErrPipe bool `json:"CreateStdErrPipe,omitempty"`
+
+ // height then width
+ ConsoleSize []int32 `json:"ConsoleSize,omitempty"`
+
+ // if set, find an existing session for the user and create the process in it
+ UseExistingLogin bool `json:"UseExistingLogin,omitempty"`
+
+ // if set, use the legacy console instead of conhost
+ UseLegacyConsole bool `json:"UseLegacyConsole,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/process_status.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/process_status.go
new file mode 100644
index 000000000..20793d150
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/process_status.go
@@ -0,0 +1,22 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// Status of a process running in a container
+type ProcessStatus struct {
+
+ ProcessId int32 `json:"ProcessId,omitempty"`
+
+ Exited bool `json:"Exited,omitempty"`
+
+ ExitCode int32 `json:"ExitCode,omitempty"`
+
+ LastWaitResult int32 `json:"LastWaitResult,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/processor.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/processor.go
new file mode 100644
index 000000000..7a60b0245
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/processor.go
@@ -0,0 +1,19 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Processor struct {
+
+ Count int32 `json:"Count,omitempty"`
+
+ Maximum int32 `json:"Maximum,omitempty"`
+
+ Weight int32 `json:"Weight,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/processor_2.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/processor_2.go
new file mode 100644
index 000000000..40d3e7356
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/processor_2.go
@@ -0,0 +1,21 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Processor2 struct {
+
+ Count int32 `json:"Count,omitempty"`
+
+ Limit int32 `json:"Limit,omitempty"`
+
+ Weight int32 `json:"Weight,omitempty"`
+
+ ExposeVirtualizationExtensions bool `json:"ExposeVirtualizationExtensions,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/processor_stats.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/processor_stats.go
new file mode 100644
index 000000000..9d3b77e57
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/processor_stats.go
@@ -0,0 +1,20 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// CPU runtime statistics
+type ProcessorStats struct {
+
+ TotalRuntime100ns int32 `json:"TotalRuntime100ns,omitempty"`
+
+ RuntimeUser100ns int32 `json:"RuntimeUser100ns,omitempty"`
+
+ RuntimeKernel100ns int32 `json:"RuntimeKernel100ns,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/properties.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/properties.go
new file mode 100644
index 000000000..6db2a48f6
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/properties.go
@@ -0,0 +1,47 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Properties struct {
+
+ Id string `json:"Id,omitempty"`
+
+ SystemType string `json:"SystemType,omitempty"`
+
+ RuntimeOsType string `json:"RuntimeOsType,omitempty"`
+
+ Name string `json:"Name,omitempty"`
+
+ Owner string `json:"Owner,omitempty"`
+
+ RuntimeId string `json:"RuntimeId,omitempty"`
+
+ RuntimeTemplateId string `json:"RuntimeTemplateId,omitempty"`
+
+ State string `json:"State,omitempty"`
+
+ Stopped bool `json:"Stopped,omitempty"`
+
+ ExitType string `json:"ExitType,omitempty"`
+
+ Memory *MemoryInformationForVm `json:"Memory,omitempty"`
+
+ Statistics *Statistics `json:"Statistics,omitempty"`
+
+ ProcessList []ProcessDetails `json:"ProcessList,omitempty"`
+
+ TerminateOnLastHandleClosed bool `json:"TerminateOnLastHandleClosed,omitempty"`
+
+ HostingSystemId string `json:"HostingSystemId,omitempty"`
+
+ SharedMemoryRegionInfo []SharedMemoryRegionInfo `json:"SharedMemoryRegionInfo,omitempty"`
+
+ GuestConnectionInfo *GuestConnectionInfo `json:"GuestConnectionInfo,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/property_query.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/property_query.go
new file mode 100644
index 000000000..22b92ffdf
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/property_query.go
@@ -0,0 +1,16 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// By default the basic properties will be returned. This query provides a way to request specific properties.
+type PropertyQuery struct {
+
+ PropertyTypes []string `json:"PropertyTypes,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/rdp_connection_options.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/rdp_connection_options.go
new file mode 100644
index 000000000..97e453128
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/rdp_connection_options.go
@@ -0,0 +1,17 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type RdpConnectionOptions struct {
+
+ AccessSids []string `json:"AccessSids,omitempty"`
+
+ NamedPipe string `json:"NamedPipe,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/registry_changes.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/registry_changes.go
new file mode 100644
index 000000000..fa574ccc8
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/registry_changes.go
@@ -0,0 +1,17 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type RegistryChanges struct {
+
+ AddValues []RegistryValue `json:"AddValues,omitempty"`
+
+ DeleteKeys []RegistryKey `json:"DeleteKeys,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/registry_key.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/registry_key.go
new file mode 100644
index 000000000..fab03bc60
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/registry_key.go
@@ -0,0 +1,19 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type RegistryKey struct {
+
+ Hive string `json:"Hive,omitempty"`
+
+ Name string `json:"Name,omitempty"`
+
+ Volatile bool `json:"Volatile,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/registry_value.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/registry_value.go
new file mode 100644
index 000000000..1589f4841
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/registry_value.go
@@ -0,0 +1,31 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type RegistryValue struct {
+
+ Key *RegistryKey `json:"Key,omitempty"`
+
+ Name string `json:"Name,omitempty"`
+
+ Type_ string `json:"Type,omitempty"`
+
+ // One and only one value type must be set.
+ StringValue string `json:"StringValue,omitempty"`
+
+ BinaryValue string `json:"BinaryValue,omitempty"`
+
+ DWordValue int32 `json:"DWordValue,omitempty"`
+
+ QWordValue int32 `json:"QWordValue,omitempty"`
+
+ // Only used if RegistryValueType is CustomType The data is in BinaryValue
+ CustomType int32 `json:"CustomType,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/restore_state.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/restore_state.go
new file mode 100644
index 000000000..778ff5873
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/restore_state.go
@@ -0,0 +1,19 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type RestoreState struct {
+
+ // The path to the save state file to restore the system from.
+ SaveStateFilePath string `json:"SaveStateFilePath,omitempty"`
+
+ // The ID of the template system to clone this new system off of. An empty string indicates the system should not be cloned from a template.
+ TemplateSystemId string `json:"TemplateSystemId,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/save_options.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/save_options.go
new file mode 100644
index 000000000..e55fa1d98
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/save_options.go
@@ -0,0 +1,19 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type SaveOptions struct {
+
+ // The type of save operation to be performed.
+ SaveType string `json:"SaveType,omitempty"`
+
+ // The path to the file that will container the saved state.
+ SaveStateFilePath string `json:"SaveStateFilePath,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/scsi.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/scsi.go
new file mode 100644
index 000000000..bf253a470
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/scsi.go
@@ -0,0 +1,16 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Scsi struct {
+
+ // Map of attachments, where the key is the integer LUN number on the controller.
+ Attachments map[string]Attachment `json:"Attachments,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/shared_memory_configuration.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/shared_memory_configuration.go
new file mode 100644
index 000000000..bd573f6cd
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/shared_memory_configuration.go
@@ -0,0 +1,15 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type SharedMemoryConfiguration struct {
+
+ Regions []SharedMemoryRegion `json:"Regions,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/shared_memory_region.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/shared_memory_region.go
new file mode 100644
index 000000000..a57b2cba7
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/shared_memory_region.go
@@ -0,0 +1,23 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type SharedMemoryRegion struct {
+
+ SectionName string `json:"SectionName,omitempty"`
+
+ StartOffset int32 `json:"StartOffset,omitempty"`
+
+ Length int32 `json:"Length,omitempty"`
+
+ AllowGuestWrite bool `json:"AllowGuestWrite,omitempty"`
+
+ HiddenFromGuest bool `json:"HiddenFromGuest,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/shared_memory_region_info.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/shared_memory_region_info.go
new file mode 100644
index 000000000..d9a50cc7d
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/shared_memory_region_info.go
@@ -0,0 +1,17 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type SharedMemoryRegionInfo struct {
+
+ SectionName string `json:"SectionName,omitempty"`
+
+ GuestPhysicalAddress int32 `json:"GuestPhysicalAddress,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/silo_properties.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/silo_properties.go
new file mode 100644
index 000000000..599c06e8a
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/silo_properties.go
@@ -0,0 +1,18 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// Silo job information
+type SiloProperties struct {
+
+ Enabled bool `json:"Enabled,omitempty"`
+
+ JobName string `json:"JobName,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/statistics.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/statistics.go
new file mode 100644
index 000000000..5cb3ed93b
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/statistics.go
@@ -0,0 +1,30 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+import (
+ "time"
+)
+
+// Runtime statistics for a container
+type Statistics struct {
+
+ Timestamp time.Time `json:"Timestamp,omitempty"`
+
+ ContainerStartTime time.Time `json:"ContainerStartTime,omitempty"`
+
+ Uptime100ns int32 `json:"Uptime100ns,omitempty"`
+
+ Processor *ProcessorStats `json:"Processor,omitempty"`
+
+ Memory *MemoryStats `json:"Memory,omitempty"`
+
+ Storage *StorageStats `json:"Storage,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/storage.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/storage.go
new file mode 100644
index 000000000..2627af913
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/storage.go
@@ -0,0 +1,21 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Storage struct {
+
+ // List of layers that describe the parent hierarchy for a container's storage. These layers combined together, presented as a disposable and/or committable working storage, are used by the container to record all changes done to the parent layers.
+ Layers []Layer `json:"Layers,omitempty"`
+
+ // Path that points to the scratch space of a container, where parent layers are combined together to present a new disposable and/or committable layer with the changes done during its runtime.
+ Path string `json:"Path,omitempty"`
+
+ QoS *StorageQoS `json:"QoS,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/storage_qo_s.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/storage_qo_s.go
new file mode 100644
index 000000000..8c5255df1
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/storage_qo_s.go
@@ -0,0 +1,17 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type StorageQoS struct {
+
+ IopsMaximum int32 `json:"IopsMaximum,omitempty"`
+
+ BandwidthMaximum int32 `json:"BandwidthMaximum,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/storage_stats.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/storage_stats.go
new file mode 100644
index 000000000..198ea57d7
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/storage_stats.go
@@ -0,0 +1,22 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+// Storage runtime statistics
+type StorageStats struct {
+
+ ReadCountNormalized int32 `json:"ReadCountNormalized,omitempty"`
+
+ ReadSizeBytes int32 `json:"ReadSizeBytes,omitempty"`
+
+ WriteCountNormalized int32 `json:"WriteCountNormalized,omitempty"`
+
+ WriteSizeBytes int32 `json:"WriteSizeBytes,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/topology.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/topology.go
new file mode 100644
index 000000000..af2e3c823
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/topology.go
@@ -0,0 +1,17 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Topology struct {
+
+ Memory *Memory2 `json:"Memory,omitempty"`
+
+ Processor *Processor2 `json:"Processor,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/uefi.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/uefi.go
new file mode 100644
index 000000000..ba91178f9
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/uefi.go
@@ -0,0 +1,21 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Uefi struct {
+
+ EnableDebugger bool `json:"EnableDebugger,omitempty"`
+
+ SecureBootTemplateId string `json:"SecureBootTemplateId,omitempty"`
+
+ BootThis *UefiBootEntry `json:"BootThis,omitempty"`
+
+ Console string `json:"Console,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/uefi_boot_entry.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/uefi_boot_entry.go
new file mode 100644
index 000000000..6620fb2bc
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/uefi_boot_entry.go
@@ -0,0 +1,23 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type UefiBootEntry struct {
+
+ DeviceType string `json:"DeviceType,omitempty"`
+
+ DevicePath string `json:"DevicePath,omitempty"`
+
+ DiskNumber int32 `json:"DiskNumber,omitempty"`
+
+ OptionalData string `json:"OptionalData,omitempty"`
+
+ VmbFsRootPath string `json:"VmbFsRootPath,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/version.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/version.go
new file mode 100644
index 000000000..62c0e4d12
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/version.go
@@ -0,0 +1,17 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type Version struct {
+
+ Major int32 `json:"Major,omitempty"`
+
+ Minor int32 `json:"Minor,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/video_monitor.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/video_monitor.go
new file mode 100644
index 000000000..0958e5606
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/video_monitor.go
@@ -0,0 +1,19 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type VideoMonitor struct {
+
+ HorizontalResolution int32 `json:"HorizontalResolution,omitempty"`
+
+ VerticalResolution int32 `json:"VerticalResolution,omitempty"`
+
+ ConnectionOptions *RdpConnectionOptions `json:"ConnectionOptions,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_machine.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_machine.go
new file mode 100644
index 000000000..11f39eea7
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_machine.go
@@ -0,0 +1,29 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type VirtualMachine struct {
+
+ Chipset *Chipset `json:"Chipset,omitempty"`
+
+ ComputeTopology *Topology `json:"ComputeTopology,omitempty"`
+
+ Devices *Devices `json:"Devices,omitempty"`
+
+ GuestState *GuestState `json:"GuestState,omitempty"`
+
+ RestoreState *RestoreState `json:"RestoreState,omitempty"`
+
+ RegistryChanges *RegistryChanges `json:"RegistryChanges,omitempty"`
+
+ StorageQoS *StorageQoS `json:"StorageQoS,omitempty"`
+
+ GuestConnection *GuestConnection `json:"GuestConnection,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_node_info.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_node_info.go
new file mode 100644
index 000000000..48402d8ec
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_node_info.go
@@ -0,0 +1,21 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type VirtualNodeInfo struct {
+
+ VirtualNodeIndex int32 `json:"VirtualNodeIndex,omitempty"`
+
+ PhysicalNodeNumber int32 `json:"PhysicalNodeNumber,omitempty"`
+
+ VirtualProcessorCount int32 `json:"VirtualProcessorCount,omitempty"`
+
+ MemoryUsageInPages int32 `json:"MemoryUsageInPages,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_p_mem_controller.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_p_mem_controller.go
new file mode 100644
index 000000000..f5b7f3e38
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_p_mem_controller.go
@@ -0,0 +1,20 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type VirtualPMemController struct {
+ Devices map[string]VirtualPMemDevice `json:"Devices,omitempty"`
+
+ MaximumCount uint32 `json:"MaximumCount,omitempty"`
+
+ MaximumSizeBytes uint64 `json:"MaximumSizeBytes,omitempty"`
+
+ Backing string `json:"Backing,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_p_mem_device.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_p_mem_device.go
new file mode 100644
index 000000000..47714444a
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_p_mem_device.go
@@ -0,0 +1,19 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type VirtualPMemDevice struct {
+
+ HostPath string `json:"HostPath,omitempty"`
+
+ ReadOnly bool `json:"ReadOnly,omitempty"`
+
+ ImageFormat string `json:"ImageFormat,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_smb.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_smb.go
new file mode 100644
index 000000000..76131b3a7
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_smb.go
@@ -0,0 +1,17 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type VirtualSmb struct {
+
+ Shares []VirtualSmbShare `json:"Shares,omitempty"`
+
+ DirectFileMappingInMB int64 `json:"DirectFileMappingInMB,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_smb_share.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_smb_share.go
new file mode 100644
index 000000000..b50098a42
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_smb_share.go
@@ -0,0 +1,21 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type VirtualSmbShare struct {
+
+ Name string `json:"Name,omitempty"`
+
+ Path string `json:"Path,omitempty"`
+
+ AllowedFiles []string `json:"AllowedFiles,omitempty"`
+
+ Options *VirtualSmbShareOptions `json:"Options,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_smb_share_options.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_smb_share_options.go
new file mode 100644
index 000000000..c1894279d
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/virtual_smb_share_options.go
@@ -0,0 +1,63 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type VirtualSmbShareOptions struct {
+
+ ReadOnly bool `json:"ReadOnly,omitempty"`
+
+ // convert exclusive access to shared read access
+ ShareRead bool `json:"ShareRead,omitempty"`
+
+ // all opens will use cached I/O
+ CacheIo bool `json:"CacheIo,omitempty"`
+
+ // disable oplock support
+ NoOplocks bool `json:"NoOplocks,omitempty"`
+
+ // Acquire the backup privilege when attempting to open
+ TakeBackupPrivilege bool `json:"TakeBackupPrivilege,omitempty"`
+
+ // Use the identity of the share root when opening
+ UseShareRootIdentity bool `json:"UseShareRootIdentity,omitempty"`
+
+ // disable Direct Mapping
+ NoDirectmap bool `json:"NoDirectmap,omitempty"`
+
+ // disable Byterange locks
+ NoLocks bool `json:"NoLocks,omitempty"`
+
+ // disable Directory CHange Notifications
+ NoDirnotify bool `json:"NoDirnotify,omitempty"`
+
+ // share is use for VM shared memory
+ VmSharedMemory bool `json:"VmSharedMemory,omitempty"`
+
+ // allow access only to the files specified in AllowedFiles
+ RestrictFileAccess bool `json:"RestrictFileAccess,omitempty"`
+
+ // disable all oplocks except Level II
+ ForceLevelIIOplocks bool `json:"ForceLevelIIOplocks,omitempty"`
+
+ // Allow the host to reparse this base layer
+ ReparseBaseLayer bool `json:"ReparseBaseLayer,omitempty"`
+
+ // Enable pseudo-oplocks
+ PseudoOplocks bool `json:"PseudoOplocks,omitempty"`
+
+ // All opens will use non-cached IO
+ NonCacheIo bool `json:"NonCacheIo,omitempty"`
+
+ // Enable pseudo directory change notifications
+ PseudoDirnotify bool `json:"PseudoDirnotify,omitempty"`
+
+ // Block directory enumeration, renames, and deletes.
+ SingleFileMapping bool `json:"SingleFileMapping,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/vm_memory.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/vm_memory.go
new file mode 100644
index 000000000..39f628667
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/vm_memory.go
@@ -0,0 +1,27 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type VmMemory struct {
+
+ AvailableMemory int32 `json:"AvailableMemory,omitempty"`
+
+ AvailableMemoryBuffer int32 `json:"AvailableMemoryBuffer,omitempty"`
+
+ ReservedMemory int32 `json:"ReservedMemory,omitempty"`
+
+ AssignedMemory int32 `json:"AssignedMemory,omitempty"`
+
+ SlpActive bool `json:"SlpActive,omitempty"`
+
+ BalancingEnabled bool `json:"BalancingEnabled,omitempty"`
+
+ DmOperationInProgress bool `json:"DmOperationInProgress,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/schema2/windows_crash_reporting.go b/vendor/github.com/Microsoft/hcsshim/internal/schema2/windows_crash_reporting.go
new file mode 100644
index 000000000..cf632bbc8
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/schema2/windows_crash_reporting.go
@@ -0,0 +1,17 @@
+/*
+ * HCS API
+ *
+ * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+ *
+ * API version: 2.1
+ * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
+ */
+
+package hcsschema
+
+type WindowsCrashReporting struct {
+
+ DumpFileName string `json:"DumpFileName,omitempty"`
+
+ MaxDumpSize int64 `json:"MaxDumpSize,omitempty"`
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/timeout/timeout.go b/vendor/github.com/Microsoft/hcsshim/internal/timeout/timeout.go
new file mode 100644
index 000000000..ff3b6572e
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/timeout/timeout.go
@@ -0,0 +1,70 @@
+package timeout
+
+import (
+ "os"
+ "strconv"
+ "time"
+)
+
+var (
+ // defaultTimeout is the timeout for most operations that is not overridden.
+ defaultTimeout = 4 * time.Minute
+
+ // defaultTimeoutTestdRetry is the retry loop timeout for testd to respond
+ // for a disk to come online in LCOW.
+ defaultTimeoutTestdRetry = 5 * time.Second
+)
+
+// External variables for HCSShim consumers to use.
+var (
+ // SystemCreate is the timeout for creating a compute system
+ SystemCreate time.Duration = defaultTimeout
+
+ // SystemStart is the timeout for starting a compute system
+ SystemStart time.Duration = defaultTimeout
+
+ // SystemPause is the timeout for pausing a compute system
+ SystemPause time.Duration = defaultTimeout
+
+ // SystemResume is the timeout for resuming a compute system
+ SystemResume time.Duration = defaultTimeout
+
+ // SyscallWatcher is the timeout before warning of a potential stuck platform syscall.
+ SyscallWatcher time.Duration = defaultTimeout
+
+ // Tar2VHD is the timeout for the tar2vhd operation to complete
+ Tar2VHD time.Duration = defaultTimeout
+
+ // ExternalCommandToStart is the timeout for external commands to start
+ ExternalCommandToStart = defaultTimeout
+
+ // ExternalCommandToComplete is the timeout for external commands to complete.
+ // Generally this means copying data from their stdio pipes.
+ ExternalCommandToComplete = defaultTimeout
+
+ // TestDRetryLoop is the timeout for testd retry loop when onlining a SCSI disk in LCOW
+ TestDRetryLoop = defaultTimeoutTestdRetry
+)
+
+func init() {
+ SystemCreate = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMCREATE", SystemCreate)
+ SystemStart = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMSTART", SystemStart)
+ SystemPause = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMPAUSE", SystemPause)
+ SystemResume = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSTEMRESUME", SystemResume)
+ SyscallWatcher = durationFromEnvironment("HCSSHIM_TIMEOUT_SYSCALLWATCHER", SyscallWatcher)
+ Tar2VHD = durationFromEnvironment("HCSSHIM_TIMEOUT_TAR2VHD", Tar2VHD)
+ ExternalCommandToStart = durationFromEnvironment("HCSSHIM_TIMEOUT_EXTERNALCOMMANDSTART", ExternalCommandToStart)
+ ExternalCommandToComplete = durationFromEnvironment("HCSSHIM_TIMEOUT_EXTERNALCOMMANDCOMPLETE", ExternalCommandToComplete)
+ TestDRetryLoop = durationFromEnvironment("HCSSHIM_TIMEOUT_TESTDRETRYLOOP", TestDRetryLoop)
+}
+
+func durationFromEnvironment(env string, defaultValue time.Duration) time.Duration {
+ envTimeout := os.Getenv(env)
+ if len(envTimeout) > 0 {
+ e, err := strconv.Atoi(envTimeout)
+ if err == nil && e > 0 {
+ return time.Second * time.Duration(e)
+ }
+ }
+ return defaultValue
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/activatelayer.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/activatelayer.go
new file mode 100644
index 000000000..3a0d4bc58
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/activatelayer.go
@@ -0,0 +1,25 @@
+package wclayer
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/sirupsen/logrus"
+)
+
+// ActivateLayer will find the layer with the given id and mount it's filesystem.
+// For a read/write layer, the mounted filesystem will appear as a volume on the
+// host, while a read-only layer is generally expected to be a no-op.
+// An activated layer must later be deactivated via DeactivateLayer.
+func ActivateLayer(path string) error {
+ title := "hcsshim::ActivateLayer "
+ logrus.Debugf(title+"path %s", path)
+
+ err := activateLayer(&stdDriverInfo, path)
+ if err != nil {
+ err = hcserror.Errorf(err, title, "path=%s", path)
+ logrus.Error(err)
+ return err
+ }
+
+ logrus.Debugf(title+" - succeeded path=%s", path)
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/baselayer.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/baselayer.go
index 9babd4e18..5784241df 100644
--- a/vendor/github.com/Microsoft/hcsshim/baselayer.go
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/baselayer.go
@@ -1,4 +1,4 @@
-package hcsshim
+package wclayer
import (
"errors"
@@ -7,10 +7,12 @@ import (
"syscall"
"github.com/Microsoft/go-winio"
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/Microsoft/hcsshim/internal/safefile"
)
type baseLayerWriter struct {
- root string
+ root *os.File
f *os.File
bw *winio.BackupFileWriter
err error
@@ -26,10 +28,10 @@ type dirInfo struct {
// reapplyDirectoryTimes reapplies directory modification, creation, etc. times
// after processing of the directory tree has completed. The times are expected
// to be ordered such that parent directories come before child directories.
-func reapplyDirectoryTimes(dis []dirInfo) error {
+func reapplyDirectoryTimes(root *os.File, dis []dirInfo) error {
for i := range dis {
di := &dis[len(dis)-i-1] // reverse order: process child directories first
- f, err := winio.OpenForBackup(di.path, syscall.GENERIC_READ|syscall.GENERIC_WRITE, syscall.FILE_SHARE_READ, syscall.OPEN_EXISTING)
+ f, err := safefile.OpenRelative(di.path, root, syscall.GENERIC_READ|syscall.GENERIC_WRITE, syscall.FILE_SHARE_READ, safefile.FILE_OPEN, safefile.FILE_DIRECTORY_FILE)
if err != nil {
return err
}
@@ -75,12 +77,6 @@ func (w *baseLayerWriter) Add(name string, fileInfo *winio.FileBasicInfo) (err e
w.hasUtilityVM = true
}
- path := filepath.Join(w.root, name)
- path, err = makeLongAbsPath(path)
- if err != nil {
- return err
- }
-
var f *os.File
defer func() {
if f != nil {
@@ -88,27 +84,23 @@ func (w *baseLayerWriter) Add(name string, fileInfo *winio.FileBasicInfo) (err e
}
}()
- createmode := uint32(syscall.CREATE_NEW)
+ extraFlags := uint32(0)
if fileInfo.FileAttributes&syscall.FILE_ATTRIBUTE_DIRECTORY != 0 {
- err := os.Mkdir(path, 0)
- if err != nil && !os.IsExist(err) {
- return err
- }
- createmode = syscall.OPEN_EXISTING
+ extraFlags |= safefile.FILE_DIRECTORY_FILE
if fileInfo.FileAttributes&syscall.FILE_ATTRIBUTE_REPARSE_POINT == 0 {
- w.dirInfo = append(w.dirInfo, dirInfo{path, *fileInfo})
+ w.dirInfo = append(w.dirInfo, dirInfo{name, *fileInfo})
}
}
mode := uint32(syscall.GENERIC_READ | syscall.GENERIC_WRITE | winio.WRITE_DAC | winio.WRITE_OWNER | winio.ACCESS_SYSTEM_SECURITY)
- f, err = winio.OpenForBackup(path, mode, syscall.FILE_SHARE_READ, createmode)
+ f, err = safefile.OpenRelative(name, w.root, mode, syscall.FILE_SHARE_READ, safefile.FILE_CREATE, extraFlags)
if err != nil {
- return makeError(err, "Failed to OpenForBackup", path)
+ return hcserror.New(err, "Failed to safefile.OpenRelative", name)
}
err = winio.SetFileBasicInfo(f, fileInfo)
if err != nil {
- return makeError(err, "Failed to SetFileBasicInfo", path)
+ return hcserror.New(err, "Failed to SetFileBasicInfo", name)
}
w.f = f
@@ -129,17 +121,7 @@ func (w *baseLayerWriter) AddLink(name string, target string) (err error) {
return err
}
- linkpath, err := makeLongAbsPath(filepath.Join(w.root, name))
- if err != nil {
- return err
- }
-
- linktarget, err := makeLongAbsPath(filepath.Join(w.root, target))
- if err != nil {
- return err
- }
-
- return os.Link(linktarget, linkpath)
+ return safefile.LinkRelative(target, w.root, name, w.root)
}
func (w *baseLayerWriter) Remove(name string) error {
@@ -155,6 +137,10 @@ func (w *baseLayerWriter) Write(b []byte) (int, error) {
}
func (w *baseLayerWriter) Close() error {
+ defer func() {
+ w.root.Close()
+ w.root = nil
+ }()
err := w.closeCurrentFile()
if err != nil {
return err
@@ -162,18 +148,22 @@ func (w *baseLayerWriter) Close() error {
if w.err == nil {
// Restore the file times of all the directories, since they may have
// been modified by creating child directories.
- err = reapplyDirectoryTimes(w.dirInfo)
+ err = reapplyDirectoryTimes(w.root, w.dirInfo)
if err != nil {
return err
}
- err = ProcessBaseLayer(w.root)
+ err = ProcessBaseLayer(w.root.Name())
if err != nil {
return err
}
if w.hasUtilityVM {
- err = ProcessUtilityVMImage(filepath.Join(w.root, "UtilityVM"))
+ err := safefile.EnsureNotReparsePointRelative("UtilityVM", w.root)
+ if err != nil {
+ return err
+ }
+ err = ProcessUtilityVMImage(filepath.Join(w.root.Name(), "UtilityVM"))
if err != nil {
return err
}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/createlayer.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/createlayer.go
new file mode 100644
index 000000000..d15817730
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/createlayer.go
@@ -0,0 +1,23 @@
+package wclayer
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/sirupsen/logrus"
+)
+
+// CreateLayer creates a new, empty, read-only layer on the filesystem based on
+// the parent layer provided.
+func CreateLayer(path, parent string) error {
+ title := "hcsshim::CreateLayer "
+ logrus.Debugf(title+"ID %s parent %s", path, parent)
+
+ err := createLayer(&stdDriverInfo, path, parent)
+ if err != nil {
+ err = hcserror.Errorf(err, title, "path=%s parent=%s", path, parent)
+ logrus.Error(err)
+ return err
+ }
+
+ logrus.Debugf(title+"- succeeded path=%s parent=%s", path, parent)
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/createscratchlayer.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/createscratchlayer.go
new file mode 100644
index 000000000..bf2fece19
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/createscratchlayer.go
@@ -0,0 +1,31 @@
+package wclayer
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/sirupsen/logrus"
+)
+
+// CreateScratchLayer creates and populates new read-write layer for use by a container.
+// This requires both the id of the direct parent layer, as well as the full list
+// of paths to all parent layers up to the base (and including the direct parent
+// whose id was provided).
+func CreateScratchLayer(path string, parentLayerPaths []string) error {
+ title := "hcsshim::CreateScratchLayer "
+ logrus.Debugf(title+"path %s", path)
+
+ // Generate layer descriptors
+ layers, err := layerPathsToDescriptors(parentLayerPaths)
+ if err != nil {
+ return err
+ }
+
+ err = createSandboxLayer(&stdDriverInfo, path, 0, layers)
+ if err != nil {
+ err = hcserror.Errorf(err, title, "path=%s", path)
+ logrus.Error(err)
+ return err
+ }
+
+ logrus.Debugf(title+"- succeeded path=%s", path)
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/deactivatelayer.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/deactivatelayer.go
new file mode 100644
index 000000000..b998f8a19
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/deactivatelayer.go
@@ -0,0 +1,22 @@
+package wclayer
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/sirupsen/logrus"
+)
+
+// DeactivateLayer will dismount a layer that was mounted via ActivateLayer.
+func DeactivateLayer(path string) error {
+ title := "hcsshim::DeactivateLayer "
+ logrus.Debugf(title+"path %s", path)
+
+ err := deactivateLayer(&stdDriverInfo, path)
+ if err != nil {
+ err = hcserror.Errorf(err, title, "path=%s", path)
+ logrus.Error(err)
+ return err
+ }
+
+ logrus.Debugf(title+"succeeded path=%s", path)
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/destroylayer.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/destroylayer.go
new file mode 100644
index 000000000..dc14cecc4
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/destroylayer.go
@@ -0,0 +1,23 @@
+package wclayer
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/sirupsen/logrus"
+)
+
+// DestroyLayer will remove the on-disk files representing the layer with the given
+// path, including that layer's containing folder, if any.
+func DestroyLayer(path string) error {
+ title := "hcsshim::DestroyLayer "
+ logrus.Debugf(title+"path %s", path)
+
+ err := destroyLayer(&stdDriverInfo, path)
+ if err != nil {
+ err = hcserror.Errorf(err, title, "path=%s", path)
+ logrus.Error(err)
+ return err
+ }
+
+ logrus.Debugf(title+"succeeded path=%s", path)
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/expandscratchsize.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/expandscratchsize.go
new file mode 100644
index 000000000..7832bb452
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/expandscratchsize.go
@@ -0,0 +1,22 @@
+package wclayer
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/sirupsen/logrus"
+)
+
+// ExpandScratchSize expands the size of a layer to at least size bytes.
+func ExpandScratchSize(path string, size uint64) error {
+ title := "hcsshim::ExpandScratchSize "
+ logrus.Debugf(title+"path=%s size=%d", path, size)
+
+ err := expandSandboxSize(&stdDriverInfo, path, size)
+ if err != nil {
+ err = hcserror.Errorf(err, title, "path=%s size=%d", path, size)
+ logrus.Error(err)
+ return err
+ }
+
+ logrus.Debugf(title+"- succeeded path=%s size=%d", path, size)
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/exportlayer.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/exportlayer.go
new file mode 100644
index 000000000..d43e941ee
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/exportlayer.go
@@ -0,0 +1,68 @@
+package wclayer
+
+import (
+ "io/ioutil"
+ "os"
+
+ "github.com/Microsoft/go-winio"
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/sirupsen/logrus"
+)
+
+// ExportLayer will create a folder at exportFolderPath and fill that folder with
+// the transport format version of the layer identified by layerId. This transport
+// format includes any metadata required for later importing the layer (using
+// ImportLayer), and requires the full list of parent layer paths in order to
+// perform the export.
+func ExportLayer(path string, exportFolderPath string, parentLayerPaths []string) error {
+ title := "hcsshim::ExportLayer "
+ logrus.Debugf(title+"path %s folder %s", path, exportFolderPath)
+
+ // Generate layer descriptors
+ layers, err := layerPathsToDescriptors(parentLayerPaths)
+ if err != nil {
+ return err
+ }
+
+ err = exportLayer(&stdDriverInfo, path, exportFolderPath, layers)
+ if err != nil {
+ err = hcserror.Errorf(err, title, "path=%s folder=%s", path, exportFolderPath)
+ logrus.Error(err)
+ return err
+ }
+
+ logrus.Debugf(title+"succeeded path=%s folder=%s", path, exportFolderPath)
+ return nil
+}
+
+type LayerReader interface {
+ Next() (string, int64, *winio.FileBasicInfo, error)
+ Read(b []byte) (int, error)
+ Close() error
+}
+
+// NewLayerReader returns a new layer reader for reading the contents of an on-disk layer.
+// The caller must have taken the SeBackupPrivilege privilege
+// to call this and any methods on the resulting LayerReader.
+func NewLayerReader(path string, parentLayerPaths []string) (LayerReader, error) {
+ exportPath, err := ioutil.TempDir("", "hcs")
+ if err != nil {
+ return nil, err
+ }
+ err = ExportLayer(path, exportPath, parentLayerPaths)
+ if err != nil {
+ os.RemoveAll(exportPath)
+ return nil, err
+ }
+ return &legacyLayerReaderWrapper{newLegacyLayerReader(exportPath)}, nil
+}
+
+type legacyLayerReaderWrapper struct {
+ *legacyLayerReader
+}
+
+func (r *legacyLayerReaderWrapper) Close() error {
+ err := r.legacyLayerReader.Close()
+ os.RemoveAll(r.root)
+ return err
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/getlayermountpath.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/getlayermountpath.go
index 89f8079d0..8c37549a0 100644
--- a/vendor/github.com/Microsoft/hcsshim/getlayermountpath.go
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/getlayermountpath.go
@@ -1,34 +1,28 @@
-package hcsshim
+package wclayer
import (
"syscall"
+ "github.com/Microsoft/hcsshim/internal/hcserror"
"github.com/sirupsen/logrus"
)
-// GetLayerMountPath will look for a mounted layer with the given id and return
+// GetLayerMountPath will look for a mounted layer with the given path and return
// the path at which that layer can be accessed. This path may be a volume path
// if the layer is a mounted read-write layer, otherwise it is expected to be the
// folder path at which the layer is stored.
-func GetLayerMountPath(info DriverInfo, id string) (string, error) {
+func GetLayerMountPath(path string) (string, error) {
title := "hcsshim::GetLayerMountPath "
- logrus.Debugf(title+"Flavour %d ID %s", info.Flavour, id)
-
- // Convert info to API calling convention
- infop, err := convertDriverInfo(info)
- if err != nil {
- logrus.Error(err)
- return "", err
- }
+ logrus.Debugf(title+"path %s", path)
var mountPathLength uintptr
mountPathLength = 0
// Call the procedure itself.
logrus.Debugf("Calling proc (1)")
- err = getLayerMountPath(&infop, id, &mountPathLength, nil)
+ err := getLayerMountPath(&stdDriverInfo, path, &mountPathLength, nil)
if err != nil {
- err = makeErrorf(err, title, "(first call) id=%s flavour=%d", id, info.Flavour)
+ err = hcserror.Errorf(err, title, "(first call) path=%s", path)
logrus.Error(err)
return "", err
}
@@ -42,14 +36,14 @@ func GetLayerMountPath(info DriverInfo, id string) (string, error) {
// Call the procedure again
logrus.Debugf("Calling proc (2)")
- err = getLayerMountPath(&infop, id, &mountPathLength, &mountPathp[0])
+ err = getLayerMountPath(&stdDriverInfo, path, &mountPathLength, &mountPathp[0])
if err != nil {
- err = makeErrorf(err, title, "(second call) id=%s flavour=%d", id, info.Flavour)
+ err = hcserror.Errorf(err, title, "(second call) path=%s", path)
logrus.Error(err)
return "", err
}
- path := syscall.UTF16ToString(mountPathp[0:])
- logrus.Debugf(title+"succeeded flavour=%d id=%s path=%s", info.Flavour, id, path)
- return path, nil
+ mountPath := syscall.UTF16ToString(mountPathp[0:])
+ logrus.Debugf(title+"succeeded path=%s mountPath=%s", path, mountPath)
+ return mountPath, nil
}
diff --git a/vendor/github.com/Microsoft/hcsshim/getsharedbaseimages.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/getsharedbaseimages.go
index 05d3d9532..10899c68a 100644
--- a/vendor/github.com/Microsoft/hcsshim/getsharedbaseimages.go
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/getsharedbaseimages.go
@@ -1,6 +1,10 @@
-package hcsshim
+package wclayer
-import "github.com/sirupsen/logrus"
+import (
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/Microsoft/hcsshim/internal/interop"
+ "github.com/sirupsen/logrus"
+)
// GetSharedBaseImages will enumerate the images stored in the common central
// image store and return descriptive info about those images for the purpose
@@ -12,11 +16,11 @@ func GetSharedBaseImages() (imageData string, err error) {
var buffer *uint16
err = getBaseImages(&buffer)
if err != nil {
- err = makeError(err, title, "")
+ err = hcserror.New(err, title, "")
logrus.Error(err)
return
}
- imageData = convertAndFreeCoTaskMemString(buffer)
+ imageData = interop.ConvertAndFreeCoTaskMemString(buffer)
logrus.Debugf(title+" - succeeded output=%s", imageData)
return
}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/grantvmaccess.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/grantvmaccess.go
new file mode 100644
index 000000000..d86e67827
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/grantvmaccess.go
@@ -0,0 +1,24 @@
+package wclayer
+
+import (
+ "fmt"
+
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/sirupsen/logrus"
+)
+
+// GrantVmAccess adds access to a file for a given VM
+func GrantVmAccess(vmid string, filepath string) error {
+ title := fmt.Sprintf("hcsshim::GrantVmAccess id:%s path:%s ", vmid, filepath)
+ logrus.Debugf(title)
+
+ err := grantVmAccess(vmid, filepath)
+ if err != nil {
+ err = hcserror.Errorf(err, title, "path=%s", filepath)
+ logrus.Error(err)
+ return err
+ }
+
+ logrus.Debugf(title + " - succeeded")
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/importlayer.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/importlayer.go
new file mode 100644
index 000000000..486d55470
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/importlayer.go
@@ -0,0 +1,127 @@
+package wclayer
+
+import (
+ "io/ioutil"
+ "os"
+ "path/filepath"
+
+ "github.com/Microsoft/go-winio"
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/Microsoft/hcsshim/internal/safefile"
+ "github.com/sirupsen/logrus"
+)
+
+// ImportLayer will take the contents of the folder at importFolderPath and import
+// that into a layer with the id layerId. Note that in order to correctly populate
+// the layer and interperet the transport format, all parent layers must already
+// be present on the system at the paths provided in parentLayerPaths.
+func ImportLayer(path string, importFolderPath string, parentLayerPaths []string) error {
+ title := "hcsshim::ImportLayer "
+ logrus.Debugf(title+"path %s folder %s", path, importFolderPath)
+
+ // Generate layer descriptors
+ layers, err := layerPathsToDescriptors(parentLayerPaths)
+ if err != nil {
+ return err
+ }
+
+ err = importLayer(&stdDriverInfo, path, importFolderPath, layers)
+ if err != nil {
+ err = hcserror.Errorf(err, title, "path=%s folder=%s", path, importFolderPath)
+ logrus.Error(err)
+ return err
+ }
+
+ logrus.Debugf(title+"succeeded path=%s folder=%s", path, importFolderPath)
+ return nil
+}
+
+// LayerWriter is an interface that supports writing a new container image layer.
+type LayerWriter interface {
+ // Add adds a file to the layer with given metadata.
+ Add(name string, fileInfo *winio.FileBasicInfo) error
+ // AddLink adds a hard link to the layer. The target must already have been added.
+ AddLink(name string, target string) error
+ // Remove removes a file that was present in a parent layer from the layer.
+ Remove(name string) error
+ // Write writes data to the current file. The data must be in the format of a Win32
+ // backup stream.
+ Write(b []byte) (int, error)
+ // Close finishes the layer writing process and releases any resources.
+ Close() error
+}
+
+type legacyLayerWriterWrapper struct {
+ *legacyLayerWriter
+ path string
+ parentLayerPaths []string
+}
+
+func (r *legacyLayerWriterWrapper) Close() error {
+ defer os.RemoveAll(r.root.Name())
+ defer r.legacyLayerWriter.CloseRoots()
+ err := r.legacyLayerWriter.Close()
+ if err != nil {
+ return err
+ }
+
+ if err = ImportLayer(r.destRoot.Name(), r.path, r.parentLayerPaths); err != nil {
+ return err
+ }
+ for _, name := range r.Tombstones {
+ if err = safefile.RemoveRelative(name, r.destRoot); err != nil && !os.IsNotExist(err) {
+ return err
+ }
+ }
+ // Add any hard links that were collected.
+ for _, lnk := range r.PendingLinks {
+ if err = safefile.RemoveRelative(lnk.Path, r.destRoot); err != nil && !os.IsNotExist(err) {
+ return err
+ }
+ if err = safefile.LinkRelative(lnk.Target, lnk.TargetRoot, lnk.Path, r.destRoot); err != nil {
+ return err
+ }
+ }
+ // Prepare the utility VM for use if one is present in the layer.
+ if r.HasUtilityVM {
+ err := safefile.EnsureNotReparsePointRelative("UtilityVM", r.destRoot)
+ if err != nil {
+ return err
+ }
+ err = ProcessUtilityVMImage(filepath.Join(r.destRoot.Name(), "UtilityVM"))
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// NewLayerWriter returns a new layer writer for creating a layer on disk.
+// The caller must have taken the SeBackupPrivilege and SeRestorePrivilege privileges
+// to call this and any methods on the resulting LayerWriter.
+func NewLayerWriter(path string, parentLayerPaths []string) (LayerWriter, error) {
+ if len(parentLayerPaths) == 0 {
+ // This is a base layer. It gets imported differently.
+ f, err := safefile.OpenRoot(path)
+ if err != nil {
+ return nil, err
+ }
+ return &baseLayerWriter{
+ root: f,
+ }, nil
+ }
+
+ importPath, err := ioutil.TempDir("", "hcs")
+ if err != nil {
+ return nil, err
+ }
+ w, err := newLegacyLayerWriter(importPath, parentLayerPaths, path)
+ if err != nil {
+ return nil, err
+ }
+ return &legacyLayerWriterWrapper{
+ legacyLayerWriter: w,
+ path: importPath,
+ parentLayerPaths: parentLayerPaths,
+ }, nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerexists.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerexists.go
new file mode 100644
index 000000000..71287ff8a
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerexists.go
@@ -0,0 +1,25 @@
+package wclayer
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/sirupsen/logrus"
+)
+
+// LayerExists will return true if a layer with the given id exists and is known
+// to the system.
+func LayerExists(path string) (bool, error) {
+ title := "hcsshim::LayerExists "
+ logrus.Debugf(title+"path %s", path)
+
+ // Call the procedure itself.
+ var exists uint32
+ err := layerExists(&stdDriverInfo, path, &exists)
+ if err != nil {
+ err = hcserror.Errorf(err, title, "path=%s", path)
+ logrus.Error(err)
+ return false, err
+ }
+
+ logrus.Debugf(title+"succeeded path=%s exists=%d", path, exists)
+ return exists != 0, nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerid.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerid.go
new file mode 100644
index 000000000..90df3bedc
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerid.go
@@ -0,0 +1,13 @@
+package wclayer
+
+import (
+ "path/filepath"
+
+ "github.com/Microsoft/hcsshim/internal/guid"
+)
+
+// LayerID returns the layer ID of a layer on disk.
+func LayerID(path string) (guid.GUID, error) {
+ _, file := filepath.Split(path)
+ return NameToGuid(file)
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/layerutils.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerutils.go
index c0e550377..a1b8b9882 100644
--- a/vendor/github.com/Microsoft/hcsshim/layerutils.go
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/layerutils.go
@@ -1,12 +1,12 @@
-package hcsshim
+package wclayer
// This file contains utility functions to support storage (graph) related
// functionality.
import (
- "path/filepath"
"syscall"
+ "github.com/Microsoft/hcsshim/internal/guid"
"github.com/sirupsen/logrus"
)
@@ -22,28 +22,16 @@ struct DriverInfo {
LPCWSTR HomeDir;
};
*/
-type DriverInfo struct {
- Flavour int
- HomeDir string
-}
type driverInfo struct {
Flavour int
HomeDirp *uint16
}
-func convertDriverInfo(info DriverInfo) (driverInfo, error) {
- homedirp, err := syscall.UTF16PtrFromString(info.HomeDir)
- if err != nil {
- logrus.Debugf("Failed conversion of home to pointer for driver info: %s", err.Error())
- return driverInfo{}, err
- }
-
- return driverInfo{
- Flavour: info.Flavour,
- HomeDirp: homedirp,
- }, nil
-}
+var (
+ utf16EmptyString uint16
+ stdDriverInfo = driverInfo{1, &utf16EmptyString}
+)
/* To pass into syscall, we need a struct matching the following:
typedef struct _WC_LAYER_DESCRIPTOR {
@@ -75,7 +63,7 @@ typedef struct _WC_LAYER_DESCRIPTOR {
} WC_LAYER_DESCRIPTOR, *PWC_LAYER_DESCRIPTOR;
*/
type WC_LAYER_DESCRIPTOR struct {
- LayerId GUID
+ LayerId guid.GUID
Flags uint32
Pathp *uint16
}
@@ -85,10 +73,7 @@ func layerPathsToDescriptors(parentLayerPaths []string) ([]WC_LAYER_DESCRIPTOR,
var layers []WC_LAYER_DESCRIPTOR
for i := 0; i < len(parentLayerPaths); i++ {
- // Create a layer descriptor, using the folder name
- // as the source for a GUID LayerId
- _, folderName := filepath.Split(parentLayerPaths[i])
- g, err := NameToGuid(folderName)
+ g, err := LayerID(parentLayerPaths[i])
if err != nil {
logrus.Debugf("Failed to convert name to guid %s", err)
return nil, err
diff --git a/vendor/github.com/Microsoft/hcsshim/legacy.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/legacy.go
index c7f6073ac..b8ea5d263 100644
--- a/vendor/github.com/Microsoft/hcsshim/legacy.go
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/legacy.go
@@ -1,4 +1,4 @@
-package hcsshim
+package wclayer
import (
"bufio"
@@ -6,12 +6,15 @@ import (
"errors"
"fmt"
"io"
+ "io/ioutil"
"os"
"path/filepath"
"strings"
"syscall"
"github.com/Microsoft/go-winio"
+ "github.com/Microsoft/hcsshim/internal/longpath"
+ "github.com/Microsoft/hcsshim/internal/safefile"
)
var errorIterationCanceled = errors.New("")
@@ -34,23 +37,6 @@ func openFileOrDir(path string, mode uint32, createDisposition uint32) (file *os
return winio.OpenForBackup(path, mode, syscall.FILE_SHARE_READ, createDisposition)
}
-func makeLongAbsPath(path string) (string, error) {
- if strings.HasPrefix(path, `\\?\`) || strings.HasPrefix(path, `\\.\`) {
- return path, nil
- }
- if !filepath.IsAbs(path) {
- absPath, err := filepath.Abs(path)
- if err != nil {
- return "", err
- }
- path = absPath
- }
- if strings.HasPrefix(path, `\\`) {
- return `\\?\UNC\` + path[2:], nil
- }
- return `\\?\` + path, nil
-}
-
func hasPathPrefix(p, prefix string) bool {
return strings.HasPrefix(p, prefix) && len(p) > len(prefix) && p[len(prefix)] == '\\'
}
@@ -106,7 +92,7 @@ func readTombstones(path string) (map[string]([]string), error) {
}
func (r *legacyLayerReader) walkUntilCancelled() error {
- root, err := makeLongAbsPath(r.root)
+ root, err := longpath.LongAbs(r.root)
if err != nil {
return err
}
@@ -121,6 +107,16 @@ func (r *legacyLayerReader) walkUntilCancelled() error {
if err != nil {
return err
}
+
+ // Indirect fix for https://github.com/moby/moby/issues/32838#issuecomment-343610048.
+ // Handle failure from what may be a golang bug in the conversion of
+ // UTF16 to UTF8 in files which are left in the recycle bin. Os.Lstat
+ // which is called by filepath.Walk will fail when a filename contains
+ // unicode characters. Skip the recycle bin regardless which is goodness.
+ if strings.EqualFold(path, filepath.Join(r.root, `Files\$Recycle.Bin`)) && info.IsDir() {
+ return filepath.SkipDir
+ }
+
if path == r.root || path == filepath.Join(r.root, "tombstones.txt") || strings.HasSuffix(path, ".$wcidirs$") {
return nil
}
@@ -273,7 +269,7 @@ func (r *legacyLayerReader) Next() (path string, size int64, fileInfo *winio.Fil
if err != nil {
return
}
- fileInfo.FileAttributes = uintptr(attr)
+ fileInfo.FileAttributes = attr
beginning := int64(4)
// Find the accurate file size.
@@ -326,59 +322,81 @@ func (r *legacyLayerReader) Close() error {
type pendingLink struct {
Path, Target string
+ TargetRoot *os.File
+}
+
+type pendingDir struct {
+ Path string
+ Root *os.File
}
type legacyLayerWriter struct {
- root string
- parentRoots []string
- destRoot string
- currentFile *os.File
- backupWriter *winio.BackupFileWriter
- tombstones []string
- pathFixed bool
- HasUtilityVM bool
- uvmDi []dirInfo
- addedFiles map[string]bool
- PendingLinks []pendingLink
+ root *os.File
+ destRoot *os.File
+ parentRoots []*os.File
+ currentFile *os.File
+ bufWriter *bufio.Writer
+ currentFileName string
+ currentFileRoot *os.File
+ backupWriter *winio.BackupFileWriter
+ Tombstones []string
+ HasUtilityVM bool
+ uvmDi []dirInfo
+ addedFiles map[string]bool
+ PendingLinks []pendingLink
+ pendingDirs []pendingDir
+ currentIsDir bool
}
// newLegacyLayerWriter returns a LayerWriter that can write the contaler layer
// transport format to disk.
-func newLegacyLayerWriter(root string, parentRoots []string, destRoot string) *legacyLayerWriter {
- return &legacyLayerWriter{
- root: root,
- parentRoots: parentRoots,
- destRoot: destRoot,
- addedFiles: make(map[string]bool),
+func newLegacyLayerWriter(root string, parentRoots []string, destRoot string) (w *legacyLayerWriter, err error) {
+ w = &legacyLayerWriter{
+ addedFiles: make(map[string]bool),
}
-}
-
-func (w *legacyLayerWriter) init() error {
- if !w.pathFixed {
- path, err := makeLongAbsPath(w.root)
+ defer func() {
if err != nil {
- return err
- }
- for i, p := range w.parentRoots {
- w.parentRoots[i], err = makeLongAbsPath(p)
- if err != nil {
- return err
- }
+ w.CloseRoots()
+ w = nil
}
- destPath, err := makeLongAbsPath(w.destRoot)
+ }()
+ w.root, err = safefile.OpenRoot(root)
+ if err != nil {
+ return
+ }
+ w.destRoot, err = safefile.OpenRoot(destRoot)
+ if err != nil {
+ return
+ }
+ for _, r := range parentRoots {
+ f, err := safefile.OpenRoot(r)
if err != nil {
- return err
+ return w, err
}
- w.root = path
- w.destRoot = destPath
- w.pathFixed = true
+ w.parentRoots = append(w.parentRoots, f)
}
- return nil
+ w.bufWriter = bufio.NewWriterSize(ioutil.Discard, 65536)
+ return
+}
+
+func (w *legacyLayerWriter) CloseRoots() {
+ if w.root != nil {
+ w.root.Close()
+ w.root = nil
+ }
+ if w.destRoot != nil {
+ w.destRoot.Close()
+ w.destRoot = nil
+ }
+ for i := range w.parentRoots {
+ w.parentRoots[i].Close()
+ }
+ w.parentRoots = nil
}
func (w *legacyLayerWriter) initUtilityVM() error {
if !w.HasUtilityVM {
- err := os.Mkdir(filepath.Join(w.destRoot, utilityVMPath), 0)
+ err := safefile.MkdirRelative(utilityVMPath, w.destRoot)
if err != nil {
return err
}
@@ -386,7 +404,7 @@ func (w *legacyLayerWriter) initUtilityVM() error {
// clone the utility VM from the parent layer into this layer. Use hard
// links to avoid unnecessary copying, since most of the files are
// immutable.
- err = cloneTree(filepath.Join(w.parentRoots[0], utilityVMFilesPath), filepath.Join(w.destRoot, utilityVMFilesPath), mutatedUtilityVMFiles)
+ err = cloneTree(w.parentRoots[0], w.destRoot, utilityVMFilesPath, mutatedUtilityVMFiles)
if err != nil {
return fmt.Errorf("cloning the parent utility VM image failed: %s", err)
}
@@ -395,7 +413,45 @@ func (w *legacyLayerWriter) initUtilityVM() error {
return nil
}
-func (w *legacyLayerWriter) reset() {
+func (w *legacyLayerWriter) reset() error {
+ err := w.bufWriter.Flush()
+ if err != nil {
+ return err
+ }
+ w.bufWriter.Reset(ioutil.Discard)
+ if w.currentIsDir {
+ r := w.currentFile
+ br := winio.NewBackupStreamReader(r)
+ // Seek to the beginning of the backup stream, skipping the fileattrs
+ if _, err := r.Seek(4, io.SeekStart); err != nil {
+ return err
+ }
+
+ for {
+ bhdr, err := br.Next()
+ if err == io.EOF {
+ // end of backupstream data
+ break
+ }
+ if err != nil {
+ return err
+ }
+ switch bhdr.Id {
+ case winio.BackupReparseData:
+ // The current file is a `.$wcidirs$` metadata file that
+ // describes a directory reparse point. Delete the placeholder
+ // directory to prevent future files being added into the
+ // destination of the reparse point during the ImportLayer call
+ if err := safefile.RemoveRelative(w.currentFileName, w.currentFileRoot); err != nil {
+ return err
+ }
+ w.pendingDirs = append(w.pendingDirs, pendingDir{Path: w.currentFileName, Root: w.currentFileRoot})
+ default:
+ // ignore all other stream types, as we only care about directory reparse points
+ }
+ }
+ w.currentIsDir = false
+ }
if w.backupWriter != nil {
w.backupWriter.Close()
w.backupWriter = nil
@@ -403,21 +459,21 @@ func (w *legacyLayerWriter) reset() {
if w.currentFile != nil {
w.currentFile.Close()
w.currentFile = nil
+ w.currentFileName = ""
+ w.currentFileRoot = nil
}
+ return nil
}
// copyFileWithMetadata copies a file using the backup/restore APIs in order to preserve metadata
-func copyFileWithMetadata(srcPath, destPath string, isDir bool) (fileInfo *winio.FileBasicInfo, err error) {
- createDisposition := uint32(syscall.CREATE_NEW)
- if isDir {
- err = os.Mkdir(destPath, 0)
- if err != nil {
- return nil, err
- }
- createDisposition = syscall.OPEN_EXISTING
- }
-
- src, err := openFileOrDir(srcPath, syscall.GENERIC_READ|winio.ACCESS_SYSTEM_SECURITY, syscall.OPEN_EXISTING)
+func copyFileWithMetadata(srcRoot, destRoot *os.File, subPath string, isDir bool) (fileInfo *winio.FileBasicInfo, err error) {
+ src, err := safefile.OpenRelative(
+ subPath,
+ srcRoot,
+ syscall.GENERIC_READ|winio.ACCESS_SYSTEM_SECURITY,
+ syscall.FILE_SHARE_READ,
+ safefile.FILE_OPEN,
+ safefile.FILE_OPEN_REPARSE_POINT)
if err != nil {
return nil, err
}
@@ -430,7 +486,17 @@ func copyFileWithMetadata(srcPath, destPath string, isDir bool) (fileInfo *winio
return nil, err
}
- dest, err := openFileOrDir(destPath, syscall.GENERIC_READ|syscall.GENERIC_WRITE|winio.WRITE_DAC|winio.WRITE_OWNER|winio.ACCESS_SYSTEM_SECURITY, createDisposition)
+ extraFlags := uint32(0)
+ if isDir {
+ extraFlags |= safefile.FILE_DIRECTORY_FILE
+ }
+ dest, err := safefile.OpenRelative(
+ subPath,
+ destRoot,
+ syscall.GENERIC_READ|syscall.GENERIC_WRITE|winio.WRITE_DAC|winio.WRITE_OWNER|winio.ACCESS_SYSTEM_SECURITY,
+ syscall.FILE_SHARE_READ,
+ safefile.FILE_CREATE,
+ extraFlags)
if err != nil {
return nil, err
}
@@ -459,55 +525,57 @@ func copyFileWithMetadata(srcPath, destPath string, isDir bool) (fileInfo *winio
// cloneTree clones a directory tree using hard links. It skips hard links for
// the file names in the provided map and just copies those files.
-func cloneTree(srcPath, destPath string, mutatedFiles map[string]bool) error {
+func cloneTree(srcRoot *os.File, destRoot *os.File, subPath string, mutatedFiles map[string]bool) error {
var di []dirInfo
- err := filepath.Walk(srcPath, func(srcFilePath string, info os.FileInfo, err error) error {
+ err := safefile.EnsureNotReparsePointRelative(subPath, srcRoot)
+ if err != nil {
+ return err
+ }
+ err = filepath.Walk(filepath.Join(srcRoot.Name(), subPath), func(srcFilePath string, info os.FileInfo, err error) error {
if err != nil {
return err
}
- relPath, err := filepath.Rel(srcPath, srcFilePath)
+ relPath, err := filepath.Rel(srcRoot.Name(), srcFilePath)
if err != nil {
return err
}
- destFilePath := filepath.Join(destPath, relPath)
+ fileAttributes := info.Sys().(*syscall.Win32FileAttributeData).FileAttributes
// Directories, reparse points, and files that will be mutated during
// utility VM import must be copied. All other files can be hard linked.
- isReparsePoint := info.Sys().(*syscall.Win32FileAttributeData).FileAttributes&syscall.FILE_ATTRIBUTE_REPARSE_POINT != 0
- if info.IsDir() || isReparsePoint || mutatedFiles[relPath] {
- fi, err := copyFileWithMetadata(srcFilePath, destFilePath, info.IsDir())
+ isReparsePoint := fileAttributes&syscall.FILE_ATTRIBUTE_REPARSE_POINT != 0
+ // In go1.9, FileInfo.IsDir() returns false if the directory is also a symlink.
+ // See: https://github.com/golang/go/commit/1989921aef60c83e6f9127a8448fb5ede10e9acc
+ // Fixes the problem by checking syscall.FILE_ATTRIBUTE_DIRECTORY directly
+ isDir := fileAttributes&syscall.FILE_ATTRIBUTE_DIRECTORY != 0
+
+ if isDir || isReparsePoint || mutatedFiles[relPath] {
+ fi, err := copyFileWithMetadata(srcRoot, destRoot, relPath, isDir)
if err != nil {
return err
}
- if info.IsDir() && !isReparsePoint {
- di = append(di, dirInfo{path: destFilePath, fileInfo: *fi})
+ if isDir && !isReparsePoint {
+ di = append(di, dirInfo{path: relPath, fileInfo: *fi})
}
} else {
- err = os.Link(srcFilePath, destFilePath)
+ err = safefile.LinkRelative(relPath, srcRoot, relPath, destRoot)
if err != nil {
return err
}
}
- // Don't recurse on reparse points.
- if info.IsDir() && isReparsePoint {
- return filepath.SkipDir
- }
-
return nil
})
if err != nil {
return err
}
- return reapplyDirectoryTimes(di)
+ return reapplyDirectoryTimes(destRoot, di)
}
func (w *legacyLayerWriter) Add(name string, fileInfo *winio.FileBasicInfo) error {
- w.reset()
- err := w.init()
- if err != nil {
+ if err := w.reset(); err != nil {
return err
}
@@ -515,6 +583,7 @@ func (w *legacyLayerWriter) Add(name string, fileInfo *winio.FileBasicInfo) erro
return w.initUtilityVM()
}
+ name = filepath.Clean(name)
if hasPathPrefix(name, utilityVMPath) {
if !w.HasUtilityVM {
return errors.New("missing UtilityVM directory")
@@ -522,10 +591,9 @@ func (w *legacyLayerWriter) Add(name string, fileInfo *winio.FileBasicInfo) erro
if !hasPathPrefix(name, utilityVMFilesPath) && name != utilityVMFilesPath {
return errors.New("invalid UtilityVM layer")
}
- path := filepath.Join(w.destRoot, name)
- createDisposition := uint32(syscall.OPEN_EXISTING)
+ createDisposition := uint32(safefile.FILE_OPEN)
if (fileInfo.FileAttributes & syscall.FILE_ATTRIBUTE_DIRECTORY) != 0 {
- st, err := os.Lstat(path)
+ st, err := safefile.LstatRelative(name, w.destRoot)
if err != nil && !os.IsNotExist(err) {
return err
}
@@ -533,37 +601,44 @@ func (w *legacyLayerWriter) Add(name string, fileInfo *winio.FileBasicInfo) erro
// Delete the existing file/directory if it is not the same type as this directory.
existingAttr := st.Sys().(*syscall.Win32FileAttributeData).FileAttributes
if (uint32(fileInfo.FileAttributes)^existingAttr)&(syscall.FILE_ATTRIBUTE_DIRECTORY|syscall.FILE_ATTRIBUTE_REPARSE_POINT) != 0 {
- if err = os.RemoveAll(path); err != nil {
+ if err = safefile.RemoveAllRelative(name, w.destRoot); err != nil {
return err
}
st = nil
}
}
if st == nil {
- if err = os.Mkdir(path, 0); err != nil {
+ if err = safefile.MkdirRelative(name, w.destRoot); err != nil {
return err
}
}
if fileInfo.FileAttributes&syscall.FILE_ATTRIBUTE_REPARSE_POINT == 0 {
- w.uvmDi = append(w.uvmDi, dirInfo{path: path, fileInfo: *fileInfo})
+ w.uvmDi = append(w.uvmDi, dirInfo{path: name, fileInfo: *fileInfo})
}
} else {
// Overwrite any existing hard link.
- err = os.Remove(path)
+ err := safefile.RemoveRelative(name, w.destRoot)
if err != nil && !os.IsNotExist(err) {
return err
}
- createDisposition = syscall.CREATE_NEW
+ createDisposition = safefile.FILE_CREATE
}
- f, err := openFileOrDir(path, syscall.GENERIC_READ|syscall.GENERIC_WRITE|winio.WRITE_DAC|winio.WRITE_OWNER|winio.ACCESS_SYSTEM_SECURITY, createDisposition)
+ f, err := safefile.OpenRelative(
+ name,
+ w.destRoot,
+ syscall.GENERIC_READ|syscall.GENERIC_WRITE|winio.WRITE_DAC|winio.WRITE_OWNER|winio.ACCESS_SYSTEM_SECURITY,
+ syscall.FILE_SHARE_READ,
+ createDisposition,
+ safefile.FILE_OPEN_REPARSE_POINT,
+ )
if err != nil {
return err
}
defer func() {
if f != nil {
f.Close()
- os.Remove(path)
+ safefile.RemoveRelative(name, w.destRoot)
}
}()
@@ -573,29 +648,33 @@ func (w *legacyLayerWriter) Add(name string, fileInfo *winio.FileBasicInfo) erro
}
w.backupWriter = winio.NewBackupFileWriter(f, true)
+ w.bufWriter.Reset(w.backupWriter)
w.currentFile = f
+ w.currentFileName = name
+ w.currentFileRoot = w.destRoot
w.addedFiles[name] = true
f = nil
return nil
}
- path := filepath.Join(w.root, name)
+ fname := name
if (fileInfo.FileAttributes & syscall.FILE_ATTRIBUTE_DIRECTORY) != 0 {
- err := os.Mkdir(path, 0)
+ err := safefile.MkdirRelative(name, w.root)
if err != nil {
return err
}
- path += ".$wcidirs$"
+ fname += ".$wcidirs$"
+ w.currentIsDir = true
}
- f, err := openFileOrDir(path, syscall.GENERIC_READ|syscall.GENERIC_WRITE, syscall.CREATE_NEW)
+ f, err := safefile.OpenRelative(fname, w.root, syscall.GENERIC_READ|syscall.GENERIC_WRITE, syscall.FILE_SHARE_READ, safefile.FILE_CREATE, 0)
if err != nil {
return err
}
defer func() {
if f != nil {
f.Close()
- os.Remove(path)
+ safefile.RemoveRelative(fname, w.root)
}
}()
@@ -608,28 +687,32 @@ func (w *legacyLayerWriter) Add(name string, fileInfo *winio.FileBasicInfo) erro
if hasPathPrefix(name, hivesPath) {
w.backupWriter = winio.NewBackupFileWriter(f, false)
+ w.bufWriter.Reset(w.backupWriter)
} else {
+ w.bufWriter.Reset(f)
// The file attributes are written before the stream.
- err = binary.Write(f, binary.LittleEndian, uint32(fileInfo.FileAttributes))
+ err = binary.Write(w.bufWriter, binary.LittleEndian, uint32(fileInfo.FileAttributes))
if err != nil {
+ w.bufWriter.Reset(ioutil.Discard)
return err
}
}
w.currentFile = f
+ w.currentFileName = name
+ w.currentFileRoot = w.root
w.addedFiles[name] = true
f = nil
return nil
}
func (w *legacyLayerWriter) AddLink(name string, target string) error {
- w.reset()
- err := w.init()
- if err != nil {
+ if err := w.reset(); err != nil {
return err
}
- var roots []string
+ target = filepath.Clean(target)
+ var roots []*os.File
if hasPathPrefix(target, filesPath) {
// Look for cross-layer hard link targets in the parent layers, since
// nothing is in the destination path yet.
@@ -638,7 +721,7 @@ func (w *legacyLayerWriter) AddLink(name string, target string) error {
// Since the utility VM is fully cloned into the destination path
// already, look for cross-layer hard link targets directly in the
// destination path.
- roots = []string{w.destRoot}
+ roots = []*os.File{w.destRoot}
}
if roots == nil || (!hasPathPrefix(name, filesPath) && !hasPathPrefix(name, utilityVMFilesPath)) {
@@ -647,12 +730,12 @@ func (w *legacyLayerWriter) AddLink(name string, target string) error {
// Find to try the target of the link in a previously added file. If that
// fails, search in parent layers.
- var selectedRoot string
+ var selectedRoot *os.File
if _, ok := w.addedFiles[target]; ok {
selectedRoot = w.destRoot
} else {
for _, r := range roots {
- if _, err = os.Lstat(filepath.Join(r, target)); err != nil {
+ if _, err := safefile.LstatRelative(target, r); err != nil {
if !os.IsNotExist(err) {
return err
}
@@ -661,22 +744,25 @@ func (w *legacyLayerWriter) AddLink(name string, target string) error {
break
}
}
- if selectedRoot == "" {
+ if selectedRoot == nil {
return fmt.Errorf("failed to find link target for '%s' -> '%s'", name, target)
}
}
+
// The link can't be written until after the ImportLayer call.
w.PendingLinks = append(w.PendingLinks, pendingLink{
- Path: filepath.Join(w.destRoot, name),
- Target: filepath.Join(selectedRoot, target),
+ Path: name,
+ Target: target,
+ TargetRoot: selectedRoot,
})
w.addedFiles[name] = true
return nil
}
func (w *legacyLayerWriter) Remove(name string) error {
+ name = filepath.Clean(name)
if hasPathPrefix(name, filesPath) {
- w.tombstones = append(w.tombstones, name[len(filesPath)+1:])
+ w.Tombstones = append(w.Tombstones, name)
} else if hasPathPrefix(name, utilityVMFilesPath) {
err := w.initUtilityVM()
if err != nil {
@@ -685,11 +771,10 @@ func (w *legacyLayerWriter) Remove(name string) error {
// Make sure the path exists; os.RemoveAll will not fail if the file is
// already gone, and this needs to be a fatal error for diagnostics
// purposes.
- path := filepath.Join(w.destRoot, name)
- if _, err := os.Lstat(path); err != nil {
+ if _, err := safefile.LstatRelative(name, w.destRoot); err != nil {
return err
}
- err = os.RemoveAll(path)
+ err = safefile.RemoveAllRelative(name, w.destRoot)
if err != nil {
return err
}
@@ -701,38 +786,27 @@ func (w *legacyLayerWriter) Remove(name string) error {
}
func (w *legacyLayerWriter) Write(b []byte) (int, error) {
- if w.backupWriter == nil {
- if w.currentFile == nil {
- return 0, errors.New("closed")
- }
- return w.currentFile.Write(b)
+ if w.backupWriter == nil && w.currentFile == nil {
+ return 0, errors.New("closed")
}
- return w.backupWriter.Write(b)
+ return w.bufWriter.Write(b)
}
func (w *legacyLayerWriter) Close() error {
- w.reset()
- err := w.init()
- if err != nil {
+ if err := w.reset(); err != nil {
return err
}
- tf, err := os.Create(filepath.Join(w.root, "tombstones.txt"))
- if err != nil {
- return err
- }
- defer tf.Close()
- _, err = tf.Write([]byte("\xef\xbb\xbfVersion 1.0\n"))
- if err != nil {
+ if err := safefile.RemoveRelative("tombstones.txt", w.root); err != nil && !os.IsNotExist(err) {
return err
}
- for _, t := range w.tombstones {
- _, err = tf.Write([]byte(filepath.Join(`\`, t) + "\n"))
+ for _, pd := range w.pendingDirs {
+ err := safefile.MkdirRelative(pd.Path, pd.Root)
if err != nil {
return err
}
}
if w.HasUtilityVM {
- err = reapplyDirectoryTimes(w.uvmDi)
+ err := reapplyDirectoryTimes(w.destRoot, w.uvmDi)
if err != nil {
return err
}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/nametoguid.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/nametoguid.go
new file mode 100644
index 000000000..741994ba4
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/nametoguid.go
@@ -0,0 +1,24 @@
+package wclayer
+
+import (
+ "github.com/Microsoft/hcsshim/internal/guid"
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/sirupsen/logrus"
+)
+
+// NameToGuid converts the given string into a GUID using the algorithm in the
+// Host Compute Service, ensuring GUIDs generated with the same string are common
+// across all clients.
+func NameToGuid(name string) (id guid.GUID, err error) {
+ title := "hcsshim::NameToGuid "
+
+ err = nameToGuid(name, &id)
+ if err != nil {
+ err = hcserror.Errorf(err, title, "name=%s", name)
+ logrus.Error(err)
+ return
+ }
+
+ logrus.Debugf(title+"name:%s guid:%s", name, id.String())
+ return
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/preparelayer.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/preparelayer.go
index 5c5b61841..bd4005dc4 100644
--- a/vendor/github.com/Microsoft/hcsshim/preparelayer.go
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/preparelayer.go
@@ -1,21 +1,22 @@
-package hcsshim
+package wclayer
import (
"sync"
+ "github.com/Microsoft/hcsshim/internal/hcserror"
"github.com/sirupsen/logrus"
)
var prepareLayerLock sync.Mutex
-// PrepareLayer finds a mounted read-write layer matching layerId and enables the
+// PrepareLayer finds a mounted read-write layer matching path and enables the
// the filesystem filter for use on that layer. This requires the paths to all
// parent layers, and is necessary in order to view or interact with the layer
// as an actual filesystem (reading and writing files, creating directories, etc).
// Disabling the filter must be done via UnprepareLayer.
-func PrepareLayer(info DriverInfo, layerId string, parentLayerPaths []string) error {
+func PrepareLayer(path string, parentLayerPaths []string) error {
title := "hcsshim::PrepareLayer "
- logrus.Debugf(title+"flavour %d layerId %s", info.Flavour, layerId)
+ logrus.Debugf(title+"path %s", path)
// Generate layer descriptors
layers, err := layerPathsToDescriptors(parentLayerPaths)
@@ -23,24 +24,17 @@ func PrepareLayer(info DriverInfo, layerId string, parentLayerPaths []string) er
return err
}
- // Convert info to API calling convention
- infop, err := convertDriverInfo(info)
- if err != nil {
- logrus.Error(err)
- return err
- }
-
// This lock is a temporary workaround for a Windows bug. Only allowing one
// call to prepareLayer at a time vastly reduces the chance of a timeout.
prepareLayerLock.Lock()
defer prepareLayerLock.Unlock()
- err = prepareLayer(&infop, layerId, layers)
+ err = prepareLayer(&stdDriverInfo, path, layers)
if err != nil {
- err = makeErrorf(err, title, "layerId=%s flavour=%d", layerId, info.Flavour)
+ err = hcserror.Errorf(err, title, "path=%s", path)
logrus.Error(err)
return err
}
- logrus.Debugf(title+"succeeded flavour=%d layerId=%s", info.Flavour, layerId)
+ logrus.Debugf(title+"succeeded path=%s", path)
return nil
}
diff --git a/vendor/github.com/Microsoft/hcsshim/processimage.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/processimage.go
index fadb1b92c..884207c3e 100644
--- a/vendor/github.com/Microsoft/hcsshim/processimage.go
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/processimage.go
@@ -1,4 +1,4 @@
-package hcsshim
+package wclayer
import "os"
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/unpreparelayer.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/unpreparelayer.go
new file mode 100644
index 000000000..5f1b4f4f4
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/unpreparelayer.go
@@ -0,0 +1,23 @@
+package wclayer
+
+import (
+ "github.com/Microsoft/hcsshim/internal/hcserror"
+ "github.com/sirupsen/logrus"
+)
+
+// UnprepareLayer disables the filesystem filter for the read-write layer with
+// the given id.
+func UnprepareLayer(path string) error {
+ title := "hcsshim::UnprepareLayer "
+ logrus.Debugf(title+"path %s", path)
+
+ err := unprepareLayer(&stdDriverInfo, path)
+ if err != nil {
+ err = hcserror.Errorf(err, title, "path=%s", path)
+ logrus.Error(err)
+ return err
+ }
+
+ logrus.Debugf(title+"succeeded path=%s", path)
+ return nil
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/wclayer.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/wclayer.go
new file mode 100644
index 000000000..78f2aacd8
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/wclayer.go
@@ -0,0 +1,27 @@
+package wclayer
+
+import "github.com/Microsoft/hcsshim/internal/guid"
+
+//go:generate go run ../../mksyscall_windows.go -output zsyscall_windows.go wclayer.go
+
+//sys activateLayer(info *driverInfo, id string) (hr error) = vmcompute.ActivateLayer?
+//sys copyLayer(info *driverInfo, srcId string, dstId string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.CopyLayer?
+//sys createLayer(info *driverInfo, id string, parent string) (hr error) = vmcompute.CreateLayer?
+//sys createSandboxLayer(info *driverInfo, id string, parent uintptr, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.CreateSandboxLayer?
+//sys expandSandboxSize(info *driverInfo, id string, size uint64) (hr error) = vmcompute.ExpandSandboxSize?
+//sys deactivateLayer(info *driverInfo, id string) (hr error) = vmcompute.DeactivateLayer?
+//sys destroyLayer(info *driverInfo, id string) (hr error) = vmcompute.DestroyLayer?
+//sys exportLayer(info *driverInfo, id string, path string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.ExportLayer?
+//sys getLayerMountPath(info *driverInfo, id string, length *uintptr, buffer *uint16) (hr error) = vmcompute.GetLayerMountPath?
+//sys getBaseImages(buffer **uint16) (hr error) = vmcompute.GetBaseImages?
+//sys importLayer(info *driverInfo, id string, path string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.ImportLayer?
+//sys layerExists(info *driverInfo, id string, exists *uint32) (hr error) = vmcompute.LayerExists?
+//sys nameToGuid(name string, guid *_guid) (hr error) = vmcompute.NameToGuid?
+//sys prepareLayer(info *driverInfo, id string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) = vmcompute.PrepareLayer?
+//sys unprepareLayer(info *driverInfo, id string) (hr error) = vmcompute.UnprepareLayer?
+//sys processBaseImage(path string) (hr error) = vmcompute.ProcessBaseImage?
+//sys processUtilityImage(path string) (hr error) = vmcompute.ProcessUtilityImage?
+
+//sys grantVmAccess(vmid string, filepath string) (hr error) = vmcompute.GrantVmAccess?
+
+type _guid = guid.GUID
diff --git a/vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go
new file mode 100644
index 000000000..2105703dc
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/internal/wclayer/zsyscall_windows.go
@@ -0,0 +1,457 @@
+// Code generated mksyscall_windows.exe DO NOT EDIT
+
+package wclayer
+
+import (
+ "syscall"
+ "unsafe"
+
+ "github.com/Microsoft/hcsshim/internal/interop"
+ "golang.org/x/sys/windows"
+)
+
+var _ unsafe.Pointer
+
+// Do the interface allocations only once for common
+// Errno values.
+const (
+ errnoERROR_IO_PENDING = 997
+)
+
+var (
+ errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
+)
+
+// errnoErr returns common boxed Errno values, to prevent
+// allocations at runtime.
+func errnoErr(e syscall.Errno) error {
+ switch e {
+ case 0:
+ return nil
+ case errnoERROR_IO_PENDING:
+ return errERROR_IO_PENDING
+ }
+ // TODO: add more here, after collecting data on the common
+ // error values see on Windows. (perhaps when running
+ // all.bat?)
+ return e
+}
+
+var (
+ modvmcompute = windows.NewLazySystemDLL("vmcompute.dll")
+
+ procActivateLayer = modvmcompute.NewProc("ActivateLayer")
+ procCopyLayer = modvmcompute.NewProc("CopyLayer")
+ procCreateLayer = modvmcompute.NewProc("CreateLayer")
+ procCreateSandboxLayer = modvmcompute.NewProc("CreateSandboxLayer")
+ procExpandSandboxSize = modvmcompute.NewProc("ExpandSandboxSize")
+ procDeactivateLayer = modvmcompute.NewProc("DeactivateLayer")
+ procDestroyLayer = modvmcompute.NewProc("DestroyLayer")
+ procExportLayer = modvmcompute.NewProc("ExportLayer")
+ procGetLayerMountPath = modvmcompute.NewProc("GetLayerMountPath")
+ procGetBaseImages = modvmcompute.NewProc("GetBaseImages")
+ procImportLayer = modvmcompute.NewProc("ImportLayer")
+ procLayerExists = modvmcompute.NewProc("LayerExists")
+ procNameToGuid = modvmcompute.NewProc("NameToGuid")
+ procPrepareLayer = modvmcompute.NewProc("PrepareLayer")
+ procUnprepareLayer = modvmcompute.NewProc("UnprepareLayer")
+ procProcessBaseImage = modvmcompute.NewProc("ProcessBaseImage")
+ procProcessUtilityImage = modvmcompute.NewProc("ProcessUtilityImage")
+ procGrantVmAccess = modvmcompute.NewProc("GrantVmAccess")
+)
+
+func activateLayer(info *driverInfo, id string) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ return _activateLayer(info, _p0)
+}
+
+func _activateLayer(info *driverInfo, id *uint16) (hr error) {
+ if hr = procActivateLayer.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procActivateLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func copyLayer(info *driverInfo, srcId string, dstId string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(srcId)
+ if hr != nil {
+ return
+ }
+ var _p1 *uint16
+ _p1, hr = syscall.UTF16PtrFromString(dstId)
+ if hr != nil {
+ return
+ }
+ return _copyLayer(info, _p0, _p1, descriptors)
+}
+
+func _copyLayer(info *driverInfo, srcId *uint16, dstId *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
+ var _p2 *WC_LAYER_DESCRIPTOR
+ if len(descriptors) > 0 {
+ _p2 = &descriptors[0]
+ }
+ if hr = procCopyLayer.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procCopyLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(srcId)), uintptr(unsafe.Pointer(dstId)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func createLayer(info *driverInfo, id string, parent string) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ var _p1 *uint16
+ _p1, hr = syscall.UTF16PtrFromString(parent)
+ if hr != nil {
+ return
+ }
+ return _createLayer(info, _p0, _p1)
+}
+
+func _createLayer(info *driverInfo, id *uint16, parent *uint16) (hr error) {
+ if hr = procCreateLayer.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procCreateLayer.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(parent)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func createSandboxLayer(info *driverInfo, id string, parent uintptr, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ return _createSandboxLayer(info, _p0, parent, descriptors)
+}
+
+func _createSandboxLayer(info *driverInfo, id *uint16, parent uintptr, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
+ var _p1 *WC_LAYER_DESCRIPTOR
+ if len(descriptors) > 0 {
+ _p1 = &descriptors[0]
+ }
+ if hr = procCreateSandboxLayer.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procCreateSandboxLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(parent), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func expandSandboxSize(info *driverInfo, id string, size uint64) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ return _expandSandboxSize(info, _p0, size)
+}
+
+func _expandSandboxSize(info *driverInfo, id *uint16, size uint64) (hr error) {
+ if hr = procExpandSandboxSize.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procExpandSandboxSize.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(size))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func deactivateLayer(info *driverInfo, id string) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ return _deactivateLayer(info, _p0)
+}
+
+func _deactivateLayer(info *driverInfo, id *uint16) (hr error) {
+ if hr = procDeactivateLayer.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procDeactivateLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func destroyLayer(info *driverInfo, id string) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ return _destroyLayer(info, _p0)
+}
+
+func _destroyLayer(info *driverInfo, id *uint16) (hr error) {
+ if hr = procDestroyLayer.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procDestroyLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func exportLayer(info *driverInfo, id string, path string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ var _p1 *uint16
+ _p1, hr = syscall.UTF16PtrFromString(path)
+ if hr != nil {
+ return
+ }
+ return _exportLayer(info, _p0, _p1, descriptors)
+}
+
+func _exportLayer(info *driverInfo, id *uint16, path *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
+ var _p2 *WC_LAYER_DESCRIPTOR
+ if len(descriptors) > 0 {
+ _p2 = &descriptors[0]
+ }
+ if hr = procExportLayer.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procExportLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func getLayerMountPath(info *driverInfo, id string, length *uintptr, buffer *uint16) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ return _getLayerMountPath(info, _p0, length, buffer)
+}
+
+func _getLayerMountPath(info *driverInfo, id *uint16, length *uintptr, buffer *uint16) (hr error) {
+ if hr = procGetLayerMountPath.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procGetLayerMountPath.Addr(), 4, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(length)), uintptr(unsafe.Pointer(buffer)), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func getBaseImages(buffer **uint16) (hr error) {
+ if hr = procGetBaseImages.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procGetBaseImages.Addr(), 1, uintptr(unsafe.Pointer(buffer)), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func importLayer(info *driverInfo, id string, path string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ var _p1 *uint16
+ _p1, hr = syscall.UTF16PtrFromString(path)
+ if hr != nil {
+ return
+ }
+ return _importLayer(info, _p0, _p1, descriptors)
+}
+
+func _importLayer(info *driverInfo, id *uint16, path *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
+ var _p2 *WC_LAYER_DESCRIPTOR
+ if len(descriptors) > 0 {
+ _p2 = &descriptors[0]
+ }
+ if hr = procImportLayer.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procImportLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func layerExists(info *driverInfo, id string, exists *uint32) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ return _layerExists(info, _p0, exists)
+}
+
+func _layerExists(info *driverInfo, id *uint16, exists *uint32) (hr error) {
+ if hr = procLayerExists.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procLayerExists.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(exists)))
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func nameToGuid(name string, guid *_guid) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(name)
+ if hr != nil {
+ return
+ }
+ return _nameToGuid(_p0, guid)
+}
+
+func _nameToGuid(name *uint16, guid *_guid) (hr error) {
+ if hr = procNameToGuid.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procNameToGuid.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(guid)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func prepareLayer(info *driverInfo, id string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ return _prepareLayer(info, _p0, descriptors)
+}
+
+func _prepareLayer(info *driverInfo, id *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
+ var _p1 *WC_LAYER_DESCRIPTOR
+ if len(descriptors) > 0 {
+ _p1 = &descriptors[0]
+ }
+ if hr = procPrepareLayer.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall6(procPrepareLayer.Addr(), 4, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors)), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func unprepareLayer(info *driverInfo, id string) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(id)
+ if hr != nil {
+ return
+ }
+ return _unprepareLayer(info, _p0)
+}
+
+func _unprepareLayer(info *driverInfo, id *uint16) (hr error) {
+ if hr = procUnprepareLayer.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procUnprepareLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func processBaseImage(path string) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(path)
+ if hr != nil {
+ return
+ }
+ return _processBaseImage(_p0)
+}
+
+func _processBaseImage(path *uint16) (hr error) {
+ if hr = procProcessBaseImage.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procProcessBaseImage.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func processUtilityImage(path string) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(path)
+ if hr != nil {
+ return
+ }
+ return _processUtilityImage(_p0)
+}
+
+func _processUtilityImage(path *uint16) (hr error) {
+ if hr = procProcessUtilityImage.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procProcessUtilityImage.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
+
+func grantVmAccess(vmid string, filepath string) (hr error) {
+ var _p0 *uint16
+ _p0, hr = syscall.UTF16PtrFromString(vmid)
+ if hr != nil {
+ return
+ }
+ var _p1 *uint16
+ _p1, hr = syscall.UTF16PtrFromString(filepath)
+ if hr != nil {
+ return
+ }
+ return _grantVmAccess(_p0, _p1)
+}
+
+func _grantVmAccess(vmid *uint16, filepath *uint16) (hr error) {
+ if hr = procGrantVmAccess.Find(); hr != nil {
+ return
+ }
+ r0, _, _ := syscall.Syscall(procGrantVmAccess.Addr(), 2, uintptr(unsafe.Pointer(vmid)), uintptr(unsafe.Pointer(filepath)), 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
diff --git a/vendor/github.com/Microsoft/hcsshim/layer.go b/vendor/github.com/Microsoft/hcsshim/layer.go
new file mode 100644
index 000000000..df0e63bbd
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/layer.go
@@ -0,0 +1,106 @@
+package hcsshim
+
+import (
+ "crypto/sha1"
+ "path/filepath"
+
+ "github.com/Microsoft/hcsshim/internal/guid"
+ "github.com/Microsoft/hcsshim/internal/wclayer"
+)
+
+func layerPath(info *DriverInfo, id string) string {
+ return filepath.Join(info.HomeDir, id)
+}
+
+func ActivateLayer(info DriverInfo, id string) error {
+ return wclayer.ActivateLayer(layerPath(&info, id))
+}
+func CreateLayer(info DriverInfo, id, parent string) error {
+ return wclayer.CreateLayer(layerPath(&info, id), parent)
+}
+
+// New clients should use CreateScratchLayer instead. Kept in to preserve API compatibility.
+func CreateSandboxLayer(info DriverInfo, layerId, parentId string, parentLayerPaths []string) error {
+ return wclayer.CreateScratchLayer(layerPath(&info, layerId), parentLayerPaths)
+}
+func CreateScratchLayer(info DriverInfo, layerId, parentId string, parentLayerPaths []string) error {
+ return wclayer.CreateScratchLayer(layerPath(&info, layerId), parentLayerPaths)
+}
+func DeactivateLayer(info DriverInfo, id string) error {
+ return wclayer.DeactivateLayer(layerPath(&info, id))
+}
+func DestroyLayer(info DriverInfo, id string) error {
+ return wclayer.DestroyLayer(layerPath(&info, id))
+}
+
+// New clients should use ExpandScratchSize instead. Kept in to preserve API compatibility.
+func ExpandSandboxSize(info DriverInfo, layerId string, size uint64) error {
+ return wclayer.ExpandScratchSize(layerPath(&info, layerId), size)
+}
+func ExpandScratchSize(info DriverInfo, layerId string, size uint64) error {
+ return wclayer.ExpandScratchSize(layerPath(&info, layerId), size)
+}
+func ExportLayer(info DriverInfo, layerId string, exportFolderPath string, parentLayerPaths []string) error {
+ return wclayer.ExportLayer(layerPath(&info, layerId), exportFolderPath, parentLayerPaths)
+}
+func GetLayerMountPath(info DriverInfo, id string) (string, error) {
+ return wclayer.GetLayerMountPath(layerPath(&info, id))
+}
+func GetSharedBaseImages() (imageData string, err error) {
+ return wclayer.GetSharedBaseImages()
+}
+func ImportLayer(info DriverInfo, layerID string, importFolderPath string, parentLayerPaths []string) error {
+ return wclayer.ImportLayer(layerPath(&info, layerID), importFolderPath, parentLayerPaths)
+}
+func LayerExists(info DriverInfo, id string) (bool, error) {
+ return wclayer.LayerExists(layerPath(&info, id))
+}
+func PrepareLayer(info DriverInfo, layerId string, parentLayerPaths []string) error {
+ return wclayer.PrepareLayer(layerPath(&info, layerId), parentLayerPaths)
+}
+func ProcessBaseLayer(path string) error {
+ return wclayer.ProcessBaseLayer(path)
+}
+func ProcessUtilityVMImage(path string) error {
+ return wclayer.ProcessUtilityVMImage(path)
+}
+func UnprepareLayer(info DriverInfo, layerId string) error {
+ return wclayer.UnprepareLayer(layerPath(&info, layerId))
+}
+
+type DriverInfo struct {
+ Flavour int
+ HomeDir string
+}
+
+type GUID [16]byte
+
+func NameToGuid(name string) (id GUID, err error) {
+ g, err := wclayer.NameToGuid(name)
+ return GUID(g), err
+}
+
+func NewGUID(source string) *GUID {
+ h := sha1.Sum([]byte(source))
+ var g GUID
+ copy(g[0:], h[0:16])
+ return &g
+}
+
+func (g *GUID) ToString() string {
+ return (guid.GUID)(*g).String()
+}
+
+type LayerReader = wclayer.LayerReader
+
+func NewLayerReader(info DriverInfo, layerID string, parentLayerPaths []string) (LayerReader, error) {
+ return wclayer.NewLayerReader(layerPath(&info, layerID), parentLayerPaths)
+}
+
+type LayerWriter = wclayer.LayerWriter
+
+func NewLayerWriter(info DriverInfo, layerID string, parentLayerPaths []string) (LayerWriter, error) {
+ return wclayer.NewLayerWriter(layerPath(&info, layerID), parentLayerPaths)
+}
+
+type WC_LAYER_DESCRIPTOR = wclayer.WC_LAYER_DESCRIPTOR
diff --git a/vendor/github.com/Microsoft/hcsshim/layerexists.go b/vendor/github.com/Microsoft/hcsshim/layerexists.go
deleted file mode 100644
index fe46f404c..000000000
--- a/vendor/github.com/Microsoft/hcsshim/layerexists.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package hcsshim
-
-import "github.com/sirupsen/logrus"
-
-// LayerExists will return true if a layer with the given id exists and is known
-// to the system.
-func LayerExists(info DriverInfo, id string) (bool, error) {
- title := "hcsshim::LayerExists "
- logrus.Debugf(title+"Flavour %d ID %s", info.Flavour, id)
-
- // Convert info to API calling convention
- infop, err := convertDriverInfo(info)
- if err != nil {
- logrus.Error(err)
- return false, err
- }
-
- // Call the procedure itself.
- var exists uint32
-
- err = layerExists(&infop, id, &exists)
- if err != nil {
- err = makeErrorf(err, title, "id=%s flavour=%d", id, info.Flavour)
- logrus.Error(err)
- return false, err
- }
-
- logrus.Debugf(title+"succeeded flavour=%d id=%s exists=%d", info.Flavour, id, exists)
- return exists != 0, nil
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/nametoguid.go b/vendor/github.com/Microsoft/hcsshim/nametoguid.go
deleted file mode 100644
index b7c6d020c..000000000
--- a/vendor/github.com/Microsoft/hcsshim/nametoguid.go
+++ /dev/null
@@ -1,20 +0,0 @@
-package hcsshim
-
-import "github.com/sirupsen/logrus"
-
-// NameToGuid converts the given string into a GUID using the algorithm in the
-// Host Compute Service, ensuring GUIDs generated with the same string are common
-// across all clients.
-func NameToGuid(name string) (id GUID, err error) {
- title := "hcsshim::NameToGuid "
- logrus.Debugf(title+"Name %s", name)
-
- err = nameToGuid(name, &id)
- if err != nil {
- err = makeErrorf(err, title, "name=%s", name)
- logrus.Error(err)
- return
- }
-
- return
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/process.go b/vendor/github.com/Microsoft/hcsshim/process.go
index faee2cfee..ca8acbb7c 100644
--- a/vendor/github.com/Microsoft/hcsshim/process.go
+++ b/vendor/github.com/Microsoft/hcsshim/process.go
@@ -1,384 +1,72 @@
package hcsshim
import (
- "encoding/json"
"io"
- "sync"
- "syscall"
"time"
- "github.com/sirupsen/logrus"
+ "github.com/Microsoft/hcsshim/internal/hcs"
)
// ContainerError is an error encountered in HCS
type process struct {
- handleLock sync.RWMutex
- handle hcsProcess
- processID int
- container *container
- cachedPipes *cachedPipes
- callbackNumber uintptr
+ p *hcs.Process
}
-type cachedPipes struct {
- stdIn syscall.Handle
- stdOut syscall.Handle
- stdErr syscall.Handle
-}
-
-type processModifyRequest struct {
- Operation string
- ConsoleSize *consoleSize `json:",omitempty"`
- CloseHandle *closeHandle `json:",omitempty"`
-}
-
-type consoleSize struct {
- Height uint16
- Width uint16
-}
-
-type closeHandle struct {
- Handle string
-}
-
-type processStatus struct {
- ProcessID uint32
- Exited bool
- ExitCode uint32
- LastWaitResult int32
-}
-
-const (
- stdIn string = "StdIn"
- stdOut string = "StdOut"
- stdErr string = "StdErr"
-)
-
-const (
- modifyConsoleSize string = "ConsoleSize"
- modifyCloseHandle string = "CloseHandle"
-)
-
// Pid returns the process ID of the process within the container.
func (process *process) Pid() int {
- return process.processID
+ return process.p.Pid()
}
// Kill signals the process to terminate but does not wait for it to finish terminating.
func (process *process) Kill() error {
- process.handleLock.RLock()
- defer process.handleLock.RUnlock()
- operation := "Kill"
- title := "HCSShim::Process::" + operation
- logrus.Debugf(title+" processid=%d", process.processID)
-
- if process.handle == 0 {
- return makeProcessError(process, operation, "", ErrAlreadyClosed)
- }
-
- var resultp *uint16
- err := hcsTerminateProcess(process.handle, &resultp)
- err = processHcsResult(err, resultp)
- if err != nil {
- return makeProcessError(process, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded processid=%d", process.processID)
- return nil
+ return convertProcessError(process.p.Kill(), process)
}
// Wait waits for the process to exit.
func (process *process) Wait() error {
- operation := "Wait"
- title := "HCSShim::Process::" + operation
- logrus.Debugf(title+" processid=%d", process.processID)
-
- err := waitForNotification(process.callbackNumber, hcsNotificationProcessExited, nil)
- if err != nil {
- return makeProcessError(process, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded processid=%d", process.processID)
- return nil
+ return convertProcessError(process.p.Wait(), process)
}
// WaitTimeout waits for the process to exit or the duration to elapse. It returns
// false if timeout occurs.
func (process *process) WaitTimeout(timeout time.Duration) error {
- operation := "WaitTimeout"
- title := "HCSShim::Process::" + operation
- logrus.Debugf(title+" processid=%d", process.processID)
-
- err := waitForNotification(process.callbackNumber, hcsNotificationProcessExited, &timeout)
- if err != nil {
- return makeProcessError(process, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded processid=%d", process.processID)
- return nil
+ return convertProcessError(process.p.WaitTimeout(timeout), process)
}
// ExitCode returns the exit code of the process. The process must have
// already terminated.
func (process *process) ExitCode() (int, error) {
- process.handleLock.RLock()
- defer process.handleLock.RUnlock()
- operation := "ExitCode"
- title := "HCSShim::Process::" + operation
- logrus.Debugf(title+" processid=%d", process.processID)
-
- if process.handle == 0 {
- return 0, makeProcessError(process, operation, "", ErrAlreadyClosed)
- }
-
- properties, err := process.properties()
+ code, err := process.p.ExitCode()
if err != nil {
- return 0, makeProcessError(process, operation, "", err)
- }
-
- if properties.Exited == false {
- return 0, makeProcessError(process, operation, "", ErrInvalidProcessState)
- }
-
- if properties.LastWaitResult != 0 {
- return 0, makeProcessError(process, operation, "", syscall.Errno(properties.LastWaitResult))
+ err = convertProcessError(err, process)
}
-
- logrus.Debugf(title+" succeeded processid=%d exitCode=%d", process.processID, properties.ExitCode)
- return int(properties.ExitCode), nil
+ return code, err
}
// ResizeConsole resizes the console of the process.
func (process *process) ResizeConsole(width, height uint16) error {
- process.handleLock.RLock()
- defer process.handleLock.RUnlock()
- operation := "ResizeConsole"
- title := "HCSShim::Process::" + operation
- logrus.Debugf(title+" processid=%d", process.processID)
-
- if process.handle == 0 {
- return makeProcessError(process, operation, "", ErrAlreadyClosed)
- }
-
- modifyRequest := processModifyRequest{
- Operation: modifyConsoleSize,
- ConsoleSize: &consoleSize{
- Height: height,
- Width: width,
- },
- }
-
- modifyRequestb, err := json.Marshal(modifyRequest)
- if err != nil {
- return err
- }
-
- modifyRequestStr := string(modifyRequestb)
-
- var resultp *uint16
- err = hcsModifyProcess(process.handle, modifyRequestStr, &resultp)
- err = processHcsResult(err, resultp)
- if err != nil {
- return makeProcessError(process, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded processid=%d", process.processID)
- return nil
-}
-
-func (process *process) properties() (*processStatus, error) {
- operation := "properties"
- title := "HCSShim::Process::" + operation
- logrus.Debugf(title+" processid=%d", process.processID)
-
- var (
- resultp *uint16
- propertiesp *uint16
- )
- err := hcsGetProcessProperties(process.handle, &propertiesp, &resultp)
- err = processHcsResult(err, resultp)
- if err != nil {
- return nil, err
- }
-
- if propertiesp == nil {
- return nil, ErrUnexpectedValue
- }
- propertiesRaw := convertAndFreeCoTaskMemBytes(propertiesp)
-
- properties := &processStatus{}
- if err := json.Unmarshal(propertiesRaw, properties); err != nil {
- return nil, err
- }
-
- logrus.Debugf(title+" succeeded processid=%d, properties=%s", process.processID, propertiesRaw)
- return properties, nil
+ return convertProcessError(process.p.ResizeConsole(width, height), process)
}
// Stdio returns the stdin, stdout, and stderr pipes, respectively. Closing
// these pipes does not close the underlying pipes; it should be possible to
// call this multiple times to get multiple interfaces.
func (process *process) Stdio() (io.WriteCloser, io.ReadCloser, io.ReadCloser, error) {
- process.handleLock.RLock()
- defer process.handleLock.RUnlock()
- operation := "Stdio"
- title := "HCSShim::Process::" + operation
- logrus.Debugf(title+" processid=%d", process.processID)
-
- if process.handle == 0 {
- return nil, nil, nil, makeProcessError(process, operation, "", ErrAlreadyClosed)
- }
-
- var stdIn, stdOut, stdErr syscall.Handle
-
- if process.cachedPipes == nil {
- var (
- processInfo hcsProcessInformation
- resultp *uint16
- )
- err := hcsGetProcessInfo(process.handle, &processInfo, &resultp)
- err = processHcsResult(err, resultp)
- if err != nil {
- return nil, nil, nil, makeProcessError(process, operation, "", err)
- }
-
- stdIn, stdOut, stdErr = processInfo.StdInput, processInfo.StdOutput, processInfo.StdError
- } else {
- // Use cached pipes
- stdIn, stdOut, stdErr = process.cachedPipes.stdIn, process.cachedPipes.stdOut, process.cachedPipes.stdErr
-
- // Invalidate the cache
- process.cachedPipes = nil
- }
-
- pipes, err := makeOpenFiles([]syscall.Handle{stdIn, stdOut, stdErr})
+ stdin, stdout, stderr, err := process.p.Stdio()
if err != nil {
- return nil, nil, nil, makeProcessError(process, operation, "", err)
+ err = convertProcessError(err, process)
}
-
- logrus.Debugf(title+" succeeded processid=%d", process.processID)
- return pipes[0], pipes[1], pipes[2], nil
+ return stdin, stdout, stderr, err
}
// CloseStdin closes the write side of the stdin pipe so that the process is
// notified on the read side that there is no more data in stdin.
func (process *process) CloseStdin() error {
- process.handleLock.RLock()
- defer process.handleLock.RUnlock()
- operation := "CloseStdin"
- title := "HCSShim::Process::" + operation
- logrus.Debugf(title+" processid=%d", process.processID)
-
- if process.handle == 0 {
- return makeProcessError(process, operation, "", ErrAlreadyClosed)
- }
-
- modifyRequest := processModifyRequest{
- Operation: modifyCloseHandle,
- CloseHandle: &closeHandle{
- Handle: stdIn,
- },
- }
-
- modifyRequestb, err := json.Marshal(modifyRequest)
- if err != nil {
- return err
- }
-
- modifyRequestStr := string(modifyRequestb)
-
- var resultp *uint16
- err = hcsModifyProcess(process.handle, modifyRequestStr, &resultp)
- err = processHcsResult(err, resultp)
- if err != nil {
- return makeProcessError(process, operation, "", err)
- }
-
- logrus.Debugf(title+" succeeded processid=%d", process.processID)
- return nil
+ return convertProcessError(process.p.CloseStdin(), process)
}
// Close cleans up any state associated with the process but does not kill
// or wait on it.
func (process *process) Close() error {
- process.handleLock.Lock()
- defer process.handleLock.Unlock()
- operation := "Close"
- title := "HCSShim::Process::" + operation
- logrus.Debugf(title+" processid=%d", process.processID)
-
- // Don't double free this
- if process.handle == 0 {
- return nil
- }
-
- if err := process.unregisterCallback(); err != nil {
- return makeProcessError(process, operation, "", err)
- }
-
- if err := hcsCloseProcess(process.handle); err != nil {
- return makeProcessError(process, operation, "", err)
- }
-
- process.handle = 0
-
- logrus.Debugf(title+" succeeded processid=%d", process.processID)
- return nil
-}
-
-func (process *process) registerCallback() error {
- context := &notifcationWatcherContext{
- channels: newChannels(),
- }
-
- callbackMapLock.Lock()
- callbackNumber := nextCallback
- nextCallback++
- callbackMap[callbackNumber] = context
- callbackMapLock.Unlock()
-
- var callbackHandle hcsCallback
- err := hcsRegisterProcessCallback(process.handle, notificationWatcherCallback, callbackNumber, &callbackHandle)
- if err != nil {
- return err
- }
- context.handle = callbackHandle
- process.callbackNumber = callbackNumber
-
- return nil
-}
-
-func (process *process) unregisterCallback() error {
- callbackNumber := process.callbackNumber
-
- callbackMapLock.RLock()
- context := callbackMap[callbackNumber]
- callbackMapLock.RUnlock()
-
- if context == nil {
- return nil
- }
-
- handle := context.handle
-
- if handle == 0 {
- return nil
- }
-
- // hcsUnregisterProcessCallback has its own syncronization
- // to wait for all callbacks to complete. We must NOT hold the callbackMapLock.
- err := hcsUnregisterProcessCallback(handle)
- if err != nil {
- return err
- }
-
- closeChannels(context.channels)
-
- callbackMapLock.Lock()
- callbackMap[callbackNumber] = nil
- callbackMapLock.Unlock()
-
- handle = 0
-
- return nil
+ return convertProcessError(process.p.Close(), process)
}
diff --git a/vendor/github.com/Microsoft/hcsshim/unpreparelayer.go b/vendor/github.com/Microsoft/hcsshim/unpreparelayer.go
deleted file mode 100644
index e8a3b507b..000000000
--- a/vendor/github.com/Microsoft/hcsshim/unpreparelayer.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package hcsshim
-
-import "github.com/sirupsen/logrus"
-
-// UnprepareLayer disables the filesystem filter for the read-write layer with
-// the given id.
-func UnprepareLayer(info DriverInfo, layerId string) error {
- title := "hcsshim::UnprepareLayer "
- logrus.Debugf(title+"flavour %d layerId %s", info.Flavour, layerId)
-
- // Convert info to API calling convention
- infop, err := convertDriverInfo(info)
- if err != nil {
- logrus.Error(err)
- return err
- }
-
- err = unprepareLayer(&infop, layerId)
- if err != nil {
- err = makeErrorf(err, title, "layerId=%s flavour=%d", layerId, info.Flavour)
- logrus.Error(err)
- return err
- }
-
- logrus.Debugf(title+"succeeded flavour %d layerId=%s", info.Flavour, layerId)
- return nil
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/version.go b/vendor/github.com/Microsoft/hcsshim/version.go
deleted file mode 100644
index ae10c23d4..000000000
--- a/vendor/github.com/Microsoft/hcsshim/version.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package hcsshim
-
-// IsTP4 returns whether the currently running Windows build is at least TP4.
-func IsTP4() bool {
- // HNSCall was not present in TP4
- return procHNSCall.Find() != nil
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/zhcsshim.go b/vendor/github.com/Microsoft/hcsshim/zhcsshim.go
deleted file mode 100644
index 5d1a851ae..000000000
--- a/vendor/github.com/Microsoft/hcsshim/zhcsshim.go
+++ /dev/null
@@ -1,1042 +0,0 @@
-// MACHINE GENERATED BY 'go generate' COMMAND; DO NOT EDIT
-
-package hcsshim
-
-import (
- "syscall"
- "unsafe"
-
- "github.com/Microsoft/go-winio"
- "golang.org/x/sys/windows"
-)
-
-var _ unsafe.Pointer
-
-// Do the interface allocations only once for common
-// Errno values.
-const (
- errnoERROR_IO_PENDING = 997
-)
-
-var (
- errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
-)
-
-// errnoErr returns common boxed Errno values, to prevent
-// allocations at runtime.
-func errnoErr(e syscall.Errno) error {
- switch e {
- case 0:
- return nil
- case errnoERROR_IO_PENDING:
- return errERROR_IO_PENDING
- }
- // TODO: add more here, after collecting data on the common
- // error values see on Windows. (perhaps when running
- // all.bat?)
- return e
-}
-
-var (
- modole32 = windows.NewLazySystemDLL("ole32.dll")
- modiphlpapi = windows.NewLazySystemDLL("iphlpapi.dll")
- modvmcompute = windows.NewLazySystemDLL("vmcompute.dll")
-
- procCoTaskMemFree = modole32.NewProc("CoTaskMemFree")
- procSetCurrentThreadCompartmentId = modiphlpapi.NewProc("SetCurrentThreadCompartmentId")
- procActivateLayer = modvmcompute.NewProc("ActivateLayer")
- procCopyLayer = modvmcompute.NewProc("CopyLayer")
- procCreateLayer = modvmcompute.NewProc("CreateLayer")
- procCreateSandboxLayer = modvmcompute.NewProc("CreateSandboxLayer")
- procExpandSandboxSize = modvmcompute.NewProc("ExpandSandboxSize")
- procDeactivateLayer = modvmcompute.NewProc("DeactivateLayer")
- procDestroyLayer = modvmcompute.NewProc("DestroyLayer")
- procExportLayer = modvmcompute.NewProc("ExportLayer")
- procGetLayerMountPath = modvmcompute.NewProc("GetLayerMountPath")
- procGetBaseImages = modvmcompute.NewProc("GetBaseImages")
- procImportLayer = modvmcompute.NewProc("ImportLayer")
- procLayerExists = modvmcompute.NewProc("LayerExists")
- procNameToGuid = modvmcompute.NewProc("NameToGuid")
- procPrepareLayer = modvmcompute.NewProc("PrepareLayer")
- procUnprepareLayer = modvmcompute.NewProc("UnprepareLayer")
- procProcessBaseImage = modvmcompute.NewProc("ProcessBaseImage")
- procProcessUtilityImage = modvmcompute.NewProc("ProcessUtilityImage")
- procImportLayerBegin = modvmcompute.NewProc("ImportLayerBegin")
- procImportLayerNext = modvmcompute.NewProc("ImportLayerNext")
- procImportLayerWrite = modvmcompute.NewProc("ImportLayerWrite")
- procImportLayerEnd = modvmcompute.NewProc("ImportLayerEnd")
- procExportLayerBegin = modvmcompute.NewProc("ExportLayerBegin")
- procExportLayerNext = modvmcompute.NewProc("ExportLayerNext")
- procExportLayerRead = modvmcompute.NewProc("ExportLayerRead")
- procExportLayerEnd = modvmcompute.NewProc("ExportLayerEnd")
- procHcsEnumerateComputeSystems = modvmcompute.NewProc("HcsEnumerateComputeSystems")
- procHcsCreateComputeSystem = modvmcompute.NewProc("HcsCreateComputeSystem")
- procHcsOpenComputeSystem = modvmcompute.NewProc("HcsOpenComputeSystem")
- procHcsCloseComputeSystem = modvmcompute.NewProc("HcsCloseComputeSystem")
- procHcsStartComputeSystem = modvmcompute.NewProc("HcsStartComputeSystem")
- procHcsShutdownComputeSystem = modvmcompute.NewProc("HcsShutdownComputeSystem")
- procHcsTerminateComputeSystem = modvmcompute.NewProc("HcsTerminateComputeSystem")
- procHcsPauseComputeSystem = modvmcompute.NewProc("HcsPauseComputeSystem")
- procHcsResumeComputeSystem = modvmcompute.NewProc("HcsResumeComputeSystem")
- procHcsGetComputeSystemProperties = modvmcompute.NewProc("HcsGetComputeSystemProperties")
- procHcsModifyComputeSystem = modvmcompute.NewProc("HcsModifyComputeSystem")
- procHcsRegisterComputeSystemCallback = modvmcompute.NewProc("HcsRegisterComputeSystemCallback")
- procHcsUnregisterComputeSystemCallback = modvmcompute.NewProc("HcsUnregisterComputeSystemCallback")
- procHcsCreateProcess = modvmcompute.NewProc("HcsCreateProcess")
- procHcsOpenProcess = modvmcompute.NewProc("HcsOpenProcess")
- procHcsCloseProcess = modvmcompute.NewProc("HcsCloseProcess")
- procHcsTerminateProcess = modvmcompute.NewProc("HcsTerminateProcess")
- procHcsGetProcessInfo = modvmcompute.NewProc("HcsGetProcessInfo")
- procHcsGetProcessProperties = modvmcompute.NewProc("HcsGetProcessProperties")
- procHcsModifyProcess = modvmcompute.NewProc("HcsModifyProcess")
- procHcsGetServiceProperties = modvmcompute.NewProc("HcsGetServiceProperties")
- procHcsRegisterProcessCallback = modvmcompute.NewProc("HcsRegisterProcessCallback")
- procHcsUnregisterProcessCallback = modvmcompute.NewProc("HcsUnregisterProcessCallback")
- procHcsModifyServiceSettings = modvmcompute.NewProc("HcsModifyServiceSettings")
- procHNSCall = modvmcompute.NewProc("HNSCall")
-)
-
-func coTaskMemFree(buffer unsafe.Pointer) {
- syscall.Syscall(procCoTaskMemFree.Addr(), 1, uintptr(buffer), 0, 0)
- return
-}
-
-func SetCurrentThreadCompartmentId(compartmentId uint32) (hr error) {
- r0, _, _ := syscall.Syscall(procSetCurrentThreadCompartmentId.Addr(), 1, uintptr(compartmentId), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func activateLayer(info *driverInfo, id string) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- return _activateLayer(info, _p0)
-}
-
-func _activateLayer(info *driverInfo, id *uint16) (hr error) {
- if hr = procActivateLayer.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procActivateLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func copyLayer(info *driverInfo, srcId string, dstId string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(srcId)
- if hr != nil {
- return
- }
- var _p1 *uint16
- _p1, hr = syscall.UTF16PtrFromString(dstId)
- if hr != nil {
- return
- }
- return _copyLayer(info, _p0, _p1, descriptors)
-}
-
-func _copyLayer(info *driverInfo, srcId *uint16, dstId *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
- var _p2 *WC_LAYER_DESCRIPTOR
- if len(descriptors) > 0 {
- _p2 = &descriptors[0]
- }
- if hr = procCopyLayer.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procCopyLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(srcId)), uintptr(unsafe.Pointer(dstId)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func createLayer(info *driverInfo, id string, parent string) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- var _p1 *uint16
- _p1, hr = syscall.UTF16PtrFromString(parent)
- if hr != nil {
- return
- }
- return _createLayer(info, _p0, _p1)
-}
-
-func _createLayer(info *driverInfo, id *uint16, parent *uint16) (hr error) {
- if hr = procCreateLayer.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procCreateLayer.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(parent)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func createSandboxLayer(info *driverInfo, id string, parent string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- var _p1 *uint16
- _p1, hr = syscall.UTF16PtrFromString(parent)
- if hr != nil {
- return
- }
- return _createSandboxLayer(info, _p0, _p1, descriptors)
-}
-
-func _createSandboxLayer(info *driverInfo, id *uint16, parent *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
- var _p2 *WC_LAYER_DESCRIPTOR
- if len(descriptors) > 0 {
- _p2 = &descriptors[0]
- }
- if hr = procCreateSandboxLayer.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procCreateSandboxLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(parent)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func expandSandboxSize(info *driverInfo, id string, size uint64) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- return _expandSandboxSize(info, _p0, size)
-}
-
-func _expandSandboxSize(info *driverInfo, id *uint16, size uint64) (hr error) {
- if hr = procExpandSandboxSize.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procExpandSandboxSize.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(size))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func deactivateLayer(info *driverInfo, id string) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- return _deactivateLayer(info, _p0)
-}
-
-func _deactivateLayer(info *driverInfo, id *uint16) (hr error) {
- if hr = procDeactivateLayer.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procDeactivateLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func destroyLayer(info *driverInfo, id string) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- return _destroyLayer(info, _p0)
-}
-
-func _destroyLayer(info *driverInfo, id *uint16) (hr error) {
- if hr = procDestroyLayer.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procDestroyLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func exportLayer(info *driverInfo, id string, path string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- var _p1 *uint16
- _p1, hr = syscall.UTF16PtrFromString(path)
- if hr != nil {
- return
- }
- return _exportLayer(info, _p0, _p1, descriptors)
-}
-
-func _exportLayer(info *driverInfo, id *uint16, path *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
- var _p2 *WC_LAYER_DESCRIPTOR
- if len(descriptors) > 0 {
- _p2 = &descriptors[0]
- }
- if hr = procExportLayer.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procExportLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func getLayerMountPath(info *driverInfo, id string, length *uintptr, buffer *uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- return _getLayerMountPath(info, _p0, length, buffer)
-}
-
-func _getLayerMountPath(info *driverInfo, id *uint16, length *uintptr, buffer *uint16) (hr error) {
- if hr = procGetLayerMountPath.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procGetLayerMountPath.Addr(), 4, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(length)), uintptr(unsafe.Pointer(buffer)), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func getBaseImages(buffer **uint16) (hr error) {
- if hr = procGetBaseImages.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procGetBaseImages.Addr(), 1, uintptr(unsafe.Pointer(buffer)), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func importLayer(info *driverInfo, id string, path string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- var _p1 *uint16
- _p1, hr = syscall.UTF16PtrFromString(path)
- if hr != nil {
- return
- }
- return _importLayer(info, _p0, _p1, descriptors)
-}
-
-func _importLayer(info *driverInfo, id *uint16, path *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
- var _p2 *WC_LAYER_DESCRIPTOR
- if len(descriptors) > 0 {
- _p2 = &descriptors[0]
- }
- if hr = procImportLayer.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procImportLayer.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(_p2)), uintptr(len(descriptors)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func layerExists(info *driverInfo, id string, exists *uint32) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- return _layerExists(info, _p0, exists)
-}
-
-func _layerExists(info *driverInfo, id *uint16, exists *uint32) (hr error) {
- if hr = procLayerExists.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procLayerExists.Addr(), 3, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(exists)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func nameToGuid(name string, guid *GUID) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(name)
- if hr != nil {
- return
- }
- return _nameToGuid(_p0, guid)
-}
-
-func _nameToGuid(name *uint16, guid *GUID) (hr error) {
- if hr = procNameToGuid.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procNameToGuid.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(guid)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func prepareLayer(info *driverInfo, id string, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- return _prepareLayer(info, _p0, descriptors)
-}
-
-func _prepareLayer(info *driverInfo, id *uint16, descriptors []WC_LAYER_DESCRIPTOR) (hr error) {
- var _p1 *WC_LAYER_DESCRIPTOR
- if len(descriptors) > 0 {
- _p1 = &descriptors[0]
- }
- if hr = procPrepareLayer.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procPrepareLayer.Addr(), 4, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors)), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func unprepareLayer(info *driverInfo, id string) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- return _unprepareLayer(info, _p0)
-}
-
-func _unprepareLayer(info *driverInfo, id *uint16) (hr error) {
- if hr = procUnprepareLayer.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procUnprepareLayer.Addr(), 2, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func processBaseImage(path string) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(path)
- if hr != nil {
- return
- }
- return _processBaseImage(_p0)
-}
-
-func _processBaseImage(path *uint16) (hr error) {
- if hr = procProcessBaseImage.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procProcessBaseImage.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func processUtilityImage(path string) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(path)
- if hr != nil {
- return
- }
- return _processUtilityImage(_p0)
-}
-
-func _processUtilityImage(path *uint16) (hr error) {
- if hr = procProcessUtilityImage.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procProcessUtilityImage.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func importLayerBegin(info *driverInfo, id string, descriptors []WC_LAYER_DESCRIPTOR, context *uintptr) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- return _importLayerBegin(info, _p0, descriptors, context)
-}
-
-func _importLayerBegin(info *driverInfo, id *uint16, descriptors []WC_LAYER_DESCRIPTOR, context *uintptr) (hr error) {
- var _p1 *WC_LAYER_DESCRIPTOR
- if len(descriptors) > 0 {
- _p1 = &descriptors[0]
- }
- if hr = procImportLayerBegin.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procImportLayerBegin.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors)), uintptr(unsafe.Pointer(context)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func importLayerNext(context uintptr, fileName string, fileInfo *winio.FileBasicInfo) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(fileName)
- if hr != nil {
- return
- }
- return _importLayerNext(context, _p0, fileInfo)
-}
-
-func _importLayerNext(context uintptr, fileName *uint16, fileInfo *winio.FileBasicInfo) (hr error) {
- if hr = procImportLayerNext.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procImportLayerNext.Addr(), 3, uintptr(context), uintptr(unsafe.Pointer(fileName)), uintptr(unsafe.Pointer(fileInfo)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func importLayerWrite(context uintptr, buffer []byte) (hr error) {
- var _p0 *byte
- if len(buffer) > 0 {
- _p0 = &buffer[0]
- }
- if hr = procImportLayerWrite.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procImportLayerWrite.Addr(), 3, uintptr(context), uintptr(unsafe.Pointer(_p0)), uintptr(len(buffer)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func importLayerEnd(context uintptr) (hr error) {
- if hr = procImportLayerEnd.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procImportLayerEnd.Addr(), 1, uintptr(context), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func exportLayerBegin(info *driverInfo, id string, descriptors []WC_LAYER_DESCRIPTOR, context *uintptr) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- return _exportLayerBegin(info, _p0, descriptors, context)
-}
-
-func _exportLayerBegin(info *driverInfo, id *uint16, descriptors []WC_LAYER_DESCRIPTOR, context *uintptr) (hr error) {
- var _p1 *WC_LAYER_DESCRIPTOR
- if len(descriptors) > 0 {
- _p1 = &descriptors[0]
- }
- if hr = procExportLayerBegin.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procExportLayerBegin.Addr(), 5, uintptr(unsafe.Pointer(info)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(_p1)), uintptr(len(descriptors)), uintptr(unsafe.Pointer(context)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func exportLayerNext(context uintptr, fileName **uint16, fileInfo *winio.FileBasicInfo, fileSize *int64, deleted *uint32) (hr error) {
- if hr = procExportLayerNext.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procExportLayerNext.Addr(), 5, uintptr(context), uintptr(unsafe.Pointer(fileName)), uintptr(unsafe.Pointer(fileInfo)), uintptr(unsafe.Pointer(fileSize)), uintptr(unsafe.Pointer(deleted)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func exportLayerRead(context uintptr, buffer []byte, bytesRead *uint32) (hr error) {
- var _p0 *byte
- if len(buffer) > 0 {
- _p0 = &buffer[0]
- }
- if hr = procExportLayerRead.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procExportLayerRead.Addr(), 4, uintptr(context), uintptr(unsafe.Pointer(_p0)), uintptr(len(buffer)), uintptr(unsafe.Pointer(bytesRead)), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func exportLayerEnd(context uintptr) (hr error) {
- if hr = procExportLayerEnd.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procExportLayerEnd.Addr(), 1, uintptr(context), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsEnumerateComputeSystems(query string, computeSystems **uint16, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(query)
- if hr != nil {
- return
- }
- return _hcsEnumerateComputeSystems(_p0, computeSystems, result)
-}
-
-func _hcsEnumerateComputeSystems(query *uint16, computeSystems **uint16, result **uint16) (hr error) {
- if hr = procHcsEnumerateComputeSystems.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsEnumerateComputeSystems.Addr(), 3, uintptr(unsafe.Pointer(query)), uintptr(unsafe.Pointer(computeSystems)), uintptr(unsafe.Pointer(result)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsCreateComputeSystem(id string, configuration string, identity syscall.Handle, computeSystem *hcsSystem, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- var _p1 *uint16
- _p1, hr = syscall.UTF16PtrFromString(configuration)
- if hr != nil {
- return
- }
- return _hcsCreateComputeSystem(_p0, _p1, identity, computeSystem, result)
-}
-
-func _hcsCreateComputeSystem(id *uint16, configuration *uint16, identity syscall.Handle, computeSystem *hcsSystem, result **uint16) (hr error) {
- if hr = procHcsCreateComputeSystem.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procHcsCreateComputeSystem.Addr(), 5, uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(configuration)), uintptr(identity), uintptr(unsafe.Pointer(computeSystem)), uintptr(unsafe.Pointer(result)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsOpenComputeSystem(id string, computeSystem *hcsSystem, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(id)
- if hr != nil {
- return
- }
- return _hcsOpenComputeSystem(_p0, computeSystem, result)
-}
-
-func _hcsOpenComputeSystem(id *uint16, computeSystem *hcsSystem, result **uint16) (hr error) {
- if hr = procHcsOpenComputeSystem.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsOpenComputeSystem.Addr(), 3, uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(computeSystem)), uintptr(unsafe.Pointer(result)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsCloseComputeSystem(computeSystem hcsSystem) (hr error) {
- if hr = procHcsCloseComputeSystem.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsCloseComputeSystem.Addr(), 1, uintptr(computeSystem), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsStartComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(options)
- if hr != nil {
- return
- }
- return _hcsStartComputeSystem(computeSystem, _p0, result)
-}
-
-func _hcsStartComputeSystem(computeSystem hcsSystem, options *uint16, result **uint16) (hr error) {
- if hr = procHcsStartComputeSystem.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsStartComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsShutdownComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(options)
- if hr != nil {
- return
- }
- return _hcsShutdownComputeSystem(computeSystem, _p0, result)
-}
-
-func _hcsShutdownComputeSystem(computeSystem hcsSystem, options *uint16, result **uint16) (hr error) {
- if hr = procHcsShutdownComputeSystem.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsShutdownComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsTerminateComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(options)
- if hr != nil {
- return
- }
- return _hcsTerminateComputeSystem(computeSystem, _p0, result)
-}
-
-func _hcsTerminateComputeSystem(computeSystem hcsSystem, options *uint16, result **uint16) (hr error) {
- if hr = procHcsTerminateComputeSystem.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsTerminateComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsPauseComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(options)
- if hr != nil {
- return
- }
- return _hcsPauseComputeSystem(computeSystem, _p0, result)
-}
-
-func _hcsPauseComputeSystem(computeSystem hcsSystem, options *uint16, result **uint16) (hr error) {
- if hr = procHcsPauseComputeSystem.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsPauseComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsResumeComputeSystem(computeSystem hcsSystem, options string, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(options)
- if hr != nil {
- return
- }
- return _hcsResumeComputeSystem(computeSystem, _p0, result)
-}
-
-func _hcsResumeComputeSystem(computeSystem hcsSystem, options *uint16, result **uint16) (hr error) {
- if hr = procHcsResumeComputeSystem.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsResumeComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(options)), uintptr(unsafe.Pointer(result)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsGetComputeSystemProperties(computeSystem hcsSystem, propertyQuery string, properties **uint16, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(propertyQuery)
- if hr != nil {
- return
- }
- return _hcsGetComputeSystemProperties(computeSystem, _p0, properties, result)
-}
-
-func _hcsGetComputeSystemProperties(computeSystem hcsSystem, propertyQuery *uint16, properties **uint16, result **uint16) (hr error) {
- if hr = procHcsGetComputeSystemProperties.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procHcsGetComputeSystemProperties.Addr(), 4, uintptr(computeSystem), uintptr(unsafe.Pointer(propertyQuery)), uintptr(unsafe.Pointer(properties)), uintptr(unsafe.Pointer(result)), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsModifyComputeSystem(computeSystem hcsSystem, configuration string, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(configuration)
- if hr != nil {
- return
- }
- return _hcsModifyComputeSystem(computeSystem, _p0, result)
-}
-
-func _hcsModifyComputeSystem(computeSystem hcsSystem, configuration *uint16, result **uint16) (hr error) {
- if hr = procHcsModifyComputeSystem.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsModifyComputeSystem.Addr(), 3, uintptr(computeSystem), uintptr(unsafe.Pointer(configuration)), uintptr(unsafe.Pointer(result)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsRegisterComputeSystemCallback(computeSystem hcsSystem, callback uintptr, context uintptr, callbackHandle *hcsCallback) (hr error) {
- if hr = procHcsRegisterComputeSystemCallback.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procHcsRegisterComputeSystemCallback.Addr(), 4, uintptr(computeSystem), uintptr(callback), uintptr(context), uintptr(unsafe.Pointer(callbackHandle)), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsUnregisterComputeSystemCallback(callbackHandle hcsCallback) (hr error) {
- if hr = procHcsUnregisterComputeSystemCallback.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsUnregisterComputeSystemCallback.Addr(), 1, uintptr(callbackHandle), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsCreateProcess(computeSystem hcsSystem, processParameters string, processInformation *hcsProcessInformation, process *hcsProcess, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(processParameters)
- if hr != nil {
- return
- }
- return _hcsCreateProcess(computeSystem, _p0, processInformation, process, result)
-}
-
-func _hcsCreateProcess(computeSystem hcsSystem, processParameters *uint16, processInformation *hcsProcessInformation, process *hcsProcess, result **uint16) (hr error) {
- if hr = procHcsCreateProcess.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procHcsCreateProcess.Addr(), 5, uintptr(computeSystem), uintptr(unsafe.Pointer(processParameters)), uintptr(unsafe.Pointer(processInformation)), uintptr(unsafe.Pointer(process)), uintptr(unsafe.Pointer(result)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsOpenProcess(computeSystem hcsSystem, pid uint32, process *hcsProcess, result **uint16) (hr error) {
- if hr = procHcsOpenProcess.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procHcsOpenProcess.Addr(), 4, uintptr(computeSystem), uintptr(pid), uintptr(unsafe.Pointer(process)), uintptr(unsafe.Pointer(result)), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsCloseProcess(process hcsProcess) (hr error) {
- if hr = procHcsCloseProcess.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsCloseProcess.Addr(), 1, uintptr(process), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsTerminateProcess(process hcsProcess, result **uint16) (hr error) {
- if hr = procHcsTerminateProcess.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsTerminateProcess.Addr(), 2, uintptr(process), uintptr(unsafe.Pointer(result)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsGetProcessInfo(process hcsProcess, processInformation *hcsProcessInformation, result **uint16) (hr error) {
- if hr = procHcsGetProcessInfo.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsGetProcessInfo.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(processInformation)), uintptr(unsafe.Pointer(result)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsGetProcessProperties(process hcsProcess, processProperties **uint16, result **uint16) (hr error) {
- if hr = procHcsGetProcessProperties.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsGetProcessProperties.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(processProperties)), uintptr(unsafe.Pointer(result)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsModifyProcess(process hcsProcess, settings string, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(settings)
- if hr != nil {
- return
- }
- return _hcsModifyProcess(process, _p0, result)
-}
-
-func _hcsModifyProcess(process hcsProcess, settings *uint16, result **uint16) (hr error) {
- if hr = procHcsModifyProcess.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsModifyProcess.Addr(), 3, uintptr(process), uintptr(unsafe.Pointer(settings)), uintptr(unsafe.Pointer(result)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsGetServiceProperties(propertyQuery string, properties **uint16, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(propertyQuery)
- if hr != nil {
- return
- }
- return _hcsGetServiceProperties(_p0, properties, result)
-}
-
-func _hcsGetServiceProperties(propertyQuery *uint16, properties **uint16, result **uint16) (hr error) {
- if hr = procHcsGetServiceProperties.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsGetServiceProperties.Addr(), 3, uintptr(unsafe.Pointer(propertyQuery)), uintptr(unsafe.Pointer(properties)), uintptr(unsafe.Pointer(result)))
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsRegisterProcessCallback(process hcsProcess, callback uintptr, context uintptr, callbackHandle *hcsCallback) (hr error) {
- if hr = procHcsRegisterProcessCallback.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procHcsRegisterProcessCallback.Addr(), 4, uintptr(process), uintptr(callback), uintptr(context), uintptr(unsafe.Pointer(callbackHandle)), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsUnregisterProcessCallback(callbackHandle hcsCallback) (hr error) {
- if hr = procHcsUnregisterProcessCallback.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsUnregisterProcessCallback.Addr(), 1, uintptr(callbackHandle), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func hcsModifyServiceSettings(settings string, result **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(settings)
- if hr != nil {
- return
- }
- return _hcsModifyServiceSettings(_p0, result)
-}
-
-func _hcsModifyServiceSettings(settings *uint16, result **uint16) (hr error) {
- if hr = procHcsModifyServiceSettings.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall(procHcsModifyServiceSettings.Addr(), 2, uintptr(unsafe.Pointer(settings)), uintptr(unsafe.Pointer(result)), 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
-
-func _hnsCall(method string, path string, object string, response **uint16) (hr error) {
- var _p0 *uint16
- _p0, hr = syscall.UTF16PtrFromString(method)
- if hr != nil {
- return
- }
- var _p1 *uint16
- _p1, hr = syscall.UTF16PtrFromString(path)
- if hr != nil {
- return
- }
- var _p2 *uint16
- _p2, hr = syscall.UTF16PtrFromString(object)
- if hr != nil {
- return
- }
- return __hnsCall(_p0, _p1, _p2, response)
-}
-
-func __hnsCall(method *uint16, path *uint16, object *uint16, response **uint16) (hr error) {
- if hr = procHNSCall.Find(); hr != nil {
- return
- }
- r0, _, _ := syscall.Syscall6(procHNSCall.Addr(), 4, uintptr(unsafe.Pointer(method)), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(object)), uintptr(unsafe.Pointer(response)), 0, 0)
- if int32(r0) < 0 {
- hr = syscall.Errno(win32FromHresult(r0))
- }
- return
-}
diff --git a/vendor/github.com/Microsoft/hcsshim/zsyscall_windows.go b/vendor/github.com/Microsoft/hcsshim/zsyscall_windows.go
new file mode 100644
index 000000000..d2dff9cb0
--- /dev/null
+++ b/vendor/github.com/Microsoft/hcsshim/zsyscall_windows.go
@@ -0,0 +1,52 @@
+// Code generated mksyscall_windows.exe DO NOT EDIT
+
+package hcsshim
+
+import (
+ "syscall"
+ "unsafe"
+
+ "github.com/Microsoft/hcsshim/internal/interop"
+ "golang.org/x/sys/windows"
+)
+
+var _ unsafe.Pointer
+
+// Do the interface allocations only once for common
+// Errno values.
+const (
+ errnoERROR_IO_PENDING = 997
+)
+
+var (
+ errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
+)
+
+// errnoErr returns common boxed Errno values, to prevent
+// allocations at runtime.
+func errnoErr(e syscall.Errno) error {
+ switch e {
+ case 0:
+ return nil
+ case errnoERROR_IO_PENDING:
+ return errERROR_IO_PENDING
+ }
+ // TODO: add more here, after collecting data on the common
+ // error values see on Windows. (perhaps when running
+ // all.bat?)
+ return e
+}
+
+var (
+ modiphlpapi = windows.NewLazySystemDLL("iphlpapi.dll")
+
+ procSetCurrentThreadCompartmentId = modiphlpapi.NewProc("SetCurrentThreadCompartmentId")
+)
+
+func SetCurrentThreadCompartmentId(compartmentId uint32) (hr error) {
+ r0, _, _ := syscall.Syscall(procSetCurrentThreadCompartmentId.Addr(), 1, uintptr(compartmentId), 0, 0)
+ if int32(r0) < 0 {
+ hr = interop.Win32FromHresult(r0)
+ }
+ return
+}
diff --git a/vendor/github.com/boltdb/bolt/README.md b/vendor/github.com/boltdb/bolt/README.md
index fc2a1e048..7d43a15b2 100644
--- a/vendor/github.com/boltdb/bolt/README.md
+++ b/vendor/github.com/boltdb/bolt/README.md
@@ -21,25 +21,6 @@ consistency and thread safety. Bolt is currently used in high-load production
environments serving databases as large as 1TB. Many companies such as
Shopify and Heroku use Bolt-backed services every day.
-## A message from the author
-
-> The original goal of Bolt was to provide a simple pure Go key/value store and to
-> not bloat the code with extraneous features. To that end, the project has been
-> a success. However, this limited scope also means that the project is complete.
->
-> Maintaining an open source database requires an immense amount of time and energy.
-> Changes to the code can have unintended and sometimes catastrophic effects so
-> even simple changes require hours and hours of careful testing and validation.
->
-> Unfortunately I no longer have the time or energy to continue this work. Bolt is
-> in a stable state and has years of successful production use. As such, I feel that
-> leaving it in its current state is the most prudent course of action.
->
-> If you are interested in using a more featureful version of Bolt, I suggest that
-> you look at the CoreOS fork called [bbolt](https://github.com/coreos/bbolt).
-
-- Ben Johnson ([@benbjohnson](https://twitter.com/benbjohnson))
-
## Table of Contents
- [Getting Started](#getting-started)
diff --git a/vendor/github.com/boltdb/bolt/db.go b/vendor/github.com/boltdb/bolt/db.go
index cc3596fa7..f352ff14f 100644
--- a/vendor/github.com/boltdb/bolt/db.go
+++ b/vendor/github.com/boltdb/bolt/db.go
@@ -737,7 +737,9 @@ retry:
// pass success, or bolt internal errors, to all callers
for _, c := range b.calls {
- c.err <- err
+ if c.err != nil {
+ c.err <- err
+ }
}
break retry
}
diff --git a/vendor/github.com/boltdb/bolt/tx.go b/vendor/github.com/boltdb/bolt/tx.go
index bbb60ac92..6700308a2 100644
--- a/vendor/github.com/boltdb/bolt/tx.go
+++ b/vendor/github.com/boltdb/bolt/tx.go
@@ -291,9 +291,7 @@ func (tx *Tx) close() {
}
// Copy writes the entire database to a writer.
-// This function exists for backwards compatibility.
-//
-// Deprecated; Use WriteTo() instead.
+// This function exists for backwards compatibility. Use WriteTo() instead.
func (tx *Tx) Copy(w io.Writer) error {
_, err := tx.WriteTo(w)
return err
diff --git a/vendor/github.com/buger/goterm/LICENSE b/vendor/github.com/buger/goterm/LICENSE
new file mode 100644
index 000000000..ac25aeb7d
--- /dev/null
+++ b/vendor/github.com/buger/goterm/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Leonid Bugaev
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/github.com/buger/goterm/README.md b/vendor/github.com/buger/goterm/README.md
index 536b7b885..fc74e2105 100644
--- a/vendor/github.com/buger/goterm/README.md
+++ b/vendor/github.com/buger/goterm/README.md
@@ -93,13 +93,13 @@ Chart example:
chart := tm.NewLineChart(100, 20)
data := new(tm.DataTable)
- data.addColumn("Time")
- data.addColumn("Sin(x)")
- data.addColumn("Cos(x+1)")
+ data.AddColumn("Time")
+ data.AddColumn("Sin(x)")
+ data.AddColumn("Cos(x+1)")
for i := 0.1; i < 10; i += 0.1 {
- data.addRow(i, math.Sin(i), math.Cos(i+1))
- }
+ data.AddRow(i, math.Sin(i), math.Cos(i+1))
+ }
tm.Println(chart.Draw(data))
```
diff --git a/vendor/github.com/buger/goterm/plot.go b/vendor/github.com/buger/goterm/plot.go
index 77b9fb097..120147623 100644
--- a/vendor/github.com/buger/goterm/plot.go
+++ b/vendor/github.com/buger/goterm/plot.go
@@ -242,10 +242,10 @@ func (c *LineChart) DrawLine(x0, y0, x1, y1 int, symbol string) {
}
func getBoundaryValues(data *DataTable, index int) (maxX, minX, maxY, minY float64) {
- maxX = data.rows[0][0]
- minX = data.rows[0][0]
- maxY = data.rows[0][1]
- minY = data.rows[0][1]
+ maxX = math.Inf(-1)
+ minX = math.Inf(1)
+ maxY = math.Inf(-1)
+ minY = math.Inf(1)
for _, r := range data.rows {
maxX = math.Max(maxX, r[0])
diff --git a/vendor/github.com/buger/goterm/terminal.go b/vendor/github.com/buger/goterm/terminal.go
index 6b45c78bc..7c4dfa70f 100644
--- a/vendor/github.com/buger/goterm/terminal.go
+++ b/vendor/github.com/buger/goterm/terminal.go
@@ -27,7 +27,7 @@ const RESET = "\033[0m"
// Reset to default color
const RESET_COLOR = "\033[32m"
-// Return curor to start of line and clean it
+// Return cursor to start of line and clean it
const RESET_LINE = "\r\033[K"
// List of possible colors
@@ -68,10 +68,10 @@ type winsize struct {
}
// Global screen buffer
-// Its not recommented write to buffer dirrectly, use package Print,Printf,Println fucntions instead.
+// Its not recommended write to buffer dirrectly, use package Print,Printf,Println fucntions instead.
var Screen *bytes.Buffer = new(bytes.Buffer)
-// Get relative or absolute coorditantes
+// Get relative or absolute coordinates
// To get relative, set PCT flag to number:
//
// // Get 10% of total width to `x` and 20 to y
@@ -113,7 +113,7 @@ func Clear() {
// Move cursor to given position
func MoveCursor(x int, y int) {
- fmt.Fprintf(Screen, "\033[%d;%dH", x, y)
+ fmt.Fprintf(Screen, "\033[%d;%dH", y, x)
}
// Move cursor up relative the current position
@@ -148,7 +148,7 @@ func MoveTo(str string, x int, y int) (out string) {
// Return carrier to start of line
func ResetLine(str string) (out string) {
return applyTransform(str, func(idx int, line string) string {
- return fmt.Sprintf(RESET_LINE, line)
+ return fmt.Sprintf("%s%s", RESET_LINE, line)
})
}
@@ -215,12 +215,12 @@ func CurrentHeight() int {
// Flush buffer and ensure that it will not overflow screen
func Flush() {
- for idx, str := range strings.Split(Screen.String(), "\n") {
+ for idx, str := range strings.SplitAfter(Screen.String(), "\n") {
if idx > Height() {
return
}
- Output.WriteString(str + "\n")
+ Output.WriteString(str)
}
Output.Flush()
diff --git a/vendor/github.com/buger/goterm/terminal_sysioctl.go b/vendor/github.com/buger/goterm/terminal_sysioctl.go
index e98430fb9..5a61cd52b 100644
--- a/vendor/github.com/buger/goterm/terminal_sysioctl.go
+++ b/vendor/github.com/buger/goterm/terminal_sysioctl.go
@@ -3,34 +3,16 @@
package goterm
import (
- "fmt"
"os"
- "runtime"
- "syscall"
- "unsafe"
+ "golang.org/x/sys/unix"
)
-func getWinsize() (*winsize, error) {
- ws := new(winsize)
+func getWinsize() (*unix.Winsize, error) {
- var _TIOCGWINSZ int64
-
- switch runtime.GOOS {
- case "linux":
- _TIOCGWINSZ = 0x5413
- case "darwin":
- _TIOCGWINSZ = 1074295912
+ ws, err := unix.IoctlGetWinsize(int(os.Stdout.Fd()), unix.TIOCGWINSZ)
+ if err != nil {
+ return nil, os.NewSyscallError("GetWinsize", err)
}
- r1, _, errno := syscall.Syscall(syscall.SYS_IOCTL,
- uintptr(syscall.Stdin),
- uintptr(_TIOCGWINSZ),
- uintptr(unsafe.Pointer(ws)),
- )
-
- if int(r1) == -1 {
- fmt.Println("Error:", os.NewSyscallError("GetWinsize", errno))
- return nil, os.NewSyscallError("GetWinsize", errno)
- }
return ws, nil
}
diff --git a/vendor/github.com/checkpoint-restore/go-criu/README.md b/vendor/github.com/checkpoint-restore/go-criu/README.md
index a79b4d7fb..610756dbd 100644
--- a/vendor/github.com/checkpoint-restore/go-criu/README.md
+++ b/vendor/github.com/checkpoint-restore/go-criu/README.md
@@ -21,7 +21,38 @@ or to just check if at least a certain CRIU version is installed:
result, err := c.IsCriuAtLeast(31100)
```
+## How to contribute
+
+While bug fixes can first be identified via an "issue", that is not required.
+It's ok to just open up a PR with the fix, but make sure you include the same
+information you would have included in an issue - like how to reproduce it.
+
+PRs for new features should include some background on what use cases the
+new code is trying to address. When possible and when it makes sense, try to
+break-up larger PRs into smaller ones - it's easier to review smaller
+code changes. But only if those smaller ones make sense as stand-alone PRs.
+
+Regardless of the type of PR, all PRs should include:
+* well documented code changes
+* additional testcases. Ideally, they should fail w/o your code change applied
+* documentation changes
+
+Squash your commits into logical pieces of work that might want to be reviewed
+separate from the rest of the PRs. Ideally, each commit should implement a
+single idea, and the PR branch should pass the tests at every commit. GitHub
+makes it easy to review the cumulative effect of many commits; so, when in
+doubt, use smaller commits.
+
+PRs that fix issues should include a reference like `Closes #XXXX` in the
+commit message so that github will automatically close the referenced issue
+when the PR is merged.
+
+Contributors must assert that they are in compliance with the [Developer
+Certificate of Origin 1.1](http://developercertificate.org/). This is achieved
+by adding a "Signed-off-by" line containing the contributor's name and e-mail
+to every commit message. Your signature certifies that you wrote the patch or
+otherwise have the right to pass it on as an open-source patch.
+
### License
The license of go-criu is the Apache 2.0 license.
-
diff --git a/vendor/github.com/checkpoint-restore/go-criu/rpc/rpc.pb.go b/vendor/github.com/checkpoint-restore/go-criu/rpc/rpc.pb.go
index e9d1f8047..230faace5 100644
--- a/vendor/github.com/checkpoint-restore/go-criu/rpc/rpc.pb.go
+++ b/vendor/github.com/checkpoint-restore/go-criu/rpc/rpc.pb.go
@@ -1,12 +1,11 @@
-// Code generated by protoc-gen-go.
-// source: rpc.proto
-// DO NOT EDIT!
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: rpc/rpc.proto
/*
Package rpc is a generated protocol buffer package.
It is generated from these files:
- rpc.proto
+ rpc/rpc.proto
It has these top-level messages:
CriuPageServerInfo
@@ -399,6 +398,7 @@ type CriuOpts struct {
LazyPages *bool `protobuf:"varint,48,opt,name=lazy_pages,json=lazyPages" json:"lazy_pages,omitempty"`
StatusFd *int32 `protobuf:"varint,49,opt,name=status_fd,json=statusFd" json:"status_fd,omitempty"`
OrphanPtsMaster *bool `protobuf:"varint,50,opt,name=orphan_pts_master,json=orphanPtsMaster" json:"orphan_pts_master,omitempty"`
+ ConfigFile *string `protobuf:"bytes,51,opt,name=config_file,json=configFile" json:"config_file,omitempty"`
XXX_unrecognized []byte `json:"-"`
}
@@ -754,6 +754,13 @@ func (m *CriuOpts) GetOrphanPtsMaster() bool {
return false
}
+func (m *CriuOpts) GetConfigFile() string {
+ if m != nil && m.ConfigFile != nil {
+ return *m.ConfigFile
+ }
+ return ""
+}
+
type CriuDumpResp struct {
Restored *bool `protobuf:"varint,1,opt,name=restored" json:"restored,omitempty"`
XXX_unrecognized []byte `json:"-"`
@@ -1082,122 +1089,123 @@ func init() {
proto.RegisterEnum("CriuReqType", CriuReqType_name, CriuReqType_value)
}
-func init() { proto.RegisterFile("rpc.proto", fileDescriptor0) }
+func init() { proto.RegisterFile("rpc/rpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
- // 1816 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x5b, 0x73, 0x5b, 0xb7,
- 0x11, 0x0e, 0x29, 0xf1, 0x06, 0x5e, 0x7c, 0x8c, 0xd8, 0x0e, 0x1c, 0xd7, 0x36, 0x43, 0xc7, 0x89,
- 0xaa, 0xb8, 0x6c, 0xc2, 0xda, 0x71, 0x9d, 0x69, 0x1f, 0x3c, 0x14, 0xe9, 0xb0, 0x91, 0x44, 0x0e,
- 0x48, 0xb9, 0x93, 0x27, 0xcc, 0xd1, 0x39, 0x20, 0x05, 0xf3, 0xdc, 0x0a, 0x80, 0x8a, 0xe4, 0x3f,
- 0xd1, 0xb7, 0xfe, 0xac, 0x4e, 0x7e, 0x52, 0x67, 0x17, 0xa0, 0x2c, 0x25, 0x99, 0x49, 0xdf, 0xb0,
- 0x1f, 0x76, 0x81, 0xbd, 0xef, 0x92, 0x86, 0x2e, 0xa2, 0x7e, 0xa1, 0x73, 0x9b, 0xf7, 0x56, 0xe4,
- 0x6e, 0xa4, 0xd5, 0x46, 0x14, 0xe1, 0x4a, 0x0a, 0x23, 0xf5, 0xb9, 0xd4, 0x42, 0x65, 0xcb, 0x9c,
- 0x32, 0x52, 0x0b, 0xe3, 0x58, 0x4b, 0x63, 0x58, 0xa9, 0x5b, 0xda, 0x6b, 0xf0, 0x2d, 0x49, 0x29,
- 0xd9, 0x2d, 0x72, 0x6d, 0x59, 0xb9, 0x5b, 0xda, 0xab, 0x70, 0x3c, 0xd3, 0x80, 0xec, 0x14, 0x2a,
- 0x66, 0x3b, 0x08, 0xc1, 0x91, 0x76, 0x48, 0x79, 0x19, 0xb3, 0x5d, 0x04, 0xca, 0xcb, 0xb8, 0xf7,
- 0x37, 0xd2, 0xc1, 0x8f, 0xce, 0xa5, 0x3d, 0x13, 0x45, 0xa8, 0x34, 0xfd, 0x98, 0x54, 0xd4, 0x52,
- 0xa8, 0x8c, 0x95, 0xba, 0xe5, 0xbd, 0x06, 0xdf, 0x55, 0xcb, 0x49, 0x46, 0xef, 0x92, 0xaa, 0x5a,
- 0x8a, 0x7c, 0x03, 0xcf, 0x03, 0x5a, 0x51, 0xcb, 0xe9, 0xc6, 0xf6, 0xfe, 0x42, 0xda, 0xf2, 0xc2,
- 0x8a, 0x34, 0xdf, 0x64, 0x56, 0xa4, 0x61, 0x01, 0x1f, 0xae, 0xe5, 0xa5, 0x17, 0x85, 0x23, 0x20,
- 0xe7, 0x61, 0xe2, 0xc5, 0xe0, 0xd8, 0x7b, 0x4b, 0x3a, 0xef, 0x72, 0x95, 0x89, 0x2c, 0x4c, 0xa5,
- 0x29, 0xc2, 0x48, 0x82, 0x52, 0x99, 0xf1, 0x42, 0xe5, 0xcc, 0xd0, 0x4f, 0x48, 0x2d, 0x33, 0x62,
- 0xa9, 0x12, 0xe9, 0xe5, 0xaa, 0x99, 0x19, 0xab, 0x44, 0xd2, 0x07, 0xa4, 0x21, 0x2f, 0xac, 0x0e,
- 0x45, 0x5e, 0x58, 0xb4, 0xaa, 0xc1, 0xeb, 0x08, 0x4c, 0x0b, 0xdb, 0xeb, 0x13, 0xa2, 0xb2, 0x33,
- 0xa9, 0x95, 0x15, 0xcb, 0xf8, 0x37, 0x34, 0x71, 0xa6, 0xc3, 0x83, 0xce, 0xf4, 0x17, 0xa4, 0x19,
- 0xad, 0x74, 0xbe, 0x29, 0x84, 0xce, 0x73, 0x0b, 0xfe, 0x8b, 0xac, 0x4e, 0xbc, 0x5b, 0xf1, 0x8c,
- 0x3e, 0x0d, 0xed, 0x99, 0xd7, 0x02, 0xcf, 0xbd, 0xc7, 0xa4, 0xb6, 0xc9, 0xd4, 0x85, 0x30, 0x6b,
- 0x7a, 0x87, 0x54, 0x54, 0x96, 0xc7, 0x12, 0x7f, 0x69, 0x73, 0x47, 0xf4, 0xfe, 0xdb, 0x26, 0x0d,
- 0xf4, 0x69, 0x5e, 0x58, 0x43, 0x7b, 0xa4, 0xad, 0xd2, 0x70, 0x25, 0x8d, 0x88, 0x95, 0x16, 0xcb,
- 0x18, 0x79, 0x2b, 0xbc, 0xe9, 0xc0, 0x03, 0xa5, 0xc7, 0xf1, 0x36, 0x4c, 0xe5, 0x0f, 0x61, 0x7a,
- 0x42, 0xda, 0x89, 0x0c, 0xcf, 0xa5, 0xd0, 0x9b, 0x2c, 0x53, 0xd9, 0x0a, 0x8d, 0xad, 0xf3, 0x16,
- 0x82, 0xdc, 0x61, 0xf4, 0x11, 0x69, 0x82, 0xf7, 0xbd, 0x36, 0x18, 0xd4, 0x3a, 0x07, 0x07, 0x9d,
- 0x64, 0xea, 0x62, 0xbe, 0xa6, 0x5f, 0x92, 0x5b, 0x36, 0x2a, 0x84, 0x34, 0x36, 0x3c, 0x4d, 0x94,
- 0x39, 0x93, 0x31, 0xab, 0x20, 0x4f, 0xc7, 0x46, 0xc5, 0xe8, 0x03, 0x0a, 0x8c, 0xf2, 0x3c, 0x34,
- 0xea, 0x5c, 0x8a, 0x58, 0x9e, 0xab, 0x48, 0x1a, 0x56, 0x75, 0x8c, 0x1e, 0x3e, 0x70, 0x28, 0xf8,
- 0xdf, 0x9c, 0xc9, 0x24, 0x11, 0xef, 0xf2, 0x53, 0x56, 0x43, 0x96, 0x3a, 0x02, 0xff, 0xc8, 0x4f,
- 0xe9, 0x43, 0x42, 0x20, 0x64, 0x22, 0xc9, 0xa3, 0xb5, 0x61, 0x75, 0xa7, 0x0d, 0x20, 0x87, 0x00,
- 0xd0, 0x47, 0xa4, 0x91, 0xe4, 0x2b, 0x91, 0xc8, 0x73, 0x99, 0xb0, 0x06, 0x98, 0xfa, 0x5d, 0x69,
- 0xc0, 0xeb, 0x49, 0xbe, 0x3a, 0x04, 0x88, 0xde, 0x27, 0x70, 0x76, 0x51, 0x27, 0x2e, 0xb5, 0x93,
- 0x7c, 0x85, 0x61, 0xff, 0x82, 0x94, 0x0b, 0xc3, 0x9a, 0xdd, 0xd2, 0x5e, 0x73, 0x70, 0xaf, 0xff,
- 0x9b, 0x85, 0xc1, 0xcb, 0x85, 0xa1, 0x4f, 0x49, 0x27, 0xcb, 0xad, 0x5a, 0x5e, 0x0a, 0x13, 0x69,
- 0x55, 0x58, 0xc3, 0x5a, 0xa8, 0x45, 0xdb, 0xa1, 0x73, 0x07, 0x42, 0x54, 0x21, 0xe2, 0xac, 0xed,
- 0x22, 0x8d, 0xd1, 0x7f, 0x48, 0x48, 0x11, 0x6a, 0x99, 0x59, 0xa1, 0xd2, 0x15, 0xeb, 0xe0, 0x4d,
- 0xc3, 0x21, 0x93, 0x74, 0x05, 0x86, 0x5b, 0x1d, 0x46, 0x6b, 0x91, 0xca, 0x94, 0xdd, 0x72, 0x86,
- 0x23, 0x70, 0x24, 0x53, 0x90, 0x0d, 0x37, 0x36, 0x17, 0xb1, 0x8c, 0x37, 0x05, 0x0b, 0x9c, 0xe1,
- 0x80, 0x1c, 0x00, 0x00, 0x61, 0xfa, 0x29, 0xd7, 0xeb, 0x6d, 0xfc, 0x6f, 0x63, 0x94, 0x1b, 0x00,
- 0xb9, 0xe8, 0x3f, 0x24, 0x24, 0x51, 0xd9, 0x5a, 0x68, 0x99, 0x86, 0x05, 0xa3, 0x4e, 0x1c, 0x10,
- 0x0e, 0x00, 0x7d, 0x4a, 0x2a, 0x50, 0x9c, 0x86, 0x7d, 0xdc, 0xdd, 0xd9, 0x6b, 0x0e, 0x6e, 0xf5,
- 0x6f, 0xd6, 0x2b, 0x77, 0xb7, 0xf4, 0x09, 0xa9, 0x45, 0xc5, 0x46, 0x44, 0x61, 0xc1, 0xee, 0x74,
- 0x4b, 0x7b, 0xed, 0xef, 0xc8, 0xf3, 0xc1, 0xab, 0xe7, 0xaf, 0xbe, 0x7d, 0x39, 0x78, 0xf5, 0x82,
- 0x57, 0xa3, 0x62, 0x33, 0x0c, 0x0b, 0xfa, 0x98, 0x34, 0x97, 0xb9, 0x8e, 0xa4, 0x50, 0x1a, 0xfe,
- 0xba, 0x8b, 0x7f, 0x11, 0x84, 0x26, 0x80, 0x40, 0x10, 0xe4, 0x85, 0x8c, 0x44, 0x94, 0xc6, 0xec,
- 0x5e, 0x77, 0x07, 0x82, 0x00, 0xf4, 0x30, 0x85, 0x24, 0xa9, 0x61, 0xad, 0x67, 0x96, 0x7d, 0x82,
- 0x9a, 0x74, 0xfa, 0x37, 0x6a, 0x9f, 0x57, 0xe5, 0x85, 0x3d, 0xca, 0x2c, 0x44, 0x21, 0x0d, 0x33,
- 0x88, 0x8f, 0x2b, 0x2f, 0xc3, 0x98, 0x8b, 0x82, 0x43, 0x87, 0x0e, 0xa4, 0x4f, 0x49, 0x2d, 0x5a,
- 0x61, 0xe9, 0xb1, 0xfb, 0xf8, 0x5e, 0xab, 0x7f, 0xad, 0x1c, 0x79, 0x35, 0x5a, 0x71, 0x08, 0xcc,
- 0x63, 0xd2, 0xd4, 0xc6, 0x0a, 0xa3, 0x4e, 0x13, 0xa8, 0x83, 0x4f, 0x9d, 0xca, 0xda, 0xd8, 0xb9,
- 0x43, 0xe8, 0xfe, 0xf5, 0xb2, 0x67, 0x0f, 0xf0, 0xa9, 0x66, 0xff, 0x03, 0xc4, 0x1b, 0xfe, 0x3c,
- 0x8e, 0x69, 0x97, 0xb4, 0x30, 0x52, 0x5b, 0x43, 0xfe, 0xe0, 0x5e, 0x03, 0x6c, 0xe4, 0x94, 0x7f,
- 0xec, 0x6a, 0xca, 0x9c, 0x85, 0x1a, 0xbe, 0x7b, 0xe8, 0x18, 0xe4, 0x85, 0x9d, 0x3b, 0x64, 0xcb,
- 0x90, 0x86, 0xc6, 0x4a, 0x6d, 0xd8, 0xa3, 0x2b, 0x86, 0x23, 0x87, 0x80, 0x0b, 0xcd, 0x5a, 0x15,
- 0xf8, 0xfe, 0x63, 0xe7, 0x42, 0xa0, 0xe1, 0x71, 0x68, 0x5f, 0x59, 0x78, 0x9a, 0x48, 0xb1, 0x34,
- 0xac, 0x8b, 0x77, 0x75, 0x07, 0x8c, 0x0d, 0xdd, 0x23, 0x4d, 0x5f, 0xc9, 0x42, 0x65, 0x39, 0xfb,
- 0x0c, 0x0d, 0xa9, 0xf7, 0x3d, 0xc6, 0x1b, 0x1b, 0x2c, 0xea, 0x49, 0x96, 0xd3, 0xbf, 0x93, 0x8f,
- 0x6f, 0x3a, 0x58, 0xa4, 0xd0, 0x84, 0x7a, 0xdd, 0xd2, 0x5e, 0x67, 0xd0, 0x76, 0xf9, 0x11, 0xad,
- 0x10, 0xe4, 0xb7, 0x6f, 0x38, 0xfd, 0x28, 0x8f, 0x25, 0x7c, 0xb4, 0x3a, 0xcb, 0x8d, 0x15, 0x89,
- 0x4a, 0x95, 0x65, 0x4f, 0x30, 0x5b, 0x6a, 0xdf, 0x7c, 0xfd, 0xfc, 0xaf, 0x2f, 0x5e, 0x7e, 0xcb,
- 0x09, 0xde, 0x1d, 0xc2, 0x15, 0xdd, 0x23, 0x01, 0x26, 0x8a, 0x30, 0x51, 0x98, 0x09, 0xe8, 0x7e,
- 0x86, 0x7d, 0x8e, 0x6a, 0x77, 0x10, 0x9f, 0x47, 0x61, 0x36, 0x03, 0x94, 0x7e, 0x0a, 0x79, 0x63,
- 0xa5, 0xce, 0xc2, 0x84, 0x3d, 0xf5, 0x86, 0x79, 0x1a, 0x73, 0x2a, 0x2d, 0xec, 0xa5, 0xc8, 0x0c,
- 0xfb, 0x02, 0x3e, 0xe3, 0x35, 0xa4, 0x8f, 0xc1, 0xe6, 0x9a, 0x1b, 0x05, 0x86, 0x7d, 0xe9, 0xb3,
- 0xfb, 0xe6, 0x68, 0xe0, 0x55, 0xa0, 0x8f, 0x0d, 0xfd, 0x8c, 0xb4, 0x7c, 0x76, 0x14, 0x3a, 0x2f,
- 0x0c, 0xfb, 0x23, 0x56, 0xa8, 0x6f, 0xe0, 0x33, 0x80, 0xe8, 0x3e, 0xb9, 0x7d, 0x9d, 0xc5, 0x75,
- 0x92, 0x7d, 0xe4, 0xbb, 0x75, 0x8d, 0x0f, 0x3b, 0xca, 0x73, 0x72, 0xcf, 0xf3, 0xc6, 0x9b, 0xb4,
- 0x10, 0x51, 0x9e, 0x59, 0x9d, 0x27, 0x89, 0xd4, 0xec, 0x2b, 0xd4, 0xfe, 0x8e, 0xbb, 0x3d, 0xd8,
- 0xa4, 0xc5, 0xf0, 0xea, 0x0e, 0xba, 0xf2, 0x52, 0x4b, 0xf9, 0x7e, 0xeb, 0x78, 0xf6, 0x0c, 0x5f,
- 0x6f, 0x39, 0xd0, 0xf9, 0x18, 0x26, 0xb4, 0x55, 0xa9, 0x84, 0x59, 0xf9, 0x27, 0x67, 0xad, 0x27,
- 0xe9, 0x57, 0x84, 0x42, 0x3f, 0xc6, 0xec, 0x50, 0x99, 0x58, 0x26, 0x6a, 0x75, 0x66, 0x59, 0x1f,
- 0x33, 0x08, 0x3a, 0xf5, 0x7c, 0xad, 0x8a, 0x49, 0x36, 0x46, 0x18, 0x0c, 0xfe, 0x49, 0x86, 0x6b,
- 0x61, 0x2e, 0x4d, 0x64, 0x13, 0xc3, 0xfe, 0x8c, 0x6c, 0x4d, 0xc0, 0xe6, 0x0e, 0xc2, 0xc6, 0x11,
- 0xbe, 0xbf, 0xc4, 0x5e, 0x68, 0xd8, 0xd7, 0xbe, 0x71, 0x84, 0xef, 0x2f, 0x67, 0x00, 0x60, 0xb3,
- 0xb6, 0xa1, 0xdd, 0x18, 0xa8, 0x8b, 0x6f, 0xb0, 0xeb, 0xd4, 0x1d, 0x30, 0x8e, 0xc1, 0x59, 0xb9,
- 0x2e, 0xce, 0x20, 0xac, 0xd6, 0xf8, 0x6c, 0x66, 0x03, 0xa7, 0x8a, 0xbb, 0x98, 0x59, 0xe3, 0x52,
- 0xba, 0xf7, 0xcc, 0xef, 0x08, 0xe8, 0x2a, 0x2d, 0x4d, 0x01, 0xe1, 0xd6, 0xd2, 0xd8, 0x5c, 0xcb,
- 0x18, 0xe7, 0x65, 0x9d, 0x5f, 0xd1, 0xbd, 0xa7, 0xe4, 0x36, 0x72, 0x7b, 0xc0, 0x09, 0xf8, 0x09,
- 0xe7, 0x66, 0x1f, 0x1c, 0x7b, 0x2f, 0x49, 0x13, 0xd9, 0x5c, 0x6b, 0xa6, 0xf7, 0x48, 0xd5, 0xf5,
- 0x6c, 0x3f, 0x7f, 0x3d, 0xf5, 0xeb, 0xd1, 0xd8, 0xfb, 0x81, 0xb4, 0x51, 0x70, 0x29, 0x43, 0xbb,
- 0xd1, 0xce, 0xce, 0x54, 0xa6, 0x02, 0xdb, 0xf1, 0x56, 0x9b, 0x54, 0xa6, 0x0b, 0xa0, 0x7f, 0xe1,
- 0xa3, 0xf2, 0x2f, 0x7c, 0xd4, 0xfb, 0xb9, 0x44, 0xea, 0x5e, 0xdb, 0x7f, 0xd1, 0x1e, 0xd9, 0xb5,
- 0x97, 0x85, 0x9b, 0xe6, 0x9d, 0x41, 0xa7, 0xbf, 0xbd, 0x10, 0x80, 0x72, 0xbc, 0xa3, 0x8f, 0xc8,
- 0x2e, 0x8c, 0x75, 0x7c, 0xa9, 0x39, 0x20, 0xfd, 0xab, 0x41, 0xcf, 0x11, 0xbf, 0x3e, 0x82, 0x36,
- 0x51, 0x04, 0x6b, 0xda, 0xce, 0x8d, 0x11, 0xe4, 0x40, 0xd0, 0x79, 0x2d, 0x65, 0x21, 0xf2, 0x42,
- 0x66, 0x7e, 0x70, 0xd7, 0x01, 0x98, 0x16, 0x32, 0xa3, 0xfb, 0xa4, 0xbe, 0x35, 0x0e, 0x07, 0x76,
- 0x73, 0xab, 0xcb, 0x16, 0xe5, 0x57, 0xf7, 0x5b, 0xff, 0x54, 0x31, 0xd3, 0xd0, 0x3f, 0xff, 0xde,
- 0xf1, 0xeb, 0x07, 0x3a, 0xfe, 0xff, 0xb1, 0x89, 0x91, 0xda, 0x56, 0x59, 0x58, 0x74, 0xea, 0x7c,
- 0x4b, 0xd2, 0x27, 0x64, 0x17, 0x82, 0x8e, 0x36, 0x5c, 0x8d, 0x9e, 0xab, 0x34, 0xe0, 0x78, 0x49,
- 0x9f, 0x91, 0x9a, 0x8f, 0x35, 0x5a, 0xd2, 0x1c, 0xd0, 0xfe, 0xaf, 0x12, 0x80, 0x6f, 0x59, 0xe8,
- 0xe7, 0xa4, 0xea, 0x5c, 0xe1, 0x4d, 0x6b, 0xf5, 0xaf, 0xa5, 0x01, 0xf7, 0x77, 0x7e, 0xe2, 0x57,
- 0x7f, 0x77, 0xe2, 0xdf, 0x87, 0xf0, 0x09, 0xa9, 0x75, 0x96, 0xe3, 0x3e, 0x52, 0xe1, 0xb5, 0x48,
- 0x8f, 0x80, 0xbc, 0xe1, 0xc5, 0xfa, 0xef, 0x78, 0xf1, 0x01, 0xb8, 0x0c, 0x9e, 0x49, 0xcd, 0x0a,
- 0x77, 0x93, 0x06, 0xaf, 0xe3, 0x3b, 0xa9, 0x59, 0xc1, 0xe0, 0x3b, 0x97, 0xda, 0xa8, 0x3c, 0xc3,
- 0xbd, 0xa4, 0xb9, 0x6d, 0xb1, 0x1e, 0xe4, 0xdb, 0x5b, 0xcc, 0x61, 0xac, 0x2f, 0x5c, 0x55, 0x2a,
- 0xdc, 0x53, 0xbd, 0xff, 0x94, 0x48, 0xeb, 0xba, 0x04, 0xec, 0x8d, 0x69, 0xf8, 0x2e, 0xd7, 0xbe,
- 0x1e, 0x1c, 0x81, 0xa8, 0xca, 0x72, 0xed, 0x57, 0x54, 0x47, 0x00, 0xba, 0x52, 0xd6, 0x2f, 0xf1,
- 0x0d, 0xee, 0x08, 0x28, 0x40, 0xb3, 0x39, 0x75, 0xbb, 0xd4, 0xae, 0x2f, 0x6d, 0x4f, 0x83, 0x04,
- 0xee, 0xc4, 0xe8, 0xe0, 0x0a, 0x77, 0x04, 0x2c, 0x3d, 0xd0, 0x55, 0xd1, 0xa7, 0x0d, 0x8e, 0xe7,
- 0x7d, 0xe1, 0xf5, 0xf2, 0xc3, 0x82, 0x12, 0x52, 0x9d, 0xbc, 0x39, 0x9e, 0xf2, 0x51, 0xf0, 0x11,
- 0x6d, 0x92, 0xda, 0xf0, 0x8d, 0x38, 0x9e, 0x1e, 0x8f, 0x82, 0x12, 0x6d, 0x90, 0xca, 0x8c, 0x4f,
- 0x67, 0xf3, 0xa0, 0x4c, 0xeb, 0x64, 0x77, 0x3e, 0x1d, 0x2f, 0x82, 0x1d, 0x38, 0x8d, 0x4f, 0x0e,
- 0x0f, 0x83, 0x5d, 0x90, 0x9b, 0x2f, 0xf8, 0x64, 0xb8, 0x08, 0x2a, 0x20, 0x77, 0x30, 0x1a, 0xbf,
- 0x3e, 0x39, 0x5c, 0x04, 0xd5, 0xfd, 0x9f, 0x4b, 0xbe, 0x58, 0xb7, 0x19, 0x07, 0x2f, 0x8d, 0x8e,
- 0x66, 0x8b, 0x1f, 0x83, 0x8f, 0x40, 0xfe, 0xe0, 0xe4, 0x68, 0x16, 0x94, 0x40, 0x86, 0x8f, 0xe6,
- 0x0b, 0xf8, 0xb8, 0x0c, 0x1c, 0xc3, 0xef, 0x47, 0xc3, 0x1f, 0x82, 0x1d, 0xda, 0x22, 0xf5, 0x19,
- 0x1f, 0x09, 0xe4, 0xda, 0xa5, 0xb7, 0x48, 0x73, 0xf6, 0xfa, 0xcd, 0x48, 0xcc, 0x47, 0xfc, 0xed,
- 0x88, 0x07, 0x15, 0xf8, 0xf6, 0x78, 0xba, 0x98, 0x8c, 0x7f, 0x0c, 0xaa, 0x34, 0x20, 0xad, 0xe1,
- 0xec, 0x64, 0x72, 0x3c, 0x9e, 0x3a, 0xf6, 0x1a, 0xbd, 0x4d, 0xda, 0x5b, 0xc4, 0xbd, 0x57, 0x07,
- 0x68, 0x3c, 0x7a, 0xbd, 0x38, 0xe1, 0x23, 0x0f, 0x35, 0xe0, 0xeb, 0xb7, 0x23, 0x3e, 0x9f, 0x4c,
- 0x8f, 0x03, 0x02, 0xff, 0xfd, 0xf3, 0xf5, 0x64, 0x21, 0x66, 0x93, 0x83, 0xa0, 0x49, 0xef, 0x90,
- 0xe0, 0xda, 0x7f, 0x62, 0xf8, 0xfd, 0xe1, 0x41, 0xd0, 0xfa, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0x16, 0xc7, 0x59, 0xf5, 0xa5, 0x0d, 0x00, 0x00,
+ // 1835 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0xeb, 0x72, 0x5b, 0xb7,
+ 0x11, 0x0e, 0x29, 0xf1, 0x06, 0x5e, 0x7c, 0x0c, 0x5f, 0x02, 0xc7, 0xb5, 0xad, 0xd0, 0x51, 0xa2,
+ 0x2a, 0x2e, 0x93, 0x30, 0x76, 0x5c, 0x67, 0xda, 0x1f, 0x1e, 0x8a, 0x74, 0xd8, 0x48, 0x22, 0x07,
+ 0xa4, 0xdc, 0xc9, 0x2f, 0xcc, 0xd1, 0x39, 0x20, 0x05, 0xf3, 0xdc, 0x0a, 0x80, 0x8a, 0xe4, 0x97,
+ 0xe8, 0xbf, 0x3e, 0x57, 0xde, 0xa4, 0xaf, 0xd0, 0xd9, 0x05, 0x28, 0x4b, 0x49, 0x66, 0xd2, 0x7f,
+ 0xd8, 0x0f, 0xbb, 0xc0, 0xde, 0x77, 0x49, 0x5b, 0x17, 0xd1, 0x57, 0xba, 0x88, 0x7a, 0x85, 0xce,
+ 0x6d, 0xde, 0x5d, 0x92, 0x7b, 0x91, 0x56, 0x6b, 0x51, 0x84, 0x4b, 0x29, 0x8c, 0xd4, 0xe7, 0x52,
+ 0x0b, 0x95, 0x2d, 0x72, 0xca, 0x48, 0x2d, 0x8c, 0x63, 0x2d, 0x8d, 0x61, 0xa5, 0x9d, 0xd2, 0x5e,
+ 0x83, 0x6f, 0x48, 0x4a, 0xc9, 0x76, 0x91, 0x6b, 0xcb, 0xca, 0x3b, 0xa5, 0xbd, 0x0a, 0xc7, 0x33,
+ 0x0d, 0xc8, 0x56, 0xa1, 0x62, 0xb6, 0x85, 0x10, 0x1c, 0x69, 0x87, 0x94, 0x17, 0x31, 0xdb, 0x46,
+ 0xa0, 0xbc, 0x88, 0xbb, 0x7f, 0x23, 0x1d, 0xfc, 0xe8, 0x5c, 0xda, 0x33, 0x51, 0x84, 0x4a, 0xd3,
+ 0x3b, 0xa4, 0xa2, 0x16, 0x42, 0x65, 0xac, 0xb4, 0x53, 0xde, 0x6b, 0xf0, 0x6d, 0xb5, 0x18, 0x67,
+ 0xf4, 0x1e, 0xa9, 0xaa, 0x85, 0xc8, 0xd7, 0xf0, 0x3c, 0xa0, 0x15, 0xb5, 0x98, 0xac, 0x6d, 0xf7,
+ 0x5b, 0xd2, 0x96, 0x17, 0x56, 0xa4, 0xf9, 0x3a, 0xb3, 0x22, 0x0d, 0x0b, 0xf8, 0x70, 0x25, 0x2f,
+ 0xbd, 0x28, 0x1c, 0x01, 0x39, 0x0f, 0x13, 0x2f, 0x06, 0xc7, 0xee, 0x5b, 0xd2, 0x79, 0x97, 0xab,
+ 0x4c, 0x64, 0x61, 0x2a, 0x4d, 0x11, 0x46, 0x12, 0x94, 0xca, 0x8c, 0x17, 0x2a, 0x67, 0x86, 0x7e,
+ 0x4c, 0x6a, 0x99, 0x11, 0x0b, 0x95, 0x48, 0x2f, 0x57, 0xcd, 0xcc, 0x48, 0x25, 0x92, 0x3e, 0x24,
+ 0x0d, 0x79, 0x61, 0x75, 0x28, 0xf2, 0xc2, 0xa2, 0x55, 0x0d, 0x5e, 0x47, 0x60, 0x52, 0xd8, 0x6e,
+ 0x8f, 0x10, 0x95, 0x9d, 0x49, 0xad, 0xac, 0x58, 0xc4, 0xbf, 0xa3, 0x89, 0x33, 0x1d, 0x1e, 0x74,
+ 0xa6, 0xbf, 0x20, 0xcd, 0x68, 0xa9, 0xf3, 0x75, 0x21, 0x74, 0x9e, 0x5b, 0xf0, 0x5f, 0x64, 0x75,
+ 0xe2, 0xdd, 0x8a, 0x67, 0xf4, 0x69, 0x68, 0xcf, 0xbc, 0x16, 0x78, 0xee, 0x3e, 0x21, 0xb5, 0x75,
+ 0xa6, 0x2e, 0x84, 0x59, 0xd1, 0xbb, 0xa4, 0xa2, 0xb2, 0x3c, 0x96, 0xf8, 0x4b, 0x9b, 0x3b, 0xa2,
+ 0xfb, 0xdf, 0x36, 0x69, 0xa0, 0x4f, 0xf3, 0xc2, 0x1a, 0xda, 0x25, 0x6d, 0x95, 0x86, 0x4b, 0x69,
+ 0x44, 0xac, 0xb4, 0x58, 0xc4, 0xc8, 0x5b, 0xe1, 0x4d, 0x07, 0x1e, 0x28, 0x3d, 0x8a, 0x37, 0x61,
+ 0x2a, 0x7f, 0x08, 0xd3, 0x53, 0xd2, 0x4e, 0x64, 0x78, 0x2e, 0x85, 0x5e, 0x67, 0x99, 0xca, 0x96,
+ 0x68, 0x6c, 0x9d, 0xb7, 0x10, 0xe4, 0x0e, 0xa3, 0x8f, 0x49, 0x13, 0xbc, 0xef, 0xb5, 0xc1, 0xa0,
+ 0xd6, 0x39, 0x38, 0xe8, 0x24, 0x53, 0x17, 0xb3, 0x15, 0xfd, 0x82, 0xdc, 0xb2, 0x51, 0x21, 0xa4,
+ 0xb1, 0xe1, 0x69, 0xa2, 0xcc, 0x99, 0x8c, 0x59, 0x05, 0x79, 0x3a, 0x36, 0x2a, 0x86, 0x1f, 0x50,
+ 0x60, 0x94, 0xe7, 0xa1, 0x51, 0xe7, 0x52, 0xc4, 0xf2, 0x5c, 0x45, 0xd2, 0xb0, 0xaa, 0x63, 0xf4,
+ 0xf0, 0x81, 0x43, 0xc1, 0xff, 0xe6, 0x4c, 0x26, 0x89, 0x78, 0x97, 0x9f, 0xb2, 0x1a, 0xb2, 0xd4,
+ 0x11, 0xf8, 0x47, 0x7e, 0x4a, 0x1f, 0x11, 0x02, 0x21, 0x13, 0x49, 0x1e, 0xad, 0x0c, 0xab, 0x3b,
+ 0x6d, 0x00, 0x39, 0x04, 0x80, 0x3e, 0x26, 0x8d, 0x24, 0x5f, 0x8a, 0x44, 0x9e, 0xcb, 0x84, 0x35,
+ 0xc0, 0xd4, 0xef, 0x4b, 0x7d, 0x5e, 0x4f, 0xf2, 0xe5, 0x21, 0x40, 0xf4, 0x01, 0x81, 0xb3, 0x8b,
+ 0x3a, 0x71, 0xa9, 0x9d, 0xe4, 0x4b, 0x0c, 0xfb, 0xe7, 0xa4, 0x5c, 0x18, 0xd6, 0xdc, 0x29, 0xed,
+ 0x35, 0xfb, 0xf7, 0x7b, 0xbf, 0x5b, 0x18, 0xbc, 0x5c, 0x18, 0xba, 0x4b, 0x3a, 0x59, 0x6e, 0xd5,
+ 0xe2, 0x52, 0x98, 0x48, 0xab, 0xc2, 0x1a, 0xd6, 0x42, 0x2d, 0xda, 0x0e, 0x9d, 0x39, 0x10, 0xa2,
+ 0x0a, 0x11, 0x67, 0x6d, 0x17, 0x69, 0x8c, 0xfe, 0x23, 0x42, 0x8a, 0x50, 0xcb, 0xcc, 0x0a, 0x95,
+ 0x2e, 0x59, 0x07, 0x6f, 0x1a, 0x0e, 0x19, 0xa7, 0x4b, 0x30, 0xdc, 0xea, 0x30, 0x5a, 0x89, 0x54,
+ 0xa6, 0xec, 0x96, 0x33, 0x1c, 0x81, 0x23, 0x99, 0x82, 0x6c, 0xb8, 0xb6, 0xb9, 0x88, 0x65, 0xbc,
+ 0x2e, 0x58, 0xe0, 0x0c, 0x07, 0xe4, 0x00, 0x00, 0x08, 0xd3, 0xcf, 0xb9, 0x5e, 0x6d, 0xe2, 0x7f,
+ 0x1b, 0xa3, 0xdc, 0x00, 0xc8, 0x45, 0xff, 0x11, 0x21, 0x89, 0xca, 0x56, 0x42, 0xcb, 0x34, 0x2c,
+ 0x18, 0x75, 0xe2, 0x80, 0x70, 0x00, 0xe8, 0x2e, 0xa9, 0x40, 0x71, 0x1a, 0x76, 0x67, 0x67, 0x6b,
+ 0xaf, 0xd9, 0xbf, 0xd5, 0xbb, 0x59, 0xaf, 0xdc, 0xdd, 0xd2, 0xa7, 0xa4, 0x16, 0x15, 0x6b, 0x11,
+ 0x85, 0x05, 0xbb, 0xbb, 0x53, 0xda, 0x6b, 0x7f, 0x4f, 0x9e, 0xf7, 0x5f, 0x3d, 0x7f, 0xf5, 0xdd,
+ 0xcb, 0xfe, 0xab, 0x17, 0xbc, 0x1a, 0x15, 0xeb, 0x41, 0x58, 0xd0, 0x27, 0xa4, 0xb9, 0xc8, 0x75,
+ 0x24, 0x85, 0xd2, 0xf0, 0xd7, 0x3d, 0xfc, 0x8b, 0x20, 0x34, 0x06, 0x04, 0x82, 0x20, 0x2f, 0x64,
+ 0x24, 0xa2, 0x34, 0x66, 0xf7, 0x77, 0xb6, 0x20, 0x08, 0x40, 0x0f, 0x52, 0x48, 0x92, 0x1a, 0xd6,
+ 0x7a, 0x66, 0xd9, 0xc7, 0xa8, 0x49, 0xa7, 0x77, 0xa3, 0xf6, 0x79, 0x55, 0x5e, 0xd8, 0xa3, 0xcc,
+ 0x42, 0x14, 0xd2, 0x30, 0x83, 0xf8, 0xb8, 0xf2, 0x32, 0x8c, 0xb9, 0x28, 0x38, 0x74, 0xe0, 0x40,
+ 0xba, 0x4b, 0x6a, 0xd1, 0x12, 0x4b, 0x8f, 0x3d, 0xc0, 0xf7, 0x5a, 0xbd, 0x6b, 0xe5, 0xc8, 0xab,
+ 0xd1, 0x92, 0x43, 0x60, 0x9e, 0x90, 0xa6, 0x36, 0x56, 0x18, 0x75, 0x9a, 0x40, 0x1d, 0x7c, 0xe2,
+ 0x54, 0xd6, 0xc6, 0xce, 0x1c, 0x42, 0xf7, 0xaf, 0x97, 0x3d, 0x7b, 0x88, 0x4f, 0x35, 0x7b, 0x1f,
+ 0x20, 0xde, 0xf0, 0xe7, 0x51, 0x4c, 0x77, 0x48, 0x0b, 0x23, 0xb5, 0x31, 0xe4, 0x4f, 0xee, 0x35,
+ 0xc0, 0x86, 0x4e, 0xf9, 0x27, 0xae, 0xa6, 0xcc, 0x59, 0xa8, 0xe1, 0xbb, 0x47, 0x8e, 0x41, 0x5e,
+ 0xd8, 0x99, 0x43, 0x36, 0x0c, 0x69, 0x68, 0xac, 0xd4, 0x86, 0x3d, 0xbe, 0x62, 0x38, 0x72, 0x08,
+ 0xb8, 0xd0, 0xac, 0x54, 0x81, 0xef, 0x3f, 0x71, 0x2e, 0x04, 0x1a, 0x1e, 0x87, 0xf6, 0x95, 0x85,
+ 0xa7, 0x89, 0x14, 0x0b, 0xc3, 0x76, 0xf0, 0xae, 0xee, 0x80, 0x91, 0xa1, 0x7b, 0xa4, 0xe9, 0x2b,
+ 0x59, 0xa8, 0x2c, 0x67, 0x9f, 0xa2, 0x21, 0xf5, 0x9e, 0xc7, 0x78, 0x63, 0x8d, 0x45, 0x3d, 0xce,
+ 0x72, 0xfa, 0x77, 0x72, 0xe7, 0xa6, 0x83, 0x45, 0x0a, 0x4d, 0xa8, 0xbb, 0x53, 0xda, 0xeb, 0xf4,
+ 0xdb, 0x2e, 0x3f, 0xa2, 0x25, 0x82, 0xfc, 0xf6, 0x0d, 0xa7, 0x1f, 0xe5, 0xb1, 0x84, 0x8f, 0x96,
+ 0x67, 0xb9, 0xb1, 0x22, 0x51, 0xa9, 0xb2, 0xec, 0x29, 0x66, 0x4b, 0xed, 0x9b, 0xaf, 0x9f, 0xff,
+ 0xf5, 0xc5, 0xcb, 0xef, 0x38, 0xc1, 0xbb, 0x43, 0xb8, 0xa2, 0x7b, 0x24, 0xc0, 0x44, 0x11, 0x26,
+ 0x0a, 0x33, 0x01, 0xdd, 0xcf, 0xb0, 0xcf, 0x50, 0xed, 0x0e, 0xe2, 0xb3, 0x28, 0xcc, 0xa6, 0x80,
+ 0xd2, 0x4f, 0x20, 0x6f, 0xac, 0xd4, 0x59, 0x98, 0xb0, 0x5d, 0x6f, 0x98, 0xa7, 0x31, 0xa7, 0xd2,
+ 0xc2, 0x5e, 0x8a, 0xcc, 0xb0, 0xcf, 0xe1, 0x33, 0x5e, 0x43, 0xfa, 0x18, 0x6c, 0xae, 0xb9, 0x51,
+ 0x60, 0xd8, 0x17, 0x3e, 0xbb, 0x6f, 0x8e, 0x06, 0x5e, 0x05, 0xfa, 0xd8, 0xd0, 0x4f, 0x49, 0xcb,
+ 0x67, 0x47, 0xa1, 0xf3, 0xc2, 0xb0, 0x3f, 0x63, 0x85, 0xfa, 0x06, 0x3e, 0x05, 0x88, 0xee, 0x93,
+ 0xdb, 0xd7, 0x59, 0x5c, 0x27, 0xd9, 0x47, 0xbe, 0x5b, 0xd7, 0xf8, 0xb0, 0xa3, 0x3c, 0x27, 0xf7,
+ 0x3d, 0x6f, 0xbc, 0x4e, 0x0b, 0x11, 0xe5, 0x99, 0xd5, 0x79, 0x92, 0x48, 0xcd, 0xbe, 0x44, 0xed,
+ 0xef, 0xba, 0xdb, 0x83, 0x75, 0x5a, 0x0c, 0xae, 0xee, 0xa0, 0x2b, 0x2f, 0xb4, 0x94, 0xef, 0x37,
+ 0x8e, 0x67, 0xcf, 0xf0, 0xf5, 0x96, 0x03, 0x9d, 0x8f, 0x61, 0x42, 0x5b, 0x95, 0x4a, 0x98, 0x95,
+ 0x7f, 0x71, 0xd6, 0x7a, 0x92, 0x7e, 0x49, 0x28, 0xf4, 0x63, 0xcc, 0x0e, 0x95, 0x89, 0x45, 0xa2,
+ 0x96, 0x67, 0x96, 0xf5, 0x30, 0x83, 0xa0, 0x53, 0xcf, 0x56, 0xaa, 0x18, 0x67, 0x23, 0x84, 0xc1,
+ 0xe0, 0x9f, 0x65, 0xb8, 0x12, 0xe6, 0xd2, 0x44, 0x36, 0x31, 0xec, 0x2b, 0x64, 0x6b, 0x02, 0x36,
+ 0x73, 0x10, 0x36, 0x8e, 0xf0, 0xfd, 0x25, 0xf6, 0x42, 0xc3, 0xbe, 0xf6, 0x8d, 0x23, 0x7c, 0x7f,
+ 0x39, 0x05, 0x00, 0x9b, 0xb5, 0x0d, 0xed, 0xda, 0x40, 0x5d, 0x7c, 0x83, 0x5d, 0xa7, 0xee, 0x80,
+ 0x51, 0x0c, 0xce, 0xca, 0x75, 0x71, 0x06, 0x61, 0xb5, 0xc6, 0x67, 0x33, 0xeb, 0x3b, 0x55, 0xdc,
+ 0xc5, 0xd4, 0x1a, 0x97, 0xd2, 0x90, 0xf2, 0x51, 0x9e, 0x2d, 0x94, 0x6f, 0xce, 0xdf, 0xa2, 0xd1,
+ 0xc4, 0x41, 0xe0, 0xcd, 0xee, 0x33, 0xbf, 0x44, 0xa0, 0x2f, 0xb5, 0x34, 0x05, 0xe4, 0x83, 0x96,
+ 0xc6, 0xe6, 0x5a, 0xc6, 0x38, 0x50, 0xeb, 0xfc, 0x8a, 0xee, 0xee, 0x92, 0xdb, 0xc8, 0xed, 0x01,
+ 0x27, 0xe0, 0x47, 0xa0, 0x1b, 0x8e, 0x70, 0xec, 0xbe, 0x24, 0x4d, 0x64, 0x73, 0xbd, 0x9b, 0xde,
+ 0x27, 0x55, 0xd7, 0xd4, 0xfd, 0x80, 0xf6, 0xd4, 0x6f, 0x67, 0x67, 0xf7, 0x47, 0xd2, 0x46, 0xc1,
+ 0x85, 0x0c, 0xed, 0x5a, 0x3b, 0x47, 0xa4, 0x32, 0x15, 0xd8, 0xaf, 0x37, 0xda, 0xa4, 0x32, 0x9d,
+ 0x03, 0xfd, 0x2b, 0x27, 0x96, 0x7f, 0xe5, 0xc4, 0xee, 0x2f, 0x25, 0x52, 0xf7, 0xda, 0xfe, 0x8b,
+ 0x76, 0xc9, 0xb6, 0xbd, 0x2c, 0xdc, 0xb8, 0xef, 0xf4, 0x3b, 0xbd, 0xcd, 0x85, 0x00, 0x94, 0xe3,
+ 0x1d, 0x7d, 0x4c, 0xb6, 0x61, 0xee, 0xe3, 0x4b, 0xcd, 0x3e, 0xe9, 0x5d, 0x6d, 0x02, 0x1c, 0xf1,
+ 0xeb, 0x33, 0x6a, 0x1d, 0x45, 0xb0, 0xc7, 0x6d, 0xdd, 0x98, 0x51, 0x0e, 0x04, 0x9d, 0x57, 0x52,
+ 0x16, 0x22, 0x2f, 0x64, 0xe6, 0x27, 0x7b, 0x1d, 0x80, 0x49, 0x21, 0x33, 0xba, 0x4f, 0xea, 0x1b,
+ 0xe3, 0x70, 0xa2, 0x37, 0x37, 0xba, 0x6c, 0x50, 0x7e, 0x75, 0xbf, 0xf1, 0x4f, 0x15, 0x53, 0x11,
+ 0xfd, 0xf3, 0xef, 0x2d, 0xbf, 0x9f, 0xa0, 0xe3, 0xff, 0x1f, 0x9b, 0x18, 0xa9, 0x6d, 0x94, 0x85,
+ 0x4d, 0xa8, 0xce, 0x37, 0x24, 0x7d, 0x4a, 0xb6, 0x21, 0xe8, 0x68, 0xc3, 0xd5, 0x6c, 0xba, 0x4a,
+ 0x03, 0x8e, 0x97, 0xf4, 0x19, 0xa9, 0xf9, 0x58, 0xa3, 0x25, 0xcd, 0x3e, 0xed, 0xfd, 0x26, 0x01,
+ 0xf8, 0x86, 0x85, 0x7e, 0x46, 0xaa, 0xce, 0x15, 0xde, 0xb4, 0x56, 0xef, 0x5a, 0x1a, 0x70, 0x7f,
+ 0xe7, 0x57, 0x82, 0xea, 0x1f, 0xae, 0x04, 0x0f, 0x20, 0x7c, 0x42, 0x6a, 0x9d, 0xe5, 0xb8, 0xb0,
+ 0x54, 0x78, 0x2d, 0xd2, 0x43, 0x20, 0x6f, 0x78, 0xb1, 0xfe, 0x07, 0x5e, 0x7c, 0x08, 0x2e, 0x83,
+ 0x67, 0x52, 0xb3, 0xc4, 0xe5, 0xa5, 0xc1, 0xeb, 0xf8, 0x4e, 0x6a, 0x96, 0x30, 0x19, 0xcf, 0xa5,
+ 0x36, 0x2a, 0xcf, 0x70, 0x71, 0x69, 0x6e, 0x7a, 0xb0, 0x07, 0xf9, 0xe6, 0x16, 0x73, 0x18, 0x0b,
+ 0x10, 0x77, 0x99, 0x0a, 0xf7, 0x54, 0xf7, 0x3f, 0x25, 0xd2, 0xba, 0x2e, 0x01, 0x8b, 0x65, 0x1a,
+ 0xbe, 0xcb, 0xb5, 0xaf, 0x07, 0x47, 0x20, 0xaa, 0xb2, 0x5c, 0xfb, 0x1d, 0xd6, 0x11, 0x80, 0x2e,
+ 0x95, 0xf5, 0x5b, 0x7e, 0x83, 0x3b, 0x02, 0x0a, 0xd0, 0xac, 0x4f, 0xdd, 0xb2, 0xb5, 0xed, 0x6b,
+ 0xdf, 0xd3, 0x20, 0x81, 0x4b, 0x33, 0x3a, 0xb8, 0xc2, 0x1d, 0x01, 0x5b, 0x11, 0xb4, 0x5d, 0xf4,
+ 0x69, 0x83, 0xe3, 0x79, 0x5f, 0x78, 0xbd, 0xfc, 0x34, 0xa1, 0x84, 0x54, 0xc7, 0x6f, 0x8e, 0x27,
+ 0x7c, 0x18, 0x7c, 0x44, 0x9b, 0xa4, 0x36, 0x78, 0x23, 0x8e, 0x27, 0xc7, 0xc3, 0xa0, 0x44, 0x1b,
+ 0xa4, 0x32, 0xe5, 0x93, 0xe9, 0x2c, 0x28, 0xd3, 0x3a, 0xd9, 0x9e, 0x4d, 0x46, 0xf3, 0x60, 0x0b,
+ 0x4e, 0xa3, 0x93, 0xc3, 0xc3, 0x60, 0x1b, 0xe4, 0x66, 0x73, 0x3e, 0x1e, 0xcc, 0x83, 0x0a, 0xc8,
+ 0x1d, 0x0c, 0x47, 0xaf, 0x4f, 0x0e, 0xe7, 0x41, 0x75, 0xff, 0x97, 0x92, 0x2f, 0xd6, 0x4d, 0xc6,
+ 0xc1, 0x4b, 0xc3, 0xa3, 0xe9, 0xfc, 0xa7, 0xe0, 0x23, 0x90, 0x3f, 0x38, 0x39, 0x9a, 0x06, 0x25,
+ 0x90, 0xe1, 0xc3, 0xd9, 0x1c, 0x3e, 0x2e, 0x03, 0xc7, 0xe0, 0x87, 0xe1, 0xe0, 0xc7, 0x60, 0x8b,
+ 0xb6, 0x48, 0x7d, 0xca, 0x87, 0x02, 0xb9, 0xb6, 0xe9, 0x2d, 0xd2, 0x9c, 0xbe, 0x7e, 0x33, 0x14,
+ 0xb3, 0x21, 0x7f, 0x3b, 0xe4, 0x41, 0x05, 0xbe, 0x3d, 0x9e, 0xcc, 0xc7, 0xa3, 0x9f, 0x82, 0x2a,
+ 0x0d, 0x48, 0x6b, 0x30, 0x3d, 0x19, 0x1f, 0x8f, 0x26, 0x8e, 0xbd, 0x46, 0x6f, 0x93, 0xf6, 0x06,
+ 0x71, 0xef, 0xd5, 0x01, 0x1a, 0x0d, 0x5f, 0xcf, 0x4f, 0xf8, 0xd0, 0x43, 0x0d, 0xf8, 0xfa, 0xed,
+ 0x90, 0xcf, 0xc6, 0x93, 0xe3, 0x80, 0xc0, 0x7f, 0xff, 0x7c, 0x3d, 0x9e, 0x8b, 0xe9, 0xf8, 0x20,
+ 0x68, 0xd2, 0xbb, 0x24, 0xb8, 0xf6, 0x9f, 0x18, 0xfc, 0x70, 0x78, 0x10, 0xb4, 0xfe, 0x17, 0x00,
+ 0x00, 0xff, 0xff, 0xf8, 0x9f, 0x0e, 0x7d, 0xca, 0x0d, 0x00, 0x00,
}
diff --git a/vendor/github.com/checkpoint-restore/go-criu/test/main.go b/vendor/github.com/checkpoint-restore/go-criu/test/main.go
new file mode 100644
index 000000000..418ebb843
--- /dev/null
+++ b/vendor/github.com/checkpoint-restore/go-criu/test/main.go
@@ -0,0 +1,133 @@
+package main
+
+import (
+ "fmt"
+ "github.com/checkpoint-restore/go-criu"
+ "github.com/checkpoint-restore/go-criu/rpc"
+ "github.com/golang/protobuf/proto"
+ "os"
+ "strconv"
+)
+
+// TestNfy struct
+type TestNfy struct {
+ criu.NoNotify
+}
+
+// PreDump test function
+func (c TestNfy) PreDump() error {
+ fmt.Printf("TEST PRE DUMP\n")
+ return nil
+}
+
+func doDump(c *criu.Criu, pidS string, imgDir string, pre bool, prevImg string) error {
+ fmt.Printf("Dumping\n")
+ pid, _ := strconv.Atoi(pidS)
+ img, err := os.Open(imgDir)
+ if err != nil {
+ return fmt.Errorf("can't open image dir (%s)", err)
+ }
+ defer img.Close()
+
+ opts := rpc.CriuOpts{
+ Pid: proto.Int32(int32(pid)),
+ ImagesDirFd: proto.Int32(int32(img.Fd())),
+ LogLevel: proto.Int32(4),
+ LogFile: proto.String("dump.log"),
+ }
+
+ if prevImg != "" {
+ opts.ParentImg = proto.String(prevImg)
+ opts.TrackMem = proto.Bool(true)
+ }
+
+ if pre {
+ err = c.PreDump(opts, TestNfy{})
+ } else {
+ err = c.Dump(opts, TestNfy{})
+ }
+ if err != nil {
+ return fmt.Errorf("dump fail (%s)", err)
+ }
+
+ return nil
+}
+
+// Usage: test $act $pid $images_dir
+func main() {
+ c := criu.MakeCriu()
+ // Read out CRIU version
+ version, err := c.GetCriuVersion()
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ fmt.Println("CRIU version", version)
+ // Check if version at least 3.2
+ result, err := c.IsCriuAtLeast(30200)
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ if !result {
+ fmt.Println("CRIU too old")
+ os.Exit(1)
+ }
+ act := os.Args[1]
+ switch act {
+ case "dump":
+ err := doDump(c, os.Args[2], os.Args[3], false, "")
+ if err != nil {
+ fmt.Print(err)
+ os.Exit(1)
+ }
+ case "dump2":
+ err := c.Prepare()
+ if err != nil {
+ fmt.Print(err)
+ os.Exit(1)
+ }
+
+ err = doDump(c, os.Args[2], os.Args[3]+"/pre", true, "")
+ if err != nil {
+ fmt.Printf("pre-dump failed")
+ fmt.Print(err)
+ os.Exit(1)
+ }
+ err = doDump(c, os.Args[2], os.Args[3], false, "./pre")
+ if err != nil {
+ fmt.Printf("dump failed")
+ fmt.Print(err)
+ os.Exit(1)
+ }
+
+ c.Cleanup()
+ case "restore":
+ fmt.Printf("Restoring\n")
+ img, err := os.Open(os.Args[2])
+ if err != nil {
+ fmt.Printf("can't open image dir")
+ os.Exit(1)
+ }
+ defer img.Close()
+
+ opts := rpc.CriuOpts{
+ ImagesDirFd: proto.Int32(int32(img.Fd())),
+ LogLevel: proto.Int32(4),
+ LogFile: proto.String("restore.log"),
+ }
+
+ err = c.Restore(opts, nil)
+ if err != nil {
+ fmt.Printf("Error:")
+ fmt.Print(err)
+ fmt.Printf("\n")
+ os.Exit(1)
+ }
+ default:
+ fmt.Printf("unknown action\n")
+ os.Exit(1)
+ }
+
+ fmt.Printf("Success\n")
+}
diff --git a/vendor/github.com/checkpoint-restore/go-criu/test/phaul-main.go b/vendor/github.com/checkpoint-restore/go-criu/test/phaul-main.go
new file mode 100644
index 000000000..f1bec2c55
--- /dev/null
+++ b/vendor/github.com/checkpoint-restore/go-criu/test/phaul-main.go
@@ -0,0 +1,192 @@
+package main
+
+import (
+ "fmt"
+ "os"
+ "strconv"
+ "strings"
+ "syscall"
+
+ "github.com/checkpoint-restore/go-criu"
+ "github.com/checkpoint-restore/go-criu/phaul"
+ "github.com/checkpoint-restore/go-criu/rpc"
+ "github.com/golang/protobuf/proto"
+)
+
+type testLocal struct {
+ criu.NoNotify
+ r *testRemote
+}
+
+type testRemote struct {
+ srv *phaul.Server
+}
+
+/* Dir where test will put dump images */
+const imagesDir = "image"
+
+func prepareImages() error {
+ err := os.Mkdir(imagesDir, 0700)
+ if err != nil {
+ return err
+ }
+
+ /* Work dir for PhaulClient */
+ err = os.Mkdir(imagesDir+"/local", 0700)
+ if err != nil {
+ return err
+ }
+
+ /* Work dir for PhaulServer */
+ err = os.Mkdir(imagesDir+"/remote", 0700)
+ if err != nil {
+ return err
+ }
+
+ /* Work dir for DumpCopyRestore */
+ err = os.Mkdir(imagesDir+"/test", 0700)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func mergeImages(dumpDir, lastPreDumpDir string) error {
+ idir, err := os.Open(dumpDir)
+ if err != nil {
+ return err
+ }
+
+ defer idir.Close()
+
+ imgs, err := idir.Readdirnames(0)
+ if err != nil {
+ return err
+ }
+
+ for _, fname := range imgs {
+ if !strings.HasSuffix(fname, ".img") {
+ continue
+ }
+
+ fmt.Printf("\t%s -> %s/\n", fname, lastPreDumpDir)
+ err = syscall.Link(dumpDir+"/"+fname, lastPreDumpDir+"/"+fname)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func (r *testRemote) doRestore() error {
+ lastSrvImagesDir := r.srv.LastImagesDir()
+ /*
+ * In imagesDir we have images from dump, in the
+ * lastSrvImagesDir -- where server-side images
+ * (from page server, with pages and pagemaps) are.
+ * Need to put former into latter and restore from
+ * them.
+ */
+ err := mergeImages(imagesDir+"/test", lastSrvImagesDir)
+ if err != nil {
+ return err
+ }
+
+ imgDir, err := os.Open(lastSrvImagesDir)
+ if err != nil {
+ return err
+ }
+ defer imgDir.Close()
+
+ opts := rpc.CriuOpts{
+ LogLevel: proto.Int32(4),
+ LogFile: proto.String("restore.log"),
+ ImagesDirFd: proto.Int32(int32(imgDir.Fd())),
+ }
+
+ cr := r.srv.GetCriu()
+ fmt.Printf("Do restore\n")
+ return cr.Restore(opts, nil)
+}
+
+func (l *testLocal) PostDump() error {
+ return l.r.doRestore()
+}
+
+func (l *testLocal) DumpCopyRestore(cr *criu.Criu, cfg phaul.Config, lastClnImagesDir string) error {
+ fmt.Printf("Final stage\n")
+
+ imgDir, err := os.Open(imagesDir + "/test")
+ if err != nil {
+ return err
+ }
+ defer imgDir.Close()
+
+ psi := rpc.CriuPageServerInfo{
+ Fd: proto.Int32(int32(cfg.Memfd)),
+ }
+
+ opts := rpc.CriuOpts{
+ Pid: proto.Int32(int32(cfg.Pid)),
+ LogLevel: proto.Int32(4),
+ LogFile: proto.String("dump.log"),
+ ImagesDirFd: proto.Int32(int32(imgDir.Fd())),
+ TrackMem: proto.Bool(true),
+ ParentImg: proto.String(lastClnImagesDir),
+ Ps: &psi,
+ }
+
+ fmt.Printf("Do dump\n")
+ return cr.Dump(opts, l)
+}
+
+func main() {
+ pid, _ := strconv.Atoi(os.Args[1])
+ fds, err := syscall.Socketpair(syscall.AF_LOCAL, syscall.SOCK_STREAM, 0)
+ if err != nil {
+ fmt.Printf("Can't make socketpair: %v\n", err)
+ os.Exit(1)
+ }
+
+ err = prepareImages()
+ if err != nil {
+ fmt.Printf("Can't prepare dirs for images: %v\n", err)
+ os.Exit(1)
+ return
+ }
+
+ fmt.Printf("Make server part (socket %d)\n", fds[1])
+ srv, err := phaul.MakePhaulServer(phaul.Config{
+ Pid: pid,
+ Memfd: fds[1],
+ Wdir: imagesDir + "/remote"})
+ if err != nil {
+ fmt.Printf("Unable to run a server: %v", err)
+ os.Exit(1)
+ return
+ }
+
+ r := &testRemote{srv}
+
+ fmt.Printf("Make client part (socket %d)\n", fds[0])
+ cln, err := phaul.MakePhaulClient(&testLocal{r: r}, srv,
+ phaul.Config{
+ Pid: pid,
+ Memfd: fds[0],
+ Wdir: imagesDir + "/local"})
+ if err != nil {
+ fmt.Printf("Unable to run a client: %v\n", err)
+ os.Exit(1)
+ }
+
+ fmt.Printf("Migrate\n")
+ err = cln.Migrate()
+ if err != nil {
+ fmt.Printf("Failed: %v\n", err)
+ os.Exit(1)
+ }
+
+ fmt.Printf("SUCCESS!\n")
+}
diff --git a/vendor/github.com/checkpoint-restore/go-criu/test/piggie.c b/vendor/github.com/checkpoint-restore/go-criu/test/piggie.c
new file mode 100644
index 000000000..1dc0801c0
--- /dev/null
+++ b/vendor/github.com/checkpoint-restore/go-criu/test/piggie.c
@@ -0,0 +1,57 @@
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <signal.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <sched.h>
+
+#define STKS (4*4096)
+
+#ifndef CLONE_NEWPID
+#define CLONE_NEWPID 0x20000000
+#endif
+
+static int do_test(void *logf)
+{
+ int fd, i = 0;
+
+ setsid();
+
+ close(0);
+ close(1);
+ close(2);
+
+ fd = open("/dev/null", O_RDONLY);
+ if (fd != 0) {
+ dup2(fd, 0);
+ close(fd);
+ }
+
+ fd = open(logf, O_WRONLY | O_TRUNC | O_CREAT, 0600);
+ dup2(fd, 1);
+ dup2(fd, 2);
+ if (fd != 1 && fd != 2)
+ close(fd);
+
+ while (1) {
+ sleep(1);
+ printf("%d\n", i++);
+ fflush(stdout);
+ }
+
+ return 0;
+}
+
+int main(int argc, char **argv)
+{
+ int pid;
+ void *stk;
+
+ stk = mmap(NULL, STKS, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANON | MAP_GROWSDOWN, 0, 0);
+ pid = clone(do_test, stk + STKS, SIGCHLD | CLONE_NEWPID, argv[1]);
+ printf("Child forked, pid %d\n", pid);
+
+ return 0;
+}
diff --git a/vendor/github.com/containerd/cgroups/README.md b/vendor/github.com/containerd/cgroups/README.md
index 69e932a9f..81ad11cc7 100644
--- a/vendor/github.com/containerd/cgroups/README.md
+++ b/vendor/github.com/containerd/cgroups/README.md
@@ -1,8 +1,9 @@
# cgroups
[![Build Status](https://travis-ci.org/containerd/cgroups.svg?branch=master)](https://travis-ci.org/containerd/cgroups)
-
[![codecov](https://codecov.io/gh/containerd/cgroups/branch/master/graph/badge.svg)](https://codecov.io/gh/containerd/cgroups)
+[![GoDoc](https://godoc.org/github.com/containerd/cgroups?status.svg)](https://godoc.org/github.com/containerd/cgroups)
+[![Go Report Card](https://goreportcard.com/badge/github.com/containerd/cgroups)](https://goreportcard.com/report/github.com/containerd/cgroups)
Go package for creating, managing, inspecting, and destroying cgroups.
The resources format for settings on the cgroup uses the OCI runtime-spec found
@@ -110,3 +111,14 @@ err := control.MoveTo(destination)
```go
subCgroup, err := control.New("child", resources)
```
+
+## Project details
+
+Cgroups is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE).
+As a containerd sub-project, you will find the:
+
+ * [Project governance](https://github.com/containerd/project/blob/master/GOVERNANCE.md),
+ * [Maintainers](https://github.com/containerd/project/blob/master/MAINTAINERS),
+ * and [Contributing guidelines](https://github.com/containerd/project/blob/master/CONTRIBUTING.md)
+
+information in our [`containerd/project`](https://github.com/containerd/project) repository.
diff --git a/vendor/github.com/containerd/cgroups/blkio.go b/vendor/github.com/containerd/cgroups/blkio.go
index fc1e689cb..875fb5546 100644
--- a/vendor/github.com/containerd/cgroups/blkio.go
+++ b/vendor/github.com/containerd/cgroups/blkio.go
@@ -191,31 +191,42 @@ func (b *blkioController) readEntry(devices map[deviceKey]string, path, name str
}
func createBlkioSettings(blkio *specs.LinuxBlockIO) []blkioSettings {
- settings := []blkioSettings{
- {
- name: "weight",
- value: blkio.Weight,
- format: uintf,
- },
- {
- name: "leaf_weight",
- value: blkio.LeafWeight,
- format: uintf,
- },
- }
- for _, wd := range blkio.WeightDevice {
+ settings := []blkioSettings{}
+
+ if blkio.Weight != nil {
settings = append(settings,
blkioSettings{
- name: "weight_device",
- value: wd,
- format: weightdev,
- },
+ name: "weight",
+ value: blkio.Weight,
+ format: uintf,
+ })
+ }
+ if blkio.LeafWeight != nil {
+ settings = append(settings,
blkioSettings{
- name: "leaf_weight_device",
- value: wd,
- format: weightleafdev,
+ name: "leaf_weight",
+ value: blkio.LeafWeight,
+ format: uintf,
})
}
+ for _, wd := range blkio.WeightDevice {
+ if wd.Weight != nil {
+ settings = append(settings,
+ blkioSettings{
+ name: "weight_device",
+ value: wd,
+ format: weightdev,
+ })
+ }
+ if wd.LeafWeight != nil {
+ settings = append(settings,
+ blkioSettings{
+ name: "leaf_weight_device",
+ value: wd,
+ format: weightleafdev,
+ })
+ }
+ }
for _, t := range []struct {
name string
list []specs.LinuxThrottleDevice
@@ -265,12 +276,12 @@ func uintf(v interface{}) []byte {
func weightdev(v interface{}) []byte {
wd := v.(specs.LinuxWeightDevice)
- return []byte(fmt.Sprintf("%d:%d %d", wd.Major, wd.Minor, wd.Weight))
+ return []byte(fmt.Sprintf("%d:%d %d", wd.Major, wd.Minor, *wd.Weight))
}
func weightleafdev(v interface{}) []byte {
wd := v.(specs.LinuxWeightDevice)
- return []byte(fmt.Sprintf("%d:%d %d", wd.Major, wd.Minor, wd.LeafWeight))
+ return []byte(fmt.Sprintf("%d:%d %d", wd.Major, wd.Minor, *wd.LeafWeight))
}
func throttleddev(v interface{}) []byte {
diff --git a/vendor/github.com/containerd/cgroups/cgroup.go b/vendor/github.com/containerd/cgroups/cgroup.go
index 7959feb49..03fcb9284 100644
--- a/vendor/github.com/containerd/cgroups/cgroup.go
+++ b/vendor/github.com/containerd/cgroups/cgroup.go
@@ -48,11 +48,12 @@ func New(hierarchy Hierarchy, path Path, resources *specs.LinuxResources) (Cgrou
// Load will load an existing cgroup and allow it to be controlled
func Load(hierarchy Hierarchy, path Path) (Cgroup, error) {
+ var activeSubsystems []Subsystem
subsystems, err := hierarchy()
if err != nil {
return nil, err
}
- // check the the subsystems still exist
+ // check that the subsystems still exist, and keep only those that actually exist
for _, s := range pathers(subsystems) {
p, err := path(s.Name())
if err != nil {
@@ -63,14 +64,15 @@ func Load(hierarchy Hierarchy, path Path) (Cgroup, error) {
}
if _, err := os.Lstat(s.Path(p)); err != nil {
if os.IsNotExist(err) {
- return nil, ErrCgroupDeleted
+ continue
}
return nil, err
}
+ activeSubsystems = append(activeSubsystems, s)
}
return &cgroup{
path: path,
- subsystems: subsystems,
+ subsystems: activeSubsystems,
}, nil
}
@@ -319,6 +321,49 @@ func (c *cgroup) processes(subsystem Name, recursive bool) ([]Process, error) {
return processes, err
}
+// Tasks returns the tasks running inside the cgroup along
+// with the subsystem used, pid, and path
+func (c *cgroup) Tasks(subsystem Name, recursive bool) ([]Task, error) {
+ c.mu.Lock()
+ defer c.mu.Unlock()
+ if c.err != nil {
+ return nil, c.err
+ }
+ return c.tasks(subsystem, recursive)
+}
+
+func (c *cgroup) tasks(subsystem Name, recursive bool) ([]Task, error) {
+ s := c.getSubsystem(subsystem)
+ sp, err := c.path(subsystem)
+ if err != nil {
+ return nil, err
+ }
+ path := s.(pather).Path(sp)
+ var tasks []Task
+ err = filepath.Walk(path, func(p string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+ if !recursive && info.IsDir() {
+ if p == path {
+ return nil
+ }
+ return filepath.SkipDir
+ }
+ dir, name := filepath.Split(p)
+ if name != cgroupTasks {
+ return nil
+ }
+ procs, err := readTasksPids(dir, subsystem)
+ if err != nil {
+ return err
+ }
+ tasks = append(tasks, procs...)
+ return nil
+ })
+ return tasks, err
+}
+
// Freeze freezes the entire cgroup and all the processes inside it
func (c *cgroup) Freeze() error {
c.mu.Lock()
diff --git a/vendor/github.com/containerd/cgroups/control.go b/vendor/github.com/containerd/cgroups/control.go
index 63e2df93d..1f62c54f3 100644
--- a/vendor/github.com/containerd/cgroups/control.go
+++ b/vendor/github.com/containerd/cgroups/control.go
@@ -44,6 +44,15 @@ type Process struct {
Path string
}
+type Task struct {
+ // Subsystem is the name of the subsystem that the task is in
+ Subsystem Name
+ // Pid is the process id of the task
+ Pid int
+ // Path is the full path of the subsystem and location that the task is in
+ Path string
+}
+
// Cgroup handles interactions with the individual groups to perform
// actions on them as them main interface to this cgroup package
type Cgroup interface {
@@ -64,6 +73,8 @@ type Cgroup interface {
Update(resources *specs.LinuxResources) error
// Processes returns all the processes in a select subsystem for the cgroup
Processes(Name, bool) ([]Process, error)
+ // Tasks returns all the tasks in a select subsystem for the cgroup
+ Tasks(Name, bool) ([]Task, error)
// Freeze freezes or pauses all processes inside the cgroup
Freeze() error
// Thaw thaw or resumes all processes inside the cgroup
diff --git a/vendor/github.com/containerd/cgroups/cpuset.go b/vendor/github.com/containerd/cgroups/cpuset.go
index f182aa68c..30208515e 100644
--- a/vendor/github.com/containerd/cgroups/cpuset.go
+++ b/vendor/github.com/containerd/cgroups/cpuset.go
@@ -57,21 +57,21 @@ func (c *cpusetController) Create(path string, resources *specs.LinuxResources)
if resources.CPU != nil {
for _, t := range []struct {
name string
- value *string
+ value string
}{
{
name: "cpus",
- value: &resources.CPU.Cpus,
+ value: resources.CPU.Cpus,
},
{
name: "mems",
- value: &resources.CPU.Mems,
+ value: resources.CPU.Mems,
},
} {
- if t.value != nil {
+ if t.value != "" {
if err := ioutil.WriteFile(
filepath.Join(c.Path(path), fmt.Sprintf("cpuset.%s", t.name)),
- []byte(*t.value),
+ []byte(t.value),
defaultFilePerm,
); err != nil {
return err
diff --git a/vendor/github.com/containerd/cgroups/net_prio.go b/vendor/github.com/containerd/cgroups/net_prio.go
index c77169215..612e1bcd2 100644
--- a/vendor/github.com/containerd/cgroups/net_prio.go
+++ b/vendor/github.com/containerd/cgroups/net_prio.go
@@ -50,7 +50,7 @@ func (n *netprioController) Create(path string, resources *specs.LinuxResources)
if resources.Network != nil {
for _, prio := range resources.Network.Priorities {
if err := ioutil.WriteFile(
- filepath.Join(n.Path(path), "net_prio_ifpriomap"),
+ filepath.Join(n.Path(path), "net_prio.ifpriomap"),
formatPrio(prio.Name, prio.Priority),
defaultFilePerm,
); err != nil {
diff --git a/vendor/github.com/containerd/cgroups/subsystem.go b/vendor/github.com/containerd/cgroups/subsystem.go
index 933a6c38d..23de04d49 100644
--- a/vendor/github.com/containerd/cgroups/subsystem.go
+++ b/vendor/github.com/containerd/cgroups/subsystem.go
@@ -42,7 +42,7 @@ const (
)
// Subsystems returns a complete list of the default cgroups
-// avaliable on most linux systems
+// available on most linux systems
func Subsystems() []Name {
n := []Name{
Hugetlb,
diff --git a/vendor/github.com/containerd/cgroups/systemd.go b/vendor/github.com/containerd/cgroups/systemd.go
index 2486ed194..c5d4e3081 100644
--- a/vendor/github.com/containerd/cgroups/systemd.go
+++ b/vendor/github.com/containerd/cgroups/systemd.go
@@ -34,7 +34,7 @@ const (
var (
canDelegate bool
- once sync.Once
+ once sync.Once
)
func Systemd() ([]Subsystem, error) {
diff --git a/vendor/github.com/containerd/cgroups/utils.go b/vendor/github.com/containerd/cgroups/utils.go
index 345be4e46..f3129b1a3 100644
--- a/vendor/github.com/containerd/cgroups/utils.go
+++ b/vendor/github.com/containerd/cgroups/utils.go
@@ -111,7 +111,7 @@ func remove(path string) error {
return fmt.Errorf("cgroups: unable to remove path %q", path)
}
-// readPids will read all the pids in a cgroup by the provided path
+// readPids will read all the pids of processes in a cgroup by the provided path
func readPids(path string, subsystem Name) ([]Process, error) {
f, err := os.Open(filepath.Join(path, cgroupProcs))
if err != nil {
@@ -138,6 +138,33 @@ func readPids(path string, subsystem Name) ([]Process, error) {
return out, nil
}
+// readTasksPids will read all the pids of tasks in a cgroup by the provided path
+func readTasksPids(path string, subsystem Name) ([]Task, error) {
+ f, err := os.Open(filepath.Join(path, cgroupTasks))
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+ var (
+ out []Task
+ s = bufio.NewScanner(f)
+ )
+ for s.Scan() {
+ if t := s.Text(); t != "" {
+ pid, err := strconv.Atoi(t)
+ if err != nil {
+ return nil, err
+ }
+ out = append(out, Task{
+ Pid: pid,
+ Subsystem: subsystem,
+ Path: path,
+ })
+ }
+ }
+ return out, nil
+}
+
func hugePageSizes() ([]string, error) {
var (
pageSizes []string
diff --git a/vendor/github.com/containerd/continuity/LICENSE b/vendor/github.com/containerd/continuity/LICENSE
index 8f71f43fe..584149b6e 100644
--- a/vendor/github.com/containerd/continuity/LICENSE
+++ b/vendor/github.com/containerd/continuity/LICENSE
@@ -1,6 +1,7 @@
+
Apache License
Version 2.0, January 2004
- http://www.apache.org/licenses/
+ https://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
@@ -175,28 +176,16 @@
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}
+ Copyright The containerd Authors
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
+ 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.
-
diff --git a/vendor/github.com/containerd/continuity/README.md b/vendor/github.com/containerd/continuity/README.md
index 0e91ce07b..f9f9ef0f9 100644
--- a/vendor/github.com/containerd/continuity/README.md
+++ b/vendor/github.com/containerd/continuity/README.md
@@ -72,3 +72,13 @@ If you change the proto file you will need to rebuild the generated Go with `go
```console
$ go generate ./proto
```
+
+## Project details
+
+continuity is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE).
+As a containerd sub-project, you will find the:
+ * [Project governance](https://github.com/containerd/project/blob/master/GOVERNANCE.md),
+ * [Maintainers](https://github.com/containerd/project/blob/master/MAINTAINERS),
+ * and [Contributing guidelines](https://github.com/containerd/project/blob/master/CONTRIBUTING.md)
+
+information in our [`containerd/project`](https://github.com/containerd/project) repository.
diff --git a/vendor/github.com/containerd/continuity/pathdriver/path_driver.go b/vendor/github.com/containerd/continuity/pathdriver/path_driver.go
index b43d55fe9..b0d5a6b56 100644
--- a/vendor/github.com/containerd/continuity/pathdriver/path_driver.go
+++ b/vendor/github.com/containerd/continuity/pathdriver/path_driver.go
@@ -1,3 +1,19 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
package pathdriver
import (
diff --git a/vendor/github.com/containerd/continuity/vendor.conf b/vendor/github.com/containerd/continuity/vendor.conf
index 7c80deec5..5bd88d5fd 100644
--- a/vendor/github.com/containerd/continuity/vendor.conf
+++ b/vendor/github.com/containerd/continuity/vendor.conf
@@ -10,4 +10,4 @@ github.com/spf13/pflag 4c012f6dcd9546820e378d0bdda4d8fc772cdfea
golang.org/x/crypto 9f005a07e0d31d45e6656d241bb5c0f2efd4bc94
golang.org/x/net a337091b0525af65de94df2eb7e98bd9962dcbe2
golang.org/x/sync 450f422ab23cf9881c94e2db30cac0eb1b7cf80c
-golang.org/x/sys 665f6529cca930e27b831a0d1dafffbe1c172924
+golang.org/x/sys 77b0e4315053a57ed2962443614bdb28db152054
diff --git a/vendor/github.com/containernetworking/plugins/README.md b/vendor/github.com/containernetworking/plugins/README.md
index 864601763..f0e444355 100644
--- a/vendor/github.com/containernetworking/plugins/README.md
+++ b/vendor/github.com/containernetworking/plugins/README.md
@@ -4,14 +4,12 @@
# plugins
Some CNI network plugins, maintained by the containernetworking team. For more information, see the individual READMEs.
-Read [CONTRIBUTING](CONTRIBUTING.md) for build and test instructions.
-
## Plugins supplied:
### Main: interface-creating
* `bridge`: Creates a bridge, adds the host and the container to it.
-* `ipvlan`: Adds an [ipvlan](https://www.kernel.org/doc/Documentation/networking/ipvlan.txt) interface in the container.
-* `loopback`: Set the state of loopback interface to up.
-* `macvlan`: Creates a new MAC address, forwards all traffic to that to the container.
+* `ipvlan`: Adds an [ipvlan](https://www.kernel.org/doc/Documentation/networking/ipvlan.txt) interface in the container
+* `loopback`: Creates a loopback interface
+* `macvlan`: Creates a new MAC address, forwards all traffic to that to the container
* `ptp`: Creates a veth pair.
* `vlan`: Allocates a vlan device.
diff --git a/vendor/github.com/containernetworking/plugins/pkg/ns/README.md b/vendor/github.com/containernetworking/plugins/pkg/ns/README.md
index 751d5db02..c0f5cf2e8 100644
--- a/vendor/github.com/containernetworking/plugins/pkg/ns/README.md
+++ b/vendor/github.com/containernetworking/plugins/pkg/ns/README.md
@@ -12,6 +12,10 @@ For example, you cannot rely on the `ns.Set()` namespace being the current names
The `ns.Do()` method provides **partial** control over network namespaces for you by implementing these strategies. All code dependent on a particular network namespace (including the root namespace) should be wrapped in the `ns.Do()` method to ensure the correct namespace is selected for the duration of your code. For example:
```go
+targetNs, err := ns.NewNS()
+if err != nil {
+ return err
+}
err = targetNs.Do(func(hostNs ns.NetNS) error {
dummy := &netlink.Dummy{
LinkAttrs: netlink.LinkAttrs{
@@ -22,16 +26,11 @@ err = targetNs.Do(func(hostNs ns.NetNS) error {
})
```
-Note this requirement to wrap every network call is very onerous - any libraries you call might call out to network services such as DNS, and all such calls need to be protected after you call `ns.Do()`. All goroutines spawned from within the `ns.Do` will not inherit the new namespace. The CNI plugins all exit very soon after calling `ns.Do()` which helps to minimize the problem.
+Note this requirement to wrap every network call is very onerous - any libraries you call might call out to network services such as DNS, and all such calls need to be protected after you call `ns.Do()`. The CNI plugins all exit very soon after calling `ns.Do()` which helps to minimize the problem.
-When a new thread is spawned in Linux, it inherits the namepaces of its parent. In versions of go **prior to 1.10**, if the runtime spawns a new OS thread, it picks the parent randomly. If the chosen parent thread has been moved to a new namespace (even temporarily), the new OS thread will be permanently "stuck in the wrong namespace", and goroutines will non-deterministically switch namespaces as they are rescheduled.
-
-In short, **there was no safe way to change network namespaces, even temporarily, from within a long-lived, multithreaded Go process**. If you wish to do this, you must use go 1.10 or greater.
-
-
-### Creating network namespaces
-Earlier versions of this library managed namespace creation, but as CNI does not actually utilize this feature (and it was essentialy unmaintained), it was removed. If you're writing a container runtime, you should implement namespace management yourself. However, there are some gotchas when doing so, especially around handling `/var/run/netns`. A reasonably correct reference implementation, borrowed from `rkt`, can be found in `pkg/testutils/netns_linux.go` if you're in need of a source of inspiration.
+Also: If the runtime spawns a new OS thread, it will inherit the network namespace of the parent thread, which may have been temporarily switched, and thus the new OS thread will be permanently "stuck in the wrong namespace".
+In short, **there is no safe way to change network namespaces from within a long-lived, multithreaded Go process**. If your daemon process needs to be namespace aware, consider spawning a separate process (like a CNI plugin) for each namespace.
### Further Reading
- https://github.com/golang/go/wiki/LockOSThread
diff --git a/vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go b/vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go
index 31ad5f622..4ce989467 100644
--- a/vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go
+++ b/vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go
@@ -15,8 +15,10 @@
package ns
import (
+ "crypto/rand"
"fmt"
"os"
+ "path"
"runtime"
"sync"
"syscall"
@@ -36,6 +38,82 @@ func getCurrentThreadNetNSPath() string {
return fmt.Sprintf("/proc/%d/task/%d/ns/net", os.Getpid(), unix.Gettid())
}
+// Creates a new persistent network namespace and returns an object
+// representing that namespace, without switching to it
+func NewNS() (NetNS, error) {
+ const nsRunDir = "/var/run/netns"
+
+ b := make([]byte, 16)
+ _, err := rand.Reader.Read(b)
+ if err != nil {
+ return nil, fmt.Errorf("failed to generate random netns name: %v", err)
+ }
+
+ err = os.MkdirAll(nsRunDir, 0755)
+ if err != nil {
+ return nil, err
+ }
+
+ // create an empty file at the mount point
+ nsName := fmt.Sprintf("cni-%x-%x-%x-%x-%x", b[0:4], b[4:6], b[6:8], b[8:10], b[10:])
+ nsPath := path.Join(nsRunDir, nsName)
+ mountPointFd, err := os.Create(nsPath)
+ if err != nil {
+ return nil, err
+ }
+ mountPointFd.Close()
+
+ // Ensure the mount point is cleaned up on errors; if the namespace
+ // was successfully mounted this will have no effect because the file
+ // is in-use
+ defer os.RemoveAll(nsPath)
+
+ var wg sync.WaitGroup
+ wg.Add(1)
+
+ // do namespace work in a dedicated goroutine, so that we can safely
+ // Lock/Unlock OSThread without upsetting the lock/unlock state of
+ // the caller of this function
+ var fd *os.File
+ go (func() {
+ defer wg.Done()
+ runtime.LockOSThread()
+
+ var origNS NetNS
+ origNS, err = GetNS(getCurrentThreadNetNSPath())
+ if err != nil {
+ return
+ }
+ defer origNS.Close()
+
+ // create a new netns on the current thread
+ err = unix.Unshare(unix.CLONE_NEWNET)
+ if err != nil {
+ return
+ }
+ defer origNS.Set()
+
+ // bind mount the new netns from the current thread onto the mount point
+ err = unix.Mount(getCurrentThreadNetNSPath(), nsPath, "none", unix.MS_BIND, "")
+ if err != nil {
+ return
+ }
+
+ fd, err = os.Open(nsPath)
+ if err != nil {
+ return
+ }
+ })()
+ wg.Wait()
+
+ if err != nil {
+ unix.Unmount(nsPath, unix.MNT_DETACH)
+ return nil, fmt.Errorf("failed to create namespace: %v", err)
+ }
+
+ return &netNS{file: fd, mounted: true}, nil
+}
+
func (ns *netNS) Close() error {
if err := ns.errorIfClosed(); err != nil {
return err
@@ -46,6 +124,16 @@ func (ns *netNS) Close() error {
}
ns.closed = true
+ if ns.mounted {
+ if err := unix.Unmount(ns.file.Name(), unix.MNT_DETACH); err != nil {
+ return fmt.Errorf("Failed to unmount namespace %s: %v", ns.file.Name(), err)
+ }
+ if err := os.RemoveAll(ns.file.Name()); err != nil {
+ return fmt.Errorf("Failed to clean up namespace %s: %v", ns.file.Name(), err)
+ }
+ ns.mounted = false
+ }
+
return nil
}
@@ -92,8 +180,9 @@ type NetNS interface {
}
type netNS struct {
- file *os.File
- closed bool
+ file *os.File
+ mounted bool
+ closed bool
}
// netNS implements the NetNS interface
diff --git a/vendor/github.com/containers/buildah/common.go b/vendor/github.com/containers/buildah/common.go
index dfdc33a22..e369dc407 100644
--- a/vendor/github.com/containers/buildah/common.go
+++ b/vendor/github.com/containers/buildah/common.go
@@ -6,10 +6,8 @@ import (
"path/filepath"
cp "github.com/containers/image/copy"
- "github.com/containers/image/transports"
"github.com/containers/image/types"
"github.com/containers/libpod/pkg/rootless"
- "github.com/sirupsen/logrus"
)
const (
@@ -34,12 +32,6 @@ func getCopyOptions(reportWriter io.Writer, sourceReference types.ImageReference
}
}
- sourceInsecure, err := isReferenceInsecure(sourceReference, sourceCtx)
- if err != nil {
- logrus.Debugf("error determining if registry for %q is insecure: %v", transports.ImageName(sourceReference), err)
- } else if sourceInsecure {
- sourceCtx.OCIInsecureSkipTLSVerify = true
- }
destinationCtx := &types.SystemContext{}
if destinationSystemContext != nil {
@@ -51,12 +43,6 @@ func getCopyOptions(reportWriter io.Writer, sourceReference types.ImageReference
}
}
}
- destinationInsecure, err := isReferenceInsecure(destinationReference, destinationCtx)
- if err != nil {
- logrus.Debugf("error determining if registry for %q is insecure: %v", transports.ImageName(destinationReference), err)
- } else if destinationInsecure {
- destinationCtx.OCIInsecureSkipTLSVerify = true
- }
return &cp.Options{
ReportWriter: reportWriter,
diff --git a/vendor/github.com/containers/buildah/config.go b/vendor/github.com/containers/buildah/config.go
index 3609694f6..114b8ca37 100644
--- a/vendor/github.com/containers/buildah/config.go
+++ b/vendor/github.com/containers/buildah/config.go
@@ -474,9 +474,6 @@ func (b *Builder) Hostname() string {
// Note: this setting is not present in the OCIv1 image format, so it is
// discarded when writing images using OCIv1 formats.
func (b *Builder) SetHostname(name string) {
- if name != "" && b.Format != Dockerv2ImageManifest {
- logrus.Errorf("HOSTNAME is not supported for OCI image format, hostname %s will be ignored. Must use `docker` format", name)
- }
b.Docker.Config.Hostname = name
}
diff --git a/vendor/github.com/containers/buildah/image.go b/vendor/github.com/containers/buildah/image.go
index 163d34269..47842db7d 100644
--- a/vendor/github.com/containers/buildah/image.go
+++ b/vendor/github.com/containers/buildah/image.go
@@ -557,6 +557,10 @@ func (i *containerImageSource) LayerInfosForCopy(ctx context.Context) ([]types.B
return nil, nil
}
+func (i *containerImageSource) HasThreadSafeGetBlob() bool {
+ return false
+}
+
func (i *containerImageSource) GetBlob(ctx context.Context, blob types.BlobInfo, cache types.BlobInfoCache) (reader io.ReadCloser, size int64, err error) {
if blob.Digest == i.configDigest {
logrus.Debugf("start reading config")
diff --git a/vendor/github.com/containers/buildah/imagebuildah/build.go b/vendor/github.com/containers/buildah/imagebuildah/build.go
index 2681bc198..217bcfc79 100644
--- a/vendor/github.com/containers/buildah/imagebuildah/build.go
+++ b/vendor/github.com/containers/buildah/imagebuildah/build.go
@@ -517,6 +517,7 @@ func (b *Executor) Run(run imagebuilder.Run, config docker.Config) error {
Hostname: config.Hostname,
Runtime: b.runtime,
Args: b.runtimeArgs,
+ NoPivot: os.Getenv("BUILDAH_NOPIVOT") != "",
Mounts: convertMounts(b.transientMounts),
Env: config.Env,
User: config.User,
@@ -1307,7 +1308,12 @@ func (b *Executor) Build(ctx context.Context, stages imagebuilder.Stages) (strin
var imageRef reference.Canonical
imageID := ""
- if !b.layers && !b.noCache {
+
+ // Check if we have a one line Dockerfile making layers irrelevant
+ // or the user told us to ignore layers.
+ ignoreLayers := (len(stages) < 2 && len(stages[0].Node.Children) < 2) || (!b.layers && !b.noCache)
+
+ if ignoreLayers {
imgID, ref, err := stageExecutor.Commit(ctx, stages[len(stages)-1].Builder, "")
if err != nil {
return "", nil, err
diff --git a/vendor/github.com/containers/buildah/imagebuildah/chroot_symlink.go b/vendor/github.com/containers/buildah/imagebuildah/chroot_symlink.go
index edb5837db..6feedf6a5 100644
--- a/vendor/github.com/containers/buildah/imagebuildah/chroot_symlink.go
+++ b/vendor/github.com/containers/buildah/imagebuildah/chroot_symlink.go
@@ -131,6 +131,11 @@ func resolveModifiedTime(rootdir, filename, historyTime string) (bool, error) {
func modTimeIsGreater(rootdir, path string, historyTime string) (bool, error) {
var timeIsGreater bool
+ // the Walk below doesn't work if rootdir and path are equal
+ if rootdir == path {
+ return false, nil
+ }
+
// Convert historyTime from string to time.Time for comparison
histTime, err := time.Parse(time.RFC3339Nano, historyTime)
if err != nil {
diff --git a/vendor/github.com/containers/buildah/pkg/blobcache/blobcache.go b/vendor/github.com/containers/buildah/pkg/blobcache/blobcache.go
index 63022f15d..31e6a428c 100644
--- a/vendor/github.com/containers/buildah/pkg/blobcache/blobcache.go
+++ b/vendor/github.com/containers/buildah/pkg/blobcache/blobcache.go
@@ -52,14 +52,18 @@ type BlobCache interface {
type blobCacheReference struct {
reference types.ImageReference
+ // WARNING: The contents of this directory may be accessed concurrently,
+ // both within this process and by multiple different processes
directory string
compress types.LayerCompression
}
type blobCacheSource struct {
- reference *blobCacheReference
- source types.ImageSource
- sys types.SystemContext
+ reference *blobCacheReference
+ source types.ImageSource
+ sys types.SystemContext
+ // this mutex synchronizes the counters below
+ mu sync.Mutex
cacheHits int64
cacheMisses int64
cacheErrors int64
@@ -218,6 +222,10 @@ func (s *blobCacheSource) GetManifest(ctx context.Context, instanceDigest *diges
return s.source.GetManifest(ctx, instanceDigest)
}
+func (s *blobCacheSource) HasThreadSafeGetBlob() bool {
+ return s.source.HasThreadSafeGetBlob()
+}
+
func (s *blobCacheSource) GetBlob(ctx context.Context, blobinfo types.BlobInfo, cache types.BlobInfoCache) (io.ReadCloser, int64, error) {
present, size, err := s.reference.HasBlob(blobinfo)
if err != nil {
@@ -228,16 +236,22 @@ func (s *blobCacheSource) GetBlob(ctx context.Context, blobinfo types.BlobInfo,
filename := filepath.Join(s.reference.directory, makeFilename(blobinfo.Digest, isConfig))
f, err := os.Open(filename)
if err == nil {
+ s.mu.Lock()
s.cacheHits++
+ s.mu.Unlock()
return f, size, nil
}
if !os.IsNotExist(err) {
+ s.mu.Lock()
s.cacheErrors++
+ s.mu.Unlock()
return nil, -1, errors.Wrapf(err, "error checking for cache file %q", filepath.Join(s.reference.directory, filename))
}
}
}
+ s.mu.Lock()
s.cacheMisses++
+ s.mu.Unlock()
rc, size, err := s.source.GetBlob(ctx, blobinfo, cache)
if err != nil {
return rc, size, errors.Wrapf(err, "error reading blob from source image %q", transports.ImageName(s.reference))
@@ -398,6 +412,10 @@ func saveStream(wg *sync.WaitGroup, decompressReader io.ReadCloser, tempFile *os
}
}
+func (s *blobCacheDestination) HasThreadSafePutBlob() bool {
+ return s.destination.HasThreadSafePutBlob()
+}
+
func (d *blobCacheDestination) PutBlob(ctx context.Context, stream io.Reader, inputInfo types.BlobInfo, cache types.BlobInfoCache, isConfig bool) (types.BlobInfo, error) {
var tempfile *os.File
var err error
diff --git a/vendor/github.com/containers/buildah/pkg/cli/common.go b/vendor/github.com/containers/buildah/pkg/cli/common.go
index e3a4fe62a..dc1b2bc69 100644
--- a/vendor/github.com/containers/buildah/pkg/cli/common.go
+++ b/vendor/github.com/containers/buildah/pkg/cli/common.go
@@ -148,6 +148,10 @@ var (
Name: "loglevel",
Usage: "adjust logging level (range from -2 to 3)",
},
+ cli.StringFlag{
+ Name: "platform",
+ Usage: "CLI compatibility: no action or effect",
+ },
cli.BoolTFlag{
Name: "pull",
Usage: "pull the image if not present",
diff --git a/vendor/github.com/containers/buildah/run.go b/vendor/github.com/containers/buildah/run.go
index 5d2cd6a32..a0627f489 100644
--- a/vendor/github.com/containers/buildah/run.go
+++ b/vendor/github.com/containers/buildah/run.go
@@ -26,6 +26,7 @@ import (
"github.com/containers/storage/pkg/idtools"
"github.com/containers/storage/pkg/ioutils"
"github.com/containers/storage/pkg/reexec"
+ "github.com/containers/storage/pkg/stringid"
units "github.com/docker/go-units"
digest "github.com/opencontainers/go-digest"
"github.com/opencontainers/runtime-spec/specs-go"
@@ -944,10 +945,25 @@ func (b *Builder) configureNamespaces(g *generate.Generator, options RunOptions)
g.SetHostname(options.Hostname)
} else if b.Hostname() != "" {
g.SetHostname(b.Hostname())
+ } else {
+ g.SetHostname(stringid.TruncateID(b.ContainerID))
}
} else {
g.SetHostname("")
}
+
+ found := false
+ spec := g.Spec()
+ for i := range spec.Process.Env {
+ if strings.HasPrefix(spec.Process.Env[i], "HOSTNAME=") {
+ found = true
+ break
+ }
+ }
+ if !found {
+ spec.Process.Env = append(spec.Process.Env, fmt.Sprintf("HOSTNAME=%s", spec.Hostname))
+ }
+
return configureNetwork, configureNetworks, nil
}
diff --git a/vendor/github.com/containers/buildah/unshare/unshare.c b/vendor/github.com/containers/buildah/unshare/unshare.c
index 6873e49c2..3865e414f 100644
--- a/vendor/github.com/containers/buildah/unshare/unshare.c
+++ b/vendor/github.com/containers/buildah/unshare/unshare.c
@@ -79,7 +79,8 @@ void _buildah_unshare(void)
pidfd = _buildah_unshare_parse_envint("_Buildah-pid-pipe");
if (pidfd != -1) {
snprintf(buf, sizeof(buf), "%llu", (unsigned long long) getpid());
- if (write(pidfd, buf, strlen(buf)) != strlen(buf)) {
+ size_t size = write(pidfd, buf, strlen(buf));
+ if (size != strlen(buf)) {
fprintf(stderr, "Error writing PID to pipe on fd %d: %m\n", pidfd);
_exit(1);
}
diff --git a/vendor/github.com/containers/buildah/util.go b/vendor/github.com/containers/buildah/util.go
index 66a4e535a..5dadec7c2 100644
--- a/vendor/github.com/containers/buildah/util.go
+++ b/vendor/github.com/containers/buildah/util.go
@@ -173,24 +173,6 @@ func (b *Builder) tarPath() func(path string) (io.ReadCloser, error) {
}
}
-// isRegistryInsecure checks if the named registry is marked as not secure
-func isRegistryInsecure(registry string, sc *types.SystemContext) (bool, error) {
- reginfo, err := sysregistriesv2.FindRegistry(sc, registry)
- if err != nil {
- return false, errors.Wrapf(err, "unable to parse the registries configuration (%s)", sysregistries.RegistriesConfPath(sc))
- }
- if reginfo != nil {
- if reginfo.Insecure {
- logrus.Debugf("registry %q is marked insecure in registries configuration %q", registry, sysregistries.RegistriesConfPath(sc))
- } else {
- logrus.Debugf("registry %q is not marked insecure in registries configuration %q", registry, sysregistries.RegistriesConfPath(sc))
- }
- return reginfo.Insecure, nil
- }
- logrus.Debugf("registry %q is not listed in registries configuration %q, assuming it's secure", registry, sysregistries.RegistriesConfPath(sc))
- return false, nil
-}
-
// isRegistryBlocked checks if the named registry is marked as blocked
func isRegistryBlocked(registry string, sc *types.SystemContext) (bool, error) {
reginfo, err := sysregistriesv2.FindRegistry(sc, registry)
@@ -221,11 +203,6 @@ func isReferenceSomething(ref types.ImageReference, sc *types.SystemContext, wha
return false, nil
}
-// isReferenceInsecure checks if the registry part of a reference is insecure
-func isReferenceInsecure(ref types.ImageReference, sc *types.SystemContext) (bool, error) {
- return isReferenceSomething(ref, sc, isRegistryInsecure)
-}
-
// isReferenceBlocked checks if the registry part of a reference is blocked
func isReferenceBlocked(ref types.ImageReference, sc *types.SystemContext) (bool, error) {
if ref != nil && ref.Transport() != nil {
diff --git a/vendor/github.com/containers/buildah/util/util.go b/vendor/github.com/containers/buildah/util/util.go
index 427c8db28..f4cac522e 100644
--- a/vendor/github.com/containers/buildah/util/util.go
+++ b/vendor/github.com/containers/buildah/util/util.go
@@ -395,57 +395,11 @@ func GetSubIDMappings(user, group string) ([]specs.LinuxIDMapping, []specs.Linux
// ParseIDMappings parses mapping triples.
func ParseIDMappings(uidmap, gidmap []string) ([]idtools.IDMap, []idtools.IDMap, error) {
- nonDigitsToWhitespace := func(r rune) rune {
- if strings.IndexRune("0123456789", r) == -1 {
- return ' '
- } else {
- return r
- }
- }
- parseTriple := func(spec []string) (container, host, size uint32, err error) {
- cid, err := strconv.ParseUint(spec[0], 10, 32)
- if err != nil {
- return 0, 0, 0, fmt.Errorf("error parsing id map value %q: %v", spec[0], err)
- }
- hid, err := strconv.ParseUint(spec[1], 10, 32)
- if err != nil {
- return 0, 0, 0, fmt.Errorf("error parsing id map value %q: %v", spec[1], err)
- }
- sz, err := strconv.ParseUint(spec[2], 10, 32)
- if err != nil {
- return 0, 0, 0, fmt.Errorf("error parsing id map value %q: %v", spec[2], err)
- }
- return uint32(cid), uint32(hid), uint32(sz), nil
- }
- parseIDMap := func(mapSpec []string, mapSetting string) (idmap []idtools.IDMap, err error) {
- for _, idMapSpec := range mapSpec {
- idSpec := strings.Fields(strings.Map(nonDigitsToWhitespace, idMapSpec))
- if len(idSpec)%3 != 0 {
- return nil, errors.Errorf("error initializing ID mappings: %s setting is malformed", mapSetting)
- }
- for i := range idSpec {
- if i%3 != 0 {
- continue
- }
- cid, hid, size, err := parseTriple(idSpec[i : i+3])
- if err != nil {
- return nil, errors.Errorf("error initializing ID mappings: %s setting is malformed", mapSetting)
- }
- mapping := idtools.IDMap{
- ContainerID: int(cid),
- HostID: int(hid),
- Size: int(size),
- }
- idmap = append(idmap, mapping)
- }
- }
- return idmap, nil
- }
- uid, err := parseIDMap(uidmap, "userns-uid-map")
+ uid, err := idtools.ParseIDMap(uidmap, "userns-uid-map")
if err != nil {
return nil, nil, err
}
- gid, err := parseIDMap(gidmap, "userns-gid-map")
+ gid, err := idtools.ParseIDMap(gidmap, "userns-gid-map")
if err != nil {
return nil, nil, err
}
diff --git a/vendor/github.com/containers/buildah/vendor.conf b/vendor/github.com/containers/buildah/vendor.conf
index 61325114c..ee8192935 100644
--- a/vendor/github.com/containers/buildah/vendor.conf
+++ b/vendor/github.com/containers/buildah/vendor.conf
@@ -3,10 +3,10 @@ github.com/blang/semver master
github.com/BurntSushi/toml master
github.com/containerd/continuity master
github.com/containernetworking/cni v0.7.0-alpha1
-github.com/containers/image d53afe179b381fafb427e6b9cf9b1996a98c1067
+github.com/containers/image 0c6cc8e1420001ae39fa89d308b3b3bc5ee81c57
github.com/boltdb/bolt master
-github.com/containers/libpod fe4f09493f41f675d24c969d1b60d1a6a45ddb9e
-github.com/containers/storage db40f96d853dfced60c563e61fb66ba231ce7c8d
+github.com/containers/libpod c8eaf59d5f4bec249db8134c6a9fcfbcac792519
+github.com/containers/storage 60a692f7ce891feb91ce0eda87bd06bfd5651dff
github.com/docker/distribution 5f6282db7d65e6d72ad7c2cc66310724a57be716
github.com/docker/docker 86f080cff0914e9694068ed78d503701667c4c00
github.com/docker/docker-credential-helpers d68f9aeca33f5fd3f08eeae5e9d175edf4e731d1
@@ -32,7 +32,7 @@ github.com/mistifyio/go-zfs master
github.com/moby/moby f8806b18b4b92c5e1980f6e11c917fad201cd73c
github.com/mtrmac/gpgme master
github.com/Nvveen/Gotty master
-github.com/opencontainers/go-digest aa2ec055abd10d26d539eb630a92241b781ce4bc
+github.com/opencontainers/go-digest c9281466c8b2f606084ac71339773efd177436e7
github.com/opencontainers/image-spec v1.0.0
github.com/opencontainers/runc master
github.com/opencontainers/runtime-spec v1.0.0
@@ -55,10 +55,14 @@ github.com/xeipuuv/gojsonreference master
github.com/xeipuuv/gojsonschema master
golang.org/x/crypto master
golang.org/x/net master
+golang.org/x/sync 42b317875d0fa942474b76e1b46a6060d720ae6e
golang.org/x/sys master
golang.org/x/text master
-gopkg.in/cheggaaa/pb.v1 v1.0.13
+gopkg.in/cheggaaa/pb.v1 v1.0.27
gopkg.in/yaml.v2 cd8b52f8269e0feb286dfeef29f8fe4d5b397e0b
k8s.io/apimachinery master
k8s.io/client-go master
k8s.io/kubernetes master
+github.com/klauspost/pgzip v1.2.1
+github.com/klauspost/compress v1.4.1
+github.com/klauspost/cpuid v1.2.0
diff --git a/vendor/github.com/containers/image/copy/copy.go b/vendor/github.com/containers/image/copy/copy.go
index 013080e8d..89c7e580f 100644
--- a/vendor/github.com/containers/image/copy/copy.go
+++ b/vendor/github.com/containers/image/copy/copy.go
@@ -2,7 +2,6 @@ package copy
import (
"bytes"
- "compress/gzip"
"context"
"fmt"
"io"
@@ -10,6 +9,7 @@ import (
"reflect"
"runtime"
"strings"
+ "sync"
"time"
"github.com/containers/image/image"
@@ -18,9 +18,11 @@ import (
"github.com/containers/image/signature"
"github.com/containers/image/transports"
"github.com/containers/image/types"
+ "github.com/klauspost/pgzip"
"github.com/opencontainers/go-digest"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
+ "golang.org/x/sync/semaphore"
pb "gopkg.in/cheggaaa/pb.v1"
)
@@ -32,6 +34,10 @@ type digestingReader struct {
validationSucceeded bool
}
+// maxParallelDownloads is used to limit the maxmimum number of parallel
+// downloads. Let's follow Firefox by limiting it to 6.
+var maxParallelDownloads = 6
+
// newDigestingReader returns an io.Reader implementation with contents of source, which will eventually return a non-EOF error
// or set validationSucceeded/validationFailed to true if the source stream does/does not match expectedDigest.
// (neither is set if EOF is never reached).
@@ -81,6 +87,7 @@ type copier struct {
progressInterval time.Duration
progress chan types.ProgressProperties
blobInfoCache types.BlobInfoCache
+ copyInParallel bool
}
// imageCopier tracks state specific to a single image (possibly an item of a manifest list)
@@ -145,12 +152,14 @@ func Image(ctx context.Context, policyContext *signature.PolicyContext, destRef,
}
}()
+ copyInParallel := dest.HasThreadSafePutBlob() && rawSource.HasThreadSafeGetBlob()
c := &copier{
dest: dest,
rawSource: rawSource,
reportWriter: reportWriter,
progressInterval: options.ProgressInterval,
progress: options.Progress,
+ copyInParallel: copyInParallel,
// FIXME? The cache is used for sources and destinations equally, but we only have a SourceCtx and DestinationCtx.
// For now, use DestinationCtx (because blob reuse changes the behavior of the destination side more); eventually
// we might want to add a separate CommonCtx — or would that be too confusing?
@@ -380,11 +389,26 @@ func (ic *imageCopier) updateEmbeddedDockerReference() error {
return nil
}
+// shortDigest returns the first 12 characters of the digest.
+func shortDigest(d digest.Digest) string {
+ return d.Encoded()[:12]
+}
+
+// createProgressBar creates a pb.ProgressBar.
+func createProgressBar(srcInfo types.BlobInfo, kind string, writer io.Writer) *pb.ProgressBar {
+ bar := pb.New(int(srcInfo.Size)).SetUnits(pb.U_BYTES)
+ bar.SetMaxWidth(80)
+ bar.ShowTimeLeft = false
+ bar.ShowPercent = false
+ bar.Prefix(fmt.Sprintf("Copying %s %s:", kind, shortDigest(srcInfo.Digest)))
+ bar.Output = writer
+ return bar
+}
+
// copyLayers copies layers from ic.src/ic.c.rawSource to dest, using and updating ic.manifestUpdates if necessary and ic.canModifyManifest.
func (ic *imageCopier) copyLayers(ctx context.Context) error {
srcInfos := ic.src.LayerInfos()
- destInfos := []types.BlobInfo{}
- diffIDs := []digest.Digest{}
+ numLayers := len(srcInfos)
updatedSrcInfos, err := ic.src.LayerInfosForCopy(ctx)
if err != nil {
return err
@@ -397,30 +421,83 @@ func (ic *imageCopier) copyLayers(ctx context.Context) error {
srcInfos = updatedSrcInfos
srcInfosUpdated = true
}
- for _, srcLayer := range srcInfos {
- var (
- destInfo types.BlobInfo
- diffID digest.Digest
- err error
- )
+
+ type copyLayerData struct {
+ destInfo types.BlobInfo
+ diffID digest.Digest
+ err error
+ }
+
+ // copyGroup is used to determine if all layers are copied
+ copyGroup := sync.WaitGroup{}
+ copyGroup.Add(numLayers)
+ // copySemaphore is used to limit the number of parallel downloads to
+ // avoid malicious images causing troubles and to be nice to servers.
+ var copySemaphore *semaphore.Weighted
+ if ic.c.copyInParallel {
+ copySemaphore = semaphore.NewWeighted(int64(maxParallelDownloads))
+ } else {
+ copySemaphore = semaphore.NewWeighted(int64(1))
+ }
+
+ data := make([]copyLayerData, numLayers)
+ copyLayerHelper := func(index int, srcLayer types.BlobInfo, bar *pb.ProgressBar) {
+ defer bar.Finish()
+ defer copySemaphore.Release(1)
+ defer copyGroup.Done()
+ cld := copyLayerData{}
if ic.c.dest.AcceptsForeignLayerURLs() && len(srcLayer.URLs) != 0 {
// DiffIDs are, currently, needed only when converting from schema1.
// In which case src.LayerInfos will not have URLs because schema1
// does not support them.
if ic.diffIDsAreNeeded {
- return errors.New("getting DiffID for foreign layers is unimplemented")
+ cld.err = errors.New("getting DiffID for foreign layers is unimplemented")
+ bar.Prefix(fmt.Sprintf("Skipping blob %s (DiffID foreign layer unimplemented):", shortDigest(srcLayer.Digest)))
+ bar.Finish()
+ } else {
+ cld.destInfo = srcLayer
+ logrus.Debugf("Skipping foreign layer %q copy to %s\n", cld.destInfo.Digest, ic.c.dest.Reference().Transport().Name())
+ bar.Prefix(fmt.Sprintf("Skipping blob %s (foreign layer):", shortDigest(srcLayer.Digest)))
+ bar.Add64(bar.Total)
+ bar.Finish()
}
- destInfo = srcLayer
- ic.c.Printf("Skipping foreign layer %q copy to %s\n", destInfo.Digest, ic.c.dest.Reference().Transport().Name())
} else {
- destInfo, diffID, err = ic.copyLayer(ctx, srcLayer)
- if err != nil {
- return err
- }
+ cld.destInfo, cld.diffID, cld.err = ic.copyLayer(ctx, srcLayer, bar)
}
- destInfos = append(destInfos, destInfo)
- diffIDs = append(diffIDs, diffID)
+ data[index] = cld
}
+
+ progressBars := make([]*pb.ProgressBar, numLayers)
+ for i, srcInfo := range srcInfos {
+ bar := createProgressBar(srcInfo, "blob", nil)
+ progressBars[i] = bar
+ }
+
+ progressPool := pb.NewPool(progressBars...)
+ progressPool.Output = ic.c.reportWriter
+ if err := progressPool.Start(); err != nil {
+ return errors.Wrapf(err, "error creating progress-bar pool")
+ }
+
+ for i, srcLayer := range srcInfos {
+ copySemaphore.Acquire(ctx, 1)
+ go copyLayerHelper(i, srcLayer, progressBars[i])
+ }
+
+ destInfos := make([]types.BlobInfo, numLayers)
+ diffIDs := make([]digest.Digest, numLayers)
+
+ copyGroup.Wait()
+ progressPool.Stop()
+
+ for i, cld := range data {
+ if cld.err != nil {
+ return cld.err
+ }
+ destInfos[i] = cld.destInfo
+ diffIDs[i] = cld.diffID
+ }
+
ic.manifestUpdates.InformationOnly.LayerInfos = destInfos
if ic.diffIDsAreNeeded {
ic.manifestUpdates.InformationOnly.LayerDiffIDs = diffIDs
@@ -487,12 +564,14 @@ func (ic *imageCopier) copyUpdatedConfigAndManifest(ctx context.Context) ([]byte
func (c *copier) copyConfig(ctx context.Context, src types.Image) error {
srcInfo := src.ConfigInfo()
if srcInfo.Digest != "" {
- c.Printf("Copying config %s\n", srcInfo.Digest)
configBlob, err := src.ConfigBlob(ctx)
if err != nil {
return errors.Wrapf(err, "Error reading config blob %s", srcInfo.Digest)
}
- destInfo, err := c.copyBlobFromStream(ctx, bytes.NewReader(configBlob), srcInfo, nil, false, true)
+ bar := createProgressBar(srcInfo, "config", c.reportWriter)
+ defer bar.Finish()
+ bar.Start()
+ destInfo, err := c.copyBlobFromStream(ctx, bytes.NewReader(configBlob), srcInfo, nil, false, true, bar)
if err != nil {
return err
}
@@ -512,7 +591,7 @@ type diffIDResult struct {
// copyLayer copies a layer with srcInfo (with known Digest and possibly known Size) in src to dest, perhaps compressing it if canCompress,
// and returns a complete blobInfo of the copied layer, and a value for LayerDiffIDs if diffIDIsNeeded
-func (ic *imageCopier) copyLayer(ctx context.Context, srcInfo types.BlobInfo) (types.BlobInfo, digest.Digest, error) {
+func (ic *imageCopier) copyLayer(ctx context.Context, srcInfo types.BlobInfo, bar *pb.ProgressBar) (types.BlobInfo, digest.Digest, error) {
cachedDiffID := ic.c.blobInfoCache.UncompressedDigest(srcInfo.Digest) // May be ""
diffIDIsNeeded := ic.diffIDsAreNeeded && cachedDiffID == ""
@@ -523,13 +602,14 @@ func (ic *imageCopier) copyLayer(ctx context.Context, srcInfo types.BlobInfo) (t
return types.BlobInfo{}, "", errors.Wrapf(err, "Error trying to reuse blob %s at destination", srcInfo.Digest)
}
if reused {
- ic.c.Printf("Skipping fetch of repeat blob %s\n", srcInfo.Digest)
+ bar.Prefix(fmt.Sprintf("Skipping blob %s (already present):", shortDigest(srcInfo.Digest)))
+ bar.Add64(bar.Total)
+ bar.Finish()
return blobInfo, cachedDiffID, nil
}
}
// Fallback: copy the layer, computing the diffID if we need to do so
- ic.c.Printf("Copying blob %s\n", srcInfo.Digest)
srcStream, srcBlobSize, err := ic.c.rawSource.GetBlob(ctx, srcInfo, ic.c.blobInfoCache)
if err != nil {
return types.BlobInfo{}, "", errors.Wrapf(err, "Error reading blob %s", srcInfo.Digest)
@@ -537,7 +617,7 @@ func (ic *imageCopier) copyLayer(ctx context.Context, srcInfo types.BlobInfo) (t
defer srcStream.Close()
blobInfo, diffIDChan, err := ic.copyLayerFromStream(ctx, srcStream, types.BlobInfo{Digest: srcInfo.Digest, Size: srcBlobSize},
- diffIDIsNeeded)
+ diffIDIsNeeded, bar)
if err != nil {
return types.BlobInfo{}, "", err
}
@@ -565,7 +645,7 @@ func (ic *imageCopier) copyLayer(ctx context.Context, srcInfo types.BlobInfo) (t
// perhaps compressing the stream if canCompress,
// and returns a complete blobInfo of the copied blob and perhaps a <-chan diffIDResult if diffIDIsNeeded, to be read by the caller.
func (ic *imageCopier) copyLayerFromStream(ctx context.Context, srcStream io.Reader, srcInfo types.BlobInfo,
- diffIDIsNeeded bool) (types.BlobInfo, <-chan diffIDResult, error) {
+ diffIDIsNeeded bool, bar *pb.ProgressBar) (types.BlobInfo, <-chan diffIDResult, error) {
var getDiffIDRecorder func(compression.DecompressorFunc) io.Writer // = nil
var diffIDChan chan diffIDResult
@@ -589,7 +669,7 @@ func (ic *imageCopier) copyLayerFromStream(ctx context.Context, srcStream io.Rea
return pipeWriter
}
}
- blobInfo, err := ic.c.copyBlobFromStream(ctx, srcStream, srcInfo, getDiffIDRecorder, ic.canModifyManifest, false) // Sets err to nil on success
+ blobInfo, err := ic.c.copyBlobFromStream(ctx, srcStream, srcInfo, getDiffIDRecorder, ic.canModifyManifest, false, bar) // Sets err to nil on success
return blobInfo, diffIDChan, err
// We need the defer … pipeWriter.CloseWithError() to happen HERE so that the caller can block on reading from diffIDChan
}
@@ -626,7 +706,7 @@ func computeDiffID(stream io.Reader, decompressor compression.DecompressorFunc)
// and returns a complete blobInfo of the copied blob.
func (c *copier) copyBlobFromStream(ctx context.Context, srcStream io.Reader, srcInfo types.BlobInfo,
getOriginalLayerCopyWriter func(decompressor compression.DecompressorFunc) io.Writer,
- canModifyBlob bool, isConfig bool) (types.BlobInfo, error) {
+ canModifyBlob bool, isConfig bool, bar *pb.ProgressBar) (types.BlobInfo, error) {
// The copying happens through a pipeline of connected io.Readers.
// === Input: srcStream
@@ -649,16 +729,7 @@ func (c *copier) copyBlobFromStream(ctx context.Context, srcStream io.Reader, sr
return types.BlobInfo{}, errors.Wrapf(err, "Error reading blob %s", srcInfo.Digest)
}
isCompressed := decompressor != nil
-
- // === Report progress using a pb.Reader.
- bar := pb.New(int(srcInfo.Size)).SetUnits(pb.U_BYTES)
- bar.Output = c.reportWriter
- bar.SetMaxWidth(80)
- bar.ShowTimeLeft = false
- bar.ShowPercent = false
- bar.Start()
destStream = bar.NewProxyReader(destStream)
- defer bar.Finish()
// === Send a copy of the original, uncompressed, stream, to a separate path if necessary.
var originalLayerReader io.Reader // DO NOT USE this other than to drain the input if no other consumer in the pipeline has done so.
@@ -761,7 +832,7 @@ func compressGoroutine(dest *io.PipeWriter, src io.Reader) {
dest.CloseWithError(err) // CloseWithError(nil) is equivalent to Close()
}()
- zipper := gzip.NewWriter(dest)
+ zipper := pgzip.NewWriter(dest)
defer zipper.Close()
_, err = io.Copy(zipper, src) // Sets err to nil, i.e. causes dest.Close()
diff --git a/vendor/github.com/containers/image/directory/directory_dest.go b/vendor/github.com/containers/image/directory/directory_dest.go
index d75c195b2..4b2ab022e 100644
--- a/vendor/github.com/containers/image/directory/directory_dest.go
+++ b/vendor/github.com/containers/image/directory/directory_dest.go
@@ -124,6 +124,11 @@ func (d *dirImageDestination) IgnoresEmbeddedDockerReference() bool {
return false // N/A, DockerReference() returns nil.
}
+// HasThreadSafePutBlob indicates whether PutBlob can be executed concurrently.
+func (d *dirImageDestination) HasThreadSafePutBlob() bool {
+ return false
+}
+
// PutBlob writes contents of stream and returns data representing the result (with all data filled in).
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
// inputInfo.Size is the expected length of stream, if known.
diff --git a/vendor/github.com/containers/image/directory/directory_src.go b/vendor/github.com/containers/image/directory/directory_src.go
index 3625def80..59b625397 100644
--- a/vendor/github.com/containers/image/directory/directory_src.go
+++ b/vendor/github.com/containers/image/directory/directory_src.go
@@ -48,6 +48,11 @@ func (s *dirImageSource) GetManifest(ctx context.Context, instanceDigest *digest
return m, manifest.GuessMIMEType(m), err
}
+// HasThreadSafeGetBlob indicates whether GetBlob can be executed concurrently.
+func (s *dirImageSource) HasThreadSafeGetBlob() bool {
+ return false
+}
+
// GetBlob returns a stream for the specified blob, and the blob’s size (or -1 if unknown).
// The Digest field in BlobInfo is guaranteed to be provided, Size may be -1 and MediaType may be optionally provided.
// May update BlobInfoCache, preferably after it knows for certain that a blob truly exists at a specific location.
diff --git a/vendor/github.com/containers/image/docker/docker_client.go b/vendor/github.com/containers/image/docker/docker_client.go
index 7f55dbe7f..23d2ac70f 100644
--- a/vendor/github.com/containers/image/docker/docker_client.go
+++ b/vendor/github.com/containers/image/docker/docker_client.go
@@ -13,6 +13,7 @@ import (
"path/filepath"
"strconv"
"strings"
+ "sync"
"time"
"github.com/containers/image/docker/reference"
@@ -84,6 +85,7 @@ type dockerClient struct {
registry string
client *http.Client
insecureSkipTLSVerify bool
+
// The following members are not set by newDockerClient and must be set by callers if needed.
username string
password string
@@ -95,8 +97,13 @@ type dockerClient struct {
scheme string // Empty value also used to indicate detectProperties() has not yet succeeded.
challenges []challenge
supportsSignatures bool
- // Private state for setupRequestAuth
- tokenCache map[string]bearerToken
+
+ // Private state for setupRequestAuth (key: string, value: bearerToken)
+ tokenCache sync.Map
+ // detectPropertiesError caches the initial error.
+ detectPropertiesError error
+ // detectPropertiesOnce is used to execuute detectProperties() at most once in in makeRequest().
+ detectPropertiesOnce sync.Once
}
type authScope struct {
@@ -262,7 +269,6 @@ func newDockerClient(sys *types.SystemContext, registry, reference string) (*doc
registry: registry,
client: &http.Client{Transport: tr},
insecureSkipTLSVerify: skipVerify,
- tokenCache: map[string]bearerToken{},
}, nil
}
@@ -473,14 +479,18 @@ func (c *dockerClient) setupRequestAuth(req *http.Request) error {
cacheKey = fmt.Sprintf("%s:%s", c.extraScope.remoteName, c.extraScope.actions)
scopes = append(scopes, *c.extraScope)
}
- token, ok := c.tokenCache[cacheKey]
- if !ok || time.Now().After(token.expirationTime) {
+ var token bearerToken
+ t, inCache := c.tokenCache.Load(cacheKey)
+ if inCache {
+ token = t.(bearerToken)
+ }
+ if !inCache || time.Now().After(token.expirationTime) {
t, err := c.getBearerToken(req.Context(), challenge, scopes)
if err != nil {
return err
}
token = *t
- c.tokenCache[cacheKey] = token
+ c.tokenCache.Store(cacheKey, token)
}
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token.Token))
return nil
@@ -545,9 +555,9 @@ func (c *dockerClient) getBearerToken(ctx context.Context, challenge challenge,
return newBearerTokenFromJSONBlob(tokenBlob)
}
-// detectProperties detects various properties of the registry.
-// See the dockerClient documentation for members which are affected by this.
-func (c *dockerClient) detectProperties(ctx context.Context) error {
+// detectPropertiesHelper performs the work of detectProperties which executes
+// it at most once.
+func (c *dockerClient) detectPropertiesHelper(ctx context.Context) error {
if c.scheme != "" {
return nil
}
@@ -604,6 +614,13 @@ func (c *dockerClient) detectProperties(ctx context.Context) error {
return err
}
+// detectProperties detects various properties of the registry.
+// See the dockerClient documentation for members which are affected by this.
+func (c *dockerClient) detectProperties(ctx context.Context) error {
+ c.detectPropertiesOnce.Do(func() { c.detectPropertiesError = c.detectPropertiesHelper(ctx) })
+ return c.detectPropertiesError
+}
+
// getExtensionsSignatures returns signatures from the X-Registry-Supports-Signatures API extension,
// using the original data structures.
func (c *dockerClient) getExtensionsSignatures(ctx context.Context, ref dockerReference, manifestDigest digest.Digest) (*extensionSignatureList, error) {
diff --git a/vendor/github.com/containers/image/docker/docker_image_dest.go b/vendor/github.com/containers/image/docker/docker_image_dest.go
index 2f471f648..973d160d0 100644
--- a/vendor/github.com/containers/image/docker/docker_image_dest.go
+++ b/vendor/github.com/containers/image/docker/docker_image_dest.go
@@ -111,6 +111,11 @@ func (c *sizeCounter) Write(p []byte) (n int, err error) {
return len(p), nil
}
+// HasThreadSafePutBlob indicates whether PutBlob can be executed concurrently.
+func (d *dockerImageDestination) HasThreadSafePutBlob() bool {
+ return false
+}
+
// PutBlob writes contents of stream and returns data representing the result (with all data filled in).
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
// inputInfo.Size is the expected length of stream, if known.
diff --git a/vendor/github.com/containers/image/docker/docker_image_src.go b/vendor/github.com/containers/image/docker/docker_image_src.go
index fbed6297f..c88ff2f34 100644
--- a/vendor/github.com/containers/image/docker/docker_image_src.go
+++ b/vendor/github.com/containers/image/docker/docker_image_src.go
@@ -161,6 +161,11 @@ func getBlobSize(resp *http.Response) int64 {
return size
}
+// HasThreadSafeGetBlob indicates whether GetBlob can be executed concurrently.
+func (s *dockerImageSource) HasThreadSafeGetBlob() bool {
+ return true
+}
+
// GetBlob returns a stream for the specified blob, and the blob’s size (or -1 if unknown).
// The Digest field in BlobInfo is guaranteed to be provided, Size may be -1 and MediaType may be optionally provided.
// May update BlobInfoCache, preferably after it knows for certain that a blob truly exists at a specific location.
diff --git a/vendor/github.com/containers/image/docker/tarfile/dest.go b/vendor/github.com/containers/image/docker/tarfile/dest.go
index ad8a48a03..5f30eddbc 100644
--- a/vendor/github.com/containers/image/docker/tarfile/dest.go
+++ b/vendor/github.com/containers/image/docker/tarfile/dest.go
@@ -82,6 +82,11 @@ func (d *Destination) IgnoresEmbeddedDockerReference() bool {
return false // N/A, we only accept schema2 images where EmbeddedDockerReferenceConflicts() is always false.
}
+// HasThreadSafePutBlob indicates whether PutBlob can be executed concurrently.
+func (d *Destination) HasThreadSafePutBlob() bool {
+ return false
+}
+
// PutBlob writes contents of stream and returns data representing the result (with all data filled in).
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
// inputInfo.Size is the expected length of stream, if known.
diff --git a/vendor/github.com/containers/image/docker/tarfile/src.go b/vendor/github.com/containers/image/docker/tarfile/src.go
index d94ed9783..889e5f8e8 100644
--- a/vendor/github.com/containers/image/docker/tarfile/src.go
+++ b/vendor/github.com/containers/image/docker/tarfile/src.go
@@ -397,6 +397,11 @@ func (r uncompressedReadCloser) Close() error {
return res
}
+// HasThreadSafeGetBlob indicates whether GetBlob can be executed concurrently.
+func (s *Source) HasThreadSafeGetBlob() bool {
+ return false
+}
+
// GetBlob returns a stream for the specified blob, and the blob’s size (or -1 if unknown).
// The Digest field in BlobInfo is guaranteed to be provided, Size may be -1 and MediaType may be optionally provided.
// May update BlobInfoCache, preferably after it knows for certain that a blob truly exists at a specific location.
diff --git a/vendor/github.com/containers/image/oci/archive/oci_dest.go b/vendor/github.com/containers/image/oci/archive/oci_dest.go
index 3997ac2ee..9571c37e2 100644
--- a/vendor/github.com/containers/image/oci/archive/oci_dest.go
+++ b/vendor/github.com/containers/image/oci/archive/oci_dest.go
@@ -77,6 +77,11 @@ func (d *ociArchiveImageDestination) IgnoresEmbeddedDockerReference() bool {
return d.unpackedDest.IgnoresEmbeddedDockerReference()
}
+// HasThreadSafePutBlob indicates whether PutBlob can be executed concurrently.
+func (d *ociArchiveImageDestination) HasThreadSafePutBlob() bool {
+ return false
+}
+
// PutBlob writes contents of stream and returns data representing the result.
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
// inputInfo.Size is the expected length of stream, if known.
diff --git a/vendor/github.com/containers/image/oci/archive/oci_src.go b/vendor/github.com/containers/image/oci/archive/oci_src.go
index 084d818f7..ca74f950b 100644
--- a/vendor/github.com/containers/image/oci/archive/oci_src.go
+++ b/vendor/github.com/containers/image/oci/archive/oci_src.go
@@ -76,6 +76,11 @@ func (s *ociArchiveImageSource) GetManifest(ctx context.Context, instanceDigest
return s.unpackedSrc.GetManifest(ctx, instanceDigest)
}
+// HasThreadSafeGetBlob indicates whether GetBlob can be executed concurrently.
+func (s *ociArchiveImageSource) HasThreadSafeGetBlob() bool {
+ return false
+}
+
// GetBlob returns a stream for the specified blob, and the blob’s size (or -1 if unknown).
// The Digest field in BlobInfo is guaranteed to be provided, Size may be -1 and MediaType may be optionally provided.
// May update BlobInfoCache, preferably after it knows for certain that a blob truly exists at a specific location.
diff --git a/vendor/github.com/containers/image/oci/layout/oci_dest.go b/vendor/github.com/containers/image/oci/layout/oci_dest.go
index b5a6e08f8..db102184d 100644
--- a/vendor/github.com/containers/image/oci/layout/oci_dest.go
+++ b/vendor/github.com/containers/image/oci/layout/oci_dest.go
@@ -107,6 +107,11 @@ func (d *ociImageDestination) IgnoresEmbeddedDockerReference() bool {
return false // N/A, DockerReference() returns nil.
}
+// HasThreadSafePutBlob indicates whether PutBlob can be executed concurrently.
+func (d *ociImageDestination) HasThreadSafePutBlob() bool {
+ return false
+}
+
// PutBlob writes contents of stream and returns data representing the result.
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
// inputInfo.Size is the expected length of stream, if known.
diff --git a/vendor/github.com/containers/image/oci/layout/oci_src.go b/vendor/github.com/containers/image/oci/layout/oci_src.go
index 086a7040d..cc536f69e 100644
--- a/vendor/github.com/containers/image/oci/layout/oci_src.go
+++ b/vendor/github.com/containers/image/oci/layout/oci_src.go
@@ -92,6 +92,11 @@ func (s *ociImageSource) GetManifest(ctx context.Context, instanceDigest *digest
return m, mimeType, nil
}
+// HasThreadSafeGetBlob indicates whether GetBlob can be executed concurrently.
+func (s *ociImageSource) HasThreadSafeGetBlob() bool {
+ return false
+}
+
// GetBlob returns a stream for the specified blob, and the blob’s size (or -1 if unknown).
// The Digest field in BlobInfo is guaranteed to be provided, Size may be -1 and MediaType may be optionally provided.
// May update BlobInfoCache, preferably after it knows for certain that a blob truly exists at a specific location.
diff --git a/vendor/github.com/containers/image/openshift/openshift.go b/vendor/github.com/containers/image/openshift/openshift.go
index 0cce1e6c7..814c3eea1 100644
--- a/vendor/github.com/containers/image/openshift/openshift.go
+++ b/vendor/github.com/containers/image/openshift/openshift.go
@@ -211,6 +211,11 @@ func (s *openshiftImageSource) GetManifest(ctx context.Context, instanceDigest *
return s.docker.GetManifest(ctx, instanceDigest)
}
+// HasThreadSafeGetBlob indicates whether GetBlob can be executed concurrently.
+func (s *openshiftImageSource) HasThreadSafeGetBlob() bool {
+ return false
+}
+
// GetBlob returns a stream for the specified blob, and the blob’s size (or -1 if unknown).
// The Digest field in BlobInfo is guaranteed to be provided, Size may be -1 and MediaType may be optionally provided.
// May update BlobInfoCache, preferably after it knows for certain that a blob truly exists at a specific location.
@@ -378,6 +383,11 @@ func (d *openshiftImageDestination) IgnoresEmbeddedDockerReference() bool {
return d.docker.IgnoresEmbeddedDockerReference()
}
+// HasThreadSafePutBlob indicates whether PutBlob can be executed concurrently.
+func (d *openshiftImageDestination) HasThreadSafePutBlob() bool {
+ return false
+}
+
// PutBlob writes contents of stream and returns data representing the result (with all data filled in).
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
// inputInfo.Size is the expected length of stream, if known.
diff --git a/vendor/github.com/containers/image/ostree/ostree_dest.go b/vendor/github.com/containers/image/ostree/ostree_dest.go
index 064898948..d69f4fa33 100644
--- a/vendor/github.com/containers/image/ostree/ostree_dest.go
+++ b/vendor/github.com/containers/image/ostree/ostree_dest.go
@@ -4,7 +4,6 @@ package ostree
import (
"bytes"
- "compress/gzip"
"context"
"encoding/base64"
"encoding/json"
@@ -24,6 +23,7 @@ import (
"github.com/containers/image/manifest"
"github.com/containers/image/types"
"github.com/containers/storage/pkg/archive"
+ "github.com/klauspost/pgzip"
"github.com/opencontainers/go-digest"
selinux "github.com/opencontainers/selinux/go-selinux"
"github.com/ostreedev/ostree-go/pkg/otbuiltin"
@@ -132,6 +132,11 @@ func (d *ostreeImageDestination) IgnoresEmbeddedDockerReference() bool {
return false // N/A, DockerReference() returns nil.
}
+// HasThreadSafePutBlob indicates whether PutBlob can be executed concurrently.
+func (d *ostreeImageDestination) HasThreadSafePutBlob() bool {
+ return false
+}
+
// PutBlob writes contents of stream and returns data representing the result.
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
// inputInfo.Size is the expected length of stream, if known.
@@ -249,7 +254,7 @@ func (d *ostreeImageDestination) ostreeCommit(repo *otbuiltin.Repo, branch strin
}
func generateTarSplitMetadata(output *bytes.Buffer, file string) (digest.Digest, int64, error) {
- mfz := gzip.NewWriter(output)
+ mfz := pgzip.NewWriter(output)
defer mfz.Close()
metaPacker := storage.NewJSONPacker(mfz)
diff --git a/vendor/github.com/containers/image/ostree/ostree_src.go b/vendor/github.com/containers/image/ostree/ostree_src.go
index e73cae198..df432c9f3 100644
--- a/vendor/github.com/containers/image/ostree/ostree_src.go
+++ b/vendor/github.com/containers/image/ostree/ostree_src.go
@@ -4,7 +4,6 @@ package ostree
import (
"bytes"
- "compress/gzip"
"context"
"encoding/base64"
"fmt"
@@ -17,6 +16,7 @@ import (
"github.com/containers/image/manifest"
"github.com/containers/image/types"
"github.com/containers/storage/pkg/ioutils"
+ "github.com/klauspost/pgzip"
"github.com/opencontainers/go-digest"
glib "github.com/ostreedev/ostree-go/pkg/glibobject"
"github.com/pkg/errors"
@@ -255,6 +255,11 @@ func (s *ostreeImageSource) readSingleFile(commit, path string) (io.ReadCloser,
return getter.Get(path)
}
+// HasThreadSafeGetBlob indicates whether GetBlob can be executed concurrently.
+func (s *ostreeImageSource) HasThreadSafeGetBlob() bool {
+ return false
+}
+
// GetBlob returns a stream for the specified blob, and the blob’s size (or -1 if unknown).
// The Digest field in BlobInfo is guaranteed to be provided, Size may be -1 and MediaType may be optionally provided.
// May update BlobInfoCache, preferably after it knows for certain that a blob truly exists at a specific location.
@@ -304,7 +309,7 @@ func (s *ostreeImageSource) GetBlob(ctx context.Context, info types.BlobInfo, ca
}
mf := bytes.NewReader(tarsplit)
- mfz, err := gzip.NewReader(mf)
+ mfz, err := pgzip.NewReader(mf)
if err != nil {
return nil, 0, err
}
diff --git a/vendor/github.com/containers/image/pkg/blobinfocache/default.go b/vendor/github.com/containers/image/pkg/blobinfocache/default.go
index 6da9f2805..459ae5c06 100644
--- a/vendor/github.com/containers/image/pkg/blobinfocache/default.go
+++ b/vendor/github.com/containers/image/pkg/blobinfocache/default.go
@@ -54,7 +54,7 @@ func DefaultCache(sys *types.SystemContext) types.BlobInfoCache {
}
path := filepath.Join(dir, blobInfoCacheFilename)
if err := os.MkdirAll(dir, 0700); err != nil {
- logrus.Debugf("Error creating parent directories for %s, using a memory-only cache: %v", err)
+ logrus.Debugf("Error creating parent directories for %s, using a memory-only cache: %v", blobInfoCacheFilename, err)
return NewMemoryCache()
}
diff --git a/vendor/github.com/containers/image/pkg/compression/compression.go b/vendor/github.com/containers/image/pkg/compression/compression.go
index a39523e4f..aad2bfcf2 100644
--- a/vendor/github.com/containers/image/pkg/compression/compression.go
+++ b/vendor/github.com/containers/image/pkg/compression/compression.go
@@ -3,10 +3,10 @@ package compression
import (
"bytes"
"compress/bzip2"
- "compress/gzip"
"io"
"io/ioutil"
+ "github.com/klauspost/pgzip"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/ulikunitz/xz"
@@ -18,7 +18,7 @@ type DecompressorFunc func(io.Reader) (io.ReadCloser, error)
// GzipDecompressor is a DecompressorFunc for the gzip compression algorithm.
func GzipDecompressor(r io.Reader) (io.ReadCloser, error) {
- return gzip.NewReader(r)
+ return pgzip.NewReader(r)
}
// Bzip2Decompressor is a DecompressorFunc for the bzip2 compression algorithm.
diff --git a/vendor/github.com/containers/image/pkg/sysregistriesv2/system_registries_v2.go b/vendor/github.com/containers/image/pkg/sysregistriesv2/system_registries_v2.go
index afc7312d1..9e3e9cfe1 100644
--- a/vendor/github.com/containers/image/pkg/sysregistriesv2/system_registries_v2.go
+++ b/vendor/github.com/containers/image/pkg/sysregistriesv2/system_registries_v2.go
@@ -318,8 +318,37 @@ func FindUnqualifiedSearchRegistries(ctx *types.SystemContext) ([]Registry, erro
return unqualified, nil
}
-// FindRegistry returns the Registry with the longest prefix for ref. If no
-// Registry prefixes the image, nil is returned.
+// refMatchesPrefix returns true iff ref,
+// which is a registry, repository namespace, repository or image reference (as formatted by
+// reference.Domain(), reference.Named.Name() or reference.Reference.String()
+// — note that this requires the name to start with an explicit hostname!),
+// matches a Registry.Prefix value.
+// (This is split from the caller primarily to make testing easier.)
+func refMatchesPrefix(ref, prefix string) bool {
+ switch {
+ case len(ref) < len(prefix):
+ return false
+ case len(ref) == len(prefix):
+ return ref == prefix
+ case len(ref) > len(prefix):
+ if !strings.HasPrefix(ref, prefix) {
+ return false
+ }
+ c := ref[len(prefix)]
+ // This allows "example.com:5000" to match "example.com",
+ // which is unintended; that will get fixed eventually, DON'T RELY
+ // ON THE CURRENT BEHAVIOR.
+ return c == ':' || c == '/' || c == '@'
+ default:
+ panic("Internal error: impossible comparison outcome")
+ }
+}
+
+// FindRegistry returns the Registry with the longest prefix for ref,
+// which is a registry, repository namespace repository or image reference (as formatted by
+// reference.Domain(), reference.Named.Name() or reference.Reference.String()
+// — note that this requires the name to start with an explicit hostname!).
+// If no Registry prefixes the image, nil is returned.
func FindRegistry(ctx *types.SystemContext, ref string) (*Registry, error) {
registries, err := GetRegistries(ctx)
if err != nil {
@@ -329,7 +358,7 @@ func FindRegistry(ctx *types.SystemContext, ref string) (*Registry, error) {
reg := Registry{}
prefixLen := 0
for _, r := range registries {
- if strings.HasPrefix(ref, r.Prefix+"/") || ref == r.Prefix {
+ if refMatchesPrefix(ref, r.Prefix) {
length := len(r.Prefix)
if length > prefixLen {
reg = r
diff --git a/vendor/github.com/containers/image/storage/storage_image.go b/vendor/github.com/containers/image/storage/storage_image.go
index bd6813119..b53fbdf6e 100644
--- a/vendor/github.com/containers/image/storage/storage_image.go
+++ b/vendor/github.com/containers/image/storage/storage_image.go
@@ -11,6 +11,7 @@ import (
"io/ioutil"
"os"
"path/filepath"
+ "sync"
"sync/atomic"
"github.com/containers/image/image"
@@ -47,6 +48,7 @@ type storageImageSource struct {
image *storage.Image
layerPosition map[digest.Digest]int // Where we are in reading a blob's layers
cachedManifest []byte // A cached copy of the manifest, if already known, or nil
+ getBlobMutex sync.Mutex // Mutex to sync state for parallel GetBlob executions
SignatureSizes []int `json:"signature-sizes,omitempty"` // List of sizes of each signature slice
}
@@ -56,6 +58,7 @@ type storageImageDestination struct {
nextTempFileID int32 // A counter that we use for computing filenames to assign to blobs
manifest []byte // Manifest contents, temporary
signatures []byte // Signature contents, temporary
+ putBlobMutex sync.Mutex // Mutex to sync state for parallel PutBlob executions
blobDiffIDs map[digest.Digest]digest.Digest // Mapping from layer blobsums to their corresponding DiffIDs
fileSizes map[digest.Digest]int64 // Mapping from layer blobsums to their sizes
filenames map[digest.Digest]string // Mapping from layer blobsums to names of files we used to hold them
@@ -91,15 +94,20 @@ func newImageSource(imageRef storageReference) (*storageImageSource, error) {
}
// Reference returns the image reference that we used to find this image.
-func (s storageImageSource) Reference() types.ImageReference {
+func (s *storageImageSource) Reference() types.ImageReference {
return s.imageRef
}
// Close cleans up any resources we tied up while reading the image.
-func (s storageImageSource) Close() error {
+func (s *storageImageSource) Close() error {
return nil
}
+// HasThreadSafeGetBlob indicates whether GetBlob can be executed concurrently.
+func (s *storageImageSource) HasThreadSafeGetBlob() bool {
+ return true
+}
+
// GetBlob returns a stream for the specified blob, and the blob’s size (or -1 if unknown).
// The Digest field in BlobInfo is guaranteed to be provided, Size may be -1 and MediaType may be optionally provided.
// May update BlobInfoCache, preferably after it knows for certain that a blob truly exists at a specific location.
@@ -137,8 +145,10 @@ func (s *storageImageSource) getBlobAndLayerID(info types.BlobInfo) (rc io.ReadC
// Step through the list of matching layers. Tests may want to verify that if we have multiple layers
// which claim to have the same contents, that we actually do have multiple layers, otherwise we could
// just go ahead and use the first one every time.
+ s.getBlobMutex.Lock()
i := s.layerPosition[info.Digest]
s.layerPosition[info.Digest] = i + 1
+ s.getBlobMutex.Unlock()
if len(layers) > 0 {
layer = layers[i%len(layers)]
}
@@ -300,7 +310,7 @@ func newImageDestination(imageRef storageReference) (*storageImageDestination, e
// Reference returns the reference used to set up this destination. Note that this should directly correspond to user's intent,
// e.g. it should use the public hostname instead of the result of resolving CNAMEs or following redirects.
-func (s storageImageDestination) Reference() types.ImageReference {
+func (s *storageImageDestination) Reference() types.ImageReference {
return s.imageRef
}
@@ -309,7 +319,7 @@ func (s *storageImageDestination) Close() error {
return os.RemoveAll(s.directory)
}
-func (s storageImageDestination) DesiredLayerCompression() types.LayerCompression {
+func (s *storageImageDestination) DesiredLayerCompression() types.LayerCompression {
// We ultimately have to decompress layers to populate trees on disk,
// so callers shouldn't bother compressing them before handing them to
// us, if they're not already compressed.
@@ -320,6 +330,11 @@ func (s *storageImageDestination) computeNextBlobCacheFile() string {
return filepath.Join(s.directory, fmt.Sprintf("%d", atomic.AddInt32(&s.nextTempFileID, 1)))
}
+// HasThreadSafePutBlob indicates whether PutBlob can be executed concurrently.
+func (s *storageImageDestination) HasThreadSafePutBlob() bool {
+ return true
+}
+
// PutBlob writes contents of stream and returns data representing the result.
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
// inputInfo.Size is the expected length of stream, if known.
@@ -370,9 +385,11 @@ func (s *storageImageDestination) PutBlob(ctx context.Context, stream io.Reader,
return errorBlobInfo, ErrBlobSizeMismatch
}
// Record information about the blob.
+ s.putBlobMutex.Lock()
s.blobDiffIDs[hasher.Digest()] = diffID.Digest()
s.fileSizes[hasher.Digest()] = counter.Count
s.filenames[hasher.Digest()] = filename
+ s.putBlobMutex.Unlock()
blobDigest := blobinfo.Digest
if blobDigest.Validate() != nil {
blobDigest = hasher.Digest()
@@ -398,6 +415,9 @@ func (s *storageImageDestination) PutBlob(ctx context.Context, stream io.Reader,
// If the transport can not reuse the requested blob, TryReusingBlob returns (false, {}, nil); it returns a non-nil error only on an unexpected failure.
// May use and/or update cache.
func (s *storageImageDestination) TryReusingBlob(ctx context.Context, blobinfo types.BlobInfo, cache types.BlobInfoCache, canSubstitute bool) (bool, types.BlobInfo, error) {
+ // lock the entire method as it executes fairly quickly
+ s.putBlobMutex.Lock()
+ defer s.putBlobMutex.Unlock()
if blobinfo.Digest == "" {
return false, types.BlobInfo{}, errors.Errorf(`Can not check for a blob with unknown digest`)
}
diff --git a/vendor/github.com/containers/image/tarball/tarball_src.go b/vendor/github.com/containers/image/tarball/tarball_src.go
index ee963b8d8..76e3e755f 100644
--- a/vendor/github.com/containers/image/tarball/tarball_src.go
+++ b/vendor/github.com/containers/image/tarball/tarball_src.go
@@ -2,7 +2,6 @@ package tarball
import (
"bytes"
- "compress/gzip"
"context"
"encoding/json"
"fmt"
@@ -14,7 +13,7 @@ import (
"time"
"github.com/containers/image/types"
-
+ "github.com/klauspost/pgzip"
digest "github.com/opencontainers/go-digest"
imgspecs "github.com/opencontainers/image-spec/specs-go"
imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1"
@@ -77,7 +76,7 @@ func (r *tarballReference) NewImageSource(ctx context.Context, sys *types.System
// Set up to digest the file after we maybe decompress it.
diffIDdigester := digest.Canonical.Digester()
- uncompressed, err := gzip.NewReader(reader)
+ uncompressed, err := pgzip.NewReader(reader)
if err == nil {
// It is compressed, so the diffID is the digest of the uncompressed version
reader = io.TeeReader(uncompressed, diffIDdigester.Hash())
@@ -207,6 +206,11 @@ func (is *tarballImageSource) Close() error {
return nil
}
+// HasThreadSafeGetBlob indicates whether GetBlob can be executed concurrently.
+func (is *tarballImageSource) HasThreadSafeGetBlob() bool {
+ return false
+}
+
// GetBlob returns a stream for the specified blob, and the blob’s size (or -1 if unknown).
// The Digest field in BlobInfo is guaranteed to be provided, Size may be -1 and MediaType may be optionally provided.
// May update BlobInfoCache, preferably after it knows for certain that a blob truly exists at a specific location.
diff --git a/vendor/github.com/containers/image/types/types.go b/vendor/github.com/containers/image/types/types.go
index dda332776..9fdab2314 100644
--- a/vendor/github.com/containers/image/types/types.go
+++ b/vendor/github.com/containers/image/types/types.go
@@ -198,6 +198,8 @@ type ImageSource interface {
// The Digest field in BlobInfo is guaranteed to be provided, Size may be -1 and MediaType may be optionally provided.
// May update BlobInfoCache, preferably after it knows for certain that a blob truly exists at a specific location.
GetBlob(context.Context, BlobInfo, BlobInfoCache) (io.ReadCloser, int64, error)
+ // HasThreadSafeGetBlob indicates whether GetBlob can be executed concurrently.
+ HasThreadSafeGetBlob() bool
// GetSignatures returns the image's signatures. It may use a remote (= slow) service.
// If instanceDigest is not nil, it contains a digest of the specific manifest instance to retrieve signatures for
// (when the primary manifest is a manifest list); this never happens if the primary manifest is not a manifest list
@@ -264,6 +266,8 @@ type ImageDestination interface {
// to any other readers for download using the supplied digest.
// If stream.Read() at any time, ESPECIALLY at end of input, returns an error, PutBlob MUST 1) fail, and 2) delete any data stored so far.
PutBlob(ctx context.Context, stream io.Reader, inputInfo BlobInfo, cache BlobInfoCache, isConfig bool) (BlobInfo, error)
+ // HasThreadSafePutBlob indicates whether PutBlob can be executed concurrently.
+ HasThreadSafePutBlob() bool
// TryReusingBlob checks whether the transport already contains, or can efficiently reuse, a blob, and if so, applies it to the current destination
// (e.g. if the blob is a filesystem layer, this signifies that the changes it describes need to be applied again when composing a filesystem tree).
// info.Digest must not be empty.
diff --git a/vendor/github.com/containers/image/vendor.conf b/vendor/github.com/containers/image/vendor.conf
index 88537981a..bbbb1a458 100644
--- a/vendor/github.com/containers/image/vendor.conf
+++ b/vendor/github.com/containers/image/vendor.conf
@@ -16,7 +16,7 @@ github.com/imdario/mergo 50d4dbd4eb0e84778abe37cefef140271d96fade
github.com/mattn/go-runewidth 14207d285c6c197daabb5c9793d63e7af9ab2d50
github.com/mistifyio/go-zfs c0224de804d438efd11ea6e52ada8014537d6062
github.com/mtrmac/gpgme b2432428689ca58c2b8e8dea9449d3295cf96fc9
-github.com/opencontainers/go-digest aa2ec055abd10d26d539eb630a92241b781ce4bc
+github.com/opencontainers/go-digest c9281466c8b2f606084ac71339773efd177436e7
github.com/opencontainers/image-spec v1.0.0
github.com/opencontainers/runc 6b1d0e76f239ffb435445e5ae316d2676c07c6e3
github.com/pborman/uuid 1b00554d822231195d1babd97ff4a781231955c9
@@ -26,8 +26,9 @@ github.com/stretchr/testify 4d4bfba8f1d1027c4fdbe371823030df51419987
github.com/vbatts/tar-split v0.10.2
golang.org/x/crypto 453249f01cfeb54c3d549ddb75ff152ca243f9d8
golang.org/x/net 6b27048ae5e6ad1ef927e72e437531493de612fe
+golang.org/x/sync 42b317875d0fa942474b76e1b46a6060d720ae6e
golang.org/x/sys 43e60d72a8e2bd92ee98319ba9a384a0e9837c08
-gopkg.in/cheggaaa/pb.v1 d7e6ca3010b6f084d8056847f55d7f572f180678
+gopkg.in/cheggaaa/pb.v1 v1.0.27
gopkg.in/yaml.v2 a3f3340b5840cee44f372bddb5880fcbc419b46a
k8s.io/client-go bcde30fb7eaed76fd98a36b4120321b94995ffb6
github.com/xeipuuv/gojsonschema master
@@ -36,7 +37,7 @@ github.com/xeipuuv/gojsonpointer master
github.com/tchap/go-patricia v2.2.6
github.com/opencontainers/selinux 077c8b6d1c18456fb7c792bc0de52295a0d1900e
github.com/BurntSushi/toml b26d9c308763d68093482582cea63d69be07a0f0
-github.com/ostreedev/ostree-go aeb02c6b6aa2889db3ef62f7855650755befd460
+github.com/ostreedev/ostree-go 56f3a639dbc0f2f5051c6d52dade28a882ba78ce
github.com/gogo/protobuf fcdc5011193ff531a548e9b0301828d5a5b97fd8
github.com/pquerna/ffjson master
github.com/syndtr/gocapability master
@@ -44,3 +45,6 @@ github.com/Microsoft/go-winio ab35fc04b6365e8fcb18e6e9e41ea4a02b10b175
github.com/Microsoft/hcsshim eca7177590cdcbd25bbc5df27e3b693a54b53a6a
github.com/ulikunitz/xz v0.5.4
github.com/boltdb/bolt master
+github.com/klauspost/pgzip v1.2.1
+github.com/klauspost/compress v1.4.1
+github.com/klauspost/cpuid v1.2.0
diff --git a/vendor/github.com/containers/storage/containers_ffjson.go b/vendor/github.com/containers/storage/containers_ffjson.go
index aef6becfe..40b912bb3 100644
--- a/vendor/github.com/containers/storage/containers_ffjson.go
+++ b/vendor/github.com/containers/storage/containers_ffjson.go
@@ -1,5 +1,5 @@
// Code generated by ffjson <https://github.com/pquerna/ffjson>. DO NOT EDIT.
-// source: containers.go
+// source: ./containers.go
package storage
diff --git a/vendor/github.com/containers/storage/drivers/aufs/aufs.go b/vendor/github.com/containers/storage/drivers/aufs/aufs.go
index ca69816be..e821bc0c5 100644
--- a/vendor/github.com/containers/storage/drivers/aufs/aufs.go
+++ b/vendor/github.com/containers/storage/drivers/aufs/aufs.go
@@ -253,6 +253,11 @@ func (a *Driver) AdditionalImageStores() []string {
return nil
}
+// CreateFromTemplate creates a layer with the same contents and parent as another layer.
+func (a *Driver) CreateFromTemplate(id, template string, templateIDMappings *idtools.IDMappings, parent string, parentIDMappings *idtools.IDMappings, opts *graphdriver.CreateOpts, readWrite bool) error {
+ return graphdriver.NaiveCreateFromTemplate(a, id, template, templateIDMappings, parent, parentIDMappings, opts, readWrite)
+}
+
// CreateReadWrite creates a layer that is writable for use as a container
// file system.
func (a *Driver) CreateReadWrite(id, parent string, opts *graphdriver.CreateOpts) error {
diff --git a/vendor/github.com/containers/storage/drivers/btrfs/btrfs.go b/vendor/github.com/containers/storage/drivers/btrfs/btrfs.go
index 567cda9d3..30254d9fb 100644
--- a/vendor/github.com/containers/storage/drivers/btrfs/btrfs.go
+++ b/vendor/github.com/containers/storage/drivers/btrfs/btrfs.go
@@ -490,6 +490,11 @@ func (d *Driver) quotasDirID(id string) string {
return path.Join(d.quotasDir(), id)
}
+// CreateFromTemplate creates a layer with the same contents and parent as another layer.
+func (d *Driver) CreateFromTemplate(id, template string, templateIDMappings *idtools.IDMappings, parent string, parentIDMappings *idtools.IDMappings, opts *graphdriver.CreateOpts, readWrite bool) error {
+ return d.Create(id, template, opts)
+}
+
// CreateReadWrite creates a layer that is writable for use as a container
// file system.
func (d *Driver) CreateReadWrite(id, parent string, opts *graphdriver.CreateOpts) error {
diff --git a/vendor/github.com/containers/storage/drivers/devmapper/device_setup.go b/vendor/github.com/containers/storage/drivers/devmapper/device_setup.go
index 53aa217c9..58abca477 100644
--- a/vendor/github.com/containers/storage/drivers/devmapper/device_setup.go
+++ b/vendor/github.com/containers/storage/drivers/devmapper/device_setup.go
@@ -26,7 +26,7 @@ type directLVMConfig struct {
var (
errThinpPercentMissing = errors.New("must set both `dm.thinp_percent` and `dm.thinp_metapercent` if either is specified")
errThinpPercentTooBig = errors.New("combined `dm.thinp_percent` and `dm.thinp_metapercent` must not be greater than 100")
- errMissingSetupDevice = errors.New("must provide device path in `dm.setup_device` in order to configure direct-lvm")
+ errMissingSetupDevice = errors.New("must provide device path in `dm.directlvm_device` in order to configure direct-lvm")
)
func validateLVMConfig(cfg directLVMConfig) error {
diff --git a/vendor/github.com/containers/storage/drivers/devmapper/driver.go b/vendor/github.com/containers/storage/drivers/devmapper/driver.go
index 39a4fbe2c..13677c93a 100644
--- a/vendor/github.com/containers/storage/drivers/devmapper/driver.go
+++ b/vendor/github.com/containers/storage/drivers/devmapper/driver.go
@@ -123,6 +123,11 @@ func (d *Driver) Cleanup() error {
return err
}
+// CreateFromTemplate creates a layer with the same contents and parent as another layer.
+func (d *Driver) CreateFromTemplate(id, template string, templateIDMappings *idtools.IDMappings, parent string, parentIDMappings *idtools.IDMappings, opts *graphdriver.CreateOpts, readWrite bool) error {
+ return d.Create(id, template, opts)
+}
+
// CreateReadWrite creates a layer that is writable for use as a container
// file system.
func (d *Driver) CreateReadWrite(id, parent string, opts *graphdriver.CreateOpts) error {
diff --git a/vendor/github.com/containers/storage/drivers/driver.go b/vendor/github.com/containers/storage/drivers/driver.go
index 476b55160..dda172574 100644
--- a/vendor/github.com/containers/storage/drivers/driver.go
+++ b/vendor/github.com/containers/storage/drivers/driver.go
@@ -72,6 +72,9 @@ type ProtoDriver interface {
// specified id and parent and options passed in opts. Parent
// may be "" and opts may be nil.
Create(id, parent string, opts *CreateOpts) error
+ // CreateFromTemplate creates a new filesystem layer with the specified id
+ // and parent, with contents identical to the specified template layer.
+ CreateFromTemplate(id, template string, templateIDMappings *idtools.IDMappings, parent string, parentIDMappings *idtools.IDMappings, opts *CreateOpts, readWrite bool) error
// Remove attempts to remove the filesystem layer with this id.
Remove(id string) error
// Get returns the mountpoint for the layered filesystem referred
diff --git a/vendor/github.com/containers/storage/drivers/overlay/check.go b/vendor/github.com/containers/storage/drivers/overlay/check.go
index 590d517fa..a566e4afd 100644
--- a/vendor/github.com/containers/storage/drivers/overlay/check.go
+++ b/vendor/github.com/containers/storage/drivers/overlay/check.go
@@ -10,6 +10,8 @@ import (
"path/filepath"
"syscall"
+ "github.com/containers/storage/pkg/ioutils"
+ "github.com/containers/storage/pkg/mount"
"github.com/containers/storage/pkg/system"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
@@ -57,10 +59,11 @@ func doesSupportNativeDiff(d, mountOpts string) error {
}
opts := fmt.Sprintf("lowerdir=%s:%s,upperdir=%s,workdir=%s", path.Join(td, "l2"), path.Join(td, "l1"), path.Join(td, "l3"), path.Join(td, "work"))
- if mountOpts != "" {
- opts = fmt.Sprintf("%s,%s", opts, mountOpts)
+ flags, data := mount.ParseOptions(mountOpts)
+ if data != "" {
+ opts = fmt.Sprintf("%s,%s", opts, data)
}
- if err := unix.Mount("overlay", filepath.Join(td, "merged"), "overlay", 0, opts); err != nil {
+ if err := unix.Mount("overlay", filepath.Join(td, "merged"), "overlay", uintptr(flags), opts); err != nil {
return errors.Wrap(err, "failed to mount overlay")
}
defer func() {
@@ -103,3 +106,60 @@ func doesSupportNativeDiff(d, mountOpts string) error {
return nil
}
+
+// doesMetacopy checks if the filesystem is going to optimize changes to
+// metadata by using nodes marked with an "overlay.metacopy" attribute to avoid
+// copying up a file from a lower layer unless/until its contents are being
+// modified
+func doesMetacopy(d, mountOpts string) (bool, error) {
+ td, err := ioutil.TempDir(d, "metacopy-check")
+ if err != nil {
+ return false, err
+ }
+ defer func() {
+ if err := os.RemoveAll(td); err != nil {
+ logrus.Warnf("Failed to remove check directory %v: %v", td, err)
+ }
+ }()
+
+ // Make directories l1, l2, work, merged
+ if err := os.MkdirAll(filepath.Join(td, "l1"), 0755); err != nil {
+ return false, err
+ }
+ if err := ioutils.AtomicWriteFile(filepath.Join(td, "l1", "f"), []byte{0xff}, 0700); err != nil {
+ return false, err
+ }
+ if err := os.MkdirAll(filepath.Join(td, "l2"), 0755); err != nil {
+ return false, err
+ }
+ if err := os.Mkdir(filepath.Join(td, "work"), 0755); err != nil {
+ return false, err
+ }
+ if err := os.Mkdir(filepath.Join(td, "merged"), 0755); err != nil {
+ return false, err
+ }
+ // Mount using the mandatory options and configured options
+ opts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", path.Join(td, "l1"), path.Join(td, "l2"), path.Join(td, "work"))
+ flags, data := mount.ParseOptions(mountOpts)
+ if data != "" {
+ opts = fmt.Sprintf("%s,%s", opts, data)
+ }
+ if err := unix.Mount("overlay", filepath.Join(td, "merged"), "overlay", uintptr(flags), opts); err != nil {
+ return false, errors.Wrap(err, "failed to mount overlay for metacopy check")
+ }
+ defer func() {
+ if err := unix.Unmount(filepath.Join(td, "merged"), 0); err != nil {
+ logrus.Warnf("Failed to unmount check directory %v: %v", filepath.Join(td, "merged"), err)
+ }
+ }()
+ // Make a change that only impacts the inode, and check if the pulled-up copy is marked
+ // as a metadata-only copy
+ if err := os.Chmod(filepath.Join(td, "merged", "f"), 0600); err != nil {
+ return false, errors.Wrap(err, "error changing permissions on file for metacopy check")
+ }
+ metacopy, err := system.Lgetxattr(filepath.Join(td, "l2", "f"), "trusted.overlay.metacopy")
+ if err != nil {
+ return false, errors.Wrap(err, "metacopy flag was not set on file in upper layer")
+ }
+ return metacopy != nil, nil
+}
diff --git a/vendor/github.com/containers/storage/drivers/overlay/overlay.go b/vendor/github.com/containers/storage/drivers/overlay/overlay.go
index df736c0a9..57d6dd63a 100644
--- a/vendor/github.com/containers/storage/drivers/overlay/overlay.go
+++ b/vendor/github.com/containers/storage/drivers/overlay/overlay.go
@@ -14,6 +14,7 @@ import (
"strconv"
"strings"
"sync"
+ "syscall"
"github.com/containers/storage/drivers"
"github.com/containers/storage/drivers/overlayutils"
@@ -84,13 +85,12 @@ const (
)
type overlayOptions struct {
- overrideKernelCheck bool
- imageStores []string
- quota quota.Quota
- mountProgram string
- ostreeRepo string
- skipMountHome bool
- mountOptions string
+ imageStores []string
+ quota quota.Quota
+ mountProgram string
+ ostreeRepo string
+ skipMountHome bool
+ mountOptions string
}
// Driver contains information about the home directory and the list of active mounts that are created using this driver.
@@ -104,6 +104,7 @@ type Driver struct {
options overlayOptions
naiveDiff graphdriver.DiffDriver
supportsDType bool
+ usingMetacopy bool
locker *locker.Locker
convert map[string]bool
}
@@ -157,6 +158,7 @@ func Init(home string, options []string, uidMaps, gidMaps []idtools.IDMap) (grap
return nil, err
}
+ var usingMetacopy bool
var supportsDType bool
if opts.mountProgram != "" {
supportsDType = true
@@ -165,8 +167,23 @@ func Init(home string, options []string, uidMaps, gidMaps []idtools.IDMap) (grap
if err != nil {
os.Remove(filepath.Join(home, linkDir))
os.Remove(home)
+ patherr, ok := err.(*os.PathError)
+ if ok && patherr.Err == syscall.ENOSPC {
+ return nil, err
+ }
return nil, errors.Wrap(err, "kernel does not support overlay fs")
}
+ usingMetacopy, err = doesMetacopy(home, opts.mountOptions)
+ if err == nil {
+ if usingMetacopy {
+ logrus.Debugf("overlay test mount indicated that metacopy is being used")
+ } else {
+ logrus.Debugf("overlay test mount indicated that metacopy is not being used")
+ }
+ } else {
+ logrus.Warnf("overlay test mount did not indicate whether or not metacopy is being used: %v", err)
+ return nil, err
+ }
}
if !opts.skipMountHome {
@@ -188,6 +205,7 @@ func Init(home string, options []string, uidMaps, gidMaps []idtools.IDMap) (grap
gidMaps: gidMaps,
ctr: graphdriver.NewRefCounter(graphdriver.NewFsChecker(graphdriver.FsMagicOverlay)),
supportsDType: supportsDType,
+ usingMetacopy: usingMetacopy,
locker: locker.New(),
options: *opts,
convert: make(map[string]bool),
@@ -207,7 +225,7 @@ func Init(home string, options []string, uidMaps, gidMaps []idtools.IDMap) (grap
return nil, fmt.Errorf("Storage option overlay.size only supported for backingFS XFS. Found %v", backingFs)
}
- logrus.Debugf("backingFs=%s, projectQuotaSupported=%v, useNativeDiff=%v", backingFs, projectQuotaSupported, !d.useNaiveDiff())
+ logrus.Debugf("backingFs=%s, projectQuotaSupported=%v, useNativeDiff=%v, usingMetacopy=%v", backingFs, projectQuotaSupported, !d.useNaiveDiff(), d.usingMetacopy)
return d, nil
}
@@ -221,12 +239,6 @@ func parseOptions(options []string) (*overlayOptions, error) {
}
key = strings.ToLower(key)
switch key {
- case ".override_kernel_check", "overlay.override_kernel_check", "overlay2.override_kernel_check":
- logrus.Debugf("overlay: override_kernelcheck=%s", val)
- o.overrideKernelCheck, err = strconv.ParseBool(val)
- if err != nil {
- return nil, err
- }
case ".mountopt", "overlay.mountopt", "overlay2.mountopt":
o.mountOptions = val
case ".size", "overlay.size", "overlay2.size":
@@ -285,6 +297,12 @@ func supportsOverlay(home string, homeMagic graphdriver.FsMagic, rootUID, rootGI
exec.Command("modprobe", "overlay").Run()
layerDir, err := ioutil.TempDir(home, "compat")
+ if err != nil {
+ patherr, ok := err.(*os.PathError)
+ if ok && patherr.Err == syscall.ENOSPC {
+ return false, err
+ }
+ }
if err == nil {
// Check if reading the directory's contents populates the d_type field, which is required
// for proper operation of the overlay filesystem.
@@ -364,6 +382,7 @@ func (d *Driver) Status() [][2]string {
{"Backing Filesystem", backingFs},
{"Supports d_type", strconv.FormatBool(d.supportsDType)},
{"Native Overlay Diff", strconv.FormatBool(!d.useNaiveDiff())},
+ {"Using metacopy", strconv.FormatBool(d.usingMetacopy)},
}
}
@@ -399,6 +418,14 @@ func (d *Driver) Cleanup() error {
return mount.Unmount(d.home)
}
+// CreateFromTemplate creates a layer with the same contents and parent as another layer.
+func (d *Driver) CreateFromTemplate(id, template string, templateIDMappings *idtools.IDMappings, parent string, parentIDMappings *idtools.IDMappings, opts *graphdriver.CreateOpts, readWrite bool) error {
+ if readWrite {
+ return d.CreateReadWrite(id, template, opts)
+ }
+ return d.Create(id, template, opts)
+}
+
// CreateReadWrite creates a layer that is writable for use as a container
// file system.
func (d *Driver) CreateReadWrite(id, parent string, opts *graphdriver.CreateOpts) error {
@@ -782,6 +809,7 @@ func (d *Driver) get(id string, disableShifting bool, options graphdriver.MountO
mountTarget = path.Join(id, "merged")
}
flags, data := mount.ParseOptions(mountData)
+ logrus.Debugf("overlay: mount_data=%s", mountData)
if err := mountFunc("overlay", mountTarget, "overlay", uintptr(flags), data); err != nil {
return "", fmt.Errorf("error creating overlay mount to %s: %v", mountTarget, err)
}
@@ -975,6 +1003,7 @@ func (d *Driver) UpdateLayerIDMap(id string, toContainer, toHost *idtools.IDMapp
// Mount the new layer and handle ownership changes and possible copy_ups in it.
options := graphdriver.MountOpts{
MountLabel: mountLabel,
+ Options: strings.Split(d.options.mountOptions, ","),
}
layerFs, err := d.get(id, true, options)
if err != nil {
diff --git a/vendor/github.com/containers/storage/drivers/template.go b/vendor/github.com/containers/storage/drivers/template.go
new file mode 100644
index 000000000..dfcbffb83
--- /dev/null
+++ b/vendor/github.com/containers/storage/drivers/template.go
@@ -0,0 +1,45 @@
+package graphdriver
+
+import (
+ "github.com/sirupsen/logrus"
+
+ "github.com/containers/storage/pkg/idtools"
+)
+
+// TemplateDriver is just barely enough of a driver that we can implement a
+// naive version of CreateFromTemplate on top of it.
+type TemplateDriver interface {
+ DiffDriver
+ CreateReadWrite(id, parent string, opts *CreateOpts) error
+ Create(id, parent string, opts *CreateOpts) error
+ Remove(id string) error
+}
+
+// CreateFromTemplate creates a layer with the same contents and parent as
+// another layer. Internally, it may even depend on that other layer
+// continuing to exist, as if it were actually a child of the child layer.
+func NaiveCreateFromTemplate(d TemplateDriver, id, template string, templateIDMappings *idtools.IDMappings, parent string, parentIDMappings *idtools.IDMappings, opts *CreateOpts, readWrite bool) error {
+ var err error
+ if readWrite {
+ err = d.CreateReadWrite(id, parent, opts)
+ } else {
+ err = d.Create(id, parent, opts)
+ }
+ if err != nil {
+ return err
+ }
+ diff, err := d.Diff(template, templateIDMappings, parent, parentIDMappings, opts.MountLabel)
+ if err != nil {
+ if err2 := d.Remove(id); err2 != nil {
+ logrus.Errorf("error removing layer %q: %v", id, err2)
+ }
+ return err
+ }
+ if _, err = d.ApplyDiff(id, templateIDMappings, parent, opts.MountLabel, diff); err != nil {
+ if err2 := d.Remove(id); err2 != nil {
+ logrus.Errorf("error removing layer %q: %v", id, err2)
+ }
+ return err
+ }
+ return nil
+}
diff --git a/vendor/github.com/containers/storage/drivers/vfs/driver.go b/vendor/github.com/containers/storage/drivers/vfs/driver.go
index f7f3c75ba..5941ccc17 100644
--- a/vendor/github.com/containers/storage/drivers/vfs/driver.go
+++ b/vendor/github.com/containers/storage/drivers/vfs/driver.go
@@ -99,6 +99,14 @@ func (d *Driver) Cleanup() error {
return nil
}
+// CreateFromTemplate creates a layer with the same contents and parent as another layer.
+func (d *Driver) CreateFromTemplate(id, template string, templateIDMappings *idtools.IDMappings, parent string, parentIDMappings *idtools.IDMappings, opts *graphdriver.CreateOpts, readWrite bool) error {
+ if readWrite {
+ return d.CreateReadWrite(id, template, opts)
+ }
+ return d.Create(id, template, opts)
+}
+
// CreateReadWrite creates a layer that is writable for use as a container
// file system.
func (d *Driver) CreateReadWrite(id, parent string, opts *graphdriver.CreateOpts) error {
diff --git a/vendor/github.com/containers/storage/drivers/windows/windows.go b/vendor/github.com/containers/storage/drivers/windows/windows.go
index c6d86a4ab..c7df1c1fe 100644
--- a/vendor/github.com/containers/storage/drivers/windows/windows.go
+++ b/vendor/github.com/containers/storage/drivers/windows/windows.go
@@ -185,6 +185,11 @@ func (d *Driver) Exists(id string) bool {
return result
}
+// CreateFromTemplate creates a layer with the same contents and parent as another layer.
+func (d *Driver) CreateFromTemplate(id, template string, templateIDMappings *idtools.IDMappings, parent string, parentIDMappings *idtools.IDMappings, opts *graphdriver.CreateOpts, readWrite bool) error {
+ return graphdriver.NaiveCreateFromTemplate(d, id, template, templateIDMappings, parent, parentIDMappings, opts, readWrite)
+}
+
// CreateReadWrite creates a layer that is writable for use as a container
// file system.
func (d *Driver) CreateReadWrite(id, parent string, opts *graphdriver.CreateOpts) error {
diff --git a/vendor/github.com/containers/storage/drivers/zfs/zfs.go b/vendor/github.com/containers/storage/drivers/zfs/zfs.go
index c3ce6e869..eaa9e8bc5 100644
--- a/vendor/github.com/containers/storage/drivers/zfs/zfs.go
+++ b/vendor/github.com/containers/storage/drivers/zfs/zfs.go
@@ -1,4 +1,4 @@
-// +build linux freebsd solaris
+// +build linux freebsd
package zfs
@@ -16,7 +16,7 @@ import (
"github.com/containers/storage/pkg/idtools"
"github.com/containers/storage/pkg/mount"
"github.com/containers/storage/pkg/parsers"
- zfs "github.com/mistifyio/go-zfs"
+ "github.com/mistifyio/go-zfs"
"github.com/opencontainers/selinux/go-selinux/label"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
@@ -38,7 +38,7 @@ type Logger struct{}
// Log wraps log message from ZFS driver with a prefix '[zfs]'.
func (*Logger) Log(cmd []string) {
- logrus.Debugf("[zfs] %s", strings.Join(cmd, " "))
+ logrus.WithField("storage-driver", "zfs").Debugf("%s", strings.Join(cmd, " "))
}
// Init returns a new ZFS driver.
@@ -47,14 +47,16 @@ func (*Logger) Log(cmd []string) {
func Init(base string, opt []string, uidMaps, gidMaps []idtools.IDMap) (graphdriver.Driver, error) {
var err error
+ logger := logrus.WithField("storage-driver", "zfs")
+
if _, err := exec.LookPath("zfs"); err != nil {
- logrus.Debugf("[zfs] zfs command is not available: %v", err)
+ logger.Debugf("zfs command is not available: %v", err)
return nil, errors.Wrap(graphdriver.ErrPrerequisites, "the 'zfs' command is not available")
}
file, err := os.OpenFile("/dev/zfs", os.O_RDWR, 0600)
if err != nil {
- logrus.Debugf("[zfs] cannot open /dev/zfs: %v", err)
+ logger.Debugf("cannot open /dev/zfs: %v", err)
return nil, errors.Wrapf(graphdriver.ErrPrerequisites, "could not open /dev/zfs: %v", err)
}
defer file.Close()
@@ -109,9 +111,6 @@ func Init(base string, opt []string, uidMaps, gidMaps []idtools.IDMap) (graphdri
return nil, fmt.Errorf("Failed to create '%s': %v", base, err)
}
- if err := mount.MakePrivate(base); err != nil {
- return nil, err
- }
d := &Driver{
dataset: rootDataset,
options: options,
@@ -157,7 +156,7 @@ func lookupZfsDataset(rootdir string) (string, error) {
}
for _, m := range mounts {
if err := unix.Stat(m.Mountpoint, &stat); err != nil {
- logrus.Debugf("[zfs] failed to stat '%s' while scanning for zfs mount: %v", m.Mountpoint, err)
+ logrus.WithField("storage-driver", "zfs").Debugf("failed to stat '%s' while scanning for zfs mount: %v", m.Mountpoint, err)
continue // may fail on fuse file systems
}
@@ -184,7 +183,7 @@ func (d *Driver) String() string {
return "zfs"
}
-// Cleanup is used to implement graphdriver.ProtoDriver. There is no cleanup required for this driver.
+// Cleanup is called on when program exits, it is a no-op for ZFS.
func (d *Driver) Cleanup() error {
return nil
}
@@ -260,6 +259,11 @@ func (d *Driver) mountPath(id string) string {
return path.Join(d.options.mountPath, "graph", getMountpoint(id))
}
+// CreateFromTemplate creates a layer with the same contents and parent as another layer.
+func (d *Driver) CreateFromTemplate(id, template string, templateIDMappings *idtools.IDMappings, parent string, parentIDMappings *idtools.IDMappings, opts *graphdriver.CreateOpts, readWrite bool) error {
+ return d.Create(id, template, opts)
+}
+
// CreateReadWrite creates a layer that is writable for use as a container
// file system.
func (d *Driver) CreateReadWrite(id, parent string, opts *graphdriver.CreateOpts) error {
@@ -360,11 +364,25 @@ func (d *Driver) Remove(id string) error {
}
// Get returns the mountpoint for the given id after creating the target directories if necessary.
-func (d *Driver) Get(id string, options graphdriver.MountOpts) (string, error) {
+func (d *Driver) Get(id string, options graphdriver.MountOpts) (_ string, retErr error) {
+
mountpoint := d.mountPath(id)
if count := d.ctr.Increment(mountpoint); count > 1 {
return mountpoint, nil
}
+ defer func() {
+ if retErr != nil {
+ if c := d.ctr.Decrement(mountpoint); c <= 0 {
+ if mntErr := unix.Unmount(mountpoint, 0); mntErr != nil {
+ logrus.WithField("storage-driver", "zfs").Errorf("Error unmounting %v: %v", mountpoint, mntErr)
+ }
+ if rmErr := unix.Rmdir(mountpoint); rmErr != nil && !os.IsNotExist(rmErr) {
+ logrus.WithField("storage-driver", "zfs").Debugf("Failed to remove %s: %v", id, rmErr)
+ }
+
+ }
+ }
+ }()
mountOptions := d.options.mountOptions
if len(options.Options) > 0 {
@@ -373,29 +391,24 @@ func (d *Driver) Get(id string, options graphdriver.MountOpts) (string, error) {
filesystem := d.zfsPath(id)
opts := label.FormatMountLabel(mountOptions, options.MountLabel)
- logrus.Debugf(`[zfs] mount("%s", "%s", "%s")`, filesystem, mountpoint, opts)
+ logrus.WithField("storage-driver", "zfs").Debugf(`mount("%s", "%s", "%s")`, filesystem, mountpoint, opts)
rootUID, rootGID, err := idtools.GetRootUIDGID(d.uidMaps, d.gidMaps)
if err != nil {
- d.ctr.Decrement(mountpoint)
return "", err
}
// Create the target directories if they don't exist
if err := idtools.MkdirAllAs(mountpoint, 0755, rootUID, rootGID); err != nil {
- d.ctr.Decrement(mountpoint)
return "", err
}
if err := mount.Mount(filesystem, mountpoint, "zfs", opts); err != nil {
- d.ctr.Decrement(mountpoint)
- return "", fmt.Errorf("error creating zfs mount of %s to %s: %v", filesystem, mountpoint, err)
+ return "", errors.Wrap(err, "error creating zfs mount")
}
// this could be our first mount after creation of the filesystem, and the root dir may still have root
// permissions instead of the remapped root uid:gid (if user namespaces are enabled):
if err := os.Chown(mountpoint, rootUID, rootGID); err != nil {
- mount.Unmount(mountpoint)
- d.ctr.Decrement(mountpoint)
return "", fmt.Errorf("error modifying zfs mountpoint (%s) directory ownership: %v", mountpoint, err)
}
@@ -408,16 +421,18 @@ func (d *Driver) Put(id string) error {
if count := d.ctr.Decrement(mountpoint); count > 0 {
return nil
}
- mounted, err := graphdriver.Mounted(graphdriver.FsMagicZfs, mountpoint)
- if err != nil || !mounted {
- return err
- }
- logrus.Debugf(`[zfs] unmount("%s")`, mountpoint)
+ logger := logrus.WithField("storage-driver", "zfs")
- if err := mount.Unmount(mountpoint); err != nil {
- return fmt.Errorf("error unmounting to %s: %v", mountpoint, err)
+ logger.Debugf(`unmount("%s")`, mountpoint)
+
+ if err := unix.Unmount(mountpoint, unix.MNT_DETACH); err != nil {
+ logger.Warnf("Failed to unmount %s mount %s: %v", id, mountpoint, err)
+ }
+ if err := unix.Rmdir(mountpoint); err != nil && !os.IsNotExist(err) {
+ logger.Debugf("Failed to remove %s mount point %s: %v", id, mountpoint, err)
}
+
return nil
}
diff --git a/vendor/github.com/containers/storage/drivers/zfs/zfs_freebsd.go b/vendor/github.com/containers/storage/drivers/zfs/zfs_freebsd.go
index 69c0448d3..bf6905159 100644
--- a/vendor/github.com/containers/storage/drivers/zfs/zfs_freebsd.go
+++ b/vendor/github.com/containers/storage/drivers/zfs/zfs_freebsd.go
@@ -18,7 +18,7 @@ func checkRootdirFs(rootdir string) error {
// on FreeBSD buf.Fstypename contains ['z', 'f', 's', 0 ... ]
if (buf.Fstypename[0] != 122) || (buf.Fstypename[1] != 102) || (buf.Fstypename[2] != 115) || (buf.Fstypename[3] != 0) {
- logrus.Debugf("[zfs] no zfs dataset found for rootdir '%s'", rootdir)
+ logrus.WithField("storage-driver", "zfs").Debugf("no zfs dataset found for rootdir '%s'", rootdir)
return errors.Wrapf(graphdriver.ErrPrerequisites, "no zfs dataset found for rootdir '%s'", rootdir)
}
diff --git a/vendor/github.com/containers/storage/drivers/zfs/zfs_linux.go b/vendor/github.com/containers/storage/drivers/zfs/zfs_linux.go
index da298047d..fb1ef3a3d 100644
--- a/vendor/github.com/containers/storage/drivers/zfs/zfs_linux.go
+++ b/vendor/github.com/containers/storage/drivers/zfs/zfs_linux.go
@@ -1,23 +1,24 @@
package zfs
import (
- "fmt"
-
"github.com/containers/storage/drivers"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
- "golang.org/x/sys/unix"
)
-func checkRootdirFs(rootdir string) error {
- var buf unix.Statfs_t
- if err := unix.Statfs(rootdir, &buf); err != nil {
- return fmt.Errorf("Failed to access '%s': %s", rootdir, err)
+func checkRootdirFs(rootDir string) error {
+ fsMagic, err := graphdriver.GetFSMagic(rootDir)
+ if err != nil {
+ return err
+ }
+ backingFS := "unknown"
+ if fsName, ok := graphdriver.FsNames[fsMagic]; ok {
+ backingFS = fsName
}
- if graphdriver.FsMagic(buf.Type) != graphdriver.FsMagicZfs {
- logrus.Debugf("[zfs] no zfs dataset found for rootdir '%s'", rootdir)
- return errors.Wrapf(graphdriver.ErrPrerequisites, "no zfs dataset found for rootdir '%s'", rootdir)
+ if fsMagic != graphdriver.FsMagicZfs {
+ logrus.WithField("root", rootDir).WithField("backingFS", backingFS).WithField("storage-driver", "zfs").Error("No zfs dataset found for root")
+ return errors.Wrapf(graphdriver.ErrPrerequisites, "no zfs dataset found for rootdir '%s'", rootDir)
}
return nil
diff --git a/vendor/github.com/containers/storage/drivers/zfs/zfs_solaris.go b/vendor/github.com/containers/storage/drivers/zfs/zfs_solaris.go
deleted file mode 100644
index 2383bf3bf..000000000
--- a/vendor/github.com/containers/storage/drivers/zfs/zfs_solaris.go
+++ /dev/null
@@ -1,59 +0,0 @@
-// +build solaris,cgo
-
-package zfs
-
-/*
-#include <sys/statvfs.h>
-#include <stdlib.h>
-
-static inline struct statvfs *getstatfs(char *s) {
- struct statvfs *buf;
- int err;
- buf = (struct statvfs *)malloc(sizeof(struct statvfs));
- err = statvfs(s, buf);
- return buf;
-}
-*/
-import "C"
-import (
- "path/filepath"
- "strings"
- "unsafe"
-
- "github.com/containers/storage/drivers"
- "github.com/pkg/errors"
- "github.com/sirupsen/logrus"
-)
-
-func checkRootdirFs(rootdir string) error {
-
- cs := C.CString(filepath.Dir(rootdir))
- defer C.free(unsafe.Pointer(cs))
- buf := C.getstatfs(cs)
- defer C.free(unsafe.Pointer(buf))
-
- // on Solaris buf.f_basetype contains ['z', 'f', 's', 0 ... ]
- if (buf.f_basetype[0] != 122) || (buf.f_basetype[1] != 102) || (buf.f_basetype[2] != 115) ||
- (buf.f_basetype[3] != 0) {
- logrus.Debugf("[zfs] no zfs dataset found for rootdir '%s'", rootdir)
- return errors.Wrapf(graphdriver.ErrPrerequisites, "no zfs dataset found for rootdir '%s'", rootdir)
- }
-
- return nil
-}
-
-/* rootfs is introduced to comply with the OCI spec
-which states that root filesystem must be mounted at <CID>/rootfs/ instead of <CID>/
-*/
-func getMountpoint(id string) string {
- maxlen := 12
-
- // we need to preserve filesystem suffix
- suffix := strings.SplitN(id, "-", 2)
-
- if len(suffix) > 1 {
- return filepath.Join(id[:maxlen]+"-"+suffix[1], "rootfs", "root")
- }
-
- return filepath.Join(id[:maxlen], "rootfs", "root")
-}
diff --git a/vendor/github.com/containers/storage/drivers/zfs/zfs_unsupported.go b/vendor/github.com/containers/storage/drivers/zfs/zfs_unsupported.go
index ce8daadaf..643b169bc 100644
--- a/vendor/github.com/containers/storage/drivers/zfs/zfs_unsupported.go
+++ b/vendor/github.com/containers/storage/drivers/zfs/zfs_unsupported.go
@@ -1,4 +1,4 @@
-// +build !linux,!freebsd,!solaris
+// +build !linux,!freebsd
package zfs
diff --git a/vendor/github.com/containers/storage/images.go b/vendor/github.com/containers/storage/images.go
index b10501b08..d99842534 100644
--- a/vendor/github.com/containers/storage/images.go
+++ b/vendor/github.com/containers/storage/images.go
@@ -42,7 +42,9 @@ type Image struct {
// MappedTopLayers are the IDs of alternate versions of the top layer
// which have the same contents and parent, and which differ from
- // TopLayer only in which ID mappings they use.
+ // TopLayer only in which ID mappings they use. When the image is
+ // to be removed, they should be removed before the TopLayer, as the
+ // graph driver may depend on that.
MappedTopLayers []string `json:"mapped-layers,omitempty"`
// Metadata is data we keep for the convenience of the caller. It is not
diff --git a/vendor/github.com/containers/storage/images_ffjson.go b/vendor/github.com/containers/storage/images_ffjson.go
index 6b40ebd59..539acfe93 100644
--- a/vendor/github.com/containers/storage/images_ffjson.go
+++ b/vendor/github.com/containers/storage/images_ffjson.go
@@ -1,5 +1,5 @@
// Code generated by ffjson <https://github.com/pquerna/ffjson>. DO NOT EDIT.
-// source: images.go
+// source: ./images.go
package storage
diff --git a/vendor/github.com/containers/storage/layers.go b/vendor/github.com/containers/storage/layers.go
index 0b532eb77..cdc3cbba9 100644
--- a/vendor/github.com/containers/storage/layers.go
+++ b/vendor/github.com/containers/storage/layers.go
@@ -2,7 +2,6 @@ package storage
import (
"bytes"
- "compress/gzip"
"encoding/json"
"fmt"
"io"
@@ -20,6 +19,7 @@ import (
"github.com/containers/storage/pkg/stringid"
"github.com/containers/storage/pkg/system"
"github.com/containers/storage/pkg/truncindex"
+ "github.com/klauspost/pgzip"
digest "github.com/opencontainers/go-digest"
"github.com/opencontainers/selinux/go-selinux/label"
"github.com/pkg/errors"
@@ -551,9 +551,20 @@ func (r *layerStore) Put(id string, parentLayer *Layer, names []string, mountLab
}
}
parent := ""
- var parentMappings *idtools.IDMappings
if parentLayer != nil {
parent = parentLayer.ID
+ }
+ var parentMappings, templateIDMappings, oldMappings *idtools.IDMappings
+ if moreOptions.TemplateLayer != "" {
+ templateLayer, ok := r.lookup(moreOptions.TemplateLayer)
+ if !ok {
+ return nil, -1, ErrLayerUnknown
+ }
+ templateIDMappings = idtools.NewIDMappingsFromMaps(templateLayer.UIDMap, templateLayer.GIDMap)
+ } else {
+ templateIDMappings = &idtools.IDMappings{}
+ }
+ if parentLayer != nil {
parentMappings = idtools.NewIDMappingsFromMaps(parentLayer.UIDMap, parentLayer.GIDMap)
} else {
parentMappings = &idtools.IDMappings{}
@@ -566,23 +577,34 @@ func (r *layerStore) Put(id string, parentLayer *Layer, names []string, mountLab
MountLabel: mountLabel,
StorageOpt: options,
}
- if writeable {
- if err = r.driver.CreateReadWrite(id, parent, &opts); err != nil {
+ if moreOptions.TemplateLayer != "" {
+ if err = r.driver.CreateFromTemplate(id, moreOptions.TemplateLayer, templateIDMappings, parent, parentMappings, &opts, writeable); err != nil {
if id != "" {
- return nil, -1, errors.Wrapf(err, "error creating read-write layer with ID %q", id)
+ return nil, -1, errors.Wrapf(err, "error creating copy of template layer %q with ID %q", moreOptions.TemplateLayer, id)
}
- return nil, -1, errors.Wrapf(err, "error creating read-write layer")
+ return nil, -1, errors.Wrapf(err, "error creating copy of template layer %q", moreOptions.TemplateLayer)
}
+ oldMappings = templateIDMappings
} else {
- if err = r.driver.Create(id, parent, &opts); err != nil {
- if id != "" {
- return nil, -1, errors.Wrapf(err, "error creating layer with ID %q", id)
+ if writeable {
+ if err = r.driver.CreateReadWrite(id, parent, &opts); err != nil {
+ if id != "" {
+ return nil, -1, errors.Wrapf(err, "error creating read-write layer with ID %q", id)
+ }
+ return nil, -1, errors.Wrapf(err, "error creating read-write layer")
+ }
+ } else {
+ if err = r.driver.Create(id, parent, &opts); err != nil {
+ if id != "" {
+ return nil, -1, errors.Wrapf(err, "error creating layer with ID %q", id)
+ }
+ return nil, -1, errors.Wrapf(err, "error creating layer")
}
- return nil, -1, errors.Wrapf(err, "error creating layer")
}
+ oldMappings = parentMappings
}
- if !reflect.DeepEqual(parentMappings.UIDs(), idMappings.UIDs()) || !reflect.DeepEqual(parentMappings.GIDs(), idMappings.GIDs()) {
- if err = r.driver.UpdateLayerIDMap(id, parentMappings, idMappings, mountLabel); err != nil {
+ if !reflect.DeepEqual(oldMappings.UIDs(), idMappings.UIDs()) || !reflect.DeepEqual(oldMappings.GIDs(), idMappings.GIDs()) {
+ if err = r.driver.UpdateLayerIDMap(id, oldMappings, idMappings, mountLabel); err != nil {
// We don't have a record of this layer, but at least
// try to clean it up underneath us.
r.driver.Remove(id)
@@ -1055,7 +1077,7 @@ func (r *layerStore) Diff(from, to string, options *DiffOptions) (io.ReadCloser,
}
defer tsfile.Close()
- decompressor, err := gzip.NewReader(tsfile)
+ decompressor, err := pgzip.NewReader(tsfile)
if err != nil {
return nil, err
}
@@ -1116,9 +1138,9 @@ func (r *layerStore) ApplyDiff(to string, diff io.Reader) (size int64, err error
defragmented := io.TeeReader(io.MultiReader(bytes.NewBuffer(header[:n]), diff), compressedCounter)
tsdata := bytes.Buffer{}
- compressor, err := gzip.NewWriterLevel(&tsdata, gzip.BestSpeed)
+ compressor, err := pgzip.NewWriterLevel(&tsdata, pgzip.BestSpeed)
if err != nil {
- compressor = gzip.NewWriter(&tsdata)
+ compressor = pgzip.NewWriter(&tsdata)
}
metadata := storage.NewJSONPacker(compressor)
uncompressed, err := archive.DecompressStream(defragmented)
diff --git a/vendor/github.com/containers/storage/layers_ffjson.go b/vendor/github.com/containers/storage/layers_ffjson.go
index 125b5d8c9..09b5d0f33 100644
--- a/vendor/github.com/containers/storage/layers_ffjson.go
+++ b/vendor/github.com/containers/storage/layers_ffjson.go
@@ -1,5 +1,5 @@
// Code generated by ffjson <https://github.com/pquerna/ffjson>. DO NOT EDIT.
-// source: layers.go
+// source: ./layers.go
package storage
diff --git a/vendor/github.com/containers/storage/pkg/archive/archive.go b/vendor/github.com/containers/storage/pkg/archive/archive.go
index 8d6eaacf3..228d8bb82 100644
--- a/vendor/github.com/containers/storage/pkg/archive/archive.go
+++ b/vendor/github.com/containers/storage/pkg/archive/archive.go
@@ -5,7 +5,6 @@ import (
"bufio"
"bytes"
"compress/bzip2"
- "compress/gzip"
"fmt"
"io"
"io/ioutil"
@@ -22,6 +21,7 @@ import (
"github.com/containers/storage/pkg/pools"
"github.com/containers/storage/pkg/promise"
"github.com/containers/storage/pkg/system"
+ gzip "github.com/klauspost/pgzip"
rsystem "github.com/opencontainers/runc/libcontainer/system"
"github.com/sirupsen/logrus"
)
@@ -499,6 +499,8 @@ func (ta *tarAppender) addTarFile(path, name string) error {
hdr.Gid = ta.ChownOpts.GID
}
+ maybeTruncateHeaderModTime(hdr)
+
if ta.WhiteoutConverter != nil {
wo, err := ta.WhiteoutConverter.ConvertWrite(hdr, path, fi)
if err != nil {
@@ -640,11 +642,12 @@ func createTarFile(path, extractDir string, hdr *tar.Header, reader io.Reader, L
var errors []string
for key, value := range hdr.Xattrs {
if err := system.Lsetxattr(path, key, []byte(value), 0); err != nil {
- if err == syscall.ENOTSUP {
+ if err == syscall.ENOTSUP || (err == syscall.EPERM && inUserns) {
// We ignore errors here because not all graphdrivers support
// xattrs *cough* old versions of AUFS *cough*. However only
// ENOTSUP should be emitted in that case, otherwise we still
- // bail.
+ // bail. We also ignore EPERM errors if we are running in a
+ // user namespace.
errors = append(errors, err.Error())
continue
}
diff --git a/vendor/github.com/containers/storage/pkg/archive/archive_110.go b/vendor/github.com/containers/storage/pkg/archive/archive_110.go
index 22b8b48cc..7bc44a566 100644
--- a/vendor/github.com/containers/storage/pkg/archive/archive_110.go
+++ b/vendor/github.com/containers/storage/pkg/archive/archive_110.go
@@ -4,8 +4,19 @@ package archive
import (
"archive/tar"
+ "time"
)
func copyPassHeader(hdr *tar.Header) {
hdr.Format = tar.FormatPAX
}
+
+func maybeTruncateHeaderModTime(hdr *tar.Header) {
+ if hdr.Format == tar.FormatUnknown {
+ // one of the first things archive/tar does is round this
+ // value, possibly up, if the format isn't specified, while we
+ // are much better equipped to handle truncation when scanning
+ // for changes between source and an extracted copy of this
+ hdr.ModTime = hdr.ModTime.Truncate(time.Second)
+ }
+}
diff --git a/vendor/github.com/containers/storage/pkg/archive/archive_19.go b/vendor/github.com/containers/storage/pkg/archive/archive_19.go
index d10d595fa..d19811fdb 100644
--- a/vendor/github.com/containers/storage/pkg/archive/archive_19.go
+++ b/vendor/github.com/containers/storage/pkg/archive/archive_19.go
@@ -8,3 +8,6 @@ import (
func copyPassHeader(hdr *tar.Header) {
}
+
+func maybeTruncateHeaderModTime(hdr *tar.Header) {
+}
diff --git a/vendor/github.com/containers/storage/pkg/archive/archive_ffjson.go b/vendor/github.com/containers/storage/pkg/archive/archive_ffjson.go
index 9b8103e4d..2ba44b85d 100644
--- a/vendor/github.com/containers/storage/pkg/archive/archive_ffjson.go
+++ b/vendor/github.com/containers/storage/pkg/archive/archive_ffjson.go
@@ -1,5 +1,5 @@
// Code generated by ffjson <https://github.com/pquerna/ffjson>. DO NOT EDIT.
-// source: pkg/archive/archive.go
+// source: ./pkg/archive/archive.go
package archive
diff --git a/vendor/github.com/containers/storage/store.go b/vendor/github.com/containers/storage/store.go
index e0dd1b92f..3fe305cc1 100644
--- a/vendor/github.com/containers/storage/store.go
+++ b/vendor/github.com/containers/storage/store.go
@@ -482,6 +482,10 @@ type LayerOptions struct {
// inherit settings from its parent layer or, if it has no parent
// layer, the Store object.
IDMappingOptions
+ // TemplateLayer is the ID of a layer whose contents will be used to
+ // initialize this layer. If set, it should be a child of the layer
+ // which we want to use as the parent of the new layer.
+ TemplateLayer string
}
// ImageOptions is used for passing options to a Store's CreateImage() method.
@@ -973,7 +977,7 @@ func (s *store) CreateImage(id string, names []string, layer, metadata string, o
return ristore.Create(id, names, layer, metadata, creationDate, options.Digest)
}
-func (s *store) imageTopLayerForMapping(image *Image, ristore ROImageStore, readWrite bool, rlstore LayerStore, lstores []ROLayerStore, options IDMappingOptions) (*Layer, error) {
+func (s *store) imageTopLayerForMapping(image *Image, ristore ROImageStore, createMappedLayer bool, rlstore LayerStore, lstores []ROLayerStore, options IDMappingOptions) (*Layer, error) {
layerMatchesMappingOptions := func(layer *Layer, options IDMappingOptions) bool {
// If the driver supports shifting and the layer has no mappings, we can use it.
if s.graphDriver.SupportsShifting() && len(layer.UIDMap) == 0 && len(layer.GIDMap) == 0 {
@@ -994,7 +998,6 @@ func (s *store) imageTopLayerForMapping(image *Image, ristore ROImageStore, read
return reflect.DeepEqual(layer.UIDMap, options.UIDMap) && reflect.DeepEqual(layer.GIDMap, options.GIDMap)
}
var layer, parentLayer *Layer
- var layerHomeStore ROLayerStore
// Locate the image's top layer and its parent, if it has one.
for _, store := range append([]ROLayerStore{rlstore}, lstores...) {
if store != rlstore {
@@ -1027,7 +1030,6 @@ func (s *store) imageTopLayerForMapping(image *Image, ristore ROImageStore, read
if layer == nil {
layer = cLayer
parentLayer = cParentLayer
- layerHomeStore = store
}
}
}
@@ -1037,27 +1039,25 @@ func (s *store) imageTopLayerForMapping(image *Image, ristore ROImageStore, read
}
// The top layer's mappings don't match the ones we want, but it's in a read-only
// image store, so we can't create and add a mapped copy of the layer to the image.
- if !readWrite {
+ // We'll have to do the mapping for the container itself, elsewhere.
+ if !createMappedLayer {
return layer, nil
}
// The top layer's mappings don't match the ones we want, and it's in an image store
// that lets us edit image metadata...
if istore, ok := ristore.(*imageStore); ok {
- // ... so extract the layer's contents, create a new copy of it with the
- // desired mappings, and register it as an alternate top layer in the image.
- noCompression := archive.Uncompressed
- diffOptions := DiffOptions{
- Compression: &noCompression,
- }
- rc, err := layerHomeStore.Diff("", layer.ID, &diffOptions)
- if err != nil {
- return nil, errors.Wrapf(err, "error reading layer %q to create an ID-mapped version of it", layer.ID)
- }
- defer rc.Close()
-
+ // ... so create a duplicate of the layer with the desired mappings, and
+ // register it as an alternate top layer in the image.
var layerOptions LayerOptions
if s.graphDriver.SupportsShifting() {
- layerOptions = LayerOptions{IDMappingOptions: IDMappingOptions{HostUIDMapping: true, HostGIDMapping: true, UIDMap: nil, GIDMap: nil}}
+ layerOptions = LayerOptions{
+ IDMappingOptions: IDMappingOptions{
+ HostUIDMapping: true,
+ HostGIDMapping: true,
+ UIDMap: nil,
+ GIDMap: nil,
+ },
+ }
} else {
layerOptions = LayerOptions{
IDMappingOptions: IDMappingOptions{
@@ -1068,9 +1068,10 @@ func (s *store) imageTopLayerForMapping(image *Image, ristore ROImageStore, read
},
}
}
- mappedLayer, _, err := rlstore.Put("", parentLayer, nil, layer.MountLabel, nil, &layerOptions, false, nil, rc)
+ layerOptions.TemplateLayer = layer.ID
+ mappedLayer, _, err := rlstore.Put("", parentLayer, nil, layer.MountLabel, nil, &layerOptions, false, nil, nil)
if err != nil {
- return nil, errors.Wrapf(err, "error creating ID-mapped copy of layer %q", parentLayer.ID)
+ return nil, errors.Wrapf(err, "error creating an ID-mapped copy of layer %q", layer.ID)
}
if err = istore.addMappedTopLayer(image.ID, mappedLayer.ID); err != nil {
if err2 := rlstore.Delete(mappedLayer.ID); err2 != nil {
@@ -1144,7 +1145,9 @@ func (s *store) CreateContainer(id string, names []string, image, layer, metadat
}
imageID = cimage.ID
- ilayer, err := s.imageTopLayerForMapping(cimage, imageHomeStore, imageHomeStore == istore, rlstore, lstores, idMappingsOptions)
+ createMappedLayer := imageHomeStore == istore
+
+ ilayer, err := s.imageTopLayerForMapping(cimage, imageHomeStore, createMappedLayer, rlstore, lstores, idMappingsOptions)
if err != nil {
return nil, err
}
@@ -1170,7 +1173,14 @@ func (s *store) CreateContainer(id string, names []string, image, layer, metadat
}
var layerOptions *LayerOptions
if s.graphDriver.SupportsShifting() {
- layerOptions = &LayerOptions{IDMappingOptions: IDMappingOptions{HostUIDMapping: true, HostGIDMapping: true, UIDMap: nil, GIDMap: nil}}
+ layerOptions = &LayerOptions{
+ IDMappingOptions: IDMappingOptions{
+ HostUIDMapping: true,
+ HostGIDMapping: true,
+ UIDMap: nil,
+ GIDMap: nil,
+ },
+ }
} else {
layerOptions = &LayerOptions{
IDMappingOptions: IDMappingOptions{
@@ -2091,10 +2101,10 @@ func (s *store) DeleteImage(id string, commit bool) (layers []string, err error)
break
}
lastRemoved = layer
- layersToRemove = append(layersToRemove, lastRemoved)
if layer == image.TopLayer {
layersToRemove = append(layersToRemove, image.MappedTopLayers...)
}
+ layersToRemove = append(layersToRemove, lastRemoved)
layer = parent
}
} else {
@@ -2992,7 +3002,8 @@ func copyStringInterfaceMap(m map[string]interface{}) map[string]interface{} {
return ret
}
-const defaultConfigFile = "/etc/containers/storage.conf"
+// DefaultConfigFile path to the system wide storage.conf file
+const DefaultConfigFile = "/etc/containers/storage.conf"
// ThinpoolOptionsConfig represents the "storage.options.thinpool"
// TOML config table.
@@ -3063,9 +3074,6 @@ type OptionsConfig struct {
// Size
Size string `toml:"size"`
- // OverrideKernelCheck
- OverrideKernelCheck string `toml:"override_kernel_check"`
-
// RemapUIDs is a list of default UID mappings to use for layers.
RemapUIDs string `toml:"remap-uids"`
// RemapGIDs is a list of default GID mappings to use for layers.
@@ -3190,9 +3198,6 @@ func ReloadConfigurationFile(configFile string, storeOptions *StoreOptions) {
if config.Storage.Options.MountOpt != "" {
storeOptions.GraphDriverOptions = append(storeOptions.GraphDriverOptions, fmt.Sprintf("%s.mountopt=%s", config.Storage.Driver, config.Storage.Options.MountOpt))
}
- if config.Storage.Options.OverrideKernelCheck != "" {
- storeOptions.GraphDriverOptions = append(storeOptions.GraphDriverOptions, fmt.Sprintf("%s.override_kernel_check=%s", config.Storage.Driver, config.Storage.Options.OverrideKernelCheck))
- }
if config.Storage.Options.RemapUser != "" && config.Storage.Options.RemapGroup == "" {
config.Storage.Options.RemapGroup = config.Storage.Options.RemapUser
}
@@ -3237,7 +3242,7 @@ func init() {
DefaultStoreOptions.GraphRoot = "/var/lib/containers/storage"
DefaultStoreOptions.GraphDriverName = ""
- ReloadConfigurationFile(defaultConfigFile, &DefaultStoreOptions)
+ ReloadConfigurationFile(DefaultConfigFile, &DefaultStoreOptions)
}
func GetDefaultMountOptions() ([]string, error) {
diff --git a/vendor/github.com/containers/storage/vendor.conf b/vendor/github.com/containers/storage/vendor.conf
index fa52584d7..04af9010b 100644
--- a/vendor/github.com/containers/storage/vendor.conf
+++ b/vendor/github.com/containers/storage/vendor.conf
@@ -8,7 +8,7 @@ github.com/mattn/go-shellwords 753a2322a99f87c0eff284980e77f53041555bc6
github.com/mistifyio/go-zfs c0224de804d438efd11ea6e52ada8014537d6062
github.com/opencontainers/go-digest master
github.com/opencontainers/runc 6c22e77604689db8725fa866f0f2ec0b3e8c3a07
-github.com/opencontainers/selinux 36a9bc45a08c85f2c52bd9eb32e20267876773bd
+github.com/opencontainers/selinux v1.1
github.com/ostreedev/ostree-go master
github.com/pborman/uuid 1b00554d822231195d1babd97ff4a781231955c9
github.com/pkg/errors master
@@ -23,3 +23,6 @@ golang.org/x/net 7dcfb8076726a3fdd9353b6b8a1f1b6be6811bd6
golang.org/x/sys 07c182904dbd53199946ba614a412c61d3c548f5
gotest.tools master
github.com/google/go-cmp master
+github.com/klauspost/pgzip v1.2.1
+github.com/klauspost/compress v1.4.1
+github.com/klauspost/cpuid v1.2.0
diff --git a/vendor/github.com/coreos/go-iptables/iptables/iptables.go b/vendor/github.com/coreos/go-iptables/iptables/iptables.go
index 3b62fe205..8db2597a4 100644
--- a/vendor/github.com/coreos/go-iptables/iptables/iptables.go
+++ b/vendor/github.com/coreos/go-iptables/iptables/iptables.go
@@ -29,11 +29,15 @@ import (
// Adds the output of stderr to exec.ExitError
type Error struct {
exec.ExitError
- cmd exec.Cmd
- msg string
+ cmd exec.Cmd
+ msg string
+ exitStatus *int //for overriding
}
func (e *Error) ExitStatus() int {
+ if e.exitStatus != nil {
+ return *e.exitStatus
+ }
return e.Sys().(syscall.WaitStatus).ExitStatus()
}
@@ -65,6 +69,7 @@ type IPTables struct {
v1 int
v2 int
v3 int
+ mode string // the underlying iptables operating mode, e.g. nf_tables
}
// New creates a new IPTables.
@@ -81,12 +86,10 @@ func NewWithProtocol(proto Protocol) (*IPTables, error) {
return nil, err
}
vstring, err := getIptablesVersionString(path)
- v1, v2, v3, err := extractIptablesVersion(vstring)
+ v1, v2, v3, mode, err := extractIptablesVersion(vstring)
+
+ checkPresent, waitPresent, randomFullyPresent := getIptablesCommandSupport(v1, v2, v3)
- checkPresent, waitPresent, randomFullyPresent, err := getIptablesCommandSupport(v1, v2, v3)
- if err != nil {
- return nil, fmt.Errorf("error checking iptables version: %v", err)
- }
ipt := IPTables{
path: path,
proto: proto,
@@ -96,6 +99,7 @@ func NewWithProtocol(proto Protocol) (*IPTables, error) {
v1: v1,
v2: v2,
v3: v3,
+ mode: mode,
}
return &ipt, nil
}
@@ -266,10 +270,27 @@ func (ipt *IPTables) executeList(args []string) ([]string, error) {
}
rules := strings.Split(stdout.String(), "\n")
+
+ // strip trailing newline
if len(rules) > 0 && rules[len(rules)-1] == "" {
rules = rules[:len(rules)-1]
}
+ // nftables mode doesn't return an error code when listing a non-existent
+ // chain. Patch that up.
+ if len(rules) == 0 && ipt.mode == "nf_tables" {
+ v := 1
+ return nil, &Error{
+ cmd: exec.Cmd{Args: args},
+ msg: "iptables: No chain/target/match by that name.",
+ exitStatus: &v,
+ }
+ }
+
+ for i, rule := range rules {
+ rules[i] = filterRuleOutput(rule)
+ }
+
return rules, nil
}
@@ -284,11 +305,18 @@ func (ipt *IPTables) NewChain(table, chain string) error {
func (ipt *IPTables) ClearChain(table, chain string) error {
err := ipt.NewChain(table, chain)
+ // the exit code for "this table already exists" is different for
+ // different iptables modes
+ existsErr := 1
+ if ipt.mode == "nf_tables" {
+ existsErr = 4
+ }
+
eerr, eok := err.(*Error)
switch {
case err == nil:
return nil
- case eok && eerr.ExitStatus() == 1:
+ case eok && eerr.ExitStatus() == existsErr:
// chain already exists. Flush (clear) it.
return ipt.run("-t", table, "-F", chain)
default:
@@ -357,7 +385,7 @@ func (ipt *IPTables) runWithOutput(args []string, stdout io.Writer) error {
if err := cmd.Run(); err != nil {
switch e := err.(type) {
case *exec.ExitError:
- return &Error{*e, cmd, stderr.String()}
+ return &Error{*e, cmd, stderr.String(), nil}
default:
return err
}
@@ -376,36 +404,40 @@ func getIptablesCommand(proto Protocol) string {
}
// Checks if iptables has the "-C" and "--wait" flag
-func getIptablesCommandSupport(v1 int, v2 int, v3 int) (bool, bool, bool, error) {
-
- return iptablesHasCheckCommand(v1, v2, v3), iptablesHasWaitCommand(v1, v2, v3), iptablesHasRandomFully(v1, v2, v3), nil
+func getIptablesCommandSupport(v1 int, v2 int, v3 int) (bool, bool, bool) {
+ return iptablesHasCheckCommand(v1, v2, v3), iptablesHasWaitCommand(v1, v2, v3), iptablesHasRandomFully(v1, v2, v3)
}
-// getIptablesVersion returns the first three components of the iptables version.
-// e.g. "iptables v1.3.66" would return (1, 3, 66, nil)
-func extractIptablesVersion(str string) (int, int, int, error) {
- versionMatcher := regexp.MustCompile("v([0-9]+)\\.([0-9]+)\\.([0-9]+)")
+// getIptablesVersion returns the first three components of the iptables version
+// and the operating mode (e.g. nf_tables or legacy)
+// e.g. "iptables v1.3.66" would return (1, 3, 66, legacy, nil)
+func extractIptablesVersion(str string) (int, int, int, string, error) {
+ versionMatcher := regexp.MustCompile(`v([0-9]+)\.([0-9]+)\.([0-9]+)(?:\s+\((\w+))?`)
result := versionMatcher.FindStringSubmatch(str)
if result == nil {
- return 0, 0, 0, fmt.Errorf("no iptables version found in string: %s", str)
+ return 0, 0, 0, "", fmt.Errorf("no iptables version found in string: %s", str)
}
v1, err := strconv.Atoi(result[1])
if err != nil {
- return 0, 0, 0, err
+ return 0, 0, 0, "", err
}
v2, err := strconv.Atoi(result[2])
if err != nil {
- return 0, 0, 0, err
+ return 0, 0, 0, "", err
}
v3, err := strconv.Atoi(result[3])
if err != nil {
- return 0, 0, 0, err
+ return 0, 0, 0, "", err
}
- return v1, v2, v3, nil
+ mode := "legacy"
+ if result[4] != "" {
+ mode = result[4]
+ }
+ return v1, v2, v3, mode, nil
}
// Runs "iptables --version" to get the version string
@@ -473,3 +505,26 @@ func (ipt *IPTables) existsForOldIptables(table, chain string, rulespec []string
}
return strings.Contains(stdout.String(), rs), nil
}
+
+// counterRegex is the regex used to detect nftables counter format
+var counterRegex = regexp.MustCompile(`^\[([0-9]+):([0-9]+)\] `)
+
+// filterRuleOutput works around some inconsistencies in output.
+// For example, when iptables is in legacy vs. nftables mode, it produces
+// different results.
+func filterRuleOutput(rule string) string {
+ out := rule
+
+ // work around an output difference in nftables mode where counters
+ // are output in iptables-save format, rather than iptables -S format
+ // The string begins with "[0:0]"
+ //
+ // Fixes #49
+ if groups := counterRegex.FindStringSubmatch(out); groups != nil {
+ // drop the brackets
+ out = out[len(groups[0]):]
+ out = fmt.Sprintf("%s -c %s %s", out, groups[1], groups[2])
+ }
+
+ return out
+}
diff --git a/vendor/github.com/cyphar/filepath-securejoin/join.go b/vendor/github.com/cyphar/filepath-securejoin/join.go
index c4ca3d713..f20985479 100644
--- a/vendor/github.com/cyphar/filepath-securejoin/join.go
+++ b/vendor/github.com/cyphar/filepath-securejoin/join.go
@@ -12,6 +12,7 @@ package securejoin
import (
"bytes"
+ "fmt"
"os"
"path/filepath"
"strings"
@@ -22,7 +23,7 @@ import (
// ErrSymlinkLoop is returned by SecureJoinVFS when too many symlinks have been
// evaluated in attempting to securely join the two given paths.
-var ErrSymlinkLoop = errors.Wrap(syscall.ELOOP, "secure join")
+var ErrSymlinkLoop = fmt.Errorf("SecureJoin: too many links")
// IsNotExist tells you if err is an error that implies that either the path
// accessed does not exist (or path components don't exist). This is
diff --git a/vendor/github.com/docker/distribution/blobs.go b/vendor/github.com/docker/distribution/blobs.go
index 01d309029..145b07853 100644
--- a/vendor/github.com/docker/distribution/blobs.go
+++ b/vendor/github.com/docker/distribution/blobs.go
@@ -1,13 +1,13 @@
package distribution
import (
+ "context"
"errors"
"fmt"
"io"
"net/http"
"time"
- "github.com/docker/distribution/context"
"github.com/docker/distribution/reference"
"github.com/opencontainers/go-digest"
)
diff --git a/vendor/github.com/docker/distribution/context/context.go b/vendor/github.com/docker/distribution/context/context.go
deleted file mode 100644
index 23cbf5b54..000000000
--- a/vendor/github.com/docker/distribution/context/context.go
+++ /dev/null
@@ -1,85 +0,0 @@
-package context
-
-import (
- "sync"
-
- "github.com/docker/distribution/uuid"
- "golang.org/x/net/context"
-)
-
-// Context is a copy of Context from the golang.org/x/net/context package.
-type Context interface {
- context.Context
-}
-
-// instanceContext is a context that provides only an instance id. It is
-// provided as the main background context.
-type instanceContext struct {
- Context
- id string // id of context, logged as "instance.id"
- once sync.Once // once protect generation of the id
-}
-
-func (ic *instanceContext) Value(key interface{}) interface{} {
- if key == "instance.id" {
- ic.once.Do(func() {
- // We want to lazy initialize the UUID such that we don't
- // call a random generator from the package initialization
- // code. For various reasons random could not be available
- // https://github.com/docker/distribution/issues/782
- ic.id = uuid.Generate().String()
- })
- return ic.id
- }
-
- return ic.Context.Value(key)
-}
-
-var background = &instanceContext{
- Context: context.Background(),
-}
-
-// Background returns a non-nil, empty Context. The background context
-// provides a single key, "instance.id" that is globally unique to the
-// process.
-func Background() Context {
- return background
-}
-
-// WithValue returns a copy of parent in which the value associated with key is
-// val. Use context Values only for request-scoped data that transits processes
-// and APIs, not for passing optional parameters to functions.
-func WithValue(parent Context, key, val interface{}) Context {
- return context.WithValue(parent, key, val)
-}
-
-// stringMapContext is a simple context implementation that checks a map for a
-// key, falling back to a parent if not present.
-type stringMapContext struct {
- context.Context
- m map[string]interface{}
-}
-
-// WithValues returns a context that proxies lookups through a map. Only
-// supports string keys.
-func WithValues(ctx context.Context, m map[string]interface{}) context.Context {
- mo := make(map[string]interface{}, len(m)) // make our own copy.
- for k, v := range m {
- mo[k] = v
- }
-
- return stringMapContext{
- Context: ctx,
- m: mo,
- }
-}
-
-func (smc stringMapContext) Value(key interface{}) interface{} {
- if ks, ok := key.(string); ok {
- if v, ok := smc.m[ks]; ok {
- return v
- }
- }
-
- return smc.Context.Value(key)
-}
diff --git a/vendor/github.com/docker/distribution/context/doc.go b/vendor/github.com/docker/distribution/context/doc.go
deleted file mode 100644
index 9b623074e..000000000
--- a/vendor/github.com/docker/distribution/context/doc.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// Package context provides several utilities for working with
-// golang.org/x/net/context in http requests. Primarily, the focus is on
-// logging relevant request information but this package is not limited to
-// that purpose.
-//
-// The easiest way to get started is to get the background context:
-//
-// ctx := context.Background()
-//
-// The returned context should be passed around your application and be the
-// root of all other context instances. If the application has a version, this
-// line should be called before anything else:
-//
-// ctx := context.WithVersion(context.Background(), version)
-//
-// The above will store the version in the context and will be available to
-// the logger.
-//
-// Logging
-//
-// The most useful aspect of this package is GetLogger. This function takes
-// any context.Context interface and returns the current logger from the
-// context. Canonical usage looks like this:
-//
-// GetLogger(ctx).Infof("something interesting happened")
-//
-// GetLogger also takes optional key arguments. The keys will be looked up in
-// the context and reported with the logger. The following example would
-// return a logger that prints the version with each log message:
-//
-// ctx := context.Context(context.Background(), "version", version)
-// GetLogger(ctx, "version").Infof("this log message has a version field")
-//
-// The above would print out a log message like this:
-//
-// INFO[0000] this log message has a version field version=v2.0.0-alpha.2.m
-//
-// When used with WithLogger, we gain the ability to decorate the context with
-// loggers that have information from disparate parts of the call stack.
-// Following from the version example, we can build a new context with the
-// configured logger such that we always print the version field:
-//
-// ctx = WithLogger(ctx, GetLogger(ctx, "version"))
-//
-// Since the logger has been pushed to the context, we can now get the version
-// field for free with our log messages. Future calls to GetLogger on the new
-// context will have the version field:
-//
-// GetLogger(ctx).Infof("this log message has a version field")
-//
-// This becomes more powerful when we start stacking loggers. Let's say we
-// have the version logger from above but also want a request id. Using the
-// context above, in our request scoped function, we place another logger in
-// the context:
-//
-// ctx = context.WithValue(ctx, "http.request.id", "unique id") // called when building request context
-// ctx = WithLogger(ctx, GetLogger(ctx, "http.request.id"))
-//
-// When GetLogger is called on the new context, "http.request.id" will be
-// included as a logger field, along with the original "version" field:
-//
-// INFO[0000] this log message has a version field http.request.id=unique id version=v2.0.0-alpha.2.m
-//
-// Note that this only affects the new context, the previous context, with the
-// version field, can be used independently. Put another way, the new logger,
-// added to the request context, is unique to that context and can have
-// request scoped variables.
-//
-// HTTP Requests
-//
-// This package also contains several methods for working with http requests.
-// The concepts are very similar to those described above. We simply place the
-// request in the context using WithRequest. This makes the request variables
-// available. GetRequestLogger can then be called to get request specific
-// variables in a log line:
-//
-// ctx = WithRequest(ctx, req)
-// GetRequestLogger(ctx).Infof("request variables")
-//
-// Like above, if we want to include the request data in all log messages in
-// the context, we push the logger to a new context and use that one:
-//
-// ctx = WithLogger(ctx, GetRequestLogger(ctx))
-//
-// The concept is fairly powerful and ensures that calls throughout the stack
-// can be traced in log messages. Using the fields like "http.request.id", one
-// can analyze call flow for a particular request with a simple grep of the
-// logs.
-package context
diff --git a/vendor/github.com/docker/distribution/context/http.go b/vendor/github.com/docker/distribution/context/http.go
deleted file mode 100644
index 7d65c8524..000000000
--- a/vendor/github.com/docker/distribution/context/http.go
+++ /dev/null
@@ -1,366 +0,0 @@
-package context
-
-import (
- "errors"
- "net"
- "net/http"
- "strings"
- "sync"
- "time"
-
- "github.com/docker/distribution/uuid"
- "github.com/gorilla/mux"
- log "github.com/sirupsen/logrus"
-)
-
-// Common errors used with this package.
-var (
- ErrNoRequestContext = errors.New("no http request in context")
- ErrNoResponseWriterContext = errors.New("no http response in context")
-)
-
-func parseIP(ipStr string) net.IP {
- ip := net.ParseIP(ipStr)
- if ip == nil {
- log.Warnf("invalid remote IP address: %q", ipStr)
- }
- return ip
-}
-
-// RemoteAddr extracts the remote address of the request, taking into
-// account proxy headers.
-func RemoteAddr(r *http.Request) string {
- if prior := r.Header.Get("X-Forwarded-For"); prior != "" {
- proxies := strings.Split(prior, ",")
- if len(proxies) > 0 {
- remoteAddr := strings.Trim(proxies[0], " ")
- if parseIP(remoteAddr) != nil {
- return remoteAddr
- }
- }
- }
- // X-Real-Ip is less supported, but worth checking in the
- // absence of X-Forwarded-For
- if realIP := r.Header.Get("X-Real-Ip"); realIP != "" {
- if parseIP(realIP) != nil {
- return realIP
- }
- }
-
- return r.RemoteAddr
-}
-
-// RemoteIP extracts the remote IP of the request, taking into
-// account proxy headers.
-func RemoteIP(r *http.Request) string {
- addr := RemoteAddr(r)
-
- // Try parsing it as "IP:port"
- if ip, _, err := net.SplitHostPort(addr); err == nil {
- return ip
- }
-
- return addr
-}
-
-// WithRequest places the request on the context. The context of the request
-// is assigned a unique id, available at "http.request.id". The request itself
-// is available at "http.request". Other common attributes are available under
-// the prefix "http.request.". If a request is already present on the context,
-// this method will panic.
-func WithRequest(ctx Context, r *http.Request) Context {
- if ctx.Value("http.request") != nil {
- // NOTE(stevvooe): This needs to be considered a programming error. It
- // is unlikely that we'd want to have more than one request in
- // context.
- panic("only one request per context")
- }
-
- return &httpRequestContext{
- Context: ctx,
- startedAt: time.Now(),
- id: uuid.Generate().String(),
- r: r,
- }
-}
-
-// GetRequest returns the http request in the given context. Returns
-// ErrNoRequestContext if the context does not have an http request associated
-// with it.
-func GetRequest(ctx Context) (*http.Request, error) {
- if r, ok := ctx.Value("http.request").(*http.Request); r != nil && ok {
- return r, nil
- }
- return nil, ErrNoRequestContext
-}
-
-// GetRequestID attempts to resolve the current request id, if possible. An
-// error is return if it is not available on the context.
-func GetRequestID(ctx Context) string {
- return GetStringValue(ctx, "http.request.id")
-}
-
-// WithResponseWriter returns a new context and response writer that makes
-// interesting response statistics available within the context.
-func WithResponseWriter(ctx Context, w http.ResponseWriter) (Context, http.ResponseWriter) {
- if closeNotifier, ok := w.(http.CloseNotifier); ok {
- irwCN := &instrumentedResponseWriterCN{
- instrumentedResponseWriter: instrumentedResponseWriter{
- ResponseWriter: w,
- Context: ctx,
- },
- CloseNotifier: closeNotifier,
- }
-
- return irwCN, irwCN
- }
-
- irw := instrumentedResponseWriter{
- ResponseWriter: w,
- Context: ctx,
- }
- return &irw, &irw
-}
-
-// GetResponseWriter returns the http.ResponseWriter from the provided
-// context. If not present, ErrNoResponseWriterContext is returned. The
-// returned instance provides instrumentation in the context.
-func GetResponseWriter(ctx Context) (http.ResponseWriter, error) {
- v := ctx.Value("http.response")
-
- rw, ok := v.(http.ResponseWriter)
- if !ok || rw == nil {
- return nil, ErrNoResponseWriterContext
- }
-
- return rw, nil
-}
-
-// getVarsFromRequest let's us change request vars implementation for testing
-// and maybe future changes.
-var getVarsFromRequest = mux.Vars
-
-// WithVars extracts gorilla/mux vars and makes them available on the returned
-// context. Variables are available at keys with the prefix "vars.". For
-// example, if looking for the variable "name", it can be accessed as
-// "vars.name". Implementations that are accessing values need not know that
-// the underlying context is implemented with gorilla/mux vars.
-func WithVars(ctx Context, r *http.Request) Context {
- return &muxVarsContext{
- Context: ctx,
- vars: getVarsFromRequest(r),
- }
-}
-
-// GetRequestLogger returns a logger that contains fields from the request in
-// the current context. If the request is not available in the context, no
-// fields will display. Request loggers can safely be pushed onto the context.
-func GetRequestLogger(ctx Context) Logger {
- return GetLogger(ctx,
- "http.request.id",
- "http.request.method",
- "http.request.host",
- "http.request.uri",
- "http.request.referer",
- "http.request.useragent",
- "http.request.remoteaddr",
- "http.request.contenttype")
-}
-
-// GetResponseLogger reads the current response stats and builds a logger.
-// Because the values are read at call time, pushing a logger returned from
-// this function on the context will lead to missing or invalid data. Only
-// call this at the end of a request, after the response has been written.
-func GetResponseLogger(ctx Context) Logger {
- l := getLogrusLogger(ctx,
- "http.response.written",
- "http.response.status",
- "http.response.contenttype")
-
- duration := Since(ctx, "http.request.startedat")
-
- if duration > 0 {
- l = l.WithField("http.response.duration", duration.String())
- }
-
- return l
-}
-
-// httpRequestContext makes information about a request available to context.
-type httpRequestContext struct {
- Context
-
- startedAt time.Time
- id string
- r *http.Request
-}
-
-// Value returns a keyed element of the request for use in the context. To get
-// the request itself, query "request". For other components, access them as
-// "request.<component>". For example, r.RequestURI
-func (ctx *httpRequestContext) Value(key interface{}) interface{} {
- if keyStr, ok := key.(string); ok {
- if keyStr == "http.request" {
- return ctx.r
- }
-
- if !strings.HasPrefix(keyStr, "http.request.") {
- goto fallback
- }
-
- parts := strings.Split(keyStr, ".")
-
- if len(parts) != 3 {
- goto fallback
- }
-
- switch parts[2] {
- case "uri":
- return ctx.r.RequestURI
- case "remoteaddr":
- return RemoteAddr(ctx.r)
- case "method":
- return ctx.r.Method
- case "host":
- return ctx.r.Host
- case "referer":
- referer := ctx.r.Referer()
- if referer != "" {
- return referer
- }
- case "useragent":
- return ctx.r.UserAgent()
- case "id":
- return ctx.id
- case "startedat":
- return ctx.startedAt
- case "contenttype":
- ct := ctx.r.Header.Get("Content-Type")
- if ct != "" {
- return ct
- }
- }
- }
-
-fallback:
- return ctx.Context.Value(key)
-}
-
-type muxVarsContext struct {
- Context
- vars map[string]string
-}
-
-func (ctx *muxVarsContext) Value(key interface{}) interface{} {
- if keyStr, ok := key.(string); ok {
- if keyStr == "vars" {
- return ctx.vars
- }
-
- if strings.HasPrefix(keyStr, "vars.") {
- keyStr = strings.TrimPrefix(keyStr, "vars.")
- }
-
- if v, ok := ctx.vars[keyStr]; ok {
- return v
- }
- }
-
- return ctx.Context.Value(key)
-}
-
-// instrumentedResponseWriterCN provides response writer information in a
-// context. It implements http.CloseNotifier so that users can detect
-// early disconnects.
-type instrumentedResponseWriterCN struct {
- instrumentedResponseWriter
- http.CloseNotifier
-}
-
-// instrumentedResponseWriter provides response writer information in a
-// context. This variant is only used in the case where CloseNotifier is not
-// implemented by the parent ResponseWriter.
-type instrumentedResponseWriter struct {
- http.ResponseWriter
- Context
-
- mu sync.Mutex
- status int
- written int64
-}
-
-func (irw *instrumentedResponseWriter) Write(p []byte) (n int, err error) {
- n, err = irw.ResponseWriter.Write(p)
-
- irw.mu.Lock()
- irw.written += int64(n)
-
- // Guess the likely status if not set.
- if irw.status == 0 {
- irw.status = http.StatusOK
- }
-
- irw.mu.Unlock()
-
- return
-}
-
-func (irw *instrumentedResponseWriter) WriteHeader(status int) {
- irw.ResponseWriter.WriteHeader(status)
-
- irw.mu.Lock()
- irw.status = status
- irw.mu.Unlock()
-}
-
-func (irw *instrumentedResponseWriter) Flush() {
- if flusher, ok := irw.ResponseWriter.(http.Flusher); ok {
- flusher.Flush()
- }
-}
-
-func (irw *instrumentedResponseWriter) Value(key interface{}) interface{} {
- if keyStr, ok := key.(string); ok {
- if keyStr == "http.response" {
- return irw
- }
-
- if !strings.HasPrefix(keyStr, "http.response.") {
- goto fallback
- }
-
- parts := strings.Split(keyStr, ".")
-
- if len(parts) != 3 {
- goto fallback
- }
-
- irw.mu.Lock()
- defer irw.mu.Unlock()
-
- switch parts[2] {
- case "written":
- return irw.written
- case "status":
- return irw.status
- case "contenttype":
- contentType := irw.Header().Get("Content-Type")
- if contentType != "" {
- return contentType
- }
- }
- }
-
-fallback:
- return irw.Context.Value(key)
-}
-
-func (irw *instrumentedResponseWriterCN) Value(key interface{}) interface{} {
- if keyStr, ok := key.(string); ok {
- if keyStr == "http.response" {
- return irw
- }
- }
-
- return irw.instrumentedResponseWriter.Value(key)
-}
diff --git a/vendor/github.com/docker/distribution/context/logger.go b/vendor/github.com/docker/distribution/context/logger.go
deleted file mode 100644
index 86c5964e4..000000000
--- a/vendor/github.com/docker/distribution/context/logger.go
+++ /dev/null
@@ -1,116 +0,0 @@
-package context
-
-import (
- "fmt"
-
- "github.com/sirupsen/logrus"
- "runtime"
-)
-
-// Logger provides a leveled-logging interface.
-type Logger interface {
- // standard logger methods
- Print(args ...interface{})
- Printf(format string, args ...interface{})
- Println(args ...interface{})
-
- Fatal(args ...interface{})
- Fatalf(format string, args ...interface{})
- Fatalln(args ...interface{})
-
- Panic(args ...interface{})
- Panicf(format string, args ...interface{})
- Panicln(args ...interface{})
-
- // Leveled methods, from logrus
- Debug(args ...interface{})
- Debugf(format string, args ...interface{})
- Debugln(args ...interface{})
-
- Error(args ...interface{})
- Errorf(format string, args ...interface{})
- Errorln(args ...interface{})
-
- Info(args ...interface{})
- Infof(format string, args ...interface{})
- Infoln(args ...interface{})
-
- Warn(args ...interface{})
- Warnf(format string, args ...interface{})
- Warnln(args ...interface{})
-}
-
-// WithLogger creates a new context with provided logger.
-func WithLogger(ctx Context, logger Logger) Context {
- return WithValue(ctx, "logger", logger)
-}
-
-// GetLoggerWithField returns a logger instance with the specified field key
-// and value without affecting the context. Extra specified keys will be
-// resolved from the context.
-func GetLoggerWithField(ctx Context, key, value interface{}, keys ...interface{}) Logger {
- return getLogrusLogger(ctx, keys...).WithField(fmt.Sprint(key), value)
-}
-
-// GetLoggerWithFields returns a logger instance with the specified fields
-// without affecting the context. Extra specified keys will be resolved from
-// the context.
-func GetLoggerWithFields(ctx Context, fields map[interface{}]interface{}, keys ...interface{}) Logger {
- // must convert from interface{} -> interface{} to string -> interface{} for logrus.
- lfields := make(logrus.Fields, len(fields))
- for key, value := range fields {
- lfields[fmt.Sprint(key)] = value
- }
-
- return getLogrusLogger(ctx, keys...).WithFields(lfields)
-}
-
-// GetLogger returns the logger from the current context, if present. If one
-// or more keys are provided, they will be resolved on the context and
-// included in the logger. While context.Value takes an interface, any key
-// argument passed to GetLogger will be passed to fmt.Sprint when expanded as
-// a logging key field. If context keys are integer constants, for example,
-// its recommended that a String method is implemented.
-func GetLogger(ctx Context, keys ...interface{}) Logger {
- return getLogrusLogger(ctx, keys...)
-}
-
-// GetLogrusLogger returns the logrus logger for the context. If one more keys
-// are provided, they will be resolved on the context and included in the
-// logger. Only use this function if specific logrus functionality is
-// required.
-func getLogrusLogger(ctx Context, keys ...interface{}) *logrus.Entry {
- var logger *logrus.Entry
-
- // Get a logger, if it is present.
- loggerInterface := ctx.Value("logger")
- if loggerInterface != nil {
- if lgr, ok := loggerInterface.(*logrus.Entry); ok {
- logger = lgr
- }
- }
-
- if logger == nil {
- fields := logrus.Fields{}
-
- // Fill in the instance id, if we have it.
- instanceID := ctx.Value("instance.id")
- if instanceID != nil {
- fields["instance.id"] = instanceID
- }
-
- fields["go.version"] = runtime.Version()
- // If no logger is found, just return the standard logger.
- logger = logrus.StandardLogger().WithFields(fields)
- }
-
- fields := logrus.Fields{}
- for _, key := range keys {
- v := ctx.Value(key)
- if v != nil {
- fields[fmt.Sprint(key)] = v
- }
- }
-
- return logger.WithFields(fields)
-}
diff --git a/vendor/github.com/docker/distribution/context/trace.go b/vendor/github.com/docker/distribution/context/trace.go
deleted file mode 100644
index 721964a84..000000000
--- a/vendor/github.com/docker/distribution/context/trace.go
+++ /dev/null
@@ -1,104 +0,0 @@
-package context
-
-import (
- "runtime"
- "time"
-
- "github.com/docker/distribution/uuid"
-)
-
-// WithTrace allocates a traced timing span in a new context. This allows a
-// caller to track the time between calling WithTrace and the returned done
-// function. When the done function is called, a log message is emitted with a
-// "trace.duration" field, corresponding to the elapsed time and a
-// "trace.func" field, corresponding to the function that called WithTrace.
-//
-// The logging keys "trace.id" and "trace.parent.id" are provided to implement
-// dapper-like tracing. This function should be complemented with a WithSpan
-// method that could be used for tracing distributed RPC calls.
-//
-// The main benefit of this function is to post-process log messages or
-// intercept them in a hook to provide timing data. Trace ids and parent ids
-// can also be linked to provide call tracing, if so required.
-//
-// Here is an example of the usage:
-//
-// func timedOperation(ctx Context) {
-// ctx, done := WithTrace(ctx)
-// defer done("this will be the log message")
-// // ... function body ...
-// }
-//
-// If the function ran for roughly 1s, such a usage would emit a log message
-// as follows:
-//
-// INFO[0001] this will be the log message trace.duration=1.004575763s trace.func=github.com/docker/distribution/context.traceOperation trace.id=<id> ...
-//
-// Notice that the function name is automatically resolved, along with the
-// package and a trace id is emitted that can be linked with parent ids.
-func WithTrace(ctx Context) (Context, func(format string, a ...interface{})) {
- if ctx == nil {
- ctx = Background()
- }
-
- pc, file, line, _ := runtime.Caller(1)
- f := runtime.FuncForPC(pc)
- ctx = &traced{
- Context: ctx,
- id: uuid.Generate().String(),
- start: time.Now(),
- parent: GetStringValue(ctx, "trace.id"),
- fnname: f.Name(),
- file: file,
- line: line,
- }
-
- return ctx, func(format string, a ...interface{}) {
- GetLogger(ctx,
- "trace.duration",
- "trace.id",
- "trace.parent.id",
- "trace.func",
- "trace.file",
- "trace.line").
- Debugf(format, a...)
- }
-}
-
-// traced represents a context that is traced for function call timing. It
-// also provides fast lookup for the various attributes that are available on
-// the trace.
-type traced struct {
- Context
- id string
- parent string
- start time.Time
- fnname string
- file string
- line int
-}
-
-func (ts *traced) Value(key interface{}) interface{} {
- switch key {
- case "trace.start":
- return ts.start
- case "trace.duration":
- return time.Since(ts.start)
- case "trace.id":
- return ts.id
- case "trace.parent.id":
- if ts.parent == "" {
- return nil // must return nil to signal no parent.
- }
-
- return ts.parent
- case "trace.func":
- return ts.fnname
- case "trace.file":
- return ts.file
- case "trace.line":
- return ts.line
- }
-
- return ts.Context.Value(key)
-}
diff --git a/vendor/github.com/docker/distribution/context/util.go b/vendor/github.com/docker/distribution/context/util.go
deleted file mode 100644
index cb9ef52e3..000000000
--- a/vendor/github.com/docker/distribution/context/util.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package context
-
-import (
- "time"
-)
-
-// Since looks up key, which should be a time.Time, and returns the duration
-// since that time. If the key is not found, the value returned will be zero.
-// This is helpful when inferring metrics related to context execution times.
-func Since(ctx Context, key interface{}) time.Duration {
- if startedAt, ok := ctx.Value(key).(time.Time); ok {
- return time.Since(startedAt)
- }
- return 0
-}
-
-// GetStringValue returns a string value from the context. The empty string
-// will be returned if not found.
-func GetStringValue(ctx Context, key interface{}) (value string) {
- if valuev, ok := ctx.Value(key).(string); ok {
- value = valuev
- }
- return value
-}
diff --git a/vendor/github.com/docker/distribution/context/version.go b/vendor/github.com/docker/distribution/context/version.go
deleted file mode 100644
index 746cda02e..000000000
--- a/vendor/github.com/docker/distribution/context/version.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package context
-
-// WithVersion stores the application version in the context. The new context
-// gets a logger to ensure log messages are marked with the application
-// version.
-func WithVersion(ctx Context, version string) Context {
- ctx = WithValue(ctx, "version", version)
- // push a new logger onto the stack
- return WithLogger(ctx, GetLogger(ctx, "version"))
-}
-
-// GetVersion returns the application version from the context. An empty
-// string may returned if the version was not set on the context.
-func GetVersion(ctx Context) string {
- return GetStringValue(ctx, "version")
-}
diff --git a/vendor/github.com/docker/distribution/manifests.go b/vendor/github.com/docker/distribution/manifests.go
index 2c99f25d3..1816baea1 100644
--- a/vendor/github.com/docker/distribution/manifests.go
+++ b/vendor/github.com/docker/distribution/manifests.go
@@ -1,10 +1,10 @@
package distribution
import (
+ "context"
"fmt"
"mime"
- "github.com/docker/distribution/context"
"github.com/opencontainers/go-digest"
)
diff --git a/vendor/github.com/docker/distribution/registry.go b/vendor/github.com/docker/distribution/registry.go
index 1da1d533f..c34207d03 100644
--- a/vendor/github.com/docker/distribution/registry.go
+++ b/vendor/github.com/docker/distribution/registry.go
@@ -1,7 +1,8 @@
package distribution
import (
- "github.com/docker/distribution/context"
+ "context"
+
"github.com/docker/distribution/reference"
)
diff --git a/vendor/github.com/docker/distribution/registry/client/blob_writer.go b/vendor/github.com/docker/distribution/registry/client/blob_writer.go
index e3ffcb00f..695bf852f 100644
--- a/vendor/github.com/docker/distribution/registry/client/blob_writer.go
+++ b/vendor/github.com/docker/distribution/registry/client/blob_writer.go
@@ -2,6 +2,7 @@ package client
import (
"bytes"
+ "context"
"fmt"
"io"
"io/ioutil"
@@ -9,7 +10,6 @@ import (
"time"
"github.com/docker/distribution"
- "github.com/docker/distribution/context"
)
type httpBlobUpload struct {
diff --git a/vendor/github.com/docker/distribution/registry/client/repository.go b/vendor/github.com/docker/distribution/registry/client/repository.go
index b82a968e2..8bd2c3fb6 100644
--- a/vendor/github.com/docker/distribution/registry/client/repository.go
+++ b/vendor/github.com/docker/distribution/registry/client/repository.go
@@ -2,6 +2,7 @@ package client
import (
"bytes"
+ "context"
"encoding/json"
"errors"
"fmt"
@@ -14,7 +15,6 @@ import (
"time"
"github.com/docker/distribution"
- "github.com/docker/distribution/context"
"github.com/docker/distribution/reference"
"github.com/docker/distribution/registry/api/v2"
"github.com/docker/distribution/registry/client/transport"
diff --git a/vendor/github.com/docker/distribution/registry/storage/cache/cachedblobdescriptorstore.go b/vendor/github.com/docker/distribution/registry/storage/cache/cachedblobdescriptorstore.go
index f647616bc..cdc34f5fe 100644
--- a/vendor/github.com/docker/distribution/registry/storage/cache/cachedblobdescriptorstore.go
+++ b/vendor/github.com/docker/distribution/registry/storage/cache/cachedblobdescriptorstore.go
@@ -1,10 +1,10 @@
package cache
import (
- "github.com/docker/distribution/context"
- "github.com/opencontainers/go-digest"
+ "context"
"github.com/docker/distribution"
+ "github.com/opencontainers/go-digest"
)
// Metrics is used to hold metric counters
@@ -16,12 +16,20 @@ type Metrics struct {
Misses uint64
}
+// Logger can be provided on the MetricsTracker to log errors.
+//
+// Usually, this is just a proxy to dcontext.GetLogger.
+type Logger interface {
+ Errorf(format string, args ...interface{})
+}
+
// MetricsTracker represents a metric tracker
// which simply counts the number of hits and misses.
type MetricsTracker interface {
Hit()
Miss()
Metrics() Metrics
+ Logger(context.Context) Logger
}
type cachedBlobStatter struct {
@@ -53,7 +61,7 @@ func (cbds *cachedBlobStatter) Stat(ctx context.Context, dgst digest.Digest) (di
desc, err := cbds.cache.Stat(ctx, dgst)
if err != nil {
if err != distribution.ErrBlobUnknown {
- context.GetLogger(ctx).Errorf("error retrieving descriptor from cache: %v", err)
+ logErrorf(ctx, cbds.tracker, "error retrieving descriptor from cache: %v", err)
}
goto fallback
@@ -73,7 +81,7 @@ fallback:
}
if err := cbds.cache.SetDescriptor(ctx, dgst, desc); err != nil {
- context.GetLogger(ctx).Errorf("error adding descriptor %v to cache: %v", desc.Digest, err)
+ logErrorf(ctx, cbds.tracker, "error adding descriptor %v to cache: %v", desc.Digest, err)
}
return desc, err
@@ -95,7 +103,19 @@ func (cbds *cachedBlobStatter) Clear(ctx context.Context, dgst digest.Digest) er
func (cbds *cachedBlobStatter) SetDescriptor(ctx context.Context, dgst digest.Digest, desc distribution.Descriptor) error {
if err := cbds.cache.SetDescriptor(ctx, dgst, desc); err != nil {
- context.GetLogger(ctx).Errorf("error adding descriptor %v to cache: %v", desc.Digest, err)
+ logErrorf(ctx, cbds.tracker, "error adding descriptor %v to cache: %v", desc.Digest, err)
}
return nil
}
+
+func logErrorf(ctx context.Context, tracker MetricsTracker, format string, args ...interface{}) {
+ if tracker == nil {
+ return
+ }
+
+ logger := tracker.Logger(ctx)
+ if logger == nil {
+ return
+ }
+ logger.Errorf(format, args...)
+}
diff --git a/vendor/github.com/docker/distribution/registry/storage/cache/memory/memory.go b/vendor/github.com/docker/distribution/registry/storage/cache/memory/memory.go
index b2fcaf4e8..42d94d9bd 100644
--- a/vendor/github.com/docker/distribution/registry/storage/cache/memory/memory.go
+++ b/vendor/github.com/docker/distribution/registry/storage/cache/memory/memory.go
@@ -1,10 +1,10 @@
package memory
import (
+ "context"
"sync"
"github.com/docker/distribution"
- "github.com/docker/distribution/context"
"github.com/docker/distribution/reference"
"github.com/docker/distribution/registry/storage/cache"
"github.com/opencontainers/go-digest"
diff --git a/vendor/github.com/docker/distribution/tags.go b/vendor/github.com/docker/distribution/tags.go
index 503056596..f22df2b85 100644
--- a/vendor/github.com/docker/distribution/tags.go
+++ b/vendor/github.com/docker/distribution/tags.go
@@ -1,7 +1,7 @@
package distribution
import (
- "github.com/docker/distribution/context"
+ "context"
)
// TagService provides access to information about tagged objects.
diff --git a/vendor/github.com/docker/distribution/uuid/uuid.go b/vendor/github.com/docker/distribution/uuid/uuid.go
deleted file mode 100644
index d433ccaf5..000000000
--- a/vendor/github.com/docker/distribution/uuid/uuid.go
+++ /dev/null
@@ -1,126 +0,0 @@
-// Package uuid provides simple UUID generation. Only version 4 style UUIDs
-// can be generated.
-//
-// Please see http://tools.ietf.org/html/rfc4122 for details on UUIDs.
-package uuid
-
-import (
- "crypto/rand"
- "fmt"
- "io"
- "os"
- "syscall"
- "time"
-)
-
-const (
- // Bits is the number of bits in a UUID
- Bits = 128
-
- // Size is the number of bytes in a UUID
- Size = Bits / 8
-
- format = "%08x-%04x-%04x-%04x-%012x"
-)
-
-var (
- // ErrUUIDInvalid indicates a parsed string is not a valid uuid.
- ErrUUIDInvalid = fmt.Errorf("invalid uuid")
-
- // Loggerf can be used to override the default logging destination. Such
- // log messages in this library should be logged at warning or higher.
- Loggerf = func(format string, args ...interface{}) {}
-)
-
-// UUID represents a UUID value. UUIDs can be compared and set to other values
-// and accessed by byte.
-type UUID [Size]byte
-
-// Generate creates a new, version 4 uuid.
-func Generate() (u UUID) {
- const (
- // ensures we backoff for less than 450ms total. Use the following to
- // select new value, in units of 10ms:
- // n*(n+1)/2 = d -> n^2 + n - 2d -> n = (sqrt(8d + 1) - 1)/2
- maxretries = 9
- backoff = time.Millisecond * 10
- )
-
- var (
- totalBackoff time.Duration
- count int
- retries int
- )
-
- for {
- // This should never block but the read may fail. Because of this,
- // we just try to read the random number generator until we get
- // something. This is a very rare condition but may happen.
- b := time.Duration(retries) * backoff
- time.Sleep(b)
- totalBackoff += b
-
- n, err := io.ReadFull(rand.Reader, u[count:])
- if err != nil {
- if retryOnError(err) && retries < maxretries {
- count += n
- retries++
- Loggerf("error generating version 4 uuid, retrying: %v", err)
- continue
- }
-
- // Any other errors represent a system problem. What did someone
- // do to /dev/urandom?
- panic(fmt.Errorf("error reading random number generator, retried for %v: %v", totalBackoff.String(), err))
- }
-
- break
- }
-
- u[6] = (u[6] & 0x0f) | 0x40 // set version byte
- u[8] = (u[8] & 0x3f) | 0x80 // set high order byte 0b10{8,9,a,b}
-
- return u
-}
-
-// Parse attempts to extract a uuid from the string or returns an error.
-func Parse(s string) (u UUID, err error) {
- if len(s) != 36 {
- return UUID{}, ErrUUIDInvalid
- }
-
- // create stack addresses for each section of the uuid.
- p := make([][]byte, 5)
-
- if _, err := fmt.Sscanf(s, format, &p[0], &p[1], &p[2], &p[3], &p[4]); err != nil {
- return u, err
- }
-
- copy(u[0:4], p[0])
- copy(u[4:6], p[1])
- copy(u[6:8], p[2])
- copy(u[8:10], p[3])
- copy(u[10:16], p[4])
-
- return
-}
-
-func (u UUID) String() string {
- return fmt.Sprintf(format, u[:4], u[4:6], u[6:8], u[8:10], u[10:])
-}
-
-// retryOnError tries to detect whether or not retrying would be fruitful.
-func retryOnError(err error) bool {
- switch err := err.(type) {
- case *os.PathError:
- return retryOnError(err.Err) // unpack the target error
- case syscall.Errno:
- if err == syscall.EPERM {
- // EPERM represents an entropy pool exhaustion, a condition under
- // which we backoff and retry.
- return true
- }
- }
-
- return false
-}
diff --git a/vendor/github.com/docker/docker/contrib/README.md b/vendor/github.com/docker/docker/contrib/README.md
new file mode 100644
index 000000000..92b1d9443
--- /dev/null
+++ b/vendor/github.com/docker/docker/contrib/README.md
@@ -0,0 +1,4 @@
+The `contrib` directory contains scripts, images, and other helpful things
+which are not part of the core docker distribution. Please note that they
+could be out of date, since they do not receive the same attention as the
+rest of the repository.
diff --git a/vendor/github.com/docker/docker/contrib/nnp-test/nnp-test.c b/vendor/github.com/docker/docker/contrib/nnp-test/nnp-test.c
new file mode 100644
index 000000000..b767da7e1
--- /dev/null
+++ b/vendor/github.com/docker/docker/contrib/nnp-test/nnp-test.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+int main(int argc, char *argv[])
+{
+ printf("EUID=%d\n", geteuid());
+ return 0;
+}
+
diff --git a/vendor/github.com/docker/docker/contrib/syscall-test/acct.c b/vendor/github.com/docker/docker/contrib/syscall-test/acct.c
new file mode 100644
index 000000000..88ac28796
--- /dev/null
+++ b/vendor/github.com/docker/docker/contrib/syscall-test/acct.c
@@ -0,0 +1,16 @@
+#define _GNU_SOURCE
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+int main(int argc, char **argv)
+{
+ int err = acct("/tmp/t");
+ if (err == -1) {
+ fprintf(stderr, "acct failed: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ exit(EXIT_SUCCESS);
+}
diff --git a/vendor/github.com/docker/docker/contrib/syscall-test/exit32.s b/vendor/github.com/docker/docker/contrib/syscall-test/exit32.s
new file mode 100644
index 000000000..8bbb5c58b
--- /dev/null
+++ b/vendor/github.com/docker/docker/contrib/syscall-test/exit32.s
@@ -0,0 +1,7 @@
+.globl _start
+.text
+_start:
+ xorl %eax, %eax
+ incl %eax
+ movb $0, %bl
+ int $0x80
diff --git a/vendor/github.com/docker/docker/contrib/syscall-test/ns.c b/vendor/github.com/docker/docker/contrib/syscall-test/ns.c
new file mode 100644
index 000000000..624388630
--- /dev/null
+++ b/vendor/github.com/docker/docker/contrib/syscall-test/ns.c
@@ -0,0 +1,63 @@
+#define _GNU_SOURCE
+#include <errno.h>
+#include <sched.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#define STACK_SIZE (1024 * 1024) /* Stack size for cloned child */
+
+struct clone_args {
+ char **argv;
+};
+
+// child_exec is the func that will be executed as the result of clone
+static int child_exec(void *stuff)
+{
+ struct clone_args *args = (struct clone_args *)stuff;
+ if (execvp(args->argv[0], args->argv) != 0) {
+ fprintf(stderr, "failed to execvp arguments %s\n",
+ strerror(errno));
+ exit(-1);
+ }
+ // we should never reach here!
+ exit(EXIT_FAILURE);
+}
+
+int main(int argc, char **argv)
+{
+ struct clone_args args;
+ args.argv = &argv[1];
+
+ int clone_flags = CLONE_NEWNS | CLONE_NEWPID | SIGCHLD;
+
+ // allocate stack for child
+ char *stack; /* Start of stack buffer */
+ char *child_stack; /* End of stack buffer */
+ stack =
+ mmap(NULL, STACK_SIZE, PROT_READ | PROT_WRITE,
+ MAP_SHARED | MAP_ANON | MAP_STACK, -1, 0);
+ if (stack == MAP_FAILED) {
+ fprintf(stderr, "mmap failed: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ child_stack = stack + STACK_SIZE; /* Assume stack grows downward */
+
+ // the result of this call is that our child_exec will be run in another
+ // process returning its pid
+ pid_t pid = clone(child_exec, child_stack, clone_flags, &args);
+ if (pid < 0) {
+ fprintf(stderr, "clone failed: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ // lets wait on our child process here before we, the parent, exits
+ if (waitpid(pid, NULL, 0) == -1) {
+ fprintf(stderr, "failed to wait pid %d\n", pid);
+ exit(EXIT_FAILURE);
+ }
+ exit(EXIT_SUCCESS);
+}
diff --git a/vendor/github.com/docker/docker/contrib/syscall-test/raw.c b/vendor/github.com/docker/docker/contrib/syscall-test/raw.c
new file mode 100644
index 000000000..7995a0d3a
--- /dev/null
+++ b/vendor/github.com/docker/docker/contrib/syscall-test/raw.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <netinet/ip.h>
+#include <netinet/udp.h>
+
+int main() {
+ if (socket(PF_INET, SOCK_RAW, IPPROTO_UDP) == -1) {
+ perror("socket");
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/vendor/github.com/docker/docker/contrib/syscall-test/setgid.c b/vendor/github.com/docker/docker/contrib/syscall-test/setgid.c
new file mode 100644
index 000000000..df9680c86
--- /dev/null
+++ b/vendor/github.com/docker/docker/contrib/syscall-test/setgid.c
@@ -0,0 +1,11 @@
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+
+int main() {
+ if (setgid(1) == -1) {
+ perror("setgid");
+ return 1;
+ }
+ return 0;
+}
diff --git a/vendor/github.com/docker/docker/contrib/syscall-test/setuid.c b/vendor/github.com/docker/docker/contrib/syscall-test/setuid.c
new file mode 100644
index 000000000..5b939677e
--- /dev/null
+++ b/vendor/github.com/docker/docker/contrib/syscall-test/setuid.c
@@ -0,0 +1,11 @@
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+
+int main() {
+ if (setuid(1) == -1) {
+ perror("setuid");
+ return 1;
+ }
+ return 0;
+}
diff --git a/vendor/github.com/docker/docker/contrib/syscall-test/socket.c b/vendor/github.com/docker/docker/contrib/syscall-test/socket.c
new file mode 100644
index 000000000..d26c82f00
--- /dev/null
+++ b/vendor/github.com/docker/docker/contrib/syscall-test/socket.c
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+int main() {
+ int s;
+ struct sockaddr_in sin;
+
+ s = socket(AF_INET, SOCK_STREAM, 0);
+ if (s == -1) {
+ perror("socket");
+ return 1;
+ }
+
+ sin.sin_family = AF_INET;
+ sin.sin_addr.s_addr = INADDR_ANY;
+ sin.sin_port = htons(80);
+
+ if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
+ perror("bind");
+ return 1;
+ }
+
+ close(s);
+
+ return 0;
+}
diff --git a/vendor/github.com/docker/docker/contrib/syscall-test/userns.c b/vendor/github.com/docker/docker/contrib/syscall-test/userns.c
new file mode 100644
index 000000000..4c5c8d304
--- /dev/null
+++ b/vendor/github.com/docker/docker/contrib/syscall-test/userns.c
@@ -0,0 +1,63 @@
+#define _GNU_SOURCE
+#include <errno.h>
+#include <sched.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#define STACK_SIZE (1024 * 1024) /* Stack size for cloned child */
+
+struct clone_args {
+ char **argv;
+};
+
+// child_exec is the func that will be executed as the result of clone
+static int child_exec(void *stuff)
+{
+ struct clone_args *args = (struct clone_args *)stuff;
+ if (execvp(args->argv[0], args->argv) != 0) {
+ fprintf(stderr, "failed to execvp arguments %s\n",
+ strerror(errno));
+ exit(-1);
+ }
+ // we should never reach here!
+ exit(EXIT_FAILURE);
+}
+
+int main(int argc, char **argv)
+{
+ struct clone_args args;
+ args.argv = &argv[1];
+
+ int clone_flags = CLONE_NEWUSER | SIGCHLD;
+
+ // allocate stack for child
+ char *stack; /* Start of stack buffer */
+ char *child_stack; /* End of stack buffer */
+ stack =
+ mmap(NULL, STACK_SIZE, PROT_READ | PROT_WRITE,
+ MAP_SHARED | MAP_ANON | MAP_STACK, -1, 0);
+ if (stack == MAP_FAILED) {
+ fprintf(stderr, "mmap failed: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ child_stack = stack + STACK_SIZE; /* Assume stack grows downward */
+
+ // the result of this call is that our child_exec will be run in another
+ // process returning its pid
+ pid_t pid = clone(child_exec, child_stack, clone_flags, &args);
+ if (pid < 0) {
+ fprintf(stderr, "clone failed: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ // lets wait on our child process here before we, the parent, exits
+ if (waitpid(pid, NULL, 0) == -1) {
+ fprintf(stderr, "failed to wait pid %d\n", pid);
+ exit(EXIT_FAILURE);
+ }
+ exit(EXIT_SUCCESS);
+}
diff --git a/vendor/github.com/docker/docker/hack/README.md b/vendor/github.com/docker/docker/hack/README.md
deleted file mode 100644
index 9e588db25..000000000
--- a/vendor/github.com/docker/docker/hack/README.md
+++ /dev/null
@@ -1,60 +0,0 @@
-## About
-
-This directory contains a collection of scripts used to build and manage this
-repository. If there are any issues regarding the intention of a particular
-script (or even part of a certain script), please reach out to us.
-It may help us either refine our current scripts, or add on new ones
-that are appropriate for a given use case.
-
-## DinD (dind.sh)
-
-DinD is a wrapper script which allows Docker to be run inside a Docker
-container. DinD requires the container to
-be run with privileged mode enabled.
-
-## Generate Authors (generate-authors.sh)
-
-Generates AUTHORS; a file with all the names and corresponding emails of
-individual contributors. AUTHORS can be found in the home directory of
-this repository.
-
-## Make
-
-There are two make files, each with different extensions. Neither are supposed
-to be called directly; only invoke `make`. Both scripts run inside a Docker
-container.
-
-### make.ps1
-
-- The Windows native build script that uses PowerShell semantics; it is limited
-unlike `hack\make.sh` since it does not provide support for the full set of
-operations provided by the Linux counterpart, `make.sh`. However, `make.ps1`
-does provide support for local Windows development and Windows to Windows CI.
-More information is found within `make.ps1` by the author, @jhowardmsft
-
-### make.sh
-
-- Referenced via `make test` when running tests on a local machine,
-or directly referenced when running tests inside a Docker development container.
-- When running on a local machine, `make test` to run all tests found in
-`test`, `test-unit`, `test-integration`, and `test-docker-py` on
-your local machine. The default timeout is set in `make.sh` to 60 minutes
-(`${TIMEOUT:=60m}`), since it currently takes up to an hour to run
-all of the tests.
-- When running inside a Docker development container, `hack/make.sh` does
-not have a single target that runs all the tests. You need to provide a
-single command line with multiple targets that performs the same thing.
-An example referenced from [Run targets inside a development container](https://docs.docker.com/opensource/project/test-and-docs/#run-targets-inside-a-development-container): `root@5f8630b873fe:/go/src/github.com/moby/moby# hack/make.sh dynbinary binary cross test-unit test-integration test-docker-py`
-- For more information related to testing outside the scope of this README,
-refer to
-[Run tests and test documentation](https://docs.docker.com/opensource/project/test-and-docs/)
-
-## Release (release.sh)
-
-Releases any bundles built by `make` on a public AWS S3 bucket.
-For information regarding configuration, please view `release.sh`.
-
-## Vendor (vendor.sh)
-
-A shell script that is a wrapper around Vndr. For information on how to use
-this, please refer to [vndr's README](https://github.com/LK4D4/vndr/blob/master/README.md)
diff --git a/vendor/github.com/docker/docker/hack/integration-cli-on-swarm/README.md b/vendor/github.com/docker/docker/hack/integration-cli-on-swarm/README.md
deleted file mode 100644
index 1cea52526..000000000
--- a/vendor/github.com/docker/docker/hack/integration-cli-on-swarm/README.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# Integration Testing on Swarm
-
-IT on Swarm allows you to execute integration test in parallel across a Docker Swarm cluster
-
-## Architecture
-
-### Master service
-
- - Works as a funker caller
- - Calls a worker funker (`-worker-service`) with a chunk of `-check.f` filter strings (passed as a file via `-input` flag, typically `/mnt/input`)
-
-### Worker service
-
- - Works as a funker callee
- - Executes an equivalent of `TESTFLAGS=-check.f TestFoo|TestBar|TestBaz ... make test-integration-cli` using the bind-mounted API socket (`docker.sock`)
-
-### Client
-
- - Controls master and workers via `docker stack`
- - No need to have a local daemon
-
-Typically, the master and workers are supposed to be running on a cloud environment,
-while the client is supposed to be running on a laptop, e.g. Docker for Mac/Windows.
-
-## Requirement
-
- - Docker daemon 1.13 or later
- - Private registry for distributed execution with multiple nodes
-
-## Usage
-
-### Step 1: Prepare images
-
- $ make build-integration-cli-on-swarm
-
-Following environment variables are known to work in this step:
-
- - `BUILDFLAGS`
- - `DOCKER_INCREMENTAL_BINARY`
-
-Note: during the transition into Moby Project, you might need to create a symbolic link `$GOPATH/src/github.com/docker/docker` to `$GOPATH/src/github.com/moby/moby`.
-
-### Step 2: Execute tests
-
- $ ./hack/integration-cli-on-swarm/integration-cli-on-swarm -replicas 40 -push-worker-image YOUR_REGISTRY.EXAMPLE.COM/integration-cli-worker:latest
-
-Following environment variables are known to work in this step:
-
- - `DOCKER_GRAPHDRIVER`
- - `DOCKER_EXPERIMENTAL`
-
-#### Flags
-
-Basic flags:
-
- - `-replicas N`: the number of worker service replicas. i.e. degree of parallelism.
- - `-chunks N`: the number of chunks. By default, `chunks` == `replicas`.
- - `-push-worker-image REGISTRY/IMAGE:TAG`: push the worker image to the registry. Note that if you have only single node and hence you do not need a private registry, you do not need to specify `-push-worker-image`.
-
-Experimental flags for mitigating makespan nonuniformity:
-
- - `-shuffle`: Shuffle the test filter strings
-
-Flags for debugging IT on Swarm itself:
-
- - `-rand-seed N`: the random seed. This flag is useful for deterministic replaying. By default(0), the timestamp is used.
- - `-filters-file FILE`: the file contains `-check.f` strings. By default, the file is automatically generated.
- - `-dry-run`: skip the actual workload
- - `keep-executor`: do not auto-remove executor containers, which is used for running privileged programs on Swarm
diff --git a/vendor/github.com/docker/docker/hack/integration-cli-on-swarm/agent/vendor.conf b/vendor/github.com/docker/docker/hack/integration-cli-on-swarm/agent/vendor.conf
deleted file mode 100644
index efd6d6d04..000000000
--- a/vendor/github.com/docker/docker/hack/integration-cli-on-swarm/agent/vendor.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-# dependencies specific to worker (i.e. github.com/docker/docker/...) are not vendored here
-github.com/bfirsh/funker-go eaa0a2e06f30e72c9a0b7f858951e581e26ef773
diff --git a/vendor/github.com/docker/docker/pkg/archive/README.md b/vendor/github.com/docker/docker/pkg/archive/README.md
deleted file mode 100644
index 7307d9694..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/README.md
+++ /dev/null
@@ -1 +0,0 @@
-This code provides helper functions for dealing with archive files.
diff --git a/vendor/github.com/docker/docker/pkg/archive/archive.go b/vendor/github.com/docker/docker/pkg/archive/archive.go
deleted file mode 100644
index aa5563756..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/archive.go
+++ /dev/null
@@ -1,1237 +0,0 @@
-package archive
-
-import (
- "archive/tar"
- "bufio"
- "bytes"
- "compress/bzip2"
- "compress/gzip"
- "fmt"
- "io"
- "io/ioutil"
- "os"
- "os/exec"
- "path/filepath"
- "runtime"
- "strings"
- "syscall"
-
- "github.com/docker/docker/pkg/fileutils"
- "github.com/docker/docker/pkg/idtools"
- "github.com/docker/docker/pkg/ioutils"
- "github.com/docker/docker/pkg/pools"
- "github.com/docker/docker/pkg/system"
- "github.com/sirupsen/logrus"
-)
-
-type (
- // Compression is the state represents if compressed or not.
- Compression int
- // WhiteoutFormat is the format of whiteouts unpacked
- WhiteoutFormat int
-
- // TarOptions wraps the tar options.
- TarOptions struct {
- IncludeFiles []string
- ExcludePatterns []string
- Compression Compression
- NoLchown bool
- UIDMaps []idtools.IDMap
- GIDMaps []idtools.IDMap
- ChownOpts *idtools.IDPair
- IncludeSourceDir bool
- // WhiteoutFormat is the expected on disk format for whiteout files.
- // This format will be converted to the standard format on pack
- // and from the standard format on unpack.
- WhiteoutFormat WhiteoutFormat
- // When unpacking, specifies whether overwriting a directory with a
- // non-directory is allowed and vice versa.
- NoOverwriteDirNonDir bool
- // For each include when creating an archive, the included name will be
- // replaced with the matching name from this map.
- RebaseNames map[string]string
- InUserNS bool
- }
-)
-
-// Archiver implements the Archiver interface and allows the reuse of most utility functions of
-// this package with a pluggable Untar function. Also, to facilitate the passing of specific id
-// mappings for untar, an Archiver can be created with maps which will then be passed to Untar operations.
-type Archiver struct {
- Untar func(io.Reader, string, *TarOptions) error
- IDMappingsVar *idtools.IDMappings
-}
-
-// NewDefaultArchiver returns a new Archiver without any IDMappings
-func NewDefaultArchiver() *Archiver {
- return &Archiver{Untar: Untar, IDMappingsVar: &idtools.IDMappings{}}
-}
-
-// breakoutError is used to differentiate errors related to breaking out
-// When testing archive breakout in the unit tests, this error is expected
-// in order for the test to pass.
-type breakoutError error
-
-const (
- // Uncompressed represents the uncompressed.
- Uncompressed Compression = iota
- // Bzip2 is bzip2 compression algorithm.
- Bzip2
- // Gzip is gzip compression algorithm.
- Gzip
- // Xz is xz compression algorithm.
- Xz
-)
-
-const (
- // AUFSWhiteoutFormat is the default format for whiteouts
- AUFSWhiteoutFormat WhiteoutFormat = iota
- // OverlayWhiteoutFormat formats whiteout according to the overlay
- // standard.
- OverlayWhiteoutFormat
-)
-
-const (
- modeISDIR = 040000 // Directory
- modeISFIFO = 010000 // FIFO
- modeISREG = 0100000 // Regular file
- modeISLNK = 0120000 // Symbolic link
- modeISBLK = 060000 // Block special file
- modeISCHR = 020000 // Character special file
- modeISSOCK = 0140000 // Socket
-)
-
-// IsArchivePath checks if the (possibly compressed) file at the given path
-// starts with a tar file header.
-func IsArchivePath(path string) bool {
- file, err := os.Open(path)
- if err != nil {
- return false
- }
- defer file.Close()
- rdr, err := DecompressStream(file)
- if err != nil {
- return false
- }
- r := tar.NewReader(rdr)
- _, err = r.Next()
- return err == nil
-}
-
-// DetectCompression detects the compression algorithm of the source.
-func DetectCompression(source []byte) Compression {
- for compression, m := range map[Compression][]byte{
- Bzip2: {0x42, 0x5A, 0x68},
- Gzip: {0x1F, 0x8B, 0x08},
- Xz: {0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00},
- } {
- if len(source) < len(m) {
- logrus.Debug("Len too short")
- continue
- }
- if bytes.Equal(m, source[:len(m)]) {
- return compression
- }
- }
- return Uncompressed
-}
-
-func xzDecompress(archive io.Reader) (io.ReadCloser, <-chan struct{}, error) {
- args := []string{"xz", "-d", "-c", "-q"}
-
- return cmdStream(exec.Command(args[0], args[1:]...), archive)
-}
-
-// DecompressStream decompresses the archive and returns a ReaderCloser with the decompressed archive.
-func DecompressStream(archive io.Reader) (io.ReadCloser, error) {
- p := pools.BufioReader32KPool
- buf := p.Get(archive)
- bs, err := buf.Peek(10)
- if err != nil && err != io.EOF {
- // Note: we'll ignore any io.EOF error because there are some odd
- // cases where the layer.tar file will be empty (zero bytes) and
- // that results in an io.EOF from the Peek() call. So, in those
- // cases we'll just treat it as a non-compressed stream and
- // that means just create an empty layer.
- // See Issue 18170
- return nil, err
- }
-
- compression := DetectCompression(bs)
- switch compression {
- case Uncompressed:
- readBufWrapper := p.NewReadCloserWrapper(buf, buf)
- return readBufWrapper, nil
- case Gzip:
- gzReader, err := gzip.NewReader(buf)
- if err != nil {
- return nil, err
- }
- readBufWrapper := p.NewReadCloserWrapper(buf, gzReader)
- return readBufWrapper, nil
- case Bzip2:
- bz2Reader := bzip2.NewReader(buf)
- readBufWrapper := p.NewReadCloserWrapper(buf, bz2Reader)
- return readBufWrapper, nil
- case Xz:
- xzReader, chdone, err := xzDecompress(buf)
- if err != nil {
- return nil, err
- }
- readBufWrapper := p.NewReadCloserWrapper(buf, xzReader)
- return ioutils.NewReadCloserWrapper(readBufWrapper, func() error {
- <-chdone
- return readBufWrapper.Close()
- }), nil
- default:
- return nil, fmt.Errorf("Unsupported compression format %s", (&compression).Extension())
- }
-}
-
-// CompressStream compresses the dest with specified compression algorithm.
-func CompressStream(dest io.Writer, compression Compression) (io.WriteCloser, error) {
- p := pools.BufioWriter32KPool
- buf := p.Get(dest)
- switch compression {
- case Uncompressed:
- writeBufWrapper := p.NewWriteCloserWrapper(buf, buf)
- return writeBufWrapper, nil
- case Gzip:
- gzWriter := gzip.NewWriter(dest)
- writeBufWrapper := p.NewWriteCloserWrapper(buf, gzWriter)
- return writeBufWrapper, nil
- case Bzip2, Xz:
- // archive/bzip2 does not support writing, and there is no xz support at all
- // However, this is not a problem as docker only currently generates gzipped tars
- return nil, fmt.Errorf("Unsupported compression format %s", (&compression).Extension())
- default:
- return nil, fmt.Errorf("Unsupported compression format %s", (&compression).Extension())
- }
-}
-
-// TarModifierFunc is a function that can be passed to ReplaceFileTarWrapper to
-// modify the contents or header of an entry in the archive. If the file already
-// exists in the archive the TarModifierFunc will be called with the Header and
-// a reader which will return the files content. If the file does not exist both
-// header and content will be nil.
-type TarModifierFunc func(path string, header *tar.Header, content io.Reader) (*tar.Header, []byte, error)
-
-// ReplaceFileTarWrapper converts inputTarStream to a new tar stream. Files in the
-// tar stream are modified if they match any of the keys in mods.
-func ReplaceFileTarWrapper(inputTarStream io.ReadCloser, mods map[string]TarModifierFunc) io.ReadCloser {
- pipeReader, pipeWriter := io.Pipe()
-
- go func() {
- tarReader := tar.NewReader(inputTarStream)
- tarWriter := tar.NewWriter(pipeWriter)
- defer inputTarStream.Close()
- defer tarWriter.Close()
-
- modify := func(name string, original *tar.Header, modifier TarModifierFunc, tarReader io.Reader) error {
- header, data, err := modifier(name, original, tarReader)
- switch {
- case err != nil:
- return err
- case header == nil:
- return nil
- }
-
- header.Name = name
- header.Size = int64(len(data))
- if err := tarWriter.WriteHeader(header); err != nil {
- return err
- }
- if len(data) != 0 {
- if _, err := tarWriter.Write(data); err != nil {
- return err
- }
- }
- return nil
- }
-
- var err error
- var originalHeader *tar.Header
- for {
- originalHeader, err = tarReader.Next()
- if err == io.EOF {
- break
- }
- if err != nil {
- pipeWriter.CloseWithError(err)
- return
- }
-
- modifier, ok := mods[originalHeader.Name]
- if !ok {
- // No modifiers for this file, copy the header and data
- if err := tarWriter.WriteHeader(originalHeader); err != nil {
- pipeWriter.CloseWithError(err)
- return
- }
- if _, err := pools.Copy(tarWriter, tarReader); err != nil {
- pipeWriter.CloseWithError(err)
- return
- }
- continue
- }
- delete(mods, originalHeader.Name)
-
- if err := modify(originalHeader.Name, originalHeader, modifier, tarReader); err != nil {
- pipeWriter.CloseWithError(err)
- return
- }
- }
-
- // Apply the modifiers that haven't matched any files in the archive
- for name, modifier := range mods {
- if err := modify(name, nil, modifier, nil); err != nil {
- pipeWriter.CloseWithError(err)
- return
- }
- }
-
- pipeWriter.Close()
-
- }()
- return pipeReader
-}
-
-// Extension returns the extension of a file that uses the specified compression algorithm.
-func (compression *Compression) Extension() string {
- switch *compression {
- case Uncompressed:
- return "tar"
- case Bzip2:
- return "tar.bz2"
- case Gzip:
- return "tar.gz"
- case Xz:
- return "tar.xz"
- }
- return ""
-}
-
-// FileInfoHeader creates a populated Header from fi.
-// Compared to archive pkg this function fills in more information.
-// Also, regardless of Go version, this function fills file type bits (e.g. hdr.Mode |= modeISDIR),
-// which have been deleted since Go 1.9 archive/tar.
-func FileInfoHeader(name string, fi os.FileInfo, link string) (*tar.Header, error) {
- hdr, err := tar.FileInfoHeader(fi, link)
- if err != nil {
- return nil, err
- }
- hdr.Mode = fillGo18FileTypeBits(int64(chmodTarEntry(os.FileMode(hdr.Mode))), fi)
- name, err = canonicalTarName(name, fi.IsDir())
- if err != nil {
- return nil, fmt.Errorf("tar: cannot canonicalize path: %v", err)
- }
- hdr.Name = name
- if err := setHeaderForSpecialDevice(hdr, name, fi.Sys()); err != nil {
- return nil, err
- }
- return hdr, nil
-}
-
-// fillGo18FileTypeBits fills type bits which have been removed on Go 1.9 archive/tar
-// https://github.com/golang/go/commit/66b5a2f
-func fillGo18FileTypeBits(mode int64, fi os.FileInfo) int64 {
- fm := fi.Mode()
- switch {
- case fm.IsRegular():
- mode |= modeISREG
- case fi.IsDir():
- mode |= modeISDIR
- case fm&os.ModeSymlink != 0:
- mode |= modeISLNK
- case fm&os.ModeDevice != 0:
- if fm&os.ModeCharDevice != 0 {
- mode |= modeISCHR
- } else {
- mode |= modeISBLK
- }
- case fm&os.ModeNamedPipe != 0:
- mode |= modeISFIFO
- case fm&os.ModeSocket != 0:
- mode |= modeISSOCK
- }
- return mode
-}
-
-// ReadSecurityXattrToTarHeader reads security.capability xattr from filesystem
-// to a tar header
-func ReadSecurityXattrToTarHeader(path string, hdr *tar.Header) error {
- capability, _ := system.Lgetxattr(path, "security.capability")
- if capability != nil {
- hdr.Xattrs = make(map[string]string)
- hdr.Xattrs["security.capability"] = string(capability)
- }
- return nil
-}
-
-type tarWhiteoutConverter interface {
- ConvertWrite(*tar.Header, string, os.FileInfo) (*tar.Header, error)
- ConvertRead(*tar.Header, string) (bool, error)
-}
-
-type tarAppender struct {
- TarWriter *tar.Writer
- Buffer *bufio.Writer
-
- // for hardlink mapping
- SeenFiles map[uint64]string
- IDMappings *idtools.IDMappings
- ChownOpts *idtools.IDPair
-
- // For packing and unpacking whiteout files in the
- // non standard format. The whiteout files defined
- // by the AUFS standard are used as the tar whiteout
- // standard.
- WhiteoutConverter tarWhiteoutConverter
-}
-
-func newTarAppender(idMapping *idtools.IDMappings, writer io.Writer, chownOpts *idtools.IDPair) *tarAppender {
- return &tarAppender{
- SeenFiles: make(map[uint64]string),
- TarWriter: tar.NewWriter(writer),
- Buffer: pools.BufioWriter32KPool.Get(nil),
- IDMappings: idMapping,
- ChownOpts: chownOpts,
- }
-}
-
-// canonicalTarName provides a platform-independent and consistent posix-style
-//path for files and directories to be archived regardless of the platform.
-func canonicalTarName(name string, isDir bool) (string, error) {
- name, err := CanonicalTarNameForPath(name)
- if err != nil {
- return "", err
- }
-
- // suffix with '/' for directories
- if isDir && !strings.HasSuffix(name, "/") {
- name += "/"
- }
- return name, nil
-}
-
-// addTarFile adds to the tar archive a file from `path` as `name`
-func (ta *tarAppender) addTarFile(path, name string) error {
- fi, err := os.Lstat(path)
- if err != nil {
- return err
- }
-
- var link string
- if fi.Mode()&os.ModeSymlink != 0 {
- var err error
- link, err = os.Readlink(path)
- if err != nil {
- return err
- }
- }
-
- hdr, err := FileInfoHeader(name, fi, link)
- if err != nil {
- return err
- }
- if err := ReadSecurityXattrToTarHeader(path, hdr); err != nil {
- return err
- }
-
- // if it's not a directory and has more than 1 link,
- // it's hard linked, so set the type flag accordingly
- if !fi.IsDir() && hasHardlinks(fi) {
- inode, err := getInodeFromStat(fi.Sys())
- if err != nil {
- return err
- }
- // a link should have a name that it links too
- // and that linked name should be first in the tar archive
- if oldpath, ok := ta.SeenFiles[inode]; ok {
- hdr.Typeflag = tar.TypeLink
- hdr.Linkname = oldpath
- hdr.Size = 0 // This Must be here for the writer math to add up!
- } else {
- ta.SeenFiles[inode] = name
- }
- }
-
- //handle re-mapping container ID mappings back to host ID mappings before
- //writing tar headers/files. We skip whiteout files because they were written
- //by the kernel and already have proper ownership relative to the host
- if !strings.HasPrefix(filepath.Base(hdr.Name), WhiteoutPrefix) && !ta.IDMappings.Empty() {
- fileIDPair, err := getFileUIDGID(fi.Sys())
- if err != nil {
- return err
- }
- hdr.Uid, hdr.Gid, err = ta.IDMappings.ToContainer(fileIDPair)
- if err != nil {
- return err
- }
- }
-
- // explicitly override with ChownOpts
- if ta.ChownOpts != nil {
- hdr.Uid = ta.ChownOpts.UID
- hdr.Gid = ta.ChownOpts.GID
- }
-
- if ta.WhiteoutConverter != nil {
- wo, err := ta.WhiteoutConverter.ConvertWrite(hdr, path, fi)
- if err != nil {
- return err
- }
-
- // If a new whiteout file exists, write original hdr, then
- // replace hdr with wo to be written after. Whiteouts should
- // always be written after the original. Note the original
- // hdr may have been updated to be a whiteout with returning
- // a whiteout header
- if wo != nil {
- if err := ta.TarWriter.WriteHeader(hdr); err != nil {
- return err
- }
- if hdr.Typeflag == tar.TypeReg && hdr.Size > 0 {
- return fmt.Errorf("tar: cannot use whiteout for non-empty file")
- }
- hdr = wo
- }
- }
-
- if err := ta.TarWriter.WriteHeader(hdr); err != nil {
- return err
- }
-
- if hdr.Typeflag == tar.TypeReg && hdr.Size > 0 {
- // We use system.OpenSequential to ensure we use sequential file
- // access on Windows to avoid depleting the standby list.
- // On Linux, this equates to a regular os.Open.
- file, err := system.OpenSequential(path)
- if err != nil {
- return err
- }
-
- ta.Buffer.Reset(ta.TarWriter)
- defer ta.Buffer.Reset(nil)
- _, err = io.Copy(ta.Buffer, file)
- file.Close()
- if err != nil {
- return err
- }
- err = ta.Buffer.Flush()
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func createTarFile(path, extractDir string, hdr *tar.Header, reader io.Reader, Lchown bool, chownOpts *idtools.IDPair, inUserns bool) error {
- // hdr.Mode is in linux format, which we can use for sycalls,
- // but for os.Foo() calls we need the mode converted to os.FileMode,
- // so use hdrInfo.Mode() (they differ for e.g. setuid bits)
- hdrInfo := hdr.FileInfo()
-
- switch hdr.Typeflag {
- case tar.TypeDir:
- // Create directory unless it exists as a directory already.
- // In that case we just want to merge the two
- if fi, err := os.Lstat(path); !(err == nil && fi.IsDir()) {
- if err := os.Mkdir(path, hdrInfo.Mode()); err != nil {
- return err
- }
- }
-
- case tar.TypeReg, tar.TypeRegA:
- // Source is regular file. We use system.OpenFileSequential to use sequential
- // file access to avoid depleting the standby list on Windows.
- // On Linux, this equates to a regular os.OpenFile
- file, err := system.OpenFileSequential(path, os.O_CREATE|os.O_WRONLY, hdrInfo.Mode())
- if err != nil {
- return err
- }
- if _, err := io.Copy(file, reader); err != nil {
- file.Close()
- return err
- }
- file.Close()
-
- case tar.TypeBlock, tar.TypeChar:
- if inUserns { // cannot create devices in a userns
- return nil
- }
- // Handle this is an OS-specific way
- if err := handleTarTypeBlockCharFifo(hdr, path); err != nil {
- return err
- }
-
- case tar.TypeFifo:
- // Handle this is an OS-specific way
- if err := handleTarTypeBlockCharFifo(hdr, path); err != nil {
- return err
- }
-
- case tar.TypeLink:
- targetPath := filepath.Join(extractDir, hdr.Linkname)
- // check for hardlink breakout
- if !strings.HasPrefix(targetPath, extractDir) {
- return breakoutError(fmt.Errorf("invalid hardlink %q -> %q", targetPath, hdr.Linkname))
- }
- if err := os.Link(targetPath, path); err != nil {
- return err
- }
-
- case tar.TypeSymlink:
- // path -> hdr.Linkname = targetPath
- // e.g. /extractDir/path/to/symlink -> ../2/file = /extractDir/path/2/file
- targetPath := filepath.Join(filepath.Dir(path), hdr.Linkname)
-
- // the reason we don't need to check symlinks in the path (with FollowSymlinkInScope) is because
- // that symlink would first have to be created, which would be caught earlier, at this very check:
- if !strings.HasPrefix(targetPath, extractDir) {
- return breakoutError(fmt.Errorf("invalid symlink %q -> %q", path, hdr.Linkname))
- }
- if err := os.Symlink(hdr.Linkname, path); err != nil {
- return err
- }
-
- case tar.TypeXGlobalHeader:
- logrus.Debug("PAX Global Extended Headers found and ignored")
- return nil
-
- default:
- return fmt.Errorf("unhandled tar header type %d", hdr.Typeflag)
- }
-
- // Lchown is not supported on Windows.
- if Lchown && runtime.GOOS != "windows" {
- if chownOpts == nil {
- chownOpts = &idtools.IDPair{UID: hdr.Uid, GID: hdr.Gid}
- }
- if err := os.Lchown(path, chownOpts.UID, chownOpts.GID); err != nil {
- return err
- }
- }
-
- var errors []string
- for key, value := range hdr.Xattrs {
- if err := system.Lsetxattr(path, key, []byte(value), 0); err != nil {
- if err == syscall.ENOTSUP {
- // We ignore errors here because not all graphdrivers support
- // xattrs *cough* old versions of AUFS *cough*. However only
- // ENOTSUP should be emitted in that case, otherwise we still
- // bail.
- errors = append(errors, err.Error())
- continue
- }
- return err
- }
-
- }
-
- if len(errors) > 0 {
- logrus.WithFields(logrus.Fields{
- "errors": errors,
- }).Warn("ignored xattrs in archive: underlying filesystem doesn't support them")
- }
-
- // There is no LChmod, so ignore mode for symlink. Also, this
- // must happen after chown, as that can modify the file mode
- if err := handleLChmod(hdr, path, hdrInfo); err != nil {
- return err
- }
-
- aTime := hdr.AccessTime
- if aTime.Before(hdr.ModTime) {
- // Last access time should never be before last modified time.
- aTime = hdr.ModTime
- }
-
- // system.Chtimes doesn't support a NOFOLLOW flag atm
- if hdr.Typeflag == tar.TypeLink {
- if fi, err := os.Lstat(hdr.Linkname); err == nil && (fi.Mode()&os.ModeSymlink == 0) {
- if err := system.Chtimes(path, aTime, hdr.ModTime); err != nil {
- return err
- }
- }
- } else if hdr.Typeflag != tar.TypeSymlink {
- if err := system.Chtimes(path, aTime, hdr.ModTime); err != nil {
- return err
- }
- } else {
- ts := []syscall.Timespec{timeToTimespec(aTime), timeToTimespec(hdr.ModTime)}
- if err := system.LUtimesNano(path, ts); err != nil && err != system.ErrNotSupportedPlatform {
- return err
- }
- }
- return nil
-}
-
-// Tar creates an archive from the directory at `path`, and returns it as a
-// stream of bytes.
-func Tar(path string, compression Compression) (io.ReadCloser, error) {
- return TarWithOptions(path, &TarOptions{Compression: compression})
-}
-
-// TarWithOptions creates an archive from the directory at `path`, only including files whose relative
-// paths are included in `options.IncludeFiles` (if non-nil) or not in `options.ExcludePatterns`.
-func TarWithOptions(srcPath string, options *TarOptions) (io.ReadCloser, error) {
-
- // Fix the source path to work with long path names. This is a no-op
- // on platforms other than Windows.
- srcPath = fixVolumePathPrefix(srcPath)
-
- pm, err := fileutils.NewPatternMatcher(options.ExcludePatterns)
- if err != nil {
- return nil, err
- }
-
- pipeReader, pipeWriter := io.Pipe()
-
- compressWriter, err := CompressStream(pipeWriter, options.Compression)
- if err != nil {
- return nil, err
- }
-
- go func() {
- ta := newTarAppender(
- idtools.NewIDMappingsFromMaps(options.UIDMaps, options.GIDMaps),
- compressWriter,
- options.ChownOpts,
- )
- ta.WhiteoutConverter = getWhiteoutConverter(options.WhiteoutFormat)
-
- defer func() {
- // Make sure to check the error on Close.
- if err := ta.TarWriter.Close(); err != nil {
- logrus.Errorf("Can't close tar writer: %s", err)
- }
- if err := compressWriter.Close(); err != nil {
- logrus.Errorf("Can't close compress writer: %s", err)
- }
- if err := pipeWriter.Close(); err != nil {
- logrus.Errorf("Can't close pipe writer: %s", err)
- }
- }()
-
- // this buffer is needed for the duration of this piped stream
- defer pools.BufioWriter32KPool.Put(ta.Buffer)
-
- // In general we log errors here but ignore them because
- // during e.g. a diff operation the container can continue
- // mutating the filesystem and we can see transient errors
- // from this
-
- stat, err := os.Lstat(srcPath)
- if err != nil {
- return
- }
-
- if !stat.IsDir() {
- // We can't later join a non-dir with any includes because the
- // 'walk' will error if "file/." is stat-ed and "file" is not a
- // directory. So, we must split the source path and use the
- // basename as the include.
- if len(options.IncludeFiles) > 0 {
- logrus.Warn("Tar: Can't archive a file with includes")
- }
-
- dir, base := SplitPathDirEntry(srcPath)
- srcPath = dir
- options.IncludeFiles = []string{base}
- }
-
- if len(options.IncludeFiles) == 0 {
- options.IncludeFiles = []string{"."}
- }
-
- seen := make(map[string]bool)
-
- for _, include := range options.IncludeFiles {
- rebaseName := options.RebaseNames[include]
-
- walkRoot := getWalkRoot(srcPath, include)
- filepath.Walk(walkRoot, func(filePath string, f os.FileInfo, err error) error {
- if err != nil {
- logrus.Errorf("Tar: Can't stat file %s to tar: %s", srcPath, err)
- return nil
- }
-
- relFilePath, err := filepath.Rel(srcPath, filePath)
- if err != nil || (!options.IncludeSourceDir && relFilePath == "." && f.IsDir()) {
- // Error getting relative path OR we are looking
- // at the source directory path. Skip in both situations.
- return nil
- }
-
- if options.IncludeSourceDir && include == "." && relFilePath != "." {
- relFilePath = strings.Join([]string{".", relFilePath}, string(filepath.Separator))
- }
-
- skip := false
-
- // If "include" is an exact match for the current file
- // then even if there's an "excludePatterns" pattern that
- // matches it, don't skip it. IOW, assume an explicit 'include'
- // is asking for that file no matter what - which is true
- // for some files, like .dockerignore and Dockerfile (sometimes)
- if include != relFilePath {
- skip, err = pm.Matches(relFilePath)
- if err != nil {
- logrus.Errorf("Error matching %s: %v", relFilePath, err)
- return err
- }
- }
-
- if skip {
- // If we want to skip this file and its a directory
- // then we should first check to see if there's an
- // excludes pattern (e.g. !dir/file) that starts with this
- // dir. If so then we can't skip this dir.
-
- // Its not a dir then so we can just return/skip.
- if !f.IsDir() {
- return nil
- }
-
- // No exceptions (!...) in patterns so just skip dir
- if !pm.Exclusions() {
- return filepath.SkipDir
- }
-
- dirSlash := relFilePath + string(filepath.Separator)
-
- for _, pat := range pm.Patterns() {
- if !pat.Exclusion() {
- continue
- }
- if strings.HasPrefix(pat.String()+string(filepath.Separator), dirSlash) {
- // found a match - so can't skip this dir
- return nil
- }
- }
-
- // No matching exclusion dir so just skip dir
- return filepath.SkipDir
- }
-
- if seen[relFilePath] {
- return nil
- }
- seen[relFilePath] = true
-
- // Rename the base resource.
- if rebaseName != "" {
- var replacement string
- if rebaseName != string(filepath.Separator) {
- // Special case the root directory to replace with an
- // empty string instead so that we don't end up with
- // double slashes in the paths.
- replacement = rebaseName
- }
-
- relFilePath = strings.Replace(relFilePath, include, replacement, 1)
- }
-
- if err := ta.addTarFile(filePath, relFilePath); err != nil {
- logrus.Errorf("Can't add file %s to tar: %s", filePath, err)
- // if pipe is broken, stop writing tar stream to it
- if err == io.ErrClosedPipe {
- return err
- }
- }
- return nil
- })
- }
- }()
-
- return pipeReader, nil
-}
-
-// Unpack unpacks the decompressedArchive to dest with options.
-func Unpack(decompressedArchive io.Reader, dest string, options *TarOptions) error {
- tr := tar.NewReader(decompressedArchive)
- trBuf := pools.BufioReader32KPool.Get(nil)
- defer pools.BufioReader32KPool.Put(trBuf)
-
- var dirs []*tar.Header
- idMappings := idtools.NewIDMappingsFromMaps(options.UIDMaps, options.GIDMaps)
- rootIDs := idMappings.RootPair()
- whiteoutConverter := getWhiteoutConverter(options.WhiteoutFormat)
-
- // Iterate through the files in the archive.
-loop:
- for {
- hdr, err := tr.Next()
- if err == io.EOF {
- // end of tar archive
- break
- }
- if err != nil {
- return err
- }
-
- // Normalize name, for safety and for a simple is-root check
- // This keeps "../" as-is, but normalizes "/../" to "/". Or Windows:
- // This keeps "..\" as-is, but normalizes "\..\" to "\".
- hdr.Name = filepath.Clean(hdr.Name)
-
- for _, exclude := range options.ExcludePatterns {
- if strings.HasPrefix(hdr.Name, exclude) {
- continue loop
- }
- }
-
- // After calling filepath.Clean(hdr.Name) above, hdr.Name will now be in
- // the filepath format for the OS on which the daemon is running. Hence
- // the check for a slash-suffix MUST be done in an OS-agnostic way.
- if !strings.HasSuffix(hdr.Name, string(os.PathSeparator)) {
- // Not the root directory, ensure that the parent directory exists
- parent := filepath.Dir(hdr.Name)
- parentPath := filepath.Join(dest, parent)
- if _, err := os.Lstat(parentPath); err != nil && os.IsNotExist(err) {
- err = idtools.MkdirAllAndChownNew(parentPath, 0777, rootIDs)
- if err != nil {
- return err
- }
- }
- }
-
- path := filepath.Join(dest, hdr.Name)
- rel, err := filepath.Rel(dest, path)
- if err != nil {
- return err
- }
- if strings.HasPrefix(rel, ".."+string(os.PathSeparator)) {
- return breakoutError(fmt.Errorf("%q is outside of %q", hdr.Name, dest))
- }
-
- // If path exits we almost always just want to remove and replace it
- // The only exception is when it is a directory *and* the file from
- // the layer is also a directory. Then we want to merge them (i.e.
- // just apply the metadata from the layer).
- if fi, err := os.Lstat(path); err == nil {
- if options.NoOverwriteDirNonDir && fi.IsDir() && hdr.Typeflag != tar.TypeDir {
- // If NoOverwriteDirNonDir is true then we cannot replace
- // an existing directory with a non-directory from the archive.
- return fmt.Errorf("cannot overwrite directory %q with non-directory %q", path, dest)
- }
-
- if options.NoOverwriteDirNonDir && !fi.IsDir() && hdr.Typeflag == tar.TypeDir {
- // If NoOverwriteDirNonDir is true then we cannot replace
- // an existing non-directory with a directory from the archive.
- return fmt.Errorf("cannot overwrite non-directory %q with directory %q", path, dest)
- }
-
- if fi.IsDir() && hdr.Name == "." {
- continue
- }
-
- if !(fi.IsDir() && hdr.Typeflag == tar.TypeDir) {
- if err := os.RemoveAll(path); err != nil {
- return err
- }
- }
- }
- trBuf.Reset(tr)
-
- if err := remapIDs(idMappings, hdr); err != nil {
- return err
- }
-
- if whiteoutConverter != nil {
- writeFile, err := whiteoutConverter.ConvertRead(hdr, path)
- if err != nil {
- return err
- }
- if !writeFile {
- continue
- }
- }
-
- if err := createTarFile(path, dest, hdr, trBuf, !options.NoLchown, options.ChownOpts, options.InUserNS); err != nil {
- return err
- }
-
- // Directory mtimes must be handled at the end to avoid further
- // file creation in them to modify the directory mtime
- if hdr.Typeflag == tar.TypeDir {
- dirs = append(dirs, hdr)
- }
- }
-
- for _, hdr := range dirs {
- path := filepath.Join(dest, hdr.Name)
-
- if err := system.Chtimes(path, hdr.AccessTime, hdr.ModTime); err != nil {
- return err
- }
- }
- return nil
-}
-
-// Untar reads a stream of bytes from `archive`, parses it as a tar archive,
-// and unpacks it into the directory at `dest`.
-// The archive may be compressed with one of the following algorithms:
-// identity (uncompressed), gzip, bzip2, xz.
-// FIXME: specify behavior when target path exists vs. doesn't exist.
-func Untar(tarArchive io.Reader, dest string, options *TarOptions) error {
- return untarHandler(tarArchive, dest, options, true)
-}
-
-// UntarUncompressed reads a stream of bytes from `archive`, parses it as a tar archive,
-// and unpacks it into the directory at `dest`.
-// The archive must be an uncompressed stream.
-func UntarUncompressed(tarArchive io.Reader, dest string, options *TarOptions) error {
- return untarHandler(tarArchive, dest, options, false)
-}
-
-// Handler for teasing out the automatic decompression
-func untarHandler(tarArchive io.Reader, dest string, options *TarOptions, decompress bool) error {
- if tarArchive == nil {
- return fmt.Errorf("Empty archive")
- }
- dest = filepath.Clean(dest)
- if options == nil {
- options = &TarOptions{}
- }
- if options.ExcludePatterns == nil {
- options.ExcludePatterns = []string{}
- }
-
- r := tarArchive
- if decompress {
- decompressedArchive, err := DecompressStream(tarArchive)
- if err != nil {
- return err
- }
- defer decompressedArchive.Close()
- r = decompressedArchive
- }
-
- return Unpack(r, dest, options)
-}
-
-// TarUntar is a convenience function which calls Tar and Untar, with the output of one piped into the other.
-// If either Tar or Untar fails, TarUntar aborts and returns the error.
-func (archiver *Archiver) TarUntar(src, dst string) error {
- logrus.Debugf("TarUntar(%s %s)", src, dst)
- archive, err := TarWithOptions(src, &TarOptions{Compression: Uncompressed})
- if err != nil {
- return err
- }
- defer archive.Close()
- options := &TarOptions{
- UIDMaps: archiver.IDMappingsVar.UIDs(),
- GIDMaps: archiver.IDMappingsVar.GIDs(),
- }
- return archiver.Untar(archive, dst, options)
-}
-
-// UntarPath untar a file from path to a destination, src is the source tar file path.
-func (archiver *Archiver) UntarPath(src, dst string) error {
- archive, err := os.Open(src)
- if err != nil {
- return err
- }
- defer archive.Close()
- options := &TarOptions{
- UIDMaps: archiver.IDMappingsVar.UIDs(),
- GIDMaps: archiver.IDMappingsVar.GIDs(),
- }
- return archiver.Untar(archive, dst, options)
-}
-
-// CopyWithTar creates a tar archive of filesystem path `src`, and
-// unpacks it at filesystem path `dst`.
-// The archive is streamed directly with fixed buffering and no
-// intermediary disk IO.
-func (archiver *Archiver) CopyWithTar(src, dst string) error {
- srcSt, err := os.Stat(src)
- if err != nil {
- return err
- }
- if !srcSt.IsDir() {
- return archiver.CopyFileWithTar(src, dst)
- }
-
- // if this Archiver is set up with ID mapping we need to create
- // the new destination directory with the remapped root UID/GID pair
- // as owner
- rootIDs := archiver.IDMappingsVar.RootPair()
- // Create dst, copy src's content into it
- logrus.Debugf("Creating dest directory: %s", dst)
- if err := idtools.MkdirAllAndChownNew(dst, 0755, rootIDs); err != nil {
- return err
- }
- logrus.Debugf("Calling TarUntar(%s, %s)", src, dst)
- return archiver.TarUntar(src, dst)
-}
-
-// CopyFileWithTar emulates the behavior of the 'cp' command-line
-// for a single file. It copies a regular file from path `src` to
-// path `dst`, and preserves all its metadata.
-func (archiver *Archiver) CopyFileWithTar(src, dst string) (err error) {
- logrus.Debugf("CopyFileWithTar(%s, %s)", src, dst)
- srcSt, err := os.Stat(src)
- if err != nil {
- return err
- }
-
- if srcSt.IsDir() {
- return fmt.Errorf("Can't copy a directory")
- }
-
- // Clean up the trailing slash. This must be done in an operating
- // system specific manner.
- if dst[len(dst)-1] == os.PathSeparator {
- dst = filepath.Join(dst, filepath.Base(src))
- }
- // Create the holding directory if necessary
- if err := system.MkdirAll(filepath.Dir(dst), 0700, ""); err != nil {
- return err
- }
-
- r, w := io.Pipe()
- errC := make(chan error, 1)
-
- go func() {
- defer close(errC)
-
- errC <- func() error {
- defer w.Close()
-
- srcF, err := os.Open(src)
- if err != nil {
- return err
- }
- defer srcF.Close()
-
- hdr, err := tar.FileInfoHeader(srcSt, "")
- if err != nil {
- return err
- }
- hdr.Name = filepath.Base(dst)
- hdr.Mode = int64(chmodTarEntry(os.FileMode(hdr.Mode)))
-
- if err := remapIDs(archiver.IDMappingsVar, hdr); err != nil {
- return err
- }
-
- tw := tar.NewWriter(w)
- defer tw.Close()
- if err := tw.WriteHeader(hdr); err != nil {
- return err
- }
- if _, err := io.Copy(tw, srcF); err != nil {
- return err
- }
- return nil
- }()
- }()
- defer func() {
- if er := <-errC; err == nil && er != nil {
- err = er
- }
- }()
-
- err = archiver.Untar(r, filepath.Dir(dst), nil)
- if err != nil {
- r.CloseWithError(err)
- }
- return err
-}
-
-// IDMappings returns the IDMappings of the archiver.
-func (archiver *Archiver) IDMappings() *idtools.IDMappings {
- return archiver.IDMappingsVar
-}
-
-func remapIDs(idMappings *idtools.IDMappings, hdr *tar.Header) error {
- ids, err := idMappings.ToHost(idtools.IDPair{UID: hdr.Uid, GID: hdr.Gid})
- hdr.Uid, hdr.Gid = ids.UID, ids.GID
- return err
-}
-
-// cmdStream executes a command, and returns its stdout as a stream.
-// If the command fails to run or doesn't complete successfully, an error
-// will be returned, including anything written on stderr.
-func cmdStream(cmd *exec.Cmd, input io.Reader) (io.ReadCloser, <-chan struct{}, error) {
- chdone := make(chan struct{})
- cmd.Stdin = input
- pipeR, pipeW := io.Pipe()
- cmd.Stdout = pipeW
- var errBuf bytes.Buffer
- cmd.Stderr = &errBuf
-
- // Run the command and return the pipe
- if err := cmd.Start(); err != nil {
- return nil, nil, err
- }
-
- // Copy stdout to the returned pipe
- go func() {
- if err := cmd.Wait(); err != nil {
- pipeW.CloseWithError(fmt.Errorf("%s: %s", err, errBuf.String()))
- } else {
- pipeW.Close()
- }
- close(chdone)
- }()
-
- return pipeR, chdone, nil
-}
-
-// NewTempArchive reads the content of src into a temporary file, and returns the contents
-// of that file as an archive. The archive can only be read once - as soon as reading completes,
-// the file will be deleted.
-func NewTempArchive(src io.Reader, dir string) (*TempArchive, error) {
- f, err := ioutil.TempFile(dir, "")
- if err != nil {
- return nil, err
- }
- if _, err := io.Copy(f, src); err != nil {
- return nil, err
- }
- if _, err := f.Seek(0, 0); err != nil {
- return nil, err
- }
- st, err := f.Stat()
- if err != nil {
- return nil, err
- }
- size := st.Size()
- return &TempArchive{File: f, Size: size}, nil
-}
-
-// TempArchive is a temporary archive. The archive can only be read once - as soon as reading completes,
-// the file will be deleted.
-type TempArchive struct {
- *os.File
- Size int64 // Pre-computed from Stat().Size() as a convenience
- read int64
- closed bool
-}
-
-// Close closes the underlying file if it's still open, or does a no-op
-// to allow callers to try to close the TempArchive multiple times safely.
-func (archive *TempArchive) Close() error {
- if archive.closed {
- return nil
- }
-
- archive.closed = true
-
- return archive.File.Close()
-}
-
-func (archive *TempArchive) Read(data []byte) (int, error) {
- n, err := archive.File.Read(data)
- archive.read += int64(n)
- if err != nil || archive.read == archive.Size {
- archive.Close()
- os.Remove(archive.File.Name())
- }
- return n, err
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/archive_other.go b/vendor/github.com/docker/docker/pkg/archive/archive_other.go
deleted file mode 100644
index 54acbf285..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/archive_other.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build !linux
-
-package archive
-
-func getWhiteoutConverter(format WhiteoutFormat) tarWhiteoutConverter {
- return nil
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/changes.go b/vendor/github.com/docker/docker/pkg/archive/changes.go
deleted file mode 100644
index d78fe6ac6..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/changes.go
+++ /dev/null
@@ -1,441 +0,0 @@
-package archive
-
-import (
- "archive/tar"
- "bytes"
- "fmt"
- "io"
- "io/ioutil"
- "os"
- "path/filepath"
- "sort"
- "strings"
- "syscall"
- "time"
-
- "github.com/docker/docker/pkg/idtools"
- "github.com/docker/docker/pkg/pools"
- "github.com/docker/docker/pkg/system"
- "github.com/sirupsen/logrus"
-)
-
-// ChangeType represents the change type.
-type ChangeType int
-
-const (
- // ChangeModify represents the modify operation.
- ChangeModify = iota
- // ChangeAdd represents the add operation.
- ChangeAdd
- // ChangeDelete represents the delete operation.
- ChangeDelete
-)
-
-func (c ChangeType) String() string {
- switch c {
- case ChangeModify:
- return "C"
- case ChangeAdd:
- return "A"
- case ChangeDelete:
- return "D"
- }
- return ""
-}
-
-// Change represents a change, it wraps the change type and path.
-// It describes changes of the files in the path respect to the
-// parent layers. The change could be modify, add, delete.
-// This is used for layer diff.
-type Change struct {
- Path string
- Kind ChangeType
-}
-
-func (change *Change) String() string {
- return fmt.Sprintf("%s %s", change.Kind, change.Path)
-}
-
-// for sort.Sort
-type changesByPath []Change
-
-func (c changesByPath) Less(i, j int) bool { return c[i].Path < c[j].Path }
-func (c changesByPath) Len() int { return len(c) }
-func (c changesByPath) Swap(i, j int) { c[j], c[i] = c[i], c[j] }
-
-// Gnu tar and the go tar writer don't have sub-second mtime
-// precision, which is problematic when we apply changes via tar
-// files, we handle this by comparing for exact times, *or* same
-// second count and either a or b having exactly 0 nanoseconds
-func sameFsTime(a, b time.Time) bool {
- return a == b ||
- (a.Unix() == b.Unix() &&
- (a.Nanosecond() == 0 || b.Nanosecond() == 0))
-}
-
-func sameFsTimeSpec(a, b syscall.Timespec) bool {
- return a.Sec == b.Sec &&
- (a.Nsec == b.Nsec || a.Nsec == 0 || b.Nsec == 0)
-}
-
-// Changes walks the path rw and determines changes for the files in the path,
-// with respect to the parent layers
-func Changes(layers []string, rw string) ([]Change, error) {
- return changes(layers, rw, aufsDeletedFile, aufsMetadataSkip)
-}
-
-func aufsMetadataSkip(path string) (skip bool, err error) {
- skip, err = filepath.Match(string(os.PathSeparator)+WhiteoutMetaPrefix+"*", path)
- if err != nil {
- skip = true
- }
- return
-}
-
-func aufsDeletedFile(root, path string, fi os.FileInfo) (string, error) {
- f := filepath.Base(path)
-
- // If there is a whiteout, then the file was removed
- if strings.HasPrefix(f, WhiteoutPrefix) {
- originalFile := f[len(WhiteoutPrefix):]
- return filepath.Join(filepath.Dir(path), originalFile), nil
- }
-
- return "", nil
-}
-
-type skipChange func(string) (bool, error)
-type deleteChange func(string, string, os.FileInfo) (string, error)
-
-func changes(layers []string, rw string, dc deleteChange, sc skipChange) ([]Change, error) {
- var (
- changes []Change
- changedDirs = make(map[string]struct{})
- )
-
- err := filepath.Walk(rw, func(path string, f os.FileInfo, err error) error {
- if err != nil {
- return err
- }
-
- // Rebase path
- path, err = filepath.Rel(rw, path)
- if err != nil {
- return err
- }
-
- // As this runs on the daemon side, file paths are OS specific.
- path = filepath.Join(string(os.PathSeparator), path)
-
- // Skip root
- if path == string(os.PathSeparator) {
- return nil
- }
-
- if sc != nil {
- if skip, err := sc(path); skip {
- return err
- }
- }
-
- change := Change{
- Path: path,
- }
-
- deletedFile, err := dc(rw, path, f)
- if err != nil {
- return err
- }
-
- // Find out what kind of modification happened
- if deletedFile != "" {
- change.Path = deletedFile
- change.Kind = ChangeDelete
- } else {
- // Otherwise, the file was added
- change.Kind = ChangeAdd
-
- // ...Unless it already existed in a top layer, in which case, it's a modification
- for _, layer := range layers {
- stat, err := os.Stat(filepath.Join(layer, path))
- if err != nil && !os.IsNotExist(err) {
- return err
- }
- if err == nil {
- // The file existed in the top layer, so that's a modification
-
- // However, if it's a directory, maybe it wasn't actually modified.
- // If you modify /foo/bar/baz, then /foo will be part of the changed files only because it's the parent of bar
- if stat.IsDir() && f.IsDir() {
- if f.Size() == stat.Size() && f.Mode() == stat.Mode() && sameFsTime(f.ModTime(), stat.ModTime()) {
- // Both directories are the same, don't record the change
- return nil
- }
- }
- change.Kind = ChangeModify
- break
- }
- }
- }
-
- // If /foo/bar/file.txt is modified, then /foo/bar must be part of the changed files.
- // This block is here to ensure the change is recorded even if the
- // modify time, mode and size of the parent directory in the rw and ro layers are all equal.
- // Check https://github.com/docker/docker/pull/13590 for details.
- if f.IsDir() {
- changedDirs[path] = struct{}{}
- }
- if change.Kind == ChangeAdd || change.Kind == ChangeDelete {
- parent := filepath.Dir(path)
- if _, ok := changedDirs[parent]; !ok && parent != "/" {
- changes = append(changes, Change{Path: parent, Kind: ChangeModify})
- changedDirs[parent] = struct{}{}
- }
- }
-
- // Record change
- changes = append(changes, change)
- return nil
- })
- if err != nil && !os.IsNotExist(err) {
- return nil, err
- }
- return changes, nil
-}
-
-// FileInfo describes the information of a file.
-type FileInfo struct {
- parent *FileInfo
- name string
- stat *system.StatT
- children map[string]*FileInfo
- capability []byte
- added bool
-}
-
-// LookUp looks up the file information of a file.
-func (info *FileInfo) LookUp(path string) *FileInfo {
- // As this runs on the daemon side, file paths are OS specific.
- parent := info
- if path == string(os.PathSeparator) {
- return info
- }
-
- pathElements := strings.Split(path, string(os.PathSeparator))
- for _, elem := range pathElements {
- if elem != "" {
- child := parent.children[elem]
- if child == nil {
- return nil
- }
- parent = child
- }
- }
- return parent
-}
-
-func (info *FileInfo) path() string {
- if info.parent == nil {
- // As this runs on the daemon side, file paths are OS specific.
- return string(os.PathSeparator)
- }
- return filepath.Join(info.parent.path(), info.name)
-}
-
-func (info *FileInfo) addChanges(oldInfo *FileInfo, changes *[]Change) {
-
- sizeAtEntry := len(*changes)
-
- if oldInfo == nil {
- // add
- change := Change{
- Path: info.path(),
- Kind: ChangeAdd,
- }
- *changes = append(*changes, change)
- info.added = true
- }
-
- // We make a copy so we can modify it to detect additions
- // also, we only recurse on the old dir if the new info is a directory
- // otherwise any previous delete/change is considered recursive
- oldChildren := make(map[string]*FileInfo)
- if oldInfo != nil && info.isDir() {
- for k, v := range oldInfo.children {
- oldChildren[k] = v
- }
- }
-
- for name, newChild := range info.children {
- oldChild := oldChildren[name]
- if oldChild != nil {
- // change?
- oldStat := oldChild.stat
- newStat := newChild.stat
- // Note: We can't compare inode or ctime or blocksize here, because these change
- // when copying a file into a container. However, that is not generally a problem
- // because any content change will change mtime, and any status change should
- // be visible when actually comparing the stat fields. The only time this
- // breaks down is if some code intentionally hides a change by setting
- // back mtime
- if statDifferent(oldStat, newStat) ||
- !bytes.Equal(oldChild.capability, newChild.capability) {
- change := Change{
- Path: newChild.path(),
- Kind: ChangeModify,
- }
- *changes = append(*changes, change)
- newChild.added = true
- }
-
- // Remove from copy so we can detect deletions
- delete(oldChildren, name)
- }
-
- newChild.addChanges(oldChild, changes)
- }
- for _, oldChild := range oldChildren {
- // delete
- change := Change{
- Path: oldChild.path(),
- Kind: ChangeDelete,
- }
- *changes = append(*changes, change)
- }
-
- // If there were changes inside this directory, we need to add it, even if the directory
- // itself wasn't changed. This is needed to properly save and restore filesystem permissions.
- // As this runs on the daemon side, file paths are OS specific.
- if len(*changes) > sizeAtEntry && info.isDir() && !info.added && info.path() != string(os.PathSeparator) {
- change := Change{
- Path: info.path(),
- Kind: ChangeModify,
- }
- // Let's insert the directory entry before the recently added entries located inside this dir
- *changes = append(*changes, change) // just to resize the slice, will be overwritten
- copy((*changes)[sizeAtEntry+1:], (*changes)[sizeAtEntry:])
- (*changes)[sizeAtEntry] = change
- }
-
-}
-
-// Changes add changes to file information.
-func (info *FileInfo) Changes(oldInfo *FileInfo) []Change {
- var changes []Change
-
- info.addChanges(oldInfo, &changes)
-
- return changes
-}
-
-func newRootFileInfo() *FileInfo {
- // As this runs on the daemon side, file paths are OS specific.
- root := &FileInfo{
- name: string(os.PathSeparator),
- children: make(map[string]*FileInfo),
- }
- return root
-}
-
-// ChangesDirs compares two directories and generates an array of Change objects describing the changes.
-// If oldDir is "", then all files in newDir will be Add-Changes.
-func ChangesDirs(newDir, oldDir string) ([]Change, error) {
- var (
- oldRoot, newRoot *FileInfo
- )
- if oldDir == "" {
- emptyDir, err := ioutil.TempDir("", "empty")
- if err != nil {
- return nil, err
- }
- defer os.Remove(emptyDir)
- oldDir = emptyDir
- }
- oldRoot, newRoot, err := collectFileInfoForChanges(oldDir, newDir)
- if err != nil {
- return nil, err
- }
-
- return newRoot.Changes(oldRoot), nil
-}
-
-// ChangesSize calculates the size in bytes of the provided changes, based on newDir.
-func ChangesSize(newDir string, changes []Change) int64 {
- var (
- size int64
- sf = make(map[uint64]struct{})
- )
- for _, change := range changes {
- if change.Kind == ChangeModify || change.Kind == ChangeAdd {
- file := filepath.Join(newDir, change.Path)
- fileInfo, err := os.Lstat(file)
- if err != nil {
- logrus.Errorf("Can not stat %q: %s", file, err)
- continue
- }
-
- if fileInfo != nil && !fileInfo.IsDir() {
- if hasHardlinks(fileInfo) {
- inode := getIno(fileInfo)
- if _, ok := sf[inode]; !ok {
- size += fileInfo.Size()
- sf[inode] = struct{}{}
- }
- } else {
- size += fileInfo.Size()
- }
- }
- }
- }
- return size
-}
-
-// ExportChanges produces an Archive from the provided changes, relative to dir.
-func ExportChanges(dir string, changes []Change, uidMaps, gidMaps []idtools.IDMap) (io.ReadCloser, error) {
- reader, writer := io.Pipe()
- go func() {
- ta := newTarAppender(idtools.NewIDMappingsFromMaps(uidMaps, gidMaps), writer, nil)
-
- // this buffer is needed for the duration of this piped stream
- defer pools.BufioWriter32KPool.Put(ta.Buffer)
-
- sort.Sort(changesByPath(changes))
-
- // In general we log errors here but ignore them because
- // during e.g. a diff operation the container can continue
- // mutating the filesystem and we can see transient errors
- // from this
- for _, change := range changes {
- if change.Kind == ChangeDelete {
- whiteOutDir := filepath.Dir(change.Path)
- whiteOutBase := filepath.Base(change.Path)
- whiteOut := filepath.Join(whiteOutDir, WhiteoutPrefix+whiteOutBase)
- timestamp := time.Now()
- hdr := &tar.Header{
- Name: whiteOut[1:],
- Size: 0,
- ModTime: timestamp,
- AccessTime: timestamp,
- ChangeTime: timestamp,
- }
- if err := ta.TarWriter.WriteHeader(hdr); err != nil {
- logrus.Debugf("Can't write whiteout header: %s", err)
- }
- } else {
- path := filepath.Join(dir, change.Path)
- if err := ta.addTarFile(path, change.Path[1:]); err != nil {
- logrus.Debugf("Can't add file %s to tar: %s", path, err)
- }
- }
- }
-
- // Make sure to check the error on Close.
- if err := ta.TarWriter.Close(); err != nil {
- logrus.Debugf("Can't close layer: %s", err)
- }
- if err := writer.Close(); err != nil {
- logrus.Debugf("failed close Changes writer: %s", err)
- }
- }()
- return reader, nil
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/changes_linux.go b/vendor/github.com/docker/docker/pkg/archive/changes_linux.go
deleted file mode 100644
index e9eb478fe..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/changes_linux.go
+++ /dev/null
@@ -1,313 +0,0 @@
-package archive
-
-import (
- "bytes"
- "fmt"
- "os"
- "path/filepath"
- "sort"
- "syscall"
- "unsafe"
-
- "github.com/docker/docker/pkg/system"
- "golang.org/x/sys/unix"
-)
-
-// walker is used to implement collectFileInfoForChanges on linux. Where this
-// method in general returns the entire contents of two directory trees, we
-// optimize some FS calls out on linux. In particular, we take advantage of the
-// fact that getdents(2) returns the inode of each file in the directory being
-// walked, which, when walking two trees in parallel to generate a list of
-// changes, can be used to prune subtrees without ever having to lstat(2) them
-// directly. Eliminating stat calls in this way can save up to seconds on large
-// images.
-type walker struct {
- dir1 string
- dir2 string
- root1 *FileInfo
- root2 *FileInfo
-}
-
-// collectFileInfoForChanges returns a complete representation of the trees
-// rooted at dir1 and dir2, with one important exception: any subtree or
-// leaf where the inode and device numbers are an exact match between dir1
-// and dir2 will be pruned from the results. This method is *only* to be used
-// to generating a list of changes between the two directories, as it does not
-// reflect the full contents.
-func collectFileInfoForChanges(dir1, dir2 string) (*FileInfo, *FileInfo, error) {
- w := &walker{
- dir1: dir1,
- dir2: dir2,
- root1: newRootFileInfo(),
- root2: newRootFileInfo(),
- }
-
- i1, err := os.Lstat(w.dir1)
- if err != nil {
- return nil, nil, err
- }
- i2, err := os.Lstat(w.dir2)
- if err != nil {
- return nil, nil, err
- }
-
- if err := w.walk("/", i1, i2); err != nil {
- return nil, nil, err
- }
-
- return w.root1, w.root2, nil
-}
-
-// Given a FileInfo, its path info, and a reference to the root of the tree
-// being constructed, register this file with the tree.
-func walkchunk(path string, fi os.FileInfo, dir string, root *FileInfo) error {
- if fi == nil {
- return nil
- }
- parent := root.LookUp(filepath.Dir(path))
- if parent == nil {
- return fmt.Errorf("walkchunk: Unexpectedly no parent for %s", path)
- }
- info := &FileInfo{
- name: filepath.Base(path),
- children: make(map[string]*FileInfo),
- parent: parent,
- }
- cpath := filepath.Join(dir, path)
- stat, err := system.FromStatT(fi.Sys().(*syscall.Stat_t))
- if err != nil {
- return err
- }
- info.stat = stat
- info.capability, _ = system.Lgetxattr(cpath, "security.capability") // lgetxattr(2): fs access
- parent.children[info.name] = info
- return nil
-}
-
-// Walk a subtree rooted at the same path in both trees being iterated. For
-// example, /docker/overlay/1234/a/b/c/d and /docker/overlay/8888/a/b/c/d
-func (w *walker) walk(path string, i1, i2 os.FileInfo) (err error) {
- // Register these nodes with the return trees, unless we're still at the
- // (already-created) roots:
- if path != "/" {
- if err := walkchunk(path, i1, w.dir1, w.root1); err != nil {
- return err
- }
- if err := walkchunk(path, i2, w.dir2, w.root2); err != nil {
- return err
- }
- }
-
- is1Dir := i1 != nil && i1.IsDir()
- is2Dir := i2 != nil && i2.IsDir()
-
- sameDevice := false
- if i1 != nil && i2 != nil {
- si1 := i1.Sys().(*syscall.Stat_t)
- si2 := i2.Sys().(*syscall.Stat_t)
- if si1.Dev == si2.Dev {
- sameDevice = true
- }
- }
-
- // If these files are both non-existent, or leaves (non-dirs), we are done.
- if !is1Dir && !is2Dir {
- return nil
- }
-
- // Fetch the names of all the files contained in both directories being walked:
- var names1, names2 []nameIno
- if is1Dir {
- names1, err = readdirnames(filepath.Join(w.dir1, path)) // getdents(2): fs access
- if err != nil {
- return err
- }
- }
- if is2Dir {
- names2, err = readdirnames(filepath.Join(w.dir2, path)) // getdents(2): fs access
- if err != nil {
- return err
- }
- }
-
- // We have lists of the files contained in both parallel directories, sorted
- // in the same order. Walk them in parallel, generating a unique merged list
- // of all items present in either or both directories.
- var names []string
- ix1 := 0
- ix2 := 0
-
- for {
- if ix1 >= len(names1) {
- break
- }
- if ix2 >= len(names2) {
- break
- }
-
- ni1 := names1[ix1]
- ni2 := names2[ix2]
-
- switch bytes.Compare([]byte(ni1.name), []byte(ni2.name)) {
- case -1: // ni1 < ni2 -- advance ni1
- // we will not encounter ni1 in names2
- names = append(names, ni1.name)
- ix1++
- case 0: // ni1 == ni2
- if ni1.ino != ni2.ino || !sameDevice {
- names = append(names, ni1.name)
- }
- ix1++
- ix2++
- case 1: // ni1 > ni2 -- advance ni2
- // we will not encounter ni2 in names1
- names = append(names, ni2.name)
- ix2++
- }
- }
- for ix1 < len(names1) {
- names = append(names, names1[ix1].name)
- ix1++
- }
- for ix2 < len(names2) {
- names = append(names, names2[ix2].name)
- ix2++
- }
-
- // For each of the names present in either or both of the directories being
- // iterated, stat the name under each root, and recurse the pair of them:
- for _, name := range names {
- fname := filepath.Join(path, name)
- var cInfo1, cInfo2 os.FileInfo
- if is1Dir {
- cInfo1, err = os.Lstat(filepath.Join(w.dir1, fname)) // lstat(2): fs access
- if err != nil && !os.IsNotExist(err) {
- return err
- }
- }
- if is2Dir {
- cInfo2, err = os.Lstat(filepath.Join(w.dir2, fname)) // lstat(2): fs access
- if err != nil && !os.IsNotExist(err) {
- return err
- }
- }
- if err = w.walk(fname, cInfo1, cInfo2); err != nil {
- return err
- }
- }
- return nil
-}
-
-// {name,inode} pairs used to support the early-pruning logic of the walker type
-type nameIno struct {
- name string
- ino uint64
-}
-
-type nameInoSlice []nameIno
-
-func (s nameInoSlice) Len() int { return len(s) }
-func (s nameInoSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
-func (s nameInoSlice) Less(i, j int) bool { return s[i].name < s[j].name }
-
-// readdirnames is a hacked-apart version of the Go stdlib code, exposing inode
-// numbers further up the stack when reading directory contents. Unlike
-// os.Readdirnames, which returns a list of filenames, this function returns a
-// list of {filename,inode} pairs.
-func readdirnames(dirname string) (names []nameIno, err error) {
- var (
- size = 100
- buf = make([]byte, 4096)
- nbuf int
- bufp int
- nb int
- )
-
- f, err := os.Open(dirname)
- if err != nil {
- return nil, err
- }
- defer f.Close()
-
- names = make([]nameIno, 0, size) // Empty with room to grow.
- for {
- // Refill the buffer if necessary
- if bufp >= nbuf {
- bufp = 0
- nbuf, err = unix.ReadDirent(int(f.Fd()), buf) // getdents on linux
- if nbuf < 0 {
- nbuf = 0
- }
- if err != nil {
- return nil, os.NewSyscallError("readdirent", err)
- }
- if nbuf <= 0 {
- break // EOF
- }
- }
-
- // Drain the buffer
- nb, names = parseDirent(buf[bufp:nbuf], names)
- bufp += nb
- }
-
- sl := nameInoSlice(names)
- sort.Sort(sl)
- return sl, nil
-}
-
-// parseDirent is a minor modification of unix.ParseDirent (linux version)
-// which returns {name,inode} pairs instead of just names.
-func parseDirent(buf []byte, names []nameIno) (consumed int, newnames []nameIno) {
- origlen := len(buf)
- for len(buf) > 0 {
- dirent := (*unix.Dirent)(unsafe.Pointer(&buf[0]))
- buf = buf[dirent.Reclen:]
- if dirent.Ino == 0 { // File absent in directory.
- continue
- }
- bytes := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0]))
- var name = string(bytes[0:clen(bytes[:])])
- if name == "." || name == ".." { // Useless names
- continue
- }
- names = append(names, nameIno{name, dirent.Ino})
- }
- return origlen - len(buf), names
-}
-
-func clen(n []byte) int {
- for i := 0; i < len(n); i++ {
- if n[i] == 0 {
- return i
- }
- }
- return len(n)
-}
-
-// OverlayChanges walks the path rw and determines changes for the files in the path,
-// with respect to the parent layers
-func OverlayChanges(layers []string, rw string) ([]Change, error) {
- return changes(layers, rw, overlayDeletedFile, nil)
-}
-
-func overlayDeletedFile(root, path string, fi os.FileInfo) (string, error) {
- if fi.Mode()&os.ModeCharDevice != 0 {
- s := fi.Sys().(*syscall.Stat_t)
- if unix.Major(uint64(s.Rdev)) == 0 && unix.Minor(uint64(s.Rdev)) == 0 { // nolint: unconvert
- return path, nil
- }
- }
- if fi.Mode()&os.ModeDir != 0 {
- opaque, err := system.Lgetxattr(filepath.Join(root, path), "trusted.overlay.opaque")
- if err != nil {
- return "", err
- }
- if len(opaque) == 1 && opaque[0] == 'y' {
- return path, nil
- }
- }
-
- return "", nil
-
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/changes_other.go b/vendor/github.com/docker/docker/pkg/archive/changes_other.go
deleted file mode 100644
index da70ed37c..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/changes_other.go
+++ /dev/null
@@ -1,97 +0,0 @@
-// +build !linux
-
-package archive
-
-import (
- "fmt"
- "os"
- "path/filepath"
- "runtime"
- "strings"
-
- "github.com/docker/docker/pkg/system"
-)
-
-func collectFileInfoForChanges(oldDir, newDir string) (*FileInfo, *FileInfo, error) {
- var (
- oldRoot, newRoot *FileInfo
- err1, err2 error
- errs = make(chan error, 2)
- )
- go func() {
- oldRoot, err1 = collectFileInfo(oldDir)
- errs <- err1
- }()
- go func() {
- newRoot, err2 = collectFileInfo(newDir)
- errs <- err2
- }()
-
- // block until both routines have returned
- for i := 0; i < 2; i++ {
- if err := <-errs; err != nil {
- return nil, nil, err
- }
- }
-
- return oldRoot, newRoot, nil
-}
-
-func collectFileInfo(sourceDir string) (*FileInfo, error) {
- root := newRootFileInfo()
-
- err := filepath.Walk(sourceDir, func(path string, f os.FileInfo, err error) error {
- if err != nil {
- return err
- }
-
- // Rebase path
- relPath, err := filepath.Rel(sourceDir, path)
- if err != nil {
- return err
- }
-
- // As this runs on the daemon side, file paths are OS specific.
- relPath = filepath.Join(string(os.PathSeparator), relPath)
-
- // See https://github.com/golang/go/issues/9168 - bug in filepath.Join.
- // Temporary workaround. If the returned path starts with two backslashes,
- // trim it down to a single backslash. Only relevant on Windows.
- if runtime.GOOS == "windows" {
- if strings.HasPrefix(relPath, `\\`) {
- relPath = relPath[1:]
- }
- }
-
- if relPath == string(os.PathSeparator) {
- return nil
- }
-
- parent := root.LookUp(filepath.Dir(relPath))
- if parent == nil {
- return fmt.Errorf("collectFileInfo: Unexpectedly no parent for %s", relPath)
- }
-
- info := &FileInfo{
- name: filepath.Base(relPath),
- children: make(map[string]*FileInfo),
- parent: parent,
- }
-
- s, err := system.Lstat(path)
- if err != nil {
- return err
- }
- info.stat = s
-
- info.capability, _ = system.Lgetxattr(path, "security.capability")
-
- parent.children[info.name] = info
-
- return nil
- })
- if err != nil {
- return nil, err
- }
- return root, nil
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/changes_unix.go b/vendor/github.com/docker/docker/pkg/archive/changes_unix.go
deleted file mode 100644
index 7aa1226d7..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/changes_unix.go
+++ /dev/null
@@ -1,37 +0,0 @@
-// +build !windows
-
-package archive
-
-import (
- "os"
- "syscall"
-
- "github.com/docker/docker/pkg/system"
- "golang.org/x/sys/unix"
-)
-
-func statDifferent(oldStat *system.StatT, newStat *system.StatT) bool {
- // Don't look at size for dirs, its not a good measure of change
- if oldStat.Mode() != newStat.Mode() ||
- oldStat.UID() != newStat.UID() ||
- oldStat.GID() != newStat.GID() ||
- oldStat.Rdev() != newStat.Rdev() ||
- // Don't look at size for dirs, its not a good measure of change
- (oldStat.Mode()&unix.S_IFDIR != unix.S_IFDIR &&
- (!sameFsTimeSpec(oldStat.Mtim(), newStat.Mtim()) || (oldStat.Size() != newStat.Size()))) {
- return true
- }
- return false
-}
-
-func (info *FileInfo) isDir() bool {
- return info.parent == nil || info.stat.Mode()&unix.S_IFDIR != 0
-}
-
-func getIno(fi os.FileInfo) uint64 {
- return fi.Sys().(*syscall.Stat_t).Ino
-}
-
-func hasHardlinks(fi os.FileInfo) bool {
- return fi.Sys().(*syscall.Stat_t).Nlink > 1
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/changes_windows.go b/vendor/github.com/docker/docker/pkg/archive/changes_windows.go
deleted file mode 100644
index 6fd353269..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/changes_windows.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package archive
-
-import (
- "os"
-
- "github.com/docker/docker/pkg/system"
-)
-
-func statDifferent(oldStat *system.StatT, newStat *system.StatT) bool {
-
- // Don't look at size for dirs, its not a good measure of change
- if oldStat.Mtim() != newStat.Mtim() ||
- oldStat.Mode() != newStat.Mode() ||
- oldStat.Size() != newStat.Size() && !oldStat.Mode().IsDir() {
- return true
- }
- return false
-}
-
-func (info *FileInfo) isDir() bool {
- return info.parent == nil || info.stat.Mode().IsDir()
-}
-
-func getIno(fi os.FileInfo) (inode uint64) {
- return
-}
-
-func hasHardlinks(fi os.FileInfo) bool {
- return false
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/copy.go b/vendor/github.com/docker/docker/pkg/archive/copy.go
deleted file mode 100644
index d1e036d5c..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/copy.go
+++ /dev/null
@@ -1,472 +0,0 @@
-package archive
-
-import (
- "archive/tar"
- "errors"
- "io"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
-
- "github.com/docker/docker/pkg/system"
- "github.com/sirupsen/logrus"
-)
-
-// Errors used or returned by this file.
-var (
- ErrNotDirectory = errors.New("not a directory")
- ErrDirNotExists = errors.New("no such directory")
- ErrCannotCopyDir = errors.New("cannot copy directory")
- ErrInvalidCopySource = errors.New("invalid copy source content")
-)
-
-// PreserveTrailingDotOrSeparator returns the given cleaned path (after
-// processing using any utility functions from the path or filepath stdlib
-// packages) and appends a trailing `/.` or `/` if its corresponding original
-// path (from before being processed by utility functions from the path or
-// filepath stdlib packages) ends with a trailing `/.` or `/`. If the cleaned
-// path already ends in a `.` path segment, then another is not added. If the
-// clean path already ends in the separator, then another is not added.
-func PreserveTrailingDotOrSeparator(cleanedPath string, originalPath string, sep byte) string {
- // Ensure paths are in platform semantics
- cleanedPath = strings.Replace(cleanedPath, "/", string(sep), -1)
- originalPath = strings.Replace(originalPath, "/", string(sep), -1)
-
- if !specifiesCurrentDir(cleanedPath) && specifiesCurrentDir(originalPath) {
- if !hasTrailingPathSeparator(cleanedPath, sep) {
- // Add a separator if it doesn't already end with one (a cleaned
- // path would only end in a separator if it is the root).
- cleanedPath += string(sep)
- }
- cleanedPath += "."
- }
-
- if !hasTrailingPathSeparator(cleanedPath, sep) && hasTrailingPathSeparator(originalPath, sep) {
- cleanedPath += string(sep)
- }
-
- return cleanedPath
-}
-
-// assertsDirectory returns whether the given path is
-// asserted to be a directory, i.e., the path ends with
-// a trailing '/' or `/.`, assuming a path separator of `/`.
-func assertsDirectory(path string, sep byte) bool {
- return hasTrailingPathSeparator(path, sep) || specifiesCurrentDir(path)
-}
-
-// hasTrailingPathSeparator returns whether the given
-// path ends with the system's path separator character.
-func hasTrailingPathSeparator(path string, sep byte) bool {
- return len(path) > 0 && path[len(path)-1] == sep
-}
-
-// specifiesCurrentDir returns whether the given path specifies
-// a "current directory", i.e., the last path segment is `.`.
-func specifiesCurrentDir(path string) bool {
- return filepath.Base(path) == "."
-}
-
-// SplitPathDirEntry splits the given path between its directory name and its
-// basename by first cleaning the path but preserves a trailing "." if the
-// original path specified the current directory.
-func SplitPathDirEntry(path string) (dir, base string) {
- cleanedPath := filepath.Clean(filepath.FromSlash(path))
-
- if specifiesCurrentDir(path) {
- cleanedPath += string(os.PathSeparator) + "."
- }
-
- return filepath.Dir(cleanedPath), filepath.Base(cleanedPath)
-}
-
-// TarResource archives the resource described by the given CopyInfo to a Tar
-// archive. A non-nil error is returned if sourcePath does not exist or is
-// asserted to be a directory but exists as another type of file.
-//
-// This function acts as a convenient wrapper around TarWithOptions, which
-// requires a directory as the source path. TarResource accepts either a
-// directory or a file path and correctly sets the Tar options.
-func TarResource(sourceInfo CopyInfo) (content io.ReadCloser, err error) {
- return TarResourceRebase(sourceInfo.Path, sourceInfo.RebaseName)
-}
-
-// TarResourceRebase is like TarResource but renames the first path element of
-// items in the resulting tar archive to match the given rebaseName if not "".
-func TarResourceRebase(sourcePath, rebaseName string) (content io.ReadCloser, err error) {
- sourcePath = normalizePath(sourcePath)
- if _, err = os.Lstat(sourcePath); err != nil {
- // Catches the case where the source does not exist or is not a
- // directory if asserted to be a directory, as this also causes an
- // error.
- return
- }
-
- // Separate the source path between its directory and
- // the entry in that directory which we are archiving.
- sourceDir, sourceBase := SplitPathDirEntry(sourcePath)
- opts := TarResourceRebaseOpts(sourceBase, rebaseName)
-
- logrus.Debugf("copying %q from %q", sourceBase, sourceDir)
- return TarWithOptions(sourceDir, opts)
-}
-
-// TarResourceRebaseOpts does not preform the Tar, but instead just creates the rebase
-// parameters to be sent to TarWithOptions (the TarOptions struct)
-func TarResourceRebaseOpts(sourceBase string, rebaseName string) *TarOptions {
- filter := []string{sourceBase}
- return &TarOptions{
- Compression: Uncompressed,
- IncludeFiles: filter,
- IncludeSourceDir: true,
- RebaseNames: map[string]string{
- sourceBase: rebaseName,
- },
- }
-}
-
-// CopyInfo holds basic info about the source
-// or destination path of a copy operation.
-type CopyInfo struct {
- Path string
- Exists bool
- IsDir bool
- RebaseName string
-}
-
-// CopyInfoSourcePath stats the given path to create a CopyInfo
-// struct representing that resource for the source of an archive copy
-// operation. The given path should be an absolute local path. A source path
-// has all symlinks evaluated that appear before the last path separator ("/"
-// on Unix). As it is to be a copy source, the path must exist.
-func CopyInfoSourcePath(path string, followLink bool) (CopyInfo, error) {
- // normalize the file path and then evaluate the symbol link
- // we will use the target file instead of the symbol link if
- // followLink is set
- path = normalizePath(path)
-
- resolvedPath, rebaseName, err := ResolveHostSourcePath(path, followLink)
- if err != nil {
- return CopyInfo{}, err
- }
-
- stat, err := os.Lstat(resolvedPath)
- if err != nil {
- return CopyInfo{}, err
- }
-
- return CopyInfo{
- Path: resolvedPath,
- Exists: true,
- IsDir: stat.IsDir(),
- RebaseName: rebaseName,
- }, nil
-}
-
-// CopyInfoDestinationPath stats the given path to create a CopyInfo
-// struct representing that resource for the destination of an archive copy
-// operation. The given path should be an absolute local path.
-func CopyInfoDestinationPath(path string) (info CopyInfo, err error) {
- maxSymlinkIter := 10 // filepath.EvalSymlinks uses 255, but 10 already seems like a lot.
- path = normalizePath(path)
- originalPath := path
-
- stat, err := os.Lstat(path)
-
- if err == nil && stat.Mode()&os.ModeSymlink == 0 {
- // The path exists and is not a symlink.
- return CopyInfo{
- Path: path,
- Exists: true,
- IsDir: stat.IsDir(),
- }, nil
- }
-
- // While the path is a symlink.
- for n := 0; err == nil && stat.Mode()&os.ModeSymlink != 0; n++ {
- if n > maxSymlinkIter {
- // Don't follow symlinks more than this arbitrary number of times.
- return CopyInfo{}, errors.New("too many symlinks in " + originalPath)
- }
-
- // The path is a symbolic link. We need to evaluate it so that the
- // destination of the copy operation is the link target and not the
- // link itself. This is notably different than CopyInfoSourcePath which
- // only evaluates symlinks before the last appearing path separator.
- // Also note that it is okay if the last path element is a broken
- // symlink as the copy operation should create the target.
- var linkTarget string
-
- linkTarget, err = os.Readlink(path)
- if err != nil {
- return CopyInfo{}, err
- }
-
- if !system.IsAbs(linkTarget) {
- // Join with the parent directory.
- dstParent, _ := SplitPathDirEntry(path)
- linkTarget = filepath.Join(dstParent, linkTarget)
- }
-
- path = linkTarget
- stat, err = os.Lstat(path)
- }
-
- if err != nil {
- // It's okay if the destination path doesn't exist. We can still
- // continue the copy operation if the parent directory exists.
- if !os.IsNotExist(err) {
- return CopyInfo{}, err
- }
-
- // Ensure destination parent dir exists.
- dstParent, _ := SplitPathDirEntry(path)
-
- parentDirStat, err := os.Stat(dstParent)
- if err != nil {
- return CopyInfo{}, err
- }
- if !parentDirStat.IsDir() {
- return CopyInfo{}, ErrNotDirectory
- }
-
- return CopyInfo{Path: path}, nil
- }
-
- // The path exists after resolving symlinks.
- return CopyInfo{
- Path: path,
- Exists: true,
- IsDir: stat.IsDir(),
- }, nil
-}
-
-// PrepareArchiveCopy prepares the given srcContent archive, which should
-// contain the archived resource described by srcInfo, to the destination
-// described by dstInfo. Returns the possibly modified content archive along
-// with the path to the destination directory which it should be extracted to.
-func PrepareArchiveCopy(srcContent io.Reader, srcInfo, dstInfo CopyInfo) (dstDir string, content io.ReadCloser, err error) {
- // Ensure in platform semantics
- srcInfo.Path = normalizePath(srcInfo.Path)
- dstInfo.Path = normalizePath(dstInfo.Path)
-
- // Separate the destination path between its directory and base
- // components in case the source archive contents need to be rebased.
- dstDir, dstBase := SplitPathDirEntry(dstInfo.Path)
- _, srcBase := SplitPathDirEntry(srcInfo.Path)
-
- switch {
- case dstInfo.Exists && dstInfo.IsDir:
- // The destination exists as a directory. No alteration
- // to srcContent is needed as its contents can be
- // simply extracted to the destination directory.
- return dstInfo.Path, ioutil.NopCloser(srcContent), nil
- case dstInfo.Exists && srcInfo.IsDir:
- // The destination exists as some type of file and the source
- // content is a directory. This is an error condition since
- // you cannot copy a directory to an existing file location.
- return "", nil, ErrCannotCopyDir
- case dstInfo.Exists:
- // The destination exists as some type of file and the source content
- // is also a file. The source content entry will have to be renamed to
- // have a basename which matches the destination path's basename.
- if len(srcInfo.RebaseName) != 0 {
- srcBase = srcInfo.RebaseName
- }
- return dstDir, RebaseArchiveEntries(srcContent, srcBase, dstBase), nil
- case srcInfo.IsDir:
- // The destination does not exist and the source content is an archive
- // of a directory. The archive should be extracted to the parent of
- // the destination path instead, and when it is, the directory that is
- // created as a result should take the name of the destination path.
- // The source content entries will have to be renamed to have a
- // basename which matches the destination path's basename.
- if len(srcInfo.RebaseName) != 0 {
- srcBase = srcInfo.RebaseName
- }
- return dstDir, RebaseArchiveEntries(srcContent, srcBase, dstBase), nil
- case assertsDirectory(dstInfo.Path, os.PathSeparator):
- // The destination does not exist and is asserted to be created as a
- // directory, but the source content is not a directory. This is an
- // error condition since you cannot create a directory from a file
- // source.
- return "", nil, ErrDirNotExists
- default:
- // The last remaining case is when the destination does not exist, is
- // not asserted to be a directory, and the source content is not an
- // archive of a directory. It this case, the destination file will need
- // to be created when the archive is extracted and the source content
- // entry will have to be renamed to have a basename which matches the
- // destination path's basename.
- if len(srcInfo.RebaseName) != 0 {
- srcBase = srcInfo.RebaseName
- }
- return dstDir, RebaseArchiveEntries(srcContent, srcBase, dstBase), nil
- }
-
-}
-
-// RebaseArchiveEntries rewrites the given srcContent archive replacing
-// an occurrence of oldBase with newBase at the beginning of entry names.
-func RebaseArchiveEntries(srcContent io.Reader, oldBase, newBase string) io.ReadCloser {
- if oldBase == string(os.PathSeparator) {
- // If oldBase specifies the root directory, use an empty string as
- // oldBase instead so that newBase doesn't replace the path separator
- // that all paths will start with.
- oldBase = ""
- }
-
- rebased, w := io.Pipe()
-
- go func() {
- srcTar := tar.NewReader(srcContent)
- rebasedTar := tar.NewWriter(w)
-
- for {
- hdr, err := srcTar.Next()
- if err == io.EOF {
- // Signals end of archive.
- rebasedTar.Close()
- w.Close()
- return
- }
- if err != nil {
- w.CloseWithError(err)
- return
- }
-
- hdr.Name = strings.Replace(hdr.Name, oldBase, newBase, 1)
- if hdr.Typeflag == tar.TypeLink {
- hdr.Linkname = strings.Replace(hdr.Linkname, oldBase, newBase, 1)
- }
-
- if err = rebasedTar.WriteHeader(hdr); err != nil {
- w.CloseWithError(err)
- return
- }
-
- if _, err = io.Copy(rebasedTar, srcTar); err != nil {
- w.CloseWithError(err)
- return
- }
- }
- }()
-
- return rebased
-}
-
-// TODO @gupta-ak. These might have to be changed in the future to be
-// continuity driver aware as well to support LCOW.
-
-// CopyResource performs an archive copy from the given source path to the
-// given destination path. The source path MUST exist and the destination
-// path's parent directory must exist.
-func CopyResource(srcPath, dstPath string, followLink bool) error {
- var (
- srcInfo CopyInfo
- err error
- )
-
- // Ensure in platform semantics
- srcPath = normalizePath(srcPath)
- dstPath = normalizePath(dstPath)
-
- // Clean the source and destination paths.
- srcPath = PreserveTrailingDotOrSeparator(filepath.Clean(srcPath), srcPath, os.PathSeparator)
- dstPath = PreserveTrailingDotOrSeparator(filepath.Clean(dstPath), dstPath, os.PathSeparator)
-
- if srcInfo, err = CopyInfoSourcePath(srcPath, followLink); err != nil {
- return err
- }
-
- content, err := TarResource(srcInfo)
- if err != nil {
- return err
- }
- defer content.Close()
-
- return CopyTo(content, srcInfo, dstPath)
-}
-
-// CopyTo handles extracting the given content whose
-// entries should be sourced from srcInfo to dstPath.
-func CopyTo(content io.Reader, srcInfo CopyInfo, dstPath string) error {
- // The destination path need not exist, but CopyInfoDestinationPath will
- // ensure that at least the parent directory exists.
- dstInfo, err := CopyInfoDestinationPath(normalizePath(dstPath))
- if err != nil {
- return err
- }
-
- dstDir, copyArchive, err := PrepareArchiveCopy(content, srcInfo, dstInfo)
- if err != nil {
- return err
- }
- defer copyArchive.Close()
-
- options := &TarOptions{
- NoLchown: true,
- NoOverwriteDirNonDir: true,
- }
-
- return Untar(copyArchive, dstDir, options)
-}
-
-// ResolveHostSourcePath decides real path need to be copied with parameters such as
-// whether to follow symbol link or not, if followLink is true, resolvedPath will return
-// link target of any symbol link file, else it will only resolve symlink of directory
-// but return symbol link file itself without resolving.
-func ResolveHostSourcePath(path string, followLink bool) (resolvedPath, rebaseName string, err error) {
- if followLink {
- resolvedPath, err = filepath.EvalSymlinks(path)
- if err != nil {
- return
- }
-
- resolvedPath, rebaseName = GetRebaseName(path, resolvedPath)
- } else {
- dirPath, basePath := filepath.Split(path)
-
- // if not follow symbol link, then resolve symbol link of parent dir
- var resolvedDirPath string
- resolvedDirPath, err = filepath.EvalSymlinks(dirPath)
- if err != nil {
- return
- }
- // resolvedDirPath will have been cleaned (no trailing path separators) so
- // we can manually join it with the base path element.
- resolvedPath = resolvedDirPath + string(filepath.Separator) + basePath
- if hasTrailingPathSeparator(path, os.PathSeparator) &&
- filepath.Base(path) != filepath.Base(resolvedPath) {
- rebaseName = filepath.Base(path)
- }
- }
- return resolvedPath, rebaseName, nil
-}
-
-// GetRebaseName normalizes and compares path and resolvedPath,
-// return completed resolved path and rebased file name
-func GetRebaseName(path, resolvedPath string) (string, string) {
- // linkTarget will have been cleaned (no trailing path separators and dot) so
- // we can manually join it with them
- var rebaseName string
- if specifiesCurrentDir(path) &&
- !specifiesCurrentDir(resolvedPath) {
- resolvedPath += string(filepath.Separator) + "."
- }
-
- if hasTrailingPathSeparator(path, os.PathSeparator) &&
- !hasTrailingPathSeparator(resolvedPath, os.PathSeparator) {
- resolvedPath += string(filepath.Separator)
- }
-
- if filepath.Base(path) != filepath.Base(resolvedPath) {
- // In the case where the path had a trailing separator and a symlink
- // evaluation has changed the last path component, we will need to
- // rebase the name in the archive that is being copied to match the
- // originally requested name.
- rebaseName = filepath.Base(path)
- }
- return resolvedPath, rebaseName
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/copy_unix.go b/vendor/github.com/docker/docker/pkg/archive/copy_unix.go
deleted file mode 100644
index e305b5e4a..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/copy_unix.go
+++ /dev/null
@@ -1,11 +0,0 @@
-// +build !windows
-
-package archive
-
-import (
- "path/filepath"
-)
-
-func normalizePath(path string) string {
- return filepath.ToSlash(path)
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/copy_windows.go b/vendor/github.com/docker/docker/pkg/archive/copy_windows.go
deleted file mode 100644
index 2b775b45c..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/copy_windows.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package archive
-
-import (
- "path/filepath"
-)
-
-func normalizePath(path string) string {
- return filepath.FromSlash(path)
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/diff.go b/vendor/github.com/docker/docker/pkg/archive/diff.go
deleted file mode 100644
index 019facd38..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/diff.go
+++ /dev/null
@@ -1,256 +0,0 @@
-package archive
-
-import (
- "archive/tar"
- "fmt"
- "io"
- "io/ioutil"
- "os"
- "path/filepath"
- "runtime"
- "strings"
-
- "github.com/docker/docker/pkg/idtools"
- "github.com/docker/docker/pkg/pools"
- "github.com/docker/docker/pkg/system"
- "github.com/sirupsen/logrus"
-)
-
-// UnpackLayer unpack `layer` to a `dest`. The stream `layer` can be
-// compressed or uncompressed.
-// Returns the size in bytes of the contents of the layer.
-func UnpackLayer(dest string, layer io.Reader, options *TarOptions) (size int64, err error) {
- tr := tar.NewReader(layer)
- trBuf := pools.BufioReader32KPool.Get(tr)
- defer pools.BufioReader32KPool.Put(trBuf)
-
- var dirs []*tar.Header
- unpackedPaths := make(map[string]struct{})
-
- if options == nil {
- options = &TarOptions{}
- }
- if options.ExcludePatterns == nil {
- options.ExcludePatterns = []string{}
- }
- idMappings := idtools.NewIDMappingsFromMaps(options.UIDMaps, options.GIDMaps)
-
- aufsTempdir := ""
- aufsHardlinks := make(map[string]*tar.Header)
-
- // Iterate through the files in the archive.
- for {
- hdr, err := tr.Next()
- if err == io.EOF {
- // end of tar archive
- break
- }
- if err != nil {
- return 0, err
- }
-
- size += hdr.Size
-
- // Normalize name, for safety and for a simple is-root check
- hdr.Name = filepath.Clean(hdr.Name)
-
- // Windows does not support filenames with colons in them. Ignore
- // these files. This is not a problem though (although it might
- // appear that it is). Let's suppose a client is running docker pull.
- // The daemon it points to is Windows. Would it make sense for the
- // client to be doing a docker pull Ubuntu for example (which has files
- // with colons in the name under /usr/share/man/man3)? No, absolutely
- // not as it would really only make sense that they were pulling a
- // Windows image. However, for development, it is necessary to be able
- // to pull Linux images which are in the repository.
- //
- // TODO Windows. Once the registry is aware of what images are Windows-
- // specific or Linux-specific, this warning should be changed to an error
- // to cater for the situation where someone does manage to upload a Linux
- // image but have it tagged as Windows inadvertently.
- if runtime.GOOS == "windows" {
- if strings.Contains(hdr.Name, ":") {
- logrus.Warnf("Windows: Ignoring %s (is this a Linux image?)", hdr.Name)
- continue
- }
- }
-
- // Note as these operations are platform specific, so must the slash be.
- if !strings.HasSuffix(hdr.Name, string(os.PathSeparator)) {
- // Not the root directory, ensure that the parent directory exists.
- // This happened in some tests where an image had a tarfile without any
- // parent directories.
- parent := filepath.Dir(hdr.Name)
- parentPath := filepath.Join(dest, parent)
-
- if _, err := os.Lstat(parentPath); err != nil && os.IsNotExist(err) {
- err = system.MkdirAll(parentPath, 0600, "")
- if err != nil {
- return 0, err
- }
- }
- }
-
- // Skip AUFS metadata dirs
- if strings.HasPrefix(hdr.Name, WhiteoutMetaPrefix) {
- // Regular files inside /.wh..wh.plnk can be used as hardlink targets
- // We don't want this directory, but we need the files in them so that
- // such hardlinks can be resolved.
- if strings.HasPrefix(hdr.Name, WhiteoutLinkDir) && hdr.Typeflag == tar.TypeReg {
- basename := filepath.Base(hdr.Name)
- aufsHardlinks[basename] = hdr
- if aufsTempdir == "" {
- if aufsTempdir, err = ioutil.TempDir("", "dockerplnk"); err != nil {
- return 0, err
- }
- defer os.RemoveAll(aufsTempdir)
- }
- if err := createTarFile(filepath.Join(aufsTempdir, basename), dest, hdr, tr, true, nil, options.InUserNS); err != nil {
- return 0, err
- }
- }
-
- if hdr.Name != WhiteoutOpaqueDir {
- continue
- }
- }
- path := filepath.Join(dest, hdr.Name)
- rel, err := filepath.Rel(dest, path)
- if err != nil {
- return 0, err
- }
-
- // Note as these operations are platform specific, so must the slash be.
- if strings.HasPrefix(rel, ".."+string(os.PathSeparator)) {
- return 0, breakoutError(fmt.Errorf("%q is outside of %q", hdr.Name, dest))
- }
- base := filepath.Base(path)
-
- if strings.HasPrefix(base, WhiteoutPrefix) {
- dir := filepath.Dir(path)
- if base == WhiteoutOpaqueDir {
- _, err := os.Lstat(dir)
- if err != nil {
- return 0, err
- }
- err = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
- if err != nil {
- if os.IsNotExist(err) {
- err = nil // parent was deleted
- }
- return err
- }
- if path == dir {
- return nil
- }
- if _, exists := unpackedPaths[path]; !exists {
- err := os.RemoveAll(path)
- return err
- }
- return nil
- })
- if err != nil {
- return 0, err
- }
- } else {
- originalBase := base[len(WhiteoutPrefix):]
- originalPath := filepath.Join(dir, originalBase)
- if err := os.RemoveAll(originalPath); err != nil {
- return 0, err
- }
- }
- } else {
- // If path exits we almost always just want to remove and replace it.
- // The only exception is when it is a directory *and* the file from
- // the layer is also a directory. Then we want to merge them (i.e.
- // just apply the metadata from the layer).
- if fi, err := os.Lstat(path); err == nil {
- if !(fi.IsDir() && hdr.Typeflag == tar.TypeDir) {
- if err := os.RemoveAll(path); err != nil {
- return 0, err
- }
- }
- }
-
- trBuf.Reset(tr)
- srcData := io.Reader(trBuf)
- srcHdr := hdr
-
- // Hard links into /.wh..wh.plnk don't work, as we don't extract that directory, so
- // we manually retarget these into the temporary files we extracted them into
- if hdr.Typeflag == tar.TypeLink && strings.HasPrefix(filepath.Clean(hdr.Linkname), WhiteoutLinkDir) {
- linkBasename := filepath.Base(hdr.Linkname)
- srcHdr = aufsHardlinks[linkBasename]
- if srcHdr == nil {
- return 0, fmt.Errorf("Invalid aufs hardlink")
- }
- tmpFile, err := os.Open(filepath.Join(aufsTempdir, linkBasename))
- if err != nil {
- return 0, err
- }
- defer tmpFile.Close()
- srcData = tmpFile
- }
-
- if err := remapIDs(idMappings, srcHdr); err != nil {
- return 0, err
- }
-
- if err := createTarFile(path, dest, srcHdr, srcData, true, nil, options.InUserNS); err != nil {
- return 0, err
- }
-
- // Directory mtimes must be handled at the end to avoid further
- // file creation in them to modify the directory mtime
- if hdr.Typeflag == tar.TypeDir {
- dirs = append(dirs, hdr)
- }
- unpackedPaths[path] = struct{}{}
- }
- }
-
- for _, hdr := range dirs {
- path := filepath.Join(dest, hdr.Name)
- if err := system.Chtimes(path, hdr.AccessTime, hdr.ModTime); err != nil {
- return 0, err
- }
- }
-
- return size, nil
-}
-
-// ApplyLayer parses a diff in the standard layer format from `layer`,
-// and applies it to the directory `dest`. The stream `layer` can be
-// compressed or uncompressed.
-// Returns the size in bytes of the contents of the layer.
-func ApplyLayer(dest string, layer io.Reader) (int64, error) {
- return applyLayerHandler(dest, layer, &TarOptions{}, true)
-}
-
-// ApplyUncompressedLayer parses a diff in the standard layer format from
-// `layer`, and applies it to the directory `dest`. The stream `layer`
-// can only be uncompressed.
-// Returns the size in bytes of the contents of the layer.
-func ApplyUncompressedLayer(dest string, layer io.Reader, options *TarOptions) (int64, error) {
- return applyLayerHandler(dest, layer, options, false)
-}
-
-// do the bulk load of ApplyLayer, but allow for not calling DecompressStream
-func applyLayerHandler(dest string, layer io.Reader, options *TarOptions, decompress bool) (int64, error) {
- dest = filepath.Clean(dest)
-
- // We need to be able to set any perms
- oldmask, err := system.Umask(0)
- if err != nil {
- return 0, err
- }
- defer system.Umask(oldmask) // ignore err, ErrNotSupportedPlatform
-
- if decompress {
- layer, err = DecompressStream(layer)
- if err != nil {
- return 0, err
- }
- }
- return UnpackLayer(dest, layer, options)
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/time_linux.go b/vendor/github.com/docker/docker/pkg/archive/time_linux.go
deleted file mode 100644
index 3448569b1..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/time_linux.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package archive
-
-import (
- "syscall"
- "time"
-)
-
-func timeToTimespec(time time.Time) (ts syscall.Timespec) {
- if time.IsZero() {
- // Return UTIME_OMIT special value
- ts.Sec = 0
- ts.Nsec = ((1 << 30) - 2)
- return
- }
- return syscall.NsecToTimespec(time.UnixNano())
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/time_unsupported.go b/vendor/github.com/docker/docker/pkg/archive/time_unsupported.go
deleted file mode 100644
index e85aac054..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/time_unsupported.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// +build !linux
-
-package archive
-
-import (
- "syscall"
- "time"
-)
-
-func timeToTimespec(time time.Time) (ts syscall.Timespec) {
- nsec := int64(0)
- if !time.IsZero() {
- nsec = time.UnixNano()
- }
- return syscall.NsecToTimespec(nsec)
-}
diff --git a/vendor/github.com/docker/docker/pkg/archive/wrap.go b/vendor/github.com/docker/docker/pkg/archive/wrap.go
deleted file mode 100644
index b39d12c87..000000000
--- a/vendor/github.com/docker/docker/pkg/archive/wrap.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package archive
-
-import (
- "archive/tar"
- "bytes"
- "io"
-)
-
-// Generate generates a new archive from the content provided
-// as input.
-//
-// `files` is a sequence of path/content pairs. A new file is
-// added to the archive for each pair.
-// If the last pair is incomplete, the file is created with an
-// empty content. For example:
-//
-// Generate("foo.txt", "hello world", "emptyfile")
-//
-// The above call will return an archive with 2 files:
-// * ./foo.txt with content "hello world"
-// * ./empty with empty content
-//
-// FIXME: stream content instead of buffering
-// FIXME: specify permissions and other archive metadata
-func Generate(input ...string) (io.Reader, error) {
- files := parseStringPairs(input...)
- buf := new(bytes.Buffer)
- tw := tar.NewWriter(buf)
- for _, file := range files {
- name, content := file[0], file[1]
- hdr := &tar.Header{
- Name: name,
- Size: int64(len(content)),
- }
- if err := tw.WriteHeader(hdr); err != nil {
- return nil, err
- }
- if _, err := tw.Write([]byte(content)); err != nil {
- return nil, err
- }
- }
- if err := tw.Close(); err != nil {
- return nil, err
- }
- return buf, nil
-}
-
-func parseStringPairs(input ...string) (output [][2]string) {
- output = make([][2]string, 0, len(input)/2+1)
- for i := 0; i < len(input); i += 2 {
- var pair [2]string
- pair[0] = input[i]
- if i+1 < len(input) {
- pair[1] = input[i+1]
- }
- output = append(output, pair)
- }
- return
-}
diff --git a/vendor/github.com/docker/go-connections/nat/nat.go b/vendor/github.com/docker/go-connections/nat/nat.go
index 4d5f5ae63..bb7e4e336 100644
--- a/vendor/github.com/docker/go-connections/nat/nat.go
+++ b/vendor/github.com/docker/go-connections/nat/nat.go
@@ -113,7 +113,7 @@ func SplitProtoPort(rawPort string) (string, string) {
}
func validateProto(proto string) bool {
- for _, availableProto := range []string{"tcp", "udp"} {
+ for _, availableProto := range []string{"tcp", "udp", "sctp"} {
if availableProto == proto {
return true
}
diff --git a/vendor/github.com/docker/go-connections/tlsconfig/certpool_other.go b/vendor/github.com/docker/go-connections/tlsconfig/certpool_other.go
index 9ca974539..1ff81c333 100644
--- a/vendor/github.com/docker/go-connections/tlsconfig/certpool_other.go
+++ b/vendor/github.com/docker/go-connections/tlsconfig/certpool_other.go
@@ -4,7 +4,6 @@ package tlsconfig
import (
"crypto/x509"
-
)
// SystemCertPool returns an new empty cert pool,
diff --git a/vendor/github.com/docker/go-connections/tlsconfig/config.go b/vendor/github.com/docker/go-connections/tlsconfig/config.go
index 1b31bbb8b..0ef3fdcb4 100644
--- a/vendor/github.com/docker/go-connections/tlsconfig/config.go
+++ b/vendor/github.com/docker/go-connections/tlsconfig/config.go
@@ -46,8 +46,6 @@ var acceptedCBCCiphers = []uint16{
tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
- tls.TLS_RSA_WITH_AES_256_CBC_SHA,
- tls.TLS_RSA_WITH_AES_128_CBC_SHA,
}
// DefaultServerAcceptedCiphers should be uses by code which already has a crypto/tls
@@ -65,22 +63,34 @@ var allTLSVersions = map[uint16]struct{}{
}
// ServerDefault returns a secure-enough TLS configuration for the server TLS configuration.
-func ServerDefault() *tls.Config {
- return &tls.Config{
- // Avoid fallback to SSL protocols < TLS1.0
- MinVersion: tls.VersionTLS10,
+func ServerDefault(ops ...func(*tls.Config)) *tls.Config {
+ tlsconfig := &tls.Config{
+ // Avoid fallback by default to SSL protocols < TLS1.2
+ MinVersion: tls.VersionTLS12,
PreferServerCipherSuites: true,
CipherSuites: DefaultServerAcceptedCiphers,
}
+
+ for _, op := range ops {
+ op(tlsconfig)
+ }
+
+ return tlsconfig
}
// ClientDefault returns a secure-enough TLS configuration for the client TLS configuration.
-func ClientDefault() *tls.Config {
- return &tls.Config{
+func ClientDefault(ops ...func(*tls.Config)) *tls.Config {
+ tlsconfig := &tls.Config{
// Prefer TLS1.2 as the client minimum
MinVersion: tls.VersionTLS12,
CipherSuites: clientCipherSuites,
}
+
+ for _, op := range ops {
+ op(tlsconfig)
+ }
+
+ return tlsconfig
}
// certPool returns an X.509 certificate pool from `caFile`, the certificate file.
diff --git a/vendor/github.com/docker/spdystream/connection.go b/vendor/github.com/docker/spdystream/connection.go
index df27d1dd1..2023ecf84 100644
--- a/vendor/github.com/docker/spdystream/connection.go
+++ b/vendor/github.com/docker/spdystream/connection.go
@@ -14,7 +14,7 @@ import (
var (
ErrInvalidStreamId = errors.New("Invalid stream id")
- ErrTimeout = errors.New("Timeout occured")
+ ErrTimeout = errors.New("Timeout occurred")
ErrReset = errors.New("Stream reset")
ErrWriteClosedStream = errors.New("Write on closed stream")
)
diff --git a/vendor/github.com/docker/spdystream/handlers.go b/vendor/github.com/docker/spdystream/handlers.go
index b59fa5fdc..d4ee7be81 100644
--- a/vendor/github.com/docker/spdystream/handlers.go
+++ b/vendor/github.com/docker/spdystream/handlers.go
@@ -30,9 +30,7 @@ func MirrorStreamHandler(stream *Stream) {
}()
}
-// NoopStreamHandler does nothing when stream connects, most
-// likely used with RejectAuthHandler which will not allow any
-// streams to make it to the stream handler.
+// NoopStreamHandler does nothing when stream connects.
func NoOpStreamHandler(stream *Stream) {
stream.SendReply(http.Header{}, false)
}
diff --git a/vendor/github.com/fsnotify/fsnotify/inotify.go b/vendor/github.com/fsnotify/fsnotify/inotify.go
index bfa9dbc3c..d9fd1b88a 100644
--- a/vendor/github.com/fsnotify/fsnotify/inotify.go
+++ b/vendor/github.com/fsnotify/fsnotify/inotify.go
@@ -24,7 +24,6 @@ type Watcher struct {
Events chan Event
Errors chan error
mu sync.Mutex // Map access
- cv *sync.Cond // sync removing on rm_watch with IN_IGNORE
fd int
poller *fdPoller
watches map[string]*watch // Map of inotify watches (key: path)
@@ -56,7 +55,6 @@ func NewWatcher() (*Watcher, error) {
done: make(chan struct{}),
doneResp: make(chan struct{}),
}
- w.cv = sync.NewCond(&w.mu)
go w.readEvents()
return w, nil
@@ -103,21 +101,23 @@ func (w *Watcher) Add(name string) error {
var flags uint32 = agnosticEvents
w.mu.Lock()
- watchEntry, found := w.watches[name]
- w.mu.Unlock()
- if found {
- watchEntry.flags |= flags
- flags |= unix.IN_MASK_ADD
+ defer w.mu.Unlock()
+ watchEntry := w.watches[name]
+ if watchEntry != nil {
+ flags |= watchEntry.flags | unix.IN_MASK_ADD
}
wd, errno := unix.InotifyAddWatch(w.fd, name, flags)
if wd == -1 {
return errno
}
- w.mu.Lock()
- w.watches[name] = &watch{wd: uint32(wd), flags: flags}
- w.paths[wd] = name
- w.mu.Unlock()
+ if watchEntry == nil {
+ w.watches[name] = &watch{wd: uint32(wd), flags: flags}
+ w.paths[wd] = name
+ } else {
+ watchEntry.wd = uint32(wd)
+ watchEntry.flags = flags
+ }
return nil
}
@@ -135,6 +135,13 @@ func (w *Watcher) Remove(name string) error {
if !ok {
return fmt.Errorf("can't remove non-existent inotify watch for: %s", name)
}
+
+ // We successfully removed the watch if InotifyRmWatch doesn't return an
+ // error, we need to clean up our internal state to ensure it matches
+ // inotify's kernel state.
+ delete(w.paths, int(watch.wd))
+ delete(w.watches, name)
+
// inotify_rm_watch will return EINVAL if the file has been deleted;
// the inotify will already have been removed.
// watches and pathes are deleted in ignoreLinux() implicitly and asynchronously
@@ -152,13 +159,6 @@ func (w *Watcher) Remove(name string) error {
return errno
}
- // wait until ignoreLinux() deleting maps
- exists := true
- for exists {
- w.cv.Wait()
- _, exists = w.watches[name]
- }
-
return nil
}
@@ -259,8 +259,17 @@ func (w *Watcher) readEvents() {
// the "Name" field with a valid filename. We retrieve the path of the watch from
// the "paths" map.
w.mu.Lock()
- name := w.paths[int(raw.Wd)]
+ name, ok := w.paths[int(raw.Wd)]
+ // IN_DELETE_SELF occurs when the file/directory being watched is removed.
+ // This is a sign to clean up the maps, otherwise we are no longer in sync
+ // with the inotify kernel state which has already deleted the watch
+ // automatically.
+ if ok && mask&unix.IN_DELETE_SELF == unix.IN_DELETE_SELF {
+ delete(w.paths, int(raw.Wd))
+ delete(w.watches, name)
+ }
w.mu.Unlock()
+
if nameLen > 0 {
// Point "bytes" at the first byte of the filename
bytes := (*[unix.PathMax]byte)(unsafe.Pointer(&buf[offset+unix.SizeofInotifyEvent]))
@@ -271,7 +280,7 @@ func (w *Watcher) readEvents() {
event := newEvent(name, mask)
// Send the events that are not ignored on the events channel
- if !event.ignoreLinux(w, raw.Wd, mask) {
+ if !event.ignoreLinux(mask) {
select {
case w.Events <- event:
case <-w.done:
@@ -288,15 +297,9 @@ func (w *Watcher) readEvents() {
// Certain types of events can be "ignored" and not sent over the Events
// channel. Such as events marked ignore by the kernel, or MODIFY events
// against files that do not exist.
-func (e *Event) ignoreLinux(w *Watcher, wd int32, mask uint32) bool {
+func (e *Event) ignoreLinux(mask uint32) bool {
// Ignore anything the inotify API says to ignore
if mask&unix.IN_IGNORED == unix.IN_IGNORED {
- w.mu.Lock()
- defer w.mu.Unlock()
- name := w.paths[int(wd)]
- delete(w.paths, int(wd))
- delete(w.watches, name)
- w.cv.Broadcast()
return true
}
diff --git a/vendor/github.com/fsnotify/fsnotify/kqueue.go b/vendor/github.com/fsnotify/fsnotify/kqueue.go
index c2b4acb18..86e76a3d6 100644
--- a/vendor/github.com/fsnotify/fsnotify/kqueue.go
+++ b/vendor/github.com/fsnotify/fsnotify/kqueue.go
@@ -22,7 +22,7 @@ import (
type Watcher struct {
Events chan Event
Errors chan error
- done chan bool // Channel for sending a "quit message" to the reader goroutine
+ done chan struct{} // Channel for sending a "quit message" to the reader goroutine
kq int // File descriptor (as returned by the kqueue() syscall).
@@ -56,7 +56,7 @@ func NewWatcher() (*Watcher, error) {
externalWatches: make(map[string]bool),
Events: make(chan Event),
Errors: make(chan error),
- done: make(chan bool),
+ done: make(chan struct{}),
}
go w.readEvents()
@@ -71,10 +71,8 @@ func (w *Watcher) Close() error {
return nil
}
w.isClosed = true
- w.mu.Unlock()
// copy paths to remove while locked
- w.mu.Lock()
var pathsToRemove = make([]string, 0, len(w.watches))
for name := range w.watches {
pathsToRemove = append(pathsToRemove, name)
@@ -82,15 +80,12 @@ func (w *Watcher) Close() error {
w.mu.Unlock()
// unlock before calling Remove, which also locks
- var err error
for _, name := range pathsToRemove {
- if e := w.Remove(name); e != nil && err == nil {
- err = e
- }
+ w.Remove(name)
}
- // Send "quit" message to the reader goroutine:
- w.done <- true
+ // send a "quit" message to the reader goroutine
+ close(w.done)
return nil
}
@@ -266,17 +261,12 @@ func (w *Watcher) addWatch(name string, flags uint32) (string, error) {
func (w *Watcher) readEvents() {
eventBuffer := make([]unix.Kevent_t, 10)
+loop:
for {
// See if there is a message on the "done" channel
select {
case <-w.done:
- err := unix.Close(w.kq)
- if err != nil {
- w.Errors <- err
- }
- close(w.Events)
- close(w.Errors)
- return
+ break loop
default:
}
@@ -284,7 +274,11 @@ func (w *Watcher) readEvents() {
kevents, err := read(w.kq, eventBuffer, &keventWaitTime)
// EINTR is okay, the syscall was interrupted before timeout expired.
if err != nil && err != unix.EINTR {
- w.Errors <- err
+ select {
+ case w.Errors <- err:
+ case <-w.done:
+ break loop
+ }
continue
}
@@ -319,8 +313,12 @@ func (w *Watcher) readEvents() {
if path.isDir && event.Op&Write == Write && !(event.Op&Remove == Remove) {
w.sendDirectoryChangeEvents(event.Name)
} else {
- // Send the event on the Events channel
- w.Events <- event
+ // Send the event on the Events channel.
+ select {
+ case w.Events <- event:
+ case <-w.done:
+ break loop
+ }
}
if event.Op&Remove == Remove {
@@ -352,6 +350,18 @@ func (w *Watcher) readEvents() {
kevents = kevents[1:]
}
}
+
+ // cleanup
+ err := unix.Close(w.kq)
+ if err != nil {
+ // only way the previous loop breaks is if w.done was closed so we need to async send to w.Errors.
+ select {
+ case w.Errors <- err:
+ default:
+ }
+ }
+ close(w.Events)
+ close(w.Errors)
}
// newEvent returns an platform-independent Event based on kqueue Fflags.
@@ -407,7 +417,11 @@ func (w *Watcher) sendDirectoryChangeEvents(dirPath string) {
// Get all files
files, err := ioutil.ReadDir(dirPath)
if err != nil {
- w.Errors <- err
+ select {
+ case w.Errors <- err:
+ case <-w.done:
+ return
+ }
}
// Search for new files
@@ -428,7 +442,11 @@ func (w *Watcher) sendFileCreatedEventIfNew(filePath string, fileInfo os.FileInf
w.mu.Unlock()
if !doesExist {
// Send create event
- w.Events <- newCreateEvent(filePath)
+ select {
+ case w.Events <- newCreateEvent(filePath):
+ case <-w.done:
+ return
+ }
}
// like watchDirectoryFiles (but without doing another ReadDir)
diff --git a/vendor/github.com/fsouza/go-dockerclient/LICENSE b/vendor/github.com/fsouza/go-dockerclient/LICENSE
index f3ce3a9aa..fc7e73f8f 100644
--- a/vendor/github.com/fsouza/go-dockerclient/LICENSE
+++ b/vendor/github.com/fsouza/go-dockerclient/LICENSE
@@ -4,15 +4,16 @@ 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.
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
-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
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY 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 HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
diff --git a/vendor/github.com/fsouza/go-dockerclient/auth.go b/vendor/github.com/fsouza/go-dockerclient/auth.go
index c58de8671..acb3a02be 100644
--- a/vendor/github.com/fsouza/go-dockerclient/auth.go
+++ b/vendor/github.com/fsouza/go-dockerclient/auth.go
@@ -27,6 +27,11 @@ type AuthConfiguration struct {
Password string `json:"password,omitempty"`
Email string `json:"email,omitempty"`
ServerAddress string `json:"serveraddress,omitempty"`
+
+ // IdentityToken can be supplied with the identitytoken response of the AuthCheck call
+ // see https://godoc.org/github.com/docker/docker/api/types#AuthConfig
+ // It can be used in place of password not in conjunction with it
+ IdentityToken string `json:"identitytoken,omitempty"`
}
// AuthConfigurations represents authentication options to use for the
@@ -42,8 +47,9 @@ type AuthConfigurations119 map[string]AuthConfiguration
// dockerConfig represents a registry authentation configuration from the
// .dockercfg file.
type dockerConfig struct {
- Auth string `json:"auth"`
- Email string `json:"email"`
+ Auth string `json:"auth"`
+ Email string `json:"email"`
+ IdentityToken string `json:"identitytoken"`
}
// NewAuthConfigurationsFromFile returns AuthConfigurations from a path containing JSON
@@ -128,6 +134,7 @@ func authConfigs(confs map[string]dockerConfig) (*AuthConfigurations, error) {
c := &AuthConfigurations{
Configs: make(map[string]AuthConfiguration),
}
+
for reg, conf := range confs {
if conf.Auth == "" {
continue
@@ -136,17 +143,28 @@ func authConfigs(confs map[string]dockerConfig) (*AuthConfigurations, error) {
if err != nil {
return nil, err
}
+
userpass := strings.SplitN(string(data), ":", 2)
if len(userpass) != 2 {
return nil, ErrCannotParseDockercfg
}
- c.Configs[reg] = AuthConfiguration{
+
+ authConfig := AuthConfiguration{
Email: conf.Email,
Username: userpass[0],
Password: userpass[1],
ServerAddress: reg,
}
+
+ // if identitytoken provided then zero the password and set it
+ if conf.IdentityToken != "" {
+ authConfig.Password = ""
+ authConfig.IdentityToken = conf.IdentityToken
+ }
+
+ c.Configs[reg] = authConfig
}
+
return c, nil
}
diff --git a/vendor/github.com/fsouza/go-dockerclient/client.go b/vendor/github.com/fsouza/go-dockerclient/client.go
index 6b754f271..581e31417 100644
--- a/vendor/github.com/fsouza/go-dockerclient/client.go
+++ b/vendor/github.com/fsouza/go-dockerclient/client.go
@@ -33,8 +33,8 @@ import (
"github.com/docker/docker/opts"
"github.com/docker/docker/pkg/homedir"
- "github.com/docker/docker/pkg/jsonmessage"
"github.com/docker/docker/pkg/stdcopy"
+ "github.com/fsouza/go-dockerclient/internal/jsonmessage"
)
const (
@@ -58,6 +58,7 @@ var (
apiVersion119, _ = NewAPIVersion("1.19")
apiVersion124, _ = NewAPIVersion("1.24")
apiVersion125, _ = NewAPIVersion("1.25")
+ apiVersion135, _ = NewAPIVersion("1.35")
)
// APIVersion is an internal representation of a version of the Remote API.
diff --git a/vendor/github.com/fsouza/go-dockerclient/container.go b/vendor/github.com/fsouza/go-dockerclient/container.go
index e24c9fb2e..b48bc2cf6 100644
--- a/vendor/github.com/fsouza/go-dockerclient/container.go
+++ b/vendor/github.com/fsouza/go-dockerclient/container.go
@@ -788,6 +788,7 @@ type HostConfig struct {
IOMaximumIOps int64 `json:"IOMaximumIOps,omitempty" yaml:"IOMaximumIOps,omitempty"`
Mounts []HostMount `json:"Mounts,omitempty" yaml:"Mounts,omitempty" toml:"Mounts,omitempty"`
Init bool `json:",omitempty" yaml:",omitempty"`
+ Runtime string `json:"Runtime,omitempty" yaml:"Runtime,omitempty" toml:"Runtime,omitempty"`
}
// NetworkingConfig represents the container's networking configuration for each of its interfaces
diff --git a/vendor/github.com/fsouza/go-dockerclient/env.go b/vendor/github.com/fsouza/go-dockerclient/env.go
index 13fedfb17..0f2e72f11 100644
--- a/vendor/github.com/fsouza/go-dockerclient/env.go
+++ b/vendor/github.com/fsouza/go-dockerclient/env.go
@@ -156,7 +156,7 @@ func (env *Env) SetAuto(key string, value interface{}) {
// Map returns the map representation of the env.
func (env *Env) Map() map[string]string {
- if len(*env) == 0 {
+ if env == nil || len(*env) == 0 {
return nil
}
m := make(map[string]string)
diff --git a/vendor/github.com/fsouza/go-dockerclient/exec.go b/vendor/github.com/fsouza/go-dockerclient/exec.go
index 3b875fa3c..5e7ea87f6 100644
--- a/vendor/github.com/fsouza/go-dockerclient/exec.go
+++ b/vendor/github.com/fsouza/go-dockerclient/exec.go
@@ -33,6 +33,7 @@ type CreateExecOptions struct {
Cmd []string `json:"Cmd,omitempty" yaml:"Cmd,omitempty" toml:"Cmd,omitempty"`
Container string `json:"Container,omitempty" yaml:"Container,omitempty" toml:"Container,omitempty"`
User string `json:"User,omitempty" yaml:"User,omitempty" toml:"User,omitempty"`
+ WorkingDir string `json:"WorkingDir,omitempty" yaml:"WorkingDir,omitempty" toml:"WorkingDir,omitempty"`
Context context.Context `json:"-"`
Privileged bool `json:"Privileged,omitempty" yaml:"Privileged,omitempty" toml:"Privileged,omitempty"`
}
@@ -45,6 +46,9 @@ func (c *Client) CreateExec(opts CreateExecOptions) (*Exec, error) {
if len(opts.Env) > 0 && c.serverAPIVersion.LessThan(apiVersion125) {
return nil, errors.New("exec configuration Env is only supported in API#1.25 and above")
}
+ if len(opts.WorkingDir) > 0 && c.serverAPIVersion.LessThan(apiVersion135) {
+ return nil, errors.New("exec configuration WorkingDir is only supported in API#1.35 and above")
+ }
path := fmt.Sprintf("/containers/%s/exec", opts.Container)
resp, err := c.do("POST", path, doOptions{data: opts, context: opts.Context})
if err != nil {
diff --git a/vendor/github.com/fsouza/go-dockerclient/internal/archive/archive.go b/vendor/github.com/fsouza/go-dockerclient/internal/archive/archive.go
new file mode 100644
index 000000000..a13ee7cca
--- /dev/null
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/archive/archive.go
@@ -0,0 +1,505 @@
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
+
+package archive
+
+import (
+ "archive/tar"
+ "bufio"
+ "compress/gzip"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "github.com/docker/docker/pkg/fileutils"
+ "github.com/docker/docker/pkg/idtools"
+ "github.com/docker/docker/pkg/pools"
+ "github.com/docker/docker/pkg/system"
+ "github.com/sirupsen/logrus"
+)
+
+const (
+ // Uncompressed represents the uncompressed.
+ Uncompressed Compression = iota
+ // Bzip2 is bzip2 compression algorithm.
+ Bzip2
+ // Gzip is gzip compression algorithm.
+ Gzip
+ // Xz is xz compression algorithm.
+ Xz
+)
+
+const (
+ modeISDIR = 040000 // Directory
+ modeISFIFO = 010000 // FIFO
+ modeISREG = 0100000 // Regular file
+ modeISLNK = 0120000 // Symbolic link
+ modeISBLK = 060000 // Block special file
+ modeISCHR = 020000 // Character special file
+ modeISSOCK = 0140000 // Socket
+)
+
+// Compression is the state represents if compressed or not.
+type Compression int
+
+// Extension returns the extension of a file that uses the specified compression algorithm.
+func (compression *Compression) Extension() string {
+ switch *compression {
+ case Uncompressed:
+ return "tar"
+ case Bzip2:
+ return "tar.bz2"
+ case Gzip:
+ return "tar.gz"
+ case Xz:
+ return "tar.xz"
+ }
+ return ""
+}
+
+// WhiteoutFormat is the format of whiteouts unpacked
+type WhiteoutFormat int
+
+// TarOptions wraps the tar options.
+type TarOptions struct {
+ IncludeFiles []string
+ ExcludePatterns []string
+ Compression Compression
+ NoLchown bool
+ UIDMaps []idtools.IDMap
+ GIDMaps []idtools.IDMap
+ ChownOpts *idtools.IDPair
+ IncludeSourceDir bool
+ // WhiteoutFormat is the expected on disk format for whiteout files.
+ // This format will be converted to the standard format on pack
+ // and from the standard format on unpack.
+ WhiteoutFormat WhiteoutFormat
+ // When unpacking, specifies whether overwriting a directory with a
+ // non-directory is allowed and vice versa.
+ NoOverwriteDirNonDir bool
+ // For each include when creating an archive, the included name will be
+ // replaced with the matching name from this map.
+ RebaseNames map[string]string
+ InUserNS bool
+}
+
+// TarWithOptions creates an archive from the directory at `path`, only including files whose relative
+// paths are included in `options.IncludeFiles` (if non-nil) or not in `options.ExcludePatterns`.
+func TarWithOptions(srcPath string, options *TarOptions) (io.ReadCloser, error) {
+
+ // Fix the source path to work with long path names. This is a no-op
+ // on platforms other than Windows.
+ srcPath = fixVolumePathPrefix(srcPath)
+
+ pm, err := fileutils.NewPatternMatcher(options.ExcludePatterns)
+ if err != nil {
+ return nil, err
+ }
+
+ pipeReader, pipeWriter := io.Pipe()
+
+ compressWriter, err := CompressStream(pipeWriter, options.Compression)
+ if err != nil {
+ return nil, err
+ }
+
+ go func() {
+ ta := newTarAppender(
+ idtools.NewIDMappingsFromMaps(options.UIDMaps, options.GIDMaps),
+ compressWriter,
+ options.ChownOpts,
+ )
+ ta.WhiteoutConverter = getWhiteoutConverter(options.WhiteoutFormat)
+
+ defer func() {
+ // Make sure to check the error on Close.
+ if err := ta.TarWriter.Close(); err != nil {
+ logrus.Errorf("Can't close tar writer: %s", err)
+ }
+ if err := compressWriter.Close(); err != nil {
+ logrus.Errorf("Can't close compress writer: %s", err)
+ }
+ if err := pipeWriter.Close(); err != nil {
+ logrus.Errorf("Can't close pipe writer: %s", err)
+ }
+ }()
+
+ // this buffer is needed for the duration of this piped stream
+ defer pools.BufioWriter32KPool.Put(ta.Buffer)
+
+ // In general we log errors here but ignore them because
+ // during e.g. a diff operation the container can continue
+ // mutating the filesystem and we can see transient errors
+ // from this
+
+ stat, err := os.Lstat(srcPath)
+ if err != nil {
+ return
+ }
+
+ if !stat.IsDir() {
+ // We can't later join a non-dir with any includes because the
+ // 'walk' will error if "file/." is stat-ed and "file" is not a
+ // directory. So, we must split the source path and use the
+ // basename as the include.
+ if len(options.IncludeFiles) > 0 {
+ logrus.Warn("Tar: Can't archive a file with includes")
+ }
+
+ dir, base := SplitPathDirEntry(srcPath)
+ srcPath = dir
+ options.IncludeFiles = []string{base}
+ }
+
+ if len(options.IncludeFiles) == 0 {
+ options.IncludeFiles = []string{"."}
+ }
+
+ seen := make(map[string]bool)
+
+ for _, include := range options.IncludeFiles {
+ rebaseName := options.RebaseNames[include]
+
+ walkRoot := getWalkRoot(srcPath, include)
+ filepath.Walk(walkRoot, func(filePath string, f os.FileInfo, err error) error {
+ if err != nil {
+ logrus.Errorf("Tar: Can't stat file %s to tar: %s", srcPath, err)
+ return nil
+ }
+
+ relFilePath, err := filepath.Rel(srcPath, filePath)
+ if err != nil || (!options.IncludeSourceDir && relFilePath == "." && f.IsDir()) {
+ // Error getting relative path OR we are looking
+ // at the source directory path. Skip in both situations.
+ return nil
+ }
+
+ if options.IncludeSourceDir && include == "." && relFilePath != "." {
+ relFilePath = strings.Join([]string{".", relFilePath}, string(filepath.Separator))
+ }
+
+ skip := false
+
+ // If "include" is an exact match for the current file
+ // then even if there's an "excludePatterns" pattern that
+ // matches it, don't skip it. IOW, assume an explicit 'include'
+ // is asking for that file no matter what - which is true
+ // for some files, like .dockerignore and Dockerfile (sometimes)
+ if include != relFilePath {
+ skip, err = pm.Matches(relFilePath)
+ if err != nil {
+ logrus.Errorf("Error matching %s: %v", relFilePath, err)
+ return err
+ }
+ }
+
+ if skip {
+ // If we want to skip this file and its a directory
+ // then we should first check to see if there's an
+ // excludes pattern (e.g. !dir/file) that starts with this
+ // dir. If so then we can't skip this dir.
+
+ // Its not a dir then so we can just return/skip.
+ if !f.IsDir() {
+ return nil
+ }
+
+ // No exceptions (!...) in patterns so just skip dir
+ if !pm.Exclusions() {
+ return filepath.SkipDir
+ }
+
+ dirSlash := relFilePath + string(filepath.Separator)
+
+ for _, pat := range pm.Patterns() {
+ if !pat.Exclusion() {
+ continue
+ }
+ if strings.HasPrefix(pat.String()+string(filepath.Separator), dirSlash) {
+ // found a match - so can't skip this dir
+ return nil
+ }
+ }
+
+ // No matching exclusion dir so just skip dir
+ return filepath.SkipDir
+ }
+
+ if seen[relFilePath] {
+ return nil
+ }
+ seen[relFilePath] = true
+
+ // Rename the base resource.
+ if rebaseName != "" {
+ var replacement string
+ if rebaseName != string(filepath.Separator) {
+ // Special case the root directory to replace with an
+ // empty string instead so that we don't end up with
+ // double slashes in the paths.
+ replacement = rebaseName
+ }
+
+ relFilePath = strings.Replace(relFilePath, include, replacement, 1)
+ }
+
+ if err := ta.addTarFile(filePath, relFilePath); err != nil {
+ logrus.Errorf("Can't add file %s to tar: %s", filePath, err)
+ // if pipe is broken, stop writing tar stream to it
+ if err == io.ErrClosedPipe {
+ return err
+ }
+ }
+ return nil
+ })
+ }
+ }()
+
+ return pipeReader, nil
+}
+
+// CompressStream compresses the dest with specified compression algorithm.
+func CompressStream(dest io.Writer, compression Compression) (io.WriteCloser, error) {
+ p := pools.BufioWriter32KPool
+ buf := p.Get(dest)
+ switch compression {
+ case Uncompressed:
+ writeBufWrapper := p.NewWriteCloserWrapper(buf, buf)
+ return writeBufWrapper, nil
+ case Gzip:
+ gzWriter := gzip.NewWriter(dest)
+ writeBufWrapper := p.NewWriteCloserWrapper(buf, gzWriter)
+ return writeBufWrapper, nil
+ case Bzip2, Xz:
+ // archive/bzip2 does not support writing, and there is no xz support at all
+ // However, this is not a problem as docker only currently generates gzipped tars
+ return nil, fmt.Errorf("Unsupported compression format %s", (&compression).Extension())
+ default:
+ return nil, fmt.Errorf("Unsupported compression format %s", (&compression).Extension())
+ }
+}
+
+type tarWhiteoutConverter interface {
+ ConvertWrite(*tar.Header, string, os.FileInfo) (*tar.Header, error)
+ ConvertRead(*tar.Header, string) (bool, error)
+}
+
+type tarAppender struct {
+ TarWriter *tar.Writer
+ Buffer *bufio.Writer
+
+ // for hardlink mapping
+ SeenFiles map[uint64]string
+ IDMappings *idtools.IDMappings
+ ChownOpts *idtools.IDPair
+
+ // For packing and unpacking whiteout files in the
+ // non standard format. The whiteout files defined
+ // by the AUFS standard are used as the tar whiteout
+ // standard.
+ WhiteoutConverter tarWhiteoutConverter
+}
+
+func newTarAppender(idMapping *idtools.IDMappings, writer io.Writer, chownOpts *idtools.IDPair) *tarAppender {
+ return &tarAppender{
+ SeenFiles: make(map[uint64]string),
+ TarWriter: tar.NewWriter(writer),
+ Buffer: pools.BufioWriter32KPool.Get(nil),
+ IDMappings: idMapping,
+ ChownOpts: chownOpts,
+ }
+}
+
+// addTarFile adds to the tar archive a file from `path` as `name`
+func (ta *tarAppender) addTarFile(path, name string) error {
+ fi, err := os.Lstat(path)
+ if err != nil {
+ return err
+ }
+
+ var link string
+ if fi.Mode()&os.ModeSymlink != 0 {
+ var err error
+ link, err = os.Readlink(path)
+ if err != nil {
+ return err
+ }
+ }
+
+ hdr, err := FileInfoHeader(name, fi, link)
+ if err != nil {
+ return err
+ }
+ if err := ReadSecurityXattrToTarHeader(path, hdr); err != nil {
+ return err
+ }
+
+ // if it's not a directory and has more than 1 link,
+ // it's hard linked, so set the type flag accordingly
+ if !fi.IsDir() && hasHardlinks(fi) {
+ inode, err := getInodeFromStat(fi.Sys())
+ if err != nil {
+ return err
+ }
+ // a link should have a name that it links too
+ // and that linked name should be first in the tar archive
+ if oldpath, ok := ta.SeenFiles[inode]; ok {
+ hdr.Typeflag = tar.TypeLink
+ hdr.Linkname = oldpath
+ hdr.Size = 0 // This Must be here for the writer math to add up!
+ } else {
+ ta.SeenFiles[inode] = name
+ }
+ }
+
+ //check whether the file is overlayfs whiteout
+ //if yes, skip re-mapping container ID mappings.
+ isOverlayWhiteout := fi.Mode()&os.ModeCharDevice != 0 && hdr.Devmajor == 0 && hdr.Devminor == 0
+
+ //handle re-mapping container ID mappings back to host ID mappings before
+ //writing tar headers/files. We skip whiteout files because they were written
+ //by the kernel and already have proper ownership relative to the host
+ if !isOverlayWhiteout &&
+ !strings.HasPrefix(filepath.Base(hdr.Name), WhiteoutPrefix) &&
+ !ta.IDMappings.Empty() {
+ fileIDPair, err := getFileUIDGID(fi.Sys())
+ if err != nil {
+ return err
+ }
+ hdr.Uid, hdr.Gid, err = ta.IDMappings.ToContainer(fileIDPair)
+ if err != nil {
+ return err
+ }
+ }
+
+ // explicitly override with ChownOpts
+ if ta.ChownOpts != nil {
+ hdr.Uid = ta.ChownOpts.UID
+ hdr.Gid = ta.ChownOpts.GID
+ }
+
+ if ta.WhiteoutConverter != nil {
+ wo, err := ta.WhiteoutConverter.ConvertWrite(hdr, path, fi)
+ if err != nil {
+ return err
+ }
+
+ // If a new whiteout file exists, write original hdr, then
+ // replace hdr with wo to be written after. Whiteouts should
+ // always be written after the original. Note the original
+ // hdr may have been updated to be a whiteout with returning
+ // a whiteout header
+ if wo != nil {
+ if err := ta.TarWriter.WriteHeader(hdr); err != nil {
+ return err
+ }
+ if hdr.Typeflag == tar.TypeReg && hdr.Size > 0 {
+ return fmt.Errorf("tar: cannot use whiteout for non-empty file")
+ }
+ hdr = wo
+ }
+ }
+
+ if err := ta.TarWriter.WriteHeader(hdr); err != nil {
+ return err
+ }
+
+ if hdr.Typeflag == tar.TypeReg && hdr.Size > 0 {
+ // We use system.OpenSequential to ensure we use sequential file
+ // access on Windows to avoid depleting the standby list.
+ // On Linux, this equates to a regular os.Open.
+ file, err := system.OpenSequential(path)
+ if err != nil {
+ return err
+ }
+
+ ta.Buffer.Reset(ta.TarWriter)
+ defer ta.Buffer.Reset(nil)
+ _, err = io.Copy(ta.Buffer, file)
+ file.Close()
+ if err != nil {
+ return err
+ }
+ err = ta.Buffer.Flush()
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+// ReadSecurityXattrToTarHeader reads security.capability xattr from filesystem
+// to a tar header
+func ReadSecurityXattrToTarHeader(path string, hdr *tar.Header) error {
+ capability, _ := system.Lgetxattr(path, "security.capability")
+ if capability != nil {
+ hdr.Xattrs = make(map[string]string)
+ hdr.Xattrs["security.capability"] = string(capability)
+ }
+ return nil
+}
+
+// FileInfoHeader creates a populated Header from fi.
+// Compared to archive pkg this function fills in more information.
+// Also, regardless of Go version, this function fills file type bits (e.g. hdr.Mode |= modeISDIR),
+// which have been deleted since Go 1.9 archive/tar.
+func FileInfoHeader(name string, fi os.FileInfo, link string) (*tar.Header, error) {
+ hdr, err := tar.FileInfoHeader(fi, link)
+ if err != nil {
+ return nil, err
+ }
+ hdr.Mode = fillGo18FileTypeBits(int64(chmodTarEntry(os.FileMode(hdr.Mode))), fi)
+ name, err = canonicalTarName(name, fi.IsDir())
+ if err != nil {
+ return nil, fmt.Errorf("tar: cannot canonicalize path: %v", err)
+ }
+ hdr.Name = name
+ if err := setHeaderForSpecialDevice(hdr, name, fi.Sys()); err != nil {
+ return nil, err
+ }
+ return hdr, nil
+}
+
+// fillGo18FileTypeBits fills type bits which have been removed on Go 1.9 archive/tar
+// https://github.com/golang/go/commit/66b5a2f
+func fillGo18FileTypeBits(mode int64, fi os.FileInfo) int64 {
+ fm := fi.Mode()
+ switch {
+ case fm.IsRegular():
+ mode |= modeISREG
+ case fi.IsDir():
+ mode |= modeISDIR
+ case fm&os.ModeSymlink != 0:
+ mode |= modeISLNK
+ case fm&os.ModeDevice != 0:
+ if fm&os.ModeCharDevice != 0 {
+ mode |= modeISCHR
+ } else {
+ mode |= modeISBLK
+ }
+ case fm&os.ModeNamedPipe != 0:
+ mode |= modeISFIFO
+ case fm&os.ModeSocket != 0:
+ mode |= modeISSOCK
+ }
+ return mode
+}
+
+// canonicalTarName provides a platform-independent and consistent posix-style
+//path for files and directories to be archived regardless of the platform.
+func canonicalTarName(name string, isDir bool) (string, error) {
+ name, err := CanonicalTarNameForPath(name)
+ if err != nil {
+ return "", err
+ }
+
+ // suffix with '/' for directories
+ if isDir && !strings.HasSuffix(name, "/") {
+ name += "/"
+ }
+ return name, nil
+}
diff --git a/vendor/github.com/docker/docker/pkg/archive/archive_linux.go b/vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_linux.go
index 6e950e93c..9e1f3f2f1 100644
--- a/vendor/github.com/docker/docker/pkg/archive/archive_linux.go
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_linux.go
@@ -1,3 +1,7 @@
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
+
package archive
import (
@@ -10,6 +14,14 @@ import (
"golang.org/x/sys/unix"
)
+const (
+ // AUFSWhiteoutFormat is the default format for whiteouts
+ AUFSWhiteoutFormat WhiteoutFormat = iota
+ // OverlayWhiteoutFormat formats whiteout according to the overlay
+ // standard.
+ OverlayWhiteoutFormat
+)
+
func getWhiteoutConverter(format WhiteoutFormat) tarWhiteoutConverter {
if format == OverlayWhiteoutFormat {
return overlayWhiteoutConverter{}
diff --git a/vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_other.go b/vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_other.go
new file mode 100644
index 000000000..72822c857
--- /dev/null
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_other.go
@@ -0,0 +1,11 @@
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
+
+// +build !linux
+
+package archive
+
+func getWhiteoutConverter(format WhiteoutFormat) tarWhiteoutConverter {
+ return nil
+}
diff --git a/vendor/github.com/docker/docker/pkg/archive/archive_unix.go b/vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_unix.go
index 02e95adff..2633f5020 100644
--- a/vendor/github.com/docker/docker/pkg/archive/archive_unix.go
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_unix.go
@@ -1,3 +1,7 @@
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
+
// +build !windows
package archive
@@ -10,11 +14,16 @@ import (
"syscall"
"github.com/docker/docker/pkg/idtools"
- "github.com/docker/docker/pkg/system"
- rsystem "github.com/opencontainers/runc/libcontainer/system"
"golang.org/x/sys/unix"
)
+// CanonicalTarNameForPath returns platform-specific filepath
+// to canonical posix-style path for tar archival. p is relative
+// path.
+func CanonicalTarNameForPath(p string) (string, error) {
+ return p, nil // already unix-style
+}
+
// fixVolumePathPrefix does platform specific processing to ensure that if
// the path being passed in is not in a volume path format, convert it to one.
func fixVolumePathPrefix(srcPath string) string {
@@ -29,40 +38,11 @@ func getWalkRoot(srcPath string, include string) string {
return srcPath + string(filepath.Separator) + include
}
-// CanonicalTarNameForPath returns platform-specific filepath
-// to canonical posix-style path for tar archival. p is relative
-// path.
-func CanonicalTarNameForPath(p string) (string, error) {
- return p, nil // already unix-style
-}
-
-// chmodTarEntry is used to adjust the file permissions used in tar header based
-// on the platform the archival is done.
-
-func chmodTarEntry(perm os.FileMode) os.FileMode {
- return perm // noop for unix as golang APIs provide perm bits correctly
-}
-
-func setHeaderForSpecialDevice(hdr *tar.Header, name string, stat interface{}) (err error) {
- s, ok := stat.(*syscall.Stat_t)
-
- if ok {
- // Currently go does not fill in the major/minors
- if s.Mode&unix.S_IFBLK != 0 ||
- s.Mode&unix.S_IFCHR != 0 {
- hdr.Devmajor = int64(unix.Major(uint64(s.Rdev))) // nolint: unconvert
- hdr.Devminor = int64(unix.Minor(uint64(s.Rdev))) // nolint: unconvert
- }
- }
-
- return
-}
-
func getInodeFromStat(stat interface{}) (inode uint64, err error) {
s, ok := stat.(*syscall.Stat_t)
if ok {
- inode = s.Ino
+ inode = uint64(s.Ino)
}
return
@@ -77,38 +57,21 @@ func getFileUIDGID(stat interface{}) (idtools.IDPair, error) {
return idtools.IDPair{UID: int(s.Uid), GID: int(s.Gid)}, nil
}
-// handleTarTypeBlockCharFifo is an OS-specific helper function used by
-// createTarFile to handle the following types of header: Block; Char; Fifo
-func handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error {
- if rsystem.RunningInUserNS() {
- // cannot create a device if running in user namespace
- return nil
- }
-
- mode := uint32(hdr.Mode & 07777)
- switch hdr.Typeflag {
- case tar.TypeBlock:
- mode |= unix.S_IFBLK
- case tar.TypeChar:
- mode |= unix.S_IFCHR
- case tar.TypeFifo:
- mode |= unix.S_IFIFO
- }
-
- return system.Mknod(path, mode, int(system.Mkdev(hdr.Devmajor, hdr.Devminor)))
+func chmodTarEntry(perm os.FileMode) os.FileMode {
+ return perm // noop for unix as golang APIs provide perm bits correctly
}
-func handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo) error {
- if hdr.Typeflag == tar.TypeLink {
- if fi, err := os.Lstat(hdr.Linkname); err == nil && (fi.Mode()&os.ModeSymlink == 0) {
- if err := os.Chmod(path, hdrInfo.Mode()); err != nil {
- return err
- }
- }
- } else if hdr.Typeflag != tar.TypeSymlink {
- if err := os.Chmod(path, hdrInfo.Mode()); err != nil {
- return err
+func setHeaderForSpecialDevice(hdr *tar.Header, name string, stat interface{}) (err error) {
+ s, ok := stat.(*syscall.Stat_t)
+
+ if ok {
+ // Currently go does not fill in the major/minors
+ if s.Mode&unix.S_IFBLK != 0 ||
+ s.Mode&unix.S_IFCHR != 0 {
+ hdr.Devmajor = int64(unix.Major(uint64(s.Rdev))) // nolint: unconvert
+ hdr.Devminor = int64(unix.Minor(uint64(s.Rdev))) // nolint: unconvert
}
}
- return nil
+
+ return
}
diff --git a/vendor/github.com/docker/docker/pkg/archive/archive_windows.go b/vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_windows.go
index a22410c03..c14875cd7 100644
--- a/vendor/github.com/docker/docker/pkg/archive/archive_windows.go
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/archive/archive_windows.go
@@ -1,4 +1,6 @@
-// +build windows
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
package archive
@@ -13,18 +15,6 @@ import (
"github.com/docker/docker/pkg/longpath"
)
-// fixVolumePathPrefix does platform specific processing to ensure that if
-// the path being passed in is not in a volume path format, convert it to one.
-func fixVolumePathPrefix(srcPath string) string {
- return longpath.AddPrefix(srcPath)
-}
-
-// getWalkRoot calculates the root path when performing a TarWithOptions.
-// We use a separate function as this is platform specific.
-func getWalkRoot(srcPath string, include string) string {
- return filepath.Join(srcPath, include)
-}
-
// CanonicalTarNameForPath returns platform-specific filepath
// to canonical posix-style path for tar archival. p is relative
// path.
@@ -40,6 +30,28 @@ func CanonicalTarNameForPath(p string) (string, error) {
}
+// fixVolumePathPrefix does platform specific processing to ensure that if
+// the path being passed in is not in a volume path format, convert it to one.
+func fixVolumePathPrefix(srcPath string) string {
+ return longpath.AddPrefix(srcPath)
+}
+
+// getWalkRoot calculates the root path when performing a TarWithOptions.
+// We use a separate function as this is platform specific.
+func getWalkRoot(srcPath string, include string) string {
+ return filepath.Join(srcPath, include)
+}
+
+func getInodeFromStat(stat interface{}) (inode uint64, err error) {
+ // do nothing. no notion of Inode in stat on Windows
+ return
+}
+
+func getFileUIDGID(stat interface{}) (idtools.IDPair, error) {
+ // no notion of file ownership mapping yet on Windows
+ return idtools.IDPair{0, 0}, nil
+}
+
// chmodTarEntry is used to adjust the file permissions used in tar header based
// on the platform the archival is done.
func chmodTarEntry(perm os.FileMode) os.FileMode {
@@ -57,23 +69,3 @@ func setHeaderForSpecialDevice(hdr *tar.Header, name string, stat interface{}) (
// do nothing. no notion of Rdev, Nlink in stat on Windows
return
}
-
-func getInodeFromStat(stat interface{}) (inode uint64, err error) {
- // do nothing. no notion of Inode in stat on Windows
- return
-}
-
-// handleTarTypeBlockCharFifo is an OS-specific helper function used by
-// createTarFile to handle the following types of header: Block; Char; Fifo
-func handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error {
- return nil
-}
-
-func handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo) error {
- return nil
-}
-
-func getFileUIDGID(stat interface{}) (idtools.IDPair, error) {
- // no notion of file ownership mapping yet on Windows
- return idtools.IDPair{0, 0}, nil
-}
diff --git a/vendor/github.com/fsouza/go-dockerclient/internal/archive/changes_unix.go b/vendor/github.com/fsouza/go-dockerclient/internal/archive/changes_unix.go
new file mode 100644
index 000000000..39ea287bf
--- /dev/null
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/archive/changes_unix.go
@@ -0,0 +1,16 @@
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
+
+// +build !windows
+
+package archive
+
+import (
+ "os"
+ "syscall"
+)
+
+func hasHardlinks(fi os.FileInfo) bool {
+ return fi.Sys().(*syscall.Stat_t).Nlink > 1
+}
diff --git a/vendor/github.com/fsouza/go-dockerclient/internal/archive/changes_windows.go b/vendor/github.com/fsouza/go-dockerclient/internal/archive/changes_windows.go
new file mode 100644
index 000000000..a93130474
--- /dev/null
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/archive/changes_windows.go
@@ -0,0 +1,11 @@
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
+
+package archive
+
+import "os"
+
+func hasHardlinks(fi os.FileInfo) bool {
+ return false
+}
diff --git a/vendor/github.com/fsouza/go-dockerclient/internal/archive/copy.go b/vendor/github.com/fsouza/go-dockerclient/internal/archive/copy.go
new file mode 100644
index 000000000..45d45f20e
--- /dev/null
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/archive/copy.go
@@ -0,0 +1,29 @@
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
+
+package archive
+
+import (
+ "os"
+ "path/filepath"
+)
+
+// SplitPathDirEntry splits the given path between its directory name and its
+// basename by first cleaning the path but preserves a trailing "." if the
+// original path specified the current directory.
+func SplitPathDirEntry(path string) (dir, base string) {
+ cleanedPath := filepath.Clean(filepath.FromSlash(path))
+
+ if specifiesCurrentDir(path) {
+ cleanedPath += string(os.PathSeparator) + "."
+ }
+
+ return filepath.Dir(cleanedPath), filepath.Base(cleanedPath)
+}
+
+// specifiesCurrentDir returns whether the given path specifies
+// a "current directory", i.e., the last path segment is `.`.
+func specifiesCurrentDir(path string) bool {
+ return filepath.Base(path) == "."
+}
diff --git a/vendor/github.com/docker/docker/pkg/archive/whiteouts.go b/vendor/github.com/fsouza/go-dockerclient/internal/archive/whiteouts.go
index d20478a10..a61c22a08 100644
--- a/vendor/github.com/docker/docker/pkg/archive/whiteouts.go
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/archive/whiteouts.go
@@ -1,3 +1,7 @@
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
+
package archive
// Whiteouts are files with a special meaning for the layered filesystem.
diff --git a/vendor/github.com/docker/docker/pkg/jsonmessage/jsonmessage.go b/vendor/github.com/fsouza/go-dockerclient/internal/jsonmessage/jsonmessage.go
index 6cfa46483..71b3395ce 100644
--- a/vendor/github.com/docker/docker/pkg/jsonmessage/jsonmessage.go
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/jsonmessage/jsonmessage.go
@@ -1,3 +1,7 @@
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
+
package jsonmessage
import (
@@ -8,9 +12,9 @@ import (
"strings"
"time"
- gotty "github.com/Nvveen/Gotty"
- "github.com/docker/docker/pkg/term"
- units "github.com/docker/go-units"
+ "github.com/Nvveen/Gotty"
+ "github.com/docker/go-units"
+ "github.com/fsouza/go-dockerclient/internal/term"
)
// RFC3339NanoFixed is time.RFC3339Nano with nanoseconds padded using zeros to
@@ -40,21 +44,17 @@ type JSONProgress struct {
// If true, don't show xB/yB
HideCounts bool `json:"hidecounts,omitempty"`
Units string `json:"units,omitempty"`
+ nowFunc func() time.Time
+ winSize int
}
func (p *JSONProgress) String() string {
var (
- width = 200
+ width = p.width()
pbBox string
numbersBox string
timeLeftBox string
)
-
- ws, err := term.GetWinsize(p.terminalFd)
- if err == nil {
- width = int(ws.Width)
- }
-
if p.Current <= 0 && p.Total <= 0 {
return ""
}
@@ -103,7 +103,7 @@ func (p *JSONProgress) String() string {
}
if p.Current > 0 && p.Start > 0 && percentage < 50 {
- fromStart := time.Now().UTC().Sub(time.Unix(p.Start, 0))
+ fromStart := p.now().Sub(time.Unix(p.Start, 0))
perEntry := fromStart / time.Duration(p.Current)
left := time.Duration(p.Total-p.Current) * perEntry
left = (left / time.Second) * time.Second
@@ -115,6 +115,28 @@ func (p *JSONProgress) String() string {
return pbBox + numbersBox + timeLeftBox
}
+// shim for testing
+func (p *JSONProgress) now() time.Time {
+ if p.nowFunc == nil {
+ p.nowFunc = func() time.Time {
+ return time.Now().UTC()
+ }
+ }
+ return p.nowFunc()
+}
+
+// shim for testing
+func (p *JSONProgress) width() int {
+ if p.winSize != 0 {
+ return p.winSize
+ }
+ ws, err := term.GetWinsize(p.terminalFd)
+ if err == nil {
+ return int(ws.Width)
+ }
+ return 200
+}
+
// JSONMessage defines a message struct. It describes
// the created time, where it from, status, ID of the
// message. It's used for docker events.
@@ -227,7 +249,7 @@ func (jm *JSONMessage) Display(out io.Writer, termInfo termInfo) error {
// DisplayJSONMessagesStream displays a json message stream from `in` to `out`, `isTerminal`
// describes if `out` is a terminal. If this is the case, it will print `\n` at the end of
// each line and move the cursor while displaying.
-func DisplayJSONMessagesStream(in io.Reader, out io.Writer, terminalFd uintptr, isTerminal bool, auxCallback func(*json.RawMessage)) error {
+func DisplayJSONMessagesStream(in io.Reader, out io.Writer, terminalFd uintptr, isTerminal bool, auxCallback func(JSONMessage)) error {
var (
dec = json.NewDecoder(in)
ids = make(map[string]int)
@@ -259,7 +281,7 @@ func DisplayJSONMessagesStream(in io.Reader, out io.Writer, terminalFd uintptr,
if jm.Aux != nil {
if auxCallback != nil {
- auxCallback(jm.Aux)
+ auxCallback(jm)
}
continue
}
@@ -312,6 +334,6 @@ type stream interface {
}
// DisplayJSONMessagesToStream prints json messages to the output stream
-func DisplayJSONMessagesToStream(in io.Reader, stream stream, auxCallback func(*json.RawMessage)) error {
+func DisplayJSONMessagesToStream(in io.Reader, stream stream, auxCallback func(JSONMessage)) error {
return DisplayJSONMessagesStream(in, stream, stream.FD(), stream.IsTerminal(), auxCallback)
}
diff --git a/vendor/github.com/fsouza/go-dockerclient/internal/term/term.go b/vendor/github.com/fsouza/go-dockerclient/internal/term/term.go
new file mode 100644
index 000000000..af06911d8
--- /dev/null
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/term/term.go
@@ -0,0 +1,13 @@
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
+
+package term
+
+// Winsize represents the size of the terminal window.
+type Winsize struct {
+ Height uint16
+ Width uint16
+ x uint16
+ y uint16
+}
diff --git a/vendor/github.com/fsouza/go-dockerclient/internal/term/winsize.go b/vendor/github.com/fsouza/go-dockerclient/internal/term/winsize.go
new file mode 100644
index 000000000..2a9964a0d
--- /dev/null
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/term/winsize.go
@@ -0,0 +1,16 @@
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
+
+// +build !windows
+
+package term
+
+import "golang.org/x/sys/unix"
+
+// GetWinsize returns the window size based on the specified file descriptor.
+func GetWinsize(fd uintptr) (*Winsize, error) {
+ uws, err := unix.IoctlGetWinsize(int(fd), unix.TIOCGWINSZ)
+ ws := &Winsize{Height: uws.Row, Width: uws.Col, x: uws.Xpixel, y: uws.Ypixel}
+ return ws, err
+}
diff --git a/vendor/github.com/fsouza/go-dockerclient/internal/term/winsize_windows.go b/vendor/github.com/fsouza/go-dockerclient/internal/term/winsize_windows.go
new file mode 100644
index 000000000..4a07a5d19
--- /dev/null
+++ b/vendor/github.com/fsouza/go-dockerclient/internal/term/winsize_windows.go
@@ -0,0 +1,22 @@
+// Copyright 2014 Docker authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the DOCKER-LICENSE file.
+
+package term
+
+import "github.com/Azure/go-ansiterm/winterm"
+
+// GetWinsize returns the window size based on the specified file descriptor.
+func GetWinsize(fd uintptr) (*Winsize, error) {
+ info, err := winterm.GetConsoleScreenBufferInfo(fd)
+ if err != nil {
+ return nil, err
+ }
+
+ winsize := &Winsize{
+ Width: uint16(info.Window.Right - info.Window.Left + 1),
+ Height: uint16(info.Window.Bottom - info.Window.Top + 1),
+ }
+
+ return winsize, nil
+}
diff --git a/vendor/github.com/fsouza/go-dockerclient/plugin.go b/vendor/github.com/fsouza/go-dockerclient/plugin.go
index a28ff3d1e..957015907 100644
--- a/vendor/github.com/fsouza/go-dockerclient/plugin.go
+++ b/vendor/github.com/fsouza/go-dockerclient/plugin.go
@@ -143,7 +143,7 @@ type PluginDetail struct {
ID string `json:"Id,omitempty" yaml:"Id,omitempty" toml:"Id,omitempty"`
Name string `json:"Name,omitempty" yaml:"Name,omitempty" toml:"Name,omitempty"`
Tag string `json:"Tag,omitempty" yaml:"Tag,omitempty" toml:"Tag,omitempty"`
- Active bool `json:"Active,omitempty" yaml:"Active,omitempty" toml:"Active,omitempty"`
+ Active bool `json:"Enabled,omitempty" yaml:"Active,omitempty" toml:"Active,omitempty"`
Settings PluginSettings `json:"Settings,omitempty" yaml:"Settings,omitempty" toml:"Settings,omitempty"`
Config PluginConfig `json:"Config,omitempty" yaml:"Config,omitempty" toml:"Config,omitempty"`
}
diff --git a/vendor/github.com/fsouza/go-dockerclient/tar.go b/vendor/github.com/fsouza/go-dockerclient/tar.go
index 9716a7712..611da8c9e 100644
--- a/vendor/github.com/fsouza/go-dockerclient/tar.go
+++ b/vendor/github.com/fsouza/go-dockerclient/tar.go
@@ -13,8 +13,8 @@ import (
"path/filepath"
"strings"
- "github.com/docker/docker/pkg/archive"
"github.com/docker/docker/pkg/fileutils"
+ "github.com/fsouza/go-dockerclient/internal/archive"
)
func createTarStream(srcPath, dockerfilePath string) (io.ReadCloser, error) {
diff --git a/vendor/github.com/fsouza/go-dockerclient/volume.go b/vendor/github.com/fsouza/go-dockerclient/volume.go
index 021a262b7..c8f50469e 100644
--- a/vendor/github.com/fsouza/go-dockerclient/volume.go
+++ b/vendor/github.com/fsouza/go-dockerclient/volume.go
@@ -9,6 +9,7 @@ import (
"encoding/json"
"errors"
"net/http"
+ "time"
)
var (
@@ -28,6 +29,7 @@ type Volume struct {
Mountpoint string `json:"Mountpoint,omitempty" yaml:"Mountpoint,omitempty" toml:"Mountpoint,omitempty"`
Labels map[string]string `json:"Labels,omitempty" yaml:"Labels,omitempty" toml:"Labels,omitempty"`
Options map[string]string `json:"Options,omitempty" yaml:"Options,omitempty" toml:"Options,omitempty"`
+ CreatedAt time.Time `json:"CreatedAt,omitempty" yaml:"CreatedAt,omitempty" toml:"CreatedAt,omitempty"`
}
// ListVolumesOptions specify parameters to the ListVolumes function.
diff --git a/vendor/github.com/ghodss/yaml/README.md b/vendor/github.com/ghodss/yaml/README.md
index fff09b619..0200f75b4 100644
--- a/vendor/github.com/ghodss/yaml/README.md
+++ b/vendor/github.com/ghodss/yaml/README.md
@@ -53,8 +53,8 @@ import (
)
type Person struct {
- Name string `json:"name"` // Affects YAML field names too.
- Age int `json:"age"`
+ Name string `json:"name"` // Affects YAML field names too.
+ Age int `json:"age"`
}
func main() {
@@ -95,6 +95,7 @@ import (
"github.com/ghodss/yaml"
)
+
func main() {
j := []byte(`{"name": "John", "age": 30}`)
y, err := yaml.JSONToYAML(j)
diff --git a/vendor/github.com/gogo/protobuf/LICENSE b/vendor/github.com/gogo/protobuf/LICENSE
index 7be0cc7b6..f57de90da 100644
--- a/vendor/github.com/gogo/protobuf/LICENSE
+++ b/vendor/github.com/gogo/protobuf/LICENSE
@@ -1,7 +1,6 @@
-Protocol Buffers for Go with Gadgets
-
Copyright (c) 2013, The GoGo Authors. All rights reserved.
-http://github.com/gogo/protobuf
+
+Protocol Buffers for Go with Gadgets
Go support for Protocol Buffers - Google's data interchange format
diff --git a/vendor/github.com/gogo/protobuf/README b/vendor/github.com/gogo/protobuf/README
index 0ad513633..405429a95 100644
--- a/vendor/github.com/gogo/protobuf/README
+++ b/vendor/github.com/gogo/protobuf/README
@@ -1,13 +1,18 @@
-GoGoProtobuf http://github.com/gogo/protobuf extends
+Protocol Buffers for Go with Gadgets
+
+GoGoProtobuf http://github.com/gogo/protobuf extends
GoProtobuf http://github.com/golang/protobuf
+Copyright (c) 2013, The GoGo Authors. All rights reserved.
+
+
# Go support for Protocol Buffers
Google's data interchange format.
Copyright 2010 The Go Authors.
https://github.com/golang/protobuf
-This package and the code it generates requires at least Go 1.4.
+This package and the code it generates requires at least Go 1.6.
This software implements Go bindings for protocol buffers. For
information about protocol buffers themselves, see
@@ -25,7 +30,7 @@ To use this software, you must:
for details or, if you are using gccgo, follow the instructions at
https://golang.org/doc/install/gccgo
- Grab the code from the repository and install the proto package.
- The simplest way is to run `go get -u github.com/golang/protobuf/{proto,protoc-gen-go}`.
+ The simplest way is to run `go get -u github.com/golang/protobuf/protoc-gen-go`.
The compiler plugin, protoc-gen-go, will be installed in $GOBIN,
defaulting to $GOPATH/bin. It must be in your $PATH for the protocol
compiler, protoc, to find it.
@@ -58,6 +63,45 @@ parameter set to the directory you want to output the Go code to.
The generated files will be suffixed .pb.go. See the Test code below
for an example using such a file.
+## Packages and input paths ##
+
+The protocol buffer language has a concept of "packages" which does not
+correspond well to the Go notion of packages. In generated Go code,
+each source `.proto` file is associated with a single Go package. The
+name and import path for this package is specified with the `go_package`
+proto option:
+
+ option go_package = "github.com/gogo/protobuf/types";
+
+The protocol buffer compiler will attempt to derive a package name and
+import path if a `go_package` option is not present, but it is
+best to always specify one explicitly.
+
+There is a one-to-one relationship between source `.proto` files and
+generated `.pb.go` files, but any number of `.pb.go` files may be
+contained in the same Go package.
+
+The output name of a generated file is produced by replacing the
+`.proto` suffix with `.pb.go` (e.g., `foo.proto` produces `foo.pb.go`).
+However, the output directory is selected in one of two ways. Let
+us say we have `inputs/x.proto` with a `go_package` option of
+`github.com/golang/protobuf/p`. The corresponding output file may
+be:
+
+- Relative to the import path:
+
+ protoc --gogo_out=. inputs/x.proto
+ # writes ./github.com/gogo/protobuf/p/x.pb.go
+
+ (This can work well with `--gogo_out=$GOPATH`.)
+
+- Relative to the input file:
+
+ protoc --gogo_out=paths=source_relative:. inputs/x.proto
+ # generate ./inputs/x.pb.go
+
+## Generated code ##
+
The package comment for the proto library contains text describing
the interface provided in Go for protocol buffers. Here is an edited
version.
@@ -118,23 +162,20 @@ for a protocol buffer variable v:
When the .proto file specifies `syntax="proto3"`, there are some differences:
- Non-repeated fields of non-message type are values instead of pointers.
- - Getters are only generated for message and oneof fields.
- Enum types do not get an Enum method.
Consider file test.proto, containing
```proto
+ syntax = "proto2";
package example;
-
+
enum FOO { X = 17; };
-
+
message Test {
required string label = 1;
optional int32 type = 2 [default=77];
repeated int64 reps = 3;
- optional group OptionalGroup = 4 {
- required string RequiredField = 5;
- }
}
```
@@ -151,13 +192,10 @@ To create and play with a Test object from the example package,
)
func main() {
- test := &example.Test {
+ test := &example.Test{
Label: proto.String("hello"),
Type: proto.Int32(17),
Reps: []int64{1, 2, 3},
- Optionalgroup: &example.Test_OptionalGroup {
- RequiredField: proto.String("good bye"),
- },
}
data, err := proto.Marshal(test)
if err != nil {
@@ -185,19 +223,23 @@ parameter list separated from the output directory by a colon:
protoc --gogo_out=plugins=grpc,import_path=mypackage:. *.proto
-
-- `import_prefix=xxx` - a prefix that is added onto the beginning of
- all imports. Useful for things like generating protos in a
- subdirectory, or regenerating vendored protobufs in-place.
-- `import_path=foo/bar` - used as the package if no input files
- declare `go_package`. If it contains slashes, everything up to the
- rightmost slash is ignored.
+- `paths=(import | source_relative)` - specifies how the paths of
+ generated files are structured. See the "Packages and imports paths"
+ section above. The default is `import`.
- `plugins=plugin1+plugin2` - specifies the list of sub-plugins to
load. The only plugin in this repo is `grpc`.
- `Mfoo/bar.proto=quux/shme` - declares that foo/bar.proto is
associated with Go package quux/shme. This is subject to the
import_prefix parameter.
+The following parameters are deprecated and should not be used:
+
+- `import_prefix=xxx` - a prefix that is added onto the beginning of
+ all imports.
+- `import_path=foo/bar` - used as the package if no input files
+ declare `go_package`. If it contains slashes, everything up to the
+ rightmost slash is ignored.
+
## gRPC Support ##
If a proto file specifies RPC services, protoc-gen-go can be instructed to
@@ -251,8 +293,6 @@ generated code and declare a new package-level constant whose name incorporates
the latest version number. Removing a compatibility constant is considered a
breaking change and would be subject to the announcement policy stated above.
-## Plugins ##
-
The `protoc-gen-go/generator` package exposes a plugin interface,
which is used by the gRPC code generation. This interface is not
supported and is subject to incompatible changes without notice.
diff --git a/vendor/github.com/gogo/protobuf/Readme.md b/vendor/github.com/gogo/protobuf/Readme.md
index e97bb1ba3..f8a3aee5b 100644
--- a/vendor/github.com/gogo/protobuf/Readme.md
+++ b/vendor/github.com/gogo/protobuf/Readme.md
@@ -1,6 +1,7 @@
# Protocol Buffers for Go with Gadgets
[![Build Status](https://travis-ci.org/gogo/protobuf.svg?branch=master)](https://travis-ci.org/gogo/protobuf)
+[![GoDoc](https://godoc.org/github.com/gogo/protobuf?status.svg)](http://godoc.org/github.com/gogo/protobuf)
gogoprotobuf is a fork of <a href="https://github.com/golang/protobuf">golang/protobuf</a> with extra code generation features.
@@ -38,16 +39,31 @@ These projects use gogoprotobuf:
- <a href="https://github.com/docker/swarmkit">docker swarmkit</a> - <a href="https://github.com/docker/swarmkit/blob/63600e01af3b8da2a0ed1c9fa6e1ae4299d75edb/api/objects.proto">sample proto file</a>
- <a href="https://nats.io/">nats.io</a> - <a href="https://github.com/nats-io/go-nats-streaming/blob/master/pb/protocol.proto">go-nats-streaming</a>
- <a href="https://github.com/pingcap/tidb">tidb</a> - Communication between <a href="https://github.com/pingcap/tipb/blob/master/generate-go.sh#L4">tidb</a> and <a href="https://github.com/pingcap/kvproto/blob/master/generate_go.sh#L3">tikv</a>
- - <a href="https://github.com/AsynkronIT/protoactor-go">protoactor-go</a> - <a href="https://github.com/AsynkronIT/protoactor-go/blob/dev/protobuf/protoc-gen-protoactor/main.go">vanity command</a> that also generates actors from service definitions
-
-Please lets us know if you are using gogoprotobuf by posting on our <a href="https://groups.google.com/forum/#!topic/gogoprotobuf/Brw76BxmFpQ">GoogleGroup</a>.
+ - <a href="https://github.com/AsynkronIT/protoactor-go">protoactor-go</a> - <a href="https://github.com/AsynkronIT/protoactor-go/blob/master/protobuf/protoc-gen-protoactor/main.go">vanity command</a> that also generates actors from service definitions
+ - <a href="https://containerd.io/">containerd</a> - <a href="https://github.com/containerd/containerd/tree/master/cmd/protoc-gen-gogoctrd">vanity command with custom field names</a> that conforms to the golang convention.
+ - <a href="https://github.com/heroiclabs/nakama">nakama</a>
+ - <a href="https://github.com/src-d/proteus">proteus</a>
+ - <a href="https://github.com/go-graphite">carbonzipper stack</a>
+ - <a href="https://sendgrid.com/">sendgrid</a>
+ - <a href="https://github.com/zero-os/0-stor">zero-os/0-stor</a>
+ - <a href="https://github.com/spacemeshos/go-spacemesh">go-spacemesh</a>
+ - <a href="https://github.com/weaveworks/cortex">cortex</a> - <a href="https://github.com/weaveworks/cortex/blob/fee02a59729d3771ef888f7bf0fd050e1197c56e/pkg/ingester/client/cortex.proto">sample proto file</a>
+ - <a href="http://skywalking.apache.org/">Apache SkyWalking APM</a> - Istio telemetry receiver based on Mixer bypass protocol
+
+Please let us know if you are using gogoprotobuf by posting on our <a href="https://groups.google.com/forum/#!topic/gogoprotobuf/Brw76BxmFpQ">GoogleGroup</a>.
### Mentioned
- <a href="http://www.slideshare.net/albertstrasheim/serialization-in-go">Cloudflare - go serialization talk - Albert Strasheim</a>
- - <a href="http://gophercon.sourcegraph.com/post/83747547505/writing-a-high-performance-database-in-go">gophercon</a>
+ - <a href="https://youtu.be/4xB46Xl9O9Q?t=557">GopherCon 2014 Writing High Performance Databases in Go by Ben Johnson</a>
- <a href="https://github.com/alecthomas/go_serialization_benchmarks">alecthomas' go serialization benchmarks</a>
-
+ - <a href="http://agniva.me/go/2017/11/18/gogoproto.html">Go faster with gogoproto - Agniva De Sarker</a>
+ - <a href="https://www.youtube.com/watch?v=CY9T020HLP8">Evolution of protobuf (Gource Visualization) - Landon Wilkins</a>
+ - <a href="https://fosdem.org/2018/schedule/event/gopherjs/">Creating GopherJS Apps with gRPC-Web - Johan Brandhorst</a>
+ - <a href="https://jbrandhorst.com/post/gogoproto/">So you want to use GoGo Protobuf - Johan Brandhorst</a>
+ - <a href="https://jbrandhorst.com/post/grpc-errors/">Advanced gRPC Error Usage - Johan Brandhorst</a>
+ - <a href="https://www.udemy.com/grpc-golang/?couponCode=GITHUB10">gRPC Golang Course on Udemy - Stephane Maarek</a>
+
## Getting Started
There are several ways to use gogoprotobuf, but for all you need to install go and protoc.
@@ -59,10 +75,11 @@ After that you can choose:
### Installation
-To install it, you must first have Go (at least version 1.6.3) installed (see [http://golang.org/doc/install](http://golang.org/doc/install)). Go 1.7.1 and 1.8 are continuously tested.
+To install it, you must first have Go (at least version 1.6.3 or 1.9 if you are using gRPC) installed (see [http://golang.org/doc/install](http://golang.org/doc/install)).
+Latest patch versions of 1.9 and 1.10 are continuously tested.
Next, install the standard protocol buffer implementation from [https://github.com/google/protobuf](https://github.com/google/protobuf).
-Most versions from 2.3.1 should not give any problems, but 2.6.1, 3.0.2 and 3.2.0 are continuously tested.
+Most versions from 2.3.1 should not give any problems, but 2.6.1, 3.0.2 and 3.5.1 are continuously tested.
### Speed
@@ -93,7 +110,23 @@ Installing any of these binaries is easy. Simply run:
go get github.com/gogo/protobuf/{binary}
go get github.com/gogo/protobuf/gogoproto
-These binaries allow you to using gogoprotobuf [extensions](https://github.com/gogo/protobuf/blob/master/extensions.md).
+These binaries allow you to use gogoprotobuf [extensions](https://github.com/gogo/protobuf/blob/master/extensions.md). You can also use your own binary.
+
+To generate the code, you also need to set the include path properly.
+
+ protoc -I=. -I=$GOPATH/src -I=$GOPATH/src/github.com/gogo/protobuf/protobuf --{binary}_out=. myproto.proto
+
+To use proto files from "google/protobuf" you need to add additional args to protoc.
+
+ protoc -I=. -I=$GOPATH/src -I=$GOPATH/src/github.com/gogo/protobuf/protobuf --{binary}_out=\
+ Mgoogle/protobuf/any.proto=github.com/gogo/protobuf/types,\
+ Mgoogle/protobuf/duration.proto=github.com/gogo/protobuf/types,\
+ Mgoogle/protobuf/struct.proto=github.com/gogo/protobuf/types,\
+ Mgoogle/protobuf/timestamp.proto=github.com/gogo/protobuf/types,\
+ Mgoogle/protobuf/wrappers.proto=github.com/gogo/protobuf/types:. \
+ myproto.proto
+
+Note that in the protoc command, {binary} does not contain the initial prefix of "protoc-gen".
### Most Speed and most customization
@@ -115,3 +148,12 @@ It works the same as golang/protobuf, simply specify the plugin.
Here is an example using gofast:
protoc --gofast_out=plugins=grpc:. my.proto
+
+See [https://github.com/gogo/grpc-example](https://github.com/gogo/grpc-example) for an example of using gRPC with gogoprotobuf and the wider grpc-ecosystem.
+
+
+## License
+This software is licensed under the 3-Clause BSD License
+("BSD License 2.0", "Revised BSD License", "New BSD License", or "Modified BSD License").
+
+
diff --git a/vendor/github.com/gogo/protobuf/gogoproto/doc.go b/vendor/github.com/gogo/protobuf/gogoproto/doc.go
index 147b5ecc6..081c86fa8 100644
--- a/vendor/github.com/gogo/protobuf/gogoproto/doc.go
+++ b/vendor/github.com/gogo/protobuf/gogoproto/doc.go
@@ -162,7 +162,7 @@ The most complete way to see examples is to look at
github.com/gogo/protobuf/test/thetest.proto
Gogoprototest is a seperate project,
-because we want to keep gogoprotobuf independant of goprotobuf,
+because we want to keep gogoprotobuf independent of goprotobuf,
but we still want to test it thoroughly.
*/
diff --git a/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go b/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go
index 9506b6fb2..0057f8e1b 100644
--- a/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go
+++ b/vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go
@@ -1,21 +1,12 @@
-// Code generated by protoc-gen-gogo.
+// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: gogo.proto
-// DO NOT EDIT!
-/*
-Package gogoproto is a generated protocol buffer package.
-
-It is generated from these files:
- gogo.proto
-
-It has these top-level messages:
-*/
-package gogoproto
+package gogoproto // import "github.com/gogo/protobuf/gogoproto"
import proto "github.com/gogo/protobuf/proto"
import fmt "fmt"
import math "math"
-import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
+import descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
@@ -29,7 +20,7 @@ var _ = math.Inf
const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
var E_GoprotoEnumPrefix = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.EnumOptions)(nil),
+ ExtendedType: (*descriptor.EnumOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 62001,
Name: "gogoproto.goproto_enum_prefix",
@@ -38,7 +29,7 @@ var E_GoprotoEnumPrefix = &proto.ExtensionDesc{
}
var E_GoprotoEnumStringer = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.EnumOptions)(nil),
+ ExtendedType: (*descriptor.EnumOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 62021,
Name: "gogoproto.goproto_enum_stringer",
@@ -47,7 +38,7 @@ var E_GoprotoEnumStringer = &proto.ExtensionDesc{
}
var E_EnumStringer = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.EnumOptions)(nil),
+ ExtendedType: (*descriptor.EnumOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 62022,
Name: "gogoproto.enum_stringer",
@@ -56,7 +47,7 @@ var E_EnumStringer = &proto.ExtensionDesc{
}
var E_EnumCustomname = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.EnumOptions)(nil),
+ ExtendedType: (*descriptor.EnumOptions)(nil),
ExtensionType: (*string)(nil),
Field: 62023,
Name: "gogoproto.enum_customname",
@@ -65,7 +56,7 @@ var E_EnumCustomname = &proto.ExtensionDesc{
}
var E_Enumdecl = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.EnumOptions)(nil),
+ ExtendedType: (*descriptor.EnumOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 62024,
Name: "gogoproto.enumdecl",
@@ -74,7 +65,7 @@ var E_Enumdecl = &proto.ExtensionDesc{
}
var E_EnumvalueCustomname = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.EnumValueOptions)(nil),
+ ExtendedType: (*descriptor.EnumValueOptions)(nil),
ExtensionType: (*string)(nil),
Field: 66001,
Name: "gogoproto.enumvalue_customname",
@@ -83,7 +74,7 @@ var E_EnumvalueCustomname = &proto.ExtensionDesc{
}
var E_GoprotoGettersAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63001,
Name: "gogoproto.goproto_getters_all",
@@ -92,7 +83,7 @@ var E_GoprotoGettersAll = &proto.ExtensionDesc{
}
var E_GoprotoEnumPrefixAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63002,
Name: "gogoproto.goproto_enum_prefix_all",
@@ -101,7 +92,7 @@ var E_GoprotoEnumPrefixAll = &proto.ExtensionDesc{
}
var E_GoprotoStringerAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63003,
Name: "gogoproto.goproto_stringer_all",
@@ -110,7 +101,7 @@ var E_GoprotoStringerAll = &proto.ExtensionDesc{
}
var E_VerboseEqualAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63004,
Name: "gogoproto.verbose_equal_all",
@@ -119,7 +110,7 @@ var E_VerboseEqualAll = &proto.ExtensionDesc{
}
var E_FaceAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63005,
Name: "gogoproto.face_all",
@@ -128,7 +119,7 @@ var E_FaceAll = &proto.ExtensionDesc{
}
var E_GostringAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63006,
Name: "gogoproto.gostring_all",
@@ -137,7 +128,7 @@ var E_GostringAll = &proto.ExtensionDesc{
}
var E_PopulateAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63007,
Name: "gogoproto.populate_all",
@@ -146,7 +137,7 @@ var E_PopulateAll = &proto.ExtensionDesc{
}
var E_StringerAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63008,
Name: "gogoproto.stringer_all",
@@ -155,7 +146,7 @@ var E_StringerAll = &proto.ExtensionDesc{
}
var E_OnlyoneAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63009,
Name: "gogoproto.onlyone_all",
@@ -164,7 +155,7 @@ var E_OnlyoneAll = &proto.ExtensionDesc{
}
var E_EqualAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63013,
Name: "gogoproto.equal_all",
@@ -173,7 +164,7 @@ var E_EqualAll = &proto.ExtensionDesc{
}
var E_DescriptionAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63014,
Name: "gogoproto.description_all",
@@ -182,7 +173,7 @@ var E_DescriptionAll = &proto.ExtensionDesc{
}
var E_TestgenAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63015,
Name: "gogoproto.testgen_all",
@@ -191,7 +182,7 @@ var E_TestgenAll = &proto.ExtensionDesc{
}
var E_BenchgenAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63016,
Name: "gogoproto.benchgen_all",
@@ -200,7 +191,7 @@ var E_BenchgenAll = &proto.ExtensionDesc{
}
var E_MarshalerAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63017,
Name: "gogoproto.marshaler_all",
@@ -209,7 +200,7 @@ var E_MarshalerAll = &proto.ExtensionDesc{
}
var E_UnmarshalerAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63018,
Name: "gogoproto.unmarshaler_all",
@@ -218,7 +209,7 @@ var E_UnmarshalerAll = &proto.ExtensionDesc{
}
var E_StableMarshalerAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63019,
Name: "gogoproto.stable_marshaler_all",
@@ -227,7 +218,7 @@ var E_StableMarshalerAll = &proto.ExtensionDesc{
}
var E_SizerAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63020,
Name: "gogoproto.sizer_all",
@@ -236,7 +227,7 @@ var E_SizerAll = &proto.ExtensionDesc{
}
var E_GoprotoEnumStringerAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63021,
Name: "gogoproto.goproto_enum_stringer_all",
@@ -245,7 +236,7 @@ var E_GoprotoEnumStringerAll = &proto.ExtensionDesc{
}
var E_EnumStringerAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63022,
Name: "gogoproto.enum_stringer_all",
@@ -254,7 +245,7 @@ var E_EnumStringerAll = &proto.ExtensionDesc{
}
var E_UnsafeMarshalerAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63023,
Name: "gogoproto.unsafe_marshaler_all",
@@ -263,7 +254,7 @@ var E_UnsafeMarshalerAll = &proto.ExtensionDesc{
}
var E_UnsafeUnmarshalerAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63024,
Name: "gogoproto.unsafe_unmarshaler_all",
@@ -272,7 +263,7 @@ var E_UnsafeUnmarshalerAll = &proto.ExtensionDesc{
}
var E_GoprotoExtensionsMapAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63025,
Name: "gogoproto.goproto_extensions_map_all",
@@ -281,7 +272,7 @@ var E_GoprotoExtensionsMapAll = &proto.ExtensionDesc{
}
var E_GoprotoUnrecognizedAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63026,
Name: "gogoproto.goproto_unrecognized_all",
@@ -290,7 +281,7 @@ var E_GoprotoUnrecognizedAll = &proto.ExtensionDesc{
}
var E_GogoprotoImport = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63027,
Name: "gogoproto.gogoproto_import",
@@ -299,7 +290,7 @@ var E_GogoprotoImport = &proto.ExtensionDesc{
}
var E_ProtosizerAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63028,
Name: "gogoproto.protosizer_all",
@@ -308,7 +299,7 @@ var E_ProtosizerAll = &proto.ExtensionDesc{
}
var E_CompareAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63029,
Name: "gogoproto.compare_all",
@@ -317,7 +308,7 @@ var E_CompareAll = &proto.ExtensionDesc{
}
var E_TypedeclAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63030,
Name: "gogoproto.typedecl_all",
@@ -326,7 +317,7 @@ var E_TypedeclAll = &proto.ExtensionDesc{
}
var E_EnumdeclAll = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63031,
Name: "gogoproto.enumdecl_all",
@@ -335,7 +326,7 @@ var E_EnumdeclAll = &proto.ExtensionDesc{
}
var E_GoprotoRegistration = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FileOptions)(nil),
+ ExtendedType: (*descriptor.FileOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 63032,
Name: "gogoproto.goproto_registration",
@@ -343,8 +334,35 @@ var E_GoprotoRegistration = &proto.ExtensionDesc{
Filename: "gogo.proto",
}
+var E_MessagenameAll = &proto.ExtensionDesc{
+ ExtendedType: (*descriptor.FileOptions)(nil),
+ ExtensionType: (*bool)(nil),
+ Field: 63033,
+ Name: "gogoproto.messagename_all",
+ Tag: "varint,63033,opt,name=messagename_all,json=messagenameAll",
+ Filename: "gogo.proto",
+}
+
+var E_GoprotoSizecacheAll = &proto.ExtensionDesc{
+ ExtendedType: (*descriptor.FileOptions)(nil),
+ ExtensionType: (*bool)(nil),
+ Field: 63034,
+ Name: "gogoproto.goproto_sizecache_all",
+ Tag: "varint,63034,opt,name=goproto_sizecache_all,json=goprotoSizecacheAll",
+ Filename: "gogo.proto",
+}
+
+var E_GoprotoUnkeyedAll = &proto.ExtensionDesc{
+ ExtendedType: (*descriptor.FileOptions)(nil),
+ ExtensionType: (*bool)(nil),
+ Field: 63035,
+ Name: "gogoproto.goproto_unkeyed_all",
+ Tag: "varint,63035,opt,name=goproto_unkeyed_all,json=goprotoUnkeyedAll",
+ Filename: "gogo.proto",
+}
+
var E_GoprotoGetters = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64001,
Name: "gogoproto.goproto_getters",
@@ -353,7 +371,7 @@ var E_GoprotoGetters = &proto.ExtensionDesc{
}
var E_GoprotoStringer = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64003,
Name: "gogoproto.goproto_stringer",
@@ -362,7 +380,7 @@ var E_GoprotoStringer = &proto.ExtensionDesc{
}
var E_VerboseEqual = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64004,
Name: "gogoproto.verbose_equal",
@@ -371,7 +389,7 @@ var E_VerboseEqual = &proto.ExtensionDesc{
}
var E_Face = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64005,
Name: "gogoproto.face",
@@ -380,7 +398,7 @@ var E_Face = &proto.ExtensionDesc{
}
var E_Gostring = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64006,
Name: "gogoproto.gostring",
@@ -389,7 +407,7 @@ var E_Gostring = &proto.ExtensionDesc{
}
var E_Populate = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64007,
Name: "gogoproto.populate",
@@ -398,7 +416,7 @@ var E_Populate = &proto.ExtensionDesc{
}
var E_Stringer = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 67008,
Name: "gogoproto.stringer",
@@ -407,7 +425,7 @@ var E_Stringer = &proto.ExtensionDesc{
}
var E_Onlyone = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64009,
Name: "gogoproto.onlyone",
@@ -416,7 +434,7 @@ var E_Onlyone = &proto.ExtensionDesc{
}
var E_Equal = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64013,
Name: "gogoproto.equal",
@@ -425,7 +443,7 @@ var E_Equal = &proto.ExtensionDesc{
}
var E_Description = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64014,
Name: "gogoproto.description",
@@ -434,7 +452,7 @@ var E_Description = &proto.ExtensionDesc{
}
var E_Testgen = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64015,
Name: "gogoproto.testgen",
@@ -443,7 +461,7 @@ var E_Testgen = &proto.ExtensionDesc{
}
var E_Benchgen = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64016,
Name: "gogoproto.benchgen",
@@ -452,7 +470,7 @@ var E_Benchgen = &proto.ExtensionDesc{
}
var E_Marshaler = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64017,
Name: "gogoproto.marshaler",
@@ -461,7 +479,7 @@ var E_Marshaler = &proto.ExtensionDesc{
}
var E_Unmarshaler = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64018,
Name: "gogoproto.unmarshaler",
@@ -470,7 +488,7 @@ var E_Unmarshaler = &proto.ExtensionDesc{
}
var E_StableMarshaler = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64019,
Name: "gogoproto.stable_marshaler",
@@ -479,7 +497,7 @@ var E_StableMarshaler = &proto.ExtensionDesc{
}
var E_Sizer = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64020,
Name: "gogoproto.sizer",
@@ -488,7 +506,7 @@ var E_Sizer = &proto.ExtensionDesc{
}
var E_UnsafeMarshaler = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64023,
Name: "gogoproto.unsafe_marshaler",
@@ -497,7 +515,7 @@ var E_UnsafeMarshaler = &proto.ExtensionDesc{
}
var E_UnsafeUnmarshaler = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64024,
Name: "gogoproto.unsafe_unmarshaler",
@@ -506,7 +524,7 @@ var E_UnsafeUnmarshaler = &proto.ExtensionDesc{
}
var E_GoprotoExtensionsMap = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64025,
Name: "gogoproto.goproto_extensions_map",
@@ -515,7 +533,7 @@ var E_GoprotoExtensionsMap = &proto.ExtensionDesc{
}
var E_GoprotoUnrecognized = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64026,
Name: "gogoproto.goproto_unrecognized",
@@ -524,7 +542,7 @@ var E_GoprotoUnrecognized = &proto.ExtensionDesc{
}
var E_Protosizer = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64028,
Name: "gogoproto.protosizer",
@@ -533,7 +551,7 @@ var E_Protosizer = &proto.ExtensionDesc{
}
var E_Compare = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64029,
Name: "gogoproto.compare",
@@ -542,7 +560,7 @@ var E_Compare = &proto.ExtensionDesc{
}
var E_Typedecl = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.MessageOptions)(nil),
+ ExtendedType: (*descriptor.MessageOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 64030,
Name: "gogoproto.typedecl",
@@ -550,8 +568,35 @@ var E_Typedecl = &proto.ExtensionDesc{
Filename: "gogo.proto",
}
+var E_Messagename = &proto.ExtensionDesc{
+ ExtendedType: (*descriptor.MessageOptions)(nil),
+ ExtensionType: (*bool)(nil),
+ Field: 64033,
+ Name: "gogoproto.messagename",
+ Tag: "varint,64033,opt,name=messagename",
+ Filename: "gogo.proto",
+}
+
+var E_GoprotoSizecache = &proto.ExtensionDesc{
+ ExtendedType: (*descriptor.MessageOptions)(nil),
+ ExtensionType: (*bool)(nil),
+ Field: 64034,
+ Name: "gogoproto.goproto_sizecache",
+ Tag: "varint,64034,opt,name=goproto_sizecache,json=goprotoSizecache",
+ Filename: "gogo.proto",
+}
+
+var E_GoprotoUnkeyed = &proto.ExtensionDesc{
+ ExtendedType: (*descriptor.MessageOptions)(nil),
+ ExtensionType: (*bool)(nil),
+ Field: 64035,
+ Name: "gogoproto.goproto_unkeyed",
+ Tag: "varint,64035,opt,name=goproto_unkeyed,json=goprotoUnkeyed",
+ Filename: "gogo.proto",
+}
+
var E_Nullable = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FieldOptions)(nil),
+ ExtendedType: (*descriptor.FieldOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 65001,
Name: "gogoproto.nullable",
@@ -560,7 +605,7 @@ var E_Nullable = &proto.ExtensionDesc{
}
var E_Embed = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FieldOptions)(nil),
+ ExtendedType: (*descriptor.FieldOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 65002,
Name: "gogoproto.embed",
@@ -569,7 +614,7 @@ var E_Embed = &proto.ExtensionDesc{
}
var E_Customtype = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FieldOptions)(nil),
+ ExtendedType: (*descriptor.FieldOptions)(nil),
ExtensionType: (*string)(nil),
Field: 65003,
Name: "gogoproto.customtype",
@@ -578,7 +623,7 @@ var E_Customtype = &proto.ExtensionDesc{
}
var E_Customname = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FieldOptions)(nil),
+ ExtendedType: (*descriptor.FieldOptions)(nil),
ExtensionType: (*string)(nil),
Field: 65004,
Name: "gogoproto.customname",
@@ -587,7 +632,7 @@ var E_Customname = &proto.ExtensionDesc{
}
var E_Jsontag = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FieldOptions)(nil),
+ ExtendedType: (*descriptor.FieldOptions)(nil),
ExtensionType: (*string)(nil),
Field: 65005,
Name: "gogoproto.jsontag",
@@ -596,7 +641,7 @@ var E_Jsontag = &proto.ExtensionDesc{
}
var E_Moretags = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FieldOptions)(nil),
+ ExtendedType: (*descriptor.FieldOptions)(nil),
ExtensionType: (*string)(nil),
Field: 65006,
Name: "gogoproto.moretags",
@@ -605,7 +650,7 @@ var E_Moretags = &proto.ExtensionDesc{
}
var E_Casttype = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FieldOptions)(nil),
+ ExtendedType: (*descriptor.FieldOptions)(nil),
ExtensionType: (*string)(nil),
Field: 65007,
Name: "gogoproto.casttype",
@@ -614,7 +659,7 @@ var E_Casttype = &proto.ExtensionDesc{
}
var E_Castkey = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FieldOptions)(nil),
+ ExtendedType: (*descriptor.FieldOptions)(nil),
ExtensionType: (*string)(nil),
Field: 65008,
Name: "gogoproto.castkey",
@@ -623,7 +668,7 @@ var E_Castkey = &proto.ExtensionDesc{
}
var E_Castvalue = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FieldOptions)(nil),
+ ExtendedType: (*descriptor.FieldOptions)(nil),
ExtensionType: (*string)(nil),
Field: 65009,
Name: "gogoproto.castvalue",
@@ -632,7 +677,7 @@ var E_Castvalue = &proto.ExtensionDesc{
}
var E_Stdtime = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FieldOptions)(nil),
+ ExtendedType: (*descriptor.FieldOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 65010,
Name: "gogoproto.stdtime",
@@ -641,7 +686,7 @@ var E_Stdtime = &proto.ExtensionDesc{
}
var E_Stdduration = &proto.ExtensionDesc{
- ExtendedType: (*google_protobuf.FieldOptions)(nil),
+ ExtendedType: (*descriptor.FieldOptions)(nil),
ExtensionType: (*bool)(nil),
Field: 65011,
Name: "gogoproto.stdduration",
@@ -649,6 +694,15 @@ var E_Stdduration = &proto.ExtensionDesc{
Filename: "gogo.proto",
}
+var E_Wktpointer = &proto.ExtensionDesc{
+ ExtendedType: (*descriptor.FieldOptions)(nil),
+ ExtensionType: (*bool)(nil),
+ Field: 65012,
+ Name: "gogoproto.wktpointer",
+ Tag: "varint,65012,opt,name=wktpointer",
+ Filename: "gogo.proto",
+}
+
func init() {
proto.RegisterExtension(E_GoprotoEnumPrefix)
proto.RegisterExtension(E_GoprotoEnumStringer)
@@ -685,6 +739,9 @@ func init() {
proto.RegisterExtension(E_TypedeclAll)
proto.RegisterExtension(E_EnumdeclAll)
proto.RegisterExtension(E_GoprotoRegistration)
+ proto.RegisterExtension(E_MessagenameAll)
+ proto.RegisterExtension(E_GoprotoSizecacheAll)
+ proto.RegisterExtension(E_GoprotoUnkeyedAll)
proto.RegisterExtension(E_GoprotoGetters)
proto.RegisterExtension(E_GoprotoStringer)
proto.RegisterExtension(E_VerboseEqual)
@@ -708,6 +765,9 @@ func init() {
proto.RegisterExtension(E_Protosizer)
proto.RegisterExtension(E_Compare)
proto.RegisterExtension(E_Typedecl)
+ proto.RegisterExtension(E_Messagename)
+ proto.RegisterExtension(E_GoprotoSizecache)
+ proto.RegisterExtension(E_GoprotoUnkeyed)
proto.RegisterExtension(E_Nullable)
proto.RegisterExtension(E_Embed)
proto.RegisterExtension(E_Customtype)
@@ -719,86 +779,94 @@ func init() {
proto.RegisterExtension(E_Castvalue)
proto.RegisterExtension(E_Stdtime)
proto.RegisterExtension(E_Stdduration)
-}
-
-func init() { proto.RegisterFile("gogo.proto", fileDescriptorGogo) }
-
-var fileDescriptorGogo = []byte{
- // 1201 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x98, 0xcb, 0x6f, 0x1c, 0x45,
- 0x13, 0xc0, 0xf5, 0xe9, 0x73, 0x64, 0x6f, 0xf9, 0x85, 0xd7, 0xc6, 0x84, 0x08, 0x44, 0x72, 0xe3,
- 0xe4, 0x9c, 0x22, 0x94, 0xb6, 0x22, 0xcb, 0xb1, 0x1c, 0x2b, 0x11, 0x06, 0x63, 0xe2, 0x00, 0xe2,
- 0xb0, 0x9a, 0xdd, 0x6d, 0x4f, 0x06, 0x66, 0xa6, 0x87, 0x99, 0x9e, 0x28, 0xce, 0x0d, 0x85, 0x87,
- 0x10, 0xe2, 0x8d, 0x04, 0x09, 0x49, 0x80, 0x03, 0xef, 0x67, 0x78, 0x1f, 0xb9, 0xf0, 0xb8, 0xf2,
- 0x3f, 0x70, 0x01, 0xcc, 0xdb, 0x37, 0x5f, 0x50, 0xcd, 0x56, 0xcd, 0xf6, 0xac, 0x57, 0xea, 0xde,
- 0xdb, 0xec, 0xba, 0x7f, 0xbf, 0xad, 0xa9, 0x9a, 0xae, 0xea, 0x31, 0x80, 0xaf, 0x7c, 0x35, 0x97,
- 0xa4, 0x4a, 0xab, 0x7a, 0x0d, 0xaf, 0x8b, 0xcb, 0x03, 0x07, 0x7d, 0xa5, 0xfc, 0x50, 0x1e, 0x2e,
- 0x3e, 0x35, 0xf3, 0xcd, 0xc3, 0x6d, 0x99, 0xb5, 0xd2, 0x20, 0xd1, 0x2a, 0xed, 0x2c, 0x16, 0x77,
- 0xc1, 0x34, 0x2d, 0x6e, 0xc8, 0x38, 0x8f, 0x1a, 0x49, 0x2a, 0x37, 0x83, 0xf3, 0xf5, 0x5b, 0xe6,
- 0x3a, 0xe4, 0x1c, 0x93, 0x73, 0xcb, 0x71, 0x1e, 0xdd, 0x9d, 0xe8, 0x40, 0xc5, 0xd9, 0xfe, 0xeb,
- 0x3f, 0xff, 0xff, 0xe0, 0xff, 0x6e, 0x1f, 0x59, 0x9f, 0x22, 0x14, 0xff, 0xb6, 0x56, 0x80, 0x62,
- 0x1d, 0x6e, 0xac, 0xf8, 0x32, 0x9d, 0x06, 0xb1, 0x2f, 0x53, 0x8b, 0xf1, 0x3b, 0x32, 0x4e, 0x1b,
- 0xc6, 0x7b, 0x09, 0x15, 0x4b, 0x30, 0x3e, 0x88, 0xeb, 0x7b, 0x72, 0x8d, 0x49, 0x53, 0xb2, 0x02,
- 0x93, 0x85, 0xa4, 0x95, 0x67, 0x5a, 0x45, 0xb1, 0x17, 0x49, 0x8b, 0xe6, 0x87, 0x42, 0x53, 0x5b,
- 0x9f, 0x40, 0x6c, 0xa9, 0xa4, 0x84, 0x80, 0x11, 0xfc, 0xa6, 0x2d, 0x5b, 0xa1, 0xc5, 0xf0, 0x23,
- 0x05, 0x52, 0xae, 0x17, 0x67, 0x60, 0x06, 0xaf, 0xcf, 0x79, 0x61, 0x2e, 0xcd, 0x48, 0x0e, 0xf5,
- 0xf5, 0x9c, 0xc1, 0x65, 0x2c, 0xfb, 0xe9, 0xe2, 0x50, 0x11, 0xce, 0x74, 0x29, 0x30, 0x62, 0x32,
- 0xaa, 0xe8, 0x4b, 0xad, 0x65, 0x9a, 0x35, 0xbc, 0xb0, 0x5f, 0x78, 0x27, 0x82, 0xb0, 0x34, 0x5e,
- 0xda, 0xae, 0x56, 0x71, 0xa5, 0x43, 0x2e, 0x86, 0xa1, 0xd8, 0x80, 0x9b, 0xfa, 0x3c, 0x15, 0x0e,
- 0xce, 0xcb, 0xe4, 0x9c, 0xd9, 0xf3, 0x64, 0xa0, 0x76, 0x0d, 0xf8, 0xfb, 0xb2, 0x96, 0x0e, 0xce,
- 0xd7, 0xc8, 0x59, 0x27, 0x96, 0x4b, 0x8a, 0xc6, 0x53, 0x30, 0x75, 0x4e, 0xa6, 0x4d, 0x95, 0xc9,
- 0x86, 0x7c, 0x24, 0xf7, 0x42, 0x07, 0xdd, 0x15, 0xd2, 0x4d, 0x12, 0xb8, 0x8c, 0x1c, 0xba, 0x8e,
- 0xc2, 0xc8, 0xa6, 0xd7, 0x92, 0x0e, 0x8a, 0xab, 0xa4, 0x18, 0xc6, 0xf5, 0x88, 0x2e, 0xc2, 0x98,
- 0xaf, 0x3a, 0xb7, 0xe4, 0x80, 0x5f, 0x23, 0x7c, 0x94, 0x19, 0x52, 0x24, 0x2a, 0xc9, 0x43, 0x4f,
- 0xbb, 0x44, 0xf0, 0x3a, 0x2b, 0x98, 0x21, 0xc5, 0x00, 0x69, 0x7d, 0x83, 0x15, 0x99, 0x91, 0xcf,
- 0x05, 0x18, 0x55, 0x71, 0xb8, 0xa5, 0x62, 0x97, 0x20, 0xde, 0x24, 0x03, 0x10, 0x82, 0x82, 0x79,
- 0xa8, 0xb9, 0x16, 0xe2, 0xad, 0x6d, 0xde, 0x1e, 0x5c, 0x81, 0x15, 0x98, 0xe4, 0x06, 0x15, 0xa8,
- 0xd8, 0x41, 0xf1, 0x36, 0x29, 0x26, 0x0c, 0x8c, 0x6e, 0x43, 0xcb, 0x4c, 0xfb, 0xd2, 0x45, 0xf2,
- 0x0e, 0xdf, 0x06, 0x21, 0x94, 0xca, 0xa6, 0x8c, 0x5b, 0x67, 0xdd, 0x0c, 0xef, 0x72, 0x2a, 0x99,
- 0x41, 0xc5, 0x12, 0x8c, 0x47, 0x5e, 0x9a, 0x9d, 0xf5, 0x42, 0xa7, 0x72, 0xbc, 0x47, 0x8e, 0xb1,
- 0x12, 0xa2, 0x8c, 0xe4, 0xf1, 0x20, 0x9a, 0xf7, 0x39, 0x23, 0x06, 0x46, 0x5b, 0x2f, 0xd3, 0x5e,
- 0x33, 0x94, 0x8d, 0x41, 0x6c, 0x1f, 0xf0, 0xd6, 0xeb, 0xb0, 0xab, 0xa6, 0x71, 0x1e, 0x6a, 0x59,
- 0x70, 0xc1, 0x49, 0xf3, 0x21, 0x57, 0xba, 0x00, 0x10, 0x7e, 0x00, 0x6e, 0xee, 0x3b, 0x26, 0x1c,
- 0x64, 0x1f, 0x91, 0x6c, 0xb6, 0xcf, 0xa8, 0xa0, 0x96, 0x30, 0xa8, 0xf2, 0x63, 0x6e, 0x09, 0xb2,
- 0xc7, 0xb5, 0x06, 0x33, 0x79, 0x9c, 0x79, 0x9b, 0x83, 0x65, 0xed, 0x13, 0xce, 0x5a, 0x87, 0xad,
- 0x64, 0xed, 0x34, 0xcc, 0x92, 0x71, 0xb0, 0xba, 0x7e, 0xca, 0x8d, 0xb5, 0x43, 0x6f, 0x54, 0xab,
- 0xfb, 0x20, 0x1c, 0x28, 0xd3, 0x79, 0x5e, 0xcb, 0x38, 0x43, 0xa6, 0x11, 0x79, 0x89, 0x83, 0xf9,
- 0x3a, 0x99, 0xb9, 0xe3, 0x2f, 0x97, 0x82, 0x55, 0x2f, 0x41, 0xf9, 0xfd, 0xb0, 0x9f, 0xe5, 0x79,
- 0x9c, 0xca, 0x96, 0xf2, 0xe3, 0xe0, 0x82, 0x6c, 0x3b, 0xa8, 0x3f, 0xeb, 0x29, 0xd5, 0x86, 0x81,
- 0xa3, 0xf9, 0x24, 0xdc, 0x50, 0x9e, 0x55, 0x1a, 0x41, 0x94, 0xa8, 0x54, 0x5b, 0x8c, 0x9f, 0x73,
- 0xa5, 0x4a, 0xee, 0x64, 0x81, 0x89, 0x65, 0x98, 0x28, 0x3e, 0xba, 0x3e, 0x92, 0x5f, 0x90, 0x68,
- 0xbc, 0x4b, 0x51, 0xe3, 0x68, 0xa9, 0x28, 0xf1, 0x52, 0x97, 0xfe, 0xf7, 0x25, 0x37, 0x0e, 0x42,
- 0xa8, 0x71, 0xe8, 0xad, 0x44, 0xe2, 0xb4, 0x77, 0x30, 0x7c, 0xc5, 0x8d, 0x83, 0x19, 0x52, 0xf0,
- 0x81, 0xc1, 0x41, 0xf1, 0x35, 0x2b, 0x98, 0x41, 0xc5, 0x3d, 0xdd, 0x41, 0x9b, 0x4a, 0x3f, 0xc8,
- 0x74, 0xea, 0xe1, 0x6a, 0x8b, 0xea, 0x9b, 0xed, 0xea, 0x21, 0x6c, 0xdd, 0x40, 0xc5, 0x29, 0x98,
- 0xec, 0x39, 0x62, 0xd4, 0x6f, 0xdb, 0x63, 0x5b, 0x95, 0x59, 0xe6, 0xf9, 0xa5, 0xf0, 0xd1, 0x1d,
- 0x6a, 0x46, 0xd5, 0x13, 0x86, 0xb8, 0x13, 0xeb, 0x5e, 0x3d, 0x07, 0xd8, 0x65, 0x17, 0x77, 0xca,
- 0xd2, 0x57, 0x8e, 0x01, 0xe2, 0x04, 0x8c, 0x57, 0xce, 0x00, 0x76, 0xd5, 0x63, 0xa4, 0x1a, 0x33,
- 0x8f, 0x00, 0xe2, 0x08, 0x0c, 0xe1, 0x3c, 0xb7, 0xe3, 0x8f, 0x13, 0x5e, 0x2c, 0x17, 0xc7, 0x60,
- 0x84, 0xe7, 0xb8, 0x1d, 0x7d, 0x82, 0xd0, 0x12, 0x41, 0x9c, 0x67, 0xb8, 0x1d, 0x7f, 0x92, 0x71,
- 0x46, 0x10, 0x77, 0x4f, 0xe1, 0xb7, 0x4f, 0x0f, 0x51, 0x1f, 0xe6, 0xdc, 0xcd, 0xc3, 0x30, 0x0d,
- 0x6f, 0x3b, 0xfd, 0x14, 0xfd, 0x38, 0x13, 0xe2, 0x0e, 0xd8, 0xe7, 0x98, 0xf0, 0x67, 0x08, 0xed,
- 0xac, 0x17, 0x4b, 0x30, 0x6a, 0x0c, 0x6c, 0x3b, 0xfe, 0x2c, 0xe1, 0x26, 0x85, 0xa1, 0xd3, 0xc0,
- 0xb6, 0x0b, 0x9e, 0xe3, 0xd0, 0x89, 0xc0, 0xb4, 0xf1, 0xac, 0xb6, 0xd3, 0xcf, 0x73, 0xd6, 0x19,
- 0x11, 0x0b, 0x50, 0x2b, 0xfb, 0xaf, 0x9d, 0x7f, 0x81, 0xf8, 0x2e, 0x83, 0x19, 0x30, 0xfa, 0xbf,
- 0x5d, 0xf1, 0x22, 0x67, 0xc0, 0xa0, 0x70, 0x1b, 0xf5, 0xce, 0x74, 0xbb, 0xe9, 0x25, 0xde, 0x46,
- 0x3d, 0x23, 0x1d, 0xab, 0x59, 0xb4, 0x41, 0xbb, 0xe2, 0x65, 0xae, 0x66, 0xb1, 0x1e, 0xc3, 0xe8,
- 0x1d, 0x92, 0x76, 0xc7, 0x2b, 0x1c, 0x46, 0xcf, 0x8c, 0x14, 0x6b, 0x50, 0xdf, 0x3b, 0x20, 0xed,
- 0xbe, 0x57, 0xc9, 0x37, 0xb5, 0x67, 0x3e, 0x8a, 0xfb, 0x60, 0xb6, 0xff, 0x70, 0xb4, 0x5b, 0x2f,
- 0xed, 0xf4, 0xbc, 0xce, 0x98, 0xb3, 0x51, 0x9c, 0xee, 0x76, 0x59, 0x73, 0x30, 0xda, 0xb5, 0x97,
- 0x77, 0xaa, 0x8d, 0xd6, 0x9c, 0x8b, 0x62, 0x11, 0xa0, 0x3b, 0x93, 0xec, 0xae, 0x2b, 0xe4, 0x32,
- 0x20, 0xdc, 0x1a, 0x34, 0x92, 0xec, 0xfc, 0x55, 0xde, 0x1a, 0x44, 0xe0, 0xd6, 0xe0, 0x69, 0x64,
- 0xa7, 0xaf, 0xf1, 0xd6, 0x60, 0x44, 0xcc, 0xc3, 0x48, 0x9c, 0x87, 0x21, 0x3e, 0x5b, 0xf5, 0x5b,
- 0xfb, 0x8c, 0x1b, 0x19, 0xb6, 0x19, 0xfe, 0x65, 0x97, 0x60, 0x06, 0xc4, 0x11, 0xd8, 0x27, 0xa3,
- 0xa6, 0x6c, 0xdb, 0xc8, 0x5f, 0x77, 0xb9, 0x9f, 0xe0, 0x6a, 0xb1, 0x00, 0xd0, 0x79, 0x99, 0xc6,
- 0x28, 0x6c, 0xec, 0x6f, 0xbb, 0x9d, 0xf7, 0x7a, 0x03, 0xe9, 0x0a, 0x8a, 0xb7, 0x71, 0x8b, 0x60,
- 0xbb, 0x2a, 0x28, 0x5e, 0xc0, 0x8f, 0xc2, 0xf0, 0x43, 0x99, 0x8a, 0xb5, 0xe7, 0xdb, 0xe8, 0xdf,
- 0x89, 0xe6, 0xf5, 0x98, 0xb0, 0x48, 0xa5, 0x52, 0x7b, 0x7e, 0x66, 0x63, 0xff, 0x20, 0xb6, 0x04,
- 0x10, 0x6e, 0x79, 0x99, 0x76, 0xb9, 0xef, 0x3f, 0x19, 0x66, 0x00, 0x83, 0xc6, 0xeb, 0x87, 0xe5,
- 0x96, 0x8d, 0xfd, 0x8b, 0x83, 0xa6, 0xf5, 0xe2, 0x18, 0xd4, 0xf0, 0xb2, 0xf8, 0x3f, 0x84, 0x0d,
- 0xfe, 0x9b, 0xe0, 0x2e, 0x81, 0xbf, 0x9c, 0xe9, 0xb6, 0x0e, 0xec, 0xc9, 0xfe, 0x87, 0x2a, 0xcd,
- 0xeb, 0xc5, 0x22, 0x8c, 0x66, 0xba, 0xdd, 0xce, 0xe9, 0x44, 0x63, 0xc1, 0xff, 0xdd, 0x2d, 0x5f,
- 0x72, 0x4b, 0xe6, 0xf8, 0x21, 0x98, 0x6e, 0xa9, 0xa8, 0x17, 0x3c, 0x0e, 0x2b, 0x6a, 0x45, 0xad,
- 0x15, 0xbb, 0xe8, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x9c, 0xec, 0xd8, 0x50, 0x13, 0x00,
- 0x00,
+ proto.RegisterExtension(E_Wktpointer)
+}
+
+func init() { proto.RegisterFile("gogo.proto", fileDescriptor_gogo_b95f77e237336c7c) }
+
+var fileDescriptor_gogo_b95f77e237336c7c = []byte{
+ // 1328 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x98, 0x49, 0x6f, 0x1c, 0x45,
+ 0x14, 0x80, 0x85, 0x48, 0x64, 0x4f, 0x79, 0x8b, 0xc7, 0xc6, 0x84, 0x08, 0x44, 0xe0, 0xc4, 0xc9,
+ 0x3e, 0x45, 0x28, 0x65, 0x45, 0x96, 0x63, 0x39, 0x56, 0x10, 0x0e, 0xc6, 0x89, 0xc3, 0x76, 0x18,
+ 0xf5, 0xf4, 0x94, 0xdb, 0x8d, 0xbb, 0xbb, 0x9a, 0xee, 0xea, 0x10, 0xe7, 0x86, 0xc2, 0x22, 0x84,
+ 0xd8, 0x91, 0x20, 0x21, 0x09, 0x04, 0xc4, 0xbe, 0x86, 0x7d, 0xb9, 0x70, 0x61, 0xb9, 0xf2, 0x1f,
+ 0xb8, 0x00, 0x66, 0xf7, 0xcd, 0x17, 0xf4, 0xba, 0xdf, 0xeb, 0xa9, 0x69, 0x8f, 0x54, 0x35, 0xb7,
+ 0xf6, 0xb8, 0xbe, 0x6f, 0xaa, 0xdf, 0xeb, 0x7a, 0xef, 0x4d, 0x33, 0xe6, 0x49, 0x4f, 0x4e, 0xc6,
+ 0x89, 0x54, 0xb2, 0x5e, 0x83, 0xeb, 0xfc, 0x72, 0xdf, 0x7e, 0x4f, 0x4a, 0x2f, 0x10, 0x53, 0xf9,
+ 0x5f, 0xcd, 0x6c, 0x75, 0xaa, 0x25, 0x52, 0x37, 0xf1, 0x63, 0x25, 0x93, 0x62, 0x31, 0x3f, 0xc6,
+ 0xc6, 0x70, 0x71, 0x43, 0x44, 0x59, 0xd8, 0x88, 0x13, 0xb1, 0xea, 0x9f, 0xae, 0x5f, 0x3f, 0x59,
+ 0x90, 0x93, 0x44, 0x4e, 0xce, 0x47, 0x59, 0x78, 0x47, 0xac, 0x7c, 0x19, 0xa5, 0x7b, 0xaf, 0xfc,
+ 0x72, 0xf5, 0xfe, 0xab, 0x6e, 0xe9, 0x5f, 0x1e, 0x45, 0x14, 0xfe, 0xb7, 0x94, 0x83, 0x7c, 0x99,
+ 0x5d, 0xd3, 0xe1, 0x4b, 0x55, 0xe2, 0x47, 0x9e, 0x48, 0x0c, 0xc6, 0xef, 0xd1, 0x38, 0xa6, 0x19,
+ 0x8f, 0x23, 0xca, 0xe7, 0xd8, 0x50, 0x2f, 0xae, 0x1f, 0xd0, 0x35, 0x28, 0x74, 0xc9, 0x02, 0x1b,
+ 0xc9, 0x25, 0x6e, 0x96, 0x2a, 0x19, 0x46, 0x4e, 0x28, 0x0c, 0x9a, 0x1f, 0x73, 0x4d, 0x6d, 0x79,
+ 0x18, 0xb0, 0xb9, 0x92, 0xe2, 0x9c, 0xf5, 0xc3, 0x27, 0x2d, 0xe1, 0x06, 0x06, 0xc3, 0x4f, 0xb8,
+ 0x91, 0x72, 0x3d, 0x3f, 0xc9, 0xc6, 0xe1, 0xfa, 0x94, 0x13, 0x64, 0x42, 0xdf, 0xc9, 0x4d, 0x5d,
+ 0x3d, 0x27, 0x61, 0x19, 0xc9, 0x7e, 0x3e, 0xbb, 0x2b, 0xdf, 0xce, 0x58, 0x29, 0xd0, 0xf6, 0xa4,
+ 0x65, 0xd1, 0x13, 0x4a, 0x89, 0x24, 0x6d, 0x38, 0x41, 0xb7, 0xed, 0x1d, 0xf1, 0x83, 0xd2, 0x78,
+ 0x6e, 0xb3, 0x33, 0x8b, 0x0b, 0x05, 0x39, 0x1b, 0x04, 0x7c, 0x85, 0x5d, 0xdb, 0xe5, 0xa9, 0xb0,
+ 0x70, 0x9e, 0x47, 0xe7, 0xf8, 0x8e, 0x27, 0x03, 0xb4, 0x4b, 0x8c, 0x3e, 0x2f, 0x73, 0x69, 0xe1,
+ 0x7c, 0x19, 0x9d, 0x75, 0x64, 0x29, 0xa5, 0x60, 0xbc, 0x8d, 0x8d, 0x9e, 0x12, 0x49, 0x53, 0xa6,
+ 0xa2, 0x21, 0x1e, 0xc8, 0x9c, 0xc0, 0x42, 0x77, 0x01, 0x75, 0x23, 0x08, 0xce, 0x03, 0x07, 0xae,
+ 0x83, 0xac, 0x7f, 0xd5, 0x71, 0x85, 0x85, 0xe2, 0x22, 0x2a, 0xfa, 0x60, 0x3d, 0xa0, 0xb3, 0x6c,
+ 0xd0, 0x93, 0xc5, 0x2d, 0x59, 0xe0, 0x97, 0x10, 0x1f, 0x20, 0x06, 0x15, 0xb1, 0x8c, 0xb3, 0xc0,
+ 0x51, 0x36, 0x3b, 0x78, 0x85, 0x14, 0xc4, 0xa0, 0xa2, 0x87, 0xb0, 0xbe, 0x4a, 0x8a, 0x54, 0x8b,
+ 0xe7, 0x0c, 0x1b, 0x90, 0x51, 0xb0, 0x21, 0x23, 0x9b, 0x4d, 0x5c, 0x46, 0x03, 0x43, 0x04, 0x04,
+ 0xd3, 0xac, 0x66, 0x9b, 0x88, 0x37, 0x36, 0xe9, 0x78, 0x50, 0x06, 0x16, 0xd8, 0x08, 0x15, 0x28,
+ 0x5f, 0x46, 0x16, 0x8a, 0x37, 0x51, 0x31, 0xac, 0x61, 0x78, 0x1b, 0x4a, 0xa4, 0xca, 0x13, 0x36,
+ 0x92, 0xb7, 0xe8, 0x36, 0x10, 0xc1, 0x50, 0x36, 0x45, 0xe4, 0xae, 0xd9, 0x19, 0xde, 0xa6, 0x50,
+ 0x12, 0x03, 0x8a, 0x39, 0x36, 0x14, 0x3a, 0x49, 0xba, 0xe6, 0x04, 0x56, 0xe9, 0x78, 0x07, 0x1d,
+ 0x83, 0x25, 0x84, 0x11, 0xc9, 0xa2, 0x5e, 0x34, 0xef, 0x52, 0x44, 0x34, 0x0c, 0x8f, 0x5e, 0xaa,
+ 0x9c, 0x66, 0x20, 0x1a, 0xbd, 0xd8, 0xde, 0xa3, 0xa3, 0x57, 0xb0, 0x8b, 0xba, 0x71, 0x9a, 0xd5,
+ 0x52, 0xff, 0x8c, 0x95, 0xe6, 0x7d, 0xca, 0x74, 0x0e, 0x00, 0x7c, 0x0f, 0xbb, 0xae, 0x6b, 0x9b,
+ 0xb0, 0x90, 0x7d, 0x80, 0xb2, 0x89, 0x2e, 0xad, 0x02, 0x4b, 0x42, 0xaf, 0xca, 0x0f, 0xa9, 0x24,
+ 0x88, 0x8a, 0x6b, 0x89, 0x8d, 0x67, 0x51, 0xea, 0xac, 0xf6, 0x16, 0xb5, 0x8f, 0x28, 0x6a, 0x05,
+ 0xdb, 0x11, 0xb5, 0x13, 0x6c, 0x02, 0x8d, 0xbd, 0xe5, 0xf5, 0x63, 0x2a, 0xac, 0x05, 0xbd, 0xd2,
+ 0x99, 0xdd, 0xfb, 0xd8, 0xbe, 0x32, 0x9c, 0xa7, 0x95, 0x88, 0x52, 0x60, 0x1a, 0xa1, 0x13, 0x5b,
+ 0x98, 0xaf, 0xa0, 0x99, 0x2a, 0xfe, 0x7c, 0x29, 0x58, 0x74, 0x62, 0x90, 0xdf, 0xcd, 0xf6, 0x92,
+ 0x3c, 0x8b, 0x12, 0xe1, 0x4a, 0x2f, 0xf2, 0xcf, 0x88, 0x96, 0x85, 0xfa, 0x93, 0x4a, 0xaa, 0x56,
+ 0x34, 0x1c, 0xcc, 0x47, 0xd9, 0x9e, 0x72, 0x56, 0x69, 0xf8, 0x61, 0x2c, 0x13, 0x65, 0x30, 0x7e,
+ 0x4a, 0x99, 0x2a, 0xb9, 0xa3, 0x39, 0xc6, 0xe7, 0xd9, 0x70, 0xfe, 0xa7, 0xed, 0x23, 0xf9, 0x19,
+ 0x8a, 0x86, 0xda, 0x14, 0x16, 0x0e, 0x57, 0x86, 0xb1, 0x93, 0xd8, 0xd4, 0xbf, 0xcf, 0xa9, 0x70,
+ 0x20, 0x82, 0x85, 0x43, 0x6d, 0xc4, 0x02, 0xba, 0xbd, 0x85, 0xe1, 0x0b, 0x2a, 0x1c, 0xc4, 0xa0,
+ 0x82, 0x06, 0x06, 0x0b, 0xc5, 0x97, 0xa4, 0x20, 0x06, 0x14, 0x77, 0xb6, 0x1b, 0x6d, 0x22, 0x3c,
+ 0x3f, 0x55, 0x89, 0x03, 0xab, 0x0d, 0xaa, 0xaf, 0x36, 0x3b, 0x87, 0xb0, 0x65, 0x0d, 0x85, 0x4a,
+ 0x14, 0x8a, 0x34, 0x75, 0x3c, 0x01, 0x13, 0x87, 0xc5, 0xc6, 0xbe, 0xa6, 0x4a, 0xa4, 0x61, 0xb0,
+ 0x37, 0x6d, 0x42, 0x84, 0xb0, 0xbb, 0x8e, 0xbb, 0x66, 0xa3, 0xfb, 0xa6, 0xb2, 0xb9, 0xe3, 0xc4,
+ 0x82, 0x53, 0x9b, 0x7f, 0xb2, 0x68, 0x5d, 0x6c, 0x58, 0x3d, 0x9d, 0xdf, 0x56, 0xe6, 0x9f, 0x95,
+ 0x82, 0x2c, 0x6a, 0xc8, 0x48, 0x65, 0x9e, 0xaa, 0xdf, 0xb8, 0xc3, 0xb5, 0x58, 0xdc, 0x17, 0xe9,
+ 0x1e, 0xda, 0xc2, 0xfb, 0xed, 0x1c, 0xa7, 0xf8, 0xed, 0xf0, 0x90, 0x77, 0x0e, 0x3d, 0x66, 0xd9,
+ 0xd9, 0xad, 0xf2, 0x39, 0xef, 0x98, 0x79, 0xf8, 0x11, 0x36, 0xd4, 0x31, 0xf0, 0x98, 0x55, 0x0f,
+ 0xa3, 0x6a, 0x50, 0x9f, 0x77, 0xf8, 0x01, 0xb6, 0x0b, 0x86, 0x17, 0x33, 0xfe, 0x08, 0xe2, 0xf9,
+ 0x72, 0x7e, 0x88, 0xf5, 0xd3, 0xd0, 0x62, 0x46, 0x1f, 0x45, 0xb4, 0x44, 0x00, 0xa7, 0x81, 0xc5,
+ 0x8c, 0x3f, 0x46, 0x38, 0x21, 0x80, 0xdb, 0x87, 0xf0, 0xbb, 0x27, 0x76, 0x61, 0xd3, 0xa1, 0xd8,
+ 0x4d, 0xb3, 0x3e, 0x9c, 0x54, 0xcc, 0xf4, 0xe3, 0xf8, 0xe5, 0x44, 0xf0, 0x5b, 0xd9, 0x6e, 0xcb,
+ 0x80, 0x3f, 0x89, 0x68, 0xb1, 0x9e, 0xcf, 0xb1, 0x01, 0x6d, 0x3a, 0x31, 0xe3, 0x4f, 0x21, 0xae,
+ 0x53, 0xb0, 0x75, 0x9c, 0x4e, 0xcc, 0x82, 0xa7, 0x69, 0xeb, 0x48, 0x40, 0xd8, 0x68, 0x30, 0x31,
+ 0xd3, 0xcf, 0x50, 0xd4, 0x09, 0xe1, 0x33, 0xac, 0x56, 0x36, 0x1b, 0x33, 0xff, 0x2c, 0xf2, 0x6d,
+ 0x06, 0x22, 0xa0, 0x35, 0x3b, 0xb3, 0xe2, 0x39, 0x8a, 0x80, 0x46, 0xc1, 0x31, 0xaa, 0x0e, 0x30,
+ 0x66, 0xd3, 0xf3, 0x74, 0x8c, 0x2a, 0xf3, 0x0b, 0x64, 0x33, 0xaf, 0xf9, 0x66, 0xc5, 0x0b, 0x94,
+ 0xcd, 0x7c, 0x3d, 0x6c, 0xa3, 0x3a, 0x11, 0x98, 0x1d, 0x2f, 0xd2, 0x36, 0x2a, 0x03, 0x01, 0x5f,
+ 0x62, 0xf5, 0x9d, 0xd3, 0x80, 0xd9, 0xf7, 0x12, 0xfa, 0x46, 0x77, 0x0c, 0x03, 0xfc, 0x2e, 0x36,
+ 0xd1, 0x7d, 0x12, 0x30, 0x5b, 0xcf, 0x6d, 0x55, 0x7e, 0xbb, 0xe9, 0x83, 0x00, 0x3f, 0xd1, 0x6e,
+ 0x29, 0xfa, 0x14, 0x60, 0xd6, 0x9e, 0xdf, 0xea, 0x2c, 0xdc, 0xfa, 0x10, 0xc0, 0x67, 0x19, 0x6b,
+ 0x37, 0x60, 0xb3, 0xeb, 0x02, 0xba, 0x34, 0x08, 0x8e, 0x06, 0xf6, 0x5f, 0x33, 0x7f, 0x91, 0x8e,
+ 0x06, 0x12, 0x70, 0x34, 0xa8, 0xf5, 0x9a, 0xe9, 0x4b, 0x74, 0x34, 0x08, 0x81, 0x27, 0x5b, 0xeb,
+ 0x6e, 0x66, 0xc3, 0x65, 0x7a, 0xb2, 0x35, 0x8a, 0x1f, 0x63, 0xa3, 0x3b, 0x1a, 0xa2, 0x59, 0xf5,
+ 0x1a, 0xaa, 0xf6, 0x54, 0xfb, 0xa1, 0xde, 0xbc, 0xb0, 0x19, 0x9a, 0x6d, 0xaf, 0x57, 0x9a, 0x17,
+ 0xf6, 0x42, 0x3e, 0xcd, 0xfa, 0xa3, 0x2c, 0x08, 0xe0, 0xf0, 0xd4, 0x6f, 0xe8, 0xd2, 0x4d, 0x45,
+ 0xd0, 0x22, 0xc5, 0xaf, 0xdb, 0x18, 0x1d, 0x02, 0xf8, 0x01, 0xb6, 0x5b, 0x84, 0x4d, 0xd1, 0x32,
+ 0x91, 0xbf, 0x6d, 0x53, 0xc1, 0x84, 0xd5, 0x7c, 0x86, 0xb1, 0xe2, 0xd5, 0x08, 0x84, 0xd9, 0xc4,
+ 0xfe, 0xbe, 0x5d, 0xbc, 0xa5, 0xd1, 0x90, 0xb6, 0x20, 0x4f, 0x8a, 0x41, 0xb0, 0xd9, 0x29, 0xc8,
+ 0x33, 0x72, 0x90, 0xf5, 0xdd, 0x9f, 0xca, 0x48, 0x39, 0x9e, 0x89, 0xfe, 0x03, 0x69, 0x5a, 0x0f,
+ 0x01, 0x0b, 0x65, 0x22, 0x94, 0xe3, 0xa5, 0x26, 0xf6, 0x4f, 0x64, 0x4b, 0x00, 0x60, 0xd7, 0x49,
+ 0x95, 0xcd, 0x7d, 0xff, 0x45, 0x30, 0x01, 0xb0, 0x69, 0xb8, 0x5e, 0x17, 0x1b, 0x26, 0xf6, 0x6f,
+ 0xda, 0x34, 0xae, 0xe7, 0x87, 0x58, 0x0d, 0x2e, 0xf3, 0xb7, 0x4a, 0x26, 0xf8, 0x1f, 0x84, 0xdb,
+ 0x04, 0x7c, 0x73, 0xaa, 0x5a, 0xca, 0x37, 0x07, 0xfb, 0x5f, 0xcc, 0x34, 0xad, 0xe7, 0xb3, 0x6c,
+ 0x20, 0x55, 0xad, 0x56, 0x86, 0xf3, 0xa9, 0x01, 0xff, 0x6f, 0xbb, 0x7c, 0x65, 0x51, 0x32, 0x90,
+ 0xed, 0x07, 0xd7, 0x55, 0x2c, 0xfd, 0x48, 0x89, 0xc4, 0x64, 0xd8, 0x42, 0x83, 0x86, 0x1c, 0x9e,
+ 0x67, 0x63, 0xae, 0x0c, 0xab, 0xdc, 0x61, 0xb6, 0x20, 0x17, 0xe4, 0x52, 0x5e, 0x67, 0xee, 0xbd,
+ 0xd9, 0xf3, 0xd5, 0x5a, 0xd6, 0x9c, 0x74, 0x65, 0x38, 0x05, 0xbf, 0x3c, 0xda, 0x2f, 0x54, 0xcb,
+ 0xdf, 0x21, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x9c, 0xaf, 0x70, 0x4e, 0x83, 0x15, 0x00, 0x00,
}
diff --git a/vendor/github.com/gogo/protobuf/gogoproto/gogo.proto b/vendor/github.com/gogo/protobuf/gogoproto/gogo.proto
index fbca44cd4..b80c85653 100644
--- a/vendor/github.com/gogo/protobuf/gogoproto/gogo.proto
+++ b/vendor/github.com/gogo/protobuf/gogoproto/gogo.proto
@@ -33,6 +33,7 @@ import "google/protobuf/descriptor.proto";
option java_package = "com.google.protobuf";
option java_outer_classname = "GoGoProtos";
+option go_package = "github.com/gogo/protobuf/gogoproto";
extend google.protobuf.EnumOptions {
optional bool goproto_enum_prefix = 62001;
@@ -82,6 +83,10 @@ extend google.protobuf.FileOptions {
optional bool enumdecl_all = 63031;
optional bool goproto_registration = 63032;
+ optional bool messagename_all = 63033;
+
+ optional bool goproto_sizecache_all = 63034;
+ optional bool goproto_unkeyed_all = 63035;
}
extend google.protobuf.MessageOptions {
@@ -114,6 +119,11 @@ extend google.protobuf.MessageOptions {
optional bool compare = 64029;
optional bool typedecl = 64030;
+
+ optional bool messagename = 64033;
+
+ optional bool goproto_sizecache = 64034;
+ optional bool goproto_unkeyed = 64035;
}
extend google.protobuf.FieldOptions {
@@ -129,4 +139,6 @@ extend google.protobuf.FieldOptions {
optional bool stdtime = 65010;
optional bool stdduration = 65011;
+ optional bool wktpointer = 65012;
+
}
diff --git a/vendor/github.com/gogo/protobuf/gogoproto/helper.go b/vendor/github.com/gogo/protobuf/gogoproto/helper.go
index 6b851c562..390d4e4be 100644
--- a/vendor/github.com/gogo/protobuf/gogoproto/helper.go
+++ b/vendor/github.com/gogo/protobuf/gogoproto/helper.go
@@ -47,6 +47,55 @@ func IsStdDuration(field *google_protobuf.FieldDescriptorProto) bool {
return proto.GetBoolExtension(field.Options, E_Stdduration, false)
}
+func IsStdDouble(field *google_protobuf.FieldDescriptorProto) bool {
+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.DoubleValue"
+}
+
+func IsStdFloat(field *google_protobuf.FieldDescriptorProto) bool {
+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.FloatValue"
+}
+
+func IsStdInt64(field *google_protobuf.FieldDescriptorProto) bool {
+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.Int64Value"
+}
+
+func IsStdUInt64(field *google_protobuf.FieldDescriptorProto) bool {
+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.UInt64Value"
+}
+
+func IsStdInt32(field *google_protobuf.FieldDescriptorProto) bool {
+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.Int32Value"
+}
+
+func IsStdUInt32(field *google_protobuf.FieldDescriptorProto) bool {
+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.UInt32Value"
+}
+
+func IsStdBool(field *google_protobuf.FieldDescriptorProto) bool {
+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.BoolValue"
+}
+
+func IsStdString(field *google_protobuf.FieldDescriptorProto) bool {
+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.StringValue"
+}
+
+func IsStdBytes(field *google_protobuf.FieldDescriptorProto) bool {
+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.BytesValue"
+}
+
+func IsStdType(field *google_protobuf.FieldDescriptorProto) bool {
+ return (IsStdTime(field) || IsStdDuration(field) ||
+ IsStdDouble(field) || IsStdFloat(field) ||
+ IsStdInt64(field) || IsStdUInt64(field) ||
+ IsStdInt32(field) || IsStdUInt32(field) ||
+ IsStdBool(field) ||
+ IsStdString(field) || IsStdBytes(field))
+}
+
+func IsWktPtr(field *google_protobuf.FieldDescriptorProto) bool {
+ return proto.GetBoolExtension(field.Options, E_Wktpointer, false)
+}
+
func NeedsNilCheck(proto3 bool, field *google_protobuf.FieldDescriptorProto) bool {
nullable := IsNullable(field)
if field.IsMessage() || IsCustomType(field) {
@@ -334,9 +383,6 @@ func HasExtensionsMap(file *google_protobuf.FileDescriptorProto, message *google
}
func HasUnrecognized(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
- if IsProto3(file) {
- return false
- }
return proto.GetBoolExtension(message.Options, E_GoprotoUnrecognized, proto.GetBoolExtension(file.Options, E_GoprotoUnrecognizedAll, true))
}
@@ -355,3 +401,15 @@ func HasCompare(file *google_protobuf.FileDescriptorProto, message *google_proto
func RegistersGolangProto(file *google_protobuf.FileDescriptorProto) bool {
return proto.GetBoolExtension(file.Options, E_GoprotoRegistration, false)
}
+
+func HasMessageName(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
+ return proto.GetBoolExtension(message.Options, E_Messagename, proto.GetBoolExtension(file.Options, E_MessagenameAll, false))
+}
+
+func HasSizecache(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
+ return proto.GetBoolExtension(message.Options, E_GoprotoSizecache, proto.GetBoolExtension(file.Options, E_GoprotoSizecacheAll, true))
+}
+
+func HasUnkeyed(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
+ return proto.GetBoolExtension(message.Options, E_GoprotoUnkeyed, proto.GetBoolExtension(file.Options, E_GoprotoUnkeyedAll, true))
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/clone.go b/vendor/github.com/gogo/protobuf/proto/clone.go
index 5d4cba4b5..a26b046d9 100644
--- a/vendor/github.com/gogo/protobuf/proto/clone.go
+++ b/vendor/github.com/gogo/protobuf/proto/clone.go
@@ -35,22 +35,39 @@
package proto
import (
+ "fmt"
"log"
"reflect"
"strings"
)
// Clone returns a deep copy of a protocol buffer.
-func Clone(pb Message) Message {
- in := reflect.ValueOf(pb)
+func Clone(src Message) Message {
+ in := reflect.ValueOf(src)
if in.IsNil() {
- return pb
+ return src
}
-
out := reflect.New(in.Type().Elem())
- // out is empty so a merge is a deep copy.
- mergeStruct(out.Elem(), in.Elem())
- return out.Interface().(Message)
+ dst := out.Interface().(Message)
+ Merge(dst, src)
+ return dst
+}
+
+// Merger is the interface representing objects that can merge messages of the same type.
+type Merger interface {
+ // Merge merges src into this message.
+ // Required and optional fields that are set in src will be set to that value in dst.
+ // Elements of repeated fields will be appended.
+ //
+ // Merge may panic if called with a different argument type than the receiver.
+ Merge(src Message)
+}
+
+// generatedMerger is the custom merge method that generated protos will have.
+// We must add this method since a generate Merge method will conflict with
+// many existing protos that have a Merge data field already defined.
+type generatedMerger interface {
+ XXX_Merge(src Message)
}
// Merge merges src into dst.
@@ -58,17 +75,24 @@ func Clone(pb Message) Message {
// Elements of repeated fields will be appended.
// Merge panics if src and dst are not the same type, or if dst is nil.
func Merge(dst, src Message) {
+ if m, ok := dst.(Merger); ok {
+ m.Merge(src)
+ return
+ }
+
in := reflect.ValueOf(src)
out := reflect.ValueOf(dst)
if out.IsNil() {
panic("proto: nil destination")
}
if in.Type() != out.Type() {
- // Explicit test prior to mergeStruct so that mistyped nils will fail
- panic("proto: type mismatch")
+ panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src))
}
if in.IsNil() {
- // Merging nil into non-nil is a quiet no-op
+ return // Merge from nil src is a noop
+ }
+ if m, ok := dst.(generatedMerger); ok {
+ m.XXX_Merge(src)
return
}
mergeStruct(out.Elem(), in.Elem())
@@ -89,7 +113,7 @@ func mergeStruct(out, in reflect.Value) {
bIn := emIn.GetExtensions()
bOut := emOut.GetExtensions()
*bOut = append(*bOut, *bIn...)
- } else if emIn, ok := extendable(in.Addr().Interface()); ok {
+ } else if emIn, err := extendable(in.Addr().Interface()); err == nil {
emOut, _ := extendable(out.Addr().Interface())
mIn, muIn := emIn.extensionsRead()
if mIn != nil {
diff --git a/vendor/github.com/gogo/protobuf/proto/custom_gogo.go b/vendor/github.com/gogo/protobuf/proto/custom_gogo.go
new file mode 100644
index 000000000..24552483c
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/custom_gogo.go
@@ -0,0 +1,39 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// 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.
+//
+// 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.
+
+package proto
+
+import "reflect"
+
+type custom interface {
+ Marshal() ([]byte, error)
+ Unmarshal(data []byte) error
+ Size() int
+}
+
+var customType = reflect.TypeOf((*custom)(nil)).Elem()
diff --git a/vendor/github.com/gogo/protobuf/proto/decode.go b/vendor/github.com/gogo/protobuf/proto/decode.go
index 737f2731d..d9aa3c42d 100644
--- a/vendor/github.com/gogo/protobuf/proto/decode.go
+++ b/vendor/github.com/gogo/protobuf/proto/decode.go
@@ -39,8 +39,6 @@ import (
"errors"
"fmt"
"io"
- "os"
- "reflect"
)
// errOverflow is returned when an integer is too large to be represented.
@@ -50,10 +48,6 @@ var errOverflow = errors.New("proto: integer overflow")
// wire type is encountered. It does not get returned to user code.
var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof")
-// The fundamental decoders that interpret bytes on the wire.
-// Those that take integer types all return uint64 and are
-// therefore of type valueDecoder.
-
// DecodeVarint reads a varint-encoded integer from the slice.
// It returns the integer and the number of bytes consumed, or
// zero if there is not enough.
@@ -267,9 +261,6 @@ func (p *Buffer) DecodeZigzag32() (x uint64, err error) {
return
}
-// These are not ValueDecoders: they produce an array of bytes or a string.
-// bytes, embedded messages
-
// DecodeRawBytes reads a count-delimited byte buffer from the Buffer.
// This is the format used for the bytes protocol buffer
// type and for embedded messages.
@@ -311,81 +302,29 @@ func (p *Buffer) DecodeStringBytes() (s string, err error) {
return string(buf), nil
}
-// Skip the next item in the buffer. Its wire type is decoded and presented as an argument.
-// If the protocol buffer has extensions, and the field matches, add it as an extension.
-// Otherwise, if the XXX_unrecognized field exists, append the skipped data there.
-func (o *Buffer) skipAndSave(t reflect.Type, tag, wire int, base structPointer, unrecField field) error {
- oi := o.index
-
- err := o.skip(t, tag, wire)
- if err != nil {
- return err
- }
-
- if !unrecField.IsValid() {
- return nil
- }
-
- ptr := structPointer_Bytes(base, unrecField)
-
- // Add the skipped field to struct field
- obuf := o.buf
-
- o.buf = *ptr
- o.EncodeVarint(uint64(tag<<3 | wire))
- *ptr = append(o.buf, obuf[oi:o.index]...)
-
- o.buf = obuf
-
- return nil
-}
-
-// Skip the next item in the buffer. Its wire type is decoded and presented as an argument.
-func (o *Buffer) skip(t reflect.Type, tag, wire int) error {
-
- var u uint64
- var err error
-
- switch wire {
- case WireVarint:
- _, err = o.DecodeVarint()
- case WireFixed64:
- _, err = o.DecodeFixed64()
- case WireBytes:
- _, err = o.DecodeRawBytes(false)
- case WireFixed32:
- _, err = o.DecodeFixed32()
- case WireStartGroup:
- for {
- u, err = o.DecodeVarint()
- if err != nil {
- break
- }
- fwire := int(u & 0x7)
- if fwire == WireEndGroup {
- break
- }
- ftag := int(u >> 3)
- err = o.skip(t, ftag, fwire)
- if err != nil {
- break
- }
- }
- default:
- err = fmt.Errorf("proto: can't skip unknown wire type %d for %s", wire, t)
- }
- return err
-}
-
// Unmarshaler is the interface representing objects that can
-// unmarshal themselves. The method should reset the receiver before
-// decoding starts. The argument points to data that may be
+// unmarshal themselves. The argument points to data that may be
// overwritten, so implementations should not keep references to the
// buffer.
+// Unmarshal implementations should not clear the receiver.
+// Any unmarshaled data should be merged into the receiver.
+// Callers of Unmarshal that do not want to retain existing data
+// should Reset the receiver before calling Unmarshal.
type Unmarshaler interface {
Unmarshal([]byte) error
}
+// newUnmarshaler is the interface representing objects that can
+// unmarshal themselves. The semantics are identical to Unmarshaler.
+//
+// This exists to support protoc-gen-go generated messages.
+// The proto package will stop type-asserting to this interface in the future.
+//
+// DO NOT DEPEND ON THIS.
+type newUnmarshaler interface {
+ XXX_Unmarshal([]byte) error
+}
+
// Unmarshal parses the protocol buffer representation in buf and places the
// decoded result in pb. If the struct underlying pb does not match
// the data in buf, the results can be unpredictable.
@@ -395,7 +334,13 @@ type Unmarshaler interface {
// to preserve and append to existing data.
func Unmarshal(buf []byte, pb Message) error {
pb.Reset()
- return UnmarshalMerge(buf, pb)
+ if u, ok := pb.(newUnmarshaler); ok {
+ return u.XXX_Unmarshal(buf)
+ }
+ if u, ok := pb.(Unmarshaler); ok {
+ return u.Unmarshal(buf)
+ }
+ return NewBuffer(buf).Unmarshal(pb)
}
// UnmarshalMerge parses the protocol buffer representation in buf and
@@ -405,8 +350,16 @@ func Unmarshal(buf []byte, pb Message) error {
// UnmarshalMerge merges into existing data in pb.
// Most code should use Unmarshal instead.
func UnmarshalMerge(buf []byte, pb Message) error {
- // If the object can unmarshal itself, let it.
+ if u, ok := pb.(newUnmarshaler); ok {
+ return u.XXX_Unmarshal(buf)
+ }
if u, ok := pb.(Unmarshaler); ok {
+ // NOTE: The history of proto have unfortunately been inconsistent
+ // whether Unmarshaler should or should not implicitly clear itself.
+ // Some implementations do, most do not.
+ // Thus, calling this here may or may not do what people want.
+ //
+ // See https://github.com/golang/protobuf/issues/424
return u.Unmarshal(buf)
}
return NewBuffer(buf).Unmarshal(pb)
@@ -422,12 +375,17 @@ func (p *Buffer) DecodeMessage(pb Message) error {
}
// DecodeGroup reads a tag-delimited group from the Buffer.
+// StartGroup tag is already consumed. This function consumes
+// EndGroup tag.
func (p *Buffer) DecodeGroup(pb Message) error {
- typ, base, err := getbase(pb)
- if err != nil {
- return err
+ b := p.buf[p.index:]
+ x, y := findEndGroup(b)
+ if x < 0 {
+ return io.ErrUnexpectedEOF
}
- return p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), true, base)
+ err := Unmarshal(b[:x], pb)
+ p.index += y
+ return err
}
// Unmarshal parses the protocol buffer representation in the
@@ -438,541 +396,33 @@ func (p *Buffer) DecodeGroup(pb Message) error {
// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal.
func (p *Buffer) Unmarshal(pb Message) error {
// If the object can unmarshal itself, let it.
- if u, ok := pb.(Unmarshaler); ok {
- err := u.Unmarshal(p.buf[p.index:])
+ if u, ok := pb.(newUnmarshaler); ok {
+ err := u.XXX_Unmarshal(p.buf[p.index:])
p.index = len(p.buf)
return err
}
-
- typ, base, err := getbase(pb)
- if err != nil {
- return err
- }
-
- err = p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), false, base)
-
- if collectStats {
- stats.Decode++
- }
-
- return err
-}
-
-// unmarshalType does the work of unmarshaling a structure.
-func (o *Buffer) unmarshalType(st reflect.Type, prop *StructProperties, is_group bool, base structPointer) error {
- var state errorState
- required, reqFields := prop.reqCount, uint64(0)
-
- var err error
- for err == nil && o.index < len(o.buf) {
- oi := o.index
- var u uint64
- u, err = o.DecodeVarint()
- if err != nil {
- break
- }
- wire := int(u & 0x7)
- if wire == WireEndGroup {
- if is_group {
- if required > 0 {
- // Not enough information to determine the exact field.
- // (See below.)
- return &RequiredNotSetError{"{Unknown}"}
- }
- return nil // input is satisfied
- }
- return fmt.Errorf("proto: %s: wiretype end group for non-group", st)
- }
- tag := int(u >> 3)
- if tag <= 0 {
- return fmt.Errorf("proto: %s: illegal tag %d (wire type %d)", st, tag, wire)
- }
- fieldnum, ok := prop.decoderTags.get(tag)
- if !ok {
- // Maybe it's an extension?
- if prop.extendable {
- if e, eok := structPointer_Interface(base, st).(extensionsBytes); eok {
- if isExtensionField(e, int32(tag)) {
- if err = o.skip(st, tag, wire); err == nil {
- ext := e.GetExtensions()
- *ext = append(*ext, o.buf[oi:o.index]...)
- }
- continue
- }
- } else if e, _ := extendable(structPointer_Interface(base, st)); isExtensionField(e, int32(tag)) {
- if err = o.skip(st, tag, wire); err == nil {
- extmap := e.extensionsWrite()
- ext := extmap[int32(tag)] // may be missing
- ext.enc = append(ext.enc, o.buf[oi:o.index]...)
- extmap[int32(tag)] = ext
- }
- continue
- }
- }
- // Maybe it's a oneof?
- if prop.oneofUnmarshaler != nil {
- m := structPointer_Interface(base, st).(Message)
- // First return value indicates whether tag is a oneof field.
- ok, err = prop.oneofUnmarshaler(m, tag, wire, o)
- if err == ErrInternalBadWireType {
- // Map the error to something more descriptive.
- // Do the formatting here to save generated code space.
- err = fmt.Errorf("bad wiretype for oneof field in %T", m)
- }
- if ok {
- continue
- }
- }
- err = o.skipAndSave(st, tag, wire, base, prop.unrecField)
- continue
- }
- p := prop.Prop[fieldnum]
-
- if p.dec == nil {
- fmt.Fprintf(os.Stderr, "proto: no protobuf decoder for %s.%s\n", st, st.Field(fieldnum).Name)
- continue
- }
- dec := p.dec
- if wire != WireStartGroup && wire != p.WireType {
- if wire == WireBytes && p.packedDec != nil {
- // a packable field
- dec = p.packedDec
- } else {
- err = fmt.Errorf("proto: bad wiretype for field %s.%s: got wiretype %d, want %d", st, st.Field(fieldnum).Name, wire, p.WireType)
- continue
- }
- }
- decErr := dec(o, p, base)
- if decErr != nil && !state.shouldContinue(decErr, p) {
- err = decErr
- }
- if err == nil && p.Required {
- // Successfully decoded a required field.
- if tag <= 64 {
- // use bitmap for fields 1-64 to catch field reuse.
- var mask uint64 = 1 << uint64(tag-1)
- if reqFields&mask == 0 {
- // new required field
- reqFields |= mask
- required--
- }
- } else {
- // This is imprecise. It can be fooled by a required field
- // with a tag > 64 that is encoded twice; that's very rare.
- // A fully correct implementation would require allocating
- // a data structure, which we would like to avoid.
- required--
- }
- }
- }
- if err == nil {
- if is_group {
- return io.ErrUnexpectedEOF
- }
- if state.err != nil {
- return state.err
- }
- if required > 0 {
- // Not enough information to determine the exact field. If we use extra
- // CPU, we could determine the field only if the missing required field
- // has a tag <= 64 and we check reqFields.
- return &RequiredNotSetError{"{Unknown}"}
- }
- }
- return err
-}
-
-// Individual type decoders
-// For each,
-// u is the decoded value,
-// v is a pointer to the field (pointer) in the struct
-
-// Sizes of the pools to allocate inside the Buffer.
-// The goal is modest amortization and allocation
-// on at least 16-byte boundaries.
-const (
- boolPoolSize = 16
- uint32PoolSize = 8
- uint64PoolSize = 4
-)
-
-// Decode a bool.
-func (o *Buffer) dec_bool(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- if len(o.bools) == 0 {
- o.bools = make([]bool, boolPoolSize)
- }
- o.bools[0] = u != 0
- *structPointer_Bool(base, p.field) = &o.bools[0]
- o.bools = o.bools[1:]
- return nil
-}
-
-func (o *Buffer) dec_proto3_bool(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- *structPointer_BoolVal(base, p.field) = u != 0
- return nil
-}
-
-// Decode an int32.
-func (o *Buffer) dec_int32(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- word32_Set(structPointer_Word32(base, p.field), o, uint32(u))
- return nil
-}
-
-func (o *Buffer) dec_proto3_int32(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- word32Val_Set(structPointer_Word32Val(base, p.field), uint32(u))
- return nil
-}
-
-// Decode an int64.
-func (o *Buffer) dec_int64(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- word64_Set(structPointer_Word64(base, p.field), o, u)
- return nil
-}
-
-func (o *Buffer) dec_proto3_int64(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- word64Val_Set(structPointer_Word64Val(base, p.field), o, u)
- return nil
-}
-
-// Decode a string.
-func (o *Buffer) dec_string(p *Properties, base structPointer) error {
- s, err := o.DecodeStringBytes()
- if err != nil {
- return err
- }
- *structPointer_String(base, p.field) = &s
- return nil
-}
-
-func (o *Buffer) dec_proto3_string(p *Properties, base structPointer) error {
- s, err := o.DecodeStringBytes()
- if err != nil {
- return err
- }
- *structPointer_StringVal(base, p.field) = s
- return nil
-}
-
-// Decode a slice of bytes ([]byte).
-func (o *Buffer) dec_slice_byte(p *Properties, base structPointer) error {
- b, err := o.DecodeRawBytes(true)
- if err != nil {
- return err
- }
- *structPointer_Bytes(base, p.field) = b
- return nil
-}
-
-// Decode a slice of bools ([]bool).
-func (o *Buffer) dec_slice_bool(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- v := structPointer_BoolSlice(base, p.field)
- *v = append(*v, u != 0)
- return nil
-}
-
-// Decode a slice of bools ([]bool) in packed format.
-func (o *Buffer) dec_slice_packed_bool(p *Properties, base structPointer) error {
- v := structPointer_BoolSlice(base, p.field)
-
- nn, err := o.DecodeVarint()
- if err != nil {
- return err
- }
- nb := int(nn) // number of bytes of encoded bools
- fin := o.index + nb
- if fin < o.index {
- return errOverflow
- }
-
- y := *v
- for o.index < fin {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- y = append(y, u != 0)
- }
-
- *v = y
- return nil
-}
-
-// Decode a slice of int32s ([]int32).
-func (o *Buffer) dec_slice_int32(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- structPointer_Word32Slice(base, p.field).Append(uint32(u))
- return nil
-}
-
-// Decode a slice of int32s ([]int32) in packed format.
-func (o *Buffer) dec_slice_packed_int32(p *Properties, base structPointer) error {
- v := structPointer_Word32Slice(base, p.field)
-
- nn, err := o.DecodeVarint()
- if err != nil {
- return err
- }
- nb := int(nn) // number of bytes of encoded int32s
-
- fin := o.index + nb
- if fin < o.index {
- return errOverflow
- }
- for o.index < fin {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- v.Append(uint32(u))
- }
- return nil
-}
-
-// Decode a slice of int64s ([]int64).
-func (o *Buffer) dec_slice_int64(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
-
- structPointer_Word64Slice(base, p.field).Append(u)
- return nil
-}
-
-// Decode a slice of int64s ([]int64) in packed format.
-func (o *Buffer) dec_slice_packed_int64(p *Properties, base structPointer) error {
- v := structPointer_Word64Slice(base, p.field)
-
- nn, err := o.DecodeVarint()
- if err != nil {
- return err
- }
- nb := int(nn) // number of bytes of encoded int64s
-
- fin := o.index + nb
- if fin < o.index {
- return errOverflow
- }
- for o.index < fin {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- v.Append(u)
- }
- return nil
-}
-
-// Decode a slice of strings ([]string).
-func (o *Buffer) dec_slice_string(p *Properties, base structPointer) error {
- s, err := o.DecodeStringBytes()
- if err != nil {
- return err
- }
- v := structPointer_StringSlice(base, p.field)
- *v = append(*v, s)
- return nil
-}
-
-// Decode a slice of slice of bytes ([][]byte).
-func (o *Buffer) dec_slice_slice_byte(p *Properties, base structPointer) error {
- b, err := o.DecodeRawBytes(true)
- if err != nil {
- return err
- }
- v := structPointer_BytesSlice(base, p.field)
- *v = append(*v, b)
- return nil
-}
-
-// Decode a map field.
-func (o *Buffer) dec_new_map(p *Properties, base structPointer) error {
- raw, err := o.DecodeRawBytes(false)
- if err != nil {
- return err
- }
- oi := o.index // index at the end of this map entry
- o.index -= len(raw) // move buffer back to start of map entry
-
- mptr := structPointer_NewAt(base, p.field, p.mtype) // *map[K]V
- if mptr.Elem().IsNil() {
- mptr.Elem().Set(reflect.MakeMap(mptr.Type().Elem()))
- }
- v := mptr.Elem() // map[K]V
-
- // Prepare addressable doubly-indirect placeholders for the key and value types.
- // See enc_new_map for why.
- keyptr := reflect.New(reflect.PtrTo(p.mtype.Key())).Elem() // addressable *K
- keybase := toStructPointer(keyptr.Addr()) // **K
-
- var valbase structPointer
- var valptr reflect.Value
- switch p.mtype.Elem().Kind() {
- case reflect.Slice:
- // []byte
- var dummy []byte
- valptr = reflect.ValueOf(&dummy) // *[]byte
- valbase = toStructPointer(valptr) // *[]byte
- case reflect.Ptr:
- // message; valptr is **Msg; need to allocate the intermediate pointer
- valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V
- valptr.Set(reflect.New(valptr.Type().Elem()))
- valbase = toStructPointer(valptr)
- default:
- // everything else
- valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V
- valbase = toStructPointer(valptr.Addr()) // **V
- }
-
- // Decode.
- // This parses a restricted wire format, namely the encoding of a message
- // with two fields. See enc_new_map for the format.
- for o.index < oi {
- // tagcode for key and value properties are always a single byte
- // because they have tags 1 and 2.
- tagcode := o.buf[o.index]
- o.index++
- switch tagcode {
- case p.mkeyprop.tagcode[0]:
- if err := p.mkeyprop.dec(o, p.mkeyprop, keybase); err != nil {
- return err
- }
- case p.mvalprop.tagcode[0]:
- if err := p.mvalprop.dec(o, p.mvalprop, valbase); err != nil {
- return err
- }
- default:
- // TODO: Should we silently skip this instead?
- return fmt.Errorf("proto: bad map data tag %d", raw[0])
- }
- }
- keyelem, valelem := keyptr.Elem(), valptr.Elem()
- if !keyelem.IsValid() {
- keyelem = reflect.Zero(p.mtype.Key())
- }
- if !valelem.IsValid() {
- valelem = reflect.Zero(p.mtype.Elem())
- }
-
- v.SetMapIndex(keyelem, valelem)
- return nil
-}
-
-// Decode a group.
-func (o *Buffer) dec_struct_group(p *Properties, base structPointer) error {
- bas := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(bas) {
- // allocate new nested message
- bas = toStructPointer(reflect.New(p.stype))
- structPointer_SetStructPointer(base, p.field, bas)
- }
- return o.unmarshalType(p.stype, p.sprop, true, bas)
-}
-
-// Decode an embedded message.
-func (o *Buffer) dec_struct_message(p *Properties, base structPointer) (err error) {
- raw, e := o.DecodeRawBytes(false)
- if e != nil {
- return e
- }
-
- bas := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(bas) {
- // allocate new nested message
- bas = toStructPointer(reflect.New(p.stype))
- structPointer_SetStructPointer(base, p.field, bas)
- }
-
- // If the object can unmarshal itself, let it.
- if p.isUnmarshaler {
- iv := structPointer_Interface(bas, p.stype)
- return iv.(Unmarshaler).Unmarshal(raw)
- }
-
- obuf := o.buf
- oi := o.index
- o.buf = raw
- o.index = 0
-
- err = o.unmarshalType(p.stype, p.sprop, false, bas)
- o.buf = obuf
- o.index = oi
-
- return err
-}
-
-// Decode a slice of embedded messages.
-func (o *Buffer) dec_slice_struct_message(p *Properties, base structPointer) error {
- return o.dec_slice_struct(p, false, base)
-}
-
-// Decode a slice of embedded groups.
-func (o *Buffer) dec_slice_struct_group(p *Properties, base structPointer) error {
- return o.dec_slice_struct(p, true, base)
-}
-
-// Decode a slice of structs ([]*struct).
-func (o *Buffer) dec_slice_struct(p *Properties, is_group bool, base structPointer) error {
- v := reflect.New(p.stype)
- bas := toStructPointer(v)
- structPointer_StructPointerSlice(base, p.field).Append(bas)
-
- if is_group {
- err := o.unmarshalType(p.stype, p.sprop, is_group, bas)
- return err
- }
-
- raw, err := o.DecodeRawBytes(false)
- if err != nil {
+ if u, ok := pb.(Unmarshaler); ok {
+ // NOTE: The history of proto have unfortunately been inconsistent
+ // whether Unmarshaler should or should not implicitly clear itself.
+ // Some implementations do, most do not.
+ // Thus, calling this here may or may not do what people want.
+ //
+ // See https://github.com/golang/protobuf/issues/424
+ err := u.Unmarshal(p.buf[p.index:])
+ p.index = len(p.buf)
return err
}
- // If the object can unmarshal itself, let it.
- if p.isUnmarshaler {
- iv := v.Interface()
- return iv.(Unmarshaler).Unmarshal(raw)
- }
-
- obuf := o.buf
- oi := o.index
- o.buf = raw
- o.index = 0
-
- err = o.unmarshalType(p.stype, p.sprop, is_group, bas)
-
- o.buf = obuf
- o.index = oi
-
+ // Slow workaround for messages that aren't Unmarshalers.
+ // This includes some hand-coded .pb.go files and
+ // bootstrap protos.
+ // TODO: fix all of those and then add Unmarshal to
+ // the Message interface. Then:
+ // The cast above and code below can be deleted.
+ // The old unmarshaler can be deleted.
+ // Clients can call Unmarshal directly (can already do that, actually).
+ var info InternalMessageInfo
+ err := info.Unmarshal(pb, p.buf[p.index:])
+ p.index = len(p.buf)
return err
}
diff --git a/vendor/github.com/gogo/protobuf/proto/decode_gogo.go b/vendor/github.com/gogo/protobuf/proto/decode_gogo.go
deleted file mode 100644
index 6fb74de4c..000000000
--- a/vendor/github.com/gogo/protobuf/proto/decode_gogo.go
+++ /dev/null
@@ -1,172 +0,0 @@
-// Protocol Buffers for Go with Gadgets
-//
-// Copyright (c) 2013, The GoGo Authors. All rights reserved.
-// http://github.com/gogo/protobuf
-//
-// 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.
-//
-// 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.
-
-package proto
-
-import (
- "reflect"
-)
-
-// Decode a reference to a struct pointer.
-func (o *Buffer) dec_ref_struct_message(p *Properties, base structPointer) (err error) {
- raw, e := o.DecodeRawBytes(false)
- if e != nil {
- return e
- }
-
- // If the object can unmarshal itself, let it.
- if p.isUnmarshaler {
- panic("not supported, since this is a pointer receiver")
- }
-
- obuf := o.buf
- oi := o.index
- o.buf = raw
- o.index = 0
-
- bas := structPointer_FieldPointer(base, p.field)
-
- err = o.unmarshalType(p.stype, p.sprop, false, bas)
- o.buf = obuf
- o.index = oi
-
- return err
-}
-
-// Decode a slice of references to struct pointers ([]struct).
-func (o *Buffer) dec_slice_ref_struct(p *Properties, is_group bool, base structPointer) error {
- newBas := appendStructPointer(base, p.field, p.sstype)
-
- if is_group {
- panic("not supported, maybe in future, if requested.")
- }
-
- raw, err := o.DecodeRawBytes(false)
- if err != nil {
- return err
- }
-
- // If the object can unmarshal itself, let it.
- if p.isUnmarshaler {
- panic("not supported, since this is not a pointer receiver.")
- }
-
- obuf := o.buf
- oi := o.index
- o.buf = raw
- o.index = 0
-
- err = o.unmarshalType(p.stype, p.sprop, is_group, newBas)
-
- o.buf = obuf
- o.index = oi
-
- return err
-}
-
-// Decode a slice of references to struct pointers.
-func (o *Buffer) dec_slice_ref_struct_message(p *Properties, base structPointer) error {
- return o.dec_slice_ref_struct(p, false, base)
-}
-
-func setPtrCustomType(base structPointer, f field, v interface{}) {
- if v == nil {
- return
- }
- structPointer_SetStructPointer(base, f, toStructPointer(reflect.ValueOf(v)))
-}
-
-func setCustomType(base structPointer, f field, value interface{}) {
- if value == nil {
- return
- }
- v := reflect.ValueOf(value).Elem()
- t := reflect.TypeOf(value).Elem()
- kind := t.Kind()
- switch kind {
- case reflect.Slice:
- slice := reflect.MakeSlice(t, v.Len(), v.Cap())
- reflect.Copy(slice, v)
- oldHeader := structPointer_GetSliceHeader(base, f)
- oldHeader.Data = slice.Pointer()
- oldHeader.Len = v.Len()
- oldHeader.Cap = v.Cap()
- default:
- size := reflect.TypeOf(value).Elem().Size()
- structPointer_Copy(toStructPointer(reflect.ValueOf(value)), structPointer_Add(base, f), int(size))
- }
-}
-
-func (o *Buffer) dec_custom_bytes(p *Properties, base structPointer) error {
- b, err := o.DecodeRawBytes(true)
- if err != nil {
- return err
- }
- i := reflect.New(p.ctype.Elem()).Interface()
- custom := (i).(Unmarshaler)
- if err := custom.Unmarshal(b); err != nil {
- return err
- }
- setPtrCustomType(base, p.field, custom)
- return nil
-}
-
-func (o *Buffer) dec_custom_ref_bytes(p *Properties, base structPointer) error {
- b, err := o.DecodeRawBytes(true)
- if err != nil {
- return err
- }
- i := reflect.New(p.ctype).Interface()
- custom := (i).(Unmarshaler)
- if err := custom.Unmarshal(b); err != nil {
- return err
- }
- if custom != nil {
- setCustomType(base, p.field, custom)
- }
- return nil
-}
-
-// Decode a slice of bytes ([]byte) into a slice of custom types.
-func (o *Buffer) dec_custom_slice_bytes(p *Properties, base structPointer) error {
- b, err := o.DecodeRawBytes(true)
- if err != nil {
- return err
- }
- i := reflect.New(p.ctype.Elem()).Interface()
- custom := (i).(Unmarshaler)
- if err := custom.Unmarshal(b); err != nil {
- return err
- }
- newBas := appendStructPointer(base, p.field, p.ctype)
-
- var zero field
- setCustomType(newBas, zero, custom)
-
- return nil
-}
diff --git a/vendor/github.com/gogo/protobuf/proto/discard.go b/vendor/github.com/gogo/protobuf/proto/discard.go
new file mode 100644
index 000000000..fe1bd7d90
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/discard.go
@@ -0,0 +1,350 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2017 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// 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.
+
+package proto
+
+import (
+ "fmt"
+ "reflect"
+ "strings"
+ "sync"
+ "sync/atomic"
+)
+
+type generatedDiscarder interface {
+ XXX_DiscardUnknown()
+}
+
+// DiscardUnknown recursively discards all unknown fields from this message
+// and all embedded messages.
+//
+// When unmarshaling a message with unrecognized fields, the tags and values
+// of such fields are preserved in the Message. This allows a later call to
+// marshal to be able to produce a message that continues to have those
+// unrecognized fields. To avoid this, DiscardUnknown is used to
+// explicitly clear the unknown fields after unmarshaling.
+//
+// For proto2 messages, the unknown fields of message extensions are only
+// discarded from messages that have been accessed via GetExtension.
+func DiscardUnknown(m Message) {
+ if m, ok := m.(generatedDiscarder); ok {
+ m.XXX_DiscardUnknown()
+ return
+ }
+ // TODO: Dynamically populate a InternalMessageInfo for legacy messages,
+ // but the master branch has no implementation for InternalMessageInfo,
+ // so it would be more work to replicate that approach.
+ discardLegacy(m)
+}
+
+// DiscardUnknown recursively discards all unknown fields.
+func (a *InternalMessageInfo) DiscardUnknown(m Message) {
+ di := atomicLoadDiscardInfo(&a.discard)
+ if di == nil {
+ di = getDiscardInfo(reflect.TypeOf(m).Elem())
+ atomicStoreDiscardInfo(&a.discard, di)
+ }
+ di.discard(toPointer(&m))
+}
+
+type discardInfo struct {
+ typ reflect.Type
+
+ initialized int32 // 0: only typ is valid, 1: everything is valid
+ lock sync.Mutex
+
+ fields []discardFieldInfo
+ unrecognized field
+}
+
+type discardFieldInfo struct {
+ field field // Offset of field, guaranteed to be valid
+ discard func(src pointer)
+}
+
+var (
+ discardInfoMap = map[reflect.Type]*discardInfo{}
+ discardInfoLock sync.Mutex
+)
+
+func getDiscardInfo(t reflect.Type) *discardInfo {
+ discardInfoLock.Lock()
+ defer discardInfoLock.Unlock()
+ di := discardInfoMap[t]
+ if di == nil {
+ di = &discardInfo{typ: t}
+ discardInfoMap[t] = di
+ }
+ return di
+}
+
+func (di *discardInfo) discard(src pointer) {
+ if src.isNil() {
+ return // Nothing to do.
+ }
+
+ if atomic.LoadInt32(&di.initialized) == 0 {
+ di.computeDiscardInfo()
+ }
+
+ for _, fi := range di.fields {
+ sfp := src.offset(fi.field)
+ fi.discard(sfp)
+ }
+
+ // For proto2 messages, only discard unknown fields in message extensions
+ // that have been accessed via GetExtension.
+ if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil {
+ // Ignore lock since DiscardUnknown is not concurrency safe.
+ emm, _ := em.extensionsRead()
+ for _, mx := range emm {
+ if m, ok := mx.value.(Message); ok {
+ DiscardUnknown(m)
+ }
+ }
+ }
+
+ if di.unrecognized.IsValid() {
+ *src.offset(di.unrecognized).toBytes() = nil
+ }
+}
+
+func (di *discardInfo) computeDiscardInfo() {
+ di.lock.Lock()
+ defer di.lock.Unlock()
+ if di.initialized != 0 {
+ return
+ }
+ t := di.typ
+ n := t.NumField()
+
+ for i := 0; i < n; i++ {
+ f := t.Field(i)
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+
+ dfi := discardFieldInfo{field: toField(&f)}
+ tf := f.Type
+
+ // Unwrap tf to get its most basic type.
+ var isPointer, isSlice bool
+ if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
+ isSlice = true
+ tf = tf.Elem()
+ }
+ if tf.Kind() == reflect.Ptr {
+ isPointer = true
+ tf = tf.Elem()
+ }
+ if isPointer && isSlice && tf.Kind() != reflect.Struct {
+ panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name))
+ }
+
+ switch tf.Kind() {
+ case reflect.Struct:
+ switch {
+ case !isPointer:
+ panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name))
+ case isSlice: // E.g., []*pb.T
+ discardInfo := getDiscardInfo(tf)
+ dfi.discard = func(src pointer) {
+ sps := src.getPointerSlice()
+ for _, sp := range sps {
+ if !sp.isNil() {
+ discardInfo.discard(sp)
+ }
+ }
+ }
+ default: // E.g., *pb.T
+ discardInfo := getDiscardInfo(tf)
+ dfi.discard = func(src pointer) {
+ sp := src.getPointer()
+ if !sp.isNil() {
+ discardInfo.discard(sp)
+ }
+ }
+ }
+ case reflect.Map:
+ switch {
+ case isPointer || isSlice:
+ panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name))
+ default: // E.g., map[K]V
+ if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T)
+ dfi.discard = func(src pointer) {
+ sm := src.asPointerTo(tf).Elem()
+ if sm.Len() == 0 {
+ return
+ }
+ for _, key := range sm.MapKeys() {
+ val := sm.MapIndex(key)
+ DiscardUnknown(val.Interface().(Message))
+ }
+ }
+ } else {
+ dfi.discard = func(pointer) {} // Noop
+ }
+ }
+ case reflect.Interface:
+ // Must be oneof field.
+ switch {
+ case isPointer || isSlice:
+ panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name))
+ default: // E.g., interface{}
+ // TODO: Make this faster?
+ dfi.discard = func(src pointer) {
+ su := src.asPointerTo(tf).Elem()
+ if !su.IsNil() {
+ sv := su.Elem().Elem().Field(0)
+ if sv.Kind() == reflect.Ptr && sv.IsNil() {
+ return
+ }
+ switch sv.Type().Kind() {
+ case reflect.Ptr: // Proto struct (e.g., *T)
+ DiscardUnknown(sv.Interface().(Message))
+ }
+ }
+ }
+ }
+ default:
+ continue
+ }
+ di.fields = append(di.fields, dfi)
+ }
+
+ di.unrecognized = invalidField
+ if f, ok := t.FieldByName("XXX_unrecognized"); ok {
+ if f.Type != reflect.TypeOf([]byte{}) {
+ panic("expected XXX_unrecognized to be of type []byte")
+ }
+ di.unrecognized = toField(&f)
+ }
+
+ atomic.StoreInt32(&di.initialized, 1)
+}
+
+func discardLegacy(m Message) {
+ v := reflect.ValueOf(m)
+ if v.Kind() != reflect.Ptr || v.IsNil() {
+ return
+ }
+ v = v.Elem()
+ if v.Kind() != reflect.Struct {
+ return
+ }
+ t := v.Type()
+
+ for i := 0; i < v.NumField(); i++ {
+ f := t.Field(i)
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+ vf := v.Field(i)
+ tf := f.Type
+
+ // Unwrap tf to get its most basic type.
+ var isPointer, isSlice bool
+ if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
+ isSlice = true
+ tf = tf.Elem()
+ }
+ if tf.Kind() == reflect.Ptr {
+ isPointer = true
+ tf = tf.Elem()
+ }
+ if isPointer && isSlice && tf.Kind() != reflect.Struct {
+ panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name))
+ }
+
+ switch tf.Kind() {
+ case reflect.Struct:
+ switch {
+ case !isPointer:
+ panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name))
+ case isSlice: // E.g., []*pb.T
+ for j := 0; j < vf.Len(); j++ {
+ discardLegacy(vf.Index(j).Interface().(Message))
+ }
+ default: // E.g., *pb.T
+ discardLegacy(vf.Interface().(Message))
+ }
+ case reflect.Map:
+ switch {
+ case isPointer || isSlice:
+ panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name))
+ default: // E.g., map[K]V
+ tv := vf.Type().Elem()
+ if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T)
+ for _, key := range vf.MapKeys() {
+ val := vf.MapIndex(key)
+ discardLegacy(val.Interface().(Message))
+ }
+ }
+ }
+ case reflect.Interface:
+ // Must be oneof field.
+ switch {
+ case isPointer || isSlice:
+ panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name))
+ default: // E.g., test_proto.isCommunique_Union interface
+ if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" {
+ vf = vf.Elem() // E.g., *test_proto.Communique_Msg
+ if !vf.IsNil() {
+ vf = vf.Elem() // E.g., test_proto.Communique_Msg
+ vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value
+ if vf.Kind() == reflect.Ptr {
+ discardLegacy(vf.Interface().(Message))
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() {
+ if vf.Type() != reflect.TypeOf([]byte{}) {
+ panic("expected XXX_unrecognized to be of type []byte")
+ }
+ vf.Set(reflect.ValueOf([]byte(nil)))
+ }
+
+ // For proto2 messages, only discard unknown fields in message extensions
+ // that have been accessed via GetExtension.
+ if em, err := extendable(m); err == nil {
+ // Ignore lock since discardLegacy is not concurrency safe.
+ emm, _ := em.extensionsRead()
+ for _, mx := range emm {
+ if m, ok := mx.value.(Message); ok {
+ discardLegacy(m)
+ }
+ }
+ }
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/duration_gogo.go b/vendor/github.com/gogo/protobuf/proto/duration_gogo.go
index 18e2a5f77..e748e1730 100644
--- a/vendor/github.com/gogo/protobuf/proto/duration_gogo.go
+++ b/vendor/github.com/gogo/protobuf/proto/duration_gogo.go
@@ -47,157 +47,3 @@ func (*duration) String() string { return "duration<string>" }
func init() {
RegisterType((*duration)(nil), "gogo.protobuf.proto.duration")
}
-
-func (o *Buffer) decDuration() (time.Duration, error) {
- b, err := o.DecodeRawBytes(true)
- if err != nil {
- return 0, err
- }
- dproto := &duration{}
- if err := Unmarshal(b, dproto); err != nil {
- return 0, err
- }
- return durationFromProto(dproto)
-}
-
-func (o *Buffer) dec_duration(p *Properties, base structPointer) error {
- d, err := o.decDuration()
- if err != nil {
- return err
- }
- word64_Set(structPointer_Word64(base, p.field), o, uint64(d))
- return nil
-}
-
-func (o *Buffer) dec_ref_duration(p *Properties, base structPointer) error {
- d, err := o.decDuration()
- if err != nil {
- return err
- }
- word64Val_Set(structPointer_Word64Val(base, p.field), o, uint64(d))
- return nil
-}
-
-func (o *Buffer) dec_slice_duration(p *Properties, base structPointer) error {
- d, err := o.decDuration()
- if err != nil {
- return err
- }
- newBas := appendStructPointer(base, p.field, reflect.SliceOf(reflect.PtrTo(durationType)))
- var zero field
- setPtrCustomType(newBas, zero, &d)
- return nil
-}
-
-func (o *Buffer) dec_slice_ref_duration(p *Properties, base structPointer) error {
- d, err := o.decDuration()
- if err != nil {
- return err
- }
- structPointer_Word64Slice(base, p.field).Append(uint64(d))
- return nil
-}
-
-func size_duration(p *Properties, base structPointer) (n int) {
- structp := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(structp) {
- return 0
- }
- dur := structPointer_Interface(structp, durationType).(*time.Duration)
- d := durationProto(*dur)
- size := Size(d)
- return size + sizeVarint(uint64(size)) + len(p.tagcode)
-}
-
-func (o *Buffer) enc_duration(p *Properties, base structPointer) error {
- structp := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(structp) {
- return ErrNil
- }
- dur := structPointer_Interface(structp, durationType).(*time.Duration)
- d := durationProto(*dur)
- data, err := Marshal(d)
- if err != nil {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- return nil
-}
-
-func size_ref_duration(p *Properties, base structPointer) (n int) {
- dur := structPointer_InterfaceAt(base, p.field, durationType).(*time.Duration)
- d := durationProto(*dur)
- size := Size(d)
- return size + sizeVarint(uint64(size)) + len(p.tagcode)
-}
-
-func (o *Buffer) enc_ref_duration(p *Properties, base structPointer) error {
- dur := structPointer_InterfaceAt(base, p.field, durationType).(*time.Duration)
- d := durationProto(*dur)
- data, err := Marshal(d)
- if err != nil {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- return nil
-}
-
-func size_slice_duration(p *Properties, base structPointer) (n int) {
- pdurs := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(reflect.PtrTo(durationType))).(*[]*time.Duration)
- durs := *pdurs
- for i := 0; i < len(durs); i++ {
- if durs[i] == nil {
- return 0
- }
- dproto := durationProto(*durs[i])
- size := Size(dproto)
- n += len(p.tagcode) + size + sizeVarint(uint64(size))
- }
- return n
-}
-
-func (o *Buffer) enc_slice_duration(p *Properties, base structPointer) error {
- pdurs := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(reflect.PtrTo(durationType))).(*[]*time.Duration)
- durs := *pdurs
- for i := 0; i < len(durs); i++ {
- if durs[i] == nil {
- return errRepeatedHasNil
- }
- dproto := durationProto(*durs[i])
- data, err := Marshal(dproto)
- if err != nil {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- }
- return nil
-}
-
-func size_slice_ref_duration(p *Properties, base structPointer) (n int) {
- pdurs := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(durationType)).(*[]time.Duration)
- durs := *pdurs
- for i := 0; i < len(durs); i++ {
- dproto := durationProto(durs[i])
- size := Size(dproto)
- n += len(p.tagcode) + size + sizeVarint(uint64(size))
- }
- return n
-}
-
-func (o *Buffer) enc_slice_ref_duration(p *Properties, base structPointer) error {
- pdurs := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(durationType)).(*[]time.Duration)
- durs := *pdurs
- for i := 0; i < len(durs); i++ {
- dproto := durationProto(durs[i])
- data, err := Marshal(dproto)
- if err != nil {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- }
- return nil
-}
diff --git a/vendor/github.com/gogo/protobuf/proto/encode.go b/vendor/github.com/gogo/protobuf/proto/encode.go
index 2b30f8462..3abfed2cf 100644
--- a/vendor/github.com/gogo/protobuf/proto/encode.go
+++ b/vendor/github.com/gogo/protobuf/proto/encode.go
@@ -37,28 +37,9 @@ package proto
import (
"errors"
- "fmt"
"reflect"
- "sort"
)
-// RequiredNotSetError is the error returned if Marshal is called with
-// a protocol buffer struct whose required fields have not
-// all been initialized. It is also the error returned if Unmarshal is
-// called with an encoded protocol buffer that does not include all the
-// required fields.
-//
-// When printed, RequiredNotSetError reports the first unset required field in a
-// message. If the field cannot be precisely determined, it is reported as
-// "{Unknown}".
-type RequiredNotSetError struct {
- field string
-}
-
-func (e *RequiredNotSetError) Error() string {
- return fmt.Sprintf("proto: required field %q not set", e.field)
-}
-
var (
// errRepeatedHasNil is the error returned if Marshal is called with
// a struct with a repeated field containing a nil element.
@@ -82,10 +63,6 @@ var (
const maxVarintBytes = 10 // maximum length of a varint
-// maxMarshalSize is the largest allowed size of an encoded protobuf,
-// since C++ and Java use signed int32s for the size.
-const maxMarshalSize = 1<<31 - 1
-
// EncodeVarint returns the varint encoding of x.
// This is the format for the
// int32, int64, uint32, uint64, bool, and enum
@@ -119,18 +96,27 @@ func (p *Buffer) EncodeVarint(x uint64) error {
// SizeVarint returns the varint encoding size of an integer.
func SizeVarint(x uint64) int {
- return sizeVarint(x)
-}
-
-func sizeVarint(x uint64) (n int) {
- for {
- n++
- x >>= 7
- if x == 0 {
- break
- }
- }
- return n
+ switch {
+ case x < 1<<7:
+ return 1
+ case x < 1<<14:
+ return 2
+ case x < 1<<21:
+ return 3
+ case x < 1<<28:
+ return 4
+ case x < 1<<35:
+ return 5
+ case x < 1<<42:
+ return 6
+ case x < 1<<49:
+ return 7
+ case x < 1<<56:
+ return 8
+ case x < 1<<63:
+ return 9
+ }
+ return 10
}
// EncodeFixed64 writes a 64-bit integer to the Buffer.
@@ -149,10 +135,6 @@ func (p *Buffer) EncodeFixed64(x uint64) error {
return nil
}
-func sizeFixed64(x uint64) int {
- return 8
-}
-
// EncodeFixed32 writes a 32-bit integer to the Buffer.
// This is the format for the
// fixed32, sfixed32, and float protocol buffer types.
@@ -165,10 +147,6 @@ func (p *Buffer) EncodeFixed32(x uint64) error {
return nil
}
-func sizeFixed32(x uint64) int {
- return 4
-}
-
// EncodeZigzag64 writes a zigzag-encoded 64-bit integer
// to the Buffer.
// This is the format used for the sint64 protocol buffer type.
@@ -177,10 +155,6 @@ func (p *Buffer) EncodeZigzag64(x uint64) error {
return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63))))
}
-func sizeZigzag64(x uint64) int {
- return sizeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63))))
-}
-
// EncodeZigzag32 writes a zigzag-encoded 32-bit integer
// to the Buffer.
// This is the format used for the sint32 protocol buffer type.
@@ -189,10 +163,6 @@ func (p *Buffer) EncodeZigzag32(x uint64) error {
return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31))))
}
-func sizeZigzag32(x uint64) int {
- return sizeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31))))
-}
-
// EncodeRawBytes writes a count-delimited byte buffer to the Buffer.
// This is the format used for the bytes protocol buffer
// type and for embedded messages.
@@ -202,11 +172,6 @@ func (p *Buffer) EncodeRawBytes(b []byte) error {
return nil
}
-func sizeRawBytes(b []byte) int {
- return sizeVarint(uint64(len(b))) +
- len(b)
-}
-
// EncodeStringBytes writes an encoded string to the Buffer.
// This is the format used for the proto2 string type.
func (p *Buffer) EncodeStringBytes(s string) error {
@@ -215,319 +180,17 @@ func (p *Buffer) EncodeStringBytes(s string) error {
return nil
}
-func sizeStringBytes(s string) int {
- return sizeVarint(uint64(len(s))) +
- len(s)
-}
-
// Marshaler is the interface representing objects that can marshal themselves.
type Marshaler interface {
Marshal() ([]byte, error)
}
-// Marshal takes the protocol buffer
-// and encodes it into the wire format, returning the data.
-func Marshal(pb Message) ([]byte, error) {
- // Can the object marshal itself?
- if m, ok := pb.(Marshaler); ok {
- return m.Marshal()
- }
- p := NewBuffer(nil)
- err := p.Marshal(pb)
- if p.buf == nil && err == nil {
- // Return a non-nil slice on success.
- return []byte{}, nil
- }
- return p.buf, err
-}
-
// EncodeMessage writes the protocol buffer to the Buffer,
// prefixed by a varint-encoded length.
func (p *Buffer) EncodeMessage(pb Message) error {
- t, base, err := getbase(pb)
- if structPointer_IsNil(base) {
- return ErrNil
- }
- if err == nil {
- var state errorState
- err = p.enc_len_struct(GetProperties(t.Elem()), base, &state)
- }
- return err
-}
-
-// Marshal takes the protocol buffer
-// and encodes it into the wire format, writing the result to the
-// Buffer.
-func (p *Buffer) Marshal(pb Message) error {
- // Can the object marshal itself?
- if m, ok := pb.(Marshaler); ok {
- data, err := m.Marshal()
- p.buf = append(p.buf, data...)
- return err
- }
-
- t, base, err := getbase(pb)
- if structPointer_IsNil(base) {
- return ErrNil
- }
- if err == nil {
- err = p.enc_struct(GetProperties(t.Elem()), base)
- }
-
- if collectStats {
- (stats).Encode++ // Parens are to work around a goimports bug.
- }
-
- if len(p.buf) > maxMarshalSize {
- return ErrTooLarge
- }
- return err
-}
-
-// Size returns the encoded size of a protocol buffer.
-func Size(pb Message) (n int) {
- // Can the object marshal itself? If so, Size is slow.
- // TODO: add Size to Marshaler, or add a Sizer interface.
- if m, ok := pb.(Marshaler); ok {
- b, _ := m.Marshal()
- return len(b)
- }
-
- t, base, err := getbase(pb)
- if structPointer_IsNil(base) {
- return 0
- }
- if err == nil {
- n = size_struct(GetProperties(t.Elem()), base)
- }
-
- if collectStats {
- (stats).Size++ // Parens are to work around a goimports bug.
- }
-
- return
-}
-
-// Individual type encoders.
-
-// Encode a bool.
-func (o *Buffer) enc_bool(p *Properties, base structPointer) error {
- v := *structPointer_Bool(base, p.field)
- if v == nil {
- return ErrNil
- }
- x := 0
- if *v {
- x = 1
- }
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func (o *Buffer) enc_proto3_bool(p *Properties, base structPointer) error {
- v := *structPointer_BoolVal(base, p.field)
- if !v {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, 1)
- return nil
-}
-
-func size_bool(p *Properties, base structPointer) int {
- v := *structPointer_Bool(base, p.field)
- if v == nil {
- return 0
- }
- return len(p.tagcode) + 1 // each bool takes exactly one byte
-}
-
-func size_proto3_bool(p *Properties, base structPointer) int {
- v := *structPointer_BoolVal(base, p.field)
- if !v && !p.oneof {
- return 0
- }
- return len(p.tagcode) + 1 // each bool takes exactly one byte
-}
-
-// Encode an int32.
-func (o *Buffer) enc_int32(p *Properties, base structPointer) error {
- v := structPointer_Word32(base, p.field)
- if word32_IsNil(v) {
- return ErrNil
- }
- x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func (o *Buffer) enc_proto3_int32(p *Properties, base structPointer) error {
- v := structPointer_Word32Val(base, p.field)
- x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range
- if x == 0 {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func size_int32(p *Properties, base structPointer) (n int) {
- v := structPointer_Word32(base, p.field)
- if word32_IsNil(v) {
- return 0
- }
- x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range
- n += len(p.tagcode)
- n += p.valSize(uint64(x))
- return
-}
-
-func size_proto3_int32(p *Properties, base structPointer) (n int) {
- v := structPointer_Word32Val(base, p.field)
- x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range
- if x == 0 && !p.oneof {
- return 0
- }
- n += len(p.tagcode)
- n += p.valSize(uint64(x))
- return
-}
-
-// Encode a uint32.
-// Exactly the same as int32, except for no sign extension.
-func (o *Buffer) enc_uint32(p *Properties, base structPointer) error {
- v := structPointer_Word32(base, p.field)
- if word32_IsNil(v) {
- return ErrNil
- }
- x := word32_Get(v)
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func (o *Buffer) enc_proto3_uint32(p *Properties, base structPointer) error {
- v := structPointer_Word32Val(base, p.field)
- x := word32Val_Get(v)
- if x == 0 {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func size_uint32(p *Properties, base structPointer) (n int) {
- v := structPointer_Word32(base, p.field)
- if word32_IsNil(v) {
- return 0
- }
- x := word32_Get(v)
- n += len(p.tagcode)
- n += p.valSize(uint64(x))
- return
-}
-
-func size_proto3_uint32(p *Properties, base structPointer) (n int) {
- v := structPointer_Word32Val(base, p.field)
- x := word32Val_Get(v)
- if x == 0 && !p.oneof {
- return 0
- }
- n += len(p.tagcode)
- n += p.valSize(uint64(x))
- return
-}
-
-// Encode an int64.
-func (o *Buffer) enc_int64(p *Properties, base structPointer) error {
- v := structPointer_Word64(base, p.field)
- if word64_IsNil(v) {
- return ErrNil
- }
- x := word64_Get(v)
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, x)
- return nil
-}
-
-func (o *Buffer) enc_proto3_int64(p *Properties, base structPointer) error {
- v := structPointer_Word64Val(base, p.field)
- x := word64Val_Get(v)
- if x == 0 {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, x)
- return nil
-}
-
-func size_int64(p *Properties, base structPointer) (n int) {
- v := structPointer_Word64(base, p.field)
- if word64_IsNil(v) {
- return 0
- }
- x := word64_Get(v)
- n += len(p.tagcode)
- n += p.valSize(x)
- return
-}
-
-func size_proto3_int64(p *Properties, base structPointer) (n int) {
- v := structPointer_Word64Val(base, p.field)
- x := word64Val_Get(v)
- if x == 0 && !p.oneof {
- return 0
- }
- n += len(p.tagcode)
- n += p.valSize(x)
- return
-}
-
-// Encode a string.
-func (o *Buffer) enc_string(p *Properties, base structPointer) error {
- v := *structPointer_String(base, p.field)
- if v == nil {
- return ErrNil
- }
- x := *v
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeStringBytes(x)
- return nil
-}
-
-func (o *Buffer) enc_proto3_string(p *Properties, base structPointer) error {
- v := *structPointer_StringVal(base, p.field)
- if v == "" {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeStringBytes(v)
- return nil
-}
-
-func size_string(p *Properties, base structPointer) (n int) {
- v := *structPointer_String(base, p.field)
- if v == nil {
- return 0
- }
- x := *v
- n += len(p.tagcode)
- n += sizeStringBytes(x)
- return
-}
-
-func size_proto3_string(p *Properties, base structPointer) (n int) {
- v := *structPointer_StringVal(base, p.field)
- if v == "" && !p.oneof {
- return 0
- }
- n += len(p.tagcode)
- n += sizeStringBytes(v)
- return
+ siz := Size(pb)
+ p.EncodeVarint(uint64(siz))
+ return p.Marshal(pb)
}
// All protocol buffer fields are nillable, but be careful.
@@ -538,825 +201,3 @@ func isNil(v reflect.Value) bool {
}
return false
}
-
-// Encode a message struct.
-func (o *Buffer) enc_struct_message(p *Properties, base structPointer) error {
- var state errorState
- structp := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(structp) {
- return ErrNil
- }
-
- // Can the object marshal itself?
- if p.isMarshaler {
- m := structPointer_Interface(structp, p.stype).(Marshaler)
- data, err := m.Marshal()
- if err != nil && !state.shouldContinue(err, nil) {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- return state.err
- }
-
- o.buf = append(o.buf, p.tagcode...)
- return o.enc_len_struct(p.sprop, structp, &state)
-}
-
-func size_struct_message(p *Properties, base structPointer) int {
- structp := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(structp) {
- return 0
- }
-
- // Can the object marshal itself?
- if p.isMarshaler {
- m := structPointer_Interface(structp, p.stype).(Marshaler)
- data, _ := m.Marshal()
- n0 := len(p.tagcode)
- n1 := sizeRawBytes(data)
- return n0 + n1
- }
-
- n0 := len(p.tagcode)
- n1 := size_struct(p.sprop, structp)
- n2 := sizeVarint(uint64(n1)) // size of encoded length
- return n0 + n1 + n2
-}
-
-// Encode a group struct.
-func (o *Buffer) enc_struct_group(p *Properties, base structPointer) error {
- var state errorState
- b := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(b) {
- return ErrNil
- }
-
- o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup))
- err := o.enc_struct(p.sprop, b)
- if err != nil && !state.shouldContinue(err, nil) {
- return err
- }
- o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup))
- return state.err
-}
-
-func size_struct_group(p *Properties, base structPointer) (n int) {
- b := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(b) {
- return 0
- }
-
- n += sizeVarint(uint64((p.Tag << 3) | WireStartGroup))
- n += size_struct(p.sprop, b)
- n += sizeVarint(uint64((p.Tag << 3) | WireEndGroup))
- return
-}
-
-// Encode a slice of bools ([]bool).
-func (o *Buffer) enc_slice_bool(p *Properties, base structPointer) error {
- s := *structPointer_BoolSlice(base, p.field)
- l := len(s)
- if l == 0 {
- return ErrNil
- }
- for _, x := range s {
- o.buf = append(o.buf, p.tagcode...)
- v := uint64(0)
- if x {
- v = 1
- }
- p.valEnc(o, v)
- }
- return nil
-}
-
-func size_slice_bool(p *Properties, base structPointer) int {
- s := *structPointer_BoolSlice(base, p.field)
- l := len(s)
- if l == 0 {
- return 0
- }
- return l * (len(p.tagcode) + 1) // each bool takes exactly one byte
-}
-
-// Encode a slice of bools ([]bool) in packed format.
-func (o *Buffer) enc_slice_packed_bool(p *Properties, base structPointer) error {
- s := *structPointer_BoolSlice(base, p.field)
- l := len(s)
- if l == 0 {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeVarint(uint64(l)) // each bool takes exactly one byte
- for _, x := range s {
- v := uint64(0)
- if x {
- v = 1
- }
- p.valEnc(o, v)
- }
- return nil
-}
-
-func size_slice_packed_bool(p *Properties, base structPointer) (n int) {
- s := *structPointer_BoolSlice(base, p.field)
- l := len(s)
- if l == 0 {
- return 0
- }
- n += len(p.tagcode)
- n += sizeVarint(uint64(l))
- n += l // each bool takes exactly one byte
- return
-}
-
-// Encode a slice of bytes ([]byte).
-func (o *Buffer) enc_slice_byte(p *Properties, base structPointer) error {
- s := *structPointer_Bytes(base, p.field)
- if s == nil {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(s)
- return nil
-}
-
-func (o *Buffer) enc_proto3_slice_byte(p *Properties, base structPointer) error {
- s := *structPointer_Bytes(base, p.field)
- if len(s) == 0 {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(s)
- return nil
-}
-
-func size_slice_byte(p *Properties, base structPointer) (n int) {
- s := *structPointer_Bytes(base, p.field)
- if s == nil && !p.oneof {
- return 0
- }
- n += len(p.tagcode)
- n += sizeRawBytes(s)
- return
-}
-
-func size_proto3_slice_byte(p *Properties, base structPointer) (n int) {
- s := *structPointer_Bytes(base, p.field)
- if len(s) == 0 && !p.oneof {
- return 0
- }
- n += len(p.tagcode)
- n += sizeRawBytes(s)
- return
-}
-
-// Encode a slice of int32s ([]int32).
-func (o *Buffer) enc_slice_int32(p *Properties, base structPointer) error {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return ErrNil
- }
- for i := 0; i < l; i++ {
- o.buf = append(o.buf, p.tagcode...)
- x := int32(s.Index(i)) // permit sign extension to use full 64-bit range
- p.valEnc(o, uint64(x))
- }
- return nil
-}
-
-func size_slice_int32(p *Properties, base structPointer) (n int) {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return 0
- }
- for i := 0; i < l; i++ {
- n += len(p.tagcode)
- x := int32(s.Index(i)) // permit sign extension to use full 64-bit range
- n += p.valSize(uint64(x))
- }
- return
-}
-
-// Encode a slice of int32s ([]int32) in packed format.
-func (o *Buffer) enc_slice_packed_int32(p *Properties, base structPointer) error {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return ErrNil
- }
- // TODO: Reuse a Buffer.
- buf := NewBuffer(nil)
- for i := 0; i < l; i++ {
- x := int32(s.Index(i)) // permit sign extension to use full 64-bit range
- p.valEnc(buf, uint64(x))
- }
-
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeVarint(uint64(len(buf.buf)))
- o.buf = append(o.buf, buf.buf...)
- return nil
-}
-
-func size_slice_packed_int32(p *Properties, base structPointer) (n int) {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return 0
- }
- var bufSize int
- for i := 0; i < l; i++ {
- x := int32(s.Index(i)) // permit sign extension to use full 64-bit range
- bufSize += p.valSize(uint64(x))
- }
-
- n += len(p.tagcode)
- n += sizeVarint(uint64(bufSize))
- n += bufSize
- return
-}
-
-// Encode a slice of uint32s ([]uint32).
-// Exactly the same as int32, except for no sign extension.
-func (o *Buffer) enc_slice_uint32(p *Properties, base structPointer) error {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return ErrNil
- }
- for i := 0; i < l; i++ {
- o.buf = append(o.buf, p.tagcode...)
- x := s.Index(i)
- p.valEnc(o, uint64(x))
- }
- return nil
-}
-
-func size_slice_uint32(p *Properties, base structPointer) (n int) {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return 0
- }
- for i := 0; i < l; i++ {
- n += len(p.tagcode)
- x := s.Index(i)
- n += p.valSize(uint64(x))
- }
- return
-}
-
-// Encode a slice of uint32s ([]uint32) in packed format.
-// Exactly the same as int32, except for no sign extension.
-func (o *Buffer) enc_slice_packed_uint32(p *Properties, base structPointer) error {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return ErrNil
- }
- // TODO: Reuse a Buffer.
- buf := NewBuffer(nil)
- for i := 0; i < l; i++ {
- p.valEnc(buf, uint64(s.Index(i)))
- }
-
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeVarint(uint64(len(buf.buf)))
- o.buf = append(o.buf, buf.buf...)
- return nil
-}
-
-func size_slice_packed_uint32(p *Properties, base structPointer) (n int) {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return 0
- }
- var bufSize int
- for i := 0; i < l; i++ {
- bufSize += p.valSize(uint64(s.Index(i)))
- }
-
- n += len(p.tagcode)
- n += sizeVarint(uint64(bufSize))
- n += bufSize
- return
-}
-
-// Encode a slice of int64s ([]int64).
-func (o *Buffer) enc_slice_int64(p *Properties, base structPointer) error {
- s := structPointer_Word64Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return ErrNil
- }
- for i := 0; i < l; i++ {
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, s.Index(i))
- }
- return nil
-}
-
-func size_slice_int64(p *Properties, base structPointer) (n int) {
- s := structPointer_Word64Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return 0
- }
- for i := 0; i < l; i++ {
- n += len(p.tagcode)
- n += p.valSize(s.Index(i))
- }
- return
-}
-
-// Encode a slice of int64s ([]int64) in packed format.
-func (o *Buffer) enc_slice_packed_int64(p *Properties, base structPointer) error {
- s := structPointer_Word64Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return ErrNil
- }
- // TODO: Reuse a Buffer.
- buf := NewBuffer(nil)
- for i := 0; i < l; i++ {
- p.valEnc(buf, s.Index(i))
- }
-
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeVarint(uint64(len(buf.buf)))
- o.buf = append(o.buf, buf.buf...)
- return nil
-}
-
-func size_slice_packed_int64(p *Properties, base structPointer) (n int) {
- s := structPointer_Word64Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return 0
- }
- var bufSize int
- for i := 0; i < l; i++ {
- bufSize += p.valSize(s.Index(i))
- }
-
- n += len(p.tagcode)
- n += sizeVarint(uint64(bufSize))
- n += bufSize
- return
-}
-
-// Encode a slice of slice of bytes ([][]byte).
-func (o *Buffer) enc_slice_slice_byte(p *Properties, base structPointer) error {
- ss := *structPointer_BytesSlice(base, p.field)
- l := len(ss)
- if l == 0 {
- return ErrNil
- }
- for i := 0; i < l; i++ {
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(ss[i])
- }
- return nil
-}
-
-func size_slice_slice_byte(p *Properties, base structPointer) (n int) {
- ss := *structPointer_BytesSlice(base, p.field)
- l := len(ss)
- if l == 0 {
- return 0
- }
- n += l * len(p.tagcode)
- for i := 0; i < l; i++ {
- n += sizeRawBytes(ss[i])
- }
- return
-}
-
-// Encode a slice of strings ([]string).
-func (o *Buffer) enc_slice_string(p *Properties, base structPointer) error {
- ss := *structPointer_StringSlice(base, p.field)
- l := len(ss)
- for i := 0; i < l; i++ {
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeStringBytes(ss[i])
- }
- return nil
-}
-
-func size_slice_string(p *Properties, base structPointer) (n int) {
- ss := *structPointer_StringSlice(base, p.field)
- l := len(ss)
- n += l * len(p.tagcode)
- for i := 0; i < l; i++ {
- n += sizeStringBytes(ss[i])
- }
- return
-}
-
-// Encode a slice of message structs ([]*struct).
-func (o *Buffer) enc_slice_struct_message(p *Properties, base structPointer) error {
- var state errorState
- s := structPointer_StructPointerSlice(base, p.field)
- l := s.Len()
-
- for i := 0; i < l; i++ {
- structp := s.Index(i)
- if structPointer_IsNil(structp) {
- return errRepeatedHasNil
- }
-
- // Can the object marshal itself?
- if p.isMarshaler {
- m := structPointer_Interface(structp, p.stype).(Marshaler)
- data, err := m.Marshal()
- if err != nil && !state.shouldContinue(err, nil) {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- continue
- }
-
- o.buf = append(o.buf, p.tagcode...)
- err := o.enc_len_struct(p.sprop, structp, &state)
- if err != nil && !state.shouldContinue(err, nil) {
- if err == ErrNil {
- return errRepeatedHasNil
- }
- return err
- }
- }
- return state.err
-}
-
-func size_slice_struct_message(p *Properties, base structPointer) (n int) {
- s := structPointer_StructPointerSlice(base, p.field)
- l := s.Len()
- n += l * len(p.tagcode)
- for i := 0; i < l; i++ {
- structp := s.Index(i)
- if structPointer_IsNil(structp) {
- return // return the size up to this point
- }
-
- // Can the object marshal itself?
- if p.isMarshaler {
- m := structPointer_Interface(structp, p.stype).(Marshaler)
- data, _ := m.Marshal()
- n += sizeRawBytes(data)
- continue
- }
-
- n0 := size_struct(p.sprop, structp)
- n1 := sizeVarint(uint64(n0)) // size of encoded length
- n += n0 + n1
- }
- return
-}
-
-// Encode a slice of group structs ([]*struct).
-func (o *Buffer) enc_slice_struct_group(p *Properties, base structPointer) error {
- var state errorState
- s := structPointer_StructPointerSlice(base, p.field)
- l := s.Len()
-
- for i := 0; i < l; i++ {
- b := s.Index(i)
- if structPointer_IsNil(b) {
- return errRepeatedHasNil
- }
-
- o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup))
-
- err := o.enc_struct(p.sprop, b)
-
- if err != nil && !state.shouldContinue(err, nil) {
- if err == ErrNil {
- return errRepeatedHasNil
- }
- return err
- }
-
- o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup))
- }
- return state.err
-}
-
-func size_slice_struct_group(p *Properties, base structPointer) (n int) {
- s := structPointer_StructPointerSlice(base, p.field)
- l := s.Len()
-
- n += l * sizeVarint(uint64((p.Tag<<3)|WireStartGroup))
- n += l * sizeVarint(uint64((p.Tag<<3)|WireEndGroup))
- for i := 0; i < l; i++ {
- b := s.Index(i)
- if structPointer_IsNil(b) {
- return // return size up to this point
- }
-
- n += size_struct(p.sprop, b)
- }
- return
-}
-
-// Encode an extension map.
-func (o *Buffer) enc_map(p *Properties, base structPointer) error {
- exts := structPointer_ExtMap(base, p.field)
- if err := encodeExtensionsMap(*exts); err != nil {
- return err
- }
-
- return o.enc_map_body(*exts)
-}
-
-func (o *Buffer) enc_exts(p *Properties, base structPointer) error {
- exts := structPointer_Extensions(base, p.field)
-
- v, mu := exts.extensionsRead()
- if v == nil {
- return nil
- }
-
- mu.Lock()
- defer mu.Unlock()
- if err := encodeExtensionsMap(v); err != nil {
- return err
- }
-
- return o.enc_map_body(v)
-}
-
-func (o *Buffer) enc_map_body(v map[int32]Extension) error {
- // Fast-path for common cases: zero or one extensions.
- if len(v) <= 1 {
- for _, e := range v {
- o.buf = append(o.buf, e.enc...)
- }
- return nil
- }
-
- // Sort keys to provide a deterministic encoding.
- keys := make([]int, 0, len(v))
- for k := range v {
- keys = append(keys, int(k))
- }
- sort.Ints(keys)
-
- for _, k := range keys {
- o.buf = append(o.buf, v[int32(k)].enc...)
- }
- return nil
-}
-
-func size_map(p *Properties, base structPointer) int {
- v := structPointer_ExtMap(base, p.field)
- return extensionsMapSize(*v)
-}
-
-func size_exts(p *Properties, base structPointer) int {
- v := structPointer_Extensions(base, p.field)
- return extensionsSize(v)
-}
-
-// Encode a map field.
-func (o *Buffer) enc_new_map(p *Properties, base structPointer) error {
- var state errorState // XXX: or do we need to plumb this through?
-
- /*
- A map defined as
- map<key_type, value_type> map_field = N;
- is encoded in the same way as
- message MapFieldEntry {
- key_type key = 1;
- value_type value = 2;
- }
- repeated MapFieldEntry map_field = N;
- */
-
- v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V
- if v.Len() == 0 {
- return nil
- }
-
- keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype)
-
- enc := func() error {
- if err := p.mkeyprop.enc(o, p.mkeyprop, keybase); err != nil {
- return err
- }
- if err := p.mvalprop.enc(o, p.mvalprop, valbase); err != nil && err != ErrNil {
- return err
- }
- return nil
- }
-
- // Don't sort map keys. It is not required by the spec, and C++ doesn't do it.
- for _, key := range v.MapKeys() {
- val := v.MapIndex(key)
-
- keycopy.Set(key)
- valcopy.Set(val)
-
- o.buf = append(o.buf, p.tagcode...)
- if err := o.enc_len_thing(enc, &state); err != nil {
- return err
- }
- }
- return nil
-}
-
-func size_new_map(p *Properties, base structPointer) int {
- v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V
-
- keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype)
-
- n := 0
- for _, key := range v.MapKeys() {
- val := v.MapIndex(key)
- keycopy.Set(key)
- valcopy.Set(val)
-
- // Tag codes for key and val are the responsibility of the sub-sizer.
- keysize := p.mkeyprop.size(p.mkeyprop, keybase)
- valsize := p.mvalprop.size(p.mvalprop, valbase)
- entry := keysize + valsize
- // Add on tag code and length of map entry itself.
- n += len(p.tagcode) + sizeVarint(uint64(entry)) + entry
- }
- return n
-}
-
-// mapEncodeScratch returns a new reflect.Value matching the map's value type,
-// and a structPointer suitable for passing to an encoder or sizer.
-func mapEncodeScratch(mapType reflect.Type) (keycopy, valcopy reflect.Value, keybase, valbase structPointer) {
- // Prepare addressable doubly-indirect placeholders for the key and value types.
- // This is needed because the element-type encoders expect **T, but the map iteration produces T.
-
- keycopy = reflect.New(mapType.Key()).Elem() // addressable K
- keyptr := reflect.New(reflect.PtrTo(keycopy.Type())).Elem() // addressable *K
- keyptr.Set(keycopy.Addr()) //
- keybase = toStructPointer(keyptr.Addr()) // **K
-
- // Value types are more varied and require special handling.
- switch mapType.Elem().Kind() {
- case reflect.Slice:
- // []byte
- var dummy []byte
- valcopy = reflect.ValueOf(&dummy).Elem() // addressable []byte
- valbase = toStructPointer(valcopy.Addr())
- case reflect.Ptr:
- // message; the generated field type is map[K]*Msg (so V is *Msg),
- // so we only need one level of indirection.
- valcopy = reflect.New(mapType.Elem()).Elem() // addressable V
- valbase = toStructPointer(valcopy.Addr())
- default:
- // everything else
- valcopy = reflect.New(mapType.Elem()).Elem() // addressable V
- valptr := reflect.New(reflect.PtrTo(valcopy.Type())).Elem() // addressable *V
- valptr.Set(valcopy.Addr()) //
- valbase = toStructPointer(valptr.Addr()) // **V
- }
- return
-}
-
-// Encode a struct.
-func (o *Buffer) enc_struct(prop *StructProperties, base structPointer) error {
- var state errorState
- // Encode fields in tag order so that decoders may use optimizations
- // that depend on the ordering.
- // https://developers.google.com/protocol-buffers/docs/encoding#order
- for _, i := range prop.order {
- p := prop.Prop[i]
- if p.enc != nil {
- err := p.enc(o, p, base)
- if err != nil {
- if err == ErrNil {
- if p.Required && state.err == nil {
- state.err = &RequiredNotSetError{p.Name}
- }
- } else if err == errRepeatedHasNil {
- // Give more context to nil values in repeated fields.
- return errors.New("repeated field " + p.OrigName + " has nil element")
- } else if !state.shouldContinue(err, p) {
- return err
- }
- }
- if len(o.buf) > maxMarshalSize {
- return ErrTooLarge
- }
- }
- }
-
- // Do oneof fields.
- if prop.oneofMarshaler != nil {
- m := structPointer_Interface(base, prop.stype).(Message)
- if err := prop.oneofMarshaler(m, o); err == ErrNil {
- return errOneofHasNil
- } else if err != nil {
- return err
- }
- }
-
- // Add unrecognized fields at the end.
- if prop.unrecField.IsValid() {
- v := *structPointer_Bytes(base, prop.unrecField)
- if len(o.buf)+len(v) > maxMarshalSize {
- return ErrTooLarge
- }
- if len(v) > 0 {
- o.buf = append(o.buf, v...)
- }
- }
-
- return state.err
-}
-
-func size_struct(prop *StructProperties, base structPointer) (n int) {
- for _, i := range prop.order {
- p := prop.Prop[i]
- if p.size != nil {
- n += p.size(p, base)
- }
- }
-
- // Add unrecognized fields at the end.
- if prop.unrecField.IsValid() {
- v := *structPointer_Bytes(base, prop.unrecField)
- n += len(v)
- }
-
- // Factor in any oneof fields.
- if prop.oneofSizer != nil {
- m := structPointer_Interface(base, prop.stype).(Message)
- n += prop.oneofSizer(m)
- }
-
- return
-}
-
-var zeroes [20]byte // longer than any conceivable sizeVarint
-
-// Encode a struct, preceded by its encoded length (as a varint).
-func (o *Buffer) enc_len_struct(prop *StructProperties, base structPointer, state *errorState) error {
- return o.enc_len_thing(func() error { return o.enc_struct(prop, base) }, state)
-}
-
-// Encode something, preceded by its encoded length (as a varint).
-func (o *Buffer) enc_len_thing(enc func() error, state *errorState) error {
- iLen := len(o.buf)
- o.buf = append(o.buf, 0, 0, 0, 0) // reserve four bytes for length
- iMsg := len(o.buf)
- err := enc()
- if err != nil && !state.shouldContinue(err, nil) {
- return err
- }
- lMsg := len(o.buf) - iMsg
- lLen := sizeVarint(uint64(lMsg))
- switch x := lLen - (iMsg - iLen); {
- case x > 0: // actual length is x bytes larger than the space we reserved
- // Move msg x bytes right.
- o.buf = append(o.buf, zeroes[:x]...)
- copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg])
- case x < 0: // actual length is x bytes smaller than the space we reserved
- // Move msg x bytes left.
- copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg])
- o.buf = o.buf[:len(o.buf)+x] // x is negative
- }
- // Encode the length in the reserved space.
- o.buf = o.buf[:iLen]
- o.EncodeVarint(uint64(lMsg))
- o.buf = o.buf[:len(o.buf)+lMsg]
- return state.err
-}
-
-// errorState maintains the first error that occurs and updates that error
-// with additional context.
-type errorState struct {
- err error
-}
-
-// shouldContinue reports whether encoding should continue upon encountering the
-// given error. If the error is RequiredNotSetError, shouldContinue returns true
-// and, if this is the first appearance of that error, remembers it for future
-// reporting.
-//
-// If prop is not nil, it may update any error with additional context about the
-// field with the error.
-func (s *errorState) shouldContinue(err error, prop *Properties) bool {
- // Ignore unset required fields.
- reqNotSet, ok := err.(*RequiredNotSetError)
- if !ok {
- return false
- }
- if s.err == nil {
- if prop != nil {
- err = &RequiredNotSetError{prop.Name + "." + reqNotSet.field}
- }
- s.err = err
- }
- return true
-}
diff --git a/vendor/github.com/gogo/protobuf/proto/encode_gogo.go b/vendor/github.com/gogo/protobuf/proto/encode_gogo.go
index 32111b7f4..0f5fb173e 100644
--- a/vendor/github.com/gogo/protobuf/proto/encode_gogo.go
+++ b/vendor/github.com/gogo/protobuf/proto/encode_gogo.go
@@ -3,11 +3,6 @@
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
-// Go support for Protocol Buffers - Google's data interchange format
-//
-// Copyright 2010 The Go Authors. All rights reserved.
-// http://github.com/golang/protobuf/
-//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
@@ -18,9 +13,6 @@
// 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
@@ -36,315 +28,6 @@
package proto
-import (
- "reflect"
-)
-
func NewRequiredNotSetError(field string) *RequiredNotSetError {
return &RequiredNotSetError{field}
}
-
-type Sizer interface {
- Size() int
-}
-
-func (o *Buffer) enc_ext_slice_byte(p *Properties, base structPointer) error {
- s := *structPointer_Bytes(base, p.field)
- if s == nil {
- return ErrNil
- }
- o.buf = append(o.buf, s...)
- return nil
-}
-
-func size_ext_slice_byte(p *Properties, base structPointer) (n int) {
- s := *structPointer_Bytes(base, p.field)
- if s == nil {
- return 0
- }
- n += len(s)
- return
-}
-
-// Encode a reference to bool pointer.
-func (o *Buffer) enc_ref_bool(p *Properties, base structPointer) error {
- v := *structPointer_BoolVal(base, p.field)
- x := 0
- if v {
- x = 1
- }
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func size_ref_bool(p *Properties, base structPointer) int {
- return len(p.tagcode) + 1 // each bool takes exactly one byte
-}
-
-// Encode a reference to int32 pointer.
-func (o *Buffer) enc_ref_int32(p *Properties, base structPointer) error {
- v := structPointer_Word32Val(base, p.field)
- x := int32(word32Val_Get(v))
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func size_ref_int32(p *Properties, base structPointer) (n int) {
- v := structPointer_Word32Val(base, p.field)
- x := int32(word32Val_Get(v))
- n += len(p.tagcode)
- n += p.valSize(uint64(x))
- return
-}
-
-func (o *Buffer) enc_ref_uint32(p *Properties, base structPointer) error {
- v := structPointer_Word32Val(base, p.field)
- x := word32Val_Get(v)
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func size_ref_uint32(p *Properties, base structPointer) (n int) {
- v := structPointer_Word32Val(base, p.field)
- x := word32Val_Get(v)
- n += len(p.tagcode)
- n += p.valSize(uint64(x))
- return
-}
-
-// Encode a reference to an int64 pointer.
-func (o *Buffer) enc_ref_int64(p *Properties, base structPointer) error {
- v := structPointer_Word64Val(base, p.field)
- x := word64Val_Get(v)
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, x)
- return nil
-}
-
-func size_ref_int64(p *Properties, base structPointer) (n int) {
- v := structPointer_Word64Val(base, p.field)
- x := word64Val_Get(v)
- n += len(p.tagcode)
- n += p.valSize(x)
- return
-}
-
-// Encode a reference to a string pointer.
-func (o *Buffer) enc_ref_string(p *Properties, base structPointer) error {
- v := *structPointer_StringVal(base, p.field)
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeStringBytes(v)
- return nil
-}
-
-func size_ref_string(p *Properties, base structPointer) (n int) {
- v := *structPointer_StringVal(base, p.field)
- n += len(p.tagcode)
- n += sizeStringBytes(v)
- return
-}
-
-// Encode a reference to a message struct.
-func (o *Buffer) enc_ref_struct_message(p *Properties, base structPointer) error {
- var state errorState
- structp := structPointer_GetRefStructPointer(base, p.field)
- if structPointer_IsNil(structp) {
- return ErrNil
- }
-
- // Can the object marshal itself?
- if p.isMarshaler {
- m := structPointer_Interface(structp, p.stype).(Marshaler)
- data, err := m.Marshal()
- if err != nil && !state.shouldContinue(err, nil) {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- return nil
- }
-
- o.buf = append(o.buf, p.tagcode...)
- return o.enc_len_struct(p.sprop, structp, &state)
-}
-
-//TODO this is only copied, please fix this
-func size_ref_struct_message(p *Properties, base structPointer) int {
- structp := structPointer_GetRefStructPointer(base, p.field)
- if structPointer_IsNil(structp) {
- return 0
- }
-
- // Can the object marshal itself?
- if p.isMarshaler {
- m := structPointer_Interface(structp, p.stype).(Marshaler)
- data, _ := m.Marshal()
- n0 := len(p.tagcode)
- n1 := sizeRawBytes(data)
- return n0 + n1
- }
-
- n0 := len(p.tagcode)
- n1 := size_struct(p.sprop, structp)
- n2 := sizeVarint(uint64(n1)) // size of encoded length
- return n0 + n1 + n2
-}
-
-// Encode a slice of references to message struct pointers ([]struct).
-func (o *Buffer) enc_slice_ref_struct_message(p *Properties, base structPointer) error {
- var state errorState
- ss := structPointer_StructRefSlice(base, p.field, p.stype.Size())
- l := ss.Len()
- for i := 0; i < l; i++ {
- structp := ss.Index(i)
- if structPointer_IsNil(structp) {
- return errRepeatedHasNil
- }
-
- // Can the object marshal itself?
- if p.isMarshaler {
- m := structPointer_Interface(structp, p.stype).(Marshaler)
- data, err := m.Marshal()
- if err != nil && !state.shouldContinue(err, nil) {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- continue
- }
-
- o.buf = append(o.buf, p.tagcode...)
- err := o.enc_len_struct(p.sprop, structp, &state)
- if err != nil && !state.shouldContinue(err, nil) {
- if err == ErrNil {
- return errRepeatedHasNil
- }
- return err
- }
-
- }
- return state.err
-}
-
-//TODO this is only copied, please fix this
-func size_slice_ref_struct_message(p *Properties, base structPointer) (n int) {
- ss := structPointer_StructRefSlice(base, p.field, p.stype.Size())
- l := ss.Len()
- n += l * len(p.tagcode)
- for i := 0; i < l; i++ {
- structp := ss.Index(i)
- if structPointer_IsNil(structp) {
- return // return the size up to this point
- }
-
- // Can the object marshal itself?
- if p.isMarshaler {
- m := structPointer_Interface(structp, p.stype).(Marshaler)
- data, _ := m.Marshal()
- n += len(p.tagcode)
- n += sizeRawBytes(data)
- continue
- }
-
- n0 := size_struct(p.sprop, structp)
- n1 := sizeVarint(uint64(n0)) // size of encoded length
- n += n0 + n1
- }
- return
-}
-
-func (o *Buffer) enc_custom_bytes(p *Properties, base structPointer) error {
- i := structPointer_InterfaceRef(base, p.field, p.ctype)
- if i == nil {
- return ErrNil
- }
- custom := i.(Marshaler)
- data, err := custom.Marshal()
- if err != nil {
- return err
- }
- if data == nil {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- return nil
-}
-
-func size_custom_bytes(p *Properties, base structPointer) (n int) {
- n += len(p.tagcode)
- i := structPointer_InterfaceRef(base, p.field, p.ctype)
- if i == nil {
- return 0
- }
- custom := i.(Marshaler)
- data, _ := custom.Marshal()
- n += sizeRawBytes(data)
- return
-}
-
-func (o *Buffer) enc_custom_ref_bytes(p *Properties, base structPointer) error {
- custom := structPointer_InterfaceAt(base, p.field, p.ctype).(Marshaler)
- data, err := custom.Marshal()
- if err != nil {
- return err
- }
- if data == nil {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- return nil
-}
-
-func size_custom_ref_bytes(p *Properties, base structPointer) (n int) {
- n += len(p.tagcode)
- i := structPointer_InterfaceAt(base, p.field, p.ctype)
- if i == nil {
- return 0
- }
- custom := i.(Marshaler)
- data, _ := custom.Marshal()
- n += sizeRawBytes(data)
- return
-}
-
-func (o *Buffer) enc_custom_slice_bytes(p *Properties, base structPointer) error {
- inter := structPointer_InterfaceRef(base, p.field, p.ctype)
- if inter == nil {
- return ErrNil
- }
- slice := reflect.ValueOf(inter)
- l := slice.Len()
- for i := 0; i < l; i++ {
- v := slice.Index(i)
- custom := v.Interface().(Marshaler)
- data, err := custom.Marshal()
- if err != nil {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- }
- return nil
-}
-
-func size_custom_slice_bytes(p *Properties, base structPointer) (n int) {
- inter := structPointer_InterfaceRef(base, p.field, p.ctype)
- if inter == nil {
- return 0
- }
- slice := reflect.ValueOf(inter)
- l := slice.Len()
- n += l * len(p.tagcode)
- for i := 0; i < l; i++ {
- v := slice.Index(i)
- custom := v.Interface().(Marshaler)
- data, _ := custom.Marshal()
- n += sizeRawBytes(data)
- }
- return
-}
diff --git a/vendor/github.com/gogo/protobuf/proto/equal.go b/vendor/github.com/gogo/protobuf/proto/equal.go
index 2ed1cf596..d4db5a1c1 100644
--- a/vendor/github.com/gogo/protobuf/proto/equal.go
+++ b/vendor/github.com/gogo/protobuf/proto/equal.go
@@ -109,15 +109,6 @@ func equalStruct(v1, v2 reflect.Value) bool {
// set/unset mismatch
return false
}
- b1, ok := f1.Interface().(raw)
- if ok {
- b2 := f2.Interface().(raw)
- // RawMessage
- if !bytes.Equal(b1.Bytes(), b2.Bytes()) {
- return false
- }
- continue
- }
f1, f2 = f1.Elem(), f2.Elem()
}
if !equalAny(f1, f2, sprop.Prop[i]) {
@@ -146,11 +137,7 @@ func equalStruct(v1, v2 reflect.Value) bool {
u1 := uf.Bytes()
u2 := v2.FieldByName("XXX_unrecognized").Bytes()
- if !bytes.Equal(u1, u2) {
- return false
- }
-
- return true
+ return bytes.Equal(u1, u2)
}
// v1 and v2 are known to have the same type.
@@ -261,6 +248,15 @@ func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool {
m1, m2 := e1.value, e2.value
+ if m1 == nil && m2 == nil {
+ // Both have only encoded form.
+ if bytes.Equal(e1.enc, e2.enc) {
+ continue
+ }
+ // The bytes are different, but the extensions might still be
+ // equal. We need to decode them to compare.
+ }
+
if m1 != nil && m2 != nil {
// Both are unencoded.
if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {
@@ -276,8 +272,12 @@ func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool {
desc = m[extNum]
}
if desc == nil {
+ // If both have only encoded form and the bytes are the same,
+ // it is handled above. We get here when the bytes are different.
+ // We don't know how to decode it, so just compare them as byte
+ // slices.
log.Printf("proto: don't know how to compare extension %d of %v", extNum, base)
- continue
+ return false
}
var err error
if m1 == nil {
diff --git a/vendor/github.com/gogo/protobuf/proto/extensions.go b/vendor/github.com/gogo/protobuf/proto/extensions.go
index 0dfcb538e..44ebd457c 100644
--- a/vendor/github.com/gogo/protobuf/proto/extensions.go
+++ b/vendor/github.com/gogo/protobuf/proto/extensions.go
@@ -38,6 +38,7 @@ package proto
import (
"errors"
"fmt"
+ "io"
"reflect"
"strconv"
"sync"
@@ -69,12 +70,6 @@ type extendableProtoV1 interface {
ExtensionMap() map[int32]Extension
}
-type extensionsBytes interface {
- Message
- ExtensionRangeArray() []ExtensionRange
- GetExtensions() *[]byte
-}
-
// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto.
type extensionAdapter struct {
extendableProtoV1
@@ -97,14 +92,31 @@ func (n notLocker) Unlock() {}
// extendable returns the extendableProto interface for the given generated proto message.
// If the proto message has the old extension format, it returns a wrapper that implements
// the extendableProto interface.
-func extendable(p interface{}) (extendableProto, bool) {
- if ep, ok := p.(extendableProto); ok {
- return ep, ok
- }
- if ep, ok := p.(extendableProtoV1); ok {
- return extensionAdapter{ep}, ok
+func extendable(p interface{}) (extendableProto, error) {
+ switch p := p.(type) {
+ case extendableProto:
+ if isNilPtr(p) {
+ return nil, fmt.Errorf("proto: nil %T is not extendable", p)
+ }
+ return p, nil
+ case extendableProtoV1:
+ if isNilPtr(p) {
+ return nil, fmt.Errorf("proto: nil %T is not extendable", p)
+ }
+ return extensionAdapter{p}, nil
+ case extensionsBytes:
+ return slowExtensionAdapter{p}, nil
}
- return nil, false
+ // Don't allocate a specific error containing %T:
+ // this is the hot path for Clone and MarshalText.
+ return nil, errNotExtendable
+}
+
+var errNotExtendable = errors.New("proto: not an extendable proto.Message")
+
+func isNilPtr(x interface{}) bool {
+ v := reflect.ValueOf(x)
+ return v.Kind() == reflect.Ptr && v.IsNil()
}
// XXX_InternalExtensions is an internal representation of proto extensions.
@@ -149,16 +161,6 @@ func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Loc
return e.p.extensionMap, &e.p.mu
}
-type extensionRange interface {
- Message
- ExtensionRangeArray() []ExtensionRange
-}
-
-var extendableProtoType = reflect.TypeOf((*extendableProto)(nil)).Elem()
-var extendableProtoV1Type = reflect.TypeOf((*extendableProtoV1)(nil)).Elem()
-var extendableBytesType = reflect.TypeOf((*extensionsBytes)(nil)).Elem()
-var extensionRangeType = reflect.TypeOf((*extensionRange)(nil)).Elem()
-
// ExtensionDesc represents an extension specification.
// Used in generated code from the protocol compiler.
type ExtensionDesc struct {
@@ -198,8 +200,8 @@ func SetRawExtension(base Message, id int32, b []byte) {
*ext = append(*ext, b...)
return
}
- epb, ok := extendable(base)
- if !ok {
+ epb, err := extendable(base)
+ if err != nil {
return
}
extmap := epb.extensionsWrite()
@@ -207,7 +209,7 @@ func SetRawExtension(base Message, id int32, b []byte) {
}
// isExtensionField returns true iff the given field number is in an extension range.
-func isExtensionField(pb extensionRange, field int32) bool {
+func isExtensionField(pb extendableProto, field int32) bool {
for _, er := range pb.ExtensionRangeArray() {
if er.Start <= field && field <= er.End {
return true
@@ -223,8 +225,11 @@ func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error {
if ea, ok := pbi.(extensionAdapter); ok {
pbi = ea.extendableProtoV1
}
+ if ea, ok := pbi.(slowExtensionAdapter); ok {
+ pbi = ea.extensionsBytes
+ }
if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b {
- return errors.New("proto: bad extended type; " + b.String() + " does not extend " + a.String())
+ return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a)
}
// Check the range.
if !isExtensionField(pb, extension.Field) {
@@ -269,80 +274,6 @@ func extensionProperties(ed *ExtensionDesc) *Properties {
return prop
}
-// encode encodes any unmarshaled (unencoded) extensions in e.
-func encodeExtensions(e *XXX_InternalExtensions) error {
- m, mu := e.extensionsRead()
- if m == nil {
- return nil // fast path
- }
- mu.Lock()
- defer mu.Unlock()
- return encodeExtensionsMap(m)
-}
-
-// encode encodes any unmarshaled (unencoded) extensions in e.
-func encodeExtensionsMap(m map[int32]Extension) error {
- for k, e := range m {
- if e.value == nil || e.desc == nil {
- // Extension is only in its encoded form.
- continue
- }
-
- // We don't skip extensions that have an encoded form set,
- // because the extension value may have been mutated after
- // the last time this function was called.
-
- et := reflect.TypeOf(e.desc.ExtensionType)
- props := extensionProperties(e.desc)
-
- p := NewBuffer(nil)
- // If e.value has type T, the encoder expects a *struct{ X T }.
- // Pass a *T with a zero field and hope it all works out.
- x := reflect.New(et)
- x.Elem().Set(reflect.ValueOf(e.value))
- if err := props.enc(p, props, toStructPointer(x)); err != nil {
- return err
- }
- e.enc = p.buf
- m[k] = e
- }
- return nil
-}
-
-func extensionsSize(e *XXX_InternalExtensions) (n int) {
- m, mu := e.extensionsRead()
- if m == nil {
- return 0
- }
- mu.Lock()
- defer mu.Unlock()
- return extensionsMapSize(m)
-}
-
-func extensionsMapSize(m map[int32]Extension) (n int) {
- for _, e := range m {
- if e.value == nil || e.desc == nil {
- // Extension is only in its encoded form.
- n += len(e.enc)
- continue
- }
-
- // We don't skip extensions that have an encoded form set,
- // because the extension value may have been mutated after
- // the last time this function was called.
-
- et := reflect.TypeOf(e.desc.ExtensionType)
- props := extensionProperties(e.desc)
-
- // If e.value has type T, the encoder expects a *struct{ X T }.
- // Pass a *T with a zero field and hope it all works out.
- x := reflect.New(et)
- x.Elem().Set(reflect.ValueOf(e.value))
- n += props.size(props, toStructPointer(x))
- }
- return
-}
-
// HasExtension returns whether the given extension is present in pb.
func HasExtension(pb Message, extension *ExtensionDesc) bool {
if epb, doki := pb.(extensionsBytes); doki {
@@ -366,8 +297,8 @@ func HasExtension(pb Message, extension *ExtensionDesc) bool {
return false
}
// TODO: Check types, field numbers, etc.?
- epb, ok := extendable(pb)
- if !ok {
+ epb, err := extendable(pb)
+ if err != nil {
return false
}
extmap, mu := epb.extensionsRead()
@@ -375,46 +306,26 @@ func HasExtension(pb Message, extension *ExtensionDesc) bool {
return false
}
mu.Lock()
- _, ok = extmap[extension.Field]
+ _, ok := extmap[extension.Field]
mu.Unlock()
return ok
}
-func deleteExtension(pb extensionsBytes, theFieldNum int32, offset int) int {
- ext := pb.GetExtensions()
- for offset < len(*ext) {
- tag, n1 := DecodeVarint((*ext)[offset:])
- fieldNum := int32(tag >> 3)
- wireType := int(tag & 0x7)
- n2, err := size((*ext)[offset+n1:], wireType)
- if err != nil {
- panic(err)
- }
- newOffset := offset + n1 + n2
- if fieldNum == theFieldNum {
- *ext = append((*ext)[:offset], (*ext)[newOffset:]...)
- return offset
- }
- offset = newOffset
- }
- return -1
-}
-
// ClearExtension removes the given extension from pb.
func ClearExtension(pb Message, extension *ExtensionDesc) {
clearExtension(pb, extension.Field)
}
func clearExtension(pb Message, fieldNum int32) {
- if epb, doki := pb.(extensionsBytes); doki {
+ if epb, ok := pb.(extensionsBytes); ok {
offset := 0
for offset != -1 {
offset = deleteExtension(epb, fieldNum, offset)
}
return
}
- epb, ok := extendable(pb)
- if !ok {
+ epb, err := extendable(pb)
+ if err != nil {
return
}
// TODO: Check types, field numbers, etc.?
@@ -422,39 +333,33 @@ func clearExtension(pb Message, fieldNum int32) {
delete(extmap, fieldNum)
}
-// GetExtension parses and returns the given extension of pb.
-// If the extension is not present and has no default value it returns ErrMissingExtension.
+// GetExtension retrieves a proto2 extended field from pb.
+//
+// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil),
+// then GetExtension parses the encoded field and returns a Go value of the specified type.
+// If the field is not present, then the default value is returned (if one is specified),
+// otherwise ErrMissingExtension is reported.
+//
+// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil),
+// then GetExtension returns the raw encoded bytes of the field extension.
func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
if epb, doki := pb.(extensionsBytes); doki {
ext := epb.GetExtensions()
- o := 0
- for o < len(*ext) {
- tag, n := DecodeVarint((*ext)[o:])
- fieldNum := int32(tag >> 3)
- wireType := int(tag & 0x7)
- l, err := size((*ext)[o+n:], wireType)
- if err != nil {
- return nil, err
- }
- if int32(fieldNum) == extension.Field {
- v, err := decodeExtension((*ext)[o:o+n+l], extension)
- if err != nil {
- return nil, err
- }
- return v, nil
- }
- o += n + l
- }
- return defaultExtensionValue(extension)
+ return decodeExtensionFromBytes(extension, *ext)
}
- epb, ok := extendable(pb)
- if !ok {
- return nil, errors.New("proto: not an extendable proto")
- }
- if err := checkExtensionTypes(epb, extension); err != nil {
+
+ epb, err := extendable(pb)
+ if err != nil {
return nil, err
}
+ if extension.ExtendedType != nil {
+ // can only check type if this is a complete descriptor
+ if cerr := checkExtensionTypes(epb, extension); cerr != nil {
+ return nil, cerr
+ }
+ }
+
emap, mu := epb.extensionsRead()
if emap == nil {
return defaultExtensionValue(extension)
@@ -479,6 +384,11 @@ func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
return e.value, nil
}
+ if extension.ExtensionType == nil {
+ // incomplete descriptor
+ return e.enc, nil
+ }
+
v, err := decodeExtension(e.enc, extension)
if err != nil {
return nil, err
@@ -496,6 +406,11 @@ func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
// defaultExtensionValue returns the default value for extension.
// If no default for an extension is defined ErrMissingExtension is returned.
func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) {
+ if extension.ExtensionType == nil {
+ // incomplete descriptor, so no default
+ return nil, ErrMissingExtension
+ }
+
t := reflect.TypeOf(extension.ExtensionType)
props := extensionProperties(extension)
@@ -530,31 +445,28 @@ func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) {
// decodeExtension decodes an extension encoded in b.
func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) {
- o := NewBuffer(b)
-
t := reflect.TypeOf(extension.ExtensionType)
-
- props := extensionProperties(extension)
+ unmarshal := typeUnmarshaler(t, extension.Tag)
// t is a pointer to a struct, pointer to basic type or a slice.
- // Allocate a "field" to store the pointer/slice itself; the
- // pointer/slice will be stored here. We pass
- // the address of this field to props.dec.
- // This passes a zero field and a *t and lets props.dec
- // interpret it as a *struct{ x t }.
+ // Allocate space to store the pointer/slice.
value := reflect.New(t).Elem()
+ var err error
for {
- // Discard wire type and field number varint. It isn't needed.
- if _, err := o.DecodeVarint(); err != nil {
- return nil, err
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
}
+ b = b[n:]
+ wire := int(x) & 7
- if err := props.dec(o, props, toStructPointer(value.Addr())); err != nil {
+ b, err = unmarshal(b, valToPointer(value.Addr()), wire)
+ if err != nil {
return nil, err
}
- if o.index >= len(o.buf) {
+ if len(b) == 0 {
break
}
}
@@ -564,9 +476,13 @@ func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) {
// GetExtensions returns a slice of the extensions present in pb that are also listed in es.
// The returned slice has the same length as es; missing extensions will appear as nil elements.
func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) {
+ epb, err := extendable(pb)
+ if err != nil {
+ return nil, err
+ }
extensions = make([]interface{}, len(es))
for i, e := range es {
- extensions[i], err = GetExtension(pb, e)
+ extensions[i], err = GetExtension(epb, e)
if err == ErrMissingExtension {
err = nil
}
@@ -581,9 +497,9 @@ func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, e
// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing
// just the Field field, which defines the extension's field number.
func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {
- epb, ok := extendable(pb)
- if !ok {
- return nil, fmt.Errorf("proto: %T is not an extendable proto.Message", pb)
+ epb, err := extendable(pb)
+ if err != nil {
+ return nil, err
}
registeredExtensions := RegisteredExtensions(pb)
@@ -610,23 +526,18 @@ func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {
// SetExtension sets the specified extension of pb to the specified value.
func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error {
- if epb, doki := pb.(extensionsBytes); doki {
- ClearExtension(pb, extension)
- ext := epb.GetExtensions()
- et := reflect.TypeOf(extension.ExtensionType)
- props := extensionProperties(extension)
- p := NewBuffer(nil)
- x := reflect.New(et)
- x.Elem().Set(reflect.ValueOf(value))
- if err := props.enc(p, props, toStructPointer(x)); err != nil {
+ if epb, ok := pb.(extensionsBytes); ok {
+ newb, err := encodeExtension(extension, value)
+ if err != nil {
return err
}
- *ext = append(*ext, p.buf...)
+ bb := epb.GetExtensions()
+ *bb = append(*bb, newb...)
return nil
}
- epb, ok := extendable(pb)
- if !ok {
- return errors.New("proto: not an extendable proto")
+ epb, err := extendable(pb)
+ if err != nil {
+ return err
}
if err := checkExtensionTypes(epb, extension); err != nil {
return err
@@ -656,8 +567,8 @@ func ClearAllExtensions(pb Message) {
*ext = []byte{}
return
}
- epb, ok := extendable(pb)
- if !ok {
+ epb, err := extendable(pb)
+ if err != nil {
return
}
m := epb.extensionsWrite()
diff --git a/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go b/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go
index ea6478f00..53ebd8cca 100644
--- a/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go
+++ b/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go
@@ -32,12 +32,36 @@ import (
"bytes"
"errors"
"fmt"
+ "io"
"reflect"
"sort"
"strings"
"sync"
)
+type extensionsBytes interface {
+ Message
+ ExtensionRangeArray() []ExtensionRange
+ GetExtensions() *[]byte
+}
+
+type slowExtensionAdapter struct {
+ extensionsBytes
+}
+
+func (s slowExtensionAdapter) extensionsWrite() map[int32]Extension {
+ panic("Please report a bug to github.com/gogo/protobuf if you see this message: Writing extensions is not supported for extensions stored in a byte slice field.")
+}
+
+func (s slowExtensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) {
+ b := s.GetExtensions()
+ m, err := BytesToExtensionsMap(*b)
+ if err != nil {
+ panic(err)
+ }
+ return m, notLocker{}
+}
+
func GetBoolExtension(pb Message, extension *ExtensionDesc, ifnotset bool) bool {
if reflect.ValueOf(pb).IsNil() {
return ifnotset
@@ -56,19 +80,28 @@ func GetBoolExtension(pb Message, extension *ExtensionDesc, ifnotset bool) bool
}
func (this *Extension) Equal(that *Extension) bool {
+ if err := this.Encode(); err != nil {
+ return false
+ }
+ if err := that.Encode(); err != nil {
+ return false
+ }
return bytes.Equal(this.enc, that.enc)
}
func (this *Extension) Compare(that *Extension) int {
+ if err := this.Encode(); err != nil {
+ return 1
+ }
+ if err := that.Encode(); err != nil {
+ return -1
+ }
return bytes.Compare(this.enc, that.enc)
}
func SizeOfInternalExtension(m extendableProto) (n int) {
- return SizeOfExtensionMap(m.extensionsWrite())
-}
-
-func SizeOfExtensionMap(m map[int32]Extension) (n int) {
- return extensionsMapSize(m)
+ info := getMarshalInfo(reflect.TypeOf(m))
+ return info.sizeV1Extensions(m.extensionsWrite())
}
type sortableMapElem struct {
@@ -122,28 +155,26 @@ func EncodeInternalExtension(m extendableProto, data []byte) (n int, err error)
}
func EncodeExtensionMap(m map[int32]Extension, data []byte) (n int, err error) {
- if err := encodeExtensionsMap(m); err != nil {
- return 0, err
- }
- keys := make([]int, 0, len(m))
- for k := range m {
- keys = append(keys, int(k))
- }
- sort.Ints(keys)
- for _, k := range keys {
- n += copy(data[n:], m[int32(k)].enc)
+ o := 0
+ for _, e := range m {
+ if err := e.Encode(); err != nil {
+ return 0, err
+ }
+ n := copy(data[o:], e.enc)
+ if n != len(e.enc) {
+ return 0, io.ErrShortBuffer
+ }
+ o += n
}
- return n, nil
+ return o, nil
}
func GetRawExtension(m map[int32]Extension, id int32) ([]byte, error) {
- if m[id].value == nil || m[id].desc == nil {
- return m[id].enc, nil
- }
- if err := encodeExtensionsMap(m); err != nil {
+ e := m[id]
+ if err := e.Encode(); err != nil {
return nil, err
}
- return m[id].enc, nil
+ return e.enc, nil
}
func size(buf []byte, wire int) (int, error) {
@@ -218,35 +249,58 @@ func AppendExtension(e Message, tag int32, buf []byte) {
}
}
-func encodeExtension(e *Extension) error {
- if e.value == nil || e.desc == nil {
- // Extension is only in its encoded form.
- return nil
+func encodeExtension(extension *ExtensionDesc, value interface{}) ([]byte, error) {
+ u := getMarshalInfo(reflect.TypeOf(extension.ExtendedType))
+ ei := u.getExtElemInfo(extension)
+ v := value
+ p := toAddrPointer(&v, ei.isptr)
+ siz := ei.sizer(p, SizeVarint(ei.wiretag))
+ buf := make([]byte, 0, siz)
+ return ei.marshaler(buf, p, ei.wiretag, false)
+}
+
+func decodeExtensionFromBytes(extension *ExtensionDesc, buf []byte) (interface{}, error) {
+ o := 0
+ for o < len(buf) {
+ tag, n := DecodeVarint((buf)[o:])
+ fieldNum := int32(tag >> 3)
+ wireType := int(tag & 0x7)
+ if o+n > len(buf) {
+ return nil, fmt.Errorf("unable to decode extension")
+ }
+ l, err := size((buf)[o+n:], wireType)
+ if err != nil {
+ return nil, err
+ }
+ if int32(fieldNum) == extension.Field {
+ if o+n+l > len(buf) {
+ return nil, fmt.Errorf("unable to decode extension")
+ }
+ v, err := decodeExtension((buf)[o:o+n+l], extension)
+ if err != nil {
+ return nil, err
+ }
+ return v, nil
+ }
+ o += n + l
}
- // We don't skip extensions that have an encoded form set,
- // because the extension value may have been mutated after
- // the last time this function was called.
-
- et := reflect.TypeOf(e.desc.ExtensionType)
- props := extensionProperties(e.desc)
-
- p := NewBuffer(nil)
- // If e.value has type T, the encoder expects a *struct{ X T }.
- // Pass a *T with a zero field and hope it all works out.
- x := reflect.New(et)
- x.Elem().Set(reflect.ValueOf(e.value))
- if err := props.enc(p, props, toStructPointer(x)); err != nil {
- return err
+ return defaultExtensionValue(extension)
+}
+
+func (this *Extension) Encode() error {
+ if this.enc == nil {
+ var err error
+ this.enc, err = encodeExtension(this.desc, this.value)
+ if err != nil {
+ return err
+ }
}
- e.enc = p.buf
return nil
}
func (this Extension) GoString() string {
- if this.enc == nil {
- if err := encodeExtension(&this); err != nil {
- panic(err)
- }
+ if err := this.Encode(); err != nil {
+ return fmt.Sprintf("error encoding extension: %v", err)
}
return fmt.Sprintf("proto.NewExtension(%#v)", this.enc)
}
@@ -292,3 +346,23 @@ func GetUnsafeExtensionsMap(extendable Message) map[int32]Extension {
pb := extendable.(extendableProto)
return pb.extensionsWrite()
}
+
+func deleteExtension(pb extensionsBytes, theFieldNum int32, offset int) int {
+ ext := pb.GetExtensions()
+ for offset < len(*ext) {
+ tag, n1 := DecodeVarint((*ext)[offset:])
+ fieldNum := int32(tag >> 3)
+ wireType := int(tag & 0x7)
+ n2, err := size((*ext)[offset+n1:], wireType)
+ if err != nil {
+ panic(err)
+ }
+ newOffset := offset + n1 + n2
+ if fieldNum == theFieldNum {
+ *ext = append((*ext)[:offset], (*ext)[newOffset:]...)
+ return offset
+ }
+ offset = newOffset
+ }
+ return -1
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/lib.go b/vendor/github.com/gogo/protobuf/proto/lib.go
index 7580bb45c..b2271d0b7 100644
--- a/vendor/github.com/gogo/protobuf/proto/lib.go
+++ b/vendor/github.com/gogo/protobuf/proto/lib.go
@@ -73,7 +73,6 @@ for a protocol buffer variable v:
When the .proto file specifies `syntax="proto3"`, there are some differences:
- Non-repeated fields of non-message type are values instead of pointers.
- - Getters are only generated for message and oneof fields.
- Enum types do not get an Enum method.
The simplest way to describe this is to see an example.
@@ -274,6 +273,67 @@ import (
"sync"
)
+// RequiredNotSetError is an error type returned by either Marshal or Unmarshal.
+// Marshal reports this when a required field is not initialized.
+// Unmarshal reports this when a required field is missing from the wire data.
+type RequiredNotSetError struct{ field string }
+
+func (e *RequiredNotSetError) Error() string {
+ if e.field == "" {
+ return fmt.Sprintf("proto: required field not set")
+ }
+ return fmt.Sprintf("proto: required field %q not set", e.field)
+}
+func (e *RequiredNotSetError) RequiredNotSet() bool {
+ return true
+}
+
+type invalidUTF8Error struct{ field string }
+
+func (e *invalidUTF8Error) Error() string {
+ if e.field == "" {
+ return "proto: invalid UTF-8 detected"
+ }
+ return fmt.Sprintf("proto: field %q contains invalid UTF-8", e.field)
+}
+func (e *invalidUTF8Error) InvalidUTF8() bool {
+ return true
+}
+
+// errInvalidUTF8 is a sentinel error to identify fields with invalid UTF-8.
+// This error should not be exposed to the external API as such errors should
+// be recreated with the field information.
+var errInvalidUTF8 = &invalidUTF8Error{}
+
+// isNonFatal reports whether the error is either a RequiredNotSet error
+// or a InvalidUTF8 error.
+func isNonFatal(err error) bool {
+ if re, ok := err.(interface{ RequiredNotSet() bool }); ok && re.RequiredNotSet() {
+ return true
+ }
+ if re, ok := err.(interface{ InvalidUTF8() bool }); ok && re.InvalidUTF8() {
+ return true
+ }
+ return false
+}
+
+type nonFatal struct{ E error }
+
+// Merge merges err into nf and reports whether it was successful.
+// Otherwise it returns false for any fatal non-nil errors.
+func (nf *nonFatal) Merge(err error) (ok bool) {
+ if err == nil {
+ return true // not an error
+ }
+ if !isNonFatal(err) {
+ return false // fatal error
+ }
+ if nf.E == nil {
+ nf.E = err // store first instance of non-fatal error
+ }
+ return true
+}
+
// Message is implemented by generated protocol buffer messages.
type Message interface {
Reset()
@@ -310,16 +370,7 @@ type Buffer struct {
buf []byte // encode/decode byte stream
index int // read point
- // pools of basic types to amortize allocation.
- bools []bool
- uint32s []uint32
- uint64s []uint64
-
- // extra pools, only used with pointer_reflect.go
- int32s []int32
- int64s []int64
- float32s []float32
- float64s []float64
+ deterministic bool
}
// NewBuffer allocates a new Buffer and initializes its internal data to
@@ -344,6 +395,30 @@ func (p *Buffer) SetBuf(s []byte) {
// Bytes returns the contents of the Buffer.
func (p *Buffer) Bytes() []byte { return p.buf }
+// SetDeterministic sets whether to use deterministic serialization.
+//
+// Deterministic serialization guarantees that for a given binary, equal
+// messages will always be serialized to the same bytes. This implies:
+//
+// - Repeated serialization of a message will return the same bytes.
+// - Different processes of the same binary (which may be executing on
+// different machines) will serialize equal messages to the same bytes.
+//
+// Note that the deterministic serialization is NOT canonical across
+// languages. It is not guaranteed to remain stable over time. It is unstable
+// across different builds with schema changes due to unknown fields.
+// Users who need canonical serialization (e.g., persistent storage in a
+// canonical form, fingerprinting, etc.) should define their own
+// canonicalization specification and implement their own serializer rather
+// than relying on this API.
+//
+// If deterministic serialization is requested, map entries will be sorted
+// by keys in lexographical order. This is an implementation detail and
+// subject to change.
+func (p *Buffer) SetDeterministic(deterministic bool) {
+ p.deterministic = deterministic
+}
+
/*
* Helper routines for simplifying the creation of optional fields of basic type.
*/
@@ -553,9 +628,11 @@ func SetDefaults(pb Message) {
setDefaults(reflect.ValueOf(pb), true, false)
}
-// v is a pointer to a struct.
+// v is a struct.
func setDefaults(v reflect.Value, recur, zeros bool) {
- v = v.Elem()
+ if v.Kind() == reflect.Ptr {
+ v = v.Elem()
+ }
defaultMu.RLock()
dm, ok := defaults[v.Type()]
@@ -657,8 +734,11 @@ func setDefaults(v reflect.Value, recur, zeros bool) {
for _, ni := range dm.nested {
f := v.Field(ni)
- // f is *T or []*T or map[T]*T
+ // f is *T or T or []*T or []T
switch f.Kind() {
+ case reflect.Struct:
+ setDefaults(f, recur, zeros)
+
case reflect.Ptr:
if f.IsNil() {
continue
@@ -668,7 +748,7 @@ func setDefaults(v reflect.Value, recur, zeros bool) {
case reflect.Slice:
for i := 0; i < f.Len(); i++ {
e := f.Index(i)
- if e.IsNil() {
+ if e.Kind() == reflect.Ptr && e.IsNil() {
continue
}
setDefaults(e, recur, zeros)
@@ -740,6 +820,9 @@ func buildDefaultMessage(t reflect.Type) (dm defaultMessage) {
func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) {
var canHaveDefault bool
switch ft.Kind() {
+ case reflect.Struct:
+ nestedMessage = true // non-nullable
+
case reflect.Ptr:
if ft.Elem().Kind() == reflect.Struct {
nestedMessage = true
@@ -749,7 +832,7 @@ func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMes
case reflect.Slice:
switch ft.Elem().Kind() {
- case reflect.Ptr:
+ case reflect.Ptr, reflect.Struct:
nestedMessage = true // repeated message
case reflect.Uint8:
canHaveDefault = true // bytes field
@@ -832,22 +915,12 @@ func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMes
return sf, false, nil
}
+// mapKeys returns a sort.Interface to be used for sorting the map keys.
// Map fields may have key types of non-float scalars, strings and enums.
-// The easiest way to sort them in some deterministic order is to use fmt.
-// If this turns out to be inefficient we can always consider other options,
-// such as doing a Schwartzian transform.
-
func mapKeys(vs []reflect.Value) sort.Interface {
- s := mapKeySorter{
- vs: vs,
- // default Less function: textual comparison
- less: func(a, b reflect.Value) bool {
- return fmt.Sprint(a.Interface()) < fmt.Sprint(b.Interface())
- },
- }
+ s := mapKeySorter{vs: vs}
- // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps;
- // numeric keys are sorted numerically.
+ // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps.
if len(vs) == 0 {
return s
}
@@ -856,6 +929,12 @@ func mapKeys(vs []reflect.Value) sort.Interface {
s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() }
case reflect.Uint32, reflect.Uint64:
s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() }
+ case reflect.Bool:
+ s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true
+ case reflect.String:
+ s.less = func(a, b reflect.Value) bool { return a.String() < b.String() }
+ default:
+ panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind()))
}
return s
@@ -896,3 +975,13 @@ const GoGoProtoPackageIsVersion2 = true
// ProtoPackageIsVersion1 is referenced from generated protocol buffer files
// to assert that that code is compatible with this version of the proto package.
const GoGoProtoPackageIsVersion1 = true
+
+// InternalMessageInfo is a type used internally by generated .pb.go files.
+// This type is not intended to be used by non-generated code.
+// This type is not subject to any compatibility guarantee.
+type InternalMessageInfo struct {
+ marshal *marshalInfo
+ unmarshal *unmarshalInfo
+ merge *mergeInfo
+ discard *discardInfo
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/lib_gogo.go b/vendor/github.com/gogo/protobuf/proto/lib_gogo.go
index 4b4f7c909..b3aa39190 100644
--- a/vendor/github.com/gogo/protobuf/proto/lib_gogo.go
+++ b/vendor/github.com/gogo/protobuf/proto/lib_gogo.go
@@ -33,6 +33,14 @@ import (
"strconv"
)
+type Sizer interface {
+ Size() int
+}
+
+type ProtoSizer interface {
+ ProtoSize() int
+}
+
func MarshalJSONEnum(m map[int32]string, value int32) ([]byte, error) {
s, ok := m[value]
if !ok {
diff --git a/vendor/github.com/gogo/protobuf/proto/message_set.go b/vendor/github.com/gogo/protobuf/proto/message_set.go
index fd982decd..3b6ca41d5 100644
--- a/vendor/github.com/gogo/protobuf/proto/message_set.go
+++ b/vendor/github.com/gogo/protobuf/proto/message_set.go
@@ -42,6 +42,7 @@ import (
"fmt"
"reflect"
"sort"
+ "sync"
)
// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID.
@@ -94,10 +95,7 @@ func (ms *messageSet) find(pb Message) *_MessageSet_Item {
}
func (ms *messageSet) Has(pb Message) bool {
- if ms.find(pb) != nil {
- return true
- }
- return false
+ return ms.find(pb) != nil
}
func (ms *messageSet) Unmarshal(pb Message) error {
@@ -150,46 +148,42 @@ func skipVarint(buf []byte) []byte {
// MarshalMessageSet encodes the extension map represented by m in the message set wire format.
// It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option.
func MarshalMessageSet(exts interface{}) ([]byte, error) {
- var m map[int32]Extension
+ return marshalMessageSet(exts, false)
+}
+
+// marshaMessageSet implements above function, with the opt to turn on / off deterministic during Marshal.
+func marshalMessageSet(exts interface{}, deterministic bool) ([]byte, error) {
switch exts := exts.(type) {
case *XXX_InternalExtensions:
- if err := encodeExtensions(exts); err != nil {
- return nil, err
- }
- m, _ = exts.extensionsRead()
+ var u marshalInfo
+ siz := u.sizeMessageSet(exts)
+ b := make([]byte, 0, siz)
+ return u.appendMessageSet(b, exts, deterministic)
+
case map[int32]Extension:
- if err := encodeExtensionsMap(exts); err != nil {
- return nil, err
+ // This is an old-style extension map.
+ // Wrap it in a new-style XXX_InternalExtensions.
+ ie := XXX_InternalExtensions{
+ p: &struct {
+ mu sync.Mutex
+ extensionMap map[int32]Extension
+ }{
+ extensionMap: exts,
+ },
}
- m = exts
+
+ var u marshalInfo
+ siz := u.sizeMessageSet(&ie)
+ b := make([]byte, 0, siz)
+ return u.appendMessageSet(b, &ie, deterministic)
+
default:
return nil, errors.New("proto: not an extension map")
}
-
- // Sort extension IDs to provide a deterministic encoding.
- // See also enc_map in encode.go.
- ids := make([]int, 0, len(m))
- for id := range m {
- ids = append(ids, int(id))
- }
- sort.Ints(ids)
-
- ms := &messageSet{Item: make([]*_MessageSet_Item, 0, len(m))}
- for _, id := range ids {
- e := m[int32(id)]
- // Remove the wire type and field number varint, as well as the length varint.
- msg := skipVarint(skipVarint(e.enc))
-
- ms.Item = append(ms.Item, &_MessageSet_Item{
- TypeId: Int32(int32(id)),
- Message: msg,
- })
- }
- return Marshal(ms)
}
// UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format.
-// It is called by generated Unmarshal methods on protocol buffer messages with the message_set_wire_format option.
+// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option.
func UnmarshalMessageSet(buf []byte, exts interface{}) error {
var m map[int32]Extension
switch exts := exts.(type) {
@@ -235,7 +229,15 @@ func MarshalMessageSetJSON(exts interface{}) ([]byte, error) {
var m map[int32]Extension
switch exts := exts.(type) {
case *XXX_InternalExtensions:
- m, _ = exts.extensionsRead()
+ var mu sync.Locker
+ m, mu = exts.extensionsRead()
+ if m != nil {
+ // Keep the extensions map locked until we're done marshaling to prevent
+ // races between marshaling and unmarshaling the lazily-{en,de}coded
+ // values.
+ mu.Lock()
+ defer mu.Unlock()
+ }
case map[int32]Extension:
m = exts
default:
@@ -253,15 +255,16 @@ func MarshalMessageSetJSON(exts interface{}) ([]byte, error) {
for i, id := range ids {
ext := m[id]
- if i > 0 {
- b.WriteByte(',')
- }
-
msd, ok := messageSetMap[id]
if !ok {
// Unknown type; we can't render it, so skip it.
continue
}
+
+ if i > 0 && b.Len() > 1 {
+ b.WriteByte(',')
+ }
+
fmt.Fprintf(&b, `"[%s]":`, msd.name)
x := ext.value
diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go b/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go
index fb512e2e1..b6cad9083 100644
--- a/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go
+++ b/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go
@@ -29,7 +29,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// +build appengine js
+// +build purego appengine js
// This file contains an implementation of proto field accesses using package reflect.
// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can
@@ -38,32 +38,13 @@
package proto
import (
- "math"
"reflect"
+ "sync"
)
-// A structPointer is a pointer to a struct.
-type structPointer struct {
- v reflect.Value
-}
-
-// toStructPointer returns a structPointer equivalent to the given reflect value.
-// The reflect value must itself be a pointer to a struct.
-func toStructPointer(v reflect.Value) structPointer {
- return structPointer{v}
-}
-
-// IsNil reports whether p is nil.
-func structPointer_IsNil(p structPointer) bool {
- return p.v.IsNil()
-}
+const unsafeAllowed = false
-// Interface returns the struct pointer as an interface value.
-func structPointer_Interface(p structPointer, _ reflect.Type) interface{} {
- return p.v.Interface()
-}
-
-// A field identifies a field in a struct, accessible from a structPointer.
+// A field identifies a field in a struct, accessible from a pointer.
// In this implementation, a field is identified by the sequence of field indices
// passed to reflect's FieldByIndex.
type field []int
@@ -76,409 +57,301 @@ func toField(f *reflect.StructField) field {
// invalidField is an invalid field identifier.
var invalidField = field(nil)
+// zeroField is a noop when calling pointer.offset.
+var zeroField = field([]int{})
+
// IsValid reports whether the field identifier is valid.
func (f field) IsValid() bool { return f != nil }
-// field returns the given field in the struct as a reflect value.
-func structPointer_field(p structPointer, f field) reflect.Value {
- // Special case: an extension map entry with a value of type T
- // passes a *T to the struct-handling code with a zero field,
- // expecting that it will be treated as equivalent to *struct{ X T },
- // which has the same memory layout. We have to handle that case
- // specially, because reflect will panic if we call FieldByIndex on a
- // non-struct.
- if f == nil {
- return p.v.Elem()
- }
-
- return p.v.Elem().FieldByIndex(f)
+// The pointer type is for the table-driven decoder.
+// The implementation here uses a reflect.Value of pointer type to
+// create a generic pointer. In pointer_unsafe.go we use unsafe
+// instead of reflect to implement the same (but faster) interface.
+type pointer struct {
+ v reflect.Value
}
-// ifield returns the given field in the struct as an interface value.
-func structPointer_ifield(p structPointer, f field) interface{} {
- return structPointer_field(p, f).Addr().Interface()
+// toPointer converts an interface of pointer type to a pointer
+// that points to the same target.
+func toPointer(i *Message) pointer {
+ return pointer{v: reflect.ValueOf(*i)}
}
-// Bytes returns the address of a []byte field in the struct.
-func structPointer_Bytes(p structPointer, f field) *[]byte {
- return structPointer_ifield(p, f).(*[]byte)
+// toAddrPointer converts an interface to a pointer that points to
+// the interface data.
+func toAddrPointer(i *interface{}, isptr bool) pointer {
+ v := reflect.ValueOf(*i)
+ u := reflect.New(v.Type())
+ u.Elem().Set(v)
+ return pointer{v: u}
}
-// BytesSlice returns the address of a [][]byte field in the struct.
-func structPointer_BytesSlice(p structPointer, f field) *[][]byte {
- return structPointer_ifield(p, f).(*[][]byte)
+// valToPointer converts v to a pointer. v must be of pointer type.
+func valToPointer(v reflect.Value) pointer {
+ return pointer{v: v}
}
-// Bool returns the address of a *bool field in the struct.
-func structPointer_Bool(p structPointer, f field) **bool {
- return structPointer_ifield(p, f).(**bool)
+// offset converts from a pointer to a structure to a pointer to
+// one of its fields.
+func (p pointer) offset(f field) pointer {
+ return pointer{v: p.v.Elem().FieldByIndex(f).Addr()}
}
-// BoolVal returns the address of a bool field in the struct.
-func structPointer_BoolVal(p structPointer, f field) *bool {
- return structPointer_ifield(p, f).(*bool)
+func (p pointer) isNil() bool {
+ return p.v.IsNil()
}
-// BoolSlice returns the address of a []bool field in the struct.
-func structPointer_BoolSlice(p structPointer, f field) *[]bool {
- return structPointer_ifield(p, f).(*[]bool)
+// grow updates the slice s in place to make it one element longer.
+// s must be addressable.
+// Returns the (addressable) new element.
+func grow(s reflect.Value) reflect.Value {
+ n, m := s.Len(), s.Cap()
+ if n < m {
+ s.SetLen(n + 1)
+ } else {
+ s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem())))
+ }
+ return s.Index(n)
}
-// String returns the address of a *string field in the struct.
-func structPointer_String(p structPointer, f field) **string {
- return structPointer_ifield(p, f).(**string)
+func (p pointer) toInt64() *int64 {
+ return p.v.Interface().(*int64)
}
-
-// StringVal returns the address of a string field in the struct.
-func structPointer_StringVal(p structPointer, f field) *string {
- return structPointer_ifield(p, f).(*string)
+func (p pointer) toInt64Ptr() **int64 {
+ return p.v.Interface().(**int64)
}
-
-// StringSlice returns the address of a []string field in the struct.
-func structPointer_StringSlice(p structPointer, f field) *[]string {
- return structPointer_ifield(p, f).(*[]string)
+func (p pointer) toInt64Slice() *[]int64 {
+ return p.v.Interface().(*[]int64)
}
-// Extensions returns the address of an extension map field in the struct.
-func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions {
- return structPointer_ifield(p, f).(*XXX_InternalExtensions)
-}
+var int32ptr = reflect.TypeOf((*int32)(nil))
-// ExtMap returns the address of an extension map field in the struct.
-func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension {
- return structPointer_ifield(p, f).(*map[int32]Extension)
+func (p pointer) toInt32() *int32 {
+ return p.v.Convert(int32ptr).Interface().(*int32)
}
-// NewAt returns the reflect.Value for a pointer to a field in the struct.
-func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value {
- return structPointer_field(p, f).Addr()
+// The toInt32Ptr/Slice methods don't work because of enums.
+// Instead, we must use set/get methods for the int32ptr/slice case.
+/*
+ func (p pointer) toInt32Ptr() **int32 {
+ return p.v.Interface().(**int32)
}
-
-// SetStructPointer writes a *struct field in the struct.
-func structPointer_SetStructPointer(p structPointer, f field, q structPointer) {
- structPointer_field(p, f).Set(q.v)
+ func (p pointer) toInt32Slice() *[]int32 {
+ return p.v.Interface().(*[]int32)
}
-
-// GetStructPointer reads a *struct field in the struct.
-func structPointer_GetStructPointer(p structPointer, f field) structPointer {
- return structPointer{structPointer_field(p, f)}
+*/
+func (p pointer) getInt32Ptr() *int32 {
+ if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
+ // raw int32 type
+ return p.v.Elem().Interface().(*int32)
+ }
+ // an enum
+ return p.v.Elem().Convert(int32PtrType).Interface().(*int32)
+}
+func (p pointer) setInt32Ptr(v int32) {
+ // Allocate value in a *int32. Possibly convert that to a *enum.
+ // Then assign it to a **int32 or **enum.
+ // Note: we can convert *int32 to *enum, but we can't convert
+ // **int32 to **enum!
+ p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem()))
+}
+
+// getInt32Slice copies []int32 from p as a new slice.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) getInt32Slice() []int32 {
+ if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
+ // raw int32 type
+ return p.v.Elem().Interface().([]int32)
+ }
+ // an enum
+ // Allocate a []int32, then assign []enum's values into it.
+ // Note: we can't convert []enum to []int32.
+ slice := p.v.Elem()
+ s := make([]int32, slice.Len())
+ for i := 0; i < slice.Len(); i++ {
+ s[i] = int32(slice.Index(i).Int())
+ }
+ return s
}
-// StructPointerSlice the address of a []*struct field in the struct.
-func structPointer_StructPointerSlice(p structPointer, f field) structPointerSlice {
- return structPointerSlice{structPointer_field(p, f)}
+// setInt32Slice copies []int32 into p as a new slice.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) setInt32Slice(v []int32) {
+ if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
+ // raw int32 type
+ p.v.Elem().Set(reflect.ValueOf(v))
+ return
+ }
+ // an enum
+ // Allocate a []enum, then assign []int32's values into it.
+ // Note: we can't convert []enum to []int32.
+ slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v))
+ for i, x := range v {
+ slice.Index(i).SetInt(int64(x))
+ }
+ p.v.Elem().Set(slice)
}
-
-// A structPointerSlice represents the address of a slice of pointers to structs
-// (themselves messages or groups). That is, v.Type() is *[]*struct{...}.
-type structPointerSlice struct {
- v reflect.Value
+func (p pointer) appendInt32Slice(v int32) {
+ grow(p.v.Elem()).SetInt(int64(v))
}
-func (p structPointerSlice) Len() int { return p.v.Len() }
-func (p structPointerSlice) Index(i int) structPointer { return structPointer{p.v.Index(i)} }
-func (p structPointerSlice) Append(q structPointer) {
- p.v.Set(reflect.Append(p.v, q.v))
+func (p pointer) toUint64() *uint64 {
+ return p.v.Interface().(*uint64)
}
-
-var (
- int32Type = reflect.TypeOf(int32(0))
- uint32Type = reflect.TypeOf(uint32(0))
- float32Type = reflect.TypeOf(float32(0))
- int64Type = reflect.TypeOf(int64(0))
- uint64Type = reflect.TypeOf(uint64(0))
- float64Type = reflect.TypeOf(float64(0))
-)
-
-// A word32 represents a field of type *int32, *uint32, *float32, or *enum.
-// That is, v.Type() is *int32, *uint32, *float32, or *enum and v is assignable.
-type word32 struct {
- v reflect.Value
+func (p pointer) toUint64Ptr() **uint64 {
+ return p.v.Interface().(**uint64)
}
-
-// IsNil reports whether p is nil.
-func word32_IsNil(p word32) bool {
- return p.v.IsNil()
+func (p pointer) toUint64Slice() *[]uint64 {
+ return p.v.Interface().(*[]uint64)
}
-
-// Set sets p to point at a newly allocated word with bits set to x.
-func word32_Set(p word32, o *Buffer, x uint32) {
- t := p.v.Type().Elem()
- switch t {
- case int32Type:
- if len(o.int32s) == 0 {
- o.int32s = make([]int32, uint32PoolSize)
- }
- o.int32s[0] = int32(x)
- p.v.Set(reflect.ValueOf(&o.int32s[0]))
- o.int32s = o.int32s[1:]
- return
- case uint32Type:
- if len(o.uint32s) == 0 {
- o.uint32s = make([]uint32, uint32PoolSize)
- }
- o.uint32s[0] = x
- p.v.Set(reflect.ValueOf(&o.uint32s[0]))
- o.uint32s = o.uint32s[1:]
- return
- case float32Type:
- if len(o.float32s) == 0 {
- o.float32s = make([]float32, uint32PoolSize)
- }
- o.float32s[0] = math.Float32frombits(x)
- p.v.Set(reflect.ValueOf(&o.float32s[0]))
- o.float32s = o.float32s[1:]
- return
- }
-
- // must be enum
- p.v.Set(reflect.New(t))
- p.v.Elem().SetInt(int64(int32(x)))
+func (p pointer) toUint32() *uint32 {
+ return p.v.Interface().(*uint32)
}
-
-// Get gets the bits pointed at by p, as a uint32.
-func word32_Get(p word32) uint32 {
- elem := p.v.Elem()
- switch elem.Kind() {
- case reflect.Int32:
- return uint32(elem.Int())
- case reflect.Uint32:
- return uint32(elem.Uint())
- case reflect.Float32:
- return math.Float32bits(float32(elem.Float()))
- }
- panic("unreachable")
+func (p pointer) toUint32Ptr() **uint32 {
+ return p.v.Interface().(**uint32)
}
-
-// Word32 returns a reference to a *int32, *uint32, *float32, or *enum field in the struct.
-func structPointer_Word32(p structPointer, f field) word32 {
- return word32{structPointer_field(p, f)}
+func (p pointer) toUint32Slice() *[]uint32 {
+ return p.v.Interface().(*[]uint32)
}
-
-// A word32Val represents a field of type int32, uint32, float32, or enum.
-// That is, v.Type() is int32, uint32, float32, or enum and v is assignable.
-type word32Val struct {
- v reflect.Value
+func (p pointer) toBool() *bool {
+ return p.v.Interface().(*bool)
}
-
-// Set sets *p to x.
-func word32Val_Set(p word32Val, x uint32) {
- switch p.v.Type() {
- case int32Type:
- p.v.SetInt(int64(x))
- return
- case uint32Type:
- p.v.SetUint(uint64(x))
- return
- case float32Type:
- p.v.SetFloat(float64(math.Float32frombits(x)))
- return
- }
-
- // must be enum
- p.v.SetInt(int64(int32(x)))
+func (p pointer) toBoolPtr() **bool {
+ return p.v.Interface().(**bool)
}
-
-// Get gets the bits pointed at by p, as a uint32.
-func word32Val_Get(p word32Val) uint32 {
- elem := p.v
- switch elem.Kind() {
- case reflect.Int32:
- return uint32(elem.Int())
- case reflect.Uint32:
- return uint32(elem.Uint())
- case reflect.Float32:
- return math.Float32bits(float32(elem.Float()))
- }
- panic("unreachable")
+func (p pointer) toBoolSlice() *[]bool {
+ return p.v.Interface().(*[]bool)
}
-
-// Word32Val returns a reference to a int32, uint32, float32, or enum field in the struct.
-func structPointer_Word32Val(p structPointer, f field) word32Val {
- return word32Val{structPointer_field(p, f)}
+func (p pointer) toFloat64() *float64 {
+ return p.v.Interface().(*float64)
}
-
-// A word32Slice is a slice of 32-bit values.
-// That is, v.Type() is []int32, []uint32, []float32, or []enum.
-type word32Slice struct {
- v reflect.Value
+func (p pointer) toFloat64Ptr() **float64 {
+ return p.v.Interface().(**float64)
}
-
-func (p word32Slice) Append(x uint32) {
- n, m := p.v.Len(), p.v.Cap()
- if n < m {
- p.v.SetLen(n + 1)
- } else {
- t := p.v.Type().Elem()
- p.v.Set(reflect.Append(p.v, reflect.Zero(t)))
- }
- elem := p.v.Index(n)
- switch elem.Kind() {
- case reflect.Int32:
- elem.SetInt(int64(int32(x)))
- case reflect.Uint32:
- elem.SetUint(uint64(x))
- case reflect.Float32:
- elem.SetFloat(float64(math.Float32frombits(x)))
- }
+func (p pointer) toFloat64Slice() *[]float64 {
+ return p.v.Interface().(*[]float64)
}
-
-func (p word32Slice) Len() int {
- return p.v.Len()
+func (p pointer) toFloat32() *float32 {
+ return p.v.Interface().(*float32)
}
-
-func (p word32Slice) Index(i int) uint32 {
- elem := p.v.Index(i)
- switch elem.Kind() {
- case reflect.Int32:
- return uint32(elem.Int())
- case reflect.Uint32:
- return uint32(elem.Uint())
- case reflect.Float32:
- return math.Float32bits(float32(elem.Float()))
- }
- panic("unreachable")
+func (p pointer) toFloat32Ptr() **float32 {
+ return p.v.Interface().(**float32)
}
-
-// Word32Slice returns a reference to a []int32, []uint32, []float32, or []enum field in the struct.
-func structPointer_Word32Slice(p structPointer, f field) word32Slice {
- return word32Slice{structPointer_field(p, f)}
+func (p pointer) toFloat32Slice() *[]float32 {
+ return p.v.Interface().(*[]float32)
}
-
-// word64 is like word32 but for 64-bit values.
-type word64 struct {
- v reflect.Value
+func (p pointer) toString() *string {
+ return p.v.Interface().(*string)
}
-
-func word64_Set(p word64, o *Buffer, x uint64) {
- t := p.v.Type().Elem()
- switch t {
- case int64Type:
- if len(o.int64s) == 0 {
- o.int64s = make([]int64, uint64PoolSize)
- }
- o.int64s[0] = int64(x)
- p.v.Set(reflect.ValueOf(&o.int64s[0]))
- o.int64s = o.int64s[1:]
- return
- case uint64Type:
- if len(o.uint64s) == 0 {
- o.uint64s = make([]uint64, uint64PoolSize)
- }
- o.uint64s[0] = x
- p.v.Set(reflect.ValueOf(&o.uint64s[0]))
- o.uint64s = o.uint64s[1:]
- return
- case float64Type:
- if len(o.float64s) == 0 {
- o.float64s = make([]float64, uint64PoolSize)
- }
- o.float64s[0] = math.Float64frombits(x)
- p.v.Set(reflect.ValueOf(&o.float64s[0]))
- o.float64s = o.float64s[1:]
- return
- }
- panic("unreachable")
+func (p pointer) toStringPtr() **string {
+ return p.v.Interface().(**string)
}
-
-func word64_IsNil(p word64) bool {
- return p.v.IsNil()
+func (p pointer) toStringSlice() *[]string {
+ return p.v.Interface().(*[]string)
}
-
-func word64_Get(p word64) uint64 {
- elem := p.v.Elem()
- switch elem.Kind() {
- case reflect.Int64:
- return uint64(elem.Int())
- case reflect.Uint64:
- return elem.Uint()
- case reflect.Float64:
- return math.Float64bits(elem.Float())
- }
- panic("unreachable")
+func (p pointer) toBytes() *[]byte {
+ return p.v.Interface().(*[]byte)
}
-
-func structPointer_Word64(p structPointer, f field) word64 {
- return word64{structPointer_field(p, f)}
+func (p pointer) toBytesSlice() *[][]byte {
+ return p.v.Interface().(*[][]byte)
+}
+func (p pointer) toExtensions() *XXX_InternalExtensions {
+ return p.v.Interface().(*XXX_InternalExtensions)
+}
+func (p pointer) toOldExtensions() *map[int32]Extension {
+ return p.v.Interface().(*map[int32]Extension)
+}
+func (p pointer) getPointer() pointer {
+ return pointer{v: p.v.Elem()}
+}
+func (p pointer) setPointer(q pointer) {
+ p.v.Elem().Set(q.v)
+}
+func (p pointer) appendPointer(q pointer) {
+ grow(p.v.Elem()).Set(q.v)
}
-// word64Val is like word32Val but for 64-bit values.
-type word64Val struct {
- v reflect.Value
+// getPointerSlice copies []*T from p as a new []pointer.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) getPointerSlice() []pointer {
+ if p.v.IsNil() {
+ return nil
+ }
+ n := p.v.Elem().Len()
+ s := make([]pointer, n)
+ for i := 0; i < n; i++ {
+ s[i] = pointer{v: p.v.Elem().Index(i)}
+ }
+ return s
}
-func word64Val_Set(p word64Val, o *Buffer, x uint64) {
- switch p.v.Type() {
- case int64Type:
- p.v.SetInt(int64(x))
- return
- case uint64Type:
- p.v.SetUint(x)
- return
- case float64Type:
- p.v.SetFloat(math.Float64frombits(x))
+// setPointerSlice copies []pointer into p as a new []*T.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) setPointerSlice(v []pointer) {
+ if v == nil {
+ p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem())
return
}
- panic("unreachable")
+ s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v))
+ for _, p := range v {
+ s = reflect.Append(s, p.v)
+ }
+ p.v.Elem().Set(s)
}
-func word64Val_Get(p word64Val) uint64 {
- elem := p.v
- switch elem.Kind() {
- case reflect.Int64:
- return uint64(elem.Int())
- case reflect.Uint64:
- return elem.Uint()
- case reflect.Float64:
- return math.Float64bits(elem.Float())
+// getInterfacePointer returns a pointer that points to the
+// interface data of the interface pointed by p.
+func (p pointer) getInterfacePointer() pointer {
+ if p.v.Elem().IsNil() {
+ return pointer{v: p.v.Elem()}
}
- panic("unreachable")
+ return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct
}
-func structPointer_Word64Val(p structPointer, f field) word64Val {
- return word64Val{structPointer_field(p, f)}
+func (p pointer) asPointerTo(t reflect.Type) reflect.Value {
+ // TODO: check that p.v.Type().Elem() == t?
+ return p.v
}
-type word64Slice struct {
- v reflect.Value
+func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ return *p
}
-
-func (p word64Slice) Append(x uint64) {
- n, m := p.v.Len(), p.v.Cap()
- if n < m {
- p.v.SetLen(n + 1)
- } else {
- t := p.v.Type().Elem()
- p.v.Set(reflect.Append(p.v, reflect.Zero(t)))
- }
- elem := p.v.Index(n)
- switch elem.Kind() {
- case reflect.Int64:
- elem.SetInt(int64(int64(x)))
- case reflect.Uint64:
- elem.SetUint(uint64(x))
- case reflect.Float64:
- elem.SetFloat(float64(math.Float64frombits(x)))
- }
+func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ *p = v
}
-
-func (p word64Slice) Len() int {
- return p.v.Len()
+func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ return *p
}
-
-func (p word64Slice) Index(i int) uint64 {
- elem := p.v.Index(i)
- switch elem.Kind() {
- case reflect.Int64:
- return uint64(elem.Int())
- case reflect.Uint64:
- return uint64(elem.Uint())
- case reflect.Float64:
- return math.Float64bits(float64(elem.Float()))
- }
- panic("unreachable")
+func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ *p = v
}
-
-func structPointer_Word64Slice(p structPointer, f field) word64Slice {
- return word64Slice{structPointer_field(p, f)}
+func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ return *p
+}
+func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ *p = v
}
+func atomicLoadDiscardInfo(p **discardInfo) *discardInfo {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ return *p
+}
+func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ *p = v
+}
+
+var atomicLock sync.Mutex
diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go b/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go
index 1763a5f22..7ffd3c29d 100644
--- a/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go
+++ b/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go
@@ -1,6 +1,6 @@
// Protocol Buffers for Go with Gadgets
//
-// Copyright (c) 2016, The GoGo Authors. All rights reserved.
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
@@ -26,7 +26,11 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// +build appengine js
+// +build purego appengine js
+
+// This file contains an implementation of proto field accesses using package reflect.
+// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can
+// be used on App Engine.
package proto
@@ -34,52 +38,22 @@ import (
"reflect"
)
-func structPointer_FieldPointer(p structPointer, f field) structPointer {
- panic("not implemented")
-}
-
-func appendStructPointer(base structPointer, f field, typ reflect.Type) structPointer {
- panic("not implemented")
-}
-
-func structPointer_InterfaceAt(p structPointer, f field, t reflect.Type) interface{} {
- panic("not implemented")
-}
-
-func structPointer_InterfaceRef(p structPointer, f field, t reflect.Type) interface{} {
- panic("not implemented")
-}
-
-func structPointer_GetRefStructPointer(p structPointer, f field) structPointer {
- panic("not implemented")
-}
+// TODO: untested, so probably incorrect.
-func structPointer_Add(p structPointer, size field) structPointer {
- panic("not implemented")
+func (p pointer) getRef() pointer {
+ return pointer{v: p.v.Addr()}
}
-func structPointer_Len(p structPointer, f field) int {
- panic("not implemented")
-}
-
-func structPointer_GetSliceHeader(p structPointer, f field) *reflect.SliceHeader {
- panic("not implemented")
-}
-
-func structPointer_Copy(oldptr structPointer, newptr structPointer, size int) {
- panic("not implemented")
-}
-
-func structPointer_StructRefSlice(p structPointer, f field, size uintptr) *structRefSlice {
- panic("not implemented")
-}
-
-type structRefSlice struct{}
-
-func (v *structRefSlice) Len() int {
- panic("not implemented")
+func (p pointer) appendRef(v pointer, typ reflect.Type) {
+ slice := p.getSlice(typ)
+ elem := v.asPointerTo(typ).Elem()
+ newSlice := reflect.Append(slice, elem)
+ slice.Set(newSlice)
}
-func (v *structRefSlice) Index(i int) structPointer {
- panic("not implemented")
+func (p pointer) getSlice(typ reflect.Type) reflect.Value {
+ sliceTyp := reflect.SliceOf(typ)
+ slice := p.asPointerTo(sliceTyp)
+ slice = slice.Elem()
+ return slice
}
diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go
index 6b5567d47..d55a335d9 100644
--- a/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go
+++ b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go
@@ -29,7 +29,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// +build !appengine,!js
+// +build !purego,!appengine,!js
// This file contains the implementation of the proto field accesses using package unsafe.
@@ -37,38 +37,13 @@ package proto
import (
"reflect"
+ "sync/atomic"
"unsafe"
)
-// NOTE: These type_Foo functions would more idiomatically be methods,
-// but Go does not allow methods on pointer types, and we must preserve
-// some pointer type for the garbage collector. We use these
-// funcs with clunky names as our poor approximation to methods.
-//
-// An alternative would be
-// type structPointer struct { p unsafe.Pointer }
-// but that does not registerize as well.
-
-// A structPointer is a pointer to a struct.
-type structPointer unsafe.Pointer
-
-// toStructPointer returns a structPointer equivalent to the given reflect value.
-func toStructPointer(v reflect.Value) structPointer {
- return structPointer(unsafe.Pointer(v.Pointer()))
-}
-
-// IsNil reports whether p is nil.
-func structPointer_IsNil(p structPointer) bool {
- return p == nil
-}
-
-// Interface returns the struct pointer, assumed to have element type t,
-// as an interface value.
-func structPointer_Interface(p structPointer, t reflect.Type) interface{} {
- return reflect.NewAt(t, unsafe.Pointer(p)).Interface()
-}
+const unsafeAllowed = true
-// A field identifies a field in a struct, accessible from a structPointer.
+// A field identifies a field in a struct, accessible from a pointer.
// In this implementation, a field is identified by its byte offset from the start of the struct.
type field uintptr
@@ -80,191 +55,254 @@ func toField(f *reflect.StructField) field {
// invalidField is an invalid field identifier.
const invalidField = ^field(0)
+// zeroField is a noop when calling pointer.offset.
+const zeroField = field(0)
+
// IsValid reports whether the field identifier is valid.
func (f field) IsValid() bool {
- return f != ^field(0)
+ return f != invalidField
}
-// Bytes returns the address of a []byte field in the struct.
-func structPointer_Bytes(p structPointer, f field) *[]byte {
- return (*[]byte)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+// The pointer type below is for the new table-driven encoder/decoder.
+// The implementation here uses unsafe.Pointer to create a generic pointer.
+// In pointer_reflect.go we use reflect instead of unsafe to implement
+// the same (but slower) interface.
+type pointer struct {
+ p unsafe.Pointer
}
-// BytesSlice returns the address of a [][]byte field in the struct.
-func structPointer_BytesSlice(p structPointer, f field) *[][]byte {
- return (*[][]byte)(unsafe.Pointer(uintptr(p) + uintptr(f)))
-}
+// size of pointer
+var ptrSize = unsafe.Sizeof(uintptr(0))
-// Bool returns the address of a *bool field in the struct.
-func structPointer_Bool(p structPointer, f field) **bool {
- return (**bool)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+// toPointer converts an interface of pointer type to a pointer
+// that points to the same target.
+func toPointer(i *Message) pointer {
+ // Super-tricky - read pointer out of data word of interface value.
+ // Saves ~25ns over the equivalent:
+ // return valToPointer(reflect.ValueOf(*i))
+ return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
}
-// BoolVal returns the address of a bool field in the struct.
-func structPointer_BoolVal(p structPointer, f field) *bool {
- return (*bool)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+// toAddrPointer converts an interface to a pointer that points to
+// the interface data.
+func toAddrPointer(i *interface{}, isptr bool) pointer {
+ // Super-tricky - read or get the address of data word of interface value.
+ if isptr {
+ // The interface is of pointer type, thus it is a direct interface.
+ // The data word is the pointer data itself. We take its address.
+ return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)}
+ }
+ // The interface is not of pointer type. The data word is the pointer
+ // to the data.
+ return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
}
-// BoolSlice returns the address of a []bool field in the struct.
-func structPointer_BoolSlice(p structPointer, f field) *[]bool {
- return (*[]bool)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+// valToPointer converts v to a pointer. v must be of pointer type.
+func valToPointer(v reflect.Value) pointer {
+ return pointer{p: unsafe.Pointer(v.Pointer())}
}
-// String returns the address of a *string field in the struct.
-func structPointer_String(p structPointer, f field) **string {
- return (**string)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+// offset converts from a pointer to a structure to a pointer to
+// one of its fields.
+func (p pointer) offset(f field) pointer {
+ // For safety, we should panic if !f.IsValid, however calling panic causes
+ // this to no longer be inlineable, which is a serious performance cost.
+ /*
+ if !f.IsValid() {
+ panic("invalid field")
+ }
+ */
+ return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))}
}
-// StringVal returns the address of a string field in the struct.
-func structPointer_StringVal(p structPointer, f field) *string {
- return (*string)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func (p pointer) isNil() bool {
+ return p.p == nil
}
-// StringSlice returns the address of a []string field in the struct.
-func structPointer_StringSlice(p structPointer, f field) *[]string {
- return (*[]string)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func (p pointer) toInt64() *int64 {
+ return (*int64)(p.p)
}
-
-// ExtMap returns the address of an extension map field in the struct.
-func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions {
- return (*XXX_InternalExtensions)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func (p pointer) toInt64Ptr() **int64 {
+ return (**int64)(p.p)
}
-
-func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension {
- return (*map[int32]Extension)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func (p pointer) toInt64Slice() *[]int64 {
+ return (*[]int64)(p.p)
}
-
-// NewAt returns the reflect.Value for a pointer to a field in the struct.
-func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value {
- return reflect.NewAt(typ, unsafe.Pointer(uintptr(p)+uintptr(f)))
+func (p pointer) toInt32() *int32 {
+ return (*int32)(p.p)
}
-// SetStructPointer writes a *struct field in the struct.
-func structPointer_SetStructPointer(p structPointer, f field, q structPointer) {
- *(*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f))) = q
+// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist.
+/*
+ func (p pointer) toInt32Ptr() **int32 {
+ return (**int32)(p.p)
+ }
+ func (p pointer) toInt32Slice() *[]int32 {
+ return (*[]int32)(p.p)
+ }
+*/
+func (p pointer) getInt32Ptr() *int32 {
+ return *(**int32)(p.p)
}
-
-// GetStructPointer reads a *struct field in the struct.
-func structPointer_GetStructPointer(p structPointer, f field) structPointer {
- return *(*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func (p pointer) setInt32Ptr(v int32) {
+ *(**int32)(p.p) = &v
}
-// StructPointerSlice the address of a []*struct field in the struct.
-func structPointer_StructPointerSlice(p structPointer, f field) *structPointerSlice {
- return (*structPointerSlice)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+// getInt32Slice loads a []int32 from p.
+// The value returned is aliased with the original slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) getInt32Slice() []int32 {
+ return *(*[]int32)(p.p)
}
-// A structPointerSlice represents a slice of pointers to structs (themselves submessages or groups).
-type structPointerSlice []structPointer
-
-func (v *structPointerSlice) Len() int { return len(*v) }
-func (v *structPointerSlice) Index(i int) structPointer { return (*v)[i] }
-func (v *structPointerSlice) Append(p structPointer) { *v = append(*v, p) }
-
-// A word32 is the address of a "pointer to 32-bit value" field.
-type word32 **uint32
-
-// IsNil reports whether *v is nil.
-func word32_IsNil(p word32) bool {
- return *p == nil
+// setInt32Slice stores a []int32 to p.
+// The value set is aliased with the input slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) setInt32Slice(v []int32) {
+ *(*[]int32)(p.p) = v
}
-// Set sets *v to point at a newly allocated word set to x.
-func word32_Set(p word32, o *Buffer, x uint32) {
- if len(o.uint32s) == 0 {
- o.uint32s = make([]uint32, uint32PoolSize)
- }
- o.uint32s[0] = x
- *p = &o.uint32s[0]
- o.uint32s = o.uint32s[1:]
+// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead?
+func (p pointer) appendInt32Slice(v int32) {
+ s := (*[]int32)(p.p)
+ *s = append(*s, v)
}
-// Get gets the value pointed at by *v.
-func word32_Get(p word32) uint32 {
- return **p
+func (p pointer) toUint64() *uint64 {
+ return (*uint64)(p.p)
}
-
-// Word32 returns the address of a *int32, *uint32, *float32, or *enum field in the struct.
-func structPointer_Word32(p structPointer, f field) word32 {
- return word32((**uint32)(unsafe.Pointer(uintptr(p) + uintptr(f))))
+func (p pointer) toUint64Ptr() **uint64 {
+ return (**uint64)(p.p)
}
-
-// A word32Val is the address of a 32-bit value field.
-type word32Val *uint32
-
-// Set sets *p to x.
-func word32Val_Set(p word32Val, x uint32) {
- *p = x
+func (p pointer) toUint64Slice() *[]uint64 {
+ return (*[]uint64)(p.p)
}
-
-// Get gets the value pointed at by p.
-func word32Val_Get(p word32Val) uint32 {
- return *p
+func (p pointer) toUint32() *uint32 {
+ return (*uint32)(p.p)
}
-
-// Word32Val returns the address of a *int32, *uint32, *float32, or *enum field in the struct.
-func structPointer_Word32Val(p structPointer, f field) word32Val {
- return word32Val((*uint32)(unsafe.Pointer(uintptr(p) + uintptr(f))))
+func (p pointer) toUint32Ptr() **uint32 {
+ return (**uint32)(p.p)
}
-
-// A word32Slice is a slice of 32-bit values.
-type word32Slice []uint32
-
-func (v *word32Slice) Append(x uint32) { *v = append(*v, x) }
-func (v *word32Slice) Len() int { return len(*v) }
-func (v *word32Slice) Index(i int) uint32 { return (*v)[i] }
-
-// Word32Slice returns the address of a []int32, []uint32, []float32, or []enum field in the struct.
-func structPointer_Word32Slice(p structPointer, f field) *word32Slice {
- return (*word32Slice)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func (p pointer) toUint32Slice() *[]uint32 {
+ return (*[]uint32)(p.p)
}
-
-// word64 is like word32 but for 64-bit values.
-type word64 **uint64
-
-func word64_Set(p word64, o *Buffer, x uint64) {
- if len(o.uint64s) == 0 {
- o.uint64s = make([]uint64, uint64PoolSize)
- }
- o.uint64s[0] = x
- *p = &o.uint64s[0]
- o.uint64s = o.uint64s[1:]
+func (p pointer) toBool() *bool {
+ return (*bool)(p.p)
}
-
-func word64_IsNil(p word64) bool {
- return *p == nil
+func (p pointer) toBoolPtr() **bool {
+ return (**bool)(p.p)
}
-
-func word64_Get(p word64) uint64 {
- return **p
+func (p pointer) toBoolSlice() *[]bool {
+ return (*[]bool)(p.p)
+}
+func (p pointer) toFloat64() *float64 {
+ return (*float64)(p.p)
+}
+func (p pointer) toFloat64Ptr() **float64 {
+ return (**float64)(p.p)
+}
+func (p pointer) toFloat64Slice() *[]float64 {
+ return (*[]float64)(p.p)
+}
+func (p pointer) toFloat32() *float32 {
+ return (*float32)(p.p)
+}
+func (p pointer) toFloat32Ptr() **float32 {
+ return (**float32)(p.p)
+}
+func (p pointer) toFloat32Slice() *[]float32 {
+ return (*[]float32)(p.p)
+}
+func (p pointer) toString() *string {
+ return (*string)(p.p)
+}
+func (p pointer) toStringPtr() **string {
+ return (**string)(p.p)
+}
+func (p pointer) toStringSlice() *[]string {
+ return (*[]string)(p.p)
+}
+func (p pointer) toBytes() *[]byte {
+ return (*[]byte)(p.p)
+}
+func (p pointer) toBytesSlice() *[][]byte {
+ return (*[][]byte)(p.p)
+}
+func (p pointer) toExtensions() *XXX_InternalExtensions {
+ return (*XXX_InternalExtensions)(p.p)
+}
+func (p pointer) toOldExtensions() *map[int32]Extension {
+ return (*map[int32]Extension)(p.p)
}
-func structPointer_Word64(p structPointer, f field) word64 {
- return word64((**uint64)(unsafe.Pointer(uintptr(p) + uintptr(f))))
+// getPointerSlice loads []*T from p as a []pointer.
+// The value returned is aliased with the original slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) getPointerSlice() []pointer {
+ // Super-tricky - p should point to a []*T where T is a
+ // message type. We load it as []pointer.
+ return *(*[]pointer)(p.p)
}
-// word64Val is like word32Val but for 64-bit values.
-type word64Val *uint64
+// setPointerSlice stores []pointer into p as a []*T.
+// The value set is aliased with the input slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) setPointerSlice(v []pointer) {
+ // Super-tricky - p should point to a []*T where T is a
+ // message type. We store it as []pointer.
+ *(*[]pointer)(p.p) = v
+}
-func word64Val_Set(p word64Val, o *Buffer, x uint64) {
- *p = x
+// getPointer loads the pointer at p and returns it.
+func (p pointer) getPointer() pointer {
+ return pointer{p: *(*unsafe.Pointer)(p.p)}
}
-func word64Val_Get(p word64Val) uint64 {
- return *p
+// setPointer stores the pointer q at p.
+func (p pointer) setPointer(q pointer) {
+ *(*unsafe.Pointer)(p.p) = q.p
}
-func structPointer_Word64Val(p structPointer, f field) word64Val {
- return word64Val((*uint64)(unsafe.Pointer(uintptr(p) + uintptr(f))))
+// append q to the slice pointed to by p.
+func (p pointer) appendPointer(q pointer) {
+ s := (*[]unsafe.Pointer)(p.p)
+ *s = append(*s, q.p)
}
-// word64Slice is like word32Slice but for 64-bit values.
-type word64Slice []uint64
+// getInterfacePointer returns a pointer that points to the
+// interface data of the interface pointed by p.
+func (p pointer) getInterfacePointer() pointer {
+ // Super-tricky - read pointer out of data word of interface value.
+ return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]}
+}
-func (v *word64Slice) Append(x uint64) { *v = append(*v, x) }
-func (v *word64Slice) Len() int { return len(*v) }
-func (v *word64Slice) Index(i int) uint64 { return (*v)[i] }
+// asPointerTo returns a reflect.Value that is a pointer to an
+// object of type t stored at p.
+func (p pointer) asPointerTo(t reflect.Type) reflect.Value {
+ return reflect.NewAt(t, p.p)
+}
-func structPointer_Word64Slice(p structPointer, f field) *word64Slice {
- return (*word64Slice)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {
+ return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
+func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {
+ return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
+func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {
+ return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
+func atomicLoadDiscardInfo(p **discardInfo) *discardInfo {
+ return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
}
diff --git a/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go
index f156a29f0..aca8eed02 100644
--- a/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go
+++ b/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go
@@ -1,6 +1,6 @@
// Protocol Buffers for Go with Gadgets
//
-// Copyright (c) 2013, The GoGo Authors. All rights reserved.
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
@@ -26,7 +26,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// +build !appengine,!js
+// +build !purego,!appengine,!js
// This file contains the implementation of the proto field accesses using package unsafe.
@@ -37,92 +37,20 @@ import (
"unsafe"
)
-func structPointer_InterfaceAt(p structPointer, f field, t reflect.Type) interface{} {
- point := unsafe.Pointer(uintptr(p) + uintptr(f))
- r := reflect.NewAt(t, point)
- return r.Interface()
+func (p pointer) getRef() pointer {
+ return pointer{p: (unsafe.Pointer)(&p.p)}
}
-func structPointer_InterfaceRef(p structPointer, f field, t reflect.Type) interface{} {
- point := unsafe.Pointer(uintptr(p) + uintptr(f))
- r := reflect.NewAt(t, point)
- if r.Elem().IsNil() {
- return nil
- }
- return r.Elem().Interface()
+func (p pointer) appendRef(v pointer, typ reflect.Type) {
+ slice := p.getSlice(typ)
+ elem := v.asPointerTo(typ).Elem()
+ newSlice := reflect.Append(slice, elem)
+ slice.Set(newSlice)
}
-func copyUintPtr(oldptr, newptr uintptr, size int) {
- oldbytes := make([]byte, 0)
- oldslice := (*reflect.SliceHeader)(unsafe.Pointer(&oldbytes))
- oldslice.Data = oldptr
- oldslice.Len = size
- oldslice.Cap = size
- newbytes := make([]byte, 0)
- newslice := (*reflect.SliceHeader)(unsafe.Pointer(&newbytes))
- newslice.Data = newptr
- newslice.Len = size
- newslice.Cap = size
- copy(newbytes, oldbytes)
-}
-
-func structPointer_Copy(oldptr structPointer, newptr structPointer, size int) {
- copyUintPtr(uintptr(oldptr), uintptr(newptr), size)
-}
-
-func appendStructPointer(base structPointer, f field, typ reflect.Type) structPointer {
- size := typ.Elem().Size()
-
- oldHeader := structPointer_GetSliceHeader(base, f)
- oldSlice := reflect.NewAt(typ, unsafe.Pointer(oldHeader)).Elem()
- newLen := oldHeader.Len + 1
- newSlice := reflect.MakeSlice(typ, newLen, newLen)
- reflect.Copy(newSlice, oldSlice)
- bas := toStructPointer(newSlice)
- oldHeader.Data = uintptr(bas)
- oldHeader.Len = newLen
- oldHeader.Cap = newLen
-
- return structPointer(unsafe.Pointer(uintptr(unsafe.Pointer(bas)) + uintptr(uintptr(newLen-1)*size)))
-}
-
-func structPointer_FieldPointer(p structPointer, f field) structPointer {
- return structPointer(unsafe.Pointer(uintptr(p) + uintptr(f)))
-}
-
-func structPointer_GetRefStructPointer(p structPointer, f field) structPointer {
- return structPointer((*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f))))
-}
-
-func structPointer_GetSliceHeader(p structPointer, f field) *reflect.SliceHeader {
- return (*reflect.SliceHeader)(unsafe.Pointer(uintptr(p) + uintptr(f)))
-}
-
-func structPointer_Add(p structPointer, size field) structPointer {
- return structPointer(unsafe.Pointer(uintptr(p) + uintptr(size)))
-}
-
-func structPointer_Len(p structPointer, f field) int {
- return len(*(*[]interface{})(unsafe.Pointer(structPointer_GetRefStructPointer(p, f))))
-}
-
-func structPointer_StructRefSlice(p structPointer, f field, size uintptr) *structRefSlice {
- return &structRefSlice{p: p, f: f, size: size}
-}
-
-// A structRefSlice represents a slice of structs (themselves submessages or groups).
-type structRefSlice struct {
- p structPointer
- f field
- size uintptr
-}
-
-func (v *structRefSlice) Len() int {
- return structPointer_Len(v.p, v.f)
-}
-
-func (v *structRefSlice) Index(i int) structPointer {
- ss := structPointer_GetStructPointer(v.p, v.f)
- ss1 := structPointer_GetRefStructPointer(ss, 0)
- return structPointer_Add(ss1, field(uintptr(i)*v.size))
+func (p pointer) getSlice(typ reflect.Type) reflect.Value {
+ sliceTyp := reflect.SliceOf(typ)
+ slice := p.asPointerTo(sliceTyp)
+ slice = slice.Elem()
+ return slice
}
diff --git a/vendor/github.com/gogo/protobuf/proto/properties.go b/vendor/github.com/gogo/protobuf/proto/properties.go
index 44b332052..04dcb8d9e 100644
--- a/vendor/github.com/gogo/protobuf/proto/properties.go
+++ b/vendor/github.com/gogo/protobuf/proto/properties.go
@@ -63,42 +63,6 @@ const (
WireFixed32 = 5
)
-const startSize = 10 // initial slice/string sizes
-
-// Encoders are defined in encode.go
-// An encoder outputs the full representation of a field, including its
-// tag and encoder type.
-type encoder func(p *Buffer, prop *Properties, base structPointer) error
-
-// A valueEncoder encodes a single integer in a particular encoding.
-type valueEncoder func(o *Buffer, x uint64) error
-
-// Sizers are defined in encode.go
-// A sizer returns the encoded size of a field, including its tag and encoder
-// type.
-type sizer func(prop *Properties, base structPointer) int
-
-// A valueSizer returns the encoded size of a single integer in a particular
-// encoding.
-type valueSizer func(x uint64) int
-
-// Decoders are defined in decode.go
-// A decoder creates a value from its wire representation.
-// Unrecognized subelements are saved in unrec.
-type decoder func(p *Buffer, prop *Properties, base structPointer) error
-
-// A valueDecoder decodes a single integer in a particular encoding.
-type valueDecoder func(o *Buffer) (x uint64, err error)
-
-// A oneofMarshaler does the marshaling for all oneof fields in a message.
-type oneofMarshaler func(Message, *Buffer) error
-
-// A oneofUnmarshaler does the unmarshaling for a oneof field in a message.
-type oneofUnmarshaler func(Message, int, int, *Buffer) (bool, error)
-
-// A oneofSizer does the sizing for all oneof fields in a message.
-type oneofSizer func(Message) int
-
// tagMap is an optimization over map[int]int for typical protocol buffer
// use-cases. Encoded protocol buffers are often in tag order with small tag
// numbers.
@@ -145,13 +109,6 @@ type StructProperties struct {
decoderTags tagMap // map from proto tag to struct field number
decoderOrigNames map[string]int // map from original name to struct field number
order []int // list of struct field numbers in tag order
- unrecField field // field id of the XXX_unrecognized []byte field
- extendable bool // is this an extendable proto
-
- oneofMarshaler oneofMarshaler
- oneofUnmarshaler oneofUnmarshaler
- oneofSizer oneofSizer
- stype reflect.Type
// OneofTypes contains information about the oneof fields in this message.
// It is keyed by the original name of a field.
@@ -187,45 +144,30 @@ type Properties struct {
Repeated bool
Packed bool // relevant for repeated primitives only
Enum string // set for enum types only
- proto3 bool // whether this is known to be a proto3 field; set for []byte only
+ proto3 bool // whether this is known to be a proto3 field
oneof bool // whether this is a oneof field
Default string // default value
HasDefault bool // whether an explicit default was provided
CustomType string
+ CastType string
StdTime bool
StdDuration bool
+ WktPointer bool
- enc encoder
- valEnc valueEncoder // set for bool and numeric types only
- field field
- tagcode []byte // encoding of EncodeVarint((Tag<<3)|WireType)
- tagbuf [8]byte
- stype reflect.Type // set for struct types only
- sstype reflect.Type // set for slices of structs types only
- ctype reflect.Type // set for custom types only
- sprop *StructProperties // set for struct types only
- isMarshaler bool
- isUnmarshaler bool
-
- mtype reflect.Type // set for map types only
- mkeyprop *Properties // set for map types only
- mvalprop *Properties // set for map types only
-
- size sizer
- valSize valueSizer // set for bool and numeric types only
-
- dec decoder
- valDec valueDecoder // set for bool and numeric types only
-
- // If this is a packable field, this will be the decoder for the packed version of the field.
- packedDec decoder
+ stype reflect.Type // set for struct types only
+ ctype reflect.Type // set for custom types only
+ sprop *StructProperties // set for struct types only
+
+ mtype reflect.Type // set for map types only
+ MapKeyProp *Properties // set for map types only
+ MapValProp *Properties // set for map types only
}
// String formats the properties in the protobuf struct field tag style.
func (p *Properties) String() string {
s := p.Wire
- s = ","
+ s += ","
s += strconv.Itoa(p.Tag)
if p.Required {
s += ",req"
@@ -271,29 +213,14 @@ func (p *Properties) Parse(s string) {
switch p.Wire {
case "varint":
p.WireType = WireVarint
- p.valEnc = (*Buffer).EncodeVarint
- p.valDec = (*Buffer).DecodeVarint
- p.valSize = sizeVarint
case "fixed32":
p.WireType = WireFixed32
- p.valEnc = (*Buffer).EncodeFixed32
- p.valDec = (*Buffer).DecodeFixed32
- p.valSize = sizeFixed32
case "fixed64":
p.WireType = WireFixed64
- p.valEnc = (*Buffer).EncodeFixed64
- p.valDec = (*Buffer).DecodeFixed64
- p.valSize = sizeFixed64
case "zigzag32":
p.WireType = WireVarint
- p.valEnc = (*Buffer).EncodeZigzag32
- p.valDec = (*Buffer).DecodeZigzag32
- p.valSize = sizeZigzag32
case "zigzag64":
p.WireType = WireVarint
- p.valEnc = (*Buffer).EncodeZigzag64
- p.valDec = (*Buffer).DecodeZigzag64
- p.valSize = sizeZigzag64
case "bytes", "group":
p.WireType = WireBytes
// no numeric converter for non-numeric types
@@ -308,6 +235,7 @@ func (p *Properties) Parse(s string) {
return
}
+outer:
for i := 2; i < len(fields); i++ {
f := fields[i]
switch {
@@ -335,311 +263,70 @@ func (p *Properties) Parse(s string) {
if i+1 < len(fields) {
// Commas aren't escaped, and def is always last.
p.Default += "," + strings.Join(fields[i+1:], ",")
- break
+ break outer
}
case strings.HasPrefix(f, "embedded="):
p.OrigName = strings.Split(f, "=")[1]
case strings.HasPrefix(f, "customtype="):
p.CustomType = strings.Split(f, "=")[1]
+ case strings.HasPrefix(f, "casttype="):
+ p.CastType = strings.Split(f, "=")[1]
case f == "stdtime":
p.StdTime = true
case f == "stdduration":
p.StdDuration = true
+ case f == "wktptr":
+ p.WktPointer = true
}
}
}
-func logNoSliceEnc(t1, t2 reflect.Type) {
- fmt.Fprintf(os.Stderr, "proto: no slice oenc for %T = []%T\n", t1, t2)
-}
-
var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem()
-// Initialize the fields for encoding and decoding.
-func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lockGetProp bool) {
- p.enc = nil
- p.dec = nil
- p.size = nil
+// setFieldProps initializes the field properties for submessages and maps.
+func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) {
isMap := typ.Kind() == reflect.Map
if len(p.CustomType) > 0 && !isMap {
- p.setCustomEncAndDec(typ)
+ p.ctype = typ
p.setTag(lockGetProp)
return
}
if p.StdTime && !isMap {
- p.setTimeEncAndDec(typ)
p.setTag(lockGetProp)
return
}
if p.StdDuration && !isMap {
- p.setDurationEncAndDec(typ)
+ p.setTag(lockGetProp)
+ return
+ }
+ if p.WktPointer && !isMap {
p.setTag(lockGetProp)
return
}
switch t1 := typ; t1.Kind() {
- default:
- fmt.Fprintf(os.Stderr, "proto: no coders for %v\n", t1)
-
- // proto3 scalar types
-
- case reflect.Bool:
- if p.proto3 {
- p.enc = (*Buffer).enc_proto3_bool
- p.dec = (*Buffer).dec_proto3_bool
- p.size = size_proto3_bool
- } else {
- p.enc = (*Buffer).enc_ref_bool
- p.dec = (*Buffer).dec_proto3_bool
- p.size = size_ref_bool
- }
- case reflect.Int32:
- if p.proto3 {
- p.enc = (*Buffer).enc_proto3_int32
- p.dec = (*Buffer).dec_proto3_int32
- p.size = size_proto3_int32
- } else {
- p.enc = (*Buffer).enc_ref_int32
- p.dec = (*Buffer).dec_proto3_int32
- p.size = size_ref_int32
- }
- case reflect.Uint32:
- if p.proto3 {
- p.enc = (*Buffer).enc_proto3_uint32
- p.dec = (*Buffer).dec_proto3_int32 // can reuse
- p.size = size_proto3_uint32
- } else {
- p.enc = (*Buffer).enc_ref_uint32
- p.dec = (*Buffer).dec_proto3_int32 // can reuse
- p.size = size_ref_uint32
- }
- case reflect.Int64, reflect.Uint64:
- if p.proto3 {
- p.enc = (*Buffer).enc_proto3_int64
- p.dec = (*Buffer).dec_proto3_int64
- p.size = size_proto3_int64
- } else {
- p.enc = (*Buffer).enc_ref_int64
- p.dec = (*Buffer).dec_proto3_int64
- p.size = size_ref_int64
- }
- case reflect.Float32:
- if p.proto3 {
- p.enc = (*Buffer).enc_proto3_uint32 // can just treat them as bits
- p.dec = (*Buffer).dec_proto3_int32
- p.size = size_proto3_uint32
- } else {
- p.enc = (*Buffer).enc_ref_uint32 // can just treat them as bits
- p.dec = (*Buffer).dec_proto3_int32
- p.size = size_ref_uint32
- }
- case reflect.Float64:
- if p.proto3 {
- p.enc = (*Buffer).enc_proto3_int64 // can just treat them as bits
- p.dec = (*Buffer).dec_proto3_int64
- p.size = size_proto3_int64
- } else {
- p.enc = (*Buffer).enc_ref_int64 // can just treat them as bits
- p.dec = (*Buffer).dec_proto3_int64
- p.size = size_ref_int64
- }
- case reflect.String:
- if p.proto3 {
- p.enc = (*Buffer).enc_proto3_string
- p.dec = (*Buffer).dec_proto3_string
- p.size = size_proto3_string
- } else {
- p.enc = (*Buffer).enc_ref_string
- p.dec = (*Buffer).dec_proto3_string
- p.size = size_ref_string
- }
case reflect.Struct:
p.stype = typ
- p.isMarshaler = isMarshaler(typ)
- p.isUnmarshaler = isUnmarshaler(typ)
- if p.Wire == "bytes" {
- p.enc = (*Buffer).enc_ref_struct_message
- p.dec = (*Buffer).dec_ref_struct_message
- p.size = size_ref_struct_message
- } else {
- fmt.Fprintf(os.Stderr, "proto: no coders for struct %T\n", typ)
- }
-
case reflect.Ptr:
- switch t2 := t1.Elem(); t2.Kind() {
- default:
- fmt.Fprintf(os.Stderr, "proto: no encoder function for %v -> %v\n", t1, t2)
- break
- case reflect.Bool:
- p.enc = (*Buffer).enc_bool
- p.dec = (*Buffer).dec_bool
- p.size = size_bool
- case reflect.Int32:
- p.enc = (*Buffer).enc_int32
- p.dec = (*Buffer).dec_int32
- p.size = size_int32
- case reflect.Uint32:
- p.enc = (*Buffer).enc_uint32
- p.dec = (*Buffer).dec_int32 // can reuse
- p.size = size_uint32
- case reflect.Int64, reflect.Uint64:
- p.enc = (*Buffer).enc_int64
- p.dec = (*Buffer).dec_int64
- p.size = size_int64
- case reflect.Float32:
- p.enc = (*Buffer).enc_uint32 // can just treat them as bits
- p.dec = (*Buffer).dec_int32
- p.size = size_uint32
- case reflect.Float64:
- p.enc = (*Buffer).enc_int64 // can just treat them as bits
- p.dec = (*Buffer).dec_int64
- p.size = size_int64
- case reflect.String:
- p.enc = (*Buffer).enc_string
- p.dec = (*Buffer).dec_string
- p.size = size_string
- case reflect.Struct:
+ if t1.Elem().Kind() == reflect.Struct {
p.stype = t1.Elem()
- p.isMarshaler = isMarshaler(t1)
- p.isUnmarshaler = isUnmarshaler(t1)
- if p.Wire == "bytes" {
- p.enc = (*Buffer).enc_struct_message
- p.dec = (*Buffer).dec_struct_message
- p.size = size_struct_message
- } else {
- p.enc = (*Buffer).enc_struct_group
- p.dec = (*Buffer).dec_struct_group
- p.size = size_struct_group
- }
}
-
case reflect.Slice:
switch t2 := t1.Elem(); t2.Kind() {
- default:
- logNoSliceEnc(t1, t2)
- break
- case reflect.Bool:
- if p.Packed {
- p.enc = (*Buffer).enc_slice_packed_bool
- p.size = size_slice_packed_bool
- } else {
- p.enc = (*Buffer).enc_slice_bool
- p.size = size_slice_bool
- }
- p.dec = (*Buffer).dec_slice_bool
- p.packedDec = (*Buffer).dec_slice_packed_bool
- case reflect.Int32:
- if p.Packed {
- p.enc = (*Buffer).enc_slice_packed_int32
- p.size = size_slice_packed_int32
- } else {
- p.enc = (*Buffer).enc_slice_int32
- p.size = size_slice_int32
- }
- p.dec = (*Buffer).dec_slice_int32
- p.packedDec = (*Buffer).dec_slice_packed_int32
- case reflect.Uint32:
- if p.Packed {
- p.enc = (*Buffer).enc_slice_packed_uint32
- p.size = size_slice_packed_uint32
- } else {
- p.enc = (*Buffer).enc_slice_uint32
- p.size = size_slice_uint32
- }
- p.dec = (*Buffer).dec_slice_int32
- p.packedDec = (*Buffer).dec_slice_packed_int32
- case reflect.Int64, reflect.Uint64:
- if p.Packed {
- p.enc = (*Buffer).enc_slice_packed_int64
- p.size = size_slice_packed_int64
- } else {
- p.enc = (*Buffer).enc_slice_int64
- p.size = size_slice_int64
- }
- p.dec = (*Buffer).dec_slice_int64
- p.packedDec = (*Buffer).dec_slice_packed_int64
- case reflect.Uint8:
- p.dec = (*Buffer).dec_slice_byte
- if p.proto3 {
- p.enc = (*Buffer).enc_proto3_slice_byte
- p.size = size_proto3_slice_byte
- } else {
- p.enc = (*Buffer).enc_slice_byte
- p.size = size_slice_byte
- }
- case reflect.Float32, reflect.Float64:
- switch t2.Bits() {
- case 32:
- // can just treat them as bits
- if p.Packed {
- p.enc = (*Buffer).enc_slice_packed_uint32
- p.size = size_slice_packed_uint32
- } else {
- p.enc = (*Buffer).enc_slice_uint32
- p.size = size_slice_uint32
- }
- p.dec = (*Buffer).dec_slice_int32
- p.packedDec = (*Buffer).dec_slice_packed_int32
- case 64:
- // can just treat them as bits
- if p.Packed {
- p.enc = (*Buffer).enc_slice_packed_int64
- p.size = size_slice_packed_int64
- } else {
- p.enc = (*Buffer).enc_slice_int64
- p.size = size_slice_int64
- }
- p.dec = (*Buffer).dec_slice_int64
- p.packedDec = (*Buffer).dec_slice_packed_int64
- default:
- logNoSliceEnc(t1, t2)
- break
- }
- case reflect.String:
- p.enc = (*Buffer).enc_slice_string
- p.dec = (*Buffer).dec_slice_string
- p.size = size_slice_string
case reflect.Ptr:
switch t3 := t2.Elem(); t3.Kind() {
- default:
- fmt.Fprintf(os.Stderr, "proto: no ptr oenc for %T -> %T -> %T\n", t1, t2, t3)
- break
case reflect.Struct:
- p.stype = t2.Elem()
- p.isMarshaler = isMarshaler(t2)
- p.isUnmarshaler = isUnmarshaler(t2)
- if p.Wire == "bytes" {
- p.enc = (*Buffer).enc_slice_struct_message
- p.dec = (*Buffer).dec_slice_struct_message
- p.size = size_slice_struct_message
- } else {
- p.enc = (*Buffer).enc_slice_struct_group
- p.dec = (*Buffer).dec_slice_struct_group
- p.size = size_slice_struct_group
- }
- }
- case reflect.Slice:
- switch t2.Elem().Kind() {
- default:
- fmt.Fprintf(os.Stderr, "proto: no slice elem oenc for %T -> %T -> %T\n", t1, t2, t2.Elem())
- break
- case reflect.Uint8:
- p.enc = (*Buffer).enc_slice_slice_byte
- p.dec = (*Buffer).dec_slice_slice_byte
- p.size = size_slice_slice_byte
+ p.stype = t3
}
case reflect.Struct:
- p.setSliceOfNonPointerStructs(t1)
+ p.stype = t2
}
case reflect.Map:
- p.enc = (*Buffer).enc_new_map
- p.dec = (*Buffer).dec_new_map
- p.size = size_new_map
p.mtype = t1
- p.mkeyprop = &Properties{}
- p.mkeyprop.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp)
- p.mvalprop = &Properties{}
+ p.MapKeyProp = &Properties{}
+ p.MapKeyProp.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp)
+ p.MapValProp = &Properties{}
vtype := p.mtype.Elem()
if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice {
// The value type is not a message (*T) or bytes ([]byte),
@@ -647,29 +334,16 @@ func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lock
vtype = reflect.PtrTo(vtype)
}
- p.mvalprop.CustomType = p.CustomType
- p.mvalprop.StdDuration = p.StdDuration
- p.mvalprop.StdTime = p.StdTime
- p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp)
+ p.MapValProp.CustomType = p.CustomType
+ p.MapValProp.StdDuration = p.StdDuration
+ p.MapValProp.StdTime = p.StdTime
+ p.MapValProp.WktPointer = p.WktPointer
+ p.MapValProp.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp)
}
p.setTag(lockGetProp)
}
func (p *Properties) setTag(lockGetProp bool) {
- // precalculate tag code
- wire := p.WireType
- if p.Packed {
- wire = WireBytes
- }
- x := uint32(p.Tag)<<3 | uint32(wire)
- i := 0
- for i = 0; x > 127; i++ {
- p.tagbuf[i] = 0x80 | uint8(x&0x7F)
- x >>= 7
- }
- p.tagbuf[i] = uint8(x)
- p.tagcode = p.tagbuf[0 : i+1]
-
if p.stype != nil {
if lockGetProp {
p.sprop = GetProperties(p.stype)
@@ -680,20 +354,9 @@ func (p *Properties) setTag(lockGetProp bool) {
}
var (
- marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()
- unmarshalerType = reflect.TypeOf((*Unmarshaler)(nil)).Elem()
+ marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()
)
-// isMarshaler reports whether type t implements Marshaler.
-func isMarshaler(t reflect.Type) bool {
- return t.Implements(marshalerType)
-}
-
-// isUnmarshaler reports whether type t implements Unmarshaler.
-func isUnmarshaler(t reflect.Type) bool {
- return t.Implements(unmarshalerType)
-}
-
// Init populates the properties from a protocol buffer struct tag.
func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) {
p.init(typ, name, tag, f, true)
@@ -703,14 +366,11 @@ func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructF
// "bytes,49,opt,def=hello!"
p.Name = name
p.OrigName = name
- if f != nil {
- p.field = toField(f)
- }
if tag == "" {
return
}
p.Parse(tag)
- p.setEncAndDec(typ, f, lockGetProp)
+ p.setFieldProps(typ, f, lockGetProp)
}
var (
@@ -760,10 +420,6 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
propertiesMap[t] = prop
// build properties
- prop.extendable = reflect.PtrTo(t).Implements(extendableProtoType) ||
- reflect.PtrTo(t).Implements(extendableProtoV1Type) ||
- reflect.PtrTo(t).Implements(extendableBytesType)
- prop.unrecField = invalidField
prop.Prop = make([]*Properties, t.NumField())
prop.order = make([]int, t.NumField())
@@ -774,23 +430,6 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
name := f.Name
p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false)
- if f.Name == "XXX_InternalExtensions" { // special case
- p.enc = (*Buffer).enc_exts
- p.dec = nil // not needed
- p.size = size_exts
- } else if f.Name == "XXX_extensions" { // special case
- if len(f.Tag.Get("protobuf")) > 0 {
- p.enc = (*Buffer).enc_ext_slice_byte
- p.dec = nil // not needed
- p.size = size_ext_slice_byte
- } else {
- p.enc = (*Buffer).enc_map
- p.dec = nil // not needed
- p.size = size_map
- }
- } else if f.Name == "XXX_unrecognized" { // special case
- prop.unrecField = toField(&f)
- }
oneof := f.Tag.Get("protobuf_oneof") // special case
if oneof != "" {
isOneofMessage = true
@@ -806,9 +445,6 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
}
print("\n")
}
- if p.enc == nil && !strings.HasPrefix(f.Name, "XXX_") && oneof == "" {
- fmt.Fprintln(os.Stderr, "proto: no encoder for", f.Name, f.Type.String(), "[GetProperties]")
- }
}
// Re-order prop.order.
@@ -819,8 +455,7 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
}
if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); isOneofMessage && ok {
var oots []interface{}
- prop.oneofMarshaler, prop.oneofUnmarshaler, prop.oneofSizer, oots = om.XXX_OneofFuncs()
- prop.stype = t
+ _, _, _, oots = om.XXX_OneofFuncs()
// Interpret oneof metadata.
prop.OneofTypes = make(map[string]*OneofProperties)
@@ -870,30 +505,6 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
return prop
}
-// Return the Properties object for the x[0]'th field of the structure.
-func propByIndex(t reflect.Type, x []int) *Properties {
- if len(x) != 1 {
- fmt.Fprintf(os.Stderr, "proto: field index dimension %d (not 1) for type %s\n", len(x), t)
- return nil
- }
- prop := GetProperties(t)
- return prop.Prop[x[0]]
-}
-
-// Get the address and type of a pointer to a struct from an interface.
-func getbase(pb Message) (t reflect.Type, b structPointer, err error) {
- if pb == nil {
- err = ErrNil
- return
- }
- // get the reflect type of the pointer to the struct.
- t = reflect.TypeOf(pb)
- // get the address of the struct.
- value := reflect.ValueOf(pb)
- b = toStructPointer(value)
- return
-}
-
// A global registry of enum types.
// The generated code will register the generated maps by calling RegisterEnum.
@@ -922,20 +533,42 @@ func EnumValueMap(enumType string) map[string]int32 {
// A registry of all linked message types.
// The string is a fully-qualified proto name ("pkg.Message").
var (
- protoTypes = make(map[string]reflect.Type)
- revProtoTypes = make(map[reflect.Type]string)
+ protoTypedNils = make(map[string]Message) // a map from proto names to typed nil pointers
+ protoMapTypes = make(map[string]reflect.Type) // a map from proto names to map types
+ revProtoTypes = make(map[reflect.Type]string)
)
// RegisterType is called from generated code and maps from the fully qualified
// proto name to the type (pointer to struct) of the protocol buffer.
func RegisterType(x Message, name string) {
- if _, ok := protoTypes[name]; ok {
+ if _, ok := protoTypedNils[name]; ok {
// TODO: Some day, make this a panic.
log.Printf("proto: duplicate proto type registered: %s", name)
return
}
t := reflect.TypeOf(x)
- protoTypes[name] = t
+ if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 {
+ // Generated code always calls RegisterType with nil x.
+ // This check is just for extra safety.
+ protoTypedNils[name] = x
+ } else {
+ protoTypedNils[name] = reflect.Zero(t).Interface().(Message)
+ }
+ revProtoTypes[t] = name
+}
+
+// RegisterMapType is called from generated code and maps from the fully qualified
+// proto name to the native map type of the proto map definition.
+func RegisterMapType(x interface{}, name string) {
+ if reflect.TypeOf(x).Kind() != reflect.Map {
+ panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name))
+ }
+ if _, ok := protoMapTypes[name]; ok {
+ log.Printf("proto: duplicate proto type registered: %s", name)
+ return
+ }
+ t := reflect.TypeOf(x)
+ protoMapTypes[name] = t
revProtoTypes[t] = name
}
@@ -951,7 +584,14 @@ func MessageName(x Message) string {
}
// MessageType returns the message type (pointer to struct) for a named message.
-func MessageType(name string) reflect.Type { return protoTypes[name] }
+// The type is not guaranteed to implement proto.Message if the name refers to a
+// map entry.
+func MessageType(name string) reflect.Type {
+ if t, ok := protoTypedNils[name]; ok {
+ return reflect.TypeOf(t)
+ }
+ return protoMapTypes[name]
+}
// A registry of all linked proto files.
var (
diff --git a/vendor/github.com/gogo/protobuf/proto/properties_gogo.go b/vendor/github.com/gogo/protobuf/proto/properties_gogo.go
index b6b7176c5..40ea3dd93 100644
--- a/vendor/github.com/gogo/protobuf/proto/properties_gogo.go
+++ b/vendor/github.com/gogo/protobuf/proto/properties_gogo.go
@@ -1,6 +1,6 @@
// Protocol Buffers for Go with Gadgets
//
-// Copyright (c) 2013, The GoGo Authors. All rights reserved.
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
// http://github.com/gogo/protobuf
//
// Redistribution and use in source and binary forms, with or without
@@ -29,83 +29,8 @@
package proto
import (
- "fmt"
- "os"
"reflect"
)
-func (p *Properties) setCustomEncAndDec(typ reflect.Type) {
- p.ctype = typ
- if p.Repeated {
- p.enc = (*Buffer).enc_custom_slice_bytes
- p.dec = (*Buffer).dec_custom_slice_bytes
- p.size = size_custom_slice_bytes
- } else if typ.Kind() == reflect.Ptr {
- p.enc = (*Buffer).enc_custom_bytes
- p.dec = (*Buffer).dec_custom_bytes
- p.size = size_custom_bytes
- } else {
- p.enc = (*Buffer).enc_custom_ref_bytes
- p.dec = (*Buffer).dec_custom_ref_bytes
- p.size = size_custom_ref_bytes
- }
-}
-
-func (p *Properties) setDurationEncAndDec(typ reflect.Type) {
- if p.Repeated {
- if typ.Elem().Kind() == reflect.Ptr {
- p.enc = (*Buffer).enc_slice_duration
- p.dec = (*Buffer).dec_slice_duration
- p.size = size_slice_duration
- } else {
- p.enc = (*Buffer).enc_slice_ref_duration
- p.dec = (*Buffer).dec_slice_ref_duration
- p.size = size_slice_ref_duration
- }
- } else if typ.Kind() == reflect.Ptr {
- p.enc = (*Buffer).enc_duration
- p.dec = (*Buffer).dec_duration
- p.size = size_duration
- } else {
- p.enc = (*Buffer).enc_ref_duration
- p.dec = (*Buffer).dec_ref_duration
- p.size = size_ref_duration
- }
-}
-
-func (p *Properties) setTimeEncAndDec(typ reflect.Type) {
- if p.Repeated {
- if typ.Elem().Kind() == reflect.Ptr {
- p.enc = (*Buffer).enc_slice_time
- p.dec = (*Buffer).dec_slice_time
- p.size = size_slice_time
- } else {
- p.enc = (*Buffer).enc_slice_ref_time
- p.dec = (*Buffer).dec_slice_ref_time
- p.size = size_slice_ref_time
- }
- } else if typ.Kind() == reflect.Ptr {
- p.enc = (*Buffer).enc_time
- p.dec = (*Buffer).dec_time
- p.size = size_time
- } else {
- p.enc = (*Buffer).enc_ref_time
- p.dec = (*Buffer).dec_ref_time
- p.size = size_ref_time
- }
-
-}
-
-func (p *Properties) setSliceOfNonPointerStructs(typ reflect.Type) {
- t2 := typ.Elem()
- p.sstype = typ
- p.stype = t2
- p.isMarshaler = isMarshaler(t2)
- p.isUnmarshaler = isUnmarshaler(t2)
- p.enc = (*Buffer).enc_slice_ref_struct_message
- p.dec = (*Buffer).dec_slice_ref_struct_message
- p.size = size_slice_ref_struct_message
- if p.Wire != "bytes" {
- fmt.Fprintf(os.Stderr, "proto: no ptr oenc for %T -> %T \n", typ, t2)
- }
-}
+var sizerType = reflect.TypeOf((*Sizer)(nil)).Elem()
+var protosizerType = reflect.TypeOf((*ProtoSizer)(nil)).Elem()
diff --git a/vendor/github.com/gogo/protobuf/proto/table_marshal.go b/vendor/github.com/gogo/protobuf/proto/table_marshal.go
new file mode 100644
index 000000000..ba58c49a4
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/table_marshal.go
@@ -0,0 +1,3006 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// 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.
+
+package proto
+
+import (
+ "errors"
+ "fmt"
+ "math"
+ "reflect"
+ "sort"
+ "strconv"
+ "strings"
+ "sync"
+ "sync/atomic"
+ "unicode/utf8"
+)
+
+// a sizer takes a pointer to a field and the size of its tag, computes the size of
+// the encoded data.
+type sizer func(pointer, int) int
+
+// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format),
+// marshals the field to the end of the slice, returns the slice and error (if any).
+type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error)
+
+// marshalInfo is the information used for marshaling a message.
+type marshalInfo struct {
+ typ reflect.Type
+ fields []*marshalFieldInfo
+ unrecognized field // offset of XXX_unrecognized
+ extensions field // offset of XXX_InternalExtensions
+ v1extensions field // offset of XXX_extensions
+ sizecache field // offset of XXX_sizecache
+ initialized int32 // 0 -- only typ is set, 1 -- fully initialized
+ messageset bool // uses message set wire format
+ hasmarshaler bool // has custom marshaler
+ sync.RWMutex // protect extElems map, also for initialization
+ extElems map[int32]*marshalElemInfo // info of extension elements
+
+ hassizer bool // has custom sizer
+ hasprotosizer bool // has custom protosizer
+
+ bytesExtensions field // offset of XXX_extensions where the field type is []byte
+}
+
+// marshalFieldInfo is the information used for marshaling a field of a message.
+type marshalFieldInfo struct {
+ field field
+ wiretag uint64 // tag in wire format
+ tagsize int // size of tag in wire format
+ sizer sizer
+ marshaler marshaler
+ isPointer bool
+ required bool // field is required
+ name string // name of the field, for error reporting
+ oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements
+}
+
+// marshalElemInfo is the information used for marshaling an extension or oneof element.
+type marshalElemInfo struct {
+ wiretag uint64 // tag in wire format
+ tagsize int // size of tag in wire format
+ sizer sizer
+ marshaler marshaler
+ isptr bool // elem is pointer typed, thus interface of this type is a direct interface (extension only)
+}
+
+var (
+ marshalInfoMap = map[reflect.Type]*marshalInfo{}
+ marshalInfoLock sync.Mutex
+
+ uint8SliceType = reflect.TypeOf(([]uint8)(nil)).Kind()
+)
+
+// getMarshalInfo returns the information to marshal a given type of message.
+// The info it returns may not necessarily initialized.
+// t is the type of the message (NOT the pointer to it).
+func getMarshalInfo(t reflect.Type) *marshalInfo {
+ marshalInfoLock.Lock()
+ u, ok := marshalInfoMap[t]
+ if !ok {
+ u = &marshalInfo{typ: t}
+ marshalInfoMap[t] = u
+ }
+ marshalInfoLock.Unlock()
+ return u
+}
+
+// Size is the entry point from generated code,
+// and should be ONLY called by generated code.
+// It computes the size of encoded data of msg.
+// a is a pointer to a place to store cached marshal info.
+func (a *InternalMessageInfo) Size(msg Message) int {
+ u := getMessageMarshalInfo(msg, a)
+ ptr := toPointer(&msg)
+ if ptr.isNil() {
+ // We get here if msg is a typed nil ((*SomeMessage)(nil)),
+ // so it satisfies the interface, and msg == nil wouldn't
+ // catch it. We don't want crash in this case.
+ return 0
+ }
+ return u.size(ptr)
+}
+
+// Marshal is the entry point from generated code,
+// and should be ONLY called by generated code.
+// It marshals msg to the end of b.
+// a is a pointer to a place to store cached marshal info.
+func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) {
+ u := getMessageMarshalInfo(msg, a)
+ ptr := toPointer(&msg)
+ if ptr.isNil() {
+ // We get here if msg is a typed nil ((*SomeMessage)(nil)),
+ // so it satisfies the interface, and msg == nil wouldn't
+ // catch it. We don't want crash in this case.
+ return b, ErrNil
+ }
+ return u.marshal(b, ptr, deterministic)
+}
+
+func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo {
+ // u := a.marshal, but atomically.
+ // We use an atomic here to ensure memory consistency.
+ u := atomicLoadMarshalInfo(&a.marshal)
+ if u == nil {
+ // Get marshal information from type of message.
+ t := reflect.ValueOf(msg).Type()
+ if t.Kind() != reflect.Ptr {
+ panic(fmt.Sprintf("cannot handle non-pointer message type %v", t))
+ }
+ u = getMarshalInfo(t.Elem())
+ // Store it in the cache for later users.
+ // a.marshal = u, but atomically.
+ atomicStoreMarshalInfo(&a.marshal, u)
+ }
+ return u
+}
+
+// size is the main function to compute the size of the encoded data of a message.
+// ptr is the pointer to the message.
+func (u *marshalInfo) size(ptr pointer) int {
+ if atomic.LoadInt32(&u.initialized) == 0 {
+ u.computeMarshalInfo()
+ }
+
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ if u.hasmarshaler {
+ // Uses the message's Size method if available
+ if u.hassizer {
+ s := ptr.asPointerTo(u.typ).Interface().(Sizer)
+ return s.Size()
+ }
+ // Uses the message's ProtoSize method if available
+ if u.hasprotosizer {
+ s := ptr.asPointerTo(u.typ).Interface().(ProtoSizer)
+ return s.ProtoSize()
+ }
+
+ m := ptr.asPointerTo(u.typ).Interface().(Marshaler)
+ b, _ := m.Marshal()
+ return len(b)
+ }
+
+ n := 0
+ for _, f := range u.fields {
+ if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
+ // nil pointer always marshals to nothing
+ continue
+ }
+ n += f.sizer(ptr.offset(f.field), f.tagsize)
+ }
+ if u.extensions.IsValid() {
+ e := ptr.offset(u.extensions).toExtensions()
+ if u.messageset {
+ n += u.sizeMessageSet(e)
+ } else {
+ n += u.sizeExtensions(e)
+ }
+ }
+ if u.v1extensions.IsValid() {
+ m := *ptr.offset(u.v1extensions).toOldExtensions()
+ n += u.sizeV1Extensions(m)
+ }
+ if u.bytesExtensions.IsValid() {
+ s := *ptr.offset(u.bytesExtensions).toBytes()
+ n += len(s)
+ }
+ if u.unrecognized.IsValid() {
+ s := *ptr.offset(u.unrecognized).toBytes()
+ n += len(s)
+ }
+
+ // cache the result for use in marshal
+ if u.sizecache.IsValid() {
+ atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n))
+ }
+ return n
+}
+
+// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated),
+// fall back to compute the size.
+func (u *marshalInfo) cachedsize(ptr pointer) int {
+ if u.sizecache.IsValid() {
+ return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32()))
+ }
+ return u.size(ptr)
+}
+
+// marshal is the main function to marshal a message. It takes a byte slice and appends
+// the encoded data to the end of the slice, returns the slice and error (if any).
+// ptr is the pointer to the message.
+// If deterministic is true, map is marshaled in deterministic order.
+func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) {
+ if atomic.LoadInt32(&u.initialized) == 0 {
+ u.computeMarshalInfo()
+ }
+
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ if u.hasmarshaler {
+ m := ptr.asPointerTo(u.typ).Interface().(Marshaler)
+ b1, err := m.Marshal()
+ b = append(b, b1...)
+ return b, err
+ }
+
+ var err, errLater error
+ // The old marshaler encodes extensions at beginning.
+ if u.extensions.IsValid() {
+ e := ptr.offset(u.extensions).toExtensions()
+ if u.messageset {
+ b, err = u.appendMessageSet(b, e, deterministic)
+ } else {
+ b, err = u.appendExtensions(b, e, deterministic)
+ }
+ if err != nil {
+ return b, err
+ }
+ }
+ if u.v1extensions.IsValid() {
+ m := *ptr.offset(u.v1extensions).toOldExtensions()
+ b, err = u.appendV1Extensions(b, m, deterministic)
+ if err != nil {
+ return b, err
+ }
+ }
+ if u.bytesExtensions.IsValid() {
+ s := *ptr.offset(u.bytesExtensions).toBytes()
+ b = append(b, s...)
+ }
+ for _, f := range u.fields {
+ if f.required {
+ if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
+ // Required field is not set.
+ // We record the error but keep going, to give a complete marshaling.
+ if errLater == nil {
+ errLater = &RequiredNotSetError{f.name}
+ }
+ continue
+ }
+ }
+ if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
+ // nil pointer always marshals to nothing
+ continue
+ }
+ b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic)
+ if err != nil {
+ if err1, ok := err.(*RequiredNotSetError); ok {
+ // Required field in submessage is not set.
+ // We record the error but keep going, to give a complete marshaling.
+ if errLater == nil {
+ errLater = &RequiredNotSetError{f.name + "." + err1.field}
+ }
+ continue
+ }
+ if err == errRepeatedHasNil {
+ err = errors.New("proto: repeated field " + f.name + " has nil element")
+ }
+ if err == errInvalidUTF8 {
+ if errLater == nil {
+ fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name
+ errLater = &invalidUTF8Error{fullName}
+ }
+ continue
+ }
+ return b, err
+ }
+ }
+ if u.unrecognized.IsValid() {
+ s := *ptr.offset(u.unrecognized).toBytes()
+ b = append(b, s...)
+ }
+ return b, errLater
+}
+
+// computeMarshalInfo initializes the marshal info.
+func (u *marshalInfo) computeMarshalInfo() {
+ u.Lock()
+ defer u.Unlock()
+ if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock
+ return
+ }
+
+ t := u.typ
+ u.unrecognized = invalidField
+ u.extensions = invalidField
+ u.v1extensions = invalidField
+ u.bytesExtensions = invalidField
+ u.sizecache = invalidField
+ isOneofMessage := false
+
+ if reflect.PtrTo(t).Implements(sizerType) {
+ u.hassizer = true
+ }
+ if reflect.PtrTo(t).Implements(protosizerType) {
+ u.hasprotosizer = true
+ }
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ if reflect.PtrTo(t).Implements(marshalerType) {
+ u.hasmarshaler = true
+ atomic.StoreInt32(&u.initialized, 1)
+ return
+ }
+
+ n := t.NumField()
+
+ // deal with XXX fields first
+ for i := 0; i < t.NumField(); i++ {
+ f := t.Field(i)
+ if f.Tag.Get("protobuf_oneof") != "" {
+ isOneofMessage = true
+ }
+ if !strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+ switch f.Name {
+ case "XXX_sizecache":
+ u.sizecache = toField(&f)
+ case "XXX_unrecognized":
+ u.unrecognized = toField(&f)
+ case "XXX_InternalExtensions":
+ u.extensions = toField(&f)
+ u.messageset = f.Tag.Get("protobuf_messageset") == "1"
+ case "XXX_extensions":
+ if f.Type.Kind() == reflect.Map {
+ u.v1extensions = toField(&f)
+ } else {
+ u.bytesExtensions = toField(&f)
+ }
+ case "XXX_NoUnkeyedLiteral":
+ // nothing to do
+ default:
+ panic("unknown XXX field: " + f.Name)
+ }
+ n--
+ }
+
+ // get oneof implementers
+ var oneofImplementers []interface{}
+ // gogo: isOneofMessage is needed for embedded oneof messages, without a marshaler and unmarshaler
+ if m, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok && isOneofMessage {
+ _, _, _, oneofImplementers = m.XXX_OneofFuncs()
+ }
+
+ // normal fields
+ fields := make([]marshalFieldInfo, n) // batch allocation
+ u.fields = make([]*marshalFieldInfo, 0, n)
+ for i, j := 0, 0; i < t.NumField(); i++ {
+ f := t.Field(i)
+
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+ field := &fields[j]
+ j++
+ field.name = f.Name
+ u.fields = append(u.fields, field)
+ if f.Tag.Get("protobuf_oneof") != "" {
+ field.computeOneofFieldInfo(&f, oneofImplementers)
+ continue
+ }
+ if f.Tag.Get("protobuf") == "" {
+ // field has no tag (not in generated message), ignore it
+ u.fields = u.fields[:len(u.fields)-1]
+ j--
+ continue
+ }
+ field.computeMarshalFieldInfo(&f)
+ }
+
+ // fields are marshaled in tag order on the wire.
+ sort.Sort(byTag(u.fields))
+
+ atomic.StoreInt32(&u.initialized, 1)
+}
+
+// helper for sorting fields by tag
+type byTag []*marshalFieldInfo
+
+func (a byTag) Len() int { return len(a) }
+func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag }
+
+// getExtElemInfo returns the information to marshal an extension element.
+// The info it returns is initialized.
+func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo {
+ // get from cache first
+ u.RLock()
+ e, ok := u.extElems[desc.Field]
+ u.RUnlock()
+ if ok {
+ return e
+ }
+
+ t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct
+ tags := strings.Split(desc.Tag, ",")
+ tag, err := strconv.Atoi(tags[1])
+ if err != nil {
+ panic("tag is not an integer")
+ }
+ wt := wiretype(tags[0])
+ sizr, marshalr := typeMarshaler(t, tags, false, false)
+ e = &marshalElemInfo{
+ wiretag: uint64(tag)<<3 | wt,
+ tagsize: SizeVarint(uint64(tag) << 3),
+ sizer: sizr,
+ marshaler: marshalr,
+ isptr: t.Kind() == reflect.Ptr,
+ }
+
+ // update cache
+ u.Lock()
+ if u.extElems == nil {
+ u.extElems = make(map[int32]*marshalElemInfo)
+ }
+ u.extElems[desc.Field] = e
+ u.Unlock()
+ return e
+}
+
+// computeMarshalFieldInfo fills up the information to marshal a field.
+func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) {
+ // parse protobuf tag of the field.
+ // tag has format of "bytes,49,opt,name=foo,def=hello!"
+ tags := strings.Split(f.Tag.Get("protobuf"), ",")
+ if tags[0] == "" {
+ return
+ }
+ tag, err := strconv.Atoi(tags[1])
+ if err != nil {
+ panic("tag is not an integer")
+ }
+ wt := wiretype(tags[0])
+ if tags[2] == "req" {
+ fi.required = true
+ }
+ fi.setTag(f, tag, wt)
+ fi.setMarshaler(f, tags)
+}
+
+func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) {
+ fi.field = toField(f)
+ fi.wiretag = 1<<31 - 1 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire.
+ fi.isPointer = true
+ fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f)
+ fi.oneofElems = make(map[reflect.Type]*marshalElemInfo)
+
+ ityp := f.Type // interface type
+ for _, o := range oneofImplementers {
+ t := reflect.TypeOf(o)
+ if !t.Implements(ityp) {
+ continue
+ }
+ sf := t.Elem().Field(0) // oneof implementer is a struct with a single field
+ tags := strings.Split(sf.Tag.Get("protobuf"), ",")
+ tag, err := strconv.Atoi(tags[1])
+ if err != nil {
+ panic("tag is not an integer")
+ }
+ wt := wiretype(tags[0])
+ sizr, marshalr := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value
+ fi.oneofElems[t.Elem()] = &marshalElemInfo{
+ wiretag: uint64(tag)<<3 | wt,
+ tagsize: SizeVarint(uint64(tag) << 3),
+ sizer: sizr,
+ marshaler: marshalr,
+ }
+ }
+}
+
+type oneofMessage interface {
+ XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
+}
+
+// wiretype returns the wire encoding of the type.
+func wiretype(encoding string) uint64 {
+ switch encoding {
+ case "fixed32":
+ return WireFixed32
+ case "fixed64":
+ return WireFixed64
+ case "varint", "zigzag32", "zigzag64":
+ return WireVarint
+ case "bytes":
+ return WireBytes
+ case "group":
+ return WireStartGroup
+ }
+ panic("unknown wire type " + encoding)
+}
+
+// setTag fills up the tag (in wire format) and its size in the info of a field.
+func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) {
+ fi.field = toField(f)
+ fi.wiretag = uint64(tag)<<3 | wt
+ fi.tagsize = SizeVarint(uint64(tag) << 3)
+}
+
+// setMarshaler fills up the sizer and marshaler in the info of a field.
+func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) {
+ switch f.Type.Kind() {
+ case reflect.Map:
+ // map field
+ fi.isPointer = true
+ fi.sizer, fi.marshaler = makeMapMarshaler(f)
+ return
+ case reflect.Ptr, reflect.Slice:
+ fi.isPointer = true
+ }
+ fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false)
+}
+
+// typeMarshaler returns the sizer and marshaler of a given field.
+// t is the type of the field.
+// tags is the generated "protobuf" tag of the field.
+// If nozero is true, zero value is not marshaled to the wire.
+// If oneof is true, it is a oneof field.
+func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) {
+ encoding := tags[0]
+
+ pointer := false
+ slice := false
+ if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
+ slice = true
+ t = t.Elem()
+ }
+ if t.Kind() == reflect.Ptr {
+ pointer = true
+ t = t.Elem()
+ }
+
+ packed := false
+ proto3 := false
+ ctype := false
+ isTime := false
+ isDuration := false
+ isWktPointer := false
+ validateUTF8 := true
+ for i := 2; i < len(tags); i++ {
+ if tags[i] == "packed" {
+ packed = true
+ }
+ if tags[i] == "proto3" {
+ proto3 = true
+ }
+ if strings.HasPrefix(tags[i], "customtype=") {
+ ctype = true
+ }
+ if tags[i] == "stdtime" {
+ isTime = true
+ }
+ if tags[i] == "stdduration" {
+ isDuration = true
+ }
+ if tags[i] == "wktptr" {
+ isWktPointer = true
+ }
+ }
+ validateUTF8 = validateUTF8 && proto3
+ if !proto3 && !pointer && !slice {
+ nozero = false
+ }
+
+ if ctype {
+ if reflect.PtrTo(t).Implements(customType) {
+ if slice {
+ return makeMessageRefSliceMarshaler(getMarshalInfo(t))
+ }
+ if pointer {
+ return makeCustomPtrMarshaler(getMarshalInfo(t))
+ }
+ return makeCustomMarshaler(getMarshalInfo(t))
+ } else {
+ panic(fmt.Sprintf("custom type: type: %v, does not implement the proto.custom interface", t))
+ }
+ }
+
+ if isTime {
+ if pointer {
+ if slice {
+ return makeTimePtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeTimePtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeTimeSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeTimeMarshaler(getMarshalInfo(t))
+ }
+
+ if isDuration {
+ if pointer {
+ if slice {
+ return makeDurationPtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeDurationPtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeDurationSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeDurationMarshaler(getMarshalInfo(t))
+ }
+
+ if isWktPointer {
+ switch t.Kind() {
+ case reflect.Float64:
+ if pointer {
+ if slice {
+ return makeStdDoubleValuePtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdDoubleValuePtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeStdDoubleValueSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdDoubleValueMarshaler(getMarshalInfo(t))
+ case reflect.Float32:
+ if pointer {
+ if slice {
+ return makeStdFloatValuePtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdFloatValuePtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeStdFloatValueSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdFloatValueMarshaler(getMarshalInfo(t))
+ case reflect.Int64:
+ if pointer {
+ if slice {
+ return makeStdInt64ValuePtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdInt64ValuePtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeStdInt64ValueSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdInt64ValueMarshaler(getMarshalInfo(t))
+ case reflect.Uint64:
+ if pointer {
+ if slice {
+ return makeStdUInt64ValuePtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdUInt64ValuePtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeStdUInt64ValueSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdUInt64ValueMarshaler(getMarshalInfo(t))
+ case reflect.Int32:
+ if pointer {
+ if slice {
+ return makeStdInt32ValuePtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdInt32ValuePtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeStdInt32ValueSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdInt32ValueMarshaler(getMarshalInfo(t))
+ case reflect.Uint32:
+ if pointer {
+ if slice {
+ return makeStdUInt32ValuePtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdUInt32ValuePtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeStdUInt32ValueSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdUInt32ValueMarshaler(getMarshalInfo(t))
+ case reflect.Bool:
+ if pointer {
+ if slice {
+ return makeStdBoolValuePtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdBoolValuePtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeStdBoolValueSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdBoolValueMarshaler(getMarshalInfo(t))
+ case reflect.String:
+ if pointer {
+ if slice {
+ return makeStdStringValuePtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdStringValuePtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeStdStringValueSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdStringValueMarshaler(getMarshalInfo(t))
+ case uint8SliceType:
+ if pointer {
+ if slice {
+ return makeStdBytesValuePtrSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdBytesValuePtrMarshaler(getMarshalInfo(t))
+ }
+ if slice {
+ return makeStdBytesValueSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeStdBytesValueMarshaler(getMarshalInfo(t))
+ default:
+ panic(fmt.Sprintf("unknown wktpointer type %#v", t))
+ }
+ }
+
+ switch t.Kind() {
+ case reflect.Bool:
+ if pointer {
+ return sizeBoolPtr, appendBoolPtr
+ }
+ if slice {
+ if packed {
+ return sizeBoolPackedSlice, appendBoolPackedSlice
+ }
+ return sizeBoolSlice, appendBoolSlice
+ }
+ if nozero {
+ return sizeBoolValueNoZero, appendBoolValueNoZero
+ }
+ return sizeBoolValue, appendBoolValue
+ case reflect.Uint32:
+ switch encoding {
+ case "fixed32":
+ if pointer {
+ return sizeFixed32Ptr, appendFixed32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFixed32PackedSlice, appendFixed32PackedSlice
+ }
+ return sizeFixed32Slice, appendFixed32Slice
+ }
+ if nozero {
+ return sizeFixed32ValueNoZero, appendFixed32ValueNoZero
+ }
+ return sizeFixed32Value, appendFixed32Value
+ case "varint":
+ if pointer {
+ return sizeVarint32Ptr, appendVarint32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeVarint32PackedSlice, appendVarint32PackedSlice
+ }
+ return sizeVarint32Slice, appendVarint32Slice
+ }
+ if nozero {
+ return sizeVarint32ValueNoZero, appendVarint32ValueNoZero
+ }
+ return sizeVarint32Value, appendVarint32Value
+ }
+ case reflect.Int32:
+ switch encoding {
+ case "fixed32":
+ if pointer {
+ return sizeFixedS32Ptr, appendFixedS32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFixedS32PackedSlice, appendFixedS32PackedSlice
+ }
+ return sizeFixedS32Slice, appendFixedS32Slice
+ }
+ if nozero {
+ return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero
+ }
+ return sizeFixedS32Value, appendFixedS32Value
+ case "varint":
+ if pointer {
+ return sizeVarintS32Ptr, appendVarintS32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeVarintS32PackedSlice, appendVarintS32PackedSlice
+ }
+ return sizeVarintS32Slice, appendVarintS32Slice
+ }
+ if nozero {
+ return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero
+ }
+ return sizeVarintS32Value, appendVarintS32Value
+ case "zigzag32":
+ if pointer {
+ return sizeZigzag32Ptr, appendZigzag32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeZigzag32PackedSlice, appendZigzag32PackedSlice
+ }
+ return sizeZigzag32Slice, appendZigzag32Slice
+ }
+ if nozero {
+ return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero
+ }
+ return sizeZigzag32Value, appendZigzag32Value
+ }
+ case reflect.Uint64:
+ switch encoding {
+ case "fixed64":
+ if pointer {
+ return sizeFixed64Ptr, appendFixed64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFixed64PackedSlice, appendFixed64PackedSlice
+ }
+ return sizeFixed64Slice, appendFixed64Slice
+ }
+ if nozero {
+ return sizeFixed64ValueNoZero, appendFixed64ValueNoZero
+ }
+ return sizeFixed64Value, appendFixed64Value
+ case "varint":
+ if pointer {
+ return sizeVarint64Ptr, appendVarint64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeVarint64PackedSlice, appendVarint64PackedSlice
+ }
+ return sizeVarint64Slice, appendVarint64Slice
+ }
+ if nozero {
+ return sizeVarint64ValueNoZero, appendVarint64ValueNoZero
+ }
+ return sizeVarint64Value, appendVarint64Value
+ }
+ case reflect.Int64:
+ switch encoding {
+ case "fixed64":
+ if pointer {
+ return sizeFixedS64Ptr, appendFixedS64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFixedS64PackedSlice, appendFixedS64PackedSlice
+ }
+ return sizeFixedS64Slice, appendFixedS64Slice
+ }
+ if nozero {
+ return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero
+ }
+ return sizeFixedS64Value, appendFixedS64Value
+ case "varint":
+ if pointer {
+ return sizeVarintS64Ptr, appendVarintS64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeVarintS64PackedSlice, appendVarintS64PackedSlice
+ }
+ return sizeVarintS64Slice, appendVarintS64Slice
+ }
+ if nozero {
+ return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero
+ }
+ return sizeVarintS64Value, appendVarintS64Value
+ case "zigzag64":
+ if pointer {
+ return sizeZigzag64Ptr, appendZigzag64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeZigzag64PackedSlice, appendZigzag64PackedSlice
+ }
+ return sizeZigzag64Slice, appendZigzag64Slice
+ }
+ if nozero {
+ return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero
+ }
+ return sizeZigzag64Value, appendZigzag64Value
+ }
+ case reflect.Float32:
+ if pointer {
+ return sizeFloat32Ptr, appendFloat32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFloat32PackedSlice, appendFloat32PackedSlice
+ }
+ return sizeFloat32Slice, appendFloat32Slice
+ }
+ if nozero {
+ return sizeFloat32ValueNoZero, appendFloat32ValueNoZero
+ }
+ return sizeFloat32Value, appendFloat32Value
+ case reflect.Float64:
+ if pointer {
+ return sizeFloat64Ptr, appendFloat64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFloat64PackedSlice, appendFloat64PackedSlice
+ }
+ return sizeFloat64Slice, appendFloat64Slice
+ }
+ if nozero {
+ return sizeFloat64ValueNoZero, appendFloat64ValueNoZero
+ }
+ return sizeFloat64Value, appendFloat64Value
+ case reflect.String:
+ if validateUTF8 {
+ if pointer {
+ return sizeStringPtr, appendUTF8StringPtr
+ }
+ if slice {
+ return sizeStringSlice, appendUTF8StringSlice
+ }
+ if nozero {
+ return sizeStringValueNoZero, appendUTF8StringValueNoZero
+ }
+ return sizeStringValue, appendUTF8StringValue
+ }
+ if pointer {
+ return sizeStringPtr, appendStringPtr
+ }
+ if slice {
+ return sizeStringSlice, appendStringSlice
+ }
+ if nozero {
+ return sizeStringValueNoZero, appendStringValueNoZero
+ }
+ return sizeStringValue, appendStringValue
+ case reflect.Slice:
+ if slice {
+ return sizeBytesSlice, appendBytesSlice
+ }
+ if oneof {
+ // Oneof bytes field may also have "proto3" tag.
+ // We want to marshal it as a oneof field. Do this
+ // check before the proto3 check.
+ return sizeBytesOneof, appendBytesOneof
+ }
+ if proto3 {
+ return sizeBytes3, appendBytes3
+ }
+ return sizeBytes, appendBytes
+ case reflect.Struct:
+ switch encoding {
+ case "group":
+ if slice {
+ return makeGroupSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeGroupMarshaler(getMarshalInfo(t))
+ case "bytes":
+ if pointer {
+ if slice {
+ return makeMessageSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeMessageMarshaler(getMarshalInfo(t))
+ } else {
+ if slice {
+ return makeMessageRefSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeMessageRefMarshaler(getMarshalInfo(t))
+ }
+ }
+ }
+ panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding))
+}
+
+// Below are functions to size/marshal a specific type of a field.
+// They are stored in the field's info, and called by function pointers.
+// They have type sizer or marshaler.
+
+func sizeFixed32Value(_ pointer, tagsize int) int {
+ return 4 + tagsize
+}
+func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toUint32()
+ if v == 0 {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFixed32Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toUint32Ptr()
+ if p == nil {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFixed32Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint32Slice()
+ return (4 + tagsize) * len(s)
+}
+func sizeFixed32PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
+}
+func sizeFixedS32Value(_ pointer, tagsize int) int {
+ return 4 + tagsize
+}
+func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFixedS32Ptr(ptr pointer, tagsize int) int {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFixedS32Slice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ return (4 + tagsize) * len(s)
+}
+func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
+}
+func sizeFloat32Value(_ pointer, tagsize int) int {
+ return 4 + tagsize
+}
+func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int {
+ v := math.Float32bits(*ptr.toFloat32())
+ if v == 0 {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFloat32Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toFloat32Ptr()
+ if p == nil {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFloat32Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toFloat32Slice()
+ return (4 + tagsize) * len(s)
+}
+func sizeFloat32PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toFloat32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
+}
+func sizeFixed64Value(_ pointer, tagsize int) int {
+ return 8 + tagsize
+}
+func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toUint64()
+ if v == 0 {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFixed64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toUint64Ptr()
+ if p == nil {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFixed64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint64Slice()
+ return (8 + tagsize) * len(s)
+}
+func sizeFixed64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
+}
+func sizeFixedS64Value(_ pointer, tagsize int) int {
+ return 8 + tagsize
+}
+func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFixedS64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFixedS64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ return (8 + tagsize) * len(s)
+}
+func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
+}
+func sizeFloat64Value(_ pointer, tagsize int) int {
+ return 8 + tagsize
+}
+func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int {
+ v := math.Float64bits(*ptr.toFloat64())
+ if v == 0 {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFloat64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toFloat64Ptr()
+ if p == nil {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFloat64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toFloat64Slice()
+ return (8 + tagsize) * len(s)
+}
+func sizeFloat64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toFloat64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
+}
+func sizeVarint32Value(ptr pointer, tagsize int) int {
+ v := *ptr.toUint32()
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toUint32()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarint32Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toUint32Ptr()
+ if p == nil {
+ return 0
+ }
+ return SizeVarint(uint64(*p)) + tagsize
+}
+func sizeVarint32Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint32Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v)) + tagsize
+ }
+ return n
+}
+func sizeVarint32PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeVarintS32Value(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS32Ptr(ptr pointer, tagsize int) int {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return 0
+ }
+ return SizeVarint(uint64(*p)) + tagsize
+}
+func sizeVarintS32Slice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v)) + tagsize
+ }
+ return n
+}
+func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeVarint64Value(ptr pointer, tagsize int) int {
+ v := *ptr.toUint64()
+ return SizeVarint(v) + tagsize
+}
+func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toUint64()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(v) + tagsize
+}
+func sizeVarint64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toUint64Ptr()
+ if p == nil {
+ return 0
+ }
+ return SizeVarint(*p) + tagsize
+}
+func sizeVarint64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint64Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(v) + tagsize
+ }
+ return n
+}
+func sizeVarint64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(v)
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeVarintS64Value(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return 0
+ }
+ return SizeVarint(uint64(*p)) + tagsize
+}
+func sizeVarintS64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v)) + tagsize
+ }
+ return n
+}
+func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeZigzag32Value(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+}
+func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+}
+func sizeZigzag32Ptr(ptr pointer, tagsize int) int {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return 0
+ }
+ v := *p
+ return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+}
+func sizeZigzag32Slice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+ }
+ return n
+}
+func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeZigzag64Value(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+}
+func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+}
+func sizeZigzag64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return 0
+ }
+ v := *p
+ return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+}
+func sizeZigzag64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+ }
+ return n
+}
+func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeBoolValue(_ pointer, tagsize int) int {
+ return 1 + tagsize
+}
+func sizeBoolValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toBool()
+ if !v {
+ return 0
+ }
+ return 1 + tagsize
+}
+func sizeBoolPtr(ptr pointer, tagsize int) int {
+ p := *ptr.toBoolPtr()
+ if p == nil {
+ return 0
+ }
+ return 1 + tagsize
+}
+func sizeBoolSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toBoolSlice()
+ return (1 + tagsize) * len(s)
+}
+func sizeBoolPackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toBoolSlice()
+ if len(s) == 0 {
+ return 0
+ }
+ return len(s) + SizeVarint(uint64(len(s))) + tagsize
+}
+func sizeStringValue(ptr pointer, tagsize int) int {
+ v := *ptr.toString()
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeStringValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toString()
+ if v == "" {
+ return 0
+ }
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeStringPtr(ptr pointer, tagsize int) int {
+ p := *ptr.toStringPtr()
+ if p == nil {
+ return 0
+ }
+ v := *p
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeStringSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toStringSlice()
+ n := 0
+ for _, v := range s {
+ n += len(v) + SizeVarint(uint64(len(v))) + tagsize
+ }
+ return n
+}
+func sizeBytes(ptr pointer, tagsize int) int {
+ v := *ptr.toBytes()
+ if v == nil {
+ return 0
+ }
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeBytes3(ptr pointer, tagsize int) int {
+ v := *ptr.toBytes()
+ if len(v) == 0 {
+ return 0
+ }
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeBytesOneof(ptr pointer, tagsize int) int {
+ v := *ptr.toBytes()
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeBytesSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toBytesSlice()
+ n := 0
+ for _, v := range s {
+ n += len(v) + SizeVarint(uint64(len(v))) + tagsize
+ }
+ return n
+}
+
+// appendFixed32 appends an encoded fixed32 to b.
+func appendFixed32(b []byte, v uint32) []byte {
+ b = append(b,
+ byte(v),
+ byte(v>>8),
+ byte(v>>16),
+ byte(v>>24))
+ return b
+}
+
+// appendFixed64 appends an encoded fixed64 to b.
+func appendFixed64(b []byte, v uint64) []byte {
+ b = append(b,
+ byte(v),
+ byte(v>>8),
+ byte(v>>16),
+ byte(v>>24),
+ byte(v>>32),
+ byte(v>>40),
+ byte(v>>48),
+ byte(v>>56))
+ return b
+}
+
+// appendVarint appends an encoded varint to b.
+func appendVarint(b []byte, v uint64) []byte {
+ // TODO: make 1-byte (maybe 2-byte) case inline-able, once we
+ // have non-leaf inliner.
+ switch {
+ case v < 1<<7:
+ b = append(b, byte(v))
+ case v < 1<<14:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte(v>>7))
+ case v < 1<<21:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte(v>>14))
+ case v < 1<<28:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte(v>>21))
+ case v < 1<<35:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte(v>>28))
+ case v < 1<<42:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte(v>>35))
+ case v < 1<<49:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte((v>>35)&0x7f|0x80),
+ byte(v>>42))
+ case v < 1<<56:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte((v>>35)&0x7f|0x80),
+ byte((v>>42)&0x7f|0x80),
+ byte(v>>49))
+ case v < 1<<63:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte((v>>35)&0x7f|0x80),
+ byte((v>>42)&0x7f|0x80),
+ byte((v>>49)&0x7f|0x80),
+ byte(v>>56))
+ default:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte((v>>35)&0x7f|0x80),
+ byte((v>>42)&0x7f|0x80),
+ byte((v>>49)&0x7f|0x80),
+ byte((v>>56)&0x7f|0x80),
+ 1)
+ }
+ return b
+}
+
+func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint32()
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ return b, nil
+}
+func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ return b, nil
+}
+func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toUint32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, *p)
+ return b, nil
+}
+func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ }
+ return b, nil
+}
+func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(4*len(s)))
+ for _, v := range s {
+ b = appendFixed32(b, v)
+ }
+ return b, nil
+}
+func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, uint32(v))
+ return b, nil
+}
+func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, uint32(v))
+ return b, nil
+}
+func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, uint32(*p))
+ return b, nil
+}
+func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, uint32(v))
+ }
+ return b, nil
+}
+func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(4*len(s)))
+ for _, v := range s {
+ b = appendFixed32(b, uint32(v))
+ }
+ return b, nil
+}
+func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := math.Float32bits(*ptr.toFloat32())
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ return b, nil
+}
+func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := math.Float32bits(*ptr.toFloat32())
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ return b, nil
+}
+func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toFloat32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, math.Float32bits(*p))
+ return b, nil
+}
+func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toFloat32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, math.Float32bits(v))
+ }
+ return b, nil
+}
+func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toFloat32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(4*len(s)))
+ for _, v := range s {
+ b = appendFixed32(b, math.Float32bits(v))
+ }
+ return b, nil
+}
+func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint64()
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ return b, nil
+}
+func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ return b, nil
+}
+func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toUint64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, *p)
+ return b, nil
+}
+func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ }
+ return b, nil
+}
+func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(8*len(s)))
+ for _, v := range s {
+ b = appendFixed64(b, v)
+ }
+ return b, nil
+}
+func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, uint64(v))
+ return b, nil
+}
+func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, uint64(v))
+ return b, nil
+}
+func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, uint64(*p))
+ return b, nil
+}
+func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, uint64(v))
+ }
+ return b, nil
+}
+func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(8*len(s)))
+ for _, v := range s {
+ b = appendFixed64(b, uint64(v))
+ }
+ return b, nil
+}
+func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := math.Float64bits(*ptr.toFloat64())
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ return b, nil
+}
+func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := math.Float64bits(*ptr.toFloat64())
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ return b, nil
+}
+func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toFloat64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, math.Float64bits(*p))
+ return b, nil
+}
+func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toFloat64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, math.Float64bits(v))
+ }
+ return b, nil
+}
+func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toFloat64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(8*len(s)))
+ for _, v := range s {
+ b = appendFixed64(b, math.Float64bits(v))
+ }
+ return b, nil
+}
+func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint32()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toUint32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(*p))
+ return b, nil
+}
+func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(*p))
+ return b, nil
+}
+func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint64()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, v)
+ return b, nil
+}
+func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, v)
+ return b, nil
+}
+func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toUint64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, *p)
+ return b, nil
+}
+func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, v)
+ }
+ return b, nil
+}
+func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(v)
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, v)
+ }
+ return b, nil
+}
+func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(*p))
+ return b, nil
+}
+func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ return b, nil
+}
+func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ return b, nil
+}
+func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ v := *p
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ return b, nil
+}
+func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ }
+ return b, nil
+}
+func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ }
+ return b, nil
+}
+func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ return b, nil
+}
+func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ return b, nil
+}
+func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ v := *p
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ return b, nil
+}
+func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ }
+ return b, nil
+}
+func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ }
+ return b, nil
+}
+func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBool()
+ b = appendVarint(b, wiretag)
+ if v {
+ b = append(b, 1)
+ } else {
+ b = append(b, 0)
+ }
+ return b, nil
+}
+func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBool()
+ if !v {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = append(b, 1)
+ return b, nil
+}
+
+func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toBoolPtr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ if *p {
+ b = append(b, 1)
+ } else {
+ b = append(b, 0)
+ }
+ return b, nil
+}
+func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toBoolSlice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ if v {
+ b = append(b, 1)
+ } else {
+ b = append(b, 0)
+ }
+ }
+ return b, nil
+}
+func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toBoolSlice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(len(s)))
+ for _, v := range s {
+ if v {
+ b = append(b, 1)
+ } else {
+ b = append(b, 0)
+ }
+ }
+ return b, nil
+}
+func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toString()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toString()
+ if v == "" {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toStringPtr()
+ if p == nil {
+ return b, nil
+ }
+ v := *p
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toStringSlice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ }
+ return b, nil
+}
+func appendUTF8StringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ var invalidUTF8 bool
+ v := *ptr.toString()
+ if !utf8.ValidString(v) {
+ invalidUTF8 = true
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ if invalidUTF8 {
+ return b, errInvalidUTF8
+ }
+ return b, nil
+}
+func appendUTF8StringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ var invalidUTF8 bool
+ v := *ptr.toString()
+ if v == "" {
+ return b, nil
+ }
+ if !utf8.ValidString(v) {
+ invalidUTF8 = true
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ if invalidUTF8 {
+ return b, errInvalidUTF8
+ }
+ return b, nil
+}
+func appendUTF8StringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ var invalidUTF8 bool
+ p := *ptr.toStringPtr()
+ if p == nil {
+ return b, nil
+ }
+ v := *p
+ if !utf8.ValidString(v) {
+ invalidUTF8 = true
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ if invalidUTF8 {
+ return b, errInvalidUTF8
+ }
+ return b, nil
+}
+func appendUTF8StringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ var invalidUTF8 bool
+ s := *ptr.toStringSlice()
+ for _, v := range s {
+ if !utf8.ValidString(v) {
+ invalidUTF8 = true
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ }
+ if invalidUTF8 {
+ return b, errInvalidUTF8
+ }
+ return b, nil
+}
+func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBytes()
+ if v == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBytes()
+ if len(v) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBytes()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toBytesSlice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ }
+ return b, nil
+}
+
+// makeGroupMarshaler returns the sizer and marshaler for a group.
+// u is the marshal info of the underlying message.
+func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ p := ptr.getPointer()
+ if p.isNil() {
+ return 0
+ }
+ return u.size(p) + 2*tagsize
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ p := ptr.getPointer()
+ if p.isNil() {
+ return b, nil
+ }
+ var err error
+ b = appendVarint(b, wiretag) // start group
+ b, err = u.marshal(b, p, deterministic)
+ b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group
+ return b, err
+ }
+}
+
+// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice.
+// u is the marshal info of the underlying message.
+func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getPointerSlice()
+ n := 0
+ for _, v := range s {
+ if v.isNil() {
+ continue
+ }
+ n += u.size(v) + 2*tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getPointerSlice()
+ var err error
+ var nerr nonFatal
+ for _, v := range s {
+ if v.isNil() {
+ return b, errRepeatedHasNil
+ }
+ b = appendVarint(b, wiretag) // start group
+ b, err = u.marshal(b, v, deterministic)
+ b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group
+ if !nerr.Merge(err) {
+ if err == ErrNil {
+ err = errRepeatedHasNil
+ }
+ return b, err
+ }
+ }
+ return b, nerr.E
+ }
+}
+
+// makeMessageMarshaler returns the sizer and marshaler for a message field.
+// u is the marshal info of the message.
+func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ p := ptr.getPointer()
+ if p.isNil() {
+ return 0
+ }
+ siz := u.size(p)
+ return siz + SizeVarint(uint64(siz)) + tagsize
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ p := ptr.getPointer()
+ if p.isNil() {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ siz := u.cachedsize(p)
+ b = appendVarint(b, uint64(siz))
+ return u.marshal(b, p, deterministic)
+ }
+}
+
+// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice.
+// u is the marshal info of the message.
+func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getPointerSlice()
+ n := 0
+ for _, v := range s {
+ if v.isNil() {
+ continue
+ }
+ siz := u.size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getPointerSlice()
+ var err error
+ var nerr nonFatal
+ for _, v := range s {
+ if v.isNil() {
+ return b, errRepeatedHasNil
+ }
+ b = appendVarint(b, wiretag)
+ siz := u.cachedsize(v)
+ b = appendVarint(b, uint64(siz))
+ b, err = u.marshal(b, v, deterministic)
+
+ if !nerr.Merge(err) {
+ if err == ErrNil {
+ err = errRepeatedHasNil
+ }
+ return b, err
+ }
+ }
+ return b, nerr.E
+ }
+}
+
+// makeMapMarshaler returns the sizer and marshaler for a map field.
+// f is the pointer to the reflect data structure of the field.
+func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) {
+ // figure out key and value type
+ t := f.Type
+ keyType := t.Key()
+ valType := t.Elem()
+ tags := strings.Split(f.Tag.Get("protobuf"), ",")
+ keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",")
+ valTags := strings.Split(f.Tag.Get("protobuf_val"), ",")
+ stdOptions := false
+ for _, t := range tags {
+ if strings.HasPrefix(t, "customtype=") {
+ valTags = append(valTags, t)
+ }
+ if t == "stdtime" {
+ valTags = append(valTags, t)
+ stdOptions = true
+ }
+ if t == "stdduration" {
+ valTags = append(valTags, t)
+ stdOptions = true
+ }
+ if t == "wktptr" {
+ valTags = append(valTags, t)
+ }
+ }
+ keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map
+ valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map
+ keyWireTag := 1<<3 | wiretype(keyTags[0])
+ valWireTag := 2<<3 | wiretype(valTags[0])
+
+ // We create an interface to get the addresses of the map key and value.
+ // If value is pointer-typed, the interface is a direct interface, the
+ // idata itself is the value. Otherwise, the idata is the pointer to the
+ // value.
+ // Key cannot be pointer-typed.
+ valIsPtr := valType.Kind() == reflect.Ptr
+
+ // If value is a message with nested maps, calling
+ // valSizer in marshal may be quadratic. We should use
+ // cached version in marshal (but not in size).
+ // If value is not message type, we don't have size cache,
+ // but it cannot be nested either. Just use valSizer.
+ valCachedSizer := valSizer
+ if valIsPtr && !stdOptions && valType.Elem().Kind() == reflect.Struct {
+ u := getMarshalInfo(valType.Elem())
+ valCachedSizer = func(ptr pointer, tagsize int) int {
+ // Same as message sizer, but use cache.
+ p := ptr.getPointer()
+ if p.isNil() {
+ return 0
+ }
+ siz := u.cachedsize(p)
+ return siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ }
+ return func(ptr pointer, tagsize int) int {
+ m := ptr.asPointerTo(t).Elem() // the map
+ n := 0
+ for _, k := range m.MapKeys() {
+ ki := k.Interface()
+ vi := m.MapIndex(k).Interface()
+ kaddr := toAddrPointer(&ki, false) // pointer to key
+ vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value
+ siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) {
+ m := ptr.asPointerTo(t).Elem() // the map
+ var err error
+ keys := m.MapKeys()
+ if len(keys) > 1 && deterministic {
+ sort.Sort(mapKeys(keys))
+ }
+
+ var nerr nonFatal
+ for _, k := range keys {
+ ki := k.Interface()
+ vi := m.MapIndex(k).Interface()
+ kaddr := toAddrPointer(&ki, false) // pointer to key
+ vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value
+ b = appendVarint(b, tag)
+ siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
+ b = appendVarint(b, uint64(siz))
+ b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic)
+ if !nerr.Merge(err) {
+ return b, err
+ }
+ b, err = valMarshaler(b, vaddr, valWireTag, deterministic)
+ if err != ErrNil && !nerr.Merge(err) { // allow nil value in map
+ return b, err
+ }
+ }
+ return b, nerr.E
+ }
+}
+
+// makeOneOfMarshaler returns the sizer and marshaler for a oneof field.
+// fi is the marshal info of the field.
+// f is the pointer to the reflect data structure of the field.
+func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) {
+ // Oneof field is an interface. We need to get the actual data type on the fly.
+ t := f.Type
+ return func(ptr pointer, _ int) int {
+ p := ptr.getInterfacePointer()
+ if p.isNil() {
+ return 0
+ }
+ v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct
+ telem := v.Type()
+ e := fi.oneofElems[telem]
+ return e.sizer(p, e.tagsize)
+ },
+ func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) {
+ p := ptr.getInterfacePointer()
+ if p.isNil() {
+ return b, nil
+ }
+ v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct
+ telem := v.Type()
+ if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() {
+ return b, errOneofHasNil
+ }
+ e := fi.oneofElems[telem]
+ return e.marshaler(b, p, e.wiretag, deterministic)
+ }
+}
+
+// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field.
+func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int {
+ m, mu := ext.extensionsRead()
+ if m == nil {
+ return 0
+ }
+ mu.Lock()
+
+ n := 0
+ for _, e := range m {
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ n += len(e.enc)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ n += ei.sizer(p, ei.tagsize)
+ }
+ mu.Unlock()
+ return n
+}
+
+// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b.
+func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {
+ m, mu := ext.extensionsRead()
+ if m == nil {
+ return b, nil
+ }
+ mu.Lock()
+ defer mu.Unlock()
+
+ var err error
+ var nerr nonFatal
+
+ // Fast-path for common cases: zero or one extensions.
+ // Don't bother sorting the keys.
+ if len(m) <= 1 {
+ for _, e := range m {
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ b = append(b, e.enc...)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
+ if !nerr.Merge(err) {
+ return b, err
+ }
+ }
+ return b, nerr.E
+ }
+
+ // Sort the keys to provide a deterministic encoding.
+ // Not sure this is required, but the old code does it.
+ keys := make([]int, 0, len(m))
+ for k := range m {
+ keys = append(keys, int(k))
+ }
+ sort.Ints(keys)
+
+ for _, k := range keys {
+ e := m[int32(k)]
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ b = append(b, e.enc...)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
+ if !nerr.Merge(err) {
+ return b, err
+ }
+ }
+ return b, nerr.E
+}
+
+// message set format is:
+// message MessageSet {
+// repeated group Item = 1 {
+// required int32 type_id = 2;
+// required string message = 3;
+// };
+// }
+
+// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field
+// in message set format (above).
+func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int {
+ m, mu := ext.extensionsRead()
+ if m == nil {
+ return 0
+ }
+ mu.Lock()
+
+ n := 0
+ for id, e := range m {
+ n += 2 // start group, end group. tag = 1 (size=1)
+ n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1)
+
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
+ siz := len(msgWithLen)
+ n += siz + 1 // message, tag = 3 (size=1)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ n += ei.sizer(p, 1) // message, tag = 3 (size=1)
+ }
+ mu.Unlock()
+ return n
+}
+
+// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above)
+// to the end of byte slice b.
+func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {
+ m, mu := ext.extensionsRead()
+ if m == nil {
+ return b, nil
+ }
+ mu.Lock()
+ defer mu.Unlock()
+
+ var err error
+ var nerr nonFatal
+
+ // Fast-path for common cases: zero or one extensions.
+ // Don't bother sorting the keys.
+ if len(m) <= 1 {
+ for id, e := range m {
+ b = append(b, 1<<3|WireStartGroup)
+ b = append(b, 2<<3|WireVarint)
+ b = appendVarint(b, uint64(id))
+
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
+ b = append(b, 3<<3|WireBytes)
+ b = append(b, msgWithLen...)
+ b = append(b, 1<<3|WireEndGroup)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
+ if !nerr.Merge(err) {
+ return b, err
+ }
+ b = append(b, 1<<3|WireEndGroup)
+ }
+ return b, nerr.E
+ }
+
+ // Sort the keys to provide a deterministic encoding.
+ keys := make([]int, 0, len(m))
+ for k := range m {
+ keys = append(keys, int(k))
+ }
+ sort.Ints(keys)
+
+ for _, id := range keys {
+ e := m[int32(id)]
+ b = append(b, 1<<3|WireStartGroup)
+ b = append(b, 2<<3|WireVarint)
+ b = appendVarint(b, uint64(id))
+
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
+ b = append(b, 3<<3|WireBytes)
+ b = append(b, msgWithLen...)
+ b = append(b, 1<<3|WireEndGroup)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
+ b = append(b, 1<<3|WireEndGroup)
+ if !nerr.Merge(err) {
+ return b, err
+ }
+ }
+ return b, nerr.E
+}
+
+// sizeV1Extensions computes the size of encoded data for a V1-API extension field.
+func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int {
+ if m == nil {
+ return 0
+ }
+
+ n := 0
+ for _, e := range m {
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ n += len(e.enc)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ n += ei.sizer(p, ei.tagsize)
+ }
+ return n
+}
+
+// appendV1Extensions marshals a V1-API extension field to the end of byte slice b.
+func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) {
+ if m == nil {
+ return b, nil
+ }
+
+ // Sort the keys to provide a deterministic encoding.
+ keys := make([]int, 0, len(m))
+ for k := range m {
+ keys = append(keys, int(k))
+ }
+ sort.Ints(keys)
+
+ var err error
+ var nerr nonFatal
+ for _, k := range keys {
+ e := m[int32(k)]
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ b = append(b, e.enc...)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
+ if !nerr.Merge(err) {
+ return b, err
+ }
+ }
+ return b, nerr.E
+}
+
+// newMarshaler is the interface representing objects that can marshal themselves.
+//
+// This exists to support protoc-gen-go generated messages.
+// The proto package will stop type-asserting to this interface in the future.
+//
+// DO NOT DEPEND ON THIS.
+type newMarshaler interface {
+ XXX_Size() int
+ XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
+}
+
+// Size returns the encoded size of a protocol buffer message.
+// This is the main entry point.
+func Size(pb Message) int {
+ if m, ok := pb.(newMarshaler); ok {
+ return m.XXX_Size()
+ }
+ if m, ok := pb.(Marshaler); ok {
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ b, _ := m.Marshal()
+ return len(b)
+ }
+ // in case somehow we didn't generate the wrapper
+ if pb == nil {
+ return 0
+ }
+ var info InternalMessageInfo
+ return info.Size(pb)
+}
+
+// Marshal takes a protocol buffer message
+// and encodes it into the wire format, returning the data.
+// This is the main entry point.
+func Marshal(pb Message) ([]byte, error) {
+ if m, ok := pb.(newMarshaler); ok {
+ siz := m.XXX_Size()
+ b := make([]byte, 0, siz)
+ return m.XXX_Marshal(b, false)
+ }
+ if m, ok := pb.(Marshaler); ok {
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ return m.Marshal()
+ }
+ // in case somehow we didn't generate the wrapper
+ if pb == nil {
+ return nil, ErrNil
+ }
+ var info InternalMessageInfo
+ siz := info.Size(pb)
+ b := make([]byte, 0, siz)
+ return info.Marshal(b, pb, false)
+}
+
+// Marshal takes a protocol buffer message
+// and encodes it into the wire format, writing the result to the
+// Buffer.
+// This is an alternative entry point. It is not necessary to use
+// a Buffer for most applications.
+func (p *Buffer) Marshal(pb Message) error {
+ var err error
+ if p.deterministic {
+ if _, ok := pb.(Marshaler); ok {
+ return fmt.Errorf("proto: deterministic not supported by the Marshal method of %T", pb)
+ }
+ }
+ if m, ok := pb.(newMarshaler); ok {
+ siz := m.XXX_Size()
+ p.grow(siz) // make sure buf has enough capacity
+ p.buf, err = m.XXX_Marshal(p.buf, p.deterministic)
+ return err
+ }
+ if m, ok := pb.(Marshaler); ok {
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ var b []byte
+ b, err = m.Marshal()
+ p.buf = append(p.buf, b...)
+ return err
+ }
+ // in case somehow we didn't generate the wrapper
+ if pb == nil {
+ return ErrNil
+ }
+ var info InternalMessageInfo
+ siz := info.Size(pb)
+ p.grow(siz) // make sure buf has enough capacity
+ p.buf, err = info.Marshal(p.buf, pb, p.deterministic)
+ return err
+}
+
+// grow grows the buffer's capacity, if necessary, to guarantee space for
+// another n bytes. After grow(n), at least n bytes can be written to the
+// buffer without another allocation.
+func (p *Buffer) grow(n int) {
+ need := len(p.buf) + n
+ if need <= cap(p.buf) {
+ return
+ }
+ newCap := len(p.buf) * 2
+ if newCap < need {
+ newCap = need
+ }
+ p.buf = append(make([]byte, 0, newCap), p.buf...)
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go b/vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go
new file mode 100644
index 000000000..997f57c1e
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go
@@ -0,0 +1,388 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// 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.
+//
+// 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.
+
+package proto
+
+import (
+ "reflect"
+ "time"
+)
+
+// makeMessageRefMarshaler differs a bit from makeMessageMarshaler
+// It marshal a message T instead of a *T
+func makeMessageRefMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ siz := u.size(ptr)
+ return siz + SizeVarint(uint64(siz)) + tagsize
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ b = appendVarint(b, wiretag)
+ siz := u.cachedsize(ptr)
+ b = appendVarint(b, uint64(siz))
+ return u.marshal(b, ptr, deterministic)
+ }
+}
+
+// makeMessageRefSliceMarshaler differs quite a lot from makeMessageSliceMarshaler
+// It marshals a slice of messages []T instead of []*T
+func makeMessageRefSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ e := elem.Interface()
+ v := toAddrPointer(&e, false)
+ siz := u.size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ var err, errreq error
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ e := elem.Interface()
+ v := toAddrPointer(&e, false)
+ b = appendVarint(b, wiretag)
+ siz := u.size(v)
+ b = appendVarint(b, uint64(siz))
+ b, err = u.marshal(b, v, deterministic)
+
+ if err != nil {
+ if _, ok := err.(*RequiredNotSetError); ok {
+ // Required field in submessage is not set.
+ // We record the error but keep going, to give a complete marshaling.
+ if errreq == nil {
+ errreq = err
+ }
+ continue
+ }
+ if err == ErrNil {
+ err = errRepeatedHasNil
+ }
+ return b, err
+ }
+ }
+
+ return b, errreq
+ }
+}
+
+func makeCustomPtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ m := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(custom)
+ siz := m.Size()
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ m := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(custom)
+ siz := m.Size()
+ buf, err := m.Marshal()
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeCustomMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ m := ptr.asPointerTo(u.typ).Interface().(custom)
+ siz := m.Size()
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ m := ptr.asPointerTo(u.typ).Interface().(custom)
+ siz := m.Size()
+ buf, err := m.Marshal()
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeTimeMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ t := ptr.asPointerTo(u.typ).Interface().(*time.Time)
+ ts, err := timestampProto(*t)
+ if err != nil {
+ return 0
+ }
+ siz := Size(ts)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ t := ptr.asPointerTo(u.typ).Interface().(*time.Time)
+ ts, err := timestampProto(*t)
+ if err != nil {
+ return nil, err
+ }
+ buf, err := Marshal(ts)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeTimePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Time)
+ ts, err := timestampProto(*t)
+ if err != nil {
+ return 0
+ }
+ siz := Size(ts)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Time)
+ ts, err := timestampProto(*t)
+ if err != nil {
+ return nil, err
+ }
+ buf, err := Marshal(ts)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeTimeSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(time.Time)
+ ts, err := timestampProto(t)
+ if err != nil {
+ return 0
+ }
+ siz := Size(ts)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(time.Time)
+ ts, err := timestampProto(t)
+ if err != nil {
+ return nil, err
+ }
+ siz := Size(ts)
+ buf, err := Marshal(ts)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeTimePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*time.Time)
+ ts, err := timestampProto(*t)
+ if err != nil {
+ return 0
+ }
+ siz := Size(ts)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*time.Time)
+ ts, err := timestampProto(*t)
+ if err != nil {
+ return nil, err
+ }
+ siz := Size(ts)
+ buf, err := Marshal(ts)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeDurationMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ d := ptr.asPointerTo(u.typ).Interface().(*time.Duration)
+ dur := durationProto(*d)
+ siz := Size(dur)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ d := ptr.asPointerTo(u.typ).Interface().(*time.Duration)
+ dur := durationProto(*d)
+ buf, err := Marshal(dur)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeDurationPtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ d := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Duration)
+ dur := durationProto(*d)
+ siz := Size(dur)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ d := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Duration)
+ dur := durationProto(*d)
+ buf, err := Marshal(dur)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeDurationSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ d := elem.Interface().(time.Duration)
+ dur := durationProto(d)
+ siz := Size(dur)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ d := elem.Interface().(time.Duration)
+ dur := durationProto(d)
+ siz := Size(dur)
+ buf, err := Marshal(dur)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeDurationPtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ d := elem.Interface().(*time.Duration)
+ dur := durationProto(*d)
+ siz := Size(dur)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ d := elem.Interface().(*time.Duration)
+ dur := durationProto(*d)
+ siz := Size(dur)
+ buf, err := Marshal(dur)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/table_merge.go b/vendor/github.com/gogo/protobuf/proto/table_merge.go
new file mode 100644
index 000000000..f520106e0
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/table_merge.go
@@ -0,0 +1,657 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// 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.
+
+package proto
+
+import (
+ "fmt"
+ "reflect"
+ "strings"
+ "sync"
+ "sync/atomic"
+)
+
+// Merge merges the src message into dst.
+// This assumes that dst and src of the same type and are non-nil.
+func (a *InternalMessageInfo) Merge(dst, src Message) {
+ mi := atomicLoadMergeInfo(&a.merge)
+ if mi == nil {
+ mi = getMergeInfo(reflect.TypeOf(dst).Elem())
+ atomicStoreMergeInfo(&a.merge, mi)
+ }
+ mi.merge(toPointer(&dst), toPointer(&src))
+}
+
+type mergeInfo struct {
+ typ reflect.Type
+
+ initialized int32 // 0: only typ is valid, 1: everything is valid
+ lock sync.Mutex
+
+ fields []mergeFieldInfo
+ unrecognized field // Offset of XXX_unrecognized
+}
+
+type mergeFieldInfo struct {
+ field field // Offset of field, guaranteed to be valid
+
+ // isPointer reports whether the value in the field is a pointer.
+ // This is true for the following situations:
+ // * Pointer to struct
+ // * Pointer to basic type (proto2 only)
+ // * Slice (first value in slice header is a pointer)
+ // * String (first value in string header is a pointer)
+ isPointer bool
+
+ // basicWidth reports the width of the field assuming that it is directly
+ // embedded in the struct (as is the case for basic types in proto3).
+ // The possible values are:
+ // 0: invalid
+ // 1: bool
+ // 4: int32, uint32, float32
+ // 8: int64, uint64, float64
+ basicWidth int
+
+ // Where dst and src are pointers to the types being merged.
+ merge func(dst, src pointer)
+}
+
+var (
+ mergeInfoMap = map[reflect.Type]*mergeInfo{}
+ mergeInfoLock sync.Mutex
+)
+
+func getMergeInfo(t reflect.Type) *mergeInfo {
+ mergeInfoLock.Lock()
+ defer mergeInfoLock.Unlock()
+ mi := mergeInfoMap[t]
+ if mi == nil {
+ mi = &mergeInfo{typ: t}
+ mergeInfoMap[t] = mi
+ }
+ return mi
+}
+
+// merge merges src into dst assuming they are both of type *mi.typ.
+func (mi *mergeInfo) merge(dst, src pointer) {
+ if dst.isNil() {
+ panic("proto: nil destination")
+ }
+ if src.isNil() {
+ return // Nothing to do.
+ }
+
+ if atomic.LoadInt32(&mi.initialized) == 0 {
+ mi.computeMergeInfo()
+ }
+
+ for _, fi := range mi.fields {
+ sfp := src.offset(fi.field)
+
+ // As an optimization, we can avoid the merge function call cost
+ // if we know for sure that the source will have no effect
+ // by checking if it is the zero value.
+ if unsafeAllowed {
+ if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string
+ continue
+ }
+ if fi.basicWidth > 0 {
+ switch {
+ case fi.basicWidth == 1 && !*sfp.toBool():
+ continue
+ case fi.basicWidth == 4 && *sfp.toUint32() == 0:
+ continue
+ case fi.basicWidth == 8 && *sfp.toUint64() == 0:
+ continue
+ }
+ }
+ }
+
+ dfp := dst.offset(fi.field)
+ fi.merge(dfp, sfp)
+ }
+
+ // TODO: Make this faster?
+ out := dst.asPointerTo(mi.typ).Elem()
+ in := src.asPointerTo(mi.typ).Elem()
+ if emIn, err := extendable(in.Addr().Interface()); err == nil {
+ emOut, _ := extendable(out.Addr().Interface())
+ mIn, muIn := emIn.extensionsRead()
+ if mIn != nil {
+ mOut := emOut.extensionsWrite()
+ muIn.Lock()
+ mergeExtension(mOut, mIn)
+ muIn.Unlock()
+ }
+ }
+
+ if mi.unrecognized.IsValid() {
+ if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 {
+ *dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...)
+ }
+ }
+}
+
+func (mi *mergeInfo) computeMergeInfo() {
+ mi.lock.Lock()
+ defer mi.lock.Unlock()
+ if mi.initialized != 0 {
+ return
+ }
+ t := mi.typ
+ n := t.NumField()
+
+ props := GetProperties(t)
+ for i := 0; i < n; i++ {
+ f := t.Field(i)
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+
+ mfi := mergeFieldInfo{field: toField(&f)}
+ tf := f.Type
+
+ // As an optimization, we can avoid the merge function call cost
+ // if we know for sure that the source will have no effect
+ // by checking if it is the zero value.
+ if unsafeAllowed {
+ switch tf.Kind() {
+ case reflect.Ptr, reflect.Slice, reflect.String:
+ // As a special case, we assume slices and strings are pointers
+ // since we know that the first field in the SliceSlice or
+ // StringHeader is a data pointer.
+ mfi.isPointer = true
+ case reflect.Bool:
+ mfi.basicWidth = 1
+ case reflect.Int32, reflect.Uint32, reflect.Float32:
+ mfi.basicWidth = 4
+ case reflect.Int64, reflect.Uint64, reflect.Float64:
+ mfi.basicWidth = 8
+ }
+ }
+
+ // Unwrap tf to get at its most basic type.
+ var isPointer, isSlice bool
+ if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
+ isSlice = true
+ tf = tf.Elem()
+ }
+ if tf.Kind() == reflect.Ptr {
+ isPointer = true
+ tf = tf.Elem()
+ }
+ if isPointer && isSlice && tf.Kind() != reflect.Struct {
+ panic("both pointer and slice for basic type in " + tf.Name())
+ }
+
+ switch tf.Kind() {
+ case reflect.Int32:
+ switch {
+ case isSlice: // E.g., []int32
+ mfi.merge = func(dst, src pointer) {
+ // NOTE: toInt32Slice is not defined (see pointer_reflect.go).
+ /*
+ sfsp := src.toInt32Slice()
+ if *sfsp != nil {
+ dfsp := dst.toInt32Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []int64{}
+ }
+ }
+ */
+ sfs := src.getInt32Slice()
+ if sfs != nil {
+ dfs := dst.getInt32Slice()
+ dfs = append(dfs, sfs...)
+ if dfs == nil {
+ dfs = []int32{}
+ }
+ dst.setInt32Slice(dfs)
+ }
+ }
+ case isPointer: // E.g., *int32
+ mfi.merge = func(dst, src pointer) {
+ // NOTE: toInt32Ptr is not defined (see pointer_reflect.go).
+ /*
+ sfpp := src.toInt32Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toInt32Ptr()
+ if *dfpp == nil {
+ *dfpp = Int32(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ */
+ sfp := src.getInt32Ptr()
+ if sfp != nil {
+ dfp := dst.getInt32Ptr()
+ if dfp == nil {
+ dst.setInt32Ptr(*sfp)
+ } else {
+ *dfp = *sfp
+ }
+ }
+ }
+ default: // E.g., int32
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toInt32(); v != 0 {
+ *dst.toInt32() = v
+ }
+ }
+ }
+ case reflect.Int64:
+ switch {
+ case isSlice: // E.g., []int64
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toInt64Slice()
+ if *sfsp != nil {
+ dfsp := dst.toInt64Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []int64{}
+ }
+ }
+ }
+ case isPointer: // E.g., *int64
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toInt64Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toInt64Ptr()
+ if *dfpp == nil {
+ *dfpp = Int64(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., int64
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toInt64(); v != 0 {
+ *dst.toInt64() = v
+ }
+ }
+ }
+ case reflect.Uint32:
+ switch {
+ case isSlice: // E.g., []uint32
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toUint32Slice()
+ if *sfsp != nil {
+ dfsp := dst.toUint32Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []uint32{}
+ }
+ }
+ }
+ case isPointer: // E.g., *uint32
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toUint32Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toUint32Ptr()
+ if *dfpp == nil {
+ *dfpp = Uint32(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., uint32
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toUint32(); v != 0 {
+ *dst.toUint32() = v
+ }
+ }
+ }
+ case reflect.Uint64:
+ switch {
+ case isSlice: // E.g., []uint64
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toUint64Slice()
+ if *sfsp != nil {
+ dfsp := dst.toUint64Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []uint64{}
+ }
+ }
+ }
+ case isPointer: // E.g., *uint64
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toUint64Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toUint64Ptr()
+ if *dfpp == nil {
+ *dfpp = Uint64(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., uint64
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toUint64(); v != 0 {
+ *dst.toUint64() = v
+ }
+ }
+ }
+ case reflect.Float32:
+ switch {
+ case isSlice: // E.g., []float32
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toFloat32Slice()
+ if *sfsp != nil {
+ dfsp := dst.toFloat32Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []float32{}
+ }
+ }
+ }
+ case isPointer: // E.g., *float32
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toFloat32Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toFloat32Ptr()
+ if *dfpp == nil {
+ *dfpp = Float32(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., float32
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toFloat32(); v != 0 {
+ *dst.toFloat32() = v
+ }
+ }
+ }
+ case reflect.Float64:
+ switch {
+ case isSlice: // E.g., []float64
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toFloat64Slice()
+ if *sfsp != nil {
+ dfsp := dst.toFloat64Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []float64{}
+ }
+ }
+ }
+ case isPointer: // E.g., *float64
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toFloat64Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toFloat64Ptr()
+ if *dfpp == nil {
+ *dfpp = Float64(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., float64
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toFloat64(); v != 0 {
+ *dst.toFloat64() = v
+ }
+ }
+ }
+ case reflect.Bool:
+ switch {
+ case isSlice: // E.g., []bool
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toBoolSlice()
+ if *sfsp != nil {
+ dfsp := dst.toBoolSlice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []bool{}
+ }
+ }
+ }
+ case isPointer: // E.g., *bool
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toBoolPtr()
+ if *sfpp != nil {
+ dfpp := dst.toBoolPtr()
+ if *dfpp == nil {
+ *dfpp = Bool(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., bool
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toBool(); v {
+ *dst.toBool() = v
+ }
+ }
+ }
+ case reflect.String:
+ switch {
+ case isSlice: // E.g., []string
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toStringSlice()
+ if *sfsp != nil {
+ dfsp := dst.toStringSlice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []string{}
+ }
+ }
+ }
+ case isPointer: // E.g., *string
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toStringPtr()
+ if *sfpp != nil {
+ dfpp := dst.toStringPtr()
+ if *dfpp == nil {
+ *dfpp = String(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., string
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toString(); v != "" {
+ *dst.toString() = v
+ }
+ }
+ }
+ case reflect.Slice:
+ isProto3 := props.Prop[i].proto3
+ switch {
+ case isPointer:
+ panic("bad pointer in byte slice case in " + tf.Name())
+ case tf.Elem().Kind() != reflect.Uint8:
+ panic("bad element kind in byte slice case in " + tf.Name())
+ case isSlice: // E.g., [][]byte
+ mfi.merge = func(dst, src pointer) {
+ sbsp := src.toBytesSlice()
+ if *sbsp != nil {
+ dbsp := dst.toBytesSlice()
+ for _, sb := range *sbsp {
+ if sb == nil {
+ *dbsp = append(*dbsp, nil)
+ } else {
+ *dbsp = append(*dbsp, append([]byte{}, sb...))
+ }
+ }
+ if *dbsp == nil {
+ *dbsp = [][]byte{}
+ }
+ }
+ }
+ default: // E.g., []byte
+ mfi.merge = func(dst, src pointer) {
+ sbp := src.toBytes()
+ if *sbp != nil {
+ dbp := dst.toBytes()
+ if !isProto3 || len(*sbp) > 0 {
+ *dbp = append([]byte{}, *sbp...)
+ }
+ }
+ }
+ }
+ case reflect.Struct:
+ switch {
+ case !isPointer:
+ mergeInfo := getMergeInfo(tf)
+ mfi.merge = func(dst, src pointer) {
+ mergeInfo.merge(dst, src)
+ }
+ case isSlice: // E.g., []*pb.T
+ mergeInfo := getMergeInfo(tf)
+ mfi.merge = func(dst, src pointer) {
+ sps := src.getPointerSlice()
+ if sps != nil {
+ dps := dst.getPointerSlice()
+ for _, sp := range sps {
+ var dp pointer
+ if !sp.isNil() {
+ dp = valToPointer(reflect.New(tf))
+ mergeInfo.merge(dp, sp)
+ }
+ dps = append(dps, dp)
+ }
+ if dps == nil {
+ dps = []pointer{}
+ }
+ dst.setPointerSlice(dps)
+ }
+ }
+ default: // E.g., *pb.T
+ mergeInfo := getMergeInfo(tf)
+ mfi.merge = func(dst, src pointer) {
+ sp := src.getPointer()
+ if !sp.isNil() {
+ dp := dst.getPointer()
+ if dp.isNil() {
+ dp = valToPointer(reflect.New(tf))
+ dst.setPointer(dp)
+ }
+ mergeInfo.merge(dp, sp)
+ }
+ }
+ }
+ case reflect.Map:
+ switch {
+ case isPointer || isSlice:
+ panic("bad pointer or slice in map case in " + tf.Name())
+ default: // E.g., map[K]V
+ mfi.merge = func(dst, src pointer) {
+ sm := src.asPointerTo(tf).Elem()
+ if sm.Len() == 0 {
+ return
+ }
+ dm := dst.asPointerTo(tf).Elem()
+ if dm.IsNil() {
+ dm.Set(reflect.MakeMap(tf))
+ }
+
+ switch tf.Elem().Kind() {
+ case reflect.Ptr: // Proto struct (e.g., *T)
+ for _, key := range sm.MapKeys() {
+ val := sm.MapIndex(key)
+ val = reflect.ValueOf(Clone(val.Interface().(Message)))
+ dm.SetMapIndex(key, val)
+ }
+ case reflect.Slice: // E.g. Bytes type (e.g., []byte)
+ for _, key := range sm.MapKeys() {
+ val := sm.MapIndex(key)
+ val = reflect.ValueOf(append([]byte{}, val.Bytes()...))
+ dm.SetMapIndex(key, val)
+ }
+ default: // Basic type (e.g., string)
+ for _, key := range sm.MapKeys() {
+ val := sm.MapIndex(key)
+ dm.SetMapIndex(key, val)
+ }
+ }
+ }
+ }
+ case reflect.Interface:
+ // Must be oneof field.
+ switch {
+ case isPointer || isSlice:
+ panic("bad pointer or slice in interface case in " + tf.Name())
+ default: // E.g., interface{}
+ // TODO: Make this faster?
+ mfi.merge = func(dst, src pointer) {
+ su := src.asPointerTo(tf).Elem()
+ if !su.IsNil() {
+ du := dst.asPointerTo(tf).Elem()
+ typ := su.Elem().Type()
+ if du.IsNil() || du.Elem().Type() != typ {
+ du.Set(reflect.New(typ.Elem())) // Initialize interface if empty
+ }
+ sv := su.Elem().Elem().Field(0)
+ if sv.Kind() == reflect.Ptr && sv.IsNil() {
+ return
+ }
+ dv := du.Elem().Elem().Field(0)
+ if dv.Kind() == reflect.Ptr && dv.IsNil() {
+ dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty
+ }
+ switch sv.Type().Kind() {
+ case reflect.Ptr: // Proto struct (e.g., *T)
+ Merge(dv.Interface().(Message), sv.Interface().(Message))
+ case reflect.Slice: // E.g. Bytes type (e.g., []byte)
+ dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...)))
+ default: // Basic type (e.g., string)
+ dv.Set(sv)
+ }
+ }
+ }
+ }
+ default:
+ panic(fmt.Sprintf("merger not found for type:%s", tf))
+ }
+ mi.fields = append(mi.fields, mfi)
+ }
+
+ mi.unrecognized = invalidField
+ if f, ok := t.FieldByName("XXX_unrecognized"); ok {
+ if f.Type != reflect.TypeOf([]byte{}) {
+ panic("expected XXX_unrecognized to be of type []byte")
+ }
+ mi.unrecognized = toField(&f)
+ }
+
+ atomic.StoreInt32(&mi.initialized, 1)
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go b/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go
new file mode 100644
index 000000000..e6b15c76c
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go
@@ -0,0 +1,2245 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// 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.
+
+package proto
+
+import (
+ "errors"
+ "fmt"
+ "io"
+ "math"
+ "reflect"
+ "strconv"
+ "strings"
+ "sync"
+ "sync/atomic"
+ "unicode/utf8"
+)
+
+// Unmarshal is the entry point from the generated .pb.go files.
+// This function is not intended to be used by non-generated code.
+// This function is not subject to any compatibility guarantee.
+// msg contains a pointer to a protocol buffer struct.
+// b is the data to be unmarshaled into the protocol buffer.
+// a is a pointer to a place to store cached unmarshal information.
+func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error {
+ // Load the unmarshal information for this message type.
+ // The atomic load ensures memory consistency.
+ u := atomicLoadUnmarshalInfo(&a.unmarshal)
+ if u == nil {
+ // Slow path: find unmarshal info for msg, update a with it.
+ u = getUnmarshalInfo(reflect.TypeOf(msg).Elem())
+ atomicStoreUnmarshalInfo(&a.unmarshal, u)
+ }
+ // Then do the unmarshaling.
+ err := u.unmarshal(toPointer(&msg), b)
+ return err
+}
+
+type unmarshalInfo struct {
+ typ reflect.Type // type of the protobuf struct
+
+ // 0 = only typ field is initialized
+ // 1 = completely initialized
+ initialized int32
+ lock sync.Mutex // prevents double initialization
+ dense []unmarshalFieldInfo // fields indexed by tag #
+ sparse map[uint64]unmarshalFieldInfo // fields indexed by tag #
+ reqFields []string // names of required fields
+ reqMask uint64 // 1<<len(reqFields)-1
+ unrecognized field // offset of []byte to put unrecognized data (or invalidField if we should throw it away)
+ extensions field // offset of extensions field (of type proto.XXX_InternalExtensions), or invalidField if it does not exist
+ oldExtensions field // offset of old-form extensions field (of type map[int]Extension)
+ extensionRanges []ExtensionRange // if non-nil, implies extensions field is valid
+ isMessageSet bool // if true, implies extensions field is valid
+
+ bytesExtensions field // offset of XXX_extensions with type []byte
+}
+
+// An unmarshaler takes a stream of bytes and a pointer to a field of a message.
+// It decodes the field, stores it at f, and returns the unused bytes.
+// w is the wire encoding.
+// b is the data after the tag and wire encoding have been read.
+type unmarshaler func(b []byte, f pointer, w int) ([]byte, error)
+
+type unmarshalFieldInfo struct {
+ // location of the field in the proto message structure.
+ field field
+
+ // function to unmarshal the data for the field.
+ unmarshal unmarshaler
+
+ // if a required field, contains a single set bit at this field's index in the required field list.
+ reqMask uint64
+
+ name string // name of the field, for error reporting
+}
+
+var (
+ unmarshalInfoMap = map[reflect.Type]*unmarshalInfo{}
+ unmarshalInfoLock sync.Mutex
+)
+
+// getUnmarshalInfo returns the data structure which can be
+// subsequently used to unmarshal a message of the given type.
+// t is the type of the message (note: not pointer to message).
+func getUnmarshalInfo(t reflect.Type) *unmarshalInfo {
+ // It would be correct to return a new unmarshalInfo
+ // unconditionally. We would end up allocating one
+ // per occurrence of that type as a message or submessage.
+ // We use a cache here just to reduce memory usage.
+ unmarshalInfoLock.Lock()
+ defer unmarshalInfoLock.Unlock()
+ u := unmarshalInfoMap[t]
+ if u == nil {
+ u = &unmarshalInfo{typ: t}
+ // Note: we just set the type here. The rest of the fields
+ // will be initialized on first use.
+ unmarshalInfoMap[t] = u
+ }
+ return u
+}
+
+// unmarshal does the main work of unmarshaling a message.
+// u provides type information used to unmarshal the message.
+// m is a pointer to a protocol buffer message.
+// b is a byte stream to unmarshal into m.
+// This is top routine used when recursively unmarshaling submessages.
+func (u *unmarshalInfo) unmarshal(m pointer, b []byte) error {
+ if atomic.LoadInt32(&u.initialized) == 0 {
+ u.computeUnmarshalInfo()
+ }
+ if u.isMessageSet {
+ return UnmarshalMessageSet(b, m.offset(u.extensions).toExtensions())
+ }
+ var reqMask uint64 // bitmask of required fields we've seen.
+ var errLater error
+ for len(b) > 0 {
+ // Read tag and wire type.
+ // Special case 1 and 2 byte varints.
+ var x uint64
+ if b[0] < 128 {
+ x = uint64(b[0])
+ b = b[1:]
+ } else if len(b) >= 2 && b[1] < 128 {
+ x = uint64(b[0]&0x7f) + uint64(b[1])<<7
+ b = b[2:]
+ } else {
+ var n int
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ }
+ tag := x >> 3
+ wire := int(x) & 7
+
+ // Dispatch on the tag to one of the unmarshal* functions below.
+ var f unmarshalFieldInfo
+ if tag < uint64(len(u.dense)) {
+ f = u.dense[tag]
+ } else {
+ f = u.sparse[tag]
+ }
+ if fn := f.unmarshal; fn != nil {
+ var err error
+ b, err = fn(b, m.offset(f.field), wire)
+ if err == nil {
+ reqMask |= f.reqMask
+ continue
+ }
+ if r, ok := err.(*RequiredNotSetError); ok {
+ // Remember this error, but keep parsing. We need to produce
+ // a full parse even if a required field is missing.
+ if errLater == nil {
+ errLater = r
+ }
+ reqMask |= f.reqMask
+ continue
+ }
+ if err != errInternalBadWireType {
+ if err == errInvalidUTF8 {
+ if errLater == nil {
+ fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name
+ errLater = &invalidUTF8Error{fullName}
+ }
+ continue
+ }
+ return err
+ }
+ // Fragments with bad wire type are treated as unknown fields.
+ }
+
+ // Unknown tag.
+ if !u.unrecognized.IsValid() {
+ // Don't keep unrecognized data; just skip it.
+ var err error
+ b, err = skipField(b, wire)
+ if err != nil {
+ return err
+ }
+ continue
+ }
+ // Keep unrecognized data around.
+ // maybe in extensions, maybe in the unrecognized field.
+ z := m.offset(u.unrecognized).toBytes()
+ var emap map[int32]Extension
+ var e Extension
+ for _, r := range u.extensionRanges {
+ if uint64(r.Start) <= tag && tag <= uint64(r.End) {
+ if u.extensions.IsValid() {
+ mp := m.offset(u.extensions).toExtensions()
+ emap = mp.extensionsWrite()
+ e = emap[int32(tag)]
+ z = &e.enc
+ break
+ }
+ if u.oldExtensions.IsValid() {
+ p := m.offset(u.oldExtensions).toOldExtensions()
+ emap = *p
+ if emap == nil {
+ emap = map[int32]Extension{}
+ *p = emap
+ }
+ e = emap[int32(tag)]
+ z = &e.enc
+ break
+ }
+ if u.bytesExtensions.IsValid() {
+ z = m.offset(u.bytesExtensions).toBytes()
+ break
+ }
+ panic("no extensions field available")
+ }
+ }
+ // Use wire type to skip data.
+ var err error
+ b0 := b
+ b, err = skipField(b, wire)
+ if err != nil {
+ return err
+ }
+ *z = encodeVarint(*z, tag<<3|uint64(wire))
+ *z = append(*z, b0[:len(b0)-len(b)]...)
+
+ if emap != nil {
+ emap[int32(tag)] = e
+ }
+ }
+ if reqMask != u.reqMask && errLater == nil {
+ // A required field of this message is missing.
+ for _, n := range u.reqFields {
+ if reqMask&1 == 0 {
+ errLater = &RequiredNotSetError{n}
+ }
+ reqMask >>= 1
+ }
+ }
+ return errLater
+}
+
+// computeUnmarshalInfo fills in u with information for use
+// in unmarshaling protocol buffers of type u.typ.
+func (u *unmarshalInfo) computeUnmarshalInfo() {
+ u.lock.Lock()
+ defer u.lock.Unlock()
+ if u.initialized != 0 {
+ return
+ }
+ t := u.typ
+ n := t.NumField()
+
+ // Set up the "not found" value for the unrecognized byte buffer.
+ // This is the default for proto3.
+ u.unrecognized = invalidField
+ u.extensions = invalidField
+ u.oldExtensions = invalidField
+ u.bytesExtensions = invalidField
+
+ // List of the generated type and offset for each oneof field.
+ type oneofField struct {
+ ityp reflect.Type // interface type of oneof field
+ field field // offset in containing message
+ }
+ var oneofFields []oneofField
+
+ for i := 0; i < n; i++ {
+ f := t.Field(i)
+ if f.Name == "XXX_unrecognized" {
+ // The byte slice used to hold unrecognized input is special.
+ if f.Type != reflect.TypeOf(([]byte)(nil)) {
+ panic("bad type for XXX_unrecognized field: " + f.Type.Name())
+ }
+ u.unrecognized = toField(&f)
+ continue
+ }
+ if f.Name == "XXX_InternalExtensions" {
+ // Ditto here.
+ if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) {
+ panic("bad type for XXX_InternalExtensions field: " + f.Type.Name())
+ }
+ u.extensions = toField(&f)
+ if f.Tag.Get("protobuf_messageset") == "1" {
+ u.isMessageSet = true
+ }
+ continue
+ }
+ if f.Name == "XXX_extensions" {
+ // An older form of the extensions field.
+ if f.Type == reflect.TypeOf((map[int32]Extension)(nil)) {
+ u.oldExtensions = toField(&f)
+ continue
+ } else if f.Type == reflect.TypeOf(([]byte)(nil)) {
+ u.bytesExtensions = toField(&f)
+ continue
+ }
+ panic("bad type for XXX_extensions field: " + f.Type.Name())
+ }
+ if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" {
+ continue
+ }
+
+ oneof := f.Tag.Get("protobuf_oneof")
+ if oneof != "" {
+ oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)})
+ // The rest of oneof processing happens below.
+ continue
+ }
+
+ tags := f.Tag.Get("protobuf")
+ tagArray := strings.Split(tags, ",")
+ if len(tagArray) < 2 {
+ panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags)
+ }
+ tag, err := strconv.Atoi(tagArray[1])
+ if err != nil {
+ panic("protobuf tag field not an integer: " + tagArray[1])
+ }
+
+ name := ""
+ for _, tag := range tagArray[3:] {
+ if strings.HasPrefix(tag, "name=") {
+ name = tag[5:]
+ }
+ }
+
+ // Extract unmarshaling function from the field (its type and tags).
+ unmarshal := fieldUnmarshaler(&f)
+
+ // Required field?
+ var reqMask uint64
+ if tagArray[2] == "req" {
+ bit := len(u.reqFields)
+ u.reqFields = append(u.reqFields, name)
+ reqMask = uint64(1) << uint(bit)
+ // TODO: if we have more than 64 required fields, we end up
+ // not verifying that all required fields are present.
+ // Fix this, perhaps using a count of required fields?
+ }
+
+ // Store the info in the correct slot in the message.
+ u.setTag(tag, toField(&f), unmarshal, reqMask, name)
+ }
+
+ // Find any types associated with oneof fields.
+ // TODO: XXX_OneofFuncs returns more info than we need. Get rid of some of it?
+ fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("XXX_OneofFuncs")
+ // gogo: len(oneofFields) > 0 is needed for embedded oneof messages, without a marshaler and unmarshaler
+ if fn.IsValid() && len(oneofFields) > 0 {
+ res := fn.Call(nil)[3] // last return value from XXX_OneofFuncs: []interface{}
+ for i := res.Len() - 1; i >= 0; i-- {
+ v := res.Index(i) // interface{}
+ tptr := reflect.ValueOf(v.Interface()).Type() // *Msg_X
+ typ := tptr.Elem() // Msg_X
+
+ f := typ.Field(0) // oneof implementers have one field
+ baseUnmarshal := fieldUnmarshaler(&f)
+ tags := strings.Split(f.Tag.Get("protobuf"), ",")
+ fieldNum, err := strconv.Atoi(tags[1])
+ if err != nil {
+ panic("protobuf tag field not an integer: " + tags[1])
+ }
+ var name string
+ for _, tag := range tags {
+ if strings.HasPrefix(tag, "name=") {
+ name = strings.TrimPrefix(tag, "name=")
+ break
+ }
+ }
+
+ // Find the oneof field that this struct implements.
+ // Might take O(n^2) to process all of the oneofs, but who cares.
+ for _, of := range oneofFields {
+ if tptr.Implements(of.ityp) {
+ // We have found the corresponding interface for this struct.
+ // That lets us know where this struct should be stored
+ // when we encounter it during unmarshaling.
+ unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal)
+ u.setTag(fieldNum, of.field, unmarshal, 0, name)
+ }
+ }
+ }
+ }
+
+ // Get extension ranges, if any.
+ fn = reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray")
+ if fn.IsValid() {
+ if !u.extensions.IsValid() && !u.oldExtensions.IsValid() && !u.bytesExtensions.IsValid() {
+ panic("a message with extensions, but no extensions field in " + t.Name())
+ }
+ u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange)
+ }
+
+ // Explicitly disallow tag 0. This will ensure we flag an error
+ // when decoding a buffer of all zeros. Without this code, we
+ // would decode and skip an all-zero buffer of even length.
+ // [0 0] is [tag=0/wiretype=varint varint-encoded-0].
+ u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) {
+ return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w)
+ }, 0, "")
+
+ // Set mask for required field check.
+ u.reqMask = uint64(1)<<uint(len(u.reqFields)) - 1
+
+ atomic.StoreInt32(&u.initialized, 1)
+}
+
+// setTag stores the unmarshal information for the given tag.
+// tag = tag # for field
+// field/unmarshal = unmarshal info for that field.
+// reqMask = if required, bitmask for field position in required field list. 0 otherwise.
+// name = short name of the field.
+func (u *unmarshalInfo) setTag(tag int, field field, unmarshal unmarshaler, reqMask uint64, name string) {
+ i := unmarshalFieldInfo{field: field, unmarshal: unmarshal, reqMask: reqMask, name: name}
+ n := u.typ.NumField()
+ if tag >= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here?
+ for len(u.dense) <= tag {
+ u.dense = append(u.dense, unmarshalFieldInfo{})
+ }
+ u.dense[tag] = i
+ return
+ }
+ if u.sparse == nil {
+ u.sparse = map[uint64]unmarshalFieldInfo{}
+ }
+ u.sparse[uint64(tag)] = i
+}
+
+// fieldUnmarshaler returns an unmarshaler for the given field.
+func fieldUnmarshaler(f *reflect.StructField) unmarshaler {
+ if f.Type.Kind() == reflect.Map {
+ return makeUnmarshalMap(f)
+ }
+ return typeUnmarshaler(f.Type, f.Tag.Get("protobuf"))
+}
+
+// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair.
+func typeUnmarshaler(t reflect.Type, tags string) unmarshaler {
+ tagArray := strings.Split(tags, ",")
+ encoding := tagArray[0]
+ name := "unknown"
+ ctype := false
+ isTime := false
+ isDuration := false
+ isWktPointer := false
+ proto3 := false
+ validateUTF8 := true
+ for _, tag := range tagArray[3:] {
+ if strings.HasPrefix(tag, "name=") {
+ name = tag[5:]
+ }
+ if tag == "proto3" {
+ proto3 = true
+ }
+ if strings.HasPrefix(tag, "customtype=") {
+ ctype = true
+ }
+ if tag == "stdtime" {
+ isTime = true
+ }
+ if tag == "stdduration" {
+ isDuration = true
+ }
+ if tag == "wktptr" {
+ isWktPointer = true
+ }
+ }
+ validateUTF8 = validateUTF8 && proto3
+
+ // Figure out packaging (pointer, slice, or both)
+ slice := false
+ pointer := false
+ if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
+ slice = true
+ t = t.Elem()
+ }
+ if t.Kind() == reflect.Ptr {
+ pointer = true
+ t = t.Elem()
+ }
+
+ if ctype {
+ if reflect.PtrTo(t).Implements(customType) {
+ if slice {
+ return makeUnmarshalCustomSlice(getUnmarshalInfo(t), name)
+ }
+ if pointer {
+ return makeUnmarshalCustomPtr(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalCustom(getUnmarshalInfo(t), name)
+ } else {
+ panic(fmt.Sprintf("custom type: type: %v, does not implement the proto.custom interface", t))
+ }
+ }
+
+ if isTime {
+ if pointer {
+ if slice {
+ return makeUnmarshalTimePtrSlice(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalTimePtr(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeUnmarshalTimeSlice(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalTime(getUnmarshalInfo(t), name)
+ }
+
+ if isDuration {
+ if pointer {
+ if slice {
+ return makeUnmarshalDurationPtrSlice(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalDurationPtr(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeUnmarshalDurationSlice(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalDuration(getUnmarshalInfo(t), name)
+ }
+
+ if isWktPointer {
+ switch t.Kind() {
+ case reflect.Float64:
+ if pointer {
+ if slice {
+ return makeStdDoubleValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdDoubleValuePtrUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeStdDoubleValueSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdDoubleValueUnmarshaler(getUnmarshalInfo(t), name)
+ case reflect.Float32:
+ if pointer {
+ if slice {
+ return makeStdFloatValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdFloatValuePtrUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeStdFloatValueSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdFloatValueUnmarshaler(getUnmarshalInfo(t), name)
+ case reflect.Int64:
+ if pointer {
+ if slice {
+ return makeStdInt64ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdInt64ValuePtrUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeStdInt64ValueSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdInt64ValueUnmarshaler(getUnmarshalInfo(t), name)
+ case reflect.Uint64:
+ if pointer {
+ if slice {
+ return makeStdUInt64ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdUInt64ValuePtrUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeStdUInt64ValueSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdUInt64ValueUnmarshaler(getUnmarshalInfo(t), name)
+ case reflect.Int32:
+ if pointer {
+ if slice {
+ return makeStdInt32ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdInt32ValuePtrUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeStdInt32ValueSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdInt32ValueUnmarshaler(getUnmarshalInfo(t), name)
+ case reflect.Uint32:
+ if pointer {
+ if slice {
+ return makeStdUInt32ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdUInt32ValuePtrUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeStdUInt32ValueSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdUInt32ValueUnmarshaler(getUnmarshalInfo(t), name)
+ case reflect.Bool:
+ if pointer {
+ if slice {
+ return makeStdBoolValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdBoolValuePtrUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeStdBoolValueSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdBoolValueUnmarshaler(getUnmarshalInfo(t), name)
+ case reflect.String:
+ if pointer {
+ if slice {
+ return makeStdStringValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdStringValuePtrUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeStdStringValueSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdStringValueUnmarshaler(getUnmarshalInfo(t), name)
+ case uint8SliceType:
+ if pointer {
+ if slice {
+ return makeStdBytesValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdBytesValuePtrUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ if slice {
+ return makeStdBytesValueSliceUnmarshaler(getUnmarshalInfo(t), name)
+ }
+ return makeStdBytesValueUnmarshaler(getUnmarshalInfo(t), name)
+ default:
+ panic(fmt.Sprintf("unknown wktpointer type %#v", t))
+ }
+ }
+
+ // We'll never have both pointer and slice for basic types.
+ if pointer && slice && t.Kind() != reflect.Struct {
+ panic("both pointer and slice for basic type in " + t.Name())
+ }
+
+ switch t.Kind() {
+ case reflect.Bool:
+ if pointer {
+ return unmarshalBoolPtr
+ }
+ if slice {
+ return unmarshalBoolSlice
+ }
+ return unmarshalBoolValue
+ case reflect.Int32:
+ switch encoding {
+ case "fixed32":
+ if pointer {
+ return unmarshalFixedS32Ptr
+ }
+ if slice {
+ return unmarshalFixedS32Slice
+ }
+ return unmarshalFixedS32Value
+ case "varint":
+ // this could be int32 or enum
+ if pointer {
+ return unmarshalInt32Ptr
+ }
+ if slice {
+ return unmarshalInt32Slice
+ }
+ return unmarshalInt32Value
+ case "zigzag32":
+ if pointer {
+ return unmarshalSint32Ptr
+ }
+ if slice {
+ return unmarshalSint32Slice
+ }
+ return unmarshalSint32Value
+ }
+ case reflect.Int64:
+ switch encoding {
+ case "fixed64":
+ if pointer {
+ return unmarshalFixedS64Ptr
+ }
+ if slice {
+ return unmarshalFixedS64Slice
+ }
+ return unmarshalFixedS64Value
+ case "varint":
+ if pointer {
+ return unmarshalInt64Ptr
+ }
+ if slice {
+ return unmarshalInt64Slice
+ }
+ return unmarshalInt64Value
+ case "zigzag64":
+ if pointer {
+ return unmarshalSint64Ptr
+ }
+ if slice {
+ return unmarshalSint64Slice
+ }
+ return unmarshalSint64Value
+ }
+ case reflect.Uint32:
+ switch encoding {
+ case "fixed32":
+ if pointer {
+ return unmarshalFixed32Ptr
+ }
+ if slice {
+ return unmarshalFixed32Slice
+ }
+ return unmarshalFixed32Value
+ case "varint":
+ if pointer {
+ return unmarshalUint32Ptr
+ }
+ if slice {
+ return unmarshalUint32Slice
+ }
+ return unmarshalUint32Value
+ }
+ case reflect.Uint64:
+ switch encoding {
+ case "fixed64":
+ if pointer {
+ return unmarshalFixed64Ptr
+ }
+ if slice {
+ return unmarshalFixed64Slice
+ }
+ return unmarshalFixed64Value
+ case "varint":
+ if pointer {
+ return unmarshalUint64Ptr
+ }
+ if slice {
+ return unmarshalUint64Slice
+ }
+ return unmarshalUint64Value
+ }
+ case reflect.Float32:
+ if pointer {
+ return unmarshalFloat32Ptr
+ }
+ if slice {
+ return unmarshalFloat32Slice
+ }
+ return unmarshalFloat32Value
+ case reflect.Float64:
+ if pointer {
+ return unmarshalFloat64Ptr
+ }
+ if slice {
+ return unmarshalFloat64Slice
+ }
+ return unmarshalFloat64Value
+ case reflect.Map:
+ panic("map type in typeUnmarshaler in " + t.Name())
+ case reflect.Slice:
+ if pointer {
+ panic("bad pointer in slice case in " + t.Name())
+ }
+ if slice {
+ return unmarshalBytesSlice
+ }
+ return unmarshalBytesValue
+ case reflect.String:
+ if validateUTF8 {
+ if pointer {
+ return unmarshalUTF8StringPtr
+ }
+ if slice {
+ return unmarshalUTF8StringSlice
+ }
+ return unmarshalUTF8StringValue
+ }
+ if pointer {
+ return unmarshalStringPtr
+ }
+ if slice {
+ return unmarshalStringSlice
+ }
+ return unmarshalStringValue
+ case reflect.Struct:
+ // message or group field
+ if !pointer {
+ switch encoding {
+ case "bytes":
+ if slice {
+ return makeUnmarshalMessageSlice(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalMessage(getUnmarshalInfo(t), name)
+ }
+ }
+ switch encoding {
+ case "bytes":
+ if slice {
+ return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name)
+ case "group":
+ if slice {
+ return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name)
+ }
+ }
+ panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding))
+}
+
+// Below are all the unmarshalers for individual fields of various types.
+
+func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x)
+ *f.toInt64() = v
+ return b, nil
+}
+
+func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x)
+ *f.toInt64Ptr() = &v
+ return b, nil
+}
+
+func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x)
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x)
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ return b, nil
+}
+
+func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x>>1) ^ int64(x)<<63>>63
+ *f.toInt64() = v
+ return b, nil
+}
+
+func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x>>1) ^ int64(x)<<63>>63
+ *f.toInt64Ptr() = &v
+ return b, nil
+}
+
+func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x>>1) ^ int64(x)<<63>>63
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x>>1) ^ int64(x)<<63>>63
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ return b, nil
+}
+
+func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint64(x)
+ *f.toUint64() = v
+ return b, nil
+}
+
+func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint64(x)
+ *f.toUint64Ptr() = &v
+ return b, nil
+}
+
+func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint64(x)
+ s := f.toUint64Slice()
+ *s = append(*s, v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint64(x)
+ s := f.toUint64Slice()
+ *s = append(*s, v)
+ return b, nil
+}
+
+func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x)
+ *f.toInt32() = v
+ return b, nil
+}
+
+func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x)
+ f.setInt32Ptr(v)
+ return b, nil
+}
+
+func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x)
+ f.appendInt32Slice(v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x)
+ f.appendInt32Slice(v)
+ return b, nil
+}
+
+func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x>>1) ^ int32(x)<<31>>31
+ *f.toInt32() = v
+ return b, nil
+}
+
+func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x>>1) ^ int32(x)<<31>>31
+ f.setInt32Ptr(v)
+ return b, nil
+}
+
+func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x>>1) ^ int32(x)<<31>>31
+ f.appendInt32Slice(v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x>>1) ^ int32(x)<<31>>31
+ f.appendInt32Slice(v)
+ return b, nil
+}
+
+func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint32(x)
+ *f.toUint32() = v
+ return b, nil
+}
+
+func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint32(x)
+ *f.toUint32Ptr() = &v
+ return b, nil
+}
+
+func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint32(x)
+ s := f.toUint32Slice()
+ *s = append(*s, v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint32(x)
+ s := f.toUint32Slice()
+ *s = append(*s, v)
+ return b, nil
+}
+
+func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+ *f.toUint64() = v
+ return b[8:], nil
+}
+
+func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+ *f.toUint64Ptr() = &v
+ return b[8:], nil
+}
+
+func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+ s := f.toUint64Slice()
+ *s = append(*s, v)
+ b = b[8:]
+ }
+ return res, nil
+ }
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+ s := f.toUint64Slice()
+ *s = append(*s, v)
+ return b[8:], nil
+}
+
+func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+ *f.toInt64() = v
+ return b[8:], nil
+}
+
+func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+ *f.toInt64Ptr() = &v
+ return b[8:], nil
+}
+
+func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ b = b[8:]
+ }
+ return res, nil
+ }
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ return b[8:], nil
+}
+
+func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ *f.toUint32() = v
+ return b[4:], nil
+}
+
+func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ *f.toUint32Ptr() = &v
+ return b[4:], nil
+}
+
+func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ s := f.toUint32Slice()
+ *s = append(*s, v)
+ b = b[4:]
+ }
+ return res, nil
+ }
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ s := f.toUint32Slice()
+ *s = append(*s, v)
+ return b[4:], nil
+}
+
+func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+ *f.toInt32() = v
+ return b[4:], nil
+}
+
+func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+ f.setInt32Ptr(v)
+ return b[4:], nil
+}
+
+func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+ f.appendInt32Slice(v)
+ b = b[4:]
+ }
+ return res, nil
+ }
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+ f.appendInt32Slice(v)
+ return b[4:], nil
+}
+
+func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ // Note: any length varint is allowed, even though any sane
+ // encoder will use one byte.
+ // See https://github.com/golang/protobuf/issues/76
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ // TODO: check if x>1? Tests seem to indicate no.
+ v := x != 0
+ *f.toBool() = v
+ return b[n:], nil
+}
+
+func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := x != 0
+ *f.toBoolPtr() = &v
+ return b[n:], nil
+}
+
+func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := x != 0
+ s := f.toBoolSlice()
+ *s = append(*s, v)
+ b = b[n:]
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := x != 0
+ s := f.toBoolSlice()
+ *s = append(*s, v)
+ return b[n:], nil
+}
+
+func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
+ *f.toFloat64() = v
+ return b[8:], nil
+}
+
+func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
+ *f.toFloat64Ptr() = &v
+ return b[8:], nil
+}
+
+func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
+ s := f.toFloat64Slice()
+ *s = append(*s, v)
+ b = b[8:]
+ }
+ return res, nil
+ }
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
+ s := f.toFloat64Slice()
+ *s = append(*s, v)
+ return b[8:], nil
+}
+
+func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ *f.toFloat32() = v
+ return b[4:], nil
+}
+
+func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ *f.toFloat32Ptr() = &v
+ return b[4:], nil
+}
+
+func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ s := f.toFloat32Slice()
+ *s = append(*s, v)
+ b = b[4:]
+ }
+ return res, nil
+ }
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ s := f.toFloat32Slice()
+ *s = append(*s, v)
+ return b[4:], nil
+}
+
+func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ *f.toString() = v
+ return b[x:], nil
+}
+
+func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ *f.toStringPtr() = &v
+ return b[x:], nil
+}
+
+func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ s := f.toStringSlice()
+ *s = append(*s, v)
+ return b[x:], nil
+}
+
+func unmarshalUTF8StringValue(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ *f.toString() = v
+ if !utf8.ValidString(v) {
+ return b[x:], errInvalidUTF8
+ }
+ return b[x:], nil
+}
+
+func unmarshalUTF8StringPtr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ *f.toStringPtr() = &v
+ if !utf8.ValidString(v) {
+ return b[x:], errInvalidUTF8
+ }
+ return b[x:], nil
+}
+
+func unmarshalUTF8StringSlice(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ s := f.toStringSlice()
+ *s = append(*s, v)
+ if !utf8.ValidString(v) {
+ return b[x:], errInvalidUTF8
+ }
+ return b[x:], nil
+}
+
+var emptyBuf [0]byte
+
+func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ // The use of append here is a trick which avoids the zeroing
+ // that would be required if we used a make/copy pair.
+ // We append to emptyBuf instead of nil because we want
+ // a non-nil result even when the length is 0.
+ v := append(emptyBuf[:], b[:x]...)
+ *f.toBytes() = v
+ return b[x:], nil
+}
+
+func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := append(emptyBuf[:], b[:x]...)
+ s := f.toBytesSlice()
+ *s = append(*s, v)
+ return b[x:], nil
+}
+
+func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ // First read the message field to see if something is there.
+ // The semantics of multiple submessages are weird. Instead of
+ // the last one winning (as it is for all other fields), multiple
+ // submessages are merged.
+ v := f.getPointer()
+ if v.isNil() {
+ v = valToPointer(reflect.New(sub.typ))
+ f.setPointer(v)
+ }
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ return b[x:], err
+ }
+}
+
+func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := valToPointer(reflect.New(sub.typ))
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ f.appendPointer(v)
+ return b[x:], err
+ }
+}
+
+func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireStartGroup {
+ return b, errInternalBadWireType
+ }
+ x, y := findEndGroup(b)
+ if x < 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := f.getPointer()
+ if v.isNil() {
+ v = valToPointer(reflect.New(sub.typ))
+ f.setPointer(v)
+ }
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ return b[y:], err
+ }
+}
+
+func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireStartGroup {
+ return b, errInternalBadWireType
+ }
+ x, y := findEndGroup(b)
+ if x < 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := valToPointer(reflect.New(sub.typ))
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ f.appendPointer(v)
+ return b[y:], err
+ }
+}
+
+func makeUnmarshalMap(f *reflect.StructField) unmarshaler {
+ t := f.Type
+ kt := t.Key()
+ vt := t.Elem()
+ tagArray := strings.Split(f.Tag.Get("protobuf"), ",")
+ valTags := strings.Split(f.Tag.Get("protobuf_val"), ",")
+ for _, t := range tagArray {
+ if strings.HasPrefix(t, "customtype=") {
+ valTags = append(valTags, t)
+ }
+ if t == "stdtime" {
+ valTags = append(valTags, t)
+ }
+ if t == "stdduration" {
+ valTags = append(valTags, t)
+ }
+ if t == "wktptr" {
+ valTags = append(valTags, t)
+ }
+ }
+ unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key"))
+ unmarshalVal := typeUnmarshaler(vt, strings.Join(valTags, ","))
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ // The map entry is a submessage. Figure out how big it is.
+ if w != WireBytes {
+ return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes)
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ r := b[x:] // unused data to return
+ b = b[:x] // data for map entry
+
+ // Note: we could use #keys * #values ~= 200 functions
+ // to do map decoding without reflection. Probably not worth it.
+ // Maps will be somewhat slow. Oh well.
+
+ // Read key and value from data.
+ var nerr nonFatal
+ k := reflect.New(kt)
+ v := reflect.New(vt)
+ for len(b) > 0 {
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ wire := int(x) & 7
+ b = b[n:]
+
+ var err error
+ switch x >> 3 {
+ case 1:
+ b, err = unmarshalKey(b, valToPointer(k), wire)
+ case 2:
+ b, err = unmarshalVal(b, valToPointer(v), wire)
+ default:
+ err = errInternalBadWireType // skip unknown tag
+ }
+
+ if nerr.Merge(err) {
+ continue
+ }
+ if err != errInternalBadWireType {
+ return nil, err
+ }
+
+ // Skip past unknown fields.
+ b, err = skipField(b, wire)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ // Get map, allocate if needed.
+ m := f.asPointerTo(t).Elem() // an addressable map[K]T
+ if m.IsNil() {
+ m.Set(reflect.MakeMap(t))
+ }
+
+ // Insert into map.
+ m.SetMapIndex(k.Elem(), v.Elem())
+
+ return r, nerr.E
+ }
+}
+
+// makeUnmarshalOneof makes an unmarshaler for oneof fields.
+// for:
+// message Msg {
+// oneof F {
+// int64 X = 1;
+// float64 Y = 2;
+// }
+// }
+// typ is the type of the concrete entry for a oneof case (e.g. Msg_X).
+// ityp is the interface type of the oneof field (e.g. isMsg_F).
+// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64).
+// Note that this function will be called once for each case in the oneof.
+func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler {
+ sf := typ.Field(0)
+ field0 := toField(&sf)
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ // Allocate holder for value.
+ v := reflect.New(typ)
+
+ // Unmarshal data into holder.
+ // We unmarshal into the first field of the holder object.
+ var err error
+ var nerr nonFatal
+ b, err = unmarshal(b, valToPointer(v).offset(field0), w)
+ if !nerr.Merge(err) {
+ return nil, err
+ }
+
+ // Write pointer to holder into target field.
+ f.asPointerTo(ityp).Elem().Set(v)
+
+ return b, nerr.E
+ }
+}
+
+// Error used by decode internally.
+var errInternalBadWireType = errors.New("proto: internal error: bad wiretype")
+
+// skipField skips past a field of type wire and returns the remaining bytes.
+func skipField(b []byte, wire int) ([]byte, error) {
+ switch wire {
+ case WireVarint:
+ _, k := decodeVarint(b)
+ if k == 0 {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[k:]
+ case WireFixed32:
+ if len(b) < 4 {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[4:]
+ case WireFixed64:
+ if len(b) < 8 {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[8:]
+ case WireBytes:
+ m, k := decodeVarint(b)
+ if k == 0 || uint64(len(b)-k) < m {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[uint64(k)+m:]
+ case WireStartGroup:
+ _, i := findEndGroup(b)
+ if i == -1 {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[i:]
+ default:
+ return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire)
+ }
+ return b, nil
+}
+
+// findEndGroup finds the index of the next EndGroup tag.
+// Groups may be nested, so the "next" EndGroup tag is the first
+// unpaired EndGroup.
+// findEndGroup returns the indexes of the start and end of the EndGroup tag.
+// Returns (-1,-1) if it can't find one.
+func findEndGroup(b []byte) (int, int) {
+ depth := 1
+ i := 0
+ for {
+ x, n := decodeVarint(b[i:])
+ if n == 0 {
+ return -1, -1
+ }
+ j := i
+ i += n
+ switch x & 7 {
+ case WireVarint:
+ _, k := decodeVarint(b[i:])
+ if k == 0 {
+ return -1, -1
+ }
+ i += k
+ case WireFixed32:
+ if len(b)-4 < i {
+ return -1, -1
+ }
+ i += 4
+ case WireFixed64:
+ if len(b)-8 < i {
+ return -1, -1
+ }
+ i += 8
+ case WireBytes:
+ m, k := decodeVarint(b[i:])
+ if k == 0 {
+ return -1, -1
+ }
+ i += k
+ if uint64(len(b)-i) < m {
+ return -1, -1
+ }
+ i += int(m)
+ case WireStartGroup:
+ depth++
+ case WireEndGroup:
+ depth--
+ if depth == 0 {
+ return j, i
+ }
+ default:
+ return -1, -1
+ }
+ }
+}
+
+// encodeVarint appends a varint-encoded integer to b and returns the result.
+func encodeVarint(b []byte, x uint64) []byte {
+ for x >= 1<<7 {
+ b = append(b, byte(x&0x7f|0x80))
+ x >>= 7
+ }
+ return append(b, byte(x))
+}
+
+// decodeVarint reads a varint-encoded integer from b.
+// Returns the decoded integer and the number of bytes read.
+// If there is an error, it returns 0,0.
+func decodeVarint(b []byte) (uint64, int) {
+ var x, y uint64
+ if len(b) <= 0 {
+ goto bad
+ }
+ x = uint64(b[0])
+ if x < 0x80 {
+ return x, 1
+ }
+ x -= 0x80
+
+ if len(b) <= 1 {
+ goto bad
+ }
+ y = uint64(b[1])
+ x += y << 7
+ if y < 0x80 {
+ return x, 2
+ }
+ x -= 0x80 << 7
+
+ if len(b) <= 2 {
+ goto bad
+ }
+ y = uint64(b[2])
+ x += y << 14
+ if y < 0x80 {
+ return x, 3
+ }
+ x -= 0x80 << 14
+
+ if len(b) <= 3 {
+ goto bad
+ }
+ y = uint64(b[3])
+ x += y << 21
+ if y < 0x80 {
+ return x, 4
+ }
+ x -= 0x80 << 21
+
+ if len(b) <= 4 {
+ goto bad
+ }
+ y = uint64(b[4])
+ x += y << 28
+ if y < 0x80 {
+ return x, 5
+ }
+ x -= 0x80 << 28
+
+ if len(b) <= 5 {
+ goto bad
+ }
+ y = uint64(b[5])
+ x += y << 35
+ if y < 0x80 {
+ return x, 6
+ }
+ x -= 0x80 << 35
+
+ if len(b) <= 6 {
+ goto bad
+ }
+ y = uint64(b[6])
+ x += y << 42
+ if y < 0x80 {
+ return x, 7
+ }
+ x -= 0x80 << 42
+
+ if len(b) <= 7 {
+ goto bad
+ }
+ y = uint64(b[7])
+ x += y << 49
+ if y < 0x80 {
+ return x, 8
+ }
+ x -= 0x80 << 49
+
+ if len(b) <= 8 {
+ goto bad
+ }
+ y = uint64(b[8])
+ x += y << 56
+ if y < 0x80 {
+ return x, 9
+ }
+ x -= 0x80 << 56
+
+ if len(b) <= 9 {
+ goto bad
+ }
+ y = uint64(b[9])
+ x += y << 63
+ if y < 2 {
+ return x, 10
+ }
+
+bad:
+ return 0, 0
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go b/vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go
new file mode 100644
index 000000000..00d6c7ad9
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go
@@ -0,0 +1,385 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// 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.
+//
+// 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.
+
+package proto
+
+import (
+ "io"
+ "reflect"
+)
+
+func makeUnmarshalMessage(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ // First read the message field to see if something is there.
+ // The semantics of multiple submessages are weird. Instead of
+ // the last one winning (as it is for all other fields), multiple
+ // submessages are merged.
+ v := f // gogo: changed from v := f.getPointer()
+ if v.isNil() {
+ v = valToPointer(reflect.New(sub.typ))
+ f.setPointer(v)
+ }
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ return b[x:], err
+ }
+}
+
+func makeUnmarshalMessageSlice(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := valToPointer(reflect.New(sub.typ))
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ f.appendRef(v, sub.typ) // gogo: changed from f.appendPointer(v)
+ return b[x:], err
+ }
+}
+
+func makeUnmarshalCustomPtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.New(sub.typ))
+ m := s.Interface().(custom)
+ if err := m.Unmarshal(b[:x]); err != nil {
+ return nil, err
+ }
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalCustomSlice(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := reflect.New(sub.typ)
+ c := m.Interface().(custom)
+ if err := c.Unmarshal(b[:x]); err != nil {
+ return nil, err
+ }
+ v := valToPointer(m)
+ f.appendRef(v, sub.typ)
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalCustom(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+
+ m := f.asPointerTo(sub.typ).Interface().(custom)
+ if err := m.Unmarshal(b[:x]); err != nil {
+ return nil, err
+ }
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalTime(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &timestamp{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ t, err := timestampFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(t))
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalTimePtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &timestamp{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ t, err := timestampFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&t))
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalTimePtrSlice(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &timestamp{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ t, err := timestampFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&t))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalTimeSlice(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &timestamp{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ t, err := timestampFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(t))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalDurationPtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &duration{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ d, err := durationFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&d))
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalDuration(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &duration{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ d, err := durationFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(d))
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalDurationPtrSlice(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &duration{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ d, err := durationFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&d))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeUnmarshalDurationSlice(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &duration{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ d, err := durationFromProto(m)
+ if err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(d))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/text.go b/vendor/github.com/gogo/protobuf/proto/text.go
index d63732fcb..0407ba85d 100644
--- a/vendor/github.com/gogo/protobuf/proto/text.go
+++ b/vendor/github.com/gogo/protobuf/proto/text.go
@@ -57,7 +57,6 @@ import (
var (
newline = []byte("\n")
spaces = []byte(" ")
- gtNewline = []byte(">\n")
endBraceNewline = []byte("}\n")
backslashN = []byte{'\\', 'n'}
backslashR = []byte{'\\', 'r'}
@@ -177,11 +176,6 @@ func writeName(w *textWriter, props *Properties) error {
return nil
}
-// raw is the interface satisfied by RawMessage.
-type raw interface {
- Bytes() []byte
-}
-
func requiresQuotes(u string) bool {
// When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted.
for _, ch := range u {
@@ -276,6 +270,10 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
props := sprops.Prop[i]
name := st.Field(i).Name
+ if name == "XXX_NoUnkeyedLiteral" {
+ continue
+ }
+
if strings.HasPrefix(name, "XXX_") {
// There are two XXX_ fields:
// XXX_unrecognized []byte
@@ -366,7 +364,7 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
return err
}
}
- if err := tm.writeAny(w, key, props.mkeyprop); err != nil {
+ if err := tm.writeAny(w, key, props.MapKeyProp); err != nil {
return err
}
if err := w.WriteByte('\n'); err != nil {
@@ -383,7 +381,7 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
return err
}
}
- if err := tm.writeAny(w, val, props.mvalprop); err != nil {
+ if err := tm.writeAny(w, val, props.MapValProp); err != nil {
return err
}
if err := w.WriteByte('\n'); err != nil {
@@ -447,12 +445,6 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
return err
}
}
- if b, ok := fv.Interface().(raw); ok {
- if err := writeRaw(w, b.Bytes()); err != nil {
- return err
- }
- continue
- }
if len(props.Enum) > 0 {
if err := tm.writeEnum(w, fv, props); err != nil {
@@ -475,7 +467,7 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
pv = reflect.New(sv.Type())
pv.Elem().Set(sv)
}
- if pv.Type().Implements(extensionRangeType) {
+ if _, err := extendable(pv.Interface()); err == nil {
if err := tm.writeExtensions(w, pv); err != nil {
return err
}
@@ -484,27 +476,6 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
return nil
}
-// writeRaw writes an uninterpreted raw message.
-func writeRaw(w *textWriter, b []byte) error {
- if err := w.WriteByte('<'); err != nil {
- return err
- }
- if !w.compact {
- if err := w.WriteByte('\n'); err != nil {
- return err
- }
- }
- w.indent()
- if err := writeUnknownStruct(w, b); err != nil {
- return err
- }
- w.unindent()
- if err := w.WriteByte('>'); err != nil {
- return err
- }
- return nil
-}
-
// writeAny writes an arbitrary field.
func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error {
v = reflect.Indirect(v)
@@ -522,6 +493,17 @@ func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Propert
}
return nil
}
+ } else if len(props.CastType) > 0 {
+ if _, ok := v.Interface().(interface {
+ String() string
+ }); ok {
+ switch v.Kind() {
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
+ reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
+ _, err := fmt.Fprintf(w, "%d", v.Interface())
+ return err
+ }
+ }
} else if props.StdTime {
t, ok := v.Interface().(time.Time)
if !ok {
@@ -531,9 +513,9 @@ func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Propert
if err != nil {
return err
}
- props.StdTime = false
- err = tm.writeAny(w, reflect.ValueOf(tproto), props)
- props.StdTime = true
+ propsCopy := *props // Make a copy so that this is goroutine-safe
+ propsCopy.StdTime = false
+ err = tm.writeAny(w, reflect.ValueOf(tproto), &propsCopy)
return err
} else if props.StdDuration {
d, ok := v.Interface().(time.Duration)
@@ -541,9 +523,9 @@ func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Propert
return fmt.Errorf("stdtime is not time.Duration, but %T", v.Interface())
}
dproto := durationProto(d)
- props.StdDuration = false
- err := tm.writeAny(w, reflect.ValueOf(dproto), props)
- props.StdDuration = true
+ propsCopy := *props // Make a copy so that this is goroutine-safe
+ propsCopy.StdDuration = false
+ err := tm.writeAny(w, reflect.ValueOf(dproto), &propsCopy)
return err
}
}
@@ -594,6 +576,19 @@ func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Propert
}
}
w.indent()
+ if v.CanAddr() {
+ // Calling v.Interface on a struct causes the reflect package to
+ // copy the entire struct. This is racy with the new Marshaler
+ // since we atomically update the XXX_sizecache.
+ //
+ // Thus, we retrieve a pointer to the struct if possible to avoid
+ // a race since v.Interface on the pointer doesn't copy the struct.
+ //
+ // If v is not addressable, then we are not worried about a race
+ // since it implies that the binary Marshaler cannot possibly be
+ // mutating this value.
+ v = v.Addr()
+ }
if etm, ok := v.Interface().(encoding.TextMarshaler); ok {
text, err := etm.MarshalText()
if err != nil {
@@ -602,8 +597,13 @@ func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Propert
if _, err = w.Write(text); err != nil {
return err
}
- } else if err := tm.writeStruct(w, v); err != nil {
- return err
+ } else {
+ if v.Kind() == reflect.Ptr {
+ v = v.Elem()
+ }
+ if err := tm.writeStruct(w, v); err != nil {
+ return err
+ }
}
w.unindent()
if err := w.WriteByte(ket); err != nil {
diff --git a/vendor/github.com/gogo/protobuf/proto/text_parser.go b/vendor/github.com/gogo/protobuf/proto/text_parser.go
index 9db12e960..1ce0be2fa 100644
--- a/vendor/github.com/gogo/protobuf/proto/text_parser.go
+++ b/vendor/github.com/gogo/protobuf/proto/text_parser.go
@@ -212,7 +212,6 @@ func (p *textParser) advance() {
var (
errBadUTF8 = errors.New("proto: bad UTF-8")
- errBadHex = errors.New("proto: bad hexadecimal")
)
func unquoteC(s string, quote rune) (string, error) {
@@ -283,60 +282,47 @@ func unescape(s string) (ch string, tail string, err error) {
return "?", s, nil // trigraph workaround
case '\'', '"', '\\':
return string(r), s, nil
- case '0', '1', '2', '3', '4', '5', '6', '7', 'x', 'X':
+ case '0', '1', '2', '3', '4', '5', '6', '7':
if len(s) < 2 {
return "", "", fmt.Errorf(`\%c requires 2 following digits`, r)
}
- base := 8
- ss := s[:2]
+ ss := string(r) + s[:2]
s = s[2:]
- if r == 'x' || r == 'X' {
- base = 16
- } else {
- ss = string(r) + ss
- }
- i, err := strconv.ParseUint(ss, base, 8)
+ i, err := strconv.ParseUint(ss, 8, 8)
if err != nil {
- return "", "", err
+ return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss)
}
return string([]byte{byte(i)}), s, nil
- case 'u', 'U':
- n := 4
- if r == 'U' {
+ case 'x', 'X', 'u', 'U':
+ var n int
+ switch r {
+ case 'x', 'X':
+ n = 2
+ case 'u':
+ n = 4
+ case 'U':
n = 8
}
if len(s) < n {
- return "", "", fmt.Errorf(`\%c requires %d digits`, r, n)
- }
-
- bs := make([]byte, n/2)
- for i := 0; i < n; i += 2 {
- a, ok1 := unhex(s[i])
- b, ok2 := unhex(s[i+1])
- if !ok1 || !ok2 {
- return "", "", errBadHex
- }
- bs[i/2] = a<<4 | b
+ return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n)
}
+ ss := s[:n]
s = s[n:]
- return string(bs), s, nil
+ i, err := strconv.ParseUint(ss, 16, 64)
+ if err != nil {
+ return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss)
+ }
+ if r == 'x' || r == 'X' {
+ return string([]byte{byte(i)}), s, nil
+ }
+ if i > utf8.MaxRune {
+ return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss)
+ }
+ return string(i), s, nil
}
return "", "", fmt.Errorf(`unknown escape \%c`, r)
}
-// Adapted from src/pkg/strconv/quote.go.
-func unhex(b byte) (v byte, ok bool) {
- switch {
- case '0' <= b && b <= '9':
- return b - '0', true
- case 'a' <= b && b <= 'f':
- return b - 'a' + 10, true
- case 'A' <= b && b <= 'F':
- return b - 'A' + 10, true
- }
- return 0, false
-}
-
// Back off the parser by one token. Can only be done between calls to next().
// It makes the next advance() a no-op.
func (p *textParser) back() { p.backed = true }
@@ -650,17 +636,17 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
if err := p.consumeToken(":"); err != nil {
return err
}
- if err := p.readAny(key, props.mkeyprop); err != nil {
+ if err := p.readAny(key, props.MapKeyProp); err != nil {
return err
}
if err := p.consumeOptionalSeparator(); err != nil {
return err
}
case "value":
- if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil {
+ if err := p.checkForColon(props.MapValProp, dst.Type().Elem()); err != nil {
return err
}
- if err := p.readAny(val, props.mvalprop); err != nil {
+ if err := p.readAny(val, props.MapValProp); err != nil {
return err
}
if err := p.consumeOptionalSeparator(); err != nil {
@@ -734,6 +720,9 @@ func (p *textParser) consumeExtName() (string, error) {
if tok.err != nil {
return "", p.errorf("unrecognized type_url or extension name: %s", tok.err)
}
+ if p.done && tok.value != "]" {
+ return "", p.errorf("unclosed type_url or extension name")
+ }
}
return strings.Join(parts, ""), nil
}
@@ -934,6 +923,16 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error {
fv.SetFloat(f)
return nil
}
+ case reflect.Int8:
+ if x, err := strconv.ParseInt(tok.value, 0, 8); err == nil {
+ fv.SetInt(x)
+ return nil
+ }
+ case reflect.Int16:
+ if x, err := strconv.ParseInt(tok.value, 0, 16); err == nil {
+ fv.SetInt(x)
+ return nil
+ }
case reflect.Int32:
if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil {
fv.SetInt(x)
@@ -981,6 +980,16 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error {
}
// TODO: Handle nested messages which implement encoding.TextUnmarshaler.
return p.readStruct(fv, terminator)
+ case reflect.Uint8:
+ if x, err := strconv.ParseUint(tok.value, 0, 8); err == nil {
+ fv.SetUint(x)
+ return nil
+ }
+ case reflect.Uint16:
+ if x, err := strconv.ParseUint(tok.value, 0, 16); err == nil {
+ fv.SetUint(x)
+ return nil
+ }
case reflect.Uint32:
if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil {
fv.SetUint(uint64(x))
@@ -1001,13 +1010,9 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error {
// UnmarshalText returns *RequiredNotSetError.
func UnmarshalText(s string, pb Message) error {
if um, ok := pb.(encoding.TextUnmarshaler); ok {
- err := um.UnmarshalText([]byte(s))
- return err
+ return um.UnmarshalText([]byte(s))
}
pb.Reset()
v := reflect.ValueOf(pb)
- if pe := newTextParser(s).readStruct(v.Elem(), ""); pe != nil {
- return pe
- }
- return nil
+ return newTextParser(s).readStruct(v.Elem(), "")
}
diff --git a/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go b/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go
index d42764743..38439fa99 100644
--- a/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go
+++ b/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go
@@ -47,183 +47,3 @@ func (*timestamp) String() string { return "timestamp<string>" }
func init() {
RegisterType((*timestamp)(nil), "gogo.protobuf.proto.timestamp")
}
-
-func (o *Buffer) decTimestamp() (time.Time, error) {
- b, err := o.DecodeRawBytes(true)
- if err != nil {
- return time.Time{}, err
- }
- tproto := &timestamp{}
- if err := Unmarshal(b, tproto); err != nil {
- return time.Time{}, err
- }
- return timestampFromProto(tproto)
-}
-
-func (o *Buffer) dec_time(p *Properties, base structPointer) error {
- t, err := o.decTimestamp()
- if err != nil {
- return err
- }
- setPtrCustomType(base, p.field, &t)
- return nil
-}
-
-func (o *Buffer) dec_ref_time(p *Properties, base structPointer) error {
- t, err := o.decTimestamp()
- if err != nil {
- return err
- }
- setCustomType(base, p.field, &t)
- return nil
-}
-
-func (o *Buffer) dec_slice_time(p *Properties, base structPointer) error {
- t, err := o.decTimestamp()
- if err != nil {
- return err
- }
- newBas := appendStructPointer(base, p.field, reflect.SliceOf(reflect.PtrTo(timeType)))
- var zero field
- setPtrCustomType(newBas, zero, &t)
- return nil
-}
-
-func (o *Buffer) dec_slice_ref_time(p *Properties, base structPointer) error {
- t, err := o.decTimestamp()
- if err != nil {
- return err
- }
- newBas := appendStructPointer(base, p.field, reflect.SliceOf(timeType))
- var zero field
- setCustomType(newBas, zero, &t)
- return nil
-}
-
-func size_time(p *Properties, base structPointer) (n int) {
- structp := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(structp) {
- return 0
- }
- tim := structPointer_Interface(structp, timeType).(*time.Time)
- t, err := timestampProto(*tim)
- if err != nil {
- return 0
- }
- size := Size(t)
- return size + sizeVarint(uint64(size)) + len(p.tagcode)
-}
-
-func (o *Buffer) enc_time(p *Properties, base structPointer) error {
- structp := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(structp) {
- return ErrNil
- }
- tim := structPointer_Interface(structp, timeType).(*time.Time)
- t, err := timestampProto(*tim)
- if err != nil {
- return err
- }
- data, err := Marshal(t)
- if err != nil {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- return nil
-}
-
-func size_ref_time(p *Properties, base structPointer) (n int) {
- tim := structPointer_InterfaceAt(base, p.field, timeType).(*time.Time)
- t, err := timestampProto(*tim)
- if err != nil {
- return 0
- }
- size := Size(t)
- return size + sizeVarint(uint64(size)) + len(p.tagcode)
-}
-
-func (o *Buffer) enc_ref_time(p *Properties, base structPointer) error {
- tim := structPointer_InterfaceAt(base, p.field, timeType).(*time.Time)
- t, err := timestampProto(*tim)
- if err != nil {
- return err
- }
- data, err := Marshal(t)
- if err != nil {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- return nil
-}
-
-func size_slice_time(p *Properties, base structPointer) (n int) {
- ptims := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(reflect.PtrTo(timeType))).(*[]*time.Time)
- tims := *ptims
- for i := 0; i < len(tims); i++ {
- if tims[i] == nil {
- return 0
- }
- tproto, err := timestampProto(*tims[i])
- if err != nil {
- return 0
- }
- size := Size(tproto)
- n += len(p.tagcode) + size + sizeVarint(uint64(size))
- }
- return n
-}
-
-func (o *Buffer) enc_slice_time(p *Properties, base structPointer) error {
- ptims := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(reflect.PtrTo(timeType))).(*[]*time.Time)
- tims := *ptims
- for i := 0; i < len(tims); i++ {
- if tims[i] == nil {
- return errRepeatedHasNil
- }
- tproto, err := timestampProto(*tims[i])
- if err != nil {
- return err
- }
- data, err := Marshal(tproto)
- if err != nil {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- }
- return nil
-}
-
-func size_slice_ref_time(p *Properties, base structPointer) (n int) {
- ptims := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(timeType)).(*[]time.Time)
- tims := *ptims
- for i := 0; i < len(tims); i++ {
- tproto, err := timestampProto(tims[i])
- if err != nil {
- return 0
- }
- size := Size(tproto)
- n += len(p.tagcode) + size + sizeVarint(uint64(size))
- }
- return n
-}
-
-func (o *Buffer) enc_slice_ref_time(p *Properties, base structPointer) error {
- ptims := structPointer_InterfaceAt(base, p.field, reflect.SliceOf(timeType)).(*[]time.Time)
- tims := *ptims
- for i := 0; i < len(tims); i++ {
- tproto, err := timestampProto(tims[i])
- if err != nil {
- return err
- }
- data, err := Marshal(tproto)
- if err != nil {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- }
- return nil
-}
diff --git a/vendor/github.com/gogo/protobuf/proto/wrappers.go b/vendor/github.com/gogo/protobuf/proto/wrappers.go
new file mode 100644
index 000000000..b175d1b64
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/wrappers.go
@@ -0,0 +1,1888 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// 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.
+//
+// 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.
+
+package proto
+
+import (
+ "io"
+ "reflect"
+)
+
+func makeStdDoubleValueMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ t := ptr.asPointerTo(u.typ).Interface().(*float64)
+ v := &float64Value{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ t := ptr.asPointerTo(u.typ).Interface().(*float64)
+ v := &float64Value{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdDoubleValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float64)
+ v := &float64Value{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float64)
+ v := &float64Value{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdDoubleValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(float64)
+ v := &float64Value{t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(float64)
+ v := &float64Value{t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdDoubleValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*float64)
+ v := &float64Value{*t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*float64)
+ v := &float64Value{*t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdDoubleValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &float64Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdDoubleValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &float64Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdDoubleValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &float64Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdDoubleValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &float64Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdFloatValueMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ t := ptr.asPointerTo(u.typ).Interface().(*float32)
+ v := &float32Value{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ t := ptr.asPointerTo(u.typ).Interface().(*float32)
+ v := &float32Value{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdFloatValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float32)
+ v := &float32Value{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float32)
+ v := &float32Value{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdFloatValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(float32)
+ v := &float32Value{t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(float32)
+ v := &float32Value{t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdFloatValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*float32)
+ v := &float32Value{*t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*float32)
+ v := &float32Value{*t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdFloatValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &float32Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdFloatValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &float32Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdFloatValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &float32Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdFloatValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &float32Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdInt64ValueMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ t := ptr.asPointerTo(u.typ).Interface().(*int64)
+ v := &int64Value{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ t := ptr.asPointerTo(u.typ).Interface().(*int64)
+ v := &int64Value{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdInt64ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int64)
+ v := &int64Value{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int64)
+ v := &int64Value{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdInt64ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(int64)
+ v := &int64Value{t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(int64)
+ v := &int64Value{t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdInt64ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*int64)
+ v := &int64Value{*t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*int64)
+ v := &int64Value{*t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdInt64ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &int64Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdInt64ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &int64Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdInt64ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &int64Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdInt64ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &int64Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdUInt64ValueMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ t := ptr.asPointerTo(u.typ).Interface().(*uint64)
+ v := &uint64Value{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ t := ptr.asPointerTo(u.typ).Interface().(*uint64)
+ v := &uint64Value{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdUInt64ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint64)
+ v := &uint64Value{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint64)
+ v := &uint64Value{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdUInt64ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(uint64)
+ v := &uint64Value{t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(uint64)
+ v := &uint64Value{t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdUInt64ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*uint64)
+ v := &uint64Value{*t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*uint64)
+ v := &uint64Value{*t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdUInt64ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &uint64Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdUInt64ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &uint64Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdUInt64ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &uint64Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdUInt64ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &uint64Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdInt32ValueMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ t := ptr.asPointerTo(u.typ).Interface().(*int32)
+ v := &int32Value{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ t := ptr.asPointerTo(u.typ).Interface().(*int32)
+ v := &int32Value{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdInt32ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int32)
+ v := &int32Value{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int32)
+ v := &int32Value{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdInt32ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(int32)
+ v := &int32Value{t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(int32)
+ v := &int32Value{t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdInt32ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*int32)
+ v := &int32Value{*t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*int32)
+ v := &int32Value{*t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdInt32ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &int32Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdInt32ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &int32Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdInt32ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &int32Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdInt32ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &int32Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdUInt32ValueMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ t := ptr.asPointerTo(u.typ).Interface().(*uint32)
+ v := &uint32Value{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ t := ptr.asPointerTo(u.typ).Interface().(*uint32)
+ v := &uint32Value{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdUInt32ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint32)
+ v := &uint32Value{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint32)
+ v := &uint32Value{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdUInt32ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(uint32)
+ v := &uint32Value{t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(uint32)
+ v := &uint32Value{t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdUInt32ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*uint32)
+ v := &uint32Value{*t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*uint32)
+ v := &uint32Value{*t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdUInt32ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &uint32Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdUInt32ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &uint32Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdUInt32ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &uint32Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdUInt32ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &uint32Value{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdBoolValueMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ t := ptr.asPointerTo(u.typ).Interface().(*bool)
+ v := &boolValue{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ t := ptr.asPointerTo(u.typ).Interface().(*bool)
+ v := &boolValue{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdBoolValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*bool)
+ v := &boolValue{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*bool)
+ v := &boolValue{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdBoolValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(bool)
+ v := &boolValue{t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(bool)
+ v := &boolValue{t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdBoolValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*bool)
+ v := &boolValue{*t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*bool)
+ v := &boolValue{*t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdBoolValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &boolValue{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdBoolValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &boolValue{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdBoolValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &boolValue{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdBoolValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &boolValue{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdStringValueMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ t := ptr.asPointerTo(u.typ).Interface().(*string)
+ v := &stringValue{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ t := ptr.asPointerTo(u.typ).Interface().(*string)
+ v := &stringValue{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdStringValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*string)
+ v := &stringValue{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*string)
+ v := &stringValue{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdStringValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(string)
+ v := &stringValue{t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(string)
+ v := &stringValue{t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdStringValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*string)
+ v := &stringValue{*t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*string)
+ v := &stringValue{*t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdStringValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &stringValue{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdStringValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &stringValue{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdStringValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &stringValue{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdStringValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &stringValue{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdBytesValueMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ t := ptr.asPointerTo(u.typ).Interface().(*[]byte)
+ v := &bytesValue{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ t := ptr.asPointerTo(u.typ).Interface().(*[]byte)
+ v := &bytesValue{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdBytesValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ if ptr.isNil() {
+ return 0
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*[]byte)
+ v := &bytesValue{*t}
+ siz := Size(v)
+ return tagsize + SizeVarint(uint64(siz)) + siz
+ }, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ if ptr.isNil() {
+ return b, nil
+ }
+ t := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*[]byte)
+ v := &bytesValue{*t}
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(buf)))
+ b = append(b, buf...)
+ return b, nil
+ }
+}
+
+func makeStdBytesValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(u.typ)
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().([]byte)
+ v := &bytesValue{t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(u.typ)
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().([]byte)
+ v := &bytesValue{t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdBytesValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ n := 0
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*[]byte)
+ v := &bytesValue{*t}
+ siz := Size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getSlice(reflect.PtrTo(u.typ))
+ for i := 0; i < s.Len(); i++ {
+ elem := s.Index(i)
+ t := elem.Interface().(*[]byte)
+ v := &bytesValue{*t}
+ siz := Size(v)
+ buf, err := Marshal(v)
+ if err != nil {
+ return nil, err
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(siz))
+ b = append(b, buf...)
+ }
+
+ return b, nil
+ }
+}
+
+func makeStdBytesValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &bytesValue{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(sub.typ).Elem()
+ s.Set(reflect.ValueOf(m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdBytesValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &bytesValue{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ s := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()
+ s.Set(reflect.ValueOf(&m.Value))
+ return b[x:], nil
+ }
+}
+
+func makeStdBytesValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &bytesValue{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(reflect.PtrTo(sub.typ))
+ newSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
+
+func makeStdBytesValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return nil, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ m := &bytesValue{}
+ if err := Unmarshal(b[:x], m); err != nil {
+ return nil, err
+ }
+ slice := f.getSlice(sub.typ)
+ newSlice := reflect.Append(slice, reflect.ValueOf(m.Value))
+ slice.Set(newSlice)
+ return b[x:], nil
+ }
+}
diff --git a/vendor/github.com/gogo/protobuf/proto/wrappers_gogo.go b/vendor/github.com/gogo/protobuf/proto/wrappers_gogo.go
new file mode 100644
index 000000000..c1cf7bf85
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/proto/wrappers_gogo.go
@@ -0,0 +1,113 @@
+// Protocol Buffers for Go with Gadgets
+//
+// Copyright (c) 2018, The GoGo Authors. All rights reserved.
+// http://github.com/gogo/protobuf
+//
+// 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.
+//
+// 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.
+
+package proto
+
+type float64Value struct {
+ Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (m *float64Value) Reset() { *m = float64Value{} }
+func (*float64Value) ProtoMessage() {}
+func (*float64Value) String() string { return "float64<string>" }
+
+type float32Value struct {
+ Value float32 `protobuf:"fixed32,1,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (m *float32Value) Reset() { *m = float32Value{} }
+func (*float32Value) ProtoMessage() {}
+func (*float32Value) String() string { return "float32<string>" }
+
+type int64Value struct {
+ Value int64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (m *int64Value) Reset() { *m = int64Value{} }
+func (*int64Value) ProtoMessage() {}
+func (*int64Value) String() string { return "int64<string>" }
+
+type uint64Value struct {
+ Value uint64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (m *uint64Value) Reset() { *m = uint64Value{} }
+func (*uint64Value) ProtoMessage() {}
+func (*uint64Value) String() string { return "uint64<string>" }
+
+type int32Value struct {
+ Value int32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (m *int32Value) Reset() { *m = int32Value{} }
+func (*int32Value) ProtoMessage() {}
+func (*int32Value) String() string { return "int32<string>" }
+
+type uint32Value struct {
+ Value uint32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (m *uint32Value) Reset() { *m = uint32Value{} }
+func (*uint32Value) ProtoMessage() {}
+func (*uint32Value) String() string { return "uint32<string>" }
+
+type boolValue struct {
+ Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (m *boolValue) Reset() { *m = boolValue{} }
+func (*boolValue) ProtoMessage() {}
+func (*boolValue) String() string { return "bool<string>" }
+
+type stringValue struct {
+ Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (m *stringValue) Reset() { *m = stringValue{} }
+func (*stringValue) ProtoMessage() {}
+func (*stringValue) String() string { return "string<string>" }
+
+type bytesValue struct {
+ Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (m *bytesValue) Reset() { *m = bytesValue{} }
+func (*bytesValue) ProtoMessage() {}
+func (*bytesValue) String() string { return "[]byte<string>" }
+
+func init() {
+ RegisterType((*float64Value)(nil), "gogo.protobuf.proto.DoubleValue")
+ RegisterType((*float32Value)(nil), "gogo.protobuf.proto.FloatValue")
+ RegisterType((*int64Value)(nil), "gogo.protobuf.proto.Int64Value")
+ RegisterType((*uint64Value)(nil), "gogo.protobuf.proto.UInt64Value")
+ RegisterType((*int32Value)(nil), "gogo.protobuf.proto.Int32Value")
+ RegisterType((*uint32Value)(nil), "gogo.protobuf.proto.UInt32Value")
+ RegisterType((*boolValue)(nil), "gogo.protobuf.proto.BoolValue")
+ RegisterType((*stringValue)(nil), "gogo.protobuf.proto.StringValue")
+ RegisterType((*bytesValue)(nil), "gogo.protobuf.proto.BytesValue")
+}
diff --git a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/any.proto b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/any.proto
index 7eaf2291d..b6cc7cb2e 100644
--- a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/any.proto
+++ b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/any.proto
@@ -74,6 +74,16 @@ option objc_class_prefix = "GPB";
// any.Unpack(foo)
// ...
//
+// Example 4: Pack and unpack a message in Go
+//
+// foo := &pb.Foo{...}
+// any, err := ptypes.MarshalAny(foo)
+// ...
+// foo := &pb.Foo{}
+// if err := ptypes.UnmarshalAny(any, foo); err != nil {
+// ...
+// }
+//
// The pack methods provided by protobuf library will by default use
// 'type.googleapis.com/full.type.name' as the type URL and the unpack
// methods only use the fully qualified type name after the last '/'
@@ -110,17 +120,18 @@ option objc_class_prefix = "GPB";
// }
//
message Any {
- // A URL/resource name whose content describes the type of the
- // serialized protocol buffer message.
+ // A URL/resource name that uniquely identifies the type of the serialized
+ // protocol buffer message. The last segment of the URL's path must represent
+ // the fully qualified name of the type (as in
+ // `path/google.protobuf.Duration`). The name should be in a canonical form
+ // (e.g., leading "." is not accepted).
//
- // For URLs which use the scheme `http`, `https`, or no scheme, the
- // following restrictions and interpretations apply:
+ // In practice, teams usually precompile into the binary all types that they
+ // expect it to use in the context of Any. However, for URLs which use the
+ // scheme `http`, `https`, or no scheme, one can optionally set up a type
+ // server that maps type URLs to message definitions as follows:
//
// * If no scheme is provided, `https` is assumed.
- // * The last segment of the URL's path must represent the fully
- // qualified name of the type (as in `path/google.protobuf.Duration`).
- // The name should be in a canonical form (e.g., leading "." is
- // not accepted).
// * An HTTP GET on the URL must yield a [google.protobuf.Type][]
// value in binary format, or produce an error.
// * Applications are allowed to cache lookup results based on the
@@ -129,6 +140,10 @@ message Any {
// on changes to types. (Use versioned type names to manage
// breaking changes.)
//
+ // Note: this functionality is not currently available in the official
+ // protobuf release, and it is not used for type URLs beginning with
+ // type.googleapis.com.
+ //
// Schemes other than `http`, `https` (or the empty scheme) might be
// used with implementation specific semantics.
//
diff --git a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/api.proto b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/api.proto
new file mode 100644
index 000000000..67c1ddbd9
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/api.proto
@@ -0,0 +1,210 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// 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.
+
+syntax = "proto3";
+
+package google.protobuf;
+
+import "google/protobuf/source_context.proto";
+import "google/protobuf/type.proto";
+
+option csharp_namespace = "Google.Protobuf.WellKnownTypes";
+option java_package = "com.google.protobuf";
+option java_outer_classname = "ApiProto";
+option java_multiple_files = true;
+option objc_class_prefix = "GPB";
+option go_package = "types";
+
+// Api is a light-weight descriptor for an API Interface.
+//
+// Interfaces are also described as "protocol buffer services" in some contexts,
+// such as by the "service" keyword in a .proto file, but they are different
+// from API Services, which represent a concrete implementation of an interface
+// as opposed to simply a description of methods and bindings. They are also
+// sometimes simply referred to as "APIs" in other contexts, such as the name of
+// this message itself. See https://cloud.google.com/apis/design/glossary for
+// detailed terminology.
+message Api {
+
+ // The fully qualified name of this interface, including package name
+ // followed by the interface's simple name.
+ string name = 1;
+
+ // The methods of this interface, in unspecified order.
+ repeated Method methods = 2;
+
+ // Any metadata attached to the interface.
+ repeated Option options = 3;
+
+ // A version string for this interface. If specified, must have the form
+ // `major-version.minor-version`, as in `1.10`. If the minor version is
+ // omitted, it defaults to zero. If the entire version field is empty, the
+ // major version is derived from the package name, as outlined below. If the
+ // field is not empty, the version in the package name will be verified to be
+ // consistent with what is provided here.
+ //
+ // The versioning schema uses [semantic
+ // versioning](http://semver.org) where the major version number
+ // indicates a breaking change and the minor version an additive,
+ // non-breaking change. Both version numbers are signals to users
+ // what to expect from different versions, and should be carefully
+ // chosen based on the product plan.
+ //
+ // The major version is also reflected in the package name of the
+ // interface, which must end in `v<major-version>`, as in
+ // `google.feature.v1`. For major versions 0 and 1, the suffix can
+ // be omitted. Zero major versions must only be used for
+ // experimental, non-GA interfaces.
+ //
+ //
+ string version = 4;
+
+ // Source context for the protocol buffer service represented by this
+ // message.
+ SourceContext source_context = 5;
+
+ // Included interfaces. See [Mixin][].
+ repeated Mixin mixins = 6;
+
+ // The source syntax of the service.
+ Syntax syntax = 7;
+}
+
+// Method represents a method of an API interface.
+message Method {
+
+ // The simple name of this method.
+ string name = 1;
+
+ // A URL of the input message type.
+ string request_type_url = 2;
+
+ // If true, the request is streamed.
+ bool request_streaming = 3;
+
+ // The URL of the output message type.
+ string response_type_url = 4;
+
+ // If true, the response is streamed.
+ bool response_streaming = 5;
+
+ // Any metadata attached to the method.
+ repeated Option options = 6;
+
+ // The source syntax of this method.
+ Syntax syntax = 7;
+}
+
+// Declares an API Interface to be included in this interface. The including
+// interface must redeclare all the methods from the included interface, but
+// documentation and options are inherited as follows:
+//
+// - If after comment and whitespace stripping, the documentation
+// string of the redeclared method is empty, it will be inherited
+// from the original method.
+//
+// - Each annotation belonging to the service config (http,
+// visibility) which is not set in the redeclared method will be
+// inherited.
+//
+// - If an http annotation is inherited, the path pattern will be
+// modified as follows. Any version prefix will be replaced by the
+// version of the including interface plus the [root][] path if
+// specified.
+//
+// Example of a simple mixin:
+//
+// package google.acl.v1;
+// service AccessControl {
+// // Get the underlying ACL object.
+// rpc GetAcl(GetAclRequest) returns (Acl) {
+// option (google.api.http).get = "/v1/{resource=**}:getAcl";
+// }
+// }
+//
+// package google.storage.v2;
+// service Storage {
+// rpc GetAcl(GetAclRequest) returns (Acl);
+//
+// // Get a data record.
+// rpc GetData(GetDataRequest) returns (Data) {
+// option (google.api.http).get = "/v2/{resource=**}";
+// }
+// }
+//
+// Example of a mixin configuration:
+//
+// apis:
+// - name: google.storage.v2.Storage
+// mixins:
+// - name: google.acl.v1.AccessControl
+//
+// The mixin construct implies that all methods in `AccessControl` are
+// also declared with same name and request/response types in
+// `Storage`. A documentation generator or annotation processor will
+// see the effective `Storage.GetAcl` method after inherting
+// documentation and annotations as follows:
+//
+// service Storage {
+// // Get the underlying ACL object.
+// rpc GetAcl(GetAclRequest) returns (Acl) {
+// option (google.api.http).get = "/v2/{resource=**}:getAcl";
+// }
+// ...
+// }
+//
+// Note how the version in the path pattern changed from `v1` to `v2`.
+//
+// If the `root` field in the mixin is specified, it should be a
+// relative path under which inherited HTTP paths are placed. Example:
+//
+// apis:
+// - name: google.storage.v2.Storage
+// mixins:
+// - name: google.acl.v1.AccessControl
+// root: acls
+//
+// This implies the following inherited HTTP annotation:
+//
+// service Storage {
+// // Get the underlying ACL object.
+// rpc GetAcl(GetAclRequest) returns (Acl) {
+// option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
+// }
+// ...
+// }
+message Mixin {
+ // The fully qualified name of the interface which is included.
+ string name = 1;
+
+ // If non-empty specifies a path under which inherited HTTP paths
+ // are rooted.
+ string root = 2;
+}
diff --git a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/compiler/plugin.proto b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/compiler/plugin.proto
index 6e4da2c19..e85c852fc 100644
--- a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/compiler/plugin.proto
+++ b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/compiler/plugin.proto
@@ -84,10 +84,14 @@ message CodeGeneratorRequest {
// the entire set into memory at once. However, as of this writing, this
// is not similarly optimized on protoc's end -- it will store all fields in
// memory at once before sending them to the plugin.
+ //
+ // Type names of fields and extensions in the FileDescriptorProto are always
+ // fully qualified.
repeated FileDescriptorProto proto_file = 15;
// The version number of protocol compiler.
optional Version compiler_version = 3;
+
}
// The plugin writes an encoded CodeGeneratorResponse to stdout.
diff --git a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/descriptor.proto b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/descriptor.proto
index 2cc496b57..1598ad7c1 100644
--- a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/descriptor.proto
+++ b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/descriptor.proto
@@ -45,6 +45,7 @@ option java_package = "com.google.protobuf";
option java_outer_classname = "DescriptorProtos";
option csharp_namespace = "Google.Protobuf.Reflection";
option objc_class_prefix = "GPB";
+option cc_enable_arenas = true;
// descriptor.proto must be optimized for speed because reflection-based
// algorithms don't work during bootstrapping.
@@ -101,6 +102,8 @@ message DescriptorProto {
message ExtensionRange {
optional int32 start = 1;
optional int32 end = 2;
+
+ optional ExtensionRangeOptions options = 3;
}
repeated ExtensionRange extension_range = 5;
@@ -121,6 +124,14 @@ message DescriptorProto {
repeated string reserved_name = 10;
}
+message ExtensionRangeOptions {
+ // The parser stores options it doesn't recognize here. See above.
+ repeated UninterpretedOption uninterpreted_option = 999;
+
+ // Clients can define custom options in extensions of this message. See above.
+ extensions 1000 to max;
+}
+
// Describes a field within a message.
message FieldDescriptorProto {
enum Type {
@@ -215,6 +226,26 @@ message EnumDescriptorProto {
repeated EnumValueDescriptorProto value = 2;
optional EnumOptions options = 3;
+
+ // Range of reserved numeric values. Reserved values may not be used by
+ // entries in the same enum. Reserved ranges may not overlap.
+ //
+ // Note that this is distinct from DescriptorProto.ReservedRange in that it
+ // is inclusive such that it can appropriately represent the entire int32
+ // domain.
+ message EnumReservedRange {
+ optional int32 start = 1; // Inclusive.
+ optional int32 end = 2; // Inclusive.
+ }
+
+ // Range of reserved numeric values. Reserved numeric values may not be used
+ // by enum values in the same enum declaration. Reserved ranges may not
+ // overlap.
+ repeated EnumReservedRange reserved_range = 4;
+
+ // Reserved enum value names, which may not be reused. A given name may only
+ // be reserved once.
+ repeated string reserved_name = 5;
}
// Describes a value within an enum.
@@ -351,6 +382,7 @@ message FileOptions {
optional bool cc_generic_services = 16 [default=false];
optional bool java_generic_services = 17 [default=false];
optional bool py_generic_services = 18 [default=false];
+ optional bool php_generic_services = 42 [default=false];
// Is this file deprecated?
// Depending on the target platform, this can emit Deprecated annotations
@@ -376,10 +408,21 @@ message FileOptions {
// to prefix the types/symbols defined.
optional string swift_prefix = 39;
- // The parser stores options it doesn't recognize here. See above.
+ // Sets the php class prefix which is prepended to all php generated classes
+ // from this .proto. Default is empty.
+ optional string php_class_prefix = 40;
+
+ // Use this option to change the namespace of php generated classes. Default
+ // is empty. When this option is empty, the package name will be used for
+ // determining the namespace.
+ optional string php_namespace = 41;
+
+ // The parser stores options it doesn't recognize here.
+ // See the documentation for the "Options" section above.
repeated UninterpretedOption uninterpreted_option = 999;
- // Clients can define custom options in extensions of this message. See above.
+ // Clients can define custom options in extensions of this message.
+ // See the documentation for the "Options" section above.
extensions 1000 to max;
//reserved 38;
@@ -441,7 +484,7 @@ message MessageOptions {
optional bool map_entry = 7;
//reserved 8; // javalite_serializable
-
+ //reserved 9; // javanano_as_lite
// The parser stores options it doesn't recognize here. See above.
repeated UninterpretedOption uninterpreted_option = 999;
@@ -473,13 +516,15 @@ message FieldOptions {
// The jstype option determines the JavaScript type used for values of the
// field. The option is permitted only for 64 bit integral and fixed types
- // (int64, uint64, sint64, fixed64, sfixed64). By default these types are
- // represented as JavaScript strings. This avoids loss of precision that can
- // happen when a large value is converted to a floating point JavaScript
- // numbers. Specifying JS_NUMBER for the jstype causes the generated
- // JavaScript code to use the JavaScript "number" type instead of strings.
- // This option is an enum to permit additional types to be added,
- // e.g. goog.math.Integer.
+ // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING
+ // is represented as JavaScript string, which avoids loss of precision that
+ // can happen when a large value is converted to a floating point JavaScript.
+ // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to
+ // use the JavaScript "number" type. The behavior of the default option
+ // JS_NORMAL is implementation dependent.
+ //
+ // This option is an enum to permit additional types to be added, e.g.
+ // goog.math.Integer.
optional JSType jstype = 6 [default = JS_NORMAL];
enum JSType {
// Use the default type.
@@ -561,6 +606,7 @@ message EnumOptions {
// is a formalization for deprecating enums.
optional bool deprecated = 3 [default=false];
+ //reserved 5; // javanano_as_lite
// The parser stores options it doesn't recognize here. See above.
repeated UninterpretedOption uninterpreted_option = 999;
diff --git a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/duration.proto b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/duration.proto
index 318922b79..8bbaa8b62 100644
--- a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/duration.proto
+++ b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/duration.proto
@@ -47,6 +47,8 @@ option objc_class_prefix = "GPB";
// two Timestamp values is a Duration and it can be added or subtracted
// from a Timestamp. Range is approximately +-10,000 years.
//
+// # Examples
+//
// Example 1: Compute Duration from two Timestamps in pseudo code.
//
// Timestamp start = ...;
@@ -87,11 +89,22 @@ option objc_class_prefix = "GPB";
// duration = Duration()
// duration.FromTimedelta(td)
//
+// # JSON Mapping
+//
+// In JSON format, the Duration type is encoded as a string rather than an
+// object, where the string ends in the suffix "s" (indicating seconds) and
+// is preceded by the number of seconds, with nanoseconds expressed as
+// fractional seconds. For example, 3 seconds with 0 nanoseconds should be
+// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should
+// be expressed in JSON format as "3.000000001s", and 3 seconds and 1
+// microsecond should be expressed in JSON format as "3.000001s".
+//
//
message Duration {
// Signed seconds of the span of time. Must be from -315,576,000,000
- // to +315,576,000,000 inclusive.
+ // to +315,576,000,000 inclusive. Note: these bounds are computed from:
+ // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
int64 seconds = 1;
// Signed fractions of a second at nanosecond resolution of the span
diff --git a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/field_mask.proto b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/field_mask.proto
index 994af79f0..121619814 100644
--- a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/field_mask.proto
+++ b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/field_mask.proto
@@ -240,6 +240,12 @@ option go_package = "types";
//
// Note that oneof type names ("test_oneof" in this case) cannot be used in
// paths.
+//
+// ## Field Mask Verification
+//
+// The implementation of the all the API methods, which have any FieldMask type
+// field in the request, should verify the included field paths, and return
+// `INVALID_ARGUMENT` error if any path is duplicated or unmappable.
message FieldMask {
// The set of field mask paths.
repeated string paths = 1;
diff --git a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/source_context.proto b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/source_context.proto
new file mode 100644
index 000000000..8654578c7
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/source_context.proto
@@ -0,0 +1,48 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// 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.
+
+syntax = "proto3";
+
+package google.protobuf;
+
+option csharp_namespace = "Google.Protobuf.WellKnownTypes";
+option java_package = "com.google.protobuf";
+option java_outer_classname = "SourceContextProto";
+option java_multiple_files = true;
+option objc_class_prefix = "GPB";
+option go_package = "types";
+
+// `SourceContext` represents information about the source of a
+// protobuf element, like the file in which it is defined.
+message SourceContext {
+ // The path-qualified name of the .proto file that contained the associated
+ // protobuf element. For example: `"google/protobuf/source_context.proto"`.
+ string file_name = 1;
+}
diff --git a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/timestamp.proto b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/timestamp.proto
index c544c83ee..150468b5e 100644
--- a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/timestamp.proto
+++ b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/timestamp.proto
@@ -52,6 +52,8 @@ option objc_class_prefix = "GPB";
// and from RFC 3339 date strings.
// See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
//
+// # Examples
+//
// Example 1: Compute Timestamp from POSIX `time()`.
//
// Timestamp timestamp;
@@ -92,6 +94,31 @@ option objc_class_prefix = "GPB";
// timestamp = Timestamp()
// timestamp.GetCurrentTime()
//
+// # JSON Mapping
+//
+// In JSON format, the Timestamp type is encoded as a string in the
+// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the
+// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
+// where {year} is always expressed using four digits while {month}, {day},
+// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional
+// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),
+// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone
+// is required. A proto3 JSON serializer should always use UTC (as indicated by
+// "Z") when printing the Timestamp type and a proto3 JSON parser should be
+// able to accept both UTC and other timezones (as indicated by an offset).
+//
+// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past
+// 01:30 UTC on January 15, 2017.
+//
+// In JavaScript, one can convert a Date object to this format using the
+// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString]
+// method. In Python, a standard `datetime.datetime` object can be converted
+// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)
+// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one
+// can use the Joda Time's [`ISODateTimeFormat.dateTime()`](
+// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--
+// ) to obtain a formatter capable of generating timestamps in this format.
+//
//
message Timestamp {
diff --git a/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/type.proto b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/type.proto
new file mode 100644
index 000000000..fcd15bfd7
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/protobuf/google/protobuf/type.proto
@@ -0,0 +1,187 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc. All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// 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.
+
+syntax = "proto3";
+
+package google.protobuf;
+
+import "google/protobuf/any.proto";
+import "google/protobuf/source_context.proto";
+
+option csharp_namespace = "Google.Protobuf.WellKnownTypes";
+option cc_enable_arenas = true;
+option java_package = "com.google.protobuf";
+option java_outer_classname = "TypeProto";
+option java_multiple_files = true;
+option objc_class_prefix = "GPB";
+option go_package = "types";
+
+// A protocol buffer message type.
+message Type {
+ // The fully qualified message name.
+ string name = 1;
+ // The list of fields.
+ repeated Field fields = 2;
+ // The list of types appearing in `oneof` definitions in this type.
+ repeated string oneofs = 3;
+ // The protocol buffer options.
+ repeated Option options = 4;
+ // The source context.
+ SourceContext source_context = 5;
+ // The source syntax.
+ Syntax syntax = 6;
+}
+
+// A single field of a message type.
+message Field {
+ // Basic field types.
+ enum Kind {
+ // Field type unknown.
+ TYPE_UNKNOWN = 0;
+ // Field type double.
+ TYPE_DOUBLE = 1;
+ // Field type float.
+ TYPE_FLOAT = 2;
+ // Field type int64.
+ TYPE_INT64 = 3;
+ // Field type uint64.
+ TYPE_UINT64 = 4;
+ // Field type int32.
+ TYPE_INT32 = 5;
+ // Field type fixed64.
+ TYPE_FIXED64 = 6;
+ // Field type fixed32.
+ TYPE_FIXED32 = 7;
+ // Field type bool.
+ TYPE_BOOL = 8;
+ // Field type string.
+ TYPE_STRING = 9;
+ // Field type group. Proto2 syntax only, and deprecated.
+ TYPE_GROUP = 10;
+ // Field type message.
+ TYPE_MESSAGE = 11;
+ // Field type bytes.
+ TYPE_BYTES = 12;
+ // Field type uint32.
+ TYPE_UINT32 = 13;
+ // Field type enum.
+ TYPE_ENUM = 14;
+ // Field type sfixed32.
+ TYPE_SFIXED32 = 15;
+ // Field type sfixed64.
+ TYPE_SFIXED64 = 16;
+ // Field type sint32.
+ TYPE_SINT32 = 17;
+ // Field type sint64.
+ TYPE_SINT64 = 18;
+ };
+
+ // Whether a field is optional, required, or repeated.
+ enum Cardinality {
+ // For fields with unknown cardinality.
+ CARDINALITY_UNKNOWN = 0;
+ // For optional fields.
+ CARDINALITY_OPTIONAL = 1;
+ // For required fields. Proto2 syntax only.
+ CARDINALITY_REQUIRED = 2;
+ // For repeated fields.
+ CARDINALITY_REPEATED = 3;
+ };
+
+ // The field type.
+ Kind kind = 1;
+ // The field cardinality.
+ Cardinality cardinality = 2;
+ // The field number.
+ int32 number = 3;
+ // The field name.
+ string name = 4;
+ // The field type URL, without the scheme, for message or enumeration
+ // types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
+ string type_url = 6;
+ // The index of the field type in `Type.oneofs`, for message or enumeration
+ // types. The first type has index 1; zero means the type is not in the list.
+ int32 oneof_index = 7;
+ // Whether to use alternative packed wire representation.
+ bool packed = 8;
+ // The protocol buffer options.
+ repeated Option options = 9;
+ // The field JSON name.
+ string json_name = 10;
+ // The string value of the default value of this field. Proto2 syntax only.
+ string default_value = 11;
+}
+
+// Enum type definition.
+message Enum {
+ // Enum type name.
+ string name = 1;
+ // Enum value definitions.
+ repeated EnumValue enumvalue = 2;
+ // Protocol buffer options.
+ repeated Option options = 3;
+ // The source context.
+ SourceContext source_context = 4;
+ // The source syntax.
+ Syntax syntax = 5;
+}
+
+// Enum value definition.
+message EnumValue {
+ // Enum value name.
+ string name = 1;
+ // Enum value number.
+ int32 number = 2;
+ // Protocol buffer options.
+ repeated Option options = 3;
+}
+
+// A protocol buffer option, which can be attached to a message, field,
+// enumeration, etc.
+message Option {
+ // The option's name. For protobuf built-in options (options defined in
+ // descriptor.proto), this is the short name. For example, `"map_entry"`.
+ // For custom options, it should be the fully-qualified name. For example,
+ // `"google.api.http"`.
+ string name = 1;
+ // The option's value packed in an Any message. If the value is a primitive,
+ // the corresponding wrapper type defined in google/protobuf/wrappers.proto
+ // should be used. If the value is an enum, it should be stored as an int32
+ // value using the google.protobuf.Int32Value type.
+ Any value = 2;
+}
+
+// The syntax in which a protocol buffer element is defined.
+enum Syntax {
+ // Syntax `proto2`.
+ SYNTAX_PROTO2 = 0;
+ // Syntax `proto3`.
+ SYNTAX_PROTO3 = 1;
+}
diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go
index e2703901b..44f893b77 100644
--- a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go
+++ b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go
@@ -1,35 +1,6 @@
-// Code generated by protoc-gen-gogo.
+// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: descriptor.proto
-// DO NOT EDIT!
-
-/*
-Package descriptor is a generated protocol buffer package.
-
-It is generated from these files:
- descriptor.proto
-
-It has these top-level messages:
- FileDescriptorSet
- FileDescriptorProto
- DescriptorProto
- FieldDescriptorProto
- OneofDescriptorProto
- EnumDescriptorProto
- EnumValueDescriptorProto
- ServiceDescriptorProto
- MethodDescriptorProto
- FileOptions
- MessageOptions
- FieldOptions
- OneofOptions
- EnumOptions
- EnumValueOptions
- ServiceOptions
- MethodOptions
- UninterpretedOption
- SourceCodeInfo
- GeneratedCodeInfo
-*/
+
package descriptor
import proto "github.com/gogo/protobuf/proto"
@@ -139,7 +110,7 @@ func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error {
return nil
}
func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) {
- return fileDescriptorDescriptor, []int{3, 0}
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{4, 0}
}
type FieldDescriptorProto_Label int32
@@ -179,7 +150,7 @@ func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error {
return nil
}
func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) {
- return fileDescriptorDescriptor, []int{3, 1}
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{4, 1}
}
// Generated classes can be optimized for speed or code size.
@@ -220,7 +191,7 @@ func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error {
return nil
}
func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) {
- return fileDescriptorDescriptor, []int{9, 0}
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{10, 0}
}
type FieldOptions_CType int32
@@ -260,7 +231,7 @@ func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error {
return nil
}
func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptorDescriptor, []int{11, 0}
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{12, 0}
}
type FieldOptions_JSType int32
@@ -302,7 +273,7 @@ func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error {
return nil
}
func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) {
- return fileDescriptorDescriptor, []int{11, 1}
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{12, 1}
}
// Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
@@ -344,20 +315,41 @@ func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error {
return nil
}
func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) {
- return fileDescriptorDescriptor, []int{16, 0}
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{17, 0}
}
// The protocol compiler can output a FileDescriptorSet containing the .proto
// files it parses.
type FileDescriptorSet struct {
- File []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ File []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *FileDescriptorSet) Reset() { *m = FileDescriptorSet{} }
+func (m *FileDescriptorSet) String() string { return proto.CompactTextString(m) }
+func (*FileDescriptorSet) ProtoMessage() {}
+func (*FileDescriptorSet) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{0}
+}
+func (m *FileDescriptorSet) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_FileDescriptorSet.Unmarshal(m, b)
+}
+func (m *FileDescriptorSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_FileDescriptorSet.Marshal(b, m, deterministic)
+}
+func (dst *FileDescriptorSet) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_FileDescriptorSet.Merge(dst, src)
+}
+func (m *FileDescriptorSet) XXX_Size() int {
+ return xxx_messageInfo_FileDescriptorSet.Size(m)
+}
+func (m *FileDescriptorSet) XXX_DiscardUnknown() {
+ xxx_messageInfo_FileDescriptorSet.DiscardUnknown(m)
}
-func (m *FileDescriptorSet) Reset() { *m = FileDescriptorSet{} }
-func (m *FileDescriptorSet) String() string { return proto.CompactTextString(m) }
-func (*FileDescriptorSet) ProtoMessage() {}
-func (*FileDescriptorSet) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{0} }
+var xxx_messageInfo_FileDescriptorSet proto.InternalMessageInfo
func (m *FileDescriptorSet) GetFile() []*FileDescriptorProto {
if m != nil {
@@ -390,14 +382,35 @@ type FileDescriptorProto struct {
SourceCodeInfo *SourceCodeInfo `protobuf:"bytes,9,opt,name=source_code_info,json=sourceCodeInfo" json:"source_code_info,omitempty"`
// The syntax of the proto file.
// The supported values are "proto2" and "proto3".
- Syntax *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Syntax *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *FileDescriptorProto) Reset() { *m = FileDescriptorProto{} }
-func (m *FileDescriptorProto) String() string { return proto.CompactTextString(m) }
-func (*FileDescriptorProto) ProtoMessage() {}
-func (*FileDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{1} }
+func (m *FileDescriptorProto) Reset() { *m = FileDescriptorProto{} }
+func (m *FileDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*FileDescriptorProto) ProtoMessage() {}
+func (*FileDescriptorProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{1}
+}
+func (m *FileDescriptorProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_FileDescriptorProto.Unmarshal(m, b)
+}
+func (m *FileDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_FileDescriptorProto.Marshal(b, m, deterministic)
+}
+func (dst *FileDescriptorProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_FileDescriptorProto.Merge(dst, src)
+}
+func (m *FileDescriptorProto) XXX_Size() int {
+ return xxx_messageInfo_FileDescriptorProto.Size(m)
+}
+func (m *FileDescriptorProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_FileDescriptorProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FileDescriptorProto proto.InternalMessageInfo
func (m *FileDescriptorProto) GetName() string {
if m != nil && m.Name != nil {
@@ -496,14 +509,35 @@ type DescriptorProto struct {
ReservedRange []*DescriptorProto_ReservedRange `protobuf:"bytes,9,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"`
// Reserved field names, which may not be used by fields in the same message.
// A given name may only be reserved once.
- ReservedName []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ ReservedName []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *DescriptorProto) Reset() { *m = DescriptorProto{} }
-func (m *DescriptorProto) String() string { return proto.CompactTextString(m) }
-func (*DescriptorProto) ProtoMessage() {}
-func (*DescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{2} }
+func (m *DescriptorProto) Reset() { *m = DescriptorProto{} }
+func (m *DescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*DescriptorProto) ProtoMessage() {}
+func (*DescriptorProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{2}
+}
+func (m *DescriptorProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DescriptorProto.Unmarshal(m, b)
+}
+func (m *DescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DescriptorProto.Marshal(b, m, deterministic)
+}
+func (dst *DescriptorProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DescriptorProto.Merge(dst, src)
+}
+func (m *DescriptorProto) XXX_Size() int {
+ return xxx_messageInfo_DescriptorProto.Size(m)
+}
+func (m *DescriptorProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_DescriptorProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DescriptorProto proto.InternalMessageInfo
func (m *DescriptorProto) GetName() string {
if m != nil && m.Name != nil {
@@ -576,17 +610,37 @@ func (m *DescriptorProto) GetReservedName() []string {
}
type DescriptorProto_ExtensionRange struct {
- Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
- End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
+ End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
+ Options *ExtensionRangeOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *DescriptorProto_ExtensionRange) Reset() { *m = DescriptorProto_ExtensionRange{} }
func (m *DescriptorProto_ExtensionRange) String() string { return proto.CompactTextString(m) }
func (*DescriptorProto_ExtensionRange) ProtoMessage() {}
func (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) {
- return fileDescriptorDescriptor, []int{2, 0}
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{2, 0}
+}
+func (m *DescriptorProto_ExtensionRange) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DescriptorProto_ExtensionRange.Unmarshal(m, b)
+}
+func (m *DescriptorProto_ExtensionRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DescriptorProto_ExtensionRange.Marshal(b, m, deterministic)
}
+func (dst *DescriptorProto_ExtensionRange) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DescriptorProto_ExtensionRange.Merge(dst, src)
+}
+func (m *DescriptorProto_ExtensionRange) XXX_Size() int {
+ return xxx_messageInfo_DescriptorProto_ExtensionRange.Size(m)
+}
+func (m *DescriptorProto_ExtensionRange) XXX_DiscardUnknown() {
+ xxx_messageInfo_DescriptorProto_ExtensionRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DescriptorProto_ExtensionRange proto.InternalMessageInfo
func (m *DescriptorProto_ExtensionRange) GetStart() int32 {
if m != nil && m.Start != nil {
@@ -602,22 +656,48 @@ func (m *DescriptorProto_ExtensionRange) GetEnd() int32 {
return 0
}
+func (m *DescriptorProto_ExtensionRange) GetOptions() *ExtensionRangeOptions {
+ if m != nil {
+ return m.Options
+ }
+ return nil
+}
+
// Range of reserved tag numbers. Reserved tag numbers may not be used by
// fields or extension ranges in the same message. Reserved ranges may
// not overlap.
type DescriptorProto_ReservedRange struct {
- Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
- End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
+ End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *DescriptorProto_ReservedRange) Reset() { *m = DescriptorProto_ReservedRange{} }
func (m *DescriptorProto_ReservedRange) String() string { return proto.CompactTextString(m) }
func (*DescriptorProto_ReservedRange) ProtoMessage() {}
func (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) {
- return fileDescriptorDescriptor, []int{2, 1}
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{2, 1}
+}
+func (m *DescriptorProto_ReservedRange) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_DescriptorProto_ReservedRange.Unmarshal(m, b)
+}
+func (m *DescriptorProto_ReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_DescriptorProto_ReservedRange.Marshal(b, m, deterministic)
+}
+func (dst *DescriptorProto_ReservedRange) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_DescriptorProto_ReservedRange.Merge(dst, src)
+}
+func (m *DescriptorProto_ReservedRange) XXX_Size() int {
+ return xxx_messageInfo_DescriptorProto_ReservedRange.Size(m)
+}
+func (m *DescriptorProto_ReservedRange) XXX_DiscardUnknown() {
+ xxx_messageInfo_DescriptorProto_ReservedRange.DiscardUnknown(m)
}
+var xxx_messageInfo_DescriptorProto_ReservedRange proto.InternalMessageInfo
+
func (m *DescriptorProto_ReservedRange) GetStart() int32 {
if m != nil && m.Start != nil {
return *m.Start
@@ -632,6 +712,54 @@ func (m *DescriptorProto_ReservedRange) GetEnd() int32 {
return 0
}
+type ExtensionRangeOptions struct {
+ // The parser stores options it doesn't recognize here. See above.
+ UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ proto.XXX_InternalExtensions `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ExtensionRangeOptions) Reset() { *m = ExtensionRangeOptions{} }
+func (m *ExtensionRangeOptions) String() string { return proto.CompactTextString(m) }
+func (*ExtensionRangeOptions) ProtoMessage() {}
+func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{3}
+}
+
+var extRange_ExtensionRangeOptions = []proto.ExtensionRange{
+ {Start: 1000, End: 536870911},
+}
+
+func (*ExtensionRangeOptions) ExtensionRangeArray() []proto.ExtensionRange {
+ return extRange_ExtensionRangeOptions
+}
+func (m *ExtensionRangeOptions) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ExtensionRangeOptions.Unmarshal(m, b)
+}
+func (m *ExtensionRangeOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ExtensionRangeOptions.Marshal(b, m, deterministic)
+}
+func (dst *ExtensionRangeOptions) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ExtensionRangeOptions.Merge(dst, src)
+}
+func (m *ExtensionRangeOptions) XXX_Size() int {
+ return xxx_messageInfo_ExtensionRangeOptions.Size(m)
+}
+func (m *ExtensionRangeOptions) XXX_DiscardUnknown() {
+ xxx_messageInfo_ExtensionRangeOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ExtensionRangeOptions proto.InternalMessageInfo
+
+func (m *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption {
+ if m != nil {
+ return m.UninterpretedOption
+ }
+ return nil
+}
+
// Describes a field within a message.
type FieldDescriptorProto struct {
Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
@@ -662,15 +790,36 @@ type FieldDescriptorProto struct {
// user has set a "json_name" option on this field, that option's value
// will be used. Otherwise, it's deduced from the field's name by converting
// it to camelCase.
- JsonName *string `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"`
- Options *FieldOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ JsonName *string `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"`
+ Options *FieldOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *FieldDescriptorProto) Reset() { *m = FieldDescriptorProto{} }
+func (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*FieldDescriptorProto) ProtoMessage() {}
+func (*FieldDescriptorProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{4}
+}
+func (m *FieldDescriptorProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_FieldDescriptorProto.Unmarshal(m, b)
+}
+func (m *FieldDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_FieldDescriptorProto.Marshal(b, m, deterministic)
+}
+func (dst *FieldDescriptorProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_FieldDescriptorProto.Merge(dst, src)
+}
+func (m *FieldDescriptorProto) XXX_Size() int {
+ return xxx_messageInfo_FieldDescriptorProto.Size(m)
+}
+func (m *FieldDescriptorProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_FieldDescriptorProto.DiscardUnknown(m)
}
-func (m *FieldDescriptorProto) Reset() { *m = FieldDescriptorProto{} }
-func (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) }
-func (*FieldDescriptorProto) ProtoMessage() {}
-func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{3} }
+var xxx_messageInfo_FieldDescriptorProto proto.InternalMessageInfo
func (m *FieldDescriptorProto) GetName() string {
if m != nil && m.Name != nil {
@@ -744,15 +893,36 @@ func (m *FieldDescriptorProto) GetOptions() *FieldOptions {
// Describes a oneof.
type OneofDescriptorProto struct {
- Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
- Options *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+ Options *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *OneofDescriptorProto) Reset() { *m = OneofDescriptorProto{} }
-func (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) }
-func (*OneofDescriptorProto) ProtoMessage() {}
-func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{4} }
+func (m *OneofDescriptorProto) Reset() { *m = OneofDescriptorProto{} }
+func (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*OneofDescriptorProto) ProtoMessage() {}
+func (*OneofDescriptorProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{5}
+}
+func (m *OneofDescriptorProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_OneofDescriptorProto.Unmarshal(m, b)
+}
+func (m *OneofDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_OneofDescriptorProto.Marshal(b, m, deterministic)
+}
+func (dst *OneofDescriptorProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_OneofDescriptorProto.Merge(dst, src)
+}
+func (m *OneofDescriptorProto) XXX_Size() int {
+ return xxx_messageInfo_OneofDescriptorProto.Size(m)
+}
+func (m *OneofDescriptorProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_OneofDescriptorProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OneofDescriptorProto proto.InternalMessageInfo
func (m *OneofDescriptorProto) GetName() string {
if m != nil && m.Name != nil {
@@ -770,16 +940,44 @@ func (m *OneofDescriptorProto) GetOptions() *OneofOptions {
// Describes an enum type.
type EnumDescriptorProto struct {
- Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
- Value []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"`
- Options *EnumOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+ Value []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"`
+ Options *EnumOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
+ // Range of reserved numeric values. Reserved numeric values may not be used
+ // by enum values in the same enum declaration. Reserved ranges may not
+ // overlap.
+ ReservedRange []*EnumDescriptorProto_EnumReservedRange `protobuf:"bytes,4,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"`
+ // Reserved enum value names, which may not be reused. A given name may only
+ // be reserved once.
+ ReservedName []string `protobuf:"bytes,5,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *EnumDescriptorProto) Reset() { *m = EnumDescriptorProto{} }
+func (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*EnumDescriptorProto) ProtoMessage() {}
+func (*EnumDescriptorProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{6}
+}
+func (m *EnumDescriptorProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_EnumDescriptorProto.Unmarshal(m, b)
+}
+func (m *EnumDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_EnumDescriptorProto.Marshal(b, m, deterministic)
+}
+func (dst *EnumDescriptorProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_EnumDescriptorProto.Merge(dst, src)
+}
+func (m *EnumDescriptorProto) XXX_Size() int {
+ return xxx_messageInfo_EnumDescriptorProto.Size(m)
+}
+func (m *EnumDescriptorProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_EnumDescriptorProto.DiscardUnknown(m)
}
-func (m *EnumDescriptorProto) Reset() { *m = EnumDescriptorProto{} }
-func (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) }
-func (*EnumDescriptorProto) ProtoMessage() {}
-func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{5} }
+var xxx_messageInfo_EnumDescriptorProto proto.InternalMessageInfo
func (m *EnumDescriptorProto) GetName() string {
if m != nil && m.Name != nil {
@@ -802,20 +1000,105 @@ func (m *EnumDescriptorProto) GetOptions() *EnumOptions {
return nil
}
+func (m *EnumDescriptorProto) GetReservedRange() []*EnumDescriptorProto_EnumReservedRange {
+ if m != nil {
+ return m.ReservedRange
+ }
+ return nil
+}
+
+func (m *EnumDescriptorProto) GetReservedName() []string {
+ if m != nil {
+ return m.ReservedName
+ }
+ return nil
+}
+
+// Range of reserved numeric values. Reserved values may not be used by
+// entries in the same enum. Reserved ranges may not overlap.
+//
+// Note that this is distinct from DescriptorProto.ReservedRange in that it
+// is inclusive such that it can appropriately represent the entire int32
+// domain.
+type EnumDescriptorProto_EnumReservedRange struct {
+ Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"`
+ End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *EnumDescriptorProto_EnumReservedRange) Reset() { *m = EnumDescriptorProto_EnumReservedRange{} }
+func (m *EnumDescriptorProto_EnumReservedRange) String() string { return proto.CompactTextString(m) }
+func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage() {}
+func (*EnumDescriptorProto_EnumReservedRange) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{6, 0}
+}
+func (m *EnumDescriptorProto_EnumReservedRange) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Unmarshal(m, b)
+}
+func (m *EnumDescriptorProto_EnumReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Marshal(b, m, deterministic)
+}
+func (dst *EnumDescriptorProto_EnumReservedRange) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Merge(dst, src)
+}
+func (m *EnumDescriptorProto_EnumReservedRange) XXX_Size() int {
+ return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Size(m)
+}
+func (m *EnumDescriptorProto_EnumReservedRange) XXX_DiscardUnknown() {
+ xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnumDescriptorProto_EnumReservedRange proto.InternalMessageInfo
+
+func (m *EnumDescriptorProto_EnumReservedRange) GetStart() int32 {
+ if m != nil && m.Start != nil {
+ return *m.Start
+ }
+ return 0
+}
+
+func (m *EnumDescriptorProto_EnumReservedRange) GetEnd() int32 {
+ if m != nil && m.End != nil {
+ return *m.End
+ }
+ return 0
+}
+
// Describes a value within an enum.
type EnumValueDescriptorProto struct {
- Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
- Number *int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"`
- Options *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+ Number *int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"`
+ Options *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *EnumValueDescriptorProto) Reset() { *m = EnumValueDescriptorProto{} }
func (m *EnumValueDescriptorProto) String() string { return proto.CompactTextString(m) }
func (*EnumValueDescriptorProto) ProtoMessage() {}
func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) {
- return fileDescriptorDescriptor, []int{6}
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{7}
+}
+func (m *EnumValueDescriptorProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_EnumValueDescriptorProto.Unmarshal(m, b)
+}
+func (m *EnumValueDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_EnumValueDescriptorProto.Marshal(b, m, deterministic)
+}
+func (dst *EnumValueDescriptorProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_EnumValueDescriptorProto.Merge(dst, src)
+}
+func (m *EnumValueDescriptorProto) XXX_Size() int {
+ return xxx_messageInfo_EnumValueDescriptorProto.Size(m)
}
+func (m *EnumValueDescriptorProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_EnumValueDescriptorProto.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnumValueDescriptorProto proto.InternalMessageInfo
func (m *EnumValueDescriptorProto) GetName() string {
if m != nil && m.Name != nil {
@@ -840,16 +1123,37 @@ func (m *EnumValueDescriptorProto) GetOptions() *EnumValueOptions {
// Describes a service.
type ServiceDescriptorProto struct {
- Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
- Method []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"`
- Options *ServiceOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+ Method []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"`
+ Options *ServiceOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *ServiceDescriptorProto) Reset() { *m = ServiceDescriptorProto{} }
+func (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*ServiceDescriptorProto) ProtoMessage() {}
+func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{8}
+}
+func (m *ServiceDescriptorProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ServiceDescriptorProto.Unmarshal(m, b)
+}
+func (m *ServiceDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ServiceDescriptorProto.Marshal(b, m, deterministic)
+}
+func (dst *ServiceDescriptorProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ServiceDescriptorProto.Merge(dst, src)
+}
+func (m *ServiceDescriptorProto) XXX_Size() int {
+ return xxx_messageInfo_ServiceDescriptorProto.Size(m)
+}
+func (m *ServiceDescriptorProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_ServiceDescriptorProto.DiscardUnknown(m)
}
-func (m *ServiceDescriptorProto) Reset() { *m = ServiceDescriptorProto{} }
-func (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) }
-func (*ServiceDescriptorProto) ProtoMessage() {}
-func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{7} }
+var xxx_messageInfo_ServiceDescriptorProto proto.InternalMessageInfo
func (m *ServiceDescriptorProto) GetName() string {
if m != nil && m.Name != nil {
@@ -883,14 +1187,35 @@ type MethodDescriptorProto struct {
// Identifies if client streams multiple client messages
ClientStreaming *bool `protobuf:"varint,5,opt,name=client_streaming,json=clientStreaming,def=0" json:"client_streaming,omitempty"`
// Identifies if server streams multiple server messages
- ServerStreaming *bool `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ ServerStreaming *bool `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *MethodDescriptorProto) Reset() { *m = MethodDescriptorProto{} }
+func (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) }
+func (*MethodDescriptorProto) ProtoMessage() {}
+func (*MethodDescriptorProto) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{9}
+}
+func (m *MethodDescriptorProto) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_MethodDescriptorProto.Unmarshal(m, b)
+}
+func (m *MethodDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_MethodDescriptorProto.Marshal(b, m, deterministic)
+}
+func (dst *MethodDescriptorProto) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MethodDescriptorProto.Merge(dst, src)
+}
+func (m *MethodDescriptorProto) XXX_Size() int {
+ return xxx_messageInfo_MethodDescriptorProto.Size(m)
+}
+func (m *MethodDescriptorProto) XXX_DiscardUnknown() {
+ xxx_messageInfo_MethodDescriptorProto.DiscardUnknown(m)
}
-func (m *MethodDescriptorProto) Reset() { *m = MethodDescriptorProto{} }
-func (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) }
-func (*MethodDescriptorProto) ProtoMessage() {}
-func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{8} }
+var xxx_messageInfo_MethodDescriptorProto proto.InternalMessageInfo
const Default_MethodDescriptorProto_ClientStreaming bool = false
const Default_MethodDescriptorProto_ServerStreaming bool = false
@@ -957,7 +1282,7 @@ type FileOptions struct {
// top-level extensions defined in the file.
JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"`
// This option does nothing.
- JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"`
+ JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` // Deprecated: Do not use.
// If set true, then the Java2 code generator will generate code that
// throws an exception whenever an attempt is made to assign a non-UTF-8
// byte sequence to a string field.
@@ -985,6 +1310,7 @@ type FileOptions struct {
CcGenericServices *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"`
JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"`
PyGenericServices *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"`
+ PhpGenericServices *bool `protobuf:"varint,42,opt,name=php_generic_services,json=phpGenericServices,def=0" json:"php_generic_services,omitempty"`
// Is this file deprecated?
// Depending on the target platform, this can emit Deprecated annotations
// for everything in the file, or it will be completely ignored; in the very
@@ -1003,16 +1329,28 @@ type FileOptions struct {
// defined. When this options is provided, they will use this value instead
// to prefix the types/symbols defined.
SwiftPrefix *string `protobuf:"bytes,39,opt,name=swift_prefix,json=swiftPrefix" json:"swift_prefix,omitempty"`
- // The parser stores options it doesn't recognize here. See above.
+ // Sets the php class prefix which is prepended to all php generated classes
+ // from this .proto. Default is empty.
+ PhpClassPrefix *string `protobuf:"bytes,40,opt,name=php_class_prefix,json=phpClassPrefix" json:"php_class_prefix,omitempty"`
+ // Use this option to change the namespace of php generated classes. Default
+ // is empty. When this option is empty, the package name will be used for
+ // determining the namespace.
+ PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"`
+ // The parser stores options it doesn't recognize here.
+ // See the documentation for the "Options" section above.
UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
proto.XXX_InternalExtensions `json:"-"`
XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *FileOptions) Reset() { *m = FileOptions{} }
-func (m *FileOptions) String() string { return proto.CompactTextString(m) }
-func (*FileOptions) ProtoMessage() {}
-func (*FileOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{9} }
+func (m *FileOptions) Reset() { *m = FileOptions{} }
+func (m *FileOptions) String() string { return proto.CompactTextString(m) }
+func (*FileOptions) ProtoMessage() {}
+func (*FileOptions) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{10}
+}
var extRange_FileOptions = []proto.ExtensionRange{
{Start: 1000, End: 536870911},
@@ -1021,6 +1359,23 @@ var extRange_FileOptions = []proto.ExtensionRange{
func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange {
return extRange_FileOptions
}
+func (m *FileOptions) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_FileOptions.Unmarshal(m, b)
+}
+func (m *FileOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_FileOptions.Marshal(b, m, deterministic)
+}
+func (dst *FileOptions) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_FileOptions.Merge(dst, src)
+}
+func (m *FileOptions) XXX_Size() int {
+ return xxx_messageInfo_FileOptions.Size(m)
+}
+func (m *FileOptions) XXX_DiscardUnknown() {
+ xxx_messageInfo_FileOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FileOptions proto.InternalMessageInfo
const Default_FileOptions_JavaMultipleFiles bool = false
const Default_FileOptions_JavaStringCheckUtf8 bool = false
@@ -1028,6 +1383,7 @@ const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPE
const Default_FileOptions_CcGenericServices bool = false
const Default_FileOptions_JavaGenericServices bool = false
const Default_FileOptions_PyGenericServices bool = false
+const Default_FileOptions_PhpGenericServices bool = false
const Default_FileOptions_Deprecated bool = false
const Default_FileOptions_CcEnableArenas bool = false
@@ -1052,6 +1408,7 @@ func (m *FileOptions) GetJavaMultipleFiles() bool {
return Default_FileOptions_JavaMultipleFiles
}
+// Deprecated: Do not use.
func (m *FileOptions) GetJavaGenerateEqualsAndHash() bool {
if m != nil && m.JavaGenerateEqualsAndHash != nil {
return *m.JavaGenerateEqualsAndHash
@@ -1101,6 +1458,13 @@ func (m *FileOptions) GetPyGenericServices() bool {
return Default_FileOptions_PyGenericServices
}
+func (m *FileOptions) GetPhpGenericServices() bool {
+ if m != nil && m.PhpGenericServices != nil {
+ return *m.PhpGenericServices
+ }
+ return Default_FileOptions_PhpGenericServices
+}
+
func (m *FileOptions) GetDeprecated() bool {
if m != nil && m.Deprecated != nil {
return *m.Deprecated
@@ -1136,6 +1500,20 @@ func (m *FileOptions) GetSwiftPrefix() string {
return ""
}
+func (m *FileOptions) GetPhpClassPrefix() string {
+ if m != nil && m.PhpClassPrefix != nil {
+ return *m.PhpClassPrefix
+ }
+ return ""
+}
+
+func (m *FileOptions) GetPhpNamespace() string {
+ if m != nil && m.PhpNamespace != nil {
+ return *m.PhpNamespace
+ }
+ return ""
+}
+
func (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption {
if m != nil {
return m.UninterpretedOption
@@ -1196,14 +1574,18 @@ type MessageOptions struct {
MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"`
// The parser stores options it doesn't recognize here. See above.
UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
proto.XXX_InternalExtensions `json:"-"`
XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *MessageOptions) Reset() { *m = MessageOptions{} }
-func (m *MessageOptions) String() string { return proto.CompactTextString(m) }
-func (*MessageOptions) ProtoMessage() {}
-func (*MessageOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{10} }
+func (m *MessageOptions) Reset() { *m = MessageOptions{} }
+func (m *MessageOptions) String() string { return proto.CompactTextString(m) }
+func (*MessageOptions) ProtoMessage() {}
+func (*MessageOptions) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{11}
+}
var extRange_MessageOptions = []proto.ExtensionRange{
{Start: 1000, End: 536870911},
@@ -1212,6 +1594,23 @@ var extRange_MessageOptions = []proto.ExtensionRange{
func (*MessageOptions) ExtensionRangeArray() []proto.ExtensionRange {
return extRange_MessageOptions
}
+func (m *MessageOptions) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_MessageOptions.Unmarshal(m, b)
+}
+func (m *MessageOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_MessageOptions.Marshal(b, m, deterministic)
+}
+func (dst *MessageOptions) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MessageOptions.Merge(dst, src)
+}
+func (m *MessageOptions) XXX_Size() int {
+ return xxx_messageInfo_MessageOptions.Size(m)
+}
+func (m *MessageOptions) XXX_DiscardUnknown() {
+ xxx_messageInfo_MessageOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MessageOptions proto.InternalMessageInfo
const Default_MessageOptions_MessageSetWireFormat bool = false
const Default_MessageOptions_NoStandardDescriptorAccessor bool = false
@@ -1266,13 +1665,15 @@ type FieldOptions struct {
Packed *bool `protobuf:"varint,2,opt,name=packed" json:"packed,omitempty"`
// The jstype option determines the JavaScript type used for values of the
// field. The option is permitted only for 64 bit integral and fixed types
- // (int64, uint64, sint64, fixed64, sfixed64). By default these types are
- // represented as JavaScript strings. This avoids loss of precision that can
- // happen when a large value is converted to a floating point JavaScript
- // numbers. Specifying JS_NUMBER for the jstype causes the generated
- // JavaScript code to use the JavaScript "number" type instead of strings.
- // This option is an enum to permit additional types to be added,
- // e.g. goog.math.Integer.
+ // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING
+ // is represented as JavaScript string, which avoids loss of precision that
+ // can happen when a large value is converted to a floating point JavaScript.
+ // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to
+ // use the JavaScript "number" type. The behavior of the default option
+ // JS_NORMAL is implementation dependent.
+ //
+ // This option is an enum to permit additional types to be added, e.g.
+ // goog.math.Integer.
Jstype *FieldOptions_JSType `protobuf:"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0" json:"jstype,omitempty"`
// Should this field be parsed lazily? Lazy applies only to message-type
// fields. It means that when the outer message is initially parsed, the
@@ -1312,14 +1713,18 @@ type FieldOptions struct {
Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"`
// The parser stores options it doesn't recognize here. See above.
UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
proto.XXX_InternalExtensions `json:"-"`
XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *FieldOptions) Reset() { *m = FieldOptions{} }
-func (m *FieldOptions) String() string { return proto.CompactTextString(m) }
-func (*FieldOptions) ProtoMessage() {}
-func (*FieldOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{11} }
+func (m *FieldOptions) Reset() { *m = FieldOptions{} }
+func (m *FieldOptions) String() string { return proto.CompactTextString(m) }
+func (*FieldOptions) ProtoMessage() {}
+func (*FieldOptions) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{12}
+}
var extRange_FieldOptions = []proto.ExtensionRange{
{Start: 1000, End: 536870911},
@@ -1328,6 +1733,23 @@ var extRange_FieldOptions = []proto.ExtensionRange{
func (*FieldOptions) ExtensionRangeArray() []proto.ExtensionRange {
return extRange_FieldOptions
}
+func (m *FieldOptions) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_FieldOptions.Unmarshal(m, b)
+}
+func (m *FieldOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_FieldOptions.Marshal(b, m, deterministic)
+}
+func (dst *FieldOptions) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_FieldOptions.Merge(dst, src)
+}
+func (m *FieldOptions) XXX_Size() int {
+ return xxx_messageInfo_FieldOptions.Size(m)
+}
+func (m *FieldOptions) XXX_DiscardUnknown() {
+ xxx_messageInfo_FieldOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FieldOptions proto.InternalMessageInfo
const Default_FieldOptions_Ctype FieldOptions_CType = FieldOptions_STRING
const Default_FieldOptions_Jstype FieldOptions_JSType = FieldOptions_JS_NORMAL
@@ -1387,14 +1809,18 @@ func (m *FieldOptions) GetUninterpretedOption() []*UninterpretedOption {
type OneofOptions struct {
// The parser stores options it doesn't recognize here. See above.
UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
proto.XXX_InternalExtensions `json:"-"`
XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *OneofOptions) Reset() { *m = OneofOptions{} }
-func (m *OneofOptions) String() string { return proto.CompactTextString(m) }
-func (*OneofOptions) ProtoMessage() {}
-func (*OneofOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{12} }
+func (m *OneofOptions) Reset() { *m = OneofOptions{} }
+func (m *OneofOptions) String() string { return proto.CompactTextString(m) }
+func (*OneofOptions) ProtoMessage() {}
+func (*OneofOptions) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{13}
+}
var extRange_OneofOptions = []proto.ExtensionRange{
{Start: 1000, End: 536870911},
@@ -1403,6 +1829,23 @@ var extRange_OneofOptions = []proto.ExtensionRange{
func (*OneofOptions) ExtensionRangeArray() []proto.ExtensionRange {
return extRange_OneofOptions
}
+func (m *OneofOptions) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_OneofOptions.Unmarshal(m, b)
+}
+func (m *OneofOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_OneofOptions.Marshal(b, m, deterministic)
+}
+func (dst *OneofOptions) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_OneofOptions.Merge(dst, src)
+}
+func (m *OneofOptions) XXX_Size() int {
+ return xxx_messageInfo_OneofOptions.Size(m)
+}
+func (m *OneofOptions) XXX_DiscardUnknown() {
+ xxx_messageInfo_OneofOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OneofOptions proto.InternalMessageInfo
func (m *OneofOptions) GetUninterpretedOption() []*UninterpretedOption {
if m != nil {
@@ -1422,14 +1865,18 @@ type EnumOptions struct {
Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
// The parser stores options it doesn't recognize here. See above.
UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
proto.XXX_InternalExtensions `json:"-"`
XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *EnumOptions) Reset() { *m = EnumOptions{} }
-func (m *EnumOptions) String() string { return proto.CompactTextString(m) }
-func (*EnumOptions) ProtoMessage() {}
-func (*EnumOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{13} }
+func (m *EnumOptions) Reset() { *m = EnumOptions{} }
+func (m *EnumOptions) String() string { return proto.CompactTextString(m) }
+func (*EnumOptions) ProtoMessage() {}
+func (*EnumOptions) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{14}
+}
var extRange_EnumOptions = []proto.ExtensionRange{
{Start: 1000, End: 536870911},
@@ -1438,6 +1885,23 @@ var extRange_EnumOptions = []proto.ExtensionRange{
func (*EnumOptions) ExtensionRangeArray() []proto.ExtensionRange {
return extRange_EnumOptions
}
+func (m *EnumOptions) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_EnumOptions.Unmarshal(m, b)
+}
+func (m *EnumOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_EnumOptions.Marshal(b, m, deterministic)
+}
+func (dst *EnumOptions) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_EnumOptions.Merge(dst, src)
+}
+func (m *EnumOptions) XXX_Size() int {
+ return xxx_messageInfo_EnumOptions.Size(m)
+}
+func (m *EnumOptions) XXX_DiscardUnknown() {
+ xxx_messageInfo_EnumOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnumOptions proto.InternalMessageInfo
const Default_EnumOptions_Deprecated bool = false
@@ -1470,14 +1934,18 @@ type EnumValueOptions struct {
Deprecated *bool `protobuf:"varint,1,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
// The parser stores options it doesn't recognize here. See above.
UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
proto.XXX_InternalExtensions `json:"-"`
XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *EnumValueOptions) Reset() { *m = EnumValueOptions{} }
-func (m *EnumValueOptions) String() string { return proto.CompactTextString(m) }
-func (*EnumValueOptions) ProtoMessage() {}
-func (*EnumValueOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{14} }
+func (m *EnumValueOptions) Reset() { *m = EnumValueOptions{} }
+func (m *EnumValueOptions) String() string { return proto.CompactTextString(m) }
+func (*EnumValueOptions) ProtoMessage() {}
+func (*EnumValueOptions) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{15}
+}
var extRange_EnumValueOptions = []proto.ExtensionRange{
{Start: 1000, End: 536870911},
@@ -1486,6 +1954,23 @@ var extRange_EnumValueOptions = []proto.ExtensionRange{
func (*EnumValueOptions) ExtensionRangeArray() []proto.ExtensionRange {
return extRange_EnumValueOptions
}
+func (m *EnumValueOptions) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_EnumValueOptions.Unmarshal(m, b)
+}
+func (m *EnumValueOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_EnumValueOptions.Marshal(b, m, deterministic)
+}
+func (dst *EnumValueOptions) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_EnumValueOptions.Merge(dst, src)
+}
+func (m *EnumValueOptions) XXX_Size() int {
+ return xxx_messageInfo_EnumValueOptions.Size(m)
+}
+func (m *EnumValueOptions) XXX_DiscardUnknown() {
+ xxx_messageInfo_EnumValueOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EnumValueOptions proto.InternalMessageInfo
const Default_EnumValueOptions_Deprecated bool = false
@@ -1511,14 +1996,18 @@ type ServiceOptions struct {
Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"`
// The parser stores options it doesn't recognize here. See above.
UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
proto.XXX_InternalExtensions `json:"-"`
XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *ServiceOptions) Reset() { *m = ServiceOptions{} }
-func (m *ServiceOptions) String() string { return proto.CompactTextString(m) }
-func (*ServiceOptions) ProtoMessage() {}
-func (*ServiceOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{15} }
+func (m *ServiceOptions) Reset() { *m = ServiceOptions{} }
+func (m *ServiceOptions) String() string { return proto.CompactTextString(m) }
+func (*ServiceOptions) ProtoMessage() {}
+func (*ServiceOptions) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{16}
+}
var extRange_ServiceOptions = []proto.ExtensionRange{
{Start: 1000, End: 536870911},
@@ -1527,6 +2016,23 @@ var extRange_ServiceOptions = []proto.ExtensionRange{
func (*ServiceOptions) ExtensionRangeArray() []proto.ExtensionRange {
return extRange_ServiceOptions
}
+func (m *ServiceOptions) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_ServiceOptions.Unmarshal(m, b)
+}
+func (m *ServiceOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_ServiceOptions.Marshal(b, m, deterministic)
+}
+func (dst *ServiceOptions) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_ServiceOptions.Merge(dst, src)
+}
+func (m *ServiceOptions) XXX_Size() int {
+ return xxx_messageInfo_ServiceOptions.Size(m)
+}
+func (m *ServiceOptions) XXX_DiscardUnknown() {
+ xxx_messageInfo_ServiceOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ServiceOptions proto.InternalMessageInfo
const Default_ServiceOptions_Deprecated bool = false
@@ -1553,14 +2059,18 @@ type MethodOptions struct {
IdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0" json:"idempotency_level,omitempty"`
// The parser stores options it doesn't recognize here. See above.
UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
proto.XXX_InternalExtensions `json:"-"`
XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *MethodOptions) Reset() { *m = MethodOptions{} }
-func (m *MethodOptions) String() string { return proto.CompactTextString(m) }
-func (*MethodOptions) ProtoMessage() {}
-func (*MethodOptions) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{16} }
+func (m *MethodOptions) Reset() { *m = MethodOptions{} }
+func (m *MethodOptions) String() string { return proto.CompactTextString(m) }
+func (*MethodOptions) ProtoMessage() {}
+func (*MethodOptions) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{17}
+}
var extRange_MethodOptions = []proto.ExtensionRange{
{Start: 1000, End: 536870911},
@@ -1569,6 +2079,23 @@ var extRange_MethodOptions = []proto.ExtensionRange{
func (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange {
return extRange_MethodOptions
}
+func (m *MethodOptions) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_MethodOptions.Unmarshal(m, b)
+}
+func (m *MethodOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_MethodOptions.Marshal(b, m, deterministic)
+}
+func (dst *MethodOptions) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MethodOptions.Merge(dst, src)
+}
+func (m *MethodOptions) XXX_Size() int {
+ return xxx_messageInfo_MethodOptions.Size(m)
+}
+func (m *MethodOptions) XXX_DiscardUnknown() {
+ xxx_messageInfo_MethodOptions.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MethodOptions proto.InternalMessageInfo
const Default_MethodOptions_Deprecated bool = false
const Default_MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN
@@ -1604,19 +2131,40 @@ type UninterpretedOption struct {
Name []*UninterpretedOption_NamePart `protobuf:"bytes,2,rep,name=name" json:"name,omitempty"`
// The value of the uninterpreted option, in whatever type the tokenizer
// identified it as during parsing. Exactly one of these should be set.
- IdentifierValue *string `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"`
- PositiveIntValue *uint64 `protobuf:"varint,4,opt,name=positive_int_value,json=positiveIntValue" json:"positive_int_value,omitempty"`
- NegativeIntValue *int64 `protobuf:"varint,5,opt,name=negative_int_value,json=negativeIntValue" json:"negative_int_value,omitempty"`
- DoubleValue *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"`
- StringValue []byte `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"`
- AggregateValue *string `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ IdentifierValue *string `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"`
+ PositiveIntValue *uint64 `protobuf:"varint,4,opt,name=positive_int_value,json=positiveIntValue" json:"positive_int_value,omitempty"`
+ NegativeIntValue *int64 `protobuf:"varint,5,opt,name=negative_int_value,json=negativeIntValue" json:"negative_int_value,omitempty"`
+ DoubleValue *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"`
+ StringValue []byte `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"`
+ AggregateValue *string `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *UninterpretedOption) Reset() { *m = UninterpretedOption{} }
-func (m *UninterpretedOption) String() string { return proto.CompactTextString(m) }
-func (*UninterpretedOption) ProtoMessage() {}
-func (*UninterpretedOption) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{17} }
+func (m *UninterpretedOption) Reset() { *m = UninterpretedOption{} }
+func (m *UninterpretedOption) String() string { return proto.CompactTextString(m) }
+func (*UninterpretedOption) ProtoMessage() {}
+func (*UninterpretedOption) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{18}
+}
+func (m *UninterpretedOption) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_UninterpretedOption.Unmarshal(m, b)
+}
+func (m *UninterpretedOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_UninterpretedOption.Marshal(b, m, deterministic)
+}
+func (dst *UninterpretedOption) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_UninterpretedOption.Merge(dst, src)
+}
+func (m *UninterpretedOption) XXX_Size() int {
+ return xxx_messageInfo_UninterpretedOption.Size(m)
+}
+func (m *UninterpretedOption) XXX_DiscardUnknown() {
+ xxx_messageInfo_UninterpretedOption.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UninterpretedOption proto.InternalMessageInfo
func (m *UninterpretedOption) GetName() []*UninterpretedOption_NamePart {
if m != nil {
@@ -1673,18 +2221,37 @@ func (m *UninterpretedOption) GetAggregateValue() string {
// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
// "foo.(bar.baz).qux".
type UninterpretedOption_NamePart struct {
- NamePart *string `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"`
- IsExtension *bool `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ NamePart *string `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"`
+ IsExtension *bool `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *UninterpretedOption_NamePart) Reset() { *m = UninterpretedOption_NamePart{} }
func (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) }
func (*UninterpretedOption_NamePart) ProtoMessage() {}
func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) {
- return fileDescriptorDescriptor, []int{17, 0}
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{18, 0}
+}
+func (m *UninterpretedOption_NamePart) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_UninterpretedOption_NamePart.Unmarshal(m, b)
+}
+func (m *UninterpretedOption_NamePart) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_UninterpretedOption_NamePart.Marshal(b, m, deterministic)
+}
+func (dst *UninterpretedOption_NamePart) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_UninterpretedOption_NamePart.Merge(dst, src)
+}
+func (m *UninterpretedOption_NamePart) XXX_Size() int {
+ return xxx_messageInfo_UninterpretedOption_NamePart.Size(m)
+}
+func (m *UninterpretedOption_NamePart) XXX_DiscardUnknown() {
+ xxx_messageInfo_UninterpretedOption_NamePart.DiscardUnknown(m)
}
+var xxx_messageInfo_UninterpretedOption_NamePart proto.InternalMessageInfo
+
func (m *UninterpretedOption_NamePart) GetNamePart() string {
if m != nil && m.NamePart != nil {
return *m.NamePart
@@ -1745,14 +2312,35 @@ type SourceCodeInfo struct {
// - Code which tries to interpret locations should probably be designed to
// ignore those that it doesn't understand, as more types of locations could
// be recorded in the future.
- Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SourceCodeInfo) Reset() { *m = SourceCodeInfo{} }
+func (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) }
+func (*SourceCodeInfo) ProtoMessage() {}
+func (*SourceCodeInfo) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{19}
+}
+func (m *SourceCodeInfo) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SourceCodeInfo.Unmarshal(m, b)
+}
+func (m *SourceCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SourceCodeInfo.Marshal(b, m, deterministic)
+}
+func (dst *SourceCodeInfo) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SourceCodeInfo.Merge(dst, src)
+}
+func (m *SourceCodeInfo) XXX_Size() int {
+ return xxx_messageInfo_SourceCodeInfo.Size(m)
+}
+func (m *SourceCodeInfo) XXX_DiscardUnknown() {
+ xxx_messageInfo_SourceCodeInfo.DiscardUnknown(m)
}
-func (m *SourceCodeInfo) Reset() { *m = SourceCodeInfo{} }
-func (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) }
-func (*SourceCodeInfo) ProtoMessage() {}
-func (*SourceCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{18} }
+var xxx_messageInfo_SourceCodeInfo proto.InternalMessageInfo
func (m *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location {
if m != nil {
@@ -1842,15 +2430,34 @@ type SourceCodeInfo_Location struct {
LeadingComments *string `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"`
TrailingComments *string `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"`
LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *SourceCodeInfo_Location) Reset() { *m = SourceCodeInfo_Location{} }
func (m *SourceCodeInfo_Location) String() string { return proto.CompactTextString(m) }
func (*SourceCodeInfo_Location) ProtoMessage() {}
func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) {
- return fileDescriptorDescriptor, []int{18, 0}
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{19, 0}
+}
+func (m *SourceCodeInfo_Location) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SourceCodeInfo_Location.Unmarshal(m, b)
+}
+func (m *SourceCodeInfo_Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SourceCodeInfo_Location.Marshal(b, m, deterministic)
+}
+func (dst *SourceCodeInfo_Location) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SourceCodeInfo_Location.Merge(dst, src)
+}
+func (m *SourceCodeInfo_Location) XXX_Size() int {
+ return xxx_messageInfo_SourceCodeInfo_Location.Size(m)
}
+func (m *SourceCodeInfo_Location) XXX_DiscardUnknown() {
+ xxx_messageInfo_SourceCodeInfo_Location.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SourceCodeInfo_Location proto.InternalMessageInfo
func (m *SourceCodeInfo_Location) GetPath() []int32 {
if m != nil {
@@ -1893,14 +2500,35 @@ func (m *SourceCodeInfo_Location) GetLeadingDetachedComments() []string {
type GeneratedCodeInfo struct {
// An Annotation connects some span of text in generated code to an element
// of its generating .proto file.
- Annotation []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ Annotation []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
-func (m *GeneratedCodeInfo) Reset() { *m = GeneratedCodeInfo{} }
-func (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) }
-func (*GeneratedCodeInfo) ProtoMessage() {}
-func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptorDescriptor, []int{19} }
+func (m *GeneratedCodeInfo) Reset() { *m = GeneratedCodeInfo{} }
+func (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) }
+func (*GeneratedCodeInfo) ProtoMessage() {}
+func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) {
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{20}
+}
+func (m *GeneratedCodeInfo) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GeneratedCodeInfo.Unmarshal(m, b)
+}
+func (m *GeneratedCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GeneratedCodeInfo.Marshal(b, m, deterministic)
+}
+func (dst *GeneratedCodeInfo) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GeneratedCodeInfo.Merge(dst, src)
+}
+func (m *GeneratedCodeInfo) XXX_Size() int {
+ return xxx_messageInfo_GeneratedCodeInfo.Size(m)
+}
+func (m *GeneratedCodeInfo) XXX_DiscardUnknown() {
+ xxx_messageInfo_GeneratedCodeInfo.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeneratedCodeInfo proto.InternalMessageInfo
func (m *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation {
if m != nil {
@@ -1921,16 +2549,35 @@ type GeneratedCodeInfo_Annotation struct {
// Identifies the ending offset in bytes in the generated code that
// relates to the identified offset. The end offset should be one past
// the last relevant byte (so the length of the text = end - begin).
- End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"`
- XXX_unrecognized []byte `json:"-"`
+ End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
}
func (m *GeneratedCodeInfo_Annotation) Reset() { *m = GeneratedCodeInfo_Annotation{} }
func (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) }
func (*GeneratedCodeInfo_Annotation) ProtoMessage() {}
func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) {
- return fileDescriptorDescriptor, []int{19, 0}
+ return fileDescriptor_descriptor_9588782fb9cbecd6, []int{20, 0}
+}
+func (m *GeneratedCodeInfo_Annotation) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_GeneratedCodeInfo_Annotation.Unmarshal(m, b)
+}
+func (m *GeneratedCodeInfo_Annotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_GeneratedCodeInfo_Annotation.Marshal(b, m, deterministic)
+}
+func (dst *GeneratedCodeInfo_Annotation) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_GeneratedCodeInfo_Annotation.Merge(dst, src)
}
+func (m *GeneratedCodeInfo_Annotation) XXX_Size() int {
+ return xxx_messageInfo_GeneratedCodeInfo_Annotation.Size(m)
+}
+func (m *GeneratedCodeInfo_Annotation) XXX_DiscardUnknown() {
+ xxx_messageInfo_GeneratedCodeInfo_Annotation.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GeneratedCodeInfo_Annotation proto.InternalMessageInfo
func (m *GeneratedCodeInfo_Annotation) GetPath() []int32 {
if m != nil {
@@ -1966,9 +2613,11 @@ func init() {
proto.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto")
proto.RegisterType((*DescriptorProto_ExtensionRange)(nil), "google.protobuf.DescriptorProto.ExtensionRange")
proto.RegisterType((*DescriptorProto_ReservedRange)(nil), "google.protobuf.DescriptorProto.ReservedRange")
+ proto.RegisterType((*ExtensionRangeOptions)(nil), "google.protobuf.ExtensionRangeOptions")
proto.RegisterType((*FieldDescriptorProto)(nil), "google.protobuf.FieldDescriptorProto")
proto.RegisterType((*OneofDescriptorProto)(nil), "google.protobuf.OneofDescriptorProto")
proto.RegisterType((*EnumDescriptorProto)(nil), "google.protobuf.EnumDescriptorProto")
+ proto.RegisterType((*EnumDescriptorProto_EnumReservedRange)(nil), "google.protobuf.EnumDescriptorProto.EnumReservedRange")
proto.RegisterType((*EnumValueDescriptorProto)(nil), "google.protobuf.EnumValueDescriptorProto")
proto.RegisterType((*ServiceDescriptorProto)(nil), "google.protobuf.ServiceDescriptorProto")
proto.RegisterType((*MethodDescriptorProto)(nil), "google.protobuf.MethodDescriptorProto")
@@ -1994,157 +2643,164 @@ func init() {
proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value)
}
-func init() { proto.RegisterFile("descriptor.proto", fileDescriptorDescriptor) }
-
-var fileDescriptorDescriptor = []byte{
- // 2379 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xcd, 0x73, 0xdb, 0xc6,
- 0x15, 0x37, 0xc1, 0x0f, 0x91, 0x8f, 0x14, 0xb5, 0x5a, 0x29, 0x36, 0x2c, 0xc7, 0xb1, 0xcc, 0xd8,
- 0xb5, 0x6c, 0xb7, 0x74, 0x46, 0xfe, 0x88, 0xa3, 0x74, 0xd2, 0xa1, 0x48, 0x58, 0xa1, 0x4b, 0x91,
- 0x2c, 0x48, 0x35, 0x76, 0x2e, 0x98, 0x15, 0xb0, 0xa4, 0x60, 0x83, 0x00, 0x02, 0x80, 0xb6, 0x95,
- 0x93, 0x67, 0x7a, 0xea, 0x7f, 0xd0, 0xe9, 0x74, 0x7a, 0xc8, 0x25, 0x33, 0xed, 0xbd, 0x87, 0xde,
- 0x7b, 0xed, 0x4c, 0xef, 0x3d, 0xf4, 0xd0, 0x99, 0xf6, 0x3f, 0xe8, 0xb5, 0xb3, 0xbb, 0x00, 0x08,
- 0x7e, 0xd9, 0x4a, 0x66, 0x9c, 0x9c, 0xa4, 0xfd, 0xbd, 0xdf, 0x7b, 0x78, 0xfb, 0xf6, 0x87, 0xdd,
- 0x87, 0x25, 0x20, 0x83, 0xfa, 0xba, 0x67, 0xba, 0x81, 0xe3, 0x55, 0x5d, 0xcf, 0x09, 0x1c, 0xbc,
- 0x36, 0x74, 0x9c, 0xa1, 0x45, 0xc5, 0xe8, 0x78, 0x3c, 0xa8, 0x1c, 0xc2, 0xfa, 0x23, 0xd3, 0xa2,
- 0x8d, 0x98, 0xd8, 0xa3, 0x01, 0x7e, 0x08, 0x99, 0x81, 0x69, 0x51, 0x39, 0xb5, 0x9d, 0xde, 0x29,
- 0xee, 0x5e, 0xab, 0xce, 0x38, 0x55, 0xa7, 0x3d, 0xba, 0x0c, 0x56, 0xb9, 0x47, 0xe5, 0xdf, 0x19,
- 0xd8, 0x58, 0x60, 0xc5, 0x18, 0x32, 0x36, 0x19, 0xb1, 0x88, 0xa9, 0x9d, 0x82, 0xca, 0xff, 0xc7,
- 0x32, 0xac, 0xb8, 0x44, 0x7f, 0x4e, 0x86, 0x54, 0x96, 0x38, 0x1c, 0x0d, 0xf1, 0x07, 0x00, 0x06,
- 0x75, 0xa9, 0x6d, 0x50, 0x5b, 0x3f, 0x95, 0xd3, 0xdb, 0xe9, 0x9d, 0x82, 0x9a, 0x40, 0xf0, 0x6d,
- 0x58, 0x77, 0xc7, 0xc7, 0x96, 0xa9, 0x6b, 0x09, 0x1a, 0x6c, 0xa7, 0x77, 0xb2, 0x2a, 0x12, 0x86,
- 0xc6, 0x84, 0x7c, 0x03, 0xd6, 0x5e, 0x52, 0xf2, 0x3c, 0x49, 0x2d, 0x72, 0x6a, 0x99, 0xc1, 0x09,
- 0x62, 0x1d, 0x4a, 0x23, 0xea, 0xfb, 0x64, 0x48, 0xb5, 0xe0, 0xd4, 0xa5, 0x72, 0x86, 0xcf, 0x7e,
- 0x7b, 0x6e, 0xf6, 0xb3, 0x33, 0x2f, 0x86, 0x5e, 0xfd, 0x53, 0x97, 0xe2, 0x1a, 0x14, 0xa8, 0x3d,
- 0x1e, 0x89, 0x08, 0xd9, 0x25, 0xf5, 0x53, 0xec, 0xf1, 0x68, 0x36, 0x4a, 0x9e, 0xb9, 0x85, 0x21,
- 0x56, 0x7c, 0xea, 0xbd, 0x30, 0x75, 0x2a, 0xe7, 0x78, 0x80, 0x1b, 0x73, 0x01, 0x7a, 0xc2, 0x3e,
- 0x1b, 0x23, 0xf2, 0xc3, 0x75, 0x28, 0xd0, 0x57, 0x01, 0xb5, 0x7d, 0xd3, 0xb1, 0xe5, 0x15, 0x1e,
- 0xe4, 0xfa, 0x82, 0x55, 0xa4, 0x96, 0x31, 0x1b, 0x62, 0xe2, 0x87, 0x1f, 0xc0, 0x8a, 0xe3, 0x06,
- 0xa6, 0x63, 0xfb, 0x72, 0x7e, 0x3b, 0xb5, 0x53, 0xdc, 0x7d, 0x7f, 0xa1, 0x10, 0x3a, 0x82, 0xa3,
- 0x46, 0x64, 0xdc, 0x04, 0xe4, 0x3b, 0x63, 0x4f, 0xa7, 0x9a, 0xee, 0x18, 0x54, 0x33, 0xed, 0x81,
- 0x23, 0x17, 0x78, 0x80, 0x2b, 0xf3, 0x13, 0xe1, 0xc4, 0xba, 0x63, 0xd0, 0xa6, 0x3d, 0x70, 0xd4,
- 0xb2, 0x3f, 0x35, 0xc6, 0xe7, 0x21, 0xe7, 0x9f, 0xda, 0x01, 0x79, 0x25, 0x97, 0xb8, 0x42, 0xc2,
- 0x51, 0xe5, 0x7f, 0x59, 0x58, 0x3b, 0x8b, 0xc4, 0x3e, 0x85, 0xec, 0x80, 0xcd, 0x52, 0x96, 0xbe,
- 0x4b, 0x0d, 0x84, 0xcf, 0x74, 0x11, 0x73, 0xdf, 0xb3, 0x88, 0x35, 0x28, 0xda, 0xd4, 0x0f, 0xa8,
- 0x21, 0x14, 0x91, 0x3e, 0xa3, 0xa6, 0x40, 0x38, 0xcd, 0x4b, 0x2a, 0xf3, 0xbd, 0x24, 0xf5, 0x04,
- 0xd6, 0xe2, 0x94, 0x34, 0x8f, 0xd8, 0xc3, 0x48, 0x9b, 0x77, 0xde, 0x96, 0x49, 0x55, 0x89, 0xfc,
- 0x54, 0xe6, 0xa6, 0x96, 0xe9, 0xd4, 0x18, 0x37, 0x00, 0x1c, 0x9b, 0x3a, 0x03, 0xcd, 0xa0, 0xba,
- 0x25, 0xe7, 0x97, 0x54, 0xa9, 0xc3, 0x28, 0x73, 0x55, 0x72, 0x04, 0xaa, 0x5b, 0xf8, 0x93, 0x89,
- 0xd4, 0x56, 0x96, 0x28, 0xe5, 0x50, 0xbc, 0x64, 0x73, 0x6a, 0x3b, 0x82, 0xb2, 0x47, 0x99, 0xee,
- 0xa9, 0x11, 0xce, 0xac, 0xc0, 0x93, 0xa8, 0xbe, 0x75, 0x66, 0x6a, 0xe8, 0x26, 0x26, 0xb6, 0xea,
- 0x25, 0x87, 0xf8, 0x43, 0x88, 0x01, 0x8d, 0xcb, 0x0a, 0xf8, 0x2e, 0x54, 0x8a, 0xc0, 0x36, 0x19,
- 0xd1, 0xad, 0x87, 0x50, 0x9e, 0x2e, 0x0f, 0xde, 0x84, 0xac, 0x1f, 0x10, 0x2f, 0xe0, 0x2a, 0xcc,
- 0xaa, 0x62, 0x80, 0x11, 0xa4, 0xa9, 0x6d, 0xf0, 0x5d, 0x2e, 0xab, 0xb2, 0x7f, 0xb7, 0x3e, 0x86,
- 0xd5, 0xa9, 0xc7, 0x9f, 0xd5, 0xb1, 0xf2, 0xbb, 0x1c, 0x6c, 0x2e, 0xd2, 0xdc, 0x42, 0xf9, 0x9f,
- 0x87, 0x9c, 0x3d, 0x1e, 0x1d, 0x53, 0x4f, 0x4e, 0xf3, 0x08, 0xe1, 0x08, 0xd7, 0x20, 0x6b, 0x91,
- 0x63, 0x6a, 0xc9, 0x99, 0xed, 0xd4, 0x4e, 0x79, 0xf7, 0xf6, 0x99, 0x54, 0x5d, 0x6d, 0x31, 0x17,
- 0x55, 0x78, 0xe2, 0xcf, 0x20, 0x13, 0x6e, 0x71, 0x2c, 0xc2, 0xad, 0xb3, 0x45, 0x60, 0x5a, 0x54,
- 0xb9, 0x1f, 0xbe, 0x04, 0x05, 0xf6, 0x57, 0xd4, 0x36, 0xc7, 0x73, 0xce, 0x33, 0x80, 0xd5, 0x15,
- 0x6f, 0x41, 0x9e, 0xcb, 0xcc, 0xa0, 0xd1, 0xd1, 0x10, 0x8f, 0xd9, 0xc2, 0x18, 0x74, 0x40, 0xc6,
- 0x56, 0xa0, 0xbd, 0x20, 0xd6, 0x98, 0x72, 0xc1, 0x14, 0xd4, 0x52, 0x08, 0xfe, 0x9a, 0x61, 0xf8,
- 0x0a, 0x14, 0x85, 0x2a, 0x4d, 0xdb, 0xa0, 0xaf, 0xf8, 0xee, 0x93, 0x55, 0x85, 0x50, 0x9b, 0x0c,
- 0x61, 0x8f, 0x7f, 0xe6, 0x3b, 0x76, 0xb4, 0xb4, 0xfc, 0x11, 0x0c, 0xe0, 0x8f, 0xff, 0x78, 0x76,
- 0xe3, 0xbb, 0xbc, 0x78, 0x7a, 0xb3, 0x5a, 0xac, 0xfc, 0x45, 0x82, 0x0c, 0x7f, 0xdf, 0xd6, 0xa0,
- 0xd8, 0x7f, 0xda, 0x55, 0xb4, 0x46, 0xe7, 0x68, 0xbf, 0xa5, 0xa0, 0x14, 0x2e, 0x03, 0x70, 0xe0,
- 0x51, 0xab, 0x53, 0xeb, 0x23, 0x29, 0x1e, 0x37, 0xdb, 0xfd, 0x07, 0xf7, 0x50, 0x3a, 0x76, 0x38,
- 0x12, 0x40, 0x26, 0x49, 0xb8, 0xbb, 0x8b, 0xb2, 0x18, 0x41, 0x49, 0x04, 0x68, 0x3e, 0x51, 0x1a,
- 0x0f, 0xee, 0xa1, 0xdc, 0x34, 0x72, 0x77, 0x17, 0xad, 0xe0, 0x55, 0x28, 0x70, 0x64, 0xbf, 0xd3,
- 0x69, 0xa1, 0x7c, 0x1c, 0xb3, 0xd7, 0x57, 0x9b, 0xed, 0x03, 0x54, 0x88, 0x63, 0x1e, 0xa8, 0x9d,
- 0xa3, 0x2e, 0x82, 0x38, 0xc2, 0xa1, 0xd2, 0xeb, 0xd5, 0x0e, 0x14, 0x54, 0x8c, 0x19, 0xfb, 0x4f,
- 0xfb, 0x4a, 0x0f, 0x95, 0xa6, 0xd2, 0xba, 0xbb, 0x8b, 0x56, 0xe3, 0x47, 0x28, 0xed, 0xa3, 0x43,
- 0x54, 0xc6, 0xeb, 0xb0, 0x2a, 0x1e, 0x11, 0x25, 0xb1, 0x36, 0x03, 0x3d, 0xb8, 0x87, 0xd0, 0x24,
- 0x11, 0x11, 0x65, 0x7d, 0x0a, 0x78, 0x70, 0x0f, 0xe1, 0x4a, 0x1d, 0xb2, 0x5c, 0x5d, 0x18, 0x43,
- 0xb9, 0x55, 0xdb, 0x57, 0x5a, 0x5a, 0xa7, 0xdb, 0x6f, 0x76, 0xda, 0xb5, 0x16, 0x4a, 0x4d, 0x30,
- 0x55, 0xf9, 0xd5, 0x51, 0x53, 0x55, 0x1a, 0x48, 0x4a, 0x62, 0x5d, 0xa5, 0xd6, 0x57, 0x1a, 0x28,
- 0x5d, 0xd1, 0x61, 0x73, 0xd1, 0x3e, 0xb3, 0xf0, 0xcd, 0x48, 0x2c, 0xb1, 0xb4, 0x64, 0x89, 0x79,
- 0xac, 0xb9, 0x25, 0xfe, 0x26, 0x05, 0x1b, 0x0b, 0xf6, 0xda, 0x85, 0x0f, 0xf9, 0x05, 0x64, 0x85,
- 0x44, 0xc5, 0xe9, 0x73, 0x73, 0xe1, 0xa6, 0xcd, 0x05, 0x3b, 0x77, 0x02, 0x71, 0xbf, 0xe4, 0x09,
- 0x9c, 0x5e, 0x72, 0x02, 0xb3, 0x10, 0x73, 0x49, 0xfe, 0x26, 0x05, 0xf2, 0xb2, 0xd8, 0x6f, 0xd9,
- 0x28, 0xa4, 0xa9, 0x8d, 0xe2, 0xd3, 0xd9, 0x04, 0xae, 0x2e, 0x9f, 0xc3, 0x5c, 0x16, 0xdf, 0xa6,
- 0xe0, 0xfc, 0xe2, 0x46, 0x65, 0x61, 0x0e, 0x9f, 0x41, 0x6e, 0x44, 0x83, 0x13, 0x27, 0x3a, 0xac,
- 0x7f, 0xb2, 0xe0, 0x08, 0x60, 0xe6, 0xd9, 0x5a, 0x85, 0x5e, 0xc9, 0x33, 0x24, 0xbd, 0xac, 0xdb,
- 0x10, 0xd9, 0xcc, 0x65, 0xfa, 0x5b, 0x09, 0xde, 0x5b, 0x18, 0x7c, 0x61, 0xa2, 0x97, 0x01, 0x4c,
- 0xdb, 0x1d, 0x07, 0xe2, 0x40, 0x16, 0xfb, 0x53, 0x81, 0x23, 0xfc, 0xdd, 0x67, 0x7b, 0xcf, 0x38,
- 0x88, 0xed, 0x69, 0x6e, 0x07, 0x01, 0x71, 0xc2, 0xc3, 0x49, 0xa2, 0x19, 0x9e, 0xe8, 0x07, 0x4b,
- 0x66, 0x3a, 0x77, 0xd6, 0x7d, 0x04, 0x48, 0xb7, 0x4c, 0x6a, 0x07, 0x9a, 0x1f, 0x78, 0x94, 0x8c,
- 0x4c, 0x7b, 0xc8, 0x37, 0xe0, 0xfc, 0x5e, 0x76, 0x40, 0x2c, 0x9f, 0xaa, 0x6b, 0xc2, 0xdc, 0x8b,
- 0xac, 0xcc, 0x83, 0x9f, 0x32, 0x5e, 0xc2, 0x23, 0x37, 0xe5, 0x21, 0xcc, 0xb1, 0x47, 0xe5, 0xcf,
- 0x2b, 0x50, 0x4c, 0xb4, 0x75, 0xf8, 0x2a, 0x94, 0x9e, 0x91, 0x17, 0x44, 0x8b, 0x5a, 0x75, 0x51,
- 0x89, 0x22, 0xc3, 0xba, 0x61, 0xbb, 0xfe, 0x11, 0x6c, 0x72, 0x8a, 0x33, 0x0e, 0xa8, 0xa7, 0xe9,
- 0x16, 0xf1, 0x7d, 0x5e, 0xb4, 0x3c, 0xa7, 0x62, 0x66, 0xeb, 0x30, 0x53, 0x3d, 0xb2, 0xe0, 0xfb,
- 0xb0, 0xc1, 0x3d, 0x46, 0x63, 0x2b, 0x30, 0x5d, 0x8b, 0x6a, 0xec, 0xe3, 0xc1, 0xe7, 0x1b, 0x71,
- 0x9c, 0xd9, 0x3a, 0x63, 0x1c, 0x86, 0x04, 0x96, 0x91, 0x8f, 0x1b, 0x70, 0x99, 0xbb, 0x0d, 0xa9,
- 0x4d, 0x3d, 0x12, 0x50, 0x8d, 0x7e, 0x35, 0x26, 0x96, 0xaf, 0x11, 0xdb, 0xd0, 0x4e, 0x88, 0x7f,
- 0x22, 0x6f, 0xb2, 0x00, 0xfb, 0x92, 0x9c, 0x52, 0x2f, 0x32, 0xe2, 0x41, 0xc8, 0x53, 0x38, 0xad,
- 0x66, 0x1b, 0x9f, 0x13, 0xff, 0x04, 0xef, 0xc1, 0x79, 0x1e, 0xc5, 0x0f, 0x3c, 0xd3, 0x1e, 0x6a,
- 0xfa, 0x09, 0xd5, 0x9f, 0x6b, 0xe3, 0x60, 0xf0, 0x50, 0xbe, 0x94, 0x7c, 0x3e, 0xcf, 0xb0, 0xc7,
- 0x39, 0x75, 0x46, 0x39, 0x0a, 0x06, 0x0f, 0x71, 0x0f, 0x4a, 0x6c, 0x31, 0x46, 0xe6, 0xd7, 0x54,
- 0x1b, 0x38, 0x1e, 0x3f, 0x59, 0xca, 0x0b, 0xde, 0xec, 0x44, 0x05, 0xab, 0x9d, 0xd0, 0xe1, 0xd0,
- 0x31, 0xe8, 0x5e, 0xb6, 0xd7, 0x55, 0x94, 0x86, 0x5a, 0x8c, 0xa2, 0x3c, 0x72, 0x3c, 0x26, 0xa8,
- 0xa1, 0x13, 0x17, 0xb8, 0x28, 0x04, 0x35, 0x74, 0xa2, 0xf2, 0xde, 0x87, 0x0d, 0x5d, 0x17, 0x73,
- 0x36, 0x75, 0x2d, 0x6c, 0xf1, 0x7d, 0x19, 0x4d, 0x15, 0x4b, 0xd7, 0x0f, 0x04, 0x21, 0xd4, 0xb8,
- 0x8f, 0x3f, 0x81, 0xf7, 0x26, 0xc5, 0x4a, 0x3a, 0xae, 0xcf, 0xcd, 0x72, 0xd6, 0xf5, 0x3e, 0x6c,
- 0xb8, 0xa7, 0xf3, 0x8e, 0x78, 0xea, 0x89, 0xee, 0xe9, 0xac, 0xdb, 0x75, 0xfe, 0xd9, 0xe6, 0x51,
- 0x9d, 0x04, 0xd4, 0x90, 0x2f, 0x24, 0xd9, 0x09, 0x03, 0xbe, 0x03, 0x48, 0xd7, 0x35, 0x6a, 0x93,
- 0x63, 0x8b, 0x6a, 0xc4, 0xa3, 0x36, 0xf1, 0xe5, 0x2b, 0x49, 0x72, 0x59, 0xd7, 0x15, 0x6e, 0xad,
- 0x71, 0x23, 0xbe, 0x05, 0xeb, 0xce, 0xf1, 0x33, 0x5d, 0x28, 0x4b, 0x73, 0x3d, 0x3a, 0x30, 0x5f,
- 0xc9, 0xd7, 0x78, 0x99, 0xd6, 0x98, 0x81, 0xeb, 0xaa, 0xcb, 0x61, 0x7c, 0x13, 0x90, 0xee, 0x9f,
- 0x10, 0xcf, 0xe5, 0x47, 0xbb, 0xef, 0x12, 0x9d, 0xca, 0xd7, 0x05, 0x55, 0xe0, 0xed, 0x08, 0x66,
- 0xca, 0xf6, 0x5f, 0x9a, 0x83, 0x20, 0x8a, 0x78, 0x43, 0x28, 0x9b, 0x63, 0x61, 0xb4, 0x27, 0xb0,
- 0x39, 0xb6, 0x4d, 0x3b, 0xa0, 0x9e, 0xeb, 0x51, 0xd6, 0xc4, 0x8b, 0x37, 0x51, 0xfe, 0xcf, 0xca,
- 0x92, 0x36, 0xfc, 0x28, 0xc9, 0x16, 0x02, 0x50, 0x37, 0xc6, 0xf3, 0x60, 0x65, 0x0f, 0x4a, 0x49,
- 0x5d, 0xe0, 0x02, 0x08, 0x65, 0xa0, 0x14, 0x3b, 0x63, 0xeb, 0x9d, 0x06, 0x3b, 0x1d, 0xbf, 0x54,
- 0x90, 0xc4, 0x4e, 0xe9, 0x56, 0xb3, 0xaf, 0x68, 0xea, 0x51, 0xbb, 0xdf, 0x3c, 0x54, 0x50, 0xfa,
- 0x56, 0x21, 0xff, 0xdf, 0x15, 0xf4, 0xfa, 0xf5, 0xeb, 0xd7, 0x52, 0xe5, 0x6f, 0x12, 0x94, 0xa7,
- 0x3b, 0x63, 0xfc, 0x73, 0xb8, 0x10, 0x7d, 0xc6, 0xfa, 0x34, 0xd0, 0x5e, 0x9a, 0x1e, 0x97, 0xea,
- 0x88, 0x88, 0xde, 0x32, 0xae, 0xf2, 0x66, 0xc8, 0xea, 0xd1, 0xe0, 0x0b, 0xd3, 0x63, 0x42, 0x1c,
- 0x91, 0x00, 0xb7, 0xe0, 0x8a, 0xed, 0x68, 0x7e, 0x40, 0x6c, 0x83, 0x78, 0x86, 0x36, 0xb9, 0x40,
- 0xd0, 0x88, 0xae, 0x53, 0xdf, 0x77, 0xc4, 0x11, 0x11, 0x47, 0x79, 0xdf, 0x76, 0x7a, 0x21, 0x79,
- 0xb2, 0x77, 0xd6, 0x42, 0xea, 0x8c, 0x22, 0xd2, 0xcb, 0x14, 0x71, 0x09, 0x0a, 0x23, 0xe2, 0x6a,
- 0xd4, 0x0e, 0xbc, 0x53, 0xde, 0xcf, 0xe5, 0xd5, 0xfc, 0x88, 0xb8, 0x0a, 0x1b, 0xbf, 0xbb, 0x35,
- 0x48, 0xd6, 0xf1, 0x9f, 0x69, 0x28, 0x25, 0x7b, 0x3a, 0xd6, 0x22, 0xeb, 0x7c, 0xff, 0x4e, 0xf1,
- 0x37, 0xfc, 0xc3, 0x37, 0x76, 0x80, 0xd5, 0x3a, 0xdb, 0xd8, 0xf7, 0x72, 0xa2, 0xd3, 0x52, 0x85,
- 0x27, 0x3b, 0x54, 0xd9, 0x3b, 0x4d, 0x45, 0xff, 0x9e, 0x57, 0xc3, 0x11, 0x3e, 0x80, 0xdc, 0x33,
- 0x9f, 0xc7, 0xce, 0xf1, 0xd8, 0xd7, 0xde, 0x1c, 0xfb, 0x71, 0x8f, 0x07, 0x2f, 0x3c, 0xee, 0x69,
- 0xed, 0x8e, 0x7a, 0x58, 0x6b, 0xa9, 0xa1, 0x3b, 0xbe, 0x08, 0x19, 0x8b, 0x7c, 0x7d, 0x3a, 0x7d,
- 0x04, 0x70, 0xe8, 0xac, 0x85, 0xbf, 0x08, 0x99, 0x97, 0x94, 0x3c, 0x9f, 0xde, 0x78, 0x39, 0xf4,
- 0x0e, 0xa5, 0x7f, 0x07, 0xb2, 0xbc, 0x5e, 0x18, 0x20, 0xac, 0x18, 0x3a, 0x87, 0xf3, 0x90, 0xa9,
- 0x77, 0x54, 0x26, 0x7f, 0x04, 0x25, 0x81, 0x6a, 0xdd, 0xa6, 0x52, 0x57, 0x90, 0x54, 0xb9, 0x0f,
- 0x39, 0x51, 0x04, 0xf6, 0x6a, 0xc4, 0x65, 0x40, 0xe7, 0xc2, 0x61, 0x18, 0x23, 0x15, 0x59, 0x8f,
- 0x0e, 0xf7, 0x15, 0x15, 0x49, 0xc9, 0xe5, 0xf5, 0xa1, 0x94, 0x6c, 0xe7, 0x7e, 0x18, 0x4d, 0xfd,
- 0x35, 0x05, 0xc5, 0x44, 0x7b, 0xc6, 0x1a, 0x03, 0x62, 0x59, 0xce, 0x4b, 0x8d, 0x58, 0x26, 0xf1,
- 0x43, 0x51, 0x00, 0x87, 0x6a, 0x0c, 0x39, 0xeb, 0xa2, 0xfd, 0x20, 0xc9, 0xff, 0x31, 0x05, 0x68,
- 0xb6, 0xb5, 0x9b, 0x49, 0x30, 0xf5, 0xa3, 0x26, 0xf8, 0x87, 0x14, 0x94, 0xa7, 0xfb, 0xb9, 0x99,
- 0xf4, 0xae, 0xfe, 0xa8, 0xe9, 0xfd, 0x4b, 0x82, 0xd5, 0xa9, 0x2e, 0xee, 0xac, 0xd9, 0x7d, 0x05,
- 0xeb, 0xa6, 0x41, 0x47, 0xae, 0x13, 0x50, 0x5b, 0x3f, 0xd5, 0x2c, 0xfa, 0x82, 0x5a, 0x72, 0x85,
- 0x6f, 0x14, 0x77, 0xde, 0xdc, 0x27, 0x56, 0x9b, 0x13, 0xbf, 0x16, 0x73, 0xdb, 0xdb, 0x68, 0x36,
- 0x94, 0xc3, 0x6e, 0xa7, 0xaf, 0xb4, 0xeb, 0x4f, 0xb5, 0xa3, 0xf6, 0x2f, 0xdb, 0x9d, 0x2f, 0xda,
- 0x2a, 0x32, 0x67, 0x68, 0xef, 0xf0, 0x55, 0xef, 0x02, 0x9a, 0x4d, 0x0a, 0x5f, 0x80, 0x45, 0x69,
- 0xa1, 0x73, 0x78, 0x03, 0xd6, 0xda, 0x1d, 0xad, 0xd7, 0x6c, 0x28, 0x9a, 0xf2, 0xe8, 0x91, 0x52,
- 0xef, 0xf7, 0xc4, 0x87, 0x73, 0xcc, 0xee, 0x4f, 0xbf, 0xd4, 0xbf, 0x4f, 0xc3, 0xc6, 0x82, 0x4c,
- 0x70, 0x2d, 0xec, 0xd9, 0xc5, 0x67, 0xc4, 0xcf, 0xce, 0x92, 0x7d, 0x95, 0x75, 0x05, 0x5d, 0xe2,
- 0x05, 0x61, 0x8b, 0x7f, 0x13, 0x58, 0x95, 0xec, 0xc0, 0x1c, 0x98, 0xd4, 0x0b, 0xef, 0x19, 0x44,
- 0x23, 0xbf, 0x36, 0xc1, 0xc5, 0x55, 0xc3, 0x4f, 0x01, 0xbb, 0x8e, 0x6f, 0x06, 0xe6, 0x0b, 0xaa,
- 0x99, 0x76, 0x74, 0x29, 0xc1, 0x1a, 0xfb, 0x8c, 0x8a, 0x22, 0x4b, 0xd3, 0x0e, 0x62, 0xb6, 0x4d,
- 0x87, 0x64, 0x86, 0xcd, 0x36, 0xf0, 0xb4, 0x8a, 0x22, 0x4b, 0xcc, 0xbe, 0x0a, 0x25, 0xc3, 0x19,
- 0xb3, 0x36, 0x49, 0xf0, 0xd8, 0x79, 0x91, 0x52, 0x8b, 0x02, 0x8b, 0x29, 0x61, 0x1f, 0x3b, 0xb9,
- 0x0d, 0x29, 0xa9, 0x45, 0x81, 0x09, 0xca, 0x0d, 0x58, 0x23, 0xc3, 0xa1, 0xc7, 0x82, 0x47, 0x81,
- 0x44, 0x67, 0x5e, 0x8e, 0x61, 0x4e, 0xdc, 0x7a, 0x0c, 0xf9, 0xa8, 0x0e, 0xec, 0x48, 0x66, 0x95,
- 0xd0, 0x5c, 0x71, 0x27, 0x25, 0xed, 0x14, 0xd4, 0xbc, 0x1d, 0x19, 0xaf, 0x42, 0xc9, 0xf4, 0xb5,
- 0xc9, 0xe5, 0xa8, 0xb4, 0x2d, 0xed, 0xe4, 0xd5, 0xa2, 0xe9, 0xc7, 0xb7, 0x61, 0x95, 0x6f, 0x25,
- 0x28, 0x4f, 0x5f, 0xee, 0xe2, 0x06, 0xe4, 0x2d, 0x47, 0x27, 0x5c, 0x5a, 0xe2, 0x97, 0x85, 0x9d,
- 0xb7, 0xdc, 0x07, 0x57, 0x5b, 0x21, 0x5f, 0x8d, 0x3d, 0xb7, 0xfe, 0x9e, 0x82, 0x7c, 0x04, 0xe3,
- 0xf3, 0x90, 0x71, 0x49, 0x70, 0xc2, 0xc3, 0x65, 0xf7, 0x25, 0x94, 0x52, 0xf9, 0x98, 0xe1, 0xbe,
- 0x4b, 0x6c, 0x2e, 0x81, 0x10, 0x67, 0x63, 0xb6, 0xae, 0x16, 0x25, 0x06, 0x6f, 0xfb, 0x9d, 0xd1,
- 0x88, 0xda, 0x81, 0x1f, 0xad, 0x6b, 0x88, 0xd7, 0x43, 0x18, 0xdf, 0x86, 0xf5, 0xc0, 0x23, 0xa6,
- 0x35, 0xc5, 0xcd, 0x70, 0x2e, 0x8a, 0x0c, 0x31, 0x79, 0x0f, 0x2e, 0x46, 0x71, 0x0d, 0x1a, 0x10,
- 0xfd, 0x84, 0x1a, 0x13, 0xa7, 0x1c, 0xbf, 0x39, 0xbc, 0x10, 0x12, 0x1a, 0xa1, 0x3d, 0xf2, 0xad,
- 0xfc, 0x23, 0x05, 0xeb, 0xd1, 0x87, 0x8a, 0x11, 0x17, 0xeb, 0x10, 0x80, 0xd8, 0xb6, 0x13, 0x24,
- 0xcb, 0x35, 0x2f, 0xe5, 0x39, 0xbf, 0x6a, 0x2d, 0x76, 0x52, 0x13, 0x01, 0xb6, 0x46, 0x00, 0x13,
- 0xcb, 0xd2, 0xb2, 0x5d, 0x81, 0x62, 0x78, 0x73, 0xcf, 0x7f, 0xfe, 0x11, 0x9f, 0xb6, 0x20, 0x20,
- 0xf6, 0x45, 0x83, 0x37, 0x21, 0x7b, 0x4c, 0x87, 0xa6, 0x1d, 0xde, 0x27, 0x8a, 0x41, 0x74, 0x4b,
- 0x99, 0x89, 0x6f, 0x29, 0xf7, 0x9f, 0xc0, 0x86, 0xee, 0x8c, 0x66, 0xd3, 0xdd, 0x47, 0x33, 0x9f,
- 0xd7, 0xfe, 0xe7, 0xa9, 0x2f, 0x61, 0xd2, 0x62, 0x7e, 0x23, 0xa5, 0x0f, 0xba, 0xfb, 0x7f, 0x92,
- 0xb6, 0x0e, 0x84, 0x5f, 0x37, 0x9a, 0xa6, 0x4a, 0x07, 0x16, 0xd5, 0x59, 0xea, 0xff, 0x0f, 0x00,
- 0x00, 0xff, 0xff, 0xa0, 0xbf, 0x63, 0x15, 0xd3, 0x1a, 0x00, 0x00,
+func init() { proto.RegisterFile("descriptor.proto", fileDescriptor_descriptor_9588782fb9cbecd6) }
+
+var fileDescriptor_descriptor_9588782fb9cbecd6 = []byte{
+ // 2487 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xcd, 0x6f, 0xdb, 0xc8,
+ 0x15, 0x5f, 0x7d, 0x5a, 0x7a, 0x92, 0xe5, 0xf1, 0xd8, 0x9b, 0x30, 0xde, 0x8f, 0x38, 0xda, 0x8f,
+ 0x38, 0x49, 0xab, 0x2c, 0x9c, 0xc4, 0xc9, 0x3a, 0xc5, 0xb6, 0xb2, 0xc4, 0x78, 0x95, 0xca, 0x92,
+ 0x4a, 0xc9, 0xdd, 0x64, 0x8b, 0x82, 0x18, 0x93, 0x23, 0x89, 0x09, 0x45, 0x72, 0x49, 0x2a, 0x89,
+ 0x83, 0x1e, 0x02, 0xf4, 0xd4, 0xff, 0xa0, 0x28, 0x8a, 0x1e, 0x7a, 0x59, 0xa0, 0xd7, 0x02, 0x05,
+ 0xda, 0x7b, 0xaf, 0x05, 0x7a, 0xef, 0xa1, 0x40, 0x0b, 0xb4, 0x7f, 0x42, 0x8f, 0xc5, 0xcc, 0x90,
+ 0x14, 0xf5, 0x95, 0x78, 0x17, 0x48, 0xf6, 0x64, 0xcf, 0xef, 0xfd, 0xde, 0xe3, 0x9b, 0x37, 0x6f,
+ 0xde, 0xbc, 0x19, 0x01, 0xd2, 0xa9, 0xa7, 0xb9, 0x86, 0xe3, 0xdb, 0x6e, 0xc5, 0x71, 0x6d, 0xdf,
+ 0xc6, 0x6b, 0x03, 0xdb, 0x1e, 0x98, 0x54, 0x8c, 0x4e, 0xc6, 0xfd, 0xf2, 0x11, 0xac, 0xdf, 0x33,
+ 0x4c, 0x5a, 0x8f, 0x88, 0x5d, 0xea, 0xe3, 0x3b, 0x90, 0xee, 0x1b, 0x26, 0x95, 0x12, 0xdb, 0xa9,
+ 0x9d, 0xc2, 0xee, 0x87, 0x95, 0x19, 0xa5, 0xca, 0xb4, 0x46, 0x87, 0xc1, 0x0a, 0xd7, 0x28, 0xff,
+ 0x3b, 0x0d, 0x1b, 0x0b, 0xa4, 0x18, 0x43, 0xda, 0x22, 0x23, 0x66, 0x31, 0xb1, 0x93, 0x57, 0xf8,
+ 0xff, 0x58, 0x82, 0x15, 0x87, 0x68, 0x8f, 0xc9, 0x80, 0x4a, 0x49, 0x0e, 0x87, 0x43, 0xfc, 0x3e,
+ 0x80, 0x4e, 0x1d, 0x6a, 0xe9, 0xd4, 0xd2, 0x4e, 0xa5, 0xd4, 0x76, 0x6a, 0x27, 0xaf, 0xc4, 0x10,
+ 0x7c, 0x0d, 0xd6, 0x9d, 0xf1, 0x89, 0x69, 0x68, 0x6a, 0x8c, 0x06, 0xdb, 0xa9, 0x9d, 0x8c, 0x82,
+ 0x84, 0xa0, 0x3e, 0x21, 0x5f, 0x86, 0xb5, 0xa7, 0x94, 0x3c, 0x8e, 0x53, 0x0b, 0x9c, 0x5a, 0x62,
+ 0x70, 0x8c, 0x58, 0x83, 0xe2, 0x88, 0x7a, 0x1e, 0x19, 0x50, 0xd5, 0x3f, 0x75, 0xa8, 0x94, 0xe6,
+ 0xb3, 0xdf, 0x9e, 0x9b, 0xfd, 0xec, 0xcc, 0x0b, 0x81, 0x56, 0xef, 0xd4, 0xa1, 0xb8, 0x0a, 0x79,
+ 0x6a, 0x8d, 0x47, 0xc2, 0x42, 0x66, 0x49, 0xfc, 0x64, 0x6b, 0x3c, 0x9a, 0xb5, 0x92, 0x63, 0x6a,
+ 0x81, 0x89, 0x15, 0x8f, 0xba, 0x4f, 0x0c, 0x8d, 0x4a, 0x59, 0x6e, 0xe0, 0xf2, 0x9c, 0x81, 0xae,
+ 0x90, 0xcf, 0xda, 0x08, 0xf5, 0x70, 0x0d, 0xf2, 0xf4, 0x99, 0x4f, 0x2d, 0xcf, 0xb0, 0x2d, 0x69,
+ 0x85, 0x1b, 0xf9, 0x68, 0xc1, 0x2a, 0x52, 0x53, 0x9f, 0x35, 0x31, 0xd1, 0xc3, 0x7b, 0xb0, 0x62,
+ 0x3b, 0xbe, 0x61, 0x5b, 0x9e, 0x94, 0xdb, 0x4e, 0xec, 0x14, 0x76, 0xdf, 0x5d, 0x98, 0x08, 0x6d,
+ 0xc1, 0x51, 0x42, 0x32, 0x6e, 0x00, 0xf2, 0xec, 0xb1, 0xab, 0x51, 0x55, 0xb3, 0x75, 0xaa, 0x1a,
+ 0x56, 0xdf, 0x96, 0xf2, 0xdc, 0xc0, 0xc5, 0xf9, 0x89, 0x70, 0x62, 0xcd, 0xd6, 0x69, 0xc3, 0xea,
+ 0xdb, 0x4a, 0xc9, 0x9b, 0x1a, 0xe3, 0x73, 0x90, 0xf5, 0x4e, 0x2d, 0x9f, 0x3c, 0x93, 0x8a, 0x3c,
+ 0x43, 0x82, 0x51, 0xf9, 0xcf, 0x59, 0x58, 0x3b, 0x4b, 0x8a, 0xdd, 0x85, 0x4c, 0x9f, 0xcd, 0x52,
+ 0x4a, 0x7e, 0x93, 0x18, 0x08, 0x9d, 0xe9, 0x20, 0x66, 0xbf, 0x65, 0x10, 0xab, 0x50, 0xb0, 0xa8,
+ 0xe7, 0x53, 0x5d, 0x64, 0x44, 0xea, 0x8c, 0x39, 0x05, 0x42, 0x69, 0x3e, 0xa5, 0xd2, 0xdf, 0x2a,
+ 0xa5, 0x1e, 0xc0, 0x5a, 0xe4, 0x92, 0xea, 0x12, 0x6b, 0x10, 0xe6, 0xe6, 0xf5, 0x57, 0x79, 0x52,
+ 0x91, 0x43, 0x3d, 0x85, 0xa9, 0x29, 0x25, 0x3a, 0x35, 0xc6, 0x75, 0x00, 0xdb, 0xa2, 0x76, 0x5f,
+ 0xd5, 0xa9, 0x66, 0x4a, 0xb9, 0x25, 0x51, 0x6a, 0x33, 0xca, 0x5c, 0x94, 0x6c, 0x81, 0x6a, 0x26,
+ 0xfe, 0x74, 0x92, 0x6a, 0x2b, 0x4b, 0x32, 0xe5, 0x48, 0x6c, 0xb2, 0xb9, 0x6c, 0x3b, 0x86, 0x92,
+ 0x4b, 0x59, 0xde, 0x53, 0x3d, 0x98, 0x59, 0x9e, 0x3b, 0x51, 0x79, 0xe5, 0xcc, 0x94, 0x40, 0x4d,
+ 0x4c, 0x6c, 0xd5, 0x8d, 0x0f, 0xf1, 0x07, 0x10, 0x01, 0x2a, 0x4f, 0x2b, 0xe0, 0x55, 0xa8, 0x18,
+ 0x82, 0x2d, 0x32, 0xa2, 0x5b, 0xcf, 0xa1, 0x34, 0x1d, 0x1e, 0xbc, 0x09, 0x19, 0xcf, 0x27, 0xae,
+ 0xcf, 0xb3, 0x30, 0xa3, 0x88, 0x01, 0x46, 0x90, 0xa2, 0x96, 0xce, 0xab, 0x5c, 0x46, 0x61, 0xff,
+ 0xe2, 0x1f, 0x4d, 0x26, 0x9c, 0xe2, 0x13, 0xfe, 0x78, 0x7e, 0x45, 0xa7, 0x2c, 0xcf, 0xce, 0x7b,
+ 0xeb, 0x36, 0xac, 0x4e, 0x4d, 0xe0, 0xac, 0x9f, 0x2e, 0xff, 0x02, 0xde, 0x5e, 0x68, 0x1a, 0x3f,
+ 0x80, 0xcd, 0xb1, 0x65, 0x58, 0x3e, 0x75, 0x1d, 0x97, 0xb2, 0x8c, 0x15, 0x9f, 0x92, 0xfe, 0xb3,
+ 0xb2, 0x24, 0xe7, 0x8e, 0xe3, 0x6c, 0x61, 0x45, 0xd9, 0x18, 0xcf, 0x83, 0x57, 0xf3, 0xb9, 0xff,
+ 0xae, 0xa0, 0x17, 0x2f, 0x5e, 0xbc, 0x48, 0x96, 0x7f, 0x9d, 0x85, 0xcd, 0x45, 0x7b, 0x66, 0xe1,
+ 0xf6, 0x3d, 0x07, 0x59, 0x6b, 0x3c, 0x3a, 0xa1, 0x2e, 0x0f, 0x52, 0x46, 0x09, 0x46, 0xb8, 0x0a,
+ 0x19, 0x93, 0x9c, 0x50, 0x53, 0x4a, 0x6f, 0x27, 0x76, 0x4a, 0xbb, 0xd7, 0xce, 0xb4, 0x2b, 0x2b,
+ 0x4d, 0xa6, 0xa2, 0x08, 0x4d, 0xfc, 0x19, 0xa4, 0x83, 0x12, 0xcd, 0x2c, 0x5c, 0x3d, 0x9b, 0x05,
+ 0xb6, 0x97, 0x14, 0xae, 0x87, 0xdf, 0x81, 0x3c, 0xfb, 0x2b, 0x72, 0x23, 0xcb, 0x7d, 0xce, 0x31,
+ 0x80, 0xe5, 0x05, 0xde, 0x82, 0x1c, 0xdf, 0x26, 0x3a, 0x0d, 0x8f, 0xb6, 0x68, 0xcc, 0x12, 0x4b,
+ 0xa7, 0x7d, 0x32, 0x36, 0x7d, 0xf5, 0x09, 0x31, 0xc7, 0x94, 0x27, 0x7c, 0x5e, 0x29, 0x06, 0xe0,
+ 0x4f, 0x19, 0x86, 0x2f, 0x42, 0x41, 0xec, 0x2a, 0xc3, 0xd2, 0xe9, 0x33, 0x5e, 0x3d, 0x33, 0x8a,
+ 0xd8, 0x68, 0x0d, 0x86, 0xb0, 0xcf, 0x3f, 0xf2, 0x6c, 0x2b, 0x4c, 0x4d, 0xfe, 0x09, 0x06, 0xf0,
+ 0xcf, 0xdf, 0x9e, 0x2d, 0xdc, 0xef, 0x2d, 0x9e, 0xde, 0x6c, 0x4e, 0x95, 0xff, 0x94, 0x84, 0x34,
+ 0xaf, 0x17, 0x6b, 0x50, 0xe8, 0x3d, 0xec, 0xc8, 0x6a, 0xbd, 0x7d, 0x7c, 0xd0, 0x94, 0x51, 0x02,
+ 0x97, 0x00, 0x38, 0x70, 0xaf, 0xd9, 0xae, 0xf6, 0x50, 0x32, 0x1a, 0x37, 0x5a, 0xbd, 0xbd, 0x9b,
+ 0x28, 0x15, 0x29, 0x1c, 0x0b, 0x20, 0x1d, 0x27, 0xdc, 0xd8, 0x45, 0x19, 0x8c, 0xa0, 0x28, 0x0c,
+ 0x34, 0x1e, 0xc8, 0xf5, 0xbd, 0x9b, 0x28, 0x3b, 0x8d, 0xdc, 0xd8, 0x45, 0x2b, 0x78, 0x15, 0xf2,
+ 0x1c, 0x39, 0x68, 0xb7, 0x9b, 0x28, 0x17, 0xd9, 0xec, 0xf6, 0x94, 0x46, 0xeb, 0x10, 0xe5, 0x23,
+ 0x9b, 0x87, 0x4a, 0xfb, 0xb8, 0x83, 0x20, 0xb2, 0x70, 0x24, 0x77, 0xbb, 0xd5, 0x43, 0x19, 0x15,
+ 0x22, 0xc6, 0xc1, 0xc3, 0x9e, 0xdc, 0x45, 0xc5, 0x29, 0xb7, 0x6e, 0xec, 0xa2, 0xd5, 0xe8, 0x13,
+ 0x72, 0xeb, 0xf8, 0x08, 0x95, 0xf0, 0x3a, 0xac, 0x8a, 0x4f, 0x84, 0x4e, 0xac, 0xcd, 0x40, 0x7b,
+ 0x37, 0x11, 0x9a, 0x38, 0x22, 0xac, 0xac, 0x4f, 0x01, 0x7b, 0x37, 0x11, 0x2e, 0xd7, 0x20, 0xc3,
+ 0xb3, 0x0b, 0x63, 0x28, 0x35, 0xab, 0x07, 0x72, 0x53, 0x6d, 0x77, 0x7a, 0x8d, 0x76, 0xab, 0xda,
+ 0x44, 0x89, 0x09, 0xa6, 0xc8, 0x3f, 0x39, 0x6e, 0x28, 0x72, 0x1d, 0x25, 0xe3, 0x58, 0x47, 0xae,
+ 0xf6, 0xe4, 0x3a, 0x4a, 0x95, 0x35, 0xd8, 0x5c, 0x54, 0x27, 0x17, 0xee, 0x8c, 0xd8, 0x12, 0x27,
+ 0x97, 0x2c, 0x31, 0xb7, 0x35, 0xb7, 0xc4, 0xff, 0x4a, 0xc2, 0xc6, 0x82, 0xb3, 0x62, 0xe1, 0x47,
+ 0x7e, 0x08, 0x19, 0x91, 0xa2, 0xe2, 0xf4, 0xbc, 0xb2, 0xf0, 0xd0, 0xe1, 0x09, 0x3b, 0x77, 0x82,
+ 0x72, 0xbd, 0x78, 0x07, 0x91, 0x5a, 0xd2, 0x41, 0x30, 0x13, 0x73, 0x35, 0xfd, 0xe7, 0x73, 0x35,
+ 0x5d, 0x1c, 0x7b, 0x7b, 0x67, 0x39, 0xf6, 0x38, 0xf6, 0xcd, 0x6a, 0x7b, 0x66, 0x41, 0x6d, 0xbf,
+ 0x0b, 0xeb, 0x73, 0x86, 0xce, 0x5c, 0x63, 0x7f, 0x99, 0x00, 0x69, 0x59, 0x70, 0x5e, 0x51, 0xe9,
+ 0x92, 0x53, 0x95, 0xee, 0xee, 0x6c, 0x04, 0x2f, 0x2d, 0x5f, 0x84, 0xb9, 0xb5, 0xfe, 0x3a, 0x01,
+ 0xe7, 0x16, 0x77, 0x8a, 0x0b, 0x7d, 0xf8, 0x0c, 0xb2, 0x23, 0xea, 0x0f, 0xed, 0xb0, 0x5b, 0xfa,
+ 0x78, 0xc1, 0x19, 0xcc, 0xc4, 0xb3, 0x8b, 0x1d, 0x68, 0xc5, 0x0f, 0xf1, 0xd4, 0xb2, 0x76, 0x4f,
+ 0x78, 0x33, 0xe7, 0xe9, 0xaf, 0x92, 0xf0, 0xf6, 0x42, 0xe3, 0x0b, 0x1d, 0x7d, 0x0f, 0xc0, 0xb0,
+ 0x9c, 0xb1, 0x2f, 0x3a, 0x22, 0x51, 0x60, 0xf3, 0x1c, 0xe1, 0xc5, 0x8b, 0x15, 0xcf, 0xb1, 0x1f,
+ 0xc9, 0x53, 0x5c, 0x0e, 0x02, 0xe2, 0x84, 0x3b, 0x13, 0x47, 0xd3, 0xdc, 0xd1, 0xf7, 0x97, 0xcc,
+ 0x74, 0x2e, 0x31, 0x3f, 0x01, 0xa4, 0x99, 0x06, 0xb5, 0x7c, 0xd5, 0xf3, 0x5d, 0x4a, 0x46, 0x86,
+ 0x35, 0xe0, 0x27, 0x48, 0x6e, 0x3f, 0xd3, 0x27, 0xa6, 0x47, 0x95, 0x35, 0x21, 0xee, 0x86, 0x52,
+ 0xa6, 0xc1, 0x13, 0xc8, 0x8d, 0x69, 0x64, 0xa7, 0x34, 0x84, 0x38, 0xd2, 0x28, 0xff, 0x31, 0x07,
+ 0x85, 0x58, 0x5f, 0x8d, 0x2f, 0x41, 0xf1, 0x11, 0x79, 0x42, 0xd4, 0xf0, 0xae, 0x24, 0x22, 0x51,
+ 0x60, 0x58, 0x27, 0xb8, 0x2f, 0x7d, 0x02, 0x9b, 0x9c, 0x62, 0x8f, 0x7d, 0xea, 0xaa, 0x9a, 0x49,
+ 0x3c, 0x8f, 0x07, 0x2d, 0xc7, 0xa9, 0x98, 0xc9, 0xda, 0x4c, 0x54, 0x0b, 0x25, 0xf8, 0x16, 0x6c,
+ 0x70, 0x8d, 0xd1, 0xd8, 0xf4, 0x0d, 0xc7, 0xa4, 0x2a, 0xbb, 0xbd, 0x79, 0xfc, 0x24, 0x89, 0x3c,
+ 0x5b, 0x67, 0x8c, 0xa3, 0x80, 0xc0, 0x3c, 0xf2, 0x70, 0x1d, 0xde, 0xe3, 0x6a, 0x03, 0x6a, 0x51,
+ 0x97, 0xf8, 0x54, 0xa5, 0x5f, 0x8d, 0x89, 0xe9, 0xa9, 0xc4, 0xd2, 0xd5, 0x21, 0xf1, 0x86, 0xd2,
+ 0x26, 0x33, 0x70, 0x90, 0x94, 0x12, 0xca, 0x05, 0x46, 0x3c, 0x0c, 0x78, 0x32, 0xa7, 0x55, 0x2d,
+ 0xfd, 0x73, 0xe2, 0x0d, 0xf1, 0x3e, 0x9c, 0xe3, 0x56, 0x3c, 0xdf, 0x35, 0xac, 0x81, 0xaa, 0x0d,
+ 0xa9, 0xf6, 0x58, 0x1d, 0xfb, 0xfd, 0x3b, 0xd2, 0x3b, 0xf1, 0xef, 0x73, 0x0f, 0xbb, 0x9c, 0x53,
+ 0x63, 0x94, 0x63, 0xbf, 0x7f, 0x07, 0x77, 0xa1, 0xc8, 0x16, 0x63, 0x64, 0x3c, 0xa7, 0x6a, 0xdf,
+ 0x76, 0xf9, 0xd1, 0x58, 0x5a, 0x50, 0x9a, 0x62, 0x11, 0xac, 0xb4, 0x03, 0x85, 0x23, 0x5b, 0xa7,
+ 0xfb, 0x99, 0x6e, 0x47, 0x96, 0xeb, 0x4a, 0x21, 0xb4, 0x72, 0xcf, 0x76, 0x59, 0x42, 0x0d, 0xec,
+ 0x28, 0xc0, 0x05, 0x91, 0x50, 0x03, 0x3b, 0x0c, 0xef, 0x2d, 0xd8, 0xd0, 0x34, 0x31, 0x67, 0x43,
+ 0x53, 0x83, 0x3b, 0x96, 0x27, 0xa1, 0xa9, 0x60, 0x69, 0xda, 0xa1, 0x20, 0x04, 0x39, 0xee, 0xe1,
+ 0x4f, 0xe1, 0xed, 0x49, 0xb0, 0xe2, 0x8a, 0xeb, 0x73, 0xb3, 0x9c, 0x55, 0xbd, 0x05, 0x1b, 0xce,
+ 0xe9, 0xbc, 0x22, 0x9e, 0xfa, 0xa2, 0x73, 0x3a, 0xab, 0x76, 0x1b, 0x36, 0x9d, 0xa1, 0x33, 0xaf,
+ 0x77, 0x35, 0xae, 0x87, 0x9d, 0xa1, 0x33, 0xab, 0xf8, 0x11, 0xbf, 0x70, 0xbb, 0x54, 0x23, 0x3e,
+ 0xd5, 0xa5, 0xf3, 0x71, 0x7a, 0x4c, 0x80, 0xaf, 0x03, 0xd2, 0x34, 0x95, 0x5a, 0xe4, 0xc4, 0xa4,
+ 0x2a, 0x71, 0xa9, 0x45, 0x3c, 0xe9, 0x62, 0x9c, 0x5c, 0xd2, 0x34, 0x99, 0x4b, 0xab, 0x5c, 0x88,
+ 0xaf, 0xc2, 0xba, 0x7d, 0xf2, 0x48, 0x13, 0x29, 0xa9, 0x3a, 0x2e, 0xed, 0x1b, 0xcf, 0xa4, 0x0f,
+ 0x79, 0x7c, 0xd7, 0x98, 0x80, 0x27, 0x64, 0x87, 0xc3, 0xf8, 0x0a, 0x20, 0xcd, 0x1b, 0x12, 0xd7,
+ 0xe1, 0x35, 0xd9, 0x73, 0x88, 0x46, 0xa5, 0x8f, 0x04, 0x55, 0xe0, 0xad, 0x10, 0x66, 0x5b, 0xc2,
+ 0x7b, 0x6a, 0xf4, 0xfd, 0xd0, 0xe2, 0x65, 0xb1, 0x25, 0x38, 0x16, 0x58, 0xdb, 0x01, 0xc4, 0x42,
+ 0x31, 0xf5, 0xe1, 0x1d, 0x4e, 0x2b, 0x39, 0x43, 0x27, 0xfe, 0xdd, 0x0f, 0x60, 0x95, 0x31, 0x27,
+ 0x1f, 0xbd, 0x22, 0x1a, 0x32, 0x67, 0x18, 0xfb, 0xe2, 0x6b, 0xeb, 0x8d, 0xcb, 0xfb, 0x50, 0x8c,
+ 0xe7, 0x27, 0xce, 0x83, 0xc8, 0x50, 0x94, 0x60, 0xcd, 0x4a, 0xad, 0x5d, 0x67, 0x6d, 0xc6, 0x97,
+ 0x32, 0x4a, 0xb2, 0x76, 0xa7, 0xd9, 0xe8, 0xc9, 0xaa, 0x72, 0xdc, 0xea, 0x35, 0x8e, 0x64, 0x94,
+ 0x8a, 0xf7, 0xd5, 0x7f, 0x4d, 0x42, 0x69, 0xfa, 0x8a, 0x84, 0x7f, 0x00, 0xe7, 0xc3, 0xf7, 0x0c,
+ 0x8f, 0xfa, 0xea, 0x53, 0xc3, 0xe5, 0x5b, 0x66, 0x44, 0xc4, 0xf1, 0x15, 0x2d, 0xda, 0x66, 0xc0,
+ 0xea, 0x52, 0xff, 0x0b, 0xc3, 0x65, 0x1b, 0x62, 0x44, 0x7c, 0xdc, 0x84, 0x8b, 0x96, 0xad, 0x7a,
+ 0x3e, 0xb1, 0x74, 0xe2, 0xea, 0xea, 0xe4, 0x25, 0x49, 0x25, 0x9a, 0x46, 0x3d, 0xcf, 0x16, 0x47,
+ 0x55, 0x64, 0xe5, 0x5d, 0xcb, 0xee, 0x06, 0xe4, 0x49, 0x0d, 0xaf, 0x06, 0xd4, 0x99, 0x04, 0x4b,
+ 0x2d, 0x4b, 0xb0, 0x77, 0x20, 0x3f, 0x22, 0x8e, 0x4a, 0x2d, 0xdf, 0x3d, 0xe5, 0x8d, 0x71, 0x4e,
+ 0xc9, 0x8d, 0x88, 0x23, 0xb3, 0xf1, 0x9b, 0xb9, 0x9f, 0xfc, 0x23, 0x05, 0xc5, 0x78, 0x73, 0xcc,
+ 0xee, 0x1a, 0x1a, 0x3f, 0x47, 0x12, 0xbc, 0xd2, 0x7c, 0xf0, 0xd2, 0x56, 0xba, 0x52, 0x63, 0x07,
+ 0xcc, 0x7e, 0x56, 0xb4, 0xac, 0x8a, 0xd0, 0x64, 0x87, 0x3b, 0xab, 0x2d, 0x54, 0xb4, 0x08, 0x39,
+ 0x25, 0x18, 0xe1, 0x43, 0xc8, 0x3e, 0xf2, 0xb8, 0xed, 0x2c, 0xb7, 0xfd, 0xe1, 0xcb, 0x6d, 0xdf,
+ 0xef, 0x72, 0xe3, 0xf9, 0xfb, 0x5d, 0xb5, 0xd5, 0x56, 0x8e, 0xaa, 0x4d, 0x25, 0x50, 0xc7, 0x17,
+ 0x20, 0x6d, 0x92, 0xe7, 0xa7, 0xd3, 0x47, 0x11, 0x87, 0xce, 0x1a, 0xf8, 0x0b, 0x90, 0x7e, 0x4a,
+ 0xc9, 0xe3, 0xe9, 0x03, 0x80, 0x43, 0xaf, 0x31, 0xf5, 0xaf, 0x43, 0x86, 0xc7, 0x0b, 0x03, 0x04,
+ 0x11, 0x43, 0x6f, 0xe1, 0x1c, 0xa4, 0x6b, 0x6d, 0x85, 0xa5, 0x3f, 0x82, 0xa2, 0x40, 0xd5, 0x4e,
+ 0x43, 0xae, 0xc9, 0x28, 0x59, 0xbe, 0x05, 0x59, 0x11, 0x04, 0xb6, 0x35, 0xa2, 0x30, 0xa0, 0xb7,
+ 0x82, 0x61, 0x60, 0x23, 0x11, 0x4a, 0x8f, 0x8f, 0x0e, 0x64, 0x05, 0x25, 0xe3, 0xcb, 0xeb, 0x41,
+ 0x31, 0xde, 0x17, 0xbf, 0x99, 0x9c, 0xfa, 0x4b, 0x02, 0x0a, 0xb1, 0x3e, 0x97, 0x35, 0x28, 0xc4,
+ 0x34, 0xed, 0xa7, 0x2a, 0x31, 0x0d, 0xe2, 0x05, 0x49, 0x01, 0x1c, 0xaa, 0x32, 0xe4, 0xac, 0x8b,
+ 0xf6, 0x46, 0x9c, 0xff, 0x5d, 0x02, 0xd0, 0x6c, 0x8b, 0x39, 0xe3, 0x60, 0xe2, 0x3b, 0x75, 0xf0,
+ 0xb7, 0x09, 0x28, 0x4d, 0xf7, 0x95, 0x33, 0xee, 0x5d, 0xfa, 0x4e, 0xdd, 0xfb, 0x67, 0x12, 0x56,
+ 0xa7, 0xba, 0xc9, 0xb3, 0x7a, 0xf7, 0x15, 0xac, 0x1b, 0x3a, 0x1d, 0x39, 0xb6, 0x4f, 0x2d, 0xed,
+ 0x54, 0x35, 0xe9, 0x13, 0x6a, 0x4a, 0x65, 0x5e, 0x28, 0xae, 0xbf, 0xbc, 0x5f, 0xad, 0x34, 0x26,
+ 0x7a, 0x4d, 0xa6, 0xb6, 0xbf, 0xd1, 0xa8, 0xcb, 0x47, 0x9d, 0x76, 0x4f, 0x6e, 0xd5, 0x1e, 0xaa,
+ 0xc7, 0xad, 0x1f, 0xb7, 0xda, 0x5f, 0xb4, 0x14, 0x64, 0xcc, 0xd0, 0x5e, 0xe3, 0x56, 0xef, 0x00,
+ 0x9a, 0x75, 0x0a, 0x9f, 0x87, 0x45, 0x6e, 0xa1, 0xb7, 0xf0, 0x06, 0xac, 0xb5, 0xda, 0x6a, 0xb7,
+ 0x51, 0x97, 0x55, 0xf9, 0xde, 0x3d, 0xb9, 0xd6, 0xeb, 0x8a, 0x17, 0x88, 0x88, 0xdd, 0x9b, 0xde,
+ 0xd4, 0xbf, 0x49, 0xc1, 0xc6, 0x02, 0x4f, 0x70, 0x35, 0xb8, 0x3b, 0x88, 0xeb, 0xcc, 0xf7, 0xcf,
+ 0xe2, 0x7d, 0x85, 0x1d, 0xf9, 0x1d, 0xe2, 0xfa, 0xc1, 0x55, 0xe3, 0x0a, 0xb0, 0x28, 0x59, 0xbe,
+ 0xd1, 0x37, 0xa8, 0x1b, 0x3c, 0xd8, 0x88, 0x0b, 0xc5, 0xda, 0x04, 0x17, 0x6f, 0x36, 0xdf, 0x03,
+ 0xec, 0xd8, 0x9e, 0xe1, 0x1b, 0x4f, 0xa8, 0x6a, 0x58, 0xe1, 0xeb, 0x0e, 0xbb, 0x60, 0xa4, 0x15,
+ 0x14, 0x4a, 0x1a, 0x96, 0x1f, 0xb1, 0x2d, 0x3a, 0x20, 0x33, 0x6c, 0x56, 0xc0, 0x53, 0x0a, 0x0a,
+ 0x25, 0x11, 0xfb, 0x12, 0x14, 0x75, 0x7b, 0xcc, 0xba, 0x2e, 0xc1, 0x63, 0xe7, 0x45, 0x42, 0x29,
+ 0x08, 0x2c, 0xa2, 0x04, 0xfd, 0xf4, 0xe4, 0x59, 0xa9, 0xa8, 0x14, 0x04, 0x26, 0x28, 0x97, 0x61,
+ 0x8d, 0x0c, 0x06, 0x2e, 0x33, 0x1e, 0x1a, 0x12, 0x37, 0x84, 0x52, 0x04, 0x73, 0xe2, 0xd6, 0x7d,
+ 0xc8, 0x85, 0x71, 0x60, 0x47, 0x32, 0x8b, 0x84, 0xea, 0x88, 0x6b, 0x6f, 0x72, 0x27, 0xaf, 0xe4,
+ 0xac, 0x50, 0x78, 0x09, 0x8a, 0x86, 0xa7, 0x4e, 0x5e, 0xc9, 0x93, 0xdb, 0xc9, 0x9d, 0x9c, 0x52,
+ 0x30, 0xbc, 0xe8, 0x85, 0xb1, 0xfc, 0x75, 0x12, 0x4a, 0xd3, 0xaf, 0xfc, 0xb8, 0x0e, 0x39, 0xd3,
+ 0xd6, 0x08, 0x4f, 0x2d, 0xf1, 0x13, 0xd3, 0xce, 0x2b, 0x7e, 0x18, 0xa8, 0x34, 0x03, 0xbe, 0x12,
+ 0x69, 0x6e, 0xfd, 0x2d, 0x01, 0xb9, 0x10, 0xc6, 0xe7, 0x20, 0xed, 0x10, 0x7f, 0xc8, 0xcd, 0x65,
+ 0x0e, 0x92, 0x28, 0xa1, 0xf0, 0x31, 0xc3, 0x3d, 0x87, 0x58, 0x3c, 0x05, 0x02, 0x9c, 0x8d, 0xd9,
+ 0xba, 0x9a, 0x94, 0xe8, 0xfc, 0xfa, 0x61, 0x8f, 0x46, 0xd4, 0xf2, 0xbd, 0x70, 0x5d, 0x03, 0xbc,
+ 0x16, 0xc0, 0xf8, 0x1a, 0xac, 0xfb, 0x2e, 0x31, 0xcc, 0x29, 0x6e, 0x9a, 0x73, 0x51, 0x28, 0x88,
+ 0xc8, 0xfb, 0x70, 0x21, 0xb4, 0xab, 0x53, 0x9f, 0x68, 0x43, 0xaa, 0x4f, 0x94, 0xb2, 0xfc, 0x99,
+ 0xe1, 0x7c, 0x40, 0xa8, 0x07, 0xf2, 0x50, 0xb7, 0xfc, 0xf7, 0x04, 0xac, 0x87, 0x17, 0x26, 0x3d,
+ 0x0a, 0xd6, 0x11, 0x00, 0xb1, 0x2c, 0xdb, 0x8f, 0x87, 0x6b, 0x3e, 0x95, 0xe7, 0xf4, 0x2a, 0xd5,
+ 0x48, 0x49, 0x89, 0x19, 0xd8, 0x1a, 0x01, 0x4c, 0x24, 0x4b, 0xc3, 0x76, 0x11, 0x0a, 0xc1, 0x4f,
+ 0x38, 0xfc, 0x77, 0x40, 0x71, 0xc5, 0x06, 0x01, 0xb1, 0x9b, 0x15, 0xde, 0x84, 0xcc, 0x09, 0x1d,
+ 0x18, 0x56, 0xf0, 0x30, 0x2b, 0x06, 0xe1, 0x43, 0x48, 0x3a, 0x7a, 0x08, 0x39, 0xf8, 0x19, 0x6c,
+ 0x68, 0xf6, 0x68, 0xd6, 0xdd, 0x03, 0x34, 0x73, 0xcd, 0xf7, 0x3e, 0x4f, 0x7c, 0x09, 0x93, 0x16,
+ 0xf3, 0x7f, 0x89, 0xc4, 0xef, 0x93, 0xa9, 0xc3, 0xce, 0xc1, 0x1f, 0x92, 0x5b, 0x87, 0x42, 0xb5,
+ 0x13, 0xce, 0x54, 0xa1, 0x7d, 0x93, 0x6a, 0xcc, 0xfb, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xa3,
+ 0x58, 0x22, 0x30, 0xdf, 0x1c, 0x00, 0x00,
}
diff --git a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go
index bac9913e0..ec6eb168d 100644
--- a/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go
+++ b/vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go
@@ -1,35 +1,6 @@
-// Code generated by protoc-gen-gogo.
+// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: descriptor.proto
-// DO NOT EDIT!
-/*
-Package descriptor is a generated protocol buffer package.
-
-It is generated from these files:
- descriptor.proto
-
-It has these top-level messages:
- FileDescriptorSet
- FileDescriptorProto
- DescriptorProto
- FieldDescriptorProto
- OneofDescriptorProto
- EnumDescriptorProto
- EnumValueDescriptorProto
- ServiceDescriptorProto
- MethodDescriptorProto
- FileOptions
- MessageOptions
- FieldOptions
- OneofOptions
- EnumOptions
- EnumValueOptions
- ServiceOptions
- MethodOptions
- UninterpretedOption
- SourceCodeInfo
- GeneratedCodeInfo
-*/
package descriptor
import fmt "fmt"
@@ -155,7 +126,7 @@ func (this *DescriptorProto_ExtensionRange) GoString() string {
if this == nil {
return "nil"
}
- s := make([]string, 0, 6)
+ s := make([]string, 0, 7)
s = append(s, "&descriptor.DescriptorProto_ExtensionRange{")
if this.Start != nil {
s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n")
@@ -163,6 +134,9 @@ func (this *DescriptorProto_ExtensionRange) GoString() string {
if this.End != nil {
s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n")
}
+ if this.Options != nil {
+ s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
+ }
if this.XXX_unrecognized != nil {
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
}
@@ -187,6 +161,22 @@ func (this *DescriptorProto_ReservedRange) GoString() string {
s = append(s, "}")
return strings.Join(s, "")
}
+func (this *ExtensionRangeOptions) GoString() string {
+ if this == nil {
+ return "nil"
+ }
+ s := make([]string, 0, 5)
+ s = append(s, "&descriptor.ExtensionRangeOptions{")
+ if this.UninterpretedOption != nil {
+ s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
+ }
+ s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
+ if this.XXX_unrecognized != nil {
+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
+ }
+ s = append(s, "}")
+ return strings.Join(s, "")
+}
func (this *FieldDescriptorProto) GoString() string {
if this == nil {
return "nil"
@@ -200,10 +190,10 @@ func (this *FieldDescriptorProto) GoString() string {
s = append(s, "Number: "+valueToGoStringDescriptor(this.Number, "int32")+",\n")
}
if this.Label != nil {
- s = append(s, "Label: "+valueToGoStringDescriptor(this.Label, "descriptor.FieldDescriptorProto_Label")+",\n")
+ s = append(s, "Label: "+valueToGoStringDescriptor(this.Label, "FieldDescriptorProto_Label")+",\n")
}
if this.Type != nil {
- s = append(s, "Type: "+valueToGoStringDescriptor(this.Type, "descriptor.FieldDescriptorProto_Type")+",\n")
+ s = append(s, "Type: "+valueToGoStringDescriptor(this.Type, "FieldDescriptorProto_Type")+",\n")
}
if this.TypeName != nil {
s = append(s, "TypeName: "+valueToGoStringDescriptor(this.TypeName, "string")+",\n")
@@ -251,7 +241,7 @@ func (this *EnumDescriptorProto) GoString() string {
if this == nil {
return "nil"
}
- s := make([]string, 0, 7)
+ s := make([]string, 0, 9)
s = append(s, "&descriptor.EnumDescriptorProto{")
if this.Name != nil {
s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
@@ -262,6 +252,30 @@ func (this *EnumDescriptorProto) GoString() string {
if this.Options != nil {
s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
}
+ if this.ReservedRange != nil {
+ s = append(s, "ReservedRange: "+fmt.Sprintf("%#v", this.ReservedRange)+",\n")
+ }
+ if this.ReservedName != nil {
+ s = append(s, "ReservedName: "+fmt.Sprintf("%#v", this.ReservedName)+",\n")
+ }
+ if this.XXX_unrecognized != nil {
+ s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
+ }
+ s = append(s, "}")
+ return strings.Join(s, "")
+}
+func (this *EnumDescriptorProto_EnumReservedRange) GoString() string {
+ if this == nil {
+ return "nil"
+ }
+ s := make([]string, 0, 6)
+ s = append(s, "&descriptor.EnumDescriptorProto_EnumReservedRange{")
+ if this.Start != nil {
+ s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n")
+ }
+ if this.End != nil {
+ s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n")
+ }
if this.XXX_unrecognized != nil {
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
}
@@ -344,7 +358,7 @@ func (this *FileOptions) GoString() string {
if this == nil {
return "nil"
}
- s := make([]string, 0, 20)
+ s := make([]string, 0, 23)
s = append(s, "&descriptor.FileOptions{")
if this.JavaPackage != nil {
s = append(s, "JavaPackage: "+valueToGoStringDescriptor(this.JavaPackage, "string")+",\n")
@@ -362,7 +376,7 @@ func (this *FileOptions) GoString() string {
s = append(s, "JavaStringCheckUtf8: "+valueToGoStringDescriptor(this.JavaStringCheckUtf8, "bool")+",\n")
}
if this.OptimizeFor != nil {
- s = append(s, "OptimizeFor: "+valueToGoStringDescriptor(this.OptimizeFor, "descriptor.FileOptions_OptimizeMode")+",\n")
+ s = append(s, "OptimizeFor: "+valueToGoStringDescriptor(this.OptimizeFor, "FileOptions_OptimizeMode")+",\n")
}
if this.GoPackage != nil {
s = append(s, "GoPackage: "+valueToGoStringDescriptor(this.GoPackage, "string")+",\n")
@@ -376,6 +390,9 @@ func (this *FileOptions) GoString() string {
if this.PyGenericServices != nil {
s = append(s, "PyGenericServices: "+valueToGoStringDescriptor(this.PyGenericServices, "bool")+",\n")
}
+ if this.PhpGenericServices != nil {
+ s = append(s, "PhpGenericServices: "+valueToGoStringDescriptor(this.PhpGenericServices, "bool")+",\n")
+ }
if this.Deprecated != nil {
s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
}
@@ -391,6 +408,12 @@ func (this *FileOptions) GoString() string {
if this.SwiftPrefix != nil {
s = append(s, "SwiftPrefix: "+valueToGoStringDescriptor(this.SwiftPrefix, "string")+",\n")
}
+ if this.PhpClassPrefix != nil {
+ s = append(s, "PhpClassPrefix: "+valueToGoStringDescriptor(this.PhpClassPrefix, "string")+",\n")
+ }
+ if this.PhpNamespace != nil {
+ s = append(s, "PhpNamespace: "+valueToGoStringDescriptor(this.PhpNamespace, "string")+",\n")
+ }
if this.UninterpretedOption != nil {
s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
}
@@ -436,13 +459,13 @@ func (this *FieldOptions) GoString() string {
s := make([]string, 0, 11)
s = append(s, "&descriptor.FieldOptions{")
if this.Ctype != nil {
- s = append(s, "Ctype: "+valueToGoStringDescriptor(this.Ctype, "descriptor.FieldOptions_CType")+",\n")
+ s = append(s, "Ctype: "+valueToGoStringDescriptor(this.Ctype, "FieldOptions_CType")+",\n")
}
if this.Packed != nil {
s = append(s, "Packed: "+valueToGoStringDescriptor(this.Packed, "bool")+",\n")
}
if this.Jstype != nil {
- s = append(s, "Jstype: "+valueToGoStringDescriptor(this.Jstype, "descriptor.FieldOptions_JSType")+",\n")
+ s = append(s, "Jstype: "+valueToGoStringDescriptor(this.Jstype, "FieldOptions_JSType")+",\n")
}
if this.Lazy != nil {
s = append(s, "Lazy: "+valueToGoStringDescriptor(this.Lazy, "bool")+",\n")
@@ -549,7 +572,7 @@ func (this *MethodOptions) GoString() string {
s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
}
if this.IdempotencyLevel != nil {
- s = append(s, "IdempotencyLevel: "+valueToGoStringDescriptor(this.IdempotencyLevel, "descriptor.MethodOptions_IdempotencyLevel")+",\n")
+ s = append(s, "IdempotencyLevel: "+valueToGoStringDescriptor(this.IdempotencyLevel, "MethodOptions_IdempotencyLevel")+",\n")
}
if this.UninterpretedOption != nil {
s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
diff --git a/vendor/github.com/gogo/protobuf/test/issue270/a/a1.proto b/vendor/github.com/gogo/protobuf/test/issue270/a/a1.proto
new file mode 100644
index 000000000..59dff1394
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/test/issue270/a/a1.proto
@@ -0,0 +1,12 @@
+syntax = "proto2";
+
+package issue270.a;
+
+import "github.com/gogo/protobuf/gogoproto/gogo.proto";
+import "github.com/gogo/protobuf/test/issue270/a/a2.proto";
+
+option (gogoproto.populate_all) = true;
+
+message A1 {
+ optional A2 a2 = 1;
+}
diff --git a/vendor/github.com/gogo/protobuf/test/issue270/a/a2.proto b/vendor/github.com/gogo/protobuf/test/issue270/a/a2.proto
new file mode 100644
index 000000000..1d16ff79a
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/test/issue270/a/a2.proto
@@ -0,0 +1,12 @@
+syntax = "proto2";
+
+package issue270.a;
+
+import "github.com/gogo/protobuf/gogoproto/gogo.proto";
+import "github.com/gogo/protobuf/test/issue270/b/b.proto";
+
+option (gogoproto.populate_all) = true;
+
+message A2 {
+ optional issue270.b.B b = 1;
+}
diff --git a/vendor/github.com/gogo/protobuf/test/issue270/b/b.proto b/vendor/github.com/gogo/protobuf/test/issue270/b/b.proto
new file mode 100644
index 000000000..cb71c2480
--- /dev/null
+++ b/vendor/github.com/gogo/protobuf/test/issue270/b/b.proto
@@ -0,0 +1,6 @@
+syntax = "proto2";
+
+package issue270.b;
+
+message B {
+}
diff --git a/vendor/github.com/golang/protobuf/LICENSE b/vendor/github.com/golang/protobuf/LICENSE
index 1b1b1921e..0f646931a 100644
--- a/vendor/github.com/golang/protobuf/LICENSE
+++ b/vendor/github.com/golang/protobuf/LICENSE
@@ -1,7 +1,4 @@
-Go support for Protocol Buffers - Google's data interchange format
-
Copyright 2010 The Go Authors. All rights reserved.
-https://github.com/golang/protobuf
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
diff --git a/vendor/github.com/golang/protobuf/README.md b/vendor/github.com/golang/protobuf/README.md
index 037fc7c8e..61820bed6 100644
--- a/vendor/github.com/golang/protobuf/README.md
+++ b/vendor/github.com/golang/protobuf/README.md
@@ -1,10 +1,13 @@
-# Go support for Protocol Buffers
+# Go support for Protocol Buffers - Google's data interchange format
+
+[![Build Status](https://travis-ci.org/golang/protobuf.svg?branch=master)](https://travis-ci.org/golang/protobuf)
+[![GoDoc](https://godoc.org/github.com/golang/protobuf?status.svg)](https://godoc.org/github.com/golang/protobuf)
Google's data interchange format.
Copyright 2010 The Go Authors.
https://github.com/golang/protobuf
-This package and the code it generates requires at least Go 1.4.
+This package and the code it generates requires at least Go 1.6.
This software implements Go bindings for protocol buffers. For
information about protocol buffers themselves, see
@@ -22,7 +25,7 @@ To use this software, you must:
for details or, if you are using gccgo, follow the instructions at
https://golang.org/doc/install/gccgo
- Grab the code from the repository and install the proto package.
- The simplest way is to run `go get -u github.com/golang/protobuf/{proto,protoc-gen-go}`.
+ The simplest way is to run `go get -u github.com/golang/protobuf/protoc-gen-go`.
The compiler plugin, protoc-gen-go, will be installed in $GOBIN,
defaulting to $GOPATH/bin. It must be in your $PATH for the protocol
compiler, protoc, to find it.
@@ -53,13 +56,53 @@ parameter set to the directory you want to output the Go code to.
The generated files will be suffixed .pb.go. See the Test code below
for an example using such a file.
+## Packages and input paths ##
+
+The protocol buffer language has a concept of "packages" which does not
+correspond well to the Go notion of packages. In generated Go code,
+each source `.proto` file is associated with a single Go package. The
+name and import path for this package is specified with the `go_package`
+proto option:
+
+ option go_package = "github.com/golang/protobuf/ptypes/any";
+
+The protocol buffer compiler will attempt to derive a package name and
+import path if a `go_package` option is not present, but it is
+best to always specify one explicitly.
+
+There is a one-to-one relationship between source `.proto` files and
+generated `.pb.go` files, but any number of `.pb.go` files may be
+contained in the same Go package.
+
+The output name of a generated file is produced by replacing the
+`.proto` suffix with `.pb.go` (e.g., `foo.proto` produces `foo.pb.go`).
+However, the output directory is selected in one of two ways. Let
+us say we have `inputs/x.proto` with a `go_package` option of
+`github.com/golang/protobuf/p`. The corresponding output file may
+be:
+
+- Relative to the import path:
+
+```shell
+ protoc --go_out=. inputs/x.proto
+ # writes ./github.com/golang/protobuf/p/x.pb.go
+```
+
+ (This can work well with `--go_out=$GOPATH`.)
+
+- Relative to the input file:
+
+```shell
+protoc --go_out=paths=source_relative:. inputs/x.proto
+# generate ./inputs/x.pb.go
+```
+
+## Generated code ##
The package comment for the proto library contains text describing
the interface provided in Go for protocol buffers. Here is an edited
version.
-==========
-
The proto package converts data structures to and from the
wire format of protocol buffers. It works in concert with the
Go source code generated for .proto files by the protocol compiler.
@@ -104,23 +147,20 @@ for a protocol buffer variable v:
When the .proto file specifies `syntax="proto3"`, there are some differences:
- Non-repeated fields of non-message type are values instead of pointers.
- - Getters are only generated for message and oneof fields.
- Enum types do not get an Enum method.
Consider file test.proto, containing
```proto
+ syntax = "proto2";
package example;
-
+
enum FOO { X = 17; };
-
+
message Test {
required string label = 1;
optional int32 type = 2 [default=77];
repeated int64 reps = 3;
- optional group OptionalGroup = 4 {
- required string RequiredField = 5;
- }
}
```
@@ -137,13 +177,10 @@ To create and play with a Test object from the example package,
)
func main() {
- test := &example.Test {
+ test := &example.Test{
Label: proto.String("hello"),
Type: proto.Int32(17),
Reps: []int64{1, 2, 3},
- Optionalgroup: &example.Test_OptionalGroup {
- RequiredField: proto.String("good bye"),
- },
}
data, err := proto.Marshal(test)
if err != nil {
@@ -167,22 +204,25 @@ To create and play with a Test object from the example package,
To pass extra parameters to the plugin, use a comma-separated
parameter list separated from the output directory by a colon:
-
protoc --go_out=plugins=grpc,import_path=mypackage:. *.proto
-
-- `import_prefix=xxx` - a prefix that is added onto the beginning of
- all imports. Useful for things like generating protos in a
- subdirectory, or regenerating vendored protobufs in-place.
-- `import_path=foo/bar` - used as the package if no input files
- declare `go_package`. If it contains slashes, everything up to the
- rightmost slash is ignored.
+- `paths=(import | source_relative)` - specifies how the paths of
+ generated files are structured. See the "Packages and imports paths"
+ section above. The default is `import`.
- `plugins=plugin1+plugin2` - specifies the list of sub-plugins to
load. The only plugin in this repo is `grpc`.
- `Mfoo/bar.proto=quux/shme` - declares that foo/bar.proto is
associated with Go package quux/shme. This is subject to the
import_prefix parameter.
+The following parameters are deprecated and should not be used:
+
+- `import_prefix=xxx` - a prefix that is added onto the beginning of
+ all imports.
+- `import_path=foo/bar` - used as the package if no input files
+ declare `go_package`. If it contains slashes, everything up to the
+ rightmost slash is ignored.
+
## gRPC Support ##
If a proto file specifies RPC services, protoc-gen-go can be instructed to
diff --git a/vendor/github.com/golang/protobuf/proto/clone.go b/vendor/github.com/golang/protobuf/proto/clone.go
index e392575b3..3cd3249f7 100644
--- a/vendor/github.com/golang/protobuf/proto/clone.go
+++ b/vendor/github.com/golang/protobuf/proto/clone.go
@@ -35,22 +35,39 @@
package proto
import (
+ "fmt"
"log"
"reflect"
"strings"
)
// Clone returns a deep copy of a protocol buffer.
-func Clone(pb Message) Message {
- in := reflect.ValueOf(pb)
+func Clone(src Message) Message {
+ in := reflect.ValueOf(src)
if in.IsNil() {
- return pb
+ return src
}
-
out := reflect.New(in.Type().Elem())
- // out is empty so a merge is a deep copy.
- mergeStruct(out.Elem(), in.Elem())
- return out.Interface().(Message)
+ dst := out.Interface().(Message)
+ Merge(dst, src)
+ return dst
+}
+
+// Merger is the interface representing objects that can merge messages of the same type.
+type Merger interface {
+ // Merge merges src into this message.
+ // Required and optional fields that are set in src will be set to that value in dst.
+ // Elements of repeated fields will be appended.
+ //
+ // Merge may panic if called with a different argument type than the receiver.
+ Merge(src Message)
+}
+
+// generatedMerger is the custom merge method that generated protos will have.
+// We must add this method since a generate Merge method will conflict with
+// many existing protos that have a Merge data field already defined.
+type generatedMerger interface {
+ XXX_Merge(src Message)
}
// Merge merges src into dst.
@@ -58,17 +75,24 @@ func Clone(pb Message) Message {
// Elements of repeated fields will be appended.
// Merge panics if src and dst are not the same type, or if dst is nil.
func Merge(dst, src Message) {
+ if m, ok := dst.(Merger); ok {
+ m.Merge(src)
+ return
+ }
+
in := reflect.ValueOf(src)
out := reflect.ValueOf(dst)
if out.IsNil() {
panic("proto: nil destination")
}
if in.Type() != out.Type() {
- // Explicit test prior to mergeStruct so that mistyped nils will fail
- panic("proto: type mismatch")
+ panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src))
}
if in.IsNil() {
- // Merging nil into non-nil is a quiet no-op
+ return // Merge from nil src is a noop
+ }
+ if m, ok := dst.(generatedMerger); ok {
+ m.XXX_Merge(src)
return
}
mergeStruct(out.Elem(), in.Elem())
@@ -84,7 +108,7 @@ func mergeStruct(out, in reflect.Value) {
mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i])
}
- if emIn, ok := extendable(in.Addr().Interface()); ok {
+ if emIn, err := extendable(in.Addr().Interface()); err == nil {
emOut, _ := extendable(out.Addr().Interface())
mIn, muIn := emIn.extensionsRead()
if mIn != nil {
diff --git a/vendor/github.com/golang/protobuf/proto/decode.go b/vendor/github.com/golang/protobuf/proto/decode.go
index aa207298f..d9aa3c42d 100644
--- a/vendor/github.com/golang/protobuf/proto/decode.go
+++ b/vendor/github.com/golang/protobuf/proto/decode.go
@@ -39,8 +39,6 @@ import (
"errors"
"fmt"
"io"
- "os"
- "reflect"
)
// errOverflow is returned when an integer is too large to be represented.
@@ -50,10 +48,6 @@ var errOverflow = errors.New("proto: integer overflow")
// wire type is encountered. It does not get returned to user code.
var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof")
-// The fundamental decoders that interpret bytes on the wire.
-// Those that take integer types all return uint64 and are
-// therefore of type valueDecoder.
-
// DecodeVarint reads a varint-encoded integer from the slice.
// It returns the integer and the number of bytes consumed, or
// zero if there is not enough.
@@ -267,9 +261,6 @@ func (p *Buffer) DecodeZigzag32() (x uint64, err error) {
return
}
-// These are not ValueDecoders: they produce an array of bytes or a string.
-// bytes, embedded messages
-
// DecodeRawBytes reads a count-delimited byte buffer from the Buffer.
// This is the format used for the bytes protocol buffer
// type and for embedded messages.
@@ -311,81 +302,29 @@ func (p *Buffer) DecodeStringBytes() (s string, err error) {
return string(buf), nil
}
-// Skip the next item in the buffer. Its wire type is decoded and presented as an argument.
-// If the protocol buffer has extensions, and the field matches, add it as an extension.
-// Otherwise, if the XXX_unrecognized field exists, append the skipped data there.
-func (o *Buffer) skipAndSave(t reflect.Type, tag, wire int, base structPointer, unrecField field) error {
- oi := o.index
-
- err := o.skip(t, tag, wire)
- if err != nil {
- return err
- }
-
- if !unrecField.IsValid() {
- return nil
- }
-
- ptr := structPointer_Bytes(base, unrecField)
-
- // Add the skipped field to struct field
- obuf := o.buf
-
- o.buf = *ptr
- o.EncodeVarint(uint64(tag<<3 | wire))
- *ptr = append(o.buf, obuf[oi:o.index]...)
-
- o.buf = obuf
-
- return nil
-}
-
-// Skip the next item in the buffer. Its wire type is decoded and presented as an argument.
-func (o *Buffer) skip(t reflect.Type, tag, wire int) error {
-
- var u uint64
- var err error
-
- switch wire {
- case WireVarint:
- _, err = o.DecodeVarint()
- case WireFixed64:
- _, err = o.DecodeFixed64()
- case WireBytes:
- _, err = o.DecodeRawBytes(false)
- case WireFixed32:
- _, err = o.DecodeFixed32()
- case WireStartGroup:
- for {
- u, err = o.DecodeVarint()
- if err != nil {
- break
- }
- fwire := int(u & 0x7)
- if fwire == WireEndGroup {
- break
- }
- ftag := int(u >> 3)
- err = o.skip(t, ftag, fwire)
- if err != nil {
- break
- }
- }
- default:
- err = fmt.Errorf("proto: can't skip unknown wire type %d for %s", wire, t)
- }
- return err
-}
-
// Unmarshaler is the interface representing objects that can
-// unmarshal themselves. The method should reset the receiver before
-// decoding starts. The argument points to data that may be
+// unmarshal themselves. The argument points to data that may be
// overwritten, so implementations should not keep references to the
// buffer.
+// Unmarshal implementations should not clear the receiver.
+// Any unmarshaled data should be merged into the receiver.
+// Callers of Unmarshal that do not want to retain existing data
+// should Reset the receiver before calling Unmarshal.
type Unmarshaler interface {
Unmarshal([]byte) error
}
+// newUnmarshaler is the interface representing objects that can
+// unmarshal themselves. The semantics are identical to Unmarshaler.
+//
+// This exists to support protoc-gen-go generated messages.
+// The proto package will stop type-asserting to this interface in the future.
+//
+// DO NOT DEPEND ON THIS.
+type newUnmarshaler interface {
+ XXX_Unmarshal([]byte) error
+}
+
// Unmarshal parses the protocol buffer representation in buf and places the
// decoded result in pb. If the struct underlying pb does not match
// the data in buf, the results can be unpredictable.
@@ -395,7 +334,13 @@ type Unmarshaler interface {
// to preserve and append to existing data.
func Unmarshal(buf []byte, pb Message) error {
pb.Reset()
- return UnmarshalMerge(buf, pb)
+ if u, ok := pb.(newUnmarshaler); ok {
+ return u.XXX_Unmarshal(buf)
+ }
+ if u, ok := pb.(Unmarshaler); ok {
+ return u.Unmarshal(buf)
+ }
+ return NewBuffer(buf).Unmarshal(pb)
}
// UnmarshalMerge parses the protocol buffer representation in buf and
@@ -405,8 +350,16 @@ func Unmarshal(buf []byte, pb Message) error {
// UnmarshalMerge merges into existing data in pb.
// Most code should use Unmarshal instead.
func UnmarshalMerge(buf []byte, pb Message) error {
- // If the object can unmarshal itself, let it.
+ if u, ok := pb.(newUnmarshaler); ok {
+ return u.XXX_Unmarshal(buf)
+ }
if u, ok := pb.(Unmarshaler); ok {
+ // NOTE: The history of proto have unfortunately been inconsistent
+ // whether Unmarshaler should or should not implicitly clear itself.
+ // Some implementations do, most do not.
+ // Thus, calling this here may or may not do what people want.
+ //
+ // See https://github.com/golang/protobuf/issues/424
return u.Unmarshal(buf)
}
return NewBuffer(buf).Unmarshal(pb)
@@ -422,12 +375,17 @@ func (p *Buffer) DecodeMessage(pb Message) error {
}
// DecodeGroup reads a tag-delimited group from the Buffer.
+// StartGroup tag is already consumed. This function consumes
+// EndGroup tag.
func (p *Buffer) DecodeGroup(pb Message) error {
- typ, base, err := getbase(pb)
- if err != nil {
- return err
+ b := p.buf[p.index:]
+ x, y := findEndGroup(b)
+ if x < 0 {
+ return io.ErrUnexpectedEOF
}
- return p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), true, base)
+ err := Unmarshal(b[:x], pb)
+ p.index += y
+ return err
}
// Unmarshal parses the protocol buffer representation in the
@@ -438,533 +396,33 @@ func (p *Buffer) DecodeGroup(pb Message) error {
// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal.
func (p *Buffer) Unmarshal(pb Message) error {
// If the object can unmarshal itself, let it.
- if u, ok := pb.(Unmarshaler); ok {
- err := u.Unmarshal(p.buf[p.index:])
+ if u, ok := pb.(newUnmarshaler); ok {
+ err := u.XXX_Unmarshal(p.buf[p.index:])
p.index = len(p.buf)
return err
}
-
- typ, base, err := getbase(pb)
- if err != nil {
- return err
- }
-
- err = p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), false, base)
-
- if collectStats {
- stats.Decode++
- }
-
- return err
-}
-
-// unmarshalType does the work of unmarshaling a structure.
-func (o *Buffer) unmarshalType(st reflect.Type, prop *StructProperties, is_group bool, base structPointer) error {
- var state errorState
- required, reqFields := prop.reqCount, uint64(0)
-
- var err error
- for err == nil && o.index < len(o.buf) {
- oi := o.index
- var u uint64
- u, err = o.DecodeVarint()
- if err != nil {
- break
- }
- wire := int(u & 0x7)
- if wire == WireEndGroup {
- if is_group {
- if required > 0 {
- // Not enough information to determine the exact field.
- // (See below.)
- return &RequiredNotSetError{"{Unknown}"}
- }
- return nil // input is satisfied
- }
- return fmt.Errorf("proto: %s: wiretype end group for non-group", st)
- }
- tag := int(u >> 3)
- if tag <= 0 {
- return fmt.Errorf("proto: %s: illegal tag %d (wire type %d)", st, tag, wire)
- }
- fieldnum, ok := prop.decoderTags.get(tag)
- if !ok {
- // Maybe it's an extension?
- if prop.extendable {
- if e, _ := extendable(structPointer_Interface(base, st)); isExtensionField(e, int32(tag)) {
- if err = o.skip(st, tag, wire); err == nil {
- extmap := e.extensionsWrite()
- ext := extmap[int32(tag)] // may be missing
- ext.enc = append(ext.enc, o.buf[oi:o.index]...)
- extmap[int32(tag)] = ext
- }
- continue
- }
- }
- // Maybe it's a oneof?
- if prop.oneofUnmarshaler != nil {
- m := structPointer_Interface(base, st).(Message)
- // First return value indicates whether tag is a oneof field.
- ok, err = prop.oneofUnmarshaler(m, tag, wire, o)
- if err == ErrInternalBadWireType {
- // Map the error to something more descriptive.
- // Do the formatting here to save generated code space.
- err = fmt.Errorf("bad wiretype for oneof field in %T", m)
- }
- if ok {
- continue
- }
- }
- err = o.skipAndSave(st, tag, wire, base, prop.unrecField)
- continue
- }
- p := prop.Prop[fieldnum]
-
- if p.dec == nil {
- fmt.Fprintf(os.Stderr, "proto: no protobuf decoder for %s.%s\n", st, st.Field(fieldnum).Name)
- continue
- }
- dec := p.dec
- if wire != WireStartGroup && wire != p.WireType {
- if wire == WireBytes && p.packedDec != nil {
- // a packable field
- dec = p.packedDec
- } else {
- err = fmt.Errorf("proto: bad wiretype for field %s.%s: got wiretype %d, want %d", st, st.Field(fieldnum).Name, wire, p.WireType)
- continue
- }
- }
- decErr := dec(o, p, base)
- if decErr != nil && !state.shouldContinue(decErr, p) {
- err = decErr
- }
- if err == nil && p.Required {
- // Successfully decoded a required field.
- if tag <= 64 {
- // use bitmap for fields 1-64 to catch field reuse.
- var mask uint64 = 1 << uint64(tag-1)
- if reqFields&mask == 0 {
- // new required field
- reqFields |= mask
- required--
- }
- } else {
- // This is imprecise. It can be fooled by a required field
- // with a tag > 64 that is encoded twice; that's very rare.
- // A fully correct implementation would require allocating
- // a data structure, which we would like to avoid.
- required--
- }
- }
- }
- if err == nil {
- if is_group {
- return io.ErrUnexpectedEOF
- }
- if state.err != nil {
- return state.err
- }
- if required > 0 {
- // Not enough information to determine the exact field. If we use extra
- // CPU, we could determine the field only if the missing required field
- // has a tag <= 64 and we check reqFields.
- return &RequiredNotSetError{"{Unknown}"}
- }
- }
- return err
-}
-
-// Individual type decoders
-// For each,
-// u is the decoded value,
-// v is a pointer to the field (pointer) in the struct
-
-// Sizes of the pools to allocate inside the Buffer.
-// The goal is modest amortization and allocation
-// on at least 16-byte boundaries.
-const (
- boolPoolSize = 16
- uint32PoolSize = 8
- uint64PoolSize = 4
-)
-
-// Decode a bool.
-func (o *Buffer) dec_bool(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- if len(o.bools) == 0 {
- o.bools = make([]bool, boolPoolSize)
- }
- o.bools[0] = u != 0
- *structPointer_Bool(base, p.field) = &o.bools[0]
- o.bools = o.bools[1:]
- return nil
-}
-
-func (o *Buffer) dec_proto3_bool(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- *structPointer_BoolVal(base, p.field) = u != 0
- return nil
-}
-
-// Decode an int32.
-func (o *Buffer) dec_int32(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- word32_Set(structPointer_Word32(base, p.field), o, uint32(u))
- return nil
-}
-
-func (o *Buffer) dec_proto3_int32(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- word32Val_Set(structPointer_Word32Val(base, p.field), uint32(u))
- return nil
-}
-
-// Decode an int64.
-func (o *Buffer) dec_int64(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- word64_Set(structPointer_Word64(base, p.field), o, u)
- return nil
-}
-
-func (o *Buffer) dec_proto3_int64(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- word64Val_Set(structPointer_Word64Val(base, p.field), o, u)
- return nil
-}
-
-// Decode a string.
-func (o *Buffer) dec_string(p *Properties, base structPointer) error {
- s, err := o.DecodeStringBytes()
- if err != nil {
- return err
- }
- *structPointer_String(base, p.field) = &s
- return nil
-}
-
-func (o *Buffer) dec_proto3_string(p *Properties, base structPointer) error {
- s, err := o.DecodeStringBytes()
- if err != nil {
- return err
- }
- *structPointer_StringVal(base, p.field) = s
- return nil
-}
-
-// Decode a slice of bytes ([]byte).
-func (o *Buffer) dec_slice_byte(p *Properties, base structPointer) error {
- b, err := o.DecodeRawBytes(true)
- if err != nil {
- return err
- }
- *structPointer_Bytes(base, p.field) = b
- return nil
-}
-
-// Decode a slice of bools ([]bool).
-func (o *Buffer) dec_slice_bool(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- v := structPointer_BoolSlice(base, p.field)
- *v = append(*v, u != 0)
- return nil
-}
-
-// Decode a slice of bools ([]bool) in packed format.
-func (o *Buffer) dec_slice_packed_bool(p *Properties, base structPointer) error {
- v := structPointer_BoolSlice(base, p.field)
-
- nn, err := o.DecodeVarint()
- if err != nil {
- return err
- }
- nb := int(nn) // number of bytes of encoded bools
- fin := o.index + nb
- if fin < o.index {
- return errOverflow
- }
-
- y := *v
- for o.index < fin {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- y = append(y, u != 0)
- }
-
- *v = y
- return nil
-}
-
-// Decode a slice of int32s ([]int32).
-func (o *Buffer) dec_slice_int32(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- structPointer_Word32Slice(base, p.field).Append(uint32(u))
- return nil
-}
-
-// Decode a slice of int32s ([]int32) in packed format.
-func (o *Buffer) dec_slice_packed_int32(p *Properties, base structPointer) error {
- v := structPointer_Word32Slice(base, p.field)
-
- nn, err := o.DecodeVarint()
- if err != nil {
- return err
- }
- nb := int(nn) // number of bytes of encoded int32s
-
- fin := o.index + nb
- if fin < o.index {
- return errOverflow
- }
- for o.index < fin {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- v.Append(uint32(u))
- }
- return nil
-}
-
-// Decode a slice of int64s ([]int64).
-func (o *Buffer) dec_slice_int64(p *Properties, base structPointer) error {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
-
- structPointer_Word64Slice(base, p.field).Append(u)
- return nil
-}
-
-// Decode a slice of int64s ([]int64) in packed format.
-func (o *Buffer) dec_slice_packed_int64(p *Properties, base structPointer) error {
- v := structPointer_Word64Slice(base, p.field)
-
- nn, err := o.DecodeVarint()
- if err != nil {
- return err
- }
- nb := int(nn) // number of bytes of encoded int64s
-
- fin := o.index + nb
- if fin < o.index {
- return errOverflow
- }
- for o.index < fin {
- u, err := p.valDec(o)
- if err != nil {
- return err
- }
- v.Append(u)
- }
- return nil
-}
-
-// Decode a slice of strings ([]string).
-func (o *Buffer) dec_slice_string(p *Properties, base structPointer) error {
- s, err := o.DecodeStringBytes()
- if err != nil {
- return err
- }
- v := structPointer_StringSlice(base, p.field)
- *v = append(*v, s)
- return nil
-}
-
-// Decode a slice of slice of bytes ([][]byte).
-func (o *Buffer) dec_slice_slice_byte(p *Properties, base structPointer) error {
- b, err := o.DecodeRawBytes(true)
- if err != nil {
- return err
- }
- v := structPointer_BytesSlice(base, p.field)
- *v = append(*v, b)
- return nil
-}
-
-// Decode a map field.
-func (o *Buffer) dec_new_map(p *Properties, base structPointer) error {
- raw, err := o.DecodeRawBytes(false)
- if err != nil {
- return err
- }
- oi := o.index // index at the end of this map entry
- o.index -= len(raw) // move buffer back to start of map entry
-
- mptr := structPointer_NewAt(base, p.field, p.mtype) // *map[K]V
- if mptr.Elem().IsNil() {
- mptr.Elem().Set(reflect.MakeMap(mptr.Type().Elem()))
- }
- v := mptr.Elem() // map[K]V
-
- // Prepare addressable doubly-indirect placeholders for the key and value types.
- // See enc_new_map for why.
- keyptr := reflect.New(reflect.PtrTo(p.mtype.Key())).Elem() // addressable *K
- keybase := toStructPointer(keyptr.Addr()) // **K
-
- var valbase structPointer
- var valptr reflect.Value
- switch p.mtype.Elem().Kind() {
- case reflect.Slice:
- // []byte
- var dummy []byte
- valptr = reflect.ValueOf(&dummy) // *[]byte
- valbase = toStructPointer(valptr) // *[]byte
- case reflect.Ptr:
- // message; valptr is **Msg; need to allocate the intermediate pointer
- valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V
- valptr.Set(reflect.New(valptr.Type().Elem()))
- valbase = toStructPointer(valptr)
- default:
- // everything else
- valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V
- valbase = toStructPointer(valptr.Addr()) // **V
- }
-
- // Decode.
- // This parses a restricted wire format, namely the encoding of a message
- // with two fields. See enc_new_map for the format.
- for o.index < oi {
- // tagcode for key and value properties are always a single byte
- // because they have tags 1 and 2.
- tagcode := o.buf[o.index]
- o.index++
- switch tagcode {
- case p.mkeyprop.tagcode[0]:
- if err := p.mkeyprop.dec(o, p.mkeyprop, keybase); err != nil {
- return err
- }
- case p.mvalprop.tagcode[0]:
- if err := p.mvalprop.dec(o, p.mvalprop, valbase); err != nil {
- return err
- }
- default:
- // TODO: Should we silently skip this instead?
- return fmt.Errorf("proto: bad map data tag %d", raw[0])
- }
- }
- keyelem, valelem := keyptr.Elem(), valptr.Elem()
- if !keyelem.IsValid() {
- keyelem = reflect.Zero(p.mtype.Key())
- }
- if !valelem.IsValid() {
- valelem = reflect.Zero(p.mtype.Elem())
- }
-
- v.SetMapIndex(keyelem, valelem)
- return nil
-}
-
-// Decode a group.
-func (o *Buffer) dec_struct_group(p *Properties, base structPointer) error {
- bas := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(bas) {
- // allocate new nested message
- bas = toStructPointer(reflect.New(p.stype))
- structPointer_SetStructPointer(base, p.field, bas)
- }
- return o.unmarshalType(p.stype, p.sprop, true, bas)
-}
-
-// Decode an embedded message.
-func (o *Buffer) dec_struct_message(p *Properties, base structPointer) (err error) {
- raw, e := o.DecodeRawBytes(false)
- if e != nil {
- return e
- }
-
- bas := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(bas) {
- // allocate new nested message
- bas = toStructPointer(reflect.New(p.stype))
- structPointer_SetStructPointer(base, p.field, bas)
- }
-
- // If the object can unmarshal itself, let it.
- if p.isUnmarshaler {
- iv := structPointer_Interface(bas, p.stype)
- return iv.(Unmarshaler).Unmarshal(raw)
- }
-
- obuf := o.buf
- oi := o.index
- o.buf = raw
- o.index = 0
-
- err = o.unmarshalType(p.stype, p.sprop, false, bas)
- o.buf = obuf
- o.index = oi
-
- return err
-}
-
-// Decode a slice of embedded messages.
-func (o *Buffer) dec_slice_struct_message(p *Properties, base structPointer) error {
- return o.dec_slice_struct(p, false, base)
-}
-
-// Decode a slice of embedded groups.
-func (o *Buffer) dec_slice_struct_group(p *Properties, base structPointer) error {
- return o.dec_slice_struct(p, true, base)
-}
-
-// Decode a slice of structs ([]*struct).
-func (o *Buffer) dec_slice_struct(p *Properties, is_group bool, base structPointer) error {
- v := reflect.New(p.stype)
- bas := toStructPointer(v)
- structPointer_StructPointerSlice(base, p.field).Append(bas)
-
- if is_group {
- err := o.unmarshalType(p.stype, p.sprop, is_group, bas)
- return err
- }
-
- raw, err := o.DecodeRawBytes(false)
- if err != nil {
+ if u, ok := pb.(Unmarshaler); ok {
+ // NOTE: The history of proto have unfortunately been inconsistent
+ // whether Unmarshaler should or should not implicitly clear itself.
+ // Some implementations do, most do not.
+ // Thus, calling this here may or may not do what people want.
+ //
+ // See https://github.com/golang/protobuf/issues/424
+ err := u.Unmarshal(p.buf[p.index:])
+ p.index = len(p.buf)
return err
}
- // If the object can unmarshal itself, let it.
- if p.isUnmarshaler {
- iv := v.Interface()
- return iv.(Unmarshaler).Unmarshal(raw)
- }
-
- obuf := o.buf
- oi := o.index
- o.buf = raw
- o.index = 0
-
- err = o.unmarshalType(p.stype, p.sprop, is_group, bas)
-
- o.buf = obuf
- o.index = oi
-
+ // Slow workaround for messages that aren't Unmarshalers.
+ // This includes some hand-coded .pb.go files and
+ // bootstrap protos.
+ // TODO: fix all of those and then add Unmarshal to
+ // the Message interface. Then:
+ // The cast above and code below can be deleted.
+ // The old unmarshaler can be deleted.
+ // Clients can call Unmarshal directly (can already do that, actually).
+ var info InternalMessageInfo
+ err := info.Unmarshal(pb, p.buf[p.index:])
+ p.index = len(p.buf)
return err
}
diff --git a/vendor/github.com/golang/protobuf/proto/discard.go b/vendor/github.com/golang/protobuf/proto/discard.go
new file mode 100644
index 000000000..dea2617ce
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/discard.go
@@ -0,0 +1,350 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2017 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// 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.
+
+package proto
+
+import (
+ "fmt"
+ "reflect"
+ "strings"
+ "sync"
+ "sync/atomic"
+)
+
+type generatedDiscarder interface {
+ XXX_DiscardUnknown()
+}
+
+// DiscardUnknown recursively discards all unknown fields from this message
+// and all embedded messages.
+//
+// When unmarshaling a message with unrecognized fields, the tags and values
+// of such fields are preserved in the Message. This allows a later call to
+// marshal to be able to produce a message that continues to have those
+// unrecognized fields. To avoid this, DiscardUnknown is used to
+// explicitly clear the unknown fields after unmarshaling.
+//
+// For proto2 messages, the unknown fields of message extensions are only
+// discarded from messages that have been accessed via GetExtension.
+func DiscardUnknown(m Message) {
+ if m, ok := m.(generatedDiscarder); ok {
+ m.XXX_DiscardUnknown()
+ return
+ }
+ // TODO: Dynamically populate a InternalMessageInfo for legacy messages,
+ // but the master branch has no implementation for InternalMessageInfo,
+ // so it would be more work to replicate that approach.
+ discardLegacy(m)
+}
+
+// DiscardUnknown recursively discards all unknown fields.
+func (a *InternalMessageInfo) DiscardUnknown(m Message) {
+ di := atomicLoadDiscardInfo(&a.discard)
+ if di == nil {
+ di = getDiscardInfo(reflect.TypeOf(m).Elem())
+ atomicStoreDiscardInfo(&a.discard, di)
+ }
+ di.discard(toPointer(&m))
+}
+
+type discardInfo struct {
+ typ reflect.Type
+
+ initialized int32 // 0: only typ is valid, 1: everything is valid
+ lock sync.Mutex
+
+ fields []discardFieldInfo
+ unrecognized field
+}
+
+type discardFieldInfo struct {
+ field field // Offset of field, guaranteed to be valid
+ discard func(src pointer)
+}
+
+var (
+ discardInfoMap = map[reflect.Type]*discardInfo{}
+ discardInfoLock sync.Mutex
+)
+
+func getDiscardInfo(t reflect.Type) *discardInfo {
+ discardInfoLock.Lock()
+ defer discardInfoLock.Unlock()
+ di := discardInfoMap[t]
+ if di == nil {
+ di = &discardInfo{typ: t}
+ discardInfoMap[t] = di
+ }
+ return di
+}
+
+func (di *discardInfo) discard(src pointer) {
+ if src.isNil() {
+ return // Nothing to do.
+ }
+
+ if atomic.LoadInt32(&di.initialized) == 0 {
+ di.computeDiscardInfo()
+ }
+
+ for _, fi := range di.fields {
+ sfp := src.offset(fi.field)
+ fi.discard(sfp)
+ }
+
+ // For proto2 messages, only discard unknown fields in message extensions
+ // that have been accessed via GetExtension.
+ if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil {
+ // Ignore lock since DiscardUnknown is not concurrency safe.
+ emm, _ := em.extensionsRead()
+ for _, mx := range emm {
+ if m, ok := mx.value.(Message); ok {
+ DiscardUnknown(m)
+ }
+ }
+ }
+
+ if di.unrecognized.IsValid() {
+ *src.offset(di.unrecognized).toBytes() = nil
+ }
+}
+
+func (di *discardInfo) computeDiscardInfo() {
+ di.lock.Lock()
+ defer di.lock.Unlock()
+ if di.initialized != 0 {
+ return
+ }
+ t := di.typ
+ n := t.NumField()
+
+ for i := 0; i < n; i++ {
+ f := t.Field(i)
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+
+ dfi := discardFieldInfo{field: toField(&f)}
+ tf := f.Type
+
+ // Unwrap tf to get its most basic type.
+ var isPointer, isSlice bool
+ if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
+ isSlice = true
+ tf = tf.Elem()
+ }
+ if tf.Kind() == reflect.Ptr {
+ isPointer = true
+ tf = tf.Elem()
+ }
+ if isPointer && isSlice && tf.Kind() != reflect.Struct {
+ panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name))
+ }
+
+ switch tf.Kind() {
+ case reflect.Struct:
+ switch {
+ case !isPointer:
+ panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name))
+ case isSlice: // E.g., []*pb.T
+ di := getDiscardInfo(tf)
+ dfi.discard = func(src pointer) {
+ sps := src.getPointerSlice()
+ for _, sp := range sps {
+ if !sp.isNil() {
+ di.discard(sp)
+ }
+ }
+ }
+ default: // E.g., *pb.T
+ di := getDiscardInfo(tf)
+ dfi.discard = func(src pointer) {
+ sp := src.getPointer()
+ if !sp.isNil() {
+ di.discard(sp)
+ }
+ }
+ }
+ case reflect.Map:
+ switch {
+ case isPointer || isSlice:
+ panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name))
+ default: // E.g., map[K]V
+ if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T)
+ dfi.discard = func(src pointer) {
+ sm := src.asPointerTo(tf).Elem()
+ if sm.Len() == 0 {
+ return
+ }
+ for _, key := range sm.MapKeys() {
+ val := sm.MapIndex(key)
+ DiscardUnknown(val.Interface().(Message))
+ }
+ }
+ } else {
+ dfi.discard = func(pointer) {} // Noop
+ }
+ }
+ case reflect.Interface:
+ // Must be oneof field.
+ switch {
+ case isPointer || isSlice:
+ panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name))
+ default: // E.g., interface{}
+ // TODO: Make this faster?
+ dfi.discard = func(src pointer) {
+ su := src.asPointerTo(tf).Elem()
+ if !su.IsNil() {
+ sv := su.Elem().Elem().Field(0)
+ if sv.Kind() == reflect.Ptr && sv.IsNil() {
+ return
+ }
+ switch sv.Type().Kind() {
+ case reflect.Ptr: // Proto struct (e.g., *T)
+ DiscardUnknown(sv.Interface().(Message))
+ }
+ }
+ }
+ }
+ default:
+ continue
+ }
+ di.fields = append(di.fields, dfi)
+ }
+
+ di.unrecognized = invalidField
+ if f, ok := t.FieldByName("XXX_unrecognized"); ok {
+ if f.Type != reflect.TypeOf([]byte{}) {
+ panic("expected XXX_unrecognized to be of type []byte")
+ }
+ di.unrecognized = toField(&f)
+ }
+
+ atomic.StoreInt32(&di.initialized, 1)
+}
+
+func discardLegacy(m Message) {
+ v := reflect.ValueOf(m)
+ if v.Kind() != reflect.Ptr || v.IsNil() {
+ return
+ }
+ v = v.Elem()
+ if v.Kind() != reflect.Struct {
+ return
+ }
+ t := v.Type()
+
+ for i := 0; i < v.NumField(); i++ {
+ f := t.Field(i)
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+ vf := v.Field(i)
+ tf := f.Type
+
+ // Unwrap tf to get its most basic type.
+ var isPointer, isSlice bool
+ if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
+ isSlice = true
+ tf = tf.Elem()
+ }
+ if tf.Kind() == reflect.Ptr {
+ isPointer = true
+ tf = tf.Elem()
+ }
+ if isPointer && isSlice && tf.Kind() != reflect.Struct {
+ panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name))
+ }
+
+ switch tf.Kind() {
+ case reflect.Struct:
+ switch {
+ case !isPointer:
+ panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name))
+ case isSlice: // E.g., []*pb.T
+ for j := 0; j < vf.Len(); j++ {
+ discardLegacy(vf.Index(j).Interface().(Message))
+ }
+ default: // E.g., *pb.T
+ discardLegacy(vf.Interface().(Message))
+ }
+ case reflect.Map:
+ switch {
+ case isPointer || isSlice:
+ panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name))
+ default: // E.g., map[K]V
+ tv := vf.Type().Elem()
+ if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T)
+ for _, key := range vf.MapKeys() {
+ val := vf.MapIndex(key)
+ discardLegacy(val.Interface().(Message))
+ }
+ }
+ }
+ case reflect.Interface:
+ // Must be oneof field.
+ switch {
+ case isPointer || isSlice:
+ panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name))
+ default: // E.g., test_proto.isCommunique_Union interface
+ if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" {
+ vf = vf.Elem() // E.g., *test_proto.Communique_Msg
+ if !vf.IsNil() {
+ vf = vf.Elem() // E.g., test_proto.Communique_Msg
+ vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value
+ if vf.Kind() == reflect.Ptr {
+ discardLegacy(vf.Interface().(Message))
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() {
+ if vf.Type() != reflect.TypeOf([]byte{}) {
+ panic("expected XXX_unrecognized to be of type []byte")
+ }
+ vf.Set(reflect.ValueOf([]byte(nil)))
+ }
+
+ // For proto2 messages, only discard unknown fields in message extensions
+ // that have been accessed via GetExtension.
+ if em, err := extendable(m); err == nil {
+ // Ignore lock since discardLegacy is not concurrency safe.
+ emm, _ := em.extensionsRead()
+ for _, mx := range emm {
+ if m, ok := mx.value.(Message); ok {
+ discardLegacy(m)
+ }
+ }
+ }
+}
diff --git a/vendor/github.com/golang/protobuf/proto/encode.go b/vendor/github.com/golang/protobuf/proto/encode.go
index 68b9b30cf..3abfed2cf 100644
--- a/vendor/github.com/golang/protobuf/proto/encode.go
+++ b/vendor/github.com/golang/protobuf/proto/encode.go
@@ -37,28 +37,9 @@ package proto
import (
"errors"
- "fmt"
"reflect"
- "sort"
)
-// RequiredNotSetError is the error returned if Marshal is called with
-// a protocol buffer struct whose required fields have not
-// all been initialized. It is also the error returned if Unmarshal is
-// called with an encoded protocol buffer that does not include all the
-// required fields.
-//
-// When printed, RequiredNotSetError reports the first unset required field in a
-// message. If the field cannot be precisely determined, it is reported as
-// "{Unknown}".
-type RequiredNotSetError struct {
- field string
-}
-
-func (e *RequiredNotSetError) Error() string {
- return fmt.Sprintf("proto: required field %q not set", e.field)
-}
-
var (
// errRepeatedHasNil is the error returned if Marshal is called with
// a struct with a repeated field containing a nil element.
@@ -82,10 +63,6 @@ var (
const maxVarintBytes = 10 // maximum length of a varint
-// maxMarshalSize is the largest allowed size of an encoded protobuf,
-// since C++ and Java use signed int32s for the size.
-const maxMarshalSize = 1<<31 - 1
-
// EncodeVarint returns the varint encoding of x.
// This is the format for the
// int32, int64, uint32, uint64, bool, and enum
@@ -119,18 +96,27 @@ func (p *Buffer) EncodeVarint(x uint64) error {
// SizeVarint returns the varint encoding size of an integer.
func SizeVarint(x uint64) int {
- return sizeVarint(x)
-}
-
-func sizeVarint(x uint64) (n int) {
- for {
- n++
- x >>= 7
- if x == 0 {
- break
- }
- }
- return n
+ switch {
+ case x < 1<<7:
+ return 1
+ case x < 1<<14:
+ return 2
+ case x < 1<<21:
+ return 3
+ case x < 1<<28:
+ return 4
+ case x < 1<<35:
+ return 5
+ case x < 1<<42:
+ return 6
+ case x < 1<<49:
+ return 7
+ case x < 1<<56:
+ return 8
+ case x < 1<<63:
+ return 9
+ }
+ return 10
}
// EncodeFixed64 writes a 64-bit integer to the Buffer.
@@ -149,10 +135,6 @@ func (p *Buffer) EncodeFixed64(x uint64) error {
return nil
}
-func sizeFixed64(x uint64) int {
- return 8
-}
-
// EncodeFixed32 writes a 32-bit integer to the Buffer.
// This is the format for the
// fixed32, sfixed32, and float protocol buffer types.
@@ -165,10 +147,6 @@ func (p *Buffer) EncodeFixed32(x uint64) error {
return nil
}
-func sizeFixed32(x uint64) int {
- return 4
-}
-
// EncodeZigzag64 writes a zigzag-encoded 64-bit integer
// to the Buffer.
// This is the format used for the sint64 protocol buffer type.
@@ -177,10 +155,6 @@ func (p *Buffer) EncodeZigzag64(x uint64) error {
return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63))))
}
-func sizeZigzag64(x uint64) int {
- return sizeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63))))
-}
-
// EncodeZigzag32 writes a zigzag-encoded 32-bit integer
// to the Buffer.
// This is the format used for the sint32 protocol buffer type.
@@ -189,10 +163,6 @@ func (p *Buffer) EncodeZigzag32(x uint64) error {
return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31))))
}
-func sizeZigzag32(x uint64) int {
- return sizeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31))))
-}
-
// EncodeRawBytes writes a count-delimited byte buffer to the Buffer.
// This is the format used for the bytes protocol buffer
// type and for embedded messages.
@@ -202,11 +172,6 @@ func (p *Buffer) EncodeRawBytes(b []byte) error {
return nil
}
-func sizeRawBytes(b []byte) int {
- return sizeVarint(uint64(len(b))) +
- len(b)
-}
-
// EncodeStringBytes writes an encoded string to the Buffer.
// This is the format used for the proto2 string type.
func (p *Buffer) EncodeStringBytes(s string) error {
@@ -215,319 +180,17 @@ func (p *Buffer) EncodeStringBytes(s string) error {
return nil
}
-func sizeStringBytes(s string) int {
- return sizeVarint(uint64(len(s))) +
- len(s)
-}
-
// Marshaler is the interface representing objects that can marshal themselves.
type Marshaler interface {
Marshal() ([]byte, error)
}
-// Marshal takes the protocol buffer
-// and encodes it into the wire format, returning the data.
-func Marshal(pb Message) ([]byte, error) {
- // Can the object marshal itself?
- if m, ok := pb.(Marshaler); ok {
- return m.Marshal()
- }
- p := NewBuffer(nil)
- err := p.Marshal(pb)
- if p.buf == nil && err == nil {
- // Return a non-nil slice on success.
- return []byte{}, nil
- }
- return p.buf, err
-}
-
// EncodeMessage writes the protocol buffer to the Buffer,
// prefixed by a varint-encoded length.
func (p *Buffer) EncodeMessage(pb Message) error {
- t, base, err := getbase(pb)
- if structPointer_IsNil(base) {
- return ErrNil
- }
- if err == nil {
- var state errorState
- err = p.enc_len_struct(GetProperties(t.Elem()), base, &state)
- }
- return err
-}
-
-// Marshal takes the protocol buffer
-// and encodes it into the wire format, writing the result to the
-// Buffer.
-func (p *Buffer) Marshal(pb Message) error {
- // Can the object marshal itself?
- if m, ok := pb.(Marshaler); ok {
- data, err := m.Marshal()
- p.buf = append(p.buf, data...)
- return err
- }
-
- t, base, err := getbase(pb)
- if structPointer_IsNil(base) {
- return ErrNil
- }
- if err == nil {
- err = p.enc_struct(GetProperties(t.Elem()), base)
- }
-
- if collectStats {
- (stats).Encode++ // Parens are to work around a goimports bug.
- }
-
- if len(p.buf) > maxMarshalSize {
- return ErrTooLarge
- }
- return err
-}
-
-// Size returns the encoded size of a protocol buffer.
-func Size(pb Message) (n int) {
- // Can the object marshal itself? If so, Size is slow.
- // TODO: add Size to Marshaler, or add a Sizer interface.
- if m, ok := pb.(Marshaler); ok {
- b, _ := m.Marshal()
- return len(b)
- }
-
- t, base, err := getbase(pb)
- if structPointer_IsNil(base) {
- return 0
- }
- if err == nil {
- n = size_struct(GetProperties(t.Elem()), base)
- }
-
- if collectStats {
- (stats).Size++ // Parens are to work around a goimports bug.
- }
-
- return
-}
-
-// Individual type encoders.
-
-// Encode a bool.
-func (o *Buffer) enc_bool(p *Properties, base structPointer) error {
- v := *structPointer_Bool(base, p.field)
- if v == nil {
- return ErrNil
- }
- x := 0
- if *v {
- x = 1
- }
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func (o *Buffer) enc_proto3_bool(p *Properties, base structPointer) error {
- v := *structPointer_BoolVal(base, p.field)
- if !v {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, 1)
- return nil
-}
-
-func size_bool(p *Properties, base structPointer) int {
- v := *structPointer_Bool(base, p.field)
- if v == nil {
- return 0
- }
- return len(p.tagcode) + 1 // each bool takes exactly one byte
-}
-
-func size_proto3_bool(p *Properties, base structPointer) int {
- v := *structPointer_BoolVal(base, p.field)
- if !v && !p.oneof {
- return 0
- }
- return len(p.tagcode) + 1 // each bool takes exactly one byte
-}
-
-// Encode an int32.
-func (o *Buffer) enc_int32(p *Properties, base structPointer) error {
- v := structPointer_Word32(base, p.field)
- if word32_IsNil(v) {
- return ErrNil
- }
- x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func (o *Buffer) enc_proto3_int32(p *Properties, base structPointer) error {
- v := structPointer_Word32Val(base, p.field)
- x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range
- if x == 0 {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func size_int32(p *Properties, base structPointer) (n int) {
- v := structPointer_Word32(base, p.field)
- if word32_IsNil(v) {
- return 0
- }
- x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range
- n += len(p.tagcode)
- n += p.valSize(uint64(x))
- return
-}
-
-func size_proto3_int32(p *Properties, base structPointer) (n int) {
- v := structPointer_Word32Val(base, p.field)
- x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range
- if x == 0 && !p.oneof {
- return 0
- }
- n += len(p.tagcode)
- n += p.valSize(uint64(x))
- return
-}
-
-// Encode a uint32.
-// Exactly the same as int32, except for no sign extension.
-func (o *Buffer) enc_uint32(p *Properties, base structPointer) error {
- v := structPointer_Word32(base, p.field)
- if word32_IsNil(v) {
- return ErrNil
- }
- x := word32_Get(v)
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func (o *Buffer) enc_proto3_uint32(p *Properties, base structPointer) error {
- v := structPointer_Word32Val(base, p.field)
- x := word32Val_Get(v)
- if x == 0 {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, uint64(x))
- return nil
-}
-
-func size_uint32(p *Properties, base structPointer) (n int) {
- v := structPointer_Word32(base, p.field)
- if word32_IsNil(v) {
- return 0
- }
- x := word32_Get(v)
- n += len(p.tagcode)
- n += p.valSize(uint64(x))
- return
-}
-
-func size_proto3_uint32(p *Properties, base structPointer) (n int) {
- v := structPointer_Word32Val(base, p.field)
- x := word32Val_Get(v)
- if x == 0 && !p.oneof {
- return 0
- }
- n += len(p.tagcode)
- n += p.valSize(uint64(x))
- return
-}
-
-// Encode an int64.
-func (o *Buffer) enc_int64(p *Properties, base structPointer) error {
- v := structPointer_Word64(base, p.field)
- if word64_IsNil(v) {
- return ErrNil
- }
- x := word64_Get(v)
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, x)
- return nil
-}
-
-func (o *Buffer) enc_proto3_int64(p *Properties, base structPointer) error {
- v := structPointer_Word64Val(base, p.field)
- x := word64Val_Get(v)
- if x == 0 {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, x)
- return nil
-}
-
-func size_int64(p *Properties, base structPointer) (n int) {
- v := structPointer_Word64(base, p.field)
- if word64_IsNil(v) {
- return 0
- }
- x := word64_Get(v)
- n += len(p.tagcode)
- n += p.valSize(x)
- return
-}
-
-func size_proto3_int64(p *Properties, base structPointer) (n int) {
- v := structPointer_Word64Val(base, p.field)
- x := word64Val_Get(v)
- if x == 0 && !p.oneof {
- return 0
- }
- n += len(p.tagcode)
- n += p.valSize(x)
- return
-}
-
-// Encode a string.
-func (o *Buffer) enc_string(p *Properties, base structPointer) error {
- v := *structPointer_String(base, p.field)
- if v == nil {
- return ErrNil
- }
- x := *v
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeStringBytes(x)
- return nil
-}
-
-func (o *Buffer) enc_proto3_string(p *Properties, base structPointer) error {
- v := *structPointer_StringVal(base, p.field)
- if v == "" {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeStringBytes(v)
- return nil
-}
-
-func size_string(p *Properties, base structPointer) (n int) {
- v := *structPointer_String(base, p.field)
- if v == nil {
- return 0
- }
- x := *v
- n += len(p.tagcode)
- n += sizeStringBytes(x)
- return
-}
-
-func size_proto3_string(p *Properties, base structPointer) (n int) {
- v := *structPointer_StringVal(base, p.field)
- if v == "" && !p.oneof {
- return 0
- }
- n += len(p.tagcode)
- n += sizeStringBytes(v)
- return
+ siz := Size(pb)
+ p.EncodeVarint(uint64(siz))
+ return p.Marshal(pb)
}
// All protocol buffer fields are nillable, but be careful.
@@ -538,818 +201,3 @@ func isNil(v reflect.Value) bool {
}
return false
}
-
-// Encode a message struct.
-func (o *Buffer) enc_struct_message(p *Properties, base structPointer) error {
- var state errorState
- structp := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(structp) {
- return ErrNil
- }
-
- // Can the object marshal itself?
- if p.isMarshaler {
- m := structPointer_Interface(structp, p.stype).(Marshaler)
- data, err := m.Marshal()
- if err != nil && !state.shouldContinue(err, nil) {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- return state.err
- }
-
- o.buf = append(o.buf, p.tagcode...)
- return o.enc_len_struct(p.sprop, structp, &state)
-}
-
-func size_struct_message(p *Properties, base structPointer) int {
- structp := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(structp) {
- return 0
- }
-
- // Can the object marshal itself?
- if p.isMarshaler {
- m := structPointer_Interface(structp, p.stype).(Marshaler)
- data, _ := m.Marshal()
- n0 := len(p.tagcode)
- n1 := sizeRawBytes(data)
- return n0 + n1
- }
-
- n0 := len(p.tagcode)
- n1 := size_struct(p.sprop, structp)
- n2 := sizeVarint(uint64(n1)) // size of encoded length
- return n0 + n1 + n2
-}
-
-// Encode a group struct.
-func (o *Buffer) enc_struct_group(p *Properties, base structPointer) error {
- var state errorState
- b := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(b) {
- return ErrNil
- }
-
- o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup))
- err := o.enc_struct(p.sprop, b)
- if err != nil && !state.shouldContinue(err, nil) {
- return err
- }
- o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup))
- return state.err
-}
-
-func size_struct_group(p *Properties, base structPointer) (n int) {
- b := structPointer_GetStructPointer(base, p.field)
- if structPointer_IsNil(b) {
- return 0
- }
-
- n += sizeVarint(uint64((p.Tag << 3) | WireStartGroup))
- n += size_struct(p.sprop, b)
- n += sizeVarint(uint64((p.Tag << 3) | WireEndGroup))
- return
-}
-
-// Encode a slice of bools ([]bool).
-func (o *Buffer) enc_slice_bool(p *Properties, base structPointer) error {
- s := *structPointer_BoolSlice(base, p.field)
- l := len(s)
- if l == 0 {
- return ErrNil
- }
- for _, x := range s {
- o.buf = append(o.buf, p.tagcode...)
- v := uint64(0)
- if x {
- v = 1
- }
- p.valEnc(o, v)
- }
- return nil
-}
-
-func size_slice_bool(p *Properties, base structPointer) int {
- s := *structPointer_BoolSlice(base, p.field)
- l := len(s)
- if l == 0 {
- return 0
- }
- return l * (len(p.tagcode) + 1) // each bool takes exactly one byte
-}
-
-// Encode a slice of bools ([]bool) in packed format.
-func (o *Buffer) enc_slice_packed_bool(p *Properties, base structPointer) error {
- s := *structPointer_BoolSlice(base, p.field)
- l := len(s)
- if l == 0 {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeVarint(uint64(l)) // each bool takes exactly one byte
- for _, x := range s {
- v := uint64(0)
- if x {
- v = 1
- }
- p.valEnc(o, v)
- }
- return nil
-}
-
-func size_slice_packed_bool(p *Properties, base structPointer) (n int) {
- s := *structPointer_BoolSlice(base, p.field)
- l := len(s)
- if l == 0 {
- return 0
- }
- n += len(p.tagcode)
- n += sizeVarint(uint64(l))
- n += l // each bool takes exactly one byte
- return
-}
-
-// Encode a slice of bytes ([]byte).
-func (o *Buffer) enc_slice_byte(p *Properties, base structPointer) error {
- s := *structPointer_Bytes(base, p.field)
- if s == nil {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(s)
- return nil
-}
-
-func (o *Buffer) enc_proto3_slice_byte(p *Properties, base structPointer) error {
- s := *structPointer_Bytes(base, p.field)
- if len(s) == 0 {
- return ErrNil
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(s)
- return nil
-}
-
-func size_slice_byte(p *Properties, base structPointer) (n int) {
- s := *structPointer_Bytes(base, p.field)
- if s == nil && !p.oneof {
- return 0
- }
- n += len(p.tagcode)
- n += sizeRawBytes(s)
- return
-}
-
-func size_proto3_slice_byte(p *Properties, base structPointer) (n int) {
- s := *structPointer_Bytes(base, p.field)
- if len(s) == 0 && !p.oneof {
- return 0
- }
- n += len(p.tagcode)
- n += sizeRawBytes(s)
- return
-}
-
-// Encode a slice of int32s ([]int32).
-func (o *Buffer) enc_slice_int32(p *Properties, base structPointer) error {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return ErrNil
- }
- for i := 0; i < l; i++ {
- o.buf = append(o.buf, p.tagcode...)
- x := int32(s.Index(i)) // permit sign extension to use full 64-bit range
- p.valEnc(o, uint64(x))
- }
- return nil
-}
-
-func size_slice_int32(p *Properties, base structPointer) (n int) {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return 0
- }
- for i := 0; i < l; i++ {
- n += len(p.tagcode)
- x := int32(s.Index(i)) // permit sign extension to use full 64-bit range
- n += p.valSize(uint64(x))
- }
- return
-}
-
-// Encode a slice of int32s ([]int32) in packed format.
-func (o *Buffer) enc_slice_packed_int32(p *Properties, base structPointer) error {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return ErrNil
- }
- // TODO: Reuse a Buffer.
- buf := NewBuffer(nil)
- for i := 0; i < l; i++ {
- x := int32(s.Index(i)) // permit sign extension to use full 64-bit range
- p.valEnc(buf, uint64(x))
- }
-
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeVarint(uint64(len(buf.buf)))
- o.buf = append(o.buf, buf.buf...)
- return nil
-}
-
-func size_slice_packed_int32(p *Properties, base structPointer) (n int) {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return 0
- }
- var bufSize int
- for i := 0; i < l; i++ {
- x := int32(s.Index(i)) // permit sign extension to use full 64-bit range
- bufSize += p.valSize(uint64(x))
- }
-
- n += len(p.tagcode)
- n += sizeVarint(uint64(bufSize))
- n += bufSize
- return
-}
-
-// Encode a slice of uint32s ([]uint32).
-// Exactly the same as int32, except for no sign extension.
-func (o *Buffer) enc_slice_uint32(p *Properties, base structPointer) error {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return ErrNil
- }
- for i := 0; i < l; i++ {
- o.buf = append(o.buf, p.tagcode...)
- x := s.Index(i)
- p.valEnc(o, uint64(x))
- }
- return nil
-}
-
-func size_slice_uint32(p *Properties, base structPointer) (n int) {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return 0
- }
- for i := 0; i < l; i++ {
- n += len(p.tagcode)
- x := s.Index(i)
- n += p.valSize(uint64(x))
- }
- return
-}
-
-// Encode a slice of uint32s ([]uint32) in packed format.
-// Exactly the same as int32, except for no sign extension.
-func (o *Buffer) enc_slice_packed_uint32(p *Properties, base structPointer) error {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return ErrNil
- }
- // TODO: Reuse a Buffer.
- buf := NewBuffer(nil)
- for i := 0; i < l; i++ {
- p.valEnc(buf, uint64(s.Index(i)))
- }
-
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeVarint(uint64(len(buf.buf)))
- o.buf = append(o.buf, buf.buf...)
- return nil
-}
-
-func size_slice_packed_uint32(p *Properties, base structPointer) (n int) {
- s := structPointer_Word32Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return 0
- }
- var bufSize int
- for i := 0; i < l; i++ {
- bufSize += p.valSize(uint64(s.Index(i)))
- }
-
- n += len(p.tagcode)
- n += sizeVarint(uint64(bufSize))
- n += bufSize
- return
-}
-
-// Encode a slice of int64s ([]int64).
-func (o *Buffer) enc_slice_int64(p *Properties, base structPointer) error {
- s := structPointer_Word64Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return ErrNil
- }
- for i := 0; i < l; i++ {
- o.buf = append(o.buf, p.tagcode...)
- p.valEnc(o, s.Index(i))
- }
- return nil
-}
-
-func size_slice_int64(p *Properties, base structPointer) (n int) {
- s := structPointer_Word64Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return 0
- }
- for i := 0; i < l; i++ {
- n += len(p.tagcode)
- n += p.valSize(s.Index(i))
- }
- return
-}
-
-// Encode a slice of int64s ([]int64) in packed format.
-func (o *Buffer) enc_slice_packed_int64(p *Properties, base structPointer) error {
- s := structPointer_Word64Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return ErrNil
- }
- // TODO: Reuse a Buffer.
- buf := NewBuffer(nil)
- for i := 0; i < l; i++ {
- p.valEnc(buf, s.Index(i))
- }
-
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeVarint(uint64(len(buf.buf)))
- o.buf = append(o.buf, buf.buf...)
- return nil
-}
-
-func size_slice_packed_int64(p *Properties, base structPointer) (n int) {
- s := structPointer_Word64Slice(base, p.field)
- l := s.Len()
- if l == 0 {
- return 0
- }
- var bufSize int
- for i := 0; i < l; i++ {
- bufSize += p.valSize(s.Index(i))
- }
-
- n += len(p.tagcode)
- n += sizeVarint(uint64(bufSize))
- n += bufSize
- return
-}
-
-// Encode a slice of slice of bytes ([][]byte).
-func (o *Buffer) enc_slice_slice_byte(p *Properties, base structPointer) error {
- ss := *structPointer_BytesSlice(base, p.field)
- l := len(ss)
- if l == 0 {
- return ErrNil
- }
- for i := 0; i < l; i++ {
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(ss[i])
- }
- return nil
-}
-
-func size_slice_slice_byte(p *Properties, base structPointer) (n int) {
- ss := *structPointer_BytesSlice(base, p.field)
- l := len(ss)
- if l == 0 {
- return 0
- }
- n += l * len(p.tagcode)
- for i := 0; i < l; i++ {
- n += sizeRawBytes(ss[i])
- }
- return
-}
-
-// Encode a slice of strings ([]string).
-func (o *Buffer) enc_slice_string(p *Properties, base structPointer) error {
- ss := *structPointer_StringSlice(base, p.field)
- l := len(ss)
- for i := 0; i < l; i++ {
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeStringBytes(ss[i])
- }
- return nil
-}
-
-func size_slice_string(p *Properties, base structPointer) (n int) {
- ss := *structPointer_StringSlice(base, p.field)
- l := len(ss)
- n += l * len(p.tagcode)
- for i := 0; i < l; i++ {
- n += sizeStringBytes(ss[i])
- }
- return
-}
-
-// Encode a slice of message structs ([]*struct).
-func (o *Buffer) enc_slice_struct_message(p *Properties, base structPointer) error {
- var state errorState
- s := structPointer_StructPointerSlice(base, p.field)
- l := s.Len()
-
- for i := 0; i < l; i++ {
- structp := s.Index(i)
- if structPointer_IsNil(structp) {
- return errRepeatedHasNil
- }
-
- // Can the object marshal itself?
- if p.isMarshaler {
- m := structPointer_Interface(structp, p.stype).(Marshaler)
- data, err := m.Marshal()
- if err != nil && !state.shouldContinue(err, nil) {
- return err
- }
- o.buf = append(o.buf, p.tagcode...)
- o.EncodeRawBytes(data)
- continue
- }
-
- o.buf = append(o.buf, p.tagcode...)
- err := o.enc_len_struct(p.sprop, structp, &state)
- if err != nil && !state.shouldContinue(err, nil) {
- if err == ErrNil {
- return errRepeatedHasNil
- }
- return err
- }
- }
- return state.err
-}
-
-func size_slice_struct_message(p *Properties, base structPointer) (n int) {
- s := structPointer_StructPointerSlice(base, p.field)
- l := s.Len()
- n += l * len(p.tagcode)
- for i := 0; i < l; i++ {
- structp := s.Index(i)
- if structPointer_IsNil(structp) {
- return // return the size up to this point
- }
-
- // Can the object marshal itself?
- if p.isMarshaler {
- m := structPointer_Interface(structp, p.stype).(Marshaler)
- data, _ := m.Marshal()
- n += sizeRawBytes(data)
- continue
- }
-
- n0 := size_struct(p.sprop, structp)
- n1 := sizeVarint(uint64(n0)) // size of encoded length
- n += n0 + n1
- }
- return
-}
-
-// Encode a slice of group structs ([]*struct).
-func (o *Buffer) enc_slice_struct_group(p *Properties, base structPointer) error {
- var state errorState
- s := structPointer_StructPointerSlice(base, p.field)
- l := s.Len()
-
- for i := 0; i < l; i++ {
- b := s.Index(i)
- if structPointer_IsNil(b) {
- return errRepeatedHasNil
- }
-
- o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup))
-
- err := o.enc_struct(p.sprop, b)
-
- if err != nil && !state.shouldContinue(err, nil) {
- if err == ErrNil {
- return errRepeatedHasNil
- }
- return err
- }
-
- o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup))
- }
- return state.err
-}
-
-func size_slice_struct_group(p *Properties, base structPointer) (n int) {
- s := structPointer_StructPointerSlice(base, p.field)
- l := s.Len()
-
- n += l * sizeVarint(uint64((p.Tag<<3)|WireStartGroup))
- n += l * sizeVarint(uint64((p.Tag<<3)|WireEndGroup))
- for i := 0; i < l; i++ {
- b := s.Index(i)
- if structPointer_IsNil(b) {
- return // return size up to this point
- }
-
- n += size_struct(p.sprop, b)
- }
- return
-}
-
-// Encode an extension map.
-func (o *Buffer) enc_map(p *Properties, base structPointer) error {
- exts := structPointer_ExtMap(base, p.field)
- if err := encodeExtensionsMap(*exts); err != nil {
- return err
- }
-
- return o.enc_map_body(*exts)
-}
-
-func (o *Buffer) enc_exts(p *Properties, base structPointer) error {
- exts := structPointer_Extensions(base, p.field)
- if err := encodeExtensions(exts); err != nil {
- return err
- }
- v, _ := exts.extensionsRead()
-
- return o.enc_map_body(v)
-}
-
-func (o *Buffer) enc_map_body(v map[int32]Extension) error {
- // Fast-path for common cases: zero or one extensions.
- if len(v) <= 1 {
- for _, e := range v {
- o.buf = append(o.buf, e.enc...)
- }
- return nil
- }
-
- // Sort keys to provide a deterministic encoding.
- keys := make([]int, 0, len(v))
- for k := range v {
- keys = append(keys, int(k))
- }
- sort.Ints(keys)
-
- for _, k := range keys {
- o.buf = append(o.buf, v[int32(k)].enc...)
- }
- return nil
-}
-
-func size_map(p *Properties, base structPointer) int {
- v := structPointer_ExtMap(base, p.field)
- return extensionsMapSize(*v)
-}
-
-func size_exts(p *Properties, base structPointer) int {
- v := structPointer_Extensions(base, p.field)
- return extensionsSize(v)
-}
-
-// Encode a map field.
-func (o *Buffer) enc_new_map(p *Properties, base structPointer) error {
- var state errorState // XXX: or do we need to plumb this through?
-
- /*
- A map defined as
- map<key_type, value_type> map_field = N;
- is encoded in the same way as
- message MapFieldEntry {
- key_type key = 1;
- value_type value = 2;
- }
- repeated MapFieldEntry map_field = N;
- */
-
- v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V
- if v.Len() == 0 {
- return nil
- }
-
- keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype)
-
- enc := func() error {
- if err := p.mkeyprop.enc(o, p.mkeyprop, keybase); err != nil {
- return err
- }
- if err := p.mvalprop.enc(o, p.mvalprop, valbase); err != nil && err != ErrNil {
- return err
- }
- return nil
- }
-
- // Don't sort map keys. It is not required by the spec, and C++ doesn't do it.
- for _, key := range v.MapKeys() {
- val := v.MapIndex(key)
-
- keycopy.Set(key)
- valcopy.Set(val)
-
- o.buf = append(o.buf, p.tagcode...)
- if err := o.enc_len_thing(enc, &state); err != nil {
- return err
- }
- }
- return nil
-}
-
-func size_new_map(p *Properties, base structPointer) int {
- v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V
-
- keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype)
-
- n := 0
- for _, key := range v.MapKeys() {
- val := v.MapIndex(key)
- keycopy.Set(key)
- valcopy.Set(val)
-
- // Tag codes for key and val are the responsibility of the sub-sizer.
- keysize := p.mkeyprop.size(p.mkeyprop, keybase)
- valsize := p.mvalprop.size(p.mvalprop, valbase)
- entry := keysize + valsize
- // Add on tag code and length of map entry itself.
- n += len(p.tagcode) + sizeVarint(uint64(entry)) + entry
- }
- return n
-}
-
-// mapEncodeScratch returns a new reflect.Value matching the map's value type,
-// and a structPointer suitable for passing to an encoder or sizer.
-func mapEncodeScratch(mapType reflect.Type) (keycopy, valcopy reflect.Value, keybase, valbase structPointer) {
- // Prepare addressable doubly-indirect placeholders for the key and value types.
- // This is needed because the element-type encoders expect **T, but the map iteration produces T.
-
- keycopy = reflect.New(mapType.Key()).Elem() // addressable K
- keyptr := reflect.New(reflect.PtrTo(keycopy.Type())).Elem() // addressable *K
- keyptr.Set(keycopy.Addr()) //
- keybase = toStructPointer(keyptr.Addr()) // **K
-
- // Value types are more varied and require special handling.
- switch mapType.Elem().Kind() {
- case reflect.Slice:
- // []byte
- var dummy []byte
- valcopy = reflect.ValueOf(&dummy).Elem() // addressable []byte
- valbase = toStructPointer(valcopy.Addr())
- case reflect.Ptr:
- // message; the generated field type is map[K]*Msg (so V is *Msg),
- // so we only need one level of indirection.
- valcopy = reflect.New(mapType.Elem()).Elem() // addressable V
- valbase = toStructPointer(valcopy.Addr())
- default:
- // everything else
- valcopy = reflect.New(mapType.Elem()).Elem() // addressable V
- valptr := reflect.New(reflect.PtrTo(valcopy.Type())).Elem() // addressable *V
- valptr.Set(valcopy.Addr()) //
- valbase = toStructPointer(valptr.Addr()) // **V
- }
- return
-}
-
-// Encode a struct.
-func (o *Buffer) enc_struct(prop *StructProperties, base structPointer) error {
- var state errorState
- // Encode fields in tag order so that decoders may use optimizations
- // that depend on the ordering.
- // https://developers.google.com/protocol-buffers/docs/encoding#order
- for _, i := range prop.order {
- p := prop.Prop[i]
- if p.enc != nil {
- err := p.enc(o, p, base)
- if err != nil {
- if err == ErrNil {
- if p.Required && state.err == nil {
- state.err = &RequiredNotSetError{p.Name}
- }
- } else if err == errRepeatedHasNil {
- // Give more context to nil values in repeated fields.
- return errors.New("repeated field " + p.OrigName + " has nil element")
- } else if !state.shouldContinue(err, p) {
- return err
- }
- }
- if len(o.buf) > maxMarshalSize {
- return ErrTooLarge
- }
- }
- }
-
- // Do oneof fields.
- if prop.oneofMarshaler != nil {
- m := structPointer_Interface(base, prop.stype).(Message)
- if err := prop.oneofMarshaler(m, o); err == ErrNil {
- return errOneofHasNil
- } else if err != nil {
- return err
- }
- }
-
- // Add unrecognized fields at the end.
- if prop.unrecField.IsValid() {
- v := *structPointer_Bytes(base, prop.unrecField)
- if len(o.buf)+len(v) > maxMarshalSize {
- return ErrTooLarge
- }
- if len(v) > 0 {
- o.buf = append(o.buf, v...)
- }
- }
-
- return state.err
-}
-
-func size_struct(prop *StructProperties, base structPointer) (n int) {
- for _, i := range prop.order {
- p := prop.Prop[i]
- if p.size != nil {
- n += p.size(p, base)
- }
- }
-
- // Add unrecognized fields at the end.
- if prop.unrecField.IsValid() {
- v := *structPointer_Bytes(base, prop.unrecField)
- n += len(v)
- }
-
- // Factor in any oneof fields.
- if prop.oneofSizer != nil {
- m := structPointer_Interface(base, prop.stype).(Message)
- n += prop.oneofSizer(m)
- }
-
- return
-}
-
-var zeroes [20]byte // longer than any conceivable sizeVarint
-
-// Encode a struct, preceded by its encoded length (as a varint).
-func (o *Buffer) enc_len_struct(prop *StructProperties, base structPointer, state *errorState) error {
- return o.enc_len_thing(func() error { return o.enc_struct(prop, base) }, state)
-}
-
-// Encode something, preceded by its encoded length (as a varint).
-func (o *Buffer) enc_len_thing(enc func() error, state *errorState) error {
- iLen := len(o.buf)
- o.buf = append(o.buf, 0, 0, 0, 0) // reserve four bytes for length
- iMsg := len(o.buf)
- err := enc()
- if err != nil && !state.shouldContinue(err, nil) {
- return err
- }
- lMsg := len(o.buf) - iMsg
- lLen := sizeVarint(uint64(lMsg))
- switch x := lLen - (iMsg - iLen); {
- case x > 0: // actual length is x bytes larger than the space we reserved
- // Move msg x bytes right.
- o.buf = append(o.buf, zeroes[:x]...)
- copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg])
- case x < 0: // actual length is x bytes smaller than the space we reserved
- // Move msg x bytes left.
- copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg])
- o.buf = o.buf[:len(o.buf)+x] // x is negative
- }
- // Encode the length in the reserved space.
- o.buf = o.buf[:iLen]
- o.EncodeVarint(uint64(lMsg))
- o.buf = o.buf[:len(o.buf)+lMsg]
- return state.err
-}
-
-// errorState maintains the first error that occurs and updates that error
-// with additional context.
-type errorState struct {
- err error
-}
-
-// shouldContinue reports whether encoding should continue upon encountering the
-// given error. If the error is RequiredNotSetError, shouldContinue returns true
-// and, if this is the first appearance of that error, remembers it for future
-// reporting.
-//
-// If prop is not nil, it may update any error with additional context about the
-// field with the error.
-func (s *errorState) shouldContinue(err error, prop *Properties) bool {
- // Ignore unset required fields.
- reqNotSet, ok := err.(*RequiredNotSetError)
- if !ok {
- return false
- }
- if s.err == nil {
- if prop != nil {
- err = &RequiredNotSetError{prop.Name + "." + reqNotSet.field}
- }
- s.err = err
- }
- return true
-}
diff --git a/vendor/github.com/golang/protobuf/proto/equal.go b/vendor/github.com/golang/protobuf/proto/equal.go
index 2ed1cf596..d4db5a1c1 100644
--- a/vendor/github.com/golang/protobuf/proto/equal.go
+++ b/vendor/github.com/golang/protobuf/proto/equal.go
@@ -109,15 +109,6 @@ func equalStruct(v1, v2 reflect.Value) bool {
// set/unset mismatch
return false
}
- b1, ok := f1.Interface().(raw)
- if ok {
- b2 := f2.Interface().(raw)
- // RawMessage
- if !bytes.Equal(b1.Bytes(), b2.Bytes()) {
- return false
- }
- continue
- }
f1, f2 = f1.Elem(), f2.Elem()
}
if !equalAny(f1, f2, sprop.Prop[i]) {
@@ -146,11 +137,7 @@ func equalStruct(v1, v2 reflect.Value) bool {
u1 := uf.Bytes()
u2 := v2.FieldByName("XXX_unrecognized").Bytes()
- if !bytes.Equal(u1, u2) {
- return false
- }
-
- return true
+ return bytes.Equal(u1, u2)
}
// v1 and v2 are known to have the same type.
@@ -261,6 +248,15 @@ func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool {
m1, m2 := e1.value, e2.value
+ if m1 == nil && m2 == nil {
+ // Both have only encoded form.
+ if bytes.Equal(e1.enc, e2.enc) {
+ continue
+ }
+ // The bytes are different, but the extensions might still be
+ // equal. We need to decode them to compare.
+ }
+
if m1 != nil && m2 != nil {
// Both are unencoded.
if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {
@@ -276,8 +272,12 @@ func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool {
desc = m[extNum]
}
if desc == nil {
+ // If both have only encoded form and the bytes are the same,
+ // it is handled above. We get here when the bytes are different.
+ // We don't know how to decode it, so just compare them as byte
+ // slices.
log.Printf("proto: don't know how to compare extension %d of %v", extNum, base)
- continue
+ return false
}
var err error
if m1 == nil {
diff --git a/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/golang/protobuf/proto/extensions.go
index 6b9b36374..816a3b9d6 100644
--- a/vendor/github.com/golang/protobuf/proto/extensions.go
+++ b/vendor/github.com/golang/protobuf/proto/extensions.go
@@ -38,6 +38,7 @@ package proto
import (
"errors"
"fmt"
+ "io"
"reflect"
"strconv"
"sync"
@@ -91,14 +92,29 @@ func (n notLocker) Unlock() {}
// extendable returns the extendableProto interface for the given generated proto message.
// If the proto message has the old extension format, it returns a wrapper that implements
// the extendableProto interface.
-func extendable(p interface{}) (extendableProto, bool) {
- if ep, ok := p.(extendableProto); ok {
- return ep, ok
- }
- if ep, ok := p.(extendableProtoV1); ok {
- return extensionAdapter{ep}, ok
+func extendable(p interface{}) (extendableProto, error) {
+ switch p := p.(type) {
+ case extendableProto:
+ if isNilPtr(p) {
+ return nil, fmt.Errorf("proto: nil %T is not extendable", p)
+ }
+ return p, nil
+ case extendableProtoV1:
+ if isNilPtr(p) {
+ return nil, fmt.Errorf("proto: nil %T is not extendable", p)
+ }
+ return extensionAdapter{p}, nil
}
- return nil, false
+ // Don't allocate a specific error containing %T:
+ // this is the hot path for Clone and MarshalText.
+ return nil, errNotExtendable
+}
+
+var errNotExtendable = errors.New("proto: not an extendable proto.Message")
+
+func isNilPtr(x interface{}) bool {
+ v := reflect.ValueOf(x)
+ return v.Kind() == reflect.Ptr && v.IsNil()
}
// XXX_InternalExtensions is an internal representation of proto extensions.
@@ -143,9 +159,6 @@ func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Loc
return e.p.extensionMap, &e.p.mu
}
-var extendableProtoType = reflect.TypeOf((*extendableProto)(nil)).Elem()
-var extendableProtoV1Type = reflect.TypeOf((*extendableProtoV1)(nil)).Elem()
-
// ExtensionDesc represents an extension specification.
// Used in generated code from the protocol compiler.
type ExtensionDesc struct {
@@ -154,6 +167,7 @@ type ExtensionDesc struct {
Field int32 // field number
Name string // fully-qualified name of extension, for text formatting
Tag string // protobuf tag style
+ Filename string // name of the file in which the extension is defined
}
func (ed *ExtensionDesc) repeated() bool {
@@ -178,8 +192,8 @@ type Extension struct {
// SetRawExtension is for testing only.
func SetRawExtension(base Message, id int32, b []byte) {
- epb, ok := extendable(base)
- if !ok {
+ epb, err := extendable(base)
+ if err != nil {
return
}
extmap := epb.extensionsWrite()
@@ -204,7 +218,7 @@ func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error {
pbi = ea.extendableProtoV1
}
if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b {
- return errors.New("proto: bad extended type; " + b.String() + " does not extend " + a.String())
+ return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a)
}
// Check the range.
if !isExtensionField(pb, extension.Field) {
@@ -249,85 +263,11 @@ func extensionProperties(ed *ExtensionDesc) *Properties {
return prop
}
-// encode encodes any unmarshaled (unencoded) extensions in e.
-func encodeExtensions(e *XXX_InternalExtensions) error {
- m, mu := e.extensionsRead()
- if m == nil {
- return nil // fast path
- }
- mu.Lock()
- defer mu.Unlock()
- return encodeExtensionsMap(m)
-}
-
-// encode encodes any unmarshaled (unencoded) extensions in e.
-func encodeExtensionsMap(m map[int32]Extension) error {
- for k, e := range m {
- if e.value == nil || e.desc == nil {
- // Extension is only in its encoded form.
- continue
- }
-
- // We don't skip extensions that have an encoded form set,
- // because the extension value may have been mutated after
- // the last time this function was called.
-
- et := reflect.TypeOf(e.desc.ExtensionType)
- props := extensionProperties(e.desc)
-
- p := NewBuffer(nil)
- // If e.value has type T, the encoder expects a *struct{ X T }.
- // Pass a *T with a zero field and hope it all works out.
- x := reflect.New(et)
- x.Elem().Set(reflect.ValueOf(e.value))
- if err := props.enc(p, props, toStructPointer(x)); err != nil {
- return err
- }
- e.enc = p.buf
- m[k] = e
- }
- return nil
-}
-
-func extensionsSize(e *XXX_InternalExtensions) (n int) {
- m, mu := e.extensionsRead()
- if m == nil {
- return 0
- }
- mu.Lock()
- defer mu.Unlock()
- return extensionsMapSize(m)
-}
-
-func extensionsMapSize(m map[int32]Extension) (n int) {
- for _, e := range m {
- if e.value == nil || e.desc == nil {
- // Extension is only in its encoded form.
- n += len(e.enc)
- continue
- }
-
- // We don't skip extensions that have an encoded form set,
- // because the extension value may have been mutated after
- // the last time this function was called.
-
- et := reflect.TypeOf(e.desc.ExtensionType)
- props := extensionProperties(e.desc)
-
- // If e.value has type T, the encoder expects a *struct{ X T }.
- // Pass a *T with a zero field and hope it all works out.
- x := reflect.New(et)
- x.Elem().Set(reflect.ValueOf(e.value))
- n += props.size(props, toStructPointer(x))
- }
- return
-}
-
// HasExtension returns whether the given extension is present in pb.
func HasExtension(pb Message, extension *ExtensionDesc) bool {
// TODO: Check types, field numbers, etc.?
- epb, ok := extendable(pb)
- if !ok {
+ epb, err := extendable(pb)
+ if err != nil {
return false
}
extmap, mu := epb.extensionsRead()
@@ -335,15 +275,15 @@ func HasExtension(pb Message, extension *ExtensionDesc) bool {
return false
}
mu.Lock()
- _, ok = extmap[extension.Field]
+ _, ok := extmap[extension.Field]
mu.Unlock()
return ok
}
// ClearExtension removes the given extension from pb.
func ClearExtension(pb Message, extension *ExtensionDesc) {
- epb, ok := extendable(pb)
- if !ok {
+ epb, err := extendable(pb)
+ if err != nil {
return
}
// TODO: Check types, field numbers, etc.?
@@ -351,16 +291,26 @@ func ClearExtension(pb Message, extension *ExtensionDesc) {
delete(extmap, extension.Field)
}
-// GetExtension parses and returns the given extension of pb.
-// If the extension is not present and has no default value it returns ErrMissingExtension.
+// GetExtension retrieves a proto2 extended field from pb.
+//
+// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil),
+// then GetExtension parses the encoded field and returns a Go value of the specified type.
+// If the field is not present, then the default value is returned (if one is specified),
+// otherwise ErrMissingExtension is reported.
+//
+// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil),
+// then GetExtension returns the raw encoded bytes of the field extension.
func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
- epb, ok := extendable(pb)
- if !ok {
- return nil, errors.New("proto: not an extendable proto")
+ epb, err := extendable(pb)
+ if err != nil {
+ return nil, err
}
- if err := checkExtensionTypes(epb, extension); err != nil {
- return nil, err
+ if extension.ExtendedType != nil {
+ // can only check type if this is a complete descriptor
+ if err := checkExtensionTypes(epb, extension); err != nil {
+ return nil, err
+ }
}
emap, mu := epb.extensionsRead()
@@ -387,6 +337,11 @@ func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
return e.value, nil
}
+ if extension.ExtensionType == nil {
+ // incomplete descriptor
+ return e.enc, nil
+ }
+
v, err := decodeExtension(e.enc, extension)
if err != nil {
return nil, err
@@ -404,6 +359,11 @@ func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {
// defaultExtensionValue returns the default value for extension.
// If no default for an extension is defined ErrMissingExtension is returned.
func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) {
+ if extension.ExtensionType == nil {
+ // incomplete descriptor, so no default
+ return nil, ErrMissingExtension
+ }
+
t := reflect.TypeOf(extension.ExtensionType)
props := extensionProperties(extension)
@@ -438,31 +398,28 @@ func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) {
// decodeExtension decodes an extension encoded in b.
func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) {
- o := NewBuffer(b)
-
t := reflect.TypeOf(extension.ExtensionType)
-
- props := extensionProperties(extension)
+ unmarshal := typeUnmarshaler(t, extension.Tag)
// t is a pointer to a struct, pointer to basic type or a slice.
- // Allocate a "field" to store the pointer/slice itself; the
- // pointer/slice will be stored here. We pass
- // the address of this field to props.dec.
- // This passes a zero field and a *t and lets props.dec
- // interpret it as a *struct{ x t }.
+ // Allocate space to store the pointer/slice.
value := reflect.New(t).Elem()
+ var err error
for {
- // Discard wire type and field number varint. It isn't needed.
- if _, err := o.DecodeVarint(); err != nil {
- return nil, err
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
}
+ b = b[n:]
+ wire := int(x) & 7
- if err := props.dec(o, props, toStructPointer(value.Addr())); err != nil {
+ b, err = unmarshal(b, valToPointer(value.Addr()), wire)
+ if err != nil {
return nil, err
}
- if o.index >= len(o.buf) {
+ if len(b) == 0 {
break
}
}
@@ -472,9 +429,9 @@ func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) {
// GetExtensions returns a slice of the extensions present in pb that are also listed in es.
// The returned slice has the same length as es; missing extensions will appear as nil elements.
func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) {
- epb, ok := extendable(pb)
- if !ok {
- return nil, errors.New("proto: not an extendable proto")
+ epb, err := extendable(pb)
+ if err != nil {
+ return nil, err
}
extensions = make([]interface{}, len(es))
for i, e := range es {
@@ -493,9 +450,9 @@ func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, e
// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing
// just the Field field, which defines the extension's field number.
func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {
- epb, ok := extendable(pb)
- if !ok {
- return nil, fmt.Errorf("proto: %T is not an extendable proto.Message", pb)
+ epb, err := extendable(pb)
+ if err != nil {
+ return nil, err
}
registeredExtensions := RegisteredExtensions(pb)
@@ -522,9 +479,9 @@ func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {
// SetExtension sets the specified extension of pb to the specified value.
func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error {
- epb, ok := extendable(pb)
- if !ok {
- return errors.New("proto: not an extendable proto")
+ epb, err := extendable(pb)
+ if err != nil {
+ return err
}
if err := checkExtensionTypes(epb, extension); err != nil {
return err
@@ -549,8 +506,8 @@ func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error
// ClearAllExtensions clears all extensions from pb.
func ClearAllExtensions(pb Message) {
- epb, ok := extendable(pb)
- if !ok {
+ epb, err := extendable(pb)
+ if err != nil {
return
}
m := epb.extensionsWrite()
diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go
index ac4ddbc07..75565cc6d 100644
--- a/vendor/github.com/golang/protobuf/proto/lib.go
+++ b/vendor/github.com/golang/protobuf/proto/lib.go
@@ -73,7 +73,6 @@ for a protocol buffer variable v:
When the .proto file specifies `syntax="proto3"`, there are some differences:
- Non-repeated fields of non-message type are values instead of pointers.
- - Getters are only generated for message and oneof fields.
- Enum types do not get an Enum method.
The simplest way to describe this is to see an example.
@@ -274,6 +273,67 @@ import (
"sync"
)
+// RequiredNotSetError is an error type returned by either Marshal or Unmarshal.
+// Marshal reports this when a required field is not initialized.
+// Unmarshal reports this when a required field is missing from the wire data.
+type RequiredNotSetError struct{ field string }
+
+func (e *RequiredNotSetError) Error() string {
+ if e.field == "" {
+ return fmt.Sprintf("proto: required field not set")
+ }
+ return fmt.Sprintf("proto: required field %q not set", e.field)
+}
+func (e *RequiredNotSetError) RequiredNotSet() bool {
+ return true
+}
+
+type invalidUTF8Error struct{ field string }
+
+func (e *invalidUTF8Error) Error() string {
+ if e.field == "" {
+ return "proto: invalid UTF-8 detected"
+ }
+ return fmt.Sprintf("proto: field %q contains invalid UTF-8", e.field)
+}
+func (e *invalidUTF8Error) InvalidUTF8() bool {
+ return true
+}
+
+// errInvalidUTF8 is a sentinel error to identify fields with invalid UTF-8.
+// This error should not be exposed to the external API as such errors should
+// be recreated with the field information.
+var errInvalidUTF8 = &invalidUTF8Error{}
+
+// isNonFatal reports whether the error is either a RequiredNotSet error
+// or a InvalidUTF8 error.
+func isNonFatal(err error) bool {
+ if re, ok := err.(interface{ RequiredNotSet() bool }); ok && re.RequiredNotSet() {
+ return true
+ }
+ if re, ok := err.(interface{ InvalidUTF8() bool }); ok && re.InvalidUTF8() {
+ return true
+ }
+ return false
+}
+
+type nonFatal struct{ E error }
+
+// Merge merges err into nf and reports whether it was successful.
+// Otherwise it returns false for any fatal non-nil errors.
+func (nf *nonFatal) Merge(err error) (ok bool) {
+ if err == nil {
+ return true // not an error
+ }
+ if !isNonFatal(err) {
+ return false // fatal error
+ }
+ if nf.E == nil {
+ nf.E = err // store first instance of non-fatal error
+ }
+ return true
+}
+
// Message is implemented by generated protocol buffer messages.
type Message interface {
Reset()
@@ -310,16 +370,7 @@ type Buffer struct {
buf []byte // encode/decode byte stream
index int // read point
- // pools of basic types to amortize allocation.
- bools []bool
- uint32s []uint32
- uint64s []uint64
-
- // extra pools, only used with pointer_reflect.go
- int32s []int32
- int64s []int64
- float32s []float32
- float64s []float64
+ deterministic bool
}
// NewBuffer allocates a new Buffer and initializes its internal data to
@@ -344,6 +395,30 @@ func (p *Buffer) SetBuf(s []byte) {
// Bytes returns the contents of the Buffer.
func (p *Buffer) Bytes() []byte { return p.buf }
+// SetDeterministic sets whether to use deterministic serialization.
+//
+// Deterministic serialization guarantees that for a given binary, equal
+// messages will always be serialized to the same bytes. This implies:
+//
+// - Repeated serialization of a message will return the same bytes.
+// - Different processes of the same binary (which may be executing on
+// different machines) will serialize equal messages to the same bytes.
+//
+// Note that the deterministic serialization is NOT canonical across
+// languages. It is not guaranteed to remain stable over time. It is unstable
+// across different builds with schema changes due to unknown fields.
+// Users who need canonical serialization (e.g., persistent storage in a
+// canonical form, fingerprinting, etc.) should define their own
+// canonicalization specification and implement their own serializer rather
+// than relying on this API.
+//
+// If deterministic serialization is requested, map entries will be sorted
+// by keys in lexographical order. This is an implementation detail and
+// subject to change.
+func (p *Buffer) SetDeterministic(deterministic bool) {
+ p.deterministic = deterministic
+}
+
/*
* Helper routines for simplifying the creation of optional fields of basic type.
*/
@@ -832,22 +907,12 @@ func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMes
return sf, false, nil
}
+// mapKeys returns a sort.Interface to be used for sorting the map keys.
// Map fields may have key types of non-float scalars, strings and enums.
-// The easiest way to sort them in some deterministic order is to use fmt.
-// If this turns out to be inefficient we can always consider other options,
-// such as doing a Schwartzian transform.
-
func mapKeys(vs []reflect.Value) sort.Interface {
- s := mapKeySorter{
- vs: vs,
- // default Less function: textual comparison
- less: func(a, b reflect.Value) bool {
- return fmt.Sprint(a.Interface()) < fmt.Sprint(b.Interface())
- },
- }
+ s := mapKeySorter{vs: vs}
- // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps;
- // numeric keys are sorted numerically.
+ // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps.
if len(vs) == 0 {
return s
}
@@ -856,6 +921,12 @@ func mapKeys(vs []reflect.Value) sort.Interface {
s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() }
case reflect.Uint32, reflect.Uint64:
s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() }
+ case reflect.Bool:
+ s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true
+ case reflect.String:
+ s.less = func(a, b reflect.Value) bool { return a.String() < b.String() }
+ default:
+ panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind()))
}
return s
@@ -896,3 +967,13 @@ const ProtoPackageIsVersion2 = true
// ProtoPackageIsVersion1 is referenced from generated protocol buffer files
// to assert that that code is compatible with this version of the proto package.
const ProtoPackageIsVersion1 = true
+
+// InternalMessageInfo is a type used internally by generated .pb.go files.
+// This type is not intended to be used by non-generated code.
+// This type is not subject to any compatibility guarantee.
+type InternalMessageInfo struct {
+ marshal *marshalInfo
+ unmarshal *unmarshalInfo
+ merge *mergeInfo
+ discard *discardInfo
+}
diff --git a/vendor/github.com/golang/protobuf/proto/message_set.go b/vendor/github.com/golang/protobuf/proto/message_set.go
index fd982decd..3b6ca41d5 100644
--- a/vendor/github.com/golang/protobuf/proto/message_set.go
+++ b/vendor/github.com/golang/protobuf/proto/message_set.go
@@ -42,6 +42,7 @@ import (
"fmt"
"reflect"
"sort"
+ "sync"
)
// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID.
@@ -94,10 +95,7 @@ func (ms *messageSet) find(pb Message) *_MessageSet_Item {
}
func (ms *messageSet) Has(pb Message) bool {
- if ms.find(pb) != nil {
- return true
- }
- return false
+ return ms.find(pb) != nil
}
func (ms *messageSet) Unmarshal(pb Message) error {
@@ -150,46 +148,42 @@ func skipVarint(buf []byte) []byte {
// MarshalMessageSet encodes the extension map represented by m in the message set wire format.
// It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option.
func MarshalMessageSet(exts interface{}) ([]byte, error) {
- var m map[int32]Extension
+ return marshalMessageSet(exts, false)
+}
+
+// marshaMessageSet implements above function, with the opt to turn on / off deterministic during Marshal.
+func marshalMessageSet(exts interface{}, deterministic bool) ([]byte, error) {
switch exts := exts.(type) {
case *XXX_InternalExtensions:
- if err := encodeExtensions(exts); err != nil {
- return nil, err
- }
- m, _ = exts.extensionsRead()
+ var u marshalInfo
+ siz := u.sizeMessageSet(exts)
+ b := make([]byte, 0, siz)
+ return u.appendMessageSet(b, exts, deterministic)
+
case map[int32]Extension:
- if err := encodeExtensionsMap(exts); err != nil {
- return nil, err
+ // This is an old-style extension map.
+ // Wrap it in a new-style XXX_InternalExtensions.
+ ie := XXX_InternalExtensions{
+ p: &struct {
+ mu sync.Mutex
+ extensionMap map[int32]Extension
+ }{
+ extensionMap: exts,
+ },
}
- m = exts
+
+ var u marshalInfo
+ siz := u.sizeMessageSet(&ie)
+ b := make([]byte, 0, siz)
+ return u.appendMessageSet(b, &ie, deterministic)
+
default:
return nil, errors.New("proto: not an extension map")
}
-
- // Sort extension IDs to provide a deterministic encoding.
- // See also enc_map in encode.go.
- ids := make([]int, 0, len(m))
- for id := range m {
- ids = append(ids, int(id))
- }
- sort.Ints(ids)
-
- ms := &messageSet{Item: make([]*_MessageSet_Item, 0, len(m))}
- for _, id := range ids {
- e := m[int32(id)]
- // Remove the wire type and field number varint, as well as the length varint.
- msg := skipVarint(skipVarint(e.enc))
-
- ms.Item = append(ms.Item, &_MessageSet_Item{
- TypeId: Int32(int32(id)),
- Message: msg,
- })
- }
- return Marshal(ms)
}
// UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format.
-// It is called by generated Unmarshal methods on protocol buffer messages with the message_set_wire_format option.
+// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option.
func UnmarshalMessageSet(buf []byte, exts interface{}) error {
var m map[int32]Extension
switch exts := exts.(type) {
@@ -235,7 +229,15 @@ func MarshalMessageSetJSON(exts interface{}) ([]byte, error) {
var m map[int32]Extension
switch exts := exts.(type) {
case *XXX_InternalExtensions:
- m, _ = exts.extensionsRead()
+ var mu sync.Locker
+ m, mu = exts.extensionsRead()
+ if m != nil {
+ // Keep the extensions map locked until we're done marshaling to prevent
+ // races between marshaling and unmarshaling the lazily-{en,de}coded
+ // values.
+ mu.Lock()
+ defer mu.Unlock()
+ }
case map[int32]Extension:
m = exts
default:
@@ -253,15 +255,16 @@ func MarshalMessageSetJSON(exts interface{}) ([]byte, error) {
for i, id := range ids {
ext := m[id]
- if i > 0 {
- b.WriteByte(',')
- }
-
msd, ok := messageSetMap[id]
if !ok {
// Unknown type; we can't render it, so skip it.
continue
}
+
+ if i > 0 && b.Len() > 1 {
+ b.WriteByte(',')
+ }
+
fmt.Fprintf(&b, `"[%s]":`, msd.name)
x := ext.value
diff --git a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go
index fb512e2e1..b6cad9083 100644
--- a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go
+++ b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go
@@ -29,7 +29,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// +build appengine js
+// +build purego appengine js
// This file contains an implementation of proto field accesses using package reflect.
// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can
@@ -38,32 +38,13 @@
package proto
import (
- "math"
"reflect"
+ "sync"
)
-// A structPointer is a pointer to a struct.
-type structPointer struct {
- v reflect.Value
-}
-
-// toStructPointer returns a structPointer equivalent to the given reflect value.
-// The reflect value must itself be a pointer to a struct.
-func toStructPointer(v reflect.Value) structPointer {
- return structPointer{v}
-}
-
-// IsNil reports whether p is nil.
-func structPointer_IsNil(p structPointer) bool {
- return p.v.IsNil()
-}
+const unsafeAllowed = false
-// Interface returns the struct pointer as an interface value.
-func structPointer_Interface(p structPointer, _ reflect.Type) interface{} {
- return p.v.Interface()
-}
-
-// A field identifies a field in a struct, accessible from a structPointer.
+// A field identifies a field in a struct, accessible from a pointer.
// In this implementation, a field is identified by the sequence of field indices
// passed to reflect's FieldByIndex.
type field []int
@@ -76,409 +57,301 @@ func toField(f *reflect.StructField) field {
// invalidField is an invalid field identifier.
var invalidField = field(nil)
+// zeroField is a noop when calling pointer.offset.
+var zeroField = field([]int{})
+
// IsValid reports whether the field identifier is valid.
func (f field) IsValid() bool { return f != nil }
-// field returns the given field in the struct as a reflect value.
-func structPointer_field(p structPointer, f field) reflect.Value {
- // Special case: an extension map entry with a value of type T
- // passes a *T to the struct-handling code with a zero field,
- // expecting that it will be treated as equivalent to *struct{ X T },
- // which has the same memory layout. We have to handle that case
- // specially, because reflect will panic if we call FieldByIndex on a
- // non-struct.
- if f == nil {
- return p.v.Elem()
- }
-
- return p.v.Elem().FieldByIndex(f)
+// The pointer type is for the table-driven decoder.
+// The implementation here uses a reflect.Value of pointer type to
+// create a generic pointer. In pointer_unsafe.go we use unsafe
+// instead of reflect to implement the same (but faster) interface.
+type pointer struct {
+ v reflect.Value
}
-// ifield returns the given field in the struct as an interface value.
-func structPointer_ifield(p structPointer, f field) interface{} {
- return structPointer_field(p, f).Addr().Interface()
+// toPointer converts an interface of pointer type to a pointer
+// that points to the same target.
+func toPointer(i *Message) pointer {
+ return pointer{v: reflect.ValueOf(*i)}
}
-// Bytes returns the address of a []byte field in the struct.
-func structPointer_Bytes(p structPointer, f field) *[]byte {
- return structPointer_ifield(p, f).(*[]byte)
+// toAddrPointer converts an interface to a pointer that points to
+// the interface data.
+func toAddrPointer(i *interface{}, isptr bool) pointer {
+ v := reflect.ValueOf(*i)
+ u := reflect.New(v.Type())
+ u.Elem().Set(v)
+ return pointer{v: u}
}
-// BytesSlice returns the address of a [][]byte field in the struct.
-func structPointer_BytesSlice(p structPointer, f field) *[][]byte {
- return structPointer_ifield(p, f).(*[][]byte)
+// valToPointer converts v to a pointer. v must be of pointer type.
+func valToPointer(v reflect.Value) pointer {
+ return pointer{v: v}
}
-// Bool returns the address of a *bool field in the struct.
-func structPointer_Bool(p structPointer, f field) **bool {
- return structPointer_ifield(p, f).(**bool)
+// offset converts from a pointer to a structure to a pointer to
+// one of its fields.
+func (p pointer) offset(f field) pointer {
+ return pointer{v: p.v.Elem().FieldByIndex(f).Addr()}
}
-// BoolVal returns the address of a bool field in the struct.
-func structPointer_BoolVal(p structPointer, f field) *bool {
- return structPointer_ifield(p, f).(*bool)
+func (p pointer) isNil() bool {
+ return p.v.IsNil()
}
-// BoolSlice returns the address of a []bool field in the struct.
-func structPointer_BoolSlice(p structPointer, f field) *[]bool {
- return structPointer_ifield(p, f).(*[]bool)
+// grow updates the slice s in place to make it one element longer.
+// s must be addressable.
+// Returns the (addressable) new element.
+func grow(s reflect.Value) reflect.Value {
+ n, m := s.Len(), s.Cap()
+ if n < m {
+ s.SetLen(n + 1)
+ } else {
+ s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem())))
+ }
+ return s.Index(n)
}
-// String returns the address of a *string field in the struct.
-func structPointer_String(p structPointer, f field) **string {
- return structPointer_ifield(p, f).(**string)
+func (p pointer) toInt64() *int64 {
+ return p.v.Interface().(*int64)
}
-
-// StringVal returns the address of a string field in the struct.
-func structPointer_StringVal(p structPointer, f field) *string {
- return structPointer_ifield(p, f).(*string)
+func (p pointer) toInt64Ptr() **int64 {
+ return p.v.Interface().(**int64)
}
-
-// StringSlice returns the address of a []string field in the struct.
-func structPointer_StringSlice(p structPointer, f field) *[]string {
- return structPointer_ifield(p, f).(*[]string)
+func (p pointer) toInt64Slice() *[]int64 {
+ return p.v.Interface().(*[]int64)
}
-// Extensions returns the address of an extension map field in the struct.
-func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions {
- return structPointer_ifield(p, f).(*XXX_InternalExtensions)
-}
+var int32ptr = reflect.TypeOf((*int32)(nil))
-// ExtMap returns the address of an extension map field in the struct.
-func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension {
- return structPointer_ifield(p, f).(*map[int32]Extension)
+func (p pointer) toInt32() *int32 {
+ return p.v.Convert(int32ptr).Interface().(*int32)
}
-// NewAt returns the reflect.Value for a pointer to a field in the struct.
-func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value {
- return structPointer_field(p, f).Addr()
+// The toInt32Ptr/Slice methods don't work because of enums.
+// Instead, we must use set/get methods for the int32ptr/slice case.
+/*
+ func (p pointer) toInt32Ptr() **int32 {
+ return p.v.Interface().(**int32)
}
-
-// SetStructPointer writes a *struct field in the struct.
-func structPointer_SetStructPointer(p structPointer, f field, q structPointer) {
- structPointer_field(p, f).Set(q.v)
+ func (p pointer) toInt32Slice() *[]int32 {
+ return p.v.Interface().(*[]int32)
}
-
-// GetStructPointer reads a *struct field in the struct.
-func structPointer_GetStructPointer(p structPointer, f field) structPointer {
- return structPointer{structPointer_field(p, f)}
+*/
+func (p pointer) getInt32Ptr() *int32 {
+ if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
+ // raw int32 type
+ return p.v.Elem().Interface().(*int32)
+ }
+ // an enum
+ return p.v.Elem().Convert(int32PtrType).Interface().(*int32)
+}
+func (p pointer) setInt32Ptr(v int32) {
+ // Allocate value in a *int32. Possibly convert that to a *enum.
+ // Then assign it to a **int32 or **enum.
+ // Note: we can convert *int32 to *enum, but we can't convert
+ // **int32 to **enum!
+ p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem()))
+}
+
+// getInt32Slice copies []int32 from p as a new slice.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) getInt32Slice() []int32 {
+ if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
+ // raw int32 type
+ return p.v.Elem().Interface().([]int32)
+ }
+ // an enum
+ // Allocate a []int32, then assign []enum's values into it.
+ // Note: we can't convert []enum to []int32.
+ slice := p.v.Elem()
+ s := make([]int32, slice.Len())
+ for i := 0; i < slice.Len(); i++ {
+ s[i] = int32(slice.Index(i).Int())
+ }
+ return s
}
-// StructPointerSlice the address of a []*struct field in the struct.
-func structPointer_StructPointerSlice(p structPointer, f field) structPointerSlice {
- return structPointerSlice{structPointer_field(p, f)}
+// setInt32Slice copies []int32 into p as a new slice.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) setInt32Slice(v []int32) {
+ if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {
+ // raw int32 type
+ p.v.Elem().Set(reflect.ValueOf(v))
+ return
+ }
+ // an enum
+ // Allocate a []enum, then assign []int32's values into it.
+ // Note: we can't convert []enum to []int32.
+ slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v))
+ for i, x := range v {
+ slice.Index(i).SetInt(int64(x))
+ }
+ p.v.Elem().Set(slice)
}
-
-// A structPointerSlice represents the address of a slice of pointers to structs
-// (themselves messages or groups). That is, v.Type() is *[]*struct{...}.
-type structPointerSlice struct {
- v reflect.Value
+func (p pointer) appendInt32Slice(v int32) {
+ grow(p.v.Elem()).SetInt(int64(v))
}
-func (p structPointerSlice) Len() int { return p.v.Len() }
-func (p structPointerSlice) Index(i int) structPointer { return structPointer{p.v.Index(i)} }
-func (p structPointerSlice) Append(q structPointer) {
- p.v.Set(reflect.Append(p.v, q.v))
+func (p pointer) toUint64() *uint64 {
+ return p.v.Interface().(*uint64)
}
-
-var (
- int32Type = reflect.TypeOf(int32(0))
- uint32Type = reflect.TypeOf(uint32(0))
- float32Type = reflect.TypeOf(float32(0))
- int64Type = reflect.TypeOf(int64(0))
- uint64Type = reflect.TypeOf(uint64(0))
- float64Type = reflect.TypeOf(float64(0))
-)
-
-// A word32 represents a field of type *int32, *uint32, *float32, or *enum.
-// That is, v.Type() is *int32, *uint32, *float32, or *enum and v is assignable.
-type word32 struct {
- v reflect.Value
+func (p pointer) toUint64Ptr() **uint64 {
+ return p.v.Interface().(**uint64)
}
-
-// IsNil reports whether p is nil.
-func word32_IsNil(p word32) bool {
- return p.v.IsNil()
+func (p pointer) toUint64Slice() *[]uint64 {
+ return p.v.Interface().(*[]uint64)
}
-
-// Set sets p to point at a newly allocated word with bits set to x.
-func word32_Set(p word32, o *Buffer, x uint32) {
- t := p.v.Type().Elem()
- switch t {
- case int32Type:
- if len(o.int32s) == 0 {
- o.int32s = make([]int32, uint32PoolSize)
- }
- o.int32s[0] = int32(x)
- p.v.Set(reflect.ValueOf(&o.int32s[0]))
- o.int32s = o.int32s[1:]
- return
- case uint32Type:
- if len(o.uint32s) == 0 {
- o.uint32s = make([]uint32, uint32PoolSize)
- }
- o.uint32s[0] = x
- p.v.Set(reflect.ValueOf(&o.uint32s[0]))
- o.uint32s = o.uint32s[1:]
- return
- case float32Type:
- if len(o.float32s) == 0 {
- o.float32s = make([]float32, uint32PoolSize)
- }
- o.float32s[0] = math.Float32frombits(x)
- p.v.Set(reflect.ValueOf(&o.float32s[0]))
- o.float32s = o.float32s[1:]
- return
- }
-
- // must be enum
- p.v.Set(reflect.New(t))
- p.v.Elem().SetInt(int64(int32(x)))
+func (p pointer) toUint32() *uint32 {
+ return p.v.Interface().(*uint32)
}
-
-// Get gets the bits pointed at by p, as a uint32.
-func word32_Get(p word32) uint32 {
- elem := p.v.Elem()
- switch elem.Kind() {
- case reflect.Int32:
- return uint32(elem.Int())
- case reflect.Uint32:
- return uint32(elem.Uint())
- case reflect.Float32:
- return math.Float32bits(float32(elem.Float()))
- }
- panic("unreachable")
+func (p pointer) toUint32Ptr() **uint32 {
+ return p.v.Interface().(**uint32)
}
-
-// Word32 returns a reference to a *int32, *uint32, *float32, or *enum field in the struct.
-func structPointer_Word32(p structPointer, f field) word32 {
- return word32{structPointer_field(p, f)}
+func (p pointer) toUint32Slice() *[]uint32 {
+ return p.v.Interface().(*[]uint32)
}
-
-// A word32Val represents a field of type int32, uint32, float32, or enum.
-// That is, v.Type() is int32, uint32, float32, or enum and v is assignable.
-type word32Val struct {
- v reflect.Value
+func (p pointer) toBool() *bool {
+ return p.v.Interface().(*bool)
}
-
-// Set sets *p to x.
-func word32Val_Set(p word32Val, x uint32) {
- switch p.v.Type() {
- case int32Type:
- p.v.SetInt(int64(x))
- return
- case uint32Type:
- p.v.SetUint(uint64(x))
- return
- case float32Type:
- p.v.SetFloat(float64(math.Float32frombits(x)))
- return
- }
-
- // must be enum
- p.v.SetInt(int64(int32(x)))
+func (p pointer) toBoolPtr() **bool {
+ return p.v.Interface().(**bool)
}
-
-// Get gets the bits pointed at by p, as a uint32.
-func word32Val_Get(p word32Val) uint32 {
- elem := p.v
- switch elem.Kind() {
- case reflect.Int32:
- return uint32(elem.Int())
- case reflect.Uint32:
- return uint32(elem.Uint())
- case reflect.Float32:
- return math.Float32bits(float32(elem.Float()))
- }
- panic("unreachable")
+func (p pointer) toBoolSlice() *[]bool {
+ return p.v.Interface().(*[]bool)
}
-
-// Word32Val returns a reference to a int32, uint32, float32, or enum field in the struct.
-func structPointer_Word32Val(p structPointer, f field) word32Val {
- return word32Val{structPointer_field(p, f)}
+func (p pointer) toFloat64() *float64 {
+ return p.v.Interface().(*float64)
}
-
-// A word32Slice is a slice of 32-bit values.
-// That is, v.Type() is []int32, []uint32, []float32, or []enum.
-type word32Slice struct {
- v reflect.Value
+func (p pointer) toFloat64Ptr() **float64 {
+ return p.v.Interface().(**float64)
}
-
-func (p word32Slice) Append(x uint32) {
- n, m := p.v.Len(), p.v.Cap()
- if n < m {
- p.v.SetLen(n + 1)
- } else {
- t := p.v.Type().Elem()
- p.v.Set(reflect.Append(p.v, reflect.Zero(t)))
- }
- elem := p.v.Index(n)
- switch elem.Kind() {
- case reflect.Int32:
- elem.SetInt(int64(int32(x)))
- case reflect.Uint32:
- elem.SetUint(uint64(x))
- case reflect.Float32:
- elem.SetFloat(float64(math.Float32frombits(x)))
- }
+func (p pointer) toFloat64Slice() *[]float64 {
+ return p.v.Interface().(*[]float64)
}
-
-func (p word32Slice) Len() int {
- return p.v.Len()
+func (p pointer) toFloat32() *float32 {
+ return p.v.Interface().(*float32)
}
-
-func (p word32Slice) Index(i int) uint32 {
- elem := p.v.Index(i)
- switch elem.Kind() {
- case reflect.Int32:
- return uint32(elem.Int())
- case reflect.Uint32:
- return uint32(elem.Uint())
- case reflect.Float32:
- return math.Float32bits(float32(elem.Float()))
- }
- panic("unreachable")
+func (p pointer) toFloat32Ptr() **float32 {
+ return p.v.Interface().(**float32)
}
-
-// Word32Slice returns a reference to a []int32, []uint32, []float32, or []enum field in the struct.
-func structPointer_Word32Slice(p structPointer, f field) word32Slice {
- return word32Slice{structPointer_field(p, f)}
+func (p pointer) toFloat32Slice() *[]float32 {
+ return p.v.Interface().(*[]float32)
}
-
-// word64 is like word32 but for 64-bit values.
-type word64 struct {
- v reflect.Value
+func (p pointer) toString() *string {
+ return p.v.Interface().(*string)
}
-
-func word64_Set(p word64, o *Buffer, x uint64) {
- t := p.v.Type().Elem()
- switch t {
- case int64Type:
- if len(o.int64s) == 0 {
- o.int64s = make([]int64, uint64PoolSize)
- }
- o.int64s[0] = int64(x)
- p.v.Set(reflect.ValueOf(&o.int64s[0]))
- o.int64s = o.int64s[1:]
- return
- case uint64Type:
- if len(o.uint64s) == 0 {
- o.uint64s = make([]uint64, uint64PoolSize)
- }
- o.uint64s[0] = x
- p.v.Set(reflect.ValueOf(&o.uint64s[0]))
- o.uint64s = o.uint64s[1:]
- return
- case float64Type:
- if len(o.float64s) == 0 {
- o.float64s = make([]float64, uint64PoolSize)
- }
- o.float64s[0] = math.Float64frombits(x)
- p.v.Set(reflect.ValueOf(&o.float64s[0]))
- o.float64s = o.float64s[1:]
- return
- }
- panic("unreachable")
+func (p pointer) toStringPtr() **string {
+ return p.v.Interface().(**string)
}
-
-func word64_IsNil(p word64) bool {
- return p.v.IsNil()
+func (p pointer) toStringSlice() *[]string {
+ return p.v.Interface().(*[]string)
}
-
-func word64_Get(p word64) uint64 {
- elem := p.v.Elem()
- switch elem.Kind() {
- case reflect.Int64:
- return uint64(elem.Int())
- case reflect.Uint64:
- return elem.Uint()
- case reflect.Float64:
- return math.Float64bits(elem.Float())
- }
- panic("unreachable")
+func (p pointer) toBytes() *[]byte {
+ return p.v.Interface().(*[]byte)
}
-
-func structPointer_Word64(p structPointer, f field) word64 {
- return word64{structPointer_field(p, f)}
+func (p pointer) toBytesSlice() *[][]byte {
+ return p.v.Interface().(*[][]byte)
+}
+func (p pointer) toExtensions() *XXX_InternalExtensions {
+ return p.v.Interface().(*XXX_InternalExtensions)
+}
+func (p pointer) toOldExtensions() *map[int32]Extension {
+ return p.v.Interface().(*map[int32]Extension)
+}
+func (p pointer) getPointer() pointer {
+ return pointer{v: p.v.Elem()}
+}
+func (p pointer) setPointer(q pointer) {
+ p.v.Elem().Set(q.v)
+}
+func (p pointer) appendPointer(q pointer) {
+ grow(p.v.Elem()).Set(q.v)
}
-// word64Val is like word32Val but for 64-bit values.
-type word64Val struct {
- v reflect.Value
+// getPointerSlice copies []*T from p as a new []pointer.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) getPointerSlice() []pointer {
+ if p.v.IsNil() {
+ return nil
+ }
+ n := p.v.Elem().Len()
+ s := make([]pointer, n)
+ for i := 0; i < n; i++ {
+ s[i] = pointer{v: p.v.Elem().Index(i)}
+ }
+ return s
}
-func word64Val_Set(p word64Val, o *Buffer, x uint64) {
- switch p.v.Type() {
- case int64Type:
- p.v.SetInt(int64(x))
- return
- case uint64Type:
- p.v.SetUint(x)
- return
- case float64Type:
- p.v.SetFloat(math.Float64frombits(x))
+// setPointerSlice copies []pointer into p as a new []*T.
+// This behavior differs from the implementation in pointer_unsafe.go.
+func (p pointer) setPointerSlice(v []pointer) {
+ if v == nil {
+ p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem())
return
}
- panic("unreachable")
+ s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v))
+ for _, p := range v {
+ s = reflect.Append(s, p.v)
+ }
+ p.v.Elem().Set(s)
}
-func word64Val_Get(p word64Val) uint64 {
- elem := p.v
- switch elem.Kind() {
- case reflect.Int64:
- return uint64(elem.Int())
- case reflect.Uint64:
- return elem.Uint()
- case reflect.Float64:
- return math.Float64bits(elem.Float())
+// getInterfacePointer returns a pointer that points to the
+// interface data of the interface pointed by p.
+func (p pointer) getInterfacePointer() pointer {
+ if p.v.Elem().IsNil() {
+ return pointer{v: p.v.Elem()}
}
- panic("unreachable")
+ return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct
}
-func structPointer_Word64Val(p structPointer, f field) word64Val {
- return word64Val{structPointer_field(p, f)}
+func (p pointer) asPointerTo(t reflect.Type) reflect.Value {
+ // TODO: check that p.v.Type().Elem() == t?
+ return p.v
}
-type word64Slice struct {
- v reflect.Value
+func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ return *p
}
-
-func (p word64Slice) Append(x uint64) {
- n, m := p.v.Len(), p.v.Cap()
- if n < m {
- p.v.SetLen(n + 1)
- } else {
- t := p.v.Type().Elem()
- p.v.Set(reflect.Append(p.v, reflect.Zero(t)))
- }
- elem := p.v.Index(n)
- switch elem.Kind() {
- case reflect.Int64:
- elem.SetInt(int64(int64(x)))
- case reflect.Uint64:
- elem.SetUint(uint64(x))
- case reflect.Float64:
- elem.SetFloat(float64(math.Float64frombits(x)))
- }
+func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ *p = v
}
-
-func (p word64Slice) Len() int {
- return p.v.Len()
+func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ return *p
}
-
-func (p word64Slice) Index(i int) uint64 {
- elem := p.v.Index(i)
- switch elem.Kind() {
- case reflect.Int64:
- return uint64(elem.Int())
- case reflect.Uint64:
- return uint64(elem.Uint())
- case reflect.Float64:
- return math.Float64bits(float64(elem.Float()))
- }
- panic("unreachable")
+func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ *p = v
}
-
-func structPointer_Word64Slice(p structPointer, f field) word64Slice {
- return word64Slice{structPointer_field(p, f)}
+func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ return *p
+}
+func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ *p = v
}
+func atomicLoadDiscardInfo(p **discardInfo) *discardInfo {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ return *p
+}
+func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {
+ atomicLock.Lock()
+ defer atomicLock.Unlock()
+ *p = v
+}
+
+var atomicLock sync.Mutex
diff --git a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
index 6b5567d47..d55a335d9 100644
--- a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
+++ b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go
@@ -29,7 +29,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-// +build !appengine,!js
+// +build !purego,!appengine,!js
// This file contains the implementation of the proto field accesses using package unsafe.
@@ -37,38 +37,13 @@ package proto
import (
"reflect"
+ "sync/atomic"
"unsafe"
)
-// NOTE: These type_Foo functions would more idiomatically be methods,
-// but Go does not allow methods on pointer types, and we must preserve
-// some pointer type for the garbage collector. We use these
-// funcs with clunky names as our poor approximation to methods.
-//
-// An alternative would be
-// type structPointer struct { p unsafe.Pointer }
-// but that does not registerize as well.
-
-// A structPointer is a pointer to a struct.
-type structPointer unsafe.Pointer
-
-// toStructPointer returns a structPointer equivalent to the given reflect value.
-func toStructPointer(v reflect.Value) structPointer {
- return structPointer(unsafe.Pointer(v.Pointer()))
-}
-
-// IsNil reports whether p is nil.
-func structPointer_IsNil(p structPointer) bool {
- return p == nil
-}
-
-// Interface returns the struct pointer, assumed to have element type t,
-// as an interface value.
-func structPointer_Interface(p structPointer, t reflect.Type) interface{} {
- return reflect.NewAt(t, unsafe.Pointer(p)).Interface()
-}
+const unsafeAllowed = true
-// A field identifies a field in a struct, accessible from a structPointer.
+// A field identifies a field in a struct, accessible from a pointer.
// In this implementation, a field is identified by its byte offset from the start of the struct.
type field uintptr
@@ -80,191 +55,254 @@ func toField(f *reflect.StructField) field {
// invalidField is an invalid field identifier.
const invalidField = ^field(0)
+// zeroField is a noop when calling pointer.offset.
+const zeroField = field(0)
+
// IsValid reports whether the field identifier is valid.
func (f field) IsValid() bool {
- return f != ^field(0)
+ return f != invalidField
}
-// Bytes returns the address of a []byte field in the struct.
-func structPointer_Bytes(p structPointer, f field) *[]byte {
- return (*[]byte)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+// The pointer type below is for the new table-driven encoder/decoder.
+// The implementation here uses unsafe.Pointer to create a generic pointer.
+// In pointer_reflect.go we use reflect instead of unsafe to implement
+// the same (but slower) interface.
+type pointer struct {
+ p unsafe.Pointer
}
-// BytesSlice returns the address of a [][]byte field in the struct.
-func structPointer_BytesSlice(p structPointer, f field) *[][]byte {
- return (*[][]byte)(unsafe.Pointer(uintptr(p) + uintptr(f)))
-}
+// size of pointer
+var ptrSize = unsafe.Sizeof(uintptr(0))
-// Bool returns the address of a *bool field in the struct.
-func structPointer_Bool(p structPointer, f field) **bool {
- return (**bool)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+// toPointer converts an interface of pointer type to a pointer
+// that points to the same target.
+func toPointer(i *Message) pointer {
+ // Super-tricky - read pointer out of data word of interface value.
+ // Saves ~25ns over the equivalent:
+ // return valToPointer(reflect.ValueOf(*i))
+ return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
}
-// BoolVal returns the address of a bool field in the struct.
-func structPointer_BoolVal(p structPointer, f field) *bool {
- return (*bool)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+// toAddrPointer converts an interface to a pointer that points to
+// the interface data.
+func toAddrPointer(i *interface{}, isptr bool) pointer {
+ // Super-tricky - read or get the address of data word of interface value.
+ if isptr {
+ // The interface is of pointer type, thus it is a direct interface.
+ // The data word is the pointer data itself. We take its address.
+ return pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)}
+ }
+ // The interface is not of pointer type. The data word is the pointer
+ // to the data.
+ return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}
}
-// BoolSlice returns the address of a []bool field in the struct.
-func structPointer_BoolSlice(p structPointer, f field) *[]bool {
- return (*[]bool)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+// valToPointer converts v to a pointer. v must be of pointer type.
+func valToPointer(v reflect.Value) pointer {
+ return pointer{p: unsafe.Pointer(v.Pointer())}
}
-// String returns the address of a *string field in the struct.
-func structPointer_String(p structPointer, f field) **string {
- return (**string)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+// offset converts from a pointer to a structure to a pointer to
+// one of its fields.
+func (p pointer) offset(f field) pointer {
+ // For safety, we should panic if !f.IsValid, however calling panic causes
+ // this to no longer be inlineable, which is a serious performance cost.
+ /*
+ if !f.IsValid() {
+ panic("invalid field")
+ }
+ */
+ return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))}
}
-// StringVal returns the address of a string field in the struct.
-func structPointer_StringVal(p structPointer, f field) *string {
- return (*string)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func (p pointer) isNil() bool {
+ return p.p == nil
}
-// StringSlice returns the address of a []string field in the struct.
-func structPointer_StringSlice(p structPointer, f field) *[]string {
- return (*[]string)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func (p pointer) toInt64() *int64 {
+ return (*int64)(p.p)
}
-
-// ExtMap returns the address of an extension map field in the struct.
-func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions {
- return (*XXX_InternalExtensions)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func (p pointer) toInt64Ptr() **int64 {
+ return (**int64)(p.p)
}
-
-func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension {
- return (*map[int32]Extension)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func (p pointer) toInt64Slice() *[]int64 {
+ return (*[]int64)(p.p)
}
-
-// NewAt returns the reflect.Value for a pointer to a field in the struct.
-func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value {
- return reflect.NewAt(typ, unsafe.Pointer(uintptr(p)+uintptr(f)))
+func (p pointer) toInt32() *int32 {
+ return (*int32)(p.p)
}
-// SetStructPointer writes a *struct field in the struct.
-func structPointer_SetStructPointer(p structPointer, f field, q structPointer) {
- *(*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f))) = q
+// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist.
+/*
+ func (p pointer) toInt32Ptr() **int32 {
+ return (**int32)(p.p)
+ }
+ func (p pointer) toInt32Slice() *[]int32 {
+ return (*[]int32)(p.p)
+ }
+*/
+func (p pointer) getInt32Ptr() *int32 {
+ return *(**int32)(p.p)
}
-
-// GetStructPointer reads a *struct field in the struct.
-func structPointer_GetStructPointer(p structPointer, f field) structPointer {
- return *(*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func (p pointer) setInt32Ptr(v int32) {
+ *(**int32)(p.p) = &v
}
-// StructPointerSlice the address of a []*struct field in the struct.
-func structPointer_StructPointerSlice(p structPointer, f field) *structPointerSlice {
- return (*structPointerSlice)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+// getInt32Slice loads a []int32 from p.
+// The value returned is aliased with the original slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) getInt32Slice() []int32 {
+ return *(*[]int32)(p.p)
}
-// A structPointerSlice represents a slice of pointers to structs (themselves submessages or groups).
-type structPointerSlice []structPointer
-
-func (v *structPointerSlice) Len() int { return len(*v) }
-func (v *structPointerSlice) Index(i int) structPointer { return (*v)[i] }
-func (v *structPointerSlice) Append(p structPointer) { *v = append(*v, p) }
-
-// A word32 is the address of a "pointer to 32-bit value" field.
-type word32 **uint32
-
-// IsNil reports whether *v is nil.
-func word32_IsNil(p word32) bool {
- return *p == nil
+// setInt32Slice stores a []int32 to p.
+// The value set is aliased with the input slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) setInt32Slice(v []int32) {
+ *(*[]int32)(p.p) = v
}
-// Set sets *v to point at a newly allocated word set to x.
-func word32_Set(p word32, o *Buffer, x uint32) {
- if len(o.uint32s) == 0 {
- o.uint32s = make([]uint32, uint32PoolSize)
- }
- o.uint32s[0] = x
- *p = &o.uint32s[0]
- o.uint32s = o.uint32s[1:]
+// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead?
+func (p pointer) appendInt32Slice(v int32) {
+ s := (*[]int32)(p.p)
+ *s = append(*s, v)
}
-// Get gets the value pointed at by *v.
-func word32_Get(p word32) uint32 {
- return **p
+func (p pointer) toUint64() *uint64 {
+ return (*uint64)(p.p)
}
-
-// Word32 returns the address of a *int32, *uint32, *float32, or *enum field in the struct.
-func structPointer_Word32(p structPointer, f field) word32 {
- return word32((**uint32)(unsafe.Pointer(uintptr(p) + uintptr(f))))
+func (p pointer) toUint64Ptr() **uint64 {
+ return (**uint64)(p.p)
}
-
-// A word32Val is the address of a 32-bit value field.
-type word32Val *uint32
-
-// Set sets *p to x.
-func word32Val_Set(p word32Val, x uint32) {
- *p = x
+func (p pointer) toUint64Slice() *[]uint64 {
+ return (*[]uint64)(p.p)
}
-
-// Get gets the value pointed at by p.
-func word32Val_Get(p word32Val) uint32 {
- return *p
+func (p pointer) toUint32() *uint32 {
+ return (*uint32)(p.p)
}
-
-// Word32Val returns the address of a *int32, *uint32, *float32, or *enum field in the struct.
-func structPointer_Word32Val(p structPointer, f field) word32Val {
- return word32Val((*uint32)(unsafe.Pointer(uintptr(p) + uintptr(f))))
+func (p pointer) toUint32Ptr() **uint32 {
+ return (**uint32)(p.p)
}
-
-// A word32Slice is a slice of 32-bit values.
-type word32Slice []uint32
-
-func (v *word32Slice) Append(x uint32) { *v = append(*v, x) }
-func (v *word32Slice) Len() int { return len(*v) }
-func (v *word32Slice) Index(i int) uint32 { return (*v)[i] }
-
-// Word32Slice returns the address of a []int32, []uint32, []float32, or []enum field in the struct.
-func structPointer_Word32Slice(p structPointer, f field) *word32Slice {
- return (*word32Slice)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func (p pointer) toUint32Slice() *[]uint32 {
+ return (*[]uint32)(p.p)
}
-
-// word64 is like word32 but for 64-bit values.
-type word64 **uint64
-
-func word64_Set(p word64, o *Buffer, x uint64) {
- if len(o.uint64s) == 0 {
- o.uint64s = make([]uint64, uint64PoolSize)
- }
- o.uint64s[0] = x
- *p = &o.uint64s[0]
- o.uint64s = o.uint64s[1:]
+func (p pointer) toBool() *bool {
+ return (*bool)(p.p)
}
-
-func word64_IsNil(p word64) bool {
- return *p == nil
+func (p pointer) toBoolPtr() **bool {
+ return (**bool)(p.p)
}
-
-func word64_Get(p word64) uint64 {
- return **p
+func (p pointer) toBoolSlice() *[]bool {
+ return (*[]bool)(p.p)
+}
+func (p pointer) toFloat64() *float64 {
+ return (*float64)(p.p)
+}
+func (p pointer) toFloat64Ptr() **float64 {
+ return (**float64)(p.p)
+}
+func (p pointer) toFloat64Slice() *[]float64 {
+ return (*[]float64)(p.p)
+}
+func (p pointer) toFloat32() *float32 {
+ return (*float32)(p.p)
+}
+func (p pointer) toFloat32Ptr() **float32 {
+ return (**float32)(p.p)
+}
+func (p pointer) toFloat32Slice() *[]float32 {
+ return (*[]float32)(p.p)
+}
+func (p pointer) toString() *string {
+ return (*string)(p.p)
+}
+func (p pointer) toStringPtr() **string {
+ return (**string)(p.p)
+}
+func (p pointer) toStringSlice() *[]string {
+ return (*[]string)(p.p)
+}
+func (p pointer) toBytes() *[]byte {
+ return (*[]byte)(p.p)
+}
+func (p pointer) toBytesSlice() *[][]byte {
+ return (*[][]byte)(p.p)
+}
+func (p pointer) toExtensions() *XXX_InternalExtensions {
+ return (*XXX_InternalExtensions)(p.p)
+}
+func (p pointer) toOldExtensions() *map[int32]Extension {
+ return (*map[int32]Extension)(p.p)
}
-func structPointer_Word64(p structPointer, f field) word64 {
- return word64((**uint64)(unsafe.Pointer(uintptr(p) + uintptr(f))))
+// getPointerSlice loads []*T from p as a []pointer.
+// The value returned is aliased with the original slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) getPointerSlice() []pointer {
+ // Super-tricky - p should point to a []*T where T is a
+ // message type. We load it as []pointer.
+ return *(*[]pointer)(p.p)
}
-// word64Val is like word32Val but for 64-bit values.
-type word64Val *uint64
+// setPointerSlice stores []pointer into p as a []*T.
+// The value set is aliased with the input slice.
+// This behavior differs from the implementation in pointer_reflect.go.
+func (p pointer) setPointerSlice(v []pointer) {
+ // Super-tricky - p should point to a []*T where T is a
+ // message type. We store it as []pointer.
+ *(*[]pointer)(p.p) = v
+}
-func word64Val_Set(p word64Val, o *Buffer, x uint64) {
- *p = x
+// getPointer loads the pointer at p and returns it.
+func (p pointer) getPointer() pointer {
+ return pointer{p: *(*unsafe.Pointer)(p.p)}
}
-func word64Val_Get(p word64Val) uint64 {
- return *p
+// setPointer stores the pointer q at p.
+func (p pointer) setPointer(q pointer) {
+ *(*unsafe.Pointer)(p.p) = q.p
}
-func structPointer_Word64Val(p structPointer, f field) word64Val {
- return word64Val((*uint64)(unsafe.Pointer(uintptr(p) + uintptr(f))))
+// append q to the slice pointed to by p.
+func (p pointer) appendPointer(q pointer) {
+ s := (*[]unsafe.Pointer)(p.p)
+ *s = append(*s, q.p)
}
-// word64Slice is like word32Slice but for 64-bit values.
-type word64Slice []uint64
+// getInterfacePointer returns a pointer that points to the
+// interface data of the interface pointed by p.
+func (p pointer) getInterfacePointer() pointer {
+ // Super-tricky - read pointer out of data word of interface value.
+ return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]}
+}
-func (v *word64Slice) Append(x uint64) { *v = append(*v, x) }
-func (v *word64Slice) Len() int { return len(*v) }
-func (v *word64Slice) Index(i int) uint64 { return (*v)[i] }
+// asPointerTo returns a reflect.Value that is a pointer to an
+// object of type t stored at p.
+func (p pointer) asPointerTo(t reflect.Type) reflect.Value {
+ return reflect.NewAt(t, p.p)
+}
-func structPointer_Word64Slice(p structPointer, f field) *word64Slice {
- return (*word64Slice)(unsafe.Pointer(uintptr(p) + uintptr(f)))
+func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {
+ return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
+func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {
+ return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
+func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {
+ return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
+}
+func atomicLoadDiscardInfo(p **discardInfo) *discardInfo {
+ return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))
+}
+func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {
+ atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))
}
diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go
index ec2289c00..50b99b83a 100644
--- a/vendor/github.com/golang/protobuf/proto/properties.go
+++ b/vendor/github.com/golang/protobuf/proto/properties.go
@@ -58,42 +58,6 @@ const (
WireFixed32 = 5
)
-const startSize = 10 // initial slice/string sizes
-
-// Encoders are defined in encode.go
-// An encoder outputs the full representation of a field, including its
-// tag and encoder type.
-type encoder func(p *Buffer, prop *Properties, base structPointer) error
-
-// A valueEncoder encodes a single integer in a particular encoding.
-type valueEncoder func(o *Buffer, x uint64) error
-
-// Sizers are defined in encode.go
-// A sizer returns the encoded size of a field, including its tag and encoder
-// type.
-type sizer func(prop *Properties, base structPointer) int
-
-// A valueSizer returns the encoded size of a single integer in a particular
-// encoding.
-type valueSizer func(x uint64) int
-
-// Decoders are defined in decode.go
-// A decoder creates a value from its wire representation.
-// Unrecognized subelements are saved in unrec.
-type decoder func(p *Buffer, prop *Properties, base structPointer) error
-
-// A valueDecoder decodes a single integer in a particular encoding.
-type valueDecoder func(o *Buffer) (x uint64, err error)
-
-// A oneofMarshaler does the marshaling for all oneof fields in a message.
-type oneofMarshaler func(Message, *Buffer) error
-
-// A oneofUnmarshaler does the unmarshaling for a oneof field in a message.
-type oneofUnmarshaler func(Message, int, int, *Buffer) (bool, error)
-
-// A oneofSizer does the sizing for all oneof fields in a message.
-type oneofSizer func(Message) int
-
// tagMap is an optimization over map[int]int for typical protocol buffer
// use-cases. Encoded protocol buffers are often in tag order with small tag
// numbers.
@@ -140,13 +104,6 @@ type StructProperties struct {
decoderTags tagMap // map from proto tag to struct field number
decoderOrigNames map[string]int // map from original name to struct field number
order []int // list of struct field numbers in tag order
- unrecField field // field id of the XXX_unrecognized []byte field
- extendable bool // is this an extendable proto
-
- oneofMarshaler oneofMarshaler
- oneofUnmarshaler oneofUnmarshaler
- oneofSizer oneofSizer
- stype reflect.Type
// OneofTypes contains information about the oneof fields in this message.
// It is keyed by the original name of a field.
@@ -182,41 +139,24 @@ type Properties struct {
Repeated bool
Packed bool // relevant for repeated primitives only
Enum string // set for enum types only
- proto3 bool // whether this is known to be a proto3 field; set for []byte only
+ proto3 bool // whether this is known to be a proto3 field
oneof bool // whether this is a oneof field
Default string // default value
HasDefault bool // whether an explicit default was provided
- def_uint64 uint64
-
- enc encoder
- valEnc valueEncoder // set for bool and numeric types only
- field field
- tagcode []byte // encoding of EncodeVarint((Tag<<3)|WireType)
- tagbuf [8]byte
- stype reflect.Type // set for struct types only
- sprop *StructProperties // set for struct types only
- isMarshaler bool
- isUnmarshaler bool
-
- mtype reflect.Type // set for map types only
- mkeyprop *Properties // set for map types only
- mvalprop *Properties // set for map types only
-
- size sizer
- valSize valueSizer // set for bool and numeric types only
-
- dec decoder
- valDec valueDecoder // set for bool and numeric types only
-
- // If this is a packable field, this will be the decoder for the packed version of the field.
- packedDec decoder
+
+ stype reflect.Type // set for struct types only
+ sprop *StructProperties // set for struct types only
+
+ mtype reflect.Type // set for map types only
+ MapKeyProp *Properties // set for map types only
+ MapValProp *Properties // set for map types only
}
// String formats the properties in the protobuf struct field tag style.
func (p *Properties) String() string {
s := p.Wire
- s = ","
+ s += ","
s += strconv.Itoa(p.Tag)
if p.Required {
s += ",req"
@@ -262,29 +202,14 @@ func (p *Properties) Parse(s string) {
switch p.Wire {
case "varint":
p.WireType = WireVarint
- p.valEnc = (*Buffer).EncodeVarint
- p.valDec = (*Buffer).DecodeVarint
- p.valSize = sizeVarint
case "fixed32":
p.WireType = WireFixed32
- p.valEnc = (*Buffer).EncodeFixed32
- p.valDec = (*Buffer).DecodeFixed32
- p.valSize = sizeFixed32
case "fixed64":
p.WireType = WireFixed64
- p.valEnc = (*Buffer).EncodeFixed64
- p.valDec = (*Buffer).DecodeFixed64
- p.valSize = sizeFixed64
case "zigzag32":
p.WireType = WireVarint
- p.valEnc = (*Buffer).EncodeZigzag32
- p.valDec = (*Buffer).DecodeZigzag32
- p.valSize = sizeZigzag32
case "zigzag64":
p.WireType = WireVarint
- p.valEnc = (*Buffer).EncodeZigzag64
- p.valDec = (*Buffer).DecodeZigzag64
- p.valSize = sizeZigzag64
case "bytes", "group":
p.WireType = WireBytes
// no numeric converter for non-numeric types
@@ -299,6 +224,7 @@ func (p *Properties) Parse(s string) {
return
}
+outer:
for i := 2; i < len(fields); i++ {
f := fields[i]
switch {
@@ -326,256 +252,41 @@ func (p *Properties) Parse(s string) {
if i+1 < len(fields) {
// Commas aren't escaped, and def is always last.
p.Default += "," + strings.Join(fields[i+1:], ",")
- break
+ break outer
}
}
}
}
-func logNoSliceEnc(t1, t2 reflect.Type) {
- fmt.Fprintf(os.Stderr, "proto: no slice oenc for %T = []%T\n", t1, t2)
-}
-
var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem()
-// Initialize the fields for encoding and decoding.
-func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lockGetProp bool) {
- p.enc = nil
- p.dec = nil
- p.size = nil
-
+// setFieldProps initializes the field properties for submessages and maps.
+func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) {
switch t1 := typ; t1.Kind() {
- default:
- fmt.Fprintf(os.Stderr, "proto: no coders for %v\n", t1)
-
- // proto3 scalar types
-
- case reflect.Bool:
- p.enc = (*Buffer).enc_proto3_bool
- p.dec = (*Buffer).dec_proto3_bool
- p.size = size_proto3_bool
- case reflect.Int32:
- p.enc = (*Buffer).enc_proto3_int32
- p.dec = (*Buffer).dec_proto3_int32
- p.size = size_proto3_int32
- case reflect.Uint32:
- p.enc = (*Buffer).enc_proto3_uint32
- p.dec = (*Buffer).dec_proto3_int32 // can reuse
- p.size = size_proto3_uint32
- case reflect.Int64, reflect.Uint64:
- p.enc = (*Buffer).enc_proto3_int64
- p.dec = (*Buffer).dec_proto3_int64
- p.size = size_proto3_int64
- case reflect.Float32:
- p.enc = (*Buffer).enc_proto3_uint32 // can just treat them as bits
- p.dec = (*Buffer).dec_proto3_int32
- p.size = size_proto3_uint32
- case reflect.Float64:
- p.enc = (*Buffer).enc_proto3_int64 // can just treat them as bits
- p.dec = (*Buffer).dec_proto3_int64
- p.size = size_proto3_int64
- case reflect.String:
- p.enc = (*Buffer).enc_proto3_string
- p.dec = (*Buffer).dec_proto3_string
- p.size = size_proto3_string
-
case reflect.Ptr:
- switch t2 := t1.Elem(); t2.Kind() {
- default:
- fmt.Fprintf(os.Stderr, "proto: no encoder function for %v -> %v\n", t1, t2)
- break
- case reflect.Bool:
- p.enc = (*Buffer).enc_bool
- p.dec = (*Buffer).dec_bool
- p.size = size_bool
- case reflect.Int32:
- p.enc = (*Buffer).enc_int32
- p.dec = (*Buffer).dec_int32
- p.size = size_int32
- case reflect.Uint32:
- p.enc = (*Buffer).enc_uint32
- p.dec = (*Buffer).dec_int32 // can reuse
- p.size = size_uint32
- case reflect.Int64, reflect.Uint64:
- p.enc = (*Buffer).enc_int64
- p.dec = (*Buffer).dec_int64
- p.size = size_int64
- case reflect.Float32:
- p.enc = (*Buffer).enc_uint32 // can just treat them as bits
- p.dec = (*Buffer).dec_int32
- p.size = size_uint32
- case reflect.Float64:
- p.enc = (*Buffer).enc_int64 // can just treat them as bits
- p.dec = (*Buffer).dec_int64
- p.size = size_int64
- case reflect.String:
- p.enc = (*Buffer).enc_string
- p.dec = (*Buffer).dec_string
- p.size = size_string
- case reflect.Struct:
+ if t1.Elem().Kind() == reflect.Struct {
p.stype = t1.Elem()
- p.isMarshaler = isMarshaler(t1)
- p.isUnmarshaler = isUnmarshaler(t1)
- if p.Wire == "bytes" {
- p.enc = (*Buffer).enc_struct_message
- p.dec = (*Buffer).dec_struct_message
- p.size = size_struct_message
- } else {
- p.enc = (*Buffer).enc_struct_group
- p.dec = (*Buffer).dec_struct_group
- p.size = size_struct_group
- }
}
case reflect.Slice:
- switch t2 := t1.Elem(); t2.Kind() {
- default:
- logNoSliceEnc(t1, t2)
- break
- case reflect.Bool:
- if p.Packed {
- p.enc = (*Buffer).enc_slice_packed_bool
- p.size = size_slice_packed_bool
- } else {
- p.enc = (*Buffer).enc_slice_bool
- p.size = size_slice_bool
- }
- p.dec = (*Buffer).dec_slice_bool
- p.packedDec = (*Buffer).dec_slice_packed_bool
- case reflect.Int32:
- if p.Packed {
- p.enc = (*Buffer).enc_slice_packed_int32
- p.size = size_slice_packed_int32
- } else {
- p.enc = (*Buffer).enc_slice_int32
- p.size = size_slice_int32
- }
- p.dec = (*Buffer).dec_slice_int32
- p.packedDec = (*Buffer).dec_slice_packed_int32
- case reflect.Uint32:
- if p.Packed {
- p.enc = (*Buffer).enc_slice_packed_uint32
- p.size = size_slice_packed_uint32
- } else {
- p.enc = (*Buffer).enc_slice_uint32
- p.size = size_slice_uint32
- }
- p.dec = (*Buffer).dec_slice_int32
- p.packedDec = (*Buffer).dec_slice_packed_int32
- case reflect.Int64, reflect.Uint64:
- if p.Packed {
- p.enc = (*Buffer).enc_slice_packed_int64
- p.size = size_slice_packed_int64
- } else {
- p.enc = (*Buffer).enc_slice_int64
- p.size = size_slice_int64
- }
- p.dec = (*Buffer).dec_slice_int64
- p.packedDec = (*Buffer).dec_slice_packed_int64
- case reflect.Uint8:
- p.dec = (*Buffer).dec_slice_byte
- if p.proto3 {
- p.enc = (*Buffer).enc_proto3_slice_byte
- p.size = size_proto3_slice_byte
- } else {
- p.enc = (*Buffer).enc_slice_byte
- p.size = size_slice_byte
- }
- case reflect.Float32, reflect.Float64:
- switch t2.Bits() {
- case 32:
- // can just treat them as bits
- if p.Packed {
- p.enc = (*Buffer).enc_slice_packed_uint32
- p.size = size_slice_packed_uint32
- } else {
- p.enc = (*Buffer).enc_slice_uint32
- p.size = size_slice_uint32
- }
- p.dec = (*Buffer).dec_slice_int32
- p.packedDec = (*Buffer).dec_slice_packed_int32
- case 64:
- // can just treat them as bits
- if p.Packed {
- p.enc = (*Buffer).enc_slice_packed_int64
- p.size = size_slice_packed_int64
- } else {
- p.enc = (*Buffer).enc_slice_int64
- p.size = size_slice_int64
- }
- p.dec = (*Buffer).dec_slice_int64
- p.packedDec = (*Buffer).dec_slice_packed_int64
- default:
- logNoSliceEnc(t1, t2)
- break
- }
- case reflect.String:
- p.enc = (*Buffer).enc_slice_string
- p.dec = (*Buffer).dec_slice_string
- p.size = size_slice_string
- case reflect.Ptr:
- switch t3 := t2.Elem(); t3.Kind() {
- default:
- fmt.Fprintf(os.Stderr, "proto: no ptr oenc for %T -> %T -> %T\n", t1, t2, t3)
- break
- case reflect.Struct:
- p.stype = t2.Elem()
- p.isMarshaler = isMarshaler(t2)
- p.isUnmarshaler = isUnmarshaler(t2)
- if p.Wire == "bytes" {
- p.enc = (*Buffer).enc_slice_struct_message
- p.dec = (*Buffer).dec_slice_struct_message
- p.size = size_slice_struct_message
- } else {
- p.enc = (*Buffer).enc_slice_struct_group
- p.dec = (*Buffer).dec_slice_struct_group
- p.size = size_slice_struct_group
- }
- }
- case reflect.Slice:
- switch t2.Elem().Kind() {
- default:
- fmt.Fprintf(os.Stderr, "proto: no slice elem oenc for %T -> %T -> %T\n", t1, t2, t2.Elem())
- break
- case reflect.Uint8:
- p.enc = (*Buffer).enc_slice_slice_byte
- p.dec = (*Buffer).dec_slice_slice_byte
- p.size = size_slice_slice_byte
- }
+ if t2 := t1.Elem(); t2.Kind() == reflect.Ptr && t2.Elem().Kind() == reflect.Struct {
+ p.stype = t2.Elem()
}
case reflect.Map:
- p.enc = (*Buffer).enc_new_map
- p.dec = (*Buffer).dec_new_map
- p.size = size_new_map
-
p.mtype = t1
- p.mkeyprop = &Properties{}
- p.mkeyprop.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp)
- p.mvalprop = &Properties{}
+ p.MapKeyProp = &Properties{}
+ p.MapKeyProp.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp)
+ p.MapValProp = &Properties{}
vtype := p.mtype.Elem()
if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice {
// The value type is not a message (*T) or bytes ([]byte),
// so we need encoders for the pointer to this type.
vtype = reflect.PtrTo(vtype)
}
- p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp)
+ p.MapValProp.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp)
}
- // precalculate tag code
- wire := p.WireType
- if p.Packed {
- wire = WireBytes
- }
- x := uint32(p.Tag)<<3 | uint32(wire)
- i := 0
- for i = 0; x > 127; i++ {
- p.tagbuf[i] = 0x80 | uint8(x&0x7F)
- x >>= 7
- }
- p.tagbuf[i] = uint8(x)
- p.tagcode = p.tagbuf[0 : i+1]
-
if p.stype != nil {
if lockGetProp {
p.sprop = GetProperties(p.stype)
@@ -586,32 +297,9 @@ func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lock
}
var (
- marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()
- unmarshalerType = reflect.TypeOf((*Unmarshaler)(nil)).Elem()
+ marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()
)
-// isMarshaler reports whether type t implements Marshaler.
-func isMarshaler(t reflect.Type) bool {
- // We're checking for (likely) pointer-receiver methods
- // so if t is not a pointer, something is very wrong.
- // The calls above only invoke isMarshaler on pointer types.
- if t.Kind() != reflect.Ptr {
- panic("proto: misuse of isMarshaler")
- }
- return t.Implements(marshalerType)
-}
-
-// isUnmarshaler reports whether type t implements Unmarshaler.
-func isUnmarshaler(t reflect.Type) bool {
- // We're checking for (likely) pointer-receiver methods
- // so if t is not a pointer, something is very wrong.
- // The calls above only invoke isUnmarshaler on pointer types.
- if t.Kind() != reflect.Ptr {
- panic("proto: misuse of isUnmarshaler")
- }
- return t.Implements(unmarshalerType)
-}
-
// Init populates the properties from a protocol buffer struct tag.
func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) {
p.init(typ, name, tag, f, true)
@@ -621,14 +309,11 @@ func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructF
// "bytes,49,opt,def=hello!"
p.Name = name
p.OrigName = name
- if f != nil {
- p.field = toField(f)
- }
if tag == "" {
return
}
p.Parse(tag)
- p.setEncAndDec(typ, f, lockGetProp)
+ p.setFieldProps(typ, f, lockGetProp)
}
var (
@@ -678,9 +363,6 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
propertiesMap[t] = prop
// build properties
- prop.extendable = reflect.PtrTo(t).Implements(extendableProtoType) ||
- reflect.PtrTo(t).Implements(extendableProtoV1Type)
- prop.unrecField = invalidField
prop.Prop = make([]*Properties, t.NumField())
prop.order = make([]int, t.NumField())
@@ -690,17 +372,6 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
name := f.Name
p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false)
- if f.Name == "XXX_InternalExtensions" { // special case
- p.enc = (*Buffer).enc_exts
- p.dec = nil // not needed
- p.size = size_exts
- } else if f.Name == "XXX_extensions" { // special case
- p.enc = (*Buffer).enc_map
- p.dec = nil // not needed
- p.size = size_map
- } else if f.Name == "XXX_unrecognized" { // special case
- prop.unrecField = toField(&f)
- }
oneof := f.Tag.Get("protobuf_oneof") // special case
if oneof != "" {
// Oneof fields don't use the traditional protobuf tag.
@@ -715,9 +386,6 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
}
print("\n")
}
- if p.enc == nil && !strings.HasPrefix(f.Name, "XXX_") && oneof == "" {
- fmt.Fprintln(os.Stderr, "proto: no encoder for", f.Name, f.Type.String(), "[GetProperties]")
- }
}
// Re-order prop.order.
@@ -728,8 +396,7 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
}
if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok {
var oots []interface{}
- prop.oneofMarshaler, prop.oneofUnmarshaler, prop.oneofSizer, oots = om.XXX_OneofFuncs()
- prop.stype = t
+ _, _, _, oots = om.XXX_OneofFuncs()
// Interpret oneof metadata.
prop.OneofTypes = make(map[string]*OneofProperties)
@@ -779,30 +446,6 @@ func getPropertiesLocked(t reflect.Type) *StructProperties {
return prop
}
-// Return the Properties object for the x[0]'th field of the structure.
-func propByIndex(t reflect.Type, x []int) *Properties {
- if len(x) != 1 {
- fmt.Fprintf(os.Stderr, "proto: field index dimension %d (not 1) for type %s\n", len(x), t)
- return nil
- }
- prop := GetProperties(t)
- return prop.Prop[x[0]]
-}
-
-// Get the address and type of a pointer to a struct from an interface.
-func getbase(pb Message) (t reflect.Type, b structPointer, err error) {
- if pb == nil {
- err = ErrNil
- return
- }
- // get the reflect type of the pointer to the struct.
- t = reflect.TypeOf(pb)
- // get the address of the struct.
- value := reflect.ValueOf(pb)
- b = toStructPointer(value)
- return
-}
-
// A global registry of enum types.
// The generated code will register the generated maps by calling RegisterEnum.
@@ -826,20 +469,42 @@ func EnumValueMap(enumType string) map[string]int32 {
// A registry of all linked message types.
// The string is a fully-qualified proto name ("pkg.Message").
var (
- protoTypes = make(map[string]reflect.Type)
- revProtoTypes = make(map[reflect.Type]string)
+ protoTypedNils = make(map[string]Message) // a map from proto names to typed nil pointers
+ protoMapTypes = make(map[string]reflect.Type) // a map from proto names to map types
+ revProtoTypes = make(map[reflect.Type]string)
)
// RegisterType is called from generated code and maps from the fully qualified
// proto name to the type (pointer to struct) of the protocol buffer.
func RegisterType(x Message, name string) {
- if _, ok := protoTypes[name]; ok {
+ if _, ok := protoTypedNils[name]; ok {
// TODO: Some day, make this a panic.
log.Printf("proto: duplicate proto type registered: %s", name)
return
}
t := reflect.TypeOf(x)
- protoTypes[name] = t
+ if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 {
+ // Generated code always calls RegisterType with nil x.
+ // This check is just for extra safety.
+ protoTypedNils[name] = x
+ } else {
+ protoTypedNils[name] = reflect.Zero(t).Interface().(Message)
+ }
+ revProtoTypes[t] = name
+}
+
+// RegisterMapType is called from generated code and maps from the fully qualified
+// proto name to the native map type of the proto map definition.
+func RegisterMapType(x interface{}, name string) {
+ if reflect.TypeOf(x).Kind() != reflect.Map {
+ panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name))
+ }
+ if _, ok := protoMapTypes[name]; ok {
+ log.Printf("proto: duplicate proto type registered: %s", name)
+ return
+ }
+ t := reflect.TypeOf(x)
+ protoMapTypes[name] = t
revProtoTypes[t] = name
}
@@ -855,7 +520,14 @@ func MessageName(x Message) string {
}
// MessageType returns the message type (pointer to struct) for a named message.
-func MessageType(name string) reflect.Type { return protoTypes[name] }
+// The type is not guaranteed to implement proto.Message if the name refers to a
+// map entry.
+func MessageType(name string) reflect.Type {
+ if t, ok := protoTypedNils[name]; ok {
+ return reflect.TypeOf(t)
+ }
+ return protoMapTypes[name]
+}
// A registry of all linked proto files.
var (
diff --git a/vendor/github.com/golang/protobuf/proto/table_marshal.go b/vendor/github.com/golang/protobuf/proto/table_marshal.go
new file mode 100644
index 000000000..b16794496
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/table_marshal.go
@@ -0,0 +1,2767 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// 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.
+
+package proto
+
+import (
+ "errors"
+ "fmt"
+ "math"
+ "reflect"
+ "sort"
+ "strconv"
+ "strings"
+ "sync"
+ "sync/atomic"
+ "unicode/utf8"
+)
+
+// a sizer takes a pointer to a field and the size of its tag, computes the size of
+// the encoded data.
+type sizer func(pointer, int) int
+
+// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format),
+// marshals the field to the end of the slice, returns the slice and error (if any).
+type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error)
+
+// marshalInfo is the information used for marshaling a message.
+type marshalInfo struct {
+ typ reflect.Type
+ fields []*marshalFieldInfo
+ unrecognized field // offset of XXX_unrecognized
+ extensions field // offset of XXX_InternalExtensions
+ v1extensions field // offset of XXX_extensions
+ sizecache field // offset of XXX_sizecache
+ initialized int32 // 0 -- only typ is set, 1 -- fully initialized
+ messageset bool // uses message set wire format
+ hasmarshaler bool // has custom marshaler
+ sync.RWMutex // protect extElems map, also for initialization
+ extElems map[int32]*marshalElemInfo // info of extension elements
+}
+
+// marshalFieldInfo is the information used for marshaling a field of a message.
+type marshalFieldInfo struct {
+ field field
+ wiretag uint64 // tag in wire format
+ tagsize int // size of tag in wire format
+ sizer sizer
+ marshaler marshaler
+ isPointer bool
+ required bool // field is required
+ name string // name of the field, for error reporting
+ oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements
+}
+
+// marshalElemInfo is the information used for marshaling an extension or oneof element.
+type marshalElemInfo struct {
+ wiretag uint64 // tag in wire format
+ tagsize int // size of tag in wire format
+ sizer sizer
+ marshaler marshaler
+ isptr bool // elem is pointer typed, thus interface of this type is a direct interface (extension only)
+}
+
+var (
+ marshalInfoMap = map[reflect.Type]*marshalInfo{}
+ marshalInfoLock sync.Mutex
+)
+
+// getMarshalInfo returns the information to marshal a given type of message.
+// The info it returns may not necessarily initialized.
+// t is the type of the message (NOT the pointer to it).
+func getMarshalInfo(t reflect.Type) *marshalInfo {
+ marshalInfoLock.Lock()
+ u, ok := marshalInfoMap[t]
+ if !ok {
+ u = &marshalInfo{typ: t}
+ marshalInfoMap[t] = u
+ }
+ marshalInfoLock.Unlock()
+ return u
+}
+
+// Size is the entry point from generated code,
+// and should be ONLY called by generated code.
+// It computes the size of encoded data of msg.
+// a is a pointer to a place to store cached marshal info.
+func (a *InternalMessageInfo) Size(msg Message) int {
+ u := getMessageMarshalInfo(msg, a)
+ ptr := toPointer(&msg)
+ if ptr.isNil() {
+ // We get here if msg is a typed nil ((*SomeMessage)(nil)),
+ // so it satisfies the interface, and msg == nil wouldn't
+ // catch it. We don't want crash in this case.
+ return 0
+ }
+ return u.size(ptr)
+}
+
+// Marshal is the entry point from generated code,
+// and should be ONLY called by generated code.
+// It marshals msg to the end of b.
+// a is a pointer to a place to store cached marshal info.
+func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) {
+ u := getMessageMarshalInfo(msg, a)
+ ptr := toPointer(&msg)
+ if ptr.isNil() {
+ // We get here if msg is a typed nil ((*SomeMessage)(nil)),
+ // so it satisfies the interface, and msg == nil wouldn't
+ // catch it. We don't want crash in this case.
+ return b, ErrNil
+ }
+ return u.marshal(b, ptr, deterministic)
+}
+
+func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo {
+ // u := a.marshal, but atomically.
+ // We use an atomic here to ensure memory consistency.
+ u := atomicLoadMarshalInfo(&a.marshal)
+ if u == nil {
+ // Get marshal information from type of message.
+ t := reflect.ValueOf(msg).Type()
+ if t.Kind() != reflect.Ptr {
+ panic(fmt.Sprintf("cannot handle non-pointer message type %v", t))
+ }
+ u = getMarshalInfo(t.Elem())
+ // Store it in the cache for later users.
+ // a.marshal = u, but atomically.
+ atomicStoreMarshalInfo(&a.marshal, u)
+ }
+ return u
+}
+
+// size is the main function to compute the size of the encoded data of a message.
+// ptr is the pointer to the message.
+func (u *marshalInfo) size(ptr pointer) int {
+ if atomic.LoadInt32(&u.initialized) == 0 {
+ u.computeMarshalInfo()
+ }
+
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ if u.hasmarshaler {
+ m := ptr.asPointerTo(u.typ).Interface().(Marshaler)
+ b, _ := m.Marshal()
+ return len(b)
+ }
+
+ n := 0
+ for _, f := range u.fields {
+ if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
+ // nil pointer always marshals to nothing
+ continue
+ }
+ n += f.sizer(ptr.offset(f.field), f.tagsize)
+ }
+ if u.extensions.IsValid() {
+ e := ptr.offset(u.extensions).toExtensions()
+ if u.messageset {
+ n += u.sizeMessageSet(e)
+ } else {
+ n += u.sizeExtensions(e)
+ }
+ }
+ if u.v1extensions.IsValid() {
+ m := *ptr.offset(u.v1extensions).toOldExtensions()
+ n += u.sizeV1Extensions(m)
+ }
+ if u.unrecognized.IsValid() {
+ s := *ptr.offset(u.unrecognized).toBytes()
+ n += len(s)
+ }
+ // cache the result for use in marshal
+ if u.sizecache.IsValid() {
+ atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n))
+ }
+ return n
+}
+
+// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated),
+// fall back to compute the size.
+func (u *marshalInfo) cachedsize(ptr pointer) int {
+ if u.sizecache.IsValid() {
+ return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32()))
+ }
+ return u.size(ptr)
+}
+
+// marshal is the main function to marshal a message. It takes a byte slice and appends
+// the encoded data to the end of the slice, returns the slice and error (if any).
+// ptr is the pointer to the message.
+// If deterministic is true, map is marshaled in deterministic order.
+func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) {
+ if atomic.LoadInt32(&u.initialized) == 0 {
+ u.computeMarshalInfo()
+ }
+
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ if u.hasmarshaler {
+ m := ptr.asPointerTo(u.typ).Interface().(Marshaler)
+ b1, err := m.Marshal()
+ b = append(b, b1...)
+ return b, err
+ }
+
+ var err, errLater error
+ // The old marshaler encodes extensions at beginning.
+ if u.extensions.IsValid() {
+ e := ptr.offset(u.extensions).toExtensions()
+ if u.messageset {
+ b, err = u.appendMessageSet(b, e, deterministic)
+ } else {
+ b, err = u.appendExtensions(b, e, deterministic)
+ }
+ if err != nil {
+ return b, err
+ }
+ }
+ if u.v1extensions.IsValid() {
+ m := *ptr.offset(u.v1extensions).toOldExtensions()
+ b, err = u.appendV1Extensions(b, m, deterministic)
+ if err != nil {
+ return b, err
+ }
+ }
+ for _, f := range u.fields {
+ if f.required {
+ if ptr.offset(f.field).getPointer().isNil() {
+ // Required field is not set.
+ // We record the error but keep going, to give a complete marshaling.
+ if errLater == nil {
+ errLater = &RequiredNotSetError{f.name}
+ }
+ continue
+ }
+ }
+ if f.isPointer && ptr.offset(f.field).getPointer().isNil() {
+ // nil pointer always marshals to nothing
+ continue
+ }
+ b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic)
+ if err != nil {
+ if err1, ok := err.(*RequiredNotSetError); ok {
+ // Required field in submessage is not set.
+ // We record the error but keep going, to give a complete marshaling.
+ if errLater == nil {
+ errLater = &RequiredNotSetError{f.name + "." + err1.field}
+ }
+ continue
+ }
+ if err == errRepeatedHasNil {
+ err = errors.New("proto: repeated field " + f.name + " has nil element")
+ }
+ if err == errInvalidUTF8 {
+ if errLater == nil {
+ fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name
+ errLater = &invalidUTF8Error{fullName}
+ }
+ continue
+ }
+ return b, err
+ }
+ }
+ if u.unrecognized.IsValid() {
+ s := *ptr.offset(u.unrecognized).toBytes()
+ b = append(b, s...)
+ }
+ return b, errLater
+}
+
+// computeMarshalInfo initializes the marshal info.
+func (u *marshalInfo) computeMarshalInfo() {
+ u.Lock()
+ defer u.Unlock()
+ if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock
+ return
+ }
+
+ t := u.typ
+ u.unrecognized = invalidField
+ u.extensions = invalidField
+ u.v1extensions = invalidField
+ u.sizecache = invalidField
+
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ if reflect.PtrTo(t).Implements(marshalerType) {
+ u.hasmarshaler = true
+ atomic.StoreInt32(&u.initialized, 1)
+ return
+ }
+
+ // get oneof implementers
+ var oneofImplementers []interface{}
+ if m, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok {
+ _, _, _, oneofImplementers = m.XXX_OneofFuncs()
+ }
+
+ n := t.NumField()
+
+ // deal with XXX fields first
+ for i := 0; i < t.NumField(); i++ {
+ f := t.Field(i)
+ if !strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+ switch f.Name {
+ case "XXX_sizecache":
+ u.sizecache = toField(&f)
+ case "XXX_unrecognized":
+ u.unrecognized = toField(&f)
+ case "XXX_InternalExtensions":
+ u.extensions = toField(&f)
+ u.messageset = f.Tag.Get("protobuf_messageset") == "1"
+ case "XXX_extensions":
+ u.v1extensions = toField(&f)
+ case "XXX_NoUnkeyedLiteral":
+ // nothing to do
+ default:
+ panic("unknown XXX field: " + f.Name)
+ }
+ n--
+ }
+
+ // normal fields
+ fields := make([]marshalFieldInfo, n) // batch allocation
+ u.fields = make([]*marshalFieldInfo, 0, n)
+ for i, j := 0, 0; i < t.NumField(); i++ {
+ f := t.Field(i)
+
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+ field := &fields[j]
+ j++
+ field.name = f.Name
+ u.fields = append(u.fields, field)
+ if f.Tag.Get("protobuf_oneof") != "" {
+ field.computeOneofFieldInfo(&f, oneofImplementers)
+ continue
+ }
+ if f.Tag.Get("protobuf") == "" {
+ // field has no tag (not in generated message), ignore it
+ u.fields = u.fields[:len(u.fields)-1]
+ j--
+ continue
+ }
+ field.computeMarshalFieldInfo(&f)
+ }
+
+ // fields are marshaled in tag order on the wire.
+ sort.Sort(byTag(u.fields))
+
+ atomic.StoreInt32(&u.initialized, 1)
+}
+
+// helper for sorting fields by tag
+type byTag []*marshalFieldInfo
+
+func (a byTag) Len() int { return len(a) }
+func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag }
+
+// getExtElemInfo returns the information to marshal an extension element.
+// The info it returns is initialized.
+func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo {
+ // get from cache first
+ u.RLock()
+ e, ok := u.extElems[desc.Field]
+ u.RUnlock()
+ if ok {
+ return e
+ }
+
+ t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct
+ tags := strings.Split(desc.Tag, ",")
+ tag, err := strconv.Atoi(tags[1])
+ if err != nil {
+ panic("tag is not an integer")
+ }
+ wt := wiretype(tags[0])
+ sizer, marshaler := typeMarshaler(t, tags, false, false)
+ e = &marshalElemInfo{
+ wiretag: uint64(tag)<<3 | wt,
+ tagsize: SizeVarint(uint64(tag) << 3),
+ sizer: sizer,
+ marshaler: marshaler,
+ isptr: t.Kind() == reflect.Ptr,
+ }
+
+ // update cache
+ u.Lock()
+ if u.extElems == nil {
+ u.extElems = make(map[int32]*marshalElemInfo)
+ }
+ u.extElems[desc.Field] = e
+ u.Unlock()
+ return e
+}
+
+// computeMarshalFieldInfo fills up the information to marshal a field.
+func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) {
+ // parse protobuf tag of the field.
+ // tag has format of "bytes,49,opt,name=foo,def=hello!"
+ tags := strings.Split(f.Tag.Get("protobuf"), ",")
+ if tags[0] == "" {
+ return
+ }
+ tag, err := strconv.Atoi(tags[1])
+ if err != nil {
+ panic("tag is not an integer")
+ }
+ wt := wiretype(tags[0])
+ if tags[2] == "req" {
+ fi.required = true
+ }
+ fi.setTag(f, tag, wt)
+ fi.setMarshaler(f, tags)
+}
+
+func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) {
+ fi.field = toField(f)
+ fi.wiretag = 1<<31 - 1 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire.
+ fi.isPointer = true
+ fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f)
+ fi.oneofElems = make(map[reflect.Type]*marshalElemInfo)
+
+ ityp := f.Type // interface type
+ for _, o := range oneofImplementers {
+ t := reflect.TypeOf(o)
+ if !t.Implements(ityp) {
+ continue
+ }
+ sf := t.Elem().Field(0) // oneof implementer is a struct with a single field
+ tags := strings.Split(sf.Tag.Get("protobuf"), ",")
+ tag, err := strconv.Atoi(tags[1])
+ if err != nil {
+ panic("tag is not an integer")
+ }
+ wt := wiretype(tags[0])
+ sizer, marshaler := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value
+ fi.oneofElems[t.Elem()] = &marshalElemInfo{
+ wiretag: uint64(tag)<<3 | wt,
+ tagsize: SizeVarint(uint64(tag) << 3),
+ sizer: sizer,
+ marshaler: marshaler,
+ }
+ }
+}
+
+type oneofMessage interface {
+ XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})
+}
+
+// wiretype returns the wire encoding of the type.
+func wiretype(encoding string) uint64 {
+ switch encoding {
+ case "fixed32":
+ return WireFixed32
+ case "fixed64":
+ return WireFixed64
+ case "varint", "zigzag32", "zigzag64":
+ return WireVarint
+ case "bytes":
+ return WireBytes
+ case "group":
+ return WireStartGroup
+ }
+ panic("unknown wire type " + encoding)
+}
+
+// setTag fills up the tag (in wire format) and its size in the info of a field.
+func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) {
+ fi.field = toField(f)
+ fi.wiretag = uint64(tag)<<3 | wt
+ fi.tagsize = SizeVarint(uint64(tag) << 3)
+}
+
+// setMarshaler fills up the sizer and marshaler in the info of a field.
+func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) {
+ switch f.Type.Kind() {
+ case reflect.Map:
+ // map field
+ fi.isPointer = true
+ fi.sizer, fi.marshaler = makeMapMarshaler(f)
+ return
+ case reflect.Ptr, reflect.Slice:
+ fi.isPointer = true
+ }
+ fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false)
+}
+
+// typeMarshaler returns the sizer and marshaler of a given field.
+// t is the type of the field.
+// tags is the generated "protobuf" tag of the field.
+// If nozero is true, zero value is not marshaled to the wire.
+// If oneof is true, it is a oneof field.
+func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) {
+ encoding := tags[0]
+
+ pointer := false
+ slice := false
+ if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
+ slice = true
+ t = t.Elem()
+ }
+ if t.Kind() == reflect.Ptr {
+ pointer = true
+ t = t.Elem()
+ }
+
+ packed := false
+ proto3 := false
+ validateUTF8 := true
+ for i := 2; i < len(tags); i++ {
+ if tags[i] == "packed" {
+ packed = true
+ }
+ if tags[i] == "proto3" {
+ proto3 = true
+ }
+ }
+ validateUTF8 = validateUTF8 && proto3
+
+ switch t.Kind() {
+ case reflect.Bool:
+ if pointer {
+ return sizeBoolPtr, appendBoolPtr
+ }
+ if slice {
+ if packed {
+ return sizeBoolPackedSlice, appendBoolPackedSlice
+ }
+ return sizeBoolSlice, appendBoolSlice
+ }
+ if nozero {
+ return sizeBoolValueNoZero, appendBoolValueNoZero
+ }
+ return sizeBoolValue, appendBoolValue
+ case reflect.Uint32:
+ switch encoding {
+ case "fixed32":
+ if pointer {
+ return sizeFixed32Ptr, appendFixed32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFixed32PackedSlice, appendFixed32PackedSlice
+ }
+ return sizeFixed32Slice, appendFixed32Slice
+ }
+ if nozero {
+ return sizeFixed32ValueNoZero, appendFixed32ValueNoZero
+ }
+ return sizeFixed32Value, appendFixed32Value
+ case "varint":
+ if pointer {
+ return sizeVarint32Ptr, appendVarint32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeVarint32PackedSlice, appendVarint32PackedSlice
+ }
+ return sizeVarint32Slice, appendVarint32Slice
+ }
+ if nozero {
+ return sizeVarint32ValueNoZero, appendVarint32ValueNoZero
+ }
+ return sizeVarint32Value, appendVarint32Value
+ }
+ case reflect.Int32:
+ switch encoding {
+ case "fixed32":
+ if pointer {
+ return sizeFixedS32Ptr, appendFixedS32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFixedS32PackedSlice, appendFixedS32PackedSlice
+ }
+ return sizeFixedS32Slice, appendFixedS32Slice
+ }
+ if nozero {
+ return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero
+ }
+ return sizeFixedS32Value, appendFixedS32Value
+ case "varint":
+ if pointer {
+ return sizeVarintS32Ptr, appendVarintS32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeVarintS32PackedSlice, appendVarintS32PackedSlice
+ }
+ return sizeVarintS32Slice, appendVarintS32Slice
+ }
+ if nozero {
+ return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero
+ }
+ return sizeVarintS32Value, appendVarintS32Value
+ case "zigzag32":
+ if pointer {
+ return sizeZigzag32Ptr, appendZigzag32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeZigzag32PackedSlice, appendZigzag32PackedSlice
+ }
+ return sizeZigzag32Slice, appendZigzag32Slice
+ }
+ if nozero {
+ return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero
+ }
+ return sizeZigzag32Value, appendZigzag32Value
+ }
+ case reflect.Uint64:
+ switch encoding {
+ case "fixed64":
+ if pointer {
+ return sizeFixed64Ptr, appendFixed64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFixed64PackedSlice, appendFixed64PackedSlice
+ }
+ return sizeFixed64Slice, appendFixed64Slice
+ }
+ if nozero {
+ return sizeFixed64ValueNoZero, appendFixed64ValueNoZero
+ }
+ return sizeFixed64Value, appendFixed64Value
+ case "varint":
+ if pointer {
+ return sizeVarint64Ptr, appendVarint64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeVarint64PackedSlice, appendVarint64PackedSlice
+ }
+ return sizeVarint64Slice, appendVarint64Slice
+ }
+ if nozero {
+ return sizeVarint64ValueNoZero, appendVarint64ValueNoZero
+ }
+ return sizeVarint64Value, appendVarint64Value
+ }
+ case reflect.Int64:
+ switch encoding {
+ case "fixed64":
+ if pointer {
+ return sizeFixedS64Ptr, appendFixedS64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFixedS64PackedSlice, appendFixedS64PackedSlice
+ }
+ return sizeFixedS64Slice, appendFixedS64Slice
+ }
+ if nozero {
+ return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero
+ }
+ return sizeFixedS64Value, appendFixedS64Value
+ case "varint":
+ if pointer {
+ return sizeVarintS64Ptr, appendVarintS64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeVarintS64PackedSlice, appendVarintS64PackedSlice
+ }
+ return sizeVarintS64Slice, appendVarintS64Slice
+ }
+ if nozero {
+ return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero
+ }
+ return sizeVarintS64Value, appendVarintS64Value
+ case "zigzag64":
+ if pointer {
+ return sizeZigzag64Ptr, appendZigzag64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeZigzag64PackedSlice, appendZigzag64PackedSlice
+ }
+ return sizeZigzag64Slice, appendZigzag64Slice
+ }
+ if nozero {
+ return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero
+ }
+ return sizeZigzag64Value, appendZigzag64Value
+ }
+ case reflect.Float32:
+ if pointer {
+ return sizeFloat32Ptr, appendFloat32Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFloat32PackedSlice, appendFloat32PackedSlice
+ }
+ return sizeFloat32Slice, appendFloat32Slice
+ }
+ if nozero {
+ return sizeFloat32ValueNoZero, appendFloat32ValueNoZero
+ }
+ return sizeFloat32Value, appendFloat32Value
+ case reflect.Float64:
+ if pointer {
+ return sizeFloat64Ptr, appendFloat64Ptr
+ }
+ if slice {
+ if packed {
+ return sizeFloat64PackedSlice, appendFloat64PackedSlice
+ }
+ return sizeFloat64Slice, appendFloat64Slice
+ }
+ if nozero {
+ return sizeFloat64ValueNoZero, appendFloat64ValueNoZero
+ }
+ return sizeFloat64Value, appendFloat64Value
+ case reflect.String:
+ if validateUTF8 {
+ if pointer {
+ return sizeStringPtr, appendUTF8StringPtr
+ }
+ if slice {
+ return sizeStringSlice, appendUTF8StringSlice
+ }
+ if nozero {
+ return sizeStringValueNoZero, appendUTF8StringValueNoZero
+ }
+ return sizeStringValue, appendUTF8StringValue
+ }
+ if pointer {
+ return sizeStringPtr, appendStringPtr
+ }
+ if slice {
+ return sizeStringSlice, appendStringSlice
+ }
+ if nozero {
+ return sizeStringValueNoZero, appendStringValueNoZero
+ }
+ return sizeStringValue, appendStringValue
+ case reflect.Slice:
+ if slice {
+ return sizeBytesSlice, appendBytesSlice
+ }
+ if oneof {
+ // Oneof bytes field may also have "proto3" tag.
+ // We want to marshal it as a oneof field. Do this
+ // check before the proto3 check.
+ return sizeBytesOneof, appendBytesOneof
+ }
+ if proto3 {
+ return sizeBytes3, appendBytes3
+ }
+ return sizeBytes, appendBytes
+ case reflect.Struct:
+ switch encoding {
+ case "group":
+ if slice {
+ return makeGroupSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeGroupMarshaler(getMarshalInfo(t))
+ case "bytes":
+ if slice {
+ return makeMessageSliceMarshaler(getMarshalInfo(t))
+ }
+ return makeMessageMarshaler(getMarshalInfo(t))
+ }
+ }
+ panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding))
+}
+
+// Below are functions to size/marshal a specific type of a field.
+// They are stored in the field's info, and called by function pointers.
+// They have type sizer or marshaler.
+
+func sizeFixed32Value(_ pointer, tagsize int) int {
+ return 4 + tagsize
+}
+func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toUint32()
+ if v == 0 {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFixed32Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toUint32Ptr()
+ if p == nil {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFixed32Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint32Slice()
+ return (4 + tagsize) * len(s)
+}
+func sizeFixed32PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
+}
+func sizeFixedS32Value(_ pointer, tagsize int) int {
+ return 4 + tagsize
+}
+func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFixedS32Ptr(ptr pointer, tagsize int) int {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFixedS32Slice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ return (4 + tagsize) * len(s)
+}
+func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
+}
+func sizeFloat32Value(_ pointer, tagsize int) int {
+ return 4 + tagsize
+}
+func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int {
+ v := math.Float32bits(*ptr.toFloat32())
+ if v == 0 {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFloat32Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toFloat32Ptr()
+ if p == nil {
+ return 0
+ }
+ return 4 + tagsize
+}
+func sizeFloat32Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toFloat32Slice()
+ return (4 + tagsize) * len(s)
+}
+func sizeFloat32PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toFloat32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize
+}
+func sizeFixed64Value(_ pointer, tagsize int) int {
+ return 8 + tagsize
+}
+func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toUint64()
+ if v == 0 {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFixed64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toUint64Ptr()
+ if p == nil {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFixed64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint64Slice()
+ return (8 + tagsize) * len(s)
+}
+func sizeFixed64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
+}
+func sizeFixedS64Value(_ pointer, tagsize int) int {
+ return 8 + tagsize
+}
+func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFixedS64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFixedS64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ return (8 + tagsize) * len(s)
+}
+func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
+}
+func sizeFloat64Value(_ pointer, tagsize int) int {
+ return 8 + tagsize
+}
+func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int {
+ v := math.Float64bits(*ptr.toFloat64())
+ if v == 0 {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFloat64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toFloat64Ptr()
+ if p == nil {
+ return 0
+ }
+ return 8 + tagsize
+}
+func sizeFloat64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toFloat64Slice()
+ return (8 + tagsize) * len(s)
+}
+func sizeFloat64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toFloat64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize
+}
+func sizeVarint32Value(ptr pointer, tagsize int) int {
+ v := *ptr.toUint32()
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toUint32()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarint32Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toUint32Ptr()
+ if p == nil {
+ return 0
+ }
+ return SizeVarint(uint64(*p)) + tagsize
+}
+func sizeVarint32Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint32Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v)) + tagsize
+ }
+ return n
+}
+func sizeVarint32PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeVarintS32Value(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS32Ptr(ptr pointer, tagsize int) int {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return 0
+ }
+ return SizeVarint(uint64(*p)) + tagsize
+}
+func sizeVarintS32Slice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v)) + tagsize
+ }
+ return n
+}
+func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeVarint64Value(ptr pointer, tagsize int) int {
+ v := *ptr.toUint64()
+ return SizeVarint(v) + tagsize
+}
+func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toUint64()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(v) + tagsize
+}
+func sizeVarint64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toUint64Ptr()
+ if p == nil {
+ return 0
+ }
+ return SizeVarint(*p) + tagsize
+}
+func sizeVarint64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint64Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(v) + tagsize
+ }
+ return n
+}
+func sizeVarint64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toUint64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(v)
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeVarintS64Value(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64(v)) + tagsize
+}
+func sizeVarintS64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return 0
+ }
+ return SizeVarint(uint64(*p)) + tagsize
+}
+func sizeVarintS64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v)) + tagsize
+ }
+ return n
+}
+func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeZigzag32Value(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+}
+func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+}
+func sizeZigzag32Ptr(ptr pointer, tagsize int) int {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return 0
+ }
+ v := *p
+ return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+}
+func sizeZigzag32Slice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize
+ }
+ return n
+}
+func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeZigzag64Value(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+}
+func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return 0
+ }
+ return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+}
+func sizeZigzag64Ptr(ptr pointer, tagsize int) int {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return 0
+ }
+ v := *p
+ return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+}
+func sizeZigzag64Slice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize
+ }
+ return n
+}
+func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return 0
+ }
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))
+ }
+ return n + SizeVarint(uint64(n)) + tagsize
+}
+func sizeBoolValue(_ pointer, tagsize int) int {
+ return 1 + tagsize
+}
+func sizeBoolValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toBool()
+ if !v {
+ return 0
+ }
+ return 1 + tagsize
+}
+func sizeBoolPtr(ptr pointer, tagsize int) int {
+ p := *ptr.toBoolPtr()
+ if p == nil {
+ return 0
+ }
+ return 1 + tagsize
+}
+func sizeBoolSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toBoolSlice()
+ return (1 + tagsize) * len(s)
+}
+func sizeBoolPackedSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toBoolSlice()
+ if len(s) == 0 {
+ return 0
+ }
+ return len(s) + SizeVarint(uint64(len(s))) + tagsize
+}
+func sizeStringValue(ptr pointer, tagsize int) int {
+ v := *ptr.toString()
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeStringValueNoZero(ptr pointer, tagsize int) int {
+ v := *ptr.toString()
+ if v == "" {
+ return 0
+ }
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeStringPtr(ptr pointer, tagsize int) int {
+ p := *ptr.toStringPtr()
+ if p == nil {
+ return 0
+ }
+ v := *p
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeStringSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toStringSlice()
+ n := 0
+ for _, v := range s {
+ n += len(v) + SizeVarint(uint64(len(v))) + tagsize
+ }
+ return n
+}
+func sizeBytes(ptr pointer, tagsize int) int {
+ v := *ptr.toBytes()
+ if v == nil {
+ return 0
+ }
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeBytes3(ptr pointer, tagsize int) int {
+ v := *ptr.toBytes()
+ if len(v) == 0 {
+ return 0
+ }
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeBytesOneof(ptr pointer, tagsize int) int {
+ v := *ptr.toBytes()
+ return len(v) + SizeVarint(uint64(len(v))) + tagsize
+}
+func sizeBytesSlice(ptr pointer, tagsize int) int {
+ s := *ptr.toBytesSlice()
+ n := 0
+ for _, v := range s {
+ n += len(v) + SizeVarint(uint64(len(v))) + tagsize
+ }
+ return n
+}
+
+// appendFixed32 appends an encoded fixed32 to b.
+func appendFixed32(b []byte, v uint32) []byte {
+ b = append(b,
+ byte(v),
+ byte(v>>8),
+ byte(v>>16),
+ byte(v>>24))
+ return b
+}
+
+// appendFixed64 appends an encoded fixed64 to b.
+func appendFixed64(b []byte, v uint64) []byte {
+ b = append(b,
+ byte(v),
+ byte(v>>8),
+ byte(v>>16),
+ byte(v>>24),
+ byte(v>>32),
+ byte(v>>40),
+ byte(v>>48),
+ byte(v>>56))
+ return b
+}
+
+// appendVarint appends an encoded varint to b.
+func appendVarint(b []byte, v uint64) []byte {
+ // TODO: make 1-byte (maybe 2-byte) case inline-able, once we
+ // have non-leaf inliner.
+ switch {
+ case v < 1<<7:
+ b = append(b, byte(v))
+ case v < 1<<14:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte(v>>7))
+ case v < 1<<21:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte(v>>14))
+ case v < 1<<28:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte(v>>21))
+ case v < 1<<35:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte(v>>28))
+ case v < 1<<42:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte(v>>35))
+ case v < 1<<49:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte((v>>35)&0x7f|0x80),
+ byte(v>>42))
+ case v < 1<<56:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte((v>>35)&0x7f|0x80),
+ byte((v>>42)&0x7f|0x80),
+ byte(v>>49))
+ case v < 1<<63:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte((v>>35)&0x7f|0x80),
+ byte((v>>42)&0x7f|0x80),
+ byte((v>>49)&0x7f|0x80),
+ byte(v>>56))
+ default:
+ b = append(b,
+ byte(v&0x7f|0x80),
+ byte((v>>7)&0x7f|0x80),
+ byte((v>>14)&0x7f|0x80),
+ byte((v>>21)&0x7f|0x80),
+ byte((v>>28)&0x7f|0x80),
+ byte((v>>35)&0x7f|0x80),
+ byte((v>>42)&0x7f|0x80),
+ byte((v>>49)&0x7f|0x80),
+ byte((v>>56)&0x7f|0x80),
+ 1)
+ }
+ return b
+}
+
+func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint32()
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ return b, nil
+}
+func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ return b, nil
+}
+func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toUint32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, *p)
+ return b, nil
+}
+func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ }
+ return b, nil
+}
+func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(4*len(s)))
+ for _, v := range s {
+ b = appendFixed32(b, v)
+ }
+ return b, nil
+}
+func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, uint32(v))
+ return b, nil
+}
+func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, uint32(v))
+ return b, nil
+}
+func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, uint32(*p))
+ return b, nil
+}
+func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, uint32(v))
+ }
+ return b, nil
+}
+func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(4*len(s)))
+ for _, v := range s {
+ b = appendFixed32(b, uint32(v))
+ }
+ return b, nil
+}
+func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := math.Float32bits(*ptr.toFloat32())
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ return b, nil
+}
+func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := math.Float32bits(*ptr.toFloat32())
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, v)
+ return b, nil
+}
+func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toFloat32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, math.Float32bits(*p))
+ return b, nil
+}
+func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toFloat32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed32(b, math.Float32bits(v))
+ }
+ return b, nil
+}
+func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toFloat32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(4*len(s)))
+ for _, v := range s {
+ b = appendFixed32(b, math.Float32bits(v))
+ }
+ return b, nil
+}
+func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint64()
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ return b, nil
+}
+func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ return b, nil
+}
+func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toUint64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, *p)
+ return b, nil
+}
+func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ }
+ return b, nil
+}
+func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(8*len(s)))
+ for _, v := range s {
+ b = appendFixed64(b, v)
+ }
+ return b, nil
+}
+func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, uint64(v))
+ return b, nil
+}
+func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, uint64(v))
+ return b, nil
+}
+func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, uint64(*p))
+ return b, nil
+}
+func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, uint64(v))
+ }
+ return b, nil
+}
+func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(8*len(s)))
+ for _, v := range s {
+ b = appendFixed64(b, uint64(v))
+ }
+ return b, nil
+}
+func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := math.Float64bits(*ptr.toFloat64())
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ return b, nil
+}
+func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := math.Float64bits(*ptr.toFloat64())
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, v)
+ return b, nil
+}
+func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toFloat64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, math.Float64bits(*p))
+ return b, nil
+}
+func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toFloat64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendFixed64(b, math.Float64bits(v))
+ }
+ return b, nil
+}
+func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toFloat64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(8*len(s)))
+ for _, v := range s {
+ b = appendFixed64(b, math.Float64bits(v))
+ }
+ return b, nil
+}
+func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint32()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toUint32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(*p))
+ return b, nil
+}
+func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(*p))
+ return b, nil
+}
+func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint64()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, v)
+ return b, nil
+}
+func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toUint64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, v)
+ return b, nil
+}
+func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toUint64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, *p)
+ return b, nil
+}
+func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, v)
+ }
+ return b, nil
+}
+func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toUint64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(v)
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, v)
+ }
+ return b, nil
+}
+func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ return b, nil
+}
+func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(*p))
+ return b, nil
+}
+func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64(v))
+ }
+ return b, nil
+}
+func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ return b, nil
+}
+func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt32()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ return b, nil
+}
+func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := ptr.getInt32Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ v := *p
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ return b, nil
+}
+func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ }
+ return b, nil
+}
+func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := ptr.getInt32Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))
+ }
+ return b, nil
+}
+func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ return b, nil
+}
+func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toInt64()
+ if v == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ return b, nil
+}
+func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toInt64Ptr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ v := *p
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ return b, nil
+}
+func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ }
+ return b, nil
+}
+func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toInt64Slice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ // compute size
+ n := 0
+ for _, v := range s {
+ n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))
+ }
+ b = appendVarint(b, uint64(n))
+ for _, v := range s {
+ b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))
+ }
+ return b, nil
+}
+func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBool()
+ b = appendVarint(b, wiretag)
+ if v {
+ b = append(b, 1)
+ } else {
+ b = append(b, 0)
+ }
+ return b, nil
+}
+func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBool()
+ if !v {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = append(b, 1)
+ return b, nil
+}
+
+func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toBoolPtr()
+ if p == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ if *p {
+ b = append(b, 1)
+ } else {
+ b = append(b, 0)
+ }
+ return b, nil
+}
+func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toBoolSlice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ if v {
+ b = append(b, 1)
+ } else {
+ b = append(b, 0)
+ }
+ }
+ return b, nil
+}
+func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toBoolSlice()
+ if len(s) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag&^7|WireBytes)
+ b = appendVarint(b, uint64(len(s)))
+ for _, v := range s {
+ if v {
+ b = append(b, 1)
+ } else {
+ b = append(b, 0)
+ }
+ }
+ return b, nil
+}
+func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toString()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toString()
+ if v == "" {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ p := *ptr.toStringPtr()
+ if p == nil {
+ return b, nil
+ }
+ v := *p
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toStringSlice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ }
+ return b, nil
+}
+func appendUTF8StringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ var invalidUTF8 bool
+ v := *ptr.toString()
+ if !utf8.ValidString(v) {
+ invalidUTF8 = true
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ if invalidUTF8 {
+ return b, errInvalidUTF8
+ }
+ return b, nil
+}
+func appendUTF8StringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ var invalidUTF8 bool
+ v := *ptr.toString()
+ if v == "" {
+ return b, nil
+ }
+ if !utf8.ValidString(v) {
+ invalidUTF8 = true
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ if invalidUTF8 {
+ return b, errInvalidUTF8
+ }
+ return b, nil
+}
+func appendUTF8StringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ var invalidUTF8 bool
+ p := *ptr.toStringPtr()
+ if p == nil {
+ return b, nil
+ }
+ v := *p
+ if !utf8.ValidString(v) {
+ invalidUTF8 = true
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ if invalidUTF8 {
+ return b, errInvalidUTF8
+ }
+ return b, nil
+}
+func appendUTF8StringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ var invalidUTF8 bool
+ s := *ptr.toStringSlice()
+ for _, v := range s {
+ if !utf8.ValidString(v) {
+ invalidUTF8 = true
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ }
+ if invalidUTF8 {
+ return b, errInvalidUTF8
+ }
+ return b, nil
+}
+func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBytes()
+ if v == nil {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBytes()
+ if len(v) == 0 {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ v := *ptr.toBytes()
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ return b, nil
+}
+func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {
+ s := *ptr.toBytesSlice()
+ for _, v := range s {
+ b = appendVarint(b, wiretag)
+ b = appendVarint(b, uint64(len(v)))
+ b = append(b, v...)
+ }
+ return b, nil
+}
+
+// makeGroupMarshaler returns the sizer and marshaler for a group.
+// u is the marshal info of the underlying message.
+func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ p := ptr.getPointer()
+ if p.isNil() {
+ return 0
+ }
+ return u.size(p) + 2*tagsize
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ p := ptr.getPointer()
+ if p.isNil() {
+ return b, nil
+ }
+ var err error
+ b = appendVarint(b, wiretag) // start group
+ b, err = u.marshal(b, p, deterministic)
+ b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group
+ return b, err
+ }
+}
+
+// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice.
+// u is the marshal info of the underlying message.
+func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getPointerSlice()
+ n := 0
+ for _, v := range s {
+ if v.isNil() {
+ continue
+ }
+ n += u.size(v) + 2*tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getPointerSlice()
+ var err error
+ var nerr nonFatal
+ for _, v := range s {
+ if v.isNil() {
+ return b, errRepeatedHasNil
+ }
+ b = appendVarint(b, wiretag) // start group
+ b, err = u.marshal(b, v, deterministic)
+ b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group
+ if !nerr.Merge(err) {
+ if err == ErrNil {
+ err = errRepeatedHasNil
+ }
+ return b, err
+ }
+ }
+ return b, nerr.E
+ }
+}
+
+// makeMessageMarshaler returns the sizer and marshaler for a message field.
+// u is the marshal info of the message.
+func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ p := ptr.getPointer()
+ if p.isNil() {
+ return 0
+ }
+ siz := u.size(p)
+ return siz + SizeVarint(uint64(siz)) + tagsize
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ p := ptr.getPointer()
+ if p.isNil() {
+ return b, nil
+ }
+ b = appendVarint(b, wiretag)
+ siz := u.cachedsize(p)
+ b = appendVarint(b, uint64(siz))
+ return u.marshal(b, p, deterministic)
+ }
+}
+
+// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice.
+// u is the marshal info of the message.
+func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) {
+ return func(ptr pointer, tagsize int) int {
+ s := ptr.getPointerSlice()
+ n := 0
+ for _, v := range s {
+ if v.isNil() {
+ continue
+ }
+ siz := u.size(v)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {
+ s := ptr.getPointerSlice()
+ var err error
+ var nerr nonFatal
+ for _, v := range s {
+ if v.isNil() {
+ return b, errRepeatedHasNil
+ }
+ b = appendVarint(b, wiretag)
+ siz := u.cachedsize(v)
+ b = appendVarint(b, uint64(siz))
+ b, err = u.marshal(b, v, deterministic)
+
+ if !nerr.Merge(err) {
+ if err == ErrNil {
+ err = errRepeatedHasNil
+ }
+ return b, err
+ }
+ }
+ return b, nerr.E
+ }
+}
+
+// makeMapMarshaler returns the sizer and marshaler for a map field.
+// f is the pointer to the reflect data structure of the field.
+func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) {
+ // figure out key and value type
+ t := f.Type
+ keyType := t.Key()
+ valType := t.Elem()
+ keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",")
+ valTags := strings.Split(f.Tag.Get("protobuf_val"), ",")
+ keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map
+ valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map
+ keyWireTag := 1<<3 | wiretype(keyTags[0])
+ valWireTag := 2<<3 | wiretype(valTags[0])
+
+ // We create an interface to get the addresses of the map key and value.
+ // If value is pointer-typed, the interface is a direct interface, the
+ // idata itself is the value. Otherwise, the idata is the pointer to the
+ // value.
+ // Key cannot be pointer-typed.
+ valIsPtr := valType.Kind() == reflect.Ptr
+
+ // If value is a message with nested maps, calling
+ // valSizer in marshal may be quadratic. We should use
+ // cached version in marshal (but not in size).
+ // If value is not message type, we don't have size cache,
+ // but it cannot be nested either. Just use valSizer.
+ valCachedSizer := valSizer
+ if valIsPtr && valType.Elem().Kind() == reflect.Struct {
+ u := getMarshalInfo(valType.Elem())
+ valCachedSizer = func(ptr pointer, tagsize int) int {
+ // Same as message sizer, but use cache.
+ p := ptr.getPointer()
+ if p.isNil() {
+ return 0
+ }
+ siz := u.cachedsize(p)
+ return siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ }
+ return func(ptr pointer, tagsize int) int {
+ m := ptr.asPointerTo(t).Elem() // the map
+ n := 0
+ for _, k := range m.MapKeys() {
+ ki := k.Interface()
+ vi := m.MapIndex(k).Interface()
+ kaddr := toAddrPointer(&ki, false) // pointer to key
+ vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value
+ siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
+ n += siz + SizeVarint(uint64(siz)) + tagsize
+ }
+ return n
+ },
+ func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) {
+ m := ptr.asPointerTo(t).Elem() // the map
+ var err error
+ keys := m.MapKeys()
+ if len(keys) > 1 && deterministic {
+ sort.Sort(mapKeys(keys))
+ }
+
+ var nerr nonFatal
+ for _, k := range keys {
+ ki := k.Interface()
+ vi := m.MapIndex(k).Interface()
+ kaddr := toAddrPointer(&ki, false) // pointer to key
+ vaddr := toAddrPointer(&vi, valIsPtr) // pointer to value
+ b = appendVarint(b, tag)
+ siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)
+ b = appendVarint(b, uint64(siz))
+ b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic)
+ if !nerr.Merge(err) {
+ return b, err
+ }
+ b, err = valMarshaler(b, vaddr, valWireTag, deterministic)
+ if err != ErrNil && !nerr.Merge(err) { // allow nil value in map
+ return b, err
+ }
+ }
+ return b, nerr.E
+ }
+}
+
+// makeOneOfMarshaler returns the sizer and marshaler for a oneof field.
+// fi is the marshal info of the field.
+// f is the pointer to the reflect data structure of the field.
+func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) {
+ // Oneof field is an interface. We need to get the actual data type on the fly.
+ t := f.Type
+ return func(ptr pointer, _ int) int {
+ p := ptr.getInterfacePointer()
+ if p.isNil() {
+ return 0
+ }
+ v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct
+ telem := v.Type()
+ e := fi.oneofElems[telem]
+ return e.sizer(p, e.tagsize)
+ },
+ func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) {
+ p := ptr.getInterfacePointer()
+ if p.isNil() {
+ return b, nil
+ }
+ v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct
+ telem := v.Type()
+ if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() {
+ return b, errOneofHasNil
+ }
+ e := fi.oneofElems[telem]
+ return e.marshaler(b, p, e.wiretag, deterministic)
+ }
+}
+
+// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field.
+func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int {
+ m, mu := ext.extensionsRead()
+ if m == nil {
+ return 0
+ }
+ mu.Lock()
+
+ n := 0
+ for _, e := range m {
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ n += len(e.enc)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ n += ei.sizer(p, ei.tagsize)
+ }
+ mu.Unlock()
+ return n
+}
+
+// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b.
+func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {
+ m, mu := ext.extensionsRead()
+ if m == nil {
+ return b, nil
+ }
+ mu.Lock()
+ defer mu.Unlock()
+
+ var err error
+ var nerr nonFatal
+
+ // Fast-path for common cases: zero or one extensions.
+ // Don't bother sorting the keys.
+ if len(m) <= 1 {
+ for _, e := range m {
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ b = append(b, e.enc...)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
+ if !nerr.Merge(err) {
+ return b, err
+ }
+ }
+ return b, nerr.E
+ }
+
+ // Sort the keys to provide a deterministic encoding.
+ // Not sure this is required, but the old code does it.
+ keys := make([]int, 0, len(m))
+ for k := range m {
+ keys = append(keys, int(k))
+ }
+ sort.Ints(keys)
+
+ for _, k := range keys {
+ e := m[int32(k)]
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ b = append(b, e.enc...)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
+ if !nerr.Merge(err) {
+ return b, err
+ }
+ }
+ return b, nerr.E
+}
+
+// message set format is:
+// message MessageSet {
+// repeated group Item = 1 {
+// required int32 type_id = 2;
+// required string message = 3;
+// };
+// }
+
+// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field
+// in message set format (above).
+func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int {
+ m, mu := ext.extensionsRead()
+ if m == nil {
+ return 0
+ }
+ mu.Lock()
+
+ n := 0
+ for id, e := range m {
+ n += 2 // start group, end group. tag = 1 (size=1)
+ n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1)
+
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
+ siz := len(msgWithLen)
+ n += siz + 1 // message, tag = 3 (size=1)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ n += ei.sizer(p, 1) // message, tag = 3 (size=1)
+ }
+ mu.Unlock()
+ return n
+}
+
+// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above)
+// to the end of byte slice b.
+func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {
+ m, mu := ext.extensionsRead()
+ if m == nil {
+ return b, nil
+ }
+ mu.Lock()
+ defer mu.Unlock()
+
+ var err error
+ var nerr nonFatal
+
+ // Fast-path for common cases: zero or one extensions.
+ // Don't bother sorting the keys.
+ if len(m) <= 1 {
+ for id, e := range m {
+ b = append(b, 1<<3|WireStartGroup)
+ b = append(b, 2<<3|WireVarint)
+ b = appendVarint(b, uint64(id))
+
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
+ b = append(b, 3<<3|WireBytes)
+ b = append(b, msgWithLen...)
+ b = append(b, 1<<3|WireEndGroup)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
+ if !nerr.Merge(err) {
+ return b, err
+ }
+ b = append(b, 1<<3|WireEndGroup)
+ }
+ return b, nerr.E
+ }
+
+ // Sort the keys to provide a deterministic encoding.
+ keys := make([]int, 0, len(m))
+ for k := range m {
+ keys = append(keys, int(k))
+ }
+ sort.Ints(keys)
+
+ for _, id := range keys {
+ e := m[int32(id)]
+ b = append(b, 1<<3|WireStartGroup)
+ b = append(b, 2<<3|WireVarint)
+ b = appendVarint(b, uint64(id))
+
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint
+ b = append(b, 3<<3|WireBytes)
+ b = append(b, msgWithLen...)
+ b = append(b, 1<<3|WireEndGroup)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)
+ b = append(b, 1<<3|WireEndGroup)
+ if !nerr.Merge(err) {
+ return b, err
+ }
+ }
+ return b, nerr.E
+}
+
+// sizeV1Extensions computes the size of encoded data for a V1-API extension field.
+func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int {
+ if m == nil {
+ return 0
+ }
+
+ n := 0
+ for _, e := range m {
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ n += len(e.enc)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ n += ei.sizer(p, ei.tagsize)
+ }
+ return n
+}
+
+// appendV1Extensions marshals a V1-API extension field to the end of byte slice b.
+func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) {
+ if m == nil {
+ return b, nil
+ }
+
+ // Sort the keys to provide a deterministic encoding.
+ keys := make([]int, 0, len(m))
+ for k := range m {
+ keys = append(keys, int(k))
+ }
+ sort.Ints(keys)
+
+ var err error
+ var nerr nonFatal
+ for _, k := range keys {
+ e := m[int32(k)]
+ if e.value == nil || e.desc == nil {
+ // Extension is only in its encoded form.
+ b = append(b, e.enc...)
+ continue
+ }
+
+ // We don't skip extensions that have an encoded form set,
+ // because the extension value may have been mutated after
+ // the last time this function was called.
+
+ ei := u.getExtElemInfo(e.desc)
+ v := e.value
+ p := toAddrPointer(&v, ei.isptr)
+ b, err = ei.marshaler(b, p, ei.wiretag, deterministic)
+ if !nerr.Merge(err) {
+ return b, err
+ }
+ }
+ return b, nerr.E
+}
+
+// newMarshaler is the interface representing objects that can marshal themselves.
+//
+// This exists to support protoc-gen-go generated messages.
+// The proto package will stop type-asserting to this interface in the future.
+//
+// DO NOT DEPEND ON THIS.
+type newMarshaler interface {
+ XXX_Size() int
+ XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
+}
+
+// Size returns the encoded size of a protocol buffer message.
+// This is the main entry point.
+func Size(pb Message) int {
+ if m, ok := pb.(newMarshaler); ok {
+ return m.XXX_Size()
+ }
+ if m, ok := pb.(Marshaler); ok {
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ b, _ := m.Marshal()
+ return len(b)
+ }
+ // in case somehow we didn't generate the wrapper
+ if pb == nil {
+ return 0
+ }
+ var info InternalMessageInfo
+ return info.Size(pb)
+}
+
+// Marshal takes a protocol buffer message
+// and encodes it into the wire format, returning the data.
+// This is the main entry point.
+func Marshal(pb Message) ([]byte, error) {
+ if m, ok := pb.(newMarshaler); ok {
+ siz := m.XXX_Size()
+ b := make([]byte, 0, siz)
+ return m.XXX_Marshal(b, false)
+ }
+ if m, ok := pb.(Marshaler); ok {
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ return m.Marshal()
+ }
+ // in case somehow we didn't generate the wrapper
+ if pb == nil {
+ return nil, ErrNil
+ }
+ var info InternalMessageInfo
+ siz := info.Size(pb)
+ b := make([]byte, 0, siz)
+ return info.Marshal(b, pb, false)
+}
+
+// Marshal takes a protocol buffer message
+// and encodes it into the wire format, writing the result to the
+// Buffer.
+// This is an alternative entry point. It is not necessary to use
+// a Buffer for most applications.
+func (p *Buffer) Marshal(pb Message) error {
+ var err error
+ if m, ok := pb.(newMarshaler); ok {
+ siz := m.XXX_Size()
+ p.grow(siz) // make sure buf has enough capacity
+ p.buf, err = m.XXX_Marshal(p.buf, p.deterministic)
+ return err
+ }
+ if m, ok := pb.(Marshaler); ok {
+ // If the message can marshal itself, let it do it, for compatibility.
+ // NOTE: This is not efficient.
+ b, err := m.Marshal()
+ p.buf = append(p.buf, b...)
+ return err
+ }
+ // in case somehow we didn't generate the wrapper
+ if pb == nil {
+ return ErrNil
+ }
+ var info InternalMessageInfo
+ siz := info.Size(pb)
+ p.grow(siz) // make sure buf has enough capacity
+ p.buf, err = info.Marshal(p.buf, pb, p.deterministic)
+ return err
+}
+
+// grow grows the buffer's capacity, if necessary, to guarantee space for
+// another n bytes. After grow(n), at least n bytes can be written to the
+// buffer without another allocation.
+func (p *Buffer) grow(n int) {
+ need := len(p.buf) + n
+ if need <= cap(p.buf) {
+ return
+ }
+ newCap := len(p.buf) * 2
+ if newCap < need {
+ newCap = need
+ }
+ p.buf = append(make([]byte, 0, newCap), p.buf...)
+}
diff --git a/vendor/github.com/golang/protobuf/proto/table_merge.go b/vendor/github.com/golang/protobuf/proto/table_merge.go
new file mode 100644
index 000000000..5525def6a
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/table_merge.go
@@ -0,0 +1,654 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// 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.
+
+package proto
+
+import (
+ "fmt"
+ "reflect"
+ "strings"
+ "sync"
+ "sync/atomic"
+)
+
+// Merge merges the src message into dst.
+// This assumes that dst and src of the same type and are non-nil.
+func (a *InternalMessageInfo) Merge(dst, src Message) {
+ mi := atomicLoadMergeInfo(&a.merge)
+ if mi == nil {
+ mi = getMergeInfo(reflect.TypeOf(dst).Elem())
+ atomicStoreMergeInfo(&a.merge, mi)
+ }
+ mi.merge(toPointer(&dst), toPointer(&src))
+}
+
+type mergeInfo struct {
+ typ reflect.Type
+
+ initialized int32 // 0: only typ is valid, 1: everything is valid
+ lock sync.Mutex
+
+ fields []mergeFieldInfo
+ unrecognized field // Offset of XXX_unrecognized
+}
+
+type mergeFieldInfo struct {
+ field field // Offset of field, guaranteed to be valid
+
+ // isPointer reports whether the value in the field is a pointer.
+ // This is true for the following situations:
+ // * Pointer to struct
+ // * Pointer to basic type (proto2 only)
+ // * Slice (first value in slice header is a pointer)
+ // * String (first value in string header is a pointer)
+ isPointer bool
+
+ // basicWidth reports the width of the field assuming that it is directly
+ // embedded in the struct (as is the case for basic types in proto3).
+ // The possible values are:
+ // 0: invalid
+ // 1: bool
+ // 4: int32, uint32, float32
+ // 8: int64, uint64, float64
+ basicWidth int
+
+ // Where dst and src are pointers to the types being merged.
+ merge func(dst, src pointer)
+}
+
+var (
+ mergeInfoMap = map[reflect.Type]*mergeInfo{}
+ mergeInfoLock sync.Mutex
+)
+
+func getMergeInfo(t reflect.Type) *mergeInfo {
+ mergeInfoLock.Lock()
+ defer mergeInfoLock.Unlock()
+ mi := mergeInfoMap[t]
+ if mi == nil {
+ mi = &mergeInfo{typ: t}
+ mergeInfoMap[t] = mi
+ }
+ return mi
+}
+
+// merge merges src into dst assuming they are both of type *mi.typ.
+func (mi *mergeInfo) merge(dst, src pointer) {
+ if dst.isNil() {
+ panic("proto: nil destination")
+ }
+ if src.isNil() {
+ return // Nothing to do.
+ }
+
+ if atomic.LoadInt32(&mi.initialized) == 0 {
+ mi.computeMergeInfo()
+ }
+
+ for _, fi := range mi.fields {
+ sfp := src.offset(fi.field)
+
+ // As an optimization, we can avoid the merge function call cost
+ // if we know for sure that the source will have no effect
+ // by checking if it is the zero value.
+ if unsafeAllowed {
+ if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string
+ continue
+ }
+ if fi.basicWidth > 0 {
+ switch {
+ case fi.basicWidth == 1 && !*sfp.toBool():
+ continue
+ case fi.basicWidth == 4 && *sfp.toUint32() == 0:
+ continue
+ case fi.basicWidth == 8 && *sfp.toUint64() == 0:
+ continue
+ }
+ }
+ }
+
+ dfp := dst.offset(fi.field)
+ fi.merge(dfp, sfp)
+ }
+
+ // TODO: Make this faster?
+ out := dst.asPointerTo(mi.typ).Elem()
+ in := src.asPointerTo(mi.typ).Elem()
+ if emIn, err := extendable(in.Addr().Interface()); err == nil {
+ emOut, _ := extendable(out.Addr().Interface())
+ mIn, muIn := emIn.extensionsRead()
+ if mIn != nil {
+ mOut := emOut.extensionsWrite()
+ muIn.Lock()
+ mergeExtension(mOut, mIn)
+ muIn.Unlock()
+ }
+ }
+
+ if mi.unrecognized.IsValid() {
+ if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 {
+ *dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...)
+ }
+ }
+}
+
+func (mi *mergeInfo) computeMergeInfo() {
+ mi.lock.Lock()
+ defer mi.lock.Unlock()
+ if mi.initialized != 0 {
+ return
+ }
+ t := mi.typ
+ n := t.NumField()
+
+ props := GetProperties(t)
+ for i := 0; i < n; i++ {
+ f := t.Field(i)
+ if strings.HasPrefix(f.Name, "XXX_") {
+ continue
+ }
+
+ mfi := mergeFieldInfo{field: toField(&f)}
+ tf := f.Type
+
+ // As an optimization, we can avoid the merge function call cost
+ // if we know for sure that the source will have no effect
+ // by checking if it is the zero value.
+ if unsafeAllowed {
+ switch tf.Kind() {
+ case reflect.Ptr, reflect.Slice, reflect.String:
+ // As a special case, we assume slices and strings are pointers
+ // since we know that the first field in the SliceSlice or
+ // StringHeader is a data pointer.
+ mfi.isPointer = true
+ case reflect.Bool:
+ mfi.basicWidth = 1
+ case reflect.Int32, reflect.Uint32, reflect.Float32:
+ mfi.basicWidth = 4
+ case reflect.Int64, reflect.Uint64, reflect.Float64:
+ mfi.basicWidth = 8
+ }
+ }
+
+ // Unwrap tf to get at its most basic type.
+ var isPointer, isSlice bool
+ if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {
+ isSlice = true
+ tf = tf.Elem()
+ }
+ if tf.Kind() == reflect.Ptr {
+ isPointer = true
+ tf = tf.Elem()
+ }
+ if isPointer && isSlice && tf.Kind() != reflect.Struct {
+ panic("both pointer and slice for basic type in " + tf.Name())
+ }
+
+ switch tf.Kind() {
+ case reflect.Int32:
+ switch {
+ case isSlice: // E.g., []int32
+ mfi.merge = func(dst, src pointer) {
+ // NOTE: toInt32Slice is not defined (see pointer_reflect.go).
+ /*
+ sfsp := src.toInt32Slice()
+ if *sfsp != nil {
+ dfsp := dst.toInt32Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []int64{}
+ }
+ }
+ */
+ sfs := src.getInt32Slice()
+ if sfs != nil {
+ dfs := dst.getInt32Slice()
+ dfs = append(dfs, sfs...)
+ if dfs == nil {
+ dfs = []int32{}
+ }
+ dst.setInt32Slice(dfs)
+ }
+ }
+ case isPointer: // E.g., *int32
+ mfi.merge = func(dst, src pointer) {
+ // NOTE: toInt32Ptr is not defined (see pointer_reflect.go).
+ /*
+ sfpp := src.toInt32Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toInt32Ptr()
+ if *dfpp == nil {
+ *dfpp = Int32(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ */
+ sfp := src.getInt32Ptr()
+ if sfp != nil {
+ dfp := dst.getInt32Ptr()
+ if dfp == nil {
+ dst.setInt32Ptr(*sfp)
+ } else {
+ *dfp = *sfp
+ }
+ }
+ }
+ default: // E.g., int32
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toInt32(); v != 0 {
+ *dst.toInt32() = v
+ }
+ }
+ }
+ case reflect.Int64:
+ switch {
+ case isSlice: // E.g., []int64
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toInt64Slice()
+ if *sfsp != nil {
+ dfsp := dst.toInt64Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []int64{}
+ }
+ }
+ }
+ case isPointer: // E.g., *int64
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toInt64Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toInt64Ptr()
+ if *dfpp == nil {
+ *dfpp = Int64(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., int64
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toInt64(); v != 0 {
+ *dst.toInt64() = v
+ }
+ }
+ }
+ case reflect.Uint32:
+ switch {
+ case isSlice: // E.g., []uint32
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toUint32Slice()
+ if *sfsp != nil {
+ dfsp := dst.toUint32Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []uint32{}
+ }
+ }
+ }
+ case isPointer: // E.g., *uint32
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toUint32Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toUint32Ptr()
+ if *dfpp == nil {
+ *dfpp = Uint32(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., uint32
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toUint32(); v != 0 {
+ *dst.toUint32() = v
+ }
+ }
+ }
+ case reflect.Uint64:
+ switch {
+ case isSlice: // E.g., []uint64
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toUint64Slice()
+ if *sfsp != nil {
+ dfsp := dst.toUint64Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []uint64{}
+ }
+ }
+ }
+ case isPointer: // E.g., *uint64
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toUint64Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toUint64Ptr()
+ if *dfpp == nil {
+ *dfpp = Uint64(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., uint64
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toUint64(); v != 0 {
+ *dst.toUint64() = v
+ }
+ }
+ }
+ case reflect.Float32:
+ switch {
+ case isSlice: // E.g., []float32
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toFloat32Slice()
+ if *sfsp != nil {
+ dfsp := dst.toFloat32Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []float32{}
+ }
+ }
+ }
+ case isPointer: // E.g., *float32
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toFloat32Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toFloat32Ptr()
+ if *dfpp == nil {
+ *dfpp = Float32(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., float32
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toFloat32(); v != 0 {
+ *dst.toFloat32() = v
+ }
+ }
+ }
+ case reflect.Float64:
+ switch {
+ case isSlice: // E.g., []float64
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toFloat64Slice()
+ if *sfsp != nil {
+ dfsp := dst.toFloat64Slice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []float64{}
+ }
+ }
+ }
+ case isPointer: // E.g., *float64
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toFloat64Ptr()
+ if *sfpp != nil {
+ dfpp := dst.toFloat64Ptr()
+ if *dfpp == nil {
+ *dfpp = Float64(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., float64
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toFloat64(); v != 0 {
+ *dst.toFloat64() = v
+ }
+ }
+ }
+ case reflect.Bool:
+ switch {
+ case isSlice: // E.g., []bool
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toBoolSlice()
+ if *sfsp != nil {
+ dfsp := dst.toBoolSlice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []bool{}
+ }
+ }
+ }
+ case isPointer: // E.g., *bool
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toBoolPtr()
+ if *sfpp != nil {
+ dfpp := dst.toBoolPtr()
+ if *dfpp == nil {
+ *dfpp = Bool(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., bool
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toBool(); v {
+ *dst.toBool() = v
+ }
+ }
+ }
+ case reflect.String:
+ switch {
+ case isSlice: // E.g., []string
+ mfi.merge = func(dst, src pointer) {
+ sfsp := src.toStringSlice()
+ if *sfsp != nil {
+ dfsp := dst.toStringSlice()
+ *dfsp = append(*dfsp, *sfsp...)
+ if *dfsp == nil {
+ *dfsp = []string{}
+ }
+ }
+ }
+ case isPointer: // E.g., *string
+ mfi.merge = func(dst, src pointer) {
+ sfpp := src.toStringPtr()
+ if *sfpp != nil {
+ dfpp := dst.toStringPtr()
+ if *dfpp == nil {
+ *dfpp = String(**sfpp)
+ } else {
+ **dfpp = **sfpp
+ }
+ }
+ }
+ default: // E.g., string
+ mfi.merge = func(dst, src pointer) {
+ if v := *src.toString(); v != "" {
+ *dst.toString() = v
+ }
+ }
+ }
+ case reflect.Slice:
+ isProto3 := props.Prop[i].proto3
+ switch {
+ case isPointer:
+ panic("bad pointer in byte slice case in " + tf.Name())
+ case tf.Elem().Kind() != reflect.Uint8:
+ panic("bad element kind in byte slice case in " + tf.Name())
+ case isSlice: // E.g., [][]byte
+ mfi.merge = func(dst, src pointer) {
+ sbsp := src.toBytesSlice()
+ if *sbsp != nil {
+ dbsp := dst.toBytesSlice()
+ for _, sb := range *sbsp {
+ if sb == nil {
+ *dbsp = append(*dbsp, nil)
+ } else {
+ *dbsp = append(*dbsp, append([]byte{}, sb...))
+ }
+ }
+ if *dbsp == nil {
+ *dbsp = [][]byte{}
+ }
+ }
+ }
+ default: // E.g., []byte
+ mfi.merge = func(dst, src pointer) {
+ sbp := src.toBytes()
+ if *sbp != nil {
+ dbp := dst.toBytes()
+ if !isProto3 || len(*sbp) > 0 {
+ *dbp = append([]byte{}, *sbp...)
+ }
+ }
+ }
+ }
+ case reflect.Struct:
+ switch {
+ case !isPointer:
+ panic(fmt.Sprintf("message field %s without pointer", tf))
+ case isSlice: // E.g., []*pb.T
+ mi := getMergeInfo(tf)
+ mfi.merge = func(dst, src pointer) {
+ sps := src.getPointerSlice()
+ if sps != nil {
+ dps := dst.getPointerSlice()
+ for _, sp := range sps {
+ var dp pointer
+ if !sp.isNil() {
+ dp = valToPointer(reflect.New(tf))
+ mi.merge(dp, sp)
+ }
+ dps = append(dps, dp)
+ }
+ if dps == nil {
+ dps = []pointer{}
+ }
+ dst.setPointerSlice(dps)
+ }
+ }
+ default: // E.g., *pb.T
+ mi := getMergeInfo(tf)
+ mfi.merge = func(dst, src pointer) {
+ sp := src.getPointer()
+ if !sp.isNil() {
+ dp := dst.getPointer()
+ if dp.isNil() {
+ dp = valToPointer(reflect.New(tf))
+ dst.setPointer(dp)
+ }
+ mi.merge(dp, sp)
+ }
+ }
+ }
+ case reflect.Map:
+ switch {
+ case isPointer || isSlice:
+ panic("bad pointer or slice in map case in " + tf.Name())
+ default: // E.g., map[K]V
+ mfi.merge = func(dst, src pointer) {
+ sm := src.asPointerTo(tf).Elem()
+ if sm.Len() == 0 {
+ return
+ }
+ dm := dst.asPointerTo(tf).Elem()
+ if dm.IsNil() {
+ dm.Set(reflect.MakeMap(tf))
+ }
+
+ switch tf.Elem().Kind() {
+ case reflect.Ptr: // Proto struct (e.g., *T)
+ for _, key := range sm.MapKeys() {
+ val := sm.MapIndex(key)
+ val = reflect.ValueOf(Clone(val.Interface().(Message)))
+ dm.SetMapIndex(key, val)
+ }
+ case reflect.Slice: // E.g. Bytes type (e.g., []byte)
+ for _, key := range sm.MapKeys() {
+ val := sm.MapIndex(key)
+ val = reflect.ValueOf(append([]byte{}, val.Bytes()...))
+ dm.SetMapIndex(key, val)
+ }
+ default: // Basic type (e.g., string)
+ for _, key := range sm.MapKeys() {
+ val := sm.MapIndex(key)
+ dm.SetMapIndex(key, val)
+ }
+ }
+ }
+ }
+ case reflect.Interface:
+ // Must be oneof field.
+ switch {
+ case isPointer || isSlice:
+ panic("bad pointer or slice in interface case in " + tf.Name())
+ default: // E.g., interface{}
+ // TODO: Make this faster?
+ mfi.merge = func(dst, src pointer) {
+ su := src.asPointerTo(tf).Elem()
+ if !su.IsNil() {
+ du := dst.asPointerTo(tf).Elem()
+ typ := su.Elem().Type()
+ if du.IsNil() || du.Elem().Type() != typ {
+ du.Set(reflect.New(typ.Elem())) // Initialize interface if empty
+ }
+ sv := su.Elem().Elem().Field(0)
+ if sv.Kind() == reflect.Ptr && sv.IsNil() {
+ return
+ }
+ dv := du.Elem().Elem().Field(0)
+ if dv.Kind() == reflect.Ptr && dv.IsNil() {
+ dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty
+ }
+ switch sv.Type().Kind() {
+ case reflect.Ptr: // Proto struct (e.g., *T)
+ Merge(dv.Interface().(Message), sv.Interface().(Message))
+ case reflect.Slice: // E.g. Bytes type (e.g., []byte)
+ dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...)))
+ default: // Basic type (e.g., string)
+ dv.Set(sv)
+ }
+ }
+ }
+ }
+ default:
+ panic(fmt.Sprintf("merger not found for type:%s", tf))
+ }
+ mi.fields = append(mi.fields, mfi)
+ }
+
+ mi.unrecognized = invalidField
+ if f, ok := t.FieldByName("XXX_unrecognized"); ok {
+ if f.Type != reflect.TypeOf([]byte{}) {
+ panic("expected XXX_unrecognized to be of type []byte")
+ }
+ mi.unrecognized = toField(&f)
+ }
+
+ atomic.StoreInt32(&mi.initialized, 1)
+}
diff --git a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go
new file mode 100644
index 000000000..ebf1caa56
--- /dev/null
+++ b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go
@@ -0,0 +1,2051 @@
+// Go support for Protocol Buffers - Google's data interchange format
+//
+// Copyright 2016 The Go Authors. All rights reserved.
+// https://github.com/golang/protobuf
+//
+// 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.
+
+package proto
+
+import (
+ "errors"
+ "fmt"
+ "io"
+ "math"
+ "reflect"
+ "strconv"
+ "strings"
+ "sync"
+ "sync/atomic"
+ "unicode/utf8"
+)
+
+// Unmarshal is the entry point from the generated .pb.go files.
+// This function is not intended to be used by non-generated code.
+// This function is not subject to any compatibility guarantee.
+// msg contains a pointer to a protocol buffer struct.
+// b is the data to be unmarshaled into the protocol buffer.
+// a is a pointer to a place to store cached unmarshal information.
+func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error {
+ // Load the unmarshal information for this message type.
+ // The atomic load ensures memory consistency.
+ u := atomicLoadUnmarshalInfo(&a.unmarshal)
+ if u == nil {
+ // Slow path: find unmarshal info for msg, update a with it.
+ u = getUnmarshalInfo(reflect.TypeOf(msg).Elem())
+ atomicStoreUnmarshalInfo(&a.unmarshal, u)
+ }
+ // Then do the unmarshaling.
+ err := u.unmarshal(toPointer(&msg), b)
+ return err
+}
+
+type unmarshalInfo struct {
+ typ reflect.Type // type of the protobuf struct
+
+ // 0 = only typ field is initialized
+ // 1 = completely initialized
+ initialized int32
+ lock sync.Mutex // prevents double initialization
+ dense []unmarshalFieldInfo // fields indexed by tag #
+ sparse map[uint64]unmarshalFieldInfo // fields indexed by tag #
+ reqFields []string // names of required fields
+ reqMask uint64 // 1<<len(reqFields)-1
+ unrecognized field // offset of []byte to put unrecognized data (or invalidField if we should throw it away)
+ extensions field // offset of extensions field (of type proto.XXX_InternalExtensions), or invalidField if it does not exist
+ oldExtensions field // offset of old-form extensions field (of type map[int]Extension)
+ extensionRanges []ExtensionRange // if non-nil, implies extensions field is valid
+ isMessageSet bool // if true, implies extensions field is valid
+}
+
+// An unmarshaler takes a stream of bytes and a pointer to a field of a message.
+// It decodes the field, stores it at f, and returns the unused bytes.
+// w is the wire encoding.
+// b is the data after the tag and wire encoding have been read.
+type unmarshaler func(b []byte, f pointer, w int) ([]byte, error)
+
+type unmarshalFieldInfo struct {
+ // location of the field in the proto message structure.
+ field field
+
+ // function to unmarshal the data for the field.
+ unmarshal unmarshaler
+
+ // if a required field, contains a single set bit at this field's index in the required field list.
+ reqMask uint64
+
+ name string // name of the field, for error reporting
+}
+
+var (
+ unmarshalInfoMap = map[reflect.Type]*unmarshalInfo{}
+ unmarshalInfoLock sync.Mutex
+)
+
+// getUnmarshalInfo returns the data structure which can be
+// subsequently used to unmarshal a message of the given type.
+// t is the type of the message (note: not pointer to message).
+func getUnmarshalInfo(t reflect.Type) *unmarshalInfo {
+ // It would be correct to return a new unmarshalInfo
+ // unconditionally. We would end up allocating one
+ // per occurrence of that type as a message or submessage.
+ // We use a cache here just to reduce memory usage.
+ unmarshalInfoLock.Lock()
+ defer unmarshalInfoLock.Unlock()
+ u := unmarshalInfoMap[t]
+ if u == nil {
+ u = &unmarshalInfo{typ: t}
+ // Note: we just set the type here. The rest of the fields
+ // will be initialized on first use.
+ unmarshalInfoMap[t] = u
+ }
+ return u
+}
+
+// unmarshal does the main work of unmarshaling a message.
+// u provides type information used to unmarshal the message.
+// m is a pointer to a protocol buffer message.
+// b is a byte stream to unmarshal into m.
+// This is top routine used when recursively unmarshaling submessages.
+func (u *unmarshalInfo) unmarshal(m pointer, b []byte) error {
+ if atomic.LoadInt32(&u.initialized) == 0 {
+ u.computeUnmarshalInfo()
+ }
+ if u.isMessageSet {
+ return UnmarshalMessageSet(b, m.offset(u.extensions).toExtensions())
+ }
+ var reqMask uint64 // bitmask of required fields we've seen.
+ var errLater error
+ for len(b) > 0 {
+ // Read tag and wire type.
+ // Special case 1 and 2 byte varints.
+ var x uint64
+ if b[0] < 128 {
+ x = uint64(b[0])
+ b = b[1:]
+ } else if len(b) >= 2 && b[1] < 128 {
+ x = uint64(b[0]&0x7f) + uint64(b[1])<<7
+ b = b[2:]
+ } else {
+ var n int
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ }
+ tag := x >> 3
+ wire := int(x) & 7
+
+ // Dispatch on the tag to one of the unmarshal* functions below.
+ var f unmarshalFieldInfo
+ if tag < uint64(len(u.dense)) {
+ f = u.dense[tag]
+ } else {
+ f = u.sparse[tag]
+ }
+ if fn := f.unmarshal; fn != nil {
+ var err error
+ b, err = fn(b, m.offset(f.field), wire)
+ if err == nil {
+ reqMask |= f.reqMask
+ continue
+ }
+ if r, ok := err.(*RequiredNotSetError); ok {
+ // Remember this error, but keep parsing. We need to produce
+ // a full parse even if a required field is missing.
+ if errLater == nil {
+ errLater = r
+ }
+ reqMask |= f.reqMask
+ continue
+ }
+ if err != errInternalBadWireType {
+ if err == errInvalidUTF8 {
+ if errLater == nil {
+ fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name
+ errLater = &invalidUTF8Error{fullName}
+ }
+ continue
+ }
+ return err
+ }
+ // Fragments with bad wire type are treated as unknown fields.
+ }
+
+ // Unknown tag.
+ if !u.unrecognized.IsValid() {
+ // Don't keep unrecognized data; just skip it.
+ var err error
+ b, err = skipField(b, wire)
+ if err != nil {
+ return err
+ }
+ continue
+ }
+ // Keep unrecognized data around.
+ // maybe in extensions, maybe in the unrecognized field.
+ z := m.offset(u.unrecognized).toBytes()
+ var emap map[int32]Extension
+ var e Extension
+ for _, r := range u.extensionRanges {
+ if uint64(r.Start) <= tag && tag <= uint64(r.End) {
+ if u.extensions.IsValid() {
+ mp := m.offset(u.extensions).toExtensions()
+ emap = mp.extensionsWrite()
+ e = emap[int32(tag)]
+ z = &e.enc
+ break
+ }
+ if u.oldExtensions.IsValid() {
+ p := m.offset(u.oldExtensions).toOldExtensions()
+ emap = *p
+ if emap == nil {
+ emap = map[int32]Extension{}
+ *p = emap
+ }
+ e = emap[int32(tag)]
+ z = &e.enc
+ break
+ }
+ panic("no extensions field available")
+ }
+ }
+
+ // Use wire type to skip data.
+ var err error
+ b0 := b
+ b, err = skipField(b, wire)
+ if err != nil {
+ return err
+ }
+ *z = encodeVarint(*z, tag<<3|uint64(wire))
+ *z = append(*z, b0[:len(b0)-len(b)]...)
+
+ if emap != nil {
+ emap[int32(tag)] = e
+ }
+ }
+ if reqMask != u.reqMask && errLater == nil {
+ // A required field of this message is missing.
+ for _, n := range u.reqFields {
+ if reqMask&1 == 0 {
+ errLater = &RequiredNotSetError{n}
+ }
+ reqMask >>= 1
+ }
+ }
+ return errLater
+}
+
+// computeUnmarshalInfo fills in u with information for use
+// in unmarshaling protocol buffers of type u.typ.
+func (u *unmarshalInfo) computeUnmarshalInfo() {
+ u.lock.Lock()
+ defer u.lock.Unlock()
+ if u.initialized != 0 {
+ return
+ }
+ t := u.typ
+ n := t.NumField()
+
+ // Set up the "not found" value for the unrecognized byte buffer.
+ // This is the default for proto3.
+ u.unrecognized = invalidField
+ u.extensions = invalidField
+ u.oldExtensions = invalidField
+
+ // List of the generated type and offset for each oneof field.
+ type oneofField struct {
+ ityp reflect.Type // interface type of oneof field
+ field field // offset in containing message
+ }
+ var oneofFields []oneofField
+
+ for i := 0; i < n; i++ {
+ f := t.Field(i)
+ if f.Name == "XXX_unrecognized" {
+ // The byte slice used to hold unrecognized input is special.
+ if f.Type != reflect.TypeOf(([]byte)(nil)) {
+ panic("bad type for XXX_unrecognized field: " + f.Type.Name())
+ }
+ u.unrecognized = toField(&f)
+ continue
+ }
+ if f.Name == "XXX_InternalExtensions" {
+ // Ditto here.
+ if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) {
+ panic("bad type for XXX_InternalExtensions field: " + f.Type.Name())
+ }
+ u.extensions = toField(&f)
+ if f.Tag.Get("protobuf_messageset") == "1" {
+ u.isMessageSet = true
+ }
+ continue
+ }
+ if f.Name == "XXX_extensions" {
+ // An older form of the extensions field.
+ if f.Type != reflect.TypeOf((map[int32]Extension)(nil)) {
+ panic("bad type for XXX_extensions field: " + f.Type.Name())
+ }
+ u.oldExtensions = toField(&f)
+ continue
+ }
+ if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" {
+ continue
+ }
+
+ oneof := f.Tag.Get("protobuf_oneof")
+ if oneof != "" {
+ oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)})
+ // The rest of oneof processing happens below.
+ continue
+ }
+
+ tags := f.Tag.Get("protobuf")
+ tagArray := strings.Split(tags, ",")
+ if len(tagArray) < 2 {
+ panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags)
+ }
+ tag, err := strconv.Atoi(tagArray[1])
+ if err != nil {
+ panic("protobuf tag field not an integer: " + tagArray[1])
+ }
+
+ name := ""
+ for _, tag := range tagArray[3:] {
+ if strings.HasPrefix(tag, "name=") {
+ name = tag[5:]
+ }
+ }
+
+ // Extract unmarshaling function from the field (its type and tags).
+ unmarshal := fieldUnmarshaler(&f)
+
+ // Required field?
+ var reqMask uint64
+ if tagArray[2] == "req" {
+ bit := len(u.reqFields)
+ u.reqFields = append(u.reqFields, name)
+ reqMask = uint64(1) << uint(bit)
+ // TODO: if we have more than 64 required fields, we end up
+ // not verifying that all required fields are present.
+ // Fix this, perhaps using a count of required fields?
+ }
+
+ // Store the info in the correct slot in the message.
+ u.setTag(tag, toField(&f), unmarshal, reqMask, name)
+ }
+
+ // Find any types associated with oneof fields.
+ // TODO: XXX_OneofFuncs returns more info than we need. Get rid of some of it?
+ fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("XXX_OneofFuncs")
+ if fn.IsValid() {
+ res := fn.Call(nil)[3] // last return value from XXX_OneofFuncs: []interface{}
+ for i := res.Len() - 1; i >= 0; i-- {
+ v := res.Index(i) // interface{}
+ tptr := reflect.ValueOf(v.Interface()).Type() // *Msg_X
+ typ := tptr.Elem() // Msg_X
+
+ f := typ.Field(0) // oneof implementers have one field
+ baseUnmarshal := fieldUnmarshaler(&f)
+ tags := strings.Split(f.Tag.Get("protobuf"), ",")
+ fieldNum, err := strconv.Atoi(tags[1])
+ if err != nil {
+ panic("protobuf tag field not an integer: " + tags[1])
+ }
+ var name string
+ for _, tag := range tags {
+ if strings.HasPrefix(tag, "name=") {
+ name = strings.TrimPrefix(tag, "name=")
+ break
+ }
+ }
+
+ // Find the oneof field that this struct implements.
+ // Might take O(n^2) to process all of the oneofs, but who cares.
+ for _, of := range oneofFields {
+ if tptr.Implements(of.ityp) {
+ // We have found the corresponding interface for this struct.
+ // That lets us know where this struct should be stored
+ // when we encounter it during unmarshaling.
+ unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal)
+ u.setTag(fieldNum, of.field, unmarshal, 0, name)
+ }
+ }
+ }
+ }
+
+ // Get extension ranges, if any.
+ fn = reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray")
+ if fn.IsValid() {
+ if !u.extensions.IsValid() && !u.oldExtensions.IsValid() {
+ panic("a message with extensions, but no extensions field in " + t.Name())
+ }
+ u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange)
+ }
+
+ // Explicitly disallow tag 0. This will ensure we flag an error
+ // when decoding a buffer of all zeros. Without this code, we
+ // would decode and skip an all-zero buffer of even length.
+ // [0 0] is [tag=0/wiretype=varint varint-encoded-0].
+ u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) {
+ return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w)
+ }, 0, "")
+
+ // Set mask for required field check.
+ u.reqMask = uint64(1)<<uint(len(u.reqFields)) - 1
+
+ atomic.StoreInt32(&u.initialized, 1)
+}
+
+// setTag stores the unmarshal information for the given tag.
+// tag = tag # for field
+// field/unmarshal = unmarshal info for that field.
+// reqMask = if required, bitmask for field position in required field list. 0 otherwise.
+// name = short name of the field.
+func (u *unmarshalInfo) setTag(tag int, field field, unmarshal unmarshaler, reqMask uint64, name string) {
+ i := unmarshalFieldInfo{field: field, unmarshal: unmarshal, reqMask: reqMask, name: name}
+ n := u.typ.NumField()
+ if tag >= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here?
+ for len(u.dense) <= tag {
+ u.dense = append(u.dense, unmarshalFieldInfo{})
+ }
+ u.dense[tag] = i
+ return
+ }
+ if u.sparse == nil {
+ u.sparse = map[uint64]unmarshalFieldInfo{}
+ }
+ u.sparse[uint64(tag)] = i
+}
+
+// fieldUnmarshaler returns an unmarshaler for the given field.
+func fieldUnmarshaler(f *reflect.StructField) unmarshaler {
+ if f.Type.Kind() == reflect.Map {
+ return makeUnmarshalMap(f)
+ }
+ return typeUnmarshaler(f.Type, f.Tag.Get("protobuf"))
+}
+
+// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair.
+func typeUnmarshaler(t reflect.Type, tags string) unmarshaler {
+ tagArray := strings.Split(tags, ",")
+ encoding := tagArray[0]
+ name := "unknown"
+ proto3 := false
+ validateUTF8 := true
+ for _, tag := range tagArray[3:] {
+ if strings.HasPrefix(tag, "name=") {
+ name = tag[5:]
+ }
+ if tag == "proto3" {
+ proto3 = true
+ }
+ }
+ validateUTF8 = validateUTF8 && proto3
+
+ // Figure out packaging (pointer, slice, or both)
+ slice := false
+ pointer := false
+ if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {
+ slice = true
+ t = t.Elem()
+ }
+ if t.Kind() == reflect.Ptr {
+ pointer = true
+ t = t.Elem()
+ }
+
+ // We'll never have both pointer and slice for basic types.
+ if pointer && slice && t.Kind() != reflect.Struct {
+ panic("both pointer and slice for basic type in " + t.Name())
+ }
+
+ switch t.Kind() {
+ case reflect.Bool:
+ if pointer {
+ return unmarshalBoolPtr
+ }
+ if slice {
+ return unmarshalBoolSlice
+ }
+ return unmarshalBoolValue
+ case reflect.Int32:
+ switch encoding {
+ case "fixed32":
+ if pointer {
+ return unmarshalFixedS32Ptr
+ }
+ if slice {
+ return unmarshalFixedS32Slice
+ }
+ return unmarshalFixedS32Value
+ case "varint":
+ // this could be int32 or enum
+ if pointer {
+ return unmarshalInt32Ptr
+ }
+ if slice {
+ return unmarshalInt32Slice
+ }
+ return unmarshalInt32Value
+ case "zigzag32":
+ if pointer {
+ return unmarshalSint32Ptr
+ }
+ if slice {
+ return unmarshalSint32Slice
+ }
+ return unmarshalSint32Value
+ }
+ case reflect.Int64:
+ switch encoding {
+ case "fixed64":
+ if pointer {
+ return unmarshalFixedS64Ptr
+ }
+ if slice {
+ return unmarshalFixedS64Slice
+ }
+ return unmarshalFixedS64Value
+ case "varint":
+ if pointer {
+ return unmarshalInt64Ptr
+ }
+ if slice {
+ return unmarshalInt64Slice
+ }
+ return unmarshalInt64Value
+ case "zigzag64":
+ if pointer {
+ return unmarshalSint64Ptr
+ }
+ if slice {
+ return unmarshalSint64Slice
+ }
+ return unmarshalSint64Value
+ }
+ case reflect.Uint32:
+ switch encoding {
+ case "fixed32":
+ if pointer {
+ return unmarshalFixed32Ptr
+ }
+ if slice {
+ return unmarshalFixed32Slice
+ }
+ return unmarshalFixed32Value
+ case "varint":
+ if pointer {
+ return unmarshalUint32Ptr
+ }
+ if slice {
+ return unmarshalUint32Slice
+ }
+ return unmarshalUint32Value
+ }
+ case reflect.Uint64:
+ switch encoding {
+ case "fixed64":
+ if pointer {
+ return unmarshalFixed64Ptr
+ }
+ if slice {
+ return unmarshalFixed64Slice
+ }
+ return unmarshalFixed64Value
+ case "varint":
+ if pointer {
+ return unmarshalUint64Ptr
+ }
+ if slice {
+ return unmarshalUint64Slice
+ }
+ return unmarshalUint64Value
+ }
+ case reflect.Float32:
+ if pointer {
+ return unmarshalFloat32Ptr
+ }
+ if slice {
+ return unmarshalFloat32Slice
+ }
+ return unmarshalFloat32Value
+ case reflect.Float64:
+ if pointer {
+ return unmarshalFloat64Ptr
+ }
+ if slice {
+ return unmarshalFloat64Slice
+ }
+ return unmarshalFloat64Value
+ case reflect.Map:
+ panic("map type in typeUnmarshaler in " + t.Name())
+ case reflect.Slice:
+ if pointer {
+ panic("bad pointer in slice case in " + t.Name())
+ }
+ if slice {
+ return unmarshalBytesSlice
+ }
+ return unmarshalBytesValue
+ case reflect.String:
+ if validateUTF8 {
+ if pointer {
+ return unmarshalUTF8StringPtr
+ }
+ if slice {
+ return unmarshalUTF8StringSlice
+ }
+ return unmarshalUTF8StringValue
+ }
+ if pointer {
+ return unmarshalStringPtr
+ }
+ if slice {
+ return unmarshalStringSlice
+ }
+ return unmarshalStringValue
+ case reflect.Struct:
+ // message or group field
+ if !pointer {
+ panic(fmt.Sprintf("message/group field %s:%s without pointer", t, encoding))
+ }
+ switch encoding {
+ case "bytes":
+ if slice {
+ return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name)
+ case "group":
+ if slice {
+ return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name)
+ }
+ return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name)
+ }
+ }
+ panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding))
+}
+
+// Below are all the unmarshalers for individual fields of various types.
+
+func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x)
+ *f.toInt64() = v
+ return b, nil
+}
+
+func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x)
+ *f.toInt64Ptr() = &v
+ return b, nil
+}
+
+func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x)
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x)
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ return b, nil
+}
+
+func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x>>1) ^ int64(x)<<63>>63
+ *f.toInt64() = v
+ return b, nil
+}
+
+func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x>>1) ^ int64(x)<<63>>63
+ *f.toInt64Ptr() = &v
+ return b, nil
+}
+
+func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x>>1) ^ int64(x)<<63>>63
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int64(x>>1) ^ int64(x)<<63>>63
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ return b, nil
+}
+
+func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint64(x)
+ *f.toUint64() = v
+ return b, nil
+}
+
+func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint64(x)
+ *f.toUint64Ptr() = &v
+ return b, nil
+}
+
+func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint64(x)
+ s := f.toUint64Slice()
+ *s = append(*s, v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint64(x)
+ s := f.toUint64Slice()
+ *s = append(*s, v)
+ return b, nil
+}
+
+func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x)
+ *f.toInt32() = v
+ return b, nil
+}
+
+func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x)
+ f.setInt32Ptr(v)
+ return b, nil
+}
+
+func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x)
+ f.appendInt32Slice(v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x)
+ f.appendInt32Slice(v)
+ return b, nil
+}
+
+func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x>>1) ^ int32(x)<<31>>31
+ *f.toInt32() = v
+ return b, nil
+}
+
+func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x>>1) ^ int32(x)<<31>>31
+ f.setInt32Ptr(v)
+ return b, nil
+}
+
+func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x>>1) ^ int32(x)<<31>>31
+ f.appendInt32Slice(v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := int32(x>>1) ^ int32(x)<<31>>31
+ f.appendInt32Slice(v)
+ return b, nil
+}
+
+func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint32(x)
+ *f.toUint32() = v
+ return b, nil
+}
+
+func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint32(x)
+ *f.toUint32Ptr() = &v
+ return b, nil
+}
+
+func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint32(x)
+ s := f.toUint32Slice()
+ *s = append(*s, v)
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ v := uint32(x)
+ s := f.toUint32Slice()
+ *s = append(*s, v)
+ return b, nil
+}
+
+func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+ *f.toUint64() = v
+ return b[8:], nil
+}
+
+func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+ *f.toUint64Ptr() = &v
+ return b[8:], nil
+}
+
+func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+ s := f.toUint64Slice()
+ *s = append(*s, v)
+ b = b[8:]
+ }
+ return res, nil
+ }
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+ s := f.toUint64Slice()
+ *s = append(*s, v)
+ return b[8:], nil
+}
+
+func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+ *f.toInt64() = v
+ return b[8:], nil
+}
+
+func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+ *f.toInt64Ptr() = &v
+ return b[8:], nil
+}
+
+func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ b = b[8:]
+ }
+ return res, nil
+ }
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56
+ s := f.toInt64Slice()
+ *s = append(*s, v)
+ return b[8:], nil
+}
+
+func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ *f.toUint32() = v
+ return b[4:], nil
+}
+
+func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ *f.toUint32Ptr() = &v
+ return b[4:], nil
+}
+
+func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ s := f.toUint32Slice()
+ *s = append(*s, v)
+ b = b[4:]
+ }
+ return res, nil
+ }
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+ s := f.toUint32Slice()
+ *s = append(*s, v)
+ return b[4:], nil
+}
+
+func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+ *f.toInt32() = v
+ return b[4:], nil
+}
+
+func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+ f.setInt32Ptr(v)
+ return b[4:], nil
+}
+
+func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+ f.appendInt32Slice(v)
+ b = b[4:]
+ }
+ return res, nil
+ }
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24
+ f.appendInt32Slice(v)
+ return b[4:], nil
+}
+
+func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ // Note: any length varint is allowed, even though any sane
+ // encoder will use one byte.
+ // See https://github.com/golang/protobuf/issues/76
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ // TODO: check if x>1? Tests seem to indicate no.
+ v := x != 0
+ *f.toBool() = v
+ return b[n:], nil
+}
+
+func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := x != 0
+ *f.toBoolPtr() = &v
+ return b[n:], nil
+}
+
+func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ x, n = decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := x != 0
+ s := f.toBoolSlice()
+ *s = append(*s, v)
+ b = b[n:]
+ }
+ return res, nil
+ }
+ if w != WireVarint {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := x != 0
+ s := f.toBoolSlice()
+ *s = append(*s, v)
+ return b[n:], nil
+}
+
+func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
+ *f.toFloat64() = v
+ return b[8:], nil
+}
+
+func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
+ *f.toFloat64Ptr() = &v
+ return b[8:], nil
+}
+
+func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
+ s := f.toFloat64Slice()
+ *s = append(*s, v)
+ b = b[8:]
+ }
+ return res, nil
+ }
+ if w != WireFixed64 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 8 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)
+ s := f.toFloat64Slice()
+ *s = append(*s, v)
+ return b[8:], nil
+}
+
+func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ *f.toFloat32() = v
+ return b[4:], nil
+}
+
+func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ *f.toFloat32Ptr() = &v
+ return b[4:], nil
+}
+
+func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) {
+ if w == WireBytes { // packed
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ res := b[x:]
+ b = b[:x]
+ for len(b) > 0 {
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ s := f.toFloat32Slice()
+ *s = append(*s, v)
+ b = b[4:]
+ }
+ return res, nil
+ }
+ if w != WireFixed32 {
+ return b, errInternalBadWireType
+ }
+ if len(b) < 4 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
+ s := f.toFloat32Slice()
+ *s = append(*s, v)
+ return b[4:], nil
+}
+
+func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ *f.toString() = v
+ return b[x:], nil
+}
+
+func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ *f.toStringPtr() = &v
+ return b[x:], nil
+}
+
+func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ s := f.toStringSlice()
+ *s = append(*s, v)
+ return b[x:], nil
+}
+
+func unmarshalUTF8StringValue(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ *f.toString() = v
+ if !utf8.ValidString(v) {
+ return b[x:], errInvalidUTF8
+ }
+ return b[x:], nil
+}
+
+func unmarshalUTF8StringPtr(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ *f.toStringPtr() = &v
+ if !utf8.ValidString(v) {
+ return b[x:], errInvalidUTF8
+ }
+ return b[x:], nil
+}
+
+func unmarshalUTF8StringSlice(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := string(b[:x])
+ s := f.toStringSlice()
+ *s = append(*s, v)
+ if !utf8.ValidString(v) {
+ return b[x:], errInvalidUTF8
+ }
+ return b[x:], nil
+}
+
+var emptyBuf [0]byte
+
+func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ // The use of append here is a trick which avoids the zeroing
+ // that would be required if we used a make/copy pair.
+ // We append to emptyBuf instead of nil because we want
+ // a non-nil result even when the length is 0.
+ v := append(emptyBuf[:], b[:x]...)
+ *f.toBytes() = v
+ return b[x:], nil
+}
+
+func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := append(emptyBuf[:], b[:x]...)
+ s := f.toBytesSlice()
+ *s = append(*s, v)
+ return b[x:], nil
+}
+
+func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ // First read the message field to see if something is there.
+ // The semantics of multiple submessages are weird. Instead of
+ // the last one winning (as it is for all other fields), multiple
+ // submessages are merged.
+ v := f.getPointer()
+ if v.isNil() {
+ v = valToPointer(reflect.New(sub.typ))
+ f.setPointer(v)
+ }
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ return b[x:], err
+ }
+}
+
+func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireBytes {
+ return b, errInternalBadWireType
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := valToPointer(reflect.New(sub.typ))
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ f.appendPointer(v)
+ return b[x:], err
+ }
+}
+
+func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireStartGroup {
+ return b, errInternalBadWireType
+ }
+ x, y := findEndGroup(b)
+ if x < 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := f.getPointer()
+ if v.isNil() {
+ v = valToPointer(reflect.New(sub.typ))
+ f.setPointer(v)
+ }
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ return b[y:], err
+ }
+}
+
+func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler {
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ if w != WireStartGroup {
+ return b, errInternalBadWireType
+ }
+ x, y := findEndGroup(b)
+ if x < 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ v := valToPointer(reflect.New(sub.typ))
+ err := sub.unmarshal(v, b[:x])
+ if err != nil {
+ if r, ok := err.(*RequiredNotSetError); ok {
+ r.field = name + "." + r.field
+ } else {
+ return nil, err
+ }
+ }
+ f.appendPointer(v)
+ return b[y:], err
+ }
+}
+
+func makeUnmarshalMap(f *reflect.StructField) unmarshaler {
+ t := f.Type
+ kt := t.Key()
+ vt := t.Elem()
+ unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key"))
+ unmarshalVal := typeUnmarshaler(vt, f.Tag.Get("protobuf_val"))
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ // The map entry is a submessage. Figure out how big it is.
+ if w != WireBytes {
+ return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes)
+ }
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ b = b[n:]
+ if x > uint64(len(b)) {
+ return nil, io.ErrUnexpectedEOF
+ }
+ r := b[x:] // unused data to return
+ b = b[:x] // data for map entry
+
+ // Note: we could use #keys * #values ~= 200 functions
+ // to do map decoding without reflection. Probably not worth it.
+ // Maps will be somewhat slow. Oh well.
+
+ // Read key and value from data.
+ var nerr nonFatal
+ k := reflect.New(kt)
+ v := reflect.New(vt)
+ for len(b) > 0 {
+ x, n := decodeVarint(b)
+ if n == 0 {
+ return nil, io.ErrUnexpectedEOF
+ }
+ wire := int(x) & 7
+ b = b[n:]
+
+ var err error
+ switch x >> 3 {
+ case 1:
+ b, err = unmarshalKey(b, valToPointer(k), wire)
+ case 2:
+ b, err = unmarshalVal(b, valToPointer(v), wire)
+ default:
+ err = errInternalBadWireType // skip unknown tag
+ }
+
+ if nerr.Merge(err) {
+ continue
+ }
+ if err != errInternalBadWireType {
+ return nil, err
+ }
+
+ // Skip past unknown fields.
+ b, err = skipField(b, wire)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ // Get map, allocate if needed.
+ m := f.asPointerTo(t).Elem() // an addressable map[K]T
+ if m.IsNil() {
+ m.Set(reflect.MakeMap(t))
+ }
+
+ // Insert into map.
+ m.SetMapIndex(k.Elem(), v.Elem())
+
+ return r, nerr.E
+ }
+}
+
+// makeUnmarshalOneof makes an unmarshaler for oneof fields.
+// for:
+// message Msg {
+// oneof F {
+// int64 X = 1;
+// float64 Y = 2;
+// }
+// }
+// typ is the type of the concrete entry for a oneof case (e.g. Msg_X).
+// ityp is the interface type of the oneof field (e.g. isMsg_F).
+// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64).
+// Note that this function will be called once for each case in the oneof.
+func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler {
+ sf := typ.Field(0)
+ field0 := toField(&sf)
+ return func(b []byte, f pointer, w int) ([]byte, error) {
+ // Allocate holder for value.
+ v := reflect.New(typ)
+
+ // Unmarshal data into holder.
+ // We unmarshal into the first field of the holder object.
+ var err error
+ var nerr nonFatal
+ b, err = unmarshal(b, valToPointer(v).offset(field0), w)
+ if !nerr.Merge(err) {
+ return nil, err
+ }
+
+ // Write pointer to holder into target field.
+ f.asPointerTo(ityp).Elem().Set(v)
+
+ return b, nerr.E
+ }
+}
+
+// Error used by decode internally.
+var errInternalBadWireType = errors.New("proto: internal error: bad wiretype")
+
+// skipField skips past a field of type wire and returns the remaining bytes.
+func skipField(b []byte, wire int) ([]byte, error) {
+ switch wire {
+ case WireVarint:
+ _, k := decodeVarint(b)
+ if k == 0 {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[k:]
+ case WireFixed32:
+ if len(b) < 4 {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[4:]
+ case WireFixed64:
+ if len(b) < 8 {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[8:]
+ case WireBytes:
+ m, k := decodeVarint(b)
+ if k == 0 || uint64(len(b)-k) < m {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[uint64(k)+m:]
+ case WireStartGroup:
+ _, i := findEndGroup(b)
+ if i == -1 {
+ return b, io.ErrUnexpectedEOF
+ }
+ b = b[i:]
+ default:
+ return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire)
+ }
+ return b, nil
+}
+
+// findEndGroup finds the index of the next EndGroup tag.
+// Groups may be nested, so the "next" EndGroup tag is the first
+// unpaired EndGroup.
+// findEndGroup returns the indexes of the start and end of the EndGroup tag.
+// Returns (-1,-1) if it can't find one.
+func findEndGroup(b []byte) (int, int) {
+ depth := 1
+ i := 0
+ for {
+ x, n := decodeVarint(b[i:])
+ if n == 0 {
+ return -1, -1
+ }
+ j := i
+ i += n
+ switch x & 7 {
+ case WireVarint:
+ _, k := decodeVarint(b[i:])
+ if k == 0 {
+ return -1, -1
+ }
+ i += k
+ case WireFixed32:
+ if len(b)-4 < i {
+ return -1, -1
+ }
+ i += 4
+ case WireFixed64:
+ if len(b)-8 < i {
+ return -1, -1
+ }
+ i += 8
+ case WireBytes:
+ m, k := decodeVarint(b[i:])
+ if k == 0 {
+ return -1, -1
+ }
+ i += k
+ if uint64(len(b)-i) < m {
+ return -1, -1
+ }
+ i += int(m)
+ case WireStartGroup:
+ depth++
+ case WireEndGroup:
+ depth--
+ if depth == 0 {
+ return j, i
+ }
+ default:
+ return -1, -1
+ }
+ }
+}
+
+// encodeVarint appends a varint-encoded integer to b and returns the result.
+func encodeVarint(b []byte, x uint64) []byte {
+ for x >= 1<<7 {
+ b = append(b, byte(x&0x7f|0x80))
+ x >>= 7
+ }
+ return append(b, byte(x))
+}
+
+// decodeVarint reads a varint-encoded integer from b.
+// Returns the decoded integer and the number of bytes read.
+// If there is an error, it returns 0,0.
+func decodeVarint(b []byte) (uint64, int) {
+ var x, y uint64
+ if len(b) <= 0 {
+ goto bad
+ }
+ x = uint64(b[0])
+ if x < 0x80 {
+ return x, 1
+ }
+ x -= 0x80
+
+ if len(b) <= 1 {
+ goto bad
+ }
+ y = uint64(b[1])
+ x += y << 7
+ if y < 0x80 {
+ return x, 2
+ }
+ x -= 0x80 << 7
+
+ if len(b) <= 2 {
+ goto bad
+ }
+ y = uint64(b[2])
+ x += y << 14
+ if y < 0x80 {
+ return x, 3
+ }
+ x -= 0x80 << 14
+
+ if len(b) <= 3 {
+ goto bad
+ }
+ y = uint64(b[3])
+ x += y << 21
+ if y < 0x80 {
+ return x, 4
+ }
+ x -= 0x80 << 21
+
+ if len(b) <= 4 {
+ goto bad
+ }
+ y = uint64(b[4])
+ x += y << 28
+ if y < 0x80 {
+ return x, 5
+ }
+ x -= 0x80 << 28
+
+ if len(b) <= 5 {
+ goto bad
+ }
+ y = uint64(b[5])
+ x += y << 35
+ if y < 0x80 {
+ return x, 6
+ }
+ x -= 0x80 << 35
+
+ if len(b) <= 6 {
+ goto bad
+ }
+ y = uint64(b[6])
+ x += y << 42
+ if y < 0x80 {
+ return x, 7
+ }
+ x -= 0x80 << 42
+
+ if len(b) <= 7 {
+ goto bad
+ }
+ y = uint64(b[7])
+ x += y << 49
+ if y < 0x80 {
+ return x, 8
+ }
+ x -= 0x80 << 49
+
+ if len(b) <= 8 {
+ goto bad
+ }
+ y = uint64(b[8])
+ x += y << 56
+ if y < 0x80 {
+ return x, 9
+ }
+ x -= 0x80 << 56
+
+ if len(b) <= 9 {
+ goto bad
+ }
+ y = uint64(b[9])
+ x += y << 63
+ if y < 2 {
+ return x, 10
+ }
+
+bad:
+ return 0, 0
+}
diff --git a/vendor/github.com/golang/protobuf/proto/text.go b/vendor/github.com/golang/protobuf/proto/text.go
index 965876bf0..1aaee725b 100644
--- a/vendor/github.com/golang/protobuf/proto/text.go
+++ b/vendor/github.com/golang/protobuf/proto/text.go
@@ -50,7 +50,6 @@ import (
var (
newline = []byte("\n")
spaces = []byte(" ")
- gtNewline = []byte(">\n")
endBraceNewline = []byte("}\n")
backslashN = []byte{'\\', 'n'}
backslashR = []byte{'\\', 'r'}
@@ -170,11 +169,6 @@ func writeName(w *textWriter, props *Properties) error {
return nil
}
-// raw is the interface satisfied by RawMessage.
-type raw interface {
- Bytes() []byte
-}
-
func requiresQuotes(u string) bool {
// When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted.
for _, ch := range u {
@@ -269,6 +263,10 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
props := sprops.Prop[i]
name := st.Field(i).Name
+ if name == "XXX_NoUnkeyedLiteral" {
+ continue
+ }
+
if strings.HasPrefix(name, "XXX_") {
// There are two XXX_ fields:
// XXX_unrecognized []byte
@@ -355,7 +353,7 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
return err
}
}
- if err := tm.writeAny(w, key, props.mkeyprop); err != nil {
+ if err := tm.writeAny(w, key, props.MapKeyProp); err != nil {
return err
}
if err := w.WriteByte('\n'); err != nil {
@@ -372,7 +370,7 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
return err
}
}
- if err := tm.writeAny(w, val, props.mvalprop); err != nil {
+ if err := tm.writeAny(w, val, props.MapValProp); err != nil {
return err
}
if err := w.WriteByte('\n'); err != nil {
@@ -436,12 +434,6 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
return err
}
}
- if b, ok := fv.Interface().(raw); ok {
- if err := writeRaw(w, b.Bytes()); err != nil {
- return err
- }
- continue
- }
// Enums have a String method, so writeAny will work fine.
if err := tm.writeAny(w, fv, props); err != nil {
@@ -455,7 +447,7 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
// Extensions (the XXX_extensions field).
pv := sv.Addr()
- if _, ok := extendable(pv.Interface()); ok {
+ if _, err := extendable(pv.Interface()); err == nil {
if err := tm.writeExtensions(w, pv); err != nil {
return err
}
@@ -464,27 +456,6 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {
return nil
}
-// writeRaw writes an uninterpreted raw message.
-func writeRaw(w *textWriter, b []byte) error {
- if err := w.WriteByte('<'); err != nil {
- return err
- }
- if !w.compact {
- if err := w.WriteByte('\n'); err != nil {
- return err
- }
- }
- w.indent()
- if err := writeUnknownStruct(w, b); err != nil {
- return err
- }
- w.unindent()
- if err := w.WriteByte('>'); err != nil {
- return err
- }
- return nil
-}
-
// writeAny writes an arbitrary field.
func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error {
v = reflect.Indirect(v)
@@ -535,6 +506,19 @@ func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Propert
}
}
w.indent()
+ if v.CanAddr() {
+ // Calling v.Interface on a struct causes the reflect package to
+ // copy the entire struct. This is racy with the new Marshaler
+ // since we atomically update the XXX_sizecache.
+ //
+ // Thus, we retrieve a pointer to the struct if possible to avoid
+ // a race since v.Interface on the pointer doesn't copy the struct.
+ //
+ // If v is not addressable, then we are not worried about a race
+ // since it implies that the binary Marshaler cannot possibly be
+ // mutating this value.
+ v = v.Addr()
+ }
if etm, ok := v.Interface().(encoding.TextMarshaler); ok {
text, err := etm.MarshalText()
if err != nil {
@@ -543,8 +527,13 @@ func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Propert
if _, err = w.Write(text); err != nil {
return err
}
- } else if err := tm.writeStruct(w, v); err != nil {
- return err
+ } else {
+ if v.Kind() == reflect.Ptr {
+ v = v.Elem()
+ }
+ if err := tm.writeStruct(w, v); err != nil {
+ return err
+ }
}
w.unindent()
if err := w.WriteByte(ket); err != nil {
diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go
index 61f83c1e1..bb55a3af2 100644
--- a/vendor/github.com/golang/protobuf/proto/text_parser.go
+++ b/vendor/github.com/golang/protobuf/proto/text_parser.go
@@ -206,7 +206,6 @@ func (p *textParser) advance() {
var (
errBadUTF8 = errors.New("proto: bad UTF-8")
- errBadHex = errors.New("proto: bad hexadecimal")
)
func unquoteC(s string, quote rune) (string, error) {
@@ -277,60 +276,47 @@ func unescape(s string) (ch string, tail string, err error) {
return "?", s, nil // trigraph workaround
case '\'', '"', '\\':
return string(r), s, nil
- case '0', '1', '2', '3', '4', '5', '6', '7', 'x', 'X':
+ case '0', '1', '2', '3', '4', '5', '6', '7':
if len(s) < 2 {
return "", "", fmt.Errorf(`\%c requires 2 following digits`, r)
}
- base := 8
- ss := s[:2]
+ ss := string(r) + s[:2]
s = s[2:]
- if r == 'x' || r == 'X' {
- base = 16
- } else {
- ss = string(r) + ss
- }
- i, err := strconv.ParseUint(ss, base, 8)
+ i, err := strconv.ParseUint(ss, 8, 8)
if err != nil {
- return "", "", err
+ return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss)
}
return string([]byte{byte(i)}), s, nil
- case 'u', 'U':
- n := 4
- if r == 'U' {
+ case 'x', 'X', 'u', 'U':
+ var n int
+ switch r {
+ case 'x', 'X':
+ n = 2
+ case 'u':
+ n = 4
+ case 'U':
n = 8
}
if len(s) < n {
- return "", "", fmt.Errorf(`\%c requires %d digits`, r, n)
- }
-
- bs := make([]byte, n/2)
- for i := 0; i < n; i += 2 {
- a, ok1 := unhex(s[i])
- b, ok2 := unhex(s[i+1])
- if !ok1 || !ok2 {
- return "", "", errBadHex
- }
- bs[i/2] = a<<4 | b
+ return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n)
}
+ ss := s[:n]
s = s[n:]
- return string(bs), s, nil
+ i, err := strconv.ParseUint(ss, 16, 64)
+ if err != nil {
+ return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss)
+ }
+ if r == 'x' || r == 'X' {
+ return string([]byte{byte(i)}), s, nil
+ }
+ if i > utf8.MaxRune {
+ return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss)
+ }
+ return string(i), s, nil
}
return "", "", fmt.Errorf(`unknown escape \%c`, r)
}
-// Adapted from src/pkg/strconv/quote.go.
-func unhex(b byte) (v byte, ok bool) {
- switch {
- case '0' <= b && b <= '9':
- return b - '0', true
- case 'a' <= b && b <= 'f':
- return b - 'a' + 10, true
- case 'A' <= b && b <= 'F':
- return b - 'A' + 10, true
- }
- return 0, false
-}
-
// Back off the parser by one token. Can only be done between calls to next().
// It makes the next advance() a no-op.
func (p *textParser) back() { p.backed = true }
@@ -644,17 +630,17 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error {
if err := p.consumeToken(":"); err != nil {
return err
}
- if err := p.readAny(key, props.mkeyprop); err != nil {
+ if err := p.readAny(key, props.MapKeyProp); err != nil {
return err
}
if err := p.consumeOptionalSeparator(); err != nil {
return err
}
case "value":
- if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil {
+ if err := p.checkForColon(props.MapValProp, dst.Type().Elem()); err != nil {
return err
}
- if err := p.readAny(val, props.mvalprop); err != nil {
+ if err := p.readAny(val, props.MapValProp); err != nil {
return err
}
if err := p.consumeOptionalSeparator(); err != nil {
@@ -728,6 +714,9 @@ func (p *textParser) consumeExtName() (string, error) {
if tok.err != nil {
return "", p.errorf("unrecognized type_url or extension name: %s", tok.err)
}
+ if p.done && tok.value != "]" {
+ return "", p.errorf("unclosed type_url or extension name")
+ }
}
return strings.Join(parts, ""), nil
}
@@ -883,13 +872,9 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error {
// UnmarshalText returns *RequiredNotSetError.
func UnmarshalText(s string, pb Message) error {
if um, ok := pb.(encoding.TextUnmarshaler); ok {
- err := um.UnmarshalText([]byte(s))
- return err
+ return um.UnmarshalText([]byte(s))
}
pb.Reset()
v := reflect.ValueOf(pb)
- if pe := newTextParser(s).readStruct(v.Elem(), ""); pe != nil {
- return pe
- }
- return nil
+ return newTextParser(s).readStruct(v.Elem(), "")
}
diff --git a/vendor/github.com/google/gofuzz/fuzz.go b/vendor/github.com/google/gofuzz/fuzz.go
index 4f888fbc8..1dfa80a6f 100644
--- a/vendor/github.com/google/gofuzz/fuzz.go
+++ b/vendor/github.com/google/gofuzz/fuzz.go
@@ -34,21 +34,27 @@ type Fuzzer struct {
nilChance float64
minElements int
maxElements int
+ maxDepth int
}
// New returns a new Fuzzer. Customize your Fuzzer further by calling Funcs,
// RandSource, NilChance, or NumElements in any order.
func New() *Fuzzer {
+ return NewWithSeed(time.Now().UnixNano())
+}
+
+func NewWithSeed(seed int64) *Fuzzer {
f := &Fuzzer{
defaultFuzzFuncs: fuzzFuncMap{
reflect.TypeOf(&time.Time{}): reflect.ValueOf(fuzzTime),
},
fuzzFuncs: fuzzFuncMap{},
- r: rand.New(rand.NewSource(time.Now().UnixNano())),
+ r: rand.New(rand.NewSource(seed)),
nilChance: .2,
minElements: 1,
maxElements: 10,
+ maxDepth: 100,
}
return f
}
@@ -136,6 +142,14 @@ func (f *Fuzzer) genShouldFill() bool {
return f.r.Float64() > f.nilChance
}
+// MaxDepth sets the maximum number of recursive fuzz calls that will be made
+// before stopping. This includes struct members, pointers, and map and slice
+// elements.
+func (f *Fuzzer) MaxDepth(d int) *Fuzzer {
+ f.maxDepth = d
+ return f
+}
+
// Fuzz recursively fills all of obj's fields with something random. First
// this tries to find a custom fuzz function (see Funcs). If there is no
// custom function this tests whether the object implements fuzz.Interface and,
@@ -144,17 +158,19 @@ func (f *Fuzzer) genShouldFill() bool {
// fails, this will generate random values for all primitive fields and then
// recurse for all non-primitives.
//
-// Not safe for cyclic or tree-like structs!
+// This is safe for cyclic or tree-like structs, up to a limit. Use the
+// MaxDepth method to adjust how deep you need it to recurse.
//
-// obj must be a pointer. Only exported (public) fields can be set (thanks, golang :/ )
-// Intended for tests, so will panic on bad input or unimplemented fields.
+// obj must be a pointer. Only exported (public) fields can be set (thanks,
+// golang :/ ) Intended for tests, so will panic on bad input or unimplemented
+// fields.
func (f *Fuzzer) Fuzz(obj interface{}) {
v := reflect.ValueOf(obj)
if v.Kind() != reflect.Ptr {
panic("needed ptr!")
}
v = v.Elem()
- f.doFuzz(v, 0)
+ f.fuzzWithContext(v, 0)
}
// FuzzNoCustom is just like Fuzz, except that any custom fuzz function for
@@ -170,7 +186,7 @@ func (f *Fuzzer) FuzzNoCustom(obj interface{}) {
panic("needed ptr!")
}
v = v.Elem()
- f.doFuzz(v, flagNoCustomFuzz)
+ f.fuzzWithContext(v, flagNoCustomFuzz)
}
const (
@@ -178,69 +194,87 @@ const (
flagNoCustomFuzz uint64 = 1 << iota
)
-func (f *Fuzzer) doFuzz(v reflect.Value, flags uint64) {
+func (f *Fuzzer) fuzzWithContext(v reflect.Value, flags uint64) {
+ fc := &fuzzerContext{fuzzer: f}
+ fc.doFuzz(v, flags)
+}
+
+// fuzzerContext carries context about a single fuzzing run, which lets Fuzzer
+// be thread-safe.
+type fuzzerContext struct {
+ fuzzer *Fuzzer
+ curDepth int
+}
+
+func (fc *fuzzerContext) doFuzz(v reflect.Value, flags uint64) {
+ if fc.curDepth >= fc.fuzzer.maxDepth {
+ return
+ }
+ fc.curDepth++
+ defer func() { fc.curDepth-- }()
+
if !v.CanSet() {
return
}
if flags&flagNoCustomFuzz == 0 {
// Check for both pointer and non-pointer custom functions.
- if v.CanAddr() && f.tryCustom(v.Addr()) {
+ if v.CanAddr() && fc.tryCustom(v.Addr()) {
return
}
- if f.tryCustom(v) {
+ if fc.tryCustom(v) {
return
}
}
if fn, ok := fillFuncMap[v.Kind()]; ok {
- fn(v, f.r)
+ fn(v, fc.fuzzer.r)
return
}
switch v.Kind() {
case reflect.Map:
- if f.genShouldFill() {
+ if fc.fuzzer.genShouldFill() {
v.Set(reflect.MakeMap(v.Type()))
- n := f.genElementCount()
+ n := fc.fuzzer.genElementCount()
for i := 0; i < n; i++ {
key := reflect.New(v.Type().Key()).Elem()
- f.doFuzz(key, 0)
+ fc.doFuzz(key, 0)
val := reflect.New(v.Type().Elem()).Elem()
- f.doFuzz(val, 0)
+ fc.doFuzz(val, 0)
v.SetMapIndex(key, val)
}
return
}
v.Set(reflect.Zero(v.Type()))
case reflect.Ptr:
- if f.genShouldFill() {
+ if fc.fuzzer.genShouldFill() {
v.Set(reflect.New(v.Type().Elem()))
- f.doFuzz(v.Elem(), 0)
+ fc.doFuzz(v.Elem(), 0)
return
}
v.Set(reflect.Zero(v.Type()))
case reflect.Slice:
- if f.genShouldFill() {
- n := f.genElementCount()
+ if fc.fuzzer.genShouldFill() {
+ n := fc.fuzzer.genElementCount()
v.Set(reflect.MakeSlice(v.Type(), n, n))
for i := 0; i < n; i++ {
- f.doFuzz(v.Index(i), 0)
+ fc.doFuzz(v.Index(i), 0)
}
return
}
v.Set(reflect.Zero(v.Type()))
case reflect.Array:
- if f.genShouldFill() {
+ if fc.fuzzer.genShouldFill() {
n := v.Len()
for i := 0; i < n; i++ {
- f.doFuzz(v.Index(i), 0)
+ fc.doFuzz(v.Index(i), 0)
}
return
}
v.Set(reflect.Zero(v.Type()))
case reflect.Struct:
for i := 0; i < v.NumField(); i++ {
- f.doFuzz(v.Field(i), 0)
+ fc.doFuzz(v.Field(i), 0)
}
case reflect.Chan:
fallthrough
@@ -255,20 +289,20 @@ func (f *Fuzzer) doFuzz(v reflect.Value, flags uint64) {
// tryCustom searches for custom handlers, and returns true iff it finds a match
// and successfully randomizes v.
-func (f *Fuzzer) tryCustom(v reflect.Value) bool {
+func (fc *fuzzerContext) tryCustom(v reflect.Value) bool {
// First: see if we have a fuzz function for it.
- doCustom, ok := f.fuzzFuncs[v.Type()]
+ doCustom, ok := fc.fuzzer.fuzzFuncs[v.Type()]
if !ok {
// Second: see if it can fuzz itself.
if v.CanInterface() {
intf := v.Interface()
if fuzzable, ok := intf.(Interface); ok {
- fuzzable.Fuzz(Continue{f: f, Rand: f.r})
+ fuzzable.Fuzz(Continue{fc: fc, Rand: fc.fuzzer.r})
return true
}
}
// Finally: see if there is a default fuzz function.
- doCustom, ok = f.defaultFuzzFuncs[v.Type()]
+ doCustom, ok = fc.fuzzer.defaultFuzzFuncs[v.Type()]
if !ok {
return false
}
@@ -294,8 +328,8 @@ func (f *Fuzzer) tryCustom(v reflect.Value) bool {
}
doCustom.Call([]reflect.Value{v, reflect.ValueOf(Continue{
- f: f,
- Rand: f.r,
+ fc: fc,
+ Rand: fc.fuzzer.r,
})})
return true
}
@@ -310,7 +344,7 @@ type Interface interface {
// Continue can be passed to custom fuzzing functions to allow them to use
// the correct source of randomness and to continue fuzzing their members.
type Continue struct {
- f *Fuzzer
+ fc *fuzzerContext
// For convenience, Continue implements rand.Rand via embedding.
// Use this for generating any randomness if you want your fuzzing
@@ -325,7 +359,7 @@ func (c Continue) Fuzz(obj interface{}) {
panic("needed ptr!")
}
v = v.Elem()
- c.f.doFuzz(v, 0)
+ c.fc.doFuzz(v, 0)
}
// FuzzNoCustom continues fuzzing obj, except that any custom fuzz function for
@@ -338,7 +372,7 @@ func (c Continue) FuzzNoCustom(obj interface{}) {
panic("needed ptr!")
}
v = v.Elem()
- c.f.doFuzz(v, flagNoCustomFuzz)
+ c.fc.doFuzz(v, flagNoCustomFuzz)
}
// RandString makes a random string up to 20 characters long. The returned string
diff --git a/vendor/github.com/gorilla/context/README.md b/vendor/github.com/gorilla/context/README.md
index c60a31b05..08f86693b 100644
--- a/vendor/github.com/gorilla/context/README.md
+++ b/vendor/github.com/gorilla/context/README.md
@@ -4,4 +4,7 @@ context
gorilla/context is a general purpose registry for global request variables.
+> Note: gorilla/context, having been born well before `context.Context` existed, does not play well
+> with the shallow copying of the request that [`http.Request.WithContext`](https://golang.org/pkg/net/http/#Request.WithContext) (added to net/http Go 1.7 onwards) performs. You should either use *just* gorilla/context, or moving forward, the new `http.Request.Context()`.
+
Read the full documentation here: http://www.gorillatoolkit.org/pkg/context
diff --git a/vendor/github.com/gorilla/context/doc.go b/vendor/github.com/gorilla/context/doc.go
index 73c740031..448d1bfca 100644
--- a/vendor/github.com/gorilla/context/doc.go
+++ b/vendor/github.com/gorilla/context/doc.go
@@ -5,6 +5,12 @@
/*
Package context stores values shared during a request lifetime.
+Note: gorilla/context, having been born well before `context.Context` existed,
+does not play well > with the shallow copying of the request that
+[`http.Request.WithContext`](https://golang.org/pkg/net/http/#Request.WithContext)
+(added to net/http Go 1.7 onwards) performs. You should either use *just*
+gorilla/context, or moving forward, the new `http.Request.Context()`.
+
For example, a router can set variables extracted from the URL and later
application handlers can access those values, or it can be used to store
sessions values to be saved at the end of a request. There are several
diff --git a/vendor/github.com/gorilla/mux/README.md b/vendor/github.com/gorilla/mux/README.md
index 94d396ca4..e424397ac 100644
--- a/vendor/github.com/gorilla/mux/README.md
+++ b/vendor/github.com/gorilla/mux/README.md
@@ -1,7 +1,8 @@
-gorilla/mux
-===
+# gorilla/mux
+
[![GoDoc](https://godoc.org/github.com/gorilla/mux?status.svg)](https://godoc.org/github.com/gorilla/mux)
[![Build Status](https://travis-ci.org/gorilla/mux.svg?branch=master)](https://travis-ci.org/gorilla/mux)
+[![Sourcegraph](https://sourcegraph.com/github.com/gorilla/mux/-/badge.svg)](https://sourcegraph.com/github.com/gorilla/mux?badge)
![Gorilla Logo](http://www.gorillatoolkit.org/static/images/gorilla-icon-64.png)
@@ -14,7 +15,7 @@ The name mux stands for "HTTP request multiplexer". Like the standard `http.Serv
* It implements the `http.Handler` interface so it is compatible with the standard `http.ServeMux`.
* Requests can be matched based on URL host, path, path prefix, schemes, header and query values, HTTP methods or using custom matchers.
-* URL hosts and paths can have variables with an optional regular expression.
+* URL hosts, paths and query values can have variables with an optional regular expression.
* Registered URLs can be built, or "reversed", which helps maintaining references to resources.
* Routes can be used as subrouters: nested routes are only tested if the parent route matches. This is useful to define groups of routes that share common conditions like a host, a path prefix or other repeated attributes. As a bonus, this optimizes request matching.
@@ -23,9 +24,12 @@ The name mux stands for "HTTP request multiplexer". Like the standard `http.Serv
* [Install](#install)
* [Examples](#examples)
* [Matching Routes](#matching-routes)
-* [Listing Routes](#listing-routes)
* [Static Files](#static-files)
* [Registered URLs](#registered-urls)
+* [Walking Routes](#walking-routes)
+* [Graceful Shutdown](#graceful-shutdown)
+* [Middleware](#middleware)
+* [Testing Handlers](#testing-handlers)
* [Full Example](#full-example)
---
@@ -44,11 +48,11 @@ Let's start registering a couple of URL paths and handlers:
```go
func main() {
- r := mux.NewRouter()
- r.HandleFunc("/", HomeHandler)
- r.HandleFunc("/products", ProductsHandler)
- r.HandleFunc("/articles", ArticlesHandler)
- http.Handle("/", r)
+ r := mux.NewRouter()
+ r.HandleFunc("/", HomeHandler)
+ r.HandleFunc("/products", ProductsHandler)
+ r.HandleFunc("/articles", ArticlesHandler)
+ http.Handle("/", r)
}
```
@@ -67,9 +71,9 @@ The names are used to create a map of route variables which can be retrieved cal
```go
func ArticlesCategoryHandler(w http.ResponseWriter, r *http.Request) {
- vars := mux.Vars(r)
- w.WriteHeader(http.StatusOK)
- fmt.Fprintf(w, "Category: %v\n", vars["category"])
+ vars := mux.Vars(r)
+ w.WriteHeader(http.StatusOK)
+ fmt.Fprintf(w, "Category: %v\n", vars["category"])
}
```
@@ -121,7 +125,7 @@ r.Queries("key", "value")
```go
r.MatcherFunc(func(r *http.Request, rm *RouteMatch) bool {
- return r.ProtoMajor == 0
+ return r.ProtoMajor == 0
})
```
@@ -134,6 +138,14 @@ r.HandleFunc("/products", ProductsHandler).
Schemes("http")
```
+Routes are tested in the order they were added to the router. If two routes match, the first one wins:
+
+```go
+r := mux.NewRouter()
+r.HandleFunc("/specific", specificHandler)
+r.PathPrefix("/").Handler(catchAllHandler)
+```
+
Setting the same matching conditions again and again can be boring, so we have a way to group several routes that share the same requirements. We call it "subrouting".
For example, let's say we have several URLs that should only match when the host is `www.example.com`. Create a route for that host and get a "subrouter" from it:
@@ -168,68 +180,33 @@ s.HandleFunc("/{key}/", ProductHandler)
s.HandleFunc("/{key}/details", ProductDetailsHandler)
```
-### Listing Routes
-
-Routes on a mux can be listed using the Router.Walk method—useful for generating documentation:
-
-```go
-package main
-
-import (
- "fmt"
- "net/http"
-
- "github.com/gorilla/mux"
-)
-
-func handler(w http.ResponseWriter, r *http.Request) {
- return
-}
-
-func main() {
- r := mux.NewRouter()
- r.HandleFunc("/", handler)
- r.HandleFunc("/products", handler)
- r.HandleFunc("/articles", handler)
- r.HandleFunc("/articles/{id}", handler)
- r.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error {
- t, err := route.GetPathTemplate()
- if err != nil {
- return err
- }
- fmt.Println(t)
- return nil
- })
- http.Handle("/", r)
-}
-```
### Static Files
Note that the path provided to `PathPrefix()` represents a "wildcard": calling
`PathPrefix("/static/").Handler(...)` means that the handler will be passed any
-request that matches "/static/*". This makes it easy to serve static files with mux:
+request that matches "/static/\*". This makes it easy to serve static files with mux:
```go
func main() {
- var dir string
+ var dir string
- flag.StringVar(&dir, "dir", ".", "the directory to serve files from. Defaults to the current dir")
- flag.Parse()
- r := mux.NewRouter()
+ flag.StringVar(&dir, "dir", ".", "the directory to serve files from. Defaults to the current dir")
+ flag.Parse()
+ r := mux.NewRouter()
- // This will serve files under http://localhost:8000/static/<filename>
- r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(dir))))
+ // This will serve files under http://localhost:8000/static/<filename>
+ r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(dir))))
- srv := &http.Server{
- Handler: r,
- Addr: "127.0.0.1:8000",
- // Good practice: enforce timeouts for servers you create!
- WriteTimeout: 15 * time.Second,
- ReadTimeout: 15 * time.Second,
- }
+ srv := &http.Server{
+ Handler: r,
+ Addr: "127.0.0.1:8000",
+ // Good practice: enforce timeouts for servers you create!
+ WriteTimeout: 15 * time.Second,
+ ReadTimeout: 15 * time.Second,
+ }
- log.Fatal(srv.ListenAndServe())
+ log.Fatal(srv.ListenAndServe())
}
```
@@ -257,19 +234,21 @@ url, err := r.Get("article").URL("category", "technology", "id", "42")
"/articles/technology/42"
```
-This also works for host variables:
+This also works for host and query value variables:
```go
r := mux.NewRouter()
r.Host("{subdomain}.domain.com").
Path("/articles/{category}/{id:[0-9]+}").
+ Queries("filter", "{filter}").
HandlerFunc(ArticleHandler).
Name("article")
-// url.String() will be "http://news.domain.com/articles/technology/42"
+// url.String() will be "http://news.domain.com/articles/technology/42?filter=gorilla"
url, err := r.Get("article").URL("subdomain", "news",
"category", "technology",
- "id", "42")
+ "id", "42",
+ "filter", "gorilla")
```
All variables defined in the route are required, and their values must conform to the corresponding patterns. These requirements guarantee that a generated URL will always match a registered route -- the only exception is for explicitly defined "build-only" routes which never match.
@@ -307,30 +286,361 @@ url, err := r.Get("article").URL("subdomain", "news",
"id", "42")
```
-## Full Example
+### Walking Routes
-Here's a complete, runnable example of a small `mux` based server:
+The `Walk` function on `mux.Router` can be used to visit all of the routes that are registered on a router. For example,
+the following prints all of the registered routes:
```go
package main
import (
+ "fmt"
"net/http"
- "log"
+ "strings"
+
"github.com/gorilla/mux"
)
-func YourHandler(w http.ResponseWriter, r *http.Request) {
- w.Write([]byte("Gorilla!\n"))
+func handler(w http.ResponseWriter, r *http.Request) {
+ return
}
func main() {
r := mux.NewRouter()
- // Routes consist of a path and a handler function.
- r.HandleFunc("/", YourHandler)
+ r.HandleFunc("/", handler)
+ r.HandleFunc("/products", handler).Methods("POST")
+ r.HandleFunc("/articles", handler).Methods("GET")
+ r.HandleFunc("/articles/{id}", handler).Methods("GET", "PUT")
+ r.HandleFunc("/authors", handler).Queries("surname", "{surname}")
+ err := r.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error {
+ pathTemplate, err := route.GetPathTemplate()
+ if err == nil {
+ fmt.Println("ROUTE:", pathTemplate)
+ }
+ pathRegexp, err := route.GetPathRegexp()
+ if err == nil {
+ fmt.Println("Path regexp:", pathRegexp)
+ }
+ queriesTemplates, err := route.GetQueriesTemplates()
+ if err == nil {
+ fmt.Println("Queries templates:", strings.Join(queriesTemplates, ","))
+ }
+ queriesRegexps, err := route.GetQueriesRegexp()
+ if err == nil {
+ fmt.Println("Queries regexps:", strings.Join(queriesRegexps, ","))
+ }
+ methods, err := route.GetMethods()
+ if err == nil {
+ fmt.Println("Methods:", strings.Join(methods, ","))
+ }
+ fmt.Println()
+ return nil
+ })
+
+ if err != nil {
+ fmt.Println(err)
+ }
+
+ http.Handle("/", r)
+}
+```
+
+### Graceful Shutdown
+
+Go 1.8 introduced the ability to [gracefully shutdown](https://golang.org/doc/go1.8#http_shutdown) a `*http.Server`. Here's how to do that alongside `mux`:
+
+```go
+package main
+
+import (
+ "context"
+ "flag"
+ "log"
+ "net/http"
+ "os"
+ "os/signal"
+ "time"
+
+ "github.com/gorilla/mux"
+)
+
+func main() {
+ var wait time.Duration
+ flag.DurationVar(&wait, "graceful-timeout", time.Second * 15, "the duration for which the server gracefully wait for existing connections to finish - e.g. 15s or 1m")
+ flag.Parse()
+
+ r := mux.NewRouter()
+ // Add your routes as needed
+
+ srv := &http.Server{
+ Addr: "0.0.0.0:8080",
+ // Good practice to set timeouts to avoid Slowloris attacks.
+ WriteTimeout: time.Second * 15,
+ ReadTimeout: time.Second * 15,
+ IdleTimeout: time.Second * 60,
+ Handler: r, // Pass our instance of gorilla/mux in.
+ }
+
+ // Run our server in a goroutine so that it doesn't block.
+ go func() {
+ if err := srv.ListenAndServe(); err != nil {
+ log.Println(err)
+ }
+ }()
+
+ c := make(chan os.Signal, 1)
+ // We'll accept graceful shutdowns when quit via SIGINT (Ctrl+C)
+ // SIGKILL, SIGQUIT or SIGTERM (Ctrl+/) will not be caught.
+ signal.Notify(c, os.Interrupt)
+
+ // Block until we receive our signal.
+ <-c
+
+ // Create a deadline to wait for.
+ ctx, cancel := context.WithTimeout(context.Background(), wait)
+ defer cancel()
+ // Doesn't block if no connections, but will otherwise wait
+ // until the timeout deadline.
+ srv.Shutdown(ctx)
+ // Optionally, you could run srv.Shutdown in a goroutine and block on
+ // <-ctx.Done() if your application should wait for other services
+ // to finalize based on context cancellation.
+ log.Println("shutting down")
+ os.Exit(0)
+}
+```
+
+### Middleware
+
+Mux supports the addition of middlewares to a [Router](https://godoc.org/github.com/gorilla/mux#Router), which are executed in the order they are added if a match is found, including its subrouters.
+Middlewares are (typically) small pieces of code which take one request, do something with it, and pass it down to another middleware or the final handler. Some common use cases for middleware are request logging, header manipulation, or `ResponseWriter` hijacking.
+
+Mux middlewares are defined using the de facto standard type:
+
+```go
+type MiddlewareFunc func(http.Handler) http.Handler
+```
+
+Typically, the returned handler is a closure which does something with the http.ResponseWriter and http.Request passed to it, and then calls the handler passed as parameter to the MiddlewareFunc. This takes advantage of closures being able access variables from the context where they are created, while retaining the signature enforced by the receivers.
+
+A very basic middleware which logs the URI of the request being handled could be written as:
+
+```go
+func loggingMiddleware(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ // Do stuff here
+ log.Println(r.RequestURI)
+ // Call the next handler, which can be another middleware in the chain, or the final handler.
+ next.ServeHTTP(w, r)
+ })
+}
+```
+
+Middlewares can be added to a router using `Router.Use()`:
+
+```go
+r := mux.NewRouter()
+r.HandleFunc("/", handler)
+r.Use(loggingMiddleware)
+```
+
+A more complex authentication middleware, which maps session token to users, could be written as:
+
+```go
+// Define our struct
+type authenticationMiddleware struct {
+ tokenUsers map[string]string
+}
+
+// Initialize it somewhere
+func (amw *authenticationMiddleware) Populate() {
+ amw.tokenUsers["00000000"] = "user0"
+ amw.tokenUsers["aaaaaaaa"] = "userA"
+ amw.tokenUsers["05f717e5"] = "randomUser"
+ amw.tokenUsers["deadbeef"] = "user0"
+}
+
+// Middleware function, which will be called for each request
+func (amw *authenticationMiddleware) Middleware(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ token := r.Header.Get("X-Session-Token")
+
+ if user, found := amw.tokenUsers[token]; found {
+ // We found the token in our map
+ log.Printf("Authenticated user %s\n", user)
+ // Pass down the request to the next middleware (or final handler)
+ next.ServeHTTP(w, r)
+ } else {
+ // Write an error and stop the handler chain
+ http.Error(w, "Forbidden", http.StatusForbidden)
+ }
+ })
+}
+```
+
+```go
+r := mux.NewRouter()
+r.HandleFunc("/", handler)
+
+amw := authenticationMiddleware{}
+amw.Populate()
+
+r.Use(amw.Middleware)
+```
+
+Note: The handler chain will be stopped if your middleware doesn't call `next.ServeHTTP()` with the corresponding parameters. This can be used to abort a request if the middleware writer wants to. Middlewares _should_ write to `ResponseWriter` if they _are_ going to terminate the request, and they _should not_ write to `ResponseWriter` if they _are not_ going to terminate it.
+
+### Testing Handlers
+
+Testing handlers in a Go web application is straightforward, and _mux_ doesn't complicate this any further. Given two files: `endpoints.go` and `endpoints_test.go`, here's how we'd test an application using _mux_.
+
+First, our simple HTTP handler:
+
+```go
+// endpoints.go
+package main
+
+func HealthCheckHandler(w http.ResponseWriter, r *http.Request) {
+ // A very simple health check.
+ w.WriteHeader(http.StatusOK)
+ w.Header().Set("Content-Type", "application/json")
+
+ // In the future we could report back on the status of our DB, or our cache
+ // (e.g. Redis) by performing a simple PING, and include them in the response.
+ io.WriteString(w, `{"alive": true}`)
+}
+
+func main() {
+ r := mux.NewRouter()
+ r.HandleFunc("/health", HealthCheckHandler)
+
+ log.Fatal(http.ListenAndServe("localhost:8080", r))
+}
+```
+
+Our test code:
+
+```go
+// endpoints_test.go
+package main
+
+import (
+ "net/http"
+ "net/http/httptest"
+ "testing"
+)
+
+func TestHealthCheckHandler(t *testing.T) {
+ // Create a request to pass to our handler. We don't have any query parameters for now, so we'll
+ // pass 'nil' as the third parameter.
+ req, err := http.NewRequest("GET", "/health", nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ // We create a ResponseRecorder (which satisfies http.ResponseWriter) to record the response.
+ rr := httptest.NewRecorder()
+ handler := http.HandlerFunc(HealthCheckHandler)
+
+ // Our handlers satisfy http.Handler, so we can call their ServeHTTP method
+ // directly and pass in our Request and ResponseRecorder.
+ handler.ServeHTTP(rr, req)
+
+ // Check the status code is what we expect.
+ if status := rr.Code; status != http.StatusOK {
+ t.Errorf("handler returned wrong status code: got %v want %v",
+ status, http.StatusOK)
+ }
+
+ // Check the response body is what we expect.
+ expected := `{"alive": true}`
+ if rr.Body.String() != expected {
+ t.Errorf("handler returned unexpected body: got %v want %v",
+ rr.Body.String(), expected)
+ }
+}
+```
+
+In the case that our routes have [variables](#examples), we can pass those in the request. We could write
+[table-driven tests](https://dave.cheney.net/2013/06/09/writing-table-driven-tests-in-go) to test multiple
+possible route variables as needed.
+
+```go
+// endpoints.go
+func main() {
+ r := mux.NewRouter()
+ // A route with a route variable:
+ r.HandleFunc("/metrics/{type}", MetricsHandler)
+
+ log.Fatal(http.ListenAndServe("localhost:8080", r))
+}
+```
+
+Our test file, with a table-driven test of `routeVariables`:
+
+```go
+// endpoints_test.go
+func TestMetricsHandler(t *testing.T) {
+ tt := []struct{
+ routeVariable string
+ shouldPass bool
+ }{
+ {"goroutines", true},
+ {"heap", true},
+ {"counters", true},
+ {"queries", true},
+ {"adhadaeqm3k", false},
+ }
+
+ for _, tc := range tt {
+ path := fmt.Sprintf("/metrics/%s", tc.routeVariable)
+ req, err := http.NewRequest("GET", path, nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ rr := httptest.NewRecorder()
+
+ // Need to create a router that we can pass the request through so that the vars will be added to the context
+ router := mux.NewRouter()
+ router.HandleFunc("/metrics/{type}", MetricsHandler)
+ router.ServeHTTP(rr, req)
+
+ // In this case, our MetricsHandler returns a non-200 response
+ // for a route variable it doesn't know about.
+ if rr.Code == http.StatusOK && !tc.shouldPass {
+ t.Errorf("handler should have failed on routeVariable %s: got %v want %v",
+ tc.routeVariable, rr.Code, http.StatusOK)
+ }
+ }
+}
+```
+
+## Full Example
+
+Here's a complete, runnable example of a small `mux` based server:
+
+```go
+package main
+
+import (
+ "net/http"
+ "log"
+ "github.com/gorilla/mux"
+)
+
+func YourHandler(w http.ResponseWriter, r *http.Request) {
+ w.Write([]byte("Gorilla!\n"))
+}
+
+func main() {
+ r := mux.NewRouter()
+ // Routes consist of a path and a handler function.
+ r.HandleFunc("/", YourHandler)
- // Bind to a port and pass our router in
- log.Fatal(http.ListenAndServe(":8000", r))
+ // Bind to a port and pass our router in
+ log.Fatal(http.ListenAndServe(":8000", r))
}
```
diff --git a/vendor/github.com/gorilla/mux/doc.go b/vendor/github.com/gorilla/mux/doc.go
index 00daf4a72..38957deea 100644
--- a/vendor/github.com/gorilla/mux/doc.go
+++ b/vendor/github.com/gorilla/mux/doc.go
@@ -12,8 +12,8 @@ or other conditions. The main features are:
* Requests can be matched based on URL host, path, path prefix, schemes,
header and query values, HTTP methods or using custom matchers.
- * URL hosts and paths can have variables with an optional regular
- expression.
+ * URL hosts, paths and query values can have variables with an optional
+ regular expression.
* Registered URLs can be built, or "reversed", which helps maintaining
references to resources.
* Routes can be used as subrouters: nested routes are only tested if the
@@ -188,18 +188,20 @@ key/value pairs for the route variables. For the previous route, we would do:
"/articles/technology/42"
-This also works for host variables:
+This also works for host and query value variables:
r := mux.NewRouter()
r.Host("{subdomain}.domain.com").
Path("/articles/{category}/{id:[0-9]+}").
+ Queries("filter", "{filter}").
HandlerFunc(ArticleHandler).
Name("article")
- // url.String() will be "http://news.domain.com/articles/technology/42"
+ // url.String() will be "http://news.domain.com/articles/technology/42?filter=gorilla"
url, err := r.Get("article").URL("subdomain", "news",
"category", "technology",
- "id", "42")
+ "id", "42",
+ "filter", "gorilla")
All variables defined in the route are required, and their values must
conform to the corresponding patterns. These requirements guarantee that a
@@ -236,5 +238,69 @@ as well:
url, err := r.Get("article").URL("subdomain", "news",
"category", "technology",
"id", "42")
+
+Mux supports the addition of middlewares to a Router, which are executed in the order they are added if a match is found, including its subrouters. Middlewares are (typically) small pieces of code which take one request, do something with it, and pass it down to another middleware or the final handler. Some common use cases for middleware are request logging, header manipulation, or ResponseWriter hijacking.
+
+ type MiddlewareFunc func(http.Handler) http.Handler
+
+Typically, the returned handler is a closure which does something with the http.ResponseWriter and http.Request passed to it, and then calls the handler passed as parameter to the MiddlewareFunc (closures can access variables from the context where they are created).
+
+A very basic middleware which logs the URI of the request being handled could be written as:
+
+ func simpleMw(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ // Do stuff here
+ log.Println(r.RequestURI)
+ // Call the next handler, which can be another middleware in the chain, or the final handler.
+ next.ServeHTTP(w, r)
+ })
+ }
+
+Middlewares can be added to a router using `Router.Use()`:
+
+ r := mux.NewRouter()
+ r.HandleFunc("/", handler)
+ r.Use(simpleMw)
+
+A more complex authentication middleware, which maps session token to users, could be written as:
+
+ // Define our struct
+ type authenticationMiddleware struct {
+ tokenUsers map[string]string
+ }
+
+ // Initialize it somewhere
+ func (amw *authenticationMiddleware) Populate() {
+ amw.tokenUsers["00000000"] = "user0"
+ amw.tokenUsers["aaaaaaaa"] = "userA"
+ amw.tokenUsers["05f717e5"] = "randomUser"
+ amw.tokenUsers["deadbeef"] = "user0"
+ }
+
+ // Middleware function, which will be called for each request
+ func (amw *authenticationMiddleware) Middleware(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ token := r.Header.Get("X-Session-Token")
+
+ if user, found := amw.tokenUsers[token]; found {
+ // We found the token in our map
+ log.Printf("Authenticated user %s\n", user)
+ next.ServeHTTP(w, r)
+ } else {
+ http.Error(w, "Forbidden", http.StatusForbidden)
+ }
+ })
+ }
+
+ r := mux.NewRouter()
+ r.HandleFunc("/", handler)
+
+ amw := authenticationMiddleware{}
+ amw.Populate()
+
+ r.Use(amw.Middleware)
+
+Note: The handler chain will be stopped if your middleware doesn't call `next.ServeHTTP()` with the corresponding parameters. This can be used to abort a request if the middleware writer wants to.
+
*/
package mux
diff --git a/vendor/github.com/gorilla/mux/middleware.go b/vendor/github.com/gorilla/mux/middleware.go
new file mode 100644
index 000000000..ceb812cee
--- /dev/null
+++ b/vendor/github.com/gorilla/mux/middleware.go
@@ -0,0 +1,72 @@
+package mux
+
+import (
+ "net/http"
+ "strings"
+)
+
+// MiddlewareFunc is a function which receives an http.Handler and returns another http.Handler.
+// Typically, the returned handler is a closure which does something with the http.ResponseWriter and http.Request passed
+// to it, and then calls the handler passed as parameter to the MiddlewareFunc.
+type MiddlewareFunc func(http.Handler) http.Handler
+
+// middleware interface is anything which implements a MiddlewareFunc named Middleware.
+type middleware interface {
+ Middleware(handler http.Handler) http.Handler
+}
+
+// Middleware allows MiddlewareFunc to implement the middleware interface.
+func (mw MiddlewareFunc) Middleware(handler http.Handler) http.Handler {
+ return mw(handler)
+}
+
+// Use appends a MiddlewareFunc to the chain. Middleware can be used to intercept or otherwise modify requests and/or responses, and are executed in the order that they are applied to the Router.
+func (r *Router) Use(mwf ...MiddlewareFunc) {
+ for _, fn := range mwf {
+ r.middlewares = append(r.middlewares, fn)
+ }
+}
+
+// useInterface appends a middleware to the chain. Middleware can be used to intercept or otherwise modify requests and/or responses, and are executed in the order that they are applied to the Router.
+func (r *Router) useInterface(mw middleware) {
+ r.middlewares = append(r.middlewares, mw)
+}
+
+// CORSMethodMiddleware sets the Access-Control-Allow-Methods response header
+// on a request, by matching routes based only on paths. It also handles
+// OPTIONS requests, by settings Access-Control-Allow-Methods, and then
+// returning without calling the next http handler.
+func CORSMethodMiddleware(r *Router) MiddlewareFunc {
+ return func(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
+ var allMethods []string
+
+ err := r.Walk(func(route *Route, _ *Router, _ []*Route) error {
+ for _, m := range route.matchers {
+ if _, ok := m.(*routeRegexp); ok {
+ if m.Match(req, &RouteMatch{}) {
+ methods, err := route.GetMethods()
+ if err != nil {
+ return err
+ }
+
+ allMethods = append(allMethods, methods...)
+ }
+ break
+ }
+ }
+ return nil
+ })
+
+ if err == nil {
+ w.Header().Set("Access-Control-Allow-Methods", strings.Join(append(allMethods, "OPTIONS"), ","))
+
+ if req.Method == "OPTIONS" {
+ return
+ }
+ }
+
+ next.ServeHTTP(w, req)
+ })
+ }
+}
diff --git a/vendor/github.com/gorilla/mux/mux.go b/vendor/github.com/gorilla/mux/mux.go
index d66ec3841..4bbafa51d 100644
--- a/vendor/github.com/gorilla/mux/mux.go
+++ b/vendor/github.com/gorilla/mux/mux.go
@@ -10,7 +10,14 @@ import (
"net/http"
"path"
"regexp"
- "strings"
+)
+
+var (
+ // ErrMethodMismatch is returned when the method in the request does not match
+ // the method defined against the route.
+ ErrMethodMismatch = errors.New("method is not allowed")
+ // ErrNotFound is returned when no route match is found.
+ ErrNotFound = errors.New("no matching route was found")
)
// NewRouter returns a new router instance.
@@ -39,6 +46,10 @@ func NewRouter() *Router {
type Router struct {
// Configurable Handler to be used when no route matches.
NotFoundHandler http.Handler
+
+ // Configurable Handler to be used when the request method does not match the route.
+ MethodNotAllowedHandler http.Handler
+
// Parent route, if this is a subrouter.
parent parentRoute
// Routes to be matched, in order.
@@ -55,21 +66,51 @@ type Router struct {
KeepContext bool
// see Router.UseEncodedPath(). This defines a flag for all routes.
useEncodedPath bool
+ // Slice of middlewares to be called after a match is found
+ middlewares []middleware
}
-// Match matches registered routes against the request.
+// Match attempts to match the given request against the router's registered routes.
+//
+// If the request matches a route of this router or one of its subrouters the Route,
+// Handler, and Vars fields of the the match argument are filled and this function
+// returns true.
+//
+// If the request does not match any of this router's or its subrouters' routes
+// then this function returns false. If available, a reason for the match failure
+// will be filled in the match argument's MatchErr field. If the match failure type
+// (eg: not found) has a registered handler, the handler is assigned to the Handler
+// field of the match argument.
func (r *Router) Match(req *http.Request, match *RouteMatch) bool {
for _, route := range r.routes {
if route.Match(req, match) {
+ // Build middleware chain if no error was found
+ if match.MatchErr == nil {
+ for i := len(r.middlewares) - 1; i >= 0; i-- {
+ match.Handler = r.middlewares[i].Middleware(match.Handler)
+ }
+ }
+ return true
+ }
+ }
+
+ if match.MatchErr == ErrMethodMismatch {
+ if r.MethodNotAllowedHandler != nil {
+ match.Handler = r.MethodNotAllowedHandler
return true
}
+
+ return false
}
// Closest match for a router (includes sub-routers)
if r.NotFoundHandler != nil {
match.Handler = r.NotFoundHandler
+ match.MatchErr = ErrNotFound
return true
}
+
+ match.MatchErr = ErrNotFound
return false
}
@@ -81,7 +122,7 @@ func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {
if !r.skipClean {
path := req.URL.Path
if r.useEncodedPath {
- path = getPath(req)
+ path = req.URL.EscapedPath()
}
// Clean path to canonical form and redirect.
if p := cleanPath(path); p != path {
@@ -105,12 +146,19 @@ func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) {
req = setVars(req, match.Vars)
req = setCurrentRoute(req, match.Route)
}
+
+ if handler == nil && match.MatchErr == ErrMethodMismatch {
+ handler = methodNotAllowedHandler()
+ }
+
if handler == nil {
handler = http.NotFoundHandler()
}
+
if !r.KeepContext {
defer contextClear(req)
}
+
handler.ServeHTTP(w, req)
}
@@ -128,13 +176,18 @@ func (r *Router) GetRoute(name string) *Route {
// StrictSlash defines the trailing slash behavior for new routes. The initial
// value is false.
//
-// When true, if the route path is "/path/", accessing "/path" will redirect
+// When true, if the route path is "/path/", accessing "/path" will perform a redirect
// to the former and vice versa. In other words, your application will always
// see the path as specified in the route.
//
// When false, if the route path is "/path", accessing "/path/" will not match
// this route and vice versa.
//
+// The re-direct is a HTTP 301 (Moved Permanently). Note that when this is set for
+// routes with a non-idempotent method (e.g. POST, PUT), the subsequent re-directed
+// request will be made as a GET by most clients. Use middleware or client settings
+// to modify this behaviour as needed.
+//
// Special case: when a route sets a path prefix using the PathPrefix() method,
// strict slash is ignored for that route because the redirect behavior can't
// be determined from a prefix alone. However, any subrouters created from that
@@ -160,10 +213,6 @@ func (r *Router) SkipClean(value bool) *Router {
// UseEncodedPath tells the router to match the encoded original path
// to the routes.
// For eg. "/path/foo%2Fbar/to" will match the path "/path/{var}/to".
-// This behavior has the drawback of needing to match routes against
-// r.RequestURI instead of r.URL.Path. Any modifications (such as http.StripPrefix)
-// to r.URL.Path will not affect routing when this flag is on and thus may
-// induce unintended behavior.
//
// If not called, the router will match the unencoded path to the routes.
// For eg. "/path/foo%2Fbar/to" will match the path "/path/foo/bar/to"
@@ -176,6 +225,13 @@ func (r *Router) UseEncodedPath() *Router {
// parentRoute
// ----------------------------------------------------------------------------
+func (r *Router) getBuildScheme() string {
+ if r.parent != nil {
+ return r.parent.getBuildScheme()
+ }
+ return ""
+}
+
// getNamedRoutes returns the map where named routes are registered.
func (r *Router) getNamedRoutes() map[string]*Route {
if r.namedRoutes == nil {
@@ -299,10 +355,6 @@ type WalkFunc func(route *Route, router *Router, ancestors []*Route) error
func (r *Router) walk(walkFn WalkFunc, ancestors []*Route) error {
for _, t := range r.routes {
- if t.regexp == nil || t.regexp.path == nil || t.regexp.path.template == "" {
- continue
- }
-
err := walkFn(t, r, ancestors)
if err == SkipRouter {
continue
@@ -312,10 +364,12 @@ func (r *Router) walk(walkFn WalkFunc, ancestors []*Route) error {
}
for _, sr := range t.matchers {
if h, ok := sr.(*Router); ok {
+ ancestors = append(ancestors, t)
err := h.walk(walkFn, ancestors)
if err != nil {
return err
}
+ ancestors = ancestors[:len(ancestors)-1]
}
}
if h, ok := t.handler.(*Router); ok {
@@ -339,6 +393,11 @@ type RouteMatch struct {
Route *Route
Handler http.Handler
Vars map[string]string
+
+ // MatchErr is set to appropriate matching error
+ // It is set to ErrMethodMismatch if there is a mismatch in
+ // the request method and route method
+ MatchErr error
}
type contextKey int
@@ -380,28 +439,6 @@ func setCurrentRoute(r *http.Request, val interface{}) *http.Request {
// Helpers
// ----------------------------------------------------------------------------
-// getPath returns the escaped path if possible; doing what URL.EscapedPath()
-// which was added in go1.5 does
-func getPath(req *http.Request) string {
- if req.RequestURI != "" {
- // Extract the path from RequestURI (which is escaped unlike URL.Path)
- // as detailed here as detailed in https://golang.org/pkg/net/url/#URL
- // for < 1.5 server side workaround
- // http://localhost/path/here?v=1 -> /path/here
- path := req.RequestURI
- path = strings.TrimPrefix(path, req.URL.Scheme+`://`)
- path = strings.TrimPrefix(path, req.URL.Host)
- if i := strings.LastIndex(path, "?"); i > -1 {
- path = path[:i]
- }
- if i := strings.LastIndex(path, "#"); i > -1 {
- path = path[:i]
- }
- return path
- }
- return req.URL.Path
-}
-
// cleanPath returns the canonical path for p, eliminating . and .. elements.
// Borrowed from the net/http package.
func cleanPath(p string) string {
@@ -458,7 +495,7 @@ func mapFromPairsToString(pairs ...string) (map[string]string, error) {
return m, nil
}
-// mapFromPairsToRegex converts variadic string paramers to a
+// mapFromPairsToRegex converts variadic string parameters to a
// string to regex map.
func mapFromPairsToRegex(pairs ...string) (map[string]*regexp.Regexp, error) {
length, err := checkPairs(pairs...)
@@ -540,3 +577,12 @@ func matchMapWithRegex(toCheck map[string]*regexp.Regexp, toMatch map[string][]s
}
return true
}
+
+// methodNotAllowed replies to the request with an HTTP status code 405.
+func methodNotAllowed(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(http.StatusMethodNotAllowed)
+}
+
+// methodNotAllowedHandler returns a simple request handler
+// that replies to each request with a status code 405.
+func methodNotAllowedHandler() http.Handler { return http.HandlerFunc(methodNotAllowed) }
diff --git a/vendor/github.com/gorilla/mux/regexp.go b/vendor/github.com/gorilla/mux/regexp.go
index 0189ad346..2b57e5627 100644
--- a/vendor/github.com/gorilla/mux/regexp.go
+++ b/vendor/github.com/gorilla/mux/regexp.go
@@ -14,6 +14,20 @@ import (
"strings"
)
+type routeRegexpOptions struct {
+ strictSlash bool
+ useEncodedPath bool
+}
+
+type regexpType int
+
+const (
+ regexpTypePath regexpType = 0
+ regexpTypeHost regexpType = 1
+ regexpTypePrefix regexpType = 2
+ regexpTypeQuery regexpType = 3
+)
+
// newRouteRegexp parses a route template and returns a routeRegexp,
// used to match a host, a path or a query string.
//
@@ -24,7 +38,7 @@ import (
// Previously we accepted only Python-like identifiers for variable
// names ([a-zA-Z_][a-zA-Z0-9_]*), but currently the only restriction is that
// name and pattern can't be empty, and names can't contain a colon.
-func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash, useEncodedPath bool) (*routeRegexp, error) {
+func newRouteRegexp(tpl string, typ regexpType, options routeRegexpOptions) (*routeRegexp, error) {
// Check if it is well-formed.
idxs, errBraces := braceIndices(tpl)
if errBraces != nil {
@@ -34,19 +48,18 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash,
template := tpl
// Now let's parse it.
defaultPattern := "[^/]+"
- if matchQuery {
- defaultPattern = "[^?&]*"
- } else if matchHost {
+ if typ == regexpTypeQuery {
+ defaultPattern = ".*"
+ } else if typ == regexpTypeHost {
defaultPattern = "[^.]+"
- matchPrefix = false
}
// Only match strict slash if not matching
- if matchPrefix || matchHost || matchQuery {
- strictSlash = false
+ if typ != regexpTypePath {
+ options.strictSlash = false
}
// Set a flag for strictSlash.
endSlash := false
- if strictSlash && strings.HasSuffix(tpl, "/") {
+ if options.strictSlash && strings.HasSuffix(tpl, "/") {
tpl = tpl[:len(tpl)-1]
endSlash = true
}
@@ -88,16 +101,16 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash,
// Add the remaining.
raw := tpl[end:]
pattern.WriteString(regexp.QuoteMeta(raw))
- if strictSlash {
+ if options.strictSlash {
pattern.WriteString("[/]?")
}
- if matchQuery {
+ if typ == regexpTypeQuery {
// Add the default pattern if the query value is empty
if queryVal := strings.SplitN(template, "=", 2)[1]; queryVal == "" {
pattern.WriteString(defaultPattern)
}
}
- if !matchPrefix {
+ if typ != regexpTypePrefix {
pattern.WriteByte('$')
}
reverse.WriteString(raw)
@@ -118,15 +131,13 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash,
// Done!
return &routeRegexp{
- template: template,
- matchHost: matchHost,
- matchQuery: matchQuery,
- strictSlash: strictSlash,
- useEncodedPath: useEncodedPath,
- regexp: reg,
- reverse: reverse.String(),
- varsN: varsN,
- varsR: varsR,
+ template: template,
+ regexpType: typ,
+ options: options,
+ regexp: reg,
+ reverse: reverse.String(),
+ varsN: varsN,
+ varsR: varsR,
}, nil
}
@@ -135,15 +146,10 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash,
type routeRegexp struct {
// The unmodified template.
template string
- // True for host match, false for path or query string match.
- matchHost bool
- // True for query string match, false for path and host match.
- matchQuery bool
- // The strictSlash value defined on the route, but disabled if PathPrefix was used.
- strictSlash bool
- // Determines whether to use encoded path from getPath function or unencoded
- // req.URL.Path for path matching
- useEncodedPath bool
+ // The type of match
+ regexpType regexpType
+ // Options for matching
+ options routeRegexpOptions
// Expanded regexp.
regexp *regexp.Regexp
// Reverse template.
@@ -156,13 +162,13 @@ type routeRegexp struct {
// Match matches the regexp against the URL host or path.
func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool {
- if !r.matchHost {
- if r.matchQuery {
+ if r.regexpType != regexpTypeHost {
+ if r.regexpType == regexpTypeQuery {
return r.matchQueryString(req)
}
path := req.URL.Path
- if r.useEncodedPath {
- path = getPath(req)
+ if r.options.useEncodedPath {
+ path = req.URL.EscapedPath()
}
return r.regexp.MatchString(path)
}
@@ -178,6 +184,9 @@ func (r *routeRegexp) url(values map[string]string) (string, error) {
if !ok {
return "", fmt.Errorf("mux: missing route variable %q", v)
}
+ if r.regexpType == regexpTypeQuery {
+ value = url.QueryEscape(value)
+ }
urlValues[k] = value
}
rv := fmt.Sprintf(r.reverse, urlValues...)
@@ -200,7 +209,7 @@ func (r *routeRegexp) url(values map[string]string) (string, error) {
// For a URL with foo=bar&baz=ding, we return only the relevant key
// value pair for the routeRegexp.
func (r *routeRegexp) getURLQuery(req *http.Request) string {
- if !r.matchQuery {
+ if r.regexpType != regexpTypeQuery {
return ""
}
templateKey := strings.SplitN(r.template, "=", 2)[0]
@@ -269,7 +278,7 @@ func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route)
}
path := req.URL.Path
if r.useEncodedPath {
- path = getPath(req)
+ path = req.URL.EscapedPath()
}
// Store path variables.
if v.path != nil {
@@ -277,7 +286,7 @@ func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route)
if len(matches) > 0 {
extractVars(path, matches, v.path.varsN, m.Vars)
// Check if we should redirect.
- if v.path.strictSlash {
+ if v.path.options.strictSlash {
p1 := strings.HasSuffix(path, "/")
p2 := strings.HasSuffix(v.path.template, "/")
if p1 != p2 {
diff --git a/vendor/github.com/gorilla/mux/route.go b/vendor/github.com/gorilla/mux/route.go
index 922191592..a591d7354 100644
--- a/vendor/github.com/gorilla/mux/route.go
+++ b/vendor/github.com/gorilla/mux/route.go
@@ -31,6 +31,8 @@ type Route struct {
skipClean bool
// If true, "/path/foo%2Fbar/to" will match the path "/path/{var}/to"
useEncodedPath bool
+ // The scheme used when building URLs.
+ buildScheme string
// If true, this route never matches: it is only used to build URLs.
buildOnly bool
// The name used to build URLs.
@@ -41,6 +43,8 @@ type Route struct {
buildVarsFunc BuildVarsFunc
}
+// SkipClean reports whether path cleaning is enabled for this route via
+// Router.SkipClean.
func (r *Route) SkipClean() bool {
return r.skipClean
}
@@ -50,12 +54,33 @@ func (r *Route) Match(req *http.Request, match *RouteMatch) bool {
if r.buildOnly || r.err != nil {
return false
}
+
+ var matchErr error
+
// Match everything.
for _, m := range r.matchers {
if matched := m.Match(req, match); !matched {
+ if _, ok := m.(methodMatcher); ok {
+ matchErr = ErrMethodMismatch
+ continue
+ }
+ matchErr = nil
return false
}
}
+
+ if matchErr != nil {
+ match.MatchErr = matchErr
+ return false
+ }
+
+ if match.MatchErr == ErrMethodMismatch {
+ // We found a route which matches request method, clear MatchErr
+ match.MatchErr = nil
+ // Then override the mis-matched handler
+ match.Handler = r.handler
+ }
+
// Yay, we have a match. Let's collect some info about it.
if match.Route == nil {
match.Route = r
@@ -66,6 +91,7 @@ func (r *Route) Match(req *http.Request, match *RouteMatch) bool {
if match.Vars == nil {
match.Vars = make(map[string]string)
}
+
// Set variables.
if r.regexp != nil {
r.regexp.setMatch(req, match, r)
@@ -147,20 +173,23 @@ func (r *Route) addMatcher(m matcher) *Route {
}
// addRegexpMatcher adds a host or path matcher and builder to a route.
-func (r *Route) addRegexpMatcher(tpl string, matchHost, matchPrefix, matchQuery bool) error {
+func (r *Route) addRegexpMatcher(tpl string, typ regexpType) error {
if r.err != nil {
return r.err
}
r.regexp = r.getRegexpGroup()
- if !matchHost && !matchQuery {
- if tpl == "/" && (len(tpl) == 0 || tpl[0] != '/') {
+ if typ == regexpTypePath || typ == regexpTypePrefix {
+ if len(tpl) > 0 && tpl[0] != '/' {
return fmt.Errorf("mux: path must start with a slash, got %q", tpl)
}
if r.regexp.path != nil {
tpl = strings.TrimRight(r.regexp.path.template, "/") + tpl
}
}
- rr, err := newRouteRegexp(tpl, matchHost, matchPrefix, matchQuery, r.strictSlash, r.useEncodedPath)
+ rr, err := newRouteRegexp(tpl, typ, routeRegexpOptions{
+ strictSlash: r.strictSlash,
+ useEncodedPath: r.useEncodedPath,
+ })
if err != nil {
return err
}
@@ -169,7 +198,7 @@ func (r *Route) addRegexpMatcher(tpl string, matchHost, matchPrefix, matchQuery
return err
}
}
- if matchHost {
+ if typ == regexpTypeHost {
if r.regexp.path != nil {
if err = uniqueVars(rr.varsN, r.regexp.path.varsN); err != nil {
return err
@@ -182,7 +211,7 @@ func (r *Route) addRegexpMatcher(tpl string, matchHost, matchPrefix, matchQuery
return err
}
}
- if matchQuery {
+ if typ == regexpTypeQuery {
r.regexp.queries = append(r.regexp.queries, rr)
} else {
r.regexp.path = rr
@@ -234,7 +263,8 @@ func (m headerRegexMatcher) Match(r *http.Request, match *RouteMatch) bool {
// "X-Requested-With", "XMLHttpRequest")
//
// The above route will only match if both the request header matches both regular expressions.
-// It the value is an empty string, it will match any value if the key is set.
+// If the value is an empty string, it will match any value if the key is set.
+// Use the start and end of string anchors (^ and $) to match an exact value.
func (r *Route) HeadersRegexp(pairs ...string) *Route {
if r.err == nil {
var headers map[string]*regexp.Regexp
@@ -264,7 +294,7 @@ func (r *Route) HeadersRegexp(pairs ...string) *Route {
// Variable names must be unique in a given route. They can be retrieved
// calling mux.Vars(request).
func (r *Route) Host(tpl string) *Route {
- r.err = r.addRegexpMatcher(tpl, true, false, false)
+ r.err = r.addRegexpMatcher(tpl, regexpTypeHost)
return r
}
@@ -324,7 +354,7 @@ func (r *Route) Methods(methods ...string) *Route {
// Variable names must be unique in a given route. They can be retrieved
// calling mux.Vars(request).
func (r *Route) Path(tpl string) *Route {
- r.err = r.addRegexpMatcher(tpl, false, false, false)
+ r.err = r.addRegexpMatcher(tpl, regexpTypePath)
return r
}
@@ -340,7 +370,7 @@ func (r *Route) Path(tpl string) *Route {
// Also note that the setting of Router.StrictSlash() has no effect on routes
// with a PathPrefix matcher.
func (r *Route) PathPrefix(tpl string) *Route {
- r.err = r.addRegexpMatcher(tpl, false, true, false)
+ r.err = r.addRegexpMatcher(tpl, regexpTypePrefix)
return r
}
@@ -371,7 +401,7 @@ func (r *Route) Queries(pairs ...string) *Route {
return nil
}
for i := 0; i < length; i += 2 {
- if r.err = r.addRegexpMatcher(pairs[i]+"="+pairs[i+1], false, false, true); r.err != nil {
+ if r.err = r.addRegexpMatcher(pairs[i]+"="+pairs[i+1], regexpTypeQuery); r.err != nil {
return r
}
}
@@ -394,6 +424,9 @@ func (r *Route) Schemes(schemes ...string) *Route {
for k, v := range schemes {
schemes[k] = strings.ToLower(v)
}
+ if r.buildScheme == "" && len(schemes) > 0 {
+ r.buildScheme = schemes[0]
+ }
return r.addMatcher(schemeMatcher(schemes))
}
@@ -477,22 +510,33 @@ func (r *Route) URL(pairs ...string) (*url.URL, error) {
return nil, err
}
var scheme, host, path string
+ queries := make([]string, 0, len(r.regexp.queries))
if r.regexp.host != nil {
- // Set a default scheme.
- scheme = "http"
if host, err = r.regexp.host.url(values); err != nil {
return nil, err
}
+ scheme = "http"
+ if s := r.getBuildScheme(); s != "" {
+ scheme = s
+ }
}
if r.regexp.path != nil {
if path, err = r.regexp.path.url(values); err != nil {
return nil, err
}
}
+ for _, q := range r.regexp.queries {
+ var query string
+ if query, err = q.url(values); err != nil {
+ return nil, err
+ }
+ queries = append(queries, query)
+ }
return &url.URL{
- Scheme: scheme,
- Host: host,
- Path: path,
+ Scheme: scheme,
+ Host: host,
+ Path: path,
+ RawQuery: strings.Join(queries, "&"),
}, nil
}
@@ -514,10 +558,14 @@ func (r *Route) URLHost(pairs ...string) (*url.URL, error) {
if err != nil {
return nil, err
}
- return &url.URL{
+ u := &url.URL{
Scheme: "http",
Host: host,
- }, nil
+ }
+ if s := r.getBuildScheme(); s != "" {
+ u.Scheme = s
+ }
+ return u, nil
}
// URLPath builds the path part of the URL for a route. See Route.URL().
@@ -558,6 +606,74 @@ func (r *Route) GetPathTemplate() (string, error) {
return r.regexp.path.template, nil
}
+// GetPathRegexp returns the expanded regular expression used to match route path.
+// This is useful for building simple REST API documentation and for instrumentation
+// against third-party services.
+// An error will be returned if the route does not define a path.
+func (r *Route) GetPathRegexp() (string, error) {
+ if r.err != nil {
+ return "", r.err
+ }
+ if r.regexp == nil || r.regexp.path == nil {
+ return "", errors.New("mux: route does not have a path")
+ }
+ return r.regexp.path.regexp.String(), nil
+}
+
+// GetQueriesRegexp returns the expanded regular expressions used to match the
+// route queries.
+// This is useful for building simple REST API documentation and for instrumentation
+// against third-party services.
+// An error will be returned if the route does not have queries.
+func (r *Route) GetQueriesRegexp() ([]string, error) {
+ if r.err != nil {
+ return nil, r.err
+ }
+ if r.regexp == nil || r.regexp.queries == nil {
+ return nil, errors.New("mux: route doesn't have queries")
+ }
+ var queries []string
+ for _, query := range r.regexp.queries {
+ queries = append(queries, query.regexp.String())
+ }
+ return queries, nil
+}
+
+// GetQueriesTemplates returns the templates used to build the
+// query matching.
+// This is useful for building simple REST API documentation and for instrumentation
+// against third-party services.
+// An error will be returned if the route does not define queries.
+func (r *Route) GetQueriesTemplates() ([]string, error) {
+ if r.err != nil {
+ return nil, r.err
+ }
+ if r.regexp == nil || r.regexp.queries == nil {
+ return nil, errors.New("mux: route doesn't have queries")
+ }
+ var queries []string
+ for _, query := range r.regexp.queries {
+ queries = append(queries, query.template)
+ }
+ return queries, nil
+}
+
+// GetMethods returns the methods the route matches against
+// This is useful for building simple REST API documentation and for instrumentation
+// against third-party services.
+// An error will be returned if route does not have methods.
+func (r *Route) GetMethods() ([]string, error) {
+ if r.err != nil {
+ return nil, r.err
+ }
+ for _, m := range r.matchers {
+ if methods, ok := m.(methodMatcher); ok {
+ return []string(methods), nil
+ }
+ }
+ return nil, errors.New("mux: route doesn't have methods")
+}
+
// GetHostTemplate returns the template used to build the
// route match.
// This is useful for building simple REST API documentation and for instrumentation
@@ -599,11 +715,22 @@ func (r *Route) buildVars(m map[string]string) map[string]string {
// parentRoute allows routes to know about parent host and path definitions.
type parentRoute interface {
+ getBuildScheme() string
getNamedRoutes() map[string]*Route
getRegexpGroup() *routeRegexpGroup
buildVars(map[string]string) map[string]string
}
+func (r *Route) getBuildScheme() string {
+ if r.buildScheme != "" {
+ return r.buildScheme
+ }
+ if r.parent != nil {
+ return r.parent.getBuildScheme()
+ }
+ return ""
+}
+
// getNamedRoutes returns the map where named routes are registered.
func (r *Route) getNamedRoutes() map[string]*Route {
if r.parent == nil {
diff --git a/vendor/github.com/gorilla/mux/test_helpers.go b/vendor/github.com/gorilla/mux/test_helpers.go
new file mode 100644
index 000000000..32ecffde4
--- /dev/null
+++ b/vendor/github.com/gorilla/mux/test_helpers.go
@@ -0,0 +1,19 @@
+// Copyright 2012 The Gorilla 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 mux
+
+import "net/http"
+
+// SetURLVars sets the URL variables for the given request, to be accessed via
+// mux.Vars for testing route behaviour. Arguments are not modified, a shallow
+// copy is returned.
+//
+// This API should only be used for testing purposes; it provides a way to
+// inject variables into the request context. Alternatively, URL variables
+// can be set by making a route that captures the required variables,
+// starting a server and sending the request to that server.
+func SetURLVars(r *http.Request, val map[string]string) *http.Request {
+ return setVars(r, val)
+}
diff --git a/vendor/github.com/hashicorp/errwrap/LICENSE b/vendor/github.com/hashicorp/errwrap/LICENSE
index 82b4de97c..c33dcc7c9 100644
--- a/vendor/github.com/hashicorp/errwrap/LICENSE
+++ b/vendor/github.com/hashicorp/errwrap/LICENSE
@@ -351,3 +351,4 @@ Exhibit B - “Incompatible With Secondary Licenses” Notice
This Source Code Form is “Incompatible
With Secondary Licenses”, as defined by
the Mozilla Public License, v. 2.0.
+
diff --git a/vendor/github.com/hashicorp/errwrap/README.md b/vendor/github.com/hashicorp/errwrap/README.md
index 1c95f5978..444df08f8 100644
--- a/vendor/github.com/hashicorp/errwrap/README.md
+++ b/vendor/github.com/hashicorp/errwrap/README.md
@@ -48,7 +48,7 @@ func main() {
// We can use the Contains helpers to check if an error contains
// another error. It is safe to do this with a nil error, or with
// an error that doesn't even use the errwrap package.
- if errwrap.Contains(err, ErrNotExist) {
+ if errwrap.Contains(err, "does not exist") {
// Do something
}
if errwrap.ContainsType(err, new(os.PathError)) {
diff --git a/vendor/github.com/hashicorp/go-multierror/format.go b/vendor/github.com/hashicorp/go-multierror/format.go
index 6c7a3cc91..47f13c49a 100644
--- a/vendor/github.com/hashicorp/go-multierror/format.go
+++ b/vendor/github.com/hashicorp/go-multierror/format.go
@@ -13,7 +13,7 @@ type ErrorFormatFunc func([]error) string
// that occurred along with a bullet point list of the errors.
func ListFormatFunc(es []error) string {
if len(es) == 1 {
- return fmt.Sprintf("1 error occurred:\n\n* %s", es[0])
+ return fmt.Sprintf("1 error occurred:\n\t* %s\n\n", es[0])
}
points := make([]string, len(es))
@@ -22,6 +22,6 @@ func ListFormatFunc(es []error) string {
}
return fmt.Sprintf(
- "%d errors occurred:\n\n%s",
- len(es), strings.Join(points, "\n"))
+ "%d errors occurred:\n\t%s\n\n",
+ len(es), strings.Join(points, "\n\t"))
}
diff --git a/vendor/github.com/hashicorp/go-multierror/sort.go b/vendor/github.com/hashicorp/go-multierror/sort.go
new file mode 100644
index 000000000..fecb14e81
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-multierror/sort.go
@@ -0,0 +1,16 @@
+package multierror
+
+// Len implements sort.Interface function for length
+func (err Error) Len() int {
+ return len(err.Errors)
+}
+
+// Swap implements sort.Interface function for swapping elements
+func (err Error) Swap(i, j int) {
+ err.Errors[i], err.Errors[j] = err.Errors[j], err.Errors[i]
+}
+
+// Less implements sort.Interface function for determining order
+func (err Error) Less(i, j int) bool {
+ return err.Errors[i].Error() < err.Errors[j].Error()
+}
diff --git a/vendor/github.com/imdario/mergo/README.md b/vendor/github.com/imdario/mergo/README.md
index f4769cdd7..8b76f1fbf 100644
--- a/vendor/github.com/imdario/mergo/README.md
+++ b/vendor/github.com/imdario/mergo/README.md
@@ -2,17 +2,17 @@
A helper to merge structs and maps in Golang. Useful for configuration default values, avoiding messy if-statements.
-Also a lovely [comune](http://en.wikipedia.org/wiki/Mergo) (municipality) in the Province of Ancona in the Italian region Marche.
-
-![Mergo dall'alto](http://www.comune.mergo.an.it/Siti/Mergo/Immagini/Foto/mergo_dall_alto.jpg)
+Also a lovely [comune](http://en.wikipedia.org/wiki/Mergo) (municipality) in the Province of Ancona in the Italian region of Marche.
## Status
-It is ready for production use. It works fine after extensive use in the wild.
+It is ready for production use. [It is used in several projects by Docker, Google, The Linux Foundation, VMWare, Shopify, etc](https://github.com/imdario/mergo#mergo-in-the-wild).
-[![Build Status][1]][2]
[![GoDoc][3]][4]
[![GoCard][5]][6]
+[![Build Status][1]][2]
+[![Coverage Status][7]][8]
+[![Sourcegraph][9]][10]
[1]: https://travis-ci.org/imdario/mergo.png
[2]: https://travis-ci.org/imdario/mergo
@@ -20,19 +20,54 @@ It is ready for production use. It works fine after extensive use in the wild.
[4]: https://godoc.org/github.com/imdario/mergo
[5]: https://goreportcard.com/badge/imdario/mergo
[6]: https://goreportcard.com/report/github.com/imdario/mergo
+[7]: https://coveralls.io/repos/github/imdario/mergo/badge.svg?branch=master
+[8]: https://coveralls.io/github/imdario/mergo?branch=master
+[9]: https://sourcegraph.com/github.com/imdario/mergo/-/badge.svg
+[10]: https://sourcegraph.com/github.com/imdario/mergo?badge
+
+### Latest release
+
+[Release v0.3.6](https://github.com/imdario/mergo/releases/tag/v0.3.6).
### Important note
-Mergo is intended to assign **only** zero value fields on destination with source value. Since April 6th it works like this. Before it didn't work properly, causing some random overwrites. After some issues and PRs I found it didn't merge as I designed it. Thanks to [imdario/mergo#8](https://github.com/imdario/mergo/pull/8) overwriting functions were added and the wrong behavior was clearly detected.
+Please keep in mind that in [0.3.2](//github.com/imdario/mergo/releases/tag/0.3.2) Mergo changed `Merge()`and `Map()` signatures to support [transformers](#transformers). An optional/variadic argument has been added, so it won't break existing code.
If you were using Mergo **before** April 6th 2015, please check your project works as intended after updating your local copy with ```go get -u github.com/imdario/mergo```. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause (I hope it won't!) in existing projects after the change (release 0.2.0).
+### Donations
+
+If Mergo is useful to you, consider buying me a coffee, a beer or making a monthly donation so I can keep building great free software. :heart_eyes:
+
+<a href='https://ko-fi.com/B0B58839' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://az743702.vo.msecnd.net/cdn/kofi1.png?v=0' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
+[![Beerpay](https://beerpay.io/imdario/mergo/badge.svg)](https://beerpay.io/imdario/mergo)
+[![Beerpay](https://beerpay.io/imdario/mergo/make-wish.svg)](https://beerpay.io/imdario/mergo)
+<a href="https://liberapay.com/dario/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a>
+
### Mergo in the wild
-- [docker/docker](https://github.com/docker/docker/)
-- [GoogleCloudPlatform/kubernetes](https://github.com/GoogleCloudPlatform/kubernetes)
+- [moby/moby](https://github.com/moby/moby)
+- [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes)
+- [vmware/dispatch](https://github.com/vmware/dispatch)
+- [Shopify/themekit](https://github.com/Shopify/themekit)
- [imdario/zas](https://github.com/imdario/zas)
+- [matcornic/hermes](https://github.com/matcornic/hermes)
+- [OpenBazaar/openbazaar-go](https://github.com/OpenBazaar/openbazaar-go)
+- [kataras/iris](https://github.com/kataras/iris)
+- [michaelsauter/crane](https://github.com/michaelsauter/crane)
+- [go-task/task](https://github.com/go-task/task)
+- [sensu/uchiwa](https://github.com/sensu/uchiwa)
+- [ory/hydra](https://github.com/ory/hydra)
+- [sisatech/vcli](https://github.com/sisatech/vcli)
+- [dairycart/dairycart](https://github.com/dairycart/dairycart)
+- [projectcalico/felix](https://github.com/projectcalico/felix)
+- [resin-os/balena](https://github.com/resin-os/balena)
+- [go-kivik/kivik](https://github.com/go-kivik/kivik)
+- [Telefonica/govice](https://github.com/Telefonica/govice)
+- [supergiant/supergiant](supergiant/supergiant)
+- [SergeyTsalkov/brooce](https://github.com/SergeyTsalkov/brooce)
- [soniah/dnsmadeeasy](https://github.com/soniah/dnsmadeeasy)
+- [ohsu-comp-bio/funnel](https://github.com/ohsu-comp-bio/funnel)
- [EagerIO/Stout](https://github.com/EagerIO/Stout)
- [lynndylanhurley/defsynth-api](https://github.com/lynndylanhurley/defsynth-api)
- [russross/canvasassignments](https://github.com/russross/canvasassignments)
@@ -50,6 +85,7 @@ If you were using Mergo **before** April 6th 2015, please check your project wor
- [thoas/picfit](https://github.com/thoas/picfit)
- [mantasmatelis/whooplist-server](https://github.com/mantasmatelis/whooplist-server)
- [jnuthong/item_search](https://github.com/jnuthong/item_search)
+- [bukalapak/snowboard](https://github.com/bukalapak/snowboard)
## Installation
@@ -62,19 +98,31 @@ If you were using Mergo **before** April 6th 2015, please check your project wor
## Usage
-You can only merge same-type structs with exported fields initialized as zero value of their type and same-types maps. Mergo won't merge unexported (private) fields but will do recursively any exported one. Also maps will be merged recursively except for structs inside maps (because they are not addressable using Go reflection).
+You can only merge same-type structs with exported fields initialized as zero value of their type and same-types maps. Mergo won't merge unexported (private) fields but will do recursively any exported one. It won't merge empty structs value as [they are not considered zero values](https://golang.org/ref/spec#The_zero_value) either. Also maps will be merged recursively except for structs inside maps (because they are not addressable using Go reflection).
+
+```go
+if err := mergo.Merge(&dst, src); err != nil {
+ // ...
+}
+```
+
+Also, you can merge overwriting values using the transformer `WithOverride`.
- if err := mergo.Merge(&dst, src); err != nil {
- // ...
- }
+```go
+if err := mergo.Merge(&dst, src, mergo.WithOverride); err != nil {
+ // ...
+}
+```
-Additionally, you can map a map[string]interface{} to a struct (and otherwise, from struct to map), following the same restrictions as in Merge(). Keys are capitalized to find each corresponding exported field.
+Additionally, you can map a `map[string]interface{}` to a struct (and otherwise, from struct to map), following the same restrictions as in `Merge()`. Keys are capitalized to find each corresponding exported field.
- if err := mergo.Map(&dst, srcMap); err != nil {
- // ...
- }
+```go
+if err := mergo.Map(&dst, srcMap); err != nil {
+ // ...
+}
+```
-Warning: if you map a struct to map, it won't do it recursively. Don't expect Mergo to map struct members of your struct as map[string]interface{}. They will be just assigned as values.
+Warning: if you map a struct to map, it won't do it recursively. Don't expect Mergo to map struct members of your struct as `map[string]interface{}`. They will be just assigned as values.
More information and examples in [godoc documentation](http://godoc.org/github.com/imdario/mergo).
@@ -96,15 +144,12 @@ type Foo struct {
func main() {
src := Foo{
A: "one",
+ B: 2,
}
-
dest := Foo{
A: "two",
- B: 2,
}
-
mergo.Merge(&dest, src)
-
fmt.Println(dest)
// Will print
// {two 2}
@@ -113,7 +158,56 @@ func main() {
Note: if test are failing due missing package, please execute:
- go get gopkg.in/yaml.v1
+ go get gopkg.in/yaml.v2
+
+### Transformers
+
+Transformers allow to merge specific types differently than in the default behavior. In other words, now you can customize how some types are merged. For example, `time.Time` is a struct; it doesn't have zero value but IsZero can return true because it has fields with zero value. How can we merge a non-zero `time.Time`?
+
+```go
+package main
+
+import (
+ "fmt"
+ "github.com/imdario/mergo"
+ "reflect"
+ "time"
+)
+
+type timeTransfomer struct {
+}
+
+func (t timeTransfomer) Transformer(typ reflect.Type) func(dst, src reflect.Value) error {
+ if typ == reflect.TypeOf(time.Time{}) {
+ return func(dst, src reflect.Value) error {
+ if dst.CanSet() {
+ isZero := dst.MethodByName("IsZero")
+ result := isZero.Call([]reflect.Value{})
+ if result[0].Bool() {
+ dst.Set(src)
+ }
+ }
+ return nil
+ }
+ }
+ return nil
+}
+
+type Snapshot struct {
+ Time time.Time
+ // ...
+}
+
+func main() {
+ src := Snapshot{time.Now()}
+ dest := Snapshot{}
+ mergo.Merge(&dest, src, mergo.WithTransformers(timeTransfomer{}))
+ fmt.Println(dest)
+ // Will print
+ // { 2018-01-12 01:15:00 +0000 UTC m=+0.000000001 }
+}
+```
+
## Contact me
diff --git a/vendor/github.com/imdario/mergo/map.go b/vendor/github.com/imdario/mergo/map.go
index 8e8c4ba8e..6ea38e636 100644
--- a/vendor/github.com/imdario/mergo/map.go
+++ b/vendor/github.com/imdario/mergo/map.go
@@ -31,7 +31,8 @@ func isExported(field reflect.StructField) bool {
// Traverses recursively both values, assigning src's fields values to dst.
// The map argument tracks comparisons that have already been seen, which allows
// short circuiting on recursive types.
-func deepMap(dst, src reflect.Value, visited map[uintptr]*visit, depth int, overwrite bool) (err error) {
+func deepMap(dst, src reflect.Value, visited map[uintptr]*visit, depth int, config *Config) (err error) {
+ overwrite := config.Overwrite
if dst.CanAddr() {
addr := dst.UnsafeAddr()
h := 17 * addr
@@ -61,6 +62,13 @@ func deepMap(dst, src reflect.Value, visited map[uintptr]*visit, depth int, over
dstMap[fieldName] = src.Field(i).Interface()
}
}
+ case reflect.Ptr:
+ if dst.IsNil() {
+ v := reflect.New(dst.Type().Elem())
+ dst.Set(v)
+ }
+ dst = dst.Elem()
+ fallthrough
case reflect.Struct:
srcMap := src.Interface().(map[string]interface{})
for key := range srcMap {
@@ -85,21 +93,24 @@ func deepMap(dst, src reflect.Value, visited map[uintptr]*visit, depth int, over
srcKind = reflect.Ptr
}
}
+
if !srcElement.IsValid() {
continue
}
if srcKind == dstKind {
- if err = deepMerge(dstElement, srcElement, visited, depth+1, overwrite); err != nil {
+ if err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil {
return
}
- } else {
- if srcKind == reflect.Map {
- if err = deepMap(dstElement, srcElement, visited, depth+1, overwrite); err != nil {
- return
- }
- } else {
- return fmt.Errorf("type mismatch on %s field: found %v, expected %v", fieldName, srcKind, dstKind)
+ } else if dstKind == reflect.Interface && dstElement.Kind() == reflect.Interface {
+ if err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil {
+ return
+ }
+ } else if srcKind == reflect.Map {
+ if err = deepMap(dstElement, srcElement, visited, depth+1, config); err != nil {
+ return
}
+ } else {
+ return fmt.Errorf("type mismatch on %s field: found %v, expected %v", fieldName, srcKind, dstKind)
}
}
}
@@ -117,28 +128,35 @@ func deepMap(dst, src reflect.Value, visited map[uintptr]*visit, depth int, over
// doesn't apply if dst is a map.
// This is separated method from Merge because it is cleaner and it keeps sane
// semantics: merging equal types, mapping different (restricted) types.
-func Map(dst, src interface{}) error {
- return _map(dst, src, false)
+func Map(dst, src interface{}, opts ...func(*Config)) error {
+ return _map(dst, src, opts...)
}
-// MapWithOverwrite will do the same as Map except that non-empty dst attributes will be overriden by
+// MapWithOverwrite will do the same as Map except that non-empty dst attributes will be overridden by
// non-empty src attribute values.
-func MapWithOverwrite(dst, src interface{}) error {
- return _map(dst, src, true)
+// Deprecated: Use Map(…) with WithOverride
+func MapWithOverwrite(dst, src interface{}, opts ...func(*Config)) error {
+ return _map(dst, src, append(opts, WithOverride)...)
}
-func _map(dst, src interface{}, overwrite bool) error {
+func _map(dst, src interface{}, opts ...func(*Config)) error {
var (
vDst, vSrc reflect.Value
err error
)
+ config := &Config{}
+
+ for _, opt := range opts {
+ opt(config)
+ }
+
if vDst, vSrc, err = resolveValues(dst, src); err != nil {
return err
}
// To be friction-less, we redirect equal-type arguments
// to deepMerge. Only because arguments can be anything.
if vSrc.Kind() == vDst.Kind() {
- return deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, overwrite)
+ return deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, config)
}
switch vSrc.Kind() {
case reflect.Struct:
@@ -152,5 +170,5 @@ func _map(dst, src interface{}, overwrite bool) error {
default:
return ErrNotSupported
}
- return deepMap(vDst, vSrc, make(map[uintptr]*visit), 0, overwrite)
+ return deepMap(vDst, vSrc, make(map[uintptr]*visit), 0, config)
}
diff --git a/vendor/github.com/imdario/mergo/merge.go b/vendor/github.com/imdario/mergo/merge.go
index 11e55b1e2..44f70a89d 100644
--- a/vendor/github.com/imdario/mergo/merge.go
+++ b/vendor/github.com/imdario/mergo/merge.go
@@ -9,13 +9,38 @@
package mergo
import (
+ "fmt"
"reflect"
)
+func hasExportedField(dst reflect.Value) (exported bool) {
+ for i, n := 0, dst.NumField(); i < n; i++ {
+ field := dst.Type().Field(i)
+ if field.Anonymous && dst.Field(i).Kind() == reflect.Struct {
+ exported = exported || hasExportedField(dst.Field(i))
+ } else {
+ exported = exported || len(field.PkgPath) == 0
+ }
+ }
+ return
+}
+
+type Config struct {
+ Overwrite bool
+ AppendSlice bool
+ Transformers Transformers
+}
+
+type Transformers interface {
+ Transformer(reflect.Type) func(dst, src reflect.Value) error
+}
+
// Traverses recursively both values, assigning src's fields values to dst.
// The map argument tracks comparisons that have already been seen, which allows
// short circuiting on recursive types.
-func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, overwrite bool) (err error) {
+func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, config *Config) (err error) {
+ overwrite := config.Overwrite
+
if !src.IsValid() {
return
}
@@ -32,14 +57,31 @@ func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, ov
// Remember, remember...
visited[h] = &visit{addr, typ, seen}
}
+
+ if config.Transformers != nil && !isEmptyValue(dst) {
+ if fn := config.Transformers.Transformer(dst.Type()); fn != nil {
+ err = fn(dst, src)
+ return
+ }
+ }
+
switch dst.Kind() {
case reflect.Struct:
- for i, n := 0, dst.NumField(); i < n; i++ {
- if err = deepMerge(dst.Field(i), src.Field(i), visited, depth+1, overwrite); err != nil {
- return
+ if hasExportedField(dst) {
+ for i, n := 0, dst.NumField(); i < n; i++ {
+ if err = deepMerge(dst.Field(i), src.Field(i), visited, depth+1, config); err != nil {
+ return
+ }
+ }
+ } else {
+ if dst.CanSet() && !isEmptyValue(src) && (overwrite || isEmptyValue(dst)) {
+ dst.Set(src)
}
}
case reflect.Map:
+ if dst.IsNil() && !src.IsNil() {
+ dst.Set(reflect.MakeMap(dst.Type()))
+ }
for _, key := range src.MapKeys() {
srcElement := src.MapIndex(key)
if !srcElement.IsValid() {
@@ -47,7 +89,7 @@ func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, ov
}
dstElement := dst.MapIndex(key)
switch srcElement.Kind() {
- case reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.Interface, reflect.Slice:
+ case reflect.Chan, reflect.Func, reflect.Map, reflect.Interface, reflect.Slice:
if srcElement.IsNil() {
continue
}
@@ -62,28 +104,90 @@ func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, ov
case reflect.Ptr:
fallthrough
case reflect.Map:
- if err = deepMerge(dstElement, srcElement, visited, depth+1, overwrite); err != nil {
+ srcMapElm := srcElement
+ dstMapElm := dstElement
+ if srcMapElm.CanInterface() {
+ srcMapElm = reflect.ValueOf(srcMapElm.Interface())
+ if dstMapElm.IsValid() {
+ dstMapElm = reflect.ValueOf(dstMapElm.Interface())
+ }
+ }
+ if err = deepMerge(dstMapElm, srcMapElm, visited, depth+1, config); err != nil {
return
}
+ case reflect.Slice:
+ srcSlice := reflect.ValueOf(srcElement.Interface())
+
+ var dstSlice reflect.Value
+ if !dstElement.IsValid() || dstElement.IsNil() {
+ dstSlice = reflect.MakeSlice(srcSlice.Type(), 0, srcSlice.Len())
+ } else {
+ dstSlice = reflect.ValueOf(dstElement.Interface())
+ }
+
+ if !isEmptyValue(src) && (overwrite || isEmptyValue(dst)) && !config.AppendSlice {
+ dstSlice = srcSlice
+ } else if config.AppendSlice {
+ if srcSlice.Type() != dstSlice.Type() {
+ return fmt.Errorf("cannot append two slice with different type (%s, %s)", srcSlice.Type(), dstSlice.Type())
+ }
+ dstSlice = reflect.AppendSlice(dstSlice, srcSlice)
+ }
+ dst.SetMapIndex(key, dstSlice)
}
}
- if !isEmptyValue(srcElement) && (overwrite || (!dstElement.IsValid() || isEmptyValue(dst))) {
+ if dstElement.IsValid() && reflect.TypeOf(srcElement.Interface()).Kind() == reflect.Map {
+ continue
+ }
+
+ if srcElement.IsValid() && (overwrite || (!dstElement.IsValid() || isEmptyValue(dstElement))) {
if dst.IsNil() {
dst.Set(reflect.MakeMap(dst.Type()))
}
dst.SetMapIndex(key, srcElement)
}
}
+ case reflect.Slice:
+ if !dst.CanSet() {
+ break
+ }
+ if !isEmptyValue(src) && (overwrite || isEmptyValue(dst)) && !config.AppendSlice {
+ dst.Set(src)
+ } else if config.AppendSlice {
+ if src.Type() != dst.Type() {
+ return fmt.Errorf("cannot append two slice with different type (%s, %s)", src.Type(), dst.Type())
+ }
+ dst.Set(reflect.AppendSlice(dst, src))
+ }
case reflect.Ptr:
fallthrough
case reflect.Interface:
if src.IsNil() {
break
- } else if dst.IsNil() {
+ }
+ if src.Kind() != reflect.Interface {
+ if dst.IsNil() || overwrite {
+ if dst.CanSet() && (overwrite || isEmptyValue(dst)) {
+ dst.Set(src)
+ }
+ } else if src.Kind() == reflect.Ptr {
+ if err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, config); err != nil {
+ return
+ }
+ } else if dst.Elem().Type() == src.Type() {
+ if err = deepMerge(dst.Elem(), src, visited, depth+1, config); err != nil {
+ return
+ }
+ } else {
+ return ErrDifferentArgumentsTypes
+ }
+ break
+ }
+ if dst.IsNil() || overwrite {
if dst.CanSet() && (overwrite || isEmptyValue(dst)) {
dst.Set(src)
}
- } else if err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, overwrite); err != nil {
+ } else if err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, config); err != nil {
return
}
default:
@@ -98,26 +202,51 @@ func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, ov
// src attributes if they themselves are not empty. dst and src must be valid same-type structs
// and dst must be a pointer to struct.
// It won't merge unexported (private) fields and will do recursively any exported field.
-func Merge(dst, src interface{}) error {
- return merge(dst, src, false)
+func Merge(dst, src interface{}, opts ...func(*Config)) error {
+ return merge(dst, src, opts...)
}
// MergeWithOverwrite will do the same as Merge except that non-empty dst attributes will be overriden by
// non-empty src attribute values.
-func MergeWithOverwrite(dst, src interface{}) error {
- return merge(dst, src, true)
+// Deprecated: use Merge(…) with WithOverride
+func MergeWithOverwrite(dst, src interface{}, opts ...func(*Config)) error {
+ return merge(dst, src, append(opts, WithOverride)...)
+}
+
+// WithTransformers adds transformers to merge, allowing to customize the merging of some types.
+func WithTransformers(transformers Transformers) func(*Config) {
+ return func(config *Config) {
+ config.Transformers = transformers
+ }
+}
+
+// WithOverride will make merge override non-empty dst attributes with non-empty src attributes values.
+func WithOverride(config *Config) {
+ config.Overwrite = true
}
-func merge(dst, src interface{}, overwrite bool) error {
+// WithAppendSlice will make merge append slices instead of overwriting it
+func WithAppendSlice(config *Config) {
+ config.AppendSlice = true
+}
+
+func merge(dst, src interface{}, opts ...func(*Config)) error {
var (
vDst, vSrc reflect.Value
err error
)
+
+ config := &Config{}
+
+ for _, opt := range opts {
+ opt(config)
+ }
+
if vDst, vSrc, err = resolveValues(dst, src); err != nil {
return err
}
if vDst.Type() != vSrc.Type() {
return ErrDifferentArgumentsTypes
}
- return deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, overwrite)
+ return deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, config)
}
diff --git a/vendor/github.com/imdario/mergo/mergo.go b/vendor/github.com/imdario/mergo/mergo.go
index f8a0991ec..a82fea2fd 100644
--- a/vendor/github.com/imdario/mergo/mergo.go
+++ b/vendor/github.com/imdario/mergo/mergo.go
@@ -32,7 +32,7 @@ type visit struct {
next *visit
}
-// From src/pkg/encoding/json.
+// From src/pkg/encoding/json/encode.go.
func isEmptyValue(v reflect.Value) bool {
switch v.Kind() {
case reflect.Array, reflect.Map, reflect.Slice, reflect.String:
@@ -46,7 +46,14 @@ func isEmptyValue(v reflect.Value) bool {
case reflect.Float32, reflect.Float64:
return v.Float() == 0
case reflect.Interface, reflect.Ptr:
+ if v.IsNil() {
+ return true
+ }
+ return isEmptyValue(v.Elem())
+ case reflect.Func:
return v.IsNil()
+ case reflect.Invalid:
+ return true
}
return false
}
diff --git a/vendor/github.com/json-iterator/go/README.md b/vendor/github.com/json-iterator/go/README.md
index 23a4b57c8..54d5afe95 100644
--- a/vendor/github.com/json-iterator/go/README.md
+++ b/vendor/github.com/json-iterator/go/README.md
@@ -8,6 +8,8 @@
A high-performance 100% compatible drop-in replacement of "encoding/json"
+You can also use thrift like JSON using [thrift-iterator](https://github.com/thrift-iterator/go)
+
```
Go开发者们请加入我们,滴滴出行平台技术部 taowen@didichuxing.com
```
@@ -29,6 +31,9 @@ Raw Result (easyjson requires static code generation)
| easyjson encode | 883 ns/op | 576 B/op | 3 allocs/op |
| jsoniter encode | 837 ns/op | 384 B/op | 4 allocs/op |
+Always benchmark with your own workload.
+The result depends heavily on the data input.
+
# Usage
100% compatibility with standard lib
@@ -44,7 +49,9 @@ with
```go
import "github.com/json-iterator/go"
-jsoniter.Marshal(&data)
+
+var json = jsoniter.ConfigCompatibleWithStandardLibrary
+json.Marshal(&data)
```
Replace
@@ -58,7 +65,9 @@ with
```go
import "github.com/json-iterator/go"
-jsoniter.Unmarshal(input, &data)
+
+var json = jsoniter.ConfigCompatibleWithStandardLibrary
+json.Unmarshal(input, &data)
```
[More documentation](http://jsoniter.com/migrate-from-go-std.html)
@@ -76,5 +85,7 @@ Contributors
* [thockin](https://github.com/thockin)
* [mattn](https://github.com/mattn)
* [cch123](https://github.com/cch123)
+* [Oleg Shaldybin](https://github.com/olegshaldybin)
+* [Jason Toffaletti](https://github.com/toffaletti)
Report issue or pull request, or email taowen@gmail.com, or [![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://gitter.im/json-iterator/Lobby)
diff --git a/vendor/github.com/json-iterator/go/feature_adapter.go b/vendor/github.com/json-iterator/go/adapter.go
index edb477c4f..e674d0f39 100644
--- a/vendor/github.com/json-iterator/go/feature_adapter.go
+++ b/vendor/github.com/json-iterator/go/adapter.go
@@ -16,15 +16,6 @@ func Unmarshal(data []byte, v interface{}) error {
return ConfigDefault.Unmarshal(data, v)
}
-func lastNotSpacePos(data []byte) int {
- for i := len(data) - 1; i >= 0; i-- {
- if data[i] != ' ' && data[i] != '\t' && data[i] != '\r' && data[i] != '\n' {
- return i + 1
- }
- }
- return 0
-}
-
// UnmarshalFromString convenient method to read from string instead of []byte
func UnmarshalFromString(str string, v interface{}) error {
return ConfigDefault.UnmarshalFromString(str, v)
@@ -71,6 +62,11 @@ type Decoder struct {
// Decode decode JSON into interface{}
func (adapter *Decoder) Decode(obj interface{}) error {
+ if adapter.iter.head == adapter.iter.tail && adapter.iter.reader != nil {
+ if !adapter.iter.loadMore() {
+ return io.EOF
+ }
+ }
adapter.iter.ReadVal(obj)
err := adapter.iter.Error
if err == io.EOF {
@@ -81,7 +77,16 @@ func (adapter *Decoder) Decode(obj interface{}) error {
// More is there more?
func (adapter *Decoder) More() bool {
- return adapter.iter.head != adapter.iter.tail
+ iter := adapter.iter
+ if iter.Error != nil {
+ return false
+ }
+ c := iter.nextToken()
+ if c == 0 {
+ return false
+ }
+ iter.unreadByte()
+ return c != ']' && c != '}'
}
// Buffered remaining buffer
@@ -90,11 +95,21 @@ func (adapter *Decoder) Buffered() io.Reader {
return bytes.NewReader(remaining)
}
-// UseNumber for number JSON element, use float64 or json.NumberValue (alias of string)
+// UseNumber causes the Decoder to unmarshal a number into an interface{} as a
+// Number instead of as a float64.
func (adapter *Decoder) UseNumber() {
- origCfg := adapter.iter.cfg.configBeforeFrozen
- origCfg.UseNumber = true
- adapter.iter.cfg = origCfg.Froze().(*frozenConfig)
+ cfg := adapter.iter.cfg.configBeforeFrozen
+ cfg.UseNumber = true
+ adapter.iter.cfg = cfg.frozeWithCacheReuse(adapter.iter.cfg.extraExtensions)
+}
+
+// DisallowUnknownFields causes the Decoder to return an error when the destination
+// is a struct and the input contains object keys which do not match any
+// non-ignored, exported fields in the destination.
+func (adapter *Decoder) DisallowUnknownFields() {
+ cfg := adapter.iter.cfg.configBeforeFrozen
+ cfg.DisallowUnknownFields = true
+ adapter.iter.cfg = cfg.frozeWithCacheReuse(adapter.iter.cfg.extraExtensions)
}
// NewEncoder same as json.NewEncoder
@@ -110,18 +125,26 @@ type Encoder struct {
// Encode encode interface{} as JSON to io.Writer
func (adapter *Encoder) Encode(val interface{}) error {
adapter.stream.WriteVal(val)
+ adapter.stream.WriteRaw("\n")
adapter.stream.Flush()
return adapter.stream.Error
}
// SetIndent set the indention. Prefix is not supported
func (adapter *Encoder) SetIndent(prefix, indent string) {
- adapter.stream.cfg.indentionStep = len(indent)
+ config := adapter.stream.cfg.configBeforeFrozen
+ config.IndentionStep = len(indent)
+ adapter.stream.cfg = config.frozeWithCacheReuse(adapter.stream.cfg.extraExtensions)
}
// SetEscapeHTML escape html by default, set to false to disable
func (adapter *Encoder) SetEscapeHTML(escapeHTML bool) {
config := adapter.stream.cfg.configBeforeFrozen
config.EscapeHTML = escapeHTML
- adapter.stream.cfg = config.Froze().(*frozenConfig)
+ adapter.stream.cfg = config.frozeWithCacheReuse(adapter.stream.cfg.extraExtensions)
+}
+
+// Valid reports whether data is a valid JSON encoding.
+func Valid(data []byte) bool {
+ return ConfigDefault.Valid(data)
}
diff --git a/vendor/github.com/json-iterator/go/feature_any.go b/vendor/github.com/json-iterator/go/any.go
index 6733dce4c..daecfed61 100644
--- a/vendor/github.com/json-iterator/go/feature_any.go
+++ b/vendor/github.com/json-iterator/go/any.go
@@ -1,9 +1,13 @@
package jsoniter
import (
+ "errors"
"fmt"
+ "github.com/modern-go/reflect2"
"io"
"reflect"
+ "strconv"
+ "unsafe"
)
// Any generic object representation.
@@ -24,7 +28,6 @@ type Any interface {
ToString() string
ToVal(val interface{})
Get(path ...interface{}) Any
- // TODO: add Set
Size() int
Keys() []string
GetInterface() interface{}
@@ -34,7 +37,7 @@ type Any interface {
type baseAny struct{}
func (any *baseAny) Get(path ...interface{}) Any {
- return &invalidAny{baseAny{}, fmt.Errorf("Get %v from simple value", path)}
+ return &invalidAny{baseAny{}, fmt.Errorf("GetIndex %v from simple value", path)}
}
func (any *baseAny) Size() int {
@@ -88,7 +91,7 @@ func Wrap(val interface{}) Any {
if isAny {
return asAny
}
- typ := reflect.TypeOf(val)
+ typ := reflect2.TypeOf(val)
switch typ.Kind() {
case reflect.Slice:
return wrapArray(val)
@@ -99,6 +102,9 @@ func Wrap(val interface{}) Any {
case reflect.String:
return WrapString(val.(string))
case reflect.Int:
+ if strconv.IntSize == 32 {
+ return WrapInt32(int32(val.(int)))
+ }
return WrapInt64(int64(val.(int)))
case reflect.Int8:
return WrapInt32(int32(val.(int8)))
@@ -109,7 +115,15 @@ func Wrap(val interface{}) Any {
case reflect.Int64:
return WrapInt64(val.(int64))
case reflect.Uint:
+ if strconv.IntSize == 32 {
+ return WrapUint32(uint32(val.(uint)))
+ }
return WrapUint64(uint64(val.(uint)))
+ case reflect.Uintptr:
+ if ptrSize == 32 {
+ return WrapUint32(uint32(val.(uintptr)))
+ }
+ return WrapUint64(uint64(val.(uintptr)))
case reflect.Uint8:
return WrapUint32(uint32(val.(uint8)))
case reflect.Uint16:
@@ -157,6 +171,8 @@ func (iter *Iterator) readAny() Any {
return iter.readArrayAny()
case '-':
return iter.readNumberAny(false)
+ case 0:
+ return &invalidAny{baseAny{}, errors.New("input is empty")}
default:
return iter.readNumberAny(true)
}
@@ -240,3 +256,66 @@ func locatePath(iter *Iterator, path []interface{}) Any {
}
return iter.readAny()
}
+
+var anyType = reflect2.TypeOfPtr((*Any)(nil)).Elem()
+
+func createDecoderOfAny(ctx *ctx, typ reflect2.Type) ValDecoder {
+ if typ == anyType {
+ return &directAnyCodec{}
+ }
+ if typ.Implements(anyType) {
+ return &anyCodec{
+ valType: typ,
+ }
+ }
+ return nil
+}
+
+func createEncoderOfAny(ctx *ctx, typ reflect2.Type) ValEncoder {
+ if typ == anyType {
+ return &directAnyCodec{}
+ }
+ if typ.Implements(anyType) {
+ return &anyCodec{
+ valType: typ,
+ }
+ }
+ return nil
+}
+
+type anyCodec struct {
+ valType reflect2.Type
+}
+
+func (codec *anyCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ panic("not implemented")
+}
+
+func (codec *anyCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ obj := codec.valType.UnsafeIndirect(ptr)
+ any := obj.(Any)
+ any.WriteTo(stream)
+}
+
+func (codec *anyCodec) IsEmpty(ptr unsafe.Pointer) bool {
+ obj := codec.valType.UnsafeIndirect(ptr)
+ any := obj.(Any)
+ return any.Size() == 0
+}
+
+type directAnyCodec struct {
+}
+
+func (codec *directAnyCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ *(*Any)(ptr) = iter.readAny()
+}
+
+func (codec *directAnyCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ any := *(*Any)(ptr)
+ any.WriteTo(stream)
+}
+
+func (codec *directAnyCodec) IsEmpty(ptr unsafe.Pointer) bool {
+ any := *(*Any)(ptr)
+ return any.Size() == 0
+}
diff --git a/vendor/github.com/json-iterator/go/feature_any_array.go b/vendor/github.com/json-iterator/go/any_array.go
index 0449e9aa4..0449e9aa4 100644
--- a/vendor/github.com/json-iterator/go/feature_any_array.go
+++ b/vendor/github.com/json-iterator/go/any_array.go
diff --git a/vendor/github.com/json-iterator/go/feature_any_bool.go b/vendor/github.com/json-iterator/go/any_bool.go
index 9452324af..9452324af 100644
--- a/vendor/github.com/json-iterator/go/feature_any_bool.go
+++ b/vendor/github.com/json-iterator/go/any_bool.go
diff --git a/vendor/github.com/json-iterator/go/feature_any_float.go b/vendor/github.com/json-iterator/go/any_float.go
index 35fdb0949..35fdb0949 100644
--- a/vendor/github.com/json-iterator/go/feature_any_float.go
+++ b/vendor/github.com/json-iterator/go/any_float.go
diff --git a/vendor/github.com/json-iterator/go/feature_any_int32.go b/vendor/github.com/json-iterator/go/any_int32.go
index 1b56f3991..1b56f3991 100644
--- a/vendor/github.com/json-iterator/go/feature_any_int32.go
+++ b/vendor/github.com/json-iterator/go/any_int32.go
diff --git a/vendor/github.com/json-iterator/go/feature_any_int64.go b/vendor/github.com/json-iterator/go/any_int64.go
index c440d72b6..c440d72b6 100644
--- a/vendor/github.com/json-iterator/go/feature_any_int64.go
+++ b/vendor/github.com/json-iterator/go/any_int64.go
diff --git a/vendor/github.com/json-iterator/go/feature_any_invalid.go b/vendor/github.com/json-iterator/go/any_invalid.go
index 1d859eac3..1d859eac3 100644
--- a/vendor/github.com/json-iterator/go/feature_any_invalid.go
+++ b/vendor/github.com/json-iterator/go/any_invalid.go
diff --git a/vendor/github.com/json-iterator/go/feature_any_nil.go b/vendor/github.com/json-iterator/go/any_nil.go
index d04cb54c1..d04cb54c1 100644
--- a/vendor/github.com/json-iterator/go/feature_any_nil.go
+++ b/vendor/github.com/json-iterator/go/any_nil.go
diff --git a/vendor/github.com/json-iterator/go/feature_any_number.go b/vendor/github.com/json-iterator/go/any_number.go
index 4e1c27641..9d1e901a6 100644
--- a/vendor/github.com/json-iterator/go/feature_any_number.go
+++ b/vendor/github.com/json-iterator/go/any_number.go
@@ -1,6 +1,9 @@
package jsoniter
-import "unsafe"
+import (
+ "io"
+ "unsafe"
+)
type numberLazyAny struct {
baseAny
@@ -29,7 +32,9 @@ func (any *numberLazyAny) ToInt() int {
iter := any.cfg.BorrowIterator(any.buf)
defer any.cfg.ReturnIterator(iter)
val := iter.ReadInt()
- any.err = iter.Error
+ if iter.Error != nil && iter.Error != io.EOF {
+ any.err = iter.Error
+ }
return val
}
@@ -37,7 +42,9 @@ func (any *numberLazyAny) ToInt32() int32 {
iter := any.cfg.BorrowIterator(any.buf)
defer any.cfg.ReturnIterator(iter)
val := iter.ReadInt32()
- any.err = iter.Error
+ if iter.Error != nil && iter.Error != io.EOF {
+ any.err = iter.Error
+ }
return val
}
@@ -45,7 +52,9 @@ func (any *numberLazyAny) ToInt64() int64 {
iter := any.cfg.BorrowIterator(any.buf)
defer any.cfg.ReturnIterator(iter)
val := iter.ReadInt64()
- any.err = iter.Error
+ if iter.Error != nil && iter.Error != io.EOF {
+ any.err = iter.Error
+ }
return val
}
@@ -53,7 +62,9 @@ func (any *numberLazyAny) ToUint() uint {
iter := any.cfg.BorrowIterator(any.buf)
defer any.cfg.ReturnIterator(iter)
val := iter.ReadUint()
- any.err = iter.Error
+ if iter.Error != nil && iter.Error != io.EOF {
+ any.err = iter.Error
+ }
return val
}
@@ -61,7 +72,9 @@ func (any *numberLazyAny) ToUint32() uint32 {
iter := any.cfg.BorrowIterator(any.buf)
defer any.cfg.ReturnIterator(iter)
val := iter.ReadUint32()
- any.err = iter.Error
+ if iter.Error != nil && iter.Error != io.EOF {
+ any.err = iter.Error
+ }
return val
}
@@ -69,7 +82,9 @@ func (any *numberLazyAny) ToUint64() uint64 {
iter := any.cfg.BorrowIterator(any.buf)
defer any.cfg.ReturnIterator(iter)
val := iter.ReadUint64()
- any.err = iter.Error
+ if iter.Error != nil && iter.Error != io.EOF {
+ any.err = iter.Error
+ }
return val
}
@@ -77,7 +92,9 @@ func (any *numberLazyAny) ToFloat32() float32 {
iter := any.cfg.BorrowIterator(any.buf)
defer any.cfg.ReturnIterator(iter)
val := iter.ReadFloat32()
- any.err = iter.Error
+ if iter.Error != nil && iter.Error != io.EOF {
+ any.err = iter.Error
+ }
return val
}
@@ -85,7 +102,9 @@ func (any *numberLazyAny) ToFloat64() float64 {
iter := any.cfg.BorrowIterator(any.buf)
defer any.cfg.ReturnIterator(iter)
val := iter.ReadFloat64()
- any.err = iter.Error
+ if iter.Error != nil && iter.Error != io.EOF {
+ any.err = iter.Error
+ }
return val
}
diff --git a/vendor/github.com/json-iterator/go/feature_any_object.go b/vendor/github.com/json-iterator/go/any_object.go
index c44ef5c98..c44ef5c98 100644
--- a/vendor/github.com/json-iterator/go/feature_any_object.go
+++ b/vendor/github.com/json-iterator/go/any_object.go
diff --git a/vendor/github.com/json-iterator/go/feature_any_string.go b/vendor/github.com/json-iterator/go/any_str.go
index abf060bd5..a4b93c78c 100644
--- a/vendor/github.com/json-iterator/go/feature_any_string.go
+++ b/vendor/github.com/json-iterator/go/any_str.go
@@ -14,7 +14,7 @@ func (any *stringAny) Get(path ...interface{}) Any {
if len(path) == 0 {
return any
}
- return &invalidAny{baseAny{}, fmt.Errorf("Get %v from simple value", path)}
+ return &invalidAny{baseAny{}, fmt.Errorf("GetIndex %v from simple value", path)}
}
func (any *stringAny) Parse() *Iterator {
diff --git a/vendor/github.com/json-iterator/go/feature_any_uint32.go b/vendor/github.com/json-iterator/go/any_uint32.go
index 656bbd33d..656bbd33d 100644
--- a/vendor/github.com/json-iterator/go/feature_any_uint32.go
+++ b/vendor/github.com/json-iterator/go/any_uint32.go
diff --git a/vendor/github.com/json-iterator/go/feature_any_uint64.go b/vendor/github.com/json-iterator/go/any_uint64.go
index 7df2fce33..7df2fce33 100644
--- a/vendor/github.com/json-iterator/go/feature_any_uint64.go
+++ b/vendor/github.com/json-iterator/go/any_uint64.go
diff --git a/vendor/github.com/json-iterator/go/config.go b/vendor/github.com/json-iterator/go/config.go
new file mode 100644
index 000000000..8c58fcba5
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/config.go
@@ -0,0 +1,375 @@
+package jsoniter
+
+import (
+ "encoding/json"
+ "io"
+ "reflect"
+ "sync"
+ "unsafe"
+
+ "github.com/modern-go/concurrent"
+ "github.com/modern-go/reflect2"
+)
+
+// Config customize how the API should behave.
+// The API is created from Config by Froze.
+type Config struct {
+ IndentionStep int
+ MarshalFloatWith6Digits bool
+ EscapeHTML bool
+ SortMapKeys bool
+ UseNumber bool
+ DisallowUnknownFields bool
+ TagKey string
+ OnlyTaggedField bool
+ ValidateJsonRawMessage bool
+ ObjectFieldMustBeSimpleString bool
+ CaseSensitive bool
+}
+
+// API the public interface of this package.
+// Primary Marshal and Unmarshal.
+type API interface {
+ IteratorPool
+ StreamPool
+ MarshalToString(v interface{}) (string, error)
+ Marshal(v interface{}) ([]byte, error)
+ MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)
+ UnmarshalFromString(str string, v interface{}) error
+ Unmarshal(data []byte, v interface{}) error
+ Get(data []byte, path ...interface{}) Any
+ NewEncoder(writer io.Writer) *Encoder
+ NewDecoder(reader io.Reader) *Decoder
+ Valid(data []byte) bool
+ RegisterExtension(extension Extension)
+ DecoderOf(typ reflect2.Type) ValDecoder
+ EncoderOf(typ reflect2.Type) ValEncoder
+}
+
+// ConfigDefault the default API
+var ConfigDefault = Config{
+ EscapeHTML: true,
+}.Froze()
+
+// ConfigCompatibleWithStandardLibrary tries to be 100% compatible with standard library behavior
+var ConfigCompatibleWithStandardLibrary = Config{
+ EscapeHTML: true,
+ SortMapKeys: true,
+ ValidateJsonRawMessage: true,
+}.Froze()
+
+// ConfigFastest marshals float with only 6 digits precision
+var ConfigFastest = Config{
+ EscapeHTML: false,
+ MarshalFloatWith6Digits: true, // will lose precession
+ ObjectFieldMustBeSimpleString: true, // do not unescape object field
+}.Froze()
+
+type frozenConfig struct {
+ configBeforeFrozen Config
+ sortMapKeys bool
+ indentionStep int
+ objectFieldMustBeSimpleString bool
+ onlyTaggedField bool
+ disallowUnknownFields bool
+ decoderCache *concurrent.Map
+ encoderCache *concurrent.Map
+ encoderExtension Extension
+ decoderExtension Extension
+ extraExtensions []Extension
+ streamPool *sync.Pool
+ iteratorPool *sync.Pool
+ caseSensitive bool
+}
+
+func (cfg *frozenConfig) initCache() {
+ cfg.decoderCache = concurrent.NewMap()
+ cfg.encoderCache = concurrent.NewMap()
+}
+
+func (cfg *frozenConfig) addDecoderToCache(cacheKey uintptr, decoder ValDecoder) {
+ cfg.decoderCache.Store(cacheKey, decoder)
+}
+
+func (cfg *frozenConfig) addEncoderToCache(cacheKey uintptr, encoder ValEncoder) {
+ cfg.encoderCache.Store(cacheKey, encoder)
+}
+
+func (cfg *frozenConfig) getDecoderFromCache(cacheKey uintptr) ValDecoder {
+ decoder, found := cfg.decoderCache.Load(cacheKey)
+ if found {
+ return decoder.(ValDecoder)
+ }
+ return nil
+}
+
+func (cfg *frozenConfig) getEncoderFromCache(cacheKey uintptr) ValEncoder {
+ encoder, found := cfg.encoderCache.Load(cacheKey)
+ if found {
+ return encoder.(ValEncoder)
+ }
+ return nil
+}
+
+var cfgCache = concurrent.NewMap()
+
+func getFrozenConfigFromCache(cfg Config) *frozenConfig {
+ obj, found := cfgCache.Load(cfg)
+ if found {
+ return obj.(*frozenConfig)
+ }
+ return nil
+}
+
+func addFrozenConfigToCache(cfg Config, frozenConfig *frozenConfig) {
+ cfgCache.Store(cfg, frozenConfig)
+}
+
+// Froze forge API from config
+func (cfg Config) Froze() API {
+ api := &frozenConfig{
+ sortMapKeys: cfg.SortMapKeys,
+ indentionStep: cfg.IndentionStep,
+ objectFieldMustBeSimpleString: cfg.ObjectFieldMustBeSimpleString,
+ onlyTaggedField: cfg.OnlyTaggedField,
+ disallowUnknownFields: cfg.DisallowUnknownFields,
+ caseSensitive: cfg.CaseSensitive,
+ }
+ api.streamPool = &sync.Pool{
+ New: func() interface{} {
+ return NewStream(api, nil, 512)
+ },
+ }
+ api.iteratorPool = &sync.Pool{
+ New: func() interface{} {
+ return NewIterator(api)
+ },
+ }
+ api.initCache()
+ encoderExtension := EncoderExtension{}
+ decoderExtension := DecoderExtension{}
+ if cfg.MarshalFloatWith6Digits {
+ api.marshalFloatWith6Digits(encoderExtension)
+ }
+ if cfg.EscapeHTML {
+ api.escapeHTML(encoderExtension)
+ }
+ if cfg.UseNumber {
+ api.useNumber(decoderExtension)
+ }
+ if cfg.ValidateJsonRawMessage {
+ api.validateJsonRawMessage(encoderExtension)
+ }
+ api.encoderExtension = encoderExtension
+ api.decoderExtension = decoderExtension
+ api.configBeforeFrozen = cfg
+ return api
+}
+
+func (cfg Config) frozeWithCacheReuse(extraExtensions []Extension) *frozenConfig {
+ api := getFrozenConfigFromCache(cfg)
+ if api != nil {
+ return api
+ }
+ api = cfg.Froze().(*frozenConfig)
+ for _, extension := range extraExtensions {
+ api.RegisterExtension(extension)
+ }
+ addFrozenConfigToCache(cfg, api)
+ return api
+}
+
+func (cfg *frozenConfig) validateJsonRawMessage(extension EncoderExtension) {
+ encoder := &funcEncoder{func(ptr unsafe.Pointer, stream *Stream) {
+ rawMessage := *(*json.RawMessage)(ptr)
+ iter := cfg.BorrowIterator([]byte(rawMessage))
+ iter.Read()
+ if iter.Error != nil {
+ stream.WriteRaw("null")
+ } else {
+ cfg.ReturnIterator(iter)
+ stream.WriteRaw(string(rawMessage))
+ }
+ }, func(ptr unsafe.Pointer) bool {
+ return len(*((*json.RawMessage)(ptr))) == 0
+ }}
+ extension[reflect2.TypeOfPtr((*json.RawMessage)(nil)).Elem()] = encoder
+ extension[reflect2.TypeOfPtr((*RawMessage)(nil)).Elem()] = encoder
+}
+
+func (cfg *frozenConfig) useNumber(extension DecoderExtension) {
+ extension[reflect2.TypeOfPtr((*interface{})(nil)).Elem()] = &funcDecoder{func(ptr unsafe.Pointer, iter *Iterator) {
+ exitingValue := *((*interface{})(ptr))
+ if exitingValue != nil && reflect.TypeOf(exitingValue).Kind() == reflect.Ptr {
+ iter.ReadVal(exitingValue)
+ return
+ }
+ if iter.WhatIsNext() == NumberValue {
+ *((*interface{})(ptr)) = json.Number(iter.readNumberAsString())
+ } else {
+ *((*interface{})(ptr)) = iter.Read()
+ }
+ }}
+}
+func (cfg *frozenConfig) getTagKey() string {
+ tagKey := cfg.configBeforeFrozen.TagKey
+ if tagKey == "" {
+ return "json"
+ }
+ return tagKey
+}
+
+func (cfg *frozenConfig) RegisterExtension(extension Extension) {
+ cfg.extraExtensions = append(cfg.extraExtensions, extension)
+ copied := cfg.configBeforeFrozen
+ cfg.configBeforeFrozen = copied
+}
+
+type lossyFloat32Encoder struct {
+}
+
+func (encoder *lossyFloat32Encoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteFloat32Lossy(*((*float32)(ptr)))
+}
+
+func (encoder *lossyFloat32Encoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*float32)(ptr)) == 0
+}
+
+type lossyFloat64Encoder struct {
+}
+
+func (encoder *lossyFloat64Encoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteFloat64Lossy(*((*float64)(ptr)))
+}
+
+func (encoder *lossyFloat64Encoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*float64)(ptr)) == 0
+}
+
+// EnableLossyFloatMarshalling keeps 10**(-6) precision
+// for float variables for better performance.
+func (cfg *frozenConfig) marshalFloatWith6Digits(extension EncoderExtension) {
+ // for better performance
+ extension[reflect2.TypeOfPtr((*float32)(nil)).Elem()] = &lossyFloat32Encoder{}
+ extension[reflect2.TypeOfPtr((*float64)(nil)).Elem()] = &lossyFloat64Encoder{}
+}
+
+type htmlEscapedStringEncoder struct {
+}
+
+func (encoder *htmlEscapedStringEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ str := *((*string)(ptr))
+ stream.WriteStringWithHTMLEscaped(str)
+}
+
+func (encoder *htmlEscapedStringEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*string)(ptr)) == ""
+}
+
+func (cfg *frozenConfig) escapeHTML(encoderExtension EncoderExtension) {
+ encoderExtension[reflect2.TypeOfPtr((*string)(nil)).Elem()] = &htmlEscapedStringEncoder{}
+}
+
+func (cfg *frozenConfig) cleanDecoders() {
+ typeDecoders = map[string]ValDecoder{}
+ fieldDecoders = map[string]ValDecoder{}
+ *cfg = *(cfg.configBeforeFrozen.Froze().(*frozenConfig))
+}
+
+func (cfg *frozenConfig) cleanEncoders() {
+ typeEncoders = map[string]ValEncoder{}
+ fieldEncoders = map[string]ValEncoder{}
+ *cfg = *(cfg.configBeforeFrozen.Froze().(*frozenConfig))
+}
+
+func (cfg *frozenConfig) MarshalToString(v interface{}) (string, error) {
+ stream := cfg.BorrowStream(nil)
+ defer cfg.ReturnStream(stream)
+ stream.WriteVal(v)
+ if stream.Error != nil {
+ return "", stream.Error
+ }
+ return string(stream.Buffer()), nil
+}
+
+func (cfg *frozenConfig) Marshal(v interface{}) ([]byte, error) {
+ stream := cfg.BorrowStream(nil)
+ defer cfg.ReturnStream(stream)
+ stream.WriteVal(v)
+ if stream.Error != nil {
+ return nil, stream.Error
+ }
+ result := stream.Buffer()
+ copied := make([]byte, len(result))
+ copy(copied, result)
+ return copied, nil
+}
+
+func (cfg *frozenConfig) MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) {
+ if prefix != "" {
+ panic("prefix is not supported")
+ }
+ for _, r := range indent {
+ if r != ' ' {
+ panic("indent can only be space")
+ }
+ }
+ newCfg := cfg.configBeforeFrozen
+ newCfg.IndentionStep = len(indent)
+ return newCfg.frozeWithCacheReuse(cfg.extraExtensions).Marshal(v)
+}
+
+func (cfg *frozenConfig) UnmarshalFromString(str string, v interface{}) error {
+ data := []byte(str)
+ iter := cfg.BorrowIterator(data)
+ defer cfg.ReturnIterator(iter)
+ iter.ReadVal(v)
+ c := iter.nextToken()
+ if c == 0 {
+ if iter.Error == io.EOF {
+ return nil
+ }
+ return iter.Error
+ }
+ iter.ReportError("Unmarshal", "there are bytes left after unmarshal")
+ return iter.Error
+}
+
+func (cfg *frozenConfig) Get(data []byte, path ...interface{}) Any {
+ iter := cfg.BorrowIterator(data)
+ defer cfg.ReturnIterator(iter)
+ return locatePath(iter, path)
+}
+
+func (cfg *frozenConfig) Unmarshal(data []byte, v interface{}) error {
+ iter := cfg.BorrowIterator(data)
+ defer cfg.ReturnIterator(iter)
+ iter.ReadVal(v)
+ c := iter.nextToken()
+ if c == 0 {
+ if iter.Error == io.EOF {
+ return nil
+ }
+ return iter.Error
+ }
+ iter.ReportError("Unmarshal", "there are bytes left after unmarshal")
+ return iter.Error
+}
+
+func (cfg *frozenConfig) NewEncoder(writer io.Writer) *Encoder {
+ stream := NewStream(cfg, writer, 512)
+ return &Encoder{stream}
+}
+
+func (cfg *frozenConfig) NewDecoder(reader io.Reader) *Decoder {
+ iter := Parse(cfg, reader, 512)
+ return &Decoder{iter}
+}
+
+func (cfg *frozenConfig) Valid(data []byte) bool {
+ iter := cfg.BorrowIterator(data)
+ defer cfg.ReturnIterator(iter)
+ iter.Skip()
+ return iter.Error == nil
+}
diff --git a/vendor/github.com/json-iterator/go/feature_config.go b/vendor/github.com/json-iterator/go/feature_config.go
deleted file mode 100644
index fc055d504..000000000
--- a/vendor/github.com/json-iterator/go/feature_config.go
+++ /dev/null
@@ -1,312 +0,0 @@
-package jsoniter
-
-import (
- "encoding/json"
- "errors"
- "io"
- "reflect"
- "sync/atomic"
- "unsafe"
-)
-
-// Config customize how the API should behave.
-// The API is created from Config by Froze.
-type Config struct {
- IndentionStep int
- MarshalFloatWith6Digits bool
- EscapeHTML bool
- SortMapKeys bool
- UseNumber bool
- TagKey string
-}
-
-type frozenConfig struct {
- configBeforeFrozen Config
- sortMapKeys bool
- indentionStep int
- decoderCache unsafe.Pointer
- encoderCache unsafe.Pointer
- extensions []Extension
- streamPool chan *Stream
- iteratorPool chan *Iterator
-}
-
-// API the public interface of this package.
-// Primary Marshal and Unmarshal.
-type API interface {
- IteratorPool
- StreamPool
- MarshalToString(v interface{}) (string, error)
- Marshal(v interface{}) ([]byte, error)
- MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)
- UnmarshalFromString(str string, v interface{}) error
- Unmarshal(data []byte, v interface{}) error
- Get(data []byte, path ...interface{}) Any
- NewEncoder(writer io.Writer) *Encoder
- NewDecoder(reader io.Reader) *Decoder
-}
-
-// ConfigDefault the default API
-var ConfigDefault = Config{
- EscapeHTML: true,
-}.Froze()
-
-// ConfigCompatibleWithStandardLibrary tries to be 100% compatible with standard library behavior
-var ConfigCompatibleWithStandardLibrary = Config{
- EscapeHTML: true,
- SortMapKeys: true,
-}.Froze()
-
-// ConfigFastest marshals float with only 6 digits precision
-var ConfigFastest = Config{
- EscapeHTML: false,
- MarshalFloatWith6Digits: true,
-}.Froze()
-
-// Froze forge API from config
-func (cfg Config) Froze() API {
- // TODO: cache frozen config
- frozenConfig := &frozenConfig{
- sortMapKeys: cfg.SortMapKeys,
- indentionStep: cfg.IndentionStep,
- streamPool: make(chan *Stream, 16),
- iteratorPool: make(chan *Iterator, 16),
- }
- atomic.StorePointer(&frozenConfig.decoderCache, unsafe.Pointer(&map[string]ValDecoder{}))
- atomic.StorePointer(&frozenConfig.encoderCache, unsafe.Pointer(&map[string]ValEncoder{}))
- if cfg.MarshalFloatWith6Digits {
- frozenConfig.marshalFloatWith6Digits()
- }
- if cfg.EscapeHTML {
- frozenConfig.escapeHTML()
- }
- if cfg.UseNumber {
- frozenConfig.useNumber()
- }
- frozenConfig.configBeforeFrozen = cfg
- return frozenConfig
-}
-
-func (cfg *frozenConfig) useNumber() {
- cfg.addDecoderToCache(reflect.TypeOf((*interface{})(nil)).Elem(), &funcDecoder{func(ptr unsafe.Pointer, iter *Iterator) {
- if iter.WhatIsNext() == NumberValue {
- *((*interface{})(ptr)) = json.Number(iter.readNumberAsString())
- } else {
- *((*interface{})(ptr)) = iter.Read()
- }
- }})
-}
-func (cfg *frozenConfig) getTagKey() string {
- tagKey := cfg.configBeforeFrozen.TagKey
- if tagKey == "" {
- return "json"
- }
- return tagKey
-}
-
-func (cfg *frozenConfig) registerExtension(extension Extension) {
- cfg.extensions = append(cfg.extensions, extension)
-}
-
-type lossyFloat32Encoder struct {
-}
-
-func (encoder *lossyFloat32Encoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteFloat32Lossy(*((*float32)(ptr)))
-}
-
-func (encoder *lossyFloat32Encoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
-func (encoder *lossyFloat32Encoder) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*float32)(ptr)) == 0
-}
-
-type lossyFloat64Encoder struct {
-}
-
-func (encoder *lossyFloat64Encoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteFloat64Lossy(*((*float64)(ptr)))
-}
-
-func (encoder *lossyFloat64Encoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
-func (encoder *lossyFloat64Encoder) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*float64)(ptr)) == 0
-}
-
-// EnableLossyFloatMarshalling keeps 10**(-6) precision
-// for float variables for better performance.
-func (cfg *frozenConfig) marshalFloatWith6Digits() {
- // for better performance
- cfg.addEncoderToCache(reflect.TypeOf((*float32)(nil)).Elem(), &lossyFloat32Encoder{})
- cfg.addEncoderToCache(reflect.TypeOf((*float64)(nil)).Elem(), &lossyFloat64Encoder{})
-}
-
-type htmlEscapedStringEncoder struct {
-}
-
-func (encoder *htmlEscapedStringEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- str := *((*string)(ptr))
- stream.WriteStringWithHTMLEscaped(str)
-}
-
-func (encoder *htmlEscapedStringEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
-func (encoder *htmlEscapedStringEncoder) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*string)(ptr)) == ""
-}
-
-func (cfg *frozenConfig) escapeHTML() {
- cfg.addEncoderToCache(reflect.TypeOf((*string)(nil)).Elem(), &htmlEscapedStringEncoder{})
-}
-
-func (cfg *frozenConfig) addDecoderToCache(cacheKey reflect.Type, decoder ValDecoder) {
- done := false
- for !done {
- ptr := atomic.LoadPointer(&cfg.decoderCache)
- cache := *(*map[reflect.Type]ValDecoder)(ptr)
- copied := map[reflect.Type]ValDecoder{}
- for k, v := range cache {
- copied[k] = v
- }
- copied[cacheKey] = decoder
- done = atomic.CompareAndSwapPointer(&cfg.decoderCache, ptr, unsafe.Pointer(&copied))
- }
-}
-
-func (cfg *frozenConfig) addEncoderToCache(cacheKey reflect.Type, encoder ValEncoder) {
- done := false
- for !done {
- ptr := atomic.LoadPointer(&cfg.encoderCache)
- cache := *(*map[reflect.Type]ValEncoder)(ptr)
- copied := map[reflect.Type]ValEncoder{}
- for k, v := range cache {
- copied[k] = v
- }
- copied[cacheKey] = encoder
- done = atomic.CompareAndSwapPointer(&cfg.encoderCache, ptr, unsafe.Pointer(&copied))
- }
-}
-
-func (cfg *frozenConfig) getDecoderFromCache(cacheKey reflect.Type) ValDecoder {
- ptr := atomic.LoadPointer(&cfg.decoderCache)
- cache := *(*map[reflect.Type]ValDecoder)(ptr)
- return cache[cacheKey]
-}
-
-func (cfg *frozenConfig) getEncoderFromCache(cacheKey reflect.Type) ValEncoder {
- ptr := atomic.LoadPointer(&cfg.encoderCache)
- cache := *(*map[reflect.Type]ValEncoder)(ptr)
- return cache[cacheKey]
-}
-
-func (cfg *frozenConfig) cleanDecoders() {
- typeDecoders = map[string]ValDecoder{}
- fieldDecoders = map[string]ValDecoder{}
- *cfg = *(cfg.configBeforeFrozen.Froze().(*frozenConfig))
-}
-
-func (cfg *frozenConfig) cleanEncoders() {
- typeEncoders = map[string]ValEncoder{}
- fieldEncoders = map[string]ValEncoder{}
- *cfg = *(cfg.configBeforeFrozen.Froze().(*frozenConfig))
-}
-
-func (cfg *frozenConfig) MarshalToString(v interface{}) (string, error) {
- stream := cfg.BorrowStream(nil)
- defer cfg.ReturnStream(stream)
- stream.WriteVal(v)
- if stream.Error != nil {
- return "", stream.Error
- }
- return string(stream.Buffer()), nil
-}
-
-func (cfg *frozenConfig) Marshal(v interface{}) ([]byte, error) {
- stream := cfg.BorrowStream(nil)
- defer cfg.ReturnStream(stream)
- stream.WriteVal(v)
- if stream.Error != nil {
- return nil, stream.Error
- }
- result := stream.Buffer()
- copied := make([]byte, len(result))
- copy(copied, result)
- return copied, nil
-}
-
-func (cfg *frozenConfig) MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) {
- if prefix != "" {
- panic("prefix is not supported")
- }
- for _, r := range indent {
- if r != ' ' {
- panic("indent can only be space")
- }
- }
- newCfg := cfg.configBeforeFrozen
- newCfg.IndentionStep = len(indent)
- return newCfg.Froze().Marshal(v)
-}
-
-func (cfg *frozenConfig) UnmarshalFromString(str string, v interface{}) error {
- data := []byte(str)
- data = data[:lastNotSpacePos(data)]
- iter := cfg.BorrowIterator(data)
- defer cfg.ReturnIterator(iter)
- iter.ReadVal(v)
- if iter.head == iter.tail {
- iter.loadMore()
- }
- if iter.Error == io.EOF {
- return nil
- }
- if iter.Error == nil {
- iter.ReportError("UnmarshalFromString", "there are bytes left after unmarshal")
- }
- return iter.Error
-}
-
-func (cfg *frozenConfig) Get(data []byte, path ...interface{}) Any {
- iter := cfg.BorrowIterator(data)
- defer cfg.ReturnIterator(iter)
- return locatePath(iter, path)
-}
-
-func (cfg *frozenConfig) Unmarshal(data []byte, v interface{}) error {
- data = data[:lastNotSpacePos(data)]
- iter := cfg.BorrowIterator(data)
- defer cfg.ReturnIterator(iter)
- typ := reflect.TypeOf(v)
- if typ.Kind() != reflect.Ptr {
- // return non-pointer error
- return errors.New("the second param must be ptr type")
- }
- iter.ReadVal(v)
- if iter.head == iter.tail {
- iter.loadMore()
- }
- if iter.Error == io.EOF {
- return nil
- }
- if iter.Error == nil {
- iter.ReportError("Unmarshal", "there are bytes left after unmarshal")
- }
- return iter.Error
-}
-
-func (cfg *frozenConfig) NewEncoder(writer io.Writer) *Encoder {
- stream := NewStream(cfg, writer, 512)
- return &Encoder{stream}
-}
-
-func (cfg *frozenConfig) NewDecoder(reader io.Reader) *Decoder {
- iter := Parse(cfg, reader, 512)
- return &Decoder{iter}
-}
diff --git a/vendor/github.com/json-iterator/go/feature_json_number.go b/vendor/github.com/json-iterator/go/feature_json_number.go
deleted file mode 100644
index 0439f6725..000000000
--- a/vendor/github.com/json-iterator/go/feature_json_number.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package jsoniter
-
-import "encoding/json"
-
-type Number string
-
-func CastJsonNumber(val interface{}) (string, bool) {
- switch typedVal := val.(type) {
- case json.Number:
- return string(typedVal), true
- case Number:
- return string(typedVal), true
- }
- return "", false
-}
diff --git a/vendor/github.com/json-iterator/go/feature_reflect.go b/vendor/github.com/json-iterator/go/feature_reflect.go
deleted file mode 100644
index 05d91b49c..000000000
--- a/vendor/github.com/json-iterator/go/feature_reflect.go
+++ /dev/null
@@ -1,691 +0,0 @@
-package jsoniter
-
-import (
- "encoding"
- "encoding/json"
- "fmt"
- "reflect"
- "time"
- "unsafe"
-)
-
-// ValDecoder is an internal type registered to cache as needed.
-// Don't confuse jsoniter.ValDecoder with json.Decoder.
-// For json.Decoder's adapter, refer to jsoniter.AdapterDecoder(todo link).
-//
-// Reflection on type to create decoders, which is then cached
-// Reflection on value is avoided as we can, as the reflect.Value itself will allocate, with following exceptions
-// 1. create instance of new value, for example *int will need a int to be allocated
-// 2. append to slice, if the existing cap is not enough, allocate will be done using Reflect.New
-// 3. assignment to map, both key and value will be reflect.Value
-// For a simple struct binding, it will be reflect.Value free and allocation free
-type ValDecoder interface {
- Decode(ptr unsafe.Pointer, iter *Iterator)
-}
-
-// ValEncoder is an internal type registered to cache as needed.
-// Don't confuse jsoniter.ValEncoder with json.Encoder.
-// For json.Encoder's adapter, refer to jsoniter.AdapterEncoder(todo godoc link).
-type ValEncoder interface {
- IsEmpty(ptr unsafe.Pointer) bool
- Encode(ptr unsafe.Pointer, stream *Stream)
- EncodeInterface(val interface{}, stream *Stream)
-}
-
-type checkIsEmpty interface {
- IsEmpty(ptr unsafe.Pointer) bool
-}
-
-// WriteToStream the default implementation for TypeEncoder method EncodeInterface
-func WriteToStream(val interface{}, stream *Stream, encoder ValEncoder) {
- e := (*emptyInterface)(unsafe.Pointer(&val))
- if e.word == nil {
- stream.WriteNil()
- return
- }
- if reflect.TypeOf(val).Kind() == reflect.Ptr {
- encoder.Encode(unsafe.Pointer(&e.word), stream)
- } else {
- encoder.Encode(e.word, stream)
- }
-}
-
-var jsonNumberType reflect.Type
-var jsoniterNumberType reflect.Type
-var jsonRawMessageType reflect.Type
-var jsoniterRawMessageType reflect.Type
-var anyType reflect.Type
-var marshalerType reflect.Type
-var unmarshalerType reflect.Type
-var textMarshalerType reflect.Type
-var textUnmarshalerType reflect.Type
-
-func init() {
- jsonNumberType = reflect.TypeOf((*json.Number)(nil)).Elem()
- jsoniterNumberType = reflect.TypeOf((*Number)(nil)).Elem()
- jsonRawMessageType = reflect.TypeOf((*json.RawMessage)(nil)).Elem()
- jsoniterRawMessageType = reflect.TypeOf((*RawMessage)(nil)).Elem()
- anyType = reflect.TypeOf((*Any)(nil)).Elem()
- marshalerType = reflect.TypeOf((*json.Marshaler)(nil)).Elem()
- unmarshalerType = reflect.TypeOf((*json.Unmarshaler)(nil)).Elem()
- textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()
- textUnmarshalerType = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem()
-}
-
-type optionalDecoder struct {
- valueType reflect.Type
- valueDecoder ValDecoder
-}
-
-func (decoder *optionalDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
- if iter.ReadNil() {
- *((*unsafe.Pointer)(ptr)) = nil
- } else {
- if *((*unsafe.Pointer)(ptr)) == nil {
- //pointer to null, we have to allocate memory to hold the value
- value := reflect.New(decoder.valueType)
- newPtr := extractInterface(value.Interface()).word
- decoder.valueDecoder.Decode(newPtr, iter)
- *((*uintptr)(ptr)) = uintptr(newPtr)
- } else {
- //reuse existing instance
- decoder.valueDecoder.Decode(*((*unsafe.Pointer)(ptr)), iter)
- }
- }
-}
-
-type deferenceDecoder struct {
- // only to deference a pointer
- valueType reflect.Type
- valueDecoder ValDecoder
-}
-
-func (decoder *deferenceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
- if *((*unsafe.Pointer)(ptr)) == nil {
- //pointer to null, we have to allocate memory to hold the value
- value := reflect.New(decoder.valueType)
- newPtr := extractInterface(value.Interface()).word
- decoder.valueDecoder.Decode(newPtr, iter)
- *((*uintptr)(ptr)) = uintptr(newPtr)
- } else {
- //reuse existing instance
- decoder.valueDecoder.Decode(*((*unsafe.Pointer)(ptr)), iter)
- }
-}
-
-type optionalEncoder struct {
- valueEncoder ValEncoder
-}
-
-func (encoder *optionalEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- if *((*unsafe.Pointer)(ptr)) == nil {
- stream.WriteNil()
- } else {
- encoder.valueEncoder.Encode(*((*unsafe.Pointer)(ptr)), stream)
- }
-}
-
-func (encoder *optionalEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
-func (encoder *optionalEncoder) IsEmpty(ptr unsafe.Pointer) bool {
- if *((*unsafe.Pointer)(ptr)) == nil {
- return true
- }
- return false
-}
-
-type placeholderEncoder struct {
- cfg *frozenConfig
- cacheKey reflect.Type
-}
-
-func (encoder *placeholderEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- encoder.getRealEncoder().Encode(ptr, stream)
-}
-
-func (encoder *placeholderEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
-func (encoder *placeholderEncoder) IsEmpty(ptr unsafe.Pointer) bool {
- return encoder.getRealEncoder().IsEmpty(ptr)
-}
-
-func (encoder *placeholderEncoder) getRealEncoder() ValEncoder {
- for i := 0; i < 30; i++ {
- realDecoder := encoder.cfg.getEncoderFromCache(encoder.cacheKey)
- _, isPlaceholder := realDecoder.(*placeholderEncoder)
- if isPlaceholder {
- time.Sleep(time.Second)
- } else {
- return realDecoder
- }
- }
- panic(fmt.Sprintf("real encoder not found for cache key: %v", encoder.cacheKey))
-}
-
-type placeholderDecoder struct {
- cfg *frozenConfig
- cacheKey reflect.Type
-}
-
-func (decoder *placeholderDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
- for i := 0; i < 30; i++ {
- realDecoder := decoder.cfg.getDecoderFromCache(decoder.cacheKey)
- _, isPlaceholder := realDecoder.(*placeholderDecoder)
- if isPlaceholder {
- time.Sleep(time.Second)
- } else {
- realDecoder.Decode(ptr, iter)
- return
- }
- }
- panic(fmt.Sprintf("real decoder not found for cache key: %v", decoder.cacheKey))
-}
-
-// emptyInterface is the header for an interface{} value.
-type emptyInterface struct {
- typ unsafe.Pointer
- word unsafe.Pointer
-}
-
-// emptyInterface is the header for an interface with method (not interface{})
-type nonEmptyInterface struct {
- // see ../runtime/iface.go:/Itab
- itab *struct {
- ityp unsafe.Pointer // static interface type
- typ unsafe.Pointer // dynamic concrete type
- link unsafe.Pointer
- bad int32
- unused int32
- fun [100000]unsafe.Pointer // method table
- }
- word unsafe.Pointer
-}
-
-// ReadVal copy the underlying JSON into go interface, same as json.Unmarshal
-func (iter *Iterator) ReadVal(obj interface{}) {
- typ := reflect.TypeOf(obj)
- cacheKey := typ.Elem()
- decoder, err := decoderOfType(iter.cfg, cacheKey)
- if err != nil {
- iter.Error = err
- return
- }
- e := (*emptyInterface)(unsafe.Pointer(&obj))
- decoder.Decode(e.word, iter)
-}
-
-// WriteVal copy the go interface into underlying JSON, same as json.Marshal
-func (stream *Stream) WriteVal(val interface{}) {
- if nil == val {
- stream.WriteNil()
- return
- }
- typ := reflect.TypeOf(val)
- cacheKey := typ
- encoder, err := encoderOfType(stream.cfg, cacheKey)
- if err != nil {
- stream.Error = err
- return
- }
- encoder.EncodeInterface(val, stream)
-}
-
-type prefix string
-
-func (p prefix) addToDecoder(decoder ValDecoder, err error) (ValDecoder, error) {
- if err != nil {
- return nil, fmt.Errorf("%s: %s", p, err.Error())
- }
- return decoder, err
-}
-
-func (p prefix) addToEncoder(encoder ValEncoder, err error) (ValEncoder, error) {
- if err != nil {
- return nil, fmt.Errorf("%s: %s", p, err.Error())
- }
- return encoder, err
-}
-
-func decoderOfType(cfg *frozenConfig, typ reflect.Type) (ValDecoder, error) {
- cacheKey := typ
- decoder := cfg.getDecoderFromCache(cacheKey)
- if decoder != nil {
- return decoder, nil
- }
- decoder = getTypeDecoderFromExtension(typ)
- if decoder != nil {
- cfg.addDecoderToCache(cacheKey, decoder)
- return decoder, nil
- }
- decoder = &placeholderDecoder{cfg: cfg, cacheKey: cacheKey}
- cfg.addDecoderToCache(cacheKey, decoder)
- decoder, err := createDecoderOfType(cfg, typ)
- for _, extension := range extensions {
- decoder = extension.DecorateDecoder(typ, decoder)
- }
- cfg.addDecoderToCache(cacheKey, decoder)
- return decoder, err
-}
-
-func createDecoderOfType(cfg *frozenConfig, typ reflect.Type) (ValDecoder, error) {
- typeName := typ.String()
- if typ == jsonRawMessageType {
- return &jsonRawMessageCodec{}, nil
- }
- if typ == jsoniterRawMessageType {
- return &jsoniterRawMessageCodec{}, nil
- }
- if typ.AssignableTo(jsonNumberType) {
- return &jsonNumberCodec{}, nil
- }
- if typ.AssignableTo(jsoniterNumberType) {
- return &jsoniterNumberCodec{}, nil
- }
- if typ.Implements(unmarshalerType) {
- templateInterface := reflect.New(typ).Elem().Interface()
- var decoder ValDecoder = &unmarshalerDecoder{extractInterface(templateInterface)}
- if typ.Kind() == reflect.Ptr {
- decoder = &optionalDecoder{typ.Elem(), decoder}
- }
- return decoder, nil
- }
- if reflect.PtrTo(typ).Implements(unmarshalerType) {
- templateInterface := reflect.New(typ).Interface()
- var decoder ValDecoder = &unmarshalerDecoder{extractInterface(templateInterface)}
- return decoder, nil
- }
- if typ.Implements(textUnmarshalerType) {
- templateInterface := reflect.New(typ).Elem().Interface()
- var decoder ValDecoder = &textUnmarshalerDecoder{extractInterface(templateInterface)}
- if typ.Kind() == reflect.Ptr {
- decoder = &optionalDecoder{typ.Elem(), decoder}
- }
- return decoder, nil
- }
- if reflect.PtrTo(typ).Implements(textUnmarshalerType) {
- templateInterface := reflect.New(typ).Interface()
- var decoder ValDecoder = &textUnmarshalerDecoder{extractInterface(templateInterface)}
- return decoder, nil
- }
- if typ.Kind() == reflect.Slice && typ.Elem().Kind() == reflect.Uint8 {
- sliceDecoder, err := prefix("[slice]").addToDecoder(decoderOfSlice(cfg, typ))
- if err != nil {
- return nil, err
- }
- return &base64Codec{sliceDecoder: sliceDecoder}, nil
- }
- if typ.Implements(anyType) {
- return &anyCodec{}, nil
- }
- switch typ.Kind() {
- case reflect.String:
- if typeName != "string" {
- return decoderOfType(cfg, reflect.TypeOf((*string)(nil)).Elem())
- }
- return &stringCodec{}, nil
- case reflect.Int:
- if typeName != "int" {
- return decoderOfType(cfg, reflect.TypeOf((*int)(nil)).Elem())
- }
- return &intCodec{}, nil
- case reflect.Int8:
- if typeName != "int8" {
- return decoderOfType(cfg, reflect.TypeOf((*int8)(nil)).Elem())
- }
- return &int8Codec{}, nil
- case reflect.Int16:
- if typeName != "int16" {
- return decoderOfType(cfg, reflect.TypeOf((*int16)(nil)).Elem())
- }
- return &int16Codec{}, nil
- case reflect.Int32:
- if typeName != "int32" {
- return decoderOfType(cfg, reflect.TypeOf((*int32)(nil)).Elem())
- }
- return &int32Codec{}, nil
- case reflect.Int64:
- if typeName != "int64" {
- return decoderOfType(cfg, reflect.TypeOf((*int64)(nil)).Elem())
- }
- return &int64Codec{}, nil
- case reflect.Uint:
- if typeName != "uint" {
- return decoderOfType(cfg, reflect.TypeOf((*uint)(nil)).Elem())
- }
- return &uintCodec{}, nil
- case reflect.Uint8:
- if typeName != "uint8" {
- return decoderOfType(cfg, reflect.TypeOf((*uint8)(nil)).Elem())
- }
- return &uint8Codec{}, nil
- case reflect.Uint16:
- if typeName != "uint16" {
- return decoderOfType(cfg, reflect.TypeOf((*uint16)(nil)).Elem())
- }
- return &uint16Codec{}, nil
- case reflect.Uint32:
- if typeName != "uint32" {
- return decoderOfType(cfg, reflect.TypeOf((*uint32)(nil)).Elem())
- }
- return &uint32Codec{}, nil
- case reflect.Uintptr:
- if typeName != "uintptr" {
- return decoderOfType(cfg, reflect.TypeOf((*uintptr)(nil)).Elem())
- }
- return &uintptrCodec{}, nil
- case reflect.Uint64:
- if typeName != "uint64" {
- return decoderOfType(cfg, reflect.TypeOf((*uint64)(nil)).Elem())
- }
- return &uint64Codec{}, nil
- case reflect.Float32:
- if typeName != "float32" {
- return decoderOfType(cfg, reflect.TypeOf((*float32)(nil)).Elem())
- }
- return &float32Codec{}, nil
- case reflect.Float64:
- if typeName != "float64" {
- return decoderOfType(cfg, reflect.TypeOf((*float64)(nil)).Elem())
- }
- return &float64Codec{}, nil
- case reflect.Bool:
- if typeName != "bool" {
- return decoderOfType(cfg, reflect.TypeOf((*bool)(nil)).Elem())
- }
- return &boolCodec{}, nil
- case reflect.Interface:
- if typ.NumMethod() == 0 {
- return &emptyInterfaceCodec{}, nil
- }
- return &nonEmptyInterfaceCodec{}, nil
- case reflect.Struct:
- return prefix(fmt.Sprintf("[%s]", typeName)).addToDecoder(decoderOfStruct(cfg, typ))
- case reflect.Array:
- return prefix("[array]").addToDecoder(decoderOfArray(cfg, typ))
- case reflect.Slice:
- return prefix("[slice]").addToDecoder(decoderOfSlice(cfg, typ))
- case reflect.Map:
- return prefix("[map]").addToDecoder(decoderOfMap(cfg, typ))
- case reflect.Ptr:
- return prefix("[optional]").addToDecoder(decoderOfOptional(cfg, typ))
- default:
- return nil, fmt.Errorf("unsupported type: %v", typ)
- }
-}
-
-func encoderOfType(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error) {
- cacheKey := typ
- encoder := cfg.getEncoderFromCache(cacheKey)
- if encoder != nil {
- return encoder, nil
- }
- encoder = getTypeEncoderFromExtension(typ)
- if encoder != nil {
- cfg.addEncoderToCache(cacheKey, encoder)
- return encoder, nil
- }
- encoder = &placeholderEncoder{cfg: cfg, cacheKey: cacheKey}
- cfg.addEncoderToCache(cacheKey, encoder)
- encoder, err := createEncoderOfType(cfg, typ)
- for _, extension := range extensions {
- encoder = extension.DecorateEncoder(typ, encoder)
- }
- cfg.addEncoderToCache(cacheKey, encoder)
- return encoder, err
-}
-
-func createEncoderOfType(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error) {
- if typ == jsonRawMessageType {
- return &jsonRawMessageCodec{}, nil
- }
- if typ == jsoniterRawMessageType {
- return &jsoniterRawMessageCodec{}, nil
- }
- if typ.AssignableTo(jsonNumberType) {
- return &jsonNumberCodec{}, nil
- }
- if typ.AssignableTo(jsoniterNumberType) {
- return &jsoniterNumberCodec{}, nil
- }
- if typ.Implements(marshalerType) {
- checkIsEmpty, err := createCheckIsEmpty(typ)
- if err != nil {
- return nil, err
- }
- templateInterface := reflect.New(typ).Elem().Interface()
- var encoder ValEncoder = &marshalerEncoder{
- templateInterface: extractInterface(templateInterface),
- checkIsEmpty: checkIsEmpty,
- }
- if typ.Kind() == reflect.Ptr {
- encoder = &optionalEncoder{encoder}
- }
- return encoder, nil
- }
- if typ.Implements(textMarshalerType) {
- checkIsEmpty, err := createCheckIsEmpty(typ)
- if err != nil {
- return nil, err
- }
- templateInterface := reflect.New(typ).Elem().Interface()
- var encoder ValEncoder = &textMarshalerEncoder{
- templateInterface: extractInterface(templateInterface),
- checkIsEmpty: checkIsEmpty,
- }
- if typ.Kind() == reflect.Ptr {
- encoder = &optionalEncoder{encoder}
- }
- return encoder, nil
- }
- if typ.Kind() == reflect.Slice && typ.Elem().Kind() == reflect.Uint8 {
- return &base64Codec{}, nil
- }
- if typ.Implements(anyType) {
- return &anyCodec{}, nil
- }
- return createEncoderOfSimpleType(cfg, typ)
-}
-
-func createCheckIsEmpty(typ reflect.Type) (checkIsEmpty, error) {
- kind := typ.Kind()
- switch kind {
- case reflect.String:
- return &stringCodec{}, nil
- case reflect.Int:
- return &intCodec{}, nil
- case reflect.Int8:
- return &int8Codec{}, nil
- case reflect.Int16:
- return &int16Codec{}, nil
- case reflect.Int32:
- return &int32Codec{}, nil
- case reflect.Int64:
- return &int64Codec{}, nil
- case reflect.Uint:
- return &uintCodec{}, nil
- case reflect.Uint8:
- return &uint8Codec{}, nil
- case reflect.Uint16:
- return &uint16Codec{}, nil
- case reflect.Uint32:
- return &uint32Codec{}, nil
- case reflect.Uintptr:
- return &uintptrCodec{}, nil
- case reflect.Uint64:
- return &uint64Codec{}, nil
- case reflect.Float32:
- return &float32Codec{}, nil
- case reflect.Float64:
- return &float64Codec{}, nil
- case reflect.Bool:
- return &boolCodec{}, nil
- case reflect.Interface:
- if typ.NumMethod() == 0 {
- return &emptyInterfaceCodec{}, nil
- }
- return &nonEmptyInterfaceCodec{}, nil
- case reflect.Struct:
- return &structEncoder{}, nil
- case reflect.Array:
- return &arrayEncoder{}, nil
- case reflect.Slice:
- return &sliceEncoder{}, nil
- case reflect.Map:
- return &mapEncoder{}, nil
- case reflect.Ptr:
- return &optionalEncoder{}, nil
- default:
- return nil, fmt.Errorf("unsupported type: %v", typ)
- }
-}
-
-func createEncoderOfSimpleType(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error) {
- typeName := typ.String()
- kind := typ.Kind()
- switch kind {
- case reflect.String:
- if typeName != "string" {
- return encoderOfType(cfg, reflect.TypeOf((*string)(nil)).Elem())
- }
- return &stringCodec{}, nil
- case reflect.Int:
- if typeName != "int" {
- return encoderOfType(cfg, reflect.TypeOf((*int)(nil)).Elem())
- }
- return &intCodec{}, nil
- case reflect.Int8:
- if typeName != "int8" {
- return encoderOfType(cfg, reflect.TypeOf((*int8)(nil)).Elem())
- }
- return &int8Codec{}, nil
- case reflect.Int16:
- if typeName != "int16" {
- return encoderOfType(cfg, reflect.TypeOf((*int16)(nil)).Elem())
- }
- return &int16Codec{}, nil
- case reflect.Int32:
- if typeName != "int32" {
- return encoderOfType(cfg, reflect.TypeOf((*int32)(nil)).Elem())
- }
- return &int32Codec{}, nil
- case reflect.Int64:
- if typeName != "int64" {
- return encoderOfType(cfg, reflect.TypeOf((*int64)(nil)).Elem())
- }
- return &int64Codec{}, nil
- case reflect.Uint:
- if typeName != "uint" {
- return encoderOfType(cfg, reflect.TypeOf((*uint)(nil)).Elem())
- }
- return &uintCodec{}, nil
- case reflect.Uint8:
- if typeName != "uint8" {
- return encoderOfType(cfg, reflect.TypeOf((*uint8)(nil)).Elem())
- }
- return &uint8Codec{}, nil
- case reflect.Uint16:
- if typeName != "uint16" {
- return encoderOfType(cfg, reflect.TypeOf((*uint16)(nil)).Elem())
- }
- return &uint16Codec{}, nil
- case reflect.Uint32:
- if typeName != "uint32" {
- return encoderOfType(cfg, reflect.TypeOf((*uint32)(nil)).Elem())
- }
- return &uint32Codec{}, nil
- case reflect.Uintptr:
- if typeName != "uintptr" {
- return encoderOfType(cfg, reflect.TypeOf((*uintptr)(nil)).Elem())
- }
- return &uintptrCodec{}, nil
- case reflect.Uint64:
- if typeName != "uint64" {
- return encoderOfType(cfg, reflect.TypeOf((*uint64)(nil)).Elem())
- }
- return &uint64Codec{}, nil
- case reflect.Float32:
- if typeName != "float32" {
- return encoderOfType(cfg, reflect.TypeOf((*float32)(nil)).Elem())
- }
- return &float32Codec{}, nil
- case reflect.Float64:
- if typeName != "float64" {
- return encoderOfType(cfg, reflect.TypeOf((*float64)(nil)).Elem())
- }
- return &float64Codec{}, nil
- case reflect.Bool:
- if typeName != "bool" {
- return encoderOfType(cfg, reflect.TypeOf((*bool)(nil)).Elem())
- }
- return &boolCodec{}, nil
- case reflect.Interface:
- if typ.NumMethod() == 0 {
- return &emptyInterfaceCodec{}, nil
- }
- return &nonEmptyInterfaceCodec{}, nil
- case reflect.Struct:
- return prefix(fmt.Sprintf("[%s]", typeName)).addToEncoder(encoderOfStruct(cfg, typ))
- case reflect.Array:
- return prefix("[array]").addToEncoder(encoderOfArray(cfg, typ))
- case reflect.Slice:
- return prefix("[slice]").addToEncoder(encoderOfSlice(cfg, typ))
- case reflect.Map:
- return prefix("[map]").addToEncoder(encoderOfMap(cfg, typ))
- case reflect.Ptr:
- return prefix("[optional]").addToEncoder(encoderOfOptional(cfg, typ))
- default:
- return nil, fmt.Errorf("unsupported type: %v", typ)
- }
-}
-
-func decoderOfOptional(cfg *frozenConfig, typ reflect.Type) (ValDecoder, error) {
- elemType := typ.Elem()
- decoder, err := decoderOfType(cfg, elemType)
- if err != nil {
- return nil, err
- }
- return &optionalDecoder{elemType, decoder}, nil
-}
-
-func encoderOfOptional(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error) {
- elemType := typ.Elem()
- elemEncoder, err := encoderOfType(cfg, elemType)
- if err != nil {
- return nil, err
- }
- encoder := &optionalEncoder{elemEncoder}
- if elemType.Kind() == reflect.Map {
- encoder = &optionalEncoder{encoder}
- }
- return encoder, nil
-}
-
-func decoderOfMap(cfg *frozenConfig, typ reflect.Type) (ValDecoder, error) {
- decoder, err := decoderOfType(cfg, typ.Elem())
- if err != nil {
- return nil, err
- }
- mapInterface := reflect.New(typ).Interface()
- return &mapDecoder{typ, typ.Key(), typ.Elem(), decoder, extractInterface(mapInterface)}, nil
-}
-
-func extractInterface(val interface{}) emptyInterface {
- return *((*emptyInterface)(unsafe.Pointer(&val)))
-}
-
-func encoderOfMap(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error) {
- elemType := typ.Elem()
- encoder, err := encoderOfType(cfg, elemType)
- if err != nil {
- return nil, err
- }
- mapInterface := reflect.New(typ).Elem().Interface()
- if cfg.sortMapKeys {
- return &sortKeysMapEncoder{typ, elemType, encoder, *((*emptyInterface)(unsafe.Pointer(&mapInterface)))}, nil
- }
- return &mapEncoder{typ, elemType, encoder, *((*emptyInterface)(unsafe.Pointer(&mapInterface)))}, nil
-}
diff --git a/vendor/github.com/json-iterator/go/feature_reflect_array.go b/vendor/github.com/json-iterator/go/feature_reflect_array.go
deleted file mode 100644
index e23f187b7..000000000
--- a/vendor/github.com/json-iterator/go/feature_reflect_array.go
+++ /dev/null
@@ -1,99 +0,0 @@
-package jsoniter
-
-import (
- "fmt"
- "io"
- "reflect"
- "unsafe"
-)
-
-func decoderOfArray(cfg *frozenConfig, typ reflect.Type) (ValDecoder, error) {
- decoder, err := decoderOfType(cfg, typ.Elem())
- if err != nil {
- return nil, err
- }
- return &arrayDecoder{typ, typ.Elem(), decoder}, nil
-}
-
-func encoderOfArray(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error) {
- encoder, err := encoderOfType(cfg, typ.Elem())
- if err != nil {
- return nil, err
- }
- if typ.Elem().Kind() == reflect.Map {
- encoder = &optionalEncoder{encoder}
- }
- return &arrayEncoder{typ, typ.Elem(), encoder}, nil
-}
-
-type arrayEncoder struct {
- arrayType reflect.Type
- elemType reflect.Type
- elemEncoder ValEncoder
-}
-
-func (encoder *arrayEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteArrayStart()
- elemPtr := unsafe.Pointer(ptr)
- encoder.elemEncoder.Encode(elemPtr, stream)
- for i := 1; i < encoder.arrayType.Len(); i++ {
- stream.WriteMore()
- elemPtr = unsafe.Pointer(uintptr(elemPtr) + encoder.elemType.Size())
- encoder.elemEncoder.Encode(unsafe.Pointer(elemPtr), stream)
- }
- stream.WriteArrayEnd()
- if stream.Error != nil && stream.Error != io.EOF {
- stream.Error = fmt.Errorf("%v: %s", encoder.arrayType, stream.Error.Error())
- }
-}
-
-func (encoder *arrayEncoder) EncodeInterface(val interface{}, stream *Stream) {
- // special optimization for interface{}
- e := (*emptyInterface)(unsafe.Pointer(&val))
- if e.word == nil {
- stream.WriteArrayStart()
- stream.WriteNil()
- stream.WriteArrayEnd()
- return
- }
- elemType := encoder.arrayType.Elem()
- if encoder.arrayType.Len() == 1 && (elemType.Kind() == reflect.Ptr || elemType.Kind() == reflect.Map) {
- ptr := uintptr(e.word)
- e.word = unsafe.Pointer(&ptr)
- }
- if reflect.TypeOf(val).Kind() == reflect.Ptr {
- encoder.Encode(unsafe.Pointer(&e.word), stream)
- } else {
- encoder.Encode(e.word, stream)
- }
-}
-
-func (encoder *arrayEncoder) IsEmpty(ptr unsafe.Pointer) bool {
- return false
-}
-
-type arrayDecoder struct {
- arrayType reflect.Type
- elemType reflect.Type
- elemDecoder ValDecoder
-}
-
-func (decoder *arrayDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
- decoder.doDecode(ptr, iter)
- if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.arrayType, iter.Error.Error())
- }
-}
-
-func (decoder *arrayDecoder) doDecode(ptr unsafe.Pointer, iter *Iterator) {
- offset := uintptr(0)
- iter.ReadArrayCB(func(iter *Iterator) bool {
- if offset < decoder.arrayType.Size() {
- decoder.elemDecoder.Decode(unsafe.Pointer(uintptr(ptr)+offset), iter)
- offset += decoder.elemType.Size()
- } else {
- iter.Skip()
- }
- return true
- })
-}
diff --git a/vendor/github.com/json-iterator/go/feature_reflect_map.go b/vendor/github.com/json-iterator/go/feature_reflect_map.go
deleted file mode 100644
index 005671e01..000000000
--- a/vendor/github.com/json-iterator/go/feature_reflect_map.go
+++ /dev/null
@@ -1,244 +0,0 @@
-package jsoniter
-
-import (
- "encoding"
- "encoding/json"
- "reflect"
- "sort"
- "strconv"
- "unsafe"
-)
-
-type mapDecoder struct {
- mapType reflect.Type
- keyType reflect.Type
- elemType reflect.Type
- elemDecoder ValDecoder
- mapInterface emptyInterface
-}
-
-func (decoder *mapDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
- // dark magic to cast unsafe.Pointer back to interface{} using reflect.Type
- mapInterface := decoder.mapInterface
- mapInterface.word = ptr
- realInterface := (*interface{})(unsafe.Pointer(&mapInterface))
- realVal := reflect.ValueOf(*realInterface).Elem()
- if iter.ReadNil() {
- realVal.Set(reflect.Zero(decoder.mapType))
- return
- }
- if realVal.IsNil() {
- realVal.Set(reflect.MakeMap(realVal.Type()))
- }
- iter.ReadMapCB(func(iter *Iterator, keyStr string) bool {
- elem := reflect.New(decoder.elemType)
- decoder.elemDecoder.Decode(unsafe.Pointer(elem.Pointer()), iter)
- // to put into map, we have to use reflection
- keyType := decoder.keyType
- // TODO: remove this from loop
- switch {
- case keyType.Kind() == reflect.String:
- realVal.SetMapIndex(reflect.ValueOf(keyStr).Convert(keyType), elem.Elem())
- return true
- case keyType.Implements(textUnmarshalerType):
- textUnmarshaler := reflect.New(keyType.Elem()).Interface().(encoding.TextUnmarshaler)
- err := textUnmarshaler.UnmarshalText([]byte(keyStr))
- if err != nil {
- iter.ReportError("read map key as TextUnmarshaler", err.Error())
- return false
- }
- realVal.SetMapIndex(reflect.ValueOf(textUnmarshaler), elem.Elem())
- return true
- case reflect.PtrTo(keyType).Implements(textUnmarshalerType):
- textUnmarshaler := reflect.New(keyType).Interface().(encoding.TextUnmarshaler)
- err := textUnmarshaler.UnmarshalText([]byte(keyStr))
- if err != nil {
- iter.ReportError("read map key as TextUnmarshaler", err.Error())
- return false
- }
- realVal.SetMapIndex(reflect.ValueOf(textUnmarshaler).Elem(), elem.Elem())
- return true
- default:
- switch keyType.Kind() {
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- n, err := strconv.ParseInt(keyStr, 10, 64)
- if err != nil || reflect.Zero(keyType).OverflowInt(n) {
- iter.ReportError("read map key as int64", "read int64 failed")
- return false
- }
- realVal.SetMapIndex(reflect.ValueOf(n).Convert(keyType), elem.Elem())
- return true
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
- n, err := strconv.ParseUint(keyStr, 10, 64)
- if err != nil || reflect.Zero(keyType).OverflowUint(n) {
- iter.ReportError("read map key as uint64", "read uint64 failed")
- return false
- }
- realVal.SetMapIndex(reflect.ValueOf(n).Convert(keyType), elem.Elem())
- return true
- }
- }
- iter.ReportError("read map key", "unexpected map key type "+keyType.String())
- return true
- })
-}
-
-type mapEncoder struct {
- mapType reflect.Type
- elemType reflect.Type
- elemEncoder ValEncoder
- mapInterface emptyInterface
-}
-
-func (encoder *mapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- mapInterface := encoder.mapInterface
- mapInterface.word = ptr
- realInterface := (*interface{})(unsafe.Pointer(&mapInterface))
- realVal := reflect.ValueOf(*realInterface)
- stream.WriteObjectStart()
- for i, key := range realVal.MapKeys() {
- if i != 0 {
- stream.WriteMore()
- }
- encodeMapKey(key, stream)
- if stream.indention > 0 {
- stream.writeTwoBytes(byte(':'), byte(' '))
- } else {
- stream.writeByte(':')
- }
- val := realVal.MapIndex(key).Interface()
- encoder.elemEncoder.EncodeInterface(val, stream)
- }
- stream.WriteObjectEnd()
-}
-
-func encodeMapKey(key reflect.Value, stream *Stream) {
- if key.Kind() == reflect.String {
- stream.WriteString(key.String())
- return
- }
- if tm, ok := key.Interface().(encoding.TextMarshaler); ok {
- buf, err := tm.MarshalText()
- if err != nil {
- stream.Error = err
- return
- }
- stream.writeByte('"')
- stream.Write(buf)
- stream.writeByte('"')
- return
- }
- switch key.Kind() {
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- stream.writeByte('"')
- stream.WriteInt64(key.Int())
- stream.writeByte('"')
- return
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
- stream.writeByte('"')
- stream.WriteUint64(key.Uint())
- stream.writeByte('"')
- return
- }
- stream.Error = &json.UnsupportedTypeError{Type: key.Type()}
-}
-
-func (encoder *mapEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
-func (encoder *mapEncoder) IsEmpty(ptr unsafe.Pointer) bool {
- mapInterface := encoder.mapInterface
- mapInterface.word = ptr
- realInterface := (*interface{})(unsafe.Pointer(&mapInterface))
- realVal := reflect.ValueOf(*realInterface)
- return realVal.Len() == 0
-}
-
-type sortKeysMapEncoder struct {
- mapType reflect.Type
- elemType reflect.Type
- elemEncoder ValEncoder
- mapInterface emptyInterface
-}
-
-func (encoder *sortKeysMapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- mapInterface := encoder.mapInterface
- mapInterface.word = ptr
- realInterface := (*interface{})(unsafe.Pointer(&mapInterface))
- realVal := reflect.ValueOf(*realInterface)
-
- // Extract and sort the keys.
- keys := realVal.MapKeys()
- sv := stringValues(make([]reflectWithString, len(keys)))
- for i, v := range keys {
- sv[i].v = v
- if err := sv[i].resolve(); err != nil {
- stream.Error = err
- return
- }
- }
- sort.Sort(sv)
-
- stream.WriteObjectStart()
- for i, key := range sv {
- if i != 0 {
- stream.WriteMore()
- }
- stream.WriteVal(key.s) // might need html escape, so can not WriteString directly
- if stream.indention > 0 {
- stream.writeTwoBytes(byte(':'), byte(' '))
- } else {
- stream.writeByte(':')
- }
- val := realVal.MapIndex(key.v).Interface()
- encoder.elemEncoder.EncodeInterface(val, stream)
- }
- stream.WriteObjectEnd()
-}
-
-// stringValues is a slice of reflect.Value holding *reflect.StringValue.
-// It implements the methods to sort by string.
-type stringValues []reflectWithString
-
-type reflectWithString struct {
- v reflect.Value
- s string
-}
-
-func (w *reflectWithString) resolve() error {
- if w.v.Kind() == reflect.String {
- w.s = w.v.String()
- return nil
- }
- if tm, ok := w.v.Interface().(encoding.TextMarshaler); ok {
- buf, err := tm.MarshalText()
- w.s = string(buf)
- return err
- }
- switch w.v.Kind() {
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- w.s = strconv.FormatInt(w.v.Int(), 10)
- return nil
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
- w.s = strconv.FormatUint(w.v.Uint(), 10)
- return nil
- }
- return &json.UnsupportedTypeError{Type: w.v.Type()}
-}
-
-func (sv stringValues) Len() int { return len(sv) }
-func (sv stringValues) Swap(i, j int) { sv[i], sv[j] = sv[j], sv[i] }
-func (sv stringValues) Less(i, j int) bool { return sv[i].s < sv[j].s }
-
-func (encoder *sortKeysMapEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
-func (encoder *sortKeysMapEncoder) IsEmpty(ptr unsafe.Pointer) bool {
- mapInterface := encoder.mapInterface
- mapInterface.word = ptr
- realInterface := (*interface{})(unsafe.Pointer(&mapInterface))
- realVal := reflect.ValueOf(*realInterface)
- return realVal.Len() == 0
-}
diff --git a/vendor/github.com/json-iterator/go/feature_reflect_native.go b/vendor/github.com/json-iterator/go/feature_reflect_native.go
deleted file mode 100644
index b37dab3d8..000000000
--- a/vendor/github.com/json-iterator/go/feature_reflect_native.go
+++ /dev/null
@@ -1,672 +0,0 @@
-package jsoniter
-
-import (
- "encoding"
- "encoding/base64"
- "encoding/json"
- "unsafe"
-)
-
-type stringCodec struct {
-}
-
-func (codec *stringCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*string)(ptr)) = iter.ReadString()
-}
-
-func (codec *stringCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
- str := *((*string)(ptr))
- stream.WriteString(str)
-}
-
-func (codec *stringCodec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *stringCodec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*string)(ptr)) == ""
-}
-
-type intCodec struct {
-}
-
-func (codec *intCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*int)(ptr)) = iter.ReadInt()
-}
-
-func (codec *intCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteInt(*((*int)(ptr)))
-}
-
-func (codec *intCodec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *intCodec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*int)(ptr)) == 0
-}
-
-type uintptrCodec struct {
-}
-
-func (codec *uintptrCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*uintptr)(ptr)) = uintptr(iter.ReadUint64())
-}
-
-func (codec *uintptrCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteUint64(uint64(*((*uintptr)(ptr))))
-}
-
-func (codec *uintptrCodec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *uintptrCodec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*uintptr)(ptr)) == 0
-}
-
-type int8Codec struct {
-}
-
-func (codec *int8Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*int8)(ptr)) = iter.ReadInt8()
-}
-
-func (codec *int8Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteInt8(*((*int8)(ptr)))
-}
-
-func (codec *int8Codec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *int8Codec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*int8)(ptr)) == 0
-}
-
-type int16Codec struct {
-}
-
-func (codec *int16Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*int16)(ptr)) = iter.ReadInt16()
-}
-
-func (codec *int16Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteInt16(*((*int16)(ptr)))
-}
-
-func (codec *int16Codec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *int16Codec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*int16)(ptr)) == 0
-}
-
-type int32Codec struct {
-}
-
-func (codec *int32Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*int32)(ptr)) = iter.ReadInt32()
-}
-
-func (codec *int32Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteInt32(*((*int32)(ptr)))
-}
-
-func (codec *int32Codec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *int32Codec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*int32)(ptr)) == 0
-}
-
-type int64Codec struct {
-}
-
-func (codec *int64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*int64)(ptr)) = iter.ReadInt64()
-}
-
-func (codec *int64Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteInt64(*((*int64)(ptr)))
-}
-
-func (codec *int64Codec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *int64Codec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*int64)(ptr)) == 0
-}
-
-type uintCodec struct {
-}
-
-func (codec *uintCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*uint)(ptr)) = iter.ReadUint()
-}
-
-func (codec *uintCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteUint(*((*uint)(ptr)))
-}
-
-func (codec *uintCodec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *uintCodec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*uint)(ptr)) == 0
-}
-
-type uint8Codec struct {
-}
-
-func (codec *uint8Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*uint8)(ptr)) = iter.ReadUint8()
-}
-
-func (codec *uint8Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteUint8(*((*uint8)(ptr)))
-}
-
-func (codec *uint8Codec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *uint8Codec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*uint8)(ptr)) == 0
-}
-
-type uint16Codec struct {
-}
-
-func (codec *uint16Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*uint16)(ptr)) = iter.ReadUint16()
-}
-
-func (codec *uint16Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteUint16(*((*uint16)(ptr)))
-}
-
-func (codec *uint16Codec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *uint16Codec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*uint16)(ptr)) == 0
-}
-
-type uint32Codec struct {
-}
-
-func (codec *uint32Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*uint32)(ptr)) = iter.ReadUint32()
-}
-
-func (codec *uint32Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteUint32(*((*uint32)(ptr)))
-}
-
-func (codec *uint32Codec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *uint32Codec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*uint32)(ptr)) == 0
-}
-
-type uint64Codec struct {
-}
-
-func (codec *uint64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*uint64)(ptr)) = iter.ReadUint64()
-}
-
-func (codec *uint64Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteUint64(*((*uint64)(ptr)))
-}
-
-func (codec *uint64Codec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *uint64Codec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*uint64)(ptr)) == 0
-}
-
-type float32Codec struct {
-}
-
-func (codec *float32Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*float32)(ptr)) = iter.ReadFloat32()
-}
-
-func (codec *float32Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteFloat32(*((*float32)(ptr)))
-}
-
-func (codec *float32Codec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *float32Codec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*float32)(ptr)) == 0
-}
-
-type float64Codec struct {
-}
-
-func (codec *float64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*float64)(ptr)) = iter.ReadFloat64()
-}
-
-func (codec *float64Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteFloat64(*((*float64)(ptr)))
-}
-
-func (codec *float64Codec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *float64Codec) IsEmpty(ptr unsafe.Pointer) bool {
- return *((*float64)(ptr)) == 0
-}
-
-type boolCodec struct {
-}
-
-func (codec *boolCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*bool)(ptr)) = iter.ReadBool()
-}
-
-func (codec *boolCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteBool(*((*bool)(ptr)))
-}
-
-func (codec *boolCodec) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, codec)
-}
-
-func (codec *boolCodec) IsEmpty(ptr unsafe.Pointer) bool {
- return !(*((*bool)(ptr)))
-}
-
-type emptyInterfaceCodec struct {
-}
-
-func (codec *emptyInterfaceCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*interface{})(ptr)) = iter.Read()
-}
-
-func (codec *emptyInterfaceCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteVal(*((*interface{})(ptr)))
-}
-
-func (codec *emptyInterfaceCodec) EncodeInterface(val interface{}, stream *Stream) {
- stream.WriteVal(val)
-}
-
-func (codec *emptyInterfaceCodec) IsEmpty(ptr unsafe.Pointer) bool {
- return ptr == nil
-}
-
-type nonEmptyInterfaceCodec struct {
-}
-
-func (codec *nonEmptyInterfaceCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- nonEmptyInterface := (*nonEmptyInterface)(ptr)
- if nonEmptyInterface.itab == nil {
- iter.ReportError("read non-empty interface", "do not know which concrete type to decode to")
- return
- }
- var i interface{}
- e := (*emptyInterface)(unsafe.Pointer(&i))
- e.typ = nonEmptyInterface.itab.typ
- e.word = nonEmptyInterface.word
- iter.ReadVal(&i)
- nonEmptyInterface.word = e.word
-}
-
-func (codec *nonEmptyInterfaceCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
- nonEmptyInterface := (*nonEmptyInterface)(ptr)
- var i interface{}
- e := (*emptyInterface)(unsafe.Pointer(&i))
- e.typ = nonEmptyInterface.itab.typ
- e.word = nonEmptyInterface.word
- stream.WriteVal(i)
-}
-
-func (codec *nonEmptyInterfaceCodec) EncodeInterface(val interface{}, stream *Stream) {
- stream.WriteVal(val)
-}
-
-func (codec *nonEmptyInterfaceCodec) IsEmpty(ptr unsafe.Pointer) bool {
- nonEmptyInterface := (*nonEmptyInterface)(ptr)
- return nonEmptyInterface.word == nil
-}
-
-type anyCodec struct {
-}
-
-func (codec *anyCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*Any)(ptr)) = iter.ReadAny()
-}
-
-func (codec *anyCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
- (*((*Any)(ptr))).WriteTo(stream)
-}
-
-func (codec *anyCodec) EncodeInterface(val interface{}, stream *Stream) {
- (val.(Any)).WriteTo(stream)
-}
-
-func (codec *anyCodec) IsEmpty(ptr unsafe.Pointer) bool {
- return (*((*Any)(ptr))).Size() == 0
-}
-
-type jsonNumberCodec struct {
-}
-
-func (codec *jsonNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*json.Number)(ptr)) = json.Number([]byte(iter.readNumberAsString()))
-}
-
-func (codec *jsonNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteRaw(string(*((*json.Number)(ptr))))
-}
-
-func (codec *jsonNumberCodec) EncodeInterface(val interface{}, stream *Stream) {
- stream.WriteRaw(string(val.(json.Number)))
-}
-
-func (codec *jsonNumberCodec) IsEmpty(ptr unsafe.Pointer) bool {
- return len(*((*json.Number)(ptr))) == 0
-}
-
-type jsoniterNumberCodec struct {
-}
-
-func (codec *jsoniterNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*Number)(ptr)) = Number([]byte(iter.readNumberAsString()))
-}
-
-func (codec *jsoniterNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteRaw(string(*((*Number)(ptr))))
-}
-
-func (codec *jsoniterNumberCodec) EncodeInterface(val interface{}, stream *Stream) {
- stream.WriteRaw(string(val.(Number)))
-}
-
-func (codec *jsoniterNumberCodec) IsEmpty(ptr unsafe.Pointer) bool {
- return len(*((*Number)(ptr))) == 0
-}
-
-type jsonRawMessageCodec struct {
-}
-
-func (codec *jsonRawMessageCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*json.RawMessage)(ptr)) = json.RawMessage(iter.SkipAndReturnBytes())
-}
-
-func (codec *jsonRawMessageCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteRaw(string(*((*json.RawMessage)(ptr))))
-}
-
-func (codec *jsonRawMessageCodec) EncodeInterface(val interface{}, stream *Stream) {
- stream.WriteRaw(string(val.(json.RawMessage)))
-}
-
-func (codec *jsonRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool {
- return len(*((*json.RawMessage)(ptr))) == 0
-}
-
-type jsoniterRawMessageCodec struct {
-}
-
-func (codec *jsoniterRawMessageCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- *((*RawMessage)(ptr)) = RawMessage(iter.SkipAndReturnBytes())
-}
-
-func (codec *jsoniterRawMessageCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.WriteRaw(string(*((*RawMessage)(ptr))))
-}
-
-func (codec *jsoniterRawMessageCodec) EncodeInterface(val interface{}, stream *Stream) {
- stream.WriteRaw(string(val.(RawMessage)))
-}
-
-func (codec *jsoniterRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool {
- return len(*((*RawMessage)(ptr))) == 0
-}
-
-type base64Codec struct {
- sliceDecoder ValDecoder
-}
-
-func (codec *base64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
- if iter.ReadNil() {
- ptrSlice := (*sliceHeader)(ptr)
- ptrSlice.Len = 0
- ptrSlice.Cap = 0
- ptrSlice.Data = nil
- return
- }
- switch iter.WhatIsNext() {
- case StringValue:
- encoding := base64.StdEncoding
- src := iter.SkipAndReturnBytes()
- src = src[1 : len(src)-1]
- decodedLen := encoding.DecodedLen(len(src))
- dst := make([]byte, decodedLen)
- len, err := encoding.Decode(dst, src)
- if err != nil {
- iter.ReportError("decode base64", err.Error())
- } else {
- dst = dst[:len]
- dstSlice := (*sliceHeader)(unsafe.Pointer(&dst))
- ptrSlice := (*sliceHeader)(ptr)
- ptrSlice.Data = dstSlice.Data
- ptrSlice.Cap = dstSlice.Cap
- ptrSlice.Len = dstSlice.Len
- }
- case ArrayValue:
- codec.sliceDecoder.Decode(ptr, iter)
- default:
- iter.ReportError("base64Codec", "invalid input")
- }
-}
-
-func (codec *base64Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
- src := *((*[]byte)(ptr))
- if len(src) == 0 {
- stream.WriteNil()
- return
- }
- encoding := base64.StdEncoding
- stream.writeByte('"')
- toGrow := encoding.EncodedLen(len(src))
- stream.ensure(toGrow)
- encoding.Encode(stream.buf[stream.n:], src)
- stream.n += toGrow
- stream.writeByte('"')
-}
-
-func (codec *base64Codec) EncodeInterface(val interface{}, stream *Stream) {
- ptr := extractInterface(val).word
- src := *((*[]byte)(ptr))
- if len(src) == 0 {
- stream.WriteNil()
- return
- }
- encoding := base64.StdEncoding
- stream.writeByte('"')
- toGrow := encoding.EncodedLen(len(src))
- stream.ensure(toGrow)
- encoding.Encode(stream.buf[stream.n:], src)
- stream.n += toGrow
- stream.writeByte('"')
-}
-
-func (codec *base64Codec) IsEmpty(ptr unsafe.Pointer) bool {
- return len(*((*[]byte)(ptr))) == 0
-}
-
-type stringModeNumberDecoder struct {
- elemDecoder ValDecoder
-}
-
-func (decoder *stringModeNumberDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
- c := iter.nextToken()
- if c != '"' {
- iter.ReportError("stringModeNumberDecoder", `expect "`)
- return
- }
- decoder.elemDecoder.Decode(ptr, iter)
- if iter.Error != nil {
- return
- }
- c = iter.readByte()
- if c != '"' {
- iter.ReportError("stringModeNumberDecoder", `expect "`)
- return
- }
-}
-
-type stringModeStringDecoder struct {
- elemDecoder ValDecoder
- cfg *frozenConfig
-}
-
-func (decoder *stringModeStringDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
- decoder.elemDecoder.Decode(ptr, iter)
- str := *((*string)(ptr))
- tempIter := decoder.cfg.BorrowIterator([]byte(str))
- defer decoder.cfg.ReturnIterator(tempIter)
- *((*string)(ptr)) = tempIter.ReadString()
-}
-
-type stringModeNumberEncoder struct {
- elemEncoder ValEncoder
-}
-
-func (encoder *stringModeNumberEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- stream.writeByte('"')
- encoder.elemEncoder.Encode(ptr, stream)
- stream.writeByte('"')
-}
-
-func (encoder *stringModeNumberEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
-func (encoder *stringModeNumberEncoder) IsEmpty(ptr unsafe.Pointer) bool {
- return encoder.elemEncoder.IsEmpty(ptr)
-}
-
-type stringModeStringEncoder struct {
- elemEncoder ValEncoder
- cfg *frozenConfig
-}
-
-func (encoder *stringModeStringEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- tempStream := encoder.cfg.BorrowStream(nil)
- defer encoder.cfg.ReturnStream(tempStream)
- encoder.elemEncoder.Encode(ptr, tempStream)
- stream.WriteString(string(tempStream.Buffer()))
-}
-
-func (encoder *stringModeStringEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
-func (encoder *stringModeStringEncoder) IsEmpty(ptr unsafe.Pointer) bool {
- return encoder.elemEncoder.IsEmpty(ptr)
-}
-
-type marshalerEncoder struct {
- templateInterface emptyInterface
- checkIsEmpty checkIsEmpty
-}
-
-func (encoder *marshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- templateInterface := encoder.templateInterface
- templateInterface.word = ptr
- realInterface := (*interface{})(unsafe.Pointer(&templateInterface))
- marshaler := (*realInterface).(json.Marshaler)
- bytes, err := marshaler.MarshalJSON()
- if err != nil {
- stream.Error = err
- } else {
- stream.Write(bytes)
- }
-}
-func (encoder *marshalerEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
-func (encoder *marshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool {
- return encoder.checkIsEmpty.IsEmpty(ptr)
-}
-
-type textMarshalerEncoder struct {
- templateInterface emptyInterface
- checkIsEmpty checkIsEmpty
-}
-
-func (encoder *textMarshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- templateInterface := encoder.templateInterface
- templateInterface.word = ptr
- realInterface := (*interface{})(unsafe.Pointer(&templateInterface))
- marshaler := (*realInterface).(encoding.TextMarshaler)
- bytes, err := marshaler.MarshalText()
- if err != nil {
- stream.Error = err
- } else {
- stream.WriteString(string(bytes))
- }
-}
-
-func (encoder *textMarshalerEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
-func (encoder *textMarshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool {
- return encoder.checkIsEmpty.IsEmpty(ptr)
-}
-
-type unmarshalerDecoder struct {
- templateInterface emptyInterface
-}
-
-func (decoder *unmarshalerDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
- templateInterface := decoder.templateInterface
- templateInterface.word = ptr
- realInterface := (*interface{})(unsafe.Pointer(&templateInterface))
- unmarshaler := (*realInterface).(json.Unmarshaler)
- iter.nextToken()
- iter.unreadByte() // skip spaces
- bytes := iter.SkipAndReturnBytes()
- err := unmarshaler.UnmarshalJSON(bytes)
- if err != nil {
- iter.ReportError("unmarshalerDecoder", err.Error())
- }
-}
-
-type textUnmarshalerDecoder struct {
- templateInterface emptyInterface
-}
-
-func (decoder *textUnmarshalerDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
- templateInterface := decoder.templateInterface
- templateInterface.word = ptr
- realInterface := (*interface{})(unsafe.Pointer(&templateInterface))
- unmarshaler := (*realInterface).(encoding.TextUnmarshaler)
- str := iter.ReadString()
- err := unmarshaler.UnmarshalText([]byte(str))
- if err != nil {
- iter.ReportError("textUnmarshalerDecoder", err.Error())
- }
-}
diff --git a/vendor/github.com/json-iterator/go/feature_reflect_slice.go b/vendor/github.com/json-iterator/go/feature_reflect_slice.go
deleted file mode 100644
index 7377eec7b..000000000
--- a/vendor/github.com/json-iterator/go/feature_reflect_slice.go
+++ /dev/null
@@ -1,149 +0,0 @@
-package jsoniter
-
-import (
- "fmt"
- "io"
- "reflect"
- "unsafe"
-)
-
-func decoderOfSlice(cfg *frozenConfig, typ reflect.Type) (ValDecoder, error) {
- decoder, err := decoderOfType(cfg, typ.Elem())
- if err != nil {
- return nil, err
- }
- return &sliceDecoder{typ, typ.Elem(), decoder}, nil
-}
-
-func encoderOfSlice(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error) {
- encoder, err := encoderOfType(cfg, typ.Elem())
- if err != nil {
- return nil, err
- }
- if typ.Elem().Kind() == reflect.Map {
- encoder = &optionalEncoder{encoder}
- }
- return &sliceEncoder{typ, typ.Elem(), encoder}, nil
-}
-
-type sliceEncoder struct {
- sliceType reflect.Type
- elemType reflect.Type
- elemEncoder ValEncoder
-}
-
-func (encoder *sliceEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- slice := (*sliceHeader)(ptr)
- if slice.Data == nil {
- stream.WriteNil()
- return
- }
- if slice.Len == 0 {
- stream.WriteEmptyArray()
- return
- }
- stream.WriteArrayStart()
- elemPtr := unsafe.Pointer(slice.Data)
- encoder.elemEncoder.Encode(unsafe.Pointer(elemPtr), stream)
- for i := 1; i < slice.Len; i++ {
- stream.WriteMore()
- elemPtr = unsafe.Pointer(uintptr(elemPtr) + encoder.elemType.Size())
- encoder.elemEncoder.Encode(unsafe.Pointer(elemPtr), stream)
- }
- stream.WriteArrayEnd()
- if stream.Error != nil && stream.Error != io.EOF {
- stream.Error = fmt.Errorf("%v: %s", encoder.sliceType, stream.Error.Error())
- }
-}
-
-func (encoder *sliceEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
-func (encoder *sliceEncoder) IsEmpty(ptr unsafe.Pointer) bool {
- slice := (*sliceHeader)(ptr)
- return slice.Len == 0
-}
-
-type sliceDecoder struct {
- sliceType reflect.Type
- elemType reflect.Type
- elemDecoder ValDecoder
-}
-
-// sliceHeader is a safe version of SliceHeader used within this package.
-type sliceHeader struct {
- Data unsafe.Pointer
- Len int
- Cap int
-}
-
-func (decoder *sliceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
- decoder.doDecode(ptr, iter)
- if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.sliceType, iter.Error.Error())
- }
-}
-
-func (decoder *sliceDecoder) doDecode(ptr unsafe.Pointer, iter *Iterator) {
- slice := (*sliceHeader)(ptr)
- if iter.ReadNil() {
- slice.Len = 0
- slice.Cap = 0
- slice.Data = nil
- return
- }
- reuseSlice(slice, decoder.sliceType, 4)
- slice.Len = 0
- offset := uintptr(0)
- iter.ReadArrayCB(func(iter *Iterator) bool {
- growOne(slice, decoder.sliceType, decoder.elemType)
- decoder.elemDecoder.Decode(unsafe.Pointer(uintptr(slice.Data)+offset), iter)
- offset += decoder.elemType.Size()
- return true
- })
-}
-
-// grow grows the slice s so that it can hold extra more values, allocating
-// more capacity if needed. It also returns the old and new slice lengths.
-func growOne(slice *sliceHeader, sliceType reflect.Type, elementType reflect.Type) {
- newLen := slice.Len + 1
- if newLen <= slice.Cap {
- slice.Len = newLen
- return
- }
- newCap := slice.Cap
- if newCap == 0 {
- newCap = 1
- } else {
- for newCap < newLen {
- if slice.Len < 1024 {
- newCap += newCap
- } else {
- newCap += newCap / 4
- }
- }
- }
- newVal := reflect.MakeSlice(sliceType, newLen, newCap)
- dst := unsafe.Pointer(newVal.Pointer())
- // copy old array into new array
- originalBytesCount := uintptr(slice.Len) * elementType.Size()
- srcPtr := (*[1 << 30]byte)(slice.Data)
- dstPtr := (*[1 << 30]byte)(dst)
- for i := uintptr(0); i < originalBytesCount; i++ {
- dstPtr[i] = srcPtr[i]
- }
- slice.Data = dst
- slice.Len = newLen
- slice.Cap = newCap
-}
-
-func reuseSlice(slice *sliceHeader, sliceType reflect.Type, expectedCap int) {
- if expectedCap <= slice.Cap {
- return
- }
- newVal := reflect.MakeSlice(sliceType, 0, expectedCap)
- dst := unsafe.Pointer(newVal.Pointer())
- slice.Data = dst
- slice.Cap = expectedCap
-}
diff --git a/vendor/github.com/json-iterator/go/feature_stream_int.go b/vendor/github.com/json-iterator/go/feature_stream_int.go
deleted file mode 100644
index 7cfd522c1..000000000
--- a/vendor/github.com/json-iterator/go/feature_stream_int.go
+++ /dev/null
@@ -1,320 +0,0 @@
-package jsoniter
-
-var digits []uint32
-
-func init() {
- digits = make([]uint32, 1000)
- for i := uint32(0); i < 1000; i++ {
- digits[i] = (((i / 100) + '0') << 16) + ((((i / 10) % 10) + '0') << 8) + i%10 + '0'
- if i < 10 {
- digits[i] += 2 << 24
- } else if i < 100 {
- digits[i] += 1 << 24
- }
- }
-}
-
-func writeFirstBuf(buf []byte, v uint32, n int) int {
- start := v >> 24
- if start == 0 {
- buf[n] = byte(v >> 16)
- n++
- buf[n] = byte(v >> 8)
- n++
- } else if start == 1 {
- buf[n] = byte(v >> 8)
- n++
- }
- buf[n] = byte(v)
- n++
- return n
-}
-
-func writeBuf(buf []byte, v uint32, n int) {
- buf[n] = byte(v >> 16)
- buf[n+1] = byte(v >> 8)
- buf[n+2] = byte(v)
-}
-
-// WriteUint8 write uint8 to stream
-func (stream *Stream) WriteUint8(val uint8) {
- stream.ensure(3)
- stream.n = writeFirstBuf(stream.buf, digits[val], stream.n)
-}
-
-// WriteInt8 write int8 to stream
-func (stream *Stream) WriteInt8(nval int8) {
- stream.ensure(4)
- n := stream.n
- var val uint8
- if nval < 0 {
- val = uint8(-nval)
- stream.buf[n] = '-'
- n++
- } else {
- val = uint8(nval)
- }
- stream.n = writeFirstBuf(stream.buf, digits[val], n)
-}
-
-// WriteUint16 write uint16 to stream
-func (stream *Stream) WriteUint16(val uint16) {
- stream.ensure(5)
- q1 := val / 1000
- if q1 == 0 {
- stream.n = writeFirstBuf(stream.buf, digits[val], stream.n)
- return
- }
- r1 := val - q1*1000
- n := writeFirstBuf(stream.buf, digits[q1], stream.n)
- writeBuf(stream.buf, digits[r1], n)
- stream.n = n + 3
- return
-}
-
-// WriteInt16 write int16 to stream
-func (stream *Stream) WriteInt16(nval int16) {
- stream.ensure(6)
- n := stream.n
- var val uint16
- if nval < 0 {
- val = uint16(-nval)
- stream.buf[n] = '-'
- n++
- } else {
- val = uint16(nval)
- }
- q1 := val / 1000
- if q1 == 0 {
- stream.n = writeFirstBuf(stream.buf, digits[val], n)
- return
- }
- r1 := val - q1*1000
- n = writeFirstBuf(stream.buf, digits[q1], n)
- writeBuf(stream.buf, digits[r1], n)
- stream.n = n + 3
- return
-}
-
-// WriteUint32 write uint32 to stream
-func (stream *Stream) WriteUint32(val uint32) {
- stream.ensure(10)
- n := stream.n
- q1 := val / 1000
- if q1 == 0 {
- stream.n = writeFirstBuf(stream.buf, digits[val], n)
- return
- }
- r1 := val - q1*1000
- q2 := q1 / 1000
- if q2 == 0 {
- n := writeFirstBuf(stream.buf, digits[q1], n)
- writeBuf(stream.buf, digits[r1], n)
- stream.n = n + 3
- return
- }
- r2 := q1 - q2*1000
- q3 := q2 / 1000
- if q3 == 0 {
- n = writeFirstBuf(stream.buf, digits[q2], n)
- } else {
- r3 := q2 - q3*1000
- stream.buf[n] = byte(q3 + '0')
- n++
- writeBuf(stream.buf, digits[r3], n)
- n += 3
- }
- writeBuf(stream.buf, digits[r2], n)
- writeBuf(stream.buf, digits[r1], n+3)
- stream.n = n + 6
-}
-
-// WriteInt32 write int32 to stream
-func (stream *Stream) WriteInt32(nval int32) {
- stream.ensure(11)
- n := stream.n
- var val uint32
- if nval < 0 {
- val = uint32(-nval)
- stream.buf[n] = '-'
- n++
- } else {
- val = uint32(nval)
- }
- q1 := val / 1000
- if q1 == 0 {
- stream.n = writeFirstBuf(stream.buf, digits[val], n)
- return
- }
- r1 := val - q1*1000
- q2 := q1 / 1000
- if q2 == 0 {
- n := writeFirstBuf(stream.buf, digits[q1], n)
- writeBuf(stream.buf, digits[r1], n)
- stream.n = n + 3
- return
- }
- r2 := q1 - q2*1000
- q3 := q2 / 1000
- if q3 == 0 {
- n = writeFirstBuf(stream.buf, digits[q2], n)
- } else {
- r3 := q2 - q3*1000
- stream.buf[n] = byte(q3 + '0')
- n++
- writeBuf(stream.buf, digits[r3], n)
- n += 3
- }
- writeBuf(stream.buf, digits[r2], n)
- writeBuf(stream.buf, digits[r1], n+3)
- stream.n = n + 6
-}
-
-// WriteUint64 write uint64 to stream
-func (stream *Stream) WriteUint64(val uint64) {
- stream.ensure(20)
- n := stream.n
- q1 := val / 1000
- if q1 == 0 {
- stream.n = writeFirstBuf(stream.buf, digits[val], n)
- return
- }
- r1 := val - q1*1000
- q2 := q1 / 1000
- if q2 == 0 {
- n := writeFirstBuf(stream.buf, digits[q1], n)
- writeBuf(stream.buf, digits[r1], n)
- stream.n = n + 3
- return
- }
- r2 := q1 - q2*1000
- q3 := q2 / 1000
- if q3 == 0 {
- n = writeFirstBuf(stream.buf, digits[q2], n)
- writeBuf(stream.buf, digits[r2], n)
- writeBuf(stream.buf, digits[r1], n+3)
- stream.n = n + 6
- return
- }
- r3 := q2 - q3*1000
- q4 := q3 / 1000
- if q4 == 0 {
- n = writeFirstBuf(stream.buf, digits[q3], n)
- writeBuf(stream.buf, digits[r3], n)
- writeBuf(stream.buf, digits[r2], n+3)
- writeBuf(stream.buf, digits[r1], n+6)
- stream.n = n + 9
- return
- }
- r4 := q3 - q4*1000
- q5 := q4 / 1000
- if q5 == 0 {
- n = writeFirstBuf(stream.buf, digits[q4], n)
- writeBuf(stream.buf, digits[r4], n)
- writeBuf(stream.buf, digits[r3], n+3)
- writeBuf(stream.buf, digits[r2], n+6)
- writeBuf(stream.buf, digits[r1], n+9)
- stream.n = n + 12
- return
- }
- r5 := q4 - q5*1000
- q6 := q5 / 1000
- if q6 == 0 {
- n = writeFirstBuf(stream.buf, digits[q5], n)
- } else {
- n = writeFirstBuf(stream.buf, digits[q6], n)
- r6 := q5 - q6*1000
- writeBuf(stream.buf, digits[r6], n)
- n += 3
- }
- writeBuf(stream.buf, digits[r5], n)
- writeBuf(stream.buf, digits[r4], n+3)
- writeBuf(stream.buf, digits[r3], n+6)
- writeBuf(stream.buf, digits[r2], n+9)
- writeBuf(stream.buf, digits[r1], n+12)
- stream.n = n + 15
-}
-
-// WriteInt64 write int64 to stream
-func (stream *Stream) WriteInt64(nval int64) {
- stream.ensure(20)
- n := stream.n
- var val uint64
- if nval < 0 {
- val = uint64(-nval)
- stream.buf[n] = '-'
- n++
- } else {
- val = uint64(nval)
- }
- q1 := val / 1000
- if q1 == 0 {
- stream.n = writeFirstBuf(stream.buf, digits[val], n)
- return
- }
- r1 := val - q1*1000
- q2 := q1 / 1000
- if q2 == 0 {
- n := writeFirstBuf(stream.buf, digits[q1], n)
- writeBuf(stream.buf, digits[r1], n)
- stream.n = n + 3
- return
- }
- r2 := q1 - q2*1000
- q3 := q2 / 1000
- if q3 == 0 {
- n = writeFirstBuf(stream.buf, digits[q2], n)
- writeBuf(stream.buf, digits[r2], n)
- writeBuf(stream.buf, digits[r1], n+3)
- stream.n = n + 6
- return
- }
- r3 := q2 - q3*1000
- q4 := q3 / 1000
- if q4 == 0 {
- n = writeFirstBuf(stream.buf, digits[q3], n)
- writeBuf(stream.buf, digits[r3], n)
- writeBuf(stream.buf, digits[r2], n+3)
- writeBuf(stream.buf, digits[r1], n+6)
- stream.n = n + 9
- return
- }
- r4 := q3 - q4*1000
- q5 := q4 / 1000
- if q5 == 0 {
- n = writeFirstBuf(stream.buf, digits[q4], n)
- writeBuf(stream.buf, digits[r4], n)
- writeBuf(stream.buf, digits[r3], n+3)
- writeBuf(stream.buf, digits[r2], n+6)
- writeBuf(stream.buf, digits[r1], n+9)
- stream.n = n + 12
- return
- }
- r5 := q4 - q5*1000
- q6 := q5 / 1000
- if q6 == 0 {
- n = writeFirstBuf(stream.buf, digits[q5], n)
- } else {
- stream.buf[n] = byte(q6 + '0')
- n++
- r6 := q5 - q6*1000
- writeBuf(stream.buf, digits[r6], n)
- n += 3
- }
- writeBuf(stream.buf, digits[r5], n)
- writeBuf(stream.buf, digits[r4], n+3)
- writeBuf(stream.buf, digits[r3], n+6)
- writeBuf(stream.buf, digits[r2], n+9)
- writeBuf(stream.buf, digits[r1], n+12)
- stream.n = n + 15
-}
-
-// WriteInt write int to stream
-func (stream *Stream) WriteInt(val int) {
- stream.WriteInt64(int64(val))
-}
-
-// WriteUint write uint to stream
-func (stream *Stream) WriteUint(val uint) {
- stream.WriteUint64(uint64(val))
-}
diff --git a/vendor/github.com/json-iterator/go/feature_iter.go b/vendor/github.com/json-iterator/go/iter.go
index 4357d69ba..95ae54fbf 100644
--- a/vendor/github.com/json-iterator/go/feature_iter.go
+++ b/vendor/github.com/json-iterator/go/iter.go
@@ -77,6 +77,7 @@ type Iterator struct {
captureStartedAt int
captured []byte
Error error
+ Attachment interface{} // open for customized decoder
}
// NewIterator creates an empty Iterator instance
@@ -167,7 +168,7 @@ func (iter *Iterator) isObjectEnd() bool {
if c == '}' {
return true
}
- iter.ReportError("isObjectEnd", "object ended prematurely")
+ iter.ReportError("isObjectEnd", "object ended prematurely, unexpected char "+string([]byte{c}))
return true
}
@@ -200,8 +201,22 @@ func (iter *Iterator) ReportError(operation string, msg string) {
if peekStart < 0 {
peekStart = 0
}
- iter.Error = fmt.Errorf("%s: %s, parsing %v ...%s... at %s", operation, msg, iter.head,
- string(iter.buf[peekStart:iter.head]), string(iter.buf[0:iter.tail]))
+ peekEnd := iter.head + 10
+ if peekEnd > iter.tail {
+ peekEnd = iter.tail
+ }
+ parsing := string(iter.buf[peekStart:peekEnd])
+ contextStart := iter.head - 50
+ if contextStart < 0 {
+ contextStart = 0
+ }
+ contextEnd := iter.head + 50
+ if contextEnd > iter.tail {
+ contextEnd = iter.tail
+ }
+ context := string(iter.buf[contextStart:contextEnd])
+ iter.Error = fmt.Errorf("%s: %s, error found in #%v byte of ...|%s|..., bigger context ...|%s|...",
+ operation, msg, iter.head-peekStart, parsing, context)
}
// CurrentBuffer gets current buffer as string for debugging purpose
@@ -210,7 +225,7 @@ func (iter *Iterator) CurrentBuffer() string {
if peekStart < 0 {
peekStart = 0
}
- return fmt.Sprintf("parsing %v ...|%s|... at %s", iter.head,
+ return fmt.Sprintf("parsing #%v byte, around ...|%s|..., whole buffer ...|%s|...", iter.head,
string(iter.buf[peekStart:iter.head]), string(iter.buf[0:iter.tail]))
}
diff --git a/vendor/github.com/json-iterator/go/feature_iter_array.go b/vendor/github.com/json-iterator/go/iter_array.go
index cbc3ec8d1..6188cb457 100644
--- a/vendor/github.com/json-iterator/go/feature_iter_array.go
+++ b/vendor/github.com/json-iterator/go/iter_array.go
@@ -19,7 +19,7 @@ func (iter *Iterator) ReadArray() (ret bool) {
case ',':
return true
default:
- iter.ReportError("ReadArray", "expect [ or , or ] or n, but found: "+string([]byte{c}))
+ iter.ReportError("ReadArray", "expect [ or , or ] or n, but found "+string([]byte{c}))
return
}
}
@@ -42,7 +42,7 @@ func (iter *Iterator) ReadArrayCB(callback func(*Iterator) bool) (ret bool) {
c = iter.nextToken()
}
if c != ']' {
- iter.ReportError("ReadArrayCB", "expect ] in the end")
+ iter.ReportError("ReadArrayCB", "expect ] in the end, but found "+string([]byte{c}))
return false
}
return true
@@ -53,6 +53,6 @@ func (iter *Iterator) ReadArrayCB(callback func(*Iterator) bool) (ret bool) {
iter.skipThreeBytes('u', 'l', 'l')
return true // null
}
- iter.ReportError("ReadArrayCB", "expect [ or n, but found: "+string([]byte{c}))
+ iter.ReportError("ReadArrayCB", "expect [ or n, but found "+string([]byte{c}))
return false
}
diff --git a/vendor/github.com/json-iterator/go/feature_iter_float.go b/vendor/github.com/json-iterator/go/iter_float.go
index 86f459912..4f883c095 100644
--- a/vendor/github.com/json-iterator/go/feature_iter_float.go
+++ b/vendor/github.com/json-iterator/go/iter_float.go
@@ -1,6 +1,7 @@
package jsoniter
import (
+ "encoding/json"
"io"
"math/big"
"strconv"
@@ -339,3 +340,8 @@ func validateFloat(str string) string {
}
return ""
}
+
+// ReadNumber read json.Number
+func (iter *Iterator) ReadNumber() (ret json.Number) {
+ return json.Number(iter.readNumberAsString())
+}
diff --git a/vendor/github.com/json-iterator/go/feature_iter_int.go b/vendor/github.com/json-iterator/go/iter_int.go
index 886879efd..214232035 100644
--- a/vendor/github.com/json-iterator/go/feature_iter_int.go
+++ b/vendor/github.com/json-iterator/go/iter_int.go
@@ -22,11 +22,17 @@ func init() {
// ReadUint read uint
func (iter *Iterator) ReadUint() uint {
+ if strconv.IntSize == 32 {
+ return uint(iter.ReadUint32())
+ }
return uint(iter.ReadUint64())
}
// ReadInt read int
func (iter *Iterator) ReadInt() int {
+ if strconv.IntSize == 32 {
+ return int(iter.ReadInt32())
+ }
return int(iter.ReadInt64())
}
@@ -115,6 +121,7 @@ func (iter *Iterator) ReadUint32() (ret uint32) {
func (iter *Iterator) readUint32(c byte) (ret uint32) {
ind := intDigits[c]
if ind == 0 {
+ iter.assertInteger()
return 0 // single zero
}
if ind == invalidCharForNumber {
@@ -127,12 +134,14 @@ func (iter *Iterator) readUint32(c byte) (ret uint32) {
ind2 := intDigits[iter.buf[i]]
if ind2 == invalidCharForNumber {
iter.head = i
+ iter.assertInteger()
return value
}
i++
ind3 := intDigits[iter.buf[i]]
if ind3 == invalidCharForNumber {
iter.head = i
+ iter.assertInteger()
return value*10 + uint32(ind2)
}
//iter.head = i + 1
@@ -141,30 +150,35 @@ func (iter *Iterator) readUint32(c byte) (ret uint32) {
ind4 := intDigits[iter.buf[i]]
if ind4 == invalidCharForNumber {
iter.head = i
+ iter.assertInteger()
return value*100 + uint32(ind2)*10 + uint32(ind3)
}
i++
ind5 := intDigits[iter.buf[i]]
if ind5 == invalidCharForNumber {
iter.head = i
+ iter.assertInteger()
return value*1000 + uint32(ind2)*100 + uint32(ind3)*10 + uint32(ind4)
}
i++
ind6 := intDigits[iter.buf[i]]
if ind6 == invalidCharForNumber {
iter.head = i
+ iter.assertInteger()
return value*10000 + uint32(ind2)*1000 + uint32(ind3)*100 + uint32(ind4)*10 + uint32(ind5)
}
i++
ind7 := intDigits[iter.buf[i]]
if ind7 == invalidCharForNumber {
iter.head = i
+ iter.assertInteger()
return value*100000 + uint32(ind2)*10000 + uint32(ind3)*1000 + uint32(ind4)*100 + uint32(ind5)*10 + uint32(ind6)
}
i++
ind8 := intDigits[iter.buf[i]]
if ind8 == invalidCharForNumber {
iter.head = i
+ iter.assertInteger()
return value*1000000 + uint32(ind2)*100000 + uint32(ind3)*10000 + uint32(ind4)*1000 + uint32(ind5)*100 + uint32(ind6)*10 + uint32(ind7)
}
i++
@@ -172,6 +186,7 @@ func (iter *Iterator) readUint32(c byte) (ret uint32) {
value = value*10000000 + uint32(ind2)*1000000 + uint32(ind3)*100000 + uint32(ind4)*10000 + uint32(ind5)*1000 + uint32(ind6)*100 + uint32(ind7)*10 + uint32(ind8)
iter.head = i
if ind9 == invalidCharForNumber {
+ iter.assertInteger()
return value
}
}
@@ -180,6 +195,7 @@ func (iter *Iterator) readUint32(c byte) (ret uint32) {
ind = intDigits[iter.buf[i]]
if ind == invalidCharForNumber {
iter.head = i
+ iter.assertInteger()
return value
}
if value > uint32SafeToMultiply10 {
@@ -194,6 +210,7 @@ func (iter *Iterator) readUint32(c byte) (ret uint32) {
value = (value << 3) + (value << 1) + uint32(ind)
}
if !iter.loadMore() {
+ iter.assertInteger()
return value
}
}
@@ -226,6 +243,7 @@ func (iter *Iterator) ReadUint64() uint64 {
func (iter *Iterator) readUint64(c byte) (ret uint64) {
ind := intDigits[c]
if ind == 0 {
+ iter.assertInteger()
return 0 // single zero
}
if ind == invalidCharForNumber {
@@ -233,11 +251,73 @@ func (iter *Iterator) readUint64(c byte) (ret uint64) {
return
}
value := uint64(ind)
+ if iter.tail-iter.head > 10 {
+ i := iter.head
+ ind2 := intDigits[iter.buf[i]]
+ if ind2 == invalidCharForNumber {
+ iter.head = i
+ iter.assertInteger()
+ return value
+ }
+ i++
+ ind3 := intDigits[iter.buf[i]]
+ if ind3 == invalidCharForNumber {
+ iter.head = i
+ iter.assertInteger()
+ return value*10 + uint64(ind2)
+ }
+ //iter.head = i + 1
+ //value = value * 100 + uint32(ind2) * 10 + uint32(ind3)
+ i++
+ ind4 := intDigits[iter.buf[i]]
+ if ind4 == invalidCharForNumber {
+ iter.head = i
+ iter.assertInteger()
+ return value*100 + uint64(ind2)*10 + uint64(ind3)
+ }
+ i++
+ ind5 := intDigits[iter.buf[i]]
+ if ind5 == invalidCharForNumber {
+ iter.head = i
+ iter.assertInteger()
+ return value*1000 + uint64(ind2)*100 + uint64(ind3)*10 + uint64(ind4)
+ }
+ i++
+ ind6 := intDigits[iter.buf[i]]
+ if ind6 == invalidCharForNumber {
+ iter.head = i
+ iter.assertInteger()
+ return value*10000 + uint64(ind2)*1000 + uint64(ind3)*100 + uint64(ind4)*10 + uint64(ind5)
+ }
+ i++
+ ind7 := intDigits[iter.buf[i]]
+ if ind7 == invalidCharForNumber {
+ iter.head = i
+ iter.assertInteger()
+ return value*100000 + uint64(ind2)*10000 + uint64(ind3)*1000 + uint64(ind4)*100 + uint64(ind5)*10 + uint64(ind6)
+ }
+ i++
+ ind8 := intDigits[iter.buf[i]]
+ if ind8 == invalidCharForNumber {
+ iter.head = i
+ iter.assertInteger()
+ return value*1000000 + uint64(ind2)*100000 + uint64(ind3)*10000 + uint64(ind4)*1000 + uint64(ind5)*100 + uint64(ind6)*10 + uint64(ind7)
+ }
+ i++
+ ind9 := intDigits[iter.buf[i]]
+ value = value*10000000 + uint64(ind2)*1000000 + uint64(ind3)*100000 + uint64(ind4)*10000 + uint64(ind5)*1000 + uint64(ind6)*100 + uint64(ind7)*10 + uint64(ind8)
+ iter.head = i
+ if ind9 == invalidCharForNumber {
+ iter.assertInteger()
+ return value
+ }
+ }
for {
for i := iter.head; i < iter.tail; i++ {
ind = intDigits[iter.buf[i]]
if ind == invalidCharForNumber {
iter.head = i
+ iter.assertInteger()
return value
}
if value > uint64SafeToMultiple10 {
@@ -252,7 +332,14 @@ func (iter *Iterator) readUint64(c byte) (ret uint64) {
value = (value << 3) + (value << 1) + uint64(ind)
}
if !iter.loadMore() {
+ iter.assertInteger()
return value
}
}
}
+
+func (iter *Iterator) assertInteger() {
+ if iter.head < len(iter.buf) && iter.buf[iter.head] == '.' {
+ iter.ReportError("assertInteger", "can not decode float as int")
+ }
+}
diff --git a/vendor/github.com/json-iterator/go/feature_iter_object.go b/vendor/github.com/json-iterator/go/iter_object.go
index 3bdb5576e..1c5757671 100644
--- a/vendor/github.com/json-iterator/go/feature_iter_object.go
+++ b/vendor/github.com/json-iterator/go/iter_object.go
@@ -2,8 +2,7 @@ package jsoniter
import (
"fmt"
- "unicode"
- "unsafe"
+ "strings"
)
// ReadObject read one field from object.
@@ -19,15 +18,25 @@ func (iter *Iterator) ReadObject() (ret string) {
c = iter.nextToken()
if c == '"' {
iter.unreadByte()
- return string(iter.readObjectFieldAsBytes())
+ field := iter.ReadString()
+ c = iter.nextToken()
+ if c != ':' {
+ iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
+ }
+ return field
}
if c == '}' {
return "" // end of object
}
- iter.ReportError("ReadObject", `expect " after {`)
+ iter.ReportError("ReadObject", `expect " after {, but found `+string([]byte{c}))
return
case ',':
- return string(iter.readObjectFieldAsBytes())
+ field := iter.ReadString()
+ c = iter.nextToken()
+ if c != ':' {
+ iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
+ }
+ return field
case '}':
return "" // end of object
default:
@@ -36,62 +45,92 @@ func (iter *Iterator) ReadObject() (ret string) {
}
}
-func (iter *Iterator) readFieldHash() int32 {
+// CaseInsensitive
+func (iter *Iterator) readFieldHash() int64 {
hash := int64(0x811c9dc5)
c := iter.nextToken()
- if c == '"' {
- for {
- for i := iter.head; i < iter.tail; i++ {
- // require ascii string and no escape
- b := iter.buf[i]
- if 'A' <= b && b <= 'Z' {
- b += 'a' - 'A'
- }
- if b == '"' {
- iter.head = i + 1
- c = iter.nextToken()
- if c != ':' {
- iter.ReportError("readFieldHash", `expect :, but found `+string([]byte{c}))
+ if c != '"' {
+ iter.ReportError("readFieldHash", `expect ", but found `+string([]byte{c}))
+ return 0
+ }
+ for {
+ for i := iter.head; i < iter.tail; i++ {
+ // require ascii string and no escape
+ b := iter.buf[i]
+ if b == '\\' {
+ iter.head = i
+ for _, b := range iter.readStringSlowPath() {
+ if 'A' <= b && b <= 'Z' && !iter.cfg.caseSensitive {
+ b += 'a' - 'A'
}
- return int32(hash)
+ hash ^= int64(b)
+ hash *= 0x1000193
+ }
+ c = iter.nextToken()
+ if c != ':' {
+ iter.ReportError("readFieldHash", `expect :, but found `+string([]byte{c}))
+ return 0
+ }
+ return hash
+ }
+ if b == '"' {
+ iter.head = i + 1
+ c = iter.nextToken()
+ if c != ':' {
+ iter.ReportError("readFieldHash", `expect :, but found `+string([]byte{c}))
+ return 0
}
- hash ^= int64(b)
- hash *= 0x1000193
+ return hash
}
- if !iter.loadMore() {
- iter.ReportError("readFieldHash", `incomplete field name`)
- return 0
+ if 'A' <= b && b <= 'Z' && !iter.cfg.caseSensitive {
+ b += 'a' - 'A'
}
+ hash ^= int64(b)
+ hash *= 0x1000193
+ }
+ if !iter.loadMore() {
+ iter.ReportError("readFieldHash", `incomplete field name`)
+ return 0
}
}
- iter.ReportError("readFieldHash", `expect ", but found `+string([]byte{c}))
- return 0
}
-func calcHash(str string) int32 {
+func calcHash(str string, caseSensitive bool) int64 {
+ if !caseSensitive {
+ str = strings.ToLower(str)
+ }
hash := int64(0x811c9dc5)
- for _, b := range str {
- hash ^= int64(unicode.ToLower(b))
+ for _, b := range []byte(str) {
+ hash ^= int64(b)
hash *= 0x1000193
}
- return int32(hash)
+ return int64(hash)
}
// ReadObjectCB read object with callback, the key is ascii only and field name not copied
func (iter *Iterator) ReadObjectCB(callback func(*Iterator, string) bool) bool {
c := iter.nextToken()
+ var field string
if c == '{' {
c = iter.nextToken()
if c == '"' {
iter.unreadByte()
- field := iter.readObjectFieldAsBytes()
- if !callback(iter, *(*string)(unsafe.Pointer(&field))) {
+ field = iter.ReadString()
+ c = iter.nextToken()
+ if c != ':' {
+ iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
+ }
+ if !callback(iter, field) {
return false
}
c = iter.nextToken()
for c == ',' {
- field = iter.readObjectFieldAsBytes()
- if !callback(iter, *(*string)(unsafe.Pointer(&field))) {
+ field = iter.ReadString()
+ c = iter.nextToken()
+ if c != ':' {
+ iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
+ }
+ if !callback(iter, field) {
return false
}
c = iter.nextToken()
@@ -105,14 +144,14 @@ func (iter *Iterator) ReadObjectCB(callback func(*Iterator, string) bool) bool {
if c == '}' {
return true
}
- iter.ReportError("ReadObjectCB", `expect " after }`)
+ iter.ReportError("ReadObjectCB", `expect " after }, but found `+string([]byte{c}))
return false
}
if c == 'n' {
iter.skipThreeBytes('u', 'l', 'l')
return true // null
}
- iter.ReportError("ReadObjectCB", `expect { or n`)
+ iter.ReportError("ReadObjectCB", `expect { or n, but found `+string([]byte{c}))
return false
}
@@ -125,7 +164,7 @@ func (iter *Iterator) ReadMapCB(callback func(*Iterator, string) bool) bool {
iter.unreadByte()
field := iter.ReadString()
if iter.nextToken() != ':' {
- iter.ReportError("ReadMapCB", "expect : after object field")
+ iter.ReportError("ReadMapCB", "expect : after object field, but found "+string([]byte{c}))
return false
}
if !callback(iter, field) {
@@ -135,7 +174,7 @@ func (iter *Iterator) ReadMapCB(callback func(*Iterator, string) bool) bool {
for c == ',' {
field = iter.ReadString()
if iter.nextToken() != ':' {
- iter.ReportError("ReadMapCB", "expect : after object field")
+ iter.ReportError("ReadMapCB", "expect : after object field, but found "+string([]byte{c}))
return false
}
if !callback(iter, field) {
@@ -152,14 +191,14 @@ func (iter *Iterator) ReadMapCB(callback func(*Iterator, string) bool) bool {
if c == '}' {
return true
}
- iter.ReportError("ReadMapCB", `expect " after }`)
+ iter.ReportError("ReadMapCB", `expect " after }, but found `+string([]byte{c}))
return false
}
if c == 'n' {
iter.skipThreeBytes('u', 'l', 'l')
return true // null
}
- iter.ReportError("ReadMapCB", `expect { or n`)
+ iter.ReportError("ReadMapCB", `expect { or n, but found `+string([]byte{c}))
return false
}
@@ -176,7 +215,7 @@ func (iter *Iterator) readObjectStart() bool {
iter.skipThreeBytes('u', 'l', 'l')
return false
}
- iter.ReportError("readObjectStart", "expect { or n")
+ iter.ReportError("readObjectStart", "expect { or n, but found "+string([]byte{c}))
return false
}
@@ -192,7 +231,7 @@ func (iter *Iterator) readObjectFieldAsBytes() (ret []byte) {
}
}
if iter.buf[iter.head] != ':' {
- iter.ReportError("readObjectFieldAsBytes", "expect : after object field")
+ iter.ReportError("readObjectFieldAsBytes", "expect : after object field, but found "+string([]byte{iter.buf[iter.head]}))
return
}
iter.head++
diff --git a/vendor/github.com/json-iterator/go/feature_iter_skip.go b/vendor/github.com/json-iterator/go/iter_skip.go
index b008d98c9..f58beb913 100644
--- a/vendor/github.com/json-iterator/go/feature_iter_skip.go
+++ b/vendor/github.com/json-iterator/go/iter_skip.go
@@ -25,7 +25,7 @@ func (iter *Iterator) ReadBool() (ret bool) {
iter.skipFourBytes('a', 'l', 's', 'e')
return false
}
- iter.ReportError("ReadBool", "expect t or f")
+ iter.ReportError("ReadBool", "expect t or f, but found "+string([]byte{c}))
return
}
@@ -59,7 +59,9 @@ func (iter *Iterator) stopCapture() []byte {
iter.captureStartedAt = -1
iter.captured = nil
if len(captured) == 0 {
- return remaining
+ copied := make([]byte, len(remaining))
+ copy(copied, remaining)
+ return copied
}
captured = append(captured, remaining...)
return captured
diff --git a/vendor/github.com/json-iterator/go/feature_iter_skip_sloppy.go b/vendor/github.com/json-iterator/go/iter_skip_sloppy.go
index 047d58a4b..8fcdc3b69 100644
--- a/vendor/github.com/json-iterator/go/feature_iter_skip_sloppy.go
+++ b/vendor/github.com/json-iterator/go/iter_skip_sloppy.go
@@ -1,4 +1,4 @@
-//+build jsoniter-sloppy
+//+build jsoniter_sloppy
package jsoniter
diff --git a/vendor/github.com/json-iterator/go/feature_iter_skip_strict.go b/vendor/github.com/json-iterator/go/iter_skip_strict.go
index d26763825..f67bc2e83 100644
--- a/vendor/github.com/json-iterator/go/feature_iter_skip_strict.go
+++ b/vendor/github.com/json-iterator/go/iter_skip_strict.go
@@ -1,4 +1,4 @@
-//+build !jsoniter-sloppy
+//+build !jsoniter_sloppy
package jsoniter
@@ -64,7 +64,7 @@ func (iter *Iterator) trySkipString() bool {
} else if c == '\\' {
return false
} else if c < ' ' {
- iter.ReportError("ReadString",
+ iter.ReportError("trySkipString",
fmt.Sprintf(`invalid control character found: %d`, c))
return true // already failed
}
diff --git a/vendor/github.com/json-iterator/go/feature_iter_string.go b/vendor/github.com/json-iterator/go/iter_str.go
index b76460046..adc487ea8 100644
--- a/vendor/github.com/json-iterator/go/feature_iter_string.go
+++ b/vendor/github.com/json-iterator/go/iter_str.go
@@ -28,7 +28,7 @@ func (iter *Iterator) ReadString() (ret string) {
iter.skipThreeBytes('u', 'l', 'l')
return ""
}
- iter.ReportError("ReadString", `expects " or n`)
+ iter.ReportError("ReadString", `expects " or n, but found `+string([]byte{c}))
return
}
@@ -47,7 +47,7 @@ func (iter *Iterator) readStringSlowPath() (ret string) {
str = append(str, c)
}
}
- iter.ReportError("ReadString", "unexpected end of input")
+ iter.ReportError("readStringSlowPath", "unexpected end of input")
return
}
@@ -104,7 +104,7 @@ func (iter *Iterator) readEscapedChar(c byte, str []byte) []byte {
case 't':
str = append(str, '\t')
default:
- iter.ReportError("ReadString",
+ iter.ReportError("readEscapedChar",
`invalid escape char after \`)
return nil
}
@@ -139,7 +139,7 @@ func (iter *Iterator) ReadStringAsSlice() (ret []byte) {
}
return copied
}
- iter.ReportError("ReadString", `expects " or n`)
+ iter.ReportError("ReadStringAsSlice", `expects " or n, but found `+string([]byte{c}))
return
}
@@ -156,7 +156,7 @@ func (iter *Iterator) readU4() (ret rune) {
} else if c >= 'A' && c <= 'F' {
ret = ret*16 + rune(c-'A'+10)
} else {
- iter.ReportError("readU4", "expects 0~9 or a~f")
+ iter.ReportError("readU4", "expects 0~9 or a~f, but found "+string([]byte{c}))
return
}
}
diff --git a/vendor/github.com/json-iterator/go/feature_pool.go b/vendor/github.com/json-iterator/go/pool.go
index 73962bc6f..e2389b56c 100644
--- a/vendor/github.com/json-iterator/go/feature_pool.go
+++ b/vendor/github.com/json-iterator/go/pool.go
@@ -17,41 +17,26 @@ type StreamPool interface {
}
func (cfg *frozenConfig) BorrowStream(writer io.Writer) *Stream {
- select {
- case stream := <-cfg.streamPool:
- stream.Reset(writer)
- return stream
- default:
- return NewStream(cfg, writer, 512)
- }
+ stream := cfg.streamPool.Get().(*Stream)
+ stream.Reset(writer)
+ return stream
}
func (cfg *frozenConfig) ReturnStream(stream *Stream) {
+ stream.out = nil
stream.Error = nil
- select {
- case cfg.streamPool <- stream:
- return
- default:
- return
- }
+ stream.Attachment = nil
+ cfg.streamPool.Put(stream)
}
func (cfg *frozenConfig) BorrowIterator(data []byte) *Iterator {
- select {
- case iter := <-cfg.iteratorPool:
- iter.ResetBytes(data)
- return iter
- default:
- return ParseBytes(cfg, data)
- }
+ iter := cfg.iteratorPool.Get().(*Iterator)
+ iter.ResetBytes(data)
+ return iter
}
func (cfg *frozenConfig) ReturnIterator(iter *Iterator) {
iter.Error = nil
- select {
- case cfg.iteratorPool <- iter:
- return
- default:
- return
- }
+ iter.Attachment = nil
+ cfg.iteratorPool.Put(iter)
}
diff --git a/vendor/github.com/json-iterator/go/reflect.go b/vendor/github.com/json-iterator/go/reflect.go
new file mode 100644
index 000000000..4459e203f
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/reflect.go
@@ -0,0 +1,332 @@
+package jsoniter
+
+import (
+ "fmt"
+ "reflect"
+ "unsafe"
+
+ "github.com/modern-go/reflect2"
+)
+
+// ValDecoder is an internal type registered to cache as needed.
+// Don't confuse jsoniter.ValDecoder with json.Decoder.
+// For json.Decoder's adapter, refer to jsoniter.AdapterDecoder(todo link).
+//
+// Reflection on type to create decoders, which is then cached
+// Reflection on value is avoided as we can, as the reflect.Value itself will allocate, with following exceptions
+// 1. create instance of new value, for example *int will need a int to be allocated
+// 2. append to slice, if the existing cap is not enough, allocate will be done using Reflect.New
+// 3. assignment to map, both key and value will be reflect.Value
+// For a simple struct binding, it will be reflect.Value free and allocation free
+type ValDecoder interface {
+ Decode(ptr unsafe.Pointer, iter *Iterator)
+}
+
+// ValEncoder is an internal type registered to cache as needed.
+// Don't confuse jsoniter.ValEncoder with json.Encoder.
+// For json.Encoder's adapter, refer to jsoniter.AdapterEncoder(todo godoc link).
+type ValEncoder interface {
+ IsEmpty(ptr unsafe.Pointer) bool
+ Encode(ptr unsafe.Pointer, stream *Stream)
+}
+
+type checkIsEmpty interface {
+ IsEmpty(ptr unsafe.Pointer) bool
+}
+
+type ctx struct {
+ *frozenConfig
+ prefix string
+ encoders map[reflect2.Type]ValEncoder
+ decoders map[reflect2.Type]ValDecoder
+}
+
+func (b *ctx) caseSensitive() bool {
+ if b.frozenConfig == nil {
+ // default is case-insensitive
+ return false
+ }
+ return b.frozenConfig.caseSensitive
+}
+
+func (b *ctx) append(prefix string) *ctx {
+ return &ctx{
+ frozenConfig: b.frozenConfig,
+ prefix: b.prefix + " " + prefix,
+ encoders: b.encoders,
+ decoders: b.decoders,
+ }
+}
+
+// ReadVal copy the underlying JSON into go interface, same as json.Unmarshal
+func (iter *Iterator) ReadVal(obj interface{}) {
+ cacheKey := reflect2.RTypeOf(obj)
+ decoder := iter.cfg.getDecoderFromCache(cacheKey)
+ if decoder == nil {
+ typ := reflect2.TypeOf(obj)
+ if typ.Kind() != reflect.Ptr {
+ iter.ReportError("ReadVal", "can only unmarshal into pointer")
+ return
+ }
+ decoder = iter.cfg.DecoderOf(typ)
+ }
+ ptr := reflect2.PtrOf(obj)
+ if ptr == nil {
+ iter.ReportError("ReadVal", "can not read into nil pointer")
+ return
+ }
+ decoder.Decode(ptr, iter)
+}
+
+// WriteVal copy the go interface into underlying JSON, same as json.Marshal
+func (stream *Stream) WriteVal(val interface{}) {
+ if nil == val {
+ stream.WriteNil()
+ return
+ }
+ cacheKey := reflect2.RTypeOf(val)
+ encoder := stream.cfg.getEncoderFromCache(cacheKey)
+ if encoder == nil {
+ typ := reflect2.TypeOf(val)
+ encoder = stream.cfg.EncoderOf(typ)
+ }
+ encoder.Encode(reflect2.PtrOf(val), stream)
+}
+
+func (cfg *frozenConfig) DecoderOf(typ reflect2.Type) ValDecoder {
+ cacheKey := typ.RType()
+ decoder := cfg.getDecoderFromCache(cacheKey)
+ if decoder != nil {
+ return decoder
+ }
+ ctx := &ctx{
+ frozenConfig: cfg,
+ prefix: "",
+ decoders: map[reflect2.Type]ValDecoder{},
+ encoders: map[reflect2.Type]ValEncoder{},
+ }
+ ptrType := typ.(*reflect2.UnsafePtrType)
+ decoder = decoderOfType(ctx, ptrType.Elem())
+ cfg.addDecoderToCache(cacheKey, decoder)
+ return decoder
+}
+
+func decoderOfType(ctx *ctx, typ reflect2.Type) ValDecoder {
+ decoder := getTypeDecoderFromExtension(ctx, typ)
+ if decoder != nil {
+ return decoder
+ }
+ decoder = createDecoderOfType(ctx, typ)
+ for _, extension := range extensions {
+ decoder = extension.DecorateDecoder(typ, decoder)
+ }
+ decoder = ctx.decoderExtension.DecorateDecoder(typ, decoder)
+ for _, extension := range ctx.extraExtensions {
+ decoder = extension.DecorateDecoder(typ, decoder)
+ }
+ return decoder
+}
+
+func createDecoderOfType(ctx *ctx, typ reflect2.Type) ValDecoder {
+ decoder := ctx.decoders[typ]
+ if decoder != nil {
+ return decoder
+ }
+ placeholder := &placeholderDecoder{}
+ ctx.decoders[typ] = placeholder
+ decoder = _createDecoderOfType(ctx, typ)
+ placeholder.decoder = decoder
+ return decoder
+}
+
+func _createDecoderOfType(ctx *ctx, typ reflect2.Type) ValDecoder {
+ decoder := createDecoderOfJsonRawMessage(ctx, typ)
+ if decoder != nil {
+ return decoder
+ }
+ decoder = createDecoderOfJsonNumber(ctx, typ)
+ if decoder != nil {
+ return decoder
+ }
+ decoder = createDecoderOfMarshaler(ctx, typ)
+ if decoder != nil {
+ return decoder
+ }
+ decoder = createDecoderOfAny(ctx, typ)
+ if decoder != nil {
+ return decoder
+ }
+ decoder = createDecoderOfNative(ctx, typ)
+ if decoder != nil {
+ return decoder
+ }
+ switch typ.Kind() {
+ case reflect.Interface:
+ ifaceType, isIFace := typ.(*reflect2.UnsafeIFaceType)
+ if isIFace {
+ return &ifaceDecoder{valType: ifaceType}
+ }
+ return &efaceDecoder{}
+ case reflect.Struct:
+ return decoderOfStruct(ctx, typ)
+ case reflect.Array:
+ return decoderOfArray(ctx, typ)
+ case reflect.Slice:
+ return decoderOfSlice(ctx, typ)
+ case reflect.Map:
+ return decoderOfMap(ctx, typ)
+ case reflect.Ptr:
+ return decoderOfOptional(ctx, typ)
+ default:
+ return &lazyErrorDecoder{err: fmt.Errorf("%s%s is unsupported type", ctx.prefix, typ.String())}
+ }
+}
+
+func (cfg *frozenConfig) EncoderOf(typ reflect2.Type) ValEncoder {
+ cacheKey := typ.RType()
+ encoder := cfg.getEncoderFromCache(cacheKey)
+ if encoder != nil {
+ return encoder
+ }
+ ctx := &ctx{
+ frozenConfig: cfg,
+ prefix: "",
+ decoders: map[reflect2.Type]ValDecoder{},
+ encoders: map[reflect2.Type]ValEncoder{},
+ }
+ encoder = encoderOfType(ctx, typ)
+ if typ.LikePtr() {
+ encoder = &onePtrEncoder{encoder}
+ }
+ cfg.addEncoderToCache(cacheKey, encoder)
+ return encoder
+}
+
+type onePtrEncoder struct {
+ encoder ValEncoder
+}
+
+func (encoder *onePtrEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return encoder.encoder.IsEmpty(unsafe.Pointer(&ptr))
+}
+
+func (encoder *onePtrEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ encoder.encoder.Encode(unsafe.Pointer(&ptr), stream)
+}
+
+func encoderOfType(ctx *ctx, typ reflect2.Type) ValEncoder {
+ encoder := getTypeEncoderFromExtension(ctx, typ)
+ if encoder != nil {
+ return encoder
+ }
+ encoder = createEncoderOfType(ctx, typ)
+ for _, extension := range extensions {
+ encoder = extension.DecorateEncoder(typ, encoder)
+ }
+ encoder = ctx.encoderExtension.DecorateEncoder(typ, encoder)
+ for _, extension := range ctx.extraExtensions {
+ encoder = extension.DecorateEncoder(typ, encoder)
+ }
+ return encoder
+}
+
+func createEncoderOfType(ctx *ctx, typ reflect2.Type) ValEncoder {
+ encoder := ctx.encoders[typ]
+ if encoder != nil {
+ return encoder
+ }
+ placeholder := &placeholderEncoder{}
+ ctx.encoders[typ] = placeholder
+ encoder = _createEncoderOfType(ctx, typ)
+ placeholder.encoder = encoder
+ return encoder
+}
+func _createEncoderOfType(ctx *ctx, typ reflect2.Type) ValEncoder {
+ encoder := createEncoderOfJsonRawMessage(ctx, typ)
+ if encoder != nil {
+ return encoder
+ }
+ encoder = createEncoderOfJsonNumber(ctx, typ)
+ if encoder != nil {
+ return encoder
+ }
+ encoder = createEncoderOfMarshaler(ctx, typ)
+ if encoder != nil {
+ return encoder
+ }
+ encoder = createEncoderOfAny(ctx, typ)
+ if encoder != nil {
+ return encoder
+ }
+ encoder = createEncoderOfNative(ctx, typ)
+ if encoder != nil {
+ return encoder
+ }
+ kind := typ.Kind()
+ switch kind {
+ case reflect.Interface:
+ return &dynamicEncoder{typ}
+ case reflect.Struct:
+ return encoderOfStruct(ctx, typ)
+ case reflect.Array:
+ return encoderOfArray(ctx, typ)
+ case reflect.Slice:
+ return encoderOfSlice(ctx, typ)
+ case reflect.Map:
+ return encoderOfMap(ctx, typ)
+ case reflect.Ptr:
+ return encoderOfOptional(ctx, typ)
+ default:
+ return &lazyErrorEncoder{err: fmt.Errorf("%s%s is unsupported type", ctx.prefix, typ.String())}
+ }
+}
+
+type lazyErrorDecoder struct {
+ err error
+}
+
+func (decoder *lazyErrorDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if iter.WhatIsNext() != NilValue {
+ if iter.Error == nil {
+ iter.Error = decoder.err
+ }
+ } else {
+ iter.Skip()
+ }
+}
+
+type lazyErrorEncoder struct {
+ err error
+}
+
+func (encoder *lazyErrorEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ if ptr == nil {
+ stream.WriteNil()
+ } else if stream.Error == nil {
+ stream.Error = encoder.err
+ }
+}
+
+func (encoder *lazyErrorEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return false
+}
+
+type placeholderDecoder struct {
+ decoder ValDecoder
+}
+
+func (decoder *placeholderDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ decoder.decoder.Decode(ptr, iter)
+}
+
+type placeholderEncoder struct {
+ encoder ValEncoder
+}
+
+func (encoder *placeholderEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ encoder.encoder.Encode(ptr, stream)
+}
+
+func (encoder *placeholderEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return encoder.encoder.IsEmpty(ptr)
+}
diff --git a/vendor/github.com/json-iterator/go/reflect_array.go b/vendor/github.com/json-iterator/go/reflect_array.go
new file mode 100644
index 000000000..13a0b7b08
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/reflect_array.go
@@ -0,0 +1,104 @@
+package jsoniter
+
+import (
+ "fmt"
+ "github.com/modern-go/reflect2"
+ "io"
+ "unsafe"
+)
+
+func decoderOfArray(ctx *ctx, typ reflect2.Type) ValDecoder {
+ arrayType := typ.(*reflect2.UnsafeArrayType)
+ decoder := decoderOfType(ctx.append("[arrayElem]"), arrayType.Elem())
+ return &arrayDecoder{arrayType, decoder}
+}
+
+func encoderOfArray(ctx *ctx, typ reflect2.Type) ValEncoder {
+ arrayType := typ.(*reflect2.UnsafeArrayType)
+ if arrayType.Len() == 0 {
+ return emptyArrayEncoder{}
+ }
+ encoder := encoderOfType(ctx.append("[arrayElem]"), arrayType.Elem())
+ return &arrayEncoder{arrayType, encoder}
+}
+
+type emptyArrayEncoder struct{}
+
+func (encoder emptyArrayEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteEmptyArray()
+}
+
+func (encoder emptyArrayEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return true
+}
+
+type arrayEncoder struct {
+ arrayType *reflect2.UnsafeArrayType
+ elemEncoder ValEncoder
+}
+
+func (encoder *arrayEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteArrayStart()
+ elemPtr := unsafe.Pointer(ptr)
+ encoder.elemEncoder.Encode(elemPtr, stream)
+ for i := 1; i < encoder.arrayType.Len(); i++ {
+ stream.WriteMore()
+ elemPtr = encoder.arrayType.UnsafeGetIndex(ptr, i)
+ encoder.elemEncoder.Encode(elemPtr, stream)
+ }
+ stream.WriteArrayEnd()
+ if stream.Error != nil && stream.Error != io.EOF {
+ stream.Error = fmt.Errorf("%v: %s", encoder.arrayType, stream.Error.Error())
+ }
+}
+
+func (encoder *arrayEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return false
+}
+
+type arrayDecoder struct {
+ arrayType *reflect2.UnsafeArrayType
+ elemDecoder ValDecoder
+}
+
+func (decoder *arrayDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ decoder.doDecode(ptr, iter)
+ if iter.Error != nil && iter.Error != io.EOF {
+ iter.Error = fmt.Errorf("%v: %s", decoder.arrayType, iter.Error.Error())
+ }
+}
+
+func (decoder *arrayDecoder) doDecode(ptr unsafe.Pointer, iter *Iterator) {
+ c := iter.nextToken()
+ arrayType := decoder.arrayType
+ if c == 'n' {
+ iter.skipThreeBytes('u', 'l', 'l')
+ return
+ }
+ if c != '[' {
+ iter.ReportError("decode array", "expect [ or n, but found "+string([]byte{c}))
+ return
+ }
+ c = iter.nextToken()
+ if c == ']' {
+ return
+ }
+ iter.unreadByte()
+ elemPtr := arrayType.UnsafeGetIndex(ptr, 0)
+ decoder.elemDecoder.Decode(elemPtr, iter)
+ length := 1
+ for c = iter.nextToken(); c == ','; c = iter.nextToken() {
+ if length >= arrayType.Len() {
+ iter.Skip()
+ continue
+ }
+ idx := length
+ length += 1
+ elemPtr = arrayType.UnsafeGetIndex(ptr, idx)
+ decoder.elemDecoder.Decode(elemPtr, iter)
+ }
+ if c != ']' {
+ iter.ReportError("decode array", "expect ], but found "+string([]byte{c}))
+ return
+ }
+}
diff --git a/vendor/github.com/json-iterator/go/reflect_dynamic.go b/vendor/github.com/json-iterator/go/reflect_dynamic.go
new file mode 100644
index 000000000..8b6bc8b43
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/reflect_dynamic.go
@@ -0,0 +1,70 @@
+package jsoniter
+
+import (
+ "github.com/modern-go/reflect2"
+ "reflect"
+ "unsafe"
+)
+
+type dynamicEncoder struct {
+ valType reflect2.Type
+}
+
+func (encoder *dynamicEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ obj := encoder.valType.UnsafeIndirect(ptr)
+ stream.WriteVal(obj)
+}
+
+func (encoder *dynamicEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return encoder.valType.UnsafeIndirect(ptr) == nil
+}
+
+type efaceDecoder struct {
+}
+
+func (decoder *efaceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ pObj := (*interface{})(ptr)
+ obj := *pObj
+ if obj == nil {
+ *pObj = iter.Read()
+ return
+ }
+ typ := reflect2.TypeOf(obj)
+ if typ.Kind() != reflect.Ptr {
+ *pObj = iter.Read()
+ return
+ }
+ ptrType := typ.(*reflect2.UnsafePtrType)
+ ptrElemType := ptrType.Elem()
+ if iter.WhatIsNext() == NilValue {
+ if ptrElemType.Kind() != reflect.Ptr {
+ iter.skipFourBytes('n', 'u', 'l', 'l')
+ *pObj = nil
+ return
+ }
+ }
+ if reflect2.IsNil(obj) {
+ obj := ptrElemType.New()
+ iter.ReadVal(obj)
+ *pObj = obj
+ return
+ }
+ iter.ReadVal(obj)
+}
+
+type ifaceDecoder struct {
+ valType *reflect2.UnsafeIFaceType
+}
+
+func (decoder *ifaceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if iter.ReadNil() {
+ decoder.valType.UnsafeSet(ptr, decoder.valType.UnsafeNew())
+ return
+ }
+ obj := decoder.valType.UnsafeIndirect(ptr)
+ if reflect2.IsNil(obj) {
+ iter.ReportError("decode non empty interface", "can not unmarshal into nil")
+ return
+ }
+ iter.ReadVal(obj)
+}
diff --git a/vendor/github.com/json-iterator/go/feature_reflect_extension.go b/vendor/github.com/json-iterator/go/reflect_extension.go
index 3dd38299d..04f68756b 100644
--- a/vendor/github.com/json-iterator/go/feature_reflect_extension.go
+++ b/vendor/github.com/json-iterator/go/reflect_extension.go
@@ -2,6 +2,7 @@ package jsoniter
import (
"fmt"
+ "github.com/modern-go/reflect2"
"reflect"
"sort"
"strings"
@@ -17,17 +18,15 @@ var extensions = []Extension{}
// StructDescriptor describe how should we encode/decode the struct
type StructDescriptor struct {
- onePtrEmbedded bool
- onePtrOptimization bool
- Type reflect.Type
- Fields []*Binding
+ Type reflect2.Type
+ Fields []*Binding
}
// GetField get one field from the descriptor by its name.
// Can not use map here to keep field orders.
func (structDescriptor *StructDescriptor) GetField(fieldName string) *Binding {
for _, binding := range structDescriptor.Fields {
- if binding.Field.Name == fieldName {
+ if binding.Field.Name() == fieldName {
return binding
}
}
@@ -37,7 +36,7 @@ func (structDescriptor *StructDescriptor) GetField(fieldName string) *Binding {
// Binding describe how should we encode/decode the struct field
type Binding struct {
levels []int
- Field *reflect.StructField
+ Field reflect2.StructField
FromNames []string
ToNames []string
Encoder ValEncoder
@@ -48,10 +47,12 @@ type Binding struct {
// Can also rename fields by UpdateStructDescriptor.
type Extension interface {
UpdateStructDescriptor(structDescriptor *StructDescriptor)
- CreateDecoder(typ reflect.Type) ValDecoder
- CreateEncoder(typ reflect.Type) ValEncoder
- DecorateDecoder(typ reflect.Type, decoder ValDecoder) ValDecoder
- DecorateEncoder(typ reflect.Type, encoder ValEncoder) ValEncoder
+ CreateMapKeyDecoder(typ reflect2.Type) ValDecoder
+ CreateMapKeyEncoder(typ reflect2.Type) ValEncoder
+ CreateDecoder(typ reflect2.Type) ValDecoder
+ CreateEncoder(typ reflect2.Type) ValEncoder
+ DecorateDecoder(typ reflect2.Type, decoder ValDecoder) ValDecoder
+ DecorateEncoder(typ reflect2.Type, encoder ValEncoder) ValEncoder
}
// DummyExtension embed this type get dummy implementation for all methods of Extension
@@ -62,23 +63,105 @@ type DummyExtension struct {
func (extension *DummyExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) {
}
+// CreateMapKeyDecoder No-op
+func (extension *DummyExtension) CreateMapKeyDecoder(typ reflect2.Type) ValDecoder {
+ return nil
+}
+
+// CreateMapKeyEncoder No-op
+func (extension *DummyExtension) CreateMapKeyEncoder(typ reflect2.Type) ValEncoder {
+ return nil
+}
+
+// CreateDecoder No-op
+func (extension *DummyExtension) CreateDecoder(typ reflect2.Type) ValDecoder {
+ return nil
+}
+
+// CreateEncoder No-op
+func (extension *DummyExtension) CreateEncoder(typ reflect2.Type) ValEncoder {
+ return nil
+}
+
+// DecorateDecoder No-op
+func (extension *DummyExtension) DecorateDecoder(typ reflect2.Type, decoder ValDecoder) ValDecoder {
+ return decoder
+}
+
+// DecorateEncoder No-op
+func (extension *DummyExtension) DecorateEncoder(typ reflect2.Type, encoder ValEncoder) ValEncoder {
+ return encoder
+}
+
+type EncoderExtension map[reflect2.Type]ValEncoder
+
+// UpdateStructDescriptor No-op
+func (extension EncoderExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) {
+}
+
// CreateDecoder No-op
-func (extension *DummyExtension) CreateDecoder(typ reflect.Type) ValDecoder {
+func (extension EncoderExtension) CreateDecoder(typ reflect2.Type) ValDecoder {
+ return nil
+}
+
+// CreateEncoder get encoder from map
+func (extension EncoderExtension) CreateEncoder(typ reflect2.Type) ValEncoder {
+ return extension[typ]
+}
+
+// CreateMapKeyDecoder No-op
+func (extension EncoderExtension) CreateMapKeyDecoder(typ reflect2.Type) ValDecoder {
+ return nil
+}
+
+// CreateMapKeyEncoder No-op
+func (extension EncoderExtension) CreateMapKeyEncoder(typ reflect2.Type) ValEncoder {
+ return nil
+}
+
+// DecorateDecoder No-op
+func (extension EncoderExtension) DecorateDecoder(typ reflect2.Type, decoder ValDecoder) ValDecoder {
+ return decoder
+}
+
+// DecorateEncoder No-op
+func (extension EncoderExtension) DecorateEncoder(typ reflect2.Type, encoder ValEncoder) ValEncoder {
+ return encoder
+}
+
+type DecoderExtension map[reflect2.Type]ValDecoder
+
+// UpdateStructDescriptor No-op
+func (extension DecoderExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) {
+}
+
+// CreateMapKeyDecoder No-op
+func (extension DecoderExtension) CreateMapKeyDecoder(typ reflect2.Type) ValDecoder {
+ return nil
+}
+
+// CreateMapKeyEncoder No-op
+func (extension DecoderExtension) CreateMapKeyEncoder(typ reflect2.Type) ValEncoder {
return nil
}
+// CreateDecoder get decoder from map
+func (extension DecoderExtension) CreateDecoder(typ reflect2.Type) ValDecoder {
+ return extension[typ]
+}
+
// CreateEncoder No-op
-func (extension *DummyExtension) CreateEncoder(typ reflect.Type) ValEncoder {
+func (extension DecoderExtension) CreateEncoder(typ reflect2.Type) ValEncoder {
return nil
}
// DecorateDecoder No-op
-func (extension *DummyExtension) DecorateDecoder(typ reflect.Type, decoder ValDecoder) ValDecoder {
+func (extension DecoderExtension) DecorateDecoder(typ reflect2.Type, decoder ValDecoder) ValDecoder {
return decoder
}
// DecorateEncoder No-op
-func (extension *DummyExtension) DecorateEncoder(typ reflect.Type, encoder ValEncoder) ValEncoder {
+func (extension DecoderExtension) DecorateEncoder(typ reflect2.Type, encoder ValEncoder) ValEncoder {
return encoder
}
@@ -99,10 +182,6 @@ func (encoder *funcEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
encoder.fun(ptr, stream)
}
-func (encoder *funcEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
func (encoder *funcEncoder) IsEmpty(ptr unsafe.Pointer) bool {
if encoder.isEmptyFunc == nil {
return false
@@ -161,132 +240,151 @@ func RegisterExtension(extension Extension) {
extensions = append(extensions, extension)
}
-func getTypeDecoderFromExtension(typ reflect.Type) ValDecoder {
- decoder := _getTypeDecoderFromExtension(typ)
+func getTypeDecoderFromExtension(ctx *ctx, typ reflect2.Type) ValDecoder {
+ decoder := _getTypeDecoderFromExtension(ctx, typ)
if decoder != nil {
for _, extension := range extensions {
decoder = extension.DecorateDecoder(typ, decoder)
}
+ decoder = ctx.decoderExtension.DecorateDecoder(typ, decoder)
+ for _, extension := range ctx.extraExtensions {
+ decoder = extension.DecorateDecoder(typ, decoder)
+ }
}
return decoder
}
-func _getTypeDecoderFromExtension(typ reflect.Type) ValDecoder {
+func _getTypeDecoderFromExtension(ctx *ctx, typ reflect2.Type) ValDecoder {
for _, extension := range extensions {
decoder := extension.CreateDecoder(typ)
if decoder != nil {
return decoder
}
}
+ decoder := ctx.decoderExtension.CreateDecoder(typ)
+ if decoder != nil {
+ return decoder
+ }
+ for _, extension := range ctx.extraExtensions {
+ decoder := extension.CreateDecoder(typ)
+ if decoder != nil {
+ return decoder
+ }
+ }
typeName := typ.String()
- decoder := typeDecoders[typeName]
+ decoder = typeDecoders[typeName]
if decoder != nil {
return decoder
}
if typ.Kind() == reflect.Ptr {
- decoder := typeDecoders[typ.Elem().String()]
+ ptrType := typ.(*reflect2.UnsafePtrType)
+ decoder := typeDecoders[ptrType.Elem().String()]
if decoder != nil {
- return &optionalDecoder{typ.Elem(), decoder}
+ return &OptionalDecoder{ptrType.Elem(), decoder}
}
}
return nil
}
-func getTypeEncoderFromExtension(typ reflect.Type) ValEncoder {
- encoder := _getTypeEncoderFromExtension(typ)
+func getTypeEncoderFromExtension(ctx *ctx, typ reflect2.Type) ValEncoder {
+ encoder := _getTypeEncoderFromExtension(ctx, typ)
if encoder != nil {
for _, extension := range extensions {
encoder = extension.DecorateEncoder(typ, encoder)
}
+ encoder = ctx.encoderExtension.DecorateEncoder(typ, encoder)
+ for _, extension := range ctx.extraExtensions {
+ encoder = extension.DecorateEncoder(typ, encoder)
+ }
}
return encoder
}
-func _getTypeEncoderFromExtension(typ reflect.Type) ValEncoder {
+func _getTypeEncoderFromExtension(ctx *ctx, typ reflect2.Type) ValEncoder {
for _, extension := range extensions {
encoder := extension.CreateEncoder(typ)
if encoder != nil {
return encoder
}
}
+ encoder := ctx.encoderExtension.CreateEncoder(typ)
+ if encoder != nil {
+ return encoder
+ }
+ for _, extension := range ctx.extraExtensions {
+ encoder := extension.CreateEncoder(typ)
+ if encoder != nil {
+ return encoder
+ }
+ }
typeName := typ.String()
- encoder := typeEncoders[typeName]
+ encoder = typeEncoders[typeName]
if encoder != nil {
return encoder
}
if typ.Kind() == reflect.Ptr {
- encoder := typeEncoders[typ.Elem().String()]
+ typePtr := typ.(*reflect2.UnsafePtrType)
+ encoder := typeEncoders[typePtr.Elem().String()]
if encoder != nil {
- return &optionalEncoder{encoder}
+ return &OptionalEncoder{encoder}
}
}
return nil
}
-func describeStruct(cfg *frozenConfig, typ reflect.Type) (*StructDescriptor, error) {
+func describeStruct(ctx *ctx, typ reflect2.Type) *StructDescriptor {
+ structType := typ.(*reflect2.UnsafeStructType)
embeddedBindings := []*Binding{}
bindings := []*Binding{}
- for i := 0; i < typ.NumField(); i++ {
- field := typ.Field(i)
- tag := field.Tag.Get(cfg.getTagKey())
+ for i := 0; i < structType.NumField(); i++ {
+ field := structType.Field(i)
+ tag, hastag := field.Tag().Lookup(ctx.getTagKey())
+ if ctx.onlyTaggedField && !hastag {
+ continue
+ }
tagParts := strings.Split(tag, ",")
if tag == "-" {
continue
}
- if field.Anonymous && (tag == "" || tagParts[0] == "") {
- if field.Type.Kind() == reflect.Struct {
- structDescriptor, err := describeStruct(cfg, field.Type)
- if err != nil {
- return nil, err
- }
+ if field.Anonymous() && (tag == "" || tagParts[0] == "") {
+ if field.Type().Kind() == reflect.Struct {
+ structDescriptor := describeStruct(ctx, field.Type())
for _, binding := range structDescriptor.Fields {
binding.levels = append([]int{i}, binding.levels...)
omitempty := binding.Encoder.(*structFieldEncoder).omitempty
- binding.Encoder = &structFieldEncoder{&field, binding.Encoder, omitempty}
- binding.Decoder = &structFieldDecoder{&field, binding.Decoder}
+ binding.Encoder = &structFieldEncoder{field, binding.Encoder, omitempty}
+ binding.Decoder = &structFieldDecoder{field, binding.Decoder}
embeddedBindings = append(embeddedBindings, binding)
}
continue
- } else if field.Type.Kind() == reflect.Ptr && field.Type.Elem().Kind() == reflect.Struct {
- structDescriptor, err := describeStruct(cfg, field.Type.Elem())
- if err != nil {
- return nil, err
+ } else if field.Type().Kind() == reflect.Ptr {
+ ptrType := field.Type().(*reflect2.UnsafePtrType)
+ if ptrType.Elem().Kind() == reflect.Struct {
+ structDescriptor := describeStruct(ctx, ptrType.Elem())
+ for _, binding := range structDescriptor.Fields {
+ binding.levels = append([]int{i}, binding.levels...)
+ omitempty := binding.Encoder.(*structFieldEncoder).omitempty
+ binding.Encoder = &dereferenceEncoder{binding.Encoder}
+ binding.Encoder = &structFieldEncoder{field, binding.Encoder, omitempty}
+ binding.Decoder = &dereferenceDecoder{ptrType.Elem(), binding.Decoder}
+ binding.Decoder = &structFieldDecoder{field, binding.Decoder}
+ embeddedBindings = append(embeddedBindings, binding)
+ }
+ continue
}
- for _, binding := range structDescriptor.Fields {
- binding.levels = append([]int{i}, binding.levels...)
- omitempty := binding.Encoder.(*structFieldEncoder).omitempty
- binding.Encoder = &optionalEncoder{binding.Encoder}
- binding.Encoder = &structFieldEncoder{&field, binding.Encoder, omitempty}
- binding.Decoder = &deferenceDecoder{field.Type.Elem(), binding.Decoder}
- binding.Decoder = &structFieldDecoder{&field, binding.Decoder}
- embeddedBindings = append(embeddedBindings, binding)
- }
- continue
}
}
- fieldNames := calcFieldNames(field.Name, tagParts[0], tag)
- fieldCacheKey := fmt.Sprintf("%s/%s", typ.String(), field.Name)
+ fieldNames := calcFieldNames(field.Name(), tagParts[0], tag)
+ fieldCacheKey := fmt.Sprintf("%s/%s", typ.String(), field.Name())
decoder := fieldDecoders[fieldCacheKey]
if decoder == nil {
- var err error
- decoder, err = decoderOfType(cfg, field.Type)
- if err != nil {
- return nil, err
- }
+ decoder = decoderOfType(ctx.append(field.Name()), field.Type())
}
encoder := fieldEncoders[fieldCacheKey]
if encoder == nil {
- var err error
- encoder, err = encoderOfType(cfg, field.Type)
- if err != nil {
- return nil, err
- }
- // map is stored as pointer in the struct
- if field.Type.Kind() == reflect.Map {
- encoder = &optionalEncoder{encoder}
- }
+ encoder = encoderOfType(ctx.append(field.Name()), field.Type())
}
binding := &Binding{
- Field: &field,
+ Field: field,
FromNames: fieldNames,
ToNames: fieldNames,
Decoder: decoder,
@@ -295,35 +393,22 @@ func describeStruct(cfg *frozenConfig, typ reflect.Type) (*StructDescriptor, err
binding.levels = []int{i}
bindings = append(bindings, binding)
}
- return createStructDescriptor(cfg, typ, bindings, embeddedBindings), nil
-}
-func createStructDescriptor(cfg *frozenConfig, typ reflect.Type, bindings []*Binding, embeddedBindings []*Binding) *StructDescriptor {
- onePtrEmbedded := false
- onePtrOptimization := false
- if typ.NumField() == 1 {
- firstField := typ.Field(0)
- switch firstField.Type.Kind() {
- case reflect.Ptr:
- if firstField.Anonymous && firstField.Type.Elem().Kind() == reflect.Struct {
- onePtrEmbedded = true
- }
- fallthrough
- case reflect.Map:
- onePtrOptimization = true
- case reflect.Struct:
- onePtrOptimization = isStructOnePtr(firstField.Type)
- }
- }
+ return createStructDescriptor(ctx, typ, bindings, embeddedBindings)
+}
+func createStructDescriptor(ctx *ctx, typ reflect2.Type, bindings []*Binding, embeddedBindings []*Binding) *StructDescriptor {
structDescriptor := &StructDescriptor{
- onePtrEmbedded: onePtrEmbedded,
- onePtrOptimization: onePtrOptimization,
- Type: typ,
- Fields: bindings,
+ Type: typ,
+ Fields: bindings,
}
for _, extension := range extensions {
extension.UpdateStructDescriptor(structDescriptor)
}
- processTags(structDescriptor, cfg)
+ ctx.encoderExtension.UpdateStructDescriptor(structDescriptor)
+ ctx.decoderExtension.UpdateStructDescriptor(structDescriptor)
+ for _, extension := range ctx.extraExtensions {
+ extension.UpdateStructDescriptor(structDescriptor)
+ }
+ processTags(structDescriptor, ctx.frozenConfig)
// merge normal & embedded bindings & sort with original order
allBindings := sortableBindings(append(embeddedBindings, structDescriptor.Fields...))
sort.Sort(allBindings)
@@ -331,21 +416,6 @@ func createStructDescriptor(cfg *frozenConfig, typ reflect.Type, bindings []*Bin
return structDescriptor
}
-func isStructOnePtr(typ reflect.Type) bool {
- if typ.NumField() == 1 {
- firstField := typ.Field(0)
- switch firstField.Type.Kind() {
- case reflect.Ptr:
- return true
- case reflect.Map:
- return true
- case reflect.Struct:
- return isStructOnePtr(firstField.Type)
- }
- }
- return false
-}
-
type sortableBindings []*Binding
func (bindings sortableBindings) Len() int {
@@ -373,12 +443,12 @@ func (bindings sortableBindings) Swap(i, j int) {
func processTags(structDescriptor *StructDescriptor, cfg *frozenConfig) {
for _, binding := range structDescriptor.Fields {
shouldOmitEmpty := false
- tagParts := strings.Split(binding.Field.Tag.Get(cfg.getTagKey()), ",")
+ tagParts := strings.Split(binding.Field.Tag().Get(cfg.getTagKey()), ",")
for _, tagPart := range tagParts[1:] {
if tagPart == "omitempty" {
shouldOmitEmpty = true
} else if tagPart == "string" {
- if binding.Field.Type.Kind() == reflect.String {
+ if binding.Field.Type().Kind() == reflect.String {
binding.Decoder = &stringModeStringDecoder{binding.Decoder, cfg}
binding.Encoder = &stringModeStringEncoder{binding.Encoder, cfg}
} else {
diff --git a/vendor/github.com/json-iterator/go/reflect_json_number.go b/vendor/github.com/json-iterator/go/reflect_json_number.go
new file mode 100644
index 000000000..98d45c1ec
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/reflect_json_number.go
@@ -0,0 +1,112 @@
+package jsoniter
+
+import (
+ "encoding/json"
+ "github.com/modern-go/reflect2"
+ "strconv"
+ "unsafe"
+)
+
+type Number string
+
+// String returns the literal text of the number.
+func (n Number) String() string { return string(n) }
+
+// Float64 returns the number as a float64.
+func (n Number) Float64() (float64, error) {
+ return strconv.ParseFloat(string(n), 64)
+}
+
+// Int64 returns the number as an int64.
+func (n Number) Int64() (int64, error) {
+ return strconv.ParseInt(string(n), 10, 64)
+}
+
+func CastJsonNumber(val interface{}) (string, bool) {
+ switch typedVal := val.(type) {
+ case json.Number:
+ return string(typedVal), true
+ case Number:
+ return string(typedVal), true
+ }
+ return "", false
+}
+
+var jsonNumberType = reflect2.TypeOfPtr((*json.Number)(nil)).Elem()
+var jsoniterNumberType = reflect2.TypeOfPtr((*Number)(nil)).Elem()
+
+func createDecoderOfJsonNumber(ctx *ctx, typ reflect2.Type) ValDecoder {
+ if typ.AssignableTo(jsonNumberType) {
+ return &jsonNumberCodec{}
+ }
+ if typ.AssignableTo(jsoniterNumberType) {
+ return &jsoniterNumberCodec{}
+ }
+ return nil
+}
+
+func createEncoderOfJsonNumber(ctx *ctx, typ reflect2.Type) ValEncoder {
+ if typ.AssignableTo(jsonNumberType) {
+ return &jsonNumberCodec{}
+ }
+ if typ.AssignableTo(jsoniterNumberType) {
+ return &jsoniterNumberCodec{}
+ }
+ return nil
+}
+
+type jsonNumberCodec struct {
+}
+
+func (codec *jsonNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ switch iter.WhatIsNext() {
+ case StringValue:
+ *((*json.Number)(ptr)) = json.Number(iter.ReadString())
+ case NilValue:
+ iter.skipFourBytes('n', 'u', 'l', 'l')
+ *((*json.Number)(ptr)) = ""
+ default:
+ *((*json.Number)(ptr)) = json.Number([]byte(iter.readNumberAsString()))
+ }
+}
+
+func (codec *jsonNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ number := *((*json.Number)(ptr))
+ if len(number) == 0 {
+ stream.writeByte('0')
+ } else {
+ stream.WriteRaw(string(number))
+ }
+}
+
+func (codec *jsonNumberCodec) IsEmpty(ptr unsafe.Pointer) bool {
+ return len(*((*json.Number)(ptr))) == 0
+}
+
+type jsoniterNumberCodec struct {
+}
+
+func (codec *jsoniterNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ switch iter.WhatIsNext() {
+ case StringValue:
+ *((*Number)(ptr)) = Number(iter.ReadString())
+ case NilValue:
+ iter.skipFourBytes('n', 'u', 'l', 'l')
+ *((*Number)(ptr)) = ""
+ default:
+ *((*Number)(ptr)) = Number([]byte(iter.readNumberAsString()))
+ }
+}
+
+func (codec *jsoniterNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ number := *((*Number)(ptr))
+ if len(number) == 0 {
+ stream.writeByte('0')
+ } else {
+ stream.WriteRaw(string(number))
+ }
+}
+
+func (codec *jsoniterNumberCodec) IsEmpty(ptr unsafe.Pointer) bool {
+ return len(*((*Number)(ptr))) == 0
+}
diff --git a/vendor/github.com/json-iterator/go/reflect_json_raw_message.go b/vendor/github.com/json-iterator/go/reflect_json_raw_message.go
new file mode 100644
index 000000000..f2619936c
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/reflect_json_raw_message.go
@@ -0,0 +1,60 @@
+package jsoniter
+
+import (
+ "encoding/json"
+ "github.com/modern-go/reflect2"
+ "unsafe"
+)
+
+var jsonRawMessageType = reflect2.TypeOfPtr((*json.RawMessage)(nil)).Elem()
+var jsoniterRawMessageType = reflect2.TypeOfPtr((*RawMessage)(nil)).Elem()
+
+func createEncoderOfJsonRawMessage(ctx *ctx, typ reflect2.Type) ValEncoder {
+ if typ == jsonRawMessageType {
+ return &jsonRawMessageCodec{}
+ }
+ if typ == jsoniterRawMessageType {
+ return &jsoniterRawMessageCodec{}
+ }
+ return nil
+}
+
+func createDecoderOfJsonRawMessage(ctx *ctx, typ reflect2.Type) ValDecoder {
+ if typ == jsonRawMessageType {
+ return &jsonRawMessageCodec{}
+ }
+ if typ == jsoniterRawMessageType {
+ return &jsoniterRawMessageCodec{}
+ }
+ return nil
+}
+
+type jsonRawMessageCodec struct {
+}
+
+func (codec *jsonRawMessageCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ *((*json.RawMessage)(ptr)) = json.RawMessage(iter.SkipAndReturnBytes())
+}
+
+func (codec *jsonRawMessageCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteRaw(string(*((*json.RawMessage)(ptr))))
+}
+
+func (codec *jsonRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool {
+ return len(*((*json.RawMessage)(ptr))) == 0
+}
+
+type jsoniterRawMessageCodec struct {
+}
+
+func (codec *jsoniterRawMessageCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ *((*RawMessage)(ptr)) = RawMessage(iter.SkipAndReturnBytes())
+}
+
+func (codec *jsoniterRawMessageCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteRaw(string(*((*RawMessage)(ptr))))
+}
+
+func (codec *jsoniterRawMessageCodec) IsEmpty(ptr unsafe.Pointer) bool {
+ return len(*((*RawMessage)(ptr))) == 0
+}
diff --git a/vendor/github.com/json-iterator/go/reflect_map.go b/vendor/github.com/json-iterator/go/reflect_map.go
new file mode 100644
index 000000000..7f66a88b0
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/reflect_map.go
@@ -0,0 +1,326 @@
+package jsoniter
+
+import (
+ "fmt"
+ "github.com/modern-go/reflect2"
+ "io"
+ "reflect"
+ "sort"
+ "unsafe"
+)
+
+func decoderOfMap(ctx *ctx, typ reflect2.Type) ValDecoder {
+ mapType := typ.(*reflect2.UnsafeMapType)
+ keyDecoder := decoderOfMapKey(ctx.append("[mapKey]"), mapType.Key())
+ elemDecoder := decoderOfType(ctx.append("[mapElem]"), mapType.Elem())
+ return &mapDecoder{
+ mapType: mapType,
+ keyType: mapType.Key(),
+ elemType: mapType.Elem(),
+ keyDecoder: keyDecoder,
+ elemDecoder: elemDecoder,
+ }
+}
+
+func encoderOfMap(ctx *ctx, typ reflect2.Type) ValEncoder {
+ mapType := typ.(*reflect2.UnsafeMapType)
+ if ctx.sortMapKeys {
+ return &sortKeysMapEncoder{
+ mapType: mapType,
+ keyEncoder: encoderOfMapKey(ctx.append("[mapKey]"), mapType.Key()),
+ elemEncoder: encoderOfType(ctx.append("[mapElem]"), mapType.Elem()),
+ }
+ }
+ return &mapEncoder{
+ mapType: mapType,
+ keyEncoder: encoderOfMapKey(ctx.append("[mapKey]"), mapType.Key()),
+ elemEncoder: encoderOfType(ctx.append("[mapElem]"), mapType.Elem()),
+ }
+}
+
+func decoderOfMapKey(ctx *ctx, typ reflect2.Type) ValDecoder {
+ decoder := ctx.decoderExtension.CreateMapKeyDecoder(typ)
+ if decoder != nil {
+ return decoder
+ }
+ for _, extension := range ctx.extraExtensions {
+ decoder := extension.CreateMapKeyDecoder(typ)
+ if decoder != nil {
+ return decoder
+ }
+ }
+ switch typ.Kind() {
+ case reflect.String:
+ return decoderOfType(ctx, reflect2.DefaultTypeOfKind(reflect.String))
+ case reflect.Bool,
+ reflect.Uint8, reflect.Int8,
+ reflect.Uint16, reflect.Int16,
+ reflect.Uint32, reflect.Int32,
+ reflect.Uint64, reflect.Int64,
+ reflect.Uint, reflect.Int,
+ reflect.Float32, reflect.Float64,
+ reflect.Uintptr:
+ typ = reflect2.DefaultTypeOfKind(typ.Kind())
+ return &numericMapKeyDecoder{decoderOfType(ctx, typ)}
+ default:
+ ptrType := reflect2.PtrTo(typ)
+ if ptrType.Implements(textMarshalerType) {
+ return &referenceDecoder{
+ &textUnmarshalerDecoder{
+ valType: ptrType,
+ },
+ }
+ }
+ if typ.Implements(textMarshalerType) {
+ return &textUnmarshalerDecoder{
+ valType: typ,
+ }
+ }
+ return &lazyErrorDecoder{err: fmt.Errorf("unsupported map key type: %v", typ)}
+ }
+}
+
+func encoderOfMapKey(ctx *ctx, typ reflect2.Type) ValEncoder {
+ encoder := ctx.encoderExtension.CreateMapKeyEncoder(typ)
+ if encoder != nil {
+ return encoder
+ }
+ for _, extension := range ctx.extraExtensions {
+ encoder := extension.CreateMapKeyEncoder(typ)
+ if encoder != nil {
+ return encoder
+ }
+ }
+ switch typ.Kind() {
+ case reflect.String:
+ return encoderOfType(ctx, reflect2.DefaultTypeOfKind(reflect.String))
+ case reflect.Bool,
+ reflect.Uint8, reflect.Int8,
+ reflect.Uint16, reflect.Int16,
+ reflect.Uint32, reflect.Int32,
+ reflect.Uint64, reflect.Int64,
+ reflect.Uint, reflect.Int,
+ reflect.Float32, reflect.Float64,
+ reflect.Uintptr:
+ typ = reflect2.DefaultTypeOfKind(typ.Kind())
+ return &numericMapKeyEncoder{encoderOfType(ctx, typ)}
+ default:
+ if typ == textMarshalerType {
+ return &directTextMarshalerEncoder{
+ stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")),
+ }
+ }
+ if typ.Implements(textMarshalerType) {
+ return &textMarshalerEncoder{
+ valType: typ,
+ stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")),
+ }
+ }
+ if typ.Kind() == reflect.Interface {
+ return &dynamicMapKeyEncoder{ctx, typ}
+ }
+ return &lazyErrorEncoder{err: fmt.Errorf("unsupported map key type: %v", typ)}
+ }
+}
+
+type mapDecoder struct {
+ mapType *reflect2.UnsafeMapType
+ keyType reflect2.Type
+ elemType reflect2.Type
+ keyDecoder ValDecoder
+ elemDecoder ValDecoder
+}
+
+func (decoder *mapDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ mapType := decoder.mapType
+ c := iter.nextToken()
+ if c == 'n' {
+ iter.skipThreeBytes('u', 'l', 'l')
+ *(*unsafe.Pointer)(ptr) = nil
+ mapType.UnsafeSet(ptr, mapType.UnsafeNew())
+ return
+ }
+ if mapType.UnsafeIsNil(ptr) {
+ mapType.UnsafeSet(ptr, mapType.UnsafeMakeMap(0))
+ }
+ if c != '{' {
+ iter.ReportError("ReadMapCB", `expect { or n, but found `+string([]byte{c}))
+ return
+ }
+ c = iter.nextToken()
+ if c == '}' {
+ return
+ }
+ if c != '"' {
+ iter.ReportError("ReadMapCB", `expect " after }, but found `+string([]byte{c}))
+ return
+ }
+ iter.unreadByte()
+ key := decoder.keyType.UnsafeNew()
+ decoder.keyDecoder.Decode(key, iter)
+ c = iter.nextToken()
+ if c != ':' {
+ iter.ReportError("ReadMapCB", "expect : after object field, but found "+string([]byte{c}))
+ return
+ }
+ elem := decoder.elemType.UnsafeNew()
+ decoder.elemDecoder.Decode(elem, iter)
+ decoder.mapType.UnsafeSetIndex(ptr, key, elem)
+ for c = iter.nextToken(); c == ','; c = iter.nextToken() {
+ key := decoder.keyType.UnsafeNew()
+ decoder.keyDecoder.Decode(key, iter)
+ c = iter.nextToken()
+ if c != ':' {
+ iter.ReportError("ReadMapCB", "expect : after object field, but found "+string([]byte{c}))
+ return
+ }
+ elem := decoder.elemType.UnsafeNew()
+ decoder.elemDecoder.Decode(elem, iter)
+ decoder.mapType.UnsafeSetIndex(ptr, key, elem)
+ }
+ if c != '}' {
+ iter.ReportError("ReadMapCB", `expect }, but found `+string([]byte{c}))
+ }
+}
+
+type numericMapKeyDecoder struct {
+ decoder ValDecoder
+}
+
+func (decoder *numericMapKeyDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ c := iter.nextToken()
+ if c != '"' {
+ iter.ReportError("ReadMapCB", `expect ", but found `+string([]byte{c}))
+ return
+ }
+ decoder.decoder.Decode(ptr, iter)
+ c = iter.nextToken()
+ if c != '"' {
+ iter.ReportError("ReadMapCB", `expect ", but found `+string([]byte{c}))
+ return
+ }
+}
+
+type numericMapKeyEncoder struct {
+ encoder ValEncoder
+}
+
+func (encoder *numericMapKeyEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.writeByte('"')
+ encoder.encoder.Encode(ptr, stream)
+ stream.writeByte('"')
+}
+
+func (encoder *numericMapKeyEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return false
+}
+
+type dynamicMapKeyEncoder struct {
+ ctx *ctx
+ valType reflect2.Type
+}
+
+func (encoder *dynamicMapKeyEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ obj := encoder.valType.UnsafeIndirect(ptr)
+ encoderOfMapKey(encoder.ctx, reflect2.TypeOf(obj)).Encode(reflect2.PtrOf(obj), stream)
+}
+
+func (encoder *dynamicMapKeyEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ obj := encoder.valType.UnsafeIndirect(ptr)
+ return encoderOfMapKey(encoder.ctx, reflect2.TypeOf(obj)).IsEmpty(reflect2.PtrOf(obj))
+}
+
+type mapEncoder struct {
+ mapType *reflect2.UnsafeMapType
+ keyEncoder ValEncoder
+ elemEncoder ValEncoder
+}
+
+func (encoder *mapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteObjectStart()
+ iter := encoder.mapType.UnsafeIterate(ptr)
+ for i := 0; iter.HasNext(); i++ {
+ if i != 0 {
+ stream.WriteMore()
+ }
+ key, elem := iter.UnsafeNext()
+ encoder.keyEncoder.Encode(key, stream)
+ if stream.indention > 0 {
+ stream.writeTwoBytes(byte(':'), byte(' '))
+ } else {
+ stream.writeByte(':')
+ }
+ encoder.elemEncoder.Encode(elem, stream)
+ }
+ stream.WriteObjectEnd()
+}
+
+func (encoder *mapEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ iter := encoder.mapType.UnsafeIterate(ptr)
+ return !iter.HasNext()
+}
+
+type sortKeysMapEncoder struct {
+ mapType *reflect2.UnsafeMapType
+ keyEncoder ValEncoder
+ elemEncoder ValEncoder
+}
+
+func (encoder *sortKeysMapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ if *(*unsafe.Pointer)(ptr) == nil {
+ stream.WriteNil()
+ return
+ }
+ stream.WriteObjectStart()
+ mapIter := encoder.mapType.UnsafeIterate(ptr)
+ subStream := stream.cfg.BorrowStream(nil)
+ subIter := stream.cfg.BorrowIterator(nil)
+ keyValues := encodedKeyValues{}
+ for mapIter.HasNext() {
+ subStream.buf = make([]byte, 0, 64)
+ key, elem := mapIter.UnsafeNext()
+ encoder.keyEncoder.Encode(key, subStream)
+ if subStream.Error != nil && subStream.Error != io.EOF && stream.Error == nil {
+ stream.Error = subStream.Error
+ }
+ encodedKey := subStream.Buffer()
+ subIter.ResetBytes(encodedKey)
+ decodedKey := subIter.ReadString()
+ if stream.indention > 0 {
+ subStream.writeTwoBytes(byte(':'), byte(' '))
+ } else {
+ subStream.writeByte(':')
+ }
+ encoder.elemEncoder.Encode(elem, subStream)
+ keyValues = append(keyValues, encodedKV{
+ key: decodedKey,
+ keyValue: subStream.Buffer(),
+ })
+ }
+ sort.Sort(keyValues)
+ for i, keyValue := range keyValues {
+ if i != 0 {
+ stream.WriteMore()
+ }
+ stream.Write(keyValue.keyValue)
+ }
+ stream.WriteObjectEnd()
+ stream.cfg.ReturnStream(subStream)
+ stream.cfg.ReturnIterator(subIter)
+}
+
+func (encoder *sortKeysMapEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ iter := encoder.mapType.UnsafeIterate(ptr)
+ return !iter.HasNext()
+}
+
+type encodedKeyValues []encodedKV
+
+type encodedKV struct {
+ key string
+ keyValue []byte
+}
+
+func (sv encodedKeyValues) Len() int { return len(sv) }
+func (sv encodedKeyValues) Swap(i, j int) { sv[i], sv[j] = sv[j], sv[i] }
+func (sv encodedKeyValues) Less(i, j int) bool { return sv[i].key < sv[j].key }
diff --git a/vendor/github.com/json-iterator/go/reflect_marshaler.go b/vendor/github.com/json-iterator/go/reflect_marshaler.go
new file mode 100644
index 000000000..58ac959ad
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/reflect_marshaler.go
@@ -0,0 +1,218 @@
+package jsoniter
+
+import (
+ "encoding"
+ "encoding/json"
+ "github.com/modern-go/reflect2"
+ "unsafe"
+)
+
+var marshalerType = reflect2.TypeOfPtr((*json.Marshaler)(nil)).Elem()
+var unmarshalerType = reflect2.TypeOfPtr((*json.Unmarshaler)(nil)).Elem()
+var textMarshalerType = reflect2.TypeOfPtr((*encoding.TextMarshaler)(nil)).Elem()
+var textUnmarshalerType = reflect2.TypeOfPtr((*encoding.TextUnmarshaler)(nil)).Elem()
+
+func createDecoderOfMarshaler(ctx *ctx, typ reflect2.Type) ValDecoder {
+ ptrType := reflect2.PtrTo(typ)
+ if ptrType.Implements(unmarshalerType) {
+ return &referenceDecoder{
+ &unmarshalerDecoder{ptrType},
+ }
+ }
+ if ptrType.Implements(textUnmarshalerType) {
+ return &referenceDecoder{
+ &textUnmarshalerDecoder{ptrType},
+ }
+ }
+ return nil
+}
+
+func createEncoderOfMarshaler(ctx *ctx, typ reflect2.Type) ValEncoder {
+ if typ == marshalerType {
+ checkIsEmpty := createCheckIsEmpty(ctx, typ)
+ var encoder ValEncoder = &directMarshalerEncoder{
+ checkIsEmpty: checkIsEmpty,
+ }
+ return encoder
+ }
+ if typ.Implements(marshalerType) {
+ checkIsEmpty := createCheckIsEmpty(ctx, typ)
+ var encoder ValEncoder = &marshalerEncoder{
+ valType: typ,
+ checkIsEmpty: checkIsEmpty,
+ }
+ return encoder
+ }
+ ptrType := reflect2.PtrTo(typ)
+ if ctx.prefix != "" && ptrType.Implements(marshalerType) {
+ checkIsEmpty := createCheckIsEmpty(ctx, ptrType)
+ var encoder ValEncoder = &marshalerEncoder{
+ valType: ptrType,
+ checkIsEmpty: checkIsEmpty,
+ }
+ return &referenceEncoder{encoder}
+ }
+ if typ == textMarshalerType {
+ checkIsEmpty := createCheckIsEmpty(ctx, typ)
+ var encoder ValEncoder = &directTextMarshalerEncoder{
+ checkIsEmpty: checkIsEmpty,
+ stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")),
+ }
+ return encoder
+ }
+ if typ.Implements(textMarshalerType) {
+ checkIsEmpty := createCheckIsEmpty(ctx, typ)
+ var encoder ValEncoder = &textMarshalerEncoder{
+ valType: typ,
+ stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")),
+ checkIsEmpty: checkIsEmpty,
+ }
+ return encoder
+ }
+ // if prefix is empty, the type is the root type
+ if ctx.prefix != "" && ptrType.Implements(textMarshalerType) {
+ checkIsEmpty := createCheckIsEmpty(ctx, ptrType)
+ var encoder ValEncoder = &textMarshalerEncoder{
+ valType: ptrType,
+ stringEncoder: ctx.EncoderOf(reflect2.TypeOf("")),
+ checkIsEmpty: checkIsEmpty,
+ }
+ return &referenceEncoder{encoder}
+ }
+ return nil
+}
+
+type marshalerEncoder struct {
+ checkIsEmpty checkIsEmpty
+ valType reflect2.Type
+}
+
+func (encoder *marshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ obj := encoder.valType.UnsafeIndirect(ptr)
+ if encoder.valType.IsNullable() && reflect2.IsNil(obj) {
+ stream.WriteNil()
+ return
+ }
+ marshaler := obj.(json.Marshaler)
+ bytes, err := marshaler.MarshalJSON()
+ if err != nil {
+ stream.Error = err
+ } else {
+ stream.Write(bytes)
+ }
+}
+
+func (encoder *marshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return encoder.checkIsEmpty.IsEmpty(ptr)
+}
+
+type directMarshalerEncoder struct {
+ checkIsEmpty checkIsEmpty
+}
+
+func (encoder *directMarshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ marshaler := *(*json.Marshaler)(ptr)
+ if marshaler == nil {
+ stream.WriteNil()
+ return
+ }
+ bytes, err := marshaler.MarshalJSON()
+ if err != nil {
+ stream.Error = err
+ } else {
+ stream.Write(bytes)
+ }
+}
+
+func (encoder *directMarshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return encoder.checkIsEmpty.IsEmpty(ptr)
+}
+
+type textMarshalerEncoder struct {
+ valType reflect2.Type
+ stringEncoder ValEncoder
+ checkIsEmpty checkIsEmpty
+}
+
+func (encoder *textMarshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ obj := encoder.valType.UnsafeIndirect(ptr)
+ if encoder.valType.IsNullable() && reflect2.IsNil(obj) {
+ stream.WriteNil()
+ return
+ }
+ marshaler := (obj).(encoding.TextMarshaler)
+ bytes, err := marshaler.MarshalText()
+ if err != nil {
+ stream.Error = err
+ } else {
+ str := string(bytes)
+ encoder.stringEncoder.Encode(unsafe.Pointer(&str), stream)
+ }
+}
+
+func (encoder *textMarshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return encoder.checkIsEmpty.IsEmpty(ptr)
+}
+
+type directTextMarshalerEncoder struct {
+ stringEncoder ValEncoder
+ checkIsEmpty checkIsEmpty
+}
+
+func (encoder *directTextMarshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ marshaler := *(*encoding.TextMarshaler)(ptr)
+ if marshaler == nil {
+ stream.WriteNil()
+ return
+ }
+ bytes, err := marshaler.MarshalText()
+ if err != nil {
+ stream.Error = err
+ } else {
+ str := string(bytes)
+ encoder.stringEncoder.Encode(unsafe.Pointer(&str), stream)
+ }
+}
+
+func (encoder *directTextMarshalerEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return encoder.checkIsEmpty.IsEmpty(ptr)
+}
+
+type unmarshalerDecoder struct {
+ valType reflect2.Type
+}
+
+func (decoder *unmarshalerDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ valType := decoder.valType
+ obj := valType.UnsafeIndirect(ptr)
+ unmarshaler := obj.(json.Unmarshaler)
+ iter.nextToken()
+ iter.unreadByte() // skip spaces
+ bytes := iter.SkipAndReturnBytes()
+ err := unmarshaler.UnmarshalJSON(bytes)
+ if err != nil {
+ iter.ReportError("unmarshalerDecoder", err.Error())
+ }
+}
+
+type textUnmarshalerDecoder struct {
+ valType reflect2.Type
+}
+
+func (decoder *textUnmarshalerDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ valType := decoder.valType
+ obj := valType.UnsafeIndirect(ptr)
+ if reflect2.IsNil(obj) {
+ ptrType := valType.(*reflect2.UnsafePtrType)
+ elemType := ptrType.Elem()
+ elem := elemType.UnsafeNew()
+ ptrType.UnsafeSet(ptr, unsafe.Pointer(&elem))
+ obj = valType.UnsafeIndirect(ptr)
+ }
+ unmarshaler := (obj).(encoding.TextUnmarshaler)
+ str := iter.ReadString()
+ err := unmarshaler.UnmarshalText([]byte(str))
+ if err != nil {
+ iter.ReportError("textUnmarshalerDecoder", err.Error())
+ }
+}
diff --git a/vendor/github.com/json-iterator/go/reflect_native.go b/vendor/github.com/json-iterator/go/reflect_native.go
new file mode 100644
index 000000000..9042eb0cb
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/reflect_native.go
@@ -0,0 +1,451 @@
+package jsoniter
+
+import (
+ "encoding/base64"
+ "reflect"
+ "strconv"
+ "unsafe"
+
+ "github.com/modern-go/reflect2"
+)
+
+const ptrSize = 32 << uintptr(^uintptr(0)>>63)
+
+func createEncoderOfNative(ctx *ctx, typ reflect2.Type) ValEncoder {
+ if typ.Kind() == reflect.Slice && typ.(reflect2.SliceType).Elem().Kind() == reflect.Uint8 {
+ sliceDecoder := decoderOfSlice(ctx, typ)
+ return &base64Codec{sliceDecoder: sliceDecoder}
+ }
+ typeName := typ.String()
+ kind := typ.Kind()
+ switch kind {
+ case reflect.String:
+ if typeName != "string" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*string)(nil)).Elem())
+ }
+ return &stringCodec{}
+ case reflect.Int:
+ if typeName != "int" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*int)(nil)).Elem())
+ }
+ if strconv.IntSize == 32 {
+ return &int32Codec{}
+ }
+ return &int64Codec{}
+ case reflect.Int8:
+ if typeName != "int8" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*int8)(nil)).Elem())
+ }
+ return &int8Codec{}
+ case reflect.Int16:
+ if typeName != "int16" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*int16)(nil)).Elem())
+ }
+ return &int16Codec{}
+ case reflect.Int32:
+ if typeName != "int32" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*int32)(nil)).Elem())
+ }
+ return &int32Codec{}
+ case reflect.Int64:
+ if typeName != "int64" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*int64)(nil)).Elem())
+ }
+ return &int64Codec{}
+ case reflect.Uint:
+ if typeName != "uint" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*uint)(nil)).Elem())
+ }
+ if strconv.IntSize == 32 {
+ return &uint32Codec{}
+ }
+ return &uint64Codec{}
+ case reflect.Uint8:
+ if typeName != "uint8" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*uint8)(nil)).Elem())
+ }
+ return &uint8Codec{}
+ case reflect.Uint16:
+ if typeName != "uint16" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*uint16)(nil)).Elem())
+ }
+ return &uint16Codec{}
+ case reflect.Uint32:
+ if typeName != "uint32" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*uint32)(nil)).Elem())
+ }
+ return &uint32Codec{}
+ case reflect.Uintptr:
+ if typeName != "uintptr" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*uintptr)(nil)).Elem())
+ }
+ if ptrSize == 32 {
+ return &uint32Codec{}
+ }
+ return &uint64Codec{}
+ case reflect.Uint64:
+ if typeName != "uint64" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*uint64)(nil)).Elem())
+ }
+ return &uint64Codec{}
+ case reflect.Float32:
+ if typeName != "float32" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*float32)(nil)).Elem())
+ }
+ return &float32Codec{}
+ case reflect.Float64:
+ if typeName != "float64" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*float64)(nil)).Elem())
+ }
+ return &float64Codec{}
+ case reflect.Bool:
+ if typeName != "bool" {
+ return encoderOfType(ctx, reflect2.TypeOfPtr((*bool)(nil)).Elem())
+ }
+ return &boolCodec{}
+ }
+ return nil
+}
+
+func createDecoderOfNative(ctx *ctx, typ reflect2.Type) ValDecoder {
+ if typ.Kind() == reflect.Slice && typ.(reflect2.SliceType).Elem().Kind() == reflect.Uint8 {
+ sliceDecoder := decoderOfSlice(ctx, typ)
+ return &base64Codec{sliceDecoder: sliceDecoder}
+ }
+ typeName := typ.String()
+ switch typ.Kind() {
+ case reflect.String:
+ if typeName != "string" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*string)(nil)).Elem())
+ }
+ return &stringCodec{}
+ case reflect.Int:
+ if typeName != "int" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*int)(nil)).Elem())
+ }
+ if strconv.IntSize == 32 {
+ return &int32Codec{}
+ }
+ return &int64Codec{}
+ case reflect.Int8:
+ if typeName != "int8" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*int8)(nil)).Elem())
+ }
+ return &int8Codec{}
+ case reflect.Int16:
+ if typeName != "int16" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*int16)(nil)).Elem())
+ }
+ return &int16Codec{}
+ case reflect.Int32:
+ if typeName != "int32" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*int32)(nil)).Elem())
+ }
+ return &int32Codec{}
+ case reflect.Int64:
+ if typeName != "int64" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*int64)(nil)).Elem())
+ }
+ return &int64Codec{}
+ case reflect.Uint:
+ if typeName != "uint" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*uint)(nil)).Elem())
+ }
+ if strconv.IntSize == 32 {
+ return &uint32Codec{}
+ }
+ return &uint64Codec{}
+ case reflect.Uint8:
+ if typeName != "uint8" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*uint8)(nil)).Elem())
+ }
+ return &uint8Codec{}
+ case reflect.Uint16:
+ if typeName != "uint16" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*uint16)(nil)).Elem())
+ }
+ return &uint16Codec{}
+ case reflect.Uint32:
+ if typeName != "uint32" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*uint32)(nil)).Elem())
+ }
+ return &uint32Codec{}
+ case reflect.Uintptr:
+ if typeName != "uintptr" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*uintptr)(nil)).Elem())
+ }
+ if ptrSize == 32 {
+ return &uint32Codec{}
+ }
+ return &uint64Codec{}
+ case reflect.Uint64:
+ if typeName != "uint64" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*uint64)(nil)).Elem())
+ }
+ return &uint64Codec{}
+ case reflect.Float32:
+ if typeName != "float32" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*float32)(nil)).Elem())
+ }
+ return &float32Codec{}
+ case reflect.Float64:
+ if typeName != "float64" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*float64)(nil)).Elem())
+ }
+ return &float64Codec{}
+ case reflect.Bool:
+ if typeName != "bool" {
+ return decoderOfType(ctx, reflect2.TypeOfPtr((*bool)(nil)).Elem())
+ }
+ return &boolCodec{}
+ }
+ return nil
+}
+
+type stringCodec struct {
+}
+
+func (codec *stringCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ *((*string)(ptr)) = iter.ReadString()
+}
+
+func (codec *stringCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ str := *((*string)(ptr))
+ stream.WriteString(str)
+}
+
+func (codec *stringCodec) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*string)(ptr)) == ""
+}
+
+type int8Codec struct {
+}
+
+func (codec *int8Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if !iter.ReadNil() {
+ *((*int8)(ptr)) = iter.ReadInt8()
+ }
+}
+
+func (codec *int8Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteInt8(*((*int8)(ptr)))
+}
+
+func (codec *int8Codec) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*int8)(ptr)) == 0
+}
+
+type int16Codec struct {
+}
+
+func (codec *int16Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if !iter.ReadNil() {
+ *((*int16)(ptr)) = iter.ReadInt16()
+ }
+}
+
+func (codec *int16Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteInt16(*((*int16)(ptr)))
+}
+
+func (codec *int16Codec) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*int16)(ptr)) == 0
+}
+
+type int32Codec struct {
+}
+
+func (codec *int32Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if !iter.ReadNil() {
+ *((*int32)(ptr)) = iter.ReadInt32()
+ }
+}
+
+func (codec *int32Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteInt32(*((*int32)(ptr)))
+}
+
+func (codec *int32Codec) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*int32)(ptr)) == 0
+}
+
+type int64Codec struct {
+}
+
+func (codec *int64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if !iter.ReadNil() {
+ *((*int64)(ptr)) = iter.ReadInt64()
+ }
+}
+
+func (codec *int64Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteInt64(*((*int64)(ptr)))
+}
+
+func (codec *int64Codec) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*int64)(ptr)) == 0
+}
+
+type uint8Codec struct {
+}
+
+func (codec *uint8Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if !iter.ReadNil() {
+ *((*uint8)(ptr)) = iter.ReadUint8()
+ }
+}
+
+func (codec *uint8Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteUint8(*((*uint8)(ptr)))
+}
+
+func (codec *uint8Codec) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*uint8)(ptr)) == 0
+}
+
+type uint16Codec struct {
+}
+
+func (codec *uint16Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if !iter.ReadNil() {
+ *((*uint16)(ptr)) = iter.ReadUint16()
+ }
+}
+
+func (codec *uint16Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteUint16(*((*uint16)(ptr)))
+}
+
+func (codec *uint16Codec) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*uint16)(ptr)) == 0
+}
+
+type uint32Codec struct {
+}
+
+func (codec *uint32Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if !iter.ReadNil() {
+ *((*uint32)(ptr)) = iter.ReadUint32()
+ }
+}
+
+func (codec *uint32Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteUint32(*((*uint32)(ptr)))
+}
+
+func (codec *uint32Codec) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*uint32)(ptr)) == 0
+}
+
+type uint64Codec struct {
+}
+
+func (codec *uint64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if !iter.ReadNil() {
+ *((*uint64)(ptr)) = iter.ReadUint64()
+ }
+}
+
+func (codec *uint64Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteUint64(*((*uint64)(ptr)))
+}
+
+func (codec *uint64Codec) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*uint64)(ptr)) == 0
+}
+
+type float32Codec struct {
+}
+
+func (codec *float32Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if !iter.ReadNil() {
+ *((*float32)(ptr)) = iter.ReadFloat32()
+ }
+}
+
+func (codec *float32Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteFloat32(*((*float32)(ptr)))
+}
+
+func (codec *float32Codec) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*float32)(ptr)) == 0
+}
+
+type float64Codec struct {
+}
+
+func (codec *float64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if !iter.ReadNil() {
+ *((*float64)(ptr)) = iter.ReadFloat64()
+ }
+}
+
+func (codec *float64Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteFloat64(*((*float64)(ptr)))
+}
+
+func (codec *float64Codec) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*float64)(ptr)) == 0
+}
+
+type boolCodec struct {
+}
+
+func (codec *boolCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if !iter.ReadNil() {
+ *((*bool)(ptr)) = iter.ReadBool()
+ }
+}
+
+func (codec *boolCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.WriteBool(*((*bool)(ptr)))
+}
+
+func (codec *boolCodec) IsEmpty(ptr unsafe.Pointer) bool {
+ return !(*((*bool)(ptr)))
+}
+
+type base64Codec struct {
+ sliceType *reflect2.UnsafeSliceType
+ sliceDecoder ValDecoder
+}
+
+func (codec *base64Codec) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if iter.ReadNil() {
+ codec.sliceType.UnsafeSetNil(ptr)
+ return
+ }
+ switch iter.WhatIsNext() {
+ case StringValue:
+ src := iter.ReadString()
+ dst, err := base64.StdEncoding.DecodeString(src)
+ if err != nil {
+ iter.ReportError("decode base64", err.Error())
+ } else {
+ codec.sliceType.UnsafeSet(ptr, unsafe.Pointer(&dst))
+ }
+ case ArrayValue:
+ codec.sliceDecoder.Decode(ptr, iter)
+ default:
+ iter.ReportError("base64Codec", "invalid input")
+ }
+}
+
+func (codec *base64Codec) Encode(ptr unsafe.Pointer, stream *Stream) {
+ src := *((*[]byte)(ptr))
+ if len(src) == 0 {
+ stream.WriteNil()
+ return
+ }
+ encoding := base64.StdEncoding
+ stream.writeByte('"')
+ size := encoding.EncodedLen(len(src))
+ buf := make([]byte, size)
+ encoding.Encode(buf, src)
+ stream.buf = append(stream.buf, buf...)
+ stream.writeByte('"')
+}
+
+func (codec *base64Codec) IsEmpty(ptr unsafe.Pointer) bool {
+ return len(*((*[]byte)(ptr))) == 0
+}
diff --git a/vendor/github.com/json-iterator/go/reflect_optional.go b/vendor/github.com/json-iterator/go/reflect_optional.go
new file mode 100644
index 000000000..43ec71d6d
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/reflect_optional.go
@@ -0,0 +1,133 @@
+package jsoniter
+
+import (
+ "github.com/modern-go/reflect2"
+ "reflect"
+ "unsafe"
+)
+
+func decoderOfOptional(ctx *ctx, typ reflect2.Type) ValDecoder {
+ ptrType := typ.(*reflect2.UnsafePtrType)
+ elemType := ptrType.Elem()
+ decoder := decoderOfType(ctx, elemType)
+ if ctx.prefix == "" && elemType.Kind() == reflect.Ptr {
+ return &dereferenceDecoder{elemType, decoder}
+ }
+ return &OptionalDecoder{elemType, decoder}
+}
+
+func encoderOfOptional(ctx *ctx, typ reflect2.Type) ValEncoder {
+ ptrType := typ.(*reflect2.UnsafePtrType)
+ elemType := ptrType.Elem()
+ elemEncoder := encoderOfType(ctx, elemType)
+ encoder := &OptionalEncoder{elemEncoder}
+ return encoder
+}
+
+type OptionalDecoder struct {
+ ValueType reflect2.Type
+ ValueDecoder ValDecoder
+}
+
+func (decoder *OptionalDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if iter.ReadNil() {
+ *((*unsafe.Pointer)(ptr)) = nil
+ } else {
+ if *((*unsafe.Pointer)(ptr)) == nil {
+ //pointer to null, we have to allocate memory to hold the value
+ newPtr := decoder.ValueType.UnsafeNew()
+ decoder.ValueDecoder.Decode(newPtr, iter)
+ *((*unsafe.Pointer)(ptr)) = newPtr
+ } else {
+ //reuse existing instance
+ decoder.ValueDecoder.Decode(*((*unsafe.Pointer)(ptr)), iter)
+ }
+ }
+}
+
+type dereferenceDecoder struct {
+ // only to deference a pointer
+ valueType reflect2.Type
+ valueDecoder ValDecoder
+}
+
+func (decoder *dereferenceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ if *((*unsafe.Pointer)(ptr)) == nil {
+ //pointer to null, we have to allocate memory to hold the value
+ newPtr := decoder.valueType.UnsafeNew()
+ decoder.valueDecoder.Decode(newPtr, iter)
+ *((*unsafe.Pointer)(ptr)) = newPtr
+ } else {
+ //reuse existing instance
+ decoder.valueDecoder.Decode(*((*unsafe.Pointer)(ptr)), iter)
+ }
+}
+
+type OptionalEncoder struct {
+ ValueEncoder ValEncoder
+}
+
+func (encoder *OptionalEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ if *((*unsafe.Pointer)(ptr)) == nil {
+ stream.WriteNil()
+ } else {
+ encoder.ValueEncoder.Encode(*((*unsafe.Pointer)(ptr)), stream)
+ }
+}
+
+func (encoder *OptionalEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return *((*unsafe.Pointer)(ptr)) == nil
+}
+
+type dereferenceEncoder struct {
+ ValueEncoder ValEncoder
+}
+
+func (encoder *dereferenceEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ if *((*unsafe.Pointer)(ptr)) == nil {
+ stream.WriteNil()
+ } else {
+ encoder.ValueEncoder.Encode(*((*unsafe.Pointer)(ptr)), stream)
+ }
+}
+
+func (encoder *dereferenceEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ dePtr := *((*unsafe.Pointer)(ptr))
+ if dePtr == nil {
+ return true
+ }
+ return encoder.ValueEncoder.IsEmpty(dePtr)
+}
+
+func (encoder *dereferenceEncoder) IsEmbeddedPtrNil(ptr unsafe.Pointer) bool {
+ deReferenced := *((*unsafe.Pointer)(ptr))
+ if deReferenced == nil {
+ return true
+ }
+ isEmbeddedPtrNil, converted := encoder.ValueEncoder.(IsEmbeddedPtrNil)
+ if !converted {
+ return false
+ }
+ fieldPtr := unsafe.Pointer(deReferenced)
+ return isEmbeddedPtrNil.IsEmbeddedPtrNil(fieldPtr)
+}
+
+type referenceEncoder struct {
+ encoder ValEncoder
+}
+
+func (encoder *referenceEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ encoder.encoder.Encode(unsafe.Pointer(&ptr), stream)
+}
+
+func (encoder *referenceEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return encoder.encoder.IsEmpty(unsafe.Pointer(&ptr))
+}
+
+type referenceDecoder struct {
+ decoder ValDecoder
+}
+
+func (decoder *referenceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ decoder.decoder.Decode(unsafe.Pointer(&ptr), iter)
+}
diff --git a/vendor/github.com/json-iterator/go/reflect_slice.go b/vendor/github.com/json-iterator/go/reflect_slice.go
new file mode 100644
index 000000000..9441d79df
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/reflect_slice.go
@@ -0,0 +1,99 @@
+package jsoniter
+
+import (
+ "fmt"
+ "github.com/modern-go/reflect2"
+ "io"
+ "unsafe"
+)
+
+func decoderOfSlice(ctx *ctx, typ reflect2.Type) ValDecoder {
+ sliceType := typ.(*reflect2.UnsafeSliceType)
+ decoder := decoderOfType(ctx.append("[sliceElem]"), sliceType.Elem())
+ return &sliceDecoder{sliceType, decoder}
+}
+
+func encoderOfSlice(ctx *ctx, typ reflect2.Type) ValEncoder {
+ sliceType := typ.(*reflect2.UnsafeSliceType)
+ encoder := encoderOfType(ctx.append("[sliceElem]"), sliceType.Elem())
+ return &sliceEncoder{sliceType, encoder}
+}
+
+type sliceEncoder struct {
+ sliceType *reflect2.UnsafeSliceType
+ elemEncoder ValEncoder
+}
+
+func (encoder *sliceEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ if encoder.sliceType.UnsafeIsNil(ptr) {
+ stream.WriteNil()
+ return
+ }
+ length := encoder.sliceType.UnsafeLengthOf(ptr)
+ if length == 0 {
+ stream.WriteEmptyArray()
+ return
+ }
+ stream.WriteArrayStart()
+ encoder.elemEncoder.Encode(encoder.sliceType.UnsafeGetIndex(ptr, 0), stream)
+ for i := 1; i < length; i++ {
+ stream.WriteMore()
+ elemPtr := encoder.sliceType.UnsafeGetIndex(ptr, i)
+ encoder.elemEncoder.Encode(elemPtr, stream)
+ }
+ stream.WriteArrayEnd()
+ if stream.Error != nil && stream.Error != io.EOF {
+ stream.Error = fmt.Errorf("%v: %s", encoder.sliceType, stream.Error.Error())
+ }
+}
+
+func (encoder *sliceEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return encoder.sliceType.UnsafeLengthOf(ptr) == 0
+}
+
+type sliceDecoder struct {
+ sliceType *reflect2.UnsafeSliceType
+ elemDecoder ValDecoder
+}
+
+func (decoder *sliceDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ decoder.doDecode(ptr, iter)
+ if iter.Error != nil && iter.Error != io.EOF {
+ iter.Error = fmt.Errorf("%v: %s", decoder.sliceType, iter.Error.Error())
+ }
+}
+
+func (decoder *sliceDecoder) doDecode(ptr unsafe.Pointer, iter *Iterator) {
+ c := iter.nextToken()
+ sliceType := decoder.sliceType
+ if c == 'n' {
+ iter.skipThreeBytes('u', 'l', 'l')
+ sliceType.UnsafeSetNil(ptr)
+ return
+ }
+ if c != '[' {
+ iter.ReportError("decode slice", "expect [ or n, but found "+string([]byte{c}))
+ return
+ }
+ c = iter.nextToken()
+ if c == ']' {
+ sliceType.UnsafeSet(ptr, sliceType.UnsafeMakeSlice(0, 0))
+ return
+ }
+ iter.unreadByte()
+ sliceType.UnsafeGrow(ptr, 1)
+ elemPtr := sliceType.UnsafeGetIndex(ptr, 0)
+ decoder.elemDecoder.Decode(elemPtr, iter)
+ length := 1
+ for c = iter.nextToken(); c == ','; c = iter.nextToken() {
+ idx := length
+ length += 1
+ sliceType.UnsafeGrow(ptr, length)
+ elemPtr = sliceType.UnsafeGetIndex(ptr, idx)
+ decoder.elemDecoder.Decode(elemPtr, iter)
+ }
+ if c != ']' {
+ iter.ReportError("decode slice", "expect ], but found "+string([]byte{c}))
+ return
+ }
+}
diff --git a/vendor/github.com/json-iterator/go/feature_reflect_struct_decoder.go b/vendor/github.com/json-iterator/go/reflect_struct_decoder.go
index b3417fd73..355d2d116 100644
--- a/vendor/github.com/json-iterator/go/feature_reflect_struct_decoder.go
+++ b/vendor/github.com/json-iterator/go/reflect_struct_decoder.go
@@ -3,38 +3,78 @@ package jsoniter
import (
"fmt"
"io"
- "reflect"
"strings"
"unsafe"
+
+ "github.com/modern-go/reflect2"
)
-func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder) (ValDecoder, error) {
- knownHash := map[int32]struct{}{
+func decoderOfStruct(ctx *ctx, typ reflect2.Type) ValDecoder {
+ bindings := map[string]*Binding{}
+ structDescriptor := describeStruct(ctx, typ)
+ for _, binding := range structDescriptor.Fields {
+ for _, fromName := range binding.FromNames {
+ old := bindings[fromName]
+ if old == nil {
+ bindings[fromName] = binding
+ continue
+ }
+ ignoreOld, ignoreNew := resolveConflictBinding(ctx.frozenConfig, old, binding)
+ if ignoreOld {
+ delete(bindings, fromName)
+ }
+ if !ignoreNew {
+ bindings[fromName] = binding
+ }
+ }
+ }
+ fields := map[string]*structFieldDecoder{}
+ for k, binding := range bindings {
+ fields[k] = binding.Decoder.(*structFieldDecoder)
+ }
+
+ if !ctx.caseSensitive() {
+ for k, binding := range bindings {
+ if _, found := fields[strings.ToLower(k)]; !found {
+ fields[strings.ToLower(k)] = binding.Decoder.(*structFieldDecoder)
+ }
+ }
+ }
+
+ return createStructDecoder(ctx, typ, fields)
+}
+
+func createStructDecoder(ctx *ctx, typ reflect2.Type, fields map[string]*structFieldDecoder) ValDecoder {
+ if ctx.disallowUnknownFields {
+ return &generalStructDecoder{typ: typ, fields: fields, disallowUnknownFields: true}
+ }
+ knownHash := map[int64]struct{}{
0: {},
}
+
switch len(fields) {
case 0:
- return &skipObjectDecoder{typ}, nil
+ return &skipObjectDecoder{typ}
case 1:
for fieldName, fieldDecoder := range fields {
- fieldHash := calcHash(fieldName)
+ fieldHash := calcHash(fieldName, ctx.caseSensitive())
_, known := knownHash[fieldHash]
if known {
- return &generalStructDecoder{typ, fields}, nil
+ return &generalStructDecoder{typ, fields, false}
}
knownHash[fieldHash] = struct{}{}
- return &oneFieldStructDecoder{typ, fieldHash, fieldDecoder}, nil
+ return &oneFieldStructDecoder{typ, fieldHash, fieldDecoder}
}
case 2:
- var fieldHash1 int32
- var fieldHash2 int32
+ var fieldHash1 int64
+ var fieldHash2 int64
var fieldDecoder1 *structFieldDecoder
var fieldDecoder2 *structFieldDecoder
for fieldName, fieldDecoder := range fields {
- fieldHash := calcHash(fieldName)
+ fieldHash := calcHash(fieldName, ctx.caseSensitive())
_, known := knownHash[fieldHash]
if known {
- return &generalStructDecoder{typ, fields}, nil
+ return &generalStructDecoder{typ, fields, false}
}
knownHash[fieldHash] = struct{}{}
if fieldHash1 == 0 {
@@ -45,19 +85,19 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
fieldDecoder2 = fieldDecoder
}
}
- return &twoFieldsStructDecoder{typ, fieldHash1, fieldDecoder1, fieldHash2, fieldDecoder2}, nil
+ return &twoFieldsStructDecoder{typ, fieldHash1, fieldDecoder1, fieldHash2, fieldDecoder2}
case 3:
- var fieldName1 int32
- var fieldName2 int32
- var fieldName3 int32
+ var fieldName1 int64
+ var fieldName2 int64
+ var fieldName3 int64
var fieldDecoder1 *structFieldDecoder
var fieldDecoder2 *structFieldDecoder
var fieldDecoder3 *structFieldDecoder
for fieldName, fieldDecoder := range fields {
- fieldHash := calcHash(fieldName)
+ fieldHash := calcHash(fieldName, ctx.caseSensitive())
_, known := knownHash[fieldHash]
if known {
- return &generalStructDecoder{typ, fields}, nil
+ return &generalStructDecoder{typ, fields, false}
}
knownHash[fieldHash] = struct{}{}
if fieldName1 == 0 {
@@ -72,21 +112,23 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
}
}
return &threeFieldsStructDecoder{typ,
- fieldName1, fieldDecoder1, fieldName2, fieldDecoder2, fieldName3, fieldDecoder3}, nil
+ fieldName1, fieldDecoder1,
+ fieldName2, fieldDecoder2,
+ fieldName3, fieldDecoder3}
case 4:
- var fieldName1 int32
- var fieldName2 int32
- var fieldName3 int32
- var fieldName4 int32
+ var fieldName1 int64
+ var fieldName2 int64
+ var fieldName3 int64
+ var fieldName4 int64
var fieldDecoder1 *structFieldDecoder
var fieldDecoder2 *structFieldDecoder
var fieldDecoder3 *structFieldDecoder
var fieldDecoder4 *structFieldDecoder
for fieldName, fieldDecoder := range fields {
- fieldHash := calcHash(fieldName)
+ fieldHash := calcHash(fieldName, ctx.caseSensitive())
_, known := knownHash[fieldHash]
if known {
- return &generalStructDecoder{typ, fields}, nil
+ return &generalStructDecoder{typ, fields, false}
}
knownHash[fieldHash] = struct{}{}
if fieldName1 == 0 {
@@ -104,24 +146,26 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
}
}
return &fourFieldsStructDecoder{typ,
- fieldName1, fieldDecoder1, fieldName2, fieldDecoder2, fieldName3, fieldDecoder3,
- fieldName4, fieldDecoder4}, nil
+ fieldName1, fieldDecoder1,
+ fieldName2, fieldDecoder2,
+ fieldName3, fieldDecoder3,
+ fieldName4, fieldDecoder4}
case 5:
- var fieldName1 int32
- var fieldName2 int32
- var fieldName3 int32
- var fieldName4 int32
- var fieldName5 int32
+ var fieldName1 int64
+ var fieldName2 int64
+ var fieldName3 int64
+ var fieldName4 int64
+ var fieldName5 int64
var fieldDecoder1 *structFieldDecoder
var fieldDecoder2 *structFieldDecoder
var fieldDecoder3 *structFieldDecoder
var fieldDecoder4 *structFieldDecoder
var fieldDecoder5 *structFieldDecoder
for fieldName, fieldDecoder := range fields {
- fieldHash := calcHash(fieldName)
+ fieldHash := calcHash(fieldName, ctx.caseSensitive())
_, known := knownHash[fieldHash]
if known {
- return &generalStructDecoder{typ, fields}, nil
+ return &generalStructDecoder{typ, fields, false}
}
knownHash[fieldHash] = struct{}{}
if fieldName1 == 0 {
@@ -142,15 +186,18 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
}
}
return &fiveFieldsStructDecoder{typ,
- fieldName1, fieldDecoder1, fieldName2, fieldDecoder2, fieldName3, fieldDecoder3,
- fieldName4, fieldDecoder4, fieldName5, fieldDecoder5}, nil
+ fieldName1, fieldDecoder1,
+ fieldName2, fieldDecoder2,
+ fieldName3, fieldDecoder3,
+ fieldName4, fieldDecoder4,
+ fieldName5, fieldDecoder5}
case 6:
- var fieldName1 int32
- var fieldName2 int32
- var fieldName3 int32
- var fieldName4 int32
- var fieldName5 int32
- var fieldName6 int32
+ var fieldName1 int64
+ var fieldName2 int64
+ var fieldName3 int64
+ var fieldName4 int64
+ var fieldName5 int64
+ var fieldName6 int64
var fieldDecoder1 *structFieldDecoder
var fieldDecoder2 *structFieldDecoder
var fieldDecoder3 *structFieldDecoder
@@ -158,10 +205,10 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
var fieldDecoder5 *structFieldDecoder
var fieldDecoder6 *structFieldDecoder
for fieldName, fieldDecoder := range fields {
- fieldHash := calcHash(fieldName)
+ fieldHash := calcHash(fieldName, ctx.caseSensitive())
_, known := knownHash[fieldHash]
if known {
- return &generalStructDecoder{typ, fields}, nil
+ return &generalStructDecoder{typ, fields, false}
}
knownHash[fieldHash] = struct{}{}
if fieldName1 == 0 {
@@ -185,16 +232,20 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
}
}
return &sixFieldsStructDecoder{typ,
- fieldName1, fieldDecoder1, fieldName2, fieldDecoder2, fieldName3, fieldDecoder3,
- fieldName4, fieldDecoder4, fieldName5, fieldDecoder5, fieldName6, fieldDecoder6}, nil
+ fieldName1, fieldDecoder1,
+ fieldName2, fieldDecoder2,
+ fieldName3, fieldDecoder3,
+ fieldName4, fieldDecoder4,
+ fieldName5, fieldDecoder5,
+ fieldName6, fieldDecoder6}
case 7:
- var fieldName1 int32
- var fieldName2 int32
- var fieldName3 int32
- var fieldName4 int32
- var fieldName5 int32
- var fieldName6 int32
- var fieldName7 int32
+ var fieldName1 int64
+ var fieldName2 int64
+ var fieldName3 int64
+ var fieldName4 int64
+ var fieldName5 int64
+ var fieldName6 int64
+ var fieldName7 int64
var fieldDecoder1 *structFieldDecoder
var fieldDecoder2 *structFieldDecoder
var fieldDecoder3 *structFieldDecoder
@@ -203,10 +254,10 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
var fieldDecoder6 *structFieldDecoder
var fieldDecoder7 *structFieldDecoder
for fieldName, fieldDecoder := range fields {
- fieldHash := calcHash(fieldName)
+ fieldHash := calcHash(fieldName, ctx.caseSensitive())
_, known := knownHash[fieldHash]
if known {
- return &generalStructDecoder{typ, fields}, nil
+ return &generalStructDecoder{typ, fields, false}
}
knownHash[fieldHash] = struct{}{}
if fieldName1 == 0 {
@@ -233,18 +284,22 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
}
}
return &sevenFieldsStructDecoder{typ,
- fieldName1, fieldDecoder1, fieldName2, fieldDecoder2, fieldName3, fieldDecoder3,
- fieldName4, fieldDecoder4, fieldName5, fieldDecoder5, fieldName6, fieldDecoder6,
- fieldName7, fieldDecoder7}, nil
+ fieldName1, fieldDecoder1,
+ fieldName2, fieldDecoder2,
+ fieldName3, fieldDecoder3,
+ fieldName4, fieldDecoder4,
+ fieldName5, fieldDecoder5,
+ fieldName6, fieldDecoder6,
+ fieldName7, fieldDecoder7}
case 8:
- var fieldName1 int32
- var fieldName2 int32
- var fieldName3 int32
- var fieldName4 int32
- var fieldName5 int32
- var fieldName6 int32
- var fieldName7 int32
- var fieldName8 int32
+ var fieldName1 int64
+ var fieldName2 int64
+ var fieldName3 int64
+ var fieldName4 int64
+ var fieldName5 int64
+ var fieldName6 int64
+ var fieldName7 int64
+ var fieldName8 int64
var fieldDecoder1 *structFieldDecoder
var fieldDecoder2 *structFieldDecoder
var fieldDecoder3 *structFieldDecoder
@@ -254,10 +309,10 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
var fieldDecoder7 *structFieldDecoder
var fieldDecoder8 *structFieldDecoder
for fieldName, fieldDecoder := range fields {
- fieldHash := calcHash(fieldName)
+ fieldHash := calcHash(fieldName, ctx.caseSensitive())
_, known := knownHash[fieldHash]
if known {
- return &generalStructDecoder{typ, fields}, nil
+ return &generalStructDecoder{typ, fields, false}
}
knownHash[fieldHash] = struct{}{}
if fieldName1 == 0 {
@@ -287,19 +342,24 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
}
}
return &eightFieldsStructDecoder{typ,
- fieldName1, fieldDecoder1, fieldName2, fieldDecoder2, fieldName3, fieldDecoder3,
- fieldName4, fieldDecoder4, fieldName5, fieldDecoder5, fieldName6, fieldDecoder6,
- fieldName7, fieldDecoder7, fieldName8, fieldDecoder8}, nil
+ fieldName1, fieldDecoder1,
+ fieldName2, fieldDecoder2,
+ fieldName3, fieldDecoder3,
+ fieldName4, fieldDecoder4,
+ fieldName5, fieldDecoder5,
+ fieldName6, fieldDecoder6,
+ fieldName7, fieldDecoder7,
+ fieldName8, fieldDecoder8}
case 9:
- var fieldName1 int32
- var fieldName2 int32
- var fieldName3 int32
- var fieldName4 int32
- var fieldName5 int32
- var fieldName6 int32
- var fieldName7 int32
- var fieldName8 int32
- var fieldName9 int32
+ var fieldName1 int64
+ var fieldName2 int64
+ var fieldName3 int64
+ var fieldName4 int64
+ var fieldName5 int64
+ var fieldName6 int64
+ var fieldName7 int64
+ var fieldName8 int64
+ var fieldName9 int64
var fieldDecoder1 *structFieldDecoder
var fieldDecoder2 *structFieldDecoder
var fieldDecoder3 *structFieldDecoder
@@ -310,10 +370,10 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
var fieldDecoder8 *structFieldDecoder
var fieldDecoder9 *structFieldDecoder
for fieldName, fieldDecoder := range fields {
- fieldHash := calcHash(fieldName)
+ fieldHash := calcHash(fieldName, ctx.caseSensitive())
_, known := knownHash[fieldHash]
if known {
- return &generalStructDecoder{typ, fields}, nil
+ return &generalStructDecoder{typ, fields, false}
}
knownHash[fieldHash] = struct{}{}
if fieldName1 == 0 {
@@ -346,20 +406,26 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
}
}
return &nineFieldsStructDecoder{typ,
- fieldName1, fieldDecoder1, fieldName2, fieldDecoder2, fieldName3, fieldDecoder3,
- fieldName4, fieldDecoder4, fieldName5, fieldDecoder5, fieldName6, fieldDecoder6,
- fieldName7, fieldDecoder7, fieldName8, fieldDecoder8, fieldName9, fieldDecoder9}, nil
+ fieldName1, fieldDecoder1,
+ fieldName2, fieldDecoder2,
+ fieldName3, fieldDecoder3,
+ fieldName4, fieldDecoder4,
+ fieldName5, fieldDecoder5,
+ fieldName6, fieldDecoder6,
+ fieldName7, fieldDecoder7,
+ fieldName8, fieldDecoder8,
+ fieldName9, fieldDecoder9}
case 10:
- var fieldName1 int32
- var fieldName2 int32
- var fieldName3 int32
- var fieldName4 int32
- var fieldName5 int32
- var fieldName6 int32
- var fieldName7 int32
- var fieldName8 int32
- var fieldName9 int32
- var fieldName10 int32
+ var fieldName1 int64
+ var fieldName2 int64
+ var fieldName3 int64
+ var fieldName4 int64
+ var fieldName5 int64
+ var fieldName6 int64
+ var fieldName7 int64
+ var fieldName8 int64
+ var fieldName9 int64
+ var fieldName10 int64
var fieldDecoder1 *structFieldDecoder
var fieldDecoder2 *structFieldDecoder
var fieldDecoder3 *structFieldDecoder
@@ -371,10 +437,10 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
var fieldDecoder9 *structFieldDecoder
var fieldDecoder10 *structFieldDecoder
for fieldName, fieldDecoder := range fields {
- fieldHash := calcHash(fieldName)
+ fieldHash := calcHash(fieldName, ctx.caseSensitive())
_, known := knownHash[fieldHash]
if known {
- return &generalStructDecoder{typ, fields}, nil
+ return &generalStructDecoder{typ, fields, false}
}
knownHash[fieldHash] = struct{}{}
if fieldName1 == 0 {
@@ -410,48 +476,80 @@ func createStructDecoder(typ reflect.Type, fields map[string]*structFieldDecoder
}
}
return &tenFieldsStructDecoder{typ,
- fieldName1, fieldDecoder1, fieldName2, fieldDecoder2, fieldName3, fieldDecoder3,
- fieldName4, fieldDecoder4, fieldName5, fieldDecoder5, fieldName6, fieldDecoder6,
- fieldName7, fieldDecoder7, fieldName8, fieldDecoder8, fieldName9, fieldDecoder9,
- fieldName10, fieldDecoder10}, nil
+ fieldName1, fieldDecoder1,
+ fieldName2, fieldDecoder2,
+ fieldName3, fieldDecoder3,
+ fieldName4, fieldDecoder4,
+ fieldName5, fieldDecoder5,
+ fieldName6, fieldDecoder6,
+ fieldName7, fieldDecoder7,
+ fieldName8, fieldDecoder8,
+ fieldName9, fieldDecoder9,
+ fieldName10, fieldDecoder10}
}
- return &generalStructDecoder{typ, fields}, nil
+ return &generalStructDecoder{typ, fields, false}
}
type generalStructDecoder struct {
- typ reflect.Type
- fields map[string]*structFieldDecoder
+ typ reflect2.Type
+ fields map[string]*structFieldDecoder
+ disallowUnknownFields bool
}
func (decoder *generalStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
if !iter.readObjectStart() {
return
}
- fieldBytes := iter.readObjectFieldAsBytes()
- field := *(*string)(unsafe.Pointer(&fieldBytes))
- fieldDecoder := decoder.fields[strings.ToLower(field)]
- if fieldDecoder == nil {
- iter.Skip()
- } else {
- fieldDecoder.Decode(ptr, iter)
+ var c byte
+ for c = ','; c == ','; c = iter.nextToken() {
+ decoder.decodeOneField(ptr, iter)
}
- for iter.nextToken() == ',' {
- fieldBytes = iter.readObjectFieldAsBytes()
+ if iter.Error != nil && iter.Error != io.EOF {
+ iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
+ }
+ if c != '}' {
+ iter.ReportError("struct Decode", `expect }, but found `+string([]byte{c}))
+ }
+}
+
+func (decoder *generalStructDecoder) decodeOneField(ptr unsafe.Pointer, iter *Iterator) {
+ var field string
+ var fieldDecoder *structFieldDecoder
+ if iter.cfg.objectFieldMustBeSimpleString {
+ fieldBytes := iter.ReadStringAsSlice()
field = *(*string)(unsafe.Pointer(&fieldBytes))
- fieldDecoder = decoder.fields[strings.ToLower(field)]
- if fieldDecoder == nil {
- iter.Skip()
- } else {
- fieldDecoder.Decode(ptr, iter)
+ fieldDecoder = decoder.fields[field]
+ if fieldDecoder == nil && !iter.cfg.caseSensitive {
+ fieldDecoder = decoder.fields[strings.ToLower(field)]
+ }
+ } else {
+ field = iter.ReadString()
+ fieldDecoder = decoder.fields[field]
+ if fieldDecoder == nil && !iter.cfg.caseSensitive {
+ fieldDecoder = decoder.fields[strings.ToLower(field)]
}
}
- if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.typ, iter.Error.Error())
+ if fieldDecoder == nil {
+ msg := "found unknown field: " + field
+ if decoder.disallowUnknownFields {
+ iter.ReportError("ReadObject", msg)
+ }
+ c := iter.nextToken()
+ if c != ':' {
+ iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
+ }
+ iter.Skip()
+ return
}
+ c := iter.nextToken()
+ if c != ':' {
+ iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
+ }
+ fieldDecoder.Decode(ptr, iter)
}
type skipObjectDecoder struct {
- typ reflect.Type
+ typ reflect2.Type
}
func (decoder *skipObjectDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
@@ -464,8 +562,8 @@ func (decoder *skipObjectDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
}
type oneFieldStructDecoder struct {
- typ reflect.Type
- fieldHash int32
+ typ reflect2.Type
+ fieldHash int64
fieldDecoder *structFieldDecoder
}
@@ -484,15 +582,15 @@ func (decoder *oneFieldStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator)
}
}
if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.typ, iter.Error.Error())
+ iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
}
}
type twoFieldsStructDecoder struct {
- typ reflect.Type
- fieldHash1 int32
+ typ reflect2.Type
+ fieldHash1 int64
fieldDecoder1 *structFieldDecoder
- fieldHash2 int32
+ fieldHash2 int64
fieldDecoder2 *structFieldDecoder
}
@@ -514,17 +612,17 @@ func (decoder *twoFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
}
}
if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.typ, iter.Error.Error())
+ iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
}
}
type threeFieldsStructDecoder struct {
- typ reflect.Type
- fieldHash1 int32
+ typ reflect2.Type
+ fieldHash1 int64
fieldDecoder1 *structFieldDecoder
- fieldHash2 int32
+ fieldHash2 int64
fieldDecoder2 *structFieldDecoder
- fieldHash3 int32
+ fieldHash3 int64
fieldDecoder3 *structFieldDecoder
}
@@ -548,19 +646,19 @@ func (decoder *threeFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
}
}
if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.typ, iter.Error.Error())
+ iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
}
}
type fourFieldsStructDecoder struct {
- typ reflect.Type
- fieldHash1 int32
+ typ reflect2.Type
+ fieldHash1 int64
fieldDecoder1 *structFieldDecoder
- fieldHash2 int32
+ fieldHash2 int64
fieldDecoder2 *structFieldDecoder
- fieldHash3 int32
+ fieldHash3 int64
fieldDecoder3 *structFieldDecoder
- fieldHash4 int32
+ fieldHash4 int64
fieldDecoder4 *structFieldDecoder
}
@@ -586,21 +684,21 @@ func (decoder *fourFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
}
}
if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.typ, iter.Error.Error())
+ iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
}
}
type fiveFieldsStructDecoder struct {
- typ reflect.Type
- fieldHash1 int32
+ typ reflect2.Type
+ fieldHash1 int64
fieldDecoder1 *structFieldDecoder
- fieldHash2 int32
+ fieldHash2 int64
fieldDecoder2 *structFieldDecoder
- fieldHash3 int32
+ fieldHash3 int64
fieldDecoder3 *structFieldDecoder
- fieldHash4 int32
+ fieldHash4 int64
fieldDecoder4 *structFieldDecoder
- fieldHash5 int32
+ fieldHash5 int64
fieldDecoder5 *structFieldDecoder
}
@@ -628,23 +726,23 @@ func (decoder *fiveFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
}
}
if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.typ, iter.Error.Error())
+ iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
}
}
type sixFieldsStructDecoder struct {
- typ reflect.Type
- fieldHash1 int32
+ typ reflect2.Type
+ fieldHash1 int64
fieldDecoder1 *structFieldDecoder
- fieldHash2 int32
+ fieldHash2 int64
fieldDecoder2 *structFieldDecoder
- fieldHash3 int32
+ fieldHash3 int64
fieldDecoder3 *structFieldDecoder
- fieldHash4 int32
+ fieldHash4 int64
fieldDecoder4 *structFieldDecoder
- fieldHash5 int32
+ fieldHash5 int64
fieldDecoder5 *structFieldDecoder
- fieldHash6 int32
+ fieldHash6 int64
fieldDecoder6 *structFieldDecoder
}
@@ -674,25 +772,25 @@ func (decoder *sixFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
}
}
if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.typ, iter.Error.Error())
+ iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
}
}
type sevenFieldsStructDecoder struct {
- typ reflect.Type
- fieldHash1 int32
+ typ reflect2.Type
+ fieldHash1 int64
fieldDecoder1 *structFieldDecoder
- fieldHash2 int32
+ fieldHash2 int64
fieldDecoder2 *structFieldDecoder
- fieldHash3 int32
+ fieldHash3 int64
fieldDecoder3 *structFieldDecoder
- fieldHash4 int32
+ fieldHash4 int64
fieldDecoder4 *structFieldDecoder
- fieldHash5 int32
+ fieldHash5 int64
fieldDecoder5 *structFieldDecoder
- fieldHash6 int32
+ fieldHash6 int64
fieldDecoder6 *structFieldDecoder
- fieldHash7 int32
+ fieldHash7 int64
fieldDecoder7 *structFieldDecoder
}
@@ -724,27 +822,27 @@ func (decoder *sevenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
}
}
if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.typ, iter.Error.Error())
+ iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
}
}
type eightFieldsStructDecoder struct {
- typ reflect.Type
- fieldHash1 int32
+ typ reflect2.Type
+ fieldHash1 int64
fieldDecoder1 *structFieldDecoder
- fieldHash2 int32
+ fieldHash2 int64
fieldDecoder2 *structFieldDecoder
- fieldHash3 int32
+ fieldHash3 int64
fieldDecoder3 *structFieldDecoder
- fieldHash4 int32
+ fieldHash4 int64
fieldDecoder4 *structFieldDecoder
- fieldHash5 int32
+ fieldHash5 int64
fieldDecoder5 *structFieldDecoder
- fieldHash6 int32
+ fieldHash6 int64
fieldDecoder6 *structFieldDecoder
- fieldHash7 int32
+ fieldHash7 int64
fieldDecoder7 *structFieldDecoder
- fieldHash8 int32
+ fieldHash8 int64
fieldDecoder8 *structFieldDecoder
}
@@ -778,29 +876,29 @@ func (decoder *eightFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterat
}
}
if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.typ, iter.Error.Error())
+ iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
}
}
type nineFieldsStructDecoder struct {
- typ reflect.Type
- fieldHash1 int32
+ typ reflect2.Type
+ fieldHash1 int64
fieldDecoder1 *structFieldDecoder
- fieldHash2 int32
+ fieldHash2 int64
fieldDecoder2 *structFieldDecoder
- fieldHash3 int32
+ fieldHash3 int64
fieldDecoder3 *structFieldDecoder
- fieldHash4 int32
+ fieldHash4 int64
fieldDecoder4 *structFieldDecoder
- fieldHash5 int32
+ fieldHash5 int64
fieldDecoder5 *structFieldDecoder
- fieldHash6 int32
+ fieldHash6 int64
fieldDecoder6 *structFieldDecoder
- fieldHash7 int32
+ fieldHash7 int64
fieldDecoder7 *structFieldDecoder
- fieldHash8 int32
+ fieldHash8 int64
fieldDecoder8 *structFieldDecoder
- fieldHash9 int32
+ fieldHash9 int64
fieldDecoder9 *structFieldDecoder
}
@@ -836,31 +934,31 @@ func (decoder *nineFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterato
}
}
if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.typ, iter.Error.Error())
+ iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
}
}
type tenFieldsStructDecoder struct {
- typ reflect.Type
- fieldHash1 int32
+ typ reflect2.Type
+ fieldHash1 int64
fieldDecoder1 *structFieldDecoder
- fieldHash2 int32
+ fieldHash2 int64
fieldDecoder2 *structFieldDecoder
- fieldHash3 int32
+ fieldHash3 int64
fieldDecoder3 *structFieldDecoder
- fieldHash4 int32
+ fieldHash4 int64
fieldDecoder4 *structFieldDecoder
- fieldHash5 int32
+ fieldHash5 int64
fieldDecoder5 *structFieldDecoder
- fieldHash6 int32
+ fieldHash6 int64
fieldDecoder6 *structFieldDecoder
- fieldHash7 int32
+ fieldHash7 int64
fieldDecoder7 *structFieldDecoder
- fieldHash8 int32
+ fieldHash8 int64
fieldDecoder8 *structFieldDecoder
- fieldHash9 int32
+ fieldHash9 int64
fieldDecoder9 *structFieldDecoder
- fieldHash10 int32
+ fieldHash10 int64
fieldDecoder10 *structFieldDecoder
}
@@ -898,19 +996,53 @@ func (decoder *tenFieldsStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator
}
}
if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%v: %s", decoder.typ, iter.Error.Error())
+ iter.Error = fmt.Errorf("%v.%s", decoder.typ, iter.Error.Error())
}
}
type structFieldDecoder struct {
- field *reflect.StructField
+ field reflect2.StructField
fieldDecoder ValDecoder
}
func (decoder *structFieldDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
- fieldPtr := unsafe.Pointer(uintptr(ptr) + decoder.field.Offset)
+ fieldPtr := decoder.field.UnsafeGet(ptr)
decoder.fieldDecoder.Decode(fieldPtr, iter)
if iter.Error != nil && iter.Error != io.EOF {
- iter.Error = fmt.Errorf("%s: %s", decoder.field.Name, iter.Error.Error())
+ iter.Error = fmt.Errorf("%s: %s", decoder.field.Name(), iter.Error.Error())
+ }
+}
+
+type stringModeStringDecoder struct {
+ elemDecoder ValDecoder
+ cfg *frozenConfig
+}
+
+func (decoder *stringModeStringDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ decoder.elemDecoder.Decode(ptr, iter)
+ str := *((*string)(ptr))
+ tempIter := decoder.cfg.BorrowIterator([]byte(str))
+ defer decoder.cfg.ReturnIterator(tempIter)
+ *((*string)(ptr)) = tempIter.ReadString()
+}
+
+type stringModeNumberDecoder struct {
+ elemDecoder ValDecoder
+}
+
+func (decoder *stringModeNumberDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) {
+ c := iter.nextToken()
+ if c != '"' {
+ iter.ReportError("stringModeNumberDecoder", `expect ", but found `+string([]byte{c}))
+ return
+ }
+ decoder.elemDecoder.Decode(ptr, iter)
+ if iter.Error != nil {
+ return
+ }
+ c = iter.readByte()
+ if c != '"' {
+ iter.ReportError("stringModeNumberDecoder", `expect ", but found `+string([]byte{c}))
+ return
}
}
diff --git a/vendor/github.com/json-iterator/go/feature_reflect_object.go b/vendor/github.com/json-iterator/go/reflect_struct_encoder.go
index 59b1235c0..d0759cf64 100644
--- a/vendor/github.com/json-iterator/go/feature_reflect_object.go
+++ b/vendor/github.com/json-iterator/go/reflect_struct_encoder.go
@@ -2,23 +2,20 @@ package jsoniter
import (
"fmt"
+ "github.com/modern-go/reflect2"
"io"
"reflect"
- "strings"
"unsafe"
)
-func encoderOfStruct(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error) {
+func encoderOfStruct(ctx *ctx, typ reflect2.Type) ValEncoder {
type bindingTo struct {
binding *Binding
toName string
ignored bool
}
orderedBindings := []*bindingTo{}
- structDescriptor, err := describeStruct(cfg, typ)
- if err != nil {
- return nil, err
- }
+ structDescriptor := describeStruct(ctx, typ)
for _, binding := range structDescriptor.Fields {
for _, toName := range binding.ToNames {
new := &bindingTo{
@@ -29,13 +26,13 @@ func encoderOfStruct(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error) {
if old.toName != toName {
continue
}
- old.ignored, new.ignored = resolveConflictBinding(cfg, old.binding, new.binding)
+ old.ignored, new.ignored = resolveConflictBinding(ctx.frozenConfig, old.binding, new.binding)
}
orderedBindings = append(orderedBindings, new)
}
}
if len(orderedBindings) == 0 {
- return &emptyStructEncoder{}, nil
+ return &emptyStructEncoder{}
}
finalOrderedFields := []structFieldTo{}
for _, bindingTo := range orderedBindings {
@@ -46,12 +43,36 @@ func encoderOfStruct(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error) {
})
}
}
- return &structEncoder{structDescriptor.onePtrEmbedded, structDescriptor.onePtrOptimization, finalOrderedFields}, nil
+ return &structEncoder{typ, finalOrderedFields}
+}
+
+func createCheckIsEmpty(ctx *ctx, typ reflect2.Type) checkIsEmpty {
+ encoder := createEncoderOfNative(ctx, typ)
+ if encoder != nil {
+ return encoder
+ }
+ kind := typ.Kind()
+ switch kind {
+ case reflect.Interface:
+ return &dynamicEncoder{typ}
+ case reflect.Struct:
+ return &structEncoder{typ: typ}
+ case reflect.Array:
+ return &arrayEncoder{}
+ case reflect.Slice:
+ return &sliceEncoder{}
+ case reflect.Map:
+ return encoderOfMap(ctx, typ)
+ case reflect.Ptr:
+ return &OptionalEncoder{}
+ default:
+ return &lazyErrorEncoder{err: fmt.Errorf("unsupported type: %v", typ)}
+ }
}
func resolveConflictBinding(cfg *frozenConfig, old, new *Binding) (ignoreOld, ignoreNew bool) {
- newTagged := new.Field.Tag.Get(cfg.getTagKey()) != ""
- oldTagged := old.Field.Tag.Get(cfg.getTagKey()) != ""
+ newTagged := new.Field.Tag().Get(cfg.getTagKey()) != ""
+ oldTagged := old.Field.Tag().Get(cfg.getTagKey()) != ""
if newTagged {
if oldTagged {
if len(old.levels) > len(new.levels) {
@@ -78,62 +99,41 @@ func resolveConflictBinding(cfg *frozenConfig, old, new *Binding) (ignoreOld, ig
}
}
-func decoderOfStruct(cfg *frozenConfig, typ reflect.Type) (ValDecoder, error) {
- bindings := map[string]*Binding{}
- structDescriptor, err := describeStruct(cfg, typ)
- if err != nil {
- return nil, err
- }
- for _, binding := range structDescriptor.Fields {
- for _, fromName := range binding.FromNames {
- old := bindings[fromName]
- if old == nil {
- bindings[fromName] = binding
- continue
- }
- ignoreOld, ignoreNew := resolveConflictBinding(cfg, old, binding)
- if ignoreOld {
- delete(bindings, fromName)
- }
- if !ignoreNew {
- bindings[fromName] = binding
- }
- }
- }
- fields := map[string]*structFieldDecoder{}
- for k, binding := range bindings {
- fields[strings.ToLower(k)] = binding.Decoder.(*structFieldDecoder)
- }
- return createStructDecoder(typ, fields)
-}
-
type structFieldEncoder struct {
- field *reflect.StructField
+ field reflect2.StructField
fieldEncoder ValEncoder
omitempty bool
}
func (encoder *structFieldEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
- fieldPtr := unsafe.Pointer(uintptr(ptr) + encoder.field.Offset)
+ fieldPtr := encoder.field.UnsafeGet(ptr)
encoder.fieldEncoder.Encode(fieldPtr, stream)
if stream.Error != nil && stream.Error != io.EOF {
- stream.Error = fmt.Errorf("%s: %s", encoder.field.Name, stream.Error.Error())
+ stream.Error = fmt.Errorf("%s: %s", encoder.field.Name(), stream.Error.Error())
}
}
-func (encoder *structFieldEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
func (encoder *structFieldEncoder) IsEmpty(ptr unsafe.Pointer) bool {
- fieldPtr := unsafe.Pointer(uintptr(ptr) + encoder.field.Offset)
+ fieldPtr := encoder.field.UnsafeGet(ptr)
return encoder.fieldEncoder.IsEmpty(fieldPtr)
}
+func (encoder *structFieldEncoder) IsEmbeddedPtrNil(ptr unsafe.Pointer) bool {
+ isEmbeddedPtrNil, converted := encoder.fieldEncoder.(IsEmbeddedPtrNil)
+ if !converted {
+ return false
+ }
+ fieldPtr := encoder.field.UnsafeGet(ptr)
+ return isEmbeddedPtrNil.IsEmbeddedPtrNil(fieldPtr)
+}
+
+type IsEmbeddedPtrNil interface {
+ IsEmbeddedPtrNil(ptr unsafe.Pointer) bool
+}
+
type structEncoder struct {
- onePtrEmbedded bool
- onePtrOptimization bool
- fields []structFieldTo
+ typ reflect2.Type
+ fields []structFieldTo
}
type structFieldTo struct {
@@ -148,6 +148,9 @@ func (encoder *structEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
if field.encoder.omitempty && field.encoder.IsEmpty(ptr) {
continue
}
+ if field.encoder.IsEmbeddedPtrNil(ptr) {
+ continue
+ }
if isNotFirst {
stream.WriteMore()
}
@@ -156,23 +159,8 @@ func (encoder *structEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
isNotFirst = true
}
stream.WriteObjectEnd()
-}
-
-func (encoder *structEncoder) EncodeInterface(val interface{}, stream *Stream) {
- e := (*emptyInterface)(unsafe.Pointer(&val))
- if encoder.onePtrOptimization {
- if e.word == nil && encoder.onePtrEmbedded {
- stream.WriteObjectStart()
- stream.WriteObjectEnd()
- return
- }
- ptr := uintptr(e.word)
- e.word = unsafe.Pointer(&ptr)
- }
- if reflect.TypeOf(val).Kind() == reflect.Ptr {
- encoder.Encode(unsafe.Pointer(&e.word), stream)
- } else {
- encoder.Encode(e.word, stream)
+ if stream.Error != nil && stream.Error != io.EOF {
+ stream.Error = fmt.Errorf("%v.%s", encoder.typ, stream.Error.Error())
}
}
@@ -187,10 +175,36 @@ func (encoder *emptyStructEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
stream.WriteEmptyObject()
}
-func (encoder *emptyStructEncoder) EncodeInterface(val interface{}, stream *Stream) {
- WriteToStream(val, stream, encoder)
-}
-
func (encoder *emptyStructEncoder) IsEmpty(ptr unsafe.Pointer) bool {
return false
}
+
+type stringModeNumberEncoder struct {
+ elemEncoder ValEncoder
+}
+
+func (encoder *stringModeNumberEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ stream.writeByte('"')
+ encoder.elemEncoder.Encode(ptr, stream)
+ stream.writeByte('"')
+}
+
+func (encoder *stringModeNumberEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return encoder.elemEncoder.IsEmpty(ptr)
+}
+
+type stringModeStringEncoder struct {
+ elemEncoder ValEncoder
+ cfg *frozenConfig
+}
+
+func (encoder *stringModeStringEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
+ tempStream := encoder.cfg.BorrowStream(nil)
+ defer encoder.cfg.ReturnStream(tempStream)
+ encoder.elemEncoder.Encode(ptr, tempStream)
+ stream.WriteString(string(tempStream.Buffer()))
+}
+
+func (encoder *stringModeStringEncoder) IsEmpty(ptr unsafe.Pointer) bool {
+ return encoder.elemEncoder.IsEmpty(ptr)
+}
diff --git a/vendor/github.com/json-iterator/go/feature_stream.go b/vendor/github.com/json-iterator/go/stream.go
index 9c8470a03..17662fded 100644
--- a/vendor/github.com/json-iterator/go/feature_stream.go
+++ b/vendor/github.com/json-iterator/go/stream.go
@@ -4,15 +4,15 @@ import (
"io"
)
-// Stream is a io.Writer like object, with JSON specific write functions.
+// stream is a io.Writer like object, with JSON specific write functions.
// Error is not returned as return value, but stored as Error member on this stream instance.
type Stream struct {
- cfg *frozenConfig
- out io.Writer
- buf []byte
- n int
- Error error
- indention int
+ cfg *frozenConfig
+ out io.Writer
+ buf []byte
+ Error error
+ indention int
+ Attachment interface{} // open for customized encoder
}
// NewStream create new stream instance.
@@ -23,8 +23,7 @@ func NewStream(cfg API, out io.Writer, bufSize int) *Stream {
return &Stream{
cfg: cfg.(*frozenConfig),
out: out,
- buf: make([]byte, bufSize),
- n: 0,
+ buf: make([]byte, 0, bufSize),
Error: nil,
indention: 0,
}
@@ -38,22 +37,27 @@ func (stream *Stream) Pool() StreamPool {
// Reset reuse this stream instance by assign a new writer
func (stream *Stream) Reset(out io.Writer) {
stream.out = out
- stream.n = 0
+ stream.buf = stream.buf[:0]
}
// Available returns how many bytes are unused in the buffer.
func (stream *Stream) Available() int {
- return len(stream.buf) - stream.n
+ return cap(stream.buf) - len(stream.buf)
}
// Buffered returns the number of bytes that have been written into the current buffer.
func (stream *Stream) Buffered() int {
- return stream.n
+ return len(stream.buf)
}
// Buffer if writer is nil, use this method to take the result
func (stream *Stream) Buffer() []byte {
- return stream.buf[:stream.n]
+ return stream.buf
+}
+
+// SetBuffer allows to append to the internal buffer directly
+func (stream *Stream) SetBuffer(buf []byte) {
+ stream.buf = buf
}
// Write writes the contents of p into the buffer.
@@ -61,97 +65,34 @@ func (stream *Stream) Buffer() []byte {
// If nn < len(p), it also returns an error explaining
// why the write is short.
func (stream *Stream) Write(p []byte) (nn int, err error) {
- for len(p) > stream.Available() && stream.Error == nil {
- if stream.out == nil {
- stream.growAtLeast(len(p))
- } else {
- var n int
- if stream.Buffered() == 0 {
- // Large write, empty buffer.
- // Write directly from p to avoid copy.
- n, stream.Error = stream.out.Write(p)
- } else {
- n = copy(stream.buf[stream.n:], p)
- stream.n += n
- stream.Flush()
- }
- nn += n
- p = p[n:]
- }
- }
- if stream.Error != nil {
- return nn, stream.Error
+ stream.buf = append(stream.buf, p...)
+ if stream.out != nil {
+ nn, err = stream.out.Write(stream.buf)
+ stream.buf = stream.buf[nn:]
+ return
}
- n := copy(stream.buf[stream.n:], p)
- stream.n += n
- nn += n
- return nn, nil
+ return len(p), nil
}
// WriteByte writes a single byte.
func (stream *Stream) writeByte(c byte) {
- if stream.Error != nil {
- return
- }
- if stream.Available() < 1 {
- stream.growAtLeast(1)
- }
- stream.buf[stream.n] = c
- stream.n++
+ stream.buf = append(stream.buf, c)
}
func (stream *Stream) writeTwoBytes(c1 byte, c2 byte) {
- if stream.Error != nil {
- return
- }
- if stream.Available() < 2 {
- stream.growAtLeast(2)
- }
- stream.buf[stream.n] = c1
- stream.buf[stream.n+1] = c2
- stream.n += 2
+ stream.buf = append(stream.buf, c1, c2)
}
func (stream *Stream) writeThreeBytes(c1 byte, c2 byte, c3 byte) {
- if stream.Error != nil {
- return
- }
- if stream.Available() < 3 {
- stream.growAtLeast(3)
- }
- stream.buf[stream.n] = c1
- stream.buf[stream.n+1] = c2
- stream.buf[stream.n+2] = c3
- stream.n += 3
+ stream.buf = append(stream.buf, c1, c2, c3)
}
func (stream *Stream) writeFourBytes(c1 byte, c2 byte, c3 byte, c4 byte) {
- if stream.Error != nil {
- return
- }
- if stream.Available() < 4 {
- stream.growAtLeast(4)
- }
- stream.buf[stream.n] = c1
- stream.buf[stream.n+1] = c2
- stream.buf[stream.n+2] = c3
- stream.buf[stream.n+3] = c4
- stream.n += 4
+ stream.buf = append(stream.buf, c1, c2, c3, c4)
}
func (stream *Stream) writeFiveBytes(c1 byte, c2 byte, c3 byte, c4 byte, c5 byte) {
- if stream.Error != nil {
- return
- }
- if stream.Available() < 5 {
- stream.growAtLeast(5)
- }
- stream.buf[stream.n] = c1
- stream.buf[stream.n+1] = c2
- stream.buf[stream.n+2] = c3
- stream.buf[stream.n+3] = c4
- stream.buf[stream.n+4] = c5
- stream.n += 5
+ stream.buf = append(stream.buf, c1, c2, c3, c4, c5)
}
// Flush writes any buffered data to the underlying io.Writer.
@@ -162,53 +103,20 @@ func (stream *Stream) Flush() error {
if stream.Error != nil {
return stream.Error
}
- if stream.n == 0 {
- return nil
- }
- n, err := stream.out.Write(stream.buf[0:stream.n])
- if n < stream.n && err == nil {
- err = io.ErrShortWrite
- }
+ n, err := stream.out.Write(stream.buf)
if err != nil {
- if n > 0 && n < stream.n {
- copy(stream.buf[0:stream.n-n], stream.buf[n:stream.n])
+ if stream.Error == nil {
+ stream.Error = err
}
- stream.n -= n
- stream.Error = err
return err
}
- stream.n = 0
+ stream.buf = stream.buf[n:]
return nil
}
-func (stream *Stream) ensure(minimal int) {
- available := stream.Available()
- if available < minimal {
- stream.growAtLeast(minimal)
- }
-}
-
-func (stream *Stream) growAtLeast(minimal int) {
- if stream.out != nil {
- stream.Flush()
- }
- toGrow := len(stream.buf)
- if toGrow < minimal {
- toGrow = minimal
- }
- newBuf := make([]byte, len(stream.buf)+toGrow)
- copy(newBuf, stream.Buffer())
- stream.buf = newBuf
-}
-
// WriteRaw write string out without quotes, just like []byte
func (stream *Stream) WriteRaw(s string) {
- stream.ensure(len(s))
- if stream.Error != nil {
- return
- }
- n := copy(stream.buf[stream.n:], s)
- stream.n += n
+ stream.buf = append(stream.buf, s...)
}
// WriteNil write null to stream
@@ -269,6 +177,7 @@ func (stream *Stream) WriteEmptyObject() {
func (stream *Stream) WriteMore() {
stream.writeByte(',')
stream.writeIndention(0)
+ stream.Flush()
}
// WriteArrayStart write [ with possible indention
@@ -280,8 +189,7 @@ func (stream *Stream) WriteArrayStart() {
// WriteEmptyArray write []
func (stream *Stream) WriteEmptyArray() {
- stream.writeByte('[')
- stream.writeByte(']')
+ stream.writeTwoBytes('[', ']')
}
// WriteArrayEnd write ] with possible indention
@@ -297,9 +205,7 @@ func (stream *Stream) writeIndention(delta int) {
}
stream.writeByte('\n')
toWrite := stream.indention - delta
- stream.ensure(toWrite)
- for i := 0; i < toWrite && stream.n < len(stream.buf); i++ {
- stream.buf[stream.n] = ' '
- stream.n++
+ for i := 0; i < toWrite; i++ {
+ stream.buf = append(stream.buf, ' ')
}
}
diff --git a/vendor/github.com/json-iterator/go/feature_stream_float.go b/vendor/github.com/json-iterator/go/stream_float.go
index 9a404e11d..f318d2c59 100644
--- a/vendor/github.com/json-iterator/go/feature_stream_float.go
+++ b/vendor/github.com/json-iterator/go/stream_float.go
@@ -21,7 +21,7 @@ func (stream *Stream) WriteFloat32(val float32) {
fmt = 'e'
}
}
- stream.WriteRaw(strconv.FormatFloat(float64(val), fmt, -1, 32))
+ stream.buf = strconv.AppendFloat(stream.buf, float64(val), fmt, -1, 32)
}
// WriteFloat32Lossy write float32 to stream with ONLY 6 digits precision although much much faster
@@ -43,13 +43,12 @@ func (stream *Stream) WriteFloat32Lossy(val float32) {
return
}
stream.writeByte('.')
- stream.ensure(10)
for p := precision - 1; p > 0 && fval < pow10[p]; p-- {
stream.writeByte('0')
}
stream.WriteUint64(fval)
- for stream.buf[stream.n-1] == '0' {
- stream.n--
+ for stream.buf[len(stream.buf)-1] == '0' {
+ stream.buf = stream.buf[:len(stream.buf)-1]
}
}
@@ -63,7 +62,7 @@ func (stream *Stream) WriteFloat64(val float64) {
fmt = 'e'
}
}
- stream.WriteRaw(strconv.FormatFloat(float64(val), fmt, -1, 64))
+ stream.buf = strconv.AppendFloat(stream.buf, float64(val), fmt, -1, 64)
}
// WriteFloat64Lossy write float64 to stream with ONLY 6 digits precision although much much faster
@@ -85,12 +84,11 @@ func (stream *Stream) WriteFloat64Lossy(val float64) {
return
}
stream.writeByte('.')
- stream.ensure(10)
for p := precision - 1; p > 0 && fval < pow10[p]; p-- {
stream.writeByte('0')
}
stream.WriteUint64(fval)
- for stream.buf[stream.n-1] == '0' {
- stream.n--
+ for stream.buf[len(stream.buf)-1] == '0' {
+ stream.buf = stream.buf[:len(stream.buf)-1]
}
}
diff --git a/vendor/github.com/json-iterator/go/stream_int.go b/vendor/github.com/json-iterator/go/stream_int.go
new file mode 100644
index 000000000..d1059ee4c
--- /dev/null
+++ b/vendor/github.com/json-iterator/go/stream_int.go
@@ -0,0 +1,190 @@
+package jsoniter
+
+var digits []uint32
+
+func init() {
+ digits = make([]uint32, 1000)
+ for i := uint32(0); i < 1000; i++ {
+ digits[i] = (((i / 100) + '0') << 16) + ((((i / 10) % 10) + '0') << 8) + i%10 + '0'
+ if i < 10 {
+ digits[i] += 2 << 24
+ } else if i < 100 {
+ digits[i] += 1 << 24
+ }
+ }
+}
+
+func writeFirstBuf(space []byte, v uint32) []byte {
+ start := v >> 24
+ if start == 0 {
+ space = append(space, byte(v>>16), byte(v>>8))
+ } else if start == 1 {
+ space = append(space, byte(v>>8))
+ }
+ space = append(space, byte(v))
+ return space
+}
+
+func writeBuf(buf []byte, v uint32) []byte {
+ return append(buf, byte(v>>16), byte(v>>8), byte(v))
+}
+
+// WriteUint8 write uint8 to stream
+func (stream *Stream) WriteUint8(val uint8) {
+ stream.buf = writeFirstBuf(stream.buf, digits[val])
+}
+
+// WriteInt8 write int8 to stream
+func (stream *Stream) WriteInt8(nval int8) {
+ var val uint8
+ if nval < 0 {
+ val = uint8(-nval)
+ stream.buf = append(stream.buf, '-')
+ } else {
+ val = uint8(nval)
+ }
+ stream.buf = writeFirstBuf(stream.buf, digits[val])
+}
+
+// WriteUint16 write uint16 to stream
+func (stream *Stream) WriteUint16(val uint16) {
+ q1 := val / 1000
+ if q1 == 0 {
+ stream.buf = writeFirstBuf(stream.buf, digits[val])
+ return
+ }
+ r1 := val - q1*1000
+ stream.buf = writeFirstBuf(stream.buf, digits[q1])
+ stream.buf = writeBuf(stream.buf, digits[r1])
+ return
+}
+
+// WriteInt16 write int16 to stream
+func (stream *Stream) WriteInt16(nval int16) {
+ var val uint16
+ if nval < 0 {
+ val = uint16(-nval)
+ stream.buf = append(stream.buf, '-')
+ } else {
+ val = uint16(nval)
+ }
+ stream.WriteUint16(val)
+}
+
+// WriteUint32 write uint32 to stream
+func (stream *Stream) WriteUint32(val uint32) {
+ q1 := val / 1000
+ if q1 == 0 {
+ stream.buf = writeFirstBuf(stream.buf, digits[val])
+ return
+ }
+ r1 := val - q1*1000
+ q2 := q1 / 1000
+ if q2 == 0 {
+ stream.buf = writeFirstBuf(stream.buf, digits[q1])
+ stream.buf = writeBuf(stream.buf, digits[r1])
+ return
+ }
+ r2 := q1 - q2*1000
+ q3 := q2 / 1000
+ if q3 == 0 {
+ stream.buf = writeFirstBuf(stream.buf, digits[q2])
+ } else {
+ r3 := q2 - q3*1000
+ stream.buf = append(stream.buf, byte(q3+'0'))
+ stream.buf = writeBuf(stream.buf, digits[r3])
+ }
+ stream.buf = writeBuf(stream.buf, digits[r2])
+ stream.buf = writeBuf(stream.buf, digits[r1])
+}
+
+// WriteInt32 write int32 to stream
+func (stream *Stream) WriteInt32(nval int32) {
+ var val uint32
+ if nval < 0 {
+ val = uint32(-nval)
+ stream.buf = append(stream.buf, '-')
+ } else {
+ val = uint32(nval)
+ }
+ stream.WriteUint32(val)
+}
+
+// WriteUint64 write uint64 to stream
+func (stream *Stream) WriteUint64(val uint64) {
+ q1 := val / 1000
+ if q1 == 0 {
+ stream.buf = writeFirstBuf(stream.buf, digits[val])
+ return
+ }
+ r1 := val - q1*1000
+ q2 := q1 / 1000
+ if q2 == 0 {
+ stream.buf = writeFirstBuf(stream.buf, digits[q1])
+ stream.buf = writeBuf(stream.buf, digits[r1])
+ return
+ }
+ r2 := q1 - q2*1000
+ q3 := q2 / 1000
+ if q3 == 0 {
+ stream.buf = writeFirstBuf(stream.buf, digits[q2])
+ stream.buf = writeBuf(stream.buf, digits[r2])
+ stream.buf = writeBuf(stream.buf, digits[r1])
+ return
+ }
+ r3 := q2 - q3*1000
+ q4 := q3 / 1000
+ if q4 == 0 {
+ stream.buf = writeFirstBuf(stream.buf, digits[q3])
+ stream.buf = writeBuf(stream.buf, digits[r3])
+ stream.buf = writeBuf(stream.buf, digits[r2])
+ stream.buf = writeBuf(stream.buf, digits[r1])
+ return
+ }
+ r4 := q3 - q4*1000
+ q5 := q4 / 1000
+ if q5 == 0 {
+ stream.buf = writeFirstBuf(stream.buf, digits[q4])
+ stream.buf = writeBuf(stream.buf, digits[r4])
+ stream.buf = writeBuf(stream.buf, digits[r3])
+ stream.buf = writeBuf(stream.buf, digits[r2])
+ stream.buf = writeBuf(stream.buf, digits[r1])
+ return
+ }
+ r5 := q4 - q5*1000
+ q6 := q5 / 1000
+ if q6 == 0 {
+ stream.buf = writeFirstBuf(stream.buf, digits[q5])
+ } else {
+ stream.buf = writeFirstBuf(stream.buf, digits[q6])
+ r6 := q5 - q6*1000
+ stream.buf = writeBuf(stream.buf, digits[r6])
+ }
+ stream.buf = writeBuf(stream.buf, digits[r5])
+ stream.buf = writeBuf(stream.buf, digits[r4])
+ stream.buf = writeBuf(stream.buf, digits[r3])
+ stream.buf = writeBuf(stream.buf, digits[r2])
+ stream.buf = writeBuf(stream.buf, digits[r1])
+}
+
+// WriteInt64 write int64 to stream
+func (stream *Stream) WriteInt64(nval int64) {
+ var val uint64
+ if nval < 0 {
+ val = uint64(-nval)
+ stream.buf = append(stream.buf, '-')
+ } else {
+ val = uint64(nval)
+ }
+ stream.WriteUint64(val)
+}
+
+// WriteInt write int to stream
+func (stream *Stream) WriteInt(val int) {
+ stream.WriteInt64(int64(val))
+}
+
+// WriteUint write uint to stream
+func (stream *Stream) WriteUint(val uint) {
+ stream.WriteUint64(uint64(val))
+}
diff --git a/vendor/github.com/json-iterator/go/feature_stream_string.go b/vendor/github.com/json-iterator/go/stream_str.go
index 334282f05..54c2ba0b3 100644
--- a/vendor/github.com/json-iterator/go/feature_stream_string.go
+++ b/vendor/github.com/json-iterator/go/stream_str.go
@@ -219,34 +219,22 @@ var hex = "0123456789abcdef"
// WriteStringWithHTMLEscaped write string to stream with html special characters escaped
func (stream *Stream) WriteStringWithHTMLEscaped(s string) {
- stream.ensure(32)
valLen := len(s)
- toWriteLen := valLen
- bufLengthMinusTwo := len(stream.buf) - 2 // make room for the quotes
- if stream.n+toWriteLen > bufLengthMinusTwo {
- toWriteLen = bufLengthMinusTwo - stream.n
- }
- n := stream.n
- stream.buf[n] = '"'
- n++
+ stream.buf = append(stream.buf, '"')
// write string, the fast path, without utf8 and escape support
i := 0
- for ; i < toWriteLen; i++ {
+ for ; i < valLen; i++ {
c := s[i]
if c < utf8.RuneSelf && htmlSafeSet[c] {
- stream.buf[n] = c
- n++
+ stream.buf = append(stream.buf, c)
} else {
break
}
}
if i == valLen {
- stream.buf[n] = '"'
- n++
- stream.n = n
+ stream.buf = append(stream.buf, '"')
return
}
- stream.n = n
writeStringSlowPathWithHTMLEscaped(stream, i, s, valLen)
}
@@ -321,34 +309,22 @@ func writeStringSlowPathWithHTMLEscaped(stream *Stream, i int, s string, valLen
// WriteString write string to stream without html escape
func (stream *Stream) WriteString(s string) {
- stream.ensure(32)
valLen := len(s)
- toWriteLen := valLen
- bufLengthMinusTwo := len(stream.buf) - 2 // make room for the quotes
- if stream.n+toWriteLen > bufLengthMinusTwo {
- toWriteLen = bufLengthMinusTwo - stream.n
- }
- n := stream.n
- stream.buf[n] = '"'
- n++
+ stream.buf = append(stream.buf, '"')
// write string, the fast path, without utf8 and escape support
i := 0
- for ; i < toWriteLen; i++ {
+ for ; i < valLen; i++ {
c := s[i]
if c > 31 && c != '"' && c != '\\' {
- stream.buf[n] = c
- n++
+ stream.buf = append(stream.buf, c)
} else {
break
}
}
if i == valLen {
- stream.buf[n] = '"'
- n++
- stream.n = n
+ stream.buf = append(stream.buf, '"')
return
}
- stream.n = n
writeStringSlowPath(stream, i, s, valLen)
}
diff --git a/vendor/github.com/klauspost/compress/LICENSE b/vendor/github.com/klauspost/compress/LICENSE
new file mode 100644
index 000000000..744875676
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2012 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/klauspost/compress/README.md b/vendor/github.com/klauspost/compress/README.md
new file mode 100644
index 000000000..280d54890
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/README.md
@@ -0,0 +1,160 @@
+# compress
+
+This package is based on an optimized Deflate function, which is used by gzip/zip/zlib packages.
+
+It offers slightly better compression at lower compression settings, and up to 3x faster encoding at highest compression level.
+
+* [High Throughput Benchmark](http://blog.klauspost.com/go-gzipdeflate-benchmarks/).
+* [Small Payload/Webserver Benchmarks](http://blog.klauspost.com/gzip-performance-for-go-webservers/).
+* [Linear Time Compression](http://blog.klauspost.com/constant-time-gzipzip-compression/).
+* [Re-balancing Deflate Compression Levels](https://blog.klauspost.com/rebalancing-deflate-compression-levels/)
+
+[![Build Status](https://travis-ci.org/klauspost/compress.svg?branch=master)](https://travis-ci.org/klauspost/compress)
+[![Sourcegraph Badge](https://sourcegraph.com/github.com/klauspost/compress/-/badge.svg)](https://sourcegraph.com/github.com/klauspost/compress?badge)
+
+# changelog
+
+* Aug 1, 2018: Added [huff0 README](https://github.com/klauspost/compress/tree/master/huff0#huff0-entropy-compression).
+* Jul 8, 2018: Added [Performance Update 2018](#performance-update-2018) below.
+* Jun 23, 2018: Merged [Go 1.11 inflate optimizations](https://go-review.googlesource.com/c/go/+/102235). Go 1.9 is now required. Backwards compatible version tagged with [v1.3.0](https://github.com/klauspost/compress/releases/tag/v1.3.0).
+* Apr 2, 2018: Added [huff0](https://godoc.org/github.com/klauspost/compress/huff0) en/decoder. Experimental for now, API may change.
+* Mar 4, 2018: Added [FSE Entropy](https://godoc.org/github.com/klauspost/compress/fse) en/decoder. Experimental for now, API may change.
+* Nov 3, 2017: Add compression [Estimate](https://godoc.org/github.com/klauspost/compress#Estimate) function.
+* May 28, 2017: Reduce allocations when resetting decoder.
+* Apr 02, 2017: Change back to official crc32, since changes were merged in Go 1.7.
+* Jan 14, 2017: Reduce stack pressure due to array copies. See [Issue #18625](https://github.com/golang/go/issues/18625).
+* Oct 25, 2016: Level 2-4 have been rewritten and now offers significantly better performance than before.
+* Oct 20, 2016: Port zlib changes from Go 1.7 to fix zlib writer issue. Please update.
+* Oct 16, 2016: Go 1.7 changes merged. Apples to apples this package is a few percent faster, but has a significantly better balance between speed and compression per level.
+* Mar 24, 2016: Always attempt Huffman encoding on level 4-7. This improves base 64 encoded data compression.
+* Mar 24, 2016: Small speedup for level 1-3.
+* Feb 19, 2016: Faster bit writer, level -2 is 15% faster, level 1 is 4% faster.
+* Feb 19, 2016: Handle small payloads faster in level 1-3.
+* Feb 19, 2016: Added faster level 2 + 3 compression modes.
+* Feb 19, 2016: [Rebalanced compression levels](https://blog.klauspost.com/rebalancing-deflate-compression-levels/), so there is a more even progresssion in terms of compression. New default level is 5.
+* Feb 14, 2016: Snappy: Merge upstream changes.
+* Feb 14, 2016: Snappy: Fix aggressive skipping.
+* Feb 14, 2016: Snappy: Update benchmark.
+* Feb 13, 2016: Deflate: Fixed assembler problem that could lead to sub-optimal compression.
+* Feb 12, 2016: Snappy: Added AMD64 SSE 4.2 optimizations to matching, which makes easy to compress material run faster. Typical speedup is around 25%.
+* Feb 9, 2016: Added Snappy package fork. This version is 5-7% faster, much more on hard to compress content.
+* Jan 30, 2016: Optimize level 1 to 3 by not considering static dictionary or storing uncompressed. ~4-5% speedup.
+* Jan 16, 2016: Optimization on deflate level 1,2,3 compression.
+* Jan 8 2016: Merge [CL 18317](https://go-review.googlesource.com/#/c/18317): fix reading, writing of zip64 archives.
+* Dec 8 2015: Make level 1 and -2 deterministic even if write size differs.
+* Dec 8 2015: Split encoding functions, so hashing and matching can potentially be inlined. 1-3% faster on AMD64. 5% faster on other platforms.
+* Dec 8 2015: Fixed rare [one byte out-of bounds read](https://github.com/klauspost/compress/issues/20). Please update!
+* Nov 23 2015: Optimization on token writer. ~2-4% faster. Contributed by [@dsnet](https://github.com/dsnet).
+* Nov 20 2015: Small optimization to bit writer on 64 bit systems.
+* Nov 17 2015: Fixed out-of-bound errors if the underlying Writer returned an error. See [#15](https://github.com/klauspost/compress/issues/15).
+* Nov 12 2015: Added [io.WriterTo](https://golang.org/pkg/io/#WriterTo) support to gzip/inflate.
+* Nov 11 2015: Merged [CL 16669](https://go-review.googlesource.com/#/c/16669/4): archive/zip: enable overriding (de)compressors per file
+* Oct 15 2015: Added skipping on uncompressible data. Random data speed up >5x.
+
+# usage
+
+The packages are drop-in replacements for standard libraries. Simply replace the import path to use them:
+
+| old import | new import |
+|--------------------|-----------------------------------------|
+| `compress/gzip` | `github.com/klauspost/compress/gzip` |
+| `compress/zlib` | `github.com/klauspost/compress/zlib` |
+| `archive/zip` | `github.com/klauspost/compress/zip` |
+| `compress/flate` | `github.com/klauspost/compress/flate` |
+
+You may also be interested in [pgzip](https://github.com/klauspost/pgzip), which is a drop in replacement for gzip, which support multithreaded compression on big files and the optimized [crc32](https://github.com/klauspost/crc32) package used by these packages.
+
+The packages contains the same as the standard library, so you can use the godoc for that: [gzip](http://golang.org/pkg/compress/gzip/), [zip](http://golang.org/pkg/archive/zip/), [zlib](http://golang.org/pkg/compress/zlib/), [flate](http://golang.org/pkg/compress/flate/).
+
+Currently there is only minor speedup on decompression (mostly CRC32 calculation).
+
+# Performance Update 2018
+
+It has been a while since we have been looking at the speed of this package compared to the standard library, so I thought I would re-do my tests and give some overall recommendations based on the current state. All benchmarks have been performed with Go 1.10 on my Desktop Intel(R) Core(TM) i7-2600 CPU @3.40GHz. Since I last ran the tests, I have gotten more RAM, which means tests with big files are no longer limited by my SSD.
+
+The raw results are in my [updated spreadsheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing). Due to cgo changes and upstream updates i could not get the cgo version of gzip to compile. Instead I included the [zstd](https://github.com/datadog/zstd) cgo implementation. If I get cgo gzip to work again, I might replace the results in the sheet.
+
+The columns to take note of are: *MB/s* - the throughput. *Reduction* - the data size reduction in percent of the original. *Rel Speed* relative speed compared to the standard libary at the same level. *Smaller* - how many percent smaller is the compressed output compared to stdlib. Negative means the output was bigger. *Loss* means the loss (or gain) in compression as a percentage difference of the input.
+
+The `gzstd` (standard library gzip) and `gzkp` (this package gzip) only uses one CPU core. [`pgzip`](https://github.com/klauspost/pgzip), [`bgzf`](https://github.com/biogo/hts/bgzf) uses all 4 cores. [`zstd`](https://github.com/DataDog/zstd) uses one core, and is a beast (but not Go, yet).
+
+
+## Overall differences.
+
+There appears to be a roughly 5-10% speed advantage over the standard library when comparing at similar compression levels.
+
+The biggest difference you will see is the result of [re-balancing](https://blog.klauspost.com/rebalancing-deflate-compression-levels/) the compression levels. I wanted by library to give a smoother transition between the compression levels than the standard library.
+
+This package attempts to provide a more smooth transition, where "1" is taking a lot of shortcuts, "5" is the reasonable trade-off and "9" is the "give me the best compression", and the values in between gives something reasonable in between. The standard library has big differences in levels 1-4, but levels 5-9 having no significant gains - often spending a lot more time than can be justified by the achieved compression.
+
+There are links to all the test data in the [spreadsheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing) in the top left field on each tab.
+
+## Web Content
+
+This test set aims to emulate typical use in a web server. The test-set is 4GB data in 53k files, and is a mixture of (mostly) HTML, JS, CSS.
+
+Since level 1 and 9 are close to being the same code, they are quite close. But looking at the levels in-between the differences are quite big.
+
+Looking at level 6, this package is 88% faster, but will output about 6% more data. For a web server, this means you can serve 88% more data, but have to pay for 6% more bandwidth. You can draw your own conclusions on what would be the most expensive for your case.
+
+## Object files
+
+This test is for typical data files stored on a server. In this case it is a collection of Go precompiled objects. They are very compressible.
+
+The picture is similar to the web content, but with small differences since this is very compressible. Levels 2-3 offer good speed, but is sacrificing quite a bit of compression.
+
+The standard library seems suboptimal on level 3 and 4 - offering both worse compression and speed than level 6 & 7 of this package respectively.
+
+## Highly Compressible File
+
+This is a JSON file with very high redundancy. The reduction starts at 95% on level 1, so in real life terms we are dealing with something like a highly redundant stream of data, etc.
+
+It is definitely visible that we are dealing with specialized content here, so the results are very scattered. This package does not do very well at levels 1-4, but picks up significantly at level 5 and levels 7 and 8 offering great speed for the achieved compression.
+
+So if you know you content is extremely compressible you might want to go slightly higher than the defaults. The standard library has a huge gap between levels 3 and 4 in terms of speed (2.75x slowdown), so it offers little "middle ground".
+
+## Medium-High Compressible
+
+This is a pretty common test corpus: [enwik9](http://mattmahoney.net/dc/textdata.html). It contains the first 10^9 bytes of the English Wikipedia dump on Mar. 3, 2006. This is a very good test of typical text based compression and more data heavy streams.
+
+We see a similar picture here as in "Web Content". On equal levels some compression is sacrificed for more speed. Level 5 seems to be the best trade-off between speed and size, beating stdlib level 3 in both.
+
+## Medium Compressible
+
+I will combine two test sets, one [10GB file set](http://mattmahoney.net/dc/10gb.html) and a VM disk image (~8GB). Both contain different data types and represent a typical backup scenario.
+
+The most notable thing is how quickly the standard libary drops to very low compression speeds around level 5-6 without any big gains in compression. Since this type of data is fairly common, this does not seem like good behavior.
+
+
+## Un-compressible Content
+
+This is mainly a test of how good the algorithms are at detecting un-compressible input. The standard library only offers this feature with very conservative settings at level 1. Obviously there is no reason for the algorithms to try to compress input that cannot be compressed. The only downside is that it might skip some compressible data on false detections.
+
+
+# linear time compression (huffman only)
+
+This compression library adds a special compression level, named `HuffmanOnly`, which allows near linear time compression. This is done by completely disabling matching of previous data, and only reduce the number of bits to represent each character.
+
+This means that often used characters, like 'e' and ' ' (space) in text use the fewest bits to represent, and rare characters like '¤' takes more bits to represent. For more information see [wikipedia](https://en.wikipedia.org/wiki/Huffman_coding) or this nice [video](https://youtu.be/ZdooBTdW5bM).
+
+Since this type of compression has much less variance, the compression speed is mostly unaffected by the input data, and is usually more than *180MB/s* for a single core.
+
+The downside is that the compression ratio is usually considerably worse than even the fastest conventional compression. The compression raio can never be better than 8:1 (12.5%).
+
+The linear time compression can be used as a "better than nothing" mode, where you cannot risk the encoder to slow down on some content. For comparison, the size of the "Twain" text is *233460 bytes* (+29% vs. level 1) and encode speed is 144MB/s (4.5x level 1). So in this case you trade a 30% size increase for a 4 times speedup.
+
+For more information see my blog post on [Fast Linear Time Compression](http://blog.klauspost.com/constant-time-gzipzip-compression/).
+
+This is implemented on Go 1.7 as "Huffman Only" mode, though not exposed for gzip.
+
+
+# snappy package
+
+The standard snappy package has now been improved. This repo contains a copy of the snappy repo.
+
+I would advise to use the standard package: https://github.com/golang/snappy
+
+
+# license
+
+This code is licensed under the same conditions as the original Go code. See LICENSE file.
diff --git a/vendor/github.com/klauspost/compress/flate/copy.go b/vendor/github.com/klauspost/compress/flate/copy.go
new file mode 100644
index 000000000..a3200a8f4
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/flate/copy.go
@@ -0,0 +1,32 @@
+// 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.
+
+package flate
+
+// forwardCopy is like the built-in copy function except that it always goes
+// forward from the start, even if the dst and src overlap.
+// It is equivalent to:
+// for i := 0; i < n; i++ {
+// mem[dst+i] = mem[src+i]
+// }
+func forwardCopy(mem []byte, dst, src, n int) {
+ if dst <= src {
+ copy(mem[dst:dst+n], mem[src:src+n])
+ return
+ }
+ for {
+ if dst >= src+n {
+ copy(mem[dst:dst+n], mem[src:src+n])
+ return
+ }
+ // There is some forward overlap. The destination
+ // will be filled with a repeated pattern of mem[src:src+k].
+ // We copy one instance of the pattern here, then repeat.
+ // Each time around this loop k will double.
+ k := dst - src
+ copy(mem[dst:dst+k], mem[src:src+k])
+ n -= k
+ dst += k
+ }
+}
diff --git a/vendor/github.com/klauspost/compress/flate/crc32_amd64.go b/vendor/github.com/klauspost/compress/flate/crc32_amd64.go
new file mode 100644
index 000000000..8298d309a
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/flate/crc32_amd64.go
@@ -0,0 +1,42 @@
+//+build !noasm
+//+build !appengine
+//+build !gccgo
+
+// Copyright 2015, Klaus Post, see LICENSE for details.
+
+package flate
+
+import (
+ "github.com/klauspost/cpuid"
+)
+
+// crc32sse returns a hash for the first 4 bytes of the slice
+// len(a) must be >= 4.
+//go:noescape
+func crc32sse(a []byte) uint32
+
+// crc32sseAll calculates hashes for each 4-byte set in a.
+// dst must be east len(a) - 4 in size.
+// The size is not checked by the assembly.
+//go:noescape
+func crc32sseAll(a []byte, dst []uint32)
+
+// matchLenSSE4 returns the number of matching bytes in a and b
+// up to length 'max'. Both slices must be at least 'max'
+// bytes in size.
+//
+// TODO: drop the "SSE4" name, since it doesn't use any SSE instructions.
+//
+//go:noescape
+func matchLenSSE4(a, b []byte, max int) int
+
+// histogram accumulates a histogram of b in h.
+// h must be at least 256 entries in length,
+// and must be cleared before calling this function.
+//go:noescape
+func histogram(b []byte, h []int32)
+
+// Detect SSE 4.2 feature.
+func init() {
+ useSSE42 = cpuid.CPU.SSE42()
+}
diff --git a/vendor/github.com/klauspost/compress/flate/crc32_amd64.s b/vendor/github.com/klauspost/compress/flate/crc32_amd64.s
new file mode 100644
index 000000000..a79943727
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/flate/crc32_amd64.s
@@ -0,0 +1,214 @@
+//+build !noasm
+//+build !appengine
+//+build !gccgo
+
+// Copyright 2015, Klaus Post, see LICENSE for details.
+
+// func crc32sse(a []byte) uint32
+TEXT ·crc32sse(SB), 4, $0
+ MOVQ a+0(FP), R10
+ XORQ BX, BX
+
+ // CRC32 dword (R10), EBX
+ BYTE $0xF2; BYTE $0x41; BYTE $0x0f
+ BYTE $0x38; BYTE $0xf1; BYTE $0x1a
+
+ MOVL BX, ret+24(FP)
+ RET
+
+// func crc32sseAll(a []byte, dst []uint32)
+TEXT ·crc32sseAll(SB), 4, $0
+ MOVQ a+0(FP), R8 // R8: src
+ MOVQ a_len+8(FP), R10 // input length
+ MOVQ dst+24(FP), R9 // R9: dst
+ SUBQ $4, R10
+ JS end
+ JZ one_crc
+ MOVQ R10, R13
+ SHRQ $2, R10 // len/4
+ ANDQ $3, R13 // len&3
+ XORQ BX, BX
+ ADDQ $1, R13
+ TESTQ R10, R10
+ JZ rem_loop
+
+crc_loop:
+ MOVQ (R8), R11
+ XORQ BX, BX
+ XORQ DX, DX
+ XORQ DI, DI
+ MOVQ R11, R12
+ SHRQ $8, R11
+ MOVQ R12, AX
+ MOVQ R11, CX
+ SHRQ $16, R12
+ SHRQ $16, R11
+ MOVQ R12, SI
+
+ // CRC32 EAX, EBX
+ BYTE $0xF2; BYTE $0x0f
+ BYTE $0x38; BYTE $0xf1; BYTE $0xd8
+
+ // CRC32 ECX, EDX
+ BYTE $0xF2; BYTE $0x0f
+ BYTE $0x38; BYTE $0xf1; BYTE $0xd1
+
+ // CRC32 ESI, EDI
+ BYTE $0xF2; BYTE $0x0f
+ BYTE $0x38; BYTE $0xf1; BYTE $0xfe
+ MOVL BX, (R9)
+ MOVL DX, 4(R9)
+ MOVL DI, 8(R9)
+
+ XORQ BX, BX
+ MOVL R11, AX
+
+ // CRC32 EAX, EBX
+ BYTE $0xF2; BYTE $0x0f
+ BYTE $0x38; BYTE $0xf1; BYTE $0xd8
+ MOVL BX, 12(R9)
+
+ ADDQ $16, R9
+ ADDQ $4, R8
+ XORQ BX, BX
+ SUBQ $1, R10
+ JNZ crc_loop
+
+rem_loop:
+ MOVL (R8), AX
+
+ // CRC32 EAX, EBX
+ BYTE $0xF2; BYTE $0x0f
+ BYTE $0x38; BYTE $0xf1; BYTE $0xd8
+
+ MOVL BX, (R9)
+ ADDQ $4, R9
+ ADDQ $1, R8
+ XORQ BX, BX
+ SUBQ $1, R13
+ JNZ rem_loop
+
+end:
+ RET
+
+one_crc:
+ MOVQ $1, R13
+ XORQ BX, BX
+ JMP rem_loop
+
+// func matchLenSSE4(a, b []byte, max int) int
+TEXT ·matchLenSSE4(SB), 4, $0
+ MOVQ a_base+0(FP), SI
+ MOVQ b_base+24(FP), DI
+ MOVQ DI, DX
+ MOVQ max+48(FP), CX
+
+cmp8:
+ // As long as we are 8 or more bytes before the end of max, we can load and
+ // compare 8 bytes at a time. If those 8 bytes are equal, repeat.
+ CMPQ CX, $8
+ JLT cmp1
+ MOVQ (SI), AX
+ MOVQ (DI), BX
+ CMPQ AX, BX
+ JNE bsf
+ ADDQ $8, SI
+ ADDQ $8, DI
+ SUBQ $8, CX
+ JMP cmp8
+
+bsf:
+ // If those 8 bytes were not equal, XOR the two 8 byte values, and return
+ // the index of the first byte that differs. The BSF instruction finds the
+ // least significant 1 bit, the amd64 architecture is little-endian, and
+ // the shift by 3 converts a bit index to a byte index.
+ XORQ AX, BX
+ BSFQ BX, BX
+ SHRQ $3, BX
+ ADDQ BX, DI
+
+ // Subtract off &b[0] to convert from &b[ret] to ret, and return.
+ SUBQ DX, DI
+ MOVQ DI, ret+56(FP)
+ RET
+
+cmp1:
+ // In the slices' tail, compare 1 byte at a time.
+ CMPQ CX, $0
+ JEQ matchLenEnd
+ MOVB (SI), AX
+ MOVB (DI), BX
+ CMPB AX, BX
+ JNE matchLenEnd
+ ADDQ $1, SI
+ ADDQ $1, DI
+ SUBQ $1, CX
+ JMP cmp1
+
+matchLenEnd:
+ // Subtract off &b[0] to convert from &b[ret] to ret, and return.
+ SUBQ DX, DI
+ MOVQ DI, ret+56(FP)
+ RET
+
+// func histogram(b []byte, h []int32)
+TEXT ·histogram(SB), 4, $0
+ MOVQ b+0(FP), SI // SI: &b
+ MOVQ b_len+8(FP), R9 // R9: len(b)
+ MOVQ h+24(FP), DI // DI: Histogram
+ MOVQ R9, R8
+ SHRQ $3, R8
+ JZ hist1
+ XORQ R11, R11
+
+loop_hist8:
+ MOVQ (SI), R10
+
+ MOVB R10, R11
+ INCL (DI)(R11*4)
+ SHRQ $8, R10
+
+ MOVB R10, R11
+ INCL (DI)(R11*4)
+ SHRQ $8, R10
+
+ MOVB R10, R11
+ INCL (DI)(R11*4)
+ SHRQ $8, R10
+
+ MOVB R10, R11
+ INCL (DI)(R11*4)
+ SHRQ $8, R10
+
+ MOVB R10, R11
+ INCL (DI)(R11*4)
+ SHRQ $8, R10
+
+ MOVB R10, R11
+ INCL (DI)(R11*4)
+ SHRQ $8, R10
+
+ MOVB R10, R11
+ INCL (DI)(R11*4)
+ SHRQ $8, R10
+
+ INCL (DI)(R10*4)
+
+ ADDQ $8, SI
+ DECQ R8
+ JNZ loop_hist8
+
+hist1:
+ ANDQ $7, R9
+ JZ end_hist
+ XORQ R10, R10
+
+loop_hist1:
+ MOVB (SI), R10
+ INCL (DI)(R10*4)
+ INCQ SI
+ DECQ R9
+ JNZ loop_hist1
+
+end_hist:
+ RET
diff --git a/vendor/github.com/klauspost/compress/flate/crc32_noasm.go b/vendor/github.com/klauspost/compress/flate/crc32_noasm.go
new file mode 100644
index 000000000..dcf43bd50
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/flate/crc32_noasm.go
@@ -0,0 +1,35 @@
+//+build !amd64 noasm appengine gccgo
+
+// Copyright 2015, Klaus Post, see LICENSE for details.
+
+package flate
+
+func init() {
+ useSSE42 = false
+}
+
+// crc32sse should never be called.
+func crc32sse(a []byte) uint32 {
+ panic("no assembler")
+}
+
+// crc32sseAll should never be called.
+func crc32sseAll(a []byte, dst []uint32) {
+ panic("no assembler")
+}
+
+// matchLenSSE4 should never be called.
+func matchLenSSE4(a, b []byte, max int) int {
+ panic("no assembler")
+ return 0
+}
+
+// histogram accumulates a histogram of b in h.
+//
+// len(h) must be >= 256, and h's elements must be all zeroes.
+func histogram(b []byte, h []int32) {
+ h = h[:256]
+ for _, t := range b {
+ h[t]++
+ }
+}
diff --git a/vendor/github.com/klauspost/compress/flate/deflate.go b/vendor/github.com/klauspost/compress/flate/deflate.go
new file mode 100644
index 000000000..9e6e7ff0c
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/flate/deflate.go
@@ -0,0 +1,1353 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Copyright (c) 2015 Klaus Post
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package flate
+
+import (
+ "fmt"
+ "io"
+ "math"
+)
+
+const (
+ NoCompression = 0
+ BestSpeed = 1
+ BestCompression = 9
+ DefaultCompression = -1
+
+ // HuffmanOnly disables Lempel-Ziv match searching and only performs Huffman
+ // entropy encoding. This mode is useful in compressing data that has
+ // already been compressed with an LZ style algorithm (e.g. Snappy or LZ4)
+ // that lacks an entropy encoder. Compression gains are achieved when
+ // certain bytes in the input stream occur more frequently than others.
+ //
+ // Note that HuffmanOnly produces a compressed output that is
+ // RFC 1951 compliant. That is, any valid DEFLATE decompressor will
+ // continue to be able to decompress this output.
+ HuffmanOnly = -2
+ ConstantCompression = HuffmanOnly // compatibility alias.
+
+ logWindowSize = 15
+ windowSize = 1 << logWindowSize
+ windowMask = windowSize - 1
+ logMaxOffsetSize = 15 // Standard DEFLATE
+ minMatchLength = 4 // The smallest match that the compressor looks for
+ maxMatchLength = 258 // The longest match for the compressor
+ minOffsetSize = 1 // The shortest offset that makes any sense
+
+ // The maximum number of tokens we put into a single flat block, just too
+ // stop things from getting too large.
+ maxFlateBlockTokens = 1 << 14
+ maxStoreBlockSize = 65535
+ hashBits = 17 // After 17 performance degrades
+ hashSize = 1 << hashBits
+ hashMask = (1 << hashBits) - 1
+ hashShift = (hashBits + minMatchLength - 1) / minMatchLength
+ maxHashOffset = 1 << 24
+
+ skipNever = math.MaxInt32
+)
+
+var useSSE42 bool
+
+type compressionLevel struct {
+ good, lazy, nice, chain, fastSkipHashing, level int
+}
+
+// Compression levels have been rebalanced from zlib deflate defaults
+// to give a bigger spread in speed and compression.
+// See https://blog.klauspost.com/rebalancing-deflate-compression-levels/
+var levels = []compressionLevel{
+ {}, // 0
+ // Level 1-4 uses specialized algorithm - values not used
+ {0, 0, 0, 0, 0, 1},
+ {0, 0, 0, 0, 0, 2},
+ {0, 0, 0, 0, 0, 3},
+ {0, 0, 0, 0, 0, 4},
+ // For levels 5-6 we don't bother trying with lazy matches.
+ // Lazy matching is at least 30% slower, with 1.5% increase.
+ {6, 0, 12, 8, 12, 5},
+ {8, 0, 24, 16, 16, 6},
+ // Levels 7-9 use increasingly more lazy matching
+ // and increasingly stringent conditions for "good enough".
+ {8, 8, 24, 16, skipNever, 7},
+ {10, 16, 24, 64, skipNever, 8},
+ {32, 258, 258, 4096, skipNever, 9},
+}
+
+type compressor struct {
+ compressionLevel
+
+ w *huffmanBitWriter
+ bulkHasher func([]byte, []uint32)
+
+ // compression algorithm
+ fill func(*compressor, []byte) int // copy data to window
+ step func(*compressor) // process window
+ sync bool // requesting flush
+
+ // Input hash chains
+ // hashHead[hashValue] contains the largest inputIndex with the specified hash value
+ // If hashHead[hashValue] is within the current window, then
+ // hashPrev[hashHead[hashValue] & windowMask] contains the previous index
+ // with the same hash value.
+ chainHead int
+ hashHead [hashSize]uint32
+ hashPrev [windowSize]uint32
+ hashOffset int
+
+ // input window: unprocessed data is window[index:windowEnd]
+ index int
+ window []byte
+ windowEnd int
+ blockStart int // window index where current tokens start
+ byteAvailable bool // if true, still need to process window[index-1].
+
+ // queued output tokens
+ tokens tokens
+
+ // deflate state
+ length int
+ offset int
+ hash uint32
+ maxInsertIndex int
+ err error
+ ii uint16 // position of last match, intended to overflow to reset.
+
+ snap snappyEnc
+ hashMatch [maxMatchLength + minMatchLength]uint32
+}
+
+func (d *compressor) fillDeflate(b []byte) int {
+ if d.index >= 2*windowSize-(minMatchLength+maxMatchLength) {
+ // shift the window by windowSize
+ copy(d.window[:], d.window[windowSize:2*windowSize])
+ d.index -= windowSize
+ d.windowEnd -= windowSize
+ if d.blockStart >= windowSize {
+ d.blockStart -= windowSize
+ } else {
+ d.blockStart = math.MaxInt32
+ }
+ d.hashOffset += windowSize
+ if d.hashOffset > maxHashOffset {
+ delta := d.hashOffset - 1
+ d.hashOffset -= delta
+ d.chainHead -= delta
+ // Iterate over slices instead of arrays to avoid copying
+ // the entire table onto the stack (Issue #18625).
+ for i, v := range d.hashPrev[:] {
+ if int(v) > delta {
+ d.hashPrev[i] = uint32(int(v) - delta)
+ } else {
+ d.hashPrev[i] = 0
+ }
+ }
+ for i, v := range d.hashHead[:] {
+ if int(v) > delta {
+ d.hashHead[i] = uint32(int(v) - delta)
+ } else {
+ d.hashHead[i] = 0
+ }
+ }
+ }
+ }
+ n := copy(d.window[d.windowEnd:], b)
+ d.windowEnd += n
+ return n
+}
+
+func (d *compressor) writeBlock(tok tokens, index int, eof bool) error {
+ if index > 0 || eof {
+ var window []byte
+ if d.blockStart <= index {
+ window = d.window[d.blockStart:index]
+ }
+ d.blockStart = index
+ d.w.writeBlock(tok.tokens[:tok.n], eof, window)
+ return d.w.err
+ }
+ return nil
+}
+
+// writeBlockSkip writes the current block and uses the number of tokens
+// to determine if the block should be stored on no matches, or
+// only huffman encoded.
+func (d *compressor) writeBlockSkip(tok tokens, index int, eof bool) error {
+ if index > 0 || eof {
+ if d.blockStart <= index {
+ window := d.window[d.blockStart:index]
+ // If we removed less than a 64th of all literals
+ // we huffman compress the block.
+ if int(tok.n) > len(window)-int(tok.n>>6) {
+ d.w.writeBlockHuff(eof, window)
+ } else {
+ // Write a dynamic huffman block.
+ d.w.writeBlockDynamic(tok.tokens[:tok.n], eof, window)
+ }
+ } else {
+ d.w.writeBlock(tok.tokens[:tok.n], eof, nil)
+ }
+ d.blockStart = index
+ return d.w.err
+ }
+ return nil
+}
+
+// fillWindow will fill the current window with the supplied
+// dictionary and calculate all hashes.
+// This is much faster than doing a full encode.
+// Should only be used after a start/reset.
+func (d *compressor) fillWindow(b []byte) {
+ // Do not fill window if we are in store-only mode,
+ // use constant or Snappy compression.
+ switch d.compressionLevel.level {
+ case 0, 1, 2:
+ return
+ }
+ // If we are given too much, cut it.
+ if len(b) > windowSize {
+ b = b[len(b)-windowSize:]
+ }
+ // Add all to window.
+ n := copy(d.window[d.windowEnd:], b)
+
+ // Calculate 256 hashes at the time (more L1 cache hits)
+ loops := (n + 256 - minMatchLength) / 256
+ for j := 0; j < loops; j++ {
+ startindex := j * 256
+ end := startindex + 256 + minMatchLength - 1
+ if end > n {
+ end = n
+ }
+ tocheck := d.window[startindex:end]
+ dstSize := len(tocheck) - minMatchLength + 1
+
+ if dstSize <= 0 {
+ continue
+ }
+
+ dst := d.hashMatch[:dstSize]
+ d.bulkHasher(tocheck, dst)
+ var newH uint32
+ for i, val := range dst {
+ di := i + startindex
+ newH = val & hashMask
+ // Get previous value with the same hash.
+ // Our chain should point to the previous value.
+ d.hashPrev[di&windowMask] = d.hashHead[newH]
+ // Set the head of the hash chain to us.
+ d.hashHead[newH] = uint32(di + d.hashOffset)
+ }
+ d.hash = newH
+ }
+ // Update window information.
+ d.windowEnd += n
+ d.index = n
+}
+
+// Try to find a match starting at index whose length is greater than prevSize.
+// We only look at chainCount possibilities before giving up.
+// pos = d.index, prevHead = d.chainHead-d.hashOffset, prevLength=minMatchLength-1, lookahead
+func (d *compressor) findMatch(pos int, prevHead int, prevLength int, lookahead int) (length, offset int, ok bool) {
+ minMatchLook := maxMatchLength
+ if lookahead < minMatchLook {
+ minMatchLook = lookahead
+ }
+
+ win := d.window[0 : pos+minMatchLook]
+
+ // We quit when we get a match that's at least nice long
+ nice := len(win) - pos
+ if d.nice < nice {
+ nice = d.nice
+ }
+
+ // If we've got a match that's good enough, only look in 1/4 the chain.
+ tries := d.chain
+ length = prevLength
+ if length >= d.good {
+ tries >>= 2
+ }
+
+ wEnd := win[pos+length]
+ wPos := win[pos:]
+ minIndex := pos - windowSize
+
+ for i := prevHead; tries > 0; tries-- {
+ if wEnd == win[i+length] {
+ n := matchLen(win[i:], wPos, minMatchLook)
+
+ if n > length && (n > minMatchLength || pos-i <= 4096) {
+ length = n
+ offset = pos - i
+ ok = true
+ if n >= nice {
+ // The match is good enough that we don't try to find a better one.
+ break
+ }
+ wEnd = win[pos+n]
+ }
+ }
+ if i == minIndex {
+ // hashPrev[i & windowMask] has already been overwritten, so stop now.
+ break
+ }
+ i = int(d.hashPrev[i&windowMask]) - d.hashOffset
+ if i < minIndex || i < 0 {
+ break
+ }
+ }
+ return
+}
+
+// Try to find a match starting at index whose length is greater than prevSize.
+// We only look at chainCount possibilities before giving up.
+// pos = d.index, prevHead = d.chainHead-d.hashOffset, prevLength=minMatchLength-1, lookahead
+func (d *compressor) findMatchSSE(pos int, prevHead int, prevLength int, lookahead int) (length, offset int, ok bool) {
+ minMatchLook := maxMatchLength
+ if lookahead < minMatchLook {
+ minMatchLook = lookahead
+ }
+
+ win := d.window[0 : pos+minMatchLook]
+
+ // We quit when we get a match that's at least nice long
+ nice := len(win) - pos
+ if d.nice < nice {
+ nice = d.nice
+ }
+
+ // If we've got a match that's good enough, only look in 1/4 the chain.
+ tries := d.chain
+ length = prevLength
+ if length >= d.good {
+ tries >>= 2
+ }
+
+ wEnd := win[pos+length]
+ wPos := win[pos:]
+ minIndex := pos - windowSize
+
+ for i := prevHead; tries > 0; tries-- {
+ if wEnd == win[i+length] {
+ n := matchLenSSE4(win[i:], wPos, minMatchLook)
+
+ if n > length && (n > minMatchLength || pos-i <= 4096) {
+ length = n
+ offset = pos - i
+ ok = true
+ if n >= nice {
+ // The match is good enough that we don't try to find a better one.
+ break
+ }
+ wEnd = win[pos+n]
+ }
+ }
+ if i == minIndex {
+ // hashPrev[i & windowMask] has already been overwritten, so stop now.
+ break
+ }
+ i = int(d.hashPrev[i&windowMask]) - d.hashOffset
+ if i < minIndex || i < 0 {
+ break
+ }
+ }
+ return
+}
+
+func (d *compressor) writeStoredBlock(buf []byte) error {
+ if d.w.writeStoredHeader(len(buf), false); d.w.err != nil {
+ return d.w.err
+ }
+ d.w.writeBytes(buf)
+ return d.w.err
+}
+
+const hashmul = 0x1e35a7bd
+
+// hash4 returns a hash representation of the first 4 bytes
+// of the supplied slice.
+// The caller must ensure that len(b) >= 4.
+func hash4(b []byte) uint32 {
+ return ((uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24) * hashmul) >> (32 - hashBits)
+}
+
+// bulkHash4 will compute hashes using the same
+// algorithm as hash4
+func bulkHash4(b []byte, dst []uint32) {
+ if len(b) < minMatchLength {
+ return
+ }
+ hb := uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24
+ dst[0] = (hb * hashmul) >> (32 - hashBits)
+ end := len(b) - minMatchLength + 1
+ for i := 1; i < end; i++ {
+ hb = (hb << 8) | uint32(b[i+3])
+ dst[i] = (hb * hashmul) >> (32 - hashBits)
+ }
+}
+
+// matchLen returns the number of matching bytes in a and b
+// up to length 'max'. Both slices must be at least 'max'
+// bytes in size.
+func matchLen(a, b []byte, max int) int {
+ a = a[:max]
+ b = b[:len(a)]
+ for i, av := range a {
+ if b[i] != av {
+ return i
+ }
+ }
+ return max
+}
+
+func (d *compressor) initDeflate() {
+ d.window = make([]byte, 2*windowSize)
+ d.hashOffset = 1
+ d.length = minMatchLength - 1
+ d.offset = 0
+ d.byteAvailable = false
+ d.index = 0
+ d.hash = 0
+ d.chainHead = -1
+ d.bulkHasher = bulkHash4
+ if useSSE42 {
+ d.bulkHasher = crc32sseAll
+ }
+}
+
+// Assumes that d.fastSkipHashing != skipNever,
+// otherwise use deflateLazy
+func (d *compressor) deflate() {
+
+ // Sanity enables additional runtime tests.
+ // It's intended to be used during development
+ // to supplement the currently ad-hoc unit tests.
+ const sanity = false
+
+ if d.windowEnd-d.index < minMatchLength+maxMatchLength && !d.sync {
+ return
+ }
+
+ d.maxInsertIndex = d.windowEnd - (minMatchLength - 1)
+ if d.index < d.maxInsertIndex {
+ d.hash = hash4(d.window[d.index : d.index+minMatchLength])
+ }
+
+ for {
+ if sanity && d.index > d.windowEnd {
+ panic("index > windowEnd")
+ }
+ lookahead := d.windowEnd - d.index
+ if lookahead < minMatchLength+maxMatchLength {
+ if !d.sync {
+ return
+ }
+ if sanity && d.index > d.windowEnd {
+ panic("index > windowEnd")
+ }
+ if lookahead == 0 {
+ if d.tokens.n > 0 {
+ if d.err = d.writeBlockSkip(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ return
+ }
+ }
+ if d.index < d.maxInsertIndex {
+ // Update the hash
+ d.hash = hash4(d.window[d.index : d.index+minMatchLength])
+ ch := d.hashHead[d.hash&hashMask]
+ d.chainHead = int(ch)
+ d.hashPrev[d.index&windowMask] = ch
+ d.hashHead[d.hash&hashMask] = uint32(d.index + d.hashOffset)
+ }
+ d.length = minMatchLength - 1
+ d.offset = 0
+ minIndex := d.index - windowSize
+ if minIndex < 0 {
+ minIndex = 0
+ }
+
+ if d.chainHead-d.hashOffset >= minIndex && lookahead > minMatchLength-1 {
+ if newLength, newOffset, ok := d.findMatch(d.index, d.chainHead-d.hashOffset, minMatchLength-1, lookahead); ok {
+ d.length = newLength
+ d.offset = newOffset
+ }
+ }
+ if d.length >= minMatchLength {
+ d.ii = 0
+ // There was a match at the previous step, and the current match is
+ // not better. Output the previous match.
+ // "d.length-3" should NOT be "d.length-minMatchLength", since the format always assume 3
+ d.tokens.tokens[d.tokens.n] = matchToken(uint32(d.length-3), uint32(d.offset-minOffsetSize))
+ d.tokens.n++
+ // Insert in the hash table all strings up to the end of the match.
+ // index and index-1 are already inserted. If there is not enough
+ // lookahead, the last two strings are not inserted into the hash
+ // table.
+ if d.length <= d.fastSkipHashing {
+ var newIndex int
+ newIndex = d.index + d.length
+ // Calculate missing hashes
+ end := newIndex
+ if end > d.maxInsertIndex {
+ end = d.maxInsertIndex
+ }
+ end += minMatchLength - 1
+ startindex := d.index + 1
+ if startindex > d.maxInsertIndex {
+ startindex = d.maxInsertIndex
+ }
+ tocheck := d.window[startindex:end]
+ dstSize := len(tocheck) - minMatchLength + 1
+ if dstSize > 0 {
+ dst := d.hashMatch[:dstSize]
+ bulkHash4(tocheck, dst)
+ var newH uint32
+ for i, val := range dst {
+ di := i + startindex
+ newH = val & hashMask
+ // Get previous value with the same hash.
+ // Our chain should point to the previous value.
+ d.hashPrev[di&windowMask] = d.hashHead[newH]
+ // Set the head of the hash chain to us.
+ d.hashHead[newH] = uint32(di + d.hashOffset)
+ }
+ d.hash = newH
+ }
+ d.index = newIndex
+ } else {
+ // For matches this long, we don't bother inserting each individual
+ // item into the table.
+ d.index += d.length
+ if d.index < d.maxInsertIndex {
+ d.hash = hash4(d.window[d.index : d.index+minMatchLength])
+ }
+ }
+ if d.tokens.n == maxFlateBlockTokens {
+ // The block includes the current character
+ if d.err = d.writeBlockSkip(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ } else {
+ d.ii++
+ end := d.index + int(d.ii>>uint(d.fastSkipHashing)) + 1
+ if end > d.windowEnd {
+ end = d.windowEnd
+ }
+ for i := d.index; i < end; i++ {
+ d.tokens.tokens[d.tokens.n] = literalToken(uint32(d.window[i]))
+ d.tokens.n++
+ if d.tokens.n == maxFlateBlockTokens {
+ if d.err = d.writeBlockSkip(d.tokens, i+1, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ }
+ d.index = end
+ }
+ }
+}
+
+// deflateLazy is the same as deflate, but with d.fastSkipHashing == skipNever,
+// meaning it always has lazy matching on.
+func (d *compressor) deflateLazy() {
+ // Sanity enables additional runtime tests.
+ // It's intended to be used during development
+ // to supplement the currently ad-hoc unit tests.
+ const sanity = false
+
+ if d.windowEnd-d.index < minMatchLength+maxMatchLength && !d.sync {
+ return
+ }
+
+ d.maxInsertIndex = d.windowEnd - (minMatchLength - 1)
+ if d.index < d.maxInsertIndex {
+ d.hash = hash4(d.window[d.index : d.index+minMatchLength])
+ }
+
+ for {
+ if sanity && d.index > d.windowEnd {
+ panic("index > windowEnd")
+ }
+ lookahead := d.windowEnd - d.index
+ if lookahead < minMatchLength+maxMatchLength {
+ if !d.sync {
+ return
+ }
+ if sanity && d.index > d.windowEnd {
+ panic("index > windowEnd")
+ }
+ if lookahead == 0 {
+ // Flush current output block if any.
+ if d.byteAvailable {
+ // There is still one pending token that needs to be flushed
+ d.tokens.tokens[d.tokens.n] = literalToken(uint32(d.window[d.index-1]))
+ d.tokens.n++
+ d.byteAvailable = false
+ }
+ if d.tokens.n > 0 {
+ if d.err = d.writeBlock(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ return
+ }
+ }
+ if d.index < d.maxInsertIndex {
+ // Update the hash
+ d.hash = hash4(d.window[d.index : d.index+minMatchLength])
+ ch := d.hashHead[d.hash&hashMask]
+ d.chainHead = int(ch)
+ d.hashPrev[d.index&windowMask] = ch
+ d.hashHead[d.hash&hashMask] = uint32(d.index + d.hashOffset)
+ }
+ prevLength := d.length
+ prevOffset := d.offset
+ d.length = minMatchLength - 1
+ d.offset = 0
+ minIndex := d.index - windowSize
+ if minIndex < 0 {
+ minIndex = 0
+ }
+
+ if d.chainHead-d.hashOffset >= minIndex && lookahead > prevLength && prevLength < d.lazy {
+ if newLength, newOffset, ok := d.findMatch(d.index, d.chainHead-d.hashOffset, minMatchLength-1, lookahead); ok {
+ d.length = newLength
+ d.offset = newOffset
+ }
+ }
+ if prevLength >= minMatchLength && d.length <= prevLength {
+ // There was a match at the previous step, and the current match is
+ // not better. Output the previous match.
+ d.tokens.tokens[d.tokens.n] = matchToken(uint32(prevLength-3), uint32(prevOffset-minOffsetSize))
+ d.tokens.n++
+
+ // Insert in the hash table all strings up to the end of the match.
+ // index and index-1 are already inserted. If there is not enough
+ // lookahead, the last two strings are not inserted into the hash
+ // table.
+ var newIndex int
+ newIndex = d.index + prevLength - 1
+ // Calculate missing hashes
+ end := newIndex
+ if end > d.maxInsertIndex {
+ end = d.maxInsertIndex
+ }
+ end += minMatchLength - 1
+ startindex := d.index + 1
+ if startindex > d.maxInsertIndex {
+ startindex = d.maxInsertIndex
+ }
+ tocheck := d.window[startindex:end]
+ dstSize := len(tocheck) - minMatchLength + 1
+ if dstSize > 0 {
+ dst := d.hashMatch[:dstSize]
+ bulkHash4(tocheck, dst)
+ var newH uint32
+ for i, val := range dst {
+ di := i + startindex
+ newH = val & hashMask
+ // Get previous value with the same hash.
+ // Our chain should point to the previous value.
+ d.hashPrev[di&windowMask] = d.hashHead[newH]
+ // Set the head of the hash chain to us.
+ d.hashHead[newH] = uint32(di + d.hashOffset)
+ }
+ d.hash = newH
+ }
+
+ d.index = newIndex
+ d.byteAvailable = false
+ d.length = minMatchLength - 1
+ if d.tokens.n == maxFlateBlockTokens {
+ // The block includes the current character
+ if d.err = d.writeBlock(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ } else {
+ // Reset, if we got a match this run.
+ if d.length >= minMatchLength {
+ d.ii = 0
+ }
+ // We have a byte waiting. Emit it.
+ if d.byteAvailable {
+ d.ii++
+ d.tokens.tokens[d.tokens.n] = literalToken(uint32(d.window[d.index-1]))
+ d.tokens.n++
+ if d.tokens.n == maxFlateBlockTokens {
+ if d.err = d.writeBlock(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ d.index++
+
+ // If we have a long run of no matches, skip additional bytes
+ // Resets when d.ii overflows after 64KB.
+ if d.ii > 31 {
+ n := int(d.ii >> 5)
+ for j := 0; j < n; j++ {
+ if d.index >= d.windowEnd-1 {
+ break
+ }
+
+ d.tokens.tokens[d.tokens.n] = literalToken(uint32(d.window[d.index-1]))
+ d.tokens.n++
+ if d.tokens.n == maxFlateBlockTokens {
+ if d.err = d.writeBlock(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ d.index++
+ }
+ // Flush last byte
+ d.tokens.tokens[d.tokens.n] = literalToken(uint32(d.window[d.index-1]))
+ d.tokens.n++
+ d.byteAvailable = false
+ // d.length = minMatchLength - 1 // not needed, since d.ii is reset above, so it should never be > minMatchLength
+ if d.tokens.n == maxFlateBlockTokens {
+ if d.err = d.writeBlock(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ }
+ } else {
+ d.index++
+ d.byteAvailable = true
+ }
+ }
+ }
+}
+
+// Assumes that d.fastSkipHashing != skipNever,
+// otherwise use deflateLazySSE
+func (d *compressor) deflateSSE() {
+
+ // Sanity enables additional runtime tests.
+ // It's intended to be used during development
+ // to supplement the currently ad-hoc unit tests.
+ const sanity = false
+
+ if d.windowEnd-d.index < minMatchLength+maxMatchLength && !d.sync {
+ return
+ }
+
+ d.maxInsertIndex = d.windowEnd - (minMatchLength - 1)
+ if d.index < d.maxInsertIndex {
+ d.hash = crc32sse(d.window[d.index:d.index+minMatchLength]) & hashMask
+ }
+
+ for {
+ if sanity && d.index > d.windowEnd {
+ panic("index > windowEnd")
+ }
+ lookahead := d.windowEnd - d.index
+ if lookahead < minMatchLength+maxMatchLength {
+ if !d.sync {
+ return
+ }
+ if sanity && d.index > d.windowEnd {
+ panic("index > windowEnd")
+ }
+ if lookahead == 0 {
+ if d.tokens.n > 0 {
+ if d.err = d.writeBlockSkip(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ return
+ }
+ }
+ if d.index < d.maxInsertIndex {
+ // Update the hash
+ d.hash = crc32sse(d.window[d.index:d.index+minMatchLength]) & hashMask
+ ch := d.hashHead[d.hash]
+ d.chainHead = int(ch)
+ d.hashPrev[d.index&windowMask] = ch
+ d.hashHead[d.hash] = uint32(d.index + d.hashOffset)
+ }
+ d.length = minMatchLength - 1
+ d.offset = 0
+ minIndex := d.index - windowSize
+ if minIndex < 0 {
+ minIndex = 0
+ }
+
+ if d.chainHead-d.hashOffset >= minIndex && lookahead > minMatchLength-1 {
+ if newLength, newOffset, ok := d.findMatchSSE(d.index, d.chainHead-d.hashOffset, minMatchLength-1, lookahead); ok {
+ d.length = newLength
+ d.offset = newOffset
+ }
+ }
+ if d.length >= minMatchLength {
+ d.ii = 0
+ // There was a match at the previous step, and the current match is
+ // not better. Output the previous match.
+ // "d.length-3" should NOT be "d.length-minMatchLength", since the format always assume 3
+ d.tokens.tokens[d.tokens.n] = matchToken(uint32(d.length-3), uint32(d.offset-minOffsetSize))
+ d.tokens.n++
+ // Insert in the hash table all strings up to the end of the match.
+ // index and index-1 are already inserted. If there is not enough
+ // lookahead, the last two strings are not inserted into the hash
+ // table.
+ if d.length <= d.fastSkipHashing {
+ var newIndex int
+ newIndex = d.index + d.length
+ // Calculate missing hashes
+ end := newIndex
+ if end > d.maxInsertIndex {
+ end = d.maxInsertIndex
+ }
+ end += minMatchLength - 1
+ startindex := d.index + 1
+ if startindex > d.maxInsertIndex {
+ startindex = d.maxInsertIndex
+ }
+ tocheck := d.window[startindex:end]
+ dstSize := len(tocheck) - minMatchLength + 1
+ if dstSize > 0 {
+ dst := d.hashMatch[:dstSize]
+
+ crc32sseAll(tocheck, dst)
+ var newH uint32
+ for i, val := range dst {
+ di := i + startindex
+ newH = val & hashMask
+ // Get previous value with the same hash.
+ // Our chain should point to the previous value.
+ d.hashPrev[di&windowMask] = d.hashHead[newH]
+ // Set the head of the hash chain to us.
+ d.hashHead[newH] = uint32(di + d.hashOffset)
+ }
+ d.hash = newH
+ }
+ d.index = newIndex
+ } else {
+ // For matches this long, we don't bother inserting each individual
+ // item into the table.
+ d.index += d.length
+ if d.index < d.maxInsertIndex {
+ d.hash = crc32sse(d.window[d.index:d.index+minMatchLength]) & hashMask
+ }
+ }
+ if d.tokens.n == maxFlateBlockTokens {
+ // The block includes the current character
+ if d.err = d.writeBlockSkip(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ } else {
+ d.ii++
+ end := d.index + int(d.ii>>5) + 1
+ if end > d.windowEnd {
+ end = d.windowEnd
+ }
+ for i := d.index; i < end; i++ {
+ d.tokens.tokens[d.tokens.n] = literalToken(uint32(d.window[i]))
+ d.tokens.n++
+ if d.tokens.n == maxFlateBlockTokens {
+ if d.err = d.writeBlockSkip(d.tokens, i+1, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ }
+ d.index = end
+ }
+ }
+}
+
+// deflateLazy is the same as deflate, but with d.fastSkipHashing == skipNever,
+// meaning it always has lazy matching on.
+func (d *compressor) deflateLazySSE() {
+ // Sanity enables additional runtime tests.
+ // It's intended to be used during development
+ // to supplement the currently ad-hoc unit tests.
+ const sanity = false
+
+ if d.windowEnd-d.index < minMatchLength+maxMatchLength && !d.sync {
+ return
+ }
+
+ d.maxInsertIndex = d.windowEnd - (minMatchLength - 1)
+ if d.index < d.maxInsertIndex {
+ d.hash = crc32sse(d.window[d.index:d.index+minMatchLength]) & hashMask
+ }
+
+ for {
+ if sanity && d.index > d.windowEnd {
+ panic("index > windowEnd")
+ }
+ lookahead := d.windowEnd - d.index
+ if lookahead < minMatchLength+maxMatchLength {
+ if !d.sync {
+ return
+ }
+ if sanity && d.index > d.windowEnd {
+ panic("index > windowEnd")
+ }
+ if lookahead == 0 {
+ // Flush current output block if any.
+ if d.byteAvailable {
+ // There is still one pending token that needs to be flushed
+ d.tokens.tokens[d.tokens.n] = literalToken(uint32(d.window[d.index-1]))
+ d.tokens.n++
+ d.byteAvailable = false
+ }
+ if d.tokens.n > 0 {
+ if d.err = d.writeBlock(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ return
+ }
+ }
+ if d.index < d.maxInsertIndex {
+ // Update the hash
+ d.hash = crc32sse(d.window[d.index:d.index+minMatchLength]) & hashMask
+ ch := d.hashHead[d.hash]
+ d.chainHead = int(ch)
+ d.hashPrev[d.index&windowMask] = ch
+ d.hashHead[d.hash] = uint32(d.index + d.hashOffset)
+ }
+ prevLength := d.length
+ prevOffset := d.offset
+ d.length = minMatchLength - 1
+ d.offset = 0
+ minIndex := d.index - windowSize
+ if minIndex < 0 {
+ minIndex = 0
+ }
+
+ if d.chainHead-d.hashOffset >= minIndex && lookahead > prevLength && prevLength < d.lazy {
+ if newLength, newOffset, ok := d.findMatchSSE(d.index, d.chainHead-d.hashOffset, minMatchLength-1, lookahead); ok {
+ d.length = newLength
+ d.offset = newOffset
+ }
+ }
+ if prevLength >= minMatchLength && d.length <= prevLength {
+ // There was a match at the previous step, and the current match is
+ // not better. Output the previous match.
+ d.tokens.tokens[d.tokens.n] = matchToken(uint32(prevLength-3), uint32(prevOffset-minOffsetSize))
+ d.tokens.n++
+
+ // Insert in the hash table all strings up to the end of the match.
+ // index and index-1 are already inserted. If there is not enough
+ // lookahead, the last two strings are not inserted into the hash
+ // table.
+ var newIndex int
+ newIndex = d.index + prevLength - 1
+ // Calculate missing hashes
+ end := newIndex
+ if end > d.maxInsertIndex {
+ end = d.maxInsertIndex
+ }
+ end += minMatchLength - 1
+ startindex := d.index + 1
+ if startindex > d.maxInsertIndex {
+ startindex = d.maxInsertIndex
+ }
+ tocheck := d.window[startindex:end]
+ dstSize := len(tocheck) - minMatchLength + 1
+ if dstSize > 0 {
+ dst := d.hashMatch[:dstSize]
+ crc32sseAll(tocheck, dst)
+ var newH uint32
+ for i, val := range dst {
+ di := i + startindex
+ newH = val & hashMask
+ // Get previous value with the same hash.
+ // Our chain should point to the previous value.
+ d.hashPrev[di&windowMask] = d.hashHead[newH]
+ // Set the head of the hash chain to us.
+ d.hashHead[newH] = uint32(di + d.hashOffset)
+ }
+ d.hash = newH
+ }
+
+ d.index = newIndex
+ d.byteAvailable = false
+ d.length = minMatchLength - 1
+ if d.tokens.n == maxFlateBlockTokens {
+ // The block includes the current character
+ if d.err = d.writeBlock(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ } else {
+ // Reset, if we got a match this run.
+ if d.length >= minMatchLength {
+ d.ii = 0
+ }
+ // We have a byte waiting. Emit it.
+ if d.byteAvailable {
+ d.ii++
+ d.tokens.tokens[d.tokens.n] = literalToken(uint32(d.window[d.index-1]))
+ d.tokens.n++
+ if d.tokens.n == maxFlateBlockTokens {
+ if d.err = d.writeBlock(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ d.index++
+
+ // If we have a long run of no matches, skip additional bytes
+ // Resets when d.ii overflows after 64KB.
+ if d.ii > 31 {
+ n := int(d.ii >> 6)
+ for j := 0; j < n; j++ {
+ if d.index >= d.windowEnd-1 {
+ break
+ }
+
+ d.tokens.tokens[d.tokens.n] = literalToken(uint32(d.window[d.index-1]))
+ d.tokens.n++
+ if d.tokens.n == maxFlateBlockTokens {
+ if d.err = d.writeBlock(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ d.index++
+ }
+ // Flush last byte
+ d.tokens.tokens[d.tokens.n] = literalToken(uint32(d.window[d.index-1]))
+ d.tokens.n++
+ d.byteAvailable = false
+ // d.length = minMatchLength - 1 // not needed, since d.ii is reset above, so it should never be > minMatchLength
+ if d.tokens.n == maxFlateBlockTokens {
+ if d.err = d.writeBlock(d.tokens, d.index, false); d.err != nil {
+ return
+ }
+ d.tokens.n = 0
+ }
+ }
+ } else {
+ d.index++
+ d.byteAvailable = true
+ }
+ }
+ }
+}
+
+func (d *compressor) store() {
+ if d.windowEnd > 0 && (d.windowEnd == maxStoreBlockSize || d.sync) {
+ d.err = d.writeStoredBlock(d.window[:d.windowEnd])
+ d.windowEnd = 0
+ }
+}
+
+// fillWindow will fill the buffer with data for huffman-only compression.
+// The number of bytes copied is returned.
+func (d *compressor) fillBlock(b []byte) int {
+ n := copy(d.window[d.windowEnd:], b)
+ d.windowEnd += n
+ return n
+}
+
+// storeHuff will compress and store the currently added data,
+// if enough has been accumulated or we at the end of the stream.
+// Any error that occurred will be in d.err
+func (d *compressor) storeHuff() {
+ if d.windowEnd < len(d.window) && !d.sync || d.windowEnd == 0 {
+ return
+ }
+ d.w.writeBlockHuff(false, d.window[:d.windowEnd])
+ d.err = d.w.err
+ d.windowEnd = 0
+}
+
+// storeHuff will compress and store the currently added data,
+// if enough has been accumulated or we at the end of the stream.
+// Any error that occurred will be in d.err
+func (d *compressor) storeSnappy() {
+ // We only compress if we have maxStoreBlockSize.
+ if d.windowEnd < maxStoreBlockSize {
+ if !d.sync {
+ return
+ }
+ // Handle extremely small sizes.
+ if d.windowEnd < 128 {
+ if d.windowEnd == 0 {
+ return
+ }
+ if d.windowEnd <= 32 {
+ d.err = d.writeStoredBlock(d.window[:d.windowEnd])
+ d.tokens.n = 0
+ d.windowEnd = 0
+ } else {
+ d.w.writeBlockHuff(false, d.window[:d.windowEnd])
+ d.err = d.w.err
+ }
+ d.tokens.n = 0
+ d.windowEnd = 0
+ d.snap.Reset()
+ return
+ }
+ }
+
+ d.snap.Encode(&d.tokens, d.window[:d.windowEnd])
+ // If we made zero matches, store the block as is.
+ if int(d.tokens.n) == d.windowEnd {
+ d.err = d.writeStoredBlock(d.window[:d.windowEnd])
+ // If we removed less than 1/16th, huffman compress the block.
+ } else if int(d.tokens.n) > d.windowEnd-(d.windowEnd>>4) {
+ d.w.writeBlockHuff(false, d.window[:d.windowEnd])
+ d.err = d.w.err
+ } else {
+ d.w.writeBlockDynamic(d.tokens.tokens[:d.tokens.n], false, d.window[:d.windowEnd])
+ d.err = d.w.err
+ }
+ d.tokens.n = 0
+ d.windowEnd = 0
+}
+
+// write will add input byte to the stream.
+// Unless an error occurs all bytes will be consumed.
+func (d *compressor) write(b []byte) (n int, err error) {
+ if d.err != nil {
+ return 0, d.err
+ }
+ n = len(b)
+ for len(b) > 0 {
+ d.step(d)
+ b = b[d.fill(d, b):]
+ if d.err != nil {
+ return 0, d.err
+ }
+ }
+ return n, d.err
+}
+
+func (d *compressor) syncFlush() error {
+ d.sync = true
+ if d.err != nil {
+ return d.err
+ }
+ d.step(d)
+ if d.err == nil {
+ d.w.writeStoredHeader(0, false)
+ d.w.flush()
+ d.err = d.w.err
+ }
+ d.sync = false
+ return d.err
+}
+
+func (d *compressor) init(w io.Writer, level int) (err error) {
+ d.w = newHuffmanBitWriter(w)
+
+ switch {
+ case level == NoCompression:
+ d.window = make([]byte, maxStoreBlockSize)
+ d.fill = (*compressor).fillBlock
+ d.step = (*compressor).store
+ case level == ConstantCompression:
+ d.window = make([]byte, maxStoreBlockSize)
+ d.fill = (*compressor).fillBlock
+ d.step = (*compressor).storeHuff
+ case level >= 1 && level <= 4:
+ d.snap = newSnappy(level)
+ d.window = make([]byte, maxStoreBlockSize)
+ d.fill = (*compressor).fillBlock
+ d.step = (*compressor).storeSnappy
+ case level == DefaultCompression:
+ level = 5
+ fallthrough
+ case 5 <= level && level <= 9:
+ d.compressionLevel = levels[level]
+ d.initDeflate()
+ d.fill = (*compressor).fillDeflate
+ if d.fastSkipHashing == skipNever {
+ if useSSE42 {
+ d.step = (*compressor).deflateLazySSE
+ } else {
+ d.step = (*compressor).deflateLazy
+ }
+ } else {
+ if useSSE42 {
+ d.step = (*compressor).deflateSSE
+ } else {
+ d.step = (*compressor).deflate
+
+ }
+ }
+ default:
+ return fmt.Errorf("flate: invalid compression level %d: want value in range [-2, 9]", level)
+ }
+ return nil
+}
+
+// reset the state of the compressor.
+func (d *compressor) reset(w io.Writer) {
+ d.w.reset(w)
+ d.sync = false
+ d.err = nil
+ // We only need to reset a few things for Snappy.
+ if d.snap != nil {
+ d.snap.Reset()
+ d.windowEnd = 0
+ d.tokens.n = 0
+ return
+ }
+ switch d.compressionLevel.chain {
+ case 0:
+ // level was NoCompression or ConstantCompresssion.
+ d.windowEnd = 0
+ default:
+ d.chainHead = -1
+ for i := range d.hashHead {
+ d.hashHead[i] = 0
+ }
+ for i := range d.hashPrev {
+ d.hashPrev[i] = 0
+ }
+ d.hashOffset = 1
+ d.index, d.windowEnd = 0, 0
+ d.blockStart, d.byteAvailable = 0, false
+ d.tokens.n = 0
+ d.length = minMatchLength - 1
+ d.offset = 0
+ d.hash = 0
+ d.ii = 0
+ d.maxInsertIndex = 0
+ }
+}
+
+func (d *compressor) close() error {
+ if d.err != nil {
+ return d.err
+ }
+ d.sync = true
+ d.step(d)
+ if d.err != nil {
+ return d.err
+ }
+ if d.w.writeStoredHeader(0, true); d.w.err != nil {
+ return d.w.err
+ }
+ d.w.flush()
+ return d.w.err
+}
+
+// NewWriter returns a new Writer compressing data at the given level.
+// Following zlib, levels range from 1 (BestSpeed) to 9 (BestCompression);
+// higher levels typically run slower but compress more.
+// Level 0 (NoCompression) does not attempt any compression; it only adds the
+// necessary DEFLATE framing.
+// Level -1 (DefaultCompression) uses the default compression level.
+// Level -2 (ConstantCompression) will use Huffman compression only, giving
+// a very fast compression for all types of input, but sacrificing considerable
+// compression efficiency.
+//
+// If level is in the range [-2, 9] then the error returned will be nil.
+// Otherwise the error returned will be non-nil.
+func NewWriter(w io.Writer, level int) (*Writer, error) {
+ var dw Writer
+ if err := dw.d.init(w, level); err != nil {
+ return nil, err
+ }
+ return &dw, nil
+}
+
+// NewWriterDict is like NewWriter but initializes the new
+// Writer with a preset dictionary. The returned Writer behaves
+// as if the dictionary had been written to it without producing
+// any compressed output. The compressed data written to w
+// can only be decompressed by a Reader initialized with the
+// same dictionary.
+func NewWriterDict(w io.Writer, level int, dict []byte) (*Writer, error) {
+ dw := &dictWriter{w}
+ zw, err := NewWriter(dw, level)
+ if err != nil {
+ return nil, err
+ }
+ zw.d.fillWindow(dict)
+ zw.dict = append(zw.dict, dict...) // duplicate dictionary for Reset method.
+ return zw, err
+}
+
+type dictWriter struct {
+ w io.Writer
+}
+
+func (w *dictWriter) Write(b []byte) (n int, err error) {
+ return w.w.Write(b)
+}
+
+// A Writer takes data written to it and writes the compressed
+// form of that data to an underlying writer (see NewWriter).
+type Writer struct {
+ d compressor
+ dict []byte
+}
+
+// Write writes data to w, which will eventually write the
+// compressed form of data to its underlying writer.
+func (w *Writer) Write(data []byte) (n int, err error) {
+ return w.d.write(data)
+}
+
+// Flush flushes any pending data to the underlying writer.
+// It is useful mainly in compressed network protocols, to ensure that
+// a remote reader has enough data to reconstruct a packet.
+// Flush does not return until the data has been written.
+// Calling Flush when there is no pending data still causes the Writer
+// to emit a sync marker of at least 4 bytes.
+// If the underlying writer returns an error, Flush returns that error.
+//
+// In the terminology of the zlib library, Flush is equivalent to Z_SYNC_FLUSH.
+func (w *Writer) Flush() error {
+ // For more about flushing:
+ // http://www.bolet.org/~pornin/deflate-flush.html
+ return w.d.syncFlush()
+}
+
+// Close flushes and closes the writer.
+func (w *Writer) Close() error {
+ return w.d.close()
+}
+
+// Reset discards the writer's state and makes it equivalent to
+// the result of NewWriter or NewWriterDict called with dst
+// and w's level and dictionary.
+func (w *Writer) Reset(dst io.Writer) {
+ if dw, ok := w.d.w.writer.(*dictWriter); ok {
+ // w was created with NewWriterDict
+ dw.w = dst
+ w.d.reset(dw)
+ w.d.fillWindow(w.dict)
+ } else {
+ // w was created with NewWriter
+ w.d.reset(dst)
+ }
+}
+
+// ResetDict discards the writer's state and makes it equivalent to
+// the result of NewWriter or NewWriterDict called with dst
+// and w's level, but sets a specific dictionary.
+func (w *Writer) ResetDict(dst io.Writer, dict []byte) {
+ w.dict = dict
+ w.d.reset(dst)
+ w.d.fillWindow(w.dict)
+}
diff --git a/vendor/github.com/klauspost/compress/flate/dict_decoder.go b/vendor/github.com/klauspost/compress/flate/dict_decoder.go
new file mode 100644
index 000000000..71c75a065
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/flate/dict_decoder.go
@@ -0,0 +1,184 @@
+// 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 flate
+
+// dictDecoder implements the LZ77 sliding dictionary as used in decompression.
+// LZ77 decompresses data through sequences of two forms of commands:
+//
+// * Literal insertions: Runs of one or more symbols are inserted into the data
+// stream as is. This is accomplished through the writeByte method for a
+// single symbol, or combinations of writeSlice/writeMark for multiple symbols.
+// Any valid stream must start with a literal insertion if no preset dictionary
+// is used.
+//
+// * Backward copies: Runs of one or more symbols are copied from previously
+// emitted data. Backward copies come as the tuple (dist, length) where dist
+// determines how far back in the stream to copy from and length determines how
+// many bytes to copy. Note that it is valid for the length to be greater than
+// the distance. Since LZ77 uses forward copies, that situation is used to
+// perform a form of run-length encoding on repeated runs of symbols.
+// The writeCopy and tryWriteCopy are used to implement this command.
+//
+// For performance reasons, this implementation performs little to no sanity
+// checks about the arguments. As such, the invariants documented for each
+// method call must be respected.
+type dictDecoder struct {
+ hist []byte // Sliding window history
+
+ // Invariant: 0 <= rdPos <= wrPos <= len(hist)
+ wrPos int // Current output position in buffer
+ rdPos int // Have emitted hist[:rdPos] already
+ full bool // Has a full window length been written yet?
+}
+
+// init initializes dictDecoder to have a sliding window dictionary of the given
+// size. If a preset dict is provided, it will initialize the dictionary with
+// the contents of dict.
+func (dd *dictDecoder) init(size int, dict []byte) {
+ *dd = dictDecoder{hist: dd.hist}
+
+ if cap(dd.hist) < size {
+ dd.hist = make([]byte, size)
+ }
+ dd.hist = dd.hist[:size]
+
+ if len(dict) > len(dd.hist) {
+ dict = dict[len(dict)-len(dd.hist):]
+ }
+ dd.wrPos = copy(dd.hist, dict)
+ if dd.wrPos == len(dd.hist) {
+ dd.wrPos = 0
+ dd.full = true
+ }
+ dd.rdPos = dd.wrPos
+}
+
+// histSize reports the total amount of historical data in the dictionary.
+func (dd *dictDecoder) histSize() int {
+ if dd.full {
+ return len(dd.hist)
+ }
+ return dd.wrPos
+}
+
+// availRead reports the number of bytes that can be flushed by readFlush.
+func (dd *dictDecoder) availRead() int {
+ return dd.wrPos - dd.rdPos
+}
+
+// availWrite reports the available amount of output buffer space.
+func (dd *dictDecoder) availWrite() int {
+ return len(dd.hist) - dd.wrPos
+}
+
+// writeSlice returns a slice of the available buffer to write data to.
+//
+// This invariant will be kept: len(s) <= availWrite()
+func (dd *dictDecoder) writeSlice() []byte {
+ return dd.hist[dd.wrPos:]
+}
+
+// writeMark advances the writer pointer by cnt.
+//
+// This invariant must be kept: 0 <= cnt <= availWrite()
+func (dd *dictDecoder) writeMark(cnt int) {
+ dd.wrPos += cnt
+}
+
+// writeByte writes a single byte to the dictionary.
+//
+// This invariant must be kept: 0 < availWrite()
+func (dd *dictDecoder) writeByte(c byte) {
+ dd.hist[dd.wrPos] = c
+ dd.wrPos++
+}
+
+// writeCopy copies a string at a given (dist, length) to the output.
+// This returns the number of bytes copied and may be less than the requested
+// length if the available space in the output buffer is too small.
+//
+// This invariant must be kept: 0 < dist <= histSize()
+func (dd *dictDecoder) writeCopy(dist, length int) int {
+ dstBase := dd.wrPos
+ dstPos := dstBase
+ srcPos := dstPos - dist
+ endPos := dstPos + length
+ if endPos > len(dd.hist) {
+ endPos = len(dd.hist)
+ }
+
+ // Copy non-overlapping section after destination position.
+ //
+ // This section is non-overlapping in that the copy length for this section
+ // is always less than or equal to the backwards distance. This can occur
+ // if a distance refers to data that wraps-around in the buffer.
+ // Thus, a backwards copy is performed here; that is, the exact bytes in
+ // the source prior to the copy is placed in the destination.
+ if srcPos < 0 {
+ srcPos += len(dd.hist)
+ dstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:])
+ srcPos = 0
+ }
+
+ // Copy possibly overlapping section before destination position.
+ //
+ // This section can overlap if the copy length for this section is larger
+ // than the backwards distance. This is allowed by LZ77 so that repeated
+ // strings can be succinctly represented using (dist, length) pairs.
+ // Thus, a forwards copy is performed here; that is, the bytes copied is
+ // possibly dependent on the resulting bytes in the destination as the copy
+ // progresses along. This is functionally equivalent to the following:
+ //
+ // for i := 0; i < endPos-dstPos; i++ {
+ // dd.hist[dstPos+i] = dd.hist[srcPos+i]
+ // }
+ // dstPos = endPos
+ //
+ for dstPos < endPos {
+ dstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:dstPos])
+ }
+
+ dd.wrPos = dstPos
+ return dstPos - dstBase
+}
+
+// tryWriteCopy tries to copy a string at a given (distance, length) to the
+// output. This specialized version is optimized for short distances.
+//
+// This method is designed to be inlined for performance reasons.
+//
+// This invariant must be kept: 0 < dist <= histSize()
+func (dd *dictDecoder) tryWriteCopy(dist, length int) int {
+ dstPos := dd.wrPos
+ endPos := dstPos + length
+ if dstPos < dist || endPos > len(dd.hist) {
+ return 0
+ }
+ dstBase := dstPos
+ srcPos := dstPos - dist
+
+ // Copy possibly overlapping section before destination position.
+loop:
+ dstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:dstPos])
+ if dstPos < endPos {
+ goto loop // Avoid for-loop so that this function can be inlined
+ }
+
+ dd.wrPos = dstPos
+ return dstPos - dstBase
+}
+
+// readFlush returns a slice of the historical buffer that is ready to be
+// emitted to the user. The data returned by readFlush must be fully consumed
+// before calling any other dictDecoder methods.
+func (dd *dictDecoder) readFlush() []byte {
+ toRead := dd.hist[dd.rdPos:dd.wrPos]
+ dd.rdPos = dd.wrPos
+ if dd.wrPos == len(dd.hist) {
+ dd.wrPos, dd.rdPos = 0, 0
+ dd.full = true
+ }
+ return toRead
+}
diff --git a/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go b/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go
new file mode 100644
index 000000000..f9b2a699a
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go
@@ -0,0 +1,701 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package flate
+
+import (
+ "io"
+)
+
+const (
+ // The largest offset code.
+ offsetCodeCount = 30
+
+ // The special code used to mark the end of a block.
+ endBlockMarker = 256
+
+ // The first length code.
+ lengthCodesStart = 257
+
+ // The number of codegen codes.
+ codegenCodeCount = 19
+ badCode = 255
+
+ // bufferFlushSize indicates the buffer size
+ // after which bytes are flushed to the writer.
+ // Should preferably be a multiple of 6, since
+ // we accumulate 6 bytes between writes to the buffer.
+ bufferFlushSize = 240
+
+ // bufferSize is the actual output byte buffer size.
+ // It must have additional headroom for a flush
+ // which can contain up to 8 bytes.
+ bufferSize = bufferFlushSize + 8
+)
+
+// The number of extra bits needed by length code X - LENGTH_CODES_START.
+var lengthExtraBits = []int8{
+ /* 257 */ 0, 0, 0,
+ /* 260 */ 0, 0, 0, 0, 0, 1, 1, 1, 1, 2,
+ /* 270 */ 2, 2, 2, 3, 3, 3, 3, 4, 4, 4,
+ /* 280 */ 4, 5, 5, 5, 5, 0,
+}
+
+// The length indicated by length code X - LENGTH_CODES_START.
+var lengthBase = []uint32{
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 10,
+ 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
+ 64, 80, 96, 112, 128, 160, 192, 224, 255,
+}
+
+// offset code word extra bits.
+var offsetExtraBits = []int8{
+ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
+ 4, 4, 5, 5, 6, 6, 7, 7, 8, 8,
+ 9, 9, 10, 10, 11, 11, 12, 12, 13, 13,
+ /* extended window */
+ 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20,
+}
+
+var offsetBase = []uint32{
+ /* normal deflate */
+ 0x000000, 0x000001, 0x000002, 0x000003, 0x000004,
+ 0x000006, 0x000008, 0x00000c, 0x000010, 0x000018,
+ 0x000020, 0x000030, 0x000040, 0x000060, 0x000080,
+ 0x0000c0, 0x000100, 0x000180, 0x000200, 0x000300,
+ 0x000400, 0x000600, 0x000800, 0x000c00, 0x001000,
+ 0x001800, 0x002000, 0x003000, 0x004000, 0x006000,
+
+ /* extended window */
+ 0x008000, 0x00c000, 0x010000, 0x018000, 0x020000,
+ 0x030000, 0x040000, 0x060000, 0x080000, 0x0c0000,
+ 0x100000, 0x180000, 0x200000, 0x300000,
+}
+
+// The odd order in which the codegen code sizes are written.
+var codegenOrder = []uint32{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}
+
+type huffmanBitWriter struct {
+ // writer is the underlying writer.
+ // Do not use it directly; use the write method, which ensures
+ // that Write errors are sticky.
+ writer io.Writer
+
+ // Data waiting to be written is bytes[0:nbytes]
+ // and then the low nbits of bits.
+ bits uint64
+ nbits uint
+ bytes [bufferSize]byte
+ codegenFreq [codegenCodeCount]int32
+ nbytes int
+ literalFreq []int32
+ offsetFreq []int32
+ codegen []uint8
+ literalEncoding *huffmanEncoder
+ offsetEncoding *huffmanEncoder
+ codegenEncoding *huffmanEncoder
+ err error
+}
+
+func newHuffmanBitWriter(w io.Writer) *huffmanBitWriter {
+ return &huffmanBitWriter{
+ writer: w,
+ literalFreq: make([]int32, maxNumLit),
+ offsetFreq: make([]int32, offsetCodeCount),
+ codegen: make([]uint8, maxNumLit+offsetCodeCount+1),
+ literalEncoding: newHuffmanEncoder(maxNumLit),
+ codegenEncoding: newHuffmanEncoder(codegenCodeCount),
+ offsetEncoding: newHuffmanEncoder(offsetCodeCount),
+ }
+}
+
+func (w *huffmanBitWriter) reset(writer io.Writer) {
+ w.writer = writer
+ w.bits, w.nbits, w.nbytes, w.err = 0, 0, 0, nil
+ w.bytes = [bufferSize]byte{}
+}
+
+func (w *huffmanBitWriter) flush() {
+ if w.err != nil {
+ w.nbits = 0
+ return
+ }
+ n := w.nbytes
+ for w.nbits != 0 {
+ w.bytes[n] = byte(w.bits)
+ w.bits >>= 8
+ if w.nbits > 8 { // Avoid underflow
+ w.nbits -= 8
+ } else {
+ w.nbits = 0
+ }
+ n++
+ }
+ w.bits = 0
+ w.write(w.bytes[:n])
+ w.nbytes = 0
+}
+
+func (w *huffmanBitWriter) write(b []byte) {
+ if w.err != nil {
+ return
+ }
+ _, w.err = w.writer.Write(b)
+}
+
+func (w *huffmanBitWriter) writeBits(b int32, nb uint) {
+ if w.err != nil {
+ return
+ }
+ w.bits |= uint64(b) << w.nbits
+ w.nbits += nb
+ if w.nbits >= 48 {
+ bits := w.bits
+ w.bits >>= 48
+ w.nbits -= 48
+ n := w.nbytes
+ bytes := w.bytes[n : n+6]
+ bytes[0] = byte(bits)
+ bytes[1] = byte(bits >> 8)
+ bytes[2] = byte(bits >> 16)
+ bytes[3] = byte(bits >> 24)
+ bytes[4] = byte(bits >> 32)
+ bytes[5] = byte(bits >> 40)
+ n += 6
+ if n >= bufferFlushSize {
+ w.write(w.bytes[:n])
+ n = 0
+ }
+ w.nbytes = n
+ }
+}
+
+func (w *huffmanBitWriter) writeBytes(bytes []byte) {
+ if w.err != nil {
+ return
+ }
+ n := w.nbytes
+ if w.nbits&7 != 0 {
+ w.err = InternalError("writeBytes with unfinished bits")
+ return
+ }
+ for w.nbits != 0 {
+ w.bytes[n] = byte(w.bits)
+ w.bits >>= 8
+ w.nbits -= 8
+ n++
+ }
+ if n != 0 {
+ w.write(w.bytes[:n])
+ }
+ w.nbytes = 0
+ w.write(bytes)
+}
+
+// RFC 1951 3.2.7 specifies a special run-length encoding for specifying
+// the literal and offset lengths arrays (which are concatenated into a single
+// array). This method generates that run-length encoding.
+//
+// The result is written into the codegen array, and the frequencies
+// of each code is written into the codegenFreq array.
+// Codes 0-15 are single byte codes. Codes 16-18 are followed by additional
+// information. Code badCode is an end marker
+//
+// numLiterals The number of literals in literalEncoding
+// numOffsets The number of offsets in offsetEncoding
+// litenc, offenc The literal and offset encoder to use
+func (w *huffmanBitWriter) generateCodegen(numLiterals int, numOffsets int, litEnc, offEnc *huffmanEncoder) {
+ for i := range w.codegenFreq {
+ w.codegenFreq[i] = 0
+ }
+ // Note that we are using codegen both as a temporary variable for holding
+ // a copy of the frequencies, and as the place where we put the result.
+ // This is fine because the output is always shorter than the input used
+ // so far.
+ codegen := w.codegen // cache
+ // Copy the concatenated code sizes to codegen. Put a marker at the end.
+ cgnl := codegen[:numLiterals]
+ for i := range cgnl {
+ cgnl[i] = uint8(litEnc.codes[i].len)
+ }
+
+ cgnl = codegen[numLiterals : numLiterals+numOffsets]
+ for i := range cgnl {
+ cgnl[i] = uint8(offEnc.codes[i].len)
+ }
+ codegen[numLiterals+numOffsets] = badCode
+
+ size := codegen[0]
+ count := 1
+ outIndex := 0
+ for inIndex := 1; size != badCode; inIndex++ {
+ // INVARIANT: We have seen "count" copies of size that have not yet
+ // had output generated for them.
+ nextSize := codegen[inIndex]
+ if nextSize == size {
+ count++
+ continue
+ }
+ // We need to generate codegen indicating "count" of size.
+ if size != 0 {
+ codegen[outIndex] = size
+ outIndex++
+ w.codegenFreq[size]++
+ count--
+ for count >= 3 {
+ n := 6
+ if n > count {
+ n = count
+ }
+ codegen[outIndex] = 16
+ outIndex++
+ codegen[outIndex] = uint8(n - 3)
+ outIndex++
+ w.codegenFreq[16]++
+ count -= n
+ }
+ } else {
+ for count >= 11 {
+ n := 138
+ if n > count {
+ n = count
+ }
+ codegen[outIndex] = 18
+ outIndex++
+ codegen[outIndex] = uint8(n - 11)
+ outIndex++
+ w.codegenFreq[18]++
+ count -= n
+ }
+ if count >= 3 {
+ // count >= 3 && count <= 10
+ codegen[outIndex] = 17
+ outIndex++
+ codegen[outIndex] = uint8(count - 3)
+ outIndex++
+ w.codegenFreq[17]++
+ count = 0
+ }
+ }
+ count--
+ for ; count >= 0; count-- {
+ codegen[outIndex] = size
+ outIndex++
+ w.codegenFreq[size]++
+ }
+ // Set up invariant for next time through the loop.
+ size = nextSize
+ count = 1
+ }
+ // Marker indicating the end of the codegen.
+ codegen[outIndex] = badCode
+}
+
+// dynamicSize returns the size of dynamically encoded data in bits.
+func (w *huffmanBitWriter) dynamicSize(litEnc, offEnc *huffmanEncoder, extraBits int) (size, numCodegens int) {
+ numCodegens = len(w.codegenFreq)
+ for numCodegens > 4 && w.codegenFreq[codegenOrder[numCodegens-1]] == 0 {
+ numCodegens--
+ }
+ header := 3 + 5 + 5 + 4 + (3 * numCodegens) +
+ w.codegenEncoding.bitLength(w.codegenFreq[:]) +
+ int(w.codegenFreq[16])*2 +
+ int(w.codegenFreq[17])*3 +
+ int(w.codegenFreq[18])*7
+ size = header +
+ litEnc.bitLength(w.literalFreq) +
+ offEnc.bitLength(w.offsetFreq) +
+ extraBits
+
+ return size, numCodegens
+}
+
+// fixedSize returns the size of dynamically encoded data in bits.
+func (w *huffmanBitWriter) fixedSize(extraBits int) int {
+ return 3 +
+ fixedLiteralEncoding.bitLength(w.literalFreq) +
+ fixedOffsetEncoding.bitLength(w.offsetFreq) +
+ extraBits
+}
+
+// storedSize calculates the stored size, including header.
+// The function returns the size in bits and whether the block
+// fits inside a single block.
+func (w *huffmanBitWriter) storedSize(in []byte) (int, bool) {
+ if in == nil {
+ return 0, false
+ }
+ if len(in) <= maxStoreBlockSize {
+ return (len(in) + 5) * 8, true
+ }
+ return 0, false
+}
+
+func (w *huffmanBitWriter) writeCode(c hcode) {
+ if w.err != nil {
+ return
+ }
+ w.bits |= uint64(c.code) << w.nbits
+ w.nbits += uint(c.len)
+ if w.nbits >= 48 {
+ bits := w.bits
+ w.bits >>= 48
+ w.nbits -= 48
+ n := w.nbytes
+ bytes := w.bytes[n : n+6]
+ bytes[0] = byte(bits)
+ bytes[1] = byte(bits >> 8)
+ bytes[2] = byte(bits >> 16)
+ bytes[3] = byte(bits >> 24)
+ bytes[4] = byte(bits >> 32)
+ bytes[5] = byte(bits >> 40)
+ n += 6
+ if n >= bufferFlushSize {
+ w.write(w.bytes[:n])
+ n = 0
+ }
+ w.nbytes = n
+ }
+}
+
+// Write the header of a dynamic Huffman block to the output stream.
+//
+// numLiterals The number of literals specified in codegen
+// numOffsets The number of offsets specified in codegen
+// numCodegens The number of codegens used in codegen
+func (w *huffmanBitWriter) writeDynamicHeader(numLiterals int, numOffsets int, numCodegens int, isEof bool) {
+ if w.err != nil {
+ return
+ }
+ var firstBits int32 = 4
+ if isEof {
+ firstBits = 5
+ }
+ w.writeBits(firstBits, 3)
+ w.writeBits(int32(numLiterals-257), 5)
+ w.writeBits(int32(numOffsets-1), 5)
+ w.writeBits(int32(numCodegens-4), 4)
+
+ for i := 0; i < numCodegens; i++ {
+ value := uint(w.codegenEncoding.codes[codegenOrder[i]].len)
+ w.writeBits(int32(value), 3)
+ }
+
+ i := 0
+ for {
+ var codeWord int = int(w.codegen[i])
+ i++
+ if codeWord == badCode {
+ break
+ }
+ w.writeCode(w.codegenEncoding.codes[uint32(codeWord)])
+
+ switch codeWord {
+ case 16:
+ w.writeBits(int32(w.codegen[i]), 2)
+ i++
+ break
+ case 17:
+ w.writeBits(int32(w.codegen[i]), 3)
+ i++
+ break
+ case 18:
+ w.writeBits(int32(w.codegen[i]), 7)
+ i++
+ break
+ }
+ }
+}
+
+func (w *huffmanBitWriter) writeStoredHeader(length int, isEof bool) {
+ if w.err != nil {
+ return
+ }
+ var flag int32
+ if isEof {
+ flag = 1
+ }
+ w.writeBits(flag, 3)
+ w.flush()
+ w.writeBits(int32(length), 16)
+ w.writeBits(int32(^uint16(length)), 16)
+}
+
+func (w *huffmanBitWriter) writeFixedHeader(isEof bool) {
+ if w.err != nil {
+ return
+ }
+ // Indicate that we are a fixed Huffman block
+ var value int32 = 2
+ if isEof {
+ value = 3
+ }
+ w.writeBits(value, 3)
+}
+
+// writeBlock will write a block of tokens with the smallest encoding.
+// The original input can be supplied, and if the huffman encoded data
+// is larger than the original bytes, the data will be written as a
+// stored block.
+// If the input is nil, the tokens will always be Huffman encoded.
+func (w *huffmanBitWriter) writeBlock(tokens []token, eof bool, input []byte) {
+ if w.err != nil {
+ return
+ }
+
+ tokens = append(tokens, endBlockMarker)
+ numLiterals, numOffsets := w.indexTokens(tokens)
+
+ var extraBits int
+ storedSize, storable := w.storedSize(input)
+ if storable {
+ // We only bother calculating the costs of the extra bits required by
+ // the length of offset fields (which will be the same for both fixed
+ // and dynamic encoding), if we need to compare those two encodings
+ // against stored encoding.
+ for lengthCode := lengthCodesStart + 8; lengthCode < numLiterals; lengthCode++ {
+ // First eight length codes have extra size = 0.
+ extraBits += int(w.literalFreq[lengthCode]) * int(lengthExtraBits[lengthCode-lengthCodesStart])
+ }
+ for offsetCode := 4; offsetCode < numOffsets; offsetCode++ {
+ // First four offset codes have extra size = 0.
+ extraBits += int(w.offsetFreq[offsetCode]) * int(offsetExtraBits[offsetCode])
+ }
+ }
+
+ // Figure out smallest code.
+ // Fixed Huffman baseline.
+ var literalEncoding = fixedLiteralEncoding
+ var offsetEncoding = fixedOffsetEncoding
+ var size = w.fixedSize(extraBits)
+
+ // Dynamic Huffman?
+ var numCodegens int
+
+ // Generate codegen and codegenFrequencies, which indicates how to encode
+ // the literalEncoding and the offsetEncoding.
+ w.generateCodegen(numLiterals, numOffsets, w.literalEncoding, w.offsetEncoding)
+ w.codegenEncoding.generate(w.codegenFreq[:], 7)
+ dynamicSize, numCodegens := w.dynamicSize(w.literalEncoding, w.offsetEncoding, extraBits)
+
+ if dynamicSize < size {
+ size = dynamicSize
+ literalEncoding = w.literalEncoding
+ offsetEncoding = w.offsetEncoding
+ }
+
+ // Stored bytes?
+ if storable && storedSize < size {
+ w.writeStoredHeader(len(input), eof)
+ w.writeBytes(input)
+ return
+ }
+
+ // Huffman.
+ if literalEncoding == fixedLiteralEncoding {
+ w.writeFixedHeader(eof)
+ } else {
+ w.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof)
+ }
+
+ // Write the tokens.
+ w.writeTokens(tokens, literalEncoding.codes, offsetEncoding.codes)
+}
+
+// writeBlockDynamic encodes a block using a dynamic Huffman table.
+// This should be used if the symbols used have a disproportionate
+// histogram distribution.
+// If input is supplied and the compression savings are below 1/16th of the
+// input size the block is stored.
+func (w *huffmanBitWriter) writeBlockDynamic(tokens []token, eof bool, input []byte) {
+ if w.err != nil {
+ return
+ }
+
+ tokens = append(tokens, endBlockMarker)
+ numLiterals, numOffsets := w.indexTokens(tokens)
+
+ // Generate codegen and codegenFrequencies, which indicates how to encode
+ // the literalEncoding and the offsetEncoding.
+ w.generateCodegen(numLiterals, numOffsets, w.literalEncoding, w.offsetEncoding)
+ w.codegenEncoding.generate(w.codegenFreq[:], 7)
+ size, numCodegens := w.dynamicSize(w.literalEncoding, w.offsetEncoding, 0)
+
+ // Store bytes, if we don't get a reasonable improvement.
+ if ssize, storable := w.storedSize(input); storable && ssize < (size+size>>4) {
+ w.writeStoredHeader(len(input), eof)
+ w.writeBytes(input)
+ return
+ }
+
+ // Write Huffman table.
+ w.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof)
+
+ // Write the tokens.
+ w.writeTokens(tokens, w.literalEncoding.codes, w.offsetEncoding.codes)
+}
+
+// indexTokens indexes a slice of tokens, and updates
+// literalFreq and offsetFreq, and generates literalEncoding
+// and offsetEncoding.
+// The number of literal and offset tokens is returned.
+func (w *huffmanBitWriter) indexTokens(tokens []token) (numLiterals, numOffsets int) {
+ for i := range w.literalFreq {
+ w.literalFreq[i] = 0
+ }
+ for i := range w.offsetFreq {
+ w.offsetFreq[i] = 0
+ }
+
+ for _, t := range tokens {
+ if t < matchType {
+ w.literalFreq[t.literal()]++
+ continue
+ }
+ length := t.length()
+ offset := t.offset()
+ w.literalFreq[lengthCodesStart+lengthCode(length)]++
+ w.offsetFreq[offsetCode(offset)]++
+ }
+
+ // get the number of literals
+ numLiterals = len(w.literalFreq)
+ for w.literalFreq[numLiterals-1] == 0 {
+ numLiterals--
+ }
+ // get the number of offsets
+ numOffsets = len(w.offsetFreq)
+ for numOffsets > 0 && w.offsetFreq[numOffsets-1] == 0 {
+ numOffsets--
+ }
+ if numOffsets == 0 {
+ // We haven't found a single match. If we want to go with the dynamic encoding,
+ // we should count at least one offset to be sure that the offset huffman tree could be encoded.
+ w.offsetFreq[0] = 1
+ numOffsets = 1
+ }
+ w.literalEncoding.generate(w.literalFreq, 15)
+ w.offsetEncoding.generate(w.offsetFreq, 15)
+ return
+}
+
+// writeTokens writes a slice of tokens to the output.
+// codes for literal and offset encoding must be supplied.
+func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode) {
+ if w.err != nil {
+ return
+ }
+ for _, t := range tokens {
+ if t < matchType {
+ w.writeCode(leCodes[t.literal()])
+ continue
+ }
+ // Write the length
+ length := t.length()
+ lengthCode := lengthCode(length)
+ w.writeCode(leCodes[lengthCode+lengthCodesStart])
+ extraLengthBits := uint(lengthExtraBits[lengthCode])
+ if extraLengthBits > 0 {
+ extraLength := int32(length - lengthBase[lengthCode])
+ w.writeBits(extraLength, extraLengthBits)
+ }
+ // Write the offset
+ offset := t.offset()
+ offsetCode := offsetCode(offset)
+ w.writeCode(oeCodes[offsetCode])
+ extraOffsetBits := uint(offsetExtraBits[offsetCode])
+ if extraOffsetBits > 0 {
+ extraOffset := int32(offset - offsetBase[offsetCode])
+ w.writeBits(extraOffset, extraOffsetBits)
+ }
+ }
+}
+
+// huffOffset is a static offset encoder used for huffman only encoding.
+// It can be reused since we will not be encoding offset values.
+var huffOffset *huffmanEncoder
+
+func init() {
+ w := newHuffmanBitWriter(nil)
+ w.offsetFreq[0] = 1
+ huffOffset = newHuffmanEncoder(offsetCodeCount)
+ huffOffset.generate(w.offsetFreq, 15)
+}
+
+// writeBlockHuff encodes a block of bytes as either
+// Huffman encoded literals or uncompressed bytes if the
+// results only gains very little from compression.
+func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte) {
+ if w.err != nil {
+ return
+ }
+
+ // Clear histogram
+ for i := range w.literalFreq {
+ w.literalFreq[i] = 0
+ }
+
+ // Add everything as literals
+ histogram(input, w.literalFreq)
+
+ w.literalFreq[endBlockMarker] = 1
+
+ const numLiterals = endBlockMarker + 1
+ const numOffsets = 1
+
+ w.literalEncoding.generate(w.literalFreq, 15)
+
+ // Figure out smallest code.
+ // Always use dynamic Huffman or Store
+ var numCodegens int
+
+ // Generate codegen and codegenFrequencies, which indicates how to encode
+ // the literalEncoding and the offsetEncoding.
+ w.generateCodegen(numLiterals, numOffsets, w.literalEncoding, huffOffset)
+ w.codegenEncoding.generate(w.codegenFreq[:], 7)
+ size, numCodegens := w.dynamicSize(w.literalEncoding, huffOffset, 0)
+
+ // Store bytes, if we don't get a reasonable improvement.
+ if ssize, storable := w.storedSize(input); storable && ssize < (size+size>>4) {
+ w.writeStoredHeader(len(input), eof)
+ w.writeBytes(input)
+ return
+ }
+
+ // Huffman.
+ w.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof)
+ encoding := w.literalEncoding.codes[:257]
+ n := w.nbytes
+ for _, t := range input {
+ // Bitwriting inlined, ~30% speedup
+ c := encoding[t]
+ w.bits |= uint64(c.code) << w.nbits
+ w.nbits += uint(c.len)
+ if w.nbits < 48 {
+ continue
+ }
+ // Store 6 bytes
+ bits := w.bits
+ w.bits >>= 48
+ w.nbits -= 48
+ bytes := w.bytes[n : n+6]
+ bytes[0] = byte(bits)
+ bytes[1] = byte(bits >> 8)
+ bytes[2] = byte(bits >> 16)
+ bytes[3] = byte(bits >> 24)
+ bytes[4] = byte(bits >> 32)
+ bytes[5] = byte(bits >> 40)
+ n += 6
+ if n < bufferFlushSize {
+ continue
+ }
+ w.write(w.bytes[:n])
+ if w.err != nil {
+ return // Return early in the event of write failures
+ }
+ n = 0
+ }
+ w.nbytes = n
+ w.writeCode(encoding[endBlockMarker])
+}
diff --git a/vendor/github.com/klauspost/compress/flate/huffman_code.go b/vendor/github.com/klauspost/compress/flate/huffman_code.go
new file mode 100644
index 000000000..bdcbd823b
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/flate/huffman_code.go
@@ -0,0 +1,344 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package flate
+
+import (
+ "math"
+ "sort"
+)
+
+// hcode is a huffman code with a bit code and bit length.
+type hcode struct {
+ code, len uint16
+}
+
+type huffmanEncoder struct {
+ codes []hcode
+ freqcache []literalNode
+ bitCount [17]int32
+ lns byLiteral // stored to avoid repeated allocation in generate
+ lfs byFreq // stored to avoid repeated allocation in generate
+}
+
+type literalNode struct {
+ literal uint16
+ freq int32
+}
+
+// A levelInfo describes the state of the constructed tree for a given depth.
+type levelInfo struct {
+ // Our level. for better printing
+ level int32
+
+ // The frequency of the last node at this level
+ lastFreq int32
+
+ // The frequency of the next character to add to this level
+ nextCharFreq int32
+
+ // The frequency of the next pair (from level below) to add to this level.
+ // Only valid if the "needed" value of the next lower level is 0.
+ nextPairFreq int32
+
+ // The number of chains remaining to generate for this level before moving
+ // up to the next level
+ needed int32
+}
+
+// set sets the code and length of an hcode.
+func (h *hcode) set(code uint16, length uint16) {
+ h.len = length
+ h.code = code
+}
+
+func maxNode() literalNode { return literalNode{math.MaxUint16, math.MaxInt32} }
+
+func newHuffmanEncoder(size int) *huffmanEncoder {
+ return &huffmanEncoder{codes: make([]hcode, size)}
+}
+
+// Generates a HuffmanCode corresponding to the fixed literal table
+func generateFixedLiteralEncoding() *huffmanEncoder {
+ h := newHuffmanEncoder(maxNumLit)
+ codes := h.codes
+ var ch uint16
+ for ch = 0; ch < maxNumLit; ch++ {
+ var bits uint16
+ var size uint16
+ switch {
+ case ch < 144:
+ // size 8, 000110000 .. 10111111
+ bits = ch + 48
+ size = 8
+ break
+ case ch < 256:
+ // size 9, 110010000 .. 111111111
+ bits = ch + 400 - 144
+ size = 9
+ break
+ case ch < 280:
+ // size 7, 0000000 .. 0010111
+ bits = ch - 256
+ size = 7
+ break
+ default:
+ // size 8, 11000000 .. 11000111
+ bits = ch + 192 - 280
+ size = 8
+ }
+ codes[ch] = hcode{code: reverseBits(bits, byte(size)), len: size}
+ }
+ return h
+}
+
+func generateFixedOffsetEncoding() *huffmanEncoder {
+ h := newHuffmanEncoder(30)
+ codes := h.codes
+ for ch := range codes {
+ codes[ch] = hcode{code: reverseBits(uint16(ch), 5), len: 5}
+ }
+ return h
+}
+
+var fixedLiteralEncoding *huffmanEncoder = generateFixedLiteralEncoding()
+var fixedOffsetEncoding *huffmanEncoder = generateFixedOffsetEncoding()
+
+func (h *huffmanEncoder) bitLength(freq []int32) int {
+ var total int
+ for i, f := range freq {
+ if f != 0 {
+ total += int(f) * int(h.codes[i].len)
+ }
+ }
+ return total
+}
+
+const maxBitsLimit = 16
+
+// Return the number of literals assigned to each bit size in the Huffman encoding
+//
+// This method is only called when list.length >= 3
+// The cases of 0, 1, and 2 literals are handled by special case code.
+//
+// list An array of the literals with non-zero frequencies
+// and their associated frequencies. The array is in order of increasing
+// frequency, and has as its last element a special element with frequency
+// MaxInt32
+// maxBits The maximum number of bits that should be used to encode any literal.
+// Must be less than 16.
+// return An integer array in which array[i] indicates the number of literals
+// that should be encoded in i bits.
+func (h *huffmanEncoder) bitCounts(list []literalNode, maxBits int32) []int32 {
+ if maxBits >= maxBitsLimit {
+ panic("flate: maxBits too large")
+ }
+ n := int32(len(list))
+ list = list[0 : n+1]
+ list[n] = maxNode()
+
+ // The tree can't have greater depth than n - 1, no matter what. This
+ // saves a little bit of work in some small cases
+ if maxBits > n-1 {
+ maxBits = n - 1
+ }
+
+ // Create information about each of the levels.
+ // A bogus "Level 0" whose sole purpose is so that
+ // level1.prev.needed==0. This makes level1.nextPairFreq
+ // be a legitimate value that never gets chosen.
+ var levels [maxBitsLimit]levelInfo
+ // leafCounts[i] counts the number of literals at the left
+ // of ancestors of the rightmost node at level i.
+ // leafCounts[i][j] is the number of literals at the left
+ // of the level j ancestor.
+ var leafCounts [maxBitsLimit][maxBitsLimit]int32
+
+ for level := int32(1); level <= maxBits; level++ {
+ // For every level, the first two items are the first two characters.
+ // We initialize the levels as if we had already figured this out.
+ levels[level] = levelInfo{
+ level: level,
+ lastFreq: list[1].freq,
+ nextCharFreq: list[2].freq,
+ nextPairFreq: list[0].freq + list[1].freq,
+ }
+ leafCounts[level][level] = 2
+ if level == 1 {
+ levels[level].nextPairFreq = math.MaxInt32
+ }
+ }
+
+ // We need a total of 2*n - 2 items at top level and have already generated 2.
+ levels[maxBits].needed = 2*n - 4
+
+ level := maxBits
+ for {
+ l := &levels[level]
+ if l.nextPairFreq == math.MaxInt32 && l.nextCharFreq == math.MaxInt32 {
+ // We've run out of both leafs and pairs.
+ // End all calculations for this level.
+ // To make sure we never come back to this level or any lower level,
+ // set nextPairFreq impossibly large.
+ l.needed = 0
+ levels[level+1].nextPairFreq = math.MaxInt32
+ level++
+ continue
+ }
+
+ prevFreq := l.lastFreq
+ if l.nextCharFreq < l.nextPairFreq {
+ // The next item on this row is a leaf node.
+ n := leafCounts[level][level] + 1
+ l.lastFreq = l.nextCharFreq
+ // Lower leafCounts are the same of the previous node.
+ leafCounts[level][level] = n
+ l.nextCharFreq = list[n].freq
+ } else {
+ // The next item on this row is a pair from the previous row.
+ // nextPairFreq isn't valid until we generate two
+ // more values in the level below
+ l.lastFreq = l.nextPairFreq
+ // Take leaf counts from the lower level, except counts[level] remains the same.
+ copy(leafCounts[level][:level], leafCounts[level-1][:level])
+ levels[l.level-1].needed = 2
+ }
+
+ if l.needed--; l.needed == 0 {
+ // We've done everything we need to do for this level.
+ // Continue calculating one level up. Fill in nextPairFreq
+ // of that level with the sum of the two nodes we've just calculated on
+ // this level.
+ if l.level == maxBits {
+ // All done!
+ break
+ }
+ levels[l.level+1].nextPairFreq = prevFreq + l.lastFreq
+ level++
+ } else {
+ // If we stole from below, move down temporarily to replenish it.
+ for levels[level-1].needed > 0 {
+ level--
+ }
+ }
+ }
+
+ // Somethings is wrong if at the end, the top level is null or hasn't used
+ // all of the leaves.
+ if leafCounts[maxBits][maxBits] != n {
+ panic("leafCounts[maxBits][maxBits] != n")
+ }
+
+ bitCount := h.bitCount[:maxBits+1]
+ bits := 1
+ counts := &leafCounts[maxBits]
+ for level := maxBits; level > 0; level-- {
+ // chain.leafCount gives the number of literals requiring at least "bits"
+ // bits to encode.
+ bitCount[bits] = counts[level] - counts[level-1]
+ bits++
+ }
+ return bitCount
+}
+
+// Look at the leaves and assign them a bit count and an encoding as specified
+// in RFC 1951 3.2.2
+func (h *huffmanEncoder) assignEncodingAndSize(bitCount []int32, list []literalNode) {
+ code := uint16(0)
+ for n, bits := range bitCount {
+ code <<= 1
+ if n == 0 || bits == 0 {
+ continue
+ }
+ // The literals list[len(list)-bits] .. list[len(list)-bits]
+ // are encoded using "bits" bits, and get the values
+ // code, code + 1, .... The code values are
+ // assigned in literal order (not frequency order).
+ chunk := list[len(list)-int(bits):]
+
+ h.lns.sort(chunk)
+ for _, node := range chunk {
+ h.codes[node.literal] = hcode{code: reverseBits(code, uint8(n)), len: uint16(n)}
+ code++
+ }
+ list = list[0 : len(list)-int(bits)]
+ }
+}
+
+// Update this Huffman Code object to be the minimum code for the specified frequency count.
+//
+// freq An array of frequencies, in which frequency[i] gives the frequency of literal i.
+// maxBits The maximum number of bits to use for any literal.
+func (h *huffmanEncoder) generate(freq []int32, maxBits int32) {
+ if h.freqcache == nil {
+ // Allocate a reusable buffer with the longest possible frequency table.
+ // Possible lengths are codegenCodeCount, offsetCodeCount and maxNumLit.
+ // The largest of these is maxNumLit, so we allocate for that case.
+ h.freqcache = make([]literalNode, maxNumLit+1)
+ }
+ list := h.freqcache[:len(freq)+1]
+ // Number of non-zero literals
+ count := 0
+ // Set list to be the set of all non-zero literals and their frequencies
+ for i, f := range freq {
+ if f != 0 {
+ list[count] = literalNode{uint16(i), f}
+ count++
+ } else {
+ list[count] = literalNode{}
+ h.codes[i].len = 0
+ }
+ }
+ list[len(freq)] = literalNode{}
+
+ list = list[:count]
+ if count <= 2 {
+ // Handle the small cases here, because they are awkward for the general case code. With
+ // two or fewer literals, everything has bit length 1.
+ for i, node := range list {
+ // "list" is in order of increasing literal value.
+ h.codes[node.literal].set(uint16(i), 1)
+ }
+ return
+ }
+ h.lfs.sort(list)
+
+ // Get the number of literals for each bit count
+ bitCount := h.bitCounts(list, maxBits)
+ // And do the assignment
+ h.assignEncodingAndSize(bitCount, list)
+}
+
+type byLiteral []literalNode
+
+func (s *byLiteral) sort(a []literalNode) {
+ *s = byLiteral(a)
+ sort.Sort(s)
+}
+
+func (s byLiteral) Len() int { return len(s) }
+
+func (s byLiteral) Less(i, j int) bool {
+ return s[i].literal < s[j].literal
+}
+
+func (s byLiteral) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
+
+type byFreq []literalNode
+
+func (s *byFreq) sort(a []literalNode) {
+ *s = byFreq(a)
+ sort.Sort(s)
+}
+
+func (s byFreq) Len() int { return len(s) }
+
+func (s byFreq) Less(i, j int) bool {
+ if s[i].freq == s[j].freq {
+ return s[i].literal < s[j].literal
+ }
+ return s[i].freq < s[j].freq
+}
+
+func (s byFreq) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
diff --git a/vendor/github.com/klauspost/compress/flate/inflate.go b/vendor/github.com/klauspost/compress/flate/inflate.go
new file mode 100644
index 000000000..800d0ce9e
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/flate/inflate.go
@@ -0,0 +1,880 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package flate implements the DEFLATE compressed data format, described in
+// RFC 1951. The gzip and zlib packages implement access to DEFLATE-based file
+// formats.
+package flate
+
+import (
+ "bufio"
+ "io"
+ "math/bits"
+ "strconv"
+ "sync"
+)
+
+const (
+ maxCodeLen = 16 // max length of Huffman code
+ maxCodeLenMask = 15 // mask for max length of Huffman code
+ // The next three numbers come from the RFC section 3.2.7, with the
+ // additional proviso in section 3.2.5 which implies that distance codes
+ // 30 and 31 should never occur in compressed data.
+ maxNumLit = 286
+ maxNumDist = 30
+ numCodes = 19 // number of codes in Huffman meta-code
+)
+
+// Initialize the fixedHuffmanDecoder only once upon first use.
+var fixedOnce sync.Once
+var fixedHuffmanDecoder huffmanDecoder
+
+// A CorruptInputError reports the presence of corrupt input at a given offset.
+type CorruptInputError int64
+
+func (e CorruptInputError) Error() string {
+ return "flate: corrupt input before offset " + strconv.FormatInt(int64(e), 10)
+}
+
+// An InternalError reports an error in the flate code itself.
+type InternalError string
+
+func (e InternalError) Error() string { return "flate: internal error: " + string(e) }
+
+// A ReadError reports an error encountered while reading input.
+//
+// Deprecated: No longer returned.
+type ReadError struct {
+ Offset int64 // byte offset where error occurred
+ Err error // error returned by underlying Read
+}
+
+func (e *ReadError) Error() string {
+ return "flate: read error at offset " + strconv.FormatInt(e.Offset, 10) + ": " + e.Err.Error()
+}
+
+// A WriteError reports an error encountered while writing output.
+//
+// Deprecated: No longer returned.
+type WriteError struct {
+ Offset int64 // byte offset where error occurred
+ Err error // error returned by underlying Write
+}
+
+func (e *WriteError) Error() string {
+ return "flate: write error at offset " + strconv.FormatInt(e.Offset, 10) + ": " + e.Err.Error()
+}
+
+// Resetter resets a ReadCloser returned by NewReader or NewReaderDict to
+// to switch to a new underlying Reader. This permits reusing a ReadCloser
+// instead of allocating a new one.
+type Resetter interface {
+ // Reset discards any buffered data and resets the Resetter as if it was
+ // newly initialized with the given reader.
+ Reset(r io.Reader, dict []byte) error
+}
+
+// The data structure for decoding Huffman tables is based on that of
+// zlib. There is a lookup table of a fixed bit width (huffmanChunkBits),
+// For codes smaller than the table width, there are multiple entries
+// (each combination of trailing bits has the same value). For codes
+// larger than the table width, the table contains a link to an overflow
+// table. The width of each entry in the link table is the maximum code
+// size minus the chunk width.
+//
+// Note that you can do a lookup in the table even without all bits
+// filled. Since the extra bits are zero, and the DEFLATE Huffman codes
+// have the property that shorter codes come before longer ones, the
+// bit length estimate in the result is a lower bound on the actual
+// number of bits.
+//
+// See the following:
+// http://www.gzip.org/algorithm.txt
+
+// chunk & 15 is number of bits
+// chunk >> 4 is value, including table link
+
+const (
+ huffmanChunkBits = 9
+ huffmanNumChunks = 1 << huffmanChunkBits
+ huffmanCountMask = 15
+ huffmanValueShift = 4
+)
+
+type huffmanDecoder struct {
+ min int // the minimum code length
+ chunks *[huffmanNumChunks]uint32 // chunks as described above
+ links [][]uint32 // overflow links
+ linkMask uint32 // mask the width of the link table
+}
+
+// Initialize Huffman decoding tables from array of code lengths.
+// Following this function, h is guaranteed to be initialized into a complete
+// tree (i.e., neither over-subscribed nor under-subscribed). The exception is a
+// degenerate case where the tree has only a single symbol with length 1. Empty
+// trees are permitted.
+func (h *huffmanDecoder) init(lengths []int) bool {
+ // Sanity enables additional runtime tests during Huffman
+ // table construction. It's intended to be used during
+ // development to supplement the currently ad-hoc unit tests.
+ const sanity = false
+
+ if h.chunks == nil {
+ h.chunks = &[huffmanNumChunks]uint32{}
+ }
+ if h.min != 0 {
+ *h = huffmanDecoder{chunks: h.chunks, links: h.links}
+ }
+
+ // Count number of codes of each length,
+ // compute min and max length.
+ var count [maxCodeLen]int
+ var min, max int
+ for _, n := range lengths {
+ if n == 0 {
+ continue
+ }
+ if min == 0 || n < min {
+ min = n
+ }
+ if n > max {
+ max = n
+ }
+ count[n&maxCodeLenMask]++
+ }
+
+ // Empty tree. The decompressor.huffSym function will fail later if the tree
+ // is used. Technically, an empty tree is only valid for the HDIST tree and
+ // not the HCLEN and HLIT tree. However, a stream with an empty HCLEN tree
+ // is guaranteed to fail since it will attempt to use the tree to decode the
+ // codes for the HLIT and HDIST trees. Similarly, an empty HLIT tree is
+ // guaranteed to fail later since the compressed data section must be
+ // composed of at least one symbol (the end-of-block marker).
+ if max == 0 {
+ return true
+ }
+
+ code := 0
+ var nextcode [maxCodeLen]int
+ for i := min; i <= max; i++ {
+ code <<= 1
+ nextcode[i&maxCodeLenMask] = code
+ code += count[i&maxCodeLenMask]
+ }
+
+ // Check that the coding is complete (i.e., that we've
+ // assigned all 2-to-the-max possible bit sequences).
+ // Exception: To be compatible with zlib, we also need to
+ // accept degenerate single-code codings. See also
+ // TestDegenerateHuffmanCoding.
+ if code != 1<<uint(max) && !(code == 1 && max == 1) {
+ return false
+ }
+
+ h.min = min
+ chunks := h.chunks[:]
+ for i := range chunks {
+ chunks[i] = 0
+ }
+
+ if max > huffmanChunkBits {
+ numLinks := 1 << (uint(max) - huffmanChunkBits)
+ h.linkMask = uint32(numLinks - 1)
+
+ // create link tables
+ link := nextcode[huffmanChunkBits+1] >> 1
+ if cap(h.links) < huffmanNumChunks-link {
+ h.links = make([][]uint32, huffmanNumChunks-link)
+ } else {
+ h.links = h.links[:huffmanNumChunks-link]
+ }
+ for j := uint(link); j < huffmanNumChunks; j++ {
+ reverse := int(bits.Reverse16(uint16(j)))
+ reverse >>= uint(16 - huffmanChunkBits)
+ off := j - uint(link)
+ if sanity && h.chunks[reverse] != 0 {
+ panic("impossible: overwriting existing chunk")
+ }
+ h.chunks[reverse] = uint32(off<<huffmanValueShift | (huffmanChunkBits + 1))
+ if cap(h.links[off]) < numLinks {
+ h.links[off] = make([]uint32, numLinks)
+ } else {
+ links := h.links[off][:0]
+ h.links[off] = links[:numLinks]
+ }
+ }
+ } else {
+ h.links = h.links[:0]
+ }
+
+ for i, n := range lengths {
+ if n == 0 {
+ continue
+ }
+ code := nextcode[n]
+ nextcode[n]++
+ chunk := uint32(i<<huffmanValueShift | n)
+ reverse := int(bits.Reverse16(uint16(code)))
+ reverse >>= uint(16 - n)
+ if n <= huffmanChunkBits {
+ for off := reverse; off < len(h.chunks); off += 1 << uint(n) {
+ // We should never need to overwrite
+ // an existing chunk. Also, 0 is
+ // never a valid chunk, because the
+ // lower 4 "count" bits should be
+ // between 1 and 15.
+ if sanity && h.chunks[off] != 0 {
+ panic("impossible: overwriting existing chunk")
+ }
+ h.chunks[off] = chunk
+ }
+ } else {
+ j := reverse & (huffmanNumChunks - 1)
+ if sanity && h.chunks[j]&huffmanCountMask != huffmanChunkBits+1 {
+ // Longer codes should have been
+ // associated with a link table above.
+ panic("impossible: not an indirect chunk")
+ }
+ value := h.chunks[j] >> huffmanValueShift
+ linktab := h.links[value]
+ reverse >>= huffmanChunkBits
+ for off := reverse; off < len(linktab); off += 1 << uint(n-huffmanChunkBits) {
+ if sanity && linktab[off] != 0 {
+ panic("impossible: overwriting existing chunk")
+ }
+ linktab[off] = chunk
+ }
+ }
+ }
+
+ if sanity {
+ // Above we've sanity checked that we never overwrote
+ // an existing entry. Here we additionally check that
+ // we filled the tables completely.
+ for i, chunk := range h.chunks {
+ if chunk == 0 {
+ // As an exception, in the degenerate
+ // single-code case, we allow odd
+ // chunks to be missing.
+ if code == 1 && i%2 == 1 {
+ continue
+ }
+ panic("impossible: missing chunk")
+ }
+ }
+ for _, linktab := range h.links {
+ for _, chunk := range linktab {
+ if chunk == 0 {
+ panic("impossible: missing chunk")
+ }
+ }
+ }
+ }
+
+ return true
+}
+
+// The actual read interface needed by NewReader.
+// If the passed in io.Reader does not also have ReadByte,
+// the NewReader will introduce its own buffering.
+type Reader interface {
+ io.Reader
+ io.ByteReader
+}
+
+// Decompress state.
+type decompressor struct {
+ // Input source.
+ r Reader
+ roffset int64
+
+ // Input bits, in top of b.
+ b uint32
+ nb uint
+
+ // Huffman decoders for literal/length, distance.
+ h1, h2 huffmanDecoder
+
+ // Length arrays used to define Huffman codes.
+ bits *[maxNumLit + maxNumDist]int
+ codebits *[numCodes]int
+
+ // Output history, buffer.
+ dict dictDecoder
+
+ // Temporary buffer (avoids repeated allocation).
+ buf [4]byte
+
+ // Next step in the decompression,
+ // and decompression state.
+ step func(*decompressor)
+ stepState int
+ final bool
+ err error
+ toRead []byte
+ hl, hd *huffmanDecoder
+ copyLen int
+ copyDist int
+}
+
+func (f *decompressor) nextBlock() {
+ for f.nb < 1+2 {
+ if f.err = f.moreBits(); f.err != nil {
+ return
+ }
+ }
+ f.final = f.b&1 == 1
+ f.b >>= 1
+ typ := f.b & 3
+ f.b >>= 2
+ f.nb -= 1 + 2
+ switch typ {
+ case 0:
+ f.dataBlock()
+ case 1:
+ // compressed, fixed Huffman tables
+ f.hl = &fixedHuffmanDecoder
+ f.hd = nil
+ f.huffmanBlock()
+ case 2:
+ // compressed, dynamic Huffman tables
+ if f.err = f.readHuffman(); f.err != nil {
+ break
+ }
+ f.hl = &f.h1
+ f.hd = &f.h2
+ f.huffmanBlock()
+ default:
+ // 3 is reserved.
+ f.err = CorruptInputError(f.roffset)
+ }
+}
+
+func (f *decompressor) Read(b []byte) (int, error) {
+ for {
+ if len(f.toRead) > 0 {
+ n := copy(b, f.toRead)
+ f.toRead = f.toRead[n:]
+ if len(f.toRead) == 0 {
+ return n, f.err
+ }
+ return n, nil
+ }
+ if f.err != nil {
+ return 0, f.err
+ }
+ f.step(f)
+ if f.err != nil && len(f.toRead) == 0 {
+ f.toRead = f.dict.readFlush() // Flush what's left in case of error
+ }
+ }
+}
+
+// Support the io.WriteTo interface for io.Copy and friends.
+func (f *decompressor) WriteTo(w io.Writer) (int64, error) {
+ total := int64(0)
+ flushed := false
+ for {
+ if len(f.toRead) > 0 {
+ n, err := w.Write(f.toRead)
+ total += int64(n)
+ if err != nil {
+ f.err = err
+ return total, err
+ }
+ if n != len(f.toRead) {
+ return total, io.ErrShortWrite
+ }
+ f.toRead = f.toRead[:0]
+ }
+ if f.err != nil && flushed {
+ if f.err == io.EOF {
+ return total, nil
+ }
+ return total, f.err
+ }
+ if f.err == nil {
+ f.step(f)
+ }
+ if len(f.toRead) == 0 && f.err != nil && !flushed {
+ f.toRead = f.dict.readFlush() // Flush what's left in case of error
+ flushed = true
+ }
+ }
+}
+
+func (f *decompressor) Close() error {
+ if f.err == io.EOF {
+ return nil
+ }
+ return f.err
+}
+
+// RFC 1951 section 3.2.7.
+// Compression with dynamic Huffman codes
+
+var codeOrder = [...]int{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}
+
+func (f *decompressor) readHuffman() error {
+ // HLIT[5], HDIST[5], HCLEN[4].
+ for f.nb < 5+5+4 {
+ if err := f.moreBits(); err != nil {
+ return err
+ }
+ }
+ nlit := int(f.b&0x1F) + 257
+ if nlit > maxNumLit {
+ return CorruptInputError(f.roffset)
+ }
+ f.b >>= 5
+ ndist := int(f.b&0x1F) + 1
+ if ndist > maxNumDist {
+ return CorruptInputError(f.roffset)
+ }
+ f.b >>= 5
+ nclen := int(f.b&0xF) + 4
+ // numCodes is 19, so nclen is always valid.
+ f.b >>= 4
+ f.nb -= 5 + 5 + 4
+
+ // (HCLEN+4)*3 bits: code lengths in the magic codeOrder order.
+ for i := 0; i < nclen; i++ {
+ for f.nb < 3 {
+ if err := f.moreBits(); err != nil {
+ return err
+ }
+ }
+ f.codebits[codeOrder[i]] = int(f.b & 0x7)
+ f.b >>= 3
+ f.nb -= 3
+ }
+ for i := nclen; i < len(codeOrder); i++ {
+ f.codebits[codeOrder[i]] = 0
+ }
+ if !f.h1.init(f.codebits[0:]) {
+ return CorruptInputError(f.roffset)
+ }
+
+ // HLIT + 257 code lengths, HDIST + 1 code lengths,
+ // using the code length Huffman code.
+ for i, n := 0, nlit+ndist; i < n; {
+ x, err := f.huffSym(&f.h1)
+ if err != nil {
+ return err
+ }
+ if x < 16 {
+ // Actual length.
+ f.bits[i] = x
+ i++
+ continue
+ }
+ // Repeat previous length or zero.
+ var rep int
+ var nb uint
+ var b int
+ switch x {
+ default:
+ return InternalError("unexpected length code")
+ case 16:
+ rep = 3
+ nb = 2
+ if i == 0 {
+ return CorruptInputError(f.roffset)
+ }
+ b = f.bits[i-1]
+ case 17:
+ rep = 3
+ nb = 3
+ b = 0
+ case 18:
+ rep = 11
+ nb = 7
+ b = 0
+ }
+ for f.nb < nb {
+ if err := f.moreBits(); err != nil {
+ return err
+ }
+ }
+ rep += int(f.b & uint32(1<<nb-1))
+ f.b >>= nb
+ f.nb -= nb
+ if i+rep > n {
+ return CorruptInputError(f.roffset)
+ }
+ for j := 0; j < rep; j++ {
+ f.bits[i] = b
+ i++
+ }
+ }
+
+ if !f.h1.init(f.bits[0:nlit]) || !f.h2.init(f.bits[nlit:nlit+ndist]) {
+ return CorruptInputError(f.roffset)
+ }
+
+ // As an optimization, we can initialize the min bits to read at a time
+ // for the HLIT tree to the length of the EOB marker since we know that
+ // every block must terminate with one. This preserves the property that
+ // we never read any extra bytes after the end of the DEFLATE stream.
+ if f.h1.min < f.bits[endBlockMarker] {
+ f.h1.min = f.bits[endBlockMarker]
+ }
+
+ return nil
+}
+
+// Decode a single Huffman block from f.
+// hl and hd are the Huffman states for the lit/length values
+// and the distance values, respectively. If hd == nil, using the
+// fixed distance encoding associated with fixed Huffman blocks.
+func (f *decompressor) huffmanBlock() {
+ const (
+ stateInit = iota // Zero value must be stateInit
+ stateDict
+ )
+
+ switch f.stepState {
+ case stateInit:
+ goto readLiteral
+ case stateDict:
+ goto copyHistory
+ }
+
+readLiteral:
+ // Read literal and/or (length, distance) according to RFC section 3.2.3.
+ {
+ v, err := f.huffSym(f.hl)
+ if err != nil {
+ f.err = err
+ return
+ }
+ var n uint // number of bits extra
+ var length int
+ switch {
+ case v < 256:
+ f.dict.writeByte(byte(v))
+ if f.dict.availWrite() == 0 {
+ f.toRead = f.dict.readFlush()
+ f.step = (*decompressor).huffmanBlock
+ f.stepState = stateInit
+ return
+ }
+ goto readLiteral
+ case v == 256:
+ f.finishBlock()
+ return
+ // otherwise, reference to older data
+ case v < 265:
+ length = v - (257 - 3)
+ n = 0
+ case v < 269:
+ length = v*2 - (265*2 - 11)
+ n = 1
+ case v < 273:
+ length = v*4 - (269*4 - 19)
+ n = 2
+ case v < 277:
+ length = v*8 - (273*8 - 35)
+ n = 3
+ case v < 281:
+ length = v*16 - (277*16 - 67)
+ n = 4
+ case v < 285:
+ length = v*32 - (281*32 - 131)
+ n = 5
+ case v < maxNumLit:
+ length = 258
+ n = 0
+ default:
+ f.err = CorruptInputError(f.roffset)
+ return
+ }
+ if n > 0 {
+ for f.nb < n {
+ if err = f.moreBits(); err != nil {
+ f.err = err
+ return
+ }
+ }
+ length += int(f.b & uint32(1<<n-1))
+ f.b >>= n
+ f.nb -= n
+ }
+
+ var dist int
+ if f.hd == nil {
+ for f.nb < 5 {
+ if err = f.moreBits(); err != nil {
+ f.err = err
+ return
+ }
+ }
+ dist = int(bits.Reverse8(uint8(f.b & 0x1F << 3)))
+ f.b >>= 5
+ f.nb -= 5
+ } else {
+ if dist, err = f.huffSym(f.hd); err != nil {
+ f.err = err
+ return
+ }
+ }
+
+ switch {
+ case dist < 4:
+ dist++
+ case dist < maxNumDist:
+ nb := uint(dist-2) >> 1
+ // have 1 bit in bottom of dist, need nb more.
+ extra := (dist & 1) << nb
+ for f.nb < nb {
+ if err = f.moreBits(); err != nil {
+ f.err = err
+ return
+ }
+ }
+ extra |= int(f.b & uint32(1<<nb-1))
+ f.b >>= nb
+ f.nb -= nb
+ dist = 1<<(nb+1) + 1 + extra
+ default:
+ f.err = CorruptInputError(f.roffset)
+ return
+ }
+
+ // No check on length; encoding can be prescient.
+ if dist > f.dict.histSize() {
+ f.err = CorruptInputError(f.roffset)
+ return
+ }
+
+ f.copyLen, f.copyDist = length, dist
+ goto copyHistory
+ }
+
+copyHistory:
+ // Perform a backwards copy according to RFC section 3.2.3.
+ {
+ cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen)
+ if cnt == 0 {
+ cnt = f.dict.writeCopy(f.copyDist, f.copyLen)
+ }
+ f.copyLen -= cnt
+
+ if f.dict.availWrite() == 0 || f.copyLen > 0 {
+ f.toRead = f.dict.readFlush()
+ f.step = (*decompressor).huffmanBlock // We need to continue this work
+ f.stepState = stateDict
+ return
+ }
+ goto readLiteral
+ }
+}
+
+// Copy a single uncompressed data block from input to output.
+func (f *decompressor) dataBlock() {
+ // Uncompressed.
+ // Discard current half-byte.
+ f.nb = 0
+ f.b = 0
+
+ // Length then ones-complement of length.
+ nr, err := io.ReadFull(f.r, f.buf[0:4])
+ f.roffset += int64(nr)
+ if err != nil {
+ f.err = noEOF(err)
+ return
+ }
+ n := int(f.buf[0]) | int(f.buf[1])<<8
+ nn := int(f.buf[2]) | int(f.buf[3])<<8
+ if uint16(nn) != uint16(^n) {
+ f.err = CorruptInputError(f.roffset)
+ return
+ }
+
+ if n == 0 {
+ f.toRead = f.dict.readFlush()
+ f.finishBlock()
+ return
+ }
+
+ f.copyLen = n
+ f.copyData()
+}
+
+// copyData copies f.copyLen bytes from the underlying reader into f.hist.
+// It pauses for reads when f.hist is full.
+func (f *decompressor) copyData() {
+ buf := f.dict.writeSlice()
+ if len(buf) > f.copyLen {
+ buf = buf[:f.copyLen]
+ }
+
+ cnt, err := io.ReadFull(f.r, buf)
+ f.roffset += int64(cnt)
+ f.copyLen -= cnt
+ f.dict.writeMark(cnt)
+ if err != nil {
+ f.err = noEOF(err)
+ return
+ }
+
+ if f.dict.availWrite() == 0 || f.copyLen > 0 {
+ f.toRead = f.dict.readFlush()
+ f.step = (*decompressor).copyData
+ return
+ }
+ f.finishBlock()
+}
+
+func (f *decompressor) finishBlock() {
+ if f.final {
+ if f.dict.availRead() > 0 {
+ f.toRead = f.dict.readFlush()
+ }
+ f.err = io.EOF
+ }
+ f.step = (*decompressor).nextBlock
+}
+
+// noEOF returns err, unless err == io.EOF, in which case it returns io.ErrUnexpectedEOF.
+func noEOF(e error) error {
+ if e == io.EOF {
+ return io.ErrUnexpectedEOF
+ }
+ return e
+}
+
+func (f *decompressor) moreBits() error {
+ c, err := f.r.ReadByte()
+ if err != nil {
+ return noEOF(err)
+ }
+ f.roffset++
+ f.b |= uint32(c) << f.nb
+ f.nb += 8
+ return nil
+}
+
+// Read the next Huffman-encoded symbol from f according to h.
+func (f *decompressor) huffSym(h *huffmanDecoder) (int, error) {
+ // Since a huffmanDecoder can be empty or be composed of a degenerate tree
+ // with single element, huffSym must error on these two edge cases. In both
+ // cases, the chunks slice will be 0 for the invalid sequence, leading it
+ // satisfy the n == 0 check below.
+ n := uint(h.min)
+ // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,
+ // but is smart enough to keep local variables in registers, so use nb and b,
+ // inline call to moreBits and reassign b,nb back to f on return.
+ nb, b := f.nb, f.b
+ for {
+ for nb < n {
+ c, err := f.r.ReadByte()
+ if err != nil {
+ f.b = b
+ f.nb = nb
+ return 0, noEOF(err)
+ }
+ f.roffset++
+ b |= uint32(c) << (nb & 31)
+ nb += 8
+ }
+ chunk := h.chunks[b&(huffmanNumChunks-1)]
+ n = uint(chunk & huffmanCountMask)
+ if n > huffmanChunkBits {
+ chunk = h.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&h.linkMask]
+ n = uint(chunk & huffmanCountMask)
+ }
+ if n <= nb {
+ if n == 0 {
+ f.b = b
+ f.nb = nb
+ f.err = CorruptInputError(f.roffset)
+ return 0, f.err
+ }
+ f.b = b >> (n & 31)
+ f.nb = nb - n
+ return int(chunk >> huffmanValueShift), nil
+ }
+ }
+}
+
+func makeReader(r io.Reader) Reader {
+ if rr, ok := r.(Reader); ok {
+ return rr
+ }
+ return bufio.NewReader(r)
+}
+
+func fixedHuffmanDecoderInit() {
+ fixedOnce.Do(func() {
+ // These come from the RFC section 3.2.6.
+ var bits [288]int
+ for i := 0; i < 144; i++ {
+ bits[i] = 8
+ }
+ for i := 144; i < 256; i++ {
+ bits[i] = 9
+ }
+ for i := 256; i < 280; i++ {
+ bits[i] = 7
+ }
+ for i := 280; i < 288; i++ {
+ bits[i] = 8
+ }
+ fixedHuffmanDecoder.init(bits[:])
+ })
+}
+
+func (f *decompressor) Reset(r io.Reader, dict []byte) error {
+ *f = decompressor{
+ r: makeReader(r),
+ bits: f.bits,
+ codebits: f.codebits,
+ h1: f.h1,
+ h2: f.h2,
+ dict: f.dict,
+ step: (*decompressor).nextBlock,
+ }
+ f.dict.init(maxMatchOffset, dict)
+ return nil
+}
+
+// NewReader returns a new ReadCloser that can be used
+// to read the uncompressed version of r.
+// If r does not also implement io.ByteReader,
+// the decompressor may read more data than necessary from r.
+// It is the caller's responsibility to call Close on the ReadCloser
+// when finished reading.
+//
+// The ReadCloser returned by NewReader also implements Resetter.
+func NewReader(r io.Reader) io.ReadCloser {
+ fixedHuffmanDecoderInit()
+
+ var f decompressor
+ f.r = makeReader(r)
+ f.bits = new([maxNumLit + maxNumDist]int)
+ f.codebits = new([numCodes]int)
+ f.step = (*decompressor).nextBlock
+ f.dict.init(maxMatchOffset, nil)
+ return &f
+}
+
+// NewReaderDict is like NewReader but initializes the reader
+// with a preset dictionary. The returned Reader behaves as if
+// the uncompressed data stream started with the given dictionary,
+// which has already been read. NewReaderDict is typically used
+// to read data compressed by NewWriterDict.
+//
+// The ReadCloser returned by NewReader also implements Resetter.
+func NewReaderDict(r io.Reader, dict []byte) io.ReadCloser {
+ fixedHuffmanDecoderInit()
+
+ var f decompressor
+ f.r = makeReader(r)
+ f.bits = new([maxNumLit + maxNumDist]int)
+ f.codebits = new([numCodes]int)
+ f.step = (*decompressor).nextBlock
+ f.dict.init(maxMatchOffset, dict)
+ return &f
+}
diff --git a/vendor/github.com/klauspost/compress/flate/reverse_bits.go b/vendor/github.com/klauspost/compress/flate/reverse_bits.go
new file mode 100644
index 000000000..c1a02720d
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/flate/reverse_bits.go
@@ -0,0 +1,48 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package flate
+
+var reverseByte = [256]byte{
+ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
+ 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
+ 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
+ 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
+ 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
+ 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
+ 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
+ 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
+ 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
+ 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
+ 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
+ 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
+ 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
+ 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
+ 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
+ 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
+ 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
+ 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
+ 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
+ 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
+ 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
+ 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
+ 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
+ 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
+ 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
+ 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
+ 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
+ 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
+ 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
+ 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
+ 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
+ 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
+}
+
+func reverseUint16(v uint16) uint16 {
+ return uint16(reverseByte[v>>8]) | uint16(reverseByte[v&0xFF])<<8
+}
+
+func reverseBits(number uint16, bitLength byte) uint16 {
+ return reverseUint16(number << uint8(16-bitLength))
+}
diff --git a/vendor/github.com/klauspost/compress/flate/snappy.go b/vendor/github.com/klauspost/compress/flate/snappy.go
new file mode 100644
index 000000000..d853320a7
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/flate/snappy.go
@@ -0,0 +1,900 @@
+// Copyright 2011 The Snappy-Go Authors. All rights reserved.
+// Modified for deflate by Klaus Post (c) 2015.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package flate
+
+// emitLiteral writes a literal chunk and returns the number of bytes written.
+func emitLiteral(dst *tokens, lit []byte) {
+ ol := int(dst.n)
+ for i, v := range lit {
+ dst.tokens[(i+ol)&maxStoreBlockSize] = token(v)
+ }
+ dst.n += uint16(len(lit))
+}
+
+// emitCopy writes a copy chunk and returns the number of bytes written.
+func emitCopy(dst *tokens, offset, length int) {
+ dst.tokens[dst.n] = matchToken(uint32(length-3), uint32(offset-minOffsetSize))
+ dst.n++
+}
+
+type snappyEnc interface {
+ Encode(dst *tokens, src []byte)
+ Reset()
+}
+
+func newSnappy(level int) snappyEnc {
+ switch level {
+ case 1:
+ return &snappyL1{}
+ case 2:
+ return &snappyL2{snappyGen: snappyGen{cur: maxStoreBlockSize, prev: make([]byte, 0, maxStoreBlockSize)}}
+ case 3:
+ return &snappyL3{snappyGen: snappyGen{cur: maxStoreBlockSize, prev: make([]byte, 0, maxStoreBlockSize)}}
+ case 4:
+ return &snappyL4{snappyL3{snappyGen: snappyGen{cur: maxStoreBlockSize, prev: make([]byte, 0, maxStoreBlockSize)}}}
+ default:
+ panic("invalid level specified")
+ }
+}
+
+const (
+ tableBits = 14 // Bits used in the table
+ tableSize = 1 << tableBits // Size of the table
+ tableMask = tableSize - 1 // Mask for table indices. Redundant, but can eliminate bounds checks.
+ tableShift = 32 - tableBits // Right-shift to get the tableBits most significant bits of a uint32.
+ baseMatchOffset = 1 // The smallest match offset
+ baseMatchLength = 3 // The smallest match length per the RFC section 3.2.5
+ maxMatchOffset = 1 << 15 // The largest match offset
+)
+
+func load32(b []byte, i int) uint32 {
+ b = b[i : i+4 : len(b)] // Help the compiler eliminate bounds checks on the next line.
+ return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+}
+
+func load64(b []byte, i int) uint64 {
+ b = b[i : i+8 : len(b)] // Help the compiler eliminate bounds checks on the next line.
+ return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
+ uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+}
+
+func hash(u uint32) uint32 {
+ return (u * 0x1e35a7bd) >> tableShift
+}
+
+// snappyL1 encapsulates level 1 compression
+type snappyL1 struct{}
+
+func (e *snappyL1) Reset() {}
+
+func (e *snappyL1) Encode(dst *tokens, src []byte) {
+ const (
+ inputMargin = 16 - 1
+ minNonLiteralBlockSize = 1 + 1 + inputMargin
+ )
+
+ // This check isn't in the Snappy implementation, but there, the caller
+ // instead of the callee handles this case.
+ if len(src) < minNonLiteralBlockSize {
+ // We do not fill the token table.
+ // This will be picked up by caller.
+ dst.n = uint16(len(src))
+ return
+ }
+
+ // Initialize the hash table.
+ //
+ // The table element type is uint16, as s < sLimit and sLimit < len(src)
+ // and len(src) <= maxStoreBlockSize and maxStoreBlockSize == 65535.
+ var table [tableSize]uint16
+
+ // sLimit is when to stop looking for offset/length copies. The inputMargin
+ // lets us use a fast path for emitLiteral in the main loop, while we are
+ // looking for copies.
+ sLimit := len(src) - inputMargin
+
+ // nextEmit is where in src the next emitLiteral should start from.
+ nextEmit := 0
+
+ // The encoded form must start with a literal, as there are no previous
+ // bytes to copy, so we start looking for hash matches at s == 1.
+ s := 1
+ nextHash := hash(load32(src, s))
+
+ for {
+ // Copied from the C++ snappy implementation:
+ //
+ // Heuristic match skipping: If 32 bytes are scanned with no matches
+ // found, start looking only at every other byte. If 32 more bytes are
+ // scanned (or skipped), look at every third byte, etc.. When a match
+ // is found, immediately go back to looking at every byte. This is a
+ // small loss (~5% performance, ~0.1% density) for compressible data
+ // due to more bookkeeping, but for non-compressible data (such as
+ // JPEG) it's a huge win since the compressor quickly "realizes" the
+ // data is incompressible and doesn't bother looking for matches
+ // everywhere.
+ //
+ // The "skip" variable keeps track of how many bytes there are since
+ // the last match; dividing it by 32 (ie. right-shifting by five) gives
+ // the number of bytes to move ahead for each iteration.
+ skip := 32
+
+ nextS := s
+ candidate := 0
+ for {
+ s = nextS
+ bytesBetweenHashLookups := skip >> 5
+ nextS = s + bytesBetweenHashLookups
+ skip += bytesBetweenHashLookups
+ if nextS > sLimit {
+ goto emitRemainder
+ }
+ candidate = int(table[nextHash&tableMask])
+ table[nextHash&tableMask] = uint16(s)
+ nextHash = hash(load32(src, nextS))
+ if s-candidate <= maxMatchOffset && load32(src, s) == load32(src, candidate) {
+ break
+ }
+ }
+
+ // A 4-byte match has been found. We'll later see if more than 4 bytes
+ // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit
+ // them as literal bytes.
+ emitLiteral(dst, src[nextEmit:s])
+
+ // Call emitCopy, and then see if another emitCopy could be our next
+ // move. Repeat until we find no match for the input immediately after
+ // what was consumed by the last emitCopy call.
+ //
+ // If we exit this loop normally then we need to call emitLiteral next,
+ // though we don't yet know how big the literal will be. We handle that
+ // by proceeding to the next iteration of the main loop. We also can
+ // exit this loop via goto if we get close to exhausting the input.
+ for {
+ // Invariant: we have a 4-byte match at s, and no need to emit any
+ // literal bytes prior to s.
+ base := s
+
+ // Extend the 4-byte match as long as possible.
+ //
+ // This is an inlined version of Snappy's:
+ // s = extendMatch(src, candidate+4, s+4)
+ s += 4
+ s1 := base + maxMatchLength
+ if s1 > len(src) {
+ s1 = len(src)
+ }
+ a := src[s:s1]
+ b := src[candidate+4:]
+ b = b[:len(a)]
+ l := len(a)
+ for i := range a {
+ if a[i] != b[i] {
+ l = i
+ break
+ }
+ }
+ s += l
+
+ // matchToken is flate's equivalent of Snappy's emitCopy.
+ dst.tokens[dst.n] = matchToken(uint32(s-base-baseMatchLength), uint32(base-candidate-baseMatchOffset))
+ dst.n++
+ nextEmit = s
+ if s >= sLimit {
+ goto emitRemainder
+ }
+
+ // We could immediately start working at s now, but to improve
+ // compression we first update the hash table at s-1 and at s. If
+ // another emitCopy is not our next move, also calculate nextHash
+ // at s+1. At least on GOARCH=amd64, these three hash calculations
+ // are faster as one load64 call (with some shifts) instead of
+ // three load32 calls.
+ x := load64(src, s-1)
+ prevHash := hash(uint32(x >> 0))
+ table[prevHash&tableMask] = uint16(s - 1)
+ currHash := hash(uint32(x >> 8))
+ candidate = int(table[currHash&tableMask])
+ table[currHash&tableMask] = uint16(s)
+ if s-candidate > maxMatchOffset || uint32(x>>8) != load32(src, candidate) {
+ nextHash = hash(uint32(x >> 16))
+ s++
+ break
+ }
+ }
+ }
+
+emitRemainder:
+ if nextEmit < len(src) {
+ emitLiteral(dst, src[nextEmit:])
+ }
+}
+
+type tableEntry struct {
+ val uint32
+ offset int32
+}
+
+func load3232(b []byte, i int32) uint32 {
+ b = b[i : i+4 : len(b)] // Help the compiler eliminate bounds checks on the next line.
+ return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
+}
+
+func load6432(b []byte, i int32) uint64 {
+ b = b[i : i+8 : len(b)] // Help the compiler eliminate bounds checks on the next line.
+ return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |
+ uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56
+}
+
+// snappyGen maintains the table for matches,
+// and the previous byte block for level 2.
+// This is the generic implementation.
+type snappyGen struct {
+ prev []byte
+ cur int32
+}
+
+// snappyGen maintains the table for matches,
+// and the previous byte block for level 2.
+// This is the generic implementation.
+type snappyL2 struct {
+ snappyGen
+ table [tableSize]tableEntry
+}
+
+// EncodeL2 uses a similar algorithm to level 1, but is capable
+// of matching across blocks giving better compression at a small slowdown.
+func (e *snappyL2) Encode(dst *tokens, src []byte) {
+ const (
+ inputMargin = 8 - 1
+ minNonLiteralBlockSize = 1 + 1 + inputMargin
+ )
+
+ // Protect against e.cur wraparound.
+ if e.cur > 1<<30 {
+ for i := range e.table[:] {
+ e.table[i] = tableEntry{}
+ }
+ e.cur = maxStoreBlockSize
+ }
+
+ // This check isn't in the Snappy implementation, but there, the caller
+ // instead of the callee handles this case.
+ if len(src) < minNonLiteralBlockSize {
+ // We do not fill the token table.
+ // This will be picked up by caller.
+ dst.n = uint16(len(src))
+ e.cur += maxStoreBlockSize
+ e.prev = e.prev[:0]
+ return
+ }
+
+ // sLimit is when to stop looking for offset/length copies. The inputMargin
+ // lets us use a fast path for emitLiteral in the main loop, while we are
+ // looking for copies.
+ sLimit := int32(len(src) - inputMargin)
+
+ // nextEmit is where in src the next emitLiteral should start from.
+ nextEmit := int32(0)
+ s := int32(0)
+ cv := load3232(src, s)
+ nextHash := hash(cv)
+
+ for {
+ // Copied from the C++ snappy implementation:
+ //
+ // Heuristic match skipping: If 32 bytes are scanned with no matches
+ // found, start looking only at every other byte. If 32 more bytes are
+ // scanned (or skipped), look at every third byte, etc.. When a match
+ // is found, immediately go back to looking at every byte. This is a
+ // small loss (~5% performance, ~0.1% density) for compressible data
+ // due to more bookkeeping, but for non-compressible data (such as
+ // JPEG) it's a huge win since the compressor quickly "realizes" the
+ // data is incompressible and doesn't bother looking for matches
+ // everywhere.
+ //
+ // The "skip" variable keeps track of how many bytes there are since
+ // the last match; dividing it by 32 (ie. right-shifting by five) gives
+ // the number of bytes to move ahead for each iteration.
+ skip := int32(32)
+
+ nextS := s
+ var candidate tableEntry
+ for {
+ s = nextS
+ bytesBetweenHashLookups := skip >> 5
+ nextS = s + bytesBetweenHashLookups
+ skip += bytesBetweenHashLookups
+ if nextS > sLimit {
+ goto emitRemainder
+ }
+ candidate = e.table[nextHash&tableMask]
+ now := load3232(src, nextS)
+ e.table[nextHash&tableMask] = tableEntry{offset: s + e.cur, val: cv}
+ nextHash = hash(now)
+
+ offset := s - (candidate.offset - e.cur)
+ if offset > maxMatchOffset || cv != candidate.val {
+ // Out of range or not matched.
+ cv = now
+ continue
+ }
+ break
+ }
+
+ // A 4-byte match has been found. We'll later see if more than 4 bytes
+ // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit
+ // them as literal bytes.
+ emitLiteral(dst, src[nextEmit:s])
+
+ // Call emitCopy, and then see if another emitCopy could be our next
+ // move. Repeat until we find no match for the input immediately after
+ // what was consumed by the last emitCopy call.
+ //
+ // If we exit this loop normally then we need to call emitLiteral next,
+ // though we don't yet know how big the literal will be. We handle that
+ // by proceeding to the next iteration of the main loop. We also can
+ // exit this loop via goto if we get close to exhausting the input.
+ for {
+ // Invariant: we have a 4-byte match at s, and no need to emit any
+ // literal bytes prior to s.
+
+ // Extend the 4-byte match as long as possible.
+ //
+ s += 4
+ t := candidate.offset - e.cur + 4
+ l := e.matchlen(s, t, src)
+
+ // matchToken is flate's equivalent of Snappy's emitCopy. (length,offset)
+ dst.tokens[dst.n] = matchToken(uint32(l+4-baseMatchLength), uint32(s-t-baseMatchOffset))
+ dst.n++
+ s += l
+ nextEmit = s
+ if s >= sLimit {
+ t += l
+ // Index first pair after match end.
+ if int(t+4) < len(src) && t > 0 {
+ cv := load3232(src, t)
+ e.table[hash(cv)&tableMask] = tableEntry{offset: t + e.cur, val: cv}
+ }
+ goto emitRemainder
+ }
+
+ // We could immediately start working at s now, but to improve
+ // compression we first update the hash table at s-1 and at s. If
+ // another emitCopy is not our next move, also calculate nextHash
+ // at s+1. At least on GOARCH=amd64, these three hash calculations
+ // are faster as one load64 call (with some shifts) instead of
+ // three load32 calls.
+ x := load6432(src, s-1)
+ prevHash := hash(uint32(x))
+ e.table[prevHash&tableMask] = tableEntry{offset: e.cur + s - 1, val: uint32(x)}
+ x >>= 8
+ currHash := hash(uint32(x))
+ candidate = e.table[currHash&tableMask]
+ e.table[currHash&tableMask] = tableEntry{offset: e.cur + s, val: uint32(x)}
+
+ offset := s - (candidate.offset - e.cur)
+ if offset > maxMatchOffset || uint32(x) != candidate.val {
+ cv = uint32(x >> 8)
+ nextHash = hash(cv)
+ s++
+ break
+ }
+ }
+ }
+
+emitRemainder:
+ if int(nextEmit) < len(src) {
+ emitLiteral(dst, src[nextEmit:])
+ }
+ e.cur += int32(len(src))
+ e.prev = e.prev[:len(src)]
+ copy(e.prev, src)
+}
+
+type tableEntryPrev struct {
+ Cur tableEntry
+ Prev tableEntry
+}
+
+// snappyL3
+type snappyL3 struct {
+ snappyGen
+ table [tableSize]tableEntryPrev
+}
+
+// Encode uses a similar algorithm to level 2, will check up to two candidates.
+func (e *snappyL3) Encode(dst *tokens, src []byte) {
+ const (
+ inputMargin = 8 - 1
+ minNonLiteralBlockSize = 1 + 1 + inputMargin
+ )
+
+ // Protect against e.cur wraparound.
+ if e.cur > 1<<30 {
+ for i := range e.table[:] {
+ e.table[i] = tableEntryPrev{}
+ }
+ e.snappyGen = snappyGen{cur: maxStoreBlockSize, prev: e.prev[:0]}
+ }
+
+ // This check isn't in the Snappy implementation, but there, the caller
+ // instead of the callee handles this case.
+ if len(src) < minNonLiteralBlockSize {
+ // We do not fill the token table.
+ // This will be picked up by caller.
+ dst.n = uint16(len(src))
+ e.cur += maxStoreBlockSize
+ e.prev = e.prev[:0]
+ return
+ }
+
+ // sLimit is when to stop looking for offset/length copies. The inputMargin
+ // lets us use a fast path for emitLiteral in the main loop, while we are
+ // looking for copies.
+ sLimit := int32(len(src) - inputMargin)
+
+ // nextEmit is where in src the next emitLiteral should start from.
+ nextEmit := int32(0)
+ s := int32(0)
+ cv := load3232(src, s)
+ nextHash := hash(cv)
+
+ for {
+ // Copied from the C++ snappy implementation:
+ //
+ // Heuristic match skipping: If 32 bytes are scanned with no matches
+ // found, start looking only at every other byte. If 32 more bytes are
+ // scanned (or skipped), look at every third byte, etc.. When a match
+ // is found, immediately go back to looking at every byte. This is a
+ // small loss (~5% performance, ~0.1% density) for compressible data
+ // due to more bookkeeping, but for non-compressible data (such as
+ // JPEG) it's a huge win since the compressor quickly "realizes" the
+ // data is incompressible and doesn't bother looking for matches
+ // everywhere.
+ //
+ // The "skip" variable keeps track of how many bytes there are since
+ // the last match; dividing it by 32 (ie. right-shifting by five) gives
+ // the number of bytes to move ahead for each iteration.
+ skip := int32(32)
+
+ nextS := s
+ var candidate tableEntry
+ for {
+ s = nextS
+ bytesBetweenHashLookups := skip >> 5
+ nextS = s + bytesBetweenHashLookups
+ skip += bytesBetweenHashLookups
+ if nextS > sLimit {
+ goto emitRemainder
+ }
+ candidates := e.table[nextHash&tableMask]
+ now := load3232(src, nextS)
+ e.table[nextHash&tableMask] = tableEntryPrev{Prev: candidates.Cur, Cur: tableEntry{offset: s + e.cur, val: cv}}
+ nextHash = hash(now)
+
+ // Check both candidates
+ candidate = candidates.Cur
+ if cv == candidate.val {
+ offset := s - (candidate.offset - e.cur)
+ if offset <= maxMatchOffset {
+ break
+ }
+ } else {
+ // We only check if value mismatches.
+ // Offset will always be invalid in other cases.
+ candidate = candidates.Prev
+ if cv == candidate.val {
+ offset := s - (candidate.offset - e.cur)
+ if offset <= maxMatchOffset {
+ break
+ }
+ }
+ }
+ cv = now
+ }
+
+ // A 4-byte match has been found. We'll later see if more than 4 bytes
+ // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit
+ // them as literal bytes.
+ emitLiteral(dst, src[nextEmit:s])
+
+ // Call emitCopy, and then see if another emitCopy could be our next
+ // move. Repeat until we find no match for the input immediately after
+ // what was consumed by the last emitCopy call.
+ //
+ // If we exit this loop normally then we need to call emitLiteral next,
+ // though we don't yet know how big the literal will be. We handle that
+ // by proceeding to the next iteration of the main loop. We also can
+ // exit this loop via goto if we get close to exhausting the input.
+ for {
+ // Invariant: we have a 4-byte match at s, and no need to emit any
+ // literal bytes prior to s.
+
+ // Extend the 4-byte match as long as possible.
+ //
+ s += 4
+ t := candidate.offset - e.cur + 4
+ l := e.matchlen(s, t, src)
+
+ // matchToken is flate's equivalent of Snappy's emitCopy. (length,offset)
+ dst.tokens[dst.n] = matchToken(uint32(l+4-baseMatchLength), uint32(s-t-baseMatchOffset))
+ dst.n++
+ s += l
+ nextEmit = s
+ if s >= sLimit {
+ t += l
+ // Index first pair after match end.
+ if int(t+4) < len(src) && t > 0 {
+ cv := load3232(src, t)
+ nextHash = hash(cv)
+ e.table[nextHash&tableMask] = tableEntryPrev{
+ Prev: e.table[nextHash&tableMask].Cur,
+ Cur: tableEntry{offset: e.cur + t, val: cv},
+ }
+ }
+ goto emitRemainder
+ }
+
+ // We could immediately start working at s now, but to improve
+ // compression we first update the hash table at s-3 to s. If
+ // another emitCopy is not our next move, also calculate nextHash
+ // at s+1. At least on GOARCH=amd64, these three hash calculations
+ // are faster as one load64 call (with some shifts) instead of
+ // three load32 calls.
+ x := load6432(src, s-3)
+ prevHash := hash(uint32(x))
+ e.table[prevHash&tableMask] = tableEntryPrev{
+ Prev: e.table[prevHash&tableMask].Cur,
+ Cur: tableEntry{offset: e.cur + s - 3, val: uint32(x)},
+ }
+ x >>= 8
+ prevHash = hash(uint32(x))
+
+ e.table[prevHash&tableMask] = tableEntryPrev{
+ Prev: e.table[prevHash&tableMask].Cur,
+ Cur: tableEntry{offset: e.cur + s - 2, val: uint32(x)},
+ }
+ x >>= 8
+ prevHash = hash(uint32(x))
+
+ e.table[prevHash&tableMask] = tableEntryPrev{
+ Prev: e.table[prevHash&tableMask].Cur,
+ Cur: tableEntry{offset: e.cur + s - 1, val: uint32(x)},
+ }
+ x >>= 8
+ currHash := hash(uint32(x))
+ candidates := e.table[currHash&tableMask]
+ cv = uint32(x)
+ e.table[currHash&tableMask] = tableEntryPrev{
+ Prev: candidates.Cur,
+ Cur: tableEntry{offset: s + e.cur, val: cv},
+ }
+
+ // Check both candidates
+ candidate = candidates.Cur
+ if cv == candidate.val {
+ offset := s - (candidate.offset - e.cur)
+ if offset <= maxMatchOffset {
+ continue
+ }
+ } else {
+ // We only check if value mismatches.
+ // Offset will always be invalid in other cases.
+ candidate = candidates.Prev
+ if cv == candidate.val {
+ offset := s - (candidate.offset - e.cur)
+ if offset <= maxMatchOffset {
+ continue
+ }
+ }
+ }
+ cv = uint32(x >> 8)
+ nextHash = hash(cv)
+ s++
+ break
+ }
+ }
+
+emitRemainder:
+ if int(nextEmit) < len(src) {
+ emitLiteral(dst, src[nextEmit:])
+ }
+ e.cur += int32(len(src))
+ e.prev = e.prev[:len(src)]
+ copy(e.prev, src)
+}
+
+// snappyL4
+type snappyL4 struct {
+ snappyL3
+}
+
+// Encode uses a similar algorithm to level 3,
+// but will check up to two candidates if first isn't long enough.
+func (e *snappyL4) Encode(dst *tokens, src []byte) {
+ const (
+ inputMargin = 8 - 3
+ minNonLiteralBlockSize = 1 + 1 + inputMargin
+ matchLenGood = 12
+ )
+
+ // Protect against e.cur wraparound.
+ if e.cur > 1<<30 {
+ for i := range e.table[:] {
+ e.table[i] = tableEntryPrev{}
+ }
+ e.snappyGen = snappyGen{cur: maxStoreBlockSize, prev: e.prev[:0]}
+ }
+
+ // This check isn't in the Snappy implementation, but there, the caller
+ // instead of the callee handles this case.
+ if len(src) < minNonLiteralBlockSize {
+ // We do not fill the token table.
+ // This will be picked up by caller.
+ dst.n = uint16(len(src))
+ e.cur += maxStoreBlockSize
+ e.prev = e.prev[:0]
+ return
+ }
+
+ // sLimit is when to stop looking for offset/length copies. The inputMargin
+ // lets us use a fast path for emitLiteral in the main loop, while we are
+ // looking for copies.
+ sLimit := int32(len(src) - inputMargin)
+
+ // nextEmit is where in src the next emitLiteral should start from.
+ nextEmit := int32(0)
+ s := int32(0)
+ cv := load3232(src, s)
+ nextHash := hash(cv)
+
+ for {
+ // Copied from the C++ snappy implementation:
+ //
+ // Heuristic match skipping: If 32 bytes are scanned with no matches
+ // found, start looking only at every other byte. If 32 more bytes are
+ // scanned (or skipped), look at every third byte, etc.. When a match
+ // is found, immediately go back to looking at every byte. This is a
+ // small loss (~5% performance, ~0.1% density) for compressible data
+ // due to more bookkeeping, but for non-compressible data (such as
+ // JPEG) it's a huge win since the compressor quickly "realizes" the
+ // data is incompressible and doesn't bother looking for matches
+ // everywhere.
+ //
+ // The "skip" variable keeps track of how many bytes there are since
+ // the last match; dividing it by 32 (ie. right-shifting by five) gives
+ // the number of bytes to move ahead for each iteration.
+ skip := int32(32)
+
+ nextS := s
+ var candidate tableEntry
+ var candidateAlt tableEntry
+ for {
+ s = nextS
+ bytesBetweenHashLookups := skip >> 5
+ nextS = s + bytesBetweenHashLookups
+ skip += bytesBetweenHashLookups
+ if nextS > sLimit {
+ goto emitRemainder
+ }
+ candidates := e.table[nextHash&tableMask]
+ now := load3232(src, nextS)
+ e.table[nextHash&tableMask] = tableEntryPrev{Prev: candidates.Cur, Cur: tableEntry{offset: s + e.cur, val: cv}}
+ nextHash = hash(now)
+
+ // Check both candidates
+ candidate = candidates.Cur
+ if cv == candidate.val {
+ offset := s - (candidate.offset - e.cur)
+ if offset < maxMatchOffset {
+ offset = s - (candidates.Prev.offset - e.cur)
+ if cv == candidates.Prev.val && offset < maxMatchOffset {
+ candidateAlt = candidates.Prev
+ }
+ break
+ }
+ } else {
+ // We only check if value mismatches.
+ // Offset will always be invalid in other cases.
+ candidate = candidates.Prev
+ if cv == candidate.val {
+ offset := s - (candidate.offset - e.cur)
+ if offset < maxMatchOffset {
+ break
+ }
+ }
+ }
+ cv = now
+ }
+
+ // A 4-byte match has been found. We'll later see if more than 4 bytes
+ // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit
+ // them as literal bytes.
+ emitLiteral(dst, src[nextEmit:s])
+
+ // Call emitCopy, and then see if another emitCopy could be our next
+ // move. Repeat until we find no match for the input immediately after
+ // what was consumed by the last emitCopy call.
+ //
+ // If we exit this loop normally then we need to call emitLiteral next,
+ // though we don't yet know how big the literal will be. We handle that
+ // by proceeding to the next iteration of the main loop. We also can
+ // exit this loop via goto if we get close to exhausting the input.
+ for {
+ // Invariant: we have a 4-byte match at s, and no need to emit any
+ // literal bytes prior to s.
+
+ // Extend the 4-byte match as long as possible.
+ //
+ s += 4
+ t := candidate.offset - e.cur + 4
+ l := e.matchlen(s, t, src)
+ // Try alternative candidate if match length < matchLenGood.
+ if l < matchLenGood-4 && candidateAlt.offset != 0 {
+ t2 := candidateAlt.offset - e.cur + 4
+ l2 := e.matchlen(s, t2, src)
+ if l2 > l {
+ l = l2
+ t = t2
+ }
+ }
+ // matchToken is flate's equivalent of Snappy's emitCopy. (length,offset)
+ dst.tokens[dst.n] = matchToken(uint32(l+4-baseMatchLength), uint32(s-t-baseMatchOffset))
+ dst.n++
+ s += l
+ nextEmit = s
+ if s >= sLimit {
+ t += l
+ // Index first pair after match end.
+ if int(t+4) < len(src) && t > 0 {
+ cv := load3232(src, t)
+ nextHash = hash(cv)
+ e.table[nextHash&tableMask] = tableEntryPrev{
+ Prev: e.table[nextHash&tableMask].Cur,
+ Cur: tableEntry{offset: e.cur + t, val: cv},
+ }
+ }
+ goto emitRemainder
+ }
+
+ // We could immediately start working at s now, but to improve
+ // compression we first update the hash table at s-3 to s. If
+ // another emitCopy is not our next move, also calculate nextHash
+ // at s+1. At least on GOARCH=amd64, these three hash calculations
+ // are faster as one load64 call (with some shifts) instead of
+ // three load32 calls.
+ x := load6432(src, s-3)
+ prevHash := hash(uint32(x))
+ e.table[prevHash&tableMask] = tableEntryPrev{
+ Prev: e.table[prevHash&tableMask].Cur,
+ Cur: tableEntry{offset: e.cur + s - 3, val: uint32(x)},
+ }
+ x >>= 8
+ prevHash = hash(uint32(x))
+
+ e.table[prevHash&tableMask] = tableEntryPrev{
+ Prev: e.table[prevHash&tableMask].Cur,
+ Cur: tableEntry{offset: e.cur + s - 2, val: uint32(x)},
+ }
+ x >>= 8
+ prevHash = hash(uint32(x))
+
+ e.table[prevHash&tableMask] = tableEntryPrev{
+ Prev: e.table[prevHash&tableMask].Cur,
+ Cur: tableEntry{offset: e.cur + s - 1, val: uint32(x)},
+ }
+ x >>= 8
+ currHash := hash(uint32(x))
+ candidates := e.table[currHash&tableMask]
+ cv = uint32(x)
+ e.table[currHash&tableMask] = tableEntryPrev{
+ Prev: candidates.Cur,
+ Cur: tableEntry{offset: s + e.cur, val: cv},
+ }
+
+ // Check both candidates
+ candidate = candidates.Cur
+ candidateAlt = tableEntry{}
+ if cv == candidate.val {
+ offset := s - (candidate.offset - e.cur)
+ if offset <= maxMatchOffset {
+ offset = s - (candidates.Prev.offset - e.cur)
+ if cv == candidates.Prev.val && offset <= maxMatchOffset {
+ candidateAlt = candidates.Prev
+ }
+ continue
+ }
+ } else {
+ // We only check if value mismatches.
+ // Offset will always be invalid in other cases.
+ candidate = candidates.Prev
+ if cv == candidate.val {
+ offset := s - (candidate.offset - e.cur)
+ if offset <= maxMatchOffset {
+ continue
+ }
+ }
+ }
+ cv = uint32(x >> 8)
+ nextHash = hash(cv)
+ s++
+ break
+ }
+ }
+
+emitRemainder:
+ if int(nextEmit) < len(src) {
+ emitLiteral(dst, src[nextEmit:])
+ }
+ e.cur += int32(len(src))
+ e.prev = e.prev[:len(src)]
+ copy(e.prev, src)
+}
+
+func (e *snappyGen) matchlen(s, t int32, src []byte) int32 {
+ s1 := int(s) + maxMatchLength - 4
+ if s1 > len(src) {
+ s1 = len(src)
+ }
+
+ // If we are inside the current block
+ if t >= 0 {
+ b := src[t:]
+ a := src[s:s1]
+ b = b[:len(a)]
+ // Extend the match to be as long as possible.
+ for i := range a {
+ if a[i] != b[i] {
+ return int32(i)
+ }
+ }
+ return int32(len(a))
+ }
+
+ // We found a match in the previous block.
+ tp := int32(len(e.prev)) + t
+ if tp < 0 {
+ return 0
+ }
+
+ // Extend the match to be as long as possible.
+ a := src[s:s1]
+ b := e.prev[tp:]
+ if len(b) > len(a) {
+ b = b[:len(a)]
+ }
+ a = a[:len(b)]
+ for i := range b {
+ if a[i] != b[i] {
+ return int32(i)
+ }
+ }
+
+ // If we reached our limit, we matched everything we are
+ // allowed to in the previous block and we return.
+ n := int32(len(b))
+ if int(s+n) == s1 {
+ return n
+ }
+
+ // Continue looking for more matches in the current block.
+ a = src[s+n : s1]
+ b = src[:len(a)]
+ for i := range a {
+ if a[i] != b[i] {
+ return int32(i) + n
+ }
+ }
+ return int32(len(a)) + n
+}
+
+// Reset the encoding table.
+func (e *snappyGen) Reset() {
+ e.prev = e.prev[:0]
+ e.cur += maxMatchOffset
+}
diff --git a/vendor/github.com/klauspost/compress/flate/token.go b/vendor/github.com/klauspost/compress/flate/token.go
new file mode 100644
index 000000000..4f275ea61
--- /dev/null
+++ b/vendor/github.com/klauspost/compress/flate/token.go
@@ -0,0 +1,115 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package flate
+
+import "fmt"
+
+const (
+ // 2 bits: type 0 = literal 1=EOF 2=Match 3=Unused
+ // 8 bits: xlength = length - MIN_MATCH_LENGTH
+ // 22 bits xoffset = offset - MIN_OFFSET_SIZE, or literal
+ lengthShift = 22
+ offsetMask = 1<<lengthShift - 1
+ typeMask = 3 << 30
+ literalType = 0 << 30
+ matchType = 1 << 30
+)
+
+// The length code for length X (MIN_MATCH_LENGTH <= X <= MAX_MATCH_LENGTH)
+// is lengthCodes[length - MIN_MATCH_LENGTH]
+var lengthCodes = [...]uint32{
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 8,
+ 9, 9, 10, 10, 11, 11, 12, 12, 12, 12,
+ 13, 13, 13, 13, 14, 14, 14, 14, 15, 15,
+ 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
+ 17, 17, 17, 17, 17, 17, 17, 17, 18, 18,
+ 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
+ 19, 19, 19, 19, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+ 26, 26, 26, 26, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 28,
+}
+
+var offsetCodes = [...]uint32{
+ 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
+ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+}
+
+type token uint32
+
+type tokens struct {
+ tokens [maxStoreBlockSize + 1]token
+ n uint16 // Must be able to contain maxStoreBlockSize
+}
+
+// Convert a literal into a literal token.
+func literalToken(literal uint32) token { return token(literalType + literal) }
+
+// Convert a < xlength, xoffset > pair into a match token.
+func matchToken(xlength uint32, xoffset uint32) token {
+ return token(matchType + xlength<<lengthShift + xoffset)
+}
+
+func matchTokend(xlength uint32, xoffset uint32) token {
+ if xlength > maxMatchLength || xoffset > maxMatchOffset {
+ panic(fmt.Sprintf("Invalid match: len: %d, offset: %d\n", xlength, xoffset))
+ return token(matchType)
+ }
+ return token(matchType + xlength<<lengthShift + xoffset)
+}
+
+// Returns the type of a token
+func (t token) typ() uint32 { return uint32(t) & typeMask }
+
+// Returns the literal of a literal token
+func (t token) literal() uint32 { return uint32(t - literalType) }
+
+// Returns the extra offset of a match token
+func (t token) offset() uint32 { return uint32(t) & offsetMask }
+
+func (t token) length() uint32 { return uint32((t - matchType) >> lengthShift) }
+
+func lengthCode(len uint32) uint32 { return lengthCodes[len] }
+
+// Returns the offset code corresponding to a specific offset
+func offsetCode(off uint32) uint32 {
+ if off < uint32(len(offsetCodes)) {
+ return offsetCodes[off]
+ } else if off>>7 < uint32(len(offsetCodes)) {
+ return offsetCodes[off>>7] + 14
+ } else {
+ return offsetCodes[off>>14] + 28
+ }
+}
diff --git a/vendor/github.com/klauspost/cpuid/LICENSE b/vendor/github.com/klauspost/cpuid/LICENSE
new file mode 100644
index 000000000..5cec7ee94
--- /dev/null
+++ b/vendor/github.com/klauspost/cpuid/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Klaus Post
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/vendor/github.com/klauspost/cpuid/README.md b/vendor/github.com/klauspost/cpuid/README.md
new file mode 100644
index 000000000..b2b6bee87
--- /dev/null
+++ b/vendor/github.com/klauspost/cpuid/README.md
@@ -0,0 +1,145 @@
+# cpuid
+Package cpuid provides information about the CPU running the current program.
+
+CPU features are detected on startup, and kept for fast access through the life of the application.
+Currently x86 / x64 (AMD64) is supported, and no external C (cgo) code is used, which should make the library very easy to use.
+
+You can access the CPU information by accessing the shared CPU variable of the cpuid library.
+
+Package home: https://github.com/klauspost/cpuid
+
+[![GoDoc][1]][2] [![Build Status][3]][4]
+
+[1]: https://godoc.org/github.com/klauspost/cpuid?status.svg
+[2]: https://godoc.org/github.com/klauspost/cpuid
+[3]: https://travis-ci.org/klauspost/cpuid.svg
+[4]: https://travis-ci.org/klauspost/cpuid
+
+# features
+## CPU Instructions
+* **CMOV** (i686 CMOV)
+* **NX** (NX (No-Execute) bit)
+* **AMD3DNOW** (AMD 3DNOW)
+* **AMD3DNOWEXT** (AMD 3DNowExt)
+* **MMX** (standard MMX)
+* **MMXEXT** (SSE integer functions or AMD MMX ext)
+* **SSE** (SSE functions)
+* **SSE2** (P4 SSE functions)
+* **SSE3** (Prescott SSE3 functions)
+* **SSSE3** (Conroe SSSE3 functions)
+* **SSE4** (Penryn SSE4.1 functions)
+* **SSE4A** (AMD Barcelona microarchitecture SSE4a instructions)
+* **SSE42** (Nehalem SSE4.2 functions)
+* **AVX** (AVX functions)
+* **AVX2** (AVX2 functions)
+* **FMA3** (Intel FMA 3)
+* **FMA4** (Bulldozer FMA4 functions)
+* **XOP** (Bulldozer XOP functions)
+* **F16C** (Half-precision floating-point conversion)
+* **BMI1** (Bit Manipulation Instruction Set 1)
+* **BMI2** (Bit Manipulation Instruction Set 2)
+* **TBM** (AMD Trailing Bit Manipulation)
+* **LZCNT** (LZCNT instruction)
+* **POPCNT** (POPCNT instruction)
+* **AESNI** (Advanced Encryption Standard New Instructions)
+* **CLMUL** (Carry-less Multiplication)
+* **HTT** (Hyperthreading (enabled))
+* **HLE** (Hardware Lock Elision)
+* **RTM** (Restricted Transactional Memory)
+* **RDRAND** (RDRAND instruction is available)
+* **RDSEED** (RDSEED instruction is available)
+* **ADX** (Intel ADX (Multi-Precision Add-Carry Instruction Extensions))
+* **SHA** (Intel SHA Extensions)
+* **AVX512F** (AVX-512 Foundation)
+* **AVX512DQ** (AVX-512 Doubleword and Quadword Instructions)
+* **AVX512IFMA** (AVX-512 Integer Fused Multiply-Add Instructions)
+* **AVX512PF** (AVX-512 Prefetch Instructions)
+* **AVX512ER** (AVX-512 Exponential and Reciprocal Instructions)
+* **AVX512CD** (AVX-512 Conflict Detection Instructions)
+* **AVX512BW** (AVX-512 Byte and Word Instructions)
+* **AVX512VL** (AVX-512 Vector Length Extensions)
+* **AVX512VBMI** (AVX-512 Vector Bit Manipulation Instructions)
+* **MPX** (Intel MPX (Memory Protection Extensions))
+* **ERMS** (Enhanced REP MOVSB/STOSB)
+* **RDTSCP** (RDTSCP Instruction)
+* **CX16** (CMPXCHG16B Instruction)
+* **SGX** (Software Guard Extensions, with activation details)
+
+## Performance
+* **RDTSCP()** Returns current cycle count. Can be used for benchmarking.
+* **SSE2SLOW** (SSE2 is supported, but usually not faster)
+* **SSE3SLOW** (SSE3 is supported, but usually not faster)
+* **ATOM** (Atom processor, some SSSE3 instructions are slower)
+* **Cache line** (Probable size of a cache line).
+* **L1, L2, L3 Cache size** on newer Intel/AMD CPUs.
+
+## Cpu Vendor/VM
+* **Intel**
+* **AMD**
+* **VIA**
+* **Transmeta**
+* **NSC**
+* **KVM** (Kernel-based Virtual Machine)
+* **MSVM** (Microsoft Hyper-V or Windows Virtual PC)
+* **VMware**
+* **XenHVM**
+
+# installing
+
+```go get github.com/klauspost/cpuid```
+
+# example
+
+```Go
+package main
+
+import (
+ "fmt"
+ "github.com/klauspost/cpuid"
+)
+
+func main() {
+ // Print basic CPU information:
+ fmt.Println("Name:", cpuid.CPU.BrandName)
+ fmt.Println("PhysicalCores:", cpuid.CPU.PhysicalCores)
+ fmt.Println("ThreadsPerCore:", cpuid.CPU.ThreadsPerCore)
+ fmt.Println("LogicalCores:", cpuid.CPU.LogicalCores)
+ fmt.Println("Family", cpuid.CPU.Family, "Model:", cpuid.CPU.Model)
+ fmt.Println("Features:", cpuid.CPU.Features)
+ fmt.Println("Cacheline bytes:", cpuid.CPU.CacheLine)
+ fmt.Println("L1 Data Cache:", cpuid.CPU.Cache.L1D, "bytes")
+ fmt.Println("L1 Instruction Cache:", cpuid.CPU.Cache.L1D, "bytes")
+ fmt.Println("L2 Cache:", cpuid.CPU.Cache.L2, "bytes")
+ fmt.Println("L3 Cache:", cpuid.CPU.Cache.L3, "bytes")
+
+ // Test if we have a specific feature:
+ if cpuid.CPU.SSE() {
+ fmt.Println("We have Streaming SIMD Extensions")
+ }
+}
+```
+
+Sample output:
+```
+>go run main.go
+Name: Intel(R) Core(TM) i5-2540M CPU @ 2.60GHz
+PhysicalCores: 2
+ThreadsPerCore: 2
+LogicalCores: 4
+Family 6 Model: 42
+Features: CMOV,MMX,MMXEXT,SSE,SSE2,SSE3,SSSE3,SSE4.1,SSE4.2,AVX,AESNI,CLMUL
+Cacheline bytes: 64
+We have Streaming SIMD Extensions
+```
+
+# private package
+
+In the "private" folder you can find an autogenerated version of the library you can include in your own packages.
+
+For this purpose all exports are removed, and functions and constants are lowercased.
+
+This is not a recommended way of using the library, but provided for convenience, if it is difficult for you to use external packages.
+
+# license
+
+This code is published under an MIT license. See LICENSE file for more information.
diff --git a/vendor/github.com/klauspost/cpuid/cpuid.go b/vendor/github.com/klauspost/cpuid/cpuid.go
new file mode 100644
index 000000000..60c681bed
--- /dev/null
+++ b/vendor/github.com/klauspost/cpuid/cpuid.go
@@ -0,0 +1,1040 @@
+// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file.
+
+// Package cpuid provides information about the CPU running the current program.
+//
+// CPU features are detected on startup, and kept for fast access through the life of the application.
+// Currently x86 / x64 (AMD64) is supported.
+//
+// You can access the CPU information by accessing the shared CPU variable of the cpuid library.
+//
+// Package home: https://github.com/klauspost/cpuid
+package cpuid
+
+import "strings"
+
+// Vendor is a representation of a CPU vendor.
+type Vendor int
+
+const (
+ Other Vendor = iota
+ Intel
+ AMD
+ VIA
+ Transmeta
+ NSC
+ KVM // Kernel-based Virtual Machine
+ MSVM // Microsoft Hyper-V or Windows Virtual PC
+ VMware
+ XenHVM
+)
+
+const (
+ CMOV = 1 << iota // i686 CMOV
+ NX // NX (No-Execute) bit
+ AMD3DNOW // AMD 3DNOW
+ AMD3DNOWEXT // AMD 3DNowExt
+ MMX // standard MMX
+ MMXEXT // SSE integer functions or AMD MMX ext
+ SSE // SSE functions
+ SSE2 // P4 SSE functions
+ SSE3 // Prescott SSE3 functions
+ SSSE3 // Conroe SSSE3 functions
+ SSE4 // Penryn SSE4.1 functions
+ SSE4A // AMD Barcelona microarchitecture SSE4a instructions
+ SSE42 // Nehalem SSE4.2 functions
+ AVX // AVX functions
+ AVX2 // AVX2 functions
+ FMA3 // Intel FMA 3
+ FMA4 // Bulldozer FMA4 functions
+ XOP // Bulldozer XOP functions
+ F16C // Half-precision floating-point conversion
+ BMI1 // Bit Manipulation Instruction Set 1
+ BMI2 // Bit Manipulation Instruction Set 2
+ TBM // AMD Trailing Bit Manipulation
+ LZCNT // LZCNT instruction
+ POPCNT // POPCNT instruction
+ AESNI // Advanced Encryption Standard New Instructions
+ CLMUL // Carry-less Multiplication
+ HTT // Hyperthreading (enabled)
+ HLE // Hardware Lock Elision
+ RTM // Restricted Transactional Memory
+ RDRAND // RDRAND instruction is available
+ RDSEED // RDSEED instruction is available
+ ADX // Intel ADX (Multi-Precision Add-Carry Instruction Extensions)
+ SHA // Intel SHA Extensions
+ AVX512F // AVX-512 Foundation
+ AVX512DQ // AVX-512 Doubleword and Quadword Instructions
+ AVX512IFMA // AVX-512 Integer Fused Multiply-Add Instructions
+ AVX512PF // AVX-512 Prefetch Instructions
+ AVX512ER // AVX-512 Exponential and Reciprocal Instructions
+ AVX512CD // AVX-512 Conflict Detection Instructions
+ AVX512BW // AVX-512 Byte and Word Instructions
+ AVX512VL // AVX-512 Vector Length Extensions
+ AVX512VBMI // AVX-512 Vector Bit Manipulation Instructions
+ MPX // Intel MPX (Memory Protection Extensions)
+ ERMS // Enhanced REP MOVSB/STOSB
+ RDTSCP // RDTSCP Instruction
+ CX16 // CMPXCHG16B Instruction
+ SGX // Software Guard Extensions
+ IBPB // Indirect Branch Restricted Speculation (IBRS) and Indirect Branch Predictor Barrier (IBPB)
+ STIBP // Single Thread Indirect Branch Predictors
+
+ // Performance indicators
+ SSE2SLOW // SSE2 is supported, but usually not faster
+ SSE3SLOW // SSE3 is supported, but usually not faster
+ ATOM // Atom processor, some SSSE3 instructions are slower
+)
+
+var flagNames = map[Flags]string{
+ CMOV: "CMOV", // i686 CMOV
+ NX: "NX", // NX (No-Execute) bit
+ AMD3DNOW: "AMD3DNOW", // AMD 3DNOW
+ AMD3DNOWEXT: "AMD3DNOWEXT", // AMD 3DNowExt
+ MMX: "MMX", // Standard MMX
+ MMXEXT: "MMXEXT", // SSE integer functions or AMD MMX ext
+ SSE: "SSE", // SSE functions
+ SSE2: "SSE2", // P4 SSE2 functions
+ SSE3: "SSE3", // Prescott SSE3 functions
+ SSSE3: "SSSE3", // Conroe SSSE3 functions
+ SSE4: "SSE4.1", // Penryn SSE4.1 functions
+ SSE4A: "SSE4A", // AMD Barcelona microarchitecture SSE4a instructions
+ SSE42: "SSE4.2", // Nehalem SSE4.2 functions
+ AVX: "AVX", // AVX functions
+ AVX2: "AVX2", // AVX functions
+ FMA3: "FMA3", // Intel FMA 3
+ FMA4: "FMA4", // Bulldozer FMA4 functions
+ XOP: "XOP", // Bulldozer XOP functions
+ F16C: "F16C", // Half-precision floating-point conversion
+ BMI1: "BMI1", // Bit Manipulation Instruction Set 1
+ BMI2: "BMI2", // Bit Manipulation Instruction Set 2
+ TBM: "TBM", // AMD Trailing Bit Manipulation
+ LZCNT: "LZCNT", // LZCNT instruction
+ POPCNT: "POPCNT", // POPCNT instruction
+ AESNI: "AESNI", // Advanced Encryption Standard New Instructions
+ CLMUL: "CLMUL", // Carry-less Multiplication
+ HTT: "HTT", // Hyperthreading (enabled)
+ HLE: "HLE", // Hardware Lock Elision
+ RTM: "RTM", // Restricted Transactional Memory
+ RDRAND: "RDRAND", // RDRAND instruction is available
+ RDSEED: "RDSEED", // RDSEED instruction is available
+ ADX: "ADX", // Intel ADX (Multi-Precision Add-Carry Instruction Extensions)
+ SHA: "SHA", // Intel SHA Extensions
+ AVX512F: "AVX512F", // AVX-512 Foundation
+ AVX512DQ: "AVX512DQ", // AVX-512 Doubleword and Quadword Instructions
+ AVX512IFMA: "AVX512IFMA", // AVX-512 Integer Fused Multiply-Add Instructions
+ AVX512PF: "AVX512PF", // AVX-512 Prefetch Instructions
+ AVX512ER: "AVX512ER", // AVX-512 Exponential and Reciprocal Instructions
+ AVX512CD: "AVX512CD", // AVX-512 Conflict Detection Instructions
+ AVX512BW: "AVX512BW", // AVX-512 Byte and Word Instructions
+ AVX512VL: "AVX512VL", // AVX-512 Vector Length Extensions
+ AVX512VBMI: "AVX512VBMI", // AVX-512 Vector Bit Manipulation Instructions
+ MPX: "MPX", // Intel MPX (Memory Protection Extensions)
+ ERMS: "ERMS", // Enhanced REP MOVSB/STOSB
+ RDTSCP: "RDTSCP", // RDTSCP Instruction
+ CX16: "CX16", // CMPXCHG16B Instruction
+ SGX: "SGX", // Software Guard Extensions
+ IBPB: "IBPB", // Indirect Branch Restricted Speculation and Indirect Branch Predictor Barrier
+ STIBP: "STIBP", // Single Thread Indirect Branch Predictors
+
+ // Performance indicators
+ SSE2SLOW: "SSE2SLOW", // SSE2 supported, but usually not faster
+ SSE3SLOW: "SSE3SLOW", // SSE3 supported, but usually not faster
+ ATOM: "ATOM", // Atom processor, some SSSE3 instructions are slower
+
+}
+
+// CPUInfo contains information about the detected system CPU.
+type CPUInfo struct {
+ BrandName string // Brand name reported by the CPU
+ VendorID Vendor // Comparable CPU vendor ID
+ Features Flags // Features of the CPU
+ PhysicalCores int // Number of physical processor cores in your CPU. Will be 0 if undetectable.
+ ThreadsPerCore int // Number of threads per physical core. Will be 1 if undetectable.
+ LogicalCores int // Number of physical cores times threads that can run on each core through the use of hyperthreading. Will be 0 if undetectable.
+ Family int // CPU family number
+ Model int // CPU model number
+ CacheLine int // Cache line size in bytes. Will be 0 if undetectable.
+ Cache struct {
+ L1I int // L1 Instruction Cache (per core or shared). Will be -1 if undetected
+ L1D int // L1 Data Cache (per core or shared). Will be -1 if undetected
+ L2 int // L2 Cache (per core or shared). Will be -1 if undetected
+ L3 int // L3 Instruction Cache (per core or shared). Will be -1 if undetected
+ }
+ SGX SGXSupport
+ maxFunc uint32
+ maxExFunc uint32
+}
+
+var cpuid func(op uint32) (eax, ebx, ecx, edx uint32)
+var cpuidex func(op, op2 uint32) (eax, ebx, ecx, edx uint32)
+var xgetbv func(index uint32) (eax, edx uint32)
+var rdtscpAsm func() (eax, ebx, ecx, edx uint32)
+
+// CPU contains information about the CPU as detected on startup,
+// or when Detect last was called.
+//
+// Use this as the primary entry point to you data,
+// this way queries are
+var CPU CPUInfo
+
+func init() {
+ initCPU()
+ Detect()
+}
+
+// Detect will re-detect current CPU info.
+// This will replace the content of the exported CPU variable.
+//
+// Unless you expect the CPU to change while you are running your program
+// you should not need to call this function.
+// If you call this, you must ensure that no other goroutine is accessing the
+// exported CPU variable.
+func Detect() {
+ CPU.maxFunc = maxFunctionID()
+ CPU.maxExFunc = maxExtendedFunction()
+ CPU.BrandName = brandName()
+ CPU.CacheLine = cacheLine()
+ CPU.Family, CPU.Model = familyModel()
+ CPU.Features = support()
+ CPU.SGX = hasSGX(CPU.Features&SGX != 0)
+ CPU.ThreadsPerCore = threadsPerCore()
+ CPU.LogicalCores = logicalCores()
+ CPU.PhysicalCores = physicalCores()
+ CPU.VendorID = vendorID()
+ CPU.cacheSize()
+}
+
+// Generated here: http://play.golang.org/p/BxFH2Gdc0G
+
+// Cmov indicates support of CMOV instructions
+func (c CPUInfo) Cmov() bool {
+ return c.Features&CMOV != 0
+}
+
+// Amd3dnow indicates support of AMD 3DNOW! instructions
+func (c CPUInfo) Amd3dnow() bool {
+ return c.Features&AMD3DNOW != 0
+}
+
+// Amd3dnowExt indicates support of AMD 3DNOW! Extended instructions
+func (c CPUInfo) Amd3dnowExt() bool {
+ return c.Features&AMD3DNOWEXT != 0
+}
+
+// MMX indicates support of MMX instructions
+func (c CPUInfo) MMX() bool {
+ return c.Features&MMX != 0
+}
+
+// MMXExt indicates support of MMXEXT instructions
+// (SSE integer functions or AMD MMX ext)
+func (c CPUInfo) MMXExt() bool {
+ return c.Features&MMXEXT != 0
+}
+
+// SSE indicates support of SSE instructions
+func (c CPUInfo) SSE() bool {
+ return c.Features&SSE != 0
+}
+
+// SSE2 indicates support of SSE 2 instructions
+func (c CPUInfo) SSE2() bool {
+ return c.Features&SSE2 != 0
+}
+
+// SSE3 indicates support of SSE 3 instructions
+func (c CPUInfo) SSE3() bool {
+ return c.Features&SSE3 != 0
+}
+
+// SSSE3 indicates support of SSSE 3 instructions
+func (c CPUInfo) SSSE3() bool {
+ return c.Features&SSSE3 != 0
+}
+
+// SSE4 indicates support of SSE 4 (also called SSE 4.1) instructions
+func (c CPUInfo) SSE4() bool {
+ return c.Features&SSE4 != 0
+}
+
+// SSE42 indicates support of SSE4.2 instructions
+func (c CPUInfo) SSE42() bool {
+ return c.Features&SSE42 != 0
+}
+
+// AVX indicates support of AVX instructions
+// and operating system support of AVX instructions
+func (c CPUInfo) AVX() bool {
+ return c.Features&AVX != 0
+}
+
+// AVX2 indicates support of AVX2 instructions
+func (c CPUInfo) AVX2() bool {
+ return c.Features&AVX2 != 0
+}
+
+// FMA3 indicates support of FMA3 instructions
+func (c CPUInfo) FMA3() bool {
+ return c.Features&FMA3 != 0
+}
+
+// FMA4 indicates support of FMA4 instructions
+func (c CPUInfo) FMA4() bool {
+ return c.Features&FMA4 != 0
+}
+
+// XOP indicates support of XOP instructions
+func (c CPUInfo) XOP() bool {
+ return c.Features&XOP != 0
+}
+
+// F16C indicates support of F16C instructions
+func (c CPUInfo) F16C() bool {
+ return c.Features&F16C != 0
+}
+
+// BMI1 indicates support of BMI1 instructions
+func (c CPUInfo) BMI1() bool {
+ return c.Features&BMI1 != 0
+}
+
+// BMI2 indicates support of BMI2 instructions
+func (c CPUInfo) BMI2() bool {
+ return c.Features&BMI2 != 0
+}
+
+// TBM indicates support of TBM instructions
+// (AMD Trailing Bit Manipulation)
+func (c CPUInfo) TBM() bool {
+ return c.Features&TBM != 0
+}
+
+// Lzcnt indicates support of LZCNT instruction
+func (c CPUInfo) Lzcnt() bool {
+ return c.Features&LZCNT != 0
+}
+
+// Popcnt indicates support of POPCNT instruction
+func (c CPUInfo) Popcnt() bool {
+ return c.Features&POPCNT != 0
+}
+
+// HTT indicates the processor has Hyperthreading enabled
+func (c CPUInfo) HTT() bool {
+ return c.Features&HTT != 0
+}
+
+// SSE2Slow indicates that SSE2 may be slow on this processor
+func (c CPUInfo) SSE2Slow() bool {
+ return c.Features&SSE2SLOW != 0
+}
+
+// SSE3Slow indicates that SSE3 may be slow on this processor
+func (c CPUInfo) SSE3Slow() bool {
+ return c.Features&SSE3SLOW != 0
+}
+
+// AesNi indicates support of AES-NI instructions
+// (Advanced Encryption Standard New Instructions)
+func (c CPUInfo) AesNi() bool {
+ return c.Features&AESNI != 0
+}
+
+// Clmul indicates support of CLMUL instructions
+// (Carry-less Multiplication)
+func (c CPUInfo) Clmul() bool {
+ return c.Features&CLMUL != 0
+}
+
+// NX indicates support of NX (No-Execute) bit
+func (c CPUInfo) NX() bool {
+ return c.Features&NX != 0
+}
+
+// SSE4A indicates support of AMD Barcelona microarchitecture SSE4a instructions
+func (c CPUInfo) SSE4A() bool {
+ return c.Features&SSE4A != 0
+}
+
+// HLE indicates support of Hardware Lock Elision
+func (c CPUInfo) HLE() bool {
+ return c.Features&HLE != 0
+}
+
+// RTM indicates support of Restricted Transactional Memory
+func (c CPUInfo) RTM() bool {
+ return c.Features&RTM != 0
+}
+
+// Rdrand indicates support of RDRAND instruction is available
+func (c CPUInfo) Rdrand() bool {
+ return c.Features&RDRAND != 0
+}
+
+// Rdseed indicates support of RDSEED instruction is available
+func (c CPUInfo) Rdseed() bool {
+ return c.Features&RDSEED != 0
+}
+
+// ADX indicates support of Intel ADX (Multi-Precision Add-Carry Instruction Extensions)
+func (c CPUInfo) ADX() bool {
+ return c.Features&ADX != 0
+}
+
+// SHA indicates support of Intel SHA Extensions
+func (c CPUInfo) SHA() bool {
+ return c.Features&SHA != 0
+}
+
+// AVX512F indicates support of AVX-512 Foundation
+func (c CPUInfo) AVX512F() bool {
+ return c.Features&AVX512F != 0
+}
+
+// AVX512DQ indicates support of AVX-512 Doubleword and Quadword Instructions
+func (c CPUInfo) AVX512DQ() bool {
+ return c.Features&AVX512DQ != 0
+}
+
+// AVX512IFMA indicates support of AVX-512 Integer Fused Multiply-Add Instructions
+func (c CPUInfo) AVX512IFMA() bool {
+ return c.Features&AVX512IFMA != 0
+}
+
+// AVX512PF indicates support of AVX-512 Prefetch Instructions
+func (c CPUInfo) AVX512PF() bool {
+ return c.Features&AVX512PF != 0
+}
+
+// AVX512ER indicates support of AVX-512 Exponential and Reciprocal Instructions
+func (c CPUInfo) AVX512ER() bool {
+ return c.Features&AVX512ER != 0
+}
+
+// AVX512CD indicates support of AVX-512 Conflict Detection Instructions
+func (c CPUInfo) AVX512CD() bool {
+ return c.Features&AVX512CD != 0
+}
+
+// AVX512BW indicates support of AVX-512 Byte and Word Instructions
+func (c CPUInfo) AVX512BW() bool {
+ return c.Features&AVX512BW != 0
+}
+
+// AVX512VL indicates support of AVX-512 Vector Length Extensions
+func (c CPUInfo) AVX512VL() bool {
+ return c.Features&AVX512VL != 0
+}
+
+// AVX512VBMI indicates support of AVX-512 Vector Bit Manipulation Instructions
+func (c CPUInfo) AVX512VBMI() bool {
+ return c.Features&AVX512VBMI != 0
+}
+
+// MPX indicates support of Intel MPX (Memory Protection Extensions)
+func (c CPUInfo) MPX() bool {
+ return c.Features&MPX != 0
+}
+
+// ERMS indicates support of Enhanced REP MOVSB/STOSB
+func (c CPUInfo) ERMS() bool {
+ return c.Features&ERMS != 0
+}
+
+// RDTSCP Instruction is available.
+func (c CPUInfo) RDTSCP() bool {
+ return c.Features&RDTSCP != 0
+}
+
+// CX16 indicates if CMPXCHG16B instruction is available.
+func (c CPUInfo) CX16() bool {
+ return c.Features&CX16 != 0
+}
+
+// TSX is split into HLE (Hardware Lock Elision) and RTM (Restricted Transactional Memory) detection.
+// So TSX simply checks that.
+func (c CPUInfo) TSX() bool {
+ return c.Features&(HLE|RTM) == HLE|RTM
+}
+
+// Atom indicates an Atom processor
+func (c CPUInfo) Atom() bool {
+ return c.Features&ATOM != 0
+}
+
+// Intel returns true if vendor is recognized as Intel
+func (c CPUInfo) Intel() bool {
+ return c.VendorID == Intel
+}
+
+// AMD returns true if vendor is recognized as AMD
+func (c CPUInfo) AMD() bool {
+ return c.VendorID == AMD
+}
+
+// Transmeta returns true if vendor is recognized as Transmeta
+func (c CPUInfo) Transmeta() bool {
+ return c.VendorID == Transmeta
+}
+
+// NSC returns true if vendor is recognized as National Semiconductor
+func (c CPUInfo) NSC() bool {
+ return c.VendorID == NSC
+}
+
+// VIA returns true if vendor is recognized as VIA
+func (c CPUInfo) VIA() bool {
+ return c.VendorID == VIA
+}
+
+// RTCounter returns the 64-bit time-stamp counter
+// Uses the RDTSCP instruction. The value 0 is returned
+// if the CPU does not support the instruction.
+func (c CPUInfo) RTCounter() uint64 {
+ if !c.RDTSCP() {
+ return 0
+ }
+ a, _, _, d := rdtscpAsm()
+ return uint64(a) | (uint64(d) << 32)
+}
+
+// Ia32TscAux returns the IA32_TSC_AUX part of the RDTSCP.
+// This variable is OS dependent, but on Linux contains information
+// about the current cpu/core the code is running on.
+// If the RDTSCP instruction isn't supported on the CPU, the value 0 is returned.
+func (c CPUInfo) Ia32TscAux() uint32 {
+ if !c.RDTSCP() {
+ return 0
+ }
+ _, _, ecx, _ := rdtscpAsm()
+ return ecx
+}
+
+// LogicalCPU will return the Logical CPU the code is currently executing on.
+// This is likely to change when the OS re-schedules the running thread
+// to another CPU.
+// If the current core cannot be detected, -1 will be returned.
+func (c CPUInfo) LogicalCPU() int {
+ if c.maxFunc < 1 {
+ return -1
+ }
+ _, ebx, _, _ := cpuid(1)
+ return int(ebx >> 24)
+}
+
+// VM Will return true if the cpu id indicates we are in
+// a virtual machine. This is only a hint, and will very likely
+// have many false negatives.
+func (c CPUInfo) VM() bool {
+ switch c.VendorID {
+ case MSVM, KVM, VMware, XenHVM:
+ return true
+ }
+ return false
+}
+
+// Flags contains detected cpu features and caracteristics
+type Flags uint64
+
+// String returns a string representation of the detected
+// CPU features.
+func (f Flags) String() string {
+ return strings.Join(f.Strings(), ",")
+}
+
+// Strings returns and array of the detected features.
+func (f Flags) Strings() []string {
+ s := support()
+ r := make([]string, 0, 20)
+ for i := uint(0); i < 64; i++ {
+ key := Flags(1 << i)
+ val := flagNames[key]
+ if s&key != 0 {
+ r = append(r, val)
+ }
+ }
+ return r
+}
+
+func maxExtendedFunction() uint32 {
+ eax, _, _, _ := cpuid(0x80000000)
+ return eax
+}
+
+func maxFunctionID() uint32 {
+ a, _, _, _ := cpuid(0)
+ return a
+}
+
+func brandName() string {
+ if maxExtendedFunction() >= 0x80000004 {
+ v := make([]uint32, 0, 48)
+ for i := uint32(0); i < 3; i++ {
+ a, b, c, d := cpuid(0x80000002 + i)
+ v = append(v, a, b, c, d)
+ }
+ return strings.Trim(string(valAsString(v...)), " ")
+ }
+ return "unknown"
+}
+
+func threadsPerCore() int {
+ mfi := maxFunctionID()
+ if mfi < 0x4 || vendorID() != Intel {
+ return 1
+ }
+
+ if mfi < 0xb {
+ _, b, _, d := cpuid(1)
+ if (d & (1 << 28)) != 0 {
+ // v will contain logical core count
+ v := (b >> 16) & 255
+ if v > 1 {
+ a4, _, _, _ := cpuid(4)
+ // physical cores
+ v2 := (a4 >> 26) + 1
+ if v2 > 0 {
+ return int(v) / int(v2)
+ }
+ }
+ }
+ return 1
+ }
+ _, b, _, _ := cpuidex(0xb, 0)
+ if b&0xffff == 0 {
+ return 1
+ }
+ return int(b & 0xffff)
+}
+
+func logicalCores() int {
+ mfi := maxFunctionID()
+ switch vendorID() {
+ case Intel:
+ // Use this on old Intel processors
+ if mfi < 0xb {
+ if mfi < 1 {
+ return 0
+ }
+ // CPUID.1:EBX[23:16] represents the maximum number of addressable IDs (initial APIC ID)
+ // that can be assigned to logical processors in a physical package.
+ // The value may not be the same as the number of logical processors that are present in the hardware of a physical package.
+ _, ebx, _, _ := cpuid(1)
+ logical := (ebx >> 16) & 0xff
+ return int(logical)
+ }
+ _, b, _, _ := cpuidex(0xb, 1)
+ return int(b & 0xffff)
+ case AMD:
+ _, b, _, _ := cpuid(1)
+ return int((b >> 16) & 0xff)
+ default:
+ return 0
+ }
+}
+
+func familyModel() (int, int) {
+ if maxFunctionID() < 0x1 {
+ return 0, 0
+ }
+ eax, _, _, _ := cpuid(1)
+ family := ((eax >> 8) & 0xf) + ((eax >> 20) & 0xff)
+ model := ((eax >> 4) & 0xf) + ((eax >> 12) & 0xf0)
+ return int(family), int(model)
+}
+
+func physicalCores() int {
+ switch vendorID() {
+ case Intel:
+ return logicalCores() / threadsPerCore()
+ case AMD:
+ if maxExtendedFunction() >= 0x80000008 {
+ _, _, c, _ := cpuid(0x80000008)
+ return int(c&0xff) + 1
+ }
+ }
+ return 0
+}
+
+// Except from http://en.wikipedia.org/wiki/CPUID#EAX.3D0:_Get_vendor_ID
+var vendorMapping = map[string]Vendor{
+ "AMDisbetter!": AMD,
+ "AuthenticAMD": AMD,
+ "CentaurHauls": VIA,
+ "GenuineIntel": Intel,
+ "TransmetaCPU": Transmeta,
+ "GenuineTMx86": Transmeta,
+ "Geode by NSC": NSC,
+ "VIA VIA VIA ": VIA,
+ "KVMKVMKVMKVM": KVM,
+ "Microsoft Hv": MSVM,
+ "VMwareVMware": VMware,
+ "XenVMMXenVMM": XenHVM,
+}
+
+func vendorID() Vendor {
+ _, b, c, d := cpuid(0)
+ v := valAsString(b, d, c)
+ vend, ok := vendorMapping[string(v)]
+ if !ok {
+ return Other
+ }
+ return vend
+}
+
+func cacheLine() int {
+ if maxFunctionID() < 0x1 {
+ return 0
+ }
+
+ _, ebx, _, _ := cpuid(1)
+ cache := (ebx & 0xff00) >> 5 // cflush size
+ if cache == 0 && maxExtendedFunction() >= 0x80000006 {
+ _, _, ecx, _ := cpuid(0x80000006)
+ cache = ecx & 0xff // cacheline size
+ }
+ // TODO: Read from Cache and TLB Information
+ return int(cache)
+}
+
+func (c *CPUInfo) cacheSize() {
+ c.Cache.L1D = -1
+ c.Cache.L1I = -1
+ c.Cache.L2 = -1
+ c.Cache.L3 = -1
+ vendor := vendorID()
+ switch vendor {
+ case Intel:
+ if maxFunctionID() < 4 {
+ return
+ }
+ for i := uint32(0); ; i++ {
+ eax, ebx, ecx, _ := cpuidex(4, i)
+ cacheType := eax & 15
+ if cacheType == 0 {
+ break
+ }
+ cacheLevel := (eax >> 5) & 7
+ coherency := int(ebx&0xfff) + 1
+ partitions := int((ebx>>12)&0x3ff) + 1
+ associativity := int((ebx>>22)&0x3ff) + 1
+ sets := int(ecx) + 1
+ size := associativity * partitions * coherency * sets
+ switch cacheLevel {
+ case 1:
+ if cacheType == 1 {
+ // 1 = Data Cache
+ c.Cache.L1D = size
+ } else if cacheType == 2 {
+ // 2 = Instruction Cache
+ c.Cache.L1I = size
+ } else {
+ if c.Cache.L1D < 0 {
+ c.Cache.L1I = size
+ }
+ if c.Cache.L1I < 0 {
+ c.Cache.L1I = size
+ }
+ }
+ case 2:
+ c.Cache.L2 = size
+ case 3:
+ c.Cache.L3 = size
+ }
+ }
+ case AMD:
+ // Untested.
+ if maxExtendedFunction() < 0x80000005 {
+ return
+ }
+ _, _, ecx, edx := cpuid(0x80000005)
+ c.Cache.L1D = int(((ecx >> 24) & 0xFF) * 1024)
+ c.Cache.L1I = int(((edx >> 24) & 0xFF) * 1024)
+
+ if maxExtendedFunction() < 0x80000006 {
+ return
+ }
+ _, _, ecx, _ = cpuid(0x80000006)
+ c.Cache.L2 = int(((ecx >> 16) & 0xFFFF) * 1024)
+ }
+
+ return
+}
+
+type SGXSupport struct {
+ Available bool
+ SGX1Supported bool
+ SGX2Supported bool
+ MaxEnclaveSizeNot64 int64
+ MaxEnclaveSize64 int64
+}
+
+func hasSGX(available bool) (rval SGXSupport) {
+ rval.Available = available
+
+ if !available {
+ return
+ }
+
+ a, _, _, d := cpuidex(0x12, 0)
+ rval.SGX1Supported = a&0x01 != 0
+ rval.SGX2Supported = a&0x02 != 0
+ rval.MaxEnclaveSizeNot64 = 1 << (d & 0xFF) // pow 2
+ rval.MaxEnclaveSize64 = 1 << ((d >> 8) & 0xFF) // pow 2
+
+ return
+}
+
+func support() Flags {
+ mfi := maxFunctionID()
+ vend := vendorID()
+ if mfi < 0x1 {
+ return 0
+ }
+ rval := uint64(0)
+ _, _, c, d := cpuid(1)
+ if (d & (1 << 15)) != 0 {
+ rval |= CMOV
+ }
+ if (d & (1 << 23)) != 0 {
+ rval |= MMX
+ }
+ if (d & (1 << 25)) != 0 {
+ rval |= MMXEXT
+ }
+ if (d & (1 << 25)) != 0 {
+ rval |= SSE
+ }
+ if (d & (1 << 26)) != 0 {
+ rval |= SSE2
+ }
+ if (c & 1) != 0 {
+ rval |= SSE3
+ }
+ if (c & 0x00000200) != 0 {
+ rval |= SSSE3
+ }
+ if (c & 0x00080000) != 0 {
+ rval |= SSE4
+ }
+ if (c & 0x00100000) != 0 {
+ rval |= SSE42
+ }
+ if (c & (1 << 25)) != 0 {
+ rval |= AESNI
+ }
+ if (c & (1 << 1)) != 0 {
+ rval |= CLMUL
+ }
+ if c&(1<<23) != 0 {
+ rval |= POPCNT
+ }
+ if c&(1<<30) != 0 {
+ rval |= RDRAND
+ }
+ if c&(1<<29) != 0 {
+ rval |= F16C
+ }
+ if c&(1<<13) != 0 {
+ rval |= CX16
+ }
+ if vend == Intel && (d&(1<<28)) != 0 && mfi >= 4 {
+ if threadsPerCore() > 1 {
+ rval |= HTT
+ }
+ }
+
+ // Check XGETBV, OXSAVE and AVX bits
+ if c&(1<<26) != 0 && c&(1<<27) != 0 && c&(1<<28) != 0 {
+ // Check for OS support
+ eax, _ := xgetbv(0)
+ if (eax & 0x6) == 0x6 {
+ rval |= AVX
+ if (c & 0x00001000) != 0 {
+ rval |= FMA3
+ }
+ }
+ }
+
+ // Check AVX2, AVX2 requires OS support, but BMI1/2 don't.
+ if mfi >= 7 {
+ _, ebx, ecx, edx := cpuidex(7, 0)
+ if (rval&AVX) != 0 && (ebx&0x00000020) != 0 {
+ rval |= AVX2
+ }
+ if (ebx & 0x00000008) != 0 {
+ rval |= BMI1
+ if (ebx & 0x00000100) != 0 {
+ rval |= BMI2
+ }
+ }
+ if ebx&(1<<2) != 0 {
+ rval |= SGX
+ }
+ if ebx&(1<<4) != 0 {
+ rval |= HLE
+ }
+ if ebx&(1<<9) != 0 {
+ rval |= ERMS
+ }
+ if ebx&(1<<11) != 0 {
+ rval |= RTM
+ }
+ if ebx&(1<<14) != 0 {
+ rval |= MPX
+ }
+ if ebx&(1<<18) != 0 {
+ rval |= RDSEED
+ }
+ if ebx&(1<<19) != 0 {
+ rval |= ADX
+ }
+ if ebx&(1<<29) != 0 {
+ rval |= SHA
+ }
+ if edx&(1<<26) != 0 {
+ rval |= IBPB
+ }
+ if edx&(1<<27) != 0 {
+ rval |= STIBP
+ }
+
+ // Only detect AVX-512 features if XGETBV is supported
+ if c&((1<<26)|(1<<27)) == (1<<26)|(1<<27) {
+ // Check for OS support
+ eax, _ := xgetbv(0)
+
+ // Verify that XCR0[7:5] = ‘111b’ (OPMASK state, upper 256-bit of ZMM0-ZMM15 and
+ // ZMM16-ZMM31 state are enabled by OS)
+ /// and that XCR0[2:1] = ‘11b’ (XMM state and YMM state are enabled by OS).
+ if (eax>>5)&7 == 7 && (eax>>1)&3 == 3 {
+ if ebx&(1<<16) != 0 {
+ rval |= AVX512F
+ }
+ if ebx&(1<<17) != 0 {
+ rval |= AVX512DQ
+ }
+ if ebx&(1<<21) != 0 {
+ rval |= AVX512IFMA
+ }
+ if ebx&(1<<26) != 0 {
+ rval |= AVX512PF
+ }
+ if ebx&(1<<27) != 0 {
+ rval |= AVX512ER
+ }
+ if ebx&(1<<28) != 0 {
+ rval |= AVX512CD
+ }
+ if ebx&(1<<30) != 0 {
+ rval |= AVX512BW
+ }
+ if ebx&(1<<31) != 0 {
+ rval |= AVX512VL
+ }
+ // ecx
+ if ecx&(1<<1) != 0 {
+ rval |= AVX512VBMI
+ }
+ }
+ }
+ }
+
+ if maxExtendedFunction() >= 0x80000001 {
+ _, _, c, d := cpuid(0x80000001)
+ if (c & (1 << 5)) != 0 {
+ rval |= LZCNT
+ rval |= POPCNT
+ }
+ if (d & (1 << 31)) != 0 {
+ rval |= AMD3DNOW
+ }
+ if (d & (1 << 30)) != 0 {
+ rval |= AMD3DNOWEXT
+ }
+ if (d & (1 << 23)) != 0 {
+ rval |= MMX
+ }
+ if (d & (1 << 22)) != 0 {
+ rval |= MMXEXT
+ }
+ if (c & (1 << 6)) != 0 {
+ rval |= SSE4A
+ }
+ if d&(1<<20) != 0 {
+ rval |= NX
+ }
+ if d&(1<<27) != 0 {
+ rval |= RDTSCP
+ }
+
+ /* Allow for selectively disabling SSE2 functions on AMD processors
+ with SSE2 support but not SSE4a. This includes Athlon64, some
+ Opteron, and some Sempron processors. MMX, SSE, or 3DNow! are faster
+ than SSE2 often enough to utilize this special-case flag.
+ AV_CPU_FLAG_SSE2 and AV_CPU_FLAG_SSE2SLOW are both set in this case
+ so that SSE2 is used unless explicitly disabled by checking
+ AV_CPU_FLAG_SSE2SLOW. */
+ if vendorID() != Intel &&
+ rval&SSE2 != 0 && (c&0x00000040) == 0 {
+ rval |= SSE2SLOW
+ }
+
+ /* XOP and FMA4 use the AVX instruction coding scheme, so they can't be
+ * used unless the OS has AVX support. */
+ if (rval & AVX) != 0 {
+ if (c & 0x00000800) != 0 {
+ rval |= XOP
+ }
+ if (c & 0x00010000) != 0 {
+ rval |= FMA4
+ }
+ }
+
+ if vendorID() == Intel {
+ family, model := familyModel()
+ if family == 6 && (model == 9 || model == 13 || model == 14) {
+ /* 6/9 (pentium-m "banias"), 6/13 (pentium-m "dothan"), and
+ * 6/14 (core1 "yonah") theoretically support sse2, but it's
+ * usually slower than mmx. */
+ if (rval & SSE2) != 0 {
+ rval |= SSE2SLOW
+ }
+ if (rval & SSE3) != 0 {
+ rval |= SSE3SLOW
+ }
+ }
+ /* The Atom processor has SSSE3 support, which is useful in many cases,
+ * but sometimes the SSSE3 version is slower than the SSE2 equivalent
+ * on the Atom, but is generally faster on other processors supporting
+ * SSSE3. This flag allows for selectively disabling certain SSSE3
+ * functions on the Atom. */
+ if family == 6 && model == 28 {
+ rval |= ATOM
+ }
+ }
+ }
+ return Flags(rval)
+}
+
+func valAsString(values ...uint32) []byte {
+ r := make([]byte, 4*len(values))
+ for i, v := range values {
+ dst := r[i*4:]
+ dst[0] = byte(v & 0xff)
+ dst[1] = byte((v >> 8) & 0xff)
+ dst[2] = byte((v >> 16) & 0xff)
+ dst[3] = byte((v >> 24) & 0xff)
+ switch {
+ case dst[0] == 0:
+ return r[:i*4]
+ case dst[1] == 0:
+ return r[:i*4+1]
+ case dst[2] == 0:
+ return r[:i*4+2]
+ case dst[3] == 0:
+ return r[:i*4+3]
+ }
+ }
+ return r
+}
diff --git a/vendor/github.com/klauspost/cpuid/cpuid_386.s b/vendor/github.com/klauspost/cpuid/cpuid_386.s
new file mode 100644
index 000000000..4d731711e
--- /dev/null
+++ b/vendor/github.com/klauspost/cpuid/cpuid_386.s
@@ -0,0 +1,42 @@
+// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file.
+
+// +build 386,!gccgo
+
+// func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32)
+TEXT ·asmCpuid(SB), 7, $0
+ XORL CX, CX
+ MOVL op+0(FP), AX
+ CPUID
+ MOVL AX, eax+4(FP)
+ MOVL BX, ebx+8(FP)
+ MOVL CX, ecx+12(FP)
+ MOVL DX, edx+16(FP)
+ RET
+
+// func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32)
+TEXT ·asmCpuidex(SB), 7, $0
+ MOVL op+0(FP), AX
+ MOVL op2+4(FP), CX
+ CPUID
+ MOVL AX, eax+8(FP)
+ MOVL BX, ebx+12(FP)
+ MOVL CX, ecx+16(FP)
+ MOVL DX, edx+20(FP)
+ RET
+
+// func xgetbv(index uint32) (eax, edx uint32)
+TEXT ·asmXgetbv(SB), 7, $0
+ MOVL index+0(FP), CX
+ BYTE $0x0f; BYTE $0x01; BYTE $0xd0 // XGETBV
+ MOVL AX, eax+4(FP)
+ MOVL DX, edx+8(FP)
+ RET
+
+// func asmRdtscpAsm() (eax, ebx, ecx, edx uint32)
+TEXT ·asmRdtscpAsm(SB), 7, $0
+ BYTE $0x0F; BYTE $0x01; BYTE $0xF9 // RDTSCP
+ MOVL AX, eax+0(FP)
+ MOVL BX, ebx+4(FP)
+ MOVL CX, ecx+8(FP)
+ MOVL DX, edx+12(FP)
+ RET
diff --git a/vendor/github.com/klauspost/cpuid/cpuid_amd64.s b/vendor/github.com/klauspost/cpuid/cpuid_amd64.s
new file mode 100644
index 000000000..3c1d60e42
--- /dev/null
+++ b/vendor/github.com/klauspost/cpuid/cpuid_amd64.s
@@ -0,0 +1,42 @@
+// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file.
+
+//+build amd64,!gccgo
+
+// func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32)
+TEXT ·asmCpuid(SB), 7, $0
+ XORQ CX, CX
+ MOVL op+0(FP), AX
+ CPUID
+ MOVL AX, eax+8(FP)
+ MOVL BX, ebx+12(FP)
+ MOVL CX, ecx+16(FP)
+ MOVL DX, edx+20(FP)
+ RET
+
+// func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32)
+TEXT ·asmCpuidex(SB), 7, $0
+ MOVL op+0(FP), AX
+ MOVL op2+4(FP), CX
+ CPUID
+ MOVL AX, eax+8(FP)
+ MOVL BX, ebx+12(FP)
+ MOVL CX, ecx+16(FP)
+ MOVL DX, edx+20(FP)
+ RET
+
+// func asmXgetbv(index uint32) (eax, edx uint32)
+TEXT ·asmXgetbv(SB), 7, $0
+ MOVL index+0(FP), CX
+ BYTE $0x0f; BYTE $0x01; BYTE $0xd0 // XGETBV
+ MOVL AX, eax+8(FP)
+ MOVL DX, edx+12(FP)
+ RET
+
+// func asmRdtscpAsm() (eax, ebx, ecx, edx uint32)
+TEXT ·asmRdtscpAsm(SB), 7, $0
+ BYTE $0x0F; BYTE $0x01; BYTE $0xF9 // RDTSCP
+ MOVL AX, eax+0(FP)
+ MOVL BX, ebx+4(FP)
+ MOVL CX, ecx+8(FP)
+ MOVL DX, edx+12(FP)
+ RET
diff --git a/vendor/github.com/klauspost/cpuid/detect_intel.go b/vendor/github.com/klauspost/cpuid/detect_intel.go
new file mode 100644
index 000000000..a5f04dd6d
--- /dev/null
+++ b/vendor/github.com/klauspost/cpuid/detect_intel.go
@@ -0,0 +1,17 @@
+// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file.
+
+// +build 386,!gccgo amd64,!gccgo
+
+package cpuid
+
+func asmCpuid(op uint32) (eax, ebx, ecx, edx uint32)
+func asmCpuidex(op, op2 uint32) (eax, ebx, ecx, edx uint32)
+func asmXgetbv(index uint32) (eax, edx uint32)
+func asmRdtscpAsm() (eax, ebx, ecx, edx uint32)
+
+func initCPU() {
+ cpuid = asmCpuid
+ cpuidex = asmCpuidex
+ xgetbv = asmXgetbv
+ rdtscpAsm = asmRdtscpAsm
+}
diff --git a/vendor/github.com/klauspost/cpuid/detect_ref.go b/vendor/github.com/klauspost/cpuid/detect_ref.go
new file mode 100644
index 000000000..909c5d9a7
--- /dev/null
+++ b/vendor/github.com/klauspost/cpuid/detect_ref.go
@@ -0,0 +1,23 @@
+// Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file.
+
+// +build !amd64,!386 gccgo
+
+package cpuid
+
+func initCPU() {
+ cpuid = func(op uint32) (eax, ebx, ecx, edx uint32) {
+ return 0, 0, 0, 0
+ }
+
+ cpuidex = func(op, op2 uint32) (eax, ebx, ecx, edx uint32) {
+ return 0, 0, 0, 0
+ }
+
+ xgetbv = func(index uint32) (eax, edx uint32) {
+ return 0, 0
+ }
+
+ rdtscpAsm = func() (eax, ebx, ecx, edx uint32) {
+ return 0, 0, 0, 0
+ }
+}
diff --git a/vendor/github.com/klauspost/cpuid/generate.go b/vendor/github.com/klauspost/cpuid/generate.go
new file mode 100644
index 000000000..90e7a98d2
--- /dev/null
+++ b/vendor/github.com/klauspost/cpuid/generate.go
@@ -0,0 +1,4 @@
+package cpuid
+
+//go:generate go run private-gen.go
+//go:generate gofmt -w ./private
diff --git a/vendor/github.com/klauspost/pgzip/GO_LICENSE b/vendor/github.com/klauspost/pgzip/GO_LICENSE
new file mode 100644
index 000000000..744875676
--- /dev/null
+++ b/vendor/github.com/klauspost/pgzip/GO_LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2012 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/klauspost/pgzip/LICENSE b/vendor/github.com/klauspost/pgzip/LICENSE
new file mode 100644
index 000000000..2bdc0d751
--- /dev/null
+++ b/vendor/github.com/klauspost/pgzip/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Klaus Post
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/vendor/github.com/klauspost/pgzip/README.md b/vendor/github.com/klauspost/pgzip/README.md
new file mode 100644
index 000000000..81000996c
--- /dev/null
+++ b/vendor/github.com/klauspost/pgzip/README.md
@@ -0,0 +1,136 @@
+pgzip
+=====
+
+Go parallel gzip compression/decompression. This is a fully gzip compatible drop in replacement for "compress/gzip".
+
+This will split compression into blocks that are compressed in parallel.
+This can be useful for compressing big amounts of data. The output is a standard gzip file.
+
+The gzip decompression is modified so it decompresses ahead of the current reader.
+This means that reads will be non-blocking if the decompressor can keep ahead of your code reading from it.
+CRC calculation also takes place in a separate goroutine.
+
+You should only use this if you are (de)compressing big amounts of data,
+say **more than 1MB** at the time, otherwise you will not see any benefit,
+and it will likely be faster to use the internal gzip library
+or [this package](https://github.com/klauspost/compress).
+
+It is important to note that this library creates and reads *standard gzip files*.
+You do not have to match the compressor/decompressor to get the described speedups,
+and the gzip files are fully compatible with other gzip readers/writers.
+
+A golang variant of this is [bgzf](https://godoc.org/github.com/biogo/hts/bgzf),
+which has the same feature, as well as seeking in the resulting file.
+The only drawback is a slightly bigger overhead compared to this and pure gzip.
+See a comparison below.
+
+[![GoDoc][1]][2] [![Build Status][3]][4]
+
+[1]: https://godoc.org/github.com/klauspost/pgzip?status.svg
+[2]: https://godoc.org/github.com/klauspost/pgzip
+[3]: https://travis-ci.org/klauspost/pgzip.svg
+[4]: https://travis-ci.org/klauspost/pgzip
+
+Installation
+====
+```go get github.com/klauspost/pgzip/...```
+
+You might need to get/update the dependencies:
+
+```
+go get -u github.com/klauspost/compress
+go get -u github.com/klauspost/crc32
+```
+
+Usage
+====
+[Godoc Doumentation](https://godoc.org/github.com/klauspost/pgzip)
+
+To use as a replacement for gzip, exchange
+
+```import "compress/gzip"```
+with
+```import gzip "github.com/klauspost/pgzip"```.
+
+# Changes
+
+* Oct 6, 2016: Fixed an issue if the destination writer returned an error.
+* Oct 6, 2016: Better buffer reuse, should now generate less garbage.
+* Oct 6, 2016: Output does not change based on write sizes.
+* Dec 8, 2015: Decoder now supports the io.WriterTo interface, giving a speedup and less GC pressure.
+* Oct 9, 2015: Reduced allocations by ~35 by using sync.Pool. ~15% overall speedup.
+
+Changes in [github.com/klauspost/compress](https://github.com/klauspost/compress#changelog) are also carried over, so see that for more changes.
+
+## Compression
+The simplest way to use this is to simply do the same as you would when using [compress/gzip](http://golang.org/pkg/compress/gzip).
+
+To change the block size, use the added (*pgzip.Writer).SetConcurrency(blockSize, blocks int) function. With this you can control the approximate size of your blocks, as well as how many you want to be processing in parallel. Default values for this is SetConcurrency(250000, 16), meaning blocks are split at 250000 bytes and up to 16 blocks can be processing at once before the writer blocks.
+
+
+Example:
+```
+var b bytes.Buffer
+w := gzip.NewWriter(&b)
+w.SetConcurrency(100000, 10)
+w.Write([]byte("hello, world\n"))
+w.Close()
+```
+
+To get any performance gains, you should at least be compressing more than 1 megabyte of data at the time.
+
+You should at least have a block size of 100k and at least a number of blocks that match the number of cores your would like to utilize, but about twice the number of blocks would be the best.
+
+Another side effect of this is, that it is likely to speed up your other code, since writes to the compressor only blocks if the compressor is already compressing the number of blocks you have specified. This also means you don't have worry about buffering input to the compressor.
+
+## Decompression
+
+Decompression works similar to compression. That means that you simply call pgzip the same way as you would call [compress/gzip](http://golang.org/pkg/compress/gzip).
+
+The only difference is that if you want to specify your own readahead, you have to use `pgzip.NewReaderN(r io.Reader, blockSize, blocks int)` to get a reader with your custom blocksizes. The `blockSize` is the size of each block decoded, and `blocks` is the maximum number of blocks that is decoded ahead.
+
+See [Example on playground](http://play.golang.org/p/uHv1B5NbDh)
+
+Performance
+====
+## Compression
+
+See my blog post in [Benchmarks of Golang Gzip](https://blog.klauspost.com/go-gzipdeflate-benchmarks/).
+
+Compression cost is usually about 0.2% with default settings with a block size of 250k.
+
+Example with GOMAXPROC set to 8 (quad core with 8 hyperthreads)
+
+Content is [Matt Mahoneys 10GB corpus](http://mattmahoney.net/dc/10gb.html). Compression level 6.
+
+Compressor | MB/sec | speedup | size | size overhead (lower=better)
+------------|----------|---------|------|---------
+[gzip](http://golang.org/pkg/compress/gzip) (golang) | 7.21MB/s | 1.0x | 4786608902 | 0%
+[gzip](http://github.com/klauspost/compress/gzip) (klauspost) | 10.98MB/s | 1.52x | 4781331645 | -0.11%
+[pgzip](https://github.com/klauspost/pgzip) (klauspost) | 50.76MB/s|7.04x | 4784121440 | -0.052%
+[bgzf](https://godoc.org/github.com/biogo/hts/bgzf) (biogo) | 38.65MB/s | 5.36x | 4924899484 | 2.889%
+[pargzip](https://godoc.org/github.com/golang/build/pargzip) (builder) | 32.00MB/s | 4.44x | 4791226567 | 0.096%
+
+pgzip also contains a [linear time compression](https://github.com/klauspost/compress#linear-time-compression) mode, that will allow compression at ~150MB per core per second, independent of the content.
+
+See the [complete sheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing) for different content types and compression settings.
+
+## Decompression
+
+The decompression speedup is there because it allows you to do other work while the decompression is taking place.
+
+In the example above, the numbers are as follows on a 4 CPU machine:
+
+Decompressor | Time | Speedup
+-------------|------|--------
+[gzip](http://golang.org/pkg/compress/gzip) (golang) | 1m28.85s | 0%
+[pgzip](https://github.com/klauspost/pgzip) (golang) | 43.48s | 104%
+
+But wait, since gzip decompression is inherently singlethreaded (aside from CRC calculation) how can it be more than 100% faster? Because pgzip due to its design also acts as a buffer. When using unbuffered gzip, you are also waiting for io when you are decompressing. If the gzip decoder can keep up, it will always have data ready for your reader, and you will not be waiting for input to the gzip decompressor to complete.
+
+This is pretty much an optimal situation for pgzip, but it reflects most common usecases for CPU intensive gzip usage.
+
+I haven't included [bgzf](https://godoc.org/github.com/biogo/hts/bgzf) in this comparison, since it only can decompress files created by a compatible encoder, and therefore cannot be considered a generic gzip decompressor. But if you are able to compress your files with a bgzf compatible program, you can expect it to scale beyond 100%.
+
+# License
+This contains large portions of code from the go repository - see GO_LICENSE for more information. The changes are released under MIT License. See LICENSE for more information.
diff --git a/vendor/github.com/klauspost/pgzip/gunzip.go b/vendor/github.com/klauspost/pgzip/gunzip.go
new file mode 100644
index 000000000..93efec714
--- /dev/null
+++ b/vendor/github.com/klauspost/pgzip/gunzip.go
@@ -0,0 +1,573 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package pgzip implements reading and writing of gzip format compressed files,
+// as specified in RFC 1952.
+//
+// This is a drop in replacement for "compress/gzip".
+// This will split compression into blocks that are compressed in parallel.
+// This can be useful for compressing big amounts of data.
+// The gzip decompression has not been modified, but remains in the package,
+// so you can use it as a complete replacement for "compress/gzip".
+//
+// See more at https://github.com/klauspost/pgzip
+package pgzip
+
+import (
+ "bufio"
+ "errors"
+ "hash"
+ "hash/crc32"
+ "io"
+ "sync"
+ "time"
+
+ "github.com/klauspost/compress/flate"
+)
+
+const (
+ gzipID1 = 0x1f
+ gzipID2 = 0x8b
+ gzipDeflate = 8
+ flagText = 1 << 0
+ flagHdrCrc = 1 << 1
+ flagExtra = 1 << 2
+ flagName = 1 << 3
+ flagComment = 1 << 4
+)
+
+func makeReader(r io.Reader) flate.Reader {
+ if rr, ok := r.(flate.Reader); ok {
+ return rr
+ }
+ return bufio.NewReader(r)
+}
+
+var (
+ // ErrChecksum is returned when reading GZIP data that has an invalid checksum.
+ ErrChecksum = errors.New("gzip: invalid checksum")
+ // ErrHeader is returned when reading GZIP data that has an invalid header.
+ ErrHeader = errors.New("gzip: invalid header")
+)
+
+// The gzip file stores a header giving metadata about the compressed file.
+// That header is exposed as the fields of the Writer and Reader structs.
+type Header struct {
+ Comment string // comment
+ Extra []byte // "extra data"
+ ModTime time.Time // modification time
+ Name string // file name
+ OS byte // operating system type
+}
+
+// A Reader is an io.Reader that can be read to retrieve
+// uncompressed data from a gzip-format compressed file.
+//
+// In general, a gzip file can be a concatenation of gzip files,
+// each with its own header. Reads from the Reader
+// return the concatenation of the uncompressed data of each.
+// Only the first header is recorded in the Reader fields.
+//
+// Gzip files store a length and checksum of the uncompressed data.
+// The Reader will return a ErrChecksum when Read
+// reaches the end of the uncompressed data if it does not
+// have the expected length or checksum. Clients should treat data
+// returned by Read as tentative until they receive the io.EOF
+// marking the end of the data.
+type Reader struct {
+ Header
+ r flate.Reader
+ decompressor io.ReadCloser
+ digest hash.Hash32
+ size uint32
+ flg byte
+ buf [512]byte
+ err error
+ closeErr chan error
+ multistream bool
+
+ readAhead chan read
+ roff int // read offset
+ current []byte
+ closeReader chan struct{}
+ lastBlock bool
+ blockSize int
+ blocks int
+
+ activeRA bool // Indication if readahead is active
+ mu sync.Mutex // Lock for above
+
+ blockPool chan []byte
+}
+
+type read struct {
+ b []byte
+ err error
+}
+
+// NewReader creates a new Reader reading the given reader.
+// The implementation buffers input and may read more data than necessary from r.
+// It is the caller's responsibility to call Close on the Reader when done.
+func NewReader(r io.Reader) (*Reader, error) {
+ z := new(Reader)
+ z.blocks = defaultBlocks
+ z.blockSize = defaultBlockSize
+ z.r = makeReader(r)
+ z.digest = crc32.NewIEEE()
+ z.multistream = true
+ z.blockPool = make(chan []byte, z.blocks)
+ for i := 0; i < z.blocks; i++ {
+ z.blockPool <- make([]byte, z.blockSize)
+ }
+ if err := z.readHeader(true); err != nil {
+ return nil, err
+ }
+ return z, nil
+}
+
+// NewReaderN creates a new Reader reading the given reader.
+// The implementation buffers input and may read more data than necessary from r.
+// It is the caller's responsibility to call Close on the Reader when done.
+//
+// With this you can control the approximate size of your blocks,
+// as well as how many blocks you want to have prefetched.
+//
+// Default values for this is blockSize = 250000, blocks = 16,
+// meaning up to 16 blocks of maximum 250000 bytes will be
+// prefetched.
+func NewReaderN(r io.Reader, blockSize, blocks int) (*Reader, error) {
+ z := new(Reader)
+ z.blocks = blocks
+ z.blockSize = blockSize
+ z.r = makeReader(r)
+ z.digest = crc32.NewIEEE()
+ z.multistream = true
+
+ // Account for too small values
+ if z.blocks <= 0 {
+ z.blocks = defaultBlocks
+ }
+ if z.blockSize <= 512 {
+ z.blockSize = defaultBlockSize
+ }
+ z.blockPool = make(chan []byte, z.blocks)
+ for i := 0; i < z.blocks; i++ {
+ z.blockPool <- make([]byte, z.blockSize)
+ }
+ if err := z.readHeader(true); err != nil {
+ return nil, err
+ }
+ return z, nil
+}
+
+// Reset discards the Reader z's state and makes it equivalent to the
+// result of its original state from NewReader, but reading from r instead.
+// This permits reusing a Reader rather than allocating a new one.
+func (z *Reader) Reset(r io.Reader) error {
+ z.killReadAhead()
+ z.r = makeReader(r)
+ z.digest = crc32.NewIEEE()
+ z.size = 0
+ z.err = nil
+ z.multistream = true
+
+ // Account for uninitialized values
+ if z.blocks <= 0 {
+ z.blocks = defaultBlocks
+ }
+ if z.blockSize <= 512 {
+ z.blockSize = defaultBlockSize
+ }
+
+ if z.blockPool == nil {
+ z.blockPool = make(chan []byte, z.blocks)
+ for i := 0; i < z.blocks; i++ {
+ z.blockPool <- make([]byte, z.blockSize)
+ }
+ }
+
+ return z.readHeader(true)
+}
+
+// Multistream controls whether the reader supports multistream files.
+//
+// If enabled (the default), the Reader expects the input to be a sequence
+// of individually gzipped data streams, each with its own header and
+// trailer, ending at EOF. The effect is that the concatenation of a sequence
+// of gzipped files is treated as equivalent to the gzip of the concatenation
+// of the sequence. This is standard behavior for gzip readers.
+//
+// Calling Multistream(false) disables this behavior; disabling the behavior
+// can be useful when reading file formats that distinguish individual gzip
+// data streams or mix gzip data streams with other data streams.
+// In this mode, when the Reader reaches the end of the data stream,
+// Read returns io.EOF. If the underlying reader implements io.ByteReader,
+// it will be left positioned just after the gzip stream.
+// To start the next stream, call z.Reset(r) followed by z.Multistream(false).
+// If there is no next stream, z.Reset(r) will return io.EOF.
+func (z *Reader) Multistream(ok bool) {
+ z.multistream = ok
+}
+
+// GZIP (RFC 1952) is little-endian, unlike ZLIB (RFC 1950).
+func get4(p []byte) uint32 {
+ return uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | uint32(p[3])<<24
+}
+
+func (z *Reader) readString() (string, error) {
+ var err error
+ needconv := false
+ for i := 0; ; i++ {
+ if i >= len(z.buf) {
+ return "", ErrHeader
+ }
+ z.buf[i], err = z.r.ReadByte()
+ if err != nil {
+ return "", err
+ }
+ if z.buf[i] > 0x7f {
+ needconv = true
+ }
+ if z.buf[i] == 0 {
+ // GZIP (RFC 1952) specifies that strings are NUL-terminated ISO 8859-1 (Latin-1).
+ if needconv {
+ s := make([]rune, 0, i)
+ for _, v := range z.buf[0:i] {
+ s = append(s, rune(v))
+ }
+ return string(s), nil
+ }
+ return string(z.buf[0:i]), nil
+ }
+ }
+}
+
+func (z *Reader) read2() (uint32, error) {
+ _, err := io.ReadFull(z.r, z.buf[0:2])
+ if err != nil {
+ return 0, err
+ }
+ return uint32(z.buf[0]) | uint32(z.buf[1])<<8, nil
+}
+
+func (z *Reader) readHeader(save bool) error {
+ z.killReadAhead()
+
+ _, err := io.ReadFull(z.r, z.buf[0:10])
+ if err != nil {
+ return err
+ }
+ if z.buf[0] != gzipID1 || z.buf[1] != gzipID2 || z.buf[2] != gzipDeflate {
+ return ErrHeader
+ }
+ z.flg = z.buf[3]
+ if save {
+ z.ModTime = time.Unix(int64(get4(z.buf[4:8])), 0)
+ // z.buf[8] is xfl, ignored
+ z.OS = z.buf[9]
+ }
+ z.digest.Reset()
+ z.digest.Write(z.buf[0:10])
+
+ if z.flg&flagExtra != 0 {
+ n, err := z.read2()
+ if err != nil {
+ return err
+ }
+ data := make([]byte, n)
+ if _, err = io.ReadFull(z.r, data); err != nil {
+ return err
+ }
+ if save {
+ z.Extra = data
+ }
+ }
+
+ var s string
+ if z.flg&flagName != 0 {
+ if s, err = z.readString(); err != nil {
+ return err
+ }
+ if save {
+ z.Name = s
+ }
+ }
+
+ if z.flg&flagComment != 0 {
+ if s, err = z.readString(); err != nil {
+ return err
+ }
+ if save {
+ z.Comment = s
+ }
+ }
+
+ if z.flg&flagHdrCrc != 0 {
+ n, err := z.read2()
+ if err != nil {
+ return err
+ }
+ sum := z.digest.Sum32() & 0xFFFF
+ if n != sum {
+ return ErrHeader
+ }
+ }
+
+ z.digest.Reset()
+ z.decompressor = flate.NewReader(z.r)
+ z.doReadAhead()
+ return nil
+}
+
+func (z *Reader) killReadAhead() error {
+ z.mu.Lock()
+ defer z.mu.Unlock()
+ if z.activeRA {
+ if z.closeReader != nil {
+ close(z.closeReader)
+ }
+
+ // Wait for decompressor to be closed and return error, if any.
+ e, ok := <-z.closeErr
+ z.activeRA = false
+ if !ok {
+ // Channel is closed, so if there was any error it has already been returned.
+ return nil
+ }
+ return e
+ }
+ return nil
+}
+
+// Starts readahead.
+// Will return on error (including io.EOF)
+// or when z.closeReader is closed.
+func (z *Reader) doReadAhead() {
+ z.mu.Lock()
+ defer z.mu.Unlock()
+ z.activeRA = true
+
+ if z.blocks <= 0 {
+ z.blocks = defaultBlocks
+ }
+ if z.blockSize <= 512 {
+ z.blockSize = defaultBlockSize
+ }
+ ra := make(chan read, z.blocks)
+ z.readAhead = ra
+ closeReader := make(chan struct{}, 0)
+ z.closeReader = closeReader
+ z.lastBlock = false
+ closeErr := make(chan error, 1)
+ z.closeErr = closeErr
+ z.size = 0
+ z.roff = 0
+ z.current = nil
+ decomp := z.decompressor
+
+ go func() {
+ defer func() {
+ closeErr <- decomp.Close()
+ close(closeErr)
+ close(ra)
+ }()
+
+ // We hold a local reference to digest, since
+ // it way be changed by reset.
+ digest := z.digest
+ var wg sync.WaitGroup
+ for {
+ var buf []byte
+ select {
+ case buf = <-z.blockPool:
+ case <-closeReader:
+ return
+ }
+ buf = buf[0:z.blockSize]
+ // Try to fill the buffer
+ n, err := io.ReadFull(decomp, buf)
+ if err == io.ErrUnexpectedEOF {
+ if n > 0 {
+ err = nil
+ } else {
+ // If we got zero bytes, we need to establish if
+ // we reached end of stream or truncated stream.
+ _, err = decomp.Read([]byte{})
+ if err == io.EOF {
+ err = nil
+ }
+ }
+ }
+ if n < len(buf) {
+ buf = buf[0:n]
+ }
+ wg.Wait()
+ wg.Add(1)
+ go func() {
+ digest.Write(buf)
+ wg.Done()
+ }()
+ z.size += uint32(n)
+
+ // If we return any error, out digest must be ready
+ if err != nil {
+ wg.Wait()
+ }
+ select {
+ case z.readAhead <- read{b: buf, err: err}:
+ case <-closeReader:
+ // Sent on close, we don't care about the next results
+ return
+ }
+ if err != nil {
+ return
+ }
+ }
+ }()
+}
+
+func (z *Reader) Read(p []byte) (n int, err error) {
+ if z.err != nil {
+ return 0, z.err
+ }
+ if len(p) == 0 {
+ return 0, nil
+ }
+
+ for {
+ if len(z.current) == 0 && !z.lastBlock {
+ read := <-z.readAhead
+
+ if read.err != nil {
+ // If not nil, the reader will have exited
+ z.closeReader = nil
+
+ if read.err != io.EOF {
+ z.err = read.err
+ return
+ }
+ if read.err == io.EOF {
+ z.lastBlock = true
+ err = nil
+ }
+ }
+ z.current = read.b
+ z.roff = 0
+ }
+ avail := z.current[z.roff:]
+ if len(p) >= len(avail) {
+ // If len(p) >= len(current), return all content of current
+ n = copy(p, avail)
+ z.blockPool <- z.current
+ z.current = nil
+ if z.lastBlock {
+ err = io.EOF
+ break
+ }
+ } else {
+ // We copy as much as there is space for
+ n = copy(p, avail)
+ z.roff += n
+ }
+ return
+ }
+
+ // Finished file; check checksum + size.
+ if _, err := io.ReadFull(z.r, z.buf[0:8]); err != nil {
+ z.err = err
+ return 0, err
+ }
+ crc32, isize := get4(z.buf[0:4]), get4(z.buf[4:8])
+ sum := z.digest.Sum32()
+ if sum != crc32 || isize != z.size {
+ z.err = ErrChecksum
+ return 0, z.err
+ }
+
+ // File is ok; should we attempt reading one more?
+ if !z.multistream {
+ return 0, io.EOF
+ }
+
+ // Is there another?
+ if err = z.readHeader(false); err != nil {
+ z.err = err
+ return
+ }
+
+ // Yes. Reset and read from it.
+ return z.Read(p)
+}
+
+func (z *Reader) WriteTo(w io.Writer) (n int64, err error) {
+ total := int64(0)
+ for {
+ if z.err != nil {
+ return total, z.err
+ }
+ // We write both to output and digest.
+ for {
+ // Read from input
+ read := <-z.readAhead
+ if read.err != nil {
+ // If not nil, the reader will have exited
+ z.closeReader = nil
+
+ if read.err != io.EOF {
+ z.err = read.err
+ return total, z.err
+ }
+ if read.err == io.EOF {
+ z.lastBlock = true
+ err = nil
+ }
+ }
+ // Write what we got
+ n, err := w.Write(read.b)
+ if n != len(read.b) {
+ return total, io.ErrShortWrite
+ }
+ total += int64(n)
+ if err != nil {
+ return total, err
+ }
+ // Put block back
+ z.blockPool <- read.b
+ if z.lastBlock {
+ break
+ }
+ }
+
+ // Finished file; check checksum + size.
+ if _, err := io.ReadFull(z.r, z.buf[0:8]); err != nil {
+ z.err = err
+ return total, err
+ }
+ crc32, isize := get4(z.buf[0:4]), get4(z.buf[4:8])
+ sum := z.digest.Sum32()
+ if sum != crc32 || isize != z.size {
+ z.err = ErrChecksum
+ return total, z.err
+ }
+ // File is ok; should we attempt reading one more?
+ if !z.multistream {
+ return total, nil
+ }
+
+ // Is there another?
+ err = z.readHeader(false)
+ if err == io.EOF {
+ return total, nil
+ }
+ if err != nil {
+ z.err = err
+ return total, err
+ }
+ }
+}
+
+// Close closes the Reader. It does not close the underlying io.Reader.
+func (z *Reader) Close() error {
+ return z.killReadAhead()
+}
diff --git a/vendor/github.com/klauspost/pgzip/gzip.go b/vendor/github.com/klauspost/pgzip/gzip.go
new file mode 100644
index 000000000..85d14e9cb
--- /dev/null
+++ b/vendor/github.com/klauspost/pgzip/gzip.go
@@ -0,0 +1,501 @@
+// Copyright 2010 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 pgzip
+
+import (
+ "bytes"
+ "errors"
+ "fmt"
+ "hash"
+ "hash/crc32"
+ "io"
+ "sync"
+ "time"
+
+ "github.com/klauspost/compress/flate"
+)
+
+const (
+ defaultBlockSize = 256 << 10
+ tailSize = 16384
+ defaultBlocks = 16
+)
+
+// These constants are copied from the flate package, so that code that imports
+// "compress/gzip" does not also have to import "compress/flate".
+const (
+ NoCompression = flate.NoCompression
+ BestSpeed = flate.BestSpeed
+ BestCompression = flate.BestCompression
+ DefaultCompression = flate.DefaultCompression
+ ConstantCompression = flate.ConstantCompression
+ HuffmanOnly = flate.HuffmanOnly
+)
+
+// A Writer is an io.WriteCloser.
+// Writes to a Writer are compressed and written to w.
+type Writer struct {
+ Header
+ w io.Writer
+ level int
+ wroteHeader bool
+ blockSize int
+ blocks int
+ currentBuffer []byte
+ prevTail []byte
+ digest hash.Hash32
+ size int
+ closed bool
+ buf [10]byte
+ errMu sync.RWMutex
+ err error
+ pushedErr chan struct{}
+ results chan result
+ dictFlatePool sync.Pool
+ dstPool sync.Pool
+ wg sync.WaitGroup
+}
+
+type result struct {
+ result chan []byte
+ notifyWritten chan struct{}
+}
+
+// Use SetConcurrency to finetune the concurrency level if needed.
+//
+// With this you can control the approximate size of your blocks,
+// as well as how many you want to be processing in parallel.
+//
+// Default values for this is SetConcurrency(250000, 16),
+// meaning blocks are split at 250000 bytes and up to 16 blocks
+// can be processing at once before the writer blocks.
+func (z *Writer) SetConcurrency(blockSize, blocks int) error {
+ if blockSize <= tailSize {
+ return fmt.Errorf("gzip: block size cannot be less than or equal to %d", tailSize)
+ }
+ if blocks <= 0 {
+ return errors.New("gzip: blocks cannot be zero or less")
+ }
+ if blockSize == z.blockSize && blocks == z.blocks {
+ return nil
+ }
+ z.blockSize = blockSize
+ z.results = make(chan result, blocks)
+ z.blocks = blocks
+ z.dstPool = sync.Pool{New: func() interface{} { return make([]byte, 0, blockSize+(blockSize)>>4) }}
+ return nil
+}
+
+// NewWriter returns a new Writer.
+// Writes to the returned writer are compressed and written to w.
+//
+// It is the caller's responsibility to call Close on the WriteCloser when done.
+// Writes may be buffered and not flushed until Close.
+//
+// Callers that wish to set the fields in Writer.Header must do so before
+// the first call to Write or Close. The Comment and Name header fields are
+// UTF-8 strings in Go, but the underlying format requires NUL-terminated ISO
+// 8859-1 (Latin-1). NUL or non-Latin-1 runes in those strings will lead to an
+// error on Write.
+func NewWriter(w io.Writer) *Writer {
+ z, _ := NewWriterLevel(w, DefaultCompression)
+ return z
+}
+
+// NewWriterLevel is like NewWriter but specifies the compression level instead
+// of assuming DefaultCompression.
+//
+// The compression level can be DefaultCompression, NoCompression, or any
+// integer value between BestSpeed and BestCompression inclusive. The error
+// returned will be nil if the level is valid.
+func NewWriterLevel(w io.Writer, level int) (*Writer, error) {
+ if level < ConstantCompression || level > BestCompression {
+ return nil, fmt.Errorf("gzip: invalid compression level: %d", level)
+ }
+ z := new(Writer)
+ z.SetConcurrency(defaultBlockSize, defaultBlocks)
+ z.init(w, level)
+ return z, nil
+}
+
+// This function must be used by goroutines to set an
+// error condition, since z.err access is restricted
+// to the callers goruotine.
+func (z *Writer) pushError(err error) {
+ z.errMu.Lock()
+ if z.err != nil {
+ z.errMu.Unlock()
+ return
+ }
+ z.err = err
+ close(z.pushedErr)
+ z.errMu.Unlock()
+}
+
+func (z *Writer) init(w io.Writer, level int) {
+ z.wg.Wait()
+ digest := z.digest
+ if digest != nil {
+ digest.Reset()
+ } else {
+ digest = crc32.NewIEEE()
+ }
+ z.Header = Header{OS: 255}
+ z.w = w
+ z.level = level
+ z.digest = digest
+ z.pushedErr = make(chan struct{}, 0)
+ z.results = make(chan result, z.blocks)
+ z.err = nil
+ z.closed = false
+ z.Comment = ""
+ z.Extra = nil
+ z.ModTime = time.Time{}
+ z.wroteHeader = false
+ z.currentBuffer = nil
+ z.buf = [10]byte{}
+ z.prevTail = nil
+ z.size = 0
+ if z.dictFlatePool.New == nil {
+ z.dictFlatePool.New = func() interface{} {
+ f, _ := flate.NewWriterDict(w, level, nil)
+ return f
+ }
+ }
+}
+
+// Reset discards the Writer z's state and makes it equivalent to the
+// result of its original state from NewWriter or NewWriterLevel, but
+// writing to w instead. This permits reusing a Writer rather than
+// allocating a new one.
+func (z *Writer) Reset(w io.Writer) {
+ if z.results != nil && !z.closed {
+ close(z.results)
+ }
+ z.SetConcurrency(defaultBlockSize, defaultBlocks)
+ z.init(w, z.level)
+}
+
+// GZIP (RFC 1952) is little-endian, unlike ZLIB (RFC 1950).
+func put2(p []byte, v uint16) {
+ p[0] = uint8(v >> 0)
+ p[1] = uint8(v >> 8)
+}
+
+func put4(p []byte, v uint32) {
+ p[0] = uint8(v >> 0)
+ p[1] = uint8(v >> 8)
+ p[2] = uint8(v >> 16)
+ p[3] = uint8(v >> 24)
+}
+
+// writeBytes writes a length-prefixed byte slice to z.w.
+func (z *Writer) writeBytes(b []byte) error {
+ if len(b) > 0xffff {
+ return errors.New("gzip.Write: Extra data is too large")
+ }
+ put2(z.buf[0:2], uint16(len(b)))
+ _, err := z.w.Write(z.buf[0:2])
+ if err != nil {
+ return err
+ }
+ _, err = z.w.Write(b)
+ return err
+}
+
+// writeString writes a UTF-8 string s in GZIP's format to z.w.
+// GZIP (RFC 1952) specifies that strings are NUL-terminated ISO 8859-1 (Latin-1).
+func (z *Writer) writeString(s string) (err error) {
+ // GZIP stores Latin-1 strings; error if non-Latin-1; convert if non-ASCII.
+ needconv := false
+ for _, v := range s {
+ if v == 0 || v > 0xff {
+ return errors.New("gzip.Write: non-Latin-1 header string")
+ }
+ if v > 0x7f {
+ needconv = true
+ }
+ }
+ if needconv {
+ b := make([]byte, 0, len(s))
+ for _, v := range s {
+ b = append(b, byte(v))
+ }
+ _, err = z.w.Write(b)
+ } else {
+ _, err = io.WriteString(z.w, s)
+ }
+ if err != nil {
+ return err
+ }
+ // GZIP strings are NUL-terminated.
+ z.buf[0] = 0
+ _, err = z.w.Write(z.buf[0:1])
+ return err
+}
+
+// compressCurrent will compress the data currently buffered
+// This should only be called from the main writer/flush/closer
+func (z *Writer) compressCurrent(flush bool) {
+ r := result{}
+ r.result = make(chan []byte, 1)
+ r.notifyWritten = make(chan struct{}, 0)
+ select {
+ case z.results <- r:
+ case <-z.pushedErr:
+ return
+ }
+
+ // If block given is more than twice the block size, split it.
+ c := z.currentBuffer
+ if len(c) > z.blockSize*2 {
+ c = c[:z.blockSize]
+ z.wg.Add(1)
+ go z.compressBlock(c, z.prevTail, r, false)
+ z.prevTail = c[len(c)-tailSize:]
+ z.currentBuffer = z.currentBuffer[z.blockSize:]
+ z.compressCurrent(flush)
+ // Last one flushes if needed
+ return
+ }
+
+ z.wg.Add(1)
+ go z.compressBlock(c, z.prevTail, r, z.closed)
+ if len(c) > tailSize {
+ z.prevTail = c[len(c)-tailSize:]
+ } else {
+ z.prevTail = nil
+ }
+ z.currentBuffer = z.dstPool.Get().([]byte)
+ z.currentBuffer = z.currentBuffer[:0]
+
+ // Wait if flushing
+ if flush {
+ <-r.notifyWritten
+ }
+}
+
+// Returns an error if it has been set.
+// Cannot be used by functions that are from internal goroutines.
+func (z *Writer) checkError() error {
+ z.errMu.RLock()
+ err := z.err
+ z.errMu.RUnlock()
+ return err
+}
+
+// Write writes a compressed form of p to the underlying io.Writer. The
+// compressed bytes are not necessarily flushed to output until
+// the Writer is closed or Flush() is called.
+//
+// The function will return quickly, if there are unused buffers.
+// The sent slice (p) is copied, and the caller is free to re-use the buffer
+// when the function returns.
+//
+// Errors that occur during compression will be reported later, and a nil error
+// does not signify that the compression succeeded (since it is most likely still running)
+// That means that the call that returns an error may not be the call that caused it.
+// Only Flush and Close functions are guaranteed to return any errors up to that point.
+func (z *Writer) Write(p []byte) (int, error) {
+ if err := z.checkError(); err != nil {
+ return 0, err
+ }
+ // Write the GZIP header lazily.
+ if !z.wroteHeader {
+ z.wroteHeader = true
+ z.buf[0] = gzipID1
+ z.buf[1] = gzipID2
+ z.buf[2] = gzipDeflate
+ z.buf[3] = 0
+ if z.Extra != nil {
+ z.buf[3] |= 0x04
+ }
+ if z.Name != "" {
+ z.buf[3] |= 0x08
+ }
+ if z.Comment != "" {
+ z.buf[3] |= 0x10
+ }
+ put4(z.buf[4:8], uint32(z.ModTime.Unix()))
+ if z.level == BestCompression {
+ z.buf[8] = 2
+ } else if z.level == BestSpeed {
+ z.buf[8] = 4
+ } else {
+ z.buf[8] = 0
+ }
+ z.buf[9] = z.OS
+ var n int
+ var err error
+ n, err = z.w.Write(z.buf[0:10])
+ if err != nil {
+ z.pushError(err)
+ return n, err
+ }
+ if z.Extra != nil {
+ err = z.writeBytes(z.Extra)
+ if err != nil {
+ z.pushError(err)
+ return n, err
+ }
+ }
+ if z.Name != "" {
+ err = z.writeString(z.Name)
+ if err != nil {
+ z.pushError(err)
+ return n, err
+ }
+ }
+ if z.Comment != "" {
+ err = z.writeString(z.Comment)
+ if err != nil {
+ z.pushError(err)
+ return n, err
+ }
+ }
+ // Start receiving data from compressors
+ go func() {
+ listen := z.results
+ for {
+ r, ok := <-listen
+ // If closed, we are finished.
+ if !ok {
+ return
+ }
+ buf := <-r.result
+ n, err := z.w.Write(buf)
+ if err != nil {
+ z.pushError(err)
+ close(r.notifyWritten)
+ return
+ }
+ if n != len(buf) {
+ z.pushError(fmt.Errorf("gzip: short write %d should be %d", n, len(buf)))
+ close(r.notifyWritten)
+ return
+ }
+ z.dstPool.Put(buf)
+ close(r.notifyWritten)
+ }
+ }()
+ z.currentBuffer = make([]byte, 0, z.blockSize)
+ }
+ q := p
+ for len(q) > 0 {
+ length := len(q)
+ if length+len(z.currentBuffer) > z.blockSize {
+ length = z.blockSize - len(z.currentBuffer)
+ }
+ z.digest.Write(q[:length])
+ z.currentBuffer = append(z.currentBuffer, q[:length]...)
+ if len(z.currentBuffer) >= z.blockSize {
+ z.compressCurrent(false)
+ if err := z.checkError(); err != nil {
+ return len(p) - len(q) - length, err
+ }
+ }
+ z.size += length
+ q = q[length:]
+ }
+ return len(p), z.checkError()
+}
+
+// Step 1: compresses buffer to buffer
+// Step 2: send writer to channel
+// Step 3: Close result channel to indicate we are done
+func (z *Writer) compressBlock(p, prevTail []byte, r result, closed bool) {
+ defer func() {
+ close(r.result)
+ z.wg.Done()
+ }()
+ buf := z.dstPool.Get().([]byte)
+ dest := bytes.NewBuffer(buf[:0])
+
+ compressor := z.dictFlatePool.Get().(*flate.Writer)
+ compressor.ResetDict(dest, prevTail)
+ compressor.Write(p)
+
+ err := compressor.Flush()
+ if err != nil {
+ z.pushError(err)
+ return
+ }
+ if closed {
+ err = compressor.Close()
+ if err != nil {
+ z.pushError(err)
+ return
+ }
+ }
+ z.dictFlatePool.Put(compressor)
+ // Read back buffer
+ buf = dest.Bytes()
+ r.result <- buf
+}
+
+// Flush flushes any pending compressed data to the underlying writer.
+//
+// It is useful mainly in compressed network protocols, to ensure that
+// a remote reader has enough data to reconstruct a packet. Flush does
+// not return until the data has been written. If the underlying
+// writer returns an error, Flush returns that error.
+//
+// In the terminology of the zlib library, Flush is equivalent to Z_SYNC_FLUSH.
+func (z *Writer) Flush() error {
+ if err := z.checkError(); err != nil {
+ return err
+ }
+ if z.closed {
+ return nil
+ }
+ if !z.wroteHeader {
+ _, err := z.Write(nil)
+ if err != nil {
+ return err
+ }
+ }
+ // We send current block to compression
+ z.compressCurrent(true)
+
+ return z.checkError()
+}
+
+// UncompressedSize will return the number of bytes written.
+// pgzip only, not a function in the official gzip package.
+func (z *Writer) UncompressedSize() int {
+ return z.size
+}
+
+// Close closes the Writer, flushing any unwritten data to the underlying
+// io.Writer, but does not close the underlying io.Writer.
+func (z *Writer) Close() error {
+ if err := z.checkError(); err != nil {
+ return err
+ }
+ if z.closed {
+ return nil
+ }
+
+ z.closed = true
+ if !z.wroteHeader {
+ z.Write(nil)
+ if err := z.checkError(); err != nil {
+ return err
+ }
+ }
+ z.compressCurrent(true)
+ if err := z.checkError(); err != nil {
+ return err
+ }
+ close(z.results)
+ put4(z.buf[0:4], z.digest.Sum32())
+ put4(z.buf[4:8], uint32(z.size))
+ _, err := z.w.Write(z.buf[0:8])
+ if err != nil {
+ z.pushError(err)
+ return err
+ }
+ return nil
+}
diff --git a/vendor/github.com/mailru/easyjson/LICENSE b/vendor/github.com/mailru/easyjson/LICENSE
deleted file mode 100644
index fbff658f7..000000000
--- a/vendor/github.com/mailru/easyjson/LICENSE
+++ /dev/null
@@ -1,7 +0,0 @@
-Copyright (c) 2016 Mail.Ru Group
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/github.com/mailru/easyjson/README.md b/vendor/github.com/mailru/easyjson/README.md
deleted file mode 100644
index 7fd768654..000000000
--- a/vendor/github.com/mailru/easyjson/README.md
+++ /dev/null
@@ -1,333 +0,0 @@
-# easyjson [![Build Status](https://travis-ci.org/mailru/easyjson.svg?branch=master)](https://travis-ci.org/mailru/easyjson) [![Go Report Card](https://goreportcard.com/badge/github.com/mailru/easyjson)](https://goreportcard.com/report/github.com/mailru/easyjson)
-
-Package easyjson provides a fast and easy way to marshal/unmarshal Go structs
-to/from JSON without the use of reflection. In performance tests, easyjson
-outperforms the standard `encoding/json` package by a factor of 4-5x, and other
-JSON encoding packages by a factor of 2-3x.
-
-easyjson aims to keep generated Go code simple enough so that it can be easily
-optimized or fixed. Another goal is to provide users with the ability to
-customize the generated code by providing options not available with the
-standard `encoding/json` package, such as generating "snake_case" names or
-enabling `omitempty` behavior by default.
-
-## Usage
-```sh
-# install
-go get -u github.com/mailru/easyjson/...
-
-# run
-easyjson -all <file>.go
-```
-
-The above will generate `<file>_easyjson.go` containing the appropriate marshaler and
-unmarshaler funcs for all structs contained in `<file>.go`.
-
-Please note that easyjson requires a full Go build environment and the `GOPATH`
-environment variable to be set. This is because easyjson code generation
-invokes `go run` on a temporary file (an approach to code generation borrowed
-from [ffjson](https://github.com/pquerna/ffjson)).
-
-## Options
-```txt
-Usage of easyjson:
- -all
- generate marshaler/unmarshalers for all structs in a file
- -build_tags string
- build tags to add to generated file
- -leave_temps
- do not delete temporary files
- -no_std_marshalers
- don't generate MarshalJSON/UnmarshalJSON funcs
- -noformat
- do not run 'gofmt -w' on output file
- -omit_empty
- omit empty fields by default
- -output_filename string
- specify the filename of the output
- -pkg
- process the whole package instead of just the given file
- -snake_case
- use snake_case names instead of CamelCase by default
- -lower_camel_case
- use lowerCamelCase instead of CamelCase by default
- -stubs
- only generate stubs for marshaler/unmarshaler funcs
- -disallow_unknown_fields
- return error if some unknown field in json appeared
-```
-
-Using `-all` will generate marshalers/unmarshalers for all Go structs in the
-file. If `-all` is not provided, then only those structs whose preceding
-comment starts with `easyjson:json` will have marshalers/unmarshalers
-generated. For example:
-
-```go
-//easyjson:json
-type A struct {}
-```
-
-Additional option notes:
-
-* `-snake_case` tells easyjson to generate snake\_case field names by default
- (unless overridden by a field tag). The CamelCase to snake\_case conversion
- algorithm should work in most cases (ie, HTTPVersion will be converted to
- "http_version").
-
-* `-build_tags` will add the specified build tags to generated Go sources.
-
-## Generated Marshaler/Unmarshaler Funcs
-
-For Go struct types, easyjson generates the funcs `MarshalEasyJSON` /
-`UnmarshalEasyJSON` for marshaling/unmarshaling JSON. In turn, these satisify
-the `easyjson.Marshaler` and `easyjson.Unmarshaler` interfaces and when used in
-conjunction with `easyjson.Marshal` / `easyjson.Unmarshal` avoid unnecessary
-reflection / type assertions during marshaling/unmarshaling to/from JSON for Go
-structs.
-
-easyjson also generates `MarshalJSON` and `UnmarshalJSON` funcs for Go struct
-types compatible with the standard `json.Marshaler` and `json.Unmarshaler`
-interfaces. Please be aware that using the standard `json.Marshal` /
-`json.Unmarshal` for marshaling/unmarshaling will incur a significant
-performance penalty when compared to using `easyjson.Marshal` /
-`easyjson.Unmarshal`.
-
-Additionally, easyjson exposes utility funcs that use the `MarshalEasyJSON` and
-`UnmarshalEasyJSON` for marshaling/unmarshaling to and from standard readers
-and writers. For example, easyjson provides `easyjson.MarshalToHTTPResponseWriter`
-which marshals to the standard `http.ResponseWriter`. Please see the [GoDoc
-listing](https://godoc.org/github.com/mailru/easyjson) for the full listing of
-utility funcs that are available.
-
-## Controlling easyjson Marshaling and Unmarshaling Behavior
-
-Go types can provide their own `MarshalEasyJSON` and `UnmarshalEasyJSON` funcs
-that satisify the `easyjson.Marshaler` / `easyjson.Unmarshaler` interfaces.
-These will be used by `easyjson.Marshal` and `easyjson.Unmarshal` when defined
-for a Go type.
-
-Go types can also satisify the `easyjson.Optional` interface, which allows the
-type to define its own `omitempty` logic.
-
-## Type Wrappers
-
-easyjson provides additional type wrappers defined in the `easyjson/opt`
-package. These wrap the standard Go primitives and in turn satisify the
-easyjson interfaces.
-
-The `easyjson/opt` type wrappers are useful when needing to distinguish between
-a missing value and/or when needing to specifying a default value. Type
-wrappers allow easyjson to avoid additional pointers and heap allocations and
-can significantly increase performance when used properly.
-
-## Memory Pooling
-
-easyjson uses a buffer pool that allocates data in increasing chunks from 128
-to 32768 bytes. Chunks of 512 bytes and larger will be reused with the help of
-`sync.Pool`. The maximum size of a chunk is bounded to reduce redundant memory
-allocation and to allow larger reusable buffers.
-
-easyjson's custom allocation buffer pool is defined in the `easyjson/buffer`
-package, and the default behavior pool behavior can be modified (if necessary)
-through a call to `buffer.Init()` prior to any marshaling or unmarshaling.
-Please see the [GoDoc listing](https://godoc.org/github.com/mailru/easyjson/buffer)
-for more information.
-
-## Issues, Notes, and Limitations
-
-* easyjson is still early in its development. As such, there are likely to be
- bugs and missing features when compared to `encoding/json`. In the case of a
- missing feature or bug, please create a GitHub issue. Pull requests are
- welcome!
-
-* Unlike `encoding/json`, object keys are case-sensitive. Case-insensitive
- matching is not currently provided due to the significant performance hit
- when doing case-insensitive key matching. In the future, case-insensitive
- object key matching may be provided via an option to the generator.
-
-* easyjson makes use of `unsafe`, which simplifies the code and
- provides significant performance benefits by allowing no-copy
- conversion from `[]byte` to `string`. That said, `unsafe` is used
- only when unmarshaling and parsing JSON, and any `unsafe` operations
- / memory allocations done will be safely deallocated by
- easyjson. Set the build tag `easyjson_nounsafe` to compile it
- without `unsafe`.
-
-* easyjson is compatible with Google App Engine. The `appengine` build
- tag (set by App Engine's environment) will automatically disable the
- use of `unsafe`, which is not allowed in App Engine's Standard
- Environment. Note that the use with App Engine is still experimental.
-
-* Floats are formatted using the default precision from Go's `strconv` package.
- As such, easyjson will not correctly handle high precision floats when
- marshaling/unmarshaling JSON. Note, however, that there are very few/limited
- uses where this behavior is not sufficient for general use. That said, a
- different package may be needed if precise marshaling/unmarshaling of high
- precision floats to/from JSON is required.
-
-* While unmarshaling, the JSON parser does the minimal amount of work needed to
- skip over unmatching parens, and as such full validation is not done for the
- entire JSON value being unmarshaled/parsed.
-
-* Currently there is no true streaming support for encoding/decoding as
- typically for many uses/protocols the final, marshaled length of the JSON
- needs to be known prior to sending the data. Currently this is not possible
- with easyjson's architecture.
-
-## Benchmarks
-
-Most benchmarks were done using the example
-[13kB example JSON](https://dev.twitter.com/rest/reference/get/search/tweets)
-(9k after eliminating whitespace). This example is similar to real-world data,
-is well-structured, and contains a healthy variety of different types, making
-it ideal for JSON serialization benchmarks.
-
-Note:
-
-* For small request benchmarks, an 80 byte portion of the above example was
- used.
-
-* For large request marshaling benchmarks, a struct containing 50 regular
- samples was used, making a ~500kB output JSON.
-
-* Benchmarks are showing the results of easyjson's default behaviour,
- which makes use of `unsafe`.
-
-Benchmarks are available in the repository and can be run by invoking `make`.
-
-### easyjson vs. encoding/json
-
-easyjson is roughly 5-6 times faster than the standard `encoding/json` for
-unmarshaling, and 3-4 times faster for non-concurrent marshaling. Concurrent
-marshaling is 6-7x faster if marshaling to a writer.
-
-### easyjson vs. ffjson
-
-easyjson uses the same approach for JSON marshaling as
-[ffjson](https://github.com/pquerna/ffjson), but takes a significantly
-different approach to lexing and parsing JSON during unmarshaling. This means
-easyjson is roughly 2-3x faster for unmarshaling and 1.5-2x faster for
-non-concurrent unmarshaling.
-
-As of this writing, `ffjson` seems to have issues when used concurrently:
-specifically, large request pooling hurts `ffjson`'s performance and causes
-scalability issues. These issues with `ffjson` can likely be fixed, but as of
-writing remain outstanding/known issues with `ffjson`.
-
-easyjson and `ffjson` have similar performance for small requests, however
-easyjson outperforms `ffjson` by roughly 2-5x times for large requests when
-used with a writer.
-
-### easyjson vs. go/codec
-
-[go/codec](https://github.com/ugorji/go) provides
-compile-time helpers for JSON generation. In this case, helpers do not work
-like marshalers as they are encoding-independent.
-
-easyjson is generally 2x faster than `go/codec` for non-concurrent benchmarks
-and about 3x faster for concurrent encoding (without marshaling to a writer).
-
-In an attempt to measure marshaling performance of `go/codec` (as opposed to
-allocations/memcpy/writer interface invocations), a benchmark was done with
-resetting length of a byte slice rather than resetting the whole slice to nil.
-However, the optimization in this exact form may not be applicable in practice,
-since the memory is not freed between marshaling operations.
-
-### easyjson vs 'ujson' python module
-
-[ujson](https://github.com/esnme/ultrajson) is using C code for parsing, so it
-is interesting to see how plain golang compares to that. It is imporant to note
-that the resulting object for python is slower to access, since the library
-parses JSON object into dictionaries.
-
-easyjson is slightly faster for unmarshaling and 2-3x faster than `ujson` for
-marshaling.
-
-### Benchmark Results
-
-`ffjson` results are from February 4th, 2016, using the latest `ffjson` and go1.6.
-`go/codec` results are from March 4th, 2016, using the latest `go/codec` and go1.6.
-
-#### Unmarshaling
-
-| lib | json size | MB/s | allocs/op | B/op |
-|:---------|:----------|-----:|----------:|------:|
-| standard | regular | 22 | 218 | 10229 |
-| standard | small | 9.7 | 14 | 720 |
-| | | | | |
-| easyjson | regular | 125 | 128 | 9794 |
-| easyjson | small | 67 | 3 | 128 |
-| | | | | |
-| ffjson | regular | 66 | 141 | 9985 |
-| ffjson | small | 17.6 | 10 | 488 |
-| | | | | |
-| codec | regular | 55 | 434 | 19299 |
-| codec | small | 29 | 7 | 336 |
-| | | | | |
-| ujson | regular | 103 | N/A | N/A |
-
-#### Marshaling, one goroutine.
-
-| lib | json size | MB/s | allocs/op | B/op |
-|:----------|:----------|-----:|----------:|------:|
-| standard | regular | 75 | 9 | 23256 |
-| standard | small | 32 | 3 | 328 |
-| standard | large | 80 | 17 | 1.2M |
-| | | | | |
-| easyjson | regular | 213 | 9 | 10260 |
-| easyjson* | regular | 263 | 8 | 742 |
-| easyjson | small | 125 | 1 | 128 |
-| easyjson | large | 212 | 33 | 490k |
-| easyjson* | large | 262 | 25 | 2879 |
-| | | | | |
-| ffjson | regular | 122 | 153 | 21340 |
-| ffjson** | regular | 146 | 152 | 4897 |
-| ffjson | small | 36 | 5 | 384 |
-| ffjson** | small | 64 | 4 | 128 |
-| ffjson | large | 134 | 7317 | 818k |
-| ffjson** | large | 125 | 7320 | 827k |
-| | | | | |
-| codec | regular | 80 | 17 | 33601 |
-| codec*** | regular | 108 | 9 | 1153 |
-| codec | small | 42 | 3 | 304 |
-| codec*** | small | 56 | 1 | 48 |
-| codec | large | 73 | 483 | 2.5M |
-| codec*** | large | 103 | 451 | 66007 |
-| | | | | |
-| ujson | regular | 92 | N/A | N/A |
-
-\* marshaling to a writer,
-\*\* using `ffjson.Pool()`,
-\*\*\* reusing output slice instead of resetting it to nil
-
-#### Marshaling, concurrent.
-
-| lib | json size | MB/s | allocs/op | B/op |
-|:----------|:----------|-----:|----------:|------:|
-| standard | regular | 252 | 9 | 23257 |
-| standard | small | 124 | 3 | 328 |
-| standard | large | 289 | 17 | 1.2M |
-| | | | | |
-| easyjson | regular | 792 | 9 | 10597 |
-| easyjson* | regular | 1748 | 8 | 779 |
-| easyjson | small | 333 | 1 | 128 |
-| easyjson | large | 718 | 36 | 548k |
-| easyjson* | large | 2134 | 25 | 4957 |
-| | | | | |
-| ffjson | regular | 301 | 153 | 21629 |
-| ffjson** | regular | 707 | 152 | 5148 |
-| ffjson | small | 62 | 5 | 384 |
-| ffjson** | small | 282 | 4 | 128 |
-| ffjson | large | 438 | 7330 | 1.0M |
-| ffjson** | large | 131 | 7319 | 820k |
-| | | | | |
-| codec | regular | 183 | 17 | 33603 |
-| codec*** | regular | 671 | 9 | 1157 |
-| codec | small | 147 | 3 | 304 |
-| codec*** | small | 299 | 1 | 48 |
-| codec | large | 190 | 483 | 2.5M |
-| codec*** | large | 752 | 451 | 77574 |
-
-\* marshaling to a writer,
-\*\* using `ffjson.Pool()`,
-\*\*\* reusing output slice instead of resetting it to nil
diff --git a/vendor/github.com/mailru/easyjson/buffer/pool.go b/vendor/github.com/mailru/easyjson/buffer/pool.go
deleted file mode 100644
index 07fb4bc1f..000000000
--- a/vendor/github.com/mailru/easyjson/buffer/pool.go
+++ /dev/null
@@ -1,270 +0,0 @@
-// Package buffer implements a buffer for serialization, consisting of a chain of []byte-s to
-// reduce copying and to allow reuse of individual chunks.
-package buffer
-
-import (
- "io"
- "sync"
-)
-
-// PoolConfig contains configuration for the allocation and reuse strategy.
-type PoolConfig struct {
- StartSize int // Minimum chunk size that is allocated.
- PooledSize int // Minimum chunk size that is reused, reusing chunks too small will result in overhead.
- MaxSize int // Maximum chunk size that will be allocated.
-}
-
-var config = PoolConfig{
- StartSize: 128,
- PooledSize: 512,
- MaxSize: 32768,
-}
-
-// Reuse pool: chunk size -> pool.
-var buffers = map[int]*sync.Pool{}
-
-func initBuffers() {
- for l := config.PooledSize; l <= config.MaxSize; l *= 2 {
- buffers[l] = new(sync.Pool)
- }
-}
-
-func init() {
- initBuffers()
-}
-
-// Init sets up a non-default pooling and allocation strategy. Should be run before serialization is done.
-func Init(cfg PoolConfig) {
- config = cfg
- initBuffers()
-}
-
-// putBuf puts a chunk to reuse pool if it can be reused.
-func putBuf(buf []byte) {
- size := cap(buf)
- if size < config.PooledSize {
- return
- }
- if c := buffers[size]; c != nil {
- c.Put(buf[:0])
- }
-}
-
-// getBuf gets a chunk from reuse pool or creates a new one if reuse failed.
-func getBuf(size int) []byte {
- if size < config.PooledSize {
- return make([]byte, 0, size)
- }
-
- if c := buffers[size]; c != nil {
- v := c.Get()
- if v != nil {
- return v.([]byte)
- }
- }
- return make([]byte, 0, size)
-}
-
-// Buffer is a buffer optimized for serialization without extra copying.
-type Buffer struct {
-
- // Buf is the current chunk that can be used for serialization.
- Buf []byte
-
- toPool []byte
- bufs [][]byte
-}
-
-// EnsureSpace makes sure that the current chunk contains at least s free bytes,
-// possibly creating a new chunk.
-func (b *Buffer) EnsureSpace(s int) {
- if cap(b.Buf)-len(b.Buf) >= s {
- return
- }
- l := len(b.Buf)
- if l > 0 {
- if cap(b.toPool) != cap(b.Buf) {
- // Chunk was reallocated, toPool can be pooled.
- putBuf(b.toPool)
- }
- if cap(b.bufs) == 0 {
- b.bufs = make([][]byte, 0, 8)
- }
- b.bufs = append(b.bufs, b.Buf)
- l = cap(b.toPool) * 2
- } else {
- l = config.StartSize
- }
-
- if l > config.MaxSize {
- l = config.MaxSize
- }
- b.Buf = getBuf(l)
- b.toPool = b.Buf
-}
-
-// AppendByte appends a single byte to buffer.
-func (b *Buffer) AppendByte(data byte) {
- if cap(b.Buf) == len(b.Buf) { // EnsureSpace won't be inlined.
- b.EnsureSpace(1)
- }
- b.Buf = append(b.Buf, data)
-}
-
-// AppendBytes appends a byte slice to buffer.
-func (b *Buffer) AppendBytes(data []byte) {
- for len(data) > 0 {
- if cap(b.Buf) == len(b.Buf) { // EnsureSpace won't be inlined.
- b.EnsureSpace(1)
- }
-
- sz := cap(b.Buf) - len(b.Buf)
- if sz > len(data) {
- sz = len(data)
- }
-
- b.Buf = append(b.Buf, data[:sz]...)
- data = data[sz:]
- }
-}
-
-// AppendBytes appends a string to buffer.
-func (b *Buffer) AppendString(data string) {
- for len(data) > 0 {
- if cap(b.Buf) == len(b.Buf) { // EnsureSpace won't be inlined.
- b.EnsureSpace(1)
- }
-
- sz := cap(b.Buf) - len(b.Buf)
- if sz > len(data) {
- sz = len(data)
- }
-
- b.Buf = append(b.Buf, data[:sz]...)
- data = data[sz:]
- }
-}
-
-// Size computes the size of a buffer by adding sizes of every chunk.
-func (b *Buffer) Size() int {
- size := len(b.Buf)
- for _, buf := range b.bufs {
- size += len(buf)
- }
- return size
-}
-
-// DumpTo outputs the contents of a buffer to a writer and resets the buffer.
-func (b *Buffer) DumpTo(w io.Writer) (written int, err error) {
- var n int
- for _, buf := range b.bufs {
- if err == nil {
- n, err = w.Write(buf)
- written += n
- }
- putBuf(buf)
- }
-
- if err == nil {
- n, err = w.Write(b.Buf)
- written += n
- }
- putBuf(b.toPool)
-
- b.bufs = nil
- b.Buf = nil
- b.toPool = nil
-
- return
-}
-
-// BuildBytes creates a single byte slice with all the contents of the buffer. Data is
-// copied if it does not fit in a single chunk. You can optionally provide one byte
-// slice as argument that it will try to reuse.
-func (b *Buffer) BuildBytes(reuse ...[]byte) []byte {
- if len(b.bufs) == 0 {
- ret := b.Buf
- b.toPool = nil
- b.Buf = nil
- return ret
- }
-
- var ret []byte
- size := b.Size()
-
- // If we got a buffer as argument and it is big enought, reuse it.
- if len(reuse) == 1 && cap(reuse[0]) >= size {
- ret = reuse[0][:0]
- } else {
- ret = make([]byte, 0, size)
- }
- for _, buf := range b.bufs {
- ret = append(ret, buf...)
- putBuf(buf)
- }
-
- ret = append(ret, b.Buf...)
- putBuf(b.toPool)
-
- b.bufs = nil
- b.toPool = nil
- b.Buf = nil
-
- return ret
-}
-
-type readCloser struct {
- offset int
- bufs [][]byte
-}
-
-func (r *readCloser) Read(p []byte) (n int, err error) {
- for _, buf := range r.bufs {
- // Copy as much as we can.
- x := copy(p[n:], buf[r.offset:])
- n += x // Increment how much we filled.
-
- // Did we empty the whole buffer?
- if r.offset+x == len(buf) {
- // On to the next buffer.
- r.offset = 0
- r.bufs = r.bufs[1:]
-
- // We can release this buffer.
- putBuf(buf)
- } else {
- r.offset += x
- }
-
- if n == len(p) {
- break
- }
- }
- // No buffers left or nothing read?
- if len(r.bufs) == 0 {
- err = io.EOF
- }
- return
-}
-
-func (r *readCloser) Close() error {
- // Release all remaining buffers.
- for _, buf := range r.bufs {
- putBuf(buf)
- }
- // In case Close gets called multiple times.
- r.bufs = nil
-
- return nil
-}
-
-// ReadCloser creates an io.ReadCloser with all the contents of the buffer.
-func (b *Buffer) ReadCloser() io.ReadCloser {
- ret := &readCloser{0, append(b.bufs, b.Buf)}
-
- b.bufs = nil
- b.toPool = nil
- b.Buf = nil
-
- return ret
-}
diff --git a/vendor/github.com/mailru/easyjson/helpers.go b/vendor/github.com/mailru/easyjson/helpers.go
deleted file mode 100644
index b86b87d22..000000000
--- a/vendor/github.com/mailru/easyjson/helpers.go
+++ /dev/null
@@ -1,78 +0,0 @@
-// Package easyjson contains marshaler/unmarshaler interfaces and helper functions.
-package easyjson
-
-import (
- "io"
- "io/ioutil"
- "net/http"
- "strconv"
-
- "github.com/mailru/easyjson/jlexer"
- "github.com/mailru/easyjson/jwriter"
-)
-
-// Marshaler is an easyjson-compatible marshaler interface.
-type Marshaler interface {
- MarshalEasyJSON(w *jwriter.Writer)
-}
-
-// Marshaler is an easyjson-compatible unmarshaler interface.
-type Unmarshaler interface {
- UnmarshalEasyJSON(w *jlexer.Lexer)
-}
-
-// Optional defines an undefined-test method for a type to integrate with 'omitempty' logic.
-type Optional interface {
- IsDefined() bool
-}
-
-// Marshal returns data as a single byte slice. Method is suboptimal as the data is likely to be copied
-// from a chain of smaller chunks.
-func Marshal(v Marshaler) ([]byte, error) {
- w := jwriter.Writer{}
- v.MarshalEasyJSON(&w)
- return w.BuildBytes()
-}
-
-// MarshalToWriter marshals the data to an io.Writer.
-func MarshalToWriter(v Marshaler, w io.Writer) (written int, err error) {
- jw := jwriter.Writer{}
- v.MarshalEasyJSON(&jw)
- return jw.DumpTo(w)
-}
-
-// MarshalToHTTPResponseWriter sets Content-Length and Content-Type headers for the
-// http.ResponseWriter, and send the data to the writer. started will be equal to
-// false if an error occurred before any http.ResponseWriter methods were actually
-// invoked (in this case a 500 reply is possible).
-func MarshalToHTTPResponseWriter(v Marshaler, w http.ResponseWriter) (started bool, written int, err error) {
- jw := jwriter.Writer{}
- v.MarshalEasyJSON(&jw)
- if jw.Error != nil {
- return false, 0, jw.Error
- }
- w.Header().Set("Content-Type", "application/json")
- w.Header().Set("Content-Length", strconv.Itoa(jw.Size()))
-
- started = true
- written, err = jw.DumpTo(w)
- return
-}
-
-// Unmarshal decodes the JSON in data into the object.
-func Unmarshal(data []byte, v Unmarshaler) error {
- l := jlexer.Lexer{Data: data}
- v.UnmarshalEasyJSON(&l)
- return l.Error()
-}
-
-// UnmarshalFromReader reads all the data in the reader and decodes as JSON into the object.
-func UnmarshalFromReader(r io.Reader, v Unmarshaler) error {
- data, err := ioutil.ReadAll(r)
- if err != nil {
- return err
- }
- l := jlexer.Lexer{Data: data}
- v.UnmarshalEasyJSON(&l)
- return l.Error()
-}
diff --git a/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go b/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go
deleted file mode 100644
index ff7b27c5b..000000000
--- a/vendor/github.com/mailru/easyjson/jlexer/bytestostr.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// This file will only be included to the build if neither
-// easyjson_nounsafe nor appengine build tag is set. See README notes
-// for more details.
-
-//+build !easyjson_nounsafe
-//+build !appengine
-
-package jlexer
-
-import (
- "reflect"
- "unsafe"
-)
-
-// bytesToStr creates a string pointing at the slice to avoid copying.
-//
-// Warning: the string returned by the function should be used with care, as the whole input data
-// chunk may be either blocked from being freed by GC because of a single string or the buffer.Data
-// may be garbage-collected even when the string exists.
-func bytesToStr(data []byte) string {
- h := (*reflect.SliceHeader)(unsafe.Pointer(&data))
- shdr := reflect.StringHeader{Data: h.Data, Len: h.Len}
- return *(*string)(unsafe.Pointer(&shdr))
-}
diff --git a/vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go b/vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go
deleted file mode 100644
index 864d1be67..000000000
--- a/vendor/github.com/mailru/easyjson/jlexer/bytestostr_nounsafe.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// This file is included to the build if any of the buildtags below
-// are defined. Refer to README notes for more details.
-
-//+build easyjson_nounsafe appengine
-
-package jlexer
-
-// bytesToStr creates a string normally from []byte
-//
-// Note that this method is roughly 1.5x slower than using the 'unsafe' method.
-func bytesToStr(data []byte) string {
- return string(data)
-}
diff --git a/vendor/github.com/mailru/easyjson/jlexer/error.go b/vendor/github.com/mailru/easyjson/jlexer/error.go
deleted file mode 100644
index e90ec40d0..000000000
--- a/vendor/github.com/mailru/easyjson/jlexer/error.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package jlexer
-
-import "fmt"
-
-// LexerError implements the error interface and represents all possible errors that can be
-// generated during parsing the JSON data.
-type LexerError struct {
- Reason string
- Offset int
- Data string
-}
-
-func (l *LexerError) Error() string {
- return fmt.Sprintf("parse error: %s near offset %d of '%s'", l.Reason, l.Offset, l.Data)
-}
diff --git a/vendor/github.com/mailru/easyjson/jlexer/lexer.go b/vendor/github.com/mailru/easyjson/jlexer/lexer.go
deleted file mode 100644
index 51f056615..000000000
--- a/vendor/github.com/mailru/easyjson/jlexer/lexer.go
+++ /dev/null
@@ -1,1181 +0,0 @@
-// Package jlexer contains a JSON lexer implementation.
-//
-// It is expected that it is mostly used with generated parser code, so the interface is tuned
-// for a parser that knows what kind of data is expected.
-package jlexer
-
-import (
- "encoding/base64"
- "encoding/json"
- "errors"
- "fmt"
- "io"
- "strconv"
- "unicode"
- "unicode/utf16"
- "unicode/utf8"
-)
-
-// tokenKind determines type of a token.
-type tokenKind byte
-
-const (
- tokenUndef tokenKind = iota // No token.
- tokenDelim // Delimiter: one of '{', '}', '[' or ']'.
- tokenString // A string literal, e.g. "abc\u1234"
- tokenNumber // Number literal, e.g. 1.5e5
- tokenBool // Boolean literal: true or false.
- tokenNull // null keyword.
-)
-
-// token describes a single token: type, position in the input and value.
-type token struct {
- kind tokenKind // Type of a token.
-
- boolValue bool // Value if a boolean literal token.
- byteValue []byte // Raw value of a token.
- delimValue byte
-}
-
-// Lexer is a JSON lexer: it iterates over JSON tokens in a byte slice.
-type Lexer struct {
- Data []byte // Input data given to the lexer.
-
- start int // Start of the current token.
- pos int // Current unscanned position in the input stream.
- token token // Last scanned token, if token.kind != tokenUndef.
-
- firstElement bool // Whether current element is the first in array or an object.
- wantSep byte // A comma or a colon character, which need to occur before a token.
-
- UseMultipleErrors bool // If we want to use multiple errors.
- fatalError error // Fatal error occurred during lexing. It is usually a syntax error.
- multipleErrors []*LexerError // Semantic errors occurred during lexing. Marshalling will be continued after finding this errors.
-}
-
-// FetchToken scans the input for the next token.
-func (r *Lexer) FetchToken() {
- r.token.kind = tokenUndef
- r.start = r.pos
-
- // Check if r.Data has r.pos element
- // If it doesn't, it mean corrupted input data
- if len(r.Data) < r.pos {
- r.errParse("Unexpected end of data")
- return
- }
- // Determine the type of a token by skipping whitespace and reading the
- // first character.
- for _, c := range r.Data[r.pos:] {
- switch c {
- case ':', ',':
- if r.wantSep == c {
- r.pos++
- r.start++
- r.wantSep = 0
- } else {
- r.errSyntax()
- }
-
- case ' ', '\t', '\r', '\n':
- r.pos++
- r.start++
-
- case '"':
- if r.wantSep != 0 {
- r.errSyntax()
- }
-
- r.token.kind = tokenString
- r.fetchString()
- return
-
- case '{', '[':
- if r.wantSep != 0 {
- r.errSyntax()
- }
- r.firstElement = true
- r.token.kind = tokenDelim
- r.token.delimValue = r.Data[r.pos]
- r.pos++
- return
-
- case '}', ']':
- if !r.firstElement && (r.wantSep != ',') {
- r.errSyntax()
- }
- r.wantSep = 0
- r.token.kind = tokenDelim
- r.token.delimValue = r.Data[r.pos]
- r.pos++
- return
-
- case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-':
- if r.wantSep != 0 {
- r.errSyntax()
- }
- r.token.kind = tokenNumber
- r.fetchNumber()
- return
-
- case 'n':
- if r.wantSep != 0 {
- r.errSyntax()
- }
-
- r.token.kind = tokenNull
- r.fetchNull()
- return
-
- case 't':
- if r.wantSep != 0 {
- r.errSyntax()
- }
-
- r.token.kind = tokenBool
- r.token.boolValue = true
- r.fetchTrue()
- return
-
- case 'f':
- if r.wantSep != 0 {
- r.errSyntax()
- }
-
- r.token.kind = tokenBool
- r.token.boolValue = false
- r.fetchFalse()
- return
-
- default:
- r.errSyntax()
- return
- }
- }
- r.fatalError = io.EOF
- return
-}
-
-// isTokenEnd returns true if the char can follow a non-delimiter token
-func isTokenEnd(c byte) bool {
- return c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == '[' || c == ']' || c == '{' || c == '}' || c == ',' || c == ':'
-}
-
-// fetchNull fetches and checks remaining bytes of null keyword.
-func (r *Lexer) fetchNull() {
- r.pos += 4
- if r.pos > len(r.Data) ||
- r.Data[r.pos-3] != 'u' ||
- r.Data[r.pos-2] != 'l' ||
- r.Data[r.pos-1] != 'l' ||
- (r.pos != len(r.Data) && !isTokenEnd(r.Data[r.pos])) {
-
- r.pos -= 4
- r.errSyntax()
- }
-}
-
-// fetchTrue fetches and checks remaining bytes of true keyword.
-func (r *Lexer) fetchTrue() {
- r.pos += 4
- if r.pos > len(r.Data) ||
- r.Data[r.pos-3] != 'r' ||
- r.Data[r.pos-2] != 'u' ||
- r.Data[r.pos-1] != 'e' ||
- (r.pos != len(r.Data) && !isTokenEnd(r.Data[r.pos])) {
-
- r.pos -= 4
- r.errSyntax()
- }
-}
-
-// fetchFalse fetches and checks remaining bytes of false keyword.
-func (r *Lexer) fetchFalse() {
- r.pos += 5
- if r.pos > len(r.Data) ||
- r.Data[r.pos-4] != 'a' ||
- r.Data[r.pos-3] != 'l' ||
- r.Data[r.pos-2] != 's' ||
- r.Data[r.pos-1] != 'e' ||
- (r.pos != len(r.Data) && !isTokenEnd(r.Data[r.pos])) {
-
- r.pos -= 5
- r.errSyntax()
- }
-}
-
-// fetchNumber scans a number literal token.
-func (r *Lexer) fetchNumber() {
- hasE := false
- afterE := false
- hasDot := false
-
- r.pos++
- for i, c := range r.Data[r.pos:] {
- switch {
- case c >= '0' && c <= '9':
- afterE = false
- case c == '.' && !hasDot:
- hasDot = true
- case (c == 'e' || c == 'E') && !hasE:
- hasE = true
- hasDot = true
- afterE = true
- case (c == '+' || c == '-') && afterE:
- afterE = false
- default:
- r.pos += i
- if !isTokenEnd(c) {
- r.errSyntax()
- } else {
- r.token.byteValue = r.Data[r.start:r.pos]
- }
- return
- }
- }
-
- r.pos = len(r.Data)
- r.token.byteValue = r.Data[r.start:]
-}
-
-// findStringLen tries to scan into the string literal for ending quote char to determine required size.
-// The size will be exact if no escapes are present and may be inexact if there are escaped chars.
-func findStringLen(data []byte) (isValid, hasEscapes bool, length int) {
- delta := 0
-
- for i := 0; i < len(data); i++ {
- switch data[i] {
- case '\\':
- i++
- delta++
- if i < len(data) && data[i] == 'u' {
- delta++
- }
- case '"':
- return true, (delta > 0), (i - delta)
- }
- }
-
- return false, false, len(data)
-}
-
-// getu4 decodes \uXXXX from the beginning of s, returning the hex value,
-// or it returns -1.
-func getu4(s []byte) rune {
- if len(s) < 6 || s[0] != '\\' || s[1] != 'u' {
- return -1
- }
- var val rune
- for i := 2; i < len(s) && i < 6; i++ {
- var v byte
- c := s[i]
- switch c {
- case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
- v = c - '0'
- case 'a', 'b', 'c', 'd', 'e', 'f':
- v = c - 'a' + 10
- case 'A', 'B', 'C', 'D', 'E', 'F':
- v = c - 'A' + 10
- default:
- return -1
- }
-
- val <<= 4
- val |= rune(v)
- }
- return val
-}
-
-// processEscape processes a single escape sequence and returns number of bytes processed.
-func (r *Lexer) processEscape(data []byte) (int, error) {
- if len(data) < 2 {
- return 0, fmt.Errorf("syntax error at %v", string(data))
- }
-
- c := data[1]
- switch c {
- case '"', '/', '\\':
- r.token.byteValue = append(r.token.byteValue, c)
- return 2, nil
- case 'b':
- r.token.byteValue = append(r.token.byteValue, '\b')
- return 2, nil
- case 'f':
- r.token.byteValue = append(r.token.byteValue, '\f')
- return 2, nil
- case 'n':
- r.token.byteValue = append(r.token.byteValue, '\n')
- return 2, nil
- case 'r':
- r.token.byteValue = append(r.token.byteValue, '\r')
- return 2, nil
- case 't':
- r.token.byteValue = append(r.token.byteValue, '\t')
- return 2, nil
- case 'u':
- rr := getu4(data)
- if rr < 0 {
- return 0, errors.New("syntax error")
- }
-
- read := 6
- if utf16.IsSurrogate(rr) {
- rr1 := getu4(data[read:])
- if dec := utf16.DecodeRune(rr, rr1); dec != unicode.ReplacementChar {
- read += 6
- rr = dec
- } else {
- rr = unicode.ReplacementChar
- }
- }
- var d [4]byte
- s := utf8.EncodeRune(d[:], rr)
- r.token.byteValue = append(r.token.byteValue, d[:s]...)
- return read, nil
- }
-
- return 0, errors.New("syntax error")
-}
-
-// fetchString scans a string literal token.
-func (r *Lexer) fetchString() {
- r.pos++
- data := r.Data[r.pos:]
-
- isValid, hasEscapes, length := findStringLen(data)
- if !isValid {
- r.pos += length
- r.errParse("unterminated string literal")
- return
- }
- if !hasEscapes {
- r.token.byteValue = data[:length]
- r.pos += length + 1
- return
- }
-
- r.token.byteValue = make([]byte, 0, length)
- p := 0
- for i := 0; i < len(data); {
- switch data[i] {
- case '"':
- r.pos += i + 1
- r.token.byteValue = append(r.token.byteValue, data[p:i]...)
- i++
- return
-
- case '\\':
- r.token.byteValue = append(r.token.byteValue, data[p:i]...)
- off, err := r.processEscape(data[i:])
- if err != nil {
- r.errParse(err.Error())
- return
- }
- i += off
- p = i
-
- default:
- i++
- }
- }
- r.errParse("unterminated string literal")
-}
-
-// scanToken scans the next token if no token is currently available in the lexer.
-func (r *Lexer) scanToken() {
- if r.token.kind != tokenUndef || r.fatalError != nil {
- return
- }
-
- r.FetchToken()
-}
-
-// consume resets the current token to allow scanning the next one.
-func (r *Lexer) consume() {
- r.token.kind = tokenUndef
- r.token.delimValue = 0
-}
-
-// Ok returns true if no error (including io.EOF) was encountered during scanning.
-func (r *Lexer) Ok() bool {
- return r.fatalError == nil
-}
-
-const maxErrorContextLen = 13
-
-func (r *Lexer) errParse(what string) {
- if r.fatalError == nil {
- var str string
- if len(r.Data)-r.pos <= maxErrorContextLen {
- str = string(r.Data)
- } else {
- str = string(r.Data[r.pos:r.pos+maxErrorContextLen-3]) + "..."
- }
- r.fatalError = &LexerError{
- Reason: what,
- Offset: r.pos,
- Data: str,
- }
- }
-}
-
-func (r *Lexer) errSyntax() {
- r.errParse("syntax error")
-}
-
-func (r *Lexer) errInvalidToken(expected string) {
- if r.fatalError != nil {
- return
- }
- if r.UseMultipleErrors {
- r.pos = r.start
- r.consume()
- r.SkipRecursive()
- switch expected {
- case "[":
- r.token.delimValue = ']'
- r.token.kind = tokenDelim
- case "{":
- r.token.delimValue = '}'
- r.token.kind = tokenDelim
- }
- r.addNonfatalError(&LexerError{
- Reason: fmt.Sprintf("expected %s", expected),
- Offset: r.start,
- Data: string(r.Data[r.start:r.pos]),
- })
- return
- }
-
- var str string
- if len(r.token.byteValue) <= maxErrorContextLen {
- str = string(r.token.byteValue)
- } else {
- str = string(r.token.byteValue[:maxErrorContextLen-3]) + "..."
- }
- r.fatalError = &LexerError{
- Reason: fmt.Sprintf("expected %s", expected),
- Offset: r.pos,
- Data: str,
- }
-}
-
-func (r *Lexer) GetPos() int {
- return r.pos
-}
-
-// Delim consumes a token and verifies that it is the given delimiter.
-func (r *Lexer) Delim(c byte) {
- if r.token.kind == tokenUndef && r.Ok() {
- r.FetchToken()
- }
-
- if !r.Ok() || r.token.delimValue != c {
- r.consume() // errInvalidToken can change token if UseMultipleErrors is enabled.
- r.errInvalidToken(string([]byte{c}))
- } else {
- r.consume()
- }
-}
-
-// IsDelim returns true if there was no scanning error and next token is the given delimiter.
-func (r *Lexer) IsDelim(c byte) bool {
- if r.token.kind == tokenUndef && r.Ok() {
- r.FetchToken()
- }
- return !r.Ok() || r.token.delimValue == c
-}
-
-// Null verifies that the next token is null and consumes it.
-func (r *Lexer) Null() {
- if r.token.kind == tokenUndef && r.Ok() {
- r.FetchToken()
- }
- if !r.Ok() || r.token.kind != tokenNull {
- r.errInvalidToken("null")
- }
- r.consume()
-}
-
-// IsNull returns true if the next token is a null keyword.
-func (r *Lexer) IsNull() bool {
- if r.token.kind == tokenUndef && r.Ok() {
- r.FetchToken()
- }
- return r.Ok() && r.token.kind == tokenNull
-}
-
-// Skip skips a single token.
-func (r *Lexer) Skip() {
- if r.token.kind == tokenUndef && r.Ok() {
- r.FetchToken()
- }
- r.consume()
-}
-
-// SkipRecursive skips next array or object completely, or just skips a single token if not
-// an array/object.
-//
-// Note: no syntax validation is performed on the skipped data.
-func (r *Lexer) SkipRecursive() {
- r.scanToken()
- var start, end byte
-
- if r.token.delimValue == '{' {
- start, end = '{', '}'
- } else if r.token.delimValue == '[' {
- start, end = '[', ']'
- } else {
- r.consume()
- return
- }
-
- r.consume()
-
- level := 1
- inQuotes := false
- wasEscape := false
-
- for i, c := range r.Data[r.pos:] {
- switch {
- case c == start && !inQuotes:
- level++
- case c == end && !inQuotes:
- level--
- if level == 0 {
- r.pos += i + 1
- return
- }
- case c == '\\' && inQuotes:
- wasEscape = !wasEscape
- continue
- case c == '"' && inQuotes:
- inQuotes = wasEscape
- case c == '"':
- inQuotes = true
- }
- wasEscape = false
- }
- r.pos = len(r.Data)
- r.fatalError = &LexerError{
- Reason: "EOF reached while skipping array/object or token",
- Offset: r.pos,
- Data: string(r.Data[r.pos:]),
- }
-}
-
-// Raw fetches the next item recursively as a data slice
-func (r *Lexer) Raw() []byte {
- r.SkipRecursive()
- if !r.Ok() {
- return nil
- }
- return r.Data[r.start:r.pos]
-}
-
-// IsStart returns whether the lexer is positioned at the start
-// of an input string.
-func (r *Lexer) IsStart() bool {
- return r.pos == 0
-}
-
-// Consumed reads all remaining bytes from the input, publishing an error if
-// there is anything but whitespace remaining.
-func (r *Lexer) Consumed() {
- if r.pos > len(r.Data) || !r.Ok() {
- return
- }
-
- for _, c := range r.Data[r.pos:] {
- if c != ' ' && c != '\t' && c != '\r' && c != '\n' {
- r.AddError(&LexerError{
- Reason: "invalid character '" + string(c) + "' after top-level value",
- Offset: r.pos,
- Data: string(r.Data[r.pos:]),
- })
- return
- }
-
- r.pos++
- r.start++
- }
-}
-
-func (r *Lexer) unsafeString() (string, []byte) {
- if r.token.kind == tokenUndef && r.Ok() {
- r.FetchToken()
- }
- if !r.Ok() || r.token.kind != tokenString {
- r.errInvalidToken("string")
- return "", nil
- }
- bytes := r.token.byteValue
- ret := bytesToStr(r.token.byteValue)
- r.consume()
- return ret, bytes
-}
-
-// UnsafeString returns the string value if the token is a string literal.
-//
-// Warning: returned string may point to the input buffer, so the string should not outlive
-// the input buffer. Intended pattern of usage is as an argument to a switch statement.
-func (r *Lexer) UnsafeString() string {
- ret, _ := r.unsafeString()
- return ret
-}
-
-// UnsafeBytes returns the byte slice if the token is a string literal.
-func (r *Lexer) UnsafeBytes() []byte {
- _, ret := r.unsafeString()
- return ret
-}
-
-// String reads a string literal.
-func (r *Lexer) String() string {
- if r.token.kind == tokenUndef && r.Ok() {
- r.FetchToken()
- }
- if !r.Ok() || r.token.kind != tokenString {
- r.errInvalidToken("string")
- return ""
- }
- ret := string(r.token.byteValue)
- r.consume()
- return ret
-}
-
-// Bytes reads a string literal and base64 decodes it into a byte slice.
-func (r *Lexer) Bytes() []byte {
- if r.token.kind == tokenUndef && r.Ok() {
- r.FetchToken()
- }
- if !r.Ok() || r.token.kind != tokenString {
- r.errInvalidToken("string")
- return nil
- }
- ret := make([]byte, base64.StdEncoding.DecodedLen(len(r.token.byteValue)))
- n, err := base64.StdEncoding.Decode(ret, r.token.byteValue)
- if err != nil {
- r.fatalError = &LexerError{
- Reason: err.Error(),
- }
- return nil
- }
-
- r.consume()
- return ret[:n]
-}
-
-// Bool reads a true or false boolean keyword.
-func (r *Lexer) Bool() bool {
- if r.token.kind == tokenUndef && r.Ok() {
- r.FetchToken()
- }
- if !r.Ok() || r.token.kind != tokenBool {
- r.errInvalidToken("bool")
- return false
- }
- ret := r.token.boolValue
- r.consume()
- return ret
-}
-
-func (r *Lexer) number() string {
- if r.token.kind == tokenUndef && r.Ok() {
- r.FetchToken()
- }
- if !r.Ok() || r.token.kind != tokenNumber {
- r.errInvalidToken("number")
- return ""
- }
- ret := bytesToStr(r.token.byteValue)
- r.consume()
- return ret
-}
-
-func (r *Lexer) Uint8() uint8 {
- s := r.number()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseUint(s, 10, 8)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: s,
- })
- }
- return uint8(n)
-}
-
-func (r *Lexer) Uint16() uint16 {
- s := r.number()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseUint(s, 10, 16)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: s,
- })
- }
- return uint16(n)
-}
-
-func (r *Lexer) Uint32() uint32 {
- s := r.number()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseUint(s, 10, 32)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: s,
- })
- }
- return uint32(n)
-}
-
-func (r *Lexer) Uint64() uint64 {
- s := r.number()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseUint(s, 10, 64)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: s,
- })
- }
- return n
-}
-
-func (r *Lexer) Uint() uint {
- return uint(r.Uint64())
-}
-
-func (r *Lexer) Int8() int8 {
- s := r.number()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseInt(s, 10, 8)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: s,
- })
- }
- return int8(n)
-}
-
-func (r *Lexer) Int16() int16 {
- s := r.number()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseInt(s, 10, 16)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: s,
- })
- }
- return int16(n)
-}
-
-func (r *Lexer) Int32() int32 {
- s := r.number()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseInt(s, 10, 32)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: s,
- })
- }
- return int32(n)
-}
-
-func (r *Lexer) Int64() int64 {
- s := r.number()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseInt(s, 10, 64)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: s,
- })
- }
- return n
-}
-
-func (r *Lexer) Int() int {
- return int(r.Int64())
-}
-
-func (r *Lexer) Uint8Str() uint8 {
- s, b := r.unsafeString()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseUint(s, 10, 8)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: string(b),
- })
- }
- return uint8(n)
-}
-
-func (r *Lexer) Uint16Str() uint16 {
- s, b := r.unsafeString()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseUint(s, 10, 16)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: string(b),
- })
- }
- return uint16(n)
-}
-
-func (r *Lexer) Uint32Str() uint32 {
- s, b := r.unsafeString()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseUint(s, 10, 32)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: string(b),
- })
- }
- return uint32(n)
-}
-
-func (r *Lexer) Uint64Str() uint64 {
- s, b := r.unsafeString()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseUint(s, 10, 64)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: string(b),
- })
- }
- return n
-}
-
-func (r *Lexer) UintStr() uint {
- return uint(r.Uint64Str())
-}
-
-func (r *Lexer) UintptrStr() uintptr {
- return uintptr(r.Uint64Str())
-}
-
-func (r *Lexer) Int8Str() int8 {
- s, b := r.unsafeString()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseInt(s, 10, 8)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: string(b),
- })
- }
- return int8(n)
-}
-
-func (r *Lexer) Int16Str() int16 {
- s, b := r.unsafeString()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseInt(s, 10, 16)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: string(b),
- })
- }
- return int16(n)
-}
-
-func (r *Lexer) Int32Str() int32 {
- s, b := r.unsafeString()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseInt(s, 10, 32)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: string(b),
- })
- }
- return int32(n)
-}
-
-func (r *Lexer) Int64Str() int64 {
- s, b := r.unsafeString()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseInt(s, 10, 64)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: string(b),
- })
- }
- return n
-}
-
-func (r *Lexer) IntStr() int {
- return int(r.Int64Str())
-}
-
-func (r *Lexer) Float32() float32 {
- s := r.number()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseFloat(s, 32)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: s,
- })
- }
- return float32(n)
-}
-
-func (r *Lexer) Float32Str() float32 {
- s, b := r.unsafeString()
- if !r.Ok() {
- return 0
- }
- n, err := strconv.ParseFloat(s, 32)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: string(b),
- })
- }
- return float32(n)
-}
-
-func (r *Lexer) Float64() float64 {
- s := r.number()
- if !r.Ok() {
- return 0
- }
-
- n, err := strconv.ParseFloat(s, 64)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: s,
- })
- }
- return n
-}
-
-func (r *Lexer) Float64Str() float64 {
- s, b := r.unsafeString()
- if !r.Ok() {
- return 0
- }
- n, err := strconv.ParseFloat(s, 64)
- if err != nil {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Reason: err.Error(),
- Data: string(b),
- })
- }
- return n
-}
-
-func (r *Lexer) Error() error {
- return r.fatalError
-}
-
-func (r *Lexer) AddError(e error) {
- if r.fatalError == nil {
- r.fatalError = e
- }
-}
-
-func (r *Lexer) AddNonFatalError(e error) {
- r.addNonfatalError(&LexerError{
- Offset: r.start,
- Data: string(r.Data[r.start:r.pos]),
- Reason: e.Error(),
- })
-}
-
-func (r *Lexer) addNonfatalError(err *LexerError) {
- if r.UseMultipleErrors {
- // We don't want to add errors with the same offset.
- if len(r.multipleErrors) != 0 && r.multipleErrors[len(r.multipleErrors)-1].Offset == err.Offset {
- return
- }
- r.multipleErrors = append(r.multipleErrors, err)
- return
- }
- r.fatalError = err
-}
-
-func (r *Lexer) GetNonFatalErrors() []*LexerError {
- return r.multipleErrors
-}
-
-// JsonNumber fetches and json.Number from 'encoding/json' package.
-// Both int, float or string, contains them are valid values
-func (r *Lexer) JsonNumber() json.Number {
- if r.token.kind == tokenUndef && r.Ok() {
- r.FetchToken()
- }
- if !r.Ok() {
- r.errInvalidToken("json.Number")
- return json.Number("")
- }
-
- switch r.token.kind {
- case tokenString:
- return json.Number(r.String())
- case tokenNumber:
- return json.Number(r.Raw())
- case tokenNull:
- r.Null()
- return json.Number("")
- default:
- r.errSyntax()
- return json.Number("")
- }
-}
-
-// Interface fetches an interface{} analogous to the 'encoding/json' package.
-func (r *Lexer) Interface() interface{} {
- if r.token.kind == tokenUndef && r.Ok() {
- r.FetchToken()
- }
-
- if !r.Ok() {
- return nil
- }
- switch r.token.kind {
- case tokenString:
- return r.String()
- case tokenNumber:
- return r.Float64()
- case tokenBool:
- return r.Bool()
- case tokenNull:
- r.Null()
- return nil
- }
-
- if r.token.delimValue == '{' {
- r.consume()
-
- ret := map[string]interface{}{}
- for !r.IsDelim('}') {
- key := r.String()
- r.WantColon()
- ret[key] = r.Interface()
- r.WantComma()
- }
- r.Delim('}')
-
- if r.Ok() {
- return ret
- } else {
- return nil
- }
- } else if r.token.delimValue == '[' {
- r.consume()
-
- var ret []interface{}
- for !r.IsDelim(']') {
- ret = append(ret, r.Interface())
- r.WantComma()
- }
- r.Delim(']')
-
- if r.Ok() {
- return ret
- } else {
- return nil
- }
- }
- r.errSyntax()
- return nil
-}
-
-// WantComma requires a comma to be present before fetching next token.
-func (r *Lexer) WantComma() {
- r.wantSep = ','
- r.firstElement = false
-}
-
-// WantColon requires a colon to be present before fetching next token.
-func (r *Lexer) WantColon() {
- r.wantSep = ':'
- r.firstElement = false
-}
diff --git a/vendor/github.com/mailru/easyjson/jwriter/writer.go b/vendor/github.com/mailru/easyjson/jwriter/writer.go
deleted file mode 100644
index b9ed7ccaa..000000000
--- a/vendor/github.com/mailru/easyjson/jwriter/writer.go
+++ /dev/null
@@ -1,390 +0,0 @@
-// Package jwriter contains a JSON writer.
-package jwriter
-
-import (
- "io"
- "strconv"
- "unicode/utf8"
-
- "github.com/mailru/easyjson/buffer"
-)
-
-// Flags describe various encoding options. The behavior may be actually implemented in the encoder, but
-// Flags field in Writer is used to set and pass them around.
-type Flags int
-
-const (
- NilMapAsEmpty Flags = 1 << iota // Encode nil map as '{}' rather than 'null'.
- NilSliceAsEmpty // Encode nil slice as '[]' rather than 'null'.
-)
-
-// Writer is a JSON writer.
-type Writer struct {
- Flags Flags
-
- Error error
- Buffer buffer.Buffer
- NoEscapeHTML bool
-}
-
-// Size returns the size of the data that was written out.
-func (w *Writer) Size() int {
- return w.Buffer.Size()
-}
-
-// DumpTo outputs the data to given io.Writer, resetting the buffer.
-func (w *Writer) DumpTo(out io.Writer) (written int, err error) {
- return w.Buffer.DumpTo(out)
-}
-
-// BuildBytes returns writer data as a single byte slice. You can optionally provide one byte slice
-// as argument that it will try to reuse.
-func (w *Writer) BuildBytes(reuse ...[]byte) ([]byte, error) {
- if w.Error != nil {
- return nil, w.Error
- }
-
- return w.Buffer.BuildBytes(reuse...), nil
-}
-
-// ReadCloser returns an io.ReadCloser that can be used to read the data.
-// ReadCloser also resets the buffer.
-func (w *Writer) ReadCloser() (io.ReadCloser, error) {
- if w.Error != nil {
- return nil, w.Error
- }
-
- return w.Buffer.ReadCloser(), nil
-}
-
-// RawByte appends raw binary data to the buffer.
-func (w *Writer) RawByte(c byte) {
- w.Buffer.AppendByte(c)
-}
-
-// RawByte appends raw binary data to the buffer.
-func (w *Writer) RawString(s string) {
- w.Buffer.AppendString(s)
-}
-
-// Raw appends raw binary data to the buffer or sets the error if it is given. Useful for
-// calling with results of MarshalJSON-like functions.
-func (w *Writer) Raw(data []byte, err error) {
- switch {
- case w.Error != nil:
- return
- case err != nil:
- w.Error = err
- case len(data) > 0:
- w.Buffer.AppendBytes(data)
- default:
- w.RawString("null")
- }
-}
-
-// RawText encloses raw binary data in quotes and appends in to the buffer.
-// Useful for calling with results of MarshalText-like functions.
-func (w *Writer) RawText(data []byte, err error) {
- switch {
- case w.Error != nil:
- return
- case err != nil:
- w.Error = err
- case len(data) > 0:
- w.String(string(data))
- default:
- w.RawString("null")
- }
-}
-
-// Base64Bytes appends data to the buffer after base64 encoding it
-func (w *Writer) Base64Bytes(data []byte) {
- if data == nil {
- w.Buffer.AppendString("null")
- return
- }
- w.Buffer.AppendByte('"')
- w.base64(data)
- w.Buffer.AppendByte('"')
-}
-
-func (w *Writer) Uint8(n uint8) {
- w.Buffer.EnsureSpace(3)
- w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10)
-}
-
-func (w *Writer) Uint16(n uint16) {
- w.Buffer.EnsureSpace(5)
- w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10)
-}
-
-func (w *Writer) Uint32(n uint32) {
- w.Buffer.EnsureSpace(10)
- w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10)
-}
-
-func (w *Writer) Uint(n uint) {
- w.Buffer.EnsureSpace(20)
- w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10)
-}
-
-func (w *Writer) Uint64(n uint64) {
- w.Buffer.EnsureSpace(20)
- w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, n, 10)
-}
-
-func (w *Writer) Int8(n int8) {
- w.Buffer.EnsureSpace(4)
- w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10)
-}
-
-func (w *Writer) Int16(n int16) {
- w.Buffer.EnsureSpace(6)
- w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10)
-}
-
-func (w *Writer) Int32(n int32) {
- w.Buffer.EnsureSpace(11)
- w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10)
-}
-
-func (w *Writer) Int(n int) {
- w.Buffer.EnsureSpace(21)
- w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10)
-}
-
-func (w *Writer) Int64(n int64) {
- w.Buffer.EnsureSpace(21)
- w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, n, 10)
-}
-
-func (w *Writer) Uint8Str(n uint8) {
- w.Buffer.EnsureSpace(3)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) Uint16Str(n uint16) {
- w.Buffer.EnsureSpace(5)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) Uint32Str(n uint32) {
- w.Buffer.EnsureSpace(10)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) UintStr(n uint) {
- w.Buffer.EnsureSpace(20)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) Uint64Str(n uint64) {
- w.Buffer.EnsureSpace(20)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, n, 10)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) UintptrStr(n uintptr) {
- w.Buffer.EnsureSpace(20)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendUint(w.Buffer.Buf, uint64(n), 10)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) Int8Str(n int8) {
- w.Buffer.EnsureSpace(4)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) Int16Str(n int16) {
- w.Buffer.EnsureSpace(6)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) Int32Str(n int32) {
- w.Buffer.EnsureSpace(11)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) IntStr(n int) {
- w.Buffer.EnsureSpace(21)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, int64(n), 10)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) Int64Str(n int64) {
- w.Buffer.EnsureSpace(21)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendInt(w.Buffer.Buf, n, 10)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) Float32(n float32) {
- w.Buffer.EnsureSpace(20)
- w.Buffer.Buf = strconv.AppendFloat(w.Buffer.Buf, float64(n), 'g', -1, 32)
-}
-
-func (w *Writer) Float32Str(n float32) {
- w.Buffer.EnsureSpace(20)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendFloat(w.Buffer.Buf, float64(n), 'g', -1, 32)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) Float64(n float64) {
- w.Buffer.EnsureSpace(20)
- w.Buffer.Buf = strconv.AppendFloat(w.Buffer.Buf, n, 'g', -1, 64)
-}
-
-func (w *Writer) Float64Str(n float64) {
- w.Buffer.EnsureSpace(20)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
- w.Buffer.Buf = strconv.AppendFloat(w.Buffer.Buf, float64(n), 'g', -1, 64)
- w.Buffer.Buf = append(w.Buffer.Buf, '"')
-}
-
-func (w *Writer) Bool(v bool) {
- w.Buffer.EnsureSpace(5)
- if v {
- w.Buffer.Buf = append(w.Buffer.Buf, "true"...)
- } else {
- w.Buffer.Buf = append(w.Buffer.Buf, "false"...)
- }
-}
-
-const chars = "0123456789abcdef"
-
-func isNotEscapedSingleChar(c byte, escapeHTML bool) bool {
- // Note: might make sense to use a table if there are more chars to escape. With 4 chars
- // it benchmarks the same.
- if escapeHTML {
- return c != '<' && c != '>' && c != '&' && c != '\\' && c != '"' && c >= 0x20 && c < utf8.RuneSelf
- } else {
- return c != '\\' && c != '"' && c >= 0x20 && c < utf8.RuneSelf
- }
-}
-
-func (w *Writer) String(s string) {
- w.Buffer.AppendByte('"')
-
- // Portions of the string that contain no escapes are appended as
- // byte slices.
-
- p := 0 // last non-escape symbol
-
- for i := 0; i < len(s); {
- c := s[i]
-
- if isNotEscapedSingleChar(c, !w.NoEscapeHTML) {
- // single-width character, no escaping is required
- i++
- continue
- } else if c < utf8.RuneSelf {
- // single-with character, need to escape
- w.Buffer.AppendString(s[p:i])
- switch c {
- case '\t':
- w.Buffer.AppendString(`\t`)
- case '\r':
- w.Buffer.AppendString(`\r`)
- case '\n':
- w.Buffer.AppendString(`\n`)
- case '\\':
- w.Buffer.AppendString(`\\`)
- case '"':
- w.Buffer.AppendString(`\"`)
- default:
- w.Buffer.AppendString(`\u00`)
- w.Buffer.AppendByte(chars[c>>4])
- w.Buffer.AppendByte(chars[c&0xf])
- }
-
- i++
- p = i
- continue
- }
-
- // broken utf
- runeValue, runeWidth := utf8.DecodeRuneInString(s[i:])
- if runeValue == utf8.RuneError && runeWidth == 1 {
- w.Buffer.AppendString(s[p:i])
- w.Buffer.AppendString(`\ufffd`)
- i++
- p = i
- continue
- }
-
- // jsonp stuff - tab separator and line separator
- if runeValue == '\u2028' || runeValue == '\u2029' {
- w.Buffer.AppendString(s[p:i])
- w.Buffer.AppendString(`\u202`)
- w.Buffer.AppendByte(chars[runeValue&0xf])
- i += runeWidth
- p = i
- continue
- }
- i += runeWidth
- }
- w.Buffer.AppendString(s[p:])
- w.Buffer.AppendByte('"')
-}
-
-const encode = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
-const padChar = '='
-
-func (w *Writer) base64(in []byte) {
-
- if len(in) == 0 {
- return
- }
-
- w.Buffer.EnsureSpace(((len(in)-1)/3 + 1) * 4)
-
- si := 0
- n := (len(in) / 3) * 3
-
- for si < n {
- // Convert 3x 8bit source bytes into 4 bytes
- val := uint(in[si+0])<<16 | uint(in[si+1])<<8 | uint(in[si+2])
-
- w.Buffer.Buf = append(w.Buffer.Buf, encode[val>>18&0x3F], encode[val>>12&0x3F], encode[val>>6&0x3F], encode[val&0x3F])
-
- si += 3
- }
-
- remain := len(in) - si
- if remain == 0 {
- return
- }
-
- // Add the remaining small block
- val := uint(in[si+0]) << 16
- if remain == 2 {
- val |= uint(in[si+1]) << 8
- }
-
- w.Buffer.Buf = append(w.Buffer.Buf, encode[val>>18&0x3F], encode[val>>12&0x3F])
-
- switch remain {
- case 2:
- w.Buffer.Buf = append(w.Buffer.Buf, encode[val>>6&0x3F], byte(padChar))
- case 1:
- w.Buffer.Buf = append(w.Buffer.Buf, byte(padChar), byte(padChar))
- }
-}
diff --git a/vendor/github.com/mailru/easyjson/raw.go b/vendor/github.com/mailru/easyjson/raw.go
deleted file mode 100644
index 81bd002e1..000000000
--- a/vendor/github.com/mailru/easyjson/raw.go
+++ /dev/null
@@ -1,45 +0,0 @@
-package easyjson
-
-import (
- "github.com/mailru/easyjson/jlexer"
- "github.com/mailru/easyjson/jwriter"
-)
-
-// RawMessage is a raw piece of JSON (number, string, bool, object, array or
-// null) that is extracted without parsing and output as is during marshaling.
-type RawMessage []byte
-
-// MarshalEasyJSON does JSON marshaling using easyjson interface.
-func (v *RawMessage) MarshalEasyJSON(w *jwriter.Writer) {
- if len(*v) == 0 {
- w.RawString("null")
- } else {
- w.Raw(*v, nil)
- }
-}
-
-// UnmarshalEasyJSON does JSON unmarshaling using easyjson interface.
-func (v *RawMessage) UnmarshalEasyJSON(l *jlexer.Lexer) {
- *v = RawMessage(l.Raw())
-}
-
-// UnmarshalJSON implements encoding/json.Unmarshaler interface.
-func (v *RawMessage) UnmarshalJSON(data []byte) error {
- *v = data
- return nil
-}
-
-var nullBytes = []byte("null")
-
-// MarshalJSON implements encoding/json.Marshaler interface.
-func (v RawMessage) MarshalJSON() ([]byte, error) {
- if len(v) == 0 {
- return nullBytes, nil
- }
- return v, nil
-}
-
-// IsDefined is required for integration with omitempty easyjson logic.
-func (v *RawMessage) IsDefined() bool {
- return len(*v) > 0
-}
diff --git a/vendor/github.com/mattn/go-runewidth/LICENSE b/vendor/github.com/mattn/go-runewidth/LICENSE
new file mode 100644
index 000000000..91b5cef30
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Yasuhiro Matsumoto
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/github.com/mattn/go-runewidth/README.mkd b/vendor/github.com/mattn/go-runewidth/README.mkd
index ffb0edd2c..66663a94b 100644
--- a/vendor/github.com/mattn/go-runewidth/README.mkd
+++ b/vendor/github.com/mattn/go-runewidth/README.mkd
@@ -4,6 +4,7 @@ go-runewidth
[![Build Status](https://travis-ci.org/mattn/go-runewidth.png?branch=master)](https://travis-ci.org/mattn/go-runewidth)
[![Coverage Status](https://coveralls.io/repos/mattn/go-runewidth/badge.png?branch=HEAD)](https://coveralls.io/r/mattn/go-runewidth?branch=HEAD)
[![GoDoc](https://godoc.org/github.com/mattn/go-runewidth?status.svg)](http://godoc.org/github.com/mattn/go-runewidth)
+[![Go Report Card](https://goreportcard.com/badge/github.com/mattn/go-runewidth)](https://goreportcard.com/report/github.com/mattn/go-runewidth)
Provides functions to get fixed width of the character or string.
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth.go b/vendor/github.com/mattn/go-runewidth/runewidth.go
index 3fbf33d59..3cb94106f 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth.go
@@ -1,356 +1,870 @@
package runewidth
-var EastAsianWidth = IsEastAsian()
-var DefaultCondition = &Condition{EastAsianWidth}
+import (
+ "os"
+)
+
+var (
+ // EastAsianWidth will be set true if the current locale is CJK
+ EastAsianWidth bool
+
+ // ZeroWidthJoiner is flag to set to use UTR#51 ZWJ
+ ZeroWidthJoiner bool
+
+ // DefaultCondition is a condition in current locale
+ DefaultCondition = &Condition{}
+)
+
+func init() {
+ handleEnv()
+}
+
+func handleEnv() {
+ env := os.Getenv("RUNEWIDTH_EASTASIAN")
+ if env == "" {
+ EastAsianWidth = IsEastAsian()
+ } else {
+ EastAsianWidth = env == "1"
+ }
+ // update DefaultCondition
+ DefaultCondition.EastAsianWidth = EastAsianWidth
+ DefaultCondition.ZeroWidthJoiner = ZeroWidthJoiner
+}
type interval struct {
first rune
last rune
}
-var combining = []interval{
- {0x0300, 0x036F}, {0x0483, 0x0486}, {0x0488, 0x0489},
- {0x0591, 0x05BD}, {0x05BF, 0x05BF}, {0x05C1, 0x05C2},
- {0x05C4, 0x05C5}, {0x05C7, 0x05C7}, {0x0600, 0x0603},
- {0x0610, 0x0615}, {0x064B, 0x065E}, {0x0670, 0x0670},
- {0x06D6, 0x06E4}, {0x06E7, 0x06E8}, {0x06EA, 0x06ED},
- {0x070F, 0x070F}, {0x0711, 0x0711}, {0x0730, 0x074A},
- {0x07A6, 0x07B0}, {0x07EB, 0x07F3}, {0x0901, 0x0902},
- {0x093C, 0x093C}, {0x0941, 0x0948}, {0x094D, 0x094D},
- {0x0951, 0x0954}, {0x0962, 0x0963}, {0x0981, 0x0981},
- {0x09BC, 0x09BC}, {0x09C1, 0x09C4}, {0x09CD, 0x09CD},
- {0x09E2, 0x09E3}, {0x0A01, 0x0A02}, {0x0A3C, 0x0A3C},
- {0x0A41, 0x0A42}, {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D},
- {0x0A70, 0x0A71}, {0x0A81, 0x0A82}, {0x0ABC, 0x0ABC},
- {0x0AC1, 0x0AC5}, {0x0AC7, 0x0AC8}, {0x0ACD, 0x0ACD},
- {0x0AE2, 0x0AE3}, {0x0B01, 0x0B01}, {0x0B3C, 0x0B3C},
- {0x0B3F, 0x0B3F}, {0x0B41, 0x0B43}, {0x0B4D, 0x0B4D},
- {0x0B56, 0x0B56}, {0x0B82, 0x0B82}, {0x0BC0, 0x0BC0},
- {0x0BCD, 0x0BCD}, {0x0C3E, 0x0C40}, {0x0C46, 0x0C48},
- {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, {0x0CBC, 0x0CBC},
- {0x0CBF, 0x0CBF}, {0x0CC6, 0x0CC6}, {0x0CCC, 0x0CCD},
- {0x0CE2, 0x0CE3}, {0x0D41, 0x0D43}, {0x0D4D, 0x0D4D},
- {0x0DCA, 0x0DCA}, {0x0DD2, 0x0DD4}, {0x0DD6, 0x0DD6},
+type table []interval
+
+func inTables(r rune, ts ...table) bool {
+ for _, t := range ts {
+ if inTable(r, t) {
+ return true
+ }
+ }
+ return false
+}
+
+func inTable(r rune, t table) bool {
+ // func (t table) IncludesRune(r rune) bool {
+ if r < t[0].first {
+ return false
+ }
+
+ bot := 0
+ top := len(t) - 1
+ for top >= bot {
+ mid := (bot + top) >> 1
+
+ switch {
+ case t[mid].last < r:
+ bot = mid + 1
+ case t[mid].first > r:
+ top = mid - 1
+ default:
+ return true
+ }
+ }
+
+ return false
+}
+
+var private = table{
+ {0x00E000, 0x00F8FF}, {0x0F0000, 0x0FFFFD}, {0x100000, 0x10FFFD},
+}
+
+var nonprint = table{
+ {0x0000, 0x001F}, {0x007F, 0x009F}, {0x00AD, 0x00AD},
+ {0x070F, 0x070F}, {0x180B, 0x180E}, {0x200B, 0x200F},
+ {0x2028, 0x202E}, {0x206A, 0x206F}, {0xD800, 0xDFFF},
+ {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, {0xFFFE, 0xFFFF},
+}
+
+var combining = table{
+ {0x0300, 0x036F}, {0x0483, 0x0489}, {0x0591, 0x05BD},
+ {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, {0x05C4, 0x05C5},
+ {0x05C7, 0x05C7}, {0x0610, 0x061A}, {0x064B, 0x065F},
+ {0x0670, 0x0670}, {0x06D6, 0x06DC}, {0x06DF, 0x06E4},
+ {0x06E7, 0x06E8}, {0x06EA, 0x06ED}, {0x0711, 0x0711},
+ {0x0730, 0x074A}, {0x07A6, 0x07B0}, {0x07EB, 0x07F3},
+ {0x0816, 0x0819}, {0x081B, 0x0823}, {0x0825, 0x0827},
+ {0x0829, 0x082D}, {0x0859, 0x085B}, {0x08D4, 0x08E1},
+ {0x08E3, 0x0903}, {0x093A, 0x093C}, {0x093E, 0x094F},
+ {0x0951, 0x0957}, {0x0962, 0x0963}, {0x0981, 0x0983},
+ {0x09BC, 0x09BC}, {0x09BE, 0x09C4}, {0x09C7, 0x09C8},
+ {0x09CB, 0x09CD}, {0x09D7, 0x09D7}, {0x09E2, 0x09E3},
+ {0x0A01, 0x0A03}, {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A42},
+ {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51},
+ {0x0A70, 0x0A71}, {0x0A75, 0x0A75}, {0x0A81, 0x0A83},
+ {0x0ABC, 0x0ABC}, {0x0ABE, 0x0AC5}, {0x0AC7, 0x0AC9},
+ {0x0ACB, 0x0ACD}, {0x0AE2, 0x0AE3}, {0x0B01, 0x0B03},
+ {0x0B3C, 0x0B3C}, {0x0B3E, 0x0B44}, {0x0B47, 0x0B48},
+ {0x0B4B, 0x0B4D}, {0x0B56, 0x0B57}, {0x0B62, 0x0B63},
+ {0x0B82, 0x0B82}, {0x0BBE, 0x0BC2}, {0x0BC6, 0x0BC8},
+ {0x0BCA, 0x0BCD}, {0x0BD7, 0x0BD7}, {0x0C00, 0x0C03},
+ {0x0C3E, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D},
+ {0x0C55, 0x0C56}, {0x0C62, 0x0C63}, {0x0C81, 0x0C83},
+ {0x0CBC, 0x0CBC}, {0x0CBE, 0x0CC4}, {0x0CC6, 0x0CC8},
+ {0x0CCA, 0x0CCD}, {0x0CD5, 0x0CD6}, {0x0CE2, 0x0CE3},
+ {0x0D01, 0x0D03}, {0x0D3E, 0x0D44}, {0x0D46, 0x0D48},
+ {0x0D4A, 0x0D4D}, {0x0D57, 0x0D57}, {0x0D62, 0x0D63},
+ {0x0D82, 0x0D83}, {0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD4},
+ {0x0DD6, 0x0DD6}, {0x0DD8, 0x0DDF}, {0x0DF2, 0x0DF3},
{0x0E31, 0x0E31}, {0x0E34, 0x0E3A}, {0x0E47, 0x0E4E},
{0x0EB1, 0x0EB1}, {0x0EB4, 0x0EB9}, {0x0EBB, 0x0EBC},
{0x0EC8, 0x0ECD}, {0x0F18, 0x0F19}, {0x0F35, 0x0F35},
- {0x0F37, 0x0F37}, {0x0F39, 0x0F39}, {0x0F71, 0x0F7E},
- {0x0F80, 0x0F84}, {0x0F86, 0x0F87}, {0x0F90, 0x0F97},
- {0x0F99, 0x0FBC}, {0x0FC6, 0x0FC6}, {0x102D, 0x1030},
- {0x1032, 0x1032}, {0x1036, 0x1037}, {0x1039, 0x1039},
- {0x1058, 0x1059}, {0x1160, 0x11FF}, {0x135F, 0x135F},
+ {0x0F37, 0x0F37}, {0x0F39, 0x0F39}, {0x0F3E, 0x0F3F},
+ {0x0F71, 0x0F84}, {0x0F86, 0x0F87}, {0x0F8D, 0x0F97},
+ {0x0F99, 0x0FBC}, {0x0FC6, 0x0FC6}, {0x102B, 0x103E},
+ {0x1056, 0x1059}, {0x105E, 0x1060}, {0x1062, 0x1064},
+ {0x1067, 0x106D}, {0x1071, 0x1074}, {0x1082, 0x108D},
+ {0x108F, 0x108F}, {0x109A, 0x109D}, {0x135D, 0x135F},
{0x1712, 0x1714}, {0x1732, 0x1734}, {0x1752, 0x1753},
- {0x1772, 0x1773}, {0x17B4, 0x17B5}, {0x17B7, 0x17BD},
- {0x17C6, 0x17C6}, {0x17C9, 0x17D3}, {0x17DD, 0x17DD},
- {0x180B, 0x180D}, {0x18A9, 0x18A9}, {0x1920, 0x1922},
- {0x1927, 0x1928}, {0x1932, 0x1932}, {0x1939, 0x193B},
- {0x1A17, 0x1A18}, {0x1B00, 0x1B03}, {0x1B34, 0x1B34},
- {0x1B36, 0x1B3A}, {0x1B3C, 0x1B3C}, {0x1B42, 0x1B42},
- {0x1B6B, 0x1B73}, {0x1DC0, 0x1DCA}, {0x1DFE, 0x1DFF},
- {0x200B, 0x200F}, {0x202A, 0x202E}, {0x2060, 0x2063},
- {0x206A, 0x206F}, {0x20D0, 0x20EF}, {0x302A, 0x302F},
- {0x3099, 0x309A}, {0xA806, 0xA806}, {0xA80B, 0xA80B},
- {0xA825, 0xA826}, {0xFB1E, 0xFB1E}, {0xFE00, 0xFE0F},
- {0xFE20, 0xFE23}, {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB},
- {0x10A01, 0x10A03}, {0x10A05, 0x10A06}, {0x10A0C, 0x10A0F},
- {0x10A38, 0x10A3A}, {0x10A3F, 0x10A3F}, {0x1D167, 0x1D169},
- {0x1D173, 0x1D182}, {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD},
- {0x1D242, 0x1D244}, {0xE0001, 0xE0001}, {0xE0020, 0xE007F},
+ {0x1772, 0x1773}, {0x17B4, 0x17D3}, {0x17DD, 0x17DD},
+ {0x180B, 0x180D}, {0x1885, 0x1886}, {0x18A9, 0x18A9},
+ {0x1920, 0x192B}, {0x1930, 0x193B}, {0x1A17, 0x1A1B},
+ {0x1A55, 0x1A5E}, {0x1A60, 0x1A7C}, {0x1A7F, 0x1A7F},
+ {0x1AB0, 0x1ABE}, {0x1B00, 0x1B04}, {0x1B34, 0x1B44},
+ {0x1B6B, 0x1B73}, {0x1B80, 0x1B82}, {0x1BA1, 0x1BAD},
+ {0x1BE6, 0x1BF3}, {0x1C24, 0x1C37}, {0x1CD0, 0x1CD2},
+ {0x1CD4, 0x1CE8}, {0x1CED, 0x1CED}, {0x1CF2, 0x1CF4},
+ {0x1CF8, 0x1CF9}, {0x1DC0, 0x1DF5}, {0x1DFB, 0x1DFF},
+ {0x20D0, 0x20F0}, {0x2CEF, 0x2CF1}, {0x2D7F, 0x2D7F},
+ {0x2DE0, 0x2DFF}, {0x302A, 0x302F}, {0x3099, 0x309A},
+ {0xA66F, 0xA672}, {0xA674, 0xA67D}, {0xA69E, 0xA69F},
+ {0xA6F0, 0xA6F1}, {0xA802, 0xA802}, {0xA806, 0xA806},
+ {0xA80B, 0xA80B}, {0xA823, 0xA827}, {0xA880, 0xA881},
+ {0xA8B4, 0xA8C5}, {0xA8E0, 0xA8F1}, {0xA926, 0xA92D},
+ {0xA947, 0xA953}, {0xA980, 0xA983}, {0xA9B3, 0xA9C0},
+ {0xA9E5, 0xA9E5}, {0xAA29, 0xAA36}, {0xAA43, 0xAA43},
+ {0xAA4C, 0xAA4D}, {0xAA7B, 0xAA7D}, {0xAAB0, 0xAAB0},
+ {0xAAB2, 0xAAB4}, {0xAAB7, 0xAAB8}, {0xAABE, 0xAABF},
+ {0xAAC1, 0xAAC1}, {0xAAEB, 0xAAEF}, {0xAAF5, 0xAAF6},
+ {0xABE3, 0xABEA}, {0xABEC, 0xABED}, {0xFB1E, 0xFB1E},
+ {0xFE00, 0xFE0F}, {0xFE20, 0xFE2F}, {0x101FD, 0x101FD},
+ {0x102E0, 0x102E0}, {0x10376, 0x1037A}, {0x10A01, 0x10A03},
+ {0x10A05, 0x10A06}, {0x10A0C, 0x10A0F}, {0x10A38, 0x10A3A},
+ {0x10A3F, 0x10A3F}, {0x10AE5, 0x10AE6}, {0x11000, 0x11002},
+ {0x11038, 0x11046}, {0x1107F, 0x11082}, {0x110B0, 0x110BA},
+ {0x11100, 0x11102}, {0x11127, 0x11134}, {0x11173, 0x11173},
+ {0x11180, 0x11182}, {0x111B3, 0x111C0}, {0x111CA, 0x111CC},
+ {0x1122C, 0x11237}, {0x1123E, 0x1123E}, {0x112DF, 0x112EA},
+ {0x11300, 0x11303}, {0x1133C, 0x1133C}, {0x1133E, 0x11344},
+ {0x11347, 0x11348}, {0x1134B, 0x1134D}, {0x11357, 0x11357},
+ {0x11362, 0x11363}, {0x11366, 0x1136C}, {0x11370, 0x11374},
+ {0x11435, 0x11446}, {0x114B0, 0x114C3}, {0x115AF, 0x115B5},
+ {0x115B8, 0x115C0}, {0x115DC, 0x115DD}, {0x11630, 0x11640},
+ {0x116AB, 0x116B7}, {0x1171D, 0x1172B}, {0x11C2F, 0x11C36},
+ {0x11C38, 0x11C3F}, {0x11C92, 0x11CA7}, {0x11CA9, 0x11CB6},
+ {0x16AF0, 0x16AF4}, {0x16B30, 0x16B36}, {0x16F51, 0x16F7E},
+ {0x16F8F, 0x16F92}, {0x1BC9D, 0x1BC9E}, {0x1D165, 0x1D169},
+ {0x1D16D, 0x1D172}, {0x1D17B, 0x1D182}, {0x1D185, 0x1D18B},
+ {0x1D1AA, 0x1D1AD}, {0x1D242, 0x1D244}, {0x1DA00, 0x1DA36},
+ {0x1DA3B, 0x1DA6C}, {0x1DA75, 0x1DA75}, {0x1DA84, 0x1DA84},
+ {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, {0x1E000, 0x1E006},
+ {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024},
+ {0x1E026, 0x1E02A}, {0x1E8D0, 0x1E8D6}, {0x1E944, 0x1E94A},
{0xE0100, 0xE01EF},
}
-type ctype int
+var doublewidth = table{
+ {0x1100, 0x115F}, {0x231A, 0x231B}, {0x2329, 0x232A},
+ {0x23E9, 0x23EC}, {0x23F0, 0x23F0}, {0x23F3, 0x23F3},
+ {0x25FD, 0x25FE}, {0x2614, 0x2615}, {0x2648, 0x2653},
+ {0x267F, 0x267F}, {0x2693, 0x2693}, {0x26A1, 0x26A1},
+ {0x26AA, 0x26AB}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5},
+ {0x26CE, 0x26CE}, {0x26D4, 0x26D4}, {0x26EA, 0x26EA},
+ {0x26F2, 0x26F3}, {0x26F5, 0x26F5}, {0x26FA, 0x26FA},
+ {0x26FD, 0x26FD}, {0x2705, 0x2705}, {0x270A, 0x270B},
+ {0x2728, 0x2728}, {0x274C, 0x274C}, {0x274E, 0x274E},
+ {0x2753, 0x2755}, {0x2757, 0x2757}, {0x2795, 0x2797},
+ {0x27B0, 0x27B0}, {0x27BF, 0x27BF}, {0x2B1B, 0x2B1C},
+ {0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x2E80, 0x2E99},
+ {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFB},
+ {0x3000, 0x303E}, {0x3041, 0x3096}, {0x3099, 0x30FF},
+ {0x3105, 0x312D}, {0x3131, 0x318E}, {0x3190, 0x31BA},
+ {0x31C0, 0x31E3}, {0x31F0, 0x321E}, {0x3220, 0x3247},
+ {0x3250, 0x32FE}, {0x3300, 0x4DBF}, {0x4E00, 0xA48C},
+ {0xA490, 0xA4C6}, {0xA960, 0xA97C}, {0xAC00, 0xD7A3},
+ {0xF900, 0xFAFF}, {0xFE10, 0xFE19}, {0xFE30, 0xFE52},
+ {0xFE54, 0xFE66}, {0xFE68, 0xFE6B}, {0xFF01, 0xFF60},
+ {0xFFE0, 0xFFE6}, {0x16FE0, 0x16FE0}, {0x17000, 0x187EC},
+ {0x18800, 0x18AF2}, {0x1B000, 0x1B001}, {0x1F004, 0x1F004},
+ {0x1F0CF, 0x1F0CF}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A},
+ {0x1F200, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248},
+ {0x1F250, 0x1F251}, {0x1F300, 0x1F320}, {0x1F32D, 0x1F335},
+ {0x1F337, 0x1F37C}, {0x1F37E, 0x1F393}, {0x1F3A0, 0x1F3CA},
+ {0x1F3CF, 0x1F3D3}, {0x1F3E0, 0x1F3F0}, {0x1F3F4, 0x1F3F4},
+ {0x1F3F8, 0x1F43E}, {0x1F440, 0x1F440}, {0x1F442, 0x1F4FC},
+ {0x1F4FF, 0x1F53D}, {0x1F54B, 0x1F54E}, {0x1F550, 0x1F567},
+ {0x1F57A, 0x1F57A}, {0x1F595, 0x1F596}, {0x1F5A4, 0x1F5A4},
+ {0x1F5FB, 0x1F64F}, {0x1F680, 0x1F6C5}, {0x1F6CC, 0x1F6CC},
+ {0x1F6D0, 0x1F6D2}, {0x1F6EB, 0x1F6EC}, {0x1F6F4, 0x1F6F6},
+ {0x1F910, 0x1F91E}, {0x1F920, 0x1F927}, {0x1F930, 0x1F930},
+ {0x1F933, 0x1F93E}, {0x1F940, 0x1F94B}, {0x1F950, 0x1F95E},
+ {0x1F980, 0x1F991}, {0x1F9C0, 0x1F9C0}, {0x20000, 0x2FFFD},
+ {0x30000, 0x3FFFD},
+}
-const (
- narrow ctype = iota
- ambiguous
- wide
- halfwidth
- fullwidth
- neutral
-)
+var ambiguous = table{
+ {0x00A1, 0x00A1}, {0x00A4, 0x00A4}, {0x00A7, 0x00A8},
+ {0x00AA, 0x00AA}, {0x00AD, 0x00AE}, {0x00B0, 0x00B4},
+ {0x00B6, 0x00BA}, {0x00BC, 0x00BF}, {0x00C6, 0x00C6},
+ {0x00D0, 0x00D0}, {0x00D7, 0x00D8}, {0x00DE, 0x00E1},
+ {0x00E6, 0x00E6}, {0x00E8, 0x00EA}, {0x00EC, 0x00ED},
+ {0x00F0, 0x00F0}, {0x00F2, 0x00F3}, {0x00F7, 0x00FA},
+ {0x00FC, 0x00FC}, {0x00FE, 0x00FE}, {0x0101, 0x0101},
+ {0x0111, 0x0111}, {0x0113, 0x0113}, {0x011B, 0x011B},
+ {0x0126, 0x0127}, {0x012B, 0x012B}, {0x0131, 0x0133},
+ {0x0138, 0x0138}, {0x013F, 0x0142}, {0x0144, 0x0144},
+ {0x0148, 0x014B}, {0x014D, 0x014D}, {0x0152, 0x0153},
+ {0x0166, 0x0167}, {0x016B, 0x016B}, {0x01CE, 0x01CE},
+ {0x01D0, 0x01D0}, {0x01D2, 0x01D2}, {0x01D4, 0x01D4},
+ {0x01D6, 0x01D6}, {0x01D8, 0x01D8}, {0x01DA, 0x01DA},
+ {0x01DC, 0x01DC}, {0x0251, 0x0251}, {0x0261, 0x0261},
+ {0x02C4, 0x02C4}, {0x02C7, 0x02C7}, {0x02C9, 0x02CB},
+ {0x02CD, 0x02CD}, {0x02D0, 0x02D0}, {0x02D8, 0x02DB},
+ {0x02DD, 0x02DD}, {0x02DF, 0x02DF}, {0x0300, 0x036F},
+ {0x0391, 0x03A1}, {0x03A3, 0x03A9}, {0x03B1, 0x03C1},
+ {0x03C3, 0x03C9}, {0x0401, 0x0401}, {0x0410, 0x044F},
+ {0x0451, 0x0451}, {0x2010, 0x2010}, {0x2013, 0x2016},
+ {0x2018, 0x2019}, {0x201C, 0x201D}, {0x2020, 0x2022},
+ {0x2024, 0x2027}, {0x2030, 0x2030}, {0x2032, 0x2033},
+ {0x2035, 0x2035}, {0x203B, 0x203B}, {0x203E, 0x203E},
+ {0x2074, 0x2074}, {0x207F, 0x207F}, {0x2081, 0x2084},
+ {0x20AC, 0x20AC}, {0x2103, 0x2103}, {0x2105, 0x2105},
+ {0x2109, 0x2109}, {0x2113, 0x2113}, {0x2116, 0x2116},
+ {0x2121, 0x2122}, {0x2126, 0x2126}, {0x212B, 0x212B},
+ {0x2153, 0x2154}, {0x215B, 0x215E}, {0x2160, 0x216B},
+ {0x2170, 0x2179}, {0x2189, 0x2189}, {0x2190, 0x2199},
+ {0x21B8, 0x21B9}, {0x21D2, 0x21D2}, {0x21D4, 0x21D4},
+ {0x21E7, 0x21E7}, {0x2200, 0x2200}, {0x2202, 0x2203},
+ {0x2207, 0x2208}, {0x220B, 0x220B}, {0x220F, 0x220F},
+ {0x2211, 0x2211}, {0x2215, 0x2215}, {0x221A, 0x221A},
+ {0x221D, 0x2220}, {0x2223, 0x2223}, {0x2225, 0x2225},
+ {0x2227, 0x222C}, {0x222E, 0x222E}, {0x2234, 0x2237},
+ {0x223C, 0x223D}, {0x2248, 0x2248}, {0x224C, 0x224C},
+ {0x2252, 0x2252}, {0x2260, 0x2261}, {0x2264, 0x2267},
+ {0x226A, 0x226B}, {0x226E, 0x226F}, {0x2282, 0x2283},
+ {0x2286, 0x2287}, {0x2295, 0x2295}, {0x2299, 0x2299},
+ {0x22A5, 0x22A5}, {0x22BF, 0x22BF}, {0x2312, 0x2312},
+ {0x2460, 0x24E9}, {0x24EB, 0x254B}, {0x2550, 0x2573},
+ {0x2580, 0x258F}, {0x2592, 0x2595}, {0x25A0, 0x25A1},
+ {0x25A3, 0x25A9}, {0x25B2, 0x25B3}, {0x25B6, 0x25B7},
+ {0x25BC, 0x25BD}, {0x25C0, 0x25C1}, {0x25C6, 0x25C8},
+ {0x25CB, 0x25CB}, {0x25CE, 0x25D1}, {0x25E2, 0x25E5},
+ {0x25EF, 0x25EF}, {0x2605, 0x2606}, {0x2609, 0x2609},
+ {0x260E, 0x260F}, {0x261C, 0x261C}, {0x261E, 0x261E},
+ {0x2640, 0x2640}, {0x2642, 0x2642}, {0x2660, 0x2661},
+ {0x2663, 0x2665}, {0x2667, 0x266A}, {0x266C, 0x266D},
+ {0x266F, 0x266F}, {0x269E, 0x269F}, {0x26BF, 0x26BF},
+ {0x26C6, 0x26CD}, {0x26CF, 0x26D3}, {0x26D5, 0x26E1},
+ {0x26E3, 0x26E3}, {0x26E8, 0x26E9}, {0x26EB, 0x26F1},
+ {0x26F4, 0x26F4}, {0x26F6, 0x26F9}, {0x26FB, 0x26FC},
+ {0x26FE, 0x26FF}, {0x273D, 0x273D}, {0x2776, 0x277F},
+ {0x2B56, 0x2B59}, {0x3248, 0x324F}, {0xE000, 0xF8FF},
+ {0xFE00, 0xFE0F}, {0xFFFD, 0xFFFD}, {0x1F100, 0x1F10A},
+ {0x1F110, 0x1F12D}, {0x1F130, 0x1F169}, {0x1F170, 0x1F18D},
+ {0x1F18F, 0x1F190}, {0x1F19B, 0x1F1AC}, {0xE0100, 0xE01EF},
+ {0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD},
+}
-type intervalType struct {
- first rune
- last rune
- ctype ctype
+var emoji = table{
+ {0x203C, 0x203C}, {0x2049, 0x2049}, {0x2122, 0x2122},
+ {0x2139, 0x2139}, {0x2194, 0x2199}, {0x21A9, 0x21AA},
+ {0x231A, 0x231B}, {0x2328, 0x2328}, {0x23CF, 0x23CF},
+ {0x23E9, 0x23F3}, {0x23F8, 0x23FA}, {0x24C2, 0x24C2},
+ {0x25AA, 0x25AB}, {0x25B6, 0x25B6}, {0x25C0, 0x25C0},
+ {0x25FB, 0x25FE}, {0x2600, 0x2604}, {0x260E, 0x260E},
+ {0x2611, 0x2611}, {0x2614, 0x2615}, {0x2618, 0x2618},
+ {0x261D, 0x261D}, {0x2620, 0x2620}, {0x2622, 0x2623},
+ {0x2626, 0x2626}, {0x262A, 0x262A}, {0x262E, 0x262F},
+ {0x2638, 0x263A}, {0x2640, 0x2640}, {0x2642, 0x2642},
+ {0x2648, 0x2653}, {0x265F, 0x2660}, {0x2663, 0x2663},
+ {0x2665, 0x2666}, {0x2668, 0x2668}, {0x267B, 0x267B},
+ {0x267E, 0x267F}, {0x2692, 0x2697}, {0x2699, 0x2699},
+ {0x269B, 0x269C}, {0x26A0, 0x26A1}, {0x26AA, 0x26AB},
+ {0x26B0, 0x26B1}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5},
+ {0x26C8, 0x26C8}, {0x26CE, 0x26CF}, {0x26D1, 0x26D1},
+ {0x26D3, 0x26D4}, {0x26E9, 0x26EA}, {0x26F0, 0x26F5},
+ {0x26F7, 0x26FA}, {0x26FD, 0x26FD}, {0x2702, 0x2702},
+ {0x2705, 0x2705}, {0x2708, 0x270D}, {0x270F, 0x270F},
+ {0x2712, 0x2712}, {0x2714, 0x2714}, {0x2716, 0x2716},
+ {0x271D, 0x271D}, {0x2721, 0x2721}, {0x2728, 0x2728},
+ {0x2733, 0x2734}, {0x2744, 0x2744}, {0x2747, 0x2747},
+ {0x274C, 0x274C}, {0x274E, 0x274E}, {0x2753, 0x2755},
+ {0x2757, 0x2757}, {0x2763, 0x2764}, {0x2795, 0x2797},
+ {0x27A1, 0x27A1}, {0x27B0, 0x27B0}, {0x27BF, 0x27BF},
+ {0x2934, 0x2935}, {0x2B05, 0x2B07}, {0x2B1B, 0x2B1C},
+ {0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x3030, 0x3030},
+ {0x303D, 0x303D}, {0x3297, 0x3297}, {0x3299, 0x3299},
+ {0x1F004, 0x1F004}, {0x1F0CF, 0x1F0CF}, {0x1F170, 0x1F171},
+ {0x1F17E, 0x1F17F}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A},
+ {0x1F1E6, 0x1F1FF}, {0x1F201, 0x1F202}, {0x1F21A, 0x1F21A},
+ {0x1F22F, 0x1F22F}, {0x1F232, 0x1F23A}, {0x1F250, 0x1F251},
+ {0x1F300, 0x1F321}, {0x1F324, 0x1F393}, {0x1F396, 0x1F397},
+ {0x1F399, 0x1F39B}, {0x1F39E, 0x1F3F0}, {0x1F3F3, 0x1F3F5},
+ {0x1F3F7, 0x1F4FD}, {0x1F4FF, 0x1F53D}, {0x1F549, 0x1F54E},
+ {0x1F550, 0x1F567}, {0x1F56F, 0x1F570}, {0x1F573, 0x1F57A},
+ {0x1F587, 0x1F587}, {0x1F58A, 0x1F58D}, {0x1F590, 0x1F590},
+ {0x1F595, 0x1F596}, {0x1F5A4, 0x1F5A5}, {0x1F5A8, 0x1F5A8},
+ {0x1F5B1, 0x1F5B2}, {0x1F5BC, 0x1F5BC}, {0x1F5C2, 0x1F5C4},
+ {0x1F5D1, 0x1F5D3}, {0x1F5DC, 0x1F5DE}, {0x1F5E1, 0x1F5E1},
+ {0x1F5E3, 0x1F5E3}, {0x1F5E8, 0x1F5E8}, {0x1F5EF, 0x1F5EF},
+ {0x1F5F3, 0x1F5F3}, {0x1F5FA, 0x1F64F}, {0x1F680, 0x1F6C5},
+ {0x1F6CB, 0x1F6D2}, {0x1F6E0, 0x1F6E5}, {0x1F6E9, 0x1F6E9},
+ {0x1F6EB, 0x1F6EC}, {0x1F6F0, 0x1F6F0}, {0x1F6F3, 0x1F6F9},
+ {0x1F910, 0x1F93A}, {0x1F93C, 0x1F93E}, {0x1F940, 0x1F945},
+ {0x1F947, 0x1F970}, {0x1F973, 0x1F976}, {0x1F97A, 0x1F97A},
+ {0x1F97C, 0x1F9A2}, {0x1F9B0, 0x1F9B9}, {0x1F9C0, 0x1F9C2},
+ {0x1F9D0, 0x1F9FF},
+}
+
+var notassigned = table{
+ {0x0378, 0x0379}, {0x0380, 0x0383}, {0x038B, 0x038B},
+ {0x038D, 0x038D}, {0x03A2, 0x03A2}, {0x0530, 0x0530},
+ {0x0557, 0x0558}, {0x0560, 0x0560}, {0x0588, 0x0588},
+ {0x058B, 0x058C}, {0x0590, 0x0590}, {0x05C8, 0x05CF},
+ {0x05EB, 0x05EF}, {0x05F5, 0x05FF}, {0x061D, 0x061D},
+ {0x070E, 0x070E}, {0x074B, 0x074C}, {0x07B2, 0x07BF},
+ {0x07FB, 0x07FF}, {0x082E, 0x082F}, {0x083F, 0x083F},
+ {0x085C, 0x085D}, {0x085F, 0x089F}, {0x08B5, 0x08B5},
+ {0x08BE, 0x08D3}, {0x0984, 0x0984}, {0x098D, 0x098E},
+ {0x0991, 0x0992}, {0x09A9, 0x09A9}, {0x09B1, 0x09B1},
+ {0x09B3, 0x09B5}, {0x09BA, 0x09BB}, {0x09C5, 0x09C6},
+ {0x09C9, 0x09CA}, {0x09CF, 0x09D6}, {0x09D8, 0x09DB},
+ {0x09DE, 0x09DE}, {0x09E4, 0x09E5}, {0x09FC, 0x0A00},
+ {0x0A04, 0x0A04}, {0x0A0B, 0x0A0E}, {0x0A11, 0x0A12},
+ {0x0A29, 0x0A29}, {0x0A31, 0x0A31}, {0x0A34, 0x0A34},
+ {0x0A37, 0x0A37}, {0x0A3A, 0x0A3B}, {0x0A3D, 0x0A3D},
+ {0x0A43, 0x0A46}, {0x0A49, 0x0A4A}, {0x0A4E, 0x0A50},
+ {0x0A52, 0x0A58}, {0x0A5D, 0x0A5D}, {0x0A5F, 0x0A65},
+ {0x0A76, 0x0A80}, {0x0A84, 0x0A84}, {0x0A8E, 0x0A8E},
+ {0x0A92, 0x0A92}, {0x0AA9, 0x0AA9}, {0x0AB1, 0x0AB1},
+ {0x0AB4, 0x0AB4}, {0x0ABA, 0x0ABB}, {0x0AC6, 0x0AC6},
+ {0x0ACA, 0x0ACA}, {0x0ACE, 0x0ACF}, {0x0AD1, 0x0ADF},
+ {0x0AE4, 0x0AE5}, {0x0AF2, 0x0AF8}, {0x0AFA, 0x0B00},
+ {0x0B04, 0x0B04}, {0x0B0D, 0x0B0E}, {0x0B11, 0x0B12},
+ {0x0B29, 0x0B29}, {0x0B31, 0x0B31}, {0x0B34, 0x0B34},
+ {0x0B3A, 0x0B3B}, {0x0B45, 0x0B46}, {0x0B49, 0x0B4A},
+ {0x0B4E, 0x0B55}, {0x0B58, 0x0B5B}, {0x0B5E, 0x0B5E},
+ {0x0B64, 0x0B65}, {0x0B78, 0x0B81}, {0x0B84, 0x0B84},
+ {0x0B8B, 0x0B8D}, {0x0B91, 0x0B91}, {0x0B96, 0x0B98},
+ {0x0B9B, 0x0B9B}, {0x0B9D, 0x0B9D}, {0x0BA0, 0x0BA2},
+ {0x0BA5, 0x0BA7}, {0x0BAB, 0x0BAD}, {0x0BBA, 0x0BBD},
+ {0x0BC3, 0x0BC5}, {0x0BC9, 0x0BC9}, {0x0BCE, 0x0BCF},
+ {0x0BD1, 0x0BD6}, {0x0BD8, 0x0BE5}, {0x0BFB, 0x0BFF},
+ {0x0C04, 0x0C04}, {0x0C0D, 0x0C0D}, {0x0C11, 0x0C11},
+ {0x0C29, 0x0C29}, {0x0C3A, 0x0C3C}, {0x0C45, 0x0C45},
+ {0x0C49, 0x0C49}, {0x0C4E, 0x0C54}, {0x0C57, 0x0C57},
+ {0x0C5B, 0x0C5F}, {0x0C64, 0x0C65}, {0x0C70, 0x0C77},
+ {0x0C84, 0x0C84}, {0x0C8D, 0x0C8D}, {0x0C91, 0x0C91},
+ {0x0CA9, 0x0CA9}, {0x0CB4, 0x0CB4}, {0x0CBA, 0x0CBB},
+ {0x0CC5, 0x0CC5}, {0x0CC9, 0x0CC9}, {0x0CCE, 0x0CD4},
+ {0x0CD7, 0x0CDD}, {0x0CDF, 0x0CDF}, {0x0CE4, 0x0CE5},
+ {0x0CF0, 0x0CF0}, {0x0CF3, 0x0D00}, {0x0D04, 0x0D04},
+ {0x0D0D, 0x0D0D}, {0x0D11, 0x0D11}, {0x0D3B, 0x0D3C},
+ {0x0D45, 0x0D45}, {0x0D49, 0x0D49}, {0x0D50, 0x0D53},
+ {0x0D64, 0x0D65}, {0x0D80, 0x0D81}, {0x0D84, 0x0D84},
+ {0x0D97, 0x0D99}, {0x0DB2, 0x0DB2}, {0x0DBC, 0x0DBC},
+ {0x0DBE, 0x0DBF}, {0x0DC7, 0x0DC9}, {0x0DCB, 0x0DCE},
+ {0x0DD5, 0x0DD5}, {0x0DD7, 0x0DD7}, {0x0DE0, 0x0DE5},
+ {0x0DF0, 0x0DF1}, {0x0DF5, 0x0E00}, {0x0E3B, 0x0E3E},
+ {0x0E5C, 0x0E80}, {0x0E83, 0x0E83}, {0x0E85, 0x0E86},
+ {0x0E89, 0x0E89}, {0x0E8B, 0x0E8C}, {0x0E8E, 0x0E93},
+ {0x0E98, 0x0E98}, {0x0EA0, 0x0EA0}, {0x0EA4, 0x0EA4},
+ {0x0EA6, 0x0EA6}, {0x0EA8, 0x0EA9}, {0x0EAC, 0x0EAC},
+ {0x0EBA, 0x0EBA}, {0x0EBE, 0x0EBF}, {0x0EC5, 0x0EC5},
+ {0x0EC7, 0x0EC7}, {0x0ECE, 0x0ECF}, {0x0EDA, 0x0EDB},
+ {0x0EE0, 0x0EFF}, {0x0F48, 0x0F48}, {0x0F6D, 0x0F70},
+ {0x0F98, 0x0F98}, {0x0FBD, 0x0FBD}, {0x0FCD, 0x0FCD},
+ {0x0FDB, 0x0FFF}, {0x10C6, 0x10C6}, {0x10C8, 0x10CC},
+ {0x10CE, 0x10CF}, {0x1249, 0x1249}, {0x124E, 0x124F},
+ {0x1257, 0x1257}, {0x1259, 0x1259}, {0x125E, 0x125F},
+ {0x1289, 0x1289}, {0x128E, 0x128F}, {0x12B1, 0x12B1},
+ {0x12B6, 0x12B7}, {0x12BF, 0x12BF}, {0x12C1, 0x12C1},
+ {0x12C6, 0x12C7}, {0x12D7, 0x12D7}, {0x1311, 0x1311},
+ {0x1316, 0x1317}, {0x135B, 0x135C}, {0x137D, 0x137F},
+ {0x139A, 0x139F}, {0x13F6, 0x13F7}, {0x13FE, 0x13FF},
+ {0x169D, 0x169F}, {0x16F9, 0x16FF}, {0x170D, 0x170D},
+ {0x1715, 0x171F}, {0x1737, 0x173F}, {0x1754, 0x175F},
+ {0x176D, 0x176D}, {0x1771, 0x1771}, {0x1774, 0x177F},
+ {0x17DE, 0x17DF}, {0x17EA, 0x17EF}, {0x17FA, 0x17FF},
+ {0x180F, 0x180F}, {0x181A, 0x181F}, {0x1878, 0x187F},
+ {0x18AB, 0x18AF}, {0x18F6, 0x18FF}, {0x191F, 0x191F},
+ {0x192C, 0x192F}, {0x193C, 0x193F}, {0x1941, 0x1943},
+ {0x196E, 0x196F}, {0x1975, 0x197F}, {0x19AC, 0x19AF},
+ {0x19CA, 0x19CF}, {0x19DB, 0x19DD}, {0x1A1C, 0x1A1D},
+ {0x1A5F, 0x1A5F}, {0x1A7D, 0x1A7E}, {0x1A8A, 0x1A8F},
+ {0x1A9A, 0x1A9F}, {0x1AAE, 0x1AAF}, {0x1ABF, 0x1AFF},
+ {0x1B4C, 0x1B4F}, {0x1B7D, 0x1B7F}, {0x1BF4, 0x1BFB},
+ {0x1C38, 0x1C3A}, {0x1C4A, 0x1C4C}, {0x1C89, 0x1CBF},
+ {0x1CC8, 0x1CCF}, {0x1CF7, 0x1CF7}, {0x1CFA, 0x1CFF},
+ {0x1DF6, 0x1DFA}, {0x1F16, 0x1F17}, {0x1F1E, 0x1F1F},
+ {0x1F46, 0x1F47}, {0x1F4E, 0x1F4F}, {0x1F58, 0x1F58},
+ {0x1F5A, 0x1F5A}, {0x1F5C, 0x1F5C}, {0x1F5E, 0x1F5E},
+ {0x1F7E, 0x1F7F}, {0x1FB5, 0x1FB5}, {0x1FC5, 0x1FC5},
+ {0x1FD4, 0x1FD5}, {0x1FDC, 0x1FDC}, {0x1FF0, 0x1FF1},
+ {0x1FF5, 0x1FF5}, {0x1FFF, 0x1FFF}, {0x2065, 0x2065},
+ {0x2072, 0x2073}, {0x208F, 0x208F}, {0x209D, 0x209F},
+ {0x20BF, 0x20CF}, {0x20F1, 0x20FF}, {0x218C, 0x218F},
+ {0x23FF, 0x23FF}, {0x2427, 0x243F}, {0x244B, 0x245F},
+ {0x2B74, 0x2B75}, {0x2B96, 0x2B97}, {0x2BBA, 0x2BBC},
+ {0x2BC9, 0x2BC9}, {0x2BD2, 0x2BEB}, {0x2BF0, 0x2BFF},
+ {0x2C2F, 0x2C2F}, {0x2C5F, 0x2C5F}, {0x2CF4, 0x2CF8},
+ {0x2D26, 0x2D26}, {0x2D28, 0x2D2C}, {0x2D2E, 0x2D2F},
+ {0x2D68, 0x2D6E}, {0x2D71, 0x2D7E}, {0x2D97, 0x2D9F},
+ {0x2DA7, 0x2DA7}, {0x2DAF, 0x2DAF}, {0x2DB7, 0x2DB7},
+ {0x2DBF, 0x2DBF}, {0x2DC7, 0x2DC7}, {0x2DCF, 0x2DCF},
+ {0x2DD7, 0x2DD7}, {0x2DDF, 0x2DDF}, {0x2E45, 0x2E7F},
+ {0x2E9A, 0x2E9A}, {0x2EF4, 0x2EFF}, {0x2FD6, 0x2FEF},
+ {0x2FFC, 0x2FFF}, {0x3040, 0x3040}, {0x3097, 0x3098},
+ {0x3100, 0x3104}, {0x312E, 0x3130}, {0x318F, 0x318F},
+ {0x31BB, 0x31BF}, {0x31E4, 0x31EF}, {0x321F, 0x321F},
+ {0x32FF, 0x32FF}, {0x4DB6, 0x4DBF}, {0x9FD6, 0x9FFF},
+ {0xA48D, 0xA48F}, {0xA4C7, 0xA4CF}, {0xA62C, 0xA63F},
+ {0xA6F8, 0xA6FF}, {0xA7AF, 0xA7AF}, {0xA7B8, 0xA7F6},
+ {0xA82C, 0xA82F}, {0xA83A, 0xA83F}, {0xA878, 0xA87F},
+ {0xA8C6, 0xA8CD}, {0xA8DA, 0xA8DF}, {0xA8FE, 0xA8FF},
+ {0xA954, 0xA95E}, {0xA97D, 0xA97F}, {0xA9CE, 0xA9CE},
+ {0xA9DA, 0xA9DD}, {0xA9FF, 0xA9FF}, {0xAA37, 0xAA3F},
+ {0xAA4E, 0xAA4F}, {0xAA5A, 0xAA5B}, {0xAAC3, 0xAADA},
+ {0xAAF7, 0xAB00}, {0xAB07, 0xAB08}, {0xAB0F, 0xAB10},
+ {0xAB17, 0xAB1F}, {0xAB27, 0xAB27}, {0xAB2F, 0xAB2F},
+ {0xAB66, 0xAB6F}, {0xABEE, 0xABEF}, {0xABFA, 0xABFF},
+ {0xD7A4, 0xD7AF}, {0xD7C7, 0xD7CA}, {0xD7FC, 0xD7FF},
+ {0xFA6E, 0xFA6F}, {0xFADA, 0xFAFF}, {0xFB07, 0xFB12},
+ {0xFB18, 0xFB1C}, {0xFB37, 0xFB37}, {0xFB3D, 0xFB3D},
+ {0xFB3F, 0xFB3F}, {0xFB42, 0xFB42}, {0xFB45, 0xFB45},
+ {0xFBC2, 0xFBD2}, {0xFD40, 0xFD4F}, {0xFD90, 0xFD91},
+ {0xFDC8, 0xFDEF}, {0xFDFE, 0xFDFF}, {0xFE1A, 0xFE1F},
+ {0xFE53, 0xFE53}, {0xFE67, 0xFE67}, {0xFE6C, 0xFE6F},
+ {0xFE75, 0xFE75}, {0xFEFD, 0xFEFE}, {0xFF00, 0xFF00},
+ {0xFFBF, 0xFFC1}, {0xFFC8, 0xFFC9}, {0xFFD0, 0xFFD1},
+ {0xFFD8, 0xFFD9}, {0xFFDD, 0xFFDF}, {0xFFE7, 0xFFE7},
+ {0xFFEF, 0xFFF8}, {0xFFFE, 0xFFFF}, {0x1000C, 0x1000C},
+ {0x10027, 0x10027}, {0x1003B, 0x1003B}, {0x1003E, 0x1003E},
+ {0x1004E, 0x1004F}, {0x1005E, 0x1007F}, {0x100FB, 0x100FF},
+ {0x10103, 0x10106}, {0x10134, 0x10136}, {0x1018F, 0x1018F},
+ {0x1019C, 0x1019F}, {0x101A1, 0x101CF}, {0x101FE, 0x1027F},
+ {0x1029D, 0x1029F}, {0x102D1, 0x102DF}, {0x102FC, 0x102FF},
+ {0x10324, 0x1032F}, {0x1034B, 0x1034F}, {0x1037B, 0x1037F},
+ {0x1039E, 0x1039E}, {0x103C4, 0x103C7}, {0x103D6, 0x103FF},
+ {0x1049E, 0x1049F}, {0x104AA, 0x104AF}, {0x104D4, 0x104D7},
+ {0x104FC, 0x104FF}, {0x10528, 0x1052F}, {0x10564, 0x1056E},
+ {0x10570, 0x105FF}, {0x10737, 0x1073F}, {0x10756, 0x1075F},
+ {0x10768, 0x107FF}, {0x10806, 0x10807}, {0x10809, 0x10809},
+ {0x10836, 0x10836}, {0x10839, 0x1083B}, {0x1083D, 0x1083E},
+ {0x10856, 0x10856}, {0x1089F, 0x108A6}, {0x108B0, 0x108DF},
+ {0x108F3, 0x108F3}, {0x108F6, 0x108FA}, {0x1091C, 0x1091E},
+ {0x1093A, 0x1093E}, {0x10940, 0x1097F}, {0x109B8, 0x109BB},
+ {0x109D0, 0x109D1}, {0x10A04, 0x10A04}, {0x10A07, 0x10A0B},
+ {0x10A14, 0x10A14}, {0x10A18, 0x10A18}, {0x10A34, 0x10A37},
+ {0x10A3B, 0x10A3E}, {0x10A48, 0x10A4F}, {0x10A59, 0x10A5F},
+ {0x10AA0, 0x10ABF}, {0x10AE7, 0x10AEA}, {0x10AF7, 0x10AFF},
+ {0x10B36, 0x10B38}, {0x10B56, 0x10B57}, {0x10B73, 0x10B77},
+ {0x10B92, 0x10B98}, {0x10B9D, 0x10BA8}, {0x10BB0, 0x10BFF},
+ {0x10C49, 0x10C7F}, {0x10CB3, 0x10CBF}, {0x10CF3, 0x10CF9},
+ {0x10D00, 0x10E5F}, {0x10E7F, 0x10FFF}, {0x1104E, 0x11051},
+ {0x11070, 0x1107E}, {0x110C2, 0x110CF}, {0x110E9, 0x110EF},
+ {0x110FA, 0x110FF}, {0x11135, 0x11135}, {0x11144, 0x1114F},
+ {0x11177, 0x1117F}, {0x111CE, 0x111CF}, {0x111E0, 0x111E0},
+ {0x111F5, 0x111FF}, {0x11212, 0x11212}, {0x1123F, 0x1127F},
+ {0x11287, 0x11287}, {0x11289, 0x11289}, {0x1128E, 0x1128E},
+ {0x1129E, 0x1129E}, {0x112AA, 0x112AF}, {0x112EB, 0x112EF},
+ {0x112FA, 0x112FF}, {0x11304, 0x11304}, {0x1130D, 0x1130E},
+ {0x11311, 0x11312}, {0x11329, 0x11329}, {0x11331, 0x11331},
+ {0x11334, 0x11334}, {0x1133A, 0x1133B}, {0x11345, 0x11346},
+ {0x11349, 0x1134A}, {0x1134E, 0x1134F}, {0x11351, 0x11356},
+ {0x11358, 0x1135C}, {0x11364, 0x11365}, {0x1136D, 0x1136F},
+ {0x11375, 0x113FF}, {0x1145A, 0x1145A}, {0x1145C, 0x1145C},
+ {0x1145E, 0x1147F}, {0x114C8, 0x114CF}, {0x114DA, 0x1157F},
+ {0x115B6, 0x115B7}, {0x115DE, 0x115FF}, {0x11645, 0x1164F},
+ {0x1165A, 0x1165F}, {0x1166D, 0x1167F}, {0x116B8, 0x116BF},
+ {0x116CA, 0x116FF}, {0x1171A, 0x1171C}, {0x1172C, 0x1172F},
+ {0x11740, 0x1189F}, {0x118F3, 0x118FE}, {0x11900, 0x11ABF},
+ {0x11AF9, 0x11BFF}, {0x11C09, 0x11C09}, {0x11C37, 0x11C37},
+ {0x11C46, 0x11C4F}, {0x11C6D, 0x11C6F}, {0x11C90, 0x11C91},
+ {0x11CA8, 0x11CA8}, {0x11CB7, 0x11FFF}, {0x1239A, 0x123FF},
+ {0x1246F, 0x1246F}, {0x12475, 0x1247F}, {0x12544, 0x12FFF},
+ {0x1342F, 0x143FF}, {0x14647, 0x167FF}, {0x16A39, 0x16A3F},
+ {0x16A5F, 0x16A5F}, {0x16A6A, 0x16A6D}, {0x16A70, 0x16ACF},
+ {0x16AEE, 0x16AEF}, {0x16AF6, 0x16AFF}, {0x16B46, 0x16B4F},
+ {0x16B5A, 0x16B5A}, {0x16B62, 0x16B62}, {0x16B78, 0x16B7C},
+ {0x16B90, 0x16EFF}, {0x16F45, 0x16F4F}, {0x16F7F, 0x16F8E},
+ {0x16FA0, 0x16FDF}, {0x16FE1, 0x16FFF}, {0x187ED, 0x187FF},
+ {0x18AF3, 0x1AFFF}, {0x1B002, 0x1BBFF}, {0x1BC6B, 0x1BC6F},
+ {0x1BC7D, 0x1BC7F}, {0x1BC89, 0x1BC8F}, {0x1BC9A, 0x1BC9B},
+ {0x1BCA4, 0x1CFFF}, {0x1D0F6, 0x1D0FF}, {0x1D127, 0x1D128},
+ {0x1D1E9, 0x1D1FF}, {0x1D246, 0x1D2FF}, {0x1D357, 0x1D35F},
+ {0x1D372, 0x1D3FF}, {0x1D455, 0x1D455}, {0x1D49D, 0x1D49D},
+ {0x1D4A0, 0x1D4A1}, {0x1D4A3, 0x1D4A4}, {0x1D4A7, 0x1D4A8},
+ {0x1D4AD, 0x1D4AD}, {0x1D4BA, 0x1D4BA}, {0x1D4BC, 0x1D4BC},
+ {0x1D4C4, 0x1D4C4}, {0x1D506, 0x1D506}, {0x1D50B, 0x1D50C},
+ {0x1D515, 0x1D515}, {0x1D51D, 0x1D51D}, {0x1D53A, 0x1D53A},
+ {0x1D53F, 0x1D53F}, {0x1D545, 0x1D545}, {0x1D547, 0x1D549},
+ {0x1D551, 0x1D551}, {0x1D6A6, 0x1D6A7}, {0x1D7CC, 0x1D7CD},
+ {0x1DA8C, 0x1DA9A}, {0x1DAA0, 0x1DAA0}, {0x1DAB0, 0x1DFFF},
+ {0x1E007, 0x1E007}, {0x1E019, 0x1E01A}, {0x1E022, 0x1E022},
+ {0x1E025, 0x1E025}, {0x1E02B, 0x1E7FF}, {0x1E8C5, 0x1E8C6},
+ {0x1E8D7, 0x1E8FF}, {0x1E94B, 0x1E94F}, {0x1E95A, 0x1E95D},
+ {0x1E960, 0x1EDFF}, {0x1EE04, 0x1EE04}, {0x1EE20, 0x1EE20},
+ {0x1EE23, 0x1EE23}, {0x1EE25, 0x1EE26}, {0x1EE28, 0x1EE28},
+ {0x1EE33, 0x1EE33}, {0x1EE38, 0x1EE38}, {0x1EE3A, 0x1EE3A},
+ {0x1EE3C, 0x1EE41}, {0x1EE43, 0x1EE46}, {0x1EE48, 0x1EE48},
+ {0x1EE4A, 0x1EE4A}, {0x1EE4C, 0x1EE4C}, {0x1EE50, 0x1EE50},
+ {0x1EE53, 0x1EE53}, {0x1EE55, 0x1EE56}, {0x1EE58, 0x1EE58},
+ {0x1EE5A, 0x1EE5A}, {0x1EE5C, 0x1EE5C}, {0x1EE5E, 0x1EE5E},
+ {0x1EE60, 0x1EE60}, {0x1EE63, 0x1EE63}, {0x1EE65, 0x1EE66},
+ {0x1EE6B, 0x1EE6B}, {0x1EE73, 0x1EE73}, {0x1EE78, 0x1EE78},
+ {0x1EE7D, 0x1EE7D}, {0x1EE7F, 0x1EE7F}, {0x1EE8A, 0x1EE8A},
+ {0x1EE9C, 0x1EEA0}, {0x1EEA4, 0x1EEA4}, {0x1EEAA, 0x1EEAA},
+ {0x1EEBC, 0x1EEEF}, {0x1EEF2, 0x1EFFF}, {0x1F02C, 0x1F02F},
+ {0x1F094, 0x1F09F}, {0x1F0AF, 0x1F0B0}, {0x1F0C0, 0x1F0C0},
+ {0x1F0D0, 0x1F0D0}, {0x1F0F6, 0x1F0FF}, {0x1F10D, 0x1F10F},
+ {0x1F12F, 0x1F12F}, {0x1F16C, 0x1F16F}, {0x1F1AD, 0x1F1E5},
+ {0x1F203, 0x1F20F}, {0x1F23C, 0x1F23F}, {0x1F249, 0x1F24F},
+ {0x1F252, 0x1F2FF}, {0x1F6D3, 0x1F6DF}, {0x1F6ED, 0x1F6EF},
+ {0x1F6F7, 0x1F6FF}, {0x1F774, 0x1F77F}, {0x1F7D5, 0x1F7FF},
+ {0x1F80C, 0x1F80F}, {0x1F848, 0x1F84F}, {0x1F85A, 0x1F85F},
+ {0x1F888, 0x1F88F}, {0x1F8AE, 0x1F90F}, {0x1F91F, 0x1F91F},
+ {0x1F928, 0x1F92F}, {0x1F931, 0x1F932}, {0x1F93F, 0x1F93F},
+ {0x1F94C, 0x1F94F}, {0x1F95F, 0x1F97F}, {0x1F992, 0x1F9BF},
+ {0x1F9C1, 0x1FFFF}, {0x2A6D7, 0x2A6FF}, {0x2B735, 0x2B73F},
+ {0x2B81E, 0x2B81F}, {0x2CEA2, 0x2F7FF}, {0x2FA1E, 0xE0000},
+ {0xE0002, 0xE001F}, {0xE0080, 0xE00FF}, {0xE01F0, 0xEFFFF},
+ {0xFFFFE, 0xFFFFF},
}
-var ctypes = []intervalType{
- {0x0020, 0x007E, narrow},
- {0x00A1, 0x00A1, ambiguous},
- {0x00A2, 0x00A3, narrow},
- {0x00A4, 0x00A4, ambiguous},
- {0x00A5, 0x00A6, narrow},
- {0x00A7, 0x00A8, ambiguous},
- {0x00AA, 0x00AA, ambiguous},
- {0x00AC, 0x00AC, narrow},
- {0x00AD, 0x00AE, ambiguous},
- {0x00AF, 0x00AF, narrow},
- {0x00B0, 0x00B4, ambiguous},
- {0x00B6, 0x00BA, ambiguous},
- {0x00BC, 0x00BF, ambiguous},
- {0x00C6, 0x00C6, ambiguous},
- {0x00D0, 0x00D0, ambiguous},
- {0x00D7, 0x00D8, ambiguous},
- {0x00DE, 0x00E1, ambiguous},
- {0x00E6, 0x00E6, ambiguous},
- {0x00E8, 0x00EA, ambiguous},
- {0x00EC, 0x00ED, ambiguous},
- {0x00F0, 0x00F0, ambiguous},
- {0x00F2, 0x00F3, ambiguous},
- {0x00F7, 0x00FA, ambiguous},
- {0x00FC, 0x00FC, ambiguous},
- {0x00FE, 0x00FE, ambiguous},
- {0x0101, 0x0101, ambiguous},
- {0x0111, 0x0111, ambiguous},
- {0x0113, 0x0113, ambiguous},
- {0x011B, 0x011B, ambiguous},
- {0x0126, 0x0127, ambiguous},
- {0x012B, 0x012B, ambiguous},
- {0x0131, 0x0133, ambiguous},
- {0x0138, 0x0138, ambiguous},
- {0x013F, 0x0142, ambiguous},
- {0x0144, 0x0144, ambiguous},
- {0x0148, 0x014B, ambiguous},
- {0x014D, 0x014D, ambiguous},
- {0x0152, 0x0153, ambiguous},
- {0x0166, 0x0167, ambiguous},
- {0x016B, 0x016B, ambiguous},
- {0x01CE, 0x01CE, ambiguous},
- {0x01D0, 0x01D0, ambiguous},
- {0x01D2, 0x01D2, ambiguous},
- {0x01D4, 0x01D4, ambiguous},
- {0x01D6, 0x01D6, ambiguous},
- {0x01D8, 0x01D8, ambiguous},
- {0x01DA, 0x01DA, ambiguous},
- {0x01DC, 0x01DC, ambiguous},
- {0x0251, 0x0251, ambiguous},
- {0x0261, 0x0261, ambiguous},
- {0x02C4, 0x02C4, ambiguous},
- {0x02C7, 0x02C7, ambiguous},
- {0x02C9, 0x02CB, ambiguous},
- {0x02CD, 0x02CD, ambiguous},
- {0x02D0, 0x02D0, ambiguous},
- {0x02D8, 0x02DB, ambiguous},
- {0x02DD, 0x02DD, ambiguous},
- {0x02DF, 0x02DF, ambiguous},
- {0x0300, 0x036F, ambiguous},
- {0x0391, 0x03A2, ambiguous},
- {0x03A3, 0x03A9, ambiguous},
- {0x03B1, 0x03C1, ambiguous},
- {0x03C3, 0x03C9, ambiguous},
- {0x0401, 0x0401, ambiguous},
- {0x0410, 0x044F, ambiguous},
- {0x0451, 0x0451, ambiguous},
- {0x1100, 0x115F, wide},
- {0x2010, 0x2010, ambiguous},
- {0x2013, 0x2016, ambiguous},
- {0x2018, 0x2019, ambiguous},
- {0x201C, 0x201D, ambiguous},
- {0x2020, 0x2022, ambiguous},
- {0x2024, 0x2027, ambiguous},
- {0x2030, 0x2030, ambiguous},
- {0x2032, 0x2033, ambiguous},
- {0x2035, 0x2035, ambiguous},
- {0x203B, 0x203B, ambiguous},
- {0x203E, 0x203E, ambiguous},
- {0x2074, 0x2074, ambiguous},
- {0x207F, 0x207F, ambiguous},
- {0x2081, 0x2084, ambiguous},
- {0x20A9, 0x20A9, halfwidth},
- {0x20AC, 0x20AC, ambiguous},
- {0x2103, 0x2103, ambiguous},
- {0x2105, 0x2105, ambiguous},
- {0x2109, 0x2109, ambiguous},
- {0x2113, 0x2113, ambiguous},
- {0x2116, 0x2116, ambiguous},
- {0x2121, 0x2122, ambiguous},
- {0x2126, 0x2126, ambiguous},
- {0x212B, 0x212B, ambiguous},
- {0x2153, 0x2154, ambiguous},
- {0x215B, 0x215E, ambiguous},
- {0x2160, 0x216B, ambiguous},
- {0x2170, 0x2179, ambiguous},
- {0x2189, 0x218A, ambiguous},
- {0x2190, 0x2199, ambiguous},
- {0x21B8, 0x21B9, ambiguous},
- {0x21D2, 0x21D2, ambiguous},
- {0x21D4, 0x21D4, ambiguous},
- {0x21E7, 0x21E7, ambiguous},
- {0x2200, 0x2200, ambiguous},
- {0x2202, 0x2203, ambiguous},
- {0x2207, 0x2208, ambiguous},
- {0x220B, 0x220B, ambiguous},
- {0x220F, 0x220F, ambiguous},
- {0x2211, 0x2211, ambiguous},
- {0x2215, 0x2215, ambiguous},
- {0x221A, 0x221A, ambiguous},
- {0x221D, 0x2220, ambiguous},
- {0x2223, 0x2223, ambiguous},
- {0x2225, 0x2225, ambiguous},
- {0x2227, 0x222C, ambiguous},
- {0x222E, 0x222E, ambiguous},
- {0x2234, 0x2237, ambiguous},
- {0x223C, 0x223D, ambiguous},
- {0x2248, 0x2248, ambiguous},
- {0x224C, 0x224C, ambiguous},
- {0x2252, 0x2252, ambiguous},
- {0x2260, 0x2261, ambiguous},
- {0x2264, 0x2267, ambiguous},
- {0x226A, 0x226B, ambiguous},
- {0x226E, 0x226F, ambiguous},
- {0x2282, 0x2283, ambiguous},
- {0x2286, 0x2287, ambiguous},
- {0x2295, 0x2295, ambiguous},
- {0x2299, 0x2299, ambiguous},
- {0x22A5, 0x22A5, ambiguous},
- {0x22BF, 0x22BF, ambiguous},
- {0x2312, 0x2312, ambiguous},
- {0x2329, 0x232A, wide},
- {0x2460, 0x24E9, ambiguous},
- {0x24EB, 0x254B, ambiguous},
- {0x2550, 0x2573, ambiguous},
- {0x2580, 0x258F, ambiguous},
- {0x2592, 0x2595, ambiguous},
- {0x25A0, 0x25A1, ambiguous},
- {0x25A3, 0x25A9, ambiguous},
- {0x25B2, 0x25B3, ambiguous},
- {0x25B6, 0x25B7, ambiguous},
- {0x25BC, 0x25BD, ambiguous},
- {0x25C0, 0x25C1, ambiguous},
- {0x25C6, 0x25C8, ambiguous},
- {0x25CB, 0x25CB, ambiguous},
- {0x25CE, 0x25D1, ambiguous},
- {0x25E2, 0x25E5, ambiguous},
- {0x25EF, 0x25EF, ambiguous},
- {0x2605, 0x2606, ambiguous},
- {0x2609, 0x2609, ambiguous},
- {0x260E, 0x260F, ambiguous},
- {0x2614, 0x2615, ambiguous},
- {0x261C, 0x261C, ambiguous},
- {0x261E, 0x261E, ambiguous},
- {0x2640, 0x2640, ambiguous},
- {0x2642, 0x2642, ambiguous},
- {0x2660, 0x2661, ambiguous},
- {0x2663, 0x2665, ambiguous},
- {0x2667, 0x266A, ambiguous},
- {0x266C, 0x266D, ambiguous},
- {0x266F, 0x266F, ambiguous},
- {0x269E, 0x269F, ambiguous},
- {0x26BE, 0x26BF, ambiguous},
- {0x26C4, 0x26CD, ambiguous},
- {0x26CF, 0x26E1, ambiguous},
- {0x26E3, 0x26E3, ambiguous},
- {0x26E8, 0x26FF, ambiguous},
- {0x273D, 0x273D, ambiguous},
- {0x2757, 0x2757, ambiguous},
- {0x2776, 0x277F, ambiguous},
- {0x27E6, 0x27ED, narrow},
- {0x2985, 0x2986, narrow},
- {0x2B55, 0x2B59, ambiguous},
- {0x2E80, 0x2E9A, wide},
- {0x2E9B, 0x2EF4, wide},
- {0x2F00, 0x2FD6, wide},
- {0x2FF0, 0x2FFC, wide},
- {0x3000, 0x3000, fullwidth},
- {0x3001, 0x303E, wide},
- {0x3041, 0x3097, wide},
- {0x3099, 0x3100, wide},
- {0x3105, 0x312E, wide},
- {0x3131, 0x318F, wide},
- {0x3190, 0x31BB, wide},
- {0x31C0, 0x31E4, wide},
- {0x31F0, 0x321F, wide},
- {0x3220, 0x3247, wide},
- {0x3248, 0x324F, ambiguous},
- {0x3250, 0x32FF, wide},
- {0x3300, 0x4DBF, wide},
- {0x4E00, 0xA48D, wide},
- {0xA490, 0xA4C7, wide},
- {0xA960, 0xA97D, wide},
- {0xAC00, 0xD7A4, wide},
- {0xE000, 0xF8FF, ambiguous},
- {0xF900, 0xFAFF, wide},
- {0xFE00, 0xFE0F, ambiguous},
- {0xFE10, 0xFE1A, wide},
- {0xFE30, 0xFE53, wide},
- {0xFE54, 0xFE67, wide},
- {0xFE68, 0xFE6C, wide},
- {0xFF01, 0xFF60, fullwidth},
- {0xFF61, 0xFFBF, halfwidth},
- {0xFFC2, 0xFFC8, halfwidth},
- {0xFFCA, 0xFFD0, halfwidth},
- {0xFFD2, 0xFFD8, halfwidth},
- {0xFFDA, 0xFFDD, halfwidth},
- {0xFFE0, 0xFFE7, fullwidth},
- {0xFFE8, 0xFFEF, halfwidth},
- {0xFFFD, 0xFFFE, ambiguous},
- {0x1B000, 0x1B002, wide},
- {0x1F100, 0x1F10A, ambiguous},
- {0x1F110, 0x1F12D, ambiguous},
- {0x1F130, 0x1F169, ambiguous},
- {0x1F170, 0x1F19B, ambiguous},
- {0x1F200, 0x1F203, wide},
- {0x1F210, 0x1F23B, wide},
- {0x1F240, 0x1F249, wide},
- {0x1F250, 0x1F252, wide},
- {0x20000, 0x2FFFE, wide},
- {0x30000, 0x3FFFE, wide},
- {0xE0100, 0xE01F0, ambiguous},
- {0xF0000, 0xFFFFD, ambiguous},
- {0x100000, 0x10FFFE, ambiguous},
+var neutral = table{
+ {0x0000, 0x001F}, {0x007F, 0x00A0}, {0x00A9, 0x00A9},
+ {0x00AB, 0x00AB}, {0x00B5, 0x00B5}, {0x00BB, 0x00BB},
+ {0x00C0, 0x00C5}, {0x00C7, 0x00CF}, {0x00D1, 0x00D6},
+ {0x00D9, 0x00DD}, {0x00E2, 0x00E5}, {0x00E7, 0x00E7},
+ {0x00EB, 0x00EB}, {0x00EE, 0x00EF}, {0x00F1, 0x00F1},
+ {0x00F4, 0x00F6}, {0x00FB, 0x00FB}, {0x00FD, 0x00FD},
+ {0x00FF, 0x0100}, {0x0102, 0x0110}, {0x0112, 0x0112},
+ {0x0114, 0x011A}, {0x011C, 0x0125}, {0x0128, 0x012A},
+ {0x012C, 0x0130}, {0x0134, 0x0137}, {0x0139, 0x013E},
+ {0x0143, 0x0143}, {0x0145, 0x0147}, {0x014C, 0x014C},
+ {0x014E, 0x0151}, {0x0154, 0x0165}, {0x0168, 0x016A},
+ {0x016C, 0x01CD}, {0x01CF, 0x01CF}, {0x01D1, 0x01D1},
+ {0x01D3, 0x01D3}, {0x01D5, 0x01D5}, {0x01D7, 0x01D7},
+ {0x01D9, 0x01D9}, {0x01DB, 0x01DB}, {0x01DD, 0x0250},
+ {0x0252, 0x0260}, {0x0262, 0x02C3}, {0x02C5, 0x02C6},
+ {0x02C8, 0x02C8}, {0x02CC, 0x02CC}, {0x02CE, 0x02CF},
+ {0x02D1, 0x02D7}, {0x02DC, 0x02DC}, {0x02DE, 0x02DE},
+ {0x02E0, 0x02FF}, {0x0370, 0x0377}, {0x037A, 0x037F},
+ {0x0384, 0x038A}, {0x038C, 0x038C}, {0x038E, 0x0390},
+ {0x03AA, 0x03B0}, {0x03C2, 0x03C2}, {0x03CA, 0x0400},
+ {0x0402, 0x040F}, {0x0450, 0x0450}, {0x0452, 0x052F},
+ {0x0531, 0x0556}, {0x0559, 0x055F}, {0x0561, 0x0587},
+ {0x0589, 0x058A}, {0x058D, 0x058F}, {0x0591, 0x05C7},
+ {0x05D0, 0x05EA}, {0x05F0, 0x05F4}, {0x0600, 0x061C},
+ {0x061E, 0x070D}, {0x070F, 0x074A}, {0x074D, 0x07B1},
+ {0x07C0, 0x07FA}, {0x0800, 0x082D}, {0x0830, 0x083E},
+ {0x0840, 0x085B}, {0x085E, 0x085E}, {0x08A0, 0x08B4},
+ {0x08B6, 0x08BD}, {0x08D4, 0x0983}, {0x0985, 0x098C},
+ {0x098F, 0x0990}, {0x0993, 0x09A8}, {0x09AA, 0x09B0},
+ {0x09B2, 0x09B2}, {0x09B6, 0x09B9}, {0x09BC, 0x09C4},
+ {0x09C7, 0x09C8}, {0x09CB, 0x09CE}, {0x09D7, 0x09D7},
+ {0x09DC, 0x09DD}, {0x09DF, 0x09E3}, {0x09E6, 0x09FB},
+ {0x0A01, 0x0A03}, {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10},
+ {0x0A13, 0x0A28}, {0x0A2A, 0x0A30}, {0x0A32, 0x0A33},
+ {0x0A35, 0x0A36}, {0x0A38, 0x0A39}, {0x0A3C, 0x0A3C},
+ {0x0A3E, 0x0A42}, {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D},
+ {0x0A51, 0x0A51}, {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E},
+ {0x0A66, 0x0A75}, {0x0A81, 0x0A83}, {0x0A85, 0x0A8D},
+ {0x0A8F, 0x0A91}, {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0},
+ {0x0AB2, 0x0AB3}, {0x0AB5, 0x0AB9}, {0x0ABC, 0x0AC5},
+ {0x0AC7, 0x0AC9}, {0x0ACB, 0x0ACD}, {0x0AD0, 0x0AD0},
+ {0x0AE0, 0x0AE3}, {0x0AE6, 0x0AF1}, {0x0AF9, 0x0AF9},
+ {0x0B01, 0x0B03}, {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10},
+ {0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, {0x0B32, 0x0B33},
+ {0x0B35, 0x0B39}, {0x0B3C, 0x0B44}, {0x0B47, 0x0B48},
+ {0x0B4B, 0x0B4D}, {0x0B56, 0x0B57}, {0x0B5C, 0x0B5D},
+ {0x0B5F, 0x0B63}, {0x0B66, 0x0B77}, {0x0B82, 0x0B83},
+ {0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, {0x0B92, 0x0B95},
+ {0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F},
+ {0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB9},
+ {0x0BBE, 0x0BC2}, {0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCD},
+ {0x0BD0, 0x0BD0}, {0x0BD7, 0x0BD7}, {0x0BE6, 0x0BFA},
+ {0x0C00, 0x0C03}, {0x0C05, 0x0C0C}, {0x0C0E, 0x0C10},
+ {0x0C12, 0x0C28}, {0x0C2A, 0x0C39}, {0x0C3D, 0x0C44},
+ {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56},
+ {0x0C58, 0x0C5A}, {0x0C60, 0x0C63}, {0x0C66, 0x0C6F},
+ {0x0C78, 0x0C83}, {0x0C85, 0x0C8C}, {0x0C8E, 0x0C90},
+ {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9},
+ {0x0CBC, 0x0CC4}, {0x0CC6, 0x0CC8}, {0x0CCA, 0x0CCD},
+ {0x0CD5, 0x0CD6}, {0x0CDE, 0x0CDE}, {0x0CE0, 0x0CE3},
+ {0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF2}, {0x0D01, 0x0D03},
+ {0x0D05, 0x0D0C}, {0x0D0E, 0x0D10}, {0x0D12, 0x0D3A},
+ {0x0D3D, 0x0D44}, {0x0D46, 0x0D48}, {0x0D4A, 0x0D4F},
+ {0x0D54, 0x0D63}, {0x0D66, 0x0D7F}, {0x0D82, 0x0D83},
+ {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1}, {0x0DB3, 0x0DBB},
+ {0x0DBD, 0x0DBD}, {0x0DC0, 0x0DC6}, {0x0DCA, 0x0DCA},
+ {0x0DCF, 0x0DD4}, {0x0DD6, 0x0DD6}, {0x0DD8, 0x0DDF},
+ {0x0DE6, 0x0DEF}, {0x0DF2, 0x0DF4}, {0x0E01, 0x0E3A},
+ {0x0E3F, 0x0E5B}, {0x0E81, 0x0E82}, {0x0E84, 0x0E84},
+ {0x0E87, 0x0E88}, {0x0E8A, 0x0E8A}, {0x0E8D, 0x0E8D},
+ {0x0E94, 0x0E97}, {0x0E99, 0x0E9F}, {0x0EA1, 0x0EA3},
+ {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EA7}, {0x0EAA, 0x0EAB},
+ {0x0EAD, 0x0EB9}, {0x0EBB, 0x0EBD}, {0x0EC0, 0x0EC4},
+ {0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECD}, {0x0ED0, 0x0ED9},
+ {0x0EDC, 0x0EDF}, {0x0F00, 0x0F47}, {0x0F49, 0x0F6C},
+ {0x0F71, 0x0F97}, {0x0F99, 0x0FBC}, {0x0FBE, 0x0FCC},
+ {0x0FCE, 0x0FDA}, {0x1000, 0x10C5}, {0x10C7, 0x10C7},
+ {0x10CD, 0x10CD}, {0x10D0, 0x10FF}, {0x1160, 0x1248},
+ {0x124A, 0x124D}, {0x1250, 0x1256}, {0x1258, 0x1258},
+ {0x125A, 0x125D}, {0x1260, 0x1288}, {0x128A, 0x128D},
+ {0x1290, 0x12B0}, {0x12B2, 0x12B5}, {0x12B8, 0x12BE},
+ {0x12C0, 0x12C0}, {0x12C2, 0x12C5}, {0x12C8, 0x12D6},
+ {0x12D8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135A},
+ {0x135D, 0x137C}, {0x1380, 0x1399}, {0x13A0, 0x13F5},
+ {0x13F8, 0x13FD}, {0x1400, 0x169C}, {0x16A0, 0x16F8},
+ {0x1700, 0x170C}, {0x170E, 0x1714}, {0x1720, 0x1736},
+ {0x1740, 0x1753}, {0x1760, 0x176C}, {0x176E, 0x1770},
+ {0x1772, 0x1773}, {0x1780, 0x17DD}, {0x17E0, 0x17E9},
+ {0x17F0, 0x17F9}, {0x1800, 0x180E}, {0x1810, 0x1819},
+ {0x1820, 0x1877}, {0x1880, 0x18AA}, {0x18B0, 0x18F5},
+ {0x1900, 0x191E}, {0x1920, 0x192B}, {0x1930, 0x193B},
+ {0x1940, 0x1940}, {0x1944, 0x196D}, {0x1970, 0x1974},
+ {0x1980, 0x19AB}, {0x19B0, 0x19C9}, {0x19D0, 0x19DA},
+ {0x19DE, 0x1A1B}, {0x1A1E, 0x1A5E}, {0x1A60, 0x1A7C},
+ {0x1A7F, 0x1A89}, {0x1A90, 0x1A99}, {0x1AA0, 0x1AAD},
+ {0x1AB0, 0x1ABE}, {0x1B00, 0x1B4B}, {0x1B50, 0x1B7C},
+ {0x1B80, 0x1BF3}, {0x1BFC, 0x1C37}, {0x1C3B, 0x1C49},
+ {0x1C4D, 0x1C88}, {0x1CC0, 0x1CC7}, {0x1CD0, 0x1CF6},
+ {0x1CF8, 0x1CF9}, {0x1D00, 0x1DF5}, {0x1DFB, 0x1F15},
+ {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D},
+ {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B},
+ {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4},
+ {0x1FB6, 0x1FC4}, {0x1FC6, 0x1FD3}, {0x1FD6, 0x1FDB},
+ {0x1FDD, 0x1FEF}, {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFE},
+ {0x2000, 0x200F}, {0x2011, 0x2012}, {0x2017, 0x2017},
+ {0x201A, 0x201B}, {0x201E, 0x201F}, {0x2023, 0x2023},
+ {0x2028, 0x202F}, {0x2031, 0x2031}, {0x2034, 0x2034},
+ {0x2036, 0x203A}, {0x203C, 0x203D}, {0x203F, 0x2064},
+ {0x2066, 0x2071}, {0x2075, 0x207E}, {0x2080, 0x2080},
+ {0x2085, 0x208E}, {0x2090, 0x209C}, {0x20A0, 0x20A8},
+ {0x20AA, 0x20AB}, {0x20AD, 0x20BE}, {0x20D0, 0x20F0},
+ {0x2100, 0x2102}, {0x2104, 0x2104}, {0x2106, 0x2108},
+ {0x210A, 0x2112}, {0x2114, 0x2115}, {0x2117, 0x2120},
+ {0x2123, 0x2125}, {0x2127, 0x212A}, {0x212C, 0x2152},
+ {0x2155, 0x215A}, {0x215F, 0x215F}, {0x216C, 0x216F},
+ {0x217A, 0x2188}, {0x218A, 0x218B}, {0x219A, 0x21B7},
+ {0x21BA, 0x21D1}, {0x21D3, 0x21D3}, {0x21D5, 0x21E6},
+ {0x21E8, 0x21FF}, {0x2201, 0x2201}, {0x2204, 0x2206},
+ {0x2209, 0x220A}, {0x220C, 0x220E}, {0x2210, 0x2210},
+ {0x2212, 0x2214}, {0x2216, 0x2219}, {0x221B, 0x221C},
+ {0x2221, 0x2222}, {0x2224, 0x2224}, {0x2226, 0x2226},
+ {0x222D, 0x222D}, {0x222F, 0x2233}, {0x2238, 0x223B},
+ {0x223E, 0x2247}, {0x2249, 0x224B}, {0x224D, 0x2251},
+ {0x2253, 0x225F}, {0x2262, 0x2263}, {0x2268, 0x2269},
+ {0x226C, 0x226D}, {0x2270, 0x2281}, {0x2284, 0x2285},
+ {0x2288, 0x2294}, {0x2296, 0x2298}, {0x229A, 0x22A4},
+ {0x22A6, 0x22BE}, {0x22C0, 0x2311}, {0x2313, 0x2319},
+ {0x231C, 0x2328}, {0x232B, 0x23E8}, {0x23ED, 0x23EF},
+ {0x23F1, 0x23F2}, {0x23F4, 0x23FE}, {0x2400, 0x2426},
+ {0x2440, 0x244A}, {0x24EA, 0x24EA}, {0x254C, 0x254F},
+ {0x2574, 0x257F}, {0x2590, 0x2591}, {0x2596, 0x259F},
+ {0x25A2, 0x25A2}, {0x25AA, 0x25B1}, {0x25B4, 0x25B5},
+ {0x25B8, 0x25BB}, {0x25BE, 0x25BF}, {0x25C2, 0x25C5},
+ {0x25C9, 0x25CA}, {0x25CC, 0x25CD}, {0x25D2, 0x25E1},
+ {0x25E6, 0x25EE}, {0x25F0, 0x25FC}, {0x25FF, 0x2604},
+ {0x2607, 0x2608}, {0x260A, 0x260D}, {0x2610, 0x2613},
+ {0x2616, 0x261B}, {0x261D, 0x261D}, {0x261F, 0x263F},
+ {0x2641, 0x2641}, {0x2643, 0x2647}, {0x2654, 0x265F},
+ {0x2662, 0x2662}, {0x2666, 0x2666}, {0x266B, 0x266B},
+ {0x266E, 0x266E}, {0x2670, 0x267E}, {0x2680, 0x2692},
+ {0x2694, 0x269D}, {0x26A0, 0x26A0}, {0x26A2, 0x26A9},
+ {0x26AC, 0x26BC}, {0x26C0, 0x26C3}, {0x26E2, 0x26E2},
+ {0x26E4, 0x26E7}, {0x2700, 0x2704}, {0x2706, 0x2709},
+ {0x270C, 0x2727}, {0x2729, 0x273C}, {0x273E, 0x274B},
+ {0x274D, 0x274D}, {0x274F, 0x2752}, {0x2756, 0x2756},
+ {0x2758, 0x2775}, {0x2780, 0x2794}, {0x2798, 0x27AF},
+ {0x27B1, 0x27BE}, {0x27C0, 0x27E5}, {0x27EE, 0x2984},
+ {0x2987, 0x2B1A}, {0x2B1D, 0x2B4F}, {0x2B51, 0x2B54},
+ {0x2B5A, 0x2B73}, {0x2B76, 0x2B95}, {0x2B98, 0x2BB9},
+ {0x2BBD, 0x2BC8}, {0x2BCA, 0x2BD1}, {0x2BEC, 0x2BEF},
+ {0x2C00, 0x2C2E}, {0x2C30, 0x2C5E}, {0x2C60, 0x2CF3},
+ {0x2CF9, 0x2D25}, {0x2D27, 0x2D27}, {0x2D2D, 0x2D2D},
+ {0x2D30, 0x2D67}, {0x2D6F, 0x2D70}, {0x2D7F, 0x2D96},
+ {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6},
+ {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE},
+ {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x2DE0, 0x2E44},
+ {0x303F, 0x303F}, {0x4DC0, 0x4DFF}, {0xA4D0, 0xA62B},
+ {0xA640, 0xA6F7}, {0xA700, 0xA7AE}, {0xA7B0, 0xA7B7},
+ {0xA7F7, 0xA82B}, {0xA830, 0xA839}, {0xA840, 0xA877},
+ {0xA880, 0xA8C5}, {0xA8CE, 0xA8D9}, {0xA8E0, 0xA8FD},
+ {0xA900, 0xA953}, {0xA95F, 0xA95F}, {0xA980, 0xA9CD},
+ {0xA9CF, 0xA9D9}, {0xA9DE, 0xA9FE}, {0xAA00, 0xAA36},
+ {0xAA40, 0xAA4D}, {0xAA50, 0xAA59}, {0xAA5C, 0xAAC2},
+ {0xAADB, 0xAAF6}, {0xAB01, 0xAB06}, {0xAB09, 0xAB0E},
+ {0xAB11, 0xAB16}, {0xAB20, 0xAB26}, {0xAB28, 0xAB2E},
+ {0xAB30, 0xAB65}, {0xAB70, 0xABED}, {0xABF0, 0xABF9},
+ {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xD800, 0xDFFF},
+ {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, {0xFB1D, 0xFB36},
+ {0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41},
+ {0xFB43, 0xFB44}, {0xFB46, 0xFBC1}, {0xFBD3, 0xFD3F},
+ {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7}, {0xFDF0, 0xFDFD},
+ {0xFE20, 0xFE2F}, {0xFE70, 0xFE74}, {0xFE76, 0xFEFC},
+ {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFC}, {0x10000, 0x1000B},
+ {0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003C, 0x1003D},
+ {0x1003F, 0x1004D}, {0x10050, 0x1005D}, {0x10080, 0x100FA},
+ {0x10100, 0x10102}, {0x10107, 0x10133}, {0x10137, 0x1018E},
+ {0x10190, 0x1019B}, {0x101A0, 0x101A0}, {0x101D0, 0x101FD},
+ {0x10280, 0x1029C}, {0x102A0, 0x102D0}, {0x102E0, 0x102FB},
+ {0x10300, 0x10323}, {0x10330, 0x1034A}, {0x10350, 0x1037A},
+ {0x10380, 0x1039D}, {0x1039F, 0x103C3}, {0x103C8, 0x103D5},
+ {0x10400, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3},
+ {0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563},
+ {0x1056F, 0x1056F}, {0x10600, 0x10736}, {0x10740, 0x10755},
+ {0x10760, 0x10767}, {0x10800, 0x10805}, {0x10808, 0x10808},
+ {0x1080A, 0x10835}, {0x10837, 0x10838}, {0x1083C, 0x1083C},
+ {0x1083F, 0x10855}, {0x10857, 0x1089E}, {0x108A7, 0x108AF},
+ {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, {0x108FB, 0x1091B},
+ {0x1091F, 0x10939}, {0x1093F, 0x1093F}, {0x10980, 0x109B7},
+ {0x109BC, 0x109CF}, {0x109D2, 0x10A03}, {0x10A05, 0x10A06},
+ {0x10A0C, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A33},
+ {0x10A38, 0x10A3A}, {0x10A3F, 0x10A47}, {0x10A50, 0x10A58},
+ {0x10A60, 0x10A9F}, {0x10AC0, 0x10AE6}, {0x10AEB, 0x10AF6},
+ {0x10B00, 0x10B35}, {0x10B39, 0x10B55}, {0x10B58, 0x10B72},
+ {0x10B78, 0x10B91}, {0x10B99, 0x10B9C}, {0x10BA9, 0x10BAF},
+ {0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2},
+ {0x10CFA, 0x10CFF}, {0x10E60, 0x10E7E}, {0x11000, 0x1104D},
+ {0x11052, 0x1106F}, {0x1107F, 0x110C1}, {0x110D0, 0x110E8},
+ {0x110F0, 0x110F9}, {0x11100, 0x11134}, {0x11136, 0x11143},
+ {0x11150, 0x11176}, {0x11180, 0x111CD}, {0x111D0, 0x111DF},
+ {0x111E1, 0x111F4}, {0x11200, 0x11211}, {0x11213, 0x1123E},
+ {0x11280, 0x11286}, {0x11288, 0x11288}, {0x1128A, 0x1128D},
+ {0x1128F, 0x1129D}, {0x1129F, 0x112A9}, {0x112B0, 0x112EA},
+ {0x112F0, 0x112F9}, {0x11300, 0x11303}, {0x11305, 0x1130C},
+ {0x1130F, 0x11310}, {0x11313, 0x11328}, {0x1132A, 0x11330},
+ {0x11332, 0x11333}, {0x11335, 0x11339}, {0x1133C, 0x11344},
+ {0x11347, 0x11348}, {0x1134B, 0x1134D}, {0x11350, 0x11350},
+ {0x11357, 0x11357}, {0x1135D, 0x11363}, {0x11366, 0x1136C},
+ {0x11370, 0x11374}, {0x11400, 0x11459}, {0x1145B, 0x1145B},
+ {0x1145D, 0x1145D}, {0x11480, 0x114C7}, {0x114D0, 0x114D9},
+ {0x11580, 0x115B5}, {0x115B8, 0x115DD}, {0x11600, 0x11644},
+ {0x11650, 0x11659}, {0x11660, 0x1166C}, {0x11680, 0x116B7},
+ {0x116C0, 0x116C9}, {0x11700, 0x11719}, {0x1171D, 0x1172B},
+ {0x11730, 0x1173F}, {0x118A0, 0x118F2}, {0x118FF, 0x118FF},
+ {0x11AC0, 0x11AF8}, {0x11C00, 0x11C08}, {0x11C0A, 0x11C36},
+ {0x11C38, 0x11C45}, {0x11C50, 0x11C6C}, {0x11C70, 0x11C8F},
+ {0x11C92, 0x11CA7}, {0x11CA9, 0x11CB6}, {0x12000, 0x12399},
+ {0x12400, 0x1246E}, {0x12470, 0x12474}, {0x12480, 0x12543},
+ {0x13000, 0x1342E}, {0x14400, 0x14646}, {0x16800, 0x16A38},
+ {0x16A40, 0x16A5E}, {0x16A60, 0x16A69}, {0x16A6E, 0x16A6F},
+ {0x16AD0, 0x16AED}, {0x16AF0, 0x16AF5}, {0x16B00, 0x16B45},
+ {0x16B50, 0x16B59}, {0x16B5B, 0x16B61}, {0x16B63, 0x16B77},
+ {0x16B7D, 0x16B8F}, {0x16F00, 0x16F44}, {0x16F50, 0x16F7E},
+ {0x16F8F, 0x16F9F}, {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C},
+ {0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BCA3},
+ {0x1D000, 0x1D0F5}, {0x1D100, 0x1D126}, {0x1D129, 0x1D1E8},
+ {0x1D200, 0x1D245}, {0x1D300, 0x1D356}, {0x1D360, 0x1D371},
+ {0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F},
+ {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC},
+ {0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3},
+ {0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514},
+ {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E},
+ {0x1D540, 0x1D544}, {0x1D546, 0x1D546}, {0x1D54A, 0x1D550},
+ {0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D7CB}, {0x1D7CE, 0x1DA8B},
+ {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, {0x1E000, 0x1E006},
+ {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024},
+ {0x1E026, 0x1E02A}, {0x1E800, 0x1E8C4}, {0x1E8C7, 0x1E8D6},
+ {0x1E900, 0x1E94A}, {0x1E950, 0x1E959}, {0x1E95E, 0x1E95F},
+ {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22},
+ {0x1EE24, 0x1EE24}, {0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32},
+ {0x1EE34, 0x1EE37}, {0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B},
+ {0x1EE42, 0x1EE42}, {0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49},
+ {0x1EE4B, 0x1EE4B}, {0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52},
+ {0x1EE54, 0x1EE54}, {0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59},
+ {0x1EE5B, 0x1EE5B}, {0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F},
+ {0x1EE61, 0x1EE62}, {0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A},
+ {0x1EE6C, 0x1EE72}, {0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C},
+ {0x1EE7E, 0x1EE7E}, {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B},
+ {0x1EEA1, 0x1EEA3}, {0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB},
+ {0x1EEF0, 0x1EEF1}, {0x1F000, 0x1F003}, {0x1F005, 0x1F02B},
+ {0x1F030, 0x1F093}, {0x1F0A0, 0x1F0AE}, {0x1F0B1, 0x1F0BF},
+ {0x1F0C1, 0x1F0CE}, {0x1F0D1, 0x1F0F5}, {0x1F10B, 0x1F10C},
+ {0x1F12E, 0x1F12E}, {0x1F16A, 0x1F16B}, {0x1F1E6, 0x1F1FF},
+ {0x1F321, 0x1F32C}, {0x1F336, 0x1F336}, {0x1F37D, 0x1F37D},
+ {0x1F394, 0x1F39F}, {0x1F3CB, 0x1F3CE}, {0x1F3D4, 0x1F3DF},
+ {0x1F3F1, 0x1F3F3}, {0x1F3F5, 0x1F3F7}, {0x1F43F, 0x1F43F},
+ {0x1F441, 0x1F441}, {0x1F4FD, 0x1F4FE}, {0x1F53E, 0x1F54A},
+ {0x1F54F, 0x1F54F}, {0x1F568, 0x1F579}, {0x1F57B, 0x1F594},
+ {0x1F597, 0x1F5A3}, {0x1F5A5, 0x1F5FA}, {0x1F650, 0x1F67F},
+ {0x1F6C6, 0x1F6CB}, {0x1F6CD, 0x1F6CF}, {0x1F6E0, 0x1F6EA},
+ {0x1F6F0, 0x1F6F3}, {0x1F700, 0x1F773}, {0x1F780, 0x1F7D4},
+ {0x1F800, 0x1F80B}, {0x1F810, 0x1F847}, {0x1F850, 0x1F859},
+ {0x1F860, 0x1F887}, {0x1F890, 0x1F8AD}, {0xE0001, 0xE0001},
+ {0xE0020, 0xE007F},
}
+// Condition have flag EastAsianWidth whether the current locale is CJK or not.
type Condition struct {
- EastAsianWidth bool
+ EastAsianWidth bool
+ ZeroWidthJoiner bool
}
+// NewCondition return new instance of Condition which is current locale.
func NewCondition() *Condition {
- return &Condition{EastAsianWidth}
+ return &Condition{
+ EastAsianWidth: EastAsianWidth,
+ ZeroWidthJoiner: ZeroWidthJoiner,
+ }
}
// RuneWidth returns the number of cells in r.
// See http://www.unicode.org/reports/tr11/
func (c *Condition) RuneWidth(r rune) int {
- if r == 0 {
+ switch {
+ case r < 0 || r > 0x10FFFF ||
+ inTables(r, nonprint, combining, notassigned):
return 0
- }
- if r < 32 || (r >= 0x7f && r < 0xa0) {
+ case (c.EastAsianWidth && IsAmbiguousWidth(r)) ||
+ inTables(r, doublewidth, emoji):
+ return 2
+ default:
return 1
}
- for _, iv := range combining {
- if iv.first <= r && r <= iv.last {
- return 0
- }
- }
+}
- if c.EastAsianWidth && IsAmbiguousWidth(r) {
- return 2
+func (c *Condition) stringWidth(s string) (width int) {
+ for _, r := range []rune(s) {
+ width += c.RuneWidth(r)
}
+ return width
+}
- if r >= 0x1100 &&
- (r <= 0x115f || r == 0x2329 || r == 0x232a ||
- (r >= 0x2e80 && r <= 0xa4cf && r != 0x303f) ||
- (r >= 0xac00 && r <= 0xd7a3) ||
- (r >= 0xf900 && r <= 0xfaff) ||
- (r >= 0xfe30 && r <= 0xfe6f) ||
- (r >= 0xff00 && r <= 0xff60) ||
- (r >= 0xffe0 && r <= 0xffe6) ||
- (r >= 0x20000 && r <= 0x2fffd) ||
- (r >= 0x30000 && r <= 0x3fffd)) {
- return 2
+func (c *Condition) stringWidthZeroJoiner(s string) (width int) {
+ r1, r2 := rune(0), rune(0)
+ for _, r := range []rune(s) {
+ if r == 0xFE0E || r == 0xFE0F {
+ continue
+ }
+ w := c.RuneWidth(r)
+ if r2 == 0x200D && inTables(r, emoji) && inTables(r1, emoji) {
+ w = 0
+ }
+ width += w
+ r1, r2 = r2, r
}
- return 1
+ return width
}
+// StringWidth return width as you can see
func (c *Condition) StringWidth(s string) (width int) {
- for _, r := range []rune(s) {
- width += c.RuneWidth(r)
+ if c.ZeroWidthJoiner {
+ return c.stringWidthZeroJoiner(s)
}
- return width
+ return c.stringWidth(s)
}
+// Truncate return string truncated with w cells
func (c *Condition) Truncate(s string, w int, tail string) string {
if c.StringWidth(s) <= w {
return s
@@ -370,6 +884,7 @@ func (c *Condition) Truncate(s string, w int, tail string) string {
return string(r[0:i]) + tail
}
+// Wrap return string wrapped with w cells
func (c *Condition) Wrap(s string, w int) string {
width := 0
out := ""
@@ -392,6 +907,7 @@ func (c *Condition) Wrap(s string, w int) string {
return out
}
+// FillLeft return string filled in left by spaces in w cells
func (c *Condition) FillLeft(s string, w int) string {
width := c.StringWidth(s)
count := w - width
@@ -405,6 +921,7 @@ func (c *Condition) FillLeft(s string, w int) string {
return s
}
+// FillRight return string filled in left by spaces in w cells
func (c *Condition) FillRight(s string, w int) string {
width := c.StringWidth(s)
count := w - width
@@ -424,41 +941,37 @@ func RuneWidth(r rune) int {
return DefaultCondition.RuneWidth(r)
}
-func ct(r rune) ctype {
- for _, iv := range ctypes {
- if iv.first <= r && r <= iv.last {
- return iv.ctype
- }
- }
- return neutral
-}
-
// IsAmbiguousWidth returns whether is ambiguous width or not.
func IsAmbiguousWidth(r rune) bool {
- return ct(r) == ambiguous
+ return inTables(r, private, ambiguous)
}
-// IsAmbiguousWidth returns whether is ambiguous width or not.
+// IsNeutralWidth returns whether is neutral width or not.
func IsNeutralWidth(r rune) bool {
- return ct(r) == neutral
+ return inTable(r, neutral)
}
+// StringWidth return width as you can see
func StringWidth(s string) (width int) {
return DefaultCondition.StringWidth(s)
}
+// Truncate return string truncated with w cells
func Truncate(s string, w int, tail string) string {
return DefaultCondition.Truncate(s, w, tail)
}
+// Wrap return string wrapped with w cells
func Wrap(s string, w int) string {
return DefaultCondition.Wrap(s, w)
}
+// FillLeft return string filled in left by spaces in w cells
func FillLeft(s string, w int) string {
return DefaultCondition.FillLeft(s, w)
}
+// FillRight return string filled in left by spaces in w cells
func FillRight(s string, w int) string {
return DefaultCondition.FillRight(s, w)
}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go b/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go
new file mode 100644
index 000000000..7d99f6e52
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go
@@ -0,0 +1,8 @@
+// +build appengine
+
+package runewidth
+
+// IsEastAsian return true if the current locale is CJK
+func IsEastAsian() bool {
+ return false
+}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_js.go b/vendor/github.com/mattn/go-runewidth/runewidth_js.go
index 0ce32c5e7..c5fdf40ba 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth_js.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_js.go
@@ -1,4 +1,5 @@
// +build js
+// +build !appengine
package runewidth
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_posix.go b/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
index a4495909d..66a58b5d8 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
@@ -1,4 +1,6 @@
-// +build !windows,!js
+// +build !windows
+// +build !js
+// +build !appengine
package runewidth
@@ -10,20 +12,25 @@ import (
var reLoc = regexp.MustCompile(`^[a-z][a-z][a-z]?(?:_[A-Z][A-Z])?\.(.+)`)
-func IsEastAsian() bool {
- locale := os.Getenv("LC_CTYPE")
- if locale == "" {
- locale = os.Getenv("LANG")
- }
-
- // ignore C locale
- if locale == "POSIX" || locale == "C" {
- return false
- }
- if len(locale) > 1 && locale[0] == 'C' && (locale[1] == '.' || locale[1] == '-') {
- return false
- }
+var mblenTable = map[string]int{
+ "utf-8": 6,
+ "utf8": 6,
+ "jis": 8,
+ "eucjp": 3,
+ "euckr": 2,
+ "euccn": 2,
+ "sjis": 2,
+ "cp932": 2,
+ "cp51932": 2,
+ "cp936": 2,
+ "cp949": 2,
+ "cp950": 2,
+ "big5": 2,
+ "gbk": 2,
+ "gb2312": 2,
+}
+func isEastAsian(locale string) bool {
charset := strings.ToLower(locale)
r := reLoc.FindStringSubmatch(locale)
if len(r) == 2 {
@@ -40,26 +47,11 @@ func IsEastAsian() bool {
break
}
}
-
- mbc_max := 1
- switch charset {
- case "utf-8", "utf8":
- mbc_max = 6
- case "jis":
- mbc_max = 8
- case "eucjp":
- mbc_max = 3
- case "euckr", "euccn":
- mbc_max = 2
- case "sjis", "cp932", "cp51932", "cp936", "cp949", "cp950":
- mbc_max = 2
- case "big5":
- mbc_max = 2
- case "gbk", "gb2312":
- mbc_max = 2
+ max := 1
+ if m, ok := mblenTable[charset]; ok {
+ max = m
}
-
- if mbc_max > 1 && (charset[0] != 'u' ||
+ if max > 1 && (charset[0] != 'u' ||
strings.HasPrefix(locale, "ja") ||
strings.HasPrefix(locale, "ko") ||
strings.HasPrefix(locale, "zh")) {
@@ -67,3 +59,21 @@ func IsEastAsian() bool {
}
return false
}
+
+// IsEastAsian return true if the current locale is CJK
+func IsEastAsian() bool {
+ locale := os.Getenv("LC_CTYPE")
+ if locale == "" {
+ locale = os.Getenv("LANG")
+ }
+
+ // ignore C locale
+ if locale == "POSIX" || locale == "C" {
+ return false
+ }
+ if len(locale) > 1 && locale[0] == 'C' && (locale[1] == '.' || locale[1] == '-') {
+ return false
+ }
+
+ return isEastAsian(locale)
+}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_windows.go b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
index bdd84454b..d6a61777d 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
@@ -1,3 +1,6 @@
+// +build windows
+// +build !appengine
+
package runewidth
import (
@@ -9,6 +12,7 @@ var (
procGetConsoleOutputCP = kernel32.NewProc("GetConsoleOutputCP")
)
+// IsEastAsian return true if the current locale is CJK
func IsEastAsian() bool {
r1, _, _ := procGetConsoleOutputCP.Call()
if r1 == 0 {
diff --git a/vendor/github.com/modern-go/concurrent/LICENSE b/vendor/github.com/modern-go/concurrent/LICENSE
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/vendor/github.com/modern-go/concurrent/LICENSE
@@ -0,0 +1,201 @@
+ 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/modern-go/concurrent/README.md b/vendor/github.com/modern-go/concurrent/README.md
new file mode 100644
index 000000000..acab3200a
--- /dev/null
+++ b/vendor/github.com/modern-go/concurrent/README.md
@@ -0,0 +1,49 @@
+# concurrent
+
+[![Sourcegraph](https://sourcegraph.com/github.com/modern-go/concurrent/-/badge.svg)](https://sourcegraph.com/github.com/modern-go/concurrent?badge)
+[![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/modern-go/concurrent)
+[![Build Status](https://travis-ci.org/modern-go/concurrent.svg?branch=master)](https://travis-ci.org/modern-go/concurrent)
+[![codecov](https://codecov.io/gh/modern-go/concurrent/branch/master/graph/badge.svg)](https://codecov.io/gh/modern-go/concurrent)
+[![rcard](https://goreportcard.com/badge/github.com/modern-go/concurrent)](https://goreportcard.com/report/github.com/modern-go/concurrent)
+[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://raw.githubusercontent.com/modern-go/concurrent/master/LICENSE)
+
+* concurrent.Map: backport sync.Map for go below 1.9
+* concurrent.Executor: goroutine with explicit ownership and cancellable
+
+# concurrent.Map
+
+because sync.Map is only available in go 1.9, we can use concurrent.Map to make code portable
+
+```go
+m := concurrent.NewMap()
+m.Store("hello", "world")
+elem, found := m.Load("hello")
+// elem will be "world"
+// found will be true
+```
+
+# concurrent.Executor
+
+```go
+executor := concurrent.NewUnboundedExecutor()
+executor.Go(func(ctx context.Context) {
+ everyMillisecond := time.NewTicker(time.Millisecond)
+ for {
+ select {
+ case <-ctx.Done():
+ fmt.Println("goroutine exited")
+ return
+ case <-everyMillisecond.C:
+ // do something
+ }
+ }
+})
+time.Sleep(time.Second)
+executor.StopAndWaitForever()
+fmt.Println("executor stopped")
+```
+
+attach goroutine to executor instance, so that we can
+
+* cancel it by stop the executor with Stop/StopAndWait/StopAndWaitForever
+* handle panic by callback: the default behavior will no longer crash your application \ No newline at end of file
diff --git a/vendor/github.com/modern-go/concurrent/executor.go b/vendor/github.com/modern-go/concurrent/executor.go
new file mode 100644
index 000000000..623dba1ac
--- /dev/null
+++ b/vendor/github.com/modern-go/concurrent/executor.go
@@ -0,0 +1,14 @@
+package concurrent
+
+import "context"
+
+// Executor replace go keyword to start a new goroutine
+// the goroutine should cancel itself if the context passed in has been cancelled
+// the goroutine started by the executor, is owned by the executor
+// we can cancel all executors owned by the executor just by stop the executor itself
+// however Executor interface does not Stop method, the one starting and owning executor
+// should use the concrete type of executor, instead of this interface.
+type Executor interface {
+ // Go starts a new goroutine controlled by the context
+ Go(handler func(ctx context.Context))
+}
diff --git a/vendor/github.com/modern-go/concurrent/go_above_19.go b/vendor/github.com/modern-go/concurrent/go_above_19.go
new file mode 100644
index 000000000..aeabf8c4f
--- /dev/null
+++ b/vendor/github.com/modern-go/concurrent/go_above_19.go
@@ -0,0 +1,15 @@
+//+build go1.9
+
+package concurrent
+
+import "sync"
+
+// Map is a wrapper for sync.Map introduced in go1.9
+type Map struct {
+ sync.Map
+}
+
+// NewMap creates a thread safe Map
+func NewMap() *Map {
+ return &Map{}
+}
diff --git a/vendor/github.com/modern-go/concurrent/go_below_19.go b/vendor/github.com/modern-go/concurrent/go_below_19.go
new file mode 100644
index 000000000..b9c8df7f4
--- /dev/null
+++ b/vendor/github.com/modern-go/concurrent/go_below_19.go
@@ -0,0 +1,33 @@
+//+build !go1.9
+
+package concurrent
+
+import "sync"
+
+// Map implements a thread safe map for go version below 1.9 using mutex
+type Map struct {
+ lock sync.RWMutex
+ data map[interface{}]interface{}
+}
+
+// NewMap creates a thread safe map
+func NewMap() *Map {
+ return &Map{
+ data: make(map[interface{}]interface{}, 32),
+ }
+}
+
+// Load is same as sync.Map Load
+func (m *Map) Load(key interface{}) (elem interface{}, found bool) {
+ m.lock.RLock()
+ elem, found = m.data[key]
+ m.lock.RUnlock()
+ return
+}
+
+// Load is same as sync.Map Store
+func (m *Map) Store(key interface{}, elem interface{}) {
+ m.lock.Lock()
+ m.data[key] = elem
+ m.lock.Unlock()
+}
diff --git a/vendor/github.com/modern-go/concurrent/log.go b/vendor/github.com/modern-go/concurrent/log.go
new file mode 100644
index 000000000..9756fcc75
--- /dev/null
+++ b/vendor/github.com/modern-go/concurrent/log.go
@@ -0,0 +1,13 @@
+package concurrent
+
+import (
+ "os"
+ "log"
+ "io/ioutil"
+)
+
+// ErrorLogger is used to print out error, can be set to writer other than stderr
+var ErrorLogger = log.New(os.Stderr, "", 0)
+
+// InfoLogger is used to print informational message, default to off
+var InfoLogger = log.New(ioutil.Discard, "", 0) \ No newline at end of file
diff --git a/vendor/github.com/modern-go/concurrent/unbounded_executor.go b/vendor/github.com/modern-go/concurrent/unbounded_executor.go
new file mode 100644
index 000000000..05a77dceb
--- /dev/null
+++ b/vendor/github.com/modern-go/concurrent/unbounded_executor.go
@@ -0,0 +1,119 @@
+package concurrent
+
+import (
+ "context"
+ "fmt"
+ "runtime"
+ "runtime/debug"
+ "sync"
+ "time"
+ "reflect"
+)
+
+// HandlePanic logs goroutine panic by default
+var HandlePanic = func(recovered interface{}, funcName string) {
+ ErrorLogger.Println(fmt.Sprintf("%s panic: %v", funcName, recovered))
+ ErrorLogger.Println(string(debug.Stack()))
+}
+
+// UnboundedExecutor is a executor without limits on counts of alive goroutines
+// it tracks the goroutine started by it, and can cancel them when shutdown
+type UnboundedExecutor struct {
+ ctx context.Context
+ cancel context.CancelFunc
+ activeGoroutinesMutex *sync.Mutex
+ activeGoroutines map[string]int
+ HandlePanic func(recovered interface{}, funcName string)
+}
+
+// GlobalUnboundedExecutor has the life cycle of the program itself
+// any goroutine want to be shutdown before main exit can be started from this executor
+// GlobalUnboundedExecutor expects the main function to call stop
+// it does not magically knows the main function exits
+var GlobalUnboundedExecutor = NewUnboundedExecutor()
+
+// NewUnboundedExecutor creates a new UnboundedExecutor,
+// UnboundedExecutor can not be created by &UnboundedExecutor{}
+// HandlePanic can be set with a callback to override global HandlePanic
+func NewUnboundedExecutor() *UnboundedExecutor {
+ ctx, cancel := context.WithCancel(context.TODO())
+ return &UnboundedExecutor{
+ ctx: ctx,
+ cancel: cancel,
+ activeGoroutinesMutex: &sync.Mutex{},
+ activeGoroutines: map[string]int{},
+ }
+}
+
+// Go starts a new goroutine and tracks its lifecycle.
+// Panic will be recovered and logged automatically, except for StopSignal
+func (executor *UnboundedExecutor) Go(handler func(ctx context.Context)) {
+ pc := reflect.ValueOf(handler).Pointer()
+ f := runtime.FuncForPC(pc)
+ funcName := f.Name()
+ file, line := f.FileLine(pc)
+ executor.activeGoroutinesMutex.Lock()
+ defer executor.activeGoroutinesMutex.Unlock()
+ startFrom := fmt.Sprintf("%s:%d", file, line)
+ executor.activeGoroutines[startFrom] += 1
+ go func() {
+ defer func() {
+ recovered := recover()
+ // if you want to quit a goroutine without trigger HandlePanic
+ // use runtime.Goexit() to quit
+ if recovered != nil {
+ if executor.HandlePanic == nil {
+ HandlePanic(recovered, funcName)
+ } else {
+ executor.HandlePanic(recovered, funcName)
+ }
+ }
+ executor.activeGoroutinesMutex.Lock()
+ executor.activeGoroutines[startFrom] -= 1
+ executor.activeGoroutinesMutex.Unlock()
+ }()
+ handler(executor.ctx)
+ }()
+}
+
+// Stop cancel all goroutines started by this executor without wait
+func (executor *UnboundedExecutor) Stop() {
+ executor.cancel()
+}
+
+// StopAndWaitForever cancel all goroutines started by this executor and
+// wait until all goroutines exited
+func (executor *UnboundedExecutor) StopAndWaitForever() {
+ executor.StopAndWait(context.Background())
+}
+
+// StopAndWait cancel all goroutines started by this executor and wait.
+// Wait can be cancelled by the context passed in.
+func (executor *UnboundedExecutor) StopAndWait(ctx context.Context) {
+ executor.cancel()
+ for {
+ oneHundredMilliseconds := time.NewTimer(time.Millisecond * 100)
+ select {
+ case <-oneHundredMilliseconds.C:
+ if executor.checkNoActiveGoroutines() {
+ return
+ }
+ case <-ctx.Done():
+ return
+ }
+ }
+}
+
+func (executor *UnboundedExecutor) checkNoActiveGoroutines() bool {
+ executor.activeGoroutinesMutex.Lock()
+ defer executor.activeGoroutinesMutex.Unlock()
+ for startFrom, count := range executor.activeGoroutines {
+ if count > 0 {
+ InfoLogger.Println("UnboundedExecutor is still waiting goroutines to quit",
+ "startFrom", startFrom,
+ "count", count)
+ return false
+ }
+ }
+ return true
+}
diff --git a/vendor/github.com/modern-go/reflect2/LICENSE b/vendor/github.com/modern-go/reflect2/LICENSE
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/LICENSE
@@ -0,0 +1,201 @@
+ 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/modern-go/reflect2/README.md b/vendor/github.com/modern-go/reflect2/README.md
new file mode 100644
index 000000000..6f968aab9
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/README.md
@@ -0,0 +1,71 @@
+# reflect2
+
+[![Sourcegraph](https://sourcegraph.com/github.com/modern-go/reflect2/-/badge.svg)](https://sourcegraph.com/github.com/modern-go/reflect2?badge)
+[![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/modern-go/reflect2)
+[![Build Status](https://travis-ci.org/modern-go/reflect2.svg?branch=master)](https://travis-ci.org/modern-go/reflect2)
+[![codecov](https://codecov.io/gh/modern-go/reflect2/branch/master/graph/badge.svg)](https://codecov.io/gh/modern-go/reflect2)
+[![rcard](https://goreportcard.com/badge/github.com/modern-go/reflect2)](https://goreportcard.com/report/github.com/modern-go/reflect2)
+[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://raw.githubusercontent.com/modern-go/reflect2/master/LICENSE)
+
+reflect api that avoids runtime reflect.Value cost
+
+* reflect get/set interface{}, with type checking
+* reflect get/set unsafe.Pointer, without type checking
+* `reflect2.TypeByName` works like `Class.forName` found in java
+
+[json-iterator](https://github.com/json-iterator/go) use this package to save runtime dispatching cost.
+This package is designed for low level libraries to optimize reflection performance.
+General application should still use reflect standard library.
+
+# reflect2.TypeByName
+
+```go
+// given package is github.com/your/awesome-package
+type MyStruct struct {
+ // ...
+}
+
+// will return the type
+reflect2.TypeByName("awesome-package.MyStruct")
+// however, if the type has not been used
+// it will be eliminated by compiler, so we can not get it in runtime
+```
+
+# reflect2 get/set interface{}
+
+```go
+valType := reflect2.TypeOf(1)
+i := 1
+j := 10
+valType.Set(&i, &j)
+// i will be 10
+```
+
+to get set `type`, always use its pointer `*type`
+
+# reflect2 get/set unsafe.Pointer
+
+```go
+valType := reflect2.TypeOf(1)
+i := 1
+j := 10
+valType.UnsafeSet(unsafe.Pointer(&i), unsafe.Pointer(&j))
+// i will be 10
+```
+
+to get set `type`, always use its pointer `*type`
+
+# benchmark
+
+Benchmark is not necessary for this package. It does nothing actually.
+As it is just a thin wrapper to make go runtime public.
+Both `reflect2` and `reflect` call same function
+provided by `runtime` package exposed by go language.
+
+# unsafe safety
+
+Instead of casting `[]byte` to `sliceHeader` in your application using unsafe.
+We can use reflect2 instead. This way, if `sliceHeader` changes in the future,
+only reflect2 need to be upgraded.
+
+reflect2 tries its best to keep the implementation same as reflect (by testing). \ No newline at end of file
diff --git a/vendor/github.com/modern-go/reflect2/go_above_17.go b/vendor/github.com/modern-go/reflect2/go_above_17.go
new file mode 100644
index 000000000..5c1cea868
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/go_above_17.go
@@ -0,0 +1,8 @@
+//+build go1.7
+
+package reflect2
+
+import "unsafe"
+
+//go:linkname resolveTypeOff reflect.resolveTypeOff
+func resolveTypeOff(rtype unsafe.Pointer, off int32) unsafe.Pointer
diff --git a/vendor/github.com/modern-go/reflect2/go_above_19.go b/vendor/github.com/modern-go/reflect2/go_above_19.go
new file mode 100644
index 000000000..c7e3b7801
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/go_above_19.go
@@ -0,0 +1,14 @@
+//+build go1.9
+
+package reflect2
+
+import (
+ "unsafe"
+)
+
+//go:linkname makemap reflect.makemap
+func makemap(rtype unsafe.Pointer, cap int) (m unsafe.Pointer)
+
+func makeMapWithSize(rtype unsafe.Pointer, cap int) unsafe.Pointer {
+ return makemap(rtype, cap)
+}
diff --git a/vendor/github.com/modern-go/reflect2/go_below_17.go b/vendor/github.com/modern-go/reflect2/go_below_17.go
new file mode 100644
index 000000000..65a93c889
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/go_below_17.go
@@ -0,0 +1,9 @@
+//+build !go1.7
+
+package reflect2
+
+import "unsafe"
+
+func resolveTypeOff(rtype unsafe.Pointer, off int32) unsafe.Pointer {
+ return nil
+}
diff --git a/vendor/github.com/modern-go/reflect2/go_below_19.go b/vendor/github.com/modern-go/reflect2/go_below_19.go
new file mode 100644
index 000000000..b050ef70c
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/go_below_19.go
@@ -0,0 +1,14 @@
+//+build !go1.9
+
+package reflect2
+
+import (
+ "unsafe"
+)
+
+//go:linkname makemap reflect.makemap
+func makemap(rtype unsafe.Pointer) (m unsafe.Pointer)
+
+func makeMapWithSize(rtype unsafe.Pointer, cap int) unsafe.Pointer {
+ return makemap(rtype)
+}
diff --git a/vendor/github.com/modern-go/reflect2/reflect2.go b/vendor/github.com/modern-go/reflect2/reflect2.go
new file mode 100644
index 000000000..63b49c799
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/reflect2.go
@@ -0,0 +1,298 @@
+package reflect2
+
+import (
+ "github.com/modern-go/concurrent"
+ "reflect"
+ "unsafe"
+)
+
+type Type interface {
+ Kind() reflect.Kind
+ // New return pointer to data of this type
+ New() interface{}
+ // UnsafeNew return the allocated space pointed by unsafe.Pointer
+ UnsafeNew() unsafe.Pointer
+ // PackEFace cast a unsafe pointer to object represented pointer
+ PackEFace(ptr unsafe.Pointer) interface{}
+ // Indirect dereference object represented pointer to this type
+ Indirect(obj interface{}) interface{}
+ // UnsafeIndirect dereference pointer to this type
+ UnsafeIndirect(ptr unsafe.Pointer) interface{}
+ // Type1 returns reflect.Type
+ Type1() reflect.Type
+ Implements(thatType Type) bool
+ String() string
+ RType() uintptr
+ // interface{} of this type has pointer like behavior
+ LikePtr() bool
+ IsNullable() bool
+ IsNil(obj interface{}) bool
+ UnsafeIsNil(ptr unsafe.Pointer) bool
+ Set(obj interface{}, val interface{})
+ UnsafeSet(ptr unsafe.Pointer, val unsafe.Pointer)
+ AssignableTo(anotherType Type) bool
+}
+
+type ListType interface {
+ Type
+ Elem() Type
+ SetIndex(obj interface{}, index int, elem interface{})
+ UnsafeSetIndex(obj unsafe.Pointer, index int, elem unsafe.Pointer)
+ GetIndex(obj interface{}, index int) interface{}
+ UnsafeGetIndex(obj unsafe.Pointer, index int) unsafe.Pointer
+}
+
+type ArrayType interface {
+ ListType
+ Len() int
+}
+
+type SliceType interface {
+ ListType
+ MakeSlice(length int, cap int) interface{}
+ UnsafeMakeSlice(length int, cap int) unsafe.Pointer
+ Grow(obj interface{}, newLength int)
+ UnsafeGrow(ptr unsafe.Pointer, newLength int)
+ Append(obj interface{}, elem interface{})
+ UnsafeAppend(obj unsafe.Pointer, elem unsafe.Pointer)
+ LengthOf(obj interface{}) int
+ UnsafeLengthOf(ptr unsafe.Pointer) int
+ SetNil(obj interface{})
+ UnsafeSetNil(ptr unsafe.Pointer)
+ Cap(obj interface{}) int
+ UnsafeCap(ptr unsafe.Pointer) int
+}
+
+type StructType interface {
+ Type
+ NumField() int
+ Field(i int) StructField
+ FieldByName(name string) StructField
+ FieldByIndex(index []int) StructField
+ FieldByNameFunc(match func(string) bool) StructField
+}
+
+type StructField interface {
+ Offset() uintptr
+ Name() string
+ PkgPath() string
+ Type() Type
+ Tag() reflect.StructTag
+ Index() []int
+ Anonymous() bool
+ Set(obj interface{}, value interface{})
+ UnsafeSet(obj unsafe.Pointer, value unsafe.Pointer)
+ Get(obj interface{}) interface{}
+ UnsafeGet(obj unsafe.Pointer) unsafe.Pointer
+}
+
+type MapType interface {
+ Type
+ Key() Type
+ Elem() Type
+ MakeMap(cap int) interface{}
+ UnsafeMakeMap(cap int) unsafe.Pointer
+ SetIndex(obj interface{}, key interface{}, elem interface{})
+ UnsafeSetIndex(obj unsafe.Pointer, key unsafe.Pointer, elem unsafe.Pointer)
+ TryGetIndex(obj interface{}, key interface{}) (interface{}, bool)
+ GetIndex(obj interface{}, key interface{}) interface{}
+ UnsafeGetIndex(obj unsafe.Pointer, key unsafe.Pointer) unsafe.Pointer
+ Iterate(obj interface{}) MapIterator
+ UnsafeIterate(obj unsafe.Pointer) MapIterator
+}
+
+type MapIterator interface {
+ HasNext() bool
+ Next() (key interface{}, elem interface{})
+ UnsafeNext() (key unsafe.Pointer, elem unsafe.Pointer)
+}
+
+type PtrType interface {
+ Type
+ Elem() Type
+}
+
+type InterfaceType interface {
+ NumMethod() int
+}
+
+type Config struct {
+ UseSafeImplementation bool
+}
+
+type API interface {
+ TypeOf(obj interface{}) Type
+ Type2(type1 reflect.Type) Type
+}
+
+var ConfigUnsafe = Config{UseSafeImplementation: false}.Froze()
+var ConfigSafe = Config{UseSafeImplementation: true}.Froze()
+
+type frozenConfig struct {
+ useSafeImplementation bool
+ cache *concurrent.Map
+}
+
+func (cfg Config) Froze() *frozenConfig {
+ return &frozenConfig{
+ useSafeImplementation: cfg.UseSafeImplementation,
+ cache: concurrent.NewMap(),
+ }
+}
+
+func (cfg *frozenConfig) TypeOf(obj interface{}) Type {
+ cacheKey := uintptr(unpackEFace(obj).rtype)
+ typeObj, found := cfg.cache.Load(cacheKey)
+ if found {
+ return typeObj.(Type)
+ }
+ return cfg.Type2(reflect.TypeOf(obj))
+}
+
+func (cfg *frozenConfig) Type2(type1 reflect.Type) Type {
+ if type1 == nil {
+ return nil
+ }
+ cacheKey := uintptr(unpackEFace(type1).data)
+ typeObj, found := cfg.cache.Load(cacheKey)
+ if found {
+ return typeObj.(Type)
+ }
+ type2 := cfg.wrapType(type1)
+ cfg.cache.Store(cacheKey, type2)
+ return type2
+}
+
+func (cfg *frozenConfig) wrapType(type1 reflect.Type) Type {
+ safeType := safeType{Type: type1, cfg: cfg}
+ switch type1.Kind() {
+ case reflect.Struct:
+ if cfg.useSafeImplementation {
+ return &safeStructType{safeType}
+ }
+ return newUnsafeStructType(cfg, type1)
+ case reflect.Array:
+ if cfg.useSafeImplementation {
+ return &safeSliceType{safeType}
+ }
+ return newUnsafeArrayType(cfg, type1)
+ case reflect.Slice:
+ if cfg.useSafeImplementation {
+ return &safeSliceType{safeType}
+ }
+ return newUnsafeSliceType(cfg, type1)
+ case reflect.Map:
+ if cfg.useSafeImplementation {
+ return &safeMapType{safeType}
+ }
+ return newUnsafeMapType(cfg, type1)
+ case reflect.Ptr, reflect.Chan, reflect.Func:
+ if cfg.useSafeImplementation {
+ return &safeMapType{safeType}
+ }
+ return newUnsafePtrType(cfg, type1)
+ case reflect.Interface:
+ if cfg.useSafeImplementation {
+ return &safeMapType{safeType}
+ }
+ if type1.NumMethod() == 0 {
+ return newUnsafeEFaceType(cfg, type1)
+ }
+ return newUnsafeIFaceType(cfg, type1)
+ default:
+ if cfg.useSafeImplementation {
+ return &safeType
+ }
+ return newUnsafeType(cfg, type1)
+ }
+}
+
+func TypeOf(obj interface{}) Type {
+ return ConfigUnsafe.TypeOf(obj)
+}
+
+func TypeOfPtr(obj interface{}) PtrType {
+ return TypeOf(obj).(PtrType)
+}
+
+func Type2(type1 reflect.Type) Type {
+ if type1 == nil {
+ return nil
+ }
+ return ConfigUnsafe.Type2(type1)
+}
+
+func PtrTo(typ Type) Type {
+ return Type2(reflect.PtrTo(typ.Type1()))
+}
+
+func PtrOf(obj interface{}) unsafe.Pointer {
+ return unpackEFace(obj).data
+}
+
+func RTypeOf(obj interface{}) uintptr {
+ return uintptr(unpackEFace(obj).rtype)
+}
+
+func IsNil(obj interface{}) bool {
+ if obj == nil {
+ return true
+ }
+ return unpackEFace(obj).data == nil
+}
+
+func IsNullable(kind reflect.Kind) bool {
+ switch kind {
+ case reflect.Ptr, reflect.Map, reflect.Chan, reflect.Func, reflect.Slice, reflect.Interface:
+ return true
+ }
+ return false
+}
+
+func likePtrKind(kind reflect.Kind) bool {
+ switch kind {
+ case reflect.Ptr, reflect.Map, reflect.Chan, reflect.Func:
+ return true
+ }
+ return false
+}
+
+func likePtrType(typ reflect.Type) bool {
+ if likePtrKind(typ.Kind()) {
+ return true
+ }
+ if typ.Kind() == reflect.Struct {
+ if typ.NumField() != 1 {
+ return false
+ }
+ return likePtrType(typ.Field(0).Type)
+ }
+ if typ.Kind() == reflect.Array {
+ if typ.Len() != 1 {
+ return false
+ }
+ return likePtrType(typ.Elem())
+ }
+ return false
+}
+
+// NoEscape hides a pointer from escape analysis. noescape is
+// the identity function but escape analysis doesn't think the
+// output depends on the input. noescape is inlined and currently
+// compiles down to zero instructions.
+// USE CAREFULLY!
+//go:nosplit
+func NoEscape(p unsafe.Pointer) unsafe.Pointer {
+ x := uintptr(p)
+ return unsafe.Pointer(x ^ 0)
+}
+
+func UnsafeCastString(str string) []byte {
+ stringHeader := (*reflect.StringHeader)(unsafe.Pointer(&str))
+ sliceHeader := &reflect.SliceHeader{
+ Data: stringHeader.Data,
+ Cap: stringHeader.Len,
+ Len: stringHeader.Len,
+ }
+ return *(*[]byte)(unsafe.Pointer(sliceHeader))
+}
diff --git a/contrib/python/podman/test/__init__.py b/vendor/github.com/modern-go/reflect2/reflect2_amd64.s
index e69de29bb..e69de29bb 100644
--- a/contrib/python/podman/test/__init__.py
+++ b/vendor/github.com/modern-go/reflect2/reflect2_amd64.s
diff --git a/vendor/github.com/modern-go/reflect2/reflect2_kind.go b/vendor/github.com/modern-go/reflect2/reflect2_kind.go
new file mode 100644
index 000000000..62f299e40
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/reflect2_kind.go
@@ -0,0 +1,30 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+// DefaultTypeOfKind return the non aliased default type for the kind
+func DefaultTypeOfKind(kind reflect.Kind) Type {
+ return kindTypes[kind]
+}
+
+var kindTypes = map[reflect.Kind]Type{
+ reflect.Bool: TypeOf(true),
+ reflect.Uint8: TypeOf(uint8(0)),
+ reflect.Int8: TypeOf(int8(0)),
+ reflect.Uint16: TypeOf(uint16(0)),
+ reflect.Int16: TypeOf(int16(0)),
+ reflect.Uint32: TypeOf(uint32(0)),
+ reflect.Int32: TypeOf(int32(0)),
+ reflect.Uint64: TypeOf(uint64(0)),
+ reflect.Int64: TypeOf(int64(0)),
+ reflect.Uint: TypeOf(uint(0)),
+ reflect.Int: TypeOf(int(0)),
+ reflect.Float32: TypeOf(float32(0)),
+ reflect.Float64: TypeOf(float64(0)),
+ reflect.Uintptr: TypeOf(uintptr(0)),
+ reflect.String: TypeOf(""),
+ reflect.UnsafePointer: TypeOf(unsafe.Pointer(nil)),
+}
diff --git a/contrib/python/pypodman/pypodman/__init__.py b/vendor/github.com/modern-go/reflect2/relfect2_386.s
index e69de29bb..e69de29bb 100644
--- a/contrib/python/pypodman/pypodman/__init__.py
+++ b/vendor/github.com/modern-go/reflect2/relfect2_386.s
diff --git a/vendor/github.com/modern-go/reflect2/relfect2_amd64p32.s b/vendor/github.com/modern-go/reflect2/relfect2_amd64p32.s
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/relfect2_amd64p32.s
diff --git a/vendor/github.com/modern-go/reflect2/relfect2_arm.s b/vendor/github.com/modern-go/reflect2/relfect2_arm.s
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/relfect2_arm.s
diff --git a/vendor/github.com/modern-go/reflect2/relfect2_arm64.s b/vendor/github.com/modern-go/reflect2/relfect2_arm64.s
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/relfect2_arm64.s
diff --git a/vendor/github.com/modern-go/reflect2/relfect2_mips64x.s b/vendor/github.com/modern-go/reflect2/relfect2_mips64x.s
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/relfect2_mips64x.s
diff --git a/vendor/github.com/modern-go/reflect2/relfect2_mipsx.s b/vendor/github.com/modern-go/reflect2/relfect2_mipsx.s
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/relfect2_mipsx.s
diff --git a/vendor/github.com/modern-go/reflect2/relfect2_ppc64x.s b/vendor/github.com/modern-go/reflect2/relfect2_ppc64x.s
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/relfect2_ppc64x.s
diff --git a/vendor/github.com/modern-go/reflect2/relfect2_s390x.s b/vendor/github.com/modern-go/reflect2/relfect2_s390x.s
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/relfect2_s390x.s
diff --git a/vendor/github.com/modern-go/reflect2/safe_field.go b/vendor/github.com/modern-go/reflect2/safe_field.go
new file mode 100644
index 000000000..d4ba1f4f8
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/safe_field.go
@@ -0,0 +1,58 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+type safeField struct {
+ reflect.StructField
+}
+
+func (field *safeField) Offset() uintptr {
+ return field.StructField.Offset
+}
+
+func (field *safeField) Name() string {
+ return field.StructField.Name
+}
+
+func (field *safeField) PkgPath() string {
+ return field.StructField.PkgPath
+}
+
+func (field *safeField) Type() Type {
+ panic("not implemented")
+}
+
+func (field *safeField) Tag() reflect.StructTag {
+ return field.StructField.Tag
+}
+
+func (field *safeField) Index() []int {
+ return field.StructField.Index
+}
+
+func (field *safeField) Anonymous() bool {
+ return field.StructField.Anonymous
+}
+
+func (field *safeField) Set(obj interface{}, value interface{}) {
+ val := reflect.ValueOf(obj).Elem()
+ val.FieldByIndex(field.Index()).Set(reflect.ValueOf(value).Elem())
+}
+
+func (field *safeField) UnsafeSet(obj unsafe.Pointer, value unsafe.Pointer) {
+ panic("unsafe operation is not supported")
+}
+
+func (field *safeField) Get(obj interface{}) interface{} {
+ val := reflect.ValueOf(obj).Elem().FieldByIndex(field.Index())
+ ptr := reflect.New(val.Type())
+ ptr.Elem().Set(val)
+ return ptr.Interface()
+}
+
+func (field *safeField) UnsafeGet(obj unsafe.Pointer) unsafe.Pointer {
+ panic("does not support unsafe operation")
+}
diff --git a/vendor/github.com/modern-go/reflect2/safe_map.go b/vendor/github.com/modern-go/reflect2/safe_map.go
new file mode 100644
index 000000000..88362205a
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/safe_map.go
@@ -0,0 +1,101 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+type safeMapType struct {
+ safeType
+}
+
+func (type2 *safeMapType) Key() Type {
+ return type2.safeType.cfg.Type2(type2.Type.Key())
+}
+
+func (type2 *safeMapType) MakeMap(cap int) interface{} {
+ ptr := reflect.New(type2.Type)
+ ptr.Elem().Set(reflect.MakeMap(type2.Type))
+ return ptr.Interface()
+}
+
+func (type2 *safeMapType) UnsafeMakeMap(cap int) unsafe.Pointer {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeMapType) SetIndex(obj interface{}, key interface{}, elem interface{}) {
+ keyVal := reflect.ValueOf(key)
+ elemVal := reflect.ValueOf(elem)
+ val := reflect.ValueOf(obj)
+ val.Elem().SetMapIndex(keyVal.Elem(), elemVal.Elem())
+}
+
+func (type2 *safeMapType) UnsafeSetIndex(obj unsafe.Pointer, key unsafe.Pointer, elem unsafe.Pointer) {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeMapType) TryGetIndex(obj interface{}, key interface{}) (interface{}, bool) {
+ keyVal := reflect.ValueOf(key)
+ if key == nil {
+ keyVal = reflect.New(type2.Type.Key()).Elem()
+ }
+ val := reflect.ValueOf(obj).MapIndex(keyVal)
+ if !val.IsValid() {
+ return nil, false
+ }
+ return val.Interface(), true
+}
+
+func (type2 *safeMapType) GetIndex(obj interface{}, key interface{}) interface{} {
+ val := reflect.ValueOf(obj).Elem()
+ keyVal := reflect.ValueOf(key).Elem()
+ elemVal := val.MapIndex(keyVal)
+ if !elemVal.IsValid() {
+ ptr := reflect.New(reflect.PtrTo(val.Type().Elem()))
+ return ptr.Elem().Interface()
+ }
+ ptr := reflect.New(elemVal.Type())
+ ptr.Elem().Set(elemVal)
+ return ptr.Interface()
+}
+
+func (type2 *safeMapType) UnsafeGetIndex(obj unsafe.Pointer, key unsafe.Pointer) unsafe.Pointer {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeMapType) Iterate(obj interface{}) MapIterator {
+ m := reflect.ValueOf(obj).Elem()
+ return &safeMapIterator{
+ m: m,
+ keys: m.MapKeys(),
+ }
+}
+
+func (type2 *safeMapType) UnsafeIterate(obj unsafe.Pointer) MapIterator {
+ panic("does not support unsafe operation")
+}
+
+type safeMapIterator struct {
+ i int
+ m reflect.Value
+ keys []reflect.Value
+}
+
+func (iter *safeMapIterator) HasNext() bool {
+ return iter.i != len(iter.keys)
+}
+
+func (iter *safeMapIterator) Next() (interface{}, interface{}) {
+ key := iter.keys[iter.i]
+ elem := iter.m.MapIndex(key)
+ iter.i += 1
+ keyPtr := reflect.New(key.Type())
+ keyPtr.Elem().Set(key)
+ elemPtr := reflect.New(elem.Type())
+ elemPtr.Elem().Set(elem)
+ return keyPtr.Interface(), elemPtr.Interface()
+}
+
+func (iter *safeMapIterator) UnsafeNext() (unsafe.Pointer, unsafe.Pointer) {
+ panic("does not support unsafe operation")
+}
diff --git a/vendor/github.com/modern-go/reflect2/safe_slice.go b/vendor/github.com/modern-go/reflect2/safe_slice.go
new file mode 100644
index 000000000..bcce6fd20
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/safe_slice.go
@@ -0,0 +1,92 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+type safeSliceType struct {
+ safeType
+}
+
+func (type2 *safeSliceType) SetIndex(obj interface{}, index int, value interface{}) {
+ val := reflect.ValueOf(obj).Elem()
+ elem := reflect.ValueOf(value).Elem()
+ val.Index(index).Set(elem)
+}
+
+func (type2 *safeSliceType) UnsafeSetIndex(obj unsafe.Pointer, index int, value unsafe.Pointer) {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeSliceType) GetIndex(obj interface{}, index int) interface{} {
+ val := reflect.ValueOf(obj).Elem()
+ elem := val.Index(index)
+ ptr := reflect.New(elem.Type())
+ ptr.Elem().Set(elem)
+ return ptr.Interface()
+}
+
+func (type2 *safeSliceType) UnsafeGetIndex(obj unsafe.Pointer, index int) unsafe.Pointer {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeSliceType) MakeSlice(length int, cap int) interface{} {
+ val := reflect.MakeSlice(type2.Type, length, cap)
+ ptr := reflect.New(val.Type())
+ ptr.Elem().Set(val)
+ return ptr.Interface()
+}
+
+func (type2 *safeSliceType) UnsafeMakeSlice(length int, cap int) unsafe.Pointer {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeSliceType) Grow(obj interface{}, newLength int) {
+ oldCap := type2.Cap(obj)
+ oldSlice := reflect.ValueOf(obj).Elem()
+ delta := newLength - oldCap
+ deltaVals := make([]reflect.Value, delta)
+ newSlice := reflect.Append(oldSlice, deltaVals...)
+ oldSlice.Set(newSlice)
+}
+
+func (type2 *safeSliceType) UnsafeGrow(ptr unsafe.Pointer, newLength int) {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeSliceType) Append(obj interface{}, elem interface{}) {
+ val := reflect.ValueOf(obj).Elem()
+ elemVal := reflect.ValueOf(elem).Elem()
+ newVal := reflect.Append(val, elemVal)
+ val.Set(newVal)
+}
+
+func (type2 *safeSliceType) UnsafeAppend(obj unsafe.Pointer, elem unsafe.Pointer) {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeSliceType) SetNil(obj interface{}) {
+ val := reflect.ValueOf(obj).Elem()
+ val.Set(reflect.Zero(val.Type()))
+}
+
+func (type2 *safeSliceType) UnsafeSetNil(ptr unsafe.Pointer) {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeSliceType) LengthOf(obj interface{}) int {
+ return reflect.ValueOf(obj).Elem().Len()
+}
+
+func (type2 *safeSliceType) UnsafeLengthOf(ptr unsafe.Pointer) int {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeSliceType) Cap(obj interface{}) int {
+ return reflect.ValueOf(obj).Elem().Cap()
+}
+
+func (type2 *safeSliceType) UnsafeCap(ptr unsafe.Pointer) int {
+ panic("does not support unsafe operation")
+}
diff --git a/vendor/github.com/modern-go/reflect2/safe_struct.go b/vendor/github.com/modern-go/reflect2/safe_struct.go
new file mode 100644
index 000000000..e5fb9b313
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/safe_struct.go
@@ -0,0 +1,29 @@
+package reflect2
+
+type safeStructType struct {
+ safeType
+}
+
+func (type2 *safeStructType) FieldByName(name string) StructField {
+ field, found := type2.Type.FieldByName(name)
+ if !found {
+ panic("field " + name + " not found")
+ }
+ return &safeField{StructField: field}
+}
+
+func (type2 *safeStructType) Field(i int) StructField {
+ return &safeField{StructField: type2.Type.Field(i)}
+}
+
+func (type2 *safeStructType) FieldByIndex(index []int) StructField {
+ return &safeField{StructField: type2.Type.FieldByIndex(index)}
+}
+
+func (type2 *safeStructType) FieldByNameFunc(match func(string) bool) StructField {
+ field, found := type2.Type.FieldByNameFunc(match)
+ if !found {
+ panic("field match condition not found in " + type2.Type.String())
+ }
+ return &safeField{StructField: field}
+}
diff --git a/vendor/github.com/modern-go/reflect2/safe_type.go b/vendor/github.com/modern-go/reflect2/safe_type.go
new file mode 100644
index 000000000..ee4e7bb6e
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/safe_type.go
@@ -0,0 +1,78 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+type safeType struct {
+ reflect.Type
+ cfg *frozenConfig
+}
+
+func (type2 *safeType) New() interface{} {
+ return reflect.New(type2.Type).Interface()
+}
+
+func (type2 *safeType) UnsafeNew() unsafe.Pointer {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeType) Elem() Type {
+ return type2.cfg.Type2(type2.Type.Elem())
+}
+
+func (type2 *safeType) Type1() reflect.Type {
+ return type2.Type
+}
+
+func (type2 *safeType) PackEFace(ptr unsafe.Pointer) interface{} {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeType) Implements(thatType Type) bool {
+ return type2.Type.Implements(thatType.Type1())
+}
+
+func (type2 *safeType) RType() uintptr {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeType) Indirect(obj interface{}) interface{} {
+ return reflect.Indirect(reflect.ValueOf(obj)).Interface()
+}
+
+func (type2 *safeType) UnsafeIndirect(ptr unsafe.Pointer) interface{} {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeType) LikePtr() bool {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeType) IsNullable() bool {
+ return IsNullable(type2.Kind())
+}
+
+func (type2 *safeType) IsNil(obj interface{}) bool {
+ if obj == nil {
+ return true
+ }
+ return reflect.ValueOf(obj).Elem().IsNil()
+}
+
+func (type2 *safeType) UnsafeIsNil(ptr unsafe.Pointer) bool {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeType) Set(obj interface{}, val interface{}) {
+ reflect.ValueOf(obj).Elem().Set(reflect.ValueOf(val).Elem())
+}
+
+func (type2 *safeType) UnsafeSet(ptr unsafe.Pointer, val unsafe.Pointer) {
+ panic("does not support unsafe operation")
+}
+
+func (type2 *safeType) AssignableTo(anotherType Type) bool {
+ return type2.Type1().AssignableTo(anotherType.Type1())
+}
diff --git a/vendor/github.com/modern-go/reflect2/type_map.go b/vendor/github.com/modern-go/reflect2/type_map.go
new file mode 100644
index 000000000..3acfb5580
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/type_map.go
@@ -0,0 +1,113 @@
+package reflect2
+
+import (
+ "reflect"
+ "runtime"
+ "strings"
+ "sync"
+ "unsafe"
+)
+
+// typelinks1 for 1.5 ~ 1.6
+//go:linkname typelinks1 reflect.typelinks
+func typelinks1() [][]unsafe.Pointer
+
+// typelinks2 for 1.7 ~
+//go:linkname typelinks2 reflect.typelinks
+func typelinks2() (sections []unsafe.Pointer, offset [][]int32)
+
+// initOnce guards initialization of types and packages
+var initOnce sync.Once
+
+var types map[string]reflect.Type
+var packages map[string]map[string]reflect.Type
+
+// discoverTypes initializes types and packages
+func discoverTypes() {
+ types = make(map[string]reflect.Type)
+ packages = make(map[string]map[string]reflect.Type)
+
+ ver := runtime.Version()
+ if ver == "go1.5" || strings.HasPrefix(ver, "go1.5.") {
+ loadGo15Types()
+ } else if ver == "go1.6" || strings.HasPrefix(ver, "go1.6.") {
+ loadGo15Types()
+ } else {
+ loadGo17Types()
+ }
+}
+
+func loadGo15Types() {
+ var obj interface{} = reflect.TypeOf(0)
+ typePtrss := typelinks1()
+ for _, typePtrs := range typePtrss {
+ for _, typePtr := range typePtrs {
+ (*emptyInterface)(unsafe.Pointer(&obj)).word = typePtr
+ typ := obj.(reflect.Type)
+ if typ.Kind() == reflect.Ptr && typ.Elem().Kind() == reflect.Struct {
+ loadedType := typ.Elem()
+ pkgTypes := packages[loadedType.PkgPath()]
+ if pkgTypes == nil {
+ pkgTypes = map[string]reflect.Type{}
+ packages[loadedType.PkgPath()] = pkgTypes
+ }
+ types[loadedType.String()] = loadedType
+ pkgTypes[loadedType.Name()] = loadedType
+ }
+ if typ.Kind() == reflect.Slice && typ.Elem().Kind() == reflect.Ptr &&
+ typ.Elem().Elem().Kind() == reflect.Struct {
+ loadedType := typ.Elem().Elem()
+ pkgTypes := packages[loadedType.PkgPath()]
+ if pkgTypes == nil {
+ pkgTypes = map[string]reflect.Type{}
+ packages[loadedType.PkgPath()] = pkgTypes
+ }
+ types[loadedType.String()] = loadedType
+ pkgTypes[loadedType.Name()] = loadedType
+ }
+ }
+ }
+}
+
+func loadGo17Types() {
+ var obj interface{} = reflect.TypeOf(0)
+ sections, offset := typelinks2()
+ for i, offs := range offset {
+ rodata := sections[i]
+ for _, off := range offs {
+ (*emptyInterface)(unsafe.Pointer(&obj)).word = resolveTypeOff(unsafe.Pointer(rodata), off)
+ typ := obj.(reflect.Type)
+ if typ.Kind() == reflect.Ptr && typ.Elem().Kind() == reflect.Struct {
+ loadedType := typ.Elem()
+ pkgTypes := packages[loadedType.PkgPath()]
+ if pkgTypes == nil {
+ pkgTypes = map[string]reflect.Type{}
+ packages[loadedType.PkgPath()] = pkgTypes
+ }
+ types[loadedType.String()] = loadedType
+ pkgTypes[loadedType.Name()] = loadedType
+ }
+ }
+ }
+}
+
+type emptyInterface struct {
+ typ unsafe.Pointer
+ word unsafe.Pointer
+}
+
+// TypeByName return the type by its name, just like Class.forName in java
+func TypeByName(typeName string) Type {
+ initOnce.Do(discoverTypes)
+ return Type2(types[typeName])
+}
+
+// TypeByPackageName return the type by its package and name
+func TypeByPackageName(pkgPath string, name string) Type {
+ initOnce.Do(discoverTypes)
+ pkgTypes := packages[pkgPath]
+ if pkgTypes == nil {
+ return nil
+ }
+ return Type2(pkgTypes[name])
+}
diff --git a/vendor/github.com/modern-go/reflect2/unsafe_array.go b/vendor/github.com/modern-go/reflect2/unsafe_array.go
new file mode 100644
index 000000000..76cbdba6e
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/unsafe_array.go
@@ -0,0 +1,65 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+type UnsafeArrayType struct {
+ unsafeType
+ elemRType unsafe.Pointer
+ pElemRType unsafe.Pointer
+ elemSize uintptr
+ likePtr bool
+}
+
+func newUnsafeArrayType(cfg *frozenConfig, type1 reflect.Type) *UnsafeArrayType {
+ return &UnsafeArrayType{
+ unsafeType: *newUnsafeType(cfg, type1),
+ elemRType: unpackEFace(type1.Elem()).data,
+ pElemRType: unpackEFace(reflect.PtrTo(type1.Elem())).data,
+ elemSize: type1.Elem().Size(),
+ likePtr: likePtrType(type1),
+ }
+}
+
+func (type2 *UnsafeArrayType) LikePtr() bool {
+ return type2.likePtr
+}
+
+func (type2 *UnsafeArrayType) Indirect(obj interface{}) interface{} {
+ objEFace := unpackEFace(obj)
+ assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIndirect(objEFace.data)
+}
+
+func (type2 *UnsafeArrayType) UnsafeIndirect(ptr unsafe.Pointer) interface{} {
+ if type2.likePtr {
+ return packEFace(type2.rtype, *(*unsafe.Pointer)(ptr))
+ }
+ return packEFace(type2.rtype, ptr)
+}
+
+func (type2 *UnsafeArrayType) SetIndex(obj interface{}, index int, elem interface{}) {
+ objEFace := unpackEFace(obj)
+ assertType("ArrayType.SetIndex argument 1", type2.ptrRType, objEFace.rtype)
+ elemEFace := unpackEFace(elem)
+ assertType("ArrayType.SetIndex argument 3", type2.pElemRType, elemEFace.rtype)
+ type2.UnsafeSetIndex(objEFace.data, index, elemEFace.data)
+}
+
+func (type2 *UnsafeArrayType) UnsafeSetIndex(obj unsafe.Pointer, index int, elem unsafe.Pointer) {
+ elemPtr := arrayAt(obj, index, type2.elemSize, "i < s.Len")
+ typedmemmove(type2.elemRType, elemPtr, elem)
+}
+
+func (type2 *UnsafeArrayType) GetIndex(obj interface{}, index int) interface{} {
+ objEFace := unpackEFace(obj)
+ assertType("ArrayType.GetIndex argument 1", type2.ptrRType, objEFace.rtype)
+ elemPtr := type2.UnsafeGetIndex(objEFace.data, index)
+ return packEFace(type2.pElemRType, elemPtr)
+}
+
+func (type2 *UnsafeArrayType) UnsafeGetIndex(obj unsafe.Pointer, index int) unsafe.Pointer {
+ return arrayAt(obj, index, type2.elemSize, "i < s.Len")
+}
diff --git a/vendor/github.com/modern-go/reflect2/unsafe_eface.go b/vendor/github.com/modern-go/reflect2/unsafe_eface.go
new file mode 100644
index 000000000..805010f3a
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/unsafe_eface.go
@@ -0,0 +1,59 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+type eface struct {
+ rtype unsafe.Pointer
+ data unsafe.Pointer
+}
+
+func unpackEFace(obj interface{}) *eface {
+ return (*eface)(unsafe.Pointer(&obj))
+}
+
+func packEFace(rtype unsafe.Pointer, data unsafe.Pointer) interface{} {
+ var i interface{}
+ e := (*eface)(unsafe.Pointer(&i))
+ e.rtype = rtype
+ e.data = data
+ return i
+}
+
+type UnsafeEFaceType struct {
+ unsafeType
+}
+
+func newUnsafeEFaceType(cfg *frozenConfig, type1 reflect.Type) *UnsafeEFaceType {
+ return &UnsafeEFaceType{
+ unsafeType: *newUnsafeType(cfg, type1),
+ }
+}
+
+func (type2 *UnsafeEFaceType) IsNil(obj interface{}) bool {
+ if obj == nil {
+ return true
+ }
+ objEFace := unpackEFace(obj)
+ assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIsNil(objEFace.data)
+}
+
+func (type2 *UnsafeEFaceType) UnsafeIsNil(ptr unsafe.Pointer) bool {
+ if ptr == nil {
+ return true
+ }
+ return unpackEFace(*(*interface{})(ptr)).data == nil
+}
+
+func (type2 *UnsafeEFaceType) Indirect(obj interface{}) interface{} {
+ objEFace := unpackEFace(obj)
+ assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIndirect(objEFace.data)
+}
+
+func (type2 *UnsafeEFaceType) UnsafeIndirect(ptr unsafe.Pointer) interface{} {
+ return *(*interface{})(ptr)
+}
diff --git a/vendor/github.com/modern-go/reflect2/unsafe_field.go b/vendor/github.com/modern-go/reflect2/unsafe_field.go
new file mode 100644
index 000000000..5eb53130a
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/unsafe_field.go
@@ -0,0 +1,74 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+type UnsafeStructField struct {
+ reflect.StructField
+ structType *UnsafeStructType
+ rtype unsafe.Pointer
+ ptrRType unsafe.Pointer
+}
+
+func newUnsafeStructField(structType *UnsafeStructType, structField reflect.StructField) *UnsafeStructField {
+ return &UnsafeStructField{
+ StructField: structField,
+ rtype: unpackEFace(structField.Type).data,
+ ptrRType: unpackEFace(reflect.PtrTo(structField.Type)).data,
+ structType: structType,
+ }
+}
+
+func (field *UnsafeStructField) Offset() uintptr {
+ return field.StructField.Offset
+}
+
+func (field *UnsafeStructField) Name() string {
+ return field.StructField.Name
+}
+
+func (field *UnsafeStructField) PkgPath() string {
+ return field.StructField.PkgPath
+}
+
+func (field *UnsafeStructField) Type() Type {
+ return field.structType.cfg.Type2(field.StructField.Type)
+}
+
+func (field *UnsafeStructField) Tag() reflect.StructTag {
+ return field.StructField.Tag
+}
+
+func (field *UnsafeStructField) Index() []int {
+ return field.StructField.Index
+}
+
+func (field *UnsafeStructField) Anonymous() bool {
+ return field.StructField.Anonymous
+}
+
+func (field *UnsafeStructField) Set(obj interface{}, value interface{}) {
+ objEFace := unpackEFace(obj)
+ assertType("StructField.SetIndex argument 1", field.structType.ptrRType, objEFace.rtype)
+ valueEFace := unpackEFace(value)
+ assertType("StructField.SetIndex argument 2", field.ptrRType, valueEFace.rtype)
+ field.UnsafeSet(objEFace.data, valueEFace.data)
+}
+
+func (field *UnsafeStructField) UnsafeSet(obj unsafe.Pointer, value unsafe.Pointer) {
+ fieldPtr := add(obj, field.StructField.Offset, "same as non-reflect &v.field")
+ typedmemmove(field.rtype, fieldPtr, value)
+}
+
+func (field *UnsafeStructField) Get(obj interface{}) interface{} {
+ objEFace := unpackEFace(obj)
+ assertType("StructField.GetIndex argument 1", field.structType.ptrRType, objEFace.rtype)
+ value := field.UnsafeGet(objEFace.data)
+ return packEFace(field.ptrRType, value)
+}
+
+func (field *UnsafeStructField) UnsafeGet(obj unsafe.Pointer) unsafe.Pointer {
+ return add(obj, field.StructField.Offset, "same as non-reflect &v.field")
+}
diff --git a/vendor/github.com/modern-go/reflect2/unsafe_iface.go b/vendor/github.com/modern-go/reflect2/unsafe_iface.go
new file mode 100644
index 000000000..b60195533
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/unsafe_iface.go
@@ -0,0 +1,64 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+type iface struct {
+ itab *itab
+ data unsafe.Pointer
+}
+
+type itab struct {
+ ignore unsafe.Pointer
+ rtype unsafe.Pointer
+}
+
+func IFaceToEFace(ptr unsafe.Pointer) interface{} {
+ iface := (*iface)(ptr)
+ if iface.itab == nil {
+ return nil
+ }
+ return packEFace(iface.itab.rtype, iface.data)
+}
+
+type UnsafeIFaceType struct {
+ unsafeType
+}
+
+func newUnsafeIFaceType(cfg *frozenConfig, type1 reflect.Type) *UnsafeIFaceType {
+ return &UnsafeIFaceType{
+ unsafeType: *newUnsafeType(cfg, type1),
+ }
+}
+
+func (type2 *UnsafeIFaceType) Indirect(obj interface{}) interface{} {
+ objEFace := unpackEFace(obj)
+ assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIndirect(objEFace.data)
+}
+
+func (type2 *UnsafeIFaceType) UnsafeIndirect(ptr unsafe.Pointer) interface{} {
+ return IFaceToEFace(ptr)
+}
+
+func (type2 *UnsafeIFaceType) IsNil(obj interface{}) bool {
+ if obj == nil {
+ return true
+ }
+ objEFace := unpackEFace(obj)
+ assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIsNil(objEFace.data)
+}
+
+func (type2 *UnsafeIFaceType) UnsafeIsNil(ptr unsafe.Pointer) bool {
+ if ptr == nil {
+ return true
+ }
+ iface := (*iface)(ptr)
+ if iface.itab == nil {
+ return true
+ }
+ return false
+}
diff --git a/vendor/github.com/modern-go/reflect2/unsafe_link.go b/vendor/github.com/modern-go/reflect2/unsafe_link.go
new file mode 100644
index 000000000..57229c8db
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/unsafe_link.go
@@ -0,0 +1,70 @@
+package reflect2
+
+import "unsafe"
+
+//go:linkname unsafe_New reflect.unsafe_New
+func unsafe_New(rtype unsafe.Pointer) unsafe.Pointer
+
+//go:linkname typedmemmove reflect.typedmemmove
+func typedmemmove(rtype unsafe.Pointer, dst, src unsafe.Pointer)
+
+//go:linkname unsafe_NewArray reflect.unsafe_NewArray
+func unsafe_NewArray(rtype unsafe.Pointer, length int) unsafe.Pointer
+
+// typedslicecopy copies a slice of elemType values from src to dst,
+// returning the number of elements copied.
+//go:linkname typedslicecopy reflect.typedslicecopy
+//go:noescape
+func typedslicecopy(elemType unsafe.Pointer, dst, src sliceHeader) int
+
+//go:linkname mapassign reflect.mapassign
+//go:noescape
+func mapassign(rtype unsafe.Pointer, m unsafe.Pointer, key, val unsafe.Pointer)
+
+//go:linkname mapaccess reflect.mapaccess
+//go:noescape
+func mapaccess(rtype unsafe.Pointer, m unsafe.Pointer, key unsafe.Pointer) (val unsafe.Pointer)
+
+// m escapes into the return value, but the caller of mapiterinit
+// doesn't let the return value escape.
+//go:noescape
+//go:linkname mapiterinit reflect.mapiterinit
+func mapiterinit(rtype unsafe.Pointer, m unsafe.Pointer) *hiter
+
+//go:noescape
+//go:linkname mapiternext reflect.mapiternext
+func mapiternext(it *hiter)
+
+//go:linkname ifaceE2I reflect.ifaceE2I
+func ifaceE2I(rtype unsafe.Pointer, src interface{}, dst unsafe.Pointer)
+
+// A hash iteration structure.
+// If you modify hiter, also change cmd/internal/gc/reflect.go to indicate
+// the layout of this structure.
+type hiter struct {
+ key unsafe.Pointer // Must be in first position. Write nil to indicate iteration end (see cmd/internal/gc/range.go).
+ value unsafe.Pointer // Must be in second position (see cmd/internal/gc/range.go).
+ // rest fields are ignored
+}
+
+// add returns p+x.
+//
+// The whySafe string is ignored, so that the function still inlines
+// as efficiently as p+x, but all call sites should use the string to
+// record why the addition is safe, which is to say why the addition
+// does not cause x to advance to the very end of p's allocation
+// and therefore point incorrectly at the next block in memory.
+func add(p unsafe.Pointer, x uintptr, whySafe string) unsafe.Pointer {
+ return unsafe.Pointer(uintptr(p) + x)
+}
+
+// arrayAt returns the i-th element of p,
+// an array whose elements are eltSize bytes wide.
+// The array pointed at by p must have at least i+1 elements:
+// it is invalid (but impossible to check here) to pass i >= len,
+// because then the result will point outside the array.
+// whySafe must explain why i < len. (Passing "i < len" is fine;
+// the benefit is to surface this assumption at the call site.)
+func arrayAt(p unsafe.Pointer, i int, eltSize uintptr, whySafe string) unsafe.Pointer {
+ return add(p, uintptr(i)*eltSize, "i < len")
+}
diff --git a/vendor/github.com/modern-go/reflect2/unsafe_map.go b/vendor/github.com/modern-go/reflect2/unsafe_map.go
new file mode 100644
index 000000000..f2e76e6bb
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/unsafe_map.go
@@ -0,0 +1,138 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+type UnsafeMapType struct {
+ unsafeType
+ pKeyRType unsafe.Pointer
+ pElemRType unsafe.Pointer
+}
+
+func newUnsafeMapType(cfg *frozenConfig, type1 reflect.Type) MapType {
+ return &UnsafeMapType{
+ unsafeType: *newUnsafeType(cfg, type1),
+ pKeyRType: unpackEFace(reflect.PtrTo(type1.Key())).data,
+ pElemRType: unpackEFace(reflect.PtrTo(type1.Elem())).data,
+ }
+}
+
+func (type2 *UnsafeMapType) IsNil(obj interface{}) bool {
+ if obj == nil {
+ return true
+ }
+ objEFace := unpackEFace(obj)
+ assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIsNil(objEFace.data)
+}
+
+func (type2 *UnsafeMapType) UnsafeIsNil(ptr unsafe.Pointer) bool {
+ if ptr == nil {
+ return true
+ }
+ return *(*unsafe.Pointer)(ptr) == nil
+}
+
+func (type2 *UnsafeMapType) LikePtr() bool {
+ return true
+}
+
+func (type2 *UnsafeMapType) Indirect(obj interface{}) interface{} {
+ objEFace := unpackEFace(obj)
+ assertType("MapType.Indirect argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIndirect(objEFace.data)
+}
+
+func (type2 *UnsafeMapType) UnsafeIndirect(ptr unsafe.Pointer) interface{} {
+ return packEFace(type2.rtype, *(*unsafe.Pointer)(ptr))
+}
+
+func (type2 *UnsafeMapType) Key() Type {
+ return type2.cfg.Type2(type2.Type.Key())
+}
+
+func (type2 *UnsafeMapType) MakeMap(cap int) interface{} {
+ return packEFace(type2.ptrRType, type2.UnsafeMakeMap(cap))
+}
+
+func (type2 *UnsafeMapType) UnsafeMakeMap(cap int) unsafe.Pointer {
+ m := makeMapWithSize(type2.rtype, cap)
+ return unsafe.Pointer(&m)
+}
+
+func (type2 *UnsafeMapType) SetIndex(obj interface{}, key interface{}, elem interface{}) {
+ objEFace := unpackEFace(obj)
+ assertType("MapType.SetIndex argument 1", type2.ptrRType, objEFace.rtype)
+ keyEFace := unpackEFace(key)
+ assertType("MapType.SetIndex argument 2", type2.pKeyRType, keyEFace.rtype)
+ elemEFace := unpackEFace(elem)
+ assertType("MapType.SetIndex argument 3", type2.pElemRType, elemEFace.rtype)
+ type2.UnsafeSetIndex(objEFace.data, keyEFace.data, elemEFace.data)
+}
+
+func (type2 *UnsafeMapType) UnsafeSetIndex(obj unsafe.Pointer, key unsafe.Pointer, elem unsafe.Pointer) {
+ mapassign(type2.rtype, *(*unsafe.Pointer)(obj), key, elem)
+}
+
+func (type2 *UnsafeMapType) TryGetIndex(obj interface{}, key interface{}) (interface{}, bool) {
+ objEFace := unpackEFace(obj)
+ assertType("MapType.TryGetIndex argument 1", type2.ptrRType, objEFace.rtype)
+ keyEFace := unpackEFace(key)
+ assertType("MapType.TryGetIndex argument 2", type2.pKeyRType, keyEFace.rtype)
+ elemPtr := type2.UnsafeGetIndex(objEFace.data, keyEFace.data)
+ if elemPtr == nil {
+ return nil, false
+ }
+ return packEFace(type2.pElemRType, elemPtr), true
+}
+
+func (type2 *UnsafeMapType) GetIndex(obj interface{}, key interface{}) interface{} {
+ objEFace := unpackEFace(obj)
+ assertType("MapType.GetIndex argument 1", type2.ptrRType, objEFace.rtype)
+ keyEFace := unpackEFace(key)
+ assertType("MapType.GetIndex argument 2", type2.pKeyRType, keyEFace.rtype)
+ elemPtr := type2.UnsafeGetIndex(objEFace.data, keyEFace.data)
+ return packEFace(type2.pElemRType, elemPtr)
+}
+
+func (type2 *UnsafeMapType) UnsafeGetIndex(obj unsafe.Pointer, key unsafe.Pointer) unsafe.Pointer {
+ return mapaccess(type2.rtype, *(*unsafe.Pointer)(obj), key)
+}
+
+func (type2 *UnsafeMapType) Iterate(obj interface{}) MapIterator {
+ objEFace := unpackEFace(obj)
+ assertType("MapType.Iterate argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIterate(objEFace.data)
+}
+
+func (type2 *UnsafeMapType) UnsafeIterate(obj unsafe.Pointer) MapIterator {
+ return &UnsafeMapIterator{
+ hiter: mapiterinit(type2.rtype, *(*unsafe.Pointer)(obj)),
+ pKeyRType: type2.pKeyRType,
+ pElemRType: type2.pElemRType,
+ }
+}
+
+type UnsafeMapIterator struct {
+ *hiter
+ pKeyRType unsafe.Pointer
+ pElemRType unsafe.Pointer
+}
+
+func (iter *UnsafeMapIterator) HasNext() bool {
+ return iter.key != nil
+}
+
+func (iter *UnsafeMapIterator) Next() (interface{}, interface{}) {
+ key, elem := iter.UnsafeNext()
+ return packEFace(iter.pKeyRType, key), packEFace(iter.pElemRType, elem)
+}
+
+func (iter *UnsafeMapIterator) UnsafeNext() (unsafe.Pointer, unsafe.Pointer) {
+ key := iter.key
+ elem := iter.value
+ mapiternext(iter.hiter)
+ return key, elem
+}
diff --git a/vendor/github.com/modern-go/reflect2/unsafe_ptr.go b/vendor/github.com/modern-go/reflect2/unsafe_ptr.go
new file mode 100644
index 000000000..8e5ec9cf4
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/unsafe_ptr.go
@@ -0,0 +1,46 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+type UnsafePtrType struct {
+ unsafeType
+}
+
+func newUnsafePtrType(cfg *frozenConfig, type1 reflect.Type) *UnsafePtrType {
+ return &UnsafePtrType{
+ unsafeType: *newUnsafeType(cfg, type1),
+ }
+}
+
+func (type2 *UnsafePtrType) IsNil(obj interface{}) bool {
+ if obj == nil {
+ return true
+ }
+ objEFace := unpackEFace(obj)
+ assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIsNil(objEFace.data)
+}
+
+func (type2 *UnsafePtrType) UnsafeIsNil(ptr unsafe.Pointer) bool {
+ if ptr == nil {
+ return true
+ }
+ return *(*unsafe.Pointer)(ptr) == nil
+}
+
+func (type2 *UnsafePtrType) LikePtr() bool {
+ return true
+}
+
+func (type2 *UnsafePtrType) Indirect(obj interface{}) interface{} {
+ objEFace := unpackEFace(obj)
+ assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIndirect(objEFace.data)
+}
+
+func (type2 *UnsafePtrType) UnsafeIndirect(ptr unsafe.Pointer) interface{} {
+ return packEFace(type2.rtype, *(*unsafe.Pointer)(ptr))
+}
diff --git a/vendor/github.com/modern-go/reflect2/unsafe_slice.go b/vendor/github.com/modern-go/reflect2/unsafe_slice.go
new file mode 100644
index 000000000..1c6d876c7
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/unsafe_slice.go
@@ -0,0 +1,177 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+// sliceHeader is a safe version of SliceHeader used within this package.
+type sliceHeader struct {
+ Data unsafe.Pointer
+ Len int
+ Cap int
+}
+
+type UnsafeSliceType struct {
+ unsafeType
+ elemRType unsafe.Pointer
+ pElemRType unsafe.Pointer
+ elemSize uintptr
+}
+
+func newUnsafeSliceType(cfg *frozenConfig, type1 reflect.Type) SliceType {
+ elemType := type1.Elem()
+ return &UnsafeSliceType{
+ unsafeType: *newUnsafeType(cfg, type1),
+ pElemRType: unpackEFace(reflect.PtrTo(elemType)).data,
+ elemRType: unpackEFace(elemType).data,
+ elemSize: elemType.Size(),
+ }
+}
+
+func (type2 *UnsafeSliceType) Set(obj interface{}, val interface{}) {
+ objEFace := unpackEFace(obj)
+ assertType("Type.Set argument 1", type2.ptrRType, objEFace.rtype)
+ valEFace := unpackEFace(val)
+ assertType("Type.Set argument 2", type2.ptrRType, valEFace.rtype)
+ type2.UnsafeSet(objEFace.data, valEFace.data)
+}
+
+func (type2 *UnsafeSliceType) UnsafeSet(ptr unsafe.Pointer, val unsafe.Pointer) {
+ *(*sliceHeader)(ptr) = *(*sliceHeader)(val)
+}
+
+func (type2 *UnsafeSliceType) IsNil(obj interface{}) bool {
+ if obj == nil {
+ return true
+ }
+ objEFace := unpackEFace(obj)
+ assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIsNil(objEFace.data)
+}
+
+func (type2 *UnsafeSliceType) UnsafeIsNil(ptr unsafe.Pointer) bool {
+ if ptr == nil {
+ return true
+ }
+ return (*sliceHeader)(ptr).Data == nil
+}
+
+func (type2 *UnsafeSliceType) SetNil(obj interface{}) {
+ objEFace := unpackEFace(obj)
+ assertType("SliceType.SetNil argument 1", type2.ptrRType, objEFace.rtype)
+ type2.UnsafeSetNil(objEFace.data)
+}
+
+func (type2 *UnsafeSliceType) UnsafeSetNil(ptr unsafe.Pointer) {
+ header := (*sliceHeader)(ptr)
+ header.Len = 0
+ header.Cap = 0
+ header.Data = nil
+}
+
+func (type2 *UnsafeSliceType) MakeSlice(length int, cap int) interface{} {
+ return packEFace(type2.ptrRType, type2.UnsafeMakeSlice(length, cap))
+}
+
+func (type2 *UnsafeSliceType) UnsafeMakeSlice(length int, cap int) unsafe.Pointer {
+ header := &sliceHeader{unsafe_NewArray(type2.elemRType, cap), length, cap}
+ return unsafe.Pointer(header)
+}
+
+func (type2 *UnsafeSliceType) LengthOf(obj interface{}) int {
+ objEFace := unpackEFace(obj)
+ assertType("SliceType.Len argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeLengthOf(objEFace.data)
+}
+
+func (type2 *UnsafeSliceType) UnsafeLengthOf(obj unsafe.Pointer) int {
+ header := (*sliceHeader)(obj)
+ return header.Len
+}
+
+func (type2 *UnsafeSliceType) SetIndex(obj interface{}, index int, elem interface{}) {
+ objEFace := unpackEFace(obj)
+ assertType("SliceType.SetIndex argument 1", type2.ptrRType, objEFace.rtype)
+ elemEFace := unpackEFace(elem)
+ assertType("SliceType.SetIndex argument 3", type2.pElemRType, elemEFace.rtype)
+ type2.UnsafeSetIndex(objEFace.data, index, elemEFace.data)
+}
+
+func (type2 *UnsafeSliceType) UnsafeSetIndex(obj unsafe.Pointer, index int, elem unsafe.Pointer) {
+ header := (*sliceHeader)(obj)
+ elemPtr := arrayAt(header.Data, index, type2.elemSize, "i < s.Len")
+ typedmemmove(type2.elemRType, elemPtr, elem)
+}
+
+func (type2 *UnsafeSliceType) GetIndex(obj interface{}, index int) interface{} {
+ objEFace := unpackEFace(obj)
+ assertType("SliceType.GetIndex argument 1", type2.ptrRType, objEFace.rtype)
+ elemPtr := type2.UnsafeGetIndex(objEFace.data, index)
+ return packEFace(type2.pElemRType, elemPtr)
+}
+
+func (type2 *UnsafeSliceType) UnsafeGetIndex(obj unsafe.Pointer, index int) unsafe.Pointer {
+ header := (*sliceHeader)(obj)
+ return arrayAt(header.Data, index, type2.elemSize, "i < s.Len")
+}
+
+func (type2 *UnsafeSliceType) Append(obj interface{}, elem interface{}) {
+ objEFace := unpackEFace(obj)
+ assertType("SliceType.Append argument 1", type2.ptrRType, objEFace.rtype)
+ elemEFace := unpackEFace(elem)
+ assertType("SliceType.Append argument 2", type2.pElemRType, elemEFace.rtype)
+ type2.UnsafeAppend(objEFace.data, elemEFace.data)
+}
+
+func (type2 *UnsafeSliceType) UnsafeAppend(obj unsafe.Pointer, elem unsafe.Pointer) {
+ header := (*sliceHeader)(obj)
+ oldLen := header.Len
+ type2.UnsafeGrow(obj, oldLen+1)
+ type2.UnsafeSetIndex(obj, oldLen, elem)
+}
+
+func (type2 *UnsafeSliceType) Cap(obj interface{}) int {
+ objEFace := unpackEFace(obj)
+ assertType("SliceType.Cap argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeCap(objEFace.data)
+}
+
+func (type2 *UnsafeSliceType) UnsafeCap(ptr unsafe.Pointer) int {
+ return (*sliceHeader)(ptr).Cap
+}
+
+func (type2 *UnsafeSliceType) Grow(obj interface{}, newLength int) {
+ objEFace := unpackEFace(obj)
+ assertType("SliceType.Grow argument 1", type2.ptrRType, objEFace.rtype)
+ type2.UnsafeGrow(objEFace.data, newLength)
+}
+
+func (type2 *UnsafeSliceType) UnsafeGrow(obj unsafe.Pointer, newLength int) {
+ header := (*sliceHeader)(obj)
+ if newLength <= header.Cap {
+ header.Len = newLength
+ return
+ }
+ newCap := calcNewCap(header.Cap, newLength)
+ newHeader := (*sliceHeader)(type2.UnsafeMakeSlice(header.Len, newCap))
+ typedslicecopy(type2.elemRType, *newHeader, *header)
+ header.Data = newHeader.Data
+ header.Cap = newHeader.Cap
+ header.Len = newLength
+}
+
+func calcNewCap(cap int, expectedCap int) int {
+ if cap == 0 {
+ cap = expectedCap
+ } else {
+ for cap < expectedCap {
+ if cap < 1024 {
+ cap += cap
+ } else {
+ cap += cap / 4
+ }
+ }
+ }
+ return cap
+}
diff --git a/vendor/github.com/modern-go/reflect2/unsafe_struct.go b/vendor/github.com/modern-go/reflect2/unsafe_struct.go
new file mode 100644
index 000000000..804d91663
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/unsafe_struct.go
@@ -0,0 +1,59 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+type UnsafeStructType struct {
+ unsafeType
+ likePtr bool
+}
+
+func newUnsafeStructType(cfg *frozenConfig, type1 reflect.Type) *UnsafeStructType {
+ return &UnsafeStructType{
+ unsafeType: *newUnsafeType(cfg, type1),
+ likePtr: likePtrType(type1),
+ }
+}
+
+func (type2 *UnsafeStructType) LikePtr() bool {
+ return type2.likePtr
+}
+
+func (type2 *UnsafeStructType) Indirect(obj interface{}) interface{} {
+ objEFace := unpackEFace(obj)
+ assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIndirect(objEFace.data)
+}
+
+func (type2 *UnsafeStructType) UnsafeIndirect(ptr unsafe.Pointer) interface{} {
+ if type2.likePtr {
+ return packEFace(type2.rtype, *(*unsafe.Pointer)(ptr))
+ }
+ return packEFace(type2.rtype, ptr)
+}
+
+func (type2 *UnsafeStructType) FieldByName(name string) StructField {
+ structField, found := type2.Type.FieldByName(name)
+ if !found {
+ return nil
+ }
+ return newUnsafeStructField(type2, structField)
+}
+
+func (type2 *UnsafeStructType) Field(i int) StructField {
+ return newUnsafeStructField(type2, type2.Type.Field(i))
+}
+
+func (type2 *UnsafeStructType) FieldByIndex(index []int) StructField {
+ return newUnsafeStructField(type2, type2.Type.FieldByIndex(index))
+}
+
+func (type2 *UnsafeStructType) FieldByNameFunc(match func(string) bool) StructField {
+ structField, found := type2.Type.FieldByNameFunc(match)
+ if !found {
+ panic("field match condition not found in " + type2.Type.String())
+ }
+ return newUnsafeStructField(type2, structField)
+}
diff --git a/vendor/github.com/modern-go/reflect2/unsafe_type.go b/vendor/github.com/modern-go/reflect2/unsafe_type.go
new file mode 100644
index 000000000..13941716c
--- /dev/null
+++ b/vendor/github.com/modern-go/reflect2/unsafe_type.go
@@ -0,0 +1,85 @@
+package reflect2
+
+import (
+ "reflect"
+ "unsafe"
+)
+
+type unsafeType struct {
+ safeType
+ rtype unsafe.Pointer
+ ptrRType unsafe.Pointer
+}
+
+func newUnsafeType(cfg *frozenConfig, type1 reflect.Type) *unsafeType {
+ return &unsafeType{
+ safeType: safeType{
+ Type: type1,
+ cfg: cfg,
+ },
+ rtype: unpackEFace(type1).data,
+ ptrRType: unpackEFace(reflect.PtrTo(type1)).data,
+ }
+}
+
+func (type2 *unsafeType) Set(obj interface{}, val interface{}) {
+ objEFace := unpackEFace(obj)
+ assertType("Type.Set argument 1", type2.ptrRType, objEFace.rtype)
+ valEFace := unpackEFace(val)
+ assertType("Type.Set argument 2", type2.ptrRType, valEFace.rtype)
+ type2.UnsafeSet(objEFace.data, valEFace.data)
+}
+
+func (type2 *unsafeType) UnsafeSet(ptr unsafe.Pointer, val unsafe.Pointer) {
+ typedmemmove(type2.rtype, ptr, val)
+}
+
+func (type2 *unsafeType) IsNil(obj interface{}) bool {
+ objEFace := unpackEFace(obj)
+ assertType("Type.IsNil argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIsNil(objEFace.data)
+}
+
+func (type2 *unsafeType) UnsafeIsNil(ptr unsafe.Pointer) bool {
+ return ptr == nil
+}
+
+func (type2 *unsafeType) UnsafeNew() unsafe.Pointer {
+ return unsafe_New(type2.rtype)
+}
+
+func (type2 *unsafeType) New() interface{} {
+ return packEFace(type2.ptrRType, type2.UnsafeNew())
+}
+
+func (type2 *unsafeType) PackEFace(ptr unsafe.Pointer) interface{} {
+ return packEFace(type2.ptrRType, ptr)
+}
+
+func (type2 *unsafeType) RType() uintptr {
+ return uintptr(type2.rtype)
+}
+
+func (type2 *unsafeType) Indirect(obj interface{}) interface{} {
+ objEFace := unpackEFace(obj)
+ assertType("Type.Indirect argument 1", type2.ptrRType, objEFace.rtype)
+ return type2.UnsafeIndirect(objEFace.data)
+}
+
+func (type2 *unsafeType) UnsafeIndirect(obj unsafe.Pointer) interface{} {
+ return packEFace(type2.rtype, obj)
+}
+
+func (type2 *unsafeType) LikePtr() bool {
+ return false
+}
+
+func assertType(where string, expectRType unsafe.Pointer, actualRType unsafe.Pointer) {
+ if expectRType != actualRType {
+ expectType := reflect.TypeOf(0)
+ (*iface)(unsafe.Pointer(&expectType)).data = expectRType
+ actualType := reflect.TypeOf(0)
+ (*iface)(unsafe.Pointer(&actualType)).data = actualRType
+ panic(where + ": expect " + expectType.String() + ", actual " + actualType.String())
+ }
+}
diff --git a/vendor/github.com/opencontainers/go-digest/LICENSE.code b/vendor/github.com/opencontainers/go-digest/LICENSE
index 0ea3ff81e..0ea3ff81e 100644
--- a/vendor/github.com/opencontainers/go-digest/LICENSE.code
+++ b/vendor/github.com/opencontainers/go-digest/LICENSE
diff --git a/vendor/github.com/opencontainers/go-digest/README.md b/vendor/github.com/opencontainers/go-digest/README.md
index 0f5a04092..25aac3470 100644
--- a/vendor/github.com/opencontainers/go-digest/README.md
+++ b/vendor/github.com/opencontainers/go-digest/README.md
@@ -101,4 +101,4 @@ the various OCI projects).
# Copyright and license
-Copyright © 2016 Docker, Inc. All rights reserved, except as follows. Code is released under the [Apache 2.0 license](LICENSE.code). This `README.md` file and the [`CONTRIBUTING.md`](CONTRIBUTING.md) file are licensed under the Creative Commons Attribution 4.0 International License under the terms and conditions set forth in the file [`LICENSE.docs`](LICENSE.docs). You may obtain a duplicate copy of the same license, titled CC BY-SA 4.0, at http://creativecommons.org/licenses/by-sa/4.0/.
+Copyright © 2016 Docker, Inc. All rights reserved, except as follows. Code is released under the [Apache 2.0 license](LICENSE). This `README.md` file and the [`CONTRIBUTING.md`](CONTRIBUTING.md) file are licensed under the Creative Commons Attribution 4.0 International License under the terms and conditions set forth in the file [`LICENSE.docs`](LICENSE.docs). You may obtain a duplicate copy of the same license, titled CC BY-SA 4.0, at http://creativecommons.org/licenses/by-sa/4.0/.
diff --git a/vendor/github.com/opencontainers/go-digest/algorithm.go b/vendor/github.com/opencontainers/go-digest/algorithm.go
index bdff42d92..8813bd26f 100644
--- a/vendor/github.com/opencontainers/go-digest/algorithm.go
+++ b/vendor/github.com/opencontainers/go-digest/algorithm.go
@@ -19,6 +19,7 @@ import (
"fmt"
"hash"
"io"
+ "regexp"
)
// Algorithm identifies and implementation of a digester by an identifier.
@@ -28,9 +29,9 @@ type Algorithm string
// supported digest types
const (
- SHA256 Algorithm = "sha256" // sha256 with hex encoding
- SHA384 Algorithm = "sha384" // sha384 with hex encoding
- SHA512 Algorithm = "sha512" // sha512 with hex encoding
+ SHA256 Algorithm = "sha256" // sha256 with hex encoding (lower case only)
+ SHA384 Algorithm = "sha384" // sha384 with hex encoding (lower case only)
+ SHA512 Algorithm = "sha512" // sha512 with hex encoding (lower case only)
// Canonical is the primary digest algorithm used with the distribution
// project. Other digests may be used but this one is the primary storage
@@ -50,6 +51,14 @@ var (
SHA384: crypto.SHA384,
SHA512: crypto.SHA512,
}
+
+ // anchoredEncodedRegexps contains anchored regular expressions for hex-encoded digests.
+ // Note that /A-F/ disallowed.
+ anchoredEncodedRegexps = map[Algorithm]*regexp.Regexp{
+ SHA256: regexp.MustCompile(`^[a-f0-9]{64}$`),
+ SHA384: regexp.MustCompile(`^[a-f0-9]{96}$`),
+ SHA512: regexp.MustCompile(`^[a-f0-9]{128}$`),
+ }
)
// Available returns true if the digest type is available for use. If this
@@ -125,6 +134,14 @@ func (a Algorithm) Hash() hash.Hash {
return algorithms[a].New()
}
+// Encode encodes the raw bytes of a digest, typically from a hash.Hash, into
+// the encoded portion of the digest.
+func (a Algorithm) Encode(d []byte) string {
+ // TODO(stevvooe): Currently, all algorithms use a hex encoding. When we
+ // add support for back registration, we can modify this accordingly.
+ return fmt.Sprintf("%x", d)
+}
+
// FromReader returns the digest of the reader using the algorithm.
func (a Algorithm) FromReader(rd io.Reader) (Digest, error) {
digester := a.Digester()
@@ -156,3 +173,20 @@ func (a Algorithm) FromBytes(p []byte) Digest {
func (a Algorithm) FromString(s string) Digest {
return a.FromBytes([]byte(s))
}
+
+// Validate validates the encoded portion string
+func (a Algorithm) Validate(encoded string) error {
+ r, ok := anchoredEncodedRegexps[a]
+ if !ok {
+ return ErrDigestUnsupported
+ }
+ // Digests much always be hex-encoded, ensuring that their hex portion will
+ // always be size*2
+ if a.Size()*2 != len(encoded) {
+ return ErrDigestInvalidLength
+ }
+ if r.MatchString(encoded) {
+ return nil
+ }
+ return ErrDigestInvalidFormat
+}
diff --git a/vendor/github.com/opencontainers/go-digest/digest.go b/vendor/github.com/opencontainers/go-digest/digest.go
index 69e1d2b54..ad398cba2 100644
--- a/vendor/github.com/opencontainers/go-digest/digest.go
+++ b/vendor/github.com/opencontainers/go-digest/digest.go
@@ -45,16 +45,21 @@ func NewDigest(alg Algorithm, h hash.Hash) Digest {
// functions. This is also useful for rebuilding digests from binary
// serializations.
func NewDigestFromBytes(alg Algorithm, p []byte) Digest {
- return Digest(fmt.Sprintf("%s:%x", alg, p))
+ return NewDigestFromEncoded(alg, alg.Encode(p))
}
-// NewDigestFromHex returns a Digest from alg and a the hex encoded digest.
+// NewDigestFromHex is deprecated. Please use NewDigestFromEncoded.
func NewDigestFromHex(alg, hex string) Digest {
- return Digest(fmt.Sprintf("%s:%s", alg, hex))
+ return NewDigestFromEncoded(Algorithm(alg), hex)
+}
+
+// NewDigestFromEncoded returns a Digest from alg and the encoded digest.
+func NewDigestFromEncoded(alg Algorithm, encoded string) Digest {
+ return Digest(fmt.Sprintf("%s:%s", alg, encoded))
}
// DigestRegexp matches valid digest types.
-var DigestRegexp = regexp.MustCompile(`[a-zA-Z0-9-_+.]+:[a-fA-F0-9]+`)
+var DigestRegexp = regexp.MustCompile(`[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+`)
// DigestRegexpAnchored matches valid digest types, anchored to the start and end of the match.
var DigestRegexpAnchored = regexp.MustCompile(`^` + DigestRegexp.String() + `$`)
@@ -96,26 +101,18 @@ func FromString(s string) Digest {
// error if not.
func (d Digest) Validate() error {
s := string(d)
-
i := strings.Index(s, ":")
-
- // validate i then run through regexp
- if i < 0 || i+1 == len(s) || !DigestRegexpAnchored.MatchString(s) {
+ if i <= 0 || i+1 == len(s) {
return ErrDigestInvalidFormat
}
-
- algorithm := Algorithm(s[:i])
+ algorithm, encoded := Algorithm(s[:i]), s[i+1:]
if !algorithm.Available() {
+ if !DigestRegexpAnchored.MatchString(s) {
+ return ErrDigestInvalidFormat
+ }
return ErrDigestUnsupported
}
-
- // Digests much always be hex-encoded, ensuring that their hex portion will
- // always be size*2
- if algorithm.Size()*2 != len(s[i+1:]) {
- return ErrDigestInvalidLength
- }
-
- return nil
+ return algorithm.Validate(encoded)
}
// Algorithm returns the algorithm portion of the digest. This will panic if
@@ -133,12 +130,17 @@ func (d Digest) Verifier() Verifier {
}
}
-// Hex returns the hex digest portion of the digest. This will panic if the
+// Encoded returns the encoded portion of the digest. This will panic if the
// underlying digest is not in a valid format.
-func (d Digest) Hex() string {
+func (d Digest) Encoded() string {
return string(d[d.sepIndex()+1:])
}
+// Hex is deprecated. Please use Digest.Encoded.
+func (d Digest) Hex() string {
+ return d.Encoded()
+}
+
func (d Digest) String() string {
return string(d)
}
diff --git a/vendor/github.com/opencontainers/runc/README.md b/vendor/github.com/opencontainers/runc/README.md
index 5215e32c1..e755fb7bc 100644
--- a/vendor/github.com/opencontainers/runc/README.md
+++ b/vendor/github.com/opencontainers/runc/README.md
@@ -68,6 +68,7 @@ make BUILDTAGS='seccomp apparmor'
| selinux | selinux process and mount labeling | <none> |
| apparmor | apparmor profile support | <none> |
| ambient | ambient capability support | kernel 4.3 |
+| nokmem | disable kernel memory account | <none> |
### Running the test suite
@@ -87,6 +88,18 @@ You can run a specific test case by setting the `TESTFLAGS` variable.
# make test TESTFLAGS="-run=SomeTestFunction"
```
+You can run a specific integration test by setting the `TESTPATH` variable.
+
+```bash
+# make test TESTPATH="/checkpoint.bats"
+```
+
+You can run a test in your proxy environment by setting `DOCKER_BUILD_PROXY` and `DOCKER_RUN_PROXY` variables.
+
+```bash
+# make test DOCKER_BUILD_PROXY="--build-arg HTTP_PROXY=http://yourproxy/" DOCKER_RUN_PROXY="-e HTTP_PROXY=http://yourproxy/"
+```
+
### Dependencies Management
`runc` uses [vndr](https://github.com/LK4D4/vndr) for dependencies management.
@@ -251,3 +264,7 @@ PIDFile=/run/mycontainerid.pid
[Install]
WantedBy=multi-user.target
```
+
+## License
+
+The code and docs are released under the [Apache 2.0 license](LICENSE).
diff --git a/vendor/github.com/opencontainers/runc/libcontainer/README.md b/vendor/github.com/opencontainers/runc/libcontainer/README.md
index 42f3efe56..1d7fa04c0 100644
--- a/vendor/github.com/opencontainers/runc/libcontainer/README.md
+++ b/vendor/github.com/opencontainers/runc/libcontainer/README.md
@@ -148,6 +148,7 @@ config := &configs.Config{
{Type: configs.NEWPID},
{Type: configs.NEWUSER},
{Type: configs.NEWNET},
+ {Type: configs.NEWCGROUP},
}),
Cgroups: &configs.Cgroup{
Name: "test-container",
@@ -323,6 +324,7 @@ generated when building libcontainer with docker.
## Copyright and license
-Code and documentation copyright 2014 Docker, inc. Code released under the Apache 2.0 license.
-Docs released under Creative commons.
-
+Code and documentation copyright 2014 Docker, inc.
+The code and documentation are released under the [Apache 2.0 license](../LICENSE).
+The documentation is also released under Creative Commons Attribution 4.0 International License.
+You may obtain a copy of the license, titled CC-BY-4.0, at http://creativecommons.org/licenses/by/4.0/.
diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/utils.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/utils.go
index 7c995efee..316d963d6 100644
--- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/utils.go
+++ b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/utils.go
@@ -13,40 +13,50 @@ import (
"strings"
"time"
- "github.com/docker/go-units"
+ units "github.com/docker/go-units"
)
const (
- cgroupNamePrefix = "name="
+ CgroupNamePrefix = "name="
CgroupProcesses = "cgroup.procs"
)
// https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt
-func FindCgroupMountpoint(subsystem string) (string, error) {
- mnt, _, err := FindCgroupMountpointAndRoot(subsystem)
+func FindCgroupMountpoint(cgroupPath, subsystem string) (string, error) {
+ mnt, _, err := FindCgroupMountpointAndRoot(cgroupPath, subsystem)
return mnt, err
}
-func FindCgroupMountpointAndRoot(subsystem string) (string, string, error) {
+func FindCgroupMountpointAndRoot(cgroupPath, subsystem string) (string, string, error) {
// We are not using mount.GetMounts() because it's super-inefficient,
// parsing it directly sped up x10 times because of not using Sscanf.
// It was one of two major performance drawbacks in container start.
if !isSubsystemAvailable(subsystem) {
return "", "", NewNotFoundError(subsystem)
}
+
f, err := os.Open("/proc/self/mountinfo")
if err != nil {
return "", "", err
}
defer f.Close()
- scanner := bufio.NewScanner(f)
+ return findCgroupMountpointAndRootFromReader(f, cgroupPath, subsystem)
+}
+
+func findCgroupMountpointAndRootFromReader(reader io.Reader, cgroupPath, subsystem string) (string, string, error) {
+ scanner := bufio.NewScanner(reader)
for scanner.Scan() {
txt := scanner.Text()
- fields := strings.Split(txt, " ")
- for _, opt := range strings.Split(fields[len(fields)-1], ",") {
- if opt == subsystem {
- return fields[4], fields[3], nil
+ fields := strings.Fields(txt)
+ if len(fields) < 5 {
+ continue
+ }
+ if strings.HasPrefix(fields[4], cgroupPath) {
+ for _, opt := range strings.Split(fields[len(fields)-1], ",") {
+ if opt == subsystem {
+ return fields[4], fields[3], nil
+ }
}
}
}
@@ -103,7 +113,7 @@ func FindCgroupMountpointDir() (string, error) {
}
if postSeparatorFields[0] == "cgroup" {
- // Check that the mount is properly formated.
+ // Check that the mount is properly formatted.
if numPostFields < 3 {
return "", fmt.Errorf("Error found less than 3 fields post '-' in %q", text)
}
@@ -151,19 +161,20 @@ func getCgroupMountsHelper(ss map[string]bool, mi io.Reader, all bool) ([]Mount,
Root: fields[3],
}
for _, opt := range strings.Split(fields[len(fields)-1], ",") {
- if !ss[opt] {
+ seen, known := ss[opt]
+ if !known || (!all && seen) {
continue
}
- if strings.HasPrefix(opt, cgroupNamePrefix) {
- m.Subsystems = append(m.Subsystems, opt[len(cgroupNamePrefix):])
- } else {
- m.Subsystems = append(m.Subsystems, opt)
- }
- if !all {
- numFound++
+ ss[opt] = true
+ if strings.HasPrefix(opt, CgroupNamePrefix) {
+ opt = opt[len(CgroupNamePrefix):]
}
+ m.Subsystems = append(m.Subsystems, opt)
+ numFound++
+ }
+ if len(m.Subsystems) > 0 || all {
+ res = append(res, m)
}
- res = append(res, m)
}
if err := scanner.Err(); err != nil {
return nil, err
@@ -187,7 +198,7 @@ func GetCgroupMounts(all bool) ([]Mount, error) {
allMap := make(map[string]bool)
for s := range allSubsystems {
- allMap[s] = true
+ allMap[s] = false
}
return getCgroupMountsHelper(allMap, f, all)
}
@@ -256,13 +267,13 @@ func GetInitCgroupPath(subsystem string) (string, error) {
}
func getCgroupPathHelper(subsystem, cgroup string) (string, error) {
- mnt, root, err := FindCgroupMountpointAndRoot(subsystem)
+ mnt, root, err := FindCgroupMountpointAndRoot("", subsystem)
if err != nil {
return "", err
}
// This is needed for nested containers, because in /proc/self/cgroup we
- // see pathes from host, which don't exist in container.
+ // see paths from host, which don't exist in container.
relCgroup, err := filepath.Rel(root, cgroup)
if err != nil {
return "", err
@@ -342,7 +353,7 @@ func getControllerPath(subsystem string, cgroups map[string]string) (string, err
return p, nil
}
- if p, ok := cgroups[cgroupNamePrefix+subsystem]; ok {
+ if p, ok := cgroups[CgroupNamePrefix+subsystem]; ok {
return p, nil
}
diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/config.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/config.go
index b1c4762fe..7728522fe 100644
--- a/vendor/github.com/opencontainers/runc/libcontainer/configs/config.go
+++ b/vendor/github.com/opencontainers/runc/libcontainer/configs/config.go
@@ -186,12 +186,19 @@ type Config struct {
// callers keyring in this case.
NoNewKeyring bool `json:"no_new_keyring"`
- // Rootless specifies whether the container is a rootless container.
- Rootless bool `json:"rootless"`
-
- // IntelRdt specifies settings for Intel RDT/CAT group that the container is placed into
- // to limit the resources (e.g., L3 cache) the container has available
+ // IntelRdt specifies settings for Intel RDT group that the container is placed into
+ // to limit the resources (e.g., L3 cache, memory bandwidth) the container has available
IntelRdt *IntelRdt `json:"intel_rdt,omitempty"`
+
+ // RootlessEUID is set when the runc was launched with non-zero EUID.
+ // Note that RootlessEUID is set to false when launched with EUID=0 in userns.
+ // When RootlessEUID is set, runc creates a new userns for the container.
+ // (config.json needs to contain userns settings)
+ RootlessEUID bool `json:"rootless_euid,omitempty"`
+
+ // RootlessCgroups is set when unlikely to have the full access to cgroups.
+ // When RootlessCgroups is set, cgroups errors are ignored.
+ RootlessCgroups bool `json:"rootless_cgroups,omitempty"`
}
type Hooks struct {
@@ -265,26 +272,23 @@ func (hooks Hooks) MarshalJSON() ([]byte, error) {
})
}
-// HookState is the payload provided to a hook on execution.
-type HookState specs.State
-
type Hook interface {
// Run executes the hook with the provided state.
- Run(HookState) error
+ Run(*specs.State) error
}
// NewFunctionHook will call the provided function when the hook is run.
-func NewFunctionHook(f func(HookState) error) FuncHook {
+func NewFunctionHook(f func(*specs.State) error) FuncHook {
return FuncHook{
run: f,
}
}
type FuncHook struct {
- run func(HookState) error
+ run func(*specs.State) error
}
-func (f FuncHook) Run(s HookState) error {
+func (f FuncHook) Run(s *specs.State) error {
return f.run(s)
}
@@ -307,7 +311,7 @@ type CommandHook struct {
Command
}
-func (c Command) Run(s HookState) error {
+func (c Command) Run(s *specs.State) error {
b, err := json.Marshal(s)
if err != nil {
return err
diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/intelrdt.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/intelrdt.go
index 36bd5f96a..6f47aac07 100644
--- a/vendor/github.com/opencontainers/runc/libcontainer/configs/intelrdt.go
+++ b/vendor/github.com/opencontainers/runc/libcontainer/configs/intelrdt.go
@@ -4,4 +4,8 @@ type IntelRdt struct {
// The schema for L3 cache id and capacity bitmask (CBM)
// Format: "L3:<cache_id0>=<cbm0>;<cache_id1>=<cbm1>;..."
L3CacheSchema string `json:"l3_cache_schema,omitempty"`
+
+ // The schema of memory bandwidth percentage per L3 cache id
+ // Format: "MB:<cache_id0>=bandwidth0;<cache_id1>=bandwidth1;..."
+ MemBwSchema string `json:"memBwSchema,omitempty"`
}
diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_linux.go
index 5fc171a57..1bbaef9bd 100644
--- a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_linux.go
+++ b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_linux.go
@@ -7,12 +7,13 @@ import (
)
const (
- NEWNET NamespaceType = "NEWNET"
- NEWPID NamespaceType = "NEWPID"
- NEWNS NamespaceType = "NEWNS"
- NEWUTS NamespaceType = "NEWUTS"
- NEWIPC NamespaceType = "NEWIPC"
- NEWUSER NamespaceType = "NEWUSER"
+ NEWNET NamespaceType = "NEWNET"
+ NEWPID NamespaceType = "NEWPID"
+ NEWNS NamespaceType = "NEWNS"
+ NEWUTS NamespaceType = "NEWUTS"
+ NEWIPC NamespaceType = "NEWIPC"
+ NEWUSER NamespaceType = "NEWUSER"
+ NEWCGROUP NamespaceType = "NEWCGROUP"
)
var (
@@ -35,6 +36,8 @@ func NsName(ns NamespaceType) string {
return "user"
case NEWUTS:
return "uts"
+ case NEWCGROUP:
+ return "cgroup"
}
return ""
}
@@ -68,6 +71,7 @@ func NamespaceTypes() []NamespaceType {
NEWNET,
NEWPID,
NEWNS,
+ NEWCGROUP,
}
}
diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall.go
index 4ce6813d2..2dc7adfc9 100644
--- a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall.go
+++ b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall.go
@@ -9,12 +9,13 @@ func (n *Namespace) Syscall() int {
}
var namespaceInfo = map[NamespaceType]int{
- NEWNET: unix.CLONE_NEWNET,
- NEWNS: unix.CLONE_NEWNS,
- NEWUSER: unix.CLONE_NEWUSER,
- NEWIPC: unix.CLONE_NEWIPC,
- NEWUTS: unix.CLONE_NEWUTS,
- NEWPID: unix.CLONE_NEWPID,
+ NEWNET: unix.CLONE_NEWNET,
+ NEWNS: unix.CLONE_NEWNS,
+ NEWUSER: unix.CLONE_NEWUSER,
+ NEWIPC: unix.CLONE_NEWIPC,
+ NEWUTS: unix.CLONE_NEWUTS,
+ NEWPID: unix.CLONE_NEWPID,
+ NEWCGROUP: unix.CLONE_NEWCGROUP,
}
// CloneFlags parses the container's Namespaces options to set the correct
diff --git a/vendor/github.com/opencontainers/runc/libcontainer/nsenter/README.md b/vendor/github.com/opencontainers/runc/libcontainer/nsenter/README.md
index 575701371..9ec6c3931 100644
--- a/vendor/github.com/opencontainers/runc/libcontainer/nsenter/README.md
+++ b/vendor/github.com/opencontainers/runc/libcontainer/nsenter/README.md
@@ -10,8 +10,8 @@ The `nsenter` package will `import "C"` and it uses [cgo](https://golang.org/cmd
package. In cgo, if the import of "C" is immediately preceded by a comment, that comment,
called the preamble, is used as a header when compiling the C parts of the package.
So every time we import package `nsenter`, the C code function `nsexec()` would be
-called. And package `nsenter` is now only imported in `main_unix.go`, so every time
-before we call `cmd.Start` on linux, that C code would run.
+called. And package `nsenter` is only imported in `init.go`, so every time the runc
+`init` command is invoked, that C code is run.
Because `nsexec()` must be run before the Go runtime in order to use the
Linux kernel namespace, you must `import` this library into a package if
@@ -37,7 +37,7 @@ the parent `nsexec()` will exit and the child `nsexec()` process will
return to allow the Go runtime take over.
NOTE: We do both `setns(2)` and `clone(2)` even if we don't have any
-CLONE_NEW* clone flags because we must fork a new process in order to
+`CLONE_NEW*` clone flags because we must fork a new process in order to
enter the PID namespace.
diff --git a/vendor/github.com/opencontainers/runc/libcontainer/nsenter/nsexec.c b/vendor/github.com/opencontainers/runc/libcontainer/nsenter/nsexec.c
index a4cd1399d..28269dfc0 100644
--- a/vendor/github.com/opencontainers/runc/libcontainer/nsenter/nsexec.c
+++ b/vendor/github.com/opencontainers/runc/libcontainer/nsenter/nsexec.c
@@ -42,6 +42,12 @@ enum sync_t {
SYNC_ERR = 0xFF, /* Fatal error, no turning back. The error code follows. */
};
+/*
+ * Synchronisation value for cgroup namespace setup.
+ * The same constant is defined in process_linux.go as "createCgroupns".
+ */
+#define CREATECGROUPNS 0x80
+
/* longjmp() arguments. */
#define JUMP_PARENT 0x00
#define JUMP_CHILD 0xA0
@@ -82,7 +88,7 @@ struct nlconfig_t {
uint8_t is_setgroup;
/* Rootless container settings. */
- uint8_t is_rootless;
+ uint8_t is_rootless_euid; /* boolean */
char *uidmappath;
size_t uidmappath_len;
char *gidmappath;
@@ -100,7 +106,7 @@ struct nlconfig_t {
#define GIDMAP_ATTR 27284
#define SETGROUP_ATTR 27285
#define OOM_SCORE_ADJ_ATTR 27286
-#define ROOTLESS_ATTR 27287
+#define ROOTLESS_EUID_ATTR 27287
#define UIDMAPPATH_ATTR 27288
#define GIDMAPPATH_ATTR 27289
@@ -211,7 +217,7 @@ static int try_mapping_tool(const char *app, int pid, char *map, size_t map_len)
/*
* If @app is NULL, execve will segfault. Just check it here and bail (if
- * we're in this path, the caller is already getting desparate and there
+ * we're in this path, the caller is already getting desperate and there
* isn't a backup to this failing). This usually would be a configuration
* or programming issue.
*/
@@ -419,8 +425,8 @@ static void nl_parse(int fd, struct nlconfig_t *config)
case CLONE_FLAGS_ATTR:
config->cloneflags = readint32(current);
break;
- case ROOTLESS_ATTR:
- config->is_rootless = readint8(current);
+ case ROOTLESS_EUID_ATTR:
+ config->is_rootless_euid = readint8(current); /* boolean */
break;
case OOM_SCORE_ADJ_ATTR:
config->oom_score_adj = current;
@@ -640,7 +646,6 @@ void nsexec(void)
case JUMP_PARENT:{
int len;
pid_t child, first_child = -1;
- char buf[JSON_MAX];
bool ready = false;
/* For debugging. */
@@ -687,7 +692,7 @@ void nsexec(void)
* newuidmap/newgidmap shall be used.
*/
- if (config.is_rootless && !config.is_setgroup)
+ if (config.is_rootless_euid && !config.is_setgroup)
update_setgroups(child, SETGROUPS_DENY);
/* Set up mappings. */
@@ -716,6 +721,18 @@ void nsexec(void)
kill(child, SIGKILL);
bail("failed to sync with child: write(SYNC_RECVPID_ACK)");
}
+
+ /* Send the init_func pid back to our parent.
+ *
+ * Send the init_func pid and the pid of the first child back to our parent.
+ * We need to send both back because we can't reap the first child we created (CLONE_PARENT).
+ * It becomes the responsibility of our parent to reap the first child.
+ */
+ len = dprintf(pipenum, "{\"pid\": %d, \"pid_first\": %d}\n", child, first_child);
+ if (len < 0) {
+ kill(child, SIGKILL);
+ bail("unable to generate JSON for child pid");
+ }
}
break;
case SYNC_CHILD_READY:
@@ -759,23 +776,6 @@ void nsexec(void)
bail("unexpected sync value: %u", s);
}
}
-
- /*
- * Send the init_func pid and the pid of the first child back to our parent.
- *
- * We need to send both back because we can't reap the first child we created (CLONE_PARENT).
- * It becomes the responsibility of our parent to reap the first child.
- */
- len = snprintf(buf, JSON_MAX, "{\"pid\": %d, \"pid_first\": %d}\n", child, first_child);
- if (len < 0) {
- kill(child, SIGKILL);
- bail("unable to generate JSON for child pid");
- }
- if (write(pipenum, buf, len) != len) {
- kill(child, SIGKILL);
- bail("unable to send child pid to bootstrapper");
- }
-
exit(0);
}
@@ -862,14 +862,17 @@ void nsexec(void)
if (setresuid(0, 0, 0) < 0)
bail("failed to become root in user namespace");
}
-
/*
- * Unshare all of the namespaces. Note that we don't merge this
- * with clone() because there were some old kernel versions where
- * clone(CLONE_PARENT | CLONE_NEWPID) was broken, so we'll just do
- * it the long way.
+ * Unshare all of the namespaces. Now, it should be noted that this
+ * ordering might break in the future (especially with rootless
+ * containers). But for now, it's not possible to split this into
+ * CLONE_NEWUSER + [the rest] because of some RHEL SELinux issues.
+ *
+ * Note that we don't merge this with clone() because there were
+ * some old kernel versions where clone(CLONE_PARENT | CLONE_NEWPID)
+ * was broken, so we'll just do it the long way anyway.
*/
- if (unshare(config.cloneflags) < 0)
+ if (unshare(config.cloneflags & ~CLONE_NEWCGROUP) < 0)
bail("failed to unshare namespaces");
/*
@@ -953,11 +956,23 @@ void nsexec(void)
if (setgid(0) < 0)
bail("setgid failed");
- if (!config.is_rootless && config.is_setgroup) {
+ if (!config.is_rootless_euid && config.is_setgroup) {
if (setgroups(0, NULL) < 0)
bail("setgroups failed");
}
+ /* ... wait until our topmost parent has finished cgroup setup in p.manager.Apply() ... */
+ if (config.cloneflags & CLONE_NEWCGROUP) {
+ uint8_t value;
+ if (read(pipenum, &value, sizeof(value)) != sizeof(value))
+ bail("read synchronisation value failed");
+ if (value == CREATECGROUPNS) {
+ if (unshare(CLONE_NEWCGROUP) < 0)
+ bail("failed to unshare cgroup namespace");
+ } else
+ bail("received unknown synchronisation value");
+ }
+
s = SYNC_CHILD_READY;
if (write(syncfd, &s, sizeof(s)) != sizeof(s))
bail("failed to sync with patent: write(SYNC_CHILD_READY)");
diff --git a/vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go b/vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go
index c1e634c94..92b5ae8de 100644
--- a/vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go
+++ b/vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go
@@ -5,6 +5,7 @@ package user
import (
"io"
"os"
+ "strconv"
"golang.org/x/sys/unix"
)
@@ -115,22 +116,23 @@ func CurrentGroup() (Group, error) {
return LookupGid(unix.Getgid())
}
-func CurrentUserSubUIDs() ([]SubID, error) {
+func currentUserSubIDs(fileName string) ([]SubID, error) {
u, err := CurrentUser()
if err != nil {
return nil, err
}
- return ParseSubIDFileFilter("/etc/subuid",
- func(entry SubID) bool { return entry.Name == u.Name })
+ filter := func(entry SubID) bool {
+ return entry.Name == u.Name || entry.Name == strconv.Itoa(u.Uid)
+ }
+ return ParseSubIDFileFilter(fileName, filter)
}
-func CurrentGroupSubGIDs() ([]SubID, error) {
- g, err := CurrentGroup()
- if err != nil {
- return nil, err
- }
- return ParseSubIDFileFilter("/etc/subgid",
- func(entry SubID) bool { return entry.Name == g.Name })
+func CurrentUserSubUIDs() ([]SubID, error) {
+ return currentUserSubIDs("/etc/subuid")
+}
+
+func CurrentUserSubGIDs() ([]SubID, error) {
+ return currentUserSubIDs("/etc/subgid")
}
func CurrentProcessUIDMap() ([]IDMap, error) {
diff --git a/vendor/github.com/opencontainers/runc/vendor.conf b/vendor/github.com/opencontainers/runc/vendor.conf
index e2b519e67..fadbe0707 100644
--- a/vendor/github.com/opencontainers/runc/vendor.conf
+++ b/vendor/github.com/opencontainers/runc/vendor.conf
@@ -1,7 +1,7 @@
# OCI runtime-spec. When updating this, make sure you use a version tag rather
# than a commit ID so it's much more obvious what version of the spec we are
# using.
-github.com/opencontainers/runtime-spec v1.0.0
+github.com/opencontainers/runtime-spec 5684b8af48c1ac3b1451fa499724e30e3c20a294
# Core libcontainer functionality.
github.com/mrunalp/fileutils ed869b029674c0e9ce4c0dfa781405c2d9946d08
github.com/opencontainers/selinux v1.0.0-rc1
diff --git a/vendor/github.com/opencontainers/runtime-spec/specs-go/config.go b/vendor/github.com/opencontainers/runtime-spec/specs-go/config.go
index 7781c5361..6d791e7e9 100644
--- a/vendor/github.com/opencontainers/runtime-spec/specs-go/config.go
+++ b/vendor/github.com/opencontainers/runtime-spec/specs-go/config.go
@@ -160,8 +160,8 @@ type Linux struct {
ReadonlyPaths []string `json:"readonlyPaths,omitempty"`
// MountLabel specifies the selinux context for the mounts in the container.
MountLabel string `json:"mountLabel,omitempty"`
- // IntelRdt contains Intel Resource Director Technology (RDT) information
- // for handling resource constraints (e.g., L3 cache) for the container
+ // IntelRdt contains Intel Resource Director Technology (RDT) information for
+ // handling resource constraints (e.g., L3 cache, memory bandwidth) for the container
IntelRdt *LinuxIntelRdt `json:"intelRdt,omitempty"`
}
@@ -503,6 +503,8 @@ type WindowsNetwork struct {
DNSSearchList []string `json:"DNSSearchList,omitempty"`
// Name (ID) of the container that we will share with the network stack.
NetworkSharedContainerName string `json:"networkSharedContainerName,omitempty"`
+ // name (ID) of the network namespace that will be used for the container.
+ NetworkNamespace string `json:"networkNamespace,omitempty"`
}
// WindowsHyperV contains information for configuring a container to run with Hyper-V isolation.
@@ -526,7 +528,7 @@ type VMHypervisor struct {
// Path is the host path to the hypervisor used to manage the virtual machine.
Path string `json:"path"`
// Parameters specifies parameters to pass to the hypervisor.
- Parameters string `json:"parameters,omitempty"`
+ Parameters []string `json:"parameters,omitempty"`
}
// VMKernel contains information about the kernel to use for a virtual machine.
@@ -534,7 +536,7 @@ type VMKernel struct {
// Path is the host path to the kernel used to boot the virtual machine.
Path string `json:"path"`
// Parameters specifies parameters to pass to the kernel.
- Parameters string `json:"parameters,omitempty"`
+ Parameters []string `json:"parameters,omitempty"`
// InitRD is the host path to an initial ramdisk to be used by the kernel.
InitRD string `json:"initrd,omitempty"`
}
@@ -621,10 +623,18 @@ type LinuxSyscall struct {
Args []LinuxSeccompArg `json:"args,omitempty"`
}
-// LinuxIntelRdt has container runtime resource constraints
-// for Intel RDT/CAT which introduced in Linux 4.10 kernel
+// LinuxIntelRdt has container runtime resource constraints for Intel RDT
+// CAT and MBA features which introduced in Linux 4.10 and 4.12 kernel
type LinuxIntelRdt struct {
+ // The identity for RDT Class of Service
+ ClosID string `json:"closID,omitempty"`
// The schema for L3 cache id and capacity bitmask (CBM)
// Format: "L3:<cache_id0>=<cbm0>;<cache_id1>=<cbm1>;..."
L3CacheSchema string `json:"l3CacheSchema,omitempty"`
+
+ // The schema of memory bandwidth per L3 cache id
+ // Format: "MB:<cache_id0>=bandwidth0;<cache_id1>=bandwidth1;..."
+ // The unit of memory bandwidth is specified in "percentages" by
+ // default, and in "MBps" if MBA Software Controller is enabled.
+ MemBwSchema string `json:"memBwSchema,omitempty"`
}
diff --git a/vendor/github.com/opencontainers/runtime-tools/README.md b/vendor/github.com/opencontainers/runtime-tools/README.md
index 11f613cf9..c9974cab5 100644
--- a/vendor/github.com/opencontainers/runtime-tools/README.md
+++ b/vendor/github.com/opencontainers/runtime-tools/README.md
@@ -87,7 +87,7 @@ make: *** [Makefile:44: localvalidation] Error 1
You can also run an individual test executable directly:
```console
-$ RUNTIME=runc validation/default.t
+$ sudo RUNTIME=runc validation/default/default.t
TAP version 13
ok 1 - has expected hostname
---
@@ -105,7 +105,7 @@ If you cannot install node-tap, you can probably run the test suite with another
For example, with [`prove`][prove]:
```console
-$ sudo make TAP='prove -Q -j9' RUNTIME=runc VALIDATION_TESTS=validation/pidfile.t localvalidation
+$ sudo make TAP='prove -Q -j9' RUNTIME=runc VALIDATION_TESTS=validation/pidfile/pidfile.t localvalidation
RUNTIME=runc prove -Q -j9 validation/pidfile.t
All tests successful.
Files=1, Tests=1, 0 wallclock secs ( 0.01 usr 0.01 sys + 0.03 cusr 0.03 csys = 0.08 CPU)
diff --git a/vendor/github.com/opencontainers/runtime-tools/generate/generate.go b/vendor/github.com/opencontainers/runtime-tools/generate/generate.go
index 955a9d5f9..1eb44770f 100644
--- a/vendor/github.com/opencontainers/runtime-tools/generate/generate.go
+++ b/vendor/github.com/opencontainers/runtime-tools/generate/generate.go
@@ -39,23 +39,43 @@ type ExportOptions struct {
// New creates a configuration Generator with the default
// configuration for the target operating system.
func New(os string) (generator Generator, err error) {
- if os != "linux" && os != "solaris" {
+ if os != "linux" && os != "solaris" && os != "windows" {
return generator, fmt.Errorf("no defaults configured for %s", os)
}
config := rspec.Spec{
- Version: rspec.Version,
- Root: &rspec.Root{
+ Version: rspec.Version,
+ Hostname: "mrsdalloway",
+ }
+
+ if os == "windows" {
+ config.Process = &rspec.Process{
+ Args: []string{
+ "cmd",
+ },
+ Cwd: `C:\`,
+ ConsoleSize: &rspec.Box{
+ Width: 80,
+ Height: 20,
+ },
+ }
+ config.Windows = &rspec.Windows{
+ IgnoreFlushesDuringBoot: true,
+ Network: &rspec.WindowsNetwork{
+ AllowUnqualifiedDNSQuery: true,
+ },
+ }
+ } else {
+ config.Root = &rspec.Root{
Path: "rootfs",
Readonly: false,
- },
- Process: &rspec.Process{
+ }
+ config.Process = &rspec.Process{
Terminal: false,
Args: []string{
"sh",
},
- },
- Hostname: "mrsdalloway",
+ }
}
if os == "linux" || os == "solaris" {
diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go b/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go
index bb27ac936..4e9a8c54f 100644
--- a/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go
+++ b/vendor/github.com/opencontainers/selinux/go-selinux/label/label.go
@@ -75,8 +75,8 @@ func ReleaseLabel(label string) error {
// DupSecOpt takes a process label and returns security options that
// can be used to set duplicate labels on future container processes
-func DupSecOpt(src string) []string {
- return nil
+func DupSecOpt(src string) ([]string, error) {
+ return nil, nil
}
// DisableSecOpt returns a security opt that can disable labeling
diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/label/label_selinux.go b/vendor/github.com/opencontainers/selinux/go-selinux/label/label_selinux.go
index de214b2d5..d4e26909d 100644
--- a/vendor/github.com/opencontainers/selinux/go-selinux/label/label_selinux.go
+++ b/vendor/github.com/opencontainers/selinux/go-selinux/label/label_selinux.go
@@ -4,6 +4,8 @@ package label
import (
"fmt"
+ "os"
+ "os/user"
"strings"
"github.com/opencontainers/selinux/go-selinux"
@@ -35,8 +37,15 @@ func InitLabels(options []string) (plabel string, mlabel string, Err error) {
ReleaseLabel(mountLabel)
}
}()
- pcon := selinux.NewContext(processLabel)
- mcon := selinux.NewContext(mountLabel)
+ pcon, err := selinux.NewContext(processLabel)
+ if err != nil {
+ return "", "", err
+ }
+
+ mcon, err := selinux.NewContext(mountLabel)
+ if err != nil {
+ return "", "", err
+ }
for _, opt := range options {
if opt == "disable" {
return "", mountLabel, nil
@@ -146,13 +155,56 @@ func Relabel(path string, fileLabel string, shared bool) error {
return nil
}
- exclude_paths := map[string]bool{"/": true, "/usr": true, "/etc": true, "/tmp": true, "/home": true, "/run": true, "/var": true, "/root": true}
+ exclude_paths := map[string]bool{
+ "/": true,
+ "/bin": true,
+ "/boot": true,
+ "/dev": true,
+ "/etc": true,
+ "/etc/passwd": true,
+ "/etc/pki": true,
+ "/etc/shadow": true,
+ "/home": true,
+ "/lib": true,
+ "/lib64": true,
+ "/media": true,
+ "/opt": true,
+ "/proc": true,
+ "/root": true,
+ "/run": true,
+ "/sbin": true,
+ "/srv": true,
+ "/sys": true,
+ "/tmp": true,
+ "/usr": true,
+ "/var": true,
+ "/var/lib": true,
+ "/var/log": true,
+ }
+
+ if home := os.Getenv("HOME"); home != "" {
+ exclude_paths[home] = true
+ }
+
+ if sudoUser := os.Getenv("SUDO_USER"); sudoUser != "" {
+ if usr, err := user.Lookup(sudoUser); err == nil {
+ exclude_paths[usr.HomeDir] = true
+ }
+ }
+
+ if path != "/" {
+ path = strings.TrimSuffix(path, "/")
+ }
if exclude_paths[path] {
return fmt.Errorf("SELinux relabeling of %s is not allowed", path)
}
if shared {
- c := selinux.NewContext(fileLabel)
+ c, err := selinux.NewContext(fileLabel)
+ if err != nil {
+ return err
+ }
+
c["level"] = "s0"
fileLabel = c.Get()
}
@@ -195,7 +247,7 @@ func ReleaseLabel(label string) error {
// DupSecOpt takes a process label and returns security options that
// can be used to set duplicate labels on future container processes
-func DupSecOpt(src string) []string {
+func DupSecOpt(src string) ([]string, error) {
return selinux.DupSecOpt(src)
}
diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go b/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go
index 7832f7497..5adafd317 100644
--- a/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go
+++ b/vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go
@@ -52,6 +52,8 @@ var (
ErrMCSAlreadyExists = errors.New("MCS label already exists")
// ErrEmptyPath is returned when an empty path has been specified.
ErrEmptyPath = errors.New("empty path")
+ // InvalidLabel is returned when an invalid label is specified.
+ InvalidLabel = errors.New("Invalid Label")
assignRegex = regexp.MustCompile(`^([^=]+)=(.*)$`)
roFileLabel string
@@ -405,11 +407,14 @@ func (c Context) Get() string {
}
// NewContext creates a new Context struct from the specified label
-func NewContext(label string) Context {
+func NewContext(label string) (Context, error) {
c := make(Context)
if len(label) != 0 {
con := strings.SplitN(label, ":", 4)
+ if len(con) < 3 {
+ return c, InvalidLabel
+ }
c["user"] = con[0]
c["role"] = con[1]
c["type"] = con[2]
@@ -417,7 +422,7 @@ func NewContext(label string) Context {
c["level"] = con[3]
}
}
- return c
+ return c, nil
}
// ClearLabels clears all reserved labels
@@ -630,12 +635,12 @@ func ContainerLabels() (processLabel string, fileLabel string) {
roFileLabel = fileLabel
}
exit:
- scon := NewContext(processLabel)
+ scon, _ := NewContext(processLabel)
if scon["level"] != "" {
mcs := uniqMcs(1024)
scon["level"] = mcs
processLabel = scon.Get()
- scon = NewContext(fileLabel)
+ scon, _ = NewContext(fileLabel)
scon["level"] = mcs
fileLabel = scon.Get()
}
@@ -661,8 +666,14 @@ func CopyLevel(src, dest string) (string, error) {
if err := SecurityCheckContext(dest); err != nil {
return "", err
}
- scon := NewContext(src)
- tcon := NewContext(dest)
+ scon, err := NewContext(src)
+ if err != nil {
+ return "", err
+ }
+ tcon, err := NewContext(dest)
+ if err != nil {
+ return "", err
+ }
mcsDelete(tcon["level"])
mcsAdd(scon["level"])
tcon["level"] = scon["level"]
@@ -714,15 +725,18 @@ func Chcon(fpath string, label string, recurse bool) error {
// DupSecOpt takes an SELinux process label and returns security options that
// can be used to set the SELinux Type and Level for future container processes.
-func DupSecOpt(src string) []string {
+func DupSecOpt(src string) ([]string, error) {
if src == "" {
- return nil
+ return nil, nil
+ }
+ con, err := NewContext(src)
+ if err != nil {
+ return nil, err
}
- con := NewContext(src)
if con["user"] == "" ||
con["role"] == "" ||
con["type"] == "" {
- return nil
+ return nil, nil
}
dup := []string{"user:" + con["user"],
"role:" + con["role"],
@@ -733,7 +747,7 @@ func DupSecOpt(src string) []string {
dup = append(dup, "level:"+con["level"])
}
- return dup
+ return dup, nil
}
// DisableSecOpt returns a security opt that can be used to disable SELinux
diff --git a/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go b/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go
index 99efa155a..9497acbd0 100644
--- a/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go
+++ b/vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go
@@ -115,9 +115,9 @@ func (c Context) Get() string {
}
// NewContext creates a new Context struct from the specified label
-func NewContext(label string) Context {
+func NewContext(label string) (Context, error) {
c := make(Context)
- return c
+ return c, nil
}
// ClearLabels clears all reserved MLS/MCS levels
@@ -195,8 +195,8 @@ func Chcon(fpath string, label string, recurse bool) error {
// DupSecOpt takes an SELinux process label and returns security options that
// can be used to set the SELinux Type and Level for future container processes.
-func DupSecOpt(src string) []string {
- return nil
+func DupSecOpt(src string) ([]string, error) {
+ return nil, nil
}
// DisableSecOpt returns a security opt that can be used to disable SELinux
diff --git a/vendor/github.com/ostreedev/ostree-go/pkg/otbuiltin/builtin.go b/vendor/github.com/ostreedev/ostree-go/pkg/otbuiltin/builtin.go
index 24822b2b7..8b0236ff6 100644
--- a/vendor/github.com/ostreedev/ostree-go/pkg/otbuiltin/builtin.go
+++ b/vendor/github.com/ostreedev/ostree-go/pkg/otbuiltin/builtin.go
@@ -112,8 +112,8 @@ func generateError(err *C.GError) error {
return goErr
}
-// isOk wraps a return value (gboolean/gint) into a bool.
+// isOk wraps a gboolean return value into a bool.
// 0 is false/error, everything else is true/ok.
-func isOk(v C.int) bool {
+func isOk(v C.gboolean) bool {
return glib.GoBool(glib.GBoolean(v))
}
diff --git a/vendor/github.com/pkg/errors/README.md b/vendor/github.com/pkg/errors/README.md
index 273db3c98..6483ba2af 100644
--- a/vendor/github.com/pkg/errors/README.md
+++ b/vendor/github.com/pkg/errors/README.md
@@ -1,4 +1,4 @@
-# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors)
+# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge)
Package errors provides simple error handling primitives.
@@ -47,6 +47,6 @@ We welcome pull requests, bug fixes and issue reports. With that said, the bar f
Before proposing a change, please discuss your change by raising an issue.
-## Licence
+## License
BSD-2-Clause
diff --git a/vendor/github.com/pkg/errors/errors.go b/vendor/github.com/pkg/errors/errors.go
index 842ee8045..7421f326f 100644
--- a/vendor/github.com/pkg/errors/errors.go
+++ b/vendor/github.com/pkg/errors/errors.go
@@ -6,7 +6,7 @@
// return err
// }
//
-// which applied recursively up the call stack results in error reports
+// which when applied recursively up the call stack results in error reports
// without context or debugging information. The errors package allows
// programmers to add context to the failure path in their code in a way
// that does not destroy the original value of the error.
@@ -15,16 +15,17 @@
//
// The errors.Wrap function returns a new error that adds context to the
// original error by recording a stack trace at the point Wrap is called,
-// and the supplied message. For example
+// together with the supplied message. For example
//
// _, err := ioutil.ReadAll(r)
// if err != nil {
// return errors.Wrap(err, "read failed")
// }
//
-// If additional control is required the errors.WithStack and errors.WithMessage
-// functions destructure errors.Wrap into its component operations of annotating
-// an error with a stack trace and an a message, respectively.
+// If additional control is required, the errors.WithStack and
+// errors.WithMessage functions destructure errors.Wrap into its component
+// operations: annotating an error with a stack trace and with a message,
+// respectively.
//
// Retrieving the cause of an error
//
@@ -38,7 +39,7 @@
// }
//
// can be inspected by errors.Cause. errors.Cause will recursively retrieve
-// the topmost error which does not implement causer, which is assumed to be
+// the topmost error that does not implement causer, which is assumed to be
// the original cause. For example:
//
// switch err := errors.Cause(err).(type) {
@@ -48,16 +49,16 @@
// // unknown error
// }
//
-// causer interface is not exported by this package, but is considered a part
-// of stable public API.
+// Although the causer interface is not exported by this package, it is
+// considered a part of its stable public interface.
//
// Formatted printing of errors
//
// All error values returned from this package implement fmt.Formatter and can
-// be formatted by the fmt package. The following verbs are supported
+// be formatted by the fmt package. The following verbs are supported:
//
// %s print the error. If the error has a Cause it will be
-// printed recursively
+// printed recursively.
// %v see %s
// %+v extended format. Each Frame of the error's StackTrace will
// be printed in detail.
@@ -65,13 +66,13 @@
// Retrieving the stack trace of an error or wrapper
//
// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are
-// invoked. This information can be retrieved with the following interface.
+// invoked. This information can be retrieved with the following interface:
//
// type stackTracer interface {
// StackTrace() errors.StackTrace
// }
//
-// Where errors.StackTrace is defined as
+// The returned errors.StackTrace type is defined as
//
// type StackTrace []Frame
//
@@ -85,8 +86,8 @@
// }
// }
//
-// stackTracer interface is not exported by this package, but is considered a part
-// of stable public API.
+// Although the stackTracer interface is not exported by this package, it is
+// considered a part of its stable public interface.
//
// See the documentation for Frame.Format for more details.
package errors
@@ -192,7 +193,7 @@ func Wrap(err error, message string) error {
}
// Wrapf returns an error annotating err with a stack trace
-// at the point Wrapf is call, and the format specifier.
+// at the point Wrapf is called, and the format specifier.
// If err is nil, Wrapf returns nil.
func Wrapf(err error, format string, args ...interface{}) error {
if err == nil {
@@ -220,6 +221,18 @@ func WithMessage(err error, message string) error {
}
}
+// WithMessagef annotates err with the format specifier.
+// If err is nil, WithMessagef returns nil.
+func WithMessagef(err error, format string, args ...interface{}) error {
+ if err == nil {
+ return nil
+ }
+ return &withMessage{
+ cause: err,
+ msg: fmt.Sprintf(format, args...),
+ }
+}
+
type withMessage struct {
cause error
msg string
diff --git a/vendor/github.com/pkg/errors/stack.go b/vendor/github.com/pkg/errors/stack.go
index 6b1f2891a..2874a048c 100644
--- a/vendor/github.com/pkg/errors/stack.go
+++ b/vendor/github.com/pkg/errors/stack.go
@@ -46,7 +46,8 @@ func (f Frame) line() int {
//
// Format accepts flags that alter the printing of some verbs, as follows:
//
-// %+s path of source file relative to the compile time GOPATH
+// %+s function name and path of source file relative to the compile time
+// GOPATH separated by \n\t (<funcname>\n\t<path>)
// %+v equivalent to %+s:%d
func (f Frame) Format(s fmt.State, verb rune) {
switch verb {
@@ -79,6 +80,14 @@ func (f Frame) Format(s fmt.State, verb rune) {
// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).
type StackTrace []Frame
+// Format formats the stack of Frames according to the fmt.Formatter interface.
+//
+// %s lists source files for each Frame in the stack
+// %v lists the source file and line number for each Frame in the stack
+//
+// Format accepts flags that alter the printing of some verbs, as follows:
+//
+// %+v Prints filename, function, and line number for each Frame in the stack.
func (st StackTrace) Format(s fmt.State, verb rune) {
switch verb {
case 'v':
@@ -136,43 +145,3 @@ func funcname(name string) string {
i = strings.Index(name, ".")
return name[i+1:]
}
-
-func trimGOPATH(name, file string) string {
- // Here we want to get the source file path relative to the compile time
- // GOPATH. As of Go 1.6.x there is no direct way to know the compiled
- // GOPATH at runtime, but we can infer the number of path segments in the
- // GOPATH. We note that fn.Name() returns the function name qualified by
- // the import path, which does not include the GOPATH. Thus we can trim
- // segments from the beginning of the file path until the number of path
- // separators remaining is one more than the number of path separators in
- // the function name. For example, given:
- //
- // GOPATH /home/user
- // file /home/user/src/pkg/sub/file.go
- // fn.Name() pkg/sub.Type.Method
- //
- // We want to produce:
- //
- // pkg/sub/file.go
- //
- // From this we can easily see that fn.Name() has one less path separator
- // than our desired output. We count separators from the end of the file
- // path until it finds two more than in the function name and then move
- // one character forward to preserve the initial path segment without a
- // leading separator.
- const sep = "/"
- goal := strings.Count(name, sep) + 2
- i := len(file)
- for n := 0; n < goal; n++ {
- i = strings.LastIndex(file[:i], sep)
- if i == -1 {
- // not enough separators found, set i so that the slice expression
- // below leaves file unmodified
- i = -len(sep)
- break
- }
- }
- // get back to 0 or trim the leading separator
- file = file[i+len(sep):]
- return file
-}
diff --git a/vendor/github.com/pquerna/ffjson/fflib/v1/lexer.go b/vendor/github.com/pquerna/ffjson/fflib/v1/lexer.go
index 8ffd54be5..5589292ff 100644
--- a/vendor/github.com/pquerna/ffjson/fflib/v1/lexer.go
+++ b/vendor/github.com/pquerna/ffjson/fflib/v1/lexer.go
@@ -445,7 +445,6 @@ func (ffl *FFLexer) Scan() FFTok {
if ffl.captureAll {
ffl.Output.WriteByte(c)
}
- break
case 't':
ffl.Output.WriteByte('t')
tok = ffl.wantBytes(true_bytes, FFTok_bool)
@@ -471,6 +470,7 @@ func (ffl *FFLexer) Scan() FFTok {
default:
tok = FFTok_error
ffl.Error = FFErr_invalid_char
+ goto lexed
}
}
diff --git a/vendor/github.com/seccomp/containers-golang/README.md b/vendor/github.com/seccomp/containers-golang/README.md
index 43aa9db41..1012baec3 100644
--- a/vendor/github.com/seccomp/containers-golang/README.md
+++ b/vendor/github.com/seccomp/containers-golang/README.md
@@ -1,13 +1,14 @@
`containers-golang` is a set of Go libraries used by container runtimes to generate and load seccomp mappings into the kernel.
-seccomp (short for secure computing mode) is a computer security facility in the Linux kernel. It was merged into the Linux kernel mainline in kernel version 2.6.12, which was released on March 8, 2005.[1] seccomp allows a process to make a one-way transition into a "secure" state where it cannot make any system calls except exit(), sigreturn(), read() and write() to already-open file descriptors. Should it attempt any other system calls, the kernel will terminate the process with SIGKILL or SIGSYS[2][3]. In this sense, it does not virtualize the system's resources but isolates the process from them entirely.
-
-## Dependencies
+seccomp (short for secure computing mode) is a BPF based syscall filter language and present a more conventional function-call based filtering interface that should be familiar to, and easily adopted by, application developers.
## Building
+ make - Generates default.json file, which containes the whitelisted syscalls that can be used by container runtime engines like [CRI-O][cri-o], [Buildah][buildah], [Podman][podman] and [Docker][docker], and container runtimes like OCI [Runc][runc] to controll the syscalls available to containers.
### Supported build tags
+ `seccomp`
+
## Contributing
When developing this library, please use `make` (or `make … BUILDTAGS=…`) to take advantage of the tests and validation.
@@ -19,3 +20,10 @@ ASL 2.0
## Contact
- IRC: #[CRI-O](irc://irc.freenode.net:6667/#cri-o) on freenode.net
+
+[cri-o]: https://github.com/kubernetes-incubator/cri-o/pulls
+[buildah]: https://github.com/projectatomic/buildah
+[podman]: https://github.com/projectatomic/podman
+[docker]: https://github.com/docker/docker
+[runc]: https://github.com/opencontainers/runc
+
diff --git a/vendor/github.com/seccomp/libseccomp-golang/seccomp.go b/vendor/github.com/seccomp/libseccomp-golang/seccomp.go
index a62741814..53bcb024d 100644
--- a/vendor/github.com/seccomp/libseccomp-golang/seccomp.go
+++ b/vendor/github.com/seccomp/libseccomp-golang/seccomp.go
@@ -43,7 +43,7 @@ func (e VersionError) Error() string {
if e.minimum != "" {
format += e.minimum + ": "
} else {
- format += "2.2.0: "
+ format += "2.1.0: "
}
format += "detected %d.%d.%d"
return fmt.Sprintf(format, verMajor, verMinor, verMicro)
@@ -76,8 +76,8 @@ type ScmpSyscall int32
const (
// Valid architectures recognized by libseccomp
- // PowerPC and S390(x) architectures are unavailable below library version
- // v2.3.0 and will returns errors if used with incompatible libraries
+ // ARM64 and all MIPS architectures are unsupported by versions of the
+ // library before v2.2 and will return errors if used
// ArchInvalid is a placeholder to ensure uninitialized ScmpArch
// variables are invalid
@@ -211,7 +211,7 @@ func GetArchFromString(arch string) (ScmpArch, error) {
case "s390x":
return ArchS390X, nil
default:
- return ArchInvalid, fmt.Errorf("cannot convert unrecognized string %q", arch)
+ return ArchInvalid, fmt.Errorf("cannot convert unrecognized string %s", arch)
}
}
@@ -255,7 +255,7 @@ func (a ScmpArch) String() string {
case ArchInvalid:
return "Invalid architecture"
default:
- return fmt.Sprintf("Unknown architecture %#x", uint(a))
+ return "Unknown architecture"
}
}
@@ -279,7 +279,7 @@ func (a ScmpCompareOp) String() string {
case CompareInvalid:
return "Invalid comparison operator"
default:
- return fmt.Sprintf("Unrecognized comparison operator %#x", uint(a))
+ return "Unrecognized comparison operator"
}
}
@@ -298,7 +298,7 @@ func (a ScmpAction) String() string {
case ActAllow:
return "Action: Allow system call"
default:
- return fmt.Sprintf("Unrecognized Action %#x", uint(a))
+ return "Unrecognized Action"
}
}
@@ -324,7 +324,7 @@ func (a ScmpAction) GetReturnCode() int16 {
// GetLibraryVersion returns the version of the library the bindings are built
// against.
// The version is formatted as follows: Major.Minor.Micro
-func GetLibraryVersion() (major, minor, micro uint) {
+func GetLibraryVersion() (major, minor, micro int) {
return verMajor, verMinor, verMicro
}
@@ -350,7 +350,7 @@ func (s ScmpSyscall) GetNameByArch(arch ScmpArch) (string, error) {
cString := C.seccomp_syscall_resolve_num_arch(arch.toNative(), C.int(s))
if cString == nil {
- return "", fmt.Errorf("could not resolve syscall name for %#x", int32(s))
+ return "", fmt.Errorf("could not resolve syscall name")
}
defer C.free(unsafe.Pointer(cString))
@@ -373,7 +373,7 @@ func GetSyscallFromName(name string) (ScmpSyscall, error) {
result := C.seccomp_syscall_resolve_name(cString)
if result == scmpError {
- return 0, fmt.Errorf("could not resolve name to syscall: %q", name)
+ return 0, fmt.Errorf("could not resolve name to syscall")
}
return ScmpSyscall(result), nil
@@ -397,7 +397,7 @@ func GetSyscallFromNameByArch(name string, arch ScmpArch) (ScmpSyscall, error) {
result := C.seccomp_syscall_resolve_name_arch(arch.toNative(), cString)
if result == scmpError {
- return 0, fmt.Errorf("could not resolve name to syscall: %q on %v", name, arch)
+ return 0, fmt.Errorf("could not resolve name to syscall")
}
return ScmpSyscall(result), nil
@@ -426,9 +426,9 @@ func MakeCondition(arg uint, comparison ScmpCompareOp, values ...uint64) (ScmpCo
if comparison == CompareInvalid {
return condStruct, fmt.Errorf("invalid comparison operator")
} else if arg > 5 {
- return condStruct, fmt.Errorf("syscalls only have up to 6 arguments (%d given)", arg)
+ return condStruct, fmt.Errorf("syscalls only have up to 6 arguments")
} else if len(values) > 2 {
- return condStruct, fmt.Errorf("conditions can have at most 2 arguments (%d given)", len(values))
+ return condStruct, fmt.Errorf("conditions can have at most 2 arguments")
} else if len(values) == 0 {
return condStruct, fmt.Errorf("must provide at least one value to compare against")
}
@@ -494,13 +494,6 @@ func NewFilter(defaultAction ScmpAction) (*ScmpFilter, error) {
filter.valid = true
runtime.SetFinalizer(filter, filterFinalizer)
- // Enable TSync so all goroutines will receive the same rules
- // If the kernel does not support TSYNC, allow us to continue without error
- if err := filter.setFilterAttr(filterAttrTsync, 0x1); err != nil && err != syscall.ENOTSUP {
- filter.Release()
- return nil, fmt.Errorf("could not create filter - error setting tsync bit: %v", err)
- }
-
return filter, nil
}
@@ -557,7 +550,7 @@ func (f *ScmpFilter) Release() {
// The source filter src will be released as part of the process, and will no
// longer be usable or valid after this call.
// To be merged, filters must NOT share any architectures, and all their
-// attributes (Default Action, Bad Arch Action, and No New Privs bools)
+// attributes (Default Action, Bad Arch Action, No New Privs and TSync bools)
// must match.
// The filter src will be merged into the filter this is called on.
// The architectures of the src filter not present in the destination, and all
@@ -730,6 +723,30 @@ func (f *ScmpFilter) GetNoNewPrivsBit() (bool, error) {
return true, nil
}
+// GetTsyncBit returns whether Thread Synchronization will be enabled on the
+// filter being loaded, or an error if an issue was encountered retrieving the
+// value.
+// Thread Sync ensures that all members of the thread group of the calling
+// process will share the same Seccomp filter set.
+// Tsync is a fairly recent addition to the Linux kernel and older kernels
+// lack support. If the running kernel does not support Tsync and it is
+// requested in a filter, Libseccomp will not enable TSync support and will
+// proceed as normal.
+// This function is unavailable before v2.2 of libseccomp and will return an
+// error.
+func (f *ScmpFilter) GetTsyncBit() (bool, error) {
+ tSync, err := f.getFilterAttr(filterAttrTsync)
+ if err != nil {
+ return false, err
+ }
+
+ if tSync == 0 {
+ return false, nil
+ }
+
+ return true, nil
+}
+
// SetBadArchAction sets the default action taken on a syscall for an
// architecture not in the filter, or an error if an issue was encountered
// setting the value.
@@ -756,6 +773,27 @@ func (f *ScmpFilter) SetNoNewPrivsBit(state bool) error {
return f.setFilterAttr(filterAttrNNP, toSet)
}
+// SetTsync sets whether Thread Synchronization will be enabled on the filter
+// being loaded. Returns an error if setting Tsync failed, or the filter is
+// invalid.
+// Thread Sync ensures that all members of the thread group of the calling
+// process will share the same Seccomp filter set.
+// Tsync is a fairly recent addition to the Linux kernel and older kernels
+// lack support. If the running kernel does not support Tsync and it is
+// requested in a filter, Libseccomp will not enable TSync support and will
+// proceed as normal.
+// This function is unavailable before v2.2 of libseccomp and will return an
+// error.
+func (f *ScmpFilter) SetTsync(enable bool) error {
+ var toSet C.uint32_t = 0x0
+
+ if enable {
+ toSet = 0x1
+ }
+
+ return f.setFilterAttr(filterAttrTsync, toSet)
+}
+
// SetSyscallPriority sets a syscall's priority.
// This provides a hint to the filter generator in libseccomp about the
// importance of this syscall. High-priority syscalls are placed
diff --git a/vendor/github.com/seccomp/libseccomp-golang/seccomp_internal.go b/vendor/github.com/seccomp/libseccomp-golang/seccomp_internal.go
index dbac0cc30..b0caac91b 100644
--- a/vendor/github.com/seccomp/libseccomp-golang/seccomp_internal.go
+++ b/vendor/github.com/seccomp/libseccomp-golang/seccomp_internal.go
@@ -20,15 +20,43 @@ import (
#include <seccomp.h>
#if SCMP_VER_MAJOR < 2
-#error Minimum supported version of Libseccomp is v2.2.0
-#elif SCMP_VER_MAJOR == 2 && SCMP_VER_MINOR < 2
-#error Minimum supported version of Libseccomp is v2.2.0
+#error Minimum supported version of Libseccomp is v2.1.0
+#elif SCMP_VER_MAJOR == 2 && SCMP_VER_MINOR < 1
+#error Minimum supported version of Libseccomp is v2.1.0
#endif
#define ARCH_BAD ~0
const uint32_t C_ARCH_BAD = ARCH_BAD;
+#ifndef SCMP_ARCH_AARCH64
+#define SCMP_ARCH_AARCH64 ARCH_BAD
+#endif
+
+#ifndef SCMP_ARCH_MIPS
+#define SCMP_ARCH_MIPS ARCH_BAD
+#endif
+
+#ifndef SCMP_ARCH_MIPS64
+#define SCMP_ARCH_MIPS64 ARCH_BAD
+#endif
+
+#ifndef SCMP_ARCH_MIPS64N32
+#define SCMP_ARCH_MIPS64N32 ARCH_BAD
+#endif
+
+#ifndef SCMP_ARCH_MIPSEL
+#define SCMP_ARCH_MIPSEL ARCH_BAD
+#endif
+
+#ifndef SCMP_ARCH_MIPSEL64
+#define SCMP_ARCH_MIPSEL64 ARCH_BAD
+#endif
+
+#ifndef SCMP_ARCH_MIPSEL64N32
+#define SCMP_ARCH_MIPSEL64N32 ARCH_BAD
+#endif
+
#ifndef SCMP_ARCH_PPC
#define SCMP_ARCH_PPC ARCH_BAD
#endif
@@ -73,6 +101,12 @@ const uint32_t C_ACT_ERRNO = SCMP_ACT_ERRNO(0);
const uint32_t C_ACT_TRACE = SCMP_ACT_TRACE(0);
const uint32_t C_ACT_ALLOW = SCMP_ACT_ALLOW;
+// If TSync is not supported, make sure it doesn't map to a supported filter attribute
+// Don't worry about major version < 2, the minimum version checks should catch that case
+#if SCMP_VER_MAJOR == 2 && SCMP_VER_MINOR < 2
+#define SCMP_FLTATR_CTL_TSYNC _SCMP_CMP_MIN
+#endif
+
const uint32_t C_ATTRIBUTE_DEFAULT = (uint32_t)SCMP_FLTATR_ACT_DEFAULT;
const uint32_t C_ATTRIBUTE_BADARCH = (uint32_t)SCMP_FLTATR_ACT_BADARCH;
const uint32_t C_ATTRIBUTE_NNP = (uint32_t)SCMP_FLTATR_CTL_NNP;
@@ -90,61 +124,25 @@ const int C_VERSION_MAJOR = SCMP_VER_MAJOR;
const int C_VERSION_MINOR = SCMP_VER_MINOR;
const int C_VERSION_MICRO = SCMP_VER_MICRO;
-#if SCMP_VER_MAJOR == 2 && SCMP_VER_MINOR >= 3
-unsigned int get_major_version()
-{
- return seccomp_version()->major;
-}
-
-unsigned int get_minor_version()
-{
- return seccomp_version()->minor;
-}
-
-unsigned int get_micro_version()
-{
- return seccomp_version()->micro;
-}
-#else
-unsigned int get_major_version()
-{
- return (unsigned int)C_VERSION_MAJOR;
-}
-
-unsigned int get_minor_version()
-{
- return (unsigned int)C_VERSION_MINOR;
-}
-
-unsigned int get_micro_version()
-{
- return (unsigned int)C_VERSION_MICRO;
-}
-#endif
-
typedef struct scmp_arg_cmp* scmp_cast_t;
-void* make_arg_cmp_array(unsigned int length)
+// Wrapper to create an scmp_arg_cmp struct
+void*
+make_struct_arg_cmp(
+ unsigned int arg,
+ int compare,
+ uint64_t a,
+ uint64_t b
+ )
{
- return calloc(length, sizeof(struct scmp_arg_cmp));
-}
+ struct scmp_arg_cmp *s = malloc(sizeof(struct scmp_arg_cmp));
-// Wrapper to add an scmp_arg_cmp struct to an existing arg_cmp array
-void add_struct_arg_cmp(
- struct scmp_arg_cmp* arr,
- unsigned int pos,
- unsigned int arg,
- int compare,
- uint64_t a,
- uint64_t b
- )
-{
- arr[pos].arg = arg;
- arr[pos].op = compare;
- arr[pos].datum_a = a;
- arr[pos].datum_b = b;
+ s->arg = arg;
+ s->op = compare;
+ s->datum_a = a;
+ s->datum_b = b;
- return;
+ return s;
}
*/
import "C"
@@ -179,23 +177,23 @@ var (
// Error thrown on bad filter context
errBadFilter = fmt.Errorf("filter is invalid or uninitialized")
// Constants representing library major, minor, and micro versions
- verMajor = uint(C.get_major_version())
- verMinor = uint(C.get_minor_version())
- verMicro = uint(C.get_micro_version())
+ verMajor = int(C.C_VERSION_MAJOR)
+ verMinor = int(C.C_VERSION_MINOR)
+ verMicro = int(C.C_VERSION_MICRO)
)
// Nonexported functions
// Check if library version is greater than or equal to the given one
-func checkVersionAbove(major, minor, micro uint) bool {
+func checkVersionAbove(major, minor, micro int) bool {
return (verMajor > major) ||
(verMajor == major && verMinor > minor) ||
(verMajor == major && verMinor == minor && verMicro >= micro)
}
-// Ensure that the library is supported, i.e. >= 2.2.0.
+// Ensure that the library is supported, i.e. >= 2.1.0.
func ensureSupportedVersion() error {
- if !checkVersionAbove(2, 2, 0) {
+ if !checkVersionAbove(2, 1, 0) {
return VersionError{}
}
return nil
@@ -217,6 +215,13 @@ func (f *ScmpFilter) getFilterAttr(attr scmpFilterAttr) (C.uint32_t, error) {
return 0x0, errBadFilter
}
+ if !checkVersionAbove(2, 2, 0) && attr == filterAttrTsync {
+ return 0x0, VersionError{
+ message: "thread synchronization attribute is not supported",
+ minimum: "2.2.0",
+ }
+ }
+
var attribute C.uint32_t
retCode := C.seccomp_attr_get(f.filterCtx, attr.toNative(), &attribute)
@@ -236,6 +241,13 @@ func (f *ScmpFilter) setFilterAttr(attr scmpFilterAttr, value C.uint32_t) error
return errBadFilter
}
+ if !checkVersionAbove(2, 2, 0) && attr == filterAttrTsync {
+ return VersionError{
+ message: "thread synchronization attribute is not supported",
+ minimum: "2.2.0",
+ }
+ }
+
retCode := C.seccomp_attr_set(f.filterCtx, attr.toNative(), value)
if retCode != 0 {
return syscall.Errno(-1 * retCode)
@@ -247,9 +259,12 @@ func (f *ScmpFilter) setFilterAttr(attr scmpFilterAttr, value C.uint32_t) error
// DOES NOT LOCK OR CHECK VALIDITY
// Assumes caller has already done this
// Wrapper for seccomp_rule_add_... functions
-func (f *ScmpFilter) addRuleWrapper(call ScmpSyscall, action ScmpAction, exact bool, length C.uint, cond C.scmp_cast_t) error {
- if length != 0 && cond == nil {
- return fmt.Errorf("null conditions list, but length is nonzero")
+func (f *ScmpFilter) addRuleWrapper(call ScmpSyscall, action ScmpAction, exact bool, cond C.scmp_cast_t) error {
+ var length C.uint
+ if cond != nil {
+ length = 1
+ } else {
+ length = 0
}
var retCode C.int
@@ -260,11 +275,9 @@ func (f *ScmpFilter) addRuleWrapper(call ScmpSyscall, action ScmpAction, exact b
}
if syscall.Errno(-1*retCode) == syscall.EFAULT {
- return fmt.Errorf("unrecognized syscall %#x", int32(call))
+ return fmt.Errorf("unrecognized syscall")
} else if syscall.Errno(-1*retCode) == syscall.EPERM {
return fmt.Errorf("requested action matches default action of filter")
- } else if syscall.Errno(-1*retCode) == syscall.EINVAL {
- return fmt.Errorf("two checks on same syscall argument")
} else if retCode != 0 {
return syscall.Errno(-1 * retCode)
}
@@ -282,7 +295,7 @@ func (f *ScmpFilter) addRuleGeneric(call ScmpSyscall, action ScmpAction, exact b
}
if len(conds) == 0 {
- if err := f.addRuleWrapper(call, action, exact, 0, nil); err != nil {
+ if err := f.addRuleWrapper(call, action, exact, nil); err != nil {
return err
}
} else {
@@ -294,20 +307,13 @@ func (f *ScmpFilter) addRuleGeneric(call ScmpSyscall, action ScmpAction, exact b
}
}
- argsArr := C.make_arg_cmp_array(C.uint(len(conds)))
- if argsArr == nil {
- return fmt.Errorf("error allocating memory for conditions")
- }
- defer C.free(argsArr)
-
- for i, cond := range conds {
- C.add_struct_arg_cmp(C.scmp_cast_t(argsArr), C.uint(i),
- C.uint(cond.Argument), cond.Op.toNative(),
- C.uint64_t(cond.Operand1), C.uint64_t(cond.Operand2))
- }
+ for _, cond := range conds {
+ cmpStruct := C.make_struct_arg_cmp(C.uint(cond.Argument), cond.Op.toNative(), C.uint64_t(cond.Operand1), C.uint64_t(cond.Operand2))
+ defer C.free(cmpStruct)
- if err := f.addRuleWrapper(call, action, exact, C.uint(len(conds)), C.scmp_cast_t(argsArr)); err != nil {
- return err
+ if err := f.addRuleWrapper(call, action, exact, C.scmp_cast_t(cmpStruct)); err != nil {
+ return err
+ }
}
}
@@ -319,11 +325,11 @@ func (f *ScmpFilter) addRuleGeneric(call ScmpSyscall, action ScmpAction, exact b
// Helper - Sanitize Arch token input
func sanitizeArch(in ScmpArch) error {
if in < archStart || in > archEnd {
- return fmt.Errorf("unrecognized architecture %#x", uint(in))
+ return fmt.Errorf("unrecognized architecture")
}
if in.toNative() == C.C_ARCH_BAD {
- return fmt.Errorf("architecture %v is not supported on this version of the library", in)
+ return fmt.Errorf("architecture is not supported on this version of the library")
}
return nil
@@ -332,7 +338,7 @@ func sanitizeArch(in ScmpArch) error {
func sanitizeAction(in ScmpAction) error {
inTmp := in & 0x0000FFFF
if inTmp < actionStart || inTmp > actionEnd {
- return fmt.Errorf("unrecognized action %#x", uint(inTmp))
+ return fmt.Errorf("unrecognized action")
}
if inTmp != ActTrace && inTmp != ActErrno && (in&0xFFFF0000) != 0 {
@@ -344,7 +350,7 @@ func sanitizeAction(in ScmpAction) error {
func sanitizeCompareOp(in ScmpCompareOp) error {
if in < compareOpStart || in > compareOpEnd {
- return fmt.Errorf("unrecognized comparison operator %#x", uint(in))
+ return fmt.Errorf("unrecognized comparison operator")
}
return nil
@@ -387,7 +393,7 @@ func archFromNative(a C.uint32_t) (ScmpArch, error) {
case C.C_ARCH_S390X:
return ArchS390X, nil
default:
- return 0x0, fmt.Errorf("unrecognized architecture %#x", uint32(a))
+ return 0x0, fmt.Errorf("unrecognized architecture")
}
}
@@ -469,7 +475,7 @@ func actionFromNative(a C.uint32_t) (ScmpAction, error) {
case C.C_ACT_ALLOW:
return ActAllow, nil
default:
- return 0x0, fmt.Errorf("unrecognized action %#x", uint32(a))
+ return 0x0, fmt.Errorf("unrecognized action")
}
}
diff --git a/vendor/github.com/spf13/pflag/README.md b/vendor/github.com/spf13/pflag/README.md
index eefb46dec..b052414d1 100644
--- a/vendor/github.com/spf13/pflag/README.md
+++ b/vendor/github.com/spf13/pflag/README.md
@@ -246,6 +246,25 @@ It is possible to mark a flag as hidden, meaning it will still function as norma
flags.MarkHidden("secretFlag")
```
+## Disable sorting of flags
+`pflag` allows you to disable sorting of flags for help and usage message.
+
+**Example**:
+```go
+flags.BoolP("verbose", "v", false, "verbose output")
+flags.String("coolflag", "yeaah", "it's really cool flag")
+flags.Int("usefulflag", 777, "sometimes it's very useful")
+flags.SortFlags = false
+flags.PrintDefaults()
+```
+**Output**:
+```
+ -v, --verbose verbose output
+ --coolflag string it's really cool flag (default "yeaah")
+ --usefulflag int sometimes it's very useful (default 777)
+```
+
+
## Supporting Go flags when using pflag
In order to support flags defined using Go's `flag` package, they must be added to the `pflag` flagset. This is usually necessary
to support flags defined by third-party dependencies (e.g. `golang/glog`).
@@ -270,8 +289,8 @@ func main() {
You can see the full reference documentation of the pflag package
[at godoc.org][3], or through go's standard documentation system by
running `godoc -http=:6060` and browsing to
-[http://localhost:6060/pkg/github.com/ogier/pflag][2] after
+[http://localhost:6060/pkg/github.com/spf13/pflag][2] after
installation.
-[2]: http://localhost:6060/pkg/github.com/ogier/pflag
-[3]: http://godoc.org/github.com/ogier/pflag
+[2]: http://localhost:6060/pkg/github.com/spf13/pflag
+[3]: http://godoc.org/github.com/spf13/pflag
diff --git a/vendor/github.com/spf13/pflag/bytes.go b/vendor/github.com/spf13/pflag/bytes.go
new file mode 100644
index 000000000..67d530457
--- /dev/null
+++ b/vendor/github.com/spf13/pflag/bytes.go
@@ -0,0 +1,209 @@
+package pflag
+
+import (
+ "encoding/base64"
+ "encoding/hex"
+ "fmt"
+ "strings"
+)
+
+// BytesHex adapts []byte for use as a flag. Value of flag is HEX encoded
+type bytesHexValue []byte
+
+// String implements pflag.Value.String.
+func (bytesHex bytesHexValue) String() string {
+ return fmt.Sprintf("%X", []byte(bytesHex))
+}
+
+// Set implements pflag.Value.Set.
+func (bytesHex *bytesHexValue) Set(value string) error {
+ bin, err := hex.DecodeString(strings.TrimSpace(value))
+
+ if err != nil {
+ return err
+ }
+
+ *bytesHex = bin
+
+ return nil
+}
+
+// Type implements pflag.Value.Type.
+func (*bytesHexValue) Type() string {
+ return "bytesHex"
+}
+
+func newBytesHexValue(val []byte, p *[]byte) *bytesHexValue {
+ *p = val
+ return (*bytesHexValue)(p)
+}
+
+func bytesHexConv(sval string) (interface{}, error) {
+
+ bin, err := hex.DecodeString(sval)
+
+ if err == nil {
+ return bin, nil
+ }
+
+ return nil, fmt.Errorf("invalid string being converted to Bytes: %s %s", sval, err)
+}
+
+// GetBytesHex return the []byte value of a flag with the given name
+func (f *FlagSet) GetBytesHex(name string) ([]byte, error) {
+ val, err := f.getFlagType(name, "bytesHex", bytesHexConv)
+
+ if err != nil {
+ return []byte{}, err
+ }
+
+ return val.([]byte), nil
+}
+
+// BytesHexVar defines an []byte flag with specified name, default value, and usage string.
+// The argument p points to an []byte variable in which to store the value of the flag.
+func (f *FlagSet) BytesHexVar(p *[]byte, name string, value []byte, usage string) {
+ f.VarP(newBytesHexValue(value, p), name, "", usage)
+}
+
+// BytesHexVarP is like BytesHexVar, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) BytesHexVarP(p *[]byte, name, shorthand string, value []byte, usage string) {
+ f.VarP(newBytesHexValue(value, p), name, shorthand, usage)
+}
+
+// BytesHexVar defines an []byte flag with specified name, default value, and usage string.
+// The argument p points to an []byte variable in which to store the value of the flag.
+func BytesHexVar(p *[]byte, name string, value []byte, usage string) {
+ CommandLine.VarP(newBytesHexValue(value, p), name, "", usage)
+}
+
+// BytesHexVarP is like BytesHexVar, but accepts a shorthand letter that can be used after a single dash.
+func BytesHexVarP(p *[]byte, name, shorthand string, value []byte, usage string) {
+ CommandLine.VarP(newBytesHexValue(value, p), name, shorthand, usage)
+}
+
+// BytesHex defines an []byte flag with specified name, default value, and usage string.
+// The return value is the address of an []byte variable that stores the value of the flag.
+func (f *FlagSet) BytesHex(name string, value []byte, usage string) *[]byte {
+ p := new([]byte)
+ f.BytesHexVarP(p, name, "", value, usage)
+ return p
+}
+
+// BytesHexP is like BytesHex, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) BytesHexP(name, shorthand string, value []byte, usage string) *[]byte {
+ p := new([]byte)
+ f.BytesHexVarP(p, name, shorthand, value, usage)
+ return p
+}
+
+// BytesHex defines an []byte flag with specified name, default value, and usage string.
+// The return value is the address of an []byte variable that stores the value of the flag.
+func BytesHex(name string, value []byte, usage string) *[]byte {
+ return CommandLine.BytesHexP(name, "", value, usage)
+}
+
+// BytesHexP is like BytesHex, but accepts a shorthand letter that can be used after a single dash.
+func BytesHexP(name, shorthand string, value []byte, usage string) *[]byte {
+ return CommandLine.BytesHexP(name, shorthand, value, usage)
+}
+
+// BytesBase64 adapts []byte for use as a flag. Value of flag is Base64 encoded
+type bytesBase64Value []byte
+
+// String implements pflag.Value.String.
+func (bytesBase64 bytesBase64Value) String() string {
+ return base64.StdEncoding.EncodeToString([]byte(bytesBase64))
+}
+
+// Set implements pflag.Value.Set.
+func (bytesBase64 *bytesBase64Value) Set(value string) error {
+ bin, err := base64.StdEncoding.DecodeString(strings.TrimSpace(value))
+
+ if err != nil {
+ return err
+ }
+
+ *bytesBase64 = bin
+
+ return nil
+}
+
+// Type implements pflag.Value.Type.
+func (*bytesBase64Value) Type() string {
+ return "bytesBase64"
+}
+
+func newBytesBase64Value(val []byte, p *[]byte) *bytesBase64Value {
+ *p = val
+ return (*bytesBase64Value)(p)
+}
+
+func bytesBase64ValueConv(sval string) (interface{}, error) {
+
+ bin, err := base64.StdEncoding.DecodeString(sval)
+ if err == nil {
+ return bin, nil
+ }
+
+ return nil, fmt.Errorf("invalid string being converted to Bytes: %s %s", sval, err)
+}
+
+// GetBytesBase64 return the []byte value of a flag with the given name
+func (f *FlagSet) GetBytesBase64(name string) ([]byte, error) {
+ val, err := f.getFlagType(name, "bytesBase64", bytesBase64ValueConv)
+
+ if err != nil {
+ return []byte{}, err
+ }
+
+ return val.([]byte), nil
+}
+
+// BytesBase64Var defines an []byte flag with specified name, default value, and usage string.
+// The argument p points to an []byte variable in which to store the value of the flag.
+func (f *FlagSet) BytesBase64Var(p *[]byte, name string, value []byte, usage string) {
+ f.VarP(newBytesBase64Value(value, p), name, "", usage)
+}
+
+// BytesBase64VarP is like BytesBase64Var, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) BytesBase64VarP(p *[]byte, name, shorthand string, value []byte, usage string) {
+ f.VarP(newBytesBase64Value(value, p), name, shorthand, usage)
+}
+
+// BytesBase64Var defines an []byte flag with specified name, default value, and usage string.
+// The argument p points to an []byte variable in which to store the value of the flag.
+func BytesBase64Var(p *[]byte, name string, value []byte, usage string) {
+ CommandLine.VarP(newBytesBase64Value(value, p), name, "", usage)
+}
+
+// BytesBase64VarP is like BytesBase64Var, but accepts a shorthand letter that can be used after a single dash.
+func BytesBase64VarP(p *[]byte, name, shorthand string, value []byte, usage string) {
+ CommandLine.VarP(newBytesBase64Value(value, p), name, shorthand, usage)
+}
+
+// BytesBase64 defines an []byte flag with specified name, default value, and usage string.
+// The return value is the address of an []byte variable that stores the value of the flag.
+func (f *FlagSet) BytesBase64(name string, value []byte, usage string) *[]byte {
+ p := new([]byte)
+ f.BytesBase64VarP(p, name, "", value, usage)
+ return p
+}
+
+// BytesBase64P is like BytesBase64, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) BytesBase64P(name, shorthand string, value []byte, usage string) *[]byte {
+ p := new([]byte)
+ f.BytesBase64VarP(p, name, shorthand, value, usage)
+ return p
+}
+
+// BytesBase64 defines an []byte flag with specified name, default value, and usage string.
+// The return value is the address of an []byte variable that stores the value of the flag.
+func BytesBase64(name string, value []byte, usage string) *[]byte {
+ return CommandLine.BytesBase64P(name, "", value, usage)
+}
+
+// BytesBase64P is like BytesBase64, but accepts a shorthand letter that can be used after a single dash.
+func BytesBase64P(name, shorthand string, value []byte, usage string) *[]byte {
+ return CommandLine.BytesBase64P(name, shorthand, value, usage)
+}
diff --git a/vendor/github.com/spf13/pflag/count.go b/vendor/github.com/spf13/pflag/count.go
index d22be41f2..aa126e44d 100644
--- a/vendor/github.com/spf13/pflag/count.go
+++ b/vendor/github.com/spf13/pflag/count.go
@@ -11,13 +11,13 @@ func newCountValue(val int, p *int) *countValue {
}
func (i *countValue) Set(s string) error {
- v, err := strconv.ParseInt(s, 0, 64)
- // -1 means that no specific value was passed, so increment
- if v == -1 {
+ // "+1" means that no specific value was passed, so increment
+ if s == "+1" {
*i = countValue(*i + 1)
- } else {
- *i = countValue(v)
+ return nil
}
+ v, err := strconv.ParseInt(s, 0, 0)
+ *i = countValue(v)
return err
}
@@ -54,7 +54,7 @@ func (f *FlagSet) CountVar(p *int, name string, usage string) {
// CountVarP is like CountVar only take a shorthand for the flag name.
func (f *FlagSet) CountVarP(p *int, name, shorthand string, usage string) {
flag := f.VarPF(newCountValue(0, p), name, shorthand, usage)
- flag.NoOptDefVal = "-1"
+ flag.NoOptDefVal = "+1"
}
// CountVar like CountVar only the flag is placed on the CommandLine instead of a given flag set
@@ -83,7 +83,9 @@ func (f *FlagSet) CountP(name, shorthand string, usage string) *int {
return p
}
-// Count like Count only the flag is placed on the CommandLine isntead of a given flag set
+// Count defines a count flag with specified name, default value, and usage string.
+// The return value is the address of an int variable that stores the value of the flag.
+// A count flag will add 1 to its value evey time it is found on the command line
func Count(name string, usage string) *int {
return CommandLine.CountP(name, "", usage)
}
diff --git a/vendor/github.com/spf13/pflag/duration_slice.go b/vendor/github.com/spf13/pflag/duration_slice.go
new file mode 100644
index 000000000..52c6b6dc1
--- /dev/null
+++ b/vendor/github.com/spf13/pflag/duration_slice.go
@@ -0,0 +1,128 @@
+package pflag
+
+import (
+ "fmt"
+ "strings"
+ "time"
+)
+
+// -- durationSlice Value
+type durationSliceValue struct {
+ value *[]time.Duration
+ changed bool
+}
+
+func newDurationSliceValue(val []time.Duration, p *[]time.Duration) *durationSliceValue {
+ dsv := new(durationSliceValue)
+ dsv.value = p
+ *dsv.value = val
+ return dsv
+}
+
+func (s *durationSliceValue) Set(val string) error {
+ ss := strings.Split(val, ",")
+ out := make([]time.Duration, len(ss))
+ for i, d := range ss {
+ var err error
+ out[i], err = time.ParseDuration(d)
+ if err != nil {
+ return err
+ }
+
+ }
+ if !s.changed {
+ *s.value = out
+ } else {
+ *s.value = append(*s.value, out...)
+ }
+ s.changed = true
+ return nil
+}
+
+func (s *durationSliceValue) Type() string {
+ return "durationSlice"
+}
+
+func (s *durationSliceValue) String() string {
+ out := make([]string, len(*s.value))
+ for i, d := range *s.value {
+ out[i] = fmt.Sprintf("%s", d)
+ }
+ return "[" + strings.Join(out, ",") + "]"
+}
+
+func durationSliceConv(val string) (interface{}, error) {
+ val = strings.Trim(val, "[]")
+ // Empty string would cause a slice with one (empty) entry
+ if len(val) == 0 {
+ return []time.Duration{}, nil
+ }
+ ss := strings.Split(val, ",")
+ out := make([]time.Duration, len(ss))
+ for i, d := range ss {
+ var err error
+ out[i], err = time.ParseDuration(d)
+ if err != nil {
+ return nil, err
+ }
+
+ }
+ return out, nil
+}
+
+// GetDurationSlice returns the []time.Duration value of a flag with the given name
+func (f *FlagSet) GetDurationSlice(name string) ([]time.Duration, error) {
+ val, err := f.getFlagType(name, "durationSlice", durationSliceConv)
+ if err != nil {
+ return []time.Duration{}, err
+ }
+ return val.([]time.Duration), nil
+}
+
+// DurationSliceVar defines a durationSlice flag with specified name, default value, and usage string.
+// The argument p points to a []time.Duration variable in which to store the value of the flag.
+func (f *FlagSet) DurationSliceVar(p *[]time.Duration, name string, value []time.Duration, usage string) {
+ f.VarP(newDurationSliceValue(value, p), name, "", usage)
+}
+
+// DurationSliceVarP is like DurationSliceVar, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) DurationSliceVarP(p *[]time.Duration, name, shorthand string, value []time.Duration, usage string) {
+ f.VarP(newDurationSliceValue(value, p), name, shorthand, usage)
+}
+
+// DurationSliceVar defines a duration[] flag with specified name, default value, and usage string.
+// The argument p points to a duration[] variable in which to store the value of the flag.
+func DurationSliceVar(p *[]time.Duration, name string, value []time.Duration, usage string) {
+ CommandLine.VarP(newDurationSliceValue(value, p), name, "", usage)
+}
+
+// DurationSliceVarP is like DurationSliceVar, but accepts a shorthand letter that can be used after a single dash.
+func DurationSliceVarP(p *[]time.Duration, name, shorthand string, value []time.Duration, usage string) {
+ CommandLine.VarP(newDurationSliceValue(value, p), name, shorthand, usage)
+}
+
+// DurationSlice defines a []time.Duration flag with specified name, default value, and usage string.
+// The return value is the address of a []time.Duration variable that stores the value of the flag.
+func (f *FlagSet) DurationSlice(name string, value []time.Duration, usage string) *[]time.Duration {
+ p := []time.Duration{}
+ f.DurationSliceVarP(&p, name, "", value, usage)
+ return &p
+}
+
+// DurationSliceP is like DurationSlice, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) DurationSliceP(name, shorthand string, value []time.Duration, usage string) *[]time.Duration {
+ p := []time.Duration{}
+ f.DurationSliceVarP(&p, name, shorthand, value, usage)
+ return &p
+}
+
+// DurationSlice defines a []time.Duration flag with specified name, default value, and usage string.
+// The return value is the address of a []time.Duration variable that stores the value of the flag.
+func DurationSlice(name string, value []time.Duration, usage string) *[]time.Duration {
+ return CommandLine.DurationSliceP(name, "", value, usage)
+}
+
+// DurationSliceP is like DurationSlice, but accepts a shorthand letter that can be used after a single dash.
+func DurationSliceP(name, shorthand string, value []time.Duration, usage string) *[]time.Duration {
+ return CommandLine.DurationSliceP(name, shorthand, value, usage)
+}
diff --git a/vendor/github.com/spf13/pflag/flag.go b/vendor/github.com/spf13/pflag/flag.go
index 746af6327..9beeda8ec 100644
--- a/vendor/github.com/spf13/pflag/flag.go
+++ b/vendor/github.com/spf13/pflag/flag.go
@@ -16,9 +16,9 @@ pflag is a drop-in replacement of Go's native flag package. If you import
pflag under the name "flag" then all code should continue to function
with no changes.
- import flag "github.com/ogier/pflag"
+ import flag "github.com/spf13/pflag"
- There is one exception to this: if you directly instantiate the Flag struct
+There is one exception to this: if you directly instantiate the Flag struct
there is one more field "Shorthand" that you will need to set.
Most code never instantiates this struct directly, and instead uses
functions such as String(), BoolVar(), and Var(), and is therefore
@@ -101,6 +101,7 @@ package pflag
import (
"bytes"
"errors"
+ goflag "flag"
"fmt"
"io"
"os"
@@ -123,6 +124,12 @@ const (
PanicOnError
)
+// ParseErrorsWhitelist defines the parsing errors that can be ignored
+type ParseErrorsWhitelist struct {
+ // UnknownFlags will ignore unknown flags errors and continue parsing rest of the flags
+ UnknownFlags bool
+}
+
// NormalizedName is a flag name that has been normalized according to rules
// for the FlagSet (e.g. making '-' and '_' equivalent).
type NormalizedName string
@@ -134,18 +141,30 @@ type FlagSet struct {
// a custom error handler.
Usage func()
+ // SortFlags is used to indicate, if user wants to have sorted flags in
+ // help/usage messages.
+ SortFlags bool
+
+ // ParseErrorsWhitelist is used to configure a whitelist of errors
+ ParseErrorsWhitelist ParseErrorsWhitelist
+
name string
parsed bool
actual map[NormalizedName]*Flag
+ orderedActual []*Flag
+ sortedActual []*Flag
formal map[NormalizedName]*Flag
+ orderedFormal []*Flag
+ sortedFormal []*Flag
shorthands map[byte]*Flag
args []string // arguments after flags
argsLenAtDash int // len(args) when a '--' was located when parsing, or -1 if no --
- exitOnError bool // does the program exit if there's an error?
errorHandling ErrorHandling
output io.Writer // nil means stderr; use out() accessor
interspersed bool // allow interspersed option/non-option args
normalizeNameFunc func(f *FlagSet, name string) NormalizedName
+
+ addedGoFlagSets []*goflag.FlagSet
}
// A Flag represents the state of a flag.
@@ -156,7 +175,7 @@ type Flag struct {
Value Value // value as set
DefValue string // default value (as text); for usage message
Changed bool // If the user set the value (or if left to default)
- NoOptDefVal string //default value (as text); if the flag is on the command line without any options
+ NoOptDefVal string // default value (as text); if the flag is on the command line without any options
Deprecated string // If this flag is deprecated, this string is the new or now thing to use
Hidden bool // used by cobra.Command to allow flags to be hidden from help/usage text
ShorthandDeprecated string // If the shorthand of this flag is deprecated, this string is the new or now thing to use
@@ -194,11 +213,19 @@ func sortFlags(flags map[NormalizedName]*Flag) []*Flag {
// "--getUrl" which may also be translated to "geturl" and everything will work.
func (f *FlagSet) SetNormalizeFunc(n func(f *FlagSet, name string) NormalizedName) {
f.normalizeNameFunc = n
- for k, v := range f.formal {
- delete(f.formal, k)
- nname := f.normalizeFlagName(string(k))
- f.formal[nname] = v
- v.Name = string(nname)
+ f.sortedFormal = f.sortedFormal[:0]
+ for fname, flag := range f.formal {
+ nname := f.normalizeFlagName(flag.Name)
+ if fname == nname {
+ continue
+ }
+ flag.Name = string(nname)
+ delete(f.formal, fname)
+ f.formal[nname] = flag
+ if _, set := f.actual[fname]; set {
+ delete(f.actual, fname)
+ f.actual[nname] = flag
+ }
}
}
@@ -229,46 +256,78 @@ func (f *FlagSet) SetOutput(output io.Writer) {
f.output = output
}
-// VisitAll visits the flags in lexicographical order, calling fn for each.
+// VisitAll visits the flags in lexicographical order or
+// in primordial order if f.SortFlags is false, calling fn for each.
// It visits all flags, even those not set.
func (f *FlagSet) VisitAll(fn func(*Flag)) {
- for _, flag := range sortFlags(f.formal) {
+ if len(f.formal) == 0 {
+ return
+ }
+
+ var flags []*Flag
+ if f.SortFlags {
+ if len(f.formal) != len(f.sortedFormal) {
+ f.sortedFormal = sortFlags(f.formal)
+ }
+ flags = f.sortedFormal
+ } else {
+ flags = f.orderedFormal
+ }
+
+ for _, flag := range flags {
fn(flag)
}
}
-// HasFlags returns a bool to indicate if the FlagSet has any flags definied.
+// HasFlags returns a bool to indicate if the FlagSet has any flags defined.
func (f *FlagSet) HasFlags() bool {
return len(f.formal) > 0
}
// HasAvailableFlags returns a bool to indicate if the FlagSet has any flags
-// definied that are not hidden or deprecated.
+// that are not hidden.
func (f *FlagSet) HasAvailableFlags() bool {
for _, flag := range f.formal {
- if !flag.Hidden && len(flag.Deprecated) == 0 {
+ if !flag.Hidden {
return true
}
}
return false
}
-// VisitAll visits the command-line flags in lexicographical order, calling
-// fn for each. It visits all flags, even those not set.
+// VisitAll visits the command-line flags in lexicographical order or
+// in primordial order if f.SortFlags is false, calling fn for each.
+// It visits all flags, even those not set.
func VisitAll(fn func(*Flag)) {
CommandLine.VisitAll(fn)
}
-// Visit visits the flags in lexicographical order, calling fn for each.
+// Visit visits the flags in lexicographical order or
+// in primordial order if f.SortFlags is false, calling fn for each.
// It visits only those flags that have been set.
func (f *FlagSet) Visit(fn func(*Flag)) {
- for _, flag := range sortFlags(f.actual) {
+ if len(f.actual) == 0 {
+ return
+ }
+
+ var flags []*Flag
+ if f.SortFlags {
+ if len(f.actual) != len(f.sortedActual) {
+ f.sortedActual = sortFlags(f.actual)
+ }
+ flags = f.sortedActual
+ } else {
+ flags = f.orderedActual
+ }
+
+ for _, flag := range flags {
fn(flag)
}
}
-// Visit visits the command-line flags in lexicographical order, calling fn
-// for each. It visits only those flags that have been set.
+// Visit visits the command-line flags in lexicographical order or
+// in primordial order if f.SortFlags is false, calling fn for each.
+// It visits only those flags that have been set.
func Visit(fn func(*Flag)) {
CommandLine.Visit(fn)
}
@@ -278,6 +337,22 @@ func (f *FlagSet) Lookup(name string) *Flag {
return f.lookup(f.normalizeFlagName(name))
}
+// ShorthandLookup returns the Flag structure of the short handed flag,
+// returning nil if none exists.
+// It panics, if len(name) > 1.
+func (f *FlagSet) ShorthandLookup(name string) *Flag {
+ if name == "" {
+ return nil
+ }
+ if len(name) > 1 {
+ msg := fmt.Sprintf("can not look up shorthand which is more than one ASCII character: %q", name)
+ fmt.Fprintf(f.out(), msg)
+ panic(msg)
+ }
+ c := name[0]
+ return f.shorthands[c]
+}
+
// lookup returns the Flag structure of the named flag, returning nil if none exists.
func (f *FlagSet) lookup(name NormalizedName) *Flag {
return f.formal[name]
@@ -319,10 +394,11 @@ func (f *FlagSet) MarkDeprecated(name string, usageMessage string) error {
if flag == nil {
return fmt.Errorf("flag %q does not exist", name)
}
- if len(usageMessage) == 0 {
+ if usageMessage == "" {
return fmt.Errorf("deprecated message for flag %q must be set", name)
}
flag.Deprecated = usageMessage
+ flag.Hidden = true
return nil
}
@@ -334,7 +410,7 @@ func (f *FlagSet) MarkShorthandDeprecated(name string, usageMessage string) erro
if flag == nil {
return fmt.Errorf("flag %q does not exist", name)
}
- if len(usageMessage) == 0 {
+ if usageMessage == "" {
return fmt.Errorf("deprecated message for flag %q must be set", name)
}
flag.ShorthandDeprecated = usageMessage
@@ -358,6 +434,12 @@ func Lookup(name string) *Flag {
return CommandLine.Lookup(name)
}
+// ShorthandLookup returns the Flag structure of the short handed flag,
+// returning nil if none exists.
+func ShorthandLookup(name string) *Flag {
+ return CommandLine.ShorthandLookup(name)
+}
+
// Set sets the value of the named flag.
func (f *FlagSet) Set(name, value string) error {
normalName := f.normalizeFlagName(name)
@@ -365,17 +447,30 @@ func (f *FlagSet) Set(name, value string) error {
if !ok {
return fmt.Errorf("no such flag -%v", name)
}
+
err := flag.Value.Set(value)
if err != nil {
- return err
+ var flagName string
+ if flag.Shorthand != "" && flag.ShorthandDeprecated == "" {
+ flagName = fmt.Sprintf("-%s, --%s", flag.Shorthand, flag.Name)
+ } else {
+ flagName = fmt.Sprintf("--%s", flag.Name)
+ }
+ return fmt.Errorf("invalid argument %q for %q flag: %v", value, flagName, err)
}
- if f.actual == nil {
- f.actual = make(map[NormalizedName]*Flag)
+
+ if !flag.Changed {
+ if f.actual == nil {
+ f.actual = make(map[NormalizedName]*Flag)
+ }
+ f.actual[normalName] = flag
+ f.orderedActual = append(f.orderedActual, flag)
+
+ flag.Changed = true
}
- f.actual[normalName] = flag
- flag.Changed = true
- if len(flag.Deprecated) > 0 {
- fmt.Fprintf(os.Stderr, "Flag --%s has been deprecated, %s\n", flag.Name, flag.Deprecated)
+
+ if flag.Deprecated != "" {
+ fmt.Fprintf(f.out(), "Flag --%s has been deprecated, %s\n", flag.Name, flag.Deprecated)
}
return nil
}
@@ -482,6 +577,14 @@ func UnquoteUsage(flag *Flag) (name string, usage string) {
name = "int"
case "uint64":
name = "uint"
+ case "stringSlice":
+ name = "strings"
+ case "intSlice":
+ name = "ints"
+ case "uintSlice":
+ name = "uints"
+ case "boolSlice":
+ name = "bools"
}
return
@@ -496,11 +599,14 @@ func wrapN(i, slop int, s string) (string, string) {
return s, ""
}
- w := strings.LastIndexAny(s[:i], " \t")
+ w := strings.LastIndexAny(s[:i], " \t\n")
if w <= 0 {
return s, ""
}
-
+ nlPos := strings.LastIndex(s[:i], "\n")
+ if nlPos > 0 && nlPos < w {
+ return s[:nlPos], s[nlPos+1:]
+ }
return s[:w], s[w+1:]
}
@@ -509,7 +615,7 @@ func wrapN(i, slop int, s string) (string, string) {
// caller). Pass `w` == 0 to do no wrapping
func wrap(i, w int, s string) string {
if w == 0 {
- return s
+ return strings.Replace(s, "\n", "\n"+strings.Repeat(" ", i), -1)
}
// space between indent i and end of line width w into which
@@ -527,7 +633,7 @@ func wrap(i, w int, s string) string {
}
// If still not enough space then don't even try to wrap.
if wrap < 24 {
- return s
+ return strings.Replace(s, "\n", r, -1)
}
// Try to avoid short orphan words on the final line, by
@@ -539,14 +645,14 @@ func wrap(i, w int, s string) string {
// Handle first line, which is indented by the caller (or the
// special case above)
l, s = wrapN(wrap, slop, s)
- r = r + l
+ r = r + strings.Replace(l, "\n", "\n"+strings.Repeat(" ", i), -1)
// Now wrap the rest
for s != "" {
var t string
t, s = wrapN(wrap, slop, s)
- r = r + "\n" + strings.Repeat(" ", i) + t
+ r = r + "\n" + strings.Repeat(" ", i) + strings.Replace(t, "\n", "\n"+strings.Repeat(" ", i), -1)
}
return r
@@ -557,28 +663,28 @@ func wrap(i, w int, s string) string {
// for all flags in the FlagSet. Wrapped to `cols` columns (0 for no
// wrapping)
func (f *FlagSet) FlagUsagesWrapped(cols int) string {
- x := new(bytes.Buffer)
+ buf := new(bytes.Buffer)
lines := make([]string, 0, len(f.formal))
maxlen := 0
f.VisitAll(func(flag *Flag) {
- if len(flag.Deprecated) > 0 || flag.Hidden {
+ if flag.Hidden {
return
}
line := ""
- if len(flag.Shorthand) > 0 && len(flag.ShorthandDeprecated) == 0 {
+ if flag.Shorthand != "" && flag.ShorthandDeprecated == "" {
line = fmt.Sprintf(" -%s, --%s", flag.Shorthand, flag.Name)
} else {
line = fmt.Sprintf(" --%s", flag.Name)
}
varname, usage := UnquoteUsage(flag)
- if len(varname) > 0 {
+ if varname != "" {
line += " " + varname
}
- if len(flag.NoOptDefVal) > 0 {
+ if flag.NoOptDefVal != "" {
switch flag.Value.Type() {
case "string":
line += fmt.Sprintf("[=\"%s\"]", flag.NoOptDefVal)
@@ -586,6 +692,10 @@ func (f *FlagSet) FlagUsagesWrapped(cols int) string {
if flag.NoOptDefVal != "true" {
line += fmt.Sprintf("[=%s]", flag.NoOptDefVal)
}
+ case "count":
+ if flag.NoOptDefVal != "+1" {
+ line += fmt.Sprintf("[=%s]", flag.NoOptDefVal)
+ }
default:
line += fmt.Sprintf("[=%s]", flag.NoOptDefVal)
}
@@ -601,11 +711,14 @@ func (f *FlagSet) FlagUsagesWrapped(cols int) string {
line += usage
if !flag.defaultIsZeroValue() {
if flag.Value.Type() == "string" {
- line += fmt.Sprintf(" (default \"%s\")", flag.DefValue)
+ line += fmt.Sprintf(" (default %q)", flag.DefValue)
} else {
line += fmt.Sprintf(" (default %s)", flag.DefValue)
}
}
+ if len(flag.Deprecated) != 0 {
+ line += fmt.Sprintf(" (DEPRECATED: %s)", flag.Deprecated)
+ }
lines = append(lines, line)
})
@@ -614,10 +727,10 @@ func (f *FlagSet) FlagUsagesWrapped(cols int) string {
sidx := strings.Index(line, "\x00")
spacing := strings.Repeat(" ", maxlen-sidx)
// maxlen + 2 comes from + 1 for the \x00 and + 1 for the (deliberate) off-by-one in maxlen-sidx
- fmt.Fprintln(x, line[:sidx], spacing, wrap(maxlen+2, cols, line[sidx+1:]))
+ fmt.Fprintln(buf, line[:sidx], spacing, wrap(maxlen+2, cols, line[sidx+1:]))
}
- return x.String()
+ return buf.String()
}
// FlagUsages returns a string containing the usage information for all flags in
@@ -714,11 +827,10 @@ func (f *FlagSet) VarP(value Value, name, shorthand, usage string) {
// AddFlag will add the flag to the FlagSet
func (f *FlagSet) AddFlag(flag *Flag) {
- // Call normalizeFlagName function only once
normalizedFlagName := f.normalizeFlagName(flag.Name)
- _, alreadythere := f.formal[normalizedFlagName]
- if alreadythere {
+ _, alreadyThere := f.formal[normalizedFlagName]
+ if alreadyThere {
msg := fmt.Sprintf("%s flag redefined: %s", f.name, flag.Name)
fmt.Fprintln(f.out(), msg)
panic(msg) // Happens only if flags are declared with identical names
@@ -729,28 +841,31 @@ func (f *FlagSet) AddFlag(flag *Flag) {
flag.Name = string(normalizedFlagName)
f.formal[normalizedFlagName] = flag
+ f.orderedFormal = append(f.orderedFormal, flag)
- if len(flag.Shorthand) == 0 {
+ if flag.Shorthand == "" {
return
}
if len(flag.Shorthand) > 1 {
- fmt.Fprintf(f.out(), "%s shorthand more than ASCII character: %s\n", f.name, flag.Shorthand)
- panic("shorthand is more than one character")
+ msg := fmt.Sprintf("%q shorthand is more than one ASCII character", flag.Shorthand)
+ fmt.Fprintf(f.out(), msg)
+ panic(msg)
}
if f.shorthands == nil {
f.shorthands = make(map[byte]*Flag)
}
c := flag.Shorthand[0]
- old, alreadythere := f.shorthands[c]
- if alreadythere {
- fmt.Fprintf(f.out(), "%s shorthand reused: %q for %s already used for %s\n", f.name, c, flag.Name, old.Name)
- panic("shorthand redefinition")
+ used, alreadyThere := f.shorthands[c]
+ if alreadyThere {
+ msg := fmt.Sprintf("unable to redefine %q shorthand in %q flagset: it's already used for %q flag", c, f.name, used.Name)
+ fmt.Fprintf(f.out(), msg)
+ panic(msg)
}
f.shorthands[c] = flag
}
// AddFlagSet adds one FlagSet to another. If a flag is already present in f
-// the flag from newSet will be ignored
+// the flag from newSet will be ignored.
func (f *FlagSet) AddFlagSet(newSet *FlagSet) {
if newSet == nil {
return
@@ -781,8 +896,10 @@ func VarP(value Value, name, shorthand, usage string) {
// returns the error.
func (f *FlagSet) failf(format string, a ...interface{}) error {
err := fmt.Errorf(format, a...)
- fmt.Fprintln(f.out(), err)
- f.usage()
+ if f.errorHandling != ContinueOnError {
+ fmt.Fprintln(f.out(), err)
+ f.usage()
+ }
return err
}
@@ -798,32 +915,26 @@ func (f *FlagSet) usage() {
}
}
-func (f *FlagSet) setFlag(flag *Flag, value string, origArg string) error {
- if err := flag.Value.Set(value); err != nil {
- return f.failf("invalid argument %q for %s: %v", value, origArg, err)
+//--unknown (args will be empty)
+//--unknown --next-flag ... (args will be --next-flag ...)
+//--unknown arg ... (args will be arg ...)
+func stripUnknownFlagValue(args []string) []string {
+ if len(args) == 0 {
+ //--unknown
+ return args
}
- // mark as visited for Visit()
- if f.actual == nil {
- f.actual = make(map[NormalizedName]*Flag)
- }
- f.actual[f.normalizeFlagName(flag.Name)] = flag
- flag.Changed = true
- if len(flag.Deprecated) > 0 {
- fmt.Fprintf(os.Stderr, "Flag --%s has been deprecated, %s\n", flag.Name, flag.Deprecated)
- }
- if len(flag.ShorthandDeprecated) > 0 && containsShorthand(origArg, flag.Shorthand) {
- fmt.Fprintf(os.Stderr, "Flag shorthand -%s has been deprecated, %s\n", flag.Shorthand, flag.ShorthandDeprecated)
+
+ first := args[0]
+ if len(first) > 0 && first[0] == '-' {
+ //--unknown --next-flag ...
+ return args
}
- return nil
-}
-func containsShorthand(arg, shorthand string) bool {
- // filter out flags --<flag_name>
- if strings.HasPrefix(arg, "-") {
- return false
+ //--unknown arg ... (args will be arg ...)
+ if len(args) > 1 {
+ return args[1:]
}
- arg = strings.SplitN(arg, "=", 2)[0]
- return strings.Contains(arg, shorthand)
+ return nil
}
func (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) (a []string, err error) {
@@ -833,22 +944,35 @@ func (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) (a []strin
err = f.failf("bad flag syntax: %s", s)
return
}
+
split := strings.SplitN(name, "=", 2)
name = split[0]
- flag, alreadythere := f.formal[f.normalizeFlagName(name)]
- if !alreadythere {
- if name == "help" { // special case for nice help message.
+ flag, exists := f.formal[f.normalizeFlagName(name)]
+
+ if !exists {
+ switch {
+ case name == "help":
f.usage()
return a, ErrHelp
+ case f.ParseErrorsWhitelist.UnknownFlags:
+ // --unknown=unknownval arg ...
+ // we do not want to lose arg in this case
+ if len(split) >= 2 {
+ return a, nil
+ }
+
+ return stripUnknownFlagValue(a), nil
+ default:
+ err = f.failf("unknown flag: --%s", name)
+ return
}
- err = f.failf("unknown flag: --%s", name)
- return
}
+
var value string
if len(split) == 2 {
// '--flag=arg'
value = split[1]
- } else if len(flag.NoOptDefVal) > 0 {
+ } else if flag.NoOptDefVal != "" {
// '--flag' (arg was optional)
value = flag.NoOptDefVal
} else if len(a) > 0 {
@@ -860,46 +984,77 @@ func (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) (a []strin
err = f.failf("flag needs an argument: %s", s)
return
}
- err = fn(flag, value, s)
+
+ err = fn(flag, value)
+ if err != nil {
+ f.failf(err.Error())
+ }
return
}
func (f *FlagSet) parseSingleShortArg(shorthands string, args []string, fn parseFunc) (outShorts string, outArgs []string, err error) {
+ outArgs = args
+
if strings.HasPrefix(shorthands, "test.") {
return
}
- outArgs = args
+
outShorts = shorthands[1:]
c := shorthands[0]
- flag, alreadythere := f.shorthands[c]
- if !alreadythere {
- if c == 'h' { // special case for nice help message.
+ flag, exists := f.shorthands[c]
+ if !exists {
+ switch {
+ case c == 'h':
f.usage()
err = ErrHelp
return
+ case f.ParseErrorsWhitelist.UnknownFlags:
+ // '-f=arg arg ...'
+ // we do not want to lose arg in this case
+ if len(shorthands) > 2 && shorthands[1] == '=' {
+ outShorts = ""
+ return
+ }
+
+ outArgs = stripUnknownFlagValue(outArgs)
+ return
+ default:
+ err = f.failf("unknown shorthand flag: %q in -%s", c, shorthands)
+ return
}
- //TODO continue on error
- err = f.failf("unknown shorthand flag: %q in -%s", c, shorthands)
- return
}
+
var value string
if len(shorthands) > 2 && shorthands[1] == '=' {
+ // '-f=arg'
value = shorthands[2:]
outShorts = ""
- } else if len(flag.NoOptDefVal) > 0 {
+ } else if flag.NoOptDefVal != "" {
+ // '-f' (arg was optional)
value = flag.NoOptDefVal
} else if len(shorthands) > 1 {
+ // '-farg'
value = shorthands[1:]
outShorts = ""
} else if len(args) > 0 {
+ // '-f arg'
value = args[0]
outArgs = args[1:]
} else {
+ // '-f' (arg was required)
err = f.failf("flag needs an argument: %q in -%s", c, shorthands)
return
}
- err = fn(flag, value, shorthands)
+
+ if flag.ShorthandDeprecated != "" {
+ fmt.Fprintf(f.out(), "Flag shorthand -%s has been deprecated, %s\n", flag.Shorthand, flag.ShorthandDeprecated)
+ }
+
+ err = fn(flag, value)
+ if err != nil {
+ f.failf(err.Error())
+ }
return
}
@@ -907,6 +1062,7 @@ func (f *FlagSet) parseShortArg(s string, args []string, fn parseFunc) (a []stri
a = args
shorthands := s[1:]
+ // "shorthands" can be a series of shorthand letters of flags (e.g. "-vvv").
for len(shorthands) > 0 {
shorthands, a, err = f.parseSingleShortArg(shorthands, args, fn)
if err != nil {
@@ -953,19 +1109,30 @@ func (f *FlagSet) parseArgs(args []string, fn parseFunc) (err error) {
// are defined and before flags are accessed by the program.
// The return value will be ErrHelp if -help was set but not defined.
func (f *FlagSet) Parse(arguments []string) error {
+ if f.addedGoFlagSets != nil {
+ for _, goFlagSet := range f.addedGoFlagSets {
+ goFlagSet.Parse(nil)
+ }
+ }
f.parsed = true
+
+ if len(arguments) < 0 {
+ return nil
+ }
+
f.args = make([]string, 0, len(arguments))
- assign := func(flag *Flag, value, origArg string) error {
- return f.setFlag(flag, value, origArg)
+ set := func(flag *Flag, value string) error {
+ return f.Set(flag.Name, value)
}
- err := f.parseArgs(arguments, assign)
+ err := f.parseArgs(arguments, set)
if err != nil {
switch f.errorHandling {
case ContinueOnError:
return err
case ExitOnError:
+ fmt.Println(err)
os.Exit(2)
case PanicOnError:
panic(err)
@@ -974,7 +1141,7 @@ func (f *FlagSet) Parse(arguments []string) error {
return nil
}
-type parseFunc func(flag *Flag, value, origArg string) error
+type parseFunc func(flag *Flag, value string) error
// ParseAll parses flag definitions from the argument list, which should not
// include the command name. The arguments for fn are flag and value. Must be
@@ -985,11 +1152,7 @@ func (f *FlagSet) ParseAll(arguments []string, fn func(flag *Flag, value string)
f.parsed = true
f.args = make([]string, 0, len(arguments))
- assign := func(flag *Flag, value, origArg string) error {
- return fn(flag, value)
- }
-
- err := f.parseArgs(arguments, assign)
+ err := f.parseArgs(arguments, fn)
if err != nil {
switch f.errorHandling {
case ContinueOnError:
@@ -1036,14 +1199,15 @@ func Parsed() bool {
// CommandLine is the default set of command-line flags, parsed from os.Args.
var CommandLine = NewFlagSet(os.Args[0], ExitOnError)
-// NewFlagSet returns a new, empty flag set with the specified name and
-// error handling property.
+// NewFlagSet returns a new, empty flag set with the specified name,
+// error handling property and SortFlags set to true.
func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet {
f := &FlagSet{
name: name,
errorHandling: errorHandling,
argsLenAtDash: -1,
interspersed: true,
+ SortFlags: true,
}
return f
}
diff --git a/vendor/github.com/spf13/pflag/golangflag.go b/vendor/github.com/spf13/pflag/golangflag.go
index c4f47ebe5..d3dd72b7f 100644
--- a/vendor/github.com/spf13/pflag/golangflag.go
+++ b/vendor/github.com/spf13/pflag/golangflag.go
@@ -98,4 +98,8 @@ func (f *FlagSet) AddGoFlagSet(newSet *goflag.FlagSet) {
newSet.VisitAll(func(goflag *goflag.Flag) {
f.AddGoFlag(goflag)
})
+ if f.addedGoFlagSets == nil {
+ f.addedGoFlagSets = make([]*goflag.FlagSet, 0)
+ }
+ f.addedGoFlagSets = append(f.addedGoFlagSets, newSet)
}
diff --git a/vendor/github.com/spf13/pflag/int16.go b/vendor/github.com/spf13/pflag/int16.go
new file mode 100644
index 000000000..f1a01d05e
--- /dev/null
+++ b/vendor/github.com/spf13/pflag/int16.go
@@ -0,0 +1,88 @@
+package pflag
+
+import "strconv"
+
+// -- int16 Value
+type int16Value int16
+
+func newInt16Value(val int16, p *int16) *int16Value {
+ *p = val
+ return (*int16Value)(p)
+}
+
+func (i *int16Value) Set(s string) error {
+ v, err := strconv.ParseInt(s, 0, 16)
+ *i = int16Value(v)
+ return err
+}
+
+func (i *int16Value) Type() string {
+ return "int16"
+}
+
+func (i *int16Value) String() string { return strconv.FormatInt(int64(*i), 10) }
+
+func int16Conv(sval string) (interface{}, error) {
+ v, err := strconv.ParseInt(sval, 0, 16)
+ if err != nil {
+ return 0, err
+ }
+ return int16(v), nil
+}
+
+// GetInt16 returns the int16 value of a flag with the given name
+func (f *FlagSet) GetInt16(name string) (int16, error) {
+ val, err := f.getFlagType(name, "int16", int16Conv)
+ if err != nil {
+ return 0, err
+ }
+ return val.(int16), nil
+}
+
+// Int16Var defines an int16 flag with specified name, default value, and usage string.
+// The argument p points to an int16 variable in which to store the value of the flag.
+func (f *FlagSet) Int16Var(p *int16, name string, value int16, usage string) {
+ f.VarP(newInt16Value(value, p), name, "", usage)
+}
+
+// Int16VarP is like Int16Var, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) Int16VarP(p *int16, name, shorthand string, value int16, usage string) {
+ f.VarP(newInt16Value(value, p), name, shorthand, usage)
+}
+
+// Int16Var defines an int16 flag with specified name, default value, and usage string.
+// The argument p points to an int16 variable in which to store the value of the flag.
+func Int16Var(p *int16, name string, value int16, usage string) {
+ CommandLine.VarP(newInt16Value(value, p), name, "", usage)
+}
+
+// Int16VarP is like Int16Var, but accepts a shorthand letter that can be used after a single dash.
+func Int16VarP(p *int16, name, shorthand string, value int16, usage string) {
+ CommandLine.VarP(newInt16Value(value, p), name, shorthand, usage)
+}
+
+// Int16 defines an int16 flag with specified name, default value, and usage string.
+// The return value is the address of an int16 variable that stores the value of the flag.
+func (f *FlagSet) Int16(name string, value int16, usage string) *int16 {
+ p := new(int16)
+ f.Int16VarP(p, name, "", value, usage)
+ return p
+}
+
+// Int16P is like Int16, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) Int16P(name, shorthand string, value int16, usage string) *int16 {
+ p := new(int16)
+ f.Int16VarP(p, name, shorthand, value, usage)
+ return p
+}
+
+// Int16 defines an int16 flag with specified name, default value, and usage string.
+// The return value is the address of an int16 variable that stores the value of the flag.
+func Int16(name string, value int16, usage string) *int16 {
+ return CommandLine.Int16P(name, "", value, usage)
+}
+
+// Int16P is like Int16, but accepts a shorthand letter that can be used after a single dash.
+func Int16P(name, shorthand string, value int16, usage string) *int16 {
+ return CommandLine.Int16P(name, shorthand, value, usage)
+}
diff --git a/vendor/github.com/spf13/pflag/string_array.go b/vendor/github.com/spf13/pflag/string_array.go
index 276b7ed49..fa7bc6018 100644
--- a/vendor/github.com/spf13/pflag/string_array.go
+++ b/vendor/github.com/spf13/pflag/string_array.go
@@ -52,7 +52,7 @@ func (f *FlagSet) GetStringArray(name string) ([]string, error) {
// StringArrayVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a []string variable in which to store the values of the multiple flags.
-// The value of each argument will not try to be separated by comma
+// The value of each argument will not try to be separated by comma. Use a StringSlice for that.
func (f *FlagSet) StringArrayVar(p *[]string, name string, value []string, usage string) {
f.VarP(newStringArrayValue(value, p), name, "", usage)
}
@@ -64,7 +64,7 @@ func (f *FlagSet) StringArrayVarP(p *[]string, name, shorthand string, value []s
// StringArrayVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a []string variable in which to store the value of the flag.
-// The value of each argument will not try to be separated by comma
+// The value of each argument will not try to be separated by comma. Use a StringSlice for that.
func StringArrayVar(p *[]string, name string, value []string, usage string) {
CommandLine.VarP(newStringArrayValue(value, p), name, "", usage)
}
@@ -76,7 +76,7 @@ func StringArrayVarP(p *[]string, name, shorthand string, value []string, usage
// StringArray defines a string flag with specified name, default value, and usage string.
// The return value is the address of a []string variable that stores the value of the flag.
-// The value of each argument will not try to be separated by comma
+// The value of each argument will not try to be separated by comma. Use a StringSlice for that.
func (f *FlagSet) StringArray(name string, value []string, usage string) *[]string {
p := []string{}
f.StringArrayVarP(&p, name, "", value, usage)
@@ -92,7 +92,7 @@ func (f *FlagSet) StringArrayP(name, shorthand string, value []string, usage str
// StringArray defines a string flag with specified name, default value, and usage string.
// The return value is the address of a []string variable that stores the value of the flag.
-// The value of each argument will not try to be separated by comma
+// The value of each argument will not try to be separated by comma. Use a StringSlice for that.
func StringArray(name string, value []string, usage string) *[]string {
return CommandLine.StringArrayP(name, "", value, usage)
}
diff --git a/vendor/github.com/spf13/pflag/string_slice.go b/vendor/github.com/spf13/pflag/string_slice.go
index 05eee7543..0cd3ccc08 100644
--- a/vendor/github.com/spf13/pflag/string_slice.go
+++ b/vendor/github.com/spf13/pflag/string_slice.go
@@ -82,6 +82,11 @@ func (f *FlagSet) GetStringSlice(name string) ([]string, error) {
// StringSliceVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a []string variable in which to store the value of the flag.
+// Compared to StringArray flags, StringSlice flags take comma-separated value as arguments and split them accordingly.
+// For example:
+// --ss="v1,v2" -ss="v3"
+// will result in
+// []string{"v1", "v2", "v3"}
func (f *FlagSet) StringSliceVar(p *[]string, name string, value []string, usage string) {
f.VarP(newStringSliceValue(value, p), name, "", usage)
}
@@ -93,6 +98,11 @@ func (f *FlagSet) StringSliceVarP(p *[]string, name, shorthand string, value []s
// StringSliceVar defines a string flag with specified name, default value, and usage string.
// The argument p points to a []string variable in which to store the value of the flag.
+// Compared to StringArray flags, StringSlice flags take comma-separated value as arguments and split them accordingly.
+// For example:
+// --ss="v1,v2" -ss="v3"
+// will result in
+// []string{"v1", "v2", "v3"}
func StringSliceVar(p *[]string, name string, value []string, usage string) {
CommandLine.VarP(newStringSliceValue(value, p), name, "", usage)
}
@@ -104,6 +114,11 @@ func StringSliceVarP(p *[]string, name, shorthand string, value []string, usage
// StringSlice defines a string flag with specified name, default value, and usage string.
// The return value is the address of a []string variable that stores the value of the flag.
+// Compared to StringArray flags, StringSlice flags take comma-separated value as arguments and split them accordingly.
+// For example:
+// --ss="v1,v2" -ss="v3"
+// will result in
+// []string{"v1", "v2", "v3"}
func (f *FlagSet) StringSlice(name string, value []string, usage string) *[]string {
p := []string{}
f.StringSliceVarP(&p, name, "", value, usage)
@@ -119,6 +134,11 @@ func (f *FlagSet) StringSliceP(name, shorthand string, value []string, usage str
// StringSlice defines a string flag with specified name, default value, and usage string.
// The return value is the address of a []string variable that stores the value of the flag.
+// Compared to StringArray flags, StringSlice flags take comma-separated value as arguments and split them accordingly.
+// For example:
+// --ss="v1,v2" -ss="v3"
+// will result in
+// []string{"v1", "v2", "v3"}
func StringSlice(name string, value []string, usage string) *[]string {
return CommandLine.StringSliceP(name, "", value, usage)
}
diff --git a/vendor/github.com/spf13/pflag/string_to_int.go b/vendor/github.com/spf13/pflag/string_to_int.go
new file mode 100644
index 000000000..5ceda3965
--- /dev/null
+++ b/vendor/github.com/spf13/pflag/string_to_int.go
@@ -0,0 +1,149 @@
+package pflag
+
+import (
+ "bytes"
+ "fmt"
+ "strconv"
+ "strings"
+)
+
+// -- stringToInt Value
+type stringToIntValue struct {
+ value *map[string]int
+ changed bool
+}
+
+func newStringToIntValue(val map[string]int, p *map[string]int) *stringToIntValue {
+ ssv := new(stringToIntValue)
+ ssv.value = p
+ *ssv.value = val
+ return ssv
+}
+
+// Format: a=1,b=2
+func (s *stringToIntValue) Set(val string) error {
+ ss := strings.Split(val, ",")
+ out := make(map[string]int, len(ss))
+ for _, pair := range ss {
+ kv := strings.SplitN(pair, "=", 2)
+ if len(kv) != 2 {
+ return fmt.Errorf("%s must be formatted as key=value", pair)
+ }
+ var err error
+ out[kv[0]], err = strconv.Atoi(kv[1])
+ if err != nil {
+ return err
+ }
+ }
+ if !s.changed {
+ *s.value = out
+ } else {
+ for k, v := range out {
+ (*s.value)[k] = v
+ }
+ }
+ s.changed = true
+ return nil
+}
+
+func (s *stringToIntValue) Type() string {
+ return "stringToInt"
+}
+
+func (s *stringToIntValue) String() string {
+ var buf bytes.Buffer
+ i := 0
+ for k, v := range *s.value {
+ if i > 0 {
+ buf.WriteRune(',')
+ }
+ buf.WriteString(k)
+ buf.WriteRune('=')
+ buf.WriteString(strconv.Itoa(v))
+ i++
+ }
+ return "[" + buf.String() + "]"
+}
+
+func stringToIntConv(val string) (interface{}, error) {
+ val = strings.Trim(val, "[]")
+ // An empty string would cause an empty map
+ if len(val) == 0 {
+ return map[string]int{}, nil
+ }
+ ss := strings.Split(val, ",")
+ out := make(map[string]int, len(ss))
+ for _, pair := range ss {
+ kv := strings.SplitN(pair, "=", 2)
+ if len(kv) != 2 {
+ return nil, fmt.Errorf("%s must be formatted as key=value", pair)
+ }
+ var err error
+ out[kv[0]], err = strconv.Atoi(kv[1])
+ if err != nil {
+ return nil, err
+ }
+ }
+ return out, nil
+}
+
+// GetStringToInt return the map[string]int value of a flag with the given name
+func (f *FlagSet) GetStringToInt(name string) (map[string]int, error) {
+ val, err := f.getFlagType(name, "stringToInt", stringToIntConv)
+ if err != nil {
+ return map[string]int{}, err
+ }
+ return val.(map[string]int), nil
+}
+
+// StringToIntVar defines a string flag with specified name, default value, and usage string.
+// The argument p points to a map[string]int variable in which to store the values of the multiple flags.
+// The value of each argument will not try to be separated by comma
+func (f *FlagSet) StringToIntVar(p *map[string]int, name string, value map[string]int, usage string) {
+ f.VarP(newStringToIntValue(value, p), name, "", usage)
+}
+
+// StringToIntVarP is like StringToIntVar, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) StringToIntVarP(p *map[string]int, name, shorthand string, value map[string]int, usage string) {
+ f.VarP(newStringToIntValue(value, p), name, shorthand, usage)
+}
+
+// StringToIntVar defines a string flag with specified name, default value, and usage string.
+// The argument p points to a map[string]int variable in which to store the value of the flag.
+// The value of each argument will not try to be separated by comma
+func StringToIntVar(p *map[string]int, name string, value map[string]int, usage string) {
+ CommandLine.VarP(newStringToIntValue(value, p), name, "", usage)
+}
+
+// StringToIntVarP is like StringToIntVar, but accepts a shorthand letter that can be used after a single dash.
+func StringToIntVarP(p *map[string]int, name, shorthand string, value map[string]int, usage string) {
+ CommandLine.VarP(newStringToIntValue(value, p), name, shorthand, usage)
+}
+
+// StringToInt defines a string flag with specified name, default value, and usage string.
+// The return value is the address of a map[string]int variable that stores the value of the flag.
+// The value of each argument will not try to be separated by comma
+func (f *FlagSet) StringToInt(name string, value map[string]int, usage string) *map[string]int {
+ p := map[string]int{}
+ f.StringToIntVarP(&p, name, "", value, usage)
+ return &p
+}
+
+// StringToIntP is like StringToInt, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) StringToIntP(name, shorthand string, value map[string]int, usage string) *map[string]int {
+ p := map[string]int{}
+ f.StringToIntVarP(&p, name, shorthand, value, usage)
+ return &p
+}
+
+// StringToInt defines a string flag with specified name, default value, and usage string.
+// The return value is the address of a map[string]int variable that stores the value of the flag.
+// The value of each argument will not try to be separated by comma
+func StringToInt(name string, value map[string]int, usage string) *map[string]int {
+ return CommandLine.StringToIntP(name, "", value, usage)
+}
+
+// StringToIntP is like StringToInt, but accepts a shorthand letter that can be used after a single dash.
+func StringToIntP(name, shorthand string, value map[string]int, usage string) *map[string]int {
+ return CommandLine.StringToIntP(name, shorthand, value, usage)
+}
diff --git a/vendor/github.com/spf13/pflag/string_to_string.go b/vendor/github.com/spf13/pflag/string_to_string.go
new file mode 100644
index 000000000..890a01afc
--- /dev/null
+++ b/vendor/github.com/spf13/pflag/string_to_string.go
@@ -0,0 +1,160 @@
+package pflag
+
+import (
+ "bytes"
+ "encoding/csv"
+ "fmt"
+ "strings"
+)
+
+// -- stringToString Value
+type stringToStringValue struct {
+ value *map[string]string
+ changed bool
+}
+
+func newStringToStringValue(val map[string]string, p *map[string]string) *stringToStringValue {
+ ssv := new(stringToStringValue)
+ ssv.value = p
+ *ssv.value = val
+ return ssv
+}
+
+// Format: a=1,b=2
+func (s *stringToStringValue) Set(val string) error {
+ var ss []string
+ n := strings.Count(val, "=")
+ switch n {
+ case 0:
+ return fmt.Errorf("%s must be formatted as key=value", val)
+ case 1:
+ ss = append(ss, strings.Trim(val, `"`))
+ default:
+ r := csv.NewReader(strings.NewReader(val))
+ var err error
+ ss, err = r.Read()
+ if err != nil {
+ return err
+ }
+ }
+
+ out := make(map[string]string, len(ss))
+ for _, pair := range ss {
+ kv := strings.SplitN(pair, "=", 2)
+ if len(kv) != 2 {
+ return fmt.Errorf("%s must be formatted as key=value", pair)
+ }
+ out[kv[0]] = kv[1]
+ }
+ if !s.changed {
+ *s.value = out
+ } else {
+ for k, v := range out {
+ (*s.value)[k] = v
+ }
+ }
+ s.changed = true
+ return nil
+}
+
+func (s *stringToStringValue) Type() string {
+ return "stringToString"
+}
+
+func (s *stringToStringValue) String() string {
+ records := make([]string, 0, len(*s.value)>>1)
+ for k, v := range *s.value {
+ records = append(records, k+"="+v)
+ }
+
+ var buf bytes.Buffer
+ w := csv.NewWriter(&buf)
+ if err := w.Write(records); err != nil {
+ panic(err)
+ }
+ w.Flush()
+ return "[" + strings.TrimSpace(buf.String()) + "]"
+}
+
+func stringToStringConv(val string) (interface{}, error) {
+ val = strings.Trim(val, "[]")
+ // An empty string would cause an empty map
+ if len(val) == 0 {
+ return map[string]string{}, nil
+ }
+ r := csv.NewReader(strings.NewReader(val))
+ ss, err := r.Read()
+ if err != nil {
+ return nil, err
+ }
+ out := make(map[string]string, len(ss))
+ for _, pair := range ss {
+ kv := strings.SplitN(pair, "=", 2)
+ if len(kv) != 2 {
+ return nil, fmt.Errorf("%s must be formatted as key=value", pair)
+ }
+ out[kv[0]] = kv[1]
+ }
+ return out, nil
+}
+
+// GetStringToString return the map[string]string value of a flag with the given name
+func (f *FlagSet) GetStringToString(name string) (map[string]string, error) {
+ val, err := f.getFlagType(name, "stringToString", stringToStringConv)
+ if err != nil {
+ return map[string]string{}, err
+ }
+ return val.(map[string]string), nil
+}
+
+// StringToStringVar defines a string flag with specified name, default value, and usage string.
+// The argument p points to a map[string]string variable in which to store the values of the multiple flags.
+// The value of each argument will not try to be separated by comma
+func (f *FlagSet) StringToStringVar(p *map[string]string, name string, value map[string]string, usage string) {
+ f.VarP(newStringToStringValue(value, p), name, "", usage)
+}
+
+// StringToStringVarP is like StringToStringVar, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) StringToStringVarP(p *map[string]string, name, shorthand string, value map[string]string, usage string) {
+ f.VarP(newStringToStringValue(value, p), name, shorthand, usage)
+}
+
+// StringToStringVar defines a string flag with specified name, default value, and usage string.
+// The argument p points to a map[string]string variable in which to store the value of the flag.
+// The value of each argument will not try to be separated by comma
+func StringToStringVar(p *map[string]string, name string, value map[string]string, usage string) {
+ CommandLine.VarP(newStringToStringValue(value, p), name, "", usage)
+}
+
+// StringToStringVarP is like StringToStringVar, but accepts a shorthand letter that can be used after a single dash.
+func StringToStringVarP(p *map[string]string, name, shorthand string, value map[string]string, usage string) {
+ CommandLine.VarP(newStringToStringValue(value, p), name, shorthand, usage)
+}
+
+// StringToString defines a string flag with specified name, default value, and usage string.
+// The return value is the address of a map[string]string variable that stores the value of the flag.
+// The value of each argument will not try to be separated by comma
+func (f *FlagSet) StringToString(name string, value map[string]string, usage string) *map[string]string {
+ p := map[string]string{}
+ f.StringToStringVarP(&p, name, "", value, usage)
+ return &p
+}
+
+// StringToStringP is like StringToString, but accepts a shorthand letter that can be used after a single dash.
+func (f *FlagSet) StringToStringP(name, shorthand string, value map[string]string, usage string) *map[string]string {
+ p := map[string]string{}
+ f.StringToStringVarP(&p, name, shorthand, value, usage)
+ return &p
+}
+
+// StringToString defines a string flag with specified name, default value, and usage string.
+// The return value is the address of a map[string]string variable that stores the value of the flag.
+// The value of each argument will not try to be separated by comma
+func StringToString(name string, value map[string]string, usage string) *map[string]string {
+ return CommandLine.StringToStringP(name, "", value, usage)
+}
+
+// StringToStringP is like StringToString, but accepts a shorthand letter that can be used after a single dash.
+func StringToStringP(name, shorthand string, value map[string]string, usage string) *map[string]string {
+ return CommandLine.StringToStringP(name, shorthand, value, usage)
+}
diff --git a/vendor/github.com/stretchr/testify/LICENSE b/vendor/github.com/stretchr/testify/LICENSE
index 473b670a7..f38ec5956 100644
--- a/vendor/github.com/stretchr/testify/LICENSE
+++ b/vendor/github.com/stretchr/testify/LICENSE
@@ -1,22 +1,21 @@
-Copyright (c) 2012 - 2013 Mat Ryer and Tyler Bunnell
+MIT License
-Please consider promoting this project if you find it useful.
+Copyright (c) 2012-2018 Mat Ryer and Tyler Bunnell
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without restriction,
-including without limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of the Software,
-and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
-OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
-OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/github.com/stretchr/testify/README.md b/vendor/github.com/stretchr/testify/README.md
index e57b1811f..11951d4a5 100644
--- a/vendor/github.com/stretchr/testify/README.md
+++ b/vendor/github.com/stretchr/testify/README.md
@@ -9,7 +9,6 @@ Features include:
* [Easy assertions](#assert-package)
* [Mocking](#mock-package)
- * [HTTP response trapping](#http-package)
* [Testing suite interfaces and functions](#suite-package)
Get started:
@@ -106,14 +105,6 @@ The `require` package provides same global functions as the `assert` package, bu
See [t.FailNow](http://golang.org/pkg/testing/#T.FailNow) for details.
-
-[`http`](http://godoc.org/github.com/stretchr/testify/http "API documentation") package
----------------------------------------------------------------------------------------
-
-The `http` package contains test objects useful for testing code that relies on the `net/http` package. Check out the [(deprecated) API documentation for the `http` package](http://godoc.org/github.com/stretchr/testify/http).
-
-We recommend you use [httptest](http://golang.org/pkg/net/http/httptest) instead.
-
[`mock`](http://godoc.org/github.com/stretchr/testify/mock "API documentation") package
----------------------------------------------------------------------------------------
@@ -173,6 +164,29 @@ func TestSomething(t *testing.T) {
// assert that the expectations were met
testObj.AssertExpectations(t)
+
+}
+
+// TestSomethingElse is a second example of how to use our test object to
+// make assertions about some target code we are testing.
+// This time using a placeholder. Placeholders might be used when the
+// data being passed in is normally dynamically generated and cannot be
+// predicted beforehand (eg. containing hashes that are time sensitive)
+func TestSomethingElse(t *testing.T) {
+
+ // create an instance of our test object
+ testObj := new(MyMockedObject)
+
+ // setup expectations with a placeholder in the argument list
+ testObj.On("DoSomething", mock.Anything).Return(true, nil)
+
+ // call the code we are testing
+ targetFuncThatDoesSomethingWithObj(testObj)
+
+ // assert that the expectations were met
+ testObj.AssertExpectations(t)
+
+
}
```
@@ -268,14 +282,15 @@ Installation
To install Testify, use `go get`:
- * Latest version: go get github.com/stretchr/testify
- * Specific version: go get gopkg.in/stretchr/testify.v1
+ go get github.com/stretchr/testify
This will then make the following packages available to you:
github.com/stretchr/testify/assert
+ github.com/stretchr/testify/require
github.com/stretchr/testify/mock
- github.com/stretchr/testify/http
+ github.com/stretchr/testify/suite
+ github.com/stretchr/testify/http (deprecated)
Import the `testify/assert` package into your code using this template:
@@ -303,10 +318,10 @@ To update Testify to the latest version, use `go get -u github.com/stretchr/test
------
-Version History
-===============
+Supported go versions
+==================
- * 1.0 - New package versioning strategy adopted.
+We support the three major Go versions, which are 1.9, 1.10, and 1.11 at the moment.
------
@@ -319,14 +334,7 @@ When submitting an issue, we ask that you please include a complete test functio
------
-Licence
+License
=======
-Copyright (c) 2012 - 2013 Mat Ryer and Tyler Bunnell
-
-Please consider promoting this project if you find it useful.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+This project is licensed under the terms of the MIT license.
diff --git a/vendor/github.com/stretchr/testify/assert/assertion_format.go b/vendor/github.com/stretchr/testify/assert/assertion_format.go
new file mode 100644
index 000000000..aa1c2b95c
--- /dev/null
+++ b/vendor/github.com/stretchr/testify/assert/assertion_format.go
@@ -0,0 +1,484 @@
+/*
+* CODE GENERATED AUTOMATICALLY WITH github.com/stretchr/testify/_codegen
+* THIS FILE MUST NOT BE EDITED BY HAND
+ */
+
+package assert
+
+import (
+ http "net/http"
+ url "net/url"
+ time "time"
+)
+
+// Conditionf uses a Comparison to assert a complex condition.
+func Conditionf(t TestingT, comp Comparison, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Condition(t, comp, append([]interface{}{msg}, args...)...)
+}
+
+// Containsf asserts that the specified string, list(array, slice...) or map contains the
+// specified substring or element.
+//
+// assert.Containsf(t, "Hello World", "World", "error message %s", "formatted")
+// assert.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted")
+// assert.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted")
+func Containsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Contains(t, s, contains, append([]interface{}{msg}, args...)...)
+}
+
+// DirExistsf checks whether a directory exists in the given path. It also fails if the path is a file rather a directory or there is an error checking whether it exists.
+func DirExistsf(t TestingT, path string, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return DirExists(t, path, append([]interface{}{msg}, args...)...)
+}
+
+// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should match.
+//
+// assert.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted")
+func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return ElementsMatch(t, listA, listB, append([]interface{}{msg}, args...)...)
+}
+
+// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either
+// a slice or a channel with len == 0.
+//
+// assert.Emptyf(t, obj, "error message %s", "formatted")
+func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Empty(t, object, append([]interface{}{msg}, args...)...)
+}
+
+// Equalf asserts that two objects are equal.
+//
+// assert.Equalf(t, 123, 123, "error message %s", "formatted")
+//
+// Pointer variable equality is determined based on the equality of the
+// referenced values (as opposed to the memory addresses). Function equality
+// cannot be determined and will always fail.
+func Equalf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Equal(t, expected, actual, append([]interface{}{msg}, args...)...)
+}
+
+// EqualErrorf asserts that a function returned an error (i.e. not `nil`)
+// and that it is equal to the provided error.
+//
+// actualObj, err := SomeFunction()
+// assert.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted")
+func EqualErrorf(t TestingT, theError error, errString string, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return EqualError(t, theError, errString, append([]interface{}{msg}, args...)...)
+}
+
+// EqualValuesf asserts that two objects are equal or convertable to the same types
+// and equal.
+//
+// assert.EqualValuesf(t, uint32(123, "error message %s", "formatted"), int32(123))
+func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return EqualValues(t, expected, actual, append([]interface{}{msg}, args...)...)
+}
+
+// Errorf asserts that a function returned an error (i.e. not `nil`).
+//
+// actualObj, err := SomeFunction()
+// if assert.Errorf(t, err, "error message %s", "formatted") {
+// assert.Equal(t, expectedErrorf, err)
+// }
+func Errorf(t TestingT, err error, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Error(t, err, append([]interface{}{msg}, args...)...)
+}
+
+// Exactlyf asserts that two objects are equal in value and type.
+//
+// assert.Exactlyf(t, int32(123, "error message %s", "formatted"), int64(123))
+func Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Exactly(t, expected, actual, append([]interface{}{msg}, args...)...)
+}
+
+// Failf reports a failure through
+func Failf(t TestingT, failureMessage string, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Fail(t, failureMessage, append([]interface{}{msg}, args...)...)
+}
+
+// FailNowf fails test
+func FailNowf(t TestingT, failureMessage string, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return FailNow(t, failureMessage, append([]interface{}{msg}, args...)...)
+}
+
+// Falsef asserts that the specified value is false.
+//
+// assert.Falsef(t, myBool, "error message %s", "formatted")
+func Falsef(t TestingT, value bool, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return False(t, value, append([]interface{}{msg}, args...)...)
+}
+
+// FileExistsf checks whether a file exists in the given path. It also fails if the path points to a directory or there is an error when trying to check the file.
+func FileExistsf(t TestingT, path string, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return FileExists(t, path, append([]interface{}{msg}, args...)...)
+}
+
+// HTTPBodyContainsf asserts that a specified handler returns a
+// body that contains a string.
+//
+// assert.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted")
+//
+// Returns whether the assertion was successful (true) or not (false).
+func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPBodyContains(t, handler, method, url, values, str, append([]interface{}{msg}, args...)...)
+}
+
+// HTTPBodyNotContainsf asserts that a specified handler returns a
+// body that does not contain a string.
+//
+// assert.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted")
+//
+// Returns whether the assertion was successful (true) or not (false).
+func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPBodyNotContains(t, handler, method, url, values, str, append([]interface{}{msg}, args...)...)
+}
+
+// HTTPErrorf asserts that a specified handler returns an error status code.
+//
+// assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}}
+//
+// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false).
+func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPError(t, handler, method, url, values, append([]interface{}{msg}, args...)...)
+}
+
+// HTTPRedirectf asserts that a specified handler returns a redirect status code.
+//
+// assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}}
+//
+// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false).
+func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPRedirect(t, handler, method, url, values, append([]interface{}{msg}, args...)...)
+}
+
+// HTTPSuccessf asserts that a specified handler returns a success status code.
+//
+// assert.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted")
+//
+// Returns whether the assertion was successful (true) or not (false).
+func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPSuccess(t, handler, method, url, values, append([]interface{}{msg}, args...)...)
+}
+
+// Implementsf asserts that an object is implemented by the specified interface.
+//
+// assert.Implementsf(t, (*MyInterface, "error message %s", "formatted")(nil), new(MyObject))
+func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Implements(t, interfaceObject, object, append([]interface{}{msg}, args...)...)
+}
+
+// InDeltaf asserts that the two numerals are within delta of each other.
+//
+// assert.InDeltaf(t, math.Pi, (22 / 7.0, "error message %s", "formatted"), 0.01)
+func InDeltaf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return InDelta(t, expected, actual, delta, append([]interface{}{msg}, args...)...)
+}
+
+// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.
+func InDeltaMapValuesf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return InDeltaMapValues(t, expected, actual, delta, append([]interface{}{msg}, args...)...)
+}
+
+// InDeltaSlicef is the same as InDelta, except it compares two slices.
+func InDeltaSlicef(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return InDeltaSlice(t, expected, actual, delta, append([]interface{}{msg}, args...)...)
+}
+
+// InEpsilonf asserts that expected and actual have a relative error less than epsilon
+func InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return InEpsilon(t, expected, actual, epsilon, append([]interface{}{msg}, args...)...)
+}
+
+// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices.
+func InEpsilonSlicef(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return InEpsilonSlice(t, expected, actual, epsilon, append([]interface{}{msg}, args...)...)
+}
+
+// IsTypef asserts that the specified objects are of the same type.
+func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return IsType(t, expectedType, object, append([]interface{}{msg}, args...)...)
+}
+
+// JSONEqf asserts that two JSON strings are equivalent.
+//
+// assert.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted")
+func JSONEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return JSONEq(t, expected, actual, append([]interface{}{msg}, args...)...)
+}
+
+// Lenf asserts that the specified object has specific length.
+// Lenf also fails if the object has a type that len() not accept.
+//
+// assert.Lenf(t, mySlice, 3, "error message %s", "formatted")
+func Lenf(t TestingT, object interface{}, length int, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Len(t, object, length, append([]interface{}{msg}, args...)...)
+}
+
+// Nilf asserts that the specified object is nil.
+//
+// assert.Nilf(t, err, "error message %s", "formatted")
+func Nilf(t TestingT, object interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Nil(t, object, append([]interface{}{msg}, args...)...)
+}
+
+// NoErrorf asserts that a function returned no error (i.e. `nil`).
+//
+// actualObj, err := SomeFunction()
+// if assert.NoErrorf(t, err, "error message %s", "formatted") {
+// assert.Equal(t, expectedObj, actualObj)
+// }
+func NoErrorf(t TestingT, err error, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return NoError(t, err, append([]interface{}{msg}, args...)...)
+}
+
+// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the
+// specified substring or element.
+//
+// assert.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted")
+// assert.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted")
+// assert.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted")
+func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotContains(t, s, contains, append([]interface{}{msg}, args...)...)
+}
+
+// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either
+// a slice or a channel with len == 0.
+//
+// if assert.NotEmptyf(t, obj, "error message %s", "formatted") {
+// assert.Equal(t, "two", obj[1])
+// }
+func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotEmpty(t, object, append([]interface{}{msg}, args...)...)
+}
+
+// NotEqualf asserts that the specified values are NOT equal.
+//
+// assert.NotEqualf(t, obj1, obj2, "error message %s", "formatted")
+//
+// Pointer variable equality is determined based on the equality of the
+// referenced values (as opposed to the memory addresses).
+func NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotEqual(t, expected, actual, append([]interface{}{msg}, args...)...)
+}
+
+// NotNilf asserts that the specified object is not nil.
+//
+// assert.NotNilf(t, err, "error message %s", "formatted")
+func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotNil(t, object, append([]interface{}{msg}, args...)...)
+}
+
+// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic.
+//
+// assert.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted")
+func NotPanicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotPanics(t, f, append([]interface{}{msg}, args...)...)
+}
+
+// NotRegexpf asserts that a specified regexp does not match a string.
+//
+// assert.NotRegexpf(t, regexp.MustCompile("starts", "error message %s", "formatted"), "it's starting")
+// assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted")
+func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotRegexp(t, rx, str, append([]interface{}{msg}, args...)...)
+}
+
+// NotSubsetf asserts that the specified list(array, slice...) contains not all
+// elements given in the specified subset(array, slice...).
+//
+// assert.NotSubsetf(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted")
+func NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotSubset(t, list, subset, append([]interface{}{msg}, args...)...)
+}
+
+// NotZerof asserts that i is not the zero value for its type.
+func NotZerof(t TestingT, i interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotZero(t, i, append([]interface{}{msg}, args...)...)
+}
+
+// Panicsf asserts that the code inside the specified PanicTestFunc panics.
+//
+// assert.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted")
+func Panicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Panics(t, f, append([]interface{}{msg}, args...)...)
+}
+
+// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that
+// the recovered panic value equals the expected panic value.
+//
+// assert.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted")
+func PanicsWithValuef(t TestingT, expected interface{}, f PanicTestFunc, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return PanicsWithValue(t, expected, f, append([]interface{}{msg}, args...)...)
+}
+
+// Regexpf asserts that a specified regexp matches a string.
+//
+// assert.Regexpf(t, regexp.MustCompile("start", "error message %s", "formatted"), "it's starting")
+// assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted")
+func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Regexp(t, rx, str, append([]interface{}{msg}, args...)...)
+}
+
+// Subsetf asserts that the specified list(array, slice...) contains all
+// elements given in the specified subset(array, slice...).
+//
+// assert.Subsetf(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted")
+func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Subset(t, list, subset, append([]interface{}{msg}, args...)...)
+}
+
+// Truef asserts that the specified value is true.
+//
+// assert.Truef(t, myBool, "error message %s", "formatted")
+func Truef(t TestingT, value bool, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return True(t, value, append([]interface{}{msg}, args...)...)
+}
+
+// WithinDurationf asserts that the two times are within duration delta of each other.
+//
+// assert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted")
+func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return WithinDuration(t, expected, actual, delta, append([]interface{}{msg}, args...)...)
+}
+
+// Zerof asserts that i is the zero value for its type.
+func Zerof(t TestingT, i interface{}, msg string, args ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ return Zero(t, i, append([]interface{}{msg}, args...)...)
+}
diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go b/vendor/github.com/stretchr/testify/assert/assertion_forward.go
index aa4311ff8..de39f794e 100644
--- a/vendor/github.com/stretchr/testify/assert/assertion_forward.go
+++ b/vendor/github.com/stretchr/testify/assert/assertion_forward.go
@@ -13,40 +13,119 @@ import (
// Condition uses a Comparison to assert a complex condition.
func (a *Assertions) Condition(comp Comparison, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Condition(a.t, comp, msgAndArgs...)
}
+// Conditionf uses a Comparison to assert a complex condition.
+func (a *Assertions) Conditionf(comp Comparison, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Conditionf(a.t, comp, msg, args...)
+}
+
// Contains asserts that the specified string, list(array, slice...) or map contains the
// specified substring or element.
//
-// a.Contains("Hello World", "World", "But 'Hello World' does contain 'World'")
-// a.Contains(["Hello", "World"], "World", "But ["Hello", "World"] does contain 'World'")
-// a.Contains({"Hello": "World"}, "Hello", "But {'Hello': 'World'} does contain 'Hello'")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Contains("Hello World", "World")
+// a.Contains(["Hello", "World"], "World")
+// a.Contains({"Hello": "World"}, "Hello")
func (a *Assertions) Contains(s interface{}, contains interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Contains(a.t, s, contains, msgAndArgs...)
}
+// Containsf asserts that the specified string, list(array, slice...) or map contains the
+// specified substring or element.
+//
+// a.Containsf("Hello World", "World", "error message %s", "formatted")
+// a.Containsf(["Hello", "World"], "World", "error message %s", "formatted")
+// a.Containsf({"Hello": "World"}, "Hello", "error message %s", "formatted")
+func (a *Assertions) Containsf(s interface{}, contains interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Containsf(a.t, s, contains, msg, args...)
+}
+
+// DirExists checks whether a directory exists in the given path. It also fails if the path is a file rather a directory or there is an error checking whether it exists.
+func (a *Assertions) DirExists(path string, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return DirExists(a.t, path, msgAndArgs...)
+}
+
+// DirExistsf checks whether a directory exists in the given path. It also fails if the path is a file rather a directory or there is an error checking whether it exists.
+func (a *Assertions) DirExistsf(path string, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return DirExistsf(a.t, path, msg, args...)
+}
+
+// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should match.
+//
+// a.ElementsMatch([1, 3, 2, 3], [1, 3, 3, 2])
+func (a *Assertions) ElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return ElementsMatch(a.t, listA, listB, msgAndArgs...)
+}
+
+// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should match.
+//
+// a.ElementsMatchf([1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted")
+func (a *Assertions) ElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return ElementsMatchf(a.t, listA, listB, msg, args...)
+}
+
// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
// a.Empty(obj)
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Empty(a.t, object, msgAndArgs...)
}
-// Equal asserts that two objects are equal.
+// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either
+// a slice or a channel with len == 0.
//
-// a.Equal(123, 123, "123 and 123 should be equal")
+// a.Emptyf(obj, "error message %s", "formatted")
+func (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Emptyf(a.t, object, msg, args...)
+}
+
+// Equal asserts that two objects are equal.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Equal(123, 123)
//
// Pointer variable equality is determined based on the equality of the
-// referenced values (as opposed to the memory addresses).
+// referenced values (as opposed to the memory addresses). Function equality
+// cannot be determined and will always fail.
func (a *Assertions) Equal(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Equal(a.t, expected, actual, msgAndArgs...)
}
@@ -54,81 +133,226 @@ func (a *Assertions) Equal(expected interface{}, actual interface{}, msgAndArgs
// and that it is equal to the provided error.
//
// actualObj, err := SomeFunction()
-// a.EqualError(err, expectedErrorString, "An error was expected")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.EqualError(err, expectedErrorString)
func (a *Assertions) EqualError(theError error, errString string, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return EqualError(a.t, theError, errString, msgAndArgs...)
}
+// EqualErrorf asserts that a function returned an error (i.e. not `nil`)
+// and that it is equal to the provided error.
+//
+// actualObj, err := SomeFunction()
+// a.EqualErrorf(err, expectedErrorString, "error message %s", "formatted")
+func (a *Assertions) EqualErrorf(theError error, errString string, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return EqualErrorf(a.t, theError, errString, msg, args...)
+}
+
// EqualValues asserts that two objects are equal or convertable to the same types
// and equal.
//
-// a.EqualValues(uint32(123), int32(123), "123 and 123 should be equal")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.EqualValues(uint32(123), int32(123))
func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return EqualValues(a.t, expected, actual, msgAndArgs...)
}
+// EqualValuesf asserts that two objects are equal or convertable to the same types
+// and equal.
+//
+// a.EqualValuesf(uint32(123, "error message %s", "formatted"), int32(123))
+func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return EqualValuesf(a.t, expected, actual, msg, args...)
+}
+
+// Equalf asserts that two objects are equal.
+//
+// a.Equalf(123, 123, "error message %s", "formatted")
+//
+// Pointer variable equality is determined based on the equality of the
+// referenced values (as opposed to the memory addresses). Function equality
+// cannot be determined and will always fail.
+func (a *Assertions) Equalf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Equalf(a.t, expected, actual, msg, args...)
+}
+
// Error asserts that a function returned an error (i.e. not `nil`).
//
// actualObj, err := SomeFunction()
-// if a.Error(err, "An error was expected") {
-// assert.Equal(t, err, expectedError)
+// if a.Error(err) {
+// assert.Equal(t, expectedError, err)
// }
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) Error(err error, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Error(a.t, err, msgAndArgs...)
}
-// Exactly asserts that two objects are equal is value and type.
+// Errorf asserts that a function returned an error (i.e. not `nil`).
//
-// a.Exactly(int32(123), int64(123), "123 and 123 should NOT be equal")
+// actualObj, err := SomeFunction()
+// if a.Errorf(err, "error message %s", "formatted") {
+// assert.Equal(t, expectedErrorf, err)
+// }
+func (a *Assertions) Errorf(err error, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Errorf(a.t, err, msg, args...)
+}
+
+// Exactly asserts that two objects are equal in value and type.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Exactly(int32(123), int64(123))
func (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Exactly(a.t, expected, actual, msgAndArgs...)
}
+// Exactlyf asserts that two objects are equal in value and type.
+//
+// a.Exactlyf(int32(123, "error message %s", "formatted"), int64(123))
+func (a *Assertions) Exactlyf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Exactlyf(a.t, expected, actual, msg, args...)
+}
+
// Fail reports a failure through
func (a *Assertions) Fail(failureMessage string, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Fail(a.t, failureMessage, msgAndArgs...)
}
// FailNow fails test
func (a *Assertions) FailNow(failureMessage string, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return FailNow(a.t, failureMessage, msgAndArgs...)
}
+// FailNowf fails test
+func (a *Assertions) FailNowf(failureMessage string, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return FailNowf(a.t, failureMessage, msg, args...)
+}
+
+// Failf reports a failure through
+func (a *Assertions) Failf(failureMessage string, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Failf(a.t, failureMessage, msg, args...)
+}
+
// False asserts that the specified value is false.
//
-// a.False(myBool, "myBool should be false")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.False(myBool)
func (a *Assertions) False(value bool, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return False(a.t, value, msgAndArgs...)
}
+// Falsef asserts that the specified value is false.
+//
+// a.Falsef(myBool, "error message %s", "formatted")
+func (a *Assertions) Falsef(value bool, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Falsef(a.t, value, msg, args...)
+}
+
+// FileExists checks whether a file exists in the given path. It also fails if the path points to a directory or there is an error when trying to check the file.
+func (a *Assertions) FileExists(path string, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return FileExists(a.t, path, msgAndArgs...)
+}
+
+// FileExistsf checks whether a file exists in the given path. It also fails if the path points to a directory or there is an error when trying to check the file.
+func (a *Assertions) FileExistsf(path string, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return FileExistsf(a.t, path, msg, args...)
+}
+
// HTTPBodyContains asserts that a specified handler returns a
// body that contains a string.
//
-// a.HTTPBodyContains(myHandler, "www.google.com", nil, "I'm Feeling Lucky")
+// a.HTTPBodyContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky")
//
// Returns whether the assertion was successful (true) or not (false).
-func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}) bool {
- return HTTPBodyContains(a.t, handler, method, url, values, str)
+func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPBodyContains(a.t, handler, method, url, values, str, msgAndArgs...)
+}
+
+// HTTPBodyContainsf asserts that a specified handler returns a
+// body that contains a string.
+//
+// a.HTTPBodyContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted")
+//
+// Returns whether the assertion was successful (true) or not (false).
+func (a *Assertions) HTTPBodyContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPBodyContainsf(a.t, handler, method, url, values, str, msg, args...)
}
// HTTPBodyNotContains asserts that a specified handler returns a
// body that does not contain a string.
//
-// a.HTTPBodyNotContains(myHandler, "www.google.com", nil, "I'm Feeling Lucky")
+// a.HTTPBodyNotContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky")
//
// Returns whether the assertion was successful (true) or not (false).
-func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}) bool {
- return HTTPBodyNotContains(a.t, handler, method, url, values, str)
+func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPBodyNotContains(a.t, handler, method, url, values, str, msgAndArgs...)
+}
+
+// HTTPBodyNotContainsf asserts that a specified handler returns a
+// body that does not contain a string.
+//
+// a.HTTPBodyNotContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted")
+//
+// Returns whether the assertion was successful (true) or not (false).
+func (a *Assertions) HTTPBodyNotContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPBodyNotContainsf(a.t, handler, method, url, values, str, msg, args...)
}
// HTTPError asserts that a specified handler returns an error status code.
@@ -136,8 +360,23 @@ func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string
// a.HTTPError(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}}
//
// Returns whether the assertion was successful (true) or not (false).
-func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url string, values url.Values) bool {
- return HTTPError(a.t, handler, method, url, values)
+func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPError(a.t, handler, method, url, values, msgAndArgs...)
+}
+
+// HTTPErrorf asserts that a specified handler returns an error status code.
+//
+// a.HTTPErrorf(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}}
+//
+// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false).
+func (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPErrorf(a.t, handler, method, url, values, msg, args...)
}
// HTTPRedirect asserts that a specified handler returns a redirect status code.
@@ -145,8 +384,23 @@ func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url stri
// a.HTTPRedirect(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}}
//
// Returns whether the assertion was successful (true) or not (false).
-func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url string, values url.Values) bool {
- return HTTPRedirect(a.t, handler, method, url, values)
+func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPRedirect(a.t, handler, method, url, values, msgAndArgs...)
+}
+
+// HTTPRedirectf asserts that a specified handler returns a redirect status code.
+//
+// a.HTTPRedirectf(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}}
+//
+// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false).
+func (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPRedirectf(a.t, handler, method, url, values, msg, args...)
}
// HTTPSuccess asserts that a specified handler returns a success status code.
@@ -154,199 +408,549 @@ func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url s
// a.HTTPSuccess(myHandler, "POST", "http://www.google.com", nil)
//
// Returns whether the assertion was successful (true) or not (false).
-func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url string, values url.Values) bool {
- return HTTPSuccess(a.t, handler, method, url, values)
+func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPSuccess(a.t, handler, method, url, values, msgAndArgs...)
+}
+
+// HTTPSuccessf asserts that a specified handler returns a success status code.
+//
+// a.HTTPSuccessf(myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted")
+//
+// Returns whether the assertion was successful (true) or not (false).
+func (a *Assertions) HTTPSuccessf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return HTTPSuccessf(a.t, handler, method, url, values, msg, args...)
}
// Implements asserts that an object is implemented by the specified interface.
//
-// a.Implements((*MyInterface)(nil), new(MyObject), "MyObject")
+// a.Implements((*MyInterface)(nil), new(MyObject))
func (a *Assertions) Implements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Implements(a.t, interfaceObject, object, msgAndArgs...)
}
+// Implementsf asserts that an object is implemented by the specified interface.
+//
+// a.Implementsf((*MyInterface, "error message %s", "formatted")(nil), new(MyObject))
+func (a *Assertions) Implementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Implementsf(a.t, interfaceObject, object, msg, args...)
+}
+
// InDelta asserts that the two numerals are within delta of each other.
//
// a.InDelta(math.Pi, (22 / 7.0), 0.01)
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) InDelta(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return InDelta(a.t, expected, actual, delta, msgAndArgs...)
}
+// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.
+func (a *Assertions) InDeltaMapValues(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return InDeltaMapValues(a.t, expected, actual, delta, msgAndArgs...)
+}
+
+// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.
+func (a *Assertions) InDeltaMapValuesf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return InDeltaMapValuesf(a.t, expected, actual, delta, msg, args...)
+}
+
// InDeltaSlice is the same as InDelta, except it compares two slices.
func (a *Assertions) InDeltaSlice(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return InDeltaSlice(a.t, expected, actual, delta, msgAndArgs...)
}
-// InEpsilon asserts that expected and actual have a relative error less than epsilon
+// InDeltaSlicef is the same as InDelta, except it compares two slices.
+func (a *Assertions) InDeltaSlicef(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return InDeltaSlicef(a.t, expected, actual, delta, msg, args...)
+}
+
+// InDeltaf asserts that the two numerals are within delta of each other.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.InDeltaf(math.Pi, (22 / 7.0, "error message %s", "formatted"), 0.01)
+func (a *Assertions) InDeltaf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return InDeltaf(a.t, expected, actual, delta, msg, args...)
+}
+
+// InEpsilon asserts that expected and actual have a relative error less than epsilon
func (a *Assertions) InEpsilon(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return InEpsilon(a.t, expected, actual, epsilon, msgAndArgs...)
}
// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices.
func (a *Assertions) InEpsilonSlice(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return InEpsilonSlice(a.t, expected, actual, epsilon, msgAndArgs...)
}
+// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices.
+func (a *Assertions) InEpsilonSlicef(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return InEpsilonSlicef(a.t, expected, actual, epsilon, msg, args...)
+}
+
+// InEpsilonf asserts that expected and actual have a relative error less than epsilon
+func (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return InEpsilonf(a.t, expected, actual, epsilon, msg, args...)
+}
+
// IsType asserts that the specified objects are of the same type.
func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return IsType(a.t, expectedType, object, msgAndArgs...)
}
+// IsTypef asserts that the specified objects are of the same type.
+func (a *Assertions) IsTypef(expectedType interface{}, object interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return IsTypef(a.t, expectedType, object, msg, args...)
+}
+
// JSONEq asserts that two JSON strings are equivalent.
//
// a.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`)
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return JSONEq(a.t, expected, actual, msgAndArgs...)
}
+// JSONEqf asserts that two JSON strings are equivalent.
+//
+// a.JSONEqf(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted")
+func (a *Assertions) JSONEqf(expected string, actual string, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return JSONEqf(a.t, expected, actual, msg, args...)
+}
+
// Len asserts that the specified object has specific length.
// Len also fails if the object has a type that len() not accept.
//
-// a.Len(mySlice, 3, "The size of slice is not 3")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Len(mySlice, 3)
func (a *Assertions) Len(object interface{}, length int, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Len(a.t, object, length, msgAndArgs...)
}
-// Nil asserts that the specified object is nil.
+// Lenf asserts that the specified object has specific length.
+// Lenf also fails if the object has a type that len() not accept.
//
-// a.Nil(err, "err should be nothing")
+// a.Lenf(mySlice, 3, "error message %s", "formatted")
+func (a *Assertions) Lenf(object interface{}, length int, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Lenf(a.t, object, length, msg, args...)
+}
+
+// Nil asserts that the specified object is nil.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Nil(err)
func (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Nil(a.t, object, msgAndArgs...)
}
+// Nilf asserts that the specified object is nil.
+//
+// a.Nilf(err, "error message %s", "formatted")
+func (a *Assertions) Nilf(object interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Nilf(a.t, object, msg, args...)
+}
+
// NoError asserts that a function returned no error (i.e. `nil`).
//
// actualObj, err := SomeFunction()
// if a.NoError(err) {
-// assert.Equal(t, actualObj, expectedObj)
+// assert.Equal(t, expectedObj, actualObj)
// }
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) NoError(err error, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return NoError(a.t, err, msgAndArgs...)
}
+// NoErrorf asserts that a function returned no error (i.e. `nil`).
+//
+// actualObj, err := SomeFunction()
+// if a.NoErrorf(err, "error message %s", "formatted") {
+// assert.Equal(t, expectedObj, actualObj)
+// }
+func (a *Assertions) NoErrorf(err error, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NoErrorf(a.t, err, msg, args...)
+}
+
// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the
// specified substring or element.
//
-// a.NotContains("Hello World", "Earth", "But 'Hello World' does NOT contain 'Earth'")
-// a.NotContains(["Hello", "World"], "Earth", "But ['Hello', 'World'] does NOT contain 'Earth'")
-// a.NotContains({"Hello": "World"}, "Earth", "But {'Hello': 'World'} does NOT contain 'Earth'")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.NotContains("Hello World", "Earth")
+// a.NotContains(["Hello", "World"], "Earth")
+// a.NotContains({"Hello": "World"}, "Earth")
func (a *Assertions) NotContains(s interface{}, contains interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return NotContains(a.t, s, contains, msgAndArgs...)
}
+// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the
+// specified substring or element.
+//
+// a.NotContainsf("Hello World", "Earth", "error message %s", "formatted")
+// a.NotContainsf(["Hello", "World"], "Earth", "error message %s", "formatted")
+// a.NotContainsf({"Hello": "World"}, "Earth", "error message %s", "formatted")
+func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotContainsf(a.t, s, contains, msg, args...)
+}
+
// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
// if a.NotEmpty(obj) {
// assert.Equal(t, "two", obj[1])
// }
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return NotEmpty(a.t, object, msgAndArgs...)
}
-// NotEqual asserts that the specified values are NOT equal.
+// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either
+// a slice or a channel with len == 0.
//
-// a.NotEqual(obj1, obj2, "two objects shouldn't be equal")
+// if a.NotEmptyf(obj, "error message %s", "formatted") {
+// assert.Equal(t, "two", obj[1])
+// }
+func (a *Assertions) NotEmptyf(object interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotEmptyf(a.t, object, msg, args...)
+}
+
+// NotEqual asserts that the specified values are NOT equal.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.NotEqual(obj1, obj2)
//
// Pointer variable equality is determined based on the equality of the
// referenced values (as opposed to the memory addresses).
func (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return NotEqual(a.t, expected, actual, msgAndArgs...)
}
-// NotNil asserts that the specified object is not nil.
+// NotEqualf asserts that the specified values are NOT equal.
//
-// a.NotNil(err, "err should be something")
+// a.NotEqualf(obj1, obj2, "error message %s", "formatted")
//
-// Returns whether the assertion was successful (true) or not (false).
+// Pointer variable equality is determined based on the equality of the
+// referenced values (as opposed to the memory addresses).
+func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotEqualf(a.t, expected, actual, msg, args...)
+}
+
+// NotNil asserts that the specified object is not nil.
+//
+// a.NotNil(err)
func (a *Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return NotNil(a.t, object, msgAndArgs...)
}
-// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.
+// NotNilf asserts that the specified object is not nil.
//
-// a.NotPanics(func(){
-// RemainCalm()
-// }, "Calling RemainCalm() should NOT panic")
+// a.NotNilf(err, "error message %s", "formatted")
+func (a *Assertions) NotNilf(object interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotNilf(a.t, object, msg, args...)
+}
+
+// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.NotPanics(func(){ RemainCalm() })
func (a *Assertions) NotPanics(f PanicTestFunc, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return NotPanics(a.t, f, msgAndArgs...)
}
+// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic.
+//
+// a.NotPanicsf(func(){ RemainCalm() }, "error message %s", "formatted")
+func (a *Assertions) NotPanicsf(f PanicTestFunc, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotPanicsf(a.t, f, msg, args...)
+}
+
// NotRegexp asserts that a specified regexp does not match a string.
//
// a.NotRegexp(regexp.MustCompile("starts"), "it's starting")
// a.NotRegexp("^start", "it's not starting")
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return NotRegexp(a.t, rx, str, msgAndArgs...)
}
-// NotZero asserts that i is not the zero value for its type and returns the truth.
+// NotRegexpf asserts that a specified regexp does not match a string.
+//
+// a.NotRegexpf(regexp.MustCompile("starts", "error message %s", "formatted"), "it's starting")
+// a.NotRegexpf("^start", "it's not starting", "error message %s", "formatted")
+func (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotRegexpf(a.t, rx, str, msg, args...)
+}
+
+// NotSubset asserts that the specified list(array, slice...) contains not all
+// elements given in the specified subset(array, slice...).
+//
+// a.NotSubset([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]")
+func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotSubset(a.t, list, subset, msgAndArgs...)
+}
+
+// NotSubsetf asserts that the specified list(array, slice...) contains not all
+// elements given in the specified subset(array, slice...).
+//
+// a.NotSubsetf([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted")
+func (a *Assertions) NotSubsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotSubsetf(a.t, list, subset, msg, args...)
+}
+
+// NotZero asserts that i is not the zero value for its type.
func (a *Assertions) NotZero(i interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return NotZero(a.t, i, msgAndArgs...)
}
+// NotZerof asserts that i is not the zero value for its type.
+func (a *Assertions) NotZerof(i interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return NotZerof(a.t, i, msg, args...)
+}
+
// Panics asserts that the code inside the specified PanicTestFunc panics.
//
-// a.Panics(func(){
-// GoCrazy()
-// }, "Calling GoCrazy() should panic")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Panics(func(){ GoCrazy() })
func (a *Assertions) Panics(f PanicTestFunc, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Panics(a.t, f, msgAndArgs...)
}
+// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that
+// the recovered panic value equals the expected panic value.
+//
+// a.PanicsWithValue("crazy error", func(){ GoCrazy() })
+func (a *Assertions) PanicsWithValue(expected interface{}, f PanicTestFunc, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return PanicsWithValue(a.t, expected, f, msgAndArgs...)
+}
+
+// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that
+// the recovered panic value equals the expected panic value.
+//
+// a.PanicsWithValuef("crazy error", func(){ GoCrazy() }, "error message %s", "formatted")
+func (a *Assertions) PanicsWithValuef(expected interface{}, f PanicTestFunc, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return PanicsWithValuef(a.t, expected, f, msg, args...)
+}
+
+// Panicsf asserts that the code inside the specified PanicTestFunc panics.
+//
+// a.Panicsf(func(){ GoCrazy() }, "error message %s", "formatted")
+func (a *Assertions) Panicsf(f PanicTestFunc, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Panicsf(a.t, f, msg, args...)
+}
+
// Regexp asserts that a specified regexp matches a string.
//
// a.Regexp(regexp.MustCompile("start"), "it's starting")
// a.Regexp("start...$", "it's not starting")
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Regexp(a.t, rx, str, msgAndArgs...)
}
-// True asserts that the specified value is true.
+// Regexpf asserts that a specified regexp matches a string.
//
-// a.True(myBool, "myBool should be true")
+// a.Regexpf(regexp.MustCompile("start", "error message %s", "formatted"), "it's starting")
+// a.Regexpf("start...$", "it's not starting", "error message %s", "formatted")
+func (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Regexpf(a.t, rx, str, msg, args...)
+}
+
+// Subset asserts that the specified list(array, slice...) contains all
+// elements given in the specified subset(array, slice...).
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Subset([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]")
+func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Subset(a.t, list, subset, msgAndArgs...)
+}
+
+// Subsetf asserts that the specified list(array, slice...) contains all
+// elements given in the specified subset(array, slice...).
+//
+// a.Subsetf([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted")
+func (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Subsetf(a.t, list, subset, msg, args...)
+}
+
+// True asserts that the specified value is true.
+//
+// a.True(myBool)
func (a *Assertions) True(value bool, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return True(a.t, value, msgAndArgs...)
}
-// WithinDuration asserts that the two times are within duration delta of each other.
+// Truef asserts that the specified value is true.
//
-// a.WithinDuration(time.Now(), time.Now(), 10*time.Second, "The difference should not be more than 10s")
+// a.Truef(myBool, "error message %s", "formatted")
+func (a *Assertions) Truef(value bool, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Truef(a.t, value, msg, args...)
+}
+
+// WithinDuration asserts that the two times are within duration delta of each other.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.WithinDuration(time.Now(), time.Now(), 10*time.Second)
func (a *Assertions) WithinDuration(expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return WithinDuration(a.t, expected, actual, delta, msgAndArgs...)
}
-// Zero asserts that i is the zero value for its type and returns the truth.
+// WithinDurationf asserts that the two times are within duration delta of each other.
+//
+// a.WithinDurationf(time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted")
+func (a *Assertions) WithinDurationf(expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return WithinDurationf(a.t, expected, actual, delta, msg, args...)
+}
+
+// Zero asserts that i is the zero value for its type.
func (a *Assertions) Zero(i interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
return Zero(a.t, i, msgAndArgs...)
}
+
+// Zerof asserts that i is the zero value for its type.
+func (a *Assertions) Zerof(i interface{}, msg string, args ...interface{}) bool {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ return Zerof(a.t, i, msg, args...)
+}
diff --git a/vendor/github.com/stretchr/testify/assert/assertions.go b/vendor/github.com/stretchr/testify/assert/assertions.go
index d1552e5e3..9bd4a80e4 100644
--- a/vendor/github.com/stretchr/testify/assert/assertions.go
+++ b/vendor/github.com/stretchr/testify/assert/assertions.go
@@ -4,8 +4,10 @@ import (
"bufio"
"bytes"
"encoding/json"
+ "errors"
"fmt"
"math"
+ "os"
"reflect"
"regexp"
"runtime"
@@ -18,11 +20,29 @@ import (
"github.com/pmezard/go-difflib/difflib"
)
+//go:generate go run ../_codegen/main.go -output-package=assert -template=assertion_format.go.tmpl
+
// TestingT is an interface wrapper around *testing.T
type TestingT interface {
Errorf(format string, args ...interface{})
}
+// ComparisonAssertionFunc is a common function prototype when comparing two values. Can be useful
+// for table driven tests.
+type ComparisonAssertionFunc func(TestingT, interface{}, interface{}, ...interface{}) bool
+
+// ValueAssertionFunc is a common function prototype when validating a single value. Can be useful
+// for table driven tests.
+type ValueAssertionFunc func(TestingT, interface{}, ...interface{}) bool
+
+// BoolAssertionFunc is a common function prototype when validating a bool value. Can be useful
+// for table driven tests.
+type BoolAssertionFunc func(TestingT, bool, ...interface{}) bool
+
+// ErrorAssertionFunc is a common function prototype when validating an error value. Can be useful
+// for table driven tests.
+type ErrorAssertionFunc func(TestingT, error, ...interface{}) bool
+
// Comparison a custom function that returns true on success and false on failure
type Comparison func() (success bool)
@@ -34,13 +54,23 @@ type Comparison func() (success bool)
//
// This function does no assertion of any kind.
func ObjectsAreEqual(expected, actual interface{}) bool {
-
if expected == nil || actual == nil {
return expected == actual
}
- return reflect.DeepEqual(expected, actual)
+ exp, ok := expected.([]byte)
+ if !ok {
+ return reflect.DeepEqual(expected, actual)
+ }
+ act, ok := actual.([]byte)
+ if !ok {
+ return false
+ }
+ if exp == nil || act == nil {
+ return exp == nil && act == nil
+ }
+ return bytes.Equal(exp, act)
}
// ObjectsAreEqualValues gets whether two objects are equal, or if their
@@ -108,10 +138,12 @@ func CallerInfo() []string {
}
parts := strings.Split(file, "/")
- dir := parts[len(parts)-2]
file = parts[len(parts)-1]
- if (dir != "assert" && dir != "mock" && dir != "require") || file == "mock_test.go" {
- callers = append(callers, fmt.Sprintf("%s:%d", file, line))
+ if len(parts) > 1 {
+ dir := parts[len(parts)-2]
+ if (dir != "assert" && dir != "mock" && dir != "require") || file == "mock_test.go" {
+ callers = append(callers, fmt.Sprintf("%s:%d", file, line))
+ }
}
// Drop the package
@@ -142,27 +174,16 @@ func isTest(name, prefix string) bool {
return !unicode.IsLower(rune)
}
-// getWhitespaceString returns a string that is long enough to overwrite the default
-// output from the go testing framework.
-func getWhitespaceString() string {
-
- _, file, line, ok := runtime.Caller(1)
- if !ok {
- return ""
- }
- parts := strings.Split(file, "/")
- file = parts[len(parts)-1]
-
- return strings.Repeat(" ", len(fmt.Sprintf("%s:%d: ", file, line)))
-
-}
-
func messageFromMsgAndArgs(msgAndArgs ...interface{}) string {
if len(msgAndArgs) == 0 || msgAndArgs == nil {
return ""
}
if len(msgAndArgs) == 1 {
- return msgAndArgs[0].(string)
+ msg := msgAndArgs[0]
+ if msgAsStr, ok := msg.(string); ok {
+ return msgAsStr
+ }
+ return fmt.Sprintf("%+v", msg)
}
if len(msgAndArgs) > 1 {
return fmt.Sprintf(msgAndArgs[0].(string), msgAndArgs[1:]...)
@@ -181,7 +202,7 @@ func indentMessageLines(message string, longestLabelLen int) string {
// no need to align first line because it starts at the correct location (after the label)
if i != 0 {
// append alignLen+1 spaces to align with "{{longestLabel}}:" before adding tab
- outBuf.WriteString("\n\r\t" + strings.Repeat(" ", longestLabelLen +1) + "\t")
+ outBuf.WriteString("\n\t" + strings.Repeat(" ", longestLabelLen+1) + "\t")
}
outBuf.WriteString(scanner.Text())
}
@@ -195,6 +216,9 @@ type failNower interface {
// FailNow fails test
func FailNow(t TestingT, failureMessage string, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
Fail(t, failureMessage, msgAndArgs...)
// We cannot extend TestingT with FailNow() and
@@ -213,29 +237,39 @@ func FailNow(t TestingT, failureMessage string, msgAndArgs ...interface{}) bool
// Fail reports a failure through
func Fail(t TestingT, failureMessage string, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
content := []labeledContent{
- {"Error Trace", strings.Join(CallerInfo(), "\n\r\t\t\t")},
+ {"Error Trace", strings.Join(CallerInfo(), "\n\t\t\t")},
{"Error", failureMessage},
}
+ // Add test name if the Go version supports it
+ if n, ok := t.(interface {
+ Name() string
+ }); ok {
+ content = append(content, labeledContent{"Test", n.Name()})
+ }
+
message := messageFromMsgAndArgs(msgAndArgs...)
if len(message) > 0 {
content = append(content, labeledContent{"Messages", message})
}
- t.Errorf("\r" + getWhitespaceString() + labeledOutput(content...))
+ t.Errorf("\n%s", ""+labeledOutput(content...))
return false
}
type labeledContent struct {
- label string
+ label string
content string
}
// labeledOutput returns a string consisting of the provided labeledContent. Each labeled output is appended in the following manner:
//
-// \r\t{{label}}:{{align_spaces}}\t{{content}}\n
+// \t{{label}}:{{align_spaces}}\t{{content}}\n
//
// The initial carriage return is required to undo/erase any padding added by testing.T.Errorf. The "\t{{label}}:" is for the label.
// If a label is shorter than the longest label provided, padding spaces are added to make all the labels match in length. Once this
@@ -251,28 +285,35 @@ func labeledOutput(content ...labeledContent) string {
}
var output string
for _, v := range content {
- output += "\r\t" + v.label + ":" + strings.Repeat(" ", longestLabel-len(v.label)) + "\t" + indentMessageLines(v.content, longestLabel) + "\n"
+ output += "\t" + v.label + ":" + strings.Repeat(" ", longestLabel-len(v.label)) + "\t" + indentMessageLines(v.content, longestLabel) + "\n"
}
return output
}
// Implements asserts that an object is implemented by the specified interface.
//
-// assert.Implements(t, (*MyInterface)(nil), new(MyObject), "MyObject")
+// assert.Implements(t, (*MyInterface)(nil), new(MyObject))
func Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool {
-
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
interfaceType := reflect.TypeOf(interfaceObject).Elem()
+ if object == nil {
+ return Fail(t, fmt.Sprintf("Cannot check if nil implements %v", interfaceType), msgAndArgs...)
+ }
if !reflect.TypeOf(object).Implements(interfaceType) {
return Fail(t, fmt.Sprintf("%T must implement %v", object, interfaceType), msgAndArgs...)
}
return true
-
}
// IsType asserts that the specified objects are of the same type.
func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if !ObjectsAreEqual(reflect.TypeOf(object), reflect.TypeOf(expectedType)) {
return Fail(t, fmt.Sprintf("Object expected to be of type %v, but was %v", reflect.TypeOf(expectedType), reflect.TypeOf(object)), msgAndArgs...)
@@ -283,20 +324,26 @@ func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs
// Equal asserts that two objects are equal.
//
-// assert.Equal(t, 123, 123, "123 and 123 should be equal")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Equal(t, 123, 123)
//
// Pointer variable equality is determined based on the equality of the
-// referenced values (as opposed to the memory addresses).
+// referenced values (as opposed to the memory addresses). Function equality
+// cannot be determined and will always fail.
func Equal(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if err := validateEqualArgs(expected, actual); err != nil {
+ return Fail(t, fmt.Sprintf("Invalid operation: %#v == %#v (%s)",
+ expected, actual, err), msgAndArgs...)
+ }
if !ObjectsAreEqual(expected, actual) {
diff := diff(expected, actual)
expected, actual = formatUnequalValues(expected, actual)
return Fail(t, fmt.Sprintf("Not equal: \n"+
"expected: %s\n"+
- "received: %s%s", expected, actual, diff), msgAndArgs...)
+ "actual : %s%s", expected, actual, diff), msgAndArgs...)
}
return true
@@ -322,35 +369,37 @@ func formatUnequalValues(expected, actual interface{}) (e string, a string) {
// EqualValues asserts that two objects are equal or convertable to the same types
// and equal.
//
-// assert.EqualValues(t, uint32(123), int32(123), "123 and 123 should be equal")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.EqualValues(t, uint32(123), int32(123))
func EqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if !ObjectsAreEqualValues(expected, actual) {
diff := diff(expected, actual)
expected, actual = formatUnequalValues(expected, actual)
return Fail(t, fmt.Sprintf("Not equal: \n"+
"expected: %s\n"+
- "received: %s%s", expected, actual, diff), msgAndArgs...)
+ "actual : %s%s", expected, actual, diff), msgAndArgs...)
}
return true
}
-// Exactly asserts that two objects are equal is value and type.
+// Exactly asserts that two objects are equal in value and type.
//
-// assert.Exactly(t, int32(123), int64(123), "123 and 123 should NOT be equal")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Exactly(t, int32(123), int64(123))
func Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
aType := reflect.TypeOf(expected)
bType := reflect.TypeOf(actual)
if aType != bType {
- return Fail(t, fmt.Sprintf("Types expected to match exactly\n\r\t%v != %v", aType, bType), msgAndArgs...)
+ return Fail(t, fmt.Sprintf("Types expected to match exactly\n\t%v != %v", aType, bType), msgAndArgs...)
}
return Equal(t, expected, actual, msgAndArgs...)
@@ -359,16 +408,28 @@ func Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}
// NotNil asserts that the specified object is not nil.
//
-// assert.NotNil(t, err, "err should be something")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.NotNil(t, err)
func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if !isNil(object) {
return true
}
return Fail(t, "Expected value not to be nil.", msgAndArgs...)
}
+// containsKind checks if a specified kind in the slice of kinds.
+func containsKind(kinds []reflect.Kind, kind reflect.Kind) bool {
+ for i := 0; i < len(kinds); i++ {
+ if kind == kinds[i] {
+ return true
+ }
+ }
+
+ return false
+}
+
// isNil checks if a specified object is nil or not, without Failing.
func isNil(object interface{}) bool {
if object == nil {
@@ -377,7 +438,14 @@ func isNil(object interface{}) bool {
value := reflect.ValueOf(object)
kind := value.Kind()
- if kind >= reflect.Chan && kind <= reflect.Slice && value.IsNil() {
+ isNilableKind := containsKind(
+ []reflect.Kind{
+ reflect.Chan, reflect.Func,
+ reflect.Interface, reflect.Map,
+ reflect.Ptr, reflect.Slice},
+ kind)
+
+ if isNilableKind && value.IsNil() {
return true
}
@@ -386,85 +454,53 @@ func isNil(object interface{}) bool {
// Nil asserts that the specified object is nil.
//
-// assert.Nil(t, err, "err should be nothing")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Nil(t, err)
func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if isNil(object) {
return true
}
return Fail(t, fmt.Sprintf("Expected nil, but got: %#v", object), msgAndArgs...)
}
-var numericZeros = []interface{}{
- int(0),
- int8(0),
- int16(0),
- int32(0),
- int64(0),
- uint(0),
- uint8(0),
- uint16(0),
- uint32(0),
- uint64(0),
- float32(0),
- float64(0),
-}
-
// isEmpty gets whether the specified object is considered empty or not.
func isEmpty(object interface{}) bool {
+ // get nil case out of the way
if object == nil {
return true
- } else if object == "" {
- return true
- } else if object == false {
- return true
- }
-
- for _, v := range numericZeros {
- if object == v {
- return true
- }
}
objValue := reflect.ValueOf(object)
switch objValue.Kind() {
- case reflect.Map:
- fallthrough
- case reflect.Slice, reflect.Chan:
- {
- return (objValue.Len() == 0)
- }
- case reflect.Struct:
- switch object.(type) {
- case time.Time:
- return object.(time.Time).IsZero()
- }
+ // collection types are empty when they have no element
+ case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
+ return objValue.Len() == 0
+ // pointers are empty if nil or if the value they point to is empty
case reflect.Ptr:
- {
- if objValue.IsNil() {
- return true
- }
- switch object.(type) {
- case *time.Time:
- return object.(*time.Time).IsZero()
- default:
- return false
- }
+ if objValue.IsNil() {
+ return true
}
+ deref := objValue.Elem().Interface()
+ return isEmpty(deref)
+ // for all other types, compare against the zero value
+ default:
+ zero := reflect.Zero(objValue.Type())
+ return reflect.DeepEqual(object, zero.Interface())
}
- return false
}
// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
// assert.Empty(t, obj)
-//
-// Returns whether the assertion was successful (true) or not (false).
func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
pass := isEmpty(object)
if !pass {
@@ -481,9 +517,10 @@ func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
// if assert.NotEmpty(t, obj) {
// assert.Equal(t, "two", obj[1])
// }
-//
-// Returns whether the assertion was successful (true) or not (false).
func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
pass := !isEmpty(object)
if !pass {
@@ -509,10 +546,11 @@ func getLen(x interface{}) (ok bool, length int) {
// Len asserts that the specified object has specific length.
// Len also fails if the object has a type that len() not accept.
//
-// assert.Len(t, mySlice, 3, "The size of slice is not 3")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Len(t, mySlice, 3)
func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
ok, l := getLen(object)
if !ok {
return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", object), msgAndArgs...)
@@ -526,10 +564,16 @@ func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{})
// True asserts that the specified value is true.
//
-// assert.True(t, myBool, "myBool should be true")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.True(t, myBool)
func True(t TestingT, value bool, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if h, ok := t.(interface {
+ Helper()
+ }); ok {
+ h.Helper()
+ }
if value != true {
return Fail(t, "Should be true", msgAndArgs...)
@@ -541,10 +585,11 @@ func True(t TestingT, value bool, msgAndArgs ...interface{}) bool {
// False asserts that the specified value is false.
//
-// assert.False(t, myBool, "myBool should be false")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.False(t, myBool)
func False(t TestingT, value bool, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if value != false {
return Fail(t, "Should be false", msgAndArgs...)
@@ -556,13 +601,18 @@ func False(t TestingT, value bool, msgAndArgs ...interface{}) bool {
// NotEqual asserts that the specified values are NOT equal.
//
-// assert.NotEqual(t, obj1, obj2, "two objects shouldn't be equal")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.NotEqual(t, obj1, obj2)
//
// Pointer variable equality is determined based on the equality of the
// referenced values (as opposed to the memory addresses).
func NotEqual(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if err := validateEqualArgs(expected, actual); err != nil {
+ return Fail(t, fmt.Sprintf("Invalid operation: %#v != %#v (%s)",
+ expected, actual, err), msgAndArgs...)
+ }
if ObjectsAreEqual(expected, actual) {
return Fail(t, fmt.Sprintf("Should not be: %#v\n", actual), msgAndArgs...)
@@ -613,12 +663,13 @@ func includeElement(list interface{}, element interface{}) (ok, found bool) {
// Contains asserts that the specified string, list(array, slice...) or map contains the
// specified substring or element.
//
-// assert.Contains(t, "Hello World", "World", "But 'Hello World' does contain 'World'")
-// assert.Contains(t, ["Hello", "World"], "World", "But ["Hello", "World"] does contain 'World'")
-// assert.Contains(t, {"Hello": "World"}, "Hello", "But {'Hello': 'World'} does contain 'Hello'")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Contains(t, "Hello World", "World")
+// assert.Contains(t, ["Hello", "World"], "World")
+// assert.Contains(t, {"Hello": "World"}, "Hello")
func Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
ok, found := includeElement(s, contains)
if !ok {
@@ -635,12 +686,13 @@ func Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bo
// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the
// specified substring or element.
//
-// assert.NotContains(t, "Hello World", "Earth", "But 'Hello World' does NOT contain 'Earth'")
-// assert.NotContains(t, ["Hello", "World"], "Earth", "But ['Hello', 'World'] does NOT contain 'Earth'")
-// assert.NotContains(t, {"Hello": "World"}, "Earth", "But {'Hello': 'World'} does NOT contain 'Earth'")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.NotContains(t, "Hello World", "Earth")
+// assert.NotContains(t, ["Hello", "World"], "Earth")
+// assert.NotContains(t, {"Hello": "World"}, "Earth")
func NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
ok, found := includeElement(s, contains)
if !ok {
@@ -654,8 +706,156 @@ func NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{})
}
+// Subset asserts that the specified list(array, slice...) contains all
+// elements given in the specified subset(array, slice...).
+//
+// assert.Subset(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]")
+func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if subset == nil {
+ return true // we consider nil to be equal to the nil set
+ }
+
+ subsetValue := reflect.ValueOf(subset)
+ defer func() {
+ if e := recover(); e != nil {
+ ok = false
+ }
+ }()
+
+ listKind := reflect.TypeOf(list).Kind()
+ subsetKind := reflect.TypeOf(subset).Kind()
+
+ if listKind != reflect.Array && listKind != reflect.Slice {
+ return Fail(t, fmt.Sprintf("%q has an unsupported type %s", list, listKind), msgAndArgs...)
+ }
+
+ if subsetKind != reflect.Array && subsetKind != reflect.Slice {
+ return Fail(t, fmt.Sprintf("%q has an unsupported type %s", subset, subsetKind), msgAndArgs...)
+ }
+
+ for i := 0; i < subsetValue.Len(); i++ {
+ element := subsetValue.Index(i).Interface()
+ ok, found := includeElement(list, element)
+ if !ok {
+ return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", list), msgAndArgs...)
+ }
+ if !found {
+ return Fail(t, fmt.Sprintf("\"%s\" does not contain \"%s\"", list, element), msgAndArgs...)
+ }
+ }
+
+ return true
+}
+
+// NotSubset asserts that the specified list(array, slice...) contains not all
+// elements given in the specified subset(array, slice...).
+//
+// assert.NotSubset(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]")
+func NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if subset == nil {
+ return Fail(t, fmt.Sprintf("nil is the empty set which is a subset of every set"), msgAndArgs...)
+ }
+
+ subsetValue := reflect.ValueOf(subset)
+ defer func() {
+ if e := recover(); e != nil {
+ ok = false
+ }
+ }()
+
+ listKind := reflect.TypeOf(list).Kind()
+ subsetKind := reflect.TypeOf(subset).Kind()
+
+ if listKind != reflect.Array && listKind != reflect.Slice {
+ return Fail(t, fmt.Sprintf("%q has an unsupported type %s", list, listKind), msgAndArgs...)
+ }
+
+ if subsetKind != reflect.Array && subsetKind != reflect.Slice {
+ return Fail(t, fmt.Sprintf("%q has an unsupported type %s", subset, subsetKind), msgAndArgs...)
+ }
+
+ for i := 0; i < subsetValue.Len(); i++ {
+ element := subsetValue.Index(i).Interface()
+ ok, found := includeElement(list, element)
+ if !ok {
+ return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", list), msgAndArgs...)
+ }
+ if !found {
+ return true
+ }
+ }
+
+ return Fail(t, fmt.Sprintf("%q is a subset of %q", subset, list), msgAndArgs...)
+}
+
+// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should match.
+//
+// assert.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2])
+func ElementsMatch(t TestingT, listA, listB interface{}, msgAndArgs ...interface{}) (ok bool) {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if isEmpty(listA) && isEmpty(listB) {
+ return true
+ }
+
+ aKind := reflect.TypeOf(listA).Kind()
+ bKind := reflect.TypeOf(listB).Kind()
+
+ if aKind != reflect.Array && aKind != reflect.Slice {
+ return Fail(t, fmt.Sprintf("%q has an unsupported type %s", listA, aKind), msgAndArgs...)
+ }
+
+ if bKind != reflect.Array && bKind != reflect.Slice {
+ return Fail(t, fmt.Sprintf("%q has an unsupported type %s", listB, bKind), msgAndArgs...)
+ }
+
+ aValue := reflect.ValueOf(listA)
+ bValue := reflect.ValueOf(listB)
+
+ aLen := aValue.Len()
+ bLen := bValue.Len()
+
+ if aLen != bLen {
+ return Fail(t, fmt.Sprintf("lengths don't match: %d != %d", aLen, bLen), msgAndArgs...)
+ }
+
+ // Mark indexes in bValue that we already used
+ visited := make([]bool, bLen)
+ for i := 0; i < aLen; i++ {
+ element := aValue.Index(i).Interface()
+ found := false
+ for j := 0; j < bLen; j++ {
+ if visited[j] {
+ continue
+ }
+ if ObjectsAreEqual(bValue.Index(j).Interface(), element) {
+ visited[j] = true
+ found = true
+ break
+ }
+ }
+ if !found {
+ return Fail(t, fmt.Sprintf("element %s appears more times in %s than in %s", element, aValue, bValue), msgAndArgs...)
+ }
+ }
+
+ return true
+}
+
// Condition uses a Comparison to assert a complex condition.
func Condition(t TestingT, comp Comparison, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
result := comp()
if !result {
Fail(t, "Condition failed!", msgAndArgs...)
@@ -691,31 +891,49 @@ func didPanic(f PanicTestFunc) (bool, interface{}) {
// Panics asserts that the code inside the specified PanicTestFunc panics.
//
-// assert.Panics(t, func(){
-// GoCrazy()
-// }, "Calling GoCrazy() should panic")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Panics(t, func(){ GoCrazy() })
func Panics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if funcDidPanic, panicValue := didPanic(f); !funcDidPanic {
- return Fail(t, fmt.Sprintf("func %#v should panic\n\r\tPanic value:\t%v", f, panicValue), msgAndArgs...)
+ return Fail(t, fmt.Sprintf("func %#v should panic\n\tPanic value:\t%#v", f, panicValue), msgAndArgs...)
}
return true
}
-// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.
+// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that
+// the recovered panic value equals the expected panic value.
//
-// assert.NotPanics(t, func(){
-// RemainCalm()
-// }, "Calling RemainCalm() should NOT panic")
+// assert.PanicsWithValue(t, "crazy error", func(){ GoCrazy() })
+func PanicsWithValue(t TestingT, expected interface{}, f PanicTestFunc, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+
+ funcDidPanic, panicValue := didPanic(f)
+ if !funcDidPanic {
+ return Fail(t, fmt.Sprintf("func %#v should panic\n\tPanic value:\t%#v", f, panicValue), msgAndArgs...)
+ }
+ if panicValue != expected {
+ return Fail(t, fmt.Sprintf("func %#v should panic with value:\t%#v\n\tPanic value:\t%#v", f, expected, panicValue), msgAndArgs...)
+ }
+
+ return true
+}
+
+// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.
//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.NotPanics(t, func(){ RemainCalm() })
func NotPanics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if funcDidPanic, panicValue := didPanic(f); funcDidPanic {
- return Fail(t, fmt.Sprintf("func %#v should not panic\n\r\tPanic value:\t%v", f, panicValue), msgAndArgs...)
+ return Fail(t, fmt.Sprintf("func %#v should not panic\n\tPanic value:\t%v", f, panicValue), msgAndArgs...)
}
return true
@@ -723,10 +941,11 @@ func NotPanics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool {
// WithinDuration asserts that the two times are within duration delta of each other.
//
-// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second, "The difference should not be more than 10s")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second)
func WithinDuration(t TestingT, expected, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
dt := expected.Sub(actual)
if dt < -delta || dt > delta {
@@ -763,6 +982,8 @@ func toFloat(x interface{}) (float64, bool) {
xf = float64(xn)
case float64:
xf = float64(xn)
+ case time.Duration:
+ xf = float64(xn)
default:
xok = false
}
@@ -773,9 +994,10 @@ func toFloat(x interface{}) (float64, bool) {
// InDelta asserts that the two numerals are within delta of each other.
//
// assert.InDelta(t, math.Pi, (22 / 7.0), 0.01)
-//
-// Returns whether the assertion was successful (true) or not (false).
func InDelta(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
af, aok := toFloat(expected)
bf, bok := toFloat(actual)
@@ -785,7 +1007,7 @@ func InDelta(t TestingT, expected, actual interface{}, delta float64, msgAndArgs
}
if math.IsNaN(af) {
- return Fail(t, fmt.Sprintf("Actual must not be NaN"), msgAndArgs...)
+ return Fail(t, fmt.Sprintf("Expected must not be NaN"), msgAndArgs...)
}
if math.IsNaN(bf) {
@@ -802,6 +1024,9 @@ func InDelta(t TestingT, expected, actual interface{}, delta float64, msgAndArgs
// InDeltaSlice is the same as InDelta, except it compares two slices.
func InDeltaSlice(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if expected == nil || actual == nil ||
reflect.TypeOf(actual).Kind() != reflect.Slice ||
reflect.TypeOf(expected).Kind() != reflect.Slice {
@@ -812,7 +1037,7 @@ func InDeltaSlice(t TestingT, expected, actual interface{}, delta float64, msgAn
expectedSlice := reflect.ValueOf(expected)
for i := 0; i < actualSlice.Len(); i++ {
- result := InDelta(t, actualSlice.Index(i).Interface(), expectedSlice.Index(i).Interface(), delta)
+ result := InDelta(t, actualSlice.Index(i).Interface(), expectedSlice.Index(i).Interface(), delta, msgAndArgs...)
if !result {
return result
}
@@ -821,6 +1046,50 @@ func InDeltaSlice(t TestingT, expected, actual interface{}, delta float64, msgAn
return true
}
+// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.
+func InDeltaMapValues(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ if expected == nil || actual == nil ||
+ reflect.TypeOf(actual).Kind() != reflect.Map ||
+ reflect.TypeOf(expected).Kind() != reflect.Map {
+ return Fail(t, "Arguments must be maps", msgAndArgs...)
+ }
+
+ expectedMap := reflect.ValueOf(expected)
+ actualMap := reflect.ValueOf(actual)
+
+ if expectedMap.Len() != actualMap.Len() {
+ return Fail(t, "Arguments must have the same number of keys", msgAndArgs...)
+ }
+
+ for _, k := range expectedMap.MapKeys() {
+ ev := expectedMap.MapIndex(k)
+ av := actualMap.MapIndex(k)
+
+ if !ev.IsValid() {
+ return Fail(t, fmt.Sprintf("missing key %q in expected map", k), msgAndArgs...)
+ }
+
+ if !av.IsValid() {
+ return Fail(t, fmt.Sprintf("missing key %q in actual map", k), msgAndArgs...)
+ }
+
+ if !InDelta(
+ t,
+ ev.Interface(),
+ av.Interface(),
+ delta,
+ msgAndArgs...,
+ ) {
+ return false
+ }
+ }
+
+ return true
+}
+
func calcRelativeError(expected, actual interface{}) (float64, error) {
af, aok := toFloat(expected)
if !aok {
@@ -831,23 +1100,24 @@ func calcRelativeError(expected, actual interface{}) (float64, error) {
}
bf, bok := toFloat(actual)
if !bok {
- return 0, fmt.Errorf("expected value %q cannot be converted to float", actual)
+ return 0, fmt.Errorf("actual value %q cannot be converted to float", actual)
}
return math.Abs(af-bf) / math.Abs(af), nil
}
// InEpsilon asserts that expected and actual have a relative error less than epsilon
-//
-// Returns whether the assertion was successful (true) or not (false).
func InEpsilon(t TestingT, expected, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
actualEpsilon, err := calcRelativeError(expected, actual)
if err != nil {
return Fail(t, err.Error(), msgAndArgs...)
}
if actualEpsilon > epsilon {
return Fail(t, fmt.Sprintf("Relative error is too high: %#v (expected)\n"+
- " < %#v (actual)", actualEpsilon, epsilon), msgAndArgs...)
+ " < %#v (actual)", epsilon, actualEpsilon), msgAndArgs...)
}
return true
@@ -855,6 +1125,9 @@ func InEpsilon(t TestingT, expected, actual interface{}, epsilon float64, msgAnd
// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices.
func InEpsilonSlice(t TestingT, expected, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if expected == nil || actual == nil ||
reflect.TypeOf(actual).Kind() != reflect.Slice ||
reflect.TypeOf(expected).Kind() != reflect.Slice {
@@ -882,11 +1155,12 @@ func InEpsilonSlice(t TestingT, expected, actual interface{}, epsilon float64, m
//
// actualObj, err := SomeFunction()
// if assert.NoError(t, err) {
-// assert.Equal(t, actualObj, expectedObj)
+// assert.Equal(t, expectedObj, actualObj)
// }
-//
-// Returns whether the assertion was successful (true) or not (false).
func NoError(t TestingT, err error, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if err != nil {
return Fail(t, fmt.Sprintf("Received unexpected error:\n%+v", err), msgAndArgs...)
}
@@ -897,12 +1171,13 @@ func NoError(t TestingT, err error, msgAndArgs ...interface{}) bool {
// Error asserts that a function returned an error (i.e. not `nil`).
//
// actualObj, err := SomeFunction()
-// if assert.Error(t, err, "An error was expected") {
-// assert.Equal(t, err, expectedError)
+// if assert.Error(t, err) {
+// assert.Equal(t, expectedError, err)
// }
-//
-// Returns whether the assertion was successful (true) or not (false).
func Error(t TestingT, err error, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if err == nil {
return Fail(t, "An error is expected but got nil.", msgAndArgs...)
@@ -915,10 +1190,11 @@ func Error(t TestingT, err error, msgAndArgs ...interface{}) bool {
// and that it is equal to the provided error.
//
// actualObj, err := SomeFunction()
-// assert.EqualError(t, err, expectedErrorString, "An error was expected")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.EqualError(t, err, expectedErrorString)
func EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if !Error(t, theError, msgAndArgs...) {
return false
}
@@ -928,7 +1204,7 @@ func EqualError(t TestingT, theError error, errString string, msgAndArgs ...inte
if expected != actual {
return Fail(t, fmt.Sprintf("Error message not equal:\n"+
"expected: %q\n"+
- "received: %q", expected, actual), msgAndArgs...)
+ "actual : %q", expected, actual), msgAndArgs...)
}
return true
}
@@ -951,9 +1227,10 @@ func matchRegexp(rx interface{}, str interface{}) bool {
//
// assert.Regexp(t, regexp.MustCompile("start"), "it's starting")
// assert.Regexp(t, "start...$", "it's not starting")
-//
-// Returns whether the assertion was successful (true) or not (false).
func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
match := matchRegexp(rx, str)
@@ -968,9 +1245,10 @@ func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface
//
// assert.NotRegexp(t, regexp.MustCompile("starts"), "it's starting")
// assert.NotRegexp(t, "^start", "it's not starting")
-//
-// Returns whether the assertion was successful (true) or not (false).
func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
match := matchRegexp(rx, str)
if match {
@@ -981,28 +1259,71 @@ func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interf
}
-// Zero asserts that i is the zero value for its type and returns the truth.
+// Zero asserts that i is the zero value for its type.
func Zero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if i != nil && !reflect.DeepEqual(i, reflect.Zero(reflect.TypeOf(i)).Interface()) {
return Fail(t, fmt.Sprintf("Should be zero, but was %v", i), msgAndArgs...)
}
return true
}
-// NotZero asserts that i is not the zero value for its type and returns the truth.
+// NotZero asserts that i is not the zero value for its type.
func NotZero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
if i == nil || reflect.DeepEqual(i, reflect.Zero(reflect.TypeOf(i)).Interface()) {
return Fail(t, fmt.Sprintf("Should not be zero, but was %v", i), msgAndArgs...)
}
return true
}
+// FileExists checks whether a file exists in the given path. It also fails if the path points to a directory or there is an error when trying to check the file.
+func FileExists(t TestingT, path string, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ info, err := os.Lstat(path)
+ if err != nil {
+ if os.IsNotExist(err) {
+ return Fail(t, fmt.Sprintf("unable to find file %q", path), msgAndArgs...)
+ }
+ return Fail(t, fmt.Sprintf("error when running os.Lstat(%q): %s", path, err), msgAndArgs...)
+ }
+ if info.IsDir() {
+ return Fail(t, fmt.Sprintf("%q is a directory", path), msgAndArgs...)
+ }
+ return true
+}
+
+// DirExists checks whether a directory exists in the given path. It also fails if the path is a file rather a directory or there is an error checking whether it exists.
+func DirExists(t TestingT, path string, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ info, err := os.Lstat(path)
+ if err != nil {
+ if os.IsNotExist(err) {
+ return Fail(t, fmt.Sprintf("unable to find file %q", path), msgAndArgs...)
+ }
+ return Fail(t, fmt.Sprintf("error when running os.Lstat(%q): %s", path, err), msgAndArgs...)
+ }
+ if !info.IsDir() {
+ return Fail(t, fmt.Sprintf("%q is a file", path), msgAndArgs...)
+ }
+ return true
+}
+
// JSONEq asserts that two JSON strings are equivalent.
//
// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`)
-//
-// Returns whether the assertion was successful (true) or not (false).
func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
var expectedJSONAsInterface, actualJSONAsInterface interface{}
if err := json.Unmarshal([]byte(expected), &expectedJSONAsInterface); err != nil {
@@ -1028,7 +1349,7 @@ func typeAndKind(v interface{}) (reflect.Type, reflect.Kind) {
}
// diff returns a diff of both values as long as both are of the same type and
-// are a struct, map, slice or array. Otherwise it returns an empty string.
+// are a struct, map, slice, array or string. Otherwise it returns an empty string.
func diff(expected interface{}, actual interface{}) string {
if expected == nil || actual == nil {
return ""
@@ -1041,12 +1362,18 @@ func diff(expected interface{}, actual interface{}) string {
return ""
}
- if ek != reflect.Struct && ek != reflect.Map && ek != reflect.Slice && ek != reflect.Array {
+ if ek != reflect.Struct && ek != reflect.Map && ek != reflect.Slice && ek != reflect.Array && ek != reflect.String {
return ""
}
- e := spewConfig.Sdump(expected)
- a := spewConfig.Sdump(actual)
+ var e, a string
+ if et != reflect.TypeOf("") {
+ e = spewConfig.Sdump(expected)
+ a = spewConfig.Sdump(actual)
+ } else {
+ e = expected.(string)
+ a = actual.(string)
+ }
diff, _ := difflib.GetUnifiedDiffString(difflib.UnifiedDiff{
A: difflib.SplitLines(e),
@@ -1061,9 +1388,29 @@ func diff(expected interface{}, actual interface{}) string {
return "\n\nDiff:\n" + diff
}
+// validateEqualArgs checks whether provided arguments can be safely used in the
+// Equal/NotEqual functions.
+func validateEqualArgs(expected, actual interface{}) error {
+ if isFunction(expected) || isFunction(actual) {
+ return errors.New("cannot take func type as argument")
+ }
+ return nil
+}
+
+func isFunction(arg interface{}) bool {
+ if arg == nil {
+ return false
+ }
+ return reflect.TypeOf(arg).Kind() == reflect.Func
+}
+
var spewConfig = spew.ConfigState{
Indent: " ",
DisablePointerAddresses: true,
DisableCapacities: true,
SortKeys: true,
}
+
+type tHelper interface {
+ Helper()
+}
diff --git a/vendor/github.com/stretchr/testify/assert/forward_assertions.go b/vendor/github.com/stretchr/testify/assert/forward_assertions.go
index b867e95ea..9ad56851d 100644
--- a/vendor/github.com/stretchr/testify/assert/forward_assertions.go
+++ b/vendor/github.com/stretchr/testify/assert/forward_assertions.go
@@ -13,4 +13,4 @@ func New(t TestingT) *Assertions {
}
}
-//go:generate go run ../_codegen/main.go -output-package=assert -template=assertion_forward.go.tmpl
+//go:generate go run ../_codegen/main.go -output-package=assert -template=assertion_forward.go.tmpl -include-format-funcs
diff --git a/vendor/github.com/stretchr/testify/assert/http_assertions.go b/vendor/github.com/stretchr/testify/assert/http_assertions.go
index fa7ab89b1..df46fa777 100644
--- a/vendor/github.com/stretchr/testify/assert/http_assertions.go
+++ b/vendor/github.com/stretchr/testify/assert/http_assertions.go
@@ -8,16 +8,17 @@ import (
"strings"
)
-// httpCode is a helper that returns HTTP code of the response. It returns -1
-// if building a new request fails.
-func httpCode(handler http.HandlerFunc, method, url string, values url.Values) int {
+// httpCode is a helper that returns HTTP code of the response. It returns -1 and
+// an error if building a new request fails.
+func httpCode(handler http.HandlerFunc, method, url string, values url.Values) (int, error) {
w := httptest.NewRecorder()
- req, err := http.NewRequest(method, url+"?"+values.Encode(), nil)
+ req, err := http.NewRequest(method, url, nil)
if err != nil {
- return -1
+ return -1, err
}
+ req.URL.RawQuery = values.Encode()
handler(w, req)
- return w.Code
+ return w.Code, nil
}
// HTTPSuccess asserts that a specified handler returns a success status code.
@@ -25,12 +26,22 @@ func httpCode(handler http.HandlerFunc, method, url string, values url.Values) i
// assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil)
//
// Returns whether the assertion was successful (true) or not (false).
-func HTTPSuccess(t TestingT, handler http.HandlerFunc, method, url string, values url.Values) bool {
- code := httpCode(handler, method, url, values)
- if code == -1 {
+func HTTPSuccess(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ code, err := httpCode(handler, method, url, values)
+ if err != nil {
+ Fail(t, fmt.Sprintf("Failed to build test request, got error: %s", err))
return false
}
- return code >= http.StatusOK && code <= http.StatusPartialContent
+
+ isSuccessCode := code >= http.StatusOK && code <= http.StatusPartialContent
+ if !isSuccessCode {
+ Fail(t, fmt.Sprintf("Expected HTTP success status code for %q but received %d", url+"?"+values.Encode(), code))
+ }
+
+ return isSuccessCode
}
// HTTPRedirect asserts that a specified handler returns a redirect status code.
@@ -38,12 +49,22 @@ func HTTPSuccess(t TestingT, handler http.HandlerFunc, method, url string, value
// assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}}
//
// Returns whether the assertion was successful (true) or not (false).
-func HTTPRedirect(t TestingT, handler http.HandlerFunc, method, url string, values url.Values) bool {
- code := httpCode(handler, method, url, values)
- if code == -1 {
+func HTTPRedirect(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ code, err := httpCode(handler, method, url, values)
+ if err != nil {
+ Fail(t, fmt.Sprintf("Failed to build test request, got error: %s", err))
return false
}
- return code >= http.StatusMultipleChoices && code <= http.StatusTemporaryRedirect
+
+ isRedirectCode := code >= http.StatusMultipleChoices && code <= http.StatusTemporaryRedirect
+ if !isRedirectCode {
+ Fail(t, fmt.Sprintf("Expected HTTP redirect status code for %q but received %d", url+"?"+values.Encode(), code))
+ }
+
+ return isRedirectCode
}
// HTTPError asserts that a specified handler returns an error status code.
@@ -51,12 +72,22 @@ func HTTPRedirect(t TestingT, handler http.HandlerFunc, method, url string, valu
// assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}}
//
// Returns whether the assertion was successful (true) or not (false).
-func HTTPError(t TestingT, handler http.HandlerFunc, method, url string, values url.Values) bool {
- code := httpCode(handler, method, url, values)
- if code == -1 {
+func HTTPError(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ code, err := httpCode(handler, method, url, values)
+ if err != nil {
+ Fail(t, fmt.Sprintf("Failed to build test request, got error: %s", err))
return false
}
- return code >= http.StatusBadRequest
+
+ isErrorCode := code >= http.StatusBadRequest
+ if !isErrorCode {
+ Fail(t, fmt.Sprintf("Expected HTTP error status code for %q but received %d", url+"?"+values.Encode(), code))
+ }
+
+ return isErrorCode
}
// HTTPBody is a helper that returns HTTP body of the response. It returns
@@ -74,10 +105,13 @@ func HTTPBody(handler http.HandlerFunc, method, url string, values url.Values) s
// HTTPBodyContains asserts that a specified handler returns a
// body that contains a string.
//
-// assert.HTTPBodyContains(t, myHandler, "www.google.com", nil, "I'm Feeling Lucky")
+// assert.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky")
//
// Returns whether the assertion was successful (true) or not (false).
-func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}) bool {
+func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
body := HTTPBody(handler, method, url, values)
contains := strings.Contains(body, fmt.Sprint(str))
@@ -91,10 +125,13 @@ func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method, url string,
// HTTPBodyNotContains asserts that a specified handler returns a
// body that does not contain a string.
//
-// assert.HTTPBodyNotContains(t, myHandler, "www.google.com", nil, "I'm Feeling Lucky")
+// assert.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky")
//
// Returns whether the assertion was successful (true) or not (false).
-func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}) bool {
+func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
body := HTTPBody(handler, method, url, values)
contains := strings.Contains(body, fmt.Sprint(str))
diff --git a/vendor/github.com/stretchr/testify/require/forward_requirements.go b/vendor/github.com/stretchr/testify/require/forward_requirements.go
index d3c2ab9bc..ac71d4058 100644
--- a/vendor/github.com/stretchr/testify/require/forward_requirements.go
+++ b/vendor/github.com/stretchr/testify/require/forward_requirements.go
@@ -13,4 +13,4 @@ func New(t TestingT) *Assertions {
}
}
-//go:generate go run ../_codegen/main.go -output-package=require -template=require_forward.go.tmpl
+//go:generate go run ../_codegen/main.go -output-package=require -template=require_forward.go.tmpl -include-format-funcs
diff --git a/vendor/github.com/stretchr/testify/require/require.go b/vendor/github.com/stretchr/testify/require/require.go
index fc567f140..535f29349 100644
--- a/vendor/github.com/stretchr/testify/require/require.go
+++ b/vendor/github.com/stretchr/testify/require/require.go
@@ -14,148 +14,442 @@ import (
// Condition uses a Comparison to assert a complex condition.
func Condition(t TestingT, comp assert.Comparison, msgAndArgs ...interface{}) {
- if !assert.Condition(t, comp, msgAndArgs...) {
- t.FailNow()
+ if assert.Condition(t, comp, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// Conditionf uses a Comparison to assert a complex condition.
+func Conditionf(t TestingT, comp assert.Comparison, msg string, args ...interface{}) {
+ if assert.Conditionf(t, comp, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// Contains asserts that the specified string, list(array, slice...) or map contains the
// specified substring or element.
//
-// assert.Contains(t, "Hello World", "World", "But 'Hello World' does contain 'World'")
-// assert.Contains(t, ["Hello", "World"], "World", "But ["Hello", "World"] does contain 'World'")
-// assert.Contains(t, {"Hello": "World"}, "Hello", "But {'Hello': 'World'} does contain 'Hello'")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Contains(t, "Hello World", "World")
+// assert.Contains(t, ["Hello", "World"], "World")
+// assert.Contains(t, {"Hello": "World"}, "Hello")
func Contains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) {
- if !assert.Contains(t, s, contains, msgAndArgs...) {
- t.FailNow()
+ if assert.Contains(t, s, contains, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
+}
+
+// Containsf asserts that the specified string, list(array, slice...) or map contains the
+// specified substring or element.
+//
+// assert.Containsf(t, "Hello World", "World", "error message %s", "formatted")
+// assert.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted")
+// assert.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted")
+func Containsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) {
+ if assert.Containsf(t, s, contains, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// DirExists checks whether a directory exists in the given path. It also fails if the path is a file rather a directory or there is an error checking whether it exists.
+func DirExists(t TestingT, path string, msgAndArgs ...interface{}) {
+ if assert.DirExists(t, path, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// DirExistsf checks whether a directory exists in the given path. It also fails if the path is a file rather a directory or there is an error checking whether it exists.
+func DirExistsf(t TestingT, path string, msg string, args ...interface{}) {
+ if assert.DirExistsf(t, path, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should match.
+//
+// assert.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2])
+func ElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs ...interface{}) {
+ if assert.ElementsMatch(t, listA, listB, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should match.
+//
+// assert.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted")
+func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) {
+ if assert.ElementsMatchf(t, listA, listB, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
// assert.Empty(t, obj)
-//
-// Returns whether the assertion was successful (true) or not (false).
func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) {
- if !assert.Empty(t, object, msgAndArgs...) {
- t.FailNow()
+ if assert.Empty(t, object, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
-// Equal asserts that two objects are equal.
+// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either
+// a slice or a channel with len == 0.
//
-// assert.Equal(t, 123, 123, "123 and 123 should be equal")
+// assert.Emptyf(t, obj, "error message %s", "formatted")
+func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) {
+ if assert.Emptyf(t, object, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// Equal asserts that two objects are equal.
//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Equal(t, 123, 123)
//
// Pointer variable equality is determined based on the equality of the
-// referenced values (as opposed to the memory addresses).
+// referenced values (as opposed to the memory addresses). Function equality
+// cannot be determined and will always fail.
func Equal(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
- if !assert.Equal(t, expected, actual, msgAndArgs...) {
- t.FailNow()
+ if assert.Equal(t, expected, actual, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
// EqualError asserts that a function returned an error (i.e. not `nil`)
// and that it is equal to the provided error.
//
// actualObj, err := SomeFunction()
-// assert.EqualError(t, err, expectedErrorString, "An error was expected")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.EqualError(t, err, expectedErrorString)
func EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) {
- if !assert.EqualError(t, theError, errString, msgAndArgs...) {
- t.FailNow()
+ if assert.EqualError(t, theError, errString, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// EqualErrorf asserts that a function returned an error (i.e. not `nil`)
+// and that it is equal to the provided error.
+//
+// actualObj, err := SomeFunction()
+// assert.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted")
+func EqualErrorf(t TestingT, theError error, errString string, msg string, args ...interface{}) {
+ if assert.EqualErrorf(t, theError, errString, msg, args...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// EqualValues asserts that two objects are equal or convertable to the same types
// and equal.
//
-// assert.EqualValues(t, uint32(123), int32(123), "123 and 123 should be equal")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.EqualValues(t, uint32(123), int32(123))
func EqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
- if !assert.EqualValues(t, expected, actual, msgAndArgs...) {
- t.FailNow()
+ if assert.EqualValues(t, expected, actual, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// EqualValuesf asserts that two objects are equal or convertable to the same types
+// and equal.
+//
+// assert.EqualValuesf(t, uint32(123, "error message %s", "formatted"), int32(123))
+func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {
+ if assert.EqualValuesf(t, expected, actual, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// Equalf asserts that two objects are equal.
+//
+// assert.Equalf(t, 123, 123, "error message %s", "formatted")
+//
+// Pointer variable equality is determined based on the equality of the
+// referenced values (as opposed to the memory addresses). Function equality
+// cannot be determined and will always fail.
+func Equalf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {
+ if assert.Equalf(t, expected, actual, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// Error asserts that a function returned an error (i.e. not `nil`).
//
// actualObj, err := SomeFunction()
-// if assert.Error(t, err, "An error was expected") {
-// assert.Equal(t, err, expectedError)
+// if assert.Error(t, err) {
+// assert.Equal(t, expectedError, err)
// }
-//
-// Returns whether the assertion was successful (true) or not (false).
func Error(t TestingT, err error, msgAndArgs ...interface{}) {
- if !assert.Error(t, err, msgAndArgs...) {
- t.FailNow()
+ if assert.Error(t, err, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
-// Exactly asserts that two objects are equal is value and type.
+// Errorf asserts that a function returned an error (i.e. not `nil`).
//
-// assert.Exactly(t, int32(123), int64(123), "123 and 123 should NOT be equal")
+// actualObj, err := SomeFunction()
+// if assert.Errorf(t, err, "error message %s", "formatted") {
+// assert.Equal(t, expectedErrorf, err)
+// }
+func Errorf(t TestingT, err error, msg string, args ...interface{}) {
+ if assert.Errorf(t, err, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// Exactly asserts that two objects are equal in value and type.
//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Exactly(t, int32(123), int64(123))
func Exactly(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
- if !assert.Exactly(t, expected, actual, msgAndArgs...) {
- t.FailNow()
+ if assert.Exactly(t, expected, actual, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
+}
+
+// Exactlyf asserts that two objects are equal in value and type.
+//
+// assert.Exactlyf(t, int32(123, "error message %s", "formatted"), int64(123))
+func Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {
+ if assert.Exactlyf(t, expected, actual, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// Fail reports a failure through
func Fail(t TestingT, failureMessage string, msgAndArgs ...interface{}) {
- if !assert.Fail(t, failureMessage, msgAndArgs...) {
- t.FailNow()
+ if assert.Fail(t, failureMessage, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
// FailNow fails test
func FailNow(t TestingT, failureMessage string, msgAndArgs ...interface{}) {
- if !assert.FailNow(t, failureMessage, msgAndArgs...) {
- t.FailNow()
+ if assert.FailNow(t, failureMessage, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// FailNowf fails test
+func FailNowf(t TestingT, failureMessage string, msg string, args ...interface{}) {
+ if assert.FailNowf(t, failureMessage, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// Failf reports a failure through
+func Failf(t TestingT, failureMessage string, msg string, args ...interface{}) {
+ if assert.Failf(t, failureMessage, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// False asserts that the specified value is false.
//
-// assert.False(t, myBool, "myBool should be false")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.False(t, myBool)
func False(t TestingT, value bool, msgAndArgs ...interface{}) {
- if !assert.False(t, value, msgAndArgs...) {
- t.FailNow()
+ if assert.False(t, value, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// Falsef asserts that the specified value is false.
+//
+// assert.Falsef(t, myBool, "error message %s", "formatted")
+func Falsef(t TestingT, value bool, msg string, args ...interface{}) {
+ if assert.Falsef(t, value, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// FileExists checks whether a file exists in the given path. It also fails if the path points to a directory or there is an error when trying to check the file.
+func FileExists(t TestingT, path string, msgAndArgs ...interface{}) {
+ if assert.FileExists(t, path, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// FileExistsf checks whether a file exists in the given path. It also fails if the path points to a directory or there is an error when trying to check the file.
+func FileExistsf(t TestingT, path string, msg string, args ...interface{}) {
+ if assert.FileExistsf(t, path, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
// HTTPBodyContains asserts that a specified handler returns a
// body that contains a string.
//
-// assert.HTTPBodyContains(t, myHandler, "www.google.com", nil, "I'm Feeling Lucky")
+// assert.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky")
//
// Returns whether the assertion was successful (true) or not (false).
-func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}) {
- if !assert.HTTPBodyContains(t, handler, method, url, values, str) {
- t.FailNow()
+func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) {
+ if assert.HTTPBodyContains(t, handler, method, url, values, str, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// HTTPBodyContainsf asserts that a specified handler returns a
+// body that contains a string.
+//
+// assert.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted")
+//
+// Returns whether the assertion was successful (true) or not (false).
+func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) {
+ if assert.HTTPBodyContainsf(t, handler, method, url, values, str, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// HTTPBodyNotContains asserts that a specified handler returns a
// body that does not contain a string.
//
-// assert.HTTPBodyNotContains(t, myHandler, "www.google.com", nil, "I'm Feeling Lucky")
+// assert.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky")
+//
+// Returns whether the assertion was successful (true) or not (false).
+func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) {
+ if assert.HTTPBodyNotContains(t, handler, method, url, values, str, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// HTTPBodyNotContainsf asserts that a specified handler returns a
+// body that does not contain a string.
+//
+// assert.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted")
//
// Returns whether the assertion was successful (true) or not (false).
-func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}) {
- if !assert.HTTPBodyNotContains(t, handler, method, url, values, str) {
- t.FailNow()
+func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) {
+ if assert.HTTPBodyNotContainsf(t, handler, method, url, values, str, msg, args...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// HTTPError asserts that a specified handler returns an error status code.
@@ -163,10 +457,29 @@ func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, ur
// assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}}
//
// Returns whether the assertion was successful (true) or not (false).
-func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values) {
- if !assert.HTTPError(t, handler, method, url, values) {
- t.FailNow()
+func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {
+ if assert.HTTPError(t, handler, method, url, values, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
+}
+
+// HTTPErrorf asserts that a specified handler returns an error status code.
+//
+// assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}}
+//
+// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false).
+func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {
+ if assert.HTTPErrorf(t, handler, method, url, values, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// HTTPRedirect asserts that a specified handler returns a redirect status code.
@@ -174,10 +487,29 @@ func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string,
// assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}}
//
// Returns whether the assertion was successful (true) or not (false).
-func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values) {
- if !assert.HTTPRedirect(t, handler, method, url, values) {
- t.FailNow()
+func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {
+ if assert.HTTPRedirect(t, handler, method, url, values, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// HTTPRedirectf asserts that a specified handler returns a redirect status code.
+//
+// assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}}
+//
+// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false).
+func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {
+ if assert.HTTPRedirectf(t, handler, method, url, values, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// HTTPSuccess asserts that a specified handler returns a success status code.
@@ -185,122 +517,335 @@ func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url strin
// assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil)
//
// Returns whether the assertion was successful (true) or not (false).
-func HTTPSuccess(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values) {
- if !assert.HTTPSuccess(t, handler, method, url, values) {
- t.FailNow()
+func HTTPSuccess(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {
+ if assert.HTTPSuccess(t, handler, method, url, values, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// HTTPSuccessf asserts that a specified handler returns a success status code.
+//
+// assert.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted")
+//
+// Returns whether the assertion was successful (true) or not (false).
+func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {
+ if assert.HTTPSuccessf(t, handler, method, url, values, msg, args...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// Implements asserts that an object is implemented by the specified interface.
//
-// assert.Implements(t, (*MyInterface)(nil), new(MyObject), "MyObject")
+// assert.Implements(t, (*MyInterface)(nil), new(MyObject))
func Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) {
- if !assert.Implements(t, interfaceObject, object, msgAndArgs...) {
- t.FailNow()
+ if assert.Implements(t, interfaceObject, object, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// Implementsf asserts that an object is implemented by the specified interface.
+//
+// assert.Implementsf(t, (*MyInterface, "error message %s", "formatted")(nil), new(MyObject))
+func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) {
+ if assert.Implementsf(t, interfaceObject, object, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
// InDelta asserts that the two numerals are within delta of each other.
//
// assert.InDelta(t, math.Pi, (22 / 7.0), 0.01)
-//
-// Returns whether the assertion was successful (true) or not (false).
func InDelta(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {
- if !assert.InDelta(t, expected, actual, delta, msgAndArgs...) {
- t.FailNow()
+ if assert.InDelta(t, expected, actual, delta, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.
+func InDeltaMapValues(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {
+ if assert.InDeltaMapValues(t, expected, actual, delta, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.
+func InDeltaMapValuesf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {
+ if assert.InDeltaMapValuesf(t, expected, actual, delta, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
// InDeltaSlice is the same as InDelta, except it compares two slices.
func InDeltaSlice(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {
- if !assert.InDeltaSlice(t, expected, actual, delta, msgAndArgs...) {
- t.FailNow()
+ if assert.InDeltaSlice(t, expected, actual, delta, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
-// InEpsilon asserts that expected and actual have a relative error less than epsilon
+// InDeltaSlicef is the same as InDelta, except it compares two slices.
+func InDeltaSlicef(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {
+ if assert.InDeltaSlicef(t, expected, actual, delta, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// InDeltaf asserts that the two numerals are within delta of each other.
//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.InDeltaf(t, math.Pi, (22 / 7.0, "error message %s", "formatted"), 0.01)
+func InDeltaf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {
+ if assert.InDeltaf(t, expected, actual, delta, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// InEpsilon asserts that expected and actual have a relative error less than epsilon
func InEpsilon(t TestingT, expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) {
- if !assert.InEpsilon(t, expected, actual, epsilon, msgAndArgs...) {
- t.FailNow()
+ if assert.InEpsilon(t, expected, actual, epsilon, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices.
func InEpsilonSlice(t TestingT, expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) {
- if !assert.InEpsilonSlice(t, expected, actual, epsilon, msgAndArgs...) {
- t.FailNow()
+ if assert.InEpsilonSlice(t, expected, actual, epsilon, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices.
+func InEpsilonSlicef(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) {
+ if assert.InEpsilonSlicef(t, expected, actual, epsilon, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
+}
+
+// InEpsilonf asserts that expected and actual have a relative error less than epsilon
+func InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) {
+ if assert.InEpsilonf(t, expected, actual, epsilon, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// IsType asserts that the specified objects are of the same type.
func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) {
- if !assert.IsType(t, expectedType, object, msgAndArgs...) {
- t.FailNow()
+ if assert.IsType(t, expectedType, object, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// IsTypef asserts that the specified objects are of the same type.
+func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) {
+ if assert.IsTypef(t, expectedType, object, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
// JSONEq asserts that two JSON strings are equivalent.
//
// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`)
-//
-// Returns whether the assertion was successful (true) or not (false).
func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) {
- if !assert.JSONEq(t, expected, actual, msgAndArgs...) {
- t.FailNow()
+ if assert.JSONEq(t, expected, actual, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
+}
+
+// JSONEqf asserts that two JSON strings are equivalent.
+//
+// assert.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted")
+func JSONEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) {
+ if assert.JSONEqf(t, expected, actual, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// Len asserts that the specified object has specific length.
// Len also fails if the object has a type that len() not accept.
//
-// assert.Len(t, mySlice, 3, "The size of slice is not 3")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Len(t, mySlice, 3)
func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) {
- if !assert.Len(t, object, length, msgAndArgs...) {
- t.FailNow()
+ if assert.Len(t, object, length, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
-// Nil asserts that the specified object is nil.
+// Lenf asserts that the specified object has specific length.
+// Lenf also fails if the object has a type that len() not accept.
//
-// assert.Nil(t, err, "err should be nothing")
+// assert.Lenf(t, mySlice, 3, "error message %s", "formatted")
+func Lenf(t TestingT, object interface{}, length int, msg string, args ...interface{}) {
+ if assert.Lenf(t, object, length, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// Nil asserts that the specified object is nil.
//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Nil(t, err)
func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) {
- if !assert.Nil(t, object, msgAndArgs...) {
- t.FailNow()
+ if assert.Nil(t, object, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
+}
+
+// Nilf asserts that the specified object is nil.
+//
+// assert.Nilf(t, err, "error message %s", "formatted")
+func Nilf(t TestingT, object interface{}, msg string, args ...interface{}) {
+ if assert.Nilf(t, object, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// NoError asserts that a function returned no error (i.e. `nil`).
//
// actualObj, err := SomeFunction()
// if assert.NoError(t, err) {
-// assert.Equal(t, actualObj, expectedObj)
+// assert.Equal(t, expectedObj, actualObj)
// }
-//
-// Returns whether the assertion was successful (true) or not (false).
func NoError(t TestingT, err error, msgAndArgs ...interface{}) {
- if !assert.NoError(t, err, msgAndArgs...) {
- t.FailNow()
+ if assert.NoError(t, err, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
+}
+
+// NoErrorf asserts that a function returned no error (i.e. `nil`).
+//
+// actualObj, err := SomeFunction()
+// if assert.NoErrorf(t, err, "error message %s", "formatted") {
+// assert.Equal(t, expectedObj, actualObj)
+// }
+func NoErrorf(t TestingT, err error, msg string, args ...interface{}) {
+ if assert.NoErrorf(t, err, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the
// specified substring or element.
//
-// assert.NotContains(t, "Hello World", "Earth", "But 'Hello World' does NOT contain 'Earth'")
-// assert.NotContains(t, ["Hello", "World"], "Earth", "But ['Hello', 'World'] does NOT contain 'Earth'")
-// assert.NotContains(t, {"Hello": "World"}, "Earth", "But {'Hello': 'World'} does NOT contain 'Earth'")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.NotContains(t, "Hello World", "Earth")
+// assert.NotContains(t, ["Hello", "World"], "Earth")
+// assert.NotContains(t, {"Hello": "World"}, "Earth")
func NotContains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) {
- if !assert.NotContains(t, s, contains, msgAndArgs...) {
- t.FailNow()
+ if assert.NotContains(t, s, contains, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the
+// specified substring or element.
+//
+// assert.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted")
+// assert.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted")
+// assert.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted")
+func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) {
+ if assert.NotContainsf(t, s, contains, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either
@@ -309,121 +854,374 @@ func NotContains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...
// if assert.NotEmpty(t, obj) {
// assert.Equal(t, "two", obj[1])
// }
-//
-// Returns whether the assertion was successful (true) or not (false).
func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) {
- if !assert.NotEmpty(t, object, msgAndArgs...) {
- t.FailNow()
+ if assert.NotEmpty(t, object, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
-// NotEqual asserts that the specified values are NOT equal.
+// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either
+// a slice or a channel with len == 0.
//
-// assert.NotEqual(t, obj1, obj2, "two objects shouldn't be equal")
+// if assert.NotEmptyf(t, obj, "error message %s", "formatted") {
+// assert.Equal(t, "two", obj[1])
+// }
+func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) {
+ if assert.NotEmptyf(t, object, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// NotEqual asserts that the specified values are NOT equal.
//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.NotEqual(t, obj1, obj2)
//
// Pointer variable equality is determined based on the equality of the
// referenced values (as opposed to the memory addresses).
func NotEqual(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
- if !assert.NotEqual(t, expected, actual, msgAndArgs...) {
- t.FailNow()
+ if assert.NotEqual(t, expected, actual, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
-// NotNil asserts that the specified object is not nil.
+// NotEqualf asserts that the specified values are NOT equal.
//
-// assert.NotNil(t, err, "err should be something")
+// assert.NotEqualf(t, obj1, obj2, "error message %s", "formatted")
//
-// Returns whether the assertion was successful (true) or not (false).
+// Pointer variable equality is determined based on the equality of the
+// referenced values (as opposed to the memory addresses).
+func NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {
+ if assert.NotEqualf(t, expected, actual, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// NotNil asserts that the specified object is not nil.
+//
+// assert.NotNil(t, err)
func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) {
- if !assert.NotNil(t, object, msgAndArgs...) {
- t.FailNow()
+ if assert.NotNil(t, object, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
-// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.
+// NotNilf asserts that the specified object is not nil.
//
-// assert.NotPanics(t, func(){
-// RemainCalm()
-// }, "Calling RemainCalm() should NOT panic")
+// assert.NotNilf(t, err, "error message %s", "formatted")
+func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) {
+ if assert.NotNilf(t, object, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.
//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.NotPanics(t, func(){ RemainCalm() })
func NotPanics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) {
- if !assert.NotPanics(t, f, msgAndArgs...) {
- t.FailNow()
+ if assert.NotPanics(t, f, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic.
+//
+// assert.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted")
+func NotPanicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) {
+ if assert.NotPanicsf(t, f, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
// NotRegexp asserts that a specified regexp does not match a string.
//
// assert.NotRegexp(t, regexp.MustCompile("starts"), "it's starting")
// assert.NotRegexp(t, "^start", "it's not starting")
-//
-// Returns whether the assertion was successful (true) or not (false).
func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) {
- if !assert.NotRegexp(t, rx, str, msgAndArgs...) {
- t.FailNow()
+ if assert.NotRegexp(t, rx, str, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
-// NotZero asserts that i is not the zero value for its type and returns the truth.
+// NotRegexpf asserts that a specified regexp does not match a string.
+//
+// assert.NotRegexpf(t, regexp.MustCompile("starts", "error message %s", "formatted"), "it's starting")
+// assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted")
+func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) {
+ if assert.NotRegexpf(t, rx, str, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// NotSubset asserts that the specified list(array, slice...) contains not all
+// elements given in the specified subset(array, slice...).
+//
+// assert.NotSubset(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]")
+func NotSubset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) {
+ if assert.NotSubset(t, list, subset, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// NotSubsetf asserts that the specified list(array, slice...) contains not all
+// elements given in the specified subset(array, slice...).
+//
+// assert.NotSubsetf(t, [1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted")
+func NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) {
+ if assert.NotSubsetf(t, list, subset, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// NotZero asserts that i is not the zero value for its type.
func NotZero(t TestingT, i interface{}, msgAndArgs ...interface{}) {
- if !assert.NotZero(t, i, msgAndArgs...) {
- t.FailNow()
+ if assert.NotZero(t, i, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
+}
+
+// NotZerof asserts that i is not the zero value for its type.
+func NotZerof(t TestingT, i interface{}, msg string, args ...interface{}) {
+ if assert.NotZerof(t, i, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// Panics asserts that the code inside the specified PanicTestFunc panics.
//
-// assert.Panics(t, func(){
-// GoCrazy()
-// }, "Calling GoCrazy() should panic")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Panics(t, func(){ GoCrazy() })
func Panics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) {
- if !assert.Panics(t, f, msgAndArgs...) {
- t.FailNow()
+ if assert.Panics(t, f, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that
+// the recovered panic value equals the expected panic value.
+//
+// assert.PanicsWithValue(t, "crazy error", func(){ GoCrazy() })
+func PanicsWithValue(t TestingT, expected interface{}, f assert.PanicTestFunc, msgAndArgs ...interface{}) {
+ if assert.PanicsWithValue(t, expected, f, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that
+// the recovered panic value equals the expected panic value.
+//
+// assert.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted")
+func PanicsWithValuef(t TestingT, expected interface{}, f assert.PanicTestFunc, msg string, args ...interface{}) {
+ if assert.PanicsWithValuef(t, expected, f, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
+}
+
+// Panicsf asserts that the code inside the specified PanicTestFunc panics.
+//
+// assert.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted")
+func Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) {
+ if assert.Panicsf(t, f, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
// Regexp asserts that a specified regexp matches a string.
//
// assert.Regexp(t, regexp.MustCompile("start"), "it's starting")
// assert.Regexp(t, "start...$", "it's not starting")
-//
-// Returns whether the assertion was successful (true) or not (false).
func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) {
- if !assert.Regexp(t, rx, str, msgAndArgs...) {
- t.FailNow()
+ if assert.Regexp(t, rx, str, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
-// True asserts that the specified value is true.
+// Regexpf asserts that a specified regexp matches a string.
+//
+// assert.Regexpf(t, regexp.MustCompile("start", "error message %s", "formatted"), "it's starting")
+// assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted")
+func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) {
+ if assert.Regexpf(t, rx, str, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// Subset asserts that the specified list(array, slice...) contains all
+// elements given in the specified subset(array, slice...).
//
-// assert.True(t, myBool, "myBool should be true")
+// assert.Subset(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]")
+func Subset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) {
+ if assert.Subset(t, list, subset, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// Subsetf asserts that the specified list(array, slice...) contains all
+// elements given in the specified subset(array, slice...).
//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.Subsetf(t, [1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted")
+func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) {
+ if assert.Subsetf(t, list, subset, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// True asserts that the specified value is true.
+//
+// assert.True(t, myBool)
func True(t TestingT, value bool, msgAndArgs ...interface{}) {
- if !assert.True(t, value, msgAndArgs...) {
- t.FailNow()
+ if assert.True(t, value, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
-// WithinDuration asserts that the two times are within duration delta of each other.
+// Truef asserts that the specified value is true.
//
-// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second, "The difference should not be more than 10s")
+// assert.Truef(t, myBool, "error message %s", "formatted")
+func Truef(t TestingT, value bool, msg string, args ...interface{}) {
+ if assert.Truef(t, value, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// WithinDuration asserts that the two times are within duration delta of each other.
//
-// Returns whether the assertion was successful (true) or not (false).
+// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second)
func WithinDuration(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) {
- if !assert.WithinDuration(t, expected, actual, delta, msgAndArgs...) {
- t.FailNow()
+ if assert.WithinDuration(t, expected, actual, delta, msgAndArgs...) {
+ return
}
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// WithinDurationf asserts that the two times are within duration delta of each other.
+//
+// assert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted")
+func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) {
+ if assert.WithinDurationf(t, expected, actual, delta, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
}
-// Zero asserts that i is the zero value for its type and returns the truth.
+// Zero asserts that i is the zero value for its type.
func Zero(t TestingT, i interface{}, msgAndArgs ...interface{}) {
- if !assert.Zero(t, i, msgAndArgs...) {
- t.FailNow()
+ if assert.Zero(t, i, msgAndArgs...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
+ }
+ t.FailNow()
+}
+
+// Zerof asserts that i is the zero value for its type.
+func Zerof(t TestingT, i interface{}, msg string, args ...interface{}) {
+ if assert.Zerof(t, i, msg, args...) {
+ return
+ }
+ if h, ok := t.(tHelper); ok {
+ h.Helper()
}
+ t.FailNow()
}
diff --git a/vendor/github.com/stretchr/testify/require/require_forward.go b/vendor/github.com/stretchr/testify/require/require_forward.go
index caa18793d..9fe41dbdc 100644
--- a/vendor/github.com/stretchr/testify/require/require_forward.go
+++ b/vendor/github.com/stretchr/testify/require/require_forward.go
@@ -14,40 +14,119 @@ import (
// Condition uses a Comparison to assert a complex condition.
func (a *Assertions) Condition(comp assert.Comparison, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Condition(a.t, comp, msgAndArgs...)
}
+// Conditionf uses a Comparison to assert a complex condition.
+func (a *Assertions) Conditionf(comp assert.Comparison, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Conditionf(a.t, comp, msg, args...)
+}
+
// Contains asserts that the specified string, list(array, slice...) or map contains the
// specified substring or element.
//
-// a.Contains("Hello World", "World", "But 'Hello World' does contain 'World'")
-// a.Contains(["Hello", "World"], "World", "But ["Hello", "World"] does contain 'World'")
-// a.Contains({"Hello": "World"}, "Hello", "But {'Hello': 'World'} does contain 'Hello'")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Contains("Hello World", "World")
+// a.Contains(["Hello", "World"], "World")
+// a.Contains({"Hello": "World"}, "Hello")
func (a *Assertions) Contains(s interface{}, contains interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Contains(a.t, s, contains, msgAndArgs...)
}
+// Containsf asserts that the specified string, list(array, slice...) or map contains the
+// specified substring or element.
+//
+// a.Containsf("Hello World", "World", "error message %s", "formatted")
+// a.Containsf(["Hello", "World"], "World", "error message %s", "formatted")
+// a.Containsf({"Hello": "World"}, "Hello", "error message %s", "formatted")
+func (a *Assertions) Containsf(s interface{}, contains interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Containsf(a.t, s, contains, msg, args...)
+}
+
+// DirExists checks whether a directory exists in the given path. It also fails if the path is a file rather a directory or there is an error checking whether it exists.
+func (a *Assertions) DirExists(path string, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ DirExists(a.t, path, msgAndArgs...)
+}
+
+// DirExistsf checks whether a directory exists in the given path. It also fails if the path is a file rather a directory or there is an error checking whether it exists.
+func (a *Assertions) DirExistsf(path string, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ DirExistsf(a.t, path, msg, args...)
+}
+
+// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should match.
+//
+// a.ElementsMatch([1, 3, 2, 3], [1, 3, 3, 2])
+func (a *Assertions) ElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ ElementsMatch(a.t, listA, listB, msgAndArgs...)
+}
+
+// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified
+// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,
+// the number of appearances of each of them in both lists should match.
+//
+// a.ElementsMatchf([1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted")
+func (a *Assertions) ElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ ElementsMatchf(a.t, listA, listB, msg, args...)
+}
+
// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
// a.Empty(obj)
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Empty(a.t, object, msgAndArgs...)
}
-// Equal asserts that two objects are equal.
+// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either
+// a slice or a channel with len == 0.
//
-// a.Equal(123, 123, "123 and 123 should be equal")
+// a.Emptyf(obj, "error message %s", "formatted")
+func (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Emptyf(a.t, object, msg, args...)
+}
+
+// Equal asserts that two objects are equal.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Equal(123, 123)
//
// Pointer variable equality is determined based on the equality of the
-// referenced values (as opposed to the memory addresses).
+// referenced values (as opposed to the memory addresses). Function equality
+// cannot be determined and will always fail.
func (a *Assertions) Equal(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Equal(a.t, expected, actual, msgAndArgs...)
}
@@ -55,81 +134,226 @@ func (a *Assertions) Equal(expected interface{}, actual interface{}, msgAndArgs
// and that it is equal to the provided error.
//
// actualObj, err := SomeFunction()
-// a.EqualError(err, expectedErrorString, "An error was expected")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.EqualError(err, expectedErrorString)
func (a *Assertions) EqualError(theError error, errString string, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
EqualError(a.t, theError, errString, msgAndArgs...)
}
+// EqualErrorf asserts that a function returned an error (i.e. not `nil`)
+// and that it is equal to the provided error.
+//
+// actualObj, err := SomeFunction()
+// a.EqualErrorf(err, expectedErrorString, "error message %s", "formatted")
+func (a *Assertions) EqualErrorf(theError error, errString string, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ EqualErrorf(a.t, theError, errString, msg, args...)
+}
+
// EqualValues asserts that two objects are equal or convertable to the same types
// and equal.
//
-// a.EqualValues(uint32(123), int32(123), "123 and 123 should be equal")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.EqualValues(uint32(123), int32(123))
func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
EqualValues(a.t, expected, actual, msgAndArgs...)
}
+// EqualValuesf asserts that two objects are equal or convertable to the same types
+// and equal.
+//
+// a.EqualValuesf(uint32(123, "error message %s", "formatted"), int32(123))
+func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ EqualValuesf(a.t, expected, actual, msg, args...)
+}
+
+// Equalf asserts that two objects are equal.
+//
+// a.Equalf(123, 123, "error message %s", "formatted")
+//
+// Pointer variable equality is determined based on the equality of the
+// referenced values (as opposed to the memory addresses). Function equality
+// cannot be determined and will always fail.
+func (a *Assertions) Equalf(expected interface{}, actual interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Equalf(a.t, expected, actual, msg, args...)
+}
+
// Error asserts that a function returned an error (i.e. not `nil`).
//
// actualObj, err := SomeFunction()
-// if a.Error(err, "An error was expected") {
-// assert.Equal(t, err, expectedError)
+// if a.Error(err) {
+// assert.Equal(t, expectedError, err)
// }
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) Error(err error, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Error(a.t, err, msgAndArgs...)
}
-// Exactly asserts that two objects are equal is value and type.
+// Errorf asserts that a function returned an error (i.e. not `nil`).
//
-// a.Exactly(int32(123), int64(123), "123 and 123 should NOT be equal")
+// actualObj, err := SomeFunction()
+// if a.Errorf(err, "error message %s", "formatted") {
+// assert.Equal(t, expectedErrorf, err)
+// }
+func (a *Assertions) Errorf(err error, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Errorf(a.t, err, msg, args...)
+}
+
+// Exactly asserts that two objects are equal in value and type.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Exactly(int32(123), int64(123))
func (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Exactly(a.t, expected, actual, msgAndArgs...)
}
+// Exactlyf asserts that two objects are equal in value and type.
+//
+// a.Exactlyf(int32(123, "error message %s", "formatted"), int64(123))
+func (a *Assertions) Exactlyf(expected interface{}, actual interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Exactlyf(a.t, expected, actual, msg, args...)
+}
+
// Fail reports a failure through
func (a *Assertions) Fail(failureMessage string, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Fail(a.t, failureMessage, msgAndArgs...)
}
// FailNow fails test
func (a *Assertions) FailNow(failureMessage string, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
FailNow(a.t, failureMessage, msgAndArgs...)
}
+// FailNowf fails test
+func (a *Assertions) FailNowf(failureMessage string, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ FailNowf(a.t, failureMessage, msg, args...)
+}
+
+// Failf reports a failure through
+func (a *Assertions) Failf(failureMessage string, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Failf(a.t, failureMessage, msg, args...)
+}
+
// False asserts that the specified value is false.
//
-// a.False(myBool, "myBool should be false")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.False(myBool)
func (a *Assertions) False(value bool, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
False(a.t, value, msgAndArgs...)
}
+// Falsef asserts that the specified value is false.
+//
+// a.Falsef(myBool, "error message %s", "formatted")
+func (a *Assertions) Falsef(value bool, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Falsef(a.t, value, msg, args...)
+}
+
+// FileExists checks whether a file exists in the given path. It also fails if the path points to a directory or there is an error when trying to check the file.
+func (a *Assertions) FileExists(path string, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ FileExists(a.t, path, msgAndArgs...)
+}
+
+// FileExistsf checks whether a file exists in the given path. It also fails if the path points to a directory or there is an error when trying to check the file.
+func (a *Assertions) FileExistsf(path string, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ FileExistsf(a.t, path, msg, args...)
+}
+
// HTTPBodyContains asserts that a specified handler returns a
// body that contains a string.
//
-// a.HTTPBodyContains(myHandler, "www.google.com", nil, "I'm Feeling Lucky")
+// a.HTTPBodyContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky")
//
// Returns whether the assertion was successful (true) or not (false).
-func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}) {
- HTTPBodyContains(a.t, handler, method, url, values, str)
+func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ HTTPBodyContains(a.t, handler, method, url, values, str, msgAndArgs...)
+}
+
+// HTTPBodyContainsf asserts that a specified handler returns a
+// body that contains a string.
+//
+// a.HTTPBodyContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted")
+//
+// Returns whether the assertion was successful (true) or not (false).
+func (a *Assertions) HTTPBodyContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ HTTPBodyContainsf(a.t, handler, method, url, values, str, msg, args...)
}
// HTTPBodyNotContains asserts that a specified handler returns a
// body that does not contain a string.
//
-// a.HTTPBodyNotContains(myHandler, "www.google.com", nil, "I'm Feeling Lucky")
+// a.HTTPBodyNotContains(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky")
//
// Returns whether the assertion was successful (true) or not (false).
-func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}) {
- HTTPBodyNotContains(a.t, handler, method, url, values, str)
+func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ HTTPBodyNotContains(a.t, handler, method, url, values, str, msgAndArgs...)
+}
+
+// HTTPBodyNotContainsf asserts that a specified handler returns a
+// body that does not contain a string.
+//
+// a.HTTPBodyNotContainsf(myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted")
+//
+// Returns whether the assertion was successful (true) or not (false).
+func (a *Assertions) HTTPBodyNotContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ HTTPBodyNotContainsf(a.t, handler, method, url, values, str, msg, args...)
}
// HTTPError asserts that a specified handler returns an error status code.
@@ -137,8 +361,23 @@ func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string
// a.HTTPError(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}}
//
// Returns whether the assertion was successful (true) or not (false).
-func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url string, values url.Values) {
- HTTPError(a.t, handler, method, url, values)
+func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ HTTPError(a.t, handler, method, url, values, msgAndArgs...)
+}
+
+// HTTPErrorf asserts that a specified handler returns an error status code.
+//
+// a.HTTPErrorf(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}}
+//
+// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false).
+func (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ HTTPErrorf(a.t, handler, method, url, values, msg, args...)
}
// HTTPRedirect asserts that a specified handler returns a redirect status code.
@@ -146,8 +385,23 @@ func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url stri
// a.HTTPRedirect(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}}
//
// Returns whether the assertion was successful (true) or not (false).
-func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url string, values url.Values) {
- HTTPRedirect(a.t, handler, method, url, values)
+func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ HTTPRedirect(a.t, handler, method, url, values, msgAndArgs...)
+}
+
+// HTTPRedirectf asserts that a specified handler returns a redirect status code.
+//
+// a.HTTPRedirectf(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}}
+//
+// Returns whether the assertion was successful (true, "error message %s", "formatted") or not (false).
+func (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ HTTPRedirectf(a.t, handler, method, url, values, msg, args...)
}
// HTTPSuccess asserts that a specified handler returns a success status code.
@@ -155,199 +409,549 @@ func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url s
// a.HTTPSuccess(myHandler, "POST", "http://www.google.com", nil)
//
// Returns whether the assertion was successful (true) or not (false).
-func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url string, values url.Values) {
- HTTPSuccess(a.t, handler, method, url, values)
+func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ HTTPSuccess(a.t, handler, method, url, values, msgAndArgs...)
+}
+
+// HTTPSuccessf asserts that a specified handler returns a success status code.
+//
+// a.HTTPSuccessf(myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted")
+//
+// Returns whether the assertion was successful (true) or not (false).
+func (a *Assertions) HTTPSuccessf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ HTTPSuccessf(a.t, handler, method, url, values, msg, args...)
}
// Implements asserts that an object is implemented by the specified interface.
//
-// a.Implements((*MyInterface)(nil), new(MyObject), "MyObject")
+// a.Implements((*MyInterface)(nil), new(MyObject))
func (a *Assertions) Implements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Implements(a.t, interfaceObject, object, msgAndArgs...)
}
+// Implementsf asserts that an object is implemented by the specified interface.
+//
+// a.Implementsf((*MyInterface, "error message %s", "formatted")(nil), new(MyObject))
+func (a *Assertions) Implementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Implementsf(a.t, interfaceObject, object, msg, args...)
+}
+
// InDelta asserts that the two numerals are within delta of each other.
//
// a.InDelta(math.Pi, (22 / 7.0), 0.01)
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) InDelta(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
InDelta(a.t, expected, actual, delta, msgAndArgs...)
}
+// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.
+func (a *Assertions) InDeltaMapValues(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ InDeltaMapValues(a.t, expected, actual, delta, msgAndArgs...)
+}
+
+// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.
+func (a *Assertions) InDeltaMapValuesf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ InDeltaMapValuesf(a.t, expected, actual, delta, msg, args...)
+}
+
// InDeltaSlice is the same as InDelta, except it compares two slices.
func (a *Assertions) InDeltaSlice(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
InDeltaSlice(a.t, expected, actual, delta, msgAndArgs...)
}
-// InEpsilon asserts that expected and actual have a relative error less than epsilon
+// InDeltaSlicef is the same as InDelta, except it compares two slices.
+func (a *Assertions) InDeltaSlicef(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ InDeltaSlicef(a.t, expected, actual, delta, msg, args...)
+}
+
+// InDeltaf asserts that the two numerals are within delta of each other.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.InDeltaf(math.Pi, (22 / 7.0, "error message %s", "formatted"), 0.01)
+func (a *Assertions) InDeltaf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ InDeltaf(a.t, expected, actual, delta, msg, args...)
+}
+
+// InEpsilon asserts that expected and actual have a relative error less than epsilon
func (a *Assertions) InEpsilon(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
InEpsilon(a.t, expected, actual, epsilon, msgAndArgs...)
}
// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices.
func (a *Assertions) InEpsilonSlice(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
InEpsilonSlice(a.t, expected, actual, epsilon, msgAndArgs...)
}
+// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices.
+func (a *Assertions) InEpsilonSlicef(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ InEpsilonSlicef(a.t, expected, actual, epsilon, msg, args...)
+}
+
+// InEpsilonf asserts that expected and actual have a relative error less than epsilon
+func (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ InEpsilonf(a.t, expected, actual, epsilon, msg, args...)
+}
+
// IsType asserts that the specified objects are of the same type.
func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
IsType(a.t, expectedType, object, msgAndArgs...)
}
+// IsTypef asserts that the specified objects are of the same type.
+func (a *Assertions) IsTypef(expectedType interface{}, object interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ IsTypef(a.t, expectedType, object, msg, args...)
+}
+
// JSONEq asserts that two JSON strings are equivalent.
//
// a.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`)
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
JSONEq(a.t, expected, actual, msgAndArgs...)
}
+// JSONEqf asserts that two JSON strings are equivalent.
+//
+// a.JSONEqf(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted")
+func (a *Assertions) JSONEqf(expected string, actual string, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ JSONEqf(a.t, expected, actual, msg, args...)
+}
+
// Len asserts that the specified object has specific length.
// Len also fails if the object has a type that len() not accept.
//
-// a.Len(mySlice, 3, "The size of slice is not 3")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Len(mySlice, 3)
func (a *Assertions) Len(object interface{}, length int, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Len(a.t, object, length, msgAndArgs...)
}
-// Nil asserts that the specified object is nil.
+// Lenf asserts that the specified object has specific length.
+// Lenf also fails if the object has a type that len() not accept.
//
-// a.Nil(err, "err should be nothing")
+// a.Lenf(mySlice, 3, "error message %s", "formatted")
+func (a *Assertions) Lenf(object interface{}, length int, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Lenf(a.t, object, length, msg, args...)
+}
+
+// Nil asserts that the specified object is nil.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Nil(err)
func (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Nil(a.t, object, msgAndArgs...)
}
+// Nilf asserts that the specified object is nil.
+//
+// a.Nilf(err, "error message %s", "formatted")
+func (a *Assertions) Nilf(object interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Nilf(a.t, object, msg, args...)
+}
+
// NoError asserts that a function returned no error (i.e. `nil`).
//
// actualObj, err := SomeFunction()
// if a.NoError(err) {
-// assert.Equal(t, actualObj, expectedObj)
+// assert.Equal(t, expectedObj, actualObj)
// }
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) NoError(err error, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
NoError(a.t, err, msgAndArgs...)
}
+// NoErrorf asserts that a function returned no error (i.e. `nil`).
+//
+// actualObj, err := SomeFunction()
+// if a.NoErrorf(err, "error message %s", "formatted") {
+// assert.Equal(t, expectedObj, actualObj)
+// }
+func (a *Assertions) NoErrorf(err error, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NoErrorf(a.t, err, msg, args...)
+}
+
// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the
// specified substring or element.
//
-// a.NotContains("Hello World", "Earth", "But 'Hello World' does NOT contain 'Earth'")
-// a.NotContains(["Hello", "World"], "Earth", "But ['Hello', 'World'] does NOT contain 'Earth'")
-// a.NotContains({"Hello": "World"}, "Earth", "But {'Hello': 'World'} does NOT contain 'Earth'")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.NotContains("Hello World", "Earth")
+// a.NotContains(["Hello", "World"], "Earth")
+// a.NotContains({"Hello": "World"}, "Earth")
func (a *Assertions) NotContains(s interface{}, contains interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
NotContains(a.t, s, contains, msgAndArgs...)
}
+// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the
+// specified substring or element.
+//
+// a.NotContainsf("Hello World", "Earth", "error message %s", "formatted")
+// a.NotContainsf(["Hello", "World"], "Earth", "error message %s", "formatted")
+// a.NotContainsf({"Hello": "World"}, "Earth", "error message %s", "formatted")
+func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotContainsf(a.t, s, contains, msg, args...)
+}
+
// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either
// a slice or a channel with len == 0.
//
// if a.NotEmpty(obj) {
// assert.Equal(t, "two", obj[1])
// }
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
NotEmpty(a.t, object, msgAndArgs...)
}
-// NotEqual asserts that the specified values are NOT equal.
+// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either
+// a slice or a channel with len == 0.
//
-// a.NotEqual(obj1, obj2, "two objects shouldn't be equal")
+// if a.NotEmptyf(obj, "error message %s", "formatted") {
+// assert.Equal(t, "two", obj[1])
+// }
+func (a *Assertions) NotEmptyf(object interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotEmptyf(a.t, object, msg, args...)
+}
+
+// NotEqual asserts that the specified values are NOT equal.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.NotEqual(obj1, obj2)
//
// Pointer variable equality is determined based on the equality of the
// referenced values (as opposed to the memory addresses).
func (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
NotEqual(a.t, expected, actual, msgAndArgs...)
}
-// NotNil asserts that the specified object is not nil.
+// NotEqualf asserts that the specified values are NOT equal.
//
-// a.NotNil(err, "err should be something")
+// a.NotEqualf(obj1, obj2, "error message %s", "formatted")
//
-// Returns whether the assertion was successful (true) or not (false).
+// Pointer variable equality is determined based on the equality of the
+// referenced values (as opposed to the memory addresses).
+func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotEqualf(a.t, expected, actual, msg, args...)
+}
+
+// NotNil asserts that the specified object is not nil.
+//
+// a.NotNil(err)
func (a *Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
NotNil(a.t, object, msgAndArgs...)
}
-// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.
+// NotNilf asserts that the specified object is not nil.
//
-// a.NotPanics(func(){
-// RemainCalm()
-// }, "Calling RemainCalm() should NOT panic")
+// a.NotNilf(err, "error message %s", "formatted")
+func (a *Assertions) NotNilf(object interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotNilf(a.t, object, msg, args...)
+}
+
+// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.NotPanics(func(){ RemainCalm() })
func (a *Assertions) NotPanics(f assert.PanicTestFunc, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
NotPanics(a.t, f, msgAndArgs...)
}
+// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic.
+//
+// a.NotPanicsf(func(){ RemainCalm() }, "error message %s", "formatted")
+func (a *Assertions) NotPanicsf(f assert.PanicTestFunc, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotPanicsf(a.t, f, msg, args...)
+}
+
// NotRegexp asserts that a specified regexp does not match a string.
//
// a.NotRegexp(regexp.MustCompile("starts"), "it's starting")
// a.NotRegexp("^start", "it's not starting")
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
NotRegexp(a.t, rx, str, msgAndArgs...)
}
-// NotZero asserts that i is not the zero value for its type and returns the truth.
+// NotRegexpf asserts that a specified regexp does not match a string.
+//
+// a.NotRegexpf(regexp.MustCompile("starts", "error message %s", "formatted"), "it's starting")
+// a.NotRegexpf("^start", "it's not starting", "error message %s", "formatted")
+func (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotRegexpf(a.t, rx, str, msg, args...)
+}
+
+// NotSubset asserts that the specified list(array, slice...) contains not all
+// elements given in the specified subset(array, slice...).
+//
+// a.NotSubset([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]")
+func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotSubset(a.t, list, subset, msgAndArgs...)
+}
+
+// NotSubsetf asserts that the specified list(array, slice...) contains not all
+// elements given in the specified subset(array, slice...).
+//
+// a.NotSubsetf([1, 3, 4], [1, 2], "But [1, 3, 4] does not contain [1, 2]", "error message %s", "formatted")
+func (a *Assertions) NotSubsetf(list interface{}, subset interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotSubsetf(a.t, list, subset, msg, args...)
+}
+
+// NotZero asserts that i is not the zero value for its type.
func (a *Assertions) NotZero(i interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
NotZero(a.t, i, msgAndArgs...)
}
+// NotZerof asserts that i is not the zero value for its type.
+func (a *Assertions) NotZerof(i interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ NotZerof(a.t, i, msg, args...)
+}
+
// Panics asserts that the code inside the specified PanicTestFunc panics.
//
-// a.Panics(func(){
-// GoCrazy()
-// }, "Calling GoCrazy() should panic")
-//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Panics(func(){ GoCrazy() })
func (a *Assertions) Panics(f assert.PanicTestFunc, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Panics(a.t, f, msgAndArgs...)
}
+// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that
+// the recovered panic value equals the expected panic value.
+//
+// a.PanicsWithValue("crazy error", func(){ GoCrazy() })
+func (a *Assertions) PanicsWithValue(expected interface{}, f assert.PanicTestFunc, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ PanicsWithValue(a.t, expected, f, msgAndArgs...)
+}
+
+// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that
+// the recovered panic value equals the expected panic value.
+//
+// a.PanicsWithValuef("crazy error", func(){ GoCrazy() }, "error message %s", "formatted")
+func (a *Assertions) PanicsWithValuef(expected interface{}, f assert.PanicTestFunc, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ PanicsWithValuef(a.t, expected, f, msg, args...)
+}
+
+// Panicsf asserts that the code inside the specified PanicTestFunc panics.
+//
+// a.Panicsf(func(){ GoCrazy() }, "error message %s", "formatted")
+func (a *Assertions) Panicsf(f assert.PanicTestFunc, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Panicsf(a.t, f, msg, args...)
+}
+
// Regexp asserts that a specified regexp matches a string.
//
// a.Regexp(regexp.MustCompile("start"), "it's starting")
// a.Regexp("start...$", "it's not starting")
-//
-// Returns whether the assertion was successful (true) or not (false).
func (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Regexp(a.t, rx, str, msgAndArgs...)
}
-// True asserts that the specified value is true.
+// Regexpf asserts that a specified regexp matches a string.
//
-// a.True(myBool, "myBool should be true")
+// a.Regexpf(regexp.MustCompile("start", "error message %s", "formatted"), "it's starting")
+// a.Regexpf("start...$", "it's not starting", "error message %s", "formatted")
+func (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Regexpf(a.t, rx, str, msg, args...)
+}
+
+// Subset asserts that the specified list(array, slice...) contains all
+// elements given in the specified subset(array, slice...).
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.Subset([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]")
+func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Subset(a.t, list, subset, msgAndArgs...)
+}
+
+// Subsetf asserts that the specified list(array, slice...) contains all
+// elements given in the specified subset(array, slice...).
+//
+// a.Subsetf([1, 2, 3], [1, 2], "But [1, 2, 3] does contain [1, 2]", "error message %s", "formatted")
+func (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Subsetf(a.t, list, subset, msg, args...)
+}
+
+// True asserts that the specified value is true.
+//
+// a.True(myBool)
func (a *Assertions) True(value bool, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
True(a.t, value, msgAndArgs...)
}
-// WithinDuration asserts that the two times are within duration delta of each other.
+// Truef asserts that the specified value is true.
//
-// a.WithinDuration(time.Now(), time.Now(), 10*time.Second, "The difference should not be more than 10s")
+// a.Truef(myBool, "error message %s", "formatted")
+func (a *Assertions) Truef(value bool, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Truef(a.t, value, msg, args...)
+}
+
+// WithinDuration asserts that the two times are within duration delta of each other.
//
-// Returns whether the assertion was successful (true) or not (false).
+// a.WithinDuration(time.Now(), time.Now(), 10*time.Second)
func (a *Assertions) WithinDuration(expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
WithinDuration(a.t, expected, actual, delta, msgAndArgs...)
}
-// Zero asserts that i is the zero value for its type and returns the truth.
+// WithinDurationf asserts that the two times are within duration delta of each other.
+//
+// a.WithinDurationf(time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted")
+func (a *Assertions) WithinDurationf(expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ WithinDurationf(a.t, expected, actual, delta, msg, args...)
+}
+
+// Zero asserts that i is the zero value for its type.
func (a *Assertions) Zero(i interface{}, msgAndArgs ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
Zero(a.t, i, msgAndArgs...)
}
+
+// Zerof asserts that i is the zero value for its type.
+func (a *Assertions) Zerof(i interface{}, msg string, args ...interface{}) {
+ if h, ok := a.t.(tHelper); ok {
+ h.Helper()
+ }
+ Zerof(a.t, i, msg, args...)
+}
diff --git a/vendor/github.com/stretchr/testify/require/requirements.go b/vendor/github.com/stretchr/testify/require/requirements.go
index 41147562d..6b85c5ece 100644
--- a/vendor/github.com/stretchr/testify/require/requirements.go
+++ b/vendor/github.com/stretchr/testify/require/requirements.go
@@ -6,4 +6,24 @@ type TestingT interface {
FailNow()
}
-//go:generate go run ../_codegen/main.go -output-package=require -template=require.go.tmpl
+type tHelper interface {
+ Helper()
+}
+
+// ComparisonAssertionFunc is a common function prototype when comparing two values. Can be useful
+// for table driven tests.
+type ComparisonAssertionFunc func(TestingT, interface{}, interface{}, ...interface{})
+
+// ValueAssertionFunc is a common function prototype when validating a single value. Can be useful
+// for table driven tests.
+type ValueAssertionFunc func(TestingT, interface{}, ...interface{})
+
+// BoolAssertionFunc is a common function prototype when validating a bool value. Can be useful
+// for table driven tests.
+type BoolAssertionFunc func(TestingT, bool, ...interface{})
+
+// ErrorAssertionFunc is a common function prototype when validating an error value. Can be useful
+// for table driven tests.
+type ErrorAssertionFunc func(TestingT, error, ...interface{})
+
+//go:generate go run ../_codegen/main.go -output-package=require -template=require.go.tmpl -include-format-funcs
diff --git a/vendor/github.com/syndtr/gocapability/capability/capability.go b/vendor/github.com/syndtr/gocapability/capability/capability.go
index c07c55794..61a90775e 100644
--- a/vendor/github.com/syndtr/gocapability/capability/capability.go
+++ b/vendor/github.com/syndtr/gocapability/capability/capability.go
@@ -60,13 +60,74 @@ type Capabilities interface {
Apply(kind CapType) error
}
-// NewPid create new initialized Capabilities object for given pid when it
-// is nonzero, or for the current pid if pid is 0
+// NewPid initializes a new Capabilities object for given pid when
+// it is nonzero, or for the current process if pid is 0.
+//
+// Deprecated: Replace with NewPid2. For example, replace:
+//
+// c, err := NewPid(0)
+// if err != nil {
+// return err
+// }
+//
+// with:
+//
+// c, err := NewPid2(0)
+// if err != nil {
+// return err
+// }
+// err = c.Load()
+// if err != nil {
+// return err
+// }
func NewPid(pid int) (Capabilities, error) {
+ c, err := newPid(pid)
+ if err != nil {
+ return c, err
+ }
+ err = c.Load()
+ return c, err
+}
+
+// NewPid2 initializes a new Capabilities object for given pid when
+// it is nonzero, or for the current process if pid is 0. This
+// does not load the process's current capabilities; to do that you
+// must call Load explicitly.
+func NewPid2(pid int) (Capabilities, error) {
return newPid(pid)
}
-// NewFile create new initialized Capabilities object for given named file.
-func NewFile(name string) (Capabilities, error) {
- return newFile(name)
+// NewFile initializes a new Capabilities object for given file path.
+//
+// Deprecated: Replace with NewFile2. For example, replace:
+//
+// c, err := NewFile(path)
+// if err != nil {
+// return err
+// }
+//
+// with:
+//
+// c, err := NewFile2(path)
+// if err != nil {
+// return err
+// }
+// err = c.Load()
+// if err != nil {
+// return err
+// }
+func NewFile(path string) (Capabilities, error) {
+ c, err := newFile(path)
+ if err != nil {
+ return c, err
+ }
+ err = c.Load()
+ return c, err
+}
+
+// NewFile2 creates a new initialized Capabilities object for given
+// file path. This does not load the process's current capabilities;
+// to do that you must call Load explicitly.
+func NewFile2(path string) (Capabilities, error) {
+ return newFile(path)
}
diff --git a/vendor/github.com/syndtr/gocapability/capability/capability_linux.go b/vendor/github.com/syndtr/gocapability/capability/capability_linux.go
index 6d2135ac5..1567dc810 100644
--- a/vendor/github.com/syndtr/gocapability/capability/capability_linux.go
+++ b/vendor/github.com/syndtr/gocapability/capability/capability_linux.go
@@ -103,21 +103,17 @@ func newPid(pid int) (c Capabilities, err error) {
case linuxCapVer1:
p := new(capsV1)
p.hdr.version = capVers
- p.hdr.pid = pid
+ p.hdr.pid = int32(pid)
c = p
case linuxCapVer2, linuxCapVer3:
p := new(capsV3)
p.hdr.version = capVers
- p.hdr.pid = pid
+ p.hdr.pid = int32(pid)
c = p
default:
err = errUnknownVers
return
}
- err = c.Load()
- if err != nil {
- c = nil
- }
return
}
@@ -428,11 +424,11 @@ func (c *capsV3) Load() (err error) {
}
if strings.HasPrefix(line, "CapB") {
fmt.Sscanf(line[4:], "nd: %08x%08x", &c.bounds[1], &c.bounds[0])
- break
+ continue
}
if strings.HasPrefix(line, "CapA") {
fmt.Sscanf(line[4:], "mb: %08x%08x", &c.ambient[1], &c.ambient[0])
- break
+ continue
}
}
f.Close()
@@ -492,10 +488,6 @@ func (c *capsV3) Apply(kind CapType) (err error) {
func newFile(path string) (c Capabilities, err error) {
c = &capsFile{path: path}
- err = c.Load()
- if err != nil {
- c = nil
- }
return
}
diff --git a/vendor/github.com/syndtr/gocapability/capability/syscall_linux.go b/vendor/github.com/syndtr/gocapability/capability/syscall_linux.go
index eb7170083..3d2bf6927 100644
--- a/vendor/github.com/syndtr/gocapability/capability/syscall_linux.go
+++ b/vendor/github.com/syndtr/gocapability/capability/syscall_linux.go
@@ -13,7 +13,7 @@ import (
type capHeader struct {
version uint32
- pid int
+ pid int32
}
type capData struct {
diff --git a/vendor/github.com/ulikunitz/xz/README.md b/vendor/github.com/ulikunitz/xz/README.md
index 969ae7a00..0a2dc8284 100644
--- a/vendor/github.com/ulikunitz/xz/README.md
+++ b/vendor/github.com/ulikunitz/xz/README.md
@@ -12,46 +12,48 @@ have been developed over a long time and are highly optimized. However
there are a number of improvements planned and I'm very optimistic about
parallel compression and decompression. Stay tuned!
-# Using the API
+## Using the API
The following example program shows how to use the API.
- package main
-
- import (
- "bytes"
- "io"
- "log"
- "os"
-
- "github.com/ulikunitz/xz"
- )
-
- func main() {
- const text = "The quick brown fox jumps over the lazy dog.\n"
- var buf bytes.Buffer
- // compress text
- w, err := xz.NewWriter(&buf)
- if err != nil {
- log.Fatalf("xz.NewWriter error %s", err)
- }
- if _, err := io.WriteString(w, text); err != nil {
- log.Fatalf("WriteString error %s", err)
- }
- if err := w.Close(); err != nil {
- log.Fatalf("w.Close error %s", err)
- }
- // decompress buffer and write output to stdout
- r, err := xz.NewReader(&buf)
- if err != nil {
- log.Fatalf("NewReader error %s", err)
- }
- if _, err = io.Copy(os.Stdout, r); err != nil {
- log.Fatalf("io.Copy error %s", err)
- }
+```go
+package main
+
+import (
+ "bytes"
+ "io"
+ "log"
+ "os"
+
+ "github.com/ulikunitz/xz"
+)
+
+func main() {
+ const text = "The quick brown fox jumps over the lazy dog.\n"
+ var buf bytes.Buffer
+ // compress text
+ w, err := xz.NewWriter(&buf)
+ if err != nil {
+ log.Fatalf("xz.NewWriter error %s", err)
}
+ if _, err := io.WriteString(w, text); err != nil {
+ log.Fatalf("WriteString error %s", err)
+ }
+ if err := w.Close(); err != nil {
+ log.Fatalf("w.Close error %s", err)
+ }
+ // decompress buffer and write output to stdout
+ r, err := xz.NewReader(&buf)
+ if err != nil {
+ log.Fatalf("NewReader error %s", err)
+ }
+ if _, err = io.Copy(os.Stdout, r); err != nil {
+ log.Fatalf("io.Copy error %s", err)
+ }
+}
+```
-# Using the gxz compression tool
+## Using the gxz compression tool
The package includes a gxz command line utility for compression and
decompression.
diff --git a/vendor/github.com/ulikunitz/xz/example.go b/vendor/github.com/ulikunitz/xz/example.go
deleted file mode 100644
index 855e60aee..000000000
--- a/vendor/github.com/ulikunitz/xz/example.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build ignore
-
-package main
-
-import (
- "bytes"
- "io"
- "log"
- "os"
-
- "github.com/ulikunitz/xz"
-)
-
-func main() {
- const text = "The quick brown fox jumps over the lazy dog.\n"
- var buf bytes.Buffer
- // compress text
- w, err := xz.NewWriter(&buf)
- if err != nil {
- log.Fatalf("xz.NewWriter error %s", err)
- }
- if _, err := io.WriteString(w, text); err != nil {
- log.Fatalf("WriteString error %s", err)
- }
- if err := w.Close(); err != nil {
- log.Fatalf("w.Close error %s", err)
- }
- // decompress buffer and write output to stdout
- r, err := xz.NewReader(&buf)
- if err != nil {
- log.Fatalf("NewReader error %s", err)
- }
- if _, err = io.Copy(os.Stdout, r); err != nil {
- log.Fatalf("io.Copy error %s", err)
- }
-}
diff --git a/vendor/github.com/ulikunitz/xz/lzma/encoder.go b/vendor/github.com/ulikunitz/xz/lzma/encoder.go
index 18ce00992..fe1900a66 100644
--- a/vendor/github.com/ulikunitz/xz/lzma/encoder.go
+++ b/vendor/github.com/ulikunitz/xz/lzma/encoder.go
@@ -11,7 +11,7 @@ import (
// opLenMargin provides the upper limit of the number of bytes required
// to encode a single operation.
-const opLenMargin = 10
+const opLenMargin = 16
// compressFlags control the compression process.
type compressFlags uint32
diff --git a/vendor/github.com/urfave/cli/command.go b/vendor/github.com/urfave/cli/command.go
index 56b633c1a..3d44404f1 100644
--- a/vendor/github.com/urfave/cli/command.go
+++ b/vendor/github.com/urfave/cli/command.go
@@ -57,7 +57,7 @@ type Command struct {
// Boolean to hide this command from help or completion
Hidden bool
// Boolean to enable short-option handling so user can combine several
- // single-character bool arguements into one
+ // single-character bool arguments into one
// i.e. foobar -o -v -> foobar -ov
UseShortOptionHandling bool
diff --git a/vendor/github.com/varlink/go/.gitignore b/vendor/github.com/varlink/go/.gitignore
index 69e30cff1..a43b0e2d3 100644
--- a/vendor/github.com/varlink/go/.gitignore
+++ b/vendor/github.com/varlink/go/.gitignore
@@ -1 +1,2 @@
/cmd/varlink-go-certification/orgvarlinkcertification/orgvarlinkcertification.go
+/.idea
diff --git a/vendor/github.com/varlink/go/.travis.yml b/vendor/github.com/varlink/go/.travis.yml
index c090a924f..fa9963500 100644
--- a/vendor/github.com/varlink/go/.travis.yml
+++ b/vendor/github.com/varlink/go/.travis.yml
@@ -1,11 +1,13 @@
language: go
sudo: false
go:
-- '1.9'
-- 1.10.x
+- '1.10'
+- 1.11.x
install:
- go get golang.org/x/tools/cmd/cover
- go get github.com/mattn/goveralls
+- go get github.com/TylerBrock/colorjson
+- go get github.com/fatih/color
script:
- go generate ./...
- '"$HOME/gopath/bin/goveralls" -v -show -service=travis-ci -repotoken "$COVERALLS_TOKEN"'
diff --git a/vendor/github.com/varlink/go/cmd/varlink/main.go b/vendor/github.com/varlink/go/cmd/varlink/main.go
new file mode 100644
index 000000000..1de4e1a45
--- /dev/null
+++ b/vendor/github.com/varlink/go/cmd/varlink/main.go
@@ -0,0 +1,295 @@
+package main
+
+import (
+ "encoding/json"
+ "flag"
+ "fmt"
+ "github.com/TylerBrock/colorjson"
+ "github.com/fatih/color"
+ "github.com/varlink/go/varlink"
+ "os"
+ "strings"
+)
+
+var bold = color.New(color.Bold)
+var errorBoldRed = bold.Sprint(color.New(color.FgRed).Sprint("Error:"))
+var bridge string
+
+func ErrPrintf(format string, a ...interface{}) {
+ fmt.Fprintf(os.Stderr, "%s ", errorBoldRed)
+ fmt.Fprintf(os.Stderr, format, a...)
+}
+
+func print_usage(set *flag.FlagSet, arg_help string) {
+ if set == nil {
+ fmt.Fprintf(os.Stderr, "Usage: %s [GLOBAL OPTIONS] COMMAND ...\n", os.Args[0])
+ } else {
+ fmt.Fprintf(os.Stderr, "Usage: %s [GLOBAL OPTIONS] %s [OPTIONS] %s\n", os.Args[0], set.Name(), arg_help)
+ }
+
+ fmt.Fprintln(os.Stderr, "\nGlobal Options:")
+ flag.PrintDefaults()
+
+ if set == nil {
+ fmt.Fprintln(os.Stderr, "\nCommands:")
+ fmt.Fprintln(os.Stderr, " info\tPrint information about a service")
+ fmt.Fprintln(os.Stderr, " help\tPrint interface description or service information")
+ fmt.Fprintln(os.Stderr, " call\tCall a method")
+ } else {
+ fmt.Fprintln(os.Stderr, "\nOptions:")
+ set.PrintDefaults()
+ }
+ os.Exit(1)
+}
+
+func varlink_call(args []string) {
+ var err error
+ var oneway bool
+
+ callFlags := flag.NewFlagSet("help", flag.ExitOnError)
+ callFlags.BoolVar(&oneway, "-oneway", false, "Use bridge for connection")
+ var help bool
+ callFlags.BoolVar(&help, "help", false, "Prints help information")
+ var usage = func() { print_usage(callFlags, "<[ADDRESS/]INTERFACE.METHOD> [ARGUMENTS]") }
+ callFlags.Usage = usage
+
+ _ = callFlags.Parse(args)
+
+ if help {
+ usage()
+ }
+
+ var con *varlink.Connection
+ var address string
+ var methodName string
+
+ if len(bridge) != 0 {
+ con, err = varlink.NewBridge(bridge)
+
+ if err != nil {
+ ErrPrintf("Cannot connect with bridge '%s': %v\n", bridge, err)
+ os.Exit(2)
+ }
+ address = "bridge:" + bridge
+ methodName = callFlags.Arg(0)
+ } else {
+ uri := callFlags.Arg(0)
+ if uri == "" {
+ usage()
+ }
+
+ li := strings.LastIndex(uri, "/")
+
+ if li == -1 {
+ ErrPrintf("Invalid address '%s'\n", uri)
+ os.Exit(2)
+ }
+
+ address = uri[:li]
+ methodName = uri[li+1:]
+
+ con, err = varlink.NewConnection(address)
+
+ if err != nil {
+ ErrPrintf("Cannot connect to '%s': %v\n", address, err)
+ os.Exit(2)
+ }
+ }
+ var parameters string
+ var params json.RawMessage
+
+ parameters = callFlags.Arg(1)
+ if parameters == "" {
+ params = nil
+ } else {
+ json.Unmarshal([]byte(parameters), &params)
+ }
+
+ var flags uint64
+ flags = 0
+ if oneway {
+ flags |= varlink.Oneway
+ }
+ recv, err := con.Send(methodName, params, flags)
+
+ var retval map[string]interface{}
+
+ // FIXME: Use cont
+ _, err = recv(&retval)
+
+ f := colorjson.NewFormatter()
+ f.Indent = 2
+ f.KeyColor = color.New(color.FgCyan)
+ f.StringColor = color.New(color.FgMagenta)
+ f.NumberColor = color.New(color.FgMagenta)
+ f.BoolColor = color.New(color.FgMagenta)
+ f.NullColor = color.New(color.FgMagenta)
+
+ if err != nil {
+ ErrPrintf("Error calling '%s': %v\n", methodName, err)
+ switch e := err.(type) {
+ case *varlink.Error:
+ println(e.Name)
+ errorRawParameters := e.Parameters.(*json.RawMessage)
+
+ if errorRawParameters == nil {
+ break
+ }
+ var param map[string]interface{}
+ _ = json.Unmarshal(*errorRawParameters, &param)
+ c, _ := f.Marshal(param)
+ ErrPrintf("%v\n", string(c))
+ }
+ os.Exit(2)
+ }
+ c, _ := f.Marshal(retval)
+ fmt.Println(string(c))
+}
+
+func varlink_help(args []string) {
+ var err error
+
+ helpFlags := flag.NewFlagSet("help", flag.ExitOnError)
+ var help bool
+ helpFlags.BoolVar(&help, "help", false, "Prints help information")
+ var usage = func() { print_usage(helpFlags, "<[ADDRESS/]INTERFACE>") }
+ helpFlags.Usage = usage
+
+ _ = helpFlags.Parse(args)
+
+ if help {
+ usage()
+ }
+
+ var con *varlink.Connection
+ var address string
+ var interfaceName string
+
+ if len(bridge) != 0 {
+ con, err = varlink.NewBridge(bridge)
+
+ if err != nil {
+ ErrPrintf("Cannot connect with bridge '%s': %v\n", bridge, err)
+ os.Exit(2)
+ }
+ address = "bridge:" + bridge
+ interfaceName = helpFlags.Arg(0)
+ } else {
+ uri := helpFlags.Arg(0)
+ if uri == "" && bridge == "" {
+ ErrPrintf("No ADDRESS or activation or bridge\n\n")
+ usage()
+ }
+
+ li := strings.LastIndex(uri, "/")
+
+ if li == -1 {
+ ErrPrintf("Invalid address '%s'\n", uri)
+ os.Exit(2)
+ }
+
+ address = uri[:li]
+
+ con, err = varlink.NewConnection(address)
+
+ if err != nil {
+ ErrPrintf("Cannot connect to '%s': %v\n", address, err)
+ os.Exit(2)
+ }
+
+ interfaceName = uri[li+1:]
+ }
+ description, err := con.GetInterfaceDescription(interfaceName)
+
+ if err != nil {
+ ErrPrintf("Cannot get interface description for '%s': %v\n", interfaceName, err)
+ os.Exit(2)
+ }
+
+ fmt.Println(description)
+}
+
+func varlink_info(args []string) {
+ var err error
+ infoFlags := flag.NewFlagSet("info", flag.ExitOnError)
+ var help bool
+ infoFlags.BoolVar(&help, "help", false, "Prints help information")
+ var usage = func() { print_usage(infoFlags, "[ADDRESS]") }
+ infoFlags.Usage = usage
+
+ _ = infoFlags.Parse(args)
+
+ if help {
+ usage()
+ }
+
+ var con *varlink.Connection
+ var address string
+
+ if len(bridge) != 0 {
+ con, err = varlink.NewBridge(bridge)
+
+ if err != nil {
+ ErrPrintf("Cannot connect with bridge '%s': %v\n", bridge, err)
+ os.Exit(2)
+ }
+ address = "bridge:" + bridge
+ } else {
+ address = infoFlags.Arg(0)
+
+ if address == "" && bridge == "" {
+ ErrPrintf("No ADDRESS or activation or bridge\n\n")
+ usage()
+ }
+
+ con, err = varlink.NewConnection(address)
+
+ if err != nil {
+ ErrPrintf("Cannot connect to '%s': %v\n", address, err)
+ os.Exit(2)
+ }
+ }
+
+ var vendor, product, version, url string
+ var interfaces []string
+
+ err = con.GetInfo(&vendor, &product, &version, &url, &interfaces)
+
+ if err != nil {
+ ErrPrintf("Cannot get info for '%s': %v\n", address, err)
+ os.Exit(2)
+ }
+
+ fmt.Printf("%s %s\n", bold.Sprint("Vendor:"), vendor)
+ fmt.Printf("%s %s\n", bold.Sprint("Product:"), product)
+ fmt.Printf("%s %s\n", bold.Sprint("Version:"), version)
+ fmt.Printf("%s %s\n", bold.Sprint("URL:"), url)
+ fmt.Printf("%s\n %s\n\n", bold.Sprint("Interfaces:"), strings.Join(interfaces[:], "\n "))
+}
+
+func main() {
+ var debug bool
+ var colorMode string
+
+ flag.CommandLine.Usage = func() { print_usage(nil, "") }
+ flag.BoolVar(&debug, "debug", false, "Enable debug output")
+ flag.StringVar(&bridge, "bridge", "", "Use bridge for connection")
+ flag.StringVar(&colorMode, "color", "auto", "colorize output [default: auto] [possible values: on, off, auto]")
+
+ flag.Parse()
+
+ if colorMode != "on" && (os.Getenv("TERM") == "" || colorMode == "off") {
+ color.NoColor = true // disables colorized output
+ }
+
+ switch flag.Arg(0) {
+ case "info":
+ varlink_info(flag.Args()[1:])
+ case "help":
+ varlink_help(flag.Args()[1:])
+ case "call":
+ varlink_call(flag.Args()[1:])
+ default:
+ print_usage(nil, "")
+ }
+}
diff --git a/vendor/github.com/varlink/go/varlink/bridge.go b/vendor/github.com/varlink/go/varlink/bridge.go
new file mode 100644
index 000000000..b20c0925a
--- /dev/null
+++ b/vendor/github.com/varlink/go/varlink/bridge.go
@@ -0,0 +1,59 @@
+// +build !windows
+
+package varlink
+
+import (
+ "bufio"
+ "io"
+ "log"
+ "net"
+ "os/exec"
+)
+
+type PipeCon struct {
+ net.Conn
+ reader *io.ReadCloser
+ writer *io.WriteCloser
+}
+
+func (p PipeCon) Close() error {
+ err1 := (*p.reader).Close()
+ err2 := (*p.writer).Close()
+ if err1 != nil {
+ return err1
+ }
+ if err2 != nil {
+ return err2
+ }
+ return nil
+}
+
+// NewConnection returns a new connection to the given address.
+func NewBridge(bridge string) (*Connection, error) {
+ //var err error
+
+ c := Connection{}
+ cmd := exec.Command("sh", "-c", bridge)
+ r, err := cmd.StdoutPipe()
+ if err != nil {
+ return nil, err
+ }
+ w, err := cmd.StdinPipe()
+ if err != nil {
+ return nil, err
+ }
+ c.conn = PipeCon{nil, &r, &w}
+ c.address = ""
+ c.reader = bufio.NewReader(r)
+ c.writer = bufio.NewWriter(w)
+
+ go func() {
+ err := cmd.Run()
+ if err != nil {
+ log.Fatal(err)
+ }
+ }()
+
+ return &c, nil
+}
+
diff --git a/vendor/github.com/varlink/go/varlink/bridge_windows.go b/vendor/github.com/varlink/go/varlink/bridge_windows.go
new file mode 100644
index 000000000..692367a1a
--- /dev/null
+++ b/vendor/github.com/varlink/go/varlink/bridge_windows.go
@@ -0,0 +1,57 @@
+package varlink
+
+import (
+ "bufio"
+ "io"
+ "log"
+ "net"
+ "os/exec"
+)
+
+type PipeCon struct {
+ net.Conn
+ reader *io.ReadCloser
+ writer *io.WriteCloser
+}
+
+func (p PipeCon) Close() error {
+ err1 := (*p.reader).Close()
+ err2 := (*p.writer).Close()
+ if err1 != nil {
+ return err1
+ }
+ if err2 != nil {
+ return err2
+ }
+ return nil
+}
+
+// NewConnection returns a new connection to the given address.
+func NewBridge(bridge string) (*Connection, error) {
+ //var err error
+
+ c := Connection{}
+ cmd := exec.Command("cmd", "/C", bridge)
+ r, err := cmd.StdoutPipe()
+ if err != nil {
+ return nil, err
+ }
+ w, err := cmd.StdinPipe()
+ if err != nil {
+ return nil, err
+ }
+ c.conn = PipeCon{nil, &r, &w}
+ c.address = ""
+ c.reader = bufio.NewReader(r)
+ c.writer = bufio.NewWriter(w)
+
+ go func() {
+ err := cmd.Run()
+ if err != nil {
+ log.Fatal(err)
+ }
+ }()
+
+ return &c, nil
+}
+
diff --git a/vendor/github.com/varlink/go/varlink/connection.go b/vendor/github.com/varlink/go/varlink/connection.go
index 43bec6393..ac9542408 100644
--- a/vendor/github.com/varlink/go/varlink/connection.go
+++ b/vendor/github.com/varlink/go/varlink/connection.go
@@ -3,6 +3,7 @@ package varlink
import (
"bufio"
"encoding/json"
+ "fmt"
"net"
"strings"
)
@@ -18,6 +19,7 @@ const (
// Error is a varlink error returned from a method call.
type Error struct {
+ error
Name string
Parameters interface{}
}
@@ -189,6 +191,11 @@ func NewConnection(address string) (*Connection, error) {
var err error
words := strings.SplitN(address, ":", 2)
+
+ if len(words) != 2 {
+ return nil, fmt.Errorf("Protocol missing")
+ }
+
protocol := words[0]
addr := words[1]
diff --git a/vendor/github.com/varlink/go/varlink/service.go b/vendor/github.com/varlink/go/varlink/service.go
index 551ba4e53..cb461f917 100644
--- a/vendor/github.com/varlink/go/varlink/service.go
+++ b/vendor/github.com/varlink/go/varlink/service.go
@@ -6,10 +6,8 @@ import (
"fmt"
"net"
"os"
- "strconv"
"strings"
"sync"
- "syscall"
"time"
)
@@ -110,58 +108,6 @@ func (s *Service) handleMessage(writer *bufio.Writer, request []byte) error {
return iface.VarlinkDispatch(c, methodname)
}
-func activationListener() net.Listener {
- pid, err := strconv.Atoi(os.Getenv("LISTEN_PID"))
- if err != nil || pid != os.Getpid() {
- return nil
- }
-
- nfds, err := strconv.Atoi(os.Getenv("LISTEN_FDS"))
- if err != nil || nfds < 1 {
- return nil
- }
-
- fd := -1
-
- // If more than one file descriptor is passed, find the
- // "varlink" tag. The first file descriptor is always 3.
- if nfds > 1 {
- fdnames, set := os.LookupEnv("LISTEN_FDNAMES")
- if !set {
- return nil
- }
-
- names := strings.Split(fdnames, ":")
- if len(names) != nfds {
- return nil
- }
-
- for i, name := range names {
- if name == "varlink" {
- fd = 3 + i
- break
- }
- }
-
- if fd < 0 {
- return nil
- }
-
- } else {
- fd = 3
- }
-
- syscall.CloseOnExec(fd)
-
- file := os.NewFile(uintptr(fd), "varlink")
- listener, err := net.FileListener(file)
- if err != nil {
- return nil
- }
-
- return listener
-}
-
// Shutdown shuts down the listener of a running service.
func (s *Service) Shutdown() {
s.running = false
@@ -253,18 +199,17 @@ func getListener(protocol string, address string) (net.Listener, error) {
}
func (s *Service) refreshTimeout(timeout time.Duration) error {
- switch s.protocol {
- case "unix":
- if err := s.listener.(*net.UnixListener).SetDeadline(time.Now().Add(timeout)); err != nil {
+ switch l := s.listener.(type) {
+ case *net.UnixListener:
+ if err:= l.SetDeadline(time.Now().Add(timeout)); err != nil {
return err
}
-
- case "tcp":
- if err := s.listener.(*net.TCPListener).SetDeadline(time.Now().Add(timeout)); err != nil {
+ case *net.TCPListener:
+ if err:= l.SetDeadline(time.Now().Add(timeout)); err != nil {
return err
}
- }
+ }
return nil
}
diff --git a/vendor/github.com/varlink/go/varlink/socketactivation.go b/vendor/github.com/varlink/go/varlink/socketactivation.go
new file mode 100644
index 000000000..a64c0dc8e
--- /dev/null
+++ b/vendor/github.com/varlink/go/varlink/socketactivation.go
@@ -0,0 +1,63 @@
+// +build !windows
+
+package varlink
+
+import (
+ "net"
+ "os"
+ "strconv"
+ "strings"
+ "syscall"
+)
+
+func activationListener() net.Listener {
+ pid, err := strconv.Atoi(os.Getenv("LISTEN_PID"))
+ if err != nil || pid != os.Getpid() {
+ return nil
+ }
+
+ nfds, err := strconv.Atoi(os.Getenv("LISTEN_FDS"))
+ if err != nil || nfds < 1 {
+ return nil
+ }
+
+ fd := -1
+
+ // If more than one file descriptor is passed, find the
+ // "varlink" tag. The first file descriptor is always 3.
+ if nfds > 1 {
+ fdnames, set := os.LookupEnv("LISTEN_FDNAMES")
+ if !set {
+ return nil
+ }
+
+ names := strings.Split(fdnames, ":")
+ if len(names) != nfds {
+ return nil
+ }
+
+ for i, name := range names {
+ if name == "varlink" {
+ fd = 3 + i
+ break
+ }
+ }
+
+ if fd < 0 {
+ return nil
+ }
+
+ } else {
+ fd = 3
+ }
+
+ syscall.CloseOnExec(fd)
+
+ file := os.NewFile(uintptr(fd), "varlink")
+ listener, err := net.FileListener(file)
+ if err != nil {
+ return nil
+ }
+
+ return listener
+}
diff --git a/vendor/github.com/varlink/go/varlink/socketactivation_windows.go b/vendor/github.com/varlink/go/varlink/socketactivation_windows.go
new file mode 100644
index 000000000..fb0894531
--- /dev/null
+++ b/vendor/github.com/varlink/go/varlink/socketactivation_windows.go
@@ -0,0 +1,7 @@
+package varlink
+
+import "net"
+
+func activationListener() net.Listener {
+ return nil
+}
diff --git a/vendor/github.com/vbatts/tar-split/README.md b/vendor/github.com/vbatts/tar-split/README.md
index 03e3ec430..fe997f69b 100644
--- a/vendor/github.com/vbatts/tar-split/README.md
+++ b/vendor/github.com/vbatts/tar-split/README.md
@@ -67,7 +67,7 @@ Do not break the API of stdlib `archive/tar` in our fork (ideally find an upstre
## Std Version
-The version of golang stdlib `archive/tar` is from go1.6
+The version of golang stdlib `archive/tar` is from go1.11
It is minimally extended to expose the raw bytes of the TAR, rather than just the marshalled headers and file stream.
@@ -135,4 +135,3 @@ bytes-per-file rate for the storage implications.
## License
See [LICENSE](LICENSE)
-
diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/common.go b/vendor/github.com/vbatts/tar-split/archive/tar/common.go
index 36f4e2398..dee9e47e4 100644
--- a/vendor/github.com/vbatts/tar-split/archive/tar/common.go
+++ b/vendor/github.com/vbatts/tar-split/archive/tar/common.go
@@ -3,70 +3,528 @@
// license that can be found in the LICENSE file.
// Package tar implements access to tar archives.
-// It aims to cover most of the variations, including those produced
-// by GNU and BSD tars.
//
-// References:
-// http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=5
-// http://www.gnu.org/software/tar/manual/html_node/Standard.html
-// http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html
+// Tape archives (tar) are a file format for storing a sequence of files that
+// can be read and written in a streaming manner.
+// This package aims to cover most variations of the format,
+// including those produced by GNU and BSD tar tools.
package tar
import (
- "bytes"
"errors"
"fmt"
+ "math"
"os"
"path"
+ "reflect"
+ "strconv"
+ "strings"
"time"
)
+// BUG: Use of the Uid and Gid fields in Header could overflow on 32-bit
+// architectures. If a large value is encountered when decoding, the result
+// stored in Header will be the truncated version.
+
+var (
+ ErrHeader = errors.New("archive/tar: invalid tar header")
+ ErrWriteTooLong = errors.New("archive/tar: write too long")
+ ErrFieldTooLong = errors.New("archive/tar: header field too long")
+ ErrWriteAfterClose = errors.New("archive/tar: write after close")
+ errMissData = errors.New("archive/tar: sparse file references non-existent data")
+ errUnrefData = errors.New("archive/tar: sparse file contains unreferenced data")
+ errWriteHole = errors.New("archive/tar: write non-NUL byte in sparse hole")
+)
+
+type headerError []string
+
+func (he headerError) Error() string {
+ const prefix = "archive/tar: cannot encode header"
+ var ss []string
+ for _, s := range he {
+ if s != "" {
+ ss = append(ss, s)
+ }
+ }
+ if len(ss) == 0 {
+ return prefix
+ }
+ return fmt.Sprintf("%s: %v", prefix, strings.Join(ss, "; and "))
+}
+
+// Type flags for Header.Typeflag.
const (
- blockSize = 512
-
- // Types
- TypeReg = '0' // regular file
- TypeRegA = '\x00' // regular file
- TypeLink = '1' // hard link
- TypeSymlink = '2' // symbolic link
- TypeChar = '3' // character device node
- TypeBlock = '4' // block device node
- TypeDir = '5' // directory
- TypeFifo = '6' // fifo node
- TypeCont = '7' // reserved
- TypeXHeader = 'x' // extended header
- TypeXGlobalHeader = 'g' // global extended header
- TypeGNULongName = 'L' // Next file has a long name
- TypeGNULongLink = 'K' // Next file symlinks to a file w/ a long name
- TypeGNUSparse = 'S' // sparse file
+ // Type '0' indicates a regular file.
+ TypeReg = '0'
+ TypeRegA = '\x00' // Deprecated: Use TypeReg instead.
+
+ // Type '1' to '6' are header-only flags and may not have a data body.
+ TypeLink = '1' // Hard link
+ TypeSymlink = '2' // Symbolic link
+ TypeChar = '3' // Character device node
+ TypeBlock = '4' // Block device node
+ TypeDir = '5' // Directory
+ TypeFifo = '6' // FIFO node
+
+ // Type '7' is reserved.
+ TypeCont = '7'
+
+ // Type 'x' is used by the PAX format to store key-value records that
+ // are only relevant to the next file.
+ // This package transparently handles these types.
+ TypeXHeader = 'x'
+
+ // Type 'g' is used by the PAX format to store key-value records that
+ // are relevant to all subsequent files.
+ // This package only supports parsing and composing such headers,
+ // but does not currently support persisting the global state across files.
+ TypeXGlobalHeader = 'g'
+
+ // Type 'S' indicates a sparse file in the GNU format.
+ TypeGNUSparse = 'S'
+
+ // Types 'L' and 'K' are used by the GNU format for a meta file
+ // used to store the path or link name for the next file.
+ // This package transparently handles these types.
+ TypeGNULongName = 'L'
+ TypeGNULongLink = 'K'
)
+// Keywords for PAX extended header records.
+const (
+ paxNone = "" // Indicates that no PAX key is suitable
+ paxPath = "path"
+ paxLinkpath = "linkpath"
+ paxSize = "size"
+ paxUid = "uid"
+ paxGid = "gid"
+ paxUname = "uname"
+ paxGname = "gname"
+ paxMtime = "mtime"
+ paxAtime = "atime"
+ paxCtime = "ctime" // Removed from later revision of PAX spec, but was valid
+ paxCharset = "charset" // Currently unused
+ paxComment = "comment" // Currently unused
+
+ paxSchilyXattr = "SCHILY.xattr."
+
+ // Keywords for GNU sparse files in a PAX extended header.
+ paxGNUSparse = "GNU.sparse."
+ paxGNUSparseNumBlocks = "GNU.sparse.numblocks"
+ paxGNUSparseOffset = "GNU.sparse.offset"
+ paxGNUSparseNumBytes = "GNU.sparse.numbytes"
+ paxGNUSparseMap = "GNU.sparse.map"
+ paxGNUSparseName = "GNU.sparse.name"
+ paxGNUSparseMajor = "GNU.sparse.major"
+ paxGNUSparseMinor = "GNU.sparse.minor"
+ paxGNUSparseSize = "GNU.sparse.size"
+ paxGNUSparseRealSize = "GNU.sparse.realsize"
+)
+
+// basicKeys is a set of the PAX keys for which we have built-in support.
+// This does not contain "charset" or "comment", which are both PAX-specific,
+// so adding them as first-class features of Header is unlikely.
+// Users can use the PAXRecords field to set it themselves.
+var basicKeys = map[string]bool{
+ paxPath: true, paxLinkpath: true, paxSize: true, paxUid: true, paxGid: true,
+ paxUname: true, paxGname: true, paxMtime: true, paxAtime: true, paxCtime: true,
+}
+
// A Header represents a single header in a tar archive.
// Some fields may not be populated.
+//
+// For forward compatibility, users that retrieve a Header from Reader.Next,
+// mutate it in some ways, and then pass it back to Writer.WriteHeader
+// should do so by creating a new Header and copying the fields
+// that they are interested in preserving.
type Header struct {
- Name string // name of header file entry
- Mode int64 // permission and mode bits
- Uid int // user id of owner
- Gid int // group id of owner
- Size int64 // length in bytes
- ModTime time.Time // modified time
- Typeflag byte // type of header entry
- Linkname string // target name of link
- Uname string // user name of owner
- Gname string // group name of owner
- Devmajor int64 // major number of character or block device
- Devminor int64 // minor number of character or block device
- AccessTime time.Time // access time
- ChangeTime time.Time // status change time
- Xattrs map[string]string
+ // Typeflag is the type of header entry.
+ // The zero value is automatically promoted to either TypeReg or TypeDir
+ // depending on the presence of a trailing slash in Name.
+ Typeflag byte
+
+ Name string // Name of file entry
+ Linkname string // Target name of link (valid for TypeLink or TypeSymlink)
+
+ Size int64 // Logical file size in bytes
+ Mode int64 // Permission and mode bits
+ Uid int // User ID of owner
+ Gid int // Group ID of owner
+ Uname string // User name of owner
+ Gname string // Group name of owner
+
+ // If the Format is unspecified, then Writer.WriteHeader rounds ModTime
+ // to the nearest second and ignores the AccessTime and ChangeTime fields.
+ //
+ // To use AccessTime or ChangeTime, specify the Format as PAX or GNU.
+ // To use sub-second resolution, specify the Format as PAX.
+ ModTime time.Time // Modification time
+ AccessTime time.Time // Access time (requires either PAX or GNU support)
+ ChangeTime time.Time // Change time (requires either PAX or GNU support)
+
+ Devmajor int64 // Major device number (valid for TypeChar or TypeBlock)
+ Devminor int64 // Minor device number (valid for TypeChar or TypeBlock)
+
+ // Xattrs stores extended attributes as PAX records under the
+ // "SCHILY.xattr." namespace.
+ //
+ // The following are semantically equivalent:
+ // h.Xattrs[key] = value
+ // h.PAXRecords["SCHILY.xattr."+key] = value
+ //
+ // When Writer.WriteHeader is called, the contents of Xattrs will take
+ // precedence over those in PAXRecords.
+ //
+ // Deprecated: Use PAXRecords instead.
+ Xattrs map[string]string
+
+ // PAXRecords is a map of PAX extended header records.
+ //
+ // User-defined records should have keys of the following form:
+ // VENDOR.keyword
+ // Where VENDOR is some namespace in all uppercase, and keyword may
+ // not contain the '=' character (e.g., "GOLANG.pkg.version").
+ // The key and value should be non-empty UTF-8 strings.
+ //
+ // When Writer.WriteHeader is called, PAX records derived from the
+ // other fields in Header take precedence over PAXRecords.
+ PAXRecords map[string]string
+
+ // Format specifies the format of the tar header.
+ //
+ // This is set by Reader.Next as a best-effort guess at the format.
+ // Since the Reader liberally reads some non-compliant files,
+ // it is possible for this to be FormatUnknown.
+ //
+ // If the format is unspecified when Writer.WriteHeader is called,
+ // then it uses the first format (in the order of USTAR, PAX, GNU)
+ // capable of encoding this Header (see Format).
+ Format Format
}
-// File name constants from the tar spec.
-const (
- fileNameSize = 100 // Maximum number of bytes in a standard tar name.
- fileNamePrefixSize = 155 // Maximum number of ustar extension bytes.
+// sparseEntry represents a Length-sized fragment at Offset in the file.
+type sparseEntry struct{ Offset, Length int64 }
+
+func (s sparseEntry) endOffset() int64 { return s.Offset + s.Length }
+
+// A sparse file can be represented as either a sparseDatas or a sparseHoles.
+// As long as the total size is known, they are equivalent and one can be
+// converted to the other form and back. The various tar formats with sparse
+// file support represent sparse files in the sparseDatas form. That is, they
+// specify the fragments in the file that has data, and treat everything else as
+// having zero bytes. As such, the encoding and decoding logic in this package
+// deals with sparseDatas.
+//
+// However, the external API uses sparseHoles instead of sparseDatas because the
+// zero value of sparseHoles logically represents a normal file (i.e., there are
+// no holes in it). On the other hand, the zero value of sparseDatas implies
+// that the file has no data in it, which is rather odd.
+//
+// As an example, if the underlying raw file contains the 10-byte data:
+// var compactFile = "abcdefgh"
+//
+// And the sparse map has the following entries:
+// var spd sparseDatas = []sparseEntry{
+// {Offset: 2, Length: 5}, // Data fragment for 2..6
+// {Offset: 18, Length: 3}, // Data fragment for 18..20
+// }
+// var sph sparseHoles = []sparseEntry{
+// {Offset: 0, Length: 2}, // Hole fragment for 0..1
+// {Offset: 7, Length: 11}, // Hole fragment for 7..17
+// {Offset: 21, Length: 4}, // Hole fragment for 21..24
+// }
+//
+// Then the content of the resulting sparse file with a Header.Size of 25 is:
+// var sparseFile = "\x00"*2 + "abcde" + "\x00"*11 + "fgh" + "\x00"*4
+type (
+ sparseDatas []sparseEntry
+ sparseHoles []sparseEntry
)
+// validateSparseEntries reports whether sp is a valid sparse map.
+// It does not matter whether sp represents data fragments or hole fragments.
+func validateSparseEntries(sp []sparseEntry, size int64) bool {
+ // Validate all sparse entries. These are the same checks as performed by
+ // the BSD tar utility.
+ if size < 0 {
+ return false
+ }
+ var pre sparseEntry
+ for _, cur := range sp {
+ switch {
+ case cur.Offset < 0 || cur.Length < 0:
+ return false // Negative values are never okay
+ case cur.Offset > math.MaxInt64-cur.Length:
+ return false // Integer overflow with large length
+ case cur.endOffset() > size:
+ return false // Region extends beyond the actual size
+ case pre.endOffset() > cur.Offset:
+ return false // Regions cannot overlap and must be in order
+ }
+ pre = cur
+ }
+ return true
+}
+
+// alignSparseEntries mutates src and returns dst where each fragment's
+// starting offset is aligned up to the nearest block edge, and each
+// ending offset is aligned down to the nearest block edge.
+//
+// Even though the Go tar Reader and the BSD tar utility can handle entries
+// with arbitrary offsets and lengths, the GNU tar utility can only handle
+// offsets and lengths that are multiples of blockSize.
+func alignSparseEntries(src []sparseEntry, size int64) []sparseEntry {
+ dst := src[:0]
+ for _, s := range src {
+ pos, end := s.Offset, s.endOffset()
+ pos += blockPadding(+pos) // Round-up to nearest blockSize
+ if end != size {
+ end -= blockPadding(-end) // Round-down to nearest blockSize
+ }
+ if pos < end {
+ dst = append(dst, sparseEntry{Offset: pos, Length: end - pos})
+ }
+ }
+ return dst
+}
+
+// invertSparseEntries converts a sparse map from one form to the other.
+// If the input is sparseHoles, then it will output sparseDatas and vice-versa.
+// The input must have been already validated.
+//
+// This function mutates src and returns a normalized map where:
+// * adjacent fragments are coalesced together
+// * only the last fragment may be empty
+// * the endOffset of the last fragment is the total size
+func invertSparseEntries(src []sparseEntry, size int64) []sparseEntry {
+ dst := src[:0]
+ var pre sparseEntry
+ for _, cur := range src {
+ if cur.Length == 0 {
+ continue // Skip empty fragments
+ }
+ pre.Length = cur.Offset - pre.Offset
+ if pre.Length > 0 {
+ dst = append(dst, pre) // Only add non-empty fragments
+ }
+ pre.Offset = cur.endOffset()
+ }
+ pre.Length = size - pre.Offset // Possibly the only empty fragment
+ return append(dst, pre)
+}
+
+// fileState tracks the number of logical (includes sparse holes) and physical
+// (actual in tar archive) bytes remaining for the current file.
+//
+// Invariant: LogicalRemaining >= PhysicalRemaining
+type fileState interface {
+ LogicalRemaining() int64
+ PhysicalRemaining() int64
+}
+
+// allowedFormats determines which formats can be used.
+// The value returned is the logical OR of multiple possible formats.
+// If the value is FormatUnknown, then the input Header cannot be encoded
+// and an error is returned explaining why.
+//
+// As a by-product of checking the fields, this function returns paxHdrs, which
+// contain all fields that could not be directly encoded.
+// A value receiver ensures that this method does not mutate the source Header.
+func (h Header) allowedFormats() (format Format, paxHdrs map[string]string, err error) {
+ format = FormatUSTAR | FormatPAX | FormatGNU
+ paxHdrs = make(map[string]string)
+
+ var whyNoUSTAR, whyNoPAX, whyNoGNU string
+ var preferPAX bool // Prefer PAX over USTAR
+ verifyString := func(s string, size int, name, paxKey string) {
+ // NUL-terminator is optional for path and linkpath.
+ // Technically, it is required for uname and gname,
+ // but neither GNU nor BSD tar checks for it.
+ tooLong := len(s) > size
+ allowLongGNU := paxKey == paxPath || paxKey == paxLinkpath
+ if hasNUL(s) || (tooLong && !allowLongGNU) {
+ whyNoGNU = fmt.Sprintf("GNU cannot encode %s=%q", name, s)
+ format.mustNotBe(FormatGNU)
+ }
+ if !isASCII(s) || tooLong {
+ canSplitUSTAR := paxKey == paxPath
+ if _, _, ok := splitUSTARPath(s); !canSplitUSTAR || !ok {
+ whyNoUSTAR = fmt.Sprintf("USTAR cannot encode %s=%q", name, s)
+ format.mustNotBe(FormatUSTAR)
+ }
+ if paxKey == paxNone {
+ whyNoPAX = fmt.Sprintf("PAX cannot encode %s=%q", name, s)
+ format.mustNotBe(FormatPAX)
+ } else {
+ paxHdrs[paxKey] = s
+ }
+ }
+ if v, ok := h.PAXRecords[paxKey]; ok && v == s {
+ paxHdrs[paxKey] = v
+ }
+ }
+ verifyNumeric := func(n int64, size int, name, paxKey string) {
+ if !fitsInBase256(size, n) {
+ whyNoGNU = fmt.Sprintf("GNU cannot encode %s=%d", name, n)
+ format.mustNotBe(FormatGNU)
+ }
+ if !fitsInOctal(size, n) {
+ whyNoUSTAR = fmt.Sprintf("USTAR cannot encode %s=%d", name, n)
+ format.mustNotBe(FormatUSTAR)
+ if paxKey == paxNone {
+ whyNoPAX = fmt.Sprintf("PAX cannot encode %s=%d", name, n)
+ format.mustNotBe(FormatPAX)
+ } else {
+ paxHdrs[paxKey] = strconv.FormatInt(n, 10)
+ }
+ }
+ if v, ok := h.PAXRecords[paxKey]; ok && v == strconv.FormatInt(n, 10) {
+ paxHdrs[paxKey] = v
+ }
+ }
+ verifyTime := func(ts time.Time, size int, name, paxKey string) {
+ if ts.IsZero() {
+ return // Always okay
+ }
+ if !fitsInBase256(size, ts.Unix()) {
+ whyNoGNU = fmt.Sprintf("GNU cannot encode %s=%v", name, ts)
+ format.mustNotBe(FormatGNU)
+ }
+ isMtime := paxKey == paxMtime
+ fitsOctal := fitsInOctal(size, ts.Unix())
+ if (isMtime && !fitsOctal) || !isMtime {
+ whyNoUSTAR = fmt.Sprintf("USTAR cannot encode %s=%v", name, ts)
+ format.mustNotBe(FormatUSTAR)
+ }
+ needsNano := ts.Nanosecond() != 0
+ if !isMtime || !fitsOctal || needsNano {
+ preferPAX = true // USTAR may truncate sub-second measurements
+ if paxKey == paxNone {
+ whyNoPAX = fmt.Sprintf("PAX cannot encode %s=%v", name, ts)
+ format.mustNotBe(FormatPAX)
+ } else {
+ paxHdrs[paxKey] = formatPAXTime(ts)
+ }
+ }
+ if v, ok := h.PAXRecords[paxKey]; ok && v == formatPAXTime(ts) {
+ paxHdrs[paxKey] = v
+ }
+ }
+
+ // Check basic fields.
+ var blk block
+ v7 := blk.V7()
+ ustar := blk.USTAR()
+ gnu := blk.GNU()
+ verifyString(h.Name, len(v7.Name()), "Name", paxPath)
+ verifyString(h.Linkname, len(v7.LinkName()), "Linkname", paxLinkpath)
+ verifyString(h.Uname, len(ustar.UserName()), "Uname", paxUname)
+ verifyString(h.Gname, len(ustar.GroupName()), "Gname", paxGname)
+ verifyNumeric(h.Mode, len(v7.Mode()), "Mode", paxNone)
+ verifyNumeric(int64(h.Uid), len(v7.UID()), "Uid", paxUid)
+ verifyNumeric(int64(h.Gid), len(v7.GID()), "Gid", paxGid)
+ verifyNumeric(h.Size, len(v7.Size()), "Size", paxSize)
+ verifyNumeric(h.Devmajor, len(ustar.DevMajor()), "Devmajor", paxNone)
+ verifyNumeric(h.Devminor, len(ustar.DevMinor()), "Devminor", paxNone)
+ verifyTime(h.ModTime, len(v7.ModTime()), "ModTime", paxMtime)
+ verifyTime(h.AccessTime, len(gnu.AccessTime()), "AccessTime", paxAtime)
+ verifyTime(h.ChangeTime, len(gnu.ChangeTime()), "ChangeTime", paxCtime)
+
+ // Check for header-only types.
+ var whyOnlyPAX, whyOnlyGNU string
+ switch h.Typeflag {
+ case TypeReg, TypeChar, TypeBlock, TypeFifo, TypeGNUSparse:
+ // Exclude TypeLink and TypeSymlink, since they may reference directories.
+ if strings.HasSuffix(h.Name, "/") {
+ return FormatUnknown, nil, headerError{"filename may not have trailing slash"}
+ }
+ case TypeXHeader, TypeGNULongName, TypeGNULongLink:
+ return FormatUnknown, nil, headerError{"cannot manually encode TypeXHeader, TypeGNULongName, or TypeGNULongLink headers"}
+ case TypeXGlobalHeader:
+ h2 := Header{Name: h.Name, Typeflag: h.Typeflag, Xattrs: h.Xattrs, PAXRecords: h.PAXRecords, Format: h.Format}
+ if !reflect.DeepEqual(h, h2) {
+ return FormatUnknown, nil, headerError{"only PAXRecords should be set for TypeXGlobalHeader"}
+ }
+ whyOnlyPAX = "only PAX supports TypeXGlobalHeader"
+ format.mayOnlyBe(FormatPAX)
+ }
+ if !isHeaderOnlyType(h.Typeflag) && h.Size < 0 {
+ return FormatUnknown, nil, headerError{"negative size on header-only type"}
+ }
+
+ // Check PAX records.
+ if len(h.Xattrs) > 0 {
+ for k, v := range h.Xattrs {
+ paxHdrs[paxSchilyXattr+k] = v
+ }
+ whyOnlyPAX = "only PAX supports Xattrs"
+ format.mayOnlyBe(FormatPAX)
+ }
+ if len(h.PAXRecords) > 0 {
+ for k, v := range h.PAXRecords {
+ switch _, exists := paxHdrs[k]; {
+ case exists:
+ continue // Do not overwrite existing records
+ case h.Typeflag == TypeXGlobalHeader:
+ paxHdrs[k] = v // Copy all records
+ case !basicKeys[k] && !strings.HasPrefix(k, paxGNUSparse):
+ paxHdrs[k] = v // Ignore local records that may conflict
+ }
+ }
+ whyOnlyPAX = "only PAX supports PAXRecords"
+ format.mayOnlyBe(FormatPAX)
+ }
+ for k, v := range paxHdrs {
+ if !validPAXRecord(k, v) {
+ return FormatUnknown, nil, headerError{fmt.Sprintf("invalid PAX record: %q", k+" = "+v)}
+ }
+ }
+
+ // TODO(dsnet): Re-enable this when adding sparse support.
+ // See https://golang.org/issue/22735
+ /*
+ // Check sparse files.
+ if len(h.SparseHoles) > 0 || h.Typeflag == TypeGNUSparse {
+ if isHeaderOnlyType(h.Typeflag) {
+ return FormatUnknown, nil, headerError{"header-only type cannot be sparse"}
+ }
+ if !validateSparseEntries(h.SparseHoles, h.Size) {
+ return FormatUnknown, nil, headerError{"invalid sparse holes"}
+ }
+ if h.Typeflag == TypeGNUSparse {
+ whyOnlyGNU = "only GNU supports TypeGNUSparse"
+ format.mayOnlyBe(FormatGNU)
+ } else {
+ whyNoGNU = "GNU supports sparse files only with TypeGNUSparse"
+ format.mustNotBe(FormatGNU)
+ }
+ whyNoUSTAR = "USTAR does not support sparse files"
+ format.mustNotBe(FormatUSTAR)
+ }
+ */
+
+ // Check desired format.
+ if wantFormat := h.Format; wantFormat != FormatUnknown {
+ if wantFormat.has(FormatPAX) && !preferPAX {
+ wantFormat.mayBe(FormatUSTAR) // PAX implies USTAR allowed too
+ }
+ format.mayOnlyBe(wantFormat) // Set union of formats allowed and format wanted
+ }
+ if format == FormatUnknown {
+ switch h.Format {
+ case FormatUSTAR:
+ err = headerError{"Format specifies USTAR", whyNoUSTAR, whyOnlyPAX, whyOnlyGNU}
+ case FormatPAX:
+ err = headerError{"Format specifies PAX", whyNoPAX, whyOnlyGNU}
+ case FormatGNU:
+ err = headerError{"Format specifies GNU", whyNoGNU, whyOnlyPAX}
+ default:
+ err = headerError{whyNoUSTAR, whyNoPAX, whyNoGNU, whyOnlyPAX, whyOnlyGNU}
+ }
+ }
+ return format, paxHdrs, err
+}
+
// FileInfo returns an os.FileInfo for the Header.
func (h *Header) FileInfo() os.FileInfo {
return headerFileInfo{h}
@@ -97,63 +555,43 @@ func (fi headerFileInfo) Mode() (mode os.FileMode) {
// Set setuid, setgid and sticky bits.
if fi.h.Mode&c_ISUID != 0 {
- // setuid
mode |= os.ModeSetuid
}
if fi.h.Mode&c_ISGID != 0 {
- // setgid
mode |= os.ModeSetgid
}
if fi.h.Mode&c_ISVTX != 0 {
- // sticky
mode |= os.ModeSticky
}
- // Set file mode bits.
- // clear perm, setuid, setgid and sticky bits.
- m := os.FileMode(fi.h.Mode) &^ 07777
- if m == c_ISDIR {
- // directory
+ // Set file mode bits; clear perm, setuid, setgid, and sticky bits.
+ switch m := os.FileMode(fi.h.Mode) &^ 07777; m {
+ case c_ISDIR:
mode |= os.ModeDir
- }
- if m == c_ISFIFO {
- // named pipe (FIFO)
+ case c_ISFIFO:
mode |= os.ModeNamedPipe
- }
- if m == c_ISLNK {
- // symbolic link
+ case c_ISLNK:
mode |= os.ModeSymlink
- }
- if m == c_ISBLK {
- // device file
+ case c_ISBLK:
mode |= os.ModeDevice
- }
- if m == c_ISCHR {
- // Unix character device
+ case c_ISCHR:
mode |= os.ModeDevice
mode |= os.ModeCharDevice
- }
- if m == c_ISSOCK {
- // Unix domain socket
+ case c_ISSOCK:
mode |= os.ModeSocket
}
switch fi.h.Typeflag {
case TypeSymlink:
- // symbolic link
mode |= os.ModeSymlink
case TypeChar:
- // character device node
mode |= os.ModeDevice
mode |= os.ModeCharDevice
case TypeBlock:
- // block device node
mode |= os.ModeDevice
case TypeDir:
- // directory
mode |= os.ModeDir
case TypeFifo:
- // fifo node
mode |= os.ModeNamedPipe
}
@@ -163,11 +601,15 @@ func (fi headerFileInfo) Mode() (mode os.FileMode) {
// sysStat, if non-nil, populates h from system-dependent fields of fi.
var sysStat func(fi os.FileInfo, h *Header) error
-// Mode constants from the tar spec.
const (
- c_ISUID = 04000 // Set uid
- c_ISGID = 02000 // Set gid
- c_ISVTX = 01000 // Save text (sticky bit)
+ // Mode constants from the USTAR spec:
+ // See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_06
+ c_ISUID = 04000 // Set uid
+ c_ISGID = 02000 // Set gid
+ c_ISVTX = 01000 // Save text (sticky bit)
+
+ // Common Unix mode constants; these are not defined in any common tar standard.
+ // Header.FileInfo understands these, but FileInfoHeader will never produce these.
c_ISDIR = 040000 // Directory
c_ISFIFO = 010000 // FIFO
c_ISREG = 0100000 // Regular file
@@ -177,33 +619,16 @@ const (
c_ISSOCK = 0140000 // Socket
)
-// Keywords for the PAX Extended Header
-const (
- paxAtime = "atime"
- paxCharset = "charset"
- paxComment = "comment"
- paxCtime = "ctime" // please note that ctime is not a valid pax header.
- paxGid = "gid"
- paxGname = "gname"
- paxLinkpath = "linkpath"
- paxMtime = "mtime"
- paxPath = "path"
- paxSize = "size"
- paxUid = "uid"
- paxUname = "uname"
- paxXattr = "SCHILY.xattr."
- paxNone = ""
-)
-
// FileInfoHeader creates a partially-populated Header from fi.
// If fi describes a symlink, FileInfoHeader records link as the link target.
// If fi describes a directory, a slash is appended to the name.
-// Because os.FileInfo's Name method returns only the base name of
-// the file it describes, it may be necessary to modify the Name field
-// of the returned header to provide the full path name of the file.
+//
+// Since os.FileInfo's Name method only returns the base name of
+// the file it describes, it may be necessary to modify Header.Name
+// to provide the full path name of the file.
func FileInfoHeader(fi os.FileInfo, link string) (*Header, error) {
if fi == nil {
- return nil, errors.New("tar: FileInfo is nil")
+ return nil, errors.New("archive/tar: FileInfo is nil")
}
fm := fi.Mode()
h := &Header{
@@ -213,30 +638,24 @@ func FileInfoHeader(fi os.FileInfo, link string) (*Header, error) {
}
switch {
case fm.IsRegular():
- h.Mode |= c_ISREG
h.Typeflag = TypeReg
h.Size = fi.Size()
case fi.IsDir():
h.Typeflag = TypeDir
- h.Mode |= c_ISDIR
h.Name += "/"
case fm&os.ModeSymlink != 0:
h.Typeflag = TypeSymlink
- h.Mode |= c_ISLNK
h.Linkname = link
case fm&os.ModeDevice != 0:
if fm&os.ModeCharDevice != 0 {
- h.Mode |= c_ISCHR
h.Typeflag = TypeChar
} else {
- h.Mode |= c_ISBLK
h.Typeflag = TypeBlock
}
case fm&os.ModeNamedPipe != 0:
h.Typeflag = TypeFifo
- h.Mode |= c_ISFIFO
case fm&os.ModeSocket != 0:
- h.Mode |= c_ISSOCK
+ return nil, fmt.Errorf("archive/tar: sockets not supported")
default:
return nil, fmt.Errorf("archive/tar: unknown file mode %v", fm)
}
@@ -272,6 +691,12 @@ func FileInfoHeader(fi os.FileInfo, link string) (*Header, error) {
h.Size = 0
h.Linkname = sys.Linkname
}
+ if sys.PAXRecords != nil {
+ h.PAXRecords = make(map[string]string)
+ for k, v := range sys.PAXRecords {
+ h.PAXRecords[k] = v
+ }
+ }
}
if sysStat != nil {
return h, sysStat(fi, h)
@@ -279,55 +704,6 @@ func FileInfoHeader(fi os.FileInfo, link string) (*Header, error) {
return h, nil
}
-var zeroBlock = make([]byte, blockSize)
-
-// POSIX specifies a sum of the unsigned byte values, but the Sun tar uses signed byte values.
-// We compute and return both.
-func checksum(header []byte) (unsigned int64, signed int64) {
- for i := 0; i < len(header); i++ {
- if i == 148 {
- // The chksum field (header[148:156]) is special: it should be treated as space bytes.
- unsigned += ' ' * 8
- signed += ' ' * 8
- i += 7
- continue
- }
- unsigned += int64(header[i])
- signed += int64(int8(header[i]))
- }
- return
-}
-
-type slicer []byte
-
-func (sp *slicer) next(n int) (b []byte) {
- s := *sp
- b, *sp = s[0:n], s[n:]
- return
-}
-
-func isASCII(s string) bool {
- for _, c := range s {
- if c >= 0x80 {
- return false
- }
- }
- return true
-}
-
-func toASCII(s string) string {
- if isASCII(s) {
- return s
- }
- var buf bytes.Buffer
- for _, c := range s {
- if c < 0x80 {
- buf.WriteByte(byte(c))
- }
- }
- return buf.String()
-}
-
// isHeaderOnlyType checks if the given type flag is of the type that has no
// data section even if a size is specified.
func isHeaderOnlyType(flag byte) bool {
@@ -338,3 +714,10 @@ func isHeaderOnlyType(flag byte) bool {
return false
}
}
+
+func min(a, b int64) int64 {
+ if a < b {
+ return a
+ }
+ return b
+}
diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/format.go b/vendor/github.com/vbatts/tar-split/archive/tar/format.go
new file mode 100644
index 000000000..1f89d0c59
--- /dev/null
+++ b/vendor/github.com/vbatts/tar-split/archive/tar/format.go
@@ -0,0 +1,303 @@
+// 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 tar
+
+import "strings"
+
+// Format represents the tar archive format.
+//
+// The original tar format was introduced in Unix V7.
+// Since then, there have been multiple competing formats attempting to
+// standardize or extend the V7 format to overcome its limitations.
+// The most common formats are the USTAR, PAX, and GNU formats,
+// each with their own advantages and limitations.
+//
+// The following table captures the capabilities of each format:
+//
+// | USTAR | PAX | GNU
+// ------------------+--------+-----------+----------
+// Name | 256B | unlimited | unlimited
+// Linkname | 100B | unlimited | unlimited
+// Size | uint33 | unlimited | uint89
+// Mode | uint21 | uint21 | uint57
+// Uid/Gid | uint21 | unlimited | uint57
+// Uname/Gname | 32B | unlimited | 32B
+// ModTime | uint33 | unlimited | int89
+// AccessTime | n/a | unlimited | int89
+// ChangeTime | n/a | unlimited | int89
+// Devmajor/Devminor | uint21 | uint21 | uint57
+// ------------------+--------+-----------+----------
+// string encoding | ASCII | UTF-8 | binary
+// sub-second times | no | yes | no
+// sparse files | no | yes | yes
+//
+// The table's upper portion shows the Header fields, where each format reports
+// the maximum number of bytes allowed for each string field and
+// the integer type used to store each numeric field
+// (where timestamps are stored as the number of seconds since the Unix epoch).
+//
+// The table's lower portion shows specialized features of each format,
+// such as supported string encodings, support for sub-second timestamps,
+// or support for sparse files.
+//
+// The Writer currently provides no support for sparse files.
+type Format int
+
+// Constants to identify various tar formats.
+const (
+ // Deliberately hide the meaning of constants from public API.
+ _ Format = (1 << iota) / 4 // Sequence of 0, 0, 1, 2, 4, 8, etc...
+
+ // FormatUnknown indicates that the format is unknown.
+ FormatUnknown
+
+ // The format of the original Unix V7 tar tool prior to standardization.
+ formatV7
+
+ // FormatUSTAR represents the USTAR header format defined in POSIX.1-1988.
+ //
+ // While this format is compatible with most tar readers,
+ // the format has several limitations making it unsuitable for some usages.
+ // Most notably, it cannot support sparse files, files larger than 8GiB,
+ // filenames larger than 256 characters, and non-ASCII filenames.
+ //
+ // Reference:
+ // http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_06
+ FormatUSTAR
+
+ // FormatPAX represents the PAX header format defined in POSIX.1-2001.
+ //
+ // PAX extends USTAR by writing a special file with Typeflag TypeXHeader
+ // preceding the original header. This file contains a set of key-value
+ // records, which are used to overcome USTAR's shortcomings, in addition to
+ // providing the ability to have sub-second resolution for timestamps.
+ //
+ // Some newer formats add their own extensions to PAX by defining their
+ // own keys and assigning certain semantic meaning to the associated values.
+ // For example, sparse file support in PAX is implemented using keys
+ // defined by the GNU manual (e.g., "GNU.sparse.map").
+ //
+ // Reference:
+ // http://pubs.opengroup.org/onlinepubs/009695399/utilities/pax.html
+ FormatPAX
+
+ // FormatGNU represents the GNU header format.
+ //
+ // The GNU header format is older than the USTAR and PAX standards and
+ // is not compatible with them. The GNU format supports
+ // arbitrary file sizes, filenames of arbitrary encoding and length,
+ // sparse files, and other features.
+ //
+ // It is recommended that PAX be chosen over GNU unless the target
+ // application can only parse GNU formatted archives.
+ //
+ // Reference:
+ // https://www.gnu.org/software/tar/manual/html_node/Standard.html
+ FormatGNU
+
+ // Schily's tar format, which is incompatible with USTAR.
+ // This does not cover STAR extensions to the PAX format; these fall under
+ // the PAX format.
+ formatSTAR
+
+ formatMax
+)
+
+func (f Format) has(f2 Format) bool { return f&f2 != 0 }
+func (f *Format) mayBe(f2 Format) { *f |= f2 }
+func (f *Format) mayOnlyBe(f2 Format) { *f &= f2 }
+func (f *Format) mustNotBe(f2 Format) { *f &^= f2 }
+
+var formatNames = map[Format]string{
+ formatV7: "V7", FormatUSTAR: "USTAR", FormatPAX: "PAX", FormatGNU: "GNU", formatSTAR: "STAR",
+}
+
+func (f Format) String() string {
+ var ss []string
+ for f2 := Format(1); f2 < formatMax; f2 <<= 1 {
+ if f.has(f2) {
+ ss = append(ss, formatNames[f2])
+ }
+ }
+ switch len(ss) {
+ case 0:
+ return "<unknown>"
+ case 1:
+ return ss[0]
+ default:
+ return "(" + strings.Join(ss, " | ") + ")"
+ }
+}
+
+// Magics used to identify various formats.
+const (
+ magicGNU, versionGNU = "ustar ", " \x00"
+ magicUSTAR, versionUSTAR = "ustar\x00", "00"
+ trailerSTAR = "tar\x00"
+)
+
+// Size constants from various tar specifications.
+const (
+ blockSize = 512 // Size of each block in a tar stream
+ nameSize = 100 // Max length of the name field in USTAR format
+ prefixSize = 155 // Max length of the prefix field in USTAR format
+)
+
+// blockPadding computes the number of bytes needed to pad offset up to the
+// nearest block edge where 0 <= n < blockSize.
+func blockPadding(offset int64) (n int64) {
+ return -offset & (blockSize - 1)
+}
+
+var zeroBlock block
+
+type block [blockSize]byte
+
+// Convert block to any number of formats.
+func (b *block) V7() *headerV7 { return (*headerV7)(b) }
+func (b *block) GNU() *headerGNU { return (*headerGNU)(b) }
+func (b *block) STAR() *headerSTAR { return (*headerSTAR)(b) }
+func (b *block) USTAR() *headerUSTAR { return (*headerUSTAR)(b) }
+func (b *block) Sparse() sparseArray { return (sparseArray)(b[:]) }
+
+// GetFormat checks that the block is a valid tar header based on the checksum.
+// It then attempts to guess the specific format based on magic values.
+// If the checksum fails, then FormatUnknown is returned.
+func (b *block) GetFormat() Format {
+ // Verify checksum.
+ var p parser
+ value := p.parseOctal(b.V7().Chksum())
+ chksum1, chksum2 := b.ComputeChecksum()
+ if p.err != nil || (value != chksum1 && value != chksum2) {
+ return FormatUnknown
+ }
+
+ // Guess the magic values.
+ magic := string(b.USTAR().Magic())
+ version := string(b.USTAR().Version())
+ trailer := string(b.STAR().Trailer())
+ switch {
+ case magic == magicUSTAR && trailer == trailerSTAR:
+ return formatSTAR
+ case magic == magicUSTAR:
+ return FormatUSTAR | FormatPAX
+ case magic == magicGNU && version == versionGNU:
+ return FormatGNU
+ default:
+ return formatV7
+ }
+}
+
+// SetFormat writes the magic values necessary for specified format
+// and then updates the checksum accordingly.
+func (b *block) SetFormat(format Format) {
+ // Set the magic values.
+ switch {
+ case format.has(formatV7):
+ // Do nothing.
+ case format.has(FormatGNU):
+ copy(b.GNU().Magic(), magicGNU)
+ copy(b.GNU().Version(), versionGNU)
+ case format.has(formatSTAR):
+ copy(b.STAR().Magic(), magicUSTAR)
+ copy(b.STAR().Version(), versionUSTAR)
+ copy(b.STAR().Trailer(), trailerSTAR)
+ case format.has(FormatUSTAR | FormatPAX):
+ copy(b.USTAR().Magic(), magicUSTAR)
+ copy(b.USTAR().Version(), versionUSTAR)
+ default:
+ panic("invalid format")
+ }
+
+ // Update checksum.
+ // This field is special in that it is terminated by a NULL then space.
+ var f formatter
+ field := b.V7().Chksum()
+ chksum, _ := b.ComputeChecksum() // Possible values are 256..128776
+ f.formatOctal(field[:7], chksum) // Never fails since 128776 < 262143
+ field[7] = ' '
+}
+
+// ComputeChecksum computes the checksum for the header block.
+// POSIX specifies a sum of the unsigned byte values, but the Sun tar used
+// signed byte values.
+// We compute and return both.
+func (b *block) ComputeChecksum() (unsigned, signed int64) {
+ for i, c := range b {
+ if 148 <= i && i < 156 {
+ c = ' ' // Treat the checksum field itself as all spaces.
+ }
+ unsigned += int64(c)
+ signed += int64(int8(c))
+ }
+ return unsigned, signed
+}
+
+// Reset clears the block with all zeros.
+func (b *block) Reset() {
+ *b = block{}
+}
+
+type headerV7 [blockSize]byte
+
+func (h *headerV7) Name() []byte { return h[000:][:100] }
+func (h *headerV7) Mode() []byte { return h[100:][:8] }
+func (h *headerV7) UID() []byte { return h[108:][:8] }
+func (h *headerV7) GID() []byte { return h[116:][:8] }
+func (h *headerV7) Size() []byte { return h[124:][:12] }
+func (h *headerV7) ModTime() []byte { return h[136:][:12] }
+func (h *headerV7) Chksum() []byte { return h[148:][:8] }
+func (h *headerV7) TypeFlag() []byte { return h[156:][:1] }
+func (h *headerV7) LinkName() []byte { return h[157:][:100] }
+
+type headerGNU [blockSize]byte
+
+func (h *headerGNU) V7() *headerV7 { return (*headerV7)(h) }
+func (h *headerGNU) Magic() []byte { return h[257:][:6] }
+func (h *headerGNU) Version() []byte { return h[263:][:2] }
+func (h *headerGNU) UserName() []byte { return h[265:][:32] }
+func (h *headerGNU) GroupName() []byte { return h[297:][:32] }
+func (h *headerGNU) DevMajor() []byte { return h[329:][:8] }
+func (h *headerGNU) DevMinor() []byte { return h[337:][:8] }
+func (h *headerGNU) AccessTime() []byte { return h[345:][:12] }
+func (h *headerGNU) ChangeTime() []byte { return h[357:][:12] }
+func (h *headerGNU) Sparse() sparseArray { return (sparseArray)(h[386:][:24*4+1]) }
+func (h *headerGNU) RealSize() []byte { return h[483:][:12] }
+
+type headerSTAR [blockSize]byte
+
+func (h *headerSTAR) V7() *headerV7 { return (*headerV7)(h) }
+func (h *headerSTAR) Magic() []byte { return h[257:][:6] }
+func (h *headerSTAR) Version() []byte { return h[263:][:2] }
+func (h *headerSTAR) UserName() []byte { return h[265:][:32] }
+func (h *headerSTAR) GroupName() []byte { return h[297:][:32] }
+func (h *headerSTAR) DevMajor() []byte { return h[329:][:8] }
+func (h *headerSTAR) DevMinor() []byte { return h[337:][:8] }
+func (h *headerSTAR) Prefix() []byte { return h[345:][:131] }
+func (h *headerSTAR) AccessTime() []byte { return h[476:][:12] }
+func (h *headerSTAR) ChangeTime() []byte { return h[488:][:12] }
+func (h *headerSTAR) Trailer() []byte { return h[508:][:4] }
+
+type headerUSTAR [blockSize]byte
+
+func (h *headerUSTAR) V7() *headerV7 { return (*headerV7)(h) }
+func (h *headerUSTAR) Magic() []byte { return h[257:][:6] }
+func (h *headerUSTAR) Version() []byte { return h[263:][:2] }
+func (h *headerUSTAR) UserName() []byte { return h[265:][:32] }
+func (h *headerUSTAR) GroupName() []byte { return h[297:][:32] }
+func (h *headerUSTAR) DevMajor() []byte { return h[329:][:8] }
+func (h *headerUSTAR) DevMinor() []byte { return h[337:][:8] }
+func (h *headerUSTAR) Prefix() []byte { return h[345:][:155] }
+
+type sparseArray []byte
+
+func (s sparseArray) Entry(i int) sparseElem { return (sparseElem)(s[i*24:]) }
+func (s sparseArray) IsExtended() []byte { return s[24*s.MaxEntries():][:1] }
+func (s sparseArray) MaxEntries() int { return len(s) / 24 }
+
+type sparseElem []byte
+
+func (s sparseElem) Offset() []byte { return s[00:][:12] }
+func (s sparseElem) Length() []byte { return s[12:][:12] }
diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/reader.go b/vendor/github.com/vbatts/tar-split/archive/tar/reader.go
index adf32122e..ea64a3820 100644
--- a/vendor/github.com/vbatts/tar-split/archive/tar/reader.go
+++ b/vendor/github.com/vbatts/tar-split/archive/tar/reader.go
@@ -4,44 +4,38 @@
package tar
-// TODO(dsymonds):
-// - pax extensions
-
import (
"bytes"
- "errors"
"io"
"io/ioutil"
- "math"
- "os"
"strconv"
"strings"
"time"
)
-var (
- ErrHeader = errors.New("archive/tar: invalid tar header")
-)
-
-const maxNanoSecondIntSize = 9
-
-// A Reader provides sequential access to the contents of a tar archive.
-// A tar archive consists of a sequence of files.
-// The Next method advances to the next file in the archive (including the first),
-// and then it can be treated as an io.Reader to access the file's data.
+// Reader provides sequential access to the contents of a tar archive.
+// Reader.Next advances to the next file in the archive (including the first),
+// and then Reader can be treated as an io.Reader to access the file's data.
type Reader struct {
- r io.Reader
- err error
- pad int64 // amount of padding (ignored) after current file entry
- curr numBytesReader // reader for current file entry
- hdrBuff [blockSize]byte // buffer to use in readHeader
+ r io.Reader
+ pad int64 // Amount of padding (ignored) after current file entry
+ curr fileReader // Reader for current file entry
+ blk block // Buffer to use as temporary local storage
+
+ // err is a persistent error.
+ // It is only the responsibility of every exported method of Reader to
+ // ensure that this error is sticky.
+ err error
RawAccounting bool // Whether to enable the access needed to reassemble the tar from raw bytes. Some performance/memory hit for this.
rawBytes *bytes.Buffer // last raw bits
}
-type parser struct {
- err error // Last error seen
+type fileReader interface {
+ io.Reader
+ fileState
+
+ WriteTo(io.Writer) (int64, error)
}
// RawBytes accesses the raw bytes of the archive, apart from the file payload itself.
@@ -57,87 +51,35 @@ func (tr *Reader) RawBytes() []byte {
if tr.rawBytes == nil {
tr.rawBytes = bytes.NewBuffer(nil)
}
- // if we've read them, then flush them.
- defer tr.rawBytes.Reset()
- return tr.rawBytes.Bytes()
-}
+ defer tr.rawBytes.Reset() // if we've read them, then flush them.
-// A numBytesReader is an io.Reader with a numBytes method, returning the number
-// of bytes remaining in the underlying encoded data.
-type numBytesReader interface {
- io.Reader
- numBytes() int64
-}
-
-// A regFileReader is a numBytesReader for reading file data from a tar archive.
-type regFileReader struct {
- r io.Reader // underlying reader
- nb int64 // number of unread bytes for current file entry
-}
-
-// A sparseFileReader is a numBytesReader for reading sparse file data from a
-// tar archive.
-type sparseFileReader struct {
- rfr numBytesReader // Reads the sparse-encoded file data
- sp []sparseEntry // The sparse map for the file
- pos int64 // Keeps track of file position
- total int64 // Total size of the file
-}
+ return tr.rawBytes.Bytes()
-// A sparseEntry holds a single entry in a sparse file's sparse map.
-//
-// Sparse files are represented using a series of sparseEntrys.
-// Despite the name, a sparseEntry represents an actual data fragment that
-// references data found in the underlying archive stream. All regions not
-// covered by a sparseEntry are logically filled with zeros.
-//
-// For example, if the underlying raw file contains the 10-byte data:
-// var compactData = "abcdefgh"
-//
-// And the sparse map has the following entries:
-// var sp = []sparseEntry{
-// {offset: 2, numBytes: 5} // Data fragment for [2..7]
-// {offset: 18, numBytes: 3} // Data fragment for [18..21]
-// }
-//
-// Then the content of the resulting sparse file with a "real" size of 25 is:
-// var sparseData = "\x00"*2 + "abcde" + "\x00"*11 + "fgh" + "\x00"*4
-type sparseEntry struct {
- offset int64 // Starting position of the fragment
- numBytes int64 // Length of the fragment
}
-// Keywords for GNU sparse files in a PAX extended header
-const (
- paxGNUSparseNumBlocks = "GNU.sparse.numblocks"
- paxGNUSparseOffset = "GNU.sparse.offset"
- paxGNUSparseNumBytes = "GNU.sparse.numbytes"
- paxGNUSparseMap = "GNU.sparse.map"
- paxGNUSparseName = "GNU.sparse.name"
- paxGNUSparseMajor = "GNU.sparse.major"
- paxGNUSparseMinor = "GNU.sparse.minor"
- paxGNUSparseSize = "GNU.sparse.size"
- paxGNUSparseRealSize = "GNU.sparse.realsize"
-)
-
-// Keywords for old GNU sparse headers
-const (
- oldGNUSparseMainHeaderOffset = 386
- oldGNUSparseMainHeaderIsExtendedOffset = 482
- oldGNUSparseMainHeaderNumEntries = 4
- oldGNUSparseExtendedHeaderIsExtendedOffset = 504
- oldGNUSparseExtendedHeaderNumEntries = 21
- oldGNUSparseOffsetSize = 12
- oldGNUSparseNumBytesSize = 12
-)
-
// NewReader creates a new Reader reading from r.
-func NewReader(r io.Reader) *Reader { return &Reader{r: r} }
+func NewReader(r io.Reader) *Reader {
+ return &Reader{r: r, curr: &regFileReader{r, 0}}
+}
// Next advances to the next entry in the tar archive.
+// The Header.Size determines how many bytes can be read for the next file.
+// Any remaining data in the current file is automatically discarded.
//
// io.EOF is returned at the end of the input.
func (tr *Reader) Next() (*Header, error) {
+ if tr.err != nil {
+ return nil, tr.err
+ }
+ hdr, err := tr.next()
+ tr.err = err
+ return hdr, err
+}
+
+func (tr *Reader) next() (*Header, error) {
+ var paxHdrs map[string]string
+ var gnuLongName, gnuLongLink string
+
if tr.RawAccounting {
if tr.rawBytes == nil {
tr.rawBytes = bytes.NewBuffer(nil)
@@ -146,248 +88,245 @@ func (tr *Reader) Next() (*Header, error) {
}
}
- if tr.err != nil {
- return nil, tr.err
- }
-
- var hdr *Header
- var extHdrs map[string]string
-
// Externally, Next iterates through the tar archive as if it is a series of
// files. Internally, the tar format often uses fake "files" to add meta
// data that describes the next file. These meta data "files" should not
// normally be visible to the outside. As such, this loop iterates through
// one or more "header files" until it finds a "normal file".
-loop:
+ format := FormatUSTAR | FormatPAX | FormatGNU
for {
- tr.err = tr.skipUnread()
- if tr.err != nil {
- return nil, tr.err
+ // Discard the remainder of the file and any padding.
+ if err := discard(tr, tr.curr.PhysicalRemaining()); err != nil {
+ return nil, err
+ }
+ n, err := tryReadFull(tr.r, tr.blk[:tr.pad])
+ if err != nil {
+ return nil, err
}
+ if tr.RawAccounting {
+ tr.rawBytes.Write(tr.blk[:n])
+ }
+ tr.pad = 0
- hdr = tr.readHeader()
- if tr.err != nil {
- return nil, tr.err
+ hdr, rawHdr, err := tr.readHeader()
+ if err != nil {
+ return nil, err
+ }
+ if err := tr.handleRegularFile(hdr); err != nil {
+ return nil, err
}
+ format.mayOnlyBe(hdr.Format)
+
// Check for PAX/GNU special headers and files.
switch hdr.Typeflag {
- case TypeXHeader:
- extHdrs, tr.err = parsePAX(tr)
- if tr.err != nil {
- return nil, tr.err
+ case TypeXHeader, TypeXGlobalHeader:
+ format.mayOnlyBe(FormatPAX)
+ paxHdrs, err = parsePAX(tr)
+ if err != nil {
+ return nil, err
}
- continue loop // This is a meta header affecting the next header
+ if hdr.Typeflag == TypeXGlobalHeader {
+ mergePAX(hdr, paxHdrs)
+ return &Header{
+ Name: hdr.Name,
+ Typeflag: hdr.Typeflag,
+ Xattrs: hdr.Xattrs,
+ PAXRecords: hdr.PAXRecords,
+ Format: format,
+ }, nil
+ }
+ continue // This is a meta header affecting the next header
case TypeGNULongName, TypeGNULongLink:
- var realname []byte
- realname, tr.err = ioutil.ReadAll(tr)
- if tr.err != nil {
- return nil, tr.err
+ format.mayOnlyBe(FormatGNU)
+ realname, err := ioutil.ReadAll(tr)
+ if err != nil {
+ return nil, err
}
if tr.RawAccounting {
- if _, tr.err = tr.rawBytes.Write(realname); tr.err != nil {
- return nil, tr.err
- }
+ tr.rawBytes.Write(realname)
}
- // Convert GNU extensions to use PAX headers.
- if extHdrs == nil {
- extHdrs = make(map[string]string)
- }
var p parser
switch hdr.Typeflag {
case TypeGNULongName:
- extHdrs[paxPath] = p.parseString(realname)
+ gnuLongName = p.parseString(realname)
case TypeGNULongLink:
- extHdrs[paxLinkpath] = p.parseString(realname)
- }
- if p.err != nil {
- tr.err = p.err
- return nil, tr.err
+ gnuLongLink = p.parseString(realname)
}
- continue loop // This is a meta header affecting the next header
+ continue // This is a meta header affecting the next header
default:
- mergePAX(hdr, extHdrs)
+ // The old GNU sparse format is handled here since it is technically
+ // just a regular file with additional attributes.
- // Check for a PAX format sparse file
- sp, err := tr.checkForGNUSparsePAXHeaders(hdr, extHdrs)
- if err != nil {
- tr.err = err
+ if err := mergePAX(hdr, paxHdrs); err != nil {
return nil, err
}
- if sp != nil {
- // Current file is a PAX format GNU sparse file.
- // Set the current file reader to a sparse file reader.
- tr.curr, tr.err = newSparseFileReader(tr.curr, sp, hdr.Size)
- if tr.err != nil {
- return nil, tr.err
+ if gnuLongName != "" {
+ hdr.Name = gnuLongName
+ }
+ if gnuLongLink != "" {
+ hdr.Linkname = gnuLongLink
+ }
+ if hdr.Typeflag == TypeRegA {
+ if strings.HasSuffix(hdr.Name, "/") {
+ hdr.Typeflag = TypeDir // Legacy archives use trailing slash for directories
+ } else {
+ hdr.Typeflag = TypeReg
}
}
- break loop // This is a file, so stop
+
+ // The extended headers may have updated the size.
+ // Thus, setup the regFileReader again after merging PAX headers.
+ if err := tr.handleRegularFile(hdr); err != nil {
+ return nil, err
+ }
+
+ // Sparse formats rely on being able to read from the logical data
+ // section; there must be a preceding call to handleRegularFile.
+ if err := tr.handleSparseFile(hdr, rawHdr); err != nil {
+ return nil, err
+ }
+
+ // Set the final guess at the format.
+ if format.has(FormatUSTAR) && format.has(FormatPAX) {
+ format.mayOnlyBe(FormatUSTAR)
+ }
+ hdr.Format = format
+ return hdr, nil // This is a file, so stop
}
}
- return hdr, nil
}
-// checkForGNUSparsePAXHeaders checks the PAX headers for GNU sparse headers. If they are found, then
-// this function reads the sparse map and returns it. Unknown sparse formats are ignored, causing the file to
-// be treated as a regular file.
-func (tr *Reader) checkForGNUSparsePAXHeaders(hdr *Header, headers map[string]string) ([]sparseEntry, error) {
- var sparseFormat string
-
- // Check for sparse format indicators
- major, majorOk := headers[paxGNUSparseMajor]
- minor, minorOk := headers[paxGNUSparseMinor]
- sparseName, sparseNameOk := headers[paxGNUSparseName]
- _, sparseMapOk := headers[paxGNUSparseMap]
- sparseSize, sparseSizeOk := headers[paxGNUSparseSize]
- sparseRealSize, sparseRealSizeOk := headers[paxGNUSparseRealSize]
-
- // Identify which, if any, sparse format applies from which PAX headers are set
- if majorOk && minorOk {
- sparseFormat = major + "." + minor
- } else if sparseNameOk && sparseMapOk {
- sparseFormat = "0.1"
- } else if sparseSizeOk {
- sparseFormat = "0.0"
- } else {
- // Not a PAX format GNU sparse file.
- return nil, nil
+// handleRegularFile sets up the current file reader and padding such that it
+// can only read the following logical data section. It will properly handle
+// special headers that contain no data section.
+func (tr *Reader) handleRegularFile(hdr *Header) error {
+ nb := hdr.Size
+ if isHeaderOnlyType(hdr.Typeflag) {
+ nb = 0
}
-
- // Check for unknown sparse format
- if sparseFormat != "0.0" && sparseFormat != "0.1" && sparseFormat != "1.0" {
- return nil, nil
+ if nb < 0 {
+ return ErrHeader
}
- // Update hdr from GNU sparse PAX headers
- if sparseNameOk {
- hdr.Name = sparseName
+ tr.pad = blockPadding(nb)
+ tr.curr = &regFileReader{r: tr.r, nb: nb}
+ return nil
+}
+
+// handleSparseFile checks if the current file is a sparse format of any type
+// and sets the curr reader appropriately.
+func (tr *Reader) handleSparseFile(hdr *Header, rawHdr *block) error {
+ var spd sparseDatas
+ var err error
+ if hdr.Typeflag == TypeGNUSparse {
+ spd, err = tr.readOldGNUSparseMap(hdr, rawHdr)
+ } else {
+ spd, err = tr.readGNUSparsePAXHeaders(hdr)
}
- if sparseSizeOk {
- realSize, err := strconv.ParseInt(sparseSize, 10, 0)
- if err != nil {
- return nil, ErrHeader
+
+ // If sp is non-nil, then this is a sparse file.
+ // Note that it is possible for len(sp) == 0.
+ if err == nil && spd != nil {
+ if isHeaderOnlyType(hdr.Typeflag) || !validateSparseEntries(spd, hdr.Size) {
+ return ErrHeader
}
- hdr.Size = realSize
- } else if sparseRealSizeOk {
- realSize, err := strconv.ParseInt(sparseRealSize, 10, 0)
+ sph := invertSparseEntries(spd, hdr.Size)
+ tr.curr = &sparseFileReader{tr.curr, sph, 0}
+ }
+ return err
+}
+
+// readGNUSparsePAXHeaders checks the PAX headers for GNU sparse headers.
+// If they are found, then this function reads the sparse map and returns it.
+// This assumes that 0.0 headers have already been converted to 0.1 headers
+// by the PAX header parsing logic.
+func (tr *Reader) readGNUSparsePAXHeaders(hdr *Header) (sparseDatas, error) {
+ // Identify the version of GNU headers.
+ var is1x0 bool
+ major, minor := hdr.PAXRecords[paxGNUSparseMajor], hdr.PAXRecords[paxGNUSparseMinor]
+ switch {
+ case major == "0" && (minor == "0" || minor == "1"):
+ is1x0 = false
+ case major == "1" && minor == "0":
+ is1x0 = true
+ case major != "" || minor != "":
+ return nil, nil // Unknown GNU sparse PAX version
+ case hdr.PAXRecords[paxGNUSparseMap] != "":
+ is1x0 = false // 0.0 and 0.1 did not have explicit version records, so guess
+ default:
+ return nil, nil // Not a PAX format GNU sparse file.
+ }
+ hdr.Format.mayOnlyBe(FormatPAX)
+
+ // Update hdr from GNU sparse PAX headers.
+ if name := hdr.PAXRecords[paxGNUSparseName]; name != "" {
+ hdr.Name = name
+ }
+ size := hdr.PAXRecords[paxGNUSparseSize]
+ if size == "" {
+ size = hdr.PAXRecords[paxGNUSparseRealSize]
+ }
+ if size != "" {
+ n, err := strconv.ParseInt(size, 10, 64)
if err != nil {
return nil, ErrHeader
}
- hdr.Size = realSize
+ hdr.Size = n
}
- // Set up the sparse map, according to the particular sparse format in use
- var sp []sparseEntry
- var err error
- switch sparseFormat {
- case "0.0", "0.1":
- sp, err = readGNUSparseMap0x1(headers)
- case "1.0":
- sp, err = readGNUSparseMap1x0(tr.curr)
+ // Read the sparse map according to the appropriate format.
+ if is1x0 {
+ return readGNUSparseMap1x0(tr.curr)
}
- return sp, err
+ return readGNUSparseMap0x1(hdr.PAXRecords)
}
-// mergePAX merges well known headers according to PAX standard.
-// In general headers with the same name as those found
-// in the header struct overwrite those found in the header
-// struct with higher precision or longer values. Esp. useful
-// for name and linkname fields.
-func mergePAX(hdr *Header, headers map[string]string) error {
- for k, v := range headers {
+// mergePAX merges paxHdrs into hdr for all relevant fields of Header.
+func mergePAX(hdr *Header, paxHdrs map[string]string) (err error) {
+ for k, v := range paxHdrs {
+ if v == "" {
+ continue // Keep the original USTAR value
+ }
+ var id64 int64
switch k {
case paxPath:
hdr.Name = v
case paxLinkpath:
hdr.Linkname = v
- case paxGname:
- hdr.Gname = v
case paxUname:
hdr.Uname = v
+ case paxGname:
+ hdr.Gname = v
case paxUid:
- uid, err := strconv.ParseInt(v, 10, 0)
- if err != nil {
- return err
- }
- hdr.Uid = int(uid)
+ id64, err = strconv.ParseInt(v, 10, 64)
+ hdr.Uid = int(id64) // Integer overflow possible
case paxGid:
- gid, err := strconv.ParseInt(v, 10, 0)
- if err != nil {
- return err
- }
- hdr.Gid = int(gid)
+ id64, err = strconv.ParseInt(v, 10, 64)
+ hdr.Gid = int(id64) // Integer overflow possible
case paxAtime:
- t, err := parsePAXTime(v)
- if err != nil {
- return err
- }
- hdr.AccessTime = t
+ hdr.AccessTime, err = parsePAXTime(v)
case paxMtime:
- t, err := parsePAXTime(v)
- if err != nil {
- return err
- }
- hdr.ModTime = t
+ hdr.ModTime, err = parsePAXTime(v)
case paxCtime:
- t, err := parsePAXTime(v)
- if err != nil {
- return err
- }
- hdr.ChangeTime = t
+ hdr.ChangeTime, err = parsePAXTime(v)
case paxSize:
- size, err := strconv.ParseInt(v, 10, 0)
- if err != nil {
- return err
- }
- hdr.Size = int64(size)
+ hdr.Size, err = strconv.ParseInt(v, 10, 64)
default:
- if strings.HasPrefix(k, paxXattr) {
+ if strings.HasPrefix(k, paxSchilyXattr) {
if hdr.Xattrs == nil {
hdr.Xattrs = make(map[string]string)
}
- hdr.Xattrs[k[len(paxXattr):]] = v
+ hdr.Xattrs[k[len(paxSchilyXattr):]] = v
}
}
- }
- return nil
-}
-
-// parsePAXTime takes a string of the form %d.%d as described in
-// the PAX specification.
-func parsePAXTime(t string) (time.Time, error) {
- buf := []byte(t)
- pos := bytes.IndexByte(buf, '.')
- var seconds, nanoseconds int64
- var err error
- if pos == -1 {
- seconds, err = strconv.ParseInt(t, 10, 0)
- if err != nil {
- return time.Time{}, err
- }
- } else {
- seconds, err = strconv.ParseInt(string(buf[:pos]), 10, 0)
if err != nil {
- return time.Time{}, err
- }
- nano_buf := string(buf[pos+1:])
- // Pad as needed before converting to a decimal.
- // For example .030 -> .030000000 -> 30000000 nanoseconds
- if len(nano_buf) < maxNanoSecondIntSize {
- // Right pad
- nano_buf += strings.Repeat("0", maxNanoSecondIntSize-len(nano_buf))
- } else if len(nano_buf) > maxNanoSecondIntSize {
- // Right truncate
- nano_buf = nano_buf[:maxNanoSecondIntSize]
- }
- nanoseconds, err = strconv.ParseInt(string(nano_buf), 10, 0)
- if err != nil {
- return time.Time{}, err
+ return ErrHeader
}
}
- ts := time.Unix(seconds, nanoseconds)
- return ts, nil
+ hdr.PAXRecords = paxHdrs
+ return nil
}
// parsePAX parses PAX headers.
@@ -406,12 +345,11 @@ func parsePAX(r io.Reader) (map[string]string, error) {
sbuf := string(buf)
// For GNU PAX sparse format 0.0 support.
- // This function transforms the sparse format 0.0 headers into sparse format 0.1 headers.
- var sparseMap bytes.Buffer
+ // This function transforms the sparse format 0.0 headers into format 0.1
+ // headers since 0.0 headers were not PAX compliant.
+ var sparseMap []string
- headers := make(map[string]string)
- // Each record is constructed as
- // "%d %s=%s\n", length, keyword, value
+ paxHdrs := make(map[string]string)
for len(sbuf) > 0 {
key, value, residual, err := parsePAXRecord(sbuf)
if err != nil {
@@ -419,422 +357,234 @@ func parsePAX(r io.Reader) (map[string]string, error) {
}
sbuf = residual
- keyStr := string(key)
- if keyStr == paxGNUSparseOffset || keyStr == paxGNUSparseNumBytes {
- // GNU sparse format 0.0 special key. Write to sparseMap instead of using the headers map.
- sparseMap.WriteString(value)
- sparseMap.Write([]byte{','})
- } else {
- // Normal key. Set the value in the headers map.
- headers[keyStr] = string(value)
- }
- }
- if sparseMap.Len() != 0 {
- // Add sparse info to headers, chopping off the extra comma
- sparseMap.Truncate(sparseMap.Len() - 1)
- headers[paxGNUSparseMap] = sparseMap.String()
- }
- return headers, nil
-}
-
-// parsePAXRecord parses the input PAX record string into a key-value pair.
-// If parsing is successful, it will slice off the currently read record and
-// return the remainder as r.
-//
-// A PAX record is of the following form:
-// "%d %s=%s\n" % (size, key, value)
-func parsePAXRecord(s string) (k, v, r string, err error) {
- // The size field ends at the first space.
- sp := strings.IndexByte(s, ' ')
- if sp == -1 {
- return "", "", s, ErrHeader
- }
-
- // Parse the first token as a decimal integer.
- n, perr := strconv.ParseInt(s[:sp], 10, 0) // Intentionally parse as native int
- if perr != nil || n < 5 || int64(len(s)) < n {
- return "", "", s, ErrHeader
- }
-
- // Extract everything between the space and the final newline.
- rec, nl, rem := s[sp+1:n-1], s[n-1:n], s[n:]
- if nl != "\n" {
- return "", "", s, ErrHeader
- }
-
- // The first equals separates the key from the value.
- eq := strings.IndexByte(rec, '=')
- if eq == -1 {
- return "", "", s, ErrHeader
- }
- return rec[:eq], rec[eq+1:], rem, nil
-}
-
-// parseString parses bytes as a NUL-terminated C-style string.
-// If a NUL byte is not found then the whole slice is returned as a string.
-func (*parser) parseString(b []byte) string {
- n := 0
- for n < len(b) && b[n] != 0 {
- n++
- }
- return string(b[0:n])
-}
-
-// parseNumeric parses the input as being encoded in either base-256 or octal.
-// This function may return negative numbers.
-// If parsing fails or an integer overflow occurs, err will be set.
-func (p *parser) parseNumeric(b []byte) int64 {
- // Check for base-256 (binary) format first.
- // If the first bit is set, then all following bits constitute a two's
- // complement encoded number in big-endian byte order.
- if len(b) > 0 && b[0]&0x80 != 0 {
- // Handling negative numbers relies on the following identity:
- // -a-1 == ^a
- //
- // If the number is negative, we use an inversion mask to invert the
- // data bytes and treat the value as an unsigned number.
- var inv byte // 0x00 if positive or zero, 0xff if negative
- if b[0]&0x40 != 0 {
- inv = 0xff
- }
-
- var x uint64
- for i, c := range b {
- c ^= inv // Inverts c only if inv is 0xff, otherwise does nothing
- if i == 0 {
- c &= 0x7f // Ignore signal bit in first byte
- }
- if (x >> 56) > 0 {
- p.err = ErrHeader // Integer overflow
- return 0
+ switch key {
+ case paxGNUSparseOffset, paxGNUSparseNumBytes:
+ // Validate sparse header order and value.
+ if (len(sparseMap)%2 == 0 && key != paxGNUSparseOffset) ||
+ (len(sparseMap)%2 == 1 && key != paxGNUSparseNumBytes) ||
+ strings.Contains(value, ",") {
+ return nil, ErrHeader
}
- x = x<<8 | uint64(c)
- }
- if (x >> 63) > 0 {
- p.err = ErrHeader // Integer overflow
- return 0
- }
- if inv == 0xff {
- return ^int64(x)
- }
- return int64(x)
- }
-
- // Normal case is base-8 (octal) format.
- return p.parseOctal(b)
-}
-
-func (p *parser) parseOctal(b []byte) int64 {
- // Because unused fields are filled with NULs, we need
- // to skip leading NULs. Fields may also be padded with
- // spaces or NULs.
- // So we remove leading and trailing NULs and spaces to
- // be sure.
- b = bytes.Trim(b, " \x00")
-
- if len(b) == 0 {
- return 0
- }
- x, perr := strconv.ParseUint(p.parseString(b), 8, 64)
- if perr != nil {
- p.err = ErrHeader
- }
- return int64(x)
-}
-
-// skipUnread skips any unread bytes in the existing file entry, as well as any
-// alignment padding. It returns io.ErrUnexpectedEOF if any io.EOF is
-// encountered in the data portion; it is okay to hit io.EOF in the padding.
-//
-// Note that this function still works properly even when sparse files are being
-// used since numBytes returns the bytes remaining in the underlying io.Reader.
-func (tr *Reader) skipUnread() error {
- dataSkip := tr.numBytes() // Number of data bytes to skip
- totalSkip := dataSkip + tr.pad // Total number of bytes to skip
- tr.curr, tr.pad = nil, 0
- if tr.RawAccounting {
- _, tr.err = io.CopyN(tr.rawBytes, tr.r, totalSkip)
- return tr.err
- }
- // If possible, Seek to the last byte before the end of the data section.
- // Do this because Seek is often lazy about reporting errors; this will mask
- // the fact that the tar stream may be truncated. We can rely on the
- // io.CopyN done shortly afterwards to trigger any IO errors.
- var seekSkipped int64 // Number of bytes skipped via Seek
- if sr, ok := tr.r.(io.Seeker); ok && dataSkip > 1 {
- // Not all io.Seeker can actually Seek. For example, os.Stdin implements
- // io.Seeker, but calling Seek always returns an error and performs
- // no action. Thus, we try an innocent seek to the current position
- // to see if Seek is really supported.
- pos1, err := sr.Seek(0, os.SEEK_CUR)
- if err == nil {
- // Seek seems supported, so perform the real Seek.
- pos2, err := sr.Seek(dataSkip-1, os.SEEK_CUR)
- if err != nil {
- tr.err = err
- return tr.err
- }
- seekSkipped = pos2 - pos1
+ sparseMap = append(sparseMap, value)
+ default:
+ paxHdrs[key] = value
}
}
-
- var copySkipped int64 // Number of bytes skipped via CopyN
- copySkipped, tr.err = io.CopyN(ioutil.Discard, tr.r, totalSkip-seekSkipped)
- if tr.err == io.EOF && seekSkipped+copySkipped < dataSkip {
- tr.err = io.ErrUnexpectedEOF
+ if len(sparseMap) > 0 {
+ paxHdrs[paxGNUSparseMap] = strings.Join(sparseMap, ",")
}
- return tr.err
-}
-
-func (tr *Reader) verifyChecksum(header []byte) bool {
- if tr.err != nil {
- return false
- }
-
- var p parser
- given := p.parseOctal(header[148:156])
- unsigned, signed := checksum(header)
- return p.err == nil && (given == unsigned || given == signed)
+ return paxHdrs, nil
}
// readHeader reads the next block header and assumes that the underlying reader
-// is already aligned to a block boundary.
+// is already aligned to a block boundary. It returns the raw block of the
+// header in case further processing is required.
//
// The err will be set to io.EOF only when one of the following occurs:
// * Exactly 0 bytes are read and EOF is hit.
// * Exactly 1 block of zeros is read and EOF is hit.
// * At least 2 blocks of zeros are read.
-func (tr *Reader) readHeader() *Header {
- header := tr.hdrBuff[:]
- copy(header, zeroBlock)
-
- if n, err := io.ReadFull(tr.r, header); err != nil {
- tr.err = err
- // because it could read some of the block, but reach EOF first
- if tr.err == io.EOF && tr.RawAccounting {
- if _, err := tr.rawBytes.Write(header[:n]); err != nil {
- tr.err = err
- }
- }
- return nil // io.EOF is okay here
+func (tr *Reader) readHeader() (*Header, *block, error) {
+ // Two blocks of zero bytes marks the end of the archive.
+ n, err := io.ReadFull(tr.r, tr.blk[:])
+ if tr.RawAccounting && (err == nil || err == io.EOF) {
+ tr.rawBytes.Write(tr.blk[:n])
}
- if tr.RawAccounting {
- if _, tr.err = tr.rawBytes.Write(header); tr.err != nil {
- return nil
- }
+ if err != nil {
+ return nil, nil, err // EOF is okay here; exactly 0 bytes read
}
- // Two blocks of zero bytes marks the end of the archive.
- if bytes.Equal(header, zeroBlock[0:blockSize]) {
- if n, err := io.ReadFull(tr.r, header); err != nil {
- tr.err = err
- // because it could read some of the block, but reach EOF first
- if tr.err == io.EOF && tr.RawAccounting {
- if _, err := tr.rawBytes.Write(header[:n]); err != nil {
- tr.err = err
- }
- }
- return nil // io.EOF is okay here
+ if bytes.Equal(tr.blk[:], zeroBlock[:]) {
+ n, err = io.ReadFull(tr.r, tr.blk[:])
+ if tr.RawAccounting && (err == nil || err == io.EOF) {
+ tr.rawBytes.Write(tr.blk[:n])
}
- if tr.RawAccounting {
- if _, tr.err = tr.rawBytes.Write(header); tr.err != nil {
- return nil
- }
+ if err != nil {
+ return nil, nil, err // EOF is okay here; exactly 1 block of zeros read
}
- if bytes.Equal(header, zeroBlock[0:blockSize]) {
- tr.err = io.EOF
- } else {
- tr.err = ErrHeader // zero block and then non-zero block
+ if bytes.Equal(tr.blk[:], zeroBlock[:]) {
+ return nil, nil, io.EOF // normal EOF; exactly 2 block of zeros read
}
- return nil
+ return nil, nil, ErrHeader // Zero block and then non-zero block
}
- if !tr.verifyChecksum(header) {
- tr.err = ErrHeader
- return nil
+ // Verify the header matches a known format.
+ format := tr.blk.GetFormat()
+ if format == FormatUnknown {
+ return nil, nil, ErrHeader
}
- // Unpack
var p parser
hdr := new(Header)
- s := slicer(header)
-
- hdr.Name = p.parseString(s.next(100))
- hdr.Mode = p.parseNumeric(s.next(8))
- hdr.Uid = int(p.parseNumeric(s.next(8)))
- hdr.Gid = int(p.parseNumeric(s.next(8)))
- hdr.Size = p.parseNumeric(s.next(12))
- hdr.ModTime = time.Unix(p.parseNumeric(s.next(12)), 0)
- s.next(8) // chksum
- hdr.Typeflag = s.next(1)[0]
- hdr.Linkname = p.parseString(s.next(100))
-
- // The remainder of the header depends on the value of magic.
- // The original (v7) version of tar had no explicit magic field,
- // so its magic bytes, like the rest of the block, are NULs.
- magic := string(s.next(8)) // contains version field as well.
- var format string
- switch {
- case magic[:6] == "ustar\x00": // POSIX tar (1003.1-1988)
- if string(header[508:512]) == "tar\x00" {
- format = "star"
- } else {
- format = "posix"
- }
- case magic == "ustar \x00": // old GNU tar
- format = "gnu"
- }
- switch format {
- case "posix", "gnu", "star":
- hdr.Uname = p.parseString(s.next(32))
- hdr.Gname = p.parseString(s.next(32))
- devmajor := s.next(8)
- devminor := s.next(8)
- if hdr.Typeflag == TypeChar || hdr.Typeflag == TypeBlock {
- hdr.Devmajor = p.parseNumeric(devmajor)
- hdr.Devminor = p.parseNumeric(devminor)
- }
+ // Unpack the V7 header.
+ v7 := tr.blk.V7()
+ hdr.Typeflag = v7.TypeFlag()[0]
+ hdr.Name = p.parseString(v7.Name())
+ hdr.Linkname = p.parseString(v7.LinkName())
+ hdr.Size = p.parseNumeric(v7.Size())
+ hdr.Mode = p.parseNumeric(v7.Mode())
+ hdr.Uid = int(p.parseNumeric(v7.UID()))
+ hdr.Gid = int(p.parseNumeric(v7.GID()))
+ hdr.ModTime = time.Unix(p.parseNumeric(v7.ModTime()), 0)
+
+ // Unpack format specific fields.
+ if format > formatV7 {
+ ustar := tr.blk.USTAR()
+ hdr.Uname = p.parseString(ustar.UserName())
+ hdr.Gname = p.parseString(ustar.GroupName())
+ hdr.Devmajor = p.parseNumeric(ustar.DevMajor())
+ hdr.Devminor = p.parseNumeric(ustar.DevMinor())
+
var prefix string
- switch format {
- case "posix", "gnu":
- prefix = p.parseString(s.next(155))
- case "star":
- prefix = p.parseString(s.next(131))
- hdr.AccessTime = time.Unix(p.parseNumeric(s.next(12)), 0)
- hdr.ChangeTime = time.Unix(p.parseNumeric(s.next(12)), 0)
+ switch {
+ case format.has(FormatUSTAR | FormatPAX):
+ hdr.Format = format
+ ustar := tr.blk.USTAR()
+ prefix = p.parseString(ustar.Prefix())
+
+ // For Format detection, check if block is properly formatted since
+ // the parser is more liberal than what USTAR actually permits.
+ notASCII := func(r rune) bool { return r >= 0x80 }
+ if bytes.IndexFunc(tr.blk[:], notASCII) >= 0 {
+ hdr.Format = FormatUnknown // Non-ASCII characters in block.
+ }
+ nul := func(b []byte) bool { return int(b[len(b)-1]) == 0 }
+ if !(nul(v7.Size()) && nul(v7.Mode()) && nul(v7.UID()) && nul(v7.GID()) &&
+ nul(v7.ModTime()) && nul(ustar.DevMajor()) && nul(ustar.DevMinor())) {
+ hdr.Format = FormatUnknown // Numeric fields must end in NUL
+ }
+ case format.has(formatSTAR):
+ star := tr.blk.STAR()
+ prefix = p.parseString(star.Prefix())
+ hdr.AccessTime = time.Unix(p.parseNumeric(star.AccessTime()), 0)
+ hdr.ChangeTime = time.Unix(p.parseNumeric(star.ChangeTime()), 0)
+ case format.has(FormatGNU):
+ hdr.Format = format
+ var p2 parser
+ gnu := tr.blk.GNU()
+ if b := gnu.AccessTime(); b[0] != 0 {
+ hdr.AccessTime = time.Unix(p2.parseNumeric(b), 0)
+ }
+ if b := gnu.ChangeTime(); b[0] != 0 {
+ hdr.ChangeTime = time.Unix(p2.parseNumeric(b), 0)
+ }
+
+ // Prior to Go1.8, the Writer had a bug where it would output
+ // an invalid tar file in certain rare situations because the logic
+ // incorrectly believed that the old GNU format had a prefix field.
+ // This is wrong and leads to an output file that mangles the
+ // atime and ctime fields, which are often left unused.
+ //
+ // In order to continue reading tar files created by former, buggy
+ // versions of Go, we skeptically parse the atime and ctime fields.
+ // If we are unable to parse them and the prefix field looks like
+ // an ASCII string, then we fallback on the pre-Go1.8 behavior
+ // of treating these fields as the USTAR prefix field.
+ //
+ // Note that this will not use the fallback logic for all possible
+ // files generated by a pre-Go1.8 toolchain. If the generated file
+ // happened to have a prefix field that parses as valid
+ // atime and ctime fields (e.g., when they are valid octal strings),
+ // then it is impossible to distinguish between an valid GNU file
+ // and an invalid pre-Go1.8 file.
+ //
+ // See https://golang.org/issues/12594
+ // See https://golang.org/issues/21005
+ if p2.err != nil {
+ hdr.AccessTime, hdr.ChangeTime = time.Time{}, time.Time{}
+ ustar := tr.blk.USTAR()
+ if s := p.parseString(ustar.Prefix()); isASCII(s) {
+ prefix = s
+ }
+ hdr.Format = FormatUnknown // Buggy file is not GNU
+ }
}
if len(prefix) > 0 {
hdr.Name = prefix + "/" + hdr.Name
}
}
+ return hdr, &tr.blk, p.err
+}
- if p.err != nil {
- tr.err = p.err
- return nil
- }
-
- nb := hdr.Size
- if isHeaderOnlyType(hdr.Typeflag) {
- nb = 0
- }
- if nb < 0 {
- tr.err = ErrHeader
- return nil
- }
-
- // Set the current file reader.
- tr.pad = -nb & (blockSize - 1) // blockSize is a power of two
- tr.curr = &regFileReader{r: tr.r, nb: nb}
-
- // Check for old GNU sparse format entry.
- if hdr.Typeflag == TypeGNUSparse {
- // Get the real size of the file.
- hdr.Size = p.parseNumeric(header[483:495])
- if p.err != nil {
- tr.err = p.err
- return nil
- }
-
- // Read the sparse map.
- sp := tr.readOldGNUSparseMap(header)
- if tr.err != nil {
- return nil
- }
-
- // Current file is a GNU sparse file. Update the current file reader.
- tr.curr, tr.err = newSparseFileReader(tr.curr, sp, hdr.Size)
- if tr.err != nil {
- return nil
- }
+// readOldGNUSparseMap reads the sparse map from the old GNU sparse format.
+// The sparse map is stored in the tar header if it's small enough.
+// If it's larger than four entries, then one or more extension headers are used
+// to store the rest of the sparse map.
+//
+// The Header.Size does not reflect the size of any extended headers used.
+// Thus, this function will read from the raw io.Reader to fetch extra headers.
+// This method mutates blk in the process.
+func (tr *Reader) readOldGNUSparseMap(hdr *Header, blk *block) (sparseDatas, error) {
+ // Make sure that the input format is GNU.
+ // Unfortunately, the STAR format also has a sparse header format that uses
+ // the same type flag but has a completely different layout.
+ if blk.GetFormat() != FormatGNU {
+ return nil, ErrHeader
}
+ hdr.Format.mayOnlyBe(FormatGNU)
- return hdr
-}
-
-// readOldGNUSparseMap reads the sparse map as stored in the old GNU sparse format.
-// The sparse map is stored in the tar header if it's small enough. If it's larger than four entries,
-// then one or more extension headers are used to store the rest of the sparse map.
-func (tr *Reader) readOldGNUSparseMap(header []byte) []sparseEntry {
var p parser
- isExtended := header[oldGNUSparseMainHeaderIsExtendedOffset] != 0
- spCap := oldGNUSparseMainHeaderNumEntries
- if isExtended {
- spCap += oldGNUSparseExtendedHeaderNumEntries
- }
- sp := make([]sparseEntry, 0, spCap)
- s := slicer(header[oldGNUSparseMainHeaderOffset:])
-
- // Read the four entries from the main tar header
- for i := 0; i < oldGNUSparseMainHeaderNumEntries; i++ {
- offset := p.parseNumeric(s.next(oldGNUSparseOffsetSize))
- numBytes := p.parseNumeric(s.next(oldGNUSparseNumBytesSize))
- if p.err != nil {
- tr.err = p.err
- return nil
- }
- if offset == 0 && numBytes == 0 {
- break
- }
- sp = append(sp, sparseEntry{offset: offset, numBytes: numBytes})
+ hdr.Size = p.parseNumeric(blk.GNU().RealSize())
+ if p.err != nil {
+ return nil, p.err
}
-
- for isExtended {
- // There are more entries. Read an extension header and parse its entries.
- sparseHeader := make([]byte, blockSize)
- if _, tr.err = io.ReadFull(tr.r, sparseHeader); tr.err != nil {
- return nil
- }
- if tr.RawAccounting {
- if _, tr.err = tr.rawBytes.Write(sparseHeader); tr.err != nil {
- return nil
+ s := blk.GNU().Sparse()
+ spd := make(sparseDatas, 0, s.MaxEntries())
+ for {
+ for i := 0; i < s.MaxEntries(); i++ {
+ // This termination condition is identical to GNU and BSD tar.
+ if s.Entry(i).Offset()[0] == 0x00 {
+ break // Don't return, need to process extended headers (even if empty)
+ }
+ offset := p.parseNumeric(s.Entry(i).Offset())
+ length := p.parseNumeric(s.Entry(i).Length())
+ if p.err != nil {
+ return nil, p.err
}
+ spd = append(spd, sparseEntry{Offset: offset, Length: length})
}
- isExtended = sparseHeader[oldGNUSparseExtendedHeaderIsExtendedOffset] != 0
- s = slicer(sparseHeader)
- for i := 0; i < oldGNUSparseExtendedHeaderNumEntries; i++ {
- offset := p.parseNumeric(s.next(oldGNUSparseOffsetSize))
- numBytes := p.parseNumeric(s.next(oldGNUSparseNumBytesSize))
- if p.err != nil {
- tr.err = p.err
- return nil
+ if s.IsExtended()[0] > 0 {
+ // There are more entries. Read an extension header and parse its entries.
+ if _, err := mustReadFull(tr.r, blk[:]); err != nil {
+ return nil, err
}
- if offset == 0 && numBytes == 0 {
- break
+ if tr.RawAccounting {
+ tr.rawBytes.Write(blk[:])
}
- sp = append(sp, sparseEntry{offset: offset, numBytes: numBytes})
+ s = blk.Sparse()
+ continue
}
+ return spd, nil // Done
}
- return sp
}
// readGNUSparseMap1x0 reads the sparse map as stored in GNU's PAX sparse format
// version 1.0. The format of the sparse map consists of a series of
// newline-terminated numeric fields. The first field is the number of entries
// and is always present. Following this are the entries, consisting of two
-// fields (offset, numBytes). This function must stop reading at the end
+// fields (offset, length). This function must stop reading at the end
// boundary of the block containing the last newline.
//
// Note that the GNU manual says that numeric values should be encoded in octal
// format. However, the GNU tar utility itself outputs these values in decimal.
// As such, this library treats values as being encoded in decimal.
-func readGNUSparseMap1x0(r io.Reader) ([]sparseEntry, error) {
- var cntNewline int64
- var buf bytes.Buffer
- var blk = make([]byte, blockSize)
-
- // feedTokens copies data in numBlock chunks from r into buf until there are
+func readGNUSparseMap1x0(r io.Reader) (sparseDatas, error) {
+ var (
+ cntNewline int64
+ buf bytes.Buffer
+ blk block
+ )
+
+ // feedTokens copies data in blocks from r into buf until there are
// at least cnt newlines in buf. It will not read more blocks than needed.
- var feedTokens = func(cnt int64) error {
- for cntNewline < cnt {
- if _, err := io.ReadFull(r, blk); err != nil {
- if err == io.EOF {
- err = io.ErrUnexpectedEOF
- }
+ feedTokens := func(n int64) error {
+ for cntNewline < n {
+ if _, err := mustReadFull(r, blk[:]); err != nil {
return err
}
- buf.Write(blk)
+ buf.Write(blk[:])
for _, c := range blk {
if c == '\n' {
cntNewline++
@@ -846,10 +596,10 @@ func readGNUSparseMap1x0(r io.Reader) ([]sparseEntry, error) {
// nextToken gets the next token delimited by a newline. This assumes that
// at least one newline exists in the buffer.
- var nextToken = func() string {
+ nextToken := func() string {
cntNewline--
tok, _ := buf.ReadString('\n')
- return tok[:len(tok)-1] // Cut off newline
+ return strings.TrimRight(tok, "\n")
}
// Parse for the number of entries.
@@ -868,197 +618,306 @@ func readGNUSparseMap1x0(r io.Reader) ([]sparseEntry, error) {
if err := feedTokens(2 * numEntries); err != nil {
return nil, err
}
- sp := make([]sparseEntry, 0, numEntries)
+ spd := make(sparseDatas, 0, numEntries)
for i := int64(0); i < numEntries; i++ {
- offset, err := strconv.ParseInt(nextToken(), 10, 64)
- if err != nil {
- return nil, ErrHeader
- }
- numBytes, err := strconv.ParseInt(nextToken(), 10, 64)
- if err != nil {
+ offset, err1 := strconv.ParseInt(nextToken(), 10, 64)
+ length, err2 := strconv.ParseInt(nextToken(), 10, 64)
+ if err1 != nil || err2 != nil {
return nil, ErrHeader
}
- sp = append(sp, sparseEntry{offset: offset, numBytes: numBytes})
+ spd = append(spd, sparseEntry{Offset: offset, Length: length})
}
- return sp, nil
+ return spd, nil
}
// readGNUSparseMap0x1 reads the sparse map as stored in GNU's PAX sparse format
// version 0.1. The sparse map is stored in the PAX headers.
-func readGNUSparseMap0x1(extHdrs map[string]string) ([]sparseEntry, error) {
+func readGNUSparseMap0x1(paxHdrs map[string]string) (sparseDatas, error) {
// Get number of entries.
// Use integer overflow resistant math to check this.
- numEntriesStr := extHdrs[paxGNUSparseNumBlocks]
+ numEntriesStr := paxHdrs[paxGNUSparseNumBlocks]
numEntries, err := strconv.ParseInt(numEntriesStr, 10, 0) // Intentionally parse as native int
if err != nil || numEntries < 0 || int(2*numEntries) < int(numEntries) {
return nil, ErrHeader
}
// There should be two numbers in sparseMap for each entry.
- sparseMap := strings.Split(extHdrs[paxGNUSparseMap], ",")
+ sparseMap := strings.Split(paxHdrs[paxGNUSparseMap], ",")
+ if len(sparseMap) == 1 && sparseMap[0] == "" {
+ sparseMap = sparseMap[:0]
+ }
if int64(len(sparseMap)) != 2*numEntries {
return nil, ErrHeader
}
// Loop through the entries in the sparse map.
// numEntries is trusted now.
- sp := make([]sparseEntry, 0, numEntries)
- for i := int64(0); i < numEntries; i++ {
- offset, err := strconv.ParseInt(sparseMap[2*i], 10, 64)
- if err != nil {
+ spd := make(sparseDatas, 0, numEntries)
+ for len(sparseMap) >= 2 {
+ offset, err1 := strconv.ParseInt(sparseMap[0], 10, 64)
+ length, err2 := strconv.ParseInt(sparseMap[1], 10, 64)
+ if err1 != nil || err2 != nil {
return nil, ErrHeader
}
- numBytes, err := strconv.ParseInt(sparseMap[2*i+1], 10, 64)
- if err != nil {
- return nil, ErrHeader
- }
- sp = append(sp, sparseEntry{offset: offset, numBytes: numBytes})
+ spd = append(spd, sparseEntry{Offset: offset, Length: length})
+ sparseMap = sparseMap[2:]
}
- return sp, nil
+ return spd, nil
}
-// numBytes returns the number of bytes left to read in the current file's entry
-// in the tar archive, or 0 if there is no current file.
-func (tr *Reader) numBytes() int64 {
- if tr.curr == nil {
- // No current file, so no bytes
- return 0
- }
- return tr.curr.numBytes()
-}
-
-// Read reads from the current entry in the tar archive.
-// It returns 0, io.EOF when it reaches the end of that entry,
-// until Next is called to advance to the next entry.
+// Read reads from the current file in the tar archive.
+// It returns (0, io.EOF) when it reaches the end of that file,
+// until Next is called to advance to the next file.
+//
+// If the current file is sparse, then the regions marked as a hole
+// are read back as NUL-bytes.
//
-// Calling Read on special types like TypeLink, TypeSymLink, TypeChar,
-// TypeBlock, TypeDir, and TypeFifo returns 0, io.EOF regardless of what
+// Calling Read on special types like TypeLink, TypeSymlink, TypeChar,
+// TypeBlock, TypeDir, and TypeFifo returns (0, io.EOF) regardless of what
// the Header.Size claims.
-func (tr *Reader) Read(b []byte) (n int, err error) {
+func (tr *Reader) Read(b []byte) (int, error) {
if tr.err != nil {
return 0, tr.err
}
- if tr.curr == nil {
- return 0, io.EOF
- }
-
- n, err = tr.curr.Read(b)
+ n, err := tr.curr.Read(b)
if err != nil && err != io.EOF {
tr.err = err
}
- return
+ return n, err
}
-func (rfr *regFileReader) Read(b []byte) (n int, err error) {
- if rfr.nb == 0 {
- // file consumed
- return 0, io.EOF
+// writeTo writes the content of the current file to w.
+// The bytes written matches the number of remaining bytes in the current file.
+//
+// If the current file is sparse and w is an io.WriteSeeker,
+// then writeTo uses Seek to skip past holes defined in Header.SparseHoles,
+// assuming that skipped regions are filled with NULs.
+// This always writes the last byte to ensure w is the right size.
+//
+// TODO(dsnet): Re-export this when adding sparse file support.
+// See https://golang.org/issue/22735
+func (tr *Reader) writeTo(w io.Writer) (int64, error) {
+ if tr.err != nil {
+ return 0, tr.err
}
- if int64(len(b)) > rfr.nb {
- b = b[0:rfr.nb]
+ n, err := tr.curr.WriteTo(w)
+ if err != nil {
+ tr.err = err
}
- n, err = rfr.r.Read(b)
- rfr.nb -= int64(n)
+ return n, err
+}
- if err == io.EOF && rfr.nb > 0 {
- err = io.ErrUnexpectedEOF
+// regFileReader is a fileReader for reading data from a regular file entry.
+type regFileReader struct {
+ r io.Reader // Underlying Reader
+ nb int64 // Number of remaining bytes to read
+}
+
+func (fr *regFileReader) Read(b []byte) (n int, err error) {
+ if int64(len(b)) > fr.nb {
+ b = b[:fr.nb]
+ }
+ if len(b) > 0 {
+ n, err = fr.r.Read(b)
+ fr.nb -= int64(n)
+ }
+ switch {
+ case err == io.EOF && fr.nb > 0:
+ return n, io.ErrUnexpectedEOF
+ case err == nil && fr.nb == 0:
+ return n, io.EOF
+ default:
+ return n, err
}
- return
}
-// numBytes returns the number of bytes left to read in the file's data in the tar archive.
-func (rfr *regFileReader) numBytes() int64 {
- return rfr.nb
+func (fr *regFileReader) WriteTo(w io.Writer) (int64, error) {
+ return io.Copy(w, struct{ io.Reader }{fr})
}
-// newSparseFileReader creates a new sparseFileReader, but validates all of the
-// sparse entries before doing so.
-func newSparseFileReader(rfr numBytesReader, sp []sparseEntry, total int64) (*sparseFileReader, error) {
- if total < 0 {
- return nil, ErrHeader // Total size cannot be negative
+func (fr regFileReader) LogicalRemaining() int64 {
+ return fr.nb
+}
+
+func (fr regFileReader) PhysicalRemaining() int64 {
+ return fr.nb
+}
+
+// sparseFileReader is a fileReader for reading data from a sparse file entry.
+type sparseFileReader struct {
+ fr fileReader // Underlying fileReader
+ sp sparseHoles // Normalized list of sparse holes
+ pos int64 // Current position in sparse file
+}
+
+func (sr *sparseFileReader) Read(b []byte) (n int, err error) {
+ finished := int64(len(b)) >= sr.LogicalRemaining()
+ if finished {
+ b = b[:sr.LogicalRemaining()]
}
- // Validate all sparse entries. These are the same checks as performed by
- // the BSD tar utility.
- for i, s := range sp {
- switch {
- case s.offset < 0 || s.numBytes < 0:
- return nil, ErrHeader // Negative values are never okay
- case s.offset > math.MaxInt64-s.numBytes:
- return nil, ErrHeader // Integer overflow with large length
- case s.offset+s.numBytes > total:
- return nil, ErrHeader // Region extends beyond the "real" size
- case i > 0 && sp[i-1].offset+sp[i-1].numBytes > s.offset:
- return nil, ErrHeader // Regions can't overlap and must be in order
+ b0 := b
+ endPos := sr.pos + int64(len(b))
+ for endPos > sr.pos && err == nil {
+ var nf int // Bytes read in fragment
+ holeStart, holeEnd := sr.sp[0].Offset, sr.sp[0].endOffset()
+ if sr.pos < holeStart { // In a data fragment
+ bf := b[:min(int64(len(b)), holeStart-sr.pos)]
+ nf, err = tryReadFull(sr.fr, bf)
+ } else { // In a hole fragment
+ bf := b[:min(int64(len(b)), holeEnd-sr.pos)]
+ nf, err = tryReadFull(zeroReader{}, bf)
+ }
+ b = b[nf:]
+ sr.pos += int64(nf)
+ if sr.pos >= holeEnd && len(sr.sp) > 1 {
+ sr.sp = sr.sp[1:] // Ensure last fragment always remains
}
}
- return &sparseFileReader{rfr: rfr, sp: sp, total: total}, nil
-}
-// readHole reads a sparse hole ending at endOffset.
-func (sfr *sparseFileReader) readHole(b []byte, endOffset int64) int {
- n64 := endOffset - sfr.pos
- if n64 > int64(len(b)) {
- n64 = int64(len(b))
- }
- n := int(n64)
- for i := 0; i < n; i++ {
- b[i] = 0
+ n = len(b0) - len(b)
+ switch {
+ case err == io.EOF:
+ return n, errMissData // Less data in dense file than sparse file
+ case err != nil:
+ return n, err
+ case sr.LogicalRemaining() == 0 && sr.PhysicalRemaining() > 0:
+ return n, errUnrefData // More data in dense file than sparse file
+ case finished:
+ return n, io.EOF
+ default:
+ return n, nil
}
- sfr.pos += n64
- return n
}
-// Read reads the sparse file data in expanded form.
-func (sfr *sparseFileReader) Read(b []byte) (n int, err error) {
- // Skip past all empty fragments.
- for len(sfr.sp) > 0 && sfr.sp[0].numBytes == 0 {
- sfr.sp = sfr.sp[1:]
+func (sr *sparseFileReader) WriteTo(w io.Writer) (n int64, err error) {
+ ws, ok := w.(io.WriteSeeker)
+ if ok {
+ if _, err := ws.Seek(0, io.SeekCurrent); err != nil {
+ ok = false // Not all io.Seeker can really seek
+ }
+ }
+ if !ok {
+ return io.Copy(w, struct{ io.Reader }{sr})
+ }
+
+ var writeLastByte bool
+ pos0 := sr.pos
+ for sr.LogicalRemaining() > 0 && !writeLastByte && err == nil {
+ var nf int64 // Size of fragment
+ holeStart, holeEnd := sr.sp[0].Offset, sr.sp[0].endOffset()
+ if sr.pos < holeStart { // In a data fragment
+ nf = holeStart - sr.pos
+ nf, err = io.CopyN(ws, sr.fr, nf)
+ } else { // In a hole fragment
+ nf = holeEnd - sr.pos
+ if sr.PhysicalRemaining() == 0 {
+ writeLastByte = true
+ nf--
+ }
+ _, err = ws.Seek(nf, io.SeekCurrent)
+ }
+ sr.pos += nf
+ if sr.pos >= holeEnd && len(sr.sp) > 1 {
+ sr.sp = sr.sp[1:] // Ensure last fragment always remains
+ }
}
- // If there are no more fragments, then it is possible that there
- // is one last sparse hole.
- if len(sfr.sp) == 0 {
- // This behavior matches the BSD tar utility.
- // However, GNU tar stops returning data even if sfr.total is unmet.
- if sfr.pos < sfr.total {
- return sfr.readHole(b, sfr.total), nil
- }
- return 0, io.EOF
+ // If the last fragment is a hole, then seek to 1-byte before EOF, and
+ // write a single byte to ensure the file is the right size.
+ if writeLastByte && err == nil {
+ _, err = ws.Write([]byte{0})
+ sr.pos++
}
- // In front of a data fragment, so read a hole.
- if sfr.pos < sfr.sp[0].offset {
- return sfr.readHole(b, sfr.sp[0].offset), nil
+ n = sr.pos - pos0
+ switch {
+ case err == io.EOF:
+ return n, errMissData // Less data in dense file than sparse file
+ case err != nil:
+ return n, err
+ case sr.LogicalRemaining() == 0 && sr.PhysicalRemaining() > 0:
+ return n, errUnrefData // More data in dense file than sparse file
+ default:
+ return n, nil
}
+}
- // In a data fragment, so read from it.
- // This math is overflow free since we verify that offset and numBytes can
- // be safely added when creating the sparseFileReader.
- endPos := sfr.sp[0].offset + sfr.sp[0].numBytes // End offset of fragment
- bytesLeft := endPos - sfr.pos // Bytes left in fragment
- if int64(len(b)) > bytesLeft {
- b = b[:bytesLeft]
+func (sr sparseFileReader) LogicalRemaining() int64 {
+ return sr.sp[len(sr.sp)-1].endOffset() - sr.pos
+}
+func (sr sparseFileReader) PhysicalRemaining() int64 {
+ return sr.fr.PhysicalRemaining()
+}
+
+type zeroReader struct{}
+
+func (zeroReader) Read(b []byte) (int, error) {
+ for i := range b {
+ b[i] = 0
}
+ return len(b), nil
+}
- n, err = sfr.rfr.Read(b)
- sfr.pos += int64(n)
+// mustReadFull is like io.ReadFull except it returns
+// io.ErrUnexpectedEOF when io.EOF is hit before len(b) bytes are read.
+func mustReadFull(r io.Reader, b []byte) (int, error) {
+ n, err := tryReadFull(r, b)
if err == io.EOF {
- if sfr.pos < endPos {
- err = io.ErrUnexpectedEOF // There was supposed to be more data
- } else if sfr.pos < sfr.total {
- err = nil // There is still an implicit sparse hole at the end
- }
+ err = io.ErrUnexpectedEOF
}
+ return n, err
+}
- if sfr.pos == endPos {
- sfr.sp = sfr.sp[1:] // We are done with this fragment, so pop it
+// tryReadFull is like io.ReadFull except it returns
+// io.EOF when it is hit before len(b) bytes are read.
+func tryReadFull(r io.Reader, b []byte) (n int, err error) {
+ for len(b) > n && err == nil {
+ var nn int
+ nn, err = r.Read(b[n:])
+ n += nn
+ }
+ if len(b) == n && err == io.EOF {
+ err = nil
}
return n, err
}
-// numBytes returns the number of bytes left to read in the sparse file's
-// sparse-encoded data in the tar archive.
-func (sfr *sparseFileReader) numBytes() int64 {
- return sfr.rfr.numBytes()
+// discard skips n bytes in r, reporting an error if unable to do so.
+func discard(tr *Reader, n int64) error {
+ var seekSkipped, copySkipped int64
+ var err error
+ r := tr.r
+ if tr.RawAccounting {
+
+ copySkipped, err = io.CopyN(tr.rawBytes, tr.r, n)
+ goto out
+ }
+
+ // If possible, Seek to the last byte before the end of the data section.
+ // Do this because Seek is often lazy about reporting errors; this will mask
+ // the fact that the stream may be truncated. We can rely on the
+ // io.CopyN done shortly afterwards to trigger any IO errors.
+ if sr, ok := r.(io.Seeker); ok && n > 1 {
+ // Not all io.Seeker can actually Seek. For example, os.Stdin implements
+ // io.Seeker, but calling Seek always returns an error and performs
+ // no action. Thus, we try an innocent seek to the current position
+ // to see if Seek is really supported.
+ pos1, err := sr.Seek(0, io.SeekCurrent)
+ if pos1 >= 0 && err == nil {
+ // Seek seems supported, so perform the real Seek.
+ pos2, err := sr.Seek(n-1, io.SeekCurrent)
+ if pos2 < 0 || err != nil {
+ return err
+ }
+ seekSkipped = pos2 - pos1
+ }
+ }
+
+ copySkipped, err = io.CopyN(ioutil.Discard, r, n-seekSkipped)
+out:
+ if err == io.EOF && seekSkipped+copySkipped < n {
+ err = io.ErrUnexpectedEOF
+ }
+ return err
}
diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/stat_atim.go b/vendor/github.com/vbatts/tar-split/archive/tar/stat_actime1.go
index cf9cc79c5..cf9cc79c5 100644
--- a/vendor/github.com/vbatts/tar-split/archive/tar/stat_atim.go
+++ b/vendor/github.com/vbatts/tar-split/archive/tar/stat_actime1.go
diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/stat_atimespec.go b/vendor/github.com/vbatts/tar-split/archive/tar/stat_actime2.go
index 6f17dbe30..6f17dbe30 100644
--- a/vendor/github.com/vbatts/tar-split/archive/tar/stat_atimespec.go
+++ b/vendor/github.com/vbatts/tar-split/archive/tar/stat_actime2.go
diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/stat_unix.go b/vendor/github.com/vbatts/tar-split/archive/tar/stat_unix.go
index cb843db4c..868105f33 100644
--- a/vendor/github.com/vbatts/tar-split/archive/tar/stat_unix.go
+++ b/vendor/github.com/vbatts/tar-split/archive/tar/stat_unix.go
@@ -8,6 +8,10 @@ package tar
import (
"os"
+ "os/user"
+ "runtime"
+ "strconv"
+ "sync"
"syscall"
)
@@ -15,6 +19,10 @@ func init() {
sysStat = statUnix
}
+// userMap and groupMap caches UID and GID lookups for performance reasons.
+// The downside is that renaming uname or gname by the OS never takes effect.
+var userMap, groupMap sync.Map // map[int]string
+
func statUnix(fi os.FileInfo, h *Header) error {
sys, ok := fi.Sys().(*syscall.Stat_t)
if !ok {
@@ -22,11 +30,67 @@ func statUnix(fi os.FileInfo, h *Header) error {
}
h.Uid = int(sys.Uid)
h.Gid = int(sys.Gid)
- // TODO(bradfitz): populate username & group. os/user
- // doesn't cache LookupId lookups, and lacks group
- // lookup functions.
+
+ // Best effort at populating Uname and Gname.
+ // The os/user functions may fail for any number of reasons
+ // (not implemented on that platform, cgo not enabled, etc).
+ if u, ok := userMap.Load(h.Uid); ok {
+ h.Uname = u.(string)
+ } else if u, err := user.LookupId(strconv.Itoa(h.Uid)); err == nil {
+ h.Uname = u.Username
+ userMap.Store(h.Uid, h.Uname)
+ }
+ if g, ok := groupMap.Load(h.Gid); ok {
+ h.Gname = g.(string)
+ } else if g, err := user.LookupGroupId(strconv.Itoa(h.Gid)); err == nil {
+ h.Gname = g.Name
+ groupMap.Store(h.Gid, h.Gname)
+ }
+
h.AccessTime = statAtime(sys)
h.ChangeTime = statCtime(sys)
- // TODO(bradfitz): major/minor device numbers?
+
+ // Best effort at populating Devmajor and Devminor.
+ if h.Typeflag == TypeChar || h.Typeflag == TypeBlock {
+ dev := uint64(sys.Rdev) // May be int32 or uint32
+ switch runtime.GOOS {
+ case "linux":
+ // Copied from golang.org/x/sys/unix/dev_linux.go.
+ major := uint32((dev & 0x00000000000fff00) >> 8)
+ major |= uint32((dev & 0xfffff00000000000) >> 32)
+ minor := uint32((dev & 0x00000000000000ff) >> 0)
+ minor |= uint32((dev & 0x00000ffffff00000) >> 12)
+ h.Devmajor, h.Devminor = int64(major), int64(minor)
+ case "darwin":
+ // Copied from golang.org/x/sys/unix/dev_darwin.go.
+ major := uint32((dev >> 24) & 0xff)
+ minor := uint32(dev & 0xffffff)
+ h.Devmajor, h.Devminor = int64(major), int64(minor)
+ case "dragonfly":
+ // Copied from golang.org/x/sys/unix/dev_dragonfly.go.
+ major := uint32((dev >> 8) & 0xff)
+ minor := uint32(dev & 0xffff00ff)
+ h.Devmajor, h.Devminor = int64(major), int64(minor)
+ case "freebsd":
+ // Copied from golang.org/x/sys/unix/dev_freebsd.go.
+ major := uint32((dev >> 8) & 0xff)
+ minor := uint32(dev & 0xffff00ff)
+ h.Devmajor, h.Devminor = int64(major), int64(minor)
+ case "netbsd":
+ // Copied from golang.org/x/sys/unix/dev_netbsd.go.
+ major := uint32((dev & 0x000fff00) >> 8)
+ minor := uint32((dev & 0x000000ff) >> 0)
+ minor |= uint32((dev & 0xfff00000) >> 12)
+ h.Devmajor, h.Devminor = int64(major), int64(minor)
+ case "openbsd":
+ // Copied from golang.org/x/sys/unix/dev_openbsd.go.
+ major := uint32((dev & 0x0000ff00) >> 8)
+ minor := uint32((dev & 0x000000ff) >> 0)
+ minor |= uint32((dev & 0xffff0000) >> 8)
+ h.Devmajor, h.Devminor = int64(major), int64(minor)
+ default:
+ // TODO: Implement solaris (see https://golang.org/issue/8106)
+ }
+ }
return nil
}
diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/strconv.go b/vendor/github.com/vbatts/tar-split/archive/tar/strconv.go
new file mode 100644
index 000000000..d144485a4
--- /dev/null
+++ b/vendor/github.com/vbatts/tar-split/archive/tar/strconv.go
@@ -0,0 +1,326 @@
+// 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 tar
+
+import (
+ "bytes"
+ "fmt"
+ "strconv"
+ "strings"
+ "time"
+)
+
+// hasNUL reports whether the NUL character exists within s.
+func hasNUL(s string) bool {
+ return strings.IndexByte(s, 0) >= 0
+}
+
+// isASCII reports whether the input is an ASCII C-style string.
+func isASCII(s string) bool {
+ for _, c := range s {
+ if c >= 0x80 || c == 0x00 {
+ return false
+ }
+ }
+ return true
+}
+
+// toASCII converts the input to an ASCII C-style string.
+// This a best effort conversion, so invalid characters are dropped.
+func toASCII(s string) string {
+ if isASCII(s) {
+ return s
+ }
+ b := make([]byte, 0, len(s))
+ for _, c := range s {
+ if c < 0x80 && c != 0x00 {
+ b = append(b, byte(c))
+ }
+ }
+ return string(b)
+}
+
+type parser struct {
+ err error // Last error seen
+}
+
+type formatter struct {
+ err error // Last error seen
+}
+
+// parseString parses bytes as a NUL-terminated C-style string.
+// If a NUL byte is not found then the whole slice is returned as a string.
+func (*parser) parseString(b []byte) string {
+ if i := bytes.IndexByte(b, 0); i >= 0 {
+ return string(b[:i])
+ }
+ return string(b)
+}
+
+// formatString copies s into b, NUL-terminating if possible.
+func (f *formatter) formatString(b []byte, s string) {
+ if len(s) > len(b) {
+ f.err = ErrFieldTooLong
+ }
+ copy(b, s)
+ if len(s) < len(b) {
+ b[len(s)] = 0
+ }
+
+ // Some buggy readers treat regular files with a trailing slash
+ // in the V7 path field as a directory even though the full path
+ // recorded elsewhere (e.g., via PAX record) contains no trailing slash.
+ if len(s) > len(b) && b[len(b)-1] == '/' {
+ n := len(strings.TrimRight(s[:len(b)], "/"))
+ b[n] = 0 // Replace trailing slash with NUL terminator
+ }
+}
+
+// fitsInBase256 reports whether x can be encoded into n bytes using base-256
+// encoding. Unlike octal encoding, base-256 encoding does not require that the
+// string ends with a NUL character. Thus, all n bytes are available for output.
+//
+// If operating in binary mode, this assumes strict GNU binary mode; which means
+// that the first byte can only be either 0x80 or 0xff. Thus, the first byte is
+// equivalent to the sign bit in two's complement form.
+func fitsInBase256(n int, x int64) bool {
+ binBits := uint(n-1) * 8
+ return n >= 9 || (x >= -1<<binBits && x < 1<<binBits)
+}
+
+// parseNumeric parses the input as being encoded in either base-256 or octal.
+// This function may return negative numbers.
+// If parsing fails or an integer overflow occurs, err will be set.
+func (p *parser) parseNumeric(b []byte) int64 {
+ // Check for base-256 (binary) format first.
+ // If the first bit is set, then all following bits constitute a two's
+ // complement encoded number in big-endian byte order.
+ if len(b) > 0 && b[0]&0x80 != 0 {
+ // Handling negative numbers relies on the following identity:
+ // -a-1 == ^a
+ //
+ // If the number is negative, we use an inversion mask to invert the
+ // data bytes and treat the value as an unsigned number.
+ var inv byte // 0x00 if positive or zero, 0xff if negative
+ if b[0]&0x40 != 0 {
+ inv = 0xff
+ }
+
+ var x uint64
+ for i, c := range b {
+ c ^= inv // Inverts c only if inv is 0xff, otherwise does nothing
+ if i == 0 {
+ c &= 0x7f // Ignore signal bit in first byte
+ }
+ if (x >> 56) > 0 {
+ p.err = ErrHeader // Integer overflow
+ return 0
+ }
+ x = x<<8 | uint64(c)
+ }
+ if (x >> 63) > 0 {
+ p.err = ErrHeader // Integer overflow
+ return 0
+ }
+ if inv == 0xff {
+ return ^int64(x)
+ }
+ return int64(x)
+ }
+
+ // Normal case is base-8 (octal) format.
+ return p.parseOctal(b)
+}
+
+// formatNumeric encodes x into b using base-8 (octal) encoding if possible.
+// Otherwise it will attempt to use base-256 (binary) encoding.
+func (f *formatter) formatNumeric(b []byte, x int64) {
+ if fitsInOctal(len(b), x) {
+ f.formatOctal(b, x)
+ return
+ }
+
+ if fitsInBase256(len(b), x) {
+ for i := len(b) - 1; i >= 0; i-- {
+ b[i] = byte(x)
+ x >>= 8
+ }
+ b[0] |= 0x80 // Highest bit indicates binary format
+ return
+ }
+
+ f.formatOctal(b, 0) // Last resort, just write zero
+ f.err = ErrFieldTooLong
+}
+
+func (p *parser) parseOctal(b []byte) int64 {
+ // Because unused fields are filled with NULs, we need
+ // to skip leading NULs. Fields may also be padded with
+ // spaces or NULs.
+ // So we remove leading and trailing NULs and spaces to
+ // be sure.
+ b = bytes.Trim(b, " \x00")
+
+ if len(b) == 0 {
+ return 0
+ }
+ x, perr := strconv.ParseUint(p.parseString(b), 8, 64)
+ if perr != nil {
+ p.err = ErrHeader
+ }
+ return int64(x)
+}
+
+func (f *formatter) formatOctal(b []byte, x int64) {
+ if !fitsInOctal(len(b), x) {
+ x = 0 // Last resort, just write zero
+ f.err = ErrFieldTooLong
+ }
+
+ s := strconv.FormatInt(x, 8)
+ // Add leading zeros, but leave room for a NUL.
+ if n := len(b) - len(s) - 1; n > 0 {
+ s = strings.Repeat("0", n) + s
+ }
+ f.formatString(b, s)
+}
+
+// fitsInOctal reports whether the integer x fits in a field n-bytes long
+// using octal encoding with the appropriate NUL terminator.
+func fitsInOctal(n int, x int64) bool {
+ octBits := uint(n-1) * 3
+ return x >= 0 && (n >= 22 || x < 1<<octBits)
+}
+
+// parsePAXTime takes a string of the form %d.%d as described in the PAX
+// specification. Note that this implementation allows for negative timestamps,
+// which is allowed for by the PAX specification, but not always portable.
+func parsePAXTime(s string) (time.Time, error) {
+ const maxNanoSecondDigits = 9
+
+ // Split string into seconds and sub-seconds parts.
+ ss, sn := s, ""
+ if pos := strings.IndexByte(s, '.'); pos >= 0 {
+ ss, sn = s[:pos], s[pos+1:]
+ }
+
+ // Parse the seconds.
+ secs, err := strconv.ParseInt(ss, 10, 64)
+ if err != nil {
+ return time.Time{}, ErrHeader
+ }
+ if len(sn) == 0 {
+ return time.Unix(secs, 0), nil // No sub-second values
+ }
+
+ // Parse the nanoseconds.
+ if strings.Trim(sn, "0123456789") != "" {
+ return time.Time{}, ErrHeader
+ }
+ if len(sn) < maxNanoSecondDigits {
+ sn += strings.Repeat("0", maxNanoSecondDigits-len(sn)) // Right pad
+ } else {
+ sn = sn[:maxNanoSecondDigits] // Right truncate
+ }
+ nsecs, _ := strconv.ParseInt(sn, 10, 64) // Must succeed
+ if len(ss) > 0 && ss[0] == '-' {
+ return time.Unix(secs, -1*nsecs), nil // Negative correction
+ }
+ return time.Unix(secs, nsecs), nil
+}
+
+// formatPAXTime converts ts into a time of the form %d.%d as described in the
+// PAX specification. This function is capable of negative timestamps.
+func formatPAXTime(ts time.Time) (s string) {
+ secs, nsecs := ts.Unix(), ts.Nanosecond()
+ if nsecs == 0 {
+ return strconv.FormatInt(secs, 10)
+ }
+
+ // If seconds is negative, then perform correction.
+ sign := ""
+ if secs < 0 {
+ sign = "-" // Remember sign
+ secs = -(secs + 1) // Add a second to secs
+ nsecs = -(nsecs - 1E9) // Take that second away from nsecs
+ }
+ return strings.TrimRight(fmt.Sprintf("%s%d.%09d", sign, secs, nsecs), "0")
+}
+
+// parsePAXRecord parses the input PAX record string into a key-value pair.
+// If parsing is successful, it will slice off the currently read record and
+// return the remainder as r.
+func parsePAXRecord(s string) (k, v, r string, err error) {
+ // The size field ends at the first space.
+ sp := strings.IndexByte(s, ' ')
+ if sp == -1 {
+ return "", "", s, ErrHeader
+ }
+
+ // Parse the first token as a decimal integer.
+ n, perr := strconv.ParseInt(s[:sp], 10, 0) // Intentionally parse as native int
+ if perr != nil || n < 5 || int64(len(s)) < n {
+ return "", "", s, ErrHeader
+ }
+
+ // Extract everything between the space and the final newline.
+ rec, nl, rem := s[sp+1:n-1], s[n-1:n], s[n:]
+ if nl != "\n" {
+ return "", "", s, ErrHeader
+ }
+
+ // The first equals separates the key from the value.
+ eq := strings.IndexByte(rec, '=')
+ if eq == -1 {
+ return "", "", s, ErrHeader
+ }
+ k, v = rec[:eq], rec[eq+1:]
+
+ if !validPAXRecord(k, v) {
+ return "", "", s, ErrHeader
+ }
+ return k, v, rem, nil
+}
+
+// formatPAXRecord formats a single PAX record, prefixing it with the
+// appropriate length.
+func formatPAXRecord(k, v string) (string, error) {
+ if !validPAXRecord(k, v) {
+ return "", ErrHeader
+ }
+
+ const padding = 3 // Extra padding for ' ', '=', and '\n'
+ size := len(k) + len(v) + padding
+ size += len(strconv.Itoa(size))
+ record := strconv.Itoa(size) + " " + k + "=" + v + "\n"
+
+ // Final adjustment if adding size field increased the record size.
+ if len(record) != size {
+ size = len(record)
+ record = strconv.Itoa(size) + " " + k + "=" + v + "\n"
+ }
+ return record, nil
+}
+
+// validPAXRecord reports whether the key-value pair is valid where each
+// record is formatted as:
+// "%d %s=%s\n" % (size, key, value)
+//
+// Keys and values should be UTF-8, but the number of bad writers out there
+// forces us to be a more liberal.
+// Thus, we only reject all keys with NUL, and only reject NULs in values
+// for the PAX version of the USTAR string fields.
+// The key must not contain an '=' character.
+func validPAXRecord(k, v string) bool {
+ if k == "" || strings.IndexByte(k, '=') >= 0 {
+ return false
+ }
+ switch k {
+ case paxPath, paxLinkpath, paxUname, paxGname:
+ return !hasNUL(v)
+ default:
+ return !hasNUL(k)
+ }
+}
diff --git a/vendor/github.com/vbatts/tar-split/archive/tar/writer.go b/vendor/github.com/vbatts/tar-split/archive/tar/writer.go
index 042638175..e80498d03 100644
--- a/vendor/github.com/vbatts/tar-split/archive/tar/writer.go
+++ b/vendor/github.com/vbatts/tar-split/archive/tar/writer.go
@@ -4,295 +4,410 @@
package tar
-// TODO(dsymonds):
-// - catch more errors (no first header, etc.)
-
import (
- "bytes"
- "errors"
"fmt"
"io"
"path"
"sort"
- "strconv"
"strings"
"time"
)
-var (
- ErrWriteTooLong = errors.New("archive/tar: write too long")
- ErrFieldTooLong = errors.New("archive/tar: header field too long")
- ErrWriteAfterClose = errors.New("archive/tar: write after close")
- errInvalidHeader = errors.New("archive/tar: header field too long or contains invalid values")
-)
-
-// A Writer provides sequential writing of a tar archive in POSIX.1 format.
-// A tar archive consists of a sequence of files.
-// Call WriteHeader to begin a new file, and then call Write to supply that file's data,
-// writing at most hdr.Size bytes in total.
+// Writer provides sequential writing of a tar archive.
+// Write.WriteHeader begins a new file with the provided Header,
+// and then Writer can be treated as an io.Writer to supply that file's data.
type Writer struct {
- w io.Writer
- err error
- nb int64 // number of unwritten bytes for current file entry
- pad int64 // amount of padding to write after current file entry
- closed bool
- usedBinary bool // whether the binary numeric field extension was used
- preferPax bool // use pax header instead of binary numeric header
- hdrBuff [blockSize]byte // buffer to use in writeHeader when writing a regular header
- paxHdrBuff [blockSize]byte // buffer to use in writeHeader when writing a pax header
+ w io.Writer
+ pad int64 // Amount of padding to write after current file entry
+ curr fileWriter // Writer for current file entry
+ hdr Header // Shallow copy of Header that is safe for mutations
+ blk block // Buffer to use as temporary local storage
+
+ // err is a persistent error.
+ // It is only the responsibility of every exported method of Writer to
+ // ensure that this error is sticky.
+ err error
}
-type formatter struct {
- err error // Last error seen
+// NewWriter creates a new Writer writing to w.
+func NewWriter(w io.Writer) *Writer {
+ return &Writer{w: w, curr: &regFileWriter{w, 0}}
}
-// NewWriter creates a new Writer writing to w.
-func NewWriter(w io.Writer) *Writer { return &Writer{w: w} }
+type fileWriter interface {
+ io.Writer
+ fileState
-// Flush finishes writing the current file (optional).
+ ReadFrom(io.Reader) (int64, error)
+}
+
+// Flush finishes writing the current file's block padding.
+// The current file must be fully written before Flush can be called.
+//
+// This is unnecessary as the next call to WriteHeader or Close
+// will implicitly flush out the file's padding.
func (tw *Writer) Flush() error {
- if tw.nb > 0 {
- tw.err = fmt.Errorf("archive/tar: missed writing %d bytes", tw.nb)
+ if tw.err != nil {
return tw.err
}
-
- n := tw.nb + tw.pad
- for n > 0 && tw.err == nil {
- nr := n
- if nr > blockSize {
- nr = blockSize
- }
- var nw int
- nw, tw.err = tw.w.Write(zeroBlock[0:nr])
- n -= int64(nw)
+ if nb := tw.curr.LogicalRemaining(); nb > 0 {
+ return fmt.Errorf("archive/tar: missed writing %d bytes", nb)
+ }
+ if _, tw.err = tw.w.Write(zeroBlock[:tw.pad]); tw.err != nil {
+ return tw.err
}
- tw.nb = 0
tw.pad = 0
- return tw.err
+ return nil
}
-// Write s into b, terminating it with a NUL if there is room.
-func (f *formatter) formatString(b []byte, s string) {
- if len(s) > len(b) {
- f.err = ErrFieldTooLong
- return
+// WriteHeader writes hdr and prepares to accept the file's contents.
+// The Header.Size determines how many bytes can be written for the next file.
+// If the current file is not fully written, then this returns an error.
+// This implicitly flushes any padding necessary before writing the header.
+func (tw *Writer) WriteHeader(hdr *Header) error {
+ if err := tw.Flush(); err != nil {
+ return err
}
- ascii := toASCII(s)
- copy(b, ascii)
- if len(ascii) < len(b) {
- b[len(ascii)] = 0
+ tw.hdr = *hdr // Shallow copy of Header
+
+ // Avoid usage of the legacy TypeRegA flag, and automatically promote
+ // it to use TypeReg or TypeDir.
+ if tw.hdr.Typeflag == TypeRegA {
+ if strings.HasSuffix(tw.hdr.Name, "/") {
+ tw.hdr.Typeflag = TypeDir
+ } else {
+ tw.hdr.Typeflag = TypeReg
+ }
}
-}
-// Encode x as an octal ASCII string and write it into b with leading zeros.
-func (f *formatter) formatOctal(b []byte, x int64) {
- s := strconv.FormatInt(x, 8)
- // leading zeros, but leave room for a NUL.
- for len(s)+1 < len(b) {
- s = "0" + s
+ // Round ModTime and ignore AccessTime and ChangeTime unless
+ // the format is explicitly chosen.
+ // This ensures nominal usage of WriteHeader (without specifying the format)
+ // does not always result in the PAX format being chosen, which
+ // causes a 1KiB increase to every header.
+ if tw.hdr.Format == FormatUnknown {
+ tw.hdr.ModTime = tw.hdr.ModTime.Round(time.Second)
+ tw.hdr.AccessTime = time.Time{}
+ tw.hdr.ChangeTime = time.Time{}
}
- f.formatString(b, s)
-}
-// fitsInBase256 reports whether x can be encoded into n bytes using base-256
-// encoding. Unlike octal encoding, base-256 encoding does not require that the
-// string ends with a NUL character. Thus, all n bytes are available for output.
-//
-// If operating in binary mode, this assumes strict GNU binary mode; which means
-// that the first byte can only be either 0x80 or 0xff. Thus, the first byte is
-// equivalent to the sign bit in two's complement form.
-func fitsInBase256(n int, x int64) bool {
- var binBits = uint(n-1) * 8
- return n >= 9 || (x >= -1<<binBits && x < 1<<binBits)
+ allowedFormats, paxHdrs, err := tw.hdr.allowedFormats()
+ switch {
+ case allowedFormats.has(FormatUSTAR):
+ tw.err = tw.writeUSTARHeader(&tw.hdr)
+ return tw.err
+ case allowedFormats.has(FormatPAX):
+ tw.err = tw.writePAXHeader(&tw.hdr, paxHdrs)
+ return tw.err
+ case allowedFormats.has(FormatGNU):
+ tw.err = tw.writeGNUHeader(&tw.hdr)
+ return tw.err
+ default:
+ return err // Non-fatal error
+ }
}
-// Write x into b, as binary (GNUtar/star extension).
-func (f *formatter) formatNumeric(b []byte, x int64) {
- if fitsInBase256(len(b), x) {
- for i := len(b) - 1; i >= 0; i-- {
- b[i] = byte(x)
- x >>= 8
- }
- b[0] |= 0x80 // Highest bit indicates binary format
- return
+func (tw *Writer) writeUSTARHeader(hdr *Header) error {
+ // Check if we can use USTAR prefix/suffix splitting.
+ var namePrefix string
+ if prefix, suffix, ok := splitUSTARPath(hdr.Name); ok {
+ namePrefix, hdr.Name = prefix, suffix
}
- f.formatOctal(b, 0) // Last resort, just write zero
- f.err = ErrFieldTooLong
+ // Pack the main header.
+ var f formatter
+ blk := tw.templateV7Plus(hdr, f.formatString, f.formatOctal)
+ f.formatString(blk.USTAR().Prefix(), namePrefix)
+ blk.SetFormat(FormatUSTAR)
+ if f.err != nil {
+ return f.err // Should never happen since header is validated
+ }
+ return tw.writeRawHeader(blk, hdr.Size, hdr.Typeflag)
}
-var (
- minTime = time.Unix(0, 0)
- // There is room for 11 octal digits (33 bits) of mtime.
- maxTime = minTime.Add((1<<33 - 1) * time.Second)
-)
-
-// WriteHeader writes hdr and prepares to accept the file's contents.
-// WriteHeader calls Flush if it is not the first header.
-// Calling after a Close will return ErrWriteAfterClose.
-func (tw *Writer) WriteHeader(hdr *Header) error {
- return tw.writeHeader(hdr, true)
-}
+func (tw *Writer) writePAXHeader(hdr *Header, paxHdrs map[string]string) error {
+ realName, realSize := hdr.Name, hdr.Size
+
+ // TODO(dsnet): Re-enable this when adding sparse support.
+ // See https://golang.org/issue/22735
+ /*
+ // Handle sparse files.
+ var spd sparseDatas
+ var spb []byte
+ if len(hdr.SparseHoles) > 0 {
+ sph := append([]sparseEntry{}, hdr.SparseHoles...) // Copy sparse map
+ sph = alignSparseEntries(sph, hdr.Size)
+ spd = invertSparseEntries(sph, hdr.Size)
+
+ // Format the sparse map.
+ hdr.Size = 0 // Replace with encoded size
+ spb = append(strconv.AppendInt(spb, int64(len(spd)), 10), '\n')
+ for _, s := range spd {
+ hdr.Size += s.Length
+ spb = append(strconv.AppendInt(spb, s.Offset, 10), '\n')
+ spb = append(strconv.AppendInt(spb, s.Length, 10), '\n')
+ }
+ pad := blockPadding(int64(len(spb)))
+ spb = append(spb, zeroBlock[:pad]...)
+ hdr.Size += int64(len(spb)) // Accounts for encoded sparse map
+
+ // Add and modify appropriate PAX records.
+ dir, file := path.Split(realName)
+ hdr.Name = path.Join(dir, "GNUSparseFile.0", file)
+ paxHdrs[paxGNUSparseMajor] = "1"
+ paxHdrs[paxGNUSparseMinor] = "0"
+ paxHdrs[paxGNUSparseName] = realName
+ paxHdrs[paxGNUSparseRealSize] = strconv.FormatInt(realSize, 10)
+ paxHdrs[paxSize] = strconv.FormatInt(hdr.Size, 10)
+ delete(paxHdrs, paxPath) // Recorded by paxGNUSparseName
+ }
+ */
+ _ = realSize
+
+ // Write PAX records to the output.
+ isGlobal := hdr.Typeflag == TypeXGlobalHeader
+ if len(paxHdrs) > 0 || isGlobal {
+ // Sort keys for deterministic ordering.
+ var keys []string
+ for k := range paxHdrs {
+ keys = append(keys, k)
+ }
+ sort.Strings(keys)
+
+ // Write each record to a buffer.
+ var buf strings.Builder
+ for _, k := range keys {
+ rec, err := formatPAXRecord(k, paxHdrs[k])
+ if err != nil {
+ return err
+ }
+ buf.WriteString(rec)
+ }
-// WriteHeader writes hdr and prepares to accept the file's contents.
-// WriteHeader calls Flush if it is not the first header.
-// Calling after a Close will return ErrWriteAfterClose.
-// As this method is called internally by writePax header to allow it to
-// suppress writing the pax header.
-func (tw *Writer) writeHeader(hdr *Header, allowPax bool) error {
- if tw.closed {
- return ErrWriteAfterClose
- }
- if tw.err == nil {
- tw.Flush()
- }
- if tw.err != nil {
- return tw.err
+ // Write the extended header file.
+ var name string
+ var flag byte
+ if isGlobal {
+ name = realName
+ if name == "" {
+ name = "GlobalHead.0.0"
+ }
+ flag = TypeXGlobalHeader
+ } else {
+ dir, file := path.Split(realName)
+ name = path.Join(dir, "PaxHeaders.0", file)
+ flag = TypeXHeader
+ }
+ data := buf.String()
+ if err := tw.writeRawFile(name, data, flag, FormatPAX); err != nil || isGlobal {
+ return err // Global headers return here
+ }
}
- // a map to hold pax header records, if any are needed
- paxHeaders := make(map[string]string)
+ // Pack the main header.
+ var f formatter // Ignore errors since they are expected
+ fmtStr := func(b []byte, s string) { f.formatString(b, toASCII(s)) }
+ blk := tw.templateV7Plus(hdr, fmtStr, f.formatOctal)
+ blk.SetFormat(FormatPAX)
+ if err := tw.writeRawHeader(blk, hdr.Size, hdr.Typeflag); err != nil {
+ return err
+ }
- // TODO(shanemhansen): we might want to use PAX headers for
- // subsecond time resolution, but for now let's just capture
- // too long fields or non ascii characters
+ // TODO(dsnet): Re-enable this when adding sparse support.
+ // See https://golang.org/issue/22735
+ /*
+ // Write the sparse map and setup the sparse writer if necessary.
+ if len(spd) > 0 {
+ // Use tw.curr since the sparse map is accounted for in hdr.Size.
+ if _, err := tw.curr.Write(spb); err != nil {
+ return err
+ }
+ tw.curr = &sparseFileWriter{tw.curr, spd, 0}
+ }
+ */
+ return nil
+}
- var f formatter
- var header []byte
-
- // We need to select which scratch buffer to use carefully,
- // since this method is called recursively to write PAX headers.
- // If allowPax is true, this is the non-recursive call, and we will use hdrBuff.
- // If allowPax is false, we are being called by writePAXHeader, and hdrBuff is
- // already being used by the non-recursive call, so we must use paxHdrBuff.
- header = tw.hdrBuff[:]
- if !allowPax {
- header = tw.paxHdrBuff[:]
- }
- copy(header, zeroBlock)
- s := slicer(header)
-
- // Wrappers around formatter that automatically sets paxHeaders if the
- // argument extends beyond the capacity of the input byte slice.
- var formatString = func(b []byte, s string, paxKeyword string) {
- needsPaxHeader := paxKeyword != paxNone && len(s) > len(b) || !isASCII(s)
- if needsPaxHeader {
- paxHeaders[paxKeyword] = s
- return
+func (tw *Writer) writeGNUHeader(hdr *Header) error {
+ // Use long-link files if Name or Linkname exceeds the field size.
+ const longName = "././@LongLink"
+ if len(hdr.Name) > nameSize {
+ data := hdr.Name + "\x00"
+ if err := tw.writeRawFile(longName, data, TypeGNULongName, FormatGNU); err != nil {
+ return err
}
- f.formatString(b, s)
- }
- var formatNumeric = func(b []byte, x int64, paxKeyword string) {
- // Try octal first.
- s := strconv.FormatInt(x, 8)
- if len(s) < len(b) {
- f.formatOctal(b, x)
- return
+ }
+ if len(hdr.Linkname) > nameSize {
+ data := hdr.Linkname + "\x00"
+ if err := tw.writeRawFile(longName, data, TypeGNULongLink, FormatGNU); err != nil {
+ return err
}
+ }
- // If it is too long for octal, and PAX is preferred, use a PAX header.
- if paxKeyword != paxNone && tw.preferPax {
- f.formatOctal(b, 0)
- s := strconv.FormatInt(x, 10)
- paxHeaders[paxKeyword] = s
- return
+ // Pack the main header.
+ var f formatter // Ignore errors since they are expected
+ var spd sparseDatas
+ var spb []byte
+ blk := tw.templateV7Plus(hdr, f.formatString, f.formatNumeric)
+ if !hdr.AccessTime.IsZero() {
+ f.formatNumeric(blk.GNU().AccessTime(), hdr.AccessTime.Unix())
+ }
+ if !hdr.ChangeTime.IsZero() {
+ f.formatNumeric(blk.GNU().ChangeTime(), hdr.ChangeTime.Unix())
+ }
+ // TODO(dsnet): Re-enable this when adding sparse support.
+ // See https://golang.org/issue/22735
+ /*
+ if hdr.Typeflag == TypeGNUSparse {
+ sph := append([]sparseEntry{}, hdr.SparseHoles...) // Copy sparse map
+ sph = alignSparseEntries(sph, hdr.Size)
+ spd = invertSparseEntries(sph, hdr.Size)
+
+ // Format the sparse map.
+ formatSPD := func(sp sparseDatas, sa sparseArray) sparseDatas {
+ for i := 0; len(sp) > 0 && i < sa.MaxEntries(); i++ {
+ f.formatNumeric(sa.Entry(i).Offset(), sp[0].Offset)
+ f.formatNumeric(sa.Entry(i).Length(), sp[0].Length)
+ sp = sp[1:]
+ }
+ if len(sp) > 0 {
+ sa.IsExtended()[0] = 1
+ }
+ return sp
+ }
+ sp2 := formatSPD(spd, blk.GNU().Sparse())
+ for len(sp2) > 0 {
+ var spHdr block
+ sp2 = formatSPD(sp2, spHdr.Sparse())
+ spb = append(spb, spHdr[:]...)
+ }
+
+ // Update size fields in the header block.
+ realSize := hdr.Size
+ hdr.Size = 0 // Encoded size; does not account for encoded sparse map
+ for _, s := range spd {
+ hdr.Size += s.Length
+ }
+ copy(blk.V7().Size(), zeroBlock[:]) // Reset field
+ f.formatNumeric(blk.V7().Size(), hdr.Size)
+ f.formatNumeric(blk.GNU().RealSize(), realSize)
}
-
- tw.usedBinary = true
- f.formatNumeric(b, x)
+ */
+ blk.SetFormat(FormatGNU)
+ if err := tw.writeRawHeader(blk, hdr.Size, hdr.Typeflag); err != nil {
+ return err
}
- // keep a reference to the filename to allow to overwrite it later if we detect that we can use ustar longnames instead of pax
- pathHeaderBytes := s.next(fileNameSize)
-
- formatString(pathHeaderBytes, hdr.Name, paxPath)
-
- // Handle out of range ModTime carefully.
- var modTime int64
- if !hdr.ModTime.Before(minTime) && !hdr.ModTime.After(maxTime) {
- modTime = hdr.ModTime.Unix()
+ // Write the extended sparse map and setup the sparse writer if necessary.
+ if len(spd) > 0 {
+ // Use tw.w since the sparse map is not accounted for in hdr.Size.
+ if _, err := tw.w.Write(spb); err != nil {
+ return err
+ }
+ tw.curr = &sparseFileWriter{tw.curr, spd, 0}
}
+ return nil
+}
- f.formatOctal(s.next(8), hdr.Mode) // 100:108
- formatNumeric(s.next(8), int64(hdr.Uid), paxUid) // 108:116
- formatNumeric(s.next(8), int64(hdr.Gid), paxGid) // 116:124
- formatNumeric(s.next(12), hdr.Size, paxSize) // 124:136
- formatNumeric(s.next(12), modTime, paxNone) // 136:148 --- consider using pax for finer granularity
- s.next(8) // chksum (148:156)
- s.next(1)[0] = hdr.Typeflag // 156:157
-
- formatString(s.next(100), hdr.Linkname, paxLinkpath)
-
- copy(s.next(8), []byte("ustar\x0000")) // 257:265
- formatString(s.next(32), hdr.Uname, paxUname) // 265:297
- formatString(s.next(32), hdr.Gname, paxGname) // 297:329
- formatNumeric(s.next(8), hdr.Devmajor, paxNone) // 329:337
- formatNumeric(s.next(8), hdr.Devminor, paxNone) // 337:345
-
- // keep a reference to the prefix to allow to overwrite it later if we detect that we can use ustar longnames instead of pax
- prefixHeaderBytes := s.next(155)
- formatString(prefixHeaderBytes, "", paxNone) // 345:500 prefix
+type (
+ stringFormatter func([]byte, string)
+ numberFormatter func([]byte, int64)
+)
- // Use the GNU magic instead of POSIX magic if we used any GNU extensions.
- if tw.usedBinary {
- copy(header[257:265], []byte("ustar \x00"))
- }
+// templateV7Plus fills out the V7 fields of a block using values from hdr.
+// It also fills out fields (uname, gname, devmajor, devminor) that are
+// shared in the USTAR, PAX, and GNU formats using the provided formatters.
+//
+// The block returned is only valid until the next call to
+// templateV7Plus or writeRawFile.
+func (tw *Writer) templateV7Plus(hdr *Header, fmtStr stringFormatter, fmtNum numberFormatter) *block {
+ tw.blk.Reset()
+
+ modTime := hdr.ModTime
+ if modTime.IsZero() {
+ modTime = time.Unix(0, 0)
+ }
+
+ v7 := tw.blk.V7()
+ v7.TypeFlag()[0] = hdr.Typeflag
+ fmtStr(v7.Name(), hdr.Name)
+ fmtStr(v7.LinkName(), hdr.Linkname)
+ fmtNum(v7.Mode(), hdr.Mode)
+ fmtNum(v7.UID(), int64(hdr.Uid))
+ fmtNum(v7.GID(), int64(hdr.Gid))
+ fmtNum(v7.Size(), hdr.Size)
+ fmtNum(v7.ModTime(), modTime.Unix())
+
+ ustar := tw.blk.USTAR()
+ fmtStr(ustar.UserName(), hdr.Uname)
+ fmtStr(ustar.GroupName(), hdr.Gname)
+ fmtNum(ustar.DevMajor(), hdr.Devmajor)
+ fmtNum(ustar.DevMinor(), hdr.Devminor)
+
+ return &tw.blk
+}
- _, paxPathUsed := paxHeaders[paxPath]
- // try to use a ustar header when only the name is too long
- if !tw.preferPax && len(paxHeaders) == 1 && paxPathUsed {
- prefix, suffix, ok := splitUSTARPath(hdr.Name)
- if ok {
- // Since we can encode in USTAR format, disable PAX header.
- delete(paxHeaders, paxPath)
+// writeRawFile writes a minimal file with the given name and flag type.
+// It uses format to encode the header format and will write data as the body.
+// It uses default values for all of the other fields (as BSD and GNU tar does).
+func (tw *Writer) writeRawFile(name, data string, flag byte, format Format) error {
+ tw.blk.Reset()
- // Update the path fields
- formatString(pathHeaderBytes, suffix, paxNone)
- formatString(prefixHeaderBytes, prefix, paxNone)
- }
+ // Best effort for the filename.
+ name = toASCII(name)
+ if len(name) > nameSize {
+ name = name[:nameSize]
}
+ name = strings.TrimRight(name, "/")
- // The chksum field is terminated by a NUL and a space.
- // This is different from the other octal fields.
- chksum, _ := checksum(header)
- f.formatOctal(header[148:155], chksum) // Never fails
- header[155] = ' '
-
- // Check if there were any formatting errors.
+ var f formatter
+ v7 := tw.blk.V7()
+ v7.TypeFlag()[0] = flag
+ f.formatString(v7.Name(), name)
+ f.formatOctal(v7.Mode(), 0)
+ f.formatOctal(v7.UID(), 0)
+ f.formatOctal(v7.GID(), 0)
+ f.formatOctal(v7.Size(), int64(len(data))) // Must be < 8GiB
+ f.formatOctal(v7.ModTime(), 0)
+ tw.blk.SetFormat(format)
if f.err != nil {
- tw.err = f.err
- return tw.err
+ return f.err // Only occurs if size condition is violated
}
- if allowPax {
- for k, v := range hdr.Xattrs {
- paxHeaders[paxXattr+k] = v
- }
+ // Write the header and data.
+ if err := tw.writeRawHeader(&tw.blk, int64(len(data)), flag); err != nil {
+ return err
}
+ _, err := io.WriteString(tw, data)
+ return err
+}
- if len(paxHeaders) > 0 {
- if !allowPax {
- return errInvalidHeader
- }
- if err := tw.writePAXHeader(hdr, paxHeaders); err != nil {
- return err
- }
+// writeRawHeader writes the value of blk, regardless of its value.
+// It sets up the Writer such that it can accept a file of the given size.
+// If the flag is a special header-only flag, then the size is treated as zero.
+func (tw *Writer) writeRawHeader(blk *block, size int64, flag byte) error {
+ if err := tw.Flush(); err != nil {
+ return err
}
- tw.nb = int64(hdr.Size)
- tw.pad = (blockSize - (tw.nb % blockSize)) % blockSize
-
- _, tw.err = tw.w.Write(header)
- return tw.err
+ if _, err := tw.w.Write(blk[:]); err != nil {
+ return err
+ }
+ if isHeaderOnlyType(flag) {
+ size = 0
+ }
+ tw.curr = &regFileWriter{tw.w, size}
+ tw.pad = blockPadding(size)
+ return nil
}
// splitUSTARPath splits a path according to USTAR prefix and suffix rules.
// If the path is not splittable, then it will return ("", "", false).
func splitUSTARPath(name string) (prefix, suffix string, ok bool) {
length := len(name)
- if length <= fileNameSize || !isASCII(name) {
+ if length <= nameSize || !isASCII(name) {
return "", "", false
- } else if length > fileNamePrefixSize+1 {
- length = fileNamePrefixSize + 1
+ } else if length > prefixSize+1 {
+ length = prefixSize + 1
} else if name[length-1] == '/' {
length--
}
@@ -300,117 +415,239 @@ func splitUSTARPath(name string) (prefix, suffix string, ok bool) {
i := strings.LastIndex(name[:length], "/")
nlen := len(name) - i - 1 // nlen is length of suffix
plen := i // plen is length of prefix
- if i <= 0 || nlen > fileNameSize || nlen == 0 || plen > fileNamePrefixSize {
+ if i <= 0 || nlen > nameSize || nlen == 0 || plen > prefixSize {
return "", "", false
}
return name[:i], name[i+1:], true
}
-// writePaxHeader writes an extended pax header to the
-// archive.
-func (tw *Writer) writePAXHeader(hdr *Header, paxHeaders map[string]string) error {
- // Prepare extended header
- ext := new(Header)
- ext.Typeflag = TypeXHeader
- // Setting ModTime is required for reader parsing to
- // succeed, and seems harmless enough.
- ext.ModTime = hdr.ModTime
- // The spec asks that we namespace our pseudo files
- // with the current pid. However, this results in differing outputs
- // for identical inputs. As such, the constant 0 is now used instead.
- // golang.org/issue/12358
- dir, file := path.Split(hdr.Name)
- fullName := path.Join(dir, "PaxHeaders.0", file)
-
- ascii := toASCII(fullName)
- if len(ascii) > 100 {
- ascii = ascii[:100]
- }
- ext.Name = ascii
- // Construct the body
- var buf bytes.Buffer
-
- // Keys are sorted before writing to body to allow deterministic output.
- var keys []string
- for k := range paxHeaders {
- keys = append(keys, k)
- }
- sort.Strings(keys)
-
- for _, k := range keys {
- fmt.Fprint(&buf, formatPAXRecord(k, paxHeaders[k]))
- }
-
- ext.Size = int64(len(buf.Bytes()))
- if err := tw.writeHeader(ext, false); err != nil {
- return err
+// Write writes to the current file in the tar archive.
+// Write returns the error ErrWriteTooLong if more than
+// Header.Size bytes are written after WriteHeader.
+//
+// Calling Write on special types like TypeLink, TypeSymlink, TypeChar,
+// TypeBlock, TypeDir, and TypeFifo returns (0, ErrWriteTooLong) regardless
+// of what the Header.Size claims.
+func (tw *Writer) Write(b []byte) (int, error) {
+ if tw.err != nil {
+ return 0, tw.err
}
- if _, err := tw.Write(buf.Bytes()); err != nil {
- return err
+ n, err := tw.curr.Write(b)
+ if err != nil && err != ErrWriteTooLong {
+ tw.err = err
}
- if err := tw.Flush(); err != nil {
- return err
+ return n, err
+}
+
+// readFrom populates the content of the current file by reading from r.
+// The bytes read must match the number of remaining bytes in the current file.
+//
+// If the current file is sparse and r is an io.ReadSeeker,
+// then readFrom uses Seek to skip past holes defined in Header.SparseHoles,
+// assuming that skipped regions are all NULs.
+// This always reads the last byte to ensure r is the right size.
+//
+// TODO(dsnet): Re-export this when adding sparse file support.
+// See https://golang.org/issue/22735
+func (tw *Writer) readFrom(r io.Reader) (int64, error) {
+ if tw.err != nil {
+ return 0, tw.err
}
- return nil
+ n, err := tw.curr.ReadFrom(r)
+ if err != nil && err != ErrWriteTooLong {
+ tw.err = err
+ }
+ return n, err
}
-// formatPAXRecord formats a single PAX record, prefixing it with the
-// appropriate length.
-func formatPAXRecord(k, v string) string {
- const padding = 3 // Extra padding for ' ', '=', and '\n'
- size := len(k) + len(v) + padding
- size += len(strconv.Itoa(size))
- record := fmt.Sprintf("%d %s=%s\n", size, k, v)
+// Close closes the tar archive by flushing the padding, and writing the footer.
+// If the current file (from a prior call to WriteHeader) is not fully written,
+// then this returns an error.
+func (tw *Writer) Close() error {
+ if tw.err == ErrWriteAfterClose {
+ return nil
+ }
+ if tw.err != nil {
+ return tw.err
+ }
- // Final adjustment if adding size field increased the record size.
- if len(record) != size {
- size = len(record)
- record = fmt.Sprintf("%d %s=%s\n", size, k, v)
+ // Trailer: two zero blocks.
+ err := tw.Flush()
+ for i := 0; i < 2 && err == nil; i++ {
+ _, err = tw.w.Write(zeroBlock[:])
}
- return record
+
+ // Ensure all future actions are invalid.
+ tw.err = ErrWriteAfterClose
+ return err // Report IO errors
}
-// Write writes to the current entry in the tar archive.
-// Write returns the error ErrWriteTooLong if more than
-// hdr.Size bytes are written after WriteHeader.
-func (tw *Writer) Write(b []byte) (n int, err error) {
- if tw.closed {
- err = ErrWriteAfterClose
- return
- }
- overwrite := false
- if int64(len(b)) > tw.nb {
- b = b[0:tw.nb]
- overwrite = true
- }
- n, err = tw.w.Write(b)
- tw.nb -= int64(n)
- if err == nil && overwrite {
- err = ErrWriteTooLong
- return
- }
- tw.err = err
- return
+// regFileWriter is a fileWriter for writing data to a regular file entry.
+type regFileWriter struct {
+ w io.Writer // Underlying Writer
+ nb int64 // Number of remaining bytes to write
}
-// Close closes the tar archive, flushing any unwritten
-// data to the underlying writer.
-func (tw *Writer) Close() error {
- if tw.err != nil || tw.closed {
- return tw.err
+func (fw *regFileWriter) Write(b []byte) (n int, err error) {
+ overwrite := int64(len(b)) > fw.nb
+ if overwrite {
+ b = b[:fw.nb]
}
- tw.Flush()
- tw.closed = true
- if tw.err != nil {
- return tw.err
+ if len(b) > 0 {
+ n, err = fw.w.Write(b)
+ fw.nb -= int64(n)
+ }
+ switch {
+ case err != nil:
+ return n, err
+ case overwrite:
+ return n, ErrWriteTooLong
+ default:
+ return n, nil
}
+}
+
+func (fw *regFileWriter) ReadFrom(r io.Reader) (int64, error) {
+ return io.Copy(struct{ io.Writer }{fw}, r)
+}
- // trailer: two zero blocks
- for i := 0; i < 2; i++ {
- _, tw.err = tw.w.Write(zeroBlock)
- if tw.err != nil {
- break
+func (fw regFileWriter) LogicalRemaining() int64 {
+ return fw.nb
+}
+func (fw regFileWriter) PhysicalRemaining() int64 {
+ return fw.nb
+}
+
+// sparseFileWriter is a fileWriter for writing data to a sparse file entry.
+type sparseFileWriter struct {
+ fw fileWriter // Underlying fileWriter
+ sp sparseDatas // Normalized list of data fragments
+ pos int64 // Current position in sparse file
+}
+
+func (sw *sparseFileWriter) Write(b []byte) (n int, err error) {
+ overwrite := int64(len(b)) > sw.LogicalRemaining()
+ if overwrite {
+ b = b[:sw.LogicalRemaining()]
+ }
+
+ b0 := b
+ endPos := sw.pos + int64(len(b))
+ for endPos > sw.pos && err == nil {
+ var nf int // Bytes written in fragment
+ dataStart, dataEnd := sw.sp[0].Offset, sw.sp[0].endOffset()
+ if sw.pos < dataStart { // In a hole fragment
+ bf := b[:min(int64(len(b)), dataStart-sw.pos)]
+ nf, err = zeroWriter{}.Write(bf)
+ } else { // In a data fragment
+ bf := b[:min(int64(len(b)), dataEnd-sw.pos)]
+ nf, err = sw.fw.Write(bf)
+ }
+ b = b[nf:]
+ sw.pos += int64(nf)
+ if sw.pos >= dataEnd && len(sw.sp) > 1 {
+ sw.sp = sw.sp[1:] // Ensure last fragment always remains
}
}
- return tw.err
+
+ n = len(b0) - len(b)
+ switch {
+ case err == ErrWriteTooLong:
+ return n, errMissData // Not possible; implies bug in validation logic
+ case err != nil:
+ return n, err
+ case sw.LogicalRemaining() == 0 && sw.PhysicalRemaining() > 0:
+ return n, errUnrefData // Not possible; implies bug in validation logic
+ case overwrite:
+ return n, ErrWriteTooLong
+ default:
+ return n, nil
+ }
+}
+
+func (sw *sparseFileWriter) ReadFrom(r io.Reader) (n int64, err error) {
+ rs, ok := r.(io.ReadSeeker)
+ if ok {
+ if _, err := rs.Seek(0, io.SeekCurrent); err != nil {
+ ok = false // Not all io.Seeker can really seek
+ }
+ }
+ if !ok {
+ return io.Copy(struct{ io.Writer }{sw}, r)
+ }
+
+ var readLastByte bool
+ pos0 := sw.pos
+ for sw.LogicalRemaining() > 0 && !readLastByte && err == nil {
+ var nf int64 // Size of fragment
+ dataStart, dataEnd := sw.sp[0].Offset, sw.sp[0].endOffset()
+ if sw.pos < dataStart { // In a hole fragment
+ nf = dataStart - sw.pos
+ if sw.PhysicalRemaining() == 0 {
+ readLastByte = true
+ nf--
+ }
+ _, err = rs.Seek(nf, io.SeekCurrent)
+ } else { // In a data fragment
+ nf = dataEnd - sw.pos
+ nf, err = io.CopyN(sw.fw, rs, nf)
+ }
+ sw.pos += nf
+ if sw.pos >= dataEnd && len(sw.sp) > 1 {
+ sw.sp = sw.sp[1:] // Ensure last fragment always remains
+ }
+ }
+
+ // If the last fragment is a hole, then seek to 1-byte before EOF, and
+ // read a single byte to ensure the file is the right size.
+ if readLastByte && err == nil {
+ _, err = mustReadFull(rs, []byte{0})
+ sw.pos++
+ }
+
+ n = sw.pos - pos0
+ switch {
+ case err == io.EOF:
+ return n, io.ErrUnexpectedEOF
+ case err == ErrWriteTooLong:
+ return n, errMissData // Not possible; implies bug in validation logic
+ case err != nil:
+ return n, err
+ case sw.LogicalRemaining() == 0 && sw.PhysicalRemaining() > 0:
+ return n, errUnrefData // Not possible; implies bug in validation logic
+ default:
+ return n, ensureEOF(rs)
+ }
+}
+
+func (sw sparseFileWriter) LogicalRemaining() int64 {
+ return sw.sp[len(sw.sp)-1].endOffset() - sw.pos
+}
+func (sw sparseFileWriter) PhysicalRemaining() int64 {
+ return sw.fw.PhysicalRemaining()
+}
+
+// zeroWriter may only be written with NULs, otherwise it returns errWriteHole.
+type zeroWriter struct{}
+
+func (zeroWriter) Write(b []byte) (int, error) {
+ for i, c := range b {
+ if c != 0 {
+ return i, errWriteHole
+ }
+ }
+ return len(b), nil
+}
+
+// ensureEOF checks whether r is at EOF, reporting ErrWriteTooLong if not so.
+func ensureEOF(r io.Reader) error {
+ n, err := tryReadFull(r, []byte{0})
+ switch {
+ case n > 0:
+ return ErrWriteTooLong
+ case err == io.EOF:
+ return nil
+ default:
+ return err
+ }
}
diff --git a/vendor/github.com/vishvananda/netlink/README.md b/vendor/github.com/vishvananda/netlink/README.md
index 0b61be217..a88e2f418 100644
--- a/vendor/github.com/vishvananda/netlink/README.md
+++ b/vendor/github.com/vishvananda/netlink/README.md
@@ -89,3 +89,4 @@ There are also a few pieces of low level netlink functionality that still
need to be implemented. Routing rules are not in place and some of the
more advanced link types. Hopefully there is decent structure and testing
in place to make these fairly straightforward to add.
+
diff --git a/vendor/github.com/vishvananda/netlink/addr_linux.go b/vendor/github.com/vishvananda/netlink/addr_linux.go
index f33242a7c..d59c3281e 100644
--- a/vendor/github.com/vishvananda/netlink/addr_linux.go
+++ b/vendor/github.com/vishvananda/netlink/addr_linux.go
@@ -2,13 +2,13 @@ package netlink
import (
"fmt"
- "log"
"net"
"strings"
"syscall"
"github.com/vishvananda/netlink/nl"
"github.com/vishvananda/netns"
+ "golang.org/x/sys/unix"
)
// IFA_FLAGS is a u32 attribute.
@@ -23,7 +23,7 @@ func AddrAdd(link Link, addr *Addr) error {
// AddrAdd will add an IP address to a link device.
// Equivalent to: `ip addr add $addr dev $link`
func (h *Handle) AddrAdd(link Link, addr *Addr) error {
- req := h.newNetlinkRequest(syscall.RTM_NEWADDR, syscall.NLM_F_CREATE|syscall.NLM_F_EXCL|syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_NEWADDR, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
return h.addrHandle(link, addr, req)
}
@@ -36,7 +36,7 @@ func AddrReplace(link Link, addr *Addr) error {
// AddrReplace will replace (or, if not present, add) an IP address on a link device.
// Equivalent to: `ip addr replace $addr dev $link`
func (h *Handle) AddrReplace(link Link, addr *Addr) error {
- req := h.newNetlinkRequest(syscall.RTM_NEWADDR, syscall.NLM_F_CREATE|syscall.NLM_F_REPLACE|syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_NEWADDR, unix.NLM_F_CREATE|unix.NLM_F_REPLACE|unix.NLM_F_ACK)
return h.addrHandle(link, addr, req)
}
@@ -49,7 +49,7 @@ func AddrDel(link Link, addr *Addr) error {
// AddrDel will delete an IP address from a link device.
// Equivalent to: `ip addr del $addr dev $link`
func (h *Handle) AddrDel(link Link, addr *Addr) error {
- req := h.newNetlinkRequest(syscall.RTM_DELADDR, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_DELADDR, unix.NLM_F_ACK)
return h.addrHandle(link, addr, req)
}
@@ -65,7 +65,7 @@ func (h *Handle) addrHandle(link Link, addr *Addr, req *nl.NetlinkRequest) error
msg := nl.NewIfAddrmsg(family)
msg.Index = uint32(base.Index)
msg.Scope = uint8(addr.Scope)
- prefixlen, _ := addr.Mask.Size()
+ prefixlen, masklen := addr.Mask.Size()
msg.Prefixlen = uint8(prefixlen)
req.AddData(msg)
@@ -76,7 +76,7 @@ func (h *Handle) addrHandle(link Link, addr *Addr, req *nl.NetlinkRequest) error
localAddrData = addr.IP.To16()
}
- localData := nl.NewRtAttr(syscall.IFA_LOCAL, localAddrData)
+ localData := nl.NewRtAttr(unix.IFA_LOCAL, localAddrData)
req.AddData(localData)
var peerAddrData []byte
if addr.Peer != nil {
@@ -89,7 +89,7 @@ func (h *Handle) addrHandle(link Link, addr *Addr, req *nl.NetlinkRequest) error
peerAddrData = localAddrData
}
- addressData := nl.NewRtAttr(syscall.IFA_ADDRESS, peerAddrData)
+ addressData := nl.NewRtAttr(unix.IFA_ADDRESS, peerAddrData)
req.AddData(addressData)
if addr.Flags != 0 {
@@ -103,16 +103,34 @@ func (h *Handle) addrHandle(link Link, addr *Addr, req *nl.NetlinkRequest) error
}
}
- if addr.Broadcast != nil {
- req.AddData(nl.NewRtAttr(syscall.IFA_BROADCAST, addr.Broadcast))
+ if family == FAMILY_V4 {
+ if addr.Broadcast == nil {
+ calcBroadcast := make(net.IP, masklen/8)
+ for i := range localAddrData {
+ calcBroadcast[i] = localAddrData[i] | ^addr.Mask[i]
+ }
+ addr.Broadcast = calcBroadcast
+ }
+ req.AddData(nl.NewRtAttr(unix.IFA_BROADCAST, addr.Broadcast))
+
+ if addr.Label != "" {
+ labelData := nl.NewRtAttr(unix.IFA_LABEL, nl.ZeroTerminated(addr.Label))
+ req.AddData(labelData)
+ }
}
- if addr.Label != "" {
- labelData := nl.NewRtAttr(syscall.IFA_LABEL, nl.ZeroTerminated(addr.Label))
- req.AddData(labelData)
+ // 0 is the default value for these attributes. However, 0 means "expired", while the least-surprising default
+ // value should be "forever". To compensate for that, only add the attributes if at least one of the values is
+ // non-zero, which means the caller has explicitly set them
+ if addr.ValidLft > 0 || addr.PreferedLft > 0 {
+ cachedata := nl.IfaCacheInfo{
+ IfaValid: uint32(addr.ValidLft),
+ IfaPrefered: uint32(addr.PreferedLft),
+ }
+ req.AddData(nl.NewRtAttr(unix.IFA_CACHEINFO, cachedata.Serialize()))
}
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -127,11 +145,11 @@ func AddrList(link Link, family int) ([]Addr, error) {
// Equivalent to: `ip addr show`.
// The list can be filtered by link and ip family.
func (h *Handle) AddrList(link Link, family int) ([]Addr, error) {
- req := h.newNetlinkRequest(syscall.RTM_GETADDR, syscall.NLM_F_DUMP)
+ req := h.newNetlinkRequest(unix.RTM_GETADDR, unix.NLM_F_DUMP)
msg := nl.NewIfInfomsg(family)
req.AddData(msg)
- msgs, err := req.Execute(syscall.NETLINK_ROUTE, syscall.RTM_NEWADDR)
+ msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWADDR)
if err != nil {
return nil, err
}
@@ -183,21 +201,21 @@ func parseAddr(m []byte) (addr Addr, family, index int, err error) {
var local, dst *net.IPNet
for _, attr := range attrs {
switch attr.Attr.Type {
- case syscall.IFA_ADDRESS:
+ case unix.IFA_ADDRESS:
dst = &net.IPNet{
IP: attr.Value,
Mask: net.CIDRMask(int(msg.Prefixlen), 8*len(attr.Value)),
}
addr.Peer = dst
- case syscall.IFA_LOCAL:
+ case unix.IFA_LOCAL:
local = &net.IPNet{
IP: attr.Value,
Mask: net.CIDRMask(int(msg.Prefixlen), 8*len(attr.Value)),
}
addr.IPNet = local
- case syscall.IFA_BROADCAST:
+ case unix.IFA_BROADCAST:
addr.Broadcast = attr.Value
- case syscall.IFA_LABEL:
+ case unix.IFA_LABEL:
addr.Label = string(attr.Value[:len(attr.Value)-1])
case IFA_FLAGS:
addr.Flags = int(native.Uint32(attr.Value[0:4]))
@@ -232,17 +250,36 @@ type AddrUpdate struct {
// AddrSubscribe takes a chan down which notifications will be sent
// when addresses change. Close the 'done' chan to stop subscription.
func AddrSubscribe(ch chan<- AddrUpdate, done <-chan struct{}) error {
- return addrSubscribe(netns.None(), netns.None(), ch, done)
+ return addrSubscribeAt(netns.None(), netns.None(), ch, done, nil, false)
}
// AddrSubscribeAt works like AddrSubscribe plus it allows the caller
// to choose the network namespace in which to subscribe (ns).
func AddrSubscribeAt(ns netns.NsHandle, ch chan<- AddrUpdate, done <-chan struct{}) error {
- return addrSubscribe(ns, netns.None(), ch, done)
+ return addrSubscribeAt(ns, netns.None(), ch, done, nil, false)
+}
+
+// AddrSubscribeOptions contains a set of options to use with
+// AddrSubscribeWithOptions.
+type AddrSubscribeOptions struct {
+ Namespace *netns.NsHandle
+ ErrorCallback func(error)
+ ListExisting bool
}
-func addrSubscribe(newNs, curNs netns.NsHandle, ch chan<- AddrUpdate, done <-chan struct{}) error {
- s, err := nl.SubscribeAt(newNs, curNs, syscall.NETLINK_ROUTE, syscall.RTNLGRP_IPV4_IFADDR, syscall.RTNLGRP_IPV6_IFADDR)
+// AddrSubscribeWithOptions work like AddrSubscribe but enable to
+// provide additional options to modify the behavior. Currently, the
+// namespace can be provided as well as an error callback.
+func AddrSubscribeWithOptions(ch chan<- AddrUpdate, done <-chan struct{}, options AddrSubscribeOptions) error {
+ if options.Namespace == nil {
+ none := netns.None()
+ options.Namespace = &none
+ }
+ return addrSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting)
+}
+
+func addrSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- AddrUpdate, done <-chan struct{}, cberr func(error), listExisting bool) error {
+ s, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_IPV4_IFADDR, unix.RTNLGRP_IPV6_IFADDR)
if err != nil {
return err
}
@@ -252,30 +289,59 @@ func addrSubscribe(newNs, curNs netns.NsHandle, ch chan<- AddrUpdate, done <-cha
s.Close()
}()
}
+ if listExisting {
+ req := pkgHandle.newNetlinkRequest(unix.RTM_GETADDR,
+ unix.NLM_F_DUMP)
+ infmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ req.AddData(infmsg)
+ if err := s.Send(req); err != nil {
+ return err
+ }
+ }
go func() {
defer close(ch)
for {
msgs, err := s.Receive()
if err != nil {
- log.Printf("netlink.AddrSubscribe: Receive() error: %v", err)
+ if cberr != nil {
+ cberr(err)
+ }
return
}
for _, m := range msgs {
- msgType := m.Header.Type
- if msgType != syscall.RTM_NEWADDR && msgType != syscall.RTM_DELADDR {
- log.Printf("netlink.AddrSubscribe: bad message type: %d", msgType)
+ if m.Header.Type == unix.NLMSG_DONE {
continue
}
+ if m.Header.Type == unix.NLMSG_ERROR {
+ native := nl.NativeEndian()
+ error := int32(native.Uint32(m.Data[0:4]))
+ if error == 0 {
+ continue
+ }
+ if cberr != nil {
+ cberr(syscall.Errno(-error))
+ }
+ return
+ }
+ msgType := m.Header.Type
+ if msgType != unix.RTM_NEWADDR && msgType != unix.RTM_DELADDR {
+ if cberr != nil {
+ cberr(fmt.Errorf("bad message type: %d", msgType))
+ }
+ return
+ }
addr, _, ifindex, err := parseAddr(m.Data)
if err != nil {
- log.Printf("netlink.AddrSubscribe: could not parse address: %v", err)
- continue
+ if cberr != nil {
+ cberr(fmt.Errorf("could not parse address: %v", err))
+ }
+ return
}
ch <- AddrUpdate{LinkAddress: *addr.IPNet,
LinkIndex: ifindex,
- NewAddr: msgType == syscall.RTM_NEWADDR,
+ NewAddr: msgType == unix.RTM_NEWADDR,
Flags: addr.Flags,
Scope: addr.Scope,
PreferedLft: addr.PreferedLft,
diff --git a/vendor/github.com/vishvananda/netlink/bpf_linux.go b/vendor/github.com/vishvananda/netlink/bpf_linux.go
index 533743987..6631626bf 100644
--- a/vendor/github.com/vishvananda/netlink/bpf_linux.go
+++ b/vendor/github.com/vishvananda/netlink/bpf_linux.go
@@ -1,49 +1,12 @@
package netlink
-/*
-#include <asm/types.h>
-#include <asm/unistd.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
+import (
+ "unsafe"
-static int load_simple_bpf(int prog_type, int ret) {
-#ifdef __NR_bpf
- // { return ret; }
- __u64 __attribute__((aligned(8))) insns[] = {
- 0x00000000000000b7ull | ((__u64)ret<<32),
- 0x0000000000000095ull,
- };
- __u8 __attribute__((aligned(8))) license[] = "ASL2";
- // Copied from a header file since libc is notoriously slow to update.
- // The call will succeed or fail and that will be our indication on
- // whether or not it is supported.
- struct {
- __u32 prog_type;
- __u32 insn_cnt;
- __u64 insns;
- __u64 license;
- __u32 log_level;
- __u32 log_size;
- __u64 log_buf;
- __u32 kern_version;
- } __attribute__((aligned(8))) attr = {
- .prog_type = prog_type,
- .insn_cnt = 2,
- .insns = (uintptr_t)&insns,
- .license = (uintptr_t)&license,
- };
- return syscall(__NR_bpf, 5, &attr, sizeof(attr));
-#else
- errno = EINVAL;
- return -1;
-#endif
-}
-*/
-import "C"
+ "golang.org/x/sys/unix"
+)
-type BpfProgType C.int
+type BpfProgType uint32
const (
BPF_PROG_TYPE_UNSPEC BpfProgType = iota
@@ -55,8 +18,36 @@ const (
BPF_PROG_TYPE_XDP
)
-// loadSimpleBpf loads a trivial bpf program for testing purposes
-func loadSimpleBpf(progType BpfProgType, ret int) (int, error) {
- fd, err := C.load_simple_bpf(C.int(progType), C.int(ret))
- return int(fd), err
+type BPFAttr struct {
+ ProgType uint32
+ InsnCnt uint32
+ Insns uintptr
+ License uintptr
+ LogLevel uint32
+ LogSize uint32
+ LogBuf uintptr
+ KernVersion uint32
+}
+
+// loadSimpleBpf loads a trivial bpf program for testing purposes.
+func loadSimpleBpf(progType BpfProgType, ret uint32) (int, error) {
+ insns := []uint64{
+ 0x00000000000000b7 | (uint64(ret) << 32),
+ 0x0000000000000095,
+ }
+ license := []byte{'A', 'S', 'L', '2', '\x00'}
+ attr := BPFAttr{
+ ProgType: uint32(progType),
+ InsnCnt: uint32(len(insns)),
+ Insns: uintptr(unsafe.Pointer(&insns[0])),
+ License: uintptr(unsafe.Pointer(&license[0])),
+ }
+ fd, _, errno := unix.Syscall(unix.SYS_BPF,
+ 5, /* bpf cmd */
+ uintptr(unsafe.Pointer(&attr)),
+ unsafe.Sizeof(attr))
+ if errno != 0 {
+ return 0, errno
+ }
+ return int(fd), nil
}
diff --git a/vendor/github.com/vishvananda/netlink/bridge_linux.go b/vendor/github.com/vishvananda/netlink/bridge_linux.go
index a65d6a131..350ab0db4 100644
--- a/vendor/github.com/vishvananda/netlink/bridge_linux.go
+++ b/vendor/github.com/vishvananda/netlink/bridge_linux.go
@@ -2,9 +2,9 @@ package netlink
import (
"fmt"
- "syscall"
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
)
// BridgeVlanList gets a map of device id to bridge vlan infos.
@@ -16,12 +16,12 @@ func BridgeVlanList() (map[int32][]*nl.BridgeVlanInfo, error) {
// BridgeVlanList gets a map of device id to bridge vlan infos.
// Equivalent to: `bridge vlan show`
func (h *Handle) BridgeVlanList() (map[int32][]*nl.BridgeVlanInfo, error) {
- req := h.newNetlinkRequest(syscall.RTM_GETLINK, syscall.NLM_F_DUMP)
- msg := nl.NewIfInfomsg(syscall.AF_BRIDGE)
+ req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)
+ msg := nl.NewIfInfomsg(unix.AF_BRIDGE)
req.AddData(msg)
- req.AddData(nl.NewRtAttr(nl.IFLA_EXT_MASK, nl.Uint32Attr(uint32(nl.RTEXT_FILTER_BRVLAN))))
+ req.AddData(nl.NewRtAttr(unix.IFLA_EXT_MASK, nl.Uint32Attr(uint32(nl.RTEXT_FILTER_BRVLAN))))
- msgs, err := req.Execute(syscall.NETLINK_ROUTE, syscall.RTM_NEWLINK)
+ msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWLINK)
if err != nil {
return nil, err
}
@@ -35,7 +35,7 @@ func (h *Handle) BridgeVlanList() (map[int32][]*nl.BridgeVlanInfo, error) {
}
for _, attr := range attrs {
switch attr.Attr.Type {
- case nl.IFLA_AF_SPEC:
+ case unix.IFLA_AF_SPEC:
//nested attr
nestAttrs, err := nl.ParseRouteAttr(attr.Value)
if err != nil {
@@ -63,7 +63,7 @@ func BridgeVlanAdd(link Link, vid uint16, pvid, untagged, self, master bool) err
// BridgeVlanAdd adds a new vlan filter entry
// Equivalent to: `bridge vlan add dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`
func (h *Handle) BridgeVlanAdd(link Link, vid uint16, pvid, untagged, self, master bool) error {
- return h.bridgeVlanModify(syscall.RTM_SETLINK, link, vid, pvid, untagged, self, master)
+ return h.bridgeVlanModify(unix.RTM_SETLINK, link, vid, pvid, untagged, self, master)
}
// BridgeVlanDel adds a new vlan filter entry
@@ -75,19 +75,19 @@ func BridgeVlanDel(link Link, vid uint16, pvid, untagged, self, master bool) err
// BridgeVlanDel adds a new vlan filter entry
// Equivalent to: `bridge vlan del dev DEV vid VID [ pvid ] [ untagged ] [ self ] [ master ]`
func (h *Handle) BridgeVlanDel(link Link, vid uint16, pvid, untagged, self, master bool) error {
- return h.bridgeVlanModify(syscall.RTM_DELLINK, link, vid, pvid, untagged, self, master)
+ return h.bridgeVlanModify(unix.RTM_DELLINK, link, vid, pvid, untagged, self, master)
}
func (h *Handle) bridgeVlanModify(cmd int, link Link, vid uint16, pvid, untagged, self, master bool) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(cmd, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(cmd, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_BRIDGE)
+ msg := nl.NewIfInfomsg(unix.AF_BRIDGE)
msg.Index = int32(base.Index)
req.AddData(msg)
- br := nl.NewRtAttr(nl.IFLA_AF_SPEC, nil)
+ br := nl.NewRtAttr(unix.IFLA_AF_SPEC, nil)
var flags uint16
if self {
flags |= nl.BRIDGE_FLAGS_SELF
@@ -107,7 +107,7 @@ func (h *Handle) bridgeVlanModify(cmd int, link Link, vid uint16, pvid, untagged
}
nl.NewRtAttrChild(br, nl.IFLA_BRIDGE_VLAN_INFO, vlanInfo.Serialize())
req.AddData(br)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
if err != nil {
return err
}
diff --git a/vendor/github.com/vishvananda/netlink/class_linux.go b/vendor/github.com/vishvananda/netlink/class_linux.go
index 91cd3883d..a4997740e 100644
--- a/vendor/github.com/vishvananda/netlink/class_linux.go
+++ b/vendor/github.com/vishvananda/netlink/class_linux.go
@@ -5,6 +5,7 @@ import (
"syscall"
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
)
// NOTE: function is in here because it uses other linux functions
@@ -50,7 +51,7 @@ func ClassDel(class Class) error {
// ClassDel will delete a class from the system.
// Equivalent to: `tc class del $class`
func (h *Handle) ClassDel(class Class) error {
- return h.classModify(syscall.RTM_DELTCLASS, 0, class)
+ return h.classModify(unix.RTM_DELTCLASS, 0, class)
}
// ClassChange will change a class in place
@@ -64,7 +65,7 @@ func ClassChange(class Class) error {
// Equivalent to: `tc class change $class`
// The parent and handle MUST NOT be changed.
func (h *Handle) ClassChange(class Class) error {
- return h.classModify(syscall.RTM_NEWTCLASS, 0, class)
+ return h.classModify(unix.RTM_NEWTCLASS, 0, class)
}
// ClassReplace will replace a class to the system.
@@ -82,7 +83,7 @@ func ClassReplace(class Class) error {
// If a class already exist with this parent/handle pair, the class is changed.
// If a class does not already exist with this parent/handle, a new class is created.
func (h *Handle) ClassReplace(class Class) error {
- return h.classModify(syscall.RTM_NEWTCLASS, syscall.NLM_F_CREATE, class)
+ return h.classModify(unix.RTM_NEWTCLASS, unix.NLM_F_CREATE, class)
}
// ClassAdd will add a class to the system.
@@ -95,14 +96,14 @@ func ClassAdd(class Class) error {
// Equivalent to: `tc class add $class`
func (h *Handle) ClassAdd(class Class) error {
return h.classModify(
- syscall.RTM_NEWTCLASS,
- syscall.NLM_F_CREATE|syscall.NLM_F_EXCL,
+ unix.RTM_NEWTCLASS,
+ unix.NLM_F_CREATE|unix.NLM_F_EXCL,
class,
)
}
func (h *Handle) classModify(cmd, flags int, class Class) error {
- req := h.newNetlinkRequest(cmd, flags|syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(cmd, flags|unix.NLM_F_ACK)
base := class.Attrs()
msg := &nl.TcMsg{
Family: nl.FAMILY_ALL,
@@ -112,12 +113,12 @@ func (h *Handle) classModify(cmd, flags int, class Class) error {
}
req.AddData(msg)
- if cmd != syscall.RTM_DELTCLASS {
+ if cmd != unix.RTM_DELTCLASS {
if err := classPayload(req, class); err != nil {
return err
}
}
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -141,12 +142,12 @@ func classPayload(req *nl.NetlinkRequest, class Class) error {
var rtab [256]uint32
var ctab [256]uint32
tcrate := nl.TcRateSpec{Rate: uint32(htb.Rate)}
- if CalcRtable(&tcrate, rtab, cellLog, uint32(mtu), linklayer) < 0 {
+ if CalcRtable(&tcrate, rtab[:], cellLog, uint32(mtu), linklayer) < 0 {
return errors.New("HTB: failed to calculate rate table")
}
opt.Rate = tcrate
tcceil := nl.TcRateSpec{Rate: uint32(htb.Ceil)}
- if CalcRtable(&tcceil, ctab, ccellLog, uint32(mtu), linklayer) < 0 {
+ if CalcRtable(&tcceil, ctab[:], ccellLog, uint32(mtu), linklayer) < 0 {
return errors.New("HTB: failed to calculate ceil rate table")
}
opt.Ceil = tcceil
@@ -169,7 +170,7 @@ func ClassList(link Link, parent uint32) ([]Class, error) {
// Equivalent to: `tc class show`.
// Generally returns nothing if link and parent are not specified.
func (h *Handle) ClassList(link Link, parent uint32) ([]Class, error) {
- req := h.newNetlinkRequest(syscall.RTM_GETTCLASS, syscall.NLM_F_DUMP)
+ req := h.newNetlinkRequest(unix.RTM_GETTCLASS, unix.NLM_F_DUMP)
msg := &nl.TcMsg{
Family: nl.FAMILY_ALL,
Parent: parent,
@@ -181,7 +182,7 @@ func (h *Handle) ClassList(link Link, parent uint32) ([]Class, error) {
}
req.AddData(msg)
- msgs, err := req.Execute(syscall.NETLINK_ROUTE, syscall.RTM_NEWTCLASS)
+ msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWTCLASS)
if err != nil {
return nil, err
}
diff --git a/vendor/github.com/vishvananda/netlink/conntrack_linux.go b/vendor/github.com/vishvananda/netlink/conntrack_linux.go
index ecf044565..a0fc74a37 100644
--- a/vendor/github.com/vishvananda/netlink/conntrack_linux.go
+++ b/vendor/github.com/vishvananda/netlink/conntrack_linux.go
@@ -6,9 +6,9 @@ import (
"errors"
"fmt"
"net"
- "syscall"
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
)
// ConntrackTableType Conntrack table for the netlink operation
@@ -85,8 +85,8 @@ func (h *Handle) ConntrackTableList(table ConntrackTableType, family InetFamily)
// conntrack -F [table] Flush table
// The flush operation applies to all the family types
func (h *Handle) ConntrackTableFlush(table ConntrackTableType) error {
- req := h.newConntrackRequest(table, syscall.AF_INET, nl.IPCTNL_MSG_CT_DELETE, syscall.NLM_F_ACK)
- _, err := req.Execute(syscall.NETLINK_NETFILTER, 0)
+ req := h.newConntrackRequest(table, unix.AF_INET, nl.IPCTNL_MSG_CT_DELETE, unix.NLM_F_ACK)
+ _, err := req.Execute(unix.NETLINK_NETFILTER, 0)
return err
}
@@ -102,10 +102,10 @@ func (h *Handle) ConntrackDeleteFilter(table ConntrackTableType, family InetFami
for _, dataRaw := range res {
flow := parseRawData(dataRaw)
if match := filter.MatchConntrackFlow(flow); match {
- req2 := h.newConntrackRequest(table, family, nl.IPCTNL_MSG_CT_DELETE, syscall.NLM_F_ACK)
+ req2 := h.newConntrackRequest(table, family, nl.IPCTNL_MSG_CT_DELETE, unix.NLM_F_ACK)
// skip the first 4 byte that are the netfilter header, the newConntrackRequest is adding it already
req2.AddRawData(dataRaw[4:])
- req2.Execute(syscall.NETLINK_NETFILTER, 0)
+ req2.Execute(unix.NETLINK_NETFILTER, 0)
matched++
}
}
@@ -127,8 +127,8 @@ func (h *Handle) newConntrackRequest(table ConntrackTableType, family InetFamily
}
func (h *Handle) dumpConntrackTable(table ConntrackTableType, family InetFamily) ([][]byte, error) {
- req := h.newConntrackRequest(table, family, nl.IPCTNL_MSG_CT_GET, syscall.NLM_F_DUMP)
- return req.Execute(syscall.NETLINK_NETFILTER, 0)
+ req := h.newConntrackRequest(table, family, nl.IPCTNL_MSG_CT_GET, unix.NLM_F_DUMP)
+ return req.Execute(unix.NETLINK_NETFILTER, 0)
}
// The full conntrack flow structure is very complicated and can be found in the file:
diff --git a/vendor/github.com/vishvananda/netlink/filter.go b/vendor/github.com/vishvananda/netlink/filter.go
index 938b28b0b..c2cf8e4dc 100644
--- a/vendor/github.com/vishvananda/netlink/filter.go
+++ b/vendor/github.com/vishvananda/netlink/filter.go
@@ -2,8 +2,6 @@ package netlink
import (
"fmt"
-
- "github.com/vishvananda/netlink/nl"
)
type Filter interface {
@@ -19,7 +17,7 @@ type FilterAttrs struct {
Handle uint32
Parent uint32
Priority uint16 // lower is higher priority
- Protocol uint16 // syscall.ETH_P_*
+ Protocol uint16 // unix.ETH_P_*
}
func (q FilterAttrs) String() string {
@@ -184,14 +182,6 @@ func NewMirredAction(redirIndex int) *MirredAction {
}
}
-// Constants used in TcU32Sel.Flags.
-const (
- TC_U32_TERMINAL = nl.TC_U32_TERMINAL
- TC_U32_OFFSET = nl.TC_U32_OFFSET
- TC_U32_VAROFFSET = nl.TC_U32_VAROFFSET
- TC_U32_EAT = nl.TC_U32_EAT
-)
-
// Sel of the U32 filters that contains multiple TcU32Key. This is the copy
// and the frontend representation of nl.TcU32Sel. It is serialized into canonical
// nl.TcU32Sel with the appropriate endianness.
@@ -235,6 +225,21 @@ func (filter *U32) Type() string {
return "u32"
}
+// MatchAll filters match all packets
+type MatchAll struct {
+ FilterAttrs
+ ClassId uint32
+ Actions []Action
+}
+
+func (filter *MatchAll) Attrs() *FilterAttrs {
+ return &filter.FilterAttrs
+}
+
+func (filter *MatchAll) Type() string {
+ return "matchall"
+}
+
type FilterFwAttrs struct {
ClassId uint32
InDev string
diff --git a/vendor/github.com/vishvananda/netlink/filter_linux.go b/vendor/github.com/vishvananda/netlink/filter_linux.go
index dc0f90af8..f0eac6b78 100644
--- a/vendor/github.com/vishvananda/netlink/filter_linux.go
+++ b/vendor/github.com/vishvananda/netlink/filter_linux.go
@@ -9,6 +9,15 @@ import (
"unsafe"
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
+)
+
+// Constants used in TcU32Sel.Flags.
+const (
+ TC_U32_TERMINAL = nl.TC_U32_TERMINAL
+ TC_U32_OFFSET = nl.TC_U32_OFFSET
+ TC_U32_VAROFFSET = nl.TC_U32_VAROFFSET
+ TC_U32_EAT = nl.TC_U32_EAT
)
// Fw filter filters on firewall marks
@@ -47,7 +56,7 @@ func NewFw(attrs FilterAttrs, fattrs FilterFwAttrs) (*Fw, error) {
if police.Rate.Rate != 0 {
police.Rate.Mpu = fattrs.Mpu
police.Rate.Overhead = fattrs.Overhead
- if CalcRtable(&police.Rate, rtab, rcellLog, fattrs.Mtu, linklayer) < 0 {
+ if CalcRtable(&police.Rate, rtab[:], rcellLog, fattrs.Mtu, linklayer) < 0 {
return nil, errors.New("TBF: failed to calculate rate table")
}
police.Burst = uint32(Xmittime(uint64(police.Rate.Rate), uint32(buffer)))
@@ -56,7 +65,7 @@ func NewFw(attrs FilterAttrs, fattrs FilterFwAttrs) (*Fw, error) {
if police.PeakRate.Rate != 0 {
police.PeakRate.Mpu = fattrs.Mpu
police.PeakRate.Overhead = fattrs.Overhead
- if CalcRtable(&police.PeakRate, ptab, pcellLog, fattrs.Mtu, linklayer) < 0 {
+ if CalcRtable(&police.PeakRate, ptab[:], pcellLog, fattrs.Mtu, linklayer) < 0 {
return nil, errors.New("POLICE: failed to calculate peak rate table")
}
}
@@ -90,7 +99,7 @@ func FilterDel(filter Filter) error {
// FilterDel will delete a filter from the system.
// Equivalent to: `tc filter del $filter`
func (h *Handle) FilterDel(filter Filter) error {
- req := h.newNetlinkRequest(syscall.RTM_DELTFILTER, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_DELTFILTER, unix.NLM_F_ACK)
base := filter.Attrs()
msg := &nl.TcMsg{
Family: nl.FAMILY_ALL,
@@ -101,7 +110,7 @@ func (h *Handle) FilterDel(filter Filter) error {
}
req.AddData(msg)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -115,7 +124,7 @@ func FilterAdd(filter Filter) error {
// Equivalent to: `tc filter add $filter`
func (h *Handle) FilterAdd(filter Filter) error {
native = nl.NativeEndian()
- req := h.newNetlinkRequest(syscall.RTM_NEWTFILTER, syscall.NLM_F_CREATE|syscall.NLM_F_EXCL|syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_NEWTFILTER, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
base := filter.Attrs()
msg := &nl.TcMsg{
Family: nl.FAMILY_ALL,
@@ -128,9 +137,11 @@ func (h *Handle) FilterAdd(filter Filter) error {
req.AddData(nl.NewRtAttr(nl.TCA_KIND, nl.ZeroTerminated(filter.Type())))
options := nl.NewRtAttr(nl.TCA_OPTIONS, nil)
- if u32, ok := filter.(*U32); ok {
+
+ switch filter := filter.(type) {
+ case *U32:
// Convert TcU32Sel into nl.TcU32Sel as it is without copy.
- sel := (*nl.TcU32Sel)(unsafe.Pointer(u32.Sel))
+ sel := (*nl.TcU32Sel)(unsafe.Pointer(filter.Sel))
if sel == nil {
// match all
sel = &nl.TcU32Sel{
@@ -158,63 +169,71 @@ func (h *Handle) FilterAdd(filter Filter) error {
}
sel.Nkeys = uint8(len(sel.Keys))
nl.NewRtAttrChild(options, nl.TCA_U32_SEL, sel.Serialize())
- if u32.ClassId != 0 {
- nl.NewRtAttrChild(options, nl.TCA_U32_CLASSID, nl.Uint32Attr(u32.ClassId))
+ if filter.ClassId != 0 {
+ nl.NewRtAttrChild(options, nl.TCA_U32_CLASSID, nl.Uint32Attr(filter.ClassId))
}
actionsAttr := nl.NewRtAttrChild(options, nl.TCA_U32_ACT, nil)
// backwards compatibility
- if u32.RedirIndex != 0 {
- u32.Actions = append([]Action{NewMirredAction(u32.RedirIndex)}, u32.Actions...)
+ if filter.RedirIndex != 0 {
+ filter.Actions = append([]Action{NewMirredAction(filter.RedirIndex)}, filter.Actions...)
}
- if err := EncodeActions(actionsAttr, u32.Actions); err != nil {
+ if err := EncodeActions(actionsAttr, filter.Actions); err != nil {
return err
}
- } else if fw, ok := filter.(*Fw); ok {
- if fw.Mask != 0 {
+ case *Fw:
+ if filter.Mask != 0 {
b := make([]byte, 4)
- native.PutUint32(b, fw.Mask)
+ native.PutUint32(b, filter.Mask)
nl.NewRtAttrChild(options, nl.TCA_FW_MASK, b)
}
- if fw.InDev != "" {
- nl.NewRtAttrChild(options, nl.TCA_FW_INDEV, nl.ZeroTerminated(fw.InDev))
+ if filter.InDev != "" {
+ nl.NewRtAttrChild(options, nl.TCA_FW_INDEV, nl.ZeroTerminated(filter.InDev))
}
- if (fw.Police != nl.TcPolice{}) {
+ if (filter.Police != nl.TcPolice{}) {
police := nl.NewRtAttrChild(options, nl.TCA_FW_POLICE, nil)
- nl.NewRtAttrChild(police, nl.TCA_POLICE_TBF, fw.Police.Serialize())
- if (fw.Police.Rate != nl.TcRateSpec{}) {
- payload := SerializeRtab(fw.Rtab)
+ nl.NewRtAttrChild(police, nl.TCA_POLICE_TBF, filter.Police.Serialize())
+ if (filter.Police.Rate != nl.TcRateSpec{}) {
+ payload := SerializeRtab(filter.Rtab)
nl.NewRtAttrChild(police, nl.TCA_POLICE_RATE, payload)
}
- if (fw.Police.PeakRate != nl.TcRateSpec{}) {
- payload := SerializeRtab(fw.Ptab)
+ if (filter.Police.PeakRate != nl.TcRateSpec{}) {
+ payload := SerializeRtab(filter.Ptab)
nl.NewRtAttrChild(police, nl.TCA_POLICE_PEAKRATE, payload)
}
}
- if fw.ClassId != 0 {
+ if filter.ClassId != 0 {
b := make([]byte, 4)
- native.PutUint32(b, fw.ClassId)
+ native.PutUint32(b, filter.ClassId)
nl.NewRtAttrChild(options, nl.TCA_FW_CLASSID, b)
}
- } else if bpf, ok := filter.(*BpfFilter); ok {
+ case *BpfFilter:
var bpfFlags uint32
- if bpf.ClassId != 0 {
- nl.NewRtAttrChild(options, nl.TCA_BPF_CLASSID, nl.Uint32Attr(bpf.ClassId))
+ if filter.ClassId != 0 {
+ nl.NewRtAttrChild(options, nl.TCA_BPF_CLASSID, nl.Uint32Attr(filter.ClassId))
}
- if bpf.Fd >= 0 {
- nl.NewRtAttrChild(options, nl.TCA_BPF_FD, nl.Uint32Attr((uint32(bpf.Fd))))
+ if filter.Fd >= 0 {
+ nl.NewRtAttrChild(options, nl.TCA_BPF_FD, nl.Uint32Attr((uint32(filter.Fd))))
}
- if bpf.Name != "" {
- nl.NewRtAttrChild(options, nl.TCA_BPF_NAME, nl.ZeroTerminated(bpf.Name))
+ if filter.Name != "" {
+ nl.NewRtAttrChild(options, nl.TCA_BPF_NAME, nl.ZeroTerminated(filter.Name))
}
- if bpf.DirectAction {
+ if filter.DirectAction {
bpfFlags |= nl.TCA_BPF_FLAG_ACT_DIRECT
}
nl.NewRtAttrChild(options, nl.TCA_BPF_FLAGS, nl.Uint32Attr(bpfFlags))
+ case *MatchAll:
+ actionsAttr := nl.NewRtAttrChild(options, nl.TCA_MATCHALL_ACT, nil)
+ if err := EncodeActions(actionsAttr, filter.Actions); err != nil {
+ return err
+ }
+ if filter.ClassId != 0 {
+ nl.NewRtAttrChild(options, nl.TCA_MATCHALL_CLASSID, nl.Uint32Attr(filter.ClassId))
+ }
}
req.AddData(options)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -229,7 +248,7 @@ func FilterList(link Link, parent uint32) ([]Filter, error) {
// Equivalent to: `tc filter show`.
// Generally returns nothing if link and parent are not specified.
func (h *Handle) FilterList(link Link, parent uint32) ([]Filter, error) {
- req := h.newNetlinkRequest(syscall.RTM_GETTFILTER, syscall.NLM_F_DUMP)
+ req := h.newNetlinkRequest(unix.RTM_GETTFILTER, unix.NLM_F_DUMP)
msg := &nl.TcMsg{
Family: nl.FAMILY_ALL,
Parent: parent,
@@ -241,7 +260,7 @@ func (h *Handle) FilterList(link Link, parent uint32) ([]Filter, error) {
}
req.AddData(msg)
- msgs, err := req.Execute(syscall.NETLINK_ROUTE, syscall.RTM_NEWTFILTER)
+ msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWTFILTER)
if err != nil {
return nil, err
}
@@ -277,6 +296,8 @@ func (h *Handle) FilterList(link Link, parent uint32) ([]Filter, error) {
filter = &Fw{}
case "bpf":
filter = &BpfFilter{}
+ case "matchall":
+ filter = &MatchAll{}
default:
filter = &GenericFilter{FilterType: filterType}
}
@@ -301,6 +322,11 @@ func (h *Handle) FilterList(link Link, parent uint32) ([]Filter, error) {
if err != nil {
return nil, err
}
+ case "matchall":
+ detailed, err = parseMatchAllData(filter, data)
+ if err != nil {
+ return nil, err
+ }
default:
detailed = true
}
@@ -530,6 +556,28 @@ func parseBpfData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error)
return detailed, nil
}
+func parseMatchAllData(filter Filter, data []syscall.NetlinkRouteAttr) (bool, error) {
+ native = nl.NativeEndian()
+ matchall := filter.(*MatchAll)
+ detailed := true
+ for _, datum := range data {
+ switch datum.Attr.Type {
+ case nl.TCA_MATCHALL_CLASSID:
+ matchall.ClassId = native.Uint32(datum.Value[0:4])
+ case nl.TCA_MATCHALL_ACT:
+ tables, err := nl.ParseRouteAttr(datum.Value)
+ if err != nil {
+ return detailed, err
+ }
+ matchall.Actions, err = parseActions(tables)
+ if err != nil {
+ return detailed, err
+ }
+ }
+ }
+ return detailed, nil
+}
+
func AlignToAtm(size uint) uint {
var linksize, cells int
cells = int(size / nl.ATM_CELL_PAYLOAD)
@@ -552,7 +600,7 @@ func AdjustSize(sz uint, mpu uint, linklayer int) uint {
}
}
-func CalcRtable(rate *nl.TcRateSpec, rtab [256]uint32, cellLog int, mtu uint32, linklayer int) int {
+func CalcRtable(rate *nl.TcRateSpec, rtab []uint32, cellLog int, mtu uint32, linklayer int) int {
bps := rate.Rate
mpu := rate.Mpu
var sz uint
diff --git a/vendor/github.com/vishvananda/netlink/fou.go b/vendor/github.com/vishvananda/netlink/fou.go
new file mode 100644
index 000000000..71e73c37a
--- /dev/null
+++ b/vendor/github.com/vishvananda/netlink/fou.go
@@ -0,0 +1,21 @@
+package netlink
+
+import (
+ "errors"
+)
+
+var (
+ // ErrAttrHeaderTruncated is returned when a netlink attribute's header is
+ // truncated.
+ ErrAttrHeaderTruncated = errors.New("attribute header truncated")
+ // ErrAttrBodyTruncated is returned when a netlink attribute's body is
+ // truncated.
+ ErrAttrBodyTruncated = errors.New("attribute body truncated")
+)
+
+type Fou struct {
+ Family int
+ Port int
+ Protocol int
+ EncapType int
+}
diff --git a/vendor/github.com/vishvananda/netlink/fou_linux.go b/vendor/github.com/vishvananda/netlink/fou_linux.go
new file mode 100644
index 000000000..62d59bd2d
--- /dev/null
+++ b/vendor/github.com/vishvananda/netlink/fou_linux.go
@@ -0,0 +1,215 @@
+// +build linux
+
+package netlink
+
+import (
+ "encoding/binary"
+ "errors"
+
+ "github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
+)
+
+const (
+ FOU_GENL_NAME = "fou"
+)
+
+const (
+ FOU_CMD_UNSPEC uint8 = iota
+ FOU_CMD_ADD
+ FOU_CMD_DEL
+ FOU_CMD_GET
+ FOU_CMD_MAX = FOU_CMD_GET
+)
+
+const (
+ FOU_ATTR_UNSPEC = iota
+ FOU_ATTR_PORT
+ FOU_ATTR_AF
+ FOU_ATTR_IPPROTO
+ FOU_ATTR_TYPE
+ FOU_ATTR_REMCSUM_NOPARTIAL
+ FOU_ATTR_MAX = FOU_ATTR_REMCSUM_NOPARTIAL
+)
+
+const (
+ FOU_ENCAP_UNSPEC = iota
+ FOU_ENCAP_DIRECT
+ FOU_ENCAP_GUE
+ FOU_ENCAP_MAX = FOU_ENCAP_GUE
+)
+
+var fouFamilyId int
+
+func FouFamilyId() (int, error) {
+ if fouFamilyId != 0 {
+ return fouFamilyId, nil
+ }
+
+ fam, err := GenlFamilyGet(FOU_GENL_NAME)
+ if err != nil {
+ return -1, err
+ }
+
+ fouFamilyId = int(fam.ID)
+ return fouFamilyId, nil
+}
+
+func FouAdd(f Fou) error {
+ return pkgHandle.FouAdd(f)
+}
+
+func (h *Handle) FouAdd(f Fou) error {
+ fam_id, err := FouFamilyId()
+ if err != nil {
+ return err
+ }
+
+ // setting ip protocol conflicts with encapsulation type GUE
+ if f.EncapType == FOU_ENCAP_GUE && f.Protocol != 0 {
+ return errors.New("GUE encapsulation doesn't specify an IP protocol")
+ }
+
+ req := h.newNetlinkRequest(fam_id, unix.NLM_F_ACK)
+
+ // int to byte for port
+ bp := make([]byte, 2)
+ binary.BigEndian.PutUint16(bp[0:2], uint16(f.Port))
+
+ attrs := []*nl.RtAttr{
+ nl.NewRtAttr(FOU_ATTR_PORT, bp),
+ nl.NewRtAttr(FOU_ATTR_TYPE, []byte{uint8(f.EncapType)}),
+ nl.NewRtAttr(FOU_ATTR_AF, []byte{uint8(f.Family)}),
+ nl.NewRtAttr(FOU_ATTR_IPPROTO, []byte{uint8(f.Protocol)}),
+ }
+ raw := []byte{FOU_CMD_ADD, 1, 0, 0}
+ for _, a := range attrs {
+ raw = append(raw, a.Serialize()...)
+ }
+
+ req.AddRawData(raw)
+
+ _, err = req.Execute(unix.NETLINK_GENERIC, 0)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func FouDel(f Fou) error {
+ return pkgHandle.FouDel(f)
+}
+
+func (h *Handle) FouDel(f Fou) error {
+ fam_id, err := FouFamilyId()
+ if err != nil {
+ return err
+ }
+
+ req := h.newNetlinkRequest(fam_id, unix.NLM_F_ACK)
+
+ // int to byte for port
+ bp := make([]byte, 2)
+ binary.BigEndian.PutUint16(bp[0:2], uint16(f.Port))
+
+ attrs := []*nl.RtAttr{
+ nl.NewRtAttr(FOU_ATTR_PORT, bp),
+ nl.NewRtAttr(FOU_ATTR_AF, []byte{uint8(f.Family)}),
+ }
+ raw := []byte{FOU_CMD_DEL, 1, 0, 0}
+ for _, a := range attrs {
+ raw = append(raw, a.Serialize()...)
+ }
+
+ req.AddRawData(raw)
+
+ _, err = req.Execute(unix.NETLINK_GENERIC, 0)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func FouList(fam int) ([]Fou, error) {
+ return pkgHandle.FouList(fam)
+}
+
+func (h *Handle) FouList(fam int) ([]Fou, error) {
+ fam_id, err := FouFamilyId()
+ if err != nil {
+ return nil, err
+ }
+
+ req := h.newNetlinkRequest(fam_id, unix.NLM_F_DUMP)
+
+ attrs := []*nl.RtAttr{
+ nl.NewRtAttr(FOU_ATTR_AF, []byte{uint8(fam)}),
+ }
+ raw := []byte{FOU_CMD_GET, 1, 0, 0}
+ for _, a := range attrs {
+ raw = append(raw, a.Serialize()...)
+ }
+
+ req.AddRawData(raw)
+
+ msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
+ if err != nil {
+ return nil, err
+ }
+
+ fous := make([]Fou, 0, len(msgs))
+ for _, m := range msgs {
+ f, err := deserializeFouMsg(m)
+ if err != nil {
+ return fous, err
+ }
+
+ fous = append(fous, f)
+ }
+
+ return fous, nil
+}
+
+func deserializeFouMsg(msg []byte) (Fou, error) {
+ // we'll skip to byte 4 to first attribute
+ msg = msg[3:]
+ var shift int
+ fou := Fou{}
+
+ for {
+ // attribute header is at least 16 bits
+ if len(msg) < 4 {
+ return fou, ErrAttrHeaderTruncated
+ }
+
+ lgt := int(binary.BigEndian.Uint16(msg[0:2]))
+ if len(msg) < lgt+4 {
+ return fou, ErrAttrBodyTruncated
+ }
+ attr := binary.BigEndian.Uint16(msg[2:4])
+
+ shift = lgt + 3
+ switch attr {
+ case FOU_ATTR_AF:
+ fou.Family = int(msg[5])
+ case FOU_ATTR_PORT:
+ fou.Port = int(binary.BigEndian.Uint16(msg[5:7]))
+ // port is 2 bytes
+ shift = lgt + 2
+ case FOU_ATTR_IPPROTO:
+ fou.Protocol = int(msg[5])
+ case FOU_ATTR_TYPE:
+ fou.EncapType = int(msg[5])
+ }
+
+ msg = msg[shift:]
+
+ if len(msg) < 4 {
+ break
+ }
+ }
+
+ return fou, nil
+}
diff --git a/vendor/github.com/vishvananda/netlink/fou_unspecified.go b/vendor/github.com/vishvananda/netlink/fou_unspecified.go
new file mode 100644
index 000000000..3a8365bfe
--- /dev/null
+++ b/vendor/github.com/vishvananda/netlink/fou_unspecified.go
@@ -0,0 +1,15 @@
+// +build !linux
+
+package netlink
+
+func FouAdd(f Fou) error {
+ return ErrNotImplemented
+}
+
+func FouDel(f Fou) error {
+ return ErrNotImplemented
+}
+
+func FouList(fam int) ([]Fou, error) {
+ return nil, ErrNotImplemented
+}
diff --git a/vendor/github.com/vishvananda/netlink/genetlink_linux.go b/vendor/github.com/vishvananda/netlink/genetlink_linux.go
index a388a8700..ce7969907 100644
--- a/vendor/github.com/vishvananda/netlink/genetlink_linux.go
+++ b/vendor/github.com/vishvananda/netlink/genetlink_linux.go
@@ -5,6 +5,7 @@ import (
"syscall"
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
)
type GenlOp struct {
@@ -130,9 +131,9 @@ func (h *Handle) GenlFamilyList() ([]*GenlFamily, error) {
Command: nl.GENL_CTRL_CMD_GETFAMILY,
Version: nl.GENL_CTRL_VERSION,
}
- req := h.newNetlinkRequest(nl.GENL_ID_CTRL, syscall.NLM_F_DUMP)
+ req := h.newNetlinkRequest(nl.GENL_ID_CTRL, unix.NLM_F_DUMP)
req.AddData(msg)
- msgs, err := req.Execute(syscall.NETLINK_GENERIC, 0)
+ msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
if err != nil {
return nil, err
}
@@ -151,7 +152,7 @@ func (h *Handle) GenlFamilyGet(name string) (*GenlFamily, error) {
req := h.newNetlinkRequest(nl.GENL_ID_CTRL, 0)
req.AddData(msg)
req.AddData(nl.NewRtAttr(nl.GENL_CTRL_ATTR_FAMILY_NAME, nl.ZeroTerminated(name)))
- msgs, err := req.Execute(syscall.NETLINK_GENERIC, 0)
+ msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
if err != nil {
return nil, err
}
diff --git a/vendor/github.com/vishvananda/netlink/gtp_linux.go b/vendor/github.com/vishvananda/netlink/gtp_linux.go
index 7331303ec..f5e160ba5 100644
--- a/vendor/github.com/vishvananda/netlink/gtp_linux.go
+++ b/vendor/github.com/vishvananda/netlink/gtp_linux.go
@@ -7,6 +7,7 @@ import (
"syscall"
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
)
type PDP struct {
@@ -82,9 +83,9 @@ func (h *Handle) GTPPDPList() ([]*PDP, error) {
Command: nl.GENL_GTP_CMD_GETPDP,
Version: nl.GENL_GTP_VERSION,
}
- req := h.newNetlinkRequest(int(f.ID), syscall.NLM_F_DUMP)
+ req := h.newNetlinkRequest(int(f.ID), unix.NLM_F_DUMP)
req.AddData(msg)
- msgs, err := req.Execute(syscall.NETLINK_GENERIC, 0)
+ msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
if err != nil {
return nil, err
}
@@ -96,7 +97,7 @@ func GTPPDPList() ([]*PDP, error) {
}
func gtpPDPGet(req *nl.NetlinkRequest) (*PDP, error) {
- msgs, err := req.Execute(syscall.NETLINK_GENERIC, 0)
+ msgs, err := req.Execute(unix.NETLINK_GENERIC, 0)
if err != nil {
return nil, err
}
@@ -182,7 +183,7 @@ func (h *Handle) GTPPDPAdd(link Link, pdp *PDP) error {
Command: nl.GENL_GTP_CMD_NEWPDP,
Version: nl.GENL_GTP_VERSION,
}
- req := h.newNetlinkRequest(int(f.ID), syscall.NLM_F_EXCL|syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(int(f.ID), unix.NLM_F_EXCL|unix.NLM_F_ACK)
req.AddData(msg)
req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(pdp.Version)))
req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))
@@ -199,7 +200,7 @@ func (h *Handle) GTPPDPAdd(link Link, pdp *PDP) error {
default:
return fmt.Errorf("unsupported GTP version: %d", pdp.Version)
}
- _, err = req.Execute(syscall.NETLINK_GENERIC, 0)
+ _, err = req.Execute(unix.NETLINK_GENERIC, 0)
return err
}
@@ -216,7 +217,7 @@ func (h *Handle) GTPPDPDel(link Link, pdp *PDP) error {
Command: nl.GENL_GTP_CMD_DELPDP,
Version: nl.GENL_GTP_VERSION,
}
- req := h.newNetlinkRequest(int(f.ID), syscall.NLM_F_EXCL|syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(int(f.ID), unix.NLM_F_EXCL|unix.NLM_F_ACK)
req.AddData(msg)
req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_VERSION, nl.Uint32Attr(pdp.Version)))
req.AddData(nl.NewRtAttr(nl.GENL_GTP_ATTR_LINK, nl.Uint32Attr(uint32(link.Attrs().Index))))
@@ -229,7 +230,7 @@ func (h *Handle) GTPPDPDel(link Link, pdp *PDP) error {
default:
return fmt.Errorf("unsupported GTP version: %d", pdp.Version)
}
- _, err = req.Execute(syscall.NETLINK_GENERIC, 0)
+ _, err = req.Execute(unix.NETLINK_GENERIC, 0)
return err
}
diff --git a/vendor/github.com/vishvananda/netlink/handle_linux.go b/vendor/github.com/vishvananda/netlink/handle_linux.go
index a04ceae6b..9f6d7fe0f 100644
--- a/vendor/github.com/vishvananda/netlink/handle_linux.go
+++ b/vendor/github.com/vishvananda/netlink/handle_linux.go
@@ -2,11 +2,11 @@ package netlink
import (
"fmt"
- "syscall"
"time"
"github.com/vishvananda/netlink/nl"
"github.com/vishvananda/netns"
+ "golang.org/x/sys/unix"
)
// Empty handle used by the netlink package methods
@@ -43,14 +43,29 @@ func (h *Handle) SetSocketTimeout(to time.Duration) error {
if to < time.Microsecond {
return fmt.Errorf("invalid timeout, minimul value is %s", time.Microsecond)
}
- tv := syscall.NsecToTimeval(to.Nanoseconds())
+ tv := unix.NsecToTimeval(to.Nanoseconds())
for _, sh := range h.sockets {
- fd := sh.Socket.GetFd()
- err := syscall.SetsockoptTimeval(fd, syscall.SOL_SOCKET, syscall.SO_RCVTIMEO, &tv)
- if err != nil {
+ if err := sh.Socket.SetSendTimeout(&tv); err != nil {
return err
}
- err = syscall.SetsockoptTimeval(fd, syscall.SOL_SOCKET, syscall.SO_SNDTIMEO, &tv)
+ if err := sh.Socket.SetReceiveTimeout(&tv); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// SetSocketReceiveBufferSize sets the receive buffer size for each
+// socket in the netlink handle. The maximum value is capped by
+// /proc/sys/net/core/rmem_max.
+func (h *Handle) SetSocketReceiveBufferSize(size int, force bool) error {
+ opt := unix.SO_RCVBUF
+ if force {
+ opt = unix.SO_RCVBUFFORCE
+ }
+ for _, sh := range h.sockets {
+ fd := sh.Socket.GetFd()
+ err := unix.SetsockoptInt(fd, unix.SOL_SOCKET, opt, size)
if err != nil {
return err
}
@@ -58,6 +73,24 @@ func (h *Handle) SetSocketTimeout(to time.Duration) error {
return nil
}
+// GetSocketReceiveBufferSize gets the receiver buffer size for each
+// socket in the netlink handle. The retrieved value should be the
+// double to the one set for SetSocketReceiveBufferSize.
+func (h *Handle) GetSocketReceiveBufferSize() ([]int, error) {
+ results := make([]int, len(h.sockets))
+ i := 0
+ for _, sh := range h.sockets {
+ fd := sh.Socket.GetFd()
+ size, err := unix.GetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_RCVBUF)
+ if err != nil {
+ return nil, err
+ }
+ results[i] = size
+ i++
+ }
+ return results, nil
+}
+
// NewHandle returns a netlink handle on the network namespace
// specified by ns. If ns=netns.None(), current network namespace
// will be assumed
@@ -101,10 +134,10 @@ func (h *Handle) newNetlinkRequest(proto, flags int) *nl.NetlinkRequest {
return nl.NewNetlinkRequest(proto, flags)
}
return &nl.NetlinkRequest{
- NlMsghdr: syscall.NlMsghdr{
- Len: uint32(syscall.SizeofNlMsghdr),
+ NlMsghdr: unix.NlMsghdr{
+ Len: uint32(unix.SizeofNlMsghdr),
Type: uint16(proto),
- Flags: syscall.NLM_F_REQUEST | uint16(flags),
+ Flags: unix.NLM_F_REQUEST | uint16(flags),
},
Sockets: h.sockets,
}
diff --git a/vendor/github.com/vishvananda/netlink/handle_unspecified.go b/vendor/github.com/vishvananda/netlink/handle_unspecified.go
index 32cf02273..915b765de 100644
--- a/vendor/github.com/vishvananda/netlink/handle_unspecified.go
+++ b/vendor/github.com/vishvananda/netlink/handle_unspecified.go
@@ -145,6 +145,10 @@ func (h *Handle) LinkSetFlood(link Link, mode bool) error {
return ErrNotImplemented
}
+func (h *Handle) LinkSetTxQLen(link Link, qlen int) error {
+ return ErrNotImplemented
+}
+
func (h *Handle) setProtinfoAttr(link Link, mode bool, attr int) error {
return ErrNotImplemented
}
@@ -216,3 +220,39 @@ func (h *Handle) NeighList(linkIndex, family int) ([]Neigh, error) {
func (h *Handle) NeighProxyList(linkIndex, family int) ([]Neigh, error) {
return nil, ErrNotImplemented
}
+
+func (h *Handle) RouteAdd(route *Route) error {
+ return ErrNotImplemented
+}
+
+func (h *Handle) RouteDel(route *Route) error {
+ return ErrNotImplemented
+}
+
+func (h *Handle) RouteGet(destination net.IP) ([]Route, error) {
+ return nil, ErrNotImplemented
+}
+
+func (h *Handle) RouteList(link Link, family int) ([]Route, error) {
+ return nil, ErrNotImplemented
+}
+
+func (h *Handle) RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {
+ return nil, ErrNotImplemented
+}
+
+func (h *Handle) RouteReplace(route *Route) error {
+ return ErrNotImplemented
+}
+
+func (h *Handle) RuleAdd(rule *Rule) error {
+ return ErrNotImplemented
+}
+
+func (h *Handle) RuleDel(rule *Rule) error {
+ return ErrNotImplemented
+}
+
+func (h *Handle) RuleList(family int) ([]Rule, error) {
+ return nil, ErrNotImplemented
+}
diff --git a/vendor/github.com/vishvananda/netlink/ioctl_linux.go b/vendor/github.com/vishvananda/netlink/ioctl_linux.go
new file mode 100644
index 000000000..a8503126d
--- /dev/null
+++ b/vendor/github.com/vishvananda/netlink/ioctl_linux.go
@@ -0,0 +1,98 @@
+package netlink
+
+import (
+ "syscall"
+ "unsafe"
+
+ "golang.org/x/sys/unix"
+)
+
+// ioctl for statistics.
+const (
+ // ETHTOOL_GSSET_INFO gets string set info
+ ETHTOOL_GSSET_INFO = 0x00000037
+ // SIOCETHTOOL is Ethtool interface
+ SIOCETHTOOL = 0x8946
+ // ETHTOOL_GSTRINGS gets specified string set
+ ETHTOOL_GSTRINGS = 0x0000001b
+ // ETHTOOL_GSTATS gets NIC-specific statistics
+ ETHTOOL_GSTATS = 0x0000001d
+)
+
+// string set id.
+const (
+ // ETH_SS_TEST is self-test result names, for use with %ETHTOOL_TEST
+ ETH_SS_TEST = iota
+ // ETH_SS_STATS statistic names, for use with %ETHTOOL_GSTATS
+ ETH_SS_STATS
+ // ETH_SS_PRIV_FLAGS are driver private flag names
+ ETH_SS_PRIV_FLAGS
+ // _ETH_SS_NTUPLE_FILTERS is deprecated
+ _ETH_SS_NTUPLE_FILTERS
+ // ETH_SS_FEATURES are device feature names
+ ETH_SS_FEATURES
+ // ETH_SS_RSS_HASH_FUNCS is RSS hush function names
+ ETH_SS_RSS_HASH_FUNCS
+)
+
+// IfreqSlave is a struct for ioctl bond manipulation syscalls.
+// It is used to assign slave to bond interface with Name.
+type IfreqSlave struct {
+ Name [unix.IFNAMSIZ]byte
+ Slave [unix.IFNAMSIZ]byte
+}
+
+// Ifreq is a struct for ioctl ethernet manipulation syscalls.
+type Ifreq struct {
+ Name [unix.IFNAMSIZ]byte
+ Data uintptr
+}
+
+// ethtoolSset is a string set information
+type ethtoolSset struct {
+ cmd uint32
+ reserved uint32
+ mask uint64
+ data [1]uint32
+}
+
+// ethtoolGstrings is string set for data tagging
+type ethtoolGstrings struct {
+ cmd uint32
+ stringSet uint32
+ length uint32
+ data [32]byte
+}
+
+type ethtoolStats struct {
+ cmd uint32
+ nStats uint32
+ data [1]uint64
+}
+
+// newIocltSlaveReq returns filled IfreqSlave with proper interface names
+// It is used by ioctl to assign slave to bond master
+func newIocltSlaveReq(slave, master string) *IfreqSlave {
+ ifreq := &IfreqSlave{}
+ copy(ifreq.Name[:unix.IFNAMSIZ-1], master)
+ copy(ifreq.Slave[:unix.IFNAMSIZ-1], slave)
+ return ifreq
+}
+
+// newIocltStringSetReq creates request to get interface string set
+func newIocltStringSetReq(linkName string) (*Ifreq, *ethtoolSset) {
+ e := &ethtoolSset{
+ cmd: ETHTOOL_GSSET_INFO,
+ mask: 1 << ETH_SS_STATS,
+ }
+
+ ifreq := &Ifreq{Data: uintptr(unsafe.Pointer(e))}
+ copy(ifreq.Name[:unix.IFNAMSIZ-1], linkName)
+ return ifreq, e
+}
+
+// getSocketUDP returns file descriptor to new UDP socket
+// It is used for communication with ioctl interface.
+func getSocketUDP() (int, error) {
+ return syscall.Socket(unix.AF_INET, unix.SOCK_DGRAM, 0)
+}
diff --git a/vendor/github.com/vishvananda/netlink/link.go b/vendor/github.com/vishvananda/netlink/link.go
index 4e77037b5..fe74ffab9 100644
--- a/vendor/github.com/vishvananda/netlink/link.go
+++ b/vendor/github.com/vishvananda/netlink/link.go
@@ -3,6 +3,7 @@ package netlink
import (
"fmt"
"net"
+ "os"
)
// Link represents a link device from netlink. Shared link attributes
@@ -37,6 +38,9 @@ type LinkAttrs struct {
EncapType string
Protinfo *Protinfo
OperState LinkOperState
+ NetNsID int
+ NumTxQueues int
+ NumRxQueues int
}
// LinkOperState represents the values of the IFLA_OPERSTATE link
@@ -258,6 +262,9 @@ const (
type Macvlan struct {
LinkAttrs
Mode MacvlanMode
+
+ // MACAddrs is only populated for Macvlan SOURCE links
+ MACAddrs []net.HardwareAddr
}
func (macvlan *Macvlan) Attrs() *LinkAttrs {
@@ -283,8 +290,10 @@ type TuntapFlag uint16
// Tuntap links created via /dev/tun/tap, but can be destroyed via netlink
type Tuntap struct {
LinkAttrs
- Mode TuntapMode
- Flags TuntapFlag
+ Mode TuntapMode
+ Flags TuntapFlag
+ Queues int
+ Fds []*os.File
}
func (tuntap *Tuntap) Attrs() *LinkAttrs {
@@ -326,26 +335,28 @@ func (generic *GenericLink) Type() string {
type Vxlan struct {
LinkAttrs
- VxlanId int
- VtepDevIndex int
- SrcAddr net.IP
- Group net.IP
- TTL int
- TOS int
- Learning bool
- Proxy bool
- RSC bool
- L2miss bool
- L3miss bool
- UDPCSum bool
- NoAge bool
- GBP bool
- FlowBased bool
- Age int
- Limit int
- Port int
- PortLow int
- PortHigh int
+ VxlanId int
+ VtepDevIndex int
+ SrcAddr net.IP
+ Group net.IP
+ TTL int
+ TOS int
+ Learning bool
+ Proxy bool
+ RSC bool
+ L2miss bool
+ L3miss bool
+ UDPCSum bool
+ UDP6ZeroCSumTx bool
+ UDP6ZeroCSumRx bool
+ NoAge bool
+ GBP bool
+ FlowBased bool
+ Age int
+ Limit int
+ Port int
+ PortLow int
+ PortHigh int
}
func (vxlan *Vxlan) Attrs() *LinkAttrs {
@@ -694,17 +705,25 @@ func (gretap *Gretap) Attrs() *LinkAttrs {
}
func (gretap *Gretap) Type() string {
+ if gretap.Local.To4() == nil {
+ return "ip6gretap"
+ }
return "gretap"
}
type Iptun struct {
LinkAttrs
- Ttl uint8
- Tos uint8
- PMtuDisc uint8
- Link uint32
- Local net.IP
- Remote net.IP
+ Ttl uint8
+ Tos uint8
+ PMtuDisc uint8
+ Link uint32
+ Local net.IP
+ Remote net.IP
+ EncapSport uint16
+ EncapDport uint16
+ EncapType uint16
+ EncapFlags uint16
+ FlowBased bool
}
func (iptun *Iptun) Attrs() *LinkAttrs {
@@ -715,6 +734,28 @@ func (iptun *Iptun) Type() string {
return "ipip"
}
+type Sittun struct {
+ LinkAttrs
+ Link uint32
+ Local net.IP
+ Remote net.IP
+ Ttl uint8
+ Tos uint8
+ PMtuDisc uint8
+ EncapType uint16
+ EncapFlags uint16
+ EncapSport uint16
+ EncapDport uint16
+}
+
+func (sittun *Sittun) Attrs() *LinkAttrs {
+ return &sittun.LinkAttrs
+}
+
+func (sittun *Sittun) Type() string {
+ return "sit"
+}
+
type Vti struct {
LinkAttrs
IKey uint32
@@ -732,6 +773,35 @@ func (iptun *Vti) Type() string {
return "vti"
}
+type Gretun struct {
+ LinkAttrs
+ Link uint32
+ IFlags uint16
+ OFlags uint16
+ IKey uint32
+ OKey uint32
+ Local net.IP
+ Remote net.IP
+ Ttl uint8
+ Tos uint8
+ PMtuDisc uint8
+ EncapType uint16
+ EncapFlags uint16
+ EncapSport uint16
+ EncapDport uint16
+}
+
+func (gretun *Gretun) Attrs() *LinkAttrs {
+ return &gretun.LinkAttrs
+}
+
+func (gretun *Gretun) Type() string {
+ if gretun.Local.To4() == nil {
+ return "ip6gre"
+ }
+ return "gre"
+}
+
type Vrf struct {
LinkAttrs
Table uint32
diff --git a/vendor/github.com/vishvananda/netlink/link_linux.go b/vendor/github.com/vishvananda/netlink/link_linux.go
index 18a4d1a5f..540191ed8 100644
--- a/vendor/github.com/vishvananda/netlink/link_linux.go
+++ b/vendor/github.com/vishvananda/netlink/link_linux.go
@@ -11,22 +11,24 @@ import (
"github.com/vishvananda/netlink/nl"
"github.com/vishvananda/netns"
+ "golang.org/x/sys/unix"
)
const (
SizeofLinkStats32 = 0x5c
SizeofLinkStats64 = 0xd8
- IFLA_STATS64 = 0x17 // syscall pkg does not contain this one
)
const (
- TUNTAP_MODE_TUN TuntapMode = syscall.IFF_TUN
- TUNTAP_MODE_TAP TuntapMode = syscall.IFF_TAP
- TUNTAP_DEFAULTS TuntapFlag = syscall.IFF_TUN_EXCL | syscall.IFF_ONE_QUEUE
- TUNTAP_VNET_HDR TuntapFlag = syscall.IFF_VNET_HDR
- TUNTAP_TUN_EXCL TuntapFlag = syscall.IFF_TUN_EXCL
- TUNTAP_NO_PI TuntapFlag = syscall.IFF_NO_PI
- TUNTAP_ONE_QUEUE TuntapFlag = syscall.IFF_ONE_QUEUE
+ TUNTAP_MODE_TUN TuntapMode = unix.IFF_TUN
+ TUNTAP_MODE_TAP TuntapMode = unix.IFF_TAP
+ TUNTAP_DEFAULTS TuntapFlag = unix.IFF_TUN_EXCL | unix.IFF_ONE_QUEUE
+ TUNTAP_VNET_HDR TuntapFlag = unix.IFF_VNET_HDR
+ TUNTAP_TUN_EXCL TuntapFlag = unix.IFF_TUN_EXCL
+ TUNTAP_NO_PI TuntapFlag = unix.IFF_NO_PI
+ TUNTAP_ONE_QUEUE TuntapFlag = unix.IFF_ONE_QUEUE
+ TUNTAP_MULTI_QUEUE TuntapFlag = unix.IFF_MULTI_QUEUE
+ TUNTAP_MULTI_QUEUE_DEFAULTS TuntapFlag = TUNTAP_MULTI_QUEUE | TUNTAP_NO_PI
)
var lookupByDump = false
@@ -61,15 +63,15 @@ func (h *Handle) ensureIndex(link *LinkAttrs) {
func (h *Handle) LinkSetARPOff(link Link) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
- msg.Change |= syscall.IFF_NOARP
- msg.Flags |= syscall.IFF_NOARP
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ msg.Change |= unix.IFF_NOARP
+ msg.Flags |= unix.IFF_NOARP
msg.Index = int32(base.Index)
req.AddData(msg)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -80,15 +82,15 @@ func LinkSetARPOff(link Link) error {
func (h *Handle) LinkSetARPOn(link Link) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
- msg.Change |= syscall.IFF_NOARP
- msg.Flags &= ^uint32(syscall.IFF_NOARP)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ msg.Change |= unix.IFF_NOARP
+ msg.Flags &= ^uint32(unix.IFF_NOARP)
msg.Index = int32(base.Index)
req.AddData(msg)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -99,15 +101,84 @@ func LinkSetARPOn(link Link) error {
func (h *Handle) SetPromiscOn(link Link) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
- msg.Change = syscall.IFF_PROMISC
- msg.Flags = syscall.IFF_PROMISC
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ msg.Change = unix.IFF_PROMISC
+ msg.Flags = unix.IFF_PROMISC
msg.Index = int32(base.Index)
req.AddData(msg)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
+ return err
+}
+
+func MacvlanMACAddrAdd(link Link, addr net.HardwareAddr) error {
+ return pkgHandle.MacvlanMACAddrAdd(link, addr)
+}
+
+func (h *Handle) MacvlanMACAddrAdd(link Link, addr net.HardwareAddr) error {
+ return h.macvlanMACAddrChange(link, []net.HardwareAddr{addr}, nl.MACVLAN_MACADDR_ADD)
+}
+
+func MacvlanMACAddrDel(link Link, addr net.HardwareAddr) error {
+ return pkgHandle.MacvlanMACAddrDel(link, addr)
+}
+
+func (h *Handle) MacvlanMACAddrDel(link Link, addr net.HardwareAddr) error {
+ return h.macvlanMACAddrChange(link, []net.HardwareAddr{addr}, nl.MACVLAN_MACADDR_DEL)
+}
+
+func MacvlanMACAddrFlush(link Link) error {
+ return pkgHandle.MacvlanMACAddrFlush(link)
+}
+
+func (h *Handle) MacvlanMACAddrFlush(link Link) error {
+ return h.macvlanMACAddrChange(link, nil, nl.MACVLAN_MACADDR_FLUSH)
+}
+
+func MacvlanMACAddrSet(link Link, addrs []net.HardwareAddr) error {
+ return pkgHandle.MacvlanMACAddrSet(link, addrs)
+}
+
+func (h *Handle) MacvlanMACAddrSet(link Link, addrs []net.HardwareAddr) error {
+ return h.macvlanMACAddrChange(link, addrs, nl.MACVLAN_MACADDR_SET)
+}
+
+func (h *Handle) macvlanMACAddrChange(link Link, addrs []net.HardwareAddr, mode uint32) error {
+ base := link.Attrs()
+ h.ensureIndex(base)
+ req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)
+
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ msg.Index = int32(base.Index)
+ req.AddData(msg)
+
+ linkInfo := nl.NewRtAttr(unix.IFLA_LINKINFO, nil)
+ nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_KIND, nl.NonZeroTerminated(link.Type()))
+ inner := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
+
+ // IFLA_MACVLAN_MACADDR_MODE = mode
+ b := make([]byte, 4)
+ native.PutUint32(b, mode)
+ nl.NewRtAttrChild(inner, nl.IFLA_MACVLAN_MACADDR_MODE, b)
+
+ // populate message with MAC addrs, if necessary
+ switch mode {
+ case nl.MACVLAN_MACADDR_ADD, nl.MACVLAN_MACADDR_DEL:
+ if len(addrs) == 1 {
+ nl.NewRtAttrChild(inner, nl.IFLA_MACVLAN_MACADDR, []byte(addrs[0]))
+ }
+ case nl.MACVLAN_MACADDR_SET:
+ mad := nl.NewRtAttrChild(inner, nl.IFLA_MACVLAN_MACADDR_DATA, nil)
+ for _, addr := range addrs {
+ nl.NewRtAttrChild(mad, nl.IFLA_MACVLAN_MACADDR, []byte(addr))
+ }
+ }
+
+ req.AddData(linkInfo)
+
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -118,7 +189,7 @@ func BridgeSetMcastSnoop(link Link, on bool) error {
func (h *Handle) BridgeSetMcastSnoop(link Link, on bool) error {
bridge := link.(*Bridge)
bridge.MulticastSnooping = &on
- return h.linkModify(bridge, syscall.NLM_F_ACK)
+ return h.linkModify(bridge, unix.NLM_F_ACK)
}
func SetPromiscOn(link Link) error {
@@ -128,15 +199,15 @@ func SetPromiscOn(link Link) error {
func (h *Handle) SetPromiscOff(link Link) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
- msg.Change = syscall.IFF_PROMISC
- msg.Flags = 0 & ^syscall.IFF_PROMISC
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ msg.Change = unix.IFF_PROMISC
+ msg.Flags = 0 & ^unix.IFF_PROMISC
msg.Index = int32(base.Index)
req.AddData(msg)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -155,15 +226,15 @@ func LinkSetUp(link Link) error {
func (h *Handle) LinkSetUp(link Link) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_NEWLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
- msg.Change = syscall.IFF_UP
- msg.Flags = syscall.IFF_UP
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ msg.Change = unix.IFF_UP
+ msg.Flags = unix.IFF_UP
msg.Index = int32(base.Index)
req.AddData(msg)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -178,15 +249,15 @@ func LinkSetDown(link Link) error {
func (h *Handle) LinkSetDown(link Link) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_NEWLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_NEWLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
- msg.Change = syscall.IFF_UP
- msg.Flags = 0 & ^syscall.IFF_UP
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ msg.Change = unix.IFF_UP
+ msg.Flags = 0 & ^unix.IFF_UP
msg.Index = int32(base.Index)
req.AddData(msg)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -201,19 +272,19 @@ func LinkSetMTU(link Link, mtu int) error {
func (h *Handle) LinkSetMTU(link Link, mtu int) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(base.Index)
req.AddData(msg)
b := make([]byte, 4)
native.PutUint32(b, uint32(mtu))
- data := nl.NewRtAttr(syscall.IFLA_MTU, b)
+ data := nl.NewRtAttr(unix.IFLA_MTU, b)
req.AddData(data)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -228,16 +299,16 @@ func LinkSetName(link Link, name string) error {
func (h *Handle) LinkSetName(link Link, name string) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(base.Index)
req.AddData(msg)
- data := nl.NewRtAttr(syscall.IFLA_IFNAME, []byte(name))
+ data := nl.NewRtAttr(unix.IFLA_IFNAME, []byte(name))
req.AddData(data)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -252,16 +323,16 @@ func LinkSetAlias(link Link, name string) error {
func (h *Handle) LinkSetAlias(link Link, name string) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(base.Index)
req.AddData(msg)
- data := nl.NewRtAttr(syscall.IFLA_IFALIAS, []byte(name))
+ data := nl.NewRtAttr(unix.IFLA_IFALIAS, []byte(name))
req.AddData(data)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -276,16 +347,16 @@ func LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {
func (h *Handle) LinkSetHardwareAddr(link Link, hwaddr net.HardwareAddr) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(base.Index)
req.AddData(msg)
- data := nl.NewRtAttr(syscall.IFLA_ADDRESS, []byte(hwaddr))
+ data := nl.NewRtAttr(unix.IFLA_ADDRESS, []byte(hwaddr))
req.AddData(data)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -300,13 +371,13 @@ func LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {
func (h *Handle) LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAddr) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(base.Index)
req.AddData(msg)
- data := nl.NewRtAttr(nl.IFLA_VFINFO_LIST, nil)
+ data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
info := nl.NewRtAttrChild(data, nl.IFLA_VF_INFO, nil)
vfmsg := nl.VfMac{
Vf: uint32(vf),
@@ -315,7 +386,7 @@ func (h *Handle) LinkSetVfHardwareAddr(link Link, vf int, hwaddr net.HardwareAdd
nl.NewRtAttrChild(info, nl.IFLA_VF_MAC, vfmsg.Serialize())
req.AddData(data)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -330,13 +401,13 @@ func LinkSetVfVlan(link Link, vf, vlan int) error {
func (h *Handle) LinkSetVfVlan(link Link, vf, vlan int) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(base.Index)
req.AddData(msg)
- data := nl.NewRtAttr(nl.IFLA_VFINFO_LIST, nil)
+ data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
info := nl.NewRtAttrChild(data, nl.IFLA_VF_INFO, nil)
vfmsg := nl.VfVlan{
Vf: uint32(vf),
@@ -345,7 +416,7 @@ func (h *Handle) LinkSetVfVlan(link Link, vf, vlan int) error {
nl.NewRtAttrChild(info, nl.IFLA_VF_VLAN, vfmsg.Serialize())
req.AddData(data)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -360,13 +431,13 @@ func LinkSetVfTxRate(link Link, vf, rate int) error {
func (h *Handle) LinkSetVfTxRate(link Link, vf, rate int) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(base.Index)
req.AddData(msg)
- data := nl.NewRtAttr(nl.IFLA_VFINFO_LIST, nil)
+ data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
info := nl.NewRtAttrChild(data, nl.IFLA_VF_INFO, nil)
vfmsg := nl.VfTxRate{
Vf: uint32(vf),
@@ -375,7 +446,75 @@ func (h *Handle) LinkSetVfTxRate(link Link, vf, rate int) error {
nl.NewRtAttrChild(info, nl.IFLA_VF_TX_RATE, vfmsg.Serialize())
req.AddData(data)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
+ return err
+}
+
+// LinkSetVfSpoofchk enables/disables spoof check on a vf for the link.
+// Equivalent to: `ip link set $link vf $vf spoofchk $check`
+func LinkSetVfSpoofchk(link Link, vf int, check bool) error {
+ return pkgHandle.LinkSetVfSpoofchk(link, vf, check)
+}
+
+// LinkSetVfSpookfchk enables/disables spoof check on a vf for the link.
+// Equivalent to: `ip link set $link vf $vf spoofchk $check`
+func (h *Handle) LinkSetVfSpoofchk(link Link, vf int, check bool) error {
+ var setting uint32
+ base := link.Attrs()
+ h.ensureIndex(base)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
+
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ msg.Index = int32(base.Index)
+ req.AddData(msg)
+
+ data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
+ info := nl.NewRtAttrChild(data, nl.IFLA_VF_INFO, nil)
+ if check {
+ setting = 1
+ }
+ vfmsg := nl.VfSpoofchk{
+ Vf: uint32(vf),
+ Setting: setting,
+ }
+ nl.NewRtAttrChild(info, nl.IFLA_VF_SPOOFCHK, vfmsg.Serialize())
+ req.AddData(data)
+
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
+ return err
+}
+
+// LinkSetVfTrust enables/disables trust state on a vf for the link.
+// Equivalent to: `ip link set $link vf $vf trust $state`
+func LinkSetVfTrust(link Link, vf int, state bool) error {
+ return pkgHandle.LinkSetVfTrust(link, vf, state)
+}
+
+// LinkSetVfTrust enables/disables trust state on a vf for the link.
+// Equivalent to: `ip link set $link vf $vf trust $state`
+func (h *Handle) LinkSetVfTrust(link Link, vf int, state bool) error {
+ var setting uint32
+ base := link.Attrs()
+ h.ensureIndex(base)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
+
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ msg.Index = int32(base.Index)
+ req.AddData(msg)
+
+ data := nl.NewRtAttr(unix.IFLA_VFINFO_LIST, nil)
+ info := nl.NewRtAttrChild(data, nl.IFLA_VF_INFO, nil)
+ if state {
+ setting = 1
+ }
+ vfmsg := nl.VfTrust{
+ Vf: uint32(vf),
+ Setting: setting,
+ }
+ nl.NewRtAttrChild(info, nl.IFLA_VF_TRUST, vfmsg.Serialize())
+ req.AddData(data)
+
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -423,19 +562,19 @@ func LinkSetMasterByIndex(link Link, masterIndex int) error {
func (h *Handle) LinkSetMasterByIndex(link Link, masterIndex int) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(base.Index)
req.AddData(msg)
b := make([]byte, 4)
native.PutUint32(b, uint32(masterIndex))
- data := nl.NewRtAttr(syscall.IFLA_MASTER, b)
+ data := nl.NewRtAttr(unix.IFLA_MASTER, b)
req.AddData(data)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -452,19 +591,19 @@ func LinkSetNsPid(link Link, nspid int) error {
func (h *Handle) LinkSetNsPid(link Link, nspid int) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(base.Index)
req.AddData(msg)
b := make([]byte, 4)
native.PutUint32(b, uint32(nspid))
- data := nl.NewRtAttr(syscall.IFLA_NET_NS_PID, b)
+ data := nl.NewRtAttr(unix.IFLA_NET_NS_PID, b)
req.AddData(data)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -481,36 +620,42 @@ func LinkSetNsFd(link Link, fd int) error {
func (h *Handle) LinkSetNsFd(link Link, fd int) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(base.Index)
req.AddData(msg)
b := make([]byte, 4)
native.PutUint32(b, uint32(fd))
- data := nl.NewRtAttr(nl.IFLA_NET_NS_FD, b)
+ data := nl.NewRtAttr(unix.IFLA_NET_NS_FD, b)
req.AddData(data)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
// LinkSetXdpFd adds a bpf function to the driver. The fd must be a bpf
// program loaded with bpf(type=BPF_PROG_TYPE_XDP)
func LinkSetXdpFd(link Link, fd int) error {
+ return LinkSetXdpFdWithFlags(link, fd, 0)
+}
+
+// LinkSetXdpFdWithFlags adds a bpf function to the driver with the given
+// options. The fd must be a bpf program loaded with bpf(type=BPF_PROG_TYPE_XDP)
+func LinkSetXdpFdWithFlags(link Link, fd, flags int) error {
base := link.Attrs()
ensureIndex(base)
- req := nl.NewNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := nl.NewNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(base.Index)
req.AddData(msg)
- addXdpAttrs(&LinkXdp{Fd: fd}, req)
+ addXdpAttrs(&LinkXdp{Fd: fd, Flags: uint32(flags)}, req)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -568,6 +713,8 @@ func addVxlanAttrs(vxlan *Vxlan, linkInfo *nl.RtAttr) {
nl.NewRtAttrChild(data, nl.IFLA_VXLAN_RSC, boolAttr(vxlan.RSC))
nl.NewRtAttrChild(data, nl.IFLA_VXLAN_L2MISS, boolAttr(vxlan.L2miss))
nl.NewRtAttrChild(data, nl.IFLA_VXLAN_L3MISS, boolAttr(vxlan.L3miss))
+ nl.NewRtAttrChild(data, nl.IFLA_VXLAN_UDP_ZERO_CSUM6_TX, boolAttr(vxlan.UDP6ZeroCSumTx))
+ nl.NewRtAttrChild(data, nl.IFLA_VXLAN_UDP_ZERO_CSUM6_RX, boolAttr(vxlan.UDP6ZeroCSumRx))
if vxlan.UDPCSum {
nl.NewRtAttrChild(data, nl.IFLA_VXLAN_UDP_CSUM, boolAttr(vxlan.UDPCSum))
@@ -692,6 +839,12 @@ func addBondAttrs(bond *Bond, linkInfo *nl.RtAttr) {
}
}
+func cleanupFds(fds []*os.File) {
+ for _, f := range fds {
+ f.Close()
+ }
+}
+
// LinkAdd adds a new link device. The type and features of the device
// are taken from the parameters in the link object.
// Equivalent to: `ip link add $link`
@@ -703,7 +856,7 @@ func LinkAdd(link Link) error {
// are taken fromt the parameters in the link object.
// Equivalent to: `ip link add $link`
func (h *Handle) LinkAdd(link Link) error {
- return h.linkModify(link, syscall.NLM_F_CREATE|syscall.NLM_F_EXCL|syscall.NLM_F_ACK)
+ return h.linkModify(link, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
}
func (h *Handle) linkModify(link Link, flags int) error {
@@ -717,104 +870,155 @@ func (h *Handle) linkModify(link Link, flags int) error {
if tuntap, ok := link.(*Tuntap); ok {
// TODO: support user
// TODO: support group
- // TODO: multi_queue
// TODO: support non- persistent
- if tuntap.Mode < syscall.IFF_TUN || tuntap.Mode > syscall.IFF_TAP {
+ if tuntap.Mode < unix.IFF_TUN || tuntap.Mode > unix.IFF_TAP {
return fmt.Errorf("Tuntap.Mode %v unknown!", tuntap.Mode)
}
- file, err := os.OpenFile("/dev/net/tun", os.O_RDWR, 0)
- if err != nil {
- return err
- }
- defer file.Close()
+
+ queues := tuntap.Queues
+
+ var fds []*os.File
var req ifReq
- if tuntap.Flags == 0 {
- req.Flags = uint16(TUNTAP_DEFAULTS)
+ copy(req.Name[:15], base.Name)
+
+ req.Flags = uint16(tuntap.Flags)
+
+ if queues == 0 { //Legacy compatibility
+ queues = 1
+ if tuntap.Flags == 0 {
+ req.Flags = uint16(TUNTAP_DEFAULTS)
+ }
} else {
- req.Flags = uint16(tuntap.Flags)
+ // For best peformance set Flags to TUNTAP_MULTI_QUEUE_DEFAULTS | TUNTAP_VNET_HDR
+ // when a) KVM has support for this ABI and
+ // b) the value of the flag is queryable using the TUNGETIFF ioctl
+ if tuntap.Flags == 0 {
+ req.Flags = uint16(TUNTAP_MULTI_QUEUE_DEFAULTS)
+ }
}
+
req.Flags |= uint16(tuntap.Mode)
- copy(req.Name[:15], base.Name)
- _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, file.Fd(), uintptr(syscall.TUNSETIFF), uintptr(unsafe.Pointer(&req)))
- if errno != 0 {
- return fmt.Errorf("Tuntap IOCTL TUNSETIFF failed, errno %v", errno)
+
+ for i := 0; i < queues; i++ {
+ localReq := req
+ file, err := os.OpenFile("/dev/net/tun", os.O_RDWR, 0)
+ if err != nil {
+ cleanupFds(fds)
+ return err
+ }
+
+ fds = append(fds, file)
+ _, _, errno := unix.Syscall(unix.SYS_IOCTL, file.Fd(), uintptr(unix.TUNSETIFF), uintptr(unsafe.Pointer(&localReq)))
+ if errno != 0 {
+ cleanupFds(fds)
+ return fmt.Errorf("Tuntap IOCTL TUNSETIFF failed [%d], errno %v", i, errno)
+ }
}
- _, _, errno = syscall.Syscall(syscall.SYS_IOCTL, file.Fd(), uintptr(syscall.TUNSETPERSIST), 1)
+
+ _, _, errno := unix.Syscall(unix.SYS_IOCTL, fds[0].Fd(), uintptr(unix.TUNSETPERSIST), 1)
if errno != 0 {
+ cleanupFds(fds)
return fmt.Errorf("Tuntap IOCTL TUNSETPERSIST failed, errno %v", errno)
}
+
h.ensureIndex(base)
// can't set master during create, so set it afterwards
if base.MasterIndex != 0 {
// TODO: verify MasterIndex is actually a bridge?
- return h.LinkSetMasterByIndex(link, base.MasterIndex)
+ err := h.LinkSetMasterByIndex(link, base.MasterIndex)
+ if err != nil {
+ _, _, _ = unix.Syscall(unix.SYS_IOCTL, fds[0].Fd(), uintptr(unix.TUNSETPERSIST), 0)
+ cleanupFds(fds)
+ return err
+ }
+ }
+
+ if tuntap.Queues == 0 {
+ cleanupFds(fds)
+ } else {
+ tuntap.Fds = fds
}
+
return nil
}
- req := h.newNetlinkRequest(syscall.RTM_NEWLINK, flags)
+ req := h.newNetlinkRequest(unix.RTM_NEWLINK, flags)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
// TODO: make it shorter
if base.Flags&net.FlagUp != 0 {
- msg.Change = syscall.IFF_UP
- msg.Flags = syscall.IFF_UP
+ msg.Change = unix.IFF_UP
+ msg.Flags = unix.IFF_UP
}
if base.Flags&net.FlagBroadcast != 0 {
- msg.Change |= syscall.IFF_BROADCAST
- msg.Flags |= syscall.IFF_BROADCAST
+ msg.Change |= unix.IFF_BROADCAST
+ msg.Flags |= unix.IFF_BROADCAST
}
if base.Flags&net.FlagLoopback != 0 {
- msg.Change |= syscall.IFF_LOOPBACK
- msg.Flags |= syscall.IFF_LOOPBACK
+ msg.Change |= unix.IFF_LOOPBACK
+ msg.Flags |= unix.IFF_LOOPBACK
}
if base.Flags&net.FlagPointToPoint != 0 {
- msg.Change |= syscall.IFF_POINTOPOINT
- msg.Flags |= syscall.IFF_POINTOPOINT
+ msg.Change |= unix.IFF_POINTOPOINT
+ msg.Flags |= unix.IFF_POINTOPOINT
}
if base.Flags&net.FlagMulticast != 0 {
- msg.Change |= syscall.IFF_MULTICAST
- msg.Flags |= syscall.IFF_MULTICAST
+ msg.Change |= unix.IFF_MULTICAST
+ msg.Flags |= unix.IFF_MULTICAST
+ }
+ if base.Index != 0 {
+ msg.Index = int32(base.Index)
}
+
req.AddData(msg)
if base.ParentIndex != 0 {
b := make([]byte, 4)
native.PutUint32(b, uint32(base.ParentIndex))
- data := nl.NewRtAttr(syscall.IFLA_LINK, b)
+ data := nl.NewRtAttr(unix.IFLA_LINK, b)
req.AddData(data)
} else if link.Type() == "ipvlan" {
return fmt.Errorf("Can't create ipvlan link without ParentIndex")
}
- nameData := nl.NewRtAttr(syscall.IFLA_IFNAME, nl.ZeroTerminated(base.Name))
+ nameData := nl.NewRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(base.Name))
req.AddData(nameData)
if base.MTU > 0 {
- mtu := nl.NewRtAttr(syscall.IFLA_MTU, nl.Uint32Attr(uint32(base.MTU)))
+ mtu := nl.NewRtAttr(unix.IFLA_MTU, nl.Uint32Attr(uint32(base.MTU)))
req.AddData(mtu)
}
if base.TxQLen >= 0 {
- qlen := nl.NewRtAttr(syscall.IFLA_TXQLEN, nl.Uint32Attr(uint32(base.TxQLen)))
+ qlen := nl.NewRtAttr(unix.IFLA_TXQLEN, nl.Uint32Attr(uint32(base.TxQLen)))
req.AddData(qlen)
}
if base.HardwareAddr != nil {
- hwaddr := nl.NewRtAttr(syscall.IFLA_ADDRESS, []byte(base.HardwareAddr))
+ hwaddr := nl.NewRtAttr(unix.IFLA_ADDRESS, []byte(base.HardwareAddr))
req.AddData(hwaddr)
}
+ if base.NumTxQueues > 0 {
+ txqueues := nl.NewRtAttr(unix.IFLA_NUM_TX_QUEUES, nl.Uint32Attr(uint32(base.NumTxQueues)))
+ req.AddData(txqueues)
+ }
+
+ if base.NumRxQueues > 0 {
+ rxqueues := nl.NewRtAttr(unix.IFLA_NUM_RX_QUEUES, nl.Uint32Attr(uint32(base.NumRxQueues)))
+ req.AddData(rxqueues)
+ }
+
if base.Namespace != nil {
var attr *nl.RtAttr
switch base.Namespace.(type) {
case NsPid:
val := nl.Uint32Attr(uint32(base.Namespace.(NsPid)))
- attr = nl.NewRtAttr(syscall.IFLA_NET_NS_PID, val)
+ attr = nl.NewRtAttr(unix.IFLA_NET_NS_PID, val)
case NsFd:
val := nl.Uint32Attr(uint32(base.Namespace.(NsFd)))
- attr = nl.NewRtAttr(nl.IFLA_NET_NS_FD, val)
+ attr = nl.NewRtAttr(unix.IFLA_NET_NS_FD, val)
}
req.AddData(attr)
@@ -824,60 +1028,65 @@ func (h *Handle) linkModify(link Link, flags int) error {
addXdpAttrs(base.Xdp, req)
}
- linkInfo := nl.NewRtAttr(syscall.IFLA_LINKINFO, nil)
+ linkInfo := nl.NewRtAttr(unix.IFLA_LINKINFO, nil)
nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_KIND, nl.NonZeroTerminated(link.Type()))
- if vlan, ok := link.(*Vlan); ok {
+ switch link := link.(type) {
+ case *Vlan:
b := make([]byte, 2)
- native.PutUint16(b, uint16(vlan.VlanId))
+ native.PutUint16(b, uint16(link.VlanId))
data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
nl.NewRtAttrChild(data, nl.IFLA_VLAN_ID, b)
- } else if veth, ok := link.(*Veth); ok {
+ case *Veth:
data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
peer := nl.NewRtAttrChild(data, nl.VETH_INFO_PEER, nil)
- nl.NewIfInfomsgChild(peer, syscall.AF_UNSPEC)
- nl.NewRtAttrChild(peer, syscall.IFLA_IFNAME, nl.ZeroTerminated(veth.PeerName))
+ nl.NewIfInfomsgChild(peer, unix.AF_UNSPEC)
+ nl.NewRtAttrChild(peer, unix.IFLA_IFNAME, nl.ZeroTerminated(link.PeerName))
if base.TxQLen >= 0 {
- nl.NewRtAttrChild(peer, syscall.IFLA_TXQLEN, nl.Uint32Attr(uint32(base.TxQLen)))
+ nl.NewRtAttrChild(peer, unix.IFLA_TXQLEN, nl.Uint32Attr(uint32(base.TxQLen)))
}
if base.MTU > 0 {
- nl.NewRtAttrChild(peer, syscall.IFLA_MTU, nl.Uint32Attr(uint32(base.MTU)))
+ nl.NewRtAttrChild(peer, unix.IFLA_MTU, nl.Uint32Attr(uint32(base.MTU)))
}
- } else if vxlan, ok := link.(*Vxlan); ok {
- addVxlanAttrs(vxlan, linkInfo)
- } else if bond, ok := link.(*Bond); ok {
- addBondAttrs(bond, linkInfo)
- } else if ipv, ok := link.(*IPVlan); ok {
+ case *Vxlan:
+ addVxlanAttrs(link, linkInfo)
+ case *Bond:
+ addBondAttrs(link, linkInfo)
+ case *IPVlan:
data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
- nl.NewRtAttrChild(data, nl.IFLA_IPVLAN_MODE, nl.Uint16Attr(uint16(ipv.Mode)))
- } else if macv, ok := link.(*Macvlan); ok {
- if macv.Mode != MACVLAN_MODE_DEFAULT {
+ nl.NewRtAttrChild(data, nl.IFLA_IPVLAN_MODE, nl.Uint16Attr(uint16(link.Mode)))
+ case *Macvlan:
+ if link.Mode != MACVLAN_MODE_DEFAULT {
data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
- nl.NewRtAttrChild(data, nl.IFLA_MACVLAN_MODE, nl.Uint32Attr(macvlanModes[macv.Mode]))
+ nl.NewRtAttrChild(data, nl.IFLA_MACVLAN_MODE, nl.Uint32Attr(macvlanModes[link.Mode]))
}
- } else if macv, ok := link.(*Macvtap); ok {
- if macv.Mode != MACVLAN_MODE_DEFAULT {
+ case *Macvtap:
+ if link.Mode != MACVLAN_MODE_DEFAULT {
data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
- nl.NewRtAttrChild(data, nl.IFLA_MACVLAN_MODE, nl.Uint32Attr(macvlanModes[macv.Mode]))
+ nl.NewRtAttrChild(data, nl.IFLA_MACVLAN_MODE, nl.Uint32Attr(macvlanModes[link.Mode]))
}
- } else if gretap, ok := link.(*Gretap); ok {
- addGretapAttrs(gretap, linkInfo)
- } else if iptun, ok := link.(*Iptun); ok {
- addIptunAttrs(iptun, linkInfo)
- } else if vti, ok := link.(*Vti); ok {
- addVtiAttrs(vti, linkInfo)
- } else if vrf, ok := link.(*Vrf); ok {
- addVrfAttrs(vrf, linkInfo)
- } else if bridge, ok := link.(*Bridge); ok {
- addBridgeAttrs(bridge, linkInfo)
- } else if gtp, ok := link.(*GTP); ok {
- addGTPAttrs(gtp, linkInfo)
+ case *Gretap:
+ addGretapAttrs(link, linkInfo)
+ case *Iptun:
+ addIptunAttrs(link, linkInfo)
+ case *Sittun:
+ addSittunAttrs(link, linkInfo)
+ case *Gretun:
+ addGretunAttrs(link, linkInfo)
+ case *Vti:
+ addVtiAttrs(link, linkInfo)
+ case *Vrf:
+ addVrfAttrs(link, linkInfo)
+ case *Bridge:
+ addBridgeAttrs(link, linkInfo)
+ case *GTP:
+ addGTPAttrs(link, linkInfo)
}
req.AddData(linkInfo)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
if err != nil {
return err
}
@@ -907,13 +1116,13 @@ func (h *Handle) LinkDel(link Link) error {
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_DELLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_DELLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(base.Index)
req.AddData(msg)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -956,16 +1165,16 @@ func (h *Handle) LinkByName(name string) (Link, error) {
return h.linkByNameDump(name)
}
- req := h.newNetlinkRequest(syscall.RTM_GETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
req.AddData(msg)
- nameData := nl.NewRtAttr(syscall.IFLA_IFNAME, nl.ZeroTerminated(name))
+ nameData := nl.NewRtAttr(unix.IFLA_IFNAME, nl.ZeroTerminated(name))
req.AddData(nameData)
link, err := execGetLink(req)
- if err == syscall.EINVAL {
+ if err == unix.EINVAL {
// older kernels don't support looking up via IFLA_IFNAME
// so fall back to dumping all links
h.lookupByDump = true
@@ -988,16 +1197,16 @@ func (h *Handle) LinkByAlias(alias string) (Link, error) {
return h.linkByAliasDump(alias)
}
- req := h.newNetlinkRequest(syscall.RTM_GETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
req.AddData(msg)
- nameData := nl.NewRtAttr(syscall.IFLA_IFALIAS, nl.ZeroTerminated(alias))
+ nameData := nl.NewRtAttr(unix.IFLA_IFALIAS, nl.ZeroTerminated(alias))
req.AddData(nameData)
link, err := execGetLink(req)
- if err == syscall.EINVAL {
+ if err == unix.EINVAL {
// older kernels don't support looking up via IFLA_IFALIAS
// so fall back to dumping all links
h.lookupByDump = true
@@ -1014,9 +1223,9 @@ func LinkByIndex(index int) (Link, error) {
// LinkByIndex finds a link by index and returns a pointer to the object.
func (h *Handle) LinkByIndex(index int) (Link, error) {
- req := h.newNetlinkRequest(syscall.RTM_GETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
msg.Index = int32(index)
req.AddData(msg)
@@ -1024,10 +1233,10 @@ func (h *Handle) LinkByIndex(index int) (Link, error) {
}
func execGetLink(req *nl.NetlinkRequest) (Link, error) {
- msgs, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ msgs, err := req.Execute(unix.NETLINK_ROUTE, 0)
if err != nil {
if errno, ok := err.(syscall.Errno); ok {
- if errno == syscall.ENODEV {
+ if errno == unix.ENODEV {
return nil, LinkNotFoundError{fmt.Errorf("Link not found")}
}
}
@@ -1048,7 +1257,7 @@ func execGetLink(req *nl.NetlinkRequest) (Link, error) {
// linkDeserialize deserializes a raw message received from netlink into
// a link object.
-func LinkDeserialize(hdr *syscall.NlMsghdr, m []byte) (Link, error) {
+func LinkDeserialize(hdr *unix.NlMsghdr, m []byte) (Link, error) {
msg := nl.DeserializeIfInfomsg(m)
attrs, err := nl.ParseRouteAttr(m[msg.Len():])
@@ -1057,7 +1266,7 @@ func LinkDeserialize(hdr *syscall.NlMsghdr, m []byte) (Link, error) {
}
base := LinkAttrs{Index: int(msg.Index), RawFlags: msg.Flags, Flags: linkFlags(msg.Flags), EncapType: msg.EncapType()}
- if msg.Flags&syscall.IFF_PROMISC != 0 {
+ if msg.Flags&unix.IFF_PROMISC != 0 {
base.Promisc = 1
}
var (
@@ -1068,7 +1277,7 @@ func LinkDeserialize(hdr *syscall.NlMsghdr, m []byte) (Link, error) {
)
for _, attr := range attrs {
switch attr.Attr.Type {
- case syscall.IFLA_LINKINFO:
+ case unix.IFLA_LINKINFO:
infos, err := nl.ParseRouteAttr(attr.Value)
if err != nil {
return nil, err
@@ -1100,8 +1309,16 @@ func LinkDeserialize(hdr *syscall.NlMsghdr, m []byte) (Link, error) {
link = &Macvtap{}
case "gretap":
link = &Gretap{}
+ case "ip6gretap":
+ link = &Gretap{}
case "ipip":
link = &Iptun{}
+ case "sit":
+ link = &Sittun{}
+ case "gre":
+ link = &Gretun{}
+ case "ip6gre":
+ link = &Gretun{}
case "vti":
link = &Vti{}
case "vrf":
@@ -1131,8 +1348,16 @@ func LinkDeserialize(hdr *syscall.NlMsghdr, m []byte) (Link, error) {
parseMacvtapData(link, data)
case "gretap":
parseGretapData(link, data)
+ case "ip6gretap":
+ parseGretapData(link, data)
case "ipip":
parseIptunData(link, data)
+ case "sit":
+ parseSittunData(link, data)
+ case "gre":
+ parseGretunData(link, data)
+ case "ip6gre":
+ parseGretunData(link, data)
case "vti":
parseVtiData(link, data)
case "vrf":
@@ -1144,7 +1369,7 @@ func LinkDeserialize(hdr *syscall.NlMsghdr, m []byte) (Link, error) {
}
}
}
- case syscall.IFLA_ADDRESS:
+ case unix.IFLA_ADDRESS:
var nonzero bool
for _, b := range attr.Value {
if b != 0 {
@@ -1154,39 +1379,41 @@ func LinkDeserialize(hdr *syscall.NlMsghdr, m []byte) (Link, error) {
if nonzero {
base.HardwareAddr = attr.Value[:]
}
- case syscall.IFLA_IFNAME:
+ case unix.IFLA_IFNAME:
base.Name = string(attr.Value[:len(attr.Value)-1])
- case syscall.IFLA_MTU:
+ case unix.IFLA_MTU:
base.MTU = int(native.Uint32(attr.Value[0:4]))
- case syscall.IFLA_LINK:
+ case unix.IFLA_LINK:
base.ParentIndex = int(native.Uint32(attr.Value[0:4]))
- case syscall.IFLA_MASTER:
+ case unix.IFLA_MASTER:
base.MasterIndex = int(native.Uint32(attr.Value[0:4]))
- case syscall.IFLA_TXQLEN:
+ case unix.IFLA_TXQLEN:
base.TxQLen = int(native.Uint32(attr.Value[0:4]))
- case syscall.IFLA_IFALIAS:
+ case unix.IFLA_IFALIAS:
base.Alias = string(attr.Value[:len(attr.Value)-1])
- case syscall.IFLA_STATS:
+ case unix.IFLA_STATS:
stats32 = attr.Value[:]
- case IFLA_STATS64:
+ case unix.IFLA_STATS64:
stats64 = attr.Value[:]
- case nl.IFLA_XDP:
+ case unix.IFLA_XDP:
xdp, err := parseLinkXdp(attr.Value[:])
if err != nil {
return nil, err
}
base.Xdp = xdp
- case syscall.IFLA_PROTINFO | syscall.NLA_F_NESTED:
- if hdr != nil && hdr.Type == syscall.RTM_NEWLINK &&
- msg.Family == syscall.AF_BRIDGE {
+ case unix.IFLA_PROTINFO | unix.NLA_F_NESTED:
+ if hdr != nil && hdr.Type == unix.RTM_NEWLINK &&
+ msg.Family == unix.AF_BRIDGE {
attrs, err := nl.ParseRouteAttr(attr.Value[:])
if err != nil {
return nil, err
}
base.Protinfo = parseProtinfo(attrs)
}
- case syscall.IFLA_OPERSTATE:
+ case unix.IFLA_OPERSTATE:
base.OperState = LinkOperState(uint8(attr.Value[0]))
+ case unix.IFLA_LINK_NETNSID:
+ base.NetNsID = int(native.Uint32(attr.Value[0:4]))
}
}
@@ -1216,12 +1443,12 @@ func LinkList() ([]Link, error) {
func (h *Handle) LinkList() ([]Link, error) {
// NOTE(vish): This duplicates functionality in net/iface_linux.go, but we need
// to get the message ourselves to parse link type.
- req := h.newNetlinkRequest(syscall.RTM_GETLINK, syscall.NLM_F_DUMP)
+ req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)
- msg := nl.NewIfInfomsg(syscall.AF_UNSPEC)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
req.AddData(msg)
- msgs, err := req.Execute(syscall.NETLINK_ROUTE, syscall.RTM_NEWLINK)
+ msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWLINK)
if err != nil {
return nil, err
}
@@ -1241,24 +1468,43 @@ func (h *Handle) LinkList() ([]Link, error) {
// LinkUpdate is used to pass information back from LinkSubscribe()
type LinkUpdate struct {
nl.IfInfomsg
- Header syscall.NlMsghdr
+ Header unix.NlMsghdr
Link
}
// LinkSubscribe takes a chan down which notifications will be sent
// when links change. Close the 'done' chan to stop subscription.
func LinkSubscribe(ch chan<- LinkUpdate, done <-chan struct{}) error {
- return linkSubscribe(netns.None(), netns.None(), ch, done)
+ return linkSubscribeAt(netns.None(), netns.None(), ch, done, nil, false)
}
// LinkSubscribeAt works like LinkSubscribe plus it allows the caller
// to choose the network namespace in which to subscribe (ns).
func LinkSubscribeAt(ns netns.NsHandle, ch chan<- LinkUpdate, done <-chan struct{}) error {
- return linkSubscribe(ns, netns.None(), ch, done)
+ return linkSubscribeAt(ns, netns.None(), ch, done, nil, false)
+}
+
+// LinkSubscribeOptions contains a set of options to use with
+// LinkSubscribeWithOptions.
+type LinkSubscribeOptions struct {
+ Namespace *netns.NsHandle
+ ErrorCallback func(error)
+ ListExisting bool
+}
+
+// LinkSubscribeWithOptions work like LinkSubscribe but enable to
+// provide additional options to modify the behavior. Currently, the
+// namespace can be provided as well as an error callback.
+func LinkSubscribeWithOptions(ch chan<- LinkUpdate, done <-chan struct{}, options LinkSubscribeOptions) error {
+ if options.Namespace == nil {
+ none := netns.None()
+ options.Namespace = &none
+ }
+ return linkSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting)
}
-func linkSubscribe(newNs, curNs netns.NsHandle, ch chan<- LinkUpdate, done <-chan struct{}) error {
- s, err := nl.SubscribeAt(newNs, curNs, syscall.NETLINK_ROUTE, syscall.RTNLGRP_LINK)
+func linkSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- LinkUpdate, done <-chan struct{}, cberr func(error), listExisting bool) error {
+ s, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_LINK)
if err != nil {
return err
}
@@ -1268,20 +1514,50 @@ func linkSubscribe(newNs, curNs netns.NsHandle, ch chan<- LinkUpdate, done <-cha
s.Close()
}()
}
+ if listExisting {
+ req := pkgHandle.newNetlinkRequest(unix.RTM_GETLINK,
+ unix.NLM_F_DUMP)
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ req.AddData(msg)
+ if err := s.Send(req); err != nil {
+ return err
+ }
+ }
go func() {
defer close(ch)
for {
msgs, err := s.Receive()
if err != nil {
+ if cberr != nil {
+ cberr(err)
+ }
return
}
for _, m := range msgs {
+ if m.Header.Type == unix.NLMSG_DONE {
+ continue
+ }
+ if m.Header.Type == unix.NLMSG_ERROR {
+ native := nl.NativeEndian()
+ error := int32(native.Uint32(m.Data[0:4]))
+ if error == 0 {
+ continue
+ }
+ if cberr != nil {
+ cberr(syscall.Errno(-error))
+ }
+ return
+ }
ifmsg := nl.DeserializeIfInfomsg(m.Data)
- link, err := LinkDeserialize(&m.Header, m.Data)
+ header := unix.NlMsghdr(m.Header)
+ link, err := LinkDeserialize(&header, m.Data)
if err != nil {
+ if cberr != nil {
+ cberr(err)
+ }
return
}
- ch <- LinkUpdate{IfInfomsg: *ifmsg, Header: m.Header, Link: link}
+ ch <- LinkUpdate{IfInfomsg: *ifmsg, Header: header, Link: link}
}
}
}()
@@ -1356,22 +1632,49 @@ func (h *Handle) LinkSetBrProxyArpWiFi(link Link, mode bool) error {
func (h *Handle) setProtinfoAttr(link Link, mode bool, attr int) error {
base := link.Attrs()
h.ensureIndex(base)
- req := h.newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
- msg := nl.NewIfInfomsg(syscall.AF_BRIDGE)
+ msg := nl.NewIfInfomsg(unix.AF_BRIDGE)
msg.Index = int32(base.Index)
req.AddData(msg)
- br := nl.NewRtAttr(syscall.IFLA_PROTINFO|syscall.NLA_F_NESTED, nil)
+ br := nl.NewRtAttr(unix.IFLA_PROTINFO|unix.NLA_F_NESTED, nil)
nl.NewRtAttrChild(br, attr, boolToByte(mode))
req.AddData(br)
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
if err != nil {
return err
}
return nil
}
+// LinkSetTxQLen sets the transaction queue length for the link.
+// Equivalent to: `ip link set $link txqlen $qlen`
+func LinkSetTxQLen(link Link, qlen int) error {
+ return pkgHandle.LinkSetTxQLen(link, qlen)
+}
+
+// LinkSetTxQLen sets the transaction queue length for the link.
+// Equivalent to: `ip link set $link txqlen $qlen`
+func (h *Handle) LinkSetTxQLen(link Link, qlen int) error {
+ base := link.Attrs()
+ h.ensureIndex(base)
+ req := h.newNetlinkRequest(unix.RTM_SETLINK, unix.NLM_F_ACK)
+
+ msg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ msg.Index = int32(base.Index)
+ req.AddData(msg)
+
+ b := make([]byte, 4)
+ native.PutUint32(b, uint32(qlen))
+
+ data := nl.NewRtAttr(unix.IFLA_TXQLEN, b)
+ req.AddData(data)
+
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
+ return err
+}
+
func parseVlanData(link Link, data []syscall.NetlinkRouteAttr) {
vlan := link.(*Vlan)
for _, datum := range data {
@@ -1414,6 +1717,10 @@ func parseVxlanData(link Link, data []syscall.NetlinkRouteAttr) {
vxlan.L3miss = int8(datum.Value[0]) != 0
case nl.IFLA_VXLAN_UDP_CSUM:
vxlan.UDPCSum = int8(datum.Value[0]) != 0
+ case nl.IFLA_VXLAN_UDP_ZERO_CSUM6_TX:
+ vxlan.UDP6ZeroCSumTx = int8(datum.Value[0]) != 0
+ case nl.IFLA_VXLAN_UDP_ZERO_CSUM6_RX:
+ vxlan.UDP6ZeroCSumRx = int8(datum.Value[0]) != 0
case nl.IFLA_VXLAN_GBP:
vxlan.GBP = true
case nl.IFLA_VXLAN_FLOWBASED:
@@ -1516,7 +1823,8 @@ func parseMacvtapData(link Link, data []syscall.NetlinkRouteAttr) {
func parseMacvlanData(link Link, data []syscall.NetlinkRouteAttr) {
macv := link.(*Macvlan)
for _, datum := range data {
- if datum.Attr.Type == nl.IFLA_MACVLAN_MODE {
+ switch datum.Attr.Type {
+ case nl.IFLA_MACVLAN_MODE:
switch native.Uint32(datum.Value[0:4]) {
case nl.MACVLAN_MODE_PRIVATE:
macv.Mode = MACVLAN_MODE_PRIVATE
@@ -1529,7 +1837,16 @@ func parseMacvlanData(link Link, data []syscall.NetlinkRouteAttr) {
case nl.MACVLAN_MODE_SOURCE:
macv.Mode = MACVLAN_MODE_SOURCE
}
- return
+ case nl.IFLA_MACVLAN_MACADDR_COUNT:
+ macv.MACAddrs = make([]net.HardwareAddr, 0, int(native.Uint32(datum.Value[0:4])))
+ case nl.IFLA_MACVLAN_MACADDR_DATA:
+ macs, err := nl.ParseRouteAttr(datum.Value[:])
+ if err != nil {
+ panic(fmt.Sprintf("failed to ParseRouteAttr for IFLA_MACVLAN_MACADDR_DATA: %v", err))
+ }
+ for _, macDatum := range macs {
+ macv.MACAddrs = append(macv.MACAddrs, net.HardwareAddr(macDatum.Value[0:6]))
+ }
}
}
}
@@ -1537,19 +1854,19 @@ func parseMacvlanData(link Link, data []syscall.NetlinkRouteAttr) {
// copied from pkg/net_linux.go
func linkFlags(rawFlags uint32) net.Flags {
var f net.Flags
- if rawFlags&syscall.IFF_UP != 0 {
+ if rawFlags&unix.IFF_UP != 0 {
f |= net.FlagUp
}
- if rawFlags&syscall.IFF_BROADCAST != 0 {
+ if rawFlags&unix.IFF_BROADCAST != 0 {
f |= net.FlagBroadcast
}
- if rawFlags&syscall.IFF_LOOPBACK != 0 {
+ if rawFlags&unix.IFF_LOOPBACK != 0 {
f |= net.FlagLoopback
}
- if rawFlags&syscall.IFF_POINTOPOINT != 0 {
+ if rawFlags&unix.IFF_POINTOPOINT != 0 {
f |= net.FlagPointToPoint
}
- if rawFlags&syscall.IFF_MULTICAST != 0 {
+ if rawFlags&unix.IFF_MULTICAST != 0 {
f |= net.FlagMulticast
}
return f
@@ -1564,12 +1881,17 @@ func addGretapAttrs(gretap *Gretap, linkInfo *nl.RtAttr) {
return
}
- ip := gretap.Local.To4()
- if ip != nil {
+ if ip := gretap.Local; ip != nil {
+ if ip.To4() != nil {
+ ip = ip.To4()
+ }
nl.NewRtAttrChild(data, nl.IFLA_GRE_LOCAL, []byte(ip))
}
- ip = gretap.Remote.To4()
- if ip != nil {
+
+ if ip := gretap.Remote; ip != nil {
+ if ip.To4() != nil {
+ ip = ip.To4()
+ }
nl.NewRtAttrChild(data, nl.IFLA_GRE_REMOTE, []byte(ip))
}
@@ -1608,9 +1930,9 @@ func parseGretapData(link Link, data []syscall.NetlinkRouteAttr) {
case nl.IFLA_GRE_IKEY:
gre.OKey = ntohl(datum.Value[0:4])
case nl.IFLA_GRE_LOCAL:
- gre.Local = net.IP(datum.Value[0:4])
+ gre.Local = net.IP(datum.Value[0:16])
case nl.IFLA_GRE_REMOTE:
- gre.Remote = net.IP(datum.Value[0:4])
+ gre.Remote = net.IP(datum.Value[0:16])
case nl.IFLA_GRE_ENCAP_SPORT:
gre.EncapSport = ntohs(datum.Value[0:2])
case nl.IFLA_GRE_ENCAP_DPORT:
@@ -1631,7 +1953,87 @@ func parseGretapData(link Link, data []syscall.NetlinkRouteAttr) {
case nl.IFLA_GRE_ENCAP_FLAGS:
gre.EncapFlags = native.Uint16(datum.Value[0:2])
case nl.IFLA_GRE_COLLECT_METADATA:
- gre.FlowBased = int8(datum.Value[0]) != 0
+ if len(datum.Value) > 0 {
+ gre.FlowBased = int8(datum.Value[0]) != 0
+ }
+ }
+ }
+}
+
+func addGretunAttrs(gre *Gretun, linkInfo *nl.RtAttr) {
+ data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
+
+ if ip := gre.Local; ip != nil {
+ if ip.To4() != nil {
+ ip = ip.To4()
+ }
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_LOCAL, []byte(ip))
+ }
+
+ if ip := gre.Remote; ip != nil {
+ if ip.To4() != nil {
+ ip = ip.To4()
+ }
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_REMOTE, []byte(ip))
+ }
+
+ if gre.IKey != 0 {
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_IKEY, htonl(gre.IKey))
+ gre.IFlags |= uint16(nl.GRE_KEY)
+ }
+
+ if gre.OKey != 0 {
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_OKEY, htonl(gre.OKey))
+ gre.OFlags |= uint16(nl.GRE_KEY)
+ }
+
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_IFLAGS, htons(gre.IFlags))
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_OFLAGS, htons(gre.OFlags))
+
+ if gre.Link != 0 {
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_LINK, nl.Uint32Attr(gre.Link))
+ }
+
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_PMTUDISC, nl.Uint8Attr(gre.PMtuDisc))
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_TTL, nl.Uint8Attr(gre.Ttl))
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_TOS, nl.Uint8Attr(gre.Tos))
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_ENCAP_TYPE, nl.Uint16Attr(gre.EncapType))
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_ENCAP_FLAGS, nl.Uint16Attr(gre.EncapFlags))
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_ENCAP_SPORT, htons(gre.EncapSport))
+ nl.NewRtAttrChild(data, nl.IFLA_GRE_ENCAP_DPORT, htons(gre.EncapDport))
+}
+
+func parseGretunData(link Link, data []syscall.NetlinkRouteAttr) {
+ gre := link.(*Gretun)
+ for _, datum := range data {
+ switch datum.Attr.Type {
+ case nl.IFLA_GRE_OKEY:
+ gre.IKey = ntohl(datum.Value[0:4])
+ case nl.IFLA_GRE_IKEY:
+ gre.OKey = ntohl(datum.Value[0:4])
+ case nl.IFLA_GRE_LOCAL:
+ gre.Local = net.IP(datum.Value[0:16])
+ case nl.IFLA_GRE_REMOTE:
+ gre.Remote = net.IP(datum.Value[0:16])
+ case nl.IFLA_GRE_IFLAGS:
+ gre.IFlags = ntohs(datum.Value[0:2])
+ case nl.IFLA_GRE_OFLAGS:
+ gre.OFlags = ntohs(datum.Value[0:2])
+
+ case nl.IFLA_GRE_TTL:
+ gre.Ttl = uint8(datum.Value[0])
+ case nl.IFLA_GRE_TOS:
+ gre.Tos = uint8(datum.Value[0])
+ case nl.IFLA_GRE_PMTUDISC:
+ gre.PMtuDisc = uint8(datum.Value[0])
+ case nl.IFLA_GRE_ENCAP_TYPE:
+ gre.EncapType = native.Uint16(datum.Value[0:2])
+ case nl.IFLA_GRE_ENCAP_FLAGS:
+ gre.EncapFlags = native.Uint16(datum.Value[0:2])
+ case nl.IFLA_GRE_ENCAP_SPORT:
+ gre.EncapSport = ntohs(datum.Value[0:2])
+ case nl.IFLA_GRE_ENCAP_DPORT:
+ gre.EncapDport = ntohs(datum.Value[0:2])
}
}
}
@@ -1645,12 +2047,15 @@ func parseLinkStats64(data []byte) *LinkStatistics {
}
func addXdpAttrs(xdp *LinkXdp, req *nl.NetlinkRequest) {
- attrs := nl.NewRtAttr(nl.IFLA_XDP|syscall.NLA_F_NESTED, nil)
+ attrs := nl.NewRtAttr(unix.IFLA_XDP|unix.NLA_F_NESTED, nil)
b := make([]byte, 4)
native.PutUint32(b, uint32(xdp.Fd))
nl.NewRtAttrChild(attrs, nl.IFLA_XDP_FD, b)
- native.PutUint32(b, xdp.Flags)
- nl.NewRtAttrChild(attrs, nl.IFLA_XDP_FLAGS, b)
+ if xdp.Flags != 0 {
+ b := make([]byte, 4)
+ native.PutUint32(b, xdp.Flags)
+ nl.NewRtAttrChild(attrs, nl.IFLA_XDP_FLAGS, b)
+ }
req.AddData(attrs)
}
@@ -1676,6 +2081,12 @@ func parseLinkXdp(data []byte) (*LinkXdp, error) {
}
func addIptunAttrs(iptun *Iptun, linkInfo *nl.RtAttr) {
+ if iptun.FlowBased {
+ // In flow based mode, no other attributes need to be configured
+ nl.NewRtAttrChild(linkInfo, nl.IFLA_IPTUN_COLLECT_METADATA, boolAttr(iptun.FlowBased))
+ return
+ }
+
data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
ip := iptun.Local.To4()
@@ -1694,6 +2105,10 @@ func addIptunAttrs(iptun *Iptun, linkInfo *nl.RtAttr) {
nl.NewRtAttrChild(data, nl.IFLA_IPTUN_PMTUDISC, nl.Uint8Attr(iptun.PMtuDisc))
nl.NewRtAttrChild(data, nl.IFLA_IPTUN_TTL, nl.Uint8Attr(iptun.Ttl))
nl.NewRtAttrChild(data, nl.IFLA_IPTUN_TOS, nl.Uint8Attr(iptun.Tos))
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_TYPE, nl.Uint16Attr(iptun.EncapType))
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_FLAGS, nl.Uint16Attr(iptun.EncapFlags))
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_SPORT, htons(iptun.EncapSport))
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_DPORT, htons(iptun.EncapDport))
}
func parseIptunData(link Link, data []syscall.NetlinkRouteAttr) {
@@ -1710,6 +2125,72 @@ func parseIptunData(link Link, data []syscall.NetlinkRouteAttr) {
iptun.Tos = uint8(datum.Value[0])
case nl.IFLA_IPTUN_PMTUDISC:
iptun.PMtuDisc = uint8(datum.Value[0])
+ case nl.IFLA_IPTUN_ENCAP_SPORT:
+ iptun.EncapSport = ntohs(datum.Value[0:2])
+ case nl.IFLA_IPTUN_ENCAP_DPORT:
+ iptun.EncapDport = ntohs(datum.Value[0:2])
+ case nl.IFLA_IPTUN_ENCAP_TYPE:
+ iptun.EncapType = native.Uint16(datum.Value[0:2])
+ case nl.IFLA_IPTUN_ENCAP_FLAGS:
+ iptun.EncapFlags = native.Uint16(datum.Value[0:2])
+ case nl.IFLA_IPTUN_COLLECT_METADATA:
+ iptun.FlowBased = int8(datum.Value[0]) != 0
+ }
+ }
+}
+
+func addSittunAttrs(sittun *Sittun, linkInfo *nl.RtAttr) {
+ data := nl.NewRtAttrChild(linkInfo, nl.IFLA_INFO_DATA, nil)
+
+ if sittun.Link != 0 {
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_LINK, nl.Uint32Attr(sittun.Link))
+ }
+
+ ip := sittun.Local.To4()
+ if ip != nil {
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_LOCAL, []byte(ip))
+ }
+
+ ip = sittun.Remote.To4()
+ if ip != nil {
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_REMOTE, []byte(ip))
+ }
+
+ if sittun.Ttl > 0 {
+ // Would otherwise fail on 3.10 kernel
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_TTL, nl.Uint8Attr(sittun.Ttl))
+ }
+
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_TOS, nl.Uint8Attr(sittun.Tos))
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_PMTUDISC, nl.Uint8Attr(sittun.PMtuDisc))
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_TYPE, nl.Uint16Attr(sittun.EncapType))
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_FLAGS, nl.Uint16Attr(sittun.EncapFlags))
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_SPORT, htons(sittun.EncapSport))
+ nl.NewRtAttrChild(data, nl.IFLA_IPTUN_ENCAP_DPORT, htons(sittun.EncapDport))
+}
+
+func parseSittunData(link Link, data []syscall.NetlinkRouteAttr) {
+ sittun := link.(*Sittun)
+ for _, datum := range data {
+ switch datum.Attr.Type {
+ case nl.IFLA_IPTUN_LOCAL:
+ sittun.Local = net.IP(datum.Value[0:4])
+ case nl.IFLA_IPTUN_REMOTE:
+ sittun.Remote = net.IP(datum.Value[0:4])
+ case nl.IFLA_IPTUN_TTL:
+ sittun.Ttl = uint8(datum.Value[0])
+ case nl.IFLA_IPTUN_TOS:
+ sittun.Tos = uint8(datum.Value[0])
+ case nl.IFLA_IPTUN_PMTUDISC:
+ sittun.PMtuDisc = uint8(datum.Value[0])
+ case nl.IFLA_IPTUN_ENCAP_TYPE:
+ sittun.EncapType = native.Uint16(datum.Value[0:2])
+ case nl.IFLA_IPTUN_ENCAP_FLAGS:
+ sittun.EncapFlags = native.Uint16(datum.Value[0:2])
+ case nl.IFLA_IPTUN_ENCAP_SPORT:
+ sittun.EncapSport = ntohs(datum.Value[0:2])
+ case nl.IFLA_IPTUN_ENCAP_DPORT:
+ sittun.EncapDport = ntohs(datum.Value[0:2])
}
}
}
@@ -1817,3 +2298,57 @@ func parseGTPData(link Link, data []syscall.NetlinkRouteAttr) {
}
}
}
+
+// LinkSetBondSlave add slave to bond link via ioctl interface.
+func LinkSetBondSlave(link Link, master *Bond) error {
+ fd, err := getSocketUDP()
+ if err != nil {
+ return err
+ }
+ defer syscall.Close(fd)
+
+ ifreq := newIocltSlaveReq(link.Attrs().Name, master.Attrs().Name)
+
+ _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), unix.SIOCBONDENSLAVE, uintptr(unsafe.Pointer(ifreq)))
+ if errno != 0 {
+ return fmt.Errorf("Failed to enslave %q to %q, errno=%v", link.Attrs().Name, master.Attrs().Name, errno)
+ }
+ return nil
+}
+
+// VethPeerIndex get veth peer index.
+func VethPeerIndex(link *Veth) (int, error) {
+ fd, err := getSocketUDP()
+ if err != nil {
+ return -1, err
+ }
+ defer syscall.Close(fd)
+
+ ifreq, sSet := newIocltStringSetReq(link.Name)
+ _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), SIOCETHTOOL, uintptr(unsafe.Pointer(ifreq)))
+ if errno != 0 {
+ return -1, fmt.Errorf("SIOCETHTOOL request for %q failed, errno=%v", link.Attrs().Name, errno)
+ }
+
+ gstrings := &ethtoolGstrings{
+ cmd: ETHTOOL_GSTRINGS,
+ stringSet: ETH_SS_STATS,
+ length: sSet.data[0],
+ }
+ ifreq.Data = uintptr(unsafe.Pointer(gstrings))
+ _, _, errno = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), SIOCETHTOOL, uintptr(unsafe.Pointer(ifreq)))
+ if errno != 0 {
+ return -1, fmt.Errorf("SIOCETHTOOL request for %q failed, errno=%v", link.Attrs().Name, errno)
+ }
+
+ stats := &ethtoolStats{
+ cmd: ETHTOOL_GSTATS,
+ nStats: gstrings.length,
+ }
+ ifreq.Data = uintptr(unsafe.Pointer(stats))
+ _, _, errno = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), SIOCETHTOOL, uintptr(unsafe.Pointer(ifreq)))
+ if errno != 0 {
+ return -1, fmt.Errorf("SIOCETHTOOL request for %q failed, errno=%v", link.Attrs().Name, errno)
+ }
+ return int(stats.data[0]), nil
+}
diff --git a/vendor/github.com/vishvananda/netlink/neigh.go b/vendor/github.com/vishvananda/netlink/neigh.go
index 0e5eb90c9..3f5cd497a 100644
--- a/vendor/github.com/vishvananda/netlink/neigh.go
+++ b/vendor/github.com/vishvananda/netlink/neigh.go
@@ -14,6 +14,9 @@ type Neigh struct {
Flags int
IP net.IP
HardwareAddr net.HardwareAddr
+ LLIPAddr net.IP //Used in the case of NHRP
+ Vlan int
+ VNI int
}
// String returns $ip/$hwaddr $label
diff --git a/vendor/github.com/vishvananda/netlink/neigh_linux.go b/vendor/github.com/vishvananda/netlink/neigh_linux.go
index f069db257..f75c22649 100644
--- a/vendor/github.com/vishvananda/netlink/neigh_linux.go
+++ b/vendor/github.com/vishvananda/netlink/neigh_linux.go
@@ -2,10 +2,10 @@ package netlink
import (
"net"
- "syscall"
"unsafe"
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
)
const (
@@ -73,7 +73,7 @@ func NeighAdd(neigh *Neigh) error {
// NeighAdd will add an IP to MAC mapping to the ARP table
// Equivalent to: `ip neigh add ....`
func (h *Handle) NeighAdd(neigh *Neigh) error {
- return h.neighAdd(neigh, syscall.NLM_F_CREATE|syscall.NLM_F_EXCL)
+ return h.neighAdd(neigh, unix.NLM_F_CREATE|unix.NLM_F_EXCL)
}
// NeighSet will add or replace an IP to MAC mapping to the ARP table
@@ -85,7 +85,7 @@ func NeighSet(neigh *Neigh) error {
// NeighSet will add or replace an IP to MAC mapping to the ARP table
// Equivalent to: `ip neigh replace....`
func (h *Handle) NeighSet(neigh *Neigh) error {
- return h.neighAdd(neigh, syscall.NLM_F_CREATE|syscall.NLM_F_REPLACE)
+ return h.neighAdd(neigh, unix.NLM_F_CREATE|unix.NLM_F_REPLACE)
}
// NeighAppend will append an entry to FDB
@@ -97,7 +97,7 @@ func NeighAppend(neigh *Neigh) error {
// NeighAppend will append an entry to FDB
// Equivalent to: `bridge fdb append...`
func (h *Handle) NeighAppend(neigh *Neigh) error {
- return h.neighAdd(neigh, syscall.NLM_F_CREATE|syscall.NLM_F_APPEND)
+ return h.neighAdd(neigh, unix.NLM_F_CREATE|unix.NLM_F_APPEND)
}
// NeighAppend will append an entry to FDB
@@ -109,7 +109,7 @@ func neighAdd(neigh *Neigh, mode int) error {
// NeighAppend will append an entry to FDB
// Equivalent to: `bridge fdb append...`
func (h *Handle) neighAdd(neigh *Neigh, mode int) error {
- req := h.newNetlinkRequest(syscall.RTM_NEWNEIGH, mode|syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_NEWNEIGH, mode|unix.NLM_F_ACK)
return neighHandle(neigh, req)
}
@@ -122,12 +122,13 @@ func NeighDel(neigh *Neigh) error {
// NeighDel will delete an IP address from a link device.
// Equivalent to: `ip addr del $addr dev $link`
func (h *Handle) NeighDel(neigh *Neigh) error {
- req := h.newNetlinkRequest(syscall.RTM_DELNEIGH, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_DELNEIGH, unix.NLM_F_ACK)
return neighHandle(neigh, req)
}
func neighHandle(neigh *Neigh, req *nl.NetlinkRequest) error {
var family int
+
if neigh.Family > 0 {
family = neigh.Family
} else {
@@ -151,12 +152,25 @@ func neighHandle(neigh *Neigh, req *nl.NetlinkRequest) error {
dstData := nl.NewRtAttr(NDA_DST, ipData)
req.AddData(dstData)
- if neigh.Flags != NTF_PROXY || neigh.HardwareAddr != nil {
+ if neigh.LLIPAddr != nil {
+ llIPData := nl.NewRtAttr(NDA_LLADDR, neigh.LLIPAddr.To4())
+ req.AddData(llIPData)
+ } else if neigh.Flags != NTF_PROXY || neigh.HardwareAddr != nil {
hwData := nl.NewRtAttr(NDA_LLADDR, []byte(neigh.HardwareAddr))
req.AddData(hwData)
}
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ if neigh.Vlan != 0 {
+ vlanData := nl.NewRtAttr(NDA_VLAN, nl.Uint16Attr(uint16(neigh.Vlan)))
+ req.AddData(vlanData)
+ }
+
+ if neigh.VNI != 0 {
+ vniData := nl.NewRtAttr(NDA_VNI, nl.Uint32Attr(uint32(neigh.VNI)))
+ req.AddData(vniData)
+ }
+
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -189,7 +203,7 @@ func (h *Handle) NeighProxyList(linkIndex, family int) ([]Neigh, error) {
}
func (h *Handle) neighList(linkIndex, family, flags int) ([]Neigh, error) {
- req := h.newNetlinkRequest(syscall.RTM_GETNEIGH, syscall.NLM_F_DUMP)
+ req := h.newNetlinkRequest(unix.RTM_GETNEIGH, unix.NLM_F_DUMP)
msg := Ndmsg{
Family: uint8(family),
Index: uint32(linkIndex),
@@ -197,7 +211,7 @@ func (h *Handle) neighList(linkIndex, family, flags int) ([]Neigh, error) {
}
req.AddData(&msg)
- msgs, err := req.Execute(syscall.NETLINK_ROUTE, syscall.RTM_NEWNEIGH)
+ msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWNEIGH)
if err != nil {
return nil, err
}
@@ -237,12 +251,37 @@ func NeighDeserialize(m []byte) (*Neigh, error) {
return nil, err
}
+ // This should be cached for perfomance
+ // once per table dump
+ link, err := LinkByIndex(neigh.LinkIndex)
+ if err != nil {
+ return nil, err
+ }
+ encapType := link.Attrs().EncapType
+
for _, attr := range attrs {
switch attr.Attr.Type {
case NDA_DST:
neigh.IP = net.IP(attr.Value)
case NDA_LLADDR:
- neigh.HardwareAddr = net.HardwareAddr(attr.Value)
+ // BUG: Is this a bug in the netlink library?
+ // #define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr)) + (len))
+ // #define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
+ attrLen := attr.Attr.Len - unix.SizeofRtAttr
+ if attrLen == 4 && (encapType == "ipip" ||
+ encapType == "sit" ||
+ encapType == "gre") {
+ neigh.LLIPAddr = net.IP(attr.Value)
+ } else if attrLen == 16 &&
+ encapType == "tunnel6" {
+ neigh.IP = net.IP(attr.Value)
+ } else {
+ neigh.HardwareAddr = net.HardwareAddr(attr.Value)
+ }
+ case NDA_VLAN:
+ neigh.Vlan = int(native.Uint16(attr.Value[0:2]))
+ case NDA_VNI:
+ neigh.VNI = int(native.Uint32(attr.Value[0:4]))
}
}
diff --git a/vendor/github.com/vishvananda/netlink/netlink_unspecified.go b/vendor/github.com/vishvananda/netlink/netlink_unspecified.go
index 2d57c16d7..86111b92c 100644
--- a/vendor/github.com/vishvananda/netlink/netlink_unspecified.go
+++ b/vendor/github.com/vishvananda/netlink/netlink_unspecified.go
@@ -108,6 +108,10 @@ func LinkSetFlood(link Link, mode bool) error {
return ErrNotImplemented
}
+func LinkSetTxQLen(link Link, qlen int) error {
+ return ErrNotImplemented
+}
+
func LinkAdd(link Link) error {
return ErrNotImplemented
}
diff --git a/vendor/github.com/vishvananda/netlink/nl/addr_linux.go b/vendor/github.com/vishvananda/netlink/nl/addr_linux.go
index fe362e9fa..50db3b4cd 100644
--- a/vendor/github.com/vishvananda/netlink/nl/addr_linux.go
+++ b/vendor/github.com/vishvananda/netlink/nl/addr_linux.go
@@ -1,17 +1,18 @@
package nl
import (
- "syscall"
"unsafe"
+
+ "golang.org/x/sys/unix"
)
type IfAddrmsg struct {
- syscall.IfAddrmsg
+ unix.IfAddrmsg
}
func NewIfAddrmsg(family int) *IfAddrmsg {
return &IfAddrmsg{
- IfAddrmsg: syscall.IfAddrmsg{
+ IfAddrmsg: unix.IfAddrmsg{
Family: uint8(family),
},
}
@@ -35,15 +36,15 @@ func NewIfAddrmsg(family int) *IfAddrmsg {
// SizeofIfAddrmsg = 0x8
func DeserializeIfAddrmsg(b []byte) *IfAddrmsg {
- return (*IfAddrmsg)(unsafe.Pointer(&b[0:syscall.SizeofIfAddrmsg][0]))
+ return (*IfAddrmsg)(unsafe.Pointer(&b[0:unix.SizeofIfAddrmsg][0]))
}
func (msg *IfAddrmsg) Serialize() []byte {
- return (*(*[syscall.SizeofIfAddrmsg]byte)(unsafe.Pointer(msg)))[:]
+ return (*(*[unix.SizeofIfAddrmsg]byte)(unsafe.Pointer(msg)))[:]
}
func (msg *IfAddrmsg) Len() int {
- return syscall.SizeofIfAddrmsg
+ return unix.SizeofIfAddrmsg
}
// struct ifa_cacheinfo {
diff --git a/vendor/github.com/vishvananda/netlink/nl/link_linux.go b/vendor/github.com/vishvananda/netlink/nl/link_linux.go
index a492246d8..84a3498dd 100644
--- a/vendor/github.com/vishvananda/netlink/nl/link_linux.go
+++ b/vendor/github.com/vishvananda/netlink/nl/link_linux.go
@@ -1,35 +1,11 @@
package nl
import (
- "syscall"
"unsafe"
)
const (
DEFAULT_CHANGE = 0xFFFFFFFF
- // doesn't exist in syscall
- IFLA_VFINFO_LIST = syscall.IFLA_IFALIAS + 1 + iota
- IFLA_STATS64
- IFLA_VF_PORTS
- IFLA_PORT_SELF
- IFLA_AF_SPEC
- IFLA_GROUP
- IFLA_NET_NS_FD
- IFLA_EXT_MASK
- IFLA_PROMISCUITY
- IFLA_NUM_TX_QUEUES
- IFLA_NUM_RX_QUEUES
- IFLA_CARRIER
- IFLA_PHYS_PORT_ID
- IFLA_CARRIER_CHANGES
- IFLA_PHYS_SWITCH_ID
- IFLA_LINK_NETNSID
- IFLA_PHYS_PORT_NAME
- IFLA_PROTO_DOWN
- IFLA_GSO_MAX_SEGS
- IFLA_GSO_MAX_SIZE
- IFLA_PAD
- IFLA_XDP
)
const (
@@ -118,6 +94,10 @@ const (
IFLA_MACVLAN_UNSPEC = iota
IFLA_MACVLAN_MODE
IFLA_MACVLAN_FLAGS
+ IFLA_MACVLAN_MACADDR_MODE
+ IFLA_MACVLAN_MACADDR
+ IFLA_MACVLAN_MACADDR_DATA
+ IFLA_MACVLAN_MACADDR_COUNT
IFLA_MACVLAN_MAX = IFLA_MACVLAN_FLAGS
)
@@ -130,6 +110,13 @@ const (
)
const (
+ MACVLAN_MACADDR_ADD = iota
+ MACVLAN_MACADDR_DEL
+ MACVLAN_MACADDR_FLUSH
+ MACVLAN_MACADDR_SET
+)
+
+const (
IFLA_BOND_UNSPEC = iota
IFLA_BOND_MODE
IFLA_BOND_ACTIVE_SLAVE
@@ -231,7 +218,8 @@ const (
* on/off switch
*/
IFLA_VF_STATS /* network device statistics */
- IFLA_VF_MAX = IFLA_VF_STATS
+ IFLA_VF_TRUST /* Trust state of VF */
+ IFLA_VF_MAX = IFLA_VF_TRUST
)
const (
@@ -259,6 +247,7 @@ const (
SizeofVfSpoofchk = 0x08
SizeofVfLinkState = 0x08
SizeofVfRssQueryEn = 0x08
+ SizeofVfTrust = 0x08
)
// struct ifla_vf_mac {
@@ -419,6 +408,35 @@ func (msg *VfRssQueryEn) Serialize() []byte {
return (*(*[SizeofVfRssQueryEn]byte)(unsafe.Pointer(msg)))[:]
}
+// struct ifla_vf_trust {
+// __u32 vf;
+// __u32 setting;
+// };
+
+type VfTrust struct {
+ Vf uint32
+ Setting uint32
+}
+
+func (msg *VfTrust) Len() int {
+ return SizeofVfTrust
+}
+
+func DeserializeVfTrust(b []byte) *VfTrust {
+ return (*VfTrust)(unsafe.Pointer(&b[0:SizeofVfTrust][0]))
+}
+
+func (msg *VfTrust) Serialize() []byte {
+ return (*(*[SizeofVfTrust]byte)(unsafe.Pointer(msg)))[:]
+}
+
+const (
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 1 << iota
+ XDP_FLAGS_SKB_MODE
+ XDP_FLAGS_DRV_MODE
+ XDP_FLAGS_MASK = XDP_FLAGS_UPDATE_IF_NOEXIST | XDP_FLAGS_SKB_MODE | XDP_FLAGS_DRV_MODE
+)
+
const (
IFLA_XDP_UNSPEC = iota
IFLA_XDP_FD /* fd of xdp program to attach, or -1 to remove */
@@ -444,7 +462,12 @@ const (
IFLA_IPTUN_6RD_RELAY_PREFIX
IFLA_IPTUN_6RD_PREFIXLEN
IFLA_IPTUN_6RD_RELAY_PREFIXLEN
- IFLA_IPTUN_MAX = IFLA_IPTUN_6RD_RELAY_PREFIXLEN
+ IFLA_IPTUN_ENCAP_TYPE
+ IFLA_IPTUN_ENCAP_FLAGS
+ IFLA_IPTUN_ENCAP_SPORT
+ IFLA_IPTUN_ENCAP_DPORT
+ IFLA_IPTUN_COLLECT_METADATA
+ IFLA_IPTUN_MAX = IFLA_IPTUN_COLLECT_METADATA
)
const (
diff --git a/vendor/github.com/vishvananda/netlink/nl/nl_linux.go b/vendor/github.com/vishvananda/netlink/nl/nl_linux.go
index 1329acd86..bc8e82c2c 100644
--- a/vendor/github.com/vishvananda/netlink/nl/nl_linux.go
+++ b/vendor/github.com/vishvananda/netlink/nl/nl_linux.go
@@ -13,18 +13,19 @@ import (
"unsafe"
"github.com/vishvananda/netns"
+ "golang.org/x/sys/unix"
)
const (
// Family type definitions
- FAMILY_ALL = syscall.AF_UNSPEC
- FAMILY_V4 = syscall.AF_INET
- FAMILY_V6 = syscall.AF_INET6
+ FAMILY_ALL = unix.AF_UNSPEC
+ FAMILY_V4 = unix.AF_INET
+ FAMILY_V6 = unix.AF_INET6
FAMILY_MPLS = AF_MPLS
)
// SupportedNlFamilies contains the list of netlink families this netlink package supports
-var SupportedNlFamilies = []int{syscall.NETLINK_ROUTE, syscall.NETLINK_XFRM, syscall.NETLINK_NETFILTER}
+var SupportedNlFamilies = []int{unix.NETLINK_ROUTE, unix.NETLINK_XFRM, unix.NETLINK_NETFILTER}
var nextSeqNr uint32
@@ -77,161 +78,161 @@ type NetlinkRequestData interface {
// IfInfomsg is related to links, but it is used for list requests as well
type IfInfomsg struct {
- syscall.IfInfomsg
+ unix.IfInfomsg
}
// Create an IfInfomsg with family specified
func NewIfInfomsg(family int) *IfInfomsg {
return &IfInfomsg{
- IfInfomsg: syscall.IfInfomsg{
+ IfInfomsg: unix.IfInfomsg{
Family: uint8(family),
},
}
}
func DeserializeIfInfomsg(b []byte) *IfInfomsg {
- return (*IfInfomsg)(unsafe.Pointer(&b[0:syscall.SizeofIfInfomsg][0]))
+ return (*IfInfomsg)(unsafe.Pointer(&b[0:unix.SizeofIfInfomsg][0]))
}
func (msg *IfInfomsg) Serialize() []byte {
- return (*(*[syscall.SizeofIfInfomsg]byte)(unsafe.Pointer(msg)))[:]
+ return (*(*[unix.SizeofIfInfomsg]byte)(unsafe.Pointer(msg)))[:]
}
func (msg *IfInfomsg) Len() int {
- return syscall.SizeofIfInfomsg
+ return unix.SizeofIfInfomsg
}
func (msg *IfInfomsg) EncapType() string {
switch msg.Type {
case 0:
return "generic"
- case syscall.ARPHRD_ETHER:
+ case unix.ARPHRD_ETHER:
return "ether"
- case syscall.ARPHRD_EETHER:
+ case unix.ARPHRD_EETHER:
return "eether"
- case syscall.ARPHRD_AX25:
+ case unix.ARPHRD_AX25:
return "ax25"
- case syscall.ARPHRD_PRONET:
+ case unix.ARPHRD_PRONET:
return "pronet"
- case syscall.ARPHRD_CHAOS:
+ case unix.ARPHRD_CHAOS:
return "chaos"
- case syscall.ARPHRD_IEEE802:
+ case unix.ARPHRD_IEEE802:
return "ieee802"
- case syscall.ARPHRD_ARCNET:
+ case unix.ARPHRD_ARCNET:
return "arcnet"
- case syscall.ARPHRD_APPLETLK:
+ case unix.ARPHRD_APPLETLK:
return "atalk"
- case syscall.ARPHRD_DLCI:
+ case unix.ARPHRD_DLCI:
return "dlci"
- case syscall.ARPHRD_ATM:
+ case unix.ARPHRD_ATM:
return "atm"
- case syscall.ARPHRD_METRICOM:
+ case unix.ARPHRD_METRICOM:
return "metricom"
- case syscall.ARPHRD_IEEE1394:
+ case unix.ARPHRD_IEEE1394:
return "ieee1394"
- case syscall.ARPHRD_INFINIBAND:
+ case unix.ARPHRD_INFINIBAND:
return "infiniband"
- case syscall.ARPHRD_SLIP:
+ case unix.ARPHRD_SLIP:
return "slip"
- case syscall.ARPHRD_CSLIP:
+ case unix.ARPHRD_CSLIP:
return "cslip"
- case syscall.ARPHRD_SLIP6:
+ case unix.ARPHRD_SLIP6:
return "slip6"
- case syscall.ARPHRD_CSLIP6:
+ case unix.ARPHRD_CSLIP6:
return "cslip6"
- case syscall.ARPHRD_RSRVD:
+ case unix.ARPHRD_RSRVD:
return "rsrvd"
- case syscall.ARPHRD_ADAPT:
+ case unix.ARPHRD_ADAPT:
return "adapt"
- case syscall.ARPHRD_ROSE:
+ case unix.ARPHRD_ROSE:
return "rose"
- case syscall.ARPHRD_X25:
+ case unix.ARPHRD_X25:
return "x25"
- case syscall.ARPHRD_HWX25:
+ case unix.ARPHRD_HWX25:
return "hwx25"
- case syscall.ARPHRD_PPP:
+ case unix.ARPHRD_PPP:
return "ppp"
- case syscall.ARPHRD_HDLC:
+ case unix.ARPHRD_HDLC:
return "hdlc"
- case syscall.ARPHRD_LAPB:
+ case unix.ARPHRD_LAPB:
return "lapb"
- case syscall.ARPHRD_DDCMP:
+ case unix.ARPHRD_DDCMP:
return "ddcmp"
- case syscall.ARPHRD_RAWHDLC:
+ case unix.ARPHRD_RAWHDLC:
return "rawhdlc"
- case syscall.ARPHRD_TUNNEL:
+ case unix.ARPHRD_TUNNEL:
return "ipip"
- case syscall.ARPHRD_TUNNEL6:
+ case unix.ARPHRD_TUNNEL6:
return "tunnel6"
- case syscall.ARPHRD_FRAD:
+ case unix.ARPHRD_FRAD:
return "frad"
- case syscall.ARPHRD_SKIP:
+ case unix.ARPHRD_SKIP:
return "skip"
- case syscall.ARPHRD_LOOPBACK:
+ case unix.ARPHRD_LOOPBACK:
return "loopback"
- case syscall.ARPHRD_LOCALTLK:
+ case unix.ARPHRD_LOCALTLK:
return "ltalk"
- case syscall.ARPHRD_FDDI:
+ case unix.ARPHRD_FDDI:
return "fddi"
- case syscall.ARPHRD_BIF:
+ case unix.ARPHRD_BIF:
return "bif"
- case syscall.ARPHRD_SIT:
+ case unix.ARPHRD_SIT:
return "sit"
- case syscall.ARPHRD_IPDDP:
+ case unix.ARPHRD_IPDDP:
return "ip/ddp"
- case syscall.ARPHRD_IPGRE:
+ case unix.ARPHRD_IPGRE:
return "gre"
- case syscall.ARPHRD_PIMREG:
+ case unix.ARPHRD_PIMREG:
return "pimreg"
- case syscall.ARPHRD_HIPPI:
+ case unix.ARPHRD_HIPPI:
return "hippi"
- case syscall.ARPHRD_ASH:
+ case unix.ARPHRD_ASH:
return "ash"
- case syscall.ARPHRD_ECONET:
+ case unix.ARPHRD_ECONET:
return "econet"
- case syscall.ARPHRD_IRDA:
+ case unix.ARPHRD_IRDA:
return "irda"
- case syscall.ARPHRD_FCPP:
+ case unix.ARPHRD_FCPP:
return "fcpp"
- case syscall.ARPHRD_FCAL:
+ case unix.ARPHRD_FCAL:
return "fcal"
- case syscall.ARPHRD_FCPL:
+ case unix.ARPHRD_FCPL:
return "fcpl"
- case syscall.ARPHRD_FCFABRIC:
+ case unix.ARPHRD_FCFABRIC:
return "fcfb0"
- case syscall.ARPHRD_FCFABRIC + 1:
+ case unix.ARPHRD_FCFABRIC + 1:
return "fcfb1"
- case syscall.ARPHRD_FCFABRIC + 2:
+ case unix.ARPHRD_FCFABRIC + 2:
return "fcfb2"
- case syscall.ARPHRD_FCFABRIC + 3:
+ case unix.ARPHRD_FCFABRIC + 3:
return "fcfb3"
- case syscall.ARPHRD_FCFABRIC + 4:
+ case unix.ARPHRD_FCFABRIC + 4:
return "fcfb4"
- case syscall.ARPHRD_FCFABRIC + 5:
+ case unix.ARPHRD_FCFABRIC + 5:
return "fcfb5"
- case syscall.ARPHRD_FCFABRIC + 6:
+ case unix.ARPHRD_FCFABRIC + 6:
return "fcfb6"
- case syscall.ARPHRD_FCFABRIC + 7:
+ case unix.ARPHRD_FCFABRIC + 7:
return "fcfb7"
- case syscall.ARPHRD_FCFABRIC + 8:
+ case unix.ARPHRD_FCFABRIC + 8:
return "fcfb8"
- case syscall.ARPHRD_FCFABRIC + 9:
+ case unix.ARPHRD_FCFABRIC + 9:
return "fcfb9"
- case syscall.ARPHRD_FCFABRIC + 10:
+ case unix.ARPHRD_FCFABRIC + 10:
return "fcfb10"
- case syscall.ARPHRD_FCFABRIC + 11:
+ case unix.ARPHRD_FCFABRIC + 11:
return "fcfb11"
- case syscall.ARPHRD_FCFABRIC + 12:
+ case unix.ARPHRD_FCFABRIC + 12:
return "fcfb12"
- case syscall.ARPHRD_IEEE802_TR:
+ case unix.ARPHRD_IEEE802_TR:
return "tr"
- case syscall.ARPHRD_IEEE80211:
+ case unix.ARPHRD_IEEE80211:
return "ieee802.11"
- case syscall.ARPHRD_IEEE80211_PRISM:
+ case unix.ARPHRD_IEEE80211_PRISM:
return "ieee802.11/prism"
- case syscall.ARPHRD_IEEE80211_RADIOTAP:
+ case unix.ARPHRD_IEEE80211_RADIOTAP:
return "ieee802.11/radiotap"
- case syscall.ARPHRD_IEEE802154:
+ case unix.ARPHRD_IEEE802154:
return "ieee802.15.4"
case 65534:
@@ -243,7 +244,7 @@ func (msg *IfInfomsg) EncapType() string {
}
func rtaAlignOf(attrlen int) int {
- return (attrlen + syscall.RTA_ALIGNTO - 1) & ^(syscall.RTA_ALIGNTO - 1)
+ return (attrlen + unix.RTA_ALIGNTO - 1) & ^(unix.RTA_ALIGNTO - 1)
}
func NewIfInfomsgChild(parent *RtAttr, family int) *IfInfomsg {
@@ -254,7 +255,7 @@ func NewIfInfomsgChild(parent *RtAttr, family int) *IfInfomsg {
// Extend RtAttr to handle data and children
type RtAttr struct {
- syscall.RtAttr
+ unix.RtAttr
Data []byte
children []NetlinkRequestData
}
@@ -262,7 +263,7 @@ type RtAttr struct {
// Create a new Extended RtAttr object
func NewRtAttr(attrType int, data []byte) *RtAttr {
return &RtAttr{
- RtAttr: syscall.RtAttr{
+ RtAttr: unix.RtAttr{
Type: uint16(attrType),
},
children: []NetlinkRequestData{},
@@ -277,16 +278,21 @@ func NewRtAttrChild(parent *RtAttr, attrType int, data []byte) *RtAttr {
return attr
}
+// AddChild adds an existing RtAttr as a child.
+func (a *RtAttr) AddChild(attr *RtAttr) {
+ a.children = append(a.children, attr)
+}
+
func (a *RtAttr) Len() int {
if len(a.children) == 0 {
- return (syscall.SizeofRtAttr + len(a.Data))
+ return (unix.SizeofRtAttr + len(a.Data))
}
l := 0
for _, child := range a.children {
l += rtaAlignOf(child.Len())
}
- l += syscall.SizeofRtAttr
+ l += unix.SizeofRtAttr
return rtaAlignOf(l + len(a.Data))
}
@@ -319,7 +325,7 @@ func (a *RtAttr) Serialize() []byte {
}
type NetlinkRequest struct {
- syscall.NlMsghdr
+ unix.NlMsghdr
Data []NetlinkRequestData
RawData []byte
Sockets map[int]*SocketHandle
@@ -327,7 +333,7 @@ type NetlinkRequest struct {
// Serialize the Netlink Request into a byte array
func (req *NetlinkRequest) Serialize() []byte {
- length := syscall.SizeofNlMsghdr
+ length := unix.SizeofNlMsghdr
dataBytes := make([][]byte, len(req.Data))
for i, data := range req.Data {
dataBytes[i] = data.Serialize()
@@ -337,8 +343,8 @@ func (req *NetlinkRequest) Serialize() []byte {
req.Len = uint32(length)
b := make([]byte, length)
- hdr := (*(*[syscall.SizeofNlMsghdr]byte)(unsafe.Pointer(req)))[:]
- next := syscall.SizeofNlMsghdr
+ hdr := (*(*[unix.SizeofNlMsghdr]byte)(unsafe.Pointer(req)))[:]
+ next := unix.SizeofNlMsghdr
copy(b[0:next], hdr)
for _, data := range dataBytes {
for _, dataByte := range data {
@@ -421,10 +427,10 @@ done:
if m.Header.Pid != pid {
return nil, fmt.Errorf("Wrong pid %d, expected %d", m.Header.Pid, pid)
}
- if m.Header.Type == syscall.NLMSG_DONE {
+ if m.Header.Type == unix.NLMSG_DONE {
break done
}
- if m.Header.Type == syscall.NLMSG_ERROR {
+ if m.Header.Type == unix.NLMSG_ERROR {
native := NativeEndian()
error := int32(native.Uint32(m.Data[0:4]))
if error == 0 {
@@ -436,7 +442,7 @@ done:
continue
}
res = append(res, m.Data)
- if m.Header.Flags&syscall.NLM_F_MULTI == 0 {
+ if m.Header.Flags&unix.NLM_F_MULTI == 0 {
break done
}
}
@@ -449,10 +455,10 @@ done:
// the message is serialized
func NewNetlinkRequest(proto, flags int) *NetlinkRequest {
return &NetlinkRequest{
- NlMsghdr: syscall.NlMsghdr{
- Len: uint32(syscall.SizeofNlMsghdr),
+ NlMsghdr: unix.NlMsghdr{
+ Len: uint32(unix.SizeofNlMsghdr),
Type: uint16(proto),
- Flags: syscall.NLM_F_REQUEST | uint16(flags),
+ Flags: unix.NLM_F_REQUEST | uint16(flags),
Seq: atomic.AddUint32(&nextSeqNr, 1),
},
}
@@ -460,21 +466,21 @@ func NewNetlinkRequest(proto, flags int) *NetlinkRequest {
type NetlinkSocket struct {
fd int32
- lsa syscall.SockaddrNetlink
+ lsa unix.SockaddrNetlink
sync.Mutex
}
func getNetlinkSocket(protocol int) (*NetlinkSocket, error) {
- fd, err := syscall.Socket(syscall.AF_NETLINK, syscall.SOCK_RAW|syscall.SOCK_CLOEXEC, protocol)
+ fd, err := unix.Socket(unix.AF_NETLINK, unix.SOCK_RAW|unix.SOCK_CLOEXEC, protocol)
if err != nil {
return nil, err
}
s := &NetlinkSocket{
fd: int32(fd),
}
- s.lsa.Family = syscall.AF_NETLINK
- if err := syscall.Bind(fd, &s.lsa); err != nil {
- syscall.Close(fd)
+ s.lsa.Family = unix.AF_NETLINK
+ if err := unix.Bind(fd, &s.lsa); err != nil {
+ unix.Close(fd)
return nil, err
}
@@ -551,21 +557,21 @@ func executeInNetns(newNs, curNs netns.NsHandle) (func(), error) {
// Returns the netlink socket on which Receive() method can be called
// to retrieve the messages from the kernel.
func Subscribe(protocol int, groups ...uint) (*NetlinkSocket, error) {
- fd, err := syscall.Socket(syscall.AF_NETLINK, syscall.SOCK_RAW, protocol)
+ fd, err := unix.Socket(unix.AF_NETLINK, unix.SOCK_RAW, protocol)
if err != nil {
return nil, err
}
s := &NetlinkSocket{
fd: int32(fd),
}
- s.lsa.Family = syscall.AF_NETLINK
+ s.lsa.Family = unix.AF_NETLINK
for _, g := range groups {
s.lsa.Groups |= (1 << (g - 1))
}
- if err := syscall.Bind(fd, &s.lsa); err != nil {
- syscall.Close(fd)
+ if err := unix.Bind(fd, &s.lsa); err != nil {
+ unix.Close(fd)
return nil, err
}
@@ -586,7 +592,7 @@ func SubscribeAt(newNs, curNs netns.NsHandle, protocol int, groups ...uint) (*Ne
func (s *NetlinkSocket) Close() {
fd := int(atomic.SwapInt32(&s.fd, -1))
- syscall.Close(fd)
+ unix.Close(fd)
}
func (s *NetlinkSocket) GetFd() int {
@@ -598,7 +604,7 @@ func (s *NetlinkSocket) Send(request *NetlinkRequest) error {
if fd < 0 {
return fmt.Errorf("Send called on a closed socket")
}
- if err := syscall.Sendto(fd, request.Serialize(), 0, &s.lsa); err != nil {
+ if err := unix.Sendto(fd, request.Serialize(), 0, &s.lsa); err != nil {
return err
}
return nil
@@ -609,26 +615,40 @@ func (s *NetlinkSocket) Receive() ([]syscall.NetlinkMessage, error) {
if fd < 0 {
return nil, fmt.Errorf("Receive called on a closed socket")
}
- rb := make([]byte, syscall.Getpagesize())
- nr, _, err := syscall.Recvfrom(fd, rb, 0)
+ rb := make([]byte, unix.Getpagesize())
+ nr, _, err := unix.Recvfrom(fd, rb, 0)
if err != nil {
return nil, err
}
- if nr < syscall.NLMSG_HDRLEN {
+ if nr < unix.NLMSG_HDRLEN {
return nil, fmt.Errorf("Got short response from netlink")
}
rb = rb[:nr]
return syscall.ParseNetlinkMessage(rb)
}
+// SetSendTimeout allows to set a send timeout on the socket
+func (s *NetlinkSocket) SetSendTimeout(timeout *unix.Timeval) error {
+ // Set a send timeout of SOCKET_SEND_TIMEOUT, this will allow the Send to periodically unblock and avoid that a routine
+ // remains stuck on a send on a closed fd
+ return unix.SetsockoptTimeval(int(s.fd), unix.SOL_SOCKET, unix.SO_SNDTIMEO, timeout)
+}
+
+// SetReceiveTimeout allows to set a receive timeout on the socket
+func (s *NetlinkSocket) SetReceiveTimeout(timeout *unix.Timeval) error {
+ // Set a read timeout of SOCKET_READ_TIMEOUT, this will allow the Read to periodically unblock and avoid that a routine
+ // remains stuck on a recvmsg on a closed fd
+ return unix.SetsockoptTimeval(int(s.fd), unix.SOL_SOCKET, unix.SO_RCVTIMEO, timeout)
+}
+
func (s *NetlinkSocket) GetPid() (uint32, error) {
fd := int(atomic.LoadInt32(&s.fd))
- lsa, err := syscall.Getsockname(fd)
+ lsa, err := unix.Getsockname(fd)
if err != nil {
return 0, err
}
switch v := lsa.(type) {
- case *syscall.SockaddrNetlink:
+ case *unix.SockaddrNetlink:
return v.Pid, nil
}
return 0, fmt.Errorf("Wrong socket type")
@@ -683,24 +703,24 @@ func Uint64Attr(v uint64) []byte {
func ParseRouteAttr(b []byte) ([]syscall.NetlinkRouteAttr, error) {
var attrs []syscall.NetlinkRouteAttr
- for len(b) >= syscall.SizeofRtAttr {
+ for len(b) >= unix.SizeofRtAttr {
a, vbuf, alen, err := netlinkRouteAttrAndValue(b)
if err != nil {
return nil, err
}
- ra := syscall.NetlinkRouteAttr{Attr: *a, Value: vbuf[:int(a.Len)-syscall.SizeofRtAttr]}
+ ra := syscall.NetlinkRouteAttr{Attr: syscall.RtAttr(*a), Value: vbuf[:int(a.Len)-unix.SizeofRtAttr]}
attrs = append(attrs, ra)
b = b[alen:]
}
return attrs, nil
}
-func netlinkRouteAttrAndValue(b []byte) (*syscall.RtAttr, []byte, int, error) {
- a := (*syscall.RtAttr)(unsafe.Pointer(&b[0]))
- if int(a.Len) < syscall.SizeofRtAttr || int(a.Len) > len(b) {
- return nil, nil, 0, syscall.EINVAL
+func netlinkRouteAttrAndValue(b []byte) (*unix.RtAttr, []byte, int, error) {
+ a := (*unix.RtAttr)(unsafe.Pointer(&b[0]))
+ if int(a.Len) < unix.SizeofRtAttr || int(a.Len) > len(b) {
+ return nil, nil, 0, unix.EINVAL
}
- return a, b[syscall.SizeofRtAttr:], rtaAlignOf(int(a.Len)), nil
+ return a, b[unix.SizeofRtAttr:], rtaAlignOf(int(a.Len)), nil
}
// SocketHandle contains the netlink socket and the associated
diff --git a/vendor/github.com/vishvananda/netlink/nl/route_linux.go b/vendor/github.com/vishvananda/netlink/nl/route_linux.go
index 1a064d65d..f6906fcaf 100644
--- a/vendor/github.com/vishvananda/netlink/nl/route_linux.go
+++ b/vendor/github.com/vishvananda/netlink/nl/route_linux.go
@@ -1,65 +1,66 @@
package nl
import (
- "syscall"
"unsafe"
+
+ "golang.org/x/sys/unix"
)
type RtMsg struct {
- syscall.RtMsg
+ unix.RtMsg
}
func NewRtMsg() *RtMsg {
return &RtMsg{
- RtMsg: syscall.RtMsg{
- Table: syscall.RT_TABLE_MAIN,
- Scope: syscall.RT_SCOPE_UNIVERSE,
- Protocol: syscall.RTPROT_BOOT,
- Type: syscall.RTN_UNICAST,
+ RtMsg: unix.RtMsg{
+ Table: unix.RT_TABLE_MAIN,
+ Scope: unix.RT_SCOPE_UNIVERSE,
+ Protocol: unix.RTPROT_BOOT,
+ Type: unix.RTN_UNICAST,
},
}
}
func NewRtDelMsg() *RtMsg {
return &RtMsg{
- RtMsg: syscall.RtMsg{
- Table: syscall.RT_TABLE_MAIN,
- Scope: syscall.RT_SCOPE_NOWHERE,
+ RtMsg: unix.RtMsg{
+ Table: unix.RT_TABLE_MAIN,
+ Scope: unix.RT_SCOPE_NOWHERE,
},
}
}
func (msg *RtMsg) Len() int {
- return syscall.SizeofRtMsg
+ return unix.SizeofRtMsg
}
func DeserializeRtMsg(b []byte) *RtMsg {
- return (*RtMsg)(unsafe.Pointer(&b[0:syscall.SizeofRtMsg][0]))
+ return (*RtMsg)(unsafe.Pointer(&b[0:unix.SizeofRtMsg][0]))
}
func (msg *RtMsg) Serialize() []byte {
- return (*(*[syscall.SizeofRtMsg]byte)(unsafe.Pointer(msg)))[:]
+ return (*(*[unix.SizeofRtMsg]byte)(unsafe.Pointer(msg)))[:]
}
type RtNexthop struct {
- syscall.RtNexthop
+ unix.RtNexthop
Children []NetlinkRequestData
}
func DeserializeRtNexthop(b []byte) *RtNexthop {
- return (*RtNexthop)(unsafe.Pointer(&b[0:syscall.SizeofRtNexthop][0]))
+ return (*RtNexthop)(unsafe.Pointer(&b[0:unix.SizeofRtNexthop][0]))
}
func (msg *RtNexthop) Len() int {
if len(msg.Children) == 0 {
- return syscall.SizeofRtNexthop
+ return unix.SizeofRtNexthop
}
l := 0
for _, child := range msg.Children {
l += rtaAlignOf(child.Len())
}
- l += syscall.SizeofRtNexthop
+ l += unix.SizeofRtNexthop
return rtaAlignOf(l)
}
@@ -67,8 +68,8 @@ func (msg *RtNexthop) Serialize() []byte {
length := msg.Len()
msg.RtNexthop.Len = uint16(length)
buf := make([]byte, length)
- copy(buf, (*(*[syscall.SizeofRtNexthop]byte)(unsafe.Pointer(msg)))[:])
- next := rtaAlignOf(syscall.SizeofRtNexthop)
+ copy(buf, (*(*[unix.SizeofRtNexthop]byte)(unsafe.Pointer(msg)))[:])
+ next := rtaAlignOf(unix.SizeofRtNexthop)
if len(msg.Children) > 0 {
for _, child := range msg.Children {
childBuf := child.Serialize()
diff --git a/vendor/github.com/vishvananda/netlink/nl/seg6_linux.go b/vendor/github.com/vishvananda/netlink/nl/seg6_linux.go
new file mode 100644
index 000000000..b3425f6b0
--- /dev/null
+++ b/vendor/github.com/vishvananda/netlink/nl/seg6_linux.go
@@ -0,0 +1,111 @@
+package nl
+
+import (
+ "errors"
+ "fmt"
+ "net"
+)
+
+type IPv6SrHdr struct {
+ nextHdr uint8
+ hdrLen uint8
+ routingType uint8
+ segmentsLeft uint8
+ firstSegment uint8
+ flags uint8
+ reserved uint16
+
+ Segments []net.IP
+}
+
+func (s1 *IPv6SrHdr) Equal(s2 IPv6SrHdr) bool {
+ if len(s1.Segments) != len(s2.Segments) {
+ return false
+ }
+ for i := range s1.Segments {
+ if s1.Segments[i].Equal(s2.Segments[i]) != true {
+ return false
+ }
+ }
+ return s1.nextHdr == s2.nextHdr &&
+ s1.hdrLen == s2.hdrLen &&
+ s1.routingType == s2.routingType &&
+ s1.segmentsLeft == s2.segmentsLeft &&
+ s1.firstSegment == s2.firstSegment &&
+ s1.flags == s2.flags
+ // reserved doesn't need to be identical.
+}
+
+// seg6 encap mode
+const (
+ SEG6_IPTUN_MODE_INLINE = iota
+ SEG6_IPTUN_MODE_ENCAP
+)
+
+// number of nested RTATTR
+// from include/uapi/linux/seg6_iptunnel.h
+const (
+ SEG6_IPTUNNEL_UNSPEC = iota
+ SEG6_IPTUNNEL_SRH
+ __SEG6_IPTUNNEL_MAX
+)
+const (
+ SEG6_IPTUNNEL_MAX = __SEG6_IPTUNNEL_MAX - 1
+)
+
+func EncodeSEG6Encap(mode int, segments []net.IP) ([]byte, error) {
+ nsegs := len(segments) // nsegs: number of segments
+ if nsegs == 0 {
+ return nil, errors.New("EncodeSEG6Encap: No Segment in srh")
+ }
+ b := make([]byte, 12, 12+len(segments)*16)
+ native := NativeEndian()
+ native.PutUint32(b, uint32(mode))
+ b[4] = 0 // srh.nextHdr (0 when calling netlink)
+ b[5] = uint8(16 * nsegs >> 3) // srh.hdrLen (in 8-octets unit)
+ b[6] = IPV6_SRCRT_TYPE_4 // srh.routingType (assigned by IANA)
+ b[7] = uint8(nsegs - 1) // srh.segmentsLeft
+ b[8] = uint8(nsegs - 1) // srh.firstSegment
+ b[9] = 0 // srh.flags (SR6_FLAG1_HMAC for srh_hmac)
+ // srh.reserved: Defined as "Tag" in draft-ietf-6man-segment-routing-header-07
+ native.PutUint16(b[10:], 0) // srh.reserved
+ for _, netIP := range segments {
+ b = append(b, netIP...) // srh.Segments
+ }
+ return b, nil
+}
+
+func DecodeSEG6Encap(buf []byte) (int, []net.IP, error) {
+ native := NativeEndian()
+ mode := int(native.Uint32(buf))
+ srh := IPv6SrHdr{
+ nextHdr: buf[4],
+ hdrLen: buf[5],
+ routingType: buf[6],
+ segmentsLeft: buf[7],
+ firstSegment: buf[8],
+ flags: buf[9],
+ reserved: native.Uint16(buf[10:12]),
+ }
+ buf = buf[12:]
+ if len(buf)%16 != 0 {
+ err := fmt.Errorf("DecodeSEG6Encap: error parsing Segment List (buf len: %d)\n", len(buf))
+ return mode, nil, err
+ }
+ for len(buf) > 0 {
+ srh.Segments = append(srh.Segments, net.IP(buf[:16]))
+ buf = buf[16:]
+ }
+ return mode, srh.Segments, nil
+}
+
+// Helper functions
+func SEG6EncapModeString(mode int) string {
+ switch mode {
+ case SEG6_IPTUN_MODE_INLINE:
+ return "inline"
+ case SEG6_IPTUN_MODE_ENCAP:
+ return "encap"
+ }
+ return "unknown"
+}
diff --git a/vendor/github.com/vishvananda/netlink/nl/syscall.go b/vendor/github.com/vishvananda/netlink/nl/syscall.go
index 3473e5363..fc631e0e5 100644
--- a/vendor/github.com/vishvananda/netlink/nl/syscall.go
+++ b/vendor/github.com/vishvananda/netlink/nl/syscall.go
@@ -65,4 +65,14 @@ const (
LWTUNNEL_ENCAP_IP
LWTUNNEL_ENCAP_ILA
LWTUNNEL_ENCAP_IP6
+ LWTUNNEL_ENCAP_SEG6
+ LWTUNNEL_ENCAP_BPF
+)
+
+// routing header types
+const (
+ IPV6_SRCRT_STRICT = 0x01 // Deprecated; will be removed
+ IPV6_SRCRT_TYPE_0 = 0 // Deprecated; will be removed
+ IPV6_SRCRT_TYPE_2 = 2 // IPv6 type 2 Routing Header
+ IPV6_SRCRT_TYPE_4 = 4 // Segment Routing with IPv6
)
diff --git a/vendor/github.com/vishvananda/netlink/nl/tc_linux.go b/vendor/github.com/vishvananda/netlink/nl/tc_linux.go
index e91fb21c5..94ebc290a 100644
--- a/vendor/github.com/vishvananda/netlink/nl/tc_linux.go
+++ b/vendor/github.com/vishvananda/netlink/nl/tc_linux.go
@@ -673,3 +673,38 @@ const (
TCA_FW_MASK
TCA_FW_MAX = TCA_FW_MASK
)
+
+const (
+ TCA_MATCHALL_UNSPEC = iota
+ TCA_MATCHALL_CLASSID
+ TCA_MATCHALL_ACT
+ TCA_MATCHALL_FLAGS
+)
+
+const (
+ TCA_FQ_UNSPEC = iota
+ TCA_FQ_PLIMIT // limit of total number of packets in queue
+ TCA_FQ_FLOW_PLIMIT // limit of packets per flow
+ TCA_FQ_QUANTUM // RR quantum
+ TCA_FQ_INITIAL_QUANTUM // RR quantum for new flow
+ TCA_FQ_RATE_ENABLE // enable/disable rate limiting
+ TCA_FQ_FLOW_DEFAULT_RATE // obsolete do not use
+ TCA_FQ_FLOW_MAX_RATE // per flow max rate
+ TCA_FQ_BUCKETS_LOG // log2(number of buckets)
+ TCA_FQ_FLOW_REFILL_DELAY // flow credit refill delay in usec
+ TCA_FQ_ORPHAN_MASK // mask applied to orphaned skb hashes
+ TCA_FQ_LOW_RATE_THRESHOLD // per packet delay under this rate
+)
+
+const (
+ TCA_FQ_CODEL_UNSPEC = iota
+ TCA_FQ_CODEL_TARGET
+ TCA_FQ_CODEL_LIMIT
+ TCA_FQ_CODEL_INTERVAL
+ TCA_FQ_CODEL_ECN
+ TCA_FQ_CODEL_FLOWS
+ TCA_FQ_CODEL_QUANTUM
+ TCA_FQ_CODEL_CE_THRESHOLD
+ TCA_FQ_CODEL_DROP_BATCH_SIZE
+ TCA_FQ_CODEL_MEMORY_LIMIT
+)
diff --git a/vendor/github.com/vishvananda/netlink/protinfo_linux.go b/vendor/github.com/vishvananda/netlink/protinfo_linux.go
index 10dd0d533..43c465f05 100644
--- a/vendor/github.com/vishvananda/netlink/protinfo_linux.go
+++ b/vendor/github.com/vishvananda/netlink/protinfo_linux.go
@@ -5,6 +5,7 @@ import (
"syscall"
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
)
func LinkGetProtinfo(link Link) (Protinfo, error) {
@@ -15,10 +16,10 @@ func (h *Handle) LinkGetProtinfo(link Link) (Protinfo, error) {
base := link.Attrs()
h.ensureIndex(base)
var pi Protinfo
- req := h.newNetlinkRequest(syscall.RTM_GETLINK, syscall.NLM_F_DUMP)
- msg := nl.NewIfInfomsg(syscall.AF_BRIDGE)
+ req := h.newNetlinkRequest(unix.RTM_GETLINK, unix.NLM_F_DUMP)
+ msg := nl.NewIfInfomsg(unix.AF_BRIDGE)
req.AddData(msg)
- msgs, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ msgs, err := req.Execute(unix.NETLINK_ROUTE, 0)
if err != nil {
return pi, err
}
@@ -33,7 +34,7 @@ func (h *Handle) LinkGetProtinfo(link Link) (Protinfo, error) {
return pi, err
}
for _, attr := range attrs {
- if attr.Attr.Type != syscall.IFLA_PROTINFO|syscall.NLA_F_NESTED {
+ if attr.Attr.Type != unix.IFLA_PROTINFO|unix.NLA_F_NESTED {
continue
}
infos, err := nl.ParseRouteAttr(attr.Value)
diff --git a/vendor/github.com/vishvananda/netlink/qdisc.go b/vendor/github.com/vishvananda/netlink/qdisc.go
index 0ca86ebe8..3df4b5c29 100644
--- a/vendor/github.com/vishvananda/netlink/qdisc.go
+++ b/vendor/github.com/vishvananda/netlink/qdisc.go
@@ -230,3 +230,63 @@ func (qdisc *GenericQdisc) Attrs() *QdiscAttrs {
func (qdisc *GenericQdisc) Type() string {
return qdisc.QdiscType
}
+
+// Fq is a classless packet scheduler meant to be mostly used for locally generated traffic.
+type Fq struct {
+ QdiscAttrs
+ PacketLimit uint32
+ FlowPacketLimit uint32
+ // In bytes
+ Quantum uint32
+ InitialQuantum uint32
+ // called RateEnable under the hood
+ Pacing uint32
+ FlowDefaultRate uint32
+ FlowMaxRate uint32
+ // called BucketsLog under the hood
+ Buckets uint32
+ FlowRefillDelay uint32
+ LowRateThreshold uint32
+}
+
+func NewFq(attrs QdiscAttrs) *Fq {
+ return &Fq{
+ QdiscAttrs: attrs,
+ Pacing: 1,
+ }
+}
+
+func (qdisc *Fq) Attrs() *QdiscAttrs {
+ return &qdisc.QdiscAttrs
+}
+
+func (qdisc *Fq) Type() string {
+ return "fq"
+}
+
+// FQ_Codel (Fair Queuing Controlled Delay) is queuing discipline that combines Fair Queuing with the CoDel AQM scheme.
+type FqCodel struct {
+ QdiscAttrs
+ Target uint32
+ Limit uint32
+ Interval uint32
+ ECN uint32
+ Flows uint32
+ Quantum uint32
+ // There are some more attributes here, but support for them seems not ubiquitous
+}
+
+func NewFqCodel(attrs QdiscAttrs) *FqCodel {
+ return &FqCodel{
+ QdiscAttrs: attrs,
+ ECN: 1,
+ }
+}
+
+func (qdisc *FqCodel) Attrs() *QdiscAttrs {
+ return &qdisc.QdiscAttrs
+}
+
+func (qdisc *FqCodel) Type() string {
+ return "fq_codel"
+}
diff --git a/vendor/github.com/vishvananda/netlink/qdisc_linux.go b/vendor/github.com/vishvananda/netlink/qdisc_linux.go
index 2c0deddb3..3794ac18a 100644
--- a/vendor/github.com/vishvananda/netlink/qdisc_linux.go
+++ b/vendor/github.com/vishvananda/netlink/qdisc_linux.go
@@ -8,6 +8,7 @@ import (
"syscall"
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
)
// NOTE function is here because it uses other linux functions
@@ -84,7 +85,7 @@ func QdiscDel(qdisc Qdisc) error {
// QdiscDel will delete a qdisc from the system.
// Equivalent to: `tc qdisc del $qdisc`
func (h *Handle) QdiscDel(qdisc Qdisc) error {
- return h.qdiscModify(syscall.RTM_DELQDISC, 0, qdisc)
+ return h.qdiscModify(unix.RTM_DELQDISC, 0, qdisc)
}
// QdiscChange will change a qdisc in place
@@ -98,7 +99,7 @@ func QdiscChange(qdisc Qdisc) error {
// Equivalent to: `tc qdisc change $qdisc`
// The parent and handle MUST NOT be changed.
func (h *Handle) QdiscChange(qdisc Qdisc) error {
- return h.qdiscModify(syscall.RTM_NEWQDISC, 0, qdisc)
+ return h.qdiscModify(unix.RTM_NEWQDISC, 0, qdisc)
}
// QdiscReplace will replace a qdisc to the system.
@@ -113,8 +114,8 @@ func QdiscReplace(qdisc Qdisc) error {
// The handle MUST change.
func (h *Handle) QdiscReplace(qdisc Qdisc) error {
return h.qdiscModify(
- syscall.RTM_NEWQDISC,
- syscall.NLM_F_CREATE|syscall.NLM_F_REPLACE,
+ unix.RTM_NEWQDISC,
+ unix.NLM_F_CREATE|unix.NLM_F_REPLACE,
qdisc)
}
@@ -128,13 +129,13 @@ func QdiscAdd(qdisc Qdisc) error {
// Equivalent to: `tc qdisc add $qdisc`
func (h *Handle) QdiscAdd(qdisc Qdisc) error {
return h.qdiscModify(
- syscall.RTM_NEWQDISC,
- syscall.NLM_F_CREATE|syscall.NLM_F_EXCL,
+ unix.RTM_NEWQDISC,
+ unix.NLM_F_CREATE|unix.NLM_F_EXCL,
qdisc)
}
func (h *Handle) qdiscModify(cmd, flags int, qdisc Qdisc) error {
- req := h.newNetlinkRequest(cmd, flags|syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(cmd, flags|unix.NLM_F_ACK)
base := qdisc.Attrs()
msg := &nl.TcMsg{
Family: nl.FAMILY_ALL,
@@ -145,13 +146,13 @@ func (h *Handle) qdiscModify(cmd, flags int, qdisc Qdisc) error {
req.AddData(msg)
// When deleting don't bother building the rest of the netlink payload
- if cmd != syscall.RTM_DELQDISC {
+ if cmd != unix.RTM_DELQDISC {
if err := qdiscPayload(req, qdisc); err != nil {
return err
}
}
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -160,75 +161,119 @@ func qdiscPayload(req *nl.NetlinkRequest, qdisc Qdisc) error {
req.AddData(nl.NewRtAttr(nl.TCA_KIND, nl.ZeroTerminated(qdisc.Type())))
options := nl.NewRtAttr(nl.TCA_OPTIONS, nil)
- if prio, ok := qdisc.(*Prio); ok {
+
+ switch qdisc := qdisc.(type) {
+ case *Prio:
tcmap := nl.TcPrioMap{
- Bands: int32(prio.Bands),
- Priomap: prio.PriorityMap,
+ Bands: int32(qdisc.Bands),
+ Priomap: qdisc.PriorityMap,
}
options = nl.NewRtAttr(nl.TCA_OPTIONS, tcmap.Serialize())
- } else if tbf, ok := qdisc.(*Tbf); ok {
+ case *Tbf:
opt := nl.TcTbfQopt{}
- opt.Rate.Rate = uint32(tbf.Rate)
- opt.Peakrate.Rate = uint32(tbf.Peakrate)
- opt.Limit = tbf.Limit
- opt.Buffer = tbf.Buffer
+ opt.Rate.Rate = uint32(qdisc.Rate)
+ opt.Peakrate.Rate = uint32(qdisc.Peakrate)
+ opt.Limit = qdisc.Limit
+ opt.Buffer = qdisc.Buffer
nl.NewRtAttrChild(options, nl.TCA_TBF_PARMS, opt.Serialize())
- if tbf.Rate >= uint64(1<<32) {
- nl.NewRtAttrChild(options, nl.TCA_TBF_RATE64, nl.Uint64Attr(tbf.Rate))
+ if qdisc.Rate >= uint64(1<<32) {
+ nl.NewRtAttrChild(options, nl.TCA_TBF_RATE64, nl.Uint64Attr(qdisc.Rate))
}
- if tbf.Peakrate >= uint64(1<<32) {
- nl.NewRtAttrChild(options, nl.TCA_TBF_PRATE64, nl.Uint64Attr(tbf.Peakrate))
+ if qdisc.Peakrate >= uint64(1<<32) {
+ nl.NewRtAttrChild(options, nl.TCA_TBF_PRATE64, nl.Uint64Attr(qdisc.Peakrate))
}
- if tbf.Peakrate > 0 {
- nl.NewRtAttrChild(options, nl.TCA_TBF_PBURST, nl.Uint32Attr(tbf.Minburst))
+ if qdisc.Peakrate > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_TBF_PBURST, nl.Uint32Attr(qdisc.Minburst))
}
- } else if htb, ok := qdisc.(*Htb); ok {
+ case *Htb:
opt := nl.TcHtbGlob{}
- opt.Version = htb.Version
- opt.Rate2Quantum = htb.Rate2Quantum
- opt.Defcls = htb.Defcls
+ opt.Version = qdisc.Version
+ opt.Rate2Quantum = qdisc.Rate2Quantum
+ opt.Defcls = qdisc.Defcls
// TODO: Handle Debug properly. For now default to 0
- opt.Debug = htb.Debug
- opt.DirectPkts = htb.DirectPkts
+ opt.Debug = qdisc.Debug
+ opt.DirectPkts = qdisc.DirectPkts
nl.NewRtAttrChild(options, nl.TCA_HTB_INIT, opt.Serialize())
// nl.NewRtAttrChild(options, nl.TCA_HTB_DIRECT_QLEN, opt.Serialize())
- } else if netem, ok := qdisc.(*Netem); ok {
+ case *Netem:
opt := nl.TcNetemQopt{}
- opt.Latency = netem.Latency
- opt.Limit = netem.Limit
- opt.Loss = netem.Loss
- opt.Gap = netem.Gap
- opt.Duplicate = netem.Duplicate
- opt.Jitter = netem.Jitter
+ opt.Latency = qdisc.Latency
+ opt.Limit = qdisc.Limit
+ opt.Loss = qdisc.Loss
+ opt.Gap = qdisc.Gap
+ opt.Duplicate = qdisc.Duplicate
+ opt.Jitter = qdisc.Jitter
options = nl.NewRtAttr(nl.TCA_OPTIONS, opt.Serialize())
// Correlation
corr := nl.TcNetemCorr{}
- corr.DelayCorr = netem.DelayCorr
- corr.LossCorr = netem.LossCorr
- corr.DupCorr = netem.DuplicateCorr
+ corr.DelayCorr = qdisc.DelayCorr
+ corr.LossCorr = qdisc.LossCorr
+ corr.DupCorr = qdisc.DuplicateCorr
if corr.DelayCorr > 0 || corr.LossCorr > 0 || corr.DupCorr > 0 {
nl.NewRtAttrChild(options, nl.TCA_NETEM_CORR, corr.Serialize())
}
// Corruption
corruption := nl.TcNetemCorrupt{}
- corruption.Probability = netem.CorruptProb
- corruption.Correlation = netem.CorruptCorr
+ corruption.Probability = qdisc.CorruptProb
+ corruption.Correlation = qdisc.CorruptCorr
if corruption.Probability > 0 {
nl.NewRtAttrChild(options, nl.TCA_NETEM_CORRUPT, corruption.Serialize())
}
// Reorder
reorder := nl.TcNetemReorder{}
- reorder.Probability = netem.ReorderProb
- reorder.Correlation = netem.ReorderCorr
+ reorder.Probability = qdisc.ReorderProb
+ reorder.Correlation = qdisc.ReorderCorr
if reorder.Probability > 0 {
nl.NewRtAttrChild(options, nl.TCA_NETEM_REORDER, reorder.Serialize())
}
- } else if _, ok := qdisc.(*Ingress); ok {
+ case *Ingress:
// ingress filters must use the proper handle
if qdisc.Attrs().Parent != HANDLE_INGRESS {
return fmt.Errorf("Ingress filters must set Parent to HANDLE_INGRESS")
}
+ case *FqCodel:
+ nl.NewRtAttrChild(options, nl.TCA_FQ_CODEL_ECN, nl.Uint32Attr((uint32(qdisc.ECN))))
+ if qdisc.Limit > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_FQ_CODEL_LIMIT, nl.Uint32Attr((uint32(qdisc.Limit))))
+ }
+ if qdisc.Interval > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_FQ_CODEL_INTERVAL, nl.Uint32Attr((uint32(qdisc.Interval))))
+ }
+ if qdisc.Flows > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_FQ_CODEL_FLOWS, nl.Uint32Attr((uint32(qdisc.Flows))))
+ }
+ if qdisc.Quantum > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_FQ_CODEL_QUANTUM, nl.Uint32Attr((uint32(qdisc.Quantum))))
+ }
+
+ case *Fq:
+ nl.NewRtAttrChild(options, nl.TCA_FQ_RATE_ENABLE, nl.Uint32Attr((uint32(qdisc.Pacing))))
+
+ if qdisc.Buckets > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_FQ_BUCKETS_LOG, nl.Uint32Attr((uint32(qdisc.Buckets))))
+ }
+ if qdisc.LowRateThreshold > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_FQ_LOW_RATE_THRESHOLD, nl.Uint32Attr((uint32(qdisc.LowRateThreshold))))
+ }
+ if qdisc.Quantum > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_FQ_QUANTUM, nl.Uint32Attr((uint32(qdisc.Quantum))))
+ }
+ if qdisc.InitialQuantum > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_FQ_INITIAL_QUANTUM, nl.Uint32Attr((uint32(qdisc.InitialQuantum))))
+ }
+ if qdisc.FlowRefillDelay > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_FQ_FLOW_REFILL_DELAY, nl.Uint32Attr((uint32(qdisc.FlowRefillDelay))))
+ }
+ if qdisc.FlowPacketLimit > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_FQ_FLOW_PLIMIT, nl.Uint32Attr((uint32(qdisc.FlowPacketLimit))))
+ }
+ if qdisc.FlowMaxRate > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_FQ_FLOW_MAX_RATE, nl.Uint32Attr((uint32(qdisc.FlowMaxRate))))
+ }
+ if qdisc.FlowDefaultRate > 0 {
+ nl.NewRtAttrChild(options, nl.TCA_FQ_FLOW_DEFAULT_RATE, nl.Uint32Attr((uint32(qdisc.FlowDefaultRate))))
+ }
}
req.AddData(options)
@@ -246,7 +291,7 @@ func QdiscList(link Link) ([]Qdisc, error) {
// Equivalent to: `tc qdisc show`.
// The list can be filtered by link.
func (h *Handle) QdiscList(link Link) ([]Qdisc, error) {
- req := h.newNetlinkRequest(syscall.RTM_GETQDISC, syscall.NLM_F_DUMP)
+ req := h.newNetlinkRequest(unix.RTM_GETQDISC, unix.NLM_F_DUMP)
index := int32(0)
if link != nil {
base := link.Attrs()
@@ -259,7 +304,7 @@ func (h *Handle) QdiscList(link Link) ([]Qdisc, error) {
}
req.AddData(msg)
- msgs, err := req.Execute(syscall.NETLINK_ROUTE, syscall.RTM_NEWQDISC)
+ msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWQDISC)
if err != nil {
return nil, err
}
@@ -301,6 +346,10 @@ func (h *Handle) QdiscList(link Link) ([]Qdisc, error) {
qdisc = &Ingress{}
case "htb":
qdisc = &Htb{}
+ case "fq":
+ qdisc = &Fq{}
+ case "fq_codel":
+ qdisc = &FqCodel{}
case "netem":
qdisc = &Netem{}
default:
@@ -334,6 +383,22 @@ func (h *Handle) QdiscList(link Link) ([]Qdisc, error) {
if err := parseHtbData(qdisc, data); err != nil {
return nil, err
}
+ case "fq":
+ data, err := nl.ParseRouteAttr(attr.Value)
+ if err != nil {
+ return nil, err
+ }
+ if err := parseFqData(qdisc, data); err != nil {
+ return nil, err
+ }
+ case "fq_codel":
+ data, err := nl.ParseRouteAttr(attr.Value)
+ if err != nil {
+ return nil, err
+ }
+ if err := parseFqCodelData(qdisc, data); err != nil {
+ return nil, err
+ }
case "netem":
if err := parseNetemData(qdisc, attr.Value); err != nil {
return nil, err
@@ -386,6 +451,61 @@ func parseHtbData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {
return nil
}
+func parseFqCodelData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {
+ native = nl.NativeEndian()
+ fqCodel := qdisc.(*FqCodel)
+ for _, datum := range data {
+
+ switch datum.Attr.Type {
+ case nl.TCA_FQ_CODEL_TARGET:
+ fqCodel.Target = native.Uint32(datum.Value)
+ case nl.TCA_FQ_CODEL_LIMIT:
+ fqCodel.Limit = native.Uint32(datum.Value)
+ case nl.TCA_FQ_CODEL_INTERVAL:
+ fqCodel.Interval = native.Uint32(datum.Value)
+ case nl.TCA_FQ_CODEL_ECN:
+ fqCodel.ECN = native.Uint32(datum.Value)
+ case nl.TCA_FQ_CODEL_FLOWS:
+ fqCodel.Flows = native.Uint32(datum.Value)
+ case nl.TCA_FQ_CODEL_QUANTUM:
+ fqCodel.Quantum = native.Uint32(datum.Value)
+ }
+ }
+ return nil
+}
+
+func parseFqData(qdisc Qdisc, data []syscall.NetlinkRouteAttr) error {
+ native = nl.NativeEndian()
+ fq := qdisc.(*Fq)
+ for _, datum := range data {
+ switch datum.Attr.Type {
+ case nl.TCA_FQ_BUCKETS_LOG:
+ fq.Buckets = native.Uint32(datum.Value)
+ case nl.TCA_FQ_LOW_RATE_THRESHOLD:
+ fq.LowRateThreshold = native.Uint32(datum.Value)
+ case nl.TCA_FQ_QUANTUM:
+ fq.Quantum = native.Uint32(datum.Value)
+ case nl.TCA_FQ_RATE_ENABLE:
+ fq.Pacing = native.Uint32(datum.Value)
+ case nl.TCA_FQ_INITIAL_QUANTUM:
+ fq.InitialQuantum = native.Uint32(datum.Value)
+ case nl.TCA_FQ_ORPHAN_MASK:
+ // TODO
+ case nl.TCA_FQ_FLOW_REFILL_DELAY:
+ fq.FlowRefillDelay = native.Uint32(datum.Value)
+ case nl.TCA_FQ_FLOW_PLIMIT:
+ fq.FlowPacketLimit = native.Uint32(datum.Value)
+ case nl.TCA_FQ_PLIMIT:
+ fq.PacketLimit = native.Uint32(datum.Value)
+ case nl.TCA_FQ_FLOW_MAX_RATE:
+ fq.FlowMaxRate = native.Uint32(datum.Value)
+ case nl.TCA_FQ_FLOW_DEFAULT_RATE:
+ fq.FlowDefaultRate = native.Uint32(datum.Value)
+ }
+ }
+ return nil
+}
+
func parseNetemData(qdisc Qdisc, value []byte) error {
netem := qdisc.(*Netem)
opt := nl.DeserializeTcNetemQopt(value)
diff --git a/vendor/github.com/vishvananda/netlink/route.go b/vendor/github.com/vishvananda/netlink/route.go
index 03ac4b239..2cd58ee33 100644
--- a/vendor/github.com/vishvananda/netlink/route.go
+++ b/vendor/github.com/vishvananda/netlink/route.go
@@ -16,6 +16,7 @@ type Destination interface {
Decode([]byte) error
Encode() ([]byte, error)
String() string
+ Equal(Destination) bool
}
type Encap interface {
@@ -23,6 +24,7 @@ type Encap interface {
Decode([]byte) error
Encode() ([]byte, error)
String() string
+ Equal(Encap) bool
}
// Route represents a netlink route.
@@ -43,6 +45,8 @@ type Route struct {
MPLSDst *int
NewDst Destination
Encap Encap
+ MTU int
+ AdvMSS int
}
func (r Route) String() string {
@@ -72,6 +76,25 @@ func (r Route) String() string {
return fmt.Sprintf("{%s}", strings.Join(elems, " "))
}
+func (r Route) Equal(x Route) bool {
+ return r.LinkIndex == x.LinkIndex &&
+ r.ILinkIndex == x.ILinkIndex &&
+ r.Scope == x.Scope &&
+ ipNetEqual(r.Dst, x.Dst) &&
+ r.Src.Equal(x.Src) &&
+ r.Gw.Equal(x.Gw) &&
+ nexthopInfoSlice(r.MultiPath).Equal(x.MultiPath) &&
+ r.Protocol == x.Protocol &&
+ r.Priority == x.Priority &&
+ r.Table == x.Table &&
+ r.Type == x.Type &&
+ r.Tos == x.Tos &&
+ r.Flags == x.Flags &&
+ (r.MPLSDst == x.MPLSDst || (r.MPLSDst != nil && x.MPLSDst != nil && *r.MPLSDst == *x.MPLSDst)) &&
+ (r.NewDst == x.NewDst || (r.NewDst != nil && r.NewDst.Equal(x.NewDst))) &&
+ (r.Encap == x.Encap || (r.Encap != nil && r.Encap.Equal(x.Encap)))
+}
+
func (r *Route) SetFlag(flag NextHopFlag) {
r.Flags |= int(flag)
}
@@ -110,7 +133,46 @@ func (n *NexthopInfo) String() string {
elems = append(elems, fmt.Sprintf("Encap: %s", n.Encap))
}
elems = append(elems, fmt.Sprintf("Weight: %d", n.Hops+1))
- elems = append(elems, fmt.Sprintf("Gw: %d", n.Gw))
+ elems = append(elems, fmt.Sprintf("Gw: %s", n.Gw))
elems = append(elems, fmt.Sprintf("Flags: %s", n.ListFlags()))
return fmt.Sprintf("{%s}", strings.Join(elems, " "))
}
+
+func (n NexthopInfo) Equal(x NexthopInfo) bool {
+ return n.LinkIndex == x.LinkIndex &&
+ n.Hops == x.Hops &&
+ n.Gw.Equal(x.Gw) &&
+ n.Flags == x.Flags &&
+ (n.NewDst == x.NewDst || (n.NewDst != nil && n.NewDst.Equal(x.NewDst))) &&
+ (n.Encap == x.Encap || (n.Encap != nil && n.Encap.Equal(x.Encap)))
+}
+
+type nexthopInfoSlice []*NexthopInfo
+
+func (n nexthopInfoSlice) Equal(x []*NexthopInfo) bool {
+ if len(n) != len(x) {
+ return false
+ }
+ for i := range n {
+ if n[i] == nil || x[i] == nil {
+ return false
+ }
+ if !n[i].Equal(*x[i]) {
+ return false
+ }
+ }
+ return true
+}
+
+// ipNetEqual returns true iff both IPNet are equal
+func ipNetEqual(ipn1 *net.IPNet, ipn2 *net.IPNet) bool {
+ if ipn1 == ipn2 {
+ return true
+ }
+ if ipn1 == nil || ipn2 == nil {
+ return false
+ }
+ m1, _ := ipn1.Mask.Size()
+ m2, _ := ipn2.Mask.Size()
+ return m1 == m2 && ipn1.IP.Equal(ipn2.IP)
+}
diff --git a/vendor/github.com/vishvananda/netlink/route_linux.go b/vendor/github.com/vishvananda/netlink/route_linux.go
index cd739e714..3f856711f 100644
--- a/vendor/github.com/vishvananda/netlink/route_linux.go
+++ b/vendor/github.com/vishvananda/netlink/route_linux.go
@@ -8,16 +8,17 @@ import (
"github.com/vishvananda/netlink/nl"
"github.com/vishvananda/netns"
+ "golang.org/x/sys/unix"
)
// RtAttr is shared so it is in netlink_linux.go
const (
- SCOPE_UNIVERSE Scope = syscall.RT_SCOPE_UNIVERSE
- SCOPE_SITE Scope = syscall.RT_SCOPE_SITE
- SCOPE_LINK Scope = syscall.RT_SCOPE_LINK
- SCOPE_HOST Scope = syscall.RT_SCOPE_HOST
- SCOPE_NOWHERE Scope = syscall.RT_SCOPE_NOWHERE
+ SCOPE_UNIVERSE Scope = unix.RT_SCOPE_UNIVERSE
+ SCOPE_SITE Scope = unix.RT_SCOPE_SITE
+ SCOPE_LINK Scope = unix.RT_SCOPE_LINK
+ SCOPE_HOST Scope = unix.RT_SCOPE_HOST
+ SCOPE_NOWHERE Scope = unix.RT_SCOPE_NOWHERE
)
const (
@@ -34,8 +35,8 @@ const (
)
const (
- FLAG_ONLINK NextHopFlag = syscall.RTNH_F_ONLINK
- FLAG_PERVASIVE NextHopFlag = syscall.RTNH_F_PERVASIVE
+ FLAG_ONLINK NextHopFlag = unix.RTNH_F_ONLINK
+ FLAG_PERVASIVE NextHopFlag = unix.RTNH_F_PERVASIVE
)
var testFlags = []flagString{
@@ -86,6 +87,34 @@ func (d *MPLSDestination) String() string {
return strings.Join(s, "/")
}
+func (d *MPLSDestination) Equal(x Destination) bool {
+ o, ok := x.(*MPLSDestination)
+ if !ok {
+ return false
+ }
+ if d == nil && o == nil {
+ return true
+ }
+ if d == nil || o == nil {
+ return false
+ }
+ if d.Labels == nil && o.Labels == nil {
+ return true
+ }
+ if d.Labels == nil || o.Labels == nil {
+ return false
+ }
+ if len(d.Labels) != len(o.Labels) {
+ return false
+ }
+ for i := range d.Labels {
+ if d.Labels[i] != o.Labels[i] {
+ return false
+ }
+ }
+ return true
+}
+
type MPLSEncap struct {
Labels []int
}
@@ -96,17 +125,17 @@ func (e *MPLSEncap) Type() int {
func (e *MPLSEncap) Decode(buf []byte) error {
if len(buf) < 4 {
- return fmt.Errorf("Lack of bytes")
+ return fmt.Errorf("lack of bytes")
}
native := nl.NativeEndian()
l := native.Uint16(buf)
if len(buf) < int(l) {
- return fmt.Errorf("Lack of bytes")
+ return fmt.Errorf("lack of bytes")
}
buf = buf[:l]
typ := native.Uint16(buf[2:])
if typ != nl.MPLS_IPTUNNEL_DST {
- return fmt.Errorf("Unknown MPLS Encap Type: %d", typ)
+ return fmt.Errorf("unknown MPLS Encap Type: %d", typ)
}
e.Labels = nl.DecodeMPLSStack(buf[4:])
return nil
@@ -129,6 +158,107 @@ func (e *MPLSEncap) String() string {
return strings.Join(s, "/")
}
+func (e *MPLSEncap) Equal(x Encap) bool {
+ o, ok := x.(*MPLSEncap)
+ if !ok {
+ return false
+ }
+ if e == nil && o == nil {
+ return true
+ }
+ if e == nil || o == nil {
+ return false
+ }
+ if e.Labels == nil && o.Labels == nil {
+ return true
+ }
+ if e.Labels == nil || o.Labels == nil {
+ return false
+ }
+ if len(e.Labels) != len(o.Labels) {
+ return false
+ }
+ for i := range e.Labels {
+ if e.Labels[i] != o.Labels[i] {
+ return false
+ }
+ }
+ return true
+}
+
+// SEG6 definitions
+type SEG6Encap struct {
+ Mode int
+ Segments []net.IP
+}
+
+func (e *SEG6Encap) Type() int {
+ return nl.LWTUNNEL_ENCAP_SEG6
+}
+func (e *SEG6Encap) Decode(buf []byte) error {
+ if len(buf) < 4 {
+ return fmt.Errorf("lack of bytes")
+ }
+ native := nl.NativeEndian()
+ // Get Length(l) & Type(typ) : 2 + 2 bytes
+ l := native.Uint16(buf)
+ if len(buf) < int(l) {
+ return fmt.Errorf("lack of bytes")
+ }
+ buf = buf[:l] // make sure buf size upper limit is Length
+ typ := native.Uint16(buf[2:])
+ if typ != nl.SEG6_IPTUNNEL_SRH {
+ return fmt.Errorf("unknown SEG6 Type: %d", typ)
+ }
+
+ var err error
+ e.Mode, e.Segments, err = nl.DecodeSEG6Encap(buf[4:])
+
+ return err
+}
+func (e *SEG6Encap) Encode() ([]byte, error) {
+ s, err := nl.EncodeSEG6Encap(e.Mode, e.Segments)
+ native := nl.NativeEndian()
+ hdr := make([]byte, 4)
+ native.PutUint16(hdr, uint16(len(s)+4))
+ native.PutUint16(hdr[2:], nl.SEG6_IPTUNNEL_SRH)
+ return append(hdr, s...), err
+}
+func (e *SEG6Encap) String() string {
+ segs := make([]string, 0, len(e.Segments))
+ // append segment backwards (from n to 0) since seg#0 is the last segment.
+ for i := len(e.Segments); i > 0; i-- {
+ segs = append(segs, fmt.Sprintf("%s", e.Segments[i-1]))
+ }
+ str := fmt.Sprintf("mode %s segs %d [ %s ]", nl.SEG6EncapModeString(e.Mode),
+ len(e.Segments), strings.Join(segs, " "))
+ return str
+}
+func (e *SEG6Encap) Equal(x Encap) bool {
+ o, ok := x.(*SEG6Encap)
+ if !ok {
+ return false
+ }
+ if e == o {
+ return true
+ }
+ if e == nil || o == nil {
+ return false
+ }
+ if e.Mode != o.Mode {
+ return false
+ }
+ if len(e.Segments) != len(o.Segments) {
+ return false
+ }
+ for i := range e.Segments {
+ if !e.Segments[i].Equal(o.Segments[i]) {
+ return false
+ }
+ }
+ return true
+}
+
// RouteAdd will add a route to the system.
// Equivalent to: `ip route add $route`
func RouteAdd(route *Route) error {
@@ -138,8 +268,8 @@ func RouteAdd(route *Route) error {
// RouteAdd will add a route to the system.
// Equivalent to: `ip route add $route`
func (h *Handle) RouteAdd(route *Route) error {
- flags := syscall.NLM_F_CREATE | syscall.NLM_F_EXCL | syscall.NLM_F_ACK
- req := h.newNetlinkRequest(syscall.RTM_NEWROUTE, flags)
+ flags := unix.NLM_F_CREATE | unix.NLM_F_EXCL | unix.NLM_F_ACK
+ req := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)
return h.routeHandle(route, req, nl.NewRtMsg())
}
@@ -152,8 +282,8 @@ func RouteReplace(route *Route) error {
// RouteReplace will add a route to the system.
// Equivalent to: `ip route replace $route`
func (h *Handle) RouteReplace(route *Route) error {
- flags := syscall.NLM_F_CREATE | syscall.NLM_F_REPLACE | syscall.NLM_F_ACK
- req := h.newNetlinkRequest(syscall.RTM_NEWROUTE, flags)
+ flags := unix.NLM_F_CREATE | unix.NLM_F_REPLACE | unix.NLM_F_ACK
+ req := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)
return h.routeHandle(route, req, nl.NewRtMsg())
}
@@ -166,7 +296,7 @@ func RouteDel(route *Route) error {
// RouteDel will delete a route from the system.
// Equivalent to: `ip route del $route`
func (h *Handle) RouteDel(route *Route) error {
- req := h.newNetlinkRequest(syscall.RTM_DELROUTE, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_DELROUTE, unix.NLM_F_ACK)
return h.routeHandle(route, req, nl.NewRtDelMsg())
}
@@ -189,12 +319,12 @@ func (h *Handle) routeHandle(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg
} else {
dstData = route.Dst.IP.To16()
}
- rtAttrs = append(rtAttrs, nl.NewRtAttr(syscall.RTA_DST, dstData))
+ rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_DST, dstData))
} else if route.MPLSDst != nil {
family = nl.FAMILY_MPLS
msg.Dst_len = uint8(20)
- msg.Type = syscall.RTN_UNICAST
- rtAttrs = append(rtAttrs, nl.NewRtAttr(syscall.RTA_DST, nl.EncodeMPLSStack(*route.MPLSDst)))
+ msg.Type = unix.RTN_UNICAST
+ rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_DST, nl.EncodeMPLSStack(*route.MPLSDst)))
}
if route.NewDst != nil {
@@ -232,7 +362,7 @@ func (h *Handle) routeHandle(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg
srcData = route.Src.To16()
}
// The commonly used src ip for routes is actually PREFSRC
- rtAttrs = append(rtAttrs, nl.NewRtAttr(syscall.RTA_PREFSRC, srcData))
+ rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_PREFSRC, srcData))
}
if route.Gw != nil {
@@ -247,14 +377,14 @@ func (h *Handle) routeHandle(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg
} else {
gwData = route.Gw.To16()
}
- rtAttrs = append(rtAttrs, nl.NewRtAttr(syscall.RTA_GATEWAY, gwData))
+ rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_GATEWAY, gwData))
}
if len(route.MultiPath) > 0 {
buf := []byte{}
for _, nh := range route.MultiPath {
rtnh := &nl.RtNexthop{
- RtNexthop: syscall.RtNexthop{
+ RtNexthop: unix.RtNexthop{
Hops: uint8(nh.Hops),
Ifindex: int32(nh.LinkIndex),
Flags: uint8(nh.Flags),
@@ -267,9 +397,9 @@ func (h *Handle) routeHandle(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg
return fmt.Errorf("gateway, source, and destination ip are not the same IP family")
}
if gwFamily == FAMILY_V4 {
- children = append(children, nl.NewRtAttr(syscall.RTA_GATEWAY, []byte(nh.Gw.To4())))
+ children = append(children, nl.NewRtAttr(unix.RTA_GATEWAY, []byte(nh.Gw.To4())))
} else {
- children = append(children, nl.NewRtAttr(syscall.RTA_GATEWAY, []byte(nh.Gw.To16())))
+ children = append(children, nl.NewRtAttr(unix.RTA_GATEWAY, []byte(nh.Gw.To16())))
}
}
if nh.NewDst != nil {
@@ -295,15 +425,15 @@ func (h *Handle) routeHandle(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg
rtnh.Children = children
buf = append(buf, rtnh.Serialize()...)
}
- rtAttrs = append(rtAttrs, nl.NewRtAttr(syscall.RTA_MULTIPATH, buf))
+ rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_MULTIPATH, buf))
}
if route.Table > 0 {
if route.Table >= 256 {
- msg.Table = syscall.RT_TABLE_UNSPEC
+ msg.Table = unix.RT_TABLE_UNSPEC
b := make([]byte, 4)
native.PutUint32(b, uint32(route.Table))
- rtAttrs = append(rtAttrs, nl.NewRtAttr(syscall.RTA_TABLE, b))
+ rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_TABLE, b))
} else {
msg.Table = uint8(route.Table)
}
@@ -312,7 +442,7 @@ func (h *Handle) routeHandle(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg
if route.Priority > 0 {
b := make([]byte, 4)
native.PutUint32(b, uint32(route.Priority))
- rtAttrs = append(rtAttrs, nl.NewRtAttr(syscall.RTA_PRIORITY, b))
+ rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_PRIORITY, b))
}
if route.Tos > 0 {
msg.Tos = uint8(route.Tos)
@@ -324,6 +454,25 @@ func (h *Handle) routeHandle(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg
msg.Type = uint8(route.Type)
}
+ var metrics []*nl.RtAttr
+ // TODO: support other rta_metric values
+ if route.MTU > 0 {
+ b := nl.Uint32Attr(uint32(route.MTU))
+ metrics = append(metrics, nl.NewRtAttr(unix.RTAX_MTU, b))
+ }
+ if route.AdvMSS > 0 {
+ b := nl.Uint32Attr(uint32(route.AdvMSS))
+ metrics = append(metrics, nl.NewRtAttr(unix.RTAX_ADVMSS, b))
+ }
+
+ if metrics != nil {
+ attr := nl.NewRtAttr(unix.RTA_METRICS, nil)
+ for _, metric := range metrics {
+ attr.AddChild(metric)
+ }
+ rtAttrs = append(rtAttrs, attr)
+ }
+
msg.Flags = uint32(route.Flags)
msg.Scope = uint8(route.Scope)
msg.Family = uint8(family)
@@ -338,9 +487,9 @@ func (h *Handle) routeHandle(route *Route, req *nl.NetlinkRequest, msg *nl.RtMsg
)
native.PutUint32(b, uint32(route.LinkIndex))
- req.AddData(nl.NewRtAttr(syscall.RTA_OIF, b))
+ req.AddData(nl.NewRtAttr(unix.RTA_OIF, b))
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -373,11 +522,11 @@ func RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, e
// RouteListFiltered gets a list of routes in the system filtered with specified rules.
// All rules must be defined in RouteFilter struct
func (h *Handle) RouteListFiltered(family int, filter *Route, filterMask uint64) ([]Route, error) {
- req := h.newNetlinkRequest(syscall.RTM_GETROUTE, syscall.NLM_F_DUMP)
+ req := h.newNetlinkRequest(unix.RTM_GETROUTE, unix.NLM_F_DUMP)
infmsg := nl.NewIfInfomsg(family)
req.AddData(infmsg)
- msgs, err := req.Execute(syscall.NETLINK_ROUTE, syscall.RTM_NEWROUTE)
+ msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWROUTE)
if err != nil {
return nil, err
}
@@ -385,11 +534,11 @@ func (h *Handle) RouteListFiltered(family int, filter *Route, filterMask uint64)
var res []Route
for _, m := range msgs {
msg := nl.DeserializeRtMsg(m)
- if msg.Flags&syscall.RTM_F_CLONED != 0 {
+ if msg.Flags&unix.RTM_F_CLONED != 0 {
// Ignore cloned routes
continue
}
- if msg.Table != syscall.RT_TABLE_MAIN {
+ if msg.Table != unix.RT_TABLE_MAIN {
if filter == nil || filter != nil && filterMask&RT_FILTER_TABLE == 0 {
// Ignore non-main tables
continue
@@ -401,7 +550,7 @@ func (h *Handle) RouteListFiltered(family int, filter *Route, filterMask uint64)
}
if filter != nil {
switch {
- case filterMask&RT_FILTER_TABLE != 0 && filter.Table != syscall.RT_TABLE_UNSPEC && route.Table != filter.Table:
+ case filterMask&RT_FILTER_TABLE != 0 && filter.Table != unix.RT_TABLE_UNSPEC && route.Table != filter.Table:
continue
case filterMask&RT_FILTER_PROTOCOL != 0 && route.Protocol != filter.Protocol:
continue
@@ -421,19 +570,8 @@ func (h *Handle) RouteListFiltered(family int, filter *Route, filterMask uint64)
continue
case filterMask&RT_FILTER_DST != 0:
if filter.MPLSDst == nil || route.MPLSDst == nil || (*filter.MPLSDst) != (*route.MPLSDst) {
- if filter.Dst == nil {
- if route.Dst != nil {
- continue
- }
- } else {
- if route.Dst == nil {
- continue
- }
- aMaskLen, aMaskBits := route.Dst.Mask.Size()
- bMaskLen, bMaskBits := filter.Dst.Mask.Size()
- if !(route.Dst.IP.Equal(filter.Dst.IP) && aMaskLen == bMaskLen && aMaskBits == bMaskBits) {
- continue
- }
+ if !ipNetEqual(route.Dst, filter.Dst) {
+ continue
}
}
}
@@ -463,11 +601,11 @@ func deserializeRoute(m []byte) (Route, error) {
var encap, encapType syscall.NetlinkRouteAttr
for _, attr := range attrs {
switch attr.Attr.Type {
- case syscall.RTA_GATEWAY:
+ case unix.RTA_GATEWAY:
route.Gw = net.IP(attr.Value)
- case syscall.RTA_PREFSRC:
+ case unix.RTA_PREFSRC:
route.Src = net.IP(attr.Value)
- case syscall.RTA_DST:
+ case unix.RTA_DST:
if msg.Family == nl.FAMILY_MPLS {
stack := nl.DecodeMPLSStack(attr.Value)
if len(stack) == 0 || len(stack) > 1 {
@@ -480,36 +618,36 @@ func deserializeRoute(m []byte) (Route, error) {
Mask: net.CIDRMask(int(msg.Dst_len), 8*len(attr.Value)),
}
}
- case syscall.RTA_OIF:
+ case unix.RTA_OIF:
route.LinkIndex = int(native.Uint32(attr.Value[0:4]))
- case syscall.RTA_IIF:
+ case unix.RTA_IIF:
route.ILinkIndex = int(native.Uint32(attr.Value[0:4]))
- case syscall.RTA_PRIORITY:
+ case unix.RTA_PRIORITY:
route.Priority = int(native.Uint32(attr.Value[0:4]))
- case syscall.RTA_TABLE:
+ case unix.RTA_TABLE:
route.Table = int(native.Uint32(attr.Value[0:4]))
- case syscall.RTA_MULTIPATH:
+ case unix.RTA_MULTIPATH:
parseRtNexthop := func(value []byte) (*NexthopInfo, []byte, error) {
- if len(value) < syscall.SizeofRtNexthop {
- return nil, nil, fmt.Errorf("Lack of bytes")
+ if len(value) < unix.SizeofRtNexthop {
+ return nil, nil, fmt.Errorf("lack of bytes")
}
nh := nl.DeserializeRtNexthop(value)
if len(value) < int(nh.RtNexthop.Len) {
- return nil, nil, fmt.Errorf("Lack of bytes")
+ return nil, nil, fmt.Errorf("lack of bytes")
}
info := &NexthopInfo{
LinkIndex: int(nh.RtNexthop.Ifindex),
Hops: int(nh.RtNexthop.Hops),
Flags: int(nh.RtNexthop.Flags),
}
- attrs, err := nl.ParseRouteAttr(value[syscall.SizeofRtNexthop:int(nh.RtNexthop.Len)])
+ attrs, err := nl.ParseRouteAttr(value[unix.SizeofRtNexthop:int(nh.RtNexthop.Len)])
if err != nil {
return nil, nil, err
}
var encap, encapType syscall.NetlinkRouteAttr
for _, attr := range attrs {
switch attr.Attr.Type {
- case syscall.RTA_GATEWAY:
+ case unix.RTA_GATEWAY:
info.Gw = net.IP(attr.Value)
case nl.RTA_NEWDST:
var d Destination
@@ -566,6 +704,19 @@ func deserializeRoute(m []byte) (Route, error) {
encapType = attr
case nl.RTA_ENCAP:
encap = attr
+ case unix.RTA_METRICS:
+ metrics, err := nl.ParseRouteAttr(attr.Value)
+ if err != nil {
+ return route, err
+ }
+ for _, metric := range metrics {
+ switch metric.Attr.Type {
+ case unix.RTAX_MTU:
+ route.MTU = int(native.Uint32(metric.Value[0:4]))
+ case unix.RTAX_ADVMSS:
+ route.AdvMSS = int(native.Uint32(metric.Value[0:4]))
+ }
+ }
}
}
@@ -578,6 +729,11 @@ func deserializeRoute(m []byte) (Route, error) {
if err := e.Decode(encap.Value); err != nil {
return route, err
}
+ case nl.LWTUNNEL_ENCAP_SEG6:
+ e = &SEG6Encap{}
+ if err := e.Decode(encap.Value); err != nil {
+ return route, err
+ }
}
route.Encap = e
}
@@ -594,7 +750,7 @@ func RouteGet(destination net.IP) ([]Route, error) {
// RouteGet gets a route to a specific destination from the host system.
// Equivalent to: 'ip route get'.
func (h *Handle) RouteGet(destination net.IP) ([]Route, error) {
- req := h.newNetlinkRequest(syscall.RTM_GETROUTE, syscall.NLM_F_REQUEST)
+ req := h.newNetlinkRequest(unix.RTM_GETROUTE, unix.NLM_F_REQUEST)
family := nl.GetIPFamily(destination)
var destinationData []byte
var bitlen uint8
@@ -610,10 +766,10 @@ func (h *Handle) RouteGet(destination net.IP) ([]Route, error) {
msg.Dst_len = bitlen
req.AddData(msg)
- rtaDst := nl.NewRtAttr(syscall.RTA_DST, destinationData)
+ rtaDst := nl.NewRtAttr(unix.RTA_DST, destinationData)
req.AddData(rtaDst)
- msgs, err := req.Execute(syscall.NETLINK_ROUTE, syscall.RTM_NEWROUTE)
+ msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWROUTE)
if err != nil {
return nil, err
}
@@ -633,17 +789,36 @@ func (h *Handle) RouteGet(destination net.IP) ([]Route, error) {
// RouteSubscribe takes a chan down which notifications will be sent
// when routes are added or deleted. Close the 'done' chan to stop subscription.
func RouteSubscribe(ch chan<- RouteUpdate, done <-chan struct{}) error {
- return routeSubscribeAt(netns.None(), netns.None(), ch, done)
+ return routeSubscribeAt(netns.None(), netns.None(), ch, done, nil, false)
}
// RouteSubscribeAt works like RouteSubscribe plus it allows the caller
// to choose the network namespace in which to subscribe (ns).
func RouteSubscribeAt(ns netns.NsHandle, ch chan<- RouteUpdate, done <-chan struct{}) error {
- return routeSubscribeAt(ns, netns.None(), ch, done)
+ return routeSubscribeAt(ns, netns.None(), ch, done, nil, false)
+}
+
+// RouteSubscribeOptions contains a set of options to use with
+// RouteSubscribeWithOptions.
+type RouteSubscribeOptions struct {
+ Namespace *netns.NsHandle
+ ErrorCallback func(error)
+ ListExisting bool
+}
+
+// RouteSubscribeWithOptions work like RouteSubscribe but enable to
+// provide additional options to modify the behavior. Currently, the
+// namespace can be provided as well as an error callback.
+func RouteSubscribeWithOptions(ch chan<- RouteUpdate, done <-chan struct{}, options RouteSubscribeOptions) error {
+ if options.Namespace == nil {
+ none := netns.None()
+ options.Namespace = &none
+ }
+ return routeSubscribeAt(*options.Namespace, netns.None(), ch, done, options.ErrorCallback, options.ListExisting)
}
-func routeSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- RouteUpdate, done <-chan struct{}) error {
- s, err := nl.SubscribeAt(newNs, curNs, syscall.NETLINK_ROUTE, syscall.RTNLGRP_IPV4_ROUTE, syscall.RTNLGRP_IPV6_ROUTE)
+func routeSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- RouteUpdate, done <-chan struct{}, cberr func(error), listExisting bool) error {
+ s, err := nl.SubscribeAt(newNs, curNs, unix.NETLINK_ROUTE, unix.RTNLGRP_IPV4_ROUTE, unix.RTNLGRP_IPV6_ROUTE)
if err != nil {
return err
}
@@ -653,16 +828,45 @@ func routeSubscribeAt(newNs, curNs netns.NsHandle, ch chan<- RouteUpdate, done <
s.Close()
}()
}
+ if listExisting {
+ req := pkgHandle.newNetlinkRequest(unix.RTM_GETROUTE,
+ unix.NLM_F_DUMP)
+ infmsg := nl.NewIfInfomsg(unix.AF_UNSPEC)
+ req.AddData(infmsg)
+ if err := s.Send(req); err != nil {
+ return err
+ }
+ }
go func() {
defer close(ch)
for {
msgs, err := s.Receive()
if err != nil {
+ if cberr != nil {
+ cberr(err)
+ }
return
}
for _, m := range msgs {
+ if m.Header.Type == unix.NLMSG_DONE {
+ continue
+ }
+ if m.Header.Type == unix.NLMSG_ERROR {
+ native := nl.NativeEndian()
+ error := int32(native.Uint32(m.Data[0:4]))
+ if error == 0 {
+ continue
+ }
+ if cberr != nil {
+ cberr(syscall.Errno(-error))
+ }
+ return
+ }
route, err := deserializeRoute(m.Data)
if err != nil {
+ if cberr != nil {
+ cberr(err)
+ }
return
}
ch <- RouteUpdate{Type: m.Header.Type, Route: route}
diff --git a/vendor/github.com/vishvananda/netlink/rule.go b/vendor/github.com/vishvananda/netlink/rule.go
index f0243defd..7fc8ae5df 100644
--- a/vendor/github.com/vishvananda/netlink/rule.go
+++ b/vendor/github.com/vishvananda/netlink/rule.go
@@ -8,6 +8,7 @@ import (
// Rule represents a netlink rule.
type Rule struct {
Priority int
+ Family int
Table int
Mark int
Mask int
@@ -20,6 +21,7 @@ type Rule struct {
OifName string
SuppressIfgroup int
SuppressPrefixlen int
+ Invert bool
}
func (r Rule) String() string {
diff --git a/vendor/github.com/vishvananda/netlink/rule_linux.go b/vendor/github.com/vishvananda/netlink/rule_linux.go
index f9cdc855f..6238ae458 100644
--- a/vendor/github.com/vishvananda/netlink/rule_linux.go
+++ b/vendor/github.com/vishvananda/netlink/rule_linux.go
@@ -3,11 +3,13 @@ package netlink
import (
"fmt"
"net"
- "syscall"
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
)
+const FibRuleInvert = 0x2
+
// RuleAdd adds a rule to the system.
// Equivalent to: ip rule add
func RuleAdd(rule *Rule) error {
@@ -17,7 +19,7 @@ func RuleAdd(rule *Rule) error {
// RuleAdd adds a rule to the system.
// Equivalent to: ip rule add
func (h *Handle) RuleAdd(rule *Rule) error {
- req := h.newNetlinkRequest(syscall.RTM_NEWRULE, syscall.NLM_F_CREATE|syscall.NLM_F_EXCL|syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_NEWRULE, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
return ruleHandle(rule, req)
}
@@ -30,15 +32,31 @@ func RuleDel(rule *Rule) error {
// RuleDel deletes a rule from the system.
// Equivalent to: ip rule del
func (h *Handle) RuleDel(rule *Rule) error {
- req := h.newNetlinkRequest(syscall.RTM_DELRULE, syscall.NLM_F_CREATE|syscall.NLM_F_EXCL|syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(unix.RTM_DELRULE, unix.NLM_F_ACK)
return ruleHandle(rule, req)
}
func ruleHandle(rule *Rule, req *nl.NetlinkRequest) error {
msg := nl.NewRtMsg()
- msg.Family = syscall.AF_INET
- var dstFamily uint8
+ msg.Family = unix.AF_INET
+ msg.Protocol = unix.RTPROT_BOOT
+ msg.Scope = unix.RT_SCOPE_UNIVERSE
+ msg.Table = unix.RT_TABLE_UNSPEC
+ msg.Type = unix.RTN_UNSPEC
+ if req.NlMsghdr.Flags&unix.NLM_F_CREATE > 0 {
+ msg.Type = unix.RTN_UNICAST
+ }
+ if rule.Invert {
+ msg.Flags |= FibRuleInvert
+ }
+ if rule.Family != 0 {
+ msg.Family = uint8(rule.Family)
+ }
+ if rule.Table >= 0 && rule.Table < 256 {
+ msg.Table = uint8(rule.Table)
+ }
+ var dstFamily uint8
var rtAttrs []*nl.RtAttr
if rule.Dst != nil && rule.Dst.IP != nil {
dstLen, _ := rule.Dst.Mask.Size()
@@ -46,12 +64,12 @@ func ruleHandle(rule *Rule, req *nl.NetlinkRequest) error {
msg.Family = uint8(nl.GetIPFamily(rule.Dst.IP))
dstFamily = msg.Family
var dstData []byte
- if msg.Family == syscall.AF_INET {
+ if msg.Family == unix.AF_INET {
dstData = rule.Dst.IP.To4()
} else {
dstData = rule.Dst.IP.To16()
}
- rtAttrs = append(rtAttrs, nl.NewRtAttr(syscall.RTA_DST, dstData))
+ rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_DST, dstData))
}
if rule.Src != nil && rule.Src.IP != nil {
@@ -62,19 +80,12 @@ func ruleHandle(rule *Rule, req *nl.NetlinkRequest) error {
srcLen, _ := rule.Src.Mask.Size()
msg.Src_len = uint8(srcLen)
var srcData []byte
- if msg.Family == syscall.AF_INET {
+ if msg.Family == unix.AF_INET {
srcData = rule.Src.IP.To4()
} else {
srcData = rule.Src.IP.To16()
}
- rtAttrs = append(rtAttrs, nl.NewRtAttr(syscall.RTA_SRC, srcData))
- }
-
- if rule.Table >= 0 {
- msg.Table = uint8(rule.Table)
- if rule.Table >= 256 {
- msg.Table = syscall.RT_TABLE_UNSPEC
- }
+ rtAttrs = append(rtAttrs, nl.NewRtAttr(unix.RTA_SRC, srcData))
}
req.AddData(msg)
@@ -139,7 +150,7 @@ func ruleHandle(rule *Rule, req *nl.NetlinkRequest) error {
req.AddData(nl.NewRtAttr(nl.FRA_GOTO, b))
}
- _, err := req.Execute(syscall.NETLINK_ROUTE, 0)
+ _, err := req.Execute(unix.NETLINK_ROUTE, 0)
return err
}
@@ -152,11 +163,11 @@ func RuleList(family int) ([]Rule, error) {
// RuleList lists rules in the system.
// Equivalent to: ip rule list
func (h *Handle) RuleList(family int) ([]Rule, error) {
- req := h.newNetlinkRequest(syscall.RTM_GETRULE, syscall.NLM_F_DUMP|syscall.NLM_F_REQUEST)
+ req := h.newNetlinkRequest(unix.RTM_GETRULE, unix.NLM_F_DUMP|unix.NLM_F_REQUEST)
msg := nl.NewIfInfomsg(family)
req.AddData(msg)
- msgs, err := req.Execute(syscall.NETLINK_ROUTE, syscall.RTM_NEWRULE)
+ msgs, err := req.Execute(unix.NETLINK_ROUTE, unix.RTM_NEWRULE)
if err != nil {
return nil, err
}
@@ -172,9 +183,11 @@ func (h *Handle) RuleList(family int) ([]Rule, error) {
rule := NewRule()
+ rule.Invert = msg.Flags&FibRuleInvert > 0
+
for j := range attrs {
switch attrs[j].Attr.Type {
- case syscall.RTA_TABLE:
+ case unix.RTA_TABLE:
rule.Table = int(native.Uint32(attrs[j].Value[0:4]))
case nl.FRA_SRC:
rule.Src = &net.IPNet{
diff --git a/vendor/github.com/vishvananda/netlink/socket_linux.go b/vendor/github.com/vishvananda/netlink/socket_linux.go
index b42b84f0c..99e9fb4d8 100644
--- a/vendor/github.com/vishvananda/netlink/socket_linux.go
+++ b/vendor/github.com/vishvananda/netlink/socket_linux.go
@@ -4,9 +4,9 @@ import (
"errors"
"fmt"
"net"
- "syscall"
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
)
const (
@@ -123,15 +123,15 @@ func SocketGet(local, remote net.Addr) (*Socket, error) {
return nil, ErrNotImplemented
}
- s, err := nl.Subscribe(syscall.NETLINK_INET_DIAG)
+ s, err := nl.Subscribe(unix.NETLINK_INET_DIAG)
if err != nil {
return nil, err
}
defer s.Close()
req := nl.NewNetlinkRequest(nl.SOCK_DIAG_BY_FAMILY, 0)
req.AddData(&socketRequest{
- Family: syscall.AF_INET,
- Protocol: syscall.IPPROTO_TCP,
+ Family: unix.AF_INET,
+ Protocol: unix.IPPROTO_TCP,
ID: SocketID{
SourcePort: uint16(localTCP.Port),
DestinationPort: uint16(remoteTCP.Port),
diff --git a/vendor/github.com/vishvananda/netlink/xfrm.go b/vendor/github.com/vishvananda/netlink/xfrm.go
index 9962dcf70..02b41842e 100644
--- a/vendor/github.com/vishvananda/netlink/xfrm.go
+++ b/vendor/github.com/vishvananda/netlink/xfrm.go
@@ -2,19 +2,20 @@ package netlink
import (
"fmt"
- "syscall"
+
+ "golang.org/x/sys/unix"
)
// Proto is an enum representing an ipsec protocol.
type Proto uint8
const (
- XFRM_PROTO_ROUTE2 Proto = syscall.IPPROTO_ROUTING
- XFRM_PROTO_ESP Proto = syscall.IPPROTO_ESP
- XFRM_PROTO_AH Proto = syscall.IPPROTO_AH
- XFRM_PROTO_HAO Proto = syscall.IPPROTO_DSTOPTS
+ XFRM_PROTO_ROUTE2 Proto = unix.IPPROTO_ROUTING
+ XFRM_PROTO_ESP Proto = unix.IPPROTO_ESP
+ XFRM_PROTO_AH Proto = unix.IPPROTO_AH
+ XFRM_PROTO_HAO Proto = unix.IPPROTO_DSTOPTS
XFRM_PROTO_COMP Proto = 0x6c // NOTE not defined on darwin
- XFRM_PROTO_IPSEC_ANY Proto = syscall.IPPROTO_RAW
+ XFRM_PROTO_IPSEC_ANY Proto = unix.IPPROTO_RAW
)
func (p Proto) String() string {
diff --git a/vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go b/vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go
index 7b98c9cb6..efe72ddf2 100644
--- a/vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go
+++ b/vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go
@@ -2,11 +2,10 @@ package netlink
import (
"fmt"
- "syscall"
-
- "github.com/vishvananda/netns"
"github.com/vishvananda/netlink/nl"
+ "github.com/vishvananda/netns"
+ "golang.org/x/sys/unix"
)
type XfrmMsg interface {
@@ -39,7 +38,7 @@ func XfrmMonitor(ch chan<- XfrmMsg, done <-chan struct{}, errorChan chan<- error
if err != nil {
return nil
}
- s, err := nl.SubscribeAt(netns.None(), netns.None(), syscall.NETLINK_XFRM, groups...)
+ s, err := nl.SubscribeAt(netns.None(), netns.None(), unix.NETLINK_XFRM, groups...)
if err != nil {
return err
}
diff --git a/vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go b/vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go
index c3d4e4222..fde0c2ca5 100644
--- a/vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go
+++ b/vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go
@@ -1,9 +1,8 @@
package netlink
import (
- "syscall"
-
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
)
func selFromPolicy(sel *nl.XfrmSelector, policy *XfrmPolicy) {
@@ -55,7 +54,7 @@ func (h *Handle) XfrmPolicyUpdate(policy *XfrmPolicy) error {
}
func (h *Handle) xfrmPolicyAddOrUpdate(policy *XfrmPolicy, nlProto int) error {
- req := h.newNetlinkRequest(nlProto, syscall.NLM_F_CREATE|syscall.NLM_F_EXCL|syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(nlProto, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
msg := &nl.XfrmUserpolicyInfo{}
selFromPolicy(&msg.Sel, policy)
@@ -91,7 +90,7 @@ func (h *Handle) xfrmPolicyAddOrUpdate(policy *XfrmPolicy, nlProto int) error {
req.AddData(out)
}
- _, err := req.Execute(syscall.NETLINK_XFRM, 0)
+ _, err := req.Execute(unix.NETLINK_XFRM, 0)
return err
}
@@ -121,12 +120,12 @@ func XfrmPolicyList(family int) ([]XfrmPolicy, error) {
// Equivalent to: `ip xfrm policy show`.
// The list can be filtered by ip family.
func (h *Handle) XfrmPolicyList(family int) ([]XfrmPolicy, error) {
- req := h.newNetlinkRequest(nl.XFRM_MSG_GETPOLICY, syscall.NLM_F_DUMP)
+ req := h.newNetlinkRequest(nl.XFRM_MSG_GETPOLICY, unix.NLM_F_DUMP)
msg := nl.NewIfInfomsg(family)
req.AddData(msg)
- msgs, err := req.Execute(syscall.NETLINK_XFRM, nl.XFRM_MSG_NEWPOLICY)
+ msgs, err := req.Execute(unix.NETLINK_XFRM, nl.XFRM_MSG_NEWPOLICY)
if err != nil {
return nil, err
}
@@ -165,13 +164,13 @@ func XfrmPolicyFlush() error {
// XfrmPolicyFlush will flush the policies on the system.
// Equivalent to: `ip xfrm policy flush`
func (h *Handle) XfrmPolicyFlush() error {
- req := h.newNetlinkRequest(nl.XFRM_MSG_FLUSHPOLICY, syscall.NLM_F_ACK)
- _, err := req.Execute(syscall.NETLINK_XFRM, 0)
+ req := h.newNetlinkRequest(nl.XFRM_MSG_FLUSHPOLICY, unix.NLM_F_ACK)
+ _, err := req.Execute(unix.NETLINK_XFRM, 0)
return err
}
func (h *Handle) xfrmPolicyGetOrDelete(policy *XfrmPolicy, nlProto int) (*XfrmPolicy, error) {
- req := h.newNetlinkRequest(nlProto, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(nlProto, unix.NLM_F_ACK)
msg := &nl.XfrmUserpolicyId{}
selFromPolicy(&msg.Sel, policy)
@@ -189,7 +188,7 @@ func (h *Handle) xfrmPolicyGetOrDelete(policy *XfrmPolicy, nlProto int) (*XfrmPo
resType = 0
}
- msgs, err := req.Execute(syscall.NETLINK_XFRM, uint16(resType))
+ msgs, err := req.Execute(unix.NETLINK_XFRM, uint16(resType))
if err != nil {
return nil, err
}
diff --git a/vendor/github.com/vishvananda/netlink/xfrm_state.go b/vendor/github.com/vishvananda/netlink/xfrm_state.go
index 368a9b986..d14740dc5 100644
--- a/vendor/github.com/vishvananda/netlink/xfrm_state.go
+++ b/vendor/github.com/vishvananda/netlink/xfrm_state.go
@@ -3,6 +3,7 @@ package netlink
import (
"fmt"
"net"
+ "time"
)
// XfrmStateAlgo represents the algorithm to use for the ipsec encryption.
@@ -67,6 +68,19 @@ type XfrmStateLimits struct {
TimeUseHard uint64
}
+// XfrmStateStats represents the current number of bytes/packets
+// processed by this State, the State's installation and first use
+// time and the replay window counters.
+type XfrmStateStats struct {
+ ReplayWindow uint32
+ Replay uint32
+ Failed uint32
+ Bytes uint64
+ Packets uint64
+ AddTime uint64
+ UseTime uint64
+}
+
// XfrmState represents the state of an ipsec policy. It optionally
// contains an XfrmStateAlgo for encryption and one for authentication.
type XfrmState struct {
@@ -78,6 +92,7 @@ type XfrmState struct {
Reqid int
ReplayWindow int
Limits XfrmStateLimits
+ Statistics XfrmStateStats
Mark *XfrmMark
Auth *XfrmStateAlgo
Crypt *XfrmStateAlgo
@@ -94,10 +109,16 @@ func (sa XfrmState) Print(stats bool) string {
if !stats {
return sa.String()
}
-
- return fmt.Sprintf("%s, ByteSoft: %s, ByteHard: %s, PacketSoft: %s, PacketHard: %s, TimeSoft: %d, TimeHard: %d, TimeUseSoft: %d, TimeUseHard: %d",
+ at := time.Unix(int64(sa.Statistics.AddTime), 0).Format(time.UnixDate)
+ ut := "-"
+ if sa.Statistics.UseTime > 0 {
+ ut = time.Unix(int64(sa.Statistics.UseTime), 0).Format(time.UnixDate)
+ }
+ return fmt.Sprintf("%s, ByteSoft: %s, ByteHard: %s, PacketSoft: %s, PacketHard: %s, TimeSoft: %d, TimeHard: %d, TimeUseSoft: %d, TimeUseHard: %d, Bytes: %d, Packets: %d, "+
+ "AddTime: %s, UseTime: %s, ReplayWindow: %d, Replay: %d, Failed: %d",
sa.String(), printLimit(sa.Limits.ByteSoft), printLimit(sa.Limits.ByteHard), printLimit(sa.Limits.PacketSoft), printLimit(sa.Limits.PacketHard),
- sa.Limits.TimeSoft, sa.Limits.TimeHard, sa.Limits.TimeUseSoft, sa.Limits.TimeUseHard)
+ sa.Limits.TimeSoft, sa.Limits.TimeHard, sa.Limits.TimeUseSoft, sa.Limits.TimeUseHard, sa.Statistics.Bytes, sa.Statistics.Packets, at, ut,
+ sa.Statistics.ReplayWindow, sa.Statistics.Replay, sa.Statistics.Failed)
}
func printLimit(lmt uint64) string {
diff --git a/vendor/github.com/vishvananda/netlink/xfrm_state_linux.go b/vendor/github.com/vishvananda/netlink/xfrm_state_linux.go
index 6a7bc0dec..5dfdb33e4 100644
--- a/vendor/github.com/vishvananda/netlink/xfrm_state_linux.go
+++ b/vendor/github.com/vishvananda/netlink/xfrm_state_linux.go
@@ -2,10 +2,10 @@ package netlink
import (
"fmt"
- "syscall"
"unsafe"
"github.com/vishvananda/netlink/nl"
+ "golang.org/x/sys/unix"
)
func writeStateAlgo(a *XfrmStateAlgo) []byte {
@@ -69,8 +69,10 @@ func writeReplayEsn(replayWindow int) []byte {
ReplayWindow: uint32(replayWindow),
}
- // taken from iproute2/ip/xfrm_state.c:
- replayEsn.BmpLen = uint32((replayWindow + (4 * 8) - 1) / (4 * 8))
+ // Linux stores the bitmap to identify the already received sequence packets in blocks of uint32 elements.
+ // Therefore bitmap length is the minimum number of uint32 elements needed. The following is a ceiling operation.
+ bytesPerElem := int(unsafe.Sizeof(replayEsn.BmpLen)) // Any uint32 variable is good for this
+ replayEsn.BmpLen = uint32((replayWindow + (bytesPerElem * 8) - 1) / (bytesPerElem * 8))
return replayEsn.Serialize()
}
@@ -111,7 +113,7 @@ func (h *Handle) xfrmStateAddOrUpdate(state *XfrmState, nlProto int) error {
if state.Spi == 0 {
return fmt.Errorf("Spi must be set when adding xfrm state.")
}
- req := h.newNetlinkRequest(nlProto, syscall.NLM_F_CREATE|syscall.NLM_F_EXCL|syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(nlProto, unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
msg := xfrmUsersaInfoFromXfrmState(state)
@@ -157,13 +159,13 @@ func (h *Handle) xfrmStateAddOrUpdate(state *XfrmState, nlProto int) error {
req.AddData(out)
}
- _, err := req.Execute(syscall.NETLINK_XFRM, 0)
+ _, err := req.Execute(unix.NETLINK_XFRM, 0)
return err
}
func (h *Handle) xfrmStateAllocSpi(state *XfrmState) (*XfrmState, error) {
req := h.newNetlinkRequest(nl.XFRM_MSG_ALLOCSPI,
- syscall.NLM_F_CREATE|syscall.NLM_F_EXCL|syscall.NLM_F_ACK)
+ unix.NLM_F_CREATE|unix.NLM_F_EXCL|unix.NLM_F_ACK)
msg := &nl.XfrmUserSpiInfo{}
msg.XfrmUsersaInfo = *(xfrmUsersaInfoFromXfrmState(state))
@@ -177,7 +179,7 @@ func (h *Handle) xfrmStateAllocSpi(state *XfrmState) (*XfrmState, error) {
req.AddData(out)
}
- msgs, err := req.Execute(syscall.NETLINK_XFRM, 0)
+ msgs, err := req.Execute(unix.NETLINK_XFRM, 0)
if err != nil {
return nil, err
}
@@ -216,9 +218,9 @@ func XfrmStateList(family int) ([]XfrmState, error) {
// Equivalent to: `ip xfrm state show`.
// The list can be filtered by ip family.
func (h *Handle) XfrmStateList(family int) ([]XfrmState, error) {
- req := h.newNetlinkRequest(nl.XFRM_MSG_GETSA, syscall.NLM_F_DUMP)
+ req := h.newNetlinkRequest(nl.XFRM_MSG_GETSA, unix.NLM_F_DUMP)
- msgs, err := req.Execute(syscall.NETLINK_XFRM, nl.XFRM_MSG_NEWSA)
+ msgs, err := req.Execute(unix.NETLINK_XFRM, nl.XFRM_MSG_NEWSA)
if err != nil {
return nil, err
}
@@ -255,7 +257,7 @@ func (h *Handle) XfrmStateGet(state *XfrmState) (*XfrmState, error) {
}
func (h *Handle) xfrmStateGetOrDelete(state *XfrmState, nlProto int) (*XfrmState, error) {
- req := h.newNetlinkRequest(nlProto, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(nlProto, unix.NLM_F_ACK)
msg := &nl.XfrmUsersaId{}
msg.Family = uint16(nl.GetIPFamily(state.Dst))
@@ -278,7 +280,7 @@ func (h *Handle) xfrmStateGetOrDelete(state *XfrmState, nlProto int) (*XfrmState
resType = 0
}
- msgs, err := req.Execute(syscall.NETLINK_XFRM, uint16(resType))
+ msgs, err := req.Execute(unix.NETLINK_XFRM, uint16(resType))
if err != nil {
return nil, err
}
@@ -308,6 +310,7 @@ func xfrmStateFromXfrmUsersaInfo(msg *nl.XfrmUsersaInfo) *XfrmState {
state.Reqid = int(msg.Reqid)
state.ReplayWindow = int(msg.ReplayWindow)
lftToLimits(&msg.Lft, &state.Limits)
+ curToStats(&msg.Curlft, &msg.Stats, &state.Statistics)
return &state
}
@@ -386,11 +389,11 @@ func XfrmStateFlush(proto Proto) error {
// proto = 0 means any transformation protocols
// Equivalent to: `ip xfrm state flush [ proto XFRM-PROTO ]`
func (h *Handle) XfrmStateFlush(proto Proto) error {
- req := h.newNetlinkRequest(nl.XFRM_MSG_FLUSHSA, syscall.NLM_F_ACK)
+ req := h.newNetlinkRequest(nl.XFRM_MSG_FLUSHSA, unix.NLM_F_ACK)
req.AddData(&nl.XfrmUsersaFlush{Proto: uint8(proto)})
- _, err := req.Execute(syscall.NETLINK_XFRM, 0)
+ _, err := req.Execute(unix.NETLINK_XFRM, 0)
if err != nil {
return err
}
@@ -429,6 +432,16 @@ func lftToLimits(lft *nl.XfrmLifetimeCfg, lmts *XfrmStateLimits) {
*lmts = *(*XfrmStateLimits)(unsafe.Pointer(lft))
}
+func curToStats(cur *nl.XfrmLifetimeCur, wstats *nl.XfrmStats, stats *XfrmStateStats) {
+ stats.Bytes = cur.Bytes
+ stats.Packets = cur.Packets
+ stats.AddTime = cur.AddTime
+ stats.UseTime = cur.UseTime
+ stats.ReplayWindow = wstats.ReplayWindow
+ stats.Replay = wstats.Replay
+ stats.Failed = wstats.IntegrityFailed
+}
+
func xfrmUsersaInfoFromXfrmState(state *XfrmState) *nl.XfrmUsersaInfo {
msg := &nl.XfrmUsersaInfo{}
msg.Family = uint16(nl.GetIPFamily(state.Dst))
diff --git a/vendor/github.com/vishvananda/netns/netns_linux.go b/vendor/github.com/vishvananda/netns/netns_linux.go
index a267c7105..e665ef449 100644
--- a/vendor/github.com/vishvananda/netns/netns_linux.go
+++ b/vendor/github.com/vishvananda/netns/netns_linux.go
@@ -188,6 +188,12 @@ func getPidForContainer(id string) (int, error) {
filepath.Join(cgroupRoot, "system.slice", "docker-"+id+".scope", "tasks"),
// Even more recent docker versions under cgroup/systemd/docker/<id>/
filepath.Join(cgroupRoot, "..", "systemd", "docker", id, "tasks"),
+ // Kubernetes with docker and CNI is even more different
+ filepath.Join(cgroupRoot, "..", "systemd", "kubepods", "*", "pod*", id, "tasks"),
+ // Another flavor of containers location in recent kubernetes 1.11+
+ filepath.Join(cgroupRoot, cgroupThis, "kubepods.slice", "kubepods-besteffort.slice", "*", "docker-"+id+".scope", "tasks"),
+ // When runs inside of a container with recent kubernetes 1.11+
+ filepath.Join(cgroupRoot, "kubepods.slice", "kubepods-besteffort.slice", "*", "docker-"+id+".scope", "tasks"),
}
var filename string
diff --git a/vendor/github.com/xeipuuv/gojsonpointer/README.md b/vendor/github.com/xeipuuv/gojsonpointer/README.md
index dbe4d5082..00059242c 100644
--- a/vendor/github.com/xeipuuv/gojsonpointer/README.md
+++ b/vendor/github.com/xeipuuv/gojsonpointer/README.md
@@ -1,6 +1,39 @@
# gojsonpointer
An implementation of JSON Pointer - Go language
+## Usage
+ jsonText := `{
+ "name": "Bobby B",
+ "occupation": {
+ "title" : "King",
+ "years" : 15,
+ "heir" : "Joffrey B"
+ }
+ }`
+
+ var jsonDocument map[string]interface{}
+ json.Unmarshal([]byte(jsonText), &jsonDocument)
+
+ //create a JSON pointer
+ pointerString := "/occupation/title"
+ pointer, _ := NewJsonPointer(pointerString)
+
+ //SET a new value for the "title" in the document
+ pointer.Set(jsonDocument, "Supreme Leader of Westeros")
+
+ //GET the new "title" from the document
+ title, _, _ := pointer.Get(jsonDocument)
+ fmt.Println(title) //outputs "Supreme Leader of Westeros"
+
+ //DELETE the "heir" from the document
+ deletePointer := NewJsonPointer("/occupation/heir")
+ deletePointer.Delete(jsonDocument)
+
+ b, _ := json.Marshal(jsonDocument)
+ fmt.Println(string(b))
+ //outputs `{"name":"Bobby B","occupation":{"title":"Supreme Leader of Westeros","years":15}}`
+
+
## References
http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-07
diff --git a/vendor/github.com/xeipuuv/gojsonpointer/pointer.go b/vendor/github.com/xeipuuv/gojsonpointer/pointer.go
index 06f1918e8..7faf5d7f9 100644
--- a/vendor/github.com/xeipuuv/gojsonpointer/pointer.go
+++ b/vendor/github.com/xeipuuv/gojsonpointer/pointer.go
@@ -90,6 +90,13 @@ func (p *JsonPointer) Set(document interface{}, value interface{}) (interface{},
}
+// Uses the pointer to delete a value from a JSON document
+func (p *JsonPointer) Delete(document interface{}) (interface{}, error) {
+ is := &implStruct{mode: "DEL", inDocument: document}
+ p.implementation(is)
+ return document, is.outError
+}
+
// Both Get and Set functions use the same implementation to avoid code duplication
func (p *JsonPointer) implementation(i *implStruct) {
@@ -106,9 +113,14 @@ func (p *JsonPointer) implementation(i *implStruct) {
node := i.inDocument
+ previousNodes := make([]interface{}, len(p.referenceTokens))
+ previousTokens := make([]string, len(p.referenceTokens))
+
for ti, token := range p.referenceTokens {
isLastToken := ti == len(p.referenceTokens)-1
+ previousNodes[ti] = node
+ previousTokens[ti] = token
switch v := node.(type) {
@@ -118,7 +130,11 @@ func (p *JsonPointer) implementation(i *implStruct) {
node = v[decodedToken]
if isLastToken && i.mode == "SET" {
v[decodedToken] = i.setInValue
+ } else if isLastToken && i.mode =="DEL" {
+ delete(v,decodedToken)
}
+ } else if (isLastToken && i.mode == "SET") {
+ v[decodedToken] = i.setInValue
} else {
i.outError = fmt.Errorf("Object has no key '%s'", decodedToken)
i.getOutKind = reflect.Map
@@ -144,6 +160,11 @@ func (p *JsonPointer) implementation(i *implStruct) {
node = v[tokenIndex]
if isLastToken && i.mode == "SET" {
v[tokenIndex] = i.setInValue
+ } else if isLastToken && i.mode =="DEL" {
+ v[tokenIndex] = v[len(v)-1]
+ v[len(v)-1] = nil
+ v = v[:len(v)-1]
+ previousNodes[ti-1].(map[string]interface{})[previousTokens[ti-1]] = v
}
default:
diff --git a/vendor/github.com/xeipuuv/gojsonreference/reference.go b/vendor/github.com/xeipuuv/gojsonreference/reference.go
index d4d2eca0a..645729130 100644
--- a/vendor/github.com/xeipuuv/gojsonreference/reference.go
+++ b/vendor/github.com/xeipuuv/gojsonreference/reference.go
@@ -27,11 +27,12 @@ package gojsonreference
import (
"errors"
- "github.com/xeipuuv/gojsonpointer"
"net/url"
"path/filepath"
"runtime"
"strings"
+
+ "github.com/xeipuuv/gojsonpointer"
)
const (
@@ -124,16 +125,21 @@ func (r *JsonReference) parse(jsonReferenceString string) (err error) {
// Creates a new reference from a parent and a child
// If the child cannot inherit from the parent, an error is returned
func (r *JsonReference) Inherits(child JsonReference) (*JsonReference, error) {
- childUrl := child.GetUrl()
- parentUrl := r.GetUrl()
- if childUrl == nil {
+ if child.GetUrl() == nil {
return nil, errors.New("childUrl is nil!")
}
- if parentUrl == nil {
+
+ if r.GetUrl() == nil {
return nil, errors.New("parentUrl is nil!")
}
- ref, err := NewJsonReference(parentUrl.ResolveReference(childUrl).String())
+ // Get a copy of the parent url to make sure we do not modify the original.
+ // URL reference resolving fails if the fragment of the child is empty, but the parent's is not.
+ // The fragment of the child must be used, so the fragment of the parent is manually removed.
+ parentUrl := *r.GetUrl()
+ parentUrl.Fragment = ""
+
+ ref, err := NewJsonReference(parentUrl.ResolveReference(child.GetUrl()).String())
if err != nil {
return nil, err
}
diff --git a/vendor/github.com/xeipuuv/gojsonschema/README.md b/vendor/github.com/xeipuuv/gojsonschema/README.md
index e02976bc6..24ca34744 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/README.md
+++ b/vendor/github.com/xeipuuv/gojsonschema/README.md
@@ -1,10 +1,11 @@
+[![GoDoc](https://godoc.org/github.com/xeipuuv/gojsonschema?status.svg)](https://godoc.org/github.com/xeipuuv/gojsonschema)
[![Build Status](https://travis-ci.org/xeipuuv/gojsonschema.svg)](https://travis-ci.org/xeipuuv/gojsonschema)
# gojsonschema
## Description
-An implementation of JSON Schema, based on IETF's draft v4 - Go language
+An implementation of JSON Schema for the Go programming language. Supports draft-04, draft-06 and draft-07.
References :
@@ -54,7 +55,6 @@ func main() {
fmt.Printf("- %s\n", desc)
}
}
-
}
@@ -148,6 +148,87 @@ To check the result :
}
```
+
+## Loading local schemas
+
+By default `file` and `http(s)` references to external schemas are loaded automatically via the file system or via http(s). An external schema can also be loaded using a `SchemaLoader`.
+
+```go
+ sl := gojsonschema.NewSchemaLoader()
+ loader1 := gojsonschema.NewStringLoader(`{ "type" : "string" }`)
+ err := sl.AddSchema("http://some_host.com/string.json", loader1)
+```
+
+Alternatively if your schema already has an `$id` you can use the `AddSchemas` function
+```go
+ loader2 := gojsonschema.NewStringLoader(`{
+ "$id" : "http://some_host.com/maxlength.json",
+ "maxLength" : 5
+ }`)
+ err = sl.AddSchemas(loader2)
+```
+
+The main schema should be passed to the `Compile` function. This main schema can then directly reference the added schemas without needing to download them.
+```go
+ loader3 := gojsonschema.NewStringLoader(`{
+ "$id" : "http://some_host.com/main.json",
+ "allOf" : [
+ { "$ref" : "http://some_host.com/string.json" },
+ { "$ref" : "http://some_host.com/maxlength.json" }
+ ]
+ }`)
+
+ schema, err := sl.Compile(loader3)
+
+ documentLoader := gojsonschema.NewStringLoader(`"hello world"`)
+
+ result, err := schema.Validate(documentLoader)
+```
+
+It's also possible to pass a `ReferenceLoader` to the `Compile` function that references a loaded schema.
+
+```go
+err = sl.AddSchemas(loader3)
+schema, err := sl.Compile(gojsonschema.NewReferenceLoader("http://some_host.com/main.json"))
+```
+
+Schemas added by `AddSchema` and `AddSchemas` are only validated when the entire schema is compiled, unless meta-schema validation is used.
+
+## Using a specific draft
+By default `gojsonschema` will try to detect the draft of a schema by using the `$schema` keyword and parse it in a strict draft-04, draft-06 or draft-07 mode. If `$schema` is missing, or the draft version is not explicitely set, a hybrid mode is used which merges together functionality of all drafts into one mode.
+
+Autodectection can be turned off with the `AutoDetect` property. Specific draft versions can be specified with the `Draft` property.
+
+```go
+sl := gojsonschema.NewSchemaLoader()
+sl.Draft = gojsonschema.Draft7
+sl.AutoDetect = false
+```
+
+If autodetection is on (default), a draft-07 schema can savely reference draft-04 schemas and vice-versa, as long as `$schema` is specified in all schemas.
+
+## Meta-schema validation
+Schemas that are added using the `AddSchema`, `AddSchemas` and `Compile` can be validated against their meta-schema by setting the `Validate` property.
+
+The following example will produce an error as `multipleOf` must be a number. If `Validate` is off (default), this error is only returned at the `Compile` step.
+
+```go
+sl := gojsonschema.NewSchemaLoader()
+sl.Validate = true
+err := sl.AddSchemas(gojsonschema.NewStringLoader(`{
+ $id" : "http://some_host.com/invalid.json",
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "multipleOf" : true
+}`))
+ ```
+```
+ ```
+
+Errors returned by meta-schema validation are more readable and contain more information, which helps significantly if you are developing a schema.
+
+Meta-schema validation also works with a custom `$schema`. In case `$schema` is missing, or `AutoDetect` is set to `false`, the meta-schema of the used draft is used.
+
+
## Working with Errors
The library handles string error codes which you can customize by creating your own gojsonschema.locale and setting it
@@ -155,7 +236,9 @@ The library handles string error codes which you can customize by creating your
gojsonschema.Locale = YourCustomLocale{}
```
-However, each error contains additional contextual information.
+However, each error contains additional contextual information.
+
+Newer versions of `gojsonschema` may have new additional errors, so code that uses a custom locale will need to be updated when this happens.
**err.Type()**: *string* Returns the "type" of error that occurred. Note you can also type check. See below
@@ -169,15 +252,18 @@ Note: An error of RequiredType has an err.Type() return value of "required"
"number_not": NumberNotError
"missing_dependency": MissingDependencyError
"internal": InternalError
+ "const": ConstEror
"enum": EnumError
"array_no_additional_items": ArrayNoAdditionalItemsError
"array_min_items": ArrayMinItemsError
"array_max_items": ArrayMaxItemsError
"unique": ItemsMustBeUniqueError
+ "contains" : ArrayContainsError
"array_min_properties": ArrayMinPropertiesError
"array_max_properties": ArrayMaxPropertiesError
"additional_property_not_allowed": AdditionalPropertyNotAllowedError
"invalid_property_pattern": InvalidPropertyPatternError
+ "invalid_property_name": InvalidPropertyNameError
"string_gte": StringLengthGTEError
"string_lte": StringLengthLTEError
"pattern": DoesNotMatchPatternError
@@ -186,15 +272,19 @@ Note: An error of RequiredType has an err.Type() return value of "required"
"number_gt": NumberGTError
"number_lte": NumberLTEError
"number_lt": NumberLTError
+ "condition_then" : ConditionThenError
+ "condition_else" : ConditionElseError
**err.Value()**: *interface{}* Returns the value given
-**err.Context()**: *gojsonschema.jsonContext* Returns the context. This has a String() method that will print something like this: (root).firstName
+**err.Context()**: *gojsonschema.JsonContext* Returns the context. This has a String() method that will print something like this: (root).firstName
**err.Field()**: *string* Returns the fieldname in the format firstName, or for embedded properties, person.firstName. This returns the same as the String() method on *err.Context()* but removes the (root). prefix.
**err.Description()**: *string* The error description. This is based on the locale you are using. See the beginning of this section for overwriting the locale with a custom implementation.
+**err.DescriptionFormat()**: *string* The error description format. This is relevant if you are adding custom validation errors afterwards to the result.
+
**err.Details()**: *gojsonschema.ErrorDetails* Returns a map[string]interface{} of additional error details specific to the error. For example, GTE errors will have a "min" value, LTE will have a "max" value. See errors.go for a full description of all the error details. Every error always contains a "field" key that holds the value of *err.Field()*
Note in most cases, the err.Details() will be used to generate replacement strings in your locales, and not used directly. These strings follow the text/template format i.e.
@@ -225,10 +315,35 @@ Learn more about what types of template functions you can use in `ErrorTemplateF
## Formats
JSON Schema allows for optional "format" property to validate instances against well-known formats. gojsonschema ships with all of the formats defined in the spec that you can use like this:
+
````json
{"type": "string", "format": "email"}
````
-Available formats: date-time, hostname, email, ipv4, ipv6, uri, uri-reference.
+
+Not all formats defined in draft-07 are available. Implemented formats are:
+
+* `date`
+* `time`
+* `date-time`
+* `hostname`. Subdomains that start with a number are also supported, but this means that it doesn't strictly follow [RFC1034](http://tools.ietf.org/html/rfc1034#section-3.5) and has the implication that ipv4 addresses are also recognized as valid hostnames.
+* `email`. Go's email parser deviates slightly from [RFC5322](https://tools.ietf.org/html/rfc5322). Includes unicode support.
+* `idn-email`. Same caveat as `email`.
+* `ipv4`
+* `ipv6`
+* `uri`. Includes unicode support.
+* `uri-reference`. Includes unicode support.
+* `iri`
+* `iri-reference`
+* `uri-template`
+* `uuid`
+* `regex`. Go uses the [RE2](https://github.com/google/re2/wiki/Syntax) engine and is not [ECMA262](http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf) compatible.
+* `json-pointer`
+* `relative-json-pointer`
+
+`email`, `uri` and `uri-reference` use the same validation code as their unicode counterparts `idn-email`, `iri` and `iri-reference`. If you rely on unicode support you should use the specific
+unicode enabled formats for the sake of interoperability as other implementations might not support unicode in the regular formats.
+
+The validation code for `uri`, `idn-email` and their relatives use mostly standard library code. Go 1.5 and 1.6 contain some minor bugs with handling URIs and unicode. You are encouraged to use Go 1.7+ if you rely on these formats.
For repetitive or more complex formats, you can create custom format checkers and add them to gojsonschema like this:
@@ -285,7 +400,63 @@ func (f ValidUserIdFormatChecker) IsFormat(input interface{}) bool {
gojsonschema.FormatCheckers.Add("ValidUserId", ValidUserIdFormatChecker{})
````
+Formats can also be removed, for example if you want to override one of the formats that is defined by default.
+
+```go
+gojsonschema.FormatCheckers.Remove("hostname")
+```
+
+
+## Additional custom validation
+After the validation has run and you have the results, you may add additional
+errors using `Result.AddError`. This is useful to maintain the same format within the resultset instead
+of having to add special exceptions for your own errors. Below is an example.
+
+```go
+type AnswerInvalidError struct {
+ gojsonschema.ResultErrorFields
+}
+
+func newAnswerInvalidError(context *gojsonschema.JsonContext, value interface{}, details gojsonschema.ErrorDetails) *AnswerInvalidError {
+ err := AnswerInvalidError{}
+ err.SetContext(context)
+ err.SetType("custom_invalid_error")
+ // it is important to use SetDescriptionFormat() as this is used to call SetDescription() after it has been parsed
+ // using the description of err will be overridden by this.
+ err.SetDescriptionFormat("Answer to the Ultimate Question of Life, the Universe, and Everything is {{.answer}}")
+ err.SetValue(value)
+ err.SetDetails(details)
+
+ return &err
+}
+
+func main() {
+ // ...
+ schema, err := gojsonschema.NewSchema(schemaLoader)
+ result, err := gojsonschema.Validate(schemaLoader, documentLoader)
+
+ if true { // some validation
+ jsonContext := gojsonschema.NewJsonContext("question", nil)
+ errDetail := gojsonschema.ErrorDetails{
+ "answer": 42,
+ }
+ result.AddError(
+ newAnswerInvalidError(
+ gojsonschema.NewJsonContext("answer", jsonContext),
+ 52,
+ errDetail,
+ ),
+ errDetail,
+ )
+ }
+
+ return result, err
+
+}
+```
+This is especially useful if you want to add validation beyond what the
+json schema drafts can provide such business specific logic.
## Uses
diff --git a/vendor/github.com/xeipuuv/gojsonschema/draft.go b/vendor/github.com/xeipuuv/gojsonschema/draft.go
new file mode 100644
index 000000000..bfde4a2e1
--- /dev/null
+++ b/vendor/github.com/xeipuuv/gojsonschema/draft.go
@@ -0,0 +1,118 @@
+// Copyright 2018 johandorland ( https://github.com/johandorland )
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package gojsonschema
+
+import (
+ "errors"
+ "math"
+ "reflect"
+
+ "github.com/xeipuuv/gojsonreference"
+)
+
+type Draft int
+
+const (
+ Draft4 Draft = 4
+ Draft6 Draft = 6
+ Draft7 Draft = 7
+ Hybrid Draft = math.MaxInt32
+)
+
+type draftConfig struct {
+ Version Draft
+ MetaSchemaURL string
+ MetaSchema string
+}
+type draftConfigs []draftConfig
+
+var drafts draftConfigs
+
+func init() {
+ drafts = []draftConfig{
+ draftConfig{
+ Version: Draft4,
+ MetaSchemaURL: "http://json-schema.org/draft-04/schema",
+ MetaSchema: `{"id":"http://json-schema.org/draft-04/schema#","$schema":"http://json-schema.org/draft-04/schema#","description":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"positiveInteger":{"type":"integer","minimum":0},"positiveIntegerDefault0":{"allOf":[{"$ref":"#/definitions/positiveInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true}},"type":"object","properties":{"id":{"type":"string"},"$schema":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"default":{},"multipleOf":{"type":"number","minimum":0,"exclusiveMinimum":true},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"boolean","default":false},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"boolean","default":false},"maxLength":{"$ref":"#/definitions/positiveInteger"},"minLength":{"$ref":"#/definitions/positiveIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"anyOf":[{"type":"boolean"},{"$ref":"#"}],"default":{}},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":{}},"maxItems":{"$ref":"#/definitions/positiveInteger"},"minItems":{"$ref":"#/definitions/positiveIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"maxProperties":{"$ref":"#/definitions/positiveInteger"},"minProperties":{"$ref":"#/definitions/positiveIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"anyOf":[{"type":"boolean"},{"$ref":"#"}],"default":{}},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"enum":{"type":"array","minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"dependencies":{"exclusiveMaximum":["maximum"],"exclusiveMinimum":["minimum"]},"default":{}}`,
+ },
+ draftConfig{
+ Version: Draft6,
+ MetaSchemaURL: "http://json-schema.org/draft-06/schema",
+ MetaSchema: `{"$schema":"http://json-schema.org/draft-06/schema#","$id":"http://json-schema.org/draft-06/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"title":{"type":"string"},"description":{"type":"string"},"default":{},"examples":{"type":"array","items":{}},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":{}},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":{},"enum":{"type":"array","minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":{}}`,
+ },
+ draftConfig{
+ Version: Draft7,
+ MetaSchemaURL: "http://json-schema.org/draft-07/schema",
+ MetaSchema: `{"$schema":"http://json-schema.org/draft-07/schema#","$id":"http://json-schema.org/draft-07/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"$comment":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"default":true,"readOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":true},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"propertyNames":{"format":"regex"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":true,"enum":{"type":"array","items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"contentMediaType":{"type":"string"},"contentEncoding":{"type":"string"},"if":{"$ref":"#"},"then":{"$ref":"#"},"else":{"$ref":"#"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":true}`,
+ },
+ }
+}
+
+func (dc draftConfigs) GetMetaSchema(url string) string {
+ for _, config := range dc {
+ if config.MetaSchemaURL == url {
+ return config.MetaSchema
+ }
+ }
+ return ""
+}
+func (dc draftConfigs) GetDraftVersion(url string) *Draft {
+ for _, config := range dc {
+ if config.MetaSchemaURL == url {
+ return &config.Version
+ }
+ }
+ return nil
+}
+func (dc draftConfigs) GetSchemaURL(draft Draft) string {
+ for _, config := range dc {
+ if config.Version == draft {
+ return config.MetaSchemaURL
+ }
+ }
+ return ""
+}
+
+func parseSchemaURL(documentNode interface{}) (string, *Draft, error) {
+
+ if isKind(documentNode, reflect.Bool) {
+ return "", nil, nil
+ }
+ m := documentNode.(map[string]interface{})
+
+ if existsMapKey(m, KEY_SCHEMA) {
+ if !isKind(m[KEY_SCHEMA], reflect.String) {
+ return "", nil, errors.New(formatErrorDescription(
+ Locale.MustBeOfType(),
+ ErrorDetails{
+ "key": KEY_SCHEMA,
+ "type": TYPE_STRING,
+ },
+ ))
+ }
+
+ schemaReference, err := gojsonreference.NewJsonReference(m[KEY_SCHEMA].(string))
+
+ if err != nil {
+ return "", nil, err
+ }
+
+ schema := schemaReference.String()
+
+ return schema, drafts.GetDraftVersion(schema), nil
+ }
+
+ return "", nil, nil
+}
diff --git a/vendor/github.com/xeipuuv/gojsonschema/errors.go b/vendor/github.com/xeipuuv/gojsonschema/errors.go
index d39f01959..2f01a1c2c 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/errors.go
+++ b/vendor/github.com/xeipuuv/gojsonschema/errors.go
@@ -56,6 +56,11 @@ type (
ResultErrorFields
}
+ // ConstError. ErrorDetails: allowed
+ ConstError struct {
+ ResultErrorFields
+ }
+
// EnumError. ErrorDetails: allowed
EnumError struct {
ResultErrorFields
@@ -76,11 +81,16 @@ type (
ResultErrorFields
}
- // ItemsMustBeUniqueError. ErrorDetails: type
+ // ItemsMustBeUniqueError. ErrorDetails: type, i, j
ItemsMustBeUniqueError struct {
ResultErrorFields
}
+ // ArrayContainsError. ErrorDetails:
+ ArrayContainsError struct {
+ ResultErrorFields
+ }
+
// ArrayMinPropertiesError. ErrorDetails: min
ArrayMinPropertiesError struct {
ResultErrorFields
@@ -101,6 +111,11 @@ type (
ResultErrorFields
}
+ // InvalidPopertyNameError. ErrorDetails: property
+ InvalidPropertyNameError struct {
+ ResultErrorFields
+ }
+
// StringLengthGTEError. ErrorDetails: min
StringLengthGTEError struct {
ResultErrorFields
@@ -145,10 +160,20 @@ type (
NumberLTError struct {
ResultErrorFields
}
+
+ // ConditionThenError. ErrorDetails: -
+ ConditionThenError struct {
+ ResultErrorFields
+ }
+
+ // ConditionElseError. ErrorDetails: -
+ ConditionElseError struct {
+ ResultErrorFields
+ }
)
// newError takes a ResultError type and sets the type, context, description, details, value, and field
-func newError(err ResultError, context *jsonContext, value interface{}, locale locale, details ErrorDetails) {
+func newError(err ResultError, context *JsonContext, value interface{}, locale locale, details ErrorDetails) {
var t string
var d string
switch err.(type) {
@@ -176,6 +201,9 @@ func newError(err ResultError, context *jsonContext, value interface{}, locale l
case *InternalError:
t = "internal"
d = locale.Internal()
+ case *ConstError:
+ t = "const"
+ d = locale.Const()
case *EnumError:
t = "enum"
d = locale.Enum()
@@ -191,6 +219,9 @@ func newError(err ResultError, context *jsonContext, value interface{}, locale l
case *ItemsMustBeUniqueError:
t = "unique"
d = locale.Unique()
+ case *ArrayContainsError:
+ t = "contains"
+ d = locale.ArrayContains()
case *ArrayMinPropertiesError:
t = "array_min_properties"
d = locale.ArrayMinProperties()
@@ -203,6 +234,9 @@ func newError(err ResultError, context *jsonContext, value interface{}, locale l
case *InvalidPropertyPatternError:
t = "invalid_property_pattern"
d = locale.InvalidPropertyPattern()
+ case *InvalidPropertyNameError:
+ t = "invalid_property_name"
+ d = locale.InvalidPropertyName()
case *StringLengthGTEError:
t = "string_gte"
d = locale.StringGTE()
@@ -230,19 +264,26 @@ func newError(err ResultError, context *jsonContext, value interface{}, locale l
case *NumberLTError:
t = "number_lt"
d = locale.NumberLT()
+ case *ConditionThenError:
+ t = "condition_then"
+ d = locale.ConditionThen()
+ case *ConditionElseError:
+ t = "condition_else"
+ d = locale.ConditionElse()
}
err.SetType(t)
err.SetContext(context)
err.SetValue(value)
err.SetDetails(details)
+ err.SetDescriptionFormat(d)
details["field"] = err.Field()
if _, exists := details["context"]; !exists && context != nil {
details["context"] = context.String()
}
- err.SetDescription(formatErrorDescription(d, details))
+ err.SetDescription(formatErrorDescription(err.DescriptionFormat(), details))
}
// formatErrorDescription takes a string in the default text/template
diff --git a/vendor/github.com/xeipuuv/gojsonschema/format_checkers.go b/vendor/github.com/xeipuuv/gojsonschema/format_checkers.go
index c6a07923b..26217fca1 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/format_checkers.go
+++ b/vendor/github.com/xeipuuv/gojsonschema/format_checkers.go
@@ -2,9 +2,11 @@ package gojsonschema
import (
"net"
+ "net/mail"
"net/url"
"regexp"
"strings"
+ "sync"
"time"
)
@@ -51,12 +53,19 @@ type (
// http://tools.ietf.org/html/rfc3339#section-5.6
DateTimeFormatChecker struct{}
+ DateFormatChecker struct{}
+
+ TimeFormatChecker struct{}
+
// URIFormatChecker validates a URI with a valid Scheme per RFC3986
URIFormatChecker struct{}
// URIReferenceFormatChecker validates a URI or relative-reference per RFC3986
URIReferenceFormatChecker struct{}
+ // URITemplateFormatChecker validates a URI template per RFC6570
+ URITemplateFormatChecker struct{}
+
// HostnameFormatChecker validates a hostname is in the correct format
HostnameFormatChecker struct{}
@@ -65,6 +74,12 @@ type (
// RegexFormatChecker validates a regex is in the correct format
RegexFormatChecker struct{}
+
+ // JSONPointerFormatChecker validates a JSON Pointer per RFC6901
+ JSONPointerFormatChecker struct{}
+
+ // RelativeJSONPointerFormatChecker validates a relative JSON Pointer is in the correct format
+ RelativeJSONPointerFormatChecker struct{}
)
var (
@@ -72,45 +87,65 @@ var (
// so library users can add custom formatters
FormatCheckers = FormatCheckerChain{
formatters: map[string]FormatChecker{
- "date-time": DateTimeFormatChecker{},
- "hostname": HostnameFormatChecker{},
- "email": EmailFormatChecker{},
- "ipv4": IPV4FormatChecker{},
- "ipv6": IPV6FormatChecker{},
- "uri": URIFormatChecker{},
- "uri-reference": URIReferenceFormatChecker{},
- "uuid": UUIDFormatChecker{},
- "regex": RegexFormatChecker{},
+ "date": DateFormatChecker{},
+ "time": TimeFormatChecker{},
+ "date-time": DateTimeFormatChecker{},
+ "hostname": HostnameFormatChecker{},
+ "email": EmailFormatChecker{},
+ "idn-email": EmailFormatChecker{},
+ "ipv4": IPV4FormatChecker{},
+ "ipv6": IPV6FormatChecker{},
+ "uri": URIFormatChecker{},
+ "uri-reference": URIReferenceFormatChecker{},
+ "iri": URIFormatChecker{},
+ "iri-reference": URIReferenceFormatChecker{},
+ "uri-template": URITemplateFormatChecker{},
+ "uuid": UUIDFormatChecker{},
+ "regex": RegexFormatChecker{},
+ "json-pointer": JSONPointerFormatChecker{},
+ "relative-json-pointer": RelativeJSONPointerFormatChecker{},
},
}
- // Regex credit: https://github.com/asaskevich/govalidator
- rxEmail = regexp.MustCompile("^(((([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])+(\\.([a-zA-Z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])|(\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-zA-Z]|\\d|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])|(([a-zA-Z]|\\d|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])([a-zA-Z]|\\d|-|\\.|_|~|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])*([a-zA-Z]|\\d|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])))\\.)+(([a-zA-Z]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])|(([a-zA-Z]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])([a-zA-Z]|\\d|-|\\.|_|~|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])*([a-zA-Z]|[\\x{00A0}-\\x{D7FF}\\x{F900}-\\x{FDCF}\\x{FDF0}-\\x{FFEF}])))\\.?$")
-
// Regex credit: https://www.socketloop.com/tutorials/golang-validate-hostname
rxHostname = regexp.MustCompile(`^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$`)
+ // Use a regex to make sure curly brackets are balanced properly after validating it as a AURI
+ rxURITemplate = regexp.MustCompile("^([^{]*({[^}]*})?)*$")
+
rxUUID = regexp.MustCompile("^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
+
+ rxJSONPointer = regexp.MustCompile("^(?:/(?:[^~/]|~0|~1)*)*$")
+
+ rxRelJSONPointer = regexp.MustCompile("^(?:0|[1-9][0-9]*)(?:#|(?:/(?:[^~/]|~0|~1)*)*)$")
+
+ lock = new(sync.Mutex)
)
// Add adds a FormatChecker to the FormatCheckerChain
// The name used will be the value used for the format key in your json schema
func (c *FormatCheckerChain) Add(name string, f FormatChecker) *FormatCheckerChain {
+ lock.Lock()
c.formatters[name] = f
+ lock.Unlock()
return c
}
// Remove deletes a FormatChecker from the FormatCheckerChain (if it exists)
func (c *FormatCheckerChain) Remove(name string) *FormatCheckerChain {
+ lock.Lock()
delete(c.formatters, name)
+ lock.Unlock()
return c
}
// Has checks to see if the FormatCheckerChain holds a FormatChecker with the given name
func (c *FormatCheckerChain) Has(name string) bool {
+ lock.Lock()
_, ok := c.formatters[name]
+ lock.Unlock()
return ok
}
@@ -134,7 +169,9 @@ func (f EmailFormatChecker) IsFormat(input interface{}) bool {
return false
}
- return rxEmail.MatchString(asString)
+ _, err := mail.ParseAddress(asString)
+
+ return err == nil
}
// Credit: https://github.com/asaskevich/govalidator
@@ -185,6 +222,29 @@ func (f DateTimeFormatChecker) IsFormat(input interface{}) bool {
return false
}
+func (f DateFormatChecker) IsFormat(input interface{}) bool {
+ asString, ok := input.(string)
+ if ok == false {
+ return false
+ }
+ _, err := time.Parse("2006-01-02", asString)
+ return err == nil
+}
+
+func (f TimeFormatChecker) IsFormat(input interface{}) bool {
+ asString, ok := input.(string)
+ if ok == false {
+ return false
+ }
+
+ if _, err := time.Parse("15:04:05Z07:00", asString); err == nil {
+ return true
+ }
+
+ _, err := time.Parse("15:04:05", asString)
+ return err == nil
+}
+
func (f URIFormatChecker) IsFormat(input interface{}) bool {
asString, ok := input.(string)
@@ -193,11 +253,12 @@ func (f URIFormatChecker) IsFormat(input interface{}) bool {
}
u, err := url.Parse(asString)
+
if err != nil || u.Scheme == "" {
return false
}
- return true
+ return !strings.Contains(asString, `\`)
}
func (f URIReferenceFormatChecker) IsFormat(input interface{}) bool {
@@ -208,7 +269,21 @@ func (f URIReferenceFormatChecker) IsFormat(input interface{}) bool {
}
_, err := url.Parse(asString)
- return err == nil
+ return err == nil && !strings.Contains(asString, `\`)
+}
+
+func (f URITemplateFormatChecker) IsFormat(input interface{}) bool {
+ asString, ok := input.(string)
+ if ok == false {
+ return false
+ }
+
+ u, err := url.Parse(asString)
+ if err != nil || strings.Contains(asString, `\`) {
+ return false
+ }
+
+ return rxURITemplate.MatchString(u.Path)
}
func (f HostnameFormatChecker) IsFormat(input interface{}) bool {
@@ -248,3 +323,21 @@ func (f RegexFormatChecker) IsFormat(input interface{}) bool {
}
return true
}
+
+func (f JSONPointerFormatChecker) IsFormat(input interface{}) bool {
+ asString, ok := input.(string)
+ if ok == false {
+ return false
+ }
+
+ return rxJSONPointer.MatchString(asString)
+}
+
+func (f RelativeJSONPointerFormatChecker) IsFormat(input interface{}) bool {
+ asString, ok := input.(string)
+ if ok == false {
+ return false
+ }
+
+ return rxRelJSONPointer.MatchString(asString)
+}
diff --git a/vendor/github.com/xeipuuv/gojsonschema/jsonContext.go b/vendor/github.com/xeipuuv/gojsonschema/jsonContext.go
index fcc8d9d6f..f40668a74 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/jsonContext.go
+++ b/vendor/github.com/xeipuuv/gojsonschema/jsonContext.go
@@ -26,20 +26,20 @@ package gojsonschema
import "bytes"
-// jsonContext implements a persistent linked-list of strings
-type jsonContext struct {
+// JsonContext implements a persistent linked-list of strings
+type JsonContext struct {
head string
- tail *jsonContext
+ tail *JsonContext
}
-func newJsonContext(head string, tail *jsonContext) *jsonContext {
- return &jsonContext{head, tail}
+func NewJsonContext(head string, tail *JsonContext) *JsonContext {
+ return &JsonContext{head, tail}
}
// String displays the context in reverse.
// This plays well with the data structure's persistent nature with
// Cons and a json document's tree structure.
-func (c *jsonContext) String(del ...string) string {
+func (c *JsonContext) String(del ...string) string {
byteArr := make([]byte, 0, c.stringLen())
buf := bytes.NewBuffer(byteArr)
c.writeStringToBuffer(buf, del)
@@ -47,7 +47,7 @@ func (c *jsonContext) String(del ...string) string {
return buf.String()
}
-func (c *jsonContext) stringLen() int {
+func (c *JsonContext) stringLen() int {
length := 0
if c.tail != nil {
length = c.tail.stringLen() + 1 // add 1 for "."
@@ -57,7 +57,7 @@ func (c *jsonContext) stringLen() int {
return length
}
-func (c *jsonContext) writeStringToBuffer(buf *bytes.Buffer, del []string) {
+func (c *JsonContext) writeStringToBuffer(buf *bytes.Buffer, del []string) {
if c.tail != nil {
c.tail.writeStringToBuffer(buf, del)
diff --git a/vendor/github.com/xeipuuv/gojsonschema/jsonLoader.go b/vendor/github.com/xeipuuv/gojsonschema/jsonLoader.go
index a77a81e40..cfa5f6a3a 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/jsonLoader.go
+++ b/vendor/github.com/xeipuuv/gojsonschema/jsonLoader.go
@@ -38,7 +38,6 @@ import (
"runtime"
"strings"
-
"github.com/xeipuuv/gojsonreference"
)
@@ -108,7 +107,7 @@ func (l *jsonReferenceLoader) LoaderFactory() JSONLoaderFactory {
}
// NewReferenceLoader returns a JSON reference loader using the given source and the local OS file system.
-func NewReferenceLoader(source string) *jsonReferenceLoader {
+func NewReferenceLoader(source string) JSONLoader {
return &jsonReferenceLoader{
fs: osFS,
source: source,
@@ -116,7 +115,7 @@ func NewReferenceLoader(source string) *jsonReferenceLoader {
}
// NewReferenceLoaderFileSystem returns a JSON reference loader using the given source and file system.
-func NewReferenceLoaderFileSystem(source string, fs http.FileSystem) *jsonReferenceLoader {
+func NewReferenceLoaderFileSystem(source string, fs http.FileSystem) JSONLoader {
return &jsonReferenceLoader{
fs: fs,
source: source,
@@ -139,13 +138,11 @@ func (l *jsonReferenceLoader) LoadJSON() (interface{}, error) {
if reference.HasFileScheme {
- filename := strings.Replace(refToUrl.GetUrl().Path, "file://", "", -1)
+ filename := strings.TrimPrefix(refToUrl.String(), "file://")
if runtime.GOOS == "windows" {
// on Windows, a file URL may have an extra leading slash, use slashes
// instead of backslashes, and have spaces escaped
- if strings.HasPrefix(filename, "/") {
- filename = filename[1:]
- }
+ filename = strings.TrimPrefix(filename, "/")
filename = filepath.FromSlash(filename)
}
@@ -169,6 +166,12 @@ func (l *jsonReferenceLoader) LoadJSON() (interface{}, error) {
func (l *jsonReferenceLoader) loadFromHTTP(address string) (interface{}, error) {
+ // returned cached versions for metaschemas for drafts 4, 6 and 7
+ // for performance and allow for easier offline use
+ if metaSchema := drafts.GetMetaSchema(address); metaSchema != "" {
+ return decodeJsonUsingNumber(strings.NewReader(metaSchema))
+ }
+
resp, err := http.Get(address)
if err != nil {
return nil, err
@@ -185,7 +188,6 @@ func (l *jsonReferenceLoader) loadFromHTTP(address string) (interface{}, error)
}
return decodeJsonUsingNumber(bytes.NewReader(bodyBuff))
-
}
func (l *jsonReferenceLoader) loadFromFile(path string) (interface{}, error) {
@@ -222,7 +224,7 @@ func (l *jsonStringLoader) LoaderFactory() JSONLoaderFactory {
return &DefaultJSONLoaderFactory{}
}
-func NewStringLoader(source string) *jsonStringLoader {
+func NewStringLoader(source string) JSONLoader {
return &jsonStringLoader{source: source}
}
@@ -250,7 +252,7 @@ func (l *jsonBytesLoader) LoaderFactory() JSONLoaderFactory {
return &DefaultJSONLoaderFactory{}
}
-func NewBytesLoader(source []byte) *jsonBytesLoader {
+func NewBytesLoader(source []byte) JSONLoader {
return &jsonBytesLoader{source: source}
}
@@ -277,7 +279,7 @@ func (l *jsonGoLoader) LoaderFactory() JSONLoaderFactory {
return &DefaultJSONLoaderFactory{}
}
-func NewGoLoader(source interface{}) *jsonGoLoader {
+func NewGoLoader(source interface{}) JSONLoader {
return &jsonGoLoader{source: source}
}
@@ -298,12 +300,12 @@ type jsonIOLoader struct {
buf *bytes.Buffer
}
-func NewReaderLoader(source io.Reader) (*jsonIOLoader, io.Reader) {
+func NewReaderLoader(source io.Reader) (JSONLoader, io.Reader) {
buf := &bytes.Buffer{}
return &jsonIOLoader{buf: buf}, io.TeeReader(source, buf)
}
-func NewWriterLoader(source io.Writer) (*jsonIOLoader, io.Writer) {
+func NewWriterLoader(source io.Writer) (JSONLoader, io.Writer) {
buf := &bytes.Buffer{}
return &jsonIOLoader{buf: buf}, io.MultiWriter(source, buf)
}
@@ -324,6 +326,30 @@ func (l *jsonIOLoader) LoaderFactory() JSONLoaderFactory {
return &DefaultJSONLoaderFactory{}
}
+// JSON raw loader
+// In case the JSON is already marshalled to interface{} use this loader
+// This is used for testing as otherwise there is no guarantee the JSON is marshalled
+// "properly" by using https://golang.org/pkg/encoding/json/#Decoder.UseNumber
+type jsonRawLoader struct {
+ source interface{}
+}
+
+func NewRawLoader(source interface{}) *jsonRawLoader {
+ return &jsonRawLoader{source: source}
+}
+func (l *jsonRawLoader) JsonSource() interface{} {
+ return l.source
+}
+func (l *jsonRawLoader) LoadJSON() (interface{}, error) {
+ return l.source, nil
+}
+func (l *jsonRawLoader) JsonReference() (gojsonreference.JsonReference, error) {
+ return gojsonreference.NewJsonReference("#")
+}
+func (l *jsonRawLoader) LoaderFactory() JSONLoaderFactory {
+ return &DefaultJSONLoaderFactory{}
+}
+
func decodeJsonUsingNumber(r io.Reader) (interface{}, error) {
var document interface{}
@@ -335,7 +361,7 @@ func decodeJsonUsingNumber(r io.Reader) (interface{}, error) {
if err != nil {
return nil, err
}
-
+
return document, nil
}
diff --git a/vendor/github.com/xeipuuv/gojsonschema/locales.go b/vendor/github.com/xeipuuv/gojsonschema/locales.go
index ee41484a7..9b4570f01 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/locales.go
+++ b/vendor/github.com/xeipuuv/gojsonschema/locales.go
@@ -36,16 +36,19 @@ type (
NumberNot() string
MissingDependency() string
Internal() string
+ Const() string
Enum() string
ArrayNotEnoughItems() string
ArrayNoAdditionalItems() string
ArrayMinItems() string
ArrayMaxItems() string
Unique() string
+ ArrayContains() string
ArrayMinProperties() string
ArrayMaxProperties() string
AdditionalPropertyNotAllowed() string
InvalidPropertyPattern() string
+ InvalidPropertyName() string
StringGTE() string
StringLTE() string
DoesNotMatchPattern() string
@@ -76,6 +79,9 @@ type (
HttpBadStatus() string
ParseError() string
+ ConditionThen() string
+ ConditionElse() string
+
// ErrorFormat
ErrorFormat() string
}
@@ -116,6 +122,10 @@ func (l DefaultLocale) Internal() string {
return `Internal Error {{.error}}`
}
+func (l DefaultLocale) Const() string {
+ return `{{.field}} does not match: {{.allowed}}`
+}
+
func (l DefaultLocale) Enum() string {
return `{{.field}} must be one of the following: {{.allowed}}`
}
@@ -137,7 +147,11 @@ func (l DefaultLocale) ArrayMaxItems() string {
}
func (l DefaultLocale) Unique() string {
- return `{{.type}} items must be unique`
+ return `{{.type}} items[{{.i}},{{.j}}] must be unique`
+}
+
+func (l DefaultLocale) ArrayContains() string {
+ return `At least one of the items must match`
}
func (l DefaultLocale) ArrayMinProperties() string {
@@ -156,6 +170,10 @@ func (l DefaultLocale) InvalidPropertyPattern() string {
return `Property "{{.property}}" does not match pattern {{.pattern}}`
}
+func (l DefaultLocale) InvalidPropertyName() string {
+ return `Property name of "{{.property}}" does not match`
+}
+
func (l DefaultLocale) StringGTE() string {
return `String length must be greater than or equal to {{.min}}`
}
@@ -268,14 +286,23 @@ func (l DefaultLocale) ErrorFormat() string {
//Parse error
func (l DefaultLocale) ParseError() string {
- return `Expected: %expected%, given: Invalid JSON`
+ return `Expected: {{.expected}}, given: Invalid JSON`
+}
+
+//If/Else
+func (l DefaultLocale) ConditionThen() string {
+ return `Must validate "then" as "if" was valid`
+}
+
+func (l DefaultLocale) ConditionElse() string {
+ return `Must validate "else" as "if" was not valid`
}
const (
STRING_NUMBER = "number"
STRING_ARRAY_OF_STRINGS = "array of strings"
STRING_ARRAY_OF_SCHEMAS = "array of schemas"
- STRING_SCHEMA = "schema"
+ STRING_SCHEMA = "valid schema"
STRING_SCHEMA_OR_ARRAY_OF_STRINGS = "schema or array of strings"
STRING_PROPERTIES = "properties"
STRING_DEPENDENCY = "dependency"
diff --git a/vendor/github.com/xeipuuv/gojsonschema/result.go b/vendor/github.com/xeipuuv/gojsonschema/result.go
index 6ad56ae86..040d35c8d 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/result.go
+++ b/vendor/github.com/xeipuuv/gojsonschema/result.go
@@ -40,10 +40,12 @@ type (
Field() string
SetType(string)
Type() string
- SetContext(*jsonContext)
- Context() *jsonContext
+ SetContext(*JsonContext)
+ Context() *JsonContext
SetDescription(string)
Description() string
+ SetDescriptionFormat(string)
+ DescriptionFormat() string
SetValue(interface{})
Value() interface{}
SetDetails(ErrorDetails)
@@ -55,11 +57,12 @@ type (
// ResultErrorFields implements the ResultError interface, so custom errors
// can be defined by just embedding this type
ResultErrorFields struct {
- errorType string // A string with the type of error (i.e. invalid_type)
- context *jsonContext // Tree like notation of the part that failed the validation. ex (root).a.b ...
- description string // A human readable error message
- value interface{} // Value given by the JSON file that is the source of the error
- details ErrorDetails
+ errorType string // A string with the type of error (i.e. invalid_type)
+ context *JsonContext // Tree like notation of the part that failed the validation. ex (root).a.b ...
+ description string // A human readable error message
+ descriptionFormat string // A format for human readable error message
+ value interface{} // Value given by the JSON file that is the source of the error
+ details ErrorDetails
}
Result struct {
@@ -73,12 +76,6 @@ type (
// Field outputs the field name without the root context
// i.e. firstName or person.firstName instead of (root).firstName or (root).person.firstName
func (v *ResultErrorFields) Field() string {
- if p, ok := v.Details()["property"]; ok {
- if str, isString := p.(string); isString {
- return str
- }
- }
-
return strings.TrimPrefix(v.context.String(), STRING_ROOT_SCHEMA_PROPERTY+".")
}
@@ -90,11 +87,11 @@ func (v *ResultErrorFields) Type() string {
return v.errorType
}
-func (v *ResultErrorFields) SetContext(context *jsonContext) {
+func (v *ResultErrorFields) SetContext(context *JsonContext) {
v.context = context
}
-func (v *ResultErrorFields) Context() *jsonContext {
+func (v *ResultErrorFields) Context() *JsonContext {
return v.context
}
@@ -106,6 +103,14 @@ func (v *ResultErrorFields) Description() string {
return v.description
}
+func (v *ResultErrorFields) SetDescriptionFormat(descriptionFormat string) {
+ v.descriptionFormat = descriptionFormat
+}
+
+func (v *ResultErrorFields) DescriptionFormat() string {
+ return v.descriptionFormat
+}
+
func (v *ResultErrorFields) SetValue(value interface{}) {
v.value = value
}
@@ -155,7 +160,19 @@ func (v *Result) Errors() []ResultError {
return v.errors
}
-func (v *Result) addError(err ResultError, context *jsonContext, value interface{}, details ErrorDetails) {
+// Add a fully filled error to the error set
+// SetDescription() will be called with the result of the parsed err.DescriptionFormat()
+func (v *Result) AddError(err ResultError, details ErrorDetails) {
+ if _, exists := details["context"]; !exists && err.Context() != nil {
+ details["context"] = err.Context().String()
+ }
+
+ err.SetDescription(formatErrorDescription(err.DescriptionFormat(), details))
+
+ v.errors = append(v.errors, err)
+}
+
+func (v *Result) addInternalError(err ResultError, context *JsonContext, value interface{}, details ErrorDetails) {
newError(err, context, value, Locale, details)
v.errors = append(v.errors, err)
v.score -= 2 // results in a net -1 when added to the +1 we get at the end of the validation function
diff --git a/vendor/github.com/xeipuuv/gojsonschema/schema.go b/vendor/github.com/xeipuuv/gojsonschema/schema.go
index 2cac71e9b..323fe8559 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/schema.go
+++ b/vendor/github.com/xeipuuv/gojsonschema/schema.go
@@ -27,8 +27,8 @@
package gojsonschema
import (
- // "encoding/json"
"errors"
+ "math/big"
"reflect"
"regexp"
"text/template"
@@ -46,39 +46,7 @@ var (
)
func NewSchema(l JSONLoader) (*Schema, error) {
- ref, err := l.JsonReference()
- if err != nil {
- return nil, err
- }
-
- d := Schema{}
- d.pool = newSchemaPool(l.LoaderFactory())
- d.documentReference = ref
- d.referencePool = newSchemaReferencePool()
-
- var doc interface{}
- if ref.String() != "" {
- // Get document from schema pool
- spd, err := d.pool.GetDocument(d.documentReference)
- if err != nil {
- return nil, err
- }
- doc = spd.Document
- } else {
- // Load JSON directly
- doc, err = l.LoadJSON()
- if err != nil {
- return nil, err
- }
- d.pool.SetStandaloneDocument(doc)
- }
-
- err = d.parse(doc)
- if err != nil {
- return nil, err
- }
-
- return &d, nil
+ return NewSchemaLoader().Compile(l)
}
type Schema struct {
@@ -88,8 +56,8 @@ type Schema struct {
referencePool *schemaReferencePool
}
-func (d *Schema) parse(document interface{}) error {
- d.rootSchema = &subSchema{property: STRING_ROOT_SCHEMA_PROPERTY}
+func (d *Schema) parse(document interface{}, draft Draft) error {
+ d.rootSchema = &subSchema{property: STRING_ROOT_SCHEMA_PROPERTY, draft: &draft}
return d.parseSchema(document, d.rootSchema)
}
@@ -105,6 +73,23 @@ func (d *Schema) SetRootSchemaName(name string) {
//
func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema) error {
+ if currentSchema.draft == nil {
+ if currentSchema.parent == nil {
+ return errors.New("Draft not set")
+ }
+ currentSchema.draft = currentSchema.parent.draft
+ }
+
+ // As of draft 6 "true" is equivalent to an empty schema "{}" and false equals "{"not":{}}"
+ if *currentSchema.draft >= Draft6 && isKind(documentNode, reflect.Bool) {
+ b := documentNode.(bool)
+ if b {
+ documentNode = map[string]interface{}{}
+ } else {
+ documentNode = map[string]interface{}{"not": true}
+ }
+ }
+
if !isKind(documentNode, reflect.Map) {
return errors.New(formatErrorDescription(
Locale.ParseError(),
@@ -116,81 +101,67 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema)
m := documentNode.(map[string]interface{})
- if currentSchema == d.rootSchema {
+ if currentSchema.parent == nil {
currentSchema.ref = &d.documentReference
+ currentSchema.id = &d.documentReference
}
- // $subSchema
- if existsMapKey(m, KEY_SCHEMA) {
- if !isKind(m[KEY_SCHEMA], reflect.String) {
- return errors.New(formatErrorDescription(
- Locale.InvalidType(),
- ErrorDetails{
- "expected": TYPE_STRING,
- "given": KEY_SCHEMA,
- },
- ))
- }
- schemaRef := m[KEY_SCHEMA].(string)
- schemaReference, err := gojsonreference.NewJsonReference(schemaRef)
- currentSchema.subSchema = &schemaReference
- if err != nil {
- return err
- }
+ if currentSchema.id == nil && currentSchema.parent != nil {
+ currentSchema.id = currentSchema.parent.id
}
- // $ref
- if existsMapKey(m, KEY_REF) && !isKind(m[KEY_REF], reflect.String) {
+ // In draft 6 the id keyword was renamed to $id
+ // Hybrid mode uses the old id by default
+ var keyID string
+
+ switch *currentSchema.draft {
+ case Draft4:
+ keyID = KEY_ID
+ case Hybrid:
+ keyID = KEY_ID_NEW
+ if existsMapKey(m, KEY_ID) {
+ keyID = KEY_ID
+ }
+ default:
+ keyID = KEY_ID_NEW
+ }
+ if existsMapKey(m, keyID) && !isKind(m[keyID], reflect.String) {
return errors.New(formatErrorDescription(
Locale.InvalidType(),
ErrorDetails{
"expected": TYPE_STRING,
- "given": KEY_REF,
+ "given": keyID,
},
))
}
- if k, ok := m[KEY_REF].(string); ok {
-
+ if k, ok := m[keyID].(string); ok {
jsonReference, err := gojsonreference.NewJsonReference(k)
if err != nil {
return err
}
-
- if jsonReference.HasFullUrl {
- currentSchema.ref = &jsonReference
- } else {
- inheritedReference, err := currentSchema.ref.Inherits(jsonReference)
- if err != nil {
- return err
- }
-
- currentSchema.ref = inheritedReference
- }
-
- if sch, ok := d.referencePool.Get(currentSchema.ref.String() + k); ok {
- currentSchema.refSchema = sch
-
+ if currentSchema == d.rootSchema {
+ currentSchema.id = &jsonReference
} else {
- err := d.parseReference(documentNode, currentSchema, k)
+ ref, err := currentSchema.parent.id.Inherits(jsonReference)
if err != nil {
return err
}
-
- return nil
+ currentSchema.id = ref
}
}
// definitions
if existsMapKey(m, KEY_DEFINITIONS) {
- if isKind(m[KEY_DEFINITIONS], reflect.Map) {
- currentSchema.definitions = make(map[string]*subSchema)
- for dk, dv := range m[KEY_DEFINITIONS].(map[string]interface{}) {
- if isKind(dv, reflect.Map) {
- newSchema := &subSchema{property: KEY_DEFINITIONS, parent: currentSchema, ref: currentSchema.ref}
- currentSchema.definitions[dk] = newSchema
+ if isKind(m[KEY_DEFINITIONS], reflect.Map, reflect.Bool) {
+ for _, dv := range m[KEY_DEFINITIONS].(map[string]interface{}) {
+ if isKind(dv, reflect.Map, reflect.Bool) {
+
+ newSchema := &subSchema{property: KEY_DEFINITIONS, parent: currentSchema}
+
err := d.parseSchema(dv, newSchema)
+
if err != nil {
- return errors.New(err.Error())
+ return err
}
} else {
return errors.New(formatErrorDescription(
@@ -214,20 +185,6 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema)
}
- // id
- if existsMapKey(m, KEY_ID) && !isKind(m[KEY_ID], reflect.String) {
- return errors.New(formatErrorDescription(
- Locale.InvalidType(),
- ErrorDetails{
- "expected": TYPE_STRING,
- "given": KEY_ID,
- },
- ))
- }
- if k, ok := m[KEY_ID].(string); ok {
- currentSchema.id = &k
- }
-
// title
if existsMapKey(m, KEY_TITLE) && !isKind(m[KEY_TITLE], reflect.String) {
return errors.New(formatErrorDescription(
@@ -256,6 +213,39 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema)
currentSchema.description = &k
}
+ // $ref
+ if existsMapKey(m, KEY_REF) && !isKind(m[KEY_REF], reflect.String) {
+ return errors.New(formatErrorDescription(
+ Locale.InvalidType(),
+ ErrorDetails{
+ "expected": TYPE_STRING,
+ "given": KEY_REF,
+ },
+ ))
+ }
+
+ if k, ok := m[KEY_REF].(string); ok {
+
+ jsonReference, err := gojsonreference.NewJsonReference(k)
+ if err != nil {
+ return err
+ }
+
+ currentSchema.ref = &jsonReference
+
+ if sch, ok := d.referencePool.Get(currentSchema.ref.String()); ok {
+ currentSchema.refSchema = sch
+ } else {
+ err := d.parseReference(documentNode, currentSchema)
+
+ if err != nil {
+ return err
+ }
+
+ return nil
+ }
+ }
+
// type
if existsMapKey(m, KEY_TYPE) {
if isKind(m[KEY_TYPE], reflect.String) {
@@ -357,6 +347,26 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema)
}
}
+ // propertyNames
+ if existsMapKey(m, KEY_PROPERTY_NAMES) && *currentSchema.draft >= Draft6 {
+ if isKind(m[KEY_PROPERTY_NAMES], reflect.Map, reflect.Bool) {
+ newSchema := &subSchema{property: KEY_PROPERTY_NAMES, parent: currentSchema, ref: currentSchema.ref}
+ currentSchema.propertyNames = newSchema
+ err := d.parseSchema(m[KEY_PROPERTY_NAMES], newSchema)
+ if err != nil {
+ return err
+ }
+ } else {
+ return errors.New(formatErrorDescription(
+ Locale.InvalidType(),
+ ErrorDetails{
+ "expected": STRING_SCHEMA,
+ "given": KEY_PATTERN_PROPERTIES,
+ },
+ ))
+ }
+ }
+
// dependencies
if existsMapKey(m, KEY_DEPENDENCIES) {
err := d.parseDependencies(m[KEY_DEPENDENCIES], currentSchema)
@@ -369,7 +379,7 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema)
if existsMapKey(m, KEY_ITEMS) {
if isKind(m[KEY_ITEMS], reflect.Slice) {
for _, itemElement := range m[KEY_ITEMS].([]interface{}) {
- if isKind(itemElement, reflect.Map) {
+ if isKind(itemElement, reflect.Map, reflect.Bool) {
newSchema := &subSchema{parent: currentSchema, property: KEY_ITEMS}
newSchema.ref = currentSchema.ref
currentSchema.AddItemsChild(newSchema)
@@ -388,7 +398,7 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema)
}
currentSchema.itemsChildrenIsSingleSchema = false
}
- } else if isKind(m[KEY_ITEMS], reflect.Map) {
+ } else if isKind(m[KEY_ITEMS], reflect.Map, reflect.Bool) {
newSchema := &subSchema{parent: currentSchema, property: KEY_ITEMS}
newSchema.ref = currentSchema.ref
currentSchema.AddItemsChild(newSchema)
@@ -443,7 +453,7 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema)
},
))
}
- if *multipleOfValue <= 0 {
+ if multipleOfValue.Cmp(big.NewRat(0, 1)) <= 0 {
return errors.New(formatErrorDescription(
Locale.GreaterThanZero(),
ErrorDetails{"number": KEY_MULTIPLE_OF},
@@ -464,20 +474,62 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema)
}
if existsMapKey(m, KEY_EXCLUSIVE_MINIMUM) {
- if isKind(m[KEY_EXCLUSIVE_MINIMUM], reflect.Bool) {
+ switch *currentSchema.draft {
+ case Draft4:
+ if !isKind(m[KEY_EXCLUSIVE_MINIMUM], reflect.Bool) {
+ return errors.New(formatErrorDescription(
+ Locale.InvalidType(),
+ ErrorDetails{
+ "expected": TYPE_BOOLEAN,
+ "given": KEY_EXCLUSIVE_MINIMUM,
+ },
+ ))
+ }
if currentSchema.minimum == nil {
return errors.New(formatErrorDescription(
Locale.CannotBeUsedWithout(),
ErrorDetails{"x": KEY_EXCLUSIVE_MINIMUM, "y": KEY_MINIMUM},
))
}
- exclusiveMinimumValue := m[KEY_EXCLUSIVE_MINIMUM].(bool)
- currentSchema.exclusiveMinimum = exclusiveMinimumValue
- } else {
- return errors.New(formatErrorDescription(
- Locale.MustBeOfA(),
- ErrorDetails{"x": KEY_EXCLUSIVE_MINIMUM, "y": TYPE_BOOLEAN},
- ))
+ if m[KEY_EXCLUSIVE_MINIMUM].(bool) {
+ currentSchema.exclusiveMinimum = currentSchema.minimum
+ currentSchema.minimum = nil
+ }
+ case Hybrid:
+ if isKind(m[KEY_EXCLUSIVE_MINIMUM], reflect.Bool) {
+ if currentSchema.minimum == nil {
+ return errors.New(formatErrorDescription(
+ Locale.CannotBeUsedWithout(),
+ ErrorDetails{"x": KEY_EXCLUSIVE_MINIMUM, "y": KEY_MINIMUM},
+ ))
+ }
+ if m[KEY_EXCLUSIVE_MINIMUM].(bool) {
+ currentSchema.exclusiveMinimum = currentSchema.minimum
+ currentSchema.minimum = nil
+ }
+ } else if isJsonNumber(m[KEY_EXCLUSIVE_MINIMUM]) {
+ currentSchema.exclusiveMinimum = mustBeNumber(m[KEY_EXCLUSIVE_MINIMUM])
+ } else {
+ return errors.New(formatErrorDescription(
+ Locale.InvalidType(),
+ ErrorDetails{
+ "expected": TYPE_BOOLEAN + "/" + TYPE_NUMBER,
+ "given": KEY_EXCLUSIVE_MINIMUM,
+ },
+ ))
+ }
+ default:
+ if isJsonNumber(m[KEY_EXCLUSIVE_MINIMUM]) {
+ currentSchema.exclusiveMinimum = mustBeNumber(m[KEY_EXCLUSIVE_MINIMUM])
+ } else {
+ return errors.New(formatErrorDescription(
+ Locale.InvalidType(),
+ ErrorDetails{
+ "expected": TYPE_NUMBER,
+ "given": KEY_EXCLUSIVE_MINIMUM,
+ },
+ ))
+ }
}
}
@@ -493,29 +545,62 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema)
}
if existsMapKey(m, KEY_EXCLUSIVE_MAXIMUM) {
- if isKind(m[KEY_EXCLUSIVE_MAXIMUM], reflect.Bool) {
+ switch *currentSchema.draft {
+ case Draft4:
+ if !isKind(m[KEY_EXCLUSIVE_MAXIMUM], reflect.Bool) {
+ return errors.New(formatErrorDescription(
+ Locale.InvalidType(),
+ ErrorDetails{
+ "expected": TYPE_BOOLEAN,
+ "given": KEY_EXCLUSIVE_MAXIMUM,
+ },
+ ))
+ }
if currentSchema.maximum == nil {
return errors.New(formatErrorDescription(
Locale.CannotBeUsedWithout(),
ErrorDetails{"x": KEY_EXCLUSIVE_MAXIMUM, "y": KEY_MAXIMUM},
))
}
- exclusiveMaximumValue := m[KEY_EXCLUSIVE_MAXIMUM].(bool)
- currentSchema.exclusiveMaximum = exclusiveMaximumValue
- } else {
- return errors.New(formatErrorDescription(
- Locale.MustBeOfA(),
- ErrorDetails{"x": KEY_EXCLUSIVE_MAXIMUM, "y": STRING_NUMBER},
- ))
- }
- }
-
- if currentSchema.minimum != nil && currentSchema.maximum != nil {
- if *currentSchema.minimum > *currentSchema.maximum {
- return errors.New(formatErrorDescription(
- Locale.CannotBeGT(),
- ErrorDetails{"x": KEY_MINIMUM, "y": KEY_MAXIMUM},
- ))
+ if m[KEY_EXCLUSIVE_MAXIMUM].(bool) {
+ currentSchema.exclusiveMaximum = currentSchema.maximum
+ currentSchema.maximum = nil
+ }
+ case Hybrid:
+ if isKind(m[KEY_EXCLUSIVE_MAXIMUM], reflect.Bool) {
+ if currentSchema.maximum == nil {
+ return errors.New(formatErrorDescription(
+ Locale.CannotBeUsedWithout(),
+ ErrorDetails{"x": KEY_EXCLUSIVE_MAXIMUM, "y": KEY_MAXIMUM},
+ ))
+ }
+ if m[KEY_EXCLUSIVE_MAXIMUM].(bool) {
+ currentSchema.exclusiveMaximum = currentSchema.maximum
+ currentSchema.maximum = nil
+ }
+ } else if isJsonNumber(m[KEY_EXCLUSIVE_MAXIMUM]) {
+ currentSchema.exclusiveMaximum = mustBeNumber(m[KEY_EXCLUSIVE_MAXIMUM])
+ } else {
+ return errors.New(formatErrorDescription(
+ Locale.InvalidType(),
+ ErrorDetails{
+ "expected": TYPE_BOOLEAN + "/" + TYPE_NUMBER,
+ "given": KEY_EXCLUSIVE_MAXIMUM,
+ },
+ ))
+ }
+ default:
+ if isJsonNumber(m[KEY_EXCLUSIVE_MAXIMUM]) {
+ currentSchema.exclusiveMaximum = mustBeNumber(m[KEY_EXCLUSIVE_MAXIMUM])
+ } else {
+ return errors.New(formatErrorDescription(
+ Locale.InvalidType(),
+ ErrorDetails{
+ "expected": TYPE_NUMBER,
+ "given": KEY_EXCLUSIVE_MAXIMUM,
+ },
+ ))
+ }
}
}
@@ -705,8 +790,24 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema)
}
}
+ if existsMapKey(m, KEY_CONTAINS) && *currentSchema.draft >= Draft6 {
+ newSchema := &subSchema{property: KEY_CONTAINS, parent: currentSchema, ref: currentSchema.ref}
+ currentSchema.contains = newSchema
+ err := d.parseSchema(m[KEY_CONTAINS], newSchema)
+ if err != nil {
+ return err
+ }
+ }
+
// validation : all
+ if existsMapKey(m, KEY_CONST) && *currentSchema.draft >= Draft6 {
+ err := currentSchema.AddConst(m[KEY_CONST])
+ if err != nil {
+ return err
+ }
+ }
+
if existsMapKey(m, KEY_ENUM) {
if isKind(m[KEY_ENUM], reflect.Slice) {
for _, v := range m[KEY_ENUM].([]interface{}) {
@@ -780,7 +881,7 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema)
}
if existsMapKey(m, KEY_NOT) {
- if isKind(m[KEY_NOT], reflect.Map) {
+ if isKind(m[KEY_NOT], reflect.Map, reflect.Bool) {
newSchema := &subSchema{property: KEY_NOT, parent: currentSchema, ref: currentSchema.ref}
currentSchema.SetNot(newSchema)
err := d.parseSchema(m[KEY_NOT], newSchema)
@@ -795,48 +896,91 @@ func (d *Schema) parseSchema(documentNode interface{}, currentSchema *subSchema)
}
}
+ if *currentSchema.draft >= Draft7 {
+ if existsMapKey(m, KEY_IF) {
+ if isKind(m[KEY_IF], reflect.Map, reflect.Bool) {
+ newSchema := &subSchema{property: KEY_IF, parent: currentSchema, ref: currentSchema.ref}
+ currentSchema.SetIf(newSchema)
+ err := d.parseSchema(m[KEY_IF], newSchema)
+ if err != nil {
+ return err
+ }
+ } else {
+ return errors.New(formatErrorDescription(
+ Locale.MustBeOfAn(),
+ ErrorDetails{"x": KEY_IF, "y": TYPE_OBJECT},
+ ))
+ }
+ }
+
+ if existsMapKey(m, KEY_THEN) {
+ if isKind(m[KEY_THEN], reflect.Map, reflect.Bool) {
+ newSchema := &subSchema{property: KEY_THEN, parent: currentSchema, ref: currentSchema.ref}
+ currentSchema.SetThen(newSchema)
+ err := d.parseSchema(m[KEY_THEN], newSchema)
+ if err != nil {
+ return err
+ }
+ } else {
+ return errors.New(formatErrorDescription(
+ Locale.MustBeOfAn(),
+ ErrorDetails{"x": KEY_THEN, "y": TYPE_OBJECT},
+ ))
+ }
+ }
+
+ if existsMapKey(m, KEY_ELSE) {
+ if isKind(m[KEY_ELSE], reflect.Map, reflect.Bool) {
+ newSchema := &subSchema{property: KEY_ELSE, parent: currentSchema, ref: currentSchema.ref}
+ currentSchema.SetElse(newSchema)
+ err := d.parseSchema(m[KEY_ELSE], newSchema)
+ if err != nil {
+ return err
+ }
+ } else {
+ return errors.New(formatErrorDescription(
+ Locale.MustBeOfAn(),
+ ErrorDetails{"x": KEY_ELSE, "y": TYPE_OBJECT},
+ ))
+ }
+ }
+ }
+
return nil
}
-func (d *Schema) parseReference(documentNode interface{}, currentSchema *subSchema, reference string) error {
- var refdDocumentNode interface{}
- jsonPointer := currentSchema.ref.GetPointer()
- standaloneDocument := d.pool.GetStandaloneDocument()
+func (d *Schema) parseReference(documentNode interface{}, currentSchema *subSchema) error {
+ var (
+ refdDocumentNode interface{}
+ dsp *schemaPoolDocument
+ err error
+ )
- if standaloneDocument != nil {
+ newSchema := &subSchema{property: KEY_REF, parent: currentSchema, ref: currentSchema.ref}
- var err error
- refdDocumentNode, _, err = jsonPointer.Get(standaloneDocument)
- if err != nil {
- return err
- }
+ d.referencePool.Add(currentSchema.ref.String(), newSchema)
- } else {
- dsp, err := d.pool.GetDocument(*currentSchema.ref)
- if err != nil {
- return err
- }
+ dsp, err = d.pool.GetDocument(*currentSchema.ref)
+ if err != nil {
+ return err
+ }
+ newSchema.id = currentSchema.ref
- refdDocumentNode, _, err = jsonPointer.Get(dsp.Document)
- if err != nil {
- return err
- }
+ refdDocumentNode = dsp.Document
+ newSchema.draft = dsp.Draft
+ if err != nil {
+ return err
}
- if !isKind(refdDocumentNode, reflect.Map) {
+ if !isKind(refdDocumentNode, reflect.Map, reflect.Bool) {
return errors.New(formatErrorDescription(
Locale.MustBeOfType(),
ErrorDetails{"key": STRING_SCHEMA, "type": TYPE_OBJECT},
))
}
- // returns the loaded referenced subSchema for the caller to update its current subSchema
- newSchemaDocument := refdDocumentNode.(map[string]interface{})
- newSchema := &subSchema{property: KEY_REF, parent: currentSchema, ref: currentSchema.ref}
- d.referencePool.Add(currentSchema.ref.String()+reference, newSchema)
-
- err := d.parseSchema(newSchemaDocument, newSchema)
+ err = d.parseSchema(refdDocumentNode, newSchema)
if err != nil {
return err
}
@@ -904,7 +1048,7 @@ func (d *Schema) parseDependencies(documentNode interface{}, currentSchema *subS
currentSchema.dependencies[k] = valuesToRegister
}
- case reflect.Map:
+ case reflect.Map, reflect.Bool:
depSchema := &subSchema{property: k, parent: currentSchema, ref: currentSchema.ref}
err := d.parseSchema(m[k], depSchema)
if err != nil {
diff --git a/vendor/github.com/xeipuuv/gojsonschema/schemaLoader.go b/vendor/github.com/xeipuuv/gojsonschema/schemaLoader.go
new file mode 100644
index 000000000..95e0568ab
--- /dev/null
+++ b/vendor/github.com/xeipuuv/gojsonschema/schemaLoader.go
@@ -0,0 +1,203 @@
+// Copyright 2018 johandorland ( https://github.com/johandorland )
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package gojsonschema
+
+import (
+ "bytes"
+ "errors"
+
+ "github.com/xeipuuv/gojsonreference"
+)
+
+type SchemaLoader struct {
+ pool *schemaPool
+ AutoDetect bool
+ Validate bool
+ Draft Draft
+}
+
+func NewSchemaLoader() *SchemaLoader {
+
+ ps := &SchemaLoader{
+ pool: &schemaPool{
+ schemaPoolDocuments: make(map[string]*schemaPoolDocument),
+ },
+ AutoDetect: true,
+ Validate: false,
+ Draft: Hybrid,
+ }
+ ps.pool.autoDetect = &ps.AutoDetect
+
+ return ps
+}
+
+func (sl *SchemaLoader) validateMetaschema(documentNode interface{}) error {
+
+ var (
+ schema string
+ err error
+ )
+ if sl.AutoDetect {
+ schema, _, err = parseSchemaURL(documentNode)
+ if err != nil {
+ return err
+ }
+ }
+
+ // If no explicit "$schema" is used, use the default metaschema associated with the draft used
+ if schema == "" {
+ if sl.Draft == Hybrid {
+ return nil
+ }
+ schema = drafts.GetSchemaURL(sl.Draft)
+ }
+
+ //Disable validation when loading the metaschema to prevent an infinite recursive loop
+ sl.Validate = false
+
+ metaSchema, err := sl.Compile(NewReferenceLoader(schema))
+
+ if err != nil {
+ return err
+ }
+
+ sl.Validate = true
+
+ result := metaSchema.validateDocument(documentNode)
+
+ if !result.Valid() {
+ var res bytes.Buffer
+ for _, err := range result.Errors() {
+ res.WriteString(err.String())
+ res.WriteString("\n")
+ }
+ return errors.New(res.String())
+ }
+
+ return nil
+}
+
+// AddSchemas adds an arbritrary amount of schemas to the schema cache. As this function does not require
+// an explicit URL, every schema should contain an $id, so that it can be referenced by the main schema
+func (sl *SchemaLoader) AddSchemas(loaders ...JSONLoader) error {
+ emptyRef, _ := gojsonreference.NewJsonReference("")
+
+ for _, loader := range loaders {
+ doc, err := loader.LoadJSON()
+
+ if err != nil {
+ return err
+ }
+
+ if sl.Validate {
+ if err := sl.validateMetaschema(doc); err != nil {
+ return err
+ }
+ }
+
+ // Directly use the Recursive function, so that it get only added to the schema pool by $id
+ // and not by the ref of the document as it's empty
+ if err = sl.pool.parseReferences(doc, emptyRef, false); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+//AddSchema adds a schema under the provided URL to the schema cache
+func (sl *SchemaLoader) AddSchema(url string, loader JSONLoader) error {
+
+ ref, err := gojsonreference.NewJsonReference(url)
+
+ if err != nil {
+ return err
+ }
+
+ doc, err := loader.LoadJSON()
+
+ if err != nil {
+ return err
+ }
+
+ if sl.Validate {
+ if err := sl.validateMetaschema(doc); err != nil {
+ return err
+ }
+ }
+
+ return sl.pool.parseReferences(doc, ref, true)
+}
+
+func (sl *SchemaLoader) Compile(rootSchema JSONLoader) (*Schema, error) {
+
+ ref, err := rootSchema.JsonReference()
+
+ if err != nil {
+ return nil, err
+ }
+
+ d := Schema{}
+ d.pool = sl.pool
+ d.pool.jsonLoaderFactory = rootSchema.LoaderFactory()
+ d.documentReference = ref
+ d.referencePool = newSchemaReferencePool()
+
+ var doc interface{}
+ if ref.String() != "" {
+ // Get document from schema pool
+ spd, err := d.pool.GetDocument(d.documentReference)
+ if err != nil {
+ return nil, err
+ }
+ doc = spd.Document
+ } else {
+ // Load JSON directly
+ doc, err = rootSchema.LoadJSON()
+ if err != nil {
+ return nil, err
+ }
+ // References need only be parsed if loading JSON directly
+ // as pool.GetDocument already does this for us if loading by reference
+ err = sl.pool.parseReferences(doc, ref, true)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ if sl.Validate {
+ if err := sl.validateMetaschema(doc); err != nil {
+ return nil, err
+ }
+ }
+
+ draft := sl.Draft
+ if sl.AutoDetect {
+ _, detectedDraft, err := parseSchemaURL(doc)
+ if err != nil {
+ return nil, err
+ }
+ if detectedDraft != nil {
+ draft = *detectedDraft
+ }
+ }
+
+ err = d.parse(doc, draft)
+ if err != nil {
+ return nil, err
+ }
+
+ return &d, nil
+}
diff --git a/vendor/github.com/xeipuuv/gojsonschema/schemaPool.go b/vendor/github.com/xeipuuv/gojsonschema/schemaPool.go
index f2ad641af..f124e038d 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/schemaPool.go
+++ b/vendor/github.com/xeipuuv/gojsonschema/schemaPool.go
@@ -28,82 +28,188 @@ package gojsonschema
import (
"errors"
+ "fmt"
+ "reflect"
"github.com/xeipuuv/gojsonreference"
)
type schemaPoolDocument struct {
Document interface{}
+ Draft *Draft
}
type schemaPool struct {
schemaPoolDocuments map[string]*schemaPoolDocument
- standaloneDocument interface{}
jsonLoaderFactory JSONLoaderFactory
+ autoDetect *bool
}
-func newSchemaPool(f JSONLoaderFactory) *schemaPool {
+func (p *schemaPool) parseReferences(document interface{}, ref gojsonreference.JsonReference, pooled bool) error {
- p := &schemaPool{}
- p.schemaPoolDocuments = make(map[string]*schemaPoolDocument)
- p.standaloneDocument = nil
- p.jsonLoaderFactory = f
+ var (
+ draft *Draft
+ err error
+ reference = ref.String()
+ )
+ // Only the root document should be added to the schema pool if pooled is true
+ if _, ok := p.schemaPoolDocuments[reference]; pooled && ok {
+ return fmt.Errorf("Reference already exists: \"%s\"", reference)
+ }
- return p
-}
+ if *p.autoDetect {
+ _, draft, err = parseSchemaURL(document)
+ if err != nil {
+ return err
+ }
+ }
+
+ err = p.parseReferencesRecursive(document, ref, draft)
-func (p *schemaPool) SetStandaloneDocument(document interface{}) {
- p.standaloneDocument = document
+ if pooled {
+ p.schemaPoolDocuments[reference] = &schemaPoolDocument{Document: document, Draft: draft}
+ }
+
+ return err
}
-func (p *schemaPool) GetStandaloneDocument() (document interface{}) {
- return p.standaloneDocument
+func (p *schemaPool) parseReferencesRecursive(document interface{}, ref gojsonreference.JsonReference, draft *Draft) error {
+ // parseReferencesRecursive parses a JSON document and resolves all $id and $ref references.
+ // For $ref references it takes into account the $id scope it is in and replaces
+ // the reference by the absolute resolved reference
+
+ // When encountering errors it fails silently. Error handling is done when the schema
+ // is syntactically parsed and any error encountered here should also come up there.
+ switch m := document.(type) {
+ case []interface{}:
+ for _, v := range m {
+ p.parseReferencesRecursive(v, ref, draft)
+ }
+ case map[string]interface{}:
+ localRef := &ref
+
+ keyID := KEY_ID_NEW
+ if existsMapKey(m, KEY_ID) {
+ keyID = KEY_ID
+ }
+ if existsMapKey(m, keyID) && isKind(m[keyID], reflect.String) {
+ jsonReference, err := gojsonreference.NewJsonReference(m[keyID].(string))
+ if err == nil {
+ localRef, err = ref.Inherits(jsonReference)
+ if err == nil {
+ if _, ok := p.schemaPoolDocuments[localRef.String()]; ok {
+ return fmt.Errorf("Reference already exists: \"%s\"", localRef.String())
+ }
+ p.schemaPoolDocuments[localRef.String()] = &schemaPoolDocument{Document: document, Draft: draft}
+ }
+ }
+ }
+
+ if existsMapKey(m, KEY_REF) && isKind(m[KEY_REF], reflect.String) {
+ jsonReference, err := gojsonreference.NewJsonReference(m[KEY_REF].(string))
+ if err == nil {
+ absoluteRef, err := localRef.Inherits(jsonReference)
+ if err == nil {
+ m[KEY_REF] = absoluteRef.String()
+ }
+ }
+ }
+
+ for k, v := range m {
+ // const and enums should be interpreted literally, so ignore them
+ if k == KEY_CONST || k == KEY_ENUM {
+ continue
+ }
+ // Something like a property or a dependency is not a valid schema, as it might describe properties named "$ref", "$id" or "const", etc
+ // Therefore don't treat it like a schema.
+ if k == KEY_PROPERTIES || k == KEY_DEPENDENCIES || k == KEY_PATTERN_PROPERTIES {
+ if child, ok := v.(map[string]interface{}); ok {
+ for _, v := range child {
+ p.parseReferencesRecursive(v, *localRef, draft)
+ }
+ }
+ } else {
+ p.parseReferencesRecursive(v, *localRef, draft)
+ }
+ }
+ }
+ return nil
}
func (p *schemaPool) GetDocument(reference gojsonreference.JsonReference) (*schemaPoolDocument, error) {
+ var (
+ spd *schemaPoolDocument
+ draft *Draft
+ ok bool
+ err error
+ )
+
if internalLogEnabled {
internalLog("Get Document ( %s )", reference.String())
}
- var err error
+ // Create a deep copy, so we can remove the fragment part later on without altering the original
+ refToUrl, _ := gojsonreference.NewJsonReference(reference.String())
- // It is not possible to load anything that is not canonical...
- if !reference.IsCanonical() {
- return nil, errors.New(formatErrorDescription(
- Locale.ReferenceMustBeCanonical(),
- ErrorDetails{"reference": reference},
- ))
+ // First check if the given fragment is a location independent identifier
+ // http://json-schema.org/latest/json-schema-core.html#rfc.section.8.2.3
+
+ if spd, ok = p.schemaPoolDocuments[refToUrl.String()]; ok {
+ if internalLogEnabled {
+ internalLog(" From pool")
+ }
+ return spd, nil
}
- refToUrl := reference
+ // If the given reference is not a location independent identifier,
+ // strip the fragment and look for a document with it's base URI
+
refToUrl.GetUrl().Fragment = ""
- var spd *schemaPoolDocument
+ if cachedSpd, ok := p.schemaPoolDocuments[refToUrl.String()]; ok {
+ document, _, err := reference.GetPointer().Get(cachedSpd.Document)
- // Try to find the requested document in the pool
- for k := range p.schemaPoolDocuments {
- if k == refToUrl.String() {
- spd = p.schemaPoolDocuments[k]
+ if err != nil {
+ return nil, err
}
- }
- if spd != nil {
if internalLogEnabled {
internalLog(" From pool")
}
+
+ spd = &schemaPoolDocument{Document: document, Draft: cachedSpd.Draft}
+ p.schemaPoolDocuments[reference.String()] = spd
+
return spd, nil
}
+ // It is not possible to load anything remotely that is not canonical...
+ if !reference.IsCanonical() {
+ return nil, errors.New(formatErrorDescription(
+ Locale.ReferenceMustBeCanonical(),
+ ErrorDetails{"reference": reference.String()},
+ ))
+ }
+
jsonReferenceLoader := p.jsonLoaderFactory.New(reference.String())
document, err := jsonReferenceLoader.LoadJSON()
+
if err != nil {
return nil, err
}
- spd = &schemaPoolDocument{Document: document}
- // add the document to the pool for potential later use
- p.schemaPoolDocuments[refToUrl.String()] = spd
+ // add the whole document to the pool for potential re-use
+ p.parseReferences(document, refToUrl, true)
+
+ _, draft, _ = parseSchemaURL(document)
+
+ // resolve the potential fragment and also cache it
+ document, _, err = reference.GetPointer().Get(document)
+
+ if err != nil {
+ return nil, err
+ }
- return spd, nil
+ return &schemaPoolDocument{Document: document, Draft: draft}, nil
}
diff --git a/vendor/github.com/xeipuuv/gojsonschema/schemaReferencePool.go b/vendor/github.com/xeipuuv/gojsonschema/schemaReferencePool.go
index 294e36a73..6e5e1b5cd 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/schemaReferencePool.go
+++ b/vendor/github.com/xeipuuv/gojsonschema/schemaReferencePool.go
@@ -62,6 +62,7 @@ func (p *schemaReferencePool) Add(ref string, sch *subSchema) {
if internalLogEnabled {
internalLog(fmt.Sprintf("Add Schema Reference %s to pool", ref))
}
-
- p.documents[ref] = sch
+ if _, ok := p.documents[ref]; !ok {
+ p.documents[ref] = sch
+ }
}
diff --git a/vendor/github.com/xeipuuv/gojsonschema/subSchema.go b/vendor/github.com/xeipuuv/gojsonschema/subSchema.go
index 9ddbb5fc1..362d86ca9 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/subSchema.go
+++ b/vendor/github.com/xeipuuv/gojsonschema/subSchema.go
@@ -28,6 +28,7 @@ package gojsonschema
import (
"errors"
+ "math/big"
"regexp"
"strings"
@@ -35,8 +36,9 @@ import (
)
const (
- KEY_SCHEMA = "$subSchema"
- KEY_ID = "$id"
+ KEY_SCHEMA = "$schema"
+ KEY_ID = "id"
+ KEY_ID_NEW = "$id"
KEY_REF = "$ref"
KEY_TITLE = "title"
KEY_DESCRIPTION = "description"
@@ -46,6 +48,7 @@ const (
KEY_PROPERTIES = "properties"
KEY_PATTERN_PROPERTIES = "patternProperties"
KEY_ADDITIONAL_PROPERTIES = "additionalProperties"
+ KEY_PROPERTY_NAMES = "propertyNames"
KEY_DEFINITIONS = "definitions"
KEY_MULTIPLE_OF = "multipleOf"
KEY_MINIMUM = "minimum"
@@ -63,17 +66,23 @@ const (
KEY_MIN_ITEMS = "minItems"
KEY_MAX_ITEMS = "maxItems"
KEY_UNIQUE_ITEMS = "uniqueItems"
+ KEY_CONTAINS = "contains"
+ KEY_CONST = "const"
KEY_ENUM = "enum"
KEY_ONE_OF = "oneOf"
KEY_ANY_OF = "anyOf"
KEY_ALL_OF = "allOf"
KEY_NOT = "not"
+ KEY_IF = "if"
+ KEY_THEN = "then"
+ KEY_ELSE = "else"
)
type subSchema struct {
+ draft *Draft
// basic subSchema meta properties
- id *string
+ id *gojsonreference.JsonReference
title *string
description *string
@@ -86,23 +95,19 @@ type subSchema struct {
ref *gojsonreference.JsonReference
// Schema referenced
refSchema *subSchema
- // Json reference
- subSchema *gojsonreference.JsonReference
// hierarchy
parent *subSchema
- definitions map[string]*subSchema
- definitionsChildren []*subSchema
itemsChildren []*subSchema
itemsChildrenIsSingleSchema bool
propertiesChildren []*subSchema
// validation : number / integer
- multipleOf *float64
- maximum *float64
- exclusiveMaximum bool
- minimum *float64
- exclusiveMinimum bool
+ multipleOf *big.Rat
+ maximum *big.Rat
+ exclusiveMaximum *big.Rat
+ minimum *big.Rat
+ exclusiveMinimum *big.Rat
// validation : string
minLength *int
@@ -118,27 +123,43 @@ type subSchema struct {
dependencies map[string]interface{}
additionalProperties interface{}
patternProperties map[string]*subSchema
+ propertyNames *subSchema
// validation : array
minItems *int
maxItems *int
uniqueItems bool
+ contains *subSchema
additionalItems interface{}
// validation : all
- enum []string
+ _const *string //const is a golang keyword
+ enum []string
// validation : subSchema
oneOf []*subSchema
anyOf []*subSchema
allOf []*subSchema
not *subSchema
+ _if *subSchema // if/else are golang keywords
+ _then *subSchema
+ _else *subSchema
+}
+
+func (s *subSchema) AddConst(i interface{}) error {
+
+ is, err := marshalWithoutNumber(i)
+ if err != nil {
+ return err
+ }
+ s._const = is
+ return nil
}
func (s *subSchema) AddEnum(i interface{}) error {
- is, err := marshalToJsonString(i)
+ is, err := marshalWithoutNumber(i)
if err != nil {
return err
}
@@ -157,7 +178,7 @@ func (s *subSchema) AddEnum(i interface{}) error {
func (s *subSchema) ContainsEnum(i interface{}) (bool, error) {
- is, err := marshalToJsonString(i)
+ is, err := marshalWithoutNumber(i)
if err != nil {
return false, err
}
@@ -181,6 +202,18 @@ func (s *subSchema) SetNot(subSchema *subSchema) {
s.not = subSchema
}
+func (s *subSchema) SetIf(subSchema *subSchema) {
+ s._if = subSchema
+}
+
+func (s *subSchema) SetThen(subSchema *subSchema) {
+ s._then = subSchema
+}
+
+func (s *subSchema) SetElse(subSchema *subSchema) {
+ s._else = subSchema
+}
+
func (s *subSchema) AddRequired(value string) error {
if isStringInSlice(s.required, value) {
@@ -195,10 +228,6 @@ func (s *subSchema) AddRequired(value string) error {
return nil
}
-func (s *subSchema) AddDefinitionChild(child *subSchema) {
- s.definitionsChildren = append(s.definitionsChildren, child)
-}
-
func (s *subSchema) AddItemsChild(child *subSchema) {
s.itemsChildren = append(s.itemsChildren, child)
}
diff --git a/vendor/github.com/xeipuuv/gojsonschema/utils.go b/vendor/github.com/xeipuuv/gojsonschema/utils.go
index 26cf75ebf..88d223fbf 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/utils.go
+++ b/vendor/github.com/xeipuuv/gojsonschema/utils.go
@@ -29,17 +29,23 @@ import (
"encoding/json"
"fmt"
"math"
+ "math/big"
"reflect"
- "strconv"
)
-func isKind(what interface{}, kind reflect.Kind) bool {
+func isKind(what interface{}, kinds ...reflect.Kind) bool {
target := what
if isJsonNumber(what) {
// JSON Numbers are strings!
target = *mustBeNumber(what)
}
- return reflect.ValueOf(target).Kind() == kind
+ targetKind := reflect.ValueOf(target).Kind()
+ for _, kind := range kinds {
+ if targetKind == kind {
+ return true
+ }
+ }
+ return false
}
func existsMapKey(m map[string]interface{}, k string) bool {
@@ -56,6 +62,16 @@ func isStringInSlice(s []string, what string) bool {
return false
}
+// indexStringInSlice returns the index of the first instance of 'what' in s or -1 if it is not found in s.
+func indexStringInSlice(s []string, what string) int {
+ for i := range s {
+ if s[i] == what {
+ return i
+ }
+ }
+ return -1
+}
+
func marshalToJsonString(value interface{}) (*string, error) {
mBytes, err := json.Marshal(value)
@@ -67,6 +83,28 @@ func marshalToJsonString(value interface{}) (*string, error) {
return &sBytes, nil
}
+func marshalWithoutNumber(value interface{}) (*string, error) {
+
+ // The JSON is decoded using https://golang.org/pkg/encoding/json/#Decoder.UseNumber
+ // This means the numbers are internally still represented as strings and therefore 1.00 is unequal to 1
+ // One way to eliminate these differences is to decode and encode the JSON one more time without Decoder.UseNumber
+ // so that these differences in representation are removed
+
+ jsonString, err := marshalToJsonString(value)
+ if err != nil {
+ return nil, err
+ }
+
+ var document interface{}
+
+ err = json.Unmarshal([]byte(*jsonString), &document)
+ if err != nil {
+ return nil, err
+ }
+
+ return marshalToJsonString(document)
+}
+
func isJsonNumber(what interface{}) bool {
switch what.(type) {
@@ -78,21 +116,13 @@ func isJsonNumber(what interface{}) bool {
return false
}
-func checkJsonNumber(what interface{}) (isValidFloat64 bool, isValidInt64 bool, isValidInt32 bool) {
+func checkJsonInteger(what interface{}) (isInt bool) {
jsonNumber := what.(json.Number)
- f64, errFloat64 := jsonNumber.Float64()
- s64 := strconv.FormatFloat(f64, 'f', -1, 64)
- _, errInt64 := strconv.ParseInt(s64, 10, 64)
-
- isValidFloat64 = errFloat64 == nil
- isValidInt64 = errInt64 == nil
+ bigFloat, isValidNumber := new(big.Rat).SetString(string(jsonNumber))
- _, errInt32 := strconv.ParseInt(s64, 10, 32)
- isValidInt32 = isValidInt64 && errInt32 == nil
-
- return
+ return isValidNumber && bigFloat.IsInt()
}
@@ -117,9 +147,9 @@ func mustBeInteger(what interface{}) *int {
number := what.(json.Number)
- _, _, isValidInt32 := checkJsonNumber(number)
+ isInt := checkJsonInteger(number)
- if isValidInt32 {
+ if isInt {
int64Value, err := number.Int64()
if err != nil {
@@ -138,15 +168,13 @@ func mustBeInteger(what interface{}) *int {
return nil
}
-func mustBeNumber(what interface{}) *float64 {
+func mustBeNumber(what interface{}) *big.Rat {
if isJsonNumber(what) {
-
number := what.(json.Number)
- float64Value, err := number.Float64()
-
- if err == nil {
- return &float64Value
+ float64Value, success := new(big.Rat).SetString(string(number))
+ if success {
+ return float64Value
} else {
return nil
}
diff --git a/vendor/github.com/xeipuuv/gojsonschema/validation.go b/vendor/github.com/xeipuuv/gojsonschema/validation.go
index 9afea2518..090c11e93 100644
--- a/vendor/github.com/xeipuuv/gojsonschema/validation.go
+++ b/vendor/github.com/xeipuuv/gojsonschema/validation.go
@@ -27,6 +27,7 @@ package gojsonschema
import (
"encoding/json"
+ "math/big"
"reflect"
"regexp"
"strconv"
@@ -60,24 +61,27 @@ func (v *Schema) Validate(l JSONLoader) (*Result, error) {
return nil, err
}
+ return v.validateDocument(root), nil
+}
+
+func (v *Schema) validateDocument(root interface{}) *Result {
// begin validation
result := &Result{}
- context := newJsonContext(STRING_CONTEXT_ROOT, nil)
+ context := NewJsonContext(STRING_CONTEXT_ROOT, nil)
v.rootSchema.validateRecursive(v.rootSchema, root, result, context)
- return result, nil
-
+ return result
}
-func (v *subSchema) subValidateWithContext(document interface{}, context *jsonContext) *Result {
+func (v *subSchema) subValidateWithContext(document interface{}, context *JsonContext) *Result {
result := &Result{}
v.validateRecursive(v, document, result, context)
return result
}
// Walker function to validate the json recursively against the subSchema
-func (v *subSchema) validateRecursive(currentSubSchema *subSchema, currentNode interface{}, result *Result, context *jsonContext) {
+func (v *subSchema) validateRecursive(currentSubSchema *subSchema, currentNode interface{}, result *Result, context *JsonContext) {
if internalLogEnabled {
internalLog("validateRecursive %s", context.String())
@@ -93,7 +97,7 @@ func (v *subSchema) validateRecursive(currentSubSchema *subSchema, currentNode i
// Check for null value
if currentNode == nil {
if currentSubSchema.types.IsTyped() && !currentSubSchema.types.Contains(TYPE_NULL) {
- result.addError(
+ result.addInternalError(
new(InvalidTypeError),
context,
currentNode,
@@ -114,18 +118,18 @@ func (v *subSchema) validateRecursive(currentSubSchema *subSchema, currentNode i
value := currentNode.(json.Number)
- _, isValidInt64, _ := checkJsonNumber(value)
+ isInt := checkJsonInteger(value)
- validType := currentSubSchema.types.Contains(TYPE_NUMBER) || (isValidInt64 && currentSubSchema.types.Contains(TYPE_INTEGER))
+ validType := currentSubSchema.types.Contains(TYPE_NUMBER) || (isInt && currentSubSchema.types.Contains(TYPE_INTEGER))
if currentSubSchema.types.IsTyped() && !validType {
givenType := TYPE_INTEGER
- if !isValidInt64 {
+ if !isInt {
givenType = TYPE_NUMBER
}
- result.addError(
+ result.addInternalError(
new(InvalidTypeError),
context,
currentNode,
@@ -154,7 +158,7 @@ func (v *subSchema) validateRecursive(currentSubSchema *subSchema, currentNode i
case reflect.Slice:
if currentSubSchema.types.IsTyped() && !currentSubSchema.types.Contains(TYPE_ARRAY) {
- result.addError(
+ result.addInternalError(
new(InvalidTypeError),
context,
currentNode,
@@ -177,7 +181,7 @@ func (v *subSchema) validateRecursive(currentSubSchema *subSchema, currentNode i
case reflect.Map:
if currentSubSchema.types.IsTyped() && !currentSubSchema.types.Contains(TYPE_OBJECT) {
- result.addError(
+ result.addInternalError(
new(InvalidTypeError),
context,
currentNode,
@@ -202,7 +206,7 @@ func (v *subSchema) validateRecursive(currentSubSchema *subSchema, currentNode i
for _, pSchema := range currentSubSchema.propertiesChildren {
nextNode, ok := castCurrentNode[pSchema.property]
if ok {
- subContext := newJsonContext(pSchema.property, context)
+ subContext := NewJsonContext(pSchema.property, context)
v.validateRecursive(pSchema, nextNode, result, subContext)
}
}
@@ -212,7 +216,7 @@ func (v *subSchema) validateRecursive(currentSubSchema *subSchema, currentNode i
case reflect.Bool:
if currentSubSchema.types.IsTyped() && !currentSubSchema.types.Contains(TYPE_BOOLEAN) {
- result.addError(
+ result.addInternalError(
new(InvalidTypeError),
context,
currentNode,
@@ -234,7 +238,7 @@ func (v *subSchema) validateRecursive(currentSubSchema *subSchema, currentNode i
case reflect.String:
if currentSubSchema.types.IsTyped() && !currentSubSchema.types.Contains(TYPE_STRING) {
- result.addError(
+ result.addInternalError(
new(InvalidTypeError),
context,
currentNode,
@@ -263,7 +267,7 @@ func (v *subSchema) validateRecursive(currentSubSchema *subSchema, currentNode i
}
// Different kinds of validation there, subSchema / common / array / object / string...
-func (v *subSchema) validateSchema(currentSubSchema *subSchema, currentNode interface{}, result *Result, context *jsonContext) {
+func (v *subSchema) validateSchema(currentSubSchema *subSchema, currentNode interface{}, result *Result, context *JsonContext) {
if internalLogEnabled {
internalLog("validateSchema %s", context.String())
@@ -287,7 +291,7 @@ func (v *subSchema) validateSchema(currentSubSchema *subSchema, currentNode inte
}
if !validatedAnyOf {
- result.addError(new(NumberAnyOfError), context, currentNode, ErrorDetails{})
+ result.addInternalError(new(NumberAnyOfError), context, currentNode, ErrorDetails{})
if bestValidationResult != nil {
// add error messages of closest matching subSchema as
@@ -313,7 +317,7 @@ func (v *subSchema) validateSchema(currentSubSchema *subSchema, currentNode inte
if nbValidated != 1 {
- result.addError(new(NumberOneOfError), context, currentNode, ErrorDetails{})
+ result.addInternalError(new(NumberOneOfError), context, currentNode, ErrorDetails{})
if nbValidated == 0 {
// add error messages of closest matching subSchema as
@@ -336,14 +340,14 @@ func (v *subSchema) validateSchema(currentSubSchema *subSchema, currentNode inte
}
if nbValidated != len(currentSubSchema.allOf) {
- result.addError(new(NumberAllOfError), context, currentNode, ErrorDetails{})
+ result.addInternalError(new(NumberAllOfError), context, currentNode, ErrorDetails{})
}
}
if currentSubSchema.not != nil {
validationResult := currentSubSchema.not.subValidateWithContext(currentNode, context)
if validationResult.Valid() {
- result.addError(new(NumberNotError), context, currentNode, ErrorDetails{})
+ result.addInternalError(new(NumberNotError), context, currentNode, ErrorDetails{})
}
}
@@ -356,7 +360,7 @@ func (v *subSchema) validateSchema(currentSubSchema *subSchema, currentNode inte
case []string:
for _, dependOnKey := range dependency {
if _, dependencyResolved := currentNode.(map[string]interface{})[dependOnKey]; !dependencyResolved {
- result.addError(
+ result.addInternalError(
new(MissingDependencyError),
context,
currentNode,
@@ -367,31 +371,65 @@ func (v *subSchema) validateSchema(currentSubSchema *subSchema, currentNode inte
case *subSchema:
dependency.validateRecursive(dependency, currentNode, result, context)
-
}
}
}
}
}
+ if currentSubSchema._if != nil {
+ validationResultIf := currentSubSchema._if.subValidateWithContext(currentNode, context)
+ if currentSubSchema._then != nil && validationResultIf.Valid() {
+ validationResultThen := currentSubSchema._then.subValidateWithContext(currentNode, context)
+ if !validationResultThen.Valid() {
+ result.addInternalError(new(ConditionThenError), context, currentNode, ErrorDetails{})
+ result.mergeErrors(validationResultThen)
+ }
+ }
+ if currentSubSchema._else != nil && !validationResultIf.Valid() {
+ validationResultElse := currentSubSchema._else.subValidateWithContext(currentNode, context)
+ if !validationResultElse.Valid() {
+ result.addInternalError(new(ConditionElseError), context, currentNode, ErrorDetails{})
+ result.mergeErrors(validationResultElse)
+ }
+ }
+ }
+
result.incrementScore()
}
-func (v *subSchema) validateCommon(currentSubSchema *subSchema, value interface{}, result *Result, context *jsonContext) {
+func (v *subSchema) validateCommon(currentSubSchema *subSchema, value interface{}, result *Result, context *JsonContext) {
if internalLogEnabled {
internalLog("validateCommon %s", context.String())
internalLog(" %v", value)
}
+ // const:
+ if currentSubSchema._const != nil {
+ vString, err := marshalWithoutNumber(value)
+ if err != nil {
+ result.addInternalError(new(InternalError), context, value, ErrorDetails{"error": err})
+ }
+ if *vString != *currentSubSchema._const {
+ result.addInternalError(new(ConstError),
+ context,
+ value,
+ ErrorDetails{
+ "allowed": *currentSubSchema._const,
+ },
+ )
+ }
+ }
+
// enum:
if len(currentSubSchema.enum) > 0 {
has, err := currentSubSchema.ContainsEnum(value)
if err != nil {
- result.addError(new(InternalError), context, value, ErrorDetails{"error": err})
+ result.addInternalError(new(InternalError), context, value, ErrorDetails{"error": err})
}
if !has {
- result.addError(
+ result.addInternalError(
new(EnumError),
context,
value,
@@ -405,7 +443,7 @@ func (v *subSchema) validateCommon(currentSubSchema *subSchema, value interface{
result.incrementScore()
}
-func (v *subSchema) validateArray(currentSubSchema *subSchema, value []interface{}, result *Result, context *jsonContext) {
+func (v *subSchema) validateArray(currentSubSchema *subSchema, value []interface{}, result *Result, context *JsonContext) {
if internalLogEnabled {
internalLog("validateArray %s", context.String())
@@ -417,7 +455,7 @@ func (v *subSchema) validateArray(currentSubSchema *subSchema, value []interface
// TODO explain
if currentSubSchema.itemsChildrenIsSingleSchema {
for i := range value {
- subContext := newJsonContext(strconv.Itoa(i), context)
+ subContext := NewJsonContext(strconv.Itoa(i), context)
validationResult := currentSubSchema.itemsChildren[0].subValidateWithContext(value[i], subContext)
result.mergeErrors(validationResult)
}
@@ -428,7 +466,7 @@ func (v *subSchema) validateArray(currentSubSchema *subSchema, value []interface
// while we have both schemas and values, check them against each other
for i := 0; i != nbItems && i != nbValues; i++ {
- subContext := newJsonContext(strconv.Itoa(i), context)
+ subContext := NewJsonContext(strconv.Itoa(i), context)
validationResult := currentSubSchema.itemsChildren[i].subValidateWithContext(value[i], subContext)
result.mergeErrors(validationResult)
}
@@ -440,12 +478,12 @@ func (v *subSchema) validateArray(currentSubSchema *subSchema, value []interface
switch currentSubSchema.additionalItems.(type) {
case bool:
if !currentSubSchema.additionalItems.(bool) {
- result.addError(new(ArrayNoAdditionalItemsError), context, value, ErrorDetails{})
+ result.addInternalError(new(ArrayNoAdditionalItemsError), context, value, ErrorDetails{})
}
case *subSchema:
additionalItemSchema := currentSubSchema.additionalItems.(*subSchema)
for i := nbItems; i != nbValues; i++ {
- subContext := newJsonContext(strconv.Itoa(i), context)
+ subContext := NewJsonContext(strconv.Itoa(i), context)
validationResult := additionalItemSchema.subValidateWithContext(value[i], subContext)
result.mergeErrors(validationResult)
}
@@ -457,7 +495,7 @@ func (v *subSchema) validateArray(currentSubSchema *subSchema, value []interface
// minItems & maxItems
if currentSubSchema.minItems != nil {
if nbValues < int(*currentSubSchema.minItems) {
- result.addError(
+ result.addInternalError(
new(ArrayMinItemsError),
context,
value,
@@ -467,7 +505,7 @@ func (v *subSchema) validateArray(currentSubSchema *subSchema, value []interface
}
if currentSubSchema.maxItems != nil {
if nbValues > int(*currentSubSchema.maxItems) {
- result.addError(
+ result.addInternalError(
new(ArrayMaxItemsError),
context,
value,
@@ -479,27 +517,59 @@ func (v *subSchema) validateArray(currentSubSchema *subSchema, value []interface
// uniqueItems:
if currentSubSchema.uniqueItems {
var stringifiedItems []string
- for _, v := range value {
- vString, err := marshalToJsonString(v)
+ for j, v := range value {
+ vString, err := marshalWithoutNumber(v)
if err != nil {
- result.addError(new(InternalError), context, value, ErrorDetails{"err": err})
+ result.addInternalError(new(InternalError), context, value, ErrorDetails{"err": err})
}
- if isStringInSlice(stringifiedItems, *vString) {
- result.addError(
+ if i := indexStringInSlice(stringifiedItems, *vString); i > -1 {
+ result.addInternalError(
new(ItemsMustBeUniqueError),
context,
value,
- ErrorDetails{"type": TYPE_ARRAY},
+ ErrorDetails{"type": TYPE_ARRAY, "i": i, "j": j},
)
}
stringifiedItems = append(stringifiedItems, *vString)
}
}
+ // contains:
+
+ if currentSubSchema.contains != nil {
+ validatedOne := false
+ var bestValidationResult *Result
+
+ for i, v := range value {
+ subContext := NewJsonContext(strconv.Itoa(i), context)
+
+ validationResult := currentSubSchema.contains.subValidateWithContext(v, subContext)
+ if validationResult.Valid() {
+ validatedOne = true
+ break
+ } else {
+ if bestValidationResult == nil || validationResult.score > bestValidationResult.score {
+ bestValidationResult = validationResult
+ }
+ }
+ }
+ if !validatedOne {
+ result.addInternalError(
+ new(ArrayContainsError),
+ context,
+ value,
+ ErrorDetails{},
+ )
+ if bestValidationResult != nil {
+ result.mergeErrors(bestValidationResult)
+ }
+ }
+ }
+
result.incrementScore()
}
-func (v *subSchema) validateObject(currentSubSchema *subSchema, value map[string]interface{}, result *Result, context *jsonContext) {
+func (v *subSchema) validateObject(currentSubSchema *subSchema, value map[string]interface{}, result *Result, context *JsonContext) {
if internalLogEnabled {
internalLog("validateObject %s", context.String())
@@ -509,7 +579,7 @@ func (v *subSchema) validateObject(currentSubSchema *subSchema, value map[string
// minProperties & maxProperties:
if currentSubSchema.minProperties != nil {
if len(value) < int(*currentSubSchema.minProperties) {
- result.addError(
+ result.addInternalError(
new(ArrayMinPropertiesError),
context,
value,
@@ -519,7 +589,7 @@ func (v *subSchema) validateObject(currentSubSchema *subSchema, value map[string
}
if currentSubSchema.maxProperties != nil {
if len(value) > int(*currentSubSchema.maxProperties) {
- result.addError(
+ result.addInternalError(
new(ArrayMaxPropertiesError),
context,
value,
@@ -534,7 +604,7 @@ func (v *subSchema) validateObject(currentSubSchema *subSchema, value map[string
if ok {
result.incrementScore()
} else {
- result.addError(
+ result.addInternalError(
new(RequiredError),
context,
value,
@@ -565,7 +635,7 @@ func (v *subSchema) validateObject(currentSubSchema *subSchema, value map[string
if found {
if pp_has && !pp_match {
- result.addError(
+ result.addInternalError(
new(AdditionalPropertyNotAllowedError),
context,
value[pk],
@@ -576,7 +646,7 @@ func (v *subSchema) validateObject(currentSubSchema *subSchema, value map[string
} else {
if !pp_has || !pp_match {
- result.addError(
+ result.addInternalError(
new(AdditionalPropertyNotAllowedError),
context,
value[pk],
@@ -628,7 +698,7 @@ func (v *subSchema) validateObject(currentSubSchema *subSchema, value map[string
if pp_has && !pp_match {
- result.addError(
+ result.addInternalError(
new(InvalidPropertyPatternError),
context,
value[pk],
@@ -642,10 +712,25 @@ func (v *subSchema) validateObject(currentSubSchema *subSchema, value map[string
}
}
+ // propertyNames:
+ if currentSubSchema.propertyNames != nil {
+ for pk := range value {
+ validationResult := currentSubSchema.propertyNames.subValidateWithContext(pk, context)
+ if !validationResult.Valid() {
+ result.addInternalError(new(InvalidPropertyNameError),
+ context,
+ value, ErrorDetails{
+ "property": pk,
+ })
+ result.mergeErrors(validationResult)
+ }
+ }
+ }
+
result.incrementScore()
}
-func (v *subSchema) validatePatternProperty(currentSubSchema *subSchema, key string, value interface{}, result *Result, context *jsonContext) (has bool, matched bool) {
+func (v *subSchema) validatePatternProperty(currentSubSchema *subSchema, key string, value interface{}, result *Result, context *JsonContext) (has bool, matched bool) {
if internalLogEnabled {
internalLog("validatePatternProperty %s", context.String())
@@ -659,12 +744,10 @@ func (v *subSchema) validatePatternProperty(currentSubSchema *subSchema, key str
for pk, pv := range currentSubSchema.patternProperties {
if matches, _ := regexp.MatchString(pk, key); matches {
has = true
- subContext := newJsonContext(key, context)
+ subContext := NewJsonContext(key, context)
validationResult := pv.subValidateWithContext(value, subContext)
result.mergeErrors(validationResult)
- if validationResult.Valid() {
- validatedkey = true
- }
+ validatedkey = true
}
}
@@ -677,7 +760,7 @@ func (v *subSchema) validatePatternProperty(currentSubSchema *subSchema, key str
return has, true
}
-func (v *subSchema) validateString(currentSubSchema *subSchema, value interface{}, result *Result, context *jsonContext) {
+func (v *subSchema) validateString(currentSubSchema *subSchema, value interface{}, result *Result, context *JsonContext) {
// Ignore JSON numbers
if isJsonNumber(value) {
@@ -699,7 +782,7 @@ func (v *subSchema) validateString(currentSubSchema *subSchema, value interface{
// minLength & maxLength:
if currentSubSchema.minLength != nil {
if utf8.RuneCount([]byte(stringValue)) < int(*currentSubSchema.minLength) {
- result.addError(
+ result.addInternalError(
new(StringLengthGTEError),
context,
value,
@@ -709,7 +792,7 @@ func (v *subSchema) validateString(currentSubSchema *subSchema, value interface{
}
if currentSubSchema.maxLength != nil {
if utf8.RuneCount([]byte(stringValue)) > int(*currentSubSchema.maxLength) {
- result.addError(
+ result.addInternalError(
new(StringLengthLTEError),
context,
value,
@@ -721,7 +804,7 @@ func (v *subSchema) validateString(currentSubSchema *subSchema, value interface{
// pattern:
if currentSubSchema.pattern != nil {
if !currentSubSchema.pattern.MatchString(stringValue) {
- result.addError(
+ result.addInternalError(
new(DoesNotMatchPatternError),
context,
value,
@@ -734,7 +817,7 @@ func (v *subSchema) validateString(currentSubSchema *subSchema, value interface{
// format
if currentSubSchema.format != "" {
if !FormatCheckers.IsFormat(currentSubSchema.format, stringValue) {
- result.addError(
+ result.addInternalError(
new(DoesNotMatchFormatError),
context,
value,
@@ -746,7 +829,7 @@ func (v *subSchema) validateString(currentSubSchema *subSchema, value interface{
result.incrementScore()
}
-func (v *subSchema) validateNumber(currentSubSchema *subSchema, value interface{}, result *Result, context *jsonContext) {
+func (v *subSchema) validateNumber(currentSubSchema *subSchema, value interface{}, result *Result, context *JsonContext) {
// Ignore non numbers
if !isJsonNumber(value) {
@@ -759,79 +842,77 @@ func (v *subSchema) validateNumber(currentSubSchema *subSchema, value interface{
}
number := value.(json.Number)
- float64Value, _ := number.Float64()
+ float64Value, _ := new(big.Rat).SetString(string(number))
// multipleOf:
if currentSubSchema.multipleOf != nil {
-
- if !isFloat64AnInteger(float64Value / *currentSubSchema.multipleOf) {
- result.addError(
+ if q := new(big.Rat).Quo(float64Value, currentSubSchema.multipleOf); !q.IsInt() {
+ result.addInternalError(
new(MultipleOfError),
context,
resultErrorFormatJsonNumber(number),
- ErrorDetails{"multiple": *currentSubSchema.multipleOf},
+ ErrorDetails{"multiple": new(big.Float).SetRat(currentSubSchema.multipleOf)},
)
}
}
//maximum & exclusiveMaximum:
if currentSubSchema.maximum != nil {
- if currentSubSchema.exclusiveMaximum {
- if float64Value >= *currentSubSchema.maximum {
- result.addError(
- new(NumberLTError),
- context,
- resultErrorFormatJsonNumber(number),
- ErrorDetails{
- "max": resultErrorFormatNumber(*currentSubSchema.maximum),
- },
- )
- }
- } else {
- if float64Value > *currentSubSchema.maximum {
- result.addError(
- new(NumberLTEError),
- context,
- resultErrorFormatJsonNumber(number),
- ErrorDetails{
- "max": resultErrorFormatNumber(*currentSubSchema.maximum),
- },
- )
- }
+ if float64Value.Cmp(currentSubSchema.maximum) == 1 {
+ result.addInternalError(
+ new(NumberLTEError),
+ context,
+ resultErrorFormatJsonNumber(number),
+ ErrorDetails{
+ "max": currentSubSchema.maximum,
+ },
+ )
+ }
+ }
+ if currentSubSchema.exclusiveMaximum != nil {
+ if float64Value.Cmp(currentSubSchema.exclusiveMaximum) >= 0 {
+ result.addInternalError(
+ new(NumberLTError),
+ context,
+ resultErrorFormatJsonNumber(number),
+ ErrorDetails{
+ "max": currentSubSchema.exclusiveMaximum,
+ },
+ )
}
}
//minimum & exclusiveMinimum:
if currentSubSchema.minimum != nil {
- if currentSubSchema.exclusiveMinimum {
- if float64Value <= *currentSubSchema.minimum {
- result.addError(
- new(NumberGTError),
- context,
- resultErrorFormatJsonNumber(number),
- ErrorDetails{
- "min": resultErrorFormatNumber(*currentSubSchema.minimum),
- },
- )
- }
- } else {
- if float64Value < *currentSubSchema.minimum {
- result.addError(
- new(NumberGTEError),
- context,
- resultErrorFormatJsonNumber(number),
- ErrorDetails{
- "min": resultErrorFormatNumber(*currentSubSchema.minimum),
- },
- )
- }
+ if float64Value.Cmp(currentSubSchema.minimum) == -1 {
+ result.addInternalError(
+ new(NumberGTEError),
+ context,
+ resultErrorFormatJsonNumber(number),
+ ErrorDetails{
+ "min": currentSubSchema.minimum,
+ },
+ )
+ }
+ }
+ if currentSubSchema.exclusiveMinimum != nil {
+ if float64Value.Cmp(currentSubSchema.exclusiveMinimum) <= 0 {
+ // if float64Value <= *currentSubSchema.minimum {
+ result.addInternalError(
+ new(NumberGTError),
+ context,
+ resultErrorFormatJsonNumber(number),
+ ErrorDetails{
+ "min": currentSubSchema.exclusiveMinimum,
+ },
+ )
}
}
// format
if currentSubSchema.format != "" {
if !FormatCheckers.IsFormat(currentSubSchema.format, float64Value) {
- result.addError(
+ result.addInternalError(
new(DoesNotMatchFormatError),
context,
value,
diff --git a/vendor/golang.org/x/crypto/curve25519/curve25519.go b/vendor/golang.org/x/crypto/curve25519/curve25519.go
index 2d14c2a78..cb8fbc57b 100644
--- a/vendor/golang.org/x/crypto/curve25519/curve25519.go
+++ b/vendor/golang.org/x/crypto/curve25519/curve25519.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// We have a implementation in amd64 assembly so this code is only run on
+// We have an implementation in amd64 assembly so this code is only run on
// non-amd64 platforms. The amd64 assembly does not support gccgo.
// +build !amd64 gccgo appengine
diff --git a/vendor/golang.org/x/crypto/openpgp/keys.go b/vendor/golang.org/x/crypto/openpgp/keys.go
index 68b14c6ae..3e2518600 100644
--- a/vendor/golang.org/x/crypto/openpgp/keys.go
+++ b/vendor/golang.org/x/crypto/openpgp/keys.go
@@ -325,16 +325,14 @@ func ReadEntity(packets *packet.Reader) (*Entity, error) {
if e.PrivateKey, ok = p.(*packet.PrivateKey); !ok {
packets.Unread(p)
return nil, errors.StructuralError("first packet was not a public/private key")
- } else {
- e.PrimaryKey = &e.PrivateKey.PublicKey
}
+ e.PrimaryKey = &e.PrivateKey.PublicKey
}
if !e.PrimaryKey.PubKeyAlgo.CanSign() {
return nil, errors.StructuralError("primary key cannot be used for signatures")
}
- var current *Identity
var revocations []*packet.Signature
EachPacket:
for {
@@ -347,32 +345,8 @@ EachPacket:
switch pkt := p.(type) {
case *packet.UserId:
- current = new(Identity)
- current.Name = pkt.Id
- current.UserId = pkt
- e.Identities[pkt.Id] = current
-
- for {
- p, err = packets.Next()
- if err == io.EOF {
- return nil, io.ErrUnexpectedEOF
- } else if err != nil {
- return nil, err
- }
-
- sig, ok := p.(*packet.Signature)
- if !ok {
- return nil, errors.StructuralError("user ID packet not followed by self-signature")
- }
-
- if (sig.SigType == packet.SigTypePositiveCert || sig.SigType == packet.SigTypeGenericCert) && sig.IssuerKeyId != nil && *sig.IssuerKeyId == e.PrimaryKey.KeyId {
- if err = e.PrimaryKey.VerifyUserIdSignature(pkt.Id, e.PrimaryKey, sig); err != nil {
- return nil, errors.StructuralError("user ID self-signature invalid: " + err.Error())
- }
- current.SelfSignature = sig
- break
- }
- current.Signatures = append(current.Signatures, sig)
+ if err := addUserID(e, packets, pkt); err != nil {
+ return nil, err
}
case *packet.Signature:
if pkt.SigType == packet.SigTypeKeyRevocation {
@@ -381,11 +355,9 @@ EachPacket:
// TODO: RFC4880 5.2.1 permits signatures
// directly on keys (eg. to bind additional
// revocation keys).
- } else if current == nil {
- return nil, errors.StructuralError("signature packet found before user id packet")
- } else {
- current.Signatures = append(current.Signatures, pkt)
}
+ // Else, ignoring the signature as it does not follow anything
+ // we would know to attach it to.
case *packet.PrivateKey:
if pkt.IsSubkey == false {
packets.Unread(p)
@@ -426,33 +398,105 @@ EachPacket:
return e, nil
}
+func addUserID(e *Entity, packets *packet.Reader, pkt *packet.UserId) error {
+ // Make a new Identity object, that we might wind up throwing away.
+ // We'll only add it if we get a valid self-signature over this
+ // userID.
+ identity := new(Identity)
+ identity.Name = pkt.Id
+ identity.UserId = pkt
+
+ for {
+ p, err := packets.Next()
+ if err == io.EOF {
+ break
+ } else if err != nil {
+ return err
+ }
+
+ sig, ok := p.(*packet.Signature)
+ if !ok {
+ packets.Unread(p)
+ break
+ }
+
+ if (sig.SigType == packet.SigTypePositiveCert || sig.SigType == packet.SigTypeGenericCert) && sig.IssuerKeyId != nil && *sig.IssuerKeyId == e.PrimaryKey.KeyId {
+ if err = e.PrimaryKey.VerifyUserIdSignature(pkt.Id, e.PrimaryKey, sig); err != nil {
+ return errors.StructuralError("user ID self-signature invalid: " + err.Error())
+ }
+ identity.SelfSignature = sig
+ e.Identities[pkt.Id] = identity
+ } else {
+ identity.Signatures = append(identity.Signatures, sig)
+ }
+ }
+
+ return nil
+}
+
func addSubkey(e *Entity, packets *packet.Reader, pub *packet.PublicKey, priv *packet.PrivateKey) error {
var subKey Subkey
subKey.PublicKey = pub
subKey.PrivateKey = priv
- p, err := packets.Next()
- if err == io.EOF {
- return io.ErrUnexpectedEOF
- }
- if err != nil {
- return errors.StructuralError("subkey signature invalid: " + err.Error())
+
+ for {
+ p, err := packets.Next()
+ if err == io.EOF {
+ break
+ } else if err != nil {
+ return errors.StructuralError("subkey signature invalid: " + err.Error())
+ }
+
+ sig, ok := p.(*packet.Signature)
+ if !ok {
+ packets.Unread(p)
+ break
+ }
+
+ if sig.SigType != packet.SigTypeSubkeyBinding && sig.SigType != packet.SigTypeSubkeyRevocation {
+ return errors.StructuralError("subkey signature with wrong type")
+ }
+
+ if err := e.PrimaryKey.VerifyKeySignature(subKey.PublicKey, sig); err != nil {
+ return errors.StructuralError("subkey signature invalid: " + err.Error())
+ }
+
+ switch sig.SigType {
+ case packet.SigTypeSubkeyRevocation:
+ subKey.Sig = sig
+ case packet.SigTypeSubkeyBinding:
+
+ if shouldReplaceSubkeySig(subKey.Sig, sig) {
+ subKey.Sig = sig
+ }
+ }
}
- var ok bool
- subKey.Sig, ok = p.(*packet.Signature)
- if !ok {
+
+ if subKey.Sig == nil {
return errors.StructuralError("subkey packet not followed by signature")
}
- if subKey.Sig.SigType != packet.SigTypeSubkeyBinding && subKey.Sig.SigType != packet.SigTypeSubkeyRevocation {
- return errors.StructuralError("subkey signature with wrong type")
- }
- err = e.PrimaryKey.VerifyKeySignature(subKey.PublicKey, subKey.Sig)
- if err != nil {
- return errors.StructuralError("subkey signature invalid: " + err.Error())
- }
+
e.Subkeys = append(e.Subkeys, subKey)
+
return nil
}
+func shouldReplaceSubkeySig(existingSig, potentialNewSig *packet.Signature) bool {
+ if potentialNewSig == nil {
+ return false
+ }
+
+ if existingSig == nil {
+ return true
+ }
+
+ if existingSig.SigType == packet.SigTypeSubkeyRevocation {
+ return false // never override a revocation signature
+ }
+
+ return potentialNewSig.CreationTime.After(existingSig.CreationTime)
+}
+
const defaultRSAKeyBits = 2048
// NewEntity returns an Entity that contains a fresh RSA/RSA keypair with a
@@ -487,7 +531,7 @@ func NewEntity(name, comment, email string, config *packet.Config) (*Entity, err
}
isPrimaryId := true
e.Identities[uid.Id] = &Identity{
- Name: uid.Name,
+ Name: uid.Id,
UserId: uid,
SelfSignature: &packet.Signature{
CreationTime: currentTime,
@@ -501,6 +545,10 @@ func NewEntity(name, comment, email string, config *packet.Config) (*Entity, err
IssuerKeyId: &e.PrimaryKey.KeyId,
},
}
+ err = e.Identities[uid.Id].SelfSignature.SignUserId(uid.Id, e.PrimaryKey, e.PrivateKey, config)
+ if err != nil {
+ return nil, err
+ }
// If the user passes in a DefaultHash via packet.Config,
// set the PreferredHash for the SelfSignature.
@@ -508,6 +556,11 @@ func NewEntity(name, comment, email string, config *packet.Config) (*Entity, err
e.Identities[uid.Id].SelfSignature.PreferredHash = []uint8{hashToHashId(config.DefaultHash)}
}
+ // Likewise for DefaultCipher.
+ if config != nil && config.DefaultCipher != 0 {
+ e.Identities[uid.Id].SelfSignature.PreferredSymmetric = []uint8{uint8(config.DefaultCipher)}
+ }
+
e.Subkeys = make([]Subkey, 1)
e.Subkeys[0] = Subkey{
PublicKey: packet.NewRSAPublicKey(currentTime, &encryptingPriv.PublicKey),
@@ -525,13 +578,16 @@ func NewEntity(name, comment, email string, config *packet.Config) (*Entity, err
}
e.Subkeys[0].PublicKey.IsSubkey = true
e.Subkeys[0].PrivateKey.IsSubkey = true
-
+ err = e.Subkeys[0].Sig.SignKey(e.Subkeys[0].PublicKey, e.PrivateKey, config)
+ if err != nil {
+ return nil, err
+ }
return e, nil
}
-// SerializePrivate serializes an Entity, including private key material, to
-// the given Writer. For now, it must only be used on an Entity returned from
-// NewEntity.
+// SerializePrivate serializes an Entity, including private key material, but
+// excluding signatures from other entities, to the given Writer.
+// Identities and subkeys are re-signed in case they changed since NewEntry.
// If config is nil, sensible defaults will be used.
func (e *Entity) SerializePrivate(w io.Writer, config *packet.Config) (err error) {
err = e.PrivateKey.Serialize(w)
@@ -569,8 +625,8 @@ func (e *Entity) SerializePrivate(w io.Writer, config *packet.Config) (err error
return nil
}
-// Serialize writes the public part of the given Entity to w. (No private
-// key material will be output).
+// Serialize writes the public part of the given Entity to w, including
+// signatures from other entities. No private key material will be output.
func (e *Entity) Serialize(w io.Writer) error {
err := e.PrimaryKey.Serialize(w)
if err != nil {
diff --git a/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go b/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go
index 266840d05..02b372cf3 100644
--- a/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go
+++ b/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go
@@ -42,12 +42,18 @@ func (e *EncryptedKey) parse(r io.Reader) (err error) {
switch e.Algo {
case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly:
e.encryptedMPI1.bytes, e.encryptedMPI1.bitLength, err = readMPI(r)
+ if err != nil {
+ return
+ }
case PubKeyAlgoElGamal:
e.encryptedMPI1.bytes, e.encryptedMPI1.bitLength, err = readMPI(r)
if err != nil {
return
}
e.encryptedMPI2.bytes, e.encryptedMPI2.bitLength, err = readMPI(r)
+ if err != nil {
+ return
+ }
}
_, err = consumeAll(r)
return
@@ -72,7 +78,8 @@ func (e *EncryptedKey) Decrypt(priv *PrivateKey, config *Config) error {
// padding oracle attacks.
switch priv.PubKeyAlgo {
case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly:
- b, err = rsa.DecryptPKCS1v15(config.Random(), priv.PrivateKey.(*rsa.PrivateKey), e.encryptedMPI1.bytes)
+ k := priv.PrivateKey.(*rsa.PrivateKey)
+ b, err = rsa.DecryptPKCS1v15(config.Random(), k, padToKeySize(&k.PublicKey, e.encryptedMPI1.bytes))
case PubKeyAlgoElGamal:
c1 := new(big.Int).SetBytes(e.encryptedMPI1.bytes)
c2 := new(big.Int).SetBytes(e.encryptedMPI2.bytes)
diff --git a/vendor/golang.org/x/crypto/openpgp/packet/packet.go b/vendor/golang.org/x/crypto/openpgp/packet/packet.go
index 3eded93f0..5af64c542 100644
--- a/vendor/golang.org/x/crypto/openpgp/packet/packet.go
+++ b/vendor/golang.org/x/crypto/openpgp/packet/packet.go
@@ -11,10 +11,12 @@ import (
"crypto/aes"
"crypto/cipher"
"crypto/des"
- "golang.org/x/crypto/cast5"
- "golang.org/x/crypto/openpgp/errors"
+ "crypto/rsa"
"io"
"math/big"
+
+ "golang.org/x/crypto/cast5"
+ "golang.org/x/crypto/openpgp/errors"
)
// readFull is the same as io.ReadFull except that reading zero bytes returns
@@ -402,14 +404,16 @@ const (
type PublicKeyAlgorithm uint8
const (
- PubKeyAlgoRSA PublicKeyAlgorithm = 1
- PubKeyAlgoRSAEncryptOnly PublicKeyAlgorithm = 2
- PubKeyAlgoRSASignOnly PublicKeyAlgorithm = 3
- PubKeyAlgoElGamal PublicKeyAlgorithm = 16
- PubKeyAlgoDSA PublicKeyAlgorithm = 17
+ PubKeyAlgoRSA PublicKeyAlgorithm = 1
+ PubKeyAlgoElGamal PublicKeyAlgorithm = 16
+ PubKeyAlgoDSA PublicKeyAlgorithm = 17
// RFC 6637, Section 5.
PubKeyAlgoECDH PublicKeyAlgorithm = 18
PubKeyAlgoECDSA PublicKeyAlgorithm = 19
+
+ // Deprecated in RFC 4880, Section 13.5. Use key flags instead.
+ PubKeyAlgoRSAEncryptOnly PublicKeyAlgorithm = 2
+ PubKeyAlgoRSASignOnly PublicKeyAlgorithm = 3
)
// CanEncrypt returns true if it's possible to encrypt a message to a public
@@ -500,19 +504,17 @@ func readMPI(r io.Reader) (mpi []byte, bitLength uint16, err error) {
numBytes := (int(bitLength) + 7) / 8
mpi = make([]byte, numBytes)
_, err = readFull(r, mpi)
- return
-}
-
-// mpiLength returns the length of the given *big.Int when serialized as an
-// MPI.
-func mpiLength(n *big.Int) (mpiLengthInBytes int) {
- mpiLengthInBytes = 2 /* MPI length */
- mpiLengthInBytes += (n.BitLen() + 7) / 8
+ // According to RFC 4880 3.2. we should check that the MPI has no leading
+ // zeroes (at least when not an encrypted MPI?), but this implementation
+ // does generate leading zeroes, so we keep accepting them.
return
}
// writeMPI serializes a big integer to w.
func writeMPI(w io.Writer, bitLength uint16, mpiBytes []byte) (err error) {
+ // Note that we can produce leading zeroes, in violation of RFC 4880 3.2.
+ // Implementations seem to be tolerant of them, and stripping them would
+ // make it complex to guarantee matching re-serialization.
_, err = w.Write([]byte{byte(bitLength >> 8), byte(bitLength)})
if err == nil {
_, err = w.Write(mpiBytes)
@@ -525,6 +527,18 @@ func writeBig(w io.Writer, i *big.Int) error {
return writeMPI(w, uint16(i.BitLen()), i.Bytes())
}
+// padToKeySize left-pads a MPI with zeroes to match the length of the
+// specified RSA public.
+func padToKeySize(pub *rsa.PublicKey, b []byte) []byte {
+ k := (pub.N.BitLen() + 7) / 8
+ if len(b) >= k {
+ return b
+ }
+ bb := make([]byte, k)
+ copy(bb[len(bb)-len(b):], b)
+ return bb
+}
+
// CompressionAlgo Represents the different compression algorithms
// supported by OpenPGP (except for BZIP2, which is not currently
// supported). See Section 9.3 of RFC 4880.
diff --git a/vendor/golang.org/x/crypto/openpgp/packet/private_key.go b/vendor/golang.org/x/crypto/openpgp/packet/private_key.go
index 34734cc63..bd31cceac 100644
--- a/vendor/golang.org/x/crypto/openpgp/packet/private_key.go
+++ b/vendor/golang.org/x/crypto/openpgp/packet/private_key.go
@@ -64,14 +64,19 @@ func NewECDSAPrivateKey(currentTime time.Time, priv *ecdsa.PrivateKey) *PrivateK
return pk
}
-// NewSignerPrivateKey creates a sign-only PrivateKey from a crypto.Signer that
+// NewSignerPrivateKey creates a PrivateKey from a crypto.Signer that
// implements RSA or ECDSA.
func NewSignerPrivateKey(currentTime time.Time, signer crypto.Signer) *PrivateKey {
pk := new(PrivateKey)
+ // In general, the public Keys should be used as pointers. We still
+ // type-switch on the values, for backwards-compatibility.
switch pubkey := signer.Public().(type) {
+ case *rsa.PublicKey:
+ pk.PublicKey = *NewRSAPublicKey(currentTime, pubkey)
case rsa.PublicKey:
pk.PublicKey = *NewRSAPublicKey(currentTime, &pubkey)
- pk.PubKeyAlgo = PubKeyAlgoRSASignOnly
+ case *ecdsa.PublicKey:
+ pk.PublicKey = *NewECDSAPublicKey(currentTime, pubkey)
case ecdsa.PublicKey:
pk.PublicKey = *NewECDSAPublicKey(currentTime, &pubkey)
default:
diff --git a/vendor/golang.org/x/crypto/openpgp/packet/public_key.go b/vendor/golang.org/x/crypto/openpgp/packet/public_key.go
index ead26233d..fcd5f5251 100644
--- a/vendor/golang.org/x/crypto/openpgp/packet/public_key.go
+++ b/vendor/golang.org/x/crypto/openpgp/packet/public_key.go
@@ -244,7 +244,12 @@ func NewECDSAPublicKey(creationTime time.Time, pub *ecdsa.PublicKey) *PublicKey
}
pk.ec.p.bytes = elliptic.Marshal(pub.Curve, pub.X, pub.Y)
- pk.ec.p.bitLength = uint16(8 * len(pk.ec.p.bytes))
+
+ // The bit length is 3 (for the 0x04 specifying an uncompressed key)
+ // plus two field elements (for x and y), which are rounded up to the
+ // nearest byte. See https://tools.ietf.org/html/rfc6637#section-6
+ fieldBytes := (pub.Curve.Params().BitSize + 7) & ^7
+ pk.ec.p.bitLength = uint16(3 + fieldBytes + fieldBytes)
pk.setFingerPrintAndKeyId()
return pk
@@ -515,7 +520,7 @@ func (pk *PublicKey) VerifySignature(signed hash.Hash, sig *Signature) (err erro
switch pk.PubKeyAlgo {
case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
rsaPublicKey, _ := pk.PublicKey.(*rsa.PublicKey)
- err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, sig.RSASignature.bytes)
+ err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, padToKeySize(rsaPublicKey, sig.RSASignature.bytes))
if err != nil {
return errors.SignatureError("RSA verification failure")
}
@@ -566,7 +571,7 @@ func (pk *PublicKey) VerifySignatureV3(signed hash.Hash, sig *SignatureV3) (err
switch pk.PubKeyAlgo {
case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:
rsaPublicKey := pk.PublicKey.(*rsa.PublicKey)
- if err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, sig.RSASignature.bytes); err != nil {
+ if err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, padToKeySize(rsaPublicKey, sig.RSASignature.bytes)); err != nil {
return errors.SignatureError("RSA verification failure")
}
return
diff --git a/vendor/golang.org/x/crypto/openpgp/packet/signature.go b/vendor/golang.org/x/crypto/openpgp/packet/signature.go
index 6ce0cbedb..b2a24a532 100644
--- a/vendor/golang.org/x/crypto/openpgp/packet/signature.go
+++ b/vendor/golang.org/x/crypto/openpgp/packet/signature.go
@@ -542,7 +542,7 @@ func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err e
r, s, err = ecdsa.Sign(config.Random(), pk, digest)
} else {
var b []byte
- b, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, nil)
+ b, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, sig.Hash)
if err == nil {
r, s, err = unwrapECDSASig(b)
}
diff --git a/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go b/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go
index 96a2b382a..d19ffbc78 100644
--- a/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go
+++ b/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go
@@ -80,7 +80,7 @@ func (uat *UserAttribute) Serialize(w io.Writer) (err error) {
// ImageData returns zero or more byte slices, each containing
// JPEG File Interchange Format (JFIF), for each photo in the
-// the user attribute packet.
+// user attribute packet.
func (uat *UserAttribute) ImageData() (imageData [][]byte) {
for _, sp := range uat.Contents {
if sp.SubType == UserAttrImageSubpacket && len(sp.Contents) > 16 {
diff --git a/vendor/golang.org/x/crypto/openpgp/write.go b/vendor/golang.org/x/crypto/openpgp/write.go
index 65a304cc8..4ee71784e 100644
--- a/vendor/golang.org/x/crypto/openpgp/write.go
+++ b/vendor/golang.org/x/crypto/openpgp/write.go
@@ -164,12 +164,12 @@ func hashToHashId(h crypto.Hash) uint8 {
return v
}
-// Encrypt encrypts a message to a number of recipients and, optionally, signs
-// it. hints contains optional information, that is also encrypted, that aids
-// the recipients in processing the message. The resulting WriteCloser must
-// be closed after the contents of the file have been written.
-// If config is nil, sensible defaults will be used.
-func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) {
+// writeAndSign writes the data as a payload package and, optionally, signs
+// it. hints contains optional information, that is also encrypted,
+// that aids the recipients in processing the message. The resulting
+// WriteCloser must be closed after the contents of the file have been
+// written. If config is nil, sensible defaults will be used.
+func writeAndSign(payload io.WriteCloser, candidateHashes []uint8, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) {
var signer *packet.PrivateKey
if signed != nil {
signKey, ok := signed.signingKey(config.Now())
@@ -185,6 +185,83 @@ func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHint
}
}
+ var hash crypto.Hash
+ for _, hashId := range candidateHashes {
+ if h, ok := s2k.HashIdToHash(hashId); ok && h.Available() {
+ hash = h
+ break
+ }
+ }
+
+ // If the hash specified by config is a candidate, we'll use that.
+ if configuredHash := config.Hash(); configuredHash.Available() {
+ for _, hashId := range candidateHashes {
+ if h, ok := s2k.HashIdToHash(hashId); ok && h == configuredHash {
+ hash = h
+ break
+ }
+ }
+ }
+
+ if hash == 0 {
+ hashId := candidateHashes[0]
+ name, ok := s2k.HashIdToString(hashId)
+ if !ok {
+ name = "#" + strconv.Itoa(int(hashId))
+ }
+ return nil, errors.InvalidArgumentError("cannot encrypt because no candidate hash functions are compiled in. (Wanted " + name + " in this case.)")
+ }
+
+ if signer != nil {
+ ops := &packet.OnePassSignature{
+ SigType: packet.SigTypeBinary,
+ Hash: hash,
+ PubKeyAlgo: signer.PubKeyAlgo,
+ KeyId: signer.KeyId,
+ IsLast: true,
+ }
+ if err := ops.Serialize(payload); err != nil {
+ return nil, err
+ }
+ }
+
+ if hints == nil {
+ hints = &FileHints{}
+ }
+
+ w := payload
+ if signer != nil {
+ // If we need to write a signature packet after the literal
+ // data then we need to stop literalData from closing
+ // encryptedData.
+ w = noOpCloser{w}
+
+ }
+ var epochSeconds uint32
+ if !hints.ModTime.IsZero() {
+ epochSeconds = uint32(hints.ModTime.Unix())
+ }
+ literalData, err := packet.SerializeLiteral(w, hints.IsBinary, hints.FileName, epochSeconds)
+ if err != nil {
+ return nil, err
+ }
+
+ if signer != nil {
+ return signatureWriter{payload, literalData, hash, hash.New(), signer, config}, nil
+ }
+ return literalData, nil
+}
+
+// Encrypt encrypts a message to a number of recipients and, optionally, signs
+// it. hints contains optional information, that is also encrypted, that aids
+// the recipients in processing the message. The resulting WriteCloser must
+// be closed after the contents of the file have been written.
+// If config is nil, sensible defaults will be used.
+func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) {
+ if len(to) == 0 {
+ return nil, errors.InvalidArgumentError("no encryption recipient provided")
+ }
+
// These are the possible ciphers that we'll use for the message.
candidateCiphers := []uint8{
uint8(packet.CipherAES128),
@@ -194,6 +271,7 @@ func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHint
// These are the possible hash functions that we'll use for the signature.
candidateHashes := []uint8{
hashToHashId(crypto.SHA256),
+ hashToHashId(crypto.SHA384),
hashToHashId(crypto.SHA512),
hashToHashId(crypto.SHA1),
hashToHashId(crypto.RIPEMD160),
@@ -241,33 +319,6 @@ func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHint
}
}
- var hash crypto.Hash
- for _, hashId := range candidateHashes {
- if h, ok := s2k.HashIdToHash(hashId); ok && h.Available() {
- hash = h
- break
- }
- }
-
- // If the hash specified by config is a candidate, we'll use that.
- if configuredHash := config.Hash(); configuredHash.Available() {
- for _, hashId := range candidateHashes {
- if h, ok := s2k.HashIdToHash(hashId); ok && h == configuredHash {
- hash = h
- break
- }
- }
- }
-
- if hash == 0 {
- hashId := candidateHashes[0]
- name, ok := s2k.HashIdToString(hashId)
- if !ok {
- name = "#" + strconv.Itoa(int(hashId))
- }
- return nil, errors.InvalidArgumentError("cannot encrypt because no candidate hash functions are compiled in. (Wanted " + name + " in this case.)")
- }
-
symKey := make([]byte, cipher.KeySize())
if _, err := io.ReadFull(config.Random(), symKey); err != nil {
return nil, err
@@ -279,49 +330,38 @@ func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHint
}
}
- encryptedData, err := packet.SerializeSymmetricallyEncrypted(ciphertext, cipher, symKey, config)
+ payload, err := packet.SerializeSymmetricallyEncrypted(ciphertext, cipher, symKey, config)
if err != nil {
return
}
- if signer != nil {
- ops := &packet.OnePassSignature{
- SigType: packet.SigTypeBinary,
- Hash: hash,
- PubKeyAlgo: signer.PubKeyAlgo,
- KeyId: signer.KeyId,
- IsLast: true,
- }
- if err := ops.Serialize(encryptedData); err != nil {
- return nil, err
- }
- }
+ return writeAndSign(payload, candidateHashes, signed, hints, config)
+}
- if hints == nil {
- hints = &FileHints{}
+// Sign signs a message. The resulting WriteCloser must be closed after the
+// contents of the file have been written. hints contains optional information
+// that aids the recipients in processing the message.
+// If config is nil, sensible defaults will be used.
+func Sign(output io.Writer, signed *Entity, hints *FileHints, config *packet.Config) (input io.WriteCloser, err error) {
+ if signed == nil {
+ return nil, errors.InvalidArgumentError("no signer provided")
}
- w := encryptedData
- if signer != nil {
- // If we need to write a signature packet after the literal
- // data then we need to stop literalData from closing
- // encryptedData.
- w = noOpCloser{encryptedData}
-
- }
- var epochSeconds uint32
- if !hints.ModTime.IsZero() {
- epochSeconds = uint32(hints.ModTime.Unix())
- }
- literalData, err := packet.SerializeLiteral(w, hints.IsBinary, hints.FileName, epochSeconds)
- if err != nil {
- return nil, err
+ // These are the possible hash functions that we'll use for the signature.
+ candidateHashes := []uint8{
+ hashToHashId(crypto.SHA256),
+ hashToHashId(crypto.SHA384),
+ hashToHashId(crypto.SHA512),
+ hashToHashId(crypto.SHA1),
+ hashToHashId(crypto.RIPEMD160),
}
-
- if signer != nil {
- return signatureWriter{encryptedData, literalData, hash, hash.New(), signer, config}, nil
+ defaultHashes := candidateHashes[len(candidateHashes)-1:]
+ preferredHashes := signed.primaryIdentity().SelfSignature.PreferredHash
+ if len(preferredHashes) == 0 {
+ preferredHashes = defaultHashes
}
- return literalData, nil
+ candidateHashes = intersectPreferences(candidateHashes, preferredHashes)
+ return writeAndSign(noOpCloser{output}, candidateHashes, signed, hints, config)
}
// signatureWriter hashes the contents of a message while passing it along to
diff --git a/vendor/golang.org/x/crypto/otr/libotr_test_helper.c b/vendor/golang.org/x/crypto/otr/libotr_test_helper.c
new file mode 100644
index 000000000..b3ca072d4
--- /dev/null
+++ b/vendor/golang.org/x/crypto/otr/libotr_test_helper.c
@@ -0,0 +1,197 @@
+// 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.
+
+// This code can be compiled and used to test the otr package against libotr.
+// See otr_test.go.
+
+// +build ignore
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <proto.h>
+#include <message.h>
+#include <privkey.h>
+
+static int g_session_established = 0;
+
+OtrlPolicy policy(void *opdata, ConnContext *context) {
+ return OTRL_POLICY_ALWAYS;
+}
+
+int is_logged_in(void *opdata, const char *accountname, const char *protocol,
+ const char *recipient) {
+ return 1;
+}
+
+void inject_message(void *opdata, const char *accountname, const char *protocol,
+ const char *recipient, const char *message) {
+ printf("%s\n", message);
+ fflush(stdout);
+ fprintf(stderr, "libotr helper sent: %s\n", message);
+}
+
+void update_context_list(void *opdata) {}
+
+void new_fingerprint(void *opdata, OtrlUserState us, const char *accountname,
+ const char *protocol, const char *username,
+ unsigned char fingerprint[20]) {
+ fprintf(stderr, "NEW FINGERPRINT\n");
+ g_session_established = 1;
+}
+
+void write_fingerprints(void *opdata) {}
+
+void gone_secure(void *opdata, ConnContext *context) {}
+
+void gone_insecure(void *opdata, ConnContext *context) {}
+
+void still_secure(void *opdata, ConnContext *context, int is_reply) {}
+
+int max_message_size(void *opdata, ConnContext *context) { return 99999; }
+
+const char *account_name(void *opdata, const char *account,
+ const char *protocol) {
+ return "ACCOUNT";
+}
+
+void account_name_free(void *opdata, const char *account_name) {}
+
+const char *error_message(void *opdata, ConnContext *context,
+ OtrlErrorCode err_code) {
+ return "ERR";
+}
+
+void error_message_free(void *opdata, const char *msg) {}
+
+void resent_msg_prefix_free(void *opdata, const char *prefix) {}
+
+void handle_smp_event(void *opdata, OtrlSMPEvent smp_event,
+ ConnContext *context, unsigned short progress_event,
+ char *question) {}
+
+void handle_msg_event(void *opdata, OtrlMessageEvent msg_event,
+ ConnContext *context, const char *message,
+ gcry_error_t err) {
+ fprintf(stderr, "msg event: %d %s\n", msg_event, message);
+}
+
+OtrlMessageAppOps uiops = {
+ policy,
+ NULL,
+ is_logged_in,
+ inject_message,
+ update_context_list,
+ new_fingerprint,
+ write_fingerprints,
+ gone_secure,
+ gone_insecure,
+ still_secure,
+ max_message_size,
+ account_name,
+ account_name_free,
+ NULL, /* received_symkey */
+ error_message,
+ error_message_free,
+ NULL, /* resent_msg_prefix */
+ resent_msg_prefix_free,
+ handle_smp_event,
+ handle_msg_event,
+ NULL /* create_instag */,
+ NULL /* convert_msg */,
+ NULL /* convert_free */,
+ NULL /* timer_control */,
+};
+
+static const char kPrivateKeyData[] =
+ "(privkeys (account (name \"account\") (protocol proto) (private-key (dsa "
+ "(p "
+ "#00FC07ABCF0DC916AFF6E9AE47BEF60C7AB9B4D6B2469E436630E36F8A489BE812486A09F"
+ "30B71224508654940A835301ACC525A4FF133FC152CC53DCC59D65C30A54F1993FE13FE63E"
+ "5823D4C746DB21B90F9B9C00B49EC7404AB1D929BA7FBA12F2E45C6E0A651689750E8528AB"
+ "8C031D3561FECEE72EBB4A090D450A9B7A857#) (q "
+ "#00997BD266EF7B1F60A5C23F3A741F2AEFD07A2081#) (g "
+ "#535E360E8A95EBA46A4F7DE50AD6E9B2A6DB785A66B64EB9F20338D2A3E8FB0E94725848F"
+ "1AA6CC567CB83A1CC517EC806F2E92EAE71457E80B2210A189B91250779434B41FC8A8873F"
+ "6DB94BEA7D177F5D59E7E114EE10A49CFD9CEF88AE43387023B672927BA74B04EB6BBB5E57"
+ "597766A2F9CE3857D7ACE3E1E3BC1FC6F26#) (y "
+ "#0AC8670AD767D7A8D9D14CC1AC6744CD7D76F993B77FFD9E39DF01E5A6536EF65E775FCEF"
+ "2A983E2A19BD6415500F6979715D9FD1257E1FE2B6F5E1E74B333079E7C880D39868462A93"
+ "454B41877BE62E5EF0A041C2EE9C9E76BD1E12AE25D9628DECB097025DD625EF49C3258A1A"
+ "3C0FF501E3DC673B76D7BABF349009B6ECF#) (x "
+ "#14D0345A3562C480A039E3C72764F72D79043216#)))))\n";
+
+int main() {
+ OTRL_INIT;
+
+ // We have to write the private key information to a file because the libotr
+ // API demands a filename to read from.
+ const char *tmpdir = "/tmp";
+ if (getenv("TMP")) {
+ tmpdir = getenv("TMP");
+ }
+
+ char private_key_file[256];
+ snprintf(private_key_file, sizeof(private_key_file),
+ "%s/libotr_test_helper_privatekeys-XXXXXX", tmpdir);
+ int fd = mkstemp(private_key_file);
+ if (fd == -1) {
+ perror("creating temp file");
+ }
+ write(fd, kPrivateKeyData, sizeof(kPrivateKeyData) - 1);
+ close(fd);
+
+ OtrlUserState userstate = otrl_userstate_create();
+ otrl_privkey_read(userstate, private_key_file);
+ unlink(private_key_file);
+
+ fprintf(stderr, "libotr helper started\n");
+
+ char buf[4096];
+
+ for (;;) {
+ char *message = fgets(buf, sizeof(buf), stdin);
+ if (strlen(message) == 0) {
+ break;
+ }
+ message[strlen(message) - 1] = 0;
+ fprintf(stderr, "libotr helper got: %s\n", message);
+
+ char *newmessage = NULL;
+ OtrlTLV *tlvs;
+ int ignore_message = otrl_message_receiving(
+ userstate, &uiops, NULL, "account", "proto", "peer", message,
+ &newmessage, &tlvs, NULL, NULL, NULL);
+ if (tlvs) {
+ otrl_tlv_free(tlvs);
+ }
+
+ if (newmessage != NULL) {
+ fprintf(stderr, "libotr got: %s\n", newmessage);
+ otrl_message_free(newmessage);
+
+ gcry_error_t err;
+ char *newmessage = NULL;
+
+ err = otrl_message_sending(userstate, &uiops, NULL, "account", "proto",
+ "peer", 0, "test message", NULL, &newmessage,
+ OTRL_FRAGMENT_SEND_SKIP, NULL, NULL, NULL);
+ if (newmessage == NULL) {
+ fprintf(stderr, "libotr didn't encrypt message\n");
+ return 1;
+ }
+ write(1, newmessage, strlen(newmessage));
+ write(1, "\n", 1);
+ fprintf(stderr, "libotr sent: %s\n", newmessage);
+ otrl_message_free(newmessage);
+
+ g_session_established = 0;
+ write(1, "?OTRv2?\n", 8);
+ fprintf(stderr, "libotr sent: ?OTRv2\n");
+ }
+ }
+
+ return 0;
+}
diff --git a/vendor/golang.org/x/crypto/otr/otr.go b/vendor/golang.org/x/crypto/otr/otr.go
new file mode 100644
index 000000000..173b753db
--- /dev/null
+++ b/vendor/golang.org/x/crypto/otr/otr.go
@@ -0,0 +1,1415 @@
+// 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.
+
+// Package otr implements the Off The Record protocol as specified in
+// http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html
+package otr // import "golang.org/x/crypto/otr"
+
+import (
+ "bytes"
+ "crypto/aes"
+ "crypto/cipher"
+ "crypto/dsa"
+ "crypto/hmac"
+ "crypto/rand"
+ "crypto/sha1"
+ "crypto/sha256"
+ "crypto/subtle"
+ "encoding/base64"
+ "encoding/hex"
+ "errors"
+ "hash"
+ "io"
+ "math/big"
+ "strconv"
+)
+
+// SecurityChange describes a change in the security state of a Conversation.
+type SecurityChange int
+
+const (
+ NoChange SecurityChange = iota
+ // NewKeys indicates that a key exchange has completed. This occurs
+ // when a conversation first becomes encrypted, and when the keys are
+ // renegotiated within an encrypted conversation.
+ NewKeys
+ // SMPSecretNeeded indicates that the peer has started an
+ // authentication and that we need to supply a secret. Call SMPQuestion
+ // to get the optional, human readable challenge and then Authenticate
+ // to supply the matching secret.
+ SMPSecretNeeded
+ // SMPComplete indicates that an authentication completed. The identity
+ // of the peer has now been confirmed.
+ SMPComplete
+ // SMPFailed indicates that an authentication failed.
+ SMPFailed
+ // ConversationEnded indicates that the peer ended the secure
+ // conversation.
+ ConversationEnded
+)
+
+// QueryMessage can be sent to a peer to start an OTR conversation.
+var QueryMessage = "?OTRv2?"
+
+// ErrorPrefix can be used to make an OTR error by appending an error message
+// to it.
+var ErrorPrefix = "?OTR Error:"
+
+var (
+ fragmentPartSeparator = []byte(",")
+ fragmentPrefix = []byte("?OTR,")
+ msgPrefix = []byte("?OTR:")
+ queryMarker = []byte("?OTR")
+)
+
+// isQuery attempts to parse an OTR query from msg and returns the greatest
+// common version, or 0 if msg is not an OTR query.
+func isQuery(msg []byte) (greatestCommonVersion int) {
+ pos := bytes.Index(msg, queryMarker)
+ if pos == -1 {
+ return 0
+ }
+ for i, c := range msg[pos+len(queryMarker):] {
+ if i == 0 {
+ if c == '?' {
+ // Indicates support for version 1, but we don't
+ // implement that.
+ continue
+ }
+
+ if c != 'v' {
+ // Invalid message
+ return 0
+ }
+
+ continue
+ }
+
+ if c == '?' {
+ // End of message
+ return
+ }
+
+ if c == ' ' || c == '\t' {
+ // Probably an invalid message
+ return 0
+ }
+
+ if c == '2' {
+ greatestCommonVersion = 2
+ }
+ }
+
+ return 0
+}
+
+const (
+ statePlaintext = iota
+ stateEncrypted
+ stateFinished
+)
+
+const (
+ authStateNone = iota
+ authStateAwaitingDHKey
+ authStateAwaitingRevealSig
+ authStateAwaitingSig
+)
+
+const (
+ msgTypeDHCommit = 2
+ msgTypeData = 3
+ msgTypeDHKey = 10
+ msgTypeRevealSig = 17
+ msgTypeSig = 18
+)
+
+const (
+ // If the requested fragment size is less than this, it will be ignored.
+ minFragmentSize = 18
+ // Messages are padded to a multiple of this number of bytes.
+ paddingGranularity = 256
+ // The number of bytes in a Diffie-Hellman private value (320-bits).
+ dhPrivateBytes = 40
+ // The number of bytes needed to represent an element of the DSA
+ // subgroup (160-bits).
+ dsaSubgroupBytes = 20
+ // The number of bytes of the MAC that are sent on the wire (160-bits).
+ macPrefixBytes = 20
+)
+
+// These are the global, common group parameters for OTR.
+var (
+ p *big.Int // group prime
+ g *big.Int // group generator
+ q *big.Int // group order
+ pMinus2 *big.Int
+)
+
+func init() {
+ p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF", 16)
+ q, _ = new(big.Int).SetString("7FFFFFFFFFFFFFFFE487ED5110B4611A62633145C06E0E68948127044533E63A0105DF531D89CD9128A5043CC71A026EF7CA8CD9E69D218D98158536F92F8A1BA7F09AB6B6A8E122F242DABB312F3F637A262174D31BF6B585FFAE5B7A035BF6F71C35FDAD44CFD2D74F9208BE258FF324943328F6722D9EE1003E5C50B1DF82CC6D241B0E2AE9CD348B1FD47E9267AFC1B2AE91EE51D6CB0E3179AB1042A95DCF6A9483B84B4B36B3861AA7255E4C0278BA36046511B993FFFFFFFFFFFFFFFF", 16)
+ g = new(big.Int).SetInt64(2)
+ pMinus2 = new(big.Int).Sub(p, g)
+}
+
+// Conversation represents a relation with a peer. The zero value is a valid
+// Conversation, although PrivateKey must be set.
+//
+// When communicating with a peer, all inbound messages should be passed to
+// Conversation.Receive and all outbound messages to Conversation.Send. The
+// Conversation will take care of maintaining the encryption state and
+// negotiating encryption as needed.
+type Conversation struct {
+ // PrivateKey contains the private key to use to sign key exchanges.
+ PrivateKey *PrivateKey
+
+ // Rand can be set to override the entropy source. Otherwise,
+ // crypto/rand will be used.
+ Rand io.Reader
+ // If FragmentSize is set, all messages produced by Receive and Send
+ // will be fragmented into messages of, at most, this number of bytes.
+ FragmentSize int
+
+ // Once Receive has returned NewKeys once, the following fields are
+ // valid.
+ SSID [8]byte
+ TheirPublicKey PublicKey
+
+ state, authState int
+
+ r [16]byte
+ x, y *big.Int
+ gx, gy *big.Int
+ gxBytes []byte
+ digest [sha256.Size]byte
+
+ revealKeys, sigKeys akeKeys
+
+ myKeyId uint32
+ myCurrentDHPub *big.Int
+ myCurrentDHPriv *big.Int
+ myLastDHPub *big.Int
+ myLastDHPriv *big.Int
+
+ theirKeyId uint32
+ theirCurrentDHPub *big.Int
+ theirLastDHPub *big.Int
+
+ keySlots [4]keySlot
+
+ myCounter [8]byte
+ theirLastCtr [8]byte
+ oldMACs []byte
+
+ k, n int // fragment state
+ frag []byte
+
+ smp smpState
+}
+
+// A keySlot contains key material for a specific (their keyid, my keyid) pair.
+type keySlot struct {
+ // used is true if this slot is valid. If false, it's free for reuse.
+ used bool
+ theirKeyId uint32
+ myKeyId uint32
+ sendAESKey, recvAESKey []byte
+ sendMACKey, recvMACKey []byte
+ theirLastCtr [8]byte
+}
+
+// akeKeys are generated during key exchange. There's one set for the reveal
+// signature message and another for the signature message. In the protocol
+// spec the latter are indicated with a prime mark.
+type akeKeys struct {
+ c [16]byte
+ m1, m2 [32]byte
+}
+
+func (c *Conversation) rand() io.Reader {
+ if c.Rand != nil {
+ return c.Rand
+ }
+ return rand.Reader
+}
+
+func (c *Conversation) randMPI(buf []byte) *big.Int {
+ _, err := io.ReadFull(c.rand(), buf)
+ if err != nil {
+ panic("otr: short read from random source")
+ }
+
+ return new(big.Int).SetBytes(buf)
+}
+
+// tlv represents the type-length value from the protocol.
+type tlv struct {
+ typ, length uint16
+ data []byte
+}
+
+const (
+ tlvTypePadding = 0
+ tlvTypeDisconnected = 1
+ tlvTypeSMP1 = 2
+ tlvTypeSMP2 = 3
+ tlvTypeSMP3 = 4
+ tlvTypeSMP4 = 5
+ tlvTypeSMPAbort = 6
+ tlvTypeSMP1WithQuestion = 7
+)
+
+// Receive handles a message from a peer. It returns a human readable message,
+// an indicator of whether that message was encrypted, a hint about the
+// encryption state and zero or more messages to send back to the peer.
+// These messages do not need to be passed to Send before transmission.
+func (c *Conversation) Receive(in []byte) (out []byte, encrypted bool, change SecurityChange, toSend [][]byte, err error) {
+ if bytes.HasPrefix(in, fragmentPrefix) {
+ in, err = c.processFragment(in)
+ if in == nil || err != nil {
+ return
+ }
+ }
+
+ if bytes.HasPrefix(in, msgPrefix) && in[len(in)-1] == '.' {
+ in = in[len(msgPrefix) : len(in)-1]
+ } else if version := isQuery(in); version > 0 {
+ c.authState = authStateAwaitingDHKey
+ c.reset()
+ toSend = c.encode(c.generateDHCommit())
+ return
+ } else {
+ // plaintext message
+ out = in
+ return
+ }
+
+ msg := make([]byte, base64.StdEncoding.DecodedLen(len(in)))
+ msgLen, err := base64.StdEncoding.Decode(msg, in)
+ if err != nil {
+ err = errors.New("otr: invalid base64 encoding in message")
+ return
+ }
+ msg = msg[:msgLen]
+
+ // The first two bytes are the protocol version (2)
+ if len(msg) < 3 || msg[0] != 0 || msg[1] != 2 {
+ err = errors.New("otr: invalid OTR message")
+ return
+ }
+
+ msgType := int(msg[2])
+ msg = msg[3:]
+
+ switch msgType {
+ case msgTypeDHCommit:
+ switch c.authState {
+ case authStateNone:
+ c.authState = authStateAwaitingRevealSig
+ if err = c.processDHCommit(msg); err != nil {
+ return
+ }
+ c.reset()
+ toSend = c.encode(c.generateDHKey())
+ return
+ case authStateAwaitingDHKey:
+ // This is a 'SYN-crossing'. The greater digest wins.
+ var cmp int
+ if cmp, err = c.compareToDHCommit(msg); err != nil {
+ return
+ }
+ if cmp > 0 {
+ // We win. Retransmit DH commit.
+ toSend = c.encode(c.serializeDHCommit())
+ return
+ } else {
+ // They win. We forget about our DH commit.
+ c.authState = authStateAwaitingRevealSig
+ if err = c.processDHCommit(msg); err != nil {
+ return
+ }
+ c.reset()
+ toSend = c.encode(c.generateDHKey())
+ return
+ }
+ case authStateAwaitingRevealSig:
+ if err = c.processDHCommit(msg); err != nil {
+ return
+ }
+ toSend = c.encode(c.serializeDHKey())
+ case authStateAwaitingSig:
+ if err = c.processDHCommit(msg); err != nil {
+ return
+ }
+ c.reset()
+ toSend = c.encode(c.generateDHKey())
+ c.authState = authStateAwaitingRevealSig
+ default:
+ panic("bad state")
+ }
+ case msgTypeDHKey:
+ switch c.authState {
+ case authStateAwaitingDHKey:
+ var isSame bool
+ if isSame, err = c.processDHKey(msg); err != nil {
+ return
+ }
+ if isSame {
+ err = errors.New("otr: unexpected duplicate DH key")
+ return
+ }
+ toSend = c.encode(c.generateRevealSig())
+ c.authState = authStateAwaitingSig
+ case authStateAwaitingSig:
+ var isSame bool
+ if isSame, err = c.processDHKey(msg); err != nil {
+ return
+ }
+ if isSame {
+ toSend = c.encode(c.serializeDHKey())
+ }
+ }
+ case msgTypeRevealSig:
+ if c.authState != authStateAwaitingRevealSig {
+ return
+ }
+ if err = c.processRevealSig(msg); err != nil {
+ return
+ }
+ toSend = c.encode(c.generateSig())
+ c.authState = authStateNone
+ c.state = stateEncrypted
+ change = NewKeys
+ case msgTypeSig:
+ if c.authState != authStateAwaitingSig {
+ return
+ }
+ if err = c.processSig(msg); err != nil {
+ return
+ }
+ c.authState = authStateNone
+ c.state = stateEncrypted
+ change = NewKeys
+ case msgTypeData:
+ if c.state != stateEncrypted {
+ err = errors.New("otr: encrypted message received without encrypted session established")
+ return
+ }
+ var tlvs []tlv
+ out, tlvs, err = c.processData(msg)
+ encrypted = true
+
+ EachTLV:
+ for _, inTLV := range tlvs {
+ switch inTLV.typ {
+ case tlvTypeDisconnected:
+ change = ConversationEnded
+ c.state = stateFinished
+ break EachTLV
+ case tlvTypeSMP1, tlvTypeSMP2, tlvTypeSMP3, tlvTypeSMP4, tlvTypeSMPAbort, tlvTypeSMP1WithQuestion:
+ var reply tlv
+ var complete bool
+ reply, complete, err = c.processSMP(inTLV)
+ if err == smpSecretMissingError {
+ err = nil
+ change = SMPSecretNeeded
+ c.smp.saved = &inTLV
+ return
+ }
+ if err == smpFailureError {
+ err = nil
+ change = SMPFailed
+ } else if complete {
+ change = SMPComplete
+ }
+ if reply.typ != 0 {
+ toSend = c.encode(c.generateData(nil, &reply))
+ }
+ break EachTLV
+ default:
+ // skip unknown TLVs
+ }
+ }
+ default:
+ err = errors.New("otr: unknown message type " + strconv.Itoa(msgType))
+ }
+
+ return
+}
+
+// Send takes a human readable message from the local user, possibly encrypts
+// it and returns zero one or more messages to send to the peer.
+func (c *Conversation) Send(msg []byte) ([][]byte, error) {
+ switch c.state {
+ case statePlaintext:
+ return [][]byte{msg}, nil
+ case stateEncrypted:
+ return c.encode(c.generateData(msg, nil)), nil
+ case stateFinished:
+ return nil, errors.New("otr: cannot send message because secure conversation has finished")
+ }
+
+ return nil, errors.New("otr: cannot send message in current state")
+}
+
+// SMPQuestion returns the human readable challenge question from the peer.
+// It's only valid after Receive has returned SMPSecretNeeded.
+func (c *Conversation) SMPQuestion() string {
+ return c.smp.question
+}
+
+// Authenticate begins an authentication with the peer. Authentication involves
+// an optional challenge message and a shared secret. The authentication
+// proceeds until either Receive returns SMPComplete, SMPSecretNeeded (which
+// indicates that a new authentication is happening and thus this one was
+// aborted) or SMPFailed.
+func (c *Conversation) Authenticate(question string, mutualSecret []byte) (toSend [][]byte, err error) {
+ if c.state != stateEncrypted {
+ err = errors.New("otr: can't authenticate a peer without a secure conversation established")
+ return
+ }
+
+ if c.smp.saved != nil {
+ c.calcSMPSecret(mutualSecret, false /* they started it */)
+
+ var out tlv
+ var complete bool
+ out, complete, err = c.processSMP(*c.smp.saved)
+ if complete {
+ panic("SMP completed on the first message")
+ }
+ c.smp.saved = nil
+ if out.typ != 0 {
+ toSend = c.encode(c.generateData(nil, &out))
+ }
+ return
+ }
+
+ c.calcSMPSecret(mutualSecret, true /* we started it */)
+ outs := c.startSMP(question)
+ for _, out := range outs {
+ toSend = append(toSend, c.encode(c.generateData(nil, &out))...)
+ }
+ return
+}
+
+// End ends a secure conversation by generating a termination message for
+// the peer and switches to unencrypted communication.
+func (c *Conversation) End() (toSend [][]byte) {
+ switch c.state {
+ case statePlaintext:
+ return nil
+ case stateEncrypted:
+ c.state = statePlaintext
+ return c.encode(c.generateData(nil, &tlv{typ: tlvTypeDisconnected}))
+ case stateFinished:
+ c.state = statePlaintext
+ return nil
+ }
+ panic("unreachable")
+}
+
+// IsEncrypted returns true if a message passed to Send would be encrypted
+// before transmission. This result remains valid until the next call to
+// Receive or End, which may change the state of the Conversation.
+func (c *Conversation) IsEncrypted() bool {
+ return c.state == stateEncrypted
+}
+
+var fragmentError = errors.New("otr: invalid OTR fragment")
+
+// processFragment processes a fragmented OTR message and possibly returns a
+// complete message. Fragmented messages look like "?OTR,k,n,msg," where k is
+// the fragment number (starting from 1), n is the number of fragments in this
+// message and msg is a substring of the base64 encoded message.
+func (c *Conversation) processFragment(in []byte) (out []byte, err error) {
+ in = in[len(fragmentPrefix):] // remove "?OTR,"
+ parts := bytes.Split(in, fragmentPartSeparator)
+ if len(parts) != 4 || len(parts[3]) != 0 {
+ return nil, fragmentError
+ }
+
+ k, err := strconv.Atoi(string(parts[0]))
+ if err != nil {
+ return nil, fragmentError
+ }
+
+ n, err := strconv.Atoi(string(parts[1]))
+ if err != nil {
+ return nil, fragmentError
+ }
+
+ if k < 1 || n < 1 || k > n {
+ return nil, fragmentError
+ }
+
+ if k == 1 {
+ c.frag = append(c.frag[:0], parts[2]...)
+ c.k, c.n = k, n
+ } else if n == c.n && k == c.k+1 {
+ c.frag = append(c.frag, parts[2]...)
+ c.k++
+ } else {
+ c.frag = c.frag[:0]
+ c.n, c.k = 0, 0
+ }
+
+ if c.n > 0 && c.k == c.n {
+ c.n, c.k = 0, 0
+ return c.frag, nil
+ }
+
+ return nil, nil
+}
+
+func (c *Conversation) generateDHCommit() []byte {
+ _, err := io.ReadFull(c.rand(), c.r[:])
+ if err != nil {
+ panic("otr: short read from random source")
+ }
+
+ var xBytes [dhPrivateBytes]byte
+ c.x = c.randMPI(xBytes[:])
+ c.gx = new(big.Int).Exp(g, c.x, p)
+ c.gy = nil
+ c.gxBytes = appendMPI(nil, c.gx)
+
+ h := sha256.New()
+ h.Write(c.gxBytes)
+ h.Sum(c.digest[:0])
+
+ aesCipher, err := aes.NewCipher(c.r[:])
+ if err != nil {
+ panic(err.Error())
+ }
+
+ var iv [aes.BlockSize]byte
+ ctr := cipher.NewCTR(aesCipher, iv[:])
+ ctr.XORKeyStream(c.gxBytes, c.gxBytes)
+
+ return c.serializeDHCommit()
+}
+
+func (c *Conversation) serializeDHCommit() []byte {
+ var ret []byte
+ ret = appendU16(ret, 2) // protocol version
+ ret = append(ret, msgTypeDHCommit)
+ ret = appendData(ret, c.gxBytes)
+ ret = appendData(ret, c.digest[:])
+ return ret
+}
+
+func (c *Conversation) processDHCommit(in []byte) error {
+ var ok1, ok2 bool
+ c.gxBytes, in, ok1 = getData(in)
+ digest, in, ok2 := getData(in)
+ if !ok1 || !ok2 || len(in) > 0 {
+ return errors.New("otr: corrupt DH commit message")
+ }
+ copy(c.digest[:], digest)
+ return nil
+}
+
+func (c *Conversation) compareToDHCommit(in []byte) (int, error) {
+ _, in, ok1 := getData(in)
+ digest, in, ok2 := getData(in)
+ if !ok1 || !ok2 || len(in) > 0 {
+ return 0, errors.New("otr: corrupt DH commit message")
+ }
+ return bytes.Compare(c.digest[:], digest), nil
+}
+
+func (c *Conversation) generateDHKey() []byte {
+ var yBytes [dhPrivateBytes]byte
+ c.y = c.randMPI(yBytes[:])
+ c.gy = new(big.Int).Exp(g, c.y, p)
+ return c.serializeDHKey()
+}
+
+func (c *Conversation) serializeDHKey() []byte {
+ var ret []byte
+ ret = appendU16(ret, 2) // protocol version
+ ret = append(ret, msgTypeDHKey)
+ ret = appendMPI(ret, c.gy)
+ return ret
+}
+
+func (c *Conversation) processDHKey(in []byte) (isSame bool, err error) {
+ gy, in, ok := getMPI(in)
+ if !ok {
+ err = errors.New("otr: corrupt DH key message")
+ return
+ }
+ if gy.Cmp(g) < 0 || gy.Cmp(pMinus2) > 0 {
+ err = errors.New("otr: DH value out of range")
+ return
+ }
+ if c.gy != nil {
+ isSame = c.gy.Cmp(gy) == 0
+ return
+ }
+ c.gy = gy
+ return
+}
+
+func (c *Conversation) generateEncryptedSignature(keys *akeKeys, xFirst bool) ([]byte, []byte) {
+ var xb []byte
+ xb = c.PrivateKey.PublicKey.Serialize(xb)
+
+ var verifyData []byte
+ if xFirst {
+ verifyData = appendMPI(verifyData, c.gx)
+ verifyData = appendMPI(verifyData, c.gy)
+ } else {
+ verifyData = appendMPI(verifyData, c.gy)
+ verifyData = appendMPI(verifyData, c.gx)
+ }
+ verifyData = append(verifyData, xb...)
+ verifyData = appendU32(verifyData, c.myKeyId)
+
+ mac := hmac.New(sha256.New, keys.m1[:])
+ mac.Write(verifyData)
+ mb := mac.Sum(nil)
+
+ xb = appendU32(xb, c.myKeyId)
+ xb = append(xb, c.PrivateKey.Sign(c.rand(), mb)...)
+
+ aesCipher, err := aes.NewCipher(keys.c[:])
+ if err != nil {
+ panic(err.Error())
+ }
+ var iv [aes.BlockSize]byte
+ ctr := cipher.NewCTR(aesCipher, iv[:])
+ ctr.XORKeyStream(xb, xb)
+
+ mac = hmac.New(sha256.New, keys.m2[:])
+ encryptedSig := appendData(nil, xb)
+ mac.Write(encryptedSig)
+
+ return encryptedSig, mac.Sum(nil)
+}
+
+func (c *Conversation) generateRevealSig() []byte {
+ s := new(big.Int).Exp(c.gy, c.x, p)
+ c.calcAKEKeys(s)
+ c.myKeyId++
+
+ encryptedSig, mac := c.generateEncryptedSignature(&c.revealKeys, true /* gx comes first */)
+
+ c.myCurrentDHPub = c.gx
+ c.myCurrentDHPriv = c.x
+ c.rotateDHKeys()
+ incCounter(&c.myCounter)
+
+ var ret []byte
+ ret = appendU16(ret, 2)
+ ret = append(ret, msgTypeRevealSig)
+ ret = appendData(ret, c.r[:])
+ ret = append(ret, encryptedSig...)
+ ret = append(ret, mac[:20]...)
+ return ret
+}
+
+func (c *Conversation) processEncryptedSig(encryptedSig, theirMAC []byte, keys *akeKeys, xFirst bool) error {
+ mac := hmac.New(sha256.New, keys.m2[:])
+ mac.Write(appendData(nil, encryptedSig))
+ myMAC := mac.Sum(nil)[:20]
+
+ if len(myMAC) != len(theirMAC) || subtle.ConstantTimeCompare(myMAC, theirMAC) == 0 {
+ return errors.New("bad signature MAC in encrypted signature")
+ }
+
+ aesCipher, err := aes.NewCipher(keys.c[:])
+ if err != nil {
+ panic(err.Error())
+ }
+ var iv [aes.BlockSize]byte
+ ctr := cipher.NewCTR(aesCipher, iv[:])
+ ctr.XORKeyStream(encryptedSig, encryptedSig)
+
+ sig := encryptedSig
+ sig, ok1 := c.TheirPublicKey.Parse(sig)
+ keyId, sig, ok2 := getU32(sig)
+ if !ok1 || !ok2 {
+ return errors.New("otr: corrupt encrypted signature")
+ }
+
+ var verifyData []byte
+ if xFirst {
+ verifyData = appendMPI(verifyData, c.gx)
+ verifyData = appendMPI(verifyData, c.gy)
+ } else {
+ verifyData = appendMPI(verifyData, c.gy)
+ verifyData = appendMPI(verifyData, c.gx)
+ }
+ verifyData = c.TheirPublicKey.Serialize(verifyData)
+ verifyData = appendU32(verifyData, keyId)
+
+ mac = hmac.New(sha256.New, keys.m1[:])
+ mac.Write(verifyData)
+ mb := mac.Sum(nil)
+
+ sig, ok1 = c.TheirPublicKey.Verify(mb, sig)
+ if !ok1 {
+ return errors.New("bad signature in encrypted signature")
+ }
+ if len(sig) > 0 {
+ return errors.New("corrupt encrypted signature")
+ }
+
+ c.theirKeyId = keyId
+ zero(c.theirLastCtr[:])
+ return nil
+}
+
+func (c *Conversation) processRevealSig(in []byte) error {
+ r, in, ok1 := getData(in)
+ encryptedSig, in, ok2 := getData(in)
+ theirMAC := in
+ if !ok1 || !ok2 || len(theirMAC) != 20 {
+ return errors.New("otr: corrupt reveal signature message")
+ }
+
+ aesCipher, err := aes.NewCipher(r)
+ if err != nil {
+ return errors.New("otr: cannot create AES cipher from reveal signature message: " + err.Error())
+ }
+ var iv [aes.BlockSize]byte
+ ctr := cipher.NewCTR(aesCipher, iv[:])
+ ctr.XORKeyStream(c.gxBytes, c.gxBytes)
+ h := sha256.New()
+ h.Write(c.gxBytes)
+ digest := h.Sum(nil)
+ if len(digest) != len(c.digest) || subtle.ConstantTimeCompare(digest, c.digest[:]) == 0 {
+ return errors.New("otr: bad commit MAC in reveal signature message")
+ }
+ var rest []byte
+ c.gx, rest, ok1 = getMPI(c.gxBytes)
+ if !ok1 || len(rest) > 0 {
+ return errors.New("otr: gx corrupt after decryption")
+ }
+ if c.gx.Cmp(g) < 0 || c.gx.Cmp(pMinus2) > 0 {
+ return errors.New("otr: DH value out of range")
+ }
+ s := new(big.Int).Exp(c.gx, c.y, p)
+ c.calcAKEKeys(s)
+
+ if err := c.processEncryptedSig(encryptedSig, theirMAC, &c.revealKeys, true /* gx comes first */); err != nil {
+ return errors.New("otr: in reveal signature message: " + err.Error())
+ }
+
+ c.theirCurrentDHPub = c.gx
+ c.theirLastDHPub = nil
+
+ return nil
+}
+
+func (c *Conversation) generateSig() []byte {
+ c.myKeyId++
+
+ encryptedSig, mac := c.generateEncryptedSignature(&c.sigKeys, false /* gy comes first */)
+
+ c.myCurrentDHPub = c.gy
+ c.myCurrentDHPriv = c.y
+ c.rotateDHKeys()
+ incCounter(&c.myCounter)
+
+ var ret []byte
+ ret = appendU16(ret, 2)
+ ret = append(ret, msgTypeSig)
+ ret = append(ret, encryptedSig...)
+ ret = append(ret, mac[:macPrefixBytes]...)
+ return ret
+}
+
+func (c *Conversation) processSig(in []byte) error {
+ encryptedSig, in, ok1 := getData(in)
+ theirMAC := in
+ if !ok1 || len(theirMAC) != macPrefixBytes {
+ return errors.New("otr: corrupt signature message")
+ }
+
+ if err := c.processEncryptedSig(encryptedSig, theirMAC, &c.sigKeys, false /* gy comes first */); err != nil {
+ return errors.New("otr: in signature message: " + err.Error())
+ }
+
+ c.theirCurrentDHPub = c.gy
+ c.theirLastDHPub = nil
+
+ return nil
+}
+
+func (c *Conversation) rotateDHKeys() {
+ // evict slots using our retired key id
+ for i := range c.keySlots {
+ slot := &c.keySlots[i]
+ if slot.used && slot.myKeyId == c.myKeyId-1 {
+ slot.used = false
+ c.oldMACs = append(c.oldMACs, slot.recvMACKey...)
+ }
+ }
+
+ c.myLastDHPriv = c.myCurrentDHPriv
+ c.myLastDHPub = c.myCurrentDHPub
+
+ var xBytes [dhPrivateBytes]byte
+ c.myCurrentDHPriv = c.randMPI(xBytes[:])
+ c.myCurrentDHPub = new(big.Int).Exp(g, c.myCurrentDHPriv, p)
+ c.myKeyId++
+}
+
+func (c *Conversation) processData(in []byte) (out []byte, tlvs []tlv, err error) {
+ origIn := in
+ flags, in, ok1 := getU8(in)
+ theirKeyId, in, ok2 := getU32(in)
+ myKeyId, in, ok3 := getU32(in)
+ y, in, ok4 := getMPI(in)
+ counter, in, ok5 := getNBytes(in, 8)
+ encrypted, in, ok6 := getData(in)
+ macedData := origIn[:len(origIn)-len(in)]
+ theirMAC, in, ok7 := getNBytes(in, macPrefixBytes)
+ _, in, ok8 := getData(in)
+ if !ok1 || !ok2 || !ok3 || !ok4 || !ok5 || !ok6 || !ok7 || !ok8 || len(in) > 0 {
+ err = errors.New("otr: corrupt data message")
+ return
+ }
+
+ ignoreErrors := flags&1 != 0
+
+ slot, err := c.calcDataKeys(myKeyId, theirKeyId)
+ if err != nil {
+ if ignoreErrors {
+ err = nil
+ }
+ return
+ }
+
+ mac := hmac.New(sha1.New, slot.recvMACKey)
+ mac.Write([]byte{0, 2, 3})
+ mac.Write(macedData)
+ myMAC := mac.Sum(nil)
+ if len(myMAC) != len(theirMAC) || subtle.ConstantTimeCompare(myMAC, theirMAC) == 0 {
+ if !ignoreErrors {
+ err = errors.New("otr: bad MAC on data message")
+ }
+ return
+ }
+
+ if bytes.Compare(counter, slot.theirLastCtr[:]) <= 0 {
+ err = errors.New("otr: counter regressed")
+ return
+ }
+ copy(slot.theirLastCtr[:], counter)
+
+ var iv [aes.BlockSize]byte
+ copy(iv[:], counter)
+ aesCipher, err := aes.NewCipher(slot.recvAESKey)
+ if err != nil {
+ panic(err.Error())
+ }
+ ctr := cipher.NewCTR(aesCipher, iv[:])
+ ctr.XORKeyStream(encrypted, encrypted)
+ decrypted := encrypted
+
+ if myKeyId == c.myKeyId {
+ c.rotateDHKeys()
+ }
+ if theirKeyId == c.theirKeyId {
+ // evict slots using their retired key id
+ for i := range c.keySlots {
+ slot := &c.keySlots[i]
+ if slot.used && slot.theirKeyId == theirKeyId-1 {
+ slot.used = false
+ c.oldMACs = append(c.oldMACs, slot.recvMACKey...)
+ }
+ }
+
+ c.theirLastDHPub = c.theirCurrentDHPub
+ c.theirKeyId++
+ c.theirCurrentDHPub = y
+ }
+
+ if nulPos := bytes.IndexByte(decrypted, 0); nulPos >= 0 {
+ out = decrypted[:nulPos]
+ tlvData := decrypted[nulPos+1:]
+ for len(tlvData) > 0 {
+ var t tlv
+ var ok1, ok2, ok3 bool
+
+ t.typ, tlvData, ok1 = getU16(tlvData)
+ t.length, tlvData, ok2 = getU16(tlvData)
+ t.data, tlvData, ok3 = getNBytes(tlvData, int(t.length))
+ if !ok1 || !ok2 || !ok3 {
+ err = errors.New("otr: corrupt tlv data")
+ return
+ }
+ tlvs = append(tlvs, t)
+ }
+ } else {
+ out = decrypted
+ }
+
+ return
+}
+
+func (c *Conversation) generateData(msg []byte, extra *tlv) []byte {
+ slot, err := c.calcDataKeys(c.myKeyId-1, c.theirKeyId)
+ if err != nil {
+ panic("otr: failed to generate sending keys: " + err.Error())
+ }
+
+ var plaintext []byte
+ plaintext = append(plaintext, msg...)
+ plaintext = append(plaintext, 0)
+
+ padding := paddingGranularity - ((len(plaintext) + 4) % paddingGranularity)
+ plaintext = appendU16(plaintext, tlvTypePadding)
+ plaintext = appendU16(plaintext, uint16(padding))
+ for i := 0; i < padding; i++ {
+ plaintext = append(plaintext, 0)
+ }
+
+ if extra != nil {
+ plaintext = appendU16(plaintext, extra.typ)
+ plaintext = appendU16(plaintext, uint16(len(extra.data)))
+ plaintext = append(plaintext, extra.data...)
+ }
+
+ encrypted := make([]byte, len(plaintext))
+
+ var iv [aes.BlockSize]byte
+ copy(iv[:], c.myCounter[:])
+ aesCipher, err := aes.NewCipher(slot.sendAESKey)
+ if err != nil {
+ panic(err.Error())
+ }
+ ctr := cipher.NewCTR(aesCipher, iv[:])
+ ctr.XORKeyStream(encrypted, plaintext)
+
+ var ret []byte
+ ret = appendU16(ret, 2)
+ ret = append(ret, msgTypeData)
+ ret = append(ret, 0 /* flags */)
+ ret = appendU32(ret, c.myKeyId-1)
+ ret = appendU32(ret, c.theirKeyId)
+ ret = appendMPI(ret, c.myCurrentDHPub)
+ ret = append(ret, c.myCounter[:]...)
+ ret = appendData(ret, encrypted)
+
+ mac := hmac.New(sha1.New, slot.sendMACKey)
+ mac.Write(ret)
+ ret = append(ret, mac.Sum(nil)[:macPrefixBytes]...)
+ ret = appendData(ret, c.oldMACs)
+ c.oldMACs = nil
+ incCounter(&c.myCounter)
+
+ return ret
+}
+
+func incCounter(counter *[8]byte) {
+ for i := 7; i >= 0; i-- {
+ counter[i]++
+ if counter[i] > 0 {
+ break
+ }
+ }
+}
+
+// calcDataKeys computes the keys used to encrypt a data message given the key
+// IDs.
+func (c *Conversation) calcDataKeys(myKeyId, theirKeyId uint32) (slot *keySlot, err error) {
+ // Check for a cache hit.
+ for i := range c.keySlots {
+ slot = &c.keySlots[i]
+ if slot.used && slot.theirKeyId == theirKeyId && slot.myKeyId == myKeyId {
+ return
+ }
+ }
+
+ // Find an empty slot to write into.
+ slot = nil
+ for i := range c.keySlots {
+ if !c.keySlots[i].used {
+ slot = &c.keySlots[i]
+ break
+ }
+ }
+ if slot == nil {
+ return nil, errors.New("otr: internal error: no more key slots")
+ }
+
+ var myPriv, myPub, theirPub *big.Int
+
+ if myKeyId == c.myKeyId {
+ myPriv = c.myCurrentDHPriv
+ myPub = c.myCurrentDHPub
+ } else if myKeyId == c.myKeyId-1 {
+ myPriv = c.myLastDHPriv
+ myPub = c.myLastDHPub
+ } else {
+ err = errors.New("otr: peer requested keyid " + strconv.FormatUint(uint64(myKeyId), 10) + " when I'm on " + strconv.FormatUint(uint64(c.myKeyId), 10))
+ return
+ }
+
+ if theirKeyId == c.theirKeyId {
+ theirPub = c.theirCurrentDHPub
+ } else if theirKeyId == c.theirKeyId-1 && c.theirLastDHPub != nil {
+ theirPub = c.theirLastDHPub
+ } else {
+ err = errors.New("otr: peer requested keyid " + strconv.FormatUint(uint64(myKeyId), 10) + " when they're on " + strconv.FormatUint(uint64(c.myKeyId), 10))
+ return
+ }
+
+ var sendPrefixByte, recvPrefixByte [1]byte
+
+ if myPub.Cmp(theirPub) > 0 {
+ // we're the high end
+ sendPrefixByte[0], recvPrefixByte[0] = 1, 2
+ } else {
+ // we're the low end
+ sendPrefixByte[0], recvPrefixByte[0] = 2, 1
+ }
+
+ s := new(big.Int).Exp(theirPub, myPriv, p)
+ sBytes := appendMPI(nil, s)
+
+ h := sha1.New()
+ h.Write(sendPrefixByte[:])
+ h.Write(sBytes)
+ slot.sendAESKey = h.Sum(slot.sendAESKey[:0])[:16]
+
+ h.Reset()
+ h.Write(slot.sendAESKey)
+ slot.sendMACKey = h.Sum(slot.sendMACKey[:0])
+
+ h.Reset()
+ h.Write(recvPrefixByte[:])
+ h.Write(sBytes)
+ slot.recvAESKey = h.Sum(slot.recvAESKey[:0])[:16]
+
+ h.Reset()
+ h.Write(slot.recvAESKey)
+ slot.recvMACKey = h.Sum(slot.recvMACKey[:0])
+
+ slot.theirKeyId = theirKeyId
+ slot.myKeyId = myKeyId
+ slot.used = true
+
+ zero(slot.theirLastCtr[:])
+ return
+}
+
+func (c *Conversation) calcAKEKeys(s *big.Int) {
+ mpi := appendMPI(nil, s)
+ h := sha256.New()
+
+ var cBytes [32]byte
+ hashWithPrefix(c.SSID[:], 0, mpi, h)
+
+ hashWithPrefix(cBytes[:], 1, mpi, h)
+ copy(c.revealKeys.c[:], cBytes[:16])
+ copy(c.sigKeys.c[:], cBytes[16:])
+
+ hashWithPrefix(c.revealKeys.m1[:], 2, mpi, h)
+ hashWithPrefix(c.revealKeys.m2[:], 3, mpi, h)
+ hashWithPrefix(c.sigKeys.m1[:], 4, mpi, h)
+ hashWithPrefix(c.sigKeys.m2[:], 5, mpi, h)
+}
+
+func hashWithPrefix(out []byte, prefix byte, in []byte, h hash.Hash) {
+ h.Reset()
+ var p [1]byte
+ p[0] = prefix
+ h.Write(p[:])
+ h.Write(in)
+ if len(out) == h.Size() {
+ h.Sum(out[:0])
+ } else {
+ digest := h.Sum(nil)
+ copy(out, digest)
+ }
+}
+
+func (c *Conversation) encode(msg []byte) [][]byte {
+ b64 := make([]byte, base64.StdEncoding.EncodedLen(len(msg))+len(msgPrefix)+1)
+ base64.StdEncoding.Encode(b64[len(msgPrefix):], msg)
+ copy(b64, msgPrefix)
+ b64[len(b64)-1] = '.'
+
+ if c.FragmentSize < minFragmentSize || len(b64) <= c.FragmentSize {
+ // We can encode this in a single fragment.
+ return [][]byte{b64}
+ }
+
+ // We have to fragment this message.
+ var ret [][]byte
+ bytesPerFragment := c.FragmentSize - minFragmentSize
+ numFragments := (len(b64) + bytesPerFragment) / bytesPerFragment
+
+ for i := 0; i < numFragments; i++ {
+ frag := []byte("?OTR," + strconv.Itoa(i+1) + "," + strconv.Itoa(numFragments) + ",")
+ todo := bytesPerFragment
+ if todo > len(b64) {
+ todo = len(b64)
+ }
+ frag = append(frag, b64[:todo]...)
+ b64 = b64[todo:]
+ frag = append(frag, ',')
+ ret = append(ret, frag)
+ }
+
+ return ret
+}
+
+func (c *Conversation) reset() {
+ c.myKeyId = 0
+
+ for i := range c.keySlots {
+ c.keySlots[i].used = false
+ }
+}
+
+type PublicKey struct {
+ dsa.PublicKey
+}
+
+func (pk *PublicKey) Parse(in []byte) ([]byte, bool) {
+ var ok bool
+ var pubKeyType uint16
+
+ if pubKeyType, in, ok = getU16(in); !ok || pubKeyType != 0 {
+ return nil, false
+ }
+ if pk.P, in, ok = getMPI(in); !ok {
+ return nil, false
+ }
+ if pk.Q, in, ok = getMPI(in); !ok {
+ return nil, false
+ }
+ if pk.G, in, ok = getMPI(in); !ok {
+ return nil, false
+ }
+ if pk.Y, in, ok = getMPI(in); !ok {
+ return nil, false
+ }
+
+ return in, true
+}
+
+func (pk *PublicKey) Serialize(in []byte) []byte {
+ in = appendU16(in, 0)
+ in = appendMPI(in, pk.P)
+ in = appendMPI(in, pk.Q)
+ in = appendMPI(in, pk.G)
+ in = appendMPI(in, pk.Y)
+ return in
+}
+
+// Fingerprint returns the 20-byte, binary fingerprint of the PublicKey.
+func (pk *PublicKey) Fingerprint() []byte {
+ b := pk.Serialize(nil)
+ h := sha1.New()
+ h.Write(b[2:])
+ return h.Sum(nil)
+}
+
+func (pk *PublicKey) Verify(hashed, sig []byte) ([]byte, bool) {
+ if len(sig) != 2*dsaSubgroupBytes {
+ return nil, false
+ }
+ r := new(big.Int).SetBytes(sig[:dsaSubgroupBytes])
+ s := new(big.Int).SetBytes(sig[dsaSubgroupBytes:])
+ ok := dsa.Verify(&pk.PublicKey, hashed, r, s)
+ return sig[dsaSubgroupBytes*2:], ok
+}
+
+type PrivateKey struct {
+ PublicKey
+ dsa.PrivateKey
+}
+
+func (priv *PrivateKey) Sign(rand io.Reader, hashed []byte) []byte {
+ r, s, err := dsa.Sign(rand, &priv.PrivateKey, hashed)
+ if err != nil {
+ panic(err.Error())
+ }
+ rBytes := r.Bytes()
+ sBytes := s.Bytes()
+ if len(rBytes) > dsaSubgroupBytes || len(sBytes) > dsaSubgroupBytes {
+ panic("DSA signature too large")
+ }
+
+ out := make([]byte, 2*dsaSubgroupBytes)
+ copy(out[dsaSubgroupBytes-len(rBytes):], rBytes)
+ copy(out[len(out)-len(sBytes):], sBytes)
+ return out
+}
+
+func (priv *PrivateKey) Serialize(in []byte) []byte {
+ in = priv.PublicKey.Serialize(in)
+ in = appendMPI(in, priv.PrivateKey.X)
+ return in
+}
+
+func (priv *PrivateKey) Parse(in []byte) ([]byte, bool) {
+ in, ok := priv.PublicKey.Parse(in)
+ if !ok {
+ return in, ok
+ }
+ priv.PrivateKey.PublicKey = priv.PublicKey.PublicKey
+ priv.PrivateKey.X, in, ok = getMPI(in)
+ return in, ok
+}
+
+func (priv *PrivateKey) Generate(rand io.Reader) {
+ if err := dsa.GenerateParameters(&priv.PrivateKey.PublicKey.Parameters, rand, dsa.L1024N160); err != nil {
+ panic(err.Error())
+ }
+ if err := dsa.GenerateKey(&priv.PrivateKey, rand); err != nil {
+ panic(err.Error())
+ }
+ priv.PublicKey.PublicKey = priv.PrivateKey.PublicKey
+}
+
+func notHex(r rune) bool {
+ if r >= '0' && r <= '9' ||
+ r >= 'a' && r <= 'f' ||
+ r >= 'A' && r <= 'F' {
+ return false
+ }
+
+ return true
+}
+
+// Import parses the contents of a libotr private key file.
+func (priv *PrivateKey) Import(in []byte) bool {
+ mpiStart := []byte(" #")
+
+ mpis := make([]*big.Int, 5)
+
+ for i := 0; i < len(mpis); i++ {
+ start := bytes.Index(in, mpiStart)
+ if start == -1 {
+ return false
+ }
+ in = in[start+len(mpiStart):]
+ end := bytes.IndexFunc(in, notHex)
+ if end == -1 {
+ return false
+ }
+ hexBytes := in[:end]
+ in = in[end:]
+
+ if len(hexBytes)&1 != 0 {
+ return false
+ }
+
+ mpiBytes := make([]byte, len(hexBytes)/2)
+ if _, err := hex.Decode(mpiBytes, hexBytes); err != nil {
+ return false
+ }
+
+ mpis[i] = new(big.Int).SetBytes(mpiBytes)
+ }
+
+ for _, mpi := range mpis {
+ if mpi.Sign() <= 0 {
+ return false
+ }
+ }
+
+ priv.PrivateKey.P = mpis[0]
+ priv.PrivateKey.Q = mpis[1]
+ priv.PrivateKey.G = mpis[2]
+ priv.PrivateKey.Y = mpis[3]
+ priv.PrivateKey.X = mpis[4]
+ priv.PublicKey.PublicKey = priv.PrivateKey.PublicKey
+
+ a := new(big.Int).Exp(priv.PrivateKey.G, priv.PrivateKey.X, priv.PrivateKey.P)
+ return a.Cmp(priv.PrivateKey.Y) == 0
+}
+
+func getU8(in []byte) (uint8, []byte, bool) {
+ if len(in) < 1 {
+ return 0, in, false
+ }
+ return in[0], in[1:], true
+}
+
+func getU16(in []byte) (uint16, []byte, bool) {
+ if len(in) < 2 {
+ return 0, in, false
+ }
+ r := uint16(in[0])<<8 | uint16(in[1])
+ return r, in[2:], true
+}
+
+func getU32(in []byte) (uint32, []byte, bool) {
+ if len(in) < 4 {
+ return 0, in, false
+ }
+ r := uint32(in[0])<<24 | uint32(in[1])<<16 | uint32(in[2])<<8 | uint32(in[3])
+ return r, in[4:], true
+}
+
+func getMPI(in []byte) (*big.Int, []byte, bool) {
+ l, in, ok := getU32(in)
+ if !ok || uint32(len(in)) < l {
+ return nil, in, false
+ }
+ r := new(big.Int).SetBytes(in[:l])
+ return r, in[l:], true
+}
+
+func getData(in []byte) ([]byte, []byte, bool) {
+ l, in, ok := getU32(in)
+ if !ok || uint32(len(in)) < l {
+ return nil, in, false
+ }
+ return in[:l], in[l:], true
+}
+
+func getNBytes(in []byte, n int) ([]byte, []byte, bool) {
+ if len(in) < n {
+ return nil, in, false
+ }
+ return in[:n], in[n:], true
+}
+
+func appendU16(out []byte, v uint16) []byte {
+ out = append(out, byte(v>>8), byte(v))
+ return out
+}
+
+func appendU32(out []byte, v uint32) []byte {
+ out = append(out, byte(v>>24), byte(v>>16), byte(v>>8), byte(v))
+ return out
+}
+
+func appendData(out, v []byte) []byte {
+ out = appendU32(out, uint32(len(v)))
+ out = append(out, v...)
+ return out
+}
+
+func appendMPI(out []byte, v *big.Int) []byte {
+ vBytes := v.Bytes()
+ out = appendU32(out, uint32(len(vBytes)))
+ out = append(out, vBytes...)
+ return out
+}
+
+func appendMPIs(out []byte, mpis ...*big.Int) []byte {
+ for _, mpi := range mpis {
+ out = appendMPI(out, mpi)
+ }
+ return out
+}
+
+func zero(b []byte) {
+ for i := range b {
+ b[i] = 0
+ }
+}
diff --git a/vendor/golang.org/x/crypto/otr/smp.go b/vendor/golang.org/x/crypto/otr/smp.go
new file mode 100644
index 000000000..dc6de4ee0
--- /dev/null
+++ b/vendor/golang.org/x/crypto/otr/smp.go
@@ -0,0 +1,572 @@
+// 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.
+
+// This file implements the Socialist Millionaires Protocol as described in
+// http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html. The protocol
+// specification is required in order to understand this code and, where
+// possible, the variable names in the code match up with the spec.
+
+package otr
+
+import (
+ "bytes"
+ "crypto/sha256"
+ "errors"
+ "hash"
+ "math/big"
+)
+
+type smpFailure string
+
+func (s smpFailure) Error() string {
+ return string(s)
+}
+
+var smpFailureError = smpFailure("otr: SMP protocol failed")
+var smpSecretMissingError = smpFailure("otr: mutual secret needed")
+
+const smpVersion = 1
+
+const (
+ smpState1 = iota
+ smpState2
+ smpState3
+ smpState4
+)
+
+type smpState struct {
+ state int
+ a2, a3, b2, b3, pb, qb *big.Int
+ g2a, g3a *big.Int
+ g2, g3 *big.Int
+ g3b, papb, qaqb, ra *big.Int
+ saved *tlv
+ secret *big.Int
+ question string
+}
+
+func (c *Conversation) startSMP(question string) (tlvs []tlv) {
+ if c.smp.state != smpState1 {
+ tlvs = append(tlvs, c.generateSMPAbort())
+ }
+ tlvs = append(tlvs, c.generateSMP1(question))
+ c.smp.question = ""
+ c.smp.state = smpState2
+ return
+}
+
+func (c *Conversation) resetSMP() {
+ c.smp.state = smpState1
+ c.smp.secret = nil
+ c.smp.question = ""
+}
+
+func (c *Conversation) processSMP(in tlv) (out tlv, complete bool, err error) {
+ data := in.data
+
+ switch in.typ {
+ case tlvTypeSMPAbort:
+ if c.smp.state != smpState1 {
+ err = smpFailureError
+ }
+ c.resetSMP()
+ return
+ case tlvTypeSMP1WithQuestion:
+ // We preprocess this into a SMP1 message.
+ nulPos := bytes.IndexByte(data, 0)
+ if nulPos == -1 {
+ err = errors.New("otr: SMP message with question didn't contain a NUL byte")
+ return
+ }
+ c.smp.question = string(data[:nulPos])
+ data = data[nulPos+1:]
+ }
+
+ numMPIs, data, ok := getU32(data)
+ if !ok || numMPIs > 20 {
+ err = errors.New("otr: corrupt SMP message")
+ return
+ }
+
+ mpis := make([]*big.Int, numMPIs)
+ for i := range mpis {
+ var ok bool
+ mpis[i], data, ok = getMPI(data)
+ if !ok {
+ err = errors.New("otr: corrupt SMP message")
+ return
+ }
+ }
+
+ switch in.typ {
+ case tlvTypeSMP1, tlvTypeSMP1WithQuestion:
+ if c.smp.state != smpState1 {
+ c.resetSMP()
+ out = c.generateSMPAbort()
+ return
+ }
+ if c.smp.secret == nil {
+ err = smpSecretMissingError
+ return
+ }
+ if err = c.processSMP1(mpis); err != nil {
+ return
+ }
+ c.smp.state = smpState3
+ out = c.generateSMP2()
+ case tlvTypeSMP2:
+ if c.smp.state != smpState2 {
+ c.resetSMP()
+ out = c.generateSMPAbort()
+ return
+ }
+ if out, err = c.processSMP2(mpis); err != nil {
+ out = c.generateSMPAbort()
+ return
+ }
+ c.smp.state = smpState4
+ case tlvTypeSMP3:
+ if c.smp.state != smpState3 {
+ c.resetSMP()
+ out = c.generateSMPAbort()
+ return
+ }
+ if out, err = c.processSMP3(mpis); err != nil {
+ return
+ }
+ c.smp.state = smpState1
+ c.smp.secret = nil
+ complete = true
+ case tlvTypeSMP4:
+ if c.smp.state != smpState4 {
+ c.resetSMP()
+ out = c.generateSMPAbort()
+ return
+ }
+ if err = c.processSMP4(mpis); err != nil {
+ out = c.generateSMPAbort()
+ return
+ }
+ c.smp.state = smpState1
+ c.smp.secret = nil
+ complete = true
+ default:
+ panic("unknown SMP message")
+ }
+
+ return
+}
+
+func (c *Conversation) calcSMPSecret(mutualSecret []byte, weStarted bool) {
+ h := sha256.New()
+ h.Write([]byte{smpVersion})
+ if weStarted {
+ h.Write(c.PrivateKey.PublicKey.Fingerprint())
+ h.Write(c.TheirPublicKey.Fingerprint())
+ } else {
+ h.Write(c.TheirPublicKey.Fingerprint())
+ h.Write(c.PrivateKey.PublicKey.Fingerprint())
+ }
+ h.Write(c.SSID[:])
+ h.Write(mutualSecret)
+ c.smp.secret = new(big.Int).SetBytes(h.Sum(nil))
+}
+
+func (c *Conversation) generateSMP1(question string) tlv {
+ var randBuf [16]byte
+ c.smp.a2 = c.randMPI(randBuf[:])
+ c.smp.a3 = c.randMPI(randBuf[:])
+ g2a := new(big.Int).Exp(g, c.smp.a2, p)
+ g3a := new(big.Int).Exp(g, c.smp.a3, p)
+ h := sha256.New()
+
+ r2 := c.randMPI(randBuf[:])
+ r := new(big.Int).Exp(g, r2, p)
+ c2 := new(big.Int).SetBytes(hashMPIs(h, 1, r))
+ d2 := new(big.Int).Mul(c.smp.a2, c2)
+ d2.Sub(r2, d2)
+ d2.Mod(d2, q)
+ if d2.Sign() < 0 {
+ d2.Add(d2, q)
+ }
+
+ r3 := c.randMPI(randBuf[:])
+ r.Exp(g, r3, p)
+ c3 := new(big.Int).SetBytes(hashMPIs(h, 2, r))
+ d3 := new(big.Int).Mul(c.smp.a3, c3)
+ d3.Sub(r3, d3)
+ d3.Mod(d3, q)
+ if d3.Sign() < 0 {
+ d3.Add(d3, q)
+ }
+
+ var ret tlv
+ if len(question) > 0 {
+ ret.typ = tlvTypeSMP1WithQuestion
+ ret.data = append(ret.data, question...)
+ ret.data = append(ret.data, 0)
+ } else {
+ ret.typ = tlvTypeSMP1
+ }
+ ret.data = appendU32(ret.data, 6)
+ ret.data = appendMPIs(ret.data, g2a, c2, d2, g3a, c3, d3)
+ return ret
+}
+
+func (c *Conversation) processSMP1(mpis []*big.Int) error {
+ if len(mpis) != 6 {
+ return errors.New("otr: incorrect number of arguments in SMP1 message")
+ }
+ g2a := mpis[0]
+ c2 := mpis[1]
+ d2 := mpis[2]
+ g3a := mpis[3]
+ c3 := mpis[4]
+ d3 := mpis[5]
+ h := sha256.New()
+
+ r := new(big.Int).Exp(g, d2, p)
+ s := new(big.Int).Exp(g2a, c2, p)
+ r.Mul(r, s)
+ r.Mod(r, p)
+ t := new(big.Int).SetBytes(hashMPIs(h, 1, r))
+ if c2.Cmp(t) != 0 {
+ return errors.New("otr: ZKP c2 incorrect in SMP1 message")
+ }
+ r.Exp(g, d3, p)
+ s.Exp(g3a, c3, p)
+ r.Mul(r, s)
+ r.Mod(r, p)
+ t.SetBytes(hashMPIs(h, 2, r))
+ if c3.Cmp(t) != 0 {
+ return errors.New("otr: ZKP c3 incorrect in SMP1 message")
+ }
+
+ c.smp.g2a = g2a
+ c.smp.g3a = g3a
+ return nil
+}
+
+func (c *Conversation) generateSMP2() tlv {
+ var randBuf [16]byte
+ b2 := c.randMPI(randBuf[:])
+ c.smp.b3 = c.randMPI(randBuf[:])
+ r2 := c.randMPI(randBuf[:])
+ r3 := c.randMPI(randBuf[:])
+ r4 := c.randMPI(randBuf[:])
+ r5 := c.randMPI(randBuf[:])
+ r6 := c.randMPI(randBuf[:])
+
+ g2b := new(big.Int).Exp(g, b2, p)
+ g3b := new(big.Int).Exp(g, c.smp.b3, p)
+
+ r := new(big.Int).Exp(g, r2, p)
+ h := sha256.New()
+ c2 := new(big.Int).SetBytes(hashMPIs(h, 3, r))
+ d2 := new(big.Int).Mul(b2, c2)
+ d2.Sub(r2, d2)
+ d2.Mod(d2, q)
+ if d2.Sign() < 0 {
+ d2.Add(d2, q)
+ }
+
+ r.Exp(g, r3, p)
+ c3 := new(big.Int).SetBytes(hashMPIs(h, 4, r))
+ d3 := new(big.Int).Mul(c.smp.b3, c3)
+ d3.Sub(r3, d3)
+ d3.Mod(d3, q)
+ if d3.Sign() < 0 {
+ d3.Add(d3, q)
+ }
+
+ c.smp.g2 = new(big.Int).Exp(c.smp.g2a, b2, p)
+ c.smp.g3 = new(big.Int).Exp(c.smp.g3a, c.smp.b3, p)
+ c.smp.pb = new(big.Int).Exp(c.smp.g3, r4, p)
+ c.smp.qb = new(big.Int).Exp(g, r4, p)
+ r.Exp(c.smp.g2, c.smp.secret, p)
+ c.smp.qb.Mul(c.smp.qb, r)
+ c.smp.qb.Mod(c.smp.qb, p)
+
+ s := new(big.Int)
+ s.Exp(c.smp.g2, r6, p)
+ r.Exp(g, r5, p)
+ s.Mul(r, s)
+ s.Mod(s, p)
+ r.Exp(c.smp.g3, r5, p)
+ cp := new(big.Int).SetBytes(hashMPIs(h, 5, r, s))
+
+ // D5 = r5 - r4 cP mod q and D6 = r6 - y cP mod q
+
+ s.Mul(r4, cp)
+ r.Sub(r5, s)
+ d5 := new(big.Int).Mod(r, q)
+ if d5.Sign() < 0 {
+ d5.Add(d5, q)
+ }
+
+ s.Mul(c.smp.secret, cp)
+ r.Sub(r6, s)
+ d6 := new(big.Int).Mod(r, q)
+ if d6.Sign() < 0 {
+ d6.Add(d6, q)
+ }
+
+ var ret tlv
+ ret.typ = tlvTypeSMP2
+ ret.data = appendU32(ret.data, 11)
+ ret.data = appendMPIs(ret.data, g2b, c2, d2, g3b, c3, d3, c.smp.pb, c.smp.qb, cp, d5, d6)
+ return ret
+}
+
+func (c *Conversation) processSMP2(mpis []*big.Int) (out tlv, err error) {
+ if len(mpis) != 11 {
+ err = errors.New("otr: incorrect number of arguments in SMP2 message")
+ return
+ }
+ g2b := mpis[0]
+ c2 := mpis[1]
+ d2 := mpis[2]
+ g3b := mpis[3]
+ c3 := mpis[4]
+ d3 := mpis[5]
+ pb := mpis[6]
+ qb := mpis[7]
+ cp := mpis[8]
+ d5 := mpis[9]
+ d6 := mpis[10]
+ h := sha256.New()
+
+ r := new(big.Int).Exp(g, d2, p)
+ s := new(big.Int).Exp(g2b, c2, p)
+ r.Mul(r, s)
+ r.Mod(r, p)
+ s.SetBytes(hashMPIs(h, 3, r))
+ if c2.Cmp(s) != 0 {
+ err = errors.New("otr: ZKP c2 failed in SMP2 message")
+ return
+ }
+
+ r.Exp(g, d3, p)
+ s.Exp(g3b, c3, p)
+ r.Mul(r, s)
+ r.Mod(r, p)
+ s.SetBytes(hashMPIs(h, 4, r))
+ if c3.Cmp(s) != 0 {
+ err = errors.New("otr: ZKP c3 failed in SMP2 message")
+ return
+ }
+
+ c.smp.g2 = new(big.Int).Exp(g2b, c.smp.a2, p)
+ c.smp.g3 = new(big.Int).Exp(g3b, c.smp.a3, p)
+
+ r.Exp(g, d5, p)
+ s.Exp(c.smp.g2, d6, p)
+ r.Mul(r, s)
+ s.Exp(qb, cp, p)
+ r.Mul(r, s)
+ r.Mod(r, p)
+
+ s.Exp(c.smp.g3, d5, p)
+ t := new(big.Int).Exp(pb, cp, p)
+ s.Mul(s, t)
+ s.Mod(s, p)
+ t.SetBytes(hashMPIs(h, 5, s, r))
+ if cp.Cmp(t) != 0 {
+ err = errors.New("otr: ZKP cP failed in SMP2 message")
+ return
+ }
+
+ var randBuf [16]byte
+ r4 := c.randMPI(randBuf[:])
+ r5 := c.randMPI(randBuf[:])
+ r6 := c.randMPI(randBuf[:])
+ r7 := c.randMPI(randBuf[:])
+
+ pa := new(big.Int).Exp(c.smp.g3, r4, p)
+ r.Exp(c.smp.g2, c.smp.secret, p)
+ qa := new(big.Int).Exp(g, r4, p)
+ qa.Mul(qa, r)
+ qa.Mod(qa, p)
+
+ r.Exp(g, r5, p)
+ s.Exp(c.smp.g2, r6, p)
+ r.Mul(r, s)
+ r.Mod(r, p)
+
+ s.Exp(c.smp.g3, r5, p)
+ cp.SetBytes(hashMPIs(h, 6, s, r))
+
+ r.Mul(r4, cp)
+ d5 = new(big.Int).Sub(r5, r)
+ d5.Mod(d5, q)
+ if d5.Sign() < 0 {
+ d5.Add(d5, q)
+ }
+
+ r.Mul(c.smp.secret, cp)
+ d6 = new(big.Int).Sub(r6, r)
+ d6.Mod(d6, q)
+ if d6.Sign() < 0 {
+ d6.Add(d6, q)
+ }
+
+ r.ModInverse(qb, p)
+ qaqb := new(big.Int).Mul(qa, r)
+ qaqb.Mod(qaqb, p)
+
+ ra := new(big.Int).Exp(qaqb, c.smp.a3, p)
+ r.Exp(qaqb, r7, p)
+ s.Exp(g, r7, p)
+ cr := new(big.Int).SetBytes(hashMPIs(h, 7, s, r))
+
+ r.Mul(c.smp.a3, cr)
+ d7 := new(big.Int).Sub(r7, r)
+ d7.Mod(d7, q)
+ if d7.Sign() < 0 {
+ d7.Add(d7, q)
+ }
+
+ c.smp.g3b = g3b
+ c.smp.qaqb = qaqb
+
+ r.ModInverse(pb, p)
+ c.smp.papb = new(big.Int).Mul(pa, r)
+ c.smp.papb.Mod(c.smp.papb, p)
+ c.smp.ra = ra
+
+ out.typ = tlvTypeSMP3
+ out.data = appendU32(out.data, 8)
+ out.data = appendMPIs(out.data, pa, qa, cp, d5, d6, ra, cr, d7)
+ return
+}
+
+func (c *Conversation) processSMP3(mpis []*big.Int) (out tlv, err error) {
+ if len(mpis) != 8 {
+ err = errors.New("otr: incorrect number of arguments in SMP3 message")
+ return
+ }
+ pa := mpis[0]
+ qa := mpis[1]
+ cp := mpis[2]
+ d5 := mpis[3]
+ d6 := mpis[4]
+ ra := mpis[5]
+ cr := mpis[6]
+ d7 := mpis[7]
+ h := sha256.New()
+
+ r := new(big.Int).Exp(g, d5, p)
+ s := new(big.Int).Exp(c.smp.g2, d6, p)
+ r.Mul(r, s)
+ s.Exp(qa, cp, p)
+ r.Mul(r, s)
+ r.Mod(r, p)
+
+ s.Exp(c.smp.g3, d5, p)
+ t := new(big.Int).Exp(pa, cp, p)
+ s.Mul(s, t)
+ s.Mod(s, p)
+ t.SetBytes(hashMPIs(h, 6, s, r))
+ if t.Cmp(cp) != 0 {
+ err = errors.New("otr: ZKP cP failed in SMP3 message")
+ return
+ }
+
+ r.ModInverse(c.smp.qb, p)
+ qaqb := new(big.Int).Mul(qa, r)
+ qaqb.Mod(qaqb, p)
+
+ r.Exp(qaqb, d7, p)
+ s.Exp(ra, cr, p)
+ r.Mul(r, s)
+ r.Mod(r, p)
+
+ s.Exp(g, d7, p)
+ t.Exp(c.smp.g3a, cr, p)
+ s.Mul(s, t)
+ s.Mod(s, p)
+ t.SetBytes(hashMPIs(h, 7, s, r))
+ if t.Cmp(cr) != 0 {
+ err = errors.New("otr: ZKP cR failed in SMP3 message")
+ return
+ }
+
+ var randBuf [16]byte
+ r7 := c.randMPI(randBuf[:])
+ rb := new(big.Int).Exp(qaqb, c.smp.b3, p)
+
+ r.Exp(qaqb, r7, p)
+ s.Exp(g, r7, p)
+ cr = new(big.Int).SetBytes(hashMPIs(h, 8, s, r))
+
+ r.Mul(c.smp.b3, cr)
+ d7 = new(big.Int).Sub(r7, r)
+ d7.Mod(d7, q)
+ if d7.Sign() < 0 {
+ d7.Add(d7, q)
+ }
+
+ out.typ = tlvTypeSMP4
+ out.data = appendU32(out.data, 3)
+ out.data = appendMPIs(out.data, rb, cr, d7)
+
+ r.ModInverse(c.smp.pb, p)
+ r.Mul(pa, r)
+ r.Mod(r, p)
+ s.Exp(ra, c.smp.b3, p)
+ if r.Cmp(s) != 0 {
+ err = smpFailureError
+ }
+
+ return
+}
+
+func (c *Conversation) processSMP4(mpis []*big.Int) error {
+ if len(mpis) != 3 {
+ return errors.New("otr: incorrect number of arguments in SMP4 message")
+ }
+ rb := mpis[0]
+ cr := mpis[1]
+ d7 := mpis[2]
+ h := sha256.New()
+
+ r := new(big.Int).Exp(c.smp.qaqb, d7, p)
+ s := new(big.Int).Exp(rb, cr, p)
+ r.Mul(r, s)
+ r.Mod(r, p)
+
+ s.Exp(g, d7, p)
+ t := new(big.Int).Exp(c.smp.g3b, cr, p)
+ s.Mul(s, t)
+ s.Mod(s, p)
+ t.SetBytes(hashMPIs(h, 8, s, r))
+ if t.Cmp(cr) != 0 {
+ return errors.New("otr: ZKP cR failed in SMP4 message")
+ }
+
+ r.Exp(rb, c.smp.a3, p)
+ if r.Cmp(c.smp.papb) != 0 {
+ return smpFailureError
+ }
+
+ return nil
+}
+
+func (c *Conversation) generateSMPAbort() tlv {
+ return tlv{typ: tlvTypeSMPAbort}
+}
+
+func hashMPIs(h hash.Hash, magic byte, mpis ...*big.Int) []byte {
+ if h != nil {
+ h.Reset()
+ } else {
+ h = sha256.New()
+ }
+
+ h.Write([]byte{magic})
+ for _, mpi := range mpis {
+ h.Write(appendMPI(nil, mpi))
+ }
+ return h.Sum(nil)
+}
diff --git a/vendor/golang.org/x/crypto/ssh/terminal/terminal.go b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go
index 18379a935..9a887598f 100644
--- a/vendor/golang.org/x/crypto/ssh/terminal/terminal.go
+++ b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go
@@ -617,7 +617,7 @@ func writeWithCRLF(w io.Writer, buf []byte) (n int, err error) {
if _, err = w.Write(crlf); err != nil {
return n, err
}
- n += 1
+ n++
buf = buf[1:]
}
}
diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util.go b/vendor/golang.org/x/crypto/ssh/terminal/util.go
index e7404ff49..391104084 100644
--- a/vendor/golang.org/x/crypto/ssh/terminal/util.go
+++ b/vendor/golang.org/x/crypto/ssh/terminal/util.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux,!appengine netbsd openbsd
+// +build aix darwin dragonfly freebsd linux,!appengine netbsd openbsd
// Package terminal provides support functions for dealing with terminals, as
// commonly found on UNIX systems.
@@ -17,44 +17,41 @@
package terminal // import "golang.org/x/crypto/ssh/terminal"
import (
- "syscall"
- "unsafe"
-
"golang.org/x/sys/unix"
)
// State contains the state of a terminal.
type State struct {
- termios syscall.Termios
+ termios unix.Termios
}
-// IsTerminal returns true if the given file descriptor is a terminal.
+// IsTerminal returns whether the given file descriptor is a terminal.
func IsTerminal(fd int) bool {
- var termios syscall.Termios
- _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)
- return err == 0
+ _, err := unix.IoctlGetTermios(fd, ioctlReadTermios)
+ return err == nil
}
// MakeRaw put the terminal connected to the given file descriptor into raw
// mode and returns the previous state of the terminal so that it can be
// restored.
func MakeRaw(fd int) (*State, error) {
- var oldState State
- if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 {
+ termios, err := unix.IoctlGetTermios(fd, ioctlReadTermios)
+ if err != nil {
return nil, err
}
- newState := oldState.termios
+ oldState := State{termios: *termios}
+
// This attempts to replicate the behaviour documented for cfmakeraw in
// the termios(3) manpage.
- newState.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON
- newState.Oflag &^= syscall.OPOST
- newState.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN
- newState.Cflag &^= syscall.CSIZE | syscall.PARENB
- newState.Cflag |= syscall.CS8
- newState.Cc[unix.VMIN] = 1
- newState.Cc[unix.VTIME] = 0
- if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 {
+ termios.Iflag &^= unix.IGNBRK | unix.BRKINT | unix.PARMRK | unix.ISTRIP | unix.INLCR | unix.IGNCR | unix.ICRNL | unix.IXON
+ termios.Oflag &^= unix.OPOST
+ termios.Lflag &^= unix.ECHO | unix.ECHONL | unix.ICANON | unix.ISIG | unix.IEXTEN
+ termios.Cflag &^= unix.CSIZE | unix.PARENB
+ termios.Cflag |= unix.CS8
+ termios.Cc[unix.VMIN] = 1
+ termios.Cc[unix.VTIME] = 0
+ if err := unix.IoctlSetTermios(fd, ioctlWriteTermios, termios); err != nil {
return nil, err
}
@@ -64,60 +61,54 @@ func MakeRaw(fd int) (*State, error) {
// GetState returns the current state of a terminal which may be useful to
// restore the terminal after a signal.
func GetState(fd int) (*State, error) {
- var oldState State
- if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 {
+ termios, err := unix.IoctlGetTermios(fd, ioctlReadTermios)
+ if err != nil {
return nil, err
}
- return &oldState, nil
+ return &State{termios: *termios}, nil
}
// Restore restores the terminal connected to the given file descriptor to a
// previous state.
func Restore(fd int, state *State) error {
- if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&state.termios)), 0, 0, 0); err != 0 {
- return err
- }
- return nil
+ return unix.IoctlSetTermios(fd, ioctlWriteTermios, &state.termios)
}
// GetSize returns the dimensions of the given terminal.
func GetSize(fd int) (width, height int, err error) {
- var dimensions [4]uint16
-
- if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&dimensions)), 0, 0, 0); err != 0 {
+ ws, err := unix.IoctlGetWinsize(fd, unix.TIOCGWINSZ)
+ if err != nil {
return -1, -1, err
}
- return int(dimensions[1]), int(dimensions[0]), nil
+ return int(ws.Col), int(ws.Row), nil
}
// passwordReader is an io.Reader that reads from a specific file descriptor.
type passwordReader int
func (r passwordReader) Read(buf []byte) (int, error) {
- return syscall.Read(int(r), buf)
+ return unix.Read(int(r), buf)
}
// ReadPassword reads a line of input from a terminal without local echo. This
// is commonly used for inputting passwords and other sensitive data. The slice
// returned does not include the \n.
func ReadPassword(fd int) ([]byte, error) {
- var oldState syscall.Termios
- if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0); err != 0 {
+ termios, err := unix.IoctlGetTermios(fd, ioctlReadTermios)
+ if err != nil {
return nil, err
}
- newState := oldState
- newState.Lflag &^= syscall.ECHO
- newState.Lflag |= syscall.ICANON | syscall.ISIG
- newState.Iflag |= syscall.ICRNL
- if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 {
+ newState := *termios
+ newState.Lflag &^= unix.ECHO
+ newState.Lflag |= unix.ICANON | unix.ISIG
+ newState.Iflag |= unix.ICRNL
+ if err := unix.IoctlSetTermios(fd, ioctlWriteTermios, &newState); err != nil {
return nil, err
}
- defer func() {
- syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0)
- }()
+ defer unix.IoctlSetTermios(fd, ioctlWriteTermios, termios)
return readPasswordLine(passwordReader(fd))
}
diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_aix.go b/vendor/golang.org/x/crypto/ssh/terminal/util_aix.go
new file mode 100644
index 000000000..dfcd62785
--- /dev/null
+++ b/vendor/golang.org/x/crypto/ssh/terminal/util_aix.go
@@ -0,0 +1,12 @@
+// 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.
+
+// +build aix
+
+package terminal
+
+import "golang.org/x/sys/unix"
+
+const ioctlReadTermios = unix.TCGETS
+const ioctlWriteTermios = unix.TCSETS
diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go b/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go
index 799f049f0..9317ac7ed 100644
--- a/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go
+++ b/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go
@@ -21,7 +21,7 @@ import (
type State struct{}
-// IsTerminal returns true if the given file descriptor is a terminal.
+// IsTerminal returns whether the given file descriptor is a terminal.
func IsTerminal(fd int) bool {
return false
}
diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go b/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go
index a2e1b57dc..3d5f06a9f 100644
--- a/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go
+++ b/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go
@@ -14,10 +14,10 @@ import (
// State contains the state of a terminal.
type State struct {
- state *unix.Termios
+ termios unix.Termios
}
-// IsTerminal returns true if the given file descriptor is a terminal.
+// IsTerminal returns whether the given file descriptor is a terminal.
func IsTerminal(fd int) bool {
_, err := unix.IoctlGetTermio(fd, unix.TCGETA)
return err == nil
@@ -75,47 +75,43 @@ func ReadPassword(fd int) ([]byte, error) {
// restored.
// see http://cr.illumos.org/~webrev/andy_js/1060/
func MakeRaw(fd int) (*State, error) {
- oldTermiosPtr, err := unix.IoctlGetTermios(fd, unix.TCGETS)
+ termios, err := unix.IoctlGetTermios(fd, unix.TCGETS)
if err != nil {
return nil, err
}
- oldTermios := *oldTermiosPtr
-
- newTermios := oldTermios
- newTermios.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON
- newTermios.Oflag &^= syscall.OPOST
- newTermios.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN
- newTermios.Cflag &^= syscall.CSIZE | syscall.PARENB
- newTermios.Cflag |= syscall.CS8
- newTermios.Cc[unix.VMIN] = 1
- newTermios.Cc[unix.VTIME] = 0
-
- if err := unix.IoctlSetTermios(fd, unix.TCSETS, &newTermios); err != nil {
+
+ oldState := State{termios: *termios}
+
+ termios.Iflag &^= unix.IGNBRK | unix.BRKINT | unix.PARMRK | unix.ISTRIP | unix.INLCR | unix.IGNCR | unix.ICRNL | unix.IXON
+ termios.Oflag &^= unix.OPOST
+ termios.Lflag &^= unix.ECHO | unix.ECHONL | unix.ICANON | unix.ISIG | unix.IEXTEN
+ termios.Cflag &^= unix.CSIZE | unix.PARENB
+ termios.Cflag |= unix.CS8
+ termios.Cc[unix.VMIN] = 1
+ termios.Cc[unix.VTIME] = 0
+
+ if err := unix.IoctlSetTermios(fd, unix.TCSETS, termios); err != nil {
return nil, err
}
- return &State{
- state: oldTermiosPtr,
- }, nil
+ return &oldState, nil
}
// Restore restores the terminal connected to the given file descriptor to a
// previous state.
func Restore(fd int, oldState *State) error {
- return unix.IoctlSetTermios(fd, unix.TCSETS, oldState.state)
+ return unix.IoctlSetTermios(fd, unix.TCSETS, &oldState.termios)
}
// GetState returns the current state of a terminal which may be useful to
// restore the terminal after a signal.
func GetState(fd int) (*State, error) {
- oldTermiosPtr, err := unix.IoctlGetTermios(fd, unix.TCGETS)
+ termios, err := unix.IoctlGetTermios(fd, unix.TCGETS)
if err != nil {
return nil, err
}
- return &State{
- state: oldTermiosPtr,
- }, nil
+ return &State{termios: *termios}, nil
}
// GetSize returns the dimensions of the given terminal.
diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go b/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go
index 60979ccd0..6cb8a9503 100644
--- a/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go
+++ b/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go
@@ -17,6 +17,8 @@
package terminal
import (
+ "os"
+
"golang.org/x/sys/windows"
)
@@ -24,7 +26,7 @@ type State struct {
mode uint32
}
-// IsTerminal returns true if the given file descriptor is a terminal.
+// IsTerminal returns whether the given file descriptor is a terminal.
func IsTerminal(fd int) bool {
var st uint32
err := windows.GetConsoleMode(windows.Handle(fd), &st)
@@ -71,13 +73,6 @@ func GetSize(fd int) (width, height int, err error) {
return int(info.Size.X), int(info.Size.Y), nil
}
-// passwordReader is an io.Reader that reads from a specific Windows HANDLE.
-type passwordReader int
-
-func (r passwordReader) Read(buf []byte) (int, error) {
- return windows.Read(windows.Handle(r), buf)
-}
-
// ReadPassword reads a line of input from a terminal without local echo. This
// is commonly used for inputting passwords and other sensitive data. The slice
// returned does not include the \n.
@@ -94,9 +89,15 @@ func ReadPassword(fd int) ([]byte, error) {
return nil, err
}
- defer func() {
- windows.SetConsoleMode(windows.Handle(fd), old)
- }()
+ defer windows.SetConsoleMode(windows.Handle(fd), old)
+
+ var h windows.Handle
+ p, _ := windows.GetCurrentProcess()
+ if err := windows.DuplicateHandle(p, windows.Handle(fd), p, &h, 0, false, windows.DUPLICATE_SAME_ACCESS); err != nil {
+ return nil, err
+ }
- return readPasswordLine(passwordReader(fd))
+ f := os.NewFile(uintptr(h), "stdin")
+ defer f.Close()
+ return readPasswordLine(f)
}
diff --git a/vendor/golang.org/x/crypto/ssh/test/doc.go b/vendor/golang.org/x/crypto/ssh/test/doc.go
new file mode 100644
index 000000000..198f0ca1e
--- /dev/null
+++ b/vendor/golang.org/x/crypto/ssh/test/doc.go
@@ -0,0 +1,7 @@
+// 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.
+
+// Package test contains integration tests for the
+// golang.org/x/crypto/ssh package.
+package test // import "golang.org/x/crypto/ssh/test"
diff --git a/vendor/golang.org/x/crypto/ssh/test/sshd_test_pw.c b/vendor/golang.org/x/crypto/ssh/test/sshd_test_pw.c
new file mode 100644
index 000000000..2794a563a
--- /dev/null
+++ b/vendor/golang.org/x/crypto/ssh/test/sshd_test_pw.c
@@ -0,0 +1,173 @@
+// 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.
+
+// sshd_test_pw.c
+// Wrapper to inject test password data for sshd PAM authentication
+//
+// This wrapper implements custom versions of getpwnam, getpwnam_r,
+// getspnam and getspnam_r. These functions first call their real
+// libc versions, then check if the requested user matches test user
+// specified in env variable TEST_USER and if so replace the password
+// with crypted() value of TEST_PASSWD env variable.
+//
+// Compile:
+// gcc -Wall -shared -o sshd_test_pw.so -fPIC sshd_test_pw.c
+//
+// Compile with debug:
+// gcc -DVERBOSE -Wall -shared -o sshd_test_pw.so -fPIC sshd_test_pw.c
+//
+// Run sshd:
+// LD_PRELOAD="sshd_test_pw.so" TEST_USER="..." TEST_PASSWD="..." sshd ...
+
+// +build ignore
+
+#define _GNU_SOURCE
+#include <string.h>
+#include <pwd.h>
+#include <shadow.h>
+#include <dlfcn.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+
+#ifdef VERBOSE
+#define DEBUG(X...) fprintf(stderr, X)
+#else
+#define DEBUG(X...) while (0) { }
+#endif
+
+/* crypt() password */
+static char *
+pwhash(char *passwd) {
+ return strdup(crypt(passwd, "$6$"));
+}
+
+/* Pointers to real functions in libc */
+static struct passwd * (*real_getpwnam)(const char *) = NULL;
+static int (*real_getpwnam_r)(const char *, struct passwd *, char *, size_t, struct passwd **) = NULL;
+static struct spwd * (*real_getspnam)(const char *) = NULL;
+static int (*real_getspnam_r)(const char *, struct spwd *, char *, size_t, struct spwd **) = NULL;
+
+/* Cached test user and test password */
+static char *test_user = NULL;
+static char *test_passwd_hash = NULL;
+
+static void
+init(void) {
+ /* Fetch real libc function pointers */
+ real_getpwnam = dlsym(RTLD_NEXT, "getpwnam");
+ real_getpwnam_r = dlsym(RTLD_NEXT, "getpwnam_r");
+ real_getspnam = dlsym(RTLD_NEXT, "getspnam");
+ real_getspnam_r = dlsym(RTLD_NEXT, "getspnam_r");
+
+ /* abort if env variables are not defined */
+ if (getenv("TEST_USER") == NULL || getenv("TEST_PASSWD") == NULL) {
+ fprintf(stderr, "env variables TEST_USER and TEST_PASSWD are missing\n");
+ abort();
+ }
+
+ /* Fetch test user and test password from env */
+ test_user = strdup(getenv("TEST_USER"));
+ test_passwd_hash = pwhash(getenv("TEST_PASSWD"));
+
+ DEBUG("sshd_test_pw init():\n");
+ DEBUG("\treal_getpwnam: %p\n", real_getpwnam);
+ DEBUG("\treal_getpwnam_r: %p\n", real_getpwnam_r);
+ DEBUG("\treal_getspnam: %p\n", real_getspnam);
+ DEBUG("\treal_getspnam_r: %p\n", real_getspnam_r);
+ DEBUG("\tTEST_USER: '%s'\n", test_user);
+ DEBUG("\tTEST_PASSWD: '%s'\n", getenv("TEST_PASSWD"));
+ DEBUG("\tTEST_PASSWD_HASH: '%s'\n", test_passwd_hash);
+}
+
+static int
+is_test_user(const char *name) {
+ if (test_user != NULL && strcmp(test_user, name) == 0)
+ return 1;
+ return 0;
+}
+
+/* getpwnam */
+
+struct passwd *
+getpwnam(const char *name) {
+ struct passwd *pw;
+
+ DEBUG("sshd_test_pw getpwnam(%s)\n", name);
+
+ if (real_getpwnam == NULL)
+ init();
+ if ((pw = real_getpwnam(name)) == NULL)
+ return NULL;
+
+ if (is_test_user(name))
+ pw->pw_passwd = strdup(test_passwd_hash);
+
+ return pw;
+}
+
+/* getpwnam_r */
+
+int
+getpwnam_r(const char *name,
+ struct passwd *pwd,
+ char *buf,
+ size_t buflen,
+ struct passwd **result) {
+ int r;
+
+ DEBUG("sshd_test_pw getpwnam_r(%s)\n", name);
+
+ if (real_getpwnam_r == NULL)
+ init();
+ if ((r = real_getpwnam_r(name, pwd, buf, buflen, result)) != 0 || *result == NULL)
+ return r;
+
+ if (is_test_user(name))
+ pwd->pw_passwd = strdup(test_passwd_hash);
+
+ return 0;
+}
+
+/* getspnam */
+
+struct spwd *
+getspnam(const char *name) {
+ struct spwd *sp;
+
+ DEBUG("sshd_test_pw getspnam(%s)\n", name);
+
+ if (real_getspnam == NULL)
+ init();
+ if ((sp = real_getspnam(name)) == NULL)
+ return NULL;
+
+ if (is_test_user(name))
+ sp->sp_pwdp = strdup(test_passwd_hash);
+
+ return sp;
+}
+
+/* getspnam_r */
+
+int
+getspnam_r(const char *name,
+ struct spwd *spbuf,
+ char *buf,
+ size_t buflen,
+ struct spwd **spbufp) {
+ int r;
+
+ DEBUG("sshd_test_pw getspnam_r(%s)\n", name);
+
+ if (real_getspnam_r == NULL)
+ init();
+ if ((r = real_getspnam_r(name, spbuf, buf, buflen, spbufp)) != 0)
+ return r;
+
+ if (is_test_user(name))
+ spbuf->sp_pwdp = strdup(test_passwd_hash);
+
+ return r;
+}
diff --git a/vendor/golang.org/x/net/README b/vendor/golang.org/x/net/README
deleted file mode 100644
index 6b13d8e50..000000000
--- a/vendor/golang.org/x/net/README
+++ /dev/null
@@ -1,3 +0,0 @@
-This repository holds supplementary Go networking libraries.
-
-To submit changes to this repository, see http://golang.org/doc/contribute.html.
diff --git a/vendor/golang.org/x/net/README.md b/vendor/golang.org/x/net/README.md
new file mode 100644
index 000000000..00a9b6eb2
--- /dev/null
+++ b/vendor/golang.org/x/net/README.md
@@ -0,0 +1,16 @@
+# Go Networking
+
+This repository holds supplementary Go networking libraries.
+
+## Download/Install
+
+The easiest way to install is to run `go get -u golang.org/x/net`. You can
+also manually git clone the repository to `$GOPATH/src/golang.org/x/net`.
+
+## Report Issues / Send Patches
+
+This repository uses Gerrit for code changes. To learn how to submit
+changes to this repository, see https://golang.org/doc/contribute.html.
+The main issue tracker for the net repository is located at
+https://github.com/golang/go/issues. Prefix your issue with "x/net:" in the
+subject line, so it is easy to find.
diff --git a/vendor/golang.org/x/net/context/context.go b/vendor/golang.org/x/net/context/context.go
index 134654cf7..a3c021d3f 100644
--- a/vendor/golang.org/x/net/context/context.go
+++ b/vendor/golang.org/x/net/context/context.go
@@ -5,9 +5,11 @@
// Package context defines the Context type, which carries deadlines,
// cancelation signals, and other request-scoped values across API boundaries
// and between processes.
+// As of Go 1.7 this package is available in the standard library under the
+// name context. https://golang.org/pkg/context.
//
// Incoming requests to a server should create a Context, and outgoing calls to
-// servers should accept a Context. The chain of function calls between must
+// servers should accept a Context. The chain of function calls between must
// propagate the Context, optionally replacing it with a modified copy created
// using WithDeadline, WithTimeout, WithCancel, or WithValue.
//
@@ -16,14 +18,14 @@
// propagation:
//
// Do not store Contexts inside a struct type; instead, pass a Context
-// explicitly to each function that needs it. The Context should be the first
+// explicitly to each function that needs it. The Context should be the first
// parameter, typically named ctx:
//
// func DoSomething(ctx context.Context, arg Arg) error {
// // ... use ctx ...
// }
//
-// Do not pass a nil Context, even if a function permits it. Pass context.TODO
+// Do not pass a nil Context, even if a function permits it. Pass context.TODO
// if you are unsure about which Context to use.
//
// Use context Values only for request-scoped data that transits processes and
@@ -36,112 +38,15 @@
// Contexts.
package context // import "golang.org/x/net/context"
-import "time"
-
-// A Context carries a deadline, a cancelation signal, and other values across
-// API boundaries.
-//
-// Context's methods may be called by multiple goroutines simultaneously.
-type Context interface {
- // Deadline returns the time when work done on behalf of this context
- // should be canceled. Deadline returns ok==false when no deadline is
- // set. Successive calls to Deadline return the same results.
- Deadline() (deadline time.Time, ok bool)
-
- // Done returns a channel that's closed when work done on behalf of this
- // context should be canceled. Done may return nil if this context can
- // never be canceled. Successive calls to Done return the same value.
- //
- // WithCancel arranges for Done to be closed when cancel is called;
- // WithDeadline arranges for Done to be closed when the deadline
- // expires; WithTimeout arranges for Done to be closed when the timeout
- // elapses.
- //
- // Done is provided for use in select statements:
- //
- // // Stream generates values with DoSomething and sends them to out
- // // until DoSomething returns an error or ctx.Done is closed.
- // func Stream(ctx context.Context, out chan<- Value) error {
- // for {
- // v, err := DoSomething(ctx)
- // if err != nil {
- // return err
- // }
- // select {
- // case <-ctx.Done():
- // return ctx.Err()
- // case out <- v:
- // }
- // }
- // }
- //
- // See http://blog.golang.org/pipelines for more examples of how to use
- // a Done channel for cancelation.
- Done() <-chan struct{}
-
- // Err returns a non-nil error value after Done is closed. Err returns
- // Canceled if the context was canceled or DeadlineExceeded if the
- // context's deadline passed. No other values for Err are defined.
- // After Done is closed, successive calls to Err return the same value.
- Err() error
-
- // Value returns the value associated with this context for key, or nil
- // if no value is associated with key. Successive calls to Value with
- // the same key returns the same result.
- //
- // Use context values only for request-scoped data that transits
- // processes and API boundaries, not for passing optional parameters to
- // functions.
- //
- // A key identifies a specific value in a Context. Functions that wish
- // to store values in Context typically allocate a key in a global
- // variable then use that key as the argument to context.WithValue and
- // Context.Value. A key can be any type that supports equality;
- // packages should define keys as an unexported type to avoid
- // collisions.
- //
- // Packages that define a Context key should provide type-safe accessors
- // for the values stores using that key:
- //
- // // Package user defines a User type that's stored in Contexts.
- // package user
- //
- // import "golang.org/x/net/context"
- //
- // // User is the type of value stored in the Contexts.
- // type User struct {...}
- //
- // // key is an unexported type for keys defined in this package.
- // // This prevents collisions with keys defined in other packages.
- // type key int
- //
- // // userKey is the key for user.User values in Contexts. It is
- // // unexported; clients use user.NewContext and user.FromContext
- // // instead of using this key directly.
- // var userKey key = 0
- //
- // // NewContext returns a new Context that carries value u.
- // func NewContext(ctx context.Context, u *User) context.Context {
- // return context.WithValue(ctx, userKey, u)
- // }
- //
- // // FromContext returns the User value stored in ctx, if any.
- // func FromContext(ctx context.Context) (*User, bool) {
- // u, ok := ctx.Value(userKey).(*User)
- // return u, ok
- // }
- Value(key interface{}) interface{}
-}
-
// Background returns a non-nil, empty Context. It is never canceled, has no
-// values, and has no deadline. It is typically used by the main function,
+// values, and has no deadline. It is typically used by the main function,
// initialization, and tests, and as the top-level Context for incoming
// requests.
func Background() Context {
return background
}
-// TODO returns a non-nil, empty Context. Code should use context.TODO when
+// TODO returns a non-nil, empty Context. Code should use context.TODO when
// it's unclear which Context to use or it is not yet available (because the
// surrounding function has not yet been extended to accept a Context
// parameter). TODO is recognized by static analysis tools that determine
@@ -149,8 +54,3 @@ func Background() Context {
func TODO() Context {
return todo
}
-
-// A CancelFunc tells an operation to abandon its work.
-// A CancelFunc does not wait for the work to stop.
-// After the first call, subsequent calls to a CancelFunc do nothing.
-type CancelFunc func()
diff --git a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go
index 606cf1f97..37dc0cfdb 100644
--- a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go
+++ b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go
@@ -2,18 +2,15 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build go1.7
-
// Package ctxhttp provides helper functions for performing context-aware HTTP requests.
package ctxhttp // import "golang.org/x/net/context/ctxhttp"
import (
+ "context"
"io"
"net/http"
"net/url"
"strings"
-
- "golang.org/x/net/context"
)
// Do sends an HTTP request with the provided http.Client and returns
diff --git a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_pre17.go b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_pre17.go
deleted file mode 100644
index 926870cc2..000000000
--- a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_pre17.go
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build !go1.7
-
-package ctxhttp // import "golang.org/x/net/context/ctxhttp"
-
-import (
- "io"
- "net/http"
- "net/url"
- "strings"
-
- "golang.org/x/net/context"
-)
-
-func nop() {}
-
-var (
- testHookContextDoneBeforeHeaders = nop
- testHookDoReturned = nop
- testHookDidBodyClose = nop
-)
-
-// Do sends an HTTP request with the provided http.Client and returns an HTTP response.
-// If the client is nil, http.DefaultClient is used.
-// If the context is canceled or times out, ctx.Err() will be returned.
-func Do(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) {
- if client == nil {
- client = http.DefaultClient
- }
-
- // TODO(djd): Respect any existing value of req.Cancel.
- cancel := make(chan struct{})
- req.Cancel = cancel
-
- type responseAndError struct {
- resp *http.Response
- err error
- }
- result := make(chan responseAndError, 1)
-
- // Make local copies of test hooks closed over by goroutines below.
- // Prevents data races in tests.
- testHookDoReturned := testHookDoReturned
- testHookDidBodyClose := testHookDidBodyClose
-
- go func() {
- resp, err := client.Do(req)
- testHookDoReturned()
- result <- responseAndError{resp, err}
- }()
-
- var resp *http.Response
-
- select {
- case <-ctx.Done():
- testHookContextDoneBeforeHeaders()
- close(cancel)
- // Clean up after the goroutine calling client.Do:
- go func() {
- if r := <-result; r.resp != nil {
- testHookDidBodyClose()
- r.resp.Body.Close()
- }
- }()
- return nil, ctx.Err()
- case r := <-result:
- var err error
- resp, err = r.resp, r.err
- if err != nil {
- return resp, err
- }
- }
-
- c := make(chan struct{})
- go func() {
- select {
- case <-ctx.Done():
- close(cancel)
- case <-c:
- // The response's Body is closed.
- }
- }()
- resp.Body = &notifyingReader{resp.Body, c}
-
- return resp, nil
-}
-
-// Get issues a GET request via the Do function.
-func Get(ctx context.Context, client *http.Client, url string) (*http.Response, error) {
- req, err := http.NewRequest("GET", url, nil)
- if err != nil {
- return nil, err
- }
- return Do(ctx, client, req)
-}
-
-// Head issues a HEAD request via the Do function.
-func Head(ctx context.Context, client *http.Client, url string) (*http.Response, error) {
- req, err := http.NewRequest("HEAD", url, nil)
- if err != nil {
- return nil, err
- }
- return Do(ctx, client, req)
-}
-
-// Post issues a POST request via the Do function.
-func Post(ctx context.Context, client *http.Client, url string, bodyType string, body io.Reader) (*http.Response, error) {
- req, err := http.NewRequest("POST", url, body)
- if err != nil {
- return nil, err
- }
- req.Header.Set("Content-Type", bodyType)
- return Do(ctx, client, req)
-}
-
-// PostForm issues a POST request via the Do function.
-func PostForm(ctx context.Context, client *http.Client, url string, data url.Values) (*http.Response, error) {
- return Post(ctx, client, url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode()))
-}
-
-// notifyingReader is an io.ReadCloser that closes the notify channel after
-// Close is called or a Read fails on the underlying ReadCloser.
-type notifyingReader struct {
- io.ReadCloser
- notify chan<- struct{}
-}
-
-func (r *notifyingReader) Read(p []byte) (int, error) {
- n, err := r.ReadCloser.Read(p)
- if err != nil && r.notify != nil {
- close(r.notify)
- r.notify = nil
- }
- return n, err
-}
-
-func (r *notifyingReader) Close() error {
- err := r.ReadCloser.Close()
- if r.notify != nil {
- close(r.notify)
- r.notify = nil
- }
- return err
-}
diff --git a/vendor/golang.org/x/net/context/go17.go b/vendor/golang.org/x/net/context/go17.go
index f8cda19ad..d20f52b7d 100644
--- a/vendor/golang.org/x/net/context/go17.go
+++ b/vendor/golang.org/x/net/context/go17.go
@@ -35,8 +35,8 @@ func WithCancel(parent Context) (ctx Context, cancel CancelFunc) {
}
// WithDeadline returns a copy of the parent context with the deadline adjusted
-// to be no later than d. If the parent's deadline is already earlier than d,
-// WithDeadline(parent, d) is semantically equivalent to parent. The returned
+// to be no later than d. If the parent's deadline is already earlier than d,
+// WithDeadline(parent, d) is semantically equivalent to parent. The returned
// context's Done channel is closed when the deadline expires, when the returned
// cancel function is called, or when the parent context's Done channel is
// closed, whichever happens first.
diff --git a/vendor/golang.org/x/net/context/go19.go b/vendor/golang.org/x/net/context/go19.go
new file mode 100644
index 000000000..d88bd1db1
--- /dev/null
+++ b/vendor/golang.org/x/net/context/go19.go
@@ -0,0 +1,20 @@
+// 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.
+
+// +build go1.9
+
+package context
+
+import "context" // standard library's context, as of Go 1.7
+
+// A Context carries a deadline, a cancelation signal, and other values across
+// API boundaries.
+//
+// Context's methods may be called by multiple goroutines simultaneously.
+type Context = context.Context
+
+// A CancelFunc tells an operation to abandon its work.
+// A CancelFunc does not wait for the work to stop.
+// After the first call, subsequent calls to a CancelFunc do nothing.
+type CancelFunc = context.CancelFunc
diff --git a/vendor/golang.org/x/net/context/pre_go17.go b/vendor/golang.org/x/net/context/pre_go17.go
index 5a30acabd..0f35592df 100644
--- a/vendor/golang.org/x/net/context/pre_go17.go
+++ b/vendor/golang.org/x/net/context/pre_go17.go
@@ -13,7 +13,7 @@ import (
"time"
)
-// An emptyCtx is never canceled, has no values, and has no deadline. It is not
+// An emptyCtx is never canceled, has no values, and has no deadline. It is not
// struct{}, since vars of this type must have distinct addresses.
type emptyCtx int
@@ -104,7 +104,7 @@ func propagateCancel(parent Context, child canceler) {
}
// parentCancelCtx follows a chain of parent references until it finds a
-// *cancelCtx. This function understands how each of the concrete types in this
+// *cancelCtx. This function understands how each of the concrete types in this
// package represents its parent.
func parentCancelCtx(parent Context) (*cancelCtx, bool) {
for {
@@ -134,14 +134,14 @@ func removeChild(parent Context, child canceler) {
p.mu.Unlock()
}
-// A canceler is a context type that can be canceled directly. The
+// A canceler is a context type that can be canceled directly. The
// implementations are *cancelCtx and *timerCtx.
type canceler interface {
cancel(removeFromParent bool, err error)
Done() <-chan struct{}
}
-// A cancelCtx can be canceled. When canceled, it also cancels any children
+// A cancelCtx can be canceled. When canceled, it also cancels any children
// that implement canceler.
type cancelCtx struct {
Context
@@ -193,8 +193,8 @@ func (c *cancelCtx) cancel(removeFromParent bool, err error) {
}
// WithDeadline returns a copy of the parent context with the deadline adjusted
-// to be no later than d. If the parent's deadline is already earlier than d,
-// WithDeadline(parent, d) is semantically equivalent to parent. The returned
+// to be no later than d. If the parent's deadline is already earlier than d,
+// WithDeadline(parent, d) is semantically equivalent to parent. The returned
// context's Done channel is closed when the deadline expires, when the returned
// cancel function is called, or when the parent context's Done channel is
// closed, whichever happens first.
@@ -226,8 +226,8 @@ func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {
return c, func() { c.cancel(true, Canceled) }
}
-// A timerCtx carries a timer and a deadline. It embeds a cancelCtx to
-// implement Done and Err. It implements cancel by stopping its timer then
+// A timerCtx carries a timer and a deadline. It embeds a cancelCtx to
+// implement Done and Err. It implements cancel by stopping its timer then
// delegating to cancelCtx.cancel.
type timerCtx struct {
*cancelCtx
@@ -281,7 +281,7 @@ func WithValue(parent Context, key interface{}, val interface{}) Context {
return &valueCtx{parent, key, val}
}
-// A valueCtx carries a key-value pair. It implements Value for that key and
+// A valueCtx carries a key-value pair. It implements Value for that key and
// delegates all other calls to the embedded Context.
type valueCtx struct {
Context
diff --git a/vendor/golang.org/x/net/context/pre_go19.go b/vendor/golang.org/x/net/context/pre_go19.go
new file mode 100644
index 000000000..b105f80be
--- /dev/null
+++ b/vendor/golang.org/x/net/context/pre_go19.go
@@ -0,0 +1,109 @@
+// 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.
+
+// +build !go1.9
+
+package context
+
+import "time"
+
+// A Context carries a deadline, a cancelation signal, and other values across
+// API boundaries.
+//
+// Context's methods may be called by multiple goroutines simultaneously.
+type Context interface {
+ // Deadline returns the time when work done on behalf of this context
+ // should be canceled. Deadline returns ok==false when no deadline is
+ // set. Successive calls to Deadline return the same results.
+ Deadline() (deadline time.Time, ok bool)
+
+ // Done returns a channel that's closed when work done on behalf of this
+ // context should be canceled. Done may return nil if this context can
+ // never be canceled. Successive calls to Done return the same value.
+ //
+ // WithCancel arranges for Done to be closed when cancel is called;
+ // WithDeadline arranges for Done to be closed when the deadline
+ // expires; WithTimeout arranges for Done to be closed when the timeout
+ // elapses.
+ //
+ // Done is provided for use in select statements:
+ //
+ // // Stream generates values with DoSomething and sends them to out
+ // // until DoSomething returns an error or ctx.Done is closed.
+ // func Stream(ctx context.Context, out chan<- Value) error {
+ // for {
+ // v, err := DoSomething(ctx)
+ // if err != nil {
+ // return err
+ // }
+ // select {
+ // case <-ctx.Done():
+ // return ctx.Err()
+ // case out <- v:
+ // }
+ // }
+ // }
+ //
+ // See http://blog.golang.org/pipelines for more examples of how to use
+ // a Done channel for cancelation.
+ Done() <-chan struct{}
+
+ // Err returns a non-nil error value after Done is closed. Err returns
+ // Canceled if the context was canceled or DeadlineExceeded if the
+ // context's deadline passed. No other values for Err are defined.
+ // After Done is closed, successive calls to Err return the same value.
+ Err() error
+
+ // Value returns the value associated with this context for key, or nil
+ // if no value is associated with key. Successive calls to Value with
+ // the same key returns the same result.
+ //
+ // Use context values only for request-scoped data that transits
+ // processes and API boundaries, not for passing optional parameters to
+ // functions.
+ //
+ // A key identifies a specific value in a Context. Functions that wish
+ // to store values in Context typically allocate a key in a global
+ // variable then use that key as the argument to context.WithValue and
+ // Context.Value. A key can be any type that supports equality;
+ // packages should define keys as an unexported type to avoid
+ // collisions.
+ //
+ // Packages that define a Context key should provide type-safe accessors
+ // for the values stores using that key:
+ //
+ // // Package user defines a User type that's stored in Contexts.
+ // package user
+ //
+ // import "golang.org/x/net/context"
+ //
+ // // User is the type of value stored in the Contexts.
+ // type User struct {...}
+ //
+ // // key is an unexported type for keys defined in this package.
+ // // This prevents collisions with keys defined in other packages.
+ // type key int
+ //
+ // // userKey is the key for user.User values in Contexts. It is
+ // // unexported; clients use user.NewContext and user.FromContext
+ // // instead of using this key directly.
+ // var userKey key = 0
+ //
+ // // NewContext returns a new Context that carries value u.
+ // func NewContext(ctx context.Context, u *User) context.Context {
+ // return context.WithValue(ctx, userKey, u)
+ // }
+ //
+ // // FromContext returns the User value stored in ctx, if any.
+ // func FromContext(ctx context.Context) (*User, bool) {
+ // u, ok := ctx.Value(userKey).(*User)
+ // return u, ok
+ // }
+ Value(key interface{}) interface{}
+}
+
+// A CancelFunc tells an operation to abandon its work.
+// A CancelFunc does not wait for the work to stop.
+// After the first call, subsequent calls to a CancelFunc do nothing.
+type CancelFunc func()
diff --git a/vendor/golang.org/x/net/html/atom/atom.go b/vendor/golang.org/x/net/html/atom/atom.go
new file mode 100644
index 000000000..cd0a8ac15
--- /dev/null
+++ b/vendor/golang.org/x/net/html/atom/atom.go
@@ -0,0 +1,78 @@
+// 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.
+
+// Package atom provides integer codes (also known as atoms) for a fixed set of
+// frequently occurring HTML strings: tag names and attribute keys such as "p"
+// and "id".
+//
+// Sharing an atom's name between all elements with the same tag can result in
+// fewer string allocations when tokenizing and parsing HTML. Integer
+// comparisons are also generally faster than string comparisons.
+//
+// The value of an atom's particular code is not guaranteed to stay the same
+// between versions of this package. Neither is any ordering guaranteed:
+// whether atom.H1 < atom.H2 may also change. The codes are not guaranteed to
+// be dense. The only guarantees are that e.g. looking up "div" will yield
+// atom.Div, calling atom.Div.String will return "div", and atom.Div != 0.
+package atom // import "golang.org/x/net/html/atom"
+
+// Atom is an integer code for a string. The zero value maps to "".
+type Atom uint32
+
+// String returns the atom's name.
+func (a Atom) String() string {
+ start := uint32(a >> 8)
+ n := uint32(a & 0xff)
+ if start+n > uint32(len(atomText)) {
+ return ""
+ }
+ return atomText[start : start+n]
+}
+
+func (a Atom) string() string {
+ return atomText[a>>8 : a>>8+a&0xff]
+}
+
+// fnv computes the FNV hash with an arbitrary starting value h.
+func fnv(h uint32, s []byte) uint32 {
+ for i := range s {
+ h ^= uint32(s[i])
+ h *= 16777619
+ }
+ return h
+}
+
+func match(s string, t []byte) bool {
+ for i, c := range t {
+ if s[i] != c {
+ return false
+ }
+ }
+ return true
+}
+
+// Lookup returns the atom whose name is s. It returns zero if there is no
+// such atom. The lookup is case sensitive.
+func Lookup(s []byte) Atom {
+ if len(s) == 0 || len(s) > maxAtomLen {
+ return 0
+ }
+ h := fnv(hash0, s)
+ if a := table[h&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {
+ return a
+ }
+ if a := table[(h>>16)&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {
+ return a
+ }
+ return 0
+}
+
+// String returns a string whose contents are equal to s. In that sense, it is
+// equivalent to string(s) but may be more efficient.
+func String(s []byte) string {
+ if a := Lookup(s); a != 0 {
+ return a.String()
+ }
+ return string(s)
+}
diff --git a/vendor/golang.org/x/net/html/atom/table.go b/vendor/golang.org/x/net/html/atom/table.go
new file mode 100644
index 000000000..2a938864c
--- /dev/null
+++ b/vendor/golang.org/x/net/html/atom/table.go
@@ -0,0 +1,783 @@
+// Code generated by go generate gen.go; DO NOT EDIT.
+
+//go:generate go run gen.go
+
+package atom
+
+const (
+ A Atom = 0x1
+ Abbr Atom = 0x4
+ Accept Atom = 0x1a06
+ AcceptCharset Atom = 0x1a0e
+ Accesskey Atom = 0x2c09
+ Acronym Atom = 0xaa07
+ Action Atom = 0x27206
+ Address Atom = 0x6f307
+ Align Atom = 0xb105
+ Allowfullscreen Atom = 0x2080f
+ Allowpaymentrequest Atom = 0xc113
+ Allowusermedia Atom = 0xdd0e
+ Alt Atom = 0xf303
+ Annotation Atom = 0x1c90a
+ AnnotationXml Atom = 0x1c90e
+ Applet Atom = 0x31906
+ Area Atom = 0x35604
+ Article Atom = 0x3fc07
+ As Atom = 0x3c02
+ Aside Atom = 0x10705
+ Async Atom = 0xff05
+ Audio Atom = 0x11505
+ Autocomplete Atom = 0x2780c
+ Autofocus Atom = 0x12109
+ Autoplay Atom = 0x13c08
+ B Atom = 0x101
+ Base Atom = 0x3b04
+ Basefont Atom = 0x3b08
+ Bdi Atom = 0xba03
+ Bdo Atom = 0x14b03
+ Bgsound Atom = 0x15e07
+ Big Atom = 0x17003
+ Blink Atom = 0x17305
+ Blockquote Atom = 0x1870a
+ Body Atom = 0x2804
+ Br Atom = 0x202
+ Button Atom = 0x19106
+ Canvas Atom = 0x10306
+ Caption Atom = 0x23107
+ Center Atom = 0x22006
+ Challenge Atom = 0x29b09
+ Charset Atom = 0x2107
+ Checked Atom = 0x47907
+ Cite Atom = 0x19c04
+ Class Atom = 0x56405
+ Code Atom = 0x5c504
+ Col Atom = 0x1ab03
+ Colgroup Atom = 0x1ab08
+ Color Atom = 0x1bf05
+ Cols Atom = 0x1c404
+ Colspan Atom = 0x1c407
+ Command Atom = 0x1d707
+ Content Atom = 0x58b07
+ Contenteditable Atom = 0x58b0f
+ Contextmenu Atom = 0x3800b
+ Controls Atom = 0x1de08
+ Coords Atom = 0x1ea06
+ Crossorigin Atom = 0x1fb0b
+ Data Atom = 0x4a504
+ Datalist Atom = 0x4a508
+ Datetime Atom = 0x2b808
+ Dd Atom = 0x2d702
+ Default Atom = 0x10a07
+ Defer Atom = 0x5c705
+ Del Atom = 0x45203
+ Desc Atom = 0x56104
+ Details Atom = 0x7207
+ Dfn Atom = 0x8703
+ Dialog Atom = 0xbb06
+ Dir Atom = 0x9303
+ Dirname Atom = 0x9307
+ Disabled Atom = 0x16408
+ Div Atom = 0x16b03
+ Dl Atom = 0x5e602
+ Download Atom = 0x46308
+ Draggable Atom = 0x17a09
+ Dropzone Atom = 0x40508
+ Dt Atom = 0x64b02
+ Em Atom = 0x6e02
+ Embed Atom = 0x6e05
+ Enctype Atom = 0x28d07
+ Face Atom = 0x21e04
+ Fieldset Atom = 0x22608
+ Figcaption Atom = 0x22e0a
+ Figure Atom = 0x24806
+ Font Atom = 0x3f04
+ Footer Atom = 0xf606
+ For Atom = 0x25403
+ ForeignObject Atom = 0x2540d
+ Foreignobject Atom = 0x2610d
+ Form Atom = 0x26e04
+ Formaction Atom = 0x26e0a
+ Formenctype Atom = 0x2890b
+ Formmethod Atom = 0x2a40a
+ Formnovalidate Atom = 0x2ae0e
+ Formtarget Atom = 0x2c00a
+ Frame Atom = 0x8b05
+ Frameset Atom = 0x8b08
+ H1 Atom = 0x15c02
+ H2 Atom = 0x2de02
+ H3 Atom = 0x30d02
+ H4 Atom = 0x34502
+ H5 Atom = 0x34f02
+ H6 Atom = 0x64d02
+ Head Atom = 0x33104
+ Header Atom = 0x33106
+ Headers Atom = 0x33107
+ Height Atom = 0x5206
+ Hgroup Atom = 0x2ca06
+ Hidden Atom = 0x2d506
+ High Atom = 0x2db04
+ Hr Atom = 0x15702
+ Href Atom = 0x2e004
+ Hreflang Atom = 0x2e008
+ Html Atom = 0x5604
+ HttpEquiv Atom = 0x2e80a
+ I Atom = 0x601
+ Icon Atom = 0x58a04
+ Id Atom = 0x10902
+ Iframe Atom = 0x2fc06
+ Image Atom = 0x30205
+ Img Atom = 0x30703
+ Input Atom = 0x44b05
+ Inputmode Atom = 0x44b09
+ Ins Atom = 0x20403
+ Integrity Atom = 0x23f09
+ Is Atom = 0x16502
+ Isindex Atom = 0x30f07
+ Ismap Atom = 0x31605
+ Itemid Atom = 0x38b06
+ Itemprop Atom = 0x19d08
+ Itemref Atom = 0x3cd07
+ Itemscope Atom = 0x67109
+ Itemtype Atom = 0x31f08
+ Kbd Atom = 0xb903
+ Keygen Atom = 0x3206
+ Keytype Atom = 0xd607
+ Kind Atom = 0x17704
+ Label Atom = 0x5905
+ Lang Atom = 0x2e404
+ Legend Atom = 0x18106
+ Li Atom = 0xb202
+ Link Atom = 0x17404
+ List Atom = 0x4a904
+ Listing Atom = 0x4a907
+ Loop Atom = 0x5d04
+ Low Atom = 0xc303
+ Main Atom = 0x1004
+ Malignmark Atom = 0xb00a
+ Manifest Atom = 0x6d708
+ Map Atom = 0x31803
+ Mark Atom = 0xb604
+ Marquee Atom = 0x32707
+ Math Atom = 0x32e04
+ Max Atom = 0x33d03
+ Maxlength Atom = 0x33d09
+ Media Atom = 0xe605
+ Mediagroup Atom = 0xe60a
+ Menu Atom = 0x38704
+ Menuitem Atom = 0x38708
+ Meta Atom = 0x4b804
+ Meter Atom = 0x9805
+ Method Atom = 0x2a806
+ Mglyph Atom = 0x30806
+ Mi Atom = 0x34702
+ Min Atom = 0x34703
+ Minlength Atom = 0x34709
+ Mn Atom = 0x2b102
+ Mo Atom = 0xa402
+ Ms Atom = 0x67402
+ Mtext Atom = 0x35105
+ Multiple Atom = 0x35f08
+ Muted Atom = 0x36705
+ Name Atom = 0x9604
+ Nav Atom = 0x1303
+ Nobr Atom = 0x3704
+ Noembed Atom = 0x6c07
+ Noframes Atom = 0x8908
+ Nomodule Atom = 0xa208
+ Nonce Atom = 0x1a605
+ Noscript Atom = 0x21608
+ Novalidate Atom = 0x2b20a
+ Object Atom = 0x26806
+ Ol Atom = 0x13702
+ Onabort Atom = 0x19507
+ Onafterprint Atom = 0x2360c
+ Onautocomplete Atom = 0x2760e
+ Onautocompleteerror Atom = 0x27613
+ Onauxclick Atom = 0x61f0a
+ Onbeforeprint Atom = 0x69e0d
+ Onbeforeunload Atom = 0x6e70e
+ Onblur Atom = 0x56d06
+ Oncancel Atom = 0x11908
+ Oncanplay Atom = 0x14d09
+ Oncanplaythrough Atom = 0x14d10
+ Onchange Atom = 0x41b08
+ Onclick Atom = 0x2f507
+ Onclose Atom = 0x36c07
+ Oncontextmenu Atom = 0x37e0d
+ Oncopy Atom = 0x39106
+ Oncuechange Atom = 0x3970b
+ Oncut Atom = 0x3a205
+ Ondblclick Atom = 0x3a70a
+ Ondrag Atom = 0x3b106
+ Ondragend Atom = 0x3b109
+ Ondragenter Atom = 0x3ba0b
+ Ondragexit Atom = 0x3c50a
+ Ondragleave Atom = 0x3df0b
+ Ondragover Atom = 0x3ea0a
+ Ondragstart Atom = 0x3f40b
+ Ondrop Atom = 0x40306
+ Ondurationchange Atom = 0x41310
+ Onemptied Atom = 0x40a09
+ Onended Atom = 0x42307
+ Onerror Atom = 0x42a07
+ Onfocus Atom = 0x43107
+ Onhashchange Atom = 0x43d0c
+ Oninput Atom = 0x44907
+ Oninvalid Atom = 0x45509
+ Onkeydown Atom = 0x45e09
+ Onkeypress Atom = 0x46b0a
+ Onkeyup Atom = 0x48007
+ Onlanguagechange Atom = 0x48d10
+ Onload Atom = 0x49d06
+ Onloadeddata Atom = 0x49d0c
+ Onloadedmetadata Atom = 0x4b010
+ Onloadend Atom = 0x4c609
+ Onloadstart Atom = 0x4cf0b
+ Onmessage Atom = 0x4da09
+ Onmessageerror Atom = 0x4da0e
+ Onmousedown Atom = 0x4e80b
+ Onmouseenter Atom = 0x4f30c
+ Onmouseleave Atom = 0x4ff0c
+ Onmousemove Atom = 0x50b0b
+ Onmouseout Atom = 0x5160a
+ Onmouseover Atom = 0x5230b
+ Onmouseup Atom = 0x52e09
+ Onmousewheel Atom = 0x53c0c
+ Onoffline Atom = 0x54809
+ Ononline Atom = 0x55108
+ Onpagehide Atom = 0x5590a
+ Onpageshow Atom = 0x5730a
+ Onpaste Atom = 0x57f07
+ Onpause Atom = 0x59a07
+ Onplay Atom = 0x5a406
+ Onplaying Atom = 0x5a409
+ Onpopstate Atom = 0x5ad0a
+ Onprogress Atom = 0x5b70a
+ Onratechange Atom = 0x5cc0c
+ Onrejectionhandled Atom = 0x5d812
+ Onreset Atom = 0x5ea07
+ Onresize Atom = 0x5f108
+ Onscroll Atom = 0x60008
+ Onsecuritypolicyviolation Atom = 0x60819
+ Onseeked Atom = 0x62908
+ Onseeking Atom = 0x63109
+ Onselect Atom = 0x63a08
+ Onshow Atom = 0x64406
+ Onsort Atom = 0x64f06
+ Onstalled Atom = 0x65909
+ Onstorage Atom = 0x66209
+ Onsubmit Atom = 0x66b08
+ Onsuspend Atom = 0x67b09
+ Ontimeupdate Atom = 0x400c
+ Ontoggle Atom = 0x68408
+ Onunhandledrejection Atom = 0x68c14
+ Onunload Atom = 0x6ab08
+ Onvolumechange Atom = 0x6b30e
+ Onwaiting Atom = 0x6c109
+ Onwheel Atom = 0x6ca07
+ Open Atom = 0x1a304
+ Optgroup Atom = 0x5f08
+ Optimum Atom = 0x6d107
+ Option Atom = 0x6e306
+ Output Atom = 0x51d06
+ P Atom = 0xc01
+ Param Atom = 0xc05
+ Pattern Atom = 0x6607
+ Picture Atom = 0x7b07
+ Ping Atom = 0xef04
+ Placeholder Atom = 0x1310b
+ Plaintext Atom = 0x1b209
+ Playsinline Atom = 0x1400b
+ Poster Atom = 0x2cf06
+ Pre Atom = 0x47003
+ Preload Atom = 0x48607
+ Progress Atom = 0x5b908
+ Prompt Atom = 0x53606
+ Public Atom = 0x58606
+ Q Atom = 0xcf01
+ Radiogroup Atom = 0x30a
+ Rb Atom = 0x3a02
+ Readonly Atom = 0x35708
+ Referrerpolicy Atom = 0x3d10e
+ Rel Atom = 0x48703
+ Required Atom = 0x24c08
+ Reversed Atom = 0x8008
+ Rows Atom = 0x9c04
+ Rowspan Atom = 0x9c07
+ Rp Atom = 0x23c02
+ Rt Atom = 0x19a02
+ Rtc Atom = 0x19a03
+ Ruby Atom = 0xfb04
+ S Atom = 0x2501
+ Samp Atom = 0x7804
+ Sandbox Atom = 0x12907
+ Scope Atom = 0x67505
+ Scoped Atom = 0x67506
+ Script Atom = 0x21806
+ Seamless Atom = 0x37108
+ Section Atom = 0x56807
+ Select Atom = 0x63c06
+ Selected Atom = 0x63c08
+ Shape Atom = 0x1e505
+ Size Atom = 0x5f504
+ Sizes Atom = 0x5f505
+ Slot Atom = 0x1ef04
+ Small Atom = 0x20605
+ Sortable Atom = 0x65108
+ Sorted Atom = 0x33706
+ Source Atom = 0x37806
+ Spacer Atom = 0x43706
+ Span Atom = 0x9f04
+ Spellcheck Atom = 0x4740a
+ Src Atom = 0x5c003
+ Srcdoc Atom = 0x5c006
+ Srclang Atom = 0x5f907
+ Srcset Atom = 0x6f906
+ Start Atom = 0x3fa05
+ Step Atom = 0x58304
+ Strike Atom = 0xd206
+ Strong Atom = 0x6dd06
+ Style Atom = 0x6ff05
+ Sub Atom = 0x66d03
+ Summary Atom = 0x70407
+ Sup Atom = 0x70b03
+ Svg Atom = 0x70e03
+ System Atom = 0x71106
+ Tabindex Atom = 0x4be08
+ Table Atom = 0x59505
+ Target Atom = 0x2c406
+ Tbody Atom = 0x2705
+ Td Atom = 0x9202
+ Template Atom = 0x71408
+ Textarea Atom = 0x35208
+ Tfoot Atom = 0xf505
+ Th Atom = 0x15602
+ Thead Atom = 0x33005
+ Time Atom = 0x4204
+ Title Atom = 0x11005
+ Tr Atom = 0xcc02
+ Track Atom = 0x1ba05
+ Translate Atom = 0x1f209
+ Tt Atom = 0x6802
+ Type Atom = 0xd904
+ Typemustmatch Atom = 0x2900d
+ U Atom = 0xb01
+ Ul Atom = 0xa702
+ Updateviacache Atom = 0x460e
+ Usemap Atom = 0x59e06
+ Value Atom = 0x1505
+ Var Atom = 0x16d03
+ Video Atom = 0x2f105
+ Wbr Atom = 0x57c03
+ Width Atom = 0x64905
+ Workertype Atom = 0x71c0a
+ Wrap Atom = 0x72604
+ Xmp Atom = 0x12f03
+)
+
+const hash0 = 0x81cdf10e
+
+const maxAtomLen = 25
+
+var table = [1 << 9]Atom{
+ 0x1: 0xe60a, // mediagroup
+ 0x2: 0x2e404, // lang
+ 0x4: 0x2c09, // accesskey
+ 0x5: 0x8b08, // frameset
+ 0x7: 0x63a08, // onselect
+ 0x8: 0x71106, // system
+ 0xa: 0x64905, // width
+ 0xc: 0x2890b, // formenctype
+ 0xd: 0x13702, // ol
+ 0xe: 0x3970b, // oncuechange
+ 0x10: 0x14b03, // bdo
+ 0x11: 0x11505, // audio
+ 0x12: 0x17a09, // draggable
+ 0x14: 0x2f105, // video
+ 0x15: 0x2b102, // mn
+ 0x16: 0x38704, // menu
+ 0x17: 0x2cf06, // poster
+ 0x19: 0xf606, // footer
+ 0x1a: 0x2a806, // method
+ 0x1b: 0x2b808, // datetime
+ 0x1c: 0x19507, // onabort
+ 0x1d: 0x460e, // updateviacache
+ 0x1e: 0xff05, // async
+ 0x1f: 0x49d06, // onload
+ 0x21: 0x11908, // oncancel
+ 0x22: 0x62908, // onseeked
+ 0x23: 0x30205, // image
+ 0x24: 0x5d812, // onrejectionhandled
+ 0x26: 0x17404, // link
+ 0x27: 0x51d06, // output
+ 0x28: 0x33104, // head
+ 0x29: 0x4ff0c, // onmouseleave
+ 0x2a: 0x57f07, // onpaste
+ 0x2b: 0x5a409, // onplaying
+ 0x2c: 0x1c407, // colspan
+ 0x2f: 0x1bf05, // color
+ 0x30: 0x5f504, // size
+ 0x31: 0x2e80a, // http-equiv
+ 0x33: 0x601, // i
+ 0x34: 0x5590a, // onpagehide
+ 0x35: 0x68c14, // onunhandledrejection
+ 0x37: 0x42a07, // onerror
+ 0x3a: 0x3b08, // basefont
+ 0x3f: 0x1303, // nav
+ 0x40: 0x17704, // kind
+ 0x41: 0x35708, // readonly
+ 0x42: 0x30806, // mglyph
+ 0x44: 0xb202, // li
+ 0x46: 0x2d506, // hidden
+ 0x47: 0x70e03, // svg
+ 0x48: 0x58304, // step
+ 0x49: 0x23f09, // integrity
+ 0x4a: 0x58606, // public
+ 0x4c: 0x1ab03, // col
+ 0x4d: 0x1870a, // blockquote
+ 0x4e: 0x34f02, // h5
+ 0x50: 0x5b908, // progress
+ 0x51: 0x5f505, // sizes
+ 0x52: 0x34502, // h4
+ 0x56: 0x33005, // thead
+ 0x57: 0xd607, // keytype
+ 0x58: 0x5b70a, // onprogress
+ 0x59: 0x44b09, // inputmode
+ 0x5a: 0x3b109, // ondragend
+ 0x5d: 0x3a205, // oncut
+ 0x5e: 0x43706, // spacer
+ 0x5f: 0x1ab08, // colgroup
+ 0x62: 0x16502, // is
+ 0x65: 0x3c02, // as
+ 0x66: 0x54809, // onoffline
+ 0x67: 0x33706, // sorted
+ 0x69: 0x48d10, // onlanguagechange
+ 0x6c: 0x43d0c, // onhashchange
+ 0x6d: 0x9604, // name
+ 0x6e: 0xf505, // tfoot
+ 0x6f: 0x56104, // desc
+ 0x70: 0x33d03, // max
+ 0x72: 0x1ea06, // coords
+ 0x73: 0x30d02, // h3
+ 0x74: 0x6e70e, // onbeforeunload
+ 0x75: 0x9c04, // rows
+ 0x76: 0x63c06, // select
+ 0x77: 0x9805, // meter
+ 0x78: 0x38b06, // itemid
+ 0x79: 0x53c0c, // onmousewheel
+ 0x7a: 0x5c006, // srcdoc
+ 0x7d: 0x1ba05, // track
+ 0x7f: 0x31f08, // itemtype
+ 0x82: 0xa402, // mo
+ 0x83: 0x41b08, // onchange
+ 0x84: 0x33107, // headers
+ 0x85: 0x5cc0c, // onratechange
+ 0x86: 0x60819, // onsecuritypolicyviolation
+ 0x88: 0x4a508, // datalist
+ 0x89: 0x4e80b, // onmousedown
+ 0x8a: 0x1ef04, // slot
+ 0x8b: 0x4b010, // onloadedmetadata
+ 0x8c: 0x1a06, // accept
+ 0x8d: 0x26806, // object
+ 0x91: 0x6b30e, // onvolumechange
+ 0x92: 0x2107, // charset
+ 0x93: 0x27613, // onautocompleteerror
+ 0x94: 0xc113, // allowpaymentrequest
+ 0x95: 0x2804, // body
+ 0x96: 0x10a07, // default
+ 0x97: 0x63c08, // selected
+ 0x98: 0x21e04, // face
+ 0x99: 0x1e505, // shape
+ 0x9b: 0x68408, // ontoggle
+ 0x9e: 0x64b02, // dt
+ 0x9f: 0xb604, // mark
+ 0xa1: 0xb01, // u
+ 0xa4: 0x6ab08, // onunload
+ 0xa5: 0x5d04, // loop
+ 0xa6: 0x16408, // disabled
+ 0xaa: 0x42307, // onended
+ 0xab: 0xb00a, // malignmark
+ 0xad: 0x67b09, // onsuspend
+ 0xae: 0x35105, // mtext
+ 0xaf: 0x64f06, // onsort
+ 0xb0: 0x19d08, // itemprop
+ 0xb3: 0x67109, // itemscope
+ 0xb4: 0x17305, // blink
+ 0xb6: 0x3b106, // ondrag
+ 0xb7: 0xa702, // ul
+ 0xb8: 0x26e04, // form
+ 0xb9: 0x12907, // sandbox
+ 0xba: 0x8b05, // frame
+ 0xbb: 0x1505, // value
+ 0xbc: 0x66209, // onstorage
+ 0xbf: 0xaa07, // acronym
+ 0xc0: 0x19a02, // rt
+ 0xc2: 0x202, // br
+ 0xc3: 0x22608, // fieldset
+ 0xc4: 0x2900d, // typemustmatch
+ 0xc5: 0xa208, // nomodule
+ 0xc6: 0x6c07, // noembed
+ 0xc7: 0x69e0d, // onbeforeprint
+ 0xc8: 0x19106, // button
+ 0xc9: 0x2f507, // onclick
+ 0xca: 0x70407, // summary
+ 0xcd: 0xfb04, // ruby
+ 0xce: 0x56405, // class
+ 0xcf: 0x3f40b, // ondragstart
+ 0xd0: 0x23107, // caption
+ 0xd4: 0xdd0e, // allowusermedia
+ 0xd5: 0x4cf0b, // onloadstart
+ 0xd9: 0x16b03, // div
+ 0xda: 0x4a904, // list
+ 0xdb: 0x32e04, // math
+ 0xdc: 0x44b05, // input
+ 0xdf: 0x3ea0a, // ondragover
+ 0xe0: 0x2de02, // h2
+ 0xe2: 0x1b209, // plaintext
+ 0xe4: 0x4f30c, // onmouseenter
+ 0xe7: 0x47907, // checked
+ 0xe8: 0x47003, // pre
+ 0xea: 0x35f08, // multiple
+ 0xeb: 0xba03, // bdi
+ 0xec: 0x33d09, // maxlength
+ 0xed: 0xcf01, // q
+ 0xee: 0x61f0a, // onauxclick
+ 0xf0: 0x57c03, // wbr
+ 0xf2: 0x3b04, // base
+ 0xf3: 0x6e306, // option
+ 0xf5: 0x41310, // ondurationchange
+ 0xf7: 0x8908, // noframes
+ 0xf9: 0x40508, // dropzone
+ 0xfb: 0x67505, // scope
+ 0xfc: 0x8008, // reversed
+ 0xfd: 0x3ba0b, // ondragenter
+ 0xfe: 0x3fa05, // start
+ 0xff: 0x12f03, // xmp
+ 0x100: 0x5f907, // srclang
+ 0x101: 0x30703, // img
+ 0x104: 0x101, // b
+ 0x105: 0x25403, // for
+ 0x106: 0x10705, // aside
+ 0x107: 0x44907, // oninput
+ 0x108: 0x35604, // area
+ 0x109: 0x2a40a, // formmethod
+ 0x10a: 0x72604, // wrap
+ 0x10c: 0x23c02, // rp
+ 0x10d: 0x46b0a, // onkeypress
+ 0x10e: 0x6802, // tt
+ 0x110: 0x34702, // mi
+ 0x111: 0x36705, // muted
+ 0x112: 0xf303, // alt
+ 0x113: 0x5c504, // code
+ 0x114: 0x6e02, // em
+ 0x115: 0x3c50a, // ondragexit
+ 0x117: 0x9f04, // span
+ 0x119: 0x6d708, // manifest
+ 0x11a: 0x38708, // menuitem
+ 0x11b: 0x58b07, // content
+ 0x11d: 0x6c109, // onwaiting
+ 0x11f: 0x4c609, // onloadend
+ 0x121: 0x37e0d, // oncontextmenu
+ 0x123: 0x56d06, // onblur
+ 0x124: 0x3fc07, // article
+ 0x125: 0x9303, // dir
+ 0x126: 0xef04, // ping
+ 0x127: 0x24c08, // required
+ 0x128: 0x45509, // oninvalid
+ 0x129: 0xb105, // align
+ 0x12b: 0x58a04, // icon
+ 0x12c: 0x64d02, // h6
+ 0x12d: 0x1c404, // cols
+ 0x12e: 0x22e0a, // figcaption
+ 0x12f: 0x45e09, // onkeydown
+ 0x130: 0x66b08, // onsubmit
+ 0x131: 0x14d09, // oncanplay
+ 0x132: 0x70b03, // sup
+ 0x133: 0xc01, // p
+ 0x135: 0x40a09, // onemptied
+ 0x136: 0x39106, // oncopy
+ 0x137: 0x19c04, // cite
+ 0x138: 0x3a70a, // ondblclick
+ 0x13a: 0x50b0b, // onmousemove
+ 0x13c: 0x66d03, // sub
+ 0x13d: 0x48703, // rel
+ 0x13e: 0x5f08, // optgroup
+ 0x142: 0x9c07, // rowspan
+ 0x143: 0x37806, // source
+ 0x144: 0x21608, // noscript
+ 0x145: 0x1a304, // open
+ 0x146: 0x20403, // ins
+ 0x147: 0x2540d, // foreignObject
+ 0x148: 0x5ad0a, // onpopstate
+ 0x14a: 0x28d07, // enctype
+ 0x14b: 0x2760e, // onautocomplete
+ 0x14c: 0x35208, // textarea
+ 0x14e: 0x2780c, // autocomplete
+ 0x14f: 0x15702, // hr
+ 0x150: 0x1de08, // controls
+ 0x151: 0x10902, // id
+ 0x153: 0x2360c, // onafterprint
+ 0x155: 0x2610d, // foreignobject
+ 0x156: 0x32707, // marquee
+ 0x157: 0x59a07, // onpause
+ 0x158: 0x5e602, // dl
+ 0x159: 0x5206, // height
+ 0x15a: 0x34703, // min
+ 0x15b: 0x9307, // dirname
+ 0x15c: 0x1f209, // translate
+ 0x15d: 0x5604, // html
+ 0x15e: 0x34709, // minlength
+ 0x15f: 0x48607, // preload
+ 0x160: 0x71408, // template
+ 0x161: 0x3df0b, // ondragleave
+ 0x162: 0x3a02, // rb
+ 0x164: 0x5c003, // src
+ 0x165: 0x6dd06, // strong
+ 0x167: 0x7804, // samp
+ 0x168: 0x6f307, // address
+ 0x169: 0x55108, // ononline
+ 0x16b: 0x1310b, // placeholder
+ 0x16c: 0x2c406, // target
+ 0x16d: 0x20605, // small
+ 0x16e: 0x6ca07, // onwheel
+ 0x16f: 0x1c90a, // annotation
+ 0x170: 0x4740a, // spellcheck
+ 0x171: 0x7207, // details
+ 0x172: 0x10306, // canvas
+ 0x173: 0x12109, // autofocus
+ 0x174: 0xc05, // param
+ 0x176: 0x46308, // download
+ 0x177: 0x45203, // del
+ 0x178: 0x36c07, // onclose
+ 0x179: 0xb903, // kbd
+ 0x17a: 0x31906, // applet
+ 0x17b: 0x2e004, // href
+ 0x17c: 0x5f108, // onresize
+ 0x17e: 0x49d0c, // onloadeddata
+ 0x180: 0xcc02, // tr
+ 0x181: 0x2c00a, // formtarget
+ 0x182: 0x11005, // title
+ 0x183: 0x6ff05, // style
+ 0x184: 0xd206, // strike
+ 0x185: 0x59e06, // usemap
+ 0x186: 0x2fc06, // iframe
+ 0x187: 0x1004, // main
+ 0x189: 0x7b07, // picture
+ 0x18c: 0x31605, // ismap
+ 0x18e: 0x4a504, // data
+ 0x18f: 0x5905, // label
+ 0x191: 0x3d10e, // referrerpolicy
+ 0x192: 0x15602, // th
+ 0x194: 0x53606, // prompt
+ 0x195: 0x56807, // section
+ 0x197: 0x6d107, // optimum
+ 0x198: 0x2db04, // high
+ 0x199: 0x15c02, // h1
+ 0x19a: 0x65909, // onstalled
+ 0x19b: 0x16d03, // var
+ 0x19c: 0x4204, // time
+ 0x19e: 0x67402, // ms
+ 0x19f: 0x33106, // header
+ 0x1a0: 0x4da09, // onmessage
+ 0x1a1: 0x1a605, // nonce
+ 0x1a2: 0x26e0a, // formaction
+ 0x1a3: 0x22006, // center
+ 0x1a4: 0x3704, // nobr
+ 0x1a5: 0x59505, // table
+ 0x1a6: 0x4a907, // listing
+ 0x1a7: 0x18106, // legend
+ 0x1a9: 0x29b09, // challenge
+ 0x1aa: 0x24806, // figure
+ 0x1ab: 0xe605, // media
+ 0x1ae: 0xd904, // type
+ 0x1af: 0x3f04, // font
+ 0x1b0: 0x4da0e, // onmessageerror
+ 0x1b1: 0x37108, // seamless
+ 0x1b2: 0x8703, // dfn
+ 0x1b3: 0x5c705, // defer
+ 0x1b4: 0xc303, // low
+ 0x1b5: 0x19a03, // rtc
+ 0x1b6: 0x5230b, // onmouseover
+ 0x1b7: 0x2b20a, // novalidate
+ 0x1b8: 0x71c0a, // workertype
+ 0x1ba: 0x3cd07, // itemref
+ 0x1bd: 0x1, // a
+ 0x1be: 0x31803, // map
+ 0x1bf: 0x400c, // ontimeupdate
+ 0x1c0: 0x15e07, // bgsound
+ 0x1c1: 0x3206, // keygen
+ 0x1c2: 0x2705, // tbody
+ 0x1c5: 0x64406, // onshow
+ 0x1c7: 0x2501, // s
+ 0x1c8: 0x6607, // pattern
+ 0x1cc: 0x14d10, // oncanplaythrough
+ 0x1ce: 0x2d702, // dd
+ 0x1cf: 0x6f906, // srcset
+ 0x1d0: 0x17003, // big
+ 0x1d2: 0x65108, // sortable
+ 0x1d3: 0x48007, // onkeyup
+ 0x1d5: 0x5a406, // onplay
+ 0x1d7: 0x4b804, // meta
+ 0x1d8: 0x40306, // ondrop
+ 0x1da: 0x60008, // onscroll
+ 0x1db: 0x1fb0b, // crossorigin
+ 0x1dc: 0x5730a, // onpageshow
+ 0x1dd: 0x4, // abbr
+ 0x1de: 0x9202, // td
+ 0x1df: 0x58b0f, // contenteditable
+ 0x1e0: 0x27206, // action
+ 0x1e1: 0x1400b, // playsinline
+ 0x1e2: 0x43107, // onfocus
+ 0x1e3: 0x2e008, // hreflang
+ 0x1e5: 0x5160a, // onmouseout
+ 0x1e6: 0x5ea07, // onreset
+ 0x1e7: 0x13c08, // autoplay
+ 0x1e8: 0x63109, // onseeking
+ 0x1ea: 0x67506, // scoped
+ 0x1ec: 0x30a, // radiogroup
+ 0x1ee: 0x3800b, // contextmenu
+ 0x1ef: 0x52e09, // onmouseup
+ 0x1f1: 0x2ca06, // hgroup
+ 0x1f2: 0x2080f, // allowfullscreen
+ 0x1f3: 0x4be08, // tabindex
+ 0x1f6: 0x30f07, // isindex
+ 0x1f7: 0x1a0e, // accept-charset
+ 0x1f8: 0x2ae0e, // formnovalidate
+ 0x1fb: 0x1c90e, // annotation-xml
+ 0x1fc: 0x6e05, // embed
+ 0x1fd: 0x21806, // script
+ 0x1fe: 0xbb06, // dialog
+ 0x1ff: 0x1d707, // command
+}
+
+const atomText = "abbradiogrouparamainavalueaccept-charsetbodyaccesskeygenobrb" +
+ "asefontimeupdateviacacheightmlabelooptgroupatternoembedetail" +
+ "sampictureversedfnoframesetdirnameterowspanomoduleacronymali" +
+ "gnmarkbdialogallowpaymentrequestrikeytypeallowusermediagroup" +
+ "ingaltfooterubyasyncanvasidefaultitleaudioncancelautofocusan" +
+ "dboxmplaceholderautoplaysinlinebdoncanplaythrough1bgsoundisa" +
+ "bledivarbigblinkindraggablegendblockquotebuttonabortcitempro" +
+ "penoncecolgrouplaintextrackcolorcolspannotation-xmlcommandco" +
+ "ntrolshapecoordslotranslatecrossoriginsmallowfullscreenoscri" +
+ "ptfacenterfieldsetfigcaptionafterprintegrityfigurequiredfore" +
+ "ignObjectforeignobjectformactionautocompleteerrorformenctype" +
+ "mustmatchallengeformmethodformnovalidatetimeformtargethgroup" +
+ "osterhiddenhigh2hreflanghttp-equivideonclickiframeimageimgly" +
+ "ph3isindexismappletitemtypemarqueematheadersortedmaxlength4m" +
+ "inlength5mtextareadonlymultiplemutedoncloseamlessourceoncont" +
+ "extmenuitemidoncopyoncuechangeoncutondblclickondragendondrag" +
+ "enterondragexitemreferrerpolicyondragleaveondragoverondragst" +
+ "articleondropzonemptiedondurationchangeonendedonerroronfocus" +
+ "paceronhashchangeoninputmodeloninvalidonkeydownloadonkeypres" +
+ "spellcheckedonkeyupreloadonlanguagechangeonloadeddatalisting" +
+ "onloadedmetadatabindexonloadendonloadstartonmessageerroronmo" +
+ "usedownonmouseenteronmouseleaveonmousemoveonmouseoutputonmou" +
+ "seoveronmouseupromptonmousewheelonofflineononlineonpagehides" +
+ "classectionbluronpageshowbronpastepublicontenteditableonpaus" +
+ "emaponplayingonpopstateonprogressrcdocodeferonratechangeonre" +
+ "jectionhandledonresetonresizesrclangonscrollonsecuritypolicy" +
+ "violationauxclickonseekedonseekingonselectedonshowidth6onsor" +
+ "tableonstalledonstorageonsubmitemscopedonsuspendontoggleonun" +
+ "handledrejectionbeforeprintonunloadonvolumechangeonwaitingon" +
+ "wheeloptimumanifestrongoptionbeforeunloaddressrcsetstylesumm" +
+ "arysupsvgsystemplateworkertypewrap"
diff --git a/vendor/golang.org/x/net/html/charset/charset.go b/vendor/golang.org/x/net/html/charset/charset.go
new file mode 100644
index 000000000..13bed1599
--- /dev/null
+++ b/vendor/golang.org/x/net/html/charset/charset.go
@@ -0,0 +1,257 @@
+// 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 charset provides common text encodings for HTML documents.
+//
+// The mapping from encoding labels to encodings is defined at
+// https://encoding.spec.whatwg.org/.
+package charset // import "golang.org/x/net/html/charset"
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "mime"
+ "strings"
+ "unicode/utf8"
+
+ "golang.org/x/net/html"
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/charmap"
+ "golang.org/x/text/encoding/htmlindex"
+ "golang.org/x/text/transform"
+)
+
+// Lookup returns the encoding with the specified label, and its canonical
+// name. It returns nil and the empty string if label is not one of the
+// standard encodings for HTML. Matching is case-insensitive and ignores
+// leading and trailing whitespace. Encoders will use HTML escape sequences for
+// runes that are not supported by the character set.
+func Lookup(label string) (e encoding.Encoding, name string) {
+ e, err := htmlindex.Get(label)
+ if err != nil {
+ return nil, ""
+ }
+ name, _ = htmlindex.Name(e)
+ return &htmlEncoding{e}, name
+}
+
+type htmlEncoding struct{ encoding.Encoding }
+
+func (h *htmlEncoding) NewEncoder() *encoding.Encoder {
+ // HTML requires a non-terminating legacy encoder. We use HTML escapes to
+ // substitute unsupported code points.
+ return encoding.HTMLEscapeUnsupported(h.Encoding.NewEncoder())
+}
+
+// DetermineEncoding determines the encoding of an HTML document by examining
+// up to the first 1024 bytes of content and the declared Content-Type.
+//
+// See http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#determining-the-character-encoding
+func DetermineEncoding(content []byte, contentType string) (e encoding.Encoding, name string, certain bool) {
+ if len(content) > 1024 {
+ content = content[:1024]
+ }
+
+ for _, b := range boms {
+ if bytes.HasPrefix(content, b.bom) {
+ e, name = Lookup(b.enc)
+ return e, name, true
+ }
+ }
+
+ if _, params, err := mime.ParseMediaType(contentType); err == nil {
+ if cs, ok := params["charset"]; ok {
+ if e, name = Lookup(cs); e != nil {
+ return e, name, true
+ }
+ }
+ }
+
+ if len(content) > 0 {
+ e, name = prescan(content)
+ if e != nil {
+ return e, name, false
+ }
+ }
+
+ // Try to detect UTF-8.
+ // First eliminate any partial rune at the end.
+ for i := len(content) - 1; i >= 0 && i > len(content)-4; i-- {
+ b := content[i]
+ if b < 0x80 {
+ break
+ }
+ if utf8.RuneStart(b) {
+ content = content[:i]
+ break
+ }
+ }
+ hasHighBit := false
+ for _, c := range content {
+ if c >= 0x80 {
+ hasHighBit = true
+ break
+ }
+ }
+ if hasHighBit && utf8.Valid(content) {
+ return encoding.Nop, "utf-8", false
+ }
+
+ // TODO: change default depending on user's locale?
+ return charmap.Windows1252, "windows-1252", false
+}
+
+// NewReader returns an io.Reader that converts the content of r to UTF-8.
+// It calls DetermineEncoding to find out what r's encoding is.
+func NewReader(r io.Reader, contentType string) (io.Reader, error) {
+ preview := make([]byte, 1024)
+ n, err := io.ReadFull(r, preview)
+ switch {
+ case err == io.ErrUnexpectedEOF:
+ preview = preview[:n]
+ r = bytes.NewReader(preview)
+ case err != nil:
+ return nil, err
+ default:
+ r = io.MultiReader(bytes.NewReader(preview), r)
+ }
+
+ if e, _, _ := DetermineEncoding(preview, contentType); e != encoding.Nop {
+ r = transform.NewReader(r, e.NewDecoder())
+ }
+ return r, nil
+}
+
+// NewReaderLabel returns a reader that converts from the specified charset to
+// UTF-8. It uses Lookup to find the encoding that corresponds to label, and
+// returns an error if Lookup returns nil. It is suitable for use as
+// encoding/xml.Decoder's CharsetReader function.
+func NewReaderLabel(label string, input io.Reader) (io.Reader, error) {
+ e, _ := Lookup(label)
+ if e == nil {
+ return nil, fmt.Errorf("unsupported charset: %q", label)
+ }
+ return transform.NewReader(input, e.NewDecoder()), nil
+}
+
+func prescan(content []byte) (e encoding.Encoding, name string) {
+ z := html.NewTokenizer(bytes.NewReader(content))
+ for {
+ switch z.Next() {
+ case html.ErrorToken:
+ return nil, ""
+
+ case html.StartTagToken, html.SelfClosingTagToken:
+ tagName, hasAttr := z.TagName()
+ if !bytes.Equal(tagName, []byte("meta")) {
+ continue
+ }
+ attrList := make(map[string]bool)
+ gotPragma := false
+
+ const (
+ dontKnow = iota
+ doNeedPragma
+ doNotNeedPragma
+ )
+ needPragma := dontKnow
+
+ name = ""
+ e = nil
+ for hasAttr {
+ var key, val []byte
+ key, val, hasAttr = z.TagAttr()
+ ks := string(key)
+ if attrList[ks] {
+ continue
+ }
+ attrList[ks] = true
+ for i, c := range val {
+ if 'A' <= c && c <= 'Z' {
+ val[i] = c + 0x20
+ }
+ }
+
+ switch ks {
+ case "http-equiv":
+ if bytes.Equal(val, []byte("content-type")) {
+ gotPragma = true
+ }
+
+ case "content":
+ if e == nil {
+ name = fromMetaElement(string(val))
+ if name != "" {
+ e, name = Lookup(name)
+ if e != nil {
+ needPragma = doNeedPragma
+ }
+ }
+ }
+
+ case "charset":
+ e, name = Lookup(string(val))
+ needPragma = doNotNeedPragma
+ }
+ }
+
+ if needPragma == dontKnow || needPragma == doNeedPragma && !gotPragma {
+ continue
+ }
+
+ if strings.HasPrefix(name, "utf-16") {
+ name = "utf-8"
+ e = encoding.Nop
+ }
+
+ if e != nil {
+ return e, name
+ }
+ }
+ }
+}
+
+func fromMetaElement(s string) string {
+ for s != "" {
+ csLoc := strings.Index(s, "charset")
+ if csLoc == -1 {
+ return ""
+ }
+ s = s[csLoc+len("charset"):]
+ s = strings.TrimLeft(s, " \t\n\f\r")
+ if !strings.HasPrefix(s, "=") {
+ continue
+ }
+ s = s[1:]
+ s = strings.TrimLeft(s, " \t\n\f\r")
+ if s == "" {
+ return ""
+ }
+ if q := s[0]; q == '"' || q == '\'' {
+ s = s[1:]
+ closeQuote := strings.IndexRune(s, rune(q))
+ if closeQuote == -1 {
+ return ""
+ }
+ return s[:closeQuote]
+ }
+
+ end := strings.IndexAny(s, "; \t\n\f\r")
+ if end == -1 {
+ end = len(s)
+ }
+ return s[:end]
+ }
+ return ""
+}
+
+var boms = []struct {
+ bom []byte
+ enc string
+}{
+ {[]byte{0xfe, 0xff}, "utf-16be"},
+ {[]byte{0xff, 0xfe}, "utf-16le"},
+ {[]byte{0xef, 0xbb, 0xbf}, "utf-8"},
+}
diff --git a/vendor/golang.org/x/net/html/const.go b/vendor/golang.org/x/net/html/const.go
new file mode 100644
index 000000000..a3a918f0b
--- /dev/null
+++ b/vendor/golang.org/x/net/html/const.go
@@ -0,0 +1,112 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package html
+
+// Section 12.2.4.2 of the HTML5 specification says "The following elements
+// have varying levels of special parsing rules".
+// https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements
+var isSpecialElementMap = map[string]bool{
+ "address": true,
+ "applet": true,
+ "area": true,
+ "article": true,
+ "aside": true,
+ "base": true,
+ "basefont": true,
+ "bgsound": true,
+ "blockquote": true,
+ "body": true,
+ "br": true,
+ "button": true,
+ "caption": true,
+ "center": true,
+ "col": true,
+ "colgroup": true,
+ "dd": true,
+ "details": true,
+ "dir": true,
+ "div": true,
+ "dl": true,
+ "dt": true,
+ "embed": true,
+ "fieldset": true,
+ "figcaption": true,
+ "figure": true,
+ "footer": true,
+ "form": true,
+ "frame": true,
+ "frameset": true,
+ "h1": true,
+ "h2": true,
+ "h3": true,
+ "h4": true,
+ "h5": true,
+ "h6": true,
+ "head": true,
+ "header": true,
+ "hgroup": true,
+ "hr": true,
+ "html": true,
+ "iframe": true,
+ "img": true,
+ "input": true,
+ "isindex": true, // The 'isindex' element has been removed, but keep it for backwards compatibility.
+ "keygen": true,
+ "li": true,
+ "link": true,
+ "listing": true,
+ "main": true,
+ "marquee": true,
+ "menu": true,
+ "meta": true,
+ "nav": true,
+ "noembed": true,
+ "noframes": true,
+ "noscript": true,
+ "object": true,
+ "ol": true,
+ "p": true,
+ "param": true,
+ "plaintext": true,
+ "pre": true,
+ "script": true,
+ "section": true,
+ "select": true,
+ "source": true,
+ "style": true,
+ "summary": true,
+ "table": true,
+ "tbody": true,
+ "td": true,
+ "template": true,
+ "textarea": true,
+ "tfoot": true,
+ "th": true,
+ "thead": true,
+ "title": true,
+ "tr": true,
+ "track": true,
+ "ul": true,
+ "wbr": true,
+ "xmp": true,
+}
+
+func isSpecialElement(element *Node) bool {
+ switch element.Namespace {
+ case "", "html":
+ return isSpecialElementMap[element.Data]
+ case "math":
+ switch element.Data {
+ case "mi", "mo", "mn", "ms", "mtext", "annotation-xml":
+ return true
+ }
+ case "svg":
+ switch element.Data {
+ case "foreignObject", "desc", "title":
+ return true
+ }
+ }
+ return false
+}
diff --git a/vendor/golang.org/x/net/html/doc.go b/vendor/golang.org/x/net/html/doc.go
new file mode 100644
index 000000000..822ed42a0
--- /dev/null
+++ b/vendor/golang.org/x/net/html/doc.go
@@ -0,0 +1,106 @@
+// Copyright 2010 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 html implements an HTML5-compliant tokenizer and parser.
+
+Tokenization is done by creating a Tokenizer for an io.Reader r. It is the
+caller's responsibility to ensure that r provides UTF-8 encoded HTML.
+
+ z := html.NewTokenizer(r)
+
+Given a Tokenizer z, the HTML is tokenized by repeatedly calling z.Next(),
+which parses the next token and returns its type, or an error:
+
+ for {
+ tt := z.Next()
+ if tt == html.ErrorToken {
+ // ...
+ return ...
+ }
+ // Process the current token.
+ }
+
+There are two APIs for retrieving the current token. The high-level API is to
+call Token; the low-level API is to call Text or TagName / TagAttr. Both APIs
+allow optionally calling Raw after Next but before Token, Text, TagName, or
+TagAttr. In EBNF notation, the valid call sequence per token is:
+
+ Next {Raw} [ Token | Text | TagName {TagAttr} ]
+
+Token returns an independent data structure that completely describes a token.
+Entities (such as "&lt;") are unescaped, tag names and attribute keys are
+lower-cased, and attributes are collected into a []Attribute. For example:
+
+ for {
+ if z.Next() == html.ErrorToken {
+ // Returning io.EOF indicates success.
+ return z.Err()
+ }
+ emitToken(z.Token())
+ }
+
+The low-level API performs fewer allocations and copies, but the contents of
+the []byte values returned by Text, TagName and TagAttr may change on the next
+call to Next. For example, to extract an HTML page's anchor text:
+
+ depth := 0
+ for {
+ tt := z.Next()
+ switch tt {
+ case html.ErrorToken:
+ return z.Err()
+ case html.TextToken:
+ if depth > 0 {
+ // emitBytes should copy the []byte it receives,
+ // if it doesn't process it immediately.
+ emitBytes(z.Text())
+ }
+ case html.StartTagToken, html.EndTagToken:
+ tn, _ := z.TagName()
+ if len(tn) == 1 && tn[0] == 'a' {
+ if tt == html.StartTagToken {
+ depth++
+ } else {
+ depth--
+ }
+ }
+ }
+ }
+
+Parsing is done by calling Parse with an io.Reader, which returns the root of
+the parse tree (the document element) as a *Node. It is the caller's
+responsibility to ensure that the Reader provides UTF-8 encoded HTML. For
+example, to process each anchor node in depth-first order:
+
+ doc, err := html.Parse(r)
+ if err != nil {
+ // ...
+ }
+ var f func(*html.Node)
+ f = func(n *html.Node) {
+ if n.Type == html.ElementNode && n.Data == "a" {
+ // Do something with n...
+ }
+ for c := n.FirstChild; c != nil; c = c.NextSibling {
+ f(c)
+ }
+ }
+ f(doc)
+
+The relevant specifications include:
+https://html.spec.whatwg.org/multipage/syntax.html and
+https://html.spec.whatwg.org/multipage/syntax.html#tokenization
+*/
+package html // import "golang.org/x/net/html"
+
+// The tokenization algorithm implemented by this package is not a line-by-line
+// transliteration of the relatively verbose state-machine in the WHATWG
+// specification. A more direct approach is used instead, where the program
+// counter implies the state, such as whether it is tokenizing a tag or a text
+// node. Specification compliance is verified by checking expected and actual
+// outputs over a test suite rather than aiming for algorithmic fidelity.
+
+// TODO(nigeltao): Does a DOM API belong in this package or a separate one?
+// TODO(nigeltao): How does parsing interact with a JavaScript engine?
diff --git a/vendor/golang.org/x/net/html/doctype.go b/vendor/golang.org/x/net/html/doctype.go
new file mode 100644
index 000000000..c484e5a94
--- /dev/null
+++ b/vendor/golang.org/x/net/html/doctype.go
@@ -0,0 +1,156 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package html
+
+import (
+ "strings"
+)
+
+// parseDoctype parses the data from a DoctypeToken into a name,
+// public identifier, and system identifier. It returns a Node whose Type
+// is DoctypeNode, whose Data is the name, and which has attributes
+// named "system" and "public" for the two identifiers if they were present.
+// quirks is whether the document should be parsed in "quirks mode".
+func parseDoctype(s string) (n *Node, quirks bool) {
+ n = &Node{Type: DoctypeNode}
+
+ // Find the name.
+ space := strings.IndexAny(s, whitespace)
+ if space == -1 {
+ space = len(s)
+ }
+ n.Data = s[:space]
+ // The comparison to "html" is case-sensitive.
+ if n.Data != "html" {
+ quirks = true
+ }
+ n.Data = strings.ToLower(n.Data)
+ s = strings.TrimLeft(s[space:], whitespace)
+
+ if len(s) < 6 {
+ // It can't start with "PUBLIC" or "SYSTEM".
+ // Ignore the rest of the string.
+ return n, quirks || s != ""
+ }
+
+ key := strings.ToLower(s[:6])
+ s = s[6:]
+ for key == "public" || key == "system" {
+ s = strings.TrimLeft(s, whitespace)
+ if s == "" {
+ break
+ }
+ quote := s[0]
+ if quote != '"' && quote != '\'' {
+ break
+ }
+ s = s[1:]
+ q := strings.IndexRune(s, rune(quote))
+ var id string
+ if q == -1 {
+ id = s
+ s = ""
+ } else {
+ id = s[:q]
+ s = s[q+1:]
+ }
+ n.Attr = append(n.Attr, Attribute{Key: key, Val: id})
+ if key == "public" {
+ key = "system"
+ } else {
+ key = ""
+ }
+ }
+
+ if key != "" || s != "" {
+ quirks = true
+ } else if len(n.Attr) > 0 {
+ if n.Attr[0].Key == "public" {
+ public := strings.ToLower(n.Attr[0].Val)
+ switch public {
+ case "-//w3o//dtd w3 html strict 3.0//en//", "-/w3d/dtd html 4.0 transitional/en", "html":
+ quirks = true
+ default:
+ for _, q := range quirkyIDs {
+ if strings.HasPrefix(public, q) {
+ quirks = true
+ break
+ }
+ }
+ }
+ // The following two public IDs only cause quirks mode if there is no system ID.
+ if len(n.Attr) == 1 && (strings.HasPrefix(public, "-//w3c//dtd html 4.01 frameset//") ||
+ strings.HasPrefix(public, "-//w3c//dtd html 4.01 transitional//")) {
+ quirks = true
+ }
+ }
+ if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" &&
+ strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" {
+ quirks = true
+ }
+ }
+
+ return n, quirks
+}
+
+// quirkyIDs is a list of public doctype identifiers that cause a document
+// to be interpreted in quirks mode. The identifiers should be in lower case.
+var quirkyIDs = []string{
+ "+//silmaril//dtd html pro v0r11 19970101//",
+ "-//advasoft ltd//dtd html 3.0 aswedit + extensions//",
+ "-//as//dtd html 3.0 aswedit + extensions//",
+ "-//ietf//dtd html 2.0 level 1//",
+ "-//ietf//dtd html 2.0 level 2//",
+ "-//ietf//dtd html 2.0 strict level 1//",
+ "-//ietf//dtd html 2.0 strict level 2//",
+ "-//ietf//dtd html 2.0 strict//",
+ "-//ietf//dtd html 2.0//",
+ "-//ietf//dtd html 2.1e//",
+ "-//ietf//dtd html 3.0//",
+ "-//ietf//dtd html 3.2 final//",
+ "-//ietf//dtd html 3.2//",
+ "-//ietf//dtd html 3//",
+ "-//ietf//dtd html level 0//",
+ "-//ietf//dtd html level 1//",
+ "-//ietf//dtd html level 2//",
+ "-//ietf//dtd html level 3//",
+ "-//ietf//dtd html strict level 0//",
+ "-//ietf//dtd html strict level 1//",
+ "-//ietf//dtd html strict level 2//",
+ "-//ietf//dtd html strict level 3//",
+ "-//ietf//dtd html strict//",
+ "-//ietf//dtd html//",
+ "-//metrius//dtd metrius presentational//",
+ "-//microsoft//dtd internet explorer 2.0 html strict//",
+ "-//microsoft//dtd internet explorer 2.0 html//",
+ "-//microsoft//dtd internet explorer 2.0 tables//",
+ "-//microsoft//dtd internet explorer 3.0 html strict//",
+ "-//microsoft//dtd internet explorer 3.0 html//",
+ "-//microsoft//dtd internet explorer 3.0 tables//",
+ "-//netscape comm. corp.//dtd html//",
+ "-//netscape comm. corp.//dtd strict html//",
+ "-//o'reilly and associates//dtd html 2.0//",
+ "-//o'reilly and associates//dtd html extended 1.0//",
+ "-//o'reilly and associates//dtd html extended relaxed 1.0//",
+ "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//",
+ "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//",
+ "-//spyglass//dtd html 2.0 extended//",
+ "-//sq//dtd html 2.0 hotmetal + extensions//",
+ "-//sun microsystems corp.//dtd hotjava html//",
+ "-//sun microsystems corp.//dtd hotjava strict html//",
+ "-//w3c//dtd html 3 1995-03-24//",
+ "-//w3c//dtd html 3.2 draft//",
+ "-//w3c//dtd html 3.2 final//",
+ "-//w3c//dtd html 3.2//",
+ "-//w3c//dtd html 3.2s draft//",
+ "-//w3c//dtd html 4.0 frameset//",
+ "-//w3c//dtd html 4.0 transitional//",
+ "-//w3c//dtd html experimental 19960712//",
+ "-//w3c//dtd html experimental 970421//",
+ "-//w3c//dtd w3 html//",
+ "-//w3o//dtd w3 html 3.0//",
+ "-//webtechs//dtd mozilla html 2.0//",
+ "-//webtechs//dtd mozilla html//",
+}
diff --git a/vendor/golang.org/x/net/html/entity.go b/vendor/golang.org/x/net/html/entity.go
new file mode 100644
index 000000000..b628880a0
--- /dev/null
+++ b/vendor/golang.org/x/net/html/entity.go
@@ -0,0 +1,2253 @@
+// Copyright 2010 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 html
+
+// All entities that do not end with ';' are 6 or fewer bytes long.
+const longestEntityWithoutSemicolon = 6
+
+// entity is a map from HTML entity names to their values. The semicolon matters:
+// https://html.spec.whatwg.org/multipage/syntax.html#named-character-references
+// lists both "amp" and "amp;" as two separate entries.
+//
+// Note that the HTML5 list is larger than the HTML4 list at
+// http://www.w3.org/TR/html4/sgml/entities.html
+var entity = map[string]rune{
+ "AElig;": '\U000000C6',
+ "AMP;": '\U00000026',
+ "Aacute;": '\U000000C1',
+ "Abreve;": '\U00000102',
+ "Acirc;": '\U000000C2',
+ "Acy;": '\U00000410',
+ "Afr;": '\U0001D504',
+ "Agrave;": '\U000000C0',
+ "Alpha;": '\U00000391',
+ "Amacr;": '\U00000100',
+ "And;": '\U00002A53',
+ "Aogon;": '\U00000104',
+ "Aopf;": '\U0001D538',
+ "ApplyFunction;": '\U00002061',
+ "Aring;": '\U000000C5',
+ "Ascr;": '\U0001D49C',
+ "Assign;": '\U00002254',
+ "Atilde;": '\U000000C3',
+ "Auml;": '\U000000C4',
+ "Backslash;": '\U00002216',
+ "Barv;": '\U00002AE7',
+ "Barwed;": '\U00002306',
+ "Bcy;": '\U00000411',
+ "Because;": '\U00002235',
+ "Bernoullis;": '\U0000212C',
+ "Beta;": '\U00000392',
+ "Bfr;": '\U0001D505',
+ "Bopf;": '\U0001D539',
+ "Breve;": '\U000002D8',
+ "Bscr;": '\U0000212C',
+ "Bumpeq;": '\U0000224E',
+ "CHcy;": '\U00000427',
+ "COPY;": '\U000000A9',
+ "Cacute;": '\U00000106',
+ "Cap;": '\U000022D2',
+ "CapitalDifferentialD;": '\U00002145',
+ "Cayleys;": '\U0000212D',
+ "Ccaron;": '\U0000010C',
+ "Ccedil;": '\U000000C7',
+ "Ccirc;": '\U00000108',
+ "Cconint;": '\U00002230',
+ "Cdot;": '\U0000010A',
+ "Cedilla;": '\U000000B8',
+ "CenterDot;": '\U000000B7',
+ "Cfr;": '\U0000212D',
+ "Chi;": '\U000003A7',
+ "CircleDot;": '\U00002299',
+ "CircleMinus;": '\U00002296',
+ "CirclePlus;": '\U00002295',
+ "CircleTimes;": '\U00002297',
+ "ClockwiseContourIntegral;": '\U00002232',
+ "CloseCurlyDoubleQuote;": '\U0000201D',
+ "CloseCurlyQuote;": '\U00002019',
+ "Colon;": '\U00002237',
+ "Colone;": '\U00002A74',
+ "Congruent;": '\U00002261',
+ "Conint;": '\U0000222F',
+ "ContourIntegral;": '\U0000222E',
+ "Copf;": '\U00002102',
+ "Coproduct;": '\U00002210',
+ "CounterClockwiseContourIntegral;": '\U00002233',
+ "Cross;": '\U00002A2F',
+ "Cscr;": '\U0001D49E',
+ "Cup;": '\U000022D3',
+ "CupCap;": '\U0000224D',
+ "DD;": '\U00002145',
+ "DDotrahd;": '\U00002911',
+ "DJcy;": '\U00000402',
+ "DScy;": '\U00000405',
+ "DZcy;": '\U0000040F',
+ "Dagger;": '\U00002021',
+ "Darr;": '\U000021A1',
+ "Dashv;": '\U00002AE4',
+ "Dcaron;": '\U0000010E',
+ "Dcy;": '\U00000414',
+ "Del;": '\U00002207',
+ "Delta;": '\U00000394',
+ "Dfr;": '\U0001D507',
+ "DiacriticalAcute;": '\U000000B4',
+ "DiacriticalDot;": '\U000002D9',
+ "DiacriticalDoubleAcute;": '\U000002DD',
+ "DiacriticalGrave;": '\U00000060',
+ "DiacriticalTilde;": '\U000002DC',
+ "Diamond;": '\U000022C4',
+ "DifferentialD;": '\U00002146',
+ "Dopf;": '\U0001D53B',
+ "Dot;": '\U000000A8',
+ "DotDot;": '\U000020DC',
+ "DotEqual;": '\U00002250',
+ "DoubleContourIntegral;": '\U0000222F',
+ "DoubleDot;": '\U000000A8',
+ "DoubleDownArrow;": '\U000021D3',
+ "DoubleLeftArrow;": '\U000021D0',
+ "DoubleLeftRightArrow;": '\U000021D4',
+ "DoubleLeftTee;": '\U00002AE4',
+ "DoubleLongLeftArrow;": '\U000027F8',
+ "DoubleLongLeftRightArrow;": '\U000027FA',
+ "DoubleLongRightArrow;": '\U000027F9',
+ "DoubleRightArrow;": '\U000021D2',
+ "DoubleRightTee;": '\U000022A8',
+ "DoubleUpArrow;": '\U000021D1',
+ "DoubleUpDownArrow;": '\U000021D5',
+ "DoubleVerticalBar;": '\U00002225',
+ "DownArrow;": '\U00002193',
+ "DownArrowBar;": '\U00002913',
+ "DownArrowUpArrow;": '\U000021F5',
+ "DownBreve;": '\U00000311',
+ "DownLeftRightVector;": '\U00002950',
+ "DownLeftTeeVector;": '\U0000295E',
+ "DownLeftVector;": '\U000021BD',
+ "DownLeftVectorBar;": '\U00002956',
+ "DownRightTeeVector;": '\U0000295F',
+ "DownRightVector;": '\U000021C1',
+ "DownRightVectorBar;": '\U00002957',
+ "DownTee;": '\U000022A4',
+ "DownTeeArrow;": '\U000021A7',
+ "Downarrow;": '\U000021D3',
+ "Dscr;": '\U0001D49F',
+ "Dstrok;": '\U00000110',
+ "ENG;": '\U0000014A',
+ "ETH;": '\U000000D0',
+ "Eacute;": '\U000000C9',
+ "Ecaron;": '\U0000011A',
+ "Ecirc;": '\U000000CA',
+ "Ecy;": '\U0000042D',
+ "Edot;": '\U00000116',
+ "Efr;": '\U0001D508',
+ "Egrave;": '\U000000C8',
+ "Element;": '\U00002208',
+ "Emacr;": '\U00000112',
+ "EmptySmallSquare;": '\U000025FB',
+ "EmptyVerySmallSquare;": '\U000025AB',
+ "Eogon;": '\U00000118',
+ "Eopf;": '\U0001D53C',
+ "Epsilon;": '\U00000395',
+ "Equal;": '\U00002A75',
+ "EqualTilde;": '\U00002242',
+ "Equilibrium;": '\U000021CC',
+ "Escr;": '\U00002130',
+ "Esim;": '\U00002A73',
+ "Eta;": '\U00000397',
+ "Euml;": '\U000000CB',
+ "Exists;": '\U00002203',
+ "ExponentialE;": '\U00002147',
+ "Fcy;": '\U00000424',
+ "Ffr;": '\U0001D509',
+ "FilledSmallSquare;": '\U000025FC',
+ "FilledVerySmallSquare;": '\U000025AA',
+ "Fopf;": '\U0001D53D',
+ "ForAll;": '\U00002200',
+ "Fouriertrf;": '\U00002131',
+ "Fscr;": '\U00002131',
+ "GJcy;": '\U00000403',
+ "GT;": '\U0000003E',
+ "Gamma;": '\U00000393',
+ "Gammad;": '\U000003DC',
+ "Gbreve;": '\U0000011E',
+ "Gcedil;": '\U00000122',
+ "Gcirc;": '\U0000011C',
+ "Gcy;": '\U00000413',
+ "Gdot;": '\U00000120',
+ "Gfr;": '\U0001D50A',
+ "Gg;": '\U000022D9',
+ "Gopf;": '\U0001D53E',
+ "GreaterEqual;": '\U00002265',
+ "GreaterEqualLess;": '\U000022DB',
+ "GreaterFullEqual;": '\U00002267',
+ "GreaterGreater;": '\U00002AA2',
+ "GreaterLess;": '\U00002277',
+ "GreaterSlantEqual;": '\U00002A7E',
+ "GreaterTilde;": '\U00002273',
+ "Gscr;": '\U0001D4A2',
+ "Gt;": '\U0000226B',
+ "HARDcy;": '\U0000042A',
+ "Hacek;": '\U000002C7',
+ "Hat;": '\U0000005E',
+ "Hcirc;": '\U00000124',
+ "Hfr;": '\U0000210C',
+ "HilbertSpace;": '\U0000210B',
+ "Hopf;": '\U0000210D',
+ "HorizontalLine;": '\U00002500',
+ "Hscr;": '\U0000210B',
+ "Hstrok;": '\U00000126',
+ "HumpDownHump;": '\U0000224E',
+ "HumpEqual;": '\U0000224F',
+ "IEcy;": '\U00000415',
+ "IJlig;": '\U00000132',
+ "IOcy;": '\U00000401',
+ "Iacute;": '\U000000CD',
+ "Icirc;": '\U000000CE',
+ "Icy;": '\U00000418',
+ "Idot;": '\U00000130',
+ "Ifr;": '\U00002111',
+ "Igrave;": '\U000000CC',
+ "Im;": '\U00002111',
+ "Imacr;": '\U0000012A',
+ "ImaginaryI;": '\U00002148',
+ "Implies;": '\U000021D2',
+ "Int;": '\U0000222C',
+ "Integral;": '\U0000222B',
+ "Intersection;": '\U000022C2',
+ "InvisibleComma;": '\U00002063',
+ "InvisibleTimes;": '\U00002062',
+ "Iogon;": '\U0000012E',
+ "Iopf;": '\U0001D540',
+ "Iota;": '\U00000399',
+ "Iscr;": '\U00002110',
+ "Itilde;": '\U00000128',
+ "Iukcy;": '\U00000406',
+ "Iuml;": '\U000000CF',
+ "Jcirc;": '\U00000134',
+ "Jcy;": '\U00000419',
+ "Jfr;": '\U0001D50D',
+ "Jopf;": '\U0001D541',
+ "Jscr;": '\U0001D4A5',
+ "Jsercy;": '\U00000408',
+ "Jukcy;": '\U00000404',
+ "KHcy;": '\U00000425',
+ "KJcy;": '\U0000040C',
+ "Kappa;": '\U0000039A',
+ "Kcedil;": '\U00000136',
+ "Kcy;": '\U0000041A',
+ "Kfr;": '\U0001D50E',
+ "Kopf;": '\U0001D542',
+ "Kscr;": '\U0001D4A6',
+ "LJcy;": '\U00000409',
+ "LT;": '\U0000003C',
+ "Lacute;": '\U00000139',
+ "Lambda;": '\U0000039B',
+ "Lang;": '\U000027EA',
+ "Laplacetrf;": '\U00002112',
+ "Larr;": '\U0000219E',
+ "Lcaron;": '\U0000013D',
+ "Lcedil;": '\U0000013B',
+ "Lcy;": '\U0000041B',
+ "LeftAngleBracket;": '\U000027E8',
+ "LeftArrow;": '\U00002190',
+ "LeftArrowBar;": '\U000021E4',
+ "LeftArrowRightArrow;": '\U000021C6',
+ "LeftCeiling;": '\U00002308',
+ "LeftDoubleBracket;": '\U000027E6',
+ "LeftDownTeeVector;": '\U00002961',
+ "LeftDownVector;": '\U000021C3',
+ "LeftDownVectorBar;": '\U00002959',
+ "LeftFloor;": '\U0000230A',
+ "LeftRightArrow;": '\U00002194',
+ "LeftRightVector;": '\U0000294E',
+ "LeftTee;": '\U000022A3',
+ "LeftTeeArrow;": '\U000021A4',
+ "LeftTeeVector;": '\U0000295A',
+ "LeftTriangle;": '\U000022B2',
+ "LeftTriangleBar;": '\U000029CF',
+ "LeftTriangleEqual;": '\U000022B4',
+ "LeftUpDownVector;": '\U00002951',
+ "LeftUpTeeVector;": '\U00002960',
+ "LeftUpVector;": '\U000021BF',
+ "LeftUpVectorBar;": '\U00002958',
+ "LeftVector;": '\U000021BC',
+ "LeftVectorBar;": '\U00002952',
+ "Leftarrow;": '\U000021D0',
+ "Leftrightarrow;": '\U000021D4',
+ "LessEqualGreater;": '\U000022DA',
+ "LessFullEqual;": '\U00002266',
+ "LessGreater;": '\U00002276',
+ "LessLess;": '\U00002AA1',
+ "LessSlantEqual;": '\U00002A7D',
+ "LessTilde;": '\U00002272',
+ "Lfr;": '\U0001D50F',
+ "Ll;": '\U000022D8',
+ "Lleftarrow;": '\U000021DA',
+ "Lmidot;": '\U0000013F',
+ "LongLeftArrow;": '\U000027F5',
+ "LongLeftRightArrow;": '\U000027F7',
+ "LongRightArrow;": '\U000027F6',
+ "Longleftarrow;": '\U000027F8',
+ "Longleftrightarrow;": '\U000027FA',
+ "Longrightarrow;": '\U000027F9',
+ "Lopf;": '\U0001D543',
+ "LowerLeftArrow;": '\U00002199',
+ "LowerRightArrow;": '\U00002198',
+ "Lscr;": '\U00002112',
+ "Lsh;": '\U000021B0',
+ "Lstrok;": '\U00000141',
+ "Lt;": '\U0000226A',
+ "Map;": '\U00002905',
+ "Mcy;": '\U0000041C',
+ "MediumSpace;": '\U0000205F',
+ "Mellintrf;": '\U00002133',
+ "Mfr;": '\U0001D510',
+ "MinusPlus;": '\U00002213',
+ "Mopf;": '\U0001D544',
+ "Mscr;": '\U00002133',
+ "Mu;": '\U0000039C',
+ "NJcy;": '\U0000040A',
+ "Nacute;": '\U00000143',
+ "Ncaron;": '\U00000147',
+ "Ncedil;": '\U00000145',
+ "Ncy;": '\U0000041D',
+ "NegativeMediumSpace;": '\U0000200B',
+ "NegativeThickSpace;": '\U0000200B',
+ "NegativeThinSpace;": '\U0000200B',
+ "NegativeVeryThinSpace;": '\U0000200B',
+ "NestedGreaterGreater;": '\U0000226B',
+ "NestedLessLess;": '\U0000226A',
+ "NewLine;": '\U0000000A',
+ "Nfr;": '\U0001D511',
+ "NoBreak;": '\U00002060',
+ "NonBreakingSpace;": '\U000000A0',
+ "Nopf;": '\U00002115',
+ "Not;": '\U00002AEC',
+ "NotCongruent;": '\U00002262',
+ "NotCupCap;": '\U0000226D',
+ "NotDoubleVerticalBar;": '\U00002226',
+ "NotElement;": '\U00002209',
+ "NotEqual;": '\U00002260',
+ "NotExists;": '\U00002204',
+ "NotGreater;": '\U0000226F',
+ "NotGreaterEqual;": '\U00002271',
+ "NotGreaterLess;": '\U00002279',
+ "NotGreaterTilde;": '\U00002275',
+ "NotLeftTriangle;": '\U000022EA',
+ "NotLeftTriangleEqual;": '\U000022EC',
+ "NotLess;": '\U0000226E',
+ "NotLessEqual;": '\U00002270',
+ "NotLessGreater;": '\U00002278',
+ "NotLessTilde;": '\U00002274',
+ "NotPrecedes;": '\U00002280',
+ "NotPrecedesSlantEqual;": '\U000022E0',
+ "NotReverseElement;": '\U0000220C',
+ "NotRightTriangle;": '\U000022EB',
+ "NotRightTriangleEqual;": '\U000022ED',
+ "NotSquareSubsetEqual;": '\U000022E2',
+ "NotSquareSupersetEqual;": '\U000022E3',
+ "NotSubsetEqual;": '\U00002288',
+ "NotSucceeds;": '\U00002281',
+ "NotSucceedsSlantEqual;": '\U000022E1',
+ "NotSupersetEqual;": '\U00002289',
+ "NotTilde;": '\U00002241',
+ "NotTildeEqual;": '\U00002244',
+ "NotTildeFullEqual;": '\U00002247',
+ "NotTildeTilde;": '\U00002249',
+ "NotVerticalBar;": '\U00002224',
+ "Nscr;": '\U0001D4A9',
+ "Ntilde;": '\U000000D1',
+ "Nu;": '\U0000039D',
+ "OElig;": '\U00000152',
+ "Oacute;": '\U000000D3',
+ "Ocirc;": '\U000000D4',
+ "Ocy;": '\U0000041E',
+ "Odblac;": '\U00000150',
+ "Ofr;": '\U0001D512',
+ "Ograve;": '\U000000D2',
+ "Omacr;": '\U0000014C',
+ "Omega;": '\U000003A9',
+ "Omicron;": '\U0000039F',
+ "Oopf;": '\U0001D546',
+ "OpenCurlyDoubleQuote;": '\U0000201C',
+ "OpenCurlyQuote;": '\U00002018',
+ "Or;": '\U00002A54',
+ "Oscr;": '\U0001D4AA',
+ "Oslash;": '\U000000D8',
+ "Otilde;": '\U000000D5',
+ "Otimes;": '\U00002A37',
+ "Ouml;": '\U000000D6',
+ "OverBar;": '\U0000203E',
+ "OverBrace;": '\U000023DE',
+ "OverBracket;": '\U000023B4',
+ "OverParenthesis;": '\U000023DC',
+ "PartialD;": '\U00002202',
+ "Pcy;": '\U0000041F',
+ "Pfr;": '\U0001D513',
+ "Phi;": '\U000003A6',
+ "Pi;": '\U000003A0',
+ "PlusMinus;": '\U000000B1',
+ "Poincareplane;": '\U0000210C',
+ "Popf;": '\U00002119',
+ "Pr;": '\U00002ABB',
+ "Precedes;": '\U0000227A',
+ "PrecedesEqual;": '\U00002AAF',
+ "PrecedesSlantEqual;": '\U0000227C',
+ "PrecedesTilde;": '\U0000227E',
+ "Prime;": '\U00002033',
+ "Product;": '\U0000220F',
+ "Proportion;": '\U00002237',
+ "Proportional;": '\U0000221D',
+ "Pscr;": '\U0001D4AB',
+ "Psi;": '\U000003A8',
+ "QUOT;": '\U00000022',
+ "Qfr;": '\U0001D514',
+ "Qopf;": '\U0000211A',
+ "Qscr;": '\U0001D4AC',
+ "RBarr;": '\U00002910',
+ "REG;": '\U000000AE',
+ "Racute;": '\U00000154',
+ "Rang;": '\U000027EB',
+ "Rarr;": '\U000021A0',
+ "Rarrtl;": '\U00002916',
+ "Rcaron;": '\U00000158',
+ "Rcedil;": '\U00000156',
+ "Rcy;": '\U00000420',
+ "Re;": '\U0000211C',
+ "ReverseElement;": '\U0000220B',
+ "ReverseEquilibrium;": '\U000021CB',
+ "ReverseUpEquilibrium;": '\U0000296F',
+ "Rfr;": '\U0000211C',
+ "Rho;": '\U000003A1',
+ "RightAngleBracket;": '\U000027E9',
+ "RightArrow;": '\U00002192',
+ "RightArrowBar;": '\U000021E5',
+ "RightArrowLeftArrow;": '\U000021C4',
+ "RightCeiling;": '\U00002309',
+ "RightDoubleBracket;": '\U000027E7',
+ "RightDownTeeVector;": '\U0000295D',
+ "RightDownVector;": '\U000021C2',
+ "RightDownVectorBar;": '\U00002955',
+ "RightFloor;": '\U0000230B',
+ "RightTee;": '\U000022A2',
+ "RightTeeArrow;": '\U000021A6',
+ "RightTeeVector;": '\U0000295B',
+ "RightTriangle;": '\U000022B3',
+ "RightTriangleBar;": '\U000029D0',
+ "RightTriangleEqual;": '\U000022B5',
+ "RightUpDownVector;": '\U0000294F',
+ "RightUpTeeVector;": '\U0000295C',
+ "RightUpVector;": '\U000021BE',
+ "RightUpVectorBar;": '\U00002954',
+ "RightVector;": '\U000021C0',
+ "RightVectorBar;": '\U00002953',
+ "Rightarrow;": '\U000021D2',
+ "Ropf;": '\U0000211D',
+ "RoundImplies;": '\U00002970',
+ "Rrightarrow;": '\U000021DB',
+ "Rscr;": '\U0000211B',
+ "Rsh;": '\U000021B1',
+ "RuleDelayed;": '\U000029F4',
+ "SHCHcy;": '\U00000429',
+ "SHcy;": '\U00000428',
+ "SOFTcy;": '\U0000042C',
+ "Sacute;": '\U0000015A',
+ "Sc;": '\U00002ABC',
+ "Scaron;": '\U00000160',
+ "Scedil;": '\U0000015E',
+ "Scirc;": '\U0000015C',
+ "Scy;": '\U00000421',
+ "Sfr;": '\U0001D516',
+ "ShortDownArrow;": '\U00002193',
+ "ShortLeftArrow;": '\U00002190',
+ "ShortRightArrow;": '\U00002192',
+ "ShortUpArrow;": '\U00002191',
+ "Sigma;": '\U000003A3',
+ "SmallCircle;": '\U00002218',
+ "Sopf;": '\U0001D54A',
+ "Sqrt;": '\U0000221A',
+ "Square;": '\U000025A1',
+ "SquareIntersection;": '\U00002293',
+ "SquareSubset;": '\U0000228F',
+ "SquareSubsetEqual;": '\U00002291',
+ "SquareSuperset;": '\U00002290',
+ "SquareSupersetEqual;": '\U00002292',
+ "SquareUnion;": '\U00002294',
+ "Sscr;": '\U0001D4AE',
+ "Star;": '\U000022C6',
+ "Sub;": '\U000022D0',
+ "Subset;": '\U000022D0',
+ "SubsetEqual;": '\U00002286',
+ "Succeeds;": '\U0000227B',
+ "SucceedsEqual;": '\U00002AB0',
+ "SucceedsSlantEqual;": '\U0000227D',
+ "SucceedsTilde;": '\U0000227F',
+ "SuchThat;": '\U0000220B',
+ "Sum;": '\U00002211',
+ "Sup;": '\U000022D1',
+ "Superset;": '\U00002283',
+ "SupersetEqual;": '\U00002287',
+ "Supset;": '\U000022D1',
+ "THORN;": '\U000000DE',
+ "TRADE;": '\U00002122',
+ "TSHcy;": '\U0000040B',
+ "TScy;": '\U00000426',
+ "Tab;": '\U00000009',
+ "Tau;": '\U000003A4',
+ "Tcaron;": '\U00000164',
+ "Tcedil;": '\U00000162',
+ "Tcy;": '\U00000422',
+ "Tfr;": '\U0001D517',
+ "Therefore;": '\U00002234',
+ "Theta;": '\U00000398',
+ "ThinSpace;": '\U00002009',
+ "Tilde;": '\U0000223C',
+ "TildeEqual;": '\U00002243',
+ "TildeFullEqual;": '\U00002245',
+ "TildeTilde;": '\U00002248',
+ "Topf;": '\U0001D54B',
+ "TripleDot;": '\U000020DB',
+ "Tscr;": '\U0001D4AF',
+ "Tstrok;": '\U00000166',
+ "Uacute;": '\U000000DA',
+ "Uarr;": '\U0000219F',
+ "Uarrocir;": '\U00002949',
+ "Ubrcy;": '\U0000040E',
+ "Ubreve;": '\U0000016C',
+ "Ucirc;": '\U000000DB',
+ "Ucy;": '\U00000423',
+ "Udblac;": '\U00000170',
+ "Ufr;": '\U0001D518',
+ "Ugrave;": '\U000000D9',
+ "Umacr;": '\U0000016A',
+ "UnderBar;": '\U0000005F',
+ "UnderBrace;": '\U000023DF',
+ "UnderBracket;": '\U000023B5',
+ "UnderParenthesis;": '\U000023DD',
+ "Union;": '\U000022C3',
+ "UnionPlus;": '\U0000228E',
+ "Uogon;": '\U00000172',
+ "Uopf;": '\U0001D54C',
+ "UpArrow;": '\U00002191',
+ "UpArrowBar;": '\U00002912',
+ "UpArrowDownArrow;": '\U000021C5',
+ "UpDownArrow;": '\U00002195',
+ "UpEquilibrium;": '\U0000296E',
+ "UpTee;": '\U000022A5',
+ "UpTeeArrow;": '\U000021A5',
+ "Uparrow;": '\U000021D1',
+ "Updownarrow;": '\U000021D5',
+ "UpperLeftArrow;": '\U00002196',
+ "UpperRightArrow;": '\U00002197',
+ "Upsi;": '\U000003D2',
+ "Upsilon;": '\U000003A5',
+ "Uring;": '\U0000016E',
+ "Uscr;": '\U0001D4B0',
+ "Utilde;": '\U00000168',
+ "Uuml;": '\U000000DC',
+ "VDash;": '\U000022AB',
+ "Vbar;": '\U00002AEB',
+ "Vcy;": '\U00000412',
+ "Vdash;": '\U000022A9',
+ "Vdashl;": '\U00002AE6',
+ "Vee;": '\U000022C1',
+ "Verbar;": '\U00002016',
+ "Vert;": '\U00002016',
+ "VerticalBar;": '\U00002223',
+ "VerticalLine;": '\U0000007C',
+ "VerticalSeparator;": '\U00002758',
+ "VerticalTilde;": '\U00002240',
+ "VeryThinSpace;": '\U0000200A',
+ "Vfr;": '\U0001D519',
+ "Vopf;": '\U0001D54D',
+ "Vscr;": '\U0001D4B1',
+ "Vvdash;": '\U000022AA',
+ "Wcirc;": '\U00000174',
+ "Wedge;": '\U000022C0',
+ "Wfr;": '\U0001D51A',
+ "Wopf;": '\U0001D54E',
+ "Wscr;": '\U0001D4B2',
+ "Xfr;": '\U0001D51B',
+ "Xi;": '\U0000039E',
+ "Xopf;": '\U0001D54F',
+ "Xscr;": '\U0001D4B3',
+ "YAcy;": '\U0000042F',
+ "YIcy;": '\U00000407',
+ "YUcy;": '\U0000042E',
+ "Yacute;": '\U000000DD',
+ "Ycirc;": '\U00000176',
+ "Ycy;": '\U0000042B',
+ "Yfr;": '\U0001D51C',
+ "Yopf;": '\U0001D550',
+ "Yscr;": '\U0001D4B4',
+ "Yuml;": '\U00000178',
+ "ZHcy;": '\U00000416',
+ "Zacute;": '\U00000179',
+ "Zcaron;": '\U0000017D',
+ "Zcy;": '\U00000417',
+ "Zdot;": '\U0000017B',
+ "ZeroWidthSpace;": '\U0000200B',
+ "Zeta;": '\U00000396',
+ "Zfr;": '\U00002128',
+ "Zopf;": '\U00002124',
+ "Zscr;": '\U0001D4B5',
+ "aacute;": '\U000000E1',
+ "abreve;": '\U00000103',
+ "ac;": '\U0000223E',
+ "acd;": '\U0000223F',
+ "acirc;": '\U000000E2',
+ "acute;": '\U000000B4',
+ "acy;": '\U00000430',
+ "aelig;": '\U000000E6',
+ "af;": '\U00002061',
+ "afr;": '\U0001D51E',
+ "agrave;": '\U000000E0',
+ "alefsym;": '\U00002135',
+ "aleph;": '\U00002135',
+ "alpha;": '\U000003B1',
+ "amacr;": '\U00000101',
+ "amalg;": '\U00002A3F',
+ "amp;": '\U00000026',
+ "and;": '\U00002227',
+ "andand;": '\U00002A55',
+ "andd;": '\U00002A5C',
+ "andslope;": '\U00002A58',
+ "andv;": '\U00002A5A',
+ "ang;": '\U00002220',
+ "ange;": '\U000029A4',
+ "angle;": '\U00002220',
+ "angmsd;": '\U00002221',
+ "angmsdaa;": '\U000029A8',
+ "angmsdab;": '\U000029A9',
+ "angmsdac;": '\U000029AA',
+ "angmsdad;": '\U000029AB',
+ "angmsdae;": '\U000029AC',
+ "angmsdaf;": '\U000029AD',
+ "angmsdag;": '\U000029AE',
+ "angmsdah;": '\U000029AF',
+ "angrt;": '\U0000221F',
+ "angrtvb;": '\U000022BE',
+ "angrtvbd;": '\U0000299D',
+ "angsph;": '\U00002222',
+ "angst;": '\U000000C5',
+ "angzarr;": '\U0000237C',
+ "aogon;": '\U00000105',
+ "aopf;": '\U0001D552',
+ "ap;": '\U00002248',
+ "apE;": '\U00002A70',
+ "apacir;": '\U00002A6F',
+ "ape;": '\U0000224A',
+ "apid;": '\U0000224B',
+ "apos;": '\U00000027',
+ "approx;": '\U00002248',
+ "approxeq;": '\U0000224A',
+ "aring;": '\U000000E5',
+ "ascr;": '\U0001D4B6',
+ "ast;": '\U0000002A',
+ "asymp;": '\U00002248',
+ "asympeq;": '\U0000224D',
+ "atilde;": '\U000000E3',
+ "auml;": '\U000000E4',
+ "awconint;": '\U00002233',
+ "awint;": '\U00002A11',
+ "bNot;": '\U00002AED',
+ "backcong;": '\U0000224C',
+ "backepsilon;": '\U000003F6',
+ "backprime;": '\U00002035',
+ "backsim;": '\U0000223D',
+ "backsimeq;": '\U000022CD',
+ "barvee;": '\U000022BD',
+ "barwed;": '\U00002305',
+ "barwedge;": '\U00002305',
+ "bbrk;": '\U000023B5',
+ "bbrktbrk;": '\U000023B6',
+ "bcong;": '\U0000224C',
+ "bcy;": '\U00000431',
+ "bdquo;": '\U0000201E',
+ "becaus;": '\U00002235',
+ "because;": '\U00002235',
+ "bemptyv;": '\U000029B0',
+ "bepsi;": '\U000003F6',
+ "bernou;": '\U0000212C',
+ "beta;": '\U000003B2',
+ "beth;": '\U00002136',
+ "between;": '\U0000226C',
+ "bfr;": '\U0001D51F',
+ "bigcap;": '\U000022C2',
+ "bigcirc;": '\U000025EF',
+ "bigcup;": '\U000022C3',
+ "bigodot;": '\U00002A00',
+ "bigoplus;": '\U00002A01',
+ "bigotimes;": '\U00002A02',
+ "bigsqcup;": '\U00002A06',
+ "bigstar;": '\U00002605',
+ "bigtriangledown;": '\U000025BD',
+ "bigtriangleup;": '\U000025B3',
+ "biguplus;": '\U00002A04',
+ "bigvee;": '\U000022C1',
+ "bigwedge;": '\U000022C0',
+ "bkarow;": '\U0000290D',
+ "blacklozenge;": '\U000029EB',
+ "blacksquare;": '\U000025AA',
+ "blacktriangle;": '\U000025B4',
+ "blacktriangledown;": '\U000025BE',
+ "blacktriangleleft;": '\U000025C2',
+ "blacktriangleright;": '\U000025B8',
+ "blank;": '\U00002423',
+ "blk12;": '\U00002592',
+ "blk14;": '\U00002591',
+ "blk34;": '\U00002593',
+ "block;": '\U00002588',
+ "bnot;": '\U00002310',
+ "bopf;": '\U0001D553',
+ "bot;": '\U000022A5',
+ "bottom;": '\U000022A5',
+ "bowtie;": '\U000022C8',
+ "boxDL;": '\U00002557',
+ "boxDR;": '\U00002554',
+ "boxDl;": '\U00002556',
+ "boxDr;": '\U00002553',
+ "boxH;": '\U00002550',
+ "boxHD;": '\U00002566',
+ "boxHU;": '\U00002569',
+ "boxHd;": '\U00002564',
+ "boxHu;": '\U00002567',
+ "boxUL;": '\U0000255D',
+ "boxUR;": '\U0000255A',
+ "boxUl;": '\U0000255C',
+ "boxUr;": '\U00002559',
+ "boxV;": '\U00002551',
+ "boxVH;": '\U0000256C',
+ "boxVL;": '\U00002563',
+ "boxVR;": '\U00002560',
+ "boxVh;": '\U0000256B',
+ "boxVl;": '\U00002562',
+ "boxVr;": '\U0000255F',
+ "boxbox;": '\U000029C9',
+ "boxdL;": '\U00002555',
+ "boxdR;": '\U00002552',
+ "boxdl;": '\U00002510',
+ "boxdr;": '\U0000250C',
+ "boxh;": '\U00002500',
+ "boxhD;": '\U00002565',
+ "boxhU;": '\U00002568',
+ "boxhd;": '\U0000252C',
+ "boxhu;": '\U00002534',
+ "boxminus;": '\U0000229F',
+ "boxplus;": '\U0000229E',
+ "boxtimes;": '\U000022A0',
+ "boxuL;": '\U0000255B',
+ "boxuR;": '\U00002558',
+ "boxul;": '\U00002518',
+ "boxur;": '\U00002514',
+ "boxv;": '\U00002502',
+ "boxvH;": '\U0000256A',
+ "boxvL;": '\U00002561',
+ "boxvR;": '\U0000255E',
+ "boxvh;": '\U0000253C',
+ "boxvl;": '\U00002524',
+ "boxvr;": '\U0000251C',
+ "bprime;": '\U00002035',
+ "breve;": '\U000002D8',
+ "brvbar;": '\U000000A6',
+ "bscr;": '\U0001D4B7',
+ "bsemi;": '\U0000204F',
+ "bsim;": '\U0000223D',
+ "bsime;": '\U000022CD',
+ "bsol;": '\U0000005C',
+ "bsolb;": '\U000029C5',
+ "bsolhsub;": '\U000027C8',
+ "bull;": '\U00002022',
+ "bullet;": '\U00002022',
+ "bump;": '\U0000224E',
+ "bumpE;": '\U00002AAE',
+ "bumpe;": '\U0000224F',
+ "bumpeq;": '\U0000224F',
+ "cacute;": '\U00000107',
+ "cap;": '\U00002229',
+ "capand;": '\U00002A44',
+ "capbrcup;": '\U00002A49',
+ "capcap;": '\U00002A4B',
+ "capcup;": '\U00002A47',
+ "capdot;": '\U00002A40',
+ "caret;": '\U00002041',
+ "caron;": '\U000002C7',
+ "ccaps;": '\U00002A4D',
+ "ccaron;": '\U0000010D',
+ "ccedil;": '\U000000E7',
+ "ccirc;": '\U00000109',
+ "ccups;": '\U00002A4C',
+ "ccupssm;": '\U00002A50',
+ "cdot;": '\U0000010B',
+ "cedil;": '\U000000B8',
+ "cemptyv;": '\U000029B2',
+ "cent;": '\U000000A2',
+ "centerdot;": '\U000000B7',
+ "cfr;": '\U0001D520',
+ "chcy;": '\U00000447',
+ "check;": '\U00002713',
+ "checkmark;": '\U00002713',
+ "chi;": '\U000003C7',
+ "cir;": '\U000025CB',
+ "cirE;": '\U000029C3',
+ "circ;": '\U000002C6',
+ "circeq;": '\U00002257',
+ "circlearrowleft;": '\U000021BA',
+ "circlearrowright;": '\U000021BB',
+ "circledR;": '\U000000AE',
+ "circledS;": '\U000024C8',
+ "circledast;": '\U0000229B',
+ "circledcirc;": '\U0000229A',
+ "circleddash;": '\U0000229D',
+ "cire;": '\U00002257',
+ "cirfnint;": '\U00002A10',
+ "cirmid;": '\U00002AEF',
+ "cirscir;": '\U000029C2',
+ "clubs;": '\U00002663',
+ "clubsuit;": '\U00002663',
+ "colon;": '\U0000003A',
+ "colone;": '\U00002254',
+ "coloneq;": '\U00002254',
+ "comma;": '\U0000002C',
+ "commat;": '\U00000040',
+ "comp;": '\U00002201',
+ "compfn;": '\U00002218',
+ "complement;": '\U00002201',
+ "complexes;": '\U00002102',
+ "cong;": '\U00002245',
+ "congdot;": '\U00002A6D',
+ "conint;": '\U0000222E',
+ "copf;": '\U0001D554',
+ "coprod;": '\U00002210',
+ "copy;": '\U000000A9',
+ "copysr;": '\U00002117',
+ "crarr;": '\U000021B5',
+ "cross;": '\U00002717',
+ "cscr;": '\U0001D4B8',
+ "csub;": '\U00002ACF',
+ "csube;": '\U00002AD1',
+ "csup;": '\U00002AD0',
+ "csupe;": '\U00002AD2',
+ "ctdot;": '\U000022EF',
+ "cudarrl;": '\U00002938',
+ "cudarrr;": '\U00002935',
+ "cuepr;": '\U000022DE',
+ "cuesc;": '\U000022DF',
+ "cularr;": '\U000021B6',
+ "cularrp;": '\U0000293D',
+ "cup;": '\U0000222A',
+ "cupbrcap;": '\U00002A48',
+ "cupcap;": '\U00002A46',
+ "cupcup;": '\U00002A4A',
+ "cupdot;": '\U0000228D',
+ "cupor;": '\U00002A45',
+ "curarr;": '\U000021B7',
+ "curarrm;": '\U0000293C',
+ "curlyeqprec;": '\U000022DE',
+ "curlyeqsucc;": '\U000022DF',
+ "curlyvee;": '\U000022CE',
+ "curlywedge;": '\U000022CF',
+ "curren;": '\U000000A4',
+ "curvearrowleft;": '\U000021B6',
+ "curvearrowright;": '\U000021B7',
+ "cuvee;": '\U000022CE',
+ "cuwed;": '\U000022CF',
+ "cwconint;": '\U00002232',
+ "cwint;": '\U00002231',
+ "cylcty;": '\U0000232D',
+ "dArr;": '\U000021D3',
+ "dHar;": '\U00002965',
+ "dagger;": '\U00002020',
+ "daleth;": '\U00002138',
+ "darr;": '\U00002193',
+ "dash;": '\U00002010',
+ "dashv;": '\U000022A3',
+ "dbkarow;": '\U0000290F',
+ "dblac;": '\U000002DD',
+ "dcaron;": '\U0000010F',
+ "dcy;": '\U00000434',
+ "dd;": '\U00002146',
+ "ddagger;": '\U00002021',
+ "ddarr;": '\U000021CA',
+ "ddotseq;": '\U00002A77',
+ "deg;": '\U000000B0',
+ "delta;": '\U000003B4',
+ "demptyv;": '\U000029B1',
+ "dfisht;": '\U0000297F',
+ "dfr;": '\U0001D521',
+ "dharl;": '\U000021C3',
+ "dharr;": '\U000021C2',
+ "diam;": '\U000022C4',
+ "diamond;": '\U000022C4',
+ "diamondsuit;": '\U00002666',
+ "diams;": '\U00002666',
+ "die;": '\U000000A8',
+ "digamma;": '\U000003DD',
+ "disin;": '\U000022F2',
+ "div;": '\U000000F7',
+ "divide;": '\U000000F7',
+ "divideontimes;": '\U000022C7',
+ "divonx;": '\U000022C7',
+ "djcy;": '\U00000452',
+ "dlcorn;": '\U0000231E',
+ "dlcrop;": '\U0000230D',
+ "dollar;": '\U00000024',
+ "dopf;": '\U0001D555',
+ "dot;": '\U000002D9',
+ "doteq;": '\U00002250',
+ "doteqdot;": '\U00002251',
+ "dotminus;": '\U00002238',
+ "dotplus;": '\U00002214',
+ "dotsquare;": '\U000022A1',
+ "doublebarwedge;": '\U00002306',
+ "downarrow;": '\U00002193',
+ "downdownarrows;": '\U000021CA',
+ "downharpoonleft;": '\U000021C3',
+ "downharpoonright;": '\U000021C2',
+ "drbkarow;": '\U00002910',
+ "drcorn;": '\U0000231F',
+ "drcrop;": '\U0000230C',
+ "dscr;": '\U0001D4B9',
+ "dscy;": '\U00000455',
+ "dsol;": '\U000029F6',
+ "dstrok;": '\U00000111',
+ "dtdot;": '\U000022F1',
+ "dtri;": '\U000025BF',
+ "dtrif;": '\U000025BE',
+ "duarr;": '\U000021F5',
+ "duhar;": '\U0000296F',
+ "dwangle;": '\U000029A6',
+ "dzcy;": '\U0000045F',
+ "dzigrarr;": '\U000027FF',
+ "eDDot;": '\U00002A77',
+ "eDot;": '\U00002251',
+ "eacute;": '\U000000E9',
+ "easter;": '\U00002A6E',
+ "ecaron;": '\U0000011B',
+ "ecir;": '\U00002256',
+ "ecirc;": '\U000000EA',
+ "ecolon;": '\U00002255',
+ "ecy;": '\U0000044D',
+ "edot;": '\U00000117',
+ "ee;": '\U00002147',
+ "efDot;": '\U00002252',
+ "efr;": '\U0001D522',
+ "eg;": '\U00002A9A',
+ "egrave;": '\U000000E8',
+ "egs;": '\U00002A96',
+ "egsdot;": '\U00002A98',
+ "el;": '\U00002A99',
+ "elinters;": '\U000023E7',
+ "ell;": '\U00002113',
+ "els;": '\U00002A95',
+ "elsdot;": '\U00002A97',
+ "emacr;": '\U00000113',
+ "empty;": '\U00002205',
+ "emptyset;": '\U00002205',
+ "emptyv;": '\U00002205',
+ "emsp;": '\U00002003',
+ "emsp13;": '\U00002004',
+ "emsp14;": '\U00002005',
+ "eng;": '\U0000014B',
+ "ensp;": '\U00002002',
+ "eogon;": '\U00000119',
+ "eopf;": '\U0001D556',
+ "epar;": '\U000022D5',
+ "eparsl;": '\U000029E3',
+ "eplus;": '\U00002A71',
+ "epsi;": '\U000003B5',
+ "epsilon;": '\U000003B5',
+ "epsiv;": '\U000003F5',
+ "eqcirc;": '\U00002256',
+ "eqcolon;": '\U00002255',
+ "eqsim;": '\U00002242',
+ "eqslantgtr;": '\U00002A96',
+ "eqslantless;": '\U00002A95',
+ "equals;": '\U0000003D',
+ "equest;": '\U0000225F',
+ "equiv;": '\U00002261',
+ "equivDD;": '\U00002A78',
+ "eqvparsl;": '\U000029E5',
+ "erDot;": '\U00002253',
+ "erarr;": '\U00002971',
+ "escr;": '\U0000212F',
+ "esdot;": '\U00002250',
+ "esim;": '\U00002242',
+ "eta;": '\U000003B7',
+ "eth;": '\U000000F0',
+ "euml;": '\U000000EB',
+ "euro;": '\U000020AC',
+ "excl;": '\U00000021',
+ "exist;": '\U00002203',
+ "expectation;": '\U00002130',
+ "exponentiale;": '\U00002147',
+ "fallingdotseq;": '\U00002252',
+ "fcy;": '\U00000444',
+ "female;": '\U00002640',
+ "ffilig;": '\U0000FB03',
+ "fflig;": '\U0000FB00',
+ "ffllig;": '\U0000FB04',
+ "ffr;": '\U0001D523',
+ "filig;": '\U0000FB01',
+ "flat;": '\U0000266D',
+ "fllig;": '\U0000FB02',
+ "fltns;": '\U000025B1',
+ "fnof;": '\U00000192',
+ "fopf;": '\U0001D557',
+ "forall;": '\U00002200',
+ "fork;": '\U000022D4',
+ "forkv;": '\U00002AD9',
+ "fpartint;": '\U00002A0D',
+ "frac12;": '\U000000BD',
+ "frac13;": '\U00002153',
+ "frac14;": '\U000000BC',
+ "frac15;": '\U00002155',
+ "frac16;": '\U00002159',
+ "frac18;": '\U0000215B',
+ "frac23;": '\U00002154',
+ "frac25;": '\U00002156',
+ "frac34;": '\U000000BE',
+ "frac35;": '\U00002157',
+ "frac38;": '\U0000215C',
+ "frac45;": '\U00002158',
+ "frac56;": '\U0000215A',
+ "frac58;": '\U0000215D',
+ "frac78;": '\U0000215E',
+ "frasl;": '\U00002044',
+ "frown;": '\U00002322',
+ "fscr;": '\U0001D4BB',
+ "gE;": '\U00002267',
+ "gEl;": '\U00002A8C',
+ "gacute;": '\U000001F5',
+ "gamma;": '\U000003B3',
+ "gammad;": '\U000003DD',
+ "gap;": '\U00002A86',
+ "gbreve;": '\U0000011F',
+ "gcirc;": '\U0000011D',
+ "gcy;": '\U00000433',
+ "gdot;": '\U00000121',
+ "ge;": '\U00002265',
+ "gel;": '\U000022DB',
+ "geq;": '\U00002265',
+ "geqq;": '\U00002267',
+ "geqslant;": '\U00002A7E',
+ "ges;": '\U00002A7E',
+ "gescc;": '\U00002AA9',
+ "gesdot;": '\U00002A80',
+ "gesdoto;": '\U00002A82',
+ "gesdotol;": '\U00002A84',
+ "gesles;": '\U00002A94',
+ "gfr;": '\U0001D524',
+ "gg;": '\U0000226B',
+ "ggg;": '\U000022D9',
+ "gimel;": '\U00002137',
+ "gjcy;": '\U00000453',
+ "gl;": '\U00002277',
+ "glE;": '\U00002A92',
+ "gla;": '\U00002AA5',
+ "glj;": '\U00002AA4',
+ "gnE;": '\U00002269',
+ "gnap;": '\U00002A8A',
+ "gnapprox;": '\U00002A8A',
+ "gne;": '\U00002A88',
+ "gneq;": '\U00002A88',
+ "gneqq;": '\U00002269',
+ "gnsim;": '\U000022E7',
+ "gopf;": '\U0001D558',
+ "grave;": '\U00000060',
+ "gscr;": '\U0000210A',
+ "gsim;": '\U00002273',
+ "gsime;": '\U00002A8E',
+ "gsiml;": '\U00002A90',
+ "gt;": '\U0000003E',
+ "gtcc;": '\U00002AA7',
+ "gtcir;": '\U00002A7A',
+ "gtdot;": '\U000022D7',
+ "gtlPar;": '\U00002995',
+ "gtquest;": '\U00002A7C',
+ "gtrapprox;": '\U00002A86',
+ "gtrarr;": '\U00002978',
+ "gtrdot;": '\U000022D7',
+ "gtreqless;": '\U000022DB',
+ "gtreqqless;": '\U00002A8C',
+ "gtrless;": '\U00002277',
+ "gtrsim;": '\U00002273',
+ "hArr;": '\U000021D4',
+ "hairsp;": '\U0000200A',
+ "half;": '\U000000BD',
+ "hamilt;": '\U0000210B',
+ "hardcy;": '\U0000044A',
+ "harr;": '\U00002194',
+ "harrcir;": '\U00002948',
+ "harrw;": '\U000021AD',
+ "hbar;": '\U0000210F',
+ "hcirc;": '\U00000125',
+ "hearts;": '\U00002665',
+ "heartsuit;": '\U00002665',
+ "hellip;": '\U00002026',
+ "hercon;": '\U000022B9',
+ "hfr;": '\U0001D525',
+ "hksearow;": '\U00002925',
+ "hkswarow;": '\U00002926',
+ "hoarr;": '\U000021FF',
+ "homtht;": '\U0000223B',
+ "hookleftarrow;": '\U000021A9',
+ "hookrightarrow;": '\U000021AA',
+ "hopf;": '\U0001D559',
+ "horbar;": '\U00002015',
+ "hscr;": '\U0001D4BD',
+ "hslash;": '\U0000210F',
+ "hstrok;": '\U00000127',
+ "hybull;": '\U00002043',
+ "hyphen;": '\U00002010',
+ "iacute;": '\U000000ED',
+ "ic;": '\U00002063',
+ "icirc;": '\U000000EE',
+ "icy;": '\U00000438',
+ "iecy;": '\U00000435',
+ "iexcl;": '\U000000A1',
+ "iff;": '\U000021D4',
+ "ifr;": '\U0001D526',
+ "igrave;": '\U000000EC',
+ "ii;": '\U00002148',
+ "iiiint;": '\U00002A0C',
+ "iiint;": '\U0000222D',
+ "iinfin;": '\U000029DC',
+ "iiota;": '\U00002129',
+ "ijlig;": '\U00000133',
+ "imacr;": '\U0000012B',
+ "image;": '\U00002111',
+ "imagline;": '\U00002110',
+ "imagpart;": '\U00002111',
+ "imath;": '\U00000131',
+ "imof;": '\U000022B7',
+ "imped;": '\U000001B5',
+ "in;": '\U00002208',
+ "incare;": '\U00002105',
+ "infin;": '\U0000221E',
+ "infintie;": '\U000029DD',
+ "inodot;": '\U00000131',
+ "int;": '\U0000222B',
+ "intcal;": '\U000022BA',
+ "integers;": '\U00002124',
+ "intercal;": '\U000022BA',
+ "intlarhk;": '\U00002A17',
+ "intprod;": '\U00002A3C',
+ "iocy;": '\U00000451',
+ "iogon;": '\U0000012F',
+ "iopf;": '\U0001D55A',
+ "iota;": '\U000003B9',
+ "iprod;": '\U00002A3C',
+ "iquest;": '\U000000BF',
+ "iscr;": '\U0001D4BE',
+ "isin;": '\U00002208',
+ "isinE;": '\U000022F9',
+ "isindot;": '\U000022F5',
+ "isins;": '\U000022F4',
+ "isinsv;": '\U000022F3',
+ "isinv;": '\U00002208',
+ "it;": '\U00002062',
+ "itilde;": '\U00000129',
+ "iukcy;": '\U00000456',
+ "iuml;": '\U000000EF',
+ "jcirc;": '\U00000135',
+ "jcy;": '\U00000439',
+ "jfr;": '\U0001D527',
+ "jmath;": '\U00000237',
+ "jopf;": '\U0001D55B',
+ "jscr;": '\U0001D4BF',
+ "jsercy;": '\U00000458',
+ "jukcy;": '\U00000454',
+ "kappa;": '\U000003BA',
+ "kappav;": '\U000003F0',
+ "kcedil;": '\U00000137',
+ "kcy;": '\U0000043A',
+ "kfr;": '\U0001D528',
+ "kgreen;": '\U00000138',
+ "khcy;": '\U00000445',
+ "kjcy;": '\U0000045C',
+ "kopf;": '\U0001D55C',
+ "kscr;": '\U0001D4C0',
+ "lAarr;": '\U000021DA',
+ "lArr;": '\U000021D0',
+ "lAtail;": '\U0000291B',
+ "lBarr;": '\U0000290E',
+ "lE;": '\U00002266',
+ "lEg;": '\U00002A8B',
+ "lHar;": '\U00002962',
+ "lacute;": '\U0000013A',
+ "laemptyv;": '\U000029B4',
+ "lagran;": '\U00002112',
+ "lambda;": '\U000003BB',
+ "lang;": '\U000027E8',
+ "langd;": '\U00002991',
+ "langle;": '\U000027E8',
+ "lap;": '\U00002A85',
+ "laquo;": '\U000000AB',
+ "larr;": '\U00002190',
+ "larrb;": '\U000021E4',
+ "larrbfs;": '\U0000291F',
+ "larrfs;": '\U0000291D',
+ "larrhk;": '\U000021A9',
+ "larrlp;": '\U000021AB',
+ "larrpl;": '\U00002939',
+ "larrsim;": '\U00002973',
+ "larrtl;": '\U000021A2',
+ "lat;": '\U00002AAB',
+ "latail;": '\U00002919',
+ "late;": '\U00002AAD',
+ "lbarr;": '\U0000290C',
+ "lbbrk;": '\U00002772',
+ "lbrace;": '\U0000007B',
+ "lbrack;": '\U0000005B',
+ "lbrke;": '\U0000298B',
+ "lbrksld;": '\U0000298F',
+ "lbrkslu;": '\U0000298D',
+ "lcaron;": '\U0000013E',
+ "lcedil;": '\U0000013C',
+ "lceil;": '\U00002308',
+ "lcub;": '\U0000007B',
+ "lcy;": '\U0000043B',
+ "ldca;": '\U00002936',
+ "ldquo;": '\U0000201C',
+ "ldquor;": '\U0000201E',
+ "ldrdhar;": '\U00002967',
+ "ldrushar;": '\U0000294B',
+ "ldsh;": '\U000021B2',
+ "le;": '\U00002264',
+ "leftarrow;": '\U00002190',
+ "leftarrowtail;": '\U000021A2',
+ "leftharpoondown;": '\U000021BD',
+ "leftharpoonup;": '\U000021BC',
+ "leftleftarrows;": '\U000021C7',
+ "leftrightarrow;": '\U00002194',
+ "leftrightarrows;": '\U000021C6',
+ "leftrightharpoons;": '\U000021CB',
+ "leftrightsquigarrow;": '\U000021AD',
+ "leftthreetimes;": '\U000022CB',
+ "leg;": '\U000022DA',
+ "leq;": '\U00002264',
+ "leqq;": '\U00002266',
+ "leqslant;": '\U00002A7D',
+ "les;": '\U00002A7D',
+ "lescc;": '\U00002AA8',
+ "lesdot;": '\U00002A7F',
+ "lesdoto;": '\U00002A81',
+ "lesdotor;": '\U00002A83',
+ "lesges;": '\U00002A93',
+ "lessapprox;": '\U00002A85',
+ "lessdot;": '\U000022D6',
+ "lesseqgtr;": '\U000022DA',
+ "lesseqqgtr;": '\U00002A8B',
+ "lessgtr;": '\U00002276',
+ "lesssim;": '\U00002272',
+ "lfisht;": '\U0000297C',
+ "lfloor;": '\U0000230A',
+ "lfr;": '\U0001D529',
+ "lg;": '\U00002276',
+ "lgE;": '\U00002A91',
+ "lhard;": '\U000021BD',
+ "lharu;": '\U000021BC',
+ "lharul;": '\U0000296A',
+ "lhblk;": '\U00002584',
+ "ljcy;": '\U00000459',
+ "ll;": '\U0000226A',
+ "llarr;": '\U000021C7',
+ "llcorner;": '\U0000231E',
+ "llhard;": '\U0000296B',
+ "lltri;": '\U000025FA',
+ "lmidot;": '\U00000140',
+ "lmoust;": '\U000023B0',
+ "lmoustache;": '\U000023B0',
+ "lnE;": '\U00002268',
+ "lnap;": '\U00002A89',
+ "lnapprox;": '\U00002A89',
+ "lne;": '\U00002A87',
+ "lneq;": '\U00002A87',
+ "lneqq;": '\U00002268',
+ "lnsim;": '\U000022E6',
+ "loang;": '\U000027EC',
+ "loarr;": '\U000021FD',
+ "lobrk;": '\U000027E6',
+ "longleftarrow;": '\U000027F5',
+ "longleftrightarrow;": '\U000027F7',
+ "longmapsto;": '\U000027FC',
+ "longrightarrow;": '\U000027F6',
+ "looparrowleft;": '\U000021AB',
+ "looparrowright;": '\U000021AC',
+ "lopar;": '\U00002985',
+ "lopf;": '\U0001D55D',
+ "loplus;": '\U00002A2D',
+ "lotimes;": '\U00002A34',
+ "lowast;": '\U00002217',
+ "lowbar;": '\U0000005F',
+ "loz;": '\U000025CA',
+ "lozenge;": '\U000025CA',
+ "lozf;": '\U000029EB',
+ "lpar;": '\U00000028',
+ "lparlt;": '\U00002993',
+ "lrarr;": '\U000021C6',
+ "lrcorner;": '\U0000231F',
+ "lrhar;": '\U000021CB',
+ "lrhard;": '\U0000296D',
+ "lrm;": '\U0000200E',
+ "lrtri;": '\U000022BF',
+ "lsaquo;": '\U00002039',
+ "lscr;": '\U0001D4C1',
+ "lsh;": '\U000021B0',
+ "lsim;": '\U00002272',
+ "lsime;": '\U00002A8D',
+ "lsimg;": '\U00002A8F',
+ "lsqb;": '\U0000005B',
+ "lsquo;": '\U00002018',
+ "lsquor;": '\U0000201A',
+ "lstrok;": '\U00000142',
+ "lt;": '\U0000003C',
+ "ltcc;": '\U00002AA6',
+ "ltcir;": '\U00002A79',
+ "ltdot;": '\U000022D6',
+ "lthree;": '\U000022CB',
+ "ltimes;": '\U000022C9',
+ "ltlarr;": '\U00002976',
+ "ltquest;": '\U00002A7B',
+ "ltrPar;": '\U00002996',
+ "ltri;": '\U000025C3',
+ "ltrie;": '\U000022B4',
+ "ltrif;": '\U000025C2',
+ "lurdshar;": '\U0000294A',
+ "luruhar;": '\U00002966',
+ "mDDot;": '\U0000223A',
+ "macr;": '\U000000AF',
+ "male;": '\U00002642',
+ "malt;": '\U00002720',
+ "maltese;": '\U00002720',
+ "map;": '\U000021A6',
+ "mapsto;": '\U000021A6',
+ "mapstodown;": '\U000021A7',
+ "mapstoleft;": '\U000021A4',
+ "mapstoup;": '\U000021A5',
+ "marker;": '\U000025AE',
+ "mcomma;": '\U00002A29',
+ "mcy;": '\U0000043C',
+ "mdash;": '\U00002014',
+ "measuredangle;": '\U00002221',
+ "mfr;": '\U0001D52A',
+ "mho;": '\U00002127',
+ "micro;": '\U000000B5',
+ "mid;": '\U00002223',
+ "midast;": '\U0000002A',
+ "midcir;": '\U00002AF0',
+ "middot;": '\U000000B7',
+ "minus;": '\U00002212',
+ "minusb;": '\U0000229F',
+ "minusd;": '\U00002238',
+ "minusdu;": '\U00002A2A',
+ "mlcp;": '\U00002ADB',
+ "mldr;": '\U00002026',
+ "mnplus;": '\U00002213',
+ "models;": '\U000022A7',
+ "mopf;": '\U0001D55E',
+ "mp;": '\U00002213',
+ "mscr;": '\U0001D4C2',
+ "mstpos;": '\U0000223E',
+ "mu;": '\U000003BC',
+ "multimap;": '\U000022B8',
+ "mumap;": '\U000022B8',
+ "nLeftarrow;": '\U000021CD',
+ "nLeftrightarrow;": '\U000021CE',
+ "nRightarrow;": '\U000021CF',
+ "nVDash;": '\U000022AF',
+ "nVdash;": '\U000022AE',
+ "nabla;": '\U00002207',
+ "nacute;": '\U00000144',
+ "nap;": '\U00002249',
+ "napos;": '\U00000149',
+ "napprox;": '\U00002249',
+ "natur;": '\U0000266E',
+ "natural;": '\U0000266E',
+ "naturals;": '\U00002115',
+ "nbsp;": '\U000000A0',
+ "ncap;": '\U00002A43',
+ "ncaron;": '\U00000148',
+ "ncedil;": '\U00000146',
+ "ncong;": '\U00002247',
+ "ncup;": '\U00002A42',
+ "ncy;": '\U0000043D',
+ "ndash;": '\U00002013',
+ "ne;": '\U00002260',
+ "neArr;": '\U000021D7',
+ "nearhk;": '\U00002924',
+ "nearr;": '\U00002197',
+ "nearrow;": '\U00002197',
+ "nequiv;": '\U00002262',
+ "nesear;": '\U00002928',
+ "nexist;": '\U00002204',
+ "nexists;": '\U00002204',
+ "nfr;": '\U0001D52B',
+ "nge;": '\U00002271',
+ "ngeq;": '\U00002271',
+ "ngsim;": '\U00002275',
+ "ngt;": '\U0000226F',
+ "ngtr;": '\U0000226F',
+ "nhArr;": '\U000021CE',
+ "nharr;": '\U000021AE',
+ "nhpar;": '\U00002AF2',
+ "ni;": '\U0000220B',
+ "nis;": '\U000022FC',
+ "nisd;": '\U000022FA',
+ "niv;": '\U0000220B',
+ "njcy;": '\U0000045A',
+ "nlArr;": '\U000021CD',
+ "nlarr;": '\U0000219A',
+ "nldr;": '\U00002025',
+ "nle;": '\U00002270',
+ "nleftarrow;": '\U0000219A',
+ "nleftrightarrow;": '\U000021AE',
+ "nleq;": '\U00002270',
+ "nless;": '\U0000226E',
+ "nlsim;": '\U00002274',
+ "nlt;": '\U0000226E',
+ "nltri;": '\U000022EA',
+ "nltrie;": '\U000022EC',
+ "nmid;": '\U00002224',
+ "nopf;": '\U0001D55F',
+ "not;": '\U000000AC',
+ "notin;": '\U00002209',
+ "notinva;": '\U00002209',
+ "notinvb;": '\U000022F7',
+ "notinvc;": '\U000022F6',
+ "notni;": '\U0000220C',
+ "notniva;": '\U0000220C',
+ "notnivb;": '\U000022FE',
+ "notnivc;": '\U000022FD',
+ "npar;": '\U00002226',
+ "nparallel;": '\U00002226',
+ "npolint;": '\U00002A14',
+ "npr;": '\U00002280',
+ "nprcue;": '\U000022E0',
+ "nprec;": '\U00002280',
+ "nrArr;": '\U000021CF',
+ "nrarr;": '\U0000219B',
+ "nrightarrow;": '\U0000219B',
+ "nrtri;": '\U000022EB',
+ "nrtrie;": '\U000022ED',
+ "nsc;": '\U00002281',
+ "nsccue;": '\U000022E1',
+ "nscr;": '\U0001D4C3',
+ "nshortmid;": '\U00002224',
+ "nshortparallel;": '\U00002226',
+ "nsim;": '\U00002241',
+ "nsime;": '\U00002244',
+ "nsimeq;": '\U00002244',
+ "nsmid;": '\U00002224',
+ "nspar;": '\U00002226',
+ "nsqsube;": '\U000022E2',
+ "nsqsupe;": '\U000022E3',
+ "nsub;": '\U00002284',
+ "nsube;": '\U00002288',
+ "nsubseteq;": '\U00002288',
+ "nsucc;": '\U00002281',
+ "nsup;": '\U00002285',
+ "nsupe;": '\U00002289',
+ "nsupseteq;": '\U00002289',
+ "ntgl;": '\U00002279',
+ "ntilde;": '\U000000F1',
+ "ntlg;": '\U00002278',
+ "ntriangleleft;": '\U000022EA',
+ "ntrianglelefteq;": '\U000022EC',
+ "ntriangleright;": '\U000022EB',
+ "ntrianglerighteq;": '\U000022ED',
+ "nu;": '\U000003BD',
+ "num;": '\U00000023',
+ "numero;": '\U00002116',
+ "numsp;": '\U00002007',
+ "nvDash;": '\U000022AD',
+ "nvHarr;": '\U00002904',
+ "nvdash;": '\U000022AC',
+ "nvinfin;": '\U000029DE',
+ "nvlArr;": '\U00002902',
+ "nvrArr;": '\U00002903',
+ "nwArr;": '\U000021D6',
+ "nwarhk;": '\U00002923',
+ "nwarr;": '\U00002196',
+ "nwarrow;": '\U00002196',
+ "nwnear;": '\U00002927',
+ "oS;": '\U000024C8',
+ "oacute;": '\U000000F3',
+ "oast;": '\U0000229B',
+ "ocir;": '\U0000229A',
+ "ocirc;": '\U000000F4',
+ "ocy;": '\U0000043E',
+ "odash;": '\U0000229D',
+ "odblac;": '\U00000151',
+ "odiv;": '\U00002A38',
+ "odot;": '\U00002299',
+ "odsold;": '\U000029BC',
+ "oelig;": '\U00000153',
+ "ofcir;": '\U000029BF',
+ "ofr;": '\U0001D52C',
+ "ogon;": '\U000002DB',
+ "ograve;": '\U000000F2',
+ "ogt;": '\U000029C1',
+ "ohbar;": '\U000029B5',
+ "ohm;": '\U000003A9',
+ "oint;": '\U0000222E',
+ "olarr;": '\U000021BA',
+ "olcir;": '\U000029BE',
+ "olcross;": '\U000029BB',
+ "oline;": '\U0000203E',
+ "olt;": '\U000029C0',
+ "omacr;": '\U0000014D',
+ "omega;": '\U000003C9',
+ "omicron;": '\U000003BF',
+ "omid;": '\U000029B6',
+ "ominus;": '\U00002296',
+ "oopf;": '\U0001D560',
+ "opar;": '\U000029B7',
+ "operp;": '\U000029B9',
+ "oplus;": '\U00002295',
+ "or;": '\U00002228',
+ "orarr;": '\U000021BB',
+ "ord;": '\U00002A5D',
+ "order;": '\U00002134',
+ "orderof;": '\U00002134',
+ "ordf;": '\U000000AA',
+ "ordm;": '\U000000BA',
+ "origof;": '\U000022B6',
+ "oror;": '\U00002A56',
+ "orslope;": '\U00002A57',
+ "orv;": '\U00002A5B',
+ "oscr;": '\U00002134',
+ "oslash;": '\U000000F8',
+ "osol;": '\U00002298',
+ "otilde;": '\U000000F5',
+ "otimes;": '\U00002297',
+ "otimesas;": '\U00002A36',
+ "ouml;": '\U000000F6',
+ "ovbar;": '\U0000233D',
+ "par;": '\U00002225',
+ "para;": '\U000000B6',
+ "parallel;": '\U00002225',
+ "parsim;": '\U00002AF3',
+ "parsl;": '\U00002AFD',
+ "part;": '\U00002202',
+ "pcy;": '\U0000043F',
+ "percnt;": '\U00000025',
+ "period;": '\U0000002E',
+ "permil;": '\U00002030',
+ "perp;": '\U000022A5',
+ "pertenk;": '\U00002031',
+ "pfr;": '\U0001D52D',
+ "phi;": '\U000003C6',
+ "phiv;": '\U000003D5',
+ "phmmat;": '\U00002133',
+ "phone;": '\U0000260E',
+ "pi;": '\U000003C0',
+ "pitchfork;": '\U000022D4',
+ "piv;": '\U000003D6',
+ "planck;": '\U0000210F',
+ "planckh;": '\U0000210E',
+ "plankv;": '\U0000210F',
+ "plus;": '\U0000002B',
+ "plusacir;": '\U00002A23',
+ "plusb;": '\U0000229E',
+ "pluscir;": '\U00002A22',
+ "plusdo;": '\U00002214',
+ "plusdu;": '\U00002A25',
+ "pluse;": '\U00002A72',
+ "plusmn;": '\U000000B1',
+ "plussim;": '\U00002A26',
+ "plustwo;": '\U00002A27',
+ "pm;": '\U000000B1',
+ "pointint;": '\U00002A15',
+ "popf;": '\U0001D561',
+ "pound;": '\U000000A3',
+ "pr;": '\U0000227A',
+ "prE;": '\U00002AB3',
+ "prap;": '\U00002AB7',
+ "prcue;": '\U0000227C',
+ "pre;": '\U00002AAF',
+ "prec;": '\U0000227A',
+ "precapprox;": '\U00002AB7',
+ "preccurlyeq;": '\U0000227C',
+ "preceq;": '\U00002AAF',
+ "precnapprox;": '\U00002AB9',
+ "precneqq;": '\U00002AB5',
+ "precnsim;": '\U000022E8',
+ "precsim;": '\U0000227E',
+ "prime;": '\U00002032',
+ "primes;": '\U00002119',
+ "prnE;": '\U00002AB5',
+ "prnap;": '\U00002AB9',
+ "prnsim;": '\U000022E8',
+ "prod;": '\U0000220F',
+ "profalar;": '\U0000232E',
+ "profline;": '\U00002312',
+ "profsurf;": '\U00002313',
+ "prop;": '\U0000221D',
+ "propto;": '\U0000221D',
+ "prsim;": '\U0000227E',
+ "prurel;": '\U000022B0',
+ "pscr;": '\U0001D4C5',
+ "psi;": '\U000003C8',
+ "puncsp;": '\U00002008',
+ "qfr;": '\U0001D52E',
+ "qint;": '\U00002A0C',
+ "qopf;": '\U0001D562',
+ "qprime;": '\U00002057',
+ "qscr;": '\U0001D4C6',
+ "quaternions;": '\U0000210D',
+ "quatint;": '\U00002A16',
+ "quest;": '\U0000003F',
+ "questeq;": '\U0000225F',
+ "quot;": '\U00000022',
+ "rAarr;": '\U000021DB',
+ "rArr;": '\U000021D2',
+ "rAtail;": '\U0000291C',
+ "rBarr;": '\U0000290F',
+ "rHar;": '\U00002964',
+ "racute;": '\U00000155',
+ "radic;": '\U0000221A',
+ "raemptyv;": '\U000029B3',
+ "rang;": '\U000027E9',
+ "rangd;": '\U00002992',
+ "range;": '\U000029A5',
+ "rangle;": '\U000027E9',
+ "raquo;": '\U000000BB',
+ "rarr;": '\U00002192',
+ "rarrap;": '\U00002975',
+ "rarrb;": '\U000021E5',
+ "rarrbfs;": '\U00002920',
+ "rarrc;": '\U00002933',
+ "rarrfs;": '\U0000291E',
+ "rarrhk;": '\U000021AA',
+ "rarrlp;": '\U000021AC',
+ "rarrpl;": '\U00002945',
+ "rarrsim;": '\U00002974',
+ "rarrtl;": '\U000021A3',
+ "rarrw;": '\U0000219D',
+ "ratail;": '\U0000291A',
+ "ratio;": '\U00002236',
+ "rationals;": '\U0000211A',
+ "rbarr;": '\U0000290D',
+ "rbbrk;": '\U00002773',
+ "rbrace;": '\U0000007D',
+ "rbrack;": '\U0000005D',
+ "rbrke;": '\U0000298C',
+ "rbrksld;": '\U0000298E',
+ "rbrkslu;": '\U00002990',
+ "rcaron;": '\U00000159',
+ "rcedil;": '\U00000157',
+ "rceil;": '\U00002309',
+ "rcub;": '\U0000007D',
+ "rcy;": '\U00000440',
+ "rdca;": '\U00002937',
+ "rdldhar;": '\U00002969',
+ "rdquo;": '\U0000201D',
+ "rdquor;": '\U0000201D',
+ "rdsh;": '\U000021B3',
+ "real;": '\U0000211C',
+ "realine;": '\U0000211B',
+ "realpart;": '\U0000211C',
+ "reals;": '\U0000211D',
+ "rect;": '\U000025AD',
+ "reg;": '\U000000AE',
+ "rfisht;": '\U0000297D',
+ "rfloor;": '\U0000230B',
+ "rfr;": '\U0001D52F',
+ "rhard;": '\U000021C1',
+ "rharu;": '\U000021C0',
+ "rharul;": '\U0000296C',
+ "rho;": '\U000003C1',
+ "rhov;": '\U000003F1',
+ "rightarrow;": '\U00002192',
+ "rightarrowtail;": '\U000021A3',
+ "rightharpoondown;": '\U000021C1',
+ "rightharpoonup;": '\U000021C0',
+ "rightleftarrows;": '\U000021C4',
+ "rightleftharpoons;": '\U000021CC',
+ "rightrightarrows;": '\U000021C9',
+ "rightsquigarrow;": '\U0000219D',
+ "rightthreetimes;": '\U000022CC',
+ "ring;": '\U000002DA',
+ "risingdotseq;": '\U00002253',
+ "rlarr;": '\U000021C4',
+ "rlhar;": '\U000021CC',
+ "rlm;": '\U0000200F',
+ "rmoust;": '\U000023B1',
+ "rmoustache;": '\U000023B1',
+ "rnmid;": '\U00002AEE',
+ "roang;": '\U000027ED',
+ "roarr;": '\U000021FE',
+ "robrk;": '\U000027E7',
+ "ropar;": '\U00002986',
+ "ropf;": '\U0001D563',
+ "roplus;": '\U00002A2E',
+ "rotimes;": '\U00002A35',
+ "rpar;": '\U00000029',
+ "rpargt;": '\U00002994',
+ "rppolint;": '\U00002A12',
+ "rrarr;": '\U000021C9',
+ "rsaquo;": '\U0000203A',
+ "rscr;": '\U0001D4C7',
+ "rsh;": '\U000021B1',
+ "rsqb;": '\U0000005D',
+ "rsquo;": '\U00002019',
+ "rsquor;": '\U00002019',
+ "rthree;": '\U000022CC',
+ "rtimes;": '\U000022CA',
+ "rtri;": '\U000025B9',
+ "rtrie;": '\U000022B5',
+ "rtrif;": '\U000025B8',
+ "rtriltri;": '\U000029CE',
+ "ruluhar;": '\U00002968',
+ "rx;": '\U0000211E',
+ "sacute;": '\U0000015B',
+ "sbquo;": '\U0000201A',
+ "sc;": '\U0000227B',
+ "scE;": '\U00002AB4',
+ "scap;": '\U00002AB8',
+ "scaron;": '\U00000161',
+ "sccue;": '\U0000227D',
+ "sce;": '\U00002AB0',
+ "scedil;": '\U0000015F',
+ "scirc;": '\U0000015D',
+ "scnE;": '\U00002AB6',
+ "scnap;": '\U00002ABA',
+ "scnsim;": '\U000022E9',
+ "scpolint;": '\U00002A13',
+ "scsim;": '\U0000227F',
+ "scy;": '\U00000441',
+ "sdot;": '\U000022C5',
+ "sdotb;": '\U000022A1',
+ "sdote;": '\U00002A66',
+ "seArr;": '\U000021D8',
+ "searhk;": '\U00002925',
+ "searr;": '\U00002198',
+ "searrow;": '\U00002198',
+ "sect;": '\U000000A7',
+ "semi;": '\U0000003B',
+ "seswar;": '\U00002929',
+ "setminus;": '\U00002216',
+ "setmn;": '\U00002216',
+ "sext;": '\U00002736',
+ "sfr;": '\U0001D530',
+ "sfrown;": '\U00002322',
+ "sharp;": '\U0000266F',
+ "shchcy;": '\U00000449',
+ "shcy;": '\U00000448',
+ "shortmid;": '\U00002223',
+ "shortparallel;": '\U00002225',
+ "shy;": '\U000000AD',
+ "sigma;": '\U000003C3',
+ "sigmaf;": '\U000003C2',
+ "sigmav;": '\U000003C2',
+ "sim;": '\U0000223C',
+ "simdot;": '\U00002A6A',
+ "sime;": '\U00002243',
+ "simeq;": '\U00002243',
+ "simg;": '\U00002A9E',
+ "simgE;": '\U00002AA0',
+ "siml;": '\U00002A9D',
+ "simlE;": '\U00002A9F',
+ "simne;": '\U00002246',
+ "simplus;": '\U00002A24',
+ "simrarr;": '\U00002972',
+ "slarr;": '\U00002190',
+ "smallsetminus;": '\U00002216',
+ "smashp;": '\U00002A33',
+ "smeparsl;": '\U000029E4',
+ "smid;": '\U00002223',
+ "smile;": '\U00002323',
+ "smt;": '\U00002AAA',
+ "smte;": '\U00002AAC',
+ "softcy;": '\U0000044C',
+ "sol;": '\U0000002F',
+ "solb;": '\U000029C4',
+ "solbar;": '\U0000233F',
+ "sopf;": '\U0001D564',
+ "spades;": '\U00002660',
+ "spadesuit;": '\U00002660',
+ "spar;": '\U00002225',
+ "sqcap;": '\U00002293',
+ "sqcup;": '\U00002294',
+ "sqsub;": '\U0000228F',
+ "sqsube;": '\U00002291',
+ "sqsubset;": '\U0000228F',
+ "sqsubseteq;": '\U00002291',
+ "sqsup;": '\U00002290',
+ "sqsupe;": '\U00002292',
+ "sqsupset;": '\U00002290',
+ "sqsupseteq;": '\U00002292',
+ "squ;": '\U000025A1',
+ "square;": '\U000025A1',
+ "squarf;": '\U000025AA',
+ "squf;": '\U000025AA',
+ "srarr;": '\U00002192',
+ "sscr;": '\U0001D4C8',
+ "ssetmn;": '\U00002216',
+ "ssmile;": '\U00002323',
+ "sstarf;": '\U000022C6',
+ "star;": '\U00002606',
+ "starf;": '\U00002605',
+ "straightepsilon;": '\U000003F5',
+ "straightphi;": '\U000003D5',
+ "strns;": '\U000000AF',
+ "sub;": '\U00002282',
+ "subE;": '\U00002AC5',
+ "subdot;": '\U00002ABD',
+ "sube;": '\U00002286',
+ "subedot;": '\U00002AC3',
+ "submult;": '\U00002AC1',
+ "subnE;": '\U00002ACB',
+ "subne;": '\U0000228A',
+ "subplus;": '\U00002ABF',
+ "subrarr;": '\U00002979',
+ "subset;": '\U00002282',
+ "subseteq;": '\U00002286',
+ "subseteqq;": '\U00002AC5',
+ "subsetneq;": '\U0000228A',
+ "subsetneqq;": '\U00002ACB',
+ "subsim;": '\U00002AC7',
+ "subsub;": '\U00002AD5',
+ "subsup;": '\U00002AD3',
+ "succ;": '\U0000227B',
+ "succapprox;": '\U00002AB8',
+ "succcurlyeq;": '\U0000227D',
+ "succeq;": '\U00002AB0',
+ "succnapprox;": '\U00002ABA',
+ "succneqq;": '\U00002AB6',
+ "succnsim;": '\U000022E9',
+ "succsim;": '\U0000227F',
+ "sum;": '\U00002211',
+ "sung;": '\U0000266A',
+ "sup;": '\U00002283',
+ "sup1;": '\U000000B9',
+ "sup2;": '\U000000B2',
+ "sup3;": '\U000000B3',
+ "supE;": '\U00002AC6',
+ "supdot;": '\U00002ABE',
+ "supdsub;": '\U00002AD8',
+ "supe;": '\U00002287',
+ "supedot;": '\U00002AC4',
+ "suphsol;": '\U000027C9',
+ "suphsub;": '\U00002AD7',
+ "suplarr;": '\U0000297B',
+ "supmult;": '\U00002AC2',
+ "supnE;": '\U00002ACC',
+ "supne;": '\U0000228B',
+ "supplus;": '\U00002AC0',
+ "supset;": '\U00002283',
+ "supseteq;": '\U00002287',
+ "supseteqq;": '\U00002AC6',
+ "supsetneq;": '\U0000228B',
+ "supsetneqq;": '\U00002ACC',
+ "supsim;": '\U00002AC8',
+ "supsub;": '\U00002AD4',
+ "supsup;": '\U00002AD6',
+ "swArr;": '\U000021D9',
+ "swarhk;": '\U00002926',
+ "swarr;": '\U00002199',
+ "swarrow;": '\U00002199',
+ "swnwar;": '\U0000292A',
+ "szlig;": '\U000000DF',
+ "target;": '\U00002316',
+ "tau;": '\U000003C4',
+ "tbrk;": '\U000023B4',
+ "tcaron;": '\U00000165',
+ "tcedil;": '\U00000163',
+ "tcy;": '\U00000442',
+ "tdot;": '\U000020DB',
+ "telrec;": '\U00002315',
+ "tfr;": '\U0001D531',
+ "there4;": '\U00002234',
+ "therefore;": '\U00002234',
+ "theta;": '\U000003B8',
+ "thetasym;": '\U000003D1',
+ "thetav;": '\U000003D1',
+ "thickapprox;": '\U00002248',
+ "thicksim;": '\U0000223C',
+ "thinsp;": '\U00002009',
+ "thkap;": '\U00002248',
+ "thksim;": '\U0000223C',
+ "thorn;": '\U000000FE',
+ "tilde;": '\U000002DC',
+ "times;": '\U000000D7',
+ "timesb;": '\U000022A0',
+ "timesbar;": '\U00002A31',
+ "timesd;": '\U00002A30',
+ "tint;": '\U0000222D',
+ "toea;": '\U00002928',
+ "top;": '\U000022A4',
+ "topbot;": '\U00002336',
+ "topcir;": '\U00002AF1',
+ "topf;": '\U0001D565',
+ "topfork;": '\U00002ADA',
+ "tosa;": '\U00002929',
+ "tprime;": '\U00002034',
+ "trade;": '\U00002122',
+ "triangle;": '\U000025B5',
+ "triangledown;": '\U000025BF',
+ "triangleleft;": '\U000025C3',
+ "trianglelefteq;": '\U000022B4',
+ "triangleq;": '\U0000225C',
+ "triangleright;": '\U000025B9',
+ "trianglerighteq;": '\U000022B5',
+ "tridot;": '\U000025EC',
+ "trie;": '\U0000225C',
+ "triminus;": '\U00002A3A',
+ "triplus;": '\U00002A39',
+ "trisb;": '\U000029CD',
+ "tritime;": '\U00002A3B',
+ "trpezium;": '\U000023E2',
+ "tscr;": '\U0001D4C9',
+ "tscy;": '\U00000446',
+ "tshcy;": '\U0000045B',
+ "tstrok;": '\U00000167',
+ "twixt;": '\U0000226C',
+ "twoheadleftarrow;": '\U0000219E',
+ "twoheadrightarrow;": '\U000021A0',
+ "uArr;": '\U000021D1',
+ "uHar;": '\U00002963',
+ "uacute;": '\U000000FA',
+ "uarr;": '\U00002191',
+ "ubrcy;": '\U0000045E',
+ "ubreve;": '\U0000016D',
+ "ucirc;": '\U000000FB',
+ "ucy;": '\U00000443',
+ "udarr;": '\U000021C5',
+ "udblac;": '\U00000171',
+ "udhar;": '\U0000296E',
+ "ufisht;": '\U0000297E',
+ "ufr;": '\U0001D532',
+ "ugrave;": '\U000000F9',
+ "uharl;": '\U000021BF',
+ "uharr;": '\U000021BE',
+ "uhblk;": '\U00002580',
+ "ulcorn;": '\U0000231C',
+ "ulcorner;": '\U0000231C',
+ "ulcrop;": '\U0000230F',
+ "ultri;": '\U000025F8',
+ "umacr;": '\U0000016B',
+ "uml;": '\U000000A8',
+ "uogon;": '\U00000173',
+ "uopf;": '\U0001D566',
+ "uparrow;": '\U00002191',
+ "updownarrow;": '\U00002195',
+ "upharpoonleft;": '\U000021BF',
+ "upharpoonright;": '\U000021BE',
+ "uplus;": '\U0000228E',
+ "upsi;": '\U000003C5',
+ "upsih;": '\U000003D2',
+ "upsilon;": '\U000003C5',
+ "upuparrows;": '\U000021C8',
+ "urcorn;": '\U0000231D',
+ "urcorner;": '\U0000231D',
+ "urcrop;": '\U0000230E',
+ "uring;": '\U0000016F',
+ "urtri;": '\U000025F9',
+ "uscr;": '\U0001D4CA',
+ "utdot;": '\U000022F0',
+ "utilde;": '\U00000169',
+ "utri;": '\U000025B5',
+ "utrif;": '\U000025B4',
+ "uuarr;": '\U000021C8',
+ "uuml;": '\U000000FC',
+ "uwangle;": '\U000029A7',
+ "vArr;": '\U000021D5',
+ "vBar;": '\U00002AE8',
+ "vBarv;": '\U00002AE9',
+ "vDash;": '\U000022A8',
+ "vangrt;": '\U0000299C',
+ "varepsilon;": '\U000003F5',
+ "varkappa;": '\U000003F0',
+ "varnothing;": '\U00002205',
+ "varphi;": '\U000003D5',
+ "varpi;": '\U000003D6',
+ "varpropto;": '\U0000221D',
+ "varr;": '\U00002195',
+ "varrho;": '\U000003F1',
+ "varsigma;": '\U000003C2',
+ "vartheta;": '\U000003D1',
+ "vartriangleleft;": '\U000022B2',
+ "vartriangleright;": '\U000022B3',
+ "vcy;": '\U00000432',
+ "vdash;": '\U000022A2',
+ "vee;": '\U00002228',
+ "veebar;": '\U000022BB',
+ "veeeq;": '\U0000225A',
+ "vellip;": '\U000022EE',
+ "verbar;": '\U0000007C',
+ "vert;": '\U0000007C',
+ "vfr;": '\U0001D533',
+ "vltri;": '\U000022B2',
+ "vopf;": '\U0001D567',
+ "vprop;": '\U0000221D',
+ "vrtri;": '\U000022B3',
+ "vscr;": '\U0001D4CB',
+ "vzigzag;": '\U0000299A',
+ "wcirc;": '\U00000175',
+ "wedbar;": '\U00002A5F',
+ "wedge;": '\U00002227',
+ "wedgeq;": '\U00002259',
+ "weierp;": '\U00002118',
+ "wfr;": '\U0001D534',
+ "wopf;": '\U0001D568',
+ "wp;": '\U00002118',
+ "wr;": '\U00002240',
+ "wreath;": '\U00002240',
+ "wscr;": '\U0001D4CC',
+ "xcap;": '\U000022C2',
+ "xcirc;": '\U000025EF',
+ "xcup;": '\U000022C3',
+ "xdtri;": '\U000025BD',
+ "xfr;": '\U0001D535',
+ "xhArr;": '\U000027FA',
+ "xharr;": '\U000027F7',
+ "xi;": '\U000003BE',
+ "xlArr;": '\U000027F8',
+ "xlarr;": '\U000027F5',
+ "xmap;": '\U000027FC',
+ "xnis;": '\U000022FB',
+ "xodot;": '\U00002A00',
+ "xopf;": '\U0001D569',
+ "xoplus;": '\U00002A01',
+ "xotime;": '\U00002A02',
+ "xrArr;": '\U000027F9',
+ "xrarr;": '\U000027F6',
+ "xscr;": '\U0001D4CD',
+ "xsqcup;": '\U00002A06',
+ "xuplus;": '\U00002A04',
+ "xutri;": '\U000025B3',
+ "xvee;": '\U000022C1',
+ "xwedge;": '\U000022C0',
+ "yacute;": '\U000000FD',
+ "yacy;": '\U0000044F',
+ "ycirc;": '\U00000177',
+ "ycy;": '\U0000044B',
+ "yen;": '\U000000A5',
+ "yfr;": '\U0001D536',
+ "yicy;": '\U00000457',
+ "yopf;": '\U0001D56A',
+ "yscr;": '\U0001D4CE',
+ "yucy;": '\U0000044E',
+ "yuml;": '\U000000FF',
+ "zacute;": '\U0000017A',
+ "zcaron;": '\U0000017E',
+ "zcy;": '\U00000437',
+ "zdot;": '\U0000017C',
+ "zeetrf;": '\U00002128',
+ "zeta;": '\U000003B6',
+ "zfr;": '\U0001D537',
+ "zhcy;": '\U00000436',
+ "zigrarr;": '\U000021DD',
+ "zopf;": '\U0001D56B',
+ "zscr;": '\U0001D4CF',
+ "zwj;": '\U0000200D',
+ "zwnj;": '\U0000200C',
+ "AElig": '\U000000C6',
+ "AMP": '\U00000026',
+ "Aacute": '\U000000C1',
+ "Acirc": '\U000000C2',
+ "Agrave": '\U000000C0',
+ "Aring": '\U000000C5',
+ "Atilde": '\U000000C3',
+ "Auml": '\U000000C4',
+ "COPY": '\U000000A9',
+ "Ccedil": '\U000000C7',
+ "ETH": '\U000000D0',
+ "Eacute": '\U000000C9',
+ "Ecirc": '\U000000CA',
+ "Egrave": '\U000000C8',
+ "Euml": '\U000000CB',
+ "GT": '\U0000003E',
+ "Iacute": '\U000000CD',
+ "Icirc": '\U000000CE',
+ "Igrave": '\U000000CC',
+ "Iuml": '\U000000CF',
+ "LT": '\U0000003C',
+ "Ntilde": '\U000000D1',
+ "Oacute": '\U000000D3',
+ "Ocirc": '\U000000D4',
+ "Ograve": '\U000000D2',
+ "Oslash": '\U000000D8',
+ "Otilde": '\U000000D5',
+ "Ouml": '\U000000D6',
+ "QUOT": '\U00000022',
+ "REG": '\U000000AE',
+ "THORN": '\U000000DE',
+ "Uacute": '\U000000DA',
+ "Ucirc": '\U000000DB',
+ "Ugrave": '\U000000D9',
+ "Uuml": '\U000000DC',
+ "Yacute": '\U000000DD',
+ "aacute": '\U000000E1',
+ "acirc": '\U000000E2',
+ "acute": '\U000000B4',
+ "aelig": '\U000000E6',
+ "agrave": '\U000000E0',
+ "amp": '\U00000026',
+ "aring": '\U000000E5',
+ "atilde": '\U000000E3',
+ "auml": '\U000000E4',
+ "brvbar": '\U000000A6',
+ "ccedil": '\U000000E7',
+ "cedil": '\U000000B8',
+ "cent": '\U000000A2',
+ "copy": '\U000000A9',
+ "curren": '\U000000A4',
+ "deg": '\U000000B0',
+ "divide": '\U000000F7',
+ "eacute": '\U000000E9',
+ "ecirc": '\U000000EA',
+ "egrave": '\U000000E8',
+ "eth": '\U000000F0',
+ "euml": '\U000000EB',
+ "frac12": '\U000000BD',
+ "frac14": '\U000000BC',
+ "frac34": '\U000000BE',
+ "gt": '\U0000003E',
+ "iacute": '\U000000ED',
+ "icirc": '\U000000EE',
+ "iexcl": '\U000000A1',
+ "igrave": '\U000000EC',
+ "iquest": '\U000000BF',
+ "iuml": '\U000000EF',
+ "laquo": '\U000000AB',
+ "lt": '\U0000003C',
+ "macr": '\U000000AF',
+ "micro": '\U000000B5',
+ "middot": '\U000000B7',
+ "nbsp": '\U000000A0',
+ "not": '\U000000AC',
+ "ntilde": '\U000000F1',
+ "oacute": '\U000000F3',
+ "ocirc": '\U000000F4',
+ "ograve": '\U000000F2',
+ "ordf": '\U000000AA',
+ "ordm": '\U000000BA',
+ "oslash": '\U000000F8',
+ "otilde": '\U000000F5',
+ "ouml": '\U000000F6',
+ "para": '\U000000B6',
+ "plusmn": '\U000000B1',
+ "pound": '\U000000A3',
+ "quot": '\U00000022',
+ "raquo": '\U000000BB',
+ "reg": '\U000000AE',
+ "sect": '\U000000A7',
+ "shy": '\U000000AD',
+ "sup1": '\U000000B9',
+ "sup2": '\U000000B2',
+ "sup3": '\U000000B3',
+ "szlig": '\U000000DF',
+ "thorn": '\U000000FE',
+ "times": '\U000000D7',
+ "uacute": '\U000000FA',
+ "ucirc": '\U000000FB',
+ "ugrave": '\U000000F9',
+ "uml": '\U000000A8',
+ "uuml": '\U000000FC',
+ "yacute": '\U000000FD',
+ "yen": '\U000000A5',
+ "yuml": '\U000000FF',
+}
+
+// HTML entities that are two unicode codepoints.
+var entity2 = map[string][2]rune{
+ // TODO(nigeltao): Handle replacements that are wider than their names.
+ // "nLt;": {'\u226A', '\u20D2'},
+ // "nGt;": {'\u226B', '\u20D2'},
+ "NotEqualTilde;": {'\u2242', '\u0338'},
+ "NotGreaterFullEqual;": {'\u2267', '\u0338'},
+ "NotGreaterGreater;": {'\u226B', '\u0338'},
+ "NotGreaterSlantEqual;": {'\u2A7E', '\u0338'},
+ "NotHumpDownHump;": {'\u224E', '\u0338'},
+ "NotHumpEqual;": {'\u224F', '\u0338'},
+ "NotLeftTriangleBar;": {'\u29CF', '\u0338'},
+ "NotLessLess;": {'\u226A', '\u0338'},
+ "NotLessSlantEqual;": {'\u2A7D', '\u0338'},
+ "NotNestedGreaterGreater;": {'\u2AA2', '\u0338'},
+ "NotNestedLessLess;": {'\u2AA1', '\u0338'},
+ "NotPrecedesEqual;": {'\u2AAF', '\u0338'},
+ "NotRightTriangleBar;": {'\u29D0', '\u0338'},
+ "NotSquareSubset;": {'\u228F', '\u0338'},
+ "NotSquareSuperset;": {'\u2290', '\u0338'},
+ "NotSubset;": {'\u2282', '\u20D2'},
+ "NotSucceedsEqual;": {'\u2AB0', '\u0338'},
+ "NotSucceedsTilde;": {'\u227F', '\u0338'},
+ "NotSuperset;": {'\u2283', '\u20D2'},
+ "ThickSpace;": {'\u205F', '\u200A'},
+ "acE;": {'\u223E', '\u0333'},
+ "bne;": {'\u003D', '\u20E5'},
+ "bnequiv;": {'\u2261', '\u20E5'},
+ "caps;": {'\u2229', '\uFE00'},
+ "cups;": {'\u222A', '\uFE00'},
+ "fjlig;": {'\u0066', '\u006A'},
+ "gesl;": {'\u22DB', '\uFE00'},
+ "gvertneqq;": {'\u2269', '\uFE00'},
+ "gvnE;": {'\u2269', '\uFE00'},
+ "lates;": {'\u2AAD', '\uFE00'},
+ "lesg;": {'\u22DA', '\uFE00'},
+ "lvertneqq;": {'\u2268', '\uFE00'},
+ "lvnE;": {'\u2268', '\uFE00'},
+ "nGg;": {'\u22D9', '\u0338'},
+ "nGtv;": {'\u226B', '\u0338'},
+ "nLl;": {'\u22D8', '\u0338'},
+ "nLtv;": {'\u226A', '\u0338'},
+ "nang;": {'\u2220', '\u20D2'},
+ "napE;": {'\u2A70', '\u0338'},
+ "napid;": {'\u224B', '\u0338'},
+ "nbump;": {'\u224E', '\u0338'},
+ "nbumpe;": {'\u224F', '\u0338'},
+ "ncongdot;": {'\u2A6D', '\u0338'},
+ "nedot;": {'\u2250', '\u0338'},
+ "nesim;": {'\u2242', '\u0338'},
+ "ngE;": {'\u2267', '\u0338'},
+ "ngeqq;": {'\u2267', '\u0338'},
+ "ngeqslant;": {'\u2A7E', '\u0338'},
+ "nges;": {'\u2A7E', '\u0338'},
+ "nlE;": {'\u2266', '\u0338'},
+ "nleqq;": {'\u2266', '\u0338'},
+ "nleqslant;": {'\u2A7D', '\u0338'},
+ "nles;": {'\u2A7D', '\u0338'},
+ "notinE;": {'\u22F9', '\u0338'},
+ "notindot;": {'\u22F5', '\u0338'},
+ "nparsl;": {'\u2AFD', '\u20E5'},
+ "npart;": {'\u2202', '\u0338'},
+ "npre;": {'\u2AAF', '\u0338'},
+ "npreceq;": {'\u2AAF', '\u0338'},
+ "nrarrc;": {'\u2933', '\u0338'},
+ "nrarrw;": {'\u219D', '\u0338'},
+ "nsce;": {'\u2AB0', '\u0338'},
+ "nsubE;": {'\u2AC5', '\u0338'},
+ "nsubset;": {'\u2282', '\u20D2'},
+ "nsubseteqq;": {'\u2AC5', '\u0338'},
+ "nsucceq;": {'\u2AB0', '\u0338'},
+ "nsupE;": {'\u2AC6', '\u0338'},
+ "nsupset;": {'\u2283', '\u20D2'},
+ "nsupseteqq;": {'\u2AC6', '\u0338'},
+ "nvap;": {'\u224D', '\u20D2'},
+ "nvge;": {'\u2265', '\u20D2'},
+ "nvgt;": {'\u003E', '\u20D2'},
+ "nvle;": {'\u2264', '\u20D2'},
+ "nvlt;": {'\u003C', '\u20D2'},
+ "nvltrie;": {'\u22B4', '\u20D2'},
+ "nvrtrie;": {'\u22B5', '\u20D2'},
+ "nvsim;": {'\u223C', '\u20D2'},
+ "race;": {'\u223D', '\u0331'},
+ "smtes;": {'\u2AAC', '\uFE00'},
+ "sqcaps;": {'\u2293', '\uFE00'},
+ "sqcups;": {'\u2294', '\uFE00'},
+ "varsubsetneq;": {'\u228A', '\uFE00'},
+ "varsubsetneqq;": {'\u2ACB', '\uFE00'},
+ "varsupsetneq;": {'\u228B', '\uFE00'},
+ "varsupsetneqq;": {'\u2ACC', '\uFE00'},
+ "vnsub;": {'\u2282', '\u20D2'},
+ "vnsup;": {'\u2283', '\u20D2'},
+ "vsubnE;": {'\u2ACB', '\uFE00'},
+ "vsubne;": {'\u228A', '\uFE00'},
+ "vsupnE;": {'\u2ACC', '\uFE00'},
+ "vsupne;": {'\u228B', '\uFE00'},
+}
diff --git a/vendor/golang.org/x/net/html/escape.go b/vendor/golang.org/x/net/html/escape.go
new file mode 100644
index 000000000..d85613962
--- /dev/null
+++ b/vendor/golang.org/x/net/html/escape.go
@@ -0,0 +1,258 @@
+// Copyright 2010 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 html
+
+import (
+ "bytes"
+ "strings"
+ "unicode/utf8"
+)
+
+// These replacements permit compatibility with old numeric entities that
+// assumed Windows-1252 encoding.
+// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference
+var replacementTable = [...]rune{
+ '\u20AC', // First entry is what 0x80 should be replaced with.
+ '\u0081',
+ '\u201A',
+ '\u0192',
+ '\u201E',
+ '\u2026',
+ '\u2020',
+ '\u2021',
+ '\u02C6',
+ '\u2030',
+ '\u0160',
+ '\u2039',
+ '\u0152',
+ '\u008D',
+ '\u017D',
+ '\u008F',
+ '\u0090',
+ '\u2018',
+ '\u2019',
+ '\u201C',
+ '\u201D',
+ '\u2022',
+ '\u2013',
+ '\u2014',
+ '\u02DC',
+ '\u2122',
+ '\u0161',
+ '\u203A',
+ '\u0153',
+ '\u009D',
+ '\u017E',
+ '\u0178', // Last entry is 0x9F.
+ // 0x00->'\uFFFD' is handled programmatically.
+ // 0x0D->'\u000D' is a no-op.
+}
+
+// unescapeEntity reads an entity like "&lt;" from b[src:] and writes the
+// corresponding "<" to b[dst:], returning the incremented dst and src cursors.
+// Precondition: b[src] == '&' && dst <= src.
+// attribute should be true if parsing an attribute value.
+func unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) {
+ // https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference
+
+ // i starts at 1 because we already know that s[0] == '&'.
+ i, s := 1, b[src:]
+
+ if len(s) <= 1 {
+ b[dst] = b[src]
+ return dst + 1, src + 1
+ }
+
+ if s[i] == '#' {
+ if len(s) <= 3 { // We need to have at least "&#.".
+ b[dst] = b[src]
+ return dst + 1, src + 1
+ }
+ i++
+ c := s[i]
+ hex := false
+ if c == 'x' || c == 'X' {
+ hex = true
+ i++
+ }
+
+ x := '\x00'
+ for i < len(s) {
+ c = s[i]
+ i++
+ if hex {
+ if '0' <= c && c <= '9' {
+ x = 16*x + rune(c) - '0'
+ continue
+ } else if 'a' <= c && c <= 'f' {
+ x = 16*x + rune(c) - 'a' + 10
+ continue
+ } else if 'A' <= c && c <= 'F' {
+ x = 16*x + rune(c) - 'A' + 10
+ continue
+ }
+ } else if '0' <= c && c <= '9' {
+ x = 10*x + rune(c) - '0'
+ continue
+ }
+ if c != ';' {
+ i--
+ }
+ break
+ }
+
+ if i <= 3 { // No characters matched.
+ b[dst] = b[src]
+ return dst + 1, src + 1
+ }
+
+ if 0x80 <= x && x <= 0x9F {
+ // Replace characters from Windows-1252 with UTF-8 equivalents.
+ x = replacementTable[x-0x80]
+ } else if x == 0 || (0xD800 <= x && x <= 0xDFFF) || x > 0x10FFFF {
+ // Replace invalid characters with the replacement character.
+ x = '\uFFFD'
+ }
+
+ return dst + utf8.EncodeRune(b[dst:], x), src + i
+ }
+
+ // Consume the maximum number of characters possible, with the
+ // consumed characters matching one of the named references.
+
+ for i < len(s) {
+ c := s[i]
+ i++
+ // Lower-cased characters are more common in entities, so we check for them first.
+ if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' {
+ continue
+ }
+ if c != ';' {
+ i--
+ }
+ break
+ }
+
+ entityName := string(s[1:i])
+ if entityName == "" {
+ // No-op.
+ } else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' {
+ // No-op.
+ } else if x := entity[entityName]; x != 0 {
+ return dst + utf8.EncodeRune(b[dst:], x), src + i
+ } else if x := entity2[entityName]; x[0] != 0 {
+ dst1 := dst + utf8.EncodeRune(b[dst:], x[0])
+ return dst1 + utf8.EncodeRune(b[dst1:], x[1]), src + i
+ } else if !attribute {
+ maxLen := len(entityName) - 1
+ if maxLen > longestEntityWithoutSemicolon {
+ maxLen = longestEntityWithoutSemicolon
+ }
+ for j := maxLen; j > 1; j-- {
+ if x := entity[entityName[:j]]; x != 0 {
+ return dst + utf8.EncodeRune(b[dst:], x), src + j + 1
+ }
+ }
+ }
+
+ dst1, src1 = dst+i, src+i
+ copy(b[dst:dst1], b[src:src1])
+ return dst1, src1
+}
+
+// unescape unescapes b's entities in-place, so that "a&lt;b" becomes "a<b".
+// attribute should be true if parsing an attribute value.
+func unescape(b []byte, attribute bool) []byte {
+ for i, c := range b {
+ if c == '&' {
+ dst, src := unescapeEntity(b, i, i, attribute)
+ for src < len(b) {
+ c := b[src]
+ if c == '&' {
+ dst, src = unescapeEntity(b, dst, src, attribute)
+ } else {
+ b[dst] = c
+ dst, src = dst+1, src+1
+ }
+ }
+ return b[0:dst]
+ }
+ }
+ return b
+}
+
+// lower lower-cases the A-Z bytes in b in-place, so that "aBc" becomes "abc".
+func lower(b []byte) []byte {
+ for i, c := range b {
+ if 'A' <= c && c <= 'Z' {
+ b[i] = c + 'a' - 'A'
+ }
+ }
+ return b
+}
+
+const escapedChars = "&'<>\"\r"
+
+func escape(w writer, s string) error {
+ i := strings.IndexAny(s, escapedChars)
+ for i != -1 {
+ if _, err := w.WriteString(s[:i]); err != nil {
+ return err
+ }
+ var esc string
+ switch s[i] {
+ case '&':
+ esc = "&amp;"
+ case '\'':
+ // "&#39;" is shorter than "&apos;" and apos was not in HTML until HTML5.
+ esc = "&#39;"
+ case '<':
+ esc = "&lt;"
+ case '>':
+ esc = "&gt;"
+ case '"':
+ // "&#34;" is shorter than "&quot;".
+ esc = "&#34;"
+ case '\r':
+ esc = "&#13;"
+ default:
+ panic("unrecognized escape character")
+ }
+ s = s[i+1:]
+ if _, err := w.WriteString(esc); err != nil {
+ return err
+ }
+ i = strings.IndexAny(s, escapedChars)
+ }
+ _, err := w.WriteString(s)
+ return err
+}
+
+// EscapeString escapes special characters like "<" to become "&lt;". It
+// escapes only five such characters: <, >, &, ' and ".
+// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't
+// always true.
+func EscapeString(s string) string {
+ if strings.IndexAny(s, escapedChars) == -1 {
+ return s
+ }
+ var buf bytes.Buffer
+ escape(&buf, s)
+ return buf.String()
+}
+
+// UnescapeString unescapes entities like "&lt;" to become "<". It unescapes a
+// larger range of entities than EscapeString escapes. For example, "&aacute;"
+// unescapes to "á", as does "&#225;" and "&xE1;".
+// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't
+// always true.
+func UnescapeString(s string) string {
+ for _, c := range s {
+ if c == '&' {
+ return string(unescape([]byte(s), false))
+ }
+ }
+ return s
+}
diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go
new file mode 100644
index 000000000..01477a963
--- /dev/null
+++ b/vendor/golang.org/x/net/html/foreign.go
@@ -0,0 +1,226 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package html
+
+import (
+ "strings"
+)
+
+func adjustAttributeNames(aa []Attribute, nameMap map[string]string) {
+ for i := range aa {
+ if newName, ok := nameMap[aa[i].Key]; ok {
+ aa[i].Key = newName
+ }
+ }
+}
+
+func adjustForeignAttributes(aa []Attribute) {
+ for i, a := range aa {
+ if a.Key == "" || a.Key[0] != 'x' {
+ continue
+ }
+ switch a.Key {
+ case "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show",
+ "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "xmlns:xlink":
+ j := strings.Index(a.Key, ":")
+ aa[i].Namespace = a.Key[:j]
+ aa[i].Key = a.Key[j+1:]
+ }
+ }
+}
+
+func htmlIntegrationPoint(n *Node) bool {
+ if n.Type != ElementNode {
+ return false
+ }
+ switch n.Namespace {
+ case "math":
+ if n.Data == "annotation-xml" {
+ for _, a := range n.Attr {
+ if a.Key == "encoding" {
+ val := strings.ToLower(a.Val)
+ if val == "text/html" || val == "application/xhtml+xml" {
+ return true
+ }
+ }
+ }
+ }
+ case "svg":
+ switch n.Data {
+ case "desc", "foreignObject", "title":
+ return true
+ }
+ }
+ return false
+}
+
+func mathMLTextIntegrationPoint(n *Node) bool {
+ if n.Namespace != "math" {
+ return false
+ }
+ switch n.Data {
+ case "mi", "mo", "mn", "ms", "mtext":
+ return true
+ }
+ return false
+}
+
+// Section 12.2.6.5.
+var breakout = map[string]bool{
+ "b": true,
+ "big": true,
+ "blockquote": true,
+ "body": true,
+ "br": true,
+ "center": true,
+ "code": true,
+ "dd": true,
+ "div": true,
+ "dl": true,
+ "dt": true,
+ "em": true,
+ "embed": true,
+ "h1": true,
+ "h2": true,
+ "h3": true,
+ "h4": true,
+ "h5": true,
+ "h6": true,
+ "head": true,
+ "hr": true,
+ "i": true,
+ "img": true,
+ "li": true,
+ "listing": true,
+ "menu": true,
+ "meta": true,
+ "nobr": true,
+ "ol": true,
+ "p": true,
+ "pre": true,
+ "ruby": true,
+ "s": true,
+ "small": true,
+ "span": true,
+ "strong": true,
+ "strike": true,
+ "sub": true,
+ "sup": true,
+ "table": true,
+ "tt": true,
+ "u": true,
+ "ul": true,
+ "var": true,
+}
+
+// Section 12.2.6.5.
+var svgTagNameAdjustments = map[string]string{
+ "altglyph": "altGlyph",
+ "altglyphdef": "altGlyphDef",
+ "altglyphitem": "altGlyphItem",
+ "animatecolor": "animateColor",
+ "animatemotion": "animateMotion",
+ "animatetransform": "animateTransform",
+ "clippath": "clipPath",
+ "feblend": "feBlend",
+ "fecolormatrix": "feColorMatrix",
+ "fecomponenttransfer": "feComponentTransfer",
+ "fecomposite": "feComposite",
+ "feconvolvematrix": "feConvolveMatrix",
+ "fediffuselighting": "feDiffuseLighting",
+ "fedisplacementmap": "feDisplacementMap",
+ "fedistantlight": "feDistantLight",
+ "feflood": "feFlood",
+ "fefunca": "feFuncA",
+ "fefuncb": "feFuncB",
+ "fefuncg": "feFuncG",
+ "fefuncr": "feFuncR",
+ "fegaussianblur": "feGaussianBlur",
+ "feimage": "feImage",
+ "femerge": "feMerge",
+ "femergenode": "feMergeNode",
+ "femorphology": "feMorphology",
+ "feoffset": "feOffset",
+ "fepointlight": "fePointLight",
+ "fespecularlighting": "feSpecularLighting",
+ "fespotlight": "feSpotLight",
+ "fetile": "feTile",
+ "feturbulence": "feTurbulence",
+ "foreignobject": "foreignObject",
+ "glyphref": "glyphRef",
+ "lineargradient": "linearGradient",
+ "radialgradient": "radialGradient",
+ "textpath": "textPath",
+}
+
+// Section 12.2.6.1
+var mathMLAttributeAdjustments = map[string]string{
+ "definitionurl": "definitionURL",
+}
+
+var svgAttributeAdjustments = map[string]string{
+ "attributename": "attributeName",
+ "attributetype": "attributeType",
+ "basefrequency": "baseFrequency",
+ "baseprofile": "baseProfile",
+ "calcmode": "calcMode",
+ "clippathunits": "clipPathUnits",
+ "contentscripttype": "contentScriptType",
+ "contentstyletype": "contentStyleType",
+ "diffuseconstant": "diffuseConstant",
+ "edgemode": "edgeMode",
+ "externalresourcesrequired": "externalResourcesRequired",
+ "filterres": "filterRes",
+ "filterunits": "filterUnits",
+ "glyphref": "glyphRef",
+ "gradienttransform": "gradientTransform",
+ "gradientunits": "gradientUnits",
+ "kernelmatrix": "kernelMatrix",
+ "kernelunitlength": "kernelUnitLength",
+ "keypoints": "keyPoints",
+ "keysplines": "keySplines",
+ "keytimes": "keyTimes",
+ "lengthadjust": "lengthAdjust",
+ "limitingconeangle": "limitingConeAngle",
+ "markerheight": "markerHeight",
+ "markerunits": "markerUnits",
+ "markerwidth": "markerWidth",
+ "maskcontentunits": "maskContentUnits",
+ "maskunits": "maskUnits",
+ "numoctaves": "numOctaves",
+ "pathlength": "pathLength",
+ "patterncontentunits": "patternContentUnits",
+ "patterntransform": "patternTransform",
+ "patternunits": "patternUnits",
+ "pointsatx": "pointsAtX",
+ "pointsaty": "pointsAtY",
+ "pointsatz": "pointsAtZ",
+ "preservealpha": "preserveAlpha",
+ "preserveaspectratio": "preserveAspectRatio",
+ "primitiveunits": "primitiveUnits",
+ "refx": "refX",
+ "refy": "refY",
+ "repeatcount": "repeatCount",
+ "repeatdur": "repeatDur",
+ "requiredextensions": "requiredExtensions",
+ "requiredfeatures": "requiredFeatures",
+ "specularconstant": "specularConstant",
+ "specularexponent": "specularExponent",
+ "spreadmethod": "spreadMethod",
+ "startoffset": "startOffset",
+ "stddeviation": "stdDeviation",
+ "stitchtiles": "stitchTiles",
+ "surfacescale": "surfaceScale",
+ "systemlanguage": "systemLanguage",
+ "tablevalues": "tableValues",
+ "targetx": "targetX",
+ "targety": "targetY",
+ "textlength": "textLength",
+ "viewbox": "viewBox",
+ "viewtarget": "viewTarget",
+ "xchannelselector": "xChannelSelector",
+ "ychannelselector": "yChannelSelector",
+ "zoomandpan": "zoomAndPan",
+}
diff --git a/vendor/golang.org/x/net/html/node.go b/vendor/golang.org/x/net/html/node.go
new file mode 100644
index 000000000..2c1cade60
--- /dev/null
+++ b/vendor/golang.org/x/net/html/node.go
@@ -0,0 +1,220 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package html
+
+import (
+ "golang.org/x/net/html/atom"
+)
+
+// A NodeType is the type of a Node.
+type NodeType uint32
+
+const (
+ ErrorNode NodeType = iota
+ TextNode
+ DocumentNode
+ ElementNode
+ CommentNode
+ DoctypeNode
+ scopeMarkerNode
+)
+
+// Section 12.2.4.3 says "The markers are inserted when entering applet,
+// object, marquee, template, td, th, and caption elements, and are used
+// to prevent formatting from "leaking" into applet, object, marquee,
+// template, td, th, and caption elements".
+var scopeMarker = Node{Type: scopeMarkerNode}
+
+// A Node consists of a NodeType and some Data (tag name for element nodes,
+// content for text) and are part of a tree of Nodes. Element nodes may also
+// have a Namespace and contain a slice of Attributes. Data is unescaped, so
+// that it looks like "a<b" rather than "a&lt;b". For element nodes, DataAtom
+// is the atom for Data, or zero if Data is not a known tag name.
+//
+// An empty Namespace implies a "http://www.w3.org/1999/xhtml" namespace.
+// Similarly, "math" is short for "http://www.w3.org/1998/Math/MathML", and
+// "svg" is short for "http://www.w3.org/2000/svg".
+type Node struct {
+ Parent, FirstChild, LastChild, PrevSibling, NextSibling *Node
+
+ Type NodeType
+ DataAtom atom.Atom
+ Data string
+ Namespace string
+ Attr []Attribute
+}
+
+// InsertBefore inserts newChild as a child of n, immediately before oldChild
+// in the sequence of n's children. oldChild may be nil, in which case newChild
+// is appended to the end of n's children.
+//
+// It will panic if newChild already has a parent or siblings.
+func (n *Node) InsertBefore(newChild, oldChild *Node) {
+ if newChild.Parent != nil || newChild.PrevSibling != nil || newChild.NextSibling != nil {
+ panic("html: InsertBefore called for an attached child Node")
+ }
+ var prev, next *Node
+ if oldChild != nil {
+ prev, next = oldChild.PrevSibling, oldChild
+ } else {
+ prev = n.LastChild
+ }
+ if prev != nil {
+ prev.NextSibling = newChild
+ } else {
+ n.FirstChild = newChild
+ }
+ if next != nil {
+ next.PrevSibling = newChild
+ } else {
+ n.LastChild = newChild
+ }
+ newChild.Parent = n
+ newChild.PrevSibling = prev
+ newChild.NextSibling = next
+}
+
+// AppendChild adds a node c as a child of n.
+//
+// It will panic if c already has a parent or siblings.
+func (n *Node) AppendChild(c *Node) {
+ if c.Parent != nil || c.PrevSibling != nil || c.NextSibling != nil {
+ panic("html: AppendChild called for an attached child Node")
+ }
+ last := n.LastChild
+ if last != nil {
+ last.NextSibling = c
+ } else {
+ n.FirstChild = c
+ }
+ n.LastChild = c
+ c.Parent = n
+ c.PrevSibling = last
+}
+
+// RemoveChild removes a node c that is a child of n. Afterwards, c will have
+// no parent and no siblings.
+//
+// It will panic if c's parent is not n.
+func (n *Node) RemoveChild(c *Node) {
+ if c.Parent != n {
+ panic("html: RemoveChild called for a non-child Node")
+ }
+ if n.FirstChild == c {
+ n.FirstChild = c.NextSibling
+ }
+ if c.NextSibling != nil {
+ c.NextSibling.PrevSibling = c.PrevSibling
+ }
+ if n.LastChild == c {
+ n.LastChild = c.PrevSibling
+ }
+ if c.PrevSibling != nil {
+ c.PrevSibling.NextSibling = c.NextSibling
+ }
+ c.Parent = nil
+ c.PrevSibling = nil
+ c.NextSibling = nil
+}
+
+// reparentChildren reparents all of src's child nodes to dst.
+func reparentChildren(dst, src *Node) {
+ for {
+ child := src.FirstChild
+ if child == nil {
+ break
+ }
+ src.RemoveChild(child)
+ dst.AppendChild(child)
+ }
+}
+
+// clone returns a new node with the same type, data and attributes.
+// The clone has no parent, no siblings and no children.
+func (n *Node) clone() *Node {
+ m := &Node{
+ Type: n.Type,
+ DataAtom: n.DataAtom,
+ Data: n.Data,
+ Attr: make([]Attribute, len(n.Attr)),
+ }
+ copy(m.Attr, n.Attr)
+ return m
+}
+
+// nodeStack is a stack of nodes.
+type nodeStack []*Node
+
+// pop pops the stack. It will panic if s is empty.
+func (s *nodeStack) pop() *Node {
+ i := len(*s)
+ n := (*s)[i-1]
+ *s = (*s)[:i-1]
+ return n
+}
+
+// top returns the most recently pushed node, or nil if s is empty.
+func (s *nodeStack) top() *Node {
+ if i := len(*s); i > 0 {
+ return (*s)[i-1]
+ }
+ return nil
+}
+
+// index returns the index of the top-most occurrence of n in the stack, or -1
+// if n is not present.
+func (s *nodeStack) index(n *Node) int {
+ for i := len(*s) - 1; i >= 0; i-- {
+ if (*s)[i] == n {
+ return i
+ }
+ }
+ return -1
+}
+
+// contains returns whether a is within s.
+func (s *nodeStack) contains(a atom.Atom) bool {
+ for _, n := range *s {
+ if n.DataAtom == a {
+ return true
+ }
+ }
+ return false
+}
+
+// insert inserts a node at the given index.
+func (s *nodeStack) insert(i int, n *Node) {
+ (*s) = append(*s, nil)
+ copy((*s)[i+1:], (*s)[i:])
+ (*s)[i] = n
+}
+
+// remove removes a node from the stack. It is a no-op if n is not present.
+func (s *nodeStack) remove(n *Node) {
+ i := s.index(n)
+ if i == -1 {
+ return
+ }
+ copy((*s)[i:], (*s)[i+1:])
+ j := len(*s) - 1
+ (*s)[j] = nil
+ *s = (*s)[:j]
+}
+
+type insertionModeStack []insertionMode
+
+func (s *insertionModeStack) pop() (im insertionMode) {
+ i := len(*s)
+ im = (*s)[i-1]
+ *s = (*s)[:i-1]
+ return im
+}
+
+func (s *insertionModeStack) top() insertionMode {
+ if i := len(*s); i > 0 {
+ return (*s)[i-1]
+ }
+ return nil
+}
diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go
new file mode 100644
index 000000000..64a579372
--- /dev/null
+++ b/vendor/golang.org/x/net/html/parse.go
@@ -0,0 +1,2311 @@
+// Copyright 2010 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 html
+
+import (
+ "errors"
+ "fmt"
+ "io"
+ "strings"
+
+ a "golang.org/x/net/html/atom"
+)
+
+// A parser implements the HTML5 parsing algorithm:
+// https://html.spec.whatwg.org/multipage/syntax.html#tree-construction
+type parser struct {
+ // tokenizer provides the tokens for the parser.
+ tokenizer *Tokenizer
+ // tok is the most recently read token.
+ tok Token
+ // Self-closing tags like <hr/> are treated as start tags, except that
+ // hasSelfClosingToken is set while they are being processed.
+ hasSelfClosingToken bool
+ // doc is the document root element.
+ doc *Node
+ // The stack of open elements (section 12.2.4.2) and active formatting
+ // elements (section 12.2.4.3).
+ oe, afe nodeStack
+ // Element pointers (section 12.2.4.4).
+ head, form *Node
+ // Other parsing state flags (section 12.2.4.5).
+ scripting, framesetOK bool
+ // The stack of template insertion modes
+ templateStack insertionModeStack
+ // im is the current insertion mode.
+ im insertionMode
+ // originalIM is the insertion mode to go back to after completing a text
+ // or inTableText insertion mode.
+ originalIM insertionMode
+ // fosterParenting is whether new elements should be inserted according to
+ // the foster parenting rules (section 12.2.6.1).
+ fosterParenting bool
+ // quirks is whether the parser is operating in "quirks mode."
+ quirks bool
+ // fragment is whether the parser is parsing an HTML fragment.
+ fragment bool
+ // context is the context element when parsing an HTML fragment
+ // (section 12.4).
+ context *Node
+}
+
+func (p *parser) top() *Node {
+ if n := p.oe.top(); n != nil {
+ return n
+ }
+ return p.doc
+}
+
+// Stop tags for use in popUntil. These come from section 12.2.4.2.
+var (
+ defaultScopeStopTags = map[string][]a.Atom{
+ "": {a.Applet, a.Caption, a.Html, a.Table, a.Td, a.Th, a.Marquee, a.Object, a.Template},
+ "math": {a.AnnotationXml, a.Mi, a.Mn, a.Mo, a.Ms, a.Mtext},
+ "svg": {a.Desc, a.ForeignObject, a.Title},
+ }
+)
+
+type scope int
+
+const (
+ defaultScope scope = iota
+ listItemScope
+ buttonScope
+ tableScope
+ tableRowScope
+ tableBodyScope
+ selectScope
+)
+
+// popUntil pops the stack of open elements at the highest element whose tag
+// is in matchTags, provided there is no higher element in the scope's stop
+// tags (as defined in section 12.2.4.2). It returns whether or not there was
+// such an element. If there was not, popUntil leaves the stack unchanged.
+//
+// For example, the set of stop tags for table scope is: "html", "table". If
+// the stack was:
+// ["html", "body", "font", "table", "b", "i", "u"]
+// then popUntil(tableScope, "font") would return false, but
+// popUntil(tableScope, "i") would return true and the stack would become:
+// ["html", "body", "font", "table", "b"]
+//
+// If an element's tag is in both the stop tags and matchTags, then the stack
+// will be popped and the function returns true (provided, of course, there was
+// no higher element in the stack that was also in the stop tags). For example,
+// popUntil(tableScope, "table") returns true and leaves:
+// ["html", "body", "font"]
+func (p *parser) popUntil(s scope, matchTags ...a.Atom) bool {
+ if i := p.indexOfElementInScope(s, matchTags...); i != -1 {
+ p.oe = p.oe[:i]
+ return true
+ }
+ return false
+}
+
+// indexOfElementInScope returns the index in p.oe of the highest element whose
+// tag is in matchTags that is in scope. If no matching element is in scope, it
+// returns -1.
+func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int {
+ for i := len(p.oe) - 1; i >= 0; i-- {
+ tagAtom := p.oe[i].DataAtom
+ if p.oe[i].Namespace == "" {
+ for _, t := range matchTags {
+ if t == tagAtom {
+ return i
+ }
+ }
+ switch s {
+ case defaultScope:
+ // No-op.
+ case listItemScope:
+ if tagAtom == a.Ol || tagAtom == a.Ul {
+ return -1
+ }
+ case buttonScope:
+ if tagAtom == a.Button {
+ return -1
+ }
+ case tableScope:
+ if tagAtom == a.Html || tagAtom == a.Table || tagAtom == a.Template {
+ return -1
+ }
+ case selectScope:
+ if tagAtom != a.Optgroup && tagAtom != a.Option {
+ return -1
+ }
+ default:
+ panic("unreachable")
+ }
+ }
+ switch s {
+ case defaultScope, listItemScope, buttonScope:
+ for _, t := range defaultScopeStopTags[p.oe[i].Namespace] {
+ if t == tagAtom {
+ return -1
+ }
+ }
+ }
+ }
+ return -1
+}
+
+// elementInScope is like popUntil, except that it doesn't modify the stack of
+// open elements.
+func (p *parser) elementInScope(s scope, matchTags ...a.Atom) bool {
+ return p.indexOfElementInScope(s, matchTags...) != -1
+}
+
+// clearStackToContext pops elements off the stack of open elements until a
+// scope-defined element is found.
+func (p *parser) clearStackToContext(s scope) {
+ for i := len(p.oe) - 1; i >= 0; i-- {
+ tagAtom := p.oe[i].DataAtom
+ switch s {
+ case tableScope:
+ if tagAtom == a.Html || tagAtom == a.Table || tagAtom == a.Template {
+ p.oe = p.oe[:i+1]
+ return
+ }
+ case tableRowScope:
+ if tagAtom == a.Html || tagAtom == a.Tr || tagAtom == a.Template {
+ p.oe = p.oe[:i+1]
+ return
+ }
+ case tableBodyScope:
+ if tagAtom == a.Html || tagAtom == a.Tbody || tagAtom == a.Tfoot || tagAtom == a.Thead || tagAtom == a.Template {
+ p.oe = p.oe[:i+1]
+ return
+ }
+ default:
+ panic("unreachable")
+ }
+ }
+}
+
+// generateImpliedEndTags pops nodes off the stack of open elements as long as
+// the top node has a tag name of dd, dt, li, optgroup, option, p, rb, rp, rt or rtc.
+// If exceptions are specified, nodes with that name will not be popped off.
+func (p *parser) generateImpliedEndTags(exceptions ...string) {
+ var i int
+loop:
+ for i = len(p.oe) - 1; i >= 0; i-- {
+ n := p.oe[i]
+ if n.Type == ElementNode {
+ switch n.DataAtom {
+ case a.Dd, a.Dt, a.Li, a.Optgroup, a.Option, a.P, a.Rb, a.Rp, a.Rt, a.Rtc:
+ for _, except := range exceptions {
+ if n.Data == except {
+ break loop
+ }
+ }
+ continue
+ }
+ }
+ break
+ }
+
+ p.oe = p.oe[:i+1]
+}
+
+// addChild adds a child node n to the top element, and pushes n onto the stack
+// of open elements if it is an element node.
+func (p *parser) addChild(n *Node) {
+ if p.shouldFosterParent() {
+ p.fosterParent(n)
+ } else {
+ p.top().AppendChild(n)
+ }
+
+ if n.Type == ElementNode {
+ p.oe = append(p.oe, n)
+ }
+}
+
+// shouldFosterParent returns whether the next node to be added should be
+// foster parented.
+func (p *parser) shouldFosterParent() bool {
+ if p.fosterParenting {
+ switch p.top().DataAtom {
+ case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+ return true
+ }
+ }
+ return false
+}
+
+// fosterParent adds a child node according to the foster parenting rules.
+// Section 12.2.6.1, "foster parenting".
+func (p *parser) fosterParent(n *Node) {
+ var table, parent, prev, template *Node
+ var i int
+ for i = len(p.oe) - 1; i >= 0; i-- {
+ if p.oe[i].DataAtom == a.Table {
+ table = p.oe[i]
+ break
+ }
+ }
+
+ var j int
+ for j = len(p.oe) - 1; j >= 0; j-- {
+ if p.oe[j].DataAtom == a.Template {
+ template = p.oe[j]
+ break
+ }
+ }
+
+ if template != nil && (table == nil || j > i) {
+ template.AppendChild(n)
+ return
+ }
+
+ if table == nil {
+ // The foster parent is the html element.
+ parent = p.oe[0]
+ } else {
+ parent = table.Parent
+ }
+ if parent == nil {
+ parent = p.oe[i-1]
+ }
+
+ if table != nil {
+ prev = table.PrevSibling
+ } else {
+ prev = parent.LastChild
+ }
+ if prev != nil && prev.Type == TextNode && n.Type == TextNode {
+ prev.Data += n.Data
+ return
+ }
+
+ parent.InsertBefore(n, table)
+}
+
+// addText adds text to the preceding node if it is a text node, or else it
+// calls addChild with a new text node.
+func (p *parser) addText(text string) {
+ if text == "" {
+ return
+ }
+
+ if p.shouldFosterParent() {
+ p.fosterParent(&Node{
+ Type: TextNode,
+ Data: text,
+ })
+ return
+ }
+
+ t := p.top()
+ if n := t.LastChild; n != nil && n.Type == TextNode {
+ n.Data += text
+ return
+ }
+ p.addChild(&Node{
+ Type: TextNode,
+ Data: text,
+ })
+}
+
+// addElement adds a child element based on the current token.
+func (p *parser) addElement() {
+ p.addChild(&Node{
+ Type: ElementNode,
+ DataAtom: p.tok.DataAtom,
+ Data: p.tok.Data,
+ Attr: p.tok.Attr,
+ })
+}
+
+// Section 12.2.4.3.
+func (p *parser) addFormattingElement() {
+ tagAtom, attr := p.tok.DataAtom, p.tok.Attr
+ p.addElement()
+
+ // Implement the Noah's Ark clause, but with three per family instead of two.
+ identicalElements := 0
+findIdenticalElements:
+ for i := len(p.afe) - 1; i >= 0; i-- {
+ n := p.afe[i]
+ if n.Type == scopeMarkerNode {
+ break
+ }
+ if n.Type != ElementNode {
+ continue
+ }
+ if n.Namespace != "" {
+ continue
+ }
+ if n.DataAtom != tagAtom {
+ continue
+ }
+ if len(n.Attr) != len(attr) {
+ continue
+ }
+ compareAttributes:
+ for _, t0 := range n.Attr {
+ for _, t1 := range attr {
+ if t0.Key == t1.Key && t0.Namespace == t1.Namespace && t0.Val == t1.Val {
+ // Found a match for this attribute, continue with the next attribute.
+ continue compareAttributes
+ }
+ }
+ // If we get here, there is no attribute that matches a.
+ // Therefore the element is not identical to the new one.
+ continue findIdenticalElements
+ }
+
+ identicalElements++
+ if identicalElements >= 3 {
+ p.afe.remove(n)
+ }
+ }
+
+ p.afe = append(p.afe, p.top())
+}
+
+// Section 12.2.4.3.
+func (p *parser) clearActiveFormattingElements() {
+ for {
+ n := p.afe.pop()
+ if len(p.afe) == 0 || n.Type == scopeMarkerNode {
+ return
+ }
+ }
+}
+
+// Section 12.2.4.3.
+func (p *parser) reconstructActiveFormattingElements() {
+ n := p.afe.top()
+ if n == nil {
+ return
+ }
+ if n.Type == scopeMarkerNode || p.oe.index(n) != -1 {
+ return
+ }
+ i := len(p.afe) - 1
+ for n.Type != scopeMarkerNode && p.oe.index(n) == -1 {
+ if i == 0 {
+ i = -1
+ break
+ }
+ i--
+ n = p.afe[i]
+ }
+ for {
+ i++
+ clone := p.afe[i].clone()
+ p.addChild(clone)
+ p.afe[i] = clone
+ if i == len(p.afe)-1 {
+ break
+ }
+ }
+}
+
+// Section 12.2.5.
+func (p *parser) acknowledgeSelfClosingTag() {
+ p.hasSelfClosingToken = false
+}
+
+// An insertion mode (section 12.2.4.1) is the state transition function from
+// a particular state in the HTML5 parser's state machine. It updates the
+// parser's fields depending on parser.tok (where ErrorToken means EOF).
+// It returns whether the token was consumed.
+type insertionMode func(*parser) bool
+
+// setOriginalIM sets the insertion mode to return to after completing a text or
+// inTableText insertion mode.
+// Section 12.2.4.1, "using the rules for".
+func (p *parser) setOriginalIM() {
+ if p.originalIM != nil {
+ panic("html: bad parser state: originalIM was set twice")
+ }
+ p.originalIM = p.im
+}
+
+// Section 12.2.4.1, "reset the insertion mode".
+func (p *parser) resetInsertionMode() {
+ for i := len(p.oe) - 1; i >= 0; i-- {
+ n := p.oe[i]
+ last := i == 0
+ if last && p.context != nil {
+ n = p.context
+ }
+
+ switch n.DataAtom {
+ case a.Select:
+ if !last {
+ for ancestor, first := n, p.oe[0]; ancestor != first; {
+ if ancestor == first {
+ break
+ }
+ ancestor = p.oe[p.oe.index(ancestor)-1]
+ switch ancestor.DataAtom {
+ case a.Template:
+ p.im = inSelectIM
+ return
+ case a.Table:
+ p.im = inSelectInTableIM
+ return
+ }
+ }
+ }
+ p.im = inSelectIM
+ case a.Td, a.Th:
+ // TODO: remove this divergence from the HTML5 spec.
+ //
+ // See https://bugs.chromium.org/p/chromium/issues/detail?id=829668
+ p.im = inCellIM
+ case a.Tr:
+ p.im = inRowIM
+ case a.Tbody, a.Thead, a.Tfoot:
+ p.im = inTableBodyIM
+ case a.Caption:
+ p.im = inCaptionIM
+ case a.Colgroup:
+ p.im = inColumnGroupIM
+ case a.Table:
+ p.im = inTableIM
+ case a.Template:
+ // TODO: remove this divergence from the HTML5 spec.
+ if n.Namespace != "" {
+ continue
+ }
+ p.im = p.templateStack.top()
+ case a.Head:
+ // TODO: remove this divergence from the HTML5 spec.
+ //
+ // See https://bugs.chromium.org/p/chromium/issues/detail?id=829668
+ p.im = inHeadIM
+ case a.Body:
+ p.im = inBodyIM
+ case a.Frameset:
+ p.im = inFramesetIM
+ case a.Html:
+ if p.head == nil {
+ p.im = beforeHeadIM
+ } else {
+ p.im = afterHeadIM
+ }
+ default:
+ if last {
+ p.im = inBodyIM
+ return
+ }
+ continue
+ }
+ return
+ }
+}
+
+const whitespace = " \t\r\n\f"
+
+// Section 12.2.6.4.1.
+func initialIM(p *parser) bool {
+ switch p.tok.Type {
+ case TextToken:
+ p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)
+ if len(p.tok.Data) == 0 {
+ // It was all whitespace, so ignore it.
+ return true
+ }
+ case CommentToken:
+ p.doc.AppendChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ return true
+ case DoctypeToken:
+ n, quirks := parseDoctype(p.tok.Data)
+ p.doc.AppendChild(n)
+ p.quirks = quirks
+ p.im = beforeHTMLIM
+ return true
+ }
+ p.quirks = true
+ p.im = beforeHTMLIM
+ return false
+}
+
+// Section 12.2.6.4.2.
+func beforeHTMLIM(p *parser) bool {
+ switch p.tok.Type {
+ case DoctypeToken:
+ // Ignore the token.
+ return true
+ case TextToken:
+ p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)
+ if len(p.tok.Data) == 0 {
+ // It was all whitespace, so ignore it.
+ return true
+ }
+ case StartTagToken:
+ if p.tok.DataAtom == a.Html {
+ p.addElement()
+ p.im = beforeHeadIM
+ return true
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Head, a.Body, a.Html, a.Br:
+ p.parseImpliedToken(StartTagToken, a.Html, a.Html.String())
+ return false
+ default:
+ // Ignore the token.
+ return true
+ }
+ case CommentToken:
+ p.doc.AppendChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ return true
+ }
+ p.parseImpliedToken(StartTagToken, a.Html, a.Html.String())
+ return false
+}
+
+// Section 12.2.6.4.3.
+func beforeHeadIM(p *parser) bool {
+ switch p.tok.Type {
+ case TextToken:
+ p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)
+ if len(p.tok.Data) == 0 {
+ // It was all whitespace, so ignore it.
+ return true
+ }
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Head:
+ p.addElement()
+ p.head = p.top()
+ p.im = inHeadIM
+ return true
+ case a.Html:
+ return inBodyIM(p)
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Head, a.Body, a.Html, a.Br:
+ p.parseImpliedToken(StartTagToken, a.Head, a.Head.String())
+ return false
+ default:
+ // Ignore the token.
+ return true
+ }
+ case CommentToken:
+ p.addChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ return true
+ case DoctypeToken:
+ // Ignore the token.
+ return true
+ }
+
+ p.parseImpliedToken(StartTagToken, a.Head, a.Head.String())
+ return false
+}
+
+// Section 12.2.6.4.4.
+func inHeadIM(p *parser) bool {
+ switch p.tok.Type {
+ case TextToken:
+ s := strings.TrimLeft(p.tok.Data, whitespace)
+ if len(s) < len(p.tok.Data) {
+ // Add the initial whitespace to the current node.
+ p.addText(p.tok.Data[:len(p.tok.Data)-len(s)])
+ if s == "" {
+ return true
+ }
+ p.tok.Data = s
+ }
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Html:
+ return inBodyIM(p)
+ case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta:
+ p.addElement()
+ p.oe.pop()
+ p.acknowledgeSelfClosingTag()
+ return true
+ case a.Script, a.Title, a.Noscript, a.Noframes, a.Style:
+ p.addElement()
+ p.setOriginalIM()
+ p.im = textIM
+ return true
+ case a.Head:
+ // Ignore the token.
+ return true
+ case a.Template:
+ p.addElement()
+ p.afe = append(p.afe, &scopeMarker)
+ p.framesetOK = false
+ p.im = inTemplateIM
+ p.templateStack = append(p.templateStack, inTemplateIM)
+ return true
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Head:
+ p.oe.pop()
+ p.im = afterHeadIM
+ return true
+ case a.Body, a.Html, a.Br:
+ p.parseImpliedToken(EndTagToken, a.Head, a.Head.String())
+ return false
+ case a.Template:
+ if !p.oe.contains(a.Template) {
+ return true
+ }
+ // TODO: remove this divergence from the HTML5 spec.
+ //
+ // See https://bugs.chromium.org/p/chromium/issues/detail?id=829668
+ p.generateImpliedEndTags()
+ for i := len(p.oe) - 1; i >= 0; i-- {
+ if n := p.oe[i]; n.Namespace == "" && n.DataAtom == a.Template {
+ p.oe = p.oe[:i]
+ break
+ }
+ }
+ p.clearActiveFormattingElements()
+ p.templateStack.pop()
+ p.resetInsertionMode()
+ return true
+ default:
+ // Ignore the token.
+ return true
+ }
+ case CommentToken:
+ p.addChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ return true
+ case DoctypeToken:
+ // Ignore the token.
+ return true
+ }
+
+ p.parseImpliedToken(EndTagToken, a.Head, a.Head.String())
+ return false
+}
+
+// Section 12.2.6.4.6.
+func afterHeadIM(p *parser) bool {
+ switch p.tok.Type {
+ case TextToken:
+ s := strings.TrimLeft(p.tok.Data, whitespace)
+ if len(s) < len(p.tok.Data) {
+ // Add the initial whitespace to the current node.
+ p.addText(p.tok.Data[:len(p.tok.Data)-len(s)])
+ if s == "" {
+ return true
+ }
+ p.tok.Data = s
+ }
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Html:
+ return inBodyIM(p)
+ case a.Body:
+ p.addElement()
+ p.framesetOK = false
+ p.im = inBodyIM
+ return true
+ case a.Frameset:
+ p.addElement()
+ p.im = inFramesetIM
+ return true
+ case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title:
+ p.oe = append(p.oe, p.head)
+ defer p.oe.remove(p.head)
+ return inHeadIM(p)
+ case a.Head:
+ // Ignore the token.
+ return true
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Body, a.Html, a.Br:
+ // Drop down to creating an implied <body> tag.
+ case a.Template:
+ return inHeadIM(p)
+ default:
+ // Ignore the token.
+ return true
+ }
+ case CommentToken:
+ p.addChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ return true
+ case DoctypeToken:
+ // Ignore the token.
+ return true
+ }
+
+ p.parseImpliedToken(StartTagToken, a.Body, a.Body.String())
+ p.framesetOK = true
+ return false
+}
+
+// copyAttributes copies attributes of src not found on dst to dst.
+func copyAttributes(dst *Node, src Token) {
+ if len(src.Attr) == 0 {
+ return
+ }
+ attr := map[string]string{}
+ for _, t := range dst.Attr {
+ attr[t.Key] = t.Val
+ }
+ for _, t := range src.Attr {
+ if _, ok := attr[t.Key]; !ok {
+ dst.Attr = append(dst.Attr, t)
+ attr[t.Key] = t.Val
+ }
+ }
+}
+
+// Section 12.2.6.4.7.
+func inBodyIM(p *parser) bool {
+ switch p.tok.Type {
+ case TextToken:
+ d := p.tok.Data
+ switch n := p.oe.top(); n.DataAtom {
+ case a.Pre, a.Listing:
+ if n.FirstChild == nil {
+ // Ignore a newline at the start of a <pre> block.
+ if d != "" && d[0] == '\r' {
+ d = d[1:]
+ }
+ if d != "" && d[0] == '\n' {
+ d = d[1:]
+ }
+ }
+ }
+ d = strings.Replace(d, "\x00", "", -1)
+ if d == "" {
+ return true
+ }
+ p.reconstructActiveFormattingElements()
+ p.addText(d)
+ if p.framesetOK && strings.TrimLeft(d, whitespace) != "" {
+ // There were non-whitespace characters inserted.
+ p.framesetOK = false
+ }
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Html:
+ if p.oe.contains(a.Template) {
+ return true
+ }
+ copyAttributes(p.oe[0], p.tok)
+ case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title:
+ return inHeadIM(p)
+ case a.Body:
+ if p.oe.contains(a.Template) {
+ return true
+ }
+ if len(p.oe) >= 2 {
+ body := p.oe[1]
+ if body.Type == ElementNode && body.DataAtom == a.Body {
+ p.framesetOK = false
+ copyAttributes(body, p.tok)
+ }
+ }
+ case a.Frameset:
+ if !p.framesetOK || len(p.oe) < 2 || p.oe[1].DataAtom != a.Body {
+ // Ignore the token.
+ return true
+ }
+ body := p.oe[1]
+ if body.Parent != nil {
+ body.Parent.RemoveChild(body)
+ }
+ p.oe = p.oe[:1]
+ p.addElement()
+ p.im = inFramesetIM
+ return true
+ case a.Address, a.Article, a.Aside, a.Blockquote, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Menu, a.Nav, a.Ol, a.P, a.Section, a.Summary, a.Ul:
+ p.popUntil(buttonScope, a.P)
+ p.addElement()
+ case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
+ p.popUntil(buttonScope, a.P)
+ switch n := p.top(); n.DataAtom {
+ case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
+ p.oe.pop()
+ }
+ p.addElement()
+ case a.Pre, a.Listing:
+ p.popUntil(buttonScope, a.P)
+ p.addElement()
+ // The newline, if any, will be dealt with by the TextToken case.
+ p.framesetOK = false
+ case a.Form:
+ if p.form != nil && !p.oe.contains(a.Template) {
+ // Ignore the token
+ return true
+ }
+ p.popUntil(buttonScope, a.P)
+ p.addElement()
+ if !p.oe.contains(a.Template) {
+ p.form = p.top()
+ }
+ case a.Li:
+ p.framesetOK = false
+ for i := len(p.oe) - 1; i >= 0; i-- {
+ node := p.oe[i]
+ switch node.DataAtom {
+ case a.Li:
+ p.oe = p.oe[:i]
+ case a.Address, a.Div, a.P:
+ continue
+ default:
+ if !isSpecialElement(node) {
+ continue
+ }
+ }
+ break
+ }
+ p.popUntil(buttonScope, a.P)
+ p.addElement()
+ case a.Dd, a.Dt:
+ p.framesetOK = false
+ for i := len(p.oe) - 1; i >= 0; i-- {
+ node := p.oe[i]
+ switch node.DataAtom {
+ case a.Dd, a.Dt:
+ p.oe = p.oe[:i]
+ case a.Address, a.Div, a.P:
+ continue
+ default:
+ if !isSpecialElement(node) {
+ continue
+ }
+ }
+ break
+ }
+ p.popUntil(buttonScope, a.P)
+ p.addElement()
+ case a.Plaintext:
+ p.popUntil(buttonScope, a.P)
+ p.addElement()
+ case a.Button:
+ p.popUntil(defaultScope, a.Button)
+ p.reconstructActiveFormattingElements()
+ p.addElement()
+ p.framesetOK = false
+ case a.A:
+ for i := len(p.afe) - 1; i >= 0 && p.afe[i].Type != scopeMarkerNode; i-- {
+ if n := p.afe[i]; n.Type == ElementNode && n.DataAtom == a.A {
+ p.inBodyEndTagFormatting(a.A)
+ p.oe.remove(n)
+ p.afe.remove(n)
+ break
+ }
+ }
+ p.reconstructActiveFormattingElements()
+ p.addFormattingElement()
+ case a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U:
+ p.reconstructActiveFormattingElements()
+ p.addFormattingElement()
+ case a.Nobr:
+ p.reconstructActiveFormattingElements()
+ if p.elementInScope(defaultScope, a.Nobr) {
+ p.inBodyEndTagFormatting(a.Nobr)
+ p.reconstructActiveFormattingElements()
+ }
+ p.addFormattingElement()
+ case a.Applet, a.Marquee, a.Object:
+ p.reconstructActiveFormattingElements()
+ p.addElement()
+ p.afe = append(p.afe, &scopeMarker)
+ p.framesetOK = false
+ case a.Table:
+ if !p.quirks {
+ p.popUntil(buttonScope, a.P)
+ }
+ p.addElement()
+ p.framesetOK = false
+ p.im = inTableIM
+ return true
+ case a.Area, a.Br, a.Embed, a.Img, a.Input, a.Keygen, a.Wbr:
+ p.reconstructActiveFormattingElements()
+ p.addElement()
+ p.oe.pop()
+ p.acknowledgeSelfClosingTag()
+ if p.tok.DataAtom == a.Input {
+ for _, t := range p.tok.Attr {
+ if t.Key == "type" {
+ if strings.ToLower(t.Val) == "hidden" {
+ // Skip setting framesetOK = false
+ return true
+ }
+ }
+ }
+ }
+ p.framesetOK = false
+ case a.Param, a.Source, a.Track:
+ p.addElement()
+ p.oe.pop()
+ p.acknowledgeSelfClosingTag()
+ case a.Hr:
+ p.popUntil(buttonScope, a.P)
+ p.addElement()
+ p.oe.pop()
+ p.acknowledgeSelfClosingTag()
+ p.framesetOK = false
+ case a.Image:
+ p.tok.DataAtom = a.Img
+ p.tok.Data = a.Img.String()
+ return false
+ case a.Isindex:
+ if p.form != nil {
+ // Ignore the token.
+ return true
+ }
+ action := ""
+ prompt := "This is a searchable index. Enter search keywords: "
+ attr := []Attribute{{Key: "name", Val: "isindex"}}
+ for _, t := range p.tok.Attr {
+ switch t.Key {
+ case "action":
+ action = t.Val
+ case "name":
+ // Ignore the attribute.
+ case "prompt":
+ prompt = t.Val
+ default:
+ attr = append(attr, t)
+ }
+ }
+ p.acknowledgeSelfClosingTag()
+ p.popUntil(buttonScope, a.P)
+ p.parseImpliedToken(StartTagToken, a.Form, a.Form.String())
+ if p.form == nil {
+ // NOTE: The 'isindex' element has been removed,
+ // and the 'template' element has not been designed to be
+ // collaborative with the index element.
+ //
+ // Ignore the token.
+ return true
+ }
+ if action != "" {
+ p.form.Attr = []Attribute{{Key: "action", Val: action}}
+ }
+ p.parseImpliedToken(StartTagToken, a.Hr, a.Hr.String())
+ p.parseImpliedToken(StartTagToken, a.Label, a.Label.String())
+ p.addText(prompt)
+ p.addChild(&Node{
+ Type: ElementNode,
+ DataAtom: a.Input,
+ Data: a.Input.String(),
+ Attr: attr,
+ })
+ p.oe.pop()
+ p.parseImpliedToken(EndTagToken, a.Label, a.Label.String())
+ p.parseImpliedToken(StartTagToken, a.Hr, a.Hr.String())
+ p.parseImpliedToken(EndTagToken, a.Form, a.Form.String())
+ case a.Textarea:
+ p.addElement()
+ p.setOriginalIM()
+ p.framesetOK = false
+ p.im = textIM
+ case a.Xmp:
+ p.popUntil(buttonScope, a.P)
+ p.reconstructActiveFormattingElements()
+ p.framesetOK = false
+ p.addElement()
+ p.setOriginalIM()
+ p.im = textIM
+ case a.Iframe:
+ p.framesetOK = false
+ p.addElement()
+ p.setOriginalIM()
+ p.im = textIM
+ case a.Noembed, a.Noscript:
+ p.addElement()
+ p.setOriginalIM()
+ p.im = textIM
+ case a.Select:
+ p.reconstructActiveFormattingElements()
+ p.addElement()
+ p.framesetOK = false
+ p.im = inSelectIM
+ return true
+ case a.Optgroup, a.Option:
+ if p.top().DataAtom == a.Option {
+ p.oe.pop()
+ }
+ p.reconstructActiveFormattingElements()
+ p.addElement()
+ case a.Rb, a.Rtc:
+ if p.elementInScope(defaultScope, a.Ruby) {
+ p.generateImpliedEndTags()
+ }
+ p.addElement()
+ case a.Rp, a.Rt:
+ if p.elementInScope(defaultScope, a.Ruby) {
+ p.generateImpliedEndTags("rtc")
+ }
+ p.addElement()
+ case a.Math, a.Svg:
+ p.reconstructActiveFormattingElements()
+ if p.tok.DataAtom == a.Math {
+ adjustAttributeNames(p.tok.Attr, mathMLAttributeAdjustments)
+ } else {
+ adjustAttributeNames(p.tok.Attr, svgAttributeAdjustments)
+ }
+ adjustForeignAttributes(p.tok.Attr)
+ p.addElement()
+ p.top().Namespace = p.tok.Data
+ if p.hasSelfClosingToken {
+ p.oe.pop()
+ p.acknowledgeSelfClosingTag()
+ }
+ return true
+ case a.Caption, a.Col, a.Colgroup, a.Frame, a.Head, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
+ // Ignore the token.
+ default:
+ p.reconstructActiveFormattingElements()
+ p.addElement()
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Body:
+ if p.elementInScope(defaultScope, a.Body) {
+ p.im = afterBodyIM
+ }
+ case a.Html:
+ if p.elementInScope(defaultScope, a.Body) {
+ p.parseImpliedToken(EndTagToken, a.Body, a.Body.String())
+ return false
+ }
+ return true
+ case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Menu, a.Nav, a.Ol, a.Pre, a.Section, a.Summary, a.Ul:
+ p.popUntil(defaultScope, p.tok.DataAtom)
+ case a.Form:
+ if p.oe.contains(a.Template) {
+ i := p.indexOfElementInScope(defaultScope, a.Form)
+ if i == -1 {
+ // Ignore the token.
+ return true
+ }
+ p.generateImpliedEndTags()
+ if p.oe[i].DataAtom != a.Form {
+ // Ignore the token.
+ return true
+ }
+ p.popUntil(defaultScope, a.Form)
+ } else {
+ node := p.form
+ p.form = nil
+ i := p.indexOfElementInScope(defaultScope, a.Form)
+ if node == nil || i == -1 || p.oe[i] != node {
+ // Ignore the token.
+ return true
+ }
+ p.generateImpliedEndTags()
+ p.oe.remove(node)
+ }
+ case a.P:
+ if !p.elementInScope(buttonScope, a.P) {
+ p.parseImpliedToken(StartTagToken, a.P, a.P.String())
+ }
+ p.popUntil(buttonScope, a.P)
+ case a.Li:
+ p.popUntil(listItemScope, a.Li)
+ case a.Dd, a.Dt:
+ p.popUntil(defaultScope, p.tok.DataAtom)
+ case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:
+ p.popUntil(defaultScope, a.H1, a.H2, a.H3, a.H4, a.H5, a.H6)
+ case a.A, a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.Nobr, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U:
+ p.inBodyEndTagFormatting(p.tok.DataAtom)
+ case a.Applet, a.Marquee, a.Object:
+ if p.popUntil(defaultScope, p.tok.DataAtom) {
+ p.clearActiveFormattingElements()
+ }
+ case a.Br:
+ p.tok.Type = StartTagToken
+ return false
+ case a.Template:
+ return inHeadIM(p)
+ default:
+ p.inBodyEndTagOther(p.tok.DataAtom)
+ }
+ case CommentToken:
+ p.addChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ case ErrorToken:
+ // TODO: remove this divergence from the HTML5 spec.
+ if len(p.templateStack) > 0 {
+ p.im = inTemplateIM
+ return false
+ } else {
+ for _, e := range p.oe {
+ switch e.DataAtom {
+ case a.Dd, a.Dt, a.Li, a.Optgroup, a.Option, a.P, a.Rb, a.Rp, a.Rt, a.Rtc, a.Tbody, a.Td, a.Tfoot, a.Th,
+ a.Thead, a.Tr, a.Body, a.Html:
+ default:
+ return true
+ }
+ }
+ }
+ }
+
+ return true
+}
+
+func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom) {
+ // This is the "adoption agency" algorithm, described at
+ // https://html.spec.whatwg.org/multipage/syntax.html#adoptionAgency
+
+ // TODO: this is a fairly literal line-by-line translation of that algorithm.
+ // Once the code successfully parses the comprehensive test suite, we should
+ // refactor this code to be more idiomatic.
+
+ // Steps 1-4. The outer loop.
+ for i := 0; i < 8; i++ {
+ // Step 5. Find the formatting element.
+ var formattingElement *Node
+ for j := len(p.afe) - 1; j >= 0; j-- {
+ if p.afe[j].Type == scopeMarkerNode {
+ break
+ }
+ if p.afe[j].DataAtom == tagAtom {
+ formattingElement = p.afe[j]
+ break
+ }
+ }
+ if formattingElement == nil {
+ p.inBodyEndTagOther(tagAtom)
+ return
+ }
+ feIndex := p.oe.index(formattingElement)
+ if feIndex == -1 {
+ p.afe.remove(formattingElement)
+ return
+ }
+ if !p.elementInScope(defaultScope, tagAtom) {
+ // Ignore the tag.
+ return
+ }
+
+ // Steps 9-10. Find the furthest block.
+ var furthestBlock *Node
+ for _, e := range p.oe[feIndex:] {
+ if isSpecialElement(e) {
+ furthestBlock = e
+ break
+ }
+ }
+ if furthestBlock == nil {
+ e := p.oe.pop()
+ for e != formattingElement {
+ e = p.oe.pop()
+ }
+ p.afe.remove(e)
+ return
+ }
+
+ // Steps 11-12. Find the common ancestor and bookmark node.
+ commonAncestor := p.oe[feIndex-1]
+ bookmark := p.afe.index(formattingElement)
+
+ // Step 13. The inner loop. Find the lastNode to reparent.
+ lastNode := furthestBlock
+ node := furthestBlock
+ x := p.oe.index(node)
+ // Steps 13.1-13.2
+ for j := 0; j < 3; j++ {
+ // Step 13.3.
+ x--
+ node = p.oe[x]
+ // Step 13.4 - 13.5.
+ if p.afe.index(node) == -1 {
+ p.oe.remove(node)
+ continue
+ }
+ // Step 13.6.
+ if node == formattingElement {
+ break
+ }
+ // Step 13.7.
+ clone := node.clone()
+ p.afe[p.afe.index(node)] = clone
+ p.oe[p.oe.index(node)] = clone
+ node = clone
+ // Step 13.8.
+ if lastNode == furthestBlock {
+ bookmark = p.afe.index(node) + 1
+ }
+ // Step 13.9.
+ if lastNode.Parent != nil {
+ lastNode.Parent.RemoveChild(lastNode)
+ }
+ node.AppendChild(lastNode)
+ // Step 13.10.
+ lastNode = node
+ }
+
+ // Step 14. Reparent lastNode to the common ancestor,
+ // or for misnested table nodes, to the foster parent.
+ if lastNode.Parent != nil {
+ lastNode.Parent.RemoveChild(lastNode)
+ }
+ switch commonAncestor.DataAtom {
+ case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+ p.fosterParent(lastNode)
+ default:
+ commonAncestor.AppendChild(lastNode)
+ }
+
+ // Steps 15-17. Reparent nodes from the furthest block's children
+ // to a clone of the formatting element.
+ clone := formattingElement.clone()
+ reparentChildren(clone, furthestBlock)
+ furthestBlock.AppendChild(clone)
+
+ // Step 18. Fix up the list of active formatting elements.
+ if oldLoc := p.afe.index(formattingElement); oldLoc != -1 && oldLoc < bookmark {
+ // Move the bookmark with the rest of the list.
+ bookmark--
+ }
+ p.afe.remove(formattingElement)
+ p.afe.insert(bookmark, clone)
+
+ // Step 19. Fix up the stack of open elements.
+ p.oe.remove(formattingElement)
+ p.oe.insert(p.oe.index(furthestBlock)+1, clone)
+ }
+}
+
+// inBodyEndTagOther performs the "any other end tag" algorithm for inBodyIM.
+// "Any other end tag" handling from 12.2.6.5 The rules for parsing tokens in foreign content
+// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inforeign
+func (p *parser) inBodyEndTagOther(tagAtom a.Atom) {
+ for i := len(p.oe) - 1; i >= 0; i-- {
+ if p.oe[i].DataAtom == tagAtom {
+ p.oe = p.oe[:i]
+ break
+ }
+ if isSpecialElement(p.oe[i]) {
+ break
+ }
+ }
+}
+
+// Section 12.2.6.4.8.
+func textIM(p *parser) bool {
+ switch p.tok.Type {
+ case ErrorToken:
+ p.oe.pop()
+ case TextToken:
+ d := p.tok.Data
+ if n := p.oe.top(); n.DataAtom == a.Textarea && n.FirstChild == nil {
+ // Ignore a newline at the start of a <textarea> block.
+ if d != "" && d[0] == '\r' {
+ d = d[1:]
+ }
+ if d != "" && d[0] == '\n' {
+ d = d[1:]
+ }
+ }
+ if d == "" {
+ return true
+ }
+ p.addText(d)
+ return true
+ case EndTagToken:
+ p.oe.pop()
+ }
+ p.im = p.originalIM
+ p.originalIM = nil
+ return p.tok.Type == EndTagToken
+}
+
+// Section 12.2.6.4.9.
+func inTableIM(p *parser) bool {
+ switch p.tok.Type {
+ case TextToken:
+ p.tok.Data = strings.Replace(p.tok.Data, "\x00", "", -1)
+ switch p.oe.top().DataAtom {
+ case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+ if strings.Trim(p.tok.Data, whitespace) == "" {
+ p.addText(p.tok.Data)
+ return true
+ }
+ }
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Caption:
+ p.clearStackToContext(tableScope)
+ p.afe = append(p.afe, &scopeMarker)
+ p.addElement()
+ p.im = inCaptionIM
+ return true
+ case a.Colgroup:
+ p.clearStackToContext(tableScope)
+ p.addElement()
+ p.im = inColumnGroupIM
+ return true
+ case a.Col:
+ p.parseImpliedToken(StartTagToken, a.Colgroup, a.Colgroup.String())
+ return false
+ case a.Tbody, a.Tfoot, a.Thead:
+ p.clearStackToContext(tableScope)
+ p.addElement()
+ p.im = inTableBodyIM
+ return true
+ case a.Td, a.Th, a.Tr:
+ p.parseImpliedToken(StartTagToken, a.Tbody, a.Tbody.String())
+ return false
+ case a.Table:
+ if p.popUntil(tableScope, a.Table) {
+ p.resetInsertionMode()
+ return false
+ }
+ // Ignore the token.
+ return true
+ case a.Style, a.Script, a.Template:
+ return inHeadIM(p)
+ case a.Input:
+ for _, t := range p.tok.Attr {
+ if t.Key == "type" && strings.ToLower(t.Val) == "hidden" {
+ p.addElement()
+ p.oe.pop()
+ return true
+ }
+ }
+ // Otherwise drop down to the default action.
+ case a.Form:
+ if p.oe.contains(a.Template) || p.form != nil {
+ // Ignore the token.
+ return true
+ }
+ p.addElement()
+ p.form = p.oe.pop()
+ case a.Select:
+ p.reconstructActiveFormattingElements()
+ switch p.top().DataAtom {
+ case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+ p.fosterParenting = true
+ }
+ p.addElement()
+ p.fosterParenting = false
+ p.framesetOK = false
+ p.im = inSelectInTableIM
+ return true
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Table:
+ if p.popUntil(tableScope, a.Table) {
+ p.resetInsertionMode()
+ return true
+ }
+ // Ignore the token.
+ return true
+ case a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
+ // Ignore the token.
+ return true
+ case a.Template:
+ return inHeadIM(p)
+ }
+ case CommentToken:
+ p.addChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ return true
+ case DoctypeToken:
+ // Ignore the token.
+ return true
+ case ErrorToken:
+ return inBodyIM(p)
+ }
+
+ p.fosterParenting = true
+ defer func() { p.fosterParenting = false }()
+
+ return inBodyIM(p)
+}
+
+// Section 12.2.6.4.11.
+func inCaptionIM(p *parser) bool {
+ switch p.tok.Type {
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Td, a.Tfoot, a.Thead, a.Tr:
+ if p.popUntil(tableScope, a.Caption) {
+ p.clearActiveFormattingElements()
+ p.im = inTableIM
+ return false
+ } else {
+ // Ignore the token.
+ return true
+ }
+ case a.Select:
+ p.reconstructActiveFormattingElements()
+ p.addElement()
+ p.framesetOK = false
+ p.im = inSelectInTableIM
+ return true
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Caption:
+ if p.popUntil(tableScope, a.Caption) {
+ p.clearActiveFormattingElements()
+ p.im = inTableIM
+ }
+ return true
+ case a.Table:
+ if p.popUntil(tableScope, a.Caption) {
+ p.clearActiveFormattingElements()
+ p.im = inTableIM
+ return false
+ } else {
+ // Ignore the token.
+ return true
+ }
+ case a.Body, a.Col, a.Colgroup, a.Html, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
+ // Ignore the token.
+ return true
+ }
+ }
+ return inBodyIM(p)
+}
+
+// Section 12.2.6.4.12.
+func inColumnGroupIM(p *parser) bool {
+ switch p.tok.Type {
+ case TextToken:
+ s := strings.TrimLeft(p.tok.Data, whitespace)
+ if len(s) < len(p.tok.Data) {
+ // Add the initial whitespace to the current node.
+ p.addText(p.tok.Data[:len(p.tok.Data)-len(s)])
+ if s == "" {
+ return true
+ }
+ p.tok.Data = s
+ }
+ case CommentToken:
+ p.addChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ return true
+ case DoctypeToken:
+ // Ignore the token.
+ return true
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Html:
+ return inBodyIM(p)
+ case a.Col:
+ p.addElement()
+ p.oe.pop()
+ p.acknowledgeSelfClosingTag()
+ return true
+ case a.Template:
+ return inHeadIM(p)
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Colgroup:
+ if p.oe.top().DataAtom == a.Colgroup {
+ p.oe.pop()
+ p.im = inTableIM
+ }
+ return true
+ case a.Col:
+ // Ignore the token.
+ return true
+ case a.Template:
+ return inHeadIM(p)
+ }
+ case ErrorToken:
+ return inBodyIM(p)
+ }
+ if p.oe.top().DataAtom != a.Colgroup {
+ return true
+ }
+ p.oe.pop()
+ p.im = inTableIM
+ return false
+}
+
+// Section 12.2.6.4.13.
+func inTableBodyIM(p *parser) bool {
+ switch p.tok.Type {
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Tr:
+ p.clearStackToContext(tableBodyScope)
+ p.addElement()
+ p.im = inRowIM
+ return true
+ case a.Td, a.Th:
+ p.parseImpliedToken(StartTagToken, a.Tr, a.Tr.String())
+ return false
+ case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead:
+ if p.popUntil(tableScope, a.Tbody, a.Thead, a.Tfoot) {
+ p.im = inTableIM
+ return false
+ }
+ // Ignore the token.
+ return true
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Tbody, a.Tfoot, a.Thead:
+ if p.elementInScope(tableScope, p.tok.DataAtom) {
+ p.clearStackToContext(tableBodyScope)
+ p.oe.pop()
+ p.im = inTableIM
+ }
+ return true
+ case a.Table:
+ if p.popUntil(tableScope, a.Tbody, a.Thead, a.Tfoot) {
+ p.im = inTableIM
+ return false
+ }
+ // Ignore the token.
+ return true
+ case a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Td, a.Th, a.Tr:
+ // Ignore the token.
+ return true
+ }
+ case CommentToken:
+ p.addChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ return true
+ }
+
+ return inTableIM(p)
+}
+
+// Section 12.2.6.4.14.
+func inRowIM(p *parser) bool {
+ switch p.tok.Type {
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Td, a.Th:
+ p.clearStackToContext(tableRowScope)
+ p.addElement()
+ p.afe = append(p.afe, &scopeMarker)
+ p.im = inCellIM
+ return true
+ case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+ if p.popUntil(tableScope, a.Tr) {
+ p.im = inTableBodyIM
+ return false
+ }
+ // Ignore the token.
+ return true
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Tr:
+ if p.popUntil(tableScope, a.Tr) {
+ p.im = inTableBodyIM
+ return true
+ }
+ // Ignore the token.
+ return true
+ case a.Table:
+ if p.popUntil(tableScope, a.Tr) {
+ p.im = inTableBodyIM
+ return false
+ }
+ // Ignore the token.
+ return true
+ case a.Tbody, a.Tfoot, a.Thead:
+ if p.elementInScope(tableScope, p.tok.DataAtom) {
+ p.parseImpliedToken(EndTagToken, a.Tr, a.Tr.String())
+ return false
+ }
+ // Ignore the token.
+ return true
+ case a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Td, a.Th:
+ // Ignore the token.
+ return true
+ }
+ }
+
+ return inTableIM(p)
+}
+
+// Section 12.2.6.4.15.
+func inCellIM(p *parser) bool {
+ switch p.tok.Type {
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:
+ if p.popUntil(tableScope, a.Td, a.Th) {
+ // Close the cell and reprocess.
+ p.clearActiveFormattingElements()
+ p.im = inRowIM
+ return false
+ }
+ // Ignore the token.
+ return true
+ case a.Select:
+ p.reconstructActiveFormattingElements()
+ p.addElement()
+ p.framesetOK = false
+ p.im = inSelectInTableIM
+ return true
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Td, a.Th:
+ if !p.popUntil(tableScope, p.tok.DataAtom) {
+ // Ignore the token.
+ return true
+ }
+ p.clearActiveFormattingElements()
+ p.im = inRowIM
+ return true
+ case a.Body, a.Caption, a.Col, a.Colgroup, a.Html:
+ // Ignore the token.
+ return true
+ case a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:
+ if !p.elementInScope(tableScope, p.tok.DataAtom) {
+ // Ignore the token.
+ return true
+ }
+ // Close the cell and reprocess.
+ p.popUntil(tableScope, a.Td, a.Th)
+ p.clearActiveFormattingElements()
+ p.im = inRowIM
+ return false
+ }
+ }
+ return inBodyIM(p)
+}
+
+// Section 12.2.6.4.16.
+func inSelectIM(p *parser) bool {
+ switch p.tok.Type {
+ case TextToken:
+ p.addText(strings.Replace(p.tok.Data, "\x00", "", -1))
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Html:
+ return inBodyIM(p)
+ case a.Option:
+ if p.top().DataAtom == a.Option {
+ p.oe.pop()
+ }
+ p.addElement()
+ case a.Optgroup:
+ if p.top().DataAtom == a.Option {
+ p.oe.pop()
+ }
+ if p.top().DataAtom == a.Optgroup {
+ p.oe.pop()
+ }
+ p.addElement()
+ case a.Select:
+ p.tok.Type = EndTagToken
+ return false
+ case a.Input, a.Keygen, a.Textarea:
+ if p.elementInScope(selectScope, a.Select) {
+ p.parseImpliedToken(EndTagToken, a.Select, a.Select.String())
+ return false
+ }
+ // In order to properly ignore <textarea>, we need to change the tokenizer mode.
+ p.tokenizer.NextIsNotRawText()
+ // Ignore the token.
+ return true
+ case a.Script, a.Template:
+ return inHeadIM(p)
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Option:
+ if p.top().DataAtom == a.Option {
+ p.oe.pop()
+ }
+ case a.Optgroup:
+ i := len(p.oe) - 1
+ if p.oe[i].DataAtom == a.Option {
+ i--
+ }
+ if p.oe[i].DataAtom == a.Optgroup {
+ p.oe = p.oe[:i]
+ }
+ case a.Select:
+ if p.popUntil(selectScope, a.Select) {
+ p.resetInsertionMode()
+ }
+ case a.Template:
+ return inHeadIM(p)
+ }
+ case CommentToken:
+ p.addChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ case DoctypeToken:
+ // Ignore the token.
+ return true
+ case ErrorToken:
+ return inBodyIM(p)
+ }
+
+ return true
+}
+
+// Section 12.2.6.4.17.
+func inSelectInTableIM(p *parser) bool {
+ switch p.tok.Type {
+ case StartTagToken, EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Caption, a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr, a.Td, a.Th:
+ if p.tok.Type == StartTagToken || p.elementInScope(tableScope, p.tok.DataAtom) {
+ p.parseImpliedToken(EndTagToken, a.Select, a.Select.String())
+ return false
+ } else {
+ // Ignore the token.
+ return true
+ }
+ }
+ }
+ return inSelectIM(p)
+}
+
+// Section 12.2.6.4.18.
+func inTemplateIM(p *parser) bool {
+ switch p.tok.Type {
+ case TextToken, CommentToken, DoctypeToken:
+ return inBodyIM(p)
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title:
+ return inHeadIM(p)
+ case a.Caption, a.Colgroup, a.Tbody, a.Tfoot, a.Thead:
+ p.templateStack.pop()
+ p.templateStack = append(p.templateStack, inTableIM)
+ p.im = inTableIM
+ return false
+ case a.Col:
+ p.templateStack.pop()
+ p.templateStack = append(p.templateStack, inColumnGroupIM)
+ p.im = inColumnGroupIM
+ return false
+ case a.Tr:
+ p.templateStack.pop()
+ p.templateStack = append(p.templateStack, inTableBodyIM)
+ p.im = inTableBodyIM
+ return false
+ case a.Td, a.Th:
+ p.templateStack.pop()
+ p.templateStack = append(p.templateStack, inRowIM)
+ p.im = inRowIM
+ return false
+ default:
+ p.templateStack.pop()
+ p.templateStack = append(p.templateStack, inBodyIM)
+ p.im = inBodyIM
+ return false
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Template:
+ return inHeadIM(p)
+ default:
+ // Ignore the token.
+ return true
+ }
+ case ErrorToken:
+ if !p.oe.contains(a.Template) {
+ // Ignore the token.
+ return true
+ }
+ // TODO: remove this divergence from the HTML5 spec.
+ //
+ // See https://bugs.chromium.org/p/chromium/issues/detail?id=829668
+ p.generateImpliedEndTags()
+ for i := len(p.oe) - 1; i >= 0; i-- {
+ if n := p.oe[i]; n.Namespace == "" && n.DataAtom == a.Template {
+ p.oe = p.oe[:i]
+ break
+ }
+ }
+ p.clearActiveFormattingElements()
+ p.templateStack.pop()
+ p.resetInsertionMode()
+ return false
+ }
+ return false
+}
+
+// Section 12.2.6.4.19.
+func afterBodyIM(p *parser) bool {
+ switch p.tok.Type {
+ case ErrorToken:
+ // Stop parsing.
+ return true
+ case TextToken:
+ s := strings.TrimLeft(p.tok.Data, whitespace)
+ if len(s) == 0 {
+ // It was all whitespace.
+ return inBodyIM(p)
+ }
+ case StartTagToken:
+ if p.tok.DataAtom == a.Html {
+ return inBodyIM(p)
+ }
+ case EndTagToken:
+ if p.tok.DataAtom == a.Html {
+ if !p.fragment {
+ p.im = afterAfterBodyIM
+ }
+ return true
+ }
+ case CommentToken:
+ // The comment is attached to the <html> element.
+ if len(p.oe) < 1 || p.oe[0].DataAtom != a.Html {
+ panic("html: bad parser state: <html> element not found, in the after-body insertion mode")
+ }
+ p.oe[0].AppendChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ return true
+ }
+ p.im = inBodyIM
+ return false
+}
+
+// Section 12.2.6.4.20.
+func inFramesetIM(p *parser) bool {
+ switch p.tok.Type {
+ case CommentToken:
+ p.addChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ case TextToken:
+ // Ignore all text but whitespace.
+ s := strings.Map(func(c rune) rune {
+ switch c {
+ case ' ', '\t', '\n', '\f', '\r':
+ return c
+ }
+ return -1
+ }, p.tok.Data)
+ if s != "" {
+ p.addText(s)
+ }
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Html:
+ return inBodyIM(p)
+ case a.Frameset:
+ p.addElement()
+ case a.Frame:
+ p.addElement()
+ p.oe.pop()
+ p.acknowledgeSelfClosingTag()
+ case a.Noframes:
+ return inHeadIM(p)
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Frameset:
+ if p.oe.top().DataAtom != a.Html {
+ p.oe.pop()
+ if p.oe.top().DataAtom != a.Frameset {
+ p.im = afterFramesetIM
+ return true
+ }
+ }
+ }
+ default:
+ // Ignore the token.
+ }
+ return true
+}
+
+// Section 12.2.6.4.21.
+func afterFramesetIM(p *parser) bool {
+ switch p.tok.Type {
+ case CommentToken:
+ p.addChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ case TextToken:
+ // Ignore all text but whitespace.
+ s := strings.Map(func(c rune) rune {
+ switch c {
+ case ' ', '\t', '\n', '\f', '\r':
+ return c
+ }
+ return -1
+ }, p.tok.Data)
+ if s != "" {
+ p.addText(s)
+ }
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Html:
+ return inBodyIM(p)
+ case a.Noframes:
+ return inHeadIM(p)
+ }
+ case EndTagToken:
+ switch p.tok.DataAtom {
+ case a.Html:
+ p.im = afterAfterFramesetIM
+ return true
+ }
+ default:
+ // Ignore the token.
+ }
+ return true
+}
+
+// Section 12.2.6.4.22.
+func afterAfterBodyIM(p *parser) bool {
+ switch p.tok.Type {
+ case ErrorToken:
+ // Stop parsing.
+ return true
+ case TextToken:
+ s := strings.TrimLeft(p.tok.Data, whitespace)
+ if len(s) == 0 {
+ // It was all whitespace.
+ return inBodyIM(p)
+ }
+ case StartTagToken:
+ if p.tok.DataAtom == a.Html {
+ return inBodyIM(p)
+ }
+ case CommentToken:
+ p.doc.AppendChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ return true
+ case DoctypeToken:
+ return inBodyIM(p)
+ }
+ p.im = inBodyIM
+ return false
+}
+
+// Section 12.2.6.4.23.
+func afterAfterFramesetIM(p *parser) bool {
+ switch p.tok.Type {
+ case CommentToken:
+ p.doc.AppendChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ case TextToken:
+ // Ignore all text but whitespace.
+ s := strings.Map(func(c rune) rune {
+ switch c {
+ case ' ', '\t', '\n', '\f', '\r':
+ return c
+ }
+ return -1
+ }, p.tok.Data)
+ if s != "" {
+ p.tok.Data = s
+ return inBodyIM(p)
+ }
+ case StartTagToken:
+ switch p.tok.DataAtom {
+ case a.Html:
+ return inBodyIM(p)
+ case a.Noframes:
+ return inHeadIM(p)
+ }
+ case DoctypeToken:
+ return inBodyIM(p)
+ default:
+ // Ignore the token.
+ }
+ return true
+}
+
+const whitespaceOrNUL = whitespace + "\x00"
+
+// Section 12.2.6.5
+func parseForeignContent(p *parser) bool {
+ switch p.tok.Type {
+ case TextToken:
+ if p.framesetOK {
+ p.framesetOK = strings.TrimLeft(p.tok.Data, whitespaceOrNUL) == ""
+ }
+ p.tok.Data = strings.Replace(p.tok.Data, "\x00", "\ufffd", -1)
+ p.addText(p.tok.Data)
+ case CommentToken:
+ p.addChild(&Node{
+ Type: CommentNode,
+ Data: p.tok.Data,
+ })
+ case StartTagToken:
+ b := breakout[p.tok.Data]
+ if p.tok.DataAtom == a.Font {
+ loop:
+ for _, attr := range p.tok.Attr {
+ switch attr.Key {
+ case "color", "face", "size":
+ b = true
+ break loop
+ }
+ }
+ }
+ if b {
+ for i := len(p.oe) - 1; i >= 0; i-- {
+ n := p.oe[i]
+ if n.Namespace == "" || htmlIntegrationPoint(n) || mathMLTextIntegrationPoint(n) {
+ p.oe = p.oe[:i+1]
+ break
+ }
+ }
+ return false
+ }
+ switch p.top().Namespace {
+ case "math":
+ adjustAttributeNames(p.tok.Attr, mathMLAttributeAdjustments)
+ case "svg":
+ // Adjust SVG tag names. The tokenizer lower-cases tag names, but
+ // SVG wants e.g. "foreignObject" with a capital second "O".
+ if x := svgTagNameAdjustments[p.tok.Data]; x != "" {
+ p.tok.DataAtom = a.Lookup([]byte(x))
+ p.tok.Data = x
+ }
+ adjustAttributeNames(p.tok.Attr, svgAttributeAdjustments)
+ default:
+ panic("html: bad parser state: unexpected namespace")
+ }
+ adjustForeignAttributes(p.tok.Attr)
+ namespace := p.top().Namespace
+ p.addElement()
+ p.top().Namespace = namespace
+ if namespace != "" {
+ // Don't let the tokenizer go into raw text mode in foreign content
+ // (e.g. in an SVG <title> tag).
+ p.tokenizer.NextIsNotRawText()
+ }
+ if p.hasSelfClosingToken {
+ p.oe.pop()
+ p.acknowledgeSelfClosingTag()
+ }
+ case EndTagToken:
+ for i := len(p.oe) - 1; i >= 0; i-- {
+ if p.oe[i].Namespace == "" {
+ return p.im(p)
+ }
+ if strings.EqualFold(p.oe[i].Data, p.tok.Data) {
+ p.oe = p.oe[:i]
+ break
+ }
+ }
+ return true
+ default:
+ // Ignore the token.
+ }
+ return true
+}
+
+// Section 12.2.6.
+func (p *parser) inForeignContent() bool {
+ if len(p.oe) == 0 {
+ return false
+ }
+ n := p.oe[len(p.oe)-1]
+ if n.Namespace == "" {
+ return false
+ }
+ if mathMLTextIntegrationPoint(n) {
+ if p.tok.Type == StartTagToken && p.tok.DataAtom != a.Mglyph && p.tok.DataAtom != a.Malignmark {
+ return false
+ }
+ if p.tok.Type == TextToken {
+ return false
+ }
+ }
+ if n.Namespace == "math" && n.DataAtom == a.AnnotationXml && p.tok.Type == StartTagToken && p.tok.DataAtom == a.Svg {
+ return false
+ }
+ if htmlIntegrationPoint(n) && (p.tok.Type == StartTagToken || p.tok.Type == TextToken) {
+ return false
+ }
+ if p.tok.Type == ErrorToken {
+ return false
+ }
+ return true
+}
+
+// parseImpliedToken parses a token as though it had appeared in the parser's
+// input.
+func (p *parser) parseImpliedToken(t TokenType, dataAtom a.Atom, data string) {
+ realToken, selfClosing := p.tok, p.hasSelfClosingToken
+ p.tok = Token{
+ Type: t,
+ DataAtom: dataAtom,
+ Data: data,
+ }
+ p.hasSelfClosingToken = false
+ p.parseCurrentToken()
+ p.tok, p.hasSelfClosingToken = realToken, selfClosing
+}
+
+// parseCurrentToken runs the current token through the parsing routines
+// until it is consumed.
+func (p *parser) parseCurrentToken() {
+ if p.tok.Type == SelfClosingTagToken {
+ p.hasSelfClosingToken = true
+ p.tok.Type = StartTagToken
+ }
+
+ consumed := false
+ for !consumed {
+ if p.inForeignContent() {
+ consumed = parseForeignContent(p)
+ } else {
+ consumed = p.im(p)
+ }
+ }
+
+ if p.hasSelfClosingToken {
+ // This is a parse error, but ignore it.
+ p.hasSelfClosingToken = false
+ }
+}
+
+func (p *parser) parse() error {
+ // Iterate until EOF. Any other error will cause an early return.
+ var err error
+ for err != io.EOF {
+ // CDATA sections are allowed only in foreign content.
+ n := p.oe.top()
+ p.tokenizer.AllowCDATA(n != nil && n.Namespace != "")
+ // Read and parse the next token.
+ p.tokenizer.Next()
+ p.tok = p.tokenizer.Token()
+ if p.tok.Type == ErrorToken {
+ err = p.tokenizer.Err()
+ if err != nil && err != io.EOF {
+ return err
+ }
+ }
+ p.parseCurrentToken()
+ }
+ return nil
+}
+
+// Parse returns the parse tree for the HTML from the given Reader.
+//
+// It implements the HTML5 parsing algorithm
+// (https://html.spec.whatwg.org/multipage/syntax.html#tree-construction),
+// which is very complicated. The resultant tree can contain implicitly created
+// nodes that have no explicit <tag> listed in r's data, and nodes' parents can
+// differ from the nesting implied by a naive processing of start and end
+// <tag>s. Conversely, explicit <tag>s in r's data can be silently dropped,
+// with no corresponding node in the resulting tree.
+//
+// The input is assumed to be UTF-8 encoded.
+func Parse(r io.Reader) (*Node, error) {
+ p := &parser{
+ tokenizer: NewTokenizer(r),
+ doc: &Node{
+ Type: DocumentNode,
+ },
+ scripting: true,
+ framesetOK: true,
+ im: initialIM,
+ }
+ err := p.parse()
+ if err != nil {
+ return nil, err
+ }
+ return p.doc, nil
+}
+
+// ParseFragment parses a fragment of HTML and returns the nodes that were
+// found. If the fragment is the InnerHTML for an existing element, pass that
+// element in context.
+//
+// It has the same intricacies as Parse.
+func ParseFragment(r io.Reader, context *Node) ([]*Node, error) {
+ contextTag := ""
+ if context != nil {
+ if context.Type != ElementNode {
+ return nil, errors.New("html: ParseFragment of non-element Node")
+ }
+ // The next check isn't just context.DataAtom.String() == context.Data because
+ // it is valid to pass an element whose tag isn't a known atom. For example,
+ // DataAtom == 0 and Data = "tagfromthefuture" is perfectly consistent.
+ if context.DataAtom != a.Lookup([]byte(context.Data)) {
+ return nil, fmt.Errorf("html: inconsistent Node: DataAtom=%q, Data=%q", context.DataAtom, context.Data)
+ }
+ contextTag = context.DataAtom.String()
+ }
+ p := &parser{
+ tokenizer: NewTokenizerFragment(r, contextTag),
+ doc: &Node{
+ Type: DocumentNode,
+ },
+ scripting: true,
+ fragment: true,
+ context: context,
+ }
+
+ root := &Node{
+ Type: ElementNode,
+ DataAtom: a.Html,
+ Data: a.Html.String(),
+ }
+ p.doc.AppendChild(root)
+ p.oe = nodeStack{root}
+ if context != nil && context.DataAtom == a.Template {
+ p.templateStack = append(p.templateStack, inTemplateIM)
+ }
+ p.resetInsertionMode()
+
+ for n := context; n != nil; n = n.Parent {
+ if n.Type == ElementNode && n.DataAtom == a.Form {
+ p.form = n
+ break
+ }
+ }
+
+ err := p.parse()
+ if err != nil {
+ return nil, err
+ }
+
+ parent := p.doc
+ if context != nil {
+ parent = root
+ }
+
+ var result []*Node
+ for c := parent.FirstChild; c != nil; {
+ next := c.NextSibling
+ parent.RemoveChild(c)
+ result = append(result, c)
+ c = next
+ }
+ return result, nil
+}
diff --git a/vendor/golang.org/x/net/html/render.go b/vendor/golang.org/x/net/html/render.go
new file mode 100644
index 000000000..d34564f49
--- /dev/null
+++ b/vendor/golang.org/x/net/html/render.go
@@ -0,0 +1,271 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package html
+
+import (
+ "bufio"
+ "errors"
+ "fmt"
+ "io"
+ "strings"
+)
+
+type writer interface {
+ io.Writer
+ io.ByteWriter
+ WriteString(string) (int, error)
+}
+
+// Render renders the parse tree n to the given writer.
+//
+// Rendering is done on a 'best effort' basis: calling Parse on the output of
+// Render will always result in something similar to the original tree, but it
+// is not necessarily an exact clone unless the original tree was 'well-formed'.
+// 'Well-formed' is not easily specified; the HTML5 specification is
+// complicated.
+//
+// Calling Parse on arbitrary input typically results in a 'well-formed' parse
+// tree. However, it is possible for Parse to yield a 'badly-formed' parse tree.
+// For example, in a 'well-formed' parse tree, no <a> element is a child of
+// another <a> element: parsing "<a><a>" results in two sibling elements.
+// Similarly, in a 'well-formed' parse tree, no <a> element is a child of a
+// <table> element: parsing "<p><table><a>" results in a <p> with two sibling
+// children; the <a> is reparented to the <table>'s parent. However, calling
+// Parse on "<a><table><a>" does not return an error, but the result has an <a>
+// element with an <a> child, and is therefore not 'well-formed'.
+//
+// Programmatically constructed trees are typically also 'well-formed', but it
+// is possible to construct a tree that looks innocuous but, when rendered and
+// re-parsed, results in a different tree. A simple example is that a solitary
+// text node would become a tree containing <html>, <head> and <body> elements.
+// Another example is that the programmatic equivalent of "a<head>b</head>c"
+// becomes "<html><head><head/><body>abc</body></html>".
+func Render(w io.Writer, n *Node) error {
+ if x, ok := w.(writer); ok {
+ return render(x, n)
+ }
+ buf := bufio.NewWriter(w)
+ if err := render(buf, n); err != nil {
+ return err
+ }
+ return buf.Flush()
+}
+
+// plaintextAbort is returned from render1 when a <plaintext> element
+// has been rendered. No more end tags should be rendered after that.
+var plaintextAbort = errors.New("html: internal error (plaintext abort)")
+
+func render(w writer, n *Node) error {
+ err := render1(w, n)
+ if err == plaintextAbort {
+ err = nil
+ }
+ return err
+}
+
+func render1(w writer, n *Node) error {
+ // Render non-element nodes; these are the easy cases.
+ switch n.Type {
+ case ErrorNode:
+ return errors.New("html: cannot render an ErrorNode node")
+ case TextNode:
+ return escape(w, n.Data)
+ case DocumentNode:
+ for c := n.FirstChild; c != nil; c = c.NextSibling {
+ if err := render1(w, c); err != nil {
+ return err
+ }
+ }
+ return nil
+ case ElementNode:
+ // No-op.
+ case CommentNode:
+ if _, err := w.WriteString("<!--"); err != nil {
+ return err
+ }
+ if _, err := w.WriteString(n.Data); err != nil {
+ return err
+ }
+ if _, err := w.WriteString("-->"); err != nil {
+ return err
+ }
+ return nil
+ case DoctypeNode:
+ if _, err := w.WriteString("<!DOCTYPE "); err != nil {
+ return err
+ }
+ if _, err := w.WriteString(n.Data); err != nil {
+ return err
+ }
+ if n.Attr != nil {
+ var p, s string
+ for _, a := range n.Attr {
+ switch a.Key {
+ case "public":
+ p = a.Val
+ case "system":
+ s = a.Val
+ }
+ }
+ if p != "" {
+ if _, err := w.WriteString(" PUBLIC "); err != nil {
+ return err
+ }
+ if err := writeQuoted(w, p); err != nil {
+ return err
+ }
+ if s != "" {
+ if err := w.WriteByte(' '); err != nil {
+ return err
+ }
+ if err := writeQuoted(w, s); err != nil {
+ return err
+ }
+ }
+ } else if s != "" {
+ if _, err := w.WriteString(" SYSTEM "); err != nil {
+ return err
+ }
+ if err := writeQuoted(w, s); err != nil {
+ return err
+ }
+ }
+ }
+ return w.WriteByte('>')
+ default:
+ return errors.New("html: unknown node type")
+ }
+
+ // Render the <xxx> opening tag.
+ if err := w.WriteByte('<'); err != nil {
+ return err
+ }
+ if _, err := w.WriteString(n.Data); err != nil {
+ return err
+ }
+ for _, a := range n.Attr {
+ if err := w.WriteByte(' '); err != nil {
+ return err
+ }
+ if a.Namespace != "" {
+ if _, err := w.WriteString(a.Namespace); err != nil {
+ return err
+ }
+ if err := w.WriteByte(':'); err != nil {
+ return err
+ }
+ }
+ if _, err := w.WriteString(a.Key); err != nil {
+ return err
+ }
+ if _, err := w.WriteString(`="`); err != nil {
+ return err
+ }
+ if err := escape(w, a.Val); err != nil {
+ return err
+ }
+ if err := w.WriteByte('"'); err != nil {
+ return err
+ }
+ }
+ if voidElements[n.Data] {
+ if n.FirstChild != nil {
+ return fmt.Errorf("html: void element <%s> has child nodes", n.Data)
+ }
+ _, err := w.WriteString("/>")
+ return err
+ }
+ if err := w.WriteByte('>'); err != nil {
+ return err
+ }
+
+ // Add initial newline where there is danger of a newline beging ignored.
+ if c := n.FirstChild; c != nil && c.Type == TextNode && strings.HasPrefix(c.Data, "\n") {
+ switch n.Data {
+ case "pre", "listing", "textarea":
+ if err := w.WriteByte('\n'); err != nil {
+ return err
+ }
+ }
+ }
+
+ // Render any child nodes.
+ switch n.Data {
+ case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp":
+ for c := n.FirstChild; c != nil; c = c.NextSibling {
+ if c.Type == TextNode {
+ if _, err := w.WriteString(c.Data); err != nil {
+ return err
+ }
+ } else {
+ if err := render1(w, c); err != nil {
+ return err
+ }
+ }
+ }
+ if n.Data == "plaintext" {
+ // Don't render anything else. <plaintext> must be the
+ // last element in the file, with no closing tag.
+ return plaintextAbort
+ }
+ default:
+ for c := n.FirstChild; c != nil; c = c.NextSibling {
+ if err := render1(w, c); err != nil {
+ return err
+ }
+ }
+ }
+
+ // Render the </xxx> closing tag.
+ if _, err := w.WriteString("</"); err != nil {
+ return err
+ }
+ if _, err := w.WriteString(n.Data); err != nil {
+ return err
+ }
+ return w.WriteByte('>')
+}
+
+// writeQuoted writes s to w surrounded by quotes. Normally it will use double
+// quotes, but if s contains a double quote, it will use single quotes.
+// It is used for writing the identifiers in a doctype declaration.
+// In valid HTML, they can't contain both types of quotes.
+func writeQuoted(w writer, s string) error {
+ var q byte = '"'
+ if strings.Contains(s, `"`) {
+ q = '\''
+ }
+ if err := w.WriteByte(q); err != nil {
+ return err
+ }
+ if _, err := w.WriteString(s); err != nil {
+ return err
+ }
+ if err := w.WriteByte(q); err != nil {
+ return err
+ }
+ return nil
+}
+
+// Section 12.1.2, "Elements", gives this list of void elements. Void elements
+// are those that can't have any contents.
+var voidElements = map[string]bool{
+ "area": true,
+ "base": true,
+ "br": true,
+ "col": true,
+ "command": true,
+ "embed": true,
+ "hr": true,
+ "img": true,
+ "input": true,
+ "keygen": true,
+ "link": true,
+ "meta": true,
+ "param": true,
+ "source": true,
+ "track": true,
+ "wbr": true,
+}
diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go
new file mode 100644
index 000000000..e3c01d7c9
--- /dev/null
+++ b/vendor/golang.org/x/net/html/token.go
@@ -0,0 +1,1219 @@
+// Copyright 2010 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 html
+
+import (
+ "bytes"
+ "errors"
+ "io"
+ "strconv"
+ "strings"
+
+ "golang.org/x/net/html/atom"
+)
+
+// A TokenType is the type of a Token.
+type TokenType uint32
+
+const (
+ // ErrorToken means that an error occurred during tokenization.
+ ErrorToken TokenType = iota
+ // TextToken means a text node.
+ TextToken
+ // A StartTagToken looks like <a>.
+ StartTagToken
+ // An EndTagToken looks like </a>.
+ EndTagToken
+ // A SelfClosingTagToken tag looks like <br/>.
+ SelfClosingTagToken
+ // A CommentToken looks like <!--x-->.
+ CommentToken
+ // A DoctypeToken looks like <!DOCTYPE x>
+ DoctypeToken
+)
+
+// ErrBufferExceeded means that the buffering limit was exceeded.
+var ErrBufferExceeded = errors.New("max buffer exceeded")
+
+// String returns a string representation of the TokenType.
+func (t TokenType) String() string {
+ switch t {
+ case ErrorToken:
+ return "Error"
+ case TextToken:
+ return "Text"
+ case StartTagToken:
+ return "StartTag"
+ case EndTagToken:
+ return "EndTag"
+ case SelfClosingTagToken:
+ return "SelfClosingTag"
+ case CommentToken:
+ return "Comment"
+ case DoctypeToken:
+ return "Doctype"
+ }
+ return "Invalid(" + strconv.Itoa(int(t)) + ")"
+}
+
+// An Attribute is an attribute namespace-key-value triple. Namespace is
+// non-empty for foreign attributes like xlink, Key is alphabetic (and hence
+// does not contain escapable characters like '&', '<' or '>'), and Val is
+// unescaped (it looks like "a<b" rather than "a&lt;b").
+//
+// Namespace is only used by the parser, not the tokenizer.
+type Attribute struct {
+ Namespace, Key, Val string
+}
+
+// A Token consists of a TokenType and some Data (tag name for start and end
+// tags, content for text, comments and doctypes). A tag Token may also contain
+// a slice of Attributes. Data is unescaped for all Tokens (it looks like "a<b"
+// rather than "a&lt;b"). For tag Tokens, DataAtom is the atom for Data, or
+// zero if Data is not a known tag name.
+type Token struct {
+ Type TokenType
+ DataAtom atom.Atom
+ Data string
+ Attr []Attribute
+}
+
+// tagString returns a string representation of a tag Token's Data and Attr.
+func (t Token) tagString() string {
+ if len(t.Attr) == 0 {
+ return t.Data
+ }
+ buf := bytes.NewBufferString(t.Data)
+ for _, a := range t.Attr {
+ buf.WriteByte(' ')
+ buf.WriteString(a.Key)
+ buf.WriteString(`="`)
+ escape(buf, a.Val)
+ buf.WriteByte('"')
+ }
+ return buf.String()
+}
+
+// String returns a string representation of the Token.
+func (t Token) String() string {
+ switch t.Type {
+ case ErrorToken:
+ return ""
+ case TextToken:
+ return EscapeString(t.Data)
+ case StartTagToken:
+ return "<" + t.tagString() + ">"
+ case EndTagToken:
+ return "</" + t.tagString() + ">"
+ case SelfClosingTagToken:
+ return "<" + t.tagString() + "/>"
+ case CommentToken:
+ return "<!--" + t.Data + "-->"
+ case DoctypeToken:
+ return "<!DOCTYPE " + t.Data + ">"
+ }
+ return "Invalid(" + strconv.Itoa(int(t.Type)) + ")"
+}
+
+// span is a range of bytes in a Tokenizer's buffer. The start is inclusive,
+// the end is exclusive.
+type span struct {
+ start, end int
+}
+
+// A Tokenizer returns a stream of HTML Tokens.
+type Tokenizer struct {
+ // r is the source of the HTML text.
+ r io.Reader
+ // tt is the TokenType of the current token.
+ tt TokenType
+ // err is the first error encountered during tokenization. It is possible
+ // for tt != Error && err != nil to hold: this means that Next returned a
+ // valid token but the subsequent Next call will return an error token.
+ // For example, if the HTML text input was just "plain", then the first
+ // Next call would set z.err to io.EOF but return a TextToken, and all
+ // subsequent Next calls would return an ErrorToken.
+ // err is never reset. Once it becomes non-nil, it stays non-nil.
+ err error
+ // readErr is the error returned by the io.Reader r. It is separate from
+ // err because it is valid for an io.Reader to return (n int, err1 error)
+ // such that n > 0 && err1 != nil, and callers should always process the
+ // n > 0 bytes before considering the error err1.
+ readErr error
+ // buf[raw.start:raw.end] holds the raw bytes of the current token.
+ // buf[raw.end:] is buffered input that will yield future tokens.
+ raw span
+ buf []byte
+ // maxBuf limits the data buffered in buf. A value of 0 means unlimited.
+ maxBuf int
+ // buf[data.start:data.end] holds the raw bytes of the current token's data:
+ // a text token's text, a tag token's tag name, etc.
+ data span
+ // pendingAttr is the attribute key and value currently being tokenized.
+ // When complete, pendingAttr is pushed onto attr. nAttrReturned is
+ // incremented on each call to TagAttr.
+ pendingAttr [2]span
+ attr [][2]span
+ nAttrReturned int
+ // rawTag is the "script" in "</script>" that closes the next token. If
+ // non-empty, the subsequent call to Next will return a raw or RCDATA text
+ // token: one that treats "<p>" as text instead of an element.
+ // rawTag's contents are lower-cased.
+ rawTag string
+ // textIsRaw is whether the current text token's data is not escaped.
+ textIsRaw bool
+ // convertNUL is whether NUL bytes in the current token's data should
+ // be converted into \ufffd replacement characters.
+ convertNUL bool
+ // allowCDATA is whether CDATA sections are allowed in the current context.
+ allowCDATA bool
+}
+
+// AllowCDATA sets whether or not the tokenizer recognizes <![CDATA[foo]]> as
+// the text "foo". The default value is false, which means to recognize it as
+// a bogus comment "<!-- [CDATA[foo]] -->" instead.
+//
+// Strictly speaking, an HTML5 compliant tokenizer should allow CDATA if and
+// only if tokenizing foreign content, such as MathML and SVG. However,
+// tracking foreign-contentness is difficult to do purely in the tokenizer,
+// as opposed to the parser, due to HTML integration points: an <svg> element
+// can contain a <foreignObject> that is foreign-to-SVG but not foreign-to-
+// HTML. For strict compliance with the HTML5 tokenization algorithm, it is the
+// responsibility of the user of a tokenizer to call AllowCDATA as appropriate.
+// In practice, if using the tokenizer without caring whether MathML or SVG
+// CDATA is text or comments, such as tokenizing HTML to find all the anchor
+// text, it is acceptable to ignore this responsibility.
+func (z *Tokenizer) AllowCDATA(allowCDATA bool) {
+ z.allowCDATA = allowCDATA
+}
+
+// NextIsNotRawText instructs the tokenizer that the next token should not be
+// considered as 'raw text'. Some elements, such as script and title elements,
+// normally require the next token after the opening tag to be 'raw text' that
+// has no child elements. For example, tokenizing "<title>a<b>c</b>d</title>"
+// yields a start tag token for "<title>", a text token for "a<b>c</b>d", and
+// an end tag token for "</title>". There are no distinct start tag or end tag
+// tokens for the "<b>" and "</b>".
+//
+// This tokenizer implementation will generally look for raw text at the right
+// times. Strictly speaking, an HTML5 compliant tokenizer should not look for
+// raw text if in foreign content: <title> generally needs raw text, but a
+// <title> inside an <svg> does not. Another example is that a <textarea>
+// generally needs raw text, but a <textarea> is not allowed as an immediate
+// child of a <select>; in normal parsing, a <textarea> implies </select>, but
+// one cannot close the implicit element when parsing a <select>'s InnerHTML.
+// Similarly to AllowCDATA, tracking the correct moment to override raw-text-
+// ness is difficult to do purely in the tokenizer, as opposed to the parser.
+// For strict compliance with the HTML5 tokenization algorithm, it is the
+// responsibility of the user of a tokenizer to call NextIsNotRawText as
+// appropriate. In practice, like AllowCDATA, it is acceptable to ignore this
+// responsibility for basic usage.
+//
+// Note that this 'raw text' concept is different from the one offered by the
+// Tokenizer.Raw method.
+func (z *Tokenizer) NextIsNotRawText() {
+ z.rawTag = ""
+}
+
+// Err returns the error associated with the most recent ErrorToken token.
+// This is typically io.EOF, meaning the end of tokenization.
+func (z *Tokenizer) Err() error {
+ if z.tt != ErrorToken {
+ return nil
+ }
+ return z.err
+}
+
+// readByte returns the next byte from the input stream, doing a buffered read
+// from z.r into z.buf if necessary. z.buf[z.raw.start:z.raw.end] remains a contiguous byte
+// slice that holds all the bytes read so far for the current token.
+// It sets z.err if the underlying reader returns an error.
+// Pre-condition: z.err == nil.
+func (z *Tokenizer) readByte() byte {
+ if z.raw.end >= len(z.buf) {
+ // Our buffer is exhausted and we have to read from z.r. Check if the
+ // previous read resulted in an error.
+ if z.readErr != nil {
+ z.err = z.readErr
+ return 0
+ }
+ // We copy z.buf[z.raw.start:z.raw.end] to the beginning of z.buf. If the length
+ // z.raw.end - z.raw.start is more than half the capacity of z.buf, then we
+ // allocate a new buffer before the copy.
+ c := cap(z.buf)
+ d := z.raw.end - z.raw.start
+ var buf1 []byte
+ if 2*d > c {
+ buf1 = make([]byte, d, 2*c)
+ } else {
+ buf1 = z.buf[:d]
+ }
+ copy(buf1, z.buf[z.raw.start:z.raw.end])
+ if x := z.raw.start; x != 0 {
+ // Adjust the data/attr spans to refer to the same contents after the copy.
+ z.data.start -= x
+ z.data.end -= x
+ z.pendingAttr[0].start -= x
+ z.pendingAttr[0].end -= x
+ z.pendingAttr[1].start -= x
+ z.pendingAttr[1].end -= x
+ for i := range z.attr {
+ z.attr[i][0].start -= x
+ z.attr[i][0].end -= x
+ z.attr[i][1].start -= x
+ z.attr[i][1].end -= x
+ }
+ }
+ z.raw.start, z.raw.end, z.buf = 0, d, buf1[:d]
+ // Now that we have copied the live bytes to the start of the buffer,
+ // we read from z.r into the remainder.
+ var n int
+ n, z.readErr = readAtLeastOneByte(z.r, buf1[d:cap(buf1)])
+ if n == 0 {
+ z.err = z.readErr
+ return 0
+ }
+ z.buf = buf1[:d+n]
+ }
+ x := z.buf[z.raw.end]
+ z.raw.end++
+ if z.maxBuf > 0 && z.raw.end-z.raw.start >= z.maxBuf {
+ z.err = ErrBufferExceeded
+ return 0
+ }
+ return x
+}
+
+// Buffered returns a slice containing data buffered but not yet tokenized.
+func (z *Tokenizer) Buffered() []byte {
+ return z.buf[z.raw.end:]
+}
+
+// readAtLeastOneByte wraps an io.Reader so that reading cannot return (0, nil).
+// It returns io.ErrNoProgress if the underlying r.Read method returns (0, nil)
+// too many times in succession.
+func readAtLeastOneByte(r io.Reader, b []byte) (int, error) {
+ for i := 0; i < 100; i++ {
+ n, err := r.Read(b)
+ if n != 0 || err != nil {
+ return n, err
+ }
+ }
+ return 0, io.ErrNoProgress
+}
+
+// skipWhiteSpace skips past any white space.
+func (z *Tokenizer) skipWhiteSpace() {
+ if z.err != nil {
+ return
+ }
+ for {
+ c := z.readByte()
+ if z.err != nil {
+ return
+ }
+ switch c {
+ case ' ', '\n', '\r', '\t', '\f':
+ // No-op.
+ default:
+ z.raw.end--
+ return
+ }
+ }
+}
+
+// readRawOrRCDATA reads until the next "</foo>", where "foo" is z.rawTag and
+// is typically something like "script" or "textarea".
+func (z *Tokenizer) readRawOrRCDATA() {
+ if z.rawTag == "script" {
+ z.readScript()
+ z.textIsRaw = true
+ z.rawTag = ""
+ return
+ }
+loop:
+ for {
+ c := z.readByte()
+ if z.err != nil {
+ break loop
+ }
+ if c != '<' {
+ continue loop
+ }
+ c = z.readByte()
+ if z.err != nil {
+ break loop
+ }
+ if c != '/' {
+ continue loop
+ }
+ if z.readRawEndTag() || z.err != nil {
+ break loop
+ }
+ }
+ z.data.end = z.raw.end
+ // A textarea's or title's RCDATA can contain escaped entities.
+ z.textIsRaw = z.rawTag != "textarea" && z.rawTag != "title"
+ z.rawTag = ""
+}
+
+// readRawEndTag attempts to read a tag like "</foo>", where "foo" is z.rawTag.
+// If it succeeds, it backs up the input position to reconsume the tag and
+// returns true. Otherwise it returns false. The opening "</" has already been
+// consumed.
+func (z *Tokenizer) readRawEndTag() bool {
+ for i := 0; i < len(z.rawTag); i++ {
+ c := z.readByte()
+ if z.err != nil {
+ return false
+ }
+ if c != z.rawTag[i] && c != z.rawTag[i]-('a'-'A') {
+ z.raw.end--
+ return false
+ }
+ }
+ c := z.readByte()
+ if z.err != nil {
+ return false
+ }
+ switch c {
+ case ' ', '\n', '\r', '\t', '\f', '/', '>':
+ // The 3 is 2 for the leading "</" plus 1 for the trailing character c.
+ z.raw.end -= 3 + len(z.rawTag)
+ return true
+ }
+ z.raw.end--
+ return false
+}
+
+// readScript reads until the next </script> tag, following the byzantine
+// rules for escaping/hiding the closing tag.
+func (z *Tokenizer) readScript() {
+ defer func() {
+ z.data.end = z.raw.end
+ }()
+ var c byte
+
+scriptData:
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ if c == '<' {
+ goto scriptDataLessThanSign
+ }
+ goto scriptData
+
+scriptDataLessThanSign:
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ switch c {
+ case '/':
+ goto scriptDataEndTagOpen
+ case '!':
+ goto scriptDataEscapeStart
+ }
+ z.raw.end--
+ goto scriptData
+
+scriptDataEndTagOpen:
+ if z.readRawEndTag() || z.err != nil {
+ return
+ }
+ goto scriptData
+
+scriptDataEscapeStart:
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ if c == '-' {
+ goto scriptDataEscapeStartDash
+ }
+ z.raw.end--
+ goto scriptData
+
+scriptDataEscapeStartDash:
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ if c == '-' {
+ goto scriptDataEscapedDashDash
+ }
+ z.raw.end--
+ goto scriptData
+
+scriptDataEscaped:
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ switch c {
+ case '-':
+ goto scriptDataEscapedDash
+ case '<':
+ goto scriptDataEscapedLessThanSign
+ }
+ goto scriptDataEscaped
+
+scriptDataEscapedDash:
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ switch c {
+ case '-':
+ goto scriptDataEscapedDashDash
+ case '<':
+ goto scriptDataEscapedLessThanSign
+ }
+ goto scriptDataEscaped
+
+scriptDataEscapedDashDash:
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ switch c {
+ case '-':
+ goto scriptDataEscapedDashDash
+ case '<':
+ goto scriptDataEscapedLessThanSign
+ case '>':
+ goto scriptData
+ }
+ goto scriptDataEscaped
+
+scriptDataEscapedLessThanSign:
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ if c == '/' {
+ goto scriptDataEscapedEndTagOpen
+ }
+ if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' {
+ goto scriptDataDoubleEscapeStart
+ }
+ z.raw.end--
+ goto scriptData
+
+scriptDataEscapedEndTagOpen:
+ if z.readRawEndTag() || z.err != nil {
+ return
+ }
+ goto scriptDataEscaped
+
+scriptDataDoubleEscapeStart:
+ z.raw.end--
+ for i := 0; i < len("script"); i++ {
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ if c != "script"[i] && c != "SCRIPT"[i] {
+ z.raw.end--
+ goto scriptDataEscaped
+ }
+ }
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ switch c {
+ case ' ', '\n', '\r', '\t', '\f', '/', '>':
+ goto scriptDataDoubleEscaped
+ }
+ z.raw.end--
+ goto scriptDataEscaped
+
+scriptDataDoubleEscaped:
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ switch c {
+ case '-':
+ goto scriptDataDoubleEscapedDash
+ case '<':
+ goto scriptDataDoubleEscapedLessThanSign
+ }
+ goto scriptDataDoubleEscaped
+
+scriptDataDoubleEscapedDash:
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ switch c {
+ case '-':
+ goto scriptDataDoubleEscapedDashDash
+ case '<':
+ goto scriptDataDoubleEscapedLessThanSign
+ }
+ goto scriptDataDoubleEscaped
+
+scriptDataDoubleEscapedDashDash:
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ switch c {
+ case '-':
+ goto scriptDataDoubleEscapedDashDash
+ case '<':
+ goto scriptDataDoubleEscapedLessThanSign
+ case '>':
+ goto scriptData
+ }
+ goto scriptDataDoubleEscaped
+
+scriptDataDoubleEscapedLessThanSign:
+ c = z.readByte()
+ if z.err != nil {
+ return
+ }
+ if c == '/' {
+ goto scriptDataDoubleEscapeEnd
+ }
+ z.raw.end--
+ goto scriptDataDoubleEscaped
+
+scriptDataDoubleEscapeEnd:
+ if z.readRawEndTag() {
+ z.raw.end += len("</script>")
+ goto scriptDataEscaped
+ }
+ if z.err != nil {
+ return
+ }
+ goto scriptDataDoubleEscaped
+}
+
+// readComment reads the next comment token starting with "<!--". The opening
+// "<!--" has already been consumed.
+func (z *Tokenizer) readComment() {
+ z.data.start = z.raw.end
+ defer func() {
+ if z.data.end < z.data.start {
+ // It's a comment with no data, like <!-->.
+ z.data.end = z.data.start
+ }
+ }()
+ for dashCount := 2; ; {
+ c := z.readByte()
+ if z.err != nil {
+ // Ignore up to two dashes at EOF.
+ if dashCount > 2 {
+ dashCount = 2
+ }
+ z.data.end = z.raw.end - dashCount
+ return
+ }
+ switch c {
+ case '-':
+ dashCount++
+ continue
+ case '>':
+ if dashCount >= 2 {
+ z.data.end = z.raw.end - len("-->")
+ return
+ }
+ case '!':
+ if dashCount >= 2 {
+ c = z.readByte()
+ if z.err != nil {
+ z.data.end = z.raw.end
+ return
+ }
+ if c == '>' {
+ z.data.end = z.raw.end - len("--!>")
+ return
+ }
+ }
+ }
+ dashCount = 0
+ }
+}
+
+// readUntilCloseAngle reads until the next ">".
+func (z *Tokenizer) readUntilCloseAngle() {
+ z.data.start = z.raw.end
+ for {
+ c := z.readByte()
+ if z.err != nil {
+ z.data.end = z.raw.end
+ return
+ }
+ if c == '>' {
+ z.data.end = z.raw.end - len(">")
+ return
+ }
+ }
+}
+
+// readMarkupDeclaration reads the next token starting with "<!". It might be
+// a "<!--comment-->", a "<!DOCTYPE foo>", a "<![CDATA[section]]>" or
+// "<!a bogus comment". The opening "<!" has already been consumed.
+func (z *Tokenizer) readMarkupDeclaration() TokenType {
+ z.data.start = z.raw.end
+ var c [2]byte
+ for i := 0; i < 2; i++ {
+ c[i] = z.readByte()
+ if z.err != nil {
+ z.data.end = z.raw.end
+ return CommentToken
+ }
+ }
+ if c[0] == '-' && c[1] == '-' {
+ z.readComment()
+ return CommentToken
+ }
+ z.raw.end -= 2
+ if z.readDoctype() {
+ return DoctypeToken
+ }
+ if z.allowCDATA && z.readCDATA() {
+ z.convertNUL = true
+ return TextToken
+ }
+ // It's a bogus comment.
+ z.readUntilCloseAngle()
+ return CommentToken
+}
+
+// readDoctype attempts to read a doctype declaration and returns true if
+// successful. The opening "<!" has already been consumed.
+func (z *Tokenizer) readDoctype() bool {
+ const s = "DOCTYPE"
+ for i := 0; i < len(s); i++ {
+ c := z.readByte()
+ if z.err != nil {
+ z.data.end = z.raw.end
+ return false
+ }
+ if c != s[i] && c != s[i]+('a'-'A') {
+ // Back up to read the fragment of "DOCTYPE" again.
+ z.raw.end = z.data.start
+ return false
+ }
+ }
+ if z.skipWhiteSpace(); z.err != nil {
+ z.data.start = z.raw.end
+ z.data.end = z.raw.end
+ return true
+ }
+ z.readUntilCloseAngle()
+ return true
+}
+
+// readCDATA attempts to read a CDATA section and returns true if
+// successful. The opening "<!" has already been consumed.
+func (z *Tokenizer) readCDATA() bool {
+ const s = "[CDATA["
+ for i := 0; i < len(s); i++ {
+ c := z.readByte()
+ if z.err != nil {
+ z.data.end = z.raw.end
+ return false
+ }
+ if c != s[i] {
+ // Back up to read the fragment of "[CDATA[" again.
+ z.raw.end = z.data.start
+ return false
+ }
+ }
+ z.data.start = z.raw.end
+ brackets := 0
+ for {
+ c := z.readByte()
+ if z.err != nil {
+ z.data.end = z.raw.end
+ return true
+ }
+ switch c {
+ case ']':
+ brackets++
+ case '>':
+ if brackets >= 2 {
+ z.data.end = z.raw.end - len("]]>")
+ return true
+ }
+ brackets = 0
+ default:
+ brackets = 0
+ }
+ }
+}
+
+// startTagIn returns whether the start tag in z.buf[z.data.start:z.data.end]
+// case-insensitively matches any element of ss.
+func (z *Tokenizer) startTagIn(ss ...string) bool {
+loop:
+ for _, s := range ss {
+ if z.data.end-z.data.start != len(s) {
+ continue loop
+ }
+ for i := 0; i < len(s); i++ {
+ c := z.buf[z.data.start+i]
+ if 'A' <= c && c <= 'Z' {
+ c += 'a' - 'A'
+ }
+ if c != s[i] {
+ continue loop
+ }
+ }
+ return true
+ }
+ return false
+}
+
+// readStartTag reads the next start tag token. The opening "<a" has already
+// been consumed, where 'a' means anything in [A-Za-z].
+func (z *Tokenizer) readStartTag() TokenType {
+ z.readTag(true)
+ if z.err != nil {
+ return ErrorToken
+ }
+ // Several tags flag the tokenizer's next token as raw.
+ c, raw := z.buf[z.data.start], false
+ if 'A' <= c && c <= 'Z' {
+ c += 'a' - 'A'
+ }
+ switch c {
+ case 'i':
+ raw = z.startTagIn("iframe")
+ case 'n':
+ raw = z.startTagIn("noembed", "noframes", "noscript")
+ case 'p':
+ raw = z.startTagIn("plaintext")
+ case 's':
+ raw = z.startTagIn("script", "style")
+ case 't':
+ raw = z.startTagIn("textarea", "title")
+ case 'x':
+ raw = z.startTagIn("xmp")
+ }
+ if raw {
+ z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end]))
+ }
+ // Look for a self-closing token like "<br/>".
+ if z.err == nil && z.buf[z.raw.end-2] == '/' {
+ return SelfClosingTagToken
+ }
+ return StartTagToken
+}
+
+// readTag reads the next tag token and its attributes. If saveAttr, those
+// attributes are saved in z.attr, otherwise z.attr is set to an empty slice.
+// The opening "<a" or "</a" has already been consumed, where 'a' means anything
+// in [A-Za-z].
+func (z *Tokenizer) readTag(saveAttr bool) {
+ z.attr = z.attr[:0]
+ z.nAttrReturned = 0
+ // Read the tag name and attribute key/value pairs.
+ z.readTagName()
+ if z.skipWhiteSpace(); z.err != nil {
+ return
+ }
+ for {
+ c := z.readByte()
+ if z.err != nil || c == '>' {
+ break
+ }
+ z.raw.end--
+ z.readTagAttrKey()
+ z.readTagAttrVal()
+ // Save pendingAttr if saveAttr and that attribute has a non-empty key.
+ if saveAttr && z.pendingAttr[0].start != z.pendingAttr[0].end {
+ z.attr = append(z.attr, z.pendingAttr)
+ }
+ if z.skipWhiteSpace(); z.err != nil {
+ break
+ }
+ }
+}
+
+// readTagName sets z.data to the "div" in "<div k=v>". The reader (z.raw.end)
+// is positioned such that the first byte of the tag name (the "d" in "<div")
+// has already been consumed.
+func (z *Tokenizer) readTagName() {
+ z.data.start = z.raw.end - 1
+ for {
+ c := z.readByte()
+ if z.err != nil {
+ z.data.end = z.raw.end
+ return
+ }
+ switch c {
+ case ' ', '\n', '\r', '\t', '\f':
+ z.data.end = z.raw.end - 1
+ return
+ case '/', '>':
+ z.raw.end--
+ z.data.end = z.raw.end
+ return
+ }
+ }
+}
+
+// readTagAttrKey sets z.pendingAttr[0] to the "k" in "<div k=v>".
+// Precondition: z.err == nil.
+func (z *Tokenizer) readTagAttrKey() {
+ z.pendingAttr[0].start = z.raw.end
+ for {
+ c := z.readByte()
+ if z.err != nil {
+ z.pendingAttr[0].end = z.raw.end
+ return
+ }
+ switch c {
+ case ' ', '\n', '\r', '\t', '\f', '/':
+ z.pendingAttr[0].end = z.raw.end - 1
+ return
+ case '=', '>':
+ z.raw.end--
+ z.pendingAttr[0].end = z.raw.end
+ return
+ }
+ }
+}
+
+// readTagAttrVal sets z.pendingAttr[1] to the "v" in "<div k=v>".
+func (z *Tokenizer) readTagAttrVal() {
+ z.pendingAttr[1].start = z.raw.end
+ z.pendingAttr[1].end = z.raw.end
+ if z.skipWhiteSpace(); z.err != nil {
+ return
+ }
+ c := z.readByte()
+ if z.err != nil {
+ return
+ }
+ if c != '=' {
+ z.raw.end--
+ return
+ }
+ if z.skipWhiteSpace(); z.err != nil {
+ return
+ }
+ quote := z.readByte()
+ if z.err != nil {
+ return
+ }
+ switch quote {
+ case '>':
+ z.raw.end--
+ return
+
+ case '\'', '"':
+ z.pendingAttr[1].start = z.raw.end
+ for {
+ c := z.readByte()
+ if z.err != nil {
+ z.pendingAttr[1].end = z.raw.end
+ return
+ }
+ if c == quote {
+ z.pendingAttr[1].end = z.raw.end - 1
+ return
+ }
+ }
+
+ default:
+ z.pendingAttr[1].start = z.raw.end - 1
+ for {
+ c := z.readByte()
+ if z.err != nil {
+ z.pendingAttr[1].end = z.raw.end
+ return
+ }
+ switch c {
+ case ' ', '\n', '\r', '\t', '\f':
+ z.pendingAttr[1].end = z.raw.end - 1
+ return
+ case '>':
+ z.raw.end--
+ z.pendingAttr[1].end = z.raw.end
+ return
+ }
+ }
+ }
+}
+
+// Next scans the next token and returns its type.
+func (z *Tokenizer) Next() TokenType {
+ z.raw.start = z.raw.end
+ z.data.start = z.raw.end
+ z.data.end = z.raw.end
+ if z.err != nil {
+ z.tt = ErrorToken
+ return z.tt
+ }
+ if z.rawTag != "" {
+ if z.rawTag == "plaintext" {
+ // Read everything up to EOF.
+ for z.err == nil {
+ z.readByte()
+ }
+ z.data.end = z.raw.end
+ z.textIsRaw = true
+ } else {
+ z.readRawOrRCDATA()
+ }
+ if z.data.end > z.data.start {
+ z.tt = TextToken
+ z.convertNUL = true
+ return z.tt
+ }
+ }
+ z.textIsRaw = false
+ z.convertNUL = false
+
+loop:
+ for {
+ c := z.readByte()
+ if z.err != nil {
+ break loop
+ }
+ if c != '<' {
+ continue loop
+ }
+
+ // Check if the '<' we have just read is part of a tag, comment
+ // or doctype. If not, it's part of the accumulated text token.
+ c = z.readByte()
+ if z.err != nil {
+ break loop
+ }
+ var tokenType TokenType
+ switch {
+ case 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z':
+ tokenType = StartTagToken
+ case c == '/':
+ tokenType = EndTagToken
+ case c == '!' || c == '?':
+ // We use CommentToken to mean any of "<!--actual comments-->",
+ // "<!DOCTYPE declarations>" and "<?xml processing instructions?>".
+ tokenType = CommentToken
+ default:
+ // Reconsume the current character.
+ z.raw.end--
+ continue
+ }
+
+ // We have a non-text token, but we might have accumulated some text
+ // before that. If so, we return the text first, and return the non-
+ // text token on the subsequent call to Next.
+ if x := z.raw.end - len("<a"); z.raw.start < x {
+ z.raw.end = x
+ z.data.end = x
+ z.tt = TextToken
+ return z.tt
+ }
+ switch tokenType {
+ case StartTagToken:
+ z.tt = z.readStartTag()
+ return z.tt
+ case EndTagToken:
+ c = z.readByte()
+ if z.err != nil {
+ break loop
+ }
+ if c == '>' {
+ // "</>" does not generate a token at all. Generate an empty comment
+ // to allow passthrough clients to pick up the data using Raw.
+ // Reset the tokenizer state and start again.
+ z.tt = CommentToken
+ return z.tt
+ }
+ if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' {
+ z.readTag(false)
+ if z.err != nil {
+ z.tt = ErrorToken
+ } else {
+ z.tt = EndTagToken
+ }
+ return z.tt
+ }
+ z.raw.end--
+ z.readUntilCloseAngle()
+ z.tt = CommentToken
+ return z.tt
+ case CommentToken:
+ if c == '!' {
+ z.tt = z.readMarkupDeclaration()
+ return z.tt
+ }
+ z.raw.end--
+ z.readUntilCloseAngle()
+ z.tt = CommentToken
+ return z.tt
+ }
+ }
+ if z.raw.start < z.raw.end {
+ z.data.end = z.raw.end
+ z.tt = TextToken
+ return z.tt
+ }
+ z.tt = ErrorToken
+ return z.tt
+}
+
+// Raw returns the unmodified text of the current token. Calling Next, Token,
+// Text, TagName or TagAttr may change the contents of the returned slice.
+func (z *Tokenizer) Raw() []byte {
+ return z.buf[z.raw.start:z.raw.end]
+}
+
+// convertNewlines converts "\r" and "\r\n" in s to "\n".
+// The conversion happens in place, but the resulting slice may be shorter.
+func convertNewlines(s []byte) []byte {
+ for i, c := range s {
+ if c != '\r' {
+ continue
+ }
+
+ src := i + 1
+ if src >= len(s) || s[src] != '\n' {
+ s[i] = '\n'
+ continue
+ }
+
+ dst := i
+ for src < len(s) {
+ if s[src] == '\r' {
+ if src+1 < len(s) && s[src+1] == '\n' {
+ src++
+ }
+ s[dst] = '\n'
+ } else {
+ s[dst] = s[src]
+ }
+ src++
+ dst++
+ }
+ return s[:dst]
+ }
+ return s
+}
+
+var (
+ nul = []byte("\x00")
+ replacement = []byte("\ufffd")
+)
+
+// Text returns the unescaped text of a text, comment or doctype token. The
+// contents of the returned slice may change on the next call to Next.
+func (z *Tokenizer) Text() []byte {
+ switch z.tt {
+ case TextToken, CommentToken, DoctypeToken:
+ s := z.buf[z.data.start:z.data.end]
+ z.data.start = z.raw.end
+ z.data.end = z.raw.end
+ s = convertNewlines(s)
+ if (z.convertNUL || z.tt == CommentToken) && bytes.Contains(s, nul) {
+ s = bytes.Replace(s, nul, replacement, -1)
+ }
+ if !z.textIsRaw {
+ s = unescape(s, false)
+ }
+ return s
+ }
+ return nil
+}
+
+// TagName returns the lower-cased name of a tag token (the `img` out of
+// `<IMG SRC="foo">`) and whether the tag has attributes.
+// The contents of the returned slice may change on the next call to Next.
+func (z *Tokenizer) TagName() (name []byte, hasAttr bool) {
+ if z.data.start < z.data.end {
+ switch z.tt {
+ case StartTagToken, EndTagToken, SelfClosingTagToken:
+ s := z.buf[z.data.start:z.data.end]
+ z.data.start = z.raw.end
+ z.data.end = z.raw.end
+ return lower(s), z.nAttrReturned < len(z.attr)
+ }
+ }
+ return nil, false
+}
+
+// TagAttr returns the lower-cased key and unescaped value of the next unparsed
+// attribute for the current tag token and whether there are more attributes.
+// The contents of the returned slices may change on the next call to Next.
+func (z *Tokenizer) TagAttr() (key, val []byte, moreAttr bool) {
+ if z.nAttrReturned < len(z.attr) {
+ switch z.tt {
+ case StartTagToken, SelfClosingTagToken:
+ x := z.attr[z.nAttrReturned]
+ z.nAttrReturned++
+ key = z.buf[x[0].start:x[0].end]
+ val = z.buf[x[1].start:x[1].end]
+ return lower(key), unescape(convertNewlines(val), true), z.nAttrReturned < len(z.attr)
+ }
+ }
+ return nil, nil, false
+}
+
+// Token returns the current Token. The result's Data and Attr values remain
+// valid after subsequent Next calls.
+func (z *Tokenizer) Token() Token {
+ t := Token{Type: z.tt}
+ switch z.tt {
+ case TextToken, CommentToken, DoctypeToken:
+ t.Data = string(z.Text())
+ case StartTagToken, SelfClosingTagToken, EndTagToken:
+ name, moreAttr := z.TagName()
+ for moreAttr {
+ var key, val []byte
+ key, val, moreAttr = z.TagAttr()
+ t.Attr = append(t.Attr, Attribute{"", atom.String(key), string(val)})
+ }
+ if a := atom.Lookup(name); a != 0 {
+ t.DataAtom, t.Data = a, a.String()
+ } else {
+ t.DataAtom, t.Data = 0, string(name)
+ }
+ }
+ return t
+}
+
+// SetMaxBuf sets a limit on the amount of data buffered during tokenization.
+// A value of 0 means unlimited.
+func (z *Tokenizer) SetMaxBuf(n int) {
+ z.maxBuf = n
+}
+
+// NewTokenizer returns a new HTML Tokenizer for the given Reader.
+// The input is assumed to be UTF-8 encoded.
+func NewTokenizer(r io.Reader) *Tokenizer {
+ return NewTokenizerFragment(r, "")
+}
+
+// NewTokenizerFragment returns a new HTML Tokenizer for the given Reader, for
+// tokenizing an existing element's InnerHTML fragment. contextTag is that
+// element's tag, such as "div" or "iframe".
+//
+// For example, how the InnerHTML "a<b" is tokenized depends on whether it is
+// for a <p> tag or a <script> tag.
+//
+// The input is assumed to be UTF-8 encoded.
+func NewTokenizerFragment(r io.Reader, contextTag string) *Tokenizer {
+ z := &Tokenizer{
+ r: r,
+ buf: make([]byte, 0, 4096),
+ }
+ if contextTag != "" {
+ switch s := strings.ToLower(contextTag); s {
+ case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "title", "textarea", "xmp":
+ z.rawTag = s
+ }
+ }
+ return z
+}
diff --git a/vendor/golang.org/x/net/http/httpguts/guts.go b/vendor/golang.org/x/net/http/httpguts/guts.go
new file mode 100644
index 000000000..e6cd0ced3
--- /dev/null
+++ b/vendor/golang.org/x/net/http/httpguts/guts.go
@@ -0,0 +1,50 @@
+// 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 httpguts provides functions implementing various details
+// of the HTTP specification.
+//
+// This package is shared by the standard library (which vendors it)
+// and x/net/http2. It comes with no API stability promise.
+package httpguts
+
+import (
+ "net/textproto"
+ "strings"
+)
+
+// ValidTrailerHeader reports whether name is a valid header field name to appear
+// in trailers.
+// See RFC 7230, Section 4.1.2
+func ValidTrailerHeader(name string) bool {
+ name = textproto.CanonicalMIMEHeaderKey(name)
+ if strings.HasPrefix(name, "If-") || badTrailer[name] {
+ return false
+ }
+ return true
+}
+
+var badTrailer = map[string]bool{
+ "Authorization": true,
+ "Cache-Control": true,
+ "Connection": true,
+ "Content-Encoding": true,
+ "Content-Length": true,
+ "Content-Range": true,
+ "Content-Type": true,
+ "Expect": true,
+ "Host": true,
+ "Keep-Alive": true,
+ "Max-Forwards": true,
+ "Pragma": true,
+ "Proxy-Authenticate": true,
+ "Proxy-Authorization": true,
+ "Proxy-Connection": true,
+ "Range": true,
+ "Realm": true,
+ "Te": true,
+ "Trailer": true,
+ "Transfer-Encoding": true,
+ "Www-Authenticate": true,
+}
diff --git a/vendor/golang.org/x/net/lex/httplex/httplex.go b/vendor/golang.org/x/net/http/httpguts/httplex.go
index 20f2b8940..e7de24ee6 100644
--- a/vendor/golang.org/x/net/lex/httplex/httplex.go
+++ b/vendor/golang.org/x/net/http/httpguts/httplex.go
@@ -2,12 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// Package httplex contains rules around lexical matters of various
-// HTTP-related specifications.
-//
-// This package is shared by the standard library (which vendors it)
-// and x/net/http2. It comes with no API stability promise.
-package httplex
+package httpguts
import (
"net"
diff --git a/vendor/golang.org/x/net/http2/ciphers.go b/vendor/golang.org/x/net/http2/ciphers.go
new file mode 100644
index 000000000..c9a0cf3b4
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/ciphers.go
@@ -0,0 +1,641 @@
+// 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 http2
+
+// A list of the possible cipher suite ids. Taken from
+// https://www.iana.org/assignments/tls-parameters/tls-parameters.txt
+
+const (
+ cipher_TLS_NULL_WITH_NULL_NULL uint16 = 0x0000
+ cipher_TLS_RSA_WITH_NULL_MD5 uint16 = 0x0001
+ cipher_TLS_RSA_WITH_NULL_SHA uint16 = 0x0002
+ cipher_TLS_RSA_EXPORT_WITH_RC4_40_MD5 uint16 = 0x0003
+ cipher_TLS_RSA_WITH_RC4_128_MD5 uint16 = 0x0004
+ cipher_TLS_RSA_WITH_RC4_128_SHA uint16 = 0x0005
+ cipher_TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 uint16 = 0x0006
+ cipher_TLS_RSA_WITH_IDEA_CBC_SHA uint16 = 0x0007
+ cipher_TLS_RSA_EXPORT_WITH_DES40_CBC_SHA uint16 = 0x0008
+ cipher_TLS_RSA_WITH_DES_CBC_SHA uint16 = 0x0009
+ cipher_TLS_RSA_WITH_3DES_EDE_CBC_SHA uint16 = 0x000A
+ cipher_TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA uint16 = 0x000B
+ cipher_TLS_DH_DSS_WITH_DES_CBC_SHA uint16 = 0x000C
+ cipher_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA uint16 = 0x000D
+ cipher_TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA uint16 = 0x000E
+ cipher_TLS_DH_RSA_WITH_DES_CBC_SHA uint16 = 0x000F
+ cipher_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA uint16 = 0x0010
+ cipher_TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA uint16 = 0x0011
+ cipher_TLS_DHE_DSS_WITH_DES_CBC_SHA uint16 = 0x0012
+ cipher_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA uint16 = 0x0013
+ cipher_TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA uint16 = 0x0014
+ cipher_TLS_DHE_RSA_WITH_DES_CBC_SHA uint16 = 0x0015
+ cipher_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA uint16 = 0x0016
+ cipher_TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 uint16 = 0x0017
+ cipher_TLS_DH_anon_WITH_RC4_128_MD5 uint16 = 0x0018
+ cipher_TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA uint16 = 0x0019
+ cipher_TLS_DH_anon_WITH_DES_CBC_SHA uint16 = 0x001A
+ cipher_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA uint16 = 0x001B
+ // Reserved uint16 = 0x001C-1D
+ cipher_TLS_KRB5_WITH_DES_CBC_SHA uint16 = 0x001E
+ cipher_TLS_KRB5_WITH_3DES_EDE_CBC_SHA uint16 = 0x001F
+ cipher_TLS_KRB5_WITH_RC4_128_SHA uint16 = 0x0020
+ cipher_TLS_KRB5_WITH_IDEA_CBC_SHA uint16 = 0x0021
+ cipher_TLS_KRB5_WITH_DES_CBC_MD5 uint16 = 0x0022
+ cipher_TLS_KRB5_WITH_3DES_EDE_CBC_MD5 uint16 = 0x0023
+ cipher_TLS_KRB5_WITH_RC4_128_MD5 uint16 = 0x0024
+ cipher_TLS_KRB5_WITH_IDEA_CBC_MD5 uint16 = 0x0025
+ cipher_TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA uint16 = 0x0026
+ cipher_TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA uint16 = 0x0027
+ cipher_TLS_KRB5_EXPORT_WITH_RC4_40_SHA uint16 = 0x0028
+ cipher_TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 uint16 = 0x0029
+ cipher_TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5 uint16 = 0x002A
+ cipher_TLS_KRB5_EXPORT_WITH_RC4_40_MD5 uint16 = 0x002B
+ cipher_TLS_PSK_WITH_NULL_SHA uint16 = 0x002C
+ cipher_TLS_DHE_PSK_WITH_NULL_SHA uint16 = 0x002D
+ cipher_TLS_RSA_PSK_WITH_NULL_SHA uint16 = 0x002E
+ cipher_TLS_RSA_WITH_AES_128_CBC_SHA uint16 = 0x002F
+ cipher_TLS_DH_DSS_WITH_AES_128_CBC_SHA uint16 = 0x0030
+ cipher_TLS_DH_RSA_WITH_AES_128_CBC_SHA uint16 = 0x0031
+ cipher_TLS_DHE_DSS_WITH_AES_128_CBC_SHA uint16 = 0x0032
+ cipher_TLS_DHE_RSA_WITH_AES_128_CBC_SHA uint16 = 0x0033
+ cipher_TLS_DH_anon_WITH_AES_128_CBC_SHA uint16 = 0x0034
+ cipher_TLS_RSA_WITH_AES_256_CBC_SHA uint16 = 0x0035
+ cipher_TLS_DH_DSS_WITH_AES_256_CBC_SHA uint16 = 0x0036
+ cipher_TLS_DH_RSA_WITH_AES_256_CBC_SHA uint16 = 0x0037
+ cipher_TLS_DHE_DSS_WITH_AES_256_CBC_SHA uint16 = 0x0038
+ cipher_TLS_DHE_RSA_WITH_AES_256_CBC_SHA uint16 = 0x0039
+ cipher_TLS_DH_anon_WITH_AES_256_CBC_SHA uint16 = 0x003A
+ cipher_TLS_RSA_WITH_NULL_SHA256 uint16 = 0x003B
+ cipher_TLS_RSA_WITH_AES_128_CBC_SHA256 uint16 = 0x003C
+ cipher_TLS_RSA_WITH_AES_256_CBC_SHA256 uint16 = 0x003D
+ cipher_TLS_DH_DSS_WITH_AES_128_CBC_SHA256 uint16 = 0x003E
+ cipher_TLS_DH_RSA_WITH_AES_128_CBC_SHA256 uint16 = 0x003F
+ cipher_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 uint16 = 0x0040
+ cipher_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA uint16 = 0x0041
+ cipher_TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA uint16 = 0x0042
+ cipher_TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA uint16 = 0x0043
+ cipher_TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA uint16 = 0x0044
+ cipher_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA uint16 = 0x0045
+ cipher_TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA uint16 = 0x0046
+ // Reserved uint16 = 0x0047-4F
+ // Reserved uint16 = 0x0050-58
+ // Reserved uint16 = 0x0059-5C
+ // Unassigned uint16 = 0x005D-5F
+ // Reserved uint16 = 0x0060-66
+ cipher_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 uint16 = 0x0067
+ cipher_TLS_DH_DSS_WITH_AES_256_CBC_SHA256 uint16 = 0x0068
+ cipher_TLS_DH_RSA_WITH_AES_256_CBC_SHA256 uint16 = 0x0069
+ cipher_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 uint16 = 0x006A
+ cipher_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 uint16 = 0x006B
+ cipher_TLS_DH_anon_WITH_AES_128_CBC_SHA256 uint16 = 0x006C
+ cipher_TLS_DH_anon_WITH_AES_256_CBC_SHA256 uint16 = 0x006D
+ // Unassigned uint16 = 0x006E-83
+ cipher_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA uint16 = 0x0084
+ cipher_TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA uint16 = 0x0085
+ cipher_TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA uint16 = 0x0086
+ cipher_TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA uint16 = 0x0087
+ cipher_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA uint16 = 0x0088
+ cipher_TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA uint16 = 0x0089
+ cipher_TLS_PSK_WITH_RC4_128_SHA uint16 = 0x008A
+ cipher_TLS_PSK_WITH_3DES_EDE_CBC_SHA uint16 = 0x008B
+ cipher_TLS_PSK_WITH_AES_128_CBC_SHA uint16 = 0x008C
+ cipher_TLS_PSK_WITH_AES_256_CBC_SHA uint16 = 0x008D
+ cipher_TLS_DHE_PSK_WITH_RC4_128_SHA uint16 = 0x008E
+ cipher_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA uint16 = 0x008F
+ cipher_TLS_DHE_PSK_WITH_AES_128_CBC_SHA uint16 = 0x0090
+ cipher_TLS_DHE_PSK_WITH_AES_256_CBC_SHA uint16 = 0x0091
+ cipher_TLS_RSA_PSK_WITH_RC4_128_SHA uint16 = 0x0092
+ cipher_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA uint16 = 0x0093
+ cipher_TLS_RSA_PSK_WITH_AES_128_CBC_SHA uint16 = 0x0094
+ cipher_TLS_RSA_PSK_WITH_AES_256_CBC_SHA uint16 = 0x0095
+ cipher_TLS_RSA_WITH_SEED_CBC_SHA uint16 = 0x0096
+ cipher_TLS_DH_DSS_WITH_SEED_CBC_SHA uint16 = 0x0097
+ cipher_TLS_DH_RSA_WITH_SEED_CBC_SHA uint16 = 0x0098
+ cipher_TLS_DHE_DSS_WITH_SEED_CBC_SHA uint16 = 0x0099
+ cipher_TLS_DHE_RSA_WITH_SEED_CBC_SHA uint16 = 0x009A
+ cipher_TLS_DH_anon_WITH_SEED_CBC_SHA uint16 = 0x009B
+ cipher_TLS_RSA_WITH_AES_128_GCM_SHA256 uint16 = 0x009C
+ cipher_TLS_RSA_WITH_AES_256_GCM_SHA384 uint16 = 0x009D
+ cipher_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 uint16 = 0x009E
+ cipher_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 uint16 = 0x009F
+ cipher_TLS_DH_RSA_WITH_AES_128_GCM_SHA256 uint16 = 0x00A0
+ cipher_TLS_DH_RSA_WITH_AES_256_GCM_SHA384 uint16 = 0x00A1
+ cipher_TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 uint16 = 0x00A2
+ cipher_TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 uint16 = 0x00A3
+ cipher_TLS_DH_DSS_WITH_AES_128_GCM_SHA256 uint16 = 0x00A4
+ cipher_TLS_DH_DSS_WITH_AES_256_GCM_SHA384 uint16 = 0x00A5
+ cipher_TLS_DH_anon_WITH_AES_128_GCM_SHA256 uint16 = 0x00A6
+ cipher_TLS_DH_anon_WITH_AES_256_GCM_SHA384 uint16 = 0x00A7
+ cipher_TLS_PSK_WITH_AES_128_GCM_SHA256 uint16 = 0x00A8
+ cipher_TLS_PSK_WITH_AES_256_GCM_SHA384 uint16 = 0x00A9
+ cipher_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 uint16 = 0x00AA
+ cipher_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 uint16 = 0x00AB
+ cipher_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 uint16 = 0x00AC
+ cipher_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 uint16 = 0x00AD
+ cipher_TLS_PSK_WITH_AES_128_CBC_SHA256 uint16 = 0x00AE
+ cipher_TLS_PSK_WITH_AES_256_CBC_SHA384 uint16 = 0x00AF
+ cipher_TLS_PSK_WITH_NULL_SHA256 uint16 = 0x00B0
+ cipher_TLS_PSK_WITH_NULL_SHA384 uint16 = 0x00B1
+ cipher_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 uint16 = 0x00B2
+ cipher_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 uint16 = 0x00B3
+ cipher_TLS_DHE_PSK_WITH_NULL_SHA256 uint16 = 0x00B4
+ cipher_TLS_DHE_PSK_WITH_NULL_SHA384 uint16 = 0x00B5
+ cipher_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 uint16 = 0x00B6
+ cipher_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 uint16 = 0x00B7
+ cipher_TLS_RSA_PSK_WITH_NULL_SHA256 uint16 = 0x00B8
+ cipher_TLS_RSA_PSK_WITH_NULL_SHA384 uint16 = 0x00B9
+ cipher_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0x00BA
+ cipher_TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0x00BB
+ cipher_TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0x00BC
+ cipher_TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0x00BD
+ cipher_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0x00BE
+ cipher_TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0x00BF
+ cipher_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 uint16 = 0x00C0
+ cipher_TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 uint16 = 0x00C1
+ cipher_TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 uint16 = 0x00C2
+ cipher_TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 uint16 = 0x00C3
+ cipher_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 uint16 = 0x00C4
+ cipher_TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256 uint16 = 0x00C5
+ // Unassigned uint16 = 0x00C6-FE
+ cipher_TLS_EMPTY_RENEGOTIATION_INFO_SCSV uint16 = 0x00FF
+ // Unassigned uint16 = 0x01-55,*
+ cipher_TLS_FALLBACK_SCSV uint16 = 0x5600
+ // Unassigned uint16 = 0x5601 - 0xC000
+ cipher_TLS_ECDH_ECDSA_WITH_NULL_SHA uint16 = 0xC001
+ cipher_TLS_ECDH_ECDSA_WITH_RC4_128_SHA uint16 = 0xC002
+ cipher_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA uint16 = 0xC003
+ cipher_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA uint16 = 0xC004
+ cipher_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA uint16 = 0xC005
+ cipher_TLS_ECDHE_ECDSA_WITH_NULL_SHA uint16 = 0xC006
+ cipher_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA uint16 = 0xC007
+ cipher_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA uint16 = 0xC008
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA uint16 = 0xC009
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA uint16 = 0xC00A
+ cipher_TLS_ECDH_RSA_WITH_NULL_SHA uint16 = 0xC00B
+ cipher_TLS_ECDH_RSA_WITH_RC4_128_SHA uint16 = 0xC00C
+ cipher_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA uint16 = 0xC00D
+ cipher_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA uint16 = 0xC00E
+ cipher_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA uint16 = 0xC00F
+ cipher_TLS_ECDHE_RSA_WITH_NULL_SHA uint16 = 0xC010
+ cipher_TLS_ECDHE_RSA_WITH_RC4_128_SHA uint16 = 0xC011
+ cipher_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA uint16 = 0xC012
+ cipher_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA uint16 = 0xC013
+ cipher_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA uint16 = 0xC014
+ cipher_TLS_ECDH_anon_WITH_NULL_SHA uint16 = 0xC015
+ cipher_TLS_ECDH_anon_WITH_RC4_128_SHA uint16 = 0xC016
+ cipher_TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA uint16 = 0xC017
+ cipher_TLS_ECDH_anon_WITH_AES_128_CBC_SHA uint16 = 0xC018
+ cipher_TLS_ECDH_anon_WITH_AES_256_CBC_SHA uint16 = 0xC019
+ cipher_TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA uint16 = 0xC01A
+ cipher_TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA uint16 = 0xC01B
+ cipher_TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA uint16 = 0xC01C
+ cipher_TLS_SRP_SHA_WITH_AES_128_CBC_SHA uint16 = 0xC01D
+ cipher_TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA uint16 = 0xC01E
+ cipher_TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA uint16 = 0xC01F
+ cipher_TLS_SRP_SHA_WITH_AES_256_CBC_SHA uint16 = 0xC020
+ cipher_TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA uint16 = 0xC021
+ cipher_TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA uint16 = 0xC022
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 uint16 = 0xC023
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 uint16 = 0xC024
+ cipher_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 uint16 = 0xC025
+ cipher_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 uint16 = 0xC026
+ cipher_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 uint16 = 0xC027
+ cipher_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 uint16 = 0xC028
+ cipher_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 uint16 = 0xC029
+ cipher_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 uint16 = 0xC02A
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 uint16 = 0xC02B
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 uint16 = 0xC02C
+ cipher_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 uint16 = 0xC02D
+ cipher_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 uint16 = 0xC02E
+ cipher_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 uint16 = 0xC02F
+ cipher_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 uint16 = 0xC030
+ cipher_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 uint16 = 0xC031
+ cipher_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 uint16 = 0xC032
+ cipher_TLS_ECDHE_PSK_WITH_RC4_128_SHA uint16 = 0xC033
+ cipher_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA uint16 = 0xC034
+ cipher_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA uint16 = 0xC035
+ cipher_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA uint16 = 0xC036
+ cipher_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 uint16 = 0xC037
+ cipher_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 uint16 = 0xC038
+ cipher_TLS_ECDHE_PSK_WITH_NULL_SHA uint16 = 0xC039
+ cipher_TLS_ECDHE_PSK_WITH_NULL_SHA256 uint16 = 0xC03A
+ cipher_TLS_ECDHE_PSK_WITH_NULL_SHA384 uint16 = 0xC03B
+ cipher_TLS_RSA_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC03C
+ cipher_TLS_RSA_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC03D
+ cipher_TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC03E
+ cipher_TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC03F
+ cipher_TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC040
+ cipher_TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC041
+ cipher_TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC042
+ cipher_TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC043
+ cipher_TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC044
+ cipher_TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC045
+ cipher_TLS_DH_anon_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC046
+ cipher_TLS_DH_anon_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC047
+ cipher_TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC048
+ cipher_TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC049
+ cipher_TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC04A
+ cipher_TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC04B
+ cipher_TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC04C
+ cipher_TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC04D
+ cipher_TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC04E
+ cipher_TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC04F
+ cipher_TLS_RSA_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC050
+ cipher_TLS_RSA_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC051
+ cipher_TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC052
+ cipher_TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC053
+ cipher_TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC054
+ cipher_TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC055
+ cipher_TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC056
+ cipher_TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC057
+ cipher_TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC058
+ cipher_TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC059
+ cipher_TLS_DH_anon_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC05A
+ cipher_TLS_DH_anon_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC05B
+ cipher_TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC05C
+ cipher_TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC05D
+ cipher_TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC05E
+ cipher_TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC05F
+ cipher_TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC060
+ cipher_TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC061
+ cipher_TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC062
+ cipher_TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC063
+ cipher_TLS_PSK_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC064
+ cipher_TLS_PSK_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC065
+ cipher_TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC066
+ cipher_TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC067
+ cipher_TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC068
+ cipher_TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC069
+ cipher_TLS_PSK_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC06A
+ cipher_TLS_PSK_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC06B
+ cipher_TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC06C
+ cipher_TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC06D
+ cipher_TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256 uint16 = 0xC06E
+ cipher_TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384 uint16 = 0xC06F
+ cipher_TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256 uint16 = 0xC070
+ cipher_TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384 uint16 = 0xC071
+ cipher_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0xC072
+ cipher_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 uint16 = 0xC073
+ cipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0xC074
+ cipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 uint16 = 0xC075
+ cipher_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0xC076
+ cipher_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 uint16 = 0xC077
+ cipher_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0xC078
+ cipher_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 uint16 = 0xC079
+ cipher_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC07A
+ cipher_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC07B
+ cipher_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC07C
+ cipher_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC07D
+ cipher_TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC07E
+ cipher_TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC07F
+ cipher_TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC080
+ cipher_TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC081
+ cipher_TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC082
+ cipher_TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC083
+ cipher_TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC084
+ cipher_TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC085
+ cipher_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC086
+ cipher_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC087
+ cipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC088
+ cipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC089
+ cipher_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC08A
+ cipher_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC08B
+ cipher_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC08C
+ cipher_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC08D
+ cipher_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC08E
+ cipher_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC08F
+ cipher_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC090
+ cipher_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC091
+ cipher_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC092
+ cipher_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC093
+ cipher_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0xC094
+ cipher_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 uint16 = 0xC095
+ cipher_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0xC096
+ cipher_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 uint16 = 0xC097
+ cipher_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0xC098
+ cipher_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 uint16 = 0xC099
+ cipher_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0xC09A
+ cipher_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 uint16 = 0xC09B
+ cipher_TLS_RSA_WITH_AES_128_CCM uint16 = 0xC09C
+ cipher_TLS_RSA_WITH_AES_256_CCM uint16 = 0xC09D
+ cipher_TLS_DHE_RSA_WITH_AES_128_CCM uint16 = 0xC09E
+ cipher_TLS_DHE_RSA_WITH_AES_256_CCM uint16 = 0xC09F
+ cipher_TLS_RSA_WITH_AES_128_CCM_8 uint16 = 0xC0A0
+ cipher_TLS_RSA_WITH_AES_256_CCM_8 uint16 = 0xC0A1
+ cipher_TLS_DHE_RSA_WITH_AES_128_CCM_8 uint16 = 0xC0A2
+ cipher_TLS_DHE_RSA_WITH_AES_256_CCM_8 uint16 = 0xC0A3
+ cipher_TLS_PSK_WITH_AES_128_CCM uint16 = 0xC0A4
+ cipher_TLS_PSK_WITH_AES_256_CCM uint16 = 0xC0A5
+ cipher_TLS_DHE_PSK_WITH_AES_128_CCM uint16 = 0xC0A6
+ cipher_TLS_DHE_PSK_WITH_AES_256_CCM uint16 = 0xC0A7
+ cipher_TLS_PSK_WITH_AES_128_CCM_8 uint16 = 0xC0A8
+ cipher_TLS_PSK_WITH_AES_256_CCM_8 uint16 = 0xC0A9
+ cipher_TLS_PSK_DHE_WITH_AES_128_CCM_8 uint16 = 0xC0AA
+ cipher_TLS_PSK_DHE_WITH_AES_256_CCM_8 uint16 = 0xC0AB
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_128_CCM uint16 = 0xC0AC
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_256_CCM uint16 = 0xC0AD
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 uint16 = 0xC0AE
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 uint16 = 0xC0AF
+ // Unassigned uint16 = 0xC0B0-FF
+ // Unassigned uint16 = 0xC1-CB,*
+ // Unassigned uint16 = 0xCC00-A7
+ cipher_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xCCA8
+ cipher_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xCCA9
+ cipher_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xCCAA
+ cipher_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xCCAB
+ cipher_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xCCAC
+ cipher_TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xCCAD
+ cipher_TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xCCAE
+)
+
+// isBadCipher reports whether the cipher is blacklisted by the HTTP/2 spec.
+// References:
+// https://tools.ietf.org/html/rfc7540#appendix-A
+// Reject cipher suites from Appendix A.
+// "This list includes those cipher suites that do not
+// offer an ephemeral key exchange and those that are
+// based on the TLS null, stream or block cipher type"
+func isBadCipher(cipher uint16) bool {
+ switch cipher {
+ case cipher_TLS_NULL_WITH_NULL_NULL,
+ cipher_TLS_RSA_WITH_NULL_MD5,
+ cipher_TLS_RSA_WITH_NULL_SHA,
+ cipher_TLS_RSA_EXPORT_WITH_RC4_40_MD5,
+ cipher_TLS_RSA_WITH_RC4_128_MD5,
+ cipher_TLS_RSA_WITH_RC4_128_SHA,
+ cipher_TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5,
+ cipher_TLS_RSA_WITH_IDEA_CBC_SHA,
+ cipher_TLS_RSA_EXPORT_WITH_DES40_CBC_SHA,
+ cipher_TLS_RSA_WITH_DES_CBC_SHA,
+ cipher_TLS_RSA_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA,
+ cipher_TLS_DH_DSS_WITH_DES_CBC_SHA,
+ cipher_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA,
+ cipher_TLS_DH_RSA_WITH_DES_CBC_SHA,
+ cipher_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA,
+ cipher_TLS_DHE_DSS_WITH_DES_CBC_SHA,
+ cipher_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,
+ cipher_TLS_DHE_RSA_WITH_DES_CBC_SHA,
+ cipher_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_DH_anon_EXPORT_WITH_RC4_40_MD5,
+ cipher_TLS_DH_anon_WITH_RC4_128_MD5,
+ cipher_TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA,
+ cipher_TLS_DH_anon_WITH_DES_CBC_SHA,
+ cipher_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_KRB5_WITH_DES_CBC_SHA,
+ cipher_TLS_KRB5_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_KRB5_WITH_RC4_128_SHA,
+ cipher_TLS_KRB5_WITH_IDEA_CBC_SHA,
+ cipher_TLS_KRB5_WITH_DES_CBC_MD5,
+ cipher_TLS_KRB5_WITH_3DES_EDE_CBC_MD5,
+ cipher_TLS_KRB5_WITH_RC4_128_MD5,
+ cipher_TLS_KRB5_WITH_IDEA_CBC_MD5,
+ cipher_TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA,
+ cipher_TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA,
+ cipher_TLS_KRB5_EXPORT_WITH_RC4_40_SHA,
+ cipher_TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5,
+ cipher_TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5,
+ cipher_TLS_KRB5_EXPORT_WITH_RC4_40_MD5,
+ cipher_TLS_PSK_WITH_NULL_SHA,
+ cipher_TLS_DHE_PSK_WITH_NULL_SHA,
+ cipher_TLS_RSA_PSK_WITH_NULL_SHA,
+ cipher_TLS_RSA_WITH_AES_128_CBC_SHA,
+ cipher_TLS_DH_DSS_WITH_AES_128_CBC_SHA,
+ cipher_TLS_DH_RSA_WITH_AES_128_CBC_SHA,
+ cipher_TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
+ cipher_TLS_DHE_RSA_WITH_AES_128_CBC_SHA,
+ cipher_TLS_DH_anon_WITH_AES_128_CBC_SHA,
+ cipher_TLS_RSA_WITH_AES_256_CBC_SHA,
+ cipher_TLS_DH_DSS_WITH_AES_256_CBC_SHA,
+ cipher_TLS_DH_RSA_WITH_AES_256_CBC_SHA,
+ cipher_TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
+ cipher_TLS_DHE_RSA_WITH_AES_256_CBC_SHA,
+ cipher_TLS_DH_anon_WITH_AES_256_CBC_SHA,
+ cipher_TLS_RSA_WITH_NULL_SHA256,
+ cipher_TLS_RSA_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_RSA_WITH_AES_256_CBC_SHA256,
+ cipher_TLS_DH_DSS_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_DH_RSA_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA,
+ cipher_TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
+ cipher_TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
+ cipher_TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,
+ cipher_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,
+ cipher_TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA,
+ cipher_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_DH_DSS_WITH_AES_256_CBC_SHA256,
+ cipher_TLS_DH_RSA_WITH_AES_256_CBC_SHA256,
+ cipher_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,
+ cipher_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,
+ cipher_TLS_DH_anon_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_DH_anon_WITH_AES_256_CBC_SHA256,
+ cipher_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA,
+ cipher_TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
+ cipher_TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
+ cipher_TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,
+ cipher_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,
+ cipher_TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA,
+ cipher_TLS_PSK_WITH_RC4_128_SHA,
+ cipher_TLS_PSK_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_PSK_WITH_AES_128_CBC_SHA,
+ cipher_TLS_PSK_WITH_AES_256_CBC_SHA,
+ cipher_TLS_DHE_PSK_WITH_RC4_128_SHA,
+ cipher_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_DHE_PSK_WITH_AES_128_CBC_SHA,
+ cipher_TLS_DHE_PSK_WITH_AES_256_CBC_SHA,
+ cipher_TLS_RSA_PSK_WITH_RC4_128_SHA,
+ cipher_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_RSA_PSK_WITH_AES_128_CBC_SHA,
+ cipher_TLS_RSA_PSK_WITH_AES_256_CBC_SHA,
+ cipher_TLS_RSA_WITH_SEED_CBC_SHA,
+ cipher_TLS_DH_DSS_WITH_SEED_CBC_SHA,
+ cipher_TLS_DH_RSA_WITH_SEED_CBC_SHA,
+ cipher_TLS_DHE_DSS_WITH_SEED_CBC_SHA,
+ cipher_TLS_DHE_RSA_WITH_SEED_CBC_SHA,
+ cipher_TLS_DH_anon_WITH_SEED_CBC_SHA,
+ cipher_TLS_RSA_WITH_AES_128_GCM_SHA256,
+ cipher_TLS_RSA_WITH_AES_256_GCM_SHA384,
+ cipher_TLS_DH_RSA_WITH_AES_128_GCM_SHA256,
+ cipher_TLS_DH_RSA_WITH_AES_256_GCM_SHA384,
+ cipher_TLS_DH_DSS_WITH_AES_128_GCM_SHA256,
+ cipher_TLS_DH_DSS_WITH_AES_256_GCM_SHA384,
+ cipher_TLS_DH_anon_WITH_AES_128_GCM_SHA256,
+ cipher_TLS_DH_anon_WITH_AES_256_GCM_SHA384,
+ cipher_TLS_PSK_WITH_AES_128_GCM_SHA256,
+ cipher_TLS_PSK_WITH_AES_256_GCM_SHA384,
+ cipher_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256,
+ cipher_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384,
+ cipher_TLS_PSK_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_PSK_WITH_AES_256_CBC_SHA384,
+ cipher_TLS_PSK_WITH_NULL_SHA256,
+ cipher_TLS_PSK_WITH_NULL_SHA384,
+ cipher_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384,
+ cipher_TLS_DHE_PSK_WITH_NULL_SHA256,
+ cipher_TLS_DHE_PSK_WITH_NULL_SHA384,
+ cipher_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384,
+ cipher_TLS_RSA_PSK_WITH_NULL_SHA256,
+ cipher_TLS_RSA_PSK_WITH_NULL_SHA384,
+ cipher_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256,
+ cipher_TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256,
+ cipher_TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256,
+ cipher_TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,
+ cipher_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,
+ cipher_TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256,
+ cipher_TLS_EMPTY_RENEGOTIATION_INFO_SCSV,
+ cipher_TLS_ECDH_ECDSA_WITH_NULL_SHA,
+ cipher_TLS_ECDH_ECDSA_WITH_RC4_128_SHA,
+ cipher_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,
+ cipher_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,
+ cipher_TLS_ECDHE_ECDSA_WITH_NULL_SHA,
+ cipher_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
+ cipher_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
+ cipher_TLS_ECDH_RSA_WITH_NULL_SHA,
+ cipher_TLS_ECDH_RSA_WITH_RC4_128_SHA,
+ cipher_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,
+ cipher_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,
+ cipher_TLS_ECDHE_RSA_WITH_NULL_SHA,
+ cipher_TLS_ECDHE_RSA_WITH_RC4_128_SHA,
+ cipher_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
+ cipher_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
+ cipher_TLS_ECDH_anon_WITH_NULL_SHA,
+ cipher_TLS_ECDH_anon_WITH_RC4_128_SHA,
+ cipher_TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_ECDH_anon_WITH_AES_128_CBC_SHA,
+ cipher_TLS_ECDH_anon_WITH_AES_256_CBC_SHA,
+ cipher_TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_SRP_SHA_WITH_AES_128_CBC_SHA,
+ cipher_TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,
+ cipher_TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,
+ cipher_TLS_SRP_SHA_WITH_AES_256_CBC_SHA,
+ cipher_TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,
+ cipher_TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
+ cipher_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,
+ cipher_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
+ cipher_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,
+ cipher_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,
+ cipher_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
+ cipher_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,
+ cipher_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,
+ cipher_TLS_ECDHE_PSK_WITH_RC4_128_SHA,
+ cipher_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,
+ cipher_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA,
+ cipher_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA,
+ cipher_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256,
+ cipher_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384,
+ cipher_TLS_ECDHE_PSK_WITH_NULL_SHA,
+ cipher_TLS_ECDHE_PSK_WITH_NULL_SHA256,
+ cipher_TLS_ECDHE_PSK_WITH_NULL_SHA384,
+ cipher_TLS_RSA_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_RSA_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_DH_anon_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_DH_anon_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_RSA_WITH_ARIA_128_GCM_SHA256,
+ cipher_TLS_RSA_WITH_ARIA_256_GCM_SHA384,
+ cipher_TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256,
+ cipher_TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384,
+ cipher_TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256,
+ cipher_TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384,
+ cipher_TLS_DH_anon_WITH_ARIA_128_GCM_SHA256,
+ cipher_TLS_DH_anon_WITH_ARIA_256_GCM_SHA384,
+ cipher_TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256,
+ cipher_TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384,
+ cipher_TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256,
+ cipher_TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384,
+ cipher_TLS_PSK_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_PSK_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_PSK_WITH_ARIA_128_GCM_SHA256,
+ cipher_TLS_PSK_WITH_ARIA_256_GCM_SHA384,
+ cipher_TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256,
+ cipher_TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384,
+ cipher_TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256,
+ cipher_TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384,
+ cipher_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
+ cipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,
+ cipher_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,
+ cipher_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384,
+ cipher_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256,
+ cipher_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384,
+ cipher_TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256,
+ cipher_TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384,
+ cipher_TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256,
+ cipher_TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384,
+ cipher_TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256,
+ cipher_TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384,
+ cipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256,
+ cipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384,
+ cipher_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256,
+ cipher_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384,
+ cipher_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256,
+ cipher_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384,
+ cipher_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256,
+ cipher_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384,
+ cipher_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384,
+ cipher_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
+ cipher_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,
+ cipher_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,
+ cipher_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,
+ cipher_TLS_RSA_WITH_AES_128_CCM,
+ cipher_TLS_RSA_WITH_AES_256_CCM,
+ cipher_TLS_RSA_WITH_AES_128_CCM_8,
+ cipher_TLS_RSA_WITH_AES_256_CCM_8,
+ cipher_TLS_PSK_WITH_AES_128_CCM,
+ cipher_TLS_PSK_WITH_AES_256_CCM,
+ cipher_TLS_PSK_WITH_AES_128_CCM_8,
+ cipher_TLS_PSK_WITH_AES_256_CCM_8:
+ return true
+ default:
+ return false
+ }
+}
diff --git a/vendor/golang.org/x/net/http2/client_conn_pool.go b/vendor/golang.org/x/net/http2/client_conn_pool.go
index b13941258..f4d9b5ece 100644
--- a/vendor/golang.org/x/net/http2/client_conn_pool.go
+++ b/vendor/golang.org/x/net/http2/client_conn_pool.go
@@ -52,9 +52,31 @@ const (
noDialOnMiss = false
)
+// shouldTraceGetConn reports whether getClientConn should call any
+// ClientTrace.GetConn hook associated with the http.Request.
+//
+// This complexity is needed to avoid double calls of the GetConn hook
+// during the back-and-forth between net/http and x/net/http2 (when the
+// net/http.Transport is upgraded to also speak http2), as well as support
+// the case where x/net/http2 is being used directly.
+func (p *clientConnPool) shouldTraceGetConn(st clientConnIdleState) bool {
+ // If our Transport wasn't made via ConfigureTransport, always
+ // trace the GetConn hook if provided, because that means the
+ // http2 package is being used directly and it's the one
+ // dialing, as opposed to net/http.
+ if _, ok := p.t.ConnPool.(noDialClientConnPool); !ok {
+ return true
+ }
+ // Otherwise, only use the GetConn hook if this connection has
+ // been used previously for other requests. For fresh
+ // connections, the net/http package does the dialing.
+ return !st.freshConn
+}
+
func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMiss bool) (*ClientConn, error) {
if isConnectionCloseRequest(req) && dialOnMiss {
// It gets its own connection.
+ traceGetConn(req, addr)
const singleUse = true
cc, err := p.t.dialClientConn(addr, singleUse)
if err != nil {
@@ -64,7 +86,10 @@ func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMis
}
p.mu.Lock()
for _, cc := range p.conns[addr] {
- if cc.CanTakeNewRequest() {
+ if st := cc.idleState(); st.canTakeNewRequest {
+ if p.shouldTraceGetConn(st) {
+ traceGetConn(req, addr)
+ }
p.mu.Unlock()
return cc, nil
}
@@ -73,6 +98,7 @@ func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMis
p.mu.Unlock()
return nil, ErrNoCachedConn
}
+ traceGetConn(req, addr)
call := p.getStartDialLocked(addr)
p.mu.Unlock()
<-call.done
@@ -247,7 +273,7 @@ func filterOutClientConn(in []*ClientConn, exclude *ClientConn) []*ClientConn {
}
// noDialClientConnPool is an implementation of http2.ClientConnPool
-// which never dials. We let the HTTP/1.1 client dial and use its TLS
+// which never dials. We let the HTTP/1.1 client dial and use its TLS
// connection instead.
type noDialClientConnPool struct{ *clientConnPool }
diff --git a/vendor/golang.org/x/net/http2/configure_transport.go b/vendor/golang.org/x/net/http2/configure_transport.go
deleted file mode 100644
index 4f720f530..000000000
--- a/vendor/golang.org/x/net/http2/configure_transport.go
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build go1.6
-
-package http2
-
-import (
- "crypto/tls"
- "fmt"
- "net/http"
-)
-
-func configureTransport(t1 *http.Transport) (*Transport, error) {
- connPool := new(clientConnPool)
- t2 := &Transport{
- ConnPool: noDialClientConnPool{connPool},
- t1: t1,
- }
- connPool.t = t2
- if err := registerHTTPSProtocol(t1, noDialH2RoundTripper{t2}); err != nil {
- return nil, err
- }
- if t1.TLSClientConfig == nil {
- t1.TLSClientConfig = new(tls.Config)
- }
- if !strSliceContains(t1.TLSClientConfig.NextProtos, "h2") {
- t1.TLSClientConfig.NextProtos = append([]string{"h2"}, t1.TLSClientConfig.NextProtos...)
- }
- if !strSliceContains(t1.TLSClientConfig.NextProtos, "http/1.1") {
- t1.TLSClientConfig.NextProtos = append(t1.TLSClientConfig.NextProtos, "http/1.1")
- }
- upgradeFn := func(authority string, c *tls.Conn) http.RoundTripper {
- addr := authorityAddr("https", authority)
- if used, err := connPool.addConnIfNeeded(addr, t2, c); err != nil {
- go c.Close()
- return erringRoundTripper{err}
- } else if !used {
- // Turns out we don't need this c.
- // For example, two goroutines made requests to the same host
- // at the same time, both kicking off TCP dials. (since protocol
- // was unknown)
- go c.Close()
- }
- return t2
- }
- if m := t1.TLSNextProto; len(m) == 0 {
- t1.TLSNextProto = map[string]func(string, *tls.Conn) http.RoundTripper{
- "h2": upgradeFn,
- }
- } else {
- m["h2"] = upgradeFn
- }
- return t2, nil
-}
-
-// registerHTTPSProtocol calls Transport.RegisterProtocol but
-// convering panics into errors.
-func registerHTTPSProtocol(t *http.Transport, rt http.RoundTripper) (err error) {
- defer func() {
- if e := recover(); e != nil {
- err = fmt.Errorf("%v", e)
- }
- }()
- t.RegisterProtocol("https", rt)
- return nil
-}
-
-// noDialH2RoundTripper is a RoundTripper which only tries to complete the request
-// if there's already has a cached connection to the host.
-type noDialH2RoundTripper struct{ t *Transport }
-
-func (rt noDialH2RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
- res, err := rt.t.RoundTrip(req)
- if err == ErrNoCachedConn {
- return nil, http.ErrSkipAltProtocol
- }
- return res, err
-}
diff --git a/vendor/golang.org/x/net/http2/databuffer.go b/vendor/golang.org/x/net/http2/databuffer.go
new file mode 100644
index 000000000..a3067f8de
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/databuffer.go
@@ -0,0 +1,146 @@
+// 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 http2
+
+import (
+ "errors"
+ "fmt"
+ "sync"
+)
+
+// Buffer chunks are allocated from a pool to reduce pressure on GC.
+// The maximum wasted space per dataBuffer is 2x the largest size class,
+// which happens when the dataBuffer has multiple chunks and there is
+// one unread byte in both the first and last chunks. We use a few size
+// classes to minimize overheads for servers that typically receive very
+// small request bodies.
+//
+// TODO: Benchmark to determine if the pools are necessary. The GC may have
+// improved enough that we can instead allocate chunks like this:
+// make([]byte, max(16<<10, expectedBytesRemaining))
+var (
+ dataChunkSizeClasses = []int{
+ 1 << 10,
+ 2 << 10,
+ 4 << 10,
+ 8 << 10,
+ 16 << 10,
+ }
+ dataChunkPools = [...]sync.Pool{
+ {New: func() interface{} { return make([]byte, 1<<10) }},
+ {New: func() interface{} { return make([]byte, 2<<10) }},
+ {New: func() interface{} { return make([]byte, 4<<10) }},
+ {New: func() interface{} { return make([]byte, 8<<10) }},
+ {New: func() interface{} { return make([]byte, 16<<10) }},
+ }
+)
+
+func getDataBufferChunk(size int64) []byte {
+ i := 0
+ for ; i < len(dataChunkSizeClasses)-1; i++ {
+ if size <= int64(dataChunkSizeClasses[i]) {
+ break
+ }
+ }
+ return dataChunkPools[i].Get().([]byte)
+}
+
+func putDataBufferChunk(p []byte) {
+ for i, n := range dataChunkSizeClasses {
+ if len(p) == n {
+ dataChunkPools[i].Put(p)
+ return
+ }
+ }
+ panic(fmt.Sprintf("unexpected buffer len=%v", len(p)))
+}
+
+// dataBuffer is an io.ReadWriter backed by a list of data chunks.
+// Each dataBuffer is used to read DATA frames on a single stream.
+// The buffer is divided into chunks so the server can limit the
+// total memory used by a single connection without limiting the
+// request body size on any single stream.
+type dataBuffer struct {
+ chunks [][]byte
+ r int // next byte to read is chunks[0][r]
+ w int // next byte to write is chunks[len(chunks)-1][w]
+ size int // total buffered bytes
+ expected int64 // we expect at least this many bytes in future Write calls (ignored if <= 0)
+}
+
+var errReadEmpty = errors.New("read from empty dataBuffer")
+
+// Read copies bytes from the buffer into p.
+// It is an error to read when no data is available.
+func (b *dataBuffer) Read(p []byte) (int, error) {
+ if b.size == 0 {
+ return 0, errReadEmpty
+ }
+ var ntotal int
+ for len(p) > 0 && b.size > 0 {
+ readFrom := b.bytesFromFirstChunk()
+ n := copy(p, readFrom)
+ p = p[n:]
+ ntotal += n
+ b.r += n
+ b.size -= n
+ // If the first chunk has been consumed, advance to the next chunk.
+ if b.r == len(b.chunks[0]) {
+ putDataBufferChunk(b.chunks[0])
+ end := len(b.chunks) - 1
+ copy(b.chunks[:end], b.chunks[1:])
+ b.chunks[end] = nil
+ b.chunks = b.chunks[:end]
+ b.r = 0
+ }
+ }
+ return ntotal, nil
+}
+
+func (b *dataBuffer) bytesFromFirstChunk() []byte {
+ if len(b.chunks) == 1 {
+ return b.chunks[0][b.r:b.w]
+ }
+ return b.chunks[0][b.r:]
+}
+
+// Len returns the number of bytes of the unread portion of the buffer.
+func (b *dataBuffer) Len() int {
+ return b.size
+}
+
+// Write appends p to the buffer.
+func (b *dataBuffer) Write(p []byte) (int, error) {
+ ntotal := len(p)
+ for len(p) > 0 {
+ // If the last chunk is empty, allocate a new chunk. Try to allocate
+ // enough to fully copy p plus any additional bytes we expect to
+ // receive. However, this may allocate less than len(p).
+ want := int64(len(p))
+ if b.expected > want {
+ want = b.expected
+ }
+ chunk := b.lastChunkOrAlloc(want)
+ n := copy(chunk[b.w:], p)
+ p = p[n:]
+ b.w += n
+ b.size += n
+ b.expected -= int64(n)
+ }
+ return ntotal, nil
+}
+
+func (b *dataBuffer) lastChunkOrAlloc(want int64) []byte {
+ if len(b.chunks) != 0 {
+ last := b.chunks[len(b.chunks)-1]
+ if b.w < len(last) {
+ return last
+ }
+ }
+ chunk := getDataBufferChunk(want)
+ b.chunks = append(b.chunks, chunk)
+ b.w = 0
+ return chunk
+}
diff --git a/vendor/golang.org/x/net/http2/errors.go b/vendor/golang.org/x/net/http2/errors.go
index 20fd7626a..71f2c4631 100644
--- a/vendor/golang.org/x/net/http2/errors.go
+++ b/vendor/golang.org/x/net/http2/errors.go
@@ -87,13 +87,16 @@ type goAwayFlowError struct{}
func (goAwayFlowError) Error() string { return "connection exceeded flow control window size" }
-// connErrorReason wraps a ConnectionError with an informative error about why it occurs.
-
+// connError represents an HTTP/2 ConnectionError error code, along
+// with a string (for debugging) explaining why.
+//
// Errors of this type are only returned by the frame parser functions
-// and converted into ConnectionError(ErrCodeProtocol).
+// and converted into ConnectionError(Code), after stashing away
+// the Reason into the Framer's errDetail field, accessible via
+// the (*Framer).ErrorDetail method.
type connError struct {
- Code ErrCode
- Reason string
+ Code ErrCode // the ConnectionError error code
+ Reason string // additional reason
}
func (e connError) Error() string {
diff --git a/vendor/golang.org/x/net/http2/fixed_buffer.go b/vendor/golang.org/x/net/http2/fixed_buffer.go
deleted file mode 100644
index 47da0f0bf..000000000
--- a/vendor/golang.org/x/net/http2/fixed_buffer.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// 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 http2
-
-import (
- "errors"
-)
-
-// fixedBuffer is an io.ReadWriter backed by a fixed size buffer.
-// It never allocates, but moves old data as new data is written.
-type fixedBuffer struct {
- buf []byte
- r, w int
-}
-
-var (
- errReadEmpty = errors.New("read from empty fixedBuffer")
- errWriteFull = errors.New("write on full fixedBuffer")
-)
-
-// Read copies bytes from the buffer into p.
-// It is an error to read when no data is available.
-func (b *fixedBuffer) Read(p []byte) (n int, err error) {
- if b.r == b.w {
- return 0, errReadEmpty
- }
- n = copy(p, b.buf[b.r:b.w])
- b.r += n
- if b.r == b.w {
- b.r = 0
- b.w = 0
- }
- return n, nil
-}
-
-// Len returns the number of bytes of the unread portion of the buffer.
-func (b *fixedBuffer) Len() int {
- return b.w - b.r
-}
-
-// Write copies bytes from p into the buffer.
-// It is an error to write more data than the buffer can hold.
-func (b *fixedBuffer) Write(p []byte) (n int, err error) {
- // Slide existing data to beginning.
- if b.r > 0 && len(p) > len(b.buf)-b.w {
- copy(b.buf, b.buf[b.r:b.w])
- b.w -= b.r
- b.r = 0
- }
-
- // Write new data.
- n = copy(b.buf[b.w:], p)
- b.w += n
- if n < len(p) {
- err = errWriteFull
- }
- return n, err
-}
diff --git a/vendor/golang.org/x/net/http2/flow.go b/vendor/golang.org/x/net/http2/flow.go
index 957de2542..cea601fcd 100644
--- a/vendor/golang.org/x/net/http2/flow.go
+++ b/vendor/golang.org/x/net/http2/flow.go
@@ -41,10 +41,10 @@ func (f *flow) take(n int32) {
// add adds n bytes (positive or negative) to the flow control window.
// It returns false if the sum would exceed 2^31-1.
func (f *flow) add(n int32) bool {
- remain := (1<<31 - 1) - f.n
- if n > remain {
- return false
+ sum := f.n + n
+ if (sum > n) == (f.n > 0) {
+ f.n = sum
+ return true
}
- f.n += n
- return true
+ return false
}
diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go
index 358833fed..b46791d1d 100644
--- a/vendor/golang.org/x/net/http2/frame.go
+++ b/vendor/golang.org/x/net/http2/frame.go
@@ -14,8 +14,8 @@ import (
"strings"
"sync"
+ "golang.org/x/net/http/httpguts"
"golang.org/x/net/http2/hpack"
- "golang.org/x/net/lex/httplex"
)
const frameHeaderLen = 9
@@ -122,7 +122,7 @@ var flagName = map[FrameType]map[Flags]string{
// a frameParser parses a frame given its FrameHeader and payload
// bytes. The length of payload will always equal fh.Length (which
// might be 0).
-type frameParser func(fh FrameHeader, payload []byte) (Frame, error)
+type frameParser func(fc *frameCache, fh FrameHeader, payload []byte) (Frame, error)
var frameParsers = map[FrameType]frameParser{
FrameData: parseDataFrame,
@@ -312,7 +312,7 @@ type Framer struct {
MaxHeaderListSize uint32
// TODO: track which type of frame & with which flags was sent
- // last. Then return an error (unless AllowIllegalWrites) if
+ // last. Then return an error (unless AllowIllegalWrites) if
// we're in the middle of a header block and a
// non-Continuation or Continuation on a different stream is
// attempted to be written.
@@ -323,6 +323,8 @@ type Framer struct {
debugFramerBuf *bytes.Buffer
debugReadLoggerf func(string, ...interface{})
debugWriteLoggerf func(string, ...interface{})
+
+ frameCache *frameCache // nil if frames aren't reused (default)
}
func (fr *Framer) maxHeaderListSize() uint32 {
@@ -398,6 +400,27 @@ const (
maxFrameSize = 1<<24 - 1
)
+// SetReuseFrames allows the Framer to reuse Frames.
+// If called on a Framer, Frames returned by calls to ReadFrame are only
+// valid until the next call to ReadFrame.
+func (fr *Framer) SetReuseFrames() {
+ if fr.frameCache != nil {
+ return
+ }
+ fr.frameCache = &frameCache{}
+}
+
+type frameCache struct {
+ dataFrame DataFrame
+}
+
+func (fc *frameCache) getDataFrame() *DataFrame {
+ if fc == nil {
+ return &DataFrame{}
+ }
+ return &fc.dataFrame
+}
+
// NewFramer returns a Framer that writes frames to w and reads them from r.
func NewFramer(w io.Writer, r io.Reader) *Framer {
fr := &Framer{
@@ -477,7 +500,7 @@ func (fr *Framer) ReadFrame() (Frame, error) {
if _, err := io.ReadFull(fr.r, payload); err != nil {
return nil, err
}
- f, err := typeFrameParser(fh.Type)(fh, payload)
+ f, err := typeFrameParser(fh.Type)(fr.frameCache, fh, payload)
if err != nil {
if ce, ok := err.(connError); ok {
return nil, fr.connError(ce.Code, ce.Reason)
@@ -565,7 +588,7 @@ func (f *DataFrame) Data() []byte {
return f.data
}
-func parseDataFrame(fh FrameHeader, payload []byte) (Frame, error) {
+func parseDataFrame(fc *frameCache, fh FrameHeader, payload []byte) (Frame, error) {
if fh.StreamID == 0 {
// DATA frames MUST be associated with a stream. If a
// DATA frame is received whose stream identifier
@@ -574,9 +597,9 @@ func parseDataFrame(fh FrameHeader, payload []byte) (Frame, error) {
// PROTOCOL_ERROR.
return nil, connError{ErrCodeProtocol, "DATA frame with stream ID 0"}
}
- f := &DataFrame{
- FrameHeader: fh,
- }
+ f := fc.getDataFrame()
+ f.FrameHeader = fh
+
var padSize byte
if fh.Flags.Has(FlagDataPadded) {
var err error
@@ -600,6 +623,7 @@ var (
errStreamID = errors.New("invalid stream ID")
errDepStreamID = errors.New("invalid dependent stream ID")
errPadLength = errors.New("pad length too large")
+ errPadBytes = errors.New("padding bytes must all be zeros unless AllowIllegalWrites is enabled")
)
func validStreamIDOrZero(streamID uint32) bool {
@@ -623,6 +647,7 @@ func (f *Framer) WriteData(streamID uint32, endStream bool, data []byte) error {
//
// If pad is nil, the padding bit is not sent.
// The length of pad must not exceed 255 bytes.
+// The bytes of pad must all be zero, unless f.AllowIllegalWrites is set.
//
// It will perform exactly one Write to the underlying Writer.
// It is the caller's responsibility not to violate the maximum frame size
@@ -631,8 +656,18 @@ func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []by
if !validStreamID(streamID) && !f.AllowIllegalWrites {
return errStreamID
}
- if len(pad) > 255 {
- return errPadLength
+ if len(pad) > 0 {
+ if len(pad) > 255 {
+ return errPadLength
+ }
+ if !f.AllowIllegalWrites {
+ for _, b := range pad {
+ if b != 0 {
+ // "Padding octets MUST be set to zero when sending."
+ return errPadBytes
+ }
+ }
+ }
}
var flags Flags
if endStream {
@@ -660,10 +695,10 @@ type SettingsFrame struct {
p []byte
}
-func parseSettingsFrame(fh FrameHeader, p []byte) (Frame, error) {
+func parseSettingsFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {
if fh.Flags.Has(FlagSettingsAck) && fh.Length > 0 {
// When this (ACK 0x1) bit is set, the payload of the
- // SETTINGS frame MUST be empty. Receipt of a
+ // SETTINGS frame MUST be empty. Receipt of a
// SETTINGS frame with the ACK flag set and a length
// field value other than 0 MUST be treated as a
// connection error (Section 5.4.1) of type
@@ -672,7 +707,7 @@ func parseSettingsFrame(fh FrameHeader, p []byte) (Frame, error) {
}
if fh.StreamID != 0 {
// SETTINGS frames always apply to a connection,
- // never a single stream. The stream identifier for a
+ // never a single stream. The stream identifier for a
// SETTINGS frame MUST be zero (0x0). If an endpoint
// receives a SETTINGS frame whose stream identifier
// field is anything other than 0x0, the endpoint MUST
@@ -698,32 +733,67 @@ func (f *SettingsFrame) IsAck() bool {
return f.FrameHeader.Flags.Has(FlagSettingsAck)
}
-func (f *SettingsFrame) Value(s SettingID) (v uint32, ok bool) {
+func (f *SettingsFrame) Value(id SettingID) (v uint32, ok bool) {
f.checkValid()
- buf := f.p
- for len(buf) > 0 {
- settingID := SettingID(binary.BigEndian.Uint16(buf[:2]))
- if settingID == s {
- return binary.BigEndian.Uint32(buf[2:6]), true
+ for i := 0; i < f.NumSettings(); i++ {
+ if s := f.Setting(i); s.ID == id {
+ return s.Val, true
}
- buf = buf[6:]
}
return 0, false
}
+// Setting returns the setting from the frame at the given 0-based index.
+// The index must be >= 0 and less than f.NumSettings().
+func (f *SettingsFrame) Setting(i int) Setting {
+ buf := f.p
+ return Setting{
+ ID: SettingID(binary.BigEndian.Uint16(buf[i*6 : i*6+2])),
+ Val: binary.BigEndian.Uint32(buf[i*6+2 : i*6+6]),
+ }
+}
+
+func (f *SettingsFrame) NumSettings() int { return len(f.p) / 6 }
+
+// HasDuplicates reports whether f contains any duplicate setting IDs.
+func (f *SettingsFrame) HasDuplicates() bool {
+ num := f.NumSettings()
+ if num == 0 {
+ return false
+ }
+ // If it's small enough (the common case), just do the n^2
+ // thing and avoid a map allocation.
+ if num < 10 {
+ for i := 0; i < num; i++ {
+ idi := f.Setting(i).ID
+ for j := i + 1; j < num; j++ {
+ idj := f.Setting(j).ID
+ if idi == idj {
+ return true
+ }
+ }
+ }
+ return false
+ }
+ seen := map[SettingID]bool{}
+ for i := 0; i < num; i++ {
+ id := f.Setting(i).ID
+ if seen[id] {
+ return true
+ }
+ seen[id] = true
+ }
+ return false
+}
+
// ForeachSetting runs fn for each setting.
// It stops and returns the first error.
func (f *SettingsFrame) ForeachSetting(fn func(Setting) error) error {
f.checkValid()
- buf := f.p
- for len(buf) > 0 {
- if err := fn(Setting{
- SettingID(binary.BigEndian.Uint16(buf[:2])),
- binary.BigEndian.Uint32(buf[2:6]),
- }); err != nil {
+ for i := 0; i < f.NumSettings(); i++ {
+ if err := fn(f.Setting(i)); err != nil {
return err
}
- buf = buf[6:]
}
return nil
}
@@ -762,7 +832,7 @@ type PingFrame struct {
func (f *PingFrame) IsAck() bool { return f.Flags.Has(FlagPingAck) }
-func parsePingFrame(fh FrameHeader, payload []byte) (Frame, error) {
+func parsePingFrame(_ *frameCache, fh FrameHeader, payload []byte) (Frame, error) {
if len(payload) != 8 {
return nil, ConnectionError(ErrCodeFrameSize)
}
@@ -802,7 +872,7 @@ func (f *GoAwayFrame) DebugData() []byte {
return f.debugData
}
-func parseGoAwayFrame(fh FrameHeader, p []byte) (Frame, error) {
+func parseGoAwayFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {
if fh.StreamID != 0 {
return nil, ConnectionError(ErrCodeProtocol)
}
@@ -842,7 +912,7 @@ func (f *UnknownFrame) Payload() []byte {
return f.p
}
-func parseUnknownFrame(fh FrameHeader, p []byte) (Frame, error) {
+func parseUnknownFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {
return &UnknownFrame{fh, p}, nil
}
@@ -853,7 +923,7 @@ type WindowUpdateFrame struct {
Increment uint32 // never read with high bit set
}
-func parseWindowUpdateFrame(fh FrameHeader, p []byte) (Frame, error) {
+func parseWindowUpdateFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {
if len(p) != 4 {
return nil, ConnectionError(ErrCodeFrameSize)
}
@@ -918,12 +988,12 @@ func (f *HeadersFrame) HasPriority() bool {
return f.FrameHeader.Flags.Has(FlagHeadersPriority)
}
-func parseHeadersFrame(fh FrameHeader, p []byte) (_ Frame, err error) {
+func parseHeadersFrame(_ *frameCache, fh FrameHeader, p []byte) (_ Frame, err error) {
hf := &HeadersFrame{
FrameHeader: fh,
}
if fh.StreamID == 0 {
- // HEADERS frames MUST be associated with a stream. If a HEADERS frame
+ // HEADERS frames MUST be associated with a stream. If a HEADERS frame
// is received whose stream identifier field is 0x0, the recipient MUST
// respond with a connection error (Section 5.4.1) of type
// PROTOCOL_ERROR.
@@ -1045,7 +1115,7 @@ type PriorityParam struct {
Exclusive bool
// Weight is the stream's zero-indexed weight. It should be
- // set together with StreamDep, or neither should be set. Per
+ // set together with StreamDep, or neither should be set. Per
// the spec, "Add one to the value to obtain a weight between
// 1 and 256."
Weight uint8
@@ -1055,7 +1125,7 @@ func (p PriorityParam) IsZero() bool {
return p == PriorityParam{}
}
-func parsePriorityFrame(fh FrameHeader, payload []byte) (Frame, error) {
+func parsePriorityFrame(_ *frameCache, fh FrameHeader, payload []byte) (Frame, error) {
if fh.StreamID == 0 {
return nil, connError{ErrCodeProtocol, "PRIORITY frame with stream ID 0"}
}
@@ -1102,7 +1172,7 @@ type RSTStreamFrame struct {
ErrCode ErrCode
}
-func parseRSTStreamFrame(fh FrameHeader, p []byte) (Frame, error) {
+func parseRSTStreamFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {
if len(p) != 4 {
return nil, ConnectionError(ErrCodeFrameSize)
}
@@ -1132,7 +1202,7 @@ type ContinuationFrame struct {
headerFragBuf []byte
}
-func parseContinuationFrame(fh FrameHeader, p []byte) (Frame, error) {
+func parseContinuationFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {
if fh.StreamID == 0 {
return nil, connError{ErrCodeProtocol, "CONTINUATION frame with stream ID 0"}
}
@@ -1182,7 +1252,7 @@ func (f *PushPromiseFrame) HeadersEnded() bool {
return f.FrameHeader.Flags.Has(FlagPushPromiseEndHeaders)
}
-func parsePushPromise(fh FrameHeader, p []byte) (_ Frame, err error) {
+func parsePushPromise(_ *frameCache, fh FrameHeader, p []byte) (_ Frame, err error) {
pp := &PushPromiseFrame{
FrameHeader: fh,
}
@@ -1407,7 +1477,7 @@ func (fr *Framer) maxHeaderStringLen() int {
}
// readMetaFrame returns 0 or more CONTINUATION frames from fr and
-// merge them into into the provided hf and returns a MetaHeadersFrame
+// merge them into the provided hf and returns a MetaHeadersFrame
// with the decoded hpack values.
func (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) {
if fr.AllowIllegalReads {
@@ -1427,7 +1497,7 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) {
if VerboseLogs && fr.logReads {
fr.debugReadLoggerf("http2: decoded hpack field %+v", hf)
}
- if !httplex.ValidHeaderFieldValue(hf.Value) {
+ if !httpguts.ValidHeaderFieldValue(hf.Value) {
invalid = headerFieldValueError(hf.Value)
}
isPseudo := strings.HasPrefix(hf.Name, ":")
diff --git a/vendor/golang.org/x/net/http2/go111.go b/vendor/golang.org/x/net/http2/go111.go
new file mode 100644
index 000000000..3a131016b
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/go111.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.
+
+// +build go1.11
+
+package http2
+
+import (
+ "net/http/httptrace"
+ "net/textproto"
+)
+
+func traceHasWroteHeaderField(trace *httptrace.ClientTrace) bool {
+ return trace != nil && trace.WroteHeaderField != nil
+}
+
+func traceWroteHeaderField(trace *httptrace.ClientTrace, k, v string) {
+ if trace != nil && trace.WroteHeaderField != nil {
+ trace.WroteHeaderField(k, []string{v})
+ }
+}
+
+func traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textproto.MIMEHeader) error {
+ if trace != nil {
+ return trace.Got1xxResponse
+ }
+ return nil
+}
diff --git a/vendor/golang.org/x/net/http2/go16.go b/vendor/golang.org/x/net/http2/go16.go
deleted file mode 100644
index 2b72855f5..000000000
--- a/vendor/golang.org/x/net/http2/go16.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// 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.
-
-// +build go1.6
-
-package http2
-
-import (
- "crypto/tls"
- "net/http"
- "time"
-)
-
-func transportExpectContinueTimeout(t1 *http.Transport) time.Duration {
- return t1.ExpectContinueTimeout
-}
-
-// isBadCipher reports whether the cipher is blacklisted by the HTTP/2 spec.
-func isBadCipher(cipher uint16) bool {
- switch cipher {
- case tls.TLS_RSA_WITH_RC4_128_SHA,
- tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA,
- tls.TLS_RSA_WITH_AES_128_CBC_SHA,
- tls.TLS_RSA_WITH_AES_256_CBC_SHA,
- tls.TLS_RSA_WITH_AES_128_GCM_SHA256,
- tls.TLS_RSA_WITH_AES_256_GCM_SHA384,
- tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
- tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
- tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
- tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA,
- tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
- tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
- tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:
- // Reject cipher suites from Appendix A.
- // "This list includes those cipher suites that do not
- // offer an ephemeral key exchange and those that are
- // based on the TLS null, stream or block cipher type"
- return true
- default:
- return false
- }
-}
diff --git a/vendor/golang.org/x/net/http2/go17.go b/vendor/golang.org/x/net/http2/go17.go
deleted file mode 100644
index 47b7fae08..000000000
--- a/vendor/golang.org/x/net/http2/go17.go
+++ /dev/null
@@ -1,106 +0,0 @@
-// 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.
-
-// +build go1.7
-
-package http2
-
-import (
- "context"
- "net"
- "net/http"
- "net/http/httptrace"
- "time"
-)
-
-type contextContext interface {
- context.Context
-}
-
-func serverConnBaseContext(c net.Conn, opts *ServeConnOpts) (ctx contextContext, cancel func()) {
- ctx, cancel = context.WithCancel(context.Background())
- ctx = context.WithValue(ctx, http.LocalAddrContextKey, c.LocalAddr())
- if hs := opts.baseConfig(); hs != nil {
- ctx = context.WithValue(ctx, http.ServerContextKey, hs)
- }
- return
-}
-
-func contextWithCancel(ctx contextContext) (_ contextContext, cancel func()) {
- return context.WithCancel(ctx)
-}
-
-func requestWithContext(req *http.Request, ctx contextContext) *http.Request {
- return req.WithContext(ctx)
-}
-
-type clientTrace httptrace.ClientTrace
-
-func reqContext(r *http.Request) context.Context { return r.Context() }
-
-func (t *Transport) idleConnTimeout() time.Duration {
- if t.t1 != nil {
- return t.t1.IdleConnTimeout
- }
- return 0
-}
-
-func setResponseUncompressed(res *http.Response) { res.Uncompressed = true }
-
-func traceGotConn(req *http.Request, cc *ClientConn) {
- trace := httptrace.ContextClientTrace(req.Context())
- if trace == nil || trace.GotConn == nil {
- return
- }
- ci := httptrace.GotConnInfo{Conn: cc.tconn}
- cc.mu.Lock()
- ci.Reused = cc.nextStreamID > 1
- ci.WasIdle = len(cc.streams) == 0 && ci.Reused
- if ci.WasIdle && !cc.lastActive.IsZero() {
- ci.IdleTime = time.Now().Sub(cc.lastActive)
- }
- cc.mu.Unlock()
-
- trace.GotConn(ci)
-}
-
-func traceWroteHeaders(trace *clientTrace) {
- if trace != nil && trace.WroteHeaders != nil {
- trace.WroteHeaders()
- }
-}
-
-func traceGot100Continue(trace *clientTrace) {
- if trace != nil && trace.Got100Continue != nil {
- trace.Got100Continue()
- }
-}
-
-func traceWait100Continue(trace *clientTrace) {
- if trace != nil && trace.Wait100Continue != nil {
- trace.Wait100Continue()
- }
-}
-
-func traceWroteRequest(trace *clientTrace, err error) {
- if trace != nil && trace.WroteRequest != nil {
- trace.WroteRequest(httptrace.WroteRequestInfo{Err: err})
- }
-}
-
-func traceFirstResponseByte(trace *clientTrace) {
- if trace != nil && trace.GotFirstResponseByte != nil {
- trace.GotFirstResponseByte()
- }
-}
-
-func requestTrace(req *http.Request) *clientTrace {
- trace := httptrace.ContextClientTrace(req.Context())
- return (*clientTrace)(trace)
-}
-
-// Ping sends a PING frame to the server and waits for the ack.
-func (cc *ClientConn) Ping(ctx context.Context) error {
- return cc.ping(ctx)
-}
diff --git a/vendor/golang.org/x/net/http2/go17_not18.go b/vendor/golang.org/x/net/http2/go17_not18.go
deleted file mode 100644
index b4c52ecec..000000000
--- a/vendor/golang.org/x/net/http2/go17_not18.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// 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.
-
-// +build go1.7,!go1.8
-
-package http2
-
-import "crypto/tls"
-
-// temporary copy of Go 1.7's private tls.Config.clone:
-func cloneTLSConfig(c *tls.Config) *tls.Config {
- return &tls.Config{
- Rand: c.Rand,
- Time: c.Time,
- Certificates: c.Certificates,
- NameToCertificate: c.NameToCertificate,
- GetCertificate: c.GetCertificate,
- RootCAs: c.RootCAs,
- NextProtos: c.NextProtos,
- ServerName: c.ServerName,
- ClientAuth: c.ClientAuth,
- ClientCAs: c.ClientCAs,
- InsecureSkipVerify: c.InsecureSkipVerify,
- CipherSuites: c.CipherSuites,
- PreferServerCipherSuites: c.PreferServerCipherSuites,
- SessionTicketsDisabled: c.SessionTicketsDisabled,
- SessionTicketKey: c.SessionTicketKey,
- ClientSessionCache: c.ClientSessionCache,
- MinVersion: c.MinVersion,
- MaxVersion: c.MaxVersion,
- CurvePreferences: c.CurvePreferences,
- DynamicRecordSizingDisabled: c.DynamicRecordSizingDisabled,
- Renegotiation: c.Renegotiation,
- }
-}
diff --git a/vendor/golang.org/x/net/http2/go18.go b/vendor/golang.org/x/net/http2/go18.go
deleted file mode 100644
index 633202c39..000000000
--- a/vendor/golang.org/x/net/http2/go18.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build go1.8
-
-package http2
-
-import (
- "crypto/tls"
- "io"
- "net/http"
-)
-
-func cloneTLSConfig(c *tls.Config) *tls.Config { return c.Clone() }
-
-var _ http.Pusher = (*responseWriter)(nil)
-
-// Push implements http.Pusher.
-func (w *responseWriter) Push(target string, opts *http.PushOptions) error {
- internalOpts := pushOptions{}
- if opts != nil {
- internalOpts.Method = opts.Method
- internalOpts.Header = opts.Header
- }
- return w.push(target, internalOpts)
-}
-
-func configureServer18(h1 *http.Server, h2 *Server) error {
- if h2.IdleTimeout == 0 {
- if h1.IdleTimeout != 0 {
- h2.IdleTimeout = h1.IdleTimeout
- } else {
- h2.IdleTimeout = h1.ReadTimeout
- }
- }
- return nil
-}
-
-func shouldLogPanic(panicValue interface{}) bool {
- return panicValue != nil && panicValue != http.ErrAbortHandler
-}
-
-func reqGetBody(req *http.Request) func() (io.ReadCloser, error) {
- return req.GetBody
-}
-
-func reqBodyIsNoBody(body io.ReadCloser) bool {
- return body == http.NoBody
-}
diff --git a/vendor/golang.org/x/net/http2/headermap.go b/vendor/golang.org/x/net/http2/headermap.go
index c2805f6ac..c3ff3fa1c 100644
--- a/vendor/golang.org/x/net/http2/headermap.go
+++ b/vendor/golang.org/x/net/http2/headermap.go
@@ -7,15 +7,21 @@ package http2
import (
"net/http"
"strings"
+ "sync"
)
var (
- commonLowerHeader = map[string]string{} // Go-Canonical-Case -> lower-case
- commonCanonHeader = map[string]string{} // lower-case -> Go-Canonical-Case
+ commonBuildOnce sync.Once
+ commonLowerHeader map[string]string // Go-Canonical-Case -> lower-case
+ commonCanonHeader map[string]string // lower-case -> Go-Canonical-Case
)
-func init() {
- for _, v := range []string{
+func buildCommonHeaderMapsOnce() {
+ commonBuildOnce.Do(buildCommonHeaderMaps)
+}
+
+func buildCommonHeaderMaps() {
+ common := []string{
"accept",
"accept-charset",
"accept-encoding",
@@ -63,7 +69,10 @@ func init() {
"vary",
"via",
"www-authenticate",
- } {
+ }
+ commonLowerHeader = make(map[string]string, len(common))
+ commonCanonHeader = make(map[string]string, len(common))
+ for _, v := range common {
chk := http.CanonicalHeaderKey(v)
commonLowerHeader[chk] = v
commonCanonHeader[v] = chk
@@ -71,6 +80,7 @@ func init() {
}
func lowerHeader(v string) string {
+ buildCommonHeaderMapsOnce()
if s, ok := commonLowerHeader[v]; ok {
return s
}
diff --git a/vendor/golang.org/x/net/http2/hpack/encode.go b/vendor/golang.org/x/net/http2/hpack/encode.go
index f9bb03398..1565cf270 100644
--- a/vendor/golang.org/x/net/http2/hpack/encode.go
+++ b/vendor/golang.org/x/net/http2/hpack/encode.go
@@ -39,13 +39,14 @@ func NewEncoder(w io.Writer) *Encoder {
tableSizeUpdate: false,
w: w,
}
+ e.dynTab.table.init()
e.dynTab.setMaxSize(initialHeaderTableSize)
return e
}
// WriteField encodes f into a single Write to e's underlying Writer.
// This function may also produce bytes for "Header Table Size Update"
-// if necessary. If produced, it is done before encoding f.
+// if necessary. If produced, it is done before encoding f.
func (e *Encoder) WriteField(f HeaderField) error {
e.buf = e.buf[:0]
@@ -88,29 +89,17 @@ func (e *Encoder) WriteField(f HeaderField) error {
// only name matches, i points to that index and nameValueMatch
// becomes false.
func (e *Encoder) searchTable(f HeaderField) (i uint64, nameValueMatch bool) {
- for idx, hf := range staticTable {
- if !constantTimeStringCompare(hf.Name, f.Name) {
- continue
- }
- if i == 0 {
- i = uint64(idx + 1)
- }
- if f.Sensitive {
- continue
- }
- if !constantTimeStringCompare(hf.Value, f.Value) {
- continue
- }
- i = uint64(idx + 1)
- nameValueMatch = true
- return
+ i, nameValueMatch = staticTable.search(f)
+ if nameValueMatch {
+ return i, true
}
- j, nameValueMatch := e.dynTab.search(f)
+ j, nameValueMatch := e.dynTab.table.search(f)
if nameValueMatch || (i == 0 && j != 0) {
- i = j + uint64(len(staticTable))
+ return j + uint64(staticTable.len()), nameValueMatch
}
- return
+
+ return i, false
}
// SetMaxDynamicTableSize changes the dynamic header table size to v.
@@ -217,7 +206,7 @@ func appendVarInt(dst []byte, n byte, i uint64) []byte {
}
// appendHpackString appends s, as encoded in "String Literal"
-// representation, to dst and returns the the extended buffer.
+// representation, to dst and returns the extended buffer.
//
// s will be encoded in Huffman codes only when it produces strictly
// shorter byte string.
diff --git a/vendor/golang.org/x/net/http2/hpack/hpack.go b/vendor/golang.org/x/net/http2/hpack/hpack.go
index 135b9f62c..85f18a2b0 100644
--- a/vendor/golang.org/x/net/http2/hpack/hpack.go
+++ b/vendor/golang.org/x/net/http2/hpack/hpack.go
@@ -61,7 +61,7 @@ func (hf HeaderField) String() string {
func (hf HeaderField) Size() uint32 {
// http://http2.github.io/http2-spec/compression.html#rfc.section.4.1
// "The size of the dynamic table is the sum of the size of
- // its entries. The size of an entry is the sum of its name's
+ // its entries. The size of an entry is the sum of its name's
// length in octets (as defined in Section 5.2), its value's
// length in octets (see Section 5.2), plus 32. The size of
// an entry is calculated using the length of the name and
@@ -92,6 +92,8 @@ type Decoder struct {
// saveBuf is previous data passed to Write which we weren't able
// to fully parse before. Unlike buf, we own this data.
saveBuf bytes.Buffer
+
+ firstField bool // processing the first field of the header block
}
// NewDecoder returns a new decoder with the provided maximum dynamic
@@ -101,7 +103,9 @@ func NewDecoder(maxDynamicTableSize uint32, emitFunc func(f HeaderField)) *Decod
d := &Decoder{
emit: emitFunc,
emitEnabled: true,
+ firstField: true,
}
+ d.dynTab.table.init()
d.dynTab.allowedMaxSize = maxDynamicTableSize
d.dynTab.setMaxSize(maxDynamicTableSize)
return d
@@ -154,12 +158,9 @@ func (d *Decoder) SetAllowedMaxDynamicTableSize(v uint32) {
}
type dynamicTable struct {
- // ents is the FIFO described at
// http://http2.github.io/http2-spec/compression.html#rfc.section.2.3.2
- // The newest (low index) is append at the end, and items are
- // evicted from the front.
- ents []HeaderField
- size uint32
+ table headerFieldTable
+ size uint32 // in bytes
maxSize uint32 // current maxSize
allowedMaxSize uint32 // maxSize may go up to this, inclusive
}
@@ -169,95 +170,45 @@ func (dt *dynamicTable) setMaxSize(v uint32) {
dt.evict()
}
-// TODO: change dynamicTable to be a struct with a slice and a size int field,
-// per http://http2.github.io/http2-spec/compression.html#rfc.section.4.1:
-//
-//
-// Then make add increment the size. maybe the max size should move from Decoder to
-// dynamicTable and add should return an ok bool if there was enough space.
-//
-// Later we'll need a remove operation on dynamicTable.
-
func (dt *dynamicTable) add(f HeaderField) {
- dt.ents = append(dt.ents, f)
+ dt.table.addEntry(f)
dt.size += f.Size()
dt.evict()
}
-// If we're too big, evict old stuff (front of the slice)
+// If we're too big, evict old stuff.
func (dt *dynamicTable) evict() {
- base := dt.ents // keep base pointer of slice
- for dt.size > dt.maxSize {
- dt.size -= dt.ents[0].Size()
- dt.ents = dt.ents[1:]
- }
-
- // Shift slice contents down if we evicted things.
- if len(dt.ents) != len(base) {
- copy(base, dt.ents)
- dt.ents = base[:len(dt.ents)]
- }
-}
-
-// constantTimeStringCompare compares string a and b in a constant
-// time manner.
-func constantTimeStringCompare(a, b string) bool {
- if len(a) != len(b) {
- return false
- }
-
- c := byte(0)
-
- for i := 0; i < len(a); i++ {
- c |= a[i] ^ b[i]
+ var n int
+ for dt.size > dt.maxSize && n < dt.table.len() {
+ dt.size -= dt.table.ents[n].Size()
+ n++
}
-
- return c == 0
-}
-
-// Search searches f in the table. The return value i is 0 if there is
-// no name match. If there is name match or name/value match, i is the
-// index of that entry (1-based). If both name and value match,
-// nameValueMatch becomes true.
-func (dt *dynamicTable) search(f HeaderField) (i uint64, nameValueMatch bool) {
- l := len(dt.ents)
- for j := l - 1; j >= 0; j-- {
- ent := dt.ents[j]
- if !constantTimeStringCompare(ent.Name, f.Name) {
- continue
- }
- if i == 0 {
- i = uint64(l - j)
- }
- if f.Sensitive {
- continue
- }
- if !constantTimeStringCompare(ent.Value, f.Value) {
- continue
- }
- i = uint64(l - j)
- nameValueMatch = true
- return
- }
- return
+ dt.table.evictOldest(n)
}
func (d *Decoder) maxTableIndex() int {
- return len(d.dynTab.ents) + len(staticTable)
+ // This should never overflow. RFC 7540 Section 6.5.2 limits the size of
+ // the dynamic table to 2^32 bytes, where each entry will occupy more than
+ // one byte. Further, the staticTable has a fixed, small length.
+ return d.dynTab.table.len() + staticTable.len()
}
func (d *Decoder) at(i uint64) (hf HeaderField, ok bool) {
- if i < 1 {
+ // See Section 2.3.3.
+ if i == 0 {
return
}
+ if i <= uint64(staticTable.len()) {
+ return staticTable.ents[i-1], true
+ }
if i > uint64(d.maxTableIndex()) {
return
}
- if i <= uint64(len(staticTable)) {
- return staticTable[i-1], true
- }
- dents := d.dynTab.ents
- return dents[len(dents)-(int(i)-len(staticTable))], true
+ // In the dynamic table, newer entries have lower indices.
+ // However, dt.ents[0] is the oldest entry. Hence, dt.ents is
+ // the reversed dynamic table.
+ dt := d.dynTab.table
+ return dt.ents[dt.len()-(int(i)-staticTable.len())], true
}
// Decode decodes an entire block.
@@ -278,11 +229,15 @@ func (d *Decoder) DecodeFull(p []byte) ([]HeaderField, error) {
return hf, nil
}
+// Close declares that the decoding is complete and resets the Decoder
+// to be reused again for a new header block. If there is any remaining
+// data in the decoder's buffer, Close returns an error.
func (d *Decoder) Close() error {
if d.saveBuf.Len() > 0 {
d.saveBuf.Reset()
return DecodingError{errors.New("truncated headers")}
}
+ d.firstField = true
return nil
}
@@ -307,7 +262,7 @@ func (d *Decoder) Write(p []byte) (n int, err error) {
err = d.parseHeaderFieldRepr()
if err == errNeedMore {
// Extra paranoia, making sure saveBuf won't
- // get too large. All the varint and string
+ // get too large. All the varint and string
// reading code earlier should already catch
// overlong things and return ErrStringLength,
// but keep this as a last resort.
@@ -318,6 +273,7 @@ func (d *Decoder) Write(p []byte) (n int, err error) {
d.saveBuf.Write(d.buf)
return len(p), nil
}
+ d.firstField = false
if err != nil {
break
}
@@ -441,6 +397,12 @@ func (d *Decoder) callEmit(hf HeaderField) error {
// (same invariants and behavior as parseHeaderFieldRepr)
func (d *Decoder) parseDynamicTableSizeUpdate() error {
+ // RFC 7541, sec 4.2: This dynamic table size update MUST occur at the
+ // beginning of the first header block following the change to the dynamic table size.
+ if !d.firstField && d.dynTab.size > 0 {
+ return DecodingError{errors.New("dynamic table size update MUST occur at the beginning of a header block")}
+ }
+
buf := d.buf
size, buf, err := readVarInt(5, buf)
if err != nil {
diff --git a/vendor/golang.org/x/net/http2/hpack/huffman.go b/vendor/golang.org/x/net/http2/hpack/huffman.go
index 8850e3946..b412a96c5 100644
--- a/vendor/golang.org/x/net/http2/hpack/huffman.go
+++ b/vendor/golang.org/x/net/http2/hpack/huffman.go
@@ -47,6 +47,7 @@ var ErrInvalidHuffman = errors.New("hpack: invalid Huffman-encoded data")
// If maxLen is greater than 0, attempts to write more to buf than
// maxLen bytes will return ErrStringLength.
func huffmanDecode(buf *bytes.Buffer, maxLen int, v []byte) error {
+ rootHuffmanNode := getRootHuffmanNode()
n := rootHuffmanNode
// cur is the bit buffer that has not been fed into n.
// cbits is the number of low order bits in cur that are valid.
@@ -106,7 +107,7 @@ func huffmanDecode(buf *bytes.Buffer, maxLen int, v []byte) error {
type node struct {
// children is non-nil for internal nodes
- children []*node
+ children *[256]*node
// The following are only valid if children is nil:
codeLen uint8 // number of bits that led to the output of sym
@@ -114,22 +115,31 @@ type node struct {
}
func newInternalNode() *node {
- return &node{children: make([]*node, 256)}
+ return &node{children: new([256]*node)}
}
-var rootHuffmanNode = newInternalNode()
+var (
+ buildRootOnce sync.Once
+ lazyRootHuffmanNode *node
+)
+
+func getRootHuffmanNode() *node {
+ buildRootOnce.Do(buildRootHuffmanNode)
+ return lazyRootHuffmanNode
+}
-func init() {
+func buildRootHuffmanNode() {
if len(huffmanCodes) != 256 {
panic("unexpected size")
}
+ lazyRootHuffmanNode = newInternalNode()
for i, code := range huffmanCodes {
addDecoderNode(byte(i), code, huffmanCodeLen[i])
}
}
func addDecoderNode(sym byte, code uint32, codeLen uint8) {
- cur := rootHuffmanNode
+ cur := lazyRootHuffmanNode
for codeLen > 8 {
codeLen -= 8
i := uint8(code >> codeLen)
diff --git a/vendor/golang.org/x/net/http2/hpack/tables.go b/vendor/golang.org/x/net/http2/hpack/tables.go
index b9283a023..a66cfbea6 100644
--- a/vendor/golang.org/x/net/http2/hpack/tables.go
+++ b/vendor/golang.org/x/net/http2/hpack/tables.go
@@ -4,73 +4,200 @@
package hpack
-func pair(name, value string) HeaderField {
- return HeaderField{Name: name, Value: value}
+import (
+ "fmt"
+)
+
+// headerFieldTable implements a list of HeaderFields.
+// This is used to implement the static and dynamic tables.
+type headerFieldTable struct {
+ // For static tables, entries are never evicted.
+ //
+ // For dynamic tables, entries are evicted from ents[0] and added to the end.
+ // Each entry has a unique id that starts at one and increments for each
+ // entry that is added. This unique id is stable across evictions, meaning
+ // it can be used as a pointer to a specific entry. As in hpack, unique ids
+ // are 1-based. The unique id for ents[k] is k + evictCount + 1.
+ //
+ // Zero is not a valid unique id.
+ //
+ // evictCount should not overflow in any remotely practical situation. In
+ // practice, we will have one dynamic table per HTTP/2 connection. If we
+ // assume a very powerful server that handles 1M QPS per connection and each
+ // request adds (then evicts) 100 entries from the table, it would still take
+ // 2M years for evictCount to overflow.
+ ents []HeaderField
+ evictCount uint64
+
+ // byName maps a HeaderField name to the unique id of the newest entry with
+ // the same name. See above for a definition of "unique id".
+ byName map[string]uint64
+
+ // byNameValue maps a HeaderField name/value pair to the unique id of the newest
+ // entry with the same name and value. See above for a definition of "unique id".
+ byNameValue map[pairNameValue]uint64
+}
+
+type pairNameValue struct {
+ name, value string
+}
+
+func (t *headerFieldTable) init() {
+ t.byName = make(map[string]uint64)
+ t.byNameValue = make(map[pairNameValue]uint64)
+}
+
+// len reports the number of entries in the table.
+func (t *headerFieldTable) len() int {
+ return len(t.ents)
+}
+
+// addEntry adds a new entry.
+func (t *headerFieldTable) addEntry(f HeaderField) {
+ id := uint64(t.len()) + t.evictCount + 1
+ t.byName[f.Name] = id
+ t.byNameValue[pairNameValue{f.Name, f.Value}] = id
+ t.ents = append(t.ents, f)
+}
+
+// evictOldest evicts the n oldest entries in the table.
+func (t *headerFieldTable) evictOldest(n int) {
+ if n > t.len() {
+ panic(fmt.Sprintf("evictOldest(%v) on table with %v entries", n, t.len()))
+ }
+ for k := 0; k < n; k++ {
+ f := t.ents[k]
+ id := t.evictCount + uint64(k) + 1
+ if t.byName[f.Name] == id {
+ delete(t.byName, f.Name)
+ }
+ if p := (pairNameValue{f.Name, f.Value}); t.byNameValue[p] == id {
+ delete(t.byNameValue, p)
+ }
+ }
+ copy(t.ents, t.ents[n:])
+ for k := t.len() - n; k < t.len(); k++ {
+ t.ents[k] = HeaderField{} // so strings can be garbage collected
+ }
+ t.ents = t.ents[:t.len()-n]
+ if t.evictCount+uint64(n) < t.evictCount {
+ panic("evictCount overflow")
+ }
+ t.evictCount += uint64(n)
+}
+
+// search finds f in the table. If there is no match, i is 0.
+// If both name and value match, i is the matched index and nameValueMatch
+// becomes true. If only name matches, i points to that index and
+// nameValueMatch becomes false.
+//
+// The returned index is a 1-based HPACK index. For dynamic tables, HPACK says
+// that index 1 should be the newest entry, but t.ents[0] is the oldest entry,
+// meaning t.ents is reversed for dynamic tables. Hence, when t is a dynamic
+// table, the return value i actually refers to the entry t.ents[t.len()-i].
+//
+// All tables are assumed to be a dynamic tables except for the global
+// staticTable pointer.
+//
+// See Section 2.3.3.
+func (t *headerFieldTable) search(f HeaderField) (i uint64, nameValueMatch bool) {
+ if !f.Sensitive {
+ if id := t.byNameValue[pairNameValue{f.Name, f.Value}]; id != 0 {
+ return t.idToIndex(id), true
+ }
+ }
+ if id := t.byName[f.Name]; id != 0 {
+ return t.idToIndex(id), false
+ }
+ return 0, false
+}
+
+// idToIndex converts a unique id to an HPACK index.
+// See Section 2.3.3.
+func (t *headerFieldTable) idToIndex(id uint64) uint64 {
+ if id <= t.evictCount {
+ panic(fmt.Sprintf("id (%v) <= evictCount (%v)", id, t.evictCount))
+ }
+ k := id - t.evictCount - 1 // convert id to an index t.ents[k]
+ if t != staticTable {
+ return uint64(t.len()) - k // dynamic table
+ }
+ return k + 1
}
// http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07#appendix-B
-var staticTable = [...]HeaderField{
- pair(":authority", ""), // index 1 (1-based)
- pair(":method", "GET"),
- pair(":method", "POST"),
- pair(":path", "/"),
- pair(":path", "/index.html"),
- pair(":scheme", "http"),
- pair(":scheme", "https"),
- pair(":status", "200"),
- pair(":status", "204"),
- pair(":status", "206"),
- pair(":status", "304"),
- pair(":status", "400"),
- pair(":status", "404"),
- pair(":status", "500"),
- pair("accept-charset", ""),
- pair("accept-encoding", "gzip, deflate"),
- pair("accept-language", ""),
- pair("accept-ranges", ""),
- pair("accept", ""),
- pair("access-control-allow-origin", ""),
- pair("age", ""),
- pair("allow", ""),
- pair("authorization", ""),
- pair("cache-control", ""),
- pair("content-disposition", ""),
- pair("content-encoding", ""),
- pair("content-language", ""),
- pair("content-length", ""),
- pair("content-location", ""),
- pair("content-range", ""),
- pair("content-type", ""),
- pair("cookie", ""),
- pair("date", ""),
- pair("etag", ""),
- pair("expect", ""),
- pair("expires", ""),
- pair("from", ""),
- pair("host", ""),
- pair("if-match", ""),
- pair("if-modified-since", ""),
- pair("if-none-match", ""),
- pair("if-range", ""),
- pair("if-unmodified-since", ""),
- pair("last-modified", ""),
- pair("link", ""),
- pair("location", ""),
- pair("max-forwards", ""),
- pair("proxy-authenticate", ""),
- pair("proxy-authorization", ""),
- pair("range", ""),
- pair("referer", ""),
- pair("refresh", ""),
- pair("retry-after", ""),
- pair("server", ""),
- pair("set-cookie", ""),
- pair("strict-transport-security", ""),
- pair("transfer-encoding", ""),
- pair("user-agent", ""),
- pair("vary", ""),
- pair("via", ""),
- pair("www-authenticate", ""),
+var staticTable = newStaticTable()
+var staticTableEntries = [...]HeaderField{
+ {Name: ":authority"},
+ {Name: ":method", Value: "GET"},
+ {Name: ":method", Value: "POST"},
+ {Name: ":path", Value: "/"},
+ {Name: ":path", Value: "/index.html"},
+ {Name: ":scheme", Value: "http"},
+ {Name: ":scheme", Value: "https"},
+ {Name: ":status", Value: "200"},
+ {Name: ":status", Value: "204"},
+ {Name: ":status", Value: "206"},
+ {Name: ":status", Value: "304"},
+ {Name: ":status", Value: "400"},
+ {Name: ":status", Value: "404"},
+ {Name: ":status", Value: "500"},
+ {Name: "accept-charset"},
+ {Name: "accept-encoding", Value: "gzip, deflate"},
+ {Name: "accept-language"},
+ {Name: "accept-ranges"},
+ {Name: "accept"},
+ {Name: "access-control-allow-origin"},
+ {Name: "age"},
+ {Name: "allow"},
+ {Name: "authorization"},
+ {Name: "cache-control"},
+ {Name: "content-disposition"},
+ {Name: "content-encoding"},
+ {Name: "content-language"},
+ {Name: "content-length"},
+ {Name: "content-location"},
+ {Name: "content-range"},
+ {Name: "content-type"},
+ {Name: "cookie"},
+ {Name: "date"},
+ {Name: "etag"},
+ {Name: "expect"},
+ {Name: "expires"},
+ {Name: "from"},
+ {Name: "host"},
+ {Name: "if-match"},
+ {Name: "if-modified-since"},
+ {Name: "if-none-match"},
+ {Name: "if-range"},
+ {Name: "if-unmodified-since"},
+ {Name: "last-modified"},
+ {Name: "link"},
+ {Name: "location"},
+ {Name: "max-forwards"},
+ {Name: "proxy-authenticate"},
+ {Name: "proxy-authorization"},
+ {Name: "range"},
+ {Name: "referer"},
+ {Name: "refresh"},
+ {Name: "retry-after"},
+ {Name: "server"},
+ {Name: "set-cookie"},
+ {Name: "strict-transport-security"},
+ {Name: "transfer-encoding"},
+ {Name: "user-agent"},
+ {Name: "vary"},
+ {Name: "via"},
+ {Name: "www-authenticate"},
+}
+
+func newStaticTable() *headerFieldTable {
+ t := &headerFieldTable{}
+ t.init()
+ for _, e := range staticTableEntries[:] {
+ t.addEntry(e)
+ }
+ return t
}
var huffmanCodes = [256]uint32{
diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go
index b6b0f9ad1..bdaba1d46 100644
--- a/vendor/golang.org/x/net/http2/http2.go
+++ b/vendor/golang.org/x/net/http2/http2.go
@@ -29,7 +29,7 @@ import (
"strings"
"sync"
- "golang.org/x/net/lex/httplex"
+ "golang.org/x/net/http/httpguts"
)
var (
@@ -179,7 +179,7 @@ var (
)
// validWireHeaderFieldName reports whether v is a valid header field
-// name (key). See httplex.ValidHeaderName for the base rules.
+// name (key). See httpguts.ValidHeaderName for the base rules.
//
// Further, http2 says:
// "Just as in HTTP/1.x, header field names are strings of ASCII
@@ -191,7 +191,7 @@ func validWireHeaderFieldName(v string) bool {
return false
}
for _, r := range v {
- if !httplex.IsTokenRune(r) {
+ if !httpguts.IsTokenRune(r) {
return false
}
if 'A' <= r && r <= 'Z' {
@@ -201,19 +201,12 @@ func validWireHeaderFieldName(v string) bool {
return true
}
-var httpCodeStringCommon = map[int]string{} // n -> strconv.Itoa(n)
-
-func init() {
- for i := 100; i <= 999; i++ {
- if v := http.StatusText(i); v != "" {
- httpCodeStringCommon[i] = strconv.Itoa(i)
- }
- }
-}
-
func httpCodeString(code int) string {
- if s, ok := httpCodeStringCommon[code]; ok {
- return s
+ switch code {
+ case 200:
+ return "200"
+ case 404:
+ return "404"
}
return strconv.Itoa(code)
}
@@ -312,7 +305,7 @@ func mustUint31(v int32) uint32 {
}
// bodyAllowedForStatus reports whether a given response status code
-// permits a body. See RFC 2616, section 4.4.
+// permits a body. See RFC 7230, section 3.3.
func bodyAllowedForStatus(status int) bool {
switch {
case status >= 100 && status <= 199:
@@ -376,12 +369,16 @@ func (s *sorter) SortStrings(ss []string) {
// validPseudoPath reports whether v is a valid :path pseudo-header
// value. It must be either:
//
-// *) a non-empty string starting with '/', but not with with "//",
+// *) a non-empty string starting with '/'
// *) the string '*', for OPTIONS requests.
//
// For now this is only used a quick check for deciding when to clean
// up Opaque URLs before sending requests from the Transport.
// See golang.org/issue/16847
+//
+// We used to enforce that the path also didn't start with "//", but
+// Google's GFE accepts such paths and Chrome sends them, so ignore
+// that part of the spec. See golang.org/issue/19103.
func validPseudoPath(v string) bool {
- return (len(v) > 0 && v[0] == '/' && (len(v) == 1 || v[1] != '/')) || v == "*"
+ return (len(v) > 0 && v[0] == '/') || v == "*"
}
diff --git a/vendor/golang.org/x/net/http2/not_go111.go b/vendor/golang.org/x/net/http2/not_go111.go
new file mode 100644
index 000000000..161bca7ce
--- /dev/null
+++ b/vendor/golang.org/x/net/http2/not_go111.go
@@ -0,0 +1,20 @@
+// 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.
+
+// +build !go1.11
+
+package http2
+
+import (
+ "net/http/httptrace"
+ "net/textproto"
+)
+
+func traceHasWroteHeaderField(trace *httptrace.ClientTrace) bool { return false }
+
+func traceWroteHeaderField(trace *httptrace.ClientTrace, k, v string) {}
+
+func traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textproto.MIMEHeader) error {
+ return nil
+}
diff --git a/vendor/golang.org/x/net/http2/not_go16.go b/vendor/golang.org/x/net/http2/not_go16.go
deleted file mode 100644
index efd2e1282..000000000
--- a/vendor/golang.org/x/net/http2/not_go16.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build !go1.6
-
-package http2
-
-import (
- "crypto/tls"
- "net/http"
- "time"
-)
-
-func configureTransport(t1 *http.Transport) (*Transport, error) {
- return nil, errTransportVersion
-}
-
-func transportExpectContinueTimeout(t1 *http.Transport) time.Duration {
- return 0
-
-}
-
-// isBadCipher reports whether the cipher is blacklisted by the HTTP/2 spec.
-func isBadCipher(cipher uint16) bool {
- switch cipher {
- case tls.TLS_RSA_WITH_RC4_128_SHA,
- tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA,
- tls.TLS_RSA_WITH_AES_128_CBC_SHA,
- tls.TLS_RSA_WITH_AES_256_CBC_SHA,
- tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
- tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
- tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
- tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA,
- tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
- tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
- tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:
- // Reject cipher suites from Appendix A.
- // "This list includes those cipher suites that do not
- // offer an ephemeral key exchange and those that are
- // based on the TLS null, stream or block cipher type"
- return true
- default:
- return false
- }
-}
diff --git a/vendor/golang.org/x/net/http2/not_go17.go b/vendor/golang.org/x/net/http2/not_go17.go
deleted file mode 100644
index 140434a79..000000000
--- a/vendor/golang.org/x/net/http2/not_go17.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// 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.
-
-// +build !go1.7
-
-package http2
-
-import (
- "crypto/tls"
- "net"
- "net/http"
- "time"
-)
-
-type contextContext interface {
- Done() <-chan struct{}
- Err() error
-}
-
-type fakeContext struct{}
-
-func (fakeContext) Done() <-chan struct{} { return nil }
-func (fakeContext) Err() error { panic("should not be called") }
-
-func reqContext(r *http.Request) fakeContext {
- return fakeContext{}
-}
-
-func setResponseUncompressed(res *http.Response) {
- // Nothing.
-}
-
-type clientTrace struct{}
-
-func requestTrace(*http.Request) *clientTrace { return nil }
-func traceGotConn(*http.Request, *ClientConn) {}
-func traceFirstResponseByte(*clientTrace) {}
-func traceWroteHeaders(*clientTrace) {}
-func traceWroteRequest(*clientTrace, error) {}
-func traceGot100Continue(trace *clientTrace) {}
-func traceWait100Continue(trace *clientTrace) {}
-
-func nop() {}
-
-func serverConnBaseContext(c net.Conn, opts *ServeConnOpts) (ctx contextContext, cancel func()) {
- return nil, nop
-}
-
-func contextWithCancel(ctx contextContext) (_ contextContext, cancel func()) {
- return ctx, nop
-}
-
-func requestWithContext(req *http.Request, ctx contextContext) *http.Request {
- return req
-}
-
-// temporary copy of Go 1.6's private tls.Config.clone:
-func cloneTLSConfig(c *tls.Config) *tls.Config {
- return &tls.Config{
- Rand: c.Rand,
- Time: c.Time,
- Certificates: c.Certificates,
- NameToCertificate: c.NameToCertificate,
- GetCertificate: c.GetCertificate,
- RootCAs: c.RootCAs,
- NextProtos: c.NextProtos,
- ServerName: c.ServerName,
- ClientAuth: c.ClientAuth,
- ClientCAs: c.ClientCAs,
- InsecureSkipVerify: c.InsecureSkipVerify,
- CipherSuites: c.CipherSuites,
- PreferServerCipherSuites: c.PreferServerCipherSuites,
- SessionTicketsDisabled: c.SessionTicketsDisabled,
- SessionTicketKey: c.SessionTicketKey,
- ClientSessionCache: c.ClientSessionCache,
- MinVersion: c.MinVersion,
- MaxVersion: c.MaxVersion,
- CurvePreferences: c.CurvePreferences,
- }
-}
-
-func (cc *ClientConn) Ping(ctx contextContext) error {
- return cc.ping(ctx)
-}
-
-func (t *Transport) idleConnTimeout() time.Duration { return 0 }
diff --git a/vendor/golang.org/x/net/http2/not_go18.go b/vendor/golang.org/x/net/http2/not_go18.go
deleted file mode 100644
index efbf83c32..000000000
--- a/vendor/golang.org/x/net/http2/not_go18.go
+++ /dev/null
@@ -1,27 +0,0 @@
-// 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.
-
-// +build !go1.8
-
-package http2
-
-import (
- "io"
- "net/http"
-)
-
-func configureServer18(h1 *http.Server, h2 *Server) error {
- // No IdleTimeout to sync prior to Go 1.8.
- return nil
-}
-
-func shouldLogPanic(panicValue interface{}) bool {
- return panicValue != nil
-}
-
-func reqGetBody(req *http.Request) func() (io.ReadCloser, error) {
- return nil
-}
-
-func reqBodyIsNoBody(io.ReadCloser) bool { return false }
diff --git a/vendor/golang.org/x/net/http2/pipe.go b/vendor/golang.org/x/net/http2/pipe.go
index 53b7a1daf..a6140099c 100644
--- a/vendor/golang.org/x/net/http2/pipe.go
+++ b/vendor/golang.org/x/net/http2/pipe.go
@@ -10,13 +10,13 @@ import (
"sync"
)
-// pipe is a goroutine-safe io.Reader/io.Writer pair. It's like
+// pipe is a goroutine-safe io.Reader/io.Writer pair. It's like
// io.Pipe except there are no PipeReader/PipeWriter halves, and the
// underlying buffer is an interface. (io.Pipe is always unbuffered)
type pipe struct {
mu sync.Mutex
- c sync.Cond // c.L lazily initialized to &p.mu
- b pipeBuffer
+ c sync.Cond // c.L lazily initialized to &p.mu
+ b pipeBuffer // nil when done reading
err error // read error once empty. non-nil means closed.
breakErr error // immediate read error (caller doesn't see rest of b)
donec chan struct{} // closed on error
@@ -32,6 +32,9 @@ type pipeBuffer interface {
func (p *pipe) Len() int {
p.mu.Lock()
defer p.mu.Unlock()
+ if p.b == nil {
+ return 0
+ }
return p.b.Len()
}
@@ -47,7 +50,7 @@ func (p *pipe) Read(d []byte) (n int, err error) {
if p.breakErr != nil {
return 0, p.breakErr
}
- if p.b.Len() > 0 {
+ if p.b != nil && p.b.Len() > 0 {
return p.b.Read(d)
}
if p.err != nil {
@@ -55,6 +58,7 @@ func (p *pipe) Read(d []byte) (n int, err error) {
p.readFn() // e.g. copy trailers
p.readFn = nil // not sticky like p.err
}
+ p.b = nil
return 0, p.err
}
p.c.Wait()
@@ -75,6 +79,9 @@ func (p *pipe) Write(d []byte) (n int, err error) {
if p.err != nil {
return 0, errClosedPipeWrite
}
+ if p.breakErr != nil {
+ return len(d), nil // discard when there is no reader
+ }
return p.b.Write(d)
}
@@ -109,6 +116,9 @@ func (p *pipe) closeWithError(dst *error, err error, fn func()) {
return
}
p.readFn = fn
+ if dst == &p.breakErr {
+ p.b = nil
+ }
*dst = err
p.closeDoneLocked()
}
diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go
index 3c6b90ccd..b57b6e2d0 100644
--- a/vendor/golang.org/x/net/http2/server.go
+++ b/vendor/golang.org/x/net/http2/server.go
@@ -28,6 +28,7 @@ package http2
import (
"bufio"
"bytes"
+ "context"
"crypto/tls"
"errors"
"fmt"
@@ -46,6 +47,7 @@ import (
"sync"
"time"
+ "golang.org/x/net/http/httpguts"
"golang.org/x/net/http2/hpack"
)
@@ -110,9 +112,41 @@ type Server struct {
// activity for the purposes of IdleTimeout.
IdleTimeout time.Duration
+ // MaxUploadBufferPerConnection is the size of the initial flow
+ // control window for each connections. The HTTP/2 spec does not
+ // allow this to be smaller than 65535 or larger than 2^32-1.
+ // If the value is outside this range, a default value will be
+ // used instead.
+ MaxUploadBufferPerConnection int32
+
+ // MaxUploadBufferPerStream is the size of the initial flow control
+ // window for each stream. The HTTP/2 spec does not allow this to
+ // be larger than 2^32-1. If the value is zero or larger than the
+ // maximum, a default value will be used instead.
+ MaxUploadBufferPerStream int32
+
// NewWriteScheduler constructs a write scheduler for a connection.
// If nil, a default scheduler is chosen.
NewWriteScheduler func() WriteScheduler
+
+ // Internal state. This is a pointer (rather than embedded directly)
+ // so that we don't embed a Mutex in this struct, which will make the
+ // struct non-copyable, which might break some callers.
+ state *serverInternalState
+}
+
+func (s *Server) initialConnRecvWindowSize() int32 {
+ if s.MaxUploadBufferPerConnection > initialWindowSize {
+ return s.MaxUploadBufferPerConnection
+ }
+ return 1 << 20
+}
+
+func (s *Server) initialStreamRecvWindowSize() int32 {
+ if s.MaxUploadBufferPerStream > 0 {
+ return s.MaxUploadBufferPerStream
+ }
+ return 1 << 20
}
func (s *Server) maxReadFrameSize() uint32 {
@@ -129,6 +163,40 @@ func (s *Server) maxConcurrentStreams() uint32 {
return defaultMaxStreams
}
+type serverInternalState struct {
+ mu sync.Mutex
+ activeConns map[*serverConn]struct{}
+}
+
+func (s *serverInternalState) registerConn(sc *serverConn) {
+ if s == nil {
+ return // if the Server was used without calling ConfigureServer
+ }
+ s.mu.Lock()
+ s.activeConns[sc] = struct{}{}
+ s.mu.Unlock()
+}
+
+func (s *serverInternalState) unregisterConn(sc *serverConn) {
+ if s == nil {
+ return // if the Server was used without calling ConfigureServer
+ }
+ s.mu.Lock()
+ delete(s.activeConns, sc)
+ s.mu.Unlock()
+}
+
+func (s *serverInternalState) startGracefulShutdown() {
+ if s == nil {
+ return // if the Server was used without calling ConfigureServer
+ }
+ s.mu.Lock()
+ for sc := range s.activeConns {
+ sc.startGracefulShutdown()
+ }
+ s.mu.Unlock()
+}
+
// ConfigureServer adds HTTP/2 support to a net/http Server.
//
// The configuration conf may be nil.
@@ -141,21 +209,30 @@ func ConfigureServer(s *http.Server, conf *Server) error {
if conf == nil {
conf = new(Server)
}
- if err := configureServer18(s, conf); err != nil {
- return err
+ conf.state = &serverInternalState{activeConns: make(map[*serverConn]struct{})}
+ if h1, h2 := s, conf; h2.IdleTimeout == 0 {
+ if h1.IdleTimeout != 0 {
+ h2.IdleTimeout = h1.IdleTimeout
+ } else {
+ h2.IdleTimeout = h1.ReadTimeout
+ }
}
+ s.RegisterOnShutdown(conf.state.startGracefulShutdown)
if s.TLSConfig == nil {
s.TLSConfig = new(tls.Config)
} else if s.TLSConfig.CipherSuites != nil {
// If they already provided a CipherSuite list, return
// an error if it has a bad order or is missing
- // ECDHE_RSA_WITH_AES_128_GCM_SHA256.
- const requiredCipher = tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
+ // ECDHE_RSA_WITH_AES_128_GCM_SHA256 or ECDHE_ECDSA_WITH_AES_128_GCM_SHA256.
haveRequired := false
sawBad := false
for i, cs := range s.TLSConfig.CipherSuites {
- if cs == requiredCipher {
+ switch cs {
+ case tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+ // Alternative MTI cipher to not discourage ECDSA-only servers.
+ // See http://golang.org/cl/30721 for further information.
+ tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:
haveRequired = true
}
if isBadCipher(cs) {
@@ -165,7 +242,7 @@ func ConfigureServer(s *http.Server, conf *Server) error {
}
}
if !haveRequired {
- return fmt.Errorf("http2: TLSConfig.CipherSuites is missing HTTP/2-required TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256")
+ return fmt.Errorf("http2: TLSConfig.CipherSuites is missing an HTTP/2-required AES_128_GCM_SHA256 cipher.")
}
}
@@ -255,35 +332,37 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
defer cancel()
sc := &serverConn{
- srv: s,
- hs: opts.baseConfig(),
- conn: c,
- baseCtx: baseCtx,
- remoteAddrStr: c.RemoteAddr().String(),
- bw: newBufferedWriter(c),
- handler: opts.handler(),
- streams: make(map[uint32]*stream),
- readFrameCh: make(chan readFrameResult),
- wantWriteFrameCh: make(chan FrameWriteRequest, 8),
- wantStartPushCh: make(chan startPushRequest, 8),
- wroteFrameCh: make(chan frameWriteResult, 1), // buffered; one send in writeFrameAsync
- bodyReadCh: make(chan bodyReadMsg), // buffering doesn't matter either way
- doneServing: make(chan struct{}),
- clientMaxStreams: math.MaxUint32, // Section 6.5.2: "Initially, there is no limit to this value"
- advMaxStreams: s.maxConcurrentStreams(),
- initialWindowSize: initialWindowSize,
- maxFrameSize: initialMaxFrameSize,
- headerTableSize: initialHeaderTableSize,
- serveG: newGoroutineLock(),
- pushEnabled: true,
- }
+ srv: s,
+ hs: opts.baseConfig(),
+ conn: c,
+ baseCtx: baseCtx,
+ remoteAddrStr: c.RemoteAddr().String(),
+ bw: newBufferedWriter(c),
+ handler: opts.handler(),
+ streams: make(map[uint32]*stream),
+ readFrameCh: make(chan readFrameResult),
+ wantWriteFrameCh: make(chan FrameWriteRequest, 8),
+ serveMsgCh: make(chan interface{}, 8),
+ wroteFrameCh: make(chan frameWriteResult, 1), // buffered; one send in writeFrameAsync
+ bodyReadCh: make(chan bodyReadMsg), // buffering doesn't matter either way
+ doneServing: make(chan struct{}),
+ clientMaxStreams: math.MaxUint32, // Section 6.5.2: "Initially, there is no limit to this value"
+ advMaxStreams: s.maxConcurrentStreams(),
+ initialStreamSendWindowSize: initialWindowSize,
+ maxFrameSize: initialMaxFrameSize,
+ headerTableSize: initialHeaderTableSize,
+ serveG: newGoroutineLock(),
+ pushEnabled: true,
+ }
+
+ s.state.registerConn(sc)
+ defer s.state.unregisterConn(sc)
// The net/http package sets the write deadline from the
// http.Server.WriteTimeout during the TLS handshake, but then
- // passes the connection off to us with the deadline already
- // set. Disarm it here so that it is not applied to additional
- // streams opened on this connection.
- // TODO: implement WriteTimeout fully. See Issue 18437.
+ // passes the connection off to us with the deadline already set.
+ // Write deadlines are set per stream in serverConn.newStream.
+ // Disarm the net.Conn write deadline here.
if sc.hs.WriteTimeout != 0 {
sc.conn.SetWriteDeadline(time.Time{})
}
@@ -294,6 +373,9 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
sc.writeSched = NewRandomWriteScheduler()
}
+ // These start at the RFC-specified defaults. If there is a higher
+ // configured value for inflow, that will be updated when we send a
+ // WINDOW_UPDATE shortly after sending SETTINGS.
sc.flow.add(initialWindowSize)
sc.inflow.add(initialWindowSize)
sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf)
@@ -328,7 +410,7 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
// addresses during development.
//
// TODO: optionally enforce? Or enforce at the time we receive
- // a new request, and verify the the ServerName matches the :authority?
+ // a new request, and verify the ServerName matches the :authority?
// But that precludes proxy situations, perhaps.
//
// So for now, do nothing here again.
@@ -356,6 +438,15 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
sc.serve()
}
+func serverConnBaseContext(c net.Conn, opts *ServeConnOpts) (ctx context.Context, cancel func()) {
+ ctx, cancel = context.WithCancel(context.Background())
+ ctx = context.WithValue(ctx, http.LocalAddrContextKey, c.LocalAddr())
+ if hs := opts.baseConfig(); hs != nil {
+ ctx = context.WithValue(ctx, http.ServerContextKey, hs)
+ }
+ return
+}
+
func (sc *serverConn) rejectConn(err ErrCode, debug string) {
sc.vlogf("http2: server rejecting conn: %v, %s", err, debug)
// ignoring errors. hanging up anyway.
@@ -371,15 +462,14 @@ type serverConn struct {
conn net.Conn
bw *bufferedWriter // writing to conn
handler http.Handler
- baseCtx contextContext
+ baseCtx context.Context
framer *Framer
doneServing chan struct{} // closed when serverConn.serve ends
readFrameCh chan readFrameResult // written by serverConn.readFrames
wantWriteFrameCh chan FrameWriteRequest // from handlers -> serve
- wantStartPushCh chan startPushRequest // from handlers -> serve
wroteFrameCh chan frameWriteResult // from writeFrameAsync -> serve, tickles more frame writes
bodyReadCh chan bodyReadMsg // from handlers -> serve
- testHookCh chan func(int) // code to run on the serve loop
+ serveMsgCh chan interface{} // misc messages & code to send to / run on the serve loop
flow flow // conn-wide (not stream-specific) outbound flow control
inflow flow // conn-wide inbound flow control
tlsState *tls.ConnectionState // shared by all handlers, like net/http
@@ -387,38 +477,39 @@ type serverConn struct {
writeSched WriteScheduler
// Everything following is owned by the serve loop; use serveG.check():
- serveG goroutineLock // used to verify funcs are on serve()
- pushEnabled bool
- sawFirstSettings bool // got the initial SETTINGS frame after the preface
- needToSendSettingsAck bool
- unackedSettings int // how many SETTINGS have we sent without ACKs?
- clientMaxStreams uint32 // SETTINGS_MAX_CONCURRENT_STREAMS from client (our PUSH_PROMISE limit)
- advMaxStreams uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client
- curClientStreams uint32 // number of open streams initiated by the client
- curPushedStreams uint32 // number of open streams initiated by server push
- maxClientStreamID uint32 // max ever seen from client (odd), or 0 if there have been no client requests
- maxPushPromiseID uint32 // ID of the last push promise (even), or 0 if there have been no pushes
- streams map[uint32]*stream
- initialWindowSize int32
- maxFrameSize int32
- headerTableSize uint32
- peerMaxHeaderListSize uint32 // zero means unknown (default)
- canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case
- writingFrame bool // started writing a frame (on serve goroutine or separate)
- writingFrameAsync bool // started a frame on its own goroutine but haven't heard back on wroteFrameCh
- needsFrameFlush bool // last frame write wasn't a flush
- inGoAway bool // we've started to or sent GOAWAY
- inFrameScheduleLoop bool // whether we're in the scheduleFrameWrite loop
- needToSendGoAway bool // we need to schedule a GOAWAY frame write
- goAwayCode ErrCode
- shutdownTimerCh <-chan time.Time // nil until used
- shutdownTimer *time.Timer // nil until used
- idleTimer *time.Timer // nil if unused
- idleTimerCh <-chan time.Time // nil if unused
+ serveG goroutineLock // used to verify funcs are on serve()
+ pushEnabled bool
+ sawFirstSettings bool // got the initial SETTINGS frame after the preface
+ needToSendSettingsAck bool
+ unackedSettings int // how many SETTINGS have we sent without ACKs?
+ clientMaxStreams uint32 // SETTINGS_MAX_CONCURRENT_STREAMS from client (our PUSH_PROMISE limit)
+ advMaxStreams uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client
+ curClientStreams uint32 // number of open streams initiated by the client
+ curPushedStreams uint32 // number of open streams initiated by server push
+ maxClientStreamID uint32 // max ever seen from client (odd), or 0 if there have been no client requests
+ maxPushPromiseID uint32 // ID of the last push promise (even), or 0 if there have been no pushes
+ streams map[uint32]*stream
+ initialStreamSendWindowSize int32
+ maxFrameSize int32
+ headerTableSize uint32
+ peerMaxHeaderListSize uint32 // zero means unknown (default)
+ canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case
+ writingFrame bool // started writing a frame (on serve goroutine or separate)
+ writingFrameAsync bool // started a frame on its own goroutine but haven't heard back on wroteFrameCh
+ needsFrameFlush bool // last frame write wasn't a flush
+ inGoAway bool // we've started to or sent GOAWAY
+ inFrameScheduleLoop bool // whether we're in the scheduleFrameWrite loop
+ needToSendGoAway bool // we need to schedule a GOAWAY frame write
+ goAwayCode ErrCode
+ shutdownTimer *time.Timer // nil until used
+ idleTimer *time.Timer // nil if unused
// Owned by the writeFrameAsync goroutine:
headerWriteBuf bytes.Buffer
hpackEncoder *hpack.Encoder
+
+ // Used by startGracefulShutdown.
+ shutdownOnce sync.Once
}
func (sc *serverConn) maxHeaderListSize() uint32 {
@@ -451,7 +542,7 @@ type stream struct {
id uint32
body *pipe // non-nil if expecting DATA frames
cw closeWaiter // closed wait stream transitions to closed state
- ctx contextContext
+ ctx context.Context
cancelCtx func()
// owned by serverConn's serve loop:
@@ -463,10 +554,10 @@ type stream struct {
numTrailerValues int64
weight uint8
state streamState
- resetQueued bool // RST_STREAM queued for write; set by sc.resetStream
- gotTrailerHeader bool // HEADER frame for trailers was seen
- wroteHeaders bool // whether we wrote headers (not status 100)
- reqBuf []byte // if non-nil, body pipe buffer to return later at EOF
+ resetQueued bool // RST_STREAM queued for write; set by sc.resetStream
+ gotTrailerHeader bool // HEADER frame for trailers was seen
+ wroteHeaders bool // whether we wrote headers (not status 100)
+ writeDeadline *time.Timer // nil if unused
trailer http.Header // accumulated trailers
reqTrailer http.Header // handler's Request.Trailer
@@ -574,7 +665,7 @@ func (sc *serverConn) condlogf(err error, format string, args ...interface{}) {
if err == nil {
return
}
- if err == io.EOF || err == io.ErrUnexpectedEOF || isClosedConnError(err) {
+ if err == io.EOF || err == io.ErrUnexpectedEOF || isClosedConnError(err) || err == errPrefaceTimeout {
// Boring, expected errors.
sc.vlogf(format, args...)
} else {
@@ -584,6 +675,7 @@ func (sc *serverConn) condlogf(err error, format string, args ...interface{}) {
func (sc *serverConn) canonicalHeader(v string) string {
sc.serveG.check()
+ buildCommonHeaderMapsOnce()
cv, ok := commonCanonHeader[v]
if ok {
return cv
@@ -696,48 +788,48 @@ func (sc *serverConn) serve() {
{SettingMaxFrameSize, sc.srv.maxReadFrameSize()},
{SettingMaxConcurrentStreams, sc.advMaxStreams},
{SettingMaxHeaderListSize, sc.maxHeaderListSize()},
-
- // TODO: more actual settings, notably
- // SettingInitialWindowSize, but then we also
- // want to bump up the conn window size the
- // same amount here right after the settings
+ {SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())},
},
})
sc.unackedSettings++
+ // Each connection starts with intialWindowSize inflow tokens.
+ // If a higher value is configured, we add more tokens.
+ if diff := sc.srv.initialConnRecvWindowSize() - initialWindowSize; diff > 0 {
+ sc.sendWindowUpdate(nil, int(diff))
+ }
+
if err := sc.readPreface(); err != nil {
sc.condlogf(err, "http2: server: error reading preface from client %v: %v", sc.conn.RemoteAddr(), err)
return
}
// Now that we've got the preface, get us out of the
- // "StateNew" state. We can't go directly to idle, though.
+ // "StateNew" state. We can't go directly to idle, though.
// Active means we read some data and anticipate a request. We'll
// do another Active when we get a HEADERS frame.
sc.setConnState(http.StateActive)
sc.setConnState(http.StateIdle)
if sc.srv.IdleTimeout != 0 {
- sc.idleTimer = time.NewTimer(sc.srv.IdleTimeout)
+ sc.idleTimer = time.AfterFunc(sc.srv.IdleTimeout, sc.onIdleTimer)
defer sc.idleTimer.Stop()
- sc.idleTimerCh = sc.idleTimer.C
- }
-
- var gracefulShutdownCh <-chan struct{}
- if sc.hs != nil {
- gracefulShutdownCh = h1ServerShutdownChan(sc.hs)
}
go sc.readFrames() // closed by defer sc.conn.Close above
- settingsTimer := time.NewTimer(firstSettingsTimeout)
+ settingsTimer := time.AfterFunc(firstSettingsTimeout, sc.onSettingsTimer)
+ defer settingsTimer.Stop()
+
loopNum := 0
for {
loopNum++
select {
case wr := <-sc.wantWriteFrameCh:
+ if se, ok := wr.write.(StreamError); ok {
+ sc.resetStream(se)
+ break
+ }
sc.writeFrame(wr)
- case spr := <-sc.wantStartPushCh:
- sc.startPush(spr)
case res := <-sc.wroteFrameCh:
sc.wroteFrame(res)
case res := <-sc.readFrameCh:
@@ -745,36 +837,85 @@ func (sc *serverConn) serve() {
return
}
res.readMore()
- if settingsTimer.C != nil {
+ if settingsTimer != nil {
settingsTimer.Stop()
- settingsTimer.C = nil
+ settingsTimer = nil
}
case m := <-sc.bodyReadCh:
sc.noteBodyRead(m.st, m.n)
- case <-settingsTimer.C:
- sc.logf("timeout waiting for SETTINGS frames from %v", sc.conn.RemoteAddr())
- return
- case <-gracefulShutdownCh:
- gracefulShutdownCh = nil
- sc.startGracefulShutdown()
- case <-sc.shutdownTimerCh:
- sc.vlogf("GOAWAY close timer fired; closing conn from %v", sc.conn.RemoteAddr())
- return
- case <-sc.idleTimerCh:
- sc.vlogf("connection is idle")
- sc.goAway(ErrCodeNo)
- case fn := <-sc.testHookCh:
- fn(loopNum)
+ case msg := <-sc.serveMsgCh:
+ switch v := msg.(type) {
+ case func(int):
+ v(loopNum) // for testing
+ case *serverMessage:
+ switch v {
+ case settingsTimerMsg:
+ sc.logf("timeout waiting for SETTINGS frames from %v", sc.conn.RemoteAddr())
+ return
+ case idleTimerMsg:
+ sc.vlogf("connection is idle")
+ sc.goAway(ErrCodeNo)
+ case shutdownTimerMsg:
+ sc.vlogf("GOAWAY close timer fired; closing conn from %v", sc.conn.RemoteAddr())
+ return
+ case gracefulShutdownMsg:
+ sc.startGracefulShutdownInternal()
+ default:
+ panic("unknown timer")
+ }
+ case *startPushRequest:
+ sc.startPush(v)
+ default:
+ panic(fmt.Sprintf("unexpected type %T", v))
+ }
}
- if sc.inGoAway && sc.curOpenStreams() == 0 && !sc.needToSendGoAway && !sc.writingFrame {
- return
+ // Start the shutdown timer after sending a GOAWAY. When sending GOAWAY
+ // with no error code (graceful shutdown), don't start the timer until
+ // all open streams have been completed.
+ sentGoAway := sc.inGoAway && !sc.needToSendGoAway && !sc.writingFrame
+ gracefulShutdownComplete := sc.goAwayCode == ErrCodeNo && sc.curOpenStreams() == 0
+ if sentGoAway && sc.shutdownTimer == nil && (sc.goAwayCode != ErrCodeNo || gracefulShutdownComplete) {
+ sc.shutDownIn(goAwayTimeout)
}
}
}
-// readPreface reads the ClientPreface greeting from the peer
-// or returns an error on timeout or an invalid greeting.
+func (sc *serverConn) awaitGracefulShutdown(sharedCh <-chan struct{}, privateCh chan struct{}) {
+ select {
+ case <-sc.doneServing:
+ case <-sharedCh:
+ close(privateCh)
+ }
+}
+
+type serverMessage int
+
+// Message values sent to serveMsgCh.
+var (
+ settingsTimerMsg = new(serverMessage)
+ idleTimerMsg = new(serverMessage)
+ shutdownTimerMsg = new(serverMessage)
+ gracefulShutdownMsg = new(serverMessage)
+)
+
+func (sc *serverConn) onSettingsTimer() { sc.sendServeMsg(settingsTimerMsg) }
+func (sc *serverConn) onIdleTimer() { sc.sendServeMsg(idleTimerMsg) }
+func (sc *serverConn) onShutdownTimer() { sc.sendServeMsg(shutdownTimerMsg) }
+
+func (sc *serverConn) sendServeMsg(msg interface{}) {
+ sc.serveG.checkNotOn() // NOT
+ select {
+ case sc.serveMsgCh <- msg:
+ case <-sc.doneServing:
+ }
+}
+
+var errPrefaceTimeout = errors.New("timeout waiting for client preface")
+
+// readPreface reads the ClientPreface greeting from the peer or
+// returns errPrefaceTimeout on timeout, or an error if the greeting
+// is invalid.
func (sc *serverConn) readPreface() error {
errc := make(chan error, 1)
go func() {
@@ -792,7 +933,7 @@ func (sc *serverConn) readPreface() error {
defer timer.Stop()
select {
case <-timer.C:
- return errors.New("timeout waiting for client preface")
+ return errPrefaceTimeout
case err := <-errc:
if err == nil {
if VerboseLogs {
@@ -981,7 +1122,7 @@ func (sc *serverConn) startFrameWrite(wr FrameWriteRequest) {
// errHandlerPanicked is the error given to any callers blocked in a read from
// Request.Body when the main goroutine panics. Since most handlers read in the
-// the main ServeHTTP goroutine, this will show up rarely.
+// main ServeHTTP goroutine, this will show up rarely.
var errHandlerPanicked = errors.New("http2: handler panicked")
// wroteFrame is called on the serve goroutine with the result of
@@ -1014,7 +1155,11 @@ func (sc *serverConn) wroteFrame(res frameWriteResult) {
// stateClosed after the RST_STREAM frame is
// written.
st.state = stateHalfClosedLocal
- sc.resetStream(streamError(st.id, ErrCodeCancel))
+ // Section 8.1: a server MAY request that the client abort
+ // transmission of a request without error by sending a
+ // RST_STREAM with an error code of NO_ERROR after sending
+ // a complete response.
+ sc.resetStream(streamError(st.id, ErrCodeNo))
case stateHalfClosedRemote:
sc.closeStream(st, errHandlerComplete)
}
@@ -1086,33 +1231,43 @@ func (sc *serverConn) scheduleFrameWrite() {
sc.inFrameScheduleLoop = false
}
-// startGracefulShutdown sends a GOAWAY with ErrCodeNo to tell the
-// client we're gracefully shutting down. The connection isn't closed
-// until all current streams are done.
+// startGracefulShutdown gracefully shuts down a connection. This
+// sends GOAWAY with ErrCodeNo to tell the client we're gracefully
+// shutting down. The connection isn't closed until all current
+// streams are done.
+//
+// startGracefulShutdown returns immediately; it does not wait until
+// the connection has shut down.
func (sc *serverConn) startGracefulShutdown() {
- sc.goAwayIn(ErrCodeNo, 0)
+ sc.serveG.checkNotOn() // NOT
+ sc.shutdownOnce.Do(func() { sc.sendServeMsg(gracefulShutdownMsg) })
}
-func (sc *serverConn) goAway(code ErrCode) {
- sc.serveG.check()
- var forceCloseIn time.Duration
- if code != ErrCodeNo {
- forceCloseIn = 250 * time.Millisecond
- } else {
- // TODO: configurable
- forceCloseIn = 1 * time.Second
- }
- sc.goAwayIn(code, forceCloseIn)
+// After sending GOAWAY, the connection will close after goAwayTimeout.
+// If we close the connection immediately after sending GOAWAY, there may
+// be unsent data in our kernel receive buffer, which will cause the kernel
+// to send a TCP RST on close() instead of a FIN. This RST will abort the
+// connection immediately, whether or not the client had received the GOAWAY.
+//
+// Ideally we should delay for at least 1 RTT + epsilon so the client has
+// a chance to read the GOAWAY and stop sending messages. Measuring RTT
+// is hard, so we approximate with 1 second. See golang.org/issue/18701.
+//
+// This is a var so it can be shorter in tests, where all requests uses the
+// loopback interface making the expected RTT very small.
+//
+// TODO: configurable?
+var goAwayTimeout = 1 * time.Second
+
+func (sc *serverConn) startGracefulShutdownInternal() {
+ sc.goAway(ErrCodeNo)
}
-func (sc *serverConn) goAwayIn(code ErrCode, forceCloseIn time.Duration) {
+func (sc *serverConn) goAway(code ErrCode) {
sc.serveG.check()
if sc.inGoAway {
return
}
- if forceCloseIn != 0 {
- sc.shutDownIn(forceCloseIn)
- }
sc.inGoAway = true
sc.needToSendGoAway = true
sc.goAwayCode = code
@@ -1121,8 +1276,7 @@ func (sc *serverConn) goAwayIn(code ErrCode, forceCloseIn time.Duration) {
func (sc *serverConn) shutDownIn(d time.Duration) {
sc.serveG.check()
- sc.shutdownTimer = time.NewTimer(d)
- sc.shutdownTimerCh = sc.shutdownTimer.C
+ sc.shutdownTimer = time.AfterFunc(d, sc.onShutdownTimer)
}
func (sc *serverConn) resetStream(se StreamError) {
@@ -1305,6 +1459,9 @@ func (sc *serverConn) closeStream(st *stream, err error) {
panic(fmt.Sprintf("invariant; can't close stream in state %v", st.state))
}
st.state = stateClosed
+ if st.writeDeadline != nil {
+ st.writeDeadline.Stop()
+ }
if st.isPushed() {
sc.curPushedStreams--
} else {
@@ -1317,7 +1474,7 @@ func (sc *serverConn) closeStream(st *stream, err error) {
sc.idleTimer.Reset(sc.srv.IdleTimeout)
}
if h1ServerKeepAlivesDisabled(sc.hs) {
- sc.startGracefulShutdown()
+ sc.startGracefulShutdownInternal()
}
}
if p := st.body; p != nil {
@@ -1343,6 +1500,12 @@ func (sc *serverConn) processSettings(f *SettingsFrame) error {
}
return nil
}
+ if f.NumSettings() > 100 || f.HasDuplicates() {
+ // This isn't actually in the spec, but hang up on
+ // suspiciously large settings frames or those with
+ // duplicate entries.
+ return ConnectionError(ErrCodeProtocol)
+ }
if err := f.ForeachSetting(sc.processSetting); err != nil {
return err
}
@@ -1395,9 +1558,9 @@ func (sc *serverConn) processSettingInitialWindowSize(val uint32) error {
// adjust the size of all stream flow control windows that it
// maintains by the difference between the new value and the
// old value."
- old := sc.initialWindowSize
- sc.initialWindowSize = int32(val)
- growth := sc.initialWindowSize - old // may be negative
+ old := sc.initialStreamSendWindowSize
+ sc.initialStreamSendWindowSize = int32(val)
+ growth := int32(val) - old // may be negative
for _, st := range sc.streams {
if !st.flow.add(growth) {
// 6.9.2 Initial Flow Control Window Size
@@ -1431,6 +1594,12 @@ func (sc *serverConn) processData(f *DataFrame) error {
// type PROTOCOL_ERROR."
return ConnectionError(ErrCodeProtocol)
}
+ // RFC 7540, sec 6.1: If a DATA frame is received whose stream is not in
+ // "open" or "half-closed (local)" state, the recipient MUST respond with a
+ // stream error (Section 5.4.2) of type STREAM_CLOSED.
+ if state == stateClosed {
+ return streamError(id, ErrCodeStreamClosed)
+ }
if st == nil || state != stateOpen || st.gotTrailerHeader || st.resetQueued {
// This includes sending a RST_STREAM if the stream is
// in stateHalfClosedLocal (which currently means that
@@ -1464,7 +1633,10 @@ func (sc *serverConn) processData(f *DataFrame) error {
// Sender sending more than they'd declared?
if st.declBodyBytes != -1 && st.bodyBytes+int64(len(data)) > st.declBodyBytes {
st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes))
- return streamError(id, ErrCodeStreamClosed)
+ // RFC 7540, sec 8.1.2.6: A request or response is also malformed if the
+ // value of a content-length header field does not equal the sum of the
+ // DATA frame payload lengths that form the body.
+ return streamError(id, ErrCodeProtocol)
}
if f.Length > 0 {
// Check whether the client has flow control quota.
@@ -1504,7 +1676,7 @@ func (sc *serverConn) processGoAway(f *GoAwayFrame) error {
} else {
sc.vlogf("http2: received GOAWAY %+v, starting graceful shutdown", f)
}
- sc.startGracefulShutdown()
+ sc.startGracefulShutdownInternal()
// http://tools.ietf.org/html/rfc7540#section-6.8
// We should not create any new streams, which means we should disable push.
sc.pushEnabled = false
@@ -1543,6 +1715,12 @@ func (st *stream) copyTrailersToHandlerRequest() {
}
}
+// onWriteTimeout is run on its own goroutine (from time.AfterFunc)
+// when the stream's WriteTimeout has fired.
+func (st *stream) onWriteTimeout() {
+ st.sc.writeFrameFromHandler(FrameWriteRequest{write: streamError(st.id, ErrCodeInternal)})
+}
+
func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
sc.serveG.check()
id := f.StreamID
@@ -1568,6 +1746,13 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {
// processing this frame.
return nil
}
+ // RFC 7540, sec 5.1: If an endpoint receives additional frames, other than
+ // WINDOW_UPDATE, PRIORITY, or RST_STREAM, for a stream that is in
+ // this state, it MUST respond with a stream error (Section 5.4.2) of
+ // type STREAM_CLOSED.
+ if st.state == stateHalfClosedRemote {
+ return streamError(id, ErrCodeStreamClosed)
+ }
return st.processTrailerHeaders(f)
}
@@ -1668,7 +1853,7 @@ func (st *stream) processTrailerHeaders(f *MetaHeadersFrame) error {
if st.trailer != nil {
for _, hf := range f.RegularFields() {
key := sc.canonicalHeader(hf.Name)
- if !ValidTrailerHeader(key) {
+ if !httpguts.ValidTrailerHeader(key) {
// TODO: send more details to the peer somehow. But http2 has
// no way to send debug data at a stream level. Discuss with
// HTTP folk.
@@ -1709,7 +1894,7 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream
panic("internal error: cannot create stream with id 0")
}
- ctx, cancelCtx := contextWithCancel(sc.baseCtx)
+ ctx, cancelCtx := context.WithCancel(sc.baseCtx)
st := &stream{
sc: sc,
id: id,
@@ -1719,9 +1904,12 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream
}
st.cw.Init()
st.flow.conn = &sc.flow // link to conn-level counter
- st.flow.add(sc.initialWindowSize)
- st.inflow.conn = &sc.inflow // link to conn-level counter
- st.inflow.add(initialWindowSize) // TODO: update this when we send a higher initial window size in the initial settings
+ st.flow.add(sc.initialStreamSendWindowSize)
+ st.inflow.conn = &sc.inflow // link to conn-level counter
+ st.inflow.add(sc.srv.initialStreamRecvWindowSize())
+ if sc.hs.WriteTimeout != 0 {
+ st.writeDeadline = time.AfterFunc(sc.hs.WriteTimeout, st.onWriteTimeout)
+ }
sc.streams[id] = st
sc.writeSched.OpenStream(st.id, OpenStreamOptions{PusherID: pusherID})
@@ -1785,16 +1973,14 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res
return nil, nil, err
}
if bodyOpen {
- st.reqBuf = getRequestBodyBuf()
- req.Body.(*requestBody).pipe = &pipe{
- b: &fixedBuffer{buf: st.reqBuf},
- }
-
if vv, ok := rp.header["Content-Length"]; ok {
req.ContentLength, _ = strconv.ParseInt(vv[0], 10, 64)
} else {
req.ContentLength = -1
}
+ req.Body.(*requestBody).pipe = &pipe{
+ b: &dataBuffer{expected: req.ContentLength},
+ }
}
return rw, req, nil
}
@@ -1874,7 +2060,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r
Body: body,
Trailer: trailer,
}
- req = requestWithContext(req, st.ctx)
+ req = req.WithContext(st.ctx)
rws := responseWriterStatePool.Get().(*responseWriterState)
bwSave := rws.bw
@@ -1890,24 +2076,6 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r
return rw, req, nil
}
-var reqBodyCache = make(chan []byte, 8)
-
-func getRequestBodyBuf() []byte {
- select {
- case b := <-reqBodyCache:
- return b
- default:
- return make([]byte, initialWindowSize)
- }
-}
-
-func putRequestBodyBuf(b []byte) {
- select {
- case reqBodyCache <- b:
- default:
- }
-}
-
// Run on its own goroutine.
func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) {
didPanic := true
@@ -1920,7 +2088,7 @@ func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler
stream: rw.rws.stream,
})
// Same as net/http:
- if shouldLogPanic(e) {
+ if e != nil && e != http.ErrAbortHandler {
const size = 64 << 10
buf := make([]byte, size)
buf = buf[:runtime.Stack(buf, false)]
@@ -2003,12 +2171,6 @@ func (sc *serverConn) noteBodyReadFromHandler(st *stream, n int, err error) {
case <-sc.doneServing:
}
}
- if err == io.EOF {
- if buf := st.reqBuf; buf != nil {
- st.reqBuf = nil // shouldn't matter; field unused by other
- putRequestBodyBuf(buf)
- }
- }
}
func (sc *serverConn) noteBodyRead(st *stream, n int) {
@@ -2103,8 +2265,8 @@ func (b *requestBody) Read(p []byte) (n int, err error) {
return
}
-// responseWriter is the http.ResponseWriter implementation. It's
-// intentionally small (1 pointer wide) to minimize garbage. The
+// responseWriter is the http.ResponseWriter implementation. It's
+// intentionally small (1 pointer wide) to minimize garbage. The
// responseWriterState pointer inside is zeroed at the end of a
// request (in handlerDone) and calls on the responseWriter thereafter
// simply crash (caller's mistake), but the much larger responseWriterState
@@ -2138,6 +2300,7 @@ type responseWriterState struct {
wroteHeader bool // WriteHeader called (explicitly or implicitly). Not necessarily sent to user yet.
sentHeader bool // have we sent the header frame?
handlerDone bool // handler has finished
+ dirty bool // a Write failed; don't reuse this responseWriterState
sentContentLen int64 // non-zero if handler set a Content-Length header
wroteBytes int64
@@ -2157,8 +2320,8 @@ func (rws *responseWriterState) hasTrailers() bool { return len(rws.trailers) !=
// written in the trailers at the end of the response.
func (rws *responseWriterState) declareTrailer(k string) {
k = http.CanonicalHeaderKey(k)
- if !ValidTrailerHeader(k) {
- // Forbidden by RFC 2616 14.40.
+ if !httpguts.ValidTrailerHeader(k) {
+ // Forbidden by RFC 7230, section 4.1.2.
rws.conn.logf("ignoring invalid trailer %q", k)
return
}
@@ -2195,7 +2358,7 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
clen = strconv.Itoa(len(p))
}
_, hasContentType := rws.snapHeader["Content-Type"]
- if !hasContentType && bodyAllowedForStatus(rws.status) {
+ if !hasContentType && bodyAllowedForStatus(rws.status) && len(p) > 0 {
ctype = http.DetectContentType(p)
}
var date string
@@ -2208,6 +2371,19 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
foreachHeaderElement(v, rws.declareTrailer)
}
+ // "Connection" headers aren't allowed in HTTP/2 (RFC 7540, 8.1.2.2),
+ // but respect "Connection" == "close" to mean sending a GOAWAY and tearing
+ // down the TCP connection when idle, like we do for HTTP/1.
+ // TODO: remove more Connection-specific header fields here, in addition
+ // to "Connection".
+ if _, ok := rws.snapHeader["Connection"]; ok {
+ v := rws.snapHeader.Get("Connection")
+ delete(rws.snapHeader, "Connection")
+ if v == "close" {
+ rws.conn.startGracefulShutdown()
+ }
+ }
+
endStream := (rws.handlerDone && !rws.hasTrailers() && len(p) == 0) || isHeadResp
err = rws.conn.writeHeaders(rws.stream, &writeResHeaders{
streamID: rws.stream.id,
@@ -2219,6 +2395,7 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
date: date,
})
if err != nil {
+ rws.dirty = true
return 0, err
}
if endStream {
@@ -2240,6 +2417,7 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
if len(p) > 0 || endStream {
// only send a 0 byte DATA frame if we're ending the stream.
if err := rws.conn.writeDataFromHandler(rws.stream, p, endStream); err != nil {
+ rws.dirty = true
return 0, err
}
}
@@ -2251,6 +2429,9 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {
trailers: rws.trailers,
endStream: true,
})
+ if err != nil {
+ rws.dirty = true
+ }
return len(p), err
}
return len(p), nil
@@ -2274,11 +2455,11 @@ const TrailerPrefix = "Trailer:"
// after the header has already been flushed. Because the Go
// ResponseWriter interface has no way to set Trailers (only the
// Header), and because we didn't want to expand the ResponseWriter
-// interface, and because nobody used trailers, and because RFC 2616
+// interface, and because nobody used trailers, and because RFC 7230
// says you SHOULD (but not must) predeclare any trailers in the
// header, the official ResponseWriter rules said trailers in Go must
// be predeclared, and then we reuse the same ResponseWriter.Header()
-// map to mean both Headers and Trailers. When it's time to write the
+// map to mean both Headers and Trailers. When it's time to write the
// Trailers, we pick out the fields of Headers that were declared as
// trailers. That worked for a while, until we found the first major
// user of Trailers in the wild: gRPC (using them only over http2),
@@ -2358,6 +2539,24 @@ func (w *responseWriter) Header() http.Header {
return rws.handlerHeader
}
+// checkWriteHeaderCode is a copy of net/http's checkWriteHeaderCode.
+func checkWriteHeaderCode(code int) {
+ // Issue 22880: require valid WriteHeader status codes.
+ // For now we only enforce that it's three digits.
+ // In the future we might block things over 599 (600 and above aren't defined
+ // at http://httpwg.org/specs/rfc7231.html#status.codes)
+ // and we might block under 200 (once we have more mature 1xx support).
+ // But for now any three digits.
+ //
+ // We used to send "HTTP/1.1 000 0" on the wire in responses but there's
+ // no equivalent bogus thing we can realistically send in HTTP/2,
+ // so we'll consistently panic instead and help people find their bugs
+ // early. (We can't return an error from WriteHeader even if we wanted to.)
+ if code < 100 || code > 999 {
+ panic(fmt.Sprintf("invalid WriteHeader code %v", code))
+ }
+}
+
func (w *responseWriter) WriteHeader(code int) {
rws := w.rws
if rws == nil {
@@ -2368,6 +2567,7 @@ func (w *responseWriter) WriteHeader(code int) {
func (rws *responseWriterState) writeHeader(code int) {
if !rws.wroteHeader {
+ checkWriteHeaderCode(code)
rws.wroteHeader = true
rws.status = code
if len(rws.handlerHeader) > 0 {
@@ -2390,7 +2590,7 @@ func cloneHeader(h http.Header) http.Header {
//
// * Handler calls w.Write or w.WriteString ->
// * -> rws.bw (*bufio.Writer) ->
-// * (Handler migth call Flush)
+// * (Handler might call Flush)
// * -> chunkWriter{rws}
// * -> responseWriterState.writeChunk(p []byte)
// * -> responseWriterState.writeChunk (most of the magic; see comment there)
@@ -2429,10 +2629,19 @@ func (w *responseWriter) write(lenData int, dataB []byte, dataS string) (n int,
func (w *responseWriter) handlerDone() {
rws := w.rws
+ dirty := rws.dirty
rws.handlerDone = true
w.Flush()
w.rws = nil
- responseWriterStatePool.Put(rws)
+ if !dirty {
+ // Only recycle the pool if all prior Write calls to
+ // the serverConn goroutine completed successfully. If
+ // they returned earlier due to resets from the peer
+ // there might still be write goroutines outstanding
+ // from the serverConn referencing the rws memory. See
+ // issue 20704.
+ responseWriterStatePool.Put(rws)
+ }
}
// Push errors.
@@ -2441,14 +2650,9 @@ var (
ErrPushLimitReached = errors.New("http2: push would exceed peer's SETTINGS_MAX_CONCURRENT_STREAMS")
)
-// pushOptions is the internal version of http.PushOptions, which we
-// cannot include here because it's only defined in Go 1.8 and later.
-type pushOptions struct {
- Method string
- Header http.Header
-}
+var _ http.Pusher = (*responseWriter)(nil)
-func (w *responseWriter) push(target string, opts pushOptions) error {
+func (w *responseWriter) Push(target string, opts *http.PushOptions) error {
st := w.rws.stream
sc := st.sc
sc.serveG.checkNotOn()
@@ -2459,6 +2663,10 @@ func (w *responseWriter) push(target string, opts pushOptions) error {
return ErrRecursivePush
}
+ if opts == nil {
+ opts = new(http.PushOptions)
+ }
+
// Default options.
if opts.Method == "" {
opts.Method = "GET"
@@ -2514,7 +2722,7 @@ func (w *responseWriter) push(target string, opts pushOptions) error {
return fmt.Errorf("method %q must be GET or HEAD", opts.Method)
}
- msg := startPushRequest{
+ msg := &startPushRequest{
parent: st,
method: opts.Method,
url: u,
@@ -2527,7 +2735,7 @@ func (w *responseWriter) push(target string, opts pushOptions) error {
return errClientDisconnected
case <-st.cw:
return errStreamClosed
- case sc.wantStartPushCh <- msg:
+ case sc.serveMsgCh <- msg:
}
select {
@@ -2549,7 +2757,7 @@ type startPushRequest struct {
done chan error
}
-func (sc *serverConn) startPush(msg startPushRequest) {
+func (sc *serverConn) startPush(msg *startPushRequest) {
sc.serveG.check()
// http://tools.ietf.org/html/rfc7540#section-6.6.
@@ -2588,7 +2796,7 @@ func (sc *serverConn) startPush(msg startPushRequest) {
// A server that is unable to establish a new stream identifier can send a GOAWAY
// frame so that the client is forced to open a new connection for new streams.
if sc.maxPushPromiseID+2 >= 1<<31 {
- sc.startGracefulShutdown()
+ sc.startGracefulShutdownInternal()
return 0, ErrPushLimitReached
}
sc.maxPushPromiseID += 2
@@ -2630,7 +2838,7 @@ func (sc *serverConn) startPush(msg startPushRequest) {
}
// foreachHeaderElement splits v according to the "#rule" construction
-// in RFC 2616 section 2.1 and calls fn for each non-empty element.
+// in RFC 7230 section 7 and calls fn for each non-empty element.
func foreachHeaderElement(v string, fn func(string)) {
v = textproto.TrimString(v)
if v == "" {
@@ -2678,66 +2886,6 @@ func new400Handler(err error) http.HandlerFunc {
}
}
-// ValidTrailerHeader reports whether name is a valid header field name to appear
-// in trailers.
-// See: http://tools.ietf.org/html/rfc7230#section-4.1.2
-func ValidTrailerHeader(name string) bool {
- name = http.CanonicalHeaderKey(name)
- if strings.HasPrefix(name, "If-") || badTrailer[name] {
- return false
- }
- return true
-}
-
-var badTrailer = map[string]bool{
- "Authorization": true,
- "Cache-Control": true,
- "Connection": true,
- "Content-Encoding": true,
- "Content-Length": true,
- "Content-Range": true,
- "Content-Type": true,
- "Expect": true,
- "Host": true,
- "Keep-Alive": true,
- "Max-Forwards": true,
- "Pragma": true,
- "Proxy-Authenticate": true,
- "Proxy-Authorization": true,
- "Proxy-Connection": true,
- "Range": true,
- "Realm": true,
- "Te": true,
- "Trailer": true,
- "Transfer-Encoding": true,
- "Www-Authenticate": true,
-}
-
-// h1ServerShutdownChan returns a channel that will be closed when the
-// provided *http.Server wants to shut down.
-//
-// This is a somewhat hacky way to get at http1 innards. It works
-// when the http2 code is bundled into the net/http package in the
-// standard library. The alternatives ended up making the cmd/go tool
-// depend on http Servers. This is the lightest option for now.
-// This is tested via the TestServeShutdown* tests in net/http.
-func h1ServerShutdownChan(hs *http.Server) <-chan struct{} {
- if fn := testh1ServerShutdownChan; fn != nil {
- return fn(hs)
- }
- var x interface{} = hs
- type I interface {
- getDoneChan() <-chan struct{}
- }
- if hs, ok := x.(I); ok {
- return hs.getDoneChan()
- }
- return nil
-}
-
-// optional test hook for h1ServerShutdownChan.
-var testh1ServerShutdownChan func(hs *http.Server) <-chan struct{}
-
// h1ServerKeepAlivesDisabled reports whether hs has its keep-alives
// disabled. See comments on h1ServerShutdownChan above for why
// the code is written this way.
diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go
index 0c7e859db..f272e8f9f 100644
--- a/vendor/golang.org/x/net/http2/transport.go
+++ b/vendor/golang.org/x/net/http2/transport.go
@@ -10,6 +10,7 @@ import (
"bufio"
"bytes"
"compress/gzip"
+ "context"
"crypto/rand"
"crypto/tls"
"errors"
@@ -18,17 +19,20 @@ import (
"io/ioutil"
"log"
"math"
+ mathrand "math/rand"
"net"
"net/http"
+ "net/http/httptrace"
+ "net/textproto"
"sort"
"strconv"
"strings"
"sync"
"time"
+ "golang.org/x/net/http/httpguts"
"golang.org/x/net/http2/hpack"
"golang.org/x/net/idna"
- "golang.org/x/net/lex/httplex"
)
const (
@@ -86,13 +90,23 @@ type Transport struct {
// MaxHeaderListSize is the http2 SETTINGS_MAX_HEADER_LIST_SIZE to
// send in the initial settings frame. It is how many bytes
- // of response headers are allow. Unlike the http2 spec, zero here
+ // of response headers are allowed. Unlike the http2 spec, zero here
// means to use a default limit (currently 10MB). If you actually
// want to advertise an ulimited value to the peer, Transport
// interprets the highest possible value here (0xffffffff or 1<<32-1)
// to mean no limit.
MaxHeaderListSize uint32
+ // StrictMaxConcurrentStreams controls whether the server's
+ // SETTINGS_MAX_CONCURRENT_STREAMS should be respected
+ // globally. If false, new TCP connections are created to the
+ // server as needed to keep each under the per-connection
+ // SETTINGS_MAX_CONCURRENT_STREAMS limit. If true, the
+ // server's SETTINGS_MAX_CONCURRENT_STREAMS is interpreted as
+ // a global limit and callers of RoundTrip block when needed,
+ // waiting for their turn.
+ StrictMaxConcurrentStreams bool
+
// t1, if non-nil, is the standard library Transport using
// this transport. Its settings are used (but not its
// RoundTrip method, etc).
@@ -116,16 +130,56 @@ func (t *Transport) disableCompression() bool {
return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)
}
-var errTransportVersion = errors.New("http2: ConfigureTransport is only supported starting at Go 1.6")
-
// ConfigureTransport configures a net/http HTTP/1 Transport to use HTTP/2.
-// It requires Go 1.6 or later and returns an error if the net/http package is too old
-// or if t1 has already been HTTP/2-enabled.
+// It returns an error if t1 has already been HTTP/2-enabled.
func ConfigureTransport(t1 *http.Transport) error {
- _, err := configureTransport(t1) // in configure_transport.go (go1.6) or not_go16.go
+ _, err := configureTransport(t1)
return err
}
+func configureTransport(t1 *http.Transport) (*Transport, error) {
+ connPool := new(clientConnPool)
+ t2 := &Transport{
+ ConnPool: noDialClientConnPool{connPool},
+ t1: t1,
+ }
+ connPool.t = t2
+ if err := registerHTTPSProtocol(t1, noDialH2RoundTripper{t2}); err != nil {
+ return nil, err
+ }
+ if t1.TLSClientConfig == nil {
+ t1.TLSClientConfig = new(tls.Config)
+ }
+ if !strSliceContains(t1.TLSClientConfig.NextProtos, "h2") {
+ t1.TLSClientConfig.NextProtos = append([]string{"h2"}, t1.TLSClientConfig.NextProtos...)
+ }
+ if !strSliceContains(t1.TLSClientConfig.NextProtos, "http/1.1") {
+ t1.TLSClientConfig.NextProtos = append(t1.TLSClientConfig.NextProtos, "http/1.1")
+ }
+ upgradeFn := func(authority string, c *tls.Conn) http.RoundTripper {
+ addr := authorityAddr("https", authority)
+ if used, err := connPool.addConnIfNeeded(addr, t2, c); err != nil {
+ go c.Close()
+ return erringRoundTripper{err}
+ } else if !used {
+ // Turns out we don't need this c.
+ // For example, two goroutines made requests to the same host
+ // at the same time, both kicking off TCP dials. (since protocol
+ // was unknown)
+ go c.Close()
+ }
+ return t2
+ }
+ if m := t1.TLSNextProto; len(m) == 0 {
+ t1.TLSNextProto = map[string]func(string, *tls.Conn) http.RoundTripper{
+ "h2": upgradeFn,
+ }
+ } else {
+ m["h2"] = upgradeFn
+ }
+ return t2, nil
+}
+
func (t *Transport) connPool() ClientConnPool {
t.connPoolOnce.Do(t.initConnPool)
return t.connPoolOrDef
@@ -158,21 +212,24 @@ type ClientConn struct {
cond *sync.Cond // hold mu; broadcast on flow/closed changes
flow flow // our conn-level flow control quota (cs.flow is per stream)
inflow flow // peer's conn-level flow control
+ closing bool
closed bool
wantSettingsAck bool // we sent a SETTINGS frame and haven't heard back
goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received
goAwayDebug string // goAway frame's debug data, retained as a string
streams map[uint32]*clientStream // client-initiated
nextStreamID uint32
+ pendingRequests int // requests blocked and waiting to be sent because len(streams) == maxConcurrentStreams
pings map[[8]byte]chan struct{} // in flight ping data to notification channel
bw *bufio.Writer
br *bufio.Reader
fr *Framer
lastActive time.Time
// Settings from peer: (also guarded by mu)
- maxFrameSize uint32
- maxConcurrentStreams uint32
- initialWindowSize uint32
+ maxFrameSize uint32
+ maxConcurrentStreams uint32
+ peerMaxHeaderListSize uint64
+ initialWindowSize uint32
hbuf bytes.Buffer // HPACK encoder writes into this
henc *hpack.Encoder
@@ -187,7 +244,7 @@ type ClientConn struct {
type clientStream struct {
cc *ClientConn
req *http.Request
- trace *clientTrace // or nil
+ trace *httptrace.ClientTrace // or nil
ID uint32
resc chan resAndError
bufPipe pipe // buffered pipe with the flow-controlled response payload
@@ -208,43 +265,65 @@ type clientStream struct {
done chan struct{} // closed when stream remove from cc.streams map; close calls guarded by cc.mu
// owned by clientConnReadLoop:
- firstByte bool // got the first response byte
- pastHeaders bool // got first MetaHeadersFrame (actual headers)
- pastTrailers bool // got optional second MetaHeadersFrame (trailers)
+ firstByte bool // got the first response byte
+ pastHeaders bool // got first MetaHeadersFrame (actual headers)
+ pastTrailers bool // got optional second MetaHeadersFrame (trailers)
+ num1xx uint8 // number of 1xx responses seen
trailer http.Header // accumulated trailers
resTrailer *http.Header // client's Response.Trailer
}
-// awaitRequestCancel runs in its own goroutine and waits for the user
-// to cancel a RoundTrip request, its context to expire, or for the
-// request to be done (any way it might be removed from the cc.streams
-// map: peer reset, successful completion, TCP connection breakage,
-// etc)
-func (cs *clientStream) awaitRequestCancel(req *http.Request) {
- ctx := reqContext(req)
+// awaitRequestCancel waits for the user to cancel a request or for the done
+// channel to be signaled. A non-nil error is returned only if the request was
+// canceled.
+func awaitRequestCancel(req *http.Request, done <-chan struct{}) error {
+ ctx := req.Context()
if req.Cancel == nil && ctx.Done() == nil {
- return
+ return nil
}
select {
case <-req.Cancel:
- cs.cancelStream()
- cs.bufPipe.CloseWithError(errRequestCanceled)
+ return errRequestCanceled
case <-ctx.Done():
+ return ctx.Err()
+ case <-done:
+ return nil
+ }
+}
+
+var got1xxFuncForTests func(int, textproto.MIMEHeader) error
+
+// get1xxTraceFunc returns the value of request's httptrace.ClientTrace.Got1xxResponse func,
+// if any. It returns nil if not set or if the Go version is too old.
+func (cs *clientStream) get1xxTraceFunc() func(int, textproto.MIMEHeader) error {
+ if fn := got1xxFuncForTests; fn != nil {
+ return fn
+ }
+ return traceGot1xxResponseFunc(cs.trace)
+}
+
+// awaitRequestCancel waits for the user to cancel a request, its context to
+// expire, or for the request to be done (any way it might be removed from the
+// cc.streams map: peer reset, successful completion, TCP connection breakage,
+// etc). If the request is canceled, then cs will be canceled and closed.
+func (cs *clientStream) awaitRequestCancel(req *http.Request) {
+ if err := awaitRequestCancel(req, cs.done); err != nil {
cs.cancelStream()
- cs.bufPipe.CloseWithError(ctx.Err())
- case <-cs.done:
+ cs.bufPipe.CloseWithError(err)
}
}
func (cs *clientStream) cancelStream() {
- cs.cc.mu.Lock()
+ cc := cs.cc
+ cc.mu.Lock()
didReset := cs.didReset
cs.didReset = true
- cs.cc.mu.Unlock()
+ cc.mu.Unlock()
if !didReset {
- cs.cc.writeStreamReset(cs.ID, ErrCodeCancel, nil)
+ cc.writeStreamReset(cs.ID, ErrCodeCancel, nil)
+ cc.forgetStreamID(cs.ID)
}
}
@@ -261,6 +340,13 @@ func (cs *clientStream) checkResetOrDone() error {
}
}
+func (cs *clientStream) getStartedWrite() bool {
+ cc := cs.cc
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ return cs.startedWrite
+}
+
func (cs *clientStream) abortRequestBodyWrite(err error) {
if err == nil {
panic("nil error")
@@ -286,7 +372,26 @@ func (sew stickyErrWriter) Write(p []byte) (n int, err error) {
return
}
-var ErrNoCachedConn = errors.New("http2: no cached connection was available")
+// noCachedConnError is the concrete type of ErrNoCachedConn, which
+// needs to be detected by net/http regardless of whether it's its
+// bundled version (in h2_bundle.go with a rewritten type name) or
+// from a user's x/net/http2. As such, as it has a unique method name
+// (IsHTTP2NoCachedConnError) that net/http sniffs for via func
+// isNoCachedConnError.
+type noCachedConnError struct{}
+
+func (noCachedConnError) IsHTTP2NoCachedConnError() {}
+func (noCachedConnError) Error() string { return "http2: no cached connection was available" }
+
+// isNoCachedConnError reports whether err is of type noCachedConnError
+// or its equivalent renamed type in net/http2's h2_bundle.go. Both types
+// may coexist in the same running program.
+func isNoCachedConnError(err error) bool {
+ _, ok := err.(interface{ IsHTTP2NoCachedConnError() })
+ return ok
+}
+
+var ErrNoCachedConn error = noCachedConnError{}
// RoundTripOpt are options for the Transport.RoundTripOpt method.
type RoundTripOpt struct {
@@ -329,17 +434,28 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res
}
addr := authorityAddr(req.URL.Scheme, req.URL.Host)
- for {
+ for retry := 0; ; retry++ {
cc, err := t.connPool().GetClientConn(req, addr)
if err != nil {
t.vlogf("http2: Transport failed to get client conn for %s: %v", addr, err)
return nil, err
}
traceGotConn(req, cc)
- res, err := cc.RoundTrip(req)
- if err != nil {
- if req, err = shouldRetryRequest(req, err); err == nil {
- continue
+ res, gotErrAfterReqBodyWrite, err := cc.roundTrip(req)
+ if err != nil && retry <= 6 {
+ if req, err = shouldRetryRequest(req, err, gotErrAfterReqBodyWrite); err == nil {
+ // After the first retry, do exponential backoff with 10% jitter.
+ if retry == 0 {
+ continue
+ }
+ backoff := float64(uint(1) << (uint(retry) - 1))
+ backoff += backoff * (0.1 * mathrand.Float64())
+ select {
+ case <-time.After(time.Second * time.Duration(backoff)):
+ continue
+ case <-req.Context().Done():
+ return nil, req.Context().Err()
+ }
}
}
if err != nil {
@@ -360,36 +476,30 @@ func (t *Transport) CloseIdleConnections() {
}
var (
- errClientConnClosed = errors.New("http2: client conn is closed")
- errClientConnUnusable = errors.New("http2: client conn not usable")
-
- errClientConnGotGoAway = errors.New("http2: Transport received Server's graceful shutdown GOAWAY")
- errClientConnGotGoAwayAfterSomeReqBody = errors.New("http2: Transport received Server's graceful shutdown GOAWAY; some request body already written")
+ errClientConnClosed = errors.New("http2: client conn is closed")
+ errClientConnUnusable = errors.New("http2: client conn not usable")
+ errClientConnGotGoAway = errors.New("http2: Transport received Server's graceful shutdown GOAWAY")
)
// shouldRetryRequest is called by RoundTrip when a request fails to get
// response headers. It is always called with a non-nil error.
// It returns either a request to retry (either the same request, or a
// modified clone), or an error if the request can't be replayed.
-func shouldRetryRequest(req *http.Request, err error) (*http.Request, error) {
- switch err {
- default:
+func shouldRetryRequest(req *http.Request, err error, afterBodyWrite bool) (*http.Request, error) {
+ if !canRetryError(err) {
return nil, err
- case errClientConnUnusable, errClientConnGotGoAway:
+ }
+ // If the Body is nil (or http.NoBody), it's safe to reuse
+ // this request and its Body.
+ if req.Body == nil || req.Body == http.NoBody {
return req, nil
- case errClientConnGotGoAwayAfterSomeReqBody:
- // If the Body is nil (or http.NoBody), it's safe to reuse
- // this request and its Body.
- if req.Body == nil || reqBodyIsNoBody(req.Body) {
- return req, nil
- }
- // Otherwise we depend on the Request having its GetBody
- // func defined.
- getBody := reqGetBody(req) // Go 1.8: getBody = req.GetBody
- if getBody == nil {
- return nil, errors.New("http2: Transport: peer server initiated graceful shutdown after some of Request.Body was written; define Request.GetBody to avoid this error")
- }
- body, err := getBody()
+ }
+
+ // If the request body can be reset back to its original
+ // state via the optional req.GetBody, do that.
+ if req.GetBody != nil {
+ // TODO: consider a req.Body.Close here? or audit that all caller paths do?
+ body, err := req.GetBody()
if err != nil {
return nil, err
}
@@ -397,6 +507,27 @@ func shouldRetryRequest(req *http.Request, err error) (*http.Request, error) {
newReq.Body = body
return &newReq, nil
}
+
+ // The Request.Body can't reset back to the beginning, but we
+ // don't seem to have started to read from it yet, so reuse
+ // the request directly. The "afterBodyWrite" means the
+ // bodyWrite process has started, which becomes true before
+ // the first Read.
+ if !afterBodyWrite {
+ return req, nil
+ }
+
+ return nil, fmt.Errorf("http2: Transport: cannot retry err [%v] after Request.Body was written; define Request.GetBody to avoid this error", err)
+}
+
+func canRetryError(err error) bool {
+ if err == errClientConnUnusable || err == errClientConnGotGoAway {
+ return true
+ }
+ if se, ok := err.(StreamError); ok {
+ return se.Code == ErrCodeRefusedStream
+ }
+ return false
}
func (t *Transport) dialClientConn(addr string, singleUse bool) (*ClientConn, error) {
@@ -414,7 +545,7 @@ func (t *Transport) dialClientConn(addr string, singleUse bool) (*ClientConn, er
func (t *Transport) newTLSConfig(host string) *tls.Config {
cfg := new(tls.Config)
if t.TLSClientConfig != nil {
- *cfg = *cloneTLSConfig(t.TLSClientConfig)
+ *cfg = *t.TLSClientConfig.Clone()
}
if !strSliceContains(cfg.NextProtos, NextProtoTLS) {
cfg.NextProtos = append([]string{NextProtoTLS}, cfg.NextProtos...)
@@ -465,7 +596,7 @@ func (t *Transport) expectContinueTimeout() time.Duration {
if t.t1 == nil {
return 0
}
- return transportExpectContinueTimeout(t.t1)
+ return t.t1.ExpectContinueTimeout
}
func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) {
@@ -474,17 +605,18 @@ func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) {
func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, error) {
cc := &ClientConn{
- t: t,
- tconn: c,
- readerDone: make(chan struct{}),
- nextStreamID: 1,
- maxFrameSize: 16 << 10, // spec default
- initialWindowSize: 65535, // spec default
- maxConcurrentStreams: 1000, // "infinite", per spec. 1000 seems good enough.
- streams: make(map[uint32]*clientStream),
- singleUse: singleUse,
- wantSettingsAck: true,
- pings: make(map[[8]byte]chan struct{}),
+ t: t,
+ tconn: c,
+ readerDone: make(chan struct{}),
+ nextStreamID: 1,
+ maxFrameSize: 16 << 10, // spec default
+ initialWindowSize: 65535, // spec default
+ maxConcurrentStreams: 1000, // "infinite", per spec. 1000 seems good enough.
+ peerMaxHeaderListSize: 0xffffffffffffffff, // "infinite", per spec. Use 2^64-1 instead.
+ streams: make(map[uint32]*clientStream),
+ singleUse: singleUse,
+ wantSettingsAck: true,
+ pings: make(map[[8]byte]chan struct{}),
}
if d := t.idleConnTimeout(); d != 0 {
cc.idleTimeout = d
@@ -509,6 +641,10 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
// henc in response to SETTINGS frames?
cc.henc = hpack.NewEncoder(&cc.hbuf)
+ if t.AllowHTTP {
+ cc.nextStreamID = 3
+ }
+
if cs, ok := c.(connectionStater); ok {
state := cs.ConnectionState()
cc.tlsState = &state
@@ -560,22 +696,54 @@ func (cc *ClientConn) setGoAway(f *GoAwayFrame) {
}
}
+// CanTakeNewRequest reports whether the connection can take a new request,
+// meaning it has not been closed or received or sent a GOAWAY.
func (cc *ClientConn) CanTakeNewRequest() bool {
cc.mu.Lock()
defer cc.mu.Unlock()
return cc.canTakeNewRequestLocked()
}
-func (cc *ClientConn) canTakeNewRequestLocked() bool {
+// clientConnIdleState describes the suitability of a client
+// connection to initiate a new RoundTrip request.
+type clientConnIdleState struct {
+ canTakeNewRequest bool
+ freshConn bool // whether it's unused by any previous request
+}
+
+func (cc *ClientConn) idleState() clientConnIdleState {
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ return cc.idleStateLocked()
+}
+
+func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) {
if cc.singleUse && cc.nextStreamID > 1 {
- return false
+ return
+ }
+ var maxConcurrentOkay bool
+ if cc.t.StrictMaxConcurrentStreams {
+ // We'll tell the caller we can take a new request to
+ // prevent the caller from dialing a new TCP
+ // connection, but then we'll block later before
+ // writing it.
+ maxConcurrentOkay = true
+ } else {
+ maxConcurrentOkay = int64(len(cc.streams)+1) < int64(cc.maxConcurrentStreams)
}
- return cc.goAway == nil && !cc.closed &&
- int64(len(cc.streams)+1) < int64(cc.maxConcurrentStreams) &&
- cc.nextStreamID < math.MaxInt32
+
+ st.canTakeNewRequest = cc.goAway == nil && !cc.closed && !cc.closing && maxConcurrentOkay &&
+ int64(cc.nextStreamID)+2*int64(cc.pendingRequests) < math.MaxInt32
+ st.freshConn = cc.nextStreamID == 1 && st.canTakeNewRequest
+ return
+}
+
+func (cc *ClientConn) canTakeNewRequestLocked() bool {
+ st := cc.idleStateLocked()
+ return st.canTakeNewRequest
}
-// onIdleTimeout is called from a time.AfterFunc goroutine. It will
+// onIdleTimeout is called from a time.AfterFunc goroutine. It will
// only be called when we're idle, but because we're coming from a new
// goroutine, there could be a new request coming in at the same time,
// so this simply calls the synchronized closeIfIdle to shut down this
@@ -602,6 +770,87 @@ func (cc *ClientConn) closeIfIdle() {
cc.tconn.Close()
}
+var shutdownEnterWaitStateHook = func() {}
+
+// Shutdown gracefully close the client connection, waiting for running streams to complete.
+func (cc *ClientConn) Shutdown(ctx context.Context) error {
+ if err := cc.sendGoAway(); err != nil {
+ return err
+ }
+ // Wait for all in-flight streams to complete or connection to close
+ done := make(chan error, 1)
+ cancelled := false // guarded by cc.mu
+ go func() {
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ for {
+ if len(cc.streams) == 0 || cc.closed {
+ cc.closed = true
+ done <- cc.tconn.Close()
+ break
+ }
+ if cancelled {
+ break
+ }
+ cc.cond.Wait()
+ }
+ }()
+ shutdownEnterWaitStateHook()
+ select {
+ case err := <-done:
+ return err
+ case <-ctx.Done():
+ cc.mu.Lock()
+ // Free the goroutine above
+ cancelled = true
+ cc.cond.Broadcast()
+ cc.mu.Unlock()
+ return ctx.Err()
+ }
+}
+
+func (cc *ClientConn) sendGoAway() error {
+ cc.mu.Lock()
+ defer cc.mu.Unlock()
+ cc.wmu.Lock()
+ defer cc.wmu.Unlock()
+ if cc.closing {
+ // GOAWAY sent already
+ return nil
+ }
+ // Send a graceful shutdown frame to server
+ maxStreamID := cc.nextStreamID
+ if err := cc.fr.WriteGoAway(maxStreamID, ErrCodeNo, nil); err != nil {
+ return err
+ }
+ if err := cc.bw.Flush(); err != nil {
+ return err
+ }
+ // Prevent new requests
+ cc.closing = true
+ return nil
+}
+
+// Close closes the client connection immediately.
+//
+// In-flight requests are interrupted. For a graceful shutdown, use Shutdown instead.
+func (cc *ClientConn) Close() error {
+ cc.mu.Lock()
+ defer cc.cond.Broadcast()
+ defer cc.mu.Unlock()
+ err := errors.New("http2: client connection force closed via ClientConn.Close")
+ for id, cs := range cc.streams {
+ select {
+ case cs.resc <- resAndError{err: err}:
+ default:
+ }
+ cs.bufPipe.CloseWithError(err)
+ delete(cc.streams, id)
+ }
+ cc.closed = true
+ return cc.tconn.Close()
+}
+
const maxAllocFrameSize = 512 << 10
// frameBuffer returns a scratch buffer suitable for writing DATA frames.
@@ -684,7 +933,7 @@ func checkConnHeaders(req *http.Request) error {
if vv := req.Header["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") {
return fmt.Errorf("http2: invalid Transfer-Encoding request header: %q", vv)
}
- if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "close" && vv[0] != "keep-alive") {
+ if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !strings.EqualFold(vv[0], "close") && !strings.EqualFold(vv[0], "keep-alive")) {
return fmt.Errorf("http2: invalid Connection request header: %q", vv)
}
return nil
@@ -694,7 +943,7 @@ func checkConnHeaders(req *http.Request) error {
// req.ContentLength, where 0 actually means zero (not unknown) and -1
// means unknown.
func actualContentLength(req *http.Request) int64 {
- if req.Body == nil {
+ if req.Body == nil || req.Body == http.NoBody {
return 0
}
if req.ContentLength != 0 {
@@ -704,8 +953,13 @@ func actualContentLength(req *http.Request) int64 {
}
func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
+ resp, _, err := cc.roundTrip(req)
+ return resp, err
+}
+
+func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAfterReqBodyWrite bool, err error) {
if err := checkConnHeaders(req); err != nil {
- return nil, err
+ return nil, false, err
}
if cc.idleTimer != nil {
cc.idleTimer.Stop()
@@ -713,20 +967,19 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
trailers, err := commaSeparatedTrailers(req)
if err != nil {
- return nil, err
+ return nil, false, err
}
hasTrailers := trailers != ""
cc.mu.Lock()
- cc.lastActive = time.Now()
- if cc.closed || !cc.canTakeNewRequestLocked() {
+ if err := cc.awaitOpenSlotForRequest(req); err != nil {
cc.mu.Unlock()
- return nil, errClientConnUnusable
+ return nil, false, err
}
body := req.Body
- hasBody := body != nil
contentLen := actualContentLength(req)
+ hasBody := contentLen != 0
// TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere?
var requestedGzip bool
@@ -755,19 +1008,19 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
hdrs, err := cc.encodeHeaders(req, requestedGzip, trailers, contentLen)
if err != nil {
cc.mu.Unlock()
- return nil, err
+ return nil, false, err
}
cs := cc.newStream()
cs.req = req
- cs.trace = requestTrace(req)
+ cs.trace = httptrace.ContextClientTrace(req.Context())
cs.requestedGzip = requestedGzip
bodyWriter := cc.t.getBodyWriterState(cs, body)
cs.on100 = bodyWriter.on100
cc.wmu.Lock()
endStream := !hasBody && !hasTrailers
- werr := cc.writeHeaders(cs.ID, endStream, hdrs)
+ werr := cc.writeHeaders(cs.ID, endStream, int(cc.maxFrameSize), hdrs)
cc.wmu.Unlock()
traceWroteHeaders(cs.trace)
cc.mu.Unlock()
@@ -781,7 +1034,7 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
// Don't bother sending a RST_STREAM (our write already failed;
// no need to keep writing)
traceWroteRequest(cs.trace, werr)
- return nil, werr
+ return nil, false, werr
}
var respHeaderTimer <-chan time.Time
@@ -798,9 +1051,9 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
readLoopResCh := cs.resc
bodyWritten := false
- ctx := reqContext(req)
+ ctx := req.Context()
- handleReadLoopResponse := func(re resAndError) (*http.Response, error) {
+ handleReadLoopResponse := func(re resAndError) (*http.Response, bool, error) {
res := re.res
if re.err != nil || res.StatusCode > 299 {
// On error or status code 3xx, 4xx, 5xx, etc abort any
@@ -809,26 +1062,19 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
// 2xx, however, then assume the server DOES potentially
// want our body (e.g. full-duplex streaming:
// golang.org/issue/13444). If it turns out the server
- // doesn't, they'll RST_STREAM us soon enough. This is a
- // heuristic to avoid adding knobs to Transport. Hopefully
+ // doesn't, they'll RST_STREAM us soon enough. This is a
+ // heuristic to avoid adding knobs to Transport. Hopefully
// we can keep it.
bodyWriter.cancel()
cs.abortRequestBodyWrite(errStopReqBodyWrite)
}
if re.err != nil {
- if re.err == errClientConnGotGoAway {
- cc.mu.Lock()
- if cs.startedWrite {
- re.err = errClientConnGotGoAwayAfterSomeReqBody
- }
- cc.mu.Unlock()
- }
cc.forgetStreamID(cs.ID)
- return nil, re.err
+ return nil, cs.getStartedWrite(), re.err
}
res.Request = req
res.TLS = cc.tlsState
- return res, nil
+ return res, false, nil
}
for {
@@ -836,37 +1082,37 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
case re := <-readLoopResCh:
return handleReadLoopResponse(re)
case <-respHeaderTimer:
- cc.forgetStreamID(cs.ID)
if !hasBody || bodyWritten {
cc.writeStreamReset(cs.ID, ErrCodeCancel, nil)
} else {
bodyWriter.cancel()
cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel)
}
- return nil, errTimeout
- case <-ctx.Done():
cc.forgetStreamID(cs.ID)
+ return nil, cs.getStartedWrite(), errTimeout
+ case <-ctx.Done():
if !hasBody || bodyWritten {
cc.writeStreamReset(cs.ID, ErrCodeCancel, nil)
} else {
bodyWriter.cancel()
cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel)
}
- return nil, ctx.Err()
- case <-req.Cancel:
cc.forgetStreamID(cs.ID)
+ return nil, cs.getStartedWrite(), ctx.Err()
+ case <-req.Cancel:
if !hasBody || bodyWritten {
cc.writeStreamReset(cs.ID, ErrCodeCancel, nil)
} else {
bodyWriter.cancel()
cs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel)
}
- return nil, errRequestCanceled
+ cc.forgetStreamID(cs.ID)
+ return nil, cs.getStartedWrite(), errRequestCanceled
case <-cs.peerReset:
// processResetStream already removed the
// stream from the streams map; no need for
// forgetStreamID.
- return nil, cs.resetErr
+ return nil, cs.getStartedWrite(), cs.resetErr
case err := <-bodyWriter.resc:
// Prefer the read loop's response, if available. Issue 16102.
select {
@@ -875,7 +1121,8 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
default:
}
if err != nil {
- return nil, err
+ cc.forgetStreamID(cs.ID)
+ return nil, cs.getStartedWrite(), err
}
bodyWritten = true
if d := cc.responseHeaderTimeout(); d != 0 {
@@ -887,14 +1134,55 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
}
}
+// awaitOpenSlotForRequest waits until len(streams) < maxConcurrentStreams.
+// Must hold cc.mu.
+func (cc *ClientConn) awaitOpenSlotForRequest(req *http.Request) error {
+ var waitingForConn chan struct{}
+ var waitingForConnErr error // guarded by cc.mu
+ for {
+ cc.lastActive = time.Now()
+ if cc.closed || !cc.canTakeNewRequestLocked() {
+ if waitingForConn != nil {
+ close(waitingForConn)
+ }
+ return errClientConnUnusable
+ }
+ if int64(len(cc.streams))+1 <= int64(cc.maxConcurrentStreams) {
+ if waitingForConn != nil {
+ close(waitingForConn)
+ }
+ return nil
+ }
+ // Unfortunately, we cannot wait on a condition variable and channel at
+ // the same time, so instead, we spin up a goroutine to check if the
+ // request is canceled while we wait for a slot to open in the connection.
+ if waitingForConn == nil {
+ waitingForConn = make(chan struct{})
+ go func() {
+ if err := awaitRequestCancel(req, waitingForConn); err != nil {
+ cc.mu.Lock()
+ waitingForConnErr = err
+ cc.cond.Broadcast()
+ cc.mu.Unlock()
+ }
+ }()
+ }
+ cc.pendingRequests++
+ cc.cond.Wait()
+ cc.pendingRequests--
+ if waitingForConnErr != nil {
+ return waitingForConnErr
+ }
+ }
+}
+
// requires cc.wmu be held
-func (cc *ClientConn) writeHeaders(streamID uint32, endStream bool, hdrs []byte) error {
+func (cc *ClientConn) writeHeaders(streamID uint32, endStream bool, maxFrameSize int, hdrs []byte) error {
first := true // first frame written (HEADERS is first, then CONTINUATION)
- frameSize := int(cc.maxFrameSize)
for len(hdrs) > 0 && cc.werr == nil {
chunk := hdrs
- if len(chunk) > frameSize {
- chunk = chunk[:frameSize]
+ if len(chunk) > maxFrameSize {
+ chunk = chunk[:maxFrameSize]
}
hdrs = hdrs[len(chunk):]
endHeaders := len(hdrs) == 0
@@ -955,6 +1243,7 @@ func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) (
sawEOF = true
err = nil
} else if err != nil {
+ cc.writeStreamReset(cs.ID, ErrCodeCancel, err)
return err
}
@@ -1002,17 +1291,26 @@ func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) (
var trls []byte
if hasTrailers {
cc.mu.Lock()
- defer cc.mu.Unlock()
- trls = cc.encodeTrailers(req)
+ trls, err = cc.encodeTrailers(req)
+ cc.mu.Unlock()
+ if err != nil {
+ cc.writeStreamReset(cs.ID, ErrCodeInternal, err)
+ cc.forgetStreamID(cs.ID)
+ return err
+ }
}
+ cc.mu.Lock()
+ maxFrameSize := int(cc.maxFrameSize)
+ cc.mu.Unlock()
+
cc.wmu.Lock()
defer cc.wmu.Unlock()
// Two ways to send END_STREAM: either with trailers, or
// with an empty DATA frame.
if len(trls) > 0 {
- err = cc.writeHeaders(cs.ID, true, trls)
+ err = cc.writeHeaders(cs.ID, true, maxFrameSize, trls)
} else {
err = cc.fr.WriteData(cs.ID, true, nil)
}
@@ -1071,7 +1369,7 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail
if host == "" {
host = req.URL.Host
}
- host, err := httplex.PunycodeHostPort(host)
+ host, err := httpguts.PunycodeHostPort(host)
if err != nil {
return nil, err
}
@@ -1096,72 +1394,103 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail
// potentially pollute our hpack state. (We want to be able to
// continue to reuse the hpack encoder for future requests)
for k, vv := range req.Header {
- if !httplex.ValidHeaderFieldName(k) {
+ if !httpguts.ValidHeaderFieldName(k) {
return nil, fmt.Errorf("invalid HTTP header name %q", k)
}
for _, v := range vv {
- if !httplex.ValidHeaderFieldValue(v) {
+ if !httpguts.ValidHeaderFieldValue(v) {
return nil, fmt.Errorf("invalid HTTP header value %q for header %q", v, k)
}
}
}
- // 8.1.2.3 Request Pseudo-Header Fields
- // The :path pseudo-header field includes the path and query parts of the
- // target URI (the path-absolute production and optionally a '?' character
- // followed by the query production (see Sections 3.3 and 3.4 of
- // [RFC3986]).
- cc.writeHeader(":authority", host)
- cc.writeHeader(":method", req.Method)
- if req.Method != "CONNECT" {
- cc.writeHeader(":path", path)
- cc.writeHeader(":scheme", req.URL.Scheme)
- }
- if trailers != "" {
- cc.writeHeader("trailer", trailers)
- }
+ enumerateHeaders := func(f func(name, value string)) {
+ // 8.1.2.3 Request Pseudo-Header Fields
+ // The :path pseudo-header field includes the path and query parts of the
+ // target URI (the path-absolute production and optionally a '?' character
+ // followed by the query production (see Sections 3.3 and 3.4 of
+ // [RFC3986]).
+ f(":authority", host)
+ f(":method", req.Method)
+ if req.Method != "CONNECT" {
+ f(":path", path)
+ f(":scheme", req.URL.Scheme)
+ }
+ if trailers != "" {
+ f("trailer", trailers)
+ }
- var didUA bool
- for k, vv := range req.Header {
- lowKey := strings.ToLower(k)
- switch lowKey {
- case "host", "content-length":
- // Host is :authority, already sent.
- // Content-Length is automatic, set below.
- continue
- case "connection", "proxy-connection", "transfer-encoding", "upgrade", "keep-alive":
- // Per 8.1.2.2 Connection-Specific Header
- // Fields, don't send connection-specific
- // fields. We have already checked if any
- // are error-worthy so just ignore the rest.
- continue
- case "user-agent":
- // Match Go's http1 behavior: at most one
- // User-Agent. If set to nil or empty string,
- // then omit it. Otherwise if not mentioned,
- // include the default (below).
- didUA = true
- if len(vv) < 1 {
+ var didUA bool
+ for k, vv := range req.Header {
+ if strings.EqualFold(k, "host") || strings.EqualFold(k, "content-length") {
+ // Host is :authority, already sent.
+ // Content-Length is automatic, set below.
continue
- }
- vv = vv[:1]
- if vv[0] == "" {
+ } else if strings.EqualFold(k, "connection") || strings.EqualFold(k, "proxy-connection") ||
+ strings.EqualFold(k, "transfer-encoding") || strings.EqualFold(k, "upgrade") ||
+ strings.EqualFold(k, "keep-alive") {
+ // Per 8.1.2.2 Connection-Specific Header
+ // Fields, don't send connection-specific
+ // fields. We have already checked if any
+ // are error-worthy so just ignore the rest.
continue
+ } else if strings.EqualFold(k, "user-agent") {
+ // Match Go's http1 behavior: at most one
+ // User-Agent. If set to nil or empty string,
+ // then omit it. Otherwise if not mentioned,
+ // include the default (below).
+ didUA = true
+ if len(vv) < 1 {
+ continue
+ }
+ vv = vv[:1]
+ if vv[0] == "" {
+ continue
+ }
+
+ }
+
+ for _, v := range vv {
+ f(k, v)
}
}
- for _, v := range vv {
- cc.writeHeader(lowKey, v)
+ if shouldSendReqContentLength(req.Method, contentLength) {
+ f("content-length", strconv.FormatInt(contentLength, 10))
+ }
+ if addGzipHeader {
+ f("accept-encoding", "gzip")
+ }
+ if !didUA {
+ f("user-agent", defaultUserAgent)
}
}
- if shouldSendReqContentLength(req.Method, contentLength) {
- cc.writeHeader("content-length", strconv.FormatInt(contentLength, 10))
- }
- if addGzipHeader {
- cc.writeHeader("accept-encoding", "gzip")
- }
- if !didUA {
- cc.writeHeader("user-agent", defaultUserAgent)
+
+ // Do a first pass over the headers counting bytes to ensure
+ // we don't exceed cc.peerMaxHeaderListSize. This is done as a
+ // separate pass before encoding the headers to prevent
+ // modifying the hpack state.
+ hlSize := uint64(0)
+ enumerateHeaders(func(name, value string) {
+ hf := hpack.HeaderField{Name: name, Value: value}
+ hlSize += uint64(hf.Size())
+ })
+
+ if hlSize > cc.peerMaxHeaderListSize {
+ return nil, errRequestHeaderListSize
}
+
+ trace := httptrace.ContextClientTrace(req.Context())
+ traceHeaders := traceHasWroteHeaderField(trace)
+
+ // Header list size is ok. Write the headers.
+ enumerateHeaders(func(name, value string) {
+ name = strings.ToLower(name)
+ cc.writeHeader(name, value)
+ if traceHeaders {
+ traceWroteHeaderField(trace, name, value)
+ }
+ })
+
return cc.hbuf.Bytes(), nil
}
@@ -1188,17 +1517,29 @@ func shouldSendReqContentLength(method string, contentLength int64) bool {
}
// requires cc.mu be held.
-func (cc *ClientConn) encodeTrailers(req *http.Request) []byte {
+func (cc *ClientConn) encodeTrailers(req *http.Request) ([]byte, error) {
cc.hbuf.Reset()
+
+ hlSize := uint64(0)
+ for k, vv := range req.Trailer {
+ for _, v := range vv {
+ hf := hpack.HeaderField{Name: k, Value: v}
+ hlSize += uint64(hf.Size())
+ }
+ }
+ if hlSize > cc.peerMaxHeaderListSize {
+ return nil, errRequestHeaderListSize
+ }
+
for k, vv := range req.Trailer {
- // Transfer-Encoding, etc.. have already been filter at the
+ // Transfer-Encoding, etc.. have already been filtered at the
// start of RoundTrip
lowKey := strings.ToLower(k)
for _, v := range vv {
cc.writeHeader(lowKey, v)
}
}
- return cc.hbuf.Bytes()
+ return cc.hbuf.Bytes(), nil
}
func (cc *ClientConn) writeHeader(name, value string) {
@@ -1246,7 +1587,9 @@ func (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream {
cc.idleTimer.Reset(cc.idleTimeout)
}
close(cs.done)
- cc.cond.Broadcast() // wake up checkResetOrDone via clientStream.awaitFlowControl
+ // Wake up checkResetOrDone via clientStream.awaitFlowControl and
+ // wake up RoundTrip if there is a pending request.
+ cc.cond.Broadcast()
}
return cs
}
@@ -1254,17 +1597,12 @@ func (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream {
// clientConnReadLoop is the state owned by the clientConn's frame-reading readLoop.
type clientConnReadLoop struct {
cc *ClientConn
- activeRes map[uint32]*clientStream // keyed by streamID
closeWhenIdle bool
}
// readLoop runs in its own goroutine and reads and dispatches frames.
func (cc *ClientConn) readLoop() {
- rl := &clientConnReadLoop{
- cc: cc,
- activeRes: make(map[uint32]*clientStream),
- }
-
+ rl := &clientConnReadLoop{cc: cc}
defer rl.cleanup()
cc.readerErr = rl.run()
if ce, ok := cc.readerErr.(ConnectionError); ok {
@@ -1319,10 +1657,8 @@ func (rl *clientConnReadLoop) cleanup() {
} else if err == io.EOF {
err = io.ErrUnexpectedEOF
}
- for _, cs := range rl.activeRes {
- cs.bufPipe.CloseWithError(err)
- }
for _, cs := range cc.streams {
+ cs.bufPipe.CloseWithError(err) // no-op if already closed
select {
case cs.resc <- resAndError{err: err}:
default:
@@ -1345,8 +1681,9 @@ func (rl *clientConnReadLoop) run() error {
cc.vlogf("http2: Transport readFrame error on conn %p: (%T) %v", cc, err, err)
}
if se, ok := err.(StreamError); ok {
- if cs := cc.streamByID(se.StreamID, true /*ended; remove it*/); cs != nil {
+ if cs := cc.streamByID(se.StreamID, false); cs != nil {
cs.cc.writeStreamReset(cs.ID, se.Code, err)
+ cs.cc.forgetStreamID(cs.ID)
if se.Cause == nil {
se.Cause = cc.fr.errDetail
}
@@ -1399,7 +1736,7 @@ func (rl *clientConnReadLoop) run() error {
}
return err
}
- if rl.closeWhenIdle && gotReply && maybeIdle && len(rl.activeRes) == 0 {
+ if rl.closeWhenIdle && gotReply && maybeIdle {
cc.closeIfIdle()
}
}
@@ -1407,13 +1744,31 @@ func (rl *clientConnReadLoop) run() error {
func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error {
cc := rl.cc
- cs := cc.streamByID(f.StreamID, f.StreamEnded())
+ cs := cc.streamByID(f.StreamID, false)
if cs == nil {
// We'd get here if we canceled a request while the
// server had its response still in flight. So if this
// was just something we canceled, ignore it.
return nil
}
+ if f.StreamEnded() {
+ // Issue 20521: If the stream has ended, streamByID() causes
+ // clientStream.done to be closed, which causes the request's bodyWriter
+ // to be closed with an errStreamClosed, which may be received by
+ // clientConn.RoundTrip before the result of processing these headers.
+ // Deferring stream closure allows the header processing to occur first.
+ // clientConn.RoundTrip may still receive the bodyWriter error first, but
+ // the fix for issue 16102 prioritises any response.
+ //
+ // Issue 22413: If there is no request body, we should close the
+ // stream before writing to cs.resc so that the stream is closed
+ // immediately once RoundTrip returns.
+ if cs.req.Body != nil {
+ defer cc.forgetStreamID(f.StreamID)
+ } else {
+ cc.forgetStreamID(f.StreamID)
+ }
+ }
if !cs.firstByte {
if cs.trace != nil {
// TODO(bradfitz): move first response byte earlier,
@@ -1437,6 +1792,7 @@ func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error {
}
// Any other error type is a stream error.
cs.cc.writeStreamReset(f.StreamID, ErrCodeProtocol, err)
+ cc.forgetStreamID(cs.ID)
cs.resc <- resAndError{err: err}
return nil // return nil from process* funcs to keep conn alive
}
@@ -1444,9 +1800,6 @@ func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error {
// (nil, nil) special case. See handleResponse docs.
return nil
}
- if res.Body != noBody {
- rl.activeRes[cs.ID] = cs
- }
cs.resTrailer = &res.Trailer
cs.resc <- resAndError{res: res}
return nil
@@ -1457,8 +1810,7 @@ func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error {
// is the detail.
//
// As a special case, handleResponse may return (nil, nil) to skip the
-// frame (currently only used for 100 expect continue). This special
-// case is going away after Issue 13851 is fixed.
+// frame (currently only used for 1xx responses).
func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFrame) (*http.Response, error) {
if f.Truncated {
return nil, errResponseHeaderListSize
@@ -1466,20 +1818,11 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
status := f.PseudoValue("status")
if status == "" {
- return nil, errors.New("missing status pseudo header")
+ return nil, errors.New("malformed response from server: missing status pseudo header")
}
statusCode, err := strconv.Atoi(status)
if err != nil {
- return nil, errors.New("malformed non-numeric status pseudo header")
- }
-
- if statusCode == 100 {
- traceGot100Continue(cs.trace)
- if cs.on100 != nil {
- cs.on100() // forces any write delay timer to fire
- }
- cs.pastHeaders = false // do it all again
- return nil, nil
+ return nil, errors.New("malformed response from server: malformed non-numeric status pseudo header")
}
header := make(http.Header)
@@ -1506,6 +1849,27 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
}
}
+ if statusCode >= 100 && statusCode <= 199 {
+ cs.num1xx++
+ const max1xxResponses = 5 // arbitrary bound on number of informational responses, same as net/http
+ if cs.num1xx > max1xxResponses {
+ return nil, errors.New("http2: too many 1xx informational responses")
+ }
+ if fn := cs.get1xxTraceFunc(); fn != nil {
+ if err := fn(statusCode, textproto.MIMEHeader(header)); err != nil {
+ return nil, err
+ }
+ }
+ if statusCode == 100 {
+ traceGot100Continue(cs.trace)
+ if cs.on100 != nil {
+ cs.on100() // forces any write delay timer to fire
+ }
+ }
+ cs.pastHeaders = false // do it all again
+ return nil, nil
+ }
+
streamEnded := f.StreamEnded()
isHead := cs.req.Method == "HEAD"
if !streamEnded || isHead {
@@ -1528,8 +1892,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
return res, nil
}
- buf := new(bytes.Buffer) // TODO(bradfitz): recycle this garbage
- cs.bufPipe = pipe{b: buf}
+ cs.bufPipe = pipe{b: &dataBuffer{expected: res.ContentLength}}
cs.bytesRemain = res.ContentLength
res.Body = transportResponseBody{cs}
go cs.awaitRequestCancel(cs.req)
@@ -1539,7 +1902,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
res.Header.Del("Content-Length")
res.ContentLength = -1
res.Body = &gzipReader{body: res.Body}
- setResponseUncompressed(res)
+ res.Uncompressed = true
}
return res, nil
}
@@ -1656,6 +2019,7 @@ func (b transportResponseBody) Close() error {
cc.wmu.Lock()
if !serverSentStreamEnd {
cc.fr.WriteRSTStream(cs.ID, ErrCodeCancel)
+ cs.didReset = true
}
// Return connection-level flow control.
if unread > 0 {
@@ -1668,6 +2032,7 @@ func (b transportResponseBody) Close() error {
}
cs.bufPipe.BreakWithError(errClosedResponseBody)
+ cc.forgetStreamID(cs.ID)
return nil
}
@@ -1702,13 +2067,23 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error {
}
return nil
}
+ if !cs.firstByte {
+ cc.logf("protocol error: received DATA before a HEADERS frame")
+ rl.endStreamError(cs, StreamError{
+ StreamID: f.StreamID,
+ Code: ErrCodeProtocol,
+ })
+ return nil
+ }
if f.Length > 0 {
- if len(data) > 0 && cs.bufPipe.b == nil {
- // Data frame after it's already closed?
- cc.logf("http2: Transport received DATA frame for closed stream; closing connection")
- return ConnectionError(ErrCodeProtocol)
+ if cs.req.Method == "HEAD" && len(data) > 0 {
+ cc.logf("protocol error: received DATA on a HEAD request")
+ rl.endStreamError(cs, StreamError{
+ StreamID: f.StreamID,
+ Code: ErrCodeProtocol,
+ })
+ return nil
}
-
// Check connection-level flow control.
cc.mu.Lock()
if cs.inflow.available() >= int32(f.Length) {
@@ -1719,16 +2094,27 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error {
}
// Return any padded flow control now, since we won't
// refund it later on body reads.
- if pad := int32(f.Length) - int32(len(data)); pad > 0 {
- cs.inflow.add(pad)
- cc.inflow.add(pad)
+ var refund int
+ if pad := int(f.Length) - len(data); pad > 0 {
+ refund += pad
+ }
+ // Return len(data) now if the stream is already closed,
+ // since data will never be read.
+ didReset := cs.didReset
+ if didReset {
+ refund += len(data)
+ }
+ if refund > 0 {
+ cc.inflow.add(int32(refund))
cc.wmu.Lock()
- cc.fr.WriteWindowUpdate(0, uint32(pad))
- cc.fr.WriteWindowUpdate(cs.ID, uint32(pad))
+ cc.fr.WriteWindowUpdate(0, uint32(refund))
+ if !didReset {
+ cs.inflow.add(int32(refund))
+ cc.fr.WriteWindowUpdate(cs.ID, uint32(refund))
+ }
cc.bw.Flush()
cc.wmu.Unlock()
}
- didReset := cs.didReset
cc.mu.Unlock()
if len(data) > 0 && !didReset {
@@ -1759,11 +2145,10 @@ func (rl *clientConnReadLoop) endStreamError(cs *clientStream, err error) {
err = io.EOF
code = cs.copyTrailers
}
- cs.bufPipe.closeWithErrorAndCode(err, code)
- delete(rl.activeRes, cs.ID)
if isConnectionCloseRequest(cs.req) {
rl.closeWhenIdle = true
}
+ cs.bufPipe.closeWithErrorAndCode(err, code)
select {
case cs.resc <- resAndError{err: err}:
@@ -1811,6 +2196,8 @@ func (rl *clientConnReadLoop) processSettings(f *SettingsFrame) error {
cc.maxFrameSize = s.Val
case SettingMaxConcurrentStreams:
cc.maxConcurrentStreams = s.Val
+ case SettingMaxHeaderListSize:
+ cc.peerMaxHeaderListSize = uint64(s.Val)
case SettingInitialWindowSize:
// Values above the maximum flow-control
// window size of 2^31-1 MUST be treated as a
@@ -1888,13 +2275,11 @@ func (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error {
cs.bufPipe.CloseWithError(err)
cs.cc.cond.Broadcast() // wake up checkResetOrDone via clientStream.awaitFlowControl
}
- delete(rl.activeRes, cs.ID)
return nil
}
// Ping sends a PING frame to the server and waits for the ack.
-// Public implementation is in go17.go and not_go17.go
-func (cc *ClientConn) ping(ctx contextContext) error {
+func (cc *ClientConn) Ping(ctx context.Context) error {
c := make(chan struct{})
// Generate a random payload
var p [8]byte
@@ -1977,6 +2362,7 @@ func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, err error)
var (
errResponseHeaderListSize = errors.New("http2: response header list larger than advertised limit")
+ errRequestHeaderListSize = errors.New("http2: request header list larger than peer's advertised limit")
errPseudoTrailers = errors.New("http2: invalid pseudo header in trailers")
)
@@ -2070,7 +2456,7 @@ func (t *Transport) getBodyWriterState(cs *clientStream, body io.Reader) (s body
}
s.delay = t.expectContinueTimeout()
if s.delay == 0 ||
- !httplex.HeaderValuesContainsToken(
+ !httpguts.HeaderValuesContainsToken(
cs.req.Header["Expect"],
"100-continue") {
return
@@ -2125,5 +2511,93 @@ func (s bodyWriterState) scheduleBodyWrite() {
// isConnectionCloseRequest reports whether req should use its own
// connection for a single request and then close the connection.
func isConnectionCloseRequest(req *http.Request) bool {
- return req.Close || httplex.HeaderValuesContainsToken(req.Header["Connection"], "close")
+ return req.Close || httpguts.HeaderValuesContainsToken(req.Header["Connection"], "close")
+}
+
+// registerHTTPSProtocol calls Transport.RegisterProtocol but
+// converting panics into errors.
+func registerHTTPSProtocol(t *http.Transport, rt noDialH2RoundTripper) (err error) {
+ defer func() {
+ if e := recover(); e != nil {
+ err = fmt.Errorf("%v", e)
+ }
+ }()
+ t.RegisterProtocol("https", rt)
+ return nil
+}
+
+// noDialH2RoundTripper is a RoundTripper which only tries to complete the request
+// if there's already has a cached connection to the host.
+// (The field is exported so it can be accessed via reflect from net/http; tested
+// by TestNoDialH2RoundTripperType)
+type noDialH2RoundTripper struct{ *Transport }
+
+func (rt noDialH2RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
+ res, err := rt.Transport.RoundTrip(req)
+ if isNoCachedConnError(err) {
+ return nil, http.ErrSkipAltProtocol
+ }
+ return res, err
+}
+
+func (t *Transport) idleConnTimeout() time.Duration {
+ if t.t1 != nil {
+ return t.t1.IdleConnTimeout
+ }
+ return 0
+}
+
+func traceGetConn(req *http.Request, hostPort string) {
+ trace := httptrace.ContextClientTrace(req.Context())
+ if trace == nil || trace.GetConn == nil {
+ return
+ }
+ trace.GetConn(hostPort)
+}
+
+func traceGotConn(req *http.Request, cc *ClientConn) {
+ trace := httptrace.ContextClientTrace(req.Context())
+ if trace == nil || trace.GotConn == nil {
+ return
+ }
+ ci := httptrace.GotConnInfo{Conn: cc.tconn}
+ cc.mu.Lock()
+ ci.Reused = cc.nextStreamID > 1
+ ci.WasIdle = len(cc.streams) == 0 && ci.Reused
+ if ci.WasIdle && !cc.lastActive.IsZero() {
+ ci.IdleTime = time.Now().Sub(cc.lastActive)
+ }
+ cc.mu.Unlock()
+
+ trace.GotConn(ci)
+}
+
+func traceWroteHeaders(trace *httptrace.ClientTrace) {
+ if trace != nil && trace.WroteHeaders != nil {
+ trace.WroteHeaders()
+ }
+}
+
+func traceGot100Continue(trace *httptrace.ClientTrace) {
+ if trace != nil && trace.Got100Continue != nil {
+ trace.Got100Continue()
+ }
+}
+
+func traceWait100Continue(trace *httptrace.ClientTrace) {
+ if trace != nil && trace.Wait100Continue != nil {
+ trace.Wait100Continue()
+ }
+}
+
+func traceWroteRequest(trace *httptrace.ClientTrace, err error) {
+ if trace != nil && trace.WroteRequest != nil {
+ trace.WroteRequest(httptrace.WroteRequestInfo{Err: err})
+ }
+}
+
+func traceFirstResponseByte(trace *httptrace.ClientTrace) {
+ if trace != nil && trace.GotFirstResponseByte != nil {
+ trace.GotFirstResponseByte()
+ }
}
diff --git a/vendor/golang.org/x/net/http2/write.go b/vendor/golang.org/x/net/http2/write.go
index 6b0dfae31..3849bc263 100644
--- a/vendor/golang.org/x/net/http2/write.go
+++ b/vendor/golang.org/x/net/http2/write.go
@@ -10,10 +10,9 @@ import (
"log"
"net/http"
"net/url"
- "time"
+ "golang.org/x/net/http/httpguts"
"golang.org/x/net/http2/hpack"
- "golang.org/x/net/lex/httplex"
)
// writeFramer is implemented by any type that is used to write frames.
@@ -90,11 +89,7 @@ type writeGoAway struct {
func (p *writeGoAway) writeFrame(ctx writeContext) error {
err := ctx.Framer().WriteGoAway(p.maxStreamID, p.code, nil)
- if p.code != 0 {
- ctx.Flush() // ignore error: we're hanging up on them anyway
- time.Sleep(50 * time.Millisecond)
- ctx.CloseConn()
- }
+ ctx.Flush() // ignore error: we're hanging up on them anyway
return err
}
@@ -204,7 +199,7 @@ func (w *writeResHeaders) staysWithinBuffer(max int) bool {
// TODO: this is a common one. It'd be nice to return true
// here and get into the fast path if we could be clever and
// calculate the size fast enough, or at least a conservative
- // uppper bound that usually fires. (Maybe if w.h and
+ // upper bound that usually fires. (Maybe if w.h and
// w.trailers are nil, so we don't need to enumerate it.)
// Otherwise I'm afraid that just calculating the length to
// answer this question would be slower than the ~2µs benefit.
@@ -334,7 +329,7 @@ func (wu writeWindowUpdate) writeFrame(ctx writeContext) error {
}
// encodeHeaders encodes an http.Header. If keys is not nil, then (k, h[k])
-// is encoded only only if k is in keys.
+// is encoded only if k is in keys.
func encodeHeaders(enc *hpack.Encoder, h http.Header, keys []string) {
if keys == nil {
sorter := sorterPool.Get().(*sorter)
@@ -355,7 +350,7 @@ func encodeHeaders(enc *hpack.Encoder, h http.Header, keys []string) {
}
isTE := k == "transfer-encoding"
for _, v := range vv {
- if !httplex.ValidHeaderFieldValue(v) {
+ if !httpguts.ValidHeaderFieldValue(v) {
// TODO: return an error? golang.org/issue/14048
// For now just omit it.
continue
diff --git a/vendor/golang.org/x/net/http2/writesched_priority.go b/vendor/golang.org/x/net/http2/writesched_priority.go
index 01132721b..848fed6ec 100644
--- a/vendor/golang.org/x/net/http2/writesched_priority.go
+++ b/vendor/golang.org/x/net/http2/writesched_priority.go
@@ -53,7 +53,7 @@ type PriorityWriteSchedulerConfig struct {
}
// NewPriorityWriteScheduler constructs a WriteScheduler that schedules
-// frames by following HTTP/2 priorities as described in RFC 7340 Section 5.3.
+// frames by following HTTP/2 priorities as described in RFC 7540 Section 5.3.
// If cfg is nil, default options are used.
func NewPriorityWriteScheduler(cfg *PriorityWriteSchedulerConfig) WriteScheduler {
if cfg == nil {
diff --git a/vendor/golang.org/x/net/idna/idna.go b/vendor/golang.org/x/net/idna/idna.go
index 47466e947..346fe4423 100644
--- a/vendor/golang.org/x/net/idna/idna.go
+++ b/vendor/golang.org/x/net/idna/idna.go
@@ -1,4 +1,4 @@
-// Copied from the golang.org/x/text repo; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
@@ -21,6 +21,7 @@ import (
"unicode/utf8"
"golang.org/x/text/secure/bidirule"
+ "golang.org/x/text/unicode/bidi"
"golang.org/x/text/unicode/norm"
)
@@ -39,27 +40,24 @@ import (
// error in the future.
// I think Option 1 is best, but it is quite opinionated.
-// ToASCII converts a domain or domain label to its ASCII form. For example,
-// ToASCII("bücher.example.com") is "xn--bcher-kva.example.com", and
-// ToASCII("golang") is "golang". If an error is encountered it will return
-// an error and a (partially) processed result.
+// ToASCII is a wrapper for Punycode.ToASCII.
func ToASCII(s string) (string, error) {
- return Resolve.process(s, true)
+ return Punycode.process(s, true)
}
-// ToUnicode converts a domain or domain label to its Unicode form. For example,
-// ToUnicode("xn--bcher-kva.example.com") is "bücher.example.com", and
-// ToUnicode("golang") is "golang". If an error is encountered it will return
-// an error and a (partially) processed result.
+// ToUnicode is a wrapper for Punycode.ToUnicode.
func ToUnicode(s string) (string, error) {
- return NonTransitional.process(s, false)
+ return Punycode.process(s, false)
}
// An Option configures a Profile at creation time.
type Option func(*options)
-// Transitional sets a Profile to use the Transitional mapping as defined
-// in UTS #46.
+// Transitional sets a Profile to use the Transitional mapping as defined in UTS
+// #46. This will cause, for example, "ß" to be mapped to "ss". Using the
+// transitional mapping provides a compromise between IDNA2003 and IDNA2008
+// compatibility. It is used by most browsers when resolving domain names. This
+// option is only meaningful if combined with MapForLookup.
func Transitional(transitional bool) Option {
return func(o *options) { o.transitional = true }
}
@@ -70,22 +68,106 @@ func VerifyDNSLength(verify bool) Option {
return func(o *options) { o.verifyDNSLength = verify }
}
-// IgnoreSTD3Rules sets whether ASCII characters outside the A-Z, a-z, 0-9 and
-// the hyphen should be allowed. By default this is not allowed, but IDNA2003,
-// and as a consequence UTS #46, allows this to be overridden to support
-// browsers that allow characters outside this range, for example a '_' (U+005F
-// LOW LINE). See http://www.rfc- editor.org/std/std3.txt for more details.
-func IgnoreSTD3Rules(ignore bool) Option {
- return func(o *options) { o.ignoreSTD3Rules = ignore }
+// RemoveLeadingDots removes leading label separators. Leading runes that map to
+// dots, such as U+3002 IDEOGRAPHIC FULL STOP, are removed as well.
+//
+// This is the behavior suggested by the UTS #46 and is adopted by some
+// browsers.
+func RemoveLeadingDots(remove bool) Option {
+ return func(o *options) { o.removeLeadingDots = remove }
+}
+
+// ValidateLabels sets whether to check the mandatory label validation criteria
+// as defined in Section 5.4 of RFC 5891. This includes testing for correct use
+// of hyphens ('-'), normalization, validity of runes, and the context rules.
+func ValidateLabels(enable bool) Option {
+ return func(o *options) {
+ // Don't override existing mappings, but set one that at least checks
+ // normalization if it is not set.
+ if o.mapping == nil && enable {
+ o.mapping = normalize
+ }
+ o.trie = trie
+ o.validateLabels = enable
+ o.fromPuny = validateFromPunycode
+ }
+}
+
+// StrictDomainName limits the set of permissible ASCII characters to those
+// allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the
+// hyphen). This is set by default for MapForLookup and ValidateForRegistration.
+//
+// This option is useful, for instance, for browsers that allow characters
+// outside this range, for example a '_' (U+005F LOW LINE). See
+// http://www.rfc-editor.org/std/std3.txt for more details This option
+// corresponds to the UseSTD3ASCIIRules option in UTS #46.
+func StrictDomainName(use bool) Option {
+ return func(o *options) {
+ o.trie = trie
+ o.useSTD3Rules = use
+ o.fromPuny = validateFromPunycode
+ }
+}
+
+// NOTE: the following options pull in tables. The tables should not be linked
+// in as long as the options are not used.
+
+// BidiRule enables the Bidi rule as defined in RFC 5893. Any application
+// that relies on proper validation of labels should include this rule.
+func BidiRule() Option {
+ return func(o *options) { o.bidirule = bidirule.ValidString }
+}
+
+// ValidateForRegistration sets validation options to verify that a given IDN is
+// properly formatted for registration as defined by Section 4 of RFC 5891.
+func ValidateForRegistration() Option {
+ return func(o *options) {
+ o.mapping = validateRegistration
+ StrictDomainName(true)(o)
+ ValidateLabels(true)(o)
+ VerifyDNSLength(true)(o)
+ BidiRule()(o)
+ }
+}
+
+// MapForLookup sets validation and mapping options such that a given IDN is
+// transformed for domain name lookup according to the requirements set out in
+// Section 5 of RFC 5891. The mappings follow the recommendations of RFC 5894,
+// RFC 5895 and UTS 46. It does not add the Bidi Rule. Use the BidiRule option
+// to add this check.
+//
+// The mappings include normalization and mapping case, width and other
+// compatibility mappings.
+func MapForLookup() Option {
+ return func(o *options) {
+ o.mapping = validateAndMap
+ StrictDomainName(true)(o)
+ ValidateLabels(true)(o)
+ }
}
type options struct {
- transitional bool
- ignoreSTD3Rules bool
- verifyDNSLength bool
+ transitional bool
+ useSTD3Rules bool
+ validateLabels bool
+ verifyDNSLength bool
+ removeLeadingDots bool
+
+ trie *idnaTrie
+
+ // fromPuny calls validation rules when converting A-labels to U-labels.
+ fromPuny func(p *Profile, s string) error
+
+ // mapping implements a validation and mapping step as defined in RFC 5895
+ // or UTS 46, tailored to, for example, domain registration or lookup.
+ mapping func(p *Profile, s string) (mapped string, isBidi bool, err error)
+
+ // bidirule, if specified, checks whether s conforms to the Bidi Rule
+ // defined in RFC 5893.
+ bidirule func(s string) bool
}
-// A Profile defines the configuration of a IDNA mapper.
+// A Profile defines the configuration of an IDNA mapper.
type Profile struct {
options
}
@@ -97,8 +179,13 @@ func apply(o *options, opts []Option) {
}
// New creates a new Profile.
-// With no options, the returned profile is the non-transitional profile as
-// defined in UTS #46.
+//
+// With no options, the returned Profile is the most permissive and equals the
+// Punycode Profile. Options can be passed to further restrict the Profile. The
+// MapForLookup and ValidateForRegistration options set a collection of options,
+// for lookup and registration purposes respectively, which can be tailored by
+// adding more fine-grained options, where later options override earlier
+// options.
func New(o ...Option) *Profile {
p := &Profile{}
apply(&p.options, o)
@@ -132,33 +219,67 @@ func (p *Profile) String() string {
} else {
s = "NonTransitional"
}
- if p.ignoreSTD3Rules {
- s += ":NoSTD3Rules"
+ if p.useSTD3Rules {
+ s += ":UseSTD3Rules"
+ }
+ if p.validateLabels {
+ s += ":ValidateLabels"
+ }
+ if p.verifyDNSLength {
+ s += ":VerifyDNSLength"
}
return s
}
var (
- // Resolve is the recommended profile for resolving domain names.
- // The configuration of this profile may change over time.
- Resolve = resolve
+ // Punycode is a Profile that does raw punycode processing with a minimum
+ // of validation.
+ Punycode *Profile = punycode
+
+ // Lookup is the recommended profile for looking up domain names, according
+ // to Section 5 of RFC 5891. The exact configuration of this profile may
+ // change over time.
+ Lookup *Profile = lookup
// Display is the recommended profile for displaying domain names.
// The configuration of this profile may change over time.
- Display = display
-
- // NonTransitional defines a profile that implements the Transitional
- // mapping as defined in UTS #46 with no additional constraints.
- NonTransitional = nonTransitional
-
- resolve = &Profile{options{transitional: true}}
- display = &Profile{}
- nonTransitional = &Profile{}
+ Display *Profile = display
+
+ // Registration is the recommended profile for checking whether a given
+ // IDN is valid for registration, according to Section 4 of RFC 5891.
+ Registration *Profile = registration
+
+ punycode = &Profile{}
+ lookup = &Profile{options{
+ transitional: true,
+ useSTD3Rules: true,
+ validateLabels: true,
+ trie: trie,
+ fromPuny: validateFromPunycode,
+ mapping: validateAndMap,
+ bidirule: bidirule.ValidString,
+ }}
+ display = &Profile{options{
+ useSTD3Rules: true,
+ validateLabels: true,
+ trie: trie,
+ fromPuny: validateFromPunycode,
+ mapping: validateAndMap,
+ bidirule: bidirule.ValidString,
+ }}
+ registration = &Profile{options{
+ useSTD3Rules: true,
+ validateLabels: true,
+ verifyDNSLength: true,
+ trie: trie,
+ fromPuny: validateFromPunycode,
+ mapping: validateRegistration,
+ bidirule: bidirule.ValidString,
+ }}
// TODO: profiles
- // V2008: strict IDNA2008
- // Register: recommended for approving domain names: nontransitional, but
- // bundle or block deviation characters.
+ // Register: recommended for approving domain names: don't do any mappings
+ // but rather reject on invalid input. Bundle or block deviation characters.
)
type labelError struct{ label, code_ string }
@@ -178,53 +299,21 @@ func (e runeError) Error() string {
// process implements the algorithm described in section 4 of UTS #46,
// see http://www.unicode.org/reports/tr46.
func (p *Profile) process(s string, toASCII bool) (string, error) {
- var (
- b []byte
- err error
- k, i int
- )
- for i < len(s) {
- v, sz := trie.lookupString(s[i:])
- start := i
- i += sz
- // Copy bytes not copied so far.
- switch p.simplify(info(v).category()) {
- case valid:
- continue
- case disallowed:
- if err == nil {
- r, _ := utf8.DecodeRuneInString(s[i:])
- err = runeError(r)
- }
- continue
- case mapped, deviation:
- b = append(b, s[k:start]...)
- b = info(v).appendMapping(b, s[start:i])
- case ignored:
- b = append(b, s[k:start]...)
- // drop the rune
- case unknown:
- b = append(b, s[k:start]...)
- b = append(b, "\ufffd"...)
- }
- k = i
+ var err error
+ var isBidi bool
+ if p.mapping != nil {
+ s, isBidi, err = p.mapping(p, s)
}
- if k == 0 {
- // No changes so far.
- s = norm.NFC.String(s)
- } else {
- b = append(b, s[k:]...)
- if norm.NFC.QuickSpan(b) != len(b) {
- b = norm.NFC.Bytes(b)
+ // Remove leading empty labels.
+ if p.removeLeadingDots {
+ for ; len(s) > 0 && s[0] == '.'; s = s[1:] {
}
- // TODO: the punycode converters require strings as input.
- s = string(b)
}
- // Remove leading empty labels
- for ; len(s) > 0 && s[0] == '.'; s = s[1:] {
- }
- if s == "" {
- return "", &labelError{s, "A4"}
+ // TODO: allow for a quick check of the tables data.
+ // It seems like we should only create this error on ToASCII, but the
+ // UTS 46 conformance tests suggests we should always check this.
+ if err == nil && p.verifyDNSLength && s == "" {
+ err = &labelError{s, "A4"}
}
labels := labelIter{orig: s}
for ; !labels.done(); labels.next() {
@@ -232,7 +321,7 @@ func (p *Profile) process(s string, toASCII bool) (string, error) {
if label == "" {
// Empty labels are not okay. The label iterator skips the last
// label if it is empty.
- if err == nil {
+ if err == nil && p.verifyDNSLength {
err = &labelError{s, "A4"}
}
continue
@@ -246,15 +335,27 @@ func (p *Profile) process(s string, toASCII bool) (string, error) {
// Spec says keep the old label.
continue
}
+ isBidi = isBidi || bidirule.DirectionString(u) != bidi.LeftToRight
labels.set(u)
- if err == nil {
- err = p.validateFromPunycode(u)
+ if err == nil && p.validateLabels {
+ err = p.fromPuny(p, u)
}
if err == nil {
- err = NonTransitional.validate(u)
+ // This should be called on NonTransitional, according to the
+ // spec, but that currently does not have any effect. Use the
+ // original profile to preserve options.
+ err = p.validateLabel(u)
}
} else if err == nil {
- err = p.validate(label)
+ err = p.validateLabel(label)
+ }
+ }
+ if isBidi && p.bidirule != nil && err == nil {
+ for labels.reset(); !labels.done(); labels.next() {
+ if !p.bidirule(labels.label()) {
+ err = &labelError{s, "B"}
+ break
+ }
}
}
if toASCII {
@@ -288,6 +389,117 @@ func (p *Profile) process(s string, toASCII bool) (string, error) {
return s, err
}
+func normalize(p *Profile, s string) (mapped string, isBidi bool, err error) {
+ // TODO: consider first doing a quick check to see if any of these checks
+ // need to be done. This will make it slower in the general case, but
+ // faster in the common case.
+ mapped = norm.NFC.String(s)
+ isBidi = bidirule.DirectionString(mapped) == bidi.RightToLeft
+ return mapped, isBidi, nil
+}
+
+func validateRegistration(p *Profile, s string) (idem string, bidi bool, err error) {
+ // TODO: filter need for normalization in loop below.
+ if !norm.NFC.IsNormalString(s) {
+ return s, false, &labelError{s, "V1"}
+ }
+ for i := 0; i < len(s); {
+ v, sz := trie.lookupString(s[i:])
+ if sz == 0 {
+ return s, bidi, runeError(utf8.RuneError)
+ }
+ bidi = bidi || info(v).isBidi(s[i:])
+ // Copy bytes not copied so far.
+ switch p.simplify(info(v).category()) {
+ // TODO: handle the NV8 defined in the Unicode idna data set to allow
+ // for strict conformance to IDNA2008.
+ case valid, deviation:
+ case disallowed, mapped, unknown, ignored:
+ r, _ := utf8.DecodeRuneInString(s[i:])
+ return s, bidi, runeError(r)
+ }
+ i += sz
+ }
+ return s, bidi, nil
+}
+
+func (c info) isBidi(s string) bool {
+ if !c.isMapped() {
+ return c&attributesMask == rtl
+ }
+ // TODO: also store bidi info for mapped data. This is possible, but a bit
+ // cumbersome and not for the common case.
+ p, _ := bidi.LookupString(s)
+ switch p.Class() {
+ case bidi.R, bidi.AL, bidi.AN:
+ return true
+ }
+ return false
+}
+
+func validateAndMap(p *Profile, s string) (vm string, bidi bool, err error) {
+ var (
+ b []byte
+ k int
+ )
+ // combinedInfoBits contains the or-ed bits of all runes. We use this
+ // to derive the mayNeedNorm bit later. This may trigger normalization
+ // overeagerly, but it will not do so in the common case. The end result
+ // is another 10% saving on BenchmarkProfile for the common case.
+ var combinedInfoBits info
+ for i := 0; i < len(s); {
+ v, sz := trie.lookupString(s[i:])
+ if sz == 0 {
+ b = append(b, s[k:i]...)
+ b = append(b, "\ufffd"...)
+ k = len(s)
+ if err == nil {
+ err = runeError(utf8.RuneError)
+ }
+ break
+ }
+ combinedInfoBits |= info(v)
+ bidi = bidi || info(v).isBidi(s[i:])
+ start := i
+ i += sz
+ // Copy bytes not copied so far.
+ switch p.simplify(info(v).category()) {
+ case valid:
+ continue
+ case disallowed:
+ if err == nil {
+ r, _ := utf8.DecodeRuneInString(s[start:])
+ err = runeError(r)
+ }
+ continue
+ case mapped, deviation:
+ b = append(b, s[k:start]...)
+ b = info(v).appendMapping(b, s[start:i])
+ case ignored:
+ b = append(b, s[k:start]...)
+ // drop the rune
+ case unknown:
+ b = append(b, s[k:start]...)
+ b = append(b, "\ufffd"...)
+ }
+ k = i
+ }
+ if k == 0 {
+ // No changes so far.
+ if combinedInfoBits&mayNeedNorm != 0 {
+ s = norm.NFC.String(s)
+ }
+ } else {
+ b = append(b, s[k:]...)
+ if norm.NFC.QuickSpan(b) != len(b) {
+ b = norm.NFC.Bytes(b)
+ }
+ // TODO: the punycode converters require strings as input.
+ s = string(b)
+ }
+ return s, bidi, err
+}
+
// A labelIter allows iterating over domain name labels.
type labelIter struct {
orig string
@@ -354,13 +566,13 @@ const acePrefix = "xn--"
func (p *Profile) simplify(cat category) category {
switch cat {
case disallowedSTD3Mapped:
- if !p.ignoreSTD3Rules {
+ if p.useSTD3Rules {
cat = disallowed
} else {
cat = mapped
}
case disallowedSTD3Valid:
- if !p.ignoreSTD3Rules {
+ if p.useSTD3Rules {
cat = disallowed
} else {
cat = valid
@@ -376,12 +588,17 @@ func (p *Profile) simplify(cat category) category {
return cat
}
-func (p *Profile) validateFromPunycode(s string) error {
+func validateFromPunycode(p *Profile, s string) error {
if !norm.NFC.IsNormalString(s) {
return &labelError{s, "V1"}
}
+ // TODO: detect whether string may have to be normalized in the following
+ // loop.
for i := 0; i < len(s); {
v, sz := trie.lookupString(s[i:])
+ if sz == 0 {
+ return runeError(utf8.RuneError)
+ }
if c := p.simplify(info(v).category()); c != valid && c != deviation {
return &labelError{s, "V6"}
}
@@ -452,9 +669,19 @@ var joinStates = [][numJoinTypes]joinState{
},
}
-// validate validates the criteria from Section 4.1. Item 1, 4, and 6 are
+// validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are
// already implicitly satisfied by the overall implementation.
-func (p *Profile) validate(s string) error {
+func (p *Profile) validateLabel(s string) (err error) {
+ if s == "" {
+ if p.verifyDNSLength {
+ return &labelError{s, "A4"}
+ }
+ return nil
+ }
+ if !p.validateLabels {
+ return nil
+ }
+ trie := p.trie // p.validateLabels is only set if trie is set.
if len(s) > 4 && s[2] == '-' && s[3] == '-' {
return &labelError{s, "V2"}
}
@@ -467,9 +694,6 @@ func (p *Profile) validate(s string) error {
if x.isModifier() {
return &labelError{s, "V5"}
}
- if !bidirule.ValidString(s) {
- return &labelError{s, "B"}
- }
// Quickly return in the absence of zero-width (non) joiners.
if strings.Index(s, zwj) == -1 && strings.Index(s, zwnj) == -1 {
return nil
diff --git a/vendor/golang.org/x/net/idna/punycode.go b/vendor/golang.org/x/net/idna/punycode.go
index df3411a5b..02c7d59af 100644
--- a/vendor/golang.org/x/net/idna/punycode.go
+++ b/vendor/golang.org/x/net/idna/punycode.go
@@ -1,4 +1,4 @@
-// Copied from the golang.org/x/text repo; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
diff --git a/vendor/golang.org/x/net/idna/tables.go b/vendor/golang.org/x/net/idna/tables.go
index 663d73c53..f910b2691 100644
--- a/vendor/golang.org/x/net/idna/tables.go
+++ b/vendor/golang.org/x/net/idna/tables.go
@@ -1,11 +1,9 @@
-// Copied from the golang.org/x/text repo; DO NOT EDIT
-
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
package idna
// UnicodeVersion is the Unicode version from which the tables in this package are derived.
-const UnicodeVersion = "9.0.0"
+const UnicodeVersion = "10.0.0"
var mappings string = "" + // Size: 8176 bytes
"\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" +
@@ -546,7 +544,7 @@ func (t *idnaTrie) lookupStringUnsafe(s string) uint16 {
return 0
}
-// idnaTrie. Total size: 28496 bytes (27.83 KiB). Checksum: 43288b883596640e.
+// idnaTrie. Total size: 29052 bytes (28.37 KiB). Checksum: ef06e7ecc26f36dd.
type idnaTrie struct{}
func newIdnaTrie(i int) *idnaTrie {
@@ -556,17 +554,17 @@ func newIdnaTrie(i int) *idnaTrie {
// lookupValue determines the type of block n and looks up the value for b.
func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 {
switch {
- case n < 123:
+ case n < 125:
return uint16(idnaValues[n<<6+uint32(b)])
default:
- n -= 123
+ n -= 125
return uint16(idnaSparse.lookup(n, b))
}
}
-// idnaValues: 125 blocks, 8000 entries, 16000 bytes
+// idnaValues: 127 blocks, 8128 entries, 16256 bytes
// The third block is the zero block.
-var idnaValues = [8000]uint16{
+var idnaValues = [8128]uint16{
// Block 0x0, offset 0x0
0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080,
0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080,
@@ -677,14 +675,14 @@ var idnaValues = [8000]uint16{
0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018,
0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018,
// Block 0xa, offset 0x280
- 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x1308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d,
- 0x286: 0x1308, 0x287: 0x1308, 0x288: 0x1308, 0x289: 0x1308, 0x28a: 0x1308, 0x28b: 0x1308,
- 0x28c: 0x1308, 0x28d: 0x1308, 0x28e: 0x1308, 0x28f: 0x13c0, 0x290: 0x1308, 0x291: 0x1308,
- 0x292: 0x1308, 0x293: 0x1308, 0x294: 0x1308, 0x295: 0x1308, 0x296: 0x1308, 0x297: 0x1308,
- 0x298: 0x1308, 0x299: 0x1308, 0x29a: 0x1308, 0x29b: 0x1308, 0x29c: 0x1308, 0x29d: 0x1308,
- 0x29e: 0x1308, 0x29f: 0x1308, 0x2a0: 0x1308, 0x2a1: 0x1308, 0x2a2: 0x1308, 0x2a3: 0x1308,
- 0x2a4: 0x1308, 0x2a5: 0x1308, 0x2a6: 0x1308, 0x2a7: 0x1308, 0x2a8: 0x1308, 0x2a9: 0x1308,
- 0x2aa: 0x1308, 0x2ab: 0x1308, 0x2ac: 0x1308, 0x2ad: 0x1308, 0x2ae: 0x1308, 0x2af: 0x1308,
+ 0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d,
+ 0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308,
+ 0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308,
+ 0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308,
+ 0x298: 0x3308, 0x299: 0x3308, 0x29a: 0x3308, 0x29b: 0x3308, 0x29c: 0x3308, 0x29d: 0x3308,
+ 0x29e: 0x3308, 0x29f: 0x3308, 0x2a0: 0x3308, 0x2a1: 0x3308, 0x2a2: 0x3308, 0x2a3: 0x3308,
+ 0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308,
+ 0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308,
0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008,
0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008,
0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d,
@@ -725,8 +723,8 @@ var idnaValues = [8000]uint16{
0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008,
0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008,
// Block 0xe, offset 0x380
- 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x1308, 0x384: 0x1308, 0x385: 0x1308,
- 0x386: 0x1308, 0x387: 0x1308, 0x388: 0x1318, 0x389: 0x1318, 0x38a: 0xe00d, 0x38b: 0x0008,
+ 0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x3308, 0x384: 0x3308, 0x385: 0x3308,
+ 0x386: 0x3308, 0x387: 0x3308, 0x388: 0x3318, 0x389: 0x3318, 0x38a: 0xe00d, 0x38b: 0x0008,
0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008,
0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008,
0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008,
@@ -761,129 +759,129 @@ var idnaValues = [8000]uint16{
0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5,
0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5,
// Block 0x11, offset 0x440
- 0x440: 0x0040, 0x441: 0x0040, 0x442: 0x0040, 0x443: 0x0040, 0x444: 0x0040, 0x445: 0x0040,
- 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0018, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0018,
- 0x44c: 0x0018, 0x44d: 0x0018, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x1308, 0x451: 0x1308,
- 0x452: 0x1308, 0x453: 0x1308, 0x454: 0x1308, 0x455: 0x1308, 0x456: 0x1308, 0x457: 0x1308,
- 0x458: 0x1308, 0x459: 0x1308, 0x45a: 0x1308, 0x45b: 0x0018, 0x45c: 0x0340, 0x45d: 0x0040,
- 0x45e: 0x0018, 0x45f: 0x0018, 0x460: 0x0208, 0x461: 0x0008, 0x462: 0x0408, 0x463: 0x0408,
- 0x464: 0x0408, 0x465: 0x0408, 0x466: 0x0208, 0x467: 0x0408, 0x468: 0x0208, 0x469: 0x0408,
- 0x46a: 0x0208, 0x46b: 0x0208, 0x46c: 0x0208, 0x46d: 0x0208, 0x46e: 0x0208, 0x46f: 0x0408,
- 0x470: 0x0408, 0x471: 0x0408, 0x472: 0x0408, 0x473: 0x0208, 0x474: 0x0208, 0x475: 0x0208,
- 0x476: 0x0208, 0x477: 0x0208, 0x478: 0x0208, 0x479: 0x0208, 0x47a: 0x0208, 0x47b: 0x0208,
- 0x47c: 0x0208, 0x47d: 0x0208, 0x47e: 0x0208, 0x47f: 0x0208,
+ 0x440: 0x0840, 0x441: 0x0840, 0x442: 0x0840, 0x443: 0x0840, 0x444: 0x0840, 0x445: 0x0840,
+ 0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0818, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0818,
+ 0x44c: 0x0018, 0x44d: 0x0818, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x3308, 0x451: 0x3308,
+ 0x452: 0x3308, 0x453: 0x3308, 0x454: 0x3308, 0x455: 0x3308, 0x456: 0x3308, 0x457: 0x3308,
+ 0x458: 0x3308, 0x459: 0x3308, 0x45a: 0x3308, 0x45b: 0x0818, 0x45c: 0x0b40, 0x45d: 0x0040,
+ 0x45e: 0x0818, 0x45f: 0x0818, 0x460: 0x0a08, 0x461: 0x0808, 0x462: 0x0c08, 0x463: 0x0c08,
+ 0x464: 0x0c08, 0x465: 0x0c08, 0x466: 0x0a08, 0x467: 0x0c08, 0x468: 0x0a08, 0x469: 0x0c08,
+ 0x46a: 0x0a08, 0x46b: 0x0a08, 0x46c: 0x0a08, 0x46d: 0x0a08, 0x46e: 0x0a08, 0x46f: 0x0c08,
+ 0x470: 0x0c08, 0x471: 0x0c08, 0x472: 0x0c08, 0x473: 0x0a08, 0x474: 0x0a08, 0x475: 0x0a08,
+ 0x476: 0x0a08, 0x477: 0x0a08, 0x478: 0x0a08, 0x479: 0x0a08, 0x47a: 0x0a08, 0x47b: 0x0a08,
+ 0x47c: 0x0a08, 0x47d: 0x0a08, 0x47e: 0x0a08, 0x47f: 0x0a08,
// Block 0x12, offset 0x480
- 0x480: 0x0408, 0x481: 0x0208, 0x482: 0x0208, 0x483: 0x0408, 0x484: 0x0408, 0x485: 0x0408,
- 0x486: 0x0408, 0x487: 0x0408, 0x488: 0x0408, 0x489: 0x0408, 0x48a: 0x0408, 0x48b: 0x0408,
- 0x48c: 0x0208, 0x48d: 0x0408, 0x48e: 0x0208, 0x48f: 0x0408, 0x490: 0x0208, 0x491: 0x0208,
- 0x492: 0x0408, 0x493: 0x0408, 0x494: 0x0018, 0x495: 0x0408, 0x496: 0x1308, 0x497: 0x1308,
- 0x498: 0x1308, 0x499: 0x1308, 0x49a: 0x1308, 0x49b: 0x1308, 0x49c: 0x1308, 0x49d: 0x0040,
- 0x49e: 0x0018, 0x49f: 0x1308, 0x4a0: 0x1308, 0x4a1: 0x1308, 0x4a2: 0x1308, 0x4a3: 0x1308,
- 0x4a4: 0x1308, 0x4a5: 0x0008, 0x4a6: 0x0008, 0x4a7: 0x1308, 0x4a8: 0x1308, 0x4a9: 0x0018,
- 0x4aa: 0x1308, 0x4ab: 0x1308, 0x4ac: 0x1308, 0x4ad: 0x1308, 0x4ae: 0x0408, 0x4af: 0x0408,
- 0x4b0: 0x0008, 0x4b1: 0x0008, 0x4b2: 0x0008, 0x4b3: 0x0008, 0x4b4: 0x0008, 0x4b5: 0x0008,
- 0x4b6: 0x0008, 0x4b7: 0x0008, 0x4b8: 0x0008, 0x4b9: 0x0008, 0x4ba: 0x0208, 0x4bb: 0x0208,
- 0x4bc: 0x0208, 0x4bd: 0x0008, 0x4be: 0x0008, 0x4bf: 0x0208,
+ 0x480: 0x0818, 0x481: 0x0a08, 0x482: 0x0a08, 0x483: 0x0a08, 0x484: 0x0a08, 0x485: 0x0a08,
+ 0x486: 0x0a08, 0x487: 0x0a08, 0x488: 0x0c08, 0x489: 0x0a08, 0x48a: 0x0a08, 0x48b: 0x3308,
+ 0x48c: 0x3308, 0x48d: 0x3308, 0x48e: 0x3308, 0x48f: 0x3308, 0x490: 0x3308, 0x491: 0x3308,
+ 0x492: 0x3308, 0x493: 0x3308, 0x494: 0x3308, 0x495: 0x3308, 0x496: 0x3308, 0x497: 0x3308,
+ 0x498: 0x3308, 0x499: 0x3308, 0x49a: 0x3308, 0x49b: 0x3308, 0x49c: 0x3308, 0x49d: 0x3308,
+ 0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808,
+ 0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808,
+ 0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08,
+ 0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0429,
+ 0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08,
+ 0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08,
// Block 0x13, offset 0x4c0
- 0x4c0: 0x0018, 0x4c1: 0x0018, 0x4c2: 0x0018, 0x4c3: 0x0018, 0x4c4: 0x0018, 0x4c5: 0x0018,
- 0x4c6: 0x0018, 0x4c7: 0x0018, 0x4c8: 0x0018, 0x4c9: 0x0018, 0x4ca: 0x0018, 0x4cb: 0x0018,
- 0x4cc: 0x0018, 0x4cd: 0x0018, 0x4ce: 0x0040, 0x4cf: 0x0340, 0x4d0: 0x0408, 0x4d1: 0x1308,
- 0x4d2: 0x0208, 0x4d3: 0x0208, 0x4d4: 0x0208, 0x4d5: 0x0408, 0x4d6: 0x0408, 0x4d7: 0x0408,
- 0x4d8: 0x0408, 0x4d9: 0x0408, 0x4da: 0x0208, 0x4db: 0x0208, 0x4dc: 0x0208, 0x4dd: 0x0208,
- 0x4de: 0x0408, 0x4df: 0x0208, 0x4e0: 0x0208, 0x4e1: 0x0208, 0x4e2: 0x0208, 0x4e3: 0x0208,
- 0x4e4: 0x0208, 0x4e5: 0x0208, 0x4e6: 0x0208, 0x4e7: 0x0208, 0x4e8: 0x0408, 0x4e9: 0x0208,
- 0x4ea: 0x0408, 0x4eb: 0x0208, 0x4ec: 0x0408, 0x4ed: 0x0208, 0x4ee: 0x0208, 0x4ef: 0x0408,
- 0x4f0: 0x1308, 0x4f1: 0x1308, 0x4f2: 0x1308, 0x4f3: 0x1308, 0x4f4: 0x1308, 0x4f5: 0x1308,
- 0x4f6: 0x1308, 0x4f7: 0x1308, 0x4f8: 0x1308, 0x4f9: 0x1308, 0x4fa: 0x1308, 0x4fb: 0x1308,
- 0x4fc: 0x1308, 0x4fd: 0x1308, 0x4fe: 0x1308, 0x4ff: 0x1308,
+ 0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08,
+ 0x4c6: 0x0c08, 0x4c7: 0x0c08, 0x4c8: 0x0c08, 0x4c9: 0x0c08, 0x4ca: 0x0c08, 0x4cb: 0x0c08,
+ 0x4cc: 0x0a08, 0x4cd: 0x0c08, 0x4ce: 0x0a08, 0x4cf: 0x0c08, 0x4d0: 0x0a08, 0x4d1: 0x0a08,
+ 0x4d2: 0x0c08, 0x4d3: 0x0c08, 0x4d4: 0x0818, 0x4d5: 0x0c08, 0x4d6: 0x3308, 0x4d7: 0x3308,
+ 0x4d8: 0x3308, 0x4d9: 0x3308, 0x4da: 0x3308, 0x4db: 0x3308, 0x4dc: 0x3308, 0x4dd: 0x0840,
+ 0x4de: 0x0018, 0x4df: 0x3308, 0x4e0: 0x3308, 0x4e1: 0x3308, 0x4e2: 0x3308, 0x4e3: 0x3308,
+ 0x4e4: 0x3308, 0x4e5: 0x0808, 0x4e6: 0x0808, 0x4e7: 0x3308, 0x4e8: 0x3308, 0x4e9: 0x0018,
+ 0x4ea: 0x3308, 0x4eb: 0x3308, 0x4ec: 0x3308, 0x4ed: 0x3308, 0x4ee: 0x0c08, 0x4ef: 0x0c08,
+ 0x4f0: 0x0008, 0x4f1: 0x0008, 0x4f2: 0x0008, 0x4f3: 0x0008, 0x4f4: 0x0008, 0x4f5: 0x0008,
+ 0x4f6: 0x0008, 0x4f7: 0x0008, 0x4f8: 0x0008, 0x4f9: 0x0008, 0x4fa: 0x0a08, 0x4fb: 0x0a08,
+ 0x4fc: 0x0a08, 0x4fd: 0x0808, 0x4fe: 0x0808, 0x4ff: 0x0a08,
// Block 0x14, offset 0x500
- 0x500: 0x1008, 0x501: 0x1308, 0x502: 0x1308, 0x503: 0x1308, 0x504: 0x1308, 0x505: 0x1308,
- 0x506: 0x1308, 0x507: 0x1308, 0x508: 0x1308, 0x509: 0x1008, 0x50a: 0x1008, 0x50b: 0x1008,
- 0x50c: 0x1008, 0x50d: 0x1b08, 0x50e: 0x1008, 0x50f: 0x1008, 0x510: 0x0008, 0x511: 0x1308,
- 0x512: 0x1308, 0x513: 0x1308, 0x514: 0x1308, 0x515: 0x1308, 0x516: 0x1308, 0x517: 0x1308,
- 0x518: 0x04c9, 0x519: 0x0501, 0x51a: 0x0539, 0x51b: 0x0571, 0x51c: 0x05a9, 0x51d: 0x05e1,
- 0x51e: 0x0619, 0x51f: 0x0651, 0x520: 0x0008, 0x521: 0x0008, 0x522: 0x1308, 0x523: 0x1308,
- 0x524: 0x0018, 0x525: 0x0018, 0x526: 0x0008, 0x527: 0x0008, 0x528: 0x0008, 0x529: 0x0008,
- 0x52a: 0x0008, 0x52b: 0x0008, 0x52c: 0x0008, 0x52d: 0x0008, 0x52e: 0x0008, 0x52f: 0x0008,
- 0x530: 0x0018, 0x531: 0x0008, 0x532: 0x0008, 0x533: 0x0008, 0x534: 0x0008, 0x535: 0x0008,
- 0x536: 0x0008, 0x537: 0x0008, 0x538: 0x0008, 0x539: 0x0008, 0x53a: 0x0008, 0x53b: 0x0008,
- 0x53c: 0x0008, 0x53d: 0x0008, 0x53e: 0x0008, 0x53f: 0x0008,
+ 0x500: 0x0818, 0x501: 0x0818, 0x502: 0x0818, 0x503: 0x0818, 0x504: 0x0818, 0x505: 0x0818,
+ 0x506: 0x0818, 0x507: 0x0818, 0x508: 0x0818, 0x509: 0x0818, 0x50a: 0x0818, 0x50b: 0x0818,
+ 0x50c: 0x0818, 0x50d: 0x0818, 0x50e: 0x0040, 0x50f: 0x0b40, 0x510: 0x0c08, 0x511: 0x3308,
+ 0x512: 0x0a08, 0x513: 0x0a08, 0x514: 0x0a08, 0x515: 0x0c08, 0x516: 0x0c08, 0x517: 0x0c08,
+ 0x518: 0x0c08, 0x519: 0x0c08, 0x51a: 0x0a08, 0x51b: 0x0a08, 0x51c: 0x0a08, 0x51d: 0x0a08,
+ 0x51e: 0x0c08, 0x51f: 0x0a08, 0x520: 0x0a08, 0x521: 0x0a08, 0x522: 0x0a08, 0x523: 0x0a08,
+ 0x524: 0x0a08, 0x525: 0x0a08, 0x526: 0x0a08, 0x527: 0x0a08, 0x528: 0x0c08, 0x529: 0x0a08,
+ 0x52a: 0x0c08, 0x52b: 0x0a08, 0x52c: 0x0c08, 0x52d: 0x0a08, 0x52e: 0x0a08, 0x52f: 0x0c08,
+ 0x530: 0x3308, 0x531: 0x3308, 0x532: 0x3308, 0x533: 0x3308, 0x534: 0x3308, 0x535: 0x3308,
+ 0x536: 0x3308, 0x537: 0x3308, 0x538: 0x3308, 0x539: 0x3308, 0x53a: 0x3308, 0x53b: 0x3308,
+ 0x53c: 0x3308, 0x53d: 0x3308, 0x53e: 0x3308, 0x53f: 0x3308,
// Block 0x15, offset 0x540
- 0x540: 0x0008, 0x541: 0x1308, 0x542: 0x1008, 0x543: 0x1008, 0x544: 0x0040, 0x545: 0x0008,
- 0x546: 0x0008, 0x547: 0x0008, 0x548: 0x0008, 0x549: 0x0008, 0x54a: 0x0008, 0x54b: 0x0008,
- 0x54c: 0x0008, 0x54d: 0x0040, 0x54e: 0x0040, 0x54f: 0x0008, 0x550: 0x0008, 0x551: 0x0040,
- 0x552: 0x0040, 0x553: 0x0008, 0x554: 0x0008, 0x555: 0x0008, 0x556: 0x0008, 0x557: 0x0008,
- 0x558: 0x0008, 0x559: 0x0008, 0x55a: 0x0008, 0x55b: 0x0008, 0x55c: 0x0008, 0x55d: 0x0008,
- 0x55e: 0x0008, 0x55f: 0x0008, 0x560: 0x0008, 0x561: 0x0008, 0x562: 0x0008, 0x563: 0x0008,
- 0x564: 0x0008, 0x565: 0x0008, 0x566: 0x0008, 0x567: 0x0008, 0x568: 0x0008, 0x569: 0x0040,
- 0x56a: 0x0008, 0x56b: 0x0008, 0x56c: 0x0008, 0x56d: 0x0008, 0x56e: 0x0008, 0x56f: 0x0008,
- 0x570: 0x0008, 0x571: 0x0040, 0x572: 0x0008, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040,
- 0x576: 0x0008, 0x577: 0x0008, 0x578: 0x0008, 0x579: 0x0008, 0x57a: 0x0040, 0x57b: 0x0040,
- 0x57c: 0x1308, 0x57d: 0x0008, 0x57e: 0x1008, 0x57f: 0x1008,
+ 0x540: 0x0c08, 0x541: 0x0a08, 0x542: 0x0a08, 0x543: 0x0a08, 0x544: 0x0a08, 0x545: 0x0a08,
+ 0x546: 0x0c08, 0x547: 0x0c08, 0x548: 0x0a08, 0x549: 0x0c08, 0x54a: 0x0a08, 0x54b: 0x0a08,
+ 0x54c: 0x0a08, 0x54d: 0x0a08, 0x54e: 0x0a08, 0x54f: 0x0a08, 0x550: 0x0a08, 0x551: 0x0a08,
+ 0x552: 0x0a08, 0x553: 0x0a08, 0x554: 0x0c08, 0x555: 0x0a08, 0x556: 0x0808, 0x557: 0x0808,
+ 0x558: 0x0808, 0x559: 0x3308, 0x55a: 0x3308, 0x55b: 0x3308, 0x55c: 0x0040, 0x55d: 0x0040,
+ 0x55e: 0x0818, 0x55f: 0x0040, 0x560: 0x0a08, 0x561: 0x0808, 0x562: 0x0a08, 0x563: 0x0a08,
+ 0x564: 0x0a08, 0x565: 0x0a08, 0x566: 0x0808, 0x567: 0x0c08, 0x568: 0x0a08, 0x569: 0x0c08,
+ 0x56a: 0x0c08, 0x56b: 0x0040, 0x56c: 0x0040, 0x56d: 0x0040, 0x56e: 0x0040, 0x56f: 0x0040,
+ 0x570: 0x0040, 0x571: 0x0040, 0x572: 0x0040, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040,
+ 0x576: 0x0040, 0x577: 0x0040, 0x578: 0x0040, 0x579: 0x0040, 0x57a: 0x0040, 0x57b: 0x0040,
+ 0x57c: 0x0040, 0x57d: 0x0040, 0x57e: 0x0040, 0x57f: 0x0040,
// Block 0x16, offset 0x580
- 0x580: 0x1008, 0x581: 0x1308, 0x582: 0x1308, 0x583: 0x1308, 0x584: 0x1308, 0x585: 0x0040,
- 0x586: 0x0040, 0x587: 0x1008, 0x588: 0x1008, 0x589: 0x0040, 0x58a: 0x0040, 0x58b: 0x1008,
- 0x58c: 0x1008, 0x58d: 0x1b08, 0x58e: 0x0008, 0x58f: 0x0040, 0x590: 0x0040, 0x591: 0x0040,
- 0x592: 0x0040, 0x593: 0x0040, 0x594: 0x0040, 0x595: 0x0040, 0x596: 0x0040, 0x597: 0x1008,
- 0x598: 0x0040, 0x599: 0x0040, 0x59a: 0x0040, 0x59b: 0x0040, 0x59c: 0x0689, 0x59d: 0x06c1,
- 0x59e: 0x0040, 0x59f: 0x06f9, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x1308, 0x5a3: 0x1308,
- 0x5a4: 0x0040, 0x5a5: 0x0040, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008,
+ 0x580: 0x3008, 0x581: 0x3308, 0x582: 0x3308, 0x583: 0x3308, 0x584: 0x3308, 0x585: 0x3308,
+ 0x586: 0x3308, 0x587: 0x3308, 0x588: 0x3308, 0x589: 0x3008, 0x58a: 0x3008, 0x58b: 0x3008,
+ 0x58c: 0x3008, 0x58d: 0x3b08, 0x58e: 0x3008, 0x58f: 0x3008, 0x590: 0x0008, 0x591: 0x3308,
+ 0x592: 0x3308, 0x593: 0x3308, 0x594: 0x3308, 0x595: 0x3308, 0x596: 0x3308, 0x597: 0x3308,
+ 0x598: 0x04c9, 0x599: 0x0501, 0x59a: 0x0539, 0x59b: 0x0571, 0x59c: 0x05a9, 0x59d: 0x05e1,
+ 0x59e: 0x0619, 0x59f: 0x0651, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x3308, 0x5a3: 0x3308,
+ 0x5a4: 0x0018, 0x5a5: 0x0018, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008,
0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008,
- 0x5b0: 0x0008, 0x5b1: 0x0008, 0x5b2: 0x0018, 0x5b3: 0x0018, 0x5b4: 0x0018, 0x5b5: 0x0018,
- 0x5b6: 0x0018, 0x5b7: 0x0018, 0x5b8: 0x0018, 0x5b9: 0x0018, 0x5ba: 0x0018, 0x5bb: 0x0018,
- 0x5bc: 0x0040, 0x5bd: 0x0040, 0x5be: 0x0040, 0x5bf: 0x0040,
+ 0x5b0: 0x0018, 0x5b1: 0x0008, 0x5b2: 0x0008, 0x5b3: 0x0008, 0x5b4: 0x0008, 0x5b5: 0x0008,
+ 0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0008, 0x5bb: 0x0008,
+ 0x5bc: 0x0008, 0x5bd: 0x0008, 0x5be: 0x0008, 0x5bf: 0x0008,
// Block 0x17, offset 0x5c0
- 0x5c0: 0x0040, 0x5c1: 0x1308, 0x5c2: 0x1308, 0x5c3: 0x1008, 0x5c4: 0x0040, 0x5c5: 0x0008,
- 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0040,
- 0x5cc: 0x0040, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040,
+ 0x5c0: 0x0008, 0x5c1: 0x3308, 0x5c2: 0x3008, 0x5c3: 0x3008, 0x5c4: 0x0040, 0x5c5: 0x0008,
+ 0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0008,
+ 0x5cc: 0x0008, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040,
0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008,
0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008,
0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008,
0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040,
0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008,
- 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0731, 0x5f4: 0x0040, 0x5f5: 0x0008,
- 0x5f6: 0x0769, 0x5f7: 0x0040, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040,
- 0x5fc: 0x1308, 0x5fd: 0x0040, 0x5fe: 0x1008, 0x5ff: 0x1008,
+ 0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0040, 0x5f4: 0x0040, 0x5f5: 0x0040,
+ 0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040,
+ 0x5fc: 0x3308, 0x5fd: 0x0008, 0x5fe: 0x3008, 0x5ff: 0x3008,
// Block 0x18, offset 0x600
- 0x600: 0x1008, 0x601: 0x1308, 0x602: 0x1308, 0x603: 0x0040, 0x604: 0x0040, 0x605: 0x0040,
- 0x606: 0x0040, 0x607: 0x1308, 0x608: 0x1308, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x1308,
- 0x60c: 0x1308, 0x60d: 0x1b08, 0x60e: 0x0040, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x1308,
- 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x0040,
- 0x618: 0x0040, 0x619: 0x07a1, 0x61a: 0x07d9, 0x61b: 0x0811, 0x61c: 0x0008, 0x61d: 0x0040,
- 0x61e: 0x0849, 0x61f: 0x0040, 0x620: 0x0040, 0x621: 0x0040, 0x622: 0x0040, 0x623: 0x0040,
+ 0x600: 0x3008, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3308, 0x604: 0x3308, 0x605: 0x0040,
+ 0x606: 0x0040, 0x607: 0x3008, 0x608: 0x3008, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x3008,
+ 0x60c: 0x3008, 0x60d: 0x3b08, 0x60e: 0x0008, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x0040,
+ 0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x3008,
+ 0x618: 0x0040, 0x619: 0x0040, 0x61a: 0x0040, 0x61b: 0x0040, 0x61c: 0x0689, 0x61d: 0x06c1,
+ 0x61e: 0x0040, 0x61f: 0x06f9, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x3308, 0x623: 0x3308,
0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008,
0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008,
- 0x630: 0x1308, 0x631: 0x1308, 0x632: 0x0008, 0x633: 0x0008, 0x634: 0x0008, 0x635: 0x1308,
- 0x636: 0x0040, 0x637: 0x0040, 0x638: 0x0040, 0x639: 0x0040, 0x63a: 0x0040, 0x63b: 0x0040,
- 0x63c: 0x0040, 0x63d: 0x0040, 0x63e: 0x0040, 0x63f: 0x0040,
+ 0x630: 0x0008, 0x631: 0x0008, 0x632: 0x0018, 0x633: 0x0018, 0x634: 0x0018, 0x635: 0x0018,
+ 0x636: 0x0018, 0x637: 0x0018, 0x638: 0x0018, 0x639: 0x0018, 0x63a: 0x0018, 0x63b: 0x0018,
+ 0x63c: 0x0008, 0x63d: 0x0018, 0x63e: 0x0040, 0x63f: 0x0040,
// Block 0x19, offset 0x640
- 0x640: 0x0040, 0x641: 0x1308, 0x642: 0x1308, 0x643: 0x1008, 0x644: 0x0040, 0x645: 0x0008,
- 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0008,
- 0x64c: 0x0008, 0x64d: 0x0008, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0008,
+ 0x640: 0x0040, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3008, 0x644: 0x0040, 0x645: 0x0008,
+ 0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0040,
+ 0x64c: 0x0040, 0x64d: 0x0040, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0040,
0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008,
0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008,
0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008,
0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040,
0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008,
- 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0008, 0x674: 0x0040, 0x675: 0x0008,
- 0x676: 0x0008, 0x677: 0x0008, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040,
- 0x67c: 0x1308, 0x67d: 0x0008, 0x67e: 0x1008, 0x67f: 0x1008,
+ 0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0731, 0x674: 0x0040, 0x675: 0x0008,
+ 0x676: 0x0769, 0x677: 0x0040, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040,
+ 0x67c: 0x3308, 0x67d: 0x0040, 0x67e: 0x3008, 0x67f: 0x3008,
// Block 0x1a, offset 0x680
- 0x680: 0x1008, 0x681: 0x1308, 0x682: 0x1308, 0x683: 0x1308, 0x684: 0x1308, 0x685: 0x1308,
- 0x686: 0x0040, 0x687: 0x1308, 0x688: 0x1308, 0x689: 0x1008, 0x68a: 0x0040, 0x68b: 0x1008,
- 0x68c: 0x1008, 0x68d: 0x1b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0008, 0x691: 0x0040,
+ 0x680: 0x3008, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x0040, 0x684: 0x0040, 0x685: 0x0040,
+ 0x686: 0x0040, 0x687: 0x3308, 0x688: 0x3308, 0x689: 0x0040, 0x68a: 0x0040, 0x68b: 0x3308,
+ 0x68c: 0x3308, 0x68d: 0x3b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0040, 0x691: 0x3308,
0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040,
- 0x698: 0x0040, 0x699: 0x0040, 0x69a: 0x0040, 0x69b: 0x0040, 0x69c: 0x0040, 0x69d: 0x0040,
- 0x69e: 0x0040, 0x69f: 0x0040, 0x6a0: 0x0008, 0x6a1: 0x0008, 0x6a2: 0x1308, 0x6a3: 0x1308,
+ 0x698: 0x0040, 0x699: 0x07a1, 0x69a: 0x07d9, 0x69b: 0x0811, 0x69c: 0x0008, 0x69d: 0x0040,
+ 0x69e: 0x0849, 0x69f: 0x0040, 0x6a0: 0x0040, 0x6a1: 0x0040, 0x6a2: 0x0040, 0x6a3: 0x0040,
0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008,
0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008,
- 0x6b0: 0x0018, 0x6b1: 0x0018, 0x6b2: 0x0040, 0x6b3: 0x0040, 0x6b4: 0x0040, 0x6b5: 0x0040,
- 0x6b6: 0x0040, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040,
+ 0x6b0: 0x3308, 0x6b1: 0x3308, 0x6b2: 0x0008, 0x6b3: 0x0008, 0x6b4: 0x0008, 0x6b5: 0x3308,
+ 0x6b6: 0x0040, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0040, 0x6ba: 0x0040, 0x6bb: 0x0040,
0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040,
// Block 0x1b, offset 0x6c0
- 0x6c0: 0x0040, 0x6c1: 0x1308, 0x6c2: 0x1008, 0x6c3: 0x1008, 0x6c4: 0x0040, 0x6c5: 0x0008,
+ 0x6c0: 0x0040, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3008, 0x6c4: 0x0040, 0x6c5: 0x0008,
0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008,
- 0x6cc: 0x0008, 0x6cd: 0x0040, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0040,
+ 0x6cc: 0x0008, 0x6cd: 0x0008, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0008,
0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008,
0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008,
0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008,
@@ -891,1457 +889,1490 @@ var idnaValues = [8000]uint16{
0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008,
0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008,
0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040,
- 0x6fc: 0x1308, 0x6fd: 0x0008, 0x6fe: 0x1008, 0x6ff: 0x1308,
+ 0x6fc: 0x3308, 0x6fd: 0x0008, 0x6fe: 0x3008, 0x6ff: 0x3008,
// Block 0x1c, offset 0x700
- 0x700: 0x1008, 0x701: 0x1308, 0x702: 0x1308, 0x703: 0x1308, 0x704: 0x1308, 0x705: 0x0040,
- 0x706: 0x0040, 0x707: 0x1008, 0x708: 0x1008, 0x709: 0x0040, 0x70a: 0x0040, 0x70b: 0x1008,
- 0x70c: 0x1008, 0x70d: 0x1b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0040, 0x711: 0x0040,
- 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x1308, 0x717: 0x1008,
- 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0881, 0x71d: 0x08b9,
- 0x71e: 0x0040, 0x71f: 0x0008, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x1308, 0x723: 0x1308,
+ 0x700: 0x3008, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3308, 0x704: 0x3308, 0x705: 0x3308,
+ 0x706: 0x0040, 0x707: 0x3308, 0x708: 0x3308, 0x709: 0x3008, 0x70a: 0x0040, 0x70b: 0x3008,
+ 0x70c: 0x3008, 0x70d: 0x3b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0008, 0x711: 0x0040,
+ 0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x0040, 0x717: 0x0040,
+ 0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0040, 0x71d: 0x0040,
+ 0x71e: 0x0040, 0x71f: 0x0040, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x3308, 0x723: 0x3308,
0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008,
0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008,
- 0x730: 0x0018, 0x731: 0x0008, 0x732: 0x0018, 0x733: 0x0018, 0x734: 0x0018, 0x735: 0x0018,
- 0x736: 0x0018, 0x737: 0x0018, 0x738: 0x0040, 0x739: 0x0040, 0x73a: 0x0040, 0x73b: 0x0040,
- 0x73c: 0x0040, 0x73d: 0x0040, 0x73e: 0x0040, 0x73f: 0x0040,
+ 0x730: 0x0018, 0x731: 0x0018, 0x732: 0x0040, 0x733: 0x0040, 0x734: 0x0040, 0x735: 0x0040,
+ 0x736: 0x0040, 0x737: 0x0040, 0x738: 0x0040, 0x739: 0x0008, 0x73a: 0x3308, 0x73b: 0x3308,
+ 0x73c: 0x3308, 0x73d: 0x3308, 0x73e: 0x3308, 0x73f: 0x3308,
// Block 0x1d, offset 0x740
- 0x740: 0x0040, 0x741: 0x0040, 0x742: 0x1308, 0x743: 0x0008, 0x744: 0x0040, 0x745: 0x0008,
- 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0040,
- 0x74c: 0x0040, 0x74d: 0x0040, 0x74e: 0x0008, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040,
- 0x752: 0x0008, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0040, 0x757: 0x0040,
- 0x758: 0x0040, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0040, 0x75c: 0x0008, 0x75d: 0x0040,
- 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0040, 0x761: 0x0040, 0x762: 0x0040, 0x763: 0x0008,
- 0x764: 0x0008, 0x765: 0x0040, 0x766: 0x0040, 0x767: 0x0040, 0x768: 0x0008, 0x769: 0x0008,
- 0x76a: 0x0008, 0x76b: 0x0040, 0x76c: 0x0040, 0x76d: 0x0040, 0x76e: 0x0008, 0x76f: 0x0008,
- 0x770: 0x0008, 0x771: 0x0008, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0008, 0x775: 0x0008,
+ 0x740: 0x0040, 0x741: 0x3308, 0x742: 0x3008, 0x743: 0x3008, 0x744: 0x0040, 0x745: 0x0008,
+ 0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0008,
+ 0x74c: 0x0008, 0x74d: 0x0040, 0x74e: 0x0040, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040,
+ 0x752: 0x0040, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0008, 0x757: 0x0008,
+ 0x758: 0x0008, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0008, 0x75c: 0x0008, 0x75d: 0x0008,
+ 0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x0008, 0x763: 0x0008,
+ 0x764: 0x0008, 0x765: 0x0008, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0040,
+ 0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008,
+ 0x770: 0x0008, 0x771: 0x0040, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0040, 0x775: 0x0008,
0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040,
- 0x77c: 0x0040, 0x77d: 0x0040, 0x77e: 0x1008, 0x77f: 0x1008,
+ 0x77c: 0x3308, 0x77d: 0x0008, 0x77e: 0x3008, 0x77f: 0x3308,
// Block 0x1e, offset 0x780
- 0x780: 0x1308, 0x781: 0x1008, 0x782: 0x1008, 0x783: 0x1008, 0x784: 0x1008, 0x785: 0x0040,
- 0x786: 0x1308, 0x787: 0x1308, 0x788: 0x1308, 0x789: 0x0040, 0x78a: 0x1308, 0x78b: 0x1308,
- 0x78c: 0x1308, 0x78d: 0x1b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040,
- 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x1308, 0x796: 0x1308, 0x797: 0x0040,
- 0x798: 0x0008, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0040, 0x79c: 0x0040, 0x79d: 0x0040,
- 0x79e: 0x0040, 0x79f: 0x0040, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x1308, 0x7a3: 0x1308,
+ 0x780: 0x3008, 0x781: 0x3308, 0x782: 0x3308, 0x783: 0x3308, 0x784: 0x3308, 0x785: 0x0040,
+ 0x786: 0x0040, 0x787: 0x3008, 0x788: 0x3008, 0x789: 0x0040, 0x78a: 0x0040, 0x78b: 0x3008,
+ 0x78c: 0x3008, 0x78d: 0x3b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040,
+ 0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x0040, 0x796: 0x3308, 0x797: 0x3008,
+ 0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x0881, 0x79d: 0x08b9,
+ 0x79e: 0x0040, 0x79f: 0x0008, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x3308, 0x7a3: 0x3308,
0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008,
0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008,
- 0x7b0: 0x0040, 0x7b1: 0x0040, 0x7b2: 0x0040, 0x7b3: 0x0040, 0x7b4: 0x0040, 0x7b5: 0x0040,
- 0x7b6: 0x0040, 0x7b7: 0x0040, 0x7b8: 0x0018, 0x7b9: 0x0018, 0x7ba: 0x0018, 0x7bb: 0x0018,
- 0x7bc: 0x0018, 0x7bd: 0x0018, 0x7be: 0x0018, 0x7bf: 0x0018,
+ 0x7b0: 0x0018, 0x7b1: 0x0008, 0x7b2: 0x0018, 0x7b3: 0x0018, 0x7b4: 0x0018, 0x7b5: 0x0018,
+ 0x7b6: 0x0018, 0x7b7: 0x0018, 0x7b8: 0x0040, 0x7b9: 0x0040, 0x7ba: 0x0040, 0x7bb: 0x0040,
+ 0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x0040, 0x7bf: 0x0040,
// Block 0x1f, offset 0x7c0
- 0x7c0: 0x0008, 0x7c1: 0x1308, 0x7c2: 0x1008, 0x7c3: 0x1008, 0x7c4: 0x0040, 0x7c5: 0x0008,
- 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0008,
- 0x7cc: 0x0008, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040,
- 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0008, 0x7d7: 0x0008,
- 0x7d8: 0x0008, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0008, 0x7dc: 0x0008, 0x7dd: 0x0008,
- 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0008, 0x7e1: 0x0008, 0x7e2: 0x0008, 0x7e3: 0x0008,
- 0x7e4: 0x0008, 0x7e5: 0x0008, 0x7e6: 0x0008, 0x7e7: 0x0008, 0x7e8: 0x0008, 0x7e9: 0x0040,
- 0x7ea: 0x0008, 0x7eb: 0x0008, 0x7ec: 0x0008, 0x7ed: 0x0008, 0x7ee: 0x0008, 0x7ef: 0x0008,
- 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0040, 0x7f5: 0x0008,
+ 0x7c0: 0x0040, 0x7c1: 0x0040, 0x7c2: 0x3308, 0x7c3: 0x0008, 0x7c4: 0x0040, 0x7c5: 0x0008,
+ 0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0040,
+ 0x7cc: 0x0040, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040,
+ 0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0040, 0x7d7: 0x0040,
+ 0x7d8: 0x0040, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0008, 0x7dd: 0x0040,
+ 0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0040, 0x7e1: 0x0040, 0x7e2: 0x0040, 0x7e3: 0x0008,
+ 0x7e4: 0x0008, 0x7e5: 0x0040, 0x7e6: 0x0040, 0x7e7: 0x0040, 0x7e8: 0x0008, 0x7e9: 0x0008,
+ 0x7ea: 0x0008, 0x7eb: 0x0040, 0x7ec: 0x0040, 0x7ed: 0x0040, 0x7ee: 0x0008, 0x7ef: 0x0008,
+ 0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0008, 0x7f5: 0x0008,
0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040,
- 0x7fc: 0x1308, 0x7fd: 0x0008, 0x7fe: 0x1008, 0x7ff: 0x1308,
+ 0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x3008, 0x7ff: 0x3008,
// Block 0x20, offset 0x800
- 0x800: 0x1008, 0x801: 0x1008, 0x802: 0x1008, 0x803: 0x1008, 0x804: 0x1008, 0x805: 0x0040,
- 0x806: 0x1308, 0x807: 0x1008, 0x808: 0x1008, 0x809: 0x0040, 0x80a: 0x1008, 0x80b: 0x1008,
- 0x80c: 0x1308, 0x80d: 0x1b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040,
- 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x1008, 0x816: 0x1008, 0x817: 0x0040,
- 0x818: 0x0040, 0x819: 0x0040, 0x81a: 0x0040, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040,
- 0x81e: 0x0008, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x1308, 0x823: 0x1308,
+ 0x800: 0x3308, 0x801: 0x3008, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x3008, 0x805: 0x0040,
+ 0x806: 0x3308, 0x807: 0x3308, 0x808: 0x3308, 0x809: 0x0040, 0x80a: 0x3308, 0x80b: 0x3308,
+ 0x80c: 0x3308, 0x80d: 0x3b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040,
+ 0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x3308, 0x816: 0x3308, 0x817: 0x0040,
+ 0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040,
+ 0x81e: 0x0040, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x3308, 0x823: 0x3308,
0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008,
0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008,
- 0x830: 0x0040, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040,
- 0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0040, 0x839: 0x0040, 0x83a: 0x0040, 0x83b: 0x0040,
- 0x83c: 0x0040, 0x83d: 0x0040, 0x83e: 0x0040, 0x83f: 0x0040,
+ 0x830: 0x0040, 0x831: 0x0040, 0x832: 0x0040, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040,
+ 0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0018, 0x839: 0x0018, 0x83a: 0x0018, 0x83b: 0x0018,
+ 0x83c: 0x0018, 0x83d: 0x0018, 0x83e: 0x0018, 0x83f: 0x0018,
// Block 0x21, offset 0x840
- 0x840: 0x1008, 0x841: 0x1308, 0x842: 0x1308, 0x843: 0x1308, 0x844: 0x1308, 0x845: 0x0040,
- 0x846: 0x1008, 0x847: 0x1008, 0x848: 0x1008, 0x849: 0x0040, 0x84a: 0x1008, 0x84b: 0x1008,
- 0x84c: 0x1008, 0x84d: 0x1b08, 0x84e: 0x0008, 0x84f: 0x0018, 0x850: 0x0040, 0x851: 0x0040,
- 0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x1008,
- 0x858: 0x0018, 0x859: 0x0018, 0x85a: 0x0018, 0x85b: 0x0018, 0x85c: 0x0018, 0x85d: 0x0018,
- 0x85e: 0x0018, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x1308, 0x863: 0x1308,
- 0x864: 0x0040, 0x865: 0x0040, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0008,
+ 0x840: 0x0008, 0x841: 0x3308, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x0040, 0x845: 0x0008,
+ 0x846: 0x0008, 0x847: 0x0008, 0x848: 0x0008, 0x849: 0x0008, 0x84a: 0x0008, 0x84b: 0x0008,
+ 0x84c: 0x0008, 0x84d: 0x0040, 0x84e: 0x0008, 0x84f: 0x0008, 0x850: 0x0008, 0x851: 0x0040,
+ 0x852: 0x0008, 0x853: 0x0008, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x0008,
+ 0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0008, 0x85c: 0x0008, 0x85d: 0x0008,
+ 0x85e: 0x0008, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x0008, 0x863: 0x0008,
+ 0x864: 0x0008, 0x865: 0x0008, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0040,
0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008,
- 0x870: 0x0018, 0x871: 0x0018, 0x872: 0x0018, 0x873: 0x0018, 0x874: 0x0018, 0x875: 0x0018,
- 0x876: 0x0018, 0x877: 0x0018, 0x878: 0x0018, 0x879: 0x0018, 0x87a: 0x0008, 0x87b: 0x0008,
- 0x87c: 0x0008, 0x87d: 0x0008, 0x87e: 0x0008, 0x87f: 0x0008,
+ 0x870: 0x0008, 0x871: 0x0008, 0x872: 0x0008, 0x873: 0x0008, 0x874: 0x0040, 0x875: 0x0008,
+ 0x876: 0x0008, 0x877: 0x0008, 0x878: 0x0008, 0x879: 0x0008, 0x87a: 0x0040, 0x87b: 0x0040,
+ 0x87c: 0x3308, 0x87d: 0x0008, 0x87e: 0x3008, 0x87f: 0x3308,
// Block 0x22, offset 0x880
- 0x880: 0x0040, 0x881: 0x0008, 0x882: 0x0008, 0x883: 0x0040, 0x884: 0x0008, 0x885: 0x0040,
- 0x886: 0x0040, 0x887: 0x0008, 0x888: 0x0008, 0x889: 0x0040, 0x88a: 0x0008, 0x88b: 0x0040,
- 0x88c: 0x0040, 0x88d: 0x0008, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040,
- 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x0008,
- 0x898: 0x0040, 0x899: 0x0008, 0x89a: 0x0008, 0x89b: 0x0008, 0x89c: 0x0008, 0x89d: 0x0008,
- 0x89e: 0x0008, 0x89f: 0x0008, 0x8a0: 0x0040, 0x8a1: 0x0008, 0x8a2: 0x0008, 0x8a3: 0x0008,
- 0x8a4: 0x0040, 0x8a5: 0x0008, 0x8a6: 0x0040, 0x8a7: 0x0008, 0x8a8: 0x0040, 0x8a9: 0x0040,
- 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0040, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008,
- 0x8b0: 0x0008, 0x8b1: 0x1308, 0x8b2: 0x0008, 0x8b3: 0x0929, 0x8b4: 0x1308, 0x8b5: 0x1308,
- 0x8b6: 0x1308, 0x8b7: 0x1308, 0x8b8: 0x1308, 0x8b9: 0x1308, 0x8ba: 0x0040, 0x8bb: 0x1308,
- 0x8bc: 0x1308, 0x8bd: 0x0008, 0x8be: 0x0040, 0x8bf: 0x0040,
+ 0x880: 0x3008, 0x881: 0x3008, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x3008, 0x885: 0x0040,
+ 0x886: 0x3308, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008,
+ 0x88c: 0x3308, 0x88d: 0x3b08, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040,
+ 0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0040, 0x895: 0x3008, 0x896: 0x3008, 0x897: 0x0040,
+ 0x898: 0x0040, 0x899: 0x0040, 0x89a: 0x0040, 0x89b: 0x0040, 0x89c: 0x0040, 0x89d: 0x0040,
+ 0x89e: 0x0008, 0x89f: 0x0040, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308,
+ 0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008,
+ 0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008,
+ 0x8b0: 0x0040, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0040, 0x8b4: 0x0040, 0x8b5: 0x0040,
+ 0x8b6: 0x0040, 0x8b7: 0x0040, 0x8b8: 0x0040, 0x8b9: 0x0040, 0x8ba: 0x0040, 0x8bb: 0x0040,
+ 0x8bc: 0x0040, 0x8bd: 0x0040, 0x8be: 0x0040, 0x8bf: 0x0040,
// Block 0x23, offset 0x8c0
- 0x8c0: 0x0008, 0x8c1: 0x0008, 0x8c2: 0x0008, 0x8c3: 0x09d1, 0x8c4: 0x0008, 0x8c5: 0x0008,
- 0x8c6: 0x0008, 0x8c7: 0x0008, 0x8c8: 0x0040, 0x8c9: 0x0008, 0x8ca: 0x0008, 0x8cb: 0x0008,
- 0x8cc: 0x0008, 0x8cd: 0x0a09, 0x8ce: 0x0008, 0x8cf: 0x0008, 0x8d0: 0x0008, 0x8d1: 0x0008,
- 0x8d2: 0x0a41, 0x8d3: 0x0008, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x0a79,
- 0x8d8: 0x0008, 0x8d9: 0x0008, 0x8da: 0x0008, 0x8db: 0x0008, 0x8dc: 0x0ab1, 0x8dd: 0x0008,
- 0x8de: 0x0008, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x0008, 0x8e3: 0x0008,
- 0x8e4: 0x0008, 0x8e5: 0x0008, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0ae9,
- 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0040, 0x8ee: 0x0040, 0x8ef: 0x0040,
- 0x8f0: 0x0040, 0x8f1: 0x1308, 0x8f2: 0x1308, 0x8f3: 0x0b21, 0x8f4: 0x1308, 0x8f5: 0x0b59,
- 0x8f6: 0x0b91, 0x8f7: 0x0bc9, 0x8f8: 0x0c19, 0x8f9: 0x0c51, 0x8fa: 0x1308, 0x8fb: 0x1308,
- 0x8fc: 0x1308, 0x8fd: 0x1308, 0x8fe: 0x1308, 0x8ff: 0x1008,
+ 0x8c0: 0x3008, 0x8c1: 0x3308, 0x8c2: 0x3308, 0x8c3: 0x3308, 0x8c4: 0x3308, 0x8c5: 0x0040,
+ 0x8c6: 0x3008, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008,
+ 0x8cc: 0x3008, 0x8cd: 0x3b08, 0x8ce: 0x0008, 0x8cf: 0x0018, 0x8d0: 0x0040, 0x8d1: 0x0040,
+ 0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x3008,
+ 0x8d8: 0x0018, 0x8d9: 0x0018, 0x8da: 0x0018, 0x8db: 0x0018, 0x8dc: 0x0018, 0x8dd: 0x0018,
+ 0x8de: 0x0018, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x3308, 0x8e3: 0x3308,
+ 0x8e4: 0x0040, 0x8e5: 0x0040, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0008,
+ 0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0008, 0x8ee: 0x0008, 0x8ef: 0x0008,
+ 0x8f0: 0x0018, 0x8f1: 0x0018, 0x8f2: 0x0018, 0x8f3: 0x0018, 0x8f4: 0x0018, 0x8f5: 0x0018,
+ 0x8f6: 0x0018, 0x8f7: 0x0018, 0x8f8: 0x0018, 0x8f9: 0x0018, 0x8fa: 0x0008, 0x8fb: 0x0008,
+ 0x8fc: 0x0008, 0x8fd: 0x0008, 0x8fe: 0x0008, 0x8ff: 0x0008,
// Block 0x24, offset 0x900
- 0x900: 0x1308, 0x901: 0x0ca1, 0x902: 0x1308, 0x903: 0x1308, 0x904: 0x1b08, 0x905: 0x0018,
- 0x906: 0x1308, 0x907: 0x1308, 0x908: 0x0008, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0008,
- 0x90c: 0x0008, 0x90d: 0x1308, 0x90e: 0x1308, 0x90f: 0x1308, 0x910: 0x1308, 0x911: 0x1308,
- 0x912: 0x1308, 0x913: 0x0cd9, 0x914: 0x1308, 0x915: 0x1308, 0x916: 0x1308, 0x917: 0x1308,
- 0x918: 0x0040, 0x919: 0x1308, 0x91a: 0x1308, 0x91b: 0x1308, 0x91c: 0x1308, 0x91d: 0x0d11,
- 0x91e: 0x1308, 0x91f: 0x1308, 0x920: 0x1308, 0x921: 0x1308, 0x922: 0x0d49, 0x923: 0x1308,
- 0x924: 0x1308, 0x925: 0x1308, 0x926: 0x1308, 0x927: 0x0d81, 0x928: 0x1308, 0x929: 0x1308,
- 0x92a: 0x1308, 0x92b: 0x1308, 0x92c: 0x0db9, 0x92d: 0x1308, 0x92e: 0x1308, 0x92f: 0x1308,
- 0x930: 0x1308, 0x931: 0x1308, 0x932: 0x1308, 0x933: 0x1308, 0x934: 0x1308, 0x935: 0x1308,
- 0x936: 0x1308, 0x937: 0x1308, 0x938: 0x1308, 0x939: 0x0df1, 0x93a: 0x1308, 0x93b: 0x1308,
- 0x93c: 0x1308, 0x93d: 0x0040, 0x93e: 0x0018, 0x93f: 0x0018,
+ 0x900: 0x0040, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x0040, 0x904: 0x0008, 0x905: 0x0040,
+ 0x906: 0x0040, 0x907: 0x0008, 0x908: 0x0008, 0x909: 0x0040, 0x90a: 0x0008, 0x90b: 0x0040,
+ 0x90c: 0x0040, 0x90d: 0x0008, 0x90e: 0x0040, 0x90f: 0x0040, 0x910: 0x0040, 0x911: 0x0040,
+ 0x912: 0x0040, 0x913: 0x0040, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0008,
+ 0x918: 0x0040, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0008, 0x91d: 0x0008,
+ 0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0040, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008,
+ 0x924: 0x0040, 0x925: 0x0008, 0x926: 0x0040, 0x927: 0x0008, 0x928: 0x0040, 0x929: 0x0040,
+ 0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0040, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008,
+ 0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x0929, 0x934: 0x3308, 0x935: 0x3308,
+ 0x936: 0x3308, 0x937: 0x3308, 0x938: 0x3308, 0x939: 0x3308, 0x93a: 0x0040, 0x93b: 0x3308,
+ 0x93c: 0x3308, 0x93d: 0x0008, 0x93e: 0x0040, 0x93f: 0x0040,
// Block 0x25, offset 0x940
- 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0008, 0x944: 0x0008, 0x945: 0x0008,
- 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008,
- 0x94c: 0x0008, 0x94d: 0x0008, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008,
- 0x952: 0x0008, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0008,
- 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0008, 0x95d: 0x0008,
+ 0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x09d1, 0x944: 0x0008, 0x945: 0x0008,
+ 0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0040, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008,
+ 0x94c: 0x0008, 0x94d: 0x0a09, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008,
+ 0x952: 0x0a41, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0a79,
+ 0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0ab1, 0x95d: 0x0008,
0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008,
- 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0008,
- 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0039, 0x96d: 0x0ed1, 0x96e: 0x0ee9, 0x96f: 0x0008,
- 0x970: 0x0ef9, 0x971: 0x0f09, 0x972: 0x0f19, 0x973: 0x0f31, 0x974: 0x0249, 0x975: 0x0f41,
- 0x976: 0x0259, 0x977: 0x0f51, 0x978: 0x0359, 0x979: 0x0f61, 0x97a: 0x0f71, 0x97b: 0x0008,
- 0x97c: 0x00d9, 0x97d: 0x0f81, 0x97e: 0x0f99, 0x97f: 0x0269,
+ 0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0ae9,
+ 0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0040, 0x96e: 0x0040, 0x96f: 0x0040,
+ 0x970: 0x0040, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x0b21, 0x974: 0x3308, 0x975: 0x0b59,
+ 0x976: 0x0b91, 0x977: 0x0bc9, 0x978: 0x0c19, 0x979: 0x0c51, 0x97a: 0x3308, 0x97b: 0x3308,
+ 0x97c: 0x3308, 0x97d: 0x3308, 0x97e: 0x3308, 0x97f: 0x3008,
// Block 0x26, offset 0x980
- 0x980: 0x0fa9, 0x981: 0x0fb9, 0x982: 0x0279, 0x983: 0x0039, 0x984: 0x0fc9, 0x985: 0x0fe1,
- 0x986: 0x059d, 0x987: 0x0ee9, 0x988: 0x0ef9, 0x989: 0x0f09, 0x98a: 0x0ff9, 0x98b: 0x1011,
- 0x98c: 0x1029, 0x98d: 0x0f31, 0x98e: 0x0008, 0x98f: 0x0f51, 0x990: 0x0f61, 0x991: 0x1041,
- 0x992: 0x00d9, 0x993: 0x1059, 0x994: 0x05b5, 0x995: 0x05b5, 0x996: 0x0f99, 0x997: 0x0fa9,
- 0x998: 0x0fb9, 0x999: 0x059d, 0x99a: 0x1071, 0x99b: 0x1089, 0x99c: 0x05cd, 0x99d: 0x1099,
- 0x99e: 0x10b1, 0x99f: 0x10c9, 0x9a0: 0x10e1, 0x9a1: 0x10f9, 0x9a2: 0x0f41, 0x9a3: 0x0269,
- 0x9a4: 0x0fb9, 0x9a5: 0x1089, 0x9a6: 0x1099, 0x9a7: 0x10b1, 0x9a8: 0x1111, 0x9a9: 0x10e1,
- 0x9aa: 0x10f9, 0x9ab: 0x0008, 0x9ac: 0x0008, 0x9ad: 0x0008, 0x9ae: 0x0008, 0x9af: 0x0008,
- 0x9b0: 0x0008, 0x9b1: 0x0008, 0x9b2: 0x0008, 0x9b3: 0x0008, 0x9b4: 0x0008, 0x9b5: 0x0008,
- 0x9b6: 0x0008, 0x9b7: 0x0008, 0x9b8: 0x1129, 0x9b9: 0x0008, 0x9ba: 0x0008, 0x9bb: 0x0008,
- 0x9bc: 0x0008, 0x9bd: 0x0008, 0x9be: 0x0008, 0x9bf: 0x0008,
+ 0x980: 0x3308, 0x981: 0x0ca1, 0x982: 0x3308, 0x983: 0x3308, 0x984: 0x3b08, 0x985: 0x0018,
+ 0x986: 0x3308, 0x987: 0x3308, 0x988: 0x0008, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008,
+ 0x98c: 0x0008, 0x98d: 0x3308, 0x98e: 0x3308, 0x98f: 0x3308, 0x990: 0x3308, 0x991: 0x3308,
+ 0x992: 0x3308, 0x993: 0x0cd9, 0x994: 0x3308, 0x995: 0x3308, 0x996: 0x3308, 0x997: 0x3308,
+ 0x998: 0x0040, 0x999: 0x3308, 0x99a: 0x3308, 0x99b: 0x3308, 0x99c: 0x3308, 0x99d: 0x0d11,
+ 0x99e: 0x3308, 0x99f: 0x3308, 0x9a0: 0x3308, 0x9a1: 0x3308, 0x9a2: 0x0d49, 0x9a3: 0x3308,
+ 0x9a4: 0x3308, 0x9a5: 0x3308, 0x9a6: 0x3308, 0x9a7: 0x0d81, 0x9a8: 0x3308, 0x9a9: 0x3308,
+ 0x9aa: 0x3308, 0x9ab: 0x3308, 0x9ac: 0x0db9, 0x9ad: 0x3308, 0x9ae: 0x3308, 0x9af: 0x3308,
+ 0x9b0: 0x3308, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x3308, 0x9b4: 0x3308, 0x9b5: 0x3308,
+ 0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x0df1, 0x9ba: 0x3308, 0x9bb: 0x3308,
+ 0x9bc: 0x3308, 0x9bd: 0x0040, 0x9be: 0x0018, 0x9bf: 0x0018,
// Block 0x27, offset 0x9c0
0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008,
0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008,
0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008,
0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008,
- 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x1141, 0x9dc: 0x1159, 0x9dd: 0x1169,
- 0x9de: 0x1181, 0x9df: 0x1029, 0x9e0: 0x1199, 0x9e1: 0x11a9, 0x9e2: 0x11c1, 0x9e3: 0x11d9,
- 0x9e4: 0x11f1, 0x9e5: 0x1209, 0x9e6: 0x1221, 0x9e7: 0x05e5, 0x9e8: 0x1239, 0x9e9: 0x1251,
- 0x9ea: 0xe17d, 0x9eb: 0x1269, 0x9ec: 0x1281, 0x9ed: 0x1299, 0x9ee: 0x12b1, 0x9ef: 0x12c9,
- 0x9f0: 0x12e1, 0x9f1: 0x12f9, 0x9f2: 0x1311, 0x9f3: 0x1329, 0x9f4: 0x1341, 0x9f5: 0x1359,
- 0x9f6: 0x1371, 0x9f7: 0x1389, 0x9f8: 0x05fd, 0x9f9: 0x13a1, 0x9fa: 0x13b9, 0x9fb: 0x13d1,
- 0x9fc: 0x13e1, 0x9fd: 0x13f9, 0x9fe: 0x1411, 0x9ff: 0x1429,
+ 0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x0008, 0x9dc: 0x0008, 0x9dd: 0x0008,
+ 0x9de: 0x0008, 0x9df: 0x0008, 0x9e0: 0x0008, 0x9e1: 0x0008, 0x9e2: 0x0008, 0x9e3: 0x0008,
+ 0x9e4: 0x0008, 0x9e5: 0x0008, 0x9e6: 0x0008, 0x9e7: 0x0008, 0x9e8: 0x0008, 0x9e9: 0x0008,
+ 0x9ea: 0x0008, 0x9eb: 0x0008, 0x9ec: 0x0039, 0x9ed: 0x0ed1, 0x9ee: 0x0ee9, 0x9ef: 0x0008,
+ 0x9f0: 0x0ef9, 0x9f1: 0x0f09, 0x9f2: 0x0f19, 0x9f3: 0x0f31, 0x9f4: 0x0249, 0x9f5: 0x0f41,
+ 0x9f6: 0x0259, 0x9f7: 0x0f51, 0x9f8: 0x0359, 0x9f9: 0x0f61, 0x9fa: 0x0f71, 0x9fb: 0x0008,
+ 0x9fc: 0x00d9, 0x9fd: 0x0f81, 0x9fe: 0x0f99, 0x9ff: 0x0269,
// Block 0x28, offset 0xa00
- 0xa00: 0xe00d, 0xa01: 0x0008, 0xa02: 0xe00d, 0xa03: 0x0008, 0xa04: 0xe00d, 0xa05: 0x0008,
- 0xa06: 0xe00d, 0xa07: 0x0008, 0xa08: 0xe00d, 0xa09: 0x0008, 0xa0a: 0xe00d, 0xa0b: 0x0008,
- 0xa0c: 0xe00d, 0xa0d: 0x0008, 0xa0e: 0xe00d, 0xa0f: 0x0008, 0xa10: 0xe00d, 0xa11: 0x0008,
- 0xa12: 0xe00d, 0xa13: 0x0008, 0xa14: 0xe00d, 0xa15: 0x0008, 0xa16: 0xe00d, 0xa17: 0x0008,
- 0xa18: 0xe00d, 0xa19: 0x0008, 0xa1a: 0xe00d, 0xa1b: 0x0008, 0xa1c: 0xe00d, 0xa1d: 0x0008,
- 0xa1e: 0xe00d, 0xa1f: 0x0008, 0xa20: 0xe00d, 0xa21: 0x0008, 0xa22: 0xe00d, 0xa23: 0x0008,
- 0xa24: 0xe00d, 0xa25: 0x0008, 0xa26: 0xe00d, 0xa27: 0x0008, 0xa28: 0xe00d, 0xa29: 0x0008,
- 0xa2a: 0xe00d, 0xa2b: 0x0008, 0xa2c: 0xe00d, 0xa2d: 0x0008, 0xa2e: 0xe00d, 0xa2f: 0x0008,
- 0xa30: 0xe00d, 0xa31: 0x0008, 0xa32: 0xe00d, 0xa33: 0x0008, 0xa34: 0xe00d, 0xa35: 0x0008,
- 0xa36: 0xe00d, 0xa37: 0x0008, 0xa38: 0xe00d, 0xa39: 0x0008, 0xa3a: 0xe00d, 0xa3b: 0x0008,
- 0xa3c: 0xe00d, 0xa3d: 0x0008, 0xa3e: 0xe00d, 0xa3f: 0x0008,
+ 0xa00: 0x0fa9, 0xa01: 0x0fb9, 0xa02: 0x0279, 0xa03: 0x0039, 0xa04: 0x0fc9, 0xa05: 0x0fe1,
+ 0xa06: 0x059d, 0xa07: 0x0ee9, 0xa08: 0x0ef9, 0xa09: 0x0f09, 0xa0a: 0x0ff9, 0xa0b: 0x1011,
+ 0xa0c: 0x1029, 0xa0d: 0x0f31, 0xa0e: 0x0008, 0xa0f: 0x0f51, 0xa10: 0x0f61, 0xa11: 0x1041,
+ 0xa12: 0x00d9, 0xa13: 0x1059, 0xa14: 0x05b5, 0xa15: 0x05b5, 0xa16: 0x0f99, 0xa17: 0x0fa9,
+ 0xa18: 0x0fb9, 0xa19: 0x059d, 0xa1a: 0x1071, 0xa1b: 0x1089, 0xa1c: 0x05cd, 0xa1d: 0x1099,
+ 0xa1e: 0x10b1, 0xa1f: 0x10c9, 0xa20: 0x10e1, 0xa21: 0x10f9, 0xa22: 0x0f41, 0xa23: 0x0269,
+ 0xa24: 0x0fb9, 0xa25: 0x1089, 0xa26: 0x1099, 0xa27: 0x10b1, 0xa28: 0x1111, 0xa29: 0x10e1,
+ 0xa2a: 0x10f9, 0xa2b: 0x0008, 0xa2c: 0x0008, 0xa2d: 0x0008, 0xa2e: 0x0008, 0xa2f: 0x0008,
+ 0xa30: 0x0008, 0xa31: 0x0008, 0xa32: 0x0008, 0xa33: 0x0008, 0xa34: 0x0008, 0xa35: 0x0008,
+ 0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x1129, 0xa39: 0x0008, 0xa3a: 0x0008, 0xa3b: 0x0008,
+ 0xa3c: 0x0008, 0xa3d: 0x0008, 0xa3e: 0x0008, 0xa3f: 0x0008,
// Block 0x29, offset 0xa40
- 0xa40: 0xe00d, 0xa41: 0x0008, 0xa42: 0xe00d, 0xa43: 0x0008, 0xa44: 0xe00d, 0xa45: 0x0008,
- 0xa46: 0xe00d, 0xa47: 0x0008, 0xa48: 0xe00d, 0xa49: 0x0008, 0xa4a: 0xe00d, 0xa4b: 0x0008,
- 0xa4c: 0xe00d, 0xa4d: 0x0008, 0xa4e: 0xe00d, 0xa4f: 0x0008, 0xa50: 0xe00d, 0xa51: 0x0008,
- 0xa52: 0xe00d, 0xa53: 0x0008, 0xa54: 0xe00d, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008,
- 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0615, 0xa5b: 0x0635, 0xa5c: 0x0008, 0xa5d: 0x0008,
- 0xa5e: 0x1441, 0xa5f: 0x0008, 0xa60: 0xe00d, 0xa61: 0x0008, 0xa62: 0xe00d, 0xa63: 0x0008,
- 0xa64: 0xe00d, 0xa65: 0x0008, 0xa66: 0xe00d, 0xa67: 0x0008, 0xa68: 0xe00d, 0xa69: 0x0008,
- 0xa6a: 0xe00d, 0xa6b: 0x0008, 0xa6c: 0xe00d, 0xa6d: 0x0008, 0xa6e: 0xe00d, 0xa6f: 0x0008,
- 0xa70: 0xe00d, 0xa71: 0x0008, 0xa72: 0xe00d, 0xa73: 0x0008, 0xa74: 0xe00d, 0xa75: 0x0008,
- 0xa76: 0xe00d, 0xa77: 0x0008, 0xa78: 0xe00d, 0xa79: 0x0008, 0xa7a: 0xe00d, 0xa7b: 0x0008,
- 0xa7c: 0xe00d, 0xa7d: 0x0008, 0xa7e: 0xe00d, 0xa7f: 0x0008,
+ 0xa40: 0x0008, 0xa41: 0x0008, 0xa42: 0x0008, 0xa43: 0x0008, 0xa44: 0x0008, 0xa45: 0x0008,
+ 0xa46: 0x0008, 0xa47: 0x0008, 0xa48: 0x0008, 0xa49: 0x0008, 0xa4a: 0x0008, 0xa4b: 0x0008,
+ 0xa4c: 0x0008, 0xa4d: 0x0008, 0xa4e: 0x0008, 0xa4f: 0x0008, 0xa50: 0x0008, 0xa51: 0x0008,
+ 0xa52: 0x0008, 0xa53: 0x0008, 0xa54: 0x0008, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008,
+ 0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0008, 0xa5b: 0x1141, 0xa5c: 0x1159, 0xa5d: 0x1169,
+ 0xa5e: 0x1181, 0xa5f: 0x1029, 0xa60: 0x1199, 0xa61: 0x11a9, 0xa62: 0x11c1, 0xa63: 0x11d9,
+ 0xa64: 0x11f1, 0xa65: 0x1209, 0xa66: 0x1221, 0xa67: 0x05e5, 0xa68: 0x1239, 0xa69: 0x1251,
+ 0xa6a: 0xe17d, 0xa6b: 0x1269, 0xa6c: 0x1281, 0xa6d: 0x1299, 0xa6e: 0x12b1, 0xa6f: 0x12c9,
+ 0xa70: 0x12e1, 0xa71: 0x12f9, 0xa72: 0x1311, 0xa73: 0x1329, 0xa74: 0x1341, 0xa75: 0x1359,
+ 0xa76: 0x1371, 0xa77: 0x1389, 0xa78: 0x05fd, 0xa79: 0x13a1, 0xa7a: 0x13b9, 0xa7b: 0x13d1,
+ 0xa7c: 0x13e1, 0xa7d: 0x13f9, 0xa7e: 0x1411, 0xa7f: 0x1429,
// Block 0x2a, offset 0xa80
- 0xa80: 0x0008, 0xa81: 0x0008, 0xa82: 0x0008, 0xa83: 0x0008, 0xa84: 0x0008, 0xa85: 0x0008,
- 0xa86: 0x0040, 0xa87: 0x0040, 0xa88: 0xe045, 0xa89: 0xe045, 0xa8a: 0xe045, 0xa8b: 0xe045,
- 0xa8c: 0xe045, 0xa8d: 0xe045, 0xa8e: 0x0040, 0xa8f: 0x0040, 0xa90: 0x0008, 0xa91: 0x0008,
- 0xa92: 0x0008, 0xa93: 0x0008, 0xa94: 0x0008, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008,
- 0xa98: 0x0040, 0xa99: 0xe045, 0xa9a: 0x0040, 0xa9b: 0xe045, 0xa9c: 0x0040, 0xa9d: 0xe045,
- 0xa9e: 0x0040, 0xa9f: 0xe045, 0xaa0: 0x0008, 0xaa1: 0x0008, 0xaa2: 0x0008, 0xaa3: 0x0008,
- 0xaa4: 0x0008, 0xaa5: 0x0008, 0xaa6: 0x0008, 0xaa7: 0x0008, 0xaa8: 0xe045, 0xaa9: 0xe045,
- 0xaaa: 0xe045, 0xaab: 0xe045, 0xaac: 0xe045, 0xaad: 0xe045, 0xaae: 0xe045, 0xaaf: 0xe045,
- 0xab0: 0x0008, 0xab1: 0x1459, 0xab2: 0x0008, 0xab3: 0x1471, 0xab4: 0x0008, 0xab5: 0x1489,
- 0xab6: 0x0008, 0xab7: 0x14a1, 0xab8: 0x0008, 0xab9: 0x14b9, 0xaba: 0x0008, 0xabb: 0x14d1,
- 0xabc: 0x0008, 0xabd: 0x14e9, 0xabe: 0x0040, 0xabf: 0x0040,
+ 0xa80: 0xe00d, 0xa81: 0x0008, 0xa82: 0xe00d, 0xa83: 0x0008, 0xa84: 0xe00d, 0xa85: 0x0008,
+ 0xa86: 0xe00d, 0xa87: 0x0008, 0xa88: 0xe00d, 0xa89: 0x0008, 0xa8a: 0xe00d, 0xa8b: 0x0008,
+ 0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008,
+ 0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0xe00d, 0xa97: 0x0008,
+ 0xa98: 0xe00d, 0xa99: 0x0008, 0xa9a: 0xe00d, 0xa9b: 0x0008, 0xa9c: 0xe00d, 0xa9d: 0x0008,
+ 0xa9e: 0xe00d, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008,
+ 0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008,
+ 0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008,
+ 0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008,
+ 0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008,
+ 0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008,
// Block 0x2b, offset 0xac0
- 0xac0: 0x1501, 0xac1: 0x1531, 0xac2: 0x1561, 0xac3: 0x1591, 0xac4: 0x15c1, 0xac5: 0x15f1,
- 0xac6: 0x1621, 0xac7: 0x1651, 0xac8: 0x1501, 0xac9: 0x1531, 0xaca: 0x1561, 0xacb: 0x1591,
- 0xacc: 0x15c1, 0xacd: 0x15f1, 0xace: 0x1621, 0xacf: 0x1651, 0xad0: 0x1681, 0xad1: 0x16b1,
- 0xad2: 0x16e1, 0xad3: 0x1711, 0xad4: 0x1741, 0xad5: 0x1771, 0xad6: 0x17a1, 0xad7: 0x17d1,
- 0xad8: 0x1681, 0xad9: 0x16b1, 0xada: 0x16e1, 0xadb: 0x1711, 0xadc: 0x1741, 0xadd: 0x1771,
- 0xade: 0x17a1, 0xadf: 0x17d1, 0xae0: 0x1801, 0xae1: 0x1831, 0xae2: 0x1861, 0xae3: 0x1891,
- 0xae4: 0x18c1, 0xae5: 0x18f1, 0xae6: 0x1921, 0xae7: 0x1951, 0xae8: 0x1801, 0xae9: 0x1831,
- 0xaea: 0x1861, 0xaeb: 0x1891, 0xaec: 0x18c1, 0xaed: 0x18f1, 0xaee: 0x1921, 0xaef: 0x1951,
- 0xaf0: 0x0008, 0xaf1: 0x0008, 0xaf2: 0x1981, 0xaf3: 0x19b1, 0xaf4: 0x19d9, 0xaf5: 0x0040,
- 0xaf6: 0x0008, 0xaf7: 0x1a01, 0xaf8: 0xe045, 0xaf9: 0xe045, 0xafa: 0x064d, 0xafb: 0x1459,
- 0xafc: 0x19b1, 0xafd: 0x0666, 0xafe: 0x1a31, 0xaff: 0x0686,
+ 0xac0: 0xe00d, 0xac1: 0x0008, 0xac2: 0xe00d, 0xac3: 0x0008, 0xac4: 0xe00d, 0xac5: 0x0008,
+ 0xac6: 0xe00d, 0xac7: 0x0008, 0xac8: 0xe00d, 0xac9: 0x0008, 0xaca: 0xe00d, 0xacb: 0x0008,
+ 0xacc: 0xe00d, 0xacd: 0x0008, 0xace: 0xe00d, 0xacf: 0x0008, 0xad0: 0xe00d, 0xad1: 0x0008,
+ 0xad2: 0xe00d, 0xad3: 0x0008, 0xad4: 0xe00d, 0xad5: 0x0008, 0xad6: 0x0008, 0xad7: 0x0008,
+ 0xad8: 0x0008, 0xad9: 0x0008, 0xada: 0x0615, 0xadb: 0x0635, 0xadc: 0x0008, 0xadd: 0x0008,
+ 0xade: 0x1441, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008,
+ 0xae4: 0xe00d, 0xae5: 0x0008, 0xae6: 0xe00d, 0xae7: 0x0008, 0xae8: 0xe00d, 0xae9: 0x0008,
+ 0xaea: 0xe00d, 0xaeb: 0x0008, 0xaec: 0xe00d, 0xaed: 0x0008, 0xaee: 0xe00d, 0xaef: 0x0008,
+ 0xaf0: 0xe00d, 0xaf1: 0x0008, 0xaf2: 0xe00d, 0xaf3: 0x0008, 0xaf4: 0xe00d, 0xaf5: 0x0008,
+ 0xaf6: 0xe00d, 0xaf7: 0x0008, 0xaf8: 0xe00d, 0xaf9: 0x0008, 0xafa: 0xe00d, 0xafb: 0x0008,
+ 0xafc: 0xe00d, 0xafd: 0x0008, 0xafe: 0xe00d, 0xaff: 0x0008,
// Block 0x2c, offset 0xb00
- 0xb00: 0x06a6, 0xb01: 0x1a4a, 0xb02: 0x1a79, 0xb03: 0x1aa9, 0xb04: 0x1ad1, 0xb05: 0x0040,
- 0xb06: 0x0008, 0xb07: 0x1af9, 0xb08: 0x06c5, 0xb09: 0x1471, 0xb0a: 0x06dd, 0xb0b: 0x1489,
- 0xb0c: 0x1aa9, 0xb0d: 0x1b2a, 0xb0e: 0x1b5a, 0xb0f: 0x1b8a, 0xb10: 0x0008, 0xb11: 0x0008,
- 0xb12: 0x0008, 0xb13: 0x1bb9, 0xb14: 0x0040, 0xb15: 0x0040, 0xb16: 0x0008, 0xb17: 0x0008,
- 0xb18: 0xe045, 0xb19: 0xe045, 0xb1a: 0x06f5, 0xb1b: 0x14a1, 0xb1c: 0x0040, 0xb1d: 0x1bd2,
- 0xb1e: 0x1c02, 0xb1f: 0x1c32, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x1c61,
+ 0xb00: 0x0008, 0xb01: 0x0008, 0xb02: 0x0008, 0xb03: 0x0008, 0xb04: 0x0008, 0xb05: 0x0008,
+ 0xb06: 0x0040, 0xb07: 0x0040, 0xb08: 0xe045, 0xb09: 0xe045, 0xb0a: 0xe045, 0xb0b: 0xe045,
+ 0xb0c: 0xe045, 0xb0d: 0xe045, 0xb0e: 0x0040, 0xb0f: 0x0040, 0xb10: 0x0008, 0xb11: 0x0008,
+ 0xb12: 0x0008, 0xb13: 0x0008, 0xb14: 0x0008, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008,
+ 0xb18: 0x0040, 0xb19: 0xe045, 0xb1a: 0x0040, 0xb1b: 0xe045, 0xb1c: 0x0040, 0xb1d: 0xe045,
+ 0xb1e: 0x0040, 0xb1f: 0xe045, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x0008,
0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045,
- 0xb2a: 0x070d, 0xb2b: 0x14d1, 0xb2c: 0xe04d, 0xb2d: 0x1c7a, 0xb2e: 0x03d2, 0xb2f: 0x1caa,
- 0xb30: 0x0040, 0xb31: 0x0040, 0xb32: 0x1cb9, 0xb33: 0x1ce9, 0xb34: 0x1d11, 0xb35: 0x0040,
- 0xb36: 0x0008, 0xb37: 0x1d39, 0xb38: 0x0725, 0xb39: 0x14b9, 0xb3a: 0x0515, 0xb3b: 0x14e9,
- 0xb3c: 0x1ce9, 0xb3d: 0x073e, 0xb3e: 0x075e, 0xb3f: 0x0040,
+ 0xb2a: 0xe045, 0xb2b: 0xe045, 0xb2c: 0xe045, 0xb2d: 0xe045, 0xb2e: 0xe045, 0xb2f: 0xe045,
+ 0xb30: 0x0008, 0xb31: 0x1459, 0xb32: 0x0008, 0xb33: 0x1471, 0xb34: 0x0008, 0xb35: 0x1489,
+ 0xb36: 0x0008, 0xb37: 0x14a1, 0xb38: 0x0008, 0xb39: 0x14b9, 0xb3a: 0x0008, 0xb3b: 0x14d1,
+ 0xb3c: 0x0008, 0xb3d: 0x14e9, 0xb3e: 0x0040, 0xb3f: 0x0040,
// Block 0x2d, offset 0xb40
- 0xb40: 0x000a, 0xb41: 0x000a, 0xb42: 0x000a, 0xb43: 0x000a, 0xb44: 0x000a, 0xb45: 0x000a,
- 0xb46: 0x000a, 0xb47: 0x000a, 0xb48: 0x000a, 0xb49: 0x000a, 0xb4a: 0x000a, 0xb4b: 0x03c0,
- 0xb4c: 0x0003, 0xb4d: 0x0003, 0xb4e: 0x0340, 0xb4f: 0x0340, 0xb50: 0x0018, 0xb51: 0xe00d,
- 0xb52: 0x0018, 0xb53: 0x0018, 0xb54: 0x0018, 0xb55: 0x0018, 0xb56: 0x0018, 0xb57: 0x077e,
- 0xb58: 0x0018, 0xb59: 0x0018, 0xb5a: 0x0018, 0xb5b: 0x0018, 0xb5c: 0x0018, 0xb5d: 0x0018,
- 0xb5e: 0x0018, 0xb5f: 0x0018, 0xb60: 0x0018, 0xb61: 0x0018, 0xb62: 0x0018, 0xb63: 0x0018,
- 0xb64: 0x0040, 0xb65: 0x0040, 0xb66: 0x0040, 0xb67: 0x0018, 0xb68: 0x0040, 0xb69: 0x0040,
- 0xb6a: 0x0340, 0xb6b: 0x0340, 0xb6c: 0x0340, 0xb6d: 0x0340, 0xb6e: 0x0340, 0xb6f: 0x000a,
- 0xb70: 0x0018, 0xb71: 0x0018, 0xb72: 0x0018, 0xb73: 0x1d69, 0xb74: 0x1da1, 0xb75: 0x0018,
- 0xb76: 0x1df1, 0xb77: 0x1e29, 0xb78: 0x0018, 0xb79: 0x0018, 0xb7a: 0x0018, 0xb7b: 0x0018,
- 0xb7c: 0x1e7a, 0xb7d: 0x0018, 0xb7e: 0x079e, 0xb7f: 0x0018,
+ 0xb40: 0x1501, 0xb41: 0x1531, 0xb42: 0x1561, 0xb43: 0x1591, 0xb44: 0x15c1, 0xb45: 0x15f1,
+ 0xb46: 0x1621, 0xb47: 0x1651, 0xb48: 0x1501, 0xb49: 0x1531, 0xb4a: 0x1561, 0xb4b: 0x1591,
+ 0xb4c: 0x15c1, 0xb4d: 0x15f1, 0xb4e: 0x1621, 0xb4f: 0x1651, 0xb50: 0x1681, 0xb51: 0x16b1,
+ 0xb52: 0x16e1, 0xb53: 0x1711, 0xb54: 0x1741, 0xb55: 0x1771, 0xb56: 0x17a1, 0xb57: 0x17d1,
+ 0xb58: 0x1681, 0xb59: 0x16b1, 0xb5a: 0x16e1, 0xb5b: 0x1711, 0xb5c: 0x1741, 0xb5d: 0x1771,
+ 0xb5e: 0x17a1, 0xb5f: 0x17d1, 0xb60: 0x1801, 0xb61: 0x1831, 0xb62: 0x1861, 0xb63: 0x1891,
+ 0xb64: 0x18c1, 0xb65: 0x18f1, 0xb66: 0x1921, 0xb67: 0x1951, 0xb68: 0x1801, 0xb69: 0x1831,
+ 0xb6a: 0x1861, 0xb6b: 0x1891, 0xb6c: 0x18c1, 0xb6d: 0x18f1, 0xb6e: 0x1921, 0xb6f: 0x1951,
+ 0xb70: 0x0008, 0xb71: 0x0008, 0xb72: 0x1981, 0xb73: 0x19b1, 0xb74: 0x19d9, 0xb75: 0x0040,
+ 0xb76: 0x0008, 0xb77: 0x1a01, 0xb78: 0xe045, 0xb79: 0xe045, 0xb7a: 0x064d, 0xb7b: 0x1459,
+ 0xb7c: 0x19b1, 0xb7d: 0x0666, 0xb7e: 0x1a31, 0xb7f: 0x0686,
// Block 0x2e, offset 0xb80
- 0xb80: 0x0018, 0xb81: 0x0018, 0xb82: 0x0018, 0xb83: 0x0018, 0xb84: 0x0018, 0xb85: 0x0018,
- 0xb86: 0x0018, 0xb87: 0x1e92, 0xb88: 0x1eaa, 0xb89: 0x1ec2, 0xb8a: 0x0018, 0xb8b: 0x0018,
- 0xb8c: 0x0018, 0xb8d: 0x0018, 0xb8e: 0x0018, 0xb8f: 0x0018, 0xb90: 0x0018, 0xb91: 0x0018,
- 0xb92: 0x0018, 0xb93: 0x0018, 0xb94: 0x0018, 0xb95: 0x0018, 0xb96: 0x0018, 0xb97: 0x1ed9,
- 0xb98: 0x0018, 0xb99: 0x0018, 0xb9a: 0x0018, 0xb9b: 0x0018, 0xb9c: 0x0018, 0xb9d: 0x0018,
- 0xb9e: 0x0018, 0xb9f: 0x000a, 0xba0: 0x03c0, 0xba1: 0x0340, 0xba2: 0x0340, 0xba3: 0x0340,
- 0xba4: 0x03c0, 0xba5: 0x0040, 0xba6: 0x0040, 0xba7: 0x0040, 0xba8: 0x0040, 0xba9: 0x0040,
- 0xbaa: 0x0340, 0xbab: 0x0340, 0xbac: 0x0340, 0xbad: 0x0340, 0xbae: 0x0340, 0xbaf: 0x0340,
- 0xbb0: 0x1f41, 0xbb1: 0x0f41, 0xbb2: 0x0040, 0xbb3: 0x0040, 0xbb4: 0x1f51, 0xbb5: 0x1f61,
- 0xbb6: 0x1f71, 0xbb7: 0x1f81, 0xbb8: 0x1f91, 0xbb9: 0x1fa1, 0xbba: 0x1fb2, 0xbbb: 0x07bd,
- 0xbbc: 0x1fc2, 0xbbd: 0x1fd2, 0xbbe: 0x1fe2, 0xbbf: 0x0f71,
+ 0xb80: 0x06a6, 0xb81: 0x1a4a, 0xb82: 0x1a79, 0xb83: 0x1aa9, 0xb84: 0x1ad1, 0xb85: 0x0040,
+ 0xb86: 0x0008, 0xb87: 0x1af9, 0xb88: 0x06c5, 0xb89: 0x1471, 0xb8a: 0x06dd, 0xb8b: 0x1489,
+ 0xb8c: 0x1aa9, 0xb8d: 0x1b2a, 0xb8e: 0x1b5a, 0xb8f: 0x1b8a, 0xb90: 0x0008, 0xb91: 0x0008,
+ 0xb92: 0x0008, 0xb93: 0x1bb9, 0xb94: 0x0040, 0xb95: 0x0040, 0xb96: 0x0008, 0xb97: 0x0008,
+ 0xb98: 0xe045, 0xb99: 0xe045, 0xb9a: 0x06f5, 0xb9b: 0x14a1, 0xb9c: 0x0040, 0xb9d: 0x1bd2,
+ 0xb9e: 0x1c02, 0xb9f: 0x1c32, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x1c61,
+ 0xba4: 0x0008, 0xba5: 0x0008, 0xba6: 0x0008, 0xba7: 0x0008, 0xba8: 0xe045, 0xba9: 0xe045,
+ 0xbaa: 0x070d, 0xbab: 0x14d1, 0xbac: 0xe04d, 0xbad: 0x1c7a, 0xbae: 0x03d2, 0xbaf: 0x1caa,
+ 0xbb0: 0x0040, 0xbb1: 0x0040, 0xbb2: 0x1cb9, 0xbb3: 0x1ce9, 0xbb4: 0x1d11, 0xbb5: 0x0040,
+ 0xbb6: 0x0008, 0xbb7: 0x1d39, 0xbb8: 0x0725, 0xbb9: 0x14b9, 0xbba: 0x0515, 0xbbb: 0x14e9,
+ 0xbbc: 0x1ce9, 0xbbd: 0x073e, 0xbbe: 0x075e, 0xbbf: 0x0040,
// Block 0x2f, offset 0xbc0
- 0xbc0: 0x1f41, 0xbc1: 0x00c9, 0xbc2: 0x0069, 0xbc3: 0x0079, 0xbc4: 0x1f51, 0xbc5: 0x1f61,
- 0xbc6: 0x1f71, 0xbc7: 0x1f81, 0xbc8: 0x1f91, 0xbc9: 0x1fa1, 0xbca: 0x1fb2, 0xbcb: 0x07d5,
- 0xbcc: 0x1fc2, 0xbcd: 0x1fd2, 0xbce: 0x1fe2, 0xbcf: 0x0040, 0xbd0: 0x0039, 0xbd1: 0x0f09,
- 0xbd2: 0x00d9, 0xbd3: 0x0369, 0xbd4: 0x0ff9, 0xbd5: 0x0249, 0xbd6: 0x0f51, 0xbd7: 0x0359,
- 0xbd8: 0x0f61, 0xbd9: 0x0f71, 0xbda: 0x0f99, 0xbdb: 0x01d9, 0xbdc: 0x0fa9, 0xbdd: 0x0040,
- 0xbde: 0x0040, 0xbdf: 0x0040, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018,
- 0xbe4: 0x0018, 0xbe5: 0x0018, 0xbe6: 0x0018, 0xbe7: 0x0018, 0xbe8: 0x1ff1, 0xbe9: 0x0018,
- 0xbea: 0x0018, 0xbeb: 0x0018, 0xbec: 0x0018, 0xbed: 0x0018, 0xbee: 0x0018, 0xbef: 0x0018,
- 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x0018, 0xbf4: 0x0018, 0xbf5: 0x0018,
- 0xbf6: 0x0018, 0xbf7: 0x0018, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018,
- 0xbfc: 0x0018, 0xbfd: 0x0018, 0xbfe: 0x0018, 0xbff: 0x0040,
+ 0xbc0: 0x000a, 0xbc1: 0x000a, 0xbc2: 0x000a, 0xbc3: 0x000a, 0xbc4: 0x000a, 0xbc5: 0x000a,
+ 0xbc6: 0x000a, 0xbc7: 0x000a, 0xbc8: 0x000a, 0xbc9: 0x000a, 0xbca: 0x000a, 0xbcb: 0x03c0,
+ 0xbcc: 0x0003, 0xbcd: 0x0003, 0xbce: 0x0340, 0xbcf: 0x0b40, 0xbd0: 0x0018, 0xbd1: 0xe00d,
+ 0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x077e,
+ 0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018,
+ 0xbde: 0x0018, 0xbdf: 0x0018, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018,
+ 0xbe4: 0x0040, 0xbe5: 0x0040, 0xbe6: 0x0040, 0xbe7: 0x0018, 0xbe8: 0x0040, 0xbe9: 0x0040,
+ 0xbea: 0x0340, 0xbeb: 0x0340, 0xbec: 0x0340, 0xbed: 0x0340, 0xbee: 0x0340, 0xbef: 0x000a,
+ 0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x1d69, 0xbf4: 0x1da1, 0xbf5: 0x0018,
+ 0xbf6: 0x1df1, 0xbf7: 0x1e29, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018,
+ 0xbfc: 0x1e7a, 0xbfd: 0x0018, 0xbfe: 0x079e, 0xbff: 0x0018,
// Block 0x30, offset 0xc00
- 0xc00: 0x07ee, 0xc01: 0x080e, 0xc02: 0x1159, 0xc03: 0x082d, 0xc04: 0x0018, 0xc05: 0x084e,
- 0xc06: 0x086e, 0xc07: 0x1011, 0xc08: 0x0018, 0xc09: 0x088d, 0xc0a: 0x0f31, 0xc0b: 0x0249,
- 0xc0c: 0x0249, 0xc0d: 0x0249, 0xc0e: 0x0249, 0xc0f: 0x2009, 0xc10: 0x0f41, 0xc11: 0x0f41,
- 0xc12: 0x0359, 0xc13: 0x0359, 0xc14: 0x0018, 0xc15: 0x0f71, 0xc16: 0x2021, 0xc17: 0x0018,
- 0xc18: 0x0018, 0xc19: 0x0f99, 0xc1a: 0x2039, 0xc1b: 0x0269, 0xc1c: 0x0269, 0xc1d: 0x0269,
- 0xc1e: 0x0018, 0xc1f: 0x0018, 0xc20: 0x2049, 0xc21: 0x08ad, 0xc22: 0x2061, 0xc23: 0x0018,
- 0xc24: 0x13d1, 0xc25: 0x0018, 0xc26: 0x2079, 0xc27: 0x0018, 0xc28: 0x13d1, 0xc29: 0x0018,
- 0xc2a: 0x0f51, 0xc2b: 0x2091, 0xc2c: 0x0ee9, 0xc2d: 0x1159, 0xc2e: 0x0018, 0xc2f: 0x0f09,
- 0xc30: 0x0f09, 0xc31: 0x1199, 0xc32: 0x0040, 0xc33: 0x0f61, 0xc34: 0x00d9, 0xc35: 0x20a9,
- 0xc36: 0x20c1, 0xc37: 0x20d9, 0xc38: 0x20f1, 0xc39: 0x0f41, 0xc3a: 0x0018, 0xc3b: 0x08cd,
- 0xc3c: 0x2109, 0xc3d: 0x10b1, 0xc3e: 0x10b1, 0xc3f: 0x2109,
+ 0xc00: 0x0018, 0xc01: 0x0018, 0xc02: 0x0018, 0xc03: 0x0018, 0xc04: 0x0018, 0xc05: 0x0018,
+ 0xc06: 0x0018, 0xc07: 0x1e92, 0xc08: 0x1eaa, 0xc09: 0x1ec2, 0xc0a: 0x0018, 0xc0b: 0x0018,
+ 0xc0c: 0x0018, 0xc0d: 0x0018, 0xc0e: 0x0018, 0xc0f: 0x0018, 0xc10: 0x0018, 0xc11: 0x0018,
+ 0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x1ed9,
+ 0xc18: 0x0018, 0xc19: 0x0018, 0xc1a: 0x0018, 0xc1b: 0x0018, 0xc1c: 0x0018, 0xc1d: 0x0018,
+ 0xc1e: 0x0018, 0xc1f: 0x000a, 0xc20: 0x03c0, 0xc21: 0x0340, 0xc22: 0x0340, 0xc23: 0x0340,
+ 0xc24: 0x03c0, 0xc25: 0x0040, 0xc26: 0x0040, 0xc27: 0x0040, 0xc28: 0x0040, 0xc29: 0x0040,
+ 0xc2a: 0x0340, 0xc2b: 0x0340, 0xc2c: 0x0340, 0xc2d: 0x0340, 0xc2e: 0x0340, 0xc2f: 0x0340,
+ 0xc30: 0x1f41, 0xc31: 0x0f41, 0xc32: 0x0040, 0xc33: 0x0040, 0xc34: 0x1f51, 0xc35: 0x1f61,
+ 0xc36: 0x1f71, 0xc37: 0x1f81, 0xc38: 0x1f91, 0xc39: 0x1fa1, 0xc3a: 0x1fb2, 0xc3b: 0x07bd,
+ 0xc3c: 0x1fc2, 0xc3d: 0x1fd2, 0xc3e: 0x1fe2, 0xc3f: 0x0f71,
// Block 0x31, offset 0xc40
- 0xc40: 0x08ed, 0xc41: 0x0018, 0xc42: 0x0018, 0xc43: 0x0018, 0xc44: 0x0018, 0xc45: 0x0ef9,
- 0xc46: 0x0ef9, 0xc47: 0x0f09, 0xc48: 0x0f41, 0xc49: 0x0259, 0xc4a: 0x0018, 0xc4b: 0x0018,
- 0xc4c: 0x0018, 0xc4d: 0x0018, 0xc4e: 0x0008, 0xc4f: 0x0018, 0xc50: 0x2121, 0xc51: 0x2151,
- 0xc52: 0x2181, 0xc53: 0x21b9, 0xc54: 0x21e9, 0xc55: 0x2219, 0xc56: 0x2249, 0xc57: 0x2279,
- 0xc58: 0x22a9, 0xc59: 0x22d9, 0xc5a: 0x2309, 0xc5b: 0x2339, 0xc5c: 0x2369, 0xc5d: 0x2399,
- 0xc5e: 0x23c9, 0xc5f: 0x23f9, 0xc60: 0x0f41, 0xc61: 0x2421, 0xc62: 0x0905, 0xc63: 0x2439,
- 0xc64: 0x1089, 0xc65: 0x2451, 0xc66: 0x0925, 0xc67: 0x2469, 0xc68: 0x2491, 0xc69: 0x0369,
- 0xc6a: 0x24a9, 0xc6b: 0x0945, 0xc6c: 0x0359, 0xc6d: 0x1159, 0xc6e: 0x0ef9, 0xc6f: 0x0f61,
- 0xc70: 0x0f41, 0xc71: 0x2421, 0xc72: 0x0965, 0xc73: 0x2439, 0xc74: 0x1089, 0xc75: 0x2451,
- 0xc76: 0x0985, 0xc77: 0x2469, 0xc78: 0x2491, 0xc79: 0x0369, 0xc7a: 0x24a9, 0xc7b: 0x09a5,
- 0xc7c: 0x0359, 0xc7d: 0x1159, 0xc7e: 0x0ef9, 0xc7f: 0x0f61,
+ 0xc40: 0x1f41, 0xc41: 0x00c9, 0xc42: 0x0069, 0xc43: 0x0079, 0xc44: 0x1f51, 0xc45: 0x1f61,
+ 0xc46: 0x1f71, 0xc47: 0x1f81, 0xc48: 0x1f91, 0xc49: 0x1fa1, 0xc4a: 0x1fb2, 0xc4b: 0x07d5,
+ 0xc4c: 0x1fc2, 0xc4d: 0x1fd2, 0xc4e: 0x1fe2, 0xc4f: 0x0040, 0xc50: 0x0039, 0xc51: 0x0f09,
+ 0xc52: 0x00d9, 0xc53: 0x0369, 0xc54: 0x0ff9, 0xc55: 0x0249, 0xc56: 0x0f51, 0xc57: 0x0359,
+ 0xc58: 0x0f61, 0xc59: 0x0f71, 0xc5a: 0x0f99, 0xc5b: 0x01d9, 0xc5c: 0x0fa9, 0xc5d: 0x0040,
+ 0xc5e: 0x0040, 0xc5f: 0x0040, 0xc60: 0x0018, 0xc61: 0x0018, 0xc62: 0x0018, 0xc63: 0x0018,
+ 0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x1ff1, 0xc69: 0x0018,
+ 0xc6a: 0x0018, 0xc6b: 0x0018, 0xc6c: 0x0018, 0xc6d: 0x0018, 0xc6e: 0x0018, 0xc6f: 0x0018,
+ 0xc70: 0x0018, 0xc71: 0x0018, 0xc72: 0x0018, 0xc73: 0x0018, 0xc74: 0x0018, 0xc75: 0x0018,
+ 0xc76: 0x0018, 0xc77: 0x0018, 0xc78: 0x0018, 0xc79: 0x0018, 0xc7a: 0x0018, 0xc7b: 0x0018,
+ 0xc7c: 0x0018, 0xc7d: 0x0018, 0xc7e: 0x0018, 0xc7f: 0x0018,
// Block 0x32, offset 0xc80
- 0xc80: 0x0018, 0xc81: 0x0018, 0xc82: 0x0018, 0xc83: 0x0018, 0xc84: 0x0018, 0xc85: 0x0018,
- 0xc86: 0x0018, 0xc87: 0x0018, 0xc88: 0x0018, 0xc89: 0x0018, 0xc8a: 0x0018, 0xc8b: 0x0040,
- 0xc8c: 0x0040, 0xc8d: 0x0040, 0xc8e: 0x0040, 0xc8f: 0x0040, 0xc90: 0x0040, 0xc91: 0x0040,
- 0xc92: 0x0040, 0xc93: 0x0040, 0xc94: 0x0040, 0xc95: 0x0040, 0xc96: 0x0040, 0xc97: 0x0040,
- 0xc98: 0x0040, 0xc99: 0x0040, 0xc9a: 0x0040, 0xc9b: 0x0040, 0xc9c: 0x0040, 0xc9d: 0x0040,
- 0xc9e: 0x0040, 0xc9f: 0x0040, 0xca0: 0x00c9, 0xca1: 0x0069, 0xca2: 0x0079, 0xca3: 0x1f51,
- 0xca4: 0x1f61, 0xca5: 0x1f71, 0xca6: 0x1f81, 0xca7: 0x1f91, 0xca8: 0x1fa1, 0xca9: 0x2601,
- 0xcaa: 0x2619, 0xcab: 0x2631, 0xcac: 0x2649, 0xcad: 0x2661, 0xcae: 0x2679, 0xcaf: 0x2691,
- 0xcb0: 0x26a9, 0xcb1: 0x26c1, 0xcb2: 0x26d9, 0xcb3: 0x26f1, 0xcb4: 0x0a06, 0xcb5: 0x0a26,
- 0xcb6: 0x0a46, 0xcb7: 0x0a66, 0xcb8: 0x0a86, 0xcb9: 0x0aa6, 0xcba: 0x0ac6, 0xcbb: 0x0ae6,
- 0xcbc: 0x0b06, 0xcbd: 0x270a, 0xcbe: 0x2732, 0xcbf: 0x275a,
+ 0xc80: 0x07ee, 0xc81: 0x080e, 0xc82: 0x1159, 0xc83: 0x082d, 0xc84: 0x0018, 0xc85: 0x084e,
+ 0xc86: 0x086e, 0xc87: 0x1011, 0xc88: 0x0018, 0xc89: 0x088d, 0xc8a: 0x0f31, 0xc8b: 0x0249,
+ 0xc8c: 0x0249, 0xc8d: 0x0249, 0xc8e: 0x0249, 0xc8f: 0x2009, 0xc90: 0x0f41, 0xc91: 0x0f41,
+ 0xc92: 0x0359, 0xc93: 0x0359, 0xc94: 0x0018, 0xc95: 0x0f71, 0xc96: 0x2021, 0xc97: 0x0018,
+ 0xc98: 0x0018, 0xc99: 0x0f99, 0xc9a: 0x2039, 0xc9b: 0x0269, 0xc9c: 0x0269, 0xc9d: 0x0269,
+ 0xc9e: 0x0018, 0xc9f: 0x0018, 0xca0: 0x2049, 0xca1: 0x08ad, 0xca2: 0x2061, 0xca3: 0x0018,
+ 0xca4: 0x13d1, 0xca5: 0x0018, 0xca6: 0x2079, 0xca7: 0x0018, 0xca8: 0x13d1, 0xca9: 0x0018,
+ 0xcaa: 0x0f51, 0xcab: 0x2091, 0xcac: 0x0ee9, 0xcad: 0x1159, 0xcae: 0x0018, 0xcaf: 0x0f09,
+ 0xcb0: 0x0f09, 0xcb1: 0x1199, 0xcb2: 0x0040, 0xcb3: 0x0f61, 0xcb4: 0x00d9, 0xcb5: 0x20a9,
+ 0xcb6: 0x20c1, 0xcb7: 0x20d9, 0xcb8: 0x20f1, 0xcb9: 0x0f41, 0xcba: 0x0018, 0xcbb: 0x08cd,
+ 0xcbc: 0x2109, 0xcbd: 0x10b1, 0xcbe: 0x10b1, 0xcbf: 0x2109,
// Block 0x33, offset 0xcc0
- 0xcc0: 0x2782, 0xcc1: 0x27aa, 0xcc2: 0x27d2, 0xcc3: 0x27fa, 0xcc4: 0x2822, 0xcc5: 0x284a,
- 0xcc6: 0x2872, 0xcc7: 0x289a, 0xcc8: 0x0040, 0xcc9: 0x0040, 0xcca: 0x0040, 0xccb: 0x0040,
- 0xccc: 0x0040, 0xccd: 0x0040, 0xcce: 0x0040, 0xccf: 0x0040, 0xcd0: 0x0040, 0xcd1: 0x0040,
- 0xcd2: 0x0040, 0xcd3: 0x0040, 0xcd4: 0x0040, 0xcd5: 0x0040, 0xcd6: 0x0040, 0xcd7: 0x0040,
- 0xcd8: 0x0040, 0xcd9: 0x0040, 0xcda: 0x0040, 0xcdb: 0x0040, 0xcdc: 0x0b26, 0xcdd: 0x0b46,
- 0xcde: 0x0b66, 0xcdf: 0x0b86, 0xce0: 0x0ba6, 0xce1: 0x0bc6, 0xce2: 0x0be6, 0xce3: 0x0c06,
- 0xce4: 0x0c26, 0xce5: 0x0c46, 0xce6: 0x0c66, 0xce7: 0x0c86, 0xce8: 0x0ca6, 0xce9: 0x0cc6,
- 0xcea: 0x0ce6, 0xceb: 0x0d06, 0xcec: 0x0d26, 0xced: 0x0d46, 0xcee: 0x0d66, 0xcef: 0x0d86,
- 0xcf0: 0x0da6, 0xcf1: 0x0dc6, 0xcf2: 0x0de6, 0xcf3: 0x0e06, 0xcf4: 0x0e26, 0xcf5: 0x0e46,
- 0xcf6: 0x0039, 0xcf7: 0x0ee9, 0xcf8: 0x1159, 0xcf9: 0x0ef9, 0xcfa: 0x0f09, 0xcfb: 0x1199,
- 0xcfc: 0x0f31, 0xcfd: 0x0249, 0xcfe: 0x0f41, 0xcff: 0x0259,
+ 0xcc0: 0x08ed, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x0ef9,
+ 0xcc6: 0x0ef9, 0xcc7: 0x0f09, 0xcc8: 0x0f41, 0xcc9: 0x0259, 0xcca: 0x0018, 0xccb: 0x0018,
+ 0xccc: 0x0018, 0xccd: 0x0018, 0xcce: 0x0008, 0xccf: 0x0018, 0xcd0: 0x2121, 0xcd1: 0x2151,
+ 0xcd2: 0x2181, 0xcd3: 0x21b9, 0xcd4: 0x21e9, 0xcd5: 0x2219, 0xcd6: 0x2249, 0xcd7: 0x2279,
+ 0xcd8: 0x22a9, 0xcd9: 0x22d9, 0xcda: 0x2309, 0xcdb: 0x2339, 0xcdc: 0x2369, 0xcdd: 0x2399,
+ 0xcde: 0x23c9, 0xcdf: 0x23f9, 0xce0: 0x0f41, 0xce1: 0x2421, 0xce2: 0x0905, 0xce3: 0x2439,
+ 0xce4: 0x1089, 0xce5: 0x2451, 0xce6: 0x0925, 0xce7: 0x2469, 0xce8: 0x2491, 0xce9: 0x0369,
+ 0xcea: 0x24a9, 0xceb: 0x0945, 0xcec: 0x0359, 0xced: 0x1159, 0xcee: 0x0ef9, 0xcef: 0x0f61,
+ 0xcf0: 0x0f41, 0xcf1: 0x2421, 0xcf2: 0x0965, 0xcf3: 0x2439, 0xcf4: 0x1089, 0xcf5: 0x2451,
+ 0xcf6: 0x0985, 0xcf7: 0x2469, 0xcf8: 0x2491, 0xcf9: 0x0369, 0xcfa: 0x24a9, 0xcfb: 0x09a5,
+ 0xcfc: 0x0359, 0xcfd: 0x1159, 0xcfe: 0x0ef9, 0xcff: 0x0f61,
// Block 0x34, offset 0xd00
- 0xd00: 0x0f51, 0xd01: 0x0359, 0xd02: 0x0f61, 0xd03: 0x0f71, 0xd04: 0x00d9, 0xd05: 0x0f99,
- 0xd06: 0x2039, 0xd07: 0x0269, 0xd08: 0x01d9, 0xd09: 0x0fa9, 0xd0a: 0x0fb9, 0xd0b: 0x1089,
- 0xd0c: 0x0279, 0xd0d: 0x0369, 0xd0e: 0x0289, 0xd0f: 0x13d1, 0xd10: 0x0039, 0xd11: 0x0ee9,
- 0xd12: 0x1159, 0xd13: 0x0ef9, 0xd14: 0x0f09, 0xd15: 0x1199, 0xd16: 0x0f31, 0xd17: 0x0249,
- 0xd18: 0x0f41, 0xd19: 0x0259, 0xd1a: 0x0f51, 0xd1b: 0x0359, 0xd1c: 0x0f61, 0xd1d: 0x0f71,
- 0xd1e: 0x00d9, 0xd1f: 0x0f99, 0xd20: 0x2039, 0xd21: 0x0269, 0xd22: 0x01d9, 0xd23: 0x0fa9,
- 0xd24: 0x0fb9, 0xd25: 0x1089, 0xd26: 0x0279, 0xd27: 0x0369, 0xd28: 0x0289, 0xd29: 0x13d1,
- 0xd2a: 0x1f41, 0xd2b: 0x0018, 0xd2c: 0x0018, 0xd2d: 0x0018, 0xd2e: 0x0018, 0xd2f: 0x0018,
- 0xd30: 0x0018, 0xd31: 0x0018, 0xd32: 0x0018, 0xd33: 0x0018, 0xd34: 0x0018, 0xd35: 0x0018,
- 0xd36: 0x0018, 0xd37: 0x0018, 0xd38: 0x0018, 0xd39: 0x0018, 0xd3a: 0x0018, 0xd3b: 0x0018,
- 0xd3c: 0x0018, 0xd3d: 0x0018, 0xd3e: 0x0018, 0xd3f: 0x0018,
+ 0xd00: 0x0018, 0xd01: 0x0018, 0xd02: 0x0018, 0xd03: 0x0018, 0xd04: 0x0018, 0xd05: 0x0018,
+ 0xd06: 0x0018, 0xd07: 0x0018, 0xd08: 0x0018, 0xd09: 0x0018, 0xd0a: 0x0018, 0xd0b: 0x0040,
+ 0xd0c: 0x0040, 0xd0d: 0x0040, 0xd0e: 0x0040, 0xd0f: 0x0040, 0xd10: 0x0040, 0xd11: 0x0040,
+ 0xd12: 0x0040, 0xd13: 0x0040, 0xd14: 0x0040, 0xd15: 0x0040, 0xd16: 0x0040, 0xd17: 0x0040,
+ 0xd18: 0x0040, 0xd19: 0x0040, 0xd1a: 0x0040, 0xd1b: 0x0040, 0xd1c: 0x0040, 0xd1d: 0x0040,
+ 0xd1e: 0x0040, 0xd1f: 0x0040, 0xd20: 0x00c9, 0xd21: 0x0069, 0xd22: 0x0079, 0xd23: 0x1f51,
+ 0xd24: 0x1f61, 0xd25: 0x1f71, 0xd26: 0x1f81, 0xd27: 0x1f91, 0xd28: 0x1fa1, 0xd29: 0x2601,
+ 0xd2a: 0x2619, 0xd2b: 0x2631, 0xd2c: 0x2649, 0xd2d: 0x2661, 0xd2e: 0x2679, 0xd2f: 0x2691,
+ 0xd30: 0x26a9, 0xd31: 0x26c1, 0xd32: 0x26d9, 0xd33: 0x26f1, 0xd34: 0x0a06, 0xd35: 0x0a26,
+ 0xd36: 0x0a46, 0xd37: 0x0a66, 0xd38: 0x0a86, 0xd39: 0x0aa6, 0xd3a: 0x0ac6, 0xd3b: 0x0ae6,
+ 0xd3c: 0x0b06, 0xd3d: 0x270a, 0xd3e: 0x2732, 0xd3f: 0x275a,
// Block 0x35, offset 0xd40
- 0xd40: 0x0008, 0xd41: 0x0008, 0xd42: 0x0008, 0xd43: 0x0008, 0xd44: 0x0008, 0xd45: 0x0008,
- 0xd46: 0x0008, 0xd47: 0x0008, 0xd48: 0x0008, 0xd49: 0x0008, 0xd4a: 0x0008, 0xd4b: 0x0008,
- 0xd4c: 0x0008, 0xd4d: 0x0008, 0xd4e: 0x0008, 0xd4f: 0x0008, 0xd50: 0x0008, 0xd51: 0x0008,
- 0xd52: 0x0008, 0xd53: 0x0008, 0xd54: 0x0008, 0xd55: 0x0008, 0xd56: 0x0008, 0xd57: 0x0008,
- 0xd58: 0x0008, 0xd59: 0x0008, 0xd5a: 0x0008, 0xd5b: 0x0008, 0xd5c: 0x0008, 0xd5d: 0x0008,
- 0xd5e: 0x0008, 0xd5f: 0x0040, 0xd60: 0xe00d, 0xd61: 0x0008, 0xd62: 0x2971, 0xd63: 0x0ebd,
- 0xd64: 0x2989, 0xd65: 0x0008, 0xd66: 0x0008, 0xd67: 0xe07d, 0xd68: 0x0008, 0xd69: 0xe01d,
- 0xd6a: 0x0008, 0xd6b: 0xe03d, 0xd6c: 0x0008, 0xd6d: 0x0fe1, 0xd6e: 0x1281, 0xd6f: 0x0fc9,
- 0xd70: 0x1141, 0xd71: 0x0008, 0xd72: 0xe00d, 0xd73: 0x0008, 0xd74: 0x0008, 0xd75: 0xe01d,
- 0xd76: 0x0008, 0xd77: 0x0008, 0xd78: 0x0008, 0xd79: 0x0008, 0xd7a: 0x0008, 0xd7b: 0x0008,
- 0xd7c: 0x0259, 0xd7d: 0x1089, 0xd7e: 0x29a1, 0xd7f: 0x29b9,
+ 0xd40: 0x2782, 0xd41: 0x27aa, 0xd42: 0x27d2, 0xd43: 0x27fa, 0xd44: 0x2822, 0xd45: 0x284a,
+ 0xd46: 0x2872, 0xd47: 0x289a, 0xd48: 0x0040, 0xd49: 0x0040, 0xd4a: 0x0040, 0xd4b: 0x0040,
+ 0xd4c: 0x0040, 0xd4d: 0x0040, 0xd4e: 0x0040, 0xd4f: 0x0040, 0xd50: 0x0040, 0xd51: 0x0040,
+ 0xd52: 0x0040, 0xd53: 0x0040, 0xd54: 0x0040, 0xd55: 0x0040, 0xd56: 0x0040, 0xd57: 0x0040,
+ 0xd58: 0x0040, 0xd59: 0x0040, 0xd5a: 0x0040, 0xd5b: 0x0040, 0xd5c: 0x0b26, 0xd5d: 0x0b46,
+ 0xd5e: 0x0b66, 0xd5f: 0x0b86, 0xd60: 0x0ba6, 0xd61: 0x0bc6, 0xd62: 0x0be6, 0xd63: 0x0c06,
+ 0xd64: 0x0c26, 0xd65: 0x0c46, 0xd66: 0x0c66, 0xd67: 0x0c86, 0xd68: 0x0ca6, 0xd69: 0x0cc6,
+ 0xd6a: 0x0ce6, 0xd6b: 0x0d06, 0xd6c: 0x0d26, 0xd6d: 0x0d46, 0xd6e: 0x0d66, 0xd6f: 0x0d86,
+ 0xd70: 0x0da6, 0xd71: 0x0dc6, 0xd72: 0x0de6, 0xd73: 0x0e06, 0xd74: 0x0e26, 0xd75: 0x0e46,
+ 0xd76: 0x0039, 0xd77: 0x0ee9, 0xd78: 0x1159, 0xd79: 0x0ef9, 0xd7a: 0x0f09, 0xd7b: 0x1199,
+ 0xd7c: 0x0f31, 0xd7d: 0x0249, 0xd7e: 0x0f41, 0xd7f: 0x0259,
// Block 0x36, offset 0xd80
- 0xd80: 0xe00d, 0xd81: 0x0008, 0xd82: 0xe00d, 0xd83: 0x0008, 0xd84: 0xe00d, 0xd85: 0x0008,
- 0xd86: 0xe00d, 0xd87: 0x0008, 0xd88: 0xe00d, 0xd89: 0x0008, 0xd8a: 0xe00d, 0xd8b: 0x0008,
- 0xd8c: 0xe00d, 0xd8d: 0x0008, 0xd8e: 0xe00d, 0xd8f: 0x0008, 0xd90: 0xe00d, 0xd91: 0x0008,
- 0xd92: 0xe00d, 0xd93: 0x0008, 0xd94: 0xe00d, 0xd95: 0x0008, 0xd96: 0xe00d, 0xd97: 0x0008,
- 0xd98: 0xe00d, 0xd99: 0x0008, 0xd9a: 0xe00d, 0xd9b: 0x0008, 0xd9c: 0xe00d, 0xd9d: 0x0008,
- 0xd9e: 0xe00d, 0xd9f: 0x0008, 0xda0: 0xe00d, 0xda1: 0x0008, 0xda2: 0xe00d, 0xda3: 0x0008,
- 0xda4: 0x0008, 0xda5: 0x0018, 0xda6: 0x0018, 0xda7: 0x0018, 0xda8: 0x0018, 0xda9: 0x0018,
- 0xdaa: 0x0018, 0xdab: 0xe03d, 0xdac: 0x0008, 0xdad: 0xe01d, 0xdae: 0x0008, 0xdaf: 0x1308,
- 0xdb0: 0x1308, 0xdb1: 0x1308, 0xdb2: 0xe00d, 0xdb3: 0x0008, 0xdb4: 0x0040, 0xdb5: 0x0040,
- 0xdb6: 0x0040, 0xdb7: 0x0040, 0xdb8: 0x0040, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018,
+ 0xd80: 0x0f51, 0xd81: 0x0359, 0xd82: 0x0f61, 0xd83: 0x0f71, 0xd84: 0x00d9, 0xd85: 0x0f99,
+ 0xd86: 0x2039, 0xd87: 0x0269, 0xd88: 0x01d9, 0xd89: 0x0fa9, 0xd8a: 0x0fb9, 0xd8b: 0x1089,
+ 0xd8c: 0x0279, 0xd8d: 0x0369, 0xd8e: 0x0289, 0xd8f: 0x13d1, 0xd90: 0x0039, 0xd91: 0x0ee9,
+ 0xd92: 0x1159, 0xd93: 0x0ef9, 0xd94: 0x0f09, 0xd95: 0x1199, 0xd96: 0x0f31, 0xd97: 0x0249,
+ 0xd98: 0x0f41, 0xd99: 0x0259, 0xd9a: 0x0f51, 0xd9b: 0x0359, 0xd9c: 0x0f61, 0xd9d: 0x0f71,
+ 0xd9e: 0x00d9, 0xd9f: 0x0f99, 0xda0: 0x2039, 0xda1: 0x0269, 0xda2: 0x01d9, 0xda3: 0x0fa9,
+ 0xda4: 0x0fb9, 0xda5: 0x1089, 0xda6: 0x0279, 0xda7: 0x0369, 0xda8: 0x0289, 0xda9: 0x13d1,
+ 0xdaa: 0x1f41, 0xdab: 0x0018, 0xdac: 0x0018, 0xdad: 0x0018, 0xdae: 0x0018, 0xdaf: 0x0018,
+ 0xdb0: 0x0018, 0xdb1: 0x0018, 0xdb2: 0x0018, 0xdb3: 0x0018, 0xdb4: 0x0018, 0xdb5: 0x0018,
+ 0xdb6: 0x0018, 0xdb7: 0x0018, 0xdb8: 0x0018, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018,
0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018,
// Block 0x37, offset 0xdc0
- 0xdc0: 0x26fd, 0xdc1: 0x271d, 0xdc2: 0x273d, 0xdc3: 0x275d, 0xdc4: 0x277d, 0xdc5: 0x279d,
- 0xdc6: 0x27bd, 0xdc7: 0x27dd, 0xdc8: 0x27fd, 0xdc9: 0x281d, 0xdca: 0x283d, 0xdcb: 0x285d,
- 0xdcc: 0x287d, 0xdcd: 0x289d, 0xdce: 0x28bd, 0xdcf: 0x28dd, 0xdd0: 0x28fd, 0xdd1: 0x291d,
- 0xdd2: 0x293d, 0xdd3: 0x295d, 0xdd4: 0x297d, 0xdd5: 0x299d, 0xdd6: 0x0040, 0xdd7: 0x0040,
- 0xdd8: 0x0040, 0xdd9: 0x0040, 0xdda: 0x0040, 0xddb: 0x0040, 0xddc: 0x0040, 0xddd: 0x0040,
- 0xdde: 0x0040, 0xddf: 0x0040, 0xde0: 0x0040, 0xde1: 0x0040, 0xde2: 0x0040, 0xde3: 0x0040,
- 0xde4: 0x0040, 0xde5: 0x0040, 0xde6: 0x0040, 0xde7: 0x0040, 0xde8: 0x0040, 0xde9: 0x0040,
- 0xdea: 0x0040, 0xdeb: 0x0040, 0xdec: 0x0040, 0xded: 0x0040, 0xdee: 0x0040, 0xdef: 0x0040,
- 0xdf0: 0x0040, 0xdf1: 0x0040, 0xdf2: 0x0040, 0xdf3: 0x0040, 0xdf4: 0x0040, 0xdf5: 0x0040,
- 0xdf6: 0x0040, 0xdf7: 0x0040, 0xdf8: 0x0040, 0xdf9: 0x0040, 0xdfa: 0x0040, 0xdfb: 0x0040,
- 0xdfc: 0x0040, 0xdfd: 0x0040, 0xdfe: 0x0040, 0xdff: 0x0040,
+ 0xdc0: 0x0008, 0xdc1: 0x0008, 0xdc2: 0x0008, 0xdc3: 0x0008, 0xdc4: 0x0008, 0xdc5: 0x0008,
+ 0xdc6: 0x0008, 0xdc7: 0x0008, 0xdc8: 0x0008, 0xdc9: 0x0008, 0xdca: 0x0008, 0xdcb: 0x0008,
+ 0xdcc: 0x0008, 0xdcd: 0x0008, 0xdce: 0x0008, 0xdcf: 0x0008, 0xdd0: 0x0008, 0xdd1: 0x0008,
+ 0xdd2: 0x0008, 0xdd3: 0x0008, 0xdd4: 0x0008, 0xdd5: 0x0008, 0xdd6: 0x0008, 0xdd7: 0x0008,
+ 0xdd8: 0x0008, 0xdd9: 0x0008, 0xdda: 0x0008, 0xddb: 0x0008, 0xddc: 0x0008, 0xddd: 0x0008,
+ 0xdde: 0x0008, 0xddf: 0x0040, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0x2971, 0xde3: 0x0ebd,
+ 0xde4: 0x2989, 0xde5: 0x0008, 0xde6: 0x0008, 0xde7: 0xe07d, 0xde8: 0x0008, 0xde9: 0xe01d,
+ 0xdea: 0x0008, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0x0fe1, 0xdee: 0x1281, 0xdef: 0x0fc9,
+ 0xdf0: 0x1141, 0xdf1: 0x0008, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0008, 0xdf5: 0xe01d,
+ 0xdf6: 0x0008, 0xdf7: 0x0008, 0xdf8: 0x0008, 0xdf9: 0x0008, 0xdfa: 0x0008, 0xdfb: 0x0008,
+ 0xdfc: 0x0259, 0xdfd: 0x1089, 0xdfe: 0x29a1, 0xdff: 0x29b9,
// Block 0x38, offset 0xe00
- 0xe00: 0x000a, 0xe01: 0x0018, 0xe02: 0x29d1, 0xe03: 0x0018, 0xe04: 0x0018, 0xe05: 0x0008,
- 0xe06: 0x0008, 0xe07: 0x0008, 0xe08: 0x0018, 0xe09: 0x0018, 0xe0a: 0x0018, 0xe0b: 0x0018,
- 0xe0c: 0x0018, 0xe0d: 0x0018, 0xe0e: 0x0018, 0xe0f: 0x0018, 0xe10: 0x0018, 0xe11: 0x0018,
- 0xe12: 0x0018, 0xe13: 0x0018, 0xe14: 0x0018, 0xe15: 0x0018, 0xe16: 0x0018, 0xe17: 0x0018,
- 0xe18: 0x0018, 0xe19: 0x0018, 0xe1a: 0x0018, 0xe1b: 0x0018, 0xe1c: 0x0018, 0xe1d: 0x0018,
- 0xe1e: 0x0018, 0xe1f: 0x0018, 0xe20: 0x0018, 0xe21: 0x0018, 0xe22: 0x0018, 0xe23: 0x0018,
- 0xe24: 0x0018, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018,
- 0xe2a: 0x1308, 0xe2b: 0x1308, 0xe2c: 0x1308, 0xe2d: 0x1308, 0xe2e: 0x1018, 0xe2f: 0x1018,
- 0xe30: 0x0018, 0xe31: 0x0018, 0xe32: 0x0018, 0xe33: 0x0018, 0xe34: 0x0018, 0xe35: 0x0018,
- 0xe36: 0xe125, 0xe37: 0x0018, 0xe38: 0x29bd, 0xe39: 0x29dd, 0xe3a: 0x29fd, 0xe3b: 0x0018,
- 0xe3c: 0x0008, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018,
+ 0xe00: 0xe00d, 0xe01: 0x0008, 0xe02: 0xe00d, 0xe03: 0x0008, 0xe04: 0xe00d, 0xe05: 0x0008,
+ 0xe06: 0xe00d, 0xe07: 0x0008, 0xe08: 0xe00d, 0xe09: 0x0008, 0xe0a: 0xe00d, 0xe0b: 0x0008,
+ 0xe0c: 0xe00d, 0xe0d: 0x0008, 0xe0e: 0xe00d, 0xe0f: 0x0008, 0xe10: 0xe00d, 0xe11: 0x0008,
+ 0xe12: 0xe00d, 0xe13: 0x0008, 0xe14: 0xe00d, 0xe15: 0x0008, 0xe16: 0xe00d, 0xe17: 0x0008,
+ 0xe18: 0xe00d, 0xe19: 0x0008, 0xe1a: 0xe00d, 0xe1b: 0x0008, 0xe1c: 0xe00d, 0xe1d: 0x0008,
+ 0xe1e: 0xe00d, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0xe00d, 0xe23: 0x0008,
+ 0xe24: 0x0008, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018,
+ 0xe2a: 0x0018, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0xe01d, 0xe2e: 0x0008, 0xe2f: 0x3308,
+ 0xe30: 0x3308, 0xe31: 0x3308, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0040, 0xe35: 0x0040,
+ 0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0018, 0xe3a: 0x0018, 0xe3b: 0x0018,
+ 0xe3c: 0x0018, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018,
// Block 0x39, offset 0xe40
- 0xe40: 0x2b3d, 0xe41: 0x2b5d, 0xe42: 0x2b7d, 0xe43: 0x2b9d, 0xe44: 0x2bbd, 0xe45: 0x2bdd,
- 0xe46: 0x2bdd, 0xe47: 0x2bdd, 0xe48: 0x2bfd, 0xe49: 0x2bfd, 0xe4a: 0x2bfd, 0xe4b: 0x2bfd,
- 0xe4c: 0x2c1d, 0xe4d: 0x2c1d, 0xe4e: 0x2c1d, 0xe4f: 0x2c3d, 0xe50: 0x2c5d, 0xe51: 0x2c5d,
- 0xe52: 0x2a7d, 0xe53: 0x2a7d, 0xe54: 0x2c5d, 0xe55: 0x2c5d, 0xe56: 0x2c7d, 0xe57: 0x2c7d,
- 0xe58: 0x2c5d, 0xe59: 0x2c5d, 0xe5a: 0x2a7d, 0xe5b: 0x2a7d, 0xe5c: 0x2c5d, 0xe5d: 0x2c5d,
- 0xe5e: 0x2c3d, 0xe5f: 0x2c3d, 0xe60: 0x2c9d, 0xe61: 0x2c9d, 0xe62: 0x2cbd, 0xe63: 0x2cbd,
- 0xe64: 0x0040, 0xe65: 0x2cdd, 0xe66: 0x2cfd, 0xe67: 0x2d1d, 0xe68: 0x2d1d, 0xe69: 0x2d3d,
- 0xe6a: 0x2d5d, 0xe6b: 0x2d7d, 0xe6c: 0x2d9d, 0xe6d: 0x2dbd, 0xe6e: 0x2ddd, 0xe6f: 0x2dfd,
- 0xe70: 0x2e1d, 0xe71: 0x2e3d, 0xe72: 0x2e3d, 0xe73: 0x2e5d, 0xe74: 0x2e7d, 0xe75: 0x2e7d,
- 0xe76: 0x2e9d, 0xe77: 0x2ebd, 0xe78: 0x2e5d, 0xe79: 0x2edd, 0xe7a: 0x2efd, 0xe7b: 0x2edd,
- 0xe7c: 0x2e5d, 0xe7d: 0x2f1d, 0xe7e: 0x2f3d, 0xe7f: 0x2f5d,
+ 0xe40: 0x26fd, 0xe41: 0x271d, 0xe42: 0x273d, 0xe43: 0x275d, 0xe44: 0x277d, 0xe45: 0x279d,
+ 0xe46: 0x27bd, 0xe47: 0x27dd, 0xe48: 0x27fd, 0xe49: 0x281d, 0xe4a: 0x283d, 0xe4b: 0x285d,
+ 0xe4c: 0x287d, 0xe4d: 0x289d, 0xe4e: 0x28bd, 0xe4f: 0x28dd, 0xe50: 0x28fd, 0xe51: 0x291d,
+ 0xe52: 0x293d, 0xe53: 0x295d, 0xe54: 0x297d, 0xe55: 0x299d, 0xe56: 0x0040, 0xe57: 0x0040,
+ 0xe58: 0x0040, 0xe59: 0x0040, 0xe5a: 0x0040, 0xe5b: 0x0040, 0xe5c: 0x0040, 0xe5d: 0x0040,
+ 0xe5e: 0x0040, 0xe5f: 0x0040, 0xe60: 0x0040, 0xe61: 0x0040, 0xe62: 0x0040, 0xe63: 0x0040,
+ 0xe64: 0x0040, 0xe65: 0x0040, 0xe66: 0x0040, 0xe67: 0x0040, 0xe68: 0x0040, 0xe69: 0x0040,
+ 0xe6a: 0x0040, 0xe6b: 0x0040, 0xe6c: 0x0040, 0xe6d: 0x0040, 0xe6e: 0x0040, 0xe6f: 0x0040,
+ 0xe70: 0x0040, 0xe71: 0x0040, 0xe72: 0x0040, 0xe73: 0x0040, 0xe74: 0x0040, 0xe75: 0x0040,
+ 0xe76: 0x0040, 0xe77: 0x0040, 0xe78: 0x0040, 0xe79: 0x0040, 0xe7a: 0x0040, 0xe7b: 0x0040,
+ 0xe7c: 0x0040, 0xe7d: 0x0040, 0xe7e: 0x0040, 0xe7f: 0x0040,
// Block 0x3a, offset 0xe80
- 0xe80: 0x2f7d, 0xe81: 0x2f9d, 0xe82: 0x2cfd, 0xe83: 0x2cdd, 0xe84: 0x2fbd, 0xe85: 0x2fdd,
- 0xe86: 0x2ffd, 0xe87: 0x301d, 0xe88: 0x303d, 0xe89: 0x305d, 0xe8a: 0x307d, 0xe8b: 0x309d,
- 0xe8c: 0x30bd, 0xe8d: 0x30dd, 0xe8e: 0x30fd, 0xe8f: 0x0040, 0xe90: 0x0018, 0xe91: 0x0018,
- 0xe92: 0x311d, 0xe93: 0x313d, 0xe94: 0x315d, 0xe95: 0x317d, 0xe96: 0x319d, 0xe97: 0x31bd,
- 0xe98: 0x31dd, 0xe99: 0x31fd, 0xe9a: 0x321d, 0xe9b: 0x323d, 0xe9c: 0x315d, 0xe9d: 0x325d,
- 0xe9e: 0x327d, 0xe9f: 0x329d, 0xea0: 0x0008, 0xea1: 0x0008, 0xea2: 0x0008, 0xea3: 0x0008,
- 0xea4: 0x0008, 0xea5: 0x0008, 0xea6: 0x0008, 0xea7: 0x0008, 0xea8: 0x0008, 0xea9: 0x0008,
- 0xeaa: 0x0008, 0xeab: 0x0008, 0xeac: 0x0008, 0xead: 0x0008, 0xeae: 0x0008, 0xeaf: 0x0008,
- 0xeb0: 0x0008, 0xeb1: 0x0008, 0xeb2: 0x0008, 0xeb3: 0x0008, 0xeb4: 0x0008, 0xeb5: 0x0008,
- 0xeb6: 0x0008, 0xeb7: 0x0008, 0xeb8: 0x0008, 0xeb9: 0x0008, 0xeba: 0x0008, 0xebb: 0x0040,
- 0xebc: 0x0040, 0xebd: 0x0040, 0xebe: 0x0040, 0xebf: 0x0040,
+ 0xe80: 0x000a, 0xe81: 0x0018, 0xe82: 0x29d1, 0xe83: 0x0018, 0xe84: 0x0018, 0xe85: 0x0008,
+ 0xe86: 0x0008, 0xe87: 0x0008, 0xe88: 0x0018, 0xe89: 0x0018, 0xe8a: 0x0018, 0xe8b: 0x0018,
+ 0xe8c: 0x0018, 0xe8d: 0x0018, 0xe8e: 0x0018, 0xe8f: 0x0018, 0xe90: 0x0018, 0xe91: 0x0018,
+ 0xe92: 0x0018, 0xe93: 0x0018, 0xe94: 0x0018, 0xe95: 0x0018, 0xe96: 0x0018, 0xe97: 0x0018,
+ 0xe98: 0x0018, 0xe99: 0x0018, 0xe9a: 0x0018, 0xe9b: 0x0018, 0xe9c: 0x0018, 0xe9d: 0x0018,
+ 0xe9e: 0x0018, 0xe9f: 0x0018, 0xea0: 0x0018, 0xea1: 0x0018, 0xea2: 0x0018, 0xea3: 0x0018,
+ 0xea4: 0x0018, 0xea5: 0x0018, 0xea6: 0x0018, 0xea7: 0x0018, 0xea8: 0x0018, 0xea9: 0x0018,
+ 0xeaa: 0x3308, 0xeab: 0x3308, 0xeac: 0x3308, 0xead: 0x3308, 0xeae: 0x3018, 0xeaf: 0x3018,
+ 0xeb0: 0x0018, 0xeb1: 0x0018, 0xeb2: 0x0018, 0xeb3: 0x0018, 0xeb4: 0x0018, 0xeb5: 0x0018,
+ 0xeb6: 0xe125, 0xeb7: 0x0018, 0xeb8: 0x29bd, 0xeb9: 0x29dd, 0xeba: 0x29fd, 0xebb: 0x0018,
+ 0xebc: 0x0008, 0xebd: 0x0018, 0xebe: 0x0018, 0xebf: 0x0018,
// Block 0x3b, offset 0xec0
- 0xec0: 0x36a2, 0xec1: 0x36d2, 0xec2: 0x3702, 0xec3: 0x3732, 0xec4: 0x32bd, 0xec5: 0x32dd,
- 0xec6: 0x32fd, 0xec7: 0x331d, 0xec8: 0x0018, 0xec9: 0x0018, 0xeca: 0x0018, 0xecb: 0x0018,
- 0xecc: 0x0018, 0xecd: 0x0018, 0xece: 0x0018, 0xecf: 0x0018, 0xed0: 0x333d, 0xed1: 0x3761,
- 0xed2: 0x3779, 0xed3: 0x3791, 0xed4: 0x37a9, 0xed5: 0x37c1, 0xed6: 0x37d9, 0xed7: 0x37f1,
- 0xed8: 0x3809, 0xed9: 0x3821, 0xeda: 0x3839, 0xedb: 0x3851, 0xedc: 0x3869, 0xedd: 0x3881,
- 0xede: 0x3899, 0xedf: 0x38b1, 0xee0: 0x335d, 0xee1: 0x337d, 0xee2: 0x339d, 0xee3: 0x33bd,
- 0xee4: 0x33dd, 0xee5: 0x33dd, 0xee6: 0x33fd, 0xee7: 0x341d, 0xee8: 0x343d, 0xee9: 0x345d,
- 0xeea: 0x347d, 0xeeb: 0x349d, 0xeec: 0x34bd, 0xeed: 0x34dd, 0xeee: 0x34fd, 0xeef: 0x351d,
- 0xef0: 0x353d, 0xef1: 0x355d, 0xef2: 0x357d, 0xef3: 0x359d, 0xef4: 0x35bd, 0xef5: 0x35dd,
- 0xef6: 0x35fd, 0xef7: 0x361d, 0xef8: 0x363d, 0xef9: 0x365d, 0xefa: 0x367d, 0xefb: 0x369d,
- 0xefc: 0x38c9, 0xefd: 0x3901, 0xefe: 0x36bd, 0xeff: 0x0018,
+ 0xec0: 0x2b3d, 0xec1: 0x2b5d, 0xec2: 0x2b7d, 0xec3: 0x2b9d, 0xec4: 0x2bbd, 0xec5: 0x2bdd,
+ 0xec6: 0x2bdd, 0xec7: 0x2bdd, 0xec8: 0x2bfd, 0xec9: 0x2bfd, 0xeca: 0x2bfd, 0xecb: 0x2bfd,
+ 0xecc: 0x2c1d, 0xecd: 0x2c1d, 0xece: 0x2c1d, 0xecf: 0x2c3d, 0xed0: 0x2c5d, 0xed1: 0x2c5d,
+ 0xed2: 0x2a7d, 0xed3: 0x2a7d, 0xed4: 0x2c5d, 0xed5: 0x2c5d, 0xed6: 0x2c7d, 0xed7: 0x2c7d,
+ 0xed8: 0x2c5d, 0xed9: 0x2c5d, 0xeda: 0x2a7d, 0xedb: 0x2a7d, 0xedc: 0x2c5d, 0xedd: 0x2c5d,
+ 0xede: 0x2c3d, 0xedf: 0x2c3d, 0xee0: 0x2c9d, 0xee1: 0x2c9d, 0xee2: 0x2cbd, 0xee3: 0x2cbd,
+ 0xee4: 0x0040, 0xee5: 0x2cdd, 0xee6: 0x2cfd, 0xee7: 0x2d1d, 0xee8: 0x2d1d, 0xee9: 0x2d3d,
+ 0xeea: 0x2d5d, 0xeeb: 0x2d7d, 0xeec: 0x2d9d, 0xeed: 0x2dbd, 0xeee: 0x2ddd, 0xeef: 0x2dfd,
+ 0xef0: 0x2e1d, 0xef1: 0x2e3d, 0xef2: 0x2e3d, 0xef3: 0x2e5d, 0xef4: 0x2e7d, 0xef5: 0x2e7d,
+ 0xef6: 0x2e9d, 0xef7: 0x2ebd, 0xef8: 0x2e5d, 0xef9: 0x2edd, 0xefa: 0x2efd, 0xefb: 0x2edd,
+ 0xefc: 0x2e5d, 0xefd: 0x2f1d, 0xefe: 0x2f3d, 0xeff: 0x2f5d,
// Block 0x3c, offset 0xf00
- 0xf00: 0x36dd, 0xf01: 0x36fd, 0xf02: 0x371d, 0xf03: 0x373d, 0xf04: 0x375d, 0xf05: 0x377d,
- 0xf06: 0x379d, 0xf07: 0x37bd, 0xf08: 0x37dd, 0xf09: 0x37fd, 0xf0a: 0x381d, 0xf0b: 0x383d,
- 0xf0c: 0x385d, 0xf0d: 0x387d, 0xf0e: 0x389d, 0xf0f: 0x38bd, 0xf10: 0x38dd, 0xf11: 0x38fd,
- 0xf12: 0x391d, 0xf13: 0x393d, 0xf14: 0x395d, 0xf15: 0x397d, 0xf16: 0x399d, 0xf17: 0x39bd,
- 0xf18: 0x39dd, 0xf19: 0x39fd, 0xf1a: 0x3a1d, 0xf1b: 0x3a3d, 0xf1c: 0x3a5d, 0xf1d: 0x3a7d,
- 0xf1e: 0x3a9d, 0xf1f: 0x3abd, 0xf20: 0x3add, 0xf21: 0x3afd, 0xf22: 0x3b1d, 0xf23: 0x3b3d,
- 0xf24: 0x3b5d, 0xf25: 0x3b7d, 0xf26: 0x127d, 0xf27: 0x3b9d, 0xf28: 0x3bbd, 0xf29: 0x3bdd,
- 0xf2a: 0x3bfd, 0xf2b: 0x3c1d, 0xf2c: 0x3c3d, 0xf2d: 0x3c5d, 0xf2e: 0x239d, 0xf2f: 0x3c7d,
- 0xf30: 0x3c9d, 0xf31: 0x3939, 0xf32: 0x3951, 0xf33: 0x3969, 0xf34: 0x3981, 0xf35: 0x3999,
- 0xf36: 0x39b1, 0xf37: 0x39c9, 0xf38: 0x39e1, 0xf39: 0x39f9, 0xf3a: 0x3a11, 0xf3b: 0x3a29,
- 0xf3c: 0x3a41, 0xf3d: 0x3a59, 0xf3e: 0x3a71, 0xf3f: 0x3a89,
+ 0xf00: 0x2f7d, 0xf01: 0x2f9d, 0xf02: 0x2cfd, 0xf03: 0x2cdd, 0xf04: 0x2fbd, 0xf05: 0x2fdd,
+ 0xf06: 0x2ffd, 0xf07: 0x301d, 0xf08: 0x303d, 0xf09: 0x305d, 0xf0a: 0x307d, 0xf0b: 0x309d,
+ 0xf0c: 0x30bd, 0xf0d: 0x30dd, 0xf0e: 0x30fd, 0xf0f: 0x0040, 0xf10: 0x0018, 0xf11: 0x0018,
+ 0xf12: 0x311d, 0xf13: 0x313d, 0xf14: 0x315d, 0xf15: 0x317d, 0xf16: 0x319d, 0xf17: 0x31bd,
+ 0xf18: 0x31dd, 0xf19: 0x31fd, 0xf1a: 0x321d, 0xf1b: 0x323d, 0xf1c: 0x315d, 0xf1d: 0x325d,
+ 0xf1e: 0x327d, 0xf1f: 0x329d, 0xf20: 0x0008, 0xf21: 0x0008, 0xf22: 0x0008, 0xf23: 0x0008,
+ 0xf24: 0x0008, 0xf25: 0x0008, 0xf26: 0x0008, 0xf27: 0x0008, 0xf28: 0x0008, 0xf29: 0x0008,
+ 0xf2a: 0x0008, 0xf2b: 0x0008, 0xf2c: 0x0008, 0xf2d: 0x0008, 0xf2e: 0x0008, 0xf2f: 0x0008,
+ 0xf30: 0x0008, 0xf31: 0x0008, 0xf32: 0x0008, 0xf33: 0x0008, 0xf34: 0x0008, 0xf35: 0x0008,
+ 0xf36: 0x0008, 0xf37: 0x0008, 0xf38: 0x0008, 0xf39: 0x0008, 0xf3a: 0x0008, 0xf3b: 0x0040,
+ 0xf3c: 0x0040, 0xf3d: 0x0040, 0xf3e: 0x0040, 0xf3f: 0x0040,
// Block 0x3d, offset 0xf40
- 0xf40: 0x3aa1, 0xf41: 0x3ac9, 0xf42: 0x3af1, 0xf43: 0x3b19, 0xf44: 0x3b41, 0xf45: 0x3b69,
- 0xf46: 0x3b91, 0xf47: 0x3bb9, 0xf48: 0x3be1, 0xf49: 0x3c09, 0xf4a: 0x3c39, 0xf4b: 0x3c69,
- 0xf4c: 0x3c99, 0xf4d: 0x3cbd, 0xf4e: 0x3cb1, 0xf4f: 0x3cdd, 0xf50: 0x3cfd, 0xf51: 0x3d15,
- 0xf52: 0x3d2d, 0xf53: 0x3d45, 0xf54: 0x3d5d, 0xf55: 0x3d5d, 0xf56: 0x3d45, 0xf57: 0x3d75,
- 0xf58: 0x07bd, 0xf59: 0x3d8d, 0xf5a: 0x3da5, 0xf5b: 0x3dbd, 0xf5c: 0x3dd5, 0xf5d: 0x3ded,
- 0xf5e: 0x3e05, 0xf5f: 0x3e1d, 0xf60: 0x3e35, 0xf61: 0x3e4d, 0xf62: 0x3e65, 0xf63: 0x3e7d,
- 0xf64: 0x3e95, 0xf65: 0x3e95, 0xf66: 0x3ead, 0xf67: 0x3ead, 0xf68: 0x3ec5, 0xf69: 0x3ec5,
- 0xf6a: 0x3edd, 0xf6b: 0x3ef5, 0xf6c: 0x3f0d, 0xf6d: 0x3f25, 0xf6e: 0x3f3d, 0xf6f: 0x3f3d,
- 0xf70: 0x3f55, 0xf71: 0x3f55, 0xf72: 0x3f55, 0xf73: 0x3f6d, 0xf74: 0x3f85, 0xf75: 0x3f9d,
- 0xf76: 0x3fb5, 0xf77: 0x3f9d, 0xf78: 0x3fcd, 0xf79: 0x3fe5, 0xf7a: 0x3f6d, 0xf7b: 0x3ffd,
- 0xf7c: 0x4015, 0xf7d: 0x4015, 0xf7e: 0x4015, 0xf7f: 0x0040,
+ 0xf40: 0x36a2, 0xf41: 0x36d2, 0xf42: 0x3702, 0xf43: 0x3732, 0xf44: 0x32bd, 0xf45: 0x32dd,
+ 0xf46: 0x32fd, 0xf47: 0x331d, 0xf48: 0x0018, 0xf49: 0x0018, 0xf4a: 0x0018, 0xf4b: 0x0018,
+ 0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x333d, 0xf51: 0x3761,
+ 0xf52: 0x3779, 0xf53: 0x3791, 0xf54: 0x37a9, 0xf55: 0x37c1, 0xf56: 0x37d9, 0xf57: 0x37f1,
+ 0xf58: 0x3809, 0xf59: 0x3821, 0xf5a: 0x3839, 0xf5b: 0x3851, 0xf5c: 0x3869, 0xf5d: 0x3881,
+ 0xf5e: 0x3899, 0xf5f: 0x38b1, 0xf60: 0x335d, 0xf61: 0x337d, 0xf62: 0x339d, 0xf63: 0x33bd,
+ 0xf64: 0x33dd, 0xf65: 0x33dd, 0xf66: 0x33fd, 0xf67: 0x341d, 0xf68: 0x343d, 0xf69: 0x345d,
+ 0xf6a: 0x347d, 0xf6b: 0x349d, 0xf6c: 0x34bd, 0xf6d: 0x34dd, 0xf6e: 0x34fd, 0xf6f: 0x351d,
+ 0xf70: 0x353d, 0xf71: 0x355d, 0xf72: 0x357d, 0xf73: 0x359d, 0xf74: 0x35bd, 0xf75: 0x35dd,
+ 0xf76: 0x35fd, 0xf77: 0x361d, 0xf78: 0x363d, 0xf79: 0x365d, 0xf7a: 0x367d, 0xf7b: 0x369d,
+ 0xf7c: 0x38c9, 0xf7d: 0x3901, 0xf7e: 0x36bd, 0xf7f: 0x0018,
// Block 0x3e, offset 0xf80
- 0xf80: 0x3cc9, 0xf81: 0x3d31, 0xf82: 0x3d99, 0xf83: 0x3e01, 0xf84: 0x3e51, 0xf85: 0x3eb9,
- 0xf86: 0x3f09, 0xf87: 0x3f59, 0xf88: 0x3fd9, 0xf89: 0x4041, 0xf8a: 0x4091, 0xf8b: 0x40e1,
- 0xf8c: 0x4131, 0xf8d: 0x4199, 0xf8e: 0x4201, 0xf8f: 0x4251, 0xf90: 0x42a1, 0xf91: 0x42d9,
- 0xf92: 0x4329, 0xf93: 0x4391, 0xf94: 0x43f9, 0xf95: 0x4431, 0xf96: 0x44b1, 0xf97: 0x4549,
- 0xf98: 0x45c9, 0xf99: 0x4619, 0xf9a: 0x4699, 0xf9b: 0x4719, 0xf9c: 0x4781, 0xf9d: 0x47d1,
- 0xf9e: 0x4821, 0xf9f: 0x4871, 0xfa0: 0x48d9, 0xfa1: 0x4959, 0xfa2: 0x49c1, 0xfa3: 0x4a11,
- 0xfa4: 0x4a61, 0xfa5: 0x4ab1, 0xfa6: 0x4ae9, 0xfa7: 0x4b21, 0xfa8: 0x4b59, 0xfa9: 0x4b91,
- 0xfaa: 0x4be1, 0xfab: 0x4c31, 0xfac: 0x4cb1, 0xfad: 0x4d01, 0xfae: 0x4d69, 0xfaf: 0x4de9,
- 0xfb0: 0x4e39, 0xfb1: 0x4e71, 0xfb2: 0x4ea9, 0xfb3: 0x4f29, 0xfb4: 0x4f91, 0xfb5: 0x5011,
- 0xfb6: 0x5061, 0xfb7: 0x50e1, 0xfb8: 0x5119, 0xfb9: 0x5169, 0xfba: 0x51b9, 0xfbb: 0x5209,
- 0xfbc: 0x5259, 0xfbd: 0x52a9, 0xfbe: 0x5311, 0xfbf: 0x5361,
+ 0xf80: 0x36dd, 0xf81: 0x36fd, 0xf82: 0x371d, 0xf83: 0x373d, 0xf84: 0x375d, 0xf85: 0x377d,
+ 0xf86: 0x379d, 0xf87: 0x37bd, 0xf88: 0x37dd, 0xf89: 0x37fd, 0xf8a: 0x381d, 0xf8b: 0x383d,
+ 0xf8c: 0x385d, 0xf8d: 0x387d, 0xf8e: 0x389d, 0xf8f: 0x38bd, 0xf90: 0x38dd, 0xf91: 0x38fd,
+ 0xf92: 0x391d, 0xf93: 0x393d, 0xf94: 0x395d, 0xf95: 0x397d, 0xf96: 0x399d, 0xf97: 0x39bd,
+ 0xf98: 0x39dd, 0xf99: 0x39fd, 0xf9a: 0x3a1d, 0xf9b: 0x3a3d, 0xf9c: 0x3a5d, 0xf9d: 0x3a7d,
+ 0xf9e: 0x3a9d, 0xf9f: 0x3abd, 0xfa0: 0x3add, 0xfa1: 0x3afd, 0xfa2: 0x3b1d, 0xfa3: 0x3b3d,
+ 0xfa4: 0x3b5d, 0xfa5: 0x3b7d, 0xfa6: 0x127d, 0xfa7: 0x3b9d, 0xfa8: 0x3bbd, 0xfa9: 0x3bdd,
+ 0xfaa: 0x3bfd, 0xfab: 0x3c1d, 0xfac: 0x3c3d, 0xfad: 0x3c5d, 0xfae: 0x239d, 0xfaf: 0x3c7d,
+ 0xfb0: 0x3c9d, 0xfb1: 0x3939, 0xfb2: 0x3951, 0xfb3: 0x3969, 0xfb4: 0x3981, 0xfb5: 0x3999,
+ 0xfb6: 0x39b1, 0xfb7: 0x39c9, 0xfb8: 0x39e1, 0xfb9: 0x39f9, 0xfba: 0x3a11, 0xfbb: 0x3a29,
+ 0xfbc: 0x3a41, 0xfbd: 0x3a59, 0xfbe: 0x3a71, 0xfbf: 0x3a89,
// Block 0x3f, offset 0xfc0
- 0xfc0: 0x5399, 0xfc1: 0x53e9, 0xfc2: 0x5439, 0xfc3: 0x5489, 0xfc4: 0x54f1, 0xfc5: 0x5541,
- 0xfc6: 0x5591, 0xfc7: 0x55e1, 0xfc8: 0x5661, 0xfc9: 0x56c9, 0xfca: 0x5701, 0xfcb: 0x5781,
- 0xfcc: 0x57b9, 0xfcd: 0x5821, 0xfce: 0x5889, 0xfcf: 0x58d9, 0xfd0: 0x5929, 0xfd1: 0x5979,
- 0xfd2: 0x59e1, 0xfd3: 0x5a19, 0xfd4: 0x5a69, 0xfd5: 0x5ad1, 0xfd6: 0x5b09, 0xfd7: 0x5b89,
- 0xfd8: 0x5bd9, 0xfd9: 0x5c01, 0xfda: 0x5c29, 0xfdb: 0x5c51, 0xfdc: 0x5c79, 0xfdd: 0x5ca1,
- 0xfde: 0x5cc9, 0xfdf: 0x5cf1, 0xfe0: 0x5d19, 0xfe1: 0x5d41, 0xfe2: 0x5d69, 0xfe3: 0x5d99,
- 0xfe4: 0x5dc9, 0xfe5: 0x5df9, 0xfe6: 0x5e29, 0xfe7: 0x5e59, 0xfe8: 0x5e89, 0xfe9: 0x5eb9,
- 0xfea: 0x5ee9, 0xfeb: 0x5f19, 0xfec: 0x5f49, 0xfed: 0x5f79, 0xfee: 0x5fa9, 0xfef: 0x5fd9,
- 0xff0: 0x6009, 0xff1: 0x402d, 0xff2: 0x6039, 0xff3: 0x6051, 0xff4: 0x404d, 0xff5: 0x6069,
- 0xff6: 0x6081, 0xff7: 0x6099, 0xff8: 0x406d, 0xff9: 0x406d, 0xffa: 0x60b1, 0xffb: 0x60c9,
- 0xffc: 0x6101, 0xffd: 0x6139, 0xffe: 0x6171, 0xfff: 0x61a9,
+ 0xfc0: 0x3aa1, 0xfc1: 0x3ac9, 0xfc2: 0x3af1, 0xfc3: 0x3b19, 0xfc4: 0x3b41, 0xfc5: 0x3b69,
+ 0xfc6: 0x3b91, 0xfc7: 0x3bb9, 0xfc8: 0x3be1, 0xfc9: 0x3c09, 0xfca: 0x3c39, 0xfcb: 0x3c69,
+ 0xfcc: 0x3c99, 0xfcd: 0x3cbd, 0xfce: 0x3cb1, 0xfcf: 0x3cdd, 0xfd0: 0x3cfd, 0xfd1: 0x3d15,
+ 0xfd2: 0x3d2d, 0xfd3: 0x3d45, 0xfd4: 0x3d5d, 0xfd5: 0x3d5d, 0xfd6: 0x3d45, 0xfd7: 0x3d75,
+ 0xfd8: 0x07bd, 0xfd9: 0x3d8d, 0xfda: 0x3da5, 0xfdb: 0x3dbd, 0xfdc: 0x3dd5, 0xfdd: 0x3ded,
+ 0xfde: 0x3e05, 0xfdf: 0x3e1d, 0xfe0: 0x3e35, 0xfe1: 0x3e4d, 0xfe2: 0x3e65, 0xfe3: 0x3e7d,
+ 0xfe4: 0x3e95, 0xfe5: 0x3e95, 0xfe6: 0x3ead, 0xfe7: 0x3ead, 0xfe8: 0x3ec5, 0xfe9: 0x3ec5,
+ 0xfea: 0x3edd, 0xfeb: 0x3ef5, 0xfec: 0x3f0d, 0xfed: 0x3f25, 0xfee: 0x3f3d, 0xfef: 0x3f3d,
+ 0xff0: 0x3f55, 0xff1: 0x3f55, 0xff2: 0x3f55, 0xff3: 0x3f6d, 0xff4: 0x3f85, 0xff5: 0x3f9d,
+ 0xff6: 0x3fb5, 0xff7: 0x3f9d, 0xff8: 0x3fcd, 0xff9: 0x3fe5, 0xffa: 0x3f6d, 0xffb: 0x3ffd,
+ 0xffc: 0x4015, 0xffd: 0x4015, 0xffe: 0x4015, 0xfff: 0x0040,
// Block 0x40, offset 0x1000
- 0x1000: 0x6211, 0x1001: 0x6229, 0x1002: 0x408d, 0x1003: 0x6241, 0x1004: 0x6259, 0x1005: 0x6271,
- 0x1006: 0x6289, 0x1007: 0x62a1, 0x1008: 0x40ad, 0x1009: 0x62b9, 0x100a: 0x62e1, 0x100b: 0x62f9,
- 0x100c: 0x40cd, 0x100d: 0x40cd, 0x100e: 0x6311, 0x100f: 0x6329, 0x1010: 0x6341, 0x1011: 0x40ed,
- 0x1012: 0x410d, 0x1013: 0x412d, 0x1014: 0x414d, 0x1015: 0x416d, 0x1016: 0x6359, 0x1017: 0x6371,
- 0x1018: 0x6389, 0x1019: 0x63a1, 0x101a: 0x63b9, 0x101b: 0x418d, 0x101c: 0x63d1, 0x101d: 0x63e9,
- 0x101e: 0x6401, 0x101f: 0x41ad, 0x1020: 0x41cd, 0x1021: 0x6419, 0x1022: 0x41ed, 0x1023: 0x420d,
- 0x1024: 0x422d, 0x1025: 0x6431, 0x1026: 0x424d, 0x1027: 0x6449, 0x1028: 0x6479, 0x1029: 0x6211,
- 0x102a: 0x426d, 0x102b: 0x428d, 0x102c: 0x42ad, 0x102d: 0x42cd, 0x102e: 0x64b1, 0x102f: 0x64f1,
- 0x1030: 0x6539, 0x1031: 0x6551, 0x1032: 0x42ed, 0x1033: 0x6569, 0x1034: 0x6581, 0x1035: 0x6599,
- 0x1036: 0x430d, 0x1037: 0x65b1, 0x1038: 0x65c9, 0x1039: 0x65b1, 0x103a: 0x65e1, 0x103b: 0x65f9,
- 0x103c: 0x432d, 0x103d: 0x6611, 0x103e: 0x6629, 0x103f: 0x6611,
+ 0x1000: 0x3cc9, 0x1001: 0x3d31, 0x1002: 0x3d99, 0x1003: 0x3e01, 0x1004: 0x3e51, 0x1005: 0x3eb9,
+ 0x1006: 0x3f09, 0x1007: 0x3f59, 0x1008: 0x3fd9, 0x1009: 0x4041, 0x100a: 0x4091, 0x100b: 0x40e1,
+ 0x100c: 0x4131, 0x100d: 0x4199, 0x100e: 0x4201, 0x100f: 0x4251, 0x1010: 0x42a1, 0x1011: 0x42d9,
+ 0x1012: 0x4329, 0x1013: 0x4391, 0x1014: 0x43f9, 0x1015: 0x4431, 0x1016: 0x44b1, 0x1017: 0x4549,
+ 0x1018: 0x45c9, 0x1019: 0x4619, 0x101a: 0x4699, 0x101b: 0x4719, 0x101c: 0x4781, 0x101d: 0x47d1,
+ 0x101e: 0x4821, 0x101f: 0x4871, 0x1020: 0x48d9, 0x1021: 0x4959, 0x1022: 0x49c1, 0x1023: 0x4a11,
+ 0x1024: 0x4a61, 0x1025: 0x4ab1, 0x1026: 0x4ae9, 0x1027: 0x4b21, 0x1028: 0x4b59, 0x1029: 0x4b91,
+ 0x102a: 0x4be1, 0x102b: 0x4c31, 0x102c: 0x4cb1, 0x102d: 0x4d01, 0x102e: 0x4d69, 0x102f: 0x4de9,
+ 0x1030: 0x4e39, 0x1031: 0x4e71, 0x1032: 0x4ea9, 0x1033: 0x4f29, 0x1034: 0x4f91, 0x1035: 0x5011,
+ 0x1036: 0x5061, 0x1037: 0x50e1, 0x1038: 0x5119, 0x1039: 0x5169, 0x103a: 0x51b9, 0x103b: 0x5209,
+ 0x103c: 0x5259, 0x103d: 0x52a9, 0x103e: 0x5311, 0x103f: 0x5361,
// Block 0x41, offset 0x1040
- 0x1040: 0x434d, 0x1041: 0x436d, 0x1042: 0x0040, 0x1043: 0x6641, 0x1044: 0x6659, 0x1045: 0x6671,
- 0x1046: 0x6689, 0x1047: 0x0040, 0x1048: 0x66c1, 0x1049: 0x66d9, 0x104a: 0x66f1, 0x104b: 0x6709,
- 0x104c: 0x6721, 0x104d: 0x6739, 0x104e: 0x6401, 0x104f: 0x6751, 0x1050: 0x6769, 0x1051: 0x6781,
- 0x1052: 0x438d, 0x1053: 0x6799, 0x1054: 0x6289, 0x1055: 0x43ad, 0x1056: 0x43cd, 0x1057: 0x67b1,
- 0x1058: 0x0040, 0x1059: 0x43ed, 0x105a: 0x67c9, 0x105b: 0x67e1, 0x105c: 0x67f9, 0x105d: 0x6811,
- 0x105e: 0x6829, 0x105f: 0x6859, 0x1060: 0x6889, 0x1061: 0x68b1, 0x1062: 0x68d9, 0x1063: 0x6901,
- 0x1064: 0x6929, 0x1065: 0x6951, 0x1066: 0x6979, 0x1067: 0x69a1, 0x1068: 0x69c9, 0x1069: 0x69f1,
- 0x106a: 0x6a21, 0x106b: 0x6a51, 0x106c: 0x6a81, 0x106d: 0x6ab1, 0x106e: 0x6ae1, 0x106f: 0x6b11,
- 0x1070: 0x6b41, 0x1071: 0x6b71, 0x1072: 0x6ba1, 0x1073: 0x6bd1, 0x1074: 0x6c01, 0x1075: 0x6c31,
- 0x1076: 0x6c61, 0x1077: 0x6c91, 0x1078: 0x6cc1, 0x1079: 0x6cf1, 0x107a: 0x6d21, 0x107b: 0x6d51,
- 0x107c: 0x6d81, 0x107d: 0x6db1, 0x107e: 0x6de1, 0x107f: 0x440d,
+ 0x1040: 0x5399, 0x1041: 0x53e9, 0x1042: 0x5439, 0x1043: 0x5489, 0x1044: 0x54f1, 0x1045: 0x5541,
+ 0x1046: 0x5591, 0x1047: 0x55e1, 0x1048: 0x5661, 0x1049: 0x56c9, 0x104a: 0x5701, 0x104b: 0x5781,
+ 0x104c: 0x57b9, 0x104d: 0x5821, 0x104e: 0x5889, 0x104f: 0x58d9, 0x1050: 0x5929, 0x1051: 0x5979,
+ 0x1052: 0x59e1, 0x1053: 0x5a19, 0x1054: 0x5a69, 0x1055: 0x5ad1, 0x1056: 0x5b09, 0x1057: 0x5b89,
+ 0x1058: 0x5bd9, 0x1059: 0x5c01, 0x105a: 0x5c29, 0x105b: 0x5c51, 0x105c: 0x5c79, 0x105d: 0x5ca1,
+ 0x105e: 0x5cc9, 0x105f: 0x5cf1, 0x1060: 0x5d19, 0x1061: 0x5d41, 0x1062: 0x5d69, 0x1063: 0x5d99,
+ 0x1064: 0x5dc9, 0x1065: 0x5df9, 0x1066: 0x5e29, 0x1067: 0x5e59, 0x1068: 0x5e89, 0x1069: 0x5eb9,
+ 0x106a: 0x5ee9, 0x106b: 0x5f19, 0x106c: 0x5f49, 0x106d: 0x5f79, 0x106e: 0x5fa9, 0x106f: 0x5fd9,
+ 0x1070: 0x6009, 0x1071: 0x402d, 0x1072: 0x6039, 0x1073: 0x6051, 0x1074: 0x404d, 0x1075: 0x6069,
+ 0x1076: 0x6081, 0x1077: 0x6099, 0x1078: 0x406d, 0x1079: 0x406d, 0x107a: 0x60b1, 0x107b: 0x60c9,
+ 0x107c: 0x6101, 0x107d: 0x6139, 0x107e: 0x6171, 0x107f: 0x61a9,
// Block 0x42, offset 0x1080
- 0x1080: 0xe00d, 0x1081: 0x0008, 0x1082: 0xe00d, 0x1083: 0x0008, 0x1084: 0xe00d, 0x1085: 0x0008,
- 0x1086: 0xe00d, 0x1087: 0x0008, 0x1088: 0xe00d, 0x1089: 0x0008, 0x108a: 0xe00d, 0x108b: 0x0008,
- 0x108c: 0xe00d, 0x108d: 0x0008, 0x108e: 0xe00d, 0x108f: 0x0008, 0x1090: 0xe00d, 0x1091: 0x0008,
- 0x1092: 0xe00d, 0x1093: 0x0008, 0x1094: 0xe00d, 0x1095: 0x0008, 0x1096: 0xe00d, 0x1097: 0x0008,
- 0x1098: 0xe00d, 0x1099: 0x0008, 0x109a: 0xe00d, 0x109b: 0x0008, 0x109c: 0xe00d, 0x109d: 0x0008,
- 0x109e: 0xe00d, 0x109f: 0x0008, 0x10a0: 0xe00d, 0x10a1: 0x0008, 0x10a2: 0xe00d, 0x10a3: 0x0008,
- 0x10a4: 0xe00d, 0x10a5: 0x0008, 0x10a6: 0xe00d, 0x10a7: 0x0008, 0x10a8: 0xe00d, 0x10a9: 0x0008,
- 0x10aa: 0xe00d, 0x10ab: 0x0008, 0x10ac: 0xe00d, 0x10ad: 0x0008, 0x10ae: 0x0008, 0x10af: 0x1308,
- 0x10b0: 0x1318, 0x10b1: 0x1318, 0x10b2: 0x1318, 0x10b3: 0x0018, 0x10b4: 0x1308, 0x10b5: 0x1308,
- 0x10b6: 0x1308, 0x10b7: 0x1308, 0x10b8: 0x1308, 0x10b9: 0x1308, 0x10ba: 0x1308, 0x10bb: 0x1308,
- 0x10bc: 0x1308, 0x10bd: 0x1308, 0x10be: 0x0018, 0x10bf: 0x0008,
+ 0x1080: 0x6211, 0x1081: 0x6229, 0x1082: 0x408d, 0x1083: 0x6241, 0x1084: 0x6259, 0x1085: 0x6271,
+ 0x1086: 0x6289, 0x1087: 0x62a1, 0x1088: 0x40ad, 0x1089: 0x62b9, 0x108a: 0x62e1, 0x108b: 0x62f9,
+ 0x108c: 0x40cd, 0x108d: 0x40cd, 0x108e: 0x6311, 0x108f: 0x6329, 0x1090: 0x6341, 0x1091: 0x40ed,
+ 0x1092: 0x410d, 0x1093: 0x412d, 0x1094: 0x414d, 0x1095: 0x416d, 0x1096: 0x6359, 0x1097: 0x6371,
+ 0x1098: 0x6389, 0x1099: 0x63a1, 0x109a: 0x63b9, 0x109b: 0x418d, 0x109c: 0x63d1, 0x109d: 0x63e9,
+ 0x109e: 0x6401, 0x109f: 0x41ad, 0x10a0: 0x41cd, 0x10a1: 0x6419, 0x10a2: 0x41ed, 0x10a3: 0x420d,
+ 0x10a4: 0x422d, 0x10a5: 0x6431, 0x10a6: 0x424d, 0x10a7: 0x6449, 0x10a8: 0x6479, 0x10a9: 0x6211,
+ 0x10aa: 0x426d, 0x10ab: 0x428d, 0x10ac: 0x42ad, 0x10ad: 0x42cd, 0x10ae: 0x64b1, 0x10af: 0x64f1,
+ 0x10b0: 0x6539, 0x10b1: 0x6551, 0x10b2: 0x42ed, 0x10b3: 0x6569, 0x10b4: 0x6581, 0x10b5: 0x6599,
+ 0x10b6: 0x430d, 0x10b7: 0x65b1, 0x10b8: 0x65c9, 0x10b9: 0x65b1, 0x10ba: 0x65e1, 0x10bb: 0x65f9,
+ 0x10bc: 0x432d, 0x10bd: 0x6611, 0x10be: 0x6629, 0x10bf: 0x6611,
// Block 0x43, offset 0x10c0
- 0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008,
- 0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008,
- 0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008,
- 0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008,
- 0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0x0ea1, 0x10dd: 0x6e11,
- 0x10de: 0x1308, 0x10df: 0x1308, 0x10e0: 0x0008, 0x10e1: 0x0008, 0x10e2: 0x0008, 0x10e3: 0x0008,
- 0x10e4: 0x0008, 0x10e5: 0x0008, 0x10e6: 0x0008, 0x10e7: 0x0008, 0x10e8: 0x0008, 0x10e9: 0x0008,
- 0x10ea: 0x0008, 0x10eb: 0x0008, 0x10ec: 0x0008, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x0008,
- 0x10f0: 0x0008, 0x10f1: 0x0008, 0x10f2: 0x0008, 0x10f3: 0x0008, 0x10f4: 0x0008, 0x10f5: 0x0008,
- 0x10f6: 0x0008, 0x10f7: 0x0008, 0x10f8: 0x0008, 0x10f9: 0x0008, 0x10fa: 0x0008, 0x10fb: 0x0008,
- 0x10fc: 0x0008, 0x10fd: 0x0008, 0x10fe: 0x0008, 0x10ff: 0x0008,
+ 0x10c0: 0x434d, 0x10c1: 0x436d, 0x10c2: 0x0040, 0x10c3: 0x6641, 0x10c4: 0x6659, 0x10c5: 0x6671,
+ 0x10c6: 0x6689, 0x10c7: 0x0040, 0x10c8: 0x66c1, 0x10c9: 0x66d9, 0x10ca: 0x66f1, 0x10cb: 0x6709,
+ 0x10cc: 0x6721, 0x10cd: 0x6739, 0x10ce: 0x6401, 0x10cf: 0x6751, 0x10d0: 0x6769, 0x10d1: 0x6781,
+ 0x10d2: 0x438d, 0x10d3: 0x6799, 0x10d4: 0x6289, 0x10d5: 0x43ad, 0x10d6: 0x43cd, 0x10d7: 0x67b1,
+ 0x10d8: 0x0040, 0x10d9: 0x43ed, 0x10da: 0x67c9, 0x10db: 0x67e1, 0x10dc: 0x67f9, 0x10dd: 0x6811,
+ 0x10de: 0x6829, 0x10df: 0x6859, 0x10e0: 0x6889, 0x10e1: 0x68b1, 0x10e2: 0x68d9, 0x10e3: 0x6901,
+ 0x10e4: 0x6929, 0x10e5: 0x6951, 0x10e6: 0x6979, 0x10e7: 0x69a1, 0x10e8: 0x69c9, 0x10e9: 0x69f1,
+ 0x10ea: 0x6a21, 0x10eb: 0x6a51, 0x10ec: 0x6a81, 0x10ed: 0x6ab1, 0x10ee: 0x6ae1, 0x10ef: 0x6b11,
+ 0x10f0: 0x6b41, 0x10f1: 0x6b71, 0x10f2: 0x6ba1, 0x10f3: 0x6bd1, 0x10f4: 0x6c01, 0x10f5: 0x6c31,
+ 0x10f6: 0x6c61, 0x10f7: 0x6c91, 0x10f8: 0x6cc1, 0x10f9: 0x6cf1, 0x10fa: 0x6d21, 0x10fb: 0x6d51,
+ 0x10fc: 0x6d81, 0x10fd: 0x6db1, 0x10fe: 0x6de1, 0x10ff: 0x440d,
// Block 0x44, offset 0x1100
- 0x1100: 0x0018, 0x1101: 0x0018, 0x1102: 0x0018, 0x1103: 0x0018, 0x1104: 0x0018, 0x1105: 0x0018,
- 0x1106: 0x0018, 0x1107: 0x0018, 0x1108: 0x0018, 0x1109: 0x0018, 0x110a: 0x0018, 0x110b: 0x0018,
- 0x110c: 0x0018, 0x110d: 0x0018, 0x110e: 0x0018, 0x110f: 0x0018, 0x1110: 0x0018, 0x1111: 0x0018,
- 0x1112: 0x0018, 0x1113: 0x0018, 0x1114: 0x0018, 0x1115: 0x0018, 0x1116: 0x0018, 0x1117: 0x0008,
- 0x1118: 0x0008, 0x1119: 0x0008, 0x111a: 0x0008, 0x111b: 0x0008, 0x111c: 0x0008, 0x111d: 0x0008,
- 0x111e: 0x0008, 0x111f: 0x0008, 0x1120: 0x0018, 0x1121: 0x0018, 0x1122: 0xe00d, 0x1123: 0x0008,
+ 0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008,
+ 0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008,
+ 0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008,
+ 0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008,
+ 0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0xe00d, 0x111d: 0x0008,
+ 0x111e: 0xe00d, 0x111f: 0x0008, 0x1120: 0xe00d, 0x1121: 0x0008, 0x1122: 0xe00d, 0x1123: 0x0008,
0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008,
- 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0xe00d, 0x112f: 0x0008,
- 0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0xe00d, 0x1133: 0x0008, 0x1134: 0xe00d, 0x1135: 0x0008,
- 0x1136: 0xe00d, 0x1137: 0x0008, 0x1138: 0xe00d, 0x1139: 0x0008, 0x113a: 0xe00d, 0x113b: 0x0008,
- 0x113c: 0xe00d, 0x113d: 0x0008, 0x113e: 0xe00d, 0x113f: 0x0008,
+ 0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x3308,
+ 0x1130: 0x3318, 0x1131: 0x3318, 0x1132: 0x3318, 0x1133: 0x0018, 0x1134: 0x3308, 0x1135: 0x3308,
+ 0x1136: 0x3308, 0x1137: 0x3308, 0x1138: 0x3308, 0x1139: 0x3308, 0x113a: 0x3308, 0x113b: 0x3308,
+ 0x113c: 0x3308, 0x113d: 0x3308, 0x113e: 0x0018, 0x113f: 0x0008,
// Block 0x45, offset 0x1140
0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008,
0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008,
0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008,
0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008,
- 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0xe00d, 0x115d: 0x0008,
- 0x115e: 0xe00d, 0x115f: 0x0008, 0x1160: 0xe00d, 0x1161: 0x0008, 0x1162: 0xe00d, 0x1163: 0x0008,
- 0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008,
- 0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008,
- 0x1170: 0xe0fd, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008,
- 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0xe01d, 0x117a: 0x0008, 0x117b: 0xe03d,
- 0x117c: 0x0008, 0x117d: 0x442d, 0x117e: 0xe00d, 0x117f: 0x0008,
+ 0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0x0ea1, 0x115d: 0x6e11,
+ 0x115e: 0x3308, 0x115f: 0x3308, 0x1160: 0x0008, 0x1161: 0x0008, 0x1162: 0x0008, 0x1163: 0x0008,
+ 0x1164: 0x0008, 0x1165: 0x0008, 0x1166: 0x0008, 0x1167: 0x0008, 0x1168: 0x0008, 0x1169: 0x0008,
+ 0x116a: 0x0008, 0x116b: 0x0008, 0x116c: 0x0008, 0x116d: 0x0008, 0x116e: 0x0008, 0x116f: 0x0008,
+ 0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008,
+ 0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0x0008, 0x117a: 0x0008, 0x117b: 0x0008,
+ 0x117c: 0x0008, 0x117d: 0x0008, 0x117e: 0x0008, 0x117f: 0x0008,
// Block 0x46, offset 0x1180
- 0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008,
- 0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0x0008, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0xe03d,
- 0x118c: 0x0008, 0x118d: 0x11d9, 0x118e: 0x0008, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008,
- 0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0x0008, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008,
- 0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008,
- 0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008,
+ 0x1180: 0x0018, 0x1181: 0x0018, 0x1182: 0x0018, 0x1183: 0x0018, 0x1184: 0x0018, 0x1185: 0x0018,
+ 0x1186: 0x0018, 0x1187: 0x0018, 0x1188: 0x0018, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0x0018,
+ 0x118c: 0x0018, 0x118d: 0x0018, 0x118e: 0x0018, 0x118f: 0x0018, 0x1190: 0x0018, 0x1191: 0x0018,
+ 0x1192: 0x0018, 0x1193: 0x0018, 0x1194: 0x0018, 0x1195: 0x0018, 0x1196: 0x0018, 0x1197: 0x0008,
+ 0x1198: 0x0008, 0x1199: 0x0008, 0x119a: 0x0008, 0x119b: 0x0008, 0x119c: 0x0008, 0x119d: 0x0008,
+ 0x119e: 0x0008, 0x119f: 0x0008, 0x11a0: 0x0018, 0x11a1: 0x0018, 0x11a2: 0xe00d, 0x11a3: 0x0008,
0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008,
- 0x11aa: 0x6e29, 0x11ab: 0x1029, 0x11ac: 0x11c1, 0x11ad: 0x6e41, 0x11ae: 0x1221, 0x11af: 0x0040,
- 0x11b0: 0x6e59, 0x11b1: 0x6e71, 0x11b2: 0x1239, 0x11b3: 0x444d, 0x11b4: 0xe00d, 0x11b5: 0x0008,
- 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0x0040, 0x11b9: 0x0040, 0x11ba: 0x0040, 0x11bb: 0x0040,
- 0x11bc: 0x0040, 0x11bd: 0x0040, 0x11be: 0x0040, 0x11bf: 0x0040,
+ 0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008,
+ 0x11b0: 0x0008, 0x11b1: 0x0008, 0x11b2: 0xe00d, 0x11b3: 0x0008, 0x11b4: 0xe00d, 0x11b5: 0x0008,
+ 0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0xe00d, 0x11b9: 0x0008, 0x11ba: 0xe00d, 0x11bb: 0x0008,
+ 0x11bc: 0xe00d, 0x11bd: 0x0008, 0x11be: 0xe00d, 0x11bf: 0x0008,
// Block 0x47, offset 0x11c0
- 0x11c0: 0x64d5, 0x11c1: 0x64f5, 0x11c2: 0x6515, 0x11c3: 0x6535, 0x11c4: 0x6555, 0x11c5: 0x6575,
- 0x11c6: 0x6595, 0x11c7: 0x65b5, 0x11c8: 0x65d5, 0x11c9: 0x65f5, 0x11ca: 0x6615, 0x11cb: 0x6635,
- 0x11cc: 0x6655, 0x11cd: 0x6675, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0x6695, 0x11d1: 0x0008,
- 0x11d2: 0x66b5, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x66d5, 0x11d6: 0x66f5, 0x11d7: 0x6715,
- 0x11d8: 0x6735, 0x11d9: 0x6755, 0x11da: 0x6775, 0x11db: 0x6795, 0x11dc: 0x67b5, 0x11dd: 0x67d5,
- 0x11de: 0x67f5, 0x11df: 0x0008, 0x11e0: 0x6815, 0x11e1: 0x0008, 0x11e2: 0x6835, 0x11e3: 0x0008,
- 0x11e4: 0x0008, 0x11e5: 0x6855, 0x11e6: 0x6875, 0x11e7: 0x0008, 0x11e8: 0x0008, 0x11e9: 0x0008,
- 0x11ea: 0x6895, 0x11eb: 0x68b5, 0x11ec: 0x68d5, 0x11ed: 0x68f5, 0x11ee: 0x6915, 0x11ef: 0x6935,
- 0x11f0: 0x6955, 0x11f1: 0x6975, 0x11f2: 0x6995, 0x11f3: 0x69b5, 0x11f4: 0x69d5, 0x11f5: 0x69f5,
- 0x11f6: 0x6a15, 0x11f7: 0x6a35, 0x11f8: 0x6a55, 0x11f9: 0x6a75, 0x11fa: 0x6a95, 0x11fb: 0x6ab5,
- 0x11fc: 0x6ad5, 0x11fd: 0x6af5, 0x11fe: 0x6b15, 0x11ff: 0x6b35,
+ 0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008,
+ 0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0xe00d, 0x11c9: 0x0008, 0x11ca: 0xe00d, 0x11cb: 0x0008,
+ 0x11cc: 0xe00d, 0x11cd: 0x0008, 0x11ce: 0xe00d, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008,
+ 0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0xe00d, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008,
+ 0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008,
+ 0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008,
+ 0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008,
+ 0x11ea: 0xe00d, 0x11eb: 0x0008, 0x11ec: 0xe00d, 0x11ed: 0x0008, 0x11ee: 0xe00d, 0x11ef: 0x0008,
+ 0x11f0: 0xe0fd, 0x11f1: 0x0008, 0x11f2: 0x0008, 0x11f3: 0x0008, 0x11f4: 0x0008, 0x11f5: 0x0008,
+ 0x11f6: 0x0008, 0x11f7: 0x0008, 0x11f8: 0x0008, 0x11f9: 0xe01d, 0x11fa: 0x0008, 0x11fb: 0xe03d,
+ 0x11fc: 0x0008, 0x11fd: 0x442d, 0x11fe: 0xe00d, 0x11ff: 0x0008,
// Block 0x48, offset 0x1200
- 0x1200: 0x7a95, 0x1201: 0x7ab5, 0x1202: 0x7ad5, 0x1203: 0x7af5, 0x1204: 0x7b15, 0x1205: 0x7b35,
- 0x1206: 0x7b55, 0x1207: 0x7b75, 0x1208: 0x7b95, 0x1209: 0x7bb5, 0x120a: 0x7bd5, 0x120b: 0x7bf5,
- 0x120c: 0x7c15, 0x120d: 0x7c35, 0x120e: 0x7c55, 0x120f: 0x6ec9, 0x1210: 0x6ef1, 0x1211: 0x6f19,
- 0x1212: 0x7c75, 0x1213: 0x7c95, 0x1214: 0x7cb5, 0x1215: 0x6f41, 0x1216: 0x6f69, 0x1217: 0x6f91,
- 0x1218: 0x7cd5, 0x1219: 0x7cf5, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040,
- 0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040,
- 0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040,
- 0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040,
- 0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x0040, 0x1233: 0x0040, 0x1234: 0x0040, 0x1235: 0x0040,
- 0x1236: 0x0040, 0x1237: 0x0040, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040,
+ 0x1200: 0xe00d, 0x1201: 0x0008, 0x1202: 0xe00d, 0x1203: 0x0008, 0x1204: 0xe00d, 0x1205: 0x0008,
+ 0x1206: 0xe00d, 0x1207: 0x0008, 0x1208: 0x0008, 0x1209: 0x0018, 0x120a: 0x0018, 0x120b: 0xe03d,
+ 0x120c: 0x0008, 0x120d: 0x11d9, 0x120e: 0x0008, 0x120f: 0x0008, 0x1210: 0xe00d, 0x1211: 0x0008,
+ 0x1212: 0xe00d, 0x1213: 0x0008, 0x1214: 0x0008, 0x1215: 0x0008, 0x1216: 0xe00d, 0x1217: 0x0008,
+ 0x1218: 0xe00d, 0x1219: 0x0008, 0x121a: 0xe00d, 0x121b: 0x0008, 0x121c: 0xe00d, 0x121d: 0x0008,
+ 0x121e: 0xe00d, 0x121f: 0x0008, 0x1220: 0xe00d, 0x1221: 0x0008, 0x1222: 0xe00d, 0x1223: 0x0008,
+ 0x1224: 0xe00d, 0x1225: 0x0008, 0x1226: 0xe00d, 0x1227: 0x0008, 0x1228: 0xe00d, 0x1229: 0x0008,
+ 0x122a: 0x6e29, 0x122b: 0x1029, 0x122c: 0x11c1, 0x122d: 0x6e41, 0x122e: 0x1221, 0x122f: 0x0040,
+ 0x1230: 0x6e59, 0x1231: 0x6e71, 0x1232: 0x1239, 0x1233: 0x444d, 0x1234: 0xe00d, 0x1235: 0x0008,
+ 0x1236: 0xe00d, 0x1237: 0x0008, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040,
0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040,
// Block 0x49, offset 0x1240
- 0x1240: 0x6fb9, 0x1241: 0x6fd1, 0x1242: 0x6fe9, 0x1243: 0x7d15, 0x1244: 0x7d35, 0x1245: 0x7001,
- 0x1246: 0x7001, 0x1247: 0x0040, 0x1248: 0x0040, 0x1249: 0x0040, 0x124a: 0x0040, 0x124b: 0x0040,
- 0x124c: 0x0040, 0x124d: 0x0040, 0x124e: 0x0040, 0x124f: 0x0040, 0x1250: 0x0040, 0x1251: 0x0040,
- 0x1252: 0x0040, 0x1253: 0x7019, 0x1254: 0x7041, 0x1255: 0x7069, 0x1256: 0x7091, 0x1257: 0x70b9,
- 0x1258: 0x0040, 0x1259: 0x0040, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x70e1,
- 0x125e: 0x1308, 0x125f: 0x7109, 0x1260: 0x7131, 0x1261: 0x20a9, 0x1262: 0x20f1, 0x1263: 0x7149,
- 0x1264: 0x7161, 0x1265: 0x7179, 0x1266: 0x7191, 0x1267: 0x71a9, 0x1268: 0x71c1, 0x1269: 0x1fb2,
- 0x126a: 0x71d9, 0x126b: 0x7201, 0x126c: 0x7229, 0x126d: 0x7261, 0x126e: 0x7299, 0x126f: 0x72c1,
- 0x1270: 0x72e9, 0x1271: 0x7311, 0x1272: 0x7339, 0x1273: 0x7361, 0x1274: 0x7389, 0x1275: 0x73b1,
- 0x1276: 0x73d9, 0x1277: 0x0040, 0x1278: 0x7401, 0x1279: 0x7429, 0x127a: 0x7451, 0x127b: 0x7479,
- 0x127c: 0x74a1, 0x127d: 0x0040, 0x127e: 0x74c9, 0x127f: 0x0040,
+ 0x1240: 0x64d5, 0x1241: 0x64f5, 0x1242: 0x6515, 0x1243: 0x6535, 0x1244: 0x6555, 0x1245: 0x6575,
+ 0x1246: 0x6595, 0x1247: 0x65b5, 0x1248: 0x65d5, 0x1249: 0x65f5, 0x124a: 0x6615, 0x124b: 0x6635,
+ 0x124c: 0x6655, 0x124d: 0x6675, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x6695, 0x1251: 0x0008,
+ 0x1252: 0x66b5, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x66d5, 0x1256: 0x66f5, 0x1257: 0x6715,
+ 0x1258: 0x6735, 0x1259: 0x6755, 0x125a: 0x6775, 0x125b: 0x6795, 0x125c: 0x67b5, 0x125d: 0x67d5,
+ 0x125e: 0x67f5, 0x125f: 0x0008, 0x1260: 0x6815, 0x1261: 0x0008, 0x1262: 0x6835, 0x1263: 0x0008,
+ 0x1264: 0x0008, 0x1265: 0x6855, 0x1266: 0x6875, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008,
+ 0x126a: 0x6895, 0x126b: 0x68b5, 0x126c: 0x68d5, 0x126d: 0x68f5, 0x126e: 0x6915, 0x126f: 0x6935,
+ 0x1270: 0x6955, 0x1271: 0x6975, 0x1272: 0x6995, 0x1273: 0x69b5, 0x1274: 0x69d5, 0x1275: 0x69f5,
+ 0x1276: 0x6a15, 0x1277: 0x6a35, 0x1278: 0x6a55, 0x1279: 0x6a75, 0x127a: 0x6a95, 0x127b: 0x6ab5,
+ 0x127c: 0x6ad5, 0x127d: 0x6af5, 0x127e: 0x6b15, 0x127f: 0x6b35,
// Block 0x4a, offset 0x1280
- 0x1280: 0x74f1, 0x1281: 0x7519, 0x1282: 0x0040, 0x1283: 0x7541, 0x1284: 0x7569, 0x1285: 0x0040,
- 0x1286: 0x7591, 0x1287: 0x75b9, 0x1288: 0x75e1, 0x1289: 0x7609, 0x128a: 0x7631, 0x128b: 0x7659,
- 0x128c: 0x7681, 0x128d: 0x76a9, 0x128e: 0x76d1, 0x128f: 0x76f9, 0x1290: 0x7721, 0x1291: 0x7721,
- 0x1292: 0x7739, 0x1293: 0x7739, 0x1294: 0x7739, 0x1295: 0x7739, 0x1296: 0x7751, 0x1297: 0x7751,
- 0x1298: 0x7751, 0x1299: 0x7751, 0x129a: 0x7769, 0x129b: 0x7769, 0x129c: 0x7769, 0x129d: 0x7769,
- 0x129e: 0x7781, 0x129f: 0x7781, 0x12a0: 0x7781, 0x12a1: 0x7781, 0x12a2: 0x7799, 0x12a3: 0x7799,
- 0x12a4: 0x7799, 0x12a5: 0x7799, 0x12a6: 0x77b1, 0x12a7: 0x77b1, 0x12a8: 0x77b1, 0x12a9: 0x77b1,
- 0x12aa: 0x77c9, 0x12ab: 0x77c9, 0x12ac: 0x77c9, 0x12ad: 0x77c9, 0x12ae: 0x77e1, 0x12af: 0x77e1,
- 0x12b0: 0x77e1, 0x12b1: 0x77e1, 0x12b2: 0x77f9, 0x12b3: 0x77f9, 0x12b4: 0x77f9, 0x12b5: 0x77f9,
- 0x12b6: 0x7811, 0x12b7: 0x7811, 0x12b8: 0x7811, 0x12b9: 0x7811, 0x12ba: 0x7829, 0x12bb: 0x7829,
- 0x12bc: 0x7829, 0x12bd: 0x7829, 0x12be: 0x7841, 0x12bf: 0x7841,
+ 0x1280: 0x7a95, 0x1281: 0x7ab5, 0x1282: 0x7ad5, 0x1283: 0x7af5, 0x1284: 0x7b15, 0x1285: 0x7b35,
+ 0x1286: 0x7b55, 0x1287: 0x7b75, 0x1288: 0x7b95, 0x1289: 0x7bb5, 0x128a: 0x7bd5, 0x128b: 0x7bf5,
+ 0x128c: 0x7c15, 0x128d: 0x7c35, 0x128e: 0x7c55, 0x128f: 0x6ec9, 0x1290: 0x6ef1, 0x1291: 0x6f19,
+ 0x1292: 0x7c75, 0x1293: 0x7c95, 0x1294: 0x7cb5, 0x1295: 0x6f41, 0x1296: 0x6f69, 0x1297: 0x6f91,
+ 0x1298: 0x7cd5, 0x1299: 0x7cf5, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x0040,
+ 0x129e: 0x0040, 0x129f: 0x0040, 0x12a0: 0x0040, 0x12a1: 0x0040, 0x12a2: 0x0040, 0x12a3: 0x0040,
+ 0x12a4: 0x0040, 0x12a5: 0x0040, 0x12a6: 0x0040, 0x12a7: 0x0040, 0x12a8: 0x0040, 0x12a9: 0x0040,
+ 0x12aa: 0x0040, 0x12ab: 0x0040, 0x12ac: 0x0040, 0x12ad: 0x0040, 0x12ae: 0x0040, 0x12af: 0x0040,
+ 0x12b0: 0x0040, 0x12b1: 0x0040, 0x12b2: 0x0040, 0x12b3: 0x0040, 0x12b4: 0x0040, 0x12b5: 0x0040,
+ 0x12b6: 0x0040, 0x12b7: 0x0040, 0x12b8: 0x0040, 0x12b9: 0x0040, 0x12ba: 0x0040, 0x12bb: 0x0040,
+ 0x12bc: 0x0040, 0x12bd: 0x0040, 0x12be: 0x0040, 0x12bf: 0x0040,
// Block 0x4b, offset 0x12c0
- 0x12c0: 0x7841, 0x12c1: 0x7841, 0x12c2: 0x7859, 0x12c3: 0x7859, 0x12c4: 0x7871, 0x12c5: 0x7871,
- 0x12c6: 0x7889, 0x12c7: 0x7889, 0x12c8: 0x78a1, 0x12c9: 0x78a1, 0x12ca: 0x78b9, 0x12cb: 0x78b9,
- 0x12cc: 0x78d1, 0x12cd: 0x78d1, 0x12ce: 0x78e9, 0x12cf: 0x78e9, 0x12d0: 0x78e9, 0x12d1: 0x78e9,
- 0x12d2: 0x7901, 0x12d3: 0x7901, 0x12d4: 0x7901, 0x12d5: 0x7901, 0x12d6: 0x7919, 0x12d7: 0x7919,
- 0x12d8: 0x7919, 0x12d9: 0x7919, 0x12da: 0x7931, 0x12db: 0x7931, 0x12dc: 0x7931, 0x12dd: 0x7931,
- 0x12de: 0x7949, 0x12df: 0x7949, 0x12e0: 0x7961, 0x12e1: 0x7961, 0x12e2: 0x7961, 0x12e3: 0x7961,
- 0x12e4: 0x7979, 0x12e5: 0x7979, 0x12e6: 0x7991, 0x12e7: 0x7991, 0x12e8: 0x7991, 0x12e9: 0x7991,
- 0x12ea: 0x79a9, 0x12eb: 0x79a9, 0x12ec: 0x79a9, 0x12ed: 0x79a9, 0x12ee: 0x79c1, 0x12ef: 0x79c1,
- 0x12f0: 0x79d9, 0x12f1: 0x79d9, 0x12f2: 0x0018, 0x12f3: 0x0018, 0x12f4: 0x0018, 0x12f5: 0x0018,
- 0x12f6: 0x0018, 0x12f7: 0x0018, 0x12f8: 0x0018, 0x12f9: 0x0018, 0x12fa: 0x0018, 0x12fb: 0x0018,
- 0x12fc: 0x0018, 0x12fd: 0x0018, 0x12fe: 0x0018, 0x12ff: 0x0018,
+ 0x12c0: 0x6fb9, 0x12c1: 0x6fd1, 0x12c2: 0x6fe9, 0x12c3: 0x7d15, 0x12c4: 0x7d35, 0x12c5: 0x7001,
+ 0x12c6: 0x7001, 0x12c7: 0x0040, 0x12c8: 0x0040, 0x12c9: 0x0040, 0x12ca: 0x0040, 0x12cb: 0x0040,
+ 0x12cc: 0x0040, 0x12cd: 0x0040, 0x12ce: 0x0040, 0x12cf: 0x0040, 0x12d0: 0x0040, 0x12d1: 0x0040,
+ 0x12d2: 0x0040, 0x12d3: 0x7019, 0x12d4: 0x7041, 0x12d5: 0x7069, 0x12d6: 0x7091, 0x12d7: 0x70b9,
+ 0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x70e1,
+ 0x12de: 0x3308, 0x12df: 0x7109, 0x12e0: 0x7131, 0x12e1: 0x20a9, 0x12e2: 0x20f1, 0x12e3: 0x7149,
+ 0x12e4: 0x7161, 0x12e5: 0x7179, 0x12e6: 0x7191, 0x12e7: 0x71a9, 0x12e8: 0x71c1, 0x12e9: 0x1fb2,
+ 0x12ea: 0x71d9, 0x12eb: 0x7201, 0x12ec: 0x7229, 0x12ed: 0x7261, 0x12ee: 0x7299, 0x12ef: 0x72c1,
+ 0x12f0: 0x72e9, 0x12f1: 0x7311, 0x12f2: 0x7339, 0x12f3: 0x7361, 0x12f4: 0x7389, 0x12f5: 0x73b1,
+ 0x12f6: 0x73d9, 0x12f7: 0x0040, 0x12f8: 0x7401, 0x12f9: 0x7429, 0x12fa: 0x7451, 0x12fb: 0x7479,
+ 0x12fc: 0x74a1, 0x12fd: 0x0040, 0x12fe: 0x74c9, 0x12ff: 0x0040,
// Block 0x4c, offset 0x1300
- 0x1300: 0x0018, 0x1301: 0x0018, 0x1302: 0x0040, 0x1303: 0x0040, 0x1304: 0x0040, 0x1305: 0x0040,
- 0x1306: 0x0040, 0x1307: 0x0040, 0x1308: 0x0040, 0x1309: 0x0040, 0x130a: 0x0040, 0x130b: 0x0040,
- 0x130c: 0x0040, 0x130d: 0x0040, 0x130e: 0x0040, 0x130f: 0x0040, 0x1310: 0x0040, 0x1311: 0x0040,
- 0x1312: 0x0040, 0x1313: 0x79f1, 0x1314: 0x79f1, 0x1315: 0x79f1, 0x1316: 0x79f1, 0x1317: 0x7a09,
- 0x1318: 0x7a09, 0x1319: 0x7a21, 0x131a: 0x7a21, 0x131b: 0x7a39, 0x131c: 0x7a39, 0x131d: 0x0479,
- 0x131e: 0x7a51, 0x131f: 0x7a51, 0x1320: 0x7a69, 0x1321: 0x7a69, 0x1322: 0x7a81, 0x1323: 0x7a81,
- 0x1324: 0x7a99, 0x1325: 0x7a99, 0x1326: 0x7a99, 0x1327: 0x7a99, 0x1328: 0x7ab1, 0x1329: 0x7ab1,
- 0x132a: 0x7ac9, 0x132b: 0x7ac9, 0x132c: 0x7af1, 0x132d: 0x7af1, 0x132e: 0x7b19, 0x132f: 0x7b19,
- 0x1330: 0x7b41, 0x1331: 0x7b41, 0x1332: 0x7b69, 0x1333: 0x7b69, 0x1334: 0x7b91, 0x1335: 0x7b91,
- 0x1336: 0x7bb9, 0x1337: 0x7bb9, 0x1338: 0x7bb9, 0x1339: 0x7be1, 0x133a: 0x7be1, 0x133b: 0x7be1,
- 0x133c: 0x7c09, 0x133d: 0x7c09, 0x133e: 0x7c09, 0x133f: 0x7c09,
+ 0x1300: 0x74f1, 0x1301: 0x7519, 0x1302: 0x0040, 0x1303: 0x7541, 0x1304: 0x7569, 0x1305: 0x0040,
+ 0x1306: 0x7591, 0x1307: 0x75b9, 0x1308: 0x75e1, 0x1309: 0x7609, 0x130a: 0x7631, 0x130b: 0x7659,
+ 0x130c: 0x7681, 0x130d: 0x76a9, 0x130e: 0x76d1, 0x130f: 0x76f9, 0x1310: 0x7721, 0x1311: 0x7721,
+ 0x1312: 0x7739, 0x1313: 0x7739, 0x1314: 0x7739, 0x1315: 0x7739, 0x1316: 0x7751, 0x1317: 0x7751,
+ 0x1318: 0x7751, 0x1319: 0x7751, 0x131a: 0x7769, 0x131b: 0x7769, 0x131c: 0x7769, 0x131d: 0x7769,
+ 0x131e: 0x7781, 0x131f: 0x7781, 0x1320: 0x7781, 0x1321: 0x7781, 0x1322: 0x7799, 0x1323: 0x7799,
+ 0x1324: 0x7799, 0x1325: 0x7799, 0x1326: 0x77b1, 0x1327: 0x77b1, 0x1328: 0x77b1, 0x1329: 0x77b1,
+ 0x132a: 0x77c9, 0x132b: 0x77c9, 0x132c: 0x77c9, 0x132d: 0x77c9, 0x132e: 0x77e1, 0x132f: 0x77e1,
+ 0x1330: 0x77e1, 0x1331: 0x77e1, 0x1332: 0x77f9, 0x1333: 0x77f9, 0x1334: 0x77f9, 0x1335: 0x77f9,
+ 0x1336: 0x7811, 0x1337: 0x7811, 0x1338: 0x7811, 0x1339: 0x7811, 0x133a: 0x7829, 0x133b: 0x7829,
+ 0x133c: 0x7829, 0x133d: 0x7829, 0x133e: 0x7841, 0x133f: 0x7841,
// Block 0x4d, offset 0x1340
- 0x1340: 0x85f9, 0x1341: 0x8621, 0x1342: 0x8649, 0x1343: 0x8671, 0x1344: 0x8699, 0x1345: 0x86c1,
- 0x1346: 0x86e9, 0x1347: 0x8711, 0x1348: 0x8739, 0x1349: 0x8761, 0x134a: 0x8789, 0x134b: 0x87b1,
- 0x134c: 0x87d9, 0x134d: 0x8801, 0x134e: 0x8829, 0x134f: 0x8851, 0x1350: 0x8879, 0x1351: 0x88a1,
- 0x1352: 0x88c9, 0x1353: 0x88f1, 0x1354: 0x8919, 0x1355: 0x8941, 0x1356: 0x8969, 0x1357: 0x8991,
- 0x1358: 0x89b9, 0x1359: 0x89e1, 0x135a: 0x8a09, 0x135b: 0x8a31, 0x135c: 0x8a59, 0x135d: 0x8a81,
- 0x135e: 0x8aaa, 0x135f: 0x8ada, 0x1360: 0x8b0a, 0x1361: 0x8b3a, 0x1362: 0x8b6a, 0x1363: 0x8b9a,
- 0x1364: 0x8bc9, 0x1365: 0x8bf1, 0x1366: 0x7c71, 0x1367: 0x8c19, 0x1368: 0x7be1, 0x1369: 0x7c99,
- 0x136a: 0x8c41, 0x136b: 0x8c69, 0x136c: 0x7d39, 0x136d: 0x8c91, 0x136e: 0x7d61, 0x136f: 0x7d89,
- 0x1370: 0x8cb9, 0x1371: 0x8ce1, 0x1372: 0x7e29, 0x1373: 0x8d09, 0x1374: 0x7e51, 0x1375: 0x7e79,
- 0x1376: 0x8d31, 0x1377: 0x8d59, 0x1378: 0x7ec9, 0x1379: 0x8d81, 0x137a: 0x7ef1, 0x137b: 0x7f19,
- 0x137c: 0x83a1, 0x137d: 0x83c9, 0x137e: 0x8441, 0x137f: 0x8469,
+ 0x1340: 0x7841, 0x1341: 0x7841, 0x1342: 0x7859, 0x1343: 0x7859, 0x1344: 0x7871, 0x1345: 0x7871,
+ 0x1346: 0x7889, 0x1347: 0x7889, 0x1348: 0x78a1, 0x1349: 0x78a1, 0x134a: 0x78b9, 0x134b: 0x78b9,
+ 0x134c: 0x78d1, 0x134d: 0x78d1, 0x134e: 0x78e9, 0x134f: 0x78e9, 0x1350: 0x78e9, 0x1351: 0x78e9,
+ 0x1352: 0x7901, 0x1353: 0x7901, 0x1354: 0x7901, 0x1355: 0x7901, 0x1356: 0x7919, 0x1357: 0x7919,
+ 0x1358: 0x7919, 0x1359: 0x7919, 0x135a: 0x7931, 0x135b: 0x7931, 0x135c: 0x7931, 0x135d: 0x7931,
+ 0x135e: 0x7949, 0x135f: 0x7949, 0x1360: 0x7961, 0x1361: 0x7961, 0x1362: 0x7961, 0x1363: 0x7961,
+ 0x1364: 0x7979, 0x1365: 0x7979, 0x1366: 0x7991, 0x1367: 0x7991, 0x1368: 0x7991, 0x1369: 0x7991,
+ 0x136a: 0x79a9, 0x136b: 0x79a9, 0x136c: 0x79a9, 0x136d: 0x79a9, 0x136e: 0x79c1, 0x136f: 0x79c1,
+ 0x1370: 0x79d9, 0x1371: 0x79d9, 0x1372: 0x0818, 0x1373: 0x0818, 0x1374: 0x0818, 0x1375: 0x0818,
+ 0x1376: 0x0818, 0x1377: 0x0818, 0x1378: 0x0818, 0x1379: 0x0818, 0x137a: 0x0818, 0x137b: 0x0818,
+ 0x137c: 0x0818, 0x137d: 0x0818, 0x137e: 0x0818, 0x137f: 0x0818,
// Block 0x4e, offset 0x1380
- 0x1380: 0x8491, 0x1381: 0x8531, 0x1382: 0x8559, 0x1383: 0x8581, 0x1384: 0x85a9, 0x1385: 0x8649,
- 0x1386: 0x8671, 0x1387: 0x8699, 0x1388: 0x8da9, 0x1389: 0x8739, 0x138a: 0x8dd1, 0x138b: 0x8df9,
- 0x138c: 0x8829, 0x138d: 0x8e21, 0x138e: 0x8851, 0x138f: 0x8879, 0x1390: 0x8a81, 0x1391: 0x8e49,
- 0x1392: 0x8e71, 0x1393: 0x89b9, 0x1394: 0x8e99, 0x1395: 0x89e1, 0x1396: 0x8a09, 0x1397: 0x7c21,
- 0x1398: 0x7c49, 0x1399: 0x8ec1, 0x139a: 0x7c71, 0x139b: 0x8ee9, 0x139c: 0x7cc1, 0x139d: 0x7ce9,
- 0x139e: 0x7d11, 0x139f: 0x7d39, 0x13a0: 0x8f11, 0x13a1: 0x7db1, 0x13a2: 0x7dd9, 0x13a3: 0x7e01,
- 0x13a4: 0x7e29, 0x13a5: 0x8f39, 0x13a6: 0x7ec9, 0x13a7: 0x7f41, 0x13a8: 0x7f69, 0x13a9: 0x7f91,
- 0x13aa: 0x7fb9, 0x13ab: 0x7fe1, 0x13ac: 0x8031, 0x13ad: 0x8059, 0x13ae: 0x8081, 0x13af: 0x80a9,
- 0x13b0: 0x80d1, 0x13b1: 0x80f9, 0x13b2: 0x8f61, 0x13b3: 0x8121, 0x13b4: 0x8149, 0x13b5: 0x8171,
- 0x13b6: 0x8199, 0x13b7: 0x81c1, 0x13b8: 0x81e9, 0x13b9: 0x8239, 0x13ba: 0x8261, 0x13bb: 0x8289,
- 0x13bc: 0x82b1, 0x13bd: 0x82d9, 0x13be: 0x8301, 0x13bf: 0x8329,
+ 0x1380: 0x0818, 0x1381: 0x0818, 0x1382: 0x0040, 0x1383: 0x0040, 0x1384: 0x0040, 0x1385: 0x0040,
+ 0x1386: 0x0040, 0x1387: 0x0040, 0x1388: 0x0040, 0x1389: 0x0040, 0x138a: 0x0040, 0x138b: 0x0040,
+ 0x138c: 0x0040, 0x138d: 0x0040, 0x138e: 0x0040, 0x138f: 0x0040, 0x1390: 0x0040, 0x1391: 0x0040,
+ 0x1392: 0x0040, 0x1393: 0x79f1, 0x1394: 0x79f1, 0x1395: 0x79f1, 0x1396: 0x79f1, 0x1397: 0x7a09,
+ 0x1398: 0x7a09, 0x1399: 0x7a21, 0x139a: 0x7a21, 0x139b: 0x7a39, 0x139c: 0x7a39, 0x139d: 0x0479,
+ 0x139e: 0x7a51, 0x139f: 0x7a51, 0x13a0: 0x7a69, 0x13a1: 0x7a69, 0x13a2: 0x7a81, 0x13a3: 0x7a81,
+ 0x13a4: 0x7a99, 0x13a5: 0x7a99, 0x13a6: 0x7a99, 0x13a7: 0x7a99, 0x13a8: 0x7ab1, 0x13a9: 0x7ab1,
+ 0x13aa: 0x7ac9, 0x13ab: 0x7ac9, 0x13ac: 0x7af1, 0x13ad: 0x7af1, 0x13ae: 0x7b19, 0x13af: 0x7b19,
+ 0x13b0: 0x7b41, 0x13b1: 0x7b41, 0x13b2: 0x7b69, 0x13b3: 0x7b69, 0x13b4: 0x7b91, 0x13b5: 0x7b91,
+ 0x13b6: 0x7bb9, 0x13b7: 0x7bb9, 0x13b8: 0x7bb9, 0x13b9: 0x7be1, 0x13ba: 0x7be1, 0x13bb: 0x7be1,
+ 0x13bc: 0x7c09, 0x13bd: 0x7c09, 0x13be: 0x7c09, 0x13bf: 0x7c09,
// Block 0x4f, offset 0x13c0
- 0x13c0: 0x8351, 0x13c1: 0x8379, 0x13c2: 0x83f1, 0x13c3: 0x8419, 0x13c4: 0x84b9, 0x13c5: 0x84e1,
- 0x13c6: 0x8509, 0x13c7: 0x8531, 0x13c8: 0x8559, 0x13c9: 0x85d1, 0x13ca: 0x85f9, 0x13cb: 0x8621,
- 0x13cc: 0x8649, 0x13cd: 0x8f89, 0x13ce: 0x86c1, 0x13cf: 0x86e9, 0x13d0: 0x8711, 0x13d1: 0x8739,
- 0x13d2: 0x87b1, 0x13d3: 0x87d9, 0x13d4: 0x8801, 0x13d5: 0x8829, 0x13d6: 0x8fb1, 0x13d7: 0x88a1,
- 0x13d8: 0x88c9, 0x13d9: 0x8fd9, 0x13da: 0x8941, 0x13db: 0x8969, 0x13dc: 0x8991, 0x13dd: 0x89b9,
- 0x13de: 0x9001, 0x13df: 0x7c71, 0x13e0: 0x8ee9, 0x13e1: 0x7d39, 0x13e2: 0x8f11, 0x13e3: 0x7e29,
- 0x13e4: 0x8f39, 0x13e5: 0x7ec9, 0x13e6: 0x9029, 0x13e7: 0x80d1, 0x13e8: 0x9051, 0x13e9: 0x9079,
- 0x13ea: 0x90a1, 0x13eb: 0x8531, 0x13ec: 0x8559, 0x13ed: 0x8649, 0x13ee: 0x8829, 0x13ef: 0x8fb1,
- 0x13f0: 0x89b9, 0x13f1: 0x9001, 0x13f2: 0x90c9, 0x13f3: 0x9101, 0x13f4: 0x9139, 0x13f5: 0x9171,
- 0x13f6: 0x9199, 0x13f7: 0x91c1, 0x13f8: 0x91e9, 0x13f9: 0x9211, 0x13fa: 0x9239, 0x13fb: 0x9261,
- 0x13fc: 0x9289, 0x13fd: 0x92b1, 0x13fe: 0x92d9, 0x13ff: 0x9301,
+ 0x13c0: 0x85f9, 0x13c1: 0x8621, 0x13c2: 0x8649, 0x13c3: 0x8671, 0x13c4: 0x8699, 0x13c5: 0x86c1,
+ 0x13c6: 0x86e9, 0x13c7: 0x8711, 0x13c8: 0x8739, 0x13c9: 0x8761, 0x13ca: 0x8789, 0x13cb: 0x87b1,
+ 0x13cc: 0x87d9, 0x13cd: 0x8801, 0x13ce: 0x8829, 0x13cf: 0x8851, 0x13d0: 0x8879, 0x13d1: 0x88a1,
+ 0x13d2: 0x88c9, 0x13d3: 0x88f1, 0x13d4: 0x8919, 0x13d5: 0x8941, 0x13d6: 0x8969, 0x13d7: 0x8991,
+ 0x13d8: 0x89b9, 0x13d9: 0x89e1, 0x13da: 0x8a09, 0x13db: 0x8a31, 0x13dc: 0x8a59, 0x13dd: 0x8a81,
+ 0x13de: 0x8aaa, 0x13df: 0x8ada, 0x13e0: 0x8b0a, 0x13e1: 0x8b3a, 0x13e2: 0x8b6a, 0x13e3: 0x8b9a,
+ 0x13e4: 0x8bc9, 0x13e5: 0x8bf1, 0x13e6: 0x7c71, 0x13e7: 0x8c19, 0x13e8: 0x7be1, 0x13e9: 0x7c99,
+ 0x13ea: 0x8c41, 0x13eb: 0x8c69, 0x13ec: 0x7d39, 0x13ed: 0x8c91, 0x13ee: 0x7d61, 0x13ef: 0x7d89,
+ 0x13f0: 0x8cb9, 0x13f1: 0x8ce1, 0x13f2: 0x7e29, 0x13f3: 0x8d09, 0x13f4: 0x7e51, 0x13f5: 0x7e79,
+ 0x13f6: 0x8d31, 0x13f7: 0x8d59, 0x13f8: 0x7ec9, 0x13f9: 0x8d81, 0x13fa: 0x7ef1, 0x13fb: 0x7f19,
+ 0x13fc: 0x83a1, 0x13fd: 0x83c9, 0x13fe: 0x8441, 0x13ff: 0x8469,
// Block 0x50, offset 0x1400
- 0x1400: 0x9329, 0x1401: 0x9351, 0x1402: 0x9379, 0x1403: 0x93a1, 0x1404: 0x93c9, 0x1405: 0x93f1,
- 0x1406: 0x9419, 0x1407: 0x9441, 0x1408: 0x9469, 0x1409: 0x9491, 0x140a: 0x94b9, 0x140b: 0x94e1,
- 0x140c: 0x9079, 0x140d: 0x9509, 0x140e: 0x9531, 0x140f: 0x9559, 0x1410: 0x9581, 0x1411: 0x9171,
- 0x1412: 0x9199, 0x1413: 0x91c1, 0x1414: 0x91e9, 0x1415: 0x9211, 0x1416: 0x9239, 0x1417: 0x9261,
- 0x1418: 0x9289, 0x1419: 0x92b1, 0x141a: 0x92d9, 0x141b: 0x9301, 0x141c: 0x9329, 0x141d: 0x9351,
- 0x141e: 0x9379, 0x141f: 0x93a1, 0x1420: 0x93c9, 0x1421: 0x93f1, 0x1422: 0x9419, 0x1423: 0x9441,
- 0x1424: 0x9469, 0x1425: 0x9491, 0x1426: 0x94b9, 0x1427: 0x94e1, 0x1428: 0x9079, 0x1429: 0x9509,
- 0x142a: 0x9531, 0x142b: 0x9559, 0x142c: 0x9581, 0x142d: 0x9491, 0x142e: 0x94b9, 0x142f: 0x94e1,
- 0x1430: 0x9079, 0x1431: 0x9051, 0x1432: 0x90a1, 0x1433: 0x8211, 0x1434: 0x8059, 0x1435: 0x8081,
- 0x1436: 0x80a9, 0x1437: 0x9491, 0x1438: 0x94b9, 0x1439: 0x94e1, 0x143a: 0x8211, 0x143b: 0x8239,
- 0x143c: 0x95a9, 0x143d: 0x95a9, 0x143e: 0x0018, 0x143f: 0x0018,
+ 0x1400: 0x8491, 0x1401: 0x8531, 0x1402: 0x8559, 0x1403: 0x8581, 0x1404: 0x85a9, 0x1405: 0x8649,
+ 0x1406: 0x8671, 0x1407: 0x8699, 0x1408: 0x8da9, 0x1409: 0x8739, 0x140a: 0x8dd1, 0x140b: 0x8df9,
+ 0x140c: 0x8829, 0x140d: 0x8e21, 0x140e: 0x8851, 0x140f: 0x8879, 0x1410: 0x8a81, 0x1411: 0x8e49,
+ 0x1412: 0x8e71, 0x1413: 0x89b9, 0x1414: 0x8e99, 0x1415: 0x89e1, 0x1416: 0x8a09, 0x1417: 0x7c21,
+ 0x1418: 0x7c49, 0x1419: 0x8ec1, 0x141a: 0x7c71, 0x141b: 0x8ee9, 0x141c: 0x7cc1, 0x141d: 0x7ce9,
+ 0x141e: 0x7d11, 0x141f: 0x7d39, 0x1420: 0x8f11, 0x1421: 0x7db1, 0x1422: 0x7dd9, 0x1423: 0x7e01,
+ 0x1424: 0x7e29, 0x1425: 0x8f39, 0x1426: 0x7ec9, 0x1427: 0x7f41, 0x1428: 0x7f69, 0x1429: 0x7f91,
+ 0x142a: 0x7fb9, 0x142b: 0x7fe1, 0x142c: 0x8031, 0x142d: 0x8059, 0x142e: 0x8081, 0x142f: 0x80a9,
+ 0x1430: 0x80d1, 0x1431: 0x80f9, 0x1432: 0x8f61, 0x1433: 0x8121, 0x1434: 0x8149, 0x1435: 0x8171,
+ 0x1436: 0x8199, 0x1437: 0x81c1, 0x1438: 0x81e9, 0x1439: 0x8239, 0x143a: 0x8261, 0x143b: 0x8289,
+ 0x143c: 0x82b1, 0x143d: 0x82d9, 0x143e: 0x8301, 0x143f: 0x8329,
// Block 0x51, offset 0x1440
- 0x1440: 0x0040, 0x1441: 0x0040, 0x1442: 0x0040, 0x1443: 0x0040, 0x1444: 0x0040, 0x1445: 0x0040,
- 0x1446: 0x0040, 0x1447: 0x0040, 0x1448: 0x0040, 0x1449: 0x0040, 0x144a: 0x0040, 0x144b: 0x0040,
- 0x144c: 0x0040, 0x144d: 0x0040, 0x144e: 0x0040, 0x144f: 0x0040, 0x1450: 0x95d1, 0x1451: 0x9609,
- 0x1452: 0x9609, 0x1453: 0x9641, 0x1454: 0x9679, 0x1455: 0x96b1, 0x1456: 0x96e9, 0x1457: 0x9721,
- 0x1458: 0x9759, 0x1459: 0x9759, 0x145a: 0x9791, 0x145b: 0x97c9, 0x145c: 0x9801, 0x145d: 0x9839,
- 0x145e: 0x9871, 0x145f: 0x98a9, 0x1460: 0x98a9, 0x1461: 0x98e1, 0x1462: 0x9919, 0x1463: 0x9919,
- 0x1464: 0x9951, 0x1465: 0x9951, 0x1466: 0x9989, 0x1467: 0x99c1, 0x1468: 0x99c1, 0x1469: 0x99f9,
- 0x146a: 0x9a31, 0x146b: 0x9a31, 0x146c: 0x9a69, 0x146d: 0x9a69, 0x146e: 0x9aa1, 0x146f: 0x9ad9,
- 0x1470: 0x9ad9, 0x1471: 0x9b11, 0x1472: 0x9b11, 0x1473: 0x9b49, 0x1474: 0x9b81, 0x1475: 0x9bb9,
- 0x1476: 0x9bf1, 0x1477: 0x9bf1, 0x1478: 0x9c29, 0x1479: 0x9c61, 0x147a: 0x9c99, 0x147b: 0x9cd1,
- 0x147c: 0x9d09, 0x147d: 0x9d09, 0x147e: 0x9d41, 0x147f: 0x9d79,
+ 0x1440: 0x8351, 0x1441: 0x8379, 0x1442: 0x83f1, 0x1443: 0x8419, 0x1444: 0x84b9, 0x1445: 0x84e1,
+ 0x1446: 0x8509, 0x1447: 0x8531, 0x1448: 0x8559, 0x1449: 0x85d1, 0x144a: 0x85f9, 0x144b: 0x8621,
+ 0x144c: 0x8649, 0x144d: 0x8f89, 0x144e: 0x86c1, 0x144f: 0x86e9, 0x1450: 0x8711, 0x1451: 0x8739,
+ 0x1452: 0x87b1, 0x1453: 0x87d9, 0x1454: 0x8801, 0x1455: 0x8829, 0x1456: 0x8fb1, 0x1457: 0x88a1,
+ 0x1458: 0x88c9, 0x1459: 0x8fd9, 0x145a: 0x8941, 0x145b: 0x8969, 0x145c: 0x8991, 0x145d: 0x89b9,
+ 0x145e: 0x9001, 0x145f: 0x7c71, 0x1460: 0x8ee9, 0x1461: 0x7d39, 0x1462: 0x8f11, 0x1463: 0x7e29,
+ 0x1464: 0x8f39, 0x1465: 0x7ec9, 0x1466: 0x9029, 0x1467: 0x80d1, 0x1468: 0x9051, 0x1469: 0x9079,
+ 0x146a: 0x90a1, 0x146b: 0x8531, 0x146c: 0x8559, 0x146d: 0x8649, 0x146e: 0x8829, 0x146f: 0x8fb1,
+ 0x1470: 0x89b9, 0x1471: 0x9001, 0x1472: 0x90c9, 0x1473: 0x9101, 0x1474: 0x9139, 0x1475: 0x9171,
+ 0x1476: 0x9199, 0x1477: 0x91c1, 0x1478: 0x91e9, 0x1479: 0x9211, 0x147a: 0x9239, 0x147b: 0x9261,
+ 0x147c: 0x9289, 0x147d: 0x92b1, 0x147e: 0x92d9, 0x147f: 0x9301,
// Block 0x52, offset 0x1480
- 0x1480: 0xa949, 0x1481: 0xa981, 0x1482: 0xa9b9, 0x1483: 0xa8a1, 0x1484: 0x9bb9, 0x1485: 0x9989,
- 0x1486: 0xa9f1, 0x1487: 0xaa29, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040,
- 0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x0040, 0x1491: 0x0040,
- 0x1492: 0x0040, 0x1493: 0x0040, 0x1494: 0x0040, 0x1495: 0x0040, 0x1496: 0x0040, 0x1497: 0x0040,
- 0x1498: 0x0040, 0x1499: 0x0040, 0x149a: 0x0040, 0x149b: 0x0040, 0x149c: 0x0040, 0x149d: 0x0040,
- 0x149e: 0x0040, 0x149f: 0x0040, 0x14a0: 0x0040, 0x14a1: 0x0040, 0x14a2: 0x0040, 0x14a3: 0x0040,
- 0x14a4: 0x0040, 0x14a5: 0x0040, 0x14a6: 0x0040, 0x14a7: 0x0040, 0x14a8: 0x0040, 0x14a9: 0x0040,
- 0x14aa: 0x0040, 0x14ab: 0x0040, 0x14ac: 0x0040, 0x14ad: 0x0040, 0x14ae: 0x0040, 0x14af: 0x0040,
- 0x14b0: 0xaa61, 0x14b1: 0xaa99, 0x14b2: 0xaad1, 0x14b3: 0xab19, 0x14b4: 0xab61, 0x14b5: 0xaba9,
- 0x14b6: 0xabf1, 0x14b7: 0xac39, 0x14b8: 0xac81, 0x14b9: 0xacc9, 0x14ba: 0xad02, 0x14bb: 0xae12,
- 0x14bc: 0xae91, 0x14bd: 0x0018, 0x14be: 0x0040, 0x14bf: 0x0040,
+ 0x1480: 0x9329, 0x1481: 0x9351, 0x1482: 0x9379, 0x1483: 0x93a1, 0x1484: 0x93c9, 0x1485: 0x93f1,
+ 0x1486: 0x9419, 0x1487: 0x9441, 0x1488: 0x9469, 0x1489: 0x9491, 0x148a: 0x94b9, 0x148b: 0x94e1,
+ 0x148c: 0x9079, 0x148d: 0x9509, 0x148e: 0x9531, 0x148f: 0x9559, 0x1490: 0x9581, 0x1491: 0x9171,
+ 0x1492: 0x9199, 0x1493: 0x91c1, 0x1494: 0x91e9, 0x1495: 0x9211, 0x1496: 0x9239, 0x1497: 0x9261,
+ 0x1498: 0x9289, 0x1499: 0x92b1, 0x149a: 0x92d9, 0x149b: 0x9301, 0x149c: 0x9329, 0x149d: 0x9351,
+ 0x149e: 0x9379, 0x149f: 0x93a1, 0x14a0: 0x93c9, 0x14a1: 0x93f1, 0x14a2: 0x9419, 0x14a3: 0x9441,
+ 0x14a4: 0x9469, 0x14a5: 0x9491, 0x14a6: 0x94b9, 0x14a7: 0x94e1, 0x14a8: 0x9079, 0x14a9: 0x9509,
+ 0x14aa: 0x9531, 0x14ab: 0x9559, 0x14ac: 0x9581, 0x14ad: 0x9491, 0x14ae: 0x94b9, 0x14af: 0x94e1,
+ 0x14b0: 0x9079, 0x14b1: 0x9051, 0x14b2: 0x90a1, 0x14b3: 0x8211, 0x14b4: 0x8059, 0x14b5: 0x8081,
+ 0x14b6: 0x80a9, 0x14b7: 0x9491, 0x14b8: 0x94b9, 0x14b9: 0x94e1, 0x14ba: 0x8211, 0x14bb: 0x8239,
+ 0x14bc: 0x95a9, 0x14bd: 0x95a9, 0x14be: 0x0018, 0x14bf: 0x0018,
// Block 0x53, offset 0x14c0
- 0x14c0: 0x13c0, 0x14c1: 0x13c0, 0x14c2: 0x13c0, 0x14c3: 0x13c0, 0x14c4: 0x13c0, 0x14c5: 0x13c0,
- 0x14c6: 0x13c0, 0x14c7: 0x13c0, 0x14c8: 0x13c0, 0x14c9: 0x13c0, 0x14ca: 0x13c0, 0x14cb: 0x13c0,
- 0x14cc: 0x13c0, 0x14cd: 0x13c0, 0x14ce: 0x13c0, 0x14cf: 0x13c0, 0x14d0: 0xaeda, 0x14d1: 0x7d55,
- 0x14d2: 0x0040, 0x14d3: 0xaeea, 0x14d4: 0x03c2, 0x14d5: 0xaefa, 0x14d6: 0xaf0a, 0x14d7: 0x7d75,
- 0x14d8: 0x7d95, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040,
- 0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x1308, 0x14e1: 0x1308, 0x14e2: 0x1308, 0x14e3: 0x1308,
- 0x14e4: 0x1308, 0x14e5: 0x1308, 0x14e6: 0x1308, 0x14e7: 0x1308, 0x14e8: 0x1308, 0x14e9: 0x1308,
- 0x14ea: 0x1308, 0x14eb: 0x1308, 0x14ec: 0x1308, 0x14ed: 0x1308, 0x14ee: 0x1308, 0x14ef: 0x1308,
- 0x14f0: 0x0040, 0x14f1: 0x7db5, 0x14f2: 0x7dd5, 0x14f3: 0xaf1a, 0x14f4: 0xaf1a, 0x14f5: 0x1fd2,
- 0x14f6: 0x1fe2, 0x14f7: 0xaf2a, 0x14f8: 0xaf3a, 0x14f9: 0x7df5, 0x14fa: 0x7e15, 0x14fb: 0x7e35,
- 0x14fc: 0x7df5, 0x14fd: 0x7e55, 0x14fe: 0x7e75, 0x14ff: 0x7e55,
+ 0x14c0: 0x0040, 0x14c1: 0x0040, 0x14c2: 0x0040, 0x14c3: 0x0040, 0x14c4: 0x0040, 0x14c5: 0x0040,
+ 0x14c6: 0x0040, 0x14c7: 0x0040, 0x14c8: 0x0040, 0x14c9: 0x0040, 0x14ca: 0x0040, 0x14cb: 0x0040,
+ 0x14cc: 0x0040, 0x14cd: 0x0040, 0x14ce: 0x0040, 0x14cf: 0x0040, 0x14d0: 0x95d1, 0x14d1: 0x9609,
+ 0x14d2: 0x9609, 0x14d3: 0x9641, 0x14d4: 0x9679, 0x14d5: 0x96b1, 0x14d6: 0x96e9, 0x14d7: 0x9721,
+ 0x14d8: 0x9759, 0x14d9: 0x9759, 0x14da: 0x9791, 0x14db: 0x97c9, 0x14dc: 0x9801, 0x14dd: 0x9839,
+ 0x14de: 0x9871, 0x14df: 0x98a9, 0x14e0: 0x98a9, 0x14e1: 0x98e1, 0x14e2: 0x9919, 0x14e3: 0x9919,
+ 0x14e4: 0x9951, 0x14e5: 0x9951, 0x14e6: 0x9989, 0x14e7: 0x99c1, 0x14e8: 0x99c1, 0x14e9: 0x99f9,
+ 0x14ea: 0x9a31, 0x14eb: 0x9a31, 0x14ec: 0x9a69, 0x14ed: 0x9a69, 0x14ee: 0x9aa1, 0x14ef: 0x9ad9,
+ 0x14f0: 0x9ad9, 0x14f1: 0x9b11, 0x14f2: 0x9b11, 0x14f3: 0x9b49, 0x14f4: 0x9b81, 0x14f5: 0x9bb9,
+ 0x14f6: 0x9bf1, 0x14f7: 0x9bf1, 0x14f8: 0x9c29, 0x14f9: 0x9c61, 0x14fa: 0x9c99, 0x14fb: 0x9cd1,
+ 0x14fc: 0x9d09, 0x14fd: 0x9d09, 0x14fe: 0x9d41, 0x14ff: 0x9d79,
// Block 0x54, offset 0x1500
- 0x1500: 0x7e95, 0x1501: 0x7eb5, 0x1502: 0x7ed5, 0x1503: 0x7eb5, 0x1504: 0x7ef5, 0x1505: 0x0018,
- 0x1506: 0x0018, 0x1507: 0xaf4a, 0x1508: 0xaf5a, 0x1509: 0x7f16, 0x150a: 0x7f36, 0x150b: 0x7f56,
- 0x150c: 0x7f76, 0x150d: 0xaf1a, 0x150e: 0xaf1a, 0x150f: 0xaf1a, 0x1510: 0xaeda, 0x1511: 0x7f95,
- 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x03c2, 0x1515: 0xaeea, 0x1516: 0xaf0a, 0x1517: 0xaefa,
- 0x1518: 0x7fb5, 0x1519: 0x1fd2, 0x151a: 0x1fe2, 0x151b: 0xaf2a, 0x151c: 0xaf3a, 0x151d: 0x7e95,
- 0x151e: 0x7ef5, 0x151f: 0xaf6a, 0x1520: 0xaf7a, 0x1521: 0xaf8a, 0x1522: 0x1fb2, 0x1523: 0xaf99,
- 0x1524: 0xafaa, 0x1525: 0xafba, 0x1526: 0x1fc2, 0x1527: 0x0040, 0x1528: 0xafca, 0x1529: 0xafda,
- 0x152a: 0xafea, 0x152b: 0xaffa, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040,
- 0x1530: 0x7fd6, 0x1531: 0xb009, 0x1532: 0x7ff6, 0x1533: 0x0008, 0x1534: 0x8016, 0x1535: 0x0040,
- 0x1536: 0x8036, 0x1537: 0xb031, 0x1538: 0x8056, 0x1539: 0xb059, 0x153a: 0x8076, 0x153b: 0xb081,
- 0x153c: 0x8096, 0x153d: 0xb0a9, 0x153e: 0x80b6, 0x153f: 0xb0d1,
+ 0x1500: 0xa949, 0x1501: 0xa981, 0x1502: 0xa9b9, 0x1503: 0xa8a1, 0x1504: 0x9bb9, 0x1505: 0x9989,
+ 0x1506: 0xa9f1, 0x1507: 0xaa29, 0x1508: 0x0040, 0x1509: 0x0040, 0x150a: 0x0040, 0x150b: 0x0040,
+ 0x150c: 0x0040, 0x150d: 0x0040, 0x150e: 0x0040, 0x150f: 0x0040, 0x1510: 0x0040, 0x1511: 0x0040,
+ 0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0040, 0x1515: 0x0040, 0x1516: 0x0040, 0x1517: 0x0040,
+ 0x1518: 0x0040, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040,
+ 0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x0040, 0x1521: 0x0040, 0x1522: 0x0040, 0x1523: 0x0040,
+ 0x1524: 0x0040, 0x1525: 0x0040, 0x1526: 0x0040, 0x1527: 0x0040, 0x1528: 0x0040, 0x1529: 0x0040,
+ 0x152a: 0x0040, 0x152b: 0x0040, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040,
+ 0x1530: 0xaa61, 0x1531: 0xaa99, 0x1532: 0xaad1, 0x1533: 0xab19, 0x1534: 0xab61, 0x1535: 0xaba9,
+ 0x1536: 0xabf1, 0x1537: 0xac39, 0x1538: 0xac81, 0x1539: 0xacc9, 0x153a: 0xad02, 0x153b: 0xae12,
+ 0x153c: 0xae91, 0x153d: 0x0018, 0x153e: 0x0040, 0x153f: 0x0040,
// Block 0x55, offset 0x1540
- 0x1540: 0xb0f9, 0x1541: 0xb111, 0x1542: 0xb111, 0x1543: 0xb129, 0x1544: 0xb129, 0x1545: 0xb141,
- 0x1546: 0xb141, 0x1547: 0xb159, 0x1548: 0xb159, 0x1549: 0xb171, 0x154a: 0xb171, 0x154b: 0xb171,
- 0x154c: 0xb171, 0x154d: 0xb189, 0x154e: 0xb189, 0x154f: 0xb1a1, 0x1550: 0xb1a1, 0x1551: 0xb1a1,
- 0x1552: 0xb1a1, 0x1553: 0xb1b9, 0x1554: 0xb1b9, 0x1555: 0xb1d1, 0x1556: 0xb1d1, 0x1557: 0xb1d1,
- 0x1558: 0xb1d1, 0x1559: 0xb1e9, 0x155a: 0xb1e9, 0x155b: 0xb1e9, 0x155c: 0xb1e9, 0x155d: 0xb201,
- 0x155e: 0xb201, 0x155f: 0xb201, 0x1560: 0xb201, 0x1561: 0xb219, 0x1562: 0xb219, 0x1563: 0xb219,
- 0x1564: 0xb219, 0x1565: 0xb231, 0x1566: 0xb231, 0x1567: 0xb231, 0x1568: 0xb231, 0x1569: 0xb249,
- 0x156a: 0xb249, 0x156b: 0xb261, 0x156c: 0xb261, 0x156d: 0xb279, 0x156e: 0xb279, 0x156f: 0xb291,
- 0x1570: 0xb291, 0x1571: 0xb2a9, 0x1572: 0xb2a9, 0x1573: 0xb2a9, 0x1574: 0xb2a9, 0x1575: 0xb2c1,
- 0x1576: 0xb2c1, 0x1577: 0xb2c1, 0x1578: 0xb2c1, 0x1579: 0xb2d9, 0x157a: 0xb2d9, 0x157b: 0xb2d9,
- 0x157c: 0xb2d9, 0x157d: 0xb2f1, 0x157e: 0xb2f1, 0x157f: 0xb2f1,
+ 0x1540: 0x33c0, 0x1541: 0x33c0, 0x1542: 0x33c0, 0x1543: 0x33c0, 0x1544: 0x33c0, 0x1545: 0x33c0,
+ 0x1546: 0x33c0, 0x1547: 0x33c0, 0x1548: 0x33c0, 0x1549: 0x33c0, 0x154a: 0x33c0, 0x154b: 0x33c0,
+ 0x154c: 0x33c0, 0x154d: 0x33c0, 0x154e: 0x33c0, 0x154f: 0x33c0, 0x1550: 0xaeda, 0x1551: 0x7d55,
+ 0x1552: 0x0040, 0x1553: 0xaeea, 0x1554: 0x03c2, 0x1555: 0xaefa, 0x1556: 0xaf0a, 0x1557: 0x7d75,
+ 0x1558: 0x7d95, 0x1559: 0x0040, 0x155a: 0x0040, 0x155b: 0x0040, 0x155c: 0x0040, 0x155d: 0x0040,
+ 0x155e: 0x0040, 0x155f: 0x0040, 0x1560: 0x3308, 0x1561: 0x3308, 0x1562: 0x3308, 0x1563: 0x3308,
+ 0x1564: 0x3308, 0x1565: 0x3308, 0x1566: 0x3308, 0x1567: 0x3308, 0x1568: 0x3308, 0x1569: 0x3308,
+ 0x156a: 0x3308, 0x156b: 0x3308, 0x156c: 0x3308, 0x156d: 0x3308, 0x156e: 0x3308, 0x156f: 0x3308,
+ 0x1570: 0x0040, 0x1571: 0x7db5, 0x1572: 0x7dd5, 0x1573: 0xaf1a, 0x1574: 0xaf1a, 0x1575: 0x1fd2,
+ 0x1576: 0x1fe2, 0x1577: 0xaf2a, 0x1578: 0xaf3a, 0x1579: 0x7df5, 0x157a: 0x7e15, 0x157b: 0x7e35,
+ 0x157c: 0x7df5, 0x157d: 0x7e55, 0x157e: 0x7e75, 0x157f: 0x7e55,
// Block 0x56, offset 0x1580
- 0x1580: 0xb2f1, 0x1581: 0xb309, 0x1582: 0xb309, 0x1583: 0xb309, 0x1584: 0xb309, 0x1585: 0xb321,
- 0x1586: 0xb321, 0x1587: 0xb321, 0x1588: 0xb321, 0x1589: 0xb339, 0x158a: 0xb339, 0x158b: 0xb339,
- 0x158c: 0xb339, 0x158d: 0xb351, 0x158e: 0xb351, 0x158f: 0xb351, 0x1590: 0xb351, 0x1591: 0xb369,
- 0x1592: 0xb369, 0x1593: 0xb369, 0x1594: 0xb369, 0x1595: 0xb381, 0x1596: 0xb381, 0x1597: 0xb381,
- 0x1598: 0xb381, 0x1599: 0xb399, 0x159a: 0xb399, 0x159b: 0xb399, 0x159c: 0xb399, 0x159d: 0xb3b1,
- 0x159e: 0xb3b1, 0x159f: 0xb3b1, 0x15a0: 0xb3b1, 0x15a1: 0xb3c9, 0x15a2: 0xb3c9, 0x15a3: 0xb3c9,
- 0x15a4: 0xb3c9, 0x15a5: 0xb3e1, 0x15a6: 0xb3e1, 0x15a7: 0xb3e1, 0x15a8: 0xb3e1, 0x15a9: 0xb3f9,
- 0x15aa: 0xb3f9, 0x15ab: 0xb3f9, 0x15ac: 0xb3f9, 0x15ad: 0xb411, 0x15ae: 0xb411, 0x15af: 0x7ab1,
- 0x15b0: 0x7ab1, 0x15b1: 0xb429, 0x15b2: 0xb429, 0x15b3: 0xb429, 0x15b4: 0xb429, 0x15b5: 0xb441,
- 0x15b6: 0xb441, 0x15b7: 0xb469, 0x15b8: 0xb469, 0x15b9: 0xb491, 0x15ba: 0xb491, 0x15bb: 0xb4b9,
- 0x15bc: 0xb4b9, 0x15bd: 0x0040, 0x15be: 0x0040, 0x15bf: 0x03c0,
+ 0x1580: 0x7e95, 0x1581: 0x7eb5, 0x1582: 0x7ed5, 0x1583: 0x7eb5, 0x1584: 0x7ef5, 0x1585: 0x0018,
+ 0x1586: 0x0018, 0x1587: 0xaf4a, 0x1588: 0xaf5a, 0x1589: 0x7f16, 0x158a: 0x7f36, 0x158b: 0x7f56,
+ 0x158c: 0x7f76, 0x158d: 0xaf1a, 0x158e: 0xaf1a, 0x158f: 0xaf1a, 0x1590: 0xaeda, 0x1591: 0x7f95,
+ 0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x03c2, 0x1595: 0xaeea, 0x1596: 0xaf0a, 0x1597: 0xaefa,
+ 0x1598: 0x7fb5, 0x1599: 0x1fd2, 0x159a: 0x1fe2, 0x159b: 0xaf2a, 0x159c: 0xaf3a, 0x159d: 0x7e95,
+ 0x159e: 0x7ef5, 0x159f: 0xaf6a, 0x15a0: 0xaf7a, 0x15a1: 0xaf8a, 0x15a2: 0x1fb2, 0x15a3: 0xaf99,
+ 0x15a4: 0xafaa, 0x15a5: 0xafba, 0x15a6: 0x1fc2, 0x15a7: 0x0040, 0x15a8: 0xafca, 0x15a9: 0xafda,
+ 0x15aa: 0xafea, 0x15ab: 0xaffa, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040,
+ 0x15b0: 0x7fd6, 0x15b1: 0xb009, 0x15b2: 0x7ff6, 0x15b3: 0x0808, 0x15b4: 0x8016, 0x15b5: 0x0040,
+ 0x15b6: 0x8036, 0x15b7: 0xb031, 0x15b8: 0x8056, 0x15b9: 0xb059, 0x15ba: 0x8076, 0x15bb: 0xb081,
+ 0x15bc: 0x8096, 0x15bd: 0xb0a9, 0x15be: 0x80b6, 0x15bf: 0xb0d1,
// Block 0x57, offset 0x15c0
- 0x15c0: 0x0040, 0x15c1: 0xaefa, 0x15c2: 0xb4e2, 0x15c3: 0xaf6a, 0x15c4: 0xafda, 0x15c5: 0xafea,
- 0x15c6: 0xaf7a, 0x15c7: 0xb4f2, 0x15c8: 0x1fd2, 0x15c9: 0x1fe2, 0x15ca: 0xaf8a, 0x15cb: 0x1fb2,
- 0x15cc: 0xaeda, 0x15cd: 0xaf99, 0x15ce: 0x29d1, 0x15cf: 0xb502, 0x15d0: 0x1f41, 0x15d1: 0x00c9,
- 0x15d2: 0x0069, 0x15d3: 0x0079, 0x15d4: 0x1f51, 0x15d5: 0x1f61, 0x15d6: 0x1f71, 0x15d7: 0x1f81,
- 0x15d8: 0x1f91, 0x15d9: 0x1fa1, 0x15da: 0xaeea, 0x15db: 0x03c2, 0x15dc: 0xafaa, 0x15dd: 0x1fc2,
- 0x15de: 0xafba, 0x15df: 0xaf0a, 0x15e0: 0xaffa, 0x15e1: 0x0039, 0x15e2: 0x0ee9, 0x15e3: 0x1159,
- 0x15e4: 0x0ef9, 0x15e5: 0x0f09, 0x15e6: 0x1199, 0x15e7: 0x0f31, 0x15e8: 0x0249, 0x15e9: 0x0f41,
- 0x15ea: 0x0259, 0x15eb: 0x0f51, 0x15ec: 0x0359, 0x15ed: 0x0f61, 0x15ee: 0x0f71, 0x15ef: 0x00d9,
- 0x15f0: 0x0f99, 0x15f1: 0x2039, 0x15f2: 0x0269, 0x15f3: 0x01d9, 0x15f4: 0x0fa9, 0x15f5: 0x0fb9,
- 0x15f6: 0x1089, 0x15f7: 0x0279, 0x15f8: 0x0369, 0x15f9: 0x0289, 0x15fa: 0x13d1, 0x15fb: 0xaf4a,
- 0x15fc: 0xafca, 0x15fd: 0xaf5a, 0x15fe: 0xb512, 0x15ff: 0xaf1a,
+ 0x15c0: 0xb0f9, 0x15c1: 0xb111, 0x15c2: 0xb111, 0x15c3: 0xb129, 0x15c4: 0xb129, 0x15c5: 0xb141,
+ 0x15c6: 0xb141, 0x15c7: 0xb159, 0x15c8: 0xb159, 0x15c9: 0xb171, 0x15ca: 0xb171, 0x15cb: 0xb171,
+ 0x15cc: 0xb171, 0x15cd: 0xb189, 0x15ce: 0xb189, 0x15cf: 0xb1a1, 0x15d0: 0xb1a1, 0x15d1: 0xb1a1,
+ 0x15d2: 0xb1a1, 0x15d3: 0xb1b9, 0x15d4: 0xb1b9, 0x15d5: 0xb1d1, 0x15d6: 0xb1d1, 0x15d7: 0xb1d1,
+ 0x15d8: 0xb1d1, 0x15d9: 0xb1e9, 0x15da: 0xb1e9, 0x15db: 0xb1e9, 0x15dc: 0xb1e9, 0x15dd: 0xb201,
+ 0x15de: 0xb201, 0x15df: 0xb201, 0x15e0: 0xb201, 0x15e1: 0xb219, 0x15e2: 0xb219, 0x15e3: 0xb219,
+ 0x15e4: 0xb219, 0x15e5: 0xb231, 0x15e6: 0xb231, 0x15e7: 0xb231, 0x15e8: 0xb231, 0x15e9: 0xb249,
+ 0x15ea: 0xb249, 0x15eb: 0xb261, 0x15ec: 0xb261, 0x15ed: 0xb279, 0x15ee: 0xb279, 0x15ef: 0xb291,
+ 0x15f0: 0xb291, 0x15f1: 0xb2a9, 0x15f2: 0xb2a9, 0x15f3: 0xb2a9, 0x15f4: 0xb2a9, 0x15f5: 0xb2c1,
+ 0x15f6: 0xb2c1, 0x15f7: 0xb2c1, 0x15f8: 0xb2c1, 0x15f9: 0xb2d9, 0x15fa: 0xb2d9, 0x15fb: 0xb2d9,
+ 0x15fc: 0xb2d9, 0x15fd: 0xb2f1, 0x15fe: 0xb2f1, 0x15ff: 0xb2f1,
// Block 0x58, offset 0x1600
- 0x1600: 0x1caa, 0x1601: 0x0039, 0x1602: 0x0ee9, 0x1603: 0x1159, 0x1604: 0x0ef9, 0x1605: 0x0f09,
- 0x1606: 0x1199, 0x1607: 0x0f31, 0x1608: 0x0249, 0x1609: 0x0f41, 0x160a: 0x0259, 0x160b: 0x0f51,
- 0x160c: 0x0359, 0x160d: 0x0f61, 0x160e: 0x0f71, 0x160f: 0x00d9, 0x1610: 0x0f99, 0x1611: 0x2039,
- 0x1612: 0x0269, 0x1613: 0x01d9, 0x1614: 0x0fa9, 0x1615: 0x0fb9, 0x1616: 0x1089, 0x1617: 0x0279,
- 0x1618: 0x0369, 0x1619: 0x0289, 0x161a: 0x13d1, 0x161b: 0xaf2a, 0x161c: 0xb522, 0x161d: 0xaf3a,
- 0x161e: 0xb532, 0x161f: 0x80d5, 0x1620: 0x80f5, 0x1621: 0x29d1, 0x1622: 0x8115, 0x1623: 0x8115,
- 0x1624: 0x8135, 0x1625: 0x8155, 0x1626: 0x8175, 0x1627: 0x8195, 0x1628: 0x81b5, 0x1629: 0x81d5,
- 0x162a: 0x81f5, 0x162b: 0x8215, 0x162c: 0x8235, 0x162d: 0x8255, 0x162e: 0x8275, 0x162f: 0x8295,
- 0x1630: 0x82b5, 0x1631: 0x82d5, 0x1632: 0x82f5, 0x1633: 0x8315, 0x1634: 0x8335, 0x1635: 0x8355,
- 0x1636: 0x8375, 0x1637: 0x8395, 0x1638: 0x83b5, 0x1639: 0x83d5, 0x163a: 0x83f5, 0x163b: 0x8415,
- 0x163c: 0x81b5, 0x163d: 0x8435, 0x163e: 0x8455, 0x163f: 0x8215,
+ 0x1600: 0xb2f1, 0x1601: 0xb309, 0x1602: 0xb309, 0x1603: 0xb309, 0x1604: 0xb309, 0x1605: 0xb321,
+ 0x1606: 0xb321, 0x1607: 0xb321, 0x1608: 0xb321, 0x1609: 0xb339, 0x160a: 0xb339, 0x160b: 0xb339,
+ 0x160c: 0xb339, 0x160d: 0xb351, 0x160e: 0xb351, 0x160f: 0xb351, 0x1610: 0xb351, 0x1611: 0xb369,
+ 0x1612: 0xb369, 0x1613: 0xb369, 0x1614: 0xb369, 0x1615: 0xb381, 0x1616: 0xb381, 0x1617: 0xb381,
+ 0x1618: 0xb381, 0x1619: 0xb399, 0x161a: 0xb399, 0x161b: 0xb399, 0x161c: 0xb399, 0x161d: 0xb3b1,
+ 0x161e: 0xb3b1, 0x161f: 0xb3b1, 0x1620: 0xb3b1, 0x1621: 0xb3c9, 0x1622: 0xb3c9, 0x1623: 0xb3c9,
+ 0x1624: 0xb3c9, 0x1625: 0xb3e1, 0x1626: 0xb3e1, 0x1627: 0xb3e1, 0x1628: 0xb3e1, 0x1629: 0xb3f9,
+ 0x162a: 0xb3f9, 0x162b: 0xb3f9, 0x162c: 0xb3f9, 0x162d: 0xb411, 0x162e: 0xb411, 0x162f: 0x7ab1,
+ 0x1630: 0x7ab1, 0x1631: 0xb429, 0x1632: 0xb429, 0x1633: 0xb429, 0x1634: 0xb429, 0x1635: 0xb441,
+ 0x1636: 0xb441, 0x1637: 0xb469, 0x1638: 0xb469, 0x1639: 0xb491, 0x163a: 0xb491, 0x163b: 0xb4b9,
+ 0x163c: 0xb4b9, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0,
// Block 0x59, offset 0x1640
- 0x1640: 0x8475, 0x1641: 0x8495, 0x1642: 0x84b5, 0x1643: 0x84d5, 0x1644: 0x84f5, 0x1645: 0x8515,
- 0x1646: 0x8535, 0x1647: 0x8555, 0x1648: 0x84d5, 0x1649: 0x8575, 0x164a: 0x84d5, 0x164b: 0x8595,
- 0x164c: 0x8595, 0x164d: 0x85b5, 0x164e: 0x85b5, 0x164f: 0x85d5, 0x1650: 0x8515, 0x1651: 0x85f5,
- 0x1652: 0x8615, 0x1653: 0x85f5, 0x1654: 0x8635, 0x1655: 0x8615, 0x1656: 0x8655, 0x1657: 0x8655,
- 0x1658: 0x8675, 0x1659: 0x8675, 0x165a: 0x8695, 0x165b: 0x8695, 0x165c: 0x8615, 0x165d: 0x8115,
- 0x165e: 0x86b5, 0x165f: 0x86d5, 0x1660: 0x0040, 0x1661: 0x86f5, 0x1662: 0x8715, 0x1663: 0x8735,
- 0x1664: 0x8755, 0x1665: 0x8735, 0x1666: 0x8775, 0x1667: 0x8795, 0x1668: 0x87b5, 0x1669: 0x87b5,
- 0x166a: 0x87d5, 0x166b: 0x87d5, 0x166c: 0x87f5, 0x166d: 0x87f5, 0x166e: 0x87d5, 0x166f: 0x87d5,
- 0x1670: 0x8815, 0x1671: 0x8835, 0x1672: 0x8855, 0x1673: 0x8875, 0x1674: 0x8895, 0x1675: 0x88b5,
- 0x1676: 0x88b5, 0x1677: 0x88b5, 0x1678: 0x88d5, 0x1679: 0x88d5, 0x167a: 0x88d5, 0x167b: 0x88d5,
- 0x167c: 0x87b5, 0x167d: 0x87b5, 0x167e: 0x87b5, 0x167f: 0x0040,
+ 0x1640: 0x0040, 0x1641: 0xaefa, 0x1642: 0xb4e2, 0x1643: 0xaf6a, 0x1644: 0xafda, 0x1645: 0xafea,
+ 0x1646: 0xaf7a, 0x1647: 0xb4f2, 0x1648: 0x1fd2, 0x1649: 0x1fe2, 0x164a: 0xaf8a, 0x164b: 0x1fb2,
+ 0x164c: 0xaeda, 0x164d: 0xaf99, 0x164e: 0x29d1, 0x164f: 0xb502, 0x1650: 0x1f41, 0x1651: 0x00c9,
+ 0x1652: 0x0069, 0x1653: 0x0079, 0x1654: 0x1f51, 0x1655: 0x1f61, 0x1656: 0x1f71, 0x1657: 0x1f81,
+ 0x1658: 0x1f91, 0x1659: 0x1fa1, 0x165a: 0xaeea, 0x165b: 0x03c2, 0x165c: 0xafaa, 0x165d: 0x1fc2,
+ 0x165e: 0xafba, 0x165f: 0xaf0a, 0x1660: 0xaffa, 0x1661: 0x0039, 0x1662: 0x0ee9, 0x1663: 0x1159,
+ 0x1664: 0x0ef9, 0x1665: 0x0f09, 0x1666: 0x1199, 0x1667: 0x0f31, 0x1668: 0x0249, 0x1669: 0x0f41,
+ 0x166a: 0x0259, 0x166b: 0x0f51, 0x166c: 0x0359, 0x166d: 0x0f61, 0x166e: 0x0f71, 0x166f: 0x00d9,
+ 0x1670: 0x0f99, 0x1671: 0x2039, 0x1672: 0x0269, 0x1673: 0x01d9, 0x1674: 0x0fa9, 0x1675: 0x0fb9,
+ 0x1676: 0x1089, 0x1677: 0x0279, 0x1678: 0x0369, 0x1679: 0x0289, 0x167a: 0x13d1, 0x167b: 0xaf4a,
+ 0x167c: 0xafca, 0x167d: 0xaf5a, 0x167e: 0xb512, 0x167f: 0xaf1a,
// Block 0x5a, offset 0x1680
- 0x1680: 0x0040, 0x1681: 0x0040, 0x1682: 0x8715, 0x1683: 0x86f5, 0x1684: 0x88f5, 0x1685: 0x86f5,
- 0x1686: 0x8715, 0x1687: 0x86f5, 0x1688: 0x0040, 0x1689: 0x0040, 0x168a: 0x8915, 0x168b: 0x8715,
- 0x168c: 0x8935, 0x168d: 0x88f5, 0x168e: 0x8935, 0x168f: 0x8715, 0x1690: 0x0040, 0x1691: 0x0040,
- 0x1692: 0x8955, 0x1693: 0x8975, 0x1694: 0x8875, 0x1695: 0x8935, 0x1696: 0x88f5, 0x1697: 0x8935,
- 0x1698: 0x0040, 0x1699: 0x0040, 0x169a: 0x8995, 0x169b: 0x89b5, 0x169c: 0x8995, 0x169d: 0x0040,
- 0x169e: 0x0040, 0x169f: 0x0040, 0x16a0: 0xb541, 0x16a1: 0xb559, 0x16a2: 0xb571, 0x16a3: 0x89d6,
- 0x16a4: 0xb589, 0x16a5: 0xb5a1, 0x16a6: 0x89f5, 0x16a7: 0x0040, 0x16a8: 0x8a15, 0x16a9: 0x8a35,
- 0x16aa: 0x8a55, 0x16ab: 0x8a35, 0x16ac: 0x8a75, 0x16ad: 0x8a95, 0x16ae: 0x8ab5, 0x16af: 0x0040,
- 0x16b0: 0x0040, 0x16b1: 0x0040, 0x16b2: 0x0040, 0x16b3: 0x0040, 0x16b4: 0x0040, 0x16b5: 0x0040,
- 0x16b6: 0x0040, 0x16b7: 0x0040, 0x16b8: 0x0040, 0x16b9: 0x0340, 0x16ba: 0x0340, 0x16bb: 0x0340,
- 0x16bc: 0x0040, 0x16bd: 0x0040, 0x16be: 0x0040, 0x16bf: 0x0040,
+ 0x1680: 0x1caa, 0x1681: 0x0039, 0x1682: 0x0ee9, 0x1683: 0x1159, 0x1684: 0x0ef9, 0x1685: 0x0f09,
+ 0x1686: 0x1199, 0x1687: 0x0f31, 0x1688: 0x0249, 0x1689: 0x0f41, 0x168a: 0x0259, 0x168b: 0x0f51,
+ 0x168c: 0x0359, 0x168d: 0x0f61, 0x168e: 0x0f71, 0x168f: 0x00d9, 0x1690: 0x0f99, 0x1691: 0x2039,
+ 0x1692: 0x0269, 0x1693: 0x01d9, 0x1694: 0x0fa9, 0x1695: 0x0fb9, 0x1696: 0x1089, 0x1697: 0x0279,
+ 0x1698: 0x0369, 0x1699: 0x0289, 0x169a: 0x13d1, 0x169b: 0xaf2a, 0x169c: 0xb522, 0x169d: 0xaf3a,
+ 0x169e: 0xb532, 0x169f: 0x80d5, 0x16a0: 0x80f5, 0x16a1: 0x29d1, 0x16a2: 0x8115, 0x16a3: 0x8115,
+ 0x16a4: 0x8135, 0x16a5: 0x8155, 0x16a6: 0x8175, 0x16a7: 0x8195, 0x16a8: 0x81b5, 0x16a9: 0x81d5,
+ 0x16aa: 0x81f5, 0x16ab: 0x8215, 0x16ac: 0x8235, 0x16ad: 0x8255, 0x16ae: 0x8275, 0x16af: 0x8295,
+ 0x16b0: 0x82b5, 0x16b1: 0x82d5, 0x16b2: 0x82f5, 0x16b3: 0x8315, 0x16b4: 0x8335, 0x16b5: 0x8355,
+ 0x16b6: 0x8375, 0x16b7: 0x8395, 0x16b8: 0x83b5, 0x16b9: 0x83d5, 0x16ba: 0x83f5, 0x16bb: 0x8415,
+ 0x16bc: 0x81b5, 0x16bd: 0x8435, 0x16be: 0x8455, 0x16bf: 0x8215,
// Block 0x5b, offset 0x16c0
- 0x16c0: 0x0208, 0x16c1: 0x0208, 0x16c2: 0x0208, 0x16c3: 0x0208, 0x16c4: 0x0208, 0x16c5: 0x0408,
- 0x16c6: 0x0008, 0x16c7: 0x0408, 0x16c8: 0x0018, 0x16c9: 0x0408, 0x16ca: 0x0408, 0x16cb: 0x0008,
- 0x16cc: 0x0008, 0x16cd: 0x0108, 0x16ce: 0x0408, 0x16cf: 0x0408, 0x16d0: 0x0408, 0x16d1: 0x0408,
- 0x16d2: 0x0408, 0x16d3: 0x0208, 0x16d4: 0x0208, 0x16d5: 0x0208, 0x16d6: 0x0208, 0x16d7: 0x0108,
- 0x16d8: 0x0208, 0x16d9: 0x0208, 0x16da: 0x0208, 0x16db: 0x0208, 0x16dc: 0x0208, 0x16dd: 0x0408,
- 0x16de: 0x0208, 0x16df: 0x0208, 0x16e0: 0x0208, 0x16e1: 0x0408, 0x16e2: 0x0008, 0x16e3: 0x0008,
- 0x16e4: 0x0408, 0x16e5: 0x1308, 0x16e6: 0x1308, 0x16e7: 0x0040, 0x16e8: 0x0040, 0x16e9: 0x0040,
- 0x16ea: 0x0040, 0x16eb: 0x0218, 0x16ec: 0x0218, 0x16ed: 0x0218, 0x16ee: 0x0218, 0x16ef: 0x0418,
- 0x16f0: 0x0018, 0x16f1: 0x0018, 0x16f2: 0x0018, 0x16f3: 0x0018, 0x16f4: 0x0018, 0x16f5: 0x0018,
- 0x16f6: 0x0018, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0040, 0x16fa: 0x0040, 0x16fb: 0x0040,
- 0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040,
+ 0x16c0: 0x8475, 0x16c1: 0x8495, 0x16c2: 0x84b5, 0x16c3: 0x84d5, 0x16c4: 0x84f5, 0x16c5: 0x8515,
+ 0x16c6: 0x8535, 0x16c7: 0x8555, 0x16c8: 0x84d5, 0x16c9: 0x8575, 0x16ca: 0x84d5, 0x16cb: 0x8595,
+ 0x16cc: 0x8595, 0x16cd: 0x85b5, 0x16ce: 0x85b5, 0x16cf: 0x85d5, 0x16d0: 0x8515, 0x16d1: 0x85f5,
+ 0x16d2: 0x8615, 0x16d3: 0x85f5, 0x16d4: 0x8635, 0x16d5: 0x8615, 0x16d6: 0x8655, 0x16d7: 0x8655,
+ 0x16d8: 0x8675, 0x16d9: 0x8675, 0x16da: 0x8695, 0x16db: 0x8695, 0x16dc: 0x8615, 0x16dd: 0x8115,
+ 0x16de: 0x86b5, 0x16df: 0x86d5, 0x16e0: 0x0040, 0x16e1: 0x86f5, 0x16e2: 0x8715, 0x16e3: 0x8735,
+ 0x16e4: 0x8755, 0x16e5: 0x8735, 0x16e6: 0x8775, 0x16e7: 0x8795, 0x16e8: 0x87b5, 0x16e9: 0x87b5,
+ 0x16ea: 0x87d5, 0x16eb: 0x87d5, 0x16ec: 0x87f5, 0x16ed: 0x87f5, 0x16ee: 0x87d5, 0x16ef: 0x87d5,
+ 0x16f0: 0x8815, 0x16f1: 0x8835, 0x16f2: 0x8855, 0x16f3: 0x8875, 0x16f4: 0x8895, 0x16f5: 0x88b5,
+ 0x16f6: 0x88b5, 0x16f7: 0x88b5, 0x16f8: 0x88d5, 0x16f9: 0x88d5, 0x16fa: 0x88d5, 0x16fb: 0x88d5,
+ 0x16fc: 0x87b5, 0x16fd: 0x87b5, 0x16fe: 0x87b5, 0x16ff: 0x0040,
// Block 0x5c, offset 0x1700
- 0x1700: 0x0208, 0x1701: 0x0408, 0x1702: 0x0208, 0x1703: 0x0408, 0x1704: 0x0408, 0x1705: 0x0408,
- 0x1706: 0x0208, 0x1707: 0x0208, 0x1708: 0x0208, 0x1709: 0x0408, 0x170a: 0x0208, 0x170b: 0x0208,
- 0x170c: 0x0408, 0x170d: 0x0208, 0x170e: 0x0408, 0x170f: 0x0408, 0x1710: 0x0208, 0x1711: 0x0408,
- 0x1712: 0x0040, 0x1713: 0x0040, 0x1714: 0x0040, 0x1715: 0x0040, 0x1716: 0x0040, 0x1717: 0x0040,
- 0x1718: 0x0040, 0x1719: 0x0018, 0x171a: 0x0018, 0x171b: 0x0018, 0x171c: 0x0018, 0x171d: 0x0040,
- 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x0040, 0x1721: 0x0040, 0x1722: 0x0040, 0x1723: 0x0040,
- 0x1724: 0x0040, 0x1725: 0x0040, 0x1726: 0x0040, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0418,
- 0x172a: 0x0418, 0x172b: 0x0418, 0x172c: 0x0418, 0x172d: 0x0218, 0x172e: 0x0218, 0x172f: 0x0018,
+ 0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x8715, 0x1703: 0x86f5, 0x1704: 0x88f5, 0x1705: 0x86f5,
+ 0x1706: 0x8715, 0x1707: 0x86f5, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x8915, 0x170b: 0x8715,
+ 0x170c: 0x8935, 0x170d: 0x88f5, 0x170e: 0x8935, 0x170f: 0x8715, 0x1710: 0x0040, 0x1711: 0x0040,
+ 0x1712: 0x8955, 0x1713: 0x8975, 0x1714: 0x8875, 0x1715: 0x8935, 0x1716: 0x88f5, 0x1717: 0x8935,
+ 0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x8995, 0x171b: 0x89b5, 0x171c: 0x8995, 0x171d: 0x0040,
+ 0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0xb541, 0x1721: 0xb559, 0x1722: 0xb571, 0x1723: 0x89d6,
+ 0x1724: 0xb589, 0x1725: 0xb5a1, 0x1726: 0x89f5, 0x1727: 0x0040, 0x1728: 0x8a15, 0x1729: 0x8a35,
+ 0x172a: 0x8a55, 0x172b: 0x8a35, 0x172c: 0x8a75, 0x172d: 0x8a95, 0x172e: 0x8ab5, 0x172f: 0x0040,
0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040,
- 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040,
+ 0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0340, 0x173a: 0x0340, 0x173b: 0x0340,
0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040,
// Block 0x5d, offset 0x1740
- 0x1740: 0x1308, 0x1741: 0x1308, 0x1742: 0x1008, 0x1743: 0x1008, 0x1744: 0x0040, 0x1745: 0x0008,
- 0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008,
- 0x174c: 0x0008, 0x174d: 0x0040, 0x174e: 0x0040, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0040,
- 0x1752: 0x0040, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008,
- 0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008,
- 0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008,
- 0x1764: 0x0008, 0x1765: 0x0008, 0x1766: 0x0008, 0x1767: 0x0008, 0x1768: 0x0008, 0x1769: 0x0040,
- 0x176a: 0x0008, 0x176b: 0x0008, 0x176c: 0x0008, 0x176d: 0x0008, 0x176e: 0x0008, 0x176f: 0x0008,
- 0x1770: 0x0008, 0x1771: 0x0040, 0x1772: 0x0008, 0x1773: 0x0008, 0x1774: 0x0040, 0x1775: 0x0008,
- 0x1776: 0x0008, 0x1777: 0x0008, 0x1778: 0x0008, 0x1779: 0x0008, 0x177a: 0x0040, 0x177b: 0x0040,
- 0x177c: 0x1308, 0x177d: 0x0008, 0x177e: 0x1008, 0x177f: 0x1008,
+ 0x1740: 0x0a08, 0x1741: 0x0a08, 0x1742: 0x0a08, 0x1743: 0x0a08, 0x1744: 0x0a08, 0x1745: 0x0c08,
+ 0x1746: 0x0808, 0x1747: 0x0c08, 0x1748: 0x0818, 0x1749: 0x0c08, 0x174a: 0x0c08, 0x174b: 0x0808,
+ 0x174c: 0x0808, 0x174d: 0x0908, 0x174e: 0x0c08, 0x174f: 0x0c08, 0x1750: 0x0c08, 0x1751: 0x0c08,
+ 0x1752: 0x0c08, 0x1753: 0x0a08, 0x1754: 0x0a08, 0x1755: 0x0a08, 0x1756: 0x0a08, 0x1757: 0x0908,
+ 0x1758: 0x0a08, 0x1759: 0x0a08, 0x175a: 0x0a08, 0x175b: 0x0a08, 0x175c: 0x0a08, 0x175d: 0x0c08,
+ 0x175e: 0x0a08, 0x175f: 0x0a08, 0x1760: 0x0a08, 0x1761: 0x0c08, 0x1762: 0x0808, 0x1763: 0x0808,
+ 0x1764: 0x0c08, 0x1765: 0x3308, 0x1766: 0x3308, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0040,
+ 0x176a: 0x0040, 0x176b: 0x0a18, 0x176c: 0x0a18, 0x176d: 0x0a18, 0x176e: 0x0a18, 0x176f: 0x0c18,
+ 0x1770: 0x0818, 0x1771: 0x0818, 0x1772: 0x0818, 0x1773: 0x0818, 0x1774: 0x0818, 0x1775: 0x0818,
+ 0x1776: 0x0818, 0x1777: 0x0040, 0x1778: 0x0040, 0x1779: 0x0040, 0x177a: 0x0040, 0x177b: 0x0040,
+ 0x177c: 0x0040, 0x177d: 0x0040, 0x177e: 0x0040, 0x177f: 0x0040,
// Block 0x5e, offset 0x1780
- 0x1780: 0x1308, 0x1781: 0x1008, 0x1782: 0x1008, 0x1783: 0x1008, 0x1784: 0x1008, 0x1785: 0x0040,
- 0x1786: 0x0040, 0x1787: 0x1008, 0x1788: 0x1008, 0x1789: 0x0040, 0x178a: 0x0040, 0x178b: 0x1008,
- 0x178c: 0x1008, 0x178d: 0x1808, 0x178e: 0x0040, 0x178f: 0x0040, 0x1790: 0x0008, 0x1791: 0x0040,
- 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x1008,
- 0x1798: 0x0040, 0x1799: 0x0040, 0x179a: 0x0040, 0x179b: 0x0040, 0x179c: 0x0040, 0x179d: 0x0008,
- 0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x1008, 0x17a3: 0x1008,
- 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x1308, 0x17a7: 0x1308, 0x17a8: 0x1308, 0x17a9: 0x1308,
- 0x17aa: 0x1308, 0x17ab: 0x1308, 0x17ac: 0x1308, 0x17ad: 0x0040, 0x17ae: 0x0040, 0x17af: 0x0040,
- 0x17b0: 0x1308, 0x17b1: 0x1308, 0x17b2: 0x1308, 0x17b3: 0x1308, 0x17b4: 0x1308, 0x17b5: 0x0040,
+ 0x1780: 0x0a08, 0x1781: 0x0c08, 0x1782: 0x0a08, 0x1783: 0x0c08, 0x1784: 0x0c08, 0x1785: 0x0c08,
+ 0x1786: 0x0a08, 0x1787: 0x0a08, 0x1788: 0x0a08, 0x1789: 0x0c08, 0x178a: 0x0a08, 0x178b: 0x0a08,
+ 0x178c: 0x0c08, 0x178d: 0x0a08, 0x178e: 0x0c08, 0x178f: 0x0c08, 0x1790: 0x0a08, 0x1791: 0x0c08,
+ 0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x0040,
+ 0x1798: 0x0040, 0x1799: 0x0818, 0x179a: 0x0818, 0x179b: 0x0818, 0x179c: 0x0818, 0x179d: 0x0040,
+ 0x179e: 0x0040, 0x179f: 0x0040, 0x17a0: 0x0040, 0x17a1: 0x0040, 0x17a2: 0x0040, 0x17a3: 0x0040,
+ 0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x0040, 0x17a7: 0x0040, 0x17a8: 0x0040, 0x17a9: 0x0c18,
+ 0x17aa: 0x0c18, 0x17ab: 0x0c18, 0x17ac: 0x0c18, 0x17ad: 0x0a18, 0x17ae: 0x0a18, 0x17af: 0x0818,
+ 0x17b0: 0x0040, 0x17b1: 0x0040, 0x17b2: 0x0040, 0x17b3: 0x0040, 0x17b4: 0x0040, 0x17b5: 0x0040,
0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040,
0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040,
// Block 0x5f, offset 0x17c0
- 0x17c0: 0x0039, 0x17c1: 0x0ee9, 0x17c2: 0x1159, 0x17c3: 0x0ef9, 0x17c4: 0x0f09, 0x17c5: 0x1199,
- 0x17c6: 0x0f31, 0x17c7: 0x0249, 0x17c8: 0x0f41, 0x17c9: 0x0259, 0x17ca: 0x0f51, 0x17cb: 0x0359,
- 0x17cc: 0x0f61, 0x17cd: 0x0f71, 0x17ce: 0x00d9, 0x17cf: 0x0f99, 0x17d0: 0x2039, 0x17d1: 0x0269,
- 0x17d2: 0x01d9, 0x17d3: 0x0fa9, 0x17d4: 0x0fb9, 0x17d5: 0x1089, 0x17d6: 0x0279, 0x17d7: 0x0369,
- 0x17d8: 0x0289, 0x17d9: 0x13d1, 0x17da: 0x0039, 0x17db: 0x0ee9, 0x17dc: 0x1159, 0x17dd: 0x0ef9,
- 0x17de: 0x0f09, 0x17df: 0x1199, 0x17e0: 0x0f31, 0x17e1: 0x0249, 0x17e2: 0x0f41, 0x17e3: 0x0259,
- 0x17e4: 0x0f51, 0x17e5: 0x0359, 0x17e6: 0x0f61, 0x17e7: 0x0f71, 0x17e8: 0x00d9, 0x17e9: 0x0f99,
- 0x17ea: 0x2039, 0x17eb: 0x0269, 0x17ec: 0x01d9, 0x17ed: 0x0fa9, 0x17ee: 0x0fb9, 0x17ef: 0x1089,
- 0x17f0: 0x0279, 0x17f1: 0x0369, 0x17f2: 0x0289, 0x17f3: 0x13d1, 0x17f4: 0x0039, 0x17f5: 0x0ee9,
- 0x17f6: 0x1159, 0x17f7: 0x0ef9, 0x17f8: 0x0f09, 0x17f9: 0x1199, 0x17fa: 0x0f31, 0x17fb: 0x0249,
- 0x17fc: 0x0f41, 0x17fd: 0x0259, 0x17fe: 0x0f51, 0x17ff: 0x0359,
+ 0x17c0: 0x3308, 0x17c1: 0x3308, 0x17c2: 0x3008, 0x17c3: 0x3008, 0x17c4: 0x0040, 0x17c5: 0x0008,
+ 0x17c6: 0x0008, 0x17c7: 0x0008, 0x17c8: 0x0008, 0x17c9: 0x0008, 0x17ca: 0x0008, 0x17cb: 0x0008,
+ 0x17cc: 0x0008, 0x17cd: 0x0040, 0x17ce: 0x0040, 0x17cf: 0x0008, 0x17d0: 0x0008, 0x17d1: 0x0040,
+ 0x17d2: 0x0040, 0x17d3: 0x0008, 0x17d4: 0x0008, 0x17d5: 0x0008, 0x17d6: 0x0008, 0x17d7: 0x0008,
+ 0x17d8: 0x0008, 0x17d9: 0x0008, 0x17da: 0x0008, 0x17db: 0x0008, 0x17dc: 0x0008, 0x17dd: 0x0008,
+ 0x17de: 0x0008, 0x17df: 0x0008, 0x17e0: 0x0008, 0x17e1: 0x0008, 0x17e2: 0x0008, 0x17e3: 0x0008,
+ 0x17e4: 0x0008, 0x17e5: 0x0008, 0x17e6: 0x0008, 0x17e7: 0x0008, 0x17e8: 0x0008, 0x17e9: 0x0040,
+ 0x17ea: 0x0008, 0x17eb: 0x0008, 0x17ec: 0x0008, 0x17ed: 0x0008, 0x17ee: 0x0008, 0x17ef: 0x0008,
+ 0x17f0: 0x0008, 0x17f1: 0x0040, 0x17f2: 0x0008, 0x17f3: 0x0008, 0x17f4: 0x0040, 0x17f5: 0x0008,
+ 0x17f6: 0x0008, 0x17f7: 0x0008, 0x17f8: 0x0008, 0x17f9: 0x0008, 0x17fa: 0x0040, 0x17fb: 0x0040,
+ 0x17fc: 0x3308, 0x17fd: 0x0008, 0x17fe: 0x3008, 0x17ff: 0x3008,
// Block 0x60, offset 0x1800
- 0x1800: 0x0f61, 0x1801: 0x0f71, 0x1802: 0x00d9, 0x1803: 0x0f99, 0x1804: 0x2039, 0x1805: 0x0269,
- 0x1806: 0x01d9, 0x1807: 0x0fa9, 0x1808: 0x0fb9, 0x1809: 0x1089, 0x180a: 0x0279, 0x180b: 0x0369,
- 0x180c: 0x0289, 0x180d: 0x13d1, 0x180e: 0x0039, 0x180f: 0x0ee9, 0x1810: 0x1159, 0x1811: 0x0ef9,
- 0x1812: 0x0f09, 0x1813: 0x1199, 0x1814: 0x0f31, 0x1815: 0x0040, 0x1816: 0x0f41, 0x1817: 0x0259,
- 0x1818: 0x0f51, 0x1819: 0x0359, 0x181a: 0x0f61, 0x181b: 0x0f71, 0x181c: 0x00d9, 0x181d: 0x0f99,
- 0x181e: 0x2039, 0x181f: 0x0269, 0x1820: 0x01d9, 0x1821: 0x0fa9, 0x1822: 0x0fb9, 0x1823: 0x1089,
- 0x1824: 0x0279, 0x1825: 0x0369, 0x1826: 0x0289, 0x1827: 0x13d1, 0x1828: 0x0039, 0x1829: 0x0ee9,
- 0x182a: 0x1159, 0x182b: 0x0ef9, 0x182c: 0x0f09, 0x182d: 0x1199, 0x182e: 0x0f31, 0x182f: 0x0249,
- 0x1830: 0x0f41, 0x1831: 0x0259, 0x1832: 0x0f51, 0x1833: 0x0359, 0x1834: 0x0f61, 0x1835: 0x0f71,
- 0x1836: 0x00d9, 0x1837: 0x0f99, 0x1838: 0x2039, 0x1839: 0x0269, 0x183a: 0x01d9, 0x183b: 0x0fa9,
- 0x183c: 0x0fb9, 0x183d: 0x1089, 0x183e: 0x0279, 0x183f: 0x0369,
+ 0x1800: 0x3308, 0x1801: 0x3008, 0x1802: 0x3008, 0x1803: 0x3008, 0x1804: 0x3008, 0x1805: 0x0040,
+ 0x1806: 0x0040, 0x1807: 0x3008, 0x1808: 0x3008, 0x1809: 0x0040, 0x180a: 0x0040, 0x180b: 0x3008,
+ 0x180c: 0x3008, 0x180d: 0x3808, 0x180e: 0x0040, 0x180f: 0x0040, 0x1810: 0x0008, 0x1811: 0x0040,
+ 0x1812: 0x0040, 0x1813: 0x0040, 0x1814: 0x0040, 0x1815: 0x0040, 0x1816: 0x0040, 0x1817: 0x3008,
+ 0x1818: 0x0040, 0x1819: 0x0040, 0x181a: 0x0040, 0x181b: 0x0040, 0x181c: 0x0040, 0x181d: 0x0008,
+ 0x181e: 0x0008, 0x181f: 0x0008, 0x1820: 0x0008, 0x1821: 0x0008, 0x1822: 0x3008, 0x1823: 0x3008,
+ 0x1824: 0x0040, 0x1825: 0x0040, 0x1826: 0x3308, 0x1827: 0x3308, 0x1828: 0x3308, 0x1829: 0x3308,
+ 0x182a: 0x3308, 0x182b: 0x3308, 0x182c: 0x3308, 0x182d: 0x0040, 0x182e: 0x0040, 0x182f: 0x0040,
+ 0x1830: 0x3308, 0x1831: 0x3308, 0x1832: 0x3308, 0x1833: 0x3308, 0x1834: 0x3308, 0x1835: 0x0040,
+ 0x1836: 0x0040, 0x1837: 0x0040, 0x1838: 0x0040, 0x1839: 0x0040, 0x183a: 0x0040, 0x183b: 0x0040,
+ 0x183c: 0x0040, 0x183d: 0x0040, 0x183e: 0x0040, 0x183f: 0x0040,
// Block 0x61, offset 0x1840
- 0x1840: 0x0289, 0x1841: 0x13d1, 0x1842: 0x0039, 0x1843: 0x0ee9, 0x1844: 0x1159, 0x1845: 0x0ef9,
- 0x1846: 0x0f09, 0x1847: 0x1199, 0x1848: 0x0f31, 0x1849: 0x0249, 0x184a: 0x0f41, 0x184b: 0x0259,
- 0x184c: 0x0f51, 0x184d: 0x0359, 0x184e: 0x0f61, 0x184f: 0x0f71, 0x1850: 0x00d9, 0x1851: 0x0f99,
- 0x1852: 0x2039, 0x1853: 0x0269, 0x1854: 0x01d9, 0x1855: 0x0fa9, 0x1856: 0x0fb9, 0x1857: 0x1089,
- 0x1858: 0x0279, 0x1859: 0x0369, 0x185a: 0x0289, 0x185b: 0x13d1, 0x185c: 0x0039, 0x185d: 0x0040,
- 0x185e: 0x1159, 0x185f: 0x0ef9, 0x1860: 0x0040, 0x1861: 0x0040, 0x1862: 0x0f31, 0x1863: 0x0040,
- 0x1864: 0x0040, 0x1865: 0x0259, 0x1866: 0x0f51, 0x1867: 0x0040, 0x1868: 0x0040, 0x1869: 0x0f71,
- 0x186a: 0x00d9, 0x186b: 0x0f99, 0x186c: 0x2039, 0x186d: 0x0040, 0x186e: 0x01d9, 0x186f: 0x0fa9,
- 0x1870: 0x0fb9, 0x1871: 0x1089, 0x1872: 0x0279, 0x1873: 0x0369, 0x1874: 0x0289, 0x1875: 0x13d1,
- 0x1876: 0x0039, 0x1877: 0x0ee9, 0x1878: 0x1159, 0x1879: 0x0ef9, 0x187a: 0x0040, 0x187b: 0x1199,
- 0x187c: 0x0040, 0x187d: 0x0249, 0x187e: 0x0f41, 0x187f: 0x0259,
+ 0x1840: 0x0039, 0x1841: 0x0ee9, 0x1842: 0x1159, 0x1843: 0x0ef9, 0x1844: 0x0f09, 0x1845: 0x1199,
+ 0x1846: 0x0f31, 0x1847: 0x0249, 0x1848: 0x0f41, 0x1849: 0x0259, 0x184a: 0x0f51, 0x184b: 0x0359,
+ 0x184c: 0x0f61, 0x184d: 0x0f71, 0x184e: 0x00d9, 0x184f: 0x0f99, 0x1850: 0x2039, 0x1851: 0x0269,
+ 0x1852: 0x01d9, 0x1853: 0x0fa9, 0x1854: 0x0fb9, 0x1855: 0x1089, 0x1856: 0x0279, 0x1857: 0x0369,
+ 0x1858: 0x0289, 0x1859: 0x13d1, 0x185a: 0x0039, 0x185b: 0x0ee9, 0x185c: 0x1159, 0x185d: 0x0ef9,
+ 0x185e: 0x0f09, 0x185f: 0x1199, 0x1860: 0x0f31, 0x1861: 0x0249, 0x1862: 0x0f41, 0x1863: 0x0259,
+ 0x1864: 0x0f51, 0x1865: 0x0359, 0x1866: 0x0f61, 0x1867: 0x0f71, 0x1868: 0x00d9, 0x1869: 0x0f99,
+ 0x186a: 0x2039, 0x186b: 0x0269, 0x186c: 0x01d9, 0x186d: 0x0fa9, 0x186e: 0x0fb9, 0x186f: 0x1089,
+ 0x1870: 0x0279, 0x1871: 0x0369, 0x1872: 0x0289, 0x1873: 0x13d1, 0x1874: 0x0039, 0x1875: 0x0ee9,
+ 0x1876: 0x1159, 0x1877: 0x0ef9, 0x1878: 0x0f09, 0x1879: 0x1199, 0x187a: 0x0f31, 0x187b: 0x0249,
+ 0x187c: 0x0f41, 0x187d: 0x0259, 0x187e: 0x0f51, 0x187f: 0x0359,
// Block 0x62, offset 0x1880
- 0x1880: 0x0f51, 0x1881: 0x0359, 0x1882: 0x0f61, 0x1883: 0x0f71, 0x1884: 0x0040, 0x1885: 0x0f99,
- 0x1886: 0x2039, 0x1887: 0x0269, 0x1888: 0x01d9, 0x1889: 0x0fa9, 0x188a: 0x0fb9, 0x188b: 0x1089,
- 0x188c: 0x0279, 0x188d: 0x0369, 0x188e: 0x0289, 0x188f: 0x13d1, 0x1890: 0x0039, 0x1891: 0x0ee9,
- 0x1892: 0x1159, 0x1893: 0x0ef9, 0x1894: 0x0f09, 0x1895: 0x1199, 0x1896: 0x0f31, 0x1897: 0x0249,
- 0x1898: 0x0f41, 0x1899: 0x0259, 0x189a: 0x0f51, 0x189b: 0x0359, 0x189c: 0x0f61, 0x189d: 0x0f71,
- 0x189e: 0x00d9, 0x189f: 0x0f99, 0x18a0: 0x2039, 0x18a1: 0x0269, 0x18a2: 0x01d9, 0x18a3: 0x0fa9,
- 0x18a4: 0x0fb9, 0x18a5: 0x1089, 0x18a6: 0x0279, 0x18a7: 0x0369, 0x18a8: 0x0289, 0x18a9: 0x13d1,
- 0x18aa: 0x0039, 0x18ab: 0x0ee9, 0x18ac: 0x1159, 0x18ad: 0x0ef9, 0x18ae: 0x0f09, 0x18af: 0x1199,
- 0x18b0: 0x0f31, 0x18b1: 0x0249, 0x18b2: 0x0f41, 0x18b3: 0x0259, 0x18b4: 0x0f51, 0x18b5: 0x0359,
- 0x18b6: 0x0f61, 0x18b7: 0x0f71, 0x18b8: 0x00d9, 0x18b9: 0x0f99, 0x18ba: 0x2039, 0x18bb: 0x0269,
- 0x18bc: 0x01d9, 0x18bd: 0x0fa9, 0x18be: 0x0fb9, 0x18bf: 0x1089,
+ 0x1880: 0x0f61, 0x1881: 0x0f71, 0x1882: 0x00d9, 0x1883: 0x0f99, 0x1884: 0x2039, 0x1885: 0x0269,
+ 0x1886: 0x01d9, 0x1887: 0x0fa9, 0x1888: 0x0fb9, 0x1889: 0x1089, 0x188a: 0x0279, 0x188b: 0x0369,
+ 0x188c: 0x0289, 0x188d: 0x13d1, 0x188e: 0x0039, 0x188f: 0x0ee9, 0x1890: 0x1159, 0x1891: 0x0ef9,
+ 0x1892: 0x0f09, 0x1893: 0x1199, 0x1894: 0x0f31, 0x1895: 0x0040, 0x1896: 0x0f41, 0x1897: 0x0259,
+ 0x1898: 0x0f51, 0x1899: 0x0359, 0x189a: 0x0f61, 0x189b: 0x0f71, 0x189c: 0x00d9, 0x189d: 0x0f99,
+ 0x189e: 0x2039, 0x189f: 0x0269, 0x18a0: 0x01d9, 0x18a1: 0x0fa9, 0x18a2: 0x0fb9, 0x18a3: 0x1089,
+ 0x18a4: 0x0279, 0x18a5: 0x0369, 0x18a6: 0x0289, 0x18a7: 0x13d1, 0x18a8: 0x0039, 0x18a9: 0x0ee9,
+ 0x18aa: 0x1159, 0x18ab: 0x0ef9, 0x18ac: 0x0f09, 0x18ad: 0x1199, 0x18ae: 0x0f31, 0x18af: 0x0249,
+ 0x18b0: 0x0f41, 0x18b1: 0x0259, 0x18b2: 0x0f51, 0x18b3: 0x0359, 0x18b4: 0x0f61, 0x18b5: 0x0f71,
+ 0x18b6: 0x00d9, 0x18b7: 0x0f99, 0x18b8: 0x2039, 0x18b9: 0x0269, 0x18ba: 0x01d9, 0x18bb: 0x0fa9,
+ 0x18bc: 0x0fb9, 0x18bd: 0x1089, 0x18be: 0x0279, 0x18bf: 0x0369,
// Block 0x63, offset 0x18c0
- 0x18c0: 0x0279, 0x18c1: 0x0369, 0x18c2: 0x0289, 0x18c3: 0x13d1, 0x18c4: 0x0039, 0x18c5: 0x0ee9,
- 0x18c6: 0x0040, 0x18c7: 0x0ef9, 0x18c8: 0x0f09, 0x18c9: 0x1199, 0x18ca: 0x0f31, 0x18cb: 0x0040,
- 0x18cc: 0x0040, 0x18cd: 0x0259, 0x18ce: 0x0f51, 0x18cf: 0x0359, 0x18d0: 0x0f61, 0x18d1: 0x0f71,
- 0x18d2: 0x00d9, 0x18d3: 0x0f99, 0x18d4: 0x2039, 0x18d5: 0x0040, 0x18d6: 0x01d9, 0x18d7: 0x0fa9,
- 0x18d8: 0x0fb9, 0x18d9: 0x1089, 0x18da: 0x0279, 0x18db: 0x0369, 0x18dc: 0x0289, 0x18dd: 0x0040,
- 0x18de: 0x0039, 0x18df: 0x0ee9, 0x18e0: 0x1159, 0x18e1: 0x0ef9, 0x18e2: 0x0f09, 0x18e3: 0x1199,
- 0x18e4: 0x0f31, 0x18e5: 0x0249, 0x18e6: 0x0f41, 0x18e7: 0x0259, 0x18e8: 0x0f51, 0x18e9: 0x0359,
- 0x18ea: 0x0f61, 0x18eb: 0x0f71, 0x18ec: 0x00d9, 0x18ed: 0x0f99, 0x18ee: 0x2039, 0x18ef: 0x0269,
- 0x18f0: 0x01d9, 0x18f1: 0x0fa9, 0x18f2: 0x0fb9, 0x18f3: 0x1089, 0x18f4: 0x0279, 0x18f5: 0x0369,
- 0x18f6: 0x0289, 0x18f7: 0x13d1, 0x18f8: 0x0039, 0x18f9: 0x0ee9, 0x18fa: 0x0040, 0x18fb: 0x0ef9,
- 0x18fc: 0x0f09, 0x18fd: 0x1199, 0x18fe: 0x0f31, 0x18ff: 0x0040,
+ 0x18c0: 0x0289, 0x18c1: 0x13d1, 0x18c2: 0x0039, 0x18c3: 0x0ee9, 0x18c4: 0x1159, 0x18c5: 0x0ef9,
+ 0x18c6: 0x0f09, 0x18c7: 0x1199, 0x18c8: 0x0f31, 0x18c9: 0x0249, 0x18ca: 0x0f41, 0x18cb: 0x0259,
+ 0x18cc: 0x0f51, 0x18cd: 0x0359, 0x18ce: 0x0f61, 0x18cf: 0x0f71, 0x18d0: 0x00d9, 0x18d1: 0x0f99,
+ 0x18d2: 0x2039, 0x18d3: 0x0269, 0x18d4: 0x01d9, 0x18d5: 0x0fa9, 0x18d6: 0x0fb9, 0x18d7: 0x1089,
+ 0x18d8: 0x0279, 0x18d9: 0x0369, 0x18da: 0x0289, 0x18db: 0x13d1, 0x18dc: 0x0039, 0x18dd: 0x0040,
+ 0x18de: 0x1159, 0x18df: 0x0ef9, 0x18e0: 0x0040, 0x18e1: 0x0040, 0x18e2: 0x0f31, 0x18e3: 0x0040,
+ 0x18e4: 0x0040, 0x18e5: 0x0259, 0x18e6: 0x0f51, 0x18e7: 0x0040, 0x18e8: 0x0040, 0x18e9: 0x0f71,
+ 0x18ea: 0x00d9, 0x18eb: 0x0f99, 0x18ec: 0x2039, 0x18ed: 0x0040, 0x18ee: 0x01d9, 0x18ef: 0x0fa9,
+ 0x18f0: 0x0fb9, 0x18f1: 0x1089, 0x18f2: 0x0279, 0x18f3: 0x0369, 0x18f4: 0x0289, 0x18f5: 0x13d1,
+ 0x18f6: 0x0039, 0x18f7: 0x0ee9, 0x18f8: 0x1159, 0x18f9: 0x0ef9, 0x18fa: 0x0040, 0x18fb: 0x1199,
+ 0x18fc: 0x0040, 0x18fd: 0x0249, 0x18fe: 0x0f41, 0x18ff: 0x0259,
// Block 0x64, offset 0x1900
- 0x1900: 0x0f41, 0x1901: 0x0259, 0x1902: 0x0f51, 0x1903: 0x0359, 0x1904: 0x0f61, 0x1905: 0x0040,
- 0x1906: 0x00d9, 0x1907: 0x0040, 0x1908: 0x0040, 0x1909: 0x0040, 0x190a: 0x01d9, 0x190b: 0x0fa9,
- 0x190c: 0x0fb9, 0x190d: 0x1089, 0x190e: 0x0279, 0x190f: 0x0369, 0x1910: 0x0289, 0x1911: 0x0040,
- 0x1912: 0x0039, 0x1913: 0x0ee9, 0x1914: 0x1159, 0x1915: 0x0ef9, 0x1916: 0x0f09, 0x1917: 0x1199,
- 0x1918: 0x0f31, 0x1919: 0x0249, 0x191a: 0x0f41, 0x191b: 0x0259, 0x191c: 0x0f51, 0x191d: 0x0359,
- 0x191e: 0x0f61, 0x191f: 0x0f71, 0x1920: 0x00d9, 0x1921: 0x0f99, 0x1922: 0x2039, 0x1923: 0x0269,
- 0x1924: 0x01d9, 0x1925: 0x0fa9, 0x1926: 0x0fb9, 0x1927: 0x1089, 0x1928: 0x0279, 0x1929: 0x0369,
- 0x192a: 0x0289, 0x192b: 0x13d1, 0x192c: 0x0039, 0x192d: 0x0ee9, 0x192e: 0x1159, 0x192f: 0x0ef9,
- 0x1930: 0x0f09, 0x1931: 0x1199, 0x1932: 0x0f31, 0x1933: 0x0249, 0x1934: 0x0f41, 0x1935: 0x0259,
- 0x1936: 0x0f51, 0x1937: 0x0359, 0x1938: 0x0f61, 0x1939: 0x0f71, 0x193a: 0x00d9, 0x193b: 0x0f99,
- 0x193c: 0x2039, 0x193d: 0x0269, 0x193e: 0x01d9, 0x193f: 0x0fa9,
+ 0x1900: 0x0f51, 0x1901: 0x0359, 0x1902: 0x0f61, 0x1903: 0x0f71, 0x1904: 0x0040, 0x1905: 0x0f99,
+ 0x1906: 0x2039, 0x1907: 0x0269, 0x1908: 0x01d9, 0x1909: 0x0fa9, 0x190a: 0x0fb9, 0x190b: 0x1089,
+ 0x190c: 0x0279, 0x190d: 0x0369, 0x190e: 0x0289, 0x190f: 0x13d1, 0x1910: 0x0039, 0x1911: 0x0ee9,
+ 0x1912: 0x1159, 0x1913: 0x0ef9, 0x1914: 0x0f09, 0x1915: 0x1199, 0x1916: 0x0f31, 0x1917: 0x0249,
+ 0x1918: 0x0f41, 0x1919: 0x0259, 0x191a: 0x0f51, 0x191b: 0x0359, 0x191c: 0x0f61, 0x191d: 0x0f71,
+ 0x191e: 0x00d9, 0x191f: 0x0f99, 0x1920: 0x2039, 0x1921: 0x0269, 0x1922: 0x01d9, 0x1923: 0x0fa9,
+ 0x1924: 0x0fb9, 0x1925: 0x1089, 0x1926: 0x0279, 0x1927: 0x0369, 0x1928: 0x0289, 0x1929: 0x13d1,
+ 0x192a: 0x0039, 0x192b: 0x0ee9, 0x192c: 0x1159, 0x192d: 0x0ef9, 0x192e: 0x0f09, 0x192f: 0x1199,
+ 0x1930: 0x0f31, 0x1931: 0x0249, 0x1932: 0x0f41, 0x1933: 0x0259, 0x1934: 0x0f51, 0x1935: 0x0359,
+ 0x1936: 0x0f61, 0x1937: 0x0f71, 0x1938: 0x00d9, 0x1939: 0x0f99, 0x193a: 0x2039, 0x193b: 0x0269,
+ 0x193c: 0x01d9, 0x193d: 0x0fa9, 0x193e: 0x0fb9, 0x193f: 0x1089,
// Block 0x65, offset 0x1940
- 0x1940: 0x0fb9, 0x1941: 0x1089, 0x1942: 0x0279, 0x1943: 0x0369, 0x1944: 0x0289, 0x1945: 0x13d1,
- 0x1946: 0x0039, 0x1947: 0x0ee9, 0x1948: 0x1159, 0x1949: 0x0ef9, 0x194a: 0x0f09, 0x194b: 0x1199,
- 0x194c: 0x0f31, 0x194d: 0x0249, 0x194e: 0x0f41, 0x194f: 0x0259, 0x1950: 0x0f51, 0x1951: 0x0359,
- 0x1952: 0x0f61, 0x1953: 0x0f71, 0x1954: 0x00d9, 0x1955: 0x0f99, 0x1956: 0x2039, 0x1957: 0x0269,
- 0x1958: 0x01d9, 0x1959: 0x0fa9, 0x195a: 0x0fb9, 0x195b: 0x1089, 0x195c: 0x0279, 0x195d: 0x0369,
- 0x195e: 0x0289, 0x195f: 0x13d1, 0x1960: 0x0039, 0x1961: 0x0ee9, 0x1962: 0x1159, 0x1963: 0x0ef9,
- 0x1964: 0x0f09, 0x1965: 0x1199, 0x1966: 0x0f31, 0x1967: 0x0249, 0x1968: 0x0f41, 0x1969: 0x0259,
- 0x196a: 0x0f51, 0x196b: 0x0359, 0x196c: 0x0f61, 0x196d: 0x0f71, 0x196e: 0x00d9, 0x196f: 0x0f99,
- 0x1970: 0x2039, 0x1971: 0x0269, 0x1972: 0x01d9, 0x1973: 0x0fa9, 0x1974: 0x0fb9, 0x1975: 0x1089,
- 0x1976: 0x0279, 0x1977: 0x0369, 0x1978: 0x0289, 0x1979: 0x13d1, 0x197a: 0x0039, 0x197b: 0x0ee9,
- 0x197c: 0x1159, 0x197d: 0x0ef9, 0x197e: 0x0f09, 0x197f: 0x1199,
+ 0x1940: 0x0279, 0x1941: 0x0369, 0x1942: 0x0289, 0x1943: 0x13d1, 0x1944: 0x0039, 0x1945: 0x0ee9,
+ 0x1946: 0x0040, 0x1947: 0x0ef9, 0x1948: 0x0f09, 0x1949: 0x1199, 0x194a: 0x0f31, 0x194b: 0x0040,
+ 0x194c: 0x0040, 0x194d: 0x0259, 0x194e: 0x0f51, 0x194f: 0x0359, 0x1950: 0x0f61, 0x1951: 0x0f71,
+ 0x1952: 0x00d9, 0x1953: 0x0f99, 0x1954: 0x2039, 0x1955: 0x0040, 0x1956: 0x01d9, 0x1957: 0x0fa9,
+ 0x1958: 0x0fb9, 0x1959: 0x1089, 0x195a: 0x0279, 0x195b: 0x0369, 0x195c: 0x0289, 0x195d: 0x0040,
+ 0x195e: 0x0039, 0x195f: 0x0ee9, 0x1960: 0x1159, 0x1961: 0x0ef9, 0x1962: 0x0f09, 0x1963: 0x1199,
+ 0x1964: 0x0f31, 0x1965: 0x0249, 0x1966: 0x0f41, 0x1967: 0x0259, 0x1968: 0x0f51, 0x1969: 0x0359,
+ 0x196a: 0x0f61, 0x196b: 0x0f71, 0x196c: 0x00d9, 0x196d: 0x0f99, 0x196e: 0x2039, 0x196f: 0x0269,
+ 0x1970: 0x01d9, 0x1971: 0x0fa9, 0x1972: 0x0fb9, 0x1973: 0x1089, 0x1974: 0x0279, 0x1975: 0x0369,
+ 0x1976: 0x0289, 0x1977: 0x13d1, 0x1978: 0x0039, 0x1979: 0x0ee9, 0x197a: 0x0040, 0x197b: 0x0ef9,
+ 0x197c: 0x0f09, 0x197d: 0x1199, 0x197e: 0x0f31, 0x197f: 0x0040,
// Block 0x66, offset 0x1980
- 0x1980: 0x0f31, 0x1981: 0x0249, 0x1982: 0x0f41, 0x1983: 0x0259, 0x1984: 0x0f51, 0x1985: 0x0359,
- 0x1986: 0x0f61, 0x1987: 0x0f71, 0x1988: 0x00d9, 0x1989: 0x0f99, 0x198a: 0x2039, 0x198b: 0x0269,
- 0x198c: 0x01d9, 0x198d: 0x0fa9, 0x198e: 0x0fb9, 0x198f: 0x1089, 0x1990: 0x0279, 0x1991: 0x0369,
- 0x1992: 0x0289, 0x1993: 0x13d1, 0x1994: 0x0039, 0x1995: 0x0ee9, 0x1996: 0x1159, 0x1997: 0x0ef9,
- 0x1998: 0x0f09, 0x1999: 0x1199, 0x199a: 0x0f31, 0x199b: 0x0249, 0x199c: 0x0f41, 0x199d: 0x0259,
- 0x199e: 0x0f51, 0x199f: 0x0359, 0x19a0: 0x0f61, 0x19a1: 0x0f71, 0x19a2: 0x00d9, 0x19a3: 0x0f99,
- 0x19a4: 0x2039, 0x19a5: 0x0269, 0x19a6: 0x01d9, 0x19a7: 0x0fa9, 0x19a8: 0x0fb9, 0x19a9: 0x1089,
- 0x19aa: 0x0279, 0x19ab: 0x0369, 0x19ac: 0x0289, 0x19ad: 0x13d1, 0x19ae: 0x0039, 0x19af: 0x0ee9,
- 0x19b0: 0x1159, 0x19b1: 0x0ef9, 0x19b2: 0x0f09, 0x19b3: 0x1199, 0x19b4: 0x0f31, 0x19b5: 0x0249,
- 0x19b6: 0x0f41, 0x19b7: 0x0259, 0x19b8: 0x0f51, 0x19b9: 0x0359, 0x19ba: 0x0f61, 0x19bb: 0x0f71,
- 0x19bc: 0x00d9, 0x19bd: 0x0f99, 0x19be: 0x2039, 0x19bf: 0x0269,
+ 0x1980: 0x0f41, 0x1981: 0x0259, 0x1982: 0x0f51, 0x1983: 0x0359, 0x1984: 0x0f61, 0x1985: 0x0040,
+ 0x1986: 0x00d9, 0x1987: 0x0040, 0x1988: 0x0040, 0x1989: 0x0040, 0x198a: 0x01d9, 0x198b: 0x0fa9,
+ 0x198c: 0x0fb9, 0x198d: 0x1089, 0x198e: 0x0279, 0x198f: 0x0369, 0x1990: 0x0289, 0x1991: 0x0040,
+ 0x1992: 0x0039, 0x1993: 0x0ee9, 0x1994: 0x1159, 0x1995: 0x0ef9, 0x1996: 0x0f09, 0x1997: 0x1199,
+ 0x1998: 0x0f31, 0x1999: 0x0249, 0x199a: 0x0f41, 0x199b: 0x0259, 0x199c: 0x0f51, 0x199d: 0x0359,
+ 0x199e: 0x0f61, 0x199f: 0x0f71, 0x19a0: 0x00d9, 0x19a1: 0x0f99, 0x19a2: 0x2039, 0x19a3: 0x0269,
+ 0x19a4: 0x01d9, 0x19a5: 0x0fa9, 0x19a6: 0x0fb9, 0x19a7: 0x1089, 0x19a8: 0x0279, 0x19a9: 0x0369,
+ 0x19aa: 0x0289, 0x19ab: 0x13d1, 0x19ac: 0x0039, 0x19ad: 0x0ee9, 0x19ae: 0x1159, 0x19af: 0x0ef9,
+ 0x19b0: 0x0f09, 0x19b1: 0x1199, 0x19b2: 0x0f31, 0x19b3: 0x0249, 0x19b4: 0x0f41, 0x19b5: 0x0259,
+ 0x19b6: 0x0f51, 0x19b7: 0x0359, 0x19b8: 0x0f61, 0x19b9: 0x0f71, 0x19ba: 0x00d9, 0x19bb: 0x0f99,
+ 0x19bc: 0x2039, 0x19bd: 0x0269, 0x19be: 0x01d9, 0x19bf: 0x0fa9,
// Block 0x67, offset 0x19c0
- 0x19c0: 0x01d9, 0x19c1: 0x0fa9, 0x19c2: 0x0fb9, 0x19c3: 0x1089, 0x19c4: 0x0279, 0x19c5: 0x0369,
- 0x19c6: 0x0289, 0x19c7: 0x13d1, 0x19c8: 0x0039, 0x19c9: 0x0ee9, 0x19ca: 0x1159, 0x19cb: 0x0ef9,
- 0x19cc: 0x0f09, 0x19cd: 0x1199, 0x19ce: 0x0f31, 0x19cf: 0x0249, 0x19d0: 0x0f41, 0x19d1: 0x0259,
- 0x19d2: 0x0f51, 0x19d3: 0x0359, 0x19d4: 0x0f61, 0x19d5: 0x0f71, 0x19d6: 0x00d9, 0x19d7: 0x0f99,
- 0x19d8: 0x2039, 0x19d9: 0x0269, 0x19da: 0x01d9, 0x19db: 0x0fa9, 0x19dc: 0x0fb9, 0x19dd: 0x1089,
- 0x19de: 0x0279, 0x19df: 0x0369, 0x19e0: 0x0289, 0x19e1: 0x13d1, 0x19e2: 0x0039, 0x19e3: 0x0ee9,
- 0x19e4: 0x1159, 0x19e5: 0x0ef9, 0x19e6: 0x0f09, 0x19e7: 0x1199, 0x19e8: 0x0f31, 0x19e9: 0x0249,
- 0x19ea: 0x0f41, 0x19eb: 0x0259, 0x19ec: 0x0f51, 0x19ed: 0x0359, 0x19ee: 0x0f61, 0x19ef: 0x0f71,
- 0x19f0: 0x00d9, 0x19f1: 0x0f99, 0x19f2: 0x2039, 0x19f3: 0x0269, 0x19f4: 0x01d9, 0x19f5: 0x0fa9,
- 0x19f6: 0x0fb9, 0x19f7: 0x1089, 0x19f8: 0x0279, 0x19f9: 0x0369, 0x19fa: 0x0289, 0x19fb: 0x13d1,
- 0x19fc: 0x0039, 0x19fd: 0x0ee9, 0x19fe: 0x1159, 0x19ff: 0x0ef9,
+ 0x19c0: 0x0fb9, 0x19c1: 0x1089, 0x19c2: 0x0279, 0x19c3: 0x0369, 0x19c4: 0x0289, 0x19c5: 0x13d1,
+ 0x19c6: 0x0039, 0x19c7: 0x0ee9, 0x19c8: 0x1159, 0x19c9: 0x0ef9, 0x19ca: 0x0f09, 0x19cb: 0x1199,
+ 0x19cc: 0x0f31, 0x19cd: 0x0249, 0x19ce: 0x0f41, 0x19cf: 0x0259, 0x19d0: 0x0f51, 0x19d1: 0x0359,
+ 0x19d2: 0x0f61, 0x19d3: 0x0f71, 0x19d4: 0x00d9, 0x19d5: 0x0f99, 0x19d6: 0x2039, 0x19d7: 0x0269,
+ 0x19d8: 0x01d9, 0x19d9: 0x0fa9, 0x19da: 0x0fb9, 0x19db: 0x1089, 0x19dc: 0x0279, 0x19dd: 0x0369,
+ 0x19de: 0x0289, 0x19df: 0x13d1, 0x19e0: 0x0039, 0x19e1: 0x0ee9, 0x19e2: 0x1159, 0x19e3: 0x0ef9,
+ 0x19e4: 0x0f09, 0x19e5: 0x1199, 0x19e6: 0x0f31, 0x19e7: 0x0249, 0x19e8: 0x0f41, 0x19e9: 0x0259,
+ 0x19ea: 0x0f51, 0x19eb: 0x0359, 0x19ec: 0x0f61, 0x19ed: 0x0f71, 0x19ee: 0x00d9, 0x19ef: 0x0f99,
+ 0x19f0: 0x2039, 0x19f1: 0x0269, 0x19f2: 0x01d9, 0x19f3: 0x0fa9, 0x19f4: 0x0fb9, 0x19f5: 0x1089,
+ 0x19f6: 0x0279, 0x19f7: 0x0369, 0x19f8: 0x0289, 0x19f9: 0x13d1, 0x19fa: 0x0039, 0x19fb: 0x0ee9,
+ 0x19fc: 0x1159, 0x19fd: 0x0ef9, 0x19fe: 0x0f09, 0x19ff: 0x1199,
// Block 0x68, offset 0x1a00
- 0x1a00: 0x0f09, 0x1a01: 0x1199, 0x1a02: 0x0f31, 0x1a03: 0x0249, 0x1a04: 0x0f41, 0x1a05: 0x0259,
- 0x1a06: 0x0f51, 0x1a07: 0x0359, 0x1a08: 0x0f61, 0x1a09: 0x0f71, 0x1a0a: 0x00d9, 0x1a0b: 0x0f99,
- 0x1a0c: 0x2039, 0x1a0d: 0x0269, 0x1a0e: 0x01d9, 0x1a0f: 0x0fa9, 0x1a10: 0x0fb9, 0x1a11: 0x1089,
- 0x1a12: 0x0279, 0x1a13: 0x0369, 0x1a14: 0x0289, 0x1a15: 0x13d1, 0x1a16: 0x0039, 0x1a17: 0x0ee9,
- 0x1a18: 0x1159, 0x1a19: 0x0ef9, 0x1a1a: 0x0f09, 0x1a1b: 0x1199, 0x1a1c: 0x0f31, 0x1a1d: 0x0249,
- 0x1a1e: 0x0f41, 0x1a1f: 0x0259, 0x1a20: 0x0f51, 0x1a21: 0x0359, 0x1a22: 0x0f61, 0x1a23: 0x0f71,
- 0x1a24: 0x00d9, 0x1a25: 0x0f99, 0x1a26: 0x2039, 0x1a27: 0x0269, 0x1a28: 0x01d9, 0x1a29: 0x0fa9,
- 0x1a2a: 0x0fb9, 0x1a2b: 0x1089, 0x1a2c: 0x0279, 0x1a2d: 0x0369, 0x1a2e: 0x0289, 0x1a2f: 0x13d1,
- 0x1a30: 0x0039, 0x1a31: 0x0ee9, 0x1a32: 0x1159, 0x1a33: 0x0ef9, 0x1a34: 0x0f09, 0x1a35: 0x1199,
- 0x1a36: 0x0f31, 0x1a37: 0x0249, 0x1a38: 0x0f41, 0x1a39: 0x0259, 0x1a3a: 0x0f51, 0x1a3b: 0x0359,
- 0x1a3c: 0x0f61, 0x1a3d: 0x0f71, 0x1a3e: 0x00d9, 0x1a3f: 0x0f99,
+ 0x1a00: 0x0f31, 0x1a01: 0x0249, 0x1a02: 0x0f41, 0x1a03: 0x0259, 0x1a04: 0x0f51, 0x1a05: 0x0359,
+ 0x1a06: 0x0f61, 0x1a07: 0x0f71, 0x1a08: 0x00d9, 0x1a09: 0x0f99, 0x1a0a: 0x2039, 0x1a0b: 0x0269,
+ 0x1a0c: 0x01d9, 0x1a0d: 0x0fa9, 0x1a0e: 0x0fb9, 0x1a0f: 0x1089, 0x1a10: 0x0279, 0x1a11: 0x0369,
+ 0x1a12: 0x0289, 0x1a13: 0x13d1, 0x1a14: 0x0039, 0x1a15: 0x0ee9, 0x1a16: 0x1159, 0x1a17: 0x0ef9,
+ 0x1a18: 0x0f09, 0x1a19: 0x1199, 0x1a1a: 0x0f31, 0x1a1b: 0x0249, 0x1a1c: 0x0f41, 0x1a1d: 0x0259,
+ 0x1a1e: 0x0f51, 0x1a1f: 0x0359, 0x1a20: 0x0f61, 0x1a21: 0x0f71, 0x1a22: 0x00d9, 0x1a23: 0x0f99,
+ 0x1a24: 0x2039, 0x1a25: 0x0269, 0x1a26: 0x01d9, 0x1a27: 0x0fa9, 0x1a28: 0x0fb9, 0x1a29: 0x1089,
+ 0x1a2a: 0x0279, 0x1a2b: 0x0369, 0x1a2c: 0x0289, 0x1a2d: 0x13d1, 0x1a2e: 0x0039, 0x1a2f: 0x0ee9,
+ 0x1a30: 0x1159, 0x1a31: 0x0ef9, 0x1a32: 0x0f09, 0x1a33: 0x1199, 0x1a34: 0x0f31, 0x1a35: 0x0249,
+ 0x1a36: 0x0f41, 0x1a37: 0x0259, 0x1a38: 0x0f51, 0x1a39: 0x0359, 0x1a3a: 0x0f61, 0x1a3b: 0x0f71,
+ 0x1a3c: 0x00d9, 0x1a3d: 0x0f99, 0x1a3e: 0x2039, 0x1a3f: 0x0269,
// Block 0x69, offset 0x1a40
- 0x1a40: 0x2039, 0x1a41: 0x0269, 0x1a42: 0x01d9, 0x1a43: 0x0fa9, 0x1a44: 0x0fb9, 0x1a45: 0x1089,
- 0x1a46: 0x0279, 0x1a47: 0x0369, 0x1a48: 0x0289, 0x1a49: 0x13d1, 0x1a4a: 0x0039, 0x1a4b: 0x0ee9,
- 0x1a4c: 0x1159, 0x1a4d: 0x0ef9, 0x1a4e: 0x0f09, 0x1a4f: 0x1199, 0x1a50: 0x0f31, 0x1a51: 0x0249,
- 0x1a52: 0x0f41, 0x1a53: 0x0259, 0x1a54: 0x0f51, 0x1a55: 0x0359, 0x1a56: 0x0f61, 0x1a57: 0x0f71,
- 0x1a58: 0x00d9, 0x1a59: 0x0f99, 0x1a5a: 0x2039, 0x1a5b: 0x0269, 0x1a5c: 0x01d9, 0x1a5d: 0x0fa9,
- 0x1a5e: 0x0fb9, 0x1a5f: 0x1089, 0x1a60: 0x0279, 0x1a61: 0x0369, 0x1a62: 0x0289, 0x1a63: 0x13d1,
- 0x1a64: 0xba81, 0x1a65: 0xba99, 0x1a66: 0x0040, 0x1a67: 0x0040, 0x1a68: 0xbab1, 0x1a69: 0x1099,
- 0x1a6a: 0x10b1, 0x1a6b: 0x10c9, 0x1a6c: 0xbac9, 0x1a6d: 0xbae1, 0x1a6e: 0xbaf9, 0x1a6f: 0x1429,
- 0x1a70: 0x1a31, 0x1a71: 0xbb11, 0x1a72: 0xbb29, 0x1a73: 0xbb41, 0x1a74: 0xbb59, 0x1a75: 0xbb71,
- 0x1a76: 0xbb89, 0x1a77: 0x2109, 0x1a78: 0x1111, 0x1a79: 0x1429, 0x1a7a: 0xbba1, 0x1a7b: 0xbbb9,
- 0x1a7c: 0xbbd1, 0x1a7d: 0x10e1, 0x1a7e: 0x10f9, 0x1a7f: 0xbbe9,
+ 0x1a40: 0x01d9, 0x1a41: 0x0fa9, 0x1a42: 0x0fb9, 0x1a43: 0x1089, 0x1a44: 0x0279, 0x1a45: 0x0369,
+ 0x1a46: 0x0289, 0x1a47: 0x13d1, 0x1a48: 0x0039, 0x1a49: 0x0ee9, 0x1a4a: 0x1159, 0x1a4b: 0x0ef9,
+ 0x1a4c: 0x0f09, 0x1a4d: 0x1199, 0x1a4e: 0x0f31, 0x1a4f: 0x0249, 0x1a50: 0x0f41, 0x1a51: 0x0259,
+ 0x1a52: 0x0f51, 0x1a53: 0x0359, 0x1a54: 0x0f61, 0x1a55: 0x0f71, 0x1a56: 0x00d9, 0x1a57: 0x0f99,
+ 0x1a58: 0x2039, 0x1a59: 0x0269, 0x1a5a: 0x01d9, 0x1a5b: 0x0fa9, 0x1a5c: 0x0fb9, 0x1a5d: 0x1089,
+ 0x1a5e: 0x0279, 0x1a5f: 0x0369, 0x1a60: 0x0289, 0x1a61: 0x13d1, 0x1a62: 0x0039, 0x1a63: 0x0ee9,
+ 0x1a64: 0x1159, 0x1a65: 0x0ef9, 0x1a66: 0x0f09, 0x1a67: 0x1199, 0x1a68: 0x0f31, 0x1a69: 0x0249,
+ 0x1a6a: 0x0f41, 0x1a6b: 0x0259, 0x1a6c: 0x0f51, 0x1a6d: 0x0359, 0x1a6e: 0x0f61, 0x1a6f: 0x0f71,
+ 0x1a70: 0x00d9, 0x1a71: 0x0f99, 0x1a72: 0x2039, 0x1a73: 0x0269, 0x1a74: 0x01d9, 0x1a75: 0x0fa9,
+ 0x1a76: 0x0fb9, 0x1a77: 0x1089, 0x1a78: 0x0279, 0x1a79: 0x0369, 0x1a7a: 0x0289, 0x1a7b: 0x13d1,
+ 0x1a7c: 0x0039, 0x1a7d: 0x0ee9, 0x1a7e: 0x1159, 0x1a7f: 0x0ef9,
// Block 0x6a, offset 0x1a80
- 0x1a80: 0x2079, 0x1a81: 0xbc01, 0x1a82: 0xbab1, 0x1a83: 0x1099, 0x1a84: 0x10b1, 0x1a85: 0x10c9,
- 0x1a86: 0xbac9, 0x1a87: 0xbae1, 0x1a88: 0xbaf9, 0x1a89: 0x1429, 0x1a8a: 0x1a31, 0x1a8b: 0xbb11,
- 0x1a8c: 0xbb29, 0x1a8d: 0xbb41, 0x1a8e: 0xbb59, 0x1a8f: 0xbb71, 0x1a90: 0xbb89, 0x1a91: 0x2109,
- 0x1a92: 0x1111, 0x1a93: 0xbba1, 0x1a94: 0xbba1, 0x1a95: 0xbbb9, 0x1a96: 0xbbd1, 0x1a97: 0x10e1,
- 0x1a98: 0x10f9, 0x1a99: 0xbbe9, 0x1a9a: 0x2079, 0x1a9b: 0xbc21, 0x1a9c: 0xbac9, 0x1a9d: 0x1429,
- 0x1a9e: 0xbb11, 0x1a9f: 0x10e1, 0x1aa0: 0x1111, 0x1aa1: 0x2109, 0x1aa2: 0xbab1, 0x1aa3: 0x1099,
- 0x1aa4: 0x10b1, 0x1aa5: 0x10c9, 0x1aa6: 0xbac9, 0x1aa7: 0xbae1, 0x1aa8: 0xbaf9, 0x1aa9: 0x1429,
- 0x1aaa: 0x1a31, 0x1aab: 0xbb11, 0x1aac: 0xbb29, 0x1aad: 0xbb41, 0x1aae: 0xbb59, 0x1aaf: 0xbb71,
- 0x1ab0: 0xbb89, 0x1ab1: 0x2109, 0x1ab2: 0x1111, 0x1ab3: 0x1429, 0x1ab4: 0xbba1, 0x1ab5: 0xbbb9,
- 0x1ab6: 0xbbd1, 0x1ab7: 0x10e1, 0x1ab8: 0x10f9, 0x1ab9: 0xbbe9, 0x1aba: 0x2079, 0x1abb: 0xbc01,
- 0x1abc: 0xbab1, 0x1abd: 0x1099, 0x1abe: 0x10b1, 0x1abf: 0x10c9,
+ 0x1a80: 0x0f09, 0x1a81: 0x1199, 0x1a82: 0x0f31, 0x1a83: 0x0249, 0x1a84: 0x0f41, 0x1a85: 0x0259,
+ 0x1a86: 0x0f51, 0x1a87: 0x0359, 0x1a88: 0x0f61, 0x1a89: 0x0f71, 0x1a8a: 0x00d9, 0x1a8b: 0x0f99,
+ 0x1a8c: 0x2039, 0x1a8d: 0x0269, 0x1a8e: 0x01d9, 0x1a8f: 0x0fa9, 0x1a90: 0x0fb9, 0x1a91: 0x1089,
+ 0x1a92: 0x0279, 0x1a93: 0x0369, 0x1a94: 0x0289, 0x1a95: 0x13d1, 0x1a96: 0x0039, 0x1a97: 0x0ee9,
+ 0x1a98: 0x1159, 0x1a99: 0x0ef9, 0x1a9a: 0x0f09, 0x1a9b: 0x1199, 0x1a9c: 0x0f31, 0x1a9d: 0x0249,
+ 0x1a9e: 0x0f41, 0x1a9f: 0x0259, 0x1aa0: 0x0f51, 0x1aa1: 0x0359, 0x1aa2: 0x0f61, 0x1aa3: 0x0f71,
+ 0x1aa4: 0x00d9, 0x1aa5: 0x0f99, 0x1aa6: 0x2039, 0x1aa7: 0x0269, 0x1aa8: 0x01d9, 0x1aa9: 0x0fa9,
+ 0x1aaa: 0x0fb9, 0x1aab: 0x1089, 0x1aac: 0x0279, 0x1aad: 0x0369, 0x1aae: 0x0289, 0x1aaf: 0x13d1,
+ 0x1ab0: 0x0039, 0x1ab1: 0x0ee9, 0x1ab2: 0x1159, 0x1ab3: 0x0ef9, 0x1ab4: 0x0f09, 0x1ab5: 0x1199,
+ 0x1ab6: 0x0f31, 0x1ab7: 0x0249, 0x1ab8: 0x0f41, 0x1ab9: 0x0259, 0x1aba: 0x0f51, 0x1abb: 0x0359,
+ 0x1abc: 0x0f61, 0x1abd: 0x0f71, 0x1abe: 0x00d9, 0x1abf: 0x0f99,
// Block 0x6b, offset 0x1ac0
- 0x1ac0: 0xbac9, 0x1ac1: 0xbae1, 0x1ac2: 0xbaf9, 0x1ac3: 0x1429, 0x1ac4: 0x1a31, 0x1ac5: 0xbb11,
- 0x1ac6: 0xbb29, 0x1ac7: 0xbb41, 0x1ac8: 0xbb59, 0x1ac9: 0xbb71, 0x1aca: 0xbb89, 0x1acb: 0x2109,
- 0x1acc: 0x1111, 0x1acd: 0xbba1, 0x1ace: 0xbba1, 0x1acf: 0xbbb9, 0x1ad0: 0xbbd1, 0x1ad1: 0x10e1,
- 0x1ad2: 0x10f9, 0x1ad3: 0xbbe9, 0x1ad4: 0x2079, 0x1ad5: 0xbc21, 0x1ad6: 0xbac9, 0x1ad7: 0x1429,
- 0x1ad8: 0xbb11, 0x1ad9: 0x10e1, 0x1ada: 0x1111, 0x1adb: 0x2109, 0x1adc: 0xbab1, 0x1add: 0x1099,
- 0x1ade: 0x10b1, 0x1adf: 0x10c9, 0x1ae0: 0xbac9, 0x1ae1: 0xbae1, 0x1ae2: 0xbaf9, 0x1ae3: 0x1429,
- 0x1ae4: 0x1a31, 0x1ae5: 0xbb11, 0x1ae6: 0xbb29, 0x1ae7: 0xbb41, 0x1ae8: 0xbb59, 0x1ae9: 0xbb71,
- 0x1aea: 0xbb89, 0x1aeb: 0x2109, 0x1aec: 0x1111, 0x1aed: 0x1429, 0x1aee: 0xbba1, 0x1aef: 0xbbb9,
- 0x1af0: 0xbbd1, 0x1af1: 0x10e1, 0x1af2: 0x10f9, 0x1af3: 0xbbe9, 0x1af4: 0x2079, 0x1af5: 0xbc01,
- 0x1af6: 0xbab1, 0x1af7: 0x1099, 0x1af8: 0x10b1, 0x1af9: 0x10c9, 0x1afa: 0xbac9, 0x1afb: 0xbae1,
- 0x1afc: 0xbaf9, 0x1afd: 0x1429, 0x1afe: 0x1a31, 0x1aff: 0xbb11,
+ 0x1ac0: 0x2039, 0x1ac1: 0x0269, 0x1ac2: 0x01d9, 0x1ac3: 0x0fa9, 0x1ac4: 0x0fb9, 0x1ac5: 0x1089,
+ 0x1ac6: 0x0279, 0x1ac7: 0x0369, 0x1ac8: 0x0289, 0x1ac9: 0x13d1, 0x1aca: 0x0039, 0x1acb: 0x0ee9,
+ 0x1acc: 0x1159, 0x1acd: 0x0ef9, 0x1ace: 0x0f09, 0x1acf: 0x1199, 0x1ad0: 0x0f31, 0x1ad1: 0x0249,
+ 0x1ad2: 0x0f41, 0x1ad3: 0x0259, 0x1ad4: 0x0f51, 0x1ad5: 0x0359, 0x1ad6: 0x0f61, 0x1ad7: 0x0f71,
+ 0x1ad8: 0x00d9, 0x1ad9: 0x0f99, 0x1ada: 0x2039, 0x1adb: 0x0269, 0x1adc: 0x01d9, 0x1add: 0x0fa9,
+ 0x1ade: 0x0fb9, 0x1adf: 0x1089, 0x1ae0: 0x0279, 0x1ae1: 0x0369, 0x1ae2: 0x0289, 0x1ae3: 0x13d1,
+ 0x1ae4: 0xba81, 0x1ae5: 0xba99, 0x1ae6: 0x0040, 0x1ae7: 0x0040, 0x1ae8: 0xbab1, 0x1ae9: 0x1099,
+ 0x1aea: 0x10b1, 0x1aeb: 0x10c9, 0x1aec: 0xbac9, 0x1aed: 0xbae1, 0x1aee: 0xbaf9, 0x1aef: 0x1429,
+ 0x1af0: 0x1a31, 0x1af1: 0xbb11, 0x1af2: 0xbb29, 0x1af3: 0xbb41, 0x1af4: 0xbb59, 0x1af5: 0xbb71,
+ 0x1af6: 0xbb89, 0x1af7: 0x2109, 0x1af8: 0x1111, 0x1af9: 0x1429, 0x1afa: 0xbba1, 0x1afb: 0xbbb9,
+ 0x1afc: 0xbbd1, 0x1afd: 0x10e1, 0x1afe: 0x10f9, 0x1aff: 0xbbe9,
// Block 0x6c, offset 0x1b00
- 0x1b00: 0xbb29, 0x1b01: 0xbb41, 0x1b02: 0xbb59, 0x1b03: 0xbb71, 0x1b04: 0xbb89, 0x1b05: 0x2109,
- 0x1b06: 0x1111, 0x1b07: 0xbba1, 0x1b08: 0xbba1, 0x1b09: 0xbbb9, 0x1b0a: 0xbbd1, 0x1b0b: 0x10e1,
- 0x1b0c: 0x10f9, 0x1b0d: 0xbbe9, 0x1b0e: 0x2079, 0x1b0f: 0xbc21, 0x1b10: 0xbac9, 0x1b11: 0x1429,
- 0x1b12: 0xbb11, 0x1b13: 0x10e1, 0x1b14: 0x1111, 0x1b15: 0x2109, 0x1b16: 0xbab1, 0x1b17: 0x1099,
- 0x1b18: 0x10b1, 0x1b19: 0x10c9, 0x1b1a: 0xbac9, 0x1b1b: 0xbae1, 0x1b1c: 0xbaf9, 0x1b1d: 0x1429,
- 0x1b1e: 0x1a31, 0x1b1f: 0xbb11, 0x1b20: 0xbb29, 0x1b21: 0xbb41, 0x1b22: 0xbb59, 0x1b23: 0xbb71,
- 0x1b24: 0xbb89, 0x1b25: 0x2109, 0x1b26: 0x1111, 0x1b27: 0x1429, 0x1b28: 0xbba1, 0x1b29: 0xbbb9,
- 0x1b2a: 0xbbd1, 0x1b2b: 0x10e1, 0x1b2c: 0x10f9, 0x1b2d: 0xbbe9, 0x1b2e: 0x2079, 0x1b2f: 0xbc01,
- 0x1b30: 0xbab1, 0x1b31: 0x1099, 0x1b32: 0x10b1, 0x1b33: 0x10c9, 0x1b34: 0xbac9, 0x1b35: 0xbae1,
- 0x1b36: 0xbaf9, 0x1b37: 0x1429, 0x1b38: 0x1a31, 0x1b39: 0xbb11, 0x1b3a: 0xbb29, 0x1b3b: 0xbb41,
- 0x1b3c: 0xbb59, 0x1b3d: 0xbb71, 0x1b3e: 0xbb89, 0x1b3f: 0x2109,
+ 0x1b00: 0x2079, 0x1b01: 0xbc01, 0x1b02: 0xbab1, 0x1b03: 0x1099, 0x1b04: 0x10b1, 0x1b05: 0x10c9,
+ 0x1b06: 0xbac9, 0x1b07: 0xbae1, 0x1b08: 0xbaf9, 0x1b09: 0x1429, 0x1b0a: 0x1a31, 0x1b0b: 0xbb11,
+ 0x1b0c: 0xbb29, 0x1b0d: 0xbb41, 0x1b0e: 0xbb59, 0x1b0f: 0xbb71, 0x1b10: 0xbb89, 0x1b11: 0x2109,
+ 0x1b12: 0x1111, 0x1b13: 0xbba1, 0x1b14: 0xbba1, 0x1b15: 0xbbb9, 0x1b16: 0xbbd1, 0x1b17: 0x10e1,
+ 0x1b18: 0x10f9, 0x1b19: 0xbbe9, 0x1b1a: 0x2079, 0x1b1b: 0xbc21, 0x1b1c: 0xbac9, 0x1b1d: 0x1429,
+ 0x1b1e: 0xbb11, 0x1b1f: 0x10e1, 0x1b20: 0x1111, 0x1b21: 0x2109, 0x1b22: 0xbab1, 0x1b23: 0x1099,
+ 0x1b24: 0x10b1, 0x1b25: 0x10c9, 0x1b26: 0xbac9, 0x1b27: 0xbae1, 0x1b28: 0xbaf9, 0x1b29: 0x1429,
+ 0x1b2a: 0x1a31, 0x1b2b: 0xbb11, 0x1b2c: 0xbb29, 0x1b2d: 0xbb41, 0x1b2e: 0xbb59, 0x1b2f: 0xbb71,
+ 0x1b30: 0xbb89, 0x1b31: 0x2109, 0x1b32: 0x1111, 0x1b33: 0x1429, 0x1b34: 0xbba1, 0x1b35: 0xbbb9,
+ 0x1b36: 0xbbd1, 0x1b37: 0x10e1, 0x1b38: 0x10f9, 0x1b39: 0xbbe9, 0x1b3a: 0x2079, 0x1b3b: 0xbc01,
+ 0x1b3c: 0xbab1, 0x1b3d: 0x1099, 0x1b3e: 0x10b1, 0x1b3f: 0x10c9,
// Block 0x6d, offset 0x1b40
- 0x1b40: 0x1111, 0x1b41: 0xbba1, 0x1b42: 0xbba1, 0x1b43: 0xbbb9, 0x1b44: 0xbbd1, 0x1b45: 0x10e1,
- 0x1b46: 0x10f9, 0x1b47: 0xbbe9, 0x1b48: 0x2079, 0x1b49: 0xbc21, 0x1b4a: 0xbac9, 0x1b4b: 0x1429,
- 0x1b4c: 0xbb11, 0x1b4d: 0x10e1, 0x1b4e: 0x1111, 0x1b4f: 0x2109, 0x1b50: 0xbab1, 0x1b51: 0x1099,
- 0x1b52: 0x10b1, 0x1b53: 0x10c9, 0x1b54: 0xbac9, 0x1b55: 0xbae1, 0x1b56: 0xbaf9, 0x1b57: 0x1429,
- 0x1b58: 0x1a31, 0x1b59: 0xbb11, 0x1b5a: 0xbb29, 0x1b5b: 0xbb41, 0x1b5c: 0xbb59, 0x1b5d: 0xbb71,
- 0x1b5e: 0xbb89, 0x1b5f: 0x2109, 0x1b60: 0x1111, 0x1b61: 0x1429, 0x1b62: 0xbba1, 0x1b63: 0xbbb9,
- 0x1b64: 0xbbd1, 0x1b65: 0x10e1, 0x1b66: 0x10f9, 0x1b67: 0xbbe9, 0x1b68: 0x2079, 0x1b69: 0xbc01,
- 0x1b6a: 0xbab1, 0x1b6b: 0x1099, 0x1b6c: 0x10b1, 0x1b6d: 0x10c9, 0x1b6e: 0xbac9, 0x1b6f: 0xbae1,
- 0x1b70: 0xbaf9, 0x1b71: 0x1429, 0x1b72: 0x1a31, 0x1b73: 0xbb11, 0x1b74: 0xbb29, 0x1b75: 0xbb41,
- 0x1b76: 0xbb59, 0x1b77: 0xbb71, 0x1b78: 0xbb89, 0x1b79: 0x2109, 0x1b7a: 0x1111, 0x1b7b: 0xbba1,
- 0x1b7c: 0xbba1, 0x1b7d: 0xbbb9, 0x1b7e: 0xbbd1, 0x1b7f: 0x10e1,
+ 0x1b40: 0xbac9, 0x1b41: 0xbae1, 0x1b42: 0xbaf9, 0x1b43: 0x1429, 0x1b44: 0x1a31, 0x1b45: 0xbb11,
+ 0x1b46: 0xbb29, 0x1b47: 0xbb41, 0x1b48: 0xbb59, 0x1b49: 0xbb71, 0x1b4a: 0xbb89, 0x1b4b: 0x2109,
+ 0x1b4c: 0x1111, 0x1b4d: 0xbba1, 0x1b4e: 0xbba1, 0x1b4f: 0xbbb9, 0x1b50: 0xbbd1, 0x1b51: 0x10e1,
+ 0x1b52: 0x10f9, 0x1b53: 0xbbe9, 0x1b54: 0x2079, 0x1b55: 0xbc21, 0x1b56: 0xbac9, 0x1b57: 0x1429,
+ 0x1b58: 0xbb11, 0x1b59: 0x10e1, 0x1b5a: 0x1111, 0x1b5b: 0x2109, 0x1b5c: 0xbab1, 0x1b5d: 0x1099,
+ 0x1b5e: 0x10b1, 0x1b5f: 0x10c9, 0x1b60: 0xbac9, 0x1b61: 0xbae1, 0x1b62: 0xbaf9, 0x1b63: 0x1429,
+ 0x1b64: 0x1a31, 0x1b65: 0xbb11, 0x1b66: 0xbb29, 0x1b67: 0xbb41, 0x1b68: 0xbb59, 0x1b69: 0xbb71,
+ 0x1b6a: 0xbb89, 0x1b6b: 0x2109, 0x1b6c: 0x1111, 0x1b6d: 0x1429, 0x1b6e: 0xbba1, 0x1b6f: 0xbbb9,
+ 0x1b70: 0xbbd1, 0x1b71: 0x10e1, 0x1b72: 0x10f9, 0x1b73: 0xbbe9, 0x1b74: 0x2079, 0x1b75: 0xbc01,
+ 0x1b76: 0xbab1, 0x1b77: 0x1099, 0x1b78: 0x10b1, 0x1b79: 0x10c9, 0x1b7a: 0xbac9, 0x1b7b: 0xbae1,
+ 0x1b7c: 0xbaf9, 0x1b7d: 0x1429, 0x1b7e: 0x1a31, 0x1b7f: 0xbb11,
// Block 0x6e, offset 0x1b80
- 0x1b80: 0x10f9, 0x1b81: 0xbbe9, 0x1b82: 0x2079, 0x1b83: 0xbc21, 0x1b84: 0xbac9, 0x1b85: 0x1429,
- 0x1b86: 0xbb11, 0x1b87: 0x10e1, 0x1b88: 0x1111, 0x1b89: 0x2109, 0x1b8a: 0xbc41, 0x1b8b: 0xbc41,
- 0x1b8c: 0x0040, 0x1b8d: 0x0040, 0x1b8e: 0x1f41, 0x1b8f: 0x00c9, 0x1b90: 0x0069, 0x1b91: 0x0079,
- 0x1b92: 0x1f51, 0x1b93: 0x1f61, 0x1b94: 0x1f71, 0x1b95: 0x1f81, 0x1b96: 0x1f91, 0x1b97: 0x1fa1,
- 0x1b98: 0x1f41, 0x1b99: 0x00c9, 0x1b9a: 0x0069, 0x1b9b: 0x0079, 0x1b9c: 0x1f51, 0x1b9d: 0x1f61,
- 0x1b9e: 0x1f71, 0x1b9f: 0x1f81, 0x1ba0: 0x1f91, 0x1ba1: 0x1fa1, 0x1ba2: 0x1f41, 0x1ba3: 0x00c9,
- 0x1ba4: 0x0069, 0x1ba5: 0x0079, 0x1ba6: 0x1f51, 0x1ba7: 0x1f61, 0x1ba8: 0x1f71, 0x1ba9: 0x1f81,
- 0x1baa: 0x1f91, 0x1bab: 0x1fa1, 0x1bac: 0x1f41, 0x1bad: 0x00c9, 0x1bae: 0x0069, 0x1baf: 0x0079,
- 0x1bb0: 0x1f51, 0x1bb1: 0x1f61, 0x1bb2: 0x1f71, 0x1bb3: 0x1f81, 0x1bb4: 0x1f91, 0x1bb5: 0x1fa1,
- 0x1bb6: 0x1f41, 0x1bb7: 0x00c9, 0x1bb8: 0x0069, 0x1bb9: 0x0079, 0x1bba: 0x1f51, 0x1bbb: 0x1f61,
- 0x1bbc: 0x1f71, 0x1bbd: 0x1f81, 0x1bbe: 0x1f91, 0x1bbf: 0x1fa1,
+ 0x1b80: 0xbb29, 0x1b81: 0xbb41, 0x1b82: 0xbb59, 0x1b83: 0xbb71, 0x1b84: 0xbb89, 0x1b85: 0x2109,
+ 0x1b86: 0x1111, 0x1b87: 0xbba1, 0x1b88: 0xbba1, 0x1b89: 0xbbb9, 0x1b8a: 0xbbd1, 0x1b8b: 0x10e1,
+ 0x1b8c: 0x10f9, 0x1b8d: 0xbbe9, 0x1b8e: 0x2079, 0x1b8f: 0xbc21, 0x1b90: 0xbac9, 0x1b91: 0x1429,
+ 0x1b92: 0xbb11, 0x1b93: 0x10e1, 0x1b94: 0x1111, 0x1b95: 0x2109, 0x1b96: 0xbab1, 0x1b97: 0x1099,
+ 0x1b98: 0x10b1, 0x1b99: 0x10c9, 0x1b9a: 0xbac9, 0x1b9b: 0xbae1, 0x1b9c: 0xbaf9, 0x1b9d: 0x1429,
+ 0x1b9e: 0x1a31, 0x1b9f: 0xbb11, 0x1ba0: 0xbb29, 0x1ba1: 0xbb41, 0x1ba2: 0xbb59, 0x1ba3: 0xbb71,
+ 0x1ba4: 0xbb89, 0x1ba5: 0x2109, 0x1ba6: 0x1111, 0x1ba7: 0x1429, 0x1ba8: 0xbba1, 0x1ba9: 0xbbb9,
+ 0x1baa: 0xbbd1, 0x1bab: 0x10e1, 0x1bac: 0x10f9, 0x1bad: 0xbbe9, 0x1bae: 0x2079, 0x1baf: 0xbc01,
+ 0x1bb0: 0xbab1, 0x1bb1: 0x1099, 0x1bb2: 0x10b1, 0x1bb3: 0x10c9, 0x1bb4: 0xbac9, 0x1bb5: 0xbae1,
+ 0x1bb6: 0xbaf9, 0x1bb7: 0x1429, 0x1bb8: 0x1a31, 0x1bb9: 0xbb11, 0x1bba: 0xbb29, 0x1bbb: 0xbb41,
+ 0x1bbc: 0xbb59, 0x1bbd: 0xbb71, 0x1bbe: 0xbb89, 0x1bbf: 0x2109,
// Block 0x6f, offset 0x1bc0
- 0x1bc0: 0xe115, 0x1bc1: 0xe115, 0x1bc2: 0xe135, 0x1bc3: 0xe135, 0x1bc4: 0xe115, 0x1bc5: 0xe115,
- 0x1bc6: 0xe175, 0x1bc7: 0xe175, 0x1bc8: 0xe115, 0x1bc9: 0xe115, 0x1bca: 0xe135, 0x1bcb: 0xe135,
- 0x1bcc: 0xe115, 0x1bcd: 0xe115, 0x1bce: 0xe1f5, 0x1bcf: 0xe1f5, 0x1bd0: 0xe115, 0x1bd1: 0xe115,
- 0x1bd2: 0xe135, 0x1bd3: 0xe135, 0x1bd4: 0xe115, 0x1bd5: 0xe115, 0x1bd6: 0xe175, 0x1bd7: 0xe175,
- 0x1bd8: 0xe115, 0x1bd9: 0xe115, 0x1bda: 0xe135, 0x1bdb: 0xe135, 0x1bdc: 0xe115, 0x1bdd: 0xe115,
- 0x1bde: 0x8b05, 0x1bdf: 0x8b05, 0x1be0: 0x04b5, 0x1be1: 0x04b5, 0x1be2: 0x0208, 0x1be3: 0x0208,
- 0x1be4: 0x0208, 0x1be5: 0x0208, 0x1be6: 0x0208, 0x1be7: 0x0208, 0x1be8: 0x0208, 0x1be9: 0x0208,
- 0x1bea: 0x0208, 0x1beb: 0x0208, 0x1bec: 0x0208, 0x1bed: 0x0208, 0x1bee: 0x0208, 0x1bef: 0x0208,
- 0x1bf0: 0x0208, 0x1bf1: 0x0208, 0x1bf2: 0x0208, 0x1bf3: 0x0208, 0x1bf4: 0x0208, 0x1bf5: 0x0208,
- 0x1bf6: 0x0208, 0x1bf7: 0x0208, 0x1bf8: 0x0208, 0x1bf9: 0x0208, 0x1bfa: 0x0208, 0x1bfb: 0x0208,
- 0x1bfc: 0x0208, 0x1bfd: 0x0208, 0x1bfe: 0x0208, 0x1bff: 0x0208,
+ 0x1bc0: 0x1111, 0x1bc1: 0xbba1, 0x1bc2: 0xbba1, 0x1bc3: 0xbbb9, 0x1bc4: 0xbbd1, 0x1bc5: 0x10e1,
+ 0x1bc6: 0x10f9, 0x1bc7: 0xbbe9, 0x1bc8: 0x2079, 0x1bc9: 0xbc21, 0x1bca: 0xbac9, 0x1bcb: 0x1429,
+ 0x1bcc: 0xbb11, 0x1bcd: 0x10e1, 0x1bce: 0x1111, 0x1bcf: 0x2109, 0x1bd0: 0xbab1, 0x1bd1: 0x1099,
+ 0x1bd2: 0x10b1, 0x1bd3: 0x10c9, 0x1bd4: 0xbac9, 0x1bd5: 0xbae1, 0x1bd6: 0xbaf9, 0x1bd7: 0x1429,
+ 0x1bd8: 0x1a31, 0x1bd9: 0xbb11, 0x1bda: 0xbb29, 0x1bdb: 0xbb41, 0x1bdc: 0xbb59, 0x1bdd: 0xbb71,
+ 0x1bde: 0xbb89, 0x1bdf: 0x2109, 0x1be0: 0x1111, 0x1be1: 0x1429, 0x1be2: 0xbba1, 0x1be3: 0xbbb9,
+ 0x1be4: 0xbbd1, 0x1be5: 0x10e1, 0x1be6: 0x10f9, 0x1be7: 0xbbe9, 0x1be8: 0x2079, 0x1be9: 0xbc01,
+ 0x1bea: 0xbab1, 0x1beb: 0x1099, 0x1bec: 0x10b1, 0x1bed: 0x10c9, 0x1bee: 0xbac9, 0x1bef: 0xbae1,
+ 0x1bf0: 0xbaf9, 0x1bf1: 0x1429, 0x1bf2: 0x1a31, 0x1bf3: 0xbb11, 0x1bf4: 0xbb29, 0x1bf5: 0xbb41,
+ 0x1bf6: 0xbb59, 0x1bf7: 0xbb71, 0x1bf8: 0xbb89, 0x1bf9: 0x2109, 0x1bfa: 0x1111, 0x1bfb: 0xbba1,
+ 0x1bfc: 0xbba1, 0x1bfd: 0xbbb9, 0x1bfe: 0xbbd1, 0x1bff: 0x10e1,
// Block 0x70, offset 0x1c00
- 0x1c00: 0xb189, 0x1c01: 0xb1a1, 0x1c02: 0xb201, 0x1c03: 0xb249, 0x1c04: 0x0040, 0x1c05: 0xb411,
- 0x1c06: 0xb291, 0x1c07: 0xb219, 0x1c08: 0xb309, 0x1c09: 0xb429, 0x1c0a: 0xb399, 0x1c0b: 0xb3b1,
- 0x1c0c: 0xb3c9, 0x1c0d: 0xb3e1, 0x1c0e: 0xb2a9, 0x1c0f: 0xb339, 0x1c10: 0xb369, 0x1c11: 0xb2d9,
- 0x1c12: 0xb381, 0x1c13: 0xb279, 0x1c14: 0xb2c1, 0x1c15: 0xb1d1, 0x1c16: 0xb1e9, 0x1c17: 0xb231,
- 0x1c18: 0xb261, 0x1c19: 0xb2f1, 0x1c1a: 0xb321, 0x1c1b: 0xb351, 0x1c1c: 0xbc59, 0x1c1d: 0x7949,
- 0x1c1e: 0xbc71, 0x1c1f: 0xbc89, 0x1c20: 0x0040, 0x1c21: 0xb1a1, 0x1c22: 0xb201, 0x1c23: 0x0040,
- 0x1c24: 0xb3f9, 0x1c25: 0x0040, 0x1c26: 0x0040, 0x1c27: 0xb219, 0x1c28: 0x0040, 0x1c29: 0xb429,
- 0x1c2a: 0xb399, 0x1c2b: 0xb3b1, 0x1c2c: 0xb3c9, 0x1c2d: 0xb3e1, 0x1c2e: 0xb2a9, 0x1c2f: 0xb339,
- 0x1c30: 0xb369, 0x1c31: 0xb2d9, 0x1c32: 0xb381, 0x1c33: 0x0040, 0x1c34: 0xb2c1, 0x1c35: 0xb1d1,
- 0x1c36: 0xb1e9, 0x1c37: 0xb231, 0x1c38: 0x0040, 0x1c39: 0xb2f1, 0x1c3a: 0x0040, 0x1c3b: 0xb351,
- 0x1c3c: 0x0040, 0x1c3d: 0x0040, 0x1c3e: 0x0040, 0x1c3f: 0x0040,
+ 0x1c00: 0x10f9, 0x1c01: 0xbbe9, 0x1c02: 0x2079, 0x1c03: 0xbc21, 0x1c04: 0xbac9, 0x1c05: 0x1429,
+ 0x1c06: 0xbb11, 0x1c07: 0x10e1, 0x1c08: 0x1111, 0x1c09: 0x2109, 0x1c0a: 0xbc41, 0x1c0b: 0xbc41,
+ 0x1c0c: 0x0040, 0x1c0d: 0x0040, 0x1c0e: 0x1f41, 0x1c0f: 0x00c9, 0x1c10: 0x0069, 0x1c11: 0x0079,
+ 0x1c12: 0x1f51, 0x1c13: 0x1f61, 0x1c14: 0x1f71, 0x1c15: 0x1f81, 0x1c16: 0x1f91, 0x1c17: 0x1fa1,
+ 0x1c18: 0x1f41, 0x1c19: 0x00c9, 0x1c1a: 0x0069, 0x1c1b: 0x0079, 0x1c1c: 0x1f51, 0x1c1d: 0x1f61,
+ 0x1c1e: 0x1f71, 0x1c1f: 0x1f81, 0x1c20: 0x1f91, 0x1c21: 0x1fa1, 0x1c22: 0x1f41, 0x1c23: 0x00c9,
+ 0x1c24: 0x0069, 0x1c25: 0x0079, 0x1c26: 0x1f51, 0x1c27: 0x1f61, 0x1c28: 0x1f71, 0x1c29: 0x1f81,
+ 0x1c2a: 0x1f91, 0x1c2b: 0x1fa1, 0x1c2c: 0x1f41, 0x1c2d: 0x00c9, 0x1c2e: 0x0069, 0x1c2f: 0x0079,
+ 0x1c30: 0x1f51, 0x1c31: 0x1f61, 0x1c32: 0x1f71, 0x1c33: 0x1f81, 0x1c34: 0x1f91, 0x1c35: 0x1fa1,
+ 0x1c36: 0x1f41, 0x1c37: 0x00c9, 0x1c38: 0x0069, 0x1c39: 0x0079, 0x1c3a: 0x1f51, 0x1c3b: 0x1f61,
+ 0x1c3c: 0x1f71, 0x1c3d: 0x1f81, 0x1c3e: 0x1f91, 0x1c3f: 0x1fa1,
// Block 0x71, offset 0x1c40
- 0x1c40: 0x0040, 0x1c41: 0x0040, 0x1c42: 0xb201, 0x1c43: 0x0040, 0x1c44: 0x0040, 0x1c45: 0x0040,
- 0x1c46: 0x0040, 0x1c47: 0xb219, 0x1c48: 0x0040, 0x1c49: 0xb429, 0x1c4a: 0x0040, 0x1c4b: 0xb3b1,
- 0x1c4c: 0x0040, 0x1c4d: 0xb3e1, 0x1c4e: 0xb2a9, 0x1c4f: 0xb339, 0x1c50: 0x0040, 0x1c51: 0xb2d9,
- 0x1c52: 0xb381, 0x1c53: 0x0040, 0x1c54: 0xb2c1, 0x1c55: 0x0040, 0x1c56: 0x0040, 0x1c57: 0xb231,
- 0x1c58: 0x0040, 0x1c59: 0xb2f1, 0x1c5a: 0x0040, 0x1c5b: 0xb351, 0x1c5c: 0x0040, 0x1c5d: 0x7949,
- 0x1c5e: 0x0040, 0x1c5f: 0xbc89, 0x1c60: 0x0040, 0x1c61: 0xb1a1, 0x1c62: 0xb201, 0x1c63: 0x0040,
- 0x1c64: 0xb3f9, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0xb219, 0x1c68: 0xb309, 0x1c69: 0xb429,
- 0x1c6a: 0xb399, 0x1c6b: 0x0040, 0x1c6c: 0xb3c9, 0x1c6d: 0xb3e1, 0x1c6e: 0xb2a9, 0x1c6f: 0xb339,
- 0x1c70: 0xb369, 0x1c71: 0xb2d9, 0x1c72: 0xb381, 0x1c73: 0x0040, 0x1c74: 0xb2c1, 0x1c75: 0xb1d1,
- 0x1c76: 0xb1e9, 0x1c77: 0xb231, 0x1c78: 0x0040, 0x1c79: 0xb2f1, 0x1c7a: 0xb321, 0x1c7b: 0xb351,
- 0x1c7c: 0xbc59, 0x1c7d: 0x0040, 0x1c7e: 0xbc71, 0x1c7f: 0x0040,
+ 0x1c40: 0xe115, 0x1c41: 0xe115, 0x1c42: 0xe135, 0x1c43: 0xe135, 0x1c44: 0xe115, 0x1c45: 0xe115,
+ 0x1c46: 0xe175, 0x1c47: 0xe175, 0x1c48: 0xe115, 0x1c49: 0xe115, 0x1c4a: 0xe135, 0x1c4b: 0xe135,
+ 0x1c4c: 0xe115, 0x1c4d: 0xe115, 0x1c4e: 0xe1f5, 0x1c4f: 0xe1f5, 0x1c50: 0xe115, 0x1c51: 0xe115,
+ 0x1c52: 0xe135, 0x1c53: 0xe135, 0x1c54: 0xe115, 0x1c55: 0xe115, 0x1c56: 0xe175, 0x1c57: 0xe175,
+ 0x1c58: 0xe115, 0x1c59: 0xe115, 0x1c5a: 0xe135, 0x1c5b: 0xe135, 0x1c5c: 0xe115, 0x1c5d: 0xe115,
+ 0x1c5e: 0x8b05, 0x1c5f: 0x8b05, 0x1c60: 0x04b5, 0x1c61: 0x04b5, 0x1c62: 0x0a08, 0x1c63: 0x0a08,
+ 0x1c64: 0x0a08, 0x1c65: 0x0a08, 0x1c66: 0x0a08, 0x1c67: 0x0a08, 0x1c68: 0x0a08, 0x1c69: 0x0a08,
+ 0x1c6a: 0x0a08, 0x1c6b: 0x0a08, 0x1c6c: 0x0a08, 0x1c6d: 0x0a08, 0x1c6e: 0x0a08, 0x1c6f: 0x0a08,
+ 0x1c70: 0x0a08, 0x1c71: 0x0a08, 0x1c72: 0x0a08, 0x1c73: 0x0a08, 0x1c74: 0x0a08, 0x1c75: 0x0a08,
+ 0x1c76: 0x0a08, 0x1c77: 0x0a08, 0x1c78: 0x0a08, 0x1c79: 0x0a08, 0x1c7a: 0x0a08, 0x1c7b: 0x0a08,
+ 0x1c7c: 0x0a08, 0x1c7d: 0x0a08, 0x1c7e: 0x0a08, 0x1c7f: 0x0a08,
// Block 0x72, offset 0x1c80
- 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0xb3f9, 0x1c85: 0xb411,
- 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0x0040, 0x1c8b: 0xb3b1,
+ 0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0x0040, 0x1c85: 0xb411,
+ 0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0xb399, 0x1c8b: 0xb3b1,
0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9,
0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231,
- 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0x0040, 0x1c9d: 0x0040,
- 0x1c9e: 0x0040, 0x1c9f: 0x0040, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0xb249,
- 0x1ca4: 0x0040, 0x1ca5: 0xb411, 0x1ca6: 0xb291, 0x1ca7: 0xb219, 0x1ca8: 0xb309, 0x1ca9: 0xb429,
- 0x1caa: 0x0040, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339,
- 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0xb279, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1,
- 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0xb261, 0x1cb9: 0xb2f1, 0x1cba: 0xb321, 0x1cbb: 0xb351,
+ 0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0xbc59, 0x1c9d: 0x7949,
+ 0x1c9e: 0xbc71, 0x1c9f: 0xbc89, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0x0040,
+ 0x1ca4: 0xb3f9, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0xb219, 0x1ca8: 0x0040, 0x1ca9: 0xb429,
+ 0x1caa: 0xb399, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339,
+ 0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0x0040, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1,
+ 0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0x0040, 0x1cb9: 0xb2f1, 0x1cba: 0x0040, 0x1cbb: 0xb351,
0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040,
// Block 0x73, offset 0x1cc0
- 0x1cc0: 0x0040, 0x1cc1: 0xbca2, 0x1cc2: 0xbcba, 0x1cc3: 0xbcd2, 0x1cc4: 0xbcea, 0x1cc5: 0xbd02,
- 0x1cc6: 0xbd1a, 0x1cc7: 0xbd32, 0x1cc8: 0xbd4a, 0x1cc9: 0xbd62, 0x1cca: 0xbd7a, 0x1ccb: 0x0018,
- 0x1ccc: 0x0018, 0x1ccd: 0x0040, 0x1cce: 0x0040, 0x1ccf: 0x0040, 0x1cd0: 0xbd92, 0x1cd1: 0xbdb2,
- 0x1cd2: 0xbdd2, 0x1cd3: 0xbdf2, 0x1cd4: 0xbe12, 0x1cd5: 0xbe32, 0x1cd6: 0xbe52, 0x1cd7: 0xbe72,
- 0x1cd8: 0xbe92, 0x1cd9: 0xbeb2, 0x1cda: 0xbed2, 0x1cdb: 0xbef2, 0x1cdc: 0xbf12, 0x1cdd: 0xbf32,
- 0x1cde: 0xbf52, 0x1cdf: 0xbf72, 0x1ce0: 0xbf92, 0x1ce1: 0xbfb2, 0x1ce2: 0xbfd2, 0x1ce3: 0xbff2,
- 0x1ce4: 0xc012, 0x1ce5: 0xc032, 0x1ce6: 0xc052, 0x1ce7: 0xc072, 0x1ce8: 0xc092, 0x1ce9: 0xc0b2,
- 0x1cea: 0xc0d1, 0x1ceb: 0x1159, 0x1cec: 0x0269, 0x1ced: 0x6671, 0x1cee: 0xc111, 0x1cef: 0x0040,
- 0x1cf0: 0x0039, 0x1cf1: 0x0ee9, 0x1cf2: 0x1159, 0x1cf3: 0x0ef9, 0x1cf4: 0x0f09, 0x1cf5: 0x1199,
- 0x1cf6: 0x0f31, 0x1cf7: 0x0249, 0x1cf8: 0x0f41, 0x1cf9: 0x0259, 0x1cfa: 0x0f51, 0x1cfb: 0x0359,
- 0x1cfc: 0x0f61, 0x1cfd: 0x0f71, 0x1cfe: 0x00d9, 0x1cff: 0x0f99,
+ 0x1cc0: 0x0040, 0x1cc1: 0x0040, 0x1cc2: 0xb201, 0x1cc3: 0x0040, 0x1cc4: 0x0040, 0x1cc5: 0x0040,
+ 0x1cc6: 0x0040, 0x1cc7: 0xb219, 0x1cc8: 0x0040, 0x1cc9: 0xb429, 0x1cca: 0x0040, 0x1ccb: 0xb3b1,
+ 0x1ccc: 0x0040, 0x1ccd: 0xb3e1, 0x1cce: 0xb2a9, 0x1ccf: 0xb339, 0x1cd0: 0x0040, 0x1cd1: 0xb2d9,
+ 0x1cd2: 0xb381, 0x1cd3: 0x0040, 0x1cd4: 0xb2c1, 0x1cd5: 0x0040, 0x1cd6: 0x0040, 0x1cd7: 0xb231,
+ 0x1cd8: 0x0040, 0x1cd9: 0xb2f1, 0x1cda: 0x0040, 0x1cdb: 0xb351, 0x1cdc: 0x0040, 0x1cdd: 0x7949,
+ 0x1cde: 0x0040, 0x1cdf: 0xbc89, 0x1ce0: 0x0040, 0x1ce1: 0xb1a1, 0x1ce2: 0xb201, 0x1ce3: 0x0040,
+ 0x1ce4: 0xb3f9, 0x1ce5: 0x0040, 0x1ce6: 0x0040, 0x1ce7: 0xb219, 0x1ce8: 0xb309, 0x1ce9: 0xb429,
+ 0x1cea: 0xb399, 0x1ceb: 0x0040, 0x1cec: 0xb3c9, 0x1ced: 0xb3e1, 0x1cee: 0xb2a9, 0x1cef: 0xb339,
+ 0x1cf0: 0xb369, 0x1cf1: 0xb2d9, 0x1cf2: 0xb381, 0x1cf3: 0x0040, 0x1cf4: 0xb2c1, 0x1cf5: 0xb1d1,
+ 0x1cf6: 0xb1e9, 0x1cf7: 0xb231, 0x1cf8: 0x0040, 0x1cf9: 0xb2f1, 0x1cfa: 0xb321, 0x1cfb: 0xb351,
+ 0x1cfc: 0xbc59, 0x1cfd: 0x0040, 0x1cfe: 0xbc71, 0x1cff: 0x0040,
// Block 0x74, offset 0x1d00
- 0x1d00: 0x2039, 0x1d01: 0x0269, 0x1d02: 0x01d9, 0x1d03: 0x0fa9, 0x1d04: 0x0fb9, 0x1d05: 0x1089,
- 0x1d06: 0x0279, 0x1d07: 0x0369, 0x1d08: 0x0289, 0x1d09: 0x13d1, 0x1d0a: 0xc129, 0x1d0b: 0x65b1,
- 0x1d0c: 0xc141, 0x1d0d: 0x1441, 0x1d0e: 0xc159, 0x1d0f: 0xc179, 0x1d10: 0x0018, 0x1d11: 0x0018,
- 0x1d12: 0x0018, 0x1d13: 0x0018, 0x1d14: 0x0018, 0x1d15: 0x0018, 0x1d16: 0x0018, 0x1d17: 0x0018,
- 0x1d18: 0x0018, 0x1d19: 0x0018, 0x1d1a: 0x0018, 0x1d1b: 0x0018, 0x1d1c: 0x0018, 0x1d1d: 0x0018,
- 0x1d1e: 0x0018, 0x1d1f: 0x0018, 0x1d20: 0x0018, 0x1d21: 0x0018, 0x1d22: 0x0018, 0x1d23: 0x0018,
- 0x1d24: 0x0018, 0x1d25: 0x0018, 0x1d26: 0x0018, 0x1d27: 0x0018, 0x1d28: 0x0018, 0x1d29: 0x0018,
- 0x1d2a: 0xc191, 0x1d2b: 0xc1a9, 0x1d2c: 0x0040, 0x1d2d: 0x0040, 0x1d2e: 0x0040, 0x1d2f: 0x0040,
- 0x1d30: 0x0018, 0x1d31: 0x0018, 0x1d32: 0x0018, 0x1d33: 0x0018, 0x1d34: 0x0018, 0x1d35: 0x0018,
- 0x1d36: 0x0018, 0x1d37: 0x0018, 0x1d38: 0x0018, 0x1d39: 0x0018, 0x1d3a: 0x0018, 0x1d3b: 0x0018,
- 0x1d3c: 0x0018, 0x1d3d: 0x0018, 0x1d3e: 0x0018, 0x1d3f: 0x0018,
+ 0x1d00: 0xb189, 0x1d01: 0xb1a1, 0x1d02: 0xb201, 0x1d03: 0xb249, 0x1d04: 0xb3f9, 0x1d05: 0xb411,
+ 0x1d06: 0xb291, 0x1d07: 0xb219, 0x1d08: 0xb309, 0x1d09: 0xb429, 0x1d0a: 0x0040, 0x1d0b: 0xb3b1,
+ 0x1d0c: 0xb3c9, 0x1d0d: 0xb3e1, 0x1d0e: 0xb2a9, 0x1d0f: 0xb339, 0x1d10: 0xb369, 0x1d11: 0xb2d9,
+ 0x1d12: 0xb381, 0x1d13: 0xb279, 0x1d14: 0xb2c1, 0x1d15: 0xb1d1, 0x1d16: 0xb1e9, 0x1d17: 0xb231,
+ 0x1d18: 0xb261, 0x1d19: 0xb2f1, 0x1d1a: 0xb321, 0x1d1b: 0xb351, 0x1d1c: 0x0040, 0x1d1d: 0x0040,
+ 0x1d1e: 0x0040, 0x1d1f: 0x0040, 0x1d20: 0x0040, 0x1d21: 0xb1a1, 0x1d22: 0xb201, 0x1d23: 0xb249,
+ 0x1d24: 0x0040, 0x1d25: 0xb411, 0x1d26: 0xb291, 0x1d27: 0xb219, 0x1d28: 0xb309, 0x1d29: 0xb429,
+ 0x1d2a: 0x0040, 0x1d2b: 0xb3b1, 0x1d2c: 0xb3c9, 0x1d2d: 0xb3e1, 0x1d2e: 0xb2a9, 0x1d2f: 0xb339,
+ 0x1d30: 0xb369, 0x1d31: 0xb2d9, 0x1d32: 0xb381, 0x1d33: 0xb279, 0x1d34: 0xb2c1, 0x1d35: 0xb1d1,
+ 0x1d36: 0xb1e9, 0x1d37: 0xb231, 0x1d38: 0xb261, 0x1d39: 0xb2f1, 0x1d3a: 0xb321, 0x1d3b: 0xb351,
+ 0x1d3c: 0x0040, 0x1d3d: 0x0040, 0x1d3e: 0x0040, 0x1d3f: 0x0040,
// Block 0x75, offset 0x1d40
- 0x1d40: 0xc1d9, 0x1d41: 0xc211, 0x1d42: 0xc249, 0x1d43: 0x0040, 0x1d44: 0x0040, 0x1d45: 0x0040,
- 0x1d46: 0x0040, 0x1d47: 0x0040, 0x1d48: 0x0040, 0x1d49: 0x0040, 0x1d4a: 0x0040, 0x1d4b: 0x0040,
- 0x1d4c: 0x0040, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xc269, 0x1d51: 0xc289,
- 0x1d52: 0xc2a9, 0x1d53: 0xc2c9, 0x1d54: 0xc2e9, 0x1d55: 0xc309, 0x1d56: 0xc329, 0x1d57: 0xc349,
- 0x1d58: 0xc369, 0x1d59: 0xc389, 0x1d5a: 0xc3a9, 0x1d5b: 0xc3c9, 0x1d5c: 0xc3e9, 0x1d5d: 0xc409,
- 0x1d5e: 0xc429, 0x1d5f: 0xc449, 0x1d60: 0xc469, 0x1d61: 0xc489, 0x1d62: 0xc4a9, 0x1d63: 0xc4c9,
- 0x1d64: 0xc4e9, 0x1d65: 0xc509, 0x1d66: 0xc529, 0x1d67: 0xc549, 0x1d68: 0xc569, 0x1d69: 0xc589,
- 0x1d6a: 0xc5a9, 0x1d6b: 0xc5c9, 0x1d6c: 0xc5e9, 0x1d6d: 0xc609, 0x1d6e: 0xc629, 0x1d6f: 0xc649,
- 0x1d70: 0xc669, 0x1d71: 0xc689, 0x1d72: 0xc6a9, 0x1d73: 0xc6c9, 0x1d74: 0xc6e9, 0x1d75: 0xc709,
- 0x1d76: 0xc729, 0x1d77: 0xc749, 0x1d78: 0xc769, 0x1d79: 0xc789, 0x1d7a: 0xc7a9, 0x1d7b: 0xc7c9,
- 0x1d7c: 0x0040, 0x1d7d: 0x0040, 0x1d7e: 0x0040, 0x1d7f: 0x0040,
+ 0x1d40: 0x0040, 0x1d41: 0xbca2, 0x1d42: 0xbcba, 0x1d43: 0xbcd2, 0x1d44: 0xbcea, 0x1d45: 0xbd02,
+ 0x1d46: 0xbd1a, 0x1d47: 0xbd32, 0x1d48: 0xbd4a, 0x1d49: 0xbd62, 0x1d4a: 0xbd7a, 0x1d4b: 0x0018,
+ 0x1d4c: 0x0018, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xbd92, 0x1d51: 0xbdb2,
+ 0x1d52: 0xbdd2, 0x1d53: 0xbdf2, 0x1d54: 0xbe12, 0x1d55: 0xbe32, 0x1d56: 0xbe52, 0x1d57: 0xbe72,
+ 0x1d58: 0xbe92, 0x1d59: 0xbeb2, 0x1d5a: 0xbed2, 0x1d5b: 0xbef2, 0x1d5c: 0xbf12, 0x1d5d: 0xbf32,
+ 0x1d5e: 0xbf52, 0x1d5f: 0xbf72, 0x1d60: 0xbf92, 0x1d61: 0xbfb2, 0x1d62: 0xbfd2, 0x1d63: 0xbff2,
+ 0x1d64: 0xc012, 0x1d65: 0xc032, 0x1d66: 0xc052, 0x1d67: 0xc072, 0x1d68: 0xc092, 0x1d69: 0xc0b2,
+ 0x1d6a: 0xc0d1, 0x1d6b: 0x1159, 0x1d6c: 0x0269, 0x1d6d: 0x6671, 0x1d6e: 0xc111, 0x1d6f: 0x0040,
+ 0x1d70: 0x0039, 0x1d71: 0x0ee9, 0x1d72: 0x1159, 0x1d73: 0x0ef9, 0x1d74: 0x0f09, 0x1d75: 0x1199,
+ 0x1d76: 0x0f31, 0x1d77: 0x0249, 0x1d78: 0x0f41, 0x1d79: 0x0259, 0x1d7a: 0x0f51, 0x1d7b: 0x0359,
+ 0x1d7c: 0x0f61, 0x1d7d: 0x0f71, 0x1d7e: 0x00d9, 0x1d7f: 0x0f99,
// Block 0x76, offset 0x1d80
- 0x1d80: 0xcaf9, 0x1d81: 0xcb19, 0x1d82: 0xcb39, 0x1d83: 0x8b1d, 0x1d84: 0xcb59, 0x1d85: 0xcb79,
- 0x1d86: 0xcb99, 0x1d87: 0xcbb9, 0x1d88: 0xcbd9, 0x1d89: 0xcbf9, 0x1d8a: 0xcc19, 0x1d8b: 0xcc39,
- 0x1d8c: 0xcc59, 0x1d8d: 0x8b3d, 0x1d8e: 0xcc79, 0x1d8f: 0xcc99, 0x1d90: 0xccb9, 0x1d91: 0xccd9,
- 0x1d92: 0x8b5d, 0x1d93: 0xccf9, 0x1d94: 0xcd19, 0x1d95: 0xc429, 0x1d96: 0x8b7d, 0x1d97: 0xcd39,
- 0x1d98: 0xcd59, 0x1d99: 0xcd79, 0x1d9a: 0xcd99, 0x1d9b: 0xcdb9, 0x1d9c: 0x8b9d, 0x1d9d: 0xcdd9,
- 0x1d9e: 0xcdf9, 0x1d9f: 0xce19, 0x1da0: 0xce39, 0x1da1: 0xce59, 0x1da2: 0xc789, 0x1da3: 0xce79,
- 0x1da4: 0xce99, 0x1da5: 0xceb9, 0x1da6: 0xced9, 0x1da7: 0xcef9, 0x1da8: 0xcf19, 0x1da9: 0xcf39,
- 0x1daa: 0xcf59, 0x1dab: 0xcf79, 0x1dac: 0xcf99, 0x1dad: 0xcfb9, 0x1dae: 0xcfd9, 0x1daf: 0xcff9,
- 0x1db0: 0xd019, 0x1db1: 0xd039, 0x1db2: 0xd039, 0x1db3: 0xd039, 0x1db4: 0x8bbd, 0x1db5: 0xd059,
- 0x1db6: 0xd079, 0x1db7: 0xd099, 0x1db8: 0x8bdd, 0x1db9: 0xd0b9, 0x1dba: 0xd0d9, 0x1dbb: 0xd0f9,
- 0x1dbc: 0xd119, 0x1dbd: 0xd139, 0x1dbe: 0xd159, 0x1dbf: 0xd179,
+ 0x1d80: 0x2039, 0x1d81: 0x0269, 0x1d82: 0x01d9, 0x1d83: 0x0fa9, 0x1d84: 0x0fb9, 0x1d85: 0x1089,
+ 0x1d86: 0x0279, 0x1d87: 0x0369, 0x1d88: 0x0289, 0x1d89: 0x13d1, 0x1d8a: 0xc129, 0x1d8b: 0x65b1,
+ 0x1d8c: 0xc141, 0x1d8d: 0x1441, 0x1d8e: 0xc159, 0x1d8f: 0xc179, 0x1d90: 0x0018, 0x1d91: 0x0018,
+ 0x1d92: 0x0018, 0x1d93: 0x0018, 0x1d94: 0x0018, 0x1d95: 0x0018, 0x1d96: 0x0018, 0x1d97: 0x0018,
+ 0x1d98: 0x0018, 0x1d99: 0x0018, 0x1d9a: 0x0018, 0x1d9b: 0x0018, 0x1d9c: 0x0018, 0x1d9d: 0x0018,
+ 0x1d9e: 0x0018, 0x1d9f: 0x0018, 0x1da0: 0x0018, 0x1da1: 0x0018, 0x1da2: 0x0018, 0x1da3: 0x0018,
+ 0x1da4: 0x0018, 0x1da5: 0x0018, 0x1da6: 0x0018, 0x1da7: 0x0018, 0x1da8: 0x0018, 0x1da9: 0x0018,
+ 0x1daa: 0xc191, 0x1dab: 0xc1a9, 0x1dac: 0x0040, 0x1dad: 0x0040, 0x1dae: 0x0040, 0x1daf: 0x0040,
+ 0x1db0: 0x0018, 0x1db1: 0x0018, 0x1db2: 0x0018, 0x1db3: 0x0018, 0x1db4: 0x0018, 0x1db5: 0x0018,
+ 0x1db6: 0x0018, 0x1db7: 0x0018, 0x1db8: 0x0018, 0x1db9: 0x0018, 0x1dba: 0x0018, 0x1dbb: 0x0018,
+ 0x1dbc: 0x0018, 0x1dbd: 0x0018, 0x1dbe: 0x0018, 0x1dbf: 0x0018,
// Block 0x77, offset 0x1dc0
- 0x1dc0: 0xd199, 0x1dc1: 0xd1b9, 0x1dc2: 0xd1d9, 0x1dc3: 0xd1f9, 0x1dc4: 0xd219, 0x1dc5: 0xd239,
- 0x1dc6: 0xd239, 0x1dc7: 0xd259, 0x1dc8: 0xd279, 0x1dc9: 0xd299, 0x1dca: 0xd2b9, 0x1dcb: 0xd2d9,
- 0x1dcc: 0xd2f9, 0x1dcd: 0xd319, 0x1dce: 0xd339, 0x1dcf: 0xd359, 0x1dd0: 0xd379, 0x1dd1: 0xd399,
- 0x1dd2: 0xd3b9, 0x1dd3: 0xd3d9, 0x1dd4: 0xd3f9, 0x1dd5: 0xd419, 0x1dd6: 0xd439, 0x1dd7: 0xd459,
- 0x1dd8: 0xd479, 0x1dd9: 0x8bfd, 0x1dda: 0xd499, 0x1ddb: 0xd4b9, 0x1ddc: 0xd4d9, 0x1ddd: 0xc309,
- 0x1dde: 0xd4f9, 0x1ddf: 0xd519, 0x1de0: 0x8c1d, 0x1de1: 0x8c3d, 0x1de2: 0xd539, 0x1de3: 0xd559,
- 0x1de4: 0xd579, 0x1de5: 0xd599, 0x1de6: 0xd5b9, 0x1de7: 0xd5d9, 0x1de8: 0x0040, 0x1de9: 0xd5f9,
- 0x1dea: 0xd619, 0x1deb: 0xd619, 0x1dec: 0x8c5d, 0x1ded: 0xd639, 0x1dee: 0xd659, 0x1def: 0xd679,
- 0x1df0: 0xd699, 0x1df1: 0x8c7d, 0x1df2: 0xd6b9, 0x1df3: 0xd6d9, 0x1df4: 0x0040, 0x1df5: 0xd6f9,
- 0x1df6: 0xd719, 0x1df7: 0xd739, 0x1df8: 0xd759, 0x1df9: 0xd779, 0x1dfa: 0xd799, 0x1dfb: 0x8c9d,
- 0x1dfc: 0xd7b9, 0x1dfd: 0x8cbd, 0x1dfe: 0xd7d9, 0x1dff: 0xd7f9,
+ 0x1dc0: 0xc1d9, 0x1dc1: 0xc211, 0x1dc2: 0xc249, 0x1dc3: 0x0040, 0x1dc4: 0x0040, 0x1dc5: 0x0040,
+ 0x1dc6: 0x0040, 0x1dc7: 0x0040, 0x1dc8: 0x0040, 0x1dc9: 0x0040, 0x1dca: 0x0040, 0x1dcb: 0x0040,
+ 0x1dcc: 0x0040, 0x1dcd: 0x0040, 0x1dce: 0x0040, 0x1dcf: 0x0040, 0x1dd0: 0xc269, 0x1dd1: 0xc289,
+ 0x1dd2: 0xc2a9, 0x1dd3: 0xc2c9, 0x1dd4: 0xc2e9, 0x1dd5: 0xc309, 0x1dd6: 0xc329, 0x1dd7: 0xc349,
+ 0x1dd8: 0xc369, 0x1dd9: 0xc389, 0x1dda: 0xc3a9, 0x1ddb: 0xc3c9, 0x1ddc: 0xc3e9, 0x1ddd: 0xc409,
+ 0x1dde: 0xc429, 0x1ddf: 0xc449, 0x1de0: 0xc469, 0x1de1: 0xc489, 0x1de2: 0xc4a9, 0x1de3: 0xc4c9,
+ 0x1de4: 0xc4e9, 0x1de5: 0xc509, 0x1de6: 0xc529, 0x1de7: 0xc549, 0x1de8: 0xc569, 0x1de9: 0xc589,
+ 0x1dea: 0xc5a9, 0x1deb: 0xc5c9, 0x1dec: 0xc5e9, 0x1ded: 0xc609, 0x1dee: 0xc629, 0x1def: 0xc649,
+ 0x1df0: 0xc669, 0x1df1: 0xc689, 0x1df2: 0xc6a9, 0x1df3: 0xc6c9, 0x1df4: 0xc6e9, 0x1df5: 0xc709,
+ 0x1df6: 0xc729, 0x1df7: 0xc749, 0x1df8: 0xc769, 0x1df9: 0xc789, 0x1dfa: 0xc7a9, 0x1dfb: 0xc7c9,
+ 0x1dfc: 0x0040, 0x1dfd: 0x0040, 0x1dfe: 0x0040, 0x1dff: 0x0040,
// Block 0x78, offset 0x1e00
- 0x1e00: 0xd819, 0x1e01: 0xd839, 0x1e02: 0xd859, 0x1e03: 0xd879, 0x1e04: 0xd899, 0x1e05: 0xd8b9,
- 0x1e06: 0xd8d9, 0x1e07: 0xd8f9, 0x1e08: 0xd919, 0x1e09: 0x8cdd, 0x1e0a: 0xd939, 0x1e0b: 0xd959,
- 0x1e0c: 0xd979, 0x1e0d: 0xd999, 0x1e0e: 0xd9b9, 0x1e0f: 0x8cfd, 0x1e10: 0xd9d9, 0x1e11: 0x8d1d,
- 0x1e12: 0x8d3d, 0x1e13: 0xd9f9, 0x1e14: 0xda19, 0x1e15: 0xda19, 0x1e16: 0xda39, 0x1e17: 0x8d5d,
- 0x1e18: 0x8d7d, 0x1e19: 0xda59, 0x1e1a: 0xda79, 0x1e1b: 0xda99, 0x1e1c: 0xdab9, 0x1e1d: 0xdad9,
- 0x1e1e: 0xdaf9, 0x1e1f: 0xdb19, 0x1e20: 0xdb39, 0x1e21: 0xdb59, 0x1e22: 0xdb79, 0x1e23: 0xdb99,
- 0x1e24: 0x8d9d, 0x1e25: 0xdbb9, 0x1e26: 0xdbd9, 0x1e27: 0xdbf9, 0x1e28: 0xdc19, 0x1e29: 0xdbf9,
- 0x1e2a: 0xdc39, 0x1e2b: 0xdc59, 0x1e2c: 0xdc79, 0x1e2d: 0xdc99, 0x1e2e: 0xdcb9, 0x1e2f: 0xdcd9,
- 0x1e30: 0xdcf9, 0x1e31: 0xdd19, 0x1e32: 0xdd39, 0x1e33: 0xdd59, 0x1e34: 0xdd79, 0x1e35: 0xdd99,
- 0x1e36: 0xddb9, 0x1e37: 0xddd9, 0x1e38: 0x8dbd, 0x1e39: 0xddf9, 0x1e3a: 0xde19, 0x1e3b: 0xde39,
- 0x1e3c: 0xde59, 0x1e3d: 0xde79, 0x1e3e: 0x8ddd, 0x1e3f: 0xde99,
+ 0x1e00: 0xcaf9, 0x1e01: 0xcb19, 0x1e02: 0xcb39, 0x1e03: 0x8b1d, 0x1e04: 0xcb59, 0x1e05: 0xcb79,
+ 0x1e06: 0xcb99, 0x1e07: 0xcbb9, 0x1e08: 0xcbd9, 0x1e09: 0xcbf9, 0x1e0a: 0xcc19, 0x1e0b: 0xcc39,
+ 0x1e0c: 0xcc59, 0x1e0d: 0x8b3d, 0x1e0e: 0xcc79, 0x1e0f: 0xcc99, 0x1e10: 0xccb9, 0x1e11: 0xccd9,
+ 0x1e12: 0x8b5d, 0x1e13: 0xccf9, 0x1e14: 0xcd19, 0x1e15: 0xc429, 0x1e16: 0x8b7d, 0x1e17: 0xcd39,
+ 0x1e18: 0xcd59, 0x1e19: 0xcd79, 0x1e1a: 0xcd99, 0x1e1b: 0xcdb9, 0x1e1c: 0x8b9d, 0x1e1d: 0xcdd9,
+ 0x1e1e: 0xcdf9, 0x1e1f: 0xce19, 0x1e20: 0xce39, 0x1e21: 0xce59, 0x1e22: 0xc789, 0x1e23: 0xce79,
+ 0x1e24: 0xce99, 0x1e25: 0xceb9, 0x1e26: 0xced9, 0x1e27: 0xcef9, 0x1e28: 0xcf19, 0x1e29: 0xcf39,
+ 0x1e2a: 0xcf59, 0x1e2b: 0xcf79, 0x1e2c: 0xcf99, 0x1e2d: 0xcfb9, 0x1e2e: 0xcfd9, 0x1e2f: 0xcff9,
+ 0x1e30: 0xd019, 0x1e31: 0xd039, 0x1e32: 0xd039, 0x1e33: 0xd039, 0x1e34: 0x8bbd, 0x1e35: 0xd059,
+ 0x1e36: 0xd079, 0x1e37: 0xd099, 0x1e38: 0x8bdd, 0x1e39: 0xd0b9, 0x1e3a: 0xd0d9, 0x1e3b: 0xd0f9,
+ 0x1e3c: 0xd119, 0x1e3d: 0xd139, 0x1e3e: 0xd159, 0x1e3f: 0xd179,
// Block 0x79, offset 0x1e40
- 0x1e40: 0xe599, 0x1e41: 0xe5b9, 0x1e42: 0xe5d9, 0x1e43: 0xe5f9, 0x1e44: 0xe619, 0x1e45: 0xe639,
- 0x1e46: 0x8efd, 0x1e47: 0xe659, 0x1e48: 0xe679, 0x1e49: 0xe699, 0x1e4a: 0xe6b9, 0x1e4b: 0xe6d9,
- 0x1e4c: 0xe6f9, 0x1e4d: 0x8f1d, 0x1e4e: 0xe719, 0x1e4f: 0xe739, 0x1e50: 0x8f3d, 0x1e51: 0x8f5d,
- 0x1e52: 0xe759, 0x1e53: 0xe779, 0x1e54: 0xe799, 0x1e55: 0xe7b9, 0x1e56: 0xe7d9, 0x1e57: 0xe7f9,
- 0x1e58: 0xe819, 0x1e59: 0xe839, 0x1e5a: 0xe859, 0x1e5b: 0x8f7d, 0x1e5c: 0xe879, 0x1e5d: 0x8f9d,
- 0x1e5e: 0xe899, 0x1e5f: 0x0040, 0x1e60: 0xe8b9, 0x1e61: 0xe8d9, 0x1e62: 0xe8f9, 0x1e63: 0x8fbd,
- 0x1e64: 0xe919, 0x1e65: 0xe939, 0x1e66: 0x8fdd, 0x1e67: 0x8ffd, 0x1e68: 0xe959, 0x1e69: 0xe979,
- 0x1e6a: 0xe999, 0x1e6b: 0xe9b9, 0x1e6c: 0xe9d9, 0x1e6d: 0xe9d9, 0x1e6e: 0xe9f9, 0x1e6f: 0xea19,
- 0x1e70: 0xea39, 0x1e71: 0xea59, 0x1e72: 0xea79, 0x1e73: 0xea99, 0x1e74: 0xeab9, 0x1e75: 0x901d,
- 0x1e76: 0xead9, 0x1e77: 0x903d, 0x1e78: 0xeaf9, 0x1e79: 0x905d, 0x1e7a: 0xeb19, 0x1e7b: 0x907d,
- 0x1e7c: 0x909d, 0x1e7d: 0x90bd, 0x1e7e: 0xeb39, 0x1e7f: 0xeb59,
+ 0x1e40: 0xd199, 0x1e41: 0xd1b9, 0x1e42: 0xd1d9, 0x1e43: 0xd1f9, 0x1e44: 0xd219, 0x1e45: 0xd239,
+ 0x1e46: 0xd239, 0x1e47: 0xd259, 0x1e48: 0xd279, 0x1e49: 0xd299, 0x1e4a: 0xd2b9, 0x1e4b: 0xd2d9,
+ 0x1e4c: 0xd2f9, 0x1e4d: 0xd319, 0x1e4e: 0xd339, 0x1e4f: 0xd359, 0x1e50: 0xd379, 0x1e51: 0xd399,
+ 0x1e52: 0xd3b9, 0x1e53: 0xd3d9, 0x1e54: 0xd3f9, 0x1e55: 0xd419, 0x1e56: 0xd439, 0x1e57: 0xd459,
+ 0x1e58: 0xd479, 0x1e59: 0x8bfd, 0x1e5a: 0xd499, 0x1e5b: 0xd4b9, 0x1e5c: 0xd4d9, 0x1e5d: 0xc309,
+ 0x1e5e: 0xd4f9, 0x1e5f: 0xd519, 0x1e60: 0x8c1d, 0x1e61: 0x8c3d, 0x1e62: 0xd539, 0x1e63: 0xd559,
+ 0x1e64: 0xd579, 0x1e65: 0xd599, 0x1e66: 0xd5b9, 0x1e67: 0xd5d9, 0x1e68: 0x2040, 0x1e69: 0xd5f9,
+ 0x1e6a: 0xd619, 0x1e6b: 0xd619, 0x1e6c: 0x8c5d, 0x1e6d: 0xd639, 0x1e6e: 0xd659, 0x1e6f: 0xd679,
+ 0x1e70: 0xd699, 0x1e71: 0x8c7d, 0x1e72: 0xd6b9, 0x1e73: 0xd6d9, 0x1e74: 0x2040, 0x1e75: 0xd6f9,
+ 0x1e76: 0xd719, 0x1e77: 0xd739, 0x1e78: 0xd759, 0x1e79: 0xd779, 0x1e7a: 0xd799, 0x1e7b: 0x8c9d,
+ 0x1e7c: 0xd7b9, 0x1e7d: 0x8cbd, 0x1e7e: 0xd7d9, 0x1e7f: 0xd7f9,
// Block 0x7a, offset 0x1e80
- 0x1e80: 0xeb79, 0x1e81: 0x90dd, 0x1e82: 0x90fd, 0x1e83: 0x911d, 0x1e84: 0x913d, 0x1e85: 0xeb99,
- 0x1e86: 0xebb9, 0x1e87: 0xebb9, 0x1e88: 0xebd9, 0x1e89: 0xebf9, 0x1e8a: 0xec19, 0x1e8b: 0xec39,
- 0x1e8c: 0xec59, 0x1e8d: 0x915d, 0x1e8e: 0xec79, 0x1e8f: 0xec99, 0x1e90: 0xecb9, 0x1e91: 0xecd9,
- 0x1e92: 0x917d, 0x1e93: 0xecf9, 0x1e94: 0x919d, 0x1e95: 0x91bd, 0x1e96: 0xed19, 0x1e97: 0xed39,
- 0x1e98: 0xed59, 0x1e99: 0xed79, 0x1e9a: 0xed99, 0x1e9b: 0xedb9, 0x1e9c: 0x91dd, 0x1e9d: 0x91fd,
- 0x1e9e: 0x921d, 0x1e9f: 0x0040, 0x1ea0: 0xedd9, 0x1ea1: 0x923d, 0x1ea2: 0xedf9, 0x1ea3: 0xee19,
- 0x1ea4: 0xee39, 0x1ea5: 0x925d, 0x1ea6: 0xee59, 0x1ea7: 0xee79, 0x1ea8: 0xee99, 0x1ea9: 0xeeb9,
- 0x1eaa: 0xeed9, 0x1eab: 0x927d, 0x1eac: 0xeef9, 0x1ead: 0xef19, 0x1eae: 0xef39, 0x1eaf: 0xef59,
- 0x1eb0: 0xef79, 0x1eb1: 0xef99, 0x1eb2: 0x929d, 0x1eb3: 0x92bd, 0x1eb4: 0xefb9, 0x1eb5: 0x92dd,
- 0x1eb6: 0xefd9, 0x1eb7: 0x92fd, 0x1eb8: 0xeff9, 0x1eb9: 0xf019, 0x1eba: 0xf039, 0x1ebb: 0x931d,
- 0x1ebc: 0x933d, 0x1ebd: 0xf059, 0x1ebe: 0x935d, 0x1ebf: 0xf079,
+ 0x1e80: 0xd819, 0x1e81: 0xd839, 0x1e82: 0xd859, 0x1e83: 0xd879, 0x1e84: 0xd899, 0x1e85: 0xd8b9,
+ 0x1e86: 0xd8d9, 0x1e87: 0xd8f9, 0x1e88: 0xd919, 0x1e89: 0x8cdd, 0x1e8a: 0xd939, 0x1e8b: 0xd959,
+ 0x1e8c: 0xd979, 0x1e8d: 0xd999, 0x1e8e: 0xd9b9, 0x1e8f: 0x8cfd, 0x1e90: 0xd9d9, 0x1e91: 0x8d1d,
+ 0x1e92: 0x8d3d, 0x1e93: 0xd9f9, 0x1e94: 0xda19, 0x1e95: 0xda19, 0x1e96: 0xda39, 0x1e97: 0x8d5d,
+ 0x1e98: 0x8d7d, 0x1e99: 0xda59, 0x1e9a: 0xda79, 0x1e9b: 0xda99, 0x1e9c: 0xdab9, 0x1e9d: 0xdad9,
+ 0x1e9e: 0xdaf9, 0x1e9f: 0xdb19, 0x1ea0: 0xdb39, 0x1ea1: 0xdb59, 0x1ea2: 0xdb79, 0x1ea3: 0xdb99,
+ 0x1ea4: 0x8d9d, 0x1ea5: 0xdbb9, 0x1ea6: 0xdbd9, 0x1ea7: 0xdbf9, 0x1ea8: 0xdc19, 0x1ea9: 0xdbf9,
+ 0x1eaa: 0xdc39, 0x1eab: 0xdc59, 0x1eac: 0xdc79, 0x1ead: 0xdc99, 0x1eae: 0xdcb9, 0x1eaf: 0xdcd9,
+ 0x1eb0: 0xdcf9, 0x1eb1: 0xdd19, 0x1eb2: 0xdd39, 0x1eb3: 0xdd59, 0x1eb4: 0xdd79, 0x1eb5: 0xdd99,
+ 0x1eb6: 0xddb9, 0x1eb7: 0xddd9, 0x1eb8: 0x8dbd, 0x1eb9: 0xddf9, 0x1eba: 0xde19, 0x1ebb: 0xde39,
+ 0x1ebc: 0xde59, 0x1ebd: 0xde79, 0x1ebe: 0x8ddd, 0x1ebf: 0xde99,
// Block 0x7b, offset 0x1ec0
- 0x1ec0: 0xf6b9, 0x1ec1: 0xf6d9, 0x1ec2: 0xf6f9, 0x1ec3: 0xf719, 0x1ec4: 0xf739, 0x1ec5: 0x951d,
- 0x1ec6: 0xf759, 0x1ec7: 0xf779, 0x1ec8: 0xf799, 0x1ec9: 0xf7b9, 0x1eca: 0xf7d9, 0x1ecb: 0x953d,
- 0x1ecc: 0x955d, 0x1ecd: 0xf7f9, 0x1ece: 0xf819, 0x1ecf: 0xf839, 0x1ed0: 0xf859, 0x1ed1: 0xf879,
- 0x1ed2: 0xf899, 0x1ed3: 0x957d, 0x1ed4: 0xf8b9, 0x1ed5: 0xf8d9, 0x1ed6: 0xf8f9, 0x1ed7: 0xf919,
- 0x1ed8: 0x959d, 0x1ed9: 0x95bd, 0x1eda: 0xf939, 0x1edb: 0xf959, 0x1edc: 0xf979, 0x1edd: 0x95dd,
- 0x1ede: 0xf999, 0x1edf: 0xf9b9, 0x1ee0: 0x6815, 0x1ee1: 0x95fd, 0x1ee2: 0xf9d9, 0x1ee3: 0xf9f9,
- 0x1ee4: 0xfa19, 0x1ee5: 0x961d, 0x1ee6: 0xfa39, 0x1ee7: 0xfa59, 0x1ee8: 0xfa79, 0x1ee9: 0xfa99,
- 0x1eea: 0xfab9, 0x1eeb: 0xfad9, 0x1eec: 0xfaf9, 0x1eed: 0x963d, 0x1eee: 0xfb19, 0x1eef: 0xfb39,
- 0x1ef0: 0xfb59, 0x1ef1: 0x965d, 0x1ef2: 0xfb79, 0x1ef3: 0xfb99, 0x1ef4: 0xfbb9, 0x1ef5: 0xfbd9,
- 0x1ef6: 0x7b35, 0x1ef7: 0x967d, 0x1ef8: 0xfbf9, 0x1ef9: 0xfc19, 0x1efa: 0xfc39, 0x1efb: 0x969d,
- 0x1efc: 0xfc59, 0x1efd: 0x96bd, 0x1efe: 0xfc79, 0x1eff: 0xfc79,
+ 0x1ec0: 0xe599, 0x1ec1: 0xe5b9, 0x1ec2: 0xe5d9, 0x1ec3: 0xe5f9, 0x1ec4: 0xe619, 0x1ec5: 0xe639,
+ 0x1ec6: 0x8efd, 0x1ec7: 0xe659, 0x1ec8: 0xe679, 0x1ec9: 0xe699, 0x1eca: 0xe6b9, 0x1ecb: 0xe6d9,
+ 0x1ecc: 0xe6f9, 0x1ecd: 0x8f1d, 0x1ece: 0xe719, 0x1ecf: 0xe739, 0x1ed0: 0x8f3d, 0x1ed1: 0x8f5d,
+ 0x1ed2: 0xe759, 0x1ed3: 0xe779, 0x1ed4: 0xe799, 0x1ed5: 0xe7b9, 0x1ed6: 0xe7d9, 0x1ed7: 0xe7f9,
+ 0x1ed8: 0xe819, 0x1ed9: 0xe839, 0x1eda: 0xe859, 0x1edb: 0x8f7d, 0x1edc: 0xe879, 0x1edd: 0x8f9d,
+ 0x1ede: 0xe899, 0x1edf: 0x2040, 0x1ee0: 0xe8b9, 0x1ee1: 0xe8d9, 0x1ee2: 0xe8f9, 0x1ee3: 0x8fbd,
+ 0x1ee4: 0xe919, 0x1ee5: 0xe939, 0x1ee6: 0x8fdd, 0x1ee7: 0x8ffd, 0x1ee8: 0xe959, 0x1ee9: 0xe979,
+ 0x1eea: 0xe999, 0x1eeb: 0xe9b9, 0x1eec: 0xe9d9, 0x1eed: 0xe9d9, 0x1eee: 0xe9f9, 0x1eef: 0xea19,
+ 0x1ef0: 0xea39, 0x1ef1: 0xea59, 0x1ef2: 0xea79, 0x1ef3: 0xea99, 0x1ef4: 0xeab9, 0x1ef5: 0x901d,
+ 0x1ef6: 0xead9, 0x1ef7: 0x903d, 0x1ef8: 0xeaf9, 0x1ef9: 0x905d, 0x1efa: 0xeb19, 0x1efb: 0x907d,
+ 0x1efc: 0x909d, 0x1efd: 0x90bd, 0x1efe: 0xeb39, 0x1eff: 0xeb59,
// Block 0x7c, offset 0x1f00
- 0x1f00: 0xfc99, 0x1f01: 0x96dd, 0x1f02: 0xfcb9, 0x1f03: 0xfcd9, 0x1f04: 0xfcf9, 0x1f05: 0xfd19,
- 0x1f06: 0xfd39, 0x1f07: 0xfd59, 0x1f08: 0xfd79, 0x1f09: 0x96fd, 0x1f0a: 0xfd99, 0x1f0b: 0xfdb9,
- 0x1f0c: 0xfdd9, 0x1f0d: 0xfdf9, 0x1f0e: 0xfe19, 0x1f0f: 0xfe39, 0x1f10: 0x971d, 0x1f11: 0xfe59,
- 0x1f12: 0x973d, 0x1f13: 0x975d, 0x1f14: 0x977d, 0x1f15: 0xfe79, 0x1f16: 0xfe99, 0x1f17: 0xfeb9,
- 0x1f18: 0xfed9, 0x1f19: 0xfef9, 0x1f1a: 0xff19, 0x1f1b: 0xff39, 0x1f1c: 0xff59, 0x1f1d: 0x979d,
- 0x1f1e: 0x0040, 0x1f1f: 0x0040, 0x1f20: 0x0040, 0x1f21: 0x0040, 0x1f22: 0x0040, 0x1f23: 0x0040,
- 0x1f24: 0x0040, 0x1f25: 0x0040, 0x1f26: 0x0040, 0x1f27: 0x0040, 0x1f28: 0x0040, 0x1f29: 0x0040,
- 0x1f2a: 0x0040, 0x1f2b: 0x0040, 0x1f2c: 0x0040, 0x1f2d: 0x0040, 0x1f2e: 0x0040, 0x1f2f: 0x0040,
- 0x1f30: 0x0040, 0x1f31: 0x0040, 0x1f32: 0x0040, 0x1f33: 0x0040, 0x1f34: 0x0040, 0x1f35: 0x0040,
- 0x1f36: 0x0040, 0x1f37: 0x0040, 0x1f38: 0x0040, 0x1f39: 0x0040, 0x1f3a: 0x0040, 0x1f3b: 0x0040,
- 0x1f3c: 0x0040, 0x1f3d: 0x0040, 0x1f3e: 0x0040, 0x1f3f: 0x0040,
+ 0x1f00: 0xeb79, 0x1f01: 0x90dd, 0x1f02: 0x90fd, 0x1f03: 0x911d, 0x1f04: 0x913d, 0x1f05: 0xeb99,
+ 0x1f06: 0xebb9, 0x1f07: 0xebb9, 0x1f08: 0xebd9, 0x1f09: 0xebf9, 0x1f0a: 0xec19, 0x1f0b: 0xec39,
+ 0x1f0c: 0xec59, 0x1f0d: 0x915d, 0x1f0e: 0xec79, 0x1f0f: 0xec99, 0x1f10: 0xecb9, 0x1f11: 0xecd9,
+ 0x1f12: 0x917d, 0x1f13: 0xecf9, 0x1f14: 0x919d, 0x1f15: 0x91bd, 0x1f16: 0xed19, 0x1f17: 0xed39,
+ 0x1f18: 0xed59, 0x1f19: 0xed79, 0x1f1a: 0xed99, 0x1f1b: 0xedb9, 0x1f1c: 0x91dd, 0x1f1d: 0x91fd,
+ 0x1f1e: 0x921d, 0x1f1f: 0x2040, 0x1f20: 0xedd9, 0x1f21: 0x923d, 0x1f22: 0xedf9, 0x1f23: 0xee19,
+ 0x1f24: 0xee39, 0x1f25: 0x925d, 0x1f26: 0xee59, 0x1f27: 0xee79, 0x1f28: 0xee99, 0x1f29: 0xeeb9,
+ 0x1f2a: 0xeed9, 0x1f2b: 0x927d, 0x1f2c: 0xeef9, 0x1f2d: 0xef19, 0x1f2e: 0xef39, 0x1f2f: 0xef59,
+ 0x1f30: 0xef79, 0x1f31: 0xef99, 0x1f32: 0x929d, 0x1f33: 0x92bd, 0x1f34: 0xefb9, 0x1f35: 0x92dd,
+ 0x1f36: 0xefd9, 0x1f37: 0x92fd, 0x1f38: 0xeff9, 0x1f39: 0xf019, 0x1f3a: 0xf039, 0x1f3b: 0x931d,
+ 0x1f3c: 0x933d, 0x1f3d: 0xf059, 0x1f3e: 0x935d, 0x1f3f: 0xf079,
+ // Block 0x7d, offset 0x1f40
+ 0x1f40: 0xf6b9, 0x1f41: 0xf6d9, 0x1f42: 0xf6f9, 0x1f43: 0xf719, 0x1f44: 0xf739, 0x1f45: 0x951d,
+ 0x1f46: 0xf759, 0x1f47: 0xf779, 0x1f48: 0xf799, 0x1f49: 0xf7b9, 0x1f4a: 0xf7d9, 0x1f4b: 0x953d,
+ 0x1f4c: 0x955d, 0x1f4d: 0xf7f9, 0x1f4e: 0xf819, 0x1f4f: 0xf839, 0x1f50: 0xf859, 0x1f51: 0xf879,
+ 0x1f52: 0xf899, 0x1f53: 0x957d, 0x1f54: 0xf8b9, 0x1f55: 0xf8d9, 0x1f56: 0xf8f9, 0x1f57: 0xf919,
+ 0x1f58: 0x959d, 0x1f59: 0x95bd, 0x1f5a: 0xf939, 0x1f5b: 0xf959, 0x1f5c: 0xf979, 0x1f5d: 0x95dd,
+ 0x1f5e: 0xf999, 0x1f5f: 0xf9b9, 0x1f60: 0x6815, 0x1f61: 0x95fd, 0x1f62: 0xf9d9, 0x1f63: 0xf9f9,
+ 0x1f64: 0xfa19, 0x1f65: 0x961d, 0x1f66: 0xfa39, 0x1f67: 0xfa59, 0x1f68: 0xfa79, 0x1f69: 0xfa99,
+ 0x1f6a: 0xfab9, 0x1f6b: 0xfad9, 0x1f6c: 0xfaf9, 0x1f6d: 0x963d, 0x1f6e: 0xfb19, 0x1f6f: 0xfb39,
+ 0x1f70: 0xfb59, 0x1f71: 0x965d, 0x1f72: 0xfb79, 0x1f73: 0xfb99, 0x1f74: 0xfbb9, 0x1f75: 0xfbd9,
+ 0x1f76: 0x7b35, 0x1f77: 0x967d, 0x1f78: 0xfbf9, 0x1f79: 0xfc19, 0x1f7a: 0xfc39, 0x1f7b: 0x969d,
+ 0x1f7c: 0xfc59, 0x1f7d: 0x96bd, 0x1f7e: 0xfc79, 0x1f7f: 0xfc79,
+ // Block 0x7e, offset 0x1f80
+ 0x1f80: 0xfc99, 0x1f81: 0x96dd, 0x1f82: 0xfcb9, 0x1f83: 0xfcd9, 0x1f84: 0xfcf9, 0x1f85: 0xfd19,
+ 0x1f86: 0xfd39, 0x1f87: 0xfd59, 0x1f88: 0xfd79, 0x1f89: 0x96fd, 0x1f8a: 0xfd99, 0x1f8b: 0xfdb9,
+ 0x1f8c: 0xfdd9, 0x1f8d: 0xfdf9, 0x1f8e: 0xfe19, 0x1f8f: 0xfe39, 0x1f90: 0x971d, 0x1f91: 0xfe59,
+ 0x1f92: 0x973d, 0x1f93: 0x975d, 0x1f94: 0x977d, 0x1f95: 0xfe79, 0x1f96: 0xfe99, 0x1f97: 0xfeb9,
+ 0x1f98: 0xfed9, 0x1f99: 0xfef9, 0x1f9a: 0xff19, 0x1f9b: 0xff39, 0x1f9c: 0xff59, 0x1f9d: 0x979d,
+ 0x1f9e: 0x0040, 0x1f9f: 0x0040, 0x1fa0: 0x0040, 0x1fa1: 0x0040, 0x1fa2: 0x0040, 0x1fa3: 0x0040,
+ 0x1fa4: 0x0040, 0x1fa5: 0x0040, 0x1fa6: 0x0040, 0x1fa7: 0x0040, 0x1fa8: 0x0040, 0x1fa9: 0x0040,
+ 0x1faa: 0x0040, 0x1fab: 0x0040, 0x1fac: 0x0040, 0x1fad: 0x0040, 0x1fae: 0x0040, 0x1faf: 0x0040,
+ 0x1fb0: 0x0040, 0x1fb1: 0x0040, 0x1fb2: 0x0040, 0x1fb3: 0x0040, 0x1fb4: 0x0040, 0x1fb5: 0x0040,
+ 0x1fb6: 0x0040, 0x1fb7: 0x0040, 0x1fb8: 0x0040, 0x1fb9: 0x0040, 0x1fba: 0x0040, 0x1fbb: 0x0040,
+ 0x1fbc: 0x0040, 0x1fbd: 0x0040, 0x1fbe: 0x0040, 0x1fbf: 0x0040,
}
-// idnaIndex: 35 blocks, 2240 entries, 4480 bytes
+// idnaIndex: 36 blocks, 2304 entries, 4608 bytes
// Block 0 is the zero block.
-var idnaIndex = [2240]uint16{
+var idnaIndex = [2304]uint16{
// Block 0x0, offset 0x0
// Block 0x1, offset 0x40
// Block 0x2, offset 0x80
// Block 0x3, offset 0xc0
- 0xc2: 0x01, 0xc3: 0x7b, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05,
- 0xc8: 0x06, 0xc9: 0x7c, 0xca: 0x7d, 0xcb: 0x07, 0xcc: 0x7e, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a,
- 0xd0: 0x7f, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x80, 0xd6: 0x81, 0xd7: 0x82,
- 0xd8: 0x0f, 0xd9: 0x83, 0xda: 0x84, 0xdb: 0x10, 0xdc: 0x11, 0xdd: 0x85, 0xde: 0x86, 0xdf: 0x87,
+ 0xc2: 0x01, 0xc3: 0x7d, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05,
+ 0xc8: 0x06, 0xc9: 0x7e, 0xca: 0x7f, 0xcb: 0x07, 0xcc: 0x80, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a,
+ 0xd0: 0x81, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x82, 0xd6: 0x83, 0xd7: 0x84,
+ 0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x85, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x86, 0xde: 0x87, 0xdf: 0x88,
0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07,
0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c,
- 0xf0: 0x1c, 0xf1: 0x1d, 0xf2: 0x1d, 0xf3: 0x1f, 0xf4: 0x20,
+ 0xf0: 0x1d, 0xf1: 0x1e, 0xf2: 0x1e, 0xf3: 0x20, 0xf4: 0x21,
// Block 0x4, offset 0x100
- 0x120: 0x88, 0x121: 0x89, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x12, 0x126: 0x13, 0x127: 0x14,
- 0x128: 0x15, 0x129: 0x16, 0x12a: 0x17, 0x12b: 0x18, 0x12c: 0x19, 0x12d: 0x1a, 0x12e: 0x1b, 0x12f: 0x8d,
- 0x130: 0x8e, 0x131: 0x1c, 0x132: 0x1d, 0x133: 0x1e, 0x134: 0x8f, 0x135: 0x1f, 0x136: 0x90, 0x137: 0x91,
- 0x138: 0x92, 0x139: 0x93, 0x13a: 0x20, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x21, 0x13e: 0x22, 0x13f: 0x96,
+ 0x120: 0x89, 0x121: 0x13, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x14, 0x126: 0x15, 0x127: 0x16,
+ 0x128: 0x17, 0x129: 0x18, 0x12a: 0x19, 0x12b: 0x1a, 0x12c: 0x1b, 0x12d: 0x1c, 0x12e: 0x1d, 0x12f: 0x8d,
+ 0x130: 0x8e, 0x131: 0x1e, 0x132: 0x1f, 0x133: 0x20, 0x134: 0x8f, 0x135: 0x21, 0x136: 0x90, 0x137: 0x91,
+ 0x138: 0x92, 0x139: 0x93, 0x13a: 0x22, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x23, 0x13e: 0x24, 0x13f: 0x96,
// Block 0x5, offset 0x140
- 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9b, 0x147: 0x9b,
- 0x148: 0x9d, 0x149: 0x9e, 0x14a: 0x9f, 0x14b: 0xa0, 0x14c: 0xa1, 0x14d: 0xa2, 0x14e: 0xa3, 0x14f: 0xa4,
- 0x150: 0xa5, 0x151: 0x9d, 0x152: 0x9d, 0x153: 0x9d, 0x154: 0x9d, 0x155: 0x9d, 0x156: 0x9d, 0x157: 0x9d,
- 0x158: 0x9d, 0x159: 0xa6, 0x15a: 0xa7, 0x15b: 0xa8, 0x15c: 0xa9, 0x15d: 0xaa, 0x15e: 0xab, 0x15f: 0xac,
- 0x160: 0xad, 0x161: 0xae, 0x162: 0xaf, 0x163: 0xb0, 0x164: 0xb1, 0x165: 0xb2, 0x166: 0xb3, 0x167: 0xb4,
- 0x168: 0xb5, 0x169: 0xb6, 0x16a: 0xb7, 0x16b: 0xb8, 0x16c: 0xb9, 0x16d: 0xba, 0x16e: 0xbb, 0x16f: 0xbc,
- 0x170: 0xbd, 0x171: 0xbe, 0x172: 0xbf, 0x173: 0xc0, 0x174: 0x23, 0x175: 0x24, 0x176: 0x25, 0x177: 0xc1,
- 0x178: 0x26, 0x179: 0x26, 0x17a: 0x27, 0x17b: 0x26, 0x17c: 0xc2, 0x17d: 0x28, 0x17e: 0x29, 0x17f: 0x2a,
+ 0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9d, 0x147: 0x9e,
+ 0x148: 0x9f, 0x149: 0xa0, 0x14a: 0xa1, 0x14b: 0xa2, 0x14c: 0xa3, 0x14d: 0xa4, 0x14e: 0xa5, 0x14f: 0xa6,
+ 0x150: 0xa7, 0x151: 0x9f, 0x152: 0x9f, 0x153: 0x9f, 0x154: 0x9f, 0x155: 0x9f, 0x156: 0x9f, 0x157: 0x9f,
+ 0x158: 0x9f, 0x159: 0xa8, 0x15a: 0xa9, 0x15b: 0xaa, 0x15c: 0xab, 0x15d: 0xac, 0x15e: 0xad, 0x15f: 0xae,
+ 0x160: 0xaf, 0x161: 0xb0, 0x162: 0xb1, 0x163: 0xb2, 0x164: 0xb3, 0x165: 0xb4, 0x166: 0xb5, 0x167: 0xb6,
+ 0x168: 0xb7, 0x169: 0xb8, 0x16a: 0xb9, 0x16b: 0xba, 0x16c: 0xbb, 0x16d: 0xbc, 0x16e: 0xbd, 0x16f: 0xbe,
+ 0x170: 0xbf, 0x171: 0xc0, 0x172: 0xc1, 0x173: 0xc2, 0x174: 0x25, 0x175: 0x26, 0x176: 0x27, 0x177: 0xc3,
+ 0x178: 0x28, 0x179: 0x28, 0x17a: 0x29, 0x17b: 0x28, 0x17c: 0xc4, 0x17d: 0x2a, 0x17e: 0x2b, 0x17f: 0x2c,
// Block 0x6, offset 0x180
- 0x180: 0x2b, 0x181: 0x2c, 0x182: 0x2d, 0x183: 0xc3, 0x184: 0x2e, 0x185: 0x2f, 0x186: 0xc4, 0x187: 0x9b,
- 0x188: 0xc5, 0x189: 0xc6, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc7, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0xc8,
- 0x190: 0xc9, 0x191: 0x30, 0x192: 0x31, 0x193: 0x32, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b,
+ 0x180: 0x2d, 0x181: 0x2e, 0x182: 0x2f, 0x183: 0xc5, 0x184: 0x30, 0x185: 0x31, 0x186: 0xc6, 0x187: 0x9b,
+ 0x188: 0xc7, 0x189: 0xc8, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc9, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0x9b,
+ 0x190: 0xca, 0x191: 0x32, 0x192: 0x33, 0x193: 0x34, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b,
0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b,
0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b,
- 0x1a8: 0xca, 0x1a9: 0xcb, 0x1aa: 0x9b, 0x1ab: 0xcc, 0x1ac: 0x9b, 0x1ad: 0xcd, 0x1ae: 0xce, 0x1af: 0xcf,
- 0x1b0: 0xd0, 0x1b1: 0x33, 0x1b2: 0x26, 0x1b3: 0x34, 0x1b4: 0xd1, 0x1b5: 0xd2, 0x1b6: 0xd3, 0x1b7: 0xd4,
- 0x1b8: 0xd5, 0x1b9: 0xd6, 0x1ba: 0xd7, 0x1bb: 0xd8, 0x1bc: 0xd9, 0x1bd: 0xda, 0x1be: 0xdb, 0x1bf: 0x35,
+ 0x1a8: 0xcb, 0x1a9: 0xcc, 0x1aa: 0x9b, 0x1ab: 0xcd, 0x1ac: 0x9b, 0x1ad: 0xce, 0x1ae: 0xcf, 0x1af: 0xd0,
+ 0x1b0: 0xd1, 0x1b1: 0x35, 0x1b2: 0x28, 0x1b3: 0x36, 0x1b4: 0xd2, 0x1b5: 0xd3, 0x1b6: 0xd4, 0x1b7: 0xd5,
+ 0x1b8: 0xd6, 0x1b9: 0xd7, 0x1ba: 0xd8, 0x1bb: 0xd9, 0x1bc: 0xda, 0x1bd: 0xdb, 0x1be: 0xdc, 0x1bf: 0x37,
// Block 0x7, offset 0x1c0
- 0x1c0: 0x36, 0x1c1: 0xdc, 0x1c2: 0xdd, 0x1c3: 0xde, 0x1c4: 0xdf, 0x1c5: 0x37, 0x1c6: 0x38, 0x1c7: 0xe0,
- 0x1c8: 0xe1, 0x1c9: 0x39, 0x1ca: 0x3a, 0x1cb: 0x3b, 0x1cc: 0x3c, 0x1cd: 0x3d, 0x1ce: 0x3e, 0x1cf: 0x3f,
- 0x1d0: 0x9d, 0x1d1: 0x9d, 0x1d2: 0x9d, 0x1d3: 0x9d, 0x1d4: 0x9d, 0x1d5: 0x9d, 0x1d6: 0x9d, 0x1d7: 0x9d,
- 0x1d8: 0x9d, 0x1d9: 0x9d, 0x1da: 0x9d, 0x1db: 0x9d, 0x1dc: 0x9d, 0x1dd: 0x9d, 0x1de: 0x9d, 0x1df: 0x9d,
- 0x1e0: 0x9d, 0x1e1: 0x9d, 0x1e2: 0x9d, 0x1e3: 0x9d, 0x1e4: 0x9d, 0x1e5: 0x9d, 0x1e6: 0x9d, 0x1e7: 0x9d,
- 0x1e8: 0x9d, 0x1e9: 0x9d, 0x1ea: 0x9d, 0x1eb: 0x9d, 0x1ec: 0x9d, 0x1ed: 0x9d, 0x1ee: 0x9d, 0x1ef: 0x9d,
- 0x1f0: 0x9d, 0x1f1: 0x9d, 0x1f2: 0x9d, 0x1f3: 0x9d, 0x1f4: 0x9d, 0x1f5: 0x9d, 0x1f6: 0x9d, 0x1f7: 0x9d,
- 0x1f8: 0x9d, 0x1f9: 0x9d, 0x1fa: 0x9d, 0x1fb: 0x9d, 0x1fc: 0x9d, 0x1fd: 0x9d, 0x1fe: 0x9d, 0x1ff: 0x9d,
+ 0x1c0: 0x38, 0x1c1: 0xdd, 0x1c2: 0xde, 0x1c3: 0xdf, 0x1c4: 0xe0, 0x1c5: 0x39, 0x1c6: 0x3a, 0x1c7: 0xe1,
+ 0x1c8: 0xe2, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0x3e, 0x1cd: 0x3f, 0x1ce: 0x40, 0x1cf: 0x41,
+ 0x1d0: 0x9f, 0x1d1: 0x9f, 0x1d2: 0x9f, 0x1d3: 0x9f, 0x1d4: 0x9f, 0x1d5: 0x9f, 0x1d6: 0x9f, 0x1d7: 0x9f,
+ 0x1d8: 0x9f, 0x1d9: 0x9f, 0x1da: 0x9f, 0x1db: 0x9f, 0x1dc: 0x9f, 0x1dd: 0x9f, 0x1de: 0x9f, 0x1df: 0x9f,
+ 0x1e0: 0x9f, 0x1e1: 0x9f, 0x1e2: 0x9f, 0x1e3: 0x9f, 0x1e4: 0x9f, 0x1e5: 0x9f, 0x1e6: 0x9f, 0x1e7: 0x9f,
+ 0x1e8: 0x9f, 0x1e9: 0x9f, 0x1ea: 0x9f, 0x1eb: 0x9f, 0x1ec: 0x9f, 0x1ed: 0x9f, 0x1ee: 0x9f, 0x1ef: 0x9f,
+ 0x1f0: 0x9f, 0x1f1: 0x9f, 0x1f2: 0x9f, 0x1f3: 0x9f, 0x1f4: 0x9f, 0x1f5: 0x9f, 0x1f6: 0x9f, 0x1f7: 0x9f,
+ 0x1f8: 0x9f, 0x1f9: 0x9f, 0x1fa: 0x9f, 0x1fb: 0x9f, 0x1fc: 0x9f, 0x1fd: 0x9f, 0x1fe: 0x9f, 0x1ff: 0x9f,
// Block 0x8, offset 0x200
- 0x200: 0x9d, 0x201: 0x9d, 0x202: 0x9d, 0x203: 0x9d, 0x204: 0x9d, 0x205: 0x9d, 0x206: 0x9d, 0x207: 0x9d,
- 0x208: 0x9d, 0x209: 0x9d, 0x20a: 0x9d, 0x20b: 0x9d, 0x20c: 0x9d, 0x20d: 0x9d, 0x20e: 0x9d, 0x20f: 0x9d,
- 0x210: 0x9d, 0x211: 0x9d, 0x212: 0x9d, 0x213: 0x9d, 0x214: 0x9d, 0x215: 0x9d, 0x216: 0x9d, 0x217: 0x9d,
- 0x218: 0x9d, 0x219: 0x9d, 0x21a: 0x9d, 0x21b: 0x9d, 0x21c: 0x9d, 0x21d: 0x9d, 0x21e: 0x9d, 0x21f: 0x9d,
- 0x220: 0x9d, 0x221: 0x9d, 0x222: 0x9d, 0x223: 0x9d, 0x224: 0x9d, 0x225: 0x9d, 0x226: 0x9d, 0x227: 0x9d,
- 0x228: 0x9d, 0x229: 0x9d, 0x22a: 0x9d, 0x22b: 0x9d, 0x22c: 0x9d, 0x22d: 0x9d, 0x22e: 0x9d, 0x22f: 0x9d,
- 0x230: 0x9d, 0x231: 0x9d, 0x232: 0x9d, 0x233: 0x9d, 0x234: 0x9d, 0x235: 0x9d, 0x236: 0xb0, 0x237: 0x9b,
- 0x238: 0x9d, 0x239: 0x9d, 0x23a: 0x9d, 0x23b: 0x9d, 0x23c: 0x9d, 0x23d: 0x9d, 0x23e: 0x9d, 0x23f: 0x9d,
+ 0x200: 0x9f, 0x201: 0x9f, 0x202: 0x9f, 0x203: 0x9f, 0x204: 0x9f, 0x205: 0x9f, 0x206: 0x9f, 0x207: 0x9f,
+ 0x208: 0x9f, 0x209: 0x9f, 0x20a: 0x9f, 0x20b: 0x9f, 0x20c: 0x9f, 0x20d: 0x9f, 0x20e: 0x9f, 0x20f: 0x9f,
+ 0x210: 0x9f, 0x211: 0x9f, 0x212: 0x9f, 0x213: 0x9f, 0x214: 0x9f, 0x215: 0x9f, 0x216: 0x9f, 0x217: 0x9f,
+ 0x218: 0x9f, 0x219: 0x9f, 0x21a: 0x9f, 0x21b: 0x9f, 0x21c: 0x9f, 0x21d: 0x9f, 0x21e: 0x9f, 0x21f: 0x9f,
+ 0x220: 0x9f, 0x221: 0x9f, 0x222: 0x9f, 0x223: 0x9f, 0x224: 0x9f, 0x225: 0x9f, 0x226: 0x9f, 0x227: 0x9f,
+ 0x228: 0x9f, 0x229: 0x9f, 0x22a: 0x9f, 0x22b: 0x9f, 0x22c: 0x9f, 0x22d: 0x9f, 0x22e: 0x9f, 0x22f: 0x9f,
+ 0x230: 0x9f, 0x231: 0x9f, 0x232: 0x9f, 0x233: 0x9f, 0x234: 0x9f, 0x235: 0x9f, 0x236: 0xb2, 0x237: 0x9b,
+ 0x238: 0x9f, 0x239: 0x9f, 0x23a: 0x9f, 0x23b: 0x9f, 0x23c: 0x9f, 0x23d: 0x9f, 0x23e: 0x9f, 0x23f: 0x9f,
// Block 0x9, offset 0x240
- 0x240: 0x9d, 0x241: 0x9d, 0x242: 0x9d, 0x243: 0x9d, 0x244: 0x9d, 0x245: 0x9d, 0x246: 0x9d, 0x247: 0x9d,
- 0x248: 0x9d, 0x249: 0x9d, 0x24a: 0x9d, 0x24b: 0x9d, 0x24c: 0x9d, 0x24d: 0x9d, 0x24e: 0x9d, 0x24f: 0x9d,
- 0x250: 0x9d, 0x251: 0x9d, 0x252: 0x9d, 0x253: 0x9d, 0x254: 0x9d, 0x255: 0x9d, 0x256: 0x9d, 0x257: 0x9d,
- 0x258: 0x9d, 0x259: 0x9d, 0x25a: 0x9d, 0x25b: 0x9d, 0x25c: 0x9d, 0x25d: 0x9d, 0x25e: 0x9d, 0x25f: 0x9d,
- 0x260: 0x9d, 0x261: 0x9d, 0x262: 0x9d, 0x263: 0x9d, 0x264: 0x9d, 0x265: 0x9d, 0x266: 0x9d, 0x267: 0x9d,
- 0x268: 0x9d, 0x269: 0x9d, 0x26a: 0x9d, 0x26b: 0x9d, 0x26c: 0x9d, 0x26d: 0x9d, 0x26e: 0x9d, 0x26f: 0x9d,
- 0x270: 0x9d, 0x271: 0x9d, 0x272: 0x9d, 0x273: 0x9d, 0x274: 0x9d, 0x275: 0x9d, 0x276: 0x9d, 0x277: 0x9d,
- 0x278: 0x9d, 0x279: 0x9d, 0x27a: 0x9d, 0x27b: 0x9d, 0x27c: 0x9d, 0x27d: 0x9d, 0x27e: 0x9d, 0x27f: 0x9d,
+ 0x240: 0x9f, 0x241: 0x9f, 0x242: 0x9f, 0x243: 0x9f, 0x244: 0x9f, 0x245: 0x9f, 0x246: 0x9f, 0x247: 0x9f,
+ 0x248: 0x9f, 0x249: 0x9f, 0x24a: 0x9f, 0x24b: 0x9f, 0x24c: 0x9f, 0x24d: 0x9f, 0x24e: 0x9f, 0x24f: 0x9f,
+ 0x250: 0x9f, 0x251: 0x9f, 0x252: 0x9f, 0x253: 0x9f, 0x254: 0x9f, 0x255: 0x9f, 0x256: 0x9f, 0x257: 0x9f,
+ 0x258: 0x9f, 0x259: 0x9f, 0x25a: 0x9f, 0x25b: 0x9f, 0x25c: 0x9f, 0x25d: 0x9f, 0x25e: 0x9f, 0x25f: 0x9f,
+ 0x260: 0x9f, 0x261: 0x9f, 0x262: 0x9f, 0x263: 0x9f, 0x264: 0x9f, 0x265: 0x9f, 0x266: 0x9f, 0x267: 0x9f,
+ 0x268: 0x9f, 0x269: 0x9f, 0x26a: 0x9f, 0x26b: 0x9f, 0x26c: 0x9f, 0x26d: 0x9f, 0x26e: 0x9f, 0x26f: 0x9f,
+ 0x270: 0x9f, 0x271: 0x9f, 0x272: 0x9f, 0x273: 0x9f, 0x274: 0x9f, 0x275: 0x9f, 0x276: 0x9f, 0x277: 0x9f,
+ 0x278: 0x9f, 0x279: 0x9f, 0x27a: 0x9f, 0x27b: 0x9f, 0x27c: 0x9f, 0x27d: 0x9f, 0x27e: 0x9f, 0x27f: 0x9f,
// Block 0xa, offset 0x280
- 0x280: 0x9d, 0x281: 0x9d, 0x282: 0x9d, 0x283: 0x9d, 0x284: 0x9d, 0x285: 0x9d, 0x286: 0x9d, 0x287: 0x9d,
- 0x288: 0x9d, 0x289: 0x9d, 0x28a: 0x9d, 0x28b: 0x9d, 0x28c: 0x9d, 0x28d: 0x9d, 0x28e: 0x9d, 0x28f: 0x9d,
- 0x290: 0x9d, 0x291: 0x9d, 0x292: 0x9d, 0x293: 0x9d, 0x294: 0x9d, 0x295: 0x9d, 0x296: 0x9d, 0x297: 0x9d,
- 0x298: 0x9d, 0x299: 0x9d, 0x29a: 0x9d, 0x29b: 0x9d, 0x29c: 0x9d, 0x29d: 0x9d, 0x29e: 0x9d, 0x29f: 0x9d,
- 0x2a0: 0x9d, 0x2a1: 0x9d, 0x2a2: 0x9d, 0x2a3: 0x9d, 0x2a4: 0x9d, 0x2a5: 0x9d, 0x2a6: 0x9d, 0x2a7: 0x9d,
- 0x2a8: 0x9d, 0x2a9: 0x9d, 0x2aa: 0x9d, 0x2ab: 0x9d, 0x2ac: 0x9d, 0x2ad: 0x9d, 0x2ae: 0x9d, 0x2af: 0x9d,
- 0x2b0: 0x9d, 0x2b1: 0x9d, 0x2b2: 0x9d, 0x2b3: 0x9d, 0x2b4: 0x9d, 0x2b5: 0x9d, 0x2b6: 0x9d, 0x2b7: 0x9d,
- 0x2b8: 0x9d, 0x2b9: 0x9d, 0x2ba: 0x9d, 0x2bb: 0x9d, 0x2bc: 0x9d, 0x2bd: 0x9d, 0x2be: 0x9d, 0x2bf: 0xe2,
+ 0x280: 0x9f, 0x281: 0x9f, 0x282: 0x9f, 0x283: 0x9f, 0x284: 0x9f, 0x285: 0x9f, 0x286: 0x9f, 0x287: 0x9f,
+ 0x288: 0x9f, 0x289: 0x9f, 0x28a: 0x9f, 0x28b: 0x9f, 0x28c: 0x9f, 0x28d: 0x9f, 0x28e: 0x9f, 0x28f: 0x9f,
+ 0x290: 0x9f, 0x291: 0x9f, 0x292: 0x9f, 0x293: 0x9f, 0x294: 0x9f, 0x295: 0x9f, 0x296: 0x9f, 0x297: 0x9f,
+ 0x298: 0x9f, 0x299: 0x9f, 0x29a: 0x9f, 0x29b: 0x9f, 0x29c: 0x9f, 0x29d: 0x9f, 0x29e: 0x9f, 0x29f: 0x9f,
+ 0x2a0: 0x9f, 0x2a1: 0x9f, 0x2a2: 0x9f, 0x2a3: 0x9f, 0x2a4: 0x9f, 0x2a5: 0x9f, 0x2a6: 0x9f, 0x2a7: 0x9f,
+ 0x2a8: 0x9f, 0x2a9: 0x9f, 0x2aa: 0x9f, 0x2ab: 0x9f, 0x2ac: 0x9f, 0x2ad: 0x9f, 0x2ae: 0x9f, 0x2af: 0x9f,
+ 0x2b0: 0x9f, 0x2b1: 0x9f, 0x2b2: 0x9f, 0x2b3: 0x9f, 0x2b4: 0x9f, 0x2b5: 0x9f, 0x2b6: 0x9f, 0x2b7: 0x9f,
+ 0x2b8: 0x9f, 0x2b9: 0x9f, 0x2ba: 0x9f, 0x2bb: 0x9f, 0x2bc: 0x9f, 0x2bd: 0x9f, 0x2be: 0x9f, 0x2bf: 0xe3,
// Block 0xb, offset 0x2c0
- 0x2c0: 0x9d, 0x2c1: 0x9d, 0x2c2: 0x9d, 0x2c3: 0x9d, 0x2c4: 0x9d, 0x2c5: 0x9d, 0x2c6: 0x9d, 0x2c7: 0x9d,
- 0x2c8: 0x9d, 0x2c9: 0x9d, 0x2ca: 0x9d, 0x2cb: 0x9d, 0x2cc: 0x9d, 0x2cd: 0x9d, 0x2ce: 0x9d, 0x2cf: 0x9d,
- 0x2d0: 0x9d, 0x2d1: 0x9d, 0x2d2: 0xe3, 0x2d3: 0xe4, 0x2d4: 0x9d, 0x2d5: 0x9d, 0x2d6: 0x9d, 0x2d7: 0x9d,
- 0x2d8: 0xe5, 0x2d9: 0x40, 0x2da: 0x41, 0x2db: 0xe6, 0x2dc: 0x42, 0x2dd: 0x43, 0x2de: 0x44, 0x2df: 0xe7,
- 0x2e0: 0xe8, 0x2e1: 0xe9, 0x2e2: 0xea, 0x2e3: 0xeb, 0x2e4: 0xec, 0x2e5: 0xed, 0x2e6: 0xee, 0x2e7: 0xef,
- 0x2e8: 0xf0, 0x2e9: 0xf1, 0x2ea: 0xf2, 0x2eb: 0xf3, 0x2ec: 0xf4, 0x2ed: 0xf5, 0x2ee: 0xf6, 0x2ef: 0xf7,
- 0x2f0: 0x9d, 0x2f1: 0x9d, 0x2f2: 0x9d, 0x2f3: 0x9d, 0x2f4: 0x9d, 0x2f5: 0x9d, 0x2f6: 0x9d, 0x2f7: 0x9d,
- 0x2f8: 0x9d, 0x2f9: 0x9d, 0x2fa: 0x9d, 0x2fb: 0x9d, 0x2fc: 0x9d, 0x2fd: 0x9d, 0x2fe: 0x9d, 0x2ff: 0x9d,
+ 0x2c0: 0x9f, 0x2c1: 0x9f, 0x2c2: 0x9f, 0x2c3: 0x9f, 0x2c4: 0x9f, 0x2c5: 0x9f, 0x2c6: 0x9f, 0x2c7: 0x9f,
+ 0x2c8: 0x9f, 0x2c9: 0x9f, 0x2ca: 0x9f, 0x2cb: 0x9f, 0x2cc: 0x9f, 0x2cd: 0x9f, 0x2ce: 0x9f, 0x2cf: 0x9f,
+ 0x2d0: 0x9f, 0x2d1: 0x9f, 0x2d2: 0xe4, 0x2d3: 0xe5, 0x2d4: 0x9f, 0x2d5: 0x9f, 0x2d6: 0x9f, 0x2d7: 0x9f,
+ 0x2d8: 0xe6, 0x2d9: 0x42, 0x2da: 0x43, 0x2db: 0xe7, 0x2dc: 0x44, 0x2dd: 0x45, 0x2de: 0x46, 0x2df: 0xe8,
+ 0x2e0: 0xe9, 0x2e1: 0xea, 0x2e2: 0xeb, 0x2e3: 0xec, 0x2e4: 0xed, 0x2e5: 0xee, 0x2e6: 0xef, 0x2e7: 0xf0,
+ 0x2e8: 0xf1, 0x2e9: 0xf2, 0x2ea: 0xf3, 0x2eb: 0xf4, 0x2ec: 0xf5, 0x2ed: 0xf6, 0x2ee: 0xf7, 0x2ef: 0xf8,
+ 0x2f0: 0x9f, 0x2f1: 0x9f, 0x2f2: 0x9f, 0x2f3: 0x9f, 0x2f4: 0x9f, 0x2f5: 0x9f, 0x2f6: 0x9f, 0x2f7: 0x9f,
+ 0x2f8: 0x9f, 0x2f9: 0x9f, 0x2fa: 0x9f, 0x2fb: 0x9f, 0x2fc: 0x9f, 0x2fd: 0x9f, 0x2fe: 0x9f, 0x2ff: 0x9f,
// Block 0xc, offset 0x300
- 0x300: 0x9d, 0x301: 0x9d, 0x302: 0x9d, 0x303: 0x9d, 0x304: 0x9d, 0x305: 0x9d, 0x306: 0x9d, 0x307: 0x9d,
- 0x308: 0x9d, 0x309: 0x9d, 0x30a: 0x9d, 0x30b: 0x9d, 0x30c: 0x9d, 0x30d: 0x9d, 0x30e: 0x9d, 0x30f: 0x9d,
- 0x310: 0x9d, 0x311: 0x9d, 0x312: 0x9d, 0x313: 0x9d, 0x314: 0x9d, 0x315: 0x9d, 0x316: 0x9d, 0x317: 0x9d,
- 0x318: 0x9d, 0x319: 0x9d, 0x31a: 0x9d, 0x31b: 0x9d, 0x31c: 0x9d, 0x31d: 0x9d, 0x31e: 0xf8, 0x31f: 0xf9,
+ 0x300: 0x9f, 0x301: 0x9f, 0x302: 0x9f, 0x303: 0x9f, 0x304: 0x9f, 0x305: 0x9f, 0x306: 0x9f, 0x307: 0x9f,
+ 0x308: 0x9f, 0x309: 0x9f, 0x30a: 0x9f, 0x30b: 0x9f, 0x30c: 0x9f, 0x30d: 0x9f, 0x30e: 0x9f, 0x30f: 0x9f,
+ 0x310: 0x9f, 0x311: 0x9f, 0x312: 0x9f, 0x313: 0x9f, 0x314: 0x9f, 0x315: 0x9f, 0x316: 0x9f, 0x317: 0x9f,
+ 0x318: 0x9f, 0x319: 0x9f, 0x31a: 0x9f, 0x31b: 0x9f, 0x31c: 0x9f, 0x31d: 0x9f, 0x31e: 0xf9, 0x31f: 0xfa,
// Block 0xd, offset 0x340
- 0x340: 0xb8, 0x341: 0xb8, 0x342: 0xb8, 0x343: 0xb8, 0x344: 0xb8, 0x345: 0xb8, 0x346: 0xb8, 0x347: 0xb8,
- 0x348: 0xb8, 0x349: 0xb8, 0x34a: 0xb8, 0x34b: 0xb8, 0x34c: 0xb8, 0x34d: 0xb8, 0x34e: 0xb8, 0x34f: 0xb8,
- 0x350: 0xb8, 0x351: 0xb8, 0x352: 0xb8, 0x353: 0xb8, 0x354: 0xb8, 0x355: 0xb8, 0x356: 0xb8, 0x357: 0xb8,
- 0x358: 0xb8, 0x359: 0xb8, 0x35a: 0xb8, 0x35b: 0xb8, 0x35c: 0xb8, 0x35d: 0xb8, 0x35e: 0xb8, 0x35f: 0xb8,
- 0x360: 0xb8, 0x361: 0xb8, 0x362: 0xb8, 0x363: 0xb8, 0x364: 0xb8, 0x365: 0xb8, 0x366: 0xb8, 0x367: 0xb8,
- 0x368: 0xb8, 0x369: 0xb8, 0x36a: 0xb8, 0x36b: 0xb8, 0x36c: 0xb8, 0x36d: 0xb8, 0x36e: 0xb8, 0x36f: 0xb8,
- 0x370: 0xb8, 0x371: 0xb8, 0x372: 0xb8, 0x373: 0xb8, 0x374: 0xb8, 0x375: 0xb8, 0x376: 0xb8, 0x377: 0xb8,
- 0x378: 0xb8, 0x379: 0xb8, 0x37a: 0xb8, 0x37b: 0xb8, 0x37c: 0xb8, 0x37d: 0xb8, 0x37e: 0xb8, 0x37f: 0xb8,
+ 0x340: 0xba, 0x341: 0xba, 0x342: 0xba, 0x343: 0xba, 0x344: 0xba, 0x345: 0xba, 0x346: 0xba, 0x347: 0xba,
+ 0x348: 0xba, 0x349: 0xba, 0x34a: 0xba, 0x34b: 0xba, 0x34c: 0xba, 0x34d: 0xba, 0x34e: 0xba, 0x34f: 0xba,
+ 0x350: 0xba, 0x351: 0xba, 0x352: 0xba, 0x353: 0xba, 0x354: 0xba, 0x355: 0xba, 0x356: 0xba, 0x357: 0xba,
+ 0x358: 0xba, 0x359: 0xba, 0x35a: 0xba, 0x35b: 0xba, 0x35c: 0xba, 0x35d: 0xba, 0x35e: 0xba, 0x35f: 0xba,
+ 0x360: 0xba, 0x361: 0xba, 0x362: 0xba, 0x363: 0xba, 0x364: 0xba, 0x365: 0xba, 0x366: 0xba, 0x367: 0xba,
+ 0x368: 0xba, 0x369: 0xba, 0x36a: 0xba, 0x36b: 0xba, 0x36c: 0xba, 0x36d: 0xba, 0x36e: 0xba, 0x36f: 0xba,
+ 0x370: 0xba, 0x371: 0xba, 0x372: 0xba, 0x373: 0xba, 0x374: 0xba, 0x375: 0xba, 0x376: 0xba, 0x377: 0xba,
+ 0x378: 0xba, 0x379: 0xba, 0x37a: 0xba, 0x37b: 0xba, 0x37c: 0xba, 0x37d: 0xba, 0x37e: 0xba, 0x37f: 0xba,
// Block 0xe, offset 0x380
- 0x380: 0xb8, 0x381: 0xb8, 0x382: 0xb8, 0x383: 0xb8, 0x384: 0xb8, 0x385: 0xb8, 0x386: 0xb8, 0x387: 0xb8,
- 0x388: 0xb8, 0x389: 0xb8, 0x38a: 0xb8, 0x38b: 0xb8, 0x38c: 0xb8, 0x38d: 0xb8, 0x38e: 0xb8, 0x38f: 0xb8,
- 0x390: 0xb8, 0x391: 0xb8, 0x392: 0xb8, 0x393: 0xb8, 0x394: 0xb8, 0x395: 0xb8, 0x396: 0xb8, 0x397: 0xb8,
- 0x398: 0xb8, 0x399: 0xb8, 0x39a: 0xb8, 0x39b: 0xb8, 0x39c: 0xb8, 0x39d: 0xb8, 0x39e: 0xb8, 0x39f: 0xb8,
- 0x3a0: 0xb8, 0x3a1: 0xb8, 0x3a2: 0xb8, 0x3a3: 0xb8, 0x3a4: 0xfa, 0x3a5: 0xfb, 0x3a6: 0xfc, 0x3a7: 0xfd,
- 0x3a8: 0x45, 0x3a9: 0xfe, 0x3aa: 0xff, 0x3ab: 0x46, 0x3ac: 0x47, 0x3ad: 0x48, 0x3ae: 0x49, 0x3af: 0x4a,
- 0x3b0: 0x100, 0x3b1: 0x4b, 0x3b2: 0x4c, 0x3b3: 0x4d, 0x3b4: 0x4e, 0x3b5: 0x4f, 0x3b6: 0x101, 0x3b7: 0x50,
- 0x3b8: 0x51, 0x3b9: 0x52, 0x3ba: 0x53, 0x3bb: 0x54, 0x3bc: 0x55, 0x3bd: 0x56, 0x3be: 0x57, 0x3bf: 0x58,
+ 0x380: 0xba, 0x381: 0xba, 0x382: 0xba, 0x383: 0xba, 0x384: 0xba, 0x385: 0xba, 0x386: 0xba, 0x387: 0xba,
+ 0x388: 0xba, 0x389: 0xba, 0x38a: 0xba, 0x38b: 0xba, 0x38c: 0xba, 0x38d: 0xba, 0x38e: 0xba, 0x38f: 0xba,
+ 0x390: 0xba, 0x391: 0xba, 0x392: 0xba, 0x393: 0xba, 0x394: 0xba, 0x395: 0xba, 0x396: 0xba, 0x397: 0xba,
+ 0x398: 0xba, 0x399: 0xba, 0x39a: 0xba, 0x39b: 0xba, 0x39c: 0xba, 0x39d: 0xba, 0x39e: 0xba, 0x39f: 0xba,
+ 0x3a0: 0xba, 0x3a1: 0xba, 0x3a2: 0xba, 0x3a3: 0xba, 0x3a4: 0xfb, 0x3a5: 0xfc, 0x3a6: 0xfd, 0x3a7: 0xfe,
+ 0x3a8: 0x47, 0x3a9: 0xff, 0x3aa: 0x100, 0x3ab: 0x48, 0x3ac: 0x49, 0x3ad: 0x4a, 0x3ae: 0x4b, 0x3af: 0x4c,
+ 0x3b0: 0x101, 0x3b1: 0x4d, 0x3b2: 0x4e, 0x3b3: 0x4f, 0x3b4: 0x50, 0x3b5: 0x51, 0x3b6: 0x102, 0x3b7: 0x52,
+ 0x3b8: 0x53, 0x3b9: 0x54, 0x3ba: 0x55, 0x3bb: 0x56, 0x3bc: 0x57, 0x3bd: 0x58, 0x3be: 0x59, 0x3bf: 0x5a,
// Block 0xf, offset 0x3c0
- 0x3c0: 0x102, 0x3c1: 0x103, 0x3c2: 0x9d, 0x3c3: 0x104, 0x3c4: 0x105, 0x3c5: 0x9b, 0x3c6: 0x106, 0x3c7: 0x107,
- 0x3c8: 0xb8, 0x3c9: 0xb8, 0x3ca: 0x108, 0x3cb: 0x109, 0x3cc: 0x10a, 0x3cd: 0x10b, 0x3ce: 0x10c, 0x3cf: 0x10d,
- 0x3d0: 0x10e, 0x3d1: 0x9d, 0x3d2: 0x10f, 0x3d3: 0x110, 0x3d4: 0x111, 0x3d5: 0x112, 0x3d6: 0xb8, 0x3d7: 0xb8,
- 0x3d8: 0x9d, 0x3d9: 0x9d, 0x3da: 0x9d, 0x3db: 0x9d, 0x3dc: 0x113, 0x3dd: 0x114, 0x3de: 0xb8, 0x3df: 0xb8,
- 0x3e0: 0x115, 0x3e1: 0x116, 0x3e2: 0x117, 0x3e3: 0x118, 0x3e4: 0x119, 0x3e5: 0xb8, 0x3e6: 0x11a, 0x3e7: 0x11b,
- 0x3e8: 0x11c, 0x3e9: 0x11d, 0x3ea: 0x11e, 0x3eb: 0x59, 0x3ec: 0x11f, 0x3ed: 0x120, 0x3ee: 0x5a, 0x3ef: 0xb8,
- 0x3f0: 0x9d, 0x3f1: 0x121, 0x3f2: 0x122, 0x3f3: 0x123, 0x3f4: 0xb8, 0x3f5: 0xb8, 0x3f6: 0xb8, 0x3f7: 0xb8,
- 0x3f8: 0xb8, 0x3f9: 0x124, 0x3fa: 0xb8, 0x3fb: 0xb8, 0x3fc: 0xb8, 0x3fd: 0xb8, 0x3fe: 0xb8, 0x3ff: 0xb8,
+ 0x3c0: 0x103, 0x3c1: 0x104, 0x3c2: 0x9f, 0x3c3: 0x105, 0x3c4: 0x106, 0x3c5: 0x9b, 0x3c6: 0x107, 0x3c7: 0x108,
+ 0x3c8: 0xba, 0x3c9: 0xba, 0x3ca: 0x109, 0x3cb: 0x10a, 0x3cc: 0x10b, 0x3cd: 0x10c, 0x3ce: 0x10d, 0x3cf: 0x10e,
+ 0x3d0: 0x10f, 0x3d1: 0x9f, 0x3d2: 0x110, 0x3d3: 0x111, 0x3d4: 0x112, 0x3d5: 0x113, 0x3d6: 0xba, 0x3d7: 0xba,
+ 0x3d8: 0x9f, 0x3d9: 0x9f, 0x3da: 0x9f, 0x3db: 0x9f, 0x3dc: 0x114, 0x3dd: 0x115, 0x3de: 0xba, 0x3df: 0xba,
+ 0x3e0: 0x116, 0x3e1: 0x117, 0x3e2: 0x118, 0x3e3: 0x119, 0x3e4: 0x11a, 0x3e5: 0xba, 0x3e6: 0x11b, 0x3e7: 0x11c,
+ 0x3e8: 0x11d, 0x3e9: 0x11e, 0x3ea: 0x11f, 0x3eb: 0x5b, 0x3ec: 0x120, 0x3ed: 0x121, 0x3ee: 0x5c, 0x3ef: 0xba,
+ 0x3f0: 0x122, 0x3f1: 0x123, 0x3f2: 0x124, 0x3f3: 0x125, 0x3f4: 0xba, 0x3f5: 0xba, 0x3f6: 0xba, 0x3f7: 0xba,
+ 0x3f8: 0xba, 0x3f9: 0x126, 0x3fa: 0xba, 0x3fb: 0xba, 0x3fc: 0xba, 0x3fd: 0xba, 0x3fe: 0xba, 0x3ff: 0xba,
// Block 0x10, offset 0x400
- 0x400: 0x125, 0x401: 0x126, 0x402: 0x127, 0x403: 0x128, 0x404: 0x129, 0x405: 0x12a, 0x406: 0x12b, 0x407: 0x12c,
- 0x408: 0x12d, 0x409: 0xb8, 0x40a: 0x12e, 0x40b: 0x12f, 0x40c: 0x5b, 0x40d: 0x5c, 0x40e: 0xb8, 0x40f: 0xb8,
- 0x410: 0x130, 0x411: 0x131, 0x412: 0x132, 0x413: 0x133, 0x414: 0xb8, 0x415: 0xb8, 0x416: 0x134, 0x417: 0x135,
- 0x418: 0x136, 0x419: 0x137, 0x41a: 0x138, 0x41b: 0x139, 0x41c: 0x13a, 0x41d: 0xb8, 0x41e: 0xb8, 0x41f: 0xb8,
- 0x420: 0xb8, 0x421: 0xb8, 0x422: 0x13b, 0x423: 0x13c, 0x424: 0xb8, 0x425: 0xb8, 0x426: 0xb8, 0x427: 0xb8,
- 0x428: 0xb8, 0x429: 0xb8, 0x42a: 0xb8, 0x42b: 0x13d, 0x42c: 0xb8, 0x42d: 0xb8, 0x42e: 0xb8, 0x42f: 0xb8,
- 0x430: 0x13e, 0x431: 0x13f, 0x432: 0x140, 0x433: 0xb8, 0x434: 0xb8, 0x435: 0xb8, 0x436: 0xb8, 0x437: 0xb8,
- 0x438: 0xb8, 0x439: 0xb8, 0x43a: 0xb8, 0x43b: 0xb8, 0x43c: 0xb8, 0x43d: 0xb8, 0x43e: 0xb8, 0x43f: 0xb8,
+ 0x400: 0x127, 0x401: 0x128, 0x402: 0x129, 0x403: 0x12a, 0x404: 0x12b, 0x405: 0x12c, 0x406: 0x12d, 0x407: 0x12e,
+ 0x408: 0x12f, 0x409: 0xba, 0x40a: 0x130, 0x40b: 0x131, 0x40c: 0x5d, 0x40d: 0x5e, 0x40e: 0xba, 0x40f: 0xba,
+ 0x410: 0x132, 0x411: 0x133, 0x412: 0x134, 0x413: 0x135, 0x414: 0xba, 0x415: 0xba, 0x416: 0x136, 0x417: 0x137,
+ 0x418: 0x138, 0x419: 0x139, 0x41a: 0x13a, 0x41b: 0x13b, 0x41c: 0x13c, 0x41d: 0xba, 0x41e: 0xba, 0x41f: 0xba,
+ 0x420: 0xba, 0x421: 0xba, 0x422: 0x13d, 0x423: 0x13e, 0x424: 0xba, 0x425: 0xba, 0x426: 0xba, 0x427: 0xba,
+ 0x428: 0x13f, 0x429: 0x140, 0x42a: 0x141, 0x42b: 0x142, 0x42c: 0xba, 0x42d: 0xba, 0x42e: 0xba, 0x42f: 0xba,
+ 0x430: 0x143, 0x431: 0x144, 0x432: 0x145, 0x433: 0xba, 0x434: 0x146, 0x435: 0x147, 0x436: 0xba, 0x437: 0xba,
+ 0x438: 0xba, 0x439: 0xba, 0x43a: 0xba, 0x43b: 0xba, 0x43c: 0xba, 0x43d: 0xba, 0x43e: 0xba, 0x43f: 0xba,
// Block 0x11, offset 0x440
- 0x440: 0x9d, 0x441: 0x9d, 0x442: 0x9d, 0x443: 0x9d, 0x444: 0x9d, 0x445: 0x9d, 0x446: 0x9d, 0x447: 0x9d,
- 0x448: 0x9d, 0x449: 0x9d, 0x44a: 0x9d, 0x44b: 0x9d, 0x44c: 0x9d, 0x44d: 0x9d, 0x44e: 0x141, 0x44f: 0xb8,
- 0x450: 0x9b, 0x451: 0x142, 0x452: 0x9d, 0x453: 0x9d, 0x454: 0x9d, 0x455: 0x143, 0x456: 0xb8, 0x457: 0xb8,
- 0x458: 0xb8, 0x459: 0xb8, 0x45a: 0xb8, 0x45b: 0xb8, 0x45c: 0xb8, 0x45d: 0xb8, 0x45e: 0xb8, 0x45f: 0xb8,
- 0x460: 0xb8, 0x461: 0xb8, 0x462: 0xb8, 0x463: 0xb8, 0x464: 0xb8, 0x465: 0xb8, 0x466: 0xb8, 0x467: 0xb8,
- 0x468: 0xb8, 0x469: 0xb8, 0x46a: 0xb8, 0x46b: 0xb8, 0x46c: 0xb8, 0x46d: 0xb8, 0x46e: 0xb8, 0x46f: 0xb8,
- 0x470: 0xb8, 0x471: 0xb8, 0x472: 0xb8, 0x473: 0xb8, 0x474: 0xb8, 0x475: 0xb8, 0x476: 0xb8, 0x477: 0xb8,
- 0x478: 0xb8, 0x479: 0xb8, 0x47a: 0xb8, 0x47b: 0xb8, 0x47c: 0xb8, 0x47d: 0xb8, 0x47e: 0xb8, 0x47f: 0xb8,
+ 0x440: 0x9f, 0x441: 0x9f, 0x442: 0x9f, 0x443: 0x9f, 0x444: 0x9f, 0x445: 0x9f, 0x446: 0x9f, 0x447: 0x9f,
+ 0x448: 0x9f, 0x449: 0x9f, 0x44a: 0x9f, 0x44b: 0x9f, 0x44c: 0x9f, 0x44d: 0x9f, 0x44e: 0x148, 0x44f: 0xba,
+ 0x450: 0x9b, 0x451: 0x149, 0x452: 0x9f, 0x453: 0x9f, 0x454: 0x9f, 0x455: 0x14a, 0x456: 0xba, 0x457: 0xba,
+ 0x458: 0xba, 0x459: 0xba, 0x45a: 0xba, 0x45b: 0xba, 0x45c: 0xba, 0x45d: 0xba, 0x45e: 0xba, 0x45f: 0xba,
+ 0x460: 0xba, 0x461: 0xba, 0x462: 0xba, 0x463: 0xba, 0x464: 0xba, 0x465: 0xba, 0x466: 0xba, 0x467: 0xba,
+ 0x468: 0xba, 0x469: 0xba, 0x46a: 0xba, 0x46b: 0xba, 0x46c: 0xba, 0x46d: 0xba, 0x46e: 0xba, 0x46f: 0xba,
+ 0x470: 0xba, 0x471: 0xba, 0x472: 0xba, 0x473: 0xba, 0x474: 0xba, 0x475: 0xba, 0x476: 0xba, 0x477: 0xba,
+ 0x478: 0xba, 0x479: 0xba, 0x47a: 0xba, 0x47b: 0xba, 0x47c: 0xba, 0x47d: 0xba, 0x47e: 0xba, 0x47f: 0xba,
// Block 0x12, offset 0x480
- 0x480: 0x9d, 0x481: 0x9d, 0x482: 0x9d, 0x483: 0x9d, 0x484: 0x9d, 0x485: 0x9d, 0x486: 0x9d, 0x487: 0x9d,
- 0x488: 0x9d, 0x489: 0x9d, 0x48a: 0x9d, 0x48b: 0x9d, 0x48c: 0x9d, 0x48d: 0x9d, 0x48e: 0x9d, 0x48f: 0x9d,
- 0x490: 0x144, 0x491: 0xb8, 0x492: 0xb8, 0x493: 0xb8, 0x494: 0xb8, 0x495: 0xb8, 0x496: 0xb8, 0x497: 0xb8,
- 0x498: 0xb8, 0x499: 0xb8, 0x49a: 0xb8, 0x49b: 0xb8, 0x49c: 0xb8, 0x49d: 0xb8, 0x49e: 0xb8, 0x49f: 0xb8,
- 0x4a0: 0xb8, 0x4a1: 0xb8, 0x4a2: 0xb8, 0x4a3: 0xb8, 0x4a4: 0xb8, 0x4a5: 0xb8, 0x4a6: 0xb8, 0x4a7: 0xb8,
- 0x4a8: 0xb8, 0x4a9: 0xb8, 0x4aa: 0xb8, 0x4ab: 0xb8, 0x4ac: 0xb8, 0x4ad: 0xb8, 0x4ae: 0xb8, 0x4af: 0xb8,
- 0x4b0: 0xb8, 0x4b1: 0xb8, 0x4b2: 0xb8, 0x4b3: 0xb8, 0x4b4: 0xb8, 0x4b5: 0xb8, 0x4b6: 0xb8, 0x4b7: 0xb8,
- 0x4b8: 0xb8, 0x4b9: 0xb8, 0x4ba: 0xb8, 0x4bb: 0xb8, 0x4bc: 0xb8, 0x4bd: 0xb8, 0x4be: 0xb8, 0x4bf: 0xb8,
+ 0x480: 0x9f, 0x481: 0x9f, 0x482: 0x9f, 0x483: 0x9f, 0x484: 0x9f, 0x485: 0x9f, 0x486: 0x9f, 0x487: 0x9f,
+ 0x488: 0x9f, 0x489: 0x9f, 0x48a: 0x9f, 0x48b: 0x9f, 0x48c: 0x9f, 0x48d: 0x9f, 0x48e: 0x9f, 0x48f: 0x9f,
+ 0x490: 0x14b, 0x491: 0xba, 0x492: 0xba, 0x493: 0xba, 0x494: 0xba, 0x495: 0xba, 0x496: 0xba, 0x497: 0xba,
+ 0x498: 0xba, 0x499: 0xba, 0x49a: 0xba, 0x49b: 0xba, 0x49c: 0xba, 0x49d: 0xba, 0x49e: 0xba, 0x49f: 0xba,
+ 0x4a0: 0xba, 0x4a1: 0xba, 0x4a2: 0xba, 0x4a3: 0xba, 0x4a4: 0xba, 0x4a5: 0xba, 0x4a6: 0xba, 0x4a7: 0xba,
+ 0x4a8: 0xba, 0x4a9: 0xba, 0x4aa: 0xba, 0x4ab: 0xba, 0x4ac: 0xba, 0x4ad: 0xba, 0x4ae: 0xba, 0x4af: 0xba,
+ 0x4b0: 0xba, 0x4b1: 0xba, 0x4b2: 0xba, 0x4b3: 0xba, 0x4b4: 0xba, 0x4b5: 0xba, 0x4b6: 0xba, 0x4b7: 0xba,
+ 0x4b8: 0xba, 0x4b9: 0xba, 0x4ba: 0xba, 0x4bb: 0xba, 0x4bc: 0xba, 0x4bd: 0xba, 0x4be: 0xba, 0x4bf: 0xba,
// Block 0x13, offset 0x4c0
- 0x4c0: 0xb8, 0x4c1: 0xb8, 0x4c2: 0xb8, 0x4c3: 0xb8, 0x4c4: 0xb8, 0x4c5: 0xb8, 0x4c6: 0xb8, 0x4c7: 0xb8,
- 0x4c8: 0xb8, 0x4c9: 0xb8, 0x4ca: 0xb8, 0x4cb: 0xb8, 0x4cc: 0xb8, 0x4cd: 0xb8, 0x4ce: 0xb8, 0x4cf: 0xb8,
- 0x4d0: 0x9d, 0x4d1: 0x9d, 0x4d2: 0x9d, 0x4d3: 0x9d, 0x4d4: 0x9d, 0x4d5: 0x9d, 0x4d6: 0x9d, 0x4d7: 0x9d,
- 0x4d8: 0x9d, 0x4d9: 0x145, 0x4da: 0xb8, 0x4db: 0xb8, 0x4dc: 0xb8, 0x4dd: 0xb8, 0x4de: 0xb8, 0x4df: 0xb8,
- 0x4e0: 0xb8, 0x4e1: 0xb8, 0x4e2: 0xb8, 0x4e3: 0xb8, 0x4e4: 0xb8, 0x4e5: 0xb8, 0x4e6: 0xb8, 0x4e7: 0xb8,
- 0x4e8: 0xb8, 0x4e9: 0xb8, 0x4ea: 0xb8, 0x4eb: 0xb8, 0x4ec: 0xb8, 0x4ed: 0xb8, 0x4ee: 0xb8, 0x4ef: 0xb8,
- 0x4f0: 0xb8, 0x4f1: 0xb8, 0x4f2: 0xb8, 0x4f3: 0xb8, 0x4f4: 0xb8, 0x4f5: 0xb8, 0x4f6: 0xb8, 0x4f7: 0xb8,
- 0x4f8: 0xb8, 0x4f9: 0xb8, 0x4fa: 0xb8, 0x4fb: 0xb8, 0x4fc: 0xb8, 0x4fd: 0xb8, 0x4fe: 0xb8, 0x4ff: 0xb8,
+ 0x4c0: 0xba, 0x4c1: 0xba, 0x4c2: 0xba, 0x4c3: 0xba, 0x4c4: 0xba, 0x4c5: 0xba, 0x4c6: 0xba, 0x4c7: 0xba,
+ 0x4c8: 0xba, 0x4c9: 0xba, 0x4ca: 0xba, 0x4cb: 0xba, 0x4cc: 0xba, 0x4cd: 0xba, 0x4ce: 0xba, 0x4cf: 0xba,
+ 0x4d0: 0x9f, 0x4d1: 0x9f, 0x4d2: 0x9f, 0x4d3: 0x9f, 0x4d4: 0x9f, 0x4d5: 0x9f, 0x4d6: 0x9f, 0x4d7: 0x9f,
+ 0x4d8: 0x9f, 0x4d9: 0x14c, 0x4da: 0xba, 0x4db: 0xba, 0x4dc: 0xba, 0x4dd: 0xba, 0x4de: 0xba, 0x4df: 0xba,
+ 0x4e0: 0xba, 0x4e1: 0xba, 0x4e2: 0xba, 0x4e3: 0xba, 0x4e4: 0xba, 0x4e5: 0xba, 0x4e6: 0xba, 0x4e7: 0xba,
+ 0x4e8: 0xba, 0x4e9: 0xba, 0x4ea: 0xba, 0x4eb: 0xba, 0x4ec: 0xba, 0x4ed: 0xba, 0x4ee: 0xba, 0x4ef: 0xba,
+ 0x4f0: 0xba, 0x4f1: 0xba, 0x4f2: 0xba, 0x4f3: 0xba, 0x4f4: 0xba, 0x4f5: 0xba, 0x4f6: 0xba, 0x4f7: 0xba,
+ 0x4f8: 0xba, 0x4f9: 0xba, 0x4fa: 0xba, 0x4fb: 0xba, 0x4fc: 0xba, 0x4fd: 0xba, 0x4fe: 0xba, 0x4ff: 0xba,
// Block 0x14, offset 0x500
- 0x500: 0xb8, 0x501: 0xb8, 0x502: 0xb8, 0x503: 0xb8, 0x504: 0xb8, 0x505: 0xb8, 0x506: 0xb8, 0x507: 0xb8,
- 0x508: 0xb8, 0x509: 0xb8, 0x50a: 0xb8, 0x50b: 0xb8, 0x50c: 0xb8, 0x50d: 0xb8, 0x50e: 0xb8, 0x50f: 0xb8,
- 0x510: 0xb8, 0x511: 0xb8, 0x512: 0xb8, 0x513: 0xb8, 0x514: 0xb8, 0x515: 0xb8, 0x516: 0xb8, 0x517: 0xb8,
- 0x518: 0xb8, 0x519: 0xb8, 0x51a: 0xb8, 0x51b: 0xb8, 0x51c: 0xb8, 0x51d: 0xb8, 0x51e: 0xb8, 0x51f: 0xb8,
- 0x520: 0x9d, 0x521: 0x9d, 0x522: 0x9d, 0x523: 0x9d, 0x524: 0x9d, 0x525: 0x9d, 0x526: 0x9d, 0x527: 0x9d,
- 0x528: 0x13d, 0x529: 0x146, 0x52a: 0xb8, 0x52b: 0x147, 0x52c: 0x148, 0x52d: 0x149, 0x52e: 0x14a, 0x52f: 0xb8,
- 0x530: 0xb8, 0x531: 0xb8, 0x532: 0xb8, 0x533: 0xb8, 0x534: 0xb8, 0x535: 0xb8, 0x536: 0xb8, 0x537: 0xb8,
- 0x538: 0xb8, 0x539: 0xb8, 0x53a: 0xb8, 0x53b: 0xb8, 0x53c: 0x9d, 0x53d: 0x14b, 0x53e: 0x14c, 0x53f: 0x14d,
+ 0x500: 0xba, 0x501: 0xba, 0x502: 0xba, 0x503: 0xba, 0x504: 0xba, 0x505: 0xba, 0x506: 0xba, 0x507: 0xba,
+ 0x508: 0xba, 0x509: 0xba, 0x50a: 0xba, 0x50b: 0xba, 0x50c: 0xba, 0x50d: 0xba, 0x50e: 0xba, 0x50f: 0xba,
+ 0x510: 0xba, 0x511: 0xba, 0x512: 0xba, 0x513: 0xba, 0x514: 0xba, 0x515: 0xba, 0x516: 0xba, 0x517: 0xba,
+ 0x518: 0xba, 0x519: 0xba, 0x51a: 0xba, 0x51b: 0xba, 0x51c: 0xba, 0x51d: 0xba, 0x51e: 0xba, 0x51f: 0xba,
+ 0x520: 0x9f, 0x521: 0x9f, 0x522: 0x9f, 0x523: 0x9f, 0x524: 0x9f, 0x525: 0x9f, 0x526: 0x9f, 0x527: 0x9f,
+ 0x528: 0x142, 0x529: 0x14d, 0x52a: 0xba, 0x52b: 0x14e, 0x52c: 0x14f, 0x52d: 0x150, 0x52e: 0x151, 0x52f: 0xba,
+ 0x530: 0xba, 0x531: 0xba, 0x532: 0xba, 0x533: 0xba, 0x534: 0xba, 0x535: 0xba, 0x536: 0xba, 0x537: 0xba,
+ 0x538: 0xba, 0x539: 0xba, 0x53a: 0xba, 0x53b: 0xba, 0x53c: 0x9f, 0x53d: 0x152, 0x53e: 0x153, 0x53f: 0x154,
// Block 0x15, offset 0x540
- 0x540: 0x9d, 0x541: 0x9d, 0x542: 0x9d, 0x543: 0x9d, 0x544: 0x9d, 0x545: 0x9d, 0x546: 0x9d, 0x547: 0x9d,
- 0x548: 0x9d, 0x549: 0x9d, 0x54a: 0x9d, 0x54b: 0x9d, 0x54c: 0x9d, 0x54d: 0x9d, 0x54e: 0x9d, 0x54f: 0x9d,
- 0x550: 0x9d, 0x551: 0x9d, 0x552: 0x9d, 0x553: 0x9d, 0x554: 0x9d, 0x555: 0x9d, 0x556: 0x9d, 0x557: 0x9d,
- 0x558: 0x9d, 0x559: 0x9d, 0x55a: 0x9d, 0x55b: 0x9d, 0x55c: 0x9d, 0x55d: 0x9d, 0x55e: 0x9d, 0x55f: 0x14e,
- 0x560: 0x9d, 0x561: 0x9d, 0x562: 0x9d, 0x563: 0x9d, 0x564: 0x9d, 0x565: 0x9d, 0x566: 0x9d, 0x567: 0x9d,
- 0x568: 0x9d, 0x569: 0x9d, 0x56a: 0x9d, 0x56b: 0x14f, 0x56c: 0xb8, 0x56d: 0xb8, 0x56e: 0xb8, 0x56f: 0xb8,
- 0x570: 0xb8, 0x571: 0xb8, 0x572: 0xb8, 0x573: 0xb8, 0x574: 0xb8, 0x575: 0xb8, 0x576: 0xb8, 0x577: 0xb8,
- 0x578: 0xb8, 0x579: 0xb8, 0x57a: 0xb8, 0x57b: 0xb8, 0x57c: 0xb8, 0x57d: 0xb8, 0x57e: 0xb8, 0x57f: 0xb8,
+ 0x540: 0x9f, 0x541: 0x9f, 0x542: 0x9f, 0x543: 0x9f, 0x544: 0x9f, 0x545: 0x9f, 0x546: 0x9f, 0x547: 0x9f,
+ 0x548: 0x9f, 0x549: 0x9f, 0x54a: 0x9f, 0x54b: 0x9f, 0x54c: 0x9f, 0x54d: 0x9f, 0x54e: 0x9f, 0x54f: 0x9f,
+ 0x550: 0x9f, 0x551: 0x9f, 0x552: 0x9f, 0x553: 0x9f, 0x554: 0x9f, 0x555: 0x9f, 0x556: 0x9f, 0x557: 0x9f,
+ 0x558: 0x9f, 0x559: 0x9f, 0x55a: 0x9f, 0x55b: 0x9f, 0x55c: 0x9f, 0x55d: 0x9f, 0x55e: 0x9f, 0x55f: 0x155,
+ 0x560: 0x9f, 0x561: 0x9f, 0x562: 0x9f, 0x563: 0x9f, 0x564: 0x9f, 0x565: 0x9f, 0x566: 0x9f, 0x567: 0x9f,
+ 0x568: 0x9f, 0x569: 0x9f, 0x56a: 0x9f, 0x56b: 0x156, 0x56c: 0xba, 0x56d: 0xba, 0x56e: 0xba, 0x56f: 0xba,
+ 0x570: 0xba, 0x571: 0xba, 0x572: 0xba, 0x573: 0xba, 0x574: 0xba, 0x575: 0xba, 0x576: 0xba, 0x577: 0xba,
+ 0x578: 0xba, 0x579: 0xba, 0x57a: 0xba, 0x57b: 0xba, 0x57c: 0xba, 0x57d: 0xba, 0x57e: 0xba, 0x57f: 0xba,
// Block 0x16, offset 0x580
- 0x580: 0x150, 0x581: 0xb8, 0x582: 0xb8, 0x583: 0xb8, 0x584: 0xb8, 0x585: 0xb8, 0x586: 0xb8, 0x587: 0xb8,
- 0x588: 0xb8, 0x589: 0xb8, 0x58a: 0xb8, 0x58b: 0xb8, 0x58c: 0xb8, 0x58d: 0xb8, 0x58e: 0xb8, 0x58f: 0xb8,
- 0x590: 0xb8, 0x591: 0xb8, 0x592: 0xb8, 0x593: 0xb8, 0x594: 0xb8, 0x595: 0xb8, 0x596: 0xb8, 0x597: 0xb8,
- 0x598: 0xb8, 0x599: 0xb8, 0x59a: 0xb8, 0x59b: 0xb8, 0x59c: 0xb8, 0x59d: 0xb8, 0x59e: 0xb8, 0x59f: 0xb8,
- 0x5a0: 0xb8, 0x5a1: 0xb8, 0x5a2: 0xb8, 0x5a3: 0xb8, 0x5a4: 0xb8, 0x5a5: 0xb8, 0x5a6: 0xb8, 0x5a7: 0xb8,
- 0x5a8: 0xb8, 0x5a9: 0xb8, 0x5aa: 0xb8, 0x5ab: 0xb8, 0x5ac: 0xb8, 0x5ad: 0xb8, 0x5ae: 0xb8, 0x5af: 0xb8,
- 0x5b0: 0x9d, 0x5b1: 0x151, 0x5b2: 0x152, 0x5b3: 0xb8, 0x5b4: 0xb8, 0x5b5: 0xb8, 0x5b6: 0xb8, 0x5b7: 0xb8,
- 0x5b8: 0xb8, 0x5b9: 0xb8, 0x5ba: 0xb8, 0x5bb: 0xb8, 0x5bc: 0xb8, 0x5bd: 0xb8, 0x5be: 0xb8, 0x5bf: 0xb8,
+ 0x580: 0x9f, 0x581: 0x9f, 0x582: 0x9f, 0x583: 0x9f, 0x584: 0x157, 0x585: 0x158, 0x586: 0x9f, 0x587: 0x9f,
+ 0x588: 0x9f, 0x589: 0x9f, 0x58a: 0x9f, 0x58b: 0x159, 0x58c: 0xba, 0x58d: 0xba, 0x58e: 0xba, 0x58f: 0xba,
+ 0x590: 0xba, 0x591: 0xba, 0x592: 0xba, 0x593: 0xba, 0x594: 0xba, 0x595: 0xba, 0x596: 0xba, 0x597: 0xba,
+ 0x598: 0xba, 0x599: 0xba, 0x59a: 0xba, 0x59b: 0xba, 0x59c: 0xba, 0x59d: 0xba, 0x59e: 0xba, 0x59f: 0xba,
+ 0x5a0: 0xba, 0x5a1: 0xba, 0x5a2: 0xba, 0x5a3: 0xba, 0x5a4: 0xba, 0x5a5: 0xba, 0x5a6: 0xba, 0x5a7: 0xba,
+ 0x5a8: 0xba, 0x5a9: 0xba, 0x5aa: 0xba, 0x5ab: 0xba, 0x5ac: 0xba, 0x5ad: 0xba, 0x5ae: 0xba, 0x5af: 0xba,
+ 0x5b0: 0x9f, 0x5b1: 0x15a, 0x5b2: 0x15b, 0x5b3: 0xba, 0x5b4: 0xba, 0x5b5: 0xba, 0x5b6: 0xba, 0x5b7: 0xba,
+ 0x5b8: 0xba, 0x5b9: 0xba, 0x5ba: 0xba, 0x5bb: 0xba, 0x5bc: 0xba, 0x5bd: 0xba, 0x5be: 0xba, 0x5bf: 0xba,
// Block 0x17, offset 0x5c0
- 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x153, 0x5c4: 0x154, 0x5c5: 0x155, 0x5c6: 0x156, 0x5c7: 0x157,
- 0x5c8: 0x9b, 0x5c9: 0x158, 0x5ca: 0xb8, 0x5cb: 0xb8, 0x5cc: 0x9b, 0x5cd: 0x159, 0x5ce: 0xb8, 0x5cf: 0xb8,
- 0x5d0: 0x5d, 0x5d1: 0x5e, 0x5d2: 0x5f, 0x5d3: 0x60, 0x5d4: 0x61, 0x5d5: 0x62, 0x5d6: 0x63, 0x5d7: 0x64,
- 0x5d8: 0x65, 0x5d9: 0x66, 0x5da: 0x67, 0x5db: 0x68, 0x5dc: 0x69, 0x5dd: 0x6a, 0x5de: 0x6b, 0x5df: 0x6c,
+ 0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x15c, 0x5c4: 0x15d, 0x5c5: 0x15e, 0x5c6: 0x15f, 0x5c7: 0x160,
+ 0x5c8: 0x9b, 0x5c9: 0x161, 0x5ca: 0xba, 0x5cb: 0xba, 0x5cc: 0x9b, 0x5cd: 0x162, 0x5ce: 0xba, 0x5cf: 0xba,
+ 0x5d0: 0x5f, 0x5d1: 0x60, 0x5d2: 0x61, 0x5d3: 0x62, 0x5d4: 0x63, 0x5d5: 0x64, 0x5d6: 0x65, 0x5d7: 0x66,
+ 0x5d8: 0x67, 0x5d9: 0x68, 0x5da: 0x69, 0x5db: 0x6a, 0x5dc: 0x6b, 0x5dd: 0x6c, 0x5de: 0x6d, 0x5df: 0x6e,
0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b,
- 0x5e8: 0x15a, 0x5e9: 0x15b, 0x5ea: 0x15c, 0x5eb: 0xb8, 0x5ec: 0xb8, 0x5ed: 0xb8, 0x5ee: 0xb8, 0x5ef: 0xb8,
- 0x5f0: 0xb8, 0x5f1: 0xb8, 0x5f2: 0xb8, 0x5f3: 0xb8, 0x5f4: 0xb8, 0x5f5: 0xb8, 0x5f6: 0xb8, 0x5f7: 0xb8,
- 0x5f8: 0xb8, 0x5f9: 0xb8, 0x5fa: 0xb8, 0x5fb: 0xb8, 0x5fc: 0xb8, 0x5fd: 0xb8, 0x5fe: 0xb8, 0x5ff: 0xb8,
+ 0x5e8: 0x163, 0x5e9: 0x164, 0x5ea: 0x165, 0x5eb: 0xba, 0x5ec: 0xba, 0x5ed: 0xba, 0x5ee: 0xba, 0x5ef: 0xba,
+ 0x5f0: 0xba, 0x5f1: 0xba, 0x5f2: 0xba, 0x5f3: 0xba, 0x5f4: 0xba, 0x5f5: 0xba, 0x5f6: 0xba, 0x5f7: 0xba,
+ 0x5f8: 0xba, 0x5f9: 0xba, 0x5fa: 0xba, 0x5fb: 0xba, 0x5fc: 0xba, 0x5fd: 0xba, 0x5fe: 0xba, 0x5ff: 0xba,
// Block 0x18, offset 0x600
- 0x600: 0x15d, 0x601: 0xb8, 0x602: 0xb8, 0x603: 0xb8, 0x604: 0xb8, 0x605: 0xb8, 0x606: 0xb8, 0x607: 0xb8,
- 0x608: 0xb8, 0x609: 0xb8, 0x60a: 0xb8, 0x60b: 0xb8, 0x60c: 0xb8, 0x60d: 0xb8, 0x60e: 0xb8, 0x60f: 0xb8,
- 0x610: 0xb8, 0x611: 0xb8, 0x612: 0xb8, 0x613: 0xb8, 0x614: 0xb8, 0x615: 0xb8, 0x616: 0xb8, 0x617: 0xb8,
- 0x618: 0xb8, 0x619: 0xb8, 0x61a: 0xb8, 0x61b: 0xb8, 0x61c: 0xb8, 0x61d: 0xb8, 0x61e: 0xb8, 0x61f: 0xb8,
- 0x620: 0x9d, 0x621: 0x9d, 0x622: 0x9d, 0x623: 0x15e, 0x624: 0x6d, 0x625: 0x15f, 0x626: 0xb8, 0x627: 0xb8,
- 0x628: 0xb8, 0x629: 0xb8, 0x62a: 0xb8, 0x62b: 0xb8, 0x62c: 0xb8, 0x62d: 0xb8, 0x62e: 0xb8, 0x62f: 0xb8,
- 0x630: 0xb8, 0x631: 0xb8, 0x632: 0xb8, 0x633: 0xb8, 0x634: 0xb8, 0x635: 0xb8, 0x636: 0xb8, 0x637: 0xb8,
- 0x638: 0x6e, 0x639: 0x6f, 0x63a: 0x70, 0x63b: 0x160, 0x63c: 0xb8, 0x63d: 0xb8, 0x63e: 0xb8, 0x63f: 0xb8,
+ 0x600: 0x166, 0x601: 0xba, 0x602: 0xba, 0x603: 0xba, 0x604: 0xba, 0x605: 0xba, 0x606: 0xba, 0x607: 0xba,
+ 0x608: 0xba, 0x609: 0xba, 0x60a: 0xba, 0x60b: 0xba, 0x60c: 0xba, 0x60d: 0xba, 0x60e: 0xba, 0x60f: 0xba,
+ 0x610: 0xba, 0x611: 0xba, 0x612: 0xba, 0x613: 0xba, 0x614: 0xba, 0x615: 0xba, 0x616: 0xba, 0x617: 0xba,
+ 0x618: 0xba, 0x619: 0xba, 0x61a: 0xba, 0x61b: 0xba, 0x61c: 0xba, 0x61d: 0xba, 0x61e: 0xba, 0x61f: 0xba,
+ 0x620: 0x122, 0x621: 0x122, 0x622: 0x122, 0x623: 0x167, 0x624: 0x6f, 0x625: 0x168, 0x626: 0xba, 0x627: 0xba,
+ 0x628: 0xba, 0x629: 0xba, 0x62a: 0xba, 0x62b: 0xba, 0x62c: 0xba, 0x62d: 0xba, 0x62e: 0xba, 0x62f: 0xba,
+ 0x630: 0xba, 0x631: 0xba, 0x632: 0xba, 0x633: 0xba, 0x634: 0xba, 0x635: 0xba, 0x636: 0xba, 0x637: 0xba,
+ 0x638: 0x70, 0x639: 0x71, 0x63a: 0x72, 0x63b: 0x169, 0x63c: 0xba, 0x63d: 0xba, 0x63e: 0xba, 0x63f: 0xba,
// Block 0x19, offset 0x640
- 0x640: 0x161, 0x641: 0x9b, 0x642: 0x162, 0x643: 0x163, 0x644: 0x71, 0x645: 0x72, 0x646: 0x164, 0x647: 0x165,
- 0x648: 0x73, 0x649: 0x166, 0x64a: 0xb8, 0x64b: 0xb8, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b,
+ 0x640: 0x16a, 0x641: 0x9b, 0x642: 0x16b, 0x643: 0x16c, 0x644: 0x73, 0x645: 0x74, 0x646: 0x16d, 0x647: 0x16e,
+ 0x648: 0x75, 0x649: 0x16f, 0x64a: 0xba, 0x64b: 0xba, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b,
0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b,
- 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x167, 0x65c: 0x9b, 0x65d: 0x168, 0x65e: 0x9b, 0x65f: 0x169,
- 0x660: 0x16a, 0x661: 0x16b, 0x662: 0x16c, 0x663: 0xb8, 0x664: 0x16d, 0x665: 0x16e, 0x666: 0x16f, 0x667: 0x170,
- 0x668: 0xb8, 0x669: 0xb8, 0x66a: 0xb8, 0x66b: 0xb8, 0x66c: 0xb8, 0x66d: 0xb8, 0x66e: 0xb8, 0x66f: 0xb8,
- 0x670: 0xb8, 0x671: 0xb8, 0x672: 0xb8, 0x673: 0xb8, 0x674: 0xb8, 0x675: 0xb8, 0x676: 0xb8, 0x677: 0xb8,
- 0x678: 0xb8, 0x679: 0xb8, 0x67a: 0xb8, 0x67b: 0xb8, 0x67c: 0xb8, 0x67d: 0xb8, 0x67e: 0xb8, 0x67f: 0xb8,
+ 0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x170, 0x65c: 0x9b, 0x65d: 0x171, 0x65e: 0x9b, 0x65f: 0x172,
+ 0x660: 0x173, 0x661: 0x174, 0x662: 0x175, 0x663: 0xba, 0x664: 0x176, 0x665: 0x177, 0x666: 0x178, 0x667: 0x179,
+ 0x668: 0xba, 0x669: 0xba, 0x66a: 0xba, 0x66b: 0xba, 0x66c: 0xba, 0x66d: 0xba, 0x66e: 0xba, 0x66f: 0xba,
+ 0x670: 0xba, 0x671: 0xba, 0x672: 0xba, 0x673: 0xba, 0x674: 0xba, 0x675: 0xba, 0x676: 0xba, 0x677: 0xba,
+ 0x678: 0xba, 0x679: 0xba, 0x67a: 0xba, 0x67b: 0xba, 0x67c: 0xba, 0x67d: 0xba, 0x67e: 0xba, 0x67f: 0xba,
// Block 0x1a, offset 0x680
- 0x680: 0x9d, 0x681: 0x9d, 0x682: 0x9d, 0x683: 0x9d, 0x684: 0x9d, 0x685: 0x9d, 0x686: 0x9d, 0x687: 0x9d,
- 0x688: 0x9d, 0x689: 0x9d, 0x68a: 0x9d, 0x68b: 0x9d, 0x68c: 0x9d, 0x68d: 0x9d, 0x68e: 0x9d, 0x68f: 0x9d,
- 0x690: 0x9d, 0x691: 0x9d, 0x692: 0x9d, 0x693: 0x9d, 0x694: 0x9d, 0x695: 0x9d, 0x696: 0x9d, 0x697: 0x9d,
- 0x698: 0x9d, 0x699: 0x9d, 0x69a: 0x9d, 0x69b: 0x171, 0x69c: 0x9d, 0x69d: 0x9d, 0x69e: 0x9d, 0x69f: 0x9d,
- 0x6a0: 0x9d, 0x6a1: 0x9d, 0x6a2: 0x9d, 0x6a3: 0x9d, 0x6a4: 0x9d, 0x6a5: 0x9d, 0x6a6: 0x9d, 0x6a7: 0x9d,
- 0x6a8: 0x9d, 0x6a9: 0x9d, 0x6aa: 0x9d, 0x6ab: 0x9d, 0x6ac: 0x9d, 0x6ad: 0x9d, 0x6ae: 0x9d, 0x6af: 0x9d,
- 0x6b0: 0x9d, 0x6b1: 0x9d, 0x6b2: 0x9d, 0x6b3: 0x9d, 0x6b4: 0x9d, 0x6b5: 0x9d, 0x6b6: 0x9d, 0x6b7: 0x9d,
- 0x6b8: 0x9d, 0x6b9: 0x9d, 0x6ba: 0x9d, 0x6bb: 0x9d, 0x6bc: 0x9d, 0x6bd: 0x9d, 0x6be: 0x9d, 0x6bf: 0x9d,
+ 0x680: 0x9f, 0x681: 0x9f, 0x682: 0x9f, 0x683: 0x9f, 0x684: 0x9f, 0x685: 0x9f, 0x686: 0x9f, 0x687: 0x9f,
+ 0x688: 0x9f, 0x689: 0x9f, 0x68a: 0x9f, 0x68b: 0x9f, 0x68c: 0x9f, 0x68d: 0x9f, 0x68e: 0x9f, 0x68f: 0x9f,
+ 0x690: 0x9f, 0x691: 0x9f, 0x692: 0x9f, 0x693: 0x9f, 0x694: 0x9f, 0x695: 0x9f, 0x696: 0x9f, 0x697: 0x9f,
+ 0x698: 0x9f, 0x699: 0x9f, 0x69a: 0x9f, 0x69b: 0x17a, 0x69c: 0x9f, 0x69d: 0x9f, 0x69e: 0x9f, 0x69f: 0x9f,
+ 0x6a0: 0x9f, 0x6a1: 0x9f, 0x6a2: 0x9f, 0x6a3: 0x9f, 0x6a4: 0x9f, 0x6a5: 0x9f, 0x6a6: 0x9f, 0x6a7: 0x9f,
+ 0x6a8: 0x9f, 0x6a9: 0x9f, 0x6aa: 0x9f, 0x6ab: 0x9f, 0x6ac: 0x9f, 0x6ad: 0x9f, 0x6ae: 0x9f, 0x6af: 0x9f,
+ 0x6b0: 0x9f, 0x6b1: 0x9f, 0x6b2: 0x9f, 0x6b3: 0x9f, 0x6b4: 0x9f, 0x6b5: 0x9f, 0x6b6: 0x9f, 0x6b7: 0x9f,
+ 0x6b8: 0x9f, 0x6b9: 0x9f, 0x6ba: 0x9f, 0x6bb: 0x9f, 0x6bc: 0x9f, 0x6bd: 0x9f, 0x6be: 0x9f, 0x6bf: 0x9f,
// Block 0x1b, offset 0x6c0
- 0x6c0: 0x9d, 0x6c1: 0x9d, 0x6c2: 0x9d, 0x6c3: 0x9d, 0x6c4: 0x9d, 0x6c5: 0x9d, 0x6c6: 0x9d, 0x6c7: 0x9d,
- 0x6c8: 0x9d, 0x6c9: 0x9d, 0x6ca: 0x9d, 0x6cb: 0x9d, 0x6cc: 0x9d, 0x6cd: 0x9d, 0x6ce: 0x9d, 0x6cf: 0x9d,
- 0x6d0: 0x9d, 0x6d1: 0x9d, 0x6d2: 0x9d, 0x6d3: 0x9d, 0x6d4: 0x9d, 0x6d5: 0x9d, 0x6d6: 0x9d, 0x6d7: 0x9d,
- 0x6d8: 0x9d, 0x6d9: 0x9d, 0x6da: 0x9d, 0x6db: 0x9d, 0x6dc: 0x172, 0x6dd: 0x9d, 0x6de: 0x9d, 0x6df: 0x9d,
- 0x6e0: 0x173, 0x6e1: 0x9d, 0x6e2: 0x9d, 0x6e3: 0x9d, 0x6e4: 0x9d, 0x6e5: 0x9d, 0x6e6: 0x9d, 0x6e7: 0x9d,
- 0x6e8: 0x9d, 0x6e9: 0x9d, 0x6ea: 0x9d, 0x6eb: 0x9d, 0x6ec: 0x9d, 0x6ed: 0x9d, 0x6ee: 0x9d, 0x6ef: 0x9d,
- 0x6f0: 0x9d, 0x6f1: 0x9d, 0x6f2: 0x9d, 0x6f3: 0x9d, 0x6f4: 0x9d, 0x6f5: 0x9d, 0x6f6: 0x9d, 0x6f7: 0x9d,
- 0x6f8: 0x9d, 0x6f9: 0x9d, 0x6fa: 0x9d, 0x6fb: 0x9d, 0x6fc: 0x9d, 0x6fd: 0x9d, 0x6fe: 0x9d, 0x6ff: 0x9d,
+ 0x6c0: 0x9f, 0x6c1: 0x9f, 0x6c2: 0x9f, 0x6c3: 0x9f, 0x6c4: 0x9f, 0x6c5: 0x9f, 0x6c6: 0x9f, 0x6c7: 0x9f,
+ 0x6c8: 0x9f, 0x6c9: 0x9f, 0x6ca: 0x9f, 0x6cb: 0x9f, 0x6cc: 0x9f, 0x6cd: 0x9f, 0x6ce: 0x9f, 0x6cf: 0x9f,
+ 0x6d0: 0x9f, 0x6d1: 0x9f, 0x6d2: 0x9f, 0x6d3: 0x9f, 0x6d4: 0x9f, 0x6d5: 0x9f, 0x6d6: 0x9f, 0x6d7: 0x9f,
+ 0x6d8: 0x9f, 0x6d9: 0x9f, 0x6da: 0x9f, 0x6db: 0x9f, 0x6dc: 0x17b, 0x6dd: 0x9f, 0x6de: 0x9f, 0x6df: 0x9f,
+ 0x6e0: 0x17c, 0x6e1: 0x9f, 0x6e2: 0x9f, 0x6e3: 0x9f, 0x6e4: 0x9f, 0x6e5: 0x9f, 0x6e6: 0x9f, 0x6e7: 0x9f,
+ 0x6e8: 0x9f, 0x6e9: 0x9f, 0x6ea: 0x9f, 0x6eb: 0x9f, 0x6ec: 0x9f, 0x6ed: 0x9f, 0x6ee: 0x9f, 0x6ef: 0x9f,
+ 0x6f0: 0x9f, 0x6f1: 0x9f, 0x6f2: 0x9f, 0x6f3: 0x9f, 0x6f4: 0x9f, 0x6f5: 0x9f, 0x6f6: 0x9f, 0x6f7: 0x9f,
+ 0x6f8: 0x9f, 0x6f9: 0x9f, 0x6fa: 0x9f, 0x6fb: 0x9f, 0x6fc: 0x9f, 0x6fd: 0x9f, 0x6fe: 0x9f, 0x6ff: 0x9f,
// Block 0x1c, offset 0x700
- 0x700: 0x9d, 0x701: 0x9d, 0x702: 0x9d, 0x703: 0x9d, 0x704: 0x9d, 0x705: 0x9d, 0x706: 0x9d, 0x707: 0x9d,
- 0x708: 0x9d, 0x709: 0x9d, 0x70a: 0x9d, 0x70b: 0x9d, 0x70c: 0x9d, 0x70d: 0x9d, 0x70e: 0x9d, 0x70f: 0x9d,
- 0x710: 0x9d, 0x711: 0x9d, 0x712: 0x9d, 0x713: 0x9d, 0x714: 0x9d, 0x715: 0x9d, 0x716: 0x9d, 0x717: 0x9d,
- 0x718: 0x9d, 0x719: 0x9d, 0x71a: 0x9d, 0x71b: 0x9d, 0x71c: 0x9d, 0x71d: 0x9d, 0x71e: 0x9d, 0x71f: 0x9d,
- 0x720: 0x9d, 0x721: 0x9d, 0x722: 0x9d, 0x723: 0x9d, 0x724: 0x9d, 0x725: 0x9d, 0x726: 0x9d, 0x727: 0x9d,
- 0x728: 0x9d, 0x729: 0x9d, 0x72a: 0x9d, 0x72b: 0x9d, 0x72c: 0x9d, 0x72d: 0x9d, 0x72e: 0x9d, 0x72f: 0x9d,
- 0x730: 0x9d, 0x731: 0x9d, 0x732: 0x9d, 0x733: 0x9d, 0x734: 0x9d, 0x735: 0x9d, 0x736: 0x9d, 0x737: 0x9d,
- 0x738: 0x9d, 0x739: 0x9d, 0x73a: 0x174, 0x73b: 0xb8, 0x73c: 0xb8, 0x73d: 0xb8, 0x73e: 0xb8, 0x73f: 0xb8,
+ 0x700: 0x9f, 0x701: 0x9f, 0x702: 0x9f, 0x703: 0x9f, 0x704: 0x9f, 0x705: 0x9f, 0x706: 0x9f, 0x707: 0x9f,
+ 0x708: 0x9f, 0x709: 0x9f, 0x70a: 0x9f, 0x70b: 0x9f, 0x70c: 0x9f, 0x70d: 0x9f, 0x70e: 0x9f, 0x70f: 0x9f,
+ 0x710: 0x9f, 0x711: 0x9f, 0x712: 0x9f, 0x713: 0x9f, 0x714: 0x9f, 0x715: 0x9f, 0x716: 0x9f, 0x717: 0x9f,
+ 0x718: 0x9f, 0x719: 0x9f, 0x71a: 0x9f, 0x71b: 0x9f, 0x71c: 0x9f, 0x71d: 0x9f, 0x71e: 0x9f, 0x71f: 0x9f,
+ 0x720: 0x9f, 0x721: 0x9f, 0x722: 0x9f, 0x723: 0x9f, 0x724: 0x9f, 0x725: 0x9f, 0x726: 0x9f, 0x727: 0x9f,
+ 0x728: 0x9f, 0x729: 0x9f, 0x72a: 0x9f, 0x72b: 0x9f, 0x72c: 0x9f, 0x72d: 0x9f, 0x72e: 0x9f, 0x72f: 0x9f,
+ 0x730: 0x9f, 0x731: 0x9f, 0x732: 0x9f, 0x733: 0x9f, 0x734: 0x9f, 0x735: 0x9f, 0x736: 0x9f, 0x737: 0x9f,
+ 0x738: 0x9f, 0x739: 0x9f, 0x73a: 0x17d, 0x73b: 0x9f, 0x73c: 0x9f, 0x73d: 0x9f, 0x73e: 0x9f, 0x73f: 0x9f,
// Block 0x1d, offset 0x740
- 0x740: 0xb8, 0x741: 0xb8, 0x742: 0xb8, 0x743: 0xb8, 0x744: 0xb8, 0x745: 0xb8, 0x746: 0xb8, 0x747: 0xb8,
- 0x748: 0xb8, 0x749: 0xb8, 0x74a: 0xb8, 0x74b: 0xb8, 0x74c: 0xb8, 0x74d: 0xb8, 0x74e: 0xb8, 0x74f: 0xb8,
- 0x750: 0xb8, 0x751: 0xb8, 0x752: 0xb8, 0x753: 0xb8, 0x754: 0xb8, 0x755: 0xb8, 0x756: 0xb8, 0x757: 0xb8,
- 0x758: 0xb8, 0x759: 0xb8, 0x75a: 0xb8, 0x75b: 0xb8, 0x75c: 0xb8, 0x75d: 0xb8, 0x75e: 0xb8, 0x75f: 0xb8,
- 0x760: 0x74, 0x761: 0x75, 0x762: 0x76, 0x763: 0x175, 0x764: 0x77, 0x765: 0x78, 0x766: 0x176, 0x767: 0x79,
- 0x768: 0x7a, 0x769: 0xb8, 0x76a: 0xb8, 0x76b: 0xb8, 0x76c: 0xb8, 0x76d: 0xb8, 0x76e: 0xb8, 0x76f: 0xb8,
- 0x770: 0xb8, 0x771: 0xb8, 0x772: 0xb8, 0x773: 0xb8, 0x774: 0xb8, 0x775: 0xb8, 0x776: 0xb8, 0x777: 0xb8,
- 0x778: 0xb8, 0x779: 0xb8, 0x77a: 0xb8, 0x77b: 0xb8, 0x77c: 0xb8, 0x77d: 0xb8, 0x77e: 0xb8, 0x77f: 0xb8,
+ 0x740: 0x9f, 0x741: 0x9f, 0x742: 0x9f, 0x743: 0x9f, 0x744: 0x9f, 0x745: 0x9f, 0x746: 0x9f, 0x747: 0x9f,
+ 0x748: 0x9f, 0x749: 0x9f, 0x74a: 0x9f, 0x74b: 0x9f, 0x74c: 0x9f, 0x74d: 0x9f, 0x74e: 0x9f, 0x74f: 0x9f,
+ 0x750: 0x9f, 0x751: 0x9f, 0x752: 0x9f, 0x753: 0x9f, 0x754: 0x9f, 0x755: 0x9f, 0x756: 0x9f, 0x757: 0x9f,
+ 0x758: 0x9f, 0x759: 0x9f, 0x75a: 0x9f, 0x75b: 0x9f, 0x75c: 0x9f, 0x75d: 0x9f, 0x75e: 0x9f, 0x75f: 0x9f,
+ 0x760: 0x9f, 0x761: 0x9f, 0x762: 0x9f, 0x763: 0x9f, 0x764: 0x9f, 0x765: 0x9f, 0x766: 0x9f, 0x767: 0x9f,
+ 0x768: 0x9f, 0x769: 0x9f, 0x76a: 0x9f, 0x76b: 0x9f, 0x76c: 0x9f, 0x76d: 0x9f, 0x76e: 0x9f, 0x76f: 0x17e,
+ 0x770: 0xba, 0x771: 0xba, 0x772: 0xba, 0x773: 0xba, 0x774: 0xba, 0x775: 0xba, 0x776: 0xba, 0x777: 0xba,
+ 0x778: 0xba, 0x779: 0xba, 0x77a: 0xba, 0x77b: 0xba, 0x77c: 0xba, 0x77d: 0xba, 0x77e: 0xba, 0x77f: 0xba,
// Block 0x1e, offset 0x780
- 0x790: 0x0d, 0x791: 0x0e, 0x792: 0x0f, 0x793: 0x10, 0x794: 0x11, 0x795: 0x0b, 0x796: 0x12, 0x797: 0x07,
- 0x798: 0x13, 0x799: 0x0b, 0x79a: 0x0b, 0x79b: 0x14, 0x79c: 0x0b, 0x79d: 0x15, 0x79e: 0x16, 0x79f: 0x17,
- 0x7a0: 0x07, 0x7a1: 0x07, 0x7a2: 0x07, 0x7a3: 0x07, 0x7a4: 0x07, 0x7a5: 0x07, 0x7a6: 0x07, 0x7a7: 0x07,
- 0x7a8: 0x07, 0x7a9: 0x07, 0x7aa: 0x18, 0x7ab: 0x19, 0x7ac: 0x1a, 0x7ad: 0x0b, 0x7ae: 0x0b, 0x7af: 0x1b,
- 0x7b0: 0x0b, 0x7b1: 0x0b, 0x7b2: 0x0b, 0x7b3: 0x0b, 0x7b4: 0x0b, 0x7b5: 0x0b, 0x7b6: 0x0b, 0x7b7: 0x0b,
- 0x7b8: 0x0b, 0x7b9: 0x0b, 0x7ba: 0x0b, 0x7bb: 0x0b, 0x7bc: 0x0b, 0x7bd: 0x0b, 0x7be: 0x0b, 0x7bf: 0x0b,
+ 0x780: 0xba, 0x781: 0xba, 0x782: 0xba, 0x783: 0xba, 0x784: 0xba, 0x785: 0xba, 0x786: 0xba, 0x787: 0xba,
+ 0x788: 0xba, 0x789: 0xba, 0x78a: 0xba, 0x78b: 0xba, 0x78c: 0xba, 0x78d: 0xba, 0x78e: 0xba, 0x78f: 0xba,
+ 0x790: 0xba, 0x791: 0xba, 0x792: 0xba, 0x793: 0xba, 0x794: 0xba, 0x795: 0xba, 0x796: 0xba, 0x797: 0xba,
+ 0x798: 0xba, 0x799: 0xba, 0x79a: 0xba, 0x79b: 0xba, 0x79c: 0xba, 0x79d: 0xba, 0x79e: 0xba, 0x79f: 0xba,
+ 0x7a0: 0x76, 0x7a1: 0x77, 0x7a2: 0x78, 0x7a3: 0x17f, 0x7a4: 0x79, 0x7a5: 0x7a, 0x7a6: 0x180, 0x7a7: 0x7b,
+ 0x7a8: 0x7c, 0x7a9: 0xba, 0x7aa: 0xba, 0x7ab: 0xba, 0x7ac: 0xba, 0x7ad: 0xba, 0x7ae: 0xba, 0x7af: 0xba,
+ 0x7b0: 0xba, 0x7b1: 0xba, 0x7b2: 0xba, 0x7b3: 0xba, 0x7b4: 0xba, 0x7b5: 0xba, 0x7b6: 0xba, 0x7b7: 0xba,
+ 0x7b8: 0xba, 0x7b9: 0xba, 0x7ba: 0xba, 0x7bb: 0xba, 0x7bc: 0xba, 0x7bd: 0xba, 0x7be: 0xba, 0x7bf: 0xba,
// Block 0x1f, offset 0x7c0
- 0x7c0: 0x0b, 0x7c1: 0x0b, 0x7c2: 0x0b, 0x7c3: 0x0b, 0x7c4: 0x0b, 0x7c5: 0x0b, 0x7c6: 0x0b, 0x7c7: 0x0b,
- 0x7c8: 0x0b, 0x7c9: 0x0b, 0x7ca: 0x0b, 0x7cb: 0x0b, 0x7cc: 0x0b, 0x7cd: 0x0b, 0x7ce: 0x0b, 0x7cf: 0x0b,
- 0x7d0: 0x0b, 0x7d1: 0x0b, 0x7d2: 0x0b, 0x7d3: 0x0b, 0x7d4: 0x0b, 0x7d5: 0x0b, 0x7d6: 0x0b, 0x7d7: 0x0b,
- 0x7d8: 0x0b, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x0b, 0x7dc: 0x0b, 0x7dd: 0x0b, 0x7de: 0x0b, 0x7df: 0x0b,
- 0x7e0: 0x0b, 0x7e1: 0x0b, 0x7e2: 0x0b, 0x7e3: 0x0b, 0x7e4: 0x0b, 0x7e5: 0x0b, 0x7e6: 0x0b, 0x7e7: 0x0b,
- 0x7e8: 0x0b, 0x7e9: 0x0b, 0x7ea: 0x0b, 0x7eb: 0x0b, 0x7ec: 0x0b, 0x7ed: 0x0b, 0x7ee: 0x0b, 0x7ef: 0x0b,
+ 0x7d0: 0x0d, 0x7d1: 0x0e, 0x7d2: 0x0f, 0x7d3: 0x10, 0x7d4: 0x11, 0x7d5: 0x0b, 0x7d6: 0x12, 0x7d7: 0x07,
+ 0x7d8: 0x13, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x14, 0x7dc: 0x0b, 0x7dd: 0x15, 0x7de: 0x16, 0x7df: 0x17,
+ 0x7e0: 0x07, 0x7e1: 0x07, 0x7e2: 0x07, 0x7e3: 0x07, 0x7e4: 0x07, 0x7e5: 0x07, 0x7e6: 0x07, 0x7e7: 0x07,
+ 0x7e8: 0x07, 0x7e9: 0x07, 0x7ea: 0x18, 0x7eb: 0x19, 0x7ec: 0x1a, 0x7ed: 0x07, 0x7ee: 0x1b, 0x7ef: 0x1c,
0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b,
0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b,
// Block 0x20, offset 0x800
- 0x800: 0x177, 0x801: 0x178, 0x802: 0xb8, 0x803: 0xb8, 0x804: 0x179, 0x805: 0x179, 0x806: 0x179, 0x807: 0x17a,
- 0x808: 0xb8, 0x809: 0xb8, 0x80a: 0xb8, 0x80b: 0xb8, 0x80c: 0xb8, 0x80d: 0xb8, 0x80e: 0xb8, 0x80f: 0xb8,
- 0x810: 0xb8, 0x811: 0xb8, 0x812: 0xb8, 0x813: 0xb8, 0x814: 0xb8, 0x815: 0xb8, 0x816: 0xb8, 0x817: 0xb8,
- 0x818: 0xb8, 0x819: 0xb8, 0x81a: 0xb8, 0x81b: 0xb8, 0x81c: 0xb8, 0x81d: 0xb8, 0x81e: 0xb8, 0x81f: 0xb8,
- 0x820: 0xb8, 0x821: 0xb8, 0x822: 0xb8, 0x823: 0xb8, 0x824: 0xb8, 0x825: 0xb8, 0x826: 0xb8, 0x827: 0xb8,
- 0x828: 0xb8, 0x829: 0xb8, 0x82a: 0xb8, 0x82b: 0xb8, 0x82c: 0xb8, 0x82d: 0xb8, 0x82e: 0xb8, 0x82f: 0xb8,
- 0x830: 0xb8, 0x831: 0xb8, 0x832: 0xb8, 0x833: 0xb8, 0x834: 0xb8, 0x835: 0xb8, 0x836: 0xb8, 0x837: 0xb8,
- 0x838: 0xb8, 0x839: 0xb8, 0x83a: 0xb8, 0x83b: 0xb8, 0x83c: 0xb8, 0x83d: 0xb8, 0x83e: 0xb8, 0x83f: 0xb8,
+ 0x800: 0x0b, 0x801: 0x0b, 0x802: 0x0b, 0x803: 0x0b, 0x804: 0x0b, 0x805: 0x0b, 0x806: 0x0b, 0x807: 0x0b,
+ 0x808: 0x0b, 0x809: 0x0b, 0x80a: 0x0b, 0x80b: 0x0b, 0x80c: 0x0b, 0x80d: 0x0b, 0x80e: 0x0b, 0x80f: 0x0b,
+ 0x810: 0x0b, 0x811: 0x0b, 0x812: 0x0b, 0x813: 0x0b, 0x814: 0x0b, 0x815: 0x0b, 0x816: 0x0b, 0x817: 0x0b,
+ 0x818: 0x0b, 0x819: 0x0b, 0x81a: 0x0b, 0x81b: 0x0b, 0x81c: 0x0b, 0x81d: 0x0b, 0x81e: 0x0b, 0x81f: 0x0b,
+ 0x820: 0x0b, 0x821: 0x0b, 0x822: 0x0b, 0x823: 0x0b, 0x824: 0x0b, 0x825: 0x0b, 0x826: 0x0b, 0x827: 0x0b,
+ 0x828: 0x0b, 0x829: 0x0b, 0x82a: 0x0b, 0x82b: 0x0b, 0x82c: 0x0b, 0x82d: 0x0b, 0x82e: 0x0b, 0x82f: 0x0b,
+ 0x830: 0x0b, 0x831: 0x0b, 0x832: 0x0b, 0x833: 0x0b, 0x834: 0x0b, 0x835: 0x0b, 0x836: 0x0b, 0x837: 0x0b,
+ 0x838: 0x0b, 0x839: 0x0b, 0x83a: 0x0b, 0x83b: 0x0b, 0x83c: 0x0b, 0x83d: 0x0b, 0x83e: 0x0b, 0x83f: 0x0b,
// Block 0x21, offset 0x840
- 0x840: 0x0b, 0x841: 0x0b, 0x842: 0x0b, 0x843: 0x0b, 0x844: 0x0b, 0x845: 0x0b, 0x846: 0x0b, 0x847: 0x0b,
- 0x848: 0x0b, 0x849: 0x0b, 0x84a: 0x0b, 0x84b: 0x0b, 0x84c: 0x0b, 0x84d: 0x0b, 0x84e: 0x0b, 0x84f: 0x0b,
- 0x850: 0x0b, 0x851: 0x0b, 0x852: 0x0b, 0x853: 0x0b, 0x854: 0x0b, 0x855: 0x0b, 0x856: 0x0b, 0x857: 0x0b,
- 0x858: 0x0b, 0x859: 0x0b, 0x85a: 0x0b, 0x85b: 0x0b, 0x85c: 0x0b, 0x85d: 0x0b, 0x85e: 0x0b, 0x85f: 0x0b,
- 0x860: 0x1e, 0x861: 0x0b, 0x862: 0x0b, 0x863: 0x0b, 0x864: 0x0b, 0x865: 0x0b, 0x866: 0x0b, 0x867: 0x0b,
- 0x868: 0x0b, 0x869: 0x0b, 0x86a: 0x0b, 0x86b: 0x0b, 0x86c: 0x0b, 0x86d: 0x0b, 0x86e: 0x0b, 0x86f: 0x0b,
- 0x870: 0x0b, 0x871: 0x0b, 0x872: 0x0b, 0x873: 0x0b, 0x874: 0x0b, 0x875: 0x0b, 0x876: 0x0b, 0x877: 0x0b,
- 0x878: 0x0b, 0x879: 0x0b, 0x87a: 0x0b, 0x87b: 0x0b, 0x87c: 0x0b, 0x87d: 0x0b, 0x87e: 0x0b, 0x87f: 0x0b,
+ 0x840: 0x181, 0x841: 0x182, 0x842: 0xba, 0x843: 0xba, 0x844: 0x183, 0x845: 0x183, 0x846: 0x183, 0x847: 0x184,
+ 0x848: 0xba, 0x849: 0xba, 0x84a: 0xba, 0x84b: 0xba, 0x84c: 0xba, 0x84d: 0xba, 0x84e: 0xba, 0x84f: 0xba,
+ 0x850: 0xba, 0x851: 0xba, 0x852: 0xba, 0x853: 0xba, 0x854: 0xba, 0x855: 0xba, 0x856: 0xba, 0x857: 0xba,
+ 0x858: 0xba, 0x859: 0xba, 0x85a: 0xba, 0x85b: 0xba, 0x85c: 0xba, 0x85d: 0xba, 0x85e: 0xba, 0x85f: 0xba,
+ 0x860: 0xba, 0x861: 0xba, 0x862: 0xba, 0x863: 0xba, 0x864: 0xba, 0x865: 0xba, 0x866: 0xba, 0x867: 0xba,
+ 0x868: 0xba, 0x869: 0xba, 0x86a: 0xba, 0x86b: 0xba, 0x86c: 0xba, 0x86d: 0xba, 0x86e: 0xba, 0x86f: 0xba,
+ 0x870: 0xba, 0x871: 0xba, 0x872: 0xba, 0x873: 0xba, 0x874: 0xba, 0x875: 0xba, 0x876: 0xba, 0x877: 0xba,
+ 0x878: 0xba, 0x879: 0xba, 0x87a: 0xba, 0x87b: 0xba, 0x87c: 0xba, 0x87d: 0xba, 0x87e: 0xba, 0x87f: 0xba,
// Block 0x22, offset 0x880
0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b,
0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b,
+ 0x890: 0x0b, 0x891: 0x0b, 0x892: 0x0b, 0x893: 0x0b, 0x894: 0x0b, 0x895: 0x0b, 0x896: 0x0b, 0x897: 0x0b,
+ 0x898: 0x0b, 0x899: 0x0b, 0x89a: 0x0b, 0x89b: 0x0b, 0x89c: 0x0b, 0x89d: 0x0b, 0x89e: 0x0b, 0x89f: 0x0b,
+ 0x8a0: 0x1f, 0x8a1: 0x0b, 0x8a2: 0x0b, 0x8a3: 0x0b, 0x8a4: 0x0b, 0x8a5: 0x0b, 0x8a6: 0x0b, 0x8a7: 0x0b,
+ 0x8a8: 0x0b, 0x8a9: 0x0b, 0x8aa: 0x0b, 0x8ab: 0x0b, 0x8ac: 0x0b, 0x8ad: 0x0b, 0x8ae: 0x0b, 0x8af: 0x0b,
+ 0x8b0: 0x0b, 0x8b1: 0x0b, 0x8b2: 0x0b, 0x8b3: 0x0b, 0x8b4: 0x0b, 0x8b5: 0x0b, 0x8b6: 0x0b, 0x8b7: 0x0b,
+ 0x8b8: 0x0b, 0x8b9: 0x0b, 0x8ba: 0x0b, 0x8bb: 0x0b, 0x8bc: 0x0b, 0x8bd: 0x0b, 0x8be: 0x0b, 0x8bf: 0x0b,
+ // Block 0x23, offset 0x8c0
+ 0x8c0: 0x0b, 0x8c1: 0x0b, 0x8c2: 0x0b, 0x8c3: 0x0b, 0x8c4: 0x0b, 0x8c5: 0x0b, 0x8c6: 0x0b, 0x8c7: 0x0b,
+ 0x8c8: 0x0b, 0x8c9: 0x0b, 0x8ca: 0x0b, 0x8cb: 0x0b, 0x8cc: 0x0b, 0x8cd: 0x0b, 0x8ce: 0x0b, 0x8cf: 0x0b,
}
-// idnaSparseOffset: 256 entries, 512 bytes
-var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x5c, 0x60, 0x6f, 0x74, 0x7b, 0x87, 0x95, 0xa3, 0xa8, 0xb1, 0xc1, 0xcf, 0xdc, 0xe8, 0xf9, 0x103, 0x10a, 0x117, 0x128, 0x12f, 0x13a, 0x149, 0x157, 0x161, 0x163, 0x167, 0x169, 0x175, 0x180, 0x188, 0x18e, 0x194, 0x199, 0x19e, 0x1a1, 0x1a5, 0x1ab, 0x1b0, 0x1bc, 0x1c6, 0x1cc, 0x1dd, 0x1e7, 0x1ea, 0x1f2, 0x1f5, 0x202, 0x20a, 0x20e, 0x215, 0x21d, 0x22d, 0x239, 0x23b, 0x245, 0x251, 0x25d, 0x269, 0x271, 0x276, 0x280, 0x291, 0x295, 0x2a0, 0x2a4, 0x2ad, 0x2b5, 0x2bb, 0x2c0, 0x2c3, 0x2c6, 0x2ca, 0x2d0, 0x2d4, 0x2d8, 0x2de, 0x2e5, 0x2eb, 0x2f3, 0x2fa, 0x305, 0x30f, 0x313, 0x316, 0x31c, 0x320, 0x322, 0x325, 0x327, 0x32a, 0x334, 0x337, 0x346, 0x34a, 0x34f, 0x352, 0x356, 0x35b, 0x360, 0x366, 0x36c, 0x37b, 0x381, 0x385, 0x394, 0x399, 0x3a1, 0x3ab, 0x3b6, 0x3be, 0x3cf, 0x3d8, 0x3e8, 0x3f5, 0x3ff, 0x404, 0x411, 0x415, 0x41a, 0x41c, 0x420, 0x422, 0x426, 0x42f, 0x435, 0x439, 0x449, 0x453, 0x458, 0x45b, 0x461, 0x468, 0x46d, 0x471, 0x477, 0x47c, 0x485, 0x48a, 0x490, 0x497, 0x49e, 0x4a5, 0x4a9, 0x4ae, 0x4b1, 0x4b6, 0x4c2, 0x4c8, 0x4cd, 0x4d4, 0x4dc, 0x4e1, 0x4e5, 0x4f5, 0x4fc, 0x500, 0x504, 0x50b, 0x50e, 0x511, 0x515, 0x519, 0x51f, 0x528, 0x534, 0x53b, 0x544, 0x54c, 0x553, 0x561, 0x56e, 0x57b, 0x584, 0x588, 0x596, 0x59e, 0x5a9, 0x5b2, 0x5b8, 0x5c0, 0x5c9, 0x5d3, 0x5d6, 0x5e2, 0x5e5, 0x5ea, 0x5ed, 0x5f7, 0x600, 0x60c, 0x60f, 0x614, 0x617, 0x61a, 0x61d, 0x624, 0x62b, 0x62f, 0x63a, 0x63d, 0x643, 0x648, 0x64c, 0x64f, 0x652, 0x655, 0x65a, 0x664, 0x667, 0x66b, 0x67a, 0x686, 0x68a, 0x68f, 0x694, 0x698, 0x69d, 0x6a6, 0x6b1, 0x6b7, 0x6bf, 0x6c3, 0x6c7, 0x6cd, 0x6d3, 0x6d8, 0x6db, 0x6e9, 0x6f0, 0x6f3, 0x6f6, 0x6fa, 0x700, 0x705, 0x70f, 0x714, 0x717, 0x71a, 0x71d, 0x720, 0x724, 0x727, 0x737, 0x748, 0x74d, 0x74f, 0x751}
+// idnaSparseOffset: 264 entries, 528 bytes
+var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x4f, 0x5e, 0x63, 0x6b, 0x77, 0x85, 0x8a, 0x93, 0xa3, 0xb1, 0xbd, 0xc9, 0xda, 0xe4, 0xeb, 0xf8, 0x109, 0x110, 0x11b, 0x12a, 0x138, 0x142, 0x144, 0x149, 0x14c, 0x14f, 0x151, 0x15d, 0x168, 0x170, 0x176, 0x17c, 0x181, 0x186, 0x189, 0x18d, 0x193, 0x198, 0x1a4, 0x1ae, 0x1b4, 0x1c5, 0x1cf, 0x1d2, 0x1da, 0x1dd, 0x1ea, 0x1f2, 0x1f6, 0x1fd, 0x205, 0x215, 0x221, 0x223, 0x22d, 0x239, 0x245, 0x251, 0x259, 0x25e, 0x268, 0x279, 0x27d, 0x288, 0x28c, 0x295, 0x29d, 0x2a3, 0x2a8, 0x2ab, 0x2af, 0x2b5, 0x2b9, 0x2bd, 0x2c3, 0x2ca, 0x2d0, 0x2d8, 0x2df, 0x2ea, 0x2f4, 0x2f8, 0x2fb, 0x301, 0x305, 0x307, 0x30a, 0x30c, 0x30f, 0x319, 0x31c, 0x32b, 0x32f, 0x334, 0x337, 0x33b, 0x340, 0x345, 0x34b, 0x351, 0x360, 0x366, 0x36a, 0x379, 0x37e, 0x386, 0x390, 0x39b, 0x3a3, 0x3b4, 0x3bd, 0x3cd, 0x3da, 0x3e4, 0x3e9, 0x3f6, 0x3fa, 0x3ff, 0x401, 0x405, 0x407, 0x40b, 0x414, 0x41a, 0x41e, 0x42e, 0x438, 0x43d, 0x440, 0x446, 0x44d, 0x452, 0x456, 0x45c, 0x461, 0x46a, 0x46f, 0x475, 0x47c, 0x483, 0x48a, 0x48e, 0x493, 0x496, 0x49b, 0x4a7, 0x4ad, 0x4b2, 0x4b9, 0x4c1, 0x4c6, 0x4ca, 0x4da, 0x4e1, 0x4e5, 0x4e9, 0x4f0, 0x4f2, 0x4f5, 0x4f8, 0x4fc, 0x500, 0x506, 0x50f, 0x51b, 0x522, 0x52b, 0x533, 0x53a, 0x548, 0x555, 0x562, 0x56b, 0x56f, 0x57d, 0x585, 0x590, 0x599, 0x59f, 0x5a7, 0x5b0, 0x5ba, 0x5bd, 0x5c9, 0x5cc, 0x5d1, 0x5de, 0x5e7, 0x5f3, 0x5f6, 0x600, 0x609, 0x615, 0x622, 0x62a, 0x62d, 0x632, 0x635, 0x638, 0x63b, 0x642, 0x649, 0x64d, 0x658, 0x65b, 0x661, 0x666, 0x66a, 0x66d, 0x670, 0x673, 0x676, 0x679, 0x67e, 0x688, 0x68b, 0x68f, 0x69e, 0x6aa, 0x6ae, 0x6b3, 0x6b8, 0x6bc, 0x6c1, 0x6ca, 0x6d5, 0x6db, 0x6e3, 0x6e7, 0x6eb, 0x6f1, 0x6f7, 0x6fc, 0x6ff, 0x70f, 0x716, 0x719, 0x71c, 0x720, 0x726, 0x72b, 0x730, 0x735, 0x738, 0x73d, 0x740, 0x743, 0x747, 0x74b, 0x74e, 0x75e, 0x76f, 0x774, 0x776, 0x778}
-// idnaSparseValues: 1876 entries, 7504 bytes
-var idnaSparseValues = [1876]valueRange{
+// idnaSparseValues: 1915 entries, 7660 bytes
+var idnaSparseValues = [1915]valueRange{
// Block 0x0, offset 0x0
{value: 0x0000, lo: 0x07},
{value: 0xe105, lo: 0x80, hi: 0x96},
@@ -2384,7 +2415,7 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0008, lo: 0xb9, hi: 0xbf},
// Block 0x3, offset 0x25
{value: 0x0000, lo: 0x01},
- {value: 0x1308, lo: 0x80, hi: 0xbf},
+ {value: 0x3308, lo: 0x80, hi: 0xbf},
// Block 0x4, offset 0x27
{value: 0x0000, lo: 0x04},
{value: 0x03f5, lo: 0x80, hi: 0x8f},
@@ -2409,155 +2440,123 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0x8b, hi: 0x8c},
{value: 0x0018, lo: 0x8d, hi: 0x8f},
{value: 0x0040, lo: 0x90, hi: 0x90},
- {value: 0x1308, lo: 0x91, hi: 0xbd},
- {value: 0x0018, lo: 0xbe, hi: 0xbe},
- {value: 0x1308, lo: 0xbf, hi: 0xbf},
+ {value: 0x3308, lo: 0x91, hi: 0xbd},
+ {value: 0x0818, lo: 0xbe, hi: 0xbe},
+ {value: 0x3308, lo: 0xbf, hi: 0xbf},
// Block 0x7, offset 0x3f
{value: 0x0000, lo: 0x0b},
- {value: 0x0018, lo: 0x80, hi: 0x80},
- {value: 0x1308, lo: 0x81, hi: 0x82},
- {value: 0x0018, lo: 0x83, hi: 0x83},
- {value: 0x1308, lo: 0x84, hi: 0x85},
- {value: 0x0018, lo: 0x86, hi: 0x86},
- {value: 0x1308, lo: 0x87, hi: 0x87},
+ {value: 0x0818, lo: 0x80, hi: 0x80},
+ {value: 0x3308, lo: 0x81, hi: 0x82},
+ {value: 0x0818, lo: 0x83, hi: 0x83},
+ {value: 0x3308, lo: 0x84, hi: 0x85},
+ {value: 0x0818, lo: 0x86, hi: 0x86},
+ {value: 0x3308, lo: 0x87, hi: 0x87},
{value: 0x0040, lo: 0x88, hi: 0x8f},
- {value: 0x0008, lo: 0x90, hi: 0xaa},
+ {value: 0x0808, lo: 0x90, hi: 0xaa},
{value: 0x0040, lo: 0xab, hi: 0xaf},
- {value: 0x0008, lo: 0xb0, hi: 0xb4},
+ {value: 0x0808, lo: 0xb0, hi: 0xb4},
{value: 0x0040, lo: 0xb5, hi: 0xbf},
// Block 0x8, offset 0x4b
- {value: 0x0000, lo: 0x10},
- {value: 0x0018, lo: 0x80, hi: 0x80},
- {value: 0x0208, lo: 0x81, hi: 0x87},
- {value: 0x0408, lo: 0x88, hi: 0x88},
- {value: 0x0208, lo: 0x89, hi: 0x8a},
- {value: 0x1308, lo: 0x8b, hi: 0x9f},
- {value: 0x0008, lo: 0xa0, hi: 0xa9},
- {value: 0x0018, lo: 0xaa, hi: 0xad},
- {value: 0x0208, lo: 0xae, hi: 0xaf},
- {value: 0x1308, lo: 0xb0, hi: 0xb0},
- {value: 0x0408, lo: 0xb1, hi: 0xb3},
- {value: 0x0008, lo: 0xb4, hi: 0xb4},
- {value: 0x0429, lo: 0xb5, hi: 0xb5},
- {value: 0x0451, lo: 0xb6, hi: 0xb6},
- {value: 0x0479, lo: 0xb7, hi: 0xb7},
- {value: 0x04a1, lo: 0xb8, hi: 0xb8},
- {value: 0x0208, lo: 0xb9, hi: 0xbf},
- // Block 0x9, offset 0x5c
{value: 0x0000, lo: 0x03},
- {value: 0x0208, lo: 0x80, hi: 0x87},
- {value: 0x0408, lo: 0x88, hi: 0x99},
- {value: 0x0208, lo: 0x9a, hi: 0xbf},
- // Block 0xa, offset 0x60
+ {value: 0x0a08, lo: 0x80, hi: 0x87},
+ {value: 0x0c08, lo: 0x88, hi: 0x99},
+ {value: 0x0a08, lo: 0x9a, hi: 0xbf},
+ // Block 0x9, offset 0x4f
{value: 0x0000, lo: 0x0e},
- {value: 0x1308, lo: 0x80, hi: 0x8a},
+ {value: 0x3308, lo: 0x80, hi: 0x8a},
{value: 0x0040, lo: 0x8b, hi: 0x8c},
- {value: 0x0408, lo: 0x8d, hi: 0x8d},
- {value: 0x0208, lo: 0x8e, hi: 0x98},
- {value: 0x0408, lo: 0x99, hi: 0x9b},
- {value: 0x0208, lo: 0x9c, hi: 0xaa},
- {value: 0x0408, lo: 0xab, hi: 0xac},
- {value: 0x0208, lo: 0xad, hi: 0xb0},
- {value: 0x0408, lo: 0xb1, hi: 0xb1},
- {value: 0x0208, lo: 0xb2, hi: 0xb2},
- {value: 0x0408, lo: 0xb3, hi: 0xb4},
- {value: 0x0208, lo: 0xb5, hi: 0xb7},
- {value: 0x0408, lo: 0xb8, hi: 0xb9},
- {value: 0x0208, lo: 0xba, hi: 0xbf},
- // Block 0xb, offset 0x6f
+ {value: 0x0c08, lo: 0x8d, hi: 0x8d},
+ {value: 0x0a08, lo: 0x8e, hi: 0x98},
+ {value: 0x0c08, lo: 0x99, hi: 0x9b},
+ {value: 0x0a08, lo: 0x9c, hi: 0xaa},
+ {value: 0x0c08, lo: 0xab, hi: 0xac},
+ {value: 0x0a08, lo: 0xad, hi: 0xb0},
+ {value: 0x0c08, lo: 0xb1, hi: 0xb1},
+ {value: 0x0a08, lo: 0xb2, hi: 0xb2},
+ {value: 0x0c08, lo: 0xb3, hi: 0xb4},
+ {value: 0x0a08, lo: 0xb5, hi: 0xb7},
+ {value: 0x0c08, lo: 0xb8, hi: 0xb9},
+ {value: 0x0a08, lo: 0xba, hi: 0xbf},
+ // Block 0xa, offset 0x5e
{value: 0x0000, lo: 0x04},
- {value: 0x0008, lo: 0x80, hi: 0xa5},
- {value: 0x1308, lo: 0xa6, hi: 0xb0},
- {value: 0x0008, lo: 0xb1, hi: 0xb1},
+ {value: 0x0808, lo: 0x80, hi: 0xa5},
+ {value: 0x3308, lo: 0xa6, hi: 0xb0},
+ {value: 0x0808, lo: 0xb1, hi: 0xb1},
{value: 0x0040, lo: 0xb2, hi: 0xbf},
- // Block 0xc, offset 0x74
- {value: 0x0000, lo: 0x06},
- {value: 0x0008, lo: 0x80, hi: 0x89},
- {value: 0x0208, lo: 0x8a, hi: 0xaa},
- {value: 0x1308, lo: 0xab, hi: 0xb3},
- {value: 0x0008, lo: 0xb4, hi: 0xb5},
- {value: 0x0018, lo: 0xb6, hi: 0xba},
+ // Block 0xb, offset 0x63
+ {value: 0x0000, lo: 0x07},
+ {value: 0x0808, lo: 0x80, hi: 0x89},
+ {value: 0x0a08, lo: 0x8a, hi: 0xaa},
+ {value: 0x3308, lo: 0xab, hi: 0xb3},
+ {value: 0x0808, lo: 0xb4, hi: 0xb5},
+ {value: 0x0018, lo: 0xb6, hi: 0xb9},
+ {value: 0x0818, lo: 0xba, hi: 0xba},
{value: 0x0040, lo: 0xbb, hi: 0xbf},
- // Block 0xd, offset 0x7b
+ // Block 0xc, offset 0x6b
{value: 0x0000, lo: 0x0b},
- {value: 0x0008, lo: 0x80, hi: 0x95},
- {value: 0x1308, lo: 0x96, hi: 0x99},
- {value: 0x0008, lo: 0x9a, hi: 0x9a},
- {value: 0x1308, lo: 0x9b, hi: 0xa3},
- {value: 0x0008, lo: 0xa4, hi: 0xa4},
- {value: 0x1308, lo: 0xa5, hi: 0xa7},
- {value: 0x0008, lo: 0xa8, hi: 0xa8},
- {value: 0x1308, lo: 0xa9, hi: 0xad},
+ {value: 0x0808, lo: 0x80, hi: 0x95},
+ {value: 0x3308, lo: 0x96, hi: 0x99},
+ {value: 0x0808, lo: 0x9a, hi: 0x9a},
+ {value: 0x3308, lo: 0x9b, hi: 0xa3},
+ {value: 0x0808, lo: 0xa4, hi: 0xa4},
+ {value: 0x3308, lo: 0xa5, hi: 0xa7},
+ {value: 0x0808, lo: 0xa8, hi: 0xa8},
+ {value: 0x3308, lo: 0xa9, hi: 0xad},
{value: 0x0040, lo: 0xae, hi: 0xaf},
- {value: 0x0018, lo: 0xb0, hi: 0xbe},
+ {value: 0x0818, lo: 0xb0, hi: 0xbe},
{value: 0x0040, lo: 0xbf, hi: 0xbf},
- // Block 0xe, offset 0x87
- {value: 0x0000, lo: 0x0d},
- {value: 0x0408, lo: 0x80, hi: 0x80},
- {value: 0x0208, lo: 0x81, hi: 0x85},
- {value: 0x0408, lo: 0x86, hi: 0x87},
- {value: 0x0208, lo: 0x88, hi: 0x88},
- {value: 0x0408, lo: 0x89, hi: 0x89},
- {value: 0x0208, lo: 0x8a, hi: 0x93},
- {value: 0x0408, lo: 0x94, hi: 0x94},
- {value: 0x0208, lo: 0x95, hi: 0x95},
- {value: 0x0008, lo: 0x96, hi: 0x98},
- {value: 0x1308, lo: 0x99, hi: 0x9b},
- {value: 0x0040, lo: 0x9c, hi: 0x9d},
- {value: 0x0018, lo: 0x9e, hi: 0x9e},
- {value: 0x0040, lo: 0x9f, hi: 0xbf},
- // Block 0xf, offset 0x95
+ // Block 0xd, offset 0x77
{value: 0x0000, lo: 0x0d},
{value: 0x0040, lo: 0x80, hi: 0x9f},
- {value: 0x0208, lo: 0xa0, hi: 0xa9},
- {value: 0x0408, lo: 0xaa, hi: 0xac},
- {value: 0x0008, lo: 0xad, hi: 0xad},
- {value: 0x0408, lo: 0xae, hi: 0xae},
- {value: 0x0208, lo: 0xaf, hi: 0xb0},
- {value: 0x0408, lo: 0xb1, hi: 0xb2},
- {value: 0x0208, lo: 0xb3, hi: 0xb4},
+ {value: 0x0a08, lo: 0xa0, hi: 0xa9},
+ {value: 0x0c08, lo: 0xaa, hi: 0xac},
+ {value: 0x0808, lo: 0xad, hi: 0xad},
+ {value: 0x0c08, lo: 0xae, hi: 0xae},
+ {value: 0x0a08, lo: 0xaf, hi: 0xb0},
+ {value: 0x0c08, lo: 0xb1, hi: 0xb2},
+ {value: 0x0a08, lo: 0xb3, hi: 0xb4},
{value: 0x0040, lo: 0xb5, hi: 0xb5},
- {value: 0x0208, lo: 0xb6, hi: 0xb8},
- {value: 0x0408, lo: 0xb9, hi: 0xb9},
- {value: 0x0208, lo: 0xba, hi: 0xbd},
+ {value: 0x0a08, lo: 0xb6, hi: 0xb8},
+ {value: 0x0c08, lo: 0xb9, hi: 0xb9},
+ {value: 0x0a08, lo: 0xba, hi: 0xbd},
{value: 0x0040, lo: 0xbe, hi: 0xbf},
- // Block 0x10, offset 0xa3
+ // Block 0xe, offset 0x85
{value: 0x0000, lo: 0x04},
{value: 0x0040, lo: 0x80, hi: 0x93},
- {value: 0x1308, lo: 0x94, hi: 0xa1},
- {value: 0x0040, lo: 0xa2, hi: 0xa2},
- {value: 0x1308, lo: 0xa3, hi: 0xbf},
- // Block 0x11, offset 0xa8
+ {value: 0x3308, lo: 0x94, hi: 0xa1},
+ {value: 0x0840, lo: 0xa2, hi: 0xa2},
+ {value: 0x3308, lo: 0xa3, hi: 0xbf},
+ // Block 0xf, offset 0x8a
{value: 0x0000, lo: 0x08},
- {value: 0x1308, lo: 0x80, hi: 0x82},
- {value: 0x1008, lo: 0x83, hi: 0x83},
+ {value: 0x3308, lo: 0x80, hi: 0x82},
+ {value: 0x3008, lo: 0x83, hi: 0x83},
{value: 0x0008, lo: 0x84, hi: 0xb9},
- {value: 0x1308, lo: 0xba, hi: 0xba},
- {value: 0x1008, lo: 0xbb, hi: 0xbb},
- {value: 0x1308, lo: 0xbc, hi: 0xbc},
+ {value: 0x3308, lo: 0xba, hi: 0xba},
+ {value: 0x3008, lo: 0xbb, hi: 0xbb},
+ {value: 0x3308, lo: 0xbc, hi: 0xbc},
{value: 0x0008, lo: 0xbd, hi: 0xbd},
- {value: 0x1008, lo: 0xbe, hi: 0xbf},
- // Block 0x12, offset 0xb1
+ {value: 0x3008, lo: 0xbe, hi: 0xbf},
+ // Block 0x10, offset 0x93
{value: 0x0000, lo: 0x0f},
- {value: 0x1308, lo: 0x80, hi: 0x80},
- {value: 0x1008, lo: 0x81, hi: 0x82},
+ {value: 0x3308, lo: 0x80, hi: 0x80},
+ {value: 0x3008, lo: 0x81, hi: 0x82},
{value: 0x0040, lo: 0x83, hi: 0x85},
- {value: 0x1008, lo: 0x86, hi: 0x88},
+ {value: 0x3008, lo: 0x86, hi: 0x88},
{value: 0x0040, lo: 0x89, hi: 0x89},
- {value: 0x1008, lo: 0x8a, hi: 0x8c},
- {value: 0x1b08, lo: 0x8d, hi: 0x8d},
+ {value: 0x3008, lo: 0x8a, hi: 0x8c},
+ {value: 0x3b08, lo: 0x8d, hi: 0x8d},
{value: 0x0040, lo: 0x8e, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x90},
{value: 0x0040, lo: 0x91, hi: 0x96},
- {value: 0x1008, lo: 0x97, hi: 0x97},
+ {value: 0x3008, lo: 0x97, hi: 0x97},
{value: 0x0040, lo: 0x98, hi: 0xa5},
{value: 0x0008, lo: 0xa6, hi: 0xaf},
{value: 0x0018, lo: 0xb0, hi: 0xba},
{value: 0x0040, lo: 0xbb, hi: 0xbf},
- // Block 0x13, offset 0xc1
+ // Block 0x11, offset 0xa3
{value: 0x0000, lo: 0x0d},
- {value: 0x1308, lo: 0x80, hi: 0x80},
- {value: 0x1008, lo: 0x81, hi: 0x83},
+ {value: 0x3308, lo: 0x80, hi: 0x80},
+ {value: 0x3008, lo: 0x81, hi: 0x83},
{value: 0x0040, lo: 0x84, hi: 0x84},
{value: 0x0008, lo: 0x85, hi: 0x8c},
{value: 0x0040, lo: 0x8d, hi: 0x8d},
@@ -2568,25 +2567,24 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0008, lo: 0xaa, hi: 0xb9},
{value: 0x0040, lo: 0xba, hi: 0xbc},
{value: 0x0008, lo: 0xbd, hi: 0xbd},
- {value: 0x1308, lo: 0xbe, hi: 0xbf},
- // Block 0x14, offset 0xcf
- {value: 0x0000, lo: 0x0c},
- {value: 0x0040, lo: 0x80, hi: 0x80},
- {value: 0x1308, lo: 0x81, hi: 0x81},
- {value: 0x1008, lo: 0x82, hi: 0x83},
+ {value: 0x3308, lo: 0xbe, hi: 0xbf},
+ // Block 0x12, offset 0xb1
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x3308, lo: 0x80, hi: 0x81},
+ {value: 0x3008, lo: 0x82, hi: 0x83},
{value: 0x0040, lo: 0x84, hi: 0x84},
{value: 0x0008, lo: 0x85, hi: 0x8c},
{value: 0x0040, lo: 0x8d, hi: 0x8d},
{value: 0x0008, lo: 0x8e, hi: 0x90},
{value: 0x0040, lo: 0x91, hi: 0x91},
{value: 0x0008, lo: 0x92, hi: 0xba},
- {value: 0x0040, lo: 0xbb, hi: 0xbc},
+ {value: 0x3b08, lo: 0xbb, hi: 0xbc},
{value: 0x0008, lo: 0xbd, hi: 0xbd},
- {value: 0x1008, lo: 0xbe, hi: 0xbf},
- // Block 0x15, offset 0xdc
+ {value: 0x3008, lo: 0xbe, hi: 0xbf},
+ // Block 0x13, offset 0xbd
{value: 0x0000, lo: 0x0b},
{value: 0x0040, lo: 0x80, hi: 0x81},
- {value: 0x1008, lo: 0x82, hi: 0x83},
+ {value: 0x3008, lo: 0x82, hi: 0x83},
{value: 0x0040, lo: 0x84, hi: 0x84},
{value: 0x0008, lo: 0x85, hi: 0x96},
{value: 0x0040, lo: 0x97, hi: 0x99},
@@ -2596,50 +2594,50 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0xbc, hi: 0xbc},
{value: 0x0008, lo: 0xbd, hi: 0xbd},
{value: 0x0040, lo: 0xbe, hi: 0xbf},
- // Block 0x16, offset 0xe8
+ // Block 0x14, offset 0xc9
{value: 0x0000, lo: 0x10},
{value: 0x0008, lo: 0x80, hi: 0x86},
{value: 0x0040, lo: 0x87, hi: 0x89},
- {value: 0x1b08, lo: 0x8a, hi: 0x8a},
+ {value: 0x3b08, lo: 0x8a, hi: 0x8a},
{value: 0x0040, lo: 0x8b, hi: 0x8e},
- {value: 0x1008, lo: 0x8f, hi: 0x91},
- {value: 0x1308, lo: 0x92, hi: 0x94},
+ {value: 0x3008, lo: 0x8f, hi: 0x91},
+ {value: 0x3308, lo: 0x92, hi: 0x94},
{value: 0x0040, lo: 0x95, hi: 0x95},
- {value: 0x1308, lo: 0x96, hi: 0x96},
+ {value: 0x3308, lo: 0x96, hi: 0x96},
{value: 0x0040, lo: 0x97, hi: 0x97},
- {value: 0x1008, lo: 0x98, hi: 0x9f},
+ {value: 0x3008, lo: 0x98, hi: 0x9f},
{value: 0x0040, lo: 0xa0, hi: 0xa5},
{value: 0x0008, lo: 0xa6, hi: 0xaf},
{value: 0x0040, lo: 0xb0, hi: 0xb1},
- {value: 0x1008, lo: 0xb2, hi: 0xb3},
+ {value: 0x3008, lo: 0xb2, hi: 0xb3},
{value: 0x0018, lo: 0xb4, hi: 0xb4},
{value: 0x0040, lo: 0xb5, hi: 0xbf},
- // Block 0x17, offset 0xf9
+ // Block 0x15, offset 0xda
{value: 0x0000, lo: 0x09},
{value: 0x0040, lo: 0x80, hi: 0x80},
{value: 0x0008, lo: 0x81, hi: 0xb0},
- {value: 0x1308, lo: 0xb1, hi: 0xb1},
+ {value: 0x3308, lo: 0xb1, hi: 0xb1},
{value: 0x0008, lo: 0xb2, hi: 0xb2},
{value: 0x08f1, lo: 0xb3, hi: 0xb3},
- {value: 0x1308, lo: 0xb4, hi: 0xb9},
- {value: 0x1b08, lo: 0xba, hi: 0xba},
+ {value: 0x3308, lo: 0xb4, hi: 0xb9},
+ {value: 0x3b08, lo: 0xba, hi: 0xba},
{value: 0x0040, lo: 0xbb, hi: 0xbe},
{value: 0x0018, lo: 0xbf, hi: 0xbf},
- // Block 0x18, offset 0x103
+ // Block 0x16, offset 0xe4
{value: 0x0000, lo: 0x06},
{value: 0x0008, lo: 0x80, hi: 0x86},
- {value: 0x1308, lo: 0x87, hi: 0x8e},
+ {value: 0x3308, lo: 0x87, hi: 0x8e},
{value: 0x0018, lo: 0x8f, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x99},
{value: 0x0018, lo: 0x9a, hi: 0x9b},
{value: 0x0040, lo: 0x9c, hi: 0xbf},
- // Block 0x19, offset 0x10a
+ // Block 0x17, offset 0xeb
{value: 0x0000, lo: 0x0c},
{value: 0x0008, lo: 0x80, hi: 0x84},
{value: 0x0040, lo: 0x85, hi: 0x85},
{value: 0x0008, lo: 0x86, hi: 0x86},
{value: 0x0040, lo: 0x87, hi: 0x87},
- {value: 0x1308, lo: 0x88, hi: 0x8d},
+ {value: 0x3308, lo: 0x88, hi: 0x8d},
{value: 0x0040, lo: 0x8e, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0x9b},
@@ -2647,76 +2645,76 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0999, lo: 0x9d, hi: 0x9d},
{value: 0x0008, lo: 0x9e, hi: 0x9f},
{value: 0x0040, lo: 0xa0, hi: 0xbf},
- // Block 0x1a, offset 0x117
+ // Block 0x18, offset 0xf8
{value: 0x0000, lo: 0x10},
{value: 0x0008, lo: 0x80, hi: 0x80},
{value: 0x0018, lo: 0x81, hi: 0x8a},
{value: 0x0008, lo: 0x8b, hi: 0x8b},
{value: 0xe03d, lo: 0x8c, hi: 0x8c},
{value: 0x0018, lo: 0x8d, hi: 0x97},
- {value: 0x1308, lo: 0x98, hi: 0x99},
+ {value: 0x3308, lo: 0x98, hi: 0x99},
{value: 0x0018, lo: 0x9a, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xa9},
{value: 0x0018, lo: 0xaa, hi: 0xb4},
- {value: 0x1308, lo: 0xb5, hi: 0xb5},
+ {value: 0x3308, lo: 0xb5, hi: 0xb5},
{value: 0x0018, lo: 0xb6, hi: 0xb6},
- {value: 0x1308, lo: 0xb7, hi: 0xb7},
+ {value: 0x3308, lo: 0xb7, hi: 0xb7},
{value: 0x0018, lo: 0xb8, hi: 0xb8},
- {value: 0x1308, lo: 0xb9, hi: 0xb9},
+ {value: 0x3308, lo: 0xb9, hi: 0xb9},
{value: 0x0018, lo: 0xba, hi: 0xbd},
- {value: 0x1008, lo: 0xbe, hi: 0xbf},
- // Block 0x1b, offset 0x128
+ {value: 0x3008, lo: 0xbe, hi: 0xbf},
+ // Block 0x19, offset 0x109
{value: 0x0000, lo: 0x06},
{value: 0x0018, lo: 0x80, hi: 0x85},
- {value: 0x1308, lo: 0x86, hi: 0x86},
+ {value: 0x3308, lo: 0x86, hi: 0x86},
{value: 0x0018, lo: 0x87, hi: 0x8c},
{value: 0x0040, lo: 0x8d, hi: 0x8d},
{value: 0x0018, lo: 0x8e, hi: 0x9a},
{value: 0x0040, lo: 0x9b, hi: 0xbf},
- // Block 0x1c, offset 0x12f
+ // Block 0x1a, offset 0x110
{value: 0x0000, lo: 0x0a},
{value: 0x0008, lo: 0x80, hi: 0xaa},
- {value: 0x1008, lo: 0xab, hi: 0xac},
- {value: 0x1308, lo: 0xad, hi: 0xb0},
- {value: 0x1008, lo: 0xb1, hi: 0xb1},
- {value: 0x1308, lo: 0xb2, hi: 0xb7},
- {value: 0x1008, lo: 0xb8, hi: 0xb8},
- {value: 0x1b08, lo: 0xb9, hi: 0xba},
- {value: 0x1008, lo: 0xbb, hi: 0xbc},
- {value: 0x1308, lo: 0xbd, hi: 0xbe},
+ {value: 0x3008, lo: 0xab, hi: 0xac},
+ {value: 0x3308, lo: 0xad, hi: 0xb0},
+ {value: 0x3008, lo: 0xb1, hi: 0xb1},
+ {value: 0x3308, lo: 0xb2, hi: 0xb7},
+ {value: 0x3008, lo: 0xb8, hi: 0xb8},
+ {value: 0x3b08, lo: 0xb9, hi: 0xba},
+ {value: 0x3008, lo: 0xbb, hi: 0xbc},
+ {value: 0x3308, lo: 0xbd, hi: 0xbe},
{value: 0x0008, lo: 0xbf, hi: 0xbf},
- // Block 0x1d, offset 0x13a
+ // Block 0x1b, offset 0x11b
{value: 0x0000, lo: 0x0e},
{value: 0x0008, lo: 0x80, hi: 0x89},
{value: 0x0018, lo: 0x8a, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x95},
- {value: 0x1008, lo: 0x96, hi: 0x97},
- {value: 0x1308, lo: 0x98, hi: 0x99},
+ {value: 0x3008, lo: 0x96, hi: 0x97},
+ {value: 0x3308, lo: 0x98, hi: 0x99},
{value: 0x0008, lo: 0x9a, hi: 0x9d},
- {value: 0x1308, lo: 0x9e, hi: 0xa0},
+ {value: 0x3308, lo: 0x9e, hi: 0xa0},
{value: 0x0008, lo: 0xa1, hi: 0xa1},
- {value: 0x1008, lo: 0xa2, hi: 0xa4},
+ {value: 0x3008, lo: 0xa2, hi: 0xa4},
{value: 0x0008, lo: 0xa5, hi: 0xa6},
- {value: 0x1008, lo: 0xa7, hi: 0xad},
+ {value: 0x3008, lo: 0xa7, hi: 0xad},
{value: 0x0008, lo: 0xae, hi: 0xb0},
- {value: 0x1308, lo: 0xb1, hi: 0xb4},
+ {value: 0x3308, lo: 0xb1, hi: 0xb4},
{value: 0x0008, lo: 0xb5, hi: 0xbf},
- // Block 0x1e, offset 0x149
+ // Block 0x1c, offset 0x12a
{value: 0x0000, lo: 0x0d},
{value: 0x0008, lo: 0x80, hi: 0x81},
- {value: 0x1308, lo: 0x82, hi: 0x82},
- {value: 0x1008, lo: 0x83, hi: 0x84},
- {value: 0x1308, lo: 0x85, hi: 0x86},
- {value: 0x1008, lo: 0x87, hi: 0x8c},
- {value: 0x1308, lo: 0x8d, hi: 0x8d},
+ {value: 0x3308, lo: 0x82, hi: 0x82},
+ {value: 0x3008, lo: 0x83, hi: 0x84},
+ {value: 0x3308, lo: 0x85, hi: 0x86},
+ {value: 0x3008, lo: 0x87, hi: 0x8c},
+ {value: 0x3308, lo: 0x8d, hi: 0x8d},
{value: 0x0008, lo: 0x8e, hi: 0x8e},
- {value: 0x1008, lo: 0x8f, hi: 0x8f},
+ {value: 0x3008, lo: 0x8f, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x99},
- {value: 0x1008, lo: 0x9a, hi: 0x9c},
- {value: 0x1308, lo: 0x9d, hi: 0x9d},
+ {value: 0x3008, lo: 0x9a, hi: 0x9c},
+ {value: 0x3308, lo: 0x9d, hi: 0x9d},
{value: 0x0018, lo: 0x9e, hi: 0x9f},
{value: 0x0040, lo: 0xa0, hi: 0xbf},
- // Block 0x1f, offset 0x157
+ // Block 0x1d, offset 0x138
{value: 0x0000, lo: 0x09},
{value: 0x0040, lo: 0x80, hi: 0x86},
{value: 0x055d, lo: 0x87, hi: 0x87},
@@ -2727,18 +2725,27 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0018, lo: 0xbb, hi: 0xbb},
{value: 0xe105, lo: 0xbc, hi: 0xbc},
{value: 0x0008, lo: 0xbd, hi: 0xbf},
- // Block 0x20, offset 0x161
+ // Block 0x1e, offset 0x142
{value: 0x0000, lo: 0x01},
{value: 0x0018, lo: 0x80, hi: 0xbf},
- // Block 0x21, offset 0x163
- {value: 0x0000, lo: 0x03},
+ // Block 0x1f, offset 0x144
+ {value: 0x0000, lo: 0x04},
{value: 0x0018, lo: 0x80, hi: 0x9e},
{value: 0x0040, lo: 0x9f, hi: 0xa0},
- {value: 0x0018, lo: 0xa1, hi: 0xbf},
- // Block 0x22, offset 0x167
+ {value: 0x2018, lo: 0xa1, hi: 0xb5},
+ {value: 0x0018, lo: 0xb6, hi: 0xbf},
+ // Block 0x20, offset 0x149
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0018, lo: 0x80, hi: 0xa7},
+ {value: 0x2018, lo: 0xa8, hi: 0xbf},
+ // Block 0x21, offset 0x14c
+ {value: 0x0000, lo: 0x02},
+ {value: 0x2018, lo: 0x80, hi: 0x82},
+ {value: 0x0018, lo: 0x83, hi: 0xbf},
+ // Block 0x22, offset 0x14f
{value: 0x0000, lo: 0x01},
{value: 0x0008, lo: 0x80, hi: 0xbf},
- // Block 0x23, offset 0x169
+ // Block 0x23, offset 0x151
{value: 0x0000, lo: 0x0b},
{value: 0x0008, lo: 0x80, hi: 0x88},
{value: 0x0040, lo: 0x89, hi: 0x89},
@@ -2751,7 +2758,7 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0008, lo: 0x9a, hi: 0x9d},
{value: 0x0040, lo: 0x9e, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xbf},
- // Block 0x24, offset 0x175
+ // Block 0x24, offset 0x15d
{value: 0x0000, lo: 0x0a},
{value: 0x0008, lo: 0x80, hi: 0x88},
{value: 0x0040, lo: 0x89, hi: 0x89},
@@ -2763,7 +2770,7 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0xb6, hi: 0xb7},
{value: 0x0008, lo: 0xb8, hi: 0xbe},
{value: 0x0040, lo: 0xbf, hi: 0xbf},
- // Block 0x25, offset 0x180
+ // Block 0x25, offset 0x168
{value: 0x0000, lo: 0x07},
{value: 0x0008, lo: 0x80, hi: 0x80},
{value: 0x0040, lo: 0x81, hi: 0x81},
@@ -2772,146 +2779,146 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0008, lo: 0x88, hi: 0x96},
{value: 0x0040, lo: 0x97, hi: 0x97},
{value: 0x0008, lo: 0x98, hi: 0xbf},
- // Block 0x26, offset 0x188
+ // Block 0x26, offset 0x170
{value: 0x0000, lo: 0x05},
{value: 0x0008, lo: 0x80, hi: 0x90},
{value: 0x0040, lo: 0x91, hi: 0x91},
{value: 0x0008, lo: 0x92, hi: 0x95},
{value: 0x0040, lo: 0x96, hi: 0x97},
{value: 0x0008, lo: 0x98, hi: 0xbf},
- // Block 0x27, offset 0x18e
+ // Block 0x27, offset 0x176
{value: 0x0000, lo: 0x05},
{value: 0x0008, lo: 0x80, hi: 0x9a},
{value: 0x0040, lo: 0x9b, hi: 0x9c},
- {value: 0x1308, lo: 0x9d, hi: 0x9f},
+ {value: 0x3308, lo: 0x9d, hi: 0x9f},
{value: 0x0018, lo: 0xa0, hi: 0xbc},
{value: 0x0040, lo: 0xbd, hi: 0xbf},
- // Block 0x28, offset 0x194
+ // Block 0x28, offset 0x17c
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0x8f},
{value: 0x0018, lo: 0x90, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xbf},
- // Block 0x29, offset 0x199
+ // Block 0x29, offset 0x181
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0xb5},
{value: 0x0040, lo: 0xb6, hi: 0xb7},
{value: 0xe045, lo: 0xb8, hi: 0xbd},
{value: 0x0040, lo: 0xbe, hi: 0xbf},
- // Block 0x2a, offset 0x19e
+ // Block 0x2a, offset 0x186
{value: 0x0000, lo: 0x02},
{value: 0x0018, lo: 0x80, hi: 0x80},
{value: 0x0008, lo: 0x81, hi: 0xbf},
- // Block 0x2b, offset 0x1a1
+ // Block 0x2b, offset 0x189
{value: 0x0000, lo: 0x03},
{value: 0x0008, lo: 0x80, hi: 0xac},
{value: 0x0018, lo: 0xad, hi: 0xae},
{value: 0x0008, lo: 0xaf, hi: 0xbf},
- // Block 0x2c, offset 0x1a5
+ // Block 0x2c, offset 0x18d
{value: 0x0000, lo: 0x05},
{value: 0x0040, lo: 0x80, hi: 0x80},
{value: 0x0008, lo: 0x81, hi: 0x9a},
{value: 0x0018, lo: 0x9b, hi: 0x9c},
{value: 0x0040, lo: 0x9d, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xbf},
- // Block 0x2d, offset 0x1ab
+ // Block 0x2d, offset 0x193
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0xaa},
{value: 0x0018, lo: 0xab, hi: 0xb0},
{value: 0x0008, lo: 0xb1, hi: 0xb8},
{value: 0x0040, lo: 0xb9, hi: 0xbf},
- // Block 0x2e, offset 0x1b0
+ // Block 0x2e, offset 0x198
{value: 0x0000, lo: 0x0b},
{value: 0x0008, lo: 0x80, hi: 0x8c},
{value: 0x0040, lo: 0x8d, hi: 0x8d},
{value: 0x0008, lo: 0x8e, hi: 0x91},
- {value: 0x1308, lo: 0x92, hi: 0x93},
- {value: 0x1b08, lo: 0x94, hi: 0x94},
+ {value: 0x3308, lo: 0x92, hi: 0x93},
+ {value: 0x3b08, lo: 0x94, hi: 0x94},
{value: 0x0040, lo: 0x95, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xb1},
- {value: 0x1308, lo: 0xb2, hi: 0xb3},
- {value: 0x1b08, lo: 0xb4, hi: 0xb4},
+ {value: 0x3308, lo: 0xb2, hi: 0xb3},
+ {value: 0x3b08, lo: 0xb4, hi: 0xb4},
{value: 0x0018, lo: 0xb5, hi: 0xb6},
{value: 0x0040, lo: 0xb7, hi: 0xbf},
- // Block 0x2f, offset 0x1bc
+ // Block 0x2f, offset 0x1a4
{value: 0x0000, lo: 0x09},
{value: 0x0008, lo: 0x80, hi: 0x91},
- {value: 0x1308, lo: 0x92, hi: 0x93},
+ {value: 0x3308, lo: 0x92, hi: 0x93},
{value: 0x0040, lo: 0x94, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xac},
{value: 0x0040, lo: 0xad, hi: 0xad},
{value: 0x0008, lo: 0xae, hi: 0xb0},
{value: 0x0040, lo: 0xb1, hi: 0xb1},
- {value: 0x1308, lo: 0xb2, hi: 0xb3},
+ {value: 0x3308, lo: 0xb2, hi: 0xb3},
{value: 0x0040, lo: 0xb4, hi: 0xbf},
- // Block 0x30, offset 0x1c6
+ // Block 0x30, offset 0x1ae
{value: 0x0000, lo: 0x05},
{value: 0x0008, lo: 0x80, hi: 0xb3},
- {value: 0x1340, lo: 0xb4, hi: 0xb5},
- {value: 0x1008, lo: 0xb6, hi: 0xb6},
- {value: 0x1308, lo: 0xb7, hi: 0xbd},
- {value: 0x1008, lo: 0xbe, hi: 0xbf},
- // Block 0x31, offset 0x1cc
+ {value: 0x3340, lo: 0xb4, hi: 0xb5},
+ {value: 0x3008, lo: 0xb6, hi: 0xb6},
+ {value: 0x3308, lo: 0xb7, hi: 0xbd},
+ {value: 0x3008, lo: 0xbe, hi: 0xbf},
+ // Block 0x31, offset 0x1b4
{value: 0x0000, lo: 0x10},
- {value: 0x1008, lo: 0x80, hi: 0x85},
- {value: 0x1308, lo: 0x86, hi: 0x86},
- {value: 0x1008, lo: 0x87, hi: 0x88},
- {value: 0x1308, lo: 0x89, hi: 0x91},
- {value: 0x1b08, lo: 0x92, hi: 0x92},
- {value: 0x1308, lo: 0x93, hi: 0x93},
+ {value: 0x3008, lo: 0x80, hi: 0x85},
+ {value: 0x3308, lo: 0x86, hi: 0x86},
+ {value: 0x3008, lo: 0x87, hi: 0x88},
+ {value: 0x3308, lo: 0x89, hi: 0x91},
+ {value: 0x3b08, lo: 0x92, hi: 0x92},
+ {value: 0x3308, lo: 0x93, hi: 0x93},
{value: 0x0018, lo: 0x94, hi: 0x96},
{value: 0x0008, lo: 0x97, hi: 0x97},
{value: 0x0018, lo: 0x98, hi: 0x9b},
{value: 0x0008, lo: 0x9c, hi: 0x9c},
- {value: 0x1308, lo: 0x9d, hi: 0x9d},
+ {value: 0x3308, lo: 0x9d, hi: 0x9d},
{value: 0x0040, lo: 0x9e, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xa9},
{value: 0x0040, lo: 0xaa, hi: 0xaf},
{value: 0x0018, lo: 0xb0, hi: 0xb9},
{value: 0x0040, lo: 0xba, hi: 0xbf},
- // Block 0x32, offset 0x1dd
+ // Block 0x32, offset 0x1c5
{value: 0x0000, lo: 0x09},
{value: 0x0018, lo: 0x80, hi: 0x85},
{value: 0x0040, lo: 0x86, hi: 0x86},
{value: 0x0218, lo: 0x87, hi: 0x87},
{value: 0x0018, lo: 0x88, hi: 0x8a},
- {value: 0x13c0, lo: 0x8b, hi: 0x8d},
+ {value: 0x33c0, lo: 0x8b, hi: 0x8d},
{value: 0x0040, lo: 0x8e, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0x9f},
{value: 0x0208, lo: 0xa0, hi: 0xbf},
- // Block 0x33, offset 0x1e7
+ // Block 0x33, offset 0x1cf
{value: 0x0000, lo: 0x02},
{value: 0x0208, lo: 0x80, hi: 0xb7},
{value: 0x0040, lo: 0xb8, hi: 0xbf},
- // Block 0x34, offset 0x1ea
+ // Block 0x34, offset 0x1d2
{value: 0x0000, lo: 0x07},
{value: 0x0008, lo: 0x80, hi: 0x84},
- {value: 0x1308, lo: 0x85, hi: 0x86},
+ {value: 0x3308, lo: 0x85, hi: 0x86},
{value: 0x0208, lo: 0x87, hi: 0xa8},
- {value: 0x1308, lo: 0xa9, hi: 0xa9},
+ {value: 0x3308, lo: 0xa9, hi: 0xa9},
{value: 0x0208, lo: 0xaa, hi: 0xaa},
{value: 0x0040, lo: 0xab, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xbf},
- // Block 0x35, offset 0x1f2
+ // Block 0x35, offset 0x1da
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0xb5},
{value: 0x0040, lo: 0xb6, hi: 0xbf},
- // Block 0x36, offset 0x1f5
+ // Block 0x36, offset 0x1dd
{value: 0x0000, lo: 0x0c},
{value: 0x0008, lo: 0x80, hi: 0x9e},
{value: 0x0040, lo: 0x9f, hi: 0x9f},
- {value: 0x1308, lo: 0xa0, hi: 0xa2},
- {value: 0x1008, lo: 0xa3, hi: 0xa6},
- {value: 0x1308, lo: 0xa7, hi: 0xa8},
- {value: 0x1008, lo: 0xa9, hi: 0xab},
+ {value: 0x3308, lo: 0xa0, hi: 0xa2},
+ {value: 0x3008, lo: 0xa3, hi: 0xa6},
+ {value: 0x3308, lo: 0xa7, hi: 0xa8},
+ {value: 0x3008, lo: 0xa9, hi: 0xab},
{value: 0x0040, lo: 0xac, hi: 0xaf},
- {value: 0x1008, lo: 0xb0, hi: 0xb1},
- {value: 0x1308, lo: 0xb2, hi: 0xb2},
- {value: 0x1008, lo: 0xb3, hi: 0xb8},
- {value: 0x1308, lo: 0xb9, hi: 0xbb},
+ {value: 0x3008, lo: 0xb0, hi: 0xb1},
+ {value: 0x3308, lo: 0xb2, hi: 0xb2},
+ {value: 0x3008, lo: 0xb3, hi: 0xb8},
+ {value: 0x3308, lo: 0xb9, hi: 0xbb},
{value: 0x0040, lo: 0xbc, hi: 0xbf},
- // Block 0x37, offset 0x202
+ // Block 0x37, offset 0x1ea
{value: 0x0000, lo: 0x07},
{value: 0x0018, lo: 0x80, hi: 0x80},
{value: 0x0040, lo: 0x81, hi: 0x83},
@@ -2920,12 +2927,12 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0xae, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xb4},
{value: 0x0040, lo: 0xb5, hi: 0xbf},
- // Block 0x38, offset 0x20a
+ // Block 0x38, offset 0x1f2
{value: 0x0000, lo: 0x03},
{value: 0x0008, lo: 0x80, hi: 0xab},
{value: 0x0040, lo: 0xac, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xbf},
- // Block 0x39, offset 0x20e
+ // Block 0x39, offset 0x1f6
{value: 0x0000, lo: 0x06},
{value: 0x0008, lo: 0x80, hi: 0x89},
{value: 0x0040, lo: 0x8a, hi: 0x8f},
@@ -2933,33 +2940,33 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0028, lo: 0x9a, hi: 0x9a},
{value: 0x0040, lo: 0x9b, hi: 0x9d},
{value: 0x0018, lo: 0x9e, hi: 0xbf},
- // Block 0x3a, offset 0x215
+ // Block 0x3a, offset 0x1fd
{value: 0x0000, lo: 0x07},
{value: 0x0008, lo: 0x80, hi: 0x96},
- {value: 0x1308, lo: 0x97, hi: 0x98},
- {value: 0x1008, lo: 0x99, hi: 0x9a},
- {value: 0x1308, lo: 0x9b, hi: 0x9b},
+ {value: 0x3308, lo: 0x97, hi: 0x98},
+ {value: 0x3008, lo: 0x99, hi: 0x9a},
+ {value: 0x3308, lo: 0x9b, hi: 0x9b},
{value: 0x0040, lo: 0x9c, hi: 0x9d},
{value: 0x0018, lo: 0x9e, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xbf},
- // Block 0x3b, offset 0x21d
+ // Block 0x3b, offset 0x205
{value: 0x0000, lo: 0x0f},
{value: 0x0008, lo: 0x80, hi: 0x94},
- {value: 0x1008, lo: 0x95, hi: 0x95},
- {value: 0x1308, lo: 0x96, hi: 0x96},
- {value: 0x1008, lo: 0x97, hi: 0x97},
- {value: 0x1308, lo: 0x98, hi: 0x9e},
+ {value: 0x3008, lo: 0x95, hi: 0x95},
+ {value: 0x3308, lo: 0x96, hi: 0x96},
+ {value: 0x3008, lo: 0x97, hi: 0x97},
+ {value: 0x3308, lo: 0x98, hi: 0x9e},
{value: 0x0040, lo: 0x9f, hi: 0x9f},
- {value: 0x1b08, lo: 0xa0, hi: 0xa0},
- {value: 0x1008, lo: 0xa1, hi: 0xa1},
- {value: 0x1308, lo: 0xa2, hi: 0xa2},
- {value: 0x1008, lo: 0xa3, hi: 0xa4},
- {value: 0x1308, lo: 0xa5, hi: 0xac},
- {value: 0x1008, lo: 0xad, hi: 0xb2},
- {value: 0x1308, lo: 0xb3, hi: 0xbc},
+ {value: 0x3b08, lo: 0xa0, hi: 0xa0},
+ {value: 0x3008, lo: 0xa1, hi: 0xa1},
+ {value: 0x3308, lo: 0xa2, hi: 0xa2},
+ {value: 0x3008, lo: 0xa3, hi: 0xa4},
+ {value: 0x3308, lo: 0xa5, hi: 0xac},
+ {value: 0x3008, lo: 0xad, hi: 0xb2},
+ {value: 0x3308, lo: 0xb3, hi: 0xbc},
{value: 0x0040, lo: 0xbd, hi: 0xbe},
- {value: 0x1308, lo: 0xbf, hi: 0xbf},
- // Block 0x3c, offset 0x22d
+ {value: 0x3308, lo: 0xbf, hi: 0xbf},
+ // Block 0x3c, offset 0x215
{value: 0x0000, lo: 0x0b},
{value: 0x0008, lo: 0x80, hi: 0x89},
{value: 0x0040, lo: 0x8a, hi: 0x8f},
@@ -2969,78 +2976,78 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0008, lo: 0xa7, hi: 0xa7},
{value: 0x0018, lo: 0xa8, hi: 0xad},
{value: 0x0040, lo: 0xae, hi: 0xaf},
- {value: 0x1308, lo: 0xb0, hi: 0xbd},
- {value: 0x1318, lo: 0xbe, hi: 0xbe},
+ {value: 0x3308, lo: 0xb0, hi: 0xbd},
+ {value: 0x3318, lo: 0xbe, hi: 0xbe},
{value: 0x0040, lo: 0xbf, hi: 0xbf},
- // Block 0x3d, offset 0x239
+ // Block 0x3d, offset 0x221
{value: 0x0000, lo: 0x01},
{value: 0x0040, lo: 0x80, hi: 0xbf},
- // Block 0x3e, offset 0x23b
+ // Block 0x3e, offset 0x223
{value: 0x0000, lo: 0x09},
- {value: 0x1308, lo: 0x80, hi: 0x83},
- {value: 0x1008, lo: 0x84, hi: 0x84},
+ {value: 0x3308, lo: 0x80, hi: 0x83},
+ {value: 0x3008, lo: 0x84, hi: 0x84},
{value: 0x0008, lo: 0x85, hi: 0xb3},
- {value: 0x1308, lo: 0xb4, hi: 0xb4},
- {value: 0x1008, lo: 0xb5, hi: 0xb5},
- {value: 0x1308, lo: 0xb6, hi: 0xba},
- {value: 0x1008, lo: 0xbb, hi: 0xbb},
- {value: 0x1308, lo: 0xbc, hi: 0xbc},
- {value: 0x1008, lo: 0xbd, hi: 0xbf},
- // Block 0x3f, offset 0x245
+ {value: 0x3308, lo: 0xb4, hi: 0xb4},
+ {value: 0x3008, lo: 0xb5, hi: 0xb5},
+ {value: 0x3308, lo: 0xb6, hi: 0xba},
+ {value: 0x3008, lo: 0xbb, hi: 0xbb},
+ {value: 0x3308, lo: 0xbc, hi: 0xbc},
+ {value: 0x3008, lo: 0xbd, hi: 0xbf},
+ // Block 0x3f, offset 0x22d
{value: 0x0000, lo: 0x0b},
- {value: 0x1008, lo: 0x80, hi: 0x81},
- {value: 0x1308, lo: 0x82, hi: 0x82},
- {value: 0x1008, lo: 0x83, hi: 0x83},
- {value: 0x1808, lo: 0x84, hi: 0x84},
+ {value: 0x3008, lo: 0x80, hi: 0x81},
+ {value: 0x3308, lo: 0x82, hi: 0x82},
+ {value: 0x3008, lo: 0x83, hi: 0x83},
+ {value: 0x3808, lo: 0x84, hi: 0x84},
{value: 0x0008, lo: 0x85, hi: 0x8b},
{value: 0x0040, lo: 0x8c, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x99},
{value: 0x0018, lo: 0x9a, hi: 0xaa},
- {value: 0x1308, lo: 0xab, hi: 0xb3},
+ {value: 0x3308, lo: 0xab, hi: 0xb3},
{value: 0x0018, lo: 0xb4, hi: 0xbc},
{value: 0x0040, lo: 0xbd, hi: 0xbf},
- // Block 0x40, offset 0x251
+ // Block 0x40, offset 0x239
{value: 0x0000, lo: 0x0b},
- {value: 0x1308, lo: 0x80, hi: 0x81},
- {value: 0x1008, lo: 0x82, hi: 0x82},
+ {value: 0x3308, lo: 0x80, hi: 0x81},
+ {value: 0x3008, lo: 0x82, hi: 0x82},
{value: 0x0008, lo: 0x83, hi: 0xa0},
- {value: 0x1008, lo: 0xa1, hi: 0xa1},
- {value: 0x1308, lo: 0xa2, hi: 0xa5},
- {value: 0x1008, lo: 0xa6, hi: 0xa7},
- {value: 0x1308, lo: 0xa8, hi: 0xa9},
- {value: 0x1808, lo: 0xaa, hi: 0xaa},
- {value: 0x1b08, lo: 0xab, hi: 0xab},
- {value: 0x1308, lo: 0xac, hi: 0xad},
+ {value: 0x3008, lo: 0xa1, hi: 0xa1},
+ {value: 0x3308, lo: 0xa2, hi: 0xa5},
+ {value: 0x3008, lo: 0xa6, hi: 0xa7},
+ {value: 0x3308, lo: 0xa8, hi: 0xa9},
+ {value: 0x3808, lo: 0xaa, hi: 0xaa},
+ {value: 0x3b08, lo: 0xab, hi: 0xab},
+ {value: 0x3308, lo: 0xac, hi: 0xad},
{value: 0x0008, lo: 0xae, hi: 0xbf},
- // Block 0x41, offset 0x25d
+ // Block 0x41, offset 0x245
{value: 0x0000, lo: 0x0b},
{value: 0x0008, lo: 0x80, hi: 0xa5},
- {value: 0x1308, lo: 0xa6, hi: 0xa6},
- {value: 0x1008, lo: 0xa7, hi: 0xa7},
- {value: 0x1308, lo: 0xa8, hi: 0xa9},
- {value: 0x1008, lo: 0xaa, hi: 0xac},
- {value: 0x1308, lo: 0xad, hi: 0xad},
- {value: 0x1008, lo: 0xae, hi: 0xae},
- {value: 0x1308, lo: 0xaf, hi: 0xb1},
- {value: 0x1808, lo: 0xb2, hi: 0xb3},
+ {value: 0x3308, lo: 0xa6, hi: 0xa6},
+ {value: 0x3008, lo: 0xa7, hi: 0xa7},
+ {value: 0x3308, lo: 0xa8, hi: 0xa9},
+ {value: 0x3008, lo: 0xaa, hi: 0xac},
+ {value: 0x3308, lo: 0xad, hi: 0xad},
+ {value: 0x3008, lo: 0xae, hi: 0xae},
+ {value: 0x3308, lo: 0xaf, hi: 0xb1},
+ {value: 0x3808, lo: 0xb2, hi: 0xb3},
{value: 0x0040, lo: 0xb4, hi: 0xbb},
{value: 0x0018, lo: 0xbc, hi: 0xbf},
- // Block 0x42, offset 0x269
+ // Block 0x42, offset 0x251
{value: 0x0000, lo: 0x07},
{value: 0x0008, lo: 0x80, hi: 0xa3},
- {value: 0x1008, lo: 0xa4, hi: 0xab},
- {value: 0x1308, lo: 0xac, hi: 0xb3},
- {value: 0x1008, lo: 0xb4, hi: 0xb5},
- {value: 0x1308, lo: 0xb6, hi: 0xb7},
+ {value: 0x3008, lo: 0xa4, hi: 0xab},
+ {value: 0x3308, lo: 0xac, hi: 0xb3},
+ {value: 0x3008, lo: 0xb4, hi: 0xb5},
+ {value: 0x3308, lo: 0xb6, hi: 0xb7},
{value: 0x0040, lo: 0xb8, hi: 0xba},
{value: 0x0018, lo: 0xbb, hi: 0xbf},
- // Block 0x43, offset 0x271
+ // Block 0x43, offset 0x259
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0x89},
{value: 0x0040, lo: 0x8a, hi: 0x8c},
{value: 0x0008, lo: 0x8d, hi: 0xbd},
{value: 0x0018, lo: 0xbe, hi: 0xbf},
- // Block 0x44, offset 0x276
+ // Block 0x44, offset 0x25e
{value: 0x0000, lo: 0x09},
{value: 0x0e29, lo: 0x80, hi: 0x80},
{value: 0x0e41, lo: 0x81, hi: 0x81},
@@ -3051,30 +3058,30 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0eb9, lo: 0x87, hi: 0x87},
{value: 0x057d, lo: 0x88, hi: 0x88},
{value: 0x0040, lo: 0x89, hi: 0xbf},
- // Block 0x45, offset 0x280
+ // Block 0x45, offset 0x268
{value: 0x0000, lo: 0x10},
{value: 0x0018, lo: 0x80, hi: 0x87},
{value: 0x0040, lo: 0x88, hi: 0x8f},
- {value: 0x1308, lo: 0x90, hi: 0x92},
+ {value: 0x3308, lo: 0x90, hi: 0x92},
{value: 0x0018, lo: 0x93, hi: 0x93},
- {value: 0x1308, lo: 0x94, hi: 0xa0},
- {value: 0x1008, lo: 0xa1, hi: 0xa1},
- {value: 0x1308, lo: 0xa2, hi: 0xa8},
+ {value: 0x3308, lo: 0x94, hi: 0xa0},
+ {value: 0x3008, lo: 0xa1, hi: 0xa1},
+ {value: 0x3308, lo: 0xa2, hi: 0xa8},
{value: 0x0008, lo: 0xa9, hi: 0xac},
- {value: 0x1308, lo: 0xad, hi: 0xad},
+ {value: 0x3308, lo: 0xad, hi: 0xad},
{value: 0x0008, lo: 0xae, hi: 0xb1},
- {value: 0x1008, lo: 0xb2, hi: 0xb3},
- {value: 0x1308, lo: 0xb4, hi: 0xb4},
+ {value: 0x3008, lo: 0xb2, hi: 0xb3},
+ {value: 0x3308, lo: 0xb4, hi: 0xb4},
{value: 0x0008, lo: 0xb5, hi: 0xb6},
- {value: 0x0040, lo: 0xb7, hi: 0xb7},
- {value: 0x1308, lo: 0xb8, hi: 0xb9},
+ {value: 0x3008, lo: 0xb7, hi: 0xb7},
+ {value: 0x3308, lo: 0xb8, hi: 0xb9},
{value: 0x0040, lo: 0xba, hi: 0xbf},
- // Block 0x46, offset 0x291
+ // Block 0x46, offset 0x279
{value: 0x0000, lo: 0x03},
- {value: 0x1308, lo: 0x80, hi: 0xb5},
- {value: 0x0040, lo: 0xb6, hi: 0xba},
- {value: 0x1308, lo: 0xbb, hi: 0xbf},
- // Block 0x47, offset 0x295
+ {value: 0x3308, lo: 0x80, hi: 0xb9},
+ {value: 0x0040, lo: 0xba, hi: 0xba},
+ {value: 0x3308, lo: 0xbb, hi: 0xbf},
+ // Block 0x47, offset 0x27d
{value: 0x0000, lo: 0x0a},
{value: 0x0008, lo: 0x80, hi: 0x87},
{value: 0xe045, lo: 0x88, hi: 0x8f},
@@ -3086,12 +3093,12 @@ var idnaSparseValues = [1876]valueRange{
{value: 0xe045, lo: 0xa8, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xb7},
{value: 0xe045, lo: 0xb8, hi: 0xbf},
- // Block 0x48, offset 0x2a0
+ // Block 0x48, offset 0x288
{value: 0x0000, lo: 0x03},
{value: 0x0040, lo: 0x80, hi: 0x8f},
- {value: 0x1318, lo: 0x90, hi: 0xb0},
+ {value: 0x3318, lo: 0x90, hi: 0xb0},
{value: 0x0040, lo: 0xb1, hi: 0xbf},
- // Block 0x49, offset 0x2a4
+ // Block 0x49, offset 0x28c
{value: 0x0000, lo: 0x08},
{value: 0x0018, lo: 0x80, hi: 0x82},
{value: 0x0040, lo: 0x83, hi: 0x83},
@@ -3101,7 +3108,7 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0018, lo: 0x8a, hi: 0x8b},
{value: 0x0040, lo: 0x8c, hi: 0x8f},
{value: 0x0018, lo: 0x90, hi: 0xbf},
- // Block 0x4a, offset 0x2ad
+ // Block 0x4a, offset 0x295
{value: 0x0000, lo: 0x07},
{value: 0x0018, lo: 0x80, hi: 0xab},
{value: 0x24f1, lo: 0xac, hi: 0xac},
@@ -3110,72 +3117,68 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x2579, lo: 0xaf, hi: 0xaf},
{value: 0x25b1, lo: 0xb0, hi: 0xb0},
{value: 0x0018, lo: 0xb1, hi: 0xbf},
- // Block 0x4b, offset 0x2b5
+ // Block 0x4b, offset 0x29d
{value: 0x0000, lo: 0x05},
{value: 0x0018, lo: 0x80, hi: 0x9f},
{value: 0x0080, lo: 0xa0, hi: 0xa0},
{value: 0x0018, lo: 0xa1, hi: 0xad},
{value: 0x0080, lo: 0xae, hi: 0xaf},
{value: 0x0018, lo: 0xb0, hi: 0xbf},
- // Block 0x4c, offset 0x2bb
+ // Block 0x4c, offset 0x2a3
{value: 0x0000, lo: 0x04},
{value: 0x0018, lo: 0x80, hi: 0xa8},
{value: 0x09c5, lo: 0xa9, hi: 0xa9},
{value: 0x09e5, lo: 0xaa, hi: 0xaa},
{value: 0x0018, lo: 0xab, hi: 0xbf},
- // Block 0x4d, offset 0x2c0
- {value: 0x0000, lo: 0x02},
- {value: 0x0018, lo: 0x80, hi: 0xbe},
- {value: 0x0040, lo: 0xbf, hi: 0xbf},
- // Block 0x4e, offset 0x2c3
+ // Block 0x4d, offset 0x2a8
{value: 0x0000, lo: 0x02},
{value: 0x0018, lo: 0x80, hi: 0xa6},
{value: 0x0040, lo: 0xa7, hi: 0xbf},
- // Block 0x4f, offset 0x2c6
+ // Block 0x4e, offset 0x2ab
{value: 0x0000, lo: 0x03},
{value: 0x0018, lo: 0x80, hi: 0x8b},
{value: 0x28c1, lo: 0x8c, hi: 0x8c},
{value: 0x0018, lo: 0x8d, hi: 0xbf},
- // Block 0x50, offset 0x2ca
+ // Block 0x4f, offset 0x2af
{value: 0x0000, lo: 0x05},
{value: 0x0018, lo: 0x80, hi: 0xb3},
{value: 0x0e66, lo: 0xb4, hi: 0xb4},
{value: 0x292a, lo: 0xb5, hi: 0xb5},
{value: 0x0e86, lo: 0xb6, hi: 0xb6},
{value: 0x0018, lo: 0xb7, hi: 0xbf},
- // Block 0x51, offset 0x2d0
+ // Block 0x50, offset 0x2b5
{value: 0x0000, lo: 0x03},
{value: 0x0018, lo: 0x80, hi: 0x9b},
{value: 0x2941, lo: 0x9c, hi: 0x9c},
{value: 0x0018, lo: 0x9d, hi: 0xbf},
- // Block 0x52, offset 0x2d4
+ // Block 0x51, offset 0x2b9
{value: 0x0000, lo: 0x03},
{value: 0x0018, lo: 0x80, hi: 0xb3},
{value: 0x0040, lo: 0xb4, hi: 0xb5},
{value: 0x0018, lo: 0xb6, hi: 0xbf},
- // Block 0x53, offset 0x2d8
+ // Block 0x52, offset 0x2bd
{value: 0x0000, lo: 0x05},
{value: 0x0018, lo: 0x80, hi: 0x95},
{value: 0x0040, lo: 0x96, hi: 0x97},
{value: 0x0018, lo: 0x98, hi: 0xb9},
{value: 0x0040, lo: 0xba, hi: 0xbc},
{value: 0x0018, lo: 0xbd, hi: 0xbf},
- // Block 0x54, offset 0x2de
+ // Block 0x53, offset 0x2c3
{value: 0x0000, lo: 0x06},
{value: 0x0018, lo: 0x80, hi: 0x88},
{value: 0x0040, lo: 0x89, hi: 0x89},
- {value: 0x0018, lo: 0x8a, hi: 0x91},
- {value: 0x0040, lo: 0x92, hi: 0xab},
+ {value: 0x0018, lo: 0x8a, hi: 0x92},
+ {value: 0x0040, lo: 0x93, hi: 0xab},
{value: 0x0018, lo: 0xac, hi: 0xaf},
{value: 0x0040, lo: 0xb0, hi: 0xbf},
- // Block 0x55, offset 0x2e5
+ // Block 0x54, offset 0x2ca
{value: 0x0000, lo: 0x05},
{value: 0xe185, lo: 0x80, hi: 0x8f},
{value: 0x03f5, lo: 0x90, hi: 0x9f},
{value: 0x0ea5, lo: 0xa0, hi: 0xae},
{value: 0x0040, lo: 0xaf, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xbf},
- // Block 0x56, offset 0x2eb
+ // Block 0x55, offset 0x2d0
{value: 0x0000, lo: 0x07},
{value: 0x0008, lo: 0x80, hi: 0xa5},
{value: 0x0040, lo: 0xa6, hi: 0xa6},
@@ -3184,15 +3187,15 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0008, lo: 0xad, hi: 0xad},
{value: 0x0040, lo: 0xae, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xbf},
- // Block 0x57, offset 0x2f3
+ // Block 0x56, offset 0x2d8
{value: 0x0000, lo: 0x06},
{value: 0x0008, lo: 0x80, hi: 0xa7},
{value: 0x0040, lo: 0xa8, hi: 0xae},
{value: 0xe075, lo: 0xaf, hi: 0xaf},
{value: 0x0018, lo: 0xb0, hi: 0xb0},
{value: 0x0040, lo: 0xb1, hi: 0xbe},
- {value: 0x1b08, lo: 0xbf, hi: 0xbf},
- // Block 0x58, offset 0x2fa
+ {value: 0x3b08, lo: 0xbf, hi: 0xbf},
+ // Block 0x57, offset 0x2df
{value: 0x0000, lo: 0x0a},
{value: 0x0008, lo: 0x80, hi: 0x96},
{value: 0x0040, lo: 0x97, hi: 0x9f},
@@ -3204,7 +3207,7 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0xb7, hi: 0xb7},
{value: 0x0008, lo: 0xb8, hi: 0xbe},
{value: 0x0040, lo: 0xbf, hi: 0xbf},
- // Block 0x59, offset 0x305
+ // Block 0x58, offset 0x2ea
{value: 0x0000, lo: 0x09},
{value: 0x0008, lo: 0x80, hi: 0x86},
{value: 0x0040, lo: 0x87, hi: 0x87},
@@ -3214,62 +3217,62 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0x97, hi: 0x97},
{value: 0x0008, lo: 0x98, hi: 0x9e},
{value: 0x0040, lo: 0x9f, hi: 0x9f},
- {value: 0x1308, lo: 0xa0, hi: 0xbf},
- // Block 0x5a, offset 0x30f
+ {value: 0x3308, lo: 0xa0, hi: 0xbf},
+ // Block 0x59, offset 0x2f4
{value: 0x0000, lo: 0x03},
{value: 0x0018, lo: 0x80, hi: 0xae},
{value: 0x0008, lo: 0xaf, hi: 0xaf},
{value: 0x0018, lo: 0xb0, hi: 0xbf},
- // Block 0x5b, offset 0x313
+ // Block 0x5a, offset 0x2f8
{value: 0x0000, lo: 0x02},
- {value: 0x0018, lo: 0x80, hi: 0x84},
- {value: 0x0040, lo: 0x85, hi: 0xbf},
- // Block 0x5c, offset 0x316
+ {value: 0x0018, lo: 0x80, hi: 0x89},
+ {value: 0x0040, lo: 0x8a, hi: 0xbf},
+ // Block 0x5b, offset 0x2fb
{value: 0x0000, lo: 0x05},
{value: 0x0018, lo: 0x80, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0x9a},
{value: 0x0018, lo: 0x9b, hi: 0x9e},
{value: 0x0edd, lo: 0x9f, hi: 0x9f},
{value: 0x0018, lo: 0xa0, hi: 0xbf},
- // Block 0x5d, offset 0x31c
+ // Block 0x5c, offset 0x301
{value: 0x0000, lo: 0x03},
{value: 0x0018, lo: 0x80, hi: 0xb2},
{value: 0x0efd, lo: 0xb3, hi: 0xb3},
{value: 0x0040, lo: 0xb4, hi: 0xbf},
- // Block 0x5e, offset 0x320
+ // Block 0x5d, offset 0x305
{value: 0x0020, lo: 0x01},
{value: 0x0f1d, lo: 0x80, hi: 0xbf},
- // Block 0x5f, offset 0x322
+ // Block 0x5e, offset 0x307
{value: 0x0020, lo: 0x02},
{value: 0x171d, lo: 0x80, hi: 0x8f},
{value: 0x18fd, lo: 0x90, hi: 0xbf},
- // Block 0x60, offset 0x325
+ // Block 0x5f, offset 0x30a
{value: 0x0020, lo: 0x01},
{value: 0x1efd, lo: 0x80, hi: 0xbf},
- // Block 0x61, offset 0x327
+ // Block 0x60, offset 0x30c
{value: 0x0000, lo: 0x02},
{value: 0x0040, lo: 0x80, hi: 0x80},
{value: 0x0008, lo: 0x81, hi: 0xbf},
- // Block 0x62, offset 0x32a
+ // Block 0x61, offset 0x30f
{value: 0x0000, lo: 0x09},
{value: 0x0008, lo: 0x80, hi: 0x96},
{value: 0x0040, lo: 0x97, hi: 0x98},
- {value: 0x1308, lo: 0x99, hi: 0x9a},
+ {value: 0x3308, lo: 0x99, hi: 0x9a},
{value: 0x29e2, lo: 0x9b, hi: 0x9b},
{value: 0x2a0a, lo: 0x9c, hi: 0x9c},
{value: 0x0008, lo: 0x9d, hi: 0x9e},
{value: 0x2a31, lo: 0x9f, hi: 0x9f},
{value: 0x0018, lo: 0xa0, hi: 0xa0},
{value: 0x0008, lo: 0xa1, hi: 0xbf},
- // Block 0x63, offset 0x334
+ // Block 0x62, offset 0x319
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0xbe},
{value: 0x2a69, lo: 0xbf, hi: 0xbf},
- // Block 0x64, offset 0x337
+ // Block 0x63, offset 0x31c
{value: 0x0000, lo: 0x0e},
{value: 0x0040, lo: 0x80, hi: 0x84},
- {value: 0x0008, lo: 0x85, hi: 0xad},
- {value: 0x0040, lo: 0xae, hi: 0xb0},
+ {value: 0x0008, lo: 0x85, hi: 0xae},
+ {value: 0x0040, lo: 0xaf, hi: 0xb0},
{value: 0x2a1d, lo: 0xb1, hi: 0xb1},
{value: 0x2a3d, lo: 0xb2, hi: 0xb2},
{value: 0x2a5d, lo: 0xb3, hi: 0xb3},
@@ -3281,150 +3284,150 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x2afd, lo: 0xba, hi: 0xbb},
{value: 0x2b1d, lo: 0xbc, hi: 0xbd},
{value: 0x2afd, lo: 0xbe, hi: 0xbf},
- // Block 0x65, offset 0x346
+ // Block 0x64, offset 0x32b
{value: 0x0000, lo: 0x03},
{value: 0x0018, lo: 0x80, hi: 0xa3},
{value: 0x0040, lo: 0xa4, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xbf},
- // Block 0x66, offset 0x34a
+ // Block 0x65, offset 0x32f
{value: 0x0030, lo: 0x04},
{value: 0x2aa2, lo: 0x80, hi: 0x9d},
{value: 0x305a, lo: 0x9e, hi: 0x9e},
{value: 0x0040, lo: 0x9f, hi: 0x9f},
{value: 0x30a2, lo: 0xa0, hi: 0xbf},
- // Block 0x67, offset 0x34f
+ // Block 0x66, offset 0x334
{value: 0x0000, lo: 0x02},
- {value: 0x0008, lo: 0x80, hi: 0x95},
- {value: 0x0040, lo: 0x96, hi: 0xbf},
- // Block 0x68, offset 0x352
+ {value: 0x0008, lo: 0x80, hi: 0xaa},
+ {value: 0x0040, lo: 0xab, hi: 0xbf},
+ // Block 0x67, offset 0x337
{value: 0x0000, lo: 0x03},
{value: 0x0008, lo: 0x80, hi: 0x8c},
{value: 0x0040, lo: 0x8d, hi: 0x8f},
{value: 0x0018, lo: 0x90, hi: 0xbf},
- // Block 0x69, offset 0x356
+ // Block 0x68, offset 0x33b
{value: 0x0000, lo: 0x04},
{value: 0x0018, lo: 0x80, hi: 0x86},
{value: 0x0040, lo: 0x87, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0xbd},
{value: 0x0018, lo: 0xbe, hi: 0xbf},
- // Block 0x6a, offset 0x35b
+ // Block 0x69, offset 0x340
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0x8c},
{value: 0x0018, lo: 0x8d, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0xab},
{value: 0x0040, lo: 0xac, hi: 0xbf},
- // Block 0x6b, offset 0x360
+ // Block 0x6a, offset 0x345
{value: 0x0000, lo: 0x05},
{value: 0x0008, lo: 0x80, hi: 0xa5},
{value: 0x0018, lo: 0xa6, hi: 0xaf},
- {value: 0x1308, lo: 0xb0, hi: 0xb1},
+ {value: 0x3308, lo: 0xb0, hi: 0xb1},
{value: 0x0018, lo: 0xb2, hi: 0xb7},
{value: 0x0040, lo: 0xb8, hi: 0xbf},
- // Block 0x6c, offset 0x366
+ // Block 0x6b, offset 0x34b
{value: 0x0000, lo: 0x05},
{value: 0x0040, lo: 0x80, hi: 0xb6},
{value: 0x0008, lo: 0xb7, hi: 0xb7},
{value: 0x2009, lo: 0xb8, hi: 0xb8},
{value: 0x6e89, lo: 0xb9, hi: 0xb9},
{value: 0x0008, lo: 0xba, hi: 0xbf},
- // Block 0x6d, offset 0x36c
+ // Block 0x6c, offset 0x351
{value: 0x0000, lo: 0x0e},
{value: 0x0008, lo: 0x80, hi: 0x81},
- {value: 0x1308, lo: 0x82, hi: 0x82},
+ {value: 0x3308, lo: 0x82, hi: 0x82},
{value: 0x0008, lo: 0x83, hi: 0x85},
- {value: 0x1b08, lo: 0x86, hi: 0x86},
+ {value: 0x3b08, lo: 0x86, hi: 0x86},
{value: 0x0008, lo: 0x87, hi: 0x8a},
- {value: 0x1308, lo: 0x8b, hi: 0x8b},
+ {value: 0x3308, lo: 0x8b, hi: 0x8b},
{value: 0x0008, lo: 0x8c, hi: 0xa2},
- {value: 0x1008, lo: 0xa3, hi: 0xa4},
- {value: 0x1308, lo: 0xa5, hi: 0xa6},
- {value: 0x1008, lo: 0xa7, hi: 0xa7},
+ {value: 0x3008, lo: 0xa3, hi: 0xa4},
+ {value: 0x3308, lo: 0xa5, hi: 0xa6},
+ {value: 0x3008, lo: 0xa7, hi: 0xa7},
{value: 0x0018, lo: 0xa8, hi: 0xab},
{value: 0x0040, lo: 0xac, hi: 0xaf},
{value: 0x0018, lo: 0xb0, hi: 0xb9},
{value: 0x0040, lo: 0xba, hi: 0xbf},
- // Block 0x6e, offset 0x37b
+ // Block 0x6d, offset 0x360
{value: 0x0000, lo: 0x05},
{value: 0x0208, lo: 0x80, hi: 0xb1},
{value: 0x0108, lo: 0xb2, hi: 0xb2},
{value: 0x0008, lo: 0xb3, hi: 0xb3},
{value: 0x0018, lo: 0xb4, hi: 0xb7},
{value: 0x0040, lo: 0xb8, hi: 0xbf},
- // Block 0x6f, offset 0x381
+ // Block 0x6e, offset 0x366
{value: 0x0000, lo: 0x03},
- {value: 0x1008, lo: 0x80, hi: 0x81},
+ {value: 0x3008, lo: 0x80, hi: 0x81},
{value: 0x0008, lo: 0x82, hi: 0xb3},
- {value: 0x1008, lo: 0xb4, hi: 0xbf},
- // Block 0x70, offset 0x385
+ {value: 0x3008, lo: 0xb4, hi: 0xbf},
+ // Block 0x6f, offset 0x36a
{value: 0x0000, lo: 0x0e},
- {value: 0x1008, lo: 0x80, hi: 0x83},
- {value: 0x1b08, lo: 0x84, hi: 0x84},
- {value: 0x1308, lo: 0x85, hi: 0x85},
+ {value: 0x3008, lo: 0x80, hi: 0x83},
+ {value: 0x3b08, lo: 0x84, hi: 0x84},
+ {value: 0x3308, lo: 0x85, hi: 0x85},
{value: 0x0040, lo: 0x86, hi: 0x8d},
{value: 0x0018, lo: 0x8e, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0x9f},
- {value: 0x1308, lo: 0xa0, hi: 0xb1},
+ {value: 0x3308, lo: 0xa0, hi: 0xb1},
{value: 0x0008, lo: 0xb2, hi: 0xb7},
{value: 0x0018, lo: 0xb8, hi: 0xba},
{value: 0x0008, lo: 0xbb, hi: 0xbb},
{value: 0x0018, lo: 0xbc, hi: 0xbc},
{value: 0x0008, lo: 0xbd, hi: 0xbd},
{value: 0x0040, lo: 0xbe, hi: 0xbf},
- // Block 0x71, offset 0x394
+ // Block 0x70, offset 0x379
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0xa5},
- {value: 0x1308, lo: 0xa6, hi: 0xad},
+ {value: 0x3308, lo: 0xa6, hi: 0xad},
{value: 0x0018, lo: 0xae, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xbf},
- // Block 0x72, offset 0x399
+ // Block 0x71, offset 0x37e
{value: 0x0000, lo: 0x07},
{value: 0x0008, lo: 0x80, hi: 0x86},
- {value: 0x1308, lo: 0x87, hi: 0x91},
- {value: 0x1008, lo: 0x92, hi: 0x92},
- {value: 0x1808, lo: 0x93, hi: 0x93},
+ {value: 0x3308, lo: 0x87, hi: 0x91},
+ {value: 0x3008, lo: 0x92, hi: 0x92},
+ {value: 0x3808, lo: 0x93, hi: 0x93},
{value: 0x0040, lo: 0x94, hi: 0x9e},
{value: 0x0018, lo: 0x9f, hi: 0xbc},
{value: 0x0040, lo: 0xbd, hi: 0xbf},
- // Block 0x73, offset 0x3a1
+ // Block 0x72, offset 0x386
{value: 0x0000, lo: 0x09},
- {value: 0x1308, lo: 0x80, hi: 0x82},
- {value: 0x1008, lo: 0x83, hi: 0x83},
+ {value: 0x3308, lo: 0x80, hi: 0x82},
+ {value: 0x3008, lo: 0x83, hi: 0x83},
{value: 0x0008, lo: 0x84, hi: 0xb2},
- {value: 0x1308, lo: 0xb3, hi: 0xb3},
- {value: 0x1008, lo: 0xb4, hi: 0xb5},
- {value: 0x1308, lo: 0xb6, hi: 0xb9},
- {value: 0x1008, lo: 0xba, hi: 0xbb},
- {value: 0x1308, lo: 0xbc, hi: 0xbc},
- {value: 0x1008, lo: 0xbd, hi: 0xbf},
- // Block 0x74, offset 0x3ab
+ {value: 0x3308, lo: 0xb3, hi: 0xb3},
+ {value: 0x3008, lo: 0xb4, hi: 0xb5},
+ {value: 0x3308, lo: 0xb6, hi: 0xb9},
+ {value: 0x3008, lo: 0xba, hi: 0xbb},
+ {value: 0x3308, lo: 0xbc, hi: 0xbc},
+ {value: 0x3008, lo: 0xbd, hi: 0xbf},
+ // Block 0x73, offset 0x390
{value: 0x0000, lo: 0x0a},
- {value: 0x1808, lo: 0x80, hi: 0x80},
+ {value: 0x3808, lo: 0x80, hi: 0x80},
{value: 0x0018, lo: 0x81, hi: 0x8d},
{value: 0x0040, lo: 0x8e, hi: 0x8e},
{value: 0x0008, lo: 0x8f, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0x9d},
{value: 0x0018, lo: 0x9e, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xa4},
- {value: 0x1308, lo: 0xa5, hi: 0xa5},
+ {value: 0x3308, lo: 0xa5, hi: 0xa5},
{value: 0x0008, lo: 0xa6, hi: 0xbe},
{value: 0x0040, lo: 0xbf, hi: 0xbf},
- // Block 0x75, offset 0x3b6
+ // Block 0x74, offset 0x39b
{value: 0x0000, lo: 0x07},
{value: 0x0008, lo: 0x80, hi: 0xa8},
- {value: 0x1308, lo: 0xa9, hi: 0xae},
- {value: 0x1008, lo: 0xaf, hi: 0xb0},
- {value: 0x1308, lo: 0xb1, hi: 0xb2},
- {value: 0x1008, lo: 0xb3, hi: 0xb4},
- {value: 0x1308, lo: 0xb5, hi: 0xb6},
+ {value: 0x3308, lo: 0xa9, hi: 0xae},
+ {value: 0x3008, lo: 0xaf, hi: 0xb0},
+ {value: 0x3308, lo: 0xb1, hi: 0xb2},
+ {value: 0x3008, lo: 0xb3, hi: 0xb4},
+ {value: 0x3308, lo: 0xb5, hi: 0xb6},
{value: 0x0040, lo: 0xb7, hi: 0xbf},
- // Block 0x76, offset 0x3be
+ // Block 0x75, offset 0x3a3
{value: 0x0000, lo: 0x10},
{value: 0x0008, lo: 0x80, hi: 0x82},
- {value: 0x1308, lo: 0x83, hi: 0x83},
+ {value: 0x3308, lo: 0x83, hi: 0x83},
{value: 0x0008, lo: 0x84, hi: 0x8b},
- {value: 0x1308, lo: 0x8c, hi: 0x8c},
- {value: 0x1008, lo: 0x8d, hi: 0x8d},
+ {value: 0x3308, lo: 0x8c, hi: 0x8c},
+ {value: 0x3008, lo: 0x8d, hi: 0x8d},
{value: 0x0040, lo: 0x8e, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0x9b},
@@ -3432,38 +3435,38 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0008, lo: 0xa0, hi: 0xb6},
{value: 0x0018, lo: 0xb7, hi: 0xb9},
{value: 0x0008, lo: 0xba, hi: 0xba},
- {value: 0x1008, lo: 0xbb, hi: 0xbb},
- {value: 0x1308, lo: 0xbc, hi: 0xbc},
- {value: 0x1008, lo: 0xbd, hi: 0xbd},
+ {value: 0x3008, lo: 0xbb, hi: 0xbb},
+ {value: 0x3308, lo: 0xbc, hi: 0xbc},
+ {value: 0x3008, lo: 0xbd, hi: 0xbd},
{value: 0x0008, lo: 0xbe, hi: 0xbf},
- // Block 0x77, offset 0x3cf
+ // Block 0x76, offset 0x3b4
{value: 0x0000, lo: 0x08},
{value: 0x0008, lo: 0x80, hi: 0xaf},
- {value: 0x1308, lo: 0xb0, hi: 0xb0},
+ {value: 0x3308, lo: 0xb0, hi: 0xb0},
{value: 0x0008, lo: 0xb1, hi: 0xb1},
- {value: 0x1308, lo: 0xb2, hi: 0xb4},
+ {value: 0x3308, lo: 0xb2, hi: 0xb4},
{value: 0x0008, lo: 0xb5, hi: 0xb6},
- {value: 0x1308, lo: 0xb7, hi: 0xb8},
+ {value: 0x3308, lo: 0xb7, hi: 0xb8},
{value: 0x0008, lo: 0xb9, hi: 0xbd},
- {value: 0x1308, lo: 0xbe, hi: 0xbf},
- // Block 0x78, offset 0x3d8
+ {value: 0x3308, lo: 0xbe, hi: 0xbf},
+ // Block 0x77, offset 0x3bd
{value: 0x0000, lo: 0x0f},
{value: 0x0008, lo: 0x80, hi: 0x80},
- {value: 0x1308, lo: 0x81, hi: 0x81},
+ {value: 0x3308, lo: 0x81, hi: 0x81},
{value: 0x0008, lo: 0x82, hi: 0x82},
{value: 0x0040, lo: 0x83, hi: 0x9a},
{value: 0x0008, lo: 0x9b, hi: 0x9d},
{value: 0x0018, lo: 0x9e, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xaa},
- {value: 0x1008, lo: 0xab, hi: 0xab},
- {value: 0x1308, lo: 0xac, hi: 0xad},
- {value: 0x1008, lo: 0xae, hi: 0xaf},
+ {value: 0x3008, lo: 0xab, hi: 0xab},
+ {value: 0x3308, lo: 0xac, hi: 0xad},
+ {value: 0x3008, lo: 0xae, hi: 0xaf},
{value: 0x0018, lo: 0xb0, hi: 0xb1},
{value: 0x0008, lo: 0xb2, hi: 0xb4},
- {value: 0x1008, lo: 0xb5, hi: 0xb5},
- {value: 0x1b08, lo: 0xb6, hi: 0xb6},
+ {value: 0x3008, lo: 0xb5, hi: 0xb5},
+ {value: 0x3b08, lo: 0xb6, hi: 0xb6},
{value: 0x0040, lo: 0xb7, hi: 0xbf},
- // Block 0x79, offset 0x3e8
+ // Block 0x78, offset 0x3cd
{value: 0x0000, lo: 0x0c},
{value: 0x0040, lo: 0x80, hi: 0x80},
{value: 0x0008, lo: 0x81, hi: 0x86},
@@ -3477,7 +3480,7 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0008, lo: 0xa8, hi: 0xae},
{value: 0x0040, lo: 0xaf, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xbf},
- // Block 0x7a, offset 0x3f5
+ // Block 0x79, offset 0x3da
{value: 0x0000, lo: 0x09},
{value: 0x0008, lo: 0x80, hi: 0x9a},
{value: 0x0018, lo: 0x9b, hi: 0x9b},
@@ -3488,54 +3491,54 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0008, lo: 0xa0, hi: 0xa5},
{value: 0x0040, lo: 0xa6, hi: 0xaf},
{value: 0x4495, lo: 0xb0, hi: 0xbf},
- // Block 0x7b, offset 0x3ff
+ // Block 0x7a, offset 0x3e4
{value: 0x0000, lo: 0x04},
{value: 0x44b5, lo: 0x80, hi: 0x8f},
{value: 0x44d5, lo: 0x90, hi: 0x9f},
{value: 0x44f5, lo: 0xa0, hi: 0xaf},
{value: 0x44d5, lo: 0xb0, hi: 0xbf},
- // Block 0x7c, offset 0x404
+ // Block 0x7b, offset 0x3e9
{value: 0x0000, lo: 0x0c},
{value: 0x0008, lo: 0x80, hi: 0xa2},
- {value: 0x1008, lo: 0xa3, hi: 0xa4},
- {value: 0x1308, lo: 0xa5, hi: 0xa5},
- {value: 0x1008, lo: 0xa6, hi: 0xa7},
- {value: 0x1308, lo: 0xa8, hi: 0xa8},
- {value: 0x1008, lo: 0xa9, hi: 0xaa},
+ {value: 0x3008, lo: 0xa3, hi: 0xa4},
+ {value: 0x3308, lo: 0xa5, hi: 0xa5},
+ {value: 0x3008, lo: 0xa6, hi: 0xa7},
+ {value: 0x3308, lo: 0xa8, hi: 0xa8},
+ {value: 0x3008, lo: 0xa9, hi: 0xaa},
{value: 0x0018, lo: 0xab, hi: 0xab},
- {value: 0x1008, lo: 0xac, hi: 0xac},
- {value: 0x1b08, lo: 0xad, hi: 0xad},
+ {value: 0x3008, lo: 0xac, hi: 0xac},
+ {value: 0x3b08, lo: 0xad, hi: 0xad},
{value: 0x0040, lo: 0xae, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xb9},
{value: 0x0040, lo: 0xba, hi: 0xbf},
- // Block 0x7d, offset 0x411
+ // Block 0x7c, offset 0x3f6
{value: 0x0000, lo: 0x03},
{value: 0x0008, lo: 0x80, hi: 0xa3},
{value: 0x0040, lo: 0xa4, hi: 0xaf},
{value: 0x0018, lo: 0xb0, hi: 0xbf},
- // Block 0x7e, offset 0x415
+ // Block 0x7d, offset 0x3fa
{value: 0x0000, lo: 0x04},
{value: 0x0018, lo: 0x80, hi: 0x86},
{value: 0x0040, lo: 0x87, hi: 0x8a},
{value: 0x0018, lo: 0x8b, hi: 0xbb},
{value: 0x0040, lo: 0xbc, hi: 0xbf},
- // Block 0x7f, offset 0x41a
+ // Block 0x7e, offset 0x3ff
{value: 0x0020, lo: 0x01},
{value: 0x4515, lo: 0x80, hi: 0xbf},
- // Block 0x80, offset 0x41c
+ // Block 0x7f, offset 0x401
{value: 0x0020, lo: 0x03},
{value: 0x4d15, lo: 0x80, hi: 0x94},
{value: 0x4ad5, lo: 0x95, hi: 0x95},
{value: 0x4fb5, lo: 0x96, hi: 0xbf},
- // Block 0x81, offset 0x420
+ // Block 0x80, offset 0x405
{value: 0x0020, lo: 0x01},
{value: 0x54f5, lo: 0x80, hi: 0xbf},
- // Block 0x82, offset 0x422
+ // Block 0x81, offset 0x407
{value: 0x0020, lo: 0x03},
{value: 0x5cf5, lo: 0x80, hi: 0x84},
{value: 0x5655, lo: 0x85, hi: 0x85},
{value: 0x5d95, lo: 0x86, hi: 0xbf},
- // Block 0x83, offset 0x426
+ // Block 0x82, offset 0x40b
{value: 0x0020, lo: 0x08},
{value: 0x6b55, lo: 0x80, hi: 0x8f},
{value: 0x6d15, lo: 0x90, hi: 0x90},
@@ -3545,19 +3548,19 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0xae, hi: 0xae},
{value: 0x0040, lo: 0xaf, hi: 0xaf},
{value: 0x70d5, lo: 0xb0, hi: 0xbf},
- // Block 0x84, offset 0x42f
+ // Block 0x83, offset 0x414
{value: 0x0020, lo: 0x05},
{value: 0x72d5, lo: 0x80, hi: 0xad},
{value: 0x6535, lo: 0xae, hi: 0xae},
{value: 0x7895, lo: 0xaf, hi: 0xb5},
{value: 0x6f55, lo: 0xb6, hi: 0xb6},
{value: 0x7975, lo: 0xb7, hi: 0xbf},
- // Block 0x85, offset 0x435
+ // Block 0x84, offset 0x41a
{value: 0x0028, lo: 0x03},
{value: 0x7c21, lo: 0x80, hi: 0x82},
{value: 0x7be1, lo: 0x83, hi: 0x83},
{value: 0x7c99, lo: 0x84, hi: 0xbf},
- // Block 0x86, offset 0x439
+ // Block 0x85, offset 0x41e
{value: 0x0038, lo: 0x0f},
{value: 0x9db1, lo: 0x80, hi: 0x83},
{value: 0x9e59, lo: 0x84, hi: 0x85},
@@ -3574,7 +3577,7 @@ var idnaSparseValues = [1876]valueRange{
{value: 0xa869, lo: 0xbc, hi: 0xbc},
{value: 0xa7f9, lo: 0xbd, hi: 0xbd},
{value: 0xa8d9, lo: 0xbe, hi: 0xbf},
- // Block 0x87, offset 0x449
+ // Block 0x86, offset 0x42e
{value: 0x0000, lo: 0x09},
{value: 0x0008, lo: 0x80, hi: 0x8b},
{value: 0x0040, lo: 0x8c, hi: 0x8c},
@@ -3585,24 +3588,24 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0008, lo: 0xbc, hi: 0xbd},
{value: 0x0040, lo: 0xbe, hi: 0xbe},
{value: 0x0008, lo: 0xbf, hi: 0xbf},
- // Block 0x88, offset 0x453
+ // Block 0x87, offset 0x438
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0x8d},
{value: 0x0040, lo: 0x8e, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x9d},
{value: 0x0040, lo: 0x9e, hi: 0xbf},
- // Block 0x89, offset 0x458
+ // Block 0x88, offset 0x43d
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0xba},
{value: 0x0040, lo: 0xbb, hi: 0xbf},
- // Block 0x8a, offset 0x45b
+ // Block 0x89, offset 0x440
{value: 0x0000, lo: 0x05},
{value: 0x0018, lo: 0x80, hi: 0x82},
{value: 0x0040, lo: 0x83, hi: 0x86},
{value: 0x0018, lo: 0x87, hi: 0xb3},
{value: 0x0040, lo: 0xb4, hi: 0xb6},
{value: 0x0018, lo: 0xb7, hi: 0xbf},
- // Block 0x8b, offset 0x461
+ // Block 0x8a, offset 0x446
{value: 0x0000, lo: 0x06},
{value: 0x0018, lo: 0x80, hi: 0x8e},
{value: 0x0040, lo: 0x8f, hi: 0x8f},
@@ -3610,31 +3613,31 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0x9c, hi: 0x9f},
{value: 0x0018, lo: 0xa0, hi: 0xa0},
{value: 0x0040, lo: 0xa1, hi: 0xbf},
- // Block 0x8c, offset 0x468
+ // Block 0x8b, offset 0x44d
{value: 0x0000, lo: 0x04},
{value: 0x0040, lo: 0x80, hi: 0x8f},
{value: 0x0018, lo: 0x90, hi: 0xbc},
- {value: 0x1308, lo: 0xbd, hi: 0xbd},
+ {value: 0x3308, lo: 0xbd, hi: 0xbd},
{value: 0x0040, lo: 0xbe, hi: 0xbf},
- // Block 0x8d, offset 0x46d
+ // Block 0x8c, offset 0x452
{value: 0x0000, lo: 0x03},
{value: 0x0008, lo: 0x80, hi: 0x9c},
{value: 0x0040, lo: 0x9d, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xbf},
- // Block 0x8e, offset 0x471
+ // Block 0x8d, offset 0x456
{value: 0x0000, lo: 0x05},
{value: 0x0008, lo: 0x80, hi: 0x90},
{value: 0x0040, lo: 0x91, hi: 0x9f},
- {value: 0x1308, lo: 0xa0, hi: 0xa0},
+ {value: 0x3308, lo: 0xa0, hi: 0xa0},
{value: 0x0018, lo: 0xa1, hi: 0xbb},
{value: 0x0040, lo: 0xbc, hi: 0xbf},
- // Block 0x8f, offset 0x477
+ // Block 0x8e, offset 0x45c
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0x9f},
{value: 0x0018, lo: 0xa0, hi: 0xa3},
- {value: 0x0040, lo: 0xa4, hi: 0xaf},
- {value: 0x0008, lo: 0xb0, hi: 0xbf},
- // Block 0x90, offset 0x47c
+ {value: 0x0040, lo: 0xa4, hi: 0xac},
+ {value: 0x0008, lo: 0xad, hi: 0xbf},
+ // Block 0x8f, offset 0x461
{value: 0x0000, lo: 0x08},
{value: 0x0008, lo: 0x80, hi: 0x80},
{value: 0x0018, lo: 0x81, hi: 0x81},
@@ -3642,22 +3645,22 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0018, lo: 0x8a, hi: 0x8a},
{value: 0x0040, lo: 0x8b, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0xb5},
- {value: 0x1308, lo: 0xb6, hi: 0xba},
+ {value: 0x3308, lo: 0xb6, hi: 0xba},
{value: 0x0040, lo: 0xbb, hi: 0xbf},
- // Block 0x91, offset 0x485
+ // Block 0x90, offset 0x46a
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0x9d},
{value: 0x0040, lo: 0x9e, hi: 0x9e},
{value: 0x0018, lo: 0x9f, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xbf},
- // Block 0x92, offset 0x48a
+ // Block 0x91, offset 0x46f
{value: 0x0000, lo: 0x05},
{value: 0x0008, lo: 0x80, hi: 0x83},
{value: 0x0040, lo: 0x84, hi: 0x87},
{value: 0x0008, lo: 0x88, hi: 0x8f},
{value: 0x0018, lo: 0x90, hi: 0x95},
{value: 0x0040, lo: 0x96, hi: 0xbf},
- // Block 0x93, offset 0x490
+ // Block 0x92, offset 0x475
{value: 0x0000, lo: 0x06},
{value: 0xe145, lo: 0x80, hi: 0x87},
{value: 0xe1c5, lo: 0x88, hi: 0x8f},
@@ -3665,7 +3668,7 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x8ad5, lo: 0x98, hi: 0x9f},
{value: 0x8aed, lo: 0xa0, hi: 0xa7},
{value: 0x0008, lo: 0xa8, hi: 0xbf},
- // Block 0x94, offset 0x497
+ // Block 0x93, offset 0x47c
{value: 0x0000, lo: 0x06},
{value: 0x0008, lo: 0x80, hi: 0x9d},
{value: 0x0040, lo: 0x9e, hi: 0x9f},
@@ -3673,7 +3676,7 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0xaa, hi: 0xaf},
{value: 0x8aed, lo: 0xb0, hi: 0xb7},
{value: 0x8ad5, lo: 0xb8, hi: 0xbf},
- // Block 0x95, offset 0x49e
+ // Block 0x94, offset 0x483
{value: 0x0000, lo: 0x06},
{value: 0xe145, lo: 0x80, hi: 0x87},
{value: 0xe1c5, lo: 0x88, hi: 0x8f},
@@ -3681,173 +3684,176 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0x94, hi: 0x97},
{value: 0x0008, lo: 0x98, hi: 0xbb},
{value: 0x0040, lo: 0xbc, hi: 0xbf},
- // Block 0x96, offset 0x4a5
+ // Block 0x95, offset 0x48a
{value: 0x0000, lo: 0x03},
{value: 0x0008, lo: 0x80, hi: 0xa7},
{value: 0x0040, lo: 0xa8, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xbf},
- // Block 0x97, offset 0x4a9
+ // Block 0x96, offset 0x48e
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0xa3},
{value: 0x0040, lo: 0xa4, hi: 0xae},
{value: 0x0018, lo: 0xaf, hi: 0xaf},
{value: 0x0040, lo: 0xb0, hi: 0xbf},
- // Block 0x98, offset 0x4ae
+ // Block 0x97, offset 0x493
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0xb6},
{value: 0x0040, lo: 0xb7, hi: 0xbf},
- // Block 0x99, offset 0x4b1
+ // Block 0x98, offset 0x496
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0x95},
{value: 0x0040, lo: 0x96, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xa7},
{value: 0x0040, lo: 0xa8, hi: 0xbf},
- // Block 0x9a, offset 0x4b6
+ // Block 0x99, offset 0x49b
{value: 0x0000, lo: 0x0b},
- {value: 0x0008, lo: 0x80, hi: 0x85},
+ {value: 0x0808, lo: 0x80, hi: 0x85},
{value: 0x0040, lo: 0x86, hi: 0x87},
- {value: 0x0008, lo: 0x88, hi: 0x88},
+ {value: 0x0808, lo: 0x88, hi: 0x88},
{value: 0x0040, lo: 0x89, hi: 0x89},
- {value: 0x0008, lo: 0x8a, hi: 0xb5},
+ {value: 0x0808, lo: 0x8a, hi: 0xb5},
{value: 0x0040, lo: 0xb6, hi: 0xb6},
- {value: 0x0008, lo: 0xb7, hi: 0xb8},
+ {value: 0x0808, lo: 0xb7, hi: 0xb8},
{value: 0x0040, lo: 0xb9, hi: 0xbb},
- {value: 0x0008, lo: 0xbc, hi: 0xbc},
+ {value: 0x0808, lo: 0xbc, hi: 0xbc},
{value: 0x0040, lo: 0xbd, hi: 0xbe},
- {value: 0x0008, lo: 0xbf, hi: 0xbf},
- // Block 0x9b, offset 0x4c2
+ {value: 0x0808, lo: 0xbf, hi: 0xbf},
+ // Block 0x9a, offset 0x4a7
{value: 0x0000, lo: 0x05},
- {value: 0x0008, lo: 0x80, hi: 0x95},
+ {value: 0x0808, lo: 0x80, hi: 0x95},
{value: 0x0040, lo: 0x96, hi: 0x96},
- {value: 0x0018, lo: 0x97, hi: 0x9f},
- {value: 0x0008, lo: 0xa0, hi: 0xb6},
- {value: 0x0018, lo: 0xb7, hi: 0xbf},
- // Block 0x9c, offset 0x4c8
+ {value: 0x0818, lo: 0x97, hi: 0x9f},
+ {value: 0x0808, lo: 0xa0, hi: 0xb6},
+ {value: 0x0818, lo: 0xb7, hi: 0xbf},
+ // Block 0x9b, offset 0x4ad
{value: 0x0000, lo: 0x04},
- {value: 0x0008, lo: 0x80, hi: 0x9e},
+ {value: 0x0808, lo: 0x80, hi: 0x9e},
{value: 0x0040, lo: 0x9f, hi: 0xa6},
- {value: 0x0018, lo: 0xa7, hi: 0xaf},
+ {value: 0x0818, lo: 0xa7, hi: 0xaf},
{value: 0x0040, lo: 0xb0, hi: 0xbf},
- // Block 0x9d, offset 0x4cd
+ // Block 0x9c, offset 0x4b2
{value: 0x0000, lo: 0x06},
{value: 0x0040, lo: 0x80, hi: 0x9f},
- {value: 0x0008, lo: 0xa0, hi: 0xb2},
+ {value: 0x0808, lo: 0xa0, hi: 0xb2},
{value: 0x0040, lo: 0xb3, hi: 0xb3},
- {value: 0x0008, lo: 0xb4, hi: 0xb5},
+ {value: 0x0808, lo: 0xb4, hi: 0xb5},
{value: 0x0040, lo: 0xb6, hi: 0xba},
- {value: 0x0018, lo: 0xbb, hi: 0xbf},
- // Block 0x9e, offset 0x4d4
+ {value: 0x0818, lo: 0xbb, hi: 0xbf},
+ // Block 0x9d, offset 0x4b9
{value: 0x0000, lo: 0x07},
- {value: 0x0008, lo: 0x80, hi: 0x95},
- {value: 0x0018, lo: 0x96, hi: 0x9b},
+ {value: 0x0808, lo: 0x80, hi: 0x95},
+ {value: 0x0818, lo: 0x96, hi: 0x9b},
{value: 0x0040, lo: 0x9c, hi: 0x9e},
{value: 0x0018, lo: 0x9f, hi: 0x9f},
- {value: 0x0008, lo: 0xa0, hi: 0xb9},
+ {value: 0x0808, lo: 0xa0, hi: 0xb9},
{value: 0x0040, lo: 0xba, hi: 0xbe},
- {value: 0x0018, lo: 0xbf, hi: 0xbf},
- // Block 0x9f, offset 0x4dc
+ {value: 0x0818, lo: 0xbf, hi: 0xbf},
+ // Block 0x9e, offset 0x4c1
{value: 0x0000, lo: 0x04},
- {value: 0x0008, lo: 0x80, hi: 0xb7},
+ {value: 0x0808, lo: 0x80, hi: 0xb7},
{value: 0x0040, lo: 0xb8, hi: 0xbb},
- {value: 0x0018, lo: 0xbc, hi: 0xbd},
- {value: 0x0008, lo: 0xbe, hi: 0xbf},
- // Block 0xa0, offset 0x4e1
+ {value: 0x0818, lo: 0xbc, hi: 0xbd},
+ {value: 0x0808, lo: 0xbe, hi: 0xbf},
+ // Block 0x9f, offset 0x4c6
{value: 0x0000, lo: 0x03},
- {value: 0x0018, lo: 0x80, hi: 0x8f},
+ {value: 0x0818, lo: 0x80, hi: 0x8f},
{value: 0x0040, lo: 0x90, hi: 0x91},
- {value: 0x0018, lo: 0x92, hi: 0xbf},
- // Block 0xa1, offset 0x4e5
+ {value: 0x0818, lo: 0x92, hi: 0xbf},
+ // Block 0xa0, offset 0x4ca
{value: 0x0000, lo: 0x0f},
- {value: 0x0008, lo: 0x80, hi: 0x80},
- {value: 0x1308, lo: 0x81, hi: 0x83},
+ {value: 0x0808, lo: 0x80, hi: 0x80},
+ {value: 0x3308, lo: 0x81, hi: 0x83},
{value: 0x0040, lo: 0x84, hi: 0x84},
- {value: 0x1308, lo: 0x85, hi: 0x86},
+ {value: 0x3308, lo: 0x85, hi: 0x86},
{value: 0x0040, lo: 0x87, hi: 0x8b},
- {value: 0x1308, lo: 0x8c, hi: 0x8f},
- {value: 0x0008, lo: 0x90, hi: 0x93},
+ {value: 0x3308, lo: 0x8c, hi: 0x8f},
+ {value: 0x0808, lo: 0x90, hi: 0x93},
{value: 0x0040, lo: 0x94, hi: 0x94},
- {value: 0x0008, lo: 0x95, hi: 0x97},
+ {value: 0x0808, lo: 0x95, hi: 0x97},
{value: 0x0040, lo: 0x98, hi: 0x98},
- {value: 0x0008, lo: 0x99, hi: 0xb3},
+ {value: 0x0808, lo: 0x99, hi: 0xb3},
{value: 0x0040, lo: 0xb4, hi: 0xb7},
- {value: 0x1308, lo: 0xb8, hi: 0xba},
+ {value: 0x3308, lo: 0xb8, hi: 0xba},
{value: 0x0040, lo: 0xbb, hi: 0xbe},
- {value: 0x1b08, lo: 0xbf, hi: 0xbf},
- // Block 0xa2, offset 0x4f5
+ {value: 0x3b08, lo: 0xbf, hi: 0xbf},
+ // Block 0xa1, offset 0x4da
{value: 0x0000, lo: 0x06},
- {value: 0x0018, lo: 0x80, hi: 0x87},
+ {value: 0x0818, lo: 0x80, hi: 0x87},
{value: 0x0040, lo: 0x88, hi: 0x8f},
- {value: 0x0018, lo: 0x90, hi: 0x98},
+ {value: 0x0818, lo: 0x90, hi: 0x98},
{value: 0x0040, lo: 0x99, hi: 0x9f},
- {value: 0x0008, lo: 0xa0, hi: 0xbc},
- {value: 0x0018, lo: 0xbd, hi: 0xbf},
- // Block 0xa3, offset 0x4fc
+ {value: 0x0808, lo: 0xa0, hi: 0xbc},
+ {value: 0x0818, lo: 0xbd, hi: 0xbf},
+ // Block 0xa2, offset 0x4e1
{value: 0x0000, lo: 0x03},
- {value: 0x0008, lo: 0x80, hi: 0x9c},
- {value: 0x0018, lo: 0x9d, hi: 0x9f},
+ {value: 0x0808, lo: 0x80, hi: 0x9c},
+ {value: 0x0818, lo: 0x9d, hi: 0x9f},
{value: 0x0040, lo: 0xa0, hi: 0xbf},
- // Block 0xa4, offset 0x500
+ // Block 0xa3, offset 0x4e5
{value: 0x0000, lo: 0x03},
- {value: 0x0008, lo: 0x80, hi: 0xb5},
+ {value: 0x0808, lo: 0x80, hi: 0xb5},
{value: 0x0040, lo: 0xb6, hi: 0xb8},
{value: 0x0018, lo: 0xb9, hi: 0xbf},
- // Block 0xa5, offset 0x504
+ // Block 0xa4, offset 0x4e9
{value: 0x0000, lo: 0x06},
- {value: 0x0008, lo: 0x80, hi: 0x95},
+ {value: 0x0808, lo: 0x80, hi: 0x95},
{value: 0x0040, lo: 0x96, hi: 0x97},
- {value: 0x0018, lo: 0x98, hi: 0x9f},
- {value: 0x0008, lo: 0xa0, hi: 0xb2},
+ {value: 0x0818, lo: 0x98, hi: 0x9f},
+ {value: 0x0808, lo: 0xa0, hi: 0xb2},
{value: 0x0040, lo: 0xb3, hi: 0xb7},
- {value: 0x0018, lo: 0xb8, hi: 0xbf},
- // Block 0xa6, offset 0x50b
+ {value: 0x0818, lo: 0xb8, hi: 0xbf},
+ // Block 0xa5, offset 0x4f0
+ {value: 0x0000, lo: 0x01},
+ {value: 0x0808, lo: 0x80, hi: 0xbf},
+ // Block 0xa6, offset 0x4f2
{value: 0x0000, lo: 0x02},
- {value: 0x0008, lo: 0x80, hi: 0x88},
+ {value: 0x0808, lo: 0x80, hi: 0x88},
{value: 0x0040, lo: 0x89, hi: 0xbf},
- // Block 0xa7, offset 0x50e
+ // Block 0xa7, offset 0x4f5
{value: 0x0000, lo: 0x02},
{value: 0x03dd, lo: 0x80, hi: 0xb2},
{value: 0x0040, lo: 0xb3, hi: 0xbf},
- // Block 0xa8, offset 0x511
+ // Block 0xa8, offset 0x4f8
{value: 0x0000, lo: 0x03},
- {value: 0x0008, lo: 0x80, hi: 0xb2},
+ {value: 0x0808, lo: 0x80, hi: 0xb2},
{value: 0x0040, lo: 0xb3, hi: 0xb9},
- {value: 0x0018, lo: 0xba, hi: 0xbf},
- // Block 0xa9, offset 0x515
+ {value: 0x0818, lo: 0xba, hi: 0xbf},
+ // Block 0xa9, offset 0x4fc
{value: 0x0000, lo: 0x03},
{value: 0x0040, lo: 0x80, hi: 0x9f},
- {value: 0x0018, lo: 0xa0, hi: 0xbe},
+ {value: 0x0818, lo: 0xa0, hi: 0xbe},
{value: 0x0040, lo: 0xbf, hi: 0xbf},
- // Block 0xaa, offset 0x519
+ // Block 0xaa, offset 0x500
{value: 0x0000, lo: 0x05},
- {value: 0x1008, lo: 0x80, hi: 0x80},
- {value: 0x1308, lo: 0x81, hi: 0x81},
- {value: 0x1008, lo: 0x82, hi: 0x82},
+ {value: 0x3008, lo: 0x80, hi: 0x80},
+ {value: 0x3308, lo: 0x81, hi: 0x81},
+ {value: 0x3008, lo: 0x82, hi: 0x82},
{value: 0x0008, lo: 0x83, hi: 0xb7},
- {value: 0x1308, lo: 0xb8, hi: 0xbf},
- // Block 0xab, offset 0x51f
+ {value: 0x3308, lo: 0xb8, hi: 0xbf},
+ // Block 0xab, offset 0x506
{value: 0x0000, lo: 0x08},
- {value: 0x1308, lo: 0x80, hi: 0x85},
- {value: 0x1b08, lo: 0x86, hi: 0x86},
+ {value: 0x3308, lo: 0x80, hi: 0x85},
+ {value: 0x3b08, lo: 0x86, hi: 0x86},
{value: 0x0018, lo: 0x87, hi: 0x8d},
{value: 0x0040, lo: 0x8e, hi: 0x91},
{value: 0x0018, lo: 0x92, hi: 0xa5},
{value: 0x0008, lo: 0xa6, hi: 0xaf},
{value: 0x0040, lo: 0xb0, hi: 0xbe},
- {value: 0x1b08, lo: 0xbf, hi: 0xbf},
- // Block 0xac, offset 0x528
+ {value: 0x3b08, lo: 0xbf, hi: 0xbf},
+ // Block 0xac, offset 0x50f
{value: 0x0000, lo: 0x0b},
- {value: 0x1308, lo: 0x80, hi: 0x81},
- {value: 0x1008, lo: 0x82, hi: 0x82},
+ {value: 0x3308, lo: 0x80, hi: 0x81},
+ {value: 0x3008, lo: 0x82, hi: 0x82},
{value: 0x0008, lo: 0x83, hi: 0xaf},
- {value: 0x1008, lo: 0xb0, hi: 0xb2},
- {value: 0x1308, lo: 0xb3, hi: 0xb6},
- {value: 0x1008, lo: 0xb7, hi: 0xb8},
- {value: 0x1b08, lo: 0xb9, hi: 0xb9},
- {value: 0x1308, lo: 0xba, hi: 0xba},
+ {value: 0x3008, lo: 0xb0, hi: 0xb2},
+ {value: 0x3308, lo: 0xb3, hi: 0xb6},
+ {value: 0x3008, lo: 0xb7, hi: 0xb8},
+ {value: 0x3b08, lo: 0xb9, hi: 0xb9},
+ {value: 0x3308, lo: 0xba, hi: 0xba},
{value: 0x0018, lo: 0xbb, hi: 0xbc},
{value: 0x0340, lo: 0xbd, hi: 0xbd},
{value: 0x0018, lo: 0xbe, hi: 0xbf},
- // Block 0xad, offset 0x534
+ // Block 0xad, offset 0x51b
{value: 0x0000, lo: 0x06},
{value: 0x0018, lo: 0x80, hi: 0x81},
{value: 0x0040, lo: 0x82, hi: 0x8f},
@@ -3855,39 +3861,39 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0xa9, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xb9},
{value: 0x0040, lo: 0xba, hi: 0xbf},
- // Block 0xae, offset 0x53b
+ // Block 0xae, offset 0x522
{value: 0x0000, lo: 0x08},
- {value: 0x1308, lo: 0x80, hi: 0x82},
+ {value: 0x3308, lo: 0x80, hi: 0x82},
{value: 0x0008, lo: 0x83, hi: 0xa6},
- {value: 0x1308, lo: 0xa7, hi: 0xab},
- {value: 0x1008, lo: 0xac, hi: 0xac},
- {value: 0x1308, lo: 0xad, hi: 0xb2},
- {value: 0x1b08, lo: 0xb3, hi: 0xb4},
+ {value: 0x3308, lo: 0xa7, hi: 0xab},
+ {value: 0x3008, lo: 0xac, hi: 0xac},
+ {value: 0x3308, lo: 0xad, hi: 0xb2},
+ {value: 0x3b08, lo: 0xb3, hi: 0xb4},
{value: 0x0040, lo: 0xb5, hi: 0xb5},
{value: 0x0008, lo: 0xb6, hi: 0xbf},
- // Block 0xaf, offset 0x544
+ // Block 0xaf, offset 0x52b
{value: 0x0000, lo: 0x07},
{value: 0x0018, lo: 0x80, hi: 0x83},
{value: 0x0040, lo: 0x84, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0xb2},
- {value: 0x1308, lo: 0xb3, hi: 0xb3},
+ {value: 0x3308, lo: 0xb3, hi: 0xb3},
{value: 0x0018, lo: 0xb4, hi: 0xb5},
{value: 0x0008, lo: 0xb6, hi: 0xb6},
{value: 0x0040, lo: 0xb7, hi: 0xbf},
- // Block 0xb0, offset 0x54c
+ // Block 0xb0, offset 0x533
{value: 0x0000, lo: 0x06},
- {value: 0x1308, lo: 0x80, hi: 0x81},
- {value: 0x1008, lo: 0x82, hi: 0x82},
+ {value: 0x3308, lo: 0x80, hi: 0x81},
+ {value: 0x3008, lo: 0x82, hi: 0x82},
{value: 0x0008, lo: 0x83, hi: 0xb2},
- {value: 0x1008, lo: 0xb3, hi: 0xb5},
- {value: 0x1308, lo: 0xb6, hi: 0xbe},
- {value: 0x1008, lo: 0xbf, hi: 0xbf},
- // Block 0xb1, offset 0x553
+ {value: 0x3008, lo: 0xb3, hi: 0xb5},
+ {value: 0x3308, lo: 0xb6, hi: 0xbe},
+ {value: 0x3008, lo: 0xbf, hi: 0xbf},
+ // Block 0xb1, offset 0x53a
{value: 0x0000, lo: 0x0d},
- {value: 0x1808, lo: 0x80, hi: 0x80},
+ {value: 0x3808, lo: 0x80, hi: 0x80},
{value: 0x0008, lo: 0x81, hi: 0x84},
{value: 0x0018, lo: 0x85, hi: 0x89},
- {value: 0x1308, lo: 0x8a, hi: 0x8c},
+ {value: 0x3308, lo: 0x8a, hi: 0x8c},
{value: 0x0018, lo: 0x8d, hi: 0x8d},
{value: 0x0040, lo: 0x8e, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x9a},
@@ -3897,21 +3903,21 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0xa0, hi: 0xa0},
{value: 0x0018, lo: 0xa1, hi: 0xb4},
{value: 0x0040, lo: 0xb5, hi: 0xbf},
- // Block 0xb2, offset 0x561
+ // Block 0xb2, offset 0x548
{value: 0x0000, lo: 0x0c},
{value: 0x0008, lo: 0x80, hi: 0x91},
{value: 0x0040, lo: 0x92, hi: 0x92},
{value: 0x0008, lo: 0x93, hi: 0xab},
- {value: 0x1008, lo: 0xac, hi: 0xae},
- {value: 0x1308, lo: 0xaf, hi: 0xb1},
- {value: 0x1008, lo: 0xb2, hi: 0xb3},
- {value: 0x1308, lo: 0xb4, hi: 0xb4},
- {value: 0x1808, lo: 0xb5, hi: 0xb5},
- {value: 0x1308, lo: 0xb6, hi: 0xb7},
+ {value: 0x3008, lo: 0xac, hi: 0xae},
+ {value: 0x3308, lo: 0xaf, hi: 0xb1},
+ {value: 0x3008, lo: 0xb2, hi: 0xb3},
+ {value: 0x3308, lo: 0xb4, hi: 0xb4},
+ {value: 0x3808, lo: 0xb5, hi: 0xb5},
+ {value: 0x3308, lo: 0xb6, hi: 0xb7},
{value: 0x0018, lo: 0xb8, hi: 0xbd},
- {value: 0x1308, lo: 0xbe, hi: 0xbe},
+ {value: 0x3308, lo: 0xbe, hi: 0xbe},
{value: 0x0040, lo: 0xbf, hi: 0xbf},
- // Block 0xb3, offset 0x56e
+ // Block 0xb3, offset 0x555
{value: 0x0000, lo: 0x0c},
{value: 0x0008, lo: 0x80, hi: 0x86},
{value: 0x0040, lo: 0x87, hi: 0x87},
@@ -3925,28 +3931,28 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0018, lo: 0xa9, hi: 0xa9},
{value: 0x0040, lo: 0xaa, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xbf},
- // Block 0xb4, offset 0x57b
+ // Block 0xb4, offset 0x562
{value: 0x0000, lo: 0x08},
{value: 0x0008, lo: 0x80, hi: 0x9e},
- {value: 0x1308, lo: 0x9f, hi: 0x9f},
- {value: 0x1008, lo: 0xa0, hi: 0xa2},
- {value: 0x1308, lo: 0xa3, hi: 0xa9},
- {value: 0x1b08, lo: 0xaa, hi: 0xaa},
+ {value: 0x3308, lo: 0x9f, hi: 0x9f},
+ {value: 0x3008, lo: 0xa0, hi: 0xa2},
+ {value: 0x3308, lo: 0xa3, hi: 0xa9},
+ {value: 0x3b08, lo: 0xaa, hi: 0xaa},
{value: 0x0040, lo: 0xab, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xb9},
{value: 0x0040, lo: 0xba, hi: 0xbf},
- // Block 0xb5, offset 0x584
+ // Block 0xb5, offset 0x56b
{value: 0x0000, lo: 0x03},
{value: 0x0008, lo: 0x80, hi: 0xb4},
- {value: 0x1008, lo: 0xb5, hi: 0xb7},
- {value: 0x1308, lo: 0xb8, hi: 0xbf},
- // Block 0xb6, offset 0x588
+ {value: 0x3008, lo: 0xb5, hi: 0xb7},
+ {value: 0x3308, lo: 0xb8, hi: 0xbf},
+ // Block 0xb6, offset 0x56f
{value: 0x0000, lo: 0x0d},
- {value: 0x1008, lo: 0x80, hi: 0x81},
- {value: 0x1b08, lo: 0x82, hi: 0x82},
- {value: 0x1308, lo: 0x83, hi: 0x84},
- {value: 0x1008, lo: 0x85, hi: 0x85},
- {value: 0x1308, lo: 0x86, hi: 0x86},
+ {value: 0x3008, lo: 0x80, hi: 0x81},
+ {value: 0x3b08, lo: 0x82, hi: 0x82},
+ {value: 0x3308, lo: 0x83, hi: 0x84},
+ {value: 0x3008, lo: 0x85, hi: 0x85},
+ {value: 0x3308, lo: 0x86, hi: 0x86},
{value: 0x0008, lo: 0x87, hi: 0x8a},
{value: 0x0018, lo: 0x8b, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x99},
@@ -3955,56 +3961,56 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0x9c, hi: 0x9c},
{value: 0x0018, lo: 0x9d, hi: 0x9d},
{value: 0x0040, lo: 0x9e, hi: 0xbf},
- // Block 0xb7, offset 0x596
+ // Block 0xb7, offset 0x57d
{value: 0x0000, lo: 0x07},
{value: 0x0008, lo: 0x80, hi: 0xaf},
- {value: 0x1008, lo: 0xb0, hi: 0xb2},
- {value: 0x1308, lo: 0xb3, hi: 0xb8},
- {value: 0x1008, lo: 0xb9, hi: 0xb9},
- {value: 0x1308, lo: 0xba, hi: 0xba},
- {value: 0x1008, lo: 0xbb, hi: 0xbe},
- {value: 0x1308, lo: 0xbf, hi: 0xbf},
- // Block 0xb8, offset 0x59e
+ {value: 0x3008, lo: 0xb0, hi: 0xb2},
+ {value: 0x3308, lo: 0xb3, hi: 0xb8},
+ {value: 0x3008, lo: 0xb9, hi: 0xb9},
+ {value: 0x3308, lo: 0xba, hi: 0xba},
+ {value: 0x3008, lo: 0xbb, hi: 0xbe},
+ {value: 0x3308, lo: 0xbf, hi: 0xbf},
+ // Block 0xb8, offset 0x585
{value: 0x0000, lo: 0x0a},
- {value: 0x1308, lo: 0x80, hi: 0x80},
- {value: 0x1008, lo: 0x81, hi: 0x81},
- {value: 0x1b08, lo: 0x82, hi: 0x82},
- {value: 0x1308, lo: 0x83, hi: 0x83},
+ {value: 0x3308, lo: 0x80, hi: 0x80},
+ {value: 0x3008, lo: 0x81, hi: 0x81},
+ {value: 0x3b08, lo: 0x82, hi: 0x82},
+ {value: 0x3308, lo: 0x83, hi: 0x83},
{value: 0x0008, lo: 0x84, hi: 0x85},
{value: 0x0018, lo: 0x86, hi: 0x86},
{value: 0x0008, lo: 0x87, hi: 0x87},
{value: 0x0040, lo: 0x88, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0xbf},
- // Block 0xb9, offset 0x5a9
+ // Block 0xb9, offset 0x590
{value: 0x0000, lo: 0x08},
{value: 0x0008, lo: 0x80, hi: 0xae},
- {value: 0x1008, lo: 0xaf, hi: 0xb1},
- {value: 0x1308, lo: 0xb2, hi: 0xb5},
+ {value: 0x3008, lo: 0xaf, hi: 0xb1},
+ {value: 0x3308, lo: 0xb2, hi: 0xb5},
{value: 0x0040, lo: 0xb6, hi: 0xb7},
- {value: 0x1008, lo: 0xb8, hi: 0xbb},
- {value: 0x1308, lo: 0xbc, hi: 0xbd},
- {value: 0x1008, lo: 0xbe, hi: 0xbe},
- {value: 0x1b08, lo: 0xbf, hi: 0xbf},
- // Block 0xba, offset 0x5b2
+ {value: 0x3008, lo: 0xb8, hi: 0xbb},
+ {value: 0x3308, lo: 0xbc, hi: 0xbd},
+ {value: 0x3008, lo: 0xbe, hi: 0xbe},
+ {value: 0x3b08, lo: 0xbf, hi: 0xbf},
+ // Block 0xba, offset 0x599
{value: 0x0000, lo: 0x05},
- {value: 0x1308, lo: 0x80, hi: 0x80},
+ {value: 0x3308, lo: 0x80, hi: 0x80},
{value: 0x0018, lo: 0x81, hi: 0x97},
{value: 0x0008, lo: 0x98, hi: 0x9b},
- {value: 0x1308, lo: 0x9c, hi: 0x9d},
+ {value: 0x3308, lo: 0x9c, hi: 0x9d},
{value: 0x0040, lo: 0x9e, hi: 0xbf},
- // Block 0xbb, offset 0x5b8
+ // Block 0xbb, offset 0x59f
{value: 0x0000, lo: 0x07},
{value: 0x0008, lo: 0x80, hi: 0xaf},
- {value: 0x1008, lo: 0xb0, hi: 0xb2},
- {value: 0x1308, lo: 0xb3, hi: 0xba},
- {value: 0x1008, lo: 0xbb, hi: 0xbc},
- {value: 0x1308, lo: 0xbd, hi: 0xbd},
- {value: 0x1008, lo: 0xbe, hi: 0xbe},
- {value: 0x1b08, lo: 0xbf, hi: 0xbf},
- // Block 0xbc, offset 0x5c0
+ {value: 0x3008, lo: 0xb0, hi: 0xb2},
+ {value: 0x3308, lo: 0xb3, hi: 0xba},
+ {value: 0x3008, lo: 0xbb, hi: 0xbc},
+ {value: 0x3308, lo: 0xbd, hi: 0xbd},
+ {value: 0x3008, lo: 0xbe, hi: 0xbe},
+ {value: 0x3b08, lo: 0xbf, hi: 0xbf},
+ // Block 0xbc, offset 0x5a7
{value: 0x0000, lo: 0x08},
- {value: 0x1308, lo: 0x80, hi: 0x80},
+ {value: 0x3308, lo: 0x80, hi: 0x80},
{value: 0x0018, lo: 0x81, hi: 0x83},
{value: 0x0008, lo: 0x84, hi: 0x84},
{value: 0x0040, lo: 0x85, hi: 0x8f},
@@ -4012,60 +4018,97 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0x9a, hi: 0x9f},
{value: 0x0018, lo: 0xa0, hi: 0xac},
{value: 0x0040, lo: 0xad, hi: 0xbf},
- // Block 0xbd, offset 0x5c9
+ // Block 0xbd, offset 0x5b0
{value: 0x0000, lo: 0x09},
{value: 0x0008, lo: 0x80, hi: 0xaa},
- {value: 0x1308, lo: 0xab, hi: 0xab},
- {value: 0x1008, lo: 0xac, hi: 0xac},
- {value: 0x1308, lo: 0xad, hi: 0xad},
- {value: 0x1008, lo: 0xae, hi: 0xaf},
- {value: 0x1308, lo: 0xb0, hi: 0xb5},
- {value: 0x1808, lo: 0xb6, hi: 0xb6},
- {value: 0x1308, lo: 0xb7, hi: 0xb7},
+ {value: 0x3308, lo: 0xab, hi: 0xab},
+ {value: 0x3008, lo: 0xac, hi: 0xac},
+ {value: 0x3308, lo: 0xad, hi: 0xad},
+ {value: 0x3008, lo: 0xae, hi: 0xaf},
+ {value: 0x3308, lo: 0xb0, hi: 0xb5},
+ {value: 0x3808, lo: 0xb6, hi: 0xb6},
+ {value: 0x3308, lo: 0xb7, hi: 0xb7},
{value: 0x0040, lo: 0xb8, hi: 0xbf},
- // Block 0xbe, offset 0x5d3
+ // Block 0xbe, offset 0x5ba
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0x89},
{value: 0x0040, lo: 0x8a, hi: 0xbf},
- // Block 0xbf, offset 0x5d6
+ // Block 0xbf, offset 0x5bd
{value: 0x0000, lo: 0x0b},
{value: 0x0008, lo: 0x80, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0x9c},
- {value: 0x1308, lo: 0x9d, hi: 0x9f},
- {value: 0x1008, lo: 0xa0, hi: 0xa1},
- {value: 0x1308, lo: 0xa2, hi: 0xa5},
- {value: 0x1008, lo: 0xa6, hi: 0xa6},
- {value: 0x1308, lo: 0xa7, hi: 0xaa},
- {value: 0x1b08, lo: 0xab, hi: 0xab},
+ {value: 0x3308, lo: 0x9d, hi: 0x9f},
+ {value: 0x3008, lo: 0xa0, hi: 0xa1},
+ {value: 0x3308, lo: 0xa2, hi: 0xa5},
+ {value: 0x3008, lo: 0xa6, hi: 0xa6},
+ {value: 0x3308, lo: 0xa7, hi: 0xaa},
+ {value: 0x3b08, lo: 0xab, hi: 0xab},
{value: 0x0040, lo: 0xac, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xb9},
{value: 0x0018, lo: 0xba, hi: 0xbf},
- // Block 0xc0, offset 0x5e2
+ // Block 0xc0, offset 0x5c9
{value: 0x0000, lo: 0x02},
{value: 0x0040, lo: 0x80, hi: 0x9f},
{value: 0x049d, lo: 0xa0, hi: 0xbf},
- // Block 0xc1, offset 0x5e5
+ // Block 0xc1, offset 0x5cc
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0xa9},
{value: 0x0018, lo: 0xaa, hi: 0xb2},
{value: 0x0040, lo: 0xb3, hi: 0xbe},
{value: 0x0008, lo: 0xbf, hi: 0xbf},
- // Block 0xc2, offset 0x5ea
+ // Block 0xc2, offset 0x5d1
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x0008, lo: 0x80, hi: 0x80},
+ {value: 0x3308, lo: 0x81, hi: 0x86},
+ {value: 0x3008, lo: 0x87, hi: 0x88},
+ {value: 0x3308, lo: 0x89, hi: 0x8a},
+ {value: 0x0008, lo: 0x8b, hi: 0xb2},
+ {value: 0x3308, lo: 0xb3, hi: 0xb3},
+ {value: 0x3b08, lo: 0xb4, hi: 0xb4},
+ {value: 0x3308, lo: 0xb5, hi: 0xb8},
+ {value: 0x3008, lo: 0xb9, hi: 0xb9},
+ {value: 0x0008, lo: 0xba, hi: 0xba},
+ {value: 0x3308, lo: 0xbb, hi: 0xbe},
+ {value: 0x0018, lo: 0xbf, hi: 0xbf},
+ // Block 0xc3, offset 0x5de
+ {value: 0x0000, lo: 0x08},
+ {value: 0x0018, lo: 0x80, hi: 0x86},
+ {value: 0x3b08, lo: 0x87, hi: 0x87},
+ {value: 0x0040, lo: 0x88, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x90},
+ {value: 0x3308, lo: 0x91, hi: 0x96},
+ {value: 0x3008, lo: 0x97, hi: 0x98},
+ {value: 0x3308, lo: 0x99, hi: 0x9b},
+ {value: 0x0008, lo: 0x9c, hi: 0xbf},
+ // Block 0xc4, offset 0x5e7
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x0008, lo: 0x80, hi: 0x83},
+ {value: 0x0040, lo: 0x84, hi: 0x85},
+ {value: 0x0008, lo: 0x86, hi: 0x89},
+ {value: 0x3308, lo: 0x8a, hi: 0x96},
+ {value: 0x3008, lo: 0x97, hi: 0x97},
+ {value: 0x3308, lo: 0x98, hi: 0x98},
+ {value: 0x3b08, lo: 0x99, hi: 0x99},
+ {value: 0x0018, lo: 0x9a, hi: 0x9c},
+ {value: 0x0040, lo: 0x9d, hi: 0x9d},
+ {value: 0x0018, lo: 0x9e, hi: 0xa2},
+ {value: 0x0040, lo: 0xa3, hi: 0xbf},
+ // Block 0xc5, offset 0x5f3
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0xb8},
{value: 0x0040, lo: 0xb9, hi: 0xbf},
- // Block 0xc3, offset 0x5ed
+ // Block 0xc6, offset 0x5f6
{value: 0x0000, lo: 0x09},
{value: 0x0008, lo: 0x80, hi: 0x88},
{value: 0x0040, lo: 0x89, hi: 0x89},
{value: 0x0008, lo: 0x8a, hi: 0xae},
- {value: 0x1008, lo: 0xaf, hi: 0xaf},
- {value: 0x1308, lo: 0xb0, hi: 0xb6},
+ {value: 0x3008, lo: 0xaf, hi: 0xaf},
+ {value: 0x3308, lo: 0xb0, hi: 0xb6},
{value: 0x0040, lo: 0xb7, hi: 0xb7},
- {value: 0x1308, lo: 0xb8, hi: 0xbd},
- {value: 0x1008, lo: 0xbe, hi: 0xbe},
- {value: 0x1b08, lo: 0xbf, hi: 0xbf},
- // Block 0xc4, offset 0x5f7
+ {value: 0x3308, lo: 0xb8, hi: 0xbd},
+ {value: 0x3008, lo: 0xbe, hi: 0xbe},
+ {value: 0x3b08, lo: 0xbf, hi: 0xbf},
+ // Block 0xc7, offset 0x600
{value: 0x0000, lo: 0x08},
{value: 0x0008, lo: 0x80, hi: 0x80},
{value: 0x0018, lo: 0x81, hi: 0x85},
@@ -4075,42 +4118,65 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0xad, hi: 0xaf},
{value: 0x0018, lo: 0xb0, hi: 0xb1},
{value: 0x0008, lo: 0xb2, hi: 0xbf},
- // Block 0xc5, offset 0x600
+ // Block 0xc8, offset 0x609
{value: 0x0000, lo: 0x0b},
{value: 0x0008, lo: 0x80, hi: 0x8f},
{value: 0x0040, lo: 0x90, hi: 0x91},
- {value: 0x1308, lo: 0x92, hi: 0xa7},
+ {value: 0x3308, lo: 0x92, hi: 0xa7},
{value: 0x0040, lo: 0xa8, hi: 0xa8},
- {value: 0x1008, lo: 0xa9, hi: 0xa9},
- {value: 0x1308, lo: 0xaa, hi: 0xb0},
- {value: 0x1008, lo: 0xb1, hi: 0xb1},
- {value: 0x1308, lo: 0xb2, hi: 0xb3},
- {value: 0x1008, lo: 0xb4, hi: 0xb4},
- {value: 0x1308, lo: 0xb5, hi: 0xb6},
+ {value: 0x3008, lo: 0xa9, hi: 0xa9},
+ {value: 0x3308, lo: 0xaa, hi: 0xb0},
+ {value: 0x3008, lo: 0xb1, hi: 0xb1},
+ {value: 0x3308, lo: 0xb2, hi: 0xb3},
+ {value: 0x3008, lo: 0xb4, hi: 0xb4},
+ {value: 0x3308, lo: 0xb5, hi: 0xb6},
{value: 0x0040, lo: 0xb7, hi: 0xbf},
- // Block 0xc6, offset 0x60c
+ // Block 0xc9, offset 0x615
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x0008, lo: 0x80, hi: 0x86},
+ {value: 0x0040, lo: 0x87, hi: 0x87},
+ {value: 0x0008, lo: 0x88, hi: 0x89},
+ {value: 0x0040, lo: 0x8a, hi: 0x8a},
+ {value: 0x0008, lo: 0x8b, hi: 0xb0},
+ {value: 0x3308, lo: 0xb1, hi: 0xb6},
+ {value: 0x0040, lo: 0xb7, hi: 0xb9},
+ {value: 0x3308, lo: 0xba, hi: 0xba},
+ {value: 0x0040, lo: 0xbb, hi: 0xbb},
+ {value: 0x3308, lo: 0xbc, hi: 0xbd},
+ {value: 0x0040, lo: 0xbe, hi: 0xbe},
+ {value: 0x3308, lo: 0xbf, hi: 0xbf},
+ // Block 0xca, offset 0x622
+ {value: 0x0000, lo: 0x07},
+ {value: 0x3308, lo: 0x80, hi: 0x83},
+ {value: 0x3b08, lo: 0x84, hi: 0x85},
+ {value: 0x0008, lo: 0x86, hi: 0x86},
+ {value: 0x3308, lo: 0x87, hi: 0x87},
+ {value: 0x0040, lo: 0x88, hi: 0x8f},
+ {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0040, lo: 0x9a, hi: 0xbf},
+ // Block 0xcb, offset 0x62a
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0xbf},
- // Block 0xc7, offset 0x60f
+ // Block 0xcc, offset 0x62d
{value: 0x0000, lo: 0x04},
{value: 0x0018, lo: 0x80, hi: 0xae},
{value: 0x0040, lo: 0xaf, hi: 0xaf},
{value: 0x0018, lo: 0xb0, hi: 0xb4},
{value: 0x0040, lo: 0xb5, hi: 0xbf},
- // Block 0xc8, offset 0x614
+ // Block 0xcd, offset 0x632
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0x83},
{value: 0x0040, lo: 0x84, hi: 0xbf},
- // Block 0xc9, offset 0x617
+ // Block 0xce, offset 0x635
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0xae},
{value: 0x0040, lo: 0xaf, hi: 0xbf},
- // Block 0xca, offset 0x61a
+ // Block 0xcf, offset 0x638
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0x86},
{value: 0x0040, lo: 0x87, hi: 0xbf},
- // Block 0xcb, offset 0x61d
+ // Block 0xd0, offset 0x63b
{value: 0x0000, lo: 0x06},
{value: 0x0008, lo: 0x80, hi: 0x9e},
{value: 0x0040, lo: 0x9f, hi: 0x9f},
@@ -4118,20 +4184,20 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0xaa, hi: 0xad},
{value: 0x0018, lo: 0xae, hi: 0xaf},
{value: 0x0040, lo: 0xb0, hi: 0xbf},
- // Block 0xcc, offset 0x624
+ // Block 0xd1, offset 0x642
{value: 0x0000, lo: 0x06},
{value: 0x0040, lo: 0x80, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0xad},
{value: 0x0040, lo: 0xae, hi: 0xaf},
- {value: 0x1308, lo: 0xb0, hi: 0xb4},
+ {value: 0x3308, lo: 0xb0, hi: 0xb4},
{value: 0x0018, lo: 0xb5, hi: 0xb5},
{value: 0x0040, lo: 0xb6, hi: 0xbf},
- // Block 0xcd, offset 0x62b
+ // Block 0xd2, offset 0x649
{value: 0x0000, lo: 0x03},
{value: 0x0008, lo: 0x80, hi: 0xaf},
- {value: 0x1308, lo: 0xb0, hi: 0xb6},
+ {value: 0x3308, lo: 0xb0, hi: 0xb6},
{value: 0x0018, lo: 0xb7, hi: 0xbf},
- // Block 0xce, offset 0x62f
+ // Block 0xd3, offset 0x64d
{value: 0x0000, lo: 0x0a},
{value: 0x0008, lo: 0x80, hi: 0x83},
{value: 0x0018, lo: 0x84, hi: 0x85},
@@ -4143,67 +4209,75 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0008, lo: 0xa3, hi: 0xb7},
{value: 0x0040, lo: 0xb8, hi: 0xbc},
{value: 0x0008, lo: 0xbd, hi: 0xbf},
- // Block 0xcf, offset 0x63a
+ // Block 0xd4, offset 0x658
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0x8f},
{value: 0x0040, lo: 0x90, hi: 0xbf},
- // Block 0xd0, offset 0x63d
+ // Block 0xd5, offset 0x65b
{value: 0x0000, lo: 0x05},
{value: 0x0008, lo: 0x80, hi: 0x84},
{value: 0x0040, lo: 0x85, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x90},
- {value: 0x1008, lo: 0x91, hi: 0xbe},
+ {value: 0x3008, lo: 0x91, hi: 0xbe},
{value: 0x0040, lo: 0xbf, hi: 0xbf},
- // Block 0xd1, offset 0x643
+ // Block 0xd6, offset 0x661
{value: 0x0000, lo: 0x04},
{value: 0x0040, lo: 0x80, hi: 0x8e},
- {value: 0x1308, lo: 0x8f, hi: 0x92},
+ {value: 0x3308, lo: 0x8f, hi: 0x92},
{value: 0x0008, lo: 0x93, hi: 0x9f},
{value: 0x0040, lo: 0xa0, hi: 0xbf},
- // Block 0xd2, offset 0x648
+ // Block 0xd7, offset 0x666
{value: 0x0000, lo: 0x03},
{value: 0x0040, lo: 0x80, hi: 0x9f},
- {value: 0x0008, lo: 0xa0, hi: 0xa0},
- {value: 0x0040, lo: 0xa1, hi: 0xbf},
- // Block 0xd3, offset 0x64c
+ {value: 0x0008, lo: 0xa0, hi: 0xa1},
+ {value: 0x0040, lo: 0xa2, hi: 0xbf},
+ // Block 0xd8, offset 0x66a
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0xac},
{value: 0x0040, lo: 0xad, hi: 0xbf},
- // Block 0xd4, offset 0x64f
+ // Block 0xd9, offset 0x66d
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0xb2},
{value: 0x0040, lo: 0xb3, hi: 0xbf},
- // Block 0xd5, offset 0x652
+ // Block 0xda, offset 0x670
{value: 0x0000, lo: 0x02},
- {value: 0x0008, lo: 0x80, hi: 0x81},
- {value: 0x0040, lo: 0x82, hi: 0xbf},
- // Block 0xd6, offset 0x655
+ {value: 0x0008, lo: 0x80, hi: 0x9e},
+ {value: 0x0040, lo: 0x9f, hi: 0xbf},
+ // Block 0xdb, offset 0x673
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0040, lo: 0x80, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0xdc, offset 0x676
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0xbb},
+ {value: 0x0040, lo: 0xbc, hi: 0xbf},
+ // Block 0xdd, offset 0x679
{value: 0x0000, lo: 0x04},
{value: 0x0008, lo: 0x80, hi: 0xaa},
{value: 0x0040, lo: 0xab, hi: 0xaf},
{value: 0x0008, lo: 0xb0, hi: 0xbc},
{value: 0x0040, lo: 0xbd, hi: 0xbf},
- // Block 0xd7, offset 0x65a
+ // Block 0xde, offset 0x67e
{value: 0x0000, lo: 0x09},
{value: 0x0008, lo: 0x80, hi: 0x88},
{value: 0x0040, lo: 0x89, hi: 0x8f},
{value: 0x0008, lo: 0x90, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0x9b},
{value: 0x0018, lo: 0x9c, hi: 0x9c},
- {value: 0x1308, lo: 0x9d, hi: 0x9e},
+ {value: 0x3308, lo: 0x9d, hi: 0x9e},
{value: 0x0018, lo: 0x9f, hi: 0x9f},
{value: 0x03c0, lo: 0xa0, hi: 0xa3},
{value: 0x0040, lo: 0xa4, hi: 0xbf},
- // Block 0xd8, offset 0x664
+ // Block 0xdf, offset 0x688
{value: 0x0000, lo: 0x02},
{value: 0x0018, lo: 0x80, hi: 0xb5},
{value: 0x0040, lo: 0xb6, hi: 0xbf},
- // Block 0xd9, offset 0x667
+ // Block 0xe0, offset 0x68b
{value: 0x0000, lo: 0x03},
{value: 0x0018, lo: 0x80, hi: 0xa6},
{value: 0x0040, lo: 0xa7, hi: 0xa8},
{value: 0x0018, lo: 0xa9, hi: 0xbf},
- // Block 0xda, offset 0x66b
+ // Block 0xe1, offset 0x68f
{value: 0x0000, lo: 0x0e},
{value: 0x0018, lo: 0x80, hi: 0x9d},
{value: 0xb5b9, lo: 0x9e, hi: 0x9e},
@@ -4213,127 +4287,127 @@ var idnaSparseValues = [1876]valueRange{
{value: 0xb719, lo: 0xa2, hi: 0xa2},
{value: 0xb781, lo: 0xa3, hi: 0xa3},
{value: 0xb7e9, lo: 0xa4, hi: 0xa4},
- {value: 0x1018, lo: 0xa5, hi: 0xa6},
- {value: 0x1318, lo: 0xa7, hi: 0xa9},
+ {value: 0x3018, lo: 0xa5, hi: 0xa6},
+ {value: 0x3318, lo: 0xa7, hi: 0xa9},
{value: 0x0018, lo: 0xaa, hi: 0xac},
- {value: 0x1018, lo: 0xad, hi: 0xb2},
+ {value: 0x3018, lo: 0xad, hi: 0xb2},
{value: 0x0340, lo: 0xb3, hi: 0xba},
- {value: 0x1318, lo: 0xbb, hi: 0xbf},
- // Block 0xdb, offset 0x67a
+ {value: 0x3318, lo: 0xbb, hi: 0xbf},
+ // Block 0xe2, offset 0x69e
{value: 0x0000, lo: 0x0b},
- {value: 0x1318, lo: 0x80, hi: 0x82},
+ {value: 0x3318, lo: 0x80, hi: 0x82},
{value: 0x0018, lo: 0x83, hi: 0x84},
- {value: 0x1318, lo: 0x85, hi: 0x8b},
+ {value: 0x3318, lo: 0x85, hi: 0x8b},
{value: 0x0018, lo: 0x8c, hi: 0xa9},
- {value: 0x1318, lo: 0xaa, hi: 0xad},
+ {value: 0x3318, lo: 0xaa, hi: 0xad},
{value: 0x0018, lo: 0xae, hi: 0xba},
{value: 0xb851, lo: 0xbb, hi: 0xbb},
{value: 0xb899, lo: 0xbc, hi: 0xbc},
{value: 0xb8e1, lo: 0xbd, hi: 0xbd},
{value: 0xb949, lo: 0xbe, hi: 0xbe},
{value: 0xb9b1, lo: 0xbf, hi: 0xbf},
- // Block 0xdc, offset 0x686
+ // Block 0xe3, offset 0x6aa
{value: 0x0000, lo: 0x03},
{value: 0xba19, lo: 0x80, hi: 0x80},
{value: 0x0018, lo: 0x81, hi: 0xa8},
{value: 0x0040, lo: 0xa9, hi: 0xbf},
- // Block 0xdd, offset 0x68a
+ // Block 0xe4, offset 0x6ae
{value: 0x0000, lo: 0x04},
{value: 0x0018, lo: 0x80, hi: 0x81},
- {value: 0x1318, lo: 0x82, hi: 0x84},
+ {value: 0x3318, lo: 0x82, hi: 0x84},
{value: 0x0018, lo: 0x85, hi: 0x85},
{value: 0x0040, lo: 0x86, hi: 0xbf},
- // Block 0xde, offset 0x68f
+ // Block 0xe5, offset 0x6b3
{value: 0x0000, lo: 0x04},
{value: 0x0018, lo: 0x80, hi: 0x96},
{value: 0x0040, lo: 0x97, hi: 0x9f},
{value: 0x0018, lo: 0xa0, hi: 0xb1},
{value: 0x0040, lo: 0xb2, hi: 0xbf},
- // Block 0xdf, offset 0x694
+ // Block 0xe6, offset 0x6b8
{value: 0x0000, lo: 0x03},
- {value: 0x1308, lo: 0x80, hi: 0xb6},
+ {value: 0x3308, lo: 0x80, hi: 0xb6},
{value: 0x0018, lo: 0xb7, hi: 0xba},
- {value: 0x1308, lo: 0xbb, hi: 0xbf},
- // Block 0xe0, offset 0x698
+ {value: 0x3308, lo: 0xbb, hi: 0xbf},
+ // Block 0xe7, offset 0x6bc
{value: 0x0000, lo: 0x04},
- {value: 0x1308, lo: 0x80, hi: 0xac},
+ {value: 0x3308, lo: 0x80, hi: 0xac},
{value: 0x0018, lo: 0xad, hi: 0xb4},
- {value: 0x1308, lo: 0xb5, hi: 0xb5},
+ {value: 0x3308, lo: 0xb5, hi: 0xb5},
{value: 0x0018, lo: 0xb6, hi: 0xbf},
- // Block 0xe1, offset 0x69d
+ // Block 0xe8, offset 0x6c1
{value: 0x0000, lo: 0x08},
{value: 0x0018, lo: 0x80, hi: 0x83},
- {value: 0x1308, lo: 0x84, hi: 0x84},
+ {value: 0x3308, lo: 0x84, hi: 0x84},
{value: 0x0018, lo: 0x85, hi: 0x8b},
{value: 0x0040, lo: 0x8c, hi: 0x9a},
- {value: 0x1308, lo: 0x9b, hi: 0x9f},
+ {value: 0x3308, lo: 0x9b, hi: 0x9f},
{value: 0x0040, lo: 0xa0, hi: 0xa0},
- {value: 0x1308, lo: 0xa1, hi: 0xaf},
+ {value: 0x3308, lo: 0xa1, hi: 0xaf},
{value: 0x0040, lo: 0xb0, hi: 0xbf},
- // Block 0xe2, offset 0x6a6
+ // Block 0xe9, offset 0x6ca
{value: 0x0000, lo: 0x0a},
- {value: 0x1308, lo: 0x80, hi: 0x86},
+ {value: 0x3308, lo: 0x80, hi: 0x86},
{value: 0x0040, lo: 0x87, hi: 0x87},
- {value: 0x1308, lo: 0x88, hi: 0x98},
+ {value: 0x3308, lo: 0x88, hi: 0x98},
{value: 0x0040, lo: 0x99, hi: 0x9a},
- {value: 0x1308, lo: 0x9b, hi: 0xa1},
+ {value: 0x3308, lo: 0x9b, hi: 0xa1},
{value: 0x0040, lo: 0xa2, hi: 0xa2},
- {value: 0x1308, lo: 0xa3, hi: 0xa4},
+ {value: 0x3308, lo: 0xa3, hi: 0xa4},
{value: 0x0040, lo: 0xa5, hi: 0xa5},
- {value: 0x1308, lo: 0xa6, hi: 0xaa},
+ {value: 0x3308, lo: 0xa6, hi: 0xaa},
{value: 0x0040, lo: 0xab, hi: 0xbf},
- // Block 0xe3, offset 0x6b1
+ // Block 0xea, offset 0x6d5
{value: 0x0000, lo: 0x05},
- {value: 0x0008, lo: 0x80, hi: 0x84},
+ {value: 0x0808, lo: 0x80, hi: 0x84},
{value: 0x0040, lo: 0x85, hi: 0x86},
- {value: 0x0018, lo: 0x87, hi: 0x8f},
- {value: 0x1308, lo: 0x90, hi: 0x96},
+ {value: 0x0818, lo: 0x87, hi: 0x8f},
+ {value: 0x3308, lo: 0x90, hi: 0x96},
{value: 0x0040, lo: 0x97, hi: 0xbf},
- // Block 0xe4, offset 0x6b7
+ // Block 0xeb, offset 0x6db
{value: 0x0000, lo: 0x07},
- {value: 0x0208, lo: 0x80, hi: 0x83},
- {value: 0x1308, lo: 0x84, hi: 0x8a},
+ {value: 0x0a08, lo: 0x80, hi: 0x83},
+ {value: 0x3308, lo: 0x84, hi: 0x8a},
{value: 0x0040, lo: 0x8b, hi: 0x8f},
- {value: 0x0008, lo: 0x90, hi: 0x99},
+ {value: 0x0808, lo: 0x90, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0x9d},
- {value: 0x0018, lo: 0x9e, hi: 0x9f},
+ {value: 0x0818, lo: 0x9e, hi: 0x9f},
{value: 0x0040, lo: 0xa0, hi: 0xbf},
- // Block 0xe5, offset 0x6bf
+ // Block 0xec, offset 0x6e3
{value: 0x0000, lo: 0x03},
{value: 0x0040, lo: 0x80, hi: 0xaf},
{value: 0x0018, lo: 0xb0, hi: 0xb1},
{value: 0x0040, lo: 0xb2, hi: 0xbf},
- // Block 0xe6, offset 0x6c3
+ // Block 0xed, offset 0x6e7
{value: 0x0000, lo: 0x03},
{value: 0x0018, lo: 0x80, hi: 0xab},
{value: 0x0040, lo: 0xac, hi: 0xaf},
{value: 0x0018, lo: 0xb0, hi: 0xbf},
- // Block 0xe7, offset 0x6c7
+ // Block 0xee, offset 0x6eb
{value: 0x0000, lo: 0x05},
{value: 0x0018, lo: 0x80, hi: 0x93},
{value: 0x0040, lo: 0x94, hi: 0x9f},
{value: 0x0018, lo: 0xa0, hi: 0xae},
{value: 0x0040, lo: 0xaf, hi: 0xb0},
{value: 0x0018, lo: 0xb1, hi: 0xbf},
- // Block 0xe8, offset 0x6cd
+ // Block 0xef, offset 0x6f1
{value: 0x0000, lo: 0x05},
{value: 0x0040, lo: 0x80, hi: 0x80},
{value: 0x0018, lo: 0x81, hi: 0x8f},
{value: 0x0040, lo: 0x90, hi: 0x90},
{value: 0x0018, lo: 0x91, hi: 0xb5},
{value: 0x0040, lo: 0xb6, hi: 0xbf},
- // Block 0xe9, offset 0x6d3
+ // Block 0xf0, offset 0x6f7
{value: 0x0000, lo: 0x04},
{value: 0x0018, lo: 0x80, hi: 0x8f},
{value: 0xc1c1, lo: 0x90, hi: 0x90},
{value: 0x0018, lo: 0x91, hi: 0xac},
{value: 0x0040, lo: 0xad, hi: 0xbf},
- // Block 0xea, offset 0x6d8
+ // Block 0xf1, offset 0x6fc
{value: 0x0000, lo: 0x02},
{value: 0x0040, lo: 0x80, hi: 0xa5},
{value: 0x0018, lo: 0xa6, hi: 0xbf},
- // Block 0xeb, offset 0x6db
- {value: 0x0000, lo: 0x0d},
+ // Block 0xf2, offset 0x6ff
+ {value: 0x0000, lo: 0x0f},
{value: 0xc7e9, lo: 0x80, hi: 0x80},
{value: 0xc839, lo: 0x81, hi: 0x81},
{value: 0xc889, lo: 0x82, hi: 0x82},
@@ -4346,84 +4420,88 @@ var idnaSparseValues = [1876]valueRange{
{value: 0x0040, lo: 0x89, hi: 0x8f},
{value: 0xcab9, lo: 0x90, hi: 0x90},
{value: 0xcad9, lo: 0x91, hi: 0x91},
- {value: 0x0040, lo: 0x92, hi: 0xbf},
- // Block 0xec, offset 0x6e9
+ {value: 0x0040, lo: 0x92, hi: 0x9f},
+ {value: 0x0018, lo: 0xa0, hi: 0xa5},
+ {value: 0x0040, lo: 0xa6, hi: 0xbf},
+ // Block 0xf3, offset 0x70f
{value: 0x0000, lo: 0x06},
- {value: 0x0018, lo: 0x80, hi: 0x92},
- {value: 0x0040, lo: 0x93, hi: 0x9f},
+ {value: 0x0018, lo: 0x80, hi: 0x94},
+ {value: 0x0040, lo: 0x95, hi: 0x9f},
{value: 0x0018, lo: 0xa0, hi: 0xac},
{value: 0x0040, lo: 0xad, hi: 0xaf},
- {value: 0x0018, lo: 0xb0, hi: 0xb6},
- {value: 0x0040, lo: 0xb7, hi: 0xbf},
- // Block 0xed, offset 0x6f0
+ {value: 0x0018, lo: 0xb0, hi: 0xb8},
+ {value: 0x0040, lo: 0xb9, hi: 0xbf},
+ // Block 0xf4, offset 0x716
{value: 0x0000, lo: 0x02},
{value: 0x0018, lo: 0x80, hi: 0xb3},
{value: 0x0040, lo: 0xb4, hi: 0xbf},
- // Block 0xee, offset 0x6f3
+ // Block 0xf5, offset 0x719
{value: 0x0000, lo: 0x02},
{value: 0x0018, lo: 0x80, hi: 0x94},
{value: 0x0040, lo: 0x95, hi: 0xbf},
- // Block 0xef, offset 0x6f6
+ // Block 0xf6, offset 0x71c
{value: 0x0000, lo: 0x03},
{value: 0x0018, lo: 0x80, hi: 0x8b},
{value: 0x0040, lo: 0x8c, hi: 0x8f},
{value: 0x0018, lo: 0x90, hi: 0xbf},
- // Block 0xf0, offset 0x6fa
+ // Block 0xf7, offset 0x720
{value: 0x0000, lo: 0x05},
{value: 0x0018, lo: 0x80, hi: 0x87},
{value: 0x0040, lo: 0x88, hi: 0x8f},
{value: 0x0018, lo: 0x90, hi: 0x99},
{value: 0x0040, lo: 0x9a, hi: 0x9f},
{value: 0x0018, lo: 0xa0, hi: 0xbf},
- // Block 0xf1, offset 0x700
+ // Block 0xf8, offset 0x726
{value: 0x0000, lo: 0x04},
{value: 0x0018, lo: 0x80, hi: 0x87},
{value: 0x0040, lo: 0x88, hi: 0x8f},
{value: 0x0018, lo: 0x90, hi: 0xad},
{value: 0x0040, lo: 0xae, hi: 0xbf},
- // Block 0xf2, offset 0x705
- {value: 0x0000, lo: 0x09},
- {value: 0x0040, lo: 0x80, hi: 0x8f},
- {value: 0x0018, lo: 0x90, hi: 0x9e},
- {value: 0x0040, lo: 0x9f, hi: 0x9f},
- {value: 0x0018, lo: 0xa0, hi: 0xa7},
- {value: 0x0040, lo: 0xa8, hi: 0xaf},
- {value: 0x0018, lo: 0xb0, hi: 0xb0},
- {value: 0x0040, lo: 0xb1, hi: 0xb2},
- {value: 0x0018, lo: 0xb3, hi: 0xbe},
- {value: 0x0040, lo: 0xbf, hi: 0xbf},
- // Block 0xf3, offset 0x70f
+ // Block 0xf9, offset 0x72b
{value: 0x0000, lo: 0x04},
{value: 0x0018, lo: 0x80, hi: 0x8b},
{value: 0x0040, lo: 0x8c, hi: 0x8f},
- {value: 0x0018, lo: 0x90, hi: 0x9e},
- {value: 0x0040, lo: 0x9f, hi: 0xbf},
- // Block 0xf4, offset 0x714
- {value: 0x0000, lo: 0x02},
- {value: 0x0018, lo: 0x80, hi: 0x91},
- {value: 0x0040, lo: 0x92, hi: 0xbf},
- // Block 0xf5, offset 0x717
+ {value: 0x0018, lo: 0x90, hi: 0xbe},
+ {value: 0x0040, lo: 0xbf, hi: 0xbf},
+ // Block 0xfa, offset 0x730
+ {value: 0x0000, lo: 0x04},
+ {value: 0x0018, lo: 0x80, hi: 0x8c},
+ {value: 0x0040, lo: 0x8d, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0xab},
+ {value: 0x0040, lo: 0xac, hi: 0xbf},
+ // Block 0xfb, offset 0x735
{value: 0x0000, lo: 0x02},
+ {value: 0x0018, lo: 0x80, hi: 0x97},
+ {value: 0x0040, lo: 0x98, hi: 0xbf},
+ // Block 0xfc, offset 0x738
+ {value: 0x0000, lo: 0x04},
{value: 0x0018, lo: 0x80, hi: 0x80},
- {value: 0x0040, lo: 0x81, hi: 0xbf},
- // Block 0xf6, offset 0x71a
+ {value: 0x0040, lo: 0x81, hi: 0x8f},
+ {value: 0x0018, lo: 0x90, hi: 0xa6},
+ {value: 0x0040, lo: 0xa7, hi: 0xbf},
+ // Block 0xfd, offset 0x73d
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0x96},
{value: 0x0040, lo: 0x97, hi: 0xbf},
- // Block 0xf7, offset 0x71d
+ // Block 0xfe, offset 0x740
{value: 0x0000, lo: 0x02},
{value: 0x0008, lo: 0x80, hi: 0xb4},
{value: 0x0040, lo: 0xb5, hi: 0xbf},
- // Block 0xf8, offset 0x720
+ // Block 0xff, offset 0x743
{value: 0x0000, lo: 0x03},
{value: 0x0008, lo: 0x80, hi: 0x9d},
{value: 0x0040, lo: 0x9e, hi: 0x9f},
{value: 0x0008, lo: 0xa0, hi: 0xbf},
- // Block 0xf9, offset 0x724
- {value: 0x0000, lo: 0x02},
+ // Block 0x100, offset 0x747
+ {value: 0x0000, lo: 0x03},
{value: 0x0008, lo: 0x80, hi: 0xa1},
- {value: 0x0040, lo: 0xa2, hi: 0xbf},
- // Block 0xfa, offset 0x727
+ {value: 0x0040, lo: 0xa2, hi: 0xaf},
+ {value: 0x0008, lo: 0xb0, hi: 0xbf},
+ // Block 0x101, offset 0x74b
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0008, lo: 0x80, hi: 0xa0},
+ {value: 0x0040, lo: 0xa1, hi: 0xbf},
+ // Block 0x102, offset 0x74e
{value: 0x0020, lo: 0x0f},
{value: 0xdeb9, lo: 0x80, hi: 0x89},
{value: 0x8dfd, lo: 0x8a, hi: 0x8a},
@@ -4440,7 +4518,7 @@ var idnaSparseValues = [1876]valueRange{
{value: 0xe4f9, lo: 0xba, hi: 0xba},
{value: 0x8edd, lo: 0xbb, hi: 0xbb},
{value: 0xe519, lo: 0xbc, hi: 0xbf},
- // Block 0xfb, offset 0x737
+ // Block 0x103, offset 0x75e
{value: 0x0020, lo: 0x10},
{value: 0x937d, lo: 0x80, hi: 0x80},
{value: 0xf099, lo: 0x81, hi: 0x86},
@@ -4457,23 +4535,23 @@ var idnaSparseValues = [1876]valueRange{
{value: 0xf4d9, lo: 0xae, hi: 0xaf},
{value: 0x94dd, lo: 0xb0, hi: 0xb1},
{value: 0xf519, lo: 0xb2, hi: 0xbe},
- {value: 0x0040, lo: 0xbf, hi: 0xbf},
- // Block 0xfc, offset 0x748
+ {value: 0x2040, lo: 0xbf, hi: 0xbf},
+ // Block 0x104, offset 0x76f
{value: 0x0000, lo: 0x04},
{value: 0x0040, lo: 0x80, hi: 0x80},
{value: 0x0340, lo: 0x81, hi: 0x81},
{value: 0x0040, lo: 0x82, hi: 0x9f},
{value: 0x0340, lo: 0xa0, hi: 0xbf},
- // Block 0xfd, offset 0x74d
+ // Block 0x105, offset 0x774
{value: 0x0000, lo: 0x01},
{value: 0x0340, lo: 0x80, hi: 0xbf},
- // Block 0xfe, offset 0x74f
+ // Block 0x106, offset 0x776
{value: 0x0000, lo: 0x01},
- {value: 0x13c0, lo: 0x80, hi: 0xbf},
- // Block 0xff, offset 0x751
+ {value: 0x33c0, lo: 0x80, hi: 0xbf},
+ // Block 0x107, offset 0x778
{value: 0x0000, lo: 0x02},
- {value: 0x13c0, lo: 0x80, hi: 0xaf},
+ {value: 0x33c0, lo: 0x80, hi: 0xaf},
{value: 0x0040, lo: 0xb0, hi: 0xbf},
}
-// Total table size 41559 bytes (40KiB); checksum: F4A1FA4E
+// Total table size 42115 bytes (41KiB); checksum: F4A1FA4E
diff --git a/vendor/golang.org/x/net/idna/trie.go b/vendor/golang.org/x/net/idna/trie.go
index 6d37998f5..c4ef847e7 100644
--- a/vendor/golang.org/x/net/idna/trie.go
+++ b/vendor/golang.org/x/net/idna/trie.go
@@ -1,4 +1,4 @@
-// Copied from the golang.org/x/text repo; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
@@ -44,7 +44,8 @@ var idnaSparse = sparseBlocks{
offset: idnaSparseOffset[:],
}
-var trie = newIdnaTrie(0)
+// Don't use newIdnaTrie to avoid unconditional linking in of the table.
+var trie = &idnaTrie{}
// lookup determines the type of block n and looks up the value for b.
// For n < t.cutoff, the block is a simple lookup table. Otherwise, the block
diff --git a/vendor/golang.org/x/net/idna/trieval.go b/vendor/golang.org/x/net/idna/trieval.go
index d1b3256c8..7a8cf889b 100644
--- a/vendor/golang.org/x/net/idna/trieval.go
+++ b/vendor/golang.org/x/net/idna/trieval.go
@@ -1,6 +1,4 @@
-// Copied from the golang.org/x/text repo; DO NOT EDIT
-
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
package idna
@@ -28,9 +26,9 @@ package idna
// 15..3 index into xor or mapping table
// }
// } else {
-// 15..13 unused
-// 12 modifier (including virama)
-// 11 virama modifier
+// 15..14 unused
+// 13 mayNeedNorm
+// 12..11 attributes
// 10..8 joining type
// 7..3 category type
// }
@@ -51,15 +49,20 @@ const (
joinShift = 8
joinMask = 0x07
- viramaModifier = 0x0800
+ // Attributes
+ attributesMask = 0x1800
+ viramaModifier = 0x1800
modifier = 0x1000
+ rtl = 0x0800
+
+ mayNeedNorm = 0x2000
)
// A category corresponds to a category defined in the IDNA mapping table.
type category uint16
const (
- unknown category = 0 // not defined currently in unicode.
+ unknown category = 0 // not currently defined in unicode.
mapped category = 1
disallowedSTD3Mapped category = 2
deviation category = 3
@@ -112,5 +115,5 @@ func (c info) isModifier() bool {
}
func (c info) isViramaModifier() bool {
- return c&(viramaModifier|catSmallMask) == viramaModifier
+ return c&(attributesMask|catSmallMask) == viramaModifier
}
diff --git a/vendor/golang.org/x/net/internal/socks/client.go b/vendor/golang.org/x/net/internal/socks/client.go
new file mode 100644
index 000000000..3d6f516a5
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socks/client.go
@@ -0,0 +1,168 @@
+// 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 socks
+
+import (
+ "context"
+ "errors"
+ "io"
+ "net"
+ "strconv"
+ "time"
+)
+
+var (
+ noDeadline = time.Time{}
+ aLongTimeAgo = time.Unix(1, 0)
+)
+
+func (d *Dialer) connect(ctx context.Context, c net.Conn, address string) (_ net.Addr, ctxErr error) {
+ host, port, err := splitHostPort(address)
+ if err != nil {
+ return nil, err
+ }
+ if deadline, ok := ctx.Deadline(); ok && !deadline.IsZero() {
+ c.SetDeadline(deadline)
+ defer c.SetDeadline(noDeadline)
+ }
+ if ctx != context.Background() {
+ errCh := make(chan error, 1)
+ done := make(chan struct{})
+ defer func() {
+ close(done)
+ if ctxErr == nil {
+ ctxErr = <-errCh
+ }
+ }()
+ go func() {
+ select {
+ case <-ctx.Done():
+ c.SetDeadline(aLongTimeAgo)
+ errCh <- ctx.Err()
+ case <-done:
+ errCh <- nil
+ }
+ }()
+ }
+
+ b := make([]byte, 0, 6+len(host)) // the size here is just an estimate
+ b = append(b, Version5)
+ if len(d.AuthMethods) == 0 || d.Authenticate == nil {
+ b = append(b, 1, byte(AuthMethodNotRequired))
+ } else {
+ ams := d.AuthMethods
+ if len(ams) > 255 {
+ return nil, errors.New("too many authentication methods")
+ }
+ b = append(b, byte(len(ams)))
+ for _, am := range ams {
+ b = append(b, byte(am))
+ }
+ }
+ if _, ctxErr = c.Write(b); ctxErr != nil {
+ return
+ }
+
+ if _, ctxErr = io.ReadFull(c, b[:2]); ctxErr != nil {
+ return
+ }
+ if b[0] != Version5 {
+ return nil, errors.New("unexpected protocol version " + strconv.Itoa(int(b[0])))
+ }
+ am := AuthMethod(b[1])
+ if am == AuthMethodNoAcceptableMethods {
+ return nil, errors.New("no acceptable authentication methods")
+ }
+ if d.Authenticate != nil {
+ if ctxErr = d.Authenticate(ctx, c, am); ctxErr != nil {
+ return
+ }
+ }
+
+ b = b[:0]
+ b = append(b, Version5, byte(d.cmd), 0)
+ if ip := net.ParseIP(host); ip != nil {
+ if ip4 := ip.To4(); ip4 != nil {
+ b = append(b, AddrTypeIPv4)
+ b = append(b, ip4...)
+ } else if ip6 := ip.To16(); ip6 != nil {
+ b = append(b, AddrTypeIPv6)
+ b = append(b, ip6...)
+ } else {
+ return nil, errors.New("unknown address type")
+ }
+ } else {
+ if len(host) > 255 {
+ return nil, errors.New("FQDN too long")
+ }
+ b = append(b, AddrTypeFQDN)
+ b = append(b, byte(len(host)))
+ b = append(b, host...)
+ }
+ b = append(b, byte(port>>8), byte(port))
+ if _, ctxErr = c.Write(b); ctxErr != nil {
+ return
+ }
+
+ if _, ctxErr = io.ReadFull(c, b[:4]); ctxErr != nil {
+ return
+ }
+ if b[0] != Version5 {
+ return nil, errors.New("unexpected protocol version " + strconv.Itoa(int(b[0])))
+ }
+ if cmdErr := Reply(b[1]); cmdErr != StatusSucceeded {
+ return nil, errors.New("unknown error " + cmdErr.String())
+ }
+ if b[2] != 0 {
+ return nil, errors.New("non-zero reserved field")
+ }
+ l := 2
+ var a Addr
+ switch b[3] {
+ case AddrTypeIPv4:
+ l += net.IPv4len
+ a.IP = make(net.IP, net.IPv4len)
+ case AddrTypeIPv6:
+ l += net.IPv6len
+ a.IP = make(net.IP, net.IPv6len)
+ case AddrTypeFQDN:
+ if _, err := io.ReadFull(c, b[:1]); err != nil {
+ return nil, err
+ }
+ l += int(b[0])
+ default:
+ return nil, errors.New("unknown address type " + strconv.Itoa(int(b[3])))
+ }
+ if cap(b) < l {
+ b = make([]byte, l)
+ } else {
+ b = b[:l]
+ }
+ if _, ctxErr = io.ReadFull(c, b); ctxErr != nil {
+ return
+ }
+ if a.IP != nil {
+ copy(a.IP, b)
+ } else {
+ a.Name = string(b[:len(b)-2])
+ }
+ a.Port = int(b[len(b)-2])<<8 | int(b[len(b)-1])
+ return &a, nil
+}
+
+func splitHostPort(address string) (string, int, error) {
+ host, port, err := net.SplitHostPort(address)
+ if err != nil {
+ return "", 0, err
+ }
+ portnum, err := strconv.Atoi(port)
+ if err != nil {
+ return "", 0, err
+ }
+ if 1 > portnum || portnum > 0xffff {
+ return "", 0, errors.New("port number out of range " + port)
+ }
+ return host, portnum, nil
+}
diff --git a/vendor/golang.org/x/net/internal/socks/socks.go b/vendor/golang.org/x/net/internal/socks/socks.go
new file mode 100644
index 000000000..6929a9fd5
--- /dev/null
+++ b/vendor/golang.org/x/net/internal/socks/socks.go
@@ -0,0 +1,317 @@
+// 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 socks provides a SOCKS version 5 client implementation.
+//
+// SOCKS protocol version 5 is defined in RFC 1928.
+// Username/Password authentication for SOCKS version 5 is defined in
+// RFC 1929.
+package socks
+
+import (
+ "context"
+ "errors"
+ "io"
+ "net"
+ "strconv"
+)
+
+// A Command represents a SOCKS command.
+type Command int
+
+func (cmd Command) String() string {
+ switch cmd {
+ case CmdConnect:
+ return "socks connect"
+ case cmdBind:
+ return "socks bind"
+ default:
+ return "socks " + strconv.Itoa(int(cmd))
+ }
+}
+
+// An AuthMethod represents a SOCKS authentication method.
+type AuthMethod int
+
+// A Reply represents a SOCKS command reply code.
+type Reply int
+
+func (code Reply) String() string {
+ switch code {
+ case StatusSucceeded:
+ return "succeeded"
+ case 0x01:
+ return "general SOCKS server failure"
+ case 0x02:
+ return "connection not allowed by ruleset"
+ case 0x03:
+ return "network unreachable"
+ case 0x04:
+ return "host unreachable"
+ case 0x05:
+ return "connection refused"
+ case 0x06:
+ return "TTL expired"
+ case 0x07:
+ return "command not supported"
+ case 0x08:
+ return "address type not supported"
+ default:
+ return "unknown code: " + strconv.Itoa(int(code))
+ }
+}
+
+// Wire protocol constants.
+const (
+ Version5 = 0x05
+
+ AddrTypeIPv4 = 0x01
+ AddrTypeFQDN = 0x03
+ AddrTypeIPv6 = 0x04
+
+ CmdConnect Command = 0x01 // establishes an active-open forward proxy connection
+ cmdBind Command = 0x02 // establishes a passive-open forward proxy connection
+
+ AuthMethodNotRequired AuthMethod = 0x00 // no authentication required
+ AuthMethodUsernamePassword AuthMethod = 0x02 // use username/password
+ AuthMethodNoAcceptableMethods AuthMethod = 0xff // no acceptable authentication methods
+
+ StatusSucceeded Reply = 0x00
+)
+
+// An Addr represents a SOCKS-specific address.
+// Either Name or IP is used exclusively.
+type Addr struct {
+ Name string // fully-qualified domain name
+ IP net.IP
+ Port int
+}
+
+func (a *Addr) Network() string { return "socks" }
+
+func (a *Addr) String() string {
+ if a == nil {
+ return "<nil>"
+ }
+ port := strconv.Itoa(a.Port)
+ if a.IP == nil {
+ return net.JoinHostPort(a.Name, port)
+ }
+ return net.JoinHostPort(a.IP.String(), port)
+}
+
+// A Conn represents a forward proxy connection.
+type Conn struct {
+ net.Conn
+
+ boundAddr net.Addr
+}
+
+// BoundAddr returns the address assigned by the proxy server for
+// connecting to the command target address from the proxy server.
+func (c *Conn) BoundAddr() net.Addr {
+ if c == nil {
+ return nil
+ }
+ return c.boundAddr
+}
+
+// A Dialer holds SOCKS-specific options.
+type Dialer struct {
+ cmd Command // either CmdConnect or cmdBind
+ proxyNetwork string // network between a proxy server and a client
+ proxyAddress string // proxy server address
+
+ // ProxyDial specifies the optional dial function for
+ // establishing the transport connection.
+ ProxyDial func(context.Context, string, string) (net.Conn, error)
+
+ // AuthMethods specifies the list of request authention
+ // methods.
+ // If empty, SOCKS client requests only AuthMethodNotRequired.
+ AuthMethods []AuthMethod
+
+ // Authenticate specifies the optional authentication
+ // function. It must be non-nil when AuthMethods is not empty.
+ // It must return an error when the authentication is failed.
+ Authenticate func(context.Context, io.ReadWriter, AuthMethod) error
+}
+
+// DialContext connects to the provided address on the provided
+// network.
+//
+// The returned error value may be a net.OpError. When the Op field of
+// net.OpError contains "socks", the Source field contains a proxy
+// server address and the Addr field contains a command target
+// address.
+//
+// See func Dial of the net package of standard library for a
+// description of the network and address parameters.
+func (d *Dialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
+ if err := d.validateTarget(network, address); err != nil {
+ proxy, dst, _ := d.pathAddrs(address)
+ return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
+ }
+ if ctx == nil {
+ proxy, dst, _ := d.pathAddrs(address)
+ return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: errors.New("nil context")}
+ }
+ var err error
+ var c net.Conn
+ if d.ProxyDial != nil {
+ c, err = d.ProxyDial(ctx, d.proxyNetwork, d.proxyAddress)
+ } else {
+ var dd net.Dialer
+ c, err = dd.DialContext(ctx, d.proxyNetwork, d.proxyAddress)
+ }
+ if err != nil {
+ proxy, dst, _ := d.pathAddrs(address)
+ return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
+ }
+ a, err := d.connect(ctx, c, address)
+ if err != nil {
+ c.Close()
+ proxy, dst, _ := d.pathAddrs(address)
+ return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
+ }
+ return &Conn{Conn: c, boundAddr: a}, nil
+}
+
+// DialWithConn initiates a connection from SOCKS server to the target
+// network and address using the connection c that is already
+// connected to the SOCKS server.
+//
+// It returns the connection's local address assigned by the SOCKS
+// server.
+func (d *Dialer) DialWithConn(ctx context.Context, c net.Conn, network, address string) (net.Addr, error) {
+ if err := d.validateTarget(network, address); err != nil {
+ proxy, dst, _ := d.pathAddrs(address)
+ return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
+ }
+ if ctx == nil {
+ proxy, dst, _ := d.pathAddrs(address)
+ return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: errors.New("nil context")}
+ }
+ a, err := d.connect(ctx, c, address)
+ if err != nil {
+ proxy, dst, _ := d.pathAddrs(address)
+ return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
+ }
+ return a, nil
+}
+
+// Dial connects to the provided address on the provided network.
+//
+// Unlike DialContext, it returns a raw transport connection instead
+// of a forward proxy connection.
+//
+// Deprecated: Use DialContext or DialWithConn instead.
+func (d *Dialer) Dial(network, address string) (net.Conn, error) {
+ if err := d.validateTarget(network, address); err != nil {
+ proxy, dst, _ := d.pathAddrs(address)
+ return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
+ }
+ var err error
+ var c net.Conn
+ if d.ProxyDial != nil {
+ c, err = d.ProxyDial(context.Background(), d.proxyNetwork, d.proxyAddress)
+ } else {
+ c, err = net.Dial(d.proxyNetwork, d.proxyAddress)
+ }
+ if err != nil {
+ proxy, dst, _ := d.pathAddrs(address)
+ return nil, &net.OpError{Op: d.cmd.String(), Net: network, Source: proxy, Addr: dst, Err: err}
+ }
+ if _, err := d.DialWithConn(context.Background(), c, network, address); err != nil {
+ c.Close()
+ return nil, err
+ }
+ return c, nil
+}
+
+func (d *Dialer) validateTarget(network, address string) error {
+ switch network {
+ case "tcp", "tcp6", "tcp4":
+ default:
+ return errors.New("network not implemented")
+ }
+ switch d.cmd {
+ case CmdConnect, cmdBind:
+ default:
+ return errors.New("command not implemented")
+ }
+ return nil
+}
+
+func (d *Dialer) pathAddrs(address string) (proxy, dst net.Addr, err error) {
+ for i, s := range []string{d.proxyAddress, address} {
+ host, port, err := splitHostPort(s)
+ if err != nil {
+ return nil, nil, err
+ }
+ a := &Addr{Port: port}
+ a.IP = net.ParseIP(host)
+ if a.IP == nil {
+ a.Name = host
+ }
+ if i == 0 {
+ proxy = a
+ } else {
+ dst = a
+ }
+ }
+ return
+}
+
+// NewDialer returns a new Dialer that dials through the provided
+// proxy server's network and address.
+func NewDialer(network, address string) *Dialer {
+ return &Dialer{proxyNetwork: network, proxyAddress: address, cmd: CmdConnect}
+}
+
+const (
+ authUsernamePasswordVersion = 0x01
+ authStatusSucceeded = 0x00
+)
+
+// UsernamePassword are the credentials for the username/password
+// authentication method.
+type UsernamePassword struct {
+ Username string
+ Password string
+}
+
+// Authenticate authenticates a pair of username and password with the
+// proxy server.
+func (up *UsernamePassword) Authenticate(ctx context.Context, rw io.ReadWriter, auth AuthMethod) error {
+ switch auth {
+ case AuthMethodNotRequired:
+ return nil
+ case AuthMethodUsernamePassword:
+ if len(up.Username) == 0 || len(up.Username) > 255 || len(up.Password) == 0 || len(up.Password) > 255 {
+ return errors.New("invalid username/password")
+ }
+ b := []byte{authUsernamePasswordVersion}
+ b = append(b, byte(len(up.Username)))
+ b = append(b, up.Username...)
+ b = append(b, byte(len(up.Password)))
+ b = append(b, up.Password...)
+ // TODO(mikio): handle IO deadlines and cancelation if
+ // necessary
+ if _, err := rw.Write(b); err != nil {
+ return err
+ }
+ if _, err := io.ReadFull(rw, b[:2]); err != nil {
+ return err
+ }
+ if b[0] != authUsernamePasswordVersion {
+ return errors.New("invalid username/password version")
+ }
+ if b[1] != authStatusSucceeded {
+ return errors.New("username/password authentication failed")
+ }
+ return nil
+ }
+ return errors.New("unsupported authentication method " + strconv.Itoa(int(auth)))
+}
diff --git a/vendor/golang.org/x/net/proxy/per_host.go b/vendor/golang.org/x/net/proxy/per_host.go
index f540b196f..0689bb6a7 100644
--- a/vendor/golang.org/x/net/proxy/per_host.go
+++ b/vendor/golang.org/x/net/proxy/per_host.go
@@ -9,7 +9,7 @@ import (
"strings"
)
-// A PerHost directs connections to a default Dialer unless the hostname
+// A PerHost directs connections to a default Dialer unless the host name
// requested matches one of a number of exceptions.
type PerHost struct {
def, bypass Dialer
@@ -61,7 +61,7 @@ func (p *PerHost) dialerForRequest(host string) Dialer {
return p.bypass
}
if host == zone[1:] {
- // For a zone "example.com", we match "example.com"
+ // For a zone ".example.com", we match "example.com"
// too.
return p.bypass
}
@@ -76,7 +76,7 @@ func (p *PerHost) dialerForRequest(host string) Dialer {
// AddFromString parses a string that contains comma-separated values
// specifying hosts that should use the bypass proxy. Each value is either an
-// IP address, a CIDR range, a zone (*.example.com) or a hostname
+// IP address, a CIDR range, a zone (*.example.com) or a host name
// (localhost). A best effort is made to parse the string and errors are
// ignored.
func (p *PerHost) AddFromString(s string) {
@@ -131,7 +131,7 @@ func (p *PerHost) AddZone(zone string) {
p.bypassZones = append(p.bypassZones, zone)
}
-// AddHost specifies a hostname that will use the bypass proxy.
+// AddHost specifies a host name that will use the bypass proxy.
func (p *PerHost) AddHost(host string) {
if strings.HasSuffix(host, ".") {
host = host[:len(host)-1]
diff --git a/vendor/golang.org/x/net/proxy/proxy.go b/vendor/golang.org/x/net/proxy/proxy.go
index 78a8b7bee..553ead7cf 100644
--- a/vendor/golang.org/x/net/proxy/proxy.go
+++ b/vendor/golang.org/x/net/proxy/proxy.go
@@ -11,6 +11,7 @@ import (
"net"
"net/url"
"os"
+ "sync"
)
// A Dialer is a means to establish a connection.
@@ -27,7 +28,7 @@ type Auth struct {
// FromEnvironment returns the dialer specified by the proxy related variables in
// the environment.
func FromEnvironment() Dialer {
- allProxy := os.Getenv("all_proxy")
+ allProxy := allProxyEnv.Get()
if len(allProxy) == 0 {
return Direct
}
@@ -41,7 +42,7 @@ func FromEnvironment() Dialer {
return Direct
}
- noProxy := os.Getenv("no_proxy")
+ noProxy := noProxyEnv.Get()
if len(noProxy) == 0 {
return proxy
}
@@ -92,3 +93,42 @@ func FromURL(u *url.URL, forward Dialer) (Dialer, error) {
return nil, errors.New("proxy: unknown scheme: " + u.Scheme)
}
+
+var (
+ allProxyEnv = &envOnce{
+ names: []string{"ALL_PROXY", "all_proxy"},
+ }
+ noProxyEnv = &envOnce{
+ names: []string{"NO_PROXY", "no_proxy"},
+ }
+)
+
+// envOnce looks up an environment variable (optionally by multiple
+// names) once. It mitigates expensive lookups on some platforms
+// (e.g. Windows).
+// (Borrowed from net/http/transport.go)
+type envOnce struct {
+ names []string
+ once sync.Once
+ val string
+}
+
+func (e *envOnce) Get() string {
+ e.once.Do(e.init)
+ return e.val
+}
+
+func (e *envOnce) init() {
+ for _, n := range e.names {
+ e.val = os.Getenv(n)
+ if e.val != "" {
+ return
+ }
+ }
+}
+
+// reset is used by tests
+func (e *envOnce) reset() {
+ e.once = sync.Once{}
+ e.val = ""
+}
diff --git a/vendor/golang.org/x/net/proxy/socks5.go b/vendor/golang.org/x/net/proxy/socks5.go
index 9b9628239..56345ec8b 100644
--- a/vendor/golang.org/x/net/proxy/socks5.go
+++ b/vendor/golang.org/x/net/proxy/socks5.go
@@ -5,206 +5,32 @@
package proxy
import (
- "errors"
- "io"
+ "context"
"net"
- "strconv"
-)
-
-// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given address
-// with an optional username and password. See RFC 1928.
-func SOCKS5(network, addr string, auth *Auth, forward Dialer) (Dialer, error) {
- s := &socks5{
- network: network,
- addr: addr,
- forward: forward,
- }
- if auth != nil {
- s.user = auth.User
- s.password = auth.Password
- }
-
- return s, nil
-}
-type socks5 struct {
- user, password string
- network, addr string
- forward Dialer
-}
-
-const socks5Version = 5
-
-const (
- socks5AuthNone = 0
- socks5AuthPassword = 2
+ "golang.org/x/net/internal/socks"
)
-const socks5Connect = 1
-
-const (
- socks5IP4 = 1
- socks5Domain = 3
- socks5IP6 = 4
-)
-
-var socks5Errors = []string{
- "",
- "general failure",
- "connection forbidden",
- "network unreachable",
- "host unreachable",
- "connection refused",
- "TTL expired",
- "command not supported",
- "address type not supported",
-}
-
-// Dial connects to the address addr on the network net via the SOCKS5 proxy.
-func (s *socks5) Dial(network, addr string) (net.Conn, error) {
- switch network {
- case "tcp", "tcp6", "tcp4":
- default:
- return nil, errors.New("proxy: no support for SOCKS5 proxy connections of type " + network)
- }
-
- conn, err := s.forward.Dial(s.network, s.addr)
- if err != nil {
- return nil, err
- }
- closeConn := &conn
- defer func() {
- if closeConn != nil {
- (*closeConn).Close()
+// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given
+// address with an optional username and password.
+// See RFC 1928 and RFC 1929.
+func SOCKS5(network, address string, auth *Auth, forward Dialer) (Dialer, error) {
+ d := socks.NewDialer(network, address)
+ if forward != nil {
+ d.ProxyDial = func(_ context.Context, network string, address string) (net.Conn, error) {
+ return forward.Dial(network, address)
}
- }()
-
- host, portStr, err := net.SplitHostPort(addr)
- if err != nil {
- return nil, err
- }
-
- port, err := strconv.Atoi(portStr)
- if err != nil {
- return nil, errors.New("proxy: failed to parse port number: " + portStr)
- }
- if port < 1 || port > 0xffff {
- return nil, errors.New("proxy: port number out of range: " + portStr)
- }
-
- // the size here is just an estimate
- buf := make([]byte, 0, 6+len(host))
-
- buf = append(buf, socks5Version)
- if len(s.user) > 0 && len(s.user) < 256 && len(s.password) < 256 {
- buf = append(buf, 2 /* num auth methods */, socks5AuthNone, socks5AuthPassword)
- } else {
- buf = append(buf, 1 /* num auth methods */, socks5AuthNone)
- }
-
- if _, err := conn.Write(buf); err != nil {
- return nil, errors.New("proxy: failed to write greeting to SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- if _, err := io.ReadFull(conn, buf[:2]); err != nil {
- return nil, errors.New("proxy: failed to read greeting from SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
- if buf[0] != 5 {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " has unexpected version " + strconv.Itoa(int(buf[0])))
}
- if buf[1] == 0xff {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " requires authentication")
- }
-
- if buf[1] == socks5AuthPassword {
- buf = buf[:0]
- buf = append(buf, 1 /* password protocol version */)
- buf = append(buf, uint8(len(s.user)))
- buf = append(buf, s.user...)
- buf = append(buf, uint8(len(s.password)))
- buf = append(buf, s.password...)
-
- if _, err := conn.Write(buf); err != nil {
- return nil, errors.New("proxy: failed to write authentication request to SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- if _, err := io.ReadFull(conn, buf[:2]); err != nil {
- return nil, errors.New("proxy: failed to read authentication reply from SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- if buf[1] != 0 {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " rejected username/password")
- }
- }
-
- buf = buf[:0]
- buf = append(buf, socks5Version, socks5Connect, 0 /* reserved */)
-
- if ip := net.ParseIP(host); ip != nil {
- if ip4 := ip.To4(); ip4 != nil {
- buf = append(buf, socks5IP4)
- ip = ip4
- } else {
- buf = append(buf, socks5IP6)
+ if auth != nil {
+ up := socks.UsernamePassword{
+ Username: auth.User,
+ Password: auth.Password,
}
- buf = append(buf, ip...)
- } else {
- if len(host) > 255 {
- return nil, errors.New("proxy: destination hostname too long: " + host)
+ d.AuthMethods = []socks.AuthMethod{
+ socks.AuthMethodNotRequired,
+ socks.AuthMethodUsernamePassword,
}
- buf = append(buf, socks5Domain)
- buf = append(buf, byte(len(host)))
- buf = append(buf, host...)
+ d.Authenticate = up.Authenticate
}
- buf = append(buf, byte(port>>8), byte(port))
-
- if _, err := conn.Write(buf); err != nil {
- return nil, errors.New("proxy: failed to write connect request to SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- if _, err := io.ReadFull(conn, buf[:4]); err != nil {
- return nil, errors.New("proxy: failed to read connect reply from SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- failure := "unknown error"
- if int(buf[1]) < len(socks5Errors) {
- failure = socks5Errors[buf[1]]
- }
-
- if len(failure) > 0 {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " failed to connect: " + failure)
- }
-
- bytesToDiscard := 0
- switch buf[3] {
- case socks5IP4:
- bytesToDiscard = net.IPv4len
- case socks5IP6:
- bytesToDiscard = net.IPv6len
- case socks5Domain:
- _, err := io.ReadFull(conn, buf[:1])
- if err != nil {
- return nil, errors.New("proxy: failed to read domain length from SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
- bytesToDiscard = int(buf[0])
- default:
- return nil, errors.New("proxy: got unknown address type " + strconv.Itoa(int(buf[3])) + " from SOCKS5 proxy at " + s.addr)
- }
-
- if cap(buf) < bytesToDiscard {
- buf = make([]byte, bytesToDiscard)
- } else {
- buf = buf[:bytesToDiscard]
- }
- if _, err := io.ReadFull(conn, buf); err != nil {
- return nil, errors.New("proxy: failed to read address from SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- // Also need to discard the port number
- if _, err := io.ReadFull(conn, buf[:2]); err != nil {
- return nil, errors.New("proxy: failed to read port from SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- closeConn = nil
- return conn, nil
+ return d, nil
}
diff --git a/vendor/golang.org/x/sync/LICENSE b/vendor/golang.org/x/sync/LICENSE
new file mode 100644
index 000000000..6a66aea5e
--- /dev/null
+++ b/vendor/golang.org/x/sync/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/golang.org/x/sync/PATENTS b/vendor/golang.org/x/sync/PATENTS
new file mode 100644
index 000000000..733099041
--- /dev/null
+++ b/vendor/golang.org/x/sync/PATENTS
@@ -0,0 +1,22 @@
+Additional IP Rights Grant (Patents)
+
+"This implementation" means the copyrightable works distributed by
+Google as part of the Go project.
+
+Google hereby grants to You a perpetual, worldwide, non-exclusive,
+no-charge, royalty-free, irrevocable (except as stated in this section)
+patent license to make, have made, use, offer to sell, sell, import,
+transfer and otherwise run, modify and propagate the contents of this
+implementation of Go, where such license applies only to those patent
+claims, both currently owned or controlled by Google and acquired in
+the future, licensable by Google that are necessarily infringed by this
+implementation of Go. This grant does not include claims that would be
+infringed only as a consequence of further modification of this
+implementation. If you or your agent or exclusive licensee institute or
+order or agree to the institution of patent litigation against any
+entity (including a cross-claim or counterclaim in a lawsuit) alleging
+that this implementation of Go or any code incorporated within this
+implementation of Go constitutes direct or contributory patent
+infringement, or inducement of patent infringement, then any patent
+rights granted to you under this License for this implementation of Go
+shall terminate as of the date such litigation is filed.
diff --git a/vendor/golang.org/x/sync/README.md b/vendor/golang.org/x/sync/README.md
new file mode 100644
index 000000000..1f8436cc9
--- /dev/null
+++ b/vendor/golang.org/x/sync/README.md
@@ -0,0 +1,18 @@
+# Go Sync
+
+This repository provides Go concurrency primitives in addition to the
+ones provided by the language and "sync" and "sync/atomic" packages.
+
+## Download/Install
+
+The easiest way to install is to run `go get -u golang.org/x/sync`. You can
+also manually git clone the repository to `$GOPATH/src/golang.org/x/sync`.
+
+## Report Issues / Send Patches
+
+This repository uses Gerrit for code changes. To learn how to submit changes to
+this repository, see https://golang.org/doc/contribute.html.
+
+The main issue tracker for the sync repository is located at
+https://github.com/golang/go/issues. Prefix your issue with "x/sync:" in the
+subject line, so it is easy to find.
diff --git a/vendor/golang.org/x/sync/semaphore/semaphore.go b/vendor/golang.org/x/sync/semaphore/semaphore.go
new file mode 100644
index 000000000..ac53e733e
--- /dev/null
+++ b/vendor/golang.org/x/sync/semaphore/semaphore.go
@@ -0,0 +1,127 @@
+// 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 semaphore provides a weighted semaphore implementation.
+package semaphore // import "golang.org/x/sync/semaphore"
+
+import (
+ "container/list"
+ "context"
+ "sync"
+)
+
+type waiter struct {
+ n int64
+ ready chan<- struct{} // Closed when semaphore acquired.
+}
+
+// NewWeighted creates a new weighted semaphore with the given
+// maximum combined weight for concurrent access.
+func NewWeighted(n int64) *Weighted {
+ w := &Weighted{size: n}
+ return w
+}
+
+// Weighted provides a way to bound concurrent access to a resource.
+// The callers can request access with a given weight.
+type Weighted struct {
+ size int64
+ cur int64
+ mu sync.Mutex
+ waiters list.List
+}
+
+// Acquire acquires the semaphore with a weight of n, blocking until resources
+// are available or ctx is done. On success, returns nil. On failure, returns
+// ctx.Err() and leaves the semaphore unchanged.
+//
+// If ctx is already done, Acquire may still succeed without blocking.
+func (s *Weighted) Acquire(ctx context.Context, n int64) error {
+ s.mu.Lock()
+ if s.size-s.cur >= n && s.waiters.Len() == 0 {
+ s.cur += n
+ s.mu.Unlock()
+ return nil
+ }
+
+ if n > s.size {
+ // Don't make other Acquire calls block on one that's doomed to fail.
+ s.mu.Unlock()
+ <-ctx.Done()
+ return ctx.Err()
+ }
+
+ ready := make(chan struct{})
+ w := waiter{n: n, ready: ready}
+ elem := s.waiters.PushBack(w)
+ s.mu.Unlock()
+
+ select {
+ case <-ctx.Done():
+ err := ctx.Err()
+ s.mu.Lock()
+ select {
+ case <-ready:
+ // Acquired the semaphore after we were canceled. Rather than trying to
+ // fix up the queue, just pretend we didn't notice the cancelation.
+ err = nil
+ default:
+ s.waiters.Remove(elem)
+ }
+ s.mu.Unlock()
+ return err
+
+ case <-ready:
+ return nil
+ }
+}
+
+// TryAcquire acquires the semaphore with a weight of n without blocking.
+// On success, returns true. On failure, returns false and leaves the semaphore unchanged.
+func (s *Weighted) TryAcquire(n int64) bool {
+ s.mu.Lock()
+ success := s.size-s.cur >= n && s.waiters.Len() == 0
+ if success {
+ s.cur += n
+ }
+ s.mu.Unlock()
+ return success
+}
+
+// Release releases the semaphore with a weight of n.
+func (s *Weighted) Release(n int64) {
+ s.mu.Lock()
+ s.cur -= n
+ if s.cur < 0 {
+ s.mu.Unlock()
+ panic("semaphore: bad release")
+ }
+ for {
+ next := s.waiters.Front()
+ if next == nil {
+ break // No more waiters blocked.
+ }
+
+ w := next.Value.(waiter)
+ if s.size-s.cur < w.n {
+ // Not enough tokens for the next waiter. We could keep going (to try to
+ // find a waiter with a smaller request), but under load that could cause
+ // starvation for large requests; instead, we leave all remaining waiters
+ // blocked.
+ //
+ // Consider a semaphore used as a read-write lock, with N tokens, N
+ // readers, and one writer. Each reader can Acquire(1) to obtain a read
+ // lock. The writer can Acquire(N) to obtain a write lock, excluding all
+ // of the readers. If we allow the readers to jump ahead in the queue,
+ // the writer will starve — there is always one token available for every
+ // reader.
+ break
+ }
+
+ s.cur += w.n
+ s.waiters.Remove(next)
+ close(w.ready)
+ }
+ s.mu.Unlock()
+}
diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go
new file mode 100644
index 000000000..84962cf0f
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu.go
@@ -0,0 +1,87 @@
+// 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 cpu implements processor feature detection for
+// various CPU architectures.
+package cpu
+
+// CacheLinePad is used to pad structs to avoid false sharing.
+type CacheLinePad struct{ _ [cacheLineSize]byte }
+
+// X86 contains the supported CPU features of the
+// current X86/AMD64 platform. If the current platform
+// is not X86/AMD64 then all feature flags are false.
+//
+// X86 is padded to avoid false sharing. Further the HasAVX
+// and HasAVX2 are only set if the OS supports XMM and YMM
+// registers in addition to the CPUID feature bit being set.
+var X86 struct {
+ _ CacheLinePad
+ HasAES bool // AES hardware implementation (AES NI)
+ HasADX bool // Multi-precision add-carry instruction extensions
+ HasAVX bool // Advanced vector extension
+ HasAVX2 bool // Advanced vector extension 2
+ HasBMI1 bool // Bit manipulation instruction set 1
+ HasBMI2 bool // Bit manipulation instruction set 2
+ HasERMS bool // Enhanced REP for MOVSB and STOSB
+ HasFMA bool // Fused-multiply-add instructions
+ HasOSXSAVE bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers.
+ HasPCLMULQDQ bool // PCLMULQDQ instruction - most often used for AES-GCM
+ HasPOPCNT bool // Hamming weight instruction POPCNT.
+ HasSSE2 bool // Streaming SIMD extension 2 (always available on amd64)
+ HasSSE3 bool // Streaming SIMD extension 3
+ HasSSSE3 bool // Supplemental streaming SIMD extension 3
+ HasSSE41 bool // Streaming SIMD extension 4 and 4.1
+ HasSSE42 bool // Streaming SIMD extension 4 and 4.2
+ _ CacheLinePad
+}
+
+// ARM64 contains the supported CPU features of the
+// current ARMv8(aarch64) platform. If the current platform
+// is not arm64 then all feature flags are false.
+var ARM64 struct {
+ _ CacheLinePad
+ HasFP bool // Floating-point instruction set (always available)
+ HasASIMD bool // Advanced SIMD (always available)
+ HasEVTSTRM bool // Event stream support
+ HasAES bool // AES hardware implementation
+ HasPMULL bool // Polynomial multiplication instruction set
+ HasSHA1 bool // SHA1 hardware implementation
+ HasSHA2 bool // SHA2 hardware implementation
+ HasCRC32 bool // CRC32 hardware implementation
+ HasATOMICS bool // Atomic memory operation instruction set
+ HasFPHP bool // Half precision floating-point instruction set
+ HasASIMDHP bool // Advanced SIMD half precision instruction set
+ HasCPUID bool // CPUID identification scheme registers
+ HasASIMDRDM bool // Rounding double multiply add/subtract instruction set
+ HasJSCVT bool // Javascript conversion from floating-point to integer
+ HasFCMA bool // Floating-point multiplication and addition of complex numbers
+ HasLRCPC bool // Release Consistent processor consistent support
+ HasDCPOP bool // Persistent memory support
+ HasSHA3 bool // SHA3 hardware implementation
+ HasSM3 bool // SM3 hardware implementation
+ HasSM4 bool // SM4 hardware implementation
+ HasASIMDDP bool // Advanced SIMD double precision instruction set
+ HasSHA512 bool // SHA512 hardware implementation
+ HasSVE bool // Scalable Vector Extensions
+ HasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32
+ _ CacheLinePad
+}
+
+// PPC64 contains the supported CPU features of the current ppc64/ppc64le platforms.
+// If the current platform is not ppc64/ppc64le then all feature flags are false.
+//
+// For ppc64/ppc64le, it is safe to check only for ISA level starting on ISA v3.00,
+// since there are no optional categories. There are some exceptions that also
+// require kernel support to work (DARN, SCV), so there are feature bits for
+// those as well. The minimum processor requirement is POWER8 (ISA 2.07).
+// The struct is padded to avoid false sharing.
+var PPC64 struct {
+ _ CacheLinePad
+ HasDARN bool // Hardware random number generator (requires kernel enablement)
+ HasSCV bool // Syscall vectored (requires kernel enablement)
+ IsPOWER8 bool // ISA v2.07 (POWER8)
+ IsPOWER9 bool // ISA v3.00 (POWER9)
+ _ CacheLinePad
+}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm.go b/vendor/golang.org/x/sys/cpu/cpu_arm.go
new file mode 100644
index 000000000..7f2348b7d
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_arm.go
@@ -0,0 +1,9 @@
+// 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 cpu
+
+const cacheLineSize = 32
+
+func doinit() {}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_arm64.go
new file mode 100644
index 000000000..02ed58b30
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.go
@@ -0,0 +1,67 @@
+// 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 cpu
+
+const cacheLineSize = 64
+
+// HWCAP/HWCAP2 bits. These are exposed by Linux.
+const (
+ hwcap_FP = 1 << 0
+ hwcap_ASIMD = 1 << 1
+ hwcap_EVTSTRM = 1 << 2
+ hwcap_AES = 1 << 3
+ hwcap_PMULL = 1 << 4
+ hwcap_SHA1 = 1 << 5
+ hwcap_SHA2 = 1 << 6
+ hwcap_CRC32 = 1 << 7
+ hwcap_ATOMICS = 1 << 8
+ hwcap_FPHP = 1 << 9
+ hwcap_ASIMDHP = 1 << 10
+ hwcap_CPUID = 1 << 11
+ hwcap_ASIMDRDM = 1 << 12
+ hwcap_JSCVT = 1 << 13
+ hwcap_FCMA = 1 << 14
+ hwcap_LRCPC = 1 << 15
+ hwcap_DCPOP = 1 << 16
+ hwcap_SHA3 = 1 << 17
+ hwcap_SM3 = 1 << 18
+ hwcap_SM4 = 1 << 19
+ hwcap_ASIMDDP = 1 << 20
+ hwcap_SHA512 = 1 << 21
+ hwcap_SVE = 1 << 22
+ hwcap_ASIMDFHM = 1 << 23
+)
+
+func doinit() {
+ // HWCAP feature bits
+ ARM64.HasFP = isSet(HWCap, hwcap_FP)
+ ARM64.HasASIMD = isSet(HWCap, hwcap_ASIMD)
+ ARM64.HasEVTSTRM = isSet(HWCap, hwcap_EVTSTRM)
+ ARM64.HasAES = isSet(HWCap, hwcap_AES)
+ ARM64.HasPMULL = isSet(HWCap, hwcap_PMULL)
+ ARM64.HasSHA1 = isSet(HWCap, hwcap_SHA1)
+ ARM64.HasSHA2 = isSet(HWCap, hwcap_SHA2)
+ ARM64.HasCRC32 = isSet(HWCap, hwcap_CRC32)
+ ARM64.HasATOMICS = isSet(HWCap, hwcap_ATOMICS)
+ ARM64.HasFPHP = isSet(HWCap, hwcap_FPHP)
+ ARM64.HasASIMDHP = isSet(HWCap, hwcap_ASIMDHP)
+ ARM64.HasCPUID = isSet(HWCap, hwcap_CPUID)
+ ARM64.HasASIMDRDM = isSet(HWCap, hwcap_ASIMDRDM)
+ ARM64.HasJSCVT = isSet(HWCap, hwcap_JSCVT)
+ ARM64.HasFCMA = isSet(HWCap, hwcap_FCMA)
+ ARM64.HasLRCPC = isSet(HWCap, hwcap_LRCPC)
+ ARM64.HasDCPOP = isSet(HWCap, hwcap_DCPOP)
+ ARM64.HasSHA3 = isSet(HWCap, hwcap_SHA3)
+ ARM64.HasSM3 = isSet(HWCap, hwcap_SM3)
+ ARM64.HasSM4 = isSet(HWCap, hwcap_SM4)
+ ARM64.HasASIMDDP = isSet(HWCap, hwcap_ASIMDDP)
+ ARM64.HasSHA512 = isSet(HWCap, hwcap_SHA512)
+ ARM64.HasSVE = isSet(HWCap, hwcap_SVE)
+ ARM64.HasASIMDFHM = isSet(HWCap, hwcap_ASIMDFHM)
+}
+
+func isSet(hwc uint, value uint) bool {
+ return hwc&value != 0
+}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
new file mode 100644
index 000000000..f7cb46971
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go
@@ -0,0 +1,16 @@
+// 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.
+
+// +build 386 amd64 amd64p32
+// +build !gccgo
+
+package cpu
+
+// cpuid is implemented in cpu_x86.s for gc compiler
+// and in cpu_gccgo.c for gccgo.
+func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
+
+// xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler
+// and in cpu_gccgo.c for gccgo.
+func xgetbv() (eax, edx uint32)
diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo.c b/vendor/golang.org/x/sys/cpu/cpu_gccgo.c
new file mode 100644
index 000000000..e363c7d13
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo.c
@@ -0,0 +1,43 @@
+// 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.
+
+// +build 386 amd64 amd64p32
+// +build gccgo
+
+#include <cpuid.h>
+#include <stdint.h>
+
+// Need to wrap __get_cpuid_count because it's declared as static.
+int
+gccgoGetCpuidCount(uint32_t leaf, uint32_t subleaf,
+ uint32_t *eax, uint32_t *ebx,
+ uint32_t *ecx, uint32_t *edx)
+{
+ return __get_cpuid_count(leaf, subleaf, eax, ebx, ecx, edx);
+}
+
+// xgetbv reads the contents of an XCR (Extended Control Register)
+// specified in the ECX register into registers EDX:EAX.
+// Currently, the only supported value for XCR is 0.
+//
+// TODO: Replace with a better alternative:
+//
+// #include <xsaveintrin.h>
+//
+// #pragma GCC target("xsave")
+//
+// void gccgoXgetbv(uint32_t *eax, uint32_t *edx) {
+// unsigned long long x = _xgetbv(0);
+// *eax = x & 0xffffffff;
+// *edx = (x >> 32) & 0xffffffff;
+// }
+//
+// Note that _xgetbv is defined starting with GCC 8.
+void
+gccgoXgetbv(uint32_t *eax, uint32_t *edx)
+{
+ __asm(" xorl %%ecx, %%ecx\n"
+ " xgetbv"
+ : "=a"(*eax), "=d"(*edx));
+}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo.go
new file mode 100644
index 000000000..ba49b91bd
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo.go
@@ -0,0 +1,26 @@
+// 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.
+
+// +build 386 amd64 amd64p32
+// +build gccgo
+
+package cpu
+
+//extern gccgoGetCpuidCount
+func gccgoGetCpuidCount(eaxArg, ecxArg uint32, eax, ebx, ecx, edx *uint32)
+
+func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) {
+ var a, b, c, d uint32
+ gccgoGetCpuidCount(eaxArg, ecxArg, &a, &b, &c, &d)
+ return a, b, c, d
+}
+
+//extern gccgoXgetbv
+func gccgoXgetbv(eax, edx *uint32)
+
+func xgetbv() (eax, edx uint32) {
+ var a, d uint32
+ gccgoXgetbv(&a, &d)
+ return a, d
+}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux.go b/vendor/golang.org/x/sys/cpu/cpu_linux.go
new file mode 100644
index 000000000..a8452e094
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_linux.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.
+
+//+build !amd64,!amd64p32,!386
+
+package cpu
+
+import (
+ "encoding/binary"
+ "io/ioutil"
+ "runtime"
+)
+
+const (
+ _AT_HWCAP = 16
+ _AT_HWCAP2 = 26
+
+ procAuxv = "/proc/self/auxv"
+
+ uintSize uint = 32 << (^uint(0) >> 63)
+)
+
+// For those platforms don't have a 'cpuid' equivalent we use HWCAP/HWCAP2
+// These are initialized in cpu_$GOARCH.go
+// and should not be changed after they are initialized.
+var HWCap uint
+var HWCap2 uint
+
+func init() {
+ buf, err := ioutil.ReadFile(procAuxv)
+ if err != nil {
+ panic("read proc auxv failed: " + err.Error())
+ }
+
+ pb := int(uintSize / 8)
+
+ for i := 0; i < len(buf)-pb*2; i += pb * 2 {
+ var tag, val uint
+ switch uintSize {
+ case 32:
+ tag = uint(binary.LittleEndian.Uint32(buf[i:]))
+ val = uint(binary.LittleEndian.Uint32(buf[i+pb:]))
+ case 64:
+ if runtime.GOARCH == "ppc64" {
+ tag = uint(binary.BigEndian.Uint64(buf[i:]))
+ val = uint(binary.BigEndian.Uint64(buf[i+pb:]))
+ } else {
+ tag = uint(binary.LittleEndian.Uint64(buf[i:]))
+ val = uint(binary.LittleEndian.Uint64(buf[i+pb:]))
+ }
+ }
+ switch tag {
+ case _AT_HWCAP:
+ HWCap = val
+ case _AT_HWCAP2:
+ HWCap2 = val
+ }
+ }
+ doinit()
+}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_mips64x.go b/vendor/golang.org/x/sys/cpu/cpu_mips64x.go
new file mode 100644
index 000000000..f55e0c82c
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_mips64x.go
@@ -0,0 +1,11 @@
+// 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.
+
+// +build mips64 mips64le
+
+package cpu
+
+const cacheLineSize = 32
+
+func doinit() {}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_mipsx.go b/vendor/golang.org/x/sys/cpu/cpu_mipsx.go
new file mode 100644
index 000000000..cda87b1a1
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_mipsx.go
@@ -0,0 +1,11 @@
+// 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.
+
+// +build mips mipsle
+
+package cpu
+
+const cacheLineSize = 32
+
+func doinit() {}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go b/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go
new file mode 100644
index 000000000..ed975de62
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_ppc64x.go
@@ -0,0 +1,32 @@
+// 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.
+
+// +build ppc64 ppc64le
+
+package cpu
+
+const cacheLineSize = 128
+
+// HWCAP/HWCAP2 bits. These are exposed by the kernel.
+const (
+ // ISA Level
+ _PPC_FEATURE2_ARCH_2_07 = 0x80000000
+ _PPC_FEATURE2_ARCH_3_00 = 0x00800000
+
+ // CPU features
+ _PPC_FEATURE2_DARN = 0x00200000
+ _PPC_FEATURE2_SCV = 0x00100000
+)
+
+func doinit() {
+ // HWCAP2 feature bits
+ PPC64.IsPOWER8 = isSet(HWCap2, _PPC_FEATURE2_ARCH_2_07)
+ PPC64.IsPOWER9 = isSet(HWCap2, _PPC_FEATURE2_ARCH_3_00)
+ PPC64.HasDARN = isSet(HWCap2, _PPC_FEATURE2_DARN)
+ PPC64.HasSCV = isSet(HWCap2, _PPC_FEATURE2_SCV)
+}
+
+func isSet(hwc uint, value uint) bool {
+ return hwc&value != 0
+}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_s390x.go b/vendor/golang.org/x/sys/cpu/cpu_s390x.go
new file mode 100644
index 000000000..ce8a2289e
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_s390x.go
@@ -0,0 +1,9 @@
+// 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 cpu
+
+const cacheLineSize = 256
+
+func doinit() {}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.go b/vendor/golang.org/x/sys/cpu/cpu_x86.go
new file mode 100644
index 000000000..71e288b06
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_x86.go
@@ -0,0 +1,55 @@
+// 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.
+
+// +build 386 amd64 amd64p32
+
+package cpu
+
+const cacheLineSize = 64
+
+func init() {
+ maxID, _, _, _ := cpuid(0, 0)
+
+ if maxID < 1 {
+ return
+ }
+
+ _, _, ecx1, edx1 := cpuid(1, 0)
+ X86.HasSSE2 = isSet(26, edx1)
+
+ X86.HasSSE3 = isSet(0, ecx1)
+ X86.HasPCLMULQDQ = isSet(1, ecx1)
+ X86.HasSSSE3 = isSet(9, ecx1)
+ X86.HasFMA = isSet(12, ecx1)
+ X86.HasSSE41 = isSet(19, ecx1)
+ X86.HasSSE42 = isSet(20, ecx1)
+ X86.HasPOPCNT = isSet(23, ecx1)
+ X86.HasAES = isSet(25, ecx1)
+ X86.HasOSXSAVE = isSet(27, ecx1)
+
+ osSupportsAVX := false
+ // For XGETBV, OSXSAVE bit is required and sufficient.
+ if X86.HasOSXSAVE {
+ eax, _ := xgetbv()
+ // Check if XMM and YMM registers have OS support.
+ osSupportsAVX = isSet(1, eax) && isSet(2, eax)
+ }
+
+ X86.HasAVX = isSet(28, ecx1) && osSupportsAVX
+
+ if maxID < 7 {
+ return
+ }
+
+ _, ebx7, _, _ := cpuid(7, 0)
+ X86.HasBMI1 = isSet(3, ebx7)
+ X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX
+ X86.HasBMI2 = isSet(8, ebx7)
+ X86.HasERMS = isSet(9, ebx7)
+ X86.HasADX = isSet(19, ebx7)
+}
+
+func isSet(bitpos uint, value uint32) bool {
+ return value&(1<<bitpos) != 0
+}
diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.s b/vendor/golang.org/x/sys/cpu/cpu_x86.s
new file mode 100644
index 000000000..47f084128
--- /dev/null
+++ b/vendor/golang.org/x/sys/cpu/cpu_x86.s
@@ -0,0 +1,27 @@
+// 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.
+
+// +build 386 amd64 amd64p32
+// +build !gccgo
+
+#include "textflag.h"
+
+// func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
+TEXT ·cpuid(SB), NOSPLIT, $0-24
+ MOVL eaxArg+0(FP), AX
+ MOVL ecxArg+4(FP), CX
+ CPUID
+ MOVL AX, eax+8(FP)
+ MOVL BX, ebx+12(FP)
+ MOVL CX, ecx+16(FP)
+ MOVL DX, edx+20(FP)
+ RET
+
+// func xgetbv() (eax, edx uint32)
+TEXT ·xgetbv(SB),NOSPLIT,$0-8
+ MOVL $0, CX
+ XGETBV
+ MOVL AX, eax+0(FP)
+ MOVL DX, edx+4(FP)
+ RET
diff --git a/vendor/golang.org/x/sys/unix/README.md b/vendor/golang.org/x/sys/unix/README.md
index bc6f6031f..2bf415fb1 100644
--- a/vendor/golang.org/x/sys/unix/README.md
+++ b/vendor/golang.org/x/sys/unix/README.md
@@ -14,7 +14,7 @@ migrating the build system to use containers so the builds are reproducible.
This is being done on an OS-by-OS basis. Please update this documentation as
components of the build system change.
-### Old Build System (currently for `GOOS != "Linux" || GOARCH == "sparc64"`)
+### Old Build System (currently for `GOOS != "linux"`)
The old build system generates the Go files based on the C header files
present on your system. This means that files
@@ -34,7 +34,7 @@ your specific system. Running `mkall.sh -n` shows the commands that will be run.
Requirements: bash, perl, go
-### New Build System (currently for `GOOS == "Linux" && GOARCH != "sparc64"`)
+### New Build System (currently for `GOOS == "linux"`)
The new build system uses a Docker container to generate the go files directly
from source checkouts of the kernel and various system libraries. This means
diff --git a/vendor/golang.org/x/sys/unix/aliases.go b/vendor/golang.org/x/sys/unix/aliases.go
new file mode 100644
index 000000000..951fce4d0
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/aliases.go
@@ -0,0 +1,14 @@
+// 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.
+
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build go1.9
+
+package unix
+
+import "syscall"
+
+type Signal = syscall.Signal
+type Errno = syscall.Errno
+type SysProcAttr = syscall.SysProcAttr
diff --git a/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s b/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
new file mode 100644
index 000000000..06f84b855
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s
@@ -0,0 +1,17 @@
+// 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.
+
+// +build !gccgo
+
+#include "textflag.h"
+
+//
+// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go
+//
+
+TEXT ·syscall6(SB),NOSPLIT,$0-88
+ JMP syscall·syscall6(SB)
+
+TEXT ·rawSyscall6(SB),NOSPLIT,$0-88
+ JMP syscall·rawSyscall6(SB)
diff --git a/vendor/golang.org/x/sys/unix/asm_freebsd_arm64.s b/vendor/golang.org/x/sys/unix/asm_freebsd_arm64.s
new file mode 100644
index 000000000..d9318cbf0
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/asm_freebsd_arm64.s
@@ -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.
+
+// +build !gccgo
+
+#include "textflag.h"
+
+//
+// System call support for ARM64, FreeBSD
+//
+
+// Just jump to package syscall's implementation for all these functions.
+// The runtime may know about them.
+
+TEXT ·Syscall(SB),NOSPLIT,$0-56
+ JMP syscall·Syscall(SB)
+
+TEXT ·Syscall6(SB),NOSPLIT,$0-80
+ JMP syscall·Syscall6(SB)
+
+TEXT ·Syscall9(SB),NOSPLIT,$0-104
+ JMP syscall·Syscall9(SB)
+
+TEXT ·RawSyscall(SB),NOSPLIT,$0-56
+ JMP syscall·RawSyscall(SB)
+
+TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
+ JMP syscall·RawSyscall6(SB)
diff --git a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
index 649e58714..88f712557 100644
--- a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
+++ b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s
@@ -15,12 +15,6 @@
// Just jump to package syscall's implementation for all these functions.
// The runtime may know about them.
-TEXT ·Syscall(SB),NOSPLIT,$0-56
- BR syscall·Syscall(SB)
-
-TEXT ·Syscall6(SB),NOSPLIT,$0-80
- BR syscall·Syscall6(SB)
-
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
BL runtime·entersyscall(SB)
MOVD a1+8(FP), R3
@@ -36,12 +30,6 @@ TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
BL runtime·exitsyscall(SB)
RET
-TEXT ·RawSyscall(SB),NOSPLIT,$0-56
- BR syscall·RawSyscall(SB)
-
-TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
- BR syscall·RawSyscall6(SB)
-
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
MOVD a1+8(FP), R3
MOVD a2+16(FP), R4
diff --git a/vendor/golang.org/x/sys/unix/constants.go b/vendor/golang.org/x/sys/unix/constants.go
index a96f0ebc2..3a6ac648d 100644
--- a/vendor/golang.org/x/sys/unix/constants.go
+++ b/vendor/golang.org/x/sys/unix/constants.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
package unix
diff --git a/vendor/golang.org/x/sys/unix/dev_aix_ppc.go b/vendor/golang.org/x/sys/unix/dev_aix_ppc.go
new file mode 100644
index 000000000..5e5fb4510
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/dev_aix_ppc.go
@@ -0,0 +1,27 @@
+// 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.
+
+// +build aix
+// +build ppc
+
+// Functions to access/create device major and minor numbers matching the
+// encoding used by AIX.
+
+package unix
+
+// Major returns the major component of a Linux device number.
+func Major(dev uint64) uint32 {
+ return uint32((dev >> 16) & 0xffff)
+}
+
+// Minor returns the minor component of a Linux device number.
+func Minor(dev uint64) uint32 {
+ return uint32(dev & 0xffff)
+}
+
+// Mkdev returns a Linux device number generated from the given major and minor
+// components.
+func Mkdev(major, minor uint32) uint64 {
+ return uint64(((major) << 16) | (minor))
+}
diff --git a/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go b/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go
new file mode 100644
index 000000000..8b401244c
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/dev_aix_ppc64.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.
+
+// +build aix
+// +build ppc64
+
+// Functions to access/create device major and minor numbers matching the
+// encoding used AIX.
+
+package unix
+
+// Major returns the major component of a Linux device number.
+func Major(dev uint64) uint32 {
+ return uint32((dev & 0x3fffffff00000000) >> 32)
+}
+
+// Minor returns the minor component of a Linux device number.
+func Minor(dev uint64) uint32 {
+ return uint32((dev & 0x00000000ffffffff) >> 0)
+}
+
+// Mkdev returns a Linux device number generated from the given major and minor
+// components.
+func Mkdev(major, minor uint32) uint64 {
+ var DEVNO64 uint64
+ DEVNO64 = 0x8000000000000000
+ return ((uint64(major) << 32) | (uint64(minor) & 0x00000000FFFFFFFF) | DEVNO64)
+}
diff --git a/vendor/golang.org/x/sys/unix/dirent.go b/vendor/golang.org/x/sys/unix/dirent.go
index 95fd35317..4407c505a 100644
--- a/vendor/golang.org/x/sys/unix/dirent.go
+++ b/vendor/golang.org/x/sys/unix/dirent.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
package unix
diff --git a/vendor/golang.org/x/sys/unix/env_unix.go b/vendor/golang.org/x/sys/unix/env_unix.go
index 706b3cd1d..84178b0a1 100644
--- a/vendor/golang.org/x/sys/unix/env_unix.go
+++ b/vendor/golang.org/x/sys/unix/env_unix.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
// Unix environment variables.
diff --git a/vendor/golang.org/x/sys/unix/fcntl.go b/vendor/golang.org/x/sys/unix/fcntl.go
index 9379ba9ce..39c03f1ef 100644
--- a/vendor/golang.org/x/sys/unix/fcntl.go
+++ b/vendor/golang.org/x/sys/unix/fcntl.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build dragonfly freebsd linux netbsd openbsd
package unix
diff --git a/vendor/golang.org/x/sys/unix/fcntl_darwin.go b/vendor/golang.org/x/sys/unix/fcntl_darwin.go
new file mode 100644
index 000000000..5868a4a47
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/fcntl_darwin.go
@@ -0,0 +1,18 @@
+// Copyright 2019 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 unix
+
+import "unsafe"
+
+// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
+func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
+ return fcntl(int(fd), cmd, arg)
+}
+
+// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
+func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
+ _, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk))))
+ return err
+}
diff --git a/vendor/golang.org/x/sys/unix/gccgo.go b/vendor/golang.org/x/sys/unix/gccgo.go
index 50062e3c7..cd6f5a613 100644
--- a/vendor/golang.org/x/sys/unix/gccgo.go
+++ b/vendor/golang.org/x/sys/unix/gccgo.go
@@ -3,6 +3,7 @@
// license that can be found in the LICENSE file.
// +build gccgo
+// +build !aix
package unix
diff --git a/vendor/golang.org/x/sys/unix/gccgo_c.c b/vendor/golang.org/x/sys/unix/gccgo_c.c
index 46523ced6..c44730c5e 100644
--- a/vendor/golang.org/x/sys/unix/gccgo_c.c
+++ b/vendor/golang.org/x/sys/unix/gccgo_c.c
@@ -3,6 +3,7 @@
// license that can be found in the LICENSE file.
// +build gccgo
+// +build !aix
#include <errno.h>
#include <stdint.h>
diff --git a/vendor/golang.org/x/sys/unix/ioctl.go b/vendor/golang.org/x/sys/unix/ioctl.go
new file mode 100644
index 000000000..f121a8d64
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/ioctl.go
@@ -0,0 +1,30 @@
+// 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.
+
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+
+package unix
+
+import "runtime"
+
+// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.
+//
+// To change fd's window size, the req argument should be TIOCSWINSZ.
+func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+ // TODO: if we get the chance, remove the req parameter and
+ // hardcode TIOCSWINSZ.
+ err := ioctlSetWinsize(fd, req, value)
+ runtime.KeepAlive(value)
+ return err
+}
+
+// IoctlSetTermios performs an ioctl on fd with a *Termios.
+//
+// The req value will usually be TCSETA or TIOCSETA.
+func IoctlSetTermios(fd int, req uint, value *Termios) error {
+ // TODO: if we get the chance, remove the req parameter.
+ err := ioctlSetTermios(fd, req, value)
+ runtime.KeepAlive(value)
+ return err
+}
diff --git a/vendor/golang.org/x/sys/unix/openbsd_pledge.go b/vendor/golang.org/x/sys/unix/openbsd_pledge.go
index 9b1e86a12..230a36d24 100644
--- a/vendor/golang.org/x/sys/unix/openbsd_pledge.go
+++ b/vendor/golang.org/x/sys/unix/openbsd_pledge.go
@@ -8,31 +8,159 @@
package unix
import (
+ "errors"
+ "fmt"
+ "strconv"
"syscall"
"unsafe"
)
-const (
- _SYS_PLEDGE = 108
-)
+// Pledge implements the pledge syscall.
+//
+// The pledge syscall does not accept execpromises on OpenBSD releases
+// before 6.3.
+//
+// execpromises must be empty when Pledge is called on OpenBSD
+// releases predating 6.3, otherwise an error will be returned.
+//
+// For more information see pledge(2).
+func Pledge(promises, execpromises string) error {
+ maj, min, err := majmin()
+ if err != nil {
+ return err
+ }
-// Pledge implements the pledge syscall. For more information see pledge(2).
-func Pledge(promises string, paths []string) error {
- promisesPtr, err := syscall.BytePtrFromString(promises)
+ err = pledgeAvailable(maj, min, execpromises)
if err != nil {
return err
}
- promisesUnsafe, pathsUnsafe := unsafe.Pointer(promisesPtr), unsafe.Pointer(nil)
- if paths != nil {
- var pathsPtr []*byte
- if pathsPtr, err = syscall.SlicePtrFromStrings(paths); err != nil {
+
+ pptr, err := syscall.BytePtrFromString(promises)
+ if err != nil {
+ return err
+ }
+
+ // This variable will hold either a nil unsafe.Pointer or
+ // an unsafe.Pointer to a string (execpromises).
+ var expr unsafe.Pointer
+
+ // If we're running on OpenBSD > 6.2, pass execpromises to the syscall.
+ if maj > 6 || (maj == 6 && min > 2) {
+ exptr, err := syscall.BytePtrFromString(execpromises)
+ if err != nil {
return err
}
- pathsUnsafe = unsafe.Pointer(&pathsPtr[0])
+ expr = unsafe.Pointer(exptr)
+ }
+
+ _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0)
+ if e != 0 {
+ return e
+ }
+
+ return nil
+}
+
+// PledgePromises implements the pledge syscall.
+//
+// This changes the promises and leaves the execpromises untouched.
+//
+// For more information see pledge(2).
+func PledgePromises(promises string) error {
+ maj, min, err := majmin()
+ if err != nil {
+ return err
+ }
+
+ err = pledgeAvailable(maj, min, "")
+ if err != nil {
+ return err
+ }
+
+ // This variable holds the execpromises and is always nil.
+ var expr unsafe.Pointer
+
+ pptr, err := syscall.BytePtrFromString(promises)
+ if err != nil {
+ return err
+ }
+
+ _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0)
+ if e != 0 {
+ return e
+ }
+
+ return nil
+}
+
+// PledgeExecpromises implements the pledge syscall.
+//
+// This changes the execpromises and leaves the promises untouched.
+//
+// For more information see pledge(2).
+func PledgeExecpromises(execpromises string) error {
+ maj, min, err := majmin()
+ if err != nil {
+ return err
+ }
+
+ err = pledgeAvailable(maj, min, execpromises)
+ if err != nil {
+ return err
}
- _, _, e := syscall.Syscall(_SYS_PLEDGE, uintptr(promisesUnsafe), uintptr(pathsUnsafe), 0)
+
+ // This variable holds the promises and is always nil.
+ var pptr unsafe.Pointer
+
+ exptr, err := syscall.BytePtrFromString(execpromises)
+ if err != nil {
+ return err
+ }
+
+ _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(pptr), uintptr(unsafe.Pointer(exptr)), 0)
if e != 0 {
return e
}
+
+ return nil
+}
+
+// majmin returns major and minor version number for an OpenBSD system.
+func majmin() (major int, minor int, err error) {
+ var v Utsname
+ err = Uname(&v)
+ if err != nil {
+ return
+ }
+
+ major, err = strconv.Atoi(string(v.Release[0]))
+ if err != nil {
+ err = errors.New("cannot parse major version number returned by uname")
+ return
+ }
+
+ minor, err = strconv.Atoi(string(v.Release[2]))
+ if err != nil {
+ err = errors.New("cannot parse minor version number returned by uname")
+ return
+ }
+
+ return
+}
+
+// pledgeAvailable checks for availability of the pledge(2) syscall
+// based on the running OpenBSD version.
+func pledgeAvailable(maj, min int, execpromises string) error {
+ // If OpenBSD <= 5.9, pledge is not available.
+ if (maj == 5 && min != 9) || maj < 5 {
+ return fmt.Errorf("pledge syscall is not available on OpenBSD %d.%d", maj, min)
+ }
+
+ // If OpenBSD <= 6.2 and execpromises is not empty,
+ // return an error - execpromises is not available before 6.3
+ if (maj < 6 || (maj == 6 && min <= 2)) && execpromises != "" {
+ return fmt.Errorf("cannot use execpromises on OpenBSD %d.%d", maj, min)
+ }
+
return nil
}
diff --git a/vendor/golang.org/x/sys/unix/openbsd_unveil.go b/vendor/golang.org/x/sys/unix/openbsd_unveil.go
new file mode 100644
index 000000000..aebc2dc57
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/openbsd_unveil.go
@@ -0,0 +1,44 @@
+// 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.
+
+// +build openbsd
+
+package unix
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+// Unveil implements the unveil syscall.
+// For more information see unveil(2).
+// Note that the special case of blocking further
+// unveil calls is handled by UnveilBlock.
+func Unveil(path string, flags string) error {
+ pathPtr, err := syscall.BytePtrFromString(path)
+ if err != nil {
+ return err
+ }
+ flagsPtr, err := syscall.BytePtrFromString(flags)
+ if err != nil {
+ return err
+ }
+ _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(unsafe.Pointer(pathPtr)), uintptr(unsafe.Pointer(flagsPtr)), 0)
+ if e != 0 {
+ return e
+ }
+ return nil
+}
+
+// UnveilBlock blocks future unveil calls.
+// For more information see unveil(2).
+func UnveilBlock() error {
+ // Both pointers must be nil.
+ var pathUnsafe, flagsUnsafe unsafe.Pointer
+ _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(pathUnsafe), uintptr(flagsUnsafe), 0)
+ if e != 0 {
+ return e
+ }
+ return nil
+}
diff --git a/vendor/golang.org/x/sys/unix/pagesize_unix.go b/vendor/golang.org/x/sys/unix/pagesize_unix.go
index 83c85e019..bc2f3629a 100644
--- a/vendor/golang.org/x/sys/unix/pagesize_unix.go
+++ b/vendor/golang.org/x/sys/unix/pagesize_unix.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
// For Unix, get the pagesize from the runtime.
diff --git a/vendor/golang.org/x/sys/unix/race0.go b/vendor/golang.org/x/sys/unix/race0.go
index dd0820431..ad026678c 100644
--- a/vendor/golang.org/x/sys/unix/race0.go
+++ b/vendor/golang.org/x/sys/unix/race0.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin,!race linux,!race freebsd,!race netbsd openbsd solaris dragonfly
+// +build aix darwin,!race linux,!race freebsd,!race netbsd openbsd solaris dragonfly
package unix
diff --git a/vendor/golang.org/x/sys/unix/sockcmsg_unix.go b/vendor/golang.org/x/sys/unix/sockcmsg_unix.go
index bb756ece1..5f9ae233a 100644
--- a/vendor/golang.org/x/sys/unix/sockcmsg_unix.go
+++ b/vendor/golang.org/x/sys/unix/sockcmsg_unix.go
@@ -2,23 +2,36 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
// Socket control messages
package unix
-import "unsafe"
+import (
+ "runtime"
+ "unsafe"
+)
// Round the length of a raw sockaddr up to align it properly.
func cmsgAlignOf(salen int) int {
- salign := sizeofPtr
- // NOTE: It seems like 64-bit Darwin, DragonFly BSD and
- // Solaris kernels still require 32-bit aligned access to
- // network subsystem.
- if darwin64Bit || dragonfly64Bit || solaris64Bit {
- salign = 4
+ salign := SizeofPtr
+
+ switch runtime.GOOS {
+ case "darwin", "dragonfly", "solaris":
+ // NOTE: It seems like 64-bit Darwin, DragonFly BSD and
+ // Solaris kernels still require 32-bit aligned access to
+ // network subsystem.
+ if SizeofPtr == 8 {
+ salign = 4
+ }
+ case "openbsd":
+ // OpenBSD armv7 requires 64-bit alignment.
+ if runtime.GOARCH == "arm" {
+ salign = 8
+ }
}
+
return (salen + salign - 1) & ^(salign - 1)
}
diff --git a/vendor/golang.org/x/sys/unix/str.go b/vendor/golang.org/x/sys/unix/str.go
index 35ed66435..17fb69868 100644
--- a/vendor/golang.org/x/sys/unix/str.go
+++ b/vendor/golang.org/x/sys/unix/str.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
package unix
diff --git a/vendor/golang.org/x/sys/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go
index ef35fce80..0d4b1d7a2 100644
--- a/vendor/golang.org/x/sys/unix/syscall.go
+++ b/vendor/golang.org/x/sys/unix/syscall.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
// Package unix contains an interface to the low-level operating system
// primitives. OS details vary depending on the underlying system, and
diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go
new file mode 100644
index 000000000..1351a228b
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/syscall_aix.go
@@ -0,0 +1,547 @@
+// 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.
+
+// +build aix
+
+// Aix system calls.
+// This file is compiled as ordinary Go code,
+// but it is also input to mksyscall,
+// which parses the //sys lines and generates system call stubs.
+// Note that sometimes we use a lowercase //sys name and
+// wrap it in our own nicer implementation.
+
+package unix
+
+import "unsafe"
+
+/*
+ * Wrapped
+ */
+
+//sys utimes(path string, times *[2]Timeval) (err error)
+func Utimes(path string, tv []Timeval) error {
+ if len(tv) != 2 {
+ return EINVAL
+ }
+ return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
+}
+
+//sys utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error)
+func UtimesNano(path string, ts []Timespec) error {
+ if len(ts) != 2 {
+ return EINVAL
+ }
+ return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
+}
+
+func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {
+ if ts == nil {
+ return utimensat(dirfd, path, nil, flags)
+ }
+ if len(ts) != 2 {
+ return EINVAL
+ }
+ return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)
+}
+
+func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {
+ if sa.Port < 0 || sa.Port > 0xFFFF {
+ return nil, 0, EINVAL
+ }
+ sa.raw.Family = AF_INET
+ p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
+ p[0] = byte(sa.Port >> 8)
+ p[1] = byte(sa.Port)
+ for i := 0; i < len(sa.Addr); i++ {
+ sa.raw.Addr[i] = sa.Addr[i]
+ }
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil
+}
+
+func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {
+ if sa.Port < 0 || sa.Port > 0xFFFF {
+ return nil, 0, EINVAL
+ }
+ sa.raw.Family = AF_INET6
+ p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
+ p[0] = byte(sa.Port >> 8)
+ p[1] = byte(sa.Port)
+ sa.raw.Scope_id = sa.ZoneId
+ for i := 0; i < len(sa.Addr); i++ {
+ sa.raw.Addr[i] = sa.Addr[i]
+ }
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil
+}
+
+func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
+ name := sa.Name
+ n := len(name)
+ if n > len(sa.raw.Path) {
+ return nil, 0, EINVAL
+ }
+ if n == len(sa.raw.Path) && name[0] != '@' {
+ return nil, 0, EINVAL
+ }
+ sa.raw.Family = AF_UNIX
+ for i := 0; i < n; i++ {
+ sa.raw.Path[i] = uint8(name[i])
+ }
+ // length is family (uint16), name, NUL.
+ sl := _Socklen(2)
+ if n > 0 {
+ sl += _Socklen(n) + 1
+ }
+ if sa.raw.Path[0] == '@' {
+ sa.raw.Path[0] = 0
+ // Don't count trailing NUL for abstract address.
+ sl--
+ }
+
+ return unsafe.Pointer(&sa.raw), sl, nil
+}
+
+func Getsockname(fd int) (sa Sockaddr, err error) {
+ var rsa RawSockaddrAny
+ var len _Socklen = SizeofSockaddrAny
+ if err = getsockname(fd, &rsa, &len); err != nil {
+ return
+ }
+ return anyToSockaddr(fd, &rsa)
+}
+
+//sys getcwd(buf []byte) (err error)
+
+const ImplementsGetwd = true
+
+func Getwd() (ret string, err error) {
+ for len := uint64(4096); ; len *= 2 {
+ b := make([]byte, len)
+ err := getcwd(b)
+ if err == nil {
+ i := 0
+ for b[i] != 0 {
+ i++
+ }
+ return string(b[0:i]), nil
+ }
+ if err != ERANGE {
+ return "", err
+ }
+ }
+}
+
+func Getcwd(buf []byte) (n int, err error) {
+ err = getcwd(buf)
+ if err == nil {
+ i := 0
+ for buf[i] != 0 {
+ i++
+ }
+ n = i + 1
+ }
+ return
+}
+
+func Getgroups() (gids []int, err error) {
+ n, err := getgroups(0, nil)
+ if err != nil {
+ return nil, err
+ }
+ if n == 0 {
+ return nil, nil
+ }
+
+ // Sanity check group count. Max is 16 on BSD.
+ if n < 0 || n > 1000 {
+ return nil, EINVAL
+ }
+
+ a := make([]_Gid_t, n)
+ n, err = getgroups(n, &a[0])
+ if err != nil {
+ return nil, err
+ }
+ gids = make([]int, n)
+ for i, v := range a[0:n] {
+ gids[i] = int(v)
+ }
+ return
+}
+
+func Setgroups(gids []int) (err error) {
+ if len(gids) == 0 {
+ return setgroups(0, nil)
+ }
+
+ a := make([]_Gid_t, len(gids))
+ for i, v := range gids {
+ a[i] = _Gid_t(v)
+ }
+ return setgroups(len(a), &a[0])
+}
+
+/*
+ * Socket
+ */
+
+//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
+
+func Accept(fd int) (nfd int, sa Sockaddr, err error) {
+ var rsa RawSockaddrAny
+ var len _Socklen = SizeofSockaddrAny
+ nfd, err = accept(fd, &rsa, &len)
+ if nfd == -1 {
+ return
+ }
+ sa, err = anyToSockaddr(fd, &rsa)
+ if err != nil {
+ Close(nfd)
+ nfd = 0
+ }
+ return
+}
+
+func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
+ // Recvmsg not implemented on AIX
+ sa := new(SockaddrUnix)
+ return -1, -1, -1, sa, ENOSYS
+}
+
+func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
+ _, err = SendmsgN(fd, p, oob, to, flags)
+ return
+}
+
+func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
+ // SendmsgN not implemented on AIX
+ return -1, ENOSYS
+}
+
+func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
+ switch rsa.Addr.Family {
+
+ case AF_UNIX:
+ pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
+ sa := new(SockaddrUnix)
+
+ // Some versions of AIX have a bug in getsockname (see IV78655).
+ // We can't rely on sa.Len being set correctly.
+ n := SizeofSockaddrUnix - 3 // substract leading Family, Len, terminating NUL.
+ for i := 0; i < n; i++ {
+ if pp.Path[i] == 0 {
+ n = i
+ break
+ }
+ }
+
+ bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
+ sa.Name = string(bytes)
+ return sa, nil
+
+ case AF_INET:
+ pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
+ sa := new(SockaddrInet4)
+ p := (*[2]byte)(unsafe.Pointer(&pp.Port))
+ sa.Port = int(p[0])<<8 + int(p[1])
+ for i := 0; i < len(sa.Addr); i++ {
+ sa.Addr[i] = pp.Addr[i]
+ }
+ return sa, nil
+
+ case AF_INET6:
+ pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))
+ sa := new(SockaddrInet6)
+ p := (*[2]byte)(unsafe.Pointer(&pp.Port))
+ sa.Port = int(p[0])<<8 + int(p[1])
+ sa.ZoneId = pp.Scope_id
+ for i := 0; i < len(sa.Addr); i++ {
+ sa.Addr[i] = pp.Addr[i]
+ }
+ return sa, nil
+ }
+ return nil, EAFNOSUPPORT
+}
+
+func Gettimeofday(tv *Timeval) (err error) {
+ err = gettimeofday(tv, nil)
+ return
+}
+
+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ if raceenabled {
+ raceReleaseMerge(unsafe.Pointer(&ioSync))
+ }
+ return sendfile(outfd, infd, offset, count)
+}
+
+// TODO
+func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ return -1, ENOSYS
+}
+
+//sys getdirent(fd int, buf []byte) (n int, err error)
+func ReadDirent(fd int, buf []byte) (n int, err error) {
+ return getdirent(fd, buf)
+}
+
+//sys wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error)
+func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {
+ var status _C_int
+ var r Pid_t
+ err = ERESTART
+ // AIX wait4 may return with ERESTART errno, while the processus is still
+ // active.
+ for err == ERESTART {
+ r, err = wait4(Pid_t(pid), &status, options, rusage)
+ }
+ wpid = int(r)
+ if wstatus != nil {
+ *wstatus = WaitStatus(status)
+ }
+ return
+}
+
+/*
+ * Wait
+ */
+
+type WaitStatus uint32
+
+func (w WaitStatus) Stopped() bool { return w&0x40 != 0 }
+func (w WaitStatus) StopSignal() Signal {
+ if !w.Stopped() {
+ return -1
+ }
+ return Signal(w>>8) & 0xFF
+}
+
+func (w WaitStatus) Exited() bool { return w&0xFF == 0 }
+func (w WaitStatus) ExitStatus() int {
+ if !w.Exited() {
+ return -1
+ }
+ return int((w >> 8) & 0xFF)
+}
+
+func (w WaitStatus) Signaled() bool { return w&0x40 == 0 && w&0xFF != 0 }
+func (w WaitStatus) Signal() Signal {
+ if !w.Signaled() {
+ return -1
+ }
+ return Signal(w>>16) & 0xFF
+}
+
+func (w WaitStatus) Continued() bool { return w&0x01000000 != 0 }
+
+func (w WaitStatus) CoreDump() bool { return w&0x200 != 0 }
+
+func (w WaitStatus) TrapCause() int { return -1 }
+
+//sys ioctl(fd int, req uint, arg uintptr) (err error)
+
+// ioctl itself should not be exposed directly, but additional get/set
+// functions for specific types are permissible.
+
+// IoctlSetInt performs an ioctl operation which sets an integer value
+// on fd, using the specified request number.
+func IoctlSetInt(fd int, req uint, value int) error {
+ return ioctl(fd, req, uintptr(value))
+}
+
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
+ return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
+}
+
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
+ return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
+}
+
+// IoctlGetInt performs an ioctl operation which gets an integer value
+// from fd, using the specified request number.
+func IoctlGetInt(fd int, req uint) (int, error) {
+ var value int
+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
+ return value, err
+}
+
+func IoctlGetWinsize(fd int, req uint) (*Winsize, error) {
+ var value Winsize
+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
+ return &value, err
+}
+
+func IoctlGetTermios(fd int, req uint) (*Termios, error) {
+ var value Termios
+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
+ return &value, err
+}
+
+// fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX
+// There is no way to create a custom fcntl and to keep //sys fcntl easily,
+// Therefore, the programmer must call dup2 instead of fcntl in this case.
+
+// FcntlInt performs a fcntl syscall on fd with the provided command and argument.
+//sys FcntlInt(fd uintptr, cmd int, arg int) (r int,err error) = fcntl
+
+// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
+//sys FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) = fcntl
+
+//sys fcntl(fd int, cmd int, arg int) (val int, err error)
+
+/*
+ * Direct access
+ */
+
+//sys Acct(path string) (err error)
+//sys Chdir(path string) (err error)
+//sys Chroot(path string) (err error)
+//sys Close(fd int) (err error)
+//sys Dup(oldfd int) (fd int, err error)
+//sys Exit(code int)
+//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
+//sys Fchdir(fd int) (err error)
+//sys Fchmod(fd int, mode uint32) (err error)
+//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
+//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
+//sys Fdatasync(fd int) (err error)
+//sys Fsync(fd int) (err error)
+// readdir_r
+//sysnb Getpgid(pid int) (pgid int, err error)
+
+//sys Getpgrp() (pid int)
+
+//sysnb Getpid() (pid int)
+//sysnb Getppid() (ppid int)
+//sys Getpriority(which int, who int) (prio int, err error)
+//sysnb Getrusage(who int, rusage *Rusage) (err error)
+//sysnb Getsid(pid int) (sid int, err error)
+//sysnb Kill(pid int, sig Signal) (err error)
+//sys Klogctl(typ int, buf []byte) (n int, err error) = syslog
+//sys Mkdir(dirfd int, path string, mode uint32) (err error)
+//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
+//sys Mkfifo(path string, mode uint32) (err error)
+//sys Mknod(path string, mode uint32, dev int) (err error)
+//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
+//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
+//sys Open(path string, mode int, perm uint32) (fd int, err error) = open64
+//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
+//sys read(fd int, p []byte) (n int, err error)
+//sys Readlink(path string, buf []byte) (n int, err error)
+//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
+//sys Setdomainname(p []byte) (err error)
+//sys Sethostname(p []byte) (err error)
+//sysnb Setpgid(pid int, pgid int) (err error)
+//sysnb Setsid() (pid int, err error)
+//sysnb Settimeofday(tv *Timeval) (err error)
+
+//sys Setuid(uid int) (err error)
+//sys Setgid(uid int) (err error)
+
+//sys Setpriority(which int, who int, prio int) (err error)
+//sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)
+//sys Sync()
+//sysnb Times(tms *Tms) (ticks uintptr, err error)
+//sysnb Umask(mask int) (oldmask int)
+//sysnb Uname(buf *Utsname) (err error)
+//TODO umount
+// //sys Unmount(target string, flags int) (err error) = umount
+//sys Unlink(path string) (err error)
+//sys Unlinkat(dirfd int, path string, flags int) (err error)
+//sys Ustat(dev int, ubuf *Ustat_t) (err error)
+//sys write(fd int, p []byte) (n int, err error)
+//sys readlen(fd int, p *byte, np int) (n int, err error) = read
+//sys writelen(fd int, p *byte, np int) (n int, err error) = write
+
+//sys Dup2(oldfd int, newfd int) (err error)
+//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = posix_fadvise64
+//sys Fchown(fd int, uid int, gid int) (err error)
+//sys Fstat(fd int, stat *Stat_t) (err error)
+//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = fstatat
+//sys Fstatfs(fd int, buf *Statfs_t) (err error)
+//sys Ftruncate(fd int, length int64) (err error)
+//sysnb Getegid() (egid int)
+//sysnb Geteuid() (euid int)
+//sysnb Getgid() (gid int)
+//sysnb Getuid() (uid int)
+//sys Lchown(path string, uid int, gid int) (err error)
+//sys Listen(s int, n int) (err error)
+//sys Lstat(path string, stat *Stat_t) (err error)
+//sys Pause() (err error)
+//sys Pread(fd int, p []byte, offset int64) (n int, err error) = pread64
+//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64
+//TODO Select
+// //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
+//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
+//sysnb Setregid(rgid int, egid int) (err error)
+//sysnb Setreuid(ruid int, euid int) (err error)
+//sys Shutdown(fd int, how int) (err error)
+//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
+//sys Stat(path string, stat *Stat_t) (err error)
+//sys Statfs(path string, buf *Statfs_t) (err error)
+//sys Truncate(path string, length int64) (err error)
+
+//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
+//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
+//sysnb getgroups(n int, list *_Gid_t) (nn int, err error)
+//sysnb setgroups(n int, list *_Gid_t) (err error)
+//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
+//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
+//sysnb socket(domain int, typ int, proto int) (fd int, err error)
+//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
+//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
+//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
+//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
+//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
+//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
+//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
+
+//sys munmap(addr uintptr, length uintptr) (err error)
+
+var mapper = &mmapper{
+ active: make(map[*byte][]byte),
+ mmap: mmap,
+ munmap: munmap,
+}
+
+func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
+ return mapper.Mmap(fd, offset, length, prot, flags)
+}
+
+func Munmap(b []byte) (err error) {
+ return mapper.Munmap(b)
+}
+
+//sys Madvise(b []byte, advice int) (err error)
+//sys Mprotect(b []byte, prot int) (err error)
+//sys Mlock(b []byte) (err error)
+//sys Mlockall(flags int) (err error)
+//sys Msync(b []byte, flags int) (err error)
+//sys Munlock(b []byte) (err error)
+//sys Munlockall() (err error)
+
+//sysnb pipe(p *[2]_C_int) (err error)
+
+func Pipe(p []int) (err error) {
+ if len(p) != 2 {
+ return EINVAL
+ }
+ var pp [2]_C_int
+ err = pipe(&pp)
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ return
+}
+
+//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error)
+
+func Poll(fds []PollFd, timeout int) (n int, err error) {
+ if len(fds) == 0 {
+ return poll(nil, 0, timeout)
+ }
+ return poll(&fds[0], len(fds), timeout)
+}
+
+//sys gettimeofday(tv *Timeval, tzp *Timezone) (err error)
+//sysnb Time(t *Time_t) (tt Time_t, err error)
+//sys Utime(path string, buf *Utimbuf) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go
new file mode 100644
index 000000000..c28af1f86
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go
@@ -0,0 +1,34 @@
+// 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.
+
+// +build aix
+// +build ppc
+
+package unix
+
+//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64
+//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) = setrlimit64
+//sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek64
+
+//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
+
+func setTimespec(sec, nsec int64) Timespec {
+ return Timespec{Sec: int32(sec), Nsec: int32(nsec)}
+}
+
+func setTimeval(sec, usec int64) Timeval {
+ return Timeval{Sec: int32(sec), Usec: int32(usec)}
+}
+
+func (iov *Iovec) SetLen(length int) {
+ iov.Len = uint32(length)
+}
+
+func (msghdr *Msghdr) SetControllen(length int) {
+ msghdr.Controllen = uint32(length)
+}
+
+func (cmsg *Cmsghdr) SetLen(length int) {
+ cmsg.Len = uint32(length)
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go
new file mode 100644
index 000000000..881cacc6c
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go
@@ -0,0 +1,34 @@
+// 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.
+
+// +build aix
+// +build ppc64
+
+package unix
+
+//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
+//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
+//sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek
+
+//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64
+
+func setTimespec(sec, nsec int64) Timespec {
+ return Timespec{Sec: sec, Nsec: nsec}
+}
+
+func setTimeval(sec, usec int64) Timeval {
+ return Timeval{Sec: int64(sec), Usec: int32(usec)}
+}
+
+func (iov *Iovec) SetLen(length int) {
+ iov.Len = uint64(length)
+}
+
+func (msghdr *Msghdr) SetControllen(length int) {
+ msghdr.Controllen = uint32(length)
+}
+
+func (cmsg *Cmsghdr) SetLen(length int) {
+ cmsg.Len = uint32(length)
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go
index 53fb85182..33c8b5f0d 100644
--- a/vendor/golang.org/x/sys/unix/syscall_bsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go
@@ -206,7 +206,7 @@ func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) {
return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil
}
-func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
+func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
switch rsa.Addr.Family {
case AF_LINK:
pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa))
@@ -286,7 +286,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
Close(nfd)
return 0, nil, ECONNABORTED
}
- sa, err = anyToSockaddr(&rsa)
+ sa, err = anyToSockaddr(fd, &rsa)
if err != nil {
Close(nfd)
nfd = 0
@@ -306,7 +306,7 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
rsa.Addr.Family = AF_UNIX
rsa.Addr.Len = SizeofSockaddrUnix
}
- return anyToSockaddr(&rsa)
+ return anyToSockaddr(fd, &rsa)
}
//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
@@ -356,7 +356,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
recvflags = int(msg.Flags)
// source address is only specified if the socket is unconnected
if rsa.Addr.Family != AF_UNSPEC {
- from, err = anyToSockaddr(&rsa)
+ from, err = anyToSockaddr(fd, &rsa)
}
return
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go
index 79e94767d..04042e44b 100644
--- a/vendor/golang.org/x/sys/unix/syscall_darwin.go
+++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go
@@ -108,17 +108,8 @@ func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (
return nil, err
}
- _, _, e1 := Syscall6(
- SYS_GETATTRLIST,
- uintptr(unsafe.Pointer(_p0)),
- uintptr(unsafe.Pointer(&attrList)),
- uintptr(unsafe.Pointer(&attrBuf[0])),
- uintptr(len(attrBuf)),
- uintptr(options),
- 0,
- )
- if e1 != 0 {
- return nil, e1
+ if err := getattrlist(_p0, unsafe.Pointer(&attrList), unsafe.Pointer(&attrBuf[0]), uintptr(len(attrBuf)), int(options)); err != nil {
+ return nil, err
}
size := *(*uint32)(unsafe.Pointer(&attrBuf[0]))
@@ -151,6 +142,8 @@ func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (
return
}
+//sys getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)
+
//sysnb pipe() (r int, w int, err error)
func Pipe(p []int) (err error) {
@@ -168,12 +161,7 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
_p0 = unsafe.Pointer(&buf[0])
bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
}
- r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(_p0), bufsize, uintptr(flags))
- n = int(r0)
- if e1 != 0 {
- err = e1
- }
- return
+ return getfsstat(_p0, bufsize, flags)
}
func xattrPointer(dest []byte) *byte {
@@ -199,7 +187,13 @@ func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
return getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW)
}
-//sys setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error)
+//sys fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)
+
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ return fgetxattr(fd, attr, xattrPointer(dest), len(dest), 0, 0)
+}
+
+//sys setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error)
func Setxattr(path string, attr string, data []byte, flags int) (err error) {
// The parameters for the OS X implementation vary slightly compared to the
@@ -235,7 +229,13 @@ func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
return setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW)
}
-//sys removexattr(path string, attr string, options int) (err error)
+//sys fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error)
+
+func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
+ return fsetxattr(fd, attr, xattrPointer(data), len(data), 0, 0)
+}
+
+//sys removexattr(path string, attr string, options int) (err error)
func Removexattr(path string, attr string) (err error) {
// We wrap around and explicitly zero out the options provided to the OS X
@@ -248,6 +248,12 @@ func Lremovexattr(link string, attr string) (err error) {
return removexattr(link, attr, XATTR_NOFOLLOW)
}
+//sys fremovexattr(fd int, attr string, options int) (err error)
+
+func Fremovexattr(fd int, attr string) (err error) {
+ return fremovexattr(fd, attr, 0)
+}
+
//sys listxattr(path string, dest *byte, size int, options int) (sz int, err error)
func Listxattr(path string, dest []byte) (sz int, err error) {
@@ -258,6 +264,12 @@ func Llistxattr(link string, dest []byte) (sz int, err error) {
return listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW)
}
+//sys flistxattr(fd int, dest *byte, size int, options int) (sz int, err error)
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ return flistxattr(fd, xattrPointer(dest), len(dest), 0)
+}
+
func setattrlistTimes(path string, times []Timespec, flags int) error {
_p0, err := BytePtrFromString(path)
if err != nil {
@@ -274,21 +286,16 @@ func setattrlistTimes(path string, times []Timespec, flags int) error {
if flags&AT_SYMLINK_NOFOLLOW != 0 {
options |= FSOPT_NOFOLLOW
}
- _, _, e1 := Syscall6(
- SYS_SETATTRLIST,
- uintptr(unsafe.Pointer(_p0)),
- uintptr(unsafe.Pointer(&attrList)),
- uintptr(unsafe.Pointer(&attributes)),
- uintptr(unsafe.Sizeof(attributes)),
- uintptr(options),
- 0,
- )
- if e1 != 0 {
- return e1
- }
- return nil
+ return setattrlist(
+ _p0,
+ unsafe.Pointer(&attrList),
+ unsafe.Pointer(&attributes),
+ unsafe.Sizeof(attributes),
+ options)
}
+//sys setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)
+
func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error {
// Darwin doesn't support SYS_UTIMENSAT
return ENOSYS
@@ -313,11 +320,11 @@ func IoctlSetInt(fd int, req uint, value int) error {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) error {
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
@@ -387,6 +394,18 @@ func Uname(uname *Utsname) error {
return nil
}
+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ if raceenabled {
+ raceReleaseMerge(unsafe.Pointer(&ioSync))
+ }
+ var length = int64(count)
+ err = sendfile(infd, outfd, *offset, &length, nil, 0)
+ written = int(length)
+ return
+}
+
+//sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)
+
/*
* Exposed directly
*/
@@ -411,12 +430,8 @@ func Uname(uname *Utsname) error {
//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys Flock(fd int, how int) (err error)
//sys Fpathconf(fd int, name int) (val int, err error)
-//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
-//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
-//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
//sys Fsync(fd int) (err error)
//sys Ftruncate(fd int, length int64) (err error)
-//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64
//sys Getdtablesize() (size int)
//sysnb Getegid() (egid int)
//sysnb Geteuid() (uid int)
@@ -436,7 +451,6 @@ func Uname(uname *Utsname) error {
//sys Link(path string, link string) (err error)
//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
//sys Listen(s int, backlog int) (err error)
-//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
//sys Mkdir(path string, mode uint32) (err error)
//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys Mkfifo(path string, mode uint32) (err error)
@@ -468,8 +482,6 @@ func Uname(uname *Utsname) error {
//sysnb Setsid() (pid int, err error)
//sysnb Settimeofday(tp *Timeval) (err error)
//sysnb Setuid(uid int) (err error)
-//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
-//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
//sys Symlink(path string, link string) (err error)
//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
//sys Sync() (err error)
@@ -529,10 +541,6 @@ func Uname(uname *Utsname) error {
// Watchevent
// Waitevent
// Modwatch
-// Fgetxattr
-// Fsetxattr
-// Fremovexattr
-// Flistxattr
// Fsctl
// Initgroups
// Posix_spawn
diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_386.go b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go
index b3ac109a2..489726fa9 100644
--- a/vendor/golang.org/x/sys/unix/syscall_darwin_386.go
+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go
@@ -8,7 +8,6 @@ package unix
import (
"syscall"
- "unsafe"
)
func setTimespec(sec, nsec int64) Timespec {
@@ -48,21 +47,17 @@ func (cmsg *Cmsghdr) SetLen(length int) {
cmsg.Len = uint32(length)
}
-func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
- var length = uint64(count)
-
- _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0)
-
- written = int(length)
-
- if e1 != 0 {
- err = e1
- }
- return
-}
-
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
// of darwin/386 the syscall is called sysctl instead of __sysctl.
const SYS___SYSCTL = SYS_SYSCTL
+
+//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
+//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
+//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64
+//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64
+//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
+//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
+//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
index 75219444a..914b89bde 100644
--- a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go
@@ -8,7 +8,6 @@ package unix
import (
"syscall"
- "unsafe"
)
func setTimespec(sec, nsec int64) Timespec {
@@ -48,21 +47,17 @@ func (cmsg *Cmsghdr) SetLen(length int) {
cmsg.Len = uint32(length)
}
-func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
- var length = uint64(count)
-
- _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0)
-
- written = int(length)
-
- if e1 != 0 {
- err = e1
- }
- return
-}
-
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
// of darwin/amd64 the syscall is called sysctl instead of __sysctl.
const SYS___SYSCTL = SYS_SYSCTL
+
+//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
+//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64
+//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64
+//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64
+//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
+//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
+//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64
diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
index faae207a4..4a284cf50 100644
--- a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go
@@ -6,7 +6,6 @@ package unix
import (
"syscall"
- "unsafe"
)
func setTimespec(sec, nsec int64) Timespec {
@@ -46,21 +45,20 @@ func (cmsg *Cmsghdr) SetLen(length int) {
cmsg.Len = uint32(length)
}
-func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
- var length = uint64(count)
-
- _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0)
-
- written = int(length)
-
- if e1 != 0 {
- err = e1
- }
- return
-}
-
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic
// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
// of darwin/arm the syscall is called sysctl instead of __sysctl.
const SYS___SYSCTL = SYS_SYSCTL
+
+//sys Fstat(fd int, stat *Stat_t) (err error)
+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
+//sys Fstatfs(fd int, stat *Statfs_t) (err error)
+//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT
+//sys Lstat(path string, stat *Stat_t) (err error)
+//sys Stat(path string, stat *Stat_t) (err error)
+//sys Statfs(path string, stat *Statfs_t) (err error)
+
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+ return 0, ENOSYS
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
index d6d962801..52dcd88f6 100644
--- a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go
@@ -8,7 +8,6 @@ package unix
import (
"syscall"
- "unsafe"
)
func setTimespec(sec, nsec int64) Timespec {
@@ -48,21 +47,20 @@ func (cmsg *Cmsghdr) SetLen(length int) {
cmsg.Len = uint32(length)
}
-func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
- var length = uint64(count)
-
- _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0)
-
- written = int(length)
-
- if e1 != 0 {
- err = e1
- }
- return
-}
-
func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic
// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
// of darwin/arm64 the syscall is called sysctl instead of __sysctl.
const SYS___SYSCTL = SYS_SYSCTL
+
+//sys Fstat(fd int, stat *Stat_t) (err error)
+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
+//sys Fstatfs(fd int, stat *Statfs_t) (err error)
+//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT
+//sys Lstat(path string, stat *Stat_t) (err error)
+//sys Stat(path string, stat *Stat_t) (err error)
+//sys Statfs(path string, stat *Statfs_t) (err error)
+
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+ return 0, ENOSYS
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go b/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go
new file mode 100644
index 000000000..4b4ae460f
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go
@@ -0,0 +1,31 @@
+// 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.
+
+// +build darwin,go1.12
+
+package unix
+
+import "unsafe"
+
+// Implemented in the runtime package (runtime/sys_darwin.go)
+func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
+func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
+func syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
+func syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) // 32-bit only
+func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
+func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
+
+//go:linkname syscall_syscall syscall.syscall
+//go:linkname syscall_syscall6 syscall.syscall6
+//go:linkname syscall_syscall6X syscall.syscall6X
+//go:linkname syscall_syscall9 syscall.syscall9
+//go:linkname syscall_rawSyscall syscall.rawSyscall
+//go:linkname syscall_rawSyscall6 syscall.rawSyscall6
+
+// Find the entry point for f. See comments in runtime/proc.go for the
+// function of the same name.
+//go:nosplit
+func funcPC(f func()) uintptr {
+ return **(**uintptr)(unsafe.Pointer(&f))
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
index b5072de28..891c94d7e 100644
--- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
+++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go
@@ -87,7 +87,7 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
if len > SizeofSockaddrAny {
panic("RawSockaddrAny too small")
}
- sa, err = anyToSockaddr(&rsa)
+ sa, err = anyToSockaddr(fd, &rsa)
if err != nil {
Close(nfd)
nfd = 0
@@ -143,11 +143,11 @@ func IoctlSetInt(fd int, req uint, value int) error {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) error {
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
@@ -234,6 +234,13 @@ func Uname(uname *Utsname) error {
return nil
}
+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ if raceenabled {
+ raceReleaseMerge(unsafe.Pointer(&ioSync))
+ }
+ return sendfile(outfd, infd, offset, count)
+}
+
/*
* Exposed directly
*/
@@ -248,11 +255,13 @@ func Uname(uname *Utsname) error {
//sys Dup(fd int) (nfd int, err error)
//sys Dup2(from int, to int) (err error)
//sys Exit(code int)
+//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
//sys Fchdir(fd int) (err error)
//sys Fchflags(fd int, flags int) (err error)
//sys Fchmod(fd int, mode uint32) (err error)
//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys Fchown(fd int, uid int, gid int) (err error)
+//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys Flock(fd int, how int) (err error)
//sys Fpathconf(fd int, name int) (val int, err error)
//sys Fstat(fd int, stat *Stat_t) (err error)
@@ -280,13 +289,17 @@ func Uname(uname *Utsname) error {
//sys Kqueue() (fd int, err error)
//sys Lchown(path string, uid int, gid int) (err error)
//sys Link(path string, link string) (err error)
+//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
//sys Listen(s int, backlog int) (err error)
//sys Lstat(path string, stat *Stat_t) (err error)
//sys Mkdir(path string, mode uint32) (err error)
+//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys Mkfifo(path string, mode uint32) (err error)
//sys Mknod(path string, mode uint32, dev int) (err error)
+//sys Mknodat(fd int, path string, mode uint32, dev int) (err error)
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys Open(path string, mode int, perm uint32) (fd int, err error)
+//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
//sys Pathconf(path string, name int) (val int, err error)
//sys read(fd int, p []byte) (n int, err error)
//sys Readlink(path string, buf []byte) (n int, err error)
@@ -312,11 +325,13 @@ func Uname(uname *Utsname) error {
//sys Stat(path string, stat *Stat_t) (err error)
//sys Statfs(path string, stat *Statfs_t) (err error)
//sys Symlink(path string, link string) (err error)
+//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
//sys Sync() (err error)
//sys Truncate(path string, length int64) (err error)
//sys Umask(newmask int) (oldmask int)
//sys Undelete(path string) (err error)
//sys Unlink(path string) (err error)
+//sys Unlinkat(dirfd int, path string, flags int) (err error)
//sys Unmount(path string, flags int) (err error)
//sys write(fd int, p []byte) (n int, err error)
//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go
index ba9df4ac1..a7ca1ebea 100644
--- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go
@@ -13,10 +13,34 @@
package unix
import (
- "strings"
+ "sync"
"unsafe"
)
+const (
+ SYS_FSTAT_FREEBSD12 = 551 // { int fstat(int fd, _Out_ struct stat *sb); }
+ SYS_FSTATAT_FREEBSD12 = 552 // { int fstatat(int fd, _In_z_ char *path, \
+ SYS_GETDIRENTRIES_FREEBSD12 = 554 // { ssize_t getdirentries(int fd, \
+ SYS_STATFS_FREEBSD12 = 555 // { int statfs(_In_z_ char *path, \
+ SYS_FSTATFS_FREEBSD12 = 556 // { int fstatfs(int fd, \
+ SYS_GETFSSTAT_FREEBSD12 = 557 // { int getfsstat( \
+ SYS_MKNODAT_FREEBSD12 = 559 // { int mknodat(int fd, _In_z_ char *path, \
+)
+
+// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html.
+var (
+ osreldateOnce sync.Once
+ osreldate uint32
+)
+
+// INO64_FIRST from /usr/src/lib/libc/sys/compat-ino64.h
+const _ino64First = 1200031
+
+func supportsABI(ver uint32) bool {
+ osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") })
+ return osreldate >= ver
+}
+
// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
type SockaddrDatalink struct {
Len uint8
@@ -58,14 +82,21 @@ func nametomib(name string) (mib []_C_int, err error) {
return buf[0 : n/siz], nil
}
-//sysnb pipe() (r int, w int, err error)
-
func Pipe(p []int) (err error) {
+ return Pipe2(p, 0)
+}
+
+//sysnb pipe2(p *[2]_C_int, flags int) (err error)
+
+func Pipe2(p []int, flags int) error {
if len(p) != 2 {
return EINVAL
}
- p[0], p[1], err = pipe()
- return
+ var pp [2]_C_int
+ err := pipe2(&pp, flags)
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ return err
}
func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
@@ -89,7 +120,7 @@ func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {
if len > SizeofSockaddrAny {
panic("RawSockaddrAny too small")
}
- sa, err = anyToSockaddr(&rsa)
+ sa, err = anyToSockaddr(fd, &rsa)
if err != nil {
Close(nfd)
nfd = 0
@@ -115,17 +146,39 @@ func Getwd() (string, error) {
}
func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
- var _p0 unsafe.Pointer
- var bufsize uintptr
+ var (
+ _p0 unsafe.Pointer
+ bufsize uintptr
+ oldBuf []statfs_freebsd11_t
+ needsConvert bool
+ )
+
if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
- bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
+ if supportsABI(_ino64First) {
+ _p0 = unsafe.Pointer(&buf[0])
+ bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))
+ } else {
+ n := len(buf)
+ oldBuf = make([]statfs_freebsd11_t, n)
+ _p0 = unsafe.Pointer(&oldBuf[0])
+ bufsize = unsafe.Sizeof(statfs_freebsd11_t{}) * uintptr(n)
+ needsConvert = true
+ }
+ }
+ var sysno uintptr = SYS_GETFSSTAT
+ if supportsABI(_ino64First) {
+ sysno = SYS_GETFSSTAT_FREEBSD12
}
- r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))
+ r0, _, e1 := Syscall(sysno, uintptr(_p0), bufsize, uintptr(flags))
n = int(r0)
if e1 != 0 {
err = e1
}
+ if e1 == 0 && needsConvert {
+ for i := range oldBuf {
+ buf[i].convertFrom(&oldBuf[i])
+ }
+ }
return
}
@@ -134,225 +187,6 @@ func setattrlistTimes(path string, times []Timespec, flags int) error {
return ENOSYS
}
-// Derive extattr namespace and attribute name
-
-func xattrnamespace(fullattr string) (ns int, attr string, err error) {
- s := strings.IndexByte(fullattr, '.')
- if s == -1 {
- return -1, "", ENOATTR
- }
-
- namespace := fullattr[0:s]
- attr = fullattr[s+1:]
-
- switch namespace {
- case "user":
- return EXTATTR_NAMESPACE_USER, attr, nil
- case "system":
- return EXTATTR_NAMESPACE_SYSTEM, attr, nil
- default:
- return -1, "", ENOATTR
- }
-}
-
-func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {
- if len(dest) > idx {
- return unsafe.Pointer(&dest[idx])
- } else {
- return unsafe.Pointer(_zero)
- }
-}
-
-// FreeBSD implements its own syscalls to handle extended attributes
-
-func Getxattr(file string, attr string, dest []byte) (sz int, err error) {
- d := initxattrdest(dest, 0)
- destsize := len(dest)
-
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return -1, err
- }
-
- return ExtattrGetFile(file, nsid, a, uintptr(d), destsize)
-}
-
-func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
- d := initxattrdest(dest, 0)
- destsize := len(dest)
-
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return -1, err
- }
-
- return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)
-}
-
-func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
- d := initxattrdest(dest, 0)
- destsize := len(dest)
-
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return -1, err
- }
-
- return ExtattrGetLink(link, nsid, a, uintptr(d), destsize)
-}
-
-// flags are unused on FreeBSD
-
-func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
- d := unsafe.Pointer(&data[0])
- datasiz := len(data)
-
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return
- }
-
- _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)
- return
-}
-
-func Setxattr(file string, attr string, data []byte, flags int) (err error) {
- d := unsafe.Pointer(&data[0])
- datasiz := len(data)
-
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return
- }
-
- _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)
- return
-}
-
-func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
- d := unsafe.Pointer(&data[0])
- datasiz := len(data)
-
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return
- }
-
- _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)
- return
-}
-
-func Removexattr(file string, attr string) (err error) {
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return
- }
-
- err = ExtattrDeleteFile(file, nsid, a)
- return
-}
-
-func Fremovexattr(fd int, attr string) (err error) {
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return
- }
-
- err = ExtattrDeleteFd(fd, nsid, a)
- return
-}
-
-func Lremovexattr(link string, attr string) (err error) {
- nsid, a, err := xattrnamespace(attr)
- if err != nil {
- return
- }
-
- err = ExtattrDeleteLink(link, nsid, a)
- return
-}
-
-func Listxattr(file string, dest []byte) (sz int, err error) {
- d := initxattrdest(dest, 0)
- destsiz := len(dest)
-
- // FreeBSD won't allow you to list xattrs from multiple namespaces
- s := 0
- for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
- stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
-
- /* Errors accessing system attrs are ignored so that
- * we can implement the Linux-like behavior of omitting errors that
- * we don't have read permissions on
- *
- * Linux will still error if we ask for user attributes on a file that
- * we don't have read permissions on, so don't ignore those errors
- */
- if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
- continue
- } else if e != nil {
- return s, e
- }
-
- s += stmp
- destsiz -= s
- if destsiz < 0 {
- destsiz = 0
- }
- d = initxattrdest(dest, s)
- }
-
- return s, nil
-}
-
-func Flistxattr(fd int, dest []byte) (sz int, err error) {
- d := initxattrdest(dest, 0)
- destsiz := len(dest)
-
- s := 0
- for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
- stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
- if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
- continue
- } else if e != nil {
- return s, e
- }
-
- s += stmp
- destsiz -= s
- if destsiz < 0 {
- destsiz = 0
- }
- d = initxattrdest(dest, s)
- }
-
- return s, nil
-}
-
-func Llistxattr(link string, dest []byte) (sz int, err error) {
- d := initxattrdest(dest, 0)
- destsiz := len(dest)
-
- s := 0
- for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
- stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
- if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
- continue
- } else if e != nil {
- return s, e
- }
-
- s += stmp
- destsiz -= s
- if destsiz < 0 {
- destsiz = 0
- }
- d = initxattrdest(dest, s)
- }
-
- return s, nil
-}
-
//sys ioctl(fd int, req uint, arg uintptr) (err error)
// ioctl itself should not be exposed directly, but additional get/set
@@ -364,11 +198,11 @@ func IoctlSetInt(fd int, req uint, value int) error {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) error {
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
@@ -438,6 +272,241 @@ func Uname(uname *Utsname) error {
return nil
}
+func Stat(path string, st *Stat_t) (err error) {
+ var oldStat stat_freebsd11_t
+ if supportsABI(_ino64First) {
+ return fstatat_freebsd12(AT_FDCWD, path, st, 0)
+ }
+ err = stat(path, &oldStat)
+ if err != nil {
+ return err
+ }
+
+ st.convertFrom(&oldStat)
+ return nil
+}
+
+func Lstat(path string, st *Stat_t) (err error) {
+ var oldStat stat_freebsd11_t
+ if supportsABI(_ino64First) {
+ return fstatat_freebsd12(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW)
+ }
+ err = lstat(path, &oldStat)
+ if err != nil {
+ return err
+ }
+
+ st.convertFrom(&oldStat)
+ return nil
+}
+
+func Fstat(fd int, st *Stat_t) (err error) {
+ var oldStat stat_freebsd11_t
+ if supportsABI(_ino64First) {
+ return fstat_freebsd12(fd, st)
+ }
+ err = fstat(fd, &oldStat)
+ if err != nil {
+ return err
+ }
+
+ st.convertFrom(&oldStat)
+ return nil
+}
+
+func Fstatat(fd int, path string, st *Stat_t, flags int) (err error) {
+ var oldStat stat_freebsd11_t
+ if supportsABI(_ino64First) {
+ return fstatat_freebsd12(fd, path, st, flags)
+ }
+ err = fstatat(fd, path, &oldStat, flags)
+ if err != nil {
+ return err
+ }
+
+ st.convertFrom(&oldStat)
+ return nil
+}
+
+func Statfs(path string, st *Statfs_t) (err error) {
+ var oldStatfs statfs_freebsd11_t
+ if supportsABI(_ino64First) {
+ return statfs_freebsd12(path, st)
+ }
+ err = statfs(path, &oldStatfs)
+ if err != nil {
+ return err
+ }
+
+ st.convertFrom(&oldStatfs)
+ return nil
+}
+
+func Fstatfs(fd int, st *Statfs_t) (err error) {
+ var oldStatfs statfs_freebsd11_t
+ if supportsABI(_ino64First) {
+ return fstatfs_freebsd12(fd, st)
+ }
+ err = fstatfs(fd, &oldStatfs)
+ if err != nil {
+ return err
+ }
+
+ st.convertFrom(&oldStatfs)
+ return nil
+}
+
+func Getdents(fd int, buf []byte) (n int, err error) {
+ return Getdirentries(fd, buf, nil)
+}
+
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+ if supportsABI(_ino64First) {
+ return getdirentries_freebsd12(fd, buf, basep)
+ }
+
+ // The old syscall entries are smaller than the new. Use 1/4 of the original
+ // buffer size rounded up to DIRBLKSIZ (see /usr/src/lib/libc/sys/getdirentries.c).
+ oldBufLen := roundup(len(buf)/4, _dirblksiz)
+ oldBuf := make([]byte, oldBufLen)
+ n, err = getdirentries(fd, oldBuf, basep)
+ if err == nil && n > 0 {
+ n = convertFromDirents11(buf, oldBuf[:n])
+ }
+ return
+}
+
+func Mknod(path string, mode uint32, dev uint64) (err error) {
+ var oldDev int
+ if supportsABI(_ino64First) {
+ return mknodat_freebsd12(AT_FDCWD, path, mode, dev)
+ }
+ oldDev = int(dev)
+ return mknod(path, mode, oldDev)
+}
+
+func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {
+ var oldDev int
+ if supportsABI(_ino64First) {
+ return mknodat_freebsd12(fd, path, mode, dev)
+ }
+ oldDev = int(dev)
+ return mknodat(fd, path, mode, oldDev)
+}
+
+// round x to the nearest multiple of y, larger or equal to x.
+//
+// from /usr/include/sys/param.h Macros for counting and rounding.
+// #define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
+func roundup(x, y int) int {
+ return ((x + y - 1) / y) * y
+}
+
+func (s *Stat_t) convertFrom(old *stat_freebsd11_t) {
+ *s = Stat_t{
+ Dev: uint64(old.Dev),
+ Ino: uint64(old.Ino),
+ Nlink: uint64(old.Nlink),
+ Mode: old.Mode,
+ Uid: old.Uid,
+ Gid: old.Gid,
+ Rdev: uint64(old.Rdev),
+ Atim: old.Atim,
+ Mtim: old.Mtim,
+ Ctim: old.Ctim,
+ Birthtim: old.Birthtim,
+ Size: old.Size,
+ Blocks: old.Blocks,
+ Blksize: old.Blksize,
+ Flags: old.Flags,
+ Gen: uint64(old.Gen),
+ }
+}
+
+func (s *Statfs_t) convertFrom(old *statfs_freebsd11_t) {
+ *s = Statfs_t{
+ Version: _statfsVersion,
+ Type: old.Type,
+ Flags: old.Flags,
+ Bsize: old.Bsize,
+ Iosize: old.Iosize,
+ Blocks: old.Blocks,
+ Bfree: old.Bfree,
+ Bavail: old.Bavail,
+ Files: old.Files,
+ Ffree: old.Ffree,
+ Syncwrites: old.Syncwrites,
+ Asyncwrites: old.Asyncwrites,
+ Syncreads: old.Syncreads,
+ Asyncreads: old.Asyncreads,
+ // Spare
+ Namemax: old.Namemax,
+ Owner: old.Owner,
+ Fsid: old.Fsid,
+ // Charspare
+ // Fstypename
+ // Mntfromname
+ // Mntonname
+ }
+
+ sl := old.Fstypename[:]
+ n := clen(*(*[]byte)(unsafe.Pointer(&sl)))
+ copy(s.Fstypename[:], old.Fstypename[:n])
+
+ sl = old.Mntfromname[:]
+ n = clen(*(*[]byte)(unsafe.Pointer(&sl)))
+ copy(s.Mntfromname[:], old.Mntfromname[:n])
+
+ sl = old.Mntonname[:]
+ n = clen(*(*[]byte)(unsafe.Pointer(&sl)))
+ copy(s.Mntonname[:], old.Mntonname[:n])
+}
+
+func convertFromDirents11(buf []byte, old []byte) int {
+ const (
+ fixedSize = int(unsafe.Offsetof(Dirent{}.Name))
+ oldFixedSize = int(unsafe.Offsetof(dirent_freebsd11{}.Name))
+ )
+
+ dstPos := 0
+ srcPos := 0
+ for dstPos+fixedSize < len(buf) && srcPos+oldFixedSize < len(old) {
+ dstDirent := (*Dirent)(unsafe.Pointer(&buf[dstPos]))
+ srcDirent := (*dirent_freebsd11)(unsafe.Pointer(&old[srcPos]))
+
+ reclen := roundup(fixedSize+int(srcDirent.Namlen)+1, 8)
+ if dstPos+reclen > len(buf) {
+ break
+ }
+
+ dstDirent.Fileno = uint64(srcDirent.Fileno)
+ dstDirent.Off = 0
+ dstDirent.Reclen = uint16(reclen)
+ dstDirent.Type = srcDirent.Type
+ dstDirent.Pad0 = 0
+ dstDirent.Namlen = uint16(srcDirent.Namlen)
+ dstDirent.Pad1 = 0
+
+ copy(dstDirent.Name[:], srcDirent.Name[:srcDirent.Namlen])
+ padding := buf[dstPos+fixedSize+int(dstDirent.Namlen) : dstPos+reclen]
+ for i := range padding {
+ padding[i] = 0
+ }
+
+ dstPos += int(dstDirent.Reclen)
+ srcPos += int(srcDirent.Reclen)
+ }
+
+ return dstPos
+}
+
+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ if raceenabled {
+ raceReleaseMerge(unsafe.Pointer(&ioSync))
+ }
+ return sendfile(outfd, infd, offset, count)
+}
+
/*
* Exposed directly
*/
@@ -477,13 +546,16 @@ func Uname(uname *Utsname) error {
//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys Flock(fd int, how int) (err error)
//sys Fpathconf(fd int, name int) (val int, err error)
-//sys Fstat(fd int, stat *Stat_t) (err error)
-//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
-//sys Fstatfs(fd int, stat *Statfs_t) (err error)
+//sys fstat(fd int, stat *stat_freebsd11_t) (err error)
+//sys fstat_freebsd12(fd int, stat *Stat_t) (err error)
+//sys fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error)
+//sys fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error)
+//sys fstatfs(fd int, stat *statfs_freebsd11_t) (err error)
+//sys fstatfs_freebsd12(fd int, stat *Statfs_t) (err error)
//sys Fsync(fd int) (err error)
//sys Ftruncate(fd int, length int64) (err error)
-//sys Getdents(fd int, buf []byte) (n int, err error)
-//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
+//sys getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)
+//sys getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error)
//sys Getdtablesize() (size int)
//sysnb Getegid() (egid int)
//sysnb Geteuid() (uid int)
@@ -505,11 +577,13 @@ func Uname(uname *Utsname) error {
//sys Link(path string, link string) (err error)
//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
//sys Listen(s int, backlog int) (err error)
-//sys Lstat(path string, stat *Stat_t) (err error)
+//sys lstat(path string, stat *stat_freebsd11_t) (err error)
//sys Mkdir(path string, mode uint32) (err error)
//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys Mkfifo(path string, mode uint32) (err error)
-//sys Mknod(path string, mode uint32, dev int) (err error)
+//sys mknod(path string, mode uint32, dev int) (err error)
+//sys mknodat(fd int, path string, mode uint32, dev int) (err error)
+//sys mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error)
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys Open(path string, mode int, perm uint32) (fd int, err error)
//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error)
@@ -539,8 +613,9 @@ func Uname(uname *Utsname) error {
//sysnb Setsid() (pid int, err error)
//sysnb Settimeofday(tp *Timeval) (err error)
//sysnb Setuid(uid int) (err error)
-//sys Stat(path string, stat *Stat_t) (err error)
-//sys Statfs(path string, stat *Statfs_t) (err error)
+//sys stat(path string, stat *stat_freebsd11_t) (err error)
+//sys statfs(path string, stat *statfs_freebsd11_t) (err error)
+//sys statfs_freebsd12(path string, stat *Statfs_t) (err error)
//sys Symlink(path string, link string) (err error)
//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
//sys Sync() (err error)
@@ -595,6 +670,7 @@ func Uname(uname *Utsname) error {
// Kqueue_portset
// Getattrlist
// Setattrlist
+// Getdents
// Getdirentriesattr
// Searchfs
// Delete
@@ -602,14 +678,6 @@ func Uname(uname *Utsname) error {
// Watchevent
// Waitevent
// Modwatch
-// Getxattr
-// Fgetxattr
-// Setxattr
-// Fsetxattr
-// Removexattr
-// Fremovexattr
-// Listxattr
-// Flistxattr
// Fsctl
// Initgroups
// Posix_spawn
diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
new file mode 100644
index 000000000..a31805487
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
@@ -0,0 +1,52 @@
+// 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.
+
+// +build arm64,freebsd
+
+package unix
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+func setTimespec(sec, nsec int64) Timespec {
+ return Timespec{Sec: sec, Nsec: nsec}
+}
+
+func setTimeval(sec, usec int64) Timeval {
+ return Timeval{Sec: sec, Usec: usec}
+}
+
+func SetKevent(k *Kevent_t, fd, mode, flags int) {
+ k.Ident = uint64(fd)
+ k.Filter = int16(mode)
+ k.Flags = uint16(flags)
+}
+
+func (iov *Iovec) SetLen(length int) {
+ iov.Len = uint64(length)
+}
+
+func (msghdr *Msghdr) SetControllen(length int) {
+ msghdr.Controllen = uint32(length)
+}
+
+func (cmsg *Cmsghdr) SetLen(length int) {
+ cmsg.Len = uint32(length)
+}
+
+func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ var writtenOut uint64 = 0
+ _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)
+
+ written = int(writtenOut)
+
+ if e1 != 0 {
+ err = e1
+ }
+ return
+}
+
+func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go
index 9908030cb..776040233 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux.go
@@ -12,6 +12,8 @@
package unix
import (
+ "encoding/binary"
+ "net"
"syscall"
"unsafe"
)
@@ -55,17 +57,26 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
// ioctl itself should not be exposed directly, but additional get/set
// functions for specific types are permissible.
+// IoctlSetPointerInt performs an ioctl operation which sets an
+// integer value on fd, using the specified request number. The ioctl
+// argument is called with a pointer to the integer value, rather than
+// passing the integer value directly.
+func IoctlSetPointerInt(fd int, req uint, value int) error {
+ v := int32(value)
+ return ioctl(fd, req, uintptr(unsafe.Pointer(&v)))
+}
+
// IoctlSetInt performs an ioctl operation which sets an integer value
// on fd, using the specified request number.
func IoctlSetInt(fd int, req uint, value int) error {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) error {
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
@@ -489,6 +500,47 @@ func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) {
return unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil
}
+// SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets
+// using the RFCOMM protocol.
+//
+// Server example:
+//
+// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)
+// _ = unix.Bind(fd, &unix.SockaddrRFCOMM{
+// Channel: 1,
+// Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00
+// })
+// _ = Listen(fd, 1)
+// nfd, sa, _ := Accept(fd)
+// fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd)
+// Read(nfd, buf)
+//
+// Client example:
+//
+// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)
+// _ = Connect(fd, &SockaddrRFCOMM{
+// Channel: 1,
+// Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11
+// })
+// Write(fd, []byte(`hello`))
+type SockaddrRFCOMM struct {
+ // Addr represents a bluetooth address, byte ordering is little-endian.
+ Addr [6]uint8
+
+ // Channel is a designated bluetooth channel, only 1-30 are available for use.
+ // Since Linux 2.6.7 and further zero value is the first available channel.
+ Channel uint8
+
+ raw RawSockaddrRFCOMM
+}
+
+func (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) {
+ sa.raw.Family = AF_BLUETOOTH
+ sa.raw.Channel = sa.Channel
+ sa.raw.Bdaddr = sa.Addr
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil
+}
+
// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets.
// The RxID and TxID fields are used for transport protocol addressing in
// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with
@@ -651,7 +703,70 @@ func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {
return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil
}
-func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
+type SockaddrXDP struct {
+ Flags uint16
+ Ifindex uint32
+ QueueID uint32
+ SharedUmemFD uint32
+ raw RawSockaddrXDP
+}
+
+func (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) {
+ sa.raw.Family = AF_XDP
+ sa.raw.Flags = sa.Flags
+ sa.raw.Ifindex = sa.Ifindex
+ sa.raw.Queue_id = sa.QueueID
+ sa.raw.Shared_umem_fd = sa.SharedUmemFD
+
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil
+}
+
+// This constant mirrors the #define of PX_PROTO_OE in
+// linux/if_pppox.h. We're defining this by hand here instead of
+// autogenerating through mkerrors.sh because including
+// linux/if_pppox.h causes some declaration conflicts with other
+// includes (linux/if_pppox.h includes linux/in.h, which conflicts
+// with netinet/in.h). Given that we only need a single zero constant
+// out of that file, it's cleaner to just define it by hand here.
+const px_proto_oe = 0
+
+type SockaddrPPPoE struct {
+ SID uint16
+ Remote net.HardwareAddr
+ Dev string
+ raw RawSockaddrPPPoX
+}
+
+func (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) {
+ if len(sa.Remote) != 6 {
+ return nil, 0, EINVAL
+ }
+ if len(sa.Dev) > IFNAMSIZ-1 {
+ return nil, 0, EINVAL
+ }
+
+ *(*uint16)(unsafe.Pointer(&sa.raw[0])) = AF_PPPOX
+ // This next field is in host-endian byte order. We can't use the
+ // same unsafe pointer cast as above, because this value is not
+ // 32-bit aligned and some architectures don't allow unaligned
+ // access.
+ //
+ // However, the value of px_proto_oe is 0, so we can use
+ // encoding/binary helpers to write the bytes without worrying
+ // about the ordering.
+ binary.BigEndian.PutUint32(sa.raw[2:6], px_proto_oe)
+ // This field is deliberately big-endian, unlike the previous
+ // one. The kernel expects SID to be in network byte order.
+ binary.BigEndian.PutUint16(sa.raw[6:8], sa.SID)
+ copy(sa.raw[8:14], sa.Remote)
+ for i := 14; i < 14+IFNAMSIZ; i++ {
+ sa.raw[i] = 0
+ }
+ copy(sa.raw[14:], sa.Dev)
+ return unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil
+}
+
+func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
switch rsa.Addr.Family {
case AF_NETLINK:
pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa))
@@ -728,6 +843,55 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
Port: pp.Port,
}
return sa, nil
+ case AF_BLUETOOTH:
+ proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL)
+ if err != nil {
+ return nil, err
+ }
+ // only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections
+ switch proto {
+ case BTPROTO_L2CAP:
+ pp := (*RawSockaddrL2)(unsafe.Pointer(rsa))
+ sa := &SockaddrL2{
+ PSM: pp.Psm,
+ CID: pp.Cid,
+ Addr: pp.Bdaddr,
+ AddrType: pp.Bdaddr_type,
+ }
+ return sa, nil
+ case BTPROTO_RFCOMM:
+ pp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa))
+ sa := &SockaddrRFCOMM{
+ Channel: pp.Channel,
+ Addr: pp.Bdaddr,
+ }
+ return sa, nil
+ }
+ case AF_XDP:
+ pp := (*RawSockaddrXDP)(unsafe.Pointer(rsa))
+ sa := &SockaddrXDP{
+ Flags: pp.Flags,
+ Ifindex: pp.Ifindex,
+ QueueID: pp.Queue_id,
+ SharedUmemFD: pp.Shared_umem_fd,
+ }
+ return sa, nil
+ case AF_PPPOX:
+ pp := (*RawSockaddrPPPoX)(unsafe.Pointer(rsa))
+ if binary.BigEndian.Uint32(pp[2:6]) != px_proto_oe {
+ return nil, EINVAL
+ }
+ sa := &SockaddrPPPoE{
+ SID: binary.BigEndian.Uint16(pp[6:8]),
+ Remote: net.HardwareAddr(pp[8:14]),
+ }
+ for i := 14; i < 14+IFNAMSIZ; i++ {
+ if pp[i] == 0 {
+ sa.Dev = string(pp[14:i])
+ break
+ }
+ }
+ return sa, nil
}
return nil, EAFNOSUPPORT
}
@@ -739,7 +903,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
if err != nil {
return
}
- sa, err = anyToSockaddr(&rsa)
+ sa, err = anyToSockaddr(fd, &rsa)
if err != nil {
Close(nfd)
nfd = 0
@@ -757,7 +921,7 @@ func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
if len > SizeofSockaddrAny {
panic("RawSockaddrAny too small")
}
- sa, err = anyToSockaddr(&rsa)
+ sa, err = anyToSockaddr(fd, &rsa)
if err != nil {
Close(nfd)
nfd = 0
@@ -771,7 +935,7 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
if err = getsockname(fd, &rsa, &len); err != nil {
return
}
- return anyToSockaddr(&rsa)
+ return anyToSockaddr(fd, &rsa)
}
func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {
@@ -960,7 +1124,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
recvflags = int(msg.Flags)
// source address is only specified if the socket is unconnected
if rsa.Addr.Family != AF_UNSPEC {
- from, err = anyToSockaddr(&rsa)
+ from, err = anyToSockaddr(fd, &rsa)
}
return
}
@@ -1030,7 +1194,7 @@ func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err erro
// The ptrace syscall differs from glibc's ptrace.
// Peeks returns the word in *data, not as the return value.
- var buf [sizeofPtr]byte
+ var buf [SizeofPtr]byte
// Leading edge. PEEKTEXT/PEEKDATA don't require aligned
// access (PEEKUSER warns that it might), but if we don't
@@ -1038,12 +1202,12 @@ func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err erro
// boundary and not get the bytes leading up to the page
// boundary.
n := 0
- if addr%sizeofPtr != 0 {
- err = ptrace(req, pid, addr-addr%sizeofPtr, uintptr(unsafe.Pointer(&buf[0])))
+ if addr%SizeofPtr != 0 {
+ err = ptrace(req, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0])))
if err != nil {
return 0, err
}
- n += copy(out, buf[addr%sizeofPtr:])
+ n += copy(out, buf[addr%SizeofPtr:])
out = out[n:]
}
@@ -1081,15 +1245,15 @@ func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (c
// Leading edge.
n := 0
- if addr%sizeofPtr != 0 {
- var buf [sizeofPtr]byte
- err = ptrace(peekReq, pid, addr-addr%sizeofPtr, uintptr(unsafe.Pointer(&buf[0])))
+ if addr%SizeofPtr != 0 {
+ var buf [SizeofPtr]byte
+ err = ptrace(peekReq, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0])))
if err != nil {
return 0, err
}
- n += copy(buf[addr%sizeofPtr:], data)
+ n += copy(buf[addr%SizeofPtr:], data)
word := *((*uintptr)(unsafe.Pointer(&buf[0])))
- err = ptrace(pokeReq, pid, addr-addr%sizeofPtr, word)
+ err = ptrace(pokeReq, pid, addr-addr%SizeofPtr, word)
if err != nil {
return 0, err
}
@@ -1097,19 +1261,19 @@ func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (c
}
// Interior.
- for len(data) > sizeofPtr {
+ for len(data) > SizeofPtr {
word := *((*uintptr)(unsafe.Pointer(&data[0])))
err = ptrace(pokeReq, pid, addr+uintptr(n), word)
if err != nil {
return n, err
}
- n += sizeofPtr
- data = data[sizeofPtr:]
+ n += SizeofPtr
+ data = data[SizeofPtr:]
}
// Trailing edge.
if len(data) > 0 {
- var buf [sizeofPtr]byte
+ var buf [SizeofPtr]byte
err = ptrace(peekReq, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0])))
if err != nil {
return n, err
@@ -1196,6 +1360,13 @@ func Mount(source string, target string, fstype string, flags uintptr, data stri
return mount(source, target, fstype, flags, datap)
}
+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ if raceenabled {
+ raceReleaseMerge(unsafe.Pointer(&ioSync))
+ }
+ return sendfile(outfd, infd, offset, count)
+}
+
// Sendto
// Recvfrom
// Socketpair
@@ -1208,9 +1379,11 @@ func Mount(source string, target string, fstype string, flags uintptr, data stri
//sys Adjtimex(buf *Timex) (state int, err error)
//sys Chdir(path string) (err error)
//sys Chroot(path string) (err error)
+//sys ClockGetres(clockid int32, res *Timespec) (err error)
//sys ClockGettime(clockid int32, time *Timespec) (err error)
//sys Close(fd int) (err error)
//sys CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
+//sys DeleteModule(name string, flags int) (err error)
//sys Dup(oldfd int) (fd int, err error)
//sys Dup3(oldfd int, newfd int, flags int) (err error)
//sysnb EpollCreate1(flag int) (fd int, err error)
@@ -1223,7 +1396,12 @@ func Mount(source string, target string, fstype string, flags uintptr, data stri
//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys fcntl(fd int, cmd int, arg int) (val int, err error)
//sys Fdatasync(fd int) (err error)
+//sys Fgetxattr(fd int, attr string, dest []byte) (sz int, err error)
+//sys FinitModule(fd int, params string, flags int) (err error)
+//sys Flistxattr(fd int, dest []byte) (sz int, err error)
//sys Flock(fd int, how int) (err error)
+//sys Fremovexattr(fd int, attr string) (err error)
+//sys Fsetxattr(fd int, attr string, dest []byte, flags int) (err error)
//sys Fsync(fd int) (err error)
//sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64
//sysnb Getpgid(pid int) (pgid int, err error)
@@ -1241,6 +1419,7 @@ func Getpgrp() (pid int) {
//sysnb Getsid(pid int) (sid int, err error)
//sysnb Gettid() (tid int)
//sys Getxattr(path string, attr string, dest []byte) (sz int, err error)
+//sys InitModule(moduleImage []byte, params string) (err error)
//sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)
//sysnb InotifyInit1(flags int) (fd int, err error)
//sysnb InotifyRmWatch(fd int, watchdesc uint32) (success int, err error)
@@ -1251,6 +1430,7 @@ func Getpgrp() (pid int) {
//sys Llistxattr(path string, dest []byte) (sz int, err error)
//sys Lremovexattr(path string, attr string) (err error)
//sys Lsetxattr(path string, attr string, data []byte, flags int) (err error)
+//sys MemfdCreate(name string, flags int) (fd int, err error)
//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
@@ -1262,6 +1442,7 @@ func Getpgrp() (pid int) {
//sys read(fd int, p []byte) (n int, err error)
//sys Removexattr(path string, attr string) (err error)
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
+//sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error)
//sys RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error)
//sys Setdomainname(p []byte) (err error)
//sys Sethostname(p []byte) (err error)
@@ -1329,15 +1510,12 @@ func Munmap(b []byte) (err error) {
// Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd,
// using the specified flags.
func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {
- n, _, errno := Syscall6(
- SYS_VMSPLICE,
- uintptr(fd),
- uintptr(unsafe.Pointer(&iovs[0])),
- uintptr(len(iovs)),
- uintptr(flags),
- 0,
- 0,
- )
+ var p unsafe.Pointer
+ if len(iovs) > 0 {
+ p = unsafe.Pointer(&iovs[0])
+ }
+
+ n, _, errno := Syscall6(SYS_VMSPLICE, uintptr(fd), uintptr(p), uintptr(len(iovs)), uintptr(flags), 0, 0)
if errno != 0 {
return 0, syscall.Errno(errno)
}
@@ -1350,10 +1528,70 @@ func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
if flags & ^(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 {
return EINVAL
- } else if flags&(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 {
- return EOPNOTSUPP
}
- return faccessat(dirfd, path, mode)
+
+ // The Linux kernel faccessat system call does not take any flags.
+ // The glibc faccessat implements the flags itself; see
+ // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;hb=HEAD
+ // Because people naturally expect syscall.Faccessat to act
+ // like C faccessat, we do the same.
+
+ if flags == 0 {
+ return faccessat(dirfd, path, mode)
+ }
+
+ var st Stat_t
+ if err := Fstatat(dirfd, path, &st, flags&AT_SYMLINK_NOFOLLOW); err != nil {
+ return err
+ }
+
+ mode &= 7
+ if mode == 0 {
+ return nil
+ }
+
+ var uid int
+ if flags&AT_EACCESS != 0 {
+ uid = Geteuid()
+ } else {
+ uid = Getuid()
+ }
+
+ if uid == 0 {
+ if mode&1 == 0 {
+ // Root can read and write any file.
+ return nil
+ }
+ if st.Mode&0111 != 0 {
+ // Root can execute any file that anybody can execute.
+ return nil
+ }
+ return EACCES
+ }
+
+ var fmode uint32
+ if uint32(uid) == st.Uid {
+ fmode = (st.Mode >> 6) & 7
+ } else {
+ var gid int
+ if flags&AT_EACCESS != 0 {
+ gid = Getegid()
+ } else {
+ gid = Getgid()
+ }
+
+ if uint32(gid) == st.Gid {
+ fmode = (st.Mode >> 3) & 7
+ } else {
+ fmode = st.Mode & 7
+ }
+ }
+
+ if fmode&mode == mode {
+ return nil
+ }
+
+ return EACCES
}
/*
@@ -1365,21 +1603,14 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
// Brk
// Capget
// Capset
-// ClockGetres
// ClockNanosleep
// ClockSettime
// Clone
-// CreateModule
-// DeleteModule
// EpollCtlOld
// EpollPwait
// EpollWaitOld
// Execve
-// Fgetxattr
-// Flistxattr
// Fork
-// Fremovexattr
-// Fsetxattr
// Futex
// GetKernelSyms
// GetMempolicy
@@ -1418,7 +1649,6 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
// Pselect6
// Ptrace
// Putpmsg
-// QueryModule
// Quotactl
// Readahead
// Readv
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
index 5f9b2454a..615f2918a 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
@@ -20,12 +20,26 @@ package unix
//sysnb Getgid() (gid int)
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
//sysnb Getuid() (uid int)
-//sysnb InotifyInit() (fd int, err error)
+//sysnb inotifyInit() (fd int, err error)
+
+func InotifyInit() (fd int, err error) {
+ // First try inotify_init1, because Android's seccomp policy blocks the latter.
+ fd, err = InotifyInit1(0)
+ if err == ENOSYS {
+ fd, err = inotifyInit()
+ }
+ return
+}
+
//sys Ioperm(from int, num int, on int) (err error)
//sys Iopl(level int) (err error)
//sys Lchown(path string, uid int, gid int) (err error)
//sys Listen(s int, n int) (err error)
-//sys Lstat(path string, stat *Stat_t) (err error)
+
+func Lstat(path string, stat *Stat_t) (err error) {
+ return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)
+}
+
//sys Pause() (err error)
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
@@ -160,3 +174,16 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
}
return poll(&fds[0], len(fds), timeout)
}
+
+//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
+
+func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
+ cmdlineLen := len(cmdline)
+ if cmdlineLen > 0 {
+ // Account for the additional NULL byte added by
+ // BytePtrFromString in kexecFileLoad. The kexec_file_load
+ // syscall expects a NULL-terminated string.
+ cmdlineLen++
+ }
+ return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
index 3ec7a9329..ad2bd2582 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
@@ -257,3 +257,11 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
}
return poll(&fds[0], len(fds), timeout)
}
+
+//sys armSyncFileRange(fd int, flags int, off int64, n int64) (err error) = SYS_ARM_SYNC_FILE_RANGE
+
+func SyncFileRange(fd int, off int64, n int64, flags int) error {
+ // The sync_file_range and arm_sync_file_range syscalls differ only in the
+ // order of their arguments.
+ return armSyncFileRange(fd, flags, off, n)
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
index 646f295ad..fa5a9a6f6 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
@@ -191,12 +191,9 @@ func Dup2(oldfd int, newfd int) (err error) {
return Dup3(oldfd, newfd, 0)
}
-func Pause() (err error) {
- _, _, e1 := Syscall6(SYS_PPOLL, 0, 0, 0, 0, 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
+func Pause() error {
+ _, err := ppoll(nil, 0, nil, nil)
+ return err
}
func Poll(fds []PollFd, timeout int) (n int, err error) {
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
index ad991031c..18541dc57 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
@@ -12,7 +12,6 @@ package unix
//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
//sys Fchown(fd int, uid int, gid int) (err error)
-//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT
//sys Fstatfs(fd int, buf *Statfs_t) (err error)
//sys Ftruncate(fd int, length int64) (err error)
//sysnb Getegid() (egid int)
@@ -148,6 +147,7 @@ type stat_t struct {
}
//sys fstat(fd int, st *stat_t) (err error)
+//sys fstatat(dirfd int, path string, st *stat_t, flags int) (err error) = SYS_NEWFSTATAT
//sys lstat(path string, st *stat_t) (err error)
//sys stat(path string, st *stat_t) (err error)
@@ -158,6 +158,13 @@ func Fstat(fd int, s *Stat_t) (err error) {
return
}
+func Fstatat(dirfd int, path string, s *Stat_t, flags int) (err error) {
+ st := &stat_t{}
+ err = fstatat(dirfd, path, st, flags)
+ fillStat_t(s, st)
+ return
+}
+
func Lstat(path string, s *Stat_t) (err error) {
st := &stat_t{}
err = lstat(path, st)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
index 0e0592482..99e0e999a 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
@@ -124,14 +124,13 @@ func Pipe2(p []int, flags int) (err error) {
return
}
+//sysnb pipe() (p1 int, p2 int, err error)
+
func Pipe(p []int) (err error) {
if len(p) != 2 {
return EINVAL
}
- var pp [2]_C_int
- err = pipe2(&pp, 0)
- p[0] = int(pp[0])
- p[1] = int(pp[1])
+ p[0], p[1], err = pipe()
return
}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
index 8c6720f7f..41451854b 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
@@ -44,7 +44,6 @@ package unix
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
//sys Stat(path string, stat *Stat_t) (err error)
//sys Statfs(path string, buf *Statfs_t) (err error)
-//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) = SYS_SYNC_FILE_RANGE2
//sys Truncate(path string, length int64) (err error)
//sys Ustat(dev int, ubuf *Ustat_t) (err error)
//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
@@ -129,3 +128,24 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
}
return poll(&fds[0], len(fds), timeout)
}
+
+//sys syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2
+
+func SyncFileRange(fd int, off int64, n int64, flags int) error {
+ // The sync_file_range and sync_file_range2 syscalls differ only in the
+ // order of their arguments.
+ return syncFileRange2(fd, flags, off, n)
+}
+
+//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
+
+func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
+ cmdlineLen := len(cmdline)
+ if cmdlineLen > 0 {
+ // Account for the additional NULL byte added by
+ // BytePtrFromString in kexecFileLoad. The kexec_file_load
+ // syscall expects a NULL-terminated string.
+ cmdlineLen++
+ }
+ return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
new file mode 100644
index 000000000..44aa1227a
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
@@ -0,0 +1,209 @@
+// 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.
+
+// +build riscv64,linux
+
+package unix
+
+import "unsafe"
+
+func EpollCreate(size int) (fd int, err error) {
+ if size <= 0 {
+ return -1, EINVAL
+ }
+ return EpollCreate1(0)
+}
+
+//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
+//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
+//sys Fchown(fd int, uid int, gid int) (err error)
+//sys Fstat(fd int, stat *Stat_t) (err error)
+//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
+//sys Fstatfs(fd int, buf *Statfs_t) (err error)
+//sys Ftruncate(fd int, length int64) (err error)
+//sysnb Getegid() (egid int)
+//sysnb Geteuid() (euid int)
+//sysnb Getgid() (gid int)
+//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
+//sysnb Getuid() (uid int)
+//sys Listen(s int, n int) (err error)
+//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
+//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
+//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK
+
+func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
+ var ts *Timespec
+ if timeout != nil {
+ ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}
+ }
+ return Pselect(nfd, r, w, e, ts, nil)
+}
+
+//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
+//sys Setfsgid(gid int) (err error)
+//sys Setfsuid(uid int) (err error)
+//sysnb Setregid(rgid int, egid int) (err error)
+//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
+//sysnb Setresuid(ruid int, euid int, suid int) (err error)
+//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
+//sysnb Setreuid(ruid int, euid int) (err error)
+//sys Shutdown(fd int, how int) (err error)
+//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
+
+func Stat(path string, stat *Stat_t) (err error) {
+ return Fstatat(AT_FDCWD, path, stat, 0)
+}
+
+func Lchown(path string, uid int, gid int) (err error) {
+ return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)
+}
+
+func Lstat(path string, stat *Stat_t) (err error) {
+ return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)
+}
+
+//sys Statfs(path string, buf *Statfs_t) (err error)
+//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
+//sys Truncate(path string, length int64) (err error)
+
+func Ustat(dev int, ubuf *Ustat_t) (err error) {
+ return ENOSYS
+}
+
+//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)
+//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
+//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
+//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
+//sysnb getgroups(n int, list *_Gid_t) (nn int, err error)
+//sysnb setgroups(n int, list *_Gid_t) (err error)
+//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
+//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)
+//sysnb socket(domain int, typ int, proto int) (fd int, err error)
+//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)
+//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
+//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)
+//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)
+//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)
+//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error)
+//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
+//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
+
+//sysnb Gettimeofday(tv *Timeval) (err error)
+
+func setTimespec(sec, nsec int64) Timespec {
+ return Timespec{Sec: sec, Nsec: nsec}
+}
+
+func setTimeval(sec, usec int64) Timeval {
+ return Timeval{Sec: sec, Usec: usec}
+}
+
+func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {
+ if tv == nil {
+ return utimensat(dirfd, path, nil, 0)
+ }
+
+ ts := []Timespec{
+ NsecToTimespec(TimevalToNsec(tv[0])),
+ NsecToTimespec(TimevalToNsec(tv[1])),
+ }
+ return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
+}
+
+func Time(t *Time_t) (Time_t, error) {
+ var tv Timeval
+ err := Gettimeofday(&tv)
+ if err != nil {
+ return 0, err
+ }
+ if t != nil {
+ *t = Time_t(tv.Sec)
+ }
+ return Time_t(tv.Sec), nil
+}
+
+func Utime(path string, buf *Utimbuf) error {
+ tv := []Timeval{
+ {Sec: buf.Actime},
+ {Sec: buf.Modtime},
+ }
+ return Utimes(path, tv)
+}
+
+func utimes(path string, tv *[2]Timeval) (err error) {
+ if tv == nil {
+ return utimensat(AT_FDCWD, path, nil, 0)
+ }
+
+ ts := []Timespec{
+ NsecToTimespec(TimevalToNsec(tv[0])),
+ NsecToTimespec(TimevalToNsec(tv[1])),
+ }
+ return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)
+}
+
+func Pipe(p []int) (err error) {
+ if len(p) != 2 {
+ return EINVAL
+ }
+ var pp [2]_C_int
+ err = pipe2(&pp, 0)
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ return
+}
+
+//sysnb pipe2(p *[2]_C_int, flags int) (err error)
+
+func Pipe2(p []int, flags int) (err error) {
+ if len(p) != 2 {
+ return EINVAL
+ }
+ var pp [2]_C_int
+ err = pipe2(&pp, flags)
+ p[0] = int(pp[0])
+ p[1] = int(pp[1])
+ return
+}
+
+func (r *PtraceRegs) PC() uint64 { return r.Pc }
+
+func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }
+
+func (iov *Iovec) SetLen(length int) {
+ iov.Len = uint64(length)
+}
+
+func (msghdr *Msghdr) SetControllen(length int) {
+ msghdr.Controllen = uint64(length)
+}
+
+func (cmsg *Cmsghdr) SetLen(length int) {
+ cmsg.Len = uint64(length)
+}
+
+func InotifyInit() (fd int, err error) {
+ return InotifyInit1(0)
+}
+
+func Dup2(oldfd int, newfd int) (err error) {
+ return Dup3(oldfd, newfd, 0)
+}
+
+func Pause() error {
+ _, err := ppoll(nil, 0, nil, nil)
+ return err
+}
+
+func Poll(fds []PollFd, timeout int) (n int, err error) {
+ var ts *Timespec
+ if timeout >= 0 {
+ ts = new(Timespec)
+ *ts = NsecToTimespec(int64(timeout) * 1e6)
+ }
+ if len(fds) == 0 {
+ return ppoll(nil, 0, ts, nil)
+ }
+ return ppoll(&fds[0], len(fds), ts, nil)
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
index 6e4ee0cf2..f52f148f9 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
@@ -322,3 +322,16 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
}
return poll(&fds[0], len(fds), timeout)
}
+
+//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)
+
+func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {
+ cmdlineLen := len(cmdline)
+ if cmdlineLen > 0 {
+ // Account for the additional NULL byte added by
+ // BytePtrFromString in kexecFileLoad. The kexec_file_load
+ // syscall expects a NULL-terminated string.
+ cmdlineLen++
+ }
+ return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)
+}
diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go
index 369a2be2d..5240e16e4 100644
--- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go
@@ -13,6 +13,7 @@
package unix
import (
+ "runtime"
"syscall"
"unsafe"
)
@@ -93,6 +94,23 @@ func nametomib(name string) (mib []_C_int, err error) {
return mib, nil
}
+func SysctlClockinfo(name string) (*Clockinfo, error) {
+ mib, err := sysctlmib(name)
+ if err != nil {
+ return nil, err
+ }
+
+ n := uintptr(SizeofClockinfo)
+ var ci Clockinfo
+ if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {
+ return nil, err
+ }
+ if n != SizeofClockinfo {
+ return nil, EIO
+ }
+ return &ci, nil
+}
+
//sysnb pipe() (fd1 int, fd2 int, err error)
func Pipe(p []int) (err error) {
if len(p) != 2 {
@@ -145,11 +163,11 @@ func IoctlSetInt(fd int, req uint, value int) error {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) error {
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
@@ -173,6 +191,13 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
return &value, err
}
+func IoctlGetPtmget(fd int, req uint) (*Ptmget, error) {
+ var value Ptmget
+ err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
+ runtime.KeepAlive(value)
+ return &value, err
+}
+
func Uname(uname *Utsname) error {
mib := []_C_int{CTL_KERN, KERN_OSTYPE}
n := unsafe.Sizeof(uname.Sysname)
@@ -219,6 +244,13 @@ func Uname(uname *Utsname) error {
return nil
}
+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ if raceenabled {
+ raceReleaseMerge(unsafe.Pointer(&ioSync))
+ }
+ return sendfile(outfd, infd, offset, count)
+}
+
/*
* Exposed directly
*/
@@ -233,6 +265,18 @@ func Uname(uname *Utsname) error {
//sys Dup(fd int) (nfd int, err error)
//sys Dup2(from int, to int) (err error)
//sys Exit(code int)
+//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)
+//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)
+//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
+//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)
+//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE
//sys Fchdir(fd int) (err error)
@@ -240,6 +284,7 @@ func Uname(uname *Utsname) error {
//sys Fchmod(fd int, mode uint32) (err error)
//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys Fchown(fd int, uid int, gid int) (err error)
+//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys Flock(fd int, how int) (err error)
//sys Fpathconf(fd int, name int) (val int, err error)
//sys Fstat(fd int, stat *Stat_t) (err error)
@@ -264,19 +309,26 @@ func Uname(uname *Utsname) error {
//sys Kqueue() (fd int, err error)
//sys Lchown(path string, uid int, gid int) (err error)
//sys Link(path string, link string) (err error)
+//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
//sys Listen(s int, backlog int) (err error)
//sys Lstat(path string, stat *Stat_t) (err error)
//sys Mkdir(path string, mode uint32) (err error)
+//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys Mkfifo(path string, mode uint32) (err error)
+//sys Mkfifoat(dirfd int, path string, mode uint32) (err error)
//sys Mknod(path string, mode uint32, dev int) (err error)
+//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys Open(path string, mode int, perm uint32) (fd int, err error)
+//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
//sys Pathconf(path string, name int) (val int, err error)
//sys Pread(fd int, p []byte, offset int64) (n int, err error)
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
//sys read(fd int, p []byte) (n int, err error)
//sys Readlink(path string, buf []byte) (n int, err error)
+//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
//sys Rename(from string, to string) (err error)
+//sys Renameat(fromfd int, from string, tofd int, to string) (err error)
//sys Revoke(path string) (err error)
//sys Rmdir(path string) (err error)
//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
@@ -294,10 +346,12 @@ func Uname(uname *Utsname) error {
//sysnb Setuid(uid int) (err error)
//sys Stat(path string, stat *Stat_t) (err error)
//sys Symlink(path string, link string) (err error)
+//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
//sys Sync() (err error)
//sys Truncate(path string, length int64) (err error)
//sys Umask(newmask int) (oldmask int)
//sys Unlink(path string) (err error)
+//sys Unlinkat(dirfd int, path string, flags int) (err error)
//sys Unmount(path string, flags int) (err error)
//sys write(fd int, p []byte) (n int, err error)
//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go
index 9fc9c06a0..687999549 100644
--- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go
+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go
@@ -43,6 +43,23 @@ func nametomib(name string) (mib []_C_int, err error) {
return nil, EINVAL
}
+func SysctlUvmexp(name string) (*Uvmexp, error) {
+ mib, err := sysctlmib(name)
+ if err != nil {
+ return nil, err
+ }
+
+ n := uintptr(SizeofUvmexp)
+ var u Uvmexp
+ if err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil {
+ return nil, err
+ }
+ if n != SizeofUvmexp {
+ return nil, EIO
+ }
+ return &u, nil
+}
+
//sysnb pipe(p *[2]_C_int) (err error)
func Pipe(p []int) (err error) {
if len(p) != 2 {
@@ -77,6 +94,13 @@ func Getwd() (string, error) {
return string(buf[:n]), nil
}
+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ if raceenabled {
+ raceReleaseMerge(unsafe.Pointer(&ioSync))
+ }
+ return sendfile(outfd, infd, offset, count)
+}
+
// TODO
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
return -1, ENOSYS
@@ -113,11 +137,11 @@ func IoctlSetInt(fd int, req uint, value int) error {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) error {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) error {
+func ioctlSetTermios(fd int, req uint, value *Termios) error {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
@@ -141,6 +165,15 @@ func IoctlGetTermios(fd int, req uint) (*Termios, error) {
return &value, err
}
+//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)
+
+func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
+ if len(fds) == 0 {
+ return ppoll(nil, 0, timeout, sigmask)
+ }
+ return ppoll(&fds[0], len(fds), timeout, sigmask)
+}
+
func Uname(uname *Utsname) error {
mib := []_C_int{CTL_KERN, KERN_OSTYPE}
n := unsafe.Sizeof(uname.Sysname)
@@ -207,6 +240,7 @@ func Uname(uname *Utsname) error {
//sys Fchmod(fd int, mode uint32) (err error)
//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
//sys Fchown(fd int, uid int, gid int) (err error)
+//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
//sys Flock(fd int, how int) (err error)
//sys Fpathconf(fd int, name int) (val int, err error)
//sys Fstat(fd int, stat *Stat_t) (err error)
@@ -233,19 +267,26 @@ func Uname(uname *Utsname) error {
//sys Kqueue() (fd int, err error)
//sys Lchown(path string, uid int, gid int) (err error)
//sys Link(path string, link string) (err error)
+//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error)
//sys Listen(s int, backlog int) (err error)
//sys Lstat(path string, stat *Stat_t) (err error)
//sys Mkdir(path string, mode uint32) (err error)
+//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
//sys Mkfifo(path string, mode uint32) (err error)
+//sys Mkfifoat(dirfd int, path string, mode uint32) (err error)
//sys Mknod(path string, mode uint32, dev int) (err error)
+//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
//sys Open(path string, mode int, perm uint32) (fd int, err error)
+//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
//sys Pathconf(path string, name int) (val int, err error)
//sys Pread(fd int, p []byte, offset int64) (n int, err error)
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
//sys read(fd int, p []byte) (n int, err error)
//sys Readlink(path string, buf []byte) (n int, err error)
+//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
//sys Rename(from string, to string) (err error)
+//sys Renameat(fromfd int, from string, tofd int, to string) (err error)
//sys Revoke(path string) (err error)
//sys Rmdir(path string) (err error)
//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
@@ -268,10 +309,12 @@ func Uname(uname *Utsname) error {
//sys Stat(path string, stat *Stat_t) (err error)
//sys Statfs(path string, stat *Statfs_t) (err error)
//sys Symlink(path string, link string) (err error)
+//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error)
//sys Sync() (err error)
//sys Truncate(path string, length int64) (err error)
//sys Umask(newmask int) (oldmask int)
//sys Unlink(path string) (err error)
+//sys Unlinkat(dirfd int, path string, flags int) (err error)
//sys Unmount(path string, flags int) (err error)
//sys write(fd int, p []byte) (n int, err error)
//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
@@ -294,15 +337,11 @@ func Uname(uname *Utsname) error {
// clock_settime
// closefrom
// execve
-// faccessat
-// fchmodat
-// fchownat
// fcntl
// fhopen
// fhstat
// fhstatfs
// fork
-// fstatat
// futimens
// getfh
// getgid
@@ -316,12 +355,8 @@ func Uname(uname *Utsname) error {
// lfs_markv
// lfs_segclean
// lfs_segwait
-// linkat
// mincore
// minherit
-// mkdirat
-// mkfifoat
-// mknodat
// mount
// mquery
// msgctl
@@ -330,12 +365,10 @@ func Uname(uname *Utsname) error {
// msgsnd
// nfssvc
// nnpfspioctl
-// openat
// preadv
// profil
// pwritev
// quotactl
-// readlinkat
// readv
// reboot
// renameat
@@ -356,13 +389,11 @@ func Uname(uname *Utsname) error {
// sigprocmask
// sigreturn
// sigsuspend
-// symlinkat
// sysarch
// syscall
// threxit
// thrsigdivert
// thrsleep
// thrwakeup
-// unlinkat
// vfork
// writev
diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go
index 994964a91..d62da60d1 100644
--- a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go
@@ -31,3 +31,7 @@ func (msghdr *Msghdr) SetControllen(length int) {
func (cmsg *Cmsghdr) SetLen(length int) {
cmsg.Len = uint32(length)
}
+
+// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
+// of openbsd/386 the syscall is called sysctl instead of __sysctl.
+const SYS___SYSCTL = SYS_SYSCTL
diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go
index 59844f504..5d812aaea 100644
--- a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go
@@ -31,3 +31,7 @@ func (msghdr *Msghdr) SetControllen(length int) {
func (cmsg *Cmsghdr) SetLen(length int) {
cmsg.Len = uint32(length)
}
+
+// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions
+// of openbsd/arm the syscall is called sysctl instead of __sysctl.
+const SYS___SYSCTL = SYS_SYSCTL
diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go
index 820ef77af..e47801275 100644
--- a/vendor/golang.org/x/sys/unix/syscall_solaris.go
+++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go
@@ -112,7 +112,7 @@ func Getsockname(fd int) (sa Sockaddr, err error) {
if err = getsockname(fd, &rsa, &len); err != nil {
return
}
- return anyToSockaddr(&rsa)
+ return anyToSockaddr(fd, &rsa)
}
// GetsockoptString returns the string value of the socket option opt for the
@@ -360,7 +360,7 @@ func Futimes(fd int, tv []Timeval) error {
return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
}
-func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
+func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
switch rsa.Addr.Family {
case AF_UNIX:
pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
@@ -411,7 +411,7 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
if nfd == -1 {
return
}
- sa, err = anyToSockaddr(&rsa)
+ sa, err = anyToSockaddr(fd, &rsa)
if err != nil {
Close(nfd)
nfd = 0
@@ -448,7 +448,7 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
oobn = int(msg.Accrightslen)
// source address is only specified if the socket is unconnected
if rsa.Addr.Family != AF_UNSPEC {
- from, err = anyToSockaddr(&rsa)
+ from, err = anyToSockaddr(fd, &rsa)
}
return
}
@@ -540,11 +540,11 @@ func IoctlSetInt(fd int, req uint, value int) (err error) {
return ioctl(fd, req, uintptr(value))
}
-func IoctlSetWinsize(fd int, req uint, value *Winsize) (err error) {
+func ioctlSetWinsize(fd int, req uint, value *Winsize) (err error) {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
-func IoctlSetTermios(fd int, req uint, value *Termios) (err error) {
+func ioctlSetTermios(fd int, req uint, value *Termios) (err error) {
return ioctl(fd, req, uintptr(unsafe.Pointer(value)))
}
@@ -585,6 +585,13 @@ func Poll(fds []PollFd, timeout int) (n int, err error) {
return poll(&fds[0], len(fds), timeout)
}
+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ if raceenabled {
+ raceReleaseMerge(unsafe.Pointer(&ioSync))
+ }
+ return sendfile(outfd, infd, offset, count)
+}
+
/*
* Exposed directly
*/
diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go
index b835bad0f..33583a22b 100644
--- a/vendor/golang.org/x/sys/unix/syscall_unix.go
+++ b/vendor/golang.org/x/sys/unix/syscall_unix.go
@@ -2,13 +2,12 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
package unix
import (
"bytes"
- "runtime"
"sort"
"sync"
"syscall"
@@ -21,13 +20,6 @@ var (
Stderr = 2
)
-const (
- darwin64Bit = runtime.GOOS == "darwin" && sizeofPtr == 8
- dragonfly64Bit = runtime.GOOS == "dragonfly" && sizeofPtr == 8
- netbsd32Bit = runtime.GOOS == "netbsd" && sizeofPtr == 4
- solaris64Bit = runtime.GOOS == "solaris" && sizeofPtr == 8
-)
-
// Do the interface allocations only once for common
// Errno values.
var (
@@ -219,7 +211,7 @@ func Getpeername(fd int) (sa Sockaddr, err error) {
if err = getpeername(fd, &rsa, &len); err != nil {
return
}
- return anyToSockaddr(&rsa)
+ return anyToSockaddr(fd, &rsa)
}
func GetsockoptByte(fd, level, opt int) (value byte, err error) {
@@ -291,7 +283,7 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
return
}
if rsa.Addr.Family != AF_UNSPEC {
- from, err = anyToSockaddr(&rsa)
+ from, err = anyToSockaddr(fd, &rsa)
}
return
}
@@ -359,13 +351,6 @@ func Socketpair(domain, typ, proto int) (fd [2]int, err error) {
return
}
-func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
- if raceenabled {
- raceReleaseMerge(unsafe.Pointer(&ioSync))
- }
- return sendfile(outfd, infd, offset, count)
-}
-
var ioSync int64
func CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) }
diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go
index 4cb8e8edf..1c70d1b69 100644
--- a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go
+++ b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go
@@ -3,7 +3,7 @@
// license that can be found in the LICENSE file.
// +build darwin dragonfly freebsd linux netbsd openbsd solaris
-// +build !gccgo
+// +build !gccgo,!ppc64le,!ppc64
package unix
diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go
new file mode 100644
index 000000000..86dc765ab
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go
@@ -0,0 +1,24 @@
+// 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.
+
+// +build linux
+// +build ppc64le ppc64
+// +build !gccgo
+
+package unix
+
+import "syscall"
+
+func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
+ return syscall.Syscall(trap, a1, a2, a3)
+}
+func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
+ return syscall.Syscall6(trap, a1, a2, a3, a4, a5, a6)
+}
+func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
+ return syscall.RawSyscall(trap, a1, a2, a3)
+}
+func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
+ return syscall.RawSyscall6(trap, a1, a2, a3, a4, a5, a6)
+}
diff --git a/vendor/golang.org/x/sys/unix/timestruct.go b/vendor/golang.org/x/sys/unix/timestruct.go
index 47b9011ee..4a672f569 100644
--- a/vendor/golang.org/x/sys/unix/timestruct.go
+++ b/vendor/golang.org/x/sys/unix/timestruct.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
package unix
diff --git a/vendor/golang.org/x/sys/unix/xattr_bsd.go b/vendor/golang.org/x/sys/unix/xattr_bsd.go
new file mode 100644
index 000000000..30c1d71f4
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/xattr_bsd.go
@@ -0,0 +1,240 @@
+// 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.
+
+// +build freebsd netbsd
+
+package unix
+
+import (
+ "strings"
+ "unsafe"
+)
+
+// Derive extattr namespace and attribute name
+
+func xattrnamespace(fullattr string) (ns int, attr string, err error) {
+ s := strings.IndexByte(fullattr, '.')
+ if s == -1 {
+ return -1, "", ENOATTR
+ }
+
+ namespace := fullattr[0:s]
+ attr = fullattr[s+1:]
+
+ switch namespace {
+ case "user":
+ return EXTATTR_NAMESPACE_USER, attr, nil
+ case "system":
+ return EXTATTR_NAMESPACE_SYSTEM, attr, nil
+ default:
+ return -1, "", ENOATTR
+ }
+}
+
+func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {
+ if len(dest) > idx {
+ return unsafe.Pointer(&dest[idx])
+ } else {
+ return unsafe.Pointer(_zero)
+ }
+}
+
+// FreeBSD and NetBSD implement their own syscalls to handle extended attributes
+
+func Getxattr(file string, attr string, dest []byte) (sz int, err error) {
+ d := initxattrdest(dest, 0)
+ destsize := len(dest)
+
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return -1, err
+ }
+
+ return ExtattrGetFile(file, nsid, a, uintptr(d), destsize)
+}
+
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ d := initxattrdest(dest, 0)
+ destsize := len(dest)
+
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return -1, err
+ }
+
+ return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)
+}
+
+func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
+ d := initxattrdest(dest, 0)
+ destsize := len(dest)
+
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return -1, err
+ }
+
+ return ExtattrGetLink(link, nsid, a, uintptr(d), destsize)
+}
+
+// flags are unused on FreeBSD
+
+func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
+ var d unsafe.Pointer
+ if len(data) > 0 {
+ d = unsafe.Pointer(&data[0])
+ }
+ datasiz := len(data)
+
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return
+ }
+
+ _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)
+ return
+}
+
+func Setxattr(file string, attr string, data []byte, flags int) (err error) {
+ var d unsafe.Pointer
+ if len(data) > 0 {
+ d = unsafe.Pointer(&data[0])
+ }
+ datasiz := len(data)
+
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return
+ }
+
+ _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)
+ return
+}
+
+func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
+ var d unsafe.Pointer
+ if len(data) > 0 {
+ d = unsafe.Pointer(&data[0])
+ }
+ datasiz := len(data)
+
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return
+ }
+
+ _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)
+ return
+}
+
+func Removexattr(file string, attr string) (err error) {
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return
+ }
+
+ err = ExtattrDeleteFile(file, nsid, a)
+ return
+}
+
+func Fremovexattr(fd int, attr string) (err error) {
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return
+ }
+
+ err = ExtattrDeleteFd(fd, nsid, a)
+ return
+}
+
+func Lremovexattr(link string, attr string) (err error) {
+ nsid, a, err := xattrnamespace(attr)
+ if err != nil {
+ return
+ }
+
+ err = ExtattrDeleteLink(link, nsid, a)
+ return
+}
+
+func Listxattr(file string, dest []byte) (sz int, err error) {
+ d := initxattrdest(dest, 0)
+ destsiz := len(dest)
+
+ // FreeBSD won't allow you to list xattrs from multiple namespaces
+ s := 0
+ for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
+ stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
+
+ /* Errors accessing system attrs are ignored so that
+ * we can implement the Linux-like behavior of omitting errors that
+ * we don't have read permissions on
+ *
+ * Linux will still error if we ask for user attributes on a file that
+ * we don't have read permissions on, so don't ignore those errors
+ */
+ if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
+ continue
+ } else if e != nil {
+ return s, e
+ }
+
+ s += stmp
+ destsiz -= s
+ if destsiz < 0 {
+ destsiz = 0
+ }
+ d = initxattrdest(dest, s)
+ }
+
+ return s, nil
+}
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ d := initxattrdest(dest, 0)
+ destsiz := len(dest)
+
+ s := 0
+ for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
+ stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
+ if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
+ continue
+ } else if e != nil {
+ return s, e
+ }
+
+ s += stmp
+ destsiz -= s
+ if destsiz < 0 {
+ destsiz = 0
+ }
+ d = initxattrdest(dest, s)
+ }
+
+ return s, nil
+}
+
+func Llistxattr(link string, dest []byte) (sz int, err error) {
+ d := initxattrdest(dest, 0)
+ destsiz := len(dest)
+
+ s := 0
+ for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
+ stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
+ if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
+ continue
+ } else if e != nil {
+ return s, e
+ }
+
+ s += stmp
+ destsiz -= s
+ if destsiz < 0 {
+ destsiz = 0
+ }
+ d = initxattrdest(dest, s)
+ }
+
+ return s, nil
+}
diff --git a/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go
new file mode 100644
index 000000000..4b7b96502
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go
@@ -0,0 +1,1372 @@
+// mkerrors.sh -maix32
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build ppc,aix
+
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs -- -maix32 _const.go
+
+package unix
+
+import "syscall"
+
+const (
+ AF_APPLETALK = 0x10
+ AF_BYPASS = 0x19
+ AF_CCITT = 0xa
+ AF_CHAOS = 0x5
+ AF_DATAKIT = 0x9
+ AF_DECnet = 0xc
+ AF_DLI = 0xd
+ AF_ECMA = 0x8
+ AF_HYLINK = 0xf
+ AF_IMPLINK = 0x3
+ AF_INET = 0x2
+ AF_INET6 = 0x18
+ AF_INTF = 0x14
+ AF_ISO = 0x7
+ AF_LAT = 0xe
+ AF_LINK = 0x12
+ AF_LOCAL = 0x1
+ AF_MAX = 0x1e
+ AF_NDD = 0x17
+ AF_NETWARE = 0x16
+ AF_NS = 0x6
+ AF_OSI = 0x7
+ AF_PUP = 0x4
+ AF_RIF = 0x15
+ AF_ROUTE = 0x11
+ AF_SNA = 0xb
+ AF_UNIX = 0x1
+ AF_UNSPEC = 0x0
+ ALTWERASE = 0x400000
+ ARPHRD_802_3 = 0x6
+ ARPHRD_802_5 = 0x6
+ ARPHRD_ETHER = 0x1
+ ARPHRD_FDDI = 0x1
+ B0 = 0x0
+ B110 = 0x3
+ B1200 = 0x9
+ B134 = 0x4
+ B150 = 0x5
+ B1800 = 0xa
+ B19200 = 0xe
+ B200 = 0x6
+ B2400 = 0xb
+ B300 = 0x7
+ B38400 = 0xf
+ B4800 = 0xc
+ B50 = 0x1
+ B600 = 0x8
+ B75 = 0x2
+ B9600 = 0xd
+ BRKINT = 0x2
+ BS0 = 0x0
+ BS1 = 0x1000
+ BSDLY = 0x1000
+ CAP_AACCT = 0x6
+ CAP_ARM_APPLICATION = 0x5
+ CAP_BYPASS_RAC_VMM = 0x3
+ CAP_CLEAR = 0x0
+ CAP_CREDENTIALS = 0x7
+ CAP_EFFECTIVE = 0x1
+ CAP_EWLM_AGENT = 0x4
+ CAP_INHERITABLE = 0x2
+ CAP_MAXIMUM = 0x7
+ CAP_NUMA_ATTACH = 0x2
+ CAP_PERMITTED = 0x3
+ CAP_PROPAGATE = 0x1
+ CAP_PROPOGATE = 0x1
+ CAP_SET = 0x1
+ CBAUD = 0xf
+ CFLUSH = 0xf
+ CIBAUD = 0xf0000
+ CLOCAL = 0x800
+ CLOCK_MONOTONIC = 0xa
+ CLOCK_PROCESS_CPUTIME_ID = 0xb
+ CLOCK_REALTIME = 0x9
+ CLOCK_THREAD_CPUTIME_ID = 0xc
+ CR0 = 0x0
+ CR1 = 0x100
+ CR2 = 0x200
+ CR3 = 0x300
+ CRDLY = 0x300
+ CREAD = 0x80
+ CS5 = 0x0
+ CS6 = 0x10
+ CS7 = 0x20
+ CS8 = 0x30
+ CSIOCGIFCONF = -0x3ff796dc
+ CSIZE = 0x30
+ CSMAP_DIR = "/usr/lib/nls/csmap/"
+ CSTART = '\021'
+ CSTOP = '\023'
+ CSTOPB = 0x40
+ CSUSP = 0x1a
+ ECHO = 0x8
+ ECHOCTL = 0x20000
+ ECHOE = 0x10
+ ECHOK = 0x20
+ ECHOKE = 0x80000
+ ECHONL = 0x40
+ ECHOPRT = 0x40000
+ ECH_ICMPID = 0x2
+ ETHERNET_CSMACD = 0x6
+ EVENP = 0x80
+ EXCONTINUE = 0x0
+ EXDLOK = 0x3
+ EXIO = 0x2
+ EXPGIO = 0x0
+ EXRESUME = 0x2
+ EXRETURN = 0x1
+ EXSIG = 0x4
+ EXTA = 0xe
+ EXTB = 0xf
+ EXTRAP = 0x1
+ EYEC_RTENTRYA = 0x257274656e747241
+ EYEC_RTENTRYF = 0x257274656e747246
+ E_ACC = 0x0
+ FD_CLOEXEC = 0x1
+ FD_SETSIZE = 0xfffe
+ FF0 = 0x0
+ FF1 = 0x2000
+ FFDLY = 0x2000
+ FLUSHBAND = 0x40
+ FLUSHLOW = 0x8
+ FLUSHO = 0x100000
+ FLUSHR = 0x1
+ FLUSHRW = 0x3
+ FLUSHW = 0x2
+ F_CLOSEM = 0xa
+ F_DUP2FD = 0xe
+ F_DUPFD = 0x0
+ F_GETFD = 0x1
+ F_GETFL = 0x3
+ F_GETLK = 0x5
+ F_GETLK64 = 0xb
+ F_GETOWN = 0x8
+ F_LOCK = 0x1
+ F_OK = 0x0
+ F_RDLCK = 0x1
+ F_SETFD = 0x2
+ F_SETFL = 0x4
+ F_SETLK = 0x6
+ F_SETLK64 = 0xc
+ F_SETLKW = 0x7
+ F_SETLKW64 = 0xd
+ F_SETOWN = 0x9
+ F_TEST = 0x3
+ F_TLOCK = 0x2
+ F_TSTLK = 0xf
+ F_ULOCK = 0x0
+ F_UNLCK = 0x3
+ F_WRLCK = 0x2
+ HUPCL = 0x400
+ IBSHIFT = 0x10
+ ICANON = 0x2
+ ICMP6_FILTER = 0x26
+ ICMP6_SEC_SEND_DEL = 0x46
+ ICMP6_SEC_SEND_GET = 0x47
+ ICMP6_SEC_SEND_SET = 0x44
+ ICMP6_SEC_SEND_SET_CGA_ADDR = 0x45
+ ICRNL = 0x100
+ IEXTEN = 0x200000
+ IFA_FIRSTALIAS = 0x2000
+ IFA_ROUTE = 0x1
+ IFF_64BIT = 0x4000000
+ IFF_ALLCAST = 0x20000
+ IFF_ALLMULTI = 0x200
+ IFF_BPF = 0x8000000
+ IFF_BRIDGE = 0x40000
+ IFF_BROADCAST = 0x2
+ IFF_CANTCHANGE = 0x80c52
+ IFF_CHECKSUM_OFFLOAD = 0x10000000
+ IFF_D1 = 0x8000
+ IFF_D2 = 0x4000
+ IFF_D3 = 0x2000
+ IFF_D4 = 0x1000
+ IFF_DEBUG = 0x4
+ IFF_DEVHEALTH = 0x4000
+ IFF_DO_HW_LOOPBACK = 0x10000
+ IFF_GROUP_ROUTING = 0x2000000
+ IFF_IFBUFMGT = 0x800000
+ IFF_LINK0 = 0x100000
+ IFF_LINK1 = 0x200000
+ IFF_LINK2 = 0x400000
+ IFF_LOOPBACK = 0x8
+ IFF_MULTICAST = 0x80000
+ IFF_NOARP = 0x80
+ IFF_NOECHO = 0x800
+ IFF_NOTRAILERS = 0x20
+ IFF_OACTIVE = 0x400
+ IFF_POINTOPOINT = 0x10
+ IFF_PROMISC = 0x100
+ IFF_PSEG = 0x40000000
+ IFF_RUNNING = 0x40
+ IFF_SIMPLEX = 0x800
+ IFF_SNAP = 0x8000
+ IFF_TCP_DISABLE_CKSUM = 0x20000000
+ IFF_TCP_NOCKSUM = 0x1000000
+ IFF_UP = 0x1
+ IFF_VIPA = 0x80000000
+ IFNAMSIZ = 0x10
+ IFO_FLUSH = 0x1
+ IFT_1822 = 0x2
+ IFT_AAL5 = 0x31
+ IFT_ARCNET = 0x23
+ IFT_ARCNETPLUS = 0x24
+ IFT_ATM = 0x25
+ IFT_CEPT = 0x13
+ IFT_CLUSTER = 0x3e
+ IFT_DS3 = 0x1e
+ IFT_EON = 0x19
+ IFT_ETHER = 0x6
+ IFT_FCS = 0x3a
+ IFT_FDDI = 0xf
+ IFT_FRELAY = 0x20
+ IFT_FRELAYDCE = 0x2c
+ IFT_GIFTUNNEL = 0x3c
+ IFT_HDH1822 = 0x3
+ IFT_HF = 0x3d
+ IFT_HIPPI = 0x2f
+ IFT_HSSI = 0x2e
+ IFT_HY = 0xe
+ IFT_IB = 0xc7
+ IFT_ISDNBASIC = 0x14
+ IFT_ISDNPRIMARY = 0x15
+ IFT_ISO88022LLC = 0x29
+ IFT_ISO88023 = 0x7
+ IFT_ISO88024 = 0x8
+ IFT_ISO88025 = 0x9
+ IFT_ISO88026 = 0xa
+ IFT_LAPB = 0x10
+ IFT_LOCALTALK = 0x2a
+ IFT_LOOP = 0x18
+ IFT_MIOX25 = 0x26
+ IFT_MODEM = 0x30
+ IFT_NSIP = 0x1b
+ IFT_OTHER = 0x1
+ IFT_P10 = 0xc
+ IFT_P80 = 0xd
+ IFT_PARA = 0x22
+ IFT_PPP = 0x17
+ IFT_PROPMUX = 0x36
+ IFT_PROPVIRTUAL = 0x35
+ IFT_PTPSERIAL = 0x16
+ IFT_RS232 = 0x21
+ IFT_SDLC = 0x11
+ IFT_SIP = 0x1f
+ IFT_SLIP = 0x1c
+ IFT_SMDSDXI = 0x2b
+ IFT_SMDSICIP = 0x34
+ IFT_SN = 0x38
+ IFT_SONET = 0x27
+ IFT_SONETPATH = 0x32
+ IFT_SONETVT = 0x33
+ IFT_SP = 0x39
+ IFT_STARLAN = 0xb
+ IFT_T1 = 0x12
+ IFT_TUNNEL = 0x3b
+ IFT_ULTRA = 0x1d
+ IFT_V35 = 0x2d
+ IFT_VIPA = 0x37
+ IFT_X25 = 0x5
+ IFT_X25DDN = 0x4
+ IFT_X25PLE = 0x28
+ IFT_XETHER = 0x1a
+ IGNBRK = 0x1
+ IGNCR = 0x80
+ IGNPAR = 0x4
+ IMAXBEL = 0x10000
+ INLCR = 0x40
+ INPCK = 0x10
+ IN_CLASSA_HOST = 0xffffff
+ IN_CLASSA_MAX = 0x80
+ IN_CLASSA_NET = 0xff000000
+ IN_CLASSA_NSHIFT = 0x18
+ IN_CLASSB_HOST = 0xffff
+ IN_CLASSB_MAX = 0x10000
+ IN_CLASSB_NET = 0xffff0000
+ IN_CLASSB_NSHIFT = 0x10
+ IN_CLASSC_HOST = 0xff
+ IN_CLASSC_NET = 0xffffff00
+ IN_CLASSC_NSHIFT = 0x8
+ IN_CLASSD_HOST = 0xfffffff
+ IN_CLASSD_NET = 0xf0000000
+ IN_CLASSD_NSHIFT = 0x1c
+ IN_LOOPBACKNET = 0x7f
+ IN_USE = 0x1
+ IPPROTO_AH = 0x33
+ IPPROTO_BIP = 0x53
+ IPPROTO_DSTOPTS = 0x3c
+ IPPROTO_EGP = 0x8
+ IPPROTO_EON = 0x50
+ IPPROTO_ESP = 0x32
+ IPPROTO_FRAGMENT = 0x2c
+ IPPROTO_GGP = 0x3
+ IPPROTO_GIF = 0x8c
+ IPPROTO_GRE = 0x2f
+ IPPROTO_HOPOPTS = 0x0
+ IPPROTO_ICMP = 0x1
+ IPPROTO_ICMPV6 = 0x3a
+ IPPROTO_IDP = 0x16
+ IPPROTO_IGMP = 0x2
+ IPPROTO_IP = 0x0
+ IPPROTO_IPIP = 0x4
+ IPPROTO_IPV6 = 0x29
+ IPPROTO_LOCAL = 0x3f
+ IPPROTO_MAX = 0x100
+ IPPROTO_MH = 0x87
+ IPPROTO_NONE = 0x3b
+ IPPROTO_PUP = 0xc
+ IPPROTO_QOS = 0x2d
+ IPPROTO_RAW = 0xff
+ IPPROTO_ROUTING = 0x2b
+ IPPROTO_RSVP = 0x2e
+ IPPROTO_SCTP = 0x84
+ IPPROTO_TCP = 0x6
+ IPPROTO_TP = 0x1d
+ IPPROTO_UDP = 0x11
+ IPV6_ADDRFORM = 0x16
+ IPV6_ADDR_PREFERENCES = 0x4a
+ IPV6_ADD_MEMBERSHIP = 0xc
+ IPV6_AIXRAWSOCKET = 0x39
+ IPV6_CHECKSUM = 0x27
+ IPV6_DONTFRAG = 0x2d
+ IPV6_DROP_MEMBERSHIP = 0xd
+ IPV6_DSTOPTS = 0x36
+ IPV6_FLOWINFO_FLOWLABEL = 0xffffff
+ IPV6_FLOWINFO_PRIFLOW = 0xfffffff
+ IPV6_FLOWINFO_PRIORITY = 0xf000000
+ IPV6_FLOWINFO_SRFLAG = 0x10000000
+ IPV6_FLOWINFO_VERSION = 0xf0000000
+ IPV6_HOPLIMIT = 0x28
+ IPV6_HOPOPTS = 0x34
+ IPV6_JOIN_GROUP = 0xc
+ IPV6_LEAVE_GROUP = 0xd
+ IPV6_MIPDSTOPTS = 0x36
+ IPV6_MULTICAST_HOPS = 0xa
+ IPV6_MULTICAST_IF = 0x9
+ IPV6_MULTICAST_LOOP = 0xb
+ IPV6_NEXTHOP = 0x30
+ IPV6_NOPROBE = 0x1c
+ IPV6_PATHMTU = 0x2e
+ IPV6_PKTINFO = 0x21
+ IPV6_PKTOPTIONS = 0x24
+ IPV6_PRIORITY_10 = 0xa000000
+ IPV6_PRIORITY_11 = 0xb000000
+ IPV6_PRIORITY_12 = 0xc000000
+ IPV6_PRIORITY_13 = 0xd000000
+ IPV6_PRIORITY_14 = 0xe000000
+ IPV6_PRIORITY_15 = 0xf000000
+ IPV6_PRIORITY_8 = 0x8000000
+ IPV6_PRIORITY_9 = 0x9000000
+ IPV6_PRIORITY_BULK = 0x4000000
+ IPV6_PRIORITY_CONTROL = 0x7000000
+ IPV6_PRIORITY_FILLER = 0x1000000
+ IPV6_PRIORITY_INTERACTIVE = 0x6000000
+ IPV6_PRIORITY_RESERVED1 = 0x3000000
+ IPV6_PRIORITY_RESERVED2 = 0x5000000
+ IPV6_PRIORITY_UNATTENDED = 0x2000000
+ IPV6_PRIORITY_UNCHARACTERIZED = 0x0
+ IPV6_RECVDSTOPTS = 0x38
+ IPV6_RECVHOPLIMIT = 0x29
+ IPV6_RECVHOPOPTS = 0x35
+ IPV6_RECVHOPS = 0x22
+ IPV6_RECVIF = 0x1e
+ IPV6_RECVPATHMTU = 0x2f
+ IPV6_RECVPKTINFO = 0x23
+ IPV6_RECVRTHDR = 0x33
+ IPV6_RECVSRCRT = 0x1d
+ IPV6_RECVTCLASS = 0x2a
+ IPV6_RTHDR = 0x32
+ IPV6_RTHDRDSTOPTS = 0x37
+ IPV6_RTHDR_TYPE_0 = 0x0
+ IPV6_RTHDR_TYPE_2 = 0x2
+ IPV6_SENDIF = 0x1f
+ IPV6_SRFLAG_LOOSE = 0x0
+ IPV6_SRFLAG_STRICT = 0x10000000
+ IPV6_TCLASS = 0x2b
+ IPV6_TOKEN_LENGTH = 0x40
+ IPV6_UNICAST_HOPS = 0x4
+ IPV6_USE_MIN_MTU = 0x2c
+ IPV6_V6ONLY = 0x25
+ IPV6_VERSION = 0x60000000
+ IP_ADDRFORM = 0x16
+ IP_ADD_MEMBERSHIP = 0xc
+ IP_ADD_SOURCE_MEMBERSHIP = 0x3c
+ IP_BLOCK_SOURCE = 0x3a
+ IP_BROADCAST_IF = 0x10
+ IP_CACHE_LINE_SIZE = 0x80
+ IP_DEFAULT_MULTICAST_LOOP = 0x1
+ IP_DEFAULT_MULTICAST_TTL = 0x1
+ IP_DF = 0x4000
+ IP_DHCPMODE = 0x11
+ IP_DONTFRAG = 0x19
+ IP_DROP_MEMBERSHIP = 0xd
+ IP_DROP_SOURCE_MEMBERSHIP = 0x3d
+ IP_FINDPMTU = 0x1a
+ IP_HDRINCL = 0x2
+ IP_INC_MEMBERSHIPS = 0x14
+ IP_INIT_MEMBERSHIP = 0x14
+ IP_MAXPACKET = 0xffff
+ IP_MF = 0x2000
+ IP_MSS = 0x240
+ IP_MULTICAST_HOPS = 0xa
+ IP_MULTICAST_IF = 0x9
+ IP_MULTICAST_LOOP = 0xb
+ IP_MULTICAST_TTL = 0xa
+ IP_OPT = 0x1b
+ IP_OPTIONS = 0x1
+ IP_PMTUAGE = 0x1b
+ IP_RECVDSTADDR = 0x7
+ IP_RECVIF = 0x14
+ IP_RECVIFINFO = 0xf
+ IP_RECVINTERFACE = 0x20
+ IP_RECVMACHDR = 0xe
+ IP_RECVOPTS = 0x5
+ IP_RECVRETOPTS = 0x6
+ IP_RECVTTL = 0x22
+ IP_RETOPTS = 0x8
+ IP_SOURCE_FILTER = 0x48
+ IP_TOS = 0x3
+ IP_TTL = 0x4
+ IP_UNBLOCK_SOURCE = 0x3b
+ IP_UNICAST_HOPS = 0x4
+ ISIG = 0x1
+ ISTRIP = 0x20
+ IUCLC = 0x800
+ IXANY = 0x1000
+ IXOFF = 0x400
+ IXON = 0x200
+ I_FLUSH = 0x20005305
+ LNOFLSH = 0x8000
+ LOCK_EX = 0x2
+ LOCK_NB = 0x4
+ LOCK_SH = 0x1
+ LOCK_UN = 0x8
+ MADV_DONTNEED = 0x4
+ MADV_NORMAL = 0x0
+ MADV_RANDOM = 0x1
+ MADV_SEQUENTIAL = 0x2
+ MADV_SPACEAVAIL = 0x5
+ MADV_WILLNEED = 0x3
+ MAP_ANON = 0x10
+ MAP_ANONYMOUS = 0x10
+ MAP_FILE = 0x0
+ MAP_FIXED = 0x100
+ MAP_PRIVATE = 0x2
+ MAP_SHARED = 0x1
+ MAP_TYPE = 0xf0
+ MAP_VARIABLE = 0x0
+ MCL_CURRENT = 0x100
+ MCL_FUTURE = 0x200
+ MSG_ANY = 0x4
+ MSG_ARGEXT = 0x400
+ MSG_BAND = 0x2
+ MSG_COMPAT = 0x8000
+ MSG_CTRUNC = 0x20
+ MSG_DONTROUTE = 0x4
+ MSG_EOR = 0x8
+ MSG_HIPRI = 0x1
+ MSG_MAXIOVLEN = 0x10
+ MSG_MPEG2 = 0x80
+ MSG_NONBLOCK = 0x4000
+ MSG_NOSIGNAL = 0x100
+ MSG_OOB = 0x1
+ MSG_PEEK = 0x2
+ MSG_TRUNC = 0x10
+ MSG_WAITALL = 0x40
+ MSG_WAITFORONE = 0x200
+ MS_ASYNC = 0x10
+ MS_EINTR = 0x80
+ MS_INVALIDATE = 0x40
+ MS_PER_SEC = 0x3e8
+ MS_SYNC = 0x20
+ NL0 = 0x0
+ NL1 = 0x4000
+ NL2 = 0x8000
+ NL3 = 0xc000
+ NLDLY = 0x4000
+ NOFLSH = 0x80
+ NOFLUSH = 0x80000000
+ OCRNL = 0x8
+ OFDEL = 0x80
+ OFILL = 0x40
+ OLCUC = 0x2
+ ONLCR = 0x4
+ ONLRET = 0x20
+ ONOCR = 0x10
+ ONOEOT = 0x80000
+ OPOST = 0x1
+ OXTABS = 0x40000
+ O_ACCMODE = 0x23
+ O_APPEND = 0x8
+ O_CIO = 0x80
+ O_CIOR = 0x800000000
+ O_CLOEXEC = 0x800000
+ O_CREAT = 0x100
+ O_DEFER = 0x2000
+ O_DELAY = 0x4000
+ O_DIRECT = 0x8000000
+ O_DIRECTORY = 0x80000
+ O_DSYNC = 0x400000
+ O_EFSOFF = 0x400000000
+ O_EFSON = 0x200000000
+ O_EXCL = 0x400
+ O_EXEC = 0x20
+ O_LARGEFILE = 0x4000000
+ O_NDELAY = 0x8000
+ O_NOCACHE = 0x100000
+ O_NOCTTY = 0x800
+ O_NOFOLLOW = 0x1000000
+ O_NONBLOCK = 0x4
+ O_NONE = 0x3
+ O_NSHARE = 0x10000
+ O_RAW = 0x100000000
+ O_RDONLY = 0x0
+ O_RDWR = 0x2
+ O_RSHARE = 0x1000
+ O_RSYNC = 0x200000
+ O_SEARCH = 0x20
+ O_SNAPSHOT = 0x40
+ O_SYNC = 0x10
+ O_TRUNC = 0x200
+ O_TTY_INIT = 0x0
+ O_WRONLY = 0x1
+ PARENB = 0x100
+ PAREXT = 0x100000
+ PARMRK = 0x8
+ PARODD = 0x200
+ PENDIN = 0x20000000
+ PRIO_PGRP = 0x1
+ PRIO_PROCESS = 0x0
+ PRIO_USER = 0x2
+ PROT_EXEC = 0x4
+ PROT_NONE = 0x0
+ PROT_READ = 0x1
+ PROT_WRITE = 0x2
+ PR_64BIT = 0x20
+ PR_ADDR = 0x2
+ PR_ARGEXT = 0x400
+ PR_ATOMIC = 0x1
+ PR_CONNREQUIRED = 0x4
+ PR_FASTHZ = 0x5
+ PR_INP = 0x40
+ PR_INTRLEVEL = 0x8000
+ PR_MLS = 0x100
+ PR_MLS_1_LABEL = 0x200
+ PR_NOEOR = 0x4000
+ PR_RIGHTS = 0x10
+ PR_SLOWHZ = 0x2
+ PR_WANTRCVD = 0x8
+ RLIMIT_AS = 0x6
+ RLIMIT_CORE = 0x4
+ RLIMIT_CPU = 0x0
+ RLIMIT_DATA = 0x2
+ RLIMIT_FSIZE = 0x1
+ RLIMIT_NOFILE = 0x7
+ RLIMIT_NPROC = 0x9
+ RLIMIT_RSS = 0x5
+ RLIMIT_STACK = 0x3
+ RLIM_INFINITY = 0x7fffffff
+ RTAX_AUTHOR = 0x6
+ RTAX_BRD = 0x7
+ RTAX_DST = 0x0
+ RTAX_GATEWAY = 0x1
+ RTAX_GENMASK = 0x3
+ RTAX_IFA = 0x5
+ RTAX_IFP = 0x4
+ RTAX_MAX = 0x8
+ RTAX_NETMASK = 0x2
+ RTA_AUTHOR = 0x40
+ RTA_BRD = 0x80
+ RTA_DOWNSTREAM = 0x100
+ RTA_DST = 0x1
+ RTA_GATEWAY = 0x2
+ RTA_GENMASK = 0x8
+ RTA_IFA = 0x20
+ RTA_IFP = 0x10
+ RTA_NETMASK = 0x4
+ RTC_IA64 = 0x3
+ RTC_POWER = 0x1
+ RTC_POWER_PC = 0x2
+ RTF_ACTIVE_DGD = 0x1000000
+ RTF_BCE = 0x80000
+ RTF_BLACKHOLE = 0x1000
+ RTF_BROADCAST = 0x400000
+ RTF_BUL = 0x2000
+ RTF_CLONE = 0x10000
+ RTF_CLONED = 0x20000
+ RTF_CLONING = 0x100
+ RTF_DONE = 0x40
+ RTF_DYNAMIC = 0x10
+ RTF_FREE_IN_PROG = 0x4000000
+ RTF_GATEWAY = 0x2
+ RTF_HOST = 0x4
+ RTF_LLINFO = 0x400
+ RTF_LOCAL = 0x200000
+ RTF_MASK = 0x80
+ RTF_MODIFIED = 0x20
+ RTF_MULTICAST = 0x800000
+ RTF_PERMANENT6 = 0x8000000
+ RTF_PINNED = 0x100000
+ RTF_PROTO1 = 0x8000
+ RTF_PROTO2 = 0x4000
+ RTF_PROTO3 = 0x40000
+ RTF_REJECT = 0x8
+ RTF_SMALLMTU = 0x40000
+ RTF_STATIC = 0x800
+ RTF_STOPSRCH = 0x2000000
+ RTF_UNREACHABLE = 0x10000000
+ RTF_UP = 0x1
+ RTF_XRESOLVE = 0x200
+ RTM_ADD = 0x1
+ RTM_CHANGE = 0x3
+ RTM_DELADDR = 0xd
+ RTM_DELETE = 0x2
+ RTM_EXPIRE = 0xf
+ RTM_GET = 0x4
+ RTM_GETNEXT = 0x11
+ RTM_IFINFO = 0xe
+ RTM_LOCK = 0x8
+ RTM_LOSING = 0x5
+ RTM_MISS = 0x7
+ RTM_NEWADDR = 0xc
+ RTM_OLDADD = 0x9
+ RTM_OLDDEL = 0xa
+ RTM_REDIRECT = 0x6
+ RTM_RESOLVE = 0xb
+ RTM_RTLOST = 0x10
+ RTM_RTTUNIT = 0xf4240
+ RTM_SAMEADDR = 0x12
+ RTM_SET = 0x13
+ RTM_VERSION = 0x2
+ RTM_VERSION_GR = 0x4
+ RTM_VERSION_GR_COMPAT = 0x3
+ RTM_VERSION_POLICY = 0x5
+ RTM_VERSION_POLICY_EXT = 0x6
+ RTM_VERSION_POLICY_PRFN = 0x7
+ RTV_EXPIRE = 0x4
+ RTV_HOPCOUNT = 0x2
+ RTV_MTU = 0x1
+ RTV_RPIPE = 0x8
+ RTV_RTT = 0x40
+ RTV_RTTVAR = 0x80
+ RTV_SPIPE = 0x10
+ RTV_SSTHRESH = 0x20
+ RUSAGE_CHILDREN = -0x1
+ RUSAGE_SELF = 0x0
+ RUSAGE_THREAD = 0x1
+ SCM_RIGHTS = 0x1
+ SHUT_RD = 0x0
+ SHUT_RDWR = 0x2
+ SHUT_WR = 0x1
+ SIGMAX64 = 0xff
+ SIGQUEUE_MAX = 0x20
+ SIOCADDIFVIPA = 0x20006942
+ SIOCADDMTU = -0x7ffb9690
+ SIOCADDMULTI = -0x7fdf96cf
+ SIOCADDNETID = -0x7fd796a9
+ SIOCADDRT = -0x7fcf8df6
+ SIOCAIFADDR = -0x7fbf96e6
+ SIOCATMARK = 0x40047307
+ SIOCDARP = -0x7fb396e0
+ SIOCDELIFVIPA = 0x20006943
+ SIOCDELMTU = -0x7ffb968f
+ SIOCDELMULTI = -0x7fdf96ce
+ SIOCDELPMTU = -0x7fd78ff6
+ SIOCDELRT = -0x7fcf8df5
+ SIOCDIFADDR = -0x7fd796e7
+ SIOCDNETOPT = -0x3ffe9680
+ SIOCDX25XLATE = -0x7fd7969b
+ SIOCFIFADDR = -0x7fdf966d
+ SIOCGARP = -0x3fb396da
+ SIOCGETMTUS = 0x2000696f
+ SIOCGETSGCNT = -0x3feb8acc
+ SIOCGETVIFCNT = -0x3feb8acd
+ SIOCGHIWAT = 0x40047301
+ SIOCGIFADDR = -0x3fd796df
+ SIOCGIFADDRS = 0x2000698c
+ SIOCGIFBAUDRATE = -0x3fd79693
+ SIOCGIFBRDADDR = -0x3fd796dd
+ SIOCGIFCONF = -0x3ff796bb
+ SIOCGIFCONFGLOB = -0x3ff79670
+ SIOCGIFDSTADDR = -0x3fd796de
+ SIOCGIFFLAGS = -0x3fd796ef
+ SIOCGIFGIDLIST = 0x20006968
+ SIOCGIFHWADDR = -0x3fab966b
+ SIOCGIFMETRIC = -0x3fd796e9
+ SIOCGIFMTU = -0x3fd796aa
+ SIOCGIFNETMASK = -0x3fd796db
+ SIOCGIFOPTIONS = -0x3fd796d6
+ SIOCGISNO = -0x3fd79695
+ SIOCGLOADF = -0x3ffb967e
+ SIOCGLOWAT = 0x40047303
+ SIOCGNETOPT = -0x3ffe96a5
+ SIOCGNETOPT1 = -0x3fdf967f
+ SIOCGNMTUS = 0x2000696e
+ SIOCGPGRP = 0x40047309
+ SIOCGSIZIFCONF = 0x4004696a
+ SIOCGSRCFILTER = -0x3fe796cb
+ SIOCGTUNEPHASE = -0x3ffb9676
+ SIOCGX25XLATE = -0x3fd7969c
+ SIOCIFATTACH = -0x7fdf9699
+ SIOCIFDETACH = -0x7fdf969a
+ SIOCIFGETPKEY = -0x7fdf969b
+ SIOCIF_ATM_DARP = -0x7fdf9683
+ SIOCIF_ATM_DUMPARP = -0x7fdf9685
+ SIOCIF_ATM_GARP = -0x7fdf9682
+ SIOCIF_ATM_IDLE = -0x7fdf9686
+ SIOCIF_ATM_SARP = -0x7fdf9681
+ SIOCIF_ATM_SNMPARP = -0x7fdf9687
+ SIOCIF_ATM_SVC = -0x7fdf9684
+ SIOCIF_ATM_UBR = -0x7fdf9688
+ SIOCIF_DEVHEALTH = -0x7ffb966c
+ SIOCIF_IB_ARP_INCOMP = -0x7fdf9677
+ SIOCIF_IB_ARP_TIMER = -0x7fdf9678
+ SIOCIF_IB_CLEAR_PINFO = -0x3fdf966f
+ SIOCIF_IB_DEL_ARP = -0x7fdf967f
+ SIOCIF_IB_DEL_PINFO = -0x3fdf9670
+ SIOCIF_IB_DUMP_ARP = -0x7fdf9680
+ SIOCIF_IB_GET_ARP = -0x7fdf967e
+ SIOCIF_IB_GET_INFO = -0x3f879675
+ SIOCIF_IB_GET_STATS = -0x3f879672
+ SIOCIF_IB_NOTIFY_ADDR_REM = -0x3f87966a
+ SIOCIF_IB_RESET_STATS = -0x3f879671
+ SIOCIF_IB_RESIZE_CQ = -0x7fdf9679
+ SIOCIF_IB_SET_ARP = -0x7fdf967d
+ SIOCIF_IB_SET_PKEY = -0x7fdf967c
+ SIOCIF_IB_SET_PORT = -0x7fdf967b
+ SIOCIF_IB_SET_QKEY = -0x7fdf9676
+ SIOCIF_IB_SET_QSIZE = -0x7fdf967a
+ SIOCLISTIFVIPA = 0x20006944
+ SIOCSARP = -0x7fb396e2
+ SIOCSHIWAT = 0x80047300
+ SIOCSIFADDR = -0x7fd796f4
+ SIOCSIFADDRORI = -0x7fdb9673
+ SIOCSIFBRDADDR = -0x7fd796ed
+ SIOCSIFDSTADDR = -0x7fd796f2
+ SIOCSIFFLAGS = -0x7fd796f0
+ SIOCSIFGIDLIST = 0x20006969
+ SIOCSIFMETRIC = -0x7fd796e8
+ SIOCSIFMTU = -0x7fd796a8
+ SIOCSIFNETDUMP = -0x7fd796e4
+ SIOCSIFNETMASK = -0x7fd796ea
+ SIOCSIFOPTIONS = -0x7fd796d7
+ SIOCSIFSUBCHAN = -0x7fd796e5
+ SIOCSISNO = -0x7fd79694
+ SIOCSLOADF = -0x3ffb967d
+ SIOCSLOWAT = 0x80047302
+ SIOCSNETOPT = -0x7ffe96a6
+ SIOCSPGRP = 0x80047308
+ SIOCSX25XLATE = -0x7fd7969d
+ SOCK_CONN_DGRAM = 0x6
+ SOCK_DGRAM = 0x2
+ SOCK_RAW = 0x3
+ SOCK_RDM = 0x4
+ SOCK_SEQPACKET = 0x5
+ SOCK_STREAM = 0x1
+ SOL_SOCKET = 0xffff
+ SOMAXCONN = 0x400
+ SO_ACCEPTCONN = 0x2
+ SO_AUDIT = 0x8000
+ SO_BROADCAST = 0x20
+ SO_CKSUMRECV = 0x800
+ SO_DEBUG = 0x1
+ SO_DONTROUTE = 0x10
+ SO_ERROR = 0x1007
+ SO_KEEPALIVE = 0x8
+ SO_KERNACCEPT = 0x2000
+ SO_LINGER = 0x80
+ SO_NOMULTIPATH = 0x4000
+ SO_NOREUSEADDR = 0x1000
+ SO_OOBINLINE = 0x100
+ SO_PEERID = 0x1009
+ SO_RCVBUF = 0x1002
+ SO_RCVLOWAT = 0x1004
+ SO_RCVTIMEO = 0x1006
+ SO_REUSEADDR = 0x4
+ SO_REUSEPORT = 0x200
+ SO_SNDBUF = 0x1001
+ SO_SNDLOWAT = 0x1003
+ SO_SNDTIMEO = 0x1005
+ SO_TIMESTAMPNS = 0x100a
+ SO_TYPE = 0x1008
+ SO_USELOOPBACK = 0x40
+ SO_USE_IFBUFS = 0x400
+ S_BANDURG = 0x400
+ S_EMODFMT = 0x3c000000
+ S_ENFMT = 0x400
+ S_ERROR = 0x100
+ S_HANGUP = 0x200
+ S_HIPRI = 0x2
+ S_ICRYPTO = 0x80000
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFJOURNAL = 0x10000
+ S_IFLNK = 0xa000
+ S_IFMPX = 0x2200
+ S_IFMT = 0xf000
+ S_IFPDIR = 0x4000000
+ S_IFPSDIR = 0x8000000
+ S_IFPSSDIR = 0xc000000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFSYSEA = 0x30000000
+ S_INPUT = 0x1
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_ITCB = 0x1000000
+ S_ITP = 0x800000
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXACL = 0x2000000
+ S_IXATTR = 0x40000
+ S_IXGRP = 0x8
+ S_IXINTERFACE = 0x100000
+ S_IXMOD = 0x40000000
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
+ S_MSG = 0x8
+ S_OUTPUT = 0x4
+ S_RDBAND = 0x20
+ S_RDNORM = 0x10
+ S_RESERVED1 = 0x20000
+ S_RESERVED2 = 0x200000
+ S_RESERVED3 = 0x400000
+ S_RESERVED4 = 0x80000000
+ S_RESFMT1 = 0x10000000
+ S_RESFMT10 = 0x34000000
+ S_RESFMT11 = 0x38000000
+ S_RESFMT12 = 0x3c000000
+ S_RESFMT2 = 0x14000000
+ S_RESFMT3 = 0x18000000
+ S_RESFMT4 = 0x1c000000
+ S_RESFMT5 = 0x20000000
+ S_RESFMT6 = 0x24000000
+ S_RESFMT7 = 0x28000000
+ S_RESFMT8 = 0x2c000000
+ S_WRBAND = 0x80
+ S_WRNORM = 0x40
+ TAB0 = 0x0
+ TAB1 = 0x400
+ TAB2 = 0x800
+ TAB3 = 0xc00
+ TABDLY = 0xc00
+ TCFLSH = 0x540c
+ TCGETA = 0x5405
+ TCGETS = 0x5401
+ TCIFLUSH = 0x0
+ TCIOFF = 0x2
+ TCIOFLUSH = 0x2
+ TCION = 0x3
+ TCOFLUSH = 0x1
+ TCOOFF = 0x0
+ TCOON = 0x1
+ TCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800
+ TCP_ACLADD = 0x23
+ TCP_ACLBIND = 0x26
+ TCP_ACLCLEAR = 0x22
+ TCP_ACLDEL = 0x24
+ TCP_ACLDENY = 0x8
+ TCP_ACLFLUSH = 0x21
+ TCP_ACLGID = 0x1
+ TCP_ACLLS = 0x25
+ TCP_ACLSUBNET = 0x4
+ TCP_ACLUID = 0x2
+ TCP_CWND_DF = 0x16
+ TCP_CWND_IF = 0x15
+ TCP_DELAY_ACK_FIN = 0x2
+ TCP_DELAY_ACK_SYN = 0x1
+ TCP_FASTNAME = 0x101080a
+ TCP_KEEPCNT = 0x13
+ TCP_KEEPIDLE = 0x11
+ TCP_KEEPINTVL = 0x12
+ TCP_LSPRIV = 0x29
+ TCP_LUID = 0x20
+ TCP_MAXBURST = 0x8
+ TCP_MAXDF = 0x64
+ TCP_MAXIF = 0x64
+ TCP_MAXSEG = 0x2
+ TCP_MAXWIN = 0xffff
+ TCP_MAXWINDOWSCALE = 0xe
+ TCP_MAX_SACK = 0x4
+ TCP_MSS = 0x5b4
+ TCP_NODELAY = 0x1
+ TCP_NODELAYACK = 0x14
+ TCP_NOREDUCE_CWND_EXIT_FRXMT = 0x19
+ TCP_NOREDUCE_CWND_IN_FRXMT = 0x18
+ TCP_NOTENTER_SSTART = 0x17
+ TCP_OPT = 0x19
+ TCP_RFC1323 = 0x4
+ TCP_SETPRIV = 0x27
+ TCP_STDURG = 0x10
+ TCP_TIMESTAMP_OPTLEN = 0xc
+ TCP_UNSETPRIV = 0x28
+ TCSAFLUSH = 0x2
+ TCSBRK = 0x5409
+ TCSETA = 0x5406
+ TCSETAF = 0x5408
+ TCSETAW = 0x5407
+ TCSETS = 0x5402
+ TCSETSF = 0x5404
+ TCSETSW = 0x5403
+ TCXONC = 0x540b
+ TIOC = 0x5400
+ TIOCCBRK = 0x2000747a
+ TIOCCDTR = 0x20007478
+ TIOCCONS = 0x80047462
+ TIOCEXCL = 0x2000740d
+ TIOCFLUSH = 0x80047410
+ TIOCGETC = 0x40067412
+ TIOCGETD = 0x40047400
+ TIOCGETP = 0x40067408
+ TIOCGLTC = 0x40067474
+ TIOCGPGRP = 0x40047477
+ TIOCGSID = 0x40047448
+ TIOCGSIZE = 0x40087468
+ TIOCGWINSZ = 0x40087468
+ TIOCHPCL = 0x20007402
+ TIOCLBIC = 0x8004747e
+ TIOCLBIS = 0x8004747f
+ TIOCLGET = 0x4004747c
+ TIOCLSET = 0x8004747d
+ TIOCMBIC = 0x8004746b
+ TIOCMBIS = 0x8004746c
+ TIOCMGET = 0x4004746a
+ TIOCMIWAIT = 0x80047464
+ TIOCMODG = 0x40047403
+ TIOCMODS = 0x80047404
+ TIOCMSET = 0x8004746d
+ TIOCM_CAR = 0x40
+ TIOCM_CD = 0x40
+ TIOCM_CTS = 0x20
+ TIOCM_DSR = 0x100
+ TIOCM_DTR = 0x2
+ TIOCM_LE = 0x1
+ TIOCM_RI = 0x80
+ TIOCM_RNG = 0x80
+ TIOCM_RTS = 0x4
+ TIOCM_SR = 0x10
+ TIOCM_ST = 0x8
+ TIOCNOTTY = 0x20007471
+ TIOCNXCL = 0x2000740e
+ TIOCOUTQ = 0x40047473
+ TIOCPKT = 0x80047470
+ TIOCPKT_DATA = 0x0
+ TIOCPKT_DOSTOP = 0x20
+ TIOCPKT_FLUSHREAD = 0x1
+ TIOCPKT_FLUSHWRITE = 0x2
+ TIOCPKT_NOSTOP = 0x10
+ TIOCPKT_START = 0x8
+ TIOCPKT_STOP = 0x4
+ TIOCREMOTE = 0x80047469
+ TIOCSBRK = 0x2000747b
+ TIOCSDTR = 0x20007479
+ TIOCSETC = 0x80067411
+ TIOCSETD = 0x80047401
+ TIOCSETN = 0x8006740a
+ TIOCSETP = 0x80067409
+ TIOCSLTC = 0x80067475
+ TIOCSPGRP = 0x80047476
+ TIOCSSIZE = 0x80087467
+ TIOCSTART = 0x2000746e
+ TIOCSTI = 0x80017472
+ TIOCSTOP = 0x2000746f
+ TIOCSWINSZ = 0x80087467
+ TIOCUCNTL = 0x80047466
+ TOSTOP = 0x10000
+ UTIME_NOW = -0x2
+ UTIME_OMIT = -0x3
+ VDISCRD = 0xc
+ VDSUSP = 0xa
+ VEOF = 0x4
+ VEOL = 0x5
+ VEOL2 = 0x6
+ VERASE = 0x2
+ VINTR = 0x0
+ VKILL = 0x3
+ VLNEXT = 0xe
+ VMIN = 0x4
+ VQUIT = 0x1
+ VREPRINT = 0xb
+ VSTART = 0x7
+ VSTOP = 0x8
+ VSTRT = 0x7
+ VSUSP = 0x9
+ VT0 = 0x0
+ VT1 = 0x8000
+ VTDELAY = 0x2000
+ VTDLY = 0x8000
+ VTIME = 0x5
+ VWERSE = 0xd
+ WPARSTART = 0x1
+ WPARSTOP = 0x2
+ WPARTTYNAME = "Global"
+ XCASE = 0x4
+ XTABS = 0xc00
+ _FDATAFLUSH = 0x2000000000
+)
+
+// Errors
+const (
+ E2BIG = syscall.Errno(0x7)
+ EACCES = syscall.Errno(0xd)
+ EADDRINUSE = syscall.Errno(0x43)
+ EADDRNOTAVAIL = syscall.Errno(0x44)
+ EAFNOSUPPORT = syscall.Errno(0x42)
+ EAGAIN = syscall.Errno(0xb)
+ EALREADY = syscall.Errno(0x38)
+ EBADF = syscall.Errno(0x9)
+ EBADMSG = syscall.Errno(0x78)
+ EBUSY = syscall.Errno(0x10)
+ ECANCELED = syscall.Errno(0x75)
+ ECHILD = syscall.Errno(0xa)
+ ECHRNG = syscall.Errno(0x25)
+ ECLONEME = syscall.Errno(0x52)
+ ECONNABORTED = syscall.Errno(0x48)
+ ECONNREFUSED = syscall.Errno(0x4f)
+ ECONNRESET = syscall.Errno(0x49)
+ ECORRUPT = syscall.Errno(0x59)
+ EDEADLK = syscall.Errno(0x2d)
+ EDESTADDREQ = syscall.Errno(0x3a)
+ EDESTADDRREQ = syscall.Errno(0x3a)
+ EDIST = syscall.Errno(0x35)
+ EDOM = syscall.Errno(0x21)
+ EDQUOT = syscall.Errno(0x58)
+ EEXIST = syscall.Errno(0x11)
+ EFAULT = syscall.Errno(0xe)
+ EFBIG = syscall.Errno(0x1b)
+ EFORMAT = syscall.Errno(0x30)
+ EHOSTDOWN = syscall.Errno(0x50)
+ EHOSTUNREACH = syscall.Errno(0x51)
+ EIDRM = syscall.Errno(0x24)
+ EILSEQ = syscall.Errno(0x74)
+ EINPROGRESS = syscall.Errno(0x37)
+ EINTR = syscall.Errno(0x4)
+ EINVAL = syscall.Errno(0x16)
+ EIO = syscall.Errno(0x5)
+ EISCONN = syscall.Errno(0x4b)
+ EISDIR = syscall.Errno(0x15)
+ EL2HLT = syscall.Errno(0x2c)
+ EL2NSYNC = syscall.Errno(0x26)
+ EL3HLT = syscall.Errno(0x27)
+ EL3RST = syscall.Errno(0x28)
+ ELNRNG = syscall.Errno(0x29)
+ ELOOP = syscall.Errno(0x55)
+ EMEDIA = syscall.Errno(0x6e)
+ EMFILE = syscall.Errno(0x18)
+ EMLINK = syscall.Errno(0x1f)
+ EMSGSIZE = syscall.Errno(0x3b)
+ EMULTIHOP = syscall.Errno(0x7d)
+ ENAMETOOLONG = syscall.Errno(0x56)
+ ENETDOWN = syscall.Errno(0x45)
+ ENETRESET = syscall.Errno(0x47)
+ ENETUNREACH = syscall.Errno(0x46)
+ ENFILE = syscall.Errno(0x17)
+ ENOATTR = syscall.Errno(0x70)
+ ENOBUFS = syscall.Errno(0x4a)
+ ENOCONNECT = syscall.Errno(0x32)
+ ENOCSI = syscall.Errno(0x2b)
+ ENODATA = syscall.Errno(0x7a)
+ ENODEV = syscall.Errno(0x13)
+ ENOENT = syscall.Errno(0x2)
+ ENOEXEC = syscall.Errno(0x8)
+ ENOLCK = syscall.Errno(0x31)
+ ENOLINK = syscall.Errno(0x7e)
+ ENOMEM = syscall.Errno(0xc)
+ ENOMSG = syscall.Errno(0x23)
+ ENOPROTOOPT = syscall.Errno(0x3d)
+ ENOSPC = syscall.Errno(0x1c)
+ ENOSR = syscall.Errno(0x76)
+ ENOSTR = syscall.Errno(0x7b)
+ ENOSYS = syscall.Errno(0x6d)
+ ENOTBLK = syscall.Errno(0xf)
+ ENOTCONN = syscall.Errno(0x4c)
+ ENOTDIR = syscall.Errno(0x14)
+ ENOTEMPTY = syscall.Errno(0x11)
+ ENOTREADY = syscall.Errno(0x2e)
+ ENOTRECOVERABLE = syscall.Errno(0x5e)
+ ENOTRUST = syscall.Errno(0x72)
+ ENOTSOCK = syscall.Errno(0x39)
+ ENOTSUP = syscall.Errno(0x7c)
+ ENOTTY = syscall.Errno(0x19)
+ ENXIO = syscall.Errno(0x6)
+ EOPNOTSUPP = syscall.Errno(0x40)
+ EOVERFLOW = syscall.Errno(0x7f)
+ EOWNERDEAD = syscall.Errno(0x5f)
+ EPERM = syscall.Errno(0x1)
+ EPFNOSUPPORT = syscall.Errno(0x41)
+ EPIPE = syscall.Errno(0x20)
+ EPROCLIM = syscall.Errno(0x53)
+ EPROTO = syscall.Errno(0x79)
+ EPROTONOSUPPORT = syscall.Errno(0x3e)
+ EPROTOTYPE = syscall.Errno(0x3c)
+ ERANGE = syscall.Errno(0x22)
+ EREMOTE = syscall.Errno(0x5d)
+ ERESTART = syscall.Errno(0x52)
+ EROFS = syscall.Errno(0x1e)
+ ESAD = syscall.Errno(0x71)
+ ESHUTDOWN = syscall.Errno(0x4d)
+ ESOCKTNOSUPPORT = syscall.Errno(0x3f)
+ ESOFT = syscall.Errno(0x6f)
+ ESPIPE = syscall.Errno(0x1d)
+ ESRCH = syscall.Errno(0x3)
+ ESTALE = syscall.Errno(0x34)
+ ESYSERROR = syscall.Errno(0x5a)
+ ETIME = syscall.Errno(0x77)
+ ETIMEDOUT = syscall.Errno(0x4e)
+ ETOOMANYREFS = syscall.Errno(0x73)
+ ETXTBSY = syscall.Errno(0x1a)
+ EUNATCH = syscall.Errno(0x2a)
+ EUSERS = syscall.Errno(0x54)
+ EWOULDBLOCK = syscall.Errno(0xb)
+ EWRPROTECT = syscall.Errno(0x2f)
+ EXDEV = syscall.Errno(0x12)
+)
+
+// Signals
+const (
+ SIGABRT = syscall.Signal(0x6)
+ SIGAIO = syscall.Signal(0x17)
+ SIGALRM = syscall.Signal(0xe)
+ SIGALRM1 = syscall.Signal(0x26)
+ SIGBUS = syscall.Signal(0xa)
+ SIGCAPI = syscall.Signal(0x31)
+ SIGCHLD = syscall.Signal(0x14)
+ SIGCLD = syscall.Signal(0x14)
+ SIGCONT = syscall.Signal(0x13)
+ SIGCPUFAIL = syscall.Signal(0x3b)
+ SIGDANGER = syscall.Signal(0x21)
+ SIGEMT = syscall.Signal(0x7)
+ SIGFPE = syscall.Signal(0x8)
+ SIGGRANT = syscall.Signal(0x3c)
+ SIGHUP = syscall.Signal(0x1)
+ SIGILL = syscall.Signal(0x4)
+ SIGINT = syscall.Signal(0x2)
+ SIGIO = syscall.Signal(0x17)
+ SIGIOINT = syscall.Signal(0x10)
+ SIGIOT = syscall.Signal(0x6)
+ SIGKAP = syscall.Signal(0x3c)
+ SIGKILL = syscall.Signal(0x9)
+ SIGLOST = syscall.Signal(0x6)
+ SIGMAX = syscall.Signal(0x3f)
+ SIGMAX32 = syscall.Signal(0x3f)
+ SIGMIGRATE = syscall.Signal(0x23)
+ SIGMSG = syscall.Signal(0x1b)
+ SIGPIPE = syscall.Signal(0xd)
+ SIGPOLL = syscall.Signal(0x17)
+ SIGPRE = syscall.Signal(0x24)
+ SIGPROF = syscall.Signal(0x20)
+ SIGPTY = syscall.Signal(0x17)
+ SIGPWR = syscall.Signal(0x1d)
+ SIGQUIT = syscall.Signal(0x3)
+ SIGRECONFIG = syscall.Signal(0x3a)
+ SIGRETRACT = syscall.Signal(0x3d)
+ SIGSAK = syscall.Signal(0x3f)
+ SIGSEGV = syscall.Signal(0xb)
+ SIGSOUND = syscall.Signal(0x3e)
+ SIGSTOP = syscall.Signal(0x11)
+ SIGSYS = syscall.Signal(0xc)
+ SIGSYSERROR = syscall.Signal(0x30)
+ SIGTALRM = syscall.Signal(0x26)
+ SIGTERM = syscall.Signal(0xf)
+ SIGTRAP = syscall.Signal(0x5)
+ SIGTSTP = syscall.Signal(0x12)
+ SIGTTIN = syscall.Signal(0x15)
+ SIGTTOU = syscall.Signal(0x16)
+ SIGURG = syscall.Signal(0x10)
+ SIGUSR1 = syscall.Signal(0x1e)
+ SIGUSR2 = syscall.Signal(0x1f)
+ SIGVIRT = syscall.Signal(0x25)
+ SIGVTALRM = syscall.Signal(0x22)
+ SIGWAITING = syscall.Signal(0x27)
+ SIGWINCH = syscall.Signal(0x1c)
+ SIGXCPU = syscall.Signal(0x18)
+ SIGXFSZ = syscall.Signal(0x19)
+)
+
+// Error table
+var errorList = [...]struct {
+ num syscall.Errno
+ name string
+ desc string
+}{
+ {1, "EPERM", "not owner"},
+ {2, "ENOENT", "no such file or directory"},
+ {3, "ESRCH", "no such process"},
+ {4, "EINTR", "interrupted system call"},
+ {5, "EIO", "I/O error"},
+ {6, "ENXIO", "no such device or address"},
+ {7, "E2BIG", "arg list too long"},
+ {8, "ENOEXEC", "exec format error"},
+ {9, "EBADF", "bad file number"},
+ {10, "ECHILD", "no child processes"},
+ {11, "EWOULDBLOCK", "resource temporarily unavailable"},
+ {12, "ENOMEM", "not enough space"},
+ {13, "EACCES", "permission denied"},
+ {14, "EFAULT", "bad address"},
+ {15, "ENOTBLK", "block device required"},
+ {16, "EBUSY", "device busy"},
+ {17, "ENOTEMPTY", "file exists"},
+ {18, "EXDEV", "cross-device link"},
+ {19, "ENODEV", "no such device"},
+ {20, "ENOTDIR", "not a directory"},
+ {21, "EISDIR", "is a directory"},
+ {22, "EINVAL", "invalid argument"},
+ {23, "ENFILE", "file table overflow"},
+ {24, "EMFILE", "too many open files"},
+ {25, "ENOTTY", "not a typewriter"},
+ {26, "ETXTBSY", "text file busy"},
+ {27, "EFBIG", "file too large"},
+ {28, "ENOSPC", "no space left on device"},
+ {29, "ESPIPE", "illegal seek"},
+ {30, "EROFS", "read-only file system"},
+ {31, "EMLINK", "too many links"},
+ {32, "EPIPE", "broken pipe"},
+ {33, "EDOM", "argument out of domain"},
+ {34, "ERANGE", "result too large"},
+ {35, "ENOMSG", "no message of desired type"},
+ {36, "EIDRM", "identifier removed"},
+ {37, "ECHRNG", "channel number out of range"},
+ {38, "EL2NSYNC", "level 2 not synchronized"},
+ {39, "EL3HLT", "level 3 halted"},
+ {40, "EL3RST", "level 3 reset"},
+ {41, "ELNRNG", "link number out of range"},
+ {42, "EUNATCH", "protocol driver not attached"},
+ {43, "ENOCSI", "no CSI structure available"},
+ {44, "EL2HLT", "level 2 halted"},
+ {45, "EDEADLK", "deadlock condition if locked"},
+ {46, "ENOTREADY", "device not ready"},
+ {47, "EWRPROTECT", "write-protected media"},
+ {48, "EFORMAT", "unformatted or incompatible media"},
+ {49, "ENOLCK", "no locks available"},
+ {50, "ENOCONNECT", "cannot Establish Connection"},
+ {52, "ESTALE", "missing file or filesystem"},
+ {53, "EDIST", "requests blocked by Administrator"},
+ {55, "EINPROGRESS", "operation now in progress"},
+ {56, "EALREADY", "operation already in progress"},
+ {57, "ENOTSOCK", "socket operation on non-socket"},
+ {58, "EDESTADDREQ", "destination address required"},
+ {59, "EMSGSIZE", "message too long"},
+ {60, "EPROTOTYPE", "protocol wrong type for socket"},
+ {61, "ENOPROTOOPT", "protocol not available"},
+ {62, "EPROTONOSUPPORT", "protocol not supported"},
+ {63, "ESOCKTNOSUPPORT", "socket type not supported"},
+ {64, "EOPNOTSUPP", "operation not supported on socket"},
+ {65, "EPFNOSUPPORT", "protocol family not supported"},
+ {66, "EAFNOSUPPORT", "addr family not supported by protocol"},
+ {67, "EADDRINUSE", "address already in use"},
+ {68, "EADDRNOTAVAIL", "can't assign requested address"},
+ {69, "ENETDOWN", "network is down"},
+ {70, "ENETUNREACH", "network is unreachable"},
+ {71, "ENETRESET", "network dropped connection on reset"},
+ {72, "ECONNABORTED", "software caused connection abort"},
+ {73, "ECONNRESET", "connection reset by peer"},
+ {74, "ENOBUFS", "no buffer space available"},
+ {75, "EISCONN", "socket is already connected"},
+ {76, "ENOTCONN", "socket is not connected"},
+ {77, "ESHUTDOWN", "can't send after socket shutdown"},
+ {78, "ETIMEDOUT", "connection timed out"},
+ {79, "ECONNREFUSED", "connection refused"},
+ {80, "EHOSTDOWN", "host is down"},
+ {81, "EHOSTUNREACH", "no route to host"},
+ {82, "ERESTART", "restart the system call"},
+ {83, "EPROCLIM", "too many processes"},
+ {84, "EUSERS", "too many users"},
+ {85, "ELOOP", "too many levels of symbolic links"},
+ {86, "ENAMETOOLONG", "file name too long"},
+ {88, "EDQUOT", "disk quota exceeded"},
+ {89, "ECORRUPT", "invalid file system control data detected"},
+ {90, "ESYSERROR", "for future use "},
+ {93, "EREMOTE", "item is not local to host"},
+ {94, "ENOTRECOVERABLE", "state not recoverable "},
+ {95, "EOWNERDEAD", "previous owner died "},
+ {109, "ENOSYS", "function not implemented"},
+ {110, "EMEDIA", "media surface error"},
+ {111, "ESOFT", "I/O completed, but needs relocation"},
+ {112, "ENOATTR", "no attribute found"},
+ {113, "ESAD", "security Authentication Denied"},
+ {114, "ENOTRUST", "not a Trusted Program"},
+ {115, "ETOOMANYREFS", "too many references: can't splice"},
+ {116, "EILSEQ", "invalid wide character"},
+ {117, "ECANCELED", "asynchronous I/O cancelled"},
+ {118, "ENOSR", "out of STREAMS resources"},
+ {119, "ETIME", "system call timed out"},
+ {120, "EBADMSG", "next message has wrong type"},
+ {121, "EPROTO", "error in protocol"},
+ {122, "ENODATA", "no message on stream head read q"},
+ {123, "ENOSTR", "fd not associated with a stream"},
+ {124, "ENOTSUP", "unsupported attribute value"},
+ {125, "EMULTIHOP", "multihop is not allowed"},
+ {126, "ENOLINK", "the server link has been severed"},
+ {127, "EOVERFLOW", "value too large to be stored in data type"},
+}
+
+// Signal table
+var signalList = [...]struct {
+ num syscall.Signal
+ name string
+ desc string
+}{
+ {1, "SIGHUP", "hangup"},
+ {2, "SIGINT", "interrupt"},
+ {3, "SIGQUIT", "quit"},
+ {4, "SIGILL", "illegal instruction"},
+ {5, "SIGTRAP", "trace/BPT trap"},
+ {6, "SIGIOT", "IOT/Abort trap"},
+ {7, "SIGEMT", "EMT trap"},
+ {8, "SIGFPE", "floating point exception"},
+ {9, "SIGKILL", "killed"},
+ {10, "SIGBUS", "bus error"},
+ {11, "SIGSEGV", "segmentation fault"},
+ {12, "SIGSYS", "bad system call"},
+ {13, "SIGPIPE", "broken pipe"},
+ {14, "SIGALRM", "alarm clock"},
+ {15, "SIGTERM", "terminated"},
+ {16, "SIGURG", "urgent I/O condition"},
+ {17, "SIGSTOP", "stopped (signal)"},
+ {18, "SIGTSTP", "stopped"},
+ {19, "SIGCONT", "continued"},
+ {20, "SIGCHLD", "child exited"},
+ {21, "SIGTTIN", "stopped (tty input)"},
+ {22, "SIGTTOU", "stopped (tty output)"},
+ {23, "SIGIO", "I/O possible/complete"},
+ {24, "SIGXCPU", "cputime limit exceeded"},
+ {25, "SIGXFSZ", "filesize limit exceeded"},
+ {27, "SIGMSG", "input device data"},
+ {28, "SIGWINCH", "window size changes"},
+ {29, "SIGPWR", "power-failure"},
+ {30, "SIGUSR1", "user defined signal 1"},
+ {31, "SIGUSR2", "user defined signal 2"},
+ {32, "SIGPROF", "profiling timer expired"},
+ {33, "SIGDANGER", "paging space low"},
+ {34, "SIGVTALRM", "virtual timer expired"},
+ {35, "SIGMIGRATE", "signal 35"},
+ {36, "SIGPRE", "signal 36"},
+ {37, "SIGVIRT", "signal 37"},
+ {38, "SIGTALRM", "signal 38"},
+ {39, "SIGWAITING", "signal 39"},
+ {48, "SIGSYSERROR", "signal 48"},
+ {49, "SIGCAPI", "signal 49"},
+ {58, "SIGRECONFIG", "signal 58"},
+ {59, "SIGCPUFAIL", "CPU Failure Predicted"},
+ {60, "SIGKAP", "monitor mode granted"},
+ {61, "SIGRETRACT", "monitor mode retracted"},
+ {62, "SIGSOUND", "sound completed"},
+ {63, "SIGSAK", "secure attention"},
+}
diff --git a/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go
new file mode 100644
index 000000000..ed04fd1b7
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go
@@ -0,0 +1,1373 @@
+// mkerrors.sh -maix64
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build ppc64,aix
+
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs -- -maix64 _const.go
+
+package unix
+
+import "syscall"
+
+const (
+ AF_APPLETALK = 0x10
+ AF_BYPASS = 0x19
+ AF_CCITT = 0xa
+ AF_CHAOS = 0x5
+ AF_DATAKIT = 0x9
+ AF_DECnet = 0xc
+ AF_DLI = 0xd
+ AF_ECMA = 0x8
+ AF_HYLINK = 0xf
+ AF_IMPLINK = 0x3
+ AF_INET = 0x2
+ AF_INET6 = 0x18
+ AF_INTF = 0x14
+ AF_ISO = 0x7
+ AF_LAT = 0xe
+ AF_LINK = 0x12
+ AF_LOCAL = 0x1
+ AF_MAX = 0x1e
+ AF_NDD = 0x17
+ AF_NETWARE = 0x16
+ AF_NS = 0x6
+ AF_OSI = 0x7
+ AF_PUP = 0x4
+ AF_RIF = 0x15
+ AF_ROUTE = 0x11
+ AF_SNA = 0xb
+ AF_UNIX = 0x1
+ AF_UNSPEC = 0x0
+ ALTWERASE = 0x400000
+ ARPHRD_802_3 = 0x6
+ ARPHRD_802_5 = 0x6
+ ARPHRD_ETHER = 0x1
+ ARPHRD_FDDI = 0x1
+ B0 = 0x0
+ B110 = 0x3
+ B1200 = 0x9
+ B134 = 0x4
+ B150 = 0x5
+ B1800 = 0xa
+ B19200 = 0xe
+ B200 = 0x6
+ B2400 = 0xb
+ B300 = 0x7
+ B38400 = 0xf
+ B4800 = 0xc
+ B50 = 0x1
+ B600 = 0x8
+ B75 = 0x2
+ B9600 = 0xd
+ BRKINT = 0x2
+ BS0 = 0x0
+ BS1 = 0x1000
+ BSDLY = 0x1000
+ CAP_AACCT = 0x6
+ CAP_ARM_APPLICATION = 0x5
+ CAP_BYPASS_RAC_VMM = 0x3
+ CAP_CLEAR = 0x0
+ CAP_CREDENTIALS = 0x7
+ CAP_EFFECTIVE = 0x1
+ CAP_EWLM_AGENT = 0x4
+ CAP_INHERITABLE = 0x2
+ CAP_MAXIMUM = 0x7
+ CAP_NUMA_ATTACH = 0x2
+ CAP_PERMITTED = 0x3
+ CAP_PROPAGATE = 0x1
+ CAP_PROPOGATE = 0x1
+ CAP_SET = 0x1
+ CBAUD = 0xf
+ CFLUSH = 0xf
+ CIBAUD = 0xf0000
+ CLOCAL = 0x800
+ CLOCK_MONOTONIC = 0xa
+ CLOCK_PROCESS_CPUTIME_ID = 0xb
+ CLOCK_REALTIME = 0x9
+ CLOCK_THREAD_CPUTIME_ID = 0xc
+ CR0 = 0x0
+ CR1 = 0x100
+ CR2 = 0x200
+ CR3 = 0x300
+ CRDLY = 0x300
+ CREAD = 0x80
+ CS5 = 0x0
+ CS6 = 0x10
+ CS7 = 0x20
+ CS8 = 0x30
+ CSIOCGIFCONF = -0x3fef96dc
+ CSIZE = 0x30
+ CSMAP_DIR = "/usr/lib/nls/csmap/"
+ CSTART = '\021'
+ CSTOP = '\023'
+ CSTOPB = 0x40
+ CSUSP = 0x1a
+ ECHO = 0x8
+ ECHOCTL = 0x20000
+ ECHOE = 0x10
+ ECHOK = 0x20
+ ECHOKE = 0x80000
+ ECHONL = 0x40
+ ECHOPRT = 0x40000
+ ECH_ICMPID = 0x2
+ ETHERNET_CSMACD = 0x6
+ EVENP = 0x80
+ EXCONTINUE = 0x0
+ EXDLOK = 0x3
+ EXIO = 0x2
+ EXPGIO = 0x0
+ EXRESUME = 0x2
+ EXRETURN = 0x1
+ EXSIG = 0x4
+ EXTA = 0xe
+ EXTB = 0xf
+ EXTRAP = 0x1
+ EYEC_RTENTRYA = 0x257274656e747241
+ EYEC_RTENTRYF = 0x257274656e747246
+ E_ACC = 0x0
+ FD_CLOEXEC = 0x1
+ FD_SETSIZE = 0xfffe
+ FF0 = 0x0
+ FF1 = 0x2000
+ FFDLY = 0x2000
+ FLUSHBAND = 0x40
+ FLUSHLOW = 0x8
+ FLUSHO = 0x100000
+ FLUSHR = 0x1
+ FLUSHRW = 0x3
+ FLUSHW = 0x2
+ F_CLOSEM = 0xa
+ F_DUP2FD = 0xe
+ F_DUPFD = 0x0
+ F_GETFD = 0x1
+ F_GETFL = 0x3
+ F_GETLK = 0xb
+ F_GETLK64 = 0xb
+ F_GETOWN = 0x8
+ F_LOCK = 0x1
+ F_OK = 0x0
+ F_RDLCK = 0x1
+ F_SETFD = 0x2
+ F_SETFL = 0x4
+ F_SETLK = 0xc
+ F_SETLK64 = 0xc
+ F_SETLKW = 0xd
+ F_SETLKW64 = 0xd
+ F_SETOWN = 0x9
+ F_TEST = 0x3
+ F_TLOCK = 0x2
+ F_TSTLK = 0xf
+ F_ULOCK = 0x0
+ F_UNLCK = 0x3
+ F_WRLCK = 0x2
+ HUPCL = 0x400
+ IBSHIFT = 0x10
+ ICANON = 0x2
+ ICMP6_FILTER = 0x26
+ ICMP6_SEC_SEND_DEL = 0x46
+ ICMP6_SEC_SEND_GET = 0x47
+ ICMP6_SEC_SEND_SET = 0x44
+ ICMP6_SEC_SEND_SET_CGA_ADDR = 0x45
+ ICRNL = 0x100
+ IEXTEN = 0x200000
+ IFA_FIRSTALIAS = 0x2000
+ IFA_ROUTE = 0x1
+ IFF_64BIT = 0x4000000
+ IFF_ALLCAST = 0x20000
+ IFF_ALLMULTI = 0x200
+ IFF_BPF = 0x8000000
+ IFF_BRIDGE = 0x40000
+ IFF_BROADCAST = 0x2
+ IFF_CANTCHANGE = 0x80c52
+ IFF_CHECKSUM_OFFLOAD = 0x10000000
+ IFF_D1 = 0x8000
+ IFF_D2 = 0x4000
+ IFF_D3 = 0x2000
+ IFF_D4 = 0x1000
+ IFF_DEBUG = 0x4
+ IFF_DEVHEALTH = 0x4000
+ IFF_DO_HW_LOOPBACK = 0x10000
+ IFF_GROUP_ROUTING = 0x2000000
+ IFF_IFBUFMGT = 0x800000
+ IFF_LINK0 = 0x100000
+ IFF_LINK1 = 0x200000
+ IFF_LINK2 = 0x400000
+ IFF_LOOPBACK = 0x8
+ IFF_MULTICAST = 0x80000
+ IFF_NOARP = 0x80
+ IFF_NOECHO = 0x800
+ IFF_NOTRAILERS = 0x20
+ IFF_OACTIVE = 0x400
+ IFF_POINTOPOINT = 0x10
+ IFF_PROMISC = 0x100
+ IFF_PSEG = 0x40000000
+ IFF_RUNNING = 0x40
+ IFF_SIMPLEX = 0x800
+ IFF_SNAP = 0x8000
+ IFF_TCP_DISABLE_CKSUM = 0x20000000
+ IFF_TCP_NOCKSUM = 0x1000000
+ IFF_UP = 0x1
+ IFF_VIPA = 0x80000000
+ IFNAMSIZ = 0x10
+ IFO_FLUSH = 0x1
+ IFT_1822 = 0x2
+ IFT_AAL5 = 0x31
+ IFT_ARCNET = 0x23
+ IFT_ARCNETPLUS = 0x24
+ IFT_ATM = 0x25
+ IFT_CEPT = 0x13
+ IFT_CLUSTER = 0x3e
+ IFT_DS3 = 0x1e
+ IFT_EON = 0x19
+ IFT_ETHER = 0x6
+ IFT_FCS = 0x3a
+ IFT_FDDI = 0xf
+ IFT_FRELAY = 0x20
+ IFT_FRELAYDCE = 0x2c
+ IFT_GIFTUNNEL = 0x3c
+ IFT_HDH1822 = 0x3
+ IFT_HF = 0x3d
+ IFT_HIPPI = 0x2f
+ IFT_HSSI = 0x2e
+ IFT_HY = 0xe
+ IFT_IB = 0xc7
+ IFT_ISDNBASIC = 0x14
+ IFT_ISDNPRIMARY = 0x15
+ IFT_ISO88022LLC = 0x29
+ IFT_ISO88023 = 0x7
+ IFT_ISO88024 = 0x8
+ IFT_ISO88025 = 0x9
+ IFT_ISO88026 = 0xa
+ IFT_LAPB = 0x10
+ IFT_LOCALTALK = 0x2a
+ IFT_LOOP = 0x18
+ IFT_MIOX25 = 0x26
+ IFT_MODEM = 0x30
+ IFT_NSIP = 0x1b
+ IFT_OTHER = 0x1
+ IFT_P10 = 0xc
+ IFT_P80 = 0xd
+ IFT_PARA = 0x22
+ IFT_PPP = 0x17
+ IFT_PROPMUX = 0x36
+ IFT_PROPVIRTUAL = 0x35
+ IFT_PTPSERIAL = 0x16
+ IFT_RS232 = 0x21
+ IFT_SDLC = 0x11
+ IFT_SIP = 0x1f
+ IFT_SLIP = 0x1c
+ IFT_SMDSDXI = 0x2b
+ IFT_SMDSICIP = 0x34
+ IFT_SN = 0x38
+ IFT_SONET = 0x27
+ IFT_SONETPATH = 0x32
+ IFT_SONETVT = 0x33
+ IFT_SP = 0x39
+ IFT_STARLAN = 0xb
+ IFT_T1 = 0x12
+ IFT_TUNNEL = 0x3b
+ IFT_ULTRA = 0x1d
+ IFT_V35 = 0x2d
+ IFT_VIPA = 0x37
+ IFT_X25 = 0x5
+ IFT_X25DDN = 0x4
+ IFT_X25PLE = 0x28
+ IFT_XETHER = 0x1a
+ IGNBRK = 0x1
+ IGNCR = 0x80
+ IGNPAR = 0x4
+ IMAXBEL = 0x10000
+ INLCR = 0x40
+ INPCK = 0x10
+ IN_CLASSA_HOST = 0xffffff
+ IN_CLASSA_MAX = 0x80
+ IN_CLASSA_NET = 0xff000000
+ IN_CLASSA_NSHIFT = 0x18
+ IN_CLASSB_HOST = 0xffff
+ IN_CLASSB_MAX = 0x10000
+ IN_CLASSB_NET = 0xffff0000
+ IN_CLASSB_NSHIFT = 0x10
+ IN_CLASSC_HOST = 0xff
+ IN_CLASSC_NET = 0xffffff00
+ IN_CLASSC_NSHIFT = 0x8
+ IN_CLASSD_HOST = 0xfffffff
+ IN_CLASSD_NET = 0xf0000000
+ IN_CLASSD_NSHIFT = 0x1c
+ IN_LOOPBACKNET = 0x7f
+ IN_USE = 0x1
+ IPPROTO_AH = 0x33
+ IPPROTO_BIP = 0x53
+ IPPROTO_DSTOPTS = 0x3c
+ IPPROTO_EGP = 0x8
+ IPPROTO_EON = 0x50
+ IPPROTO_ESP = 0x32
+ IPPROTO_FRAGMENT = 0x2c
+ IPPROTO_GGP = 0x3
+ IPPROTO_GIF = 0x8c
+ IPPROTO_GRE = 0x2f
+ IPPROTO_HOPOPTS = 0x0
+ IPPROTO_ICMP = 0x1
+ IPPROTO_ICMPV6 = 0x3a
+ IPPROTO_IDP = 0x16
+ IPPROTO_IGMP = 0x2
+ IPPROTO_IP = 0x0
+ IPPROTO_IPIP = 0x4
+ IPPROTO_IPV6 = 0x29
+ IPPROTO_LOCAL = 0x3f
+ IPPROTO_MAX = 0x100
+ IPPROTO_MH = 0x87
+ IPPROTO_NONE = 0x3b
+ IPPROTO_PUP = 0xc
+ IPPROTO_QOS = 0x2d
+ IPPROTO_RAW = 0xff
+ IPPROTO_ROUTING = 0x2b
+ IPPROTO_RSVP = 0x2e
+ IPPROTO_SCTP = 0x84
+ IPPROTO_TCP = 0x6
+ IPPROTO_TP = 0x1d
+ IPPROTO_UDP = 0x11
+ IPV6_ADDRFORM = 0x16
+ IPV6_ADDR_PREFERENCES = 0x4a
+ IPV6_ADD_MEMBERSHIP = 0xc
+ IPV6_AIXRAWSOCKET = 0x39
+ IPV6_CHECKSUM = 0x27
+ IPV6_DONTFRAG = 0x2d
+ IPV6_DROP_MEMBERSHIP = 0xd
+ IPV6_DSTOPTS = 0x36
+ IPV6_FLOWINFO_FLOWLABEL = 0xffffff
+ IPV6_FLOWINFO_PRIFLOW = 0xfffffff
+ IPV6_FLOWINFO_PRIORITY = 0xf000000
+ IPV6_FLOWINFO_SRFLAG = 0x10000000
+ IPV6_FLOWINFO_VERSION = 0xf0000000
+ IPV6_HOPLIMIT = 0x28
+ IPV6_HOPOPTS = 0x34
+ IPV6_JOIN_GROUP = 0xc
+ IPV6_LEAVE_GROUP = 0xd
+ IPV6_MIPDSTOPTS = 0x36
+ IPV6_MULTICAST_HOPS = 0xa
+ IPV6_MULTICAST_IF = 0x9
+ IPV6_MULTICAST_LOOP = 0xb
+ IPV6_NEXTHOP = 0x30
+ IPV6_NOPROBE = 0x1c
+ IPV6_PATHMTU = 0x2e
+ IPV6_PKTINFO = 0x21
+ IPV6_PKTOPTIONS = 0x24
+ IPV6_PRIORITY_10 = 0xa000000
+ IPV6_PRIORITY_11 = 0xb000000
+ IPV6_PRIORITY_12 = 0xc000000
+ IPV6_PRIORITY_13 = 0xd000000
+ IPV6_PRIORITY_14 = 0xe000000
+ IPV6_PRIORITY_15 = 0xf000000
+ IPV6_PRIORITY_8 = 0x8000000
+ IPV6_PRIORITY_9 = 0x9000000
+ IPV6_PRIORITY_BULK = 0x4000000
+ IPV6_PRIORITY_CONTROL = 0x7000000
+ IPV6_PRIORITY_FILLER = 0x1000000
+ IPV6_PRIORITY_INTERACTIVE = 0x6000000
+ IPV6_PRIORITY_RESERVED1 = 0x3000000
+ IPV6_PRIORITY_RESERVED2 = 0x5000000
+ IPV6_PRIORITY_UNATTENDED = 0x2000000
+ IPV6_PRIORITY_UNCHARACTERIZED = 0x0
+ IPV6_RECVDSTOPTS = 0x38
+ IPV6_RECVHOPLIMIT = 0x29
+ IPV6_RECVHOPOPTS = 0x35
+ IPV6_RECVHOPS = 0x22
+ IPV6_RECVIF = 0x1e
+ IPV6_RECVPATHMTU = 0x2f
+ IPV6_RECVPKTINFO = 0x23
+ IPV6_RECVRTHDR = 0x33
+ IPV6_RECVSRCRT = 0x1d
+ IPV6_RECVTCLASS = 0x2a
+ IPV6_RTHDR = 0x32
+ IPV6_RTHDRDSTOPTS = 0x37
+ IPV6_RTHDR_TYPE_0 = 0x0
+ IPV6_RTHDR_TYPE_2 = 0x2
+ IPV6_SENDIF = 0x1f
+ IPV6_SRFLAG_LOOSE = 0x0
+ IPV6_SRFLAG_STRICT = 0x10000000
+ IPV6_TCLASS = 0x2b
+ IPV6_TOKEN_LENGTH = 0x40
+ IPV6_UNICAST_HOPS = 0x4
+ IPV6_USE_MIN_MTU = 0x2c
+ IPV6_V6ONLY = 0x25
+ IPV6_VERSION = 0x60000000
+ IP_ADDRFORM = 0x16
+ IP_ADD_MEMBERSHIP = 0xc
+ IP_ADD_SOURCE_MEMBERSHIP = 0x3c
+ IP_BLOCK_SOURCE = 0x3a
+ IP_BROADCAST_IF = 0x10
+ IP_CACHE_LINE_SIZE = 0x80
+ IP_DEFAULT_MULTICAST_LOOP = 0x1
+ IP_DEFAULT_MULTICAST_TTL = 0x1
+ IP_DF = 0x4000
+ IP_DHCPMODE = 0x11
+ IP_DONTFRAG = 0x19
+ IP_DROP_MEMBERSHIP = 0xd
+ IP_DROP_SOURCE_MEMBERSHIP = 0x3d
+ IP_FINDPMTU = 0x1a
+ IP_HDRINCL = 0x2
+ IP_INC_MEMBERSHIPS = 0x14
+ IP_INIT_MEMBERSHIP = 0x14
+ IP_MAXPACKET = 0xffff
+ IP_MF = 0x2000
+ IP_MSS = 0x240
+ IP_MULTICAST_HOPS = 0xa
+ IP_MULTICAST_IF = 0x9
+ IP_MULTICAST_LOOP = 0xb
+ IP_MULTICAST_TTL = 0xa
+ IP_OPT = 0x1b
+ IP_OPTIONS = 0x1
+ IP_PMTUAGE = 0x1b
+ IP_RECVDSTADDR = 0x7
+ IP_RECVIF = 0x14
+ IP_RECVIFINFO = 0xf
+ IP_RECVINTERFACE = 0x20
+ IP_RECVMACHDR = 0xe
+ IP_RECVOPTS = 0x5
+ IP_RECVRETOPTS = 0x6
+ IP_RECVTTL = 0x22
+ IP_RETOPTS = 0x8
+ IP_SOURCE_FILTER = 0x48
+ IP_TOS = 0x3
+ IP_TTL = 0x4
+ IP_UNBLOCK_SOURCE = 0x3b
+ IP_UNICAST_HOPS = 0x4
+ ISIG = 0x1
+ ISTRIP = 0x20
+ IUCLC = 0x800
+ IXANY = 0x1000
+ IXOFF = 0x400
+ IXON = 0x200
+ I_FLUSH = 0x20005305
+ LNOFLSH = 0x8000
+ LOCK_EX = 0x2
+ LOCK_NB = 0x4
+ LOCK_SH = 0x1
+ LOCK_UN = 0x8
+ MADV_DONTNEED = 0x4
+ MADV_NORMAL = 0x0
+ MADV_RANDOM = 0x1
+ MADV_SEQUENTIAL = 0x2
+ MADV_SPACEAVAIL = 0x5
+ MADV_WILLNEED = 0x3
+ MAP_ANON = 0x10
+ MAP_ANONYMOUS = 0x10
+ MAP_FILE = 0x0
+ MAP_FIXED = 0x100
+ MAP_PRIVATE = 0x2
+ MAP_SHARED = 0x1
+ MAP_TYPE = 0xf0
+ MAP_VARIABLE = 0x0
+ MCL_CURRENT = 0x100
+ MCL_FUTURE = 0x200
+ MSG_ANY = 0x4
+ MSG_ARGEXT = 0x400
+ MSG_BAND = 0x2
+ MSG_COMPAT = 0x8000
+ MSG_CTRUNC = 0x20
+ MSG_DONTROUTE = 0x4
+ MSG_EOR = 0x8
+ MSG_HIPRI = 0x1
+ MSG_MAXIOVLEN = 0x10
+ MSG_MPEG2 = 0x80
+ MSG_NONBLOCK = 0x4000
+ MSG_NOSIGNAL = 0x100
+ MSG_OOB = 0x1
+ MSG_PEEK = 0x2
+ MSG_TRUNC = 0x10
+ MSG_WAITALL = 0x40
+ MSG_WAITFORONE = 0x200
+ MS_ASYNC = 0x10
+ MS_EINTR = 0x80
+ MS_INVALIDATE = 0x40
+ MS_PER_SEC = 0x3e8
+ MS_SYNC = 0x20
+ NL0 = 0x0
+ NL1 = 0x4000
+ NL2 = 0x8000
+ NL3 = 0xc000
+ NLDLY = 0x4000
+ NOFLSH = 0x80
+ NOFLUSH = 0x80000000
+ OCRNL = 0x8
+ OFDEL = 0x80
+ OFILL = 0x40
+ OLCUC = 0x2
+ ONLCR = 0x4
+ ONLRET = 0x20
+ ONOCR = 0x10
+ ONOEOT = 0x80000
+ OPOST = 0x1
+ OXTABS = 0x40000
+ O_ACCMODE = 0x23
+ O_APPEND = 0x8
+ O_CIO = 0x80
+ O_CIOR = 0x800000000
+ O_CLOEXEC = 0x800000
+ O_CREAT = 0x100
+ O_DEFER = 0x2000
+ O_DELAY = 0x4000
+ O_DIRECT = 0x8000000
+ O_DIRECTORY = 0x80000
+ O_DSYNC = 0x400000
+ O_EFSOFF = 0x400000000
+ O_EFSON = 0x200000000
+ O_EXCL = 0x400
+ O_EXEC = 0x20
+ O_LARGEFILE = 0x4000000
+ O_NDELAY = 0x8000
+ O_NOCACHE = 0x100000
+ O_NOCTTY = 0x800
+ O_NOFOLLOW = 0x1000000
+ O_NONBLOCK = 0x4
+ O_NONE = 0x3
+ O_NSHARE = 0x10000
+ O_RAW = 0x100000000
+ O_RDONLY = 0x0
+ O_RDWR = 0x2
+ O_RSHARE = 0x1000
+ O_RSYNC = 0x200000
+ O_SEARCH = 0x20
+ O_SNAPSHOT = 0x40
+ O_SYNC = 0x10
+ O_TRUNC = 0x200
+ O_TTY_INIT = 0x0
+ O_WRONLY = 0x1
+ PARENB = 0x100
+ PAREXT = 0x100000
+ PARMRK = 0x8
+ PARODD = 0x200
+ PENDIN = 0x20000000
+ PRIO_PGRP = 0x1
+ PRIO_PROCESS = 0x0
+ PRIO_USER = 0x2
+ PROT_EXEC = 0x4
+ PROT_NONE = 0x0
+ PROT_READ = 0x1
+ PROT_WRITE = 0x2
+ PR_64BIT = 0x20
+ PR_ADDR = 0x2
+ PR_ARGEXT = 0x400
+ PR_ATOMIC = 0x1
+ PR_CONNREQUIRED = 0x4
+ PR_FASTHZ = 0x5
+ PR_INP = 0x40
+ PR_INTRLEVEL = 0x8000
+ PR_MLS = 0x100
+ PR_MLS_1_LABEL = 0x200
+ PR_NOEOR = 0x4000
+ PR_RIGHTS = 0x10
+ PR_SLOWHZ = 0x2
+ PR_WANTRCVD = 0x8
+ RLIMIT_AS = 0x6
+ RLIMIT_CORE = 0x4
+ RLIMIT_CPU = 0x0
+ RLIMIT_DATA = 0x2
+ RLIMIT_FSIZE = 0x1
+ RLIMIT_NOFILE = 0x7
+ RLIMIT_NPROC = 0x9
+ RLIMIT_RSS = 0x5
+ RLIMIT_STACK = 0x3
+ RLIM_INFINITY = 0x7fffffffffffffff
+ RTAX_AUTHOR = 0x6
+ RTAX_BRD = 0x7
+ RTAX_DST = 0x0
+ RTAX_GATEWAY = 0x1
+ RTAX_GENMASK = 0x3
+ RTAX_IFA = 0x5
+ RTAX_IFP = 0x4
+ RTAX_MAX = 0x8
+ RTAX_NETMASK = 0x2
+ RTA_AUTHOR = 0x40
+ RTA_BRD = 0x80
+ RTA_DOWNSTREAM = 0x100
+ RTA_DST = 0x1
+ RTA_GATEWAY = 0x2
+ RTA_GENMASK = 0x8
+ RTA_IFA = 0x20
+ RTA_IFP = 0x10
+ RTA_NETMASK = 0x4
+ RTC_IA64 = 0x3
+ RTC_POWER = 0x1
+ RTC_POWER_PC = 0x2
+ RTF_ACTIVE_DGD = 0x1000000
+ RTF_BCE = 0x80000
+ RTF_BLACKHOLE = 0x1000
+ RTF_BROADCAST = 0x400000
+ RTF_BUL = 0x2000
+ RTF_CLONE = 0x10000
+ RTF_CLONED = 0x20000
+ RTF_CLONING = 0x100
+ RTF_DONE = 0x40
+ RTF_DYNAMIC = 0x10
+ RTF_FREE_IN_PROG = 0x4000000
+ RTF_GATEWAY = 0x2
+ RTF_HOST = 0x4
+ RTF_LLINFO = 0x400
+ RTF_LOCAL = 0x200000
+ RTF_MASK = 0x80
+ RTF_MODIFIED = 0x20
+ RTF_MULTICAST = 0x800000
+ RTF_PERMANENT6 = 0x8000000
+ RTF_PINNED = 0x100000
+ RTF_PROTO1 = 0x8000
+ RTF_PROTO2 = 0x4000
+ RTF_PROTO3 = 0x40000
+ RTF_REJECT = 0x8
+ RTF_SMALLMTU = 0x40000
+ RTF_STATIC = 0x800
+ RTF_STOPSRCH = 0x2000000
+ RTF_UNREACHABLE = 0x10000000
+ RTF_UP = 0x1
+ RTF_XRESOLVE = 0x200
+ RTM_ADD = 0x1
+ RTM_CHANGE = 0x3
+ RTM_DELADDR = 0xd
+ RTM_DELETE = 0x2
+ RTM_EXPIRE = 0xf
+ RTM_GET = 0x4
+ RTM_GETNEXT = 0x11
+ RTM_IFINFO = 0xe
+ RTM_LOCK = 0x8
+ RTM_LOSING = 0x5
+ RTM_MISS = 0x7
+ RTM_NEWADDR = 0xc
+ RTM_OLDADD = 0x9
+ RTM_OLDDEL = 0xa
+ RTM_REDIRECT = 0x6
+ RTM_RESOLVE = 0xb
+ RTM_RTLOST = 0x10
+ RTM_RTTUNIT = 0xf4240
+ RTM_SAMEADDR = 0x12
+ RTM_SET = 0x13
+ RTM_VERSION = 0x2
+ RTM_VERSION_GR = 0x4
+ RTM_VERSION_GR_COMPAT = 0x3
+ RTM_VERSION_POLICY = 0x5
+ RTM_VERSION_POLICY_EXT = 0x6
+ RTM_VERSION_POLICY_PRFN = 0x7
+ RTV_EXPIRE = 0x4
+ RTV_HOPCOUNT = 0x2
+ RTV_MTU = 0x1
+ RTV_RPIPE = 0x8
+ RTV_RTT = 0x40
+ RTV_RTTVAR = 0x80
+ RTV_SPIPE = 0x10
+ RTV_SSTHRESH = 0x20
+ RUSAGE_CHILDREN = -0x1
+ RUSAGE_SELF = 0x0
+ RUSAGE_THREAD = 0x1
+ SCM_RIGHTS = 0x1
+ SHUT_RD = 0x0
+ SHUT_RDWR = 0x2
+ SHUT_WR = 0x1
+ SIGMAX64 = 0xff
+ SIGQUEUE_MAX = 0x20
+ SIOCADDIFVIPA = 0x20006942
+ SIOCADDMTU = -0x7ffb9690
+ SIOCADDMULTI = -0x7fdf96cf
+ SIOCADDNETID = -0x7fd796a9
+ SIOCADDRT = -0x7fc78df6
+ SIOCAIFADDR = -0x7fbf96e6
+ SIOCATMARK = 0x40047307
+ SIOCDARP = -0x7fb396e0
+ SIOCDELIFVIPA = 0x20006943
+ SIOCDELMTU = -0x7ffb968f
+ SIOCDELMULTI = -0x7fdf96ce
+ SIOCDELPMTU = -0x7fd78ff6
+ SIOCDELRT = -0x7fc78df5
+ SIOCDIFADDR = -0x7fd796e7
+ SIOCDNETOPT = -0x3ffe9680
+ SIOCDX25XLATE = -0x7fd7969b
+ SIOCFIFADDR = -0x7fdf966d
+ SIOCGARP = -0x3fb396da
+ SIOCGETMTUS = 0x2000696f
+ SIOCGETSGCNT = -0x3feb8acc
+ SIOCGETVIFCNT = -0x3feb8acd
+ SIOCGHIWAT = 0x40047301
+ SIOCGIFADDR = -0x3fd796df
+ SIOCGIFADDRS = 0x2000698c
+ SIOCGIFBAUDRATE = -0x3fd79693
+ SIOCGIFBRDADDR = -0x3fd796dd
+ SIOCGIFCONF = -0x3fef96bb
+ SIOCGIFCONFGLOB = -0x3fef9670
+ SIOCGIFDSTADDR = -0x3fd796de
+ SIOCGIFFLAGS = -0x3fd796ef
+ SIOCGIFGIDLIST = 0x20006968
+ SIOCGIFHWADDR = -0x3fab966b
+ SIOCGIFMETRIC = -0x3fd796e9
+ SIOCGIFMTU = -0x3fd796aa
+ SIOCGIFNETMASK = -0x3fd796db
+ SIOCGIFOPTIONS = -0x3fd796d6
+ SIOCGISNO = -0x3fd79695
+ SIOCGLOADF = -0x3ffb967e
+ SIOCGLOWAT = 0x40047303
+ SIOCGNETOPT = -0x3ffe96a5
+ SIOCGNETOPT1 = -0x3fdf967f
+ SIOCGNMTUS = 0x2000696e
+ SIOCGPGRP = 0x40047309
+ SIOCGSIZIFCONF = 0x4004696a
+ SIOCGSRCFILTER = -0x3fe796cb
+ SIOCGTUNEPHASE = -0x3ffb9676
+ SIOCGX25XLATE = -0x3fd7969c
+ SIOCIFATTACH = -0x7fdf9699
+ SIOCIFDETACH = -0x7fdf969a
+ SIOCIFGETPKEY = -0x7fdf969b
+ SIOCIF_ATM_DARP = -0x7fdf9683
+ SIOCIF_ATM_DUMPARP = -0x7fdf9685
+ SIOCIF_ATM_GARP = -0x7fdf9682
+ SIOCIF_ATM_IDLE = -0x7fdf9686
+ SIOCIF_ATM_SARP = -0x7fdf9681
+ SIOCIF_ATM_SNMPARP = -0x7fdf9687
+ SIOCIF_ATM_SVC = -0x7fdf9684
+ SIOCIF_ATM_UBR = -0x7fdf9688
+ SIOCIF_DEVHEALTH = -0x7ffb966c
+ SIOCIF_IB_ARP_INCOMP = -0x7fdf9677
+ SIOCIF_IB_ARP_TIMER = -0x7fdf9678
+ SIOCIF_IB_CLEAR_PINFO = -0x3fdf966f
+ SIOCIF_IB_DEL_ARP = -0x7fdf967f
+ SIOCIF_IB_DEL_PINFO = -0x3fdf9670
+ SIOCIF_IB_DUMP_ARP = -0x7fdf9680
+ SIOCIF_IB_GET_ARP = -0x7fdf967e
+ SIOCIF_IB_GET_INFO = -0x3f879675
+ SIOCIF_IB_GET_STATS = -0x3f879672
+ SIOCIF_IB_NOTIFY_ADDR_REM = -0x3f87966a
+ SIOCIF_IB_RESET_STATS = -0x3f879671
+ SIOCIF_IB_RESIZE_CQ = -0x7fdf9679
+ SIOCIF_IB_SET_ARP = -0x7fdf967d
+ SIOCIF_IB_SET_PKEY = -0x7fdf967c
+ SIOCIF_IB_SET_PORT = -0x7fdf967b
+ SIOCIF_IB_SET_QKEY = -0x7fdf9676
+ SIOCIF_IB_SET_QSIZE = -0x7fdf967a
+ SIOCLISTIFVIPA = 0x20006944
+ SIOCSARP = -0x7fb396e2
+ SIOCSHIWAT = 0xffffffff80047300
+ SIOCSIFADDR = -0x7fd796f4
+ SIOCSIFADDRORI = -0x7fdb9673
+ SIOCSIFBRDADDR = -0x7fd796ed
+ SIOCSIFDSTADDR = -0x7fd796f2
+ SIOCSIFFLAGS = -0x7fd796f0
+ SIOCSIFGIDLIST = 0x20006969
+ SIOCSIFMETRIC = -0x7fd796e8
+ SIOCSIFMTU = -0x7fd796a8
+ SIOCSIFNETDUMP = -0x7fd796e4
+ SIOCSIFNETMASK = -0x7fd796ea
+ SIOCSIFOPTIONS = -0x7fd796d7
+ SIOCSIFSUBCHAN = -0x7fd796e5
+ SIOCSISNO = -0x7fd79694
+ SIOCSLOADF = -0x3ffb967d
+ SIOCSLOWAT = 0xffffffff80047302
+ SIOCSNETOPT = -0x7ffe96a6
+ SIOCSPGRP = 0xffffffff80047308
+ SIOCSX25XLATE = -0x7fd7969d
+ SOCK_CONN_DGRAM = 0x6
+ SOCK_DGRAM = 0x2
+ SOCK_RAW = 0x3
+ SOCK_RDM = 0x4
+ SOCK_SEQPACKET = 0x5
+ SOCK_STREAM = 0x1
+ SOL_SOCKET = 0xffff
+ SOMAXCONN = 0x400
+ SO_ACCEPTCONN = 0x2
+ SO_AUDIT = 0x8000
+ SO_BROADCAST = 0x20
+ SO_CKSUMRECV = 0x800
+ SO_DEBUG = 0x1
+ SO_DONTROUTE = 0x10
+ SO_ERROR = 0x1007
+ SO_KEEPALIVE = 0x8
+ SO_KERNACCEPT = 0x2000
+ SO_LINGER = 0x80
+ SO_NOMULTIPATH = 0x4000
+ SO_NOREUSEADDR = 0x1000
+ SO_OOBINLINE = 0x100
+ SO_PEERID = 0x1009
+ SO_RCVBUF = 0x1002
+ SO_RCVLOWAT = 0x1004
+ SO_RCVTIMEO = 0x1006
+ SO_REUSEADDR = 0x4
+ SO_REUSEPORT = 0x200
+ SO_SNDBUF = 0x1001
+ SO_SNDLOWAT = 0x1003
+ SO_SNDTIMEO = 0x1005
+ SO_TIMESTAMPNS = 0x100a
+ SO_TYPE = 0x1008
+ SO_USELOOPBACK = 0x40
+ SO_USE_IFBUFS = 0x400
+ S_BANDURG = 0x400
+ S_EMODFMT = 0x3c000000
+ S_ENFMT = 0x400
+ S_ERROR = 0x100
+ S_HANGUP = 0x200
+ S_HIPRI = 0x2
+ S_ICRYPTO = 0x80000
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFJOURNAL = 0x10000
+ S_IFLNK = 0xa000
+ S_IFMPX = 0x2200
+ S_IFMT = 0xf000
+ S_IFPDIR = 0x4000000
+ S_IFPSDIR = 0x8000000
+ S_IFPSSDIR = 0xc000000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFSYSEA = 0x30000000
+ S_INPUT = 0x1
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_ITCB = 0x1000000
+ S_ITP = 0x800000
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXACL = 0x2000000
+ S_IXATTR = 0x40000
+ S_IXGRP = 0x8
+ S_IXINTERFACE = 0x100000
+ S_IXMOD = 0x40000000
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
+ S_MSG = 0x8
+ S_OUTPUT = 0x4
+ S_RDBAND = 0x20
+ S_RDNORM = 0x10
+ S_RESERVED1 = 0x20000
+ S_RESERVED2 = 0x200000
+ S_RESERVED3 = 0x400000
+ S_RESERVED4 = 0x80000000
+ S_RESFMT1 = 0x10000000
+ S_RESFMT10 = 0x34000000
+ S_RESFMT11 = 0x38000000
+ S_RESFMT12 = 0x3c000000
+ S_RESFMT2 = 0x14000000
+ S_RESFMT3 = 0x18000000
+ S_RESFMT4 = 0x1c000000
+ S_RESFMT5 = 0x20000000
+ S_RESFMT6 = 0x24000000
+ S_RESFMT7 = 0x28000000
+ S_RESFMT8 = 0x2c000000
+ S_WRBAND = 0x80
+ S_WRNORM = 0x40
+ TAB0 = 0x0
+ TAB1 = 0x400
+ TAB2 = 0x800
+ TAB3 = 0xc00
+ TABDLY = 0xc00
+ TCFLSH = 0x540c
+ TCGETA = 0x5405
+ TCGETS = 0x5401
+ TCIFLUSH = 0x0
+ TCIOFF = 0x2
+ TCIOFLUSH = 0x2
+ TCION = 0x3
+ TCOFLUSH = 0x1
+ TCOOFF = 0x0
+ TCOON = 0x1
+ TCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800
+ TCP_ACLADD = 0x23
+ TCP_ACLBIND = 0x26
+ TCP_ACLCLEAR = 0x22
+ TCP_ACLDEL = 0x24
+ TCP_ACLDENY = 0x8
+ TCP_ACLFLUSH = 0x21
+ TCP_ACLGID = 0x1
+ TCP_ACLLS = 0x25
+ TCP_ACLSUBNET = 0x4
+ TCP_ACLUID = 0x2
+ TCP_CWND_DF = 0x16
+ TCP_CWND_IF = 0x15
+ TCP_DELAY_ACK_FIN = 0x2
+ TCP_DELAY_ACK_SYN = 0x1
+ TCP_FASTNAME = 0x101080a
+ TCP_KEEPCNT = 0x13
+ TCP_KEEPIDLE = 0x11
+ TCP_KEEPINTVL = 0x12
+ TCP_LSPRIV = 0x29
+ TCP_LUID = 0x20
+ TCP_MAXBURST = 0x8
+ TCP_MAXDF = 0x64
+ TCP_MAXIF = 0x64
+ TCP_MAXSEG = 0x2
+ TCP_MAXWIN = 0xffff
+ TCP_MAXWINDOWSCALE = 0xe
+ TCP_MAX_SACK = 0x4
+ TCP_MSS = 0x5b4
+ TCP_NODELAY = 0x1
+ TCP_NODELAYACK = 0x14
+ TCP_NOREDUCE_CWND_EXIT_FRXMT = 0x19
+ TCP_NOREDUCE_CWND_IN_FRXMT = 0x18
+ TCP_NOTENTER_SSTART = 0x17
+ TCP_OPT = 0x19
+ TCP_RFC1323 = 0x4
+ TCP_SETPRIV = 0x27
+ TCP_STDURG = 0x10
+ TCP_TIMESTAMP_OPTLEN = 0xc
+ TCP_UNSETPRIV = 0x28
+ TCSAFLUSH = 0x2
+ TCSBRK = 0x5409
+ TCSETA = 0x5406
+ TCSETAF = 0x5408
+ TCSETAW = 0x5407
+ TCSETS = 0x5402
+ TCSETSF = 0x5404
+ TCSETSW = 0x5403
+ TCXONC = 0x540b
+ TIOC = 0x5400
+ TIOCCBRK = 0x2000747a
+ TIOCCDTR = 0x20007478
+ TIOCCONS = 0xffffffff80047462
+ TIOCEXCL = 0x2000740d
+ TIOCFLUSH = 0xffffffff80047410
+ TIOCGETC = 0x40067412
+ TIOCGETD = 0x40047400
+ TIOCGETP = 0x40067408
+ TIOCGLTC = 0x40067474
+ TIOCGPGRP = 0x40047477
+ TIOCGSID = 0x40047448
+ TIOCGSIZE = 0x40087468
+ TIOCGWINSZ = 0x40087468
+ TIOCHPCL = 0x20007402
+ TIOCLBIC = 0xffffffff8004747e
+ TIOCLBIS = 0xffffffff8004747f
+ TIOCLGET = 0x4004747c
+ TIOCLSET = 0xffffffff8004747d
+ TIOCMBIC = 0xffffffff8004746b
+ TIOCMBIS = 0xffffffff8004746c
+ TIOCMGET = 0x4004746a
+ TIOCMIWAIT = 0xffffffff80047464
+ TIOCMODG = 0x40047403
+ TIOCMODS = 0xffffffff80047404
+ TIOCMSET = 0xffffffff8004746d
+ TIOCM_CAR = 0x40
+ TIOCM_CD = 0x40
+ TIOCM_CTS = 0x20
+ TIOCM_DSR = 0x100
+ TIOCM_DTR = 0x2
+ TIOCM_LE = 0x1
+ TIOCM_RI = 0x80
+ TIOCM_RNG = 0x80
+ TIOCM_RTS = 0x4
+ TIOCM_SR = 0x10
+ TIOCM_ST = 0x8
+ TIOCNOTTY = 0x20007471
+ TIOCNXCL = 0x2000740e
+ TIOCOUTQ = 0x40047473
+ TIOCPKT = 0xffffffff80047470
+ TIOCPKT_DATA = 0x0
+ TIOCPKT_DOSTOP = 0x20
+ TIOCPKT_FLUSHREAD = 0x1
+ TIOCPKT_FLUSHWRITE = 0x2
+ TIOCPKT_NOSTOP = 0x10
+ TIOCPKT_START = 0x8
+ TIOCPKT_STOP = 0x4
+ TIOCREMOTE = 0xffffffff80047469
+ TIOCSBRK = 0x2000747b
+ TIOCSDTR = 0x20007479
+ TIOCSETC = 0xffffffff80067411
+ TIOCSETD = 0xffffffff80047401
+ TIOCSETN = 0xffffffff8006740a
+ TIOCSETP = 0xffffffff80067409
+ TIOCSLTC = 0xffffffff80067475
+ TIOCSPGRP = 0xffffffff80047476
+ TIOCSSIZE = 0xffffffff80087467
+ TIOCSTART = 0x2000746e
+ TIOCSTI = 0xffffffff80017472
+ TIOCSTOP = 0x2000746f
+ TIOCSWINSZ = 0xffffffff80087467
+ TIOCUCNTL = 0xffffffff80047466
+ TOSTOP = 0x10000
+ UTIME_NOW = -0x2
+ UTIME_OMIT = -0x3
+ VDISCRD = 0xc
+ VDSUSP = 0xa
+ VEOF = 0x4
+ VEOL = 0x5
+ VEOL2 = 0x6
+ VERASE = 0x2
+ VINTR = 0x0
+ VKILL = 0x3
+ VLNEXT = 0xe
+ VMIN = 0x4
+ VQUIT = 0x1
+ VREPRINT = 0xb
+ VSTART = 0x7
+ VSTOP = 0x8
+ VSTRT = 0x7
+ VSUSP = 0x9
+ VT0 = 0x0
+ VT1 = 0x8000
+ VTDELAY = 0x2000
+ VTDLY = 0x8000
+ VTIME = 0x5
+ VWERSE = 0xd
+ WPARSTART = 0x1
+ WPARSTOP = 0x2
+ WPARTTYNAME = "Global"
+ XCASE = 0x4
+ XTABS = 0xc00
+ _FDATAFLUSH = 0x2000000000
+)
+
+// Errors
+const (
+ E2BIG = syscall.Errno(0x7)
+ EACCES = syscall.Errno(0xd)
+ EADDRINUSE = syscall.Errno(0x43)
+ EADDRNOTAVAIL = syscall.Errno(0x44)
+ EAFNOSUPPORT = syscall.Errno(0x42)
+ EAGAIN = syscall.Errno(0xb)
+ EALREADY = syscall.Errno(0x38)
+ EBADF = syscall.Errno(0x9)
+ EBADMSG = syscall.Errno(0x78)
+ EBUSY = syscall.Errno(0x10)
+ ECANCELED = syscall.Errno(0x75)
+ ECHILD = syscall.Errno(0xa)
+ ECHRNG = syscall.Errno(0x25)
+ ECLONEME = syscall.Errno(0x52)
+ ECONNABORTED = syscall.Errno(0x48)
+ ECONNREFUSED = syscall.Errno(0x4f)
+ ECONNRESET = syscall.Errno(0x49)
+ ECORRUPT = syscall.Errno(0x59)
+ EDEADLK = syscall.Errno(0x2d)
+ EDESTADDREQ = syscall.Errno(0x3a)
+ EDESTADDRREQ = syscall.Errno(0x3a)
+ EDIST = syscall.Errno(0x35)
+ EDOM = syscall.Errno(0x21)
+ EDQUOT = syscall.Errno(0x58)
+ EEXIST = syscall.Errno(0x11)
+ EFAULT = syscall.Errno(0xe)
+ EFBIG = syscall.Errno(0x1b)
+ EFORMAT = syscall.Errno(0x30)
+ EHOSTDOWN = syscall.Errno(0x50)
+ EHOSTUNREACH = syscall.Errno(0x51)
+ EIDRM = syscall.Errno(0x24)
+ EILSEQ = syscall.Errno(0x74)
+ EINPROGRESS = syscall.Errno(0x37)
+ EINTR = syscall.Errno(0x4)
+ EINVAL = syscall.Errno(0x16)
+ EIO = syscall.Errno(0x5)
+ EISCONN = syscall.Errno(0x4b)
+ EISDIR = syscall.Errno(0x15)
+ EL2HLT = syscall.Errno(0x2c)
+ EL2NSYNC = syscall.Errno(0x26)
+ EL3HLT = syscall.Errno(0x27)
+ EL3RST = syscall.Errno(0x28)
+ ELNRNG = syscall.Errno(0x29)
+ ELOOP = syscall.Errno(0x55)
+ EMEDIA = syscall.Errno(0x6e)
+ EMFILE = syscall.Errno(0x18)
+ EMLINK = syscall.Errno(0x1f)
+ EMSGSIZE = syscall.Errno(0x3b)
+ EMULTIHOP = syscall.Errno(0x7d)
+ ENAMETOOLONG = syscall.Errno(0x56)
+ ENETDOWN = syscall.Errno(0x45)
+ ENETRESET = syscall.Errno(0x47)
+ ENETUNREACH = syscall.Errno(0x46)
+ ENFILE = syscall.Errno(0x17)
+ ENOATTR = syscall.Errno(0x70)
+ ENOBUFS = syscall.Errno(0x4a)
+ ENOCONNECT = syscall.Errno(0x32)
+ ENOCSI = syscall.Errno(0x2b)
+ ENODATA = syscall.Errno(0x7a)
+ ENODEV = syscall.Errno(0x13)
+ ENOENT = syscall.Errno(0x2)
+ ENOEXEC = syscall.Errno(0x8)
+ ENOLCK = syscall.Errno(0x31)
+ ENOLINK = syscall.Errno(0x7e)
+ ENOMEM = syscall.Errno(0xc)
+ ENOMSG = syscall.Errno(0x23)
+ ENOPROTOOPT = syscall.Errno(0x3d)
+ ENOSPC = syscall.Errno(0x1c)
+ ENOSR = syscall.Errno(0x76)
+ ENOSTR = syscall.Errno(0x7b)
+ ENOSYS = syscall.Errno(0x6d)
+ ENOTBLK = syscall.Errno(0xf)
+ ENOTCONN = syscall.Errno(0x4c)
+ ENOTDIR = syscall.Errno(0x14)
+ ENOTEMPTY = syscall.Errno(0x11)
+ ENOTREADY = syscall.Errno(0x2e)
+ ENOTRECOVERABLE = syscall.Errno(0x5e)
+ ENOTRUST = syscall.Errno(0x72)
+ ENOTSOCK = syscall.Errno(0x39)
+ ENOTSUP = syscall.Errno(0x7c)
+ ENOTTY = syscall.Errno(0x19)
+ ENXIO = syscall.Errno(0x6)
+ EOPNOTSUPP = syscall.Errno(0x40)
+ EOVERFLOW = syscall.Errno(0x7f)
+ EOWNERDEAD = syscall.Errno(0x5f)
+ EPERM = syscall.Errno(0x1)
+ EPFNOSUPPORT = syscall.Errno(0x41)
+ EPIPE = syscall.Errno(0x20)
+ EPROCLIM = syscall.Errno(0x53)
+ EPROTO = syscall.Errno(0x79)
+ EPROTONOSUPPORT = syscall.Errno(0x3e)
+ EPROTOTYPE = syscall.Errno(0x3c)
+ ERANGE = syscall.Errno(0x22)
+ EREMOTE = syscall.Errno(0x5d)
+ ERESTART = syscall.Errno(0x52)
+ EROFS = syscall.Errno(0x1e)
+ ESAD = syscall.Errno(0x71)
+ ESHUTDOWN = syscall.Errno(0x4d)
+ ESOCKTNOSUPPORT = syscall.Errno(0x3f)
+ ESOFT = syscall.Errno(0x6f)
+ ESPIPE = syscall.Errno(0x1d)
+ ESRCH = syscall.Errno(0x3)
+ ESTALE = syscall.Errno(0x34)
+ ESYSERROR = syscall.Errno(0x5a)
+ ETIME = syscall.Errno(0x77)
+ ETIMEDOUT = syscall.Errno(0x4e)
+ ETOOMANYREFS = syscall.Errno(0x73)
+ ETXTBSY = syscall.Errno(0x1a)
+ EUNATCH = syscall.Errno(0x2a)
+ EUSERS = syscall.Errno(0x54)
+ EWOULDBLOCK = syscall.Errno(0xb)
+ EWRPROTECT = syscall.Errno(0x2f)
+ EXDEV = syscall.Errno(0x12)
+)
+
+// Signals
+const (
+ SIGABRT = syscall.Signal(0x6)
+ SIGAIO = syscall.Signal(0x17)
+ SIGALRM = syscall.Signal(0xe)
+ SIGALRM1 = syscall.Signal(0x26)
+ SIGBUS = syscall.Signal(0xa)
+ SIGCAPI = syscall.Signal(0x31)
+ SIGCHLD = syscall.Signal(0x14)
+ SIGCLD = syscall.Signal(0x14)
+ SIGCONT = syscall.Signal(0x13)
+ SIGCPUFAIL = syscall.Signal(0x3b)
+ SIGDANGER = syscall.Signal(0x21)
+ SIGEMT = syscall.Signal(0x7)
+ SIGFPE = syscall.Signal(0x8)
+ SIGGRANT = syscall.Signal(0x3c)
+ SIGHUP = syscall.Signal(0x1)
+ SIGILL = syscall.Signal(0x4)
+ SIGINT = syscall.Signal(0x2)
+ SIGIO = syscall.Signal(0x17)
+ SIGIOINT = syscall.Signal(0x10)
+ SIGIOT = syscall.Signal(0x6)
+ SIGKAP = syscall.Signal(0x3c)
+ SIGKILL = syscall.Signal(0x9)
+ SIGLOST = syscall.Signal(0x6)
+ SIGMAX = syscall.Signal(0xff)
+ SIGMAX32 = syscall.Signal(0x3f)
+ SIGMIGRATE = syscall.Signal(0x23)
+ SIGMSG = syscall.Signal(0x1b)
+ SIGPIPE = syscall.Signal(0xd)
+ SIGPOLL = syscall.Signal(0x17)
+ SIGPRE = syscall.Signal(0x24)
+ SIGPROF = syscall.Signal(0x20)
+ SIGPTY = syscall.Signal(0x17)
+ SIGPWR = syscall.Signal(0x1d)
+ SIGQUIT = syscall.Signal(0x3)
+ SIGRECONFIG = syscall.Signal(0x3a)
+ SIGRETRACT = syscall.Signal(0x3d)
+ SIGSAK = syscall.Signal(0x3f)
+ SIGSEGV = syscall.Signal(0xb)
+ SIGSOUND = syscall.Signal(0x3e)
+ SIGSTOP = syscall.Signal(0x11)
+ SIGSYS = syscall.Signal(0xc)
+ SIGSYSERROR = syscall.Signal(0x30)
+ SIGTALRM = syscall.Signal(0x26)
+ SIGTERM = syscall.Signal(0xf)
+ SIGTRAP = syscall.Signal(0x5)
+ SIGTSTP = syscall.Signal(0x12)
+ SIGTTIN = syscall.Signal(0x15)
+ SIGTTOU = syscall.Signal(0x16)
+ SIGURG = syscall.Signal(0x10)
+ SIGUSR1 = syscall.Signal(0x1e)
+ SIGUSR2 = syscall.Signal(0x1f)
+ SIGVIRT = syscall.Signal(0x25)
+ SIGVTALRM = syscall.Signal(0x22)
+ SIGWAITING = syscall.Signal(0x27)
+ SIGWINCH = syscall.Signal(0x1c)
+ SIGXCPU = syscall.Signal(0x18)
+ SIGXFSZ = syscall.Signal(0x19)
+)
+
+// Error table
+var errorList = [...]struct {
+ num syscall.Errno
+ name string
+ desc string
+}{
+ {1, "EPERM", "not owner"},
+ {2, "ENOENT", "no such file or directory"},
+ {3, "ESRCH", "no such process"},
+ {4, "EINTR", "interrupted system call"},
+ {5, "EIO", "I/O error"},
+ {6, "ENXIO", "no such device or address"},
+ {7, "E2BIG", "arg list too long"},
+ {8, "ENOEXEC", "exec format error"},
+ {9, "EBADF", "bad file number"},
+ {10, "ECHILD", "no child processes"},
+ {11, "EWOULDBLOCK", "resource temporarily unavailable"},
+ {12, "ENOMEM", "not enough space"},
+ {13, "EACCES", "permission denied"},
+ {14, "EFAULT", "bad address"},
+ {15, "ENOTBLK", "block device required"},
+ {16, "EBUSY", "device busy"},
+ {17, "ENOTEMPTY", "file exists"},
+ {18, "EXDEV", "cross-device link"},
+ {19, "ENODEV", "no such device"},
+ {20, "ENOTDIR", "not a directory"},
+ {21, "EISDIR", "is a directory"},
+ {22, "EINVAL", "invalid argument"},
+ {23, "ENFILE", "file table overflow"},
+ {24, "EMFILE", "too many open files"},
+ {25, "ENOTTY", "not a typewriter"},
+ {26, "ETXTBSY", "text file busy"},
+ {27, "EFBIG", "file too large"},
+ {28, "ENOSPC", "no space left on device"},
+ {29, "ESPIPE", "illegal seek"},
+ {30, "EROFS", "read-only file system"},
+ {31, "EMLINK", "too many links"},
+ {32, "EPIPE", "broken pipe"},
+ {33, "EDOM", "argument out of domain"},
+ {34, "ERANGE", "result too large"},
+ {35, "ENOMSG", "no message of desired type"},
+ {36, "EIDRM", "identifier removed"},
+ {37, "ECHRNG", "channel number out of range"},
+ {38, "EL2NSYNC", "level 2 not synchronized"},
+ {39, "EL3HLT", "level 3 halted"},
+ {40, "EL3RST", "level 3 reset"},
+ {41, "ELNRNG", "link number out of range"},
+ {42, "EUNATCH", "protocol driver not attached"},
+ {43, "ENOCSI", "no CSI structure available"},
+ {44, "EL2HLT", "level 2 halted"},
+ {45, "EDEADLK", "deadlock condition if locked"},
+ {46, "ENOTREADY", "device not ready"},
+ {47, "EWRPROTECT", "write-protected media"},
+ {48, "EFORMAT", "unformatted or incompatible media"},
+ {49, "ENOLCK", "no locks available"},
+ {50, "ENOCONNECT", "cannot Establish Connection"},
+ {52, "ESTALE", "missing file or filesystem"},
+ {53, "EDIST", "requests blocked by Administrator"},
+ {55, "EINPROGRESS", "operation now in progress"},
+ {56, "EALREADY", "operation already in progress"},
+ {57, "ENOTSOCK", "socket operation on non-socket"},
+ {58, "EDESTADDREQ", "destination address required"},
+ {59, "EMSGSIZE", "message too long"},
+ {60, "EPROTOTYPE", "protocol wrong type for socket"},
+ {61, "ENOPROTOOPT", "protocol not available"},
+ {62, "EPROTONOSUPPORT", "protocol not supported"},
+ {63, "ESOCKTNOSUPPORT", "socket type not supported"},
+ {64, "EOPNOTSUPP", "operation not supported on socket"},
+ {65, "EPFNOSUPPORT", "protocol family not supported"},
+ {66, "EAFNOSUPPORT", "addr family not supported by protocol"},
+ {67, "EADDRINUSE", "address already in use"},
+ {68, "EADDRNOTAVAIL", "can't assign requested address"},
+ {69, "ENETDOWN", "network is down"},
+ {70, "ENETUNREACH", "network is unreachable"},
+ {71, "ENETRESET", "network dropped connection on reset"},
+ {72, "ECONNABORTED", "software caused connection abort"},
+ {73, "ECONNRESET", "connection reset by peer"},
+ {74, "ENOBUFS", "no buffer space available"},
+ {75, "EISCONN", "socket is already connected"},
+ {76, "ENOTCONN", "socket is not connected"},
+ {77, "ESHUTDOWN", "can't send after socket shutdown"},
+ {78, "ETIMEDOUT", "connection timed out"},
+ {79, "ECONNREFUSED", "connection refused"},
+ {80, "EHOSTDOWN", "host is down"},
+ {81, "EHOSTUNREACH", "no route to host"},
+ {82, "ERESTART", "restart the system call"},
+ {83, "EPROCLIM", "too many processes"},
+ {84, "EUSERS", "too many users"},
+ {85, "ELOOP", "too many levels of symbolic links"},
+ {86, "ENAMETOOLONG", "file name too long"},
+ {88, "EDQUOT", "disk quota exceeded"},
+ {89, "ECORRUPT", "invalid file system control data detected"},
+ {90, "ESYSERROR", "for future use "},
+ {93, "EREMOTE", "item is not local to host"},
+ {94, "ENOTRECOVERABLE", "state not recoverable "},
+ {95, "EOWNERDEAD", "previous owner died "},
+ {109, "ENOSYS", "function not implemented"},
+ {110, "EMEDIA", "media surface error"},
+ {111, "ESOFT", "I/O completed, but needs relocation"},
+ {112, "ENOATTR", "no attribute found"},
+ {113, "ESAD", "security Authentication Denied"},
+ {114, "ENOTRUST", "not a Trusted Program"},
+ {115, "ETOOMANYREFS", "too many references: can't splice"},
+ {116, "EILSEQ", "invalid wide character"},
+ {117, "ECANCELED", "asynchronous I/O cancelled"},
+ {118, "ENOSR", "out of STREAMS resources"},
+ {119, "ETIME", "system call timed out"},
+ {120, "EBADMSG", "next message has wrong type"},
+ {121, "EPROTO", "error in protocol"},
+ {122, "ENODATA", "no message on stream head read q"},
+ {123, "ENOSTR", "fd not associated with a stream"},
+ {124, "ENOTSUP", "unsupported attribute value"},
+ {125, "EMULTIHOP", "multihop is not allowed"},
+ {126, "ENOLINK", "the server link has been severed"},
+ {127, "EOVERFLOW", "value too large to be stored in data type"},
+}
+
+// Signal table
+var signalList = [...]struct {
+ num syscall.Signal
+ name string
+ desc string
+}{
+ {1, "SIGHUP", "hangup"},
+ {2, "SIGINT", "interrupt"},
+ {3, "SIGQUIT", "quit"},
+ {4, "SIGILL", "illegal instruction"},
+ {5, "SIGTRAP", "trace/BPT trap"},
+ {6, "SIGIOT", "IOT/Abort trap"},
+ {7, "SIGEMT", "EMT trap"},
+ {8, "SIGFPE", "floating point exception"},
+ {9, "SIGKILL", "killed"},
+ {10, "SIGBUS", "bus error"},
+ {11, "SIGSEGV", "segmentation fault"},
+ {12, "SIGSYS", "bad system call"},
+ {13, "SIGPIPE", "broken pipe"},
+ {14, "SIGALRM", "alarm clock"},
+ {15, "SIGTERM", "terminated"},
+ {16, "SIGURG", "urgent I/O condition"},
+ {17, "SIGSTOP", "stopped (signal)"},
+ {18, "SIGTSTP", "stopped"},
+ {19, "SIGCONT", "continued"},
+ {20, "SIGCHLD", "child exited"},
+ {21, "SIGTTIN", "stopped (tty input)"},
+ {22, "SIGTTOU", "stopped (tty output)"},
+ {23, "SIGIO", "I/O possible/complete"},
+ {24, "SIGXCPU", "cputime limit exceeded"},
+ {25, "SIGXFSZ", "filesize limit exceeded"},
+ {27, "SIGMSG", "input device data"},
+ {28, "SIGWINCH", "window size changes"},
+ {29, "SIGPWR", "power-failure"},
+ {30, "SIGUSR1", "user defined signal 1"},
+ {31, "SIGUSR2", "user defined signal 2"},
+ {32, "SIGPROF", "profiling timer expired"},
+ {33, "SIGDANGER", "paging space low"},
+ {34, "SIGVTALRM", "virtual timer expired"},
+ {35, "SIGMIGRATE", "signal 35"},
+ {36, "SIGPRE", "signal 36"},
+ {37, "SIGVIRT", "signal 37"},
+ {38, "SIGTALRM", "signal 38"},
+ {39, "SIGWAITING", "signal 39"},
+ {48, "SIGSYSERROR", "signal 48"},
+ {49, "SIGCAPI", "signal 49"},
+ {58, "SIGRECONFIG", "signal 58"},
+ {59, "SIGCPUFAIL", "CPU Failure Predicted"},
+ {60, "SIGGRANT", "monitor mode granted"},
+ {61, "SIGRETRACT", "monitor mode retracted"},
+ {62, "SIGSOUND", "sound completed"},
+ {63, "SIGMAX32", "secure attention"},
+ {255, "SIGMAX", "signal 255"},
+}
diff --git a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
index 46a082b6d..bbe6089bb 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go
@@ -3,7 +3,7 @@
// +build amd64,dragonfly
-// Created by cgo -godefs - DO NOT EDIT
+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
// cgo -godefs -- -m64 _const.go
package unix
@@ -880,6 +880,40 @@ const (
MAP_VPAGETABLE = 0x2000
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
+ MNT_ASYNC = 0x40
+ MNT_AUTOMOUNTED = 0x20
+ MNT_CMDFLAGS = 0xf0000
+ MNT_DEFEXPORTED = 0x200
+ MNT_DELEXPORT = 0x20000
+ MNT_EXKERB = 0x800
+ MNT_EXPORTANON = 0x400
+ MNT_EXPORTED = 0x100
+ MNT_EXPUBLIC = 0x20000000
+ MNT_EXRDONLY = 0x80
+ MNT_FORCE = 0x80000
+ MNT_IGNORE = 0x800000
+ MNT_LAZY = 0x4
+ MNT_LOCAL = 0x1000
+ MNT_NOATIME = 0x10000000
+ MNT_NOCLUSTERR = 0x40000000
+ MNT_NOCLUSTERW = 0x80000000
+ MNT_NODEV = 0x10
+ MNT_NOEXEC = 0x4
+ MNT_NOSUID = 0x8
+ MNT_NOSYMFOLLOW = 0x400000
+ MNT_NOWAIT = 0x2
+ MNT_QUOTA = 0x2000
+ MNT_RDONLY = 0x1
+ MNT_RELOAD = 0x40000
+ MNT_ROOTFS = 0x4000
+ MNT_SOFTDEP = 0x200000
+ MNT_SUIDDIR = 0x100000
+ MNT_SYNCHRONOUS = 0x2
+ MNT_TRIM = 0x1000000
+ MNT_UPDATE = 0x10000
+ MNT_USER = 0x8000
+ MNT_VISFLAGMASK = 0xf1f0ffff
+ MNT_WAIT = 0x1
MSG_CMSG_CLOEXEC = 0x1000
MSG_CTRUNC = 0x20
MSG_DONTROUTE = 0x4
@@ -1168,6 +1202,36 @@ const (
SO_TIMESTAMP = 0x400
SO_TYPE = 0x1008
SO_USELOOPBACK = 0x40
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDB = 0x9000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFWHT = 0xe000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TCIFLUSH = 0x1
TCIOFF = 0x3
TCIOFLUSH = 0x3
diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
index 2947dc038..d2bbaabc8 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go
@@ -1345,6 +1345,35 @@ const (
SO_USELOOPBACK = 0x40
SO_USER_COOKIE = 0x1015
SO_VENDOR = 0x80000000
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFWHT = 0xe000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TAB0 = 0x0
TAB3 = 0x4
TABDLY = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
index c600d012d..4f8db783d 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go
@@ -1346,6 +1346,35 @@ const (
SO_USELOOPBACK = 0x40
SO_USER_COOKIE = 0x1015
SO_VENDOR = 0x80000000
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFWHT = 0xe000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TAB0 = 0x0
TAB3 = 0x4
TABDLY = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go
index e8240d239..53e5de605 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go
@@ -1354,6 +1354,35 @@ const (
SO_USELOOPBACK = 0x40
SO_USER_COOKIE = 0x1015
SO_VENDOR = 0x80000000
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFWHT = 0xe000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TAB0 = 0x0
TAB3 = 0x4
TABDLY = 0x4
diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go
new file mode 100644
index 000000000..d4a192fef
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go
@@ -0,0 +1,1794 @@
+// mkerrors.sh -m64
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build arm64,freebsd
+
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs -- -m64 _const.go
+
+package unix
+
+import "syscall"
+
+const (
+ AF_APPLETALK = 0x10
+ AF_ARP = 0x23
+ AF_ATM = 0x1e
+ AF_BLUETOOTH = 0x24
+ AF_CCITT = 0xa
+ AF_CHAOS = 0x5
+ AF_CNT = 0x15
+ AF_COIP = 0x14
+ AF_DATAKIT = 0x9
+ AF_DECnet = 0xc
+ AF_DLI = 0xd
+ AF_E164 = 0x1a
+ AF_ECMA = 0x8
+ AF_HYLINK = 0xf
+ AF_IEEE80211 = 0x25
+ AF_IMPLINK = 0x3
+ AF_INET = 0x2
+ AF_INET6 = 0x1c
+ AF_INET6_SDP = 0x2a
+ AF_INET_SDP = 0x28
+ AF_IPX = 0x17
+ AF_ISDN = 0x1a
+ AF_ISO = 0x7
+ AF_LAT = 0xe
+ AF_LINK = 0x12
+ AF_LOCAL = 0x1
+ AF_MAX = 0x2a
+ AF_NATM = 0x1d
+ AF_NETBIOS = 0x6
+ AF_NETGRAPH = 0x20
+ AF_OSI = 0x7
+ AF_PUP = 0x4
+ AF_ROUTE = 0x11
+ AF_SCLUSTER = 0x22
+ AF_SIP = 0x18
+ AF_SLOW = 0x21
+ AF_SNA = 0xb
+ AF_UNIX = 0x1
+ AF_UNSPEC = 0x0
+ AF_VENDOR00 = 0x27
+ AF_VENDOR01 = 0x29
+ AF_VENDOR02 = 0x2b
+ AF_VENDOR03 = 0x2d
+ AF_VENDOR04 = 0x2f
+ AF_VENDOR05 = 0x31
+ AF_VENDOR06 = 0x33
+ AF_VENDOR07 = 0x35
+ AF_VENDOR08 = 0x37
+ AF_VENDOR09 = 0x39
+ AF_VENDOR10 = 0x3b
+ AF_VENDOR11 = 0x3d
+ AF_VENDOR12 = 0x3f
+ AF_VENDOR13 = 0x41
+ AF_VENDOR14 = 0x43
+ AF_VENDOR15 = 0x45
+ AF_VENDOR16 = 0x47
+ AF_VENDOR17 = 0x49
+ AF_VENDOR18 = 0x4b
+ AF_VENDOR19 = 0x4d
+ AF_VENDOR20 = 0x4f
+ AF_VENDOR21 = 0x51
+ AF_VENDOR22 = 0x53
+ AF_VENDOR23 = 0x55
+ AF_VENDOR24 = 0x57
+ AF_VENDOR25 = 0x59
+ AF_VENDOR26 = 0x5b
+ AF_VENDOR27 = 0x5d
+ AF_VENDOR28 = 0x5f
+ AF_VENDOR29 = 0x61
+ AF_VENDOR30 = 0x63
+ AF_VENDOR31 = 0x65
+ AF_VENDOR32 = 0x67
+ AF_VENDOR33 = 0x69
+ AF_VENDOR34 = 0x6b
+ AF_VENDOR35 = 0x6d
+ AF_VENDOR36 = 0x6f
+ AF_VENDOR37 = 0x71
+ AF_VENDOR38 = 0x73
+ AF_VENDOR39 = 0x75
+ AF_VENDOR40 = 0x77
+ AF_VENDOR41 = 0x79
+ AF_VENDOR42 = 0x7b
+ AF_VENDOR43 = 0x7d
+ AF_VENDOR44 = 0x7f
+ AF_VENDOR45 = 0x81
+ AF_VENDOR46 = 0x83
+ AF_VENDOR47 = 0x85
+ ALTWERASE = 0x200
+ B0 = 0x0
+ B110 = 0x6e
+ B115200 = 0x1c200
+ B1200 = 0x4b0
+ B134 = 0x86
+ B14400 = 0x3840
+ B150 = 0x96
+ B1800 = 0x708
+ B19200 = 0x4b00
+ B200 = 0xc8
+ B230400 = 0x38400
+ B2400 = 0x960
+ B28800 = 0x7080
+ B300 = 0x12c
+ B38400 = 0x9600
+ B460800 = 0x70800
+ B4800 = 0x12c0
+ B50 = 0x32
+ B57600 = 0xe100
+ B600 = 0x258
+ B7200 = 0x1c20
+ B75 = 0x4b
+ B76800 = 0x12c00
+ B921600 = 0xe1000
+ B9600 = 0x2580
+ BIOCFEEDBACK = 0x8004427c
+ BIOCFLUSH = 0x20004268
+ BIOCGBLEN = 0x40044266
+ BIOCGDIRECTION = 0x40044276
+ BIOCGDLT = 0x4004426a
+ BIOCGDLTLIST = 0xc0104279
+ BIOCGETBUFMODE = 0x4004427d
+ BIOCGETIF = 0x4020426b
+ BIOCGETZMAX = 0x4008427f
+ BIOCGHDRCMPLT = 0x40044274
+ BIOCGRSIG = 0x40044272
+ BIOCGRTIMEOUT = 0x4010426e
+ BIOCGSEESENT = 0x40044276
+ BIOCGSTATS = 0x4008426f
+ BIOCGTSTAMP = 0x40044283
+ BIOCIMMEDIATE = 0x80044270
+ BIOCLOCK = 0x2000427a
+ BIOCPROMISC = 0x20004269
+ BIOCROTZBUF = 0x40184280
+ BIOCSBLEN = 0xc0044266
+ BIOCSDIRECTION = 0x80044277
+ BIOCSDLT = 0x80044278
+ BIOCSETBUFMODE = 0x8004427e
+ BIOCSETF = 0x80104267
+ BIOCSETFNR = 0x80104282
+ BIOCSETIF = 0x8020426c
+ BIOCSETWF = 0x8010427b
+ BIOCSETZBUF = 0x80184281
+ BIOCSHDRCMPLT = 0x80044275
+ BIOCSRSIG = 0x80044273
+ BIOCSRTIMEOUT = 0x8010426d
+ BIOCSSEESENT = 0x80044277
+ BIOCSTSTAMP = 0x80044284
+ BIOCVERSION = 0x40044271
+ BPF_A = 0x10
+ BPF_ABS = 0x20
+ BPF_ADD = 0x0
+ BPF_ALIGNMENT = 0x8
+ BPF_ALU = 0x4
+ BPF_AND = 0x50
+ BPF_B = 0x10
+ BPF_BUFMODE_BUFFER = 0x1
+ BPF_BUFMODE_ZBUF = 0x2
+ BPF_DIV = 0x30
+ BPF_H = 0x8
+ BPF_IMM = 0x0
+ BPF_IND = 0x40
+ BPF_JA = 0x0
+ BPF_JEQ = 0x10
+ BPF_JGE = 0x30
+ BPF_JGT = 0x20
+ BPF_JMP = 0x5
+ BPF_JSET = 0x40
+ BPF_K = 0x0
+ BPF_LD = 0x0
+ BPF_LDX = 0x1
+ BPF_LEN = 0x80
+ BPF_LSH = 0x60
+ BPF_MAJOR_VERSION = 0x1
+ BPF_MAXBUFSIZE = 0x80000
+ BPF_MAXINSNS = 0x200
+ BPF_MEM = 0x60
+ BPF_MEMWORDS = 0x10
+ BPF_MINBUFSIZE = 0x20
+ BPF_MINOR_VERSION = 0x1
+ BPF_MISC = 0x7
+ BPF_MOD = 0x90
+ BPF_MSH = 0xa0
+ BPF_MUL = 0x20
+ BPF_NEG = 0x80
+ BPF_OR = 0x40
+ BPF_RELEASE = 0x30bb6
+ BPF_RET = 0x6
+ BPF_RSH = 0x70
+ BPF_ST = 0x2
+ BPF_STX = 0x3
+ BPF_SUB = 0x10
+ BPF_TAX = 0x0
+ BPF_TXA = 0x80
+ BPF_T_BINTIME = 0x2
+ BPF_T_BINTIME_FAST = 0x102
+ BPF_T_BINTIME_MONOTONIC = 0x202
+ BPF_T_BINTIME_MONOTONIC_FAST = 0x302
+ BPF_T_FAST = 0x100
+ BPF_T_FLAG_MASK = 0x300
+ BPF_T_FORMAT_MASK = 0x3
+ BPF_T_MICROTIME = 0x0
+ BPF_T_MICROTIME_FAST = 0x100
+ BPF_T_MICROTIME_MONOTONIC = 0x200
+ BPF_T_MICROTIME_MONOTONIC_FAST = 0x300
+ BPF_T_MONOTONIC = 0x200
+ BPF_T_MONOTONIC_FAST = 0x300
+ BPF_T_NANOTIME = 0x1
+ BPF_T_NANOTIME_FAST = 0x101
+ BPF_T_NANOTIME_MONOTONIC = 0x201
+ BPF_T_NANOTIME_MONOTONIC_FAST = 0x301
+ BPF_T_NONE = 0x3
+ BPF_T_NORMAL = 0x0
+ BPF_W = 0x0
+ BPF_X = 0x8
+ BPF_XOR = 0xa0
+ BRKINT = 0x2
+ CAP_ACCEPT = 0x200000020000000
+ CAP_ACL_CHECK = 0x400000000010000
+ CAP_ACL_DELETE = 0x400000000020000
+ CAP_ACL_GET = 0x400000000040000
+ CAP_ACL_SET = 0x400000000080000
+ CAP_ALL0 = 0x20007ffffffffff
+ CAP_ALL1 = 0x4000000001fffff
+ CAP_BIND = 0x200000040000000
+ CAP_BINDAT = 0x200008000000400
+ CAP_CHFLAGSAT = 0x200000000001400
+ CAP_CONNECT = 0x200000080000000
+ CAP_CONNECTAT = 0x200010000000400
+ CAP_CREATE = 0x200000000000040
+ CAP_EVENT = 0x400000000000020
+ CAP_EXTATTR_DELETE = 0x400000000001000
+ CAP_EXTATTR_GET = 0x400000000002000
+ CAP_EXTATTR_LIST = 0x400000000004000
+ CAP_EXTATTR_SET = 0x400000000008000
+ CAP_FCHDIR = 0x200000000000800
+ CAP_FCHFLAGS = 0x200000000001000
+ CAP_FCHMOD = 0x200000000002000
+ CAP_FCHMODAT = 0x200000000002400
+ CAP_FCHOWN = 0x200000000004000
+ CAP_FCHOWNAT = 0x200000000004400
+ CAP_FCNTL = 0x200000000008000
+ CAP_FCNTL_ALL = 0x78
+ CAP_FCNTL_GETFL = 0x8
+ CAP_FCNTL_GETOWN = 0x20
+ CAP_FCNTL_SETFL = 0x10
+ CAP_FCNTL_SETOWN = 0x40
+ CAP_FEXECVE = 0x200000000000080
+ CAP_FLOCK = 0x200000000010000
+ CAP_FPATHCONF = 0x200000000020000
+ CAP_FSCK = 0x200000000040000
+ CAP_FSTAT = 0x200000000080000
+ CAP_FSTATAT = 0x200000000080400
+ CAP_FSTATFS = 0x200000000100000
+ CAP_FSYNC = 0x200000000000100
+ CAP_FTRUNCATE = 0x200000000000200
+ CAP_FUTIMES = 0x200000000200000
+ CAP_FUTIMESAT = 0x200000000200400
+ CAP_GETPEERNAME = 0x200000100000000
+ CAP_GETSOCKNAME = 0x200000200000000
+ CAP_GETSOCKOPT = 0x200000400000000
+ CAP_IOCTL = 0x400000000000080
+ CAP_IOCTLS_ALL = 0x7fffffffffffffff
+ CAP_KQUEUE = 0x400000000100040
+ CAP_KQUEUE_CHANGE = 0x400000000100000
+ CAP_KQUEUE_EVENT = 0x400000000000040
+ CAP_LINKAT_SOURCE = 0x200020000000400
+ CAP_LINKAT_TARGET = 0x200000000400400
+ CAP_LISTEN = 0x200000800000000
+ CAP_LOOKUP = 0x200000000000400
+ CAP_MAC_GET = 0x400000000000001
+ CAP_MAC_SET = 0x400000000000002
+ CAP_MKDIRAT = 0x200000000800400
+ CAP_MKFIFOAT = 0x200000001000400
+ CAP_MKNODAT = 0x200000002000400
+ CAP_MMAP = 0x200000000000010
+ CAP_MMAP_R = 0x20000000000001d
+ CAP_MMAP_RW = 0x20000000000001f
+ CAP_MMAP_RWX = 0x20000000000003f
+ CAP_MMAP_RX = 0x20000000000003d
+ CAP_MMAP_W = 0x20000000000001e
+ CAP_MMAP_WX = 0x20000000000003e
+ CAP_MMAP_X = 0x20000000000003c
+ CAP_PDGETPID = 0x400000000000200
+ CAP_PDKILL = 0x400000000000800
+ CAP_PDWAIT = 0x400000000000400
+ CAP_PEELOFF = 0x200001000000000
+ CAP_POLL_EVENT = 0x400000000000020
+ CAP_PREAD = 0x20000000000000d
+ CAP_PWRITE = 0x20000000000000e
+ CAP_READ = 0x200000000000001
+ CAP_RECV = 0x200000000000001
+ CAP_RENAMEAT_SOURCE = 0x200000004000400
+ CAP_RENAMEAT_TARGET = 0x200040000000400
+ CAP_RIGHTS_VERSION = 0x0
+ CAP_RIGHTS_VERSION_00 = 0x0
+ CAP_SEEK = 0x20000000000000c
+ CAP_SEEK_TELL = 0x200000000000004
+ CAP_SEM_GETVALUE = 0x400000000000004
+ CAP_SEM_POST = 0x400000000000008
+ CAP_SEM_WAIT = 0x400000000000010
+ CAP_SEND = 0x200000000000002
+ CAP_SETSOCKOPT = 0x200002000000000
+ CAP_SHUTDOWN = 0x200004000000000
+ CAP_SOCK_CLIENT = 0x200007780000003
+ CAP_SOCK_SERVER = 0x200007f60000003
+ CAP_SYMLINKAT = 0x200000008000400
+ CAP_TTYHOOK = 0x400000000000100
+ CAP_UNLINKAT = 0x200000010000400
+ CAP_UNUSED0_44 = 0x200080000000000
+ CAP_UNUSED0_57 = 0x300000000000000
+ CAP_UNUSED1_22 = 0x400000000200000
+ CAP_UNUSED1_57 = 0x500000000000000
+ CAP_WRITE = 0x200000000000002
+ CFLUSH = 0xf
+ CLOCAL = 0x8000
+ CLOCK_MONOTONIC = 0x4
+ CLOCK_MONOTONIC_FAST = 0xc
+ CLOCK_MONOTONIC_PRECISE = 0xb
+ CLOCK_PROCESS_CPUTIME_ID = 0xf
+ CLOCK_PROF = 0x2
+ CLOCK_REALTIME = 0x0
+ CLOCK_REALTIME_FAST = 0xa
+ CLOCK_REALTIME_PRECISE = 0x9
+ CLOCK_SECOND = 0xd
+ CLOCK_THREAD_CPUTIME_ID = 0xe
+ CLOCK_UPTIME = 0x5
+ CLOCK_UPTIME_FAST = 0x8
+ CLOCK_UPTIME_PRECISE = 0x7
+ CLOCK_VIRTUAL = 0x1
+ CREAD = 0x800
+ CRTSCTS = 0x30000
+ CS5 = 0x0
+ CS6 = 0x100
+ CS7 = 0x200
+ CS8 = 0x300
+ CSIZE = 0x300
+ CSTART = 0x11
+ CSTATUS = 0x14
+ CSTOP = 0x13
+ CSTOPB = 0x400
+ CSUSP = 0x1a
+ CTL_HW = 0x6
+ CTL_KERN = 0x1
+ CTL_MAXNAME = 0x18
+ CTL_NET = 0x4
+ DLT_A429 = 0xb8
+ DLT_A653_ICM = 0xb9
+ DLT_AIRONET_HEADER = 0x78
+ DLT_AOS = 0xde
+ DLT_APPLE_IP_OVER_IEEE1394 = 0x8a
+ DLT_ARCNET = 0x7
+ DLT_ARCNET_LINUX = 0x81
+ DLT_ATM_CLIP = 0x13
+ DLT_ATM_RFC1483 = 0xb
+ DLT_AURORA = 0x7e
+ DLT_AX25 = 0x3
+ DLT_AX25_KISS = 0xca
+ DLT_BACNET_MS_TP = 0xa5
+ DLT_BLUETOOTH_BREDR_BB = 0xff
+ DLT_BLUETOOTH_HCI_H4 = 0xbb
+ DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9
+ DLT_BLUETOOTH_LE_LL = 0xfb
+ DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100
+ DLT_BLUETOOTH_LINUX_MONITOR = 0xfe
+ DLT_CAN20B = 0xbe
+ DLT_CAN_SOCKETCAN = 0xe3
+ DLT_CHAOS = 0x5
+ DLT_CHDLC = 0x68
+ DLT_CISCO_IOS = 0x76
+ DLT_C_HDLC = 0x68
+ DLT_C_HDLC_WITH_DIR = 0xcd
+ DLT_DBUS = 0xe7
+ DLT_DECT = 0xdd
+ DLT_DOCSIS = 0x8f
+ DLT_DVB_CI = 0xeb
+ DLT_ECONET = 0x73
+ DLT_EN10MB = 0x1
+ DLT_EN3MB = 0x2
+ DLT_ENC = 0x6d
+ DLT_EPON = 0x103
+ DLT_ERF = 0xc5
+ DLT_ERF_ETH = 0xaf
+ DLT_ERF_POS = 0xb0
+ DLT_FC_2 = 0xe0
+ DLT_FC_2_WITH_FRAME_DELIMS = 0xe1
+ DLT_FDDI = 0xa
+ DLT_FLEXRAY = 0xd2
+ DLT_FRELAY = 0x6b
+ DLT_FRELAY_WITH_DIR = 0xce
+ DLT_GCOM_SERIAL = 0xad
+ DLT_GCOM_T1E1 = 0xac
+ DLT_GPF_F = 0xab
+ DLT_GPF_T = 0xaa
+ DLT_GPRS_LLC = 0xa9
+ DLT_GSMTAP_ABIS = 0xda
+ DLT_GSMTAP_UM = 0xd9
+ DLT_HHDLC = 0x79
+ DLT_IBM_SN = 0x92
+ DLT_IBM_SP = 0x91
+ DLT_IEEE802 = 0x6
+ DLT_IEEE802_11 = 0x69
+ DLT_IEEE802_11_RADIO = 0x7f
+ DLT_IEEE802_11_RADIO_AVS = 0xa3
+ DLT_IEEE802_15_4 = 0xc3
+ DLT_IEEE802_15_4_LINUX = 0xbf
+ DLT_IEEE802_15_4_NOFCS = 0xe6
+ DLT_IEEE802_15_4_NONASK_PHY = 0xd7
+ DLT_IEEE802_16_MAC_CPS = 0xbc
+ DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1
+ DLT_INFINIBAND = 0xf7
+ DLT_IPFILTER = 0x74
+ DLT_IPMB = 0xc7
+ DLT_IPMB_LINUX = 0xd1
+ DLT_IPMI_HPM_2 = 0x104
+ DLT_IPNET = 0xe2
+ DLT_IPOIB = 0xf2
+ DLT_IPV4 = 0xe4
+ DLT_IPV6 = 0xe5
+ DLT_IP_OVER_FC = 0x7a
+ DLT_JUNIPER_ATM1 = 0x89
+ DLT_JUNIPER_ATM2 = 0x87
+ DLT_JUNIPER_ATM_CEMIC = 0xee
+ DLT_JUNIPER_CHDLC = 0xb5
+ DLT_JUNIPER_ES = 0x84
+ DLT_JUNIPER_ETHER = 0xb2
+ DLT_JUNIPER_FIBRECHANNEL = 0xea
+ DLT_JUNIPER_FRELAY = 0xb4
+ DLT_JUNIPER_GGSN = 0x85
+ DLT_JUNIPER_ISM = 0xc2
+ DLT_JUNIPER_MFR = 0x86
+ DLT_JUNIPER_MLFR = 0x83
+ DLT_JUNIPER_MLPPP = 0x82
+ DLT_JUNIPER_MONITOR = 0xa4
+ DLT_JUNIPER_PIC_PEER = 0xae
+ DLT_JUNIPER_PPP = 0xb3
+ DLT_JUNIPER_PPPOE = 0xa7
+ DLT_JUNIPER_PPPOE_ATM = 0xa8
+ DLT_JUNIPER_SERVICES = 0x88
+ DLT_JUNIPER_SRX_E2E = 0xe9
+ DLT_JUNIPER_ST = 0xc8
+ DLT_JUNIPER_VP = 0xb7
+ DLT_JUNIPER_VS = 0xe8
+ DLT_LAPB_WITH_DIR = 0xcf
+ DLT_LAPD = 0xcb
+ DLT_LIN = 0xd4
+ DLT_LINUX_EVDEV = 0xd8
+ DLT_LINUX_IRDA = 0x90
+ DLT_LINUX_LAPD = 0xb1
+ DLT_LINUX_PPP_WITHDIRECTION = 0xa6
+ DLT_LINUX_SLL = 0x71
+ DLT_LOOP = 0x6c
+ DLT_LTALK = 0x72
+ DLT_MATCHING_MAX = 0x104
+ DLT_MATCHING_MIN = 0x68
+ DLT_MFR = 0xb6
+ DLT_MOST = 0xd3
+ DLT_MPEG_2_TS = 0xf3
+ DLT_MPLS = 0xdb
+ DLT_MTP2 = 0x8c
+ DLT_MTP2_WITH_PHDR = 0x8b
+ DLT_MTP3 = 0x8d
+ DLT_MUX27010 = 0xec
+ DLT_NETANALYZER = 0xf0
+ DLT_NETANALYZER_TRANSPARENT = 0xf1
+ DLT_NETLINK = 0xfd
+ DLT_NFC_LLCP = 0xf5
+ DLT_NFLOG = 0xef
+ DLT_NG40 = 0xf4
+ DLT_NULL = 0x0
+ DLT_PCI_EXP = 0x7d
+ DLT_PFLOG = 0x75
+ DLT_PFSYNC = 0x79
+ DLT_PKTAP = 0x102
+ DLT_PPI = 0xc0
+ DLT_PPP = 0x9
+ DLT_PPP_BSDOS = 0x10
+ DLT_PPP_ETHER = 0x33
+ DLT_PPP_PPPD = 0xa6
+ DLT_PPP_SERIAL = 0x32
+ DLT_PPP_WITH_DIR = 0xcc
+ DLT_PPP_WITH_DIRECTION = 0xa6
+ DLT_PRISM_HEADER = 0x77
+ DLT_PROFIBUS_DL = 0x101
+ DLT_PRONET = 0x4
+ DLT_RAIF1 = 0xc6
+ DLT_RAW = 0xc
+ DLT_RIO = 0x7c
+ DLT_RTAC_SERIAL = 0xfa
+ DLT_SCCP = 0x8e
+ DLT_SCTP = 0xf8
+ DLT_SITA = 0xc4
+ DLT_SLIP = 0x8
+ DLT_SLIP_BSDOS = 0xf
+ DLT_STANAG_5066_D_PDU = 0xed
+ DLT_SUNATM = 0x7b
+ DLT_SYMANTEC_FIREWALL = 0x63
+ DLT_TZSP = 0x80
+ DLT_USB = 0xba
+ DLT_USBPCAP = 0xf9
+ DLT_USB_LINUX = 0xbd
+ DLT_USB_LINUX_MMAPPED = 0xdc
+ DLT_USER0 = 0x93
+ DLT_USER1 = 0x94
+ DLT_USER10 = 0x9d
+ DLT_USER11 = 0x9e
+ DLT_USER12 = 0x9f
+ DLT_USER13 = 0xa0
+ DLT_USER14 = 0xa1
+ DLT_USER15 = 0xa2
+ DLT_USER2 = 0x95
+ DLT_USER3 = 0x96
+ DLT_USER4 = 0x97
+ DLT_USER5 = 0x98
+ DLT_USER6 = 0x99
+ DLT_USER7 = 0x9a
+ DLT_USER8 = 0x9b
+ DLT_USER9 = 0x9c
+ DLT_WIHART = 0xdf
+ DLT_WIRESHARK_UPPER_PDU = 0xfc
+ DLT_X2E_SERIAL = 0xd5
+ DLT_X2E_XORAYA = 0xd6
+ DT_BLK = 0x6
+ DT_CHR = 0x2
+ DT_DIR = 0x4
+ DT_FIFO = 0x1
+ DT_LNK = 0xa
+ DT_REG = 0x8
+ DT_SOCK = 0xc
+ DT_UNKNOWN = 0x0
+ DT_WHT = 0xe
+ ECHO = 0x8
+ ECHOCTL = 0x40
+ ECHOE = 0x2
+ ECHOK = 0x4
+ ECHOKE = 0x1
+ ECHONL = 0x10
+ ECHOPRT = 0x20
+ EVFILT_AIO = -0x3
+ EVFILT_FS = -0x9
+ EVFILT_LIO = -0xa
+ EVFILT_PROC = -0x5
+ EVFILT_PROCDESC = -0x8
+ EVFILT_READ = -0x1
+ EVFILT_SENDFILE = -0xc
+ EVFILT_SIGNAL = -0x6
+ EVFILT_SYSCOUNT = 0xc
+ EVFILT_TIMER = -0x7
+ EVFILT_USER = -0xb
+ EVFILT_VNODE = -0x4
+ EVFILT_WRITE = -0x2
+ EV_ADD = 0x1
+ EV_CLEAR = 0x20
+ EV_DELETE = 0x2
+ EV_DISABLE = 0x8
+ EV_DISPATCH = 0x80
+ EV_DROP = 0x1000
+ EV_ENABLE = 0x4
+ EV_EOF = 0x8000
+ EV_ERROR = 0x4000
+ EV_FLAG1 = 0x2000
+ EV_FLAG2 = 0x4000
+ EV_FORCEONESHOT = 0x100
+ EV_ONESHOT = 0x10
+ EV_RECEIPT = 0x40
+ EV_SYSFLAGS = 0xf000
+ EXTA = 0x4b00
+ EXTATTR_NAMESPACE_EMPTY = 0x0
+ EXTATTR_NAMESPACE_SYSTEM = 0x2
+ EXTATTR_NAMESPACE_USER = 0x1
+ EXTB = 0x9600
+ EXTPROC = 0x800
+ FD_CLOEXEC = 0x1
+ FD_SETSIZE = 0x400
+ FLUSHO = 0x800000
+ F_CANCEL = 0x5
+ F_DUP2FD = 0xa
+ F_DUP2FD_CLOEXEC = 0x12
+ F_DUPFD = 0x0
+ F_DUPFD_CLOEXEC = 0x11
+ F_GETFD = 0x1
+ F_GETFL = 0x3
+ F_GETLK = 0xb
+ F_GETOWN = 0x5
+ F_OGETLK = 0x7
+ F_OK = 0x0
+ F_OSETLK = 0x8
+ F_OSETLKW = 0x9
+ F_RDAHEAD = 0x10
+ F_RDLCK = 0x1
+ F_READAHEAD = 0xf
+ F_SETFD = 0x2
+ F_SETFL = 0x4
+ F_SETLK = 0xc
+ F_SETLKW = 0xd
+ F_SETLK_REMOTE = 0xe
+ F_SETOWN = 0x6
+ F_UNLCK = 0x2
+ F_UNLCKSYS = 0x4
+ F_WRLCK = 0x3
+ HUPCL = 0x4000
+ HW_MACHINE = 0x1
+ ICANON = 0x100
+ ICMP6_FILTER = 0x12
+ ICRNL = 0x100
+ IEXTEN = 0x400
+ IFAN_ARRIVAL = 0x0
+ IFAN_DEPARTURE = 0x1
+ IFF_ALLMULTI = 0x200
+ IFF_ALTPHYS = 0x4000
+ IFF_BROADCAST = 0x2
+ IFF_CANTCHANGE = 0x218f52
+ IFF_CANTCONFIG = 0x10000
+ IFF_DEBUG = 0x4
+ IFF_DRV_OACTIVE = 0x400
+ IFF_DRV_RUNNING = 0x40
+ IFF_DYING = 0x200000
+ IFF_LINK0 = 0x1000
+ IFF_LINK1 = 0x2000
+ IFF_LINK2 = 0x4000
+ IFF_LOOPBACK = 0x8
+ IFF_MONITOR = 0x40000
+ IFF_MULTICAST = 0x8000
+ IFF_NOARP = 0x80
+ IFF_OACTIVE = 0x400
+ IFF_POINTOPOINT = 0x10
+ IFF_PPROMISC = 0x20000
+ IFF_PROMISC = 0x100
+ IFF_RENAMING = 0x400000
+ IFF_RUNNING = 0x40
+ IFF_SIMPLEX = 0x800
+ IFF_STATICARP = 0x80000
+ IFF_UP = 0x1
+ IFNAMSIZ = 0x10
+ IFT_BRIDGE = 0xd1
+ IFT_CARP = 0xf8
+ IFT_IEEE1394 = 0x90
+ IFT_INFINIBAND = 0xc7
+ IFT_L2VLAN = 0x87
+ IFT_L3IPVLAN = 0x88
+ IFT_PPP = 0x17
+ IFT_PROPVIRTUAL = 0x35
+ IGNBRK = 0x1
+ IGNCR = 0x80
+ IGNPAR = 0x4
+ IMAXBEL = 0x2000
+ INLCR = 0x40
+ INPCK = 0x10
+ IN_CLASSA_HOST = 0xffffff
+ IN_CLASSA_MAX = 0x80
+ IN_CLASSA_NET = 0xff000000
+ IN_CLASSA_NSHIFT = 0x18
+ IN_CLASSB_HOST = 0xffff
+ IN_CLASSB_MAX = 0x10000
+ IN_CLASSB_NET = 0xffff0000
+ IN_CLASSB_NSHIFT = 0x10
+ IN_CLASSC_HOST = 0xff
+ IN_CLASSC_NET = 0xffffff00
+ IN_CLASSC_NSHIFT = 0x8
+ IN_CLASSD_HOST = 0xfffffff
+ IN_CLASSD_NET = 0xf0000000
+ IN_CLASSD_NSHIFT = 0x1c
+ IN_LOOPBACKNET = 0x7f
+ IN_RFC3021_MASK = 0xfffffffe
+ IPPROTO_3PC = 0x22
+ IPPROTO_ADFS = 0x44
+ IPPROTO_AH = 0x33
+ IPPROTO_AHIP = 0x3d
+ IPPROTO_APES = 0x63
+ IPPROTO_ARGUS = 0xd
+ IPPROTO_AX25 = 0x5d
+ IPPROTO_BHA = 0x31
+ IPPROTO_BLT = 0x1e
+ IPPROTO_BRSATMON = 0x4c
+ IPPROTO_CARP = 0x70
+ IPPROTO_CFTP = 0x3e
+ IPPROTO_CHAOS = 0x10
+ IPPROTO_CMTP = 0x26
+ IPPROTO_CPHB = 0x49
+ IPPROTO_CPNX = 0x48
+ IPPROTO_DDP = 0x25
+ IPPROTO_DGP = 0x56
+ IPPROTO_DIVERT = 0x102
+ IPPROTO_DONE = 0x101
+ IPPROTO_DSTOPTS = 0x3c
+ IPPROTO_EGP = 0x8
+ IPPROTO_EMCON = 0xe
+ IPPROTO_ENCAP = 0x62
+ IPPROTO_EON = 0x50
+ IPPROTO_ESP = 0x32
+ IPPROTO_ETHERIP = 0x61
+ IPPROTO_FRAGMENT = 0x2c
+ IPPROTO_GGP = 0x3
+ IPPROTO_GMTP = 0x64
+ IPPROTO_GRE = 0x2f
+ IPPROTO_HELLO = 0x3f
+ IPPROTO_HIP = 0x8b
+ IPPROTO_HMP = 0x14
+ IPPROTO_HOPOPTS = 0x0
+ IPPROTO_ICMP = 0x1
+ IPPROTO_ICMPV6 = 0x3a
+ IPPROTO_IDP = 0x16
+ IPPROTO_IDPR = 0x23
+ IPPROTO_IDRP = 0x2d
+ IPPROTO_IGMP = 0x2
+ IPPROTO_IGP = 0x55
+ IPPROTO_IGRP = 0x58
+ IPPROTO_IL = 0x28
+ IPPROTO_INLSP = 0x34
+ IPPROTO_INP = 0x20
+ IPPROTO_IP = 0x0
+ IPPROTO_IPCOMP = 0x6c
+ IPPROTO_IPCV = 0x47
+ IPPROTO_IPEIP = 0x5e
+ IPPROTO_IPIP = 0x4
+ IPPROTO_IPPC = 0x43
+ IPPROTO_IPV4 = 0x4
+ IPPROTO_IPV6 = 0x29
+ IPPROTO_IRTP = 0x1c
+ IPPROTO_KRYPTOLAN = 0x41
+ IPPROTO_LARP = 0x5b
+ IPPROTO_LEAF1 = 0x19
+ IPPROTO_LEAF2 = 0x1a
+ IPPROTO_MAX = 0x100
+ IPPROTO_MEAS = 0x13
+ IPPROTO_MH = 0x87
+ IPPROTO_MHRP = 0x30
+ IPPROTO_MICP = 0x5f
+ IPPROTO_MOBILE = 0x37
+ IPPROTO_MPLS = 0x89
+ IPPROTO_MTP = 0x5c
+ IPPROTO_MUX = 0x12
+ IPPROTO_ND = 0x4d
+ IPPROTO_NHRP = 0x36
+ IPPROTO_NONE = 0x3b
+ IPPROTO_NSP = 0x1f
+ IPPROTO_NVPII = 0xb
+ IPPROTO_OLD_DIVERT = 0xfe
+ IPPROTO_OSPFIGP = 0x59
+ IPPROTO_PFSYNC = 0xf0
+ IPPROTO_PGM = 0x71
+ IPPROTO_PIGP = 0x9
+ IPPROTO_PIM = 0x67
+ IPPROTO_PRM = 0x15
+ IPPROTO_PUP = 0xc
+ IPPROTO_PVP = 0x4b
+ IPPROTO_RAW = 0xff
+ IPPROTO_RCCMON = 0xa
+ IPPROTO_RDP = 0x1b
+ IPPROTO_RESERVED_253 = 0xfd
+ IPPROTO_RESERVED_254 = 0xfe
+ IPPROTO_ROUTING = 0x2b
+ IPPROTO_RSVP = 0x2e
+ IPPROTO_RVD = 0x42
+ IPPROTO_SATEXPAK = 0x40
+ IPPROTO_SATMON = 0x45
+ IPPROTO_SCCSP = 0x60
+ IPPROTO_SCTP = 0x84
+ IPPROTO_SDRP = 0x2a
+ IPPROTO_SEND = 0x103
+ IPPROTO_SEP = 0x21
+ IPPROTO_SHIM6 = 0x8c
+ IPPROTO_SKIP = 0x39
+ IPPROTO_SPACER = 0x7fff
+ IPPROTO_SRPC = 0x5a
+ IPPROTO_ST = 0x7
+ IPPROTO_SVMTP = 0x52
+ IPPROTO_SWIPE = 0x35
+ IPPROTO_TCF = 0x57
+ IPPROTO_TCP = 0x6
+ IPPROTO_TLSP = 0x38
+ IPPROTO_TP = 0x1d
+ IPPROTO_TPXX = 0x27
+ IPPROTO_TRUNK1 = 0x17
+ IPPROTO_TRUNK2 = 0x18
+ IPPROTO_TTP = 0x54
+ IPPROTO_UDP = 0x11
+ IPPROTO_UDPLITE = 0x88
+ IPPROTO_VINES = 0x53
+ IPPROTO_VISA = 0x46
+ IPPROTO_VMTP = 0x51
+ IPPROTO_WBEXPAK = 0x4f
+ IPPROTO_WBMON = 0x4e
+ IPPROTO_WSN = 0x4a
+ IPPROTO_XNET = 0xf
+ IPPROTO_XTP = 0x24
+ IPV6_AUTOFLOWLABEL = 0x3b
+ IPV6_BINDANY = 0x40
+ IPV6_BINDMULTI = 0x41
+ IPV6_BINDV6ONLY = 0x1b
+ IPV6_CHECKSUM = 0x1a
+ IPV6_DEFAULT_MULTICAST_HOPS = 0x1
+ IPV6_DEFAULT_MULTICAST_LOOP = 0x1
+ IPV6_DEFHLIM = 0x40
+ IPV6_DONTFRAG = 0x3e
+ IPV6_DSTOPTS = 0x32
+ IPV6_FLOWID = 0x43
+ IPV6_FLOWINFO_MASK = 0xffffff0f
+ IPV6_FLOWLABEL_MASK = 0xffff0f00
+ IPV6_FLOWTYPE = 0x44
+ IPV6_FRAGTTL = 0x78
+ IPV6_FW_ADD = 0x1e
+ IPV6_FW_DEL = 0x1f
+ IPV6_FW_FLUSH = 0x20
+ IPV6_FW_GET = 0x22
+ IPV6_FW_ZERO = 0x21
+ IPV6_HLIMDEC = 0x1
+ IPV6_HOPLIMIT = 0x2f
+ IPV6_HOPOPTS = 0x31
+ IPV6_IPSEC_POLICY = 0x1c
+ IPV6_JOIN_GROUP = 0xc
+ IPV6_LEAVE_GROUP = 0xd
+ IPV6_MAXHLIM = 0xff
+ IPV6_MAXOPTHDR = 0x800
+ IPV6_MAXPACKET = 0xffff
+ IPV6_MAX_GROUP_SRC_FILTER = 0x200
+ IPV6_MAX_MEMBERSHIPS = 0xfff
+ IPV6_MAX_SOCK_SRC_FILTER = 0x80
+ IPV6_MIN_MEMBERSHIPS = 0x1f
+ IPV6_MMTU = 0x500
+ IPV6_MSFILTER = 0x4a
+ IPV6_MULTICAST_HOPS = 0xa
+ IPV6_MULTICAST_IF = 0x9
+ IPV6_MULTICAST_LOOP = 0xb
+ IPV6_NEXTHOP = 0x30
+ IPV6_PATHMTU = 0x2c
+ IPV6_PKTINFO = 0x2e
+ IPV6_PORTRANGE = 0xe
+ IPV6_PORTRANGE_DEFAULT = 0x0
+ IPV6_PORTRANGE_HIGH = 0x1
+ IPV6_PORTRANGE_LOW = 0x2
+ IPV6_PREFER_TEMPADDR = 0x3f
+ IPV6_RECVDSTOPTS = 0x28
+ IPV6_RECVFLOWID = 0x46
+ IPV6_RECVHOPLIMIT = 0x25
+ IPV6_RECVHOPOPTS = 0x27
+ IPV6_RECVPATHMTU = 0x2b
+ IPV6_RECVPKTINFO = 0x24
+ IPV6_RECVRSSBUCKETID = 0x47
+ IPV6_RECVRTHDR = 0x26
+ IPV6_RECVTCLASS = 0x39
+ IPV6_RSSBUCKETID = 0x45
+ IPV6_RSS_LISTEN_BUCKET = 0x42
+ IPV6_RTHDR = 0x33
+ IPV6_RTHDRDSTOPTS = 0x23
+ IPV6_RTHDR_LOOSE = 0x0
+ IPV6_RTHDR_STRICT = 0x1
+ IPV6_RTHDR_TYPE_0 = 0x0
+ IPV6_SOCKOPT_RESERVED1 = 0x3
+ IPV6_TCLASS = 0x3d
+ IPV6_UNICAST_HOPS = 0x4
+ IPV6_USE_MIN_MTU = 0x2a
+ IPV6_V6ONLY = 0x1b
+ IPV6_VERSION = 0x60
+ IPV6_VERSION_MASK = 0xf0
+ IP_ADD_MEMBERSHIP = 0xc
+ IP_ADD_SOURCE_MEMBERSHIP = 0x46
+ IP_BINDANY = 0x18
+ IP_BINDMULTI = 0x19
+ IP_BLOCK_SOURCE = 0x48
+ IP_DEFAULT_MULTICAST_LOOP = 0x1
+ IP_DEFAULT_MULTICAST_TTL = 0x1
+ IP_DF = 0x4000
+ IP_DONTFRAG = 0x43
+ IP_DROP_MEMBERSHIP = 0xd
+ IP_DROP_SOURCE_MEMBERSHIP = 0x47
+ IP_DUMMYNET3 = 0x31
+ IP_DUMMYNET_CONFIGURE = 0x3c
+ IP_DUMMYNET_DEL = 0x3d
+ IP_DUMMYNET_FLUSH = 0x3e
+ IP_DUMMYNET_GET = 0x40
+ IP_FLOWID = 0x5a
+ IP_FLOWTYPE = 0x5b
+ IP_FW3 = 0x30
+ IP_FW_ADD = 0x32
+ IP_FW_DEL = 0x33
+ IP_FW_FLUSH = 0x34
+ IP_FW_GET = 0x36
+ IP_FW_NAT_CFG = 0x38
+ IP_FW_NAT_DEL = 0x39
+ IP_FW_NAT_GET_CONFIG = 0x3a
+ IP_FW_NAT_GET_LOG = 0x3b
+ IP_FW_RESETLOG = 0x37
+ IP_FW_TABLE_ADD = 0x28
+ IP_FW_TABLE_DEL = 0x29
+ IP_FW_TABLE_FLUSH = 0x2a
+ IP_FW_TABLE_GETSIZE = 0x2b
+ IP_FW_TABLE_LIST = 0x2c
+ IP_FW_ZERO = 0x35
+ IP_HDRINCL = 0x2
+ IP_IPSEC_POLICY = 0x15
+ IP_MAXPACKET = 0xffff
+ IP_MAX_GROUP_SRC_FILTER = 0x200
+ IP_MAX_MEMBERSHIPS = 0xfff
+ IP_MAX_SOCK_MUTE_FILTER = 0x80
+ IP_MAX_SOCK_SRC_FILTER = 0x80
+ IP_MAX_SOURCE_FILTER = 0x400
+ IP_MF = 0x2000
+ IP_MINTTL = 0x42
+ IP_MIN_MEMBERSHIPS = 0x1f
+ IP_MSFILTER = 0x4a
+ IP_MSS = 0x240
+ IP_MULTICAST_IF = 0x9
+ IP_MULTICAST_LOOP = 0xb
+ IP_MULTICAST_TTL = 0xa
+ IP_MULTICAST_VIF = 0xe
+ IP_OFFMASK = 0x1fff
+ IP_ONESBCAST = 0x17
+ IP_OPTIONS = 0x1
+ IP_PORTRANGE = 0x13
+ IP_PORTRANGE_DEFAULT = 0x0
+ IP_PORTRANGE_HIGH = 0x1
+ IP_PORTRANGE_LOW = 0x2
+ IP_RECVDSTADDR = 0x7
+ IP_RECVFLOWID = 0x5d
+ IP_RECVIF = 0x14
+ IP_RECVOPTS = 0x5
+ IP_RECVRETOPTS = 0x6
+ IP_RECVRSSBUCKETID = 0x5e
+ IP_RECVTOS = 0x44
+ IP_RECVTTL = 0x41
+ IP_RETOPTS = 0x8
+ IP_RF = 0x8000
+ IP_RSSBUCKETID = 0x5c
+ IP_RSS_LISTEN_BUCKET = 0x1a
+ IP_RSVP_OFF = 0x10
+ IP_RSVP_ON = 0xf
+ IP_RSVP_VIF_OFF = 0x12
+ IP_RSVP_VIF_ON = 0x11
+ IP_SENDSRCADDR = 0x7
+ IP_TOS = 0x3
+ IP_TTL = 0x4
+ IP_UNBLOCK_SOURCE = 0x49
+ ISIG = 0x80
+ ISTRIP = 0x20
+ IXANY = 0x800
+ IXOFF = 0x400
+ IXON = 0x200
+ KERN_HOSTNAME = 0xa
+ KERN_OSRELEASE = 0x2
+ KERN_OSTYPE = 0x1
+ KERN_VERSION = 0x4
+ LOCK_EX = 0x2
+ LOCK_NB = 0x4
+ LOCK_SH = 0x1
+ LOCK_UN = 0x8
+ MADV_AUTOSYNC = 0x7
+ MADV_CORE = 0x9
+ MADV_DONTNEED = 0x4
+ MADV_FREE = 0x5
+ MADV_NOCORE = 0x8
+ MADV_NORMAL = 0x0
+ MADV_NOSYNC = 0x6
+ MADV_PROTECT = 0xa
+ MADV_RANDOM = 0x1
+ MADV_SEQUENTIAL = 0x2
+ MADV_WILLNEED = 0x3
+ MAP_32BIT = 0x80000
+ MAP_ALIGNED_SUPER = 0x1000000
+ MAP_ALIGNMENT_MASK = -0x1000000
+ MAP_ALIGNMENT_SHIFT = 0x18
+ MAP_ANON = 0x1000
+ MAP_ANONYMOUS = 0x1000
+ MAP_COPY = 0x2
+ MAP_EXCL = 0x4000
+ MAP_FILE = 0x0
+ MAP_FIXED = 0x10
+ MAP_HASSEMAPHORE = 0x200
+ MAP_NOCORE = 0x20000
+ MAP_NOSYNC = 0x800
+ MAP_PREFAULT_READ = 0x40000
+ MAP_PRIVATE = 0x2
+ MAP_RESERVED0020 = 0x20
+ MAP_RESERVED0040 = 0x40
+ MAP_RESERVED0080 = 0x80
+ MAP_RESERVED0100 = 0x100
+ MAP_SHARED = 0x1
+ MAP_STACK = 0x400
+ MCL_CURRENT = 0x1
+ MCL_FUTURE = 0x2
+ MNT_ACLS = 0x8000000
+ MNT_ASYNC = 0x40
+ MNT_AUTOMOUNTED = 0x200000000
+ MNT_BYFSID = 0x8000000
+ MNT_CMDFLAGS = 0xd0f0000
+ MNT_DEFEXPORTED = 0x200
+ MNT_DELEXPORT = 0x20000
+ MNT_EXKERB = 0x800
+ MNT_EXPORTANON = 0x400
+ MNT_EXPORTED = 0x100
+ MNT_EXPUBLIC = 0x20000000
+ MNT_EXRDONLY = 0x80
+ MNT_FORCE = 0x80000
+ MNT_GJOURNAL = 0x2000000
+ MNT_IGNORE = 0x800000
+ MNT_LAZY = 0x3
+ MNT_LOCAL = 0x1000
+ MNT_MULTILABEL = 0x4000000
+ MNT_NFS4ACLS = 0x10
+ MNT_NOATIME = 0x10000000
+ MNT_NOCLUSTERR = 0x40000000
+ MNT_NOCLUSTERW = 0x80000000
+ MNT_NOEXEC = 0x4
+ MNT_NONBUSY = 0x4000000
+ MNT_NOSUID = 0x8
+ MNT_NOSYMFOLLOW = 0x400000
+ MNT_NOWAIT = 0x2
+ MNT_QUOTA = 0x2000
+ MNT_RDONLY = 0x1
+ MNT_RELOAD = 0x40000
+ MNT_ROOTFS = 0x4000
+ MNT_SNAPSHOT = 0x1000000
+ MNT_SOFTDEP = 0x200000
+ MNT_SUIDDIR = 0x100000
+ MNT_SUJ = 0x100000000
+ MNT_SUSPEND = 0x4
+ MNT_SYNCHRONOUS = 0x2
+ MNT_UNION = 0x20
+ MNT_UPDATE = 0x10000
+ MNT_UPDATEMASK = 0x2d8d0807e
+ MNT_USER = 0x8000
+ MNT_VISFLAGMASK = 0x3fef0ffff
+ MNT_WAIT = 0x1
+ MSG_CMSG_CLOEXEC = 0x40000
+ MSG_COMPAT = 0x8000
+ MSG_CTRUNC = 0x20
+ MSG_DONTROUTE = 0x4
+ MSG_DONTWAIT = 0x80
+ MSG_EOF = 0x100
+ MSG_EOR = 0x8
+ MSG_NBIO = 0x4000
+ MSG_NOSIGNAL = 0x20000
+ MSG_NOTIFICATION = 0x2000
+ MSG_OOB = 0x1
+ MSG_PEEK = 0x2
+ MSG_TRUNC = 0x10
+ MSG_WAITALL = 0x40
+ MSG_WAITFORONE = 0x80000
+ MS_ASYNC = 0x1
+ MS_INVALIDATE = 0x2
+ MS_SYNC = 0x0
+ NAME_MAX = 0xff
+ NET_RT_DUMP = 0x1
+ NET_RT_FLAGS = 0x2
+ NET_RT_IFLIST = 0x3
+ NET_RT_IFLISTL = 0x5
+ NET_RT_IFMALIST = 0x4
+ NOFLSH = 0x80000000
+ NOKERNINFO = 0x2000000
+ NOTE_ATTRIB = 0x8
+ NOTE_CHILD = 0x4
+ NOTE_CLOSE = 0x100
+ NOTE_CLOSE_WRITE = 0x200
+ NOTE_DELETE = 0x1
+ NOTE_EXEC = 0x20000000
+ NOTE_EXIT = 0x80000000
+ NOTE_EXTEND = 0x4
+ NOTE_FFAND = 0x40000000
+ NOTE_FFCOPY = 0xc0000000
+ NOTE_FFCTRLMASK = 0xc0000000
+ NOTE_FFLAGSMASK = 0xffffff
+ NOTE_FFNOP = 0x0
+ NOTE_FFOR = 0x80000000
+ NOTE_FILE_POLL = 0x2
+ NOTE_FORK = 0x40000000
+ NOTE_LINK = 0x10
+ NOTE_LOWAT = 0x1
+ NOTE_MSECONDS = 0x2
+ NOTE_NSECONDS = 0x8
+ NOTE_OPEN = 0x80
+ NOTE_PCTRLMASK = 0xf0000000
+ NOTE_PDATAMASK = 0xfffff
+ NOTE_READ = 0x400
+ NOTE_RENAME = 0x20
+ NOTE_REVOKE = 0x40
+ NOTE_SECONDS = 0x1
+ NOTE_TRACK = 0x1
+ NOTE_TRACKERR = 0x2
+ NOTE_TRIGGER = 0x1000000
+ NOTE_USECONDS = 0x4
+ NOTE_WRITE = 0x2
+ OCRNL = 0x10
+ ONLCR = 0x2
+ ONLRET = 0x40
+ ONOCR = 0x20
+ ONOEOT = 0x8
+ OPOST = 0x1
+ OXTABS = 0x4
+ O_ACCMODE = 0x3
+ O_APPEND = 0x8
+ O_ASYNC = 0x40
+ O_CLOEXEC = 0x100000
+ O_CREAT = 0x200
+ O_DIRECT = 0x10000
+ O_DIRECTORY = 0x20000
+ O_EXCL = 0x800
+ O_EXEC = 0x40000
+ O_EXLOCK = 0x20
+ O_FSYNC = 0x80
+ O_NDELAY = 0x4
+ O_NOCTTY = 0x8000
+ O_NOFOLLOW = 0x100
+ O_NONBLOCK = 0x4
+ O_RDONLY = 0x0
+ O_RDWR = 0x2
+ O_SHLOCK = 0x10
+ O_SYNC = 0x80
+ O_TRUNC = 0x400
+ O_TTY_INIT = 0x80000
+ O_VERIFY = 0x200000
+ O_WRONLY = 0x1
+ PARENB = 0x1000
+ PARMRK = 0x8
+ PARODD = 0x2000
+ PENDIN = 0x20000000
+ PRIO_PGRP = 0x1
+ PRIO_PROCESS = 0x0
+ PRIO_USER = 0x2
+ PROT_EXEC = 0x4
+ PROT_NONE = 0x0
+ PROT_READ = 0x1
+ PROT_WRITE = 0x2
+ RLIMIT_AS = 0xa
+ RLIMIT_CORE = 0x4
+ RLIMIT_CPU = 0x0
+ RLIMIT_DATA = 0x2
+ RLIMIT_FSIZE = 0x1
+ RLIMIT_MEMLOCK = 0x6
+ RLIMIT_NOFILE = 0x8
+ RLIMIT_NPROC = 0x7
+ RLIMIT_RSS = 0x5
+ RLIMIT_STACK = 0x3
+ RLIM_INFINITY = 0x7fffffffffffffff
+ RTAX_AUTHOR = 0x6
+ RTAX_BRD = 0x7
+ RTAX_DST = 0x0
+ RTAX_GATEWAY = 0x1
+ RTAX_GENMASK = 0x3
+ RTAX_IFA = 0x5
+ RTAX_IFP = 0x4
+ RTAX_MAX = 0x8
+ RTAX_NETMASK = 0x2
+ RTA_AUTHOR = 0x40
+ RTA_BRD = 0x80
+ RTA_DST = 0x1
+ RTA_GATEWAY = 0x2
+ RTA_GENMASK = 0x8
+ RTA_IFA = 0x20
+ RTA_IFP = 0x10
+ RTA_NETMASK = 0x4
+ RTF_BLACKHOLE = 0x1000
+ RTF_BROADCAST = 0x400000
+ RTF_DONE = 0x40
+ RTF_DYNAMIC = 0x10
+ RTF_FIXEDMTU = 0x80000
+ RTF_FMASK = 0x1004d808
+ RTF_GATEWAY = 0x2
+ RTF_GWFLAG_COMPAT = 0x80000000
+ RTF_HOST = 0x4
+ RTF_LLDATA = 0x400
+ RTF_LLINFO = 0x400
+ RTF_LOCAL = 0x200000
+ RTF_MODIFIED = 0x20
+ RTF_MULTICAST = 0x800000
+ RTF_PINNED = 0x100000
+ RTF_PROTO1 = 0x8000
+ RTF_PROTO2 = 0x4000
+ RTF_PROTO3 = 0x40000
+ RTF_REJECT = 0x8
+ RTF_RNH_LOCKED = 0x40000000
+ RTF_STATIC = 0x800
+ RTF_STICKY = 0x10000000
+ RTF_UP = 0x1
+ RTF_XRESOLVE = 0x200
+ RTM_ADD = 0x1
+ RTM_CHANGE = 0x3
+ RTM_DELADDR = 0xd
+ RTM_DELETE = 0x2
+ RTM_DELMADDR = 0x10
+ RTM_GET = 0x4
+ RTM_IEEE80211 = 0x12
+ RTM_IFANNOUNCE = 0x11
+ RTM_IFINFO = 0xe
+ RTM_LOCK = 0x8
+ RTM_LOSING = 0x5
+ RTM_MISS = 0x7
+ RTM_NEWADDR = 0xc
+ RTM_NEWMADDR = 0xf
+ RTM_REDIRECT = 0x6
+ RTM_RESOLVE = 0xb
+ RTM_RTTUNIT = 0xf4240
+ RTM_VERSION = 0x5
+ RTV_EXPIRE = 0x4
+ RTV_HOPCOUNT = 0x2
+ RTV_MTU = 0x1
+ RTV_RPIPE = 0x8
+ RTV_RTT = 0x40
+ RTV_RTTVAR = 0x80
+ RTV_SPIPE = 0x10
+ RTV_SSTHRESH = 0x20
+ RTV_WEIGHT = 0x100
+ RT_ALL_FIBS = -0x1
+ RT_BLACKHOLE = 0x40
+ RT_CACHING_CONTEXT = 0x1
+ RT_DEFAULT_FIB = 0x0
+ RT_HAS_GW = 0x80
+ RT_HAS_HEADER = 0x10
+ RT_HAS_HEADER_BIT = 0x4
+ RT_L2_ME = 0x4
+ RT_L2_ME_BIT = 0x2
+ RT_LLE_CACHE = 0x100
+ RT_MAY_LOOP = 0x8
+ RT_MAY_LOOP_BIT = 0x3
+ RT_NORTREF = 0x2
+ RT_REJECT = 0x20
+ RUSAGE_CHILDREN = -0x1
+ RUSAGE_SELF = 0x0
+ RUSAGE_THREAD = 0x1
+ SCM_BINTIME = 0x4
+ SCM_CREDS = 0x3
+ SCM_RIGHTS = 0x1
+ SCM_TIMESTAMP = 0x2
+ SHUT_RD = 0x0
+ SHUT_RDWR = 0x2
+ SHUT_WR = 0x1
+ SIOCADDMULTI = 0x80206931
+ SIOCAIFADDR = 0x8040691a
+ SIOCAIFGROUP = 0x80286987
+ SIOCATMARK = 0x40047307
+ SIOCDELMULTI = 0x80206932
+ SIOCDIFADDR = 0x80206919
+ SIOCDIFGROUP = 0x80286989
+ SIOCDIFPHYADDR = 0x80206949
+ SIOCGDRVSPEC = 0xc028697b
+ SIOCGETSGCNT = 0xc0207210
+ SIOCGETVIFCNT = 0xc028720f
+ SIOCGHIWAT = 0x40047301
+ SIOCGI2C = 0xc020693d
+ SIOCGIFADDR = 0xc0206921
+ SIOCGIFBRDADDR = 0xc0206923
+ SIOCGIFCAP = 0xc020691f
+ SIOCGIFCONF = 0xc0106924
+ SIOCGIFDESCR = 0xc020692a
+ SIOCGIFDSTADDR = 0xc0206922
+ SIOCGIFFIB = 0xc020695c
+ SIOCGIFFLAGS = 0xc0206911
+ SIOCGIFGENERIC = 0xc020693a
+ SIOCGIFGMEMB = 0xc028698a
+ SIOCGIFGROUP = 0xc0286988
+ SIOCGIFINDEX = 0xc0206920
+ SIOCGIFMAC = 0xc0206926
+ SIOCGIFMEDIA = 0xc0306938
+ SIOCGIFMETRIC = 0xc0206917
+ SIOCGIFMTU = 0xc0206933
+ SIOCGIFNETMASK = 0xc0206925
+ SIOCGIFPDSTADDR = 0xc0206948
+ SIOCGIFPHYS = 0xc0206935
+ SIOCGIFPSRCADDR = 0xc0206947
+ SIOCGIFSTATUS = 0xc331693b
+ SIOCGIFXMEDIA = 0xc030698b
+ SIOCGLOWAT = 0x40047303
+ SIOCGPGRP = 0x40047309
+ SIOCGPRIVATE_0 = 0xc0206950
+ SIOCGPRIVATE_1 = 0xc0206951
+ SIOCGTUNFIB = 0xc020695e
+ SIOCIFCREATE = 0xc020697a
+ SIOCIFCREATE2 = 0xc020697c
+ SIOCIFDESTROY = 0x80206979
+ SIOCIFGCLONERS = 0xc0106978
+ SIOCSDRVSPEC = 0x8028697b
+ SIOCSHIWAT = 0x80047300
+ SIOCSIFADDR = 0x8020690c
+ SIOCSIFBRDADDR = 0x80206913
+ SIOCSIFCAP = 0x8020691e
+ SIOCSIFDESCR = 0x80206929
+ SIOCSIFDSTADDR = 0x8020690e
+ SIOCSIFFIB = 0x8020695d
+ SIOCSIFFLAGS = 0x80206910
+ SIOCSIFGENERIC = 0x80206939
+ SIOCSIFLLADDR = 0x8020693c
+ SIOCSIFMAC = 0x80206927
+ SIOCSIFMEDIA = 0xc0206937
+ SIOCSIFMETRIC = 0x80206918
+ SIOCSIFMTU = 0x80206934
+ SIOCSIFNAME = 0x80206928
+ SIOCSIFNETMASK = 0x80206916
+ SIOCSIFPHYADDR = 0x80406946
+ SIOCSIFPHYS = 0x80206936
+ SIOCSIFRVNET = 0xc020695b
+ SIOCSIFVNET = 0xc020695a
+ SIOCSLOWAT = 0x80047302
+ SIOCSPGRP = 0x80047308
+ SIOCSTUNFIB = 0x8020695f
+ SOCK_CLOEXEC = 0x10000000
+ SOCK_DGRAM = 0x2
+ SOCK_MAXADDRLEN = 0xff
+ SOCK_NONBLOCK = 0x20000000
+ SOCK_RAW = 0x3
+ SOCK_RDM = 0x4
+ SOCK_SEQPACKET = 0x5
+ SOCK_STREAM = 0x1
+ SOL_SOCKET = 0xffff
+ SOMAXCONN = 0x80
+ SO_ACCEPTCONN = 0x2
+ SO_ACCEPTFILTER = 0x1000
+ SO_BINTIME = 0x2000
+ SO_BROADCAST = 0x20
+ SO_DEBUG = 0x1
+ SO_DONTROUTE = 0x10
+ SO_ERROR = 0x1007
+ SO_KEEPALIVE = 0x8
+ SO_LABEL = 0x1009
+ SO_LINGER = 0x80
+ SO_LISTENINCQLEN = 0x1013
+ SO_LISTENQLEN = 0x1012
+ SO_LISTENQLIMIT = 0x1011
+ SO_NOSIGPIPE = 0x800
+ SO_NO_DDP = 0x8000
+ SO_NO_OFFLOAD = 0x4000
+ SO_OOBINLINE = 0x100
+ SO_PEERLABEL = 0x1010
+ SO_PROTOCOL = 0x1016
+ SO_PROTOTYPE = 0x1016
+ SO_RCVBUF = 0x1002
+ SO_RCVLOWAT = 0x1004
+ SO_RCVTIMEO = 0x1006
+ SO_REUSEADDR = 0x4
+ SO_REUSEPORT = 0x200
+ SO_SETFIB = 0x1014
+ SO_SNDBUF = 0x1001
+ SO_SNDLOWAT = 0x1003
+ SO_SNDTIMEO = 0x1005
+ SO_TIMESTAMP = 0x400
+ SO_TYPE = 0x1008
+ SO_USELOOPBACK = 0x40
+ SO_USER_COOKIE = 0x1015
+ SO_VENDOR = 0x80000000
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IFWHT = 0xe000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
+ TAB0 = 0x0
+ TAB3 = 0x4
+ TABDLY = 0x4
+ TCIFLUSH = 0x1
+ TCIOFF = 0x3
+ TCIOFLUSH = 0x3
+ TCION = 0x4
+ TCOFLUSH = 0x2
+ TCOOFF = 0x1
+ TCOON = 0x2
+ TCP_CA_NAME_MAX = 0x10
+ TCP_CCALGOOPT = 0x41
+ TCP_CONGESTION = 0x40
+ TCP_FASTOPEN = 0x401
+ TCP_FUNCTION_BLK = 0x2000
+ TCP_FUNCTION_NAME_LEN_MAX = 0x20
+ TCP_INFO = 0x20
+ TCP_KEEPCNT = 0x400
+ TCP_KEEPIDLE = 0x100
+ TCP_KEEPINIT = 0x80
+ TCP_KEEPINTVL = 0x200
+ TCP_MAXBURST = 0x4
+ TCP_MAXHLEN = 0x3c
+ TCP_MAXOLEN = 0x28
+ TCP_MAXSEG = 0x2
+ TCP_MAXWIN = 0xffff
+ TCP_MAX_SACK = 0x4
+ TCP_MAX_WINSHIFT = 0xe
+ TCP_MD5SIG = 0x10
+ TCP_MINMSS = 0xd8
+ TCP_MSS = 0x218
+ TCP_NODELAY = 0x1
+ TCP_NOOPT = 0x8
+ TCP_NOPUSH = 0x4
+ TCP_PCAP_IN = 0x1000
+ TCP_PCAP_OUT = 0x800
+ TCP_VENDOR = 0x80000000
+ TCSAFLUSH = 0x2
+ TIOCCBRK = 0x2000747a
+ TIOCCDTR = 0x20007478
+ TIOCCONS = 0x80047462
+ TIOCDRAIN = 0x2000745e
+ TIOCEXCL = 0x2000740d
+ TIOCEXT = 0x80047460
+ TIOCFLUSH = 0x80047410
+ TIOCGDRAINWAIT = 0x40047456
+ TIOCGETA = 0x402c7413
+ TIOCGETD = 0x4004741a
+ TIOCGPGRP = 0x40047477
+ TIOCGPTN = 0x4004740f
+ TIOCGSID = 0x40047463
+ TIOCGWINSZ = 0x40087468
+ TIOCMBIC = 0x8004746b
+ TIOCMBIS = 0x8004746c
+ TIOCMGDTRWAIT = 0x4004745a
+ TIOCMGET = 0x4004746a
+ TIOCMSDTRWAIT = 0x8004745b
+ TIOCMSET = 0x8004746d
+ TIOCM_CAR = 0x40
+ TIOCM_CD = 0x40
+ TIOCM_CTS = 0x20
+ TIOCM_DCD = 0x40
+ TIOCM_DSR = 0x100
+ TIOCM_DTR = 0x2
+ TIOCM_LE = 0x1
+ TIOCM_RI = 0x80
+ TIOCM_RNG = 0x80
+ TIOCM_RTS = 0x4
+ TIOCM_SR = 0x10
+ TIOCM_ST = 0x8
+ TIOCNOTTY = 0x20007471
+ TIOCNXCL = 0x2000740e
+ TIOCOUTQ = 0x40047473
+ TIOCPKT = 0x80047470
+ TIOCPKT_DATA = 0x0
+ TIOCPKT_DOSTOP = 0x20
+ TIOCPKT_FLUSHREAD = 0x1
+ TIOCPKT_FLUSHWRITE = 0x2
+ TIOCPKT_IOCTL = 0x40
+ TIOCPKT_NOSTOP = 0x10
+ TIOCPKT_START = 0x8
+ TIOCPKT_STOP = 0x4
+ TIOCPTMASTER = 0x2000741c
+ TIOCSBRK = 0x2000747b
+ TIOCSCTTY = 0x20007461
+ TIOCSDRAINWAIT = 0x80047457
+ TIOCSDTR = 0x20007479
+ TIOCSETA = 0x802c7414
+ TIOCSETAF = 0x802c7416
+ TIOCSETAW = 0x802c7415
+ TIOCSETD = 0x8004741b
+ TIOCSIG = 0x2004745f
+ TIOCSPGRP = 0x80047476
+ TIOCSTART = 0x2000746e
+ TIOCSTAT = 0x20007465
+ TIOCSTI = 0x80017472
+ TIOCSTOP = 0x2000746f
+ TIOCSWINSZ = 0x80087467
+ TIOCTIMESTAMP = 0x40107459
+ TIOCUCNTL = 0x80047466
+ TOSTOP = 0x400000
+ VDISCARD = 0xf
+ VDSUSP = 0xb
+ VEOF = 0x0
+ VEOL = 0x1
+ VEOL2 = 0x2
+ VERASE = 0x3
+ VERASE2 = 0x7
+ VINTR = 0x8
+ VKILL = 0x5
+ VLNEXT = 0xe
+ VMIN = 0x10
+ VQUIT = 0x9
+ VREPRINT = 0x6
+ VSTART = 0xc
+ VSTATUS = 0x12
+ VSTOP = 0xd
+ VSUSP = 0xa
+ VTIME = 0x11
+ VWERASE = 0x4
+ WCONTINUED = 0x4
+ WCOREFLAG = 0x80
+ WEXITED = 0x10
+ WLINUXCLONE = 0x80000000
+ WNOHANG = 0x1
+ WNOWAIT = 0x8
+ WSTOPPED = 0x2
+ WTRAPPED = 0x20
+ WUNTRACED = 0x2
+)
+
+// Errors
+const (
+ E2BIG = syscall.Errno(0x7)
+ EACCES = syscall.Errno(0xd)
+ EADDRINUSE = syscall.Errno(0x30)
+ EADDRNOTAVAIL = syscall.Errno(0x31)
+ EAFNOSUPPORT = syscall.Errno(0x2f)
+ EAGAIN = syscall.Errno(0x23)
+ EALREADY = syscall.Errno(0x25)
+ EAUTH = syscall.Errno(0x50)
+ EBADF = syscall.Errno(0x9)
+ EBADMSG = syscall.Errno(0x59)
+ EBADRPC = syscall.Errno(0x48)
+ EBUSY = syscall.Errno(0x10)
+ ECANCELED = syscall.Errno(0x55)
+ ECAPMODE = syscall.Errno(0x5e)
+ ECHILD = syscall.Errno(0xa)
+ ECONNABORTED = syscall.Errno(0x35)
+ ECONNREFUSED = syscall.Errno(0x3d)
+ ECONNRESET = syscall.Errno(0x36)
+ EDEADLK = syscall.Errno(0xb)
+ EDESTADDRREQ = syscall.Errno(0x27)
+ EDOM = syscall.Errno(0x21)
+ EDOOFUS = syscall.Errno(0x58)
+ EDQUOT = syscall.Errno(0x45)
+ EEXIST = syscall.Errno(0x11)
+ EFAULT = syscall.Errno(0xe)
+ EFBIG = syscall.Errno(0x1b)
+ EFTYPE = syscall.Errno(0x4f)
+ EHOSTDOWN = syscall.Errno(0x40)
+ EHOSTUNREACH = syscall.Errno(0x41)
+ EIDRM = syscall.Errno(0x52)
+ EILSEQ = syscall.Errno(0x56)
+ EINPROGRESS = syscall.Errno(0x24)
+ EINTR = syscall.Errno(0x4)
+ EINVAL = syscall.Errno(0x16)
+ EIO = syscall.Errno(0x5)
+ EISCONN = syscall.Errno(0x38)
+ EISDIR = syscall.Errno(0x15)
+ ELAST = syscall.Errno(0x60)
+ ELOOP = syscall.Errno(0x3e)
+ EMFILE = syscall.Errno(0x18)
+ EMLINK = syscall.Errno(0x1f)
+ EMSGSIZE = syscall.Errno(0x28)
+ EMULTIHOP = syscall.Errno(0x5a)
+ ENAMETOOLONG = syscall.Errno(0x3f)
+ ENEEDAUTH = syscall.Errno(0x51)
+ ENETDOWN = syscall.Errno(0x32)
+ ENETRESET = syscall.Errno(0x34)
+ ENETUNREACH = syscall.Errno(0x33)
+ ENFILE = syscall.Errno(0x17)
+ ENOATTR = syscall.Errno(0x57)
+ ENOBUFS = syscall.Errno(0x37)
+ ENODEV = syscall.Errno(0x13)
+ ENOENT = syscall.Errno(0x2)
+ ENOEXEC = syscall.Errno(0x8)
+ ENOLCK = syscall.Errno(0x4d)
+ ENOLINK = syscall.Errno(0x5b)
+ ENOMEM = syscall.Errno(0xc)
+ ENOMSG = syscall.Errno(0x53)
+ ENOPROTOOPT = syscall.Errno(0x2a)
+ ENOSPC = syscall.Errno(0x1c)
+ ENOSYS = syscall.Errno(0x4e)
+ ENOTBLK = syscall.Errno(0xf)
+ ENOTCAPABLE = syscall.Errno(0x5d)
+ ENOTCONN = syscall.Errno(0x39)
+ ENOTDIR = syscall.Errno(0x14)
+ ENOTEMPTY = syscall.Errno(0x42)
+ ENOTRECOVERABLE = syscall.Errno(0x5f)
+ ENOTSOCK = syscall.Errno(0x26)
+ ENOTSUP = syscall.Errno(0x2d)
+ ENOTTY = syscall.Errno(0x19)
+ ENXIO = syscall.Errno(0x6)
+ EOPNOTSUPP = syscall.Errno(0x2d)
+ EOVERFLOW = syscall.Errno(0x54)
+ EOWNERDEAD = syscall.Errno(0x60)
+ EPERM = syscall.Errno(0x1)
+ EPFNOSUPPORT = syscall.Errno(0x2e)
+ EPIPE = syscall.Errno(0x20)
+ EPROCLIM = syscall.Errno(0x43)
+ EPROCUNAVAIL = syscall.Errno(0x4c)
+ EPROGMISMATCH = syscall.Errno(0x4b)
+ EPROGUNAVAIL = syscall.Errno(0x4a)
+ EPROTO = syscall.Errno(0x5c)
+ EPROTONOSUPPORT = syscall.Errno(0x2b)
+ EPROTOTYPE = syscall.Errno(0x29)
+ ERANGE = syscall.Errno(0x22)
+ EREMOTE = syscall.Errno(0x47)
+ EROFS = syscall.Errno(0x1e)
+ ERPCMISMATCH = syscall.Errno(0x49)
+ ESHUTDOWN = syscall.Errno(0x3a)
+ ESOCKTNOSUPPORT = syscall.Errno(0x2c)
+ ESPIPE = syscall.Errno(0x1d)
+ ESRCH = syscall.Errno(0x3)
+ ESTALE = syscall.Errno(0x46)
+ ETIMEDOUT = syscall.Errno(0x3c)
+ ETOOMANYREFS = syscall.Errno(0x3b)
+ ETXTBSY = syscall.Errno(0x1a)
+ EUSERS = syscall.Errno(0x44)
+ EWOULDBLOCK = syscall.Errno(0x23)
+ EXDEV = syscall.Errno(0x12)
+)
+
+// Signals
+const (
+ SIGABRT = syscall.Signal(0x6)
+ SIGALRM = syscall.Signal(0xe)
+ SIGBUS = syscall.Signal(0xa)
+ SIGCHLD = syscall.Signal(0x14)
+ SIGCONT = syscall.Signal(0x13)
+ SIGEMT = syscall.Signal(0x7)
+ SIGFPE = syscall.Signal(0x8)
+ SIGHUP = syscall.Signal(0x1)
+ SIGILL = syscall.Signal(0x4)
+ SIGINFO = syscall.Signal(0x1d)
+ SIGINT = syscall.Signal(0x2)
+ SIGIO = syscall.Signal(0x17)
+ SIGIOT = syscall.Signal(0x6)
+ SIGKILL = syscall.Signal(0x9)
+ SIGLIBRT = syscall.Signal(0x21)
+ SIGLWP = syscall.Signal(0x20)
+ SIGPIPE = syscall.Signal(0xd)
+ SIGPROF = syscall.Signal(0x1b)
+ SIGQUIT = syscall.Signal(0x3)
+ SIGSEGV = syscall.Signal(0xb)
+ SIGSTOP = syscall.Signal(0x11)
+ SIGSYS = syscall.Signal(0xc)
+ SIGTERM = syscall.Signal(0xf)
+ SIGTHR = syscall.Signal(0x20)
+ SIGTRAP = syscall.Signal(0x5)
+ SIGTSTP = syscall.Signal(0x12)
+ SIGTTIN = syscall.Signal(0x15)
+ SIGTTOU = syscall.Signal(0x16)
+ SIGURG = syscall.Signal(0x10)
+ SIGUSR1 = syscall.Signal(0x1e)
+ SIGUSR2 = syscall.Signal(0x1f)
+ SIGVTALRM = syscall.Signal(0x1a)
+ SIGWINCH = syscall.Signal(0x1c)
+ SIGXCPU = syscall.Signal(0x18)
+ SIGXFSZ = syscall.Signal(0x19)
+)
+
+// Error table
+var errorList = [...]struct {
+ num syscall.Errno
+ name string
+ desc string
+}{
+ {1, "EPERM", "operation not permitted"},
+ {2, "ENOENT", "no such file or directory"},
+ {3, "ESRCH", "no such process"},
+ {4, "EINTR", "interrupted system call"},
+ {5, "EIO", "input/output error"},
+ {6, "ENXIO", "device not configured"},
+ {7, "E2BIG", "argument list too long"},
+ {8, "ENOEXEC", "exec format error"},
+ {9, "EBADF", "bad file descriptor"},
+ {10, "ECHILD", "no child processes"},
+ {11, "EDEADLK", "resource deadlock avoided"},
+ {12, "ENOMEM", "cannot allocate memory"},
+ {13, "EACCES", "permission denied"},
+ {14, "EFAULT", "bad address"},
+ {15, "ENOTBLK", "block device required"},
+ {16, "EBUSY", "device busy"},
+ {17, "EEXIST", "file exists"},
+ {18, "EXDEV", "cross-device link"},
+ {19, "ENODEV", "operation not supported by device"},
+ {20, "ENOTDIR", "not a directory"},
+ {21, "EISDIR", "is a directory"},
+ {22, "EINVAL", "invalid argument"},
+ {23, "ENFILE", "too many open files in system"},
+ {24, "EMFILE", "too many open files"},
+ {25, "ENOTTY", "inappropriate ioctl for device"},
+ {26, "ETXTBSY", "text file busy"},
+ {27, "EFBIG", "file too large"},
+ {28, "ENOSPC", "no space left on device"},
+ {29, "ESPIPE", "illegal seek"},
+ {30, "EROFS", "read-only file system"},
+ {31, "EMLINK", "too many links"},
+ {32, "EPIPE", "broken pipe"},
+ {33, "EDOM", "numerical argument out of domain"},
+ {34, "ERANGE", "result too large"},
+ {35, "EAGAIN", "resource temporarily unavailable"},
+ {36, "EINPROGRESS", "operation now in progress"},
+ {37, "EALREADY", "operation already in progress"},
+ {38, "ENOTSOCK", "socket operation on non-socket"},
+ {39, "EDESTADDRREQ", "destination address required"},
+ {40, "EMSGSIZE", "message too long"},
+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
+ {42, "ENOPROTOOPT", "protocol not available"},
+ {43, "EPROTONOSUPPORT", "protocol not supported"},
+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
+ {45, "EOPNOTSUPP", "operation not supported"},
+ {46, "EPFNOSUPPORT", "protocol family not supported"},
+ {47, "EAFNOSUPPORT", "address family not supported by protocol family"},
+ {48, "EADDRINUSE", "address already in use"},
+ {49, "EADDRNOTAVAIL", "can't assign requested address"},
+ {50, "ENETDOWN", "network is down"},
+ {51, "ENETUNREACH", "network is unreachable"},
+ {52, "ENETRESET", "network dropped connection on reset"},
+ {53, "ECONNABORTED", "software caused connection abort"},
+ {54, "ECONNRESET", "connection reset by peer"},
+ {55, "ENOBUFS", "no buffer space available"},
+ {56, "EISCONN", "socket is already connected"},
+ {57, "ENOTCONN", "socket is not connected"},
+ {58, "ESHUTDOWN", "can't send after socket shutdown"},
+ {59, "ETOOMANYREFS", "too many references: can't splice"},
+ {60, "ETIMEDOUT", "operation timed out"},
+ {61, "ECONNREFUSED", "connection refused"},
+ {62, "ELOOP", "too many levels of symbolic links"},
+ {63, "ENAMETOOLONG", "file name too long"},
+ {64, "EHOSTDOWN", "host is down"},
+ {65, "EHOSTUNREACH", "no route to host"},
+ {66, "ENOTEMPTY", "directory not empty"},
+ {67, "EPROCLIM", "too many processes"},
+ {68, "EUSERS", "too many users"},
+ {69, "EDQUOT", "disc quota exceeded"},
+ {70, "ESTALE", "stale NFS file handle"},
+ {71, "EREMOTE", "too many levels of remote in path"},
+ {72, "EBADRPC", "RPC struct is bad"},
+ {73, "ERPCMISMATCH", "RPC version wrong"},
+ {74, "EPROGUNAVAIL", "RPC prog. not avail"},
+ {75, "EPROGMISMATCH", "program version wrong"},
+ {76, "EPROCUNAVAIL", "bad procedure for program"},
+ {77, "ENOLCK", "no locks available"},
+ {78, "ENOSYS", "function not implemented"},
+ {79, "EFTYPE", "inappropriate file type or format"},
+ {80, "EAUTH", "authentication error"},
+ {81, "ENEEDAUTH", "need authenticator"},
+ {82, "EIDRM", "identifier removed"},
+ {83, "ENOMSG", "no message of desired type"},
+ {84, "EOVERFLOW", "value too large to be stored in data type"},
+ {85, "ECANCELED", "operation canceled"},
+ {86, "EILSEQ", "illegal byte sequence"},
+ {87, "ENOATTR", "attribute not found"},
+ {88, "EDOOFUS", "programming error"},
+ {89, "EBADMSG", "bad message"},
+ {90, "EMULTIHOP", "multihop attempted"},
+ {91, "ENOLINK", "link has been severed"},
+ {92, "EPROTO", "protocol error"},
+ {93, "ENOTCAPABLE", "capabilities insufficient"},
+ {94, "ECAPMODE", "not permitted in capability mode"},
+ {95, "ENOTRECOVERABLE", "state not recoverable"},
+ {96, "EOWNERDEAD", "previous owner died"},
+}
+
+// Signal table
+var signalList = [...]struct {
+ num syscall.Signal
+ name string
+ desc string
+}{
+ {1, "SIGHUP", "hangup"},
+ {2, "SIGINT", "interrupt"},
+ {3, "SIGQUIT", "quit"},
+ {4, "SIGILL", "illegal instruction"},
+ {5, "SIGTRAP", "trace/BPT trap"},
+ {6, "SIGIOT", "abort trap"},
+ {7, "SIGEMT", "EMT trap"},
+ {8, "SIGFPE", "floating point exception"},
+ {9, "SIGKILL", "killed"},
+ {10, "SIGBUS", "bus error"},
+ {11, "SIGSEGV", "segmentation fault"},
+ {12, "SIGSYS", "bad system call"},
+ {13, "SIGPIPE", "broken pipe"},
+ {14, "SIGALRM", "alarm clock"},
+ {15, "SIGTERM", "terminated"},
+ {16, "SIGURG", "urgent I/O condition"},
+ {17, "SIGSTOP", "suspended (signal)"},
+ {18, "SIGTSTP", "suspended"},
+ {19, "SIGCONT", "continued"},
+ {20, "SIGCHLD", "child exited"},
+ {21, "SIGTTIN", "stopped (tty input)"},
+ {22, "SIGTTOU", "stopped (tty output)"},
+ {23, "SIGIO", "I/O possible"},
+ {24, "SIGXCPU", "cputime limit exceeded"},
+ {25, "SIGXFSZ", "filesize limit exceeded"},
+ {26, "SIGVTALRM", "virtual timer expired"},
+ {27, "SIGPROF", "profiling timer expired"},
+ {28, "SIGWINCH", "window size changes"},
+ {29, "SIGINFO", "information request"},
+ {30, "SIGUSR1", "user defined signal 1"},
+ {31, "SIGUSR2", "user defined signal 2"},
+ {32, "SIGTHR", "unknown signal"},
+ {33, "SIGLIBRT", "unknown signal"},
+}
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
index 2f0091bbc..c62bb9490 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go
@@ -64,6 +64,7 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ AF_XDP = 0x2c
ALG_OP_DECRYPT = 0x0
ALG_OP_ENCRYPT = 0x1
ALG_SET_AEAD_ASSOCLEN = 0x4
@@ -499,6 +500,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
@@ -636,7 +639,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0xa
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -763,6 +766,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -875,6 +879,26 @@ const (
IXOFF = 0x1000
IXON = 0x400
JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
KEYCTL_ASSUME_AUTHORITY = 0x10
KEYCTL_CHOWN = 0x4
KEYCTL_CLEAR = 0x7
@@ -889,6 +913,11 @@ const (
KEYCTL_JOIN_SESSION_KEYRING = 0x1
KEYCTL_LINK = 0x8
KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
KEYCTL_READ = 0xb
KEYCTL_REJECT = 0x13
KEYCTL_RESTRICT_KEYRING = 0x1d
@@ -898,6 +927,10 @@ const (
KEYCTL_SETPERM = 0x5
KEYCTL_SET_REQKEY_KEYRING = 0xe
KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
KEYCTL_UNLINK = 0x9
KEYCTL_UPDATE = 0x2
KEY_REQKEY_DEFL_DEFAULT = 0x0
@@ -956,6 +989,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -966,11 +1000,30 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
+ MAP_SYNC = 0x80000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
MCL_ONFAULT = 0x4
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
MINIX2_SUPER_MAGIC = 0x2468
MINIX2_SUPER_MAGIC2 = 0x2478
MINIX3_SUPER_MAGIC = 0x4d5a
@@ -979,6 +1032,8 @@ const (
MNT_DETACH = 0x2
MNT_EXPIRE = 0x4
MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
MSDOS_SUPER_MAGIC = 0x4d44
MSG_BATCH = 0x40000
MSG_CMSG_CLOEXEC = 0x40000000
@@ -1055,6 +1110,7 @@ const (
NETLINK_FIB_LOOKUP = 0xa
NETLINK_FIREWALL = 0x3
NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
NETLINK_INET_DIAG = 0x4
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
@@ -1076,6 +1132,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1196,6 +1254,7 @@ const (
PACKET_FASTROUTE = 0x6
PACKET_HDRLEN = 0xb
PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
PACKET_KERNEL = 0x7
PACKET_LOOPBACK = 0x5
PACKET_LOSS = 0xe
@@ -1245,6 +1304,36 @@ const (
PERF_EVENT_IOC_SET_FILTER = 0x40042406
PERF_EVENT_IOC_SET_OUTPUT = 0x2405
PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x4004743d
+ PPPIOCATTCHAN = 0x40047438
+ PPPIOCCONNECT = 0x4004743a
+ PPPIOCDETACH = 0x4004743c
+ PPPIOCDISCONN = 0x7439
+ PPPIOCGASYNCMAP = 0x80047458
+ PPPIOCGCHAN = 0x80047437
+ PPPIOCGDEBUG = 0x80047441
+ PPPIOCGFLAGS = 0x8004745a
+ PPPIOCGIDLE = 0x8008743f
+ PPPIOCGL2TPSTATS = 0x80487436
+ PPPIOCGMRU = 0x80047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x80047455
+ PPPIOCGUNIT = 0x80047456
+ PPPIOCGXASYNCMAP = 0x80207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x40087446
+ PPPIOCSASYNCMAP = 0x40047457
+ PPPIOCSCOMPRESS = 0x400c744d
+ PPPIOCSDEBUG = 0x40047440
+ PPPIOCSFLAGS = 0x40047459
+ PPPIOCSMAXCID = 0x40047451
+ PPPIOCSMRRU = 0x4004743b
+ PPPIOCSMRU = 0x40047452
+ PPPIOCSNPMODE = 0x4008744b
+ PPPIOCSPASS = 0x40087447
+ PPPIOCSRASYNCMAP = 0x40047454
+ PPPIOCSXASYNCMAP = 0x4020744f
+ PPPIOCXFERUNIT = 0x744e
PRIO_PGRP = 0x1
PRIO_PROCESS = 0x0
PRIO_USER = 0x2
@@ -1346,6 +1435,7 @@ const (
PR_SPEC_DISABLE = 0x4
PR_SPEC_ENABLE = 0x2
PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
PR_SPEC_NOT_AFFECTED = 0x0
PR_SPEC_PRCTL = 0x1
PR_SPEC_STORE_BYPASS = 0x0
@@ -1427,6 +1517,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1469,7 +1562,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1537,6 +1630,7 @@ const (
RTM_DELACTION = 0x31
RTM_DELADDR = 0x15
RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
RTM_DELLINK = 0x11
RTM_DELMDB = 0x55
RTM_DELNEIGH = 0x1d
@@ -1557,6 +1651,7 @@ const (
RTM_GETADDR = 0x16
RTM_GETADDRLABEL = 0x4a
RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
RTM_GETDCB = 0x4e
RTM_GETLINK = 0x12
RTM_GETMDB = 0x56
@@ -1571,11 +1666,12 @@ const (
RTM_GETSTATS = 0x5e
RTM_GETTCLASS = 0x2a
RTM_GETTFILTER = 0x2e
- RTM_MAX = 0x63
+ RTM_MAX = 0x67
RTM_NEWACTION = 0x30
RTM_NEWADDR = 0x14
RTM_NEWADDRLABEL = 0x48
RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
RTM_NEWLINK = 0x10
RTM_NEWMDB = 0x54
RTM_NEWNDUSEROPT = 0x44
@@ -1590,8 +1686,8 @@ const (
RTM_NEWSTATS = 0x5c
RTM_NEWTCLASS = 0x28
RTM_NEWTFILTER = 0x2c
- RTM_NR_FAMILIES = 0x15
- RTM_NR_MSGTYPES = 0x54
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
RTM_SETDCB = 0x4f
RTM_SETLINK = 0x13
RTM_SETNEIGHTBL = 0x43
@@ -1605,17 +1701,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1635,7 +1736,9 @@ const (
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
+ SC_LOG_FLUSH = 0x100000
SECCOMP_MODE_DISABLED = 0x0
SECCOMP_MODE_FILTER = 0x2
SECCOMP_MODE_STRICT = 0x1
@@ -1691,6 +1794,9 @@ const (
SIOCGMIIPHY = 0x8947
SIOCGMIIREG = 0x8948
SIOCGPGRP = 0x8904
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
SIOCGRARP = 0x8961
SIOCGSKNS = 0x894c
SIOCGSTAMP = 0x8906
@@ -1780,6 +1886,7 @@ const (
SOL_TIPC = 0x10f
SOL_TLS = 0x11a
SOL_X25 = 0x106
+ SOL_XDP = 0x11b
SOMAXCONN = 0x80
SO_ACCEPTCONN = 0x1e
SO_ATTACH_BPF = 0x32
@@ -1838,6 +1945,7 @@ const (
SO_TIMESTAMP = 0x1d
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
+ SO_TXTIME = 0x3d
SO_TYPE = 0x3
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
@@ -1875,6 +1983,9 @@ const (
STATX_TYPE = 0x1
STATX_UID = 0x8
STATX__RESERVED = 0x80000000
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
SYSFS_MAGIC = 0x62656572
S_BLKSIZE = 0x200
S_IEXEC = 0x40
@@ -1913,7 +2024,7 @@ const (
TASKSTATS_GENL_NAME = "TASKSTATS"
TASKSTATS_GENL_VERSION = 0x1
TASKSTATS_TYPE_MAX = 0x6
- TASKSTATS_VERSION = 0x8
+ TASKSTATS_VERSION = 0x9
TCFLSH = 0x540b
TCGETA = 0x5405
TCGETS = 0x5401
@@ -1938,6 +2049,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
@@ -1995,6 +2108,7 @@ const (
TIOCGETD = 0x5424
TIOCGEXCL = 0x80045440
TIOCGICOUNT = 0x545d
+ TIOCGISO7816 = 0x80285442
TIOCGLCKTRMIOS = 0x5456
TIOCGPGRP = 0x540f
TIOCGPKT = 0x80045438
@@ -2048,6 +2162,7 @@ const (
TIOCSER_TEMT = 0x1
TIOCSETD = 0x5423
TIOCSIG = 0x40045436
+ TIOCSISO7816 = 0xc0285443
TIOCSLCKTRMIOS = 0x5457
TIOCSPGRP = 0x5410
TIOCSPTLCK = 0x40045431
@@ -2105,6 +2220,21 @@ const (
TUNSETVNETBE = 0x400454de
TUNSETVNETHDRSZ = 0x400454d8
TUNSETVNETLE = 0x400454dc
+ UBI_IOCATT = 0x40186f40
+ UBI_IOCDET = 0x40046f41
+ UBI_IOCEBCH = 0x40044f02
+ UBI_IOCEBER = 0x40044f01
+ UBI_IOCEBISMAP = 0x80044f05
+ UBI_IOCEBMAP = 0x40084f03
+ UBI_IOCEBUNMAP = 0x40044f04
+ UBI_IOCMKVOL = 0x40986f00
+ UBI_IOCRMVOL = 0x40046f01
+ UBI_IOCRNVOL = 0x51106f03
+ UBI_IOCRSVOL = 0x400c6f02
+ UBI_IOCSETVOLPROP = 0x40104f06
+ UBI_IOCVOLCRBLK = 0x40804f07
+ UBI_IOCVOLRMBLK = 0x4f08
+ UBI_IOCVOLUP = 0x40084f00
UDF_SUPER_MAGIC = 0x15013346
UMOUNT_NOFOLLOW = 0x8
USBDEVICE_SUPER_MAGIC = 0x9fa2
@@ -2242,7 +2372,28 @@ const (
XATTR_CREATE = 0x1
XATTR_REPLACE = 0x2
XCASE = 0x4
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
XTABS = 0x1800
ZSMALLOC_MAGIC = 0x58295829
)
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
index a80c7ae5f..93f65d7d1 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
@@ -64,6 +64,7 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ AF_XDP = 0x2c
ALG_OP_DECRYPT = 0x0
ALG_OP_ENCRYPT = 0x1
ALG_SET_AEAD_ASSOCLEN = 0x4
@@ -499,6 +500,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
@@ -636,7 +639,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0xa
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -763,6 +766,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -875,6 +879,26 @@ const (
IXOFF = 0x1000
IXON = 0x400
JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
KEYCTL_ASSUME_AUTHORITY = 0x10
KEYCTL_CHOWN = 0x4
KEYCTL_CLEAR = 0x7
@@ -889,6 +913,11 @@ const (
KEYCTL_JOIN_SESSION_KEYRING = 0x1
KEYCTL_LINK = 0x8
KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
KEYCTL_READ = 0xb
KEYCTL_REJECT = 0x13
KEYCTL_RESTRICT_KEYRING = 0x1d
@@ -898,6 +927,10 @@ const (
KEYCTL_SETPERM = 0x5
KEYCTL_SET_REQKEY_KEYRING = 0xe
KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
KEYCTL_UNLINK = 0x9
KEYCTL_UPDATE = 0x2
KEY_REQKEY_DEFL_DEFAULT = 0x0
@@ -956,6 +989,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -966,11 +1000,30 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
+ MAP_SYNC = 0x80000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
MCL_ONFAULT = 0x4
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
MINIX2_SUPER_MAGIC = 0x2468
MINIX2_SUPER_MAGIC2 = 0x2478
MINIX3_SUPER_MAGIC = 0x4d5a
@@ -979,6 +1032,8 @@ const (
MNT_DETACH = 0x2
MNT_EXPIRE = 0x4
MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
MSDOS_SUPER_MAGIC = 0x4d44
MSG_BATCH = 0x40000
MSG_CMSG_CLOEXEC = 0x40000000
@@ -1055,6 +1110,7 @@ const (
NETLINK_FIB_LOOKUP = 0xa
NETLINK_FIREWALL = 0x3
NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
NETLINK_INET_DIAG = 0x4
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
@@ -1076,6 +1132,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1196,6 +1254,7 @@ const (
PACKET_FASTROUTE = 0x6
PACKET_HDRLEN = 0xb
PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
PACKET_KERNEL = 0x7
PACKET_LOOPBACK = 0x5
PACKET_LOSS = 0xe
@@ -1245,6 +1304,36 @@ const (
PERF_EVENT_IOC_SET_FILTER = 0x40082406
PERF_EVENT_IOC_SET_OUTPUT = 0x2405
PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x4004743d
+ PPPIOCATTCHAN = 0x40047438
+ PPPIOCCONNECT = 0x4004743a
+ PPPIOCDETACH = 0x4004743c
+ PPPIOCDISCONN = 0x7439
+ PPPIOCGASYNCMAP = 0x80047458
+ PPPIOCGCHAN = 0x80047437
+ PPPIOCGDEBUG = 0x80047441
+ PPPIOCGFLAGS = 0x8004745a
+ PPPIOCGIDLE = 0x8010743f
+ PPPIOCGL2TPSTATS = 0x80487436
+ PPPIOCGMRU = 0x80047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x80047455
+ PPPIOCGUNIT = 0x80047456
+ PPPIOCGXASYNCMAP = 0x80207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x40107446
+ PPPIOCSASYNCMAP = 0x40047457
+ PPPIOCSCOMPRESS = 0x4010744d
+ PPPIOCSDEBUG = 0x40047440
+ PPPIOCSFLAGS = 0x40047459
+ PPPIOCSMAXCID = 0x40047451
+ PPPIOCSMRRU = 0x4004743b
+ PPPIOCSMRU = 0x40047452
+ PPPIOCSNPMODE = 0x4008744b
+ PPPIOCSPASS = 0x40107447
+ PPPIOCSRASYNCMAP = 0x40047454
+ PPPIOCSXASYNCMAP = 0x4020744f
+ PPPIOCXFERUNIT = 0x744e
PRIO_PGRP = 0x1
PRIO_PROCESS = 0x0
PRIO_USER = 0x2
@@ -1346,6 +1435,7 @@ const (
PR_SPEC_DISABLE = 0x4
PR_SPEC_ENABLE = 0x2
PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
PR_SPEC_NOT_AFFECTED = 0x0
PR_SPEC_PRCTL = 0x1
PR_SPEC_STORE_BYPASS = 0x0
@@ -1428,6 +1518,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1470,7 +1563,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1538,6 +1631,7 @@ const (
RTM_DELACTION = 0x31
RTM_DELADDR = 0x15
RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
RTM_DELLINK = 0x11
RTM_DELMDB = 0x55
RTM_DELNEIGH = 0x1d
@@ -1558,6 +1652,7 @@ const (
RTM_GETADDR = 0x16
RTM_GETADDRLABEL = 0x4a
RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
RTM_GETDCB = 0x4e
RTM_GETLINK = 0x12
RTM_GETMDB = 0x56
@@ -1572,11 +1667,12 @@ const (
RTM_GETSTATS = 0x5e
RTM_GETTCLASS = 0x2a
RTM_GETTFILTER = 0x2e
- RTM_MAX = 0x63
+ RTM_MAX = 0x67
RTM_NEWACTION = 0x30
RTM_NEWADDR = 0x14
RTM_NEWADDRLABEL = 0x48
RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
RTM_NEWLINK = 0x10
RTM_NEWMDB = 0x54
RTM_NEWNDUSEROPT = 0x44
@@ -1591,8 +1687,8 @@ const (
RTM_NEWSTATS = 0x5c
RTM_NEWTCLASS = 0x28
RTM_NEWTFILTER = 0x2c
- RTM_NR_FAMILIES = 0x15
- RTM_NR_MSGTYPES = 0x54
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
RTM_SETDCB = 0x4f
RTM_SETLINK = 0x13
RTM_SETNEIGHTBL = 0x43
@@ -1606,17 +1702,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1636,7 +1737,9 @@ const (
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
+ SC_LOG_FLUSH = 0x100000
SECCOMP_MODE_DISABLED = 0x0
SECCOMP_MODE_FILTER = 0x2
SECCOMP_MODE_STRICT = 0x1
@@ -1692,6 +1795,9 @@ const (
SIOCGMIIPHY = 0x8947
SIOCGMIIREG = 0x8948
SIOCGPGRP = 0x8904
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
SIOCGRARP = 0x8961
SIOCGSKNS = 0x894c
SIOCGSTAMP = 0x8906
@@ -1781,6 +1887,7 @@ const (
SOL_TIPC = 0x10f
SOL_TLS = 0x11a
SOL_X25 = 0x106
+ SOL_XDP = 0x11b
SOMAXCONN = 0x80
SO_ACCEPTCONN = 0x1e
SO_ATTACH_BPF = 0x32
@@ -1839,6 +1946,7 @@ const (
SO_TIMESTAMP = 0x1d
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
+ SO_TXTIME = 0x3d
SO_TYPE = 0x3
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
@@ -1876,6 +1984,9 @@ const (
STATX_TYPE = 0x1
STATX_UID = 0x8
STATX__RESERVED = 0x80000000
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
SYSFS_MAGIC = 0x62656572
S_BLKSIZE = 0x200
S_IEXEC = 0x40
@@ -1914,7 +2025,7 @@ const (
TASKSTATS_GENL_NAME = "TASKSTATS"
TASKSTATS_GENL_VERSION = 0x1
TASKSTATS_TYPE_MAX = 0x6
- TASKSTATS_VERSION = 0x8
+ TASKSTATS_VERSION = 0x9
TCFLSH = 0x540b
TCGETA = 0x5405
TCGETS = 0x5401
@@ -1939,6 +2050,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
@@ -1996,6 +2109,7 @@ const (
TIOCGETD = 0x5424
TIOCGEXCL = 0x80045440
TIOCGICOUNT = 0x545d
+ TIOCGISO7816 = 0x80285442
TIOCGLCKTRMIOS = 0x5456
TIOCGPGRP = 0x540f
TIOCGPKT = 0x80045438
@@ -2049,6 +2163,7 @@ const (
TIOCSER_TEMT = 0x1
TIOCSETD = 0x5423
TIOCSIG = 0x40045436
+ TIOCSISO7816 = 0xc0285443
TIOCSLCKTRMIOS = 0x5457
TIOCSPGRP = 0x5410
TIOCSPTLCK = 0x40045431
@@ -2106,6 +2221,21 @@ const (
TUNSETVNETBE = 0x400454de
TUNSETVNETHDRSZ = 0x400454d8
TUNSETVNETLE = 0x400454dc
+ UBI_IOCATT = 0x40186f40
+ UBI_IOCDET = 0x40046f41
+ UBI_IOCEBCH = 0x40044f02
+ UBI_IOCEBER = 0x40044f01
+ UBI_IOCEBISMAP = 0x80044f05
+ UBI_IOCEBMAP = 0x40084f03
+ UBI_IOCEBUNMAP = 0x40044f04
+ UBI_IOCMKVOL = 0x40986f00
+ UBI_IOCRMVOL = 0x40046f01
+ UBI_IOCRNVOL = 0x51106f03
+ UBI_IOCRSVOL = 0x400c6f02
+ UBI_IOCSETVOLPROP = 0x40104f06
+ UBI_IOCVOLCRBLK = 0x40804f07
+ UBI_IOCVOLRMBLK = 0x4f08
+ UBI_IOCVOLUP = 0x40084f00
UDF_SUPER_MAGIC = 0x15013346
UMOUNT_NOFOLLOW = 0x8
USBDEVICE_SUPER_MAGIC = 0x9fa2
@@ -2242,7 +2372,28 @@ const (
XATTR_CREATE = 0x1
XATTR_REPLACE = 0x2
XCASE = 0x4
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
XTABS = 0x1800
ZSMALLOC_MAGIC = 0x58295829
)
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
index 49a9b0133..ccc57676f 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
@@ -64,6 +64,7 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ AF_XDP = 0x2c
ALG_OP_DECRYPT = 0x0
ALG_OP_ENCRYPT = 0x1
ALG_SET_AEAD_ASSOCLEN = 0x4
@@ -498,6 +499,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
@@ -635,7 +638,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0xa
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +765,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -874,6 +878,26 @@ const (
IXOFF = 0x1000
IXON = 0x400
JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
KEYCTL_ASSUME_AUTHORITY = 0x10
KEYCTL_CHOWN = 0x4
KEYCTL_CLEAR = 0x7
@@ -888,6 +912,11 @@ const (
KEYCTL_JOIN_SESSION_KEYRING = 0x1
KEYCTL_LINK = 0x8
KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
KEYCTL_READ = 0xb
KEYCTL_REJECT = 0x13
KEYCTL_RESTRICT_KEYRING = 0x1d
@@ -897,6 +926,10 @@ const (
KEYCTL_SETPERM = 0x5
KEYCTL_SET_REQKEY_KEYRING = 0xe
KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
KEYCTL_UNLINK = 0x9
KEYCTL_UPDATE = 0x2
KEY_REQKEY_DEFL_DEFAULT = 0x0
@@ -954,6 +987,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -964,11 +998,30 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
+ MAP_SYNC = 0x80000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
MCL_ONFAULT = 0x4
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
MINIX2_SUPER_MAGIC = 0x2468
MINIX2_SUPER_MAGIC2 = 0x2478
MINIX3_SUPER_MAGIC = 0x4d5a
@@ -977,6 +1030,8 @@ const (
MNT_DETACH = 0x2
MNT_EXPIRE = 0x4
MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
MSDOS_SUPER_MAGIC = 0x4d44
MSG_BATCH = 0x40000
MSG_CMSG_CLOEXEC = 0x40000000
@@ -1053,6 +1108,7 @@ const (
NETLINK_FIB_LOOKUP = 0xa
NETLINK_FIREWALL = 0x3
NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
NETLINK_INET_DIAG = 0x4
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
@@ -1074,6 +1130,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1194,6 +1252,7 @@ const (
PACKET_FASTROUTE = 0x6
PACKET_HDRLEN = 0xb
PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
PACKET_KERNEL = 0x7
PACKET_LOOPBACK = 0x5
PACKET_LOSS = 0xe
@@ -1243,6 +1302,36 @@ const (
PERF_EVENT_IOC_SET_FILTER = 0x40042406
PERF_EVENT_IOC_SET_OUTPUT = 0x2405
PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x4004743d
+ PPPIOCATTCHAN = 0x40047438
+ PPPIOCCONNECT = 0x4004743a
+ PPPIOCDETACH = 0x4004743c
+ PPPIOCDISCONN = 0x7439
+ PPPIOCGASYNCMAP = 0x80047458
+ PPPIOCGCHAN = 0x80047437
+ PPPIOCGDEBUG = 0x80047441
+ PPPIOCGFLAGS = 0x8004745a
+ PPPIOCGIDLE = 0x8008743f
+ PPPIOCGL2TPSTATS = 0x80487436
+ PPPIOCGMRU = 0x80047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x80047455
+ PPPIOCGUNIT = 0x80047456
+ PPPIOCGXASYNCMAP = 0x80207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x40087446
+ PPPIOCSASYNCMAP = 0x40047457
+ PPPIOCSCOMPRESS = 0x400c744d
+ PPPIOCSDEBUG = 0x40047440
+ PPPIOCSFLAGS = 0x40047459
+ PPPIOCSMAXCID = 0x40047451
+ PPPIOCSMRRU = 0x4004743b
+ PPPIOCSMRU = 0x40047452
+ PPPIOCSNPMODE = 0x4008744b
+ PPPIOCSPASS = 0x40087447
+ PPPIOCSRASYNCMAP = 0x40047454
+ PPPIOCSXASYNCMAP = 0x4020744f
+ PPPIOCXFERUNIT = 0x744e
PRIO_PGRP = 0x1
PRIO_PROCESS = 0x0
PRIO_USER = 0x2
@@ -1344,6 +1433,7 @@ const (
PR_SPEC_DISABLE = 0x4
PR_SPEC_ENABLE = 0x2
PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
PR_SPEC_NOT_AFFECTED = 0x0
PR_SPEC_PRCTL = 0x1
PR_SPEC_STORE_BYPASS = 0x0
@@ -1434,6 +1524,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1476,7 +1569,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1544,6 +1637,7 @@ const (
RTM_DELACTION = 0x31
RTM_DELADDR = 0x15
RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
RTM_DELLINK = 0x11
RTM_DELMDB = 0x55
RTM_DELNEIGH = 0x1d
@@ -1564,6 +1658,7 @@ const (
RTM_GETADDR = 0x16
RTM_GETADDRLABEL = 0x4a
RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
RTM_GETDCB = 0x4e
RTM_GETLINK = 0x12
RTM_GETMDB = 0x56
@@ -1578,11 +1673,12 @@ const (
RTM_GETSTATS = 0x5e
RTM_GETTCLASS = 0x2a
RTM_GETTFILTER = 0x2e
- RTM_MAX = 0x63
+ RTM_MAX = 0x67
RTM_NEWACTION = 0x30
RTM_NEWADDR = 0x14
RTM_NEWADDRLABEL = 0x48
RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
RTM_NEWLINK = 0x10
RTM_NEWMDB = 0x54
RTM_NEWNDUSEROPT = 0x44
@@ -1597,8 +1693,8 @@ const (
RTM_NEWSTATS = 0x5c
RTM_NEWTCLASS = 0x28
RTM_NEWTFILTER = 0x2c
- RTM_NR_FAMILIES = 0x15
- RTM_NR_MSGTYPES = 0x54
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
RTM_SETDCB = 0x4f
RTM_SETLINK = 0x13
RTM_SETNEIGHTBL = 0x43
@@ -1612,17 +1708,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1642,7 +1743,9 @@ const (
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
+ SC_LOG_FLUSH = 0x100000
SECCOMP_MODE_DISABLED = 0x0
SECCOMP_MODE_FILTER = 0x2
SECCOMP_MODE_STRICT = 0x1
@@ -1698,6 +1801,9 @@ const (
SIOCGMIIPHY = 0x8947
SIOCGMIIREG = 0x8948
SIOCGPGRP = 0x8904
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
SIOCGRARP = 0x8961
SIOCGSKNS = 0x894c
SIOCGSTAMP = 0x8906
@@ -1787,6 +1893,7 @@ const (
SOL_TIPC = 0x10f
SOL_TLS = 0x11a
SOL_X25 = 0x106
+ SOL_XDP = 0x11b
SOMAXCONN = 0x80
SO_ACCEPTCONN = 0x1e
SO_ATTACH_BPF = 0x32
@@ -1845,6 +1952,7 @@ const (
SO_TIMESTAMP = 0x1d
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
+ SO_TXTIME = 0x3d
SO_TYPE = 0x3
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
@@ -1882,6 +1990,9 @@ const (
STATX_TYPE = 0x1
STATX_UID = 0x8
STATX__RESERVED = 0x80000000
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
SYSFS_MAGIC = 0x62656572
S_BLKSIZE = 0x200
S_IEXEC = 0x40
@@ -1920,7 +2031,7 @@ const (
TASKSTATS_GENL_NAME = "TASKSTATS"
TASKSTATS_GENL_VERSION = 0x1
TASKSTATS_TYPE_MAX = 0x6
- TASKSTATS_VERSION = 0x8
+ TASKSTATS_VERSION = 0x9
TCFLSH = 0x540b
TCGETA = 0x5405
TCGETS = 0x5401
@@ -1945,6 +2056,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
@@ -2002,6 +2115,7 @@ const (
TIOCGETD = 0x5424
TIOCGEXCL = 0x80045440
TIOCGICOUNT = 0x545d
+ TIOCGISO7816 = 0x80285442
TIOCGLCKTRMIOS = 0x5456
TIOCGPGRP = 0x540f
TIOCGPKT = 0x80045438
@@ -2055,6 +2169,7 @@ const (
TIOCSER_TEMT = 0x1
TIOCSETD = 0x5423
TIOCSIG = 0x40045436
+ TIOCSISO7816 = 0xc0285443
TIOCSLCKTRMIOS = 0x5457
TIOCSPGRP = 0x5410
TIOCSPTLCK = 0x40045431
@@ -2112,6 +2227,21 @@ const (
TUNSETVNETBE = 0x400454de
TUNSETVNETHDRSZ = 0x400454d8
TUNSETVNETLE = 0x400454dc
+ UBI_IOCATT = 0x40186f40
+ UBI_IOCDET = 0x40046f41
+ UBI_IOCEBCH = 0x40044f02
+ UBI_IOCEBER = 0x40044f01
+ UBI_IOCEBISMAP = 0x80044f05
+ UBI_IOCEBMAP = 0x40084f03
+ UBI_IOCEBUNMAP = 0x40044f04
+ UBI_IOCMKVOL = 0x40986f00
+ UBI_IOCRMVOL = 0x40046f01
+ UBI_IOCRNVOL = 0x51106f03
+ UBI_IOCRSVOL = 0x400c6f02
+ UBI_IOCSETVOLPROP = 0x40104f06
+ UBI_IOCVOLCRBLK = 0x40804f07
+ UBI_IOCVOLRMBLK = 0x4f08
+ UBI_IOCVOLUP = 0x40084f00
UDF_SUPER_MAGIC = 0x15013346
UMOUNT_NOFOLLOW = 0x8
USBDEVICE_SUPER_MAGIC = 0x9fa2
@@ -2248,7 +2378,28 @@ const (
XATTR_CREATE = 0x1
XATTR_REPLACE = 0x2
XCASE = 0x4
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
XTABS = 0x1800
ZSMALLOC_MAGIC = 0x58295829
)
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
index 8d70233b2..9c57337c6 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
@@ -64,6 +64,7 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ AF_XDP = 0x2c
ALG_OP_DECRYPT = 0x0
ALG_OP_ENCRYPT = 0x1
ALG_SET_AEAD_ASSOCLEN = 0x4
@@ -501,6 +502,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
@@ -638,7 +641,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0xa
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -765,6 +768,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -877,6 +881,26 @@ const (
IXOFF = 0x1000
IXON = 0x400
JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
KEYCTL_ASSUME_AUTHORITY = 0x10
KEYCTL_CHOWN = 0x4
KEYCTL_CLEAR = 0x7
@@ -891,6 +915,11 @@ const (
KEYCTL_JOIN_SESSION_KEYRING = 0x1
KEYCTL_LINK = 0x8
KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
KEYCTL_READ = 0xb
KEYCTL_REJECT = 0x13
KEYCTL_RESTRICT_KEYRING = 0x1d
@@ -900,6 +929,10 @@ const (
KEYCTL_SETPERM = 0x5
KEYCTL_SET_REQKEY_KEYRING = 0xe
KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
KEYCTL_UNLINK = 0x9
KEYCTL_UPDATE = 0x2
KEY_REQKEY_DEFL_DEFAULT = 0x0
@@ -957,6 +990,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -967,11 +1001,30 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
+ MAP_SYNC = 0x80000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
MCL_ONFAULT = 0x4
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
MINIX2_SUPER_MAGIC = 0x2468
MINIX2_SUPER_MAGIC2 = 0x2478
MINIX3_SUPER_MAGIC = 0x4d5a
@@ -980,6 +1033,8 @@ const (
MNT_DETACH = 0x2
MNT_EXPIRE = 0x4
MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
MSDOS_SUPER_MAGIC = 0x4d44
MSG_BATCH = 0x40000
MSG_CMSG_CLOEXEC = 0x40000000
@@ -1056,6 +1111,7 @@ const (
NETLINK_FIB_LOOKUP = 0xa
NETLINK_FIREWALL = 0x3
NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
NETLINK_INET_DIAG = 0x4
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
@@ -1077,6 +1133,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1197,6 +1255,7 @@ const (
PACKET_FASTROUTE = 0x6
PACKET_HDRLEN = 0xb
PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
PACKET_KERNEL = 0x7
PACKET_LOOPBACK = 0x5
PACKET_LOSS = 0xe
@@ -1246,6 +1305,36 @@ const (
PERF_EVENT_IOC_SET_FILTER = 0x40082406
PERF_EVENT_IOC_SET_OUTPUT = 0x2405
PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x4004743d
+ PPPIOCATTCHAN = 0x40047438
+ PPPIOCCONNECT = 0x4004743a
+ PPPIOCDETACH = 0x4004743c
+ PPPIOCDISCONN = 0x7439
+ PPPIOCGASYNCMAP = 0x80047458
+ PPPIOCGCHAN = 0x80047437
+ PPPIOCGDEBUG = 0x80047441
+ PPPIOCGFLAGS = 0x8004745a
+ PPPIOCGIDLE = 0x8010743f
+ PPPIOCGL2TPSTATS = 0x80487436
+ PPPIOCGMRU = 0x80047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x80047455
+ PPPIOCGUNIT = 0x80047456
+ PPPIOCGXASYNCMAP = 0x80207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x40107446
+ PPPIOCSASYNCMAP = 0x40047457
+ PPPIOCSCOMPRESS = 0x4010744d
+ PPPIOCSDEBUG = 0x40047440
+ PPPIOCSFLAGS = 0x40047459
+ PPPIOCSMAXCID = 0x40047451
+ PPPIOCSMRRU = 0x4004743b
+ PPPIOCSMRU = 0x40047452
+ PPPIOCSNPMODE = 0x4008744b
+ PPPIOCSPASS = 0x40107447
+ PPPIOCSRASYNCMAP = 0x40047454
+ PPPIOCSXASYNCMAP = 0x4020744f
+ PPPIOCXFERUNIT = 0x744e
PRIO_PGRP = 0x1
PRIO_PROCESS = 0x0
PRIO_USER = 0x2
@@ -1347,6 +1436,7 @@ const (
PR_SPEC_DISABLE = 0x4
PR_SPEC_ENABLE = 0x2
PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
PR_SPEC_NOT_AFFECTED = 0x0
PR_SPEC_PRCTL = 0x1
PR_SPEC_STORE_BYPASS = 0x0
@@ -1418,6 +1508,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1460,7 +1553,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1528,6 +1621,7 @@ const (
RTM_DELACTION = 0x31
RTM_DELADDR = 0x15
RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
RTM_DELLINK = 0x11
RTM_DELMDB = 0x55
RTM_DELNEIGH = 0x1d
@@ -1548,6 +1642,7 @@ const (
RTM_GETADDR = 0x16
RTM_GETADDRLABEL = 0x4a
RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
RTM_GETDCB = 0x4e
RTM_GETLINK = 0x12
RTM_GETMDB = 0x56
@@ -1562,11 +1657,12 @@ const (
RTM_GETSTATS = 0x5e
RTM_GETTCLASS = 0x2a
RTM_GETTFILTER = 0x2e
- RTM_MAX = 0x63
+ RTM_MAX = 0x67
RTM_NEWACTION = 0x30
RTM_NEWADDR = 0x14
RTM_NEWADDRLABEL = 0x48
RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
RTM_NEWLINK = 0x10
RTM_NEWMDB = 0x54
RTM_NEWNDUSEROPT = 0x44
@@ -1581,8 +1677,8 @@ const (
RTM_NEWSTATS = 0x5c
RTM_NEWTCLASS = 0x28
RTM_NEWTFILTER = 0x2c
- RTM_NR_FAMILIES = 0x15
- RTM_NR_MSGTYPES = 0x54
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
RTM_SETDCB = 0x4f
RTM_SETLINK = 0x13
RTM_SETNEIGHTBL = 0x43
@@ -1596,17 +1692,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1626,7 +1727,9 @@ const (
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
+ SC_LOG_FLUSH = 0x100000
SECCOMP_MODE_DISABLED = 0x0
SECCOMP_MODE_FILTER = 0x2
SECCOMP_MODE_STRICT = 0x1
@@ -1682,6 +1785,9 @@ const (
SIOCGMIIPHY = 0x8947
SIOCGMIIREG = 0x8948
SIOCGPGRP = 0x8904
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
SIOCGRARP = 0x8961
SIOCGSKNS = 0x894c
SIOCGSTAMP = 0x8906
@@ -1771,6 +1877,7 @@ const (
SOL_TIPC = 0x10f
SOL_TLS = 0x11a
SOL_X25 = 0x106
+ SOL_XDP = 0x11b
SOMAXCONN = 0x80
SO_ACCEPTCONN = 0x1e
SO_ATTACH_BPF = 0x32
@@ -1829,6 +1936,7 @@ const (
SO_TIMESTAMP = 0x1d
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
+ SO_TXTIME = 0x3d
SO_TYPE = 0x3
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
@@ -1867,6 +1975,9 @@ const (
STATX_UID = 0x8
STATX__RESERVED = 0x80000000
SVE_MAGIC = 0x53564501
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
SYSFS_MAGIC = 0x62656572
S_BLKSIZE = 0x200
S_IEXEC = 0x40
@@ -1905,7 +2016,7 @@ const (
TASKSTATS_GENL_NAME = "TASKSTATS"
TASKSTATS_GENL_VERSION = 0x1
TASKSTATS_TYPE_MAX = 0x6
- TASKSTATS_VERSION = 0x8
+ TASKSTATS_VERSION = 0x9
TCFLSH = 0x540b
TCGETA = 0x5405
TCGETS = 0x5401
@@ -1930,6 +2041,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
@@ -1987,6 +2100,7 @@ const (
TIOCGETD = 0x5424
TIOCGEXCL = 0x80045440
TIOCGICOUNT = 0x545d
+ TIOCGISO7816 = 0x80285442
TIOCGLCKTRMIOS = 0x5456
TIOCGPGRP = 0x540f
TIOCGPKT = 0x80045438
@@ -2040,6 +2154,7 @@ const (
TIOCSER_TEMT = 0x1
TIOCSETD = 0x5423
TIOCSIG = 0x40045436
+ TIOCSISO7816 = 0xc0285443
TIOCSLCKTRMIOS = 0x5457
TIOCSPGRP = 0x5410
TIOCSPTLCK = 0x40045431
@@ -2097,6 +2212,21 @@ const (
TUNSETVNETBE = 0x400454de
TUNSETVNETHDRSZ = 0x400454d8
TUNSETVNETLE = 0x400454dc
+ UBI_IOCATT = 0x40186f40
+ UBI_IOCDET = 0x40046f41
+ UBI_IOCEBCH = 0x40044f02
+ UBI_IOCEBER = 0x40044f01
+ UBI_IOCEBISMAP = 0x80044f05
+ UBI_IOCEBMAP = 0x40084f03
+ UBI_IOCEBUNMAP = 0x40044f04
+ UBI_IOCMKVOL = 0x40986f00
+ UBI_IOCRMVOL = 0x40046f01
+ UBI_IOCRNVOL = 0x51106f03
+ UBI_IOCRSVOL = 0x400c6f02
+ UBI_IOCSETVOLPROP = 0x40104f06
+ UBI_IOCVOLCRBLK = 0x40804f07
+ UBI_IOCVOLRMBLK = 0x4f08
+ UBI_IOCVOLUP = 0x40084f00
UDF_SUPER_MAGIC = 0x15013346
UMOUNT_NOFOLLOW = 0x8
USBDEVICE_SUPER_MAGIC = 0x9fa2
@@ -2233,7 +2363,28 @@ const (
XATTR_CREATE = 0x1
XATTR_REPLACE = 0x2
XCASE = 0x4
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
XTABS = 0x1800
ZSMALLOC_MAGIC = 0x58295829
)
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
index 410ab56b0..66cdbfd58 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
@@ -64,6 +64,7 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ AF_XDP = 0x2c
ALG_OP_DECRYPT = 0x0
ALG_OP_ENCRYPT = 0x1
ALG_SET_AEAD_ASSOCLEN = 0x4
@@ -498,6 +499,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
@@ -635,7 +638,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0xa
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +765,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -874,6 +878,26 @@ const (
IXOFF = 0x1000
IXON = 0x400
JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
KEYCTL_ASSUME_AUTHORITY = 0x10
KEYCTL_CHOWN = 0x4
KEYCTL_CLEAR = 0x7
@@ -888,6 +912,11 @@ const (
KEYCTL_JOIN_SESSION_KEYRING = 0x1
KEYCTL_LINK = 0x8
KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
KEYCTL_READ = 0xb
KEYCTL_REJECT = 0x13
KEYCTL_RESTRICT_KEYRING = 0x1d
@@ -897,6 +926,10 @@ const (
KEYCTL_SETPERM = 0x5
KEYCTL_SET_REQKEY_KEYRING = 0xe
KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
KEYCTL_UNLINK = 0x9
KEYCTL_UPDATE = 0x2
KEY_REQKEY_DEFL_DEFAULT = 0x0
@@ -954,6 +987,7 @@ const (
MAP_EXECUTABLE = 0x4000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x1000
MAP_HUGETLB = 0x80000
MAP_HUGE_MASK = 0x3f
@@ -965,11 +999,29 @@ const (
MAP_PRIVATE = 0x2
MAP_RENAME = 0x800
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x40000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
MCL_ONFAULT = 0x4
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
MINIX2_SUPER_MAGIC = 0x2468
MINIX2_SUPER_MAGIC2 = 0x2478
MINIX3_SUPER_MAGIC = 0x4d5a
@@ -978,6 +1030,8 @@ const (
MNT_DETACH = 0x2
MNT_EXPIRE = 0x4
MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
MSDOS_SUPER_MAGIC = 0x4d44
MSG_BATCH = 0x40000
MSG_CMSG_CLOEXEC = 0x40000000
@@ -1054,6 +1108,7 @@ const (
NETLINK_FIB_LOOKUP = 0xa
NETLINK_FIREWALL = 0x3
NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
NETLINK_INET_DIAG = 0x4
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
@@ -1075,6 +1130,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1195,6 +1252,7 @@ const (
PACKET_FASTROUTE = 0x6
PACKET_HDRLEN = 0xb
PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
PACKET_KERNEL = 0x7
PACKET_LOOPBACK = 0x5
PACKET_LOSS = 0xe
@@ -1244,6 +1302,36 @@ const (
PERF_EVENT_IOC_SET_FILTER = 0x80042406
PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x8004743d
+ PPPIOCATTCHAN = 0x80047438
+ PPPIOCCONNECT = 0x8004743a
+ PPPIOCDETACH = 0x8004743c
+ PPPIOCDISCONN = 0x20007439
+ PPPIOCGASYNCMAP = 0x40047458
+ PPPIOCGCHAN = 0x40047437
+ PPPIOCGDEBUG = 0x40047441
+ PPPIOCGFLAGS = 0x4004745a
+ PPPIOCGIDLE = 0x4008743f
+ PPPIOCGL2TPSTATS = 0x40487436
+ PPPIOCGMRU = 0x40047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x40047455
+ PPPIOCGUNIT = 0x40047456
+ PPPIOCGXASYNCMAP = 0x40207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x80087446
+ PPPIOCSASYNCMAP = 0x80047457
+ PPPIOCSCOMPRESS = 0x800c744d
+ PPPIOCSDEBUG = 0x80047440
+ PPPIOCSFLAGS = 0x80047459
+ PPPIOCSMAXCID = 0x80047451
+ PPPIOCSMRRU = 0x8004743b
+ PPPIOCSMRU = 0x80047452
+ PPPIOCSNPMODE = 0x8008744b
+ PPPIOCSPASS = 0x80087447
+ PPPIOCSRASYNCMAP = 0x80047454
+ PPPIOCSXASYNCMAP = 0x8020744f
+ PPPIOCXFERUNIT = 0x2000744e
PRIO_PGRP = 0x1
PRIO_PROCESS = 0x0
PRIO_USER = 0x2
@@ -1345,6 +1433,7 @@ const (
PR_SPEC_DISABLE = 0x4
PR_SPEC_ENABLE = 0x2
PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
PR_SPEC_NOT_AFFECTED = 0x0
PR_SPEC_PRCTL = 0x1
PR_SPEC_STORE_BYPASS = 0x0
@@ -1428,6 +1517,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x6
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1470,7 +1562,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1538,6 +1630,7 @@ const (
RTM_DELACTION = 0x31
RTM_DELADDR = 0x15
RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
RTM_DELLINK = 0x11
RTM_DELMDB = 0x55
RTM_DELNEIGH = 0x1d
@@ -1558,6 +1651,7 @@ const (
RTM_GETADDR = 0x16
RTM_GETADDRLABEL = 0x4a
RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
RTM_GETDCB = 0x4e
RTM_GETLINK = 0x12
RTM_GETMDB = 0x56
@@ -1572,11 +1666,12 @@ const (
RTM_GETSTATS = 0x5e
RTM_GETTCLASS = 0x2a
RTM_GETTFILTER = 0x2e
- RTM_MAX = 0x63
+ RTM_MAX = 0x67
RTM_NEWACTION = 0x30
RTM_NEWADDR = 0x14
RTM_NEWADDRLABEL = 0x48
RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
RTM_NEWLINK = 0x10
RTM_NEWMDB = 0x54
RTM_NEWNDUSEROPT = 0x44
@@ -1591,8 +1686,8 @@ const (
RTM_NEWSTATS = 0x5c
RTM_NEWTCLASS = 0x28
RTM_NEWTFILTER = 0x2c
- RTM_NR_FAMILIES = 0x15
- RTM_NR_MSGTYPES = 0x54
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
RTM_SETDCB = 0x4f
RTM_SETLINK = 0x13
RTM_SETNEIGHTBL = 0x43
@@ -1606,17 +1701,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1636,7 +1736,9 @@ const (
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
+ SC_LOG_FLUSH = 0x100000
SECCOMP_MODE_DISABLED = 0x0
SECCOMP_MODE_FILTER = 0x2
SECCOMP_MODE_STRICT = 0x1
@@ -1692,6 +1794,9 @@ const (
SIOCGMIIPHY = 0x8947
SIOCGMIIREG = 0x8948
SIOCGPGRP = 0x40047309
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
SIOCGRARP = 0x8961
SIOCGSKNS = 0x894c
SIOCGSTAMP = 0x8906
@@ -1781,6 +1886,7 @@ const (
SOL_TIPC = 0x10f
SOL_TLS = 0x11a
SOL_X25 = 0x106
+ SOL_XDP = 0x11b
SOMAXCONN = 0x80
SO_ACCEPTCONN = 0x1009
SO_ATTACH_BPF = 0x32
@@ -1840,6 +1946,7 @@ const (
SO_TIMESTAMP = 0x1d
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
+ SO_TXTIME = 0x3d
SO_TYPE = 0x1008
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
@@ -1877,6 +1984,9 @@ const (
STATX_TYPE = 0x1
STATX_UID = 0x8
STATX__RESERVED = 0x80000000
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
SYSFS_MAGIC = 0x62656572
S_BLKSIZE = 0x200
S_IEXEC = 0x40
@@ -1915,7 +2025,7 @@ const (
TASKSTATS_GENL_NAME = "TASKSTATS"
TASKSTATS_GENL_VERSION = 0x1
TASKSTATS_TYPE_MAX = 0x6
- TASKSTATS_VERSION = 0x8
+ TASKSTATS_VERSION = 0x9
TCFLSH = 0x5407
TCGETA = 0x5401
TCGETS = 0x540d
@@ -1939,6 +2049,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
@@ -1994,6 +2106,7 @@ const (
TIOCGETP = 0x7408
TIOCGEXCL = 0x40045440
TIOCGICOUNT = 0x5492
+ TIOCGISO7816 = 0x40285442
TIOCGLCKTRMIOS = 0x548b
TIOCGLTC = 0x7474
TIOCGPGRP = 0x40047477
@@ -2050,6 +2163,7 @@ const (
TIOCSETN = 0x740a
TIOCSETP = 0x7409
TIOCSIG = 0x80045436
+ TIOCSISO7816 = 0xc0285443
TIOCSLCKTRMIOS = 0x548c
TIOCSLTC = 0x7475
TIOCSPGRP = 0x80047476
@@ -2108,6 +2222,21 @@ const (
TUNSETVNETBE = 0x800454de
TUNSETVNETHDRSZ = 0x800454d8
TUNSETVNETLE = 0x800454dc
+ UBI_IOCATT = 0x80186f40
+ UBI_IOCDET = 0x80046f41
+ UBI_IOCEBCH = 0x80044f02
+ UBI_IOCEBER = 0x80044f01
+ UBI_IOCEBISMAP = 0x40044f05
+ UBI_IOCEBMAP = 0x80084f03
+ UBI_IOCEBUNMAP = 0x80044f04
+ UBI_IOCMKVOL = 0x80986f00
+ UBI_IOCRMVOL = 0x80046f01
+ UBI_IOCRNVOL = 0x91106f03
+ UBI_IOCRSVOL = 0x800c6f02
+ UBI_IOCSETVOLPROP = 0x80104f06
+ UBI_IOCVOLCRBLK = 0x80804f07
+ UBI_IOCVOLRMBLK = 0x20004f08
+ UBI_IOCVOLUP = 0x80084f00
UDF_SUPER_MAGIC = 0x15013346
UMOUNT_NOFOLLOW = 0x8
USBDEVICE_SUPER_MAGIC = 0x9fa2
@@ -2245,7 +2374,28 @@ const (
XATTR_CREATE = 0x1
XATTR_REPLACE = 0x2
XCASE = 0x4
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
XTABS = 0x1800
ZSMALLOC_MAGIC = 0x58295829
)
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
index dac4d90fa..038cfeb7d 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
@@ -64,6 +64,7 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ AF_XDP = 0x2c
ALG_OP_DECRYPT = 0x0
ALG_OP_ENCRYPT = 0x1
ALG_SET_AEAD_ASSOCLEN = 0x4
@@ -498,6 +499,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
@@ -635,7 +638,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0xa
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +765,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -874,6 +878,26 @@ const (
IXOFF = 0x1000
IXON = 0x400
JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
KEYCTL_ASSUME_AUTHORITY = 0x10
KEYCTL_CHOWN = 0x4
KEYCTL_CLEAR = 0x7
@@ -888,6 +912,11 @@ const (
KEYCTL_JOIN_SESSION_KEYRING = 0x1
KEYCTL_LINK = 0x8
KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
KEYCTL_READ = 0xb
KEYCTL_REJECT = 0x13
KEYCTL_RESTRICT_KEYRING = 0x1d
@@ -897,6 +926,10 @@ const (
KEYCTL_SETPERM = 0x5
KEYCTL_SET_REQKEY_KEYRING = 0xe
KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
KEYCTL_UNLINK = 0x9
KEYCTL_UPDATE = 0x2
KEY_REQKEY_DEFL_DEFAULT = 0x0
@@ -954,6 +987,7 @@ const (
MAP_EXECUTABLE = 0x4000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x1000
MAP_HUGETLB = 0x80000
MAP_HUGE_MASK = 0x3f
@@ -965,11 +999,29 @@ const (
MAP_PRIVATE = 0x2
MAP_RENAME = 0x800
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x40000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
MCL_ONFAULT = 0x4
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
MINIX2_SUPER_MAGIC = 0x2468
MINIX2_SUPER_MAGIC2 = 0x2478
MINIX3_SUPER_MAGIC = 0x4d5a
@@ -978,6 +1030,8 @@ const (
MNT_DETACH = 0x2
MNT_EXPIRE = 0x4
MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
MSDOS_SUPER_MAGIC = 0x4d44
MSG_BATCH = 0x40000
MSG_CMSG_CLOEXEC = 0x40000000
@@ -1054,6 +1108,7 @@ const (
NETLINK_FIB_LOOKUP = 0xa
NETLINK_FIREWALL = 0x3
NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
NETLINK_INET_DIAG = 0x4
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
@@ -1075,6 +1130,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1195,6 +1252,7 @@ const (
PACKET_FASTROUTE = 0x6
PACKET_HDRLEN = 0xb
PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
PACKET_KERNEL = 0x7
PACKET_LOOPBACK = 0x5
PACKET_LOSS = 0xe
@@ -1244,6 +1302,36 @@ const (
PERF_EVENT_IOC_SET_FILTER = 0x80082406
PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x8004743d
+ PPPIOCATTCHAN = 0x80047438
+ PPPIOCCONNECT = 0x8004743a
+ PPPIOCDETACH = 0x8004743c
+ PPPIOCDISCONN = 0x20007439
+ PPPIOCGASYNCMAP = 0x40047458
+ PPPIOCGCHAN = 0x40047437
+ PPPIOCGDEBUG = 0x40047441
+ PPPIOCGFLAGS = 0x4004745a
+ PPPIOCGIDLE = 0x4010743f
+ PPPIOCGL2TPSTATS = 0x40487436
+ PPPIOCGMRU = 0x40047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x40047455
+ PPPIOCGUNIT = 0x40047456
+ PPPIOCGXASYNCMAP = 0x40207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x80107446
+ PPPIOCSASYNCMAP = 0x80047457
+ PPPIOCSCOMPRESS = 0x8010744d
+ PPPIOCSDEBUG = 0x80047440
+ PPPIOCSFLAGS = 0x80047459
+ PPPIOCSMAXCID = 0x80047451
+ PPPIOCSMRRU = 0x8004743b
+ PPPIOCSMRU = 0x80047452
+ PPPIOCSNPMODE = 0x8008744b
+ PPPIOCSPASS = 0x80107447
+ PPPIOCSRASYNCMAP = 0x80047454
+ PPPIOCSXASYNCMAP = 0x8020744f
+ PPPIOCXFERUNIT = 0x2000744e
PRIO_PGRP = 0x1
PRIO_PROCESS = 0x0
PRIO_USER = 0x2
@@ -1345,6 +1433,7 @@ const (
PR_SPEC_DISABLE = 0x4
PR_SPEC_ENABLE = 0x2
PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
PR_SPEC_NOT_AFFECTED = 0x0
PR_SPEC_PRCTL = 0x1
PR_SPEC_STORE_BYPASS = 0x0
@@ -1428,6 +1517,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x6
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1470,7 +1562,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1538,6 +1630,7 @@ const (
RTM_DELACTION = 0x31
RTM_DELADDR = 0x15
RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
RTM_DELLINK = 0x11
RTM_DELMDB = 0x55
RTM_DELNEIGH = 0x1d
@@ -1558,6 +1651,7 @@ const (
RTM_GETADDR = 0x16
RTM_GETADDRLABEL = 0x4a
RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
RTM_GETDCB = 0x4e
RTM_GETLINK = 0x12
RTM_GETMDB = 0x56
@@ -1572,11 +1666,12 @@ const (
RTM_GETSTATS = 0x5e
RTM_GETTCLASS = 0x2a
RTM_GETTFILTER = 0x2e
- RTM_MAX = 0x63
+ RTM_MAX = 0x67
RTM_NEWACTION = 0x30
RTM_NEWADDR = 0x14
RTM_NEWADDRLABEL = 0x48
RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
RTM_NEWLINK = 0x10
RTM_NEWMDB = 0x54
RTM_NEWNDUSEROPT = 0x44
@@ -1591,8 +1686,8 @@ const (
RTM_NEWSTATS = 0x5c
RTM_NEWTCLASS = 0x28
RTM_NEWTFILTER = 0x2c
- RTM_NR_FAMILIES = 0x15
- RTM_NR_MSGTYPES = 0x54
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
RTM_SETDCB = 0x4f
RTM_SETLINK = 0x13
RTM_SETNEIGHTBL = 0x43
@@ -1606,17 +1701,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1636,7 +1736,9 @@ const (
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
+ SC_LOG_FLUSH = 0x100000
SECCOMP_MODE_DISABLED = 0x0
SECCOMP_MODE_FILTER = 0x2
SECCOMP_MODE_STRICT = 0x1
@@ -1692,6 +1794,9 @@ const (
SIOCGMIIPHY = 0x8947
SIOCGMIIREG = 0x8948
SIOCGPGRP = 0x40047309
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
SIOCGRARP = 0x8961
SIOCGSKNS = 0x894c
SIOCGSTAMP = 0x8906
@@ -1781,6 +1886,7 @@ const (
SOL_TIPC = 0x10f
SOL_TLS = 0x11a
SOL_X25 = 0x106
+ SOL_XDP = 0x11b
SOMAXCONN = 0x80
SO_ACCEPTCONN = 0x1009
SO_ATTACH_BPF = 0x32
@@ -1840,6 +1946,7 @@ const (
SO_TIMESTAMP = 0x1d
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
+ SO_TXTIME = 0x3d
SO_TYPE = 0x1008
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
@@ -1877,6 +1984,9 @@ const (
STATX_TYPE = 0x1
STATX_UID = 0x8
STATX__RESERVED = 0x80000000
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
SYSFS_MAGIC = 0x62656572
S_BLKSIZE = 0x200
S_IEXEC = 0x40
@@ -1915,7 +2025,7 @@ const (
TASKSTATS_GENL_NAME = "TASKSTATS"
TASKSTATS_GENL_VERSION = 0x1
TASKSTATS_TYPE_MAX = 0x6
- TASKSTATS_VERSION = 0x8
+ TASKSTATS_VERSION = 0x9
TCFLSH = 0x5407
TCGETA = 0x5401
TCGETS = 0x540d
@@ -1939,6 +2049,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
@@ -1994,6 +2106,7 @@ const (
TIOCGETP = 0x7408
TIOCGEXCL = 0x40045440
TIOCGICOUNT = 0x5492
+ TIOCGISO7816 = 0x40285442
TIOCGLCKTRMIOS = 0x548b
TIOCGLTC = 0x7474
TIOCGPGRP = 0x40047477
@@ -2050,6 +2163,7 @@ const (
TIOCSETN = 0x740a
TIOCSETP = 0x7409
TIOCSIG = 0x80045436
+ TIOCSISO7816 = 0xc0285443
TIOCSLCKTRMIOS = 0x548c
TIOCSLTC = 0x7475
TIOCSPGRP = 0x80047476
@@ -2108,6 +2222,21 @@ const (
TUNSETVNETBE = 0x800454de
TUNSETVNETHDRSZ = 0x800454d8
TUNSETVNETLE = 0x800454dc
+ UBI_IOCATT = 0x80186f40
+ UBI_IOCDET = 0x80046f41
+ UBI_IOCEBCH = 0x80044f02
+ UBI_IOCEBER = 0x80044f01
+ UBI_IOCEBISMAP = 0x40044f05
+ UBI_IOCEBMAP = 0x80084f03
+ UBI_IOCEBUNMAP = 0x80044f04
+ UBI_IOCMKVOL = 0x80986f00
+ UBI_IOCRMVOL = 0x80046f01
+ UBI_IOCRNVOL = 0x91106f03
+ UBI_IOCRSVOL = 0x800c6f02
+ UBI_IOCSETVOLPROP = 0x80104f06
+ UBI_IOCVOLCRBLK = 0x80804f07
+ UBI_IOCVOLRMBLK = 0x20004f08
+ UBI_IOCVOLUP = 0x80084f00
UDF_SUPER_MAGIC = 0x15013346
UMOUNT_NOFOLLOW = 0x8
USBDEVICE_SUPER_MAGIC = 0x9fa2
@@ -2245,7 +2374,28 @@ const (
XATTR_CREATE = 0x1
XATTR_REPLACE = 0x2
XCASE = 0x4
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
XTABS = 0x1800
ZSMALLOC_MAGIC = 0x58295829
)
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
index 1d2f0e638..2b9af2f5e 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
@@ -64,6 +64,7 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ AF_XDP = 0x2c
ALG_OP_DECRYPT = 0x0
ALG_OP_ENCRYPT = 0x1
ALG_SET_AEAD_ASSOCLEN = 0x4
@@ -498,6 +499,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
@@ -635,7 +638,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0xa
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +765,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -874,6 +878,26 @@ const (
IXOFF = 0x1000
IXON = 0x400
JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
KEYCTL_ASSUME_AUTHORITY = 0x10
KEYCTL_CHOWN = 0x4
KEYCTL_CLEAR = 0x7
@@ -888,6 +912,11 @@ const (
KEYCTL_JOIN_SESSION_KEYRING = 0x1
KEYCTL_LINK = 0x8
KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
KEYCTL_READ = 0xb
KEYCTL_REJECT = 0x13
KEYCTL_RESTRICT_KEYRING = 0x1d
@@ -897,6 +926,10 @@ const (
KEYCTL_SETPERM = 0x5
KEYCTL_SET_REQKEY_KEYRING = 0xe
KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
KEYCTL_UNLINK = 0x9
KEYCTL_UPDATE = 0x2
KEY_REQKEY_DEFL_DEFAULT = 0x0
@@ -954,6 +987,7 @@ const (
MAP_EXECUTABLE = 0x4000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x1000
MAP_HUGETLB = 0x80000
MAP_HUGE_MASK = 0x3f
@@ -965,11 +999,29 @@ const (
MAP_PRIVATE = 0x2
MAP_RENAME = 0x800
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x40000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
MCL_ONFAULT = 0x4
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
MINIX2_SUPER_MAGIC = 0x2468
MINIX2_SUPER_MAGIC2 = 0x2478
MINIX3_SUPER_MAGIC = 0x4d5a
@@ -978,6 +1030,8 @@ const (
MNT_DETACH = 0x2
MNT_EXPIRE = 0x4
MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
MSDOS_SUPER_MAGIC = 0x4d44
MSG_BATCH = 0x40000
MSG_CMSG_CLOEXEC = 0x40000000
@@ -1054,6 +1108,7 @@ const (
NETLINK_FIB_LOOKUP = 0xa
NETLINK_FIREWALL = 0x3
NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
NETLINK_INET_DIAG = 0x4
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
@@ -1075,6 +1130,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1195,6 +1252,7 @@ const (
PACKET_FASTROUTE = 0x6
PACKET_HDRLEN = 0xb
PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
PACKET_KERNEL = 0x7
PACKET_LOOPBACK = 0x5
PACKET_LOSS = 0xe
@@ -1244,6 +1302,36 @@ const (
PERF_EVENT_IOC_SET_FILTER = 0x80082406
PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x8004743d
+ PPPIOCATTCHAN = 0x80047438
+ PPPIOCCONNECT = 0x8004743a
+ PPPIOCDETACH = 0x8004743c
+ PPPIOCDISCONN = 0x20007439
+ PPPIOCGASYNCMAP = 0x40047458
+ PPPIOCGCHAN = 0x40047437
+ PPPIOCGDEBUG = 0x40047441
+ PPPIOCGFLAGS = 0x4004745a
+ PPPIOCGIDLE = 0x4010743f
+ PPPIOCGL2TPSTATS = 0x40487436
+ PPPIOCGMRU = 0x40047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x40047455
+ PPPIOCGUNIT = 0x40047456
+ PPPIOCGXASYNCMAP = 0x40207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x80107446
+ PPPIOCSASYNCMAP = 0x80047457
+ PPPIOCSCOMPRESS = 0x8010744d
+ PPPIOCSDEBUG = 0x80047440
+ PPPIOCSFLAGS = 0x80047459
+ PPPIOCSMAXCID = 0x80047451
+ PPPIOCSMRRU = 0x8004743b
+ PPPIOCSMRU = 0x80047452
+ PPPIOCSNPMODE = 0x8008744b
+ PPPIOCSPASS = 0x80107447
+ PPPIOCSRASYNCMAP = 0x80047454
+ PPPIOCSXASYNCMAP = 0x8020744f
+ PPPIOCXFERUNIT = 0x2000744e
PRIO_PGRP = 0x1
PRIO_PROCESS = 0x0
PRIO_USER = 0x2
@@ -1345,6 +1433,7 @@ const (
PR_SPEC_DISABLE = 0x4
PR_SPEC_ENABLE = 0x2
PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
PR_SPEC_NOT_AFFECTED = 0x0
PR_SPEC_PRCTL = 0x1
PR_SPEC_STORE_BYPASS = 0x0
@@ -1428,6 +1517,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x6
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1470,7 +1562,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1538,6 +1630,7 @@ const (
RTM_DELACTION = 0x31
RTM_DELADDR = 0x15
RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
RTM_DELLINK = 0x11
RTM_DELMDB = 0x55
RTM_DELNEIGH = 0x1d
@@ -1558,6 +1651,7 @@ const (
RTM_GETADDR = 0x16
RTM_GETADDRLABEL = 0x4a
RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
RTM_GETDCB = 0x4e
RTM_GETLINK = 0x12
RTM_GETMDB = 0x56
@@ -1572,11 +1666,12 @@ const (
RTM_GETSTATS = 0x5e
RTM_GETTCLASS = 0x2a
RTM_GETTFILTER = 0x2e
- RTM_MAX = 0x63
+ RTM_MAX = 0x67
RTM_NEWACTION = 0x30
RTM_NEWADDR = 0x14
RTM_NEWADDRLABEL = 0x48
RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
RTM_NEWLINK = 0x10
RTM_NEWMDB = 0x54
RTM_NEWNDUSEROPT = 0x44
@@ -1591,8 +1686,8 @@ const (
RTM_NEWSTATS = 0x5c
RTM_NEWTCLASS = 0x28
RTM_NEWTFILTER = 0x2c
- RTM_NR_FAMILIES = 0x15
- RTM_NR_MSGTYPES = 0x54
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
RTM_SETDCB = 0x4f
RTM_SETLINK = 0x13
RTM_SETNEIGHTBL = 0x43
@@ -1606,17 +1701,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1636,7 +1736,9 @@ const (
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
+ SC_LOG_FLUSH = 0x100000
SECCOMP_MODE_DISABLED = 0x0
SECCOMP_MODE_FILTER = 0x2
SECCOMP_MODE_STRICT = 0x1
@@ -1692,6 +1794,9 @@ const (
SIOCGMIIPHY = 0x8947
SIOCGMIIREG = 0x8948
SIOCGPGRP = 0x40047309
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
SIOCGRARP = 0x8961
SIOCGSKNS = 0x894c
SIOCGSTAMP = 0x8906
@@ -1781,6 +1886,7 @@ const (
SOL_TIPC = 0x10f
SOL_TLS = 0x11a
SOL_X25 = 0x106
+ SOL_XDP = 0x11b
SOMAXCONN = 0x80
SO_ACCEPTCONN = 0x1009
SO_ATTACH_BPF = 0x32
@@ -1840,6 +1946,7 @@ const (
SO_TIMESTAMP = 0x1d
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
+ SO_TXTIME = 0x3d
SO_TYPE = 0x1008
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
@@ -1877,6 +1984,9 @@ const (
STATX_TYPE = 0x1
STATX_UID = 0x8
STATX__RESERVED = 0x80000000
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
SYSFS_MAGIC = 0x62656572
S_BLKSIZE = 0x200
S_IEXEC = 0x40
@@ -1915,7 +2025,7 @@ const (
TASKSTATS_GENL_NAME = "TASKSTATS"
TASKSTATS_GENL_VERSION = 0x1
TASKSTATS_TYPE_MAX = 0x6
- TASKSTATS_VERSION = 0x8
+ TASKSTATS_VERSION = 0x9
TCFLSH = 0x5407
TCGETA = 0x5401
TCGETS = 0x540d
@@ -1939,6 +2049,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
@@ -1994,6 +2106,7 @@ const (
TIOCGETP = 0x7408
TIOCGEXCL = 0x40045440
TIOCGICOUNT = 0x5492
+ TIOCGISO7816 = 0x40285442
TIOCGLCKTRMIOS = 0x548b
TIOCGLTC = 0x7474
TIOCGPGRP = 0x40047477
@@ -2050,6 +2163,7 @@ const (
TIOCSETN = 0x740a
TIOCSETP = 0x7409
TIOCSIG = 0x80045436
+ TIOCSISO7816 = 0xc0285443
TIOCSLCKTRMIOS = 0x548c
TIOCSLTC = 0x7475
TIOCSPGRP = 0x80047476
@@ -2108,6 +2222,21 @@ const (
TUNSETVNETBE = 0x800454de
TUNSETVNETHDRSZ = 0x800454d8
TUNSETVNETLE = 0x800454dc
+ UBI_IOCATT = 0x80186f40
+ UBI_IOCDET = 0x80046f41
+ UBI_IOCEBCH = 0x80044f02
+ UBI_IOCEBER = 0x80044f01
+ UBI_IOCEBISMAP = 0x40044f05
+ UBI_IOCEBMAP = 0x80084f03
+ UBI_IOCEBUNMAP = 0x80044f04
+ UBI_IOCMKVOL = 0x80986f00
+ UBI_IOCRMVOL = 0x80046f01
+ UBI_IOCRNVOL = 0x91106f03
+ UBI_IOCRSVOL = 0x800c6f02
+ UBI_IOCSETVOLPROP = 0x80104f06
+ UBI_IOCVOLCRBLK = 0x80804f07
+ UBI_IOCVOLRMBLK = 0x20004f08
+ UBI_IOCVOLUP = 0x80084f00
UDF_SUPER_MAGIC = 0x15013346
UMOUNT_NOFOLLOW = 0x8
USBDEVICE_SUPER_MAGIC = 0x9fa2
@@ -2245,7 +2374,28 @@ const (
XATTR_CREATE = 0x1
XATTR_REPLACE = 0x2
XCASE = 0x4
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
XTABS = 0x1800
ZSMALLOC_MAGIC = 0x58295829
)
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
index 33b994023..d117b6367 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
@@ -64,6 +64,7 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ AF_XDP = 0x2c
ALG_OP_DECRYPT = 0x0
ALG_OP_ENCRYPT = 0x1
ALG_SET_AEAD_ASSOCLEN = 0x4
@@ -498,6 +499,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
@@ -635,7 +638,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0xa
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +765,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -874,6 +878,26 @@ const (
IXOFF = 0x1000
IXON = 0x400
JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
KEYCTL_ASSUME_AUTHORITY = 0x10
KEYCTL_CHOWN = 0x4
KEYCTL_CLEAR = 0x7
@@ -888,6 +912,11 @@ const (
KEYCTL_JOIN_SESSION_KEYRING = 0x1
KEYCTL_LINK = 0x8
KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
KEYCTL_READ = 0xb
KEYCTL_REJECT = 0x13
KEYCTL_RESTRICT_KEYRING = 0x1d
@@ -897,6 +926,10 @@ const (
KEYCTL_SETPERM = 0x5
KEYCTL_SET_REQKEY_KEYRING = 0xe
KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
KEYCTL_UNLINK = 0x9
KEYCTL_UPDATE = 0x2
KEY_REQKEY_DEFL_DEFAULT = 0x0
@@ -954,6 +987,7 @@ const (
MAP_EXECUTABLE = 0x4000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x1000
MAP_HUGETLB = 0x80000
MAP_HUGE_MASK = 0x3f
@@ -965,11 +999,29 @@ const (
MAP_PRIVATE = 0x2
MAP_RENAME = 0x800
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x40000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
MCL_ONFAULT = 0x4
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
MINIX2_SUPER_MAGIC = 0x2468
MINIX2_SUPER_MAGIC2 = 0x2478
MINIX3_SUPER_MAGIC = 0x4d5a
@@ -978,6 +1030,8 @@ const (
MNT_DETACH = 0x2
MNT_EXPIRE = 0x4
MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
MSDOS_SUPER_MAGIC = 0x4d44
MSG_BATCH = 0x40000
MSG_CMSG_CLOEXEC = 0x40000000
@@ -1054,6 +1108,7 @@ const (
NETLINK_FIB_LOOKUP = 0xa
NETLINK_FIREWALL = 0x3
NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
NETLINK_INET_DIAG = 0x4
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
@@ -1075,6 +1130,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1195,6 +1252,7 @@ const (
PACKET_FASTROUTE = 0x6
PACKET_HDRLEN = 0xb
PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
PACKET_KERNEL = 0x7
PACKET_LOOPBACK = 0x5
PACKET_LOSS = 0xe
@@ -1244,6 +1302,36 @@ const (
PERF_EVENT_IOC_SET_FILTER = 0x80042406
PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x8004743d
+ PPPIOCATTCHAN = 0x80047438
+ PPPIOCCONNECT = 0x8004743a
+ PPPIOCDETACH = 0x8004743c
+ PPPIOCDISCONN = 0x20007439
+ PPPIOCGASYNCMAP = 0x40047458
+ PPPIOCGCHAN = 0x40047437
+ PPPIOCGDEBUG = 0x40047441
+ PPPIOCGFLAGS = 0x4004745a
+ PPPIOCGIDLE = 0x4008743f
+ PPPIOCGL2TPSTATS = 0x40487436
+ PPPIOCGMRU = 0x40047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x40047455
+ PPPIOCGUNIT = 0x40047456
+ PPPIOCGXASYNCMAP = 0x40207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x80087446
+ PPPIOCSASYNCMAP = 0x80047457
+ PPPIOCSCOMPRESS = 0x800c744d
+ PPPIOCSDEBUG = 0x80047440
+ PPPIOCSFLAGS = 0x80047459
+ PPPIOCSMAXCID = 0x80047451
+ PPPIOCSMRRU = 0x8004743b
+ PPPIOCSMRU = 0x80047452
+ PPPIOCSNPMODE = 0x8008744b
+ PPPIOCSPASS = 0x80087447
+ PPPIOCSRASYNCMAP = 0x80047454
+ PPPIOCSXASYNCMAP = 0x8020744f
+ PPPIOCXFERUNIT = 0x2000744e
PRIO_PGRP = 0x1
PRIO_PROCESS = 0x0
PRIO_USER = 0x2
@@ -1345,6 +1433,7 @@ const (
PR_SPEC_DISABLE = 0x4
PR_SPEC_ENABLE = 0x2
PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
PR_SPEC_NOT_AFFECTED = 0x0
PR_SPEC_PRCTL = 0x1
PR_SPEC_STORE_BYPASS = 0x0
@@ -1428,6 +1517,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x6
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1470,7 +1562,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1538,6 +1630,7 @@ const (
RTM_DELACTION = 0x31
RTM_DELADDR = 0x15
RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
RTM_DELLINK = 0x11
RTM_DELMDB = 0x55
RTM_DELNEIGH = 0x1d
@@ -1558,6 +1651,7 @@ const (
RTM_GETADDR = 0x16
RTM_GETADDRLABEL = 0x4a
RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
RTM_GETDCB = 0x4e
RTM_GETLINK = 0x12
RTM_GETMDB = 0x56
@@ -1572,11 +1666,12 @@ const (
RTM_GETSTATS = 0x5e
RTM_GETTCLASS = 0x2a
RTM_GETTFILTER = 0x2e
- RTM_MAX = 0x63
+ RTM_MAX = 0x67
RTM_NEWACTION = 0x30
RTM_NEWADDR = 0x14
RTM_NEWADDRLABEL = 0x48
RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
RTM_NEWLINK = 0x10
RTM_NEWMDB = 0x54
RTM_NEWNDUSEROPT = 0x44
@@ -1591,8 +1686,8 @@ const (
RTM_NEWSTATS = 0x5c
RTM_NEWTCLASS = 0x28
RTM_NEWTFILTER = 0x2c
- RTM_NR_FAMILIES = 0x15
- RTM_NR_MSGTYPES = 0x54
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
RTM_SETDCB = 0x4f
RTM_SETLINK = 0x13
RTM_SETNEIGHTBL = 0x43
@@ -1606,17 +1701,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1636,7 +1736,9 @@ const (
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
+ SC_LOG_FLUSH = 0x100000
SECCOMP_MODE_DISABLED = 0x0
SECCOMP_MODE_FILTER = 0x2
SECCOMP_MODE_STRICT = 0x1
@@ -1692,6 +1794,9 @@ const (
SIOCGMIIPHY = 0x8947
SIOCGMIIREG = 0x8948
SIOCGPGRP = 0x40047309
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
SIOCGRARP = 0x8961
SIOCGSKNS = 0x894c
SIOCGSTAMP = 0x8906
@@ -1781,6 +1886,7 @@ const (
SOL_TIPC = 0x10f
SOL_TLS = 0x11a
SOL_X25 = 0x106
+ SOL_XDP = 0x11b
SOMAXCONN = 0x80
SO_ACCEPTCONN = 0x1009
SO_ATTACH_BPF = 0x32
@@ -1840,6 +1946,7 @@ const (
SO_TIMESTAMP = 0x1d
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
+ SO_TXTIME = 0x3d
SO_TYPE = 0x1008
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
@@ -1877,6 +1984,9 @@ const (
STATX_TYPE = 0x1
STATX_UID = 0x8
STATX__RESERVED = 0x80000000
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
SYSFS_MAGIC = 0x62656572
S_BLKSIZE = 0x200
S_IEXEC = 0x40
@@ -1915,7 +2025,7 @@ const (
TASKSTATS_GENL_NAME = "TASKSTATS"
TASKSTATS_GENL_VERSION = 0x1
TASKSTATS_TYPE_MAX = 0x6
- TASKSTATS_VERSION = 0x8
+ TASKSTATS_VERSION = 0x9
TCFLSH = 0x5407
TCGETA = 0x5401
TCGETS = 0x540d
@@ -1939,6 +2049,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
@@ -1994,6 +2106,7 @@ const (
TIOCGETP = 0x7408
TIOCGEXCL = 0x40045440
TIOCGICOUNT = 0x5492
+ TIOCGISO7816 = 0x40285442
TIOCGLCKTRMIOS = 0x548b
TIOCGLTC = 0x7474
TIOCGPGRP = 0x40047477
@@ -2050,6 +2163,7 @@ const (
TIOCSETN = 0x740a
TIOCSETP = 0x7409
TIOCSIG = 0x80045436
+ TIOCSISO7816 = 0xc0285443
TIOCSLCKTRMIOS = 0x548c
TIOCSLTC = 0x7475
TIOCSPGRP = 0x80047476
@@ -2108,6 +2222,21 @@ const (
TUNSETVNETBE = 0x800454de
TUNSETVNETHDRSZ = 0x800454d8
TUNSETVNETLE = 0x800454dc
+ UBI_IOCATT = 0x80186f40
+ UBI_IOCDET = 0x80046f41
+ UBI_IOCEBCH = 0x80044f02
+ UBI_IOCEBER = 0x80044f01
+ UBI_IOCEBISMAP = 0x40044f05
+ UBI_IOCEBMAP = 0x80084f03
+ UBI_IOCEBUNMAP = 0x80044f04
+ UBI_IOCMKVOL = 0x80986f00
+ UBI_IOCRMVOL = 0x80046f01
+ UBI_IOCRNVOL = 0x91106f03
+ UBI_IOCRSVOL = 0x800c6f02
+ UBI_IOCSETVOLPROP = 0x80104f06
+ UBI_IOCVOLCRBLK = 0x80804f07
+ UBI_IOCVOLRMBLK = 0x20004f08
+ UBI_IOCVOLUP = 0x80084f00
UDF_SUPER_MAGIC = 0x15013346
UMOUNT_NOFOLLOW = 0x8
USBDEVICE_SUPER_MAGIC = 0x9fa2
@@ -2245,7 +2374,28 @@ const (
XATTR_CREATE = 0x1
XATTR_REPLACE = 0x2
XCASE = 0x4
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
XTABS = 0x1800
ZSMALLOC_MAGIC = 0x58295829
)
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
index c78d66976..ed12556bf 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
@@ -64,6 +64,7 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ AF_XDP = 0x2c
ALG_OP_DECRYPT = 0x0
ALG_OP_ENCRYPT = 0x1
ALG_SET_AEAD_ASSOCLEN = 0x4
@@ -498,6 +499,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
@@ -635,7 +638,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0xa
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +765,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -874,6 +878,26 @@ const (
IXOFF = 0x400
IXON = 0x200
JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
KEYCTL_ASSUME_AUTHORITY = 0x10
KEYCTL_CHOWN = 0x4
KEYCTL_CLEAR = 0x7
@@ -888,6 +912,11 @@ const (
KEYCTL_JOIN_SESSION_KEYRING = 0x1
KEYCTL_LINK = 0x8
KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
KEYCTL_READ = 0xb
KEYCTL_REJECT = 0x13
KEYCTL_RESTRICT_KEYRING = 0x1d
@@ -897,6 +926,10 @@ const (
KEYCTL_SETPERM = 0x5
KEYCTL_SET_REQKEY_KEYRING = 0xe
KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
KEYCTL_UNLINK = 0x9
KEYCTL_UPDATE = 0x2
KEY_REQKEY_DEFL_DEFAULT = 0x0
@@ -954,6 +987,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -964,11 +998,29 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
MAP_TYPE = 0xf
MCL_CURRENT = 0x2000
MCL_FUTURE = 0x4000
MCL_ONFAULT = 0x8000
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
MINIX2_SUPER_MAGIC = 0x2468
MINIX2_SUPER_MAGIC2 = 0x2478
MINIX3_SUPER_MAGIC = 0x4d5a
@@ -977,6 +1029,8 @@ const (
MNT_DETACH = 0x2
MNT_EXPIRE = 0x4
MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
MSDOS_SUPER_MAGIC = 0x4d44
MSG_BATCH = 0x40000
MSG_CMSG_CLOEXEC = 0x40000000
@@ -1053,6 +1107,7 @@ const (
NETLINK_FIB_LOOKUP = 0xa
NETLINK_FIREWALL = 0x3
NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
NETLINK_INET_DIAG = 0x4
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
@@ -1074,6 +1129,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1196,6 +1253,7 @@ const (
PACKET_FASTROUTE = 0x6
PACKET_HDRLEN = 0xb
PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
PACKET_KERNEL = 0x7
PACKET_LOOPBACK = 0x5
PACKET_LOSS = 0xe
@@ -1245,6 +1303,36 @@ const (
PERF_EVENT_IOC_SET_FILTER = 0x80082406
PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x8004743d
+ PPPIOCATTCHAN = 0x80047438
+ PPPIOCCONNECT = 0x8004743a
+ PPPIOCDETACH = 0x8004743c
+ PPPIOCDISCONN = 0x20007439
+ PPPIOCGASYNCMAP = 0x40047458
+ PPPIOCGCHAN = 0x40047437
+ PPPIOCGDEBUG = 0x40047441
+ PPPIOCGFLAGS = 0x4004745a
+ PPPIOCGIDLE = 0x4010743f
+ PPPIOCGL2TPSTATS = 0x40487436
+ PPPIOCGMRU = 0x40047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x40047455
+ PPPIOCGUNIT = 0x40047456
+ PPPIOCGXASYNCMAP = 0x40207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x80107446
+ PPPIOCSASYNCMAP = 0x80047457
+ PPPIOCSCOMPRESS = 0x8010744d
+ PPPIOCSDEBUG = 0x80047440
+ PPPIOCSFLAGS = 0x80047459
+ PPPIOCSMAXCID = 0x80047451
+ PPPIOCSMRRU = 0x8004743b
+ PPPIOCSMRU = 0x80047452
+ PPPIOCSNPMODE = 0x8008744b
+ PPPIOCSPASS = 0x80107447
+ PPPIOCSRASYNCMAP = 0x80047454
+ PPPIOCSXASYNCMAP = 0x8020744f
+ PPPIOCXFERUNIT = 0x2000744e
PRIO_PGRP = 0x1
PRIO_PROCESS = 0x0
PRIO_USER = 0x2
@@ -1347,6 +1435,7 @@ const (
PR_SPEC_DISABLE = 0x4
PR_SPEC_ENABLE = 0x2
PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
PR_SPEC_NOT_AFFECTED = 0x0
PR_SPEC_PRCTL = 0x1
PR_SPEC_STORE_BYPASS = 0x0
@@ -1425,6 +1514,8 @@ const (
PTRACE_SINGLEBLOCK = 0x100
PTRACE_SINGLESTEP = 0x9
PTRACE_SYSCALL = 0x18
+ PTRACE_SYSEMU = 0x1d
+ PTRACE_SYSEMU_SINGLESTEP = 0x1e
PTRACE_TRACEME = 0x0
PT_CCR = 0x26
PT_CTR = 0x23
@@ -1484,6 +1575,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1526,7 +1620,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1594,6 +1688,7 @@ const (
RTM_DELACTION = 0x31
RTM_DELADDR = 0x15
RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
RTM_DELLINK = 0x11
RTM_DELMDB = 0x55
RTM_DELNEIGH = 0x1d
@@ -1614,6 +1709,7 @@ const (
RTM_GETADDR = 0x16
RTM_GETADDRLABEL = 0x4a
RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
RTM_GETDCB = 0x4e
RTM_GETLINK = 0x12
RTM_GETMDB = 0x56
@@ -1628,11 +1724,12 @@ const (
RTM_GETSTATS = 0x5e
RTM_GETTCLASS = 0x2a
RTM_GETTFILTER = 0x2e
- RTM_MAX = 0x63
+ RTM_MAX = 0x67
RTM_NEWACTION = 0x30
RTM_NEWADDR = 0x14
RTM_NEWADDRLABEL = 0x48
RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
RTM_NEWLINK = 0x10
RTM_NEWMDB = 0x54
RTM_NEWNDUSEROPT = 0x44
@@ -1647,8 +1744,8 @@ const (
RTM_NEWSTATS = 0x5c
RTM_NEWTCLASS = 0x28
RTM_NEWTFILTER = 0x2c
- RTM_NR_FAMILIES = 0x15
- RTM_NR_MSGTYPES = 0x54
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
RTM_SETDCB = 0x4f
RTM_SETLINK = 0x13
RTM_SETNEIGHTBL = 0x43
@@ -1662,17 +1759,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1692,7 +1794,9 @@ const (
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
+ SC_LOG_FLUSH = 0x100000
SECCOMP_MODE_DISABLED = 0x0
SECCOMP_MODE_FILTER = 0x2
SECCOMP_MODE_STRICT = 0x1
@@ -1748,6 +1852,9 @@ const (
SIOCGMIIPHY = 0x8947
SIOCGMIIREG = 0x8948
SIOCGPGRP = 0x8904
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
SIOCGRARP = 0x8961
SIOCGSKNS = 0x894c
SIOCGSTAMP = 0x8906
@@ -1837,6 +1944,7 @@ const (
SOL_TIPC = 0x10f
SOL_TLS = 0x11a
SOL_X25 = 0x106
+ SOL_XDP = 0x11b
SOMAXCONN = 0x80
SO_ACCEPTCONN = 0x1e
SO_ATTACH_BPF = 0x32
@@ -1895,6 +2003,7 @@ const (
SO_TIMESTAMP = 0x1d
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
+ SO_TXTIME = 0x3d
SO_TYPE = 0x3
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
@@ -1932,6 +2041,9 @@ const (
STATX_TYPE = 0x1
STATX_UID = 0x8
STATX__RESERVED = 0x80000000
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
SYSFS_MAGIC = 0x62656572
S_BLKSIZE = 0x200
S_IEXEC = 0x40
@@ -1970,7 +2082,7 @@ const (
TASKSTATS_GENL_NAME = "TASKSTATS"
TASKSTATS_GENL_VERSION = 0x1
TASKSTATS_TYPE_MAX = 0x6
- TASKSTATS_VERSION = 0x8
+ TASKSTATS_VERSION = 0x9
TCFLSH = 0x2000741f
TCGETA = 0x40147417
TCGETS = 0x402c7413
@@ -1993,6 +2105,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
@@ -2046,6 +2160,7 @@ const (
TIOCGETP = 0x40067408
TIOCGEXCL = 0x40045440
TIOCGICOUNT = 0x545d
+ TIOCGISO7816 = 0x40285442
TIOCGLCKTRMIOS = 0x5456
TIOCGLTC = 0x40067474
TIOCGPGRP = 0x40047477
@@ -2106,6 +2221,7 @@ const (
TIOCSETN = 0x8006740a
TIOCSETP = 0x80067409
TIOCSIG = 0x80045436
+ TIOCSISO7816 = 0xc0285443
TIOCSLCKTRMIOS = 0x5457
TIOCSLTC = 0x80067475
TIOCSPGRP = 0x80047476
@@ -2166,6 +2282,21 @@ const (
TUNSETVNETBE = 0x800454de
TUNSETVNETHDRSZ = 0x800454d8
TUNSETVNETLE = 0x800454dc
+ UBI_IOCATT = 0x80186f40
+ UBI_IOCDET = 0x80046f41
+ UBI_IOCEBCH = 0x80044f02
+ UBI_IOCEBER = 0x80044f01
+ UBI_IOCEBISMAP = 0x40044f05
+ UBI_IOCEBMAP = 0x80084f03
+ UBI_IOCEBUNMAP = 0x80044f04
+ UBI_IOCMKVOL = 0x80986f00
+ UBI_IOCRMVOL = 0x80046f01
+ UBI_IOCRNVOL = 0x91106f03
+ UBI_IOCRSVOL = 0x800c6f02
+ UBI_IOCSETVOLPROP = 0x80104f06
+ UBI_IOCVOLCRBLK = 0x80804f07
+ UBI_IOCVOLRMBLK = 0x20004f08
+ UBI_IOCVOLUP = 0x80084f00
UDF_SUPER_MAGIC = 0x15013346
UMOUNT_NOFOLLOW = 0x8
USBDEVICE_SUPER_MAGIC = 0x9fa2
@@ -2302,7 +2433,28 @@ const (
XATTR_CREATE = 0x1
XATTR_REPLACE = 0x2
XCASE = 0x4000
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
XTABS = 0xc00
ZSMALLOC_MAGIC = 0x58295829
)
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
index 63493756d..4aa4fa9c9 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
@@ -64,6 +64,7 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ AF_XDP = 0x2c
ALG_OP_DECRYPT = 0x0
ALG_OP_ENCRYPT = 0x1
ALG_SET_AEAD_ASSOCLEN = 0x4
@@ -498,6 +499,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
@@ -635,7 +638,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0xa
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +765,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -874,6 +878,26 @@ const (
IXOFF = 0x400
IXON = 0x200
JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
KEYCTL_ASSUME_AUTHORITY = 0x10
KEYCTL_CHOWN = 0x4
KEYCTL_CLEAR = 0x7
@@ -888,6 +912,11 @@ const (
KEYCTL_JOIN_SESSION_KEYRING = 0x1
KEYCTL_LINK = 0x8
KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
KEYCTL_READ = 0xb
KEYCTL_REJECT = 0x13
KEYCTL_RESTRICT_KEYRING = 0x1d
@@ -897,6 +926,10 @@ const (
KEYCTL_SETPERM = 0x5
KEYCTL_SET_REQKEY_KEYRING = 0xe
KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
KEYCTL_UNLINK = 0x9
KEYCTL_UPDATE = 0x2
KEY_REQKEY_DEFL_DEFAULT = 0x0
@@ -954,6 +987,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -964,11 +998,29 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
MAP_TYPE = 0xf
MCL_CURRENT = 0x2000
MCL_FUTURE = 0x4000
MCL_ONFAULT = 0x8000
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
MINIX2_SUPER_MAGIC = 0x2468
MINIX2_SUPER_MAGIC2 = 0x2478
MINIX3_SUPER_MAGIC = 0x4d5a
@@ -977,6 +1029,8 @@ const (
MNT_DETACH = 0x2
MNT_EXPIRE = 0x4
MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
MSDOS_SUPER_MAGIC = 0x4d44
MSG_BATCH = 0x40000
MSG_CMSG_CLOEXEC = 0x40000000
@@ -1053,6 +1107,7 @@ const (
NETLINK_FIB_LOOKUP = 0xa
NETLINK_FIREWALL = 0x3
NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
NETLINK_INET_DIAG = 0x4
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
@@ -1074,6 +1129,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1196,6 +1253,7 @@ const (
PACKET_FASTROUTE = 0x6
PACKET_HDRLEN = 0xb
PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
PACKET_KERNEL = 0x7
PACKET_LOOPBACK = 0x5
PACKET_LOSS = 0xe
@@ -1245,6 +1303,36 @@ const (
PERF_EVENT_IOC_SET_FILTER = 0x80082406
PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x8004743d
+ PPPIOCATTCHAN = 0x80047438
+ PPPIOCCONNECT = 0x8004743a
+ PPPIOCDETACH = 0x8004743c
+ PPPIOCDISCONN = 0x20007439
+ PPPIOCGASYNCMAP = 0x40047458
+ PPPIOCGCHAN = 0x40047437
+ PPPIOCGDEBUG = 0x40047441
+ PPPIOCGFLAGS = 0x4004745a
+ PPPIOCGIDLE = 0x4010743f
+ PPPIOCGL2TPSTATS = 0x40487436
+ PPPIOCGMRU = 0x40047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x40047455
+ PPPIOCGUNIT = 0x40047456
+ PPPIOCGXASYNCMAP = 0x40207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x80107446
+ PPPIOCSASYNCMAP = 0x80047457
+ PPPIOCSCOMPRESS = 0x8010744d
+ PPPIOCSDEBUG = 0x80047440
+ PPPIOCSFLAGS = 0x80047459
+ PPPIOCSMAXCID = 0x80047451
+ PPPIOCSMRRU = 0x8004743b
+ PPPIOCSMRU = 0x80047452
+ PPPIOCSNPMODE = 0x8008744b
+ PPPIOCSPASS = 0x80107447
+ PPPIOCSRASYNCMAP = 0x80047454
+ PPPIOCSXASYNCMAP = 0x8020744f
+ PPPIOCXFERUNIT = 0x2000744e
PRIO_PGRP = 0x1
PRIO_PROCESS = 0x0
PRIO_USER = 0x2
@@ -1347,6 +1435,7 @@ const (
PR_SPEC_DISABLE = 0x4
PR_SPEC_ENABLE = 0x2
PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
PR_SPEC_NOT_AFFECTED = 0x0
PR_SPEC_PRCTL = 0x1
PR_SPEC_STORE_BYPASS = 0x0
@@ -1425,6 +1514,8 @@ const (
PTRACE_SINGLEBLOCK = 0x100
PTRACE_SINGLESTEP = 0x9
PTRACE_SYSCALL = 0x18
+ PTRACE_SYSEMU = 0x1d
+ PTRACE_SYSEMU_SINGLESTEP = 0x1e
PTRACE_TRACEME = 0x0
PT_CCR = 0x26
PT_CTR = 0x23
@@ -1484,6 +1575,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1526,7 +1620,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1594,6 +1688,7 @@ const (
RTM_DELACTION = 0x31
RTM_DELADDR = 0x15
RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
RTM_DELLINK = 0x11
RTM_DELMDB = 0x55
RTM_DELNEIGH = 0x1d
@@ -1614,6 +1709,7 @@ const (
RTM_GETADDR = 0x16
RTM_GETADDRLABEL = 0x4a
RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
RTM_GETDCB = 0x4e
RTM_GETLINK = 0x12
RTM_GETMDB = 0x56
@@ -1628,11 +1724,12 @@ const (
RTM_GETSTATS = 0x5e
RTM_GETTCLASS = 0x2a
RTM_GETTFILTER = 0x2e
- RTM_MAX = 0x63
+ RTM_MAX = 0x67
RTM_NEWACTION = 0x30
RTM_NEWADDR = 0x14
RTM_NEWADDRLABEL = 0x48
RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
RTM_NEWLINK = 0x10
RTM_NEWMDB = 0x54
RTM_NEWNDUSEROPT = 0x44
@@ -1647,8 +1744,8 @@ const (
RTM_NEWSTATS = 0x5c
RTM_NEWTCLASS = 0x28
RTM_NEWTFILTER = 0x2c
- RTM_NR_FAMILIES = 0x15
- RTM_NR_MSGTYPES = 0x54
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
RTM_SETDCB = 0x4f
RTM_SETLINK = 0x13
RTM_SETNEIGHTBL = 0x43
@@ -1662,17 +1759,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1692,7 +1794,9 @@ const (
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
+ SC_LOG_FLUSH = 0x100000
SECCOMP_MODE_DISABLED = 0x0
SECCOMP_MODE_FILTER = 0x2
SECCOMP_MODE_STRICT = 0x1
@@ -1748,6 +1852,9 @@ const (
SIOCGMIIPHY = 0x8947
SIOCGMIIREG = 0x8948
SIOCGPGRP = 0x8904
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
SIOCGRARP = 0x8961
SIOCGSKNS = 0x894c
SIOCGSTAMP = 0x8906
@@ -1837,6 +1944,7 @@ const (
SOL_TIPC = 0x10f
SOL_TLS = 0x11a
SOL_X25 = 0x106
+ SOL_XDP = 0x11b
SOMAXCONN = 0x80
SO_ACCEPTCONN = 0x1e
SO_ATTACH_BPF = 0x32
@@ -1895,6 +2003,7 @@ const (
SO_TIMESTAMP = 0x1d
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
+ SO_TXTIME = 0x3d
SO_TYPE = 0x3
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
@@ -1932,6 +2041,9 @@ const (
STATX_TYPE = 0x1
STATX_UID = 0x8
STATX__RESERVED = 0x80000000
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
SYSFS_MAGIC = 0x62656572
S_BLKSIZE = 0x200
S_IEXEC = 0x40
@@ -1970,7 +2082,7 @@ const (
TASKSTATS_GENL_NAME = "TASKSTATS"
TASKSTATS_GENL_VERSION = 0x1
TASKSTATS_TYPE_MAX = 0x6
- TASKSTATS_VERSION = 0x8
+ TASKSTATS_VERSION = 0x9
TCFLSH = 0x2000741f
TCGETA = 0x40147417
TCGETS = 0x402c7413
@@ -1993,6 +2105,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
@@ -2046,6 +2160,7 @@ const (
TIOCGETP = 0x40067408
TIOCGEXCL = 0x40045440
TIOCGICOUNT = 0x545d
+ TIOCGISO7816 = 0x40285442
TIOCGLCKTRMIOS = 0x5456
TIOCGLTC = 0x40067474
TIOCGPGRP = 0x40047477
@@ -2106,6 +2221,7 @@ const (
TIOCSETN = 0x8006740a
TIOCSETP = 0x80067409
TIOCSIG = 0x80045436
+ TIOCSISO7816 = 0xc0285443
TIOCSLCKTRMIOS = 0x5457
TIOCSLTC = 0x80067475
TIOCSPGRP = 0x80047476
@@ -2166,6 +2282,21 @@ const (
TUNSETVNETBE = 0x800454de
TUNSETVNETHDRSZ = 0x800454d8
TUNSETVNETLE = 0x800454dc
+ UBI_IOCATT = 0x80186f40
+ UBI_IOCDET = 0x80046f41
+ UBI_IOCEBCH = 0x80044f02
+ UBI_IOCEBER = 0x80044f01
+ UBI_IOCEBISMAP = 0x40044f05
+ UBI_IOCEBMAP = 0x80084f03
+ UBI_IOCEBUNMAP = 0x80044f04
+ UBI_IOCMKVOL = 0x80986f00
+ UBI_IOCRMVOL = 0x80046f01
+ UBI_IOCRNVOL = 0x91106f03
+ UBI_IOCRSVOL = 0x800c6f02
+ UBI_IOCSETVOLPROP = 0x80104f06
+ UBI_IOCVOLCRBLK = 0x80804f07
+ UBI_IOCVOLRMBLK = 0x20004f08
+ UBI_IOCVOLUP = 0x80084f00
UDF_SUPER_MAGIC = 0x15013346
UMOUNT_NOFOLLOW = 0x8
USBDEVICE_SUPER_MAGIC = 0x9fa2
@@ -2302,7 +2433,28 @@ const (
XATTR_CREATE = 0x1
XATTR_REPLACE = 0x2
XCASE = 0x4000
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
XTABS = 0xc00
ZSMALLOC_MAGIC = 0x58295829
)
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
new file mode 100644
index 000000000..cfe9ef8b1
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
@@ -0,0 +1,2740 @@
+// mkerrors.sh -Wall -Werror -static -I/tmp/include
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build riscv64,linux
+
+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
+
+package unix
+
+import "syscall"
+
+const (
+ AAFS_MAGIC = 0x5a3c69f0
+ ADFS_SUPER_MAGIC = 0xadf5
+ AFFS_SUPER_MAGIC = 0xadff
+ AFS_FS_MAGIC = 0x6b414653
+ AFS_SUPER_MAGIC = 0x5346414f
+ AF_ALG = 0x26
+ AF_APPLETALK = 0x5
+ AF_ASH = 0x12
+ AF_ATMPVC = 0x8
+ AF_ATMSVC = 0x14
+ AF_AX25 = 0x3
+ AF_BLUETOOTH = 0x1f
+ AF_BRIDGE = 0x7
+ AF_CAIF = 0x25
+ AF_CAN = 0x1d
+ AF_DECnet = 0xc
+ AF_ECONET = 0x13
+ AF_FILE = 0x1
+ AF_IB = 0x1b
+ AF_IEEE802154 = 0x24
+ AF_INET = 0x2
+ AF_INET6 = 0xa
+ AF_IPX = 0x4
+ AF_IRDA = 0x17
+ AF_ISDN = 0x22
+ AF_IUCV = 0x20
+ AF_KCM = 0x29
+ AF_KEY = 0xf
+ AF_LLC = 0x1a
+ AF_LOCAL = 0x1
+ AF_MAX = 0x2c
+ AF_MPLS = 0x1c
+ AF_NETBEUI = 0xd
+ AF_NETLINK = 0x10
+ AF_NETROM = 0x6
+ AF_NFC = 0x27
+ AF_PACKET = 0x11
+ AF_PHONET = 0x23
+ AF_PPPOX = 0x18
+ AF_QIPCRTR = 0x2a
+ AF_RDS = 0x15
+ AF_ROSE = 0xb
+ AF_ROUTE = 0x10
+ AF_RXRPC = 0x21
+ AF_SECURITY = 0xe
+ AF_SMC = 0x2b
+ AF_SNA = 0x16
+ AF_TIPC = 0x1e
+ AF_UNIX = 0x1
+ AF_UNSPEC = 0x0
+ AF_VSOCK = 0x28
+ AF_WANPIPE = 0x19
+ AF_X25 = 0x9
+ AF_XDP = 0x2c
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
+ ANON_INODE_FS_MAGIC = 0x9041934
+ ARPHRD_6LOWPAN = 0x339
+ ARPHRD_ADAPT = 0x108
+ ARPHRD_APPLETLK = 0x8
+ ARPHRD_ARCNET = 0x7
+ ARPHRD_ASH = 0x30d
+ ARPHRD_ATM = 0x13
+ ARPHRD_AX25 = 0x3
+ ARPHRD_BIF = 0x307
+ ARPHRD_CAIF = 0x336
+ ARPHRD_CAN = 0x118
+ ARPHRD_CHAOS = 0x5
+ ARPHRD_CISCO = 0x201
+ ARPHRD_CSLIP = 0x101
+ ARPHRD_CSLIP6 = 0x103
+ ARPHRD_DDCMP = 0x205
+ ARPHRD_DLCI = 0xf
+ ARPHRD_ECONET = 0x30e
+ ARPHRD_EETHER = 0x2
+ ARPHRD_ETHER = 0x1
+ ARPHRD_EUI64 = 0x1b
+ ARPHRD_FCAL = 0x311
+ ARPHRD_FCFABRIC = 0x313
+ ARPHRD_FCPL = 0x312
+ ARPHRD_FCPP = 0x310
+ ARPHRD_FDDI = 0x306
+ ARPHRD_FRAD = 0x302
+ ARPHRD_HDLC = 0x201
+ ARPHRD_HIPPI = 0x30c
+ ARPHRD_HWX25 = 0x110
+ ARPHRD_IEEE1394 = 0x18
+ ARPHRD_IEEE802 = 0x6
+ ARPHRD_IEEE80211 = 0x321
+ ARPHRD_IEEE80211_PRISM = 0x322
+ ARPHRD_IEEE80211_RADIOTAP = 0x323
+ ARPHRD_IEEE802154 = 0x324
+ ARPHRD_IEEE802154_MONITOR = 0x325
+ ARPHRD_IEEE802_TR = 0x320
+ ARPHRD_INFINIBAND = 0x20
+ ARPHRD_IP6GRE = 0x337
+ ARPHRD_IPDDP = 0x309
+ ARPHRD_IPGRE = 0x30a
+ ARPHRD_IRDA = 0x30f
+ ARPHRD_LAPB = 0x204
+ ARPHRD_LOCALTLK = 0x305
+ ARPHRD_LOOPBACK = 0x304
+ ARPHRD_METRICOM = 0x17
+ ARPHRD_NETLINK = 0x338
+ ARPHRD_NETROM = 0x0
+ ARPHRD_NONE = 0xfffe
+ ARPHRD_PHONET = 0x334
+ ARPHRD_PHONET_PIPE = 0x335
+ ARPHRD_PIMREG = 0x30b
+ ARPHRD_PPP = 0x200
+ ARPHRD_PRONET = 0x4
+ ARPHRD_RAWHDLC = 0x206
+ ARPHRD_RAWIP = 0x207
+ ARPHRD_ROSE = 0x10e
+ ARPHRD_RSRVD = 0x104
+ ARPHRD_SIT = 0x308
+ ARPHRD_SKIP = 0x303
+ ARPHRD_SLIP = 0x100
+ ARPHRD_SLIP6 = 0x102
+ ARPHRD_TUNNEL = 0x300
+ ARPHRD_TUNNEL6 = 0x301
+ ARPHRD_VOID = 0xffff
+ ARPHRD_VSOCKMON = 0x33a
+ ARPHRD_X25 = 0x10f
+ AUTOFS_SUPER_MAGIC = 0x187
+ B0 = 0x0
+ B1000000 = 0x1008
+ B110 = 0x3
+ B115200 = 0x1002
+ B1152000 = 0x1009
+ B1200 = 0x9
+ B134 = 0x4
+ B150 = 0x5
+ B1500000 = 0x100a
+ B1800 = 0xa
+ B19200 = 0xe
+ B200 = 0x6
+ B2000000 = 0x100b
+ B230400 = 0x1003
+ B2400 = 0xb
+ B2500000 = 0x100c
+ B300 = 0x7
+ B3000000 = 0x100d
+ B3500000 = 0x100e
+ B38400 = 0xf
+ B4000000 = 0x100f
+ B460800 = 0x1004
+ B4800 = 0xc
+ B50 = 0x1
+ B500000 = 0x1005
+ B57600 = 0x1001
+ B576000 = 0x1006
+ B600 = 0x8
+ B75 = 0x2
+ B921600 = 0x1007
+ B9600 = 0xd
+ BALLOON_KVM_MAGIC = 0x13661366
+ BDEVFS_MAGIC = 0x62646576
+ BINFMTFS_MAGIC = 0x42494e4d
+ BLKBSZGET = 0x80081270
+ BLKBSZSET = 0x40081271
+ BLKFLSBUF = 0x1261
+ BLKFRAGET = 0x1265
+ BLKFRASET = 0x1264
+ BLKGETSIZE = 0x1260
+ BLKGETSIZE64 = 0x80081272
+ BLKPBSZGET = 0x127b
+ BLKRAGET = 0x1263
+ BLKRASET = 0x1262
+ BLKROGET = 0x125e
+ BLKROSET = 0x125d
+ BLKRRPART = 0x125f
+ BLKSECTGET = 0x1267
+ BLKSECTSET = 0x1266
+ BLKSSZGET = 0x1268
+ BOTHER = 0x1000
+ BPF_A = 0x10
+ BPF_ABS = 0x20
+ BPF_ADD = 0x0
+ BPF_ALU = 0x4
+ BPF_AND = 0x50
+ BPF_B = 0x10
+ BPF_DIV = 0x30
+ BPF_FS_MAGIC = 0xcafe4a11
+ BPF_H = 0x8
+ BPF_IMM = 0x0
+ BPF_IND = 0x40
+ BPF_JA = 0x0
+ BPF_JEQ = 0x10
+ BPF_JGE = 0x30
+ BPF_JGT = 0x20
+ BPF_JMP = 0x5
+ BPF_JSET = 0x40
+ BPF_K = 0x0
+ BPF_LD = 0x0
+ BPF_LDX = 0x1
+ BPF_LEN = 0x80
+ BPF_LL_OFF = -0x200000
+ BPF_LSH = 0x60
+ BPF_MAJOR_VERSION = 0x1
+ BPF_MAXINSNS = 0x1000
+ BPF_MEM = 0x60
+ BPF_MEMWORDS = 0x10
+ BPF_MINOR_VERSION = 0x1
+ BPF_MISC = 0x7
+ BPF_MOD = 0x90
+ BPF_MSH = 0xa0
+ BPF_MUL = 0x20
+ BPF_NEG = 0x80
+ BPF_NET_OFF = -0x100000
+ BPF_OR = 0x40
+ BPF_RET = 0x6
+ BPF_RSH = 0x70
+ BPF_ST = 0x2
+ BPF_STX = 0x3
+ BPF_SUB = 0x10
+ BPF_TAX = 0x0
+ BPF_TXA = 0x80
+ BPF_W = 0x0
+ BPF_X = 0x8
+ BPF_XOR = 0xa0
+ BRKINT = 0x2
+ BS0 = 0x0
+ BS1 = 0x2000
+ BSDLY = 0x2000
+ BTRFS_SUPER_MAGIC = 0x9123683e
+ BTRFS_TEST_MAGIC = 0x73727279
+ CAN_BCM = 0x2
+ CAN_EFF_FLAG = 0x80000000
+ CAN_EFF_ID_BITS = 0x1d
+ CAN_EFF_MASK = 0x1fffffff
+ CAN_ERR_FLAG = 0x20000000
+ CAN_ERR_MASK = 0x1fffffff
+ CAN_INV_FILTER = 0x20000000
+ CAN_ISOTP = 0x6
+ CAN_MAX_DLC = 0x8
+ CAN_MAX_DLEN = 0x8
+ CAN_MCNET = 0x5
+ CAN_MTU = 0x10
+ CAN_NPROTO = 0x7
+ CAN_RAW = 0x1
+ CAN_RAW_FILTER_MAX = 0x200
+ CAN_RTR_FLAG = 0x40000000
+ CAN_SFF_ID_BITS = 0xb
+ CAN_SFF_MASK = 0x7ff
+ CAN_TP16 = 0x3
+ CAN_TP20 = 0x4
+ CBAUD = 0x100f
+ CBAUDEX = 0x1000
+ CFLUSH = 0xf
+ CGROUP2_SUPER_MAGIC = 0x63677270
+ CGROUP_SUPER_MAGIC = 0x27e0eb
+ CIBAUD = 0x100f0000
+ CLOCAL = 0x800
+ CLOCK_BOOTTIME = 0x7
+ CLOCK_BOOTTIME_ALARM = 0x9
+ CLOCK_DEFAULT = 0x0
+ CLOCK_EXT = 0x1
+ CLOCK_INT = 0x2
+ CLOCK_MONOTONIC = 0x1
+ CLOCK_MONOTONIC_COARSE = 0x6
+ CLOCK_MONOTONIC_RAW = 0x4
+ CLOCK_PROCESS_CPUTIME_ID = 0x2
+ CLOCK_REALTIME = 0x0
+ CLOCK_REALTIME_ALARM = 0x8
+ CLOCK_REALTIME_COARSE = 0x5
+ CLOCK_TAI = 0xb
+ CLOCK_THREAD_CPUTIME_ID = 0x3
+ CLOCK_TXFROMRX = 0x4
+ CLOCK_TXINT = 0x3
+ CLONE_CHILD_CLEARTID = 0x200000
+ CLONE_CHILD_SETTID = 0x1000000
+ CLONE_DETACHED = 0x400000
+ CLONE_FILES = 0x400
+ CLONE_FS = 0x200
+ CLONE_IO = 0x80000000
+ CLONE_NEWCGROUP = 0x2000000
+ CLONE_NEWIPC = 0x8000000
+ CLONE_NEWNET = 0x40000000
+ CLONE_NEWNS = 0x20000
+ CLONE_NEWPID = 0x20000000
+ CLONE_NEWUSER = 0x10000000
+ CLONE_NEWUTS = 0x4000000
+ CLONE_PARENT = 0x8000
+ CLONE_PARENT_SETTID = 0x100000
+ CLONE_PTRACE = 0x2000
+ CLONE_SETTLS = 0x80000
+ CLONE_SIGHAND = 0x800
+ CLONE_SYSVSEM = 0x40000
+ CLONE_THREAD = 0x10000
+ CLONE_UNTRACED = 0x800000
+ CLONE_VFORK = 0x4000
+ CLONE_VM = 0x100
+ CMSPAR = 0x40000000
+ CODA_SUPER_MAGIC = 0x73757245
+ CR0 = 0x0
+ CR1 = 0x200
+ CR2 = 0x400
+ CR3 = 0x600
+ CRAMFS_MAGIC = 0x28cd3d45
+ CRDLY = 0x600
+ CREAD = 0x80
+ CRTSCTS = 0x80000000
+ CS5 = 0x0
+ CS6 = 0x10
+ CS7 = 0x20
+ CS8 = 0x30
+ CSIGNAL = 0xff
+ CSIZE = 0x30
+ CSTART = 0x11
+ CSTATUS = 0x0
+ CSTOP = 0x13
+ CSTOPB = 0x40
+ CSUSP = 0x1a
+ DAXFS_MAGIC = 0x64646178
+ DEBUGFS_MAGIC = 0x64626720
+ DEVPTS_SUPER_MAGIC = 0x1cd1
+ DT_BLK = 0x6
+ DT_CHR = 0x2
+ DT_DIR = 0x4
+ DT_FIFO = 0x1
+ DT_LNK = 0xa
+ DT_REG = 0x8
+ DT_SOCK = 0xc
+ DT_UNKNOWN = 0x0
+ DT_WHT = 0xe
+ ECHO = 0x8
+ ECHOCTL = 0x200
+ ECHOE = 0x10
+ ECHOK = 0x20
+ ECHOKE = 0x800
+ ECHONL = 0x40
+ ECHOPRT = 0x400
+ ECRYPTFS_SUPER_MAGIC = 0xf15f
+ EFD_CLOEXEC = 0x80000
+ EFD_NONBLOCK = 0x800
+ EFD_SEMAPHORE = 0x1
+ EFIVARFS_MAGIC = 0xde5e81e4
+ EFS_SUPER_MAGIC = 0x414a53
+ ENCODING_DEFAULT = 0x0
+ ENCODING_FM_MARK = 0x3
+ ENCODING_FM_SPACE = 0x4
+ ENCODING_MANCHESTER = 0x5
+ ENCODING_NRZ = 0x1
+ ENCODING_NRZI = 0x2
+ EPOLLERR = 0x8
+ EPOLLET = 0x80000000
+ EPOLLEXCLUSIVE = 0x10000000
+ EPOLLHUP = 0x10
+ EPOLLIN = 0x1
+ EPOLLMSG = 0x400
+ EPOLLONESHOT = 0x40000000
+ EPOLLOUT = 0x4
+ EPOLLPRI = 0x2
+ EPOLLRDBAND = 0x80
+ EPOLLRDHUP = 0x2000
+ EPOLLRDNORM = 0x40
+ EPOLLWAKEUP = 0x20000000
+ EPOLLWRBAND = 0x200
+ EPOLLWRNORM = 0x100
+ EPOLL_CLOEXEC = 0x80000
+ EPOLL_CTL_ADD = 0x1
+ EPOLL_CTL_DEL = 0x2
+ EPOLL_CTL_MOD = 0x3
+ ETH_P_1588 = 0x88f7
+ ETH_P_8021AD = 0x88a8
+ ETH_P_8021AH = 0x88e7
+ ETH_P_8021Q = 0x8100
+ ETH_P_80221 = 0x8917
+ ETH_P_802_2 = 0x4
+ ETH_P_802_3 = 0x1
+ ETH_P_802_3_MIN = 0x600
+ ETH_P_802_EX1 = 0x88b5
+ ETH_P_AARP = 0x80f3
+ ETH_P_AF_IUCV = 0xfbfb
+ ETH_P_ALL = 0x3
+ ETH_P_AOE = 0x88a2
+ ETH_P_ARCNET = 0x1a
+ ETH_P_ARP = 0x806
+ ETH_P_ATALK = 0x809b
+ ETH_P_ATMFATE = 0x8884
+ ETH_P_ATMMPOA = 0x884c
+ ETH_P_AX25 = 0x2
+ ETH_P_BATMAN = 0x4305
+ ETH_P_BPQ = 0x8ff
+ ETH_P_CAIF = 0xf7
+ ETH_P_CAN = 0xc
+ ETH_P_CANFD = 0xd
+ ETH_P_CONTROL = 0x16
+ ETH_P_CUST = 0x6006
+ ETH_P_DDCMP = 0x6
+ ETH_P_DEC = 0x6000
+ ETH_P_DIAG = 0x6005
+ ETH_P_DNA_DL = 0x6001
+ ETH_P_DNA_RC = 0x6002
+ ETH_P_DNA_RT = 0x6003
+ ETH_P_DSA = 0x1b
+ ETH_P_ECONET = 0x18
+ ETH_P_EDSA = 0xdada
+ ETH_P_ERSPAN = 0x88be
+ ETH_P_ERSPAN2 = 0x22eb
+ ETH_P_FCOE = 0x8906
+ ETH_P_FIP = 0x8914
+ ETH_P_HDLC = 0x19
+ ETH_P_HSR = 0x892f
+ ETH_P_IBOE = 0x8915
+ ETH_P_IEEE802154 = 0xf6
+ ETH_P_IEEEPUP = 0xa00
+ ETH_P_IEEEPUPAT = 0xa01
+ ETH_P_IFE = 0xed3e
+ ETH_P_IP = 0x800
+ ETH_P_IPV6 = 0x86dd
+ ETH_P_IPX = 0x8137
+ ETH_P_IRDA = 0x17
+ ETH_P_LAT = 0x6004
+ ETH_P_LINK_CTL = 0x886c
+ ETH_P_LOCALTALK = 0x9
+ ETH_P_LOOP = 0x60
+ ETH_P_LOOPBACK = 0x9000
+ ETH_P_MACSEC = 0x88e5
+ ETH_P_MAP = 0xf9
+ ETH_P_MOBITEX = 0x15
+ ETH_P_MPLS_MC = 0x8848
+ ETH_P_MPLS_UC = 0x8847
+ ETH_P_MVRP = 0x88f5
+ ETH_P_NCSI = 0x88f8
+ ETH_P_NSH = 0x894f
+ ETH_P_PAE = 0x888e
+ ETH_P_PAUSE = 0x8808
+ ETH_P_PHONET = 0xf5
+ ETH_P_PPPTALK = 0x10
+ ETH_P_PPP_DISC = 0x8863
+ ETH_P_PPP_MP = 0x8
+ ETH_P_PPP_SES = 0x8864
+ ETH_P_PREAUTH = 0x88c7
+ ETH_P_PRP = 0x88fb
+ ETH_P_PUP = 0x200
+ ETH_P_PUPAT = 0x201
+ ETH_P_QINQ1 = 0x9100
+ ETH_P_QINQ2 = 0x9200
+ ETH_P_QINQ3 = 0x9300
+ ETH_P_RARP = 0x8035
+ ETH_P_SCA = 0x6007
+ ETH_P_SLOW = 0x8809
+ ETH_P_SNAP = 0x5
+ ETH_P_TDLS = 0x890d
+ ETH_P_TEB = 0x6558
+ ETH_P_TIPC = 0x88ca
+ ETH_P_TRAILER = 0x1c
+ ETH_P_TR_802_2 = 0x11
+ ETH_P_TSN = 0x22f0
+ ETH_P_WAN_PPP = 0x7
+ ETH_P_WCCP = 0x883e
+ ETH_P_X25 = 0x805
+ ETH_P_XDSA = 0xf8
+ EXABYTE_ENABLE_NEST = 0xf0
+ EXT2_SUPER_MAGIC = 0xef53
+ EXT3_SUPER_MAGIC = 0xef53
+ EXT4_SUPER_MAGIC = 0xef53
+ EXTA = 0xe
+ EXTB = 0xf
+ EXTPROC = 0x10000
+ F2FS_SUPER_MAGIC = 0xf2f52010
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_UNSHARE_RANGE = 0x40
+ FALLOC_FL_ZERO_RANGE = 0x10
+ FD_CLOEXEC = 0x1
+ FD_SETSIZE = 0x400
+ FF0 = 0x0
+ FF1 = 0x8000
+ FFDLY = 0x8000
+ FLUSHO = 0x1000
+ FS_ENCRYPTION_MODE_AES_128_CBC = 0x5
+ FS_ENCRYPTION_MODE_AES_128_CTS = 0x6
+ FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
+ FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
+ FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
+ FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
+ FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
+ FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
+ FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
+ FS_KEY_DESCRIPTOR_SIZE = 0x8
+ FS_KEY_DESC_PREFIX = "fscrypt:"
+ FS_KEY_DESC_PREFIX_SIZE = 0x8
+ FS_MAX_KEY_SIZE = 0x40
+ FS_POLICY_FLAGS_PAD_16 = 0x2
+ FS_POLICY_FLAGS_PAD_32 = 0x3
+ FS_POLICY_FLAGS_PAD_4 = 0x0
+ FS_POLICY_FLAGS_PAD_8 = 0x1
+ FS_POLICY_FLAGS_PAD_MASK = 0x3
+ FS_POLICY_FLAGS_VALID = 0x3
+ FUTEXFS_SUPER_MAGIC = 0xbad1dea
+ F_ADD_SEALS = 0x409
+ F_DUPFD = 0x0
+ F_DUPFD_CLOEXEC = 0x406
+ F_EXLCK = 0x4
+ F_GETFD = 0x1
+ F_GETFL = 0x3
+ F_GETLEASE = 0x401
+ F_GETLK = 0x5
+ F_GETLK64 = 0x5
+ F_GETOWN = 0x9
+ F_GETOWN_EX = 0x10
+ F_GETPIPE_SZ = 0x408
+ F_GETSIG = 0xb
+ F_GET_FILE_RW_HINT = 0x40d
+ F_GET_RW_HINT = 0x40b
+ F_GET_SEALS = 0x40a
+ F_LOCK = 0x1
+ F_NOTIFY = 0x402
+ F_OFD_GETLK = 0x24
+ F_OFD_SETLK = 0x25
+ F_OFD_SETLKW = 0x26
+ F_OK = 0x0
+ F_RDLCK = 0x0
+ F_SEAL_GROW = 0x4
+ F_SEAL_SEAL = 0x1
+ F_SEAL_SHRINK = 0x2
+ F_SEAL_WRITE = 0x8
+ F_SETFD = 0x2
+ F_SETFL = 0x4
+ F_SETLEASE = 0x400
+ F_SETLK = 0x6
+ F_SETLK64 = 0x6
+ F_SETLKW = 0x7
+ F_SETLKW64 = 0x7
+ F_SETOWN = 0x8
+ F_SETOWN_EX = 0xf
+ F_SETPIPE_SZ = 0x407
+ F_SETSIG = 0xa
+ F_SET_FILE_RW_HINT = 0x40e
+ F_SET_RW_HINT = 0x40c
+ F_SHLCK = 0x8
+ F_TEST = 0x3
+ F_TLOCK = 0x2
+ F_ULOCK = 0x0
+ F_UNLCK = 0x2
+ F_WRLCK = 0x1
+ GENL_ADMIN_PERM = 0x1
+ GENL_CMD_CAP_DO = 0x2
+ GENL_CMD_CAP_DUMP = 0x4
+ GENL_CMD_CAP_HASPOL = 0x8
+ GENL_HDRLEN = 0x4
+ GENL_ID_CTRL = 0x10
+ GENL_ID_PMCRAID = 0x12
+ GENL_ID_VFS_DQUOT = 0x11
+ GENL_MAX_ID = 0x3ff
+ GENL_MIN_ID = 0x10
+ GENL_NAMSIZ = 0x10
+ GENL_START_ALLOC = 0x13
+ GENL_UNS_ADMIN_PERM = 0x10
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
+ HDIO_DRIVE_CMD = 0x31f
+ HDIO_DRIVE_CMD_AEB = 0x31e
+ HDIO_DRIVE_CMD_HDR_SIZE = 0x4
+ HDIO_DRIVE_HOB_HDR_SIZE = 0x8
+ HDIO_DRIVE_RESET = 0x31c
+ HDIO_DRIVE_TASK = 0x31e
+ HDIO_DRIVE_TASKFILE = 0x31d
+ HDIO_DRIVE_TASK_HDR_SIZE = 0x8
+ HDIO_GETGEO = 0x301
+ HDIO_GET_32BIT = 0x309
+ HDIO_GET_ACOUSTIC = 0x30f
+ HDIO_GET_ADDRESS = 0x310
+ HDIO_GET_BUSSTATE = 0x31a
+ HDIO_GET_DMA = 0x30b
+ HDIO_GET_IDENTITY = 0x30d
+ HDIO_GET_KEEPSETTINGS = 0x308
+ HDIO_GET_MULTCOUNT = 0x304
+ HDIO_GET_NICE = 0x30c
+ HDIO_GET_NOWERR = 0x30a
+ HDIO_GET_QDMA = 0x305
+ HDIO_GET_UNMASKINTR = 0x302
+ HDIO_GET_WCACHE = 0x30e
+ HDIO_OBSOLETE_IDENTITY = 0x307
+ HDIO_SCAN_HWIF = 0x328
+ HDIO_SET_32BIT = 0x324
+ HDIO_SET_ACOUSTIC = 0x32c
+ HDIO_SET_ADDRESS = 0x32f
+ HDIO_SET_BUSSTATE = 0x32d
+ HDIO_SET_DMA = 0x326
+ HDIO_SET_KEEPSETTINGS = 0x323
+ HDIO_SET_MULTCOUNT = 0x321
+ HDIO_SET_NICE = 0x329
+ HDIO_SET_NOWERR = 0x325
+ HDIO_SET_PIO_MODE = 0x327
+ HDIO_SET_QDMA = 0x32e
+ HDIO_SET_UNMASKINTR = 0x322
+ HDIO_SET_WCACHE = 0x32b
+ HDIO_SET_XFER = 0x306
+ HDIO_TRISTATE_HWIF = 0x31b
+ HDIO_UNREGISTER_HWIF = 0x32a
+ HOSTFS_SUPER_MAGIC = 0xc0ffee
+ HPFS_SUPER_MAGIC = 0xf995e849
+ HUGETLBFS_MAGIC = 0x958458f6
+ HUPCL = 0x400
+ IBSHIFT = 0x10
+ ICANON = 0x2
+ ICMPV6_FILTER = 0x1
+ ICRNL = 0x100
+ IEXTEN = 0x8000
+ IFA_F_DADFAILED = 0x8
+ IFA_F_DEPRECATED = 0x20
+ IFA_F_HOMEADDRESS = 0x10
+ IFA_F_MANAGETEMPADDR = 0x100
+ IFA_F_MCAUTOJOIN = 0x400
+ IFA_F_NODAD = 0x2
+ IFA_F_NOPREFIXROUTE = 0x200
+ IFA_F_OPTIMISTIC = 0x4
+ IFA_F_PERMANENT = 0x80
+ IFA_F_SECONDARY = 0x1
+ IFA_F_STABLE_PRIVACY = 0x800
+ IFA_F_TEMPORARY = 0x1
+ IFA_F_TENTATIVE = 0x40
+ IFA_MAX = 0xa
+ IFF_ALLMULTI = 0x200
+ IFF_ATTACH_QUEUE = 0x200
+ IFF_AUTOMEDIA = 0x4000
+ IFF_BROADCAST = 0x2
+ IFF_DEBUG = 0x4
+ IFF_DETACH_QUEUE = 0x400
+ IFF_DORMANT = 0x20000
+ IFF_DYNAMIC = 0x8000
+ IFF_ECHO = 0x40000
+ IFF_LOOPBACK = 0x8
+ IFF_LOWER_UP = 0x10000
+ IFF_MASTER = 0x400
+ IFF_MULTICAST = 0x1000
+ IFF_MULTI_QUEUE = 0x100
+ IFF_NAPI = 0x10
+ IFF_NAPI_FRAGS = 0x20
+ IFF_NOARP = 0x80
+ IFF_NOFILTER = 0x1000
+ IFF_NOTRAILERS = 0x20
+ IFF_NO_PI = 0x1000
+ IFF_ONE_QUEUE = 0x2000
+ IFF_PERSIST = 0x800
+ IFF_POINTOPOINT = 0x10
+ IFF_PORTSEL = 0x2000
+ IFF_PROMISC = 0x100
+ IFF_RUNNING = 0x40
+ IFF_SLAVE = 0x800
+ IFF_TAP = 0x2
+ IFF_TUN = 0x1
+ IFF_TUN_EXCL = 0x8000
+ IFF_UP = 0x1
+ IFF_VNET_HDR = 0x4000
+ IFF_VOLATILE = 0x70c5a
+ IFNAMSIZ = 0x10
+ IGNBRK = 0x1
+ IGNCR = 0x80
+ IGNPAR = 0x4
+ IMAXBEL = 0x2000
+ INLCR = 0x40
+ INPCK = 0x10
+ IN_ACCESS = 0x1
+ IN_ALL_EVENTS = 0xfff
+ IN_ATTRIB = 0x4
+ IN_CLASSA_HOST = 0xffffff
+ IN_CLASSA_MAX = 0x80
+ IN_CLASSA_NET = 0xff000000
+ IN_CLASSA_NSHIFT = 0x18
+ IN_CLASSB_HOST = 0xffff
+ IN_CLASSB_MAX = 0x10000
+ IN_CLASSB_NET = 0xffff0000
+ IN_CLASSB_NSHIFT = 0x10
+ IN_CLASSC_HOST = 0xff
+ IN_CLASSC_NET = 0xffffff00
+ IN_CLASSC_NSHIFT = 0x8
+ IN_CLOEXEC = 0x80000
+ IN_CLOSE = 0x18
+ IN_CLOSE_NOWRITE = 0x10
+ IN_CLOSE_WRITE = 0x8
+ IN_CREATE = 0x100
+ IN_DELETE = 0x200
+ IN_DELETE_SELF = 0x400
+ IN_DONT_FOLLOW = 0x2000000
+ IN_EXCL_UNLINK = 0x4000000
+ IN_IGNORED = 0x8000
+ IN_ISDIR = 0x40000000
+ IN_LOOPBACKNET = 0x7f
+ IN_MASK_ADD = 0x20000000
+ IN_MODIFY = 0x2
+ IN_MOVE = 0xc0
+ IN_MOVED_FROM = 0x40
+ IN_MOVED_TO = 0x80
+ IN_MOVE_SELF = 0x800
+ IN_NONBLOCK = 0x800
+ IN_ONESHOT = 0x80000000
+ IN_ONLYDIR = 0x1000000
+ IN_OPEN = 0x20
+ IN_Q_OVERFLOW = 0x4000
+ IN_UNMOUNT = 0x2000
+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
+ IPPROTO_AH = 0x33
+ IPPROTO_BEETPH = 0x5e
+ IPPROTO_COMP = 0x6c
+ IPPROTO_DCCP = 0x21
+ IPPROTO_DSTOPTS = 0x3c
+ IPPROTO_EGP = 0x8
+ IPPROTO_ENCAP = 0x62
+ IPPROTO_ESP = 0x32
+ IPPROTO_FRAGMENT = 0x2c
+ IPPROTO_GRE = 0x2f
+ IPPROTO_HOPOPTS = 0x0
+ IPPROTO_ICMP = 0x1
+ IPPROTO_ICMPV6 = 0x3a
+ IPPROTO_IDP = 0x16
+ IPPROTO_IGMP = 0x2
+ IPPROTO_IP = 0x0
+ IPPROTO_IPIP = 0x4
+ IPPROTO_IPV6 = 0x29
+ IPPROTO_MH = 0x87
+ IPPROTO_MPLS = 0x89
+ IPPROTO_MTP = 0x5c
+ IPPROTO_NONE = 0x3b
+ IPPROTO_PIM = 0x67
+ IPPROTO_PUP = 0xc
+ IPPROTO_RAW = 0xff
+ IPPROTO_ROUTING = 0x2b
+ IPPROTO_RSVP = 0x2e
+ IPPROTO_SCTP = 0x84
+ IPPROTO_TCP = 0x6
+ IPPROTO_TP = 0x1d
+ IPPROTO_UDP = 0x11
+ IPPROTO_UDPLITE = 0x88
+ IPV6_2292DSTOPTS = 0x4
+ IPV6_2292HOPLIMIT = 0x8
+ IPV6_2292HOPOPTS = 0x3
+ IPV6_2292PKTINFO = 0x2
+ IPV6_2292PKTOPTIONS = 0x6
+ IPV6_2292RTHDR = 0x5
+ IPV6_ADDRFORM = 0x1
+ IPV6_ADDR_PREFERENCES = 0x48
+ IPV6_ADD_MEMBERSHIP = 0x14
+ IPV6_AUTHHDR = 0xa
+ IPV6_AUTOFLOWLABEL = 0x46
+ IPV6_CHECKSUM = 0x7
+ IPV6_DONTFRAG = 0x3e
+ IPV6_DROP_MEMBERSHIP = 0x15
+ IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
+ IPV6_HDRINCL = 0x24
+ IPV6_HOPLIMIT = 0x34
+ IPV6_HOPOPTS = 0x36
+ IPV6_IPSEC_POLICY = 0x22
+ IPV6_JOIN_ANYCAST = 0x1b
+ IPV6_JOIN_GROUP = 0x14
+ IPV6_LEAVE_ANYCAST = 0x1c
+ IPV6_LEAVE_GROUP = 0x15
+ IPV6_MINHOPCOUNT = 0x49
+ IPV6_MTU = 0x18
+ IPV6_MTU_DISCOVER = 0x17
+ IPV6_MULTICAST_HOPS = 0x12
+ IPV6_MULTICAST_IF = 0x11
+ IPV6_MULTICAST_LOOP = 0x13
+ IPV6_NEXTHOP = 0x9
+ IPV6_ORIGDSTADDR = 0x4a
+ IPV6_PATHMTU = 0x3d
+ IPV6_PKTINFO = 0x32
+ IPV6_PMTUDISC_DO = 0x2
+ IPV6_PMTUDISC_DONT = 0x0
+ IPV6_PMTUDISC_INTERFACE = 0x4
+ IPV6_PMTUDISC_OMIT = 0x5
+ IPV6_PMTUDISC_PROBE = 0x3
+ IPV6_PMTUDISC_WANT = 0x1
+ IPV6_RECVDSTOPTS = 0x3a
+ IPV6_RECVERR = 0x19
+ IPV6_RECVFRAGSIZE = 0x4d
+ IPV6_RECVHOPLIMIT = 0x33
+ IPV6_RECVHOPOPTS = 0x35
+ IPV6_RECVORIGDSTADDR = 0x4a
+ IPV6_RECVPATHMTU = 0x3c
+ IPV6_RECVPKTINFO = 0x31
+ IPV6_RECVRTHDR = 0x38
+ IPV6_RECVTCLASS = 0x42
+ IPV6_ROUTER_ALERT = 0x16
+ IPV6_RTHDR = 0x39
+ IPV6_RTHDRDSTOPTS = 0x37
+ IPV6_RTHDR_LOOSE = 0x0
+ IPV6_RTHDR_STRICT = 0x1
+ IPV6_RTHDR_TYPE_0 = 0x0
+ IPV6_RXDSTOPTS = 0x3b
+ IPV6_RXHOPOPTS = 0x36
+ IPV6_TCLASS = 0x43
+ IPV6_TRANSPARENT = 0x4b
+ IPV6_UNICAST_HOPS = 0x10
+ IPV6_UNICAST_IF = 0x4c
+ IPV6_V6ONLY = 0x1a
+ IPV6_XFRM_POLICY = 0x23
+ IP_ADD_MEMBERSHIP = 0x23
+ IP_ADD_SOURCE_MEMBERSHIP = 0x27
+ IP_BIND_ADDRESS_NO_PORT = 0x18
+ IP_BLOCK_SOURCE = 0x26
+ IP_CHECKSUM = 0x17
+ IP_DEFAULT_MULTICAST_LOOP = 0x1
+ IP_DEFAULT_MULTICAST_TTL = 0x1
+ IP_DF = 0x4000
+ IP_DROP_MEMBERSHIP = 0x24
+ IP_DROP_SOURCE_MEMBERSHIP = 0x28
+ IP_FREEBIND = 0xf
+ IP_HDRINCL = 0x3
+ IP_IPSEC_POLICY = 0x10
+ IP_MAXPACKET = 0xffff
+ IP_MAX_MEMBERSHIPS = 0x14
+ IP_MF = 0x2000
+ IP_MINTTL = 0x15
+ IP_MSFILTER = 0x29
+ IP_MSS = 0x240
+ IP_MTU = 0xe
+ IP_MTU_DISCOVER = 0xa
+ IP_MULTICAST_ALL = 0x31
+ IP_MULTICAST_IF = 0x20
+ IP_MULTICAST_LOOP = 0x22
+ IP_MULTICAST_TTL = 0x21
+ IP_NODEFRAG = 0x16
+ IP_OFFMASK = 0x1fff
+ IP_OPTIONS = 0x4
+ IP_ORIGDSTADDR = 0x14
+ IP_PASSSEC = 0x12
+ IP_PKTINFO = 0x8
+ IP_PKTOPTIONS = 0x9
+ IP_PMTUDISC = 0xa
+ IP_PMTUDISC_DO = 0x2
+ IP_PMTUDISC_DONT = 0x0
+ IP_PMTUDISC_INTERFACE = 0x4
+ IP_PMTUDISC_OMIT = 0x5
+ IP_PMTUDISC_PROBE = 0x3
+ IP_PMTUDISC_WANT = 0x1
+ IP_RECVERR = 0xb
+ IP_RECVFRAGSIZE = 0x19
+ IP_RECVOPTS = 0x6
+ IP_RECVORIGDSTADDR = 0x14
+ IP_RECVRETOPTS = 0x7
+ IP_RECVTOS = 0xd
+ IP_RECVTTL = 0xc
+ IP_RETOPTS = 0x7
+ IP_RF = 0x8000
+ IP_ROUTER_ALERT = 0x5
+ IP_TOS = 0x1
+ IP_TRANSPARENT = 0x13
+ IP_TTL = 0x2
+ IP_UNBLOCK_SOURCE = 0x25
+ IP_UNICAST_IF = 0x32
+ IP_XFRM_POLICY = 0x11
+ ISIG = 0x1
+ ISOFS_SUPER_MAGIC = 0x9660
+ ISTRIP = 0x20
+ IUCLC = 0x200
+ IUTF8 = 0x4000
+ IXANY = 0x800
+ IXOFF = 0x1000
+ IXON = 0x400
+ JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
+ KEYCTL_ASSUME_AUTHORITY = 0x10
+ KEYCTL_CHOWN = 0x4
+ KEYCTL_CLEAR = 0x7
+ KEYCTL_DESCRIBE = 0x6
+ KEYCTL_DH_COMPUTE = 0x17
+ KEYCTL_GET_KEYRING_ID = 0x0
+ KEYCTL_GET_PERSISTENT = 0x16
+ KEYCTL_GET_SECURITY = 0x11
+ KEYCTL_INSTANTIATE = 0xc
+ KEYCTL_INSTANTIATE_IOV = 0x14
+ KEYCTL_INVALIDATE = 0x15
+ KEYCTL_JOIN_SESSION_KEYRING = 0x1
+ KEYCTL_LINK = 0x8
+ KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
+ KEYCTL_READ = 0xb
+ KEYCTL_REJECT = 0x13
+ KEYCTL_RESTRICT_KEYRING = 0x1d
+ KEYCTL_REVOKE = 0x3
+ KEYCTL_SEARCH = 0xa
+ KEYCTL_SESSION_TO_PARENT = 0x12
+ KEYCTL_SETPERM = 0x5
+ KEYCTL_SET_REQKEY_KEYRING = 0xe
+ KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
+ KEYCTL_UNLINK = 0x9
+ KEYCTL_UPDATE = 0x2
+ KEY_REQKEY_DEFL_DEFAULT = 0x0
+ KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
+ KEY_REQKEY_DEFL_NO_CHANGE = -0x1
+ KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
+ KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
+ KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
+ KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
+ KEY_REQKEY_DEFL_USER_KEYRING = 0x4
+ KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
+ KEY_SPEC_GROUP_KEYRING = -0x6
+ KEY_SPEC_PROCESS_KEYRING = -0x2
+ KEY_SPEC_REQKEY_AUTH_KEY = -0x7
+ KEY_SPEC_REQUESTOR_KEYRING = -0x8
+ KEY_SPEC_SESSION_KEYRING = -0x3
+ KEY_SPEC_THREAD_KEYRING = -0x1
+ KEY_SPEC_USER_KEYRING = -0x4
+ KEY_SPEC_USER_SESSION_KEYRING = -0x5
+ LINUX_REBOOT_CMD_CAD_OFF = 0x0
+ LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
+ LINUX_REBOOT_CMD_HALT = 0xcdef0123
+ LINUX_REBOOT_CMD_KEXEC = 0x45584543
+ LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
+ LINUX_REBOOT_CMD_RESTART = 0x1234567
+ LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
+ LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
+ LINUX_REBOOT_MAGIC1 = 0xfee1dead
+ LINUX_REBOOT_MAGIC2 = 0x28121969
+ LOCK_EX = 0x2
+ LOCK_NB = 0x4
+ LOCK_SH = 0x1
+ LOCK_UN = 0x8
+ MADV_DODUMP = 0x11
+ MADV_DOFORK = 0xb
+ MADV_DONTDUMP = 0x10
+ MADV_DONTFORK = 0xa
+ MADV_DONTNEED = 0x4
+ MADV_FREE = 0x8
+ MADV_HUGEPAGE = 0xe
+ MADV_HWPOISON = 0x64
+ MADV_KEEPONFORK = 0x13
+ MADV_MERGEABLE = 0xc
+ MADV_NOHUGEPAGE = 0xf
+ MADV_NORMAL = 0x0
+ MADV_RANDOM = 0x1
+ MADV_REMOVE = 0x9
+ MADV_SEQUENTIAL = 0x2
+ MADV_UNMERGEABLE = 0xd
+ MADV_WILLNEED = 0x3
+ MADV_WIPEONFORK = 0x12
+ MAP_ANON = 0x20
+ MAP_ANONYMOUS = 0x20
+ MAP_DENYWRITE = 0x800
+ MAP_EXECUTABLE = 0x1000
+ MAP_FILE = 0x0
+ MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
+ MAP_GROWSDOWN = 0x100
+ MAP_HUGETLB = 0x40000
+ MAP_HUGE_MASK = 0x3f
+ MAP_HUGE_SHIFT = 0x1a
+ MAP_LOCKED = 0x2000
+ MAP_NONBLOCK = 0x10000
+ MAP_NORESERVE = 0x4000
+ MAP_POPULATE = 0x8000
+ MAP_PRIVATE = 0x2
+ MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
+ MAP_STACK = 0x20000
+ MAP_SYNC = 0x80000
+ MAP_TYPE = 0xf
+ MCL_CURRENT = 0x1
+ MCL_FUTURE = 0x2
+ MCL_ONFAULT = 0x4
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
+ MINIX2_SUPER_MAGIC = 0x2468
+ MINIX2_SUPER_MAGIC2 = 0x2478
+ MINIX3_SUPER_MAGIC = 0x4d5a
+ MINIX_SUPER_MAGIC = 0x137f
+ MINIX_SUPER_MAGIC2 = 0x138f
+ MNT_DETACH = 0x2
+ MNT_EXPIRE = 0x4
+ MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
+ MSDOS_SUPER_MAGIC = 0x4d44
+ MSG_BATCH = 0x40000
+ MSG_CMSG_CLOEXEC = 0x40000000
+ MSG_CONFIRM = 0x800
+ MSG_CTRUNC = 0x8
+ MSG_DONTROUTE = 0x4
+ MSG_DONTWAIT = 0x40
+ MSG_EOR = 0x80
+ MSG_ERRQUEUE = 0x2000
+ MSG_FASTOPEN = 0x20000000
+ MSG_FIN = 0x200
+ MSG_MORE = 0x8000
+ MSG_NOSIGNAL = 0x4000
+ MSG_OOB = 0x1
+ MSG_PEEK = 0x2
+ MSG_PROXY = 0x10
+ MSG_RST = 0x1000
+ MSG_SYN = 0x400
+ MSG_TRUNC = 0x20
+ MSG_TRYHARD = 0x4
+ MSG_WAITALL = 0x100
+ MSG_WAITFORONE = 0x10000
+ MSG_ZEROCOPY = 0x4000000
+ MS_ACTIVE = 0x40000000
+ MS_ASYNC = 0x1
+ MS_BIND = 0x1000
+ MS_BORN = 0x20000000
+ MS_DIRSYNC = 0x80
+ MS_INVALIDATE = 0x2
+ MS_I_VERSION = 0x800000
+ MS_KERNMOUNT = 0x400000
+ MS_LAZYTIME = 0x2000000
+ MS_MANDLOCK = 0x40
+ MS_MGC_MSK = 0xffff0000
+ MS_MGC_VAL = 0xc0ed0000
+ MS_MOVE = 0x2000
+ MS_NOATIME = 0x400
+ MS_NODEV = 0x4
+ MS_NODIRATIME = 0x800
+ MS_NOEXEC = 0x8
+ MS_NOREMOTELOCK = 0x8000000
+ MS_NOSEC = 0x10000000
+ MS_NOSUID = 0x2
+ MS_NOUSER = -0x80000000
+ MS_POSIXACL = 0x10000
+ MS_PRIVATE = 0x40000
+ MS_RDONLY = 0x1
+ MS_REC = 0x4000
+ MS_RELATIME = 0x200000
+ MS_REMOUNT = 0x20
+ MS_RMT_MASK = 0x2800051
+ MS_SHARED = 0x100000
+ MS_SILENT = 0x8000
+ MS_SLAVE = 0x80000
+ MS_STRICTATIME = 0x1000000
+ MS_SUBMOUNT = 0x4000000
+ MS_SYNC = 0x4
+ MS_SYNCHRONOUS = 0x10
+ MS_UNBINDABLE = 0x20000
+ MS_VERBOSE = 0x8000
+ MTD_INODE_FS_MAGIC = 0x11307854
+ NAME_MAX = 0xff
+ NCP_SUPER_MAGIC = 0x564c
+ NETLINK_ADD_MEMBERSHIP = 0x1
+ NETLINK_AUDIT = 0x9
+ NETLINK_BROADCAST_ERROR = 0x4
+ NETLINK_CAP_ACK = 0xa
+ NETLINK_CONNECTOR = 0xb
+ NETLINK_CRYPTO = 0x15
+ NETLINK_DNRTMSG = 0xe
+ NETLINK_DROP_MEMBERSHIP = 0x2
+ NETLINK_ECRYPTFS = 0x13
+ NETLINK_EXT_ACK = 0xb
+ NETLINK_FIB_LOOKUP = 0xa
+ NETLINK_FIREWALL = 0x3
+ NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
+ NETLINK_INET_DIAG = 0x4
+ NETLINK_IP6_FW = 0xd
+ NETLINK_ISCSI = 0x8
+ NETLINK_KOBJECT_UEVENT = 0xf
+ NETLINK_LISTEN_ALL_NSID = 0x8
+ NETLINK_LIST_MEMBERSHIPS = 0x9
+ NETLINK_NETFILTER = 0xc
+ NETLINK_NFLOG = 0x5
+ NETLINK_NO_ENOBUFS = 0x5
+ NETLINK_PKTINFO = 0x3
+ NETLINK_RDMA = 0x14
+ NETLINK_ROUTE = 0x0
+ NETLINK_RX_RING = 0x6
+ NETLINK_SCSITRANSPORT = 0x12
+ NETLINK_SELINUX = 0x7
+ NETLINK_SMC = 0x16
+ NETLINK_SOCK_DIAG = 0x4
+ NETLINK_TX_RING = 0x7
+ NETLINK_UNUSED = 0x1
+ NETLINK_USERSOCK = 0x2
+ NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
+ NFNETLINK_V0 = 0x0
+ NFNLGRP_ACCT_QUOTA = 0x8
+ NFNLGRP_CONNTRACK_DESTROY = 0x3
+ NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6
+ NFNLGRP_CONNTRACK_EXP_NEW = 0x4
+ NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5
+ NFNLGRP_CONNTRACK_NEW = 0x1
+ NFNLGRP_CONNTRACK_UPDATE = 0x2
+ NFNLGRP_MAX = 0x9
+ NFNLGRP_NFTABLES = 0x7
+ NFNLGRP_NFTRACE = 0x9
+ NFNLGRP_NONE = 0x0
+ NFNL_BATCH_MAX = 0x1
+ NFNL_MSG_BATCH_BEGIN = 0x10
+ NFNL_MSG_BATCH_END = 0x11
+ NFNL_NFA_NEST = 0x8000
+ NFNL_SUBSYS_ACCT = 0x7
+ NFNL_SUBSYS_COUNT = 0xc
+ NFNL_SUBSYS_CTHELPER = 0x9
+ NFNL_SUBSYS_CTNETLINK = 0x1
+ NFNL_SUBSYS_CTNETLINK_EXP = 0x2
+ NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8
+ NFNL_SUBSYS_IPSET = 0x6
+ NFNL_SUBSYS_NFTABLES = 0xa
+ NFNL_SUBSYS_NFT_COMPAT = 0xb
+ NFNL_SUBSYS_NONE = 0x0
+ NFNL_SUBSYS_OSF = 0x5
+ NFNL_SUBSYS_QUEUE = 0x3
+ NFNL_SUBSYS_ULOG = 0x4
+ NFS_SUPER_MAGIC = 0x6969
+ NILFS_SUPER_MAGIC = 0x3434
+ NL0 = 0x0
+ NL1 = 0x100
+ NLA_ALIGNTO = 0x4
+ NLA_F_NESTED = 0x8000
+ NLA_F_NET_BYTEORDER = 0x4000
+ NLA_HDRLEN = 0x4
+ NLDLY = 0x100
+ NLMSG_ALIGNTO = 0x4
+ NLMSG_DONE = 0x3
+ NLMSG_ERROR = 0x2
+ NLMSG_HDRLEN = 0x10
+ NLMSG_MIN_TYPE = 0x10
+ NLMSG_NOOP = 0x1
+ NLMSG_OVERRUN = 0x4
+ NLM_F_ACK = 0x4
+ NLM_F_ACK_TLVS = 0x200
+ NLM_F_APPEND = 0x800
+ NLM_F_ATOMIC = 0x400
+ NLM_F_CAPPED = 0x100
+ NLM_F_CREATE = 0x400
+ NLM_F_DUMP = 0x300
+ NLM_F_DUMP_FILTERED = 0x20
+ NLM_F_DUMP_INTR = 0x10
+ NLM_F_ECHO = 0x8
+ NLM_F_EXCL = 0x200
+ NLM_F_MATCH = 0x200
+ NLM_F_MULTI = 0x2
+ NLM_F_NONREC = 0x100
+ NLM_F_REPLACE = 0x100
+ NLM_F_REQUEST = 0x1
+ NLM_F_ROOT = 0x100
+ NOFLSH = 0x80
+ NSFS_MAGIC = 0x6e736673
+ OCFS2_SUPER_MAGIC = 0x7461636f
+ OCRNL = 0x8
+ OFDEL = 0x80
+ OFILL = 0x40
+ OLCUC = 0x2
+ ONLCR = 0x4
+ ONLRET = 0x20
+ ONOCR = 0x10
+ OPENPROM_SUPER_MAGIC = 0x9fa1
+ OPOST = 0x1
+ OVERLAYFS_SUPER_MAGIC = 0x794c7630
+ O_ACCMODE = 0x3
+ O_APPEND = 0x400
+ O_ASYNC = 0x2000
+ O_CLOEXEC = 0x80000
+ O_CREAT = 0x40
+ O_DIRECT = 0x4000
+ O_DIRECTORY = 0x10000
+ O_DSYNC = 0x1000
+ O_EXCL = 0x80
+ O_FSYNC = 0x101000
+ O_LARGEFILE = 0x0
+ O_NDELAY = 0x800
+ O_NOATIME = 0x40000
+ O_NOCTTY = 0x100
+ O_NOFOLLOW = 0x20000
+ O_NONBLOCK = 0x800
+ O_PATH = 0x200000
+ O_RDONLY = 0x0
+ O_RDWR = 0x2
+ O_RSYNC = 0x101000
+ O_SYNC = 0x101000
+ O_TMPFILE = 0x410000
+ O_TRUNC = 0x200
+ O_WRONLY = 0x1
+ PACKET_ADD_MEMBERSHIP = 0x1
+ PACKET_AUXDATA = 0x8
+ PACKET_BROADCAST = 0x1
+ PACKET_COPY_THRESH = 0x7
+ PACKET_DROP_MEMBERSHIP = 0x2
+ PACKET_FANOUT = 0x12
+ PACKET_FANOUT_CBPF = 0x6
+ PACKET_FANOUT_CPU = 0x2
+ PACKET_FANOUT_DATA = 0x16
+ PACKET_FANOUT_EBPF = 0x7
+ PACKET_FANOUT_FLAG_DEFRAG = 0x8000
+ PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
+ PACKET_FANOUT_FLAG_UNIQUEID = 0x2000
+ PACKET_FANOUT_HASH = 0x0
+ PACKET_FANOUT_LB = 0x1
+ PACKET_FANOUT_QM = 0x5
+ PACKET_FANOUT_RND = 0x4
+ PACKET_FANOUT_ROLLOVER = 0x3
+ PACKET_FASTROUTE = 0x6
+ PACKET_HDRLEN = 0xb
+ PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
+ PACKET_KERNEL = 0x7
+ PACKET_LOOPBACK = 0x5
+ PACKET_LOSS = 0xe
+ PACKET_MR_ALLMULTI = 0x2
+ PACKET_MR_MULTICAST = 0x0
+ PACKET_MR_PROMISC = 0x1
+ PACKET_MR_UNICAST = 0x3
+ PACKET_MULTICAST = 0x2
+ PACKET_ORIGDEV = 0x9
+ PACKET_OTHERHOST = 0x3
+ PACKET_OUTGOING = 0x4
+ PACKET_QDISC_BYPASS = 0x14
+ PACKET_RECV_OUTPUT = 0x3
+ PACKET_RESERVE = 0xc
+ PACKET_ROLLOVER_STATS = 0x15
+ PACKET_RX_RING = 0x5
+ PACKET_STATISTICS = 0x6
+ PACKET_TIMESTAMP = 0x11
+ PACKET_TX_HAS_OFF = 0x13
+ PACKET_TX_RING = 0xd
+ PACKET_TX_TIMESTAMP = 0x10
+ PACKET_USER = 0x6
+ PACKET_VERSION = 0xa
+ PACKET_VNET_HDR = 0xf
+ PARENB = 0x100
+ PARITY_CRC16_PR0 = 0x2
+ PARITY_CRC16_PR0_CCITT = 0x4
+ PARITY_CRC16_PR1 = 0x3
+ PARITY_CRC16_PR1_CCITT = 0x5
+ PARITY_CRC32_PR0_CCITT = 0x6
+ PARITY_CRC32_PR1_CCITT = 0x7
+ PARITY_DEFAULT = 0x0
+ PARITY_NONE = 0x1
+ PARMRK = 0x8
+ PARODD = 0x200
+ PENDIN = 0x4000
+ PERF_EVENT_IOC_DISABLE = 0x2401
+ PERF_EVENT_IOC_ENABLE = 0x2400
+ PERF_EVENT_IOC_ID = 0x80082407
+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b
+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409
+ PERF_EVENT_IOC_PERIOD = 0x40082404
+ PERF_EVENT_IOC_QUERY_BPF = 0xc008240a
+ PERF_EVENT_IOC_REFRESH = 0x2402
+ PERF_EVENT_IOC_RESET = 0x2403
+ PERF_EVENT_IOC_SET_BPF = 0x40042408
+ PERF_EVENT_IOC_SET_FILTER = 0x40082406
+ PERF_EVENT_IOC_SET_OUTPUT = 0x2405
+ PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x4004743d
+ PPPIOCATTCHAN = 0x40047438
+ PPPIOCCONNECT = 0x4004743a
+ PPPIOCDETACH = 0x4004743c
+ PPPIOCDISCONN = 0x7439
+ PPPIOCGASYNCMAP = 0x80047458
+ PPPIOCGCHAN = 0x80047437
+ PPPIOCGDEBUG = 0x80047441
+ PPPIOCGFLAGS = 0x8004745a
+ PPPIOCGIDLE = 0x8010743f
+ PPPIOCGL2TPSTATS = 0x80487436
+ PPPIOCGMRU = 0x80047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x80047455
+ PPPIOCGUNIT = 0x80047456
+ PPPIOCGXASYNCMAP = 0x80207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x40107446
+ PPPIOCSASYNCMAP = 0x40047457
+ PPPIOCSCOMPRESS = 0x4010744d
+ PPPIOCSDEBUG = 0x40047440
+ PPPIOCSFLAGS = 0x40047459
+ PPPIOCSMAXCID = 0x40047451
+ PPPIOCSMRRU = 0x4004743b
+ PPPIOCSMRU = 0x40047452
+ PPPIOCSNPMODE = 0x4008744b
+ PPPIOCSPASS = 0x40107447
+ PPPIOCSRASYNCMAP = 0x40047454
+ PPPIOCSXASYNCMAP = 0x4020744f
+ PPPIOCXFERUNIT = 0x744e
+ PRIO_PGRP = 0x1
+ PRIO_PROCESS = 0x0
+ PRIO_USER = 0x2
+ PROC_SUPER_MAGIC = 0x9fa0
+ PROT_EXEC = 0x4
+ PROT_GROWSDOWN = 0x1000000
+ PROT_GROWSUP = 0x2000000
+ PROT_NONE = 0x0
+ PROT_READ = 0x1
+ PROT_WRITE = 0x2
+ PR_CAPBSET_DROP = 0x18
+ PR_CAPBSET_READ = 0x17
+ PR_CAP_AMBIENT = 0x2f
+ PR_CAP_AMBIENT_CLEAR_ALL = 0x4
+ PR_CAP_AMBIENT_IS_SET = 0x1
+ PR_CAP_AMBIENT_LOWER = 0x3
+ PR_CAP_AMBIENT_RAISE = 0x2
+ PR_ENDIAN_BIG = 0x0
+ PR_ENDIAN_LITTLE = 0x1
+ PR_ENDIAN_PPC_LITTLE = 0x2
+ PR_FPEMU_NOPRINT = 0x1
+ PR_FPEMU_SIGFPE = 0x2
+ PR_FP_EXC_ASYNC = 0x2
+ PR_FP_EXC_DISABLED = 0x0
+ PR_FP_EXC_DIV = 0x10000
+ PR_FP_EXC_INV = 0x100000
+ PR_FP_EXC_NONRECOV = 0x1
+ PR_FP_EXC_OVF = 0x20000
+ PR_FP_EXC_PRECISE = 0x3
+ PR_FP_EXC_RES = 0x80000
+ PR_FP_EXC_SW_ENABLE = 0x80
+ PR_FP_EXC_UND = 0x40000
+ PR_FP_MODE_FR = 0x1
+ PR_FP_MODE_FRE = 0x2
+ PR_GET_CHILD_SUBREAPER = 0x25
+ PR_GET_DUMPABLE = 0x3
+ PR_GET_ENDIAN = 0x13
+ PR_GET_FPEMU = 0x9
+ PR_GET_FPEXC = 0xb
+ PR_GET_FP_MODE = 0x2e
+ PR_GET_KEEPCAPS = 0x7
+ PR_GET_NAME = 0x10
+ PR_GET_NO_NEW_PRIVS = 0x27
+ PR_GET_PDEATHSIG = 0x2
+ PR_GET_SECCOMP = 0x15
+ PR_GET_SECUREBITS = 0x1b
+ PR_GET_SPECULATION_CTRL = 0x34
+ PR_GET_THP_DISABLE = 0x2a
+ PR_GET_TID_ADDRESS = 0x28
+ PR_GET_TIMERSLACK = 0x1e
+ PR_GET_TIMING = 0xd
+ PR_GET_TSC = 0x19
+ PR_GET_UNALIGN = 0x5
+ PR_MCE_KILL = 0x21
+ PR_MCE_KILL_CLEAR = 0x0
+ PR_MCE_KILL_DEFAULT = 0x2
+ PR_MCE_KILL_EARLY = 0x1
+ PR_MCE_KILL_GET = 0x22
+ PR_MCE_KILL_LATE = 0x0
+ PR_MCE_KILL_SET = 0x1
+ PR_MPX_DISABLE_MANAGEMENT = 0x2c
+ PR_MPX_ENABLE_MANAGEMENT = 0x2b
+ PR_SET_CHILD_SUBREAPER = 0x24
+ PR_SET_DUMPABLE = 0x4
+ PR_SET_ENDIAN = 0x14
+ PR_SET_FPEMU = 0xa
+ PR_SET_FPEXC = 0xc
+ PR_SET_FP_MODE = 0x2d
+ PR_SET_KEEPCAPS = 0x8
+ PR_SET_MM = 0x23
+ PR_SET_MM_ARG_END = 0x9
+ PR_SET_MM_ARG_START = 0x8
+ PR_SET_MM_AUXV = 0xc
+ PR_SET_MM_BRK = 0x7
+ PR_SET_MM_END_CODE = 0x2
+ PR_SET_MM_END_DATA = 0x4
+ PR_SET_MM_ENV_END = 0xb
+ PR_SET_MM_ENV_START = 0xa
+ PR_SET_MM_EXE_FILE = 0xd
+ PR_SET_MM_MAP = 0xe
+ PR_SET_MM_MAP_SIZE = 0xf
+ PR_SET_MM_START_BRK = 0x6
+ PR_SET_MM_START_CODE = 0x1
+ PR_SET_MM_START_DATA = 0x3
+ PR_SET_MM_START_STACK = 0x5
+ PR_SET_NAME = 0xf
+ PR_SET_NO_NEW_PRIVS = 0x26
+ PR_SET_PDEATHSIG = 0x1
+ PR_SET_PTRACER = 0x59616d61
+ PR_SET_PTRACER_ANY = 0xffffffffffffffff
+ PR_SET_SECCOMP = 0x16
+ PR_SET_SECUREBITS = 0x1c
+ PR_SET_SPECULATION_CTRL = 0x35
+ PR_SET_THP_DISABLE = 0x29
+ PR_SET_TIMERSLACK = 0x1d
+ PR_SET_TIMING = 0xe
+ PR_SET_TSC = 0x1a
+ PR_SET_UNALIGN = 0x6
+ PR_SPEC_DISABLE = 0x4
+ PR_SPEC_ENABLE = 0x2
+ PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
+ PR_SPEC_NOT_AFFECTED = 0x0
+ PR_SPEC_PRCTL = 0x1
+ PR_SPEC_STORE_BYPASS = 0x0
+ PR_SVE_GET_VL = 0x33
+ PR_SVE_SET_VL = 0x32
+ PR_SVE_SET_VL_ONEXEC = 0x40000
+ PR_SVE_VL_INHERIT = 0x20000
+ PR_SVE_VL_LEN_MASK = 0xffff
+ PR_TASK_PERF_EVENTS_DISABLE = 0x1f
+ PR_TASK_PERF_EVENTS_ENABLE = 0x20
+ PR_TIMING_STATISTICAL = 0x0
+ PR_TIMING_TIMESTAMP = 0x1
+ PR_TSC_ENABLE = 0x1
+ PR_TSC_SIGSEGV = 0x2
+ PR_UNALIGN_NOPRINT = 0x1
+ PR_UNALIGN_SIGBUS = 0x2
+ PSTOREFS_MAGIC = 0x6165676c
+ PTRACE_ATTACH = 0x10
+ PTRACE_CONT = 0x7
+ PTRACE_DETACH = 0x11
+ PTRACE_EVENT_CLONE = 0x3
+ PTRACE_EVENT_EXEC = 0x4
+ PTRACE_EVENT_EXIT = 0x6
+ PTRACE_EVENT_FORK = 0x1
+ PTRACE_EVENT_SECCOMP = 0x7
+ PTRACE_EVENT_STOP = 0x80
+ PTRACE_EVENT_VFORK = 0x2
+ PTRACE_EVENT_VFORK_DONE = 0x5
+ PTRACE_GETEVENTMSG = 0x4201
+ PTRACE_GETREGS = 0xc
+ PTRACE_GETREGSET = 0x4204
+ PTRACE_GETSIGINFO = 0x4202
+ PTRACE_GETSIGMASK = 0x420a
+ PTRACE_INTERRUPT = 0x4207
+ PTRACE_KILL = 0x8
+ PTRACE_LISTEN = 0x4208
+ PTRACE_O_EXITKILL = 0x100000
+ PTRACE_O_MASK = 0x3000ff
+ PTRACE_O_SUSPEND_SECCOMP = 0x200000
+ PTRACE_O_TRACECLONE = 0x8
+ PTRACE_O_TRACEEXEC = 0x10
+ PTRACE_O_TRACEEXIT = 0x40
+ PTRACE_O_TRACEFORK = 0x2
+ PTRACE_O_TRACESECCOMP = 0x80
+ PTRACE_O_TRACESYSGOOD = 0x1
+ PTRACE_O_TRACEVFORK = 0x4
+ PTRACE_O_TRACEVFORKDONE = 0x20
+ PTRACE_PEEKDATA = 0x2
+ PTRACE_PEEKSIGINFO = 0x4209
+ PTRACE_PEEKSIGINFO_SHARED = 0x1
+ PTRACE_PEEKTEXT = 0x1
+ PTRACE_PEEKUSR = 0x3
+ PTRACE_POKEDATA = 0x5
+ PTRACE_POKETEXT = 0x4
+ PTRACE_POKEUSR = 0x6
+ PTRACE_SECCOMP_GET_FILTER = 0x420c
+ PTRACE_SECCOMP_GET_METADATA = 0x420d
+ PTRACE_SEIZE = 0x4206
+ PTRACE_SETOPTIONS = 0x4200
+ PTRACE_SETREGS = 0xd
+ PTRACE_SETREGSET = 0x4205
+ PTRACE_SETSIGINFO = 0x4203
+ PTRACE_SETSIGMASK = 0x420b
+ PTRACE_SINGLESTEP = 0x9
+ PTRACE_SYSCALL = 0x18
+ PTRACE_TRACEME = 0x0
+ QNX4_SUPER_MAGIC = 0x2f
+ QNX6_SUPER_MAGIC = 0x68191122
+ RAMFS_MAGIC = 0x858458f6
+ RDTGROUP_SUPER_MAGIC = 0x7655821
+ REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
+ RLIMIT_AS = 0x9
+ RLIMIT_CORE = 0x4
+ RLIMIT_CPU = 0x0
+ RLIMIT_DATA = 0x2
+ RLIMIT_FSIZE = 0x1
+ RLIMIT_LOCKS = 0xa
+ RLIMIT_MEMLOCK = 0x8
+ RLIMIT_MSGQUEUE = 0xc
+ RLIMIT_NICE = 0xd
+ RLIMIT_NOFILE = 0x7
+ RLIMIT_NPROC = 0x6
+ RLIMIT_RSS = 0x5
+ RLIMIT_RTPRIO = 0xe
+ RLIMIT_RTTIME = 0xf
+ RLIMIT_SIGPENDING = 0xb
+ RLIMIT_STACK = 0x3
+ RLIM_INFINITY = 0xffffffffffffffff
+ RTAX_ADVMSS = 0x8
+ RTAX_CC_ALGO = 0x10
+ RTAX_CWND = 0x7
+ RTAX_FASTOPEN_NO_COOKIE = 0x11
+ RTAX_FEATURES = 0xc
+ RTAX_FEATURE_ALLFRAG = 0x8
+ RTAX_FEATURE_ECN = 0x1
+ RTAX_FEATURE_MASK = 0xf
+ RTAX_FEATURE_SACK = 0x2
+ RTAX_FEATURE_TIMESTAMP = 0x4
+ RTAX_HOPLIMIT = 0xa
+ RTAX_INITCWND = 0xb
+ RTAX_INITRWND = 0xe
+ RTAX_LOCK = 0x1
+ RTAX_MAX = 0x11
+ RTAX_MTU = 0x2
+ RTAX_QUICKACK = 0xf
+ RTAX_REORDERING = 0x9
+ RTAX_RTO_MIN = 0xd
+ RTAX_RTT = 0x4
+ RTAX_RTTVAR = 0x5
+ RTAX_SSTHRESH = 0x6
+ RTAX_UNSPEC = 0x0
+ RTAX_WINDOW = 0x3
+ RTA_ALIGNTO = 0x4
+ RTA_MAX = 0x1d
+ RTCF_DIRECTSRC = 0x4000000
+ RTCF_DOREDIRECT = 0x1000000
+ RTCF_LOG = 0x2000000
+ RTCF_MASQ = 0x400000
+ RTCF_NAT = 0x800000
+ RTCF_VALVE = 0x200000
+ RTC_AF = 0x20
+ RTC_AIE_OFF = 0x7002
+ RTC_AIE_ON = 0x7001
+ RTC_ALM_READ = 0x80247008
+ RTC_ALM_SET = 0x40247007
+ RTC_EPOCH_READ = 0x8008700d
+ RTC_EPOCH_SET = 0x4008700e
+ RTC_IRQF = 0x80
+ RTC_IRQP_READ = 0x8008700b
+ RTC_IRQP_SET = 0x4008700c
+ RTC_MAX_FREQ = 0x2000
+ RTC_PF = 0x40
+ RTC_PIE_OFF = 0x7006
+ RTC_PIE_ON = 0x7005
+ RTC_PLL_GET = 0x80207011
+ RTC_PLL_SET = 0x40207012
+ RTC_RD_TIME = 0x80247009
+ RTC_SET_TIME = 0x4024700a
+ RTC_UF = 0x10
+ RTC_UIE_OFF = 0x7004
+ RTC_UIE_ON = 0x7003
+ RTC_VL_CLR = 0x7014
+ RTC_VL_READ = 0x80047013
+ RTC_WIE_OFF = 0x7010
+ RTC_WIE_ON = 0x700f
+ RTC_WKALM_RD = 0x80287010
+ RTC_WKALM_SET = 0x4028700f
+ RTF_ADDRCLASSMASK = 0xf8000000
+ RTF_ADDRCONF = 0x40000
+ RTF_ALLONLINK = 0x20000
+ RTF_BROADCAST = 0x10000000
+ RTF_CACHE = 0x1000000
+ RTF_DEFAULT = 0x10000
+ RTF_DYNAMIC = 0x10
+ RTF_FLOW = 0x2000000
+ RTF_GATEWAY = 0x2
+ RTF_HOST = 0x4
+ RTF_INTERFACE = 0x40000000
+ RTF_IRTT = 0x100
+ RTF_LINKRT = 0x100000
+ RTF_LOCAL = 0x80000000
+ RTF_MODIFIED = 0x20
+ RTF_MSS = 0x40
+ RTF_MTU = 0x40
+ RTF_MULTICAST = 0x20000000
+ RTF_NAT = 0x8000000
+ RTF_NOFORWARD = 0x1000
+ RTF_NONEXTHOP = 0x200000
+ RTF_NOPMTUDISC = 0x4000
+ RTF_POLICY = 0x4000000
+ RTF_REINSTATE = 0x8
+ RTF_REJECT = 0x200
+ RTF_STATIC = 0x400
+ RTF_THROW = 0x2000
+ RTF_UP = 0x1
+ RTF_WINDOW = 0x80
+ RTF_XRESOLVE = 0x800
+ RTM_BASE = 0x10
+ RTM_DELACTION = 0x31
+ RTM_DELADDR = 0x15
+ RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
+ RTM_DELLINK = 0x11
+ RTM_DELMDB = 0x55
+ RTM_DELNEIGH = 0x1d
+ RTM_DELNETCONF = 0x51
+ RTM_DELNSID = 0x59
+ RTM_DELQDISC = 0x25
+ RTM_DELROUTE = 0x19
+ RTM_DELRULE = 0x21
+ RTM_DELTCLASS = 0x29
+ RTM_DELTFILTER = 0x2d
+ RTM_F_CLONED = 0x200
+ RTM_F_EQUALIZE = 0x400
+ RTM_F_FIB_MATCH = 0x2000
+ RTM_F_LOOKUP_TABLE = 0x1000
+ RTM_F_NOTIFY = 0x100
+ RTM_F_PREFIX = 0x800
+ RTM_GETACTION = 0x32
+ RTM_GETADDR = 0x16
+ RTM_GETADDRLABEL = 0x4a
+ RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
+ RTM_GETDCB = 0x4e
+ RTM_GETLINK = 0x12
+ RTM_GETMDB = 0x56
+ RTM_GETMULTICAST = 0x3a
+ RTM_GETNEIGH = 0x1e
+ RTM_GETNEIGHTBL = 0x42
+ RTM_GETNETCONF = 0x52
+ RTM_GETNSID = 0x5a
+ RTM_GETQDISC = 0x26
+ RTM_GETROUTE = 0x1a
+ RTM_GETRULE = 0x22
+ RTM_GETSTATS = 0x5e
+ RTM_GETTCLASS = 0x2a
+ RTM_GETTFILTER = 0x2e
+ RTM_MAX = 0x67
+ RTM_NEWACTION = 0x30
+ RTM_NEWADDR = 0x14
+ RTM_NEWADDRLABEL = 0x48
+ RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
+ RTM_NEWLINK = 0x10
+ RTM_NEWMDB = 0x54
+ RTM_NEWNDUSEROPT = 0x44
+ RTM_NEWNEIGH = 0x1c
+ RTM_NEWNEIGHTBL = 0x40
+ RTM_NEWNETCONF = 0x50
+ RTM_NEWNSID = 0x58
+ RTM_NEWPREFIX = 0x34
+ RTM_NEWQDISC = 0x24
+ RTM_NEWROUTE = 0x18
+ RTM_NEWRULE = 0x20
+ RTM_NEWSTATS = 0x5c
+ RTM_NEWTCLASS = 0x28
+ RTM_NEWTFILTER = 0x2c
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
+ RTM_SETDCB = 0x4f
+ RTM_SETLINK = 0x13
+ RTM_SETNEIGHTBL = 0x43
+ RTNH_ALIGNTO = 0x4
+ RTNH_COMPARE_MASK = 0x19
+ RTNH_F_DEAD = 0x1
+ RTNH_F_LINKDOWN = 0x10
+ RTNH_F_OFFLOAD = 0x8
+ RTNH_F_ONLINK = 0x4
+ RTNH_F_PERVASIVE = 0x2
+ RTNH_F_UNRESOLVED = 0x20
+ RTN_MAX = 0xb
+ RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
+ RTPROT_BIRD = 0xc
+ RTPROT_BOOT = 0x3
+ RTPROT_DHCP = 0x10
+ RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
+ RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
+ RTPROT_KERNEL = 0x2
+ RTPROT_MROUTED = 0x11
+ RTPROT_MRT = 0xa
+ RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
+ RTPROT_RA = 0x9
+ RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
+ RTPROT_STATIC = 0x4
+ RTPROT_UNSPEC = 0x0
+ RTPROT_XORP = 0xe
+ RTPROT_ZEBRA = 0xb
+ RT_CLASS_DEFAULT = 0xfd
+ RT_CLASS_LOCAL = 0xff
+ RT_CLASS_MAIN = 0xfe
+ RT_CLASS_MAX = 0xff
+ RT_CLASS_UNSPEC = 0x0
+ RUSAGE_CHILDREN = -0x1
+ RUSAGE_SELF = 0x0
+ RUSAGE_THREAD = 0x1
+ SCM_CREDENTIALS = 0x2
+ SCM_RIGHTS = 0x1
+ SCM_TIMESTAMP = 0x1d
+ SCM_TIMESTAMPING = 0x25
+ SCM_TIMESTAMPING_OPT_STATS = 0x36
+ SCM_TIMESTAMPING_PKTINFO = 0x3a
+ SCM_TIMESTAMPNS = 0x23
+ SCM_TXTIME = 0x3d
+ SCM_WIFI_STATUS = 0x29
+ SC_LOG_FLUSH = 0x100000
+ SECCOMP_MODE_DISABLED = 0x0
+ SECCOMP_MODE_FILTER = 0x2
+ SECCOMP_MODE_STRICT = 0x1
+ SECURITYFS_MAGIC = 0x73636673
+ SELINUX_MAGIC = 0xf97cff8c
+ SHUT_RD = 0x0
+ SHUT_RDWR = 0x2
+ SHUT_WR = 0x1
+ SIOCADDDLCI = 0x8980
+ SIOCADDMULTI = 0x8931
+ SIOCADDRT = 0x890b
+ SIOCATMARK = 0x8905
+ SIOCBONDCHANGEACTIVE = 0x8995
+ SIOCBONDENSLAVE = 0x8990
+ SIOCBONDINFOQUERY = 0x8994
+ SIOCBONDRELEASE = 0x8991
+ SIOCBONDSETHWADDR = 0x8992
+ SIOCBONDSLAVEINFOQUERY = 0x8993
+ SIOCBRADDBR = 0x89a0
+ SIOCBRADDIF = 0x89a2
+ SIOCBRDELBR = 0x89a1
+ SIOCBRDELIF = 0x89a3
+ SIOCDARP = 0x8953
+ SIOCDELDLCI = 0x8981
+ SIOCDELMULTI = 0x8932
+ SIOCDELRT = 0x890c
+ SIOCDEVPRIVATE = 0x89f0
+ SIOCDIFADDR = 0x8936
+ SIOCDRARP = 0x8960
+ SIOCETHTOOL = 0x8946
+ SIOCGARP = 0x8954
+ SIOCGHWTSTAMP = 0x89b1
+ SIOCGIFADDR = 0x8915
+ SIOCGIFBR = 0x8940
+ SIOCGIFBRDADDR = 0x8919
+ SIOCGIFCONF = 0x8912
+ SIOCGIFCOUNT = 0x8938
+ SIOCGIFDSTADDR = 0x8917
+ SIOCGIFENCAP = 0x8925
+ SIOCGIFFLAGS = 0x8913
+ SIOCGIFHWADDR = 0x8927
+ SIOCGIFINDEX = 0x8933
+ SIOCGIFMAP = 0x8970
+ SIOCGIFMEM = 0x891f
+ SIOCGIFMETRIC = 0x891d
+ SIOCGIFMTU = 0x8921
+ SIOCGIFNAME = 0x8910
+ SIOCGIFNETMASK = 0x891b
+ SIOCGIFPFLAGS = 0x8935
+ SIOCGIFSLAVE = 0x8929
+ SIOCGIFTXQLEN = 0x8942
+ SIOCGIFVLAN = 0x8982
+ SIOCGMIIPHY = 0x8947
+ SIOCGMIIREG = 0x8948
+ SIOCGPGRP = 0x8904
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
+ SIOCGRARP = 0x8961
+ SIOCGSKNS = 0x894c
+ SIOCGSTAMP = 0x8906
+ SIOCGSTAMPNS = 0x8907
+ SIOCINQ = 0x541b
+ SIOCOUTQ = 0x5411
+ SIOCOUTQNSD = 0x894b
+ SIOCPROTOPRIVATE = 0x89e0
+ SIOCRTMSG = 0x890d
+ SIOCSARP = 0x8955
+ SIOCSHWTSTAMP = 0x89b0
+ SIOCSIFADDR = 0x8916
+ SIOCSIFBR = 0x8941
+ SIOCSIFBRDADDR = 0x891a
+ SIOCSIFDSTADDR = 0x8918
+ SIOCSIFENCAP = 0x8926
+ SIOCSIFFLAGS = 0x8914
+ SIOCSIFHWADDR = 0x8924
+ SIOCSIFHWBROADCAST = 0x8937
+ SIOCSIFLINK = 0x8911
+ SIOCSIFMAP = 0x8971
+ SIOCSIFMEM = 0x8920
+ SIOCSIFMETRIC = 0x891e
+ SIOCSIFMTU = 0x8922
+ SIOCSIFNAME = 0x8923
+ SIOCSIFNETMASK = 0x891c
+ SIOCSIFPFLAGS = 0x8934
+ SIOCSIFSLAVE = 0x8930
+ SIOCSIFTXQLEN = 0x8943
+ SIOCSIFVLAN = 0x8983
+ SIOCSMIIREG = 0x8949
+ SIOCSPGRP = 0x8902
+ SIOCSRARP = 0x8962
+ SIOCWANDEV = 0x894a
+ SMACK_MAGIC = 0x43415d53
+ SMART_AUTOSAVE = 0xd2
+ SMART_AUTO_OFFLINE = 0xdb
+ SMART_DISABLE = 0xd9
+ SMART_ENABLE = 0xd8
+ SMART_HCYL_PASS = 0xc2
+ SMART_IMMEDIATE_OFFLINE = 0xd4
+ SMART_LCYL_PASS = 0x4f
+ SMART_READ_LOG_SECTOR = 0xd5
+ SMART_READ_THRESHOLDS = 0xd1
+ SMART_READ_VALUES = 0xd0
+ SMART_SAVE = 0xd3
+ SMART_STATUS = 0xda
+ SMART_WRITE_LOG_SECTOR = 0xd6
+ SMART_WRITE_THRESHOLDS = 0xd7
+ SMB_SUPER_MAGIC = 0x517b
+ SOCKFS_MAGIC = 0x534f434b
+ SOCK_CLOEXEC = 0x80000
+ SOCK_DCCP = 0x6
+ SOCK_DGRAM = 0x2
+ SOCK_IOC_TYPE = 0x89
+ SOCK_NONBLOCK = 0x800
+ SOCK_PACKET = 0xa
+ SOCK_RAW = 0x3
+ SOCK_RDM = 0x4
+ SOCK_SEQPACKET = 0x5
+ SOCK_STREAM = 0x1
+ SOL_AAL = 0x109
+ SOL_ALG = 0x117
+ SOL_ATM = 0x108
+ SOL_CAIF = 0x116
+ SOL_CAN_BASE = 0x64
+ SOL_DCCP = 0x10d
+ SOL_DECNET = 0x105
+ SOL_ICMPV6 = 0x3a
+ SOL_IP = 0x0
+ SOL_IPV6 = 0x29
+ SOL_IRDA = 0x10a
+ SOL_IUCV = 0x115
+ SOL_KCM = 0x119
+ SOL_LLC = 0x10c
+ SOL_NETBEUI = 0x10b
+ SOL_NETLINK = 0x10e
+ SOL_NFC = 0x118
+ SOL_PACKET = 0x107
+ SOL_PNPIPE = 0x113
+ SOL_PPPOL2TP = 0x111
+ SOL_RAW = 0xff
+ SOL_RDS = 0x114
+ SOL_RXRPC = 0x110
+ SOL_SOCKET = 0x1
+ SOL_TCP = 0x6
+ SOL_TIPC = 0x10f
+ SOL_TLS = 0x11a
+ SOL_X25 = 0x106
+ SOL_XDP = 0x11b
+ SOMAXCONN = 0x80
+ SO_ACCEPTCONN = 0x1e
+ SO_ATTACH_BPF = 0x32
+ SO_ATTACH_FILTER = 0x1a
+ SO_ATTACH_REUSEPORT_CBPF = 0x33
+ SO_ATTACH_REUSEPORT_EBPF = 0x34
+ SO_BINDTODEVICE = 0x19
+ SO_BPF_EXTENSIONS = 0x30
+ SO_BROADCAST = 0x6
+ SO_BSDCOMPAT = 0xe
+ SO_BUSY_POLL = 0x2e
+ SO_CNX_ADVICE = 0x35
+ SO_COOKIE = 0x39
+ SO_DEBUG = 0x1
+ SO_DETACH_BPF = 0x1b
+ SO_DETACH_FILTER = 0x1b
+ SO_DOMAIN = 0x27
+ SO_DONTROUTE = 0x5
+ SO_ERROR = 0x4
+ SO_GET_FILTER = 0x1a
+ SO_INCOMING_CPU = 0x31
+ SO_INCOMING_NAPI_ID = 0x38
+ SO_KEEPALIVE = 0x9
+ SO_LINGER = 0xd
+ SO_LOCK_FILTER = 0x2c
+ SO_MARK = 0x24
+ SO_MAX_PACING_RATE = 0x2f
+ SO_MEMINFO = 0x37
+ SO_NOFCS = 0x2b
+ SO_NO_CHECK = 0xb
+ SO_OOBINLINE = 0xa
+ SO_PASSCRED = 0x10
+ SO_PASSSEC = 0x22
+ SO_PEEK_OFF = 0x2a
+ SO_PEERCRED = 0x11
+ SO_PEERGROUPS = 0x3b
+ SO_PEERNAME = 0x1c
+ SO_PEERSEC = 0x1f
+ SO_PRIORITY = 0xc
+ SO_PROTOCOL = 0x26
+ SO_RCVBUF = 0x8
+ SO_RCVBUFFORCE = 0x21
+ SO_RCVLOWAT = 0x12
+ SO_RCVTIMEO = 0x14
+ SO_REUSEADDR = 0x2
+ SO_REUSEPORT = 0xf
+ SO_RXQ_OVFL = 0x28
+ SO_SECURITY_AUTHENTICATION = 0x16
+ SO_SECURITY_ENCRYPTION_NETWORK = 0x18
+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17
+ SO_SELECT_ERR_QUEUE = 0x2d
+ SO_SNDBUF = 0x7
+ SO_SNDBUFFORCE = 0x20
+ SO_SNDLOWAT = 0x13
+ SO_SNDTIMEO = 0x15
+ SO_TIMESTAMP = 0x1d
+ SO_TIMESTAMPING = 0x25
+ SO_TIMESTAMPNS = 0x23
+ SO_TXTIME = 0x3d
+ SO_TYPE = 0x3
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
+ SO_WIFI_STATUS = 0x29
+ SO_ZEROCOPY = 0x3c
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
+ SQUASHFS_MAGIC = 0x73717368
+ STACK_END_MAGIC = 0x57ac6e9d
+ STATX_ALL = 0xfff
+ STATX_ATIME = 0x20
+ STATX_ATTR_APPEND = 0x20
+ STATX_ATTR_AUTOMOUNT = 0x1000
+ STATX_ATTR_COMPRESSED = 0x4
+ STATX_ATTR_ENCRYPTED = 0x800
+ STATX_ATTR_IMMUTABLE = 0x10
+ STATX_ATTR_NODUMP = 0x40
+ STATX_BASIC_STATS = 0x7ff
+ STATX_BLOCKS = 0x400
+ STATX_BTIME = 0x800
+ STATX_CTIME = 0x80
+ STATX_GID = 0x10
+ STATX_INO = 0x100
+ STATX_MODE = 0x2
+ STATX_MTIME = 0x40
+ STATX_NLINK = 0x4
+ STATX_SIZE = 0x200
+ STATX_TYPE = 0x1
+ STATX_UID = 0x8
+ STATX__RESERVED = 0x80000000
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
+ SYSFS_MAGIC = 0x62656572
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
+ TAB0 = 0x0
+ TAB1 = 0x800
+ TAB2 = 0x1000
+ TAB3 = 0x1800
+ TABDLY = 0x1800
+ TASKSTATS_CMD_ATTR_MAX = 0x4
+ TASKSTATS_CMD_MAX = 0x2
+ TASKSTATS_GENL_NAME = "TASKSTATS"
+ TASKSTATS_GENL_VERSION = 0x1
+ TASKSTATS_TYPE_MAX = 0x6
+ TASKSTATS_VERSION = 0x9
+ TCFLSH = 0x540b
+ TCGETA = 0x5405
+ TCGETS = 0x5401
+ TCGETS2 = 0x802c542a
+ TCGETX = 0x5432
+ TCIFLUSH = 0x0
+ TCIOFF = 0x2
+ TCIOFLUSH = 0x2
+ TCION = 0x3
+ TCOFLUSH = 0x1
+ TCOOFF = 0x0
+ TCOON = 0x1
+ TCP_CC_INFO = 0x1a
+ TCP_CONGESTION = 0xd
+ TCP_COOKIE_IN_ALWAYS = 0x1
+ TCP_COOKIE_MAX = 0x10
+ TCP_COOKIE_MIN = 0x8
+ TCP_COOKIE_OUT_NEVER = 0x2
+ TCP_COOKIE_PAIR_SIZE = 0x20
+ TCP_COOKIE_TRANSACTIONS = 0xf
+ TCP_CORK = 0x3
+ TCP_DEFER_ACCEPT = 0x9
+ TCP_FASTOPEN = 0x17
+ TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
+ TCP_INFO = 0xb
+ TCP_KEEPCNT = 0x6
+ TCP_KEEPIDLE = 0x4
+ TCP_KEEPINTVL = 0x5
+ TCP_LINGER2 = 0x8
+ TCP_MAXSEG = 0x2
+ TCP_MAXWIN = 0xffff
+ TCP_MAX_WINSHIFT = 0xe
+ TCP_MD5SIG = 0xe
+ TCP_MD5SIG_EXT = 0x20
+ TCP_MD5SIG_FLAG_PREFIX = 0x1
+ TCP_MD5SIG_MAXKEYLEN = 0x50
+ TCP_MSS = 0x200
+ TCP_MSS_DEFAULT = 0x218
+ TCP_MSS_DESIRED = 0x4c4
+ TCP_NODELAY = 0x1
+ TCP_NOTSENT_LOWAT = 0x19
+ TCP_QUEUE_SEQ = 0x15
+ TCP_QUICKACK = 0xc
+ TCP_REPAIR = 0x13
+ TCP_REPAIR_OPTIONS = 0x16
+ TCP_REPAIR_QUEUE = 0x14
+ TCP_REPAIR_WINDOW = 0x1d
+ TCP_SAVED_SYN = 0x1c
+ TCP_SAVE_SYN = 0x1b
+ TCP_SYNCNT = 0x7
+ TCP_S_DATA_IN = 0x4
+ TCP_S_DATA_OUT = 0x8
+ TCP_THIN_DUPACK = 0x11
+ TCP_THIN_LINEAR_TIMEOUTS = 0x10
+ TCP_TIMESTAMP = 0x18
+ TCP_ULP = 0x1f
+ TCP_USER_TIMEOUT = 0x12
+ TCP_WINDOW_CLAMP = 0xa
+ TCSAFLUSH = 0x2
+ TCSBRK = 0x5409
+ TCSBRKP = 0x5425
+ TCSETA = 0x5406
+ TCSETAF = 0x5408
+ TCSETAW = 0x5407
+ TCSETS = 0x5402
+ TCSETS2 = 0x402c542b
+ TCSETSF = 0x5404
+ TCSETSF2 = 0x402c542d
+ TCSETSW = 0x5403
+ TCSETSW2 = 0x402c542c
+ TCSETX = 0x5433
+ TCSETXF = 0x5434
+ TCSETXW = 0x5435
+ TCXONC = 0x540a
+ TIOCCBRK = 0x5428
+ TIOCCONS = 0x541d
+ TIOCEXCL = 0x540c
+ TIOCGDEV = 0x80045432
+ TIOCGETD = 0x5424
+ TIOCGEXCL = 0x80045440
+ TIOCGICOUNT = 0x545d
+ TIOCGISO7816 = 0x80285442
+ TIOCGLCKTRMIOS = 0x5456
+ TIOCGPGRP = 0x540f
+ TIOCGPKT = 0x80045438
+ TIOCGPTLCK = 0x80045439
+ TIOCGPTN = 0x80045430
+ TIOCGPTPEER = 0x5441
+ TIOCGRS485 = 0x542e
+ TIOCGSERIAL = 0x541e
+ TIOCGSID = 0x5429
+ TIOCGSOFTCAR = 0x5419
+ TIOCGWINSZ = 0x5413
+ TIOCINQ = 0x541b
+ TIOCLINUX = 0x541c
+ TIOCMBIC = 0x5417
+ TIOCMBIS = 0x5416
+ TIOCMGET = 0x5415
+ TIOCMIWAIT = 0x545c
+ TIOCMSET = 0x5418
+ TIOCM_CAR = 0x40
+ TIOCM_CD = 0x40
+ TIOCM_CTS = 0x20
+ TIOCM_DSR = 0x100
+ TIOCM_DTR = 0x2
+ TIOCM_LE = 0x1
+ TIOCM_RI = 0x80
+ TIOCM_RNG = 0x80
+ TIOCM_RTS = 0x4
+ TIOCM_SR = 0x10
+ TIOCM_ST = 0x8
+ TIOCNOTTY = 0x5422
+ TIOCNXCL = 0x540d
+ TIOCOUTQ = 0x5411
+ TIOCPKT = 0x5420
+ TIOCPKT_DATA = 0x0
+ TIOCPKT_DOSTOP = 0x20
+ TIOCPKT_FLUSHREAD = 0x1
+ TIOCPKT_FLUSHWRITE = 0x2
+ TIOCPKT_IOCTL = 0x40
+ TIOCPKT_NOSTOP = 0x10
+ TIOCPKT_START = 0x8
+ TIOCPKT_STOP = 0x4
+ TIOCSBRK = 0x5427
+ TIOCSCTTY = 0x540e
+ TIOCSERCONFIG = 0x5453
+ TIOCSERGETLSR = 0x5459
+ TIOCSERGETMULTI = 0x545a
+ TIOCSERGSTRUCT = 0x5458
+ TIOCSERGWILD = 0x5454
+ TIOCSERSETMULTI = 0x545b
+ TIOCSERSWILD = 0x5455
+ TIOCSER_TEMT = 0x1
+ TIOCSETD = 0x5423
+ TIOCSIG = 0x40045436
+ TIOCSISO7816 = 0xc0285443
+ TIOCSLCKTRMIOS = 0x5457
+ TIOCSPGRP = 0x5410
+ TIOCSPTLCK = 0x40045431
+ TIOCSRS485 = 0x542f
+ TIOCSSERIAL = 0x541f
+ TIOCSSOFTCAR = 0x541a
+ TIOCSTI = 0x5412
+ TIOCSWINSZ = 0x5414
+ TIOCVHANGUP = 0x5437
+ TMPFS_MAGIC = 0x1021994
+ TOSTOP = 0x100
+ TPACKET_ALIGNMENT = 0x10
+ TPACKET_HDRLEN = 0x34
+ TP_STATUS_AVAILABLE = 0x0
+ TP_STATUS_BLK_TMO = 0x20
+ TP_STATUS_COPY = 0x2
+ TP_STATUS_CSUMNOTREADY = 0x8
+ TP_STATUS_CSUM_VALID = 0x80
+ TP_STATUS_KERNEL = 0x0
+ TP_STATUS_LOSING = 0x4
+ TP_STATUS_SENDING = 0x2
+ TP_STATUS_SEND_REQUEST = 0x1
+ TP_STATUS_TS_RAW_HARDWARE = -0x80000000
+ TP_STATUS_TS_SOFTWARE = 0x20000000
+ TP_STATUS_TS_SYS_HARDWARE = 0x40000000
+ TP_STATUS_USER = 0x1
+ TP_STATUS_VLAN_TPID_VALID = 0x40
+ TP_STATUS_VLAN_VALID = 0x10
+ TP_STATUS_WRONG_FORMAT = 0x4
+ TRACEFS_MAGIC = 0x74726163
+ TS_COMM_LEN = 0x20
+ TUNATTACHFILTER = 0x401054d5
+ TUNDETACHFILTER = 0x401054d6
+ TUNGETFEATURES = 0x800454cf
+ TUNGETFILTER = 0x801054db
+ TUNGETIFF = 0x800454d2
+ TUNGETSNDBUF = 0x800454d3
+ TUNGETVNETBE = 0x800454df
+ TUNGETVNETHDRSZ = 0x800454d7
+ TUNGETVNETLE = 0x800454dd
+ TUNSETDEBUG = 0x400454c9
+ TUNSETFILTEREBPF = 0x800454e1
+ TUNSETGROUP = 0x400454ce
+ TUNSETIFF = 0x400454ca
+ TUNSETIFINDEX = 0x400454da
+ TUNSETLINK = 0x400454cd
+ TUNSETNOCSUM = 0x400454c8
+ TUNSETOFFLOAD = 0x400454d0
+ TUNSETOWNER = 0x400454cc
+ TUNSETPERSIST = 0x400454cb
+ TUNSETQUEUE = 0x400454d9
+ TUNSETSNDBUF = 0x400454d4
+ TUNSETSTEERINGEBPF = 0x800454e0
+ TUNSETTXFILTER = 0x400454d1
+ TUNSETVNETBE = 0x400454de
+ TUNSETVNETHDRSZ = 0x400454d8
+ TUNSETVNETLE = 0x400454dc
+ UBI_IOCATT = 0x40186f40
+ UBI_IOCDET = 0x40046f41
+ UBI_IOCEBCH = 0x40044f02
+ UBI_IOCEBER = 0x40044f01
+ UBI_IOCEBISMAP = 0x80044f05
+ UBI_IOCEBMAP = 0x40084f03
+ UBI_IOCEBUNMAP = 0x40044f04
+ UBI_IOCMKVOL = 0x40986f00
+ UBI_IOCRMVOL = 0x40046f01
+ UBI_IOCRNVOL = 0x51106f03
+ UBI_IOCRSVOL = 0x400c6f02
+ UBI_IOCSETVOLPROP = 0x40104f06
+ UBI_IOCVOLCRBLK = 0x40804f07
+ UBI_IOCVOLRMBLK = 0x4f08
+ UBI_IOCVOLUP = 0x40084f00
+ UDF_SUPER_MAGIC = 0x15013346
+ UMOUNT_NOFOLLOW = 0x8
+ USBDEVICE_SUPER_MAGIC = 0x9fa2
+ UTIME_NOW = 0x3fffffff
+ UTIME_OMIT = 0x3ffffffe
+ V9FS_MAGIC = 0x1021997
+ VDISCARD = 0xd
+ VEOF = 0x4
+ VEOL = 0xb
+ VEOL2 = 0x10
+ VERASE = 0x2
+ VINTR = 0x0
+ VKILL = 0x3
+ VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
+ VMIN = 0x6
+ VM_SOCKETS_INVALID_VERSION = 0xffffffff
+ VQUIT = 0x1
+ VREPRINT = 0xc
+ VSTART = 0x8
+ VSTOP = 0x9
+ VSUSP = 0xa
+ VSWTC = 0x7
+ VT0 = 0x0
+ VT1 = 0x4000
+ VTDLY = 0x4000
+ VTIME = 0x5
+ VWERASE = 0xe
+ WALL = 0x40000000
+ WCLONE = 0x80000000
+ WCONTINUED = 0x8
+ WDIOC_GETBOOTSTATUS = 0x80045702
+ WDIOC_GETPRETIMEOUT = 0x80045709
+ WDIOC_GETSTATUS = 0x80045701
+ WDIOC_GETSUPPORT = 0x80285700
+ WDIOC_GETTEMP = 0x80045703
+ WDIOC_GETTIMELEFT = 0x8004570a
+ WDIOC_GETTIMEOUT = 0x80045707
+ WDIOC_KEEPALIVE = 0x80045705
+ WDIOC_SETOPTIONS = 0x80045704
+ WDIOC_SETPRETIMEOUT = 0xc0045708
+ WDIOC_SETTIMEOUT = 0xc0045706
+ WEXITED = 0x4
+ WIN_ACKMEDIACHANGE = 0xdb
+ WIN_CHECKPOWERMODE1 = 0xe5
+ WIN_CHECKPOWERMODE2 = 0x98
+ WIN_DEVICE_RESET = 0x8
+ WIN_DIAGNOSE = 0x90
+ WIN_DOORLOCK = 0xde
+ WIN_DOORUNLOCK = 0xdf
+ WIN_DOWNLOAD_MICROCODE = 0x92
+ WIN_FLUSH_CACHE = 0xe7
+ WIN_FLUSH_CACHE_EXT = 0xea
+ WIN_FORMAT = 0x50
+ WIN_GETMEDIASTATUS = 0xda
+ WIN_IDENTIFY = 0xec
+ WIN_IDENTIFY_DMA = 0xee
+ WIN_IDLEIMMEDIATE = 0xe1
+ WIN_INIT = 0x60
+ WIN_MEDIAEJECT = 0xed
+ WIN_MULTREAD = 0xc4
+ WIN_MULTREAD_EXT = 0x29
+ WIN_MULTWRITE = 0xc5
+ WIN_MULTWRITE_EXT = 0x39
+ WIN_NOP = 0x0
+ WIN_PACKETCMD = 0xa0
+ WIN_PIDENTIFY = 0xa1
+ WIN_POSTBOOT = 0xdc
+ WIN_PREBOOT = 0xdd
+ WIN_QUEUED_SERVICE = 0xa2
+ WIN_READ = 0x20
+ WIN_READDMA = 0xc8
+ WIN_READDMA_EXT = 0x25
+ WIN_READDMA_ONCE = 0xc9
+ WIN_READDMA_QUEUED = 0xc7
+ WIN_READDMA_QUEUED_EXT = 0x26
+ WIN_READ_BUFFER = 0xe4
+ WIN_READ_EXT = 0x24
+ WIN_READ_LONG = 0x22
+ WIN_READ_LONG_ONCE = 0x23
+ WIN_READ_NATIVE_MAX = 0xf8
+ WIN_READ_NATIVE_MAX_EXT = 0x27
+ WIN_READ_ONCE = 0x21
+ WIN_RECAL = 0x10
+ WIN_RESTORE = 0x10
+ WIN_SECURITY_DISABLE = 0xf6
+ WIN_SECURITY_ERASE_PREPARE = 0xf3
+ WIN_SECURITY_ERASE_UNIT = 0xf4
+ WIN_SECURITY_FREEZE_LOCK = 0xf5
+ WIN_SECURITY_SET_PASS = 0xf1
+ WIN_SECURITY_UNLOCK = 0xf2
+ WIN_SEEK = 0x70
+ WIN_SETFEATURES = 0xef
+ WIN_SETIDLE1 = 0xe3
+ WIN_SETIDLE2 = 0x97
+ WIN_SETMULT = 0xc6
+ WIN_SET_MAX = 0xf9
+ WIN_SET_MAX_EXT = 0x37
+ WIN_SLEEPNOW1 = 0xe6
+ WIN_SLEEPNOW2 = 0x99
+ WIN_SMART = 0xb0
+ WIN_SPECIFY = 0x91
+ WIN_SRST = 0x8
+ WIN_STANDBY = 0xe2
+ WIN_STANDBY2 = 0x96
+ WIN_STANDBYNOW1 = 0xe0
+ WIN_STANDBYNOW2 = 0x94
+ WIN_VERIFY = 0x40
+ WIN_VERIFY_EXT = 0x42
+ WIN_VERIFY_ONCE = 0x41
+ WIN_WRITE = 0x30
+ WIN_WRITEDMA = 0xca
+ WIN_WRITEDMA_EXT = 0x35
+ WIN_WRITEDMA_ONCE = 0xcb
+ WIN_WRITEDMA_QUEUED = 0xcc
+ WIN_WRITEDMA_QUEUED_EXT = 0x36
+ WIN_WRITE_BUFFER = 0xe8
+ WIN_WRITE_EXT = 0x34
+ WIN_WRITE_LONG = 0x32
+ WIN_WRITE_LONG_ONCE = 0x33
+ WIN_WRITE_ONCE = 0x31
+ WIN_WRITE_SAME = 0xe9
+ WIN_WRITE_VERIFY = 0x3c
+ WNOHANG = 0x1
+ WNOTHREAD = 0x20000000
+ WNOWAIT = 0x1000000
+ WORDSIZE = 0x40
+ WSTOPPED = 0x2
+ WUNTRACED = 0x2
+ XATTR_CREATE = 0x1
+ XATTR_REPLACE = 0x2
+ XCASE = 0x4
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
+ XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
+ XTABS = 0x1800
+ ZSMALLOC_MAGIC = 0x58295829
+)
+
+// Errors
+const (
+ E2BIG = syscall.Errno(0x7)
+ EACCES = syscall.Errno(0xd)
+ EADDRINUSE = syscall.Errno(0x62)
+ EADDRNOTAVAIL = syscall.Errno(0x63)
+ EADV = syscall.Errno(0x44)
+ EAFNOSUPPORT = syscall.Errno(0x61)
+ EAGAIN = syscall.Errno(0xb)
+ EALREADY = syscall.Errno(0x72)
+ EBADE = syscall.Errno(0x34)
+ EBADF = syscall.Errno(0x9)
+ EBADFD = syscall.Errno(0x4d)
+ EBADMSG = syscall.Errno(0x4a)
+ EBADR = syscall.Errno(0x35)
+ EBADRQC = syscall.Errno(0x38)
+ EBADSLT = syscall.Errno(0x39)
+ EBFONT = syscall.Errno(0x3b)
+ EBUSY = syscall.Errno(0x10)
+ ECANCELED = syscall.Errno(0x7d)
+ ECHILD = syscall.Errno(0xa)
+ ECHRNG = syscall.Errno(0x2c)
+ ECOMM = syscall.Errno(0x46)
+ ECONNABORTED = syscall.Errno(0x67)
+ ECONNREFUSED = syscall.Errno(0x6f)
+ ECONNRESET = syscall.Errno(0x68)
+ EDEADLK = syscall.Errno(0x23)
+ EDEADLOCK = syscall.Errno(0x23)
+ EDESTADDRREQ = syscall.Errno(0x59)
+ EDOM = syscall.Errno(0x21)
+ EDOTDOT = syscall.Errno(0x49)
+ EDQUOT = syscall.Errno(0x7a)
+ EEXIST = syscall.Errno(0x11)
+ EFAULT = syscall.Errno(0xe)
+ EFBIG = syscall.Errno(0x1b)
+ EHOSTDOWN = syscall.Errno(0x70)
+ EHOSTUNREACH = syscall.Errno(0x71)
+ EHWPOISON = syscall.Errno(0x85)
+ EIDRM = syscall.Errno(0x2b)
+ EILSEQ = syscall.Errno(0x54)
+ EINPROGRESS = syscall.Errno(0x73)
+ EINTR = syscall.Errno(0x4)
+ EINVAL = syscall.Errno(0x16)
+ EIO = syscall.Errno(0x5)
+ EISCONN = syscall.Errno(0x6a)
+ EISDIR = syscall.Errno(0x15)
+ EISNAM = syscall.Errno(0x78)
+ EKEYEXPIRED = syscall.Errno(0x7f)
+ EKEYREJECTED = syscall.Errno(0x81)
+ EKEYREVOKED = syscall.Errno(0x80)
+ EL2HLT = syscall.Errno(0x33)
+ EL2NSYNC = syscall.Errno(0x2d)
+ EL3HLT = syscall.Errno(0x2e)
+ EL3RST = syscall.Errno(0x2f)
+ ELIBACC = syscall.Errno(0x4f)
+ ELIBBAD = syscall.Errno(0x50)
+ ELIBEXEC = syscall.Errno(0x53)
+ ELIBMAX = syscall.Errno(0x52)
+ ELIBSCN = syscall.Errno(0x51)
+ ELNRNG = syscall.Errno(0x30)
+ ELOOP = syscall.Errno(0x28)
+ EMEDIUMTYPE = syscall.Errno(0x7c)
+ EMFILE = syscall.Errno(0x18)
+ EMLINK = syscall.Errno(0x1f)
+ EMSGSIZE = syscall.Errno(0x5a)
+ EMULTIHOP = syscall.Errno(0x48)
+ ENAMETOOLONG = syscall.Errno(0x24)
+ ENAVAIL = syscall.Errno(0x77)
+ ENETDOWN = syscall.Errno(0x64)
+ ENETRESET = syscall.Errno(0x66)
+ ENETUNREACH = syscall.Errno(0x65)
+ ENFILE = syscall.Errno(0x17)
+ ENOANO = syscall.Errno(0x37)
+ ENOBUFS = syscall.Errno(0x69)
+ ENOCSI = syscall.Errno(0x32)
+ ENODATA = syscall.Errno(0x3d)
+ ENODEV = syscall.Errno(0x13)
+ ENOENT = syscall.Errno(0x2)
+ ENOEXEC = syscall.Errno(0x8)
+ ENOKEY = syscall.Errno(0x7e)
+ ENOLCK = syscall.Errno(0x25)
+ ENOLINK = syscall.Errno(0x43)
+ ENOMEDIUM = syscall.Errno(0x7b)
+ ENOMEM = syscall.Errno(0xc)
+ ENOMSG = syscall.Errno(0x2a)
+ ENONET = syscall.Errno(0x40)
+ ENOPKG = syscall.Errno(0x41)
+ ENOPROTOOPT = syscall.Errno(0x5c)
+ ENOSPC = syscall.Errno(0x1c)
+ ENOSR = syscall.Errno(0x3f)
+ ENOSTR = syscall.Errno(0x3c)
+ ENOSYS = syscall.Errno(0x26)
+ ENOTBLK = syscall.Errno(0xf)
+ ENOTCONN = syscall.Errno(0x6b)
+ ENOTDIR = syscall.Errno(0x14)
+ ENOTEMPTY = syscall.Errno(0x27)
+ ENOTNAM = syscall.Errno(0x76)
+ ENOTRECOVERABLE = syscall.Errno(0x83)
+ ENOTSOCK = syscall.Errno(0x58)
+ ENOTSUP = syscall.Errno(0x5f)
+ ENOTTY = syscall.Errno(0x19)
+ ENOTUNIQ = syscall.Errno(0x4c)
+ ENXIO = syscall.Errno(0x6)
+ EOPNOTSUPP = syscall.Errno(0x5f)
+ EOVERFLOW = syscall.Errno(0x4b)
+ EOWNERDEAD = syscall.Errno(0x82)
+ EPERM = syscall.Errno(0x1)
+ EPFNOSUPPORT = syscall.Errno(0x60)
+ EPIPE = syscall.Errno(0x20)
+ EPROTO = syscall.Errno(0x47)
+ EPROTONOSUPPORT = syscall.Errno(0x5d)
+ EPROTOTYPE = syscall.Errno(0x5b)
+ ERANGE = syscall.Errno(0x22)
+ EREMCHG = syscall.Errno(0x4e)
+ EREMOTE = syscall.Errno(0x42)
+ EREMOTEIO = syscall.Errno(0x79)
+ ERESTART = syscall.Errno(0x55)
+ ERFKILL = syscall.Errno(0x84)
+ EROFS = syscall.Errno(0x1e)
+ ESHUTDOWN = syscall.Errno(0x6c)
+ ESOCKTNOSUPPORT = syscall.Errno(0x5e)
+ ESPIPE = syscall.Errno(0x1d)
+ ESRCH = syscall.Errno(0x3)
+ ESRMNT = syscall.Errno(0x45)
+ ESTALE = syscall.Errno(0x74)
+ ESTRPIPE = syscall.Errno(0x56)
+ ETIME = syscall.Errno(0x3e)
+ ETIMEDOUT = syscall.Errno(0x6e)
+ ETOOMANYREFS = syscall.Errno(0x6d)
+ ETXTBSY = syscall.Errno(0x1a)
+ EUCLEAN = syscall.Errno(0x75)
+ EUNATCH = syscall.Errno(0x31)
+ EUSERS = syscall.Errno(0x57)
+ EWOULDBLOCK = syscall.Errno(0xb)
+ EXDEV = syscall.Errno(0x12)
+ EXFULL = syscall.Errno(0x36)
+)
+
+// Signals
+const (
+ SIGABRT = syscall.Signal(0x6)
+ SIGALRM = syscall.Signal(0xe)
+ SIGBUS = syscall.Signal(0x7)
+ SIGCHLD = syscall.Signal(0x11)
+ SIGCLD = syscall.Signal(0x11)
+ SIGCONT = syscall.Signal(0x12)
+ SIGFPE = syscall.Signal(0x8)
+ SIGHUP = syscall.Signal(0x1)
+ SIGILL = syscall.Signal(0x4)
+ SIGINT = syscall.Signal(0x2)
+ SIGIO = syscall.Signal(0x1d)
+ SIGIOT = syscall.Signal(0x6)
+ SIGKILL = syscall.Signal(0x9)
+ SIGPIPE = syscall.Signal(0xd)
+ SIGPOLL = syscall.Signal(0x1d)
+ SIGPROF = syscall.Signal(0x1b)
+ SIGPWR = syscall.Signal(0x1e)
+ SIGQUIT = syscall.Signal(0x3)
+ SIGSEGV = syscall.Signal(0xb)
+ SIGSTKFLT = syscall.Signal(0x10)
+ SIGSTOP = syscall.Signal(0x13)
+ SIGSYS = syscall.Signal(0x1f)
+ SIGTERM = syscall.Signal(0xf)
+ SIGTRAP = syscall.Signal(0x5)
+ SIGTSTP = syscall.Signal(0x14)
+ SIGTTIN = syscall.Signal(0x15)
+ SIGTTOU = syscall.Signal(0x16)
+ SIGURG = syscall.Signal(0x17)
+ SIGUSR1 = syscall.Signal(0xa)
+ SIGUSR2 = syscall.Signal(0xc)
+ SIGVTALRM = syscall.Signal(0x1a)
+ SIGWINCH = syscall.Signal(0x1c)
+ SIGXCPU = syscall.Signal(0x18)
+ SIGXFSZ = syscall.Signal(0x19)
+)
+
+// Error table
+var errorList = [...]struct {
+ num syscall.Errno
+ name string
+ desc string
+}{
+ {1, "EPERM", "operation not permitted"},
+ {2, "ENOENT", "no such file or directory"},
+ {3, "ESRCH", "no such process"},
+ {4, "EINTR", "interrupted system call"},
+ {5, "EIO", "input/output error"},
+ {6, "ENXIO", "no such device or address"},
+ {7, "E2BIG", "argument list too long"},
+ {8, "ENOEXEC", "exec format error"},
+ {9, "EBADF", "bad file descriptor"},
+ {10, "ECHILD", "no child processes"},
+ {11, "EAGAIN", "resource temporarily unavailable"},
+ {12, "ENOMEM", "cannot allocate memory"},
+ {13, "EACCES", "permission denied"},
+ {14, "EFAULT", "bad address"},
+ {15, "ENOTBLK", "block device required"},
+ {16, "EBUSY", "device or resource busy"},
+ {17, "EEXIST", "file exists"},
+ {18, "EXDEV", "invalid cross-device link"},
+ {19, "ENODEV", "no such device"},
+ {20, "ENOTDIR", "not a directory"},
+ {21, "EISDIR", "is a directory"},
+ {22, "EINVAL", "invalid argument"},
+ {23, "ENFILE", "too many open files in system"},
+ {24, "EMFILE", "too many open files"},
+ {25, "ENOTTY", "inappropriate ioctl for device"},
+ {26, "ETXTBSY", "text file busy"},
+ {27, "EFBIG", "file too large"},
+ {28, "ENOSPC", "no space left on device"},
+ {29, "ESPIPE", "illegal seek"},
+ {30, "EROFS", "read-only file system"},
+ {31, "EMLINK", "too many links"},
+ {32, "EPIPE", "broken pipe"},
+ {33, "EDOM", "numerical argument out of domain"},
+ {34, "ERANGE", "numerical result out of range"},
+ {35, "EDEADLK", "resource deadlock avoided"},
+ {36, "ENAMETOOLONG", "file name too long"},
+ {37, "ENOLCK", "no locks available"},
+ {38, "ENOSYS", "function not implemented"},
+ {39, "ENOTEMPTY", "directory not empty"},
+ {40, "ELOOP", "too many levels of symbolic links"},
+ {42, "ENOMSG", "no message of desired type"},
+ {43, "EIDRM", "identifier removed"},
+ {44, "ECHRNG", "channel number out of range"},
+ {45, "EL2NSYNC", "level 2 not synchronized"},
+ {46, "EL3HLT", "level 3 halted"},
+ {47, "EL3RST", "level 3 reset"},
+ {48, "ELNRNG", "link number out of range"},
+ {49, "EUNATCH", "protocol driver not attached"},
+ {50, "ENOCSI", "no CSI structure available"},
+ {51, "EL2HLT", "level 2 halted"},
+ {52, "EBADE", "invalid exchange"},
+ {53, "EBADR", "invalid request descriptor"},
+ {54, "EXFULL", "exchange full"},
+ {55, "ENOANO", "no anode"},
+ {56, "EBADRQC", "invalid request code"},
+ {57, "EBADSLT", "invalid slot"},
+ {59, "EBFONT", "bad font file format"},
+ {60, "ENOSTR", "device not a stream"},
+ {61, "ENODATA", "no data available"},
+ {62, "ETIME", "timer expired"},
+ {63, "ENOSR", "out of streams resources"},
+ {64, "ENONET", "machine is not on the network"},
+ {65, "ENOPKG", "package not installed"},
+ {66, "EREMOTE", "object is remote"},
+ {67, "ENOLINK", "link has been severed"},
+ {68, "EADV", "advertise error"},
+ {69, "ESRMNT", "srmount error"},
+ {70, "ECOMM", "communication error on send"},
+ {71, "EPROTO", "protocol error"},
+ {72, "EMULTIHOP", "multihop attempted"},
+ {73, "EDOTDOT", "RFS specific error"},
+ {74, "EBADMSG", "bad message"},
+ {75, "EOVERFLOW", "value too large for defined data type"},
+ {76, "ENOTUNIQ", "name not unique on network"},
+ {77, "EBADFD", "file descriptor in bad state"},
+ {78, "EREMCHG", "remote address changed"},
+ {79, "ELIBACC", "can not access a needed shared library"},
+ {80, "ELIBBAD", "accessing a corrupted shared library"},
+ {81, "ELIBSCN", ".lib section in a.out corrupted"},
+ {82, "ELIBMAX", "attempting to link in too many shared libraries"},
+ {83, "ELIBEXEC", "cannot exec a shared library directly"},
+ {84, "EILSEQ", "invalid or incomplete multibyte or wide character"},
+ {85, "ERESTART", "interrupted system call should be restarted"},
+ {86, "ESTRPIPE", "streams pipe error"},
+ {87, "EUSERS", "too many users"},
+ {88, "ENOTSOCK", "socket operation on non-socket"},
+ {89, "EDESTADDRREQ", "destination address required"},
+ {90, "EMSGSIZE", "message too long"},
+ {91, "EPROTOTYPE", "protocol wrong type for socket"},
+ {92, "ENOPROTOOPT", "protocol not available"},
+ {93, "EPROTONOSUPPORT", "protocol not supported"},
+ {94, "ESOCKTNOSUPPORT", "socket type not supported"},
+ {95, "ENOTSUP", "operation not supported"},
+ {96, "EPFNOSUPPORT", "protocol family not supported"},
+ {97, "EAFNOSUPPORT", "address family not supported by protocol"},
+ {98, "EADDRINUSE", "address already in use"},
+ {99, "EADDRNOTAVAIL", "cannot assign requested address"},
+ {100, "ENETDOWN", "network is down"},
+ {101, "ENETUNREACH", "network is unreachable"},
+ {102, "ENETRESET", "network dropped connection on reset"},
+ {103, "ECONNABORTED", "software caused connection abort"},
+ {104, "ECONNRESET", "connection reset by peer"},
+ {105, "ENOBUFS", "no buffer space available"},
+ {106, "EISCONN", "transport endpoint is already connected"},
+ {107, "ENOTCONN", "transport endpoint is not connected"},
+ {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
+ {109, "ETOOMANYREFS", "too many references: cannot splice"},
+ {110, "ETIMEDOUT", "connection timed out"},
+ {111, "ECONNREFUSED", "connection refused"},
+ {112, "EHOSTDOWN", "host is down"},
+ {113, "EHOSTUNREACH", "no route to host"},
+ {114, "EALREADY", "operation already in progress"},
+ {115, "EINPROGRESS", "operation now in progress"},
+ {116, "ESTALE", "stale file handle"},
+ {117, "EUCLEAN", "structure needs cleaning"},
+ {118, "ENOTNAM", "not a XENIX named type file"},
+ {119, "ENAVAIL", "no XENIX semaphores available"},
+ {120, "EISNAM", "is a named type file"},
+ {121, "EREMOTEIO", "remote I/O error"},
+ {122, "EDQUOT", "disk quota exceeded"},
+ {123, "ENOMEDIUM", "no medium found"},
+ {124, "EMEDIUMTYPE", "wrong medium type"},
+ {125, "ECANCELED", "operation canceled"},
+ {126, "ENOKEY", "required key not available"},
+ {127, "EKEYEXPIRED", "key has expired"},
+ {128, "EKEYREVOKED", "key has been revoked"},
+ {129, "EKEYREJECTED", "key was rejected by service"},
+ {130, "EOWNERDEAD", "owner died"},
+ {131, "ENOTRECOVERABLE", "state not recoverable"},
+ {132, "ERFKILL", "operation not possible due to RF-kill"},
+ {133, "EHWPOISON", "memory page has hardware error"},
+}
+
+// Signal table
+var signalList = [...]struct {
+ num syscall.Signal
+ name string
+ desc string
+}{
+ {1, "SIGHUP", "hangup"},
+ {2, "SIGINT", "interrupt"},
+ {3, "SIGQUIT", "quit"},
+ {4, "SIGILL", "illegal instruction"},
+ {5, "SIGTRAP", "trace/breakpoint trap"},
+ {6, "SIGABRT", "aborted"},
+ {7, "SIGBUS", "bus error"},
+ {8, "SIGFPE", "floating point exception"},
+ {9, "SIGKILL", "killed"},
+ {10, "SIGUSR1", "user defined signal 1"},
+ {11, "SIGSEGV", "segmentation fault"},
+ {12, "SIGUSR2", "user defined signal 2"},
+ {13, "SIGPIPE", "broken pipe"},
+ {14, "SIGALRM", "alarm clock"},
+ {15, "SIGTERM", "terminated"},
+ {16, "SIGSTKFLT", "stack fault"},
+ {17, "SIGCHLD", "child exited"},
+ {18, "SIGCONT", "continued"},
+ {19, "SIGSTOP", "stopped (signal)"},
+ {20, "SIGTSTP", "stopped"},
+ {21, "SIGTTIN", "stopped (tty input)"},
+ {22, "SIGTTOU", "stopped (tty output)"},
+ {23, "SIGURG", "urgent I/O condition"},
+ {24, "SIGXCPU", "CPU time limit exceeded"},
+ {25, "SIGXFSZ", "file size limit exceeded"},
+ {26, "SIGVTALRM", "virtual timer expired"},
+ {27, "SIGPROF", "profiling timer expired"},
+ {28, "SIGWINCH", "window changed"},
+ {29, "SIGIO", "I/O possible"},
+ {30, "SIGPWR", "power failure"},
+ {31, "SIGSYS", "bad system call"},
+}
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
index 3814df854..114966110 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
@@ -64,6 +64,7 @@ const (
AF_VSOCK = 0x28
AF_WANPIPE = 0x19
AF_X25 = 0x9
+ AF_XDP = 0x2c
ALG_OP_DECRYPT = 0x0
ALG_OP_ENCRYPT = 0x1
ALG_SET_AEAD_ASSOCLEN = 0x4
@@ -498,6 +499,8 @@ const (
FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615
FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614
FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613
@@ -635,7 +638,7 @@ const (
IFA_F_STABLE_PRIVACY = 0x800
IFA_F_TEMPORARY = 0x1
IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
+ IFA_MAX = 0xa
IFF_ALLMULTI = 0x200
IFF_ATTACH_QUEUE = 0x200
IFF_AUTOMEDIA = 0x4000
@@ -762,6 +765,7 @@ const (
IPV6_DONTFRAG = 0x3e
IPV6_DROP_MEMBERSHIP = 0x15
IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
IPV6_HDRINCL = 0x24
IPV6_HOPLIMIT = 0x34
IPV6_HOPOPTS = 0x36
@@ -874,6 +878,26 @@ const (
IXOFF = 0x1000
IXON = 0x400
JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
KEYCTL_ASSUME_AUTHORITY = 0x10
KEYCTL_CHOWN = 0x4
KEYCTL_CLEAR = 0x7
@@ -888,6 +912,11 @@ const (
KEYCTL_JOIN_SESSION_KEYRING = 0x1
KEYCTL_LINK = 0x8
KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
KEYCTL_READ = 0xb
KEYCTL_REJECT = 0x13
KEYCTL_RESTRICT_KEYRING = 0x1d
@@ -897,6 +926,10 @@ const (
KEYCTL_SETPERM = 0x5
KEYCTL_SET_REQKEY_KEYRING = 0xe
KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
KEYCTL_UNLINK = 0x9
KEYCTL_UPDATE = 0x2
KEY_REQKEY_DEFL_DEFAULT = 0x0
@@ -954,6 +987,7 @@ const (
MAP_EXECUTABLE = 0x1000
MAP_FILE = 0x0
MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
MAP_GROWSDOWN = 0x100
MAP_HUGETLB = 0x40000
MAP_HUGE_MASK = 0x3f
@@ -964,11 +998,30 @@ const (
MAP_POPULATE = 0x8000
MAP_PRIVATE = 0x2
MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
MAP_STACK = 0x20000
+ MAP_SYNC = 0x80000
MAP_TYPE = 0xf
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
MCL_ONFAULT = 0x4
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
MINIX2_SUPER_MAGIC = 0x2468
MINIX2_SUPER_MAGIC2 = 0x2478
MINIX3_SUPER_MAGIC = 0x4d5a
@@ -977,6 +1030,8 @@ const (
MNT_DETACH = 0x2
MNT_EXPIRE = 0x4
MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
MSDOS_SUPER_MAGIC = 0x4d44
MSG_BATCH = 0x40000
MSG_CMSG_CLOEXEC = 0x40000000
@@ -1053,6 +1108,7 @@ const (
NETLINK_FIB_LOOKUP = 0xa
NETLINK_FIREWALL = 0x3
NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
NETLINK_INET_DIAG = 0x4
NETLINK_IP6_FW = 0xd
NETLINK_ISCSI = 0x8
@@ -1074,6 +1130,8 @@ const (
NETLINK_UNUSED = 0x1
NETLINK_USERSOCK = 0x2
NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
NFNETLINK_V0 = 0x0
NFNLGRP_ACCT_QUOTA = 0x8
NFNLGRP_CONNTRACK_DESTROY = 0x3
@@ -1194,6 +1252,7 @@ const (
PACKET_FASTROUTE = 0x6
PACKET_HDRLEN = 0xb
PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
PACKET_KERNEL = 0x7
PACKET_LOOPBACK = 0x5
PACKET_LOSS = 0xe
@@ -1243,6 +1302,36 @@ const (
PERF_EVENT_IOC_SET_FILTER = 0x40082406
PERF_EVENT_IOC_SET_OUTPUT = 0x2405
PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x4004743d
+ PPPIOCATTCHAN = 0x40047438
+ PPPIOCCONNECT = 0x4004743a
+ PPPIOCDETACH = 0x4004743c
+ PPPIOCDISCONN = 0x7439
+ PPPIOCGASYNCMAP = 0x80047458
+ PPPIOCGCHAN = 0x80047437
+ PPPIOCGDEBUG = 0x80047441
+ PPPIOCGFLAGS = 0x8004745a
+ PPPIOCGIDLE = 0x8010743f
+ PPPIOCGL2TPSTATS = 0x80487436
+ PPPIOCGMRU = 0x80047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x80047455
+ PPPIOCGUNIT = 0x80047456
+ PPPIOCGXASYNCMAP = 0x80207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x40107446
+ PPPIOCSASYNCMAP = 0x40047457
+ PPPIOCSCOMPRESS = 0x4010744d
+ PPPIOCSDEBUG = 0x40047440
+ PPPIOCSFLAGS = 0x40047459
+ PPPIOCSMAXCID = 0x40047451
+ PPPIOCSMRRU = 0x4004743b
+ PPPIOCSMRU = 0x40047452
+ PPPIOCSNPMODE = 0x4008744b
+ PPPIOCSPASS = 0x40107447
+ PPPIOCSRASYNCMAP = 0x40047454
+ PPPIOCSXASYNCMAP = 0x4020744f
+ PPPIOCXFERUNIT = 0x744e
PRIO_PGRP = 0x1
PRIO_PROCESS = 0x0
PRIO_USER = 0x2
@@ -1344,6 +1433,7 @@ const (
PR_SPEC_DISABLE = 0x4
PR_SPEC_ENABLE = 0x2
PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
PR_SPEC_NOT_AFFECTED = 0x0
PR_SPEC_PRCTL = 0x1
PR_SPEC_STORE_BYPASS = 0x0
@@ -1488,6 +1578,9 @@ const (
RAMFS_MAGIC = 0x858458f6
RDTGROUP_SUPER_MAGIC = 0x7655821
REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
RLIMIT_AS = 0x9
RLIMIT_CORE = 0x4
RLIMIT_CPU = 0x0
@@ -1530,7 +1623,7 @@ const (
RTAX_UNSPEC = 0x0
RTAX_WINDOW = 0x3
RTA_ALIGNTO = 0x4
- RTA_MAX = 0x1a
+ RTA_MAX = 0x1d
RTCF_DIRECTSRC = 0x4000000
RTCF_DOREDIRECT = 0x1000000
RTCF_LOG = 0x2000000
@@ -1598,6 +1691,7 @@ const (
RTM_DELACTION = 0x31
RTM_DELADDR = 0x15
RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
RTM_DELLINK = 0x11
RTM_DELMDB = 0x55
RTM_DELNEIGH = 0x1d
@@ -1618,6 +1712,7 @@ const (
RTM_GETADDR = 0x16
RTM_GETADDRLABEL = 0x4a
RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
RTM_GETDCB = 0x4e
RTM_GETLINK = 0x12
RTM_GETMDB = 0x56
@@ -1632,11 +1727,12 @@ const (
RTM_GETSTATS = 0x5e
RTM_GETTCLASS = 0x2a
RTM_GETTFILTER = 0x2e
- RTM_MAX = 0x63
+ RTM_MAX = 0x67
RTM_NEWACTION = 0x30
RTM_NEWADDR = 0x14
RTM_NEWADDRLABEL = 0x48
RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
RTM_NEWLINK = 0x10
RTM_NEWMDB = 0x54
RTM_NEWNDUSEROPT = 0x44
@@ -1651,8 +1747,8 @@ const (
RTM_NEWSTATS = 0x5c
RTM_NEWTCLASS = 0x28
RTM_NEWTFILTER = 0x2c
- RTM_NR_FAMILIES = 0x15
- RTM_NR_MSGTYPES = 0x54
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
RTM_SETDCB = 0x4f
RTM_SETLINK = 0x13
RTM_SETNEIGHTBL = 0x43
@@ -1666,17 +1762,22 @@ const (
RTNH_F_UNRESOLVED = 0x20
RTN_MAX = 0xb
RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
RTPROT_BIRD = 0xc
RTPROT_BOOT = 0x3
RTPROT_DHCP = 0x10
RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
RTPROT_KERNEL = 0x2
RTPROT_MROUTED = 0x11
RTPROT_MRT = 0xa
RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
RTPROT_RA = 0x9
RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
RTPROT_STATIC = 0x4
RTPROT_UNSPEC = 0x0
RTPROT_XORP = 0xe
@@ -1696,7 +1797,9 @@ const (
SCM_TIMESTAMPING_OPT_STATS = 0x36
SCM_TIMESTAMPING_PKTINFO = 0x3a
SCM_TIMESTAMPNS = 0x23
+ SCM_TXTIME = 0x3d
SCM_WIFI_STATUS = 0x29
+ SC_LOG_FLUSH = 0x100000
SECCOMP_MODE_DISABLED = 0x0
SECCOMP_MODE_FILTER = 0x2
SECCOMP_MODE_STRICT = 0x1
@@ -1752,6 +1855,9 @@ const (
SIOCGMIIPHY = 0x8947
SIOCGMIIREG = 0x8948
SIOCGPGRP = 0x8904
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
SIOCGRARP = 0x8961
SIOCGSKNS = 0x894c
SIOCGSTAMP = 0x8906
@@ -1841,6 +1947,7 @@ const (
SOL_TIPC = 0x10f
SOL_TLS = 0x11a
SOL_X25 = 0x106
+ SOL_XDP = 0x11b
SOMAXCONN = 0x80
SO_ACCEPTCONN = 0x1e
SO_ATTACH_BPF = 0x32
@@ -1899,6 +2006,7 @@ const (
SO_TIMESTAMP = 0x1d
SO_TIMESTAMPING = 0x25
SO_TIMESTAMPNS = 0x23
+ SO_TXTIME = 0x3d
SO_TYPE = 0x3
SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
@@ -1936,6 +2044,9 @@ const (
STATX_TYPE = 0x1
STATX_UID = 0x8
STATX__RESERVED = 0x80000000
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
SYSFS_MAGIC = 0x62656572
S_BLKSIZE = 0x200
S_IEXEC = 0x40
@@ -1974,7 +2085,7 @@ const (
TASKSTATS_GENL_NAME = "TASKSTATS"
TASKSTATS_GENL_VERSION = 0x1
TASKSTATS_TYPE_MAX = 0x6
- TASKSTATS_VERSION = 0x8
+ TASKSTATS_VERSION = 0x9
TCFLSH = 0x540b
TCGETA = 0x5405
TCGETS = 0x5401
@@ -1999,6 +2110,8 @@ const (
TCP_DEFER_ACCEPT = 0x9
TCP_FASTOPEN = 0x17
TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
TCP_INFO = 0xb
TCP_KEEPCNT = 0x6
TCP_KEEPIDLE = 0x4
@@ -2056,6 +2169,7 @@ const (
TIOCGETD = 0x5424
TIOCGEXCL = 0x80045440
TIOCGICOUNT = 0x545d
+ TIOCGISO7816 = 0x80285442
TIOCGLCKTRMIOS = 0x5456
TIOCGPGRP = 0x540f
TIOCGPKT = 0x80045438
@@ -2109,6 +2223,7 @@ const (
TIOCSER_TEMT = 0x1
TIOCSETD = 0x5423
TIOCSIG = 0x40045436
+ TIOCSISO7816 = 0xc0285443
TIOCSLCKTRMIOS = 0x5457
TIOCSPGRP = 0x5410
TIOCSPTLCK = 0x40045431
@@ -2166,6 +2281,21 @@ const (
TUNSETVNETBE = 0x400454de
TUNSETVNETHDRSZ = 0x400454d8
TUNSETVNETLE = 0x400454dc
+ UBI_IOCATT = 0x40186f40
+ UBI_IOCDET = 0x40046f41
+ UBI_IOCEBCH = 0x40044f02
+ UBI_IOCEBER = 0x40044f01
+ UBI_IOCEBISMAP = 0x80044f05
+ UBI_IOCEBMAP = 0x40084f03
+ UBI_IOCEBUNMAP = 0x40044f04
+ UBI_IOCMKVOL = 0x40986f00
+ UBI_IOCRMVOL = 0x40046f01
+ UBI_IOCRNVOL = 0x51106f03
+ UBI_IOCRSVOL = 0x400c6f02
+ UBI_IOCSETVOLPROP = 0x40104f06
+ UBI_IOCVOLCRBLK = 0x40804f07
+ UBI_IOCVOLRMBLK = 0x4f08
+ UBI_IOCVOLUP = 0x40084f00
UDF_SUPER_MAGIC = 0x15013346
UMOUNT_NOFOLLOW = 0x8
USBDEVICE_SUPER_MAGIC = 0x9fa2
@@ -2302,7 +2432,28 @@ const (
XATTR_CREATE = 0x1
XATTR_REPLACE = 0x2
XCASE = 0x4
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
XTABS = 0x1800
ZSMALLOC_MAGIC = 0x58295829
)
diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
index 7fdc85b17..036f3247c 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
@@ -1,1792 +1,2451 @@
-// mkerrors.sh -m64
-// Code generated by the command above; DO NOT EDIT.
+// mkerrors.sh -Wall -Werror -static -I/tmp/include
+// Code generated by the command above; see README.md. DO NOT EDIT.
// +build sparc64,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs -- -m64 _const.go
+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go
package unix
import "syscall"
const (
- AF_ALG = 0x26
- AF_APPLETALK = 0x5
- AF_ASH = 0x12
- AF_ATMPVC = 0x8
- AF_ATMSVC = 0x14
- AF_AX25 = 0x3
- AF_BLUETOOTH = 0x1f
- AF_BRIDGE = 0x7
- AF_CAIF = 0x25
- AF_CAN = 0x1d
- AF_DECnet = 0xc
- AF_ECONET = 0x13
- AF_FILE = 0x1
- AF_IB = 0x1b
- AF_IEEE802154 = 0x24
- AF_INET = 0x2
- AF_INET6 = 0xa
- AF_IPX = 0x4
- AF_IRDA = 0x17
- AF_ISDN = 0x22
- AF_IUCV = 0x20
- AF_KCM = 0x29
- AF_KEY = 0xf
- AF_LLC = 0x1a
- AF_LOCAL = 0x1
- AF_MAX = 0x2a
- AF_MPLS = 0x1c
- AF_NETBEUI = 0xd
- AF_NETLINK = 0x10
- AF_NETROM = 0x6
- AF_NFC = 0x27
- AF_PACKET = 0x11
- AF_PHONET = 0x23
- AF_PPPOX = 0x18
- AF_RDS = 0x15
- AF_ROSE = 0xb
- AF_ROUTE = 0x10
- AF_RXRPC = 0x21
- AF_SECURITY = 0xe
- AF_SNA = 0x16
- AF_TIPC = 0x1e
- AF_UNIX = 0x1
- AF_UNSPEC = 0x0
- AF_VSOCK = 0x28
- AF_WANPIPE = 0x19
- AF_X25 = 0x9
- ALG_OP_DECRYPT = 0x0
- ALG_OP_ENCRYPT = 0x1
- ALG_SET_AEAD_ASSOCLEN = 0x4
- ALG_SET_AEAD_AUTHSIZE = 0x5
- ALG_SET_IV = 0x2
- ALG_SET_KEY = 0x1
- ALG_SET_OP = 0x3
- ARPHRD_6LOWPAN = 0x339
- ARPHRD_ADAPT = 0x108
- ARPHRD_APPLETLK = 0x8
- ARPHRD_ARCNET = 0x7
- ARPHRD_ASH = 0x30d
- ARPHRD_ATM = 0x13
- ARPHRD_AX25 = 0x3
- ARPHRD_BIF = 0x307
- ARPHRD_CAIF = 0x336
- ARPHRD_CAN = 0x118
- ARPHRD_CHAOS = 0x5
- ARPHRD_CISCO = 0x201
- ARPHRD_CSLIP = 0x101
- ARPHRD_CSLIP6 = 0x103
- ARPHRD_DDCMP = 0x205
- ARPHRD_DLCI = 0xf
- ARPHRD_ECONET = 0x30e
- ARPHRD_EETHER = 0x2
- ARPHRD_ETHER = 0x1
- ARPHRD_EUI64 = 0x1b
- ARPHRD_FCAL = 0x311
- ARPHRD_FCFABRIC = 0x313
- ARPHRD_FCPL = 0x312
- ARPHRD_FCPP = 0x310
- ARPHRD_FDDI = 0x306
- ARPHRD_FRAD = 0x302
- ARPHRD_HDLC = 0x201
- ARPHRD_HIPPI = 0x30c
- ARPHRD_HWX25 = 0x110
- ARPHRD_IEEE1394 = 0x18
- ARPHRD_IEEE802 = 0x6
- ARPHRD_IEEE80211 = 0x321
- ARPHRD_IEEE80211_PRISM = 0x322
- ARPHRD_IEEE80211_RADIOTAP = 0x323
- ARPHRD_IEEE802154 = 0x324
- ARPHRD_IEEE802154_MONITOR = 0x325
- ARPHRD_IEEE802_TR = 0x320
- ARPHRD_INFINIBAND = 0x20
- ARPHRD_IP6GRE = 0x337
- ARPHRD_IPDDP = 0x309
- ARPHRD_IPGRE = 0x30a
- ARPHRD_IRDA = 0x30f
- ARPHRD_LAPB = 0x204
- ARPHRD_LOCALTLK = 0x305
- ARPHRD_LOOPBACK = 0x304
- ARPHRD_METRICOM = 0x17
- ARPHRD_NETLINK = 0x338
- ARPHRD_NETROM = 0x0
- ARPHRD_NONE = 0xfffe
- ARPHRD_PHONET = 0x334
- ARPHRD_PHONET_PIPE = 0x335
- ARPHRD_PIMREG = 0x30b
- ARPHRD_PPP = 0x200
- ARPHRD_PRONET = 0x4
- ARPHRD_RAWHDLC = 0x206
- ARPHRD_ROSE = 0x10e
- ARPHRD_RSRVD = 0x104
- ARPHRD_SIT = 0x308
- ARPHRD_SKIP = 0x303
- ARPHRD_SLIP = 0x100
- ARPHRD_SLIP6 = 0x102
- ARPHRD_TUNNEL = 0x300
- ARPHRD_TUNNEL6 = 0x301
- ARPHRD_VOID = 0xffff
- ARPHRD_X25 = 0x10f
- ASI_LEON_DFLUSH = 0x11
- ASI_LEON_IFLUSH = 0x10
- ASI_LEON_MMUFLUSH = 0x18
- B0 = 0x0
- B1000000 = 0x100c
- B110 = 0x3
- B115200 = 0x1002
- B1152000 = 0x100d
- B1200 = 0x9
- B134 = 0x4
- B150 = 0x5
- B1500000 = 0x100e
- B153600 = 0x1006
- B1800 = 0xa
- B19200 = 0xe
- B200 = 0x6
- B2000000 = 0x100f
- B230400 = 0x1003
- B2400 = 0xb
- B300 = 0x7
- B307200 = 0x1007
- B38400 = 0xf
- B460800 = 0x1004
- B4800 = 0xc
- B50 = 0x1
- B500000 = 0x100a
- B57600 = 0x1001
- B576000 = 0x100b
- B600 = 0x8
- B614400 = 0x1008
- B75 = 0x2
- B76800 = 0x1005
- B921600 = 0x1009
- B9600 = 0xd
- BLKBSZGET = 0x80081270
- BLKBSZSET = 0x40081271
- BLKFLSBUF = 0x1261
- BLKFRAGET = 0x1265
- BLKFRASET = 0x1264
- BLKGETSIZE = 0x1260
- BLKGETSIZE64 = 0x80081272
- BLKRAGET = 0x1263
- BLKRASET = 0x1262
- BLKROGET = 0x125e
- BLKROSET = 0x125d
- BLKRRPART = 0x125f
- BLKSECTGET = 0x1267
- BLKSECTSET = 0x1266
- BLKSSZGET = 0x1268
- BOTHER = 0x1000
- BPF_A = 0x10
- BPF_ABS = 0x20
- BPF_ADD = 0x0
- BPF_ALU = 0x4
- BPF_AND = 0x50
- BPF_B = 0x10
- BPF_DIV = 0x30
- BPF_H = 0x8
- BPF_IMM = 0x0
- BPF_IND = 0x40
- BPF_JA = 0x0
- BPF_JEQ = 0x10
- BPF_JGE = 0x30
- BPF_JGT = 0x20
- BPF_JMP = 0x5
- BPF_JSET = 0x40
- BPF_K = 0x0
- BPF_LD = 0x0
- BPF_LDX = 0x1
- BPF_LEN = 0x80
- BPF_LL_OFF = -0x200000
- BPF_LSH = 0x60
- BPF_MAJOR_VERSION = 0x1
- BPF_MAXINSNS = 0x1000
- BPF_MEM = 0x60
- BPF_MEMWORDS = 0x10
- BPF_MINOR_VERSION = 0x1
- BPF_MISC = 0x7
- BPF_MOD = 0x90
- BPF_MSH = 0xa0
- BPF_MUL = 0x20
- BPF_NEG = 0x80
- BPF_NET_OFF = -0x100000
- BPF_OR = 0x40
- BPF_RET = 0x6
- BPF_RSH = 0x70
- BPF_ST = 0x2
- BPF_STX = 0x3
- BPF_SUB = 0x10
- BPF_TAX = 0x0
- BPF_TXA = 0x80
- BPF_W = 0x0
- BPF_X = 0x8
- BPF_XOR = 0xa0
- BRKINT = 0x2
- BS0 = 0x0
- BS1 = 0x2000
- BSDLY = 0x2000
- CAN_BCM = 0x2
- CAN_EFF_FLAG = 0x80000000
- CAN_EFF_ID_BITS = 0x1d
- CAN_EFF_MASK = 0x1fffffff
- CAN_ERR_FLAG = 0x20000000
- CAN_ERR_MASK = 0x1fffffff
- CAN_INV_FILTER = 0x20000000
- CAN_ISOTP = 0x6
- CAN_MAX_DLC = 0x8
- CAN_MAX_DLEN = 0x8
- CAN_MCNET = 0x5
- CAN_MTU = 0x10
- CAN_NPROTO = 0x7
- CAN_RAW = 0x1
- CAN_RTR_FLAG = 0x40000000
- CAN_SFF_ID_BITS = 0xb
- CAN_SFF_MASK = 0x7ff
- CAN_TP16 = 0x3
- CAN_TP20 = 0x4
- CBAUD = 0x100f
- CBAUDEX = 0x1000
- CFLUSH = 0xf
- CIBAUD = 0x100f0000
- CLOCAL = 0x800
- CLOCK_BOOTTIME = 0x7
- CLOCK_BOOTTIME_ALARM = 0x9
- CLOCK_DEFAULT = 0x0
- CLOCK_EXT = 0x1
- CLOCK_INT = 0x2
- CLOCK_MONOTONIC = 0x1
- CLOCK_MONOTONIC_COARSE = 0x6
- CLOCK_MONOTONIC_RAW = 0x4
- CLOCK_PROCESS_CPUTIME_ID = 0x2
- CLOCK_REALTIME = 0x0
- CLOCK_REALTIME_ALARM = 0x8
- CLOCK_REALTIME_COARSE = 0x5
- CLOCK_TAI = 0xb
- CLOCK_THREAD_CPUTIME_ID = 0x3
- CLOCK_TXFROMRX = 0x4
- CLOCK_TXINT = 0x3
- CLONE_CHILD_CLEARTID = 0x200000
- CLONE_CHILD_SETTID = 0x1000000
- CLONE_DETACHED = 0x400000
- CLONE_FILES = 0x400
- CLONE_FS = 0x200
- CLONE_IO = 0x80000000
- CLONE_NEWCGROUP = 0x2000000
- CLONE_NEWIPC = 0x8000000
- CLONE_NEWNET = 0x40000000
- CLONE_NEWNS = 0x20000
- CLONE_NEWPID = 0x20000000
- CLONE_NEWUSER = 0x10000000
- CLONE_NEWUTS = 0x4000000
- CLONE_PARENT = 0x8000
- CLONE_PARENT_SETTID = 0x100000
- CLONE_PTRACE = 0x2000
- CLONE_SETTLS = 0x80000
- CLONE_SIGHAND = 0x800
- CLONE_SYSVSEM = 0x40000
- CLONE_THREAD = 0x10000
- CLONE_UNTRACED = 0x800000
- CLONE_VFORK = 0x4000
- CLONE_VM = 0x100
- CMSPAR = 0x40000000
- CR0 = 0x0
- CR1 = 0x200
- CR2 = 0x400
- CR3 = 0x600
- CRDLY = 0x600
- CREAD = 0x80
- CRTSCTS = 0x80000000
- CS5 = 0x0
- CS6 = 0x10
- CS7 = 0x20
- CS8 = 0x30
- CSIGNAL = 0xff
- CSIZE = 0x30
- CSTART = 0x11
- CSTATUS = 0x0
- CSTOP = 0x13
- CSTOPB = 0x40
- CSUSP = 0x1a
- DT_BLK = 0x6
- DT_CHR = 0x2
- DT_DIR = 0x4
- DT_FIFO = 0x1
- DT_LNK = 0xa
- DT_REG = 0x8
- DT_SOCK = 0xc
- DT_UNKNOWN = 0x0
- DT_WHT = 0xe
- ECHO = 0x8
- ECHOCTL = 0x200
- ECHOE = 0x10
- ECHOK = 0x20
- ECHOKE = 0x800
- ECHONL = 0x40
- ECHOPRT = 0x400
- EMT_TAGOVF = 0x1
- ENCODING_DEFAULT = 0x0
- ENCODING_FM_MARK = 0x3
- ENCODING_FM_SPACE = 0x4
- ENCODING_MANCHESTER = 0x5
- ENCODING_NRZ = 0x1
- ENCODING_NRZI = 0x2
- EPOLLERR = 0x8
- EPOLLET = 0x80000000
- EPOLLEXCLUSIVE = 0x10000000
- EPOLLHUP = 0x10
- EPOLLIN = 0x1
- EPOLLMSG = 0x400
- EPOLLONESHOT = 0x40000000
- EPOLLOUT = 0x4
- EPOLLPRI = 0x2
- EPOLLRDBAND = 0x80
- EPOLLRDHUP = 0x2000
- EPOLLRDNORM = 0x40
- EPOLLWAKEUP = 0x20000000
- EPOLLWRBAND = 0x200
- EPOLLWRNORM = 0x100
- EPOLL_CLOEXEC = 0x400000
- EPOLL_CTL_ADD = 0x1
- EPOLL_CTL_DEL = 0x2
- EPOLL_CTL_MOD = 0x3
- ETH_P_1588 = 0x88f7
- ETH_P_8021AD = 0x88a8
- ETH_P_8021AH = 0x88e7
- ETH_P_8021Q = 0x8100
- ETH_P_80221 = 0x8917
- ETH_P_802_2 = 0x4
- ETH_P_802_3 = 0x1
- ETH_P_802_3_MIN = 0x600
- ETH_P_802_EX1 = 0x88b5
- ETH_P_AARP = 0x80f3
- ETH_P_AF_IUCV = 0xfbfb
- ETH_P_ALL = 0x3
- ETH_P_AOE = 0x88a2
- ETH_P_ARCNET = 0x1a
- ETH_P_ARP = 0x806
- ETH_P_ATALK = 0x809b
- ETH_P_ATMFATE = 0x8884
- ETH_P_ATMMPOA = 0x884c
- ETH_P_AX25 = 0x2
- ETH_P_BATMAN = 0x4305
- ETH_P_BPQ = 0x8ff
- ETH_P_CAIF = 0xf7
- ETH_P_CAN = 0xc
- ETH_P_CANFD = 0xd
- ETH_P_CONTROL = 0x16
- ETH_P_CUST = 0x6006
- ETH_P_DDCMP = 0x6
- ETH_P_DEC = 0x6000
- ETH_P_DIAG = 0x6005
- ETH_P_DNA_DL = 0x6001
- ETH_P_DNA_RC = 0x6002
- ETH_P_DNA_RT = 0x6003
- ETH_P_DSA = 0x1b
- ETH_P_ECONET = 0x18
- ETH_P_EDSA = 0xdada
- ETH_P_FCOE = 0x8906
- ETH_P_FIP = 0x8914
- ETH_P_HDLC = 0x19
- ETH_P_HSR = 0x892f
- ETH_P_IEEE802154 = 0xf6
- ETH_P_IEEEPUP = 0xa00
- ETH_P_IEEEPUPAT = 0xa01
- ETH_P_IP = 0x800
- ETH_P_IPV6 = 0x86dd
- ETH_P_IPX = 0x8137
- ETH_P_IRDA = 0x17
- ETH_P_LAT = 0x6004
- ETH_P_LINK_CTL = 0x886c
- ETH_P_LOCALTALK = 0x9
- ETH_P_LOOP = 0x60
- ETH_P_LOOPBACK = 0x9000
- ETH_P_MACSEC = 0x88e5
- ETH_P_MOBITEX = 0x15
- ETH_P_MPLS_MC = 0x8848
- ETH_P_MPLS_UC = 0x8847
- ETH_P_MVRP = 0x88f5
- ETH_P_PAE = 0x888e
- ETH_P_PAUSE = 0x8808
- ETH_P_PHONET = 0xf5
- ETH_P_PPPTALK = 0x10
- ETH_P_PPP_DISC = 0x8863
- ETH_P_PPP_MP = 0x8
- ETH_P_PPP_SES = 0x8864
- ETH_P_PRP = 0x88fb
- ETH_P_PUP = 0x200
- ETH_P_PUPAT = 0x201
- ETH_P_QINQ1 = 0x9100
- ETH_P_QINQ2 = 0x9200
- ETH_P_QINQ3 = 0x9300
- ETH_P_RARP = 0x8035
- ETH_P_SCA = 0x6007
- ETH_P_SLOW = 0x8809
- ETH_P_SNAP = 0x5
- ETH_P_TDLS = 0x890d
- ETH_P_TEB = 0x6558
- ETH_P_TIPC = 0x88ca
- ETH_P_TRAILER = 0x1c
- ETH_P_TR_802_2 = 0x11
- ETH_P_TSN = 0x22f0
- ETH_P_WAN_PPP = 0x7
- ETH_P_WCCP = 0x883e
- ETH_P_X25 = 0x805
- ETH_P_XDSA = 0xf8
- EXTA = 0xe
- EXTB = 0xf
- EXTPROC = 0x10000
- FALLOC_FL_COLLAPSE_RANGE = 0x8
- FALLOC_FL_INSERT_RANGE = 0x20
- FALLOC_FL_KEEP_SIZE = 0x1
- FALLOC_FL_NO_HIDE_STALE = 0x4
- FALLOC_FL_PUNCH_HOLE = 0x2
- FALLOC_FL_ZERO_RANGE = 0x10
- FD_CLOEXEC = 0x1
- FD_SETSIZE = 0x400
- FF0 = 0x0
- FF1 = 0x8000
- FFDLY = 0x8000
- FLUSHO = 0x2000
- F_DUPFD = 0x0
- F_DUPFD_CLOEXEC = 0x406
- F_EXLCK = 0x4
- F_GETFD = 0x1
- F_GETFL = 0x3
- F_GETLEASE = 0x401
- F_GETLK = 0x7
- F_GETLK64 = 0x7
- F_GETOWN = 0x5
- F_GETOWN_EX = 0x10
- F_GETPIPE_SZ = 0x408
- F_GETSIG = 0xb
- F_LOCK = 0x1
- F_NOTIFY = 0x402
- F_OFD_GETLK = 0x24
- F_OFD_SETLK = 0x25
- F_OFD_SETLKW = 0x26
- F_OK = 0x0
- F_RDLCK = 0x1
- F_SETFD = 0x2
- F_SETFL = 0x4
- F_SETLEASE = 0x400
- F_SETLK = 0x8
- F_SETLK64 = 0x8
- F_SETLKW = 0x9
- F_SETLKW64 = 0x9
- F_SETOWN = 0x6
- F_SETOWN_EX = 0xf
- F_SETPIPE_SZ = 0x407
- F_SETSIG = 0xa
- F_SHLCK = 0x8
- F_TEST = 0x3
- F_TLOCK = 0x2
- F_ULOCK = 0x0
- F_UNLCK = 0x3
- F_WRLCK = 0x2
- GRND_NONBLOCK = 0x1
- GRND_RANDOM = 0x2
- HUPCL = 0x400
- IBSHIFT = 0x10
- ICANON = 0x2
- ICMPV6_FILTER = 0x1
- ICRNL = 0x100
- IEXTEN = 0x8000
- IFA_F_DADFAILED = 0x8
- IFA_F_DEPRECATED = 0x20
- IFA_F_HOMEADDRESS = 0x10
- IFA_F_MANAGETEMPADDR = 0x100
- IFA_F_MCAUTOJOIN = 0x400
- IFA_F_NODAD = 0x2
- IFA_F_NOPREFIXROUTE = 0x200
- IFA_F_OPTIMISTIC = 0x4
- IFA_F_PERMANENT = 0x80
- IFA_F_SECONDARY = 0x1
- IFA_F_STABLE_PRIVACY = 0x800
- IFA_F_TEMPORARY = 0x1
- IFA_F_TENTATIVE = 0x40
- IFA_MAX = 0x8
- IFF_ALLMULTI = 0x200
- IFF_ATTACH_QUEUE = 0x200
- IFF_AUTOMEDIA = 0x4000
- IFF_BROADCAST = 0x2
- IFF_DEBUG = 0x4
- IFF_DETACH_QUEUE = 0x400
- IFF_DORMANT = 0x20000
- IFF_DYNAMIC = 0x8000
- IFF_ECHO = 0x40000
- IFF_LOOPBACK = 0x8
- IFF_LOWER_UP = 0x10000
- IFF_MASTER = 0x400
- IFF_MULTICAST = 0x1000
- IFF_MULTI_QUEUE = 0x100
- IFF_NOARP = 0x80
- IFF_NOFILTER = 0x1000
- IFF_NOTRAILERS = 0x20
- IFF_NO_PI = 0x1000
- IFF_ONE_QUEUE = 0x2000
- IFF_PERSIST = 0x800
- IFF_POINTOPOINT = 0x10
- IFF_PORTSEL = 0x2000
- IFF_PROMISC = 0x100
- IFF_RUNNING = 0x40
- IFF_SLAVE = 0x800
- IFF_TAP = 0x2
- IFF_TUN = 0x1
- IFF_TUN_EXCL = 0x8000
- IFF_UP = 0x1
- IFF_VNET_HDR = 0x4000
- IFF_VOLATILE = 0x70c5a
- IFNAMSIZ = 0x10
- IGNBRK = 0x1
- IGNCR = 0x80
- IGNPAR = 0x4
- IMAXBEL = 0x2000
- INLCR = 0x40
- INPCK = 0x10
- IN_ACCESS = 0x1
- IN_ALL_EVENTS = 0xfff
- IN_ATTRIB = 0x4
- IN_CLASSA_HOST = 0xffffff
- IN_CLASSA_MAX = 0x80
- IN_CLASSA_NET = 0xff000000
- IN_CLASSA_NSHIFT = 0x18
- IN_CLASSB_HOST = 0xffff
- IN_CLASSB_MAX = 0x10000
- IN_CLASSB_NET = 0xffff0000
- IN_CLASSB_NSHIFT = 0x10
- IN_CLASSC_HOST = 0xff
- IN_CLASSC_NET = 0xffffff00
- IN_CLASSC_NSHIFT = 0x8
- IN_CLOEXEC = 0x400000
- IN_CLOSE = 0x18
- IN_CLOSE_NOWRITE = 0x10
- IN_CLOSE_WRITE = 0x8
- IN_CREATE = 0x100
- IN_DELETE = 0x200
- IN_DELETE_SELF = 0x400
- IN_DONT_FOLLOW = 0x2000000
- IN_EXCL_UNLINK = 0x4000000
- IN_IGNORED = 0x8000
- IN_ISDIR = 0x40000000
- IN_LOOPBACKNET = 0x7f
- IN_MASK_ADD = 0x20000000
- IN_MODIFY = 0x2
- IN_MOVE = 0xc0
- IN_MOVED_FROM = 0x40
- IN_MOVED_TO = 0x80
- IN_MOVE_SELF = 0x800
- IN_NONBLOCK = 0x4000
- IN_ONESHOT = 0x80000000
- IN_ONLYDIR = 0x1000000
- IN_OPEN = 0x20
- IN_Q_OVERFLOW = 0x4000
- IN_UNMOUNT = 0x2000
- IPPROTO_AH = 0x33
- IPPROTO_BEETPH = 0x5e
- IPPROTO_COMP = 0x6c
- IPPROTO_DCCP = 0x21
- IPPROTO_DSTOPTS = 0x3c
- IPPROTO_EGP = 0x8
- IPPROTO_ENCAP = 0x62
- IPPROTO_ESP = 0x32
- IPPROTO_FRAGMENT = 0x2c
- IPPROTO_GRE = 0x2f
- IPPROTO_HOPOPTS = 0x0
- IPPROTO_ICMP = 0x1
- IPPROTO_ICMPV6 = 0x3a
- IPPROTO_IDP = 0x16
- IPPROTO_IGMP = 0x2
- IPPROTO_IP = 0x0
- IPPROTO_IPIP = 0x4
- IPPROTO_IPV6 = 0x29
- IPPROTO_MH = 0x87
- IPPROTO_MPLS = 0x89
- IPPROTO_MTP = 0x5c
- IPPROTO_NONE = 0x3b
- IPPROTO_PIM = 0x67
- IPPROTO_PUP = 0xc
- IPPROTO_RAW = 0xff
- IPPROTO_ROUTING = 0x2b
- IPPROTO_RSVP = 0x2e
- IPPROTO_SCTP = 0x84
- IPPROTO_TCP = 0x6
- IPPROTO_TP = 0x1d
- IPPROTO_UDP = 0x11
- IPPROTO_UDPLITE = 0x88
- IPV6_2292DSTOPTS = 0x4
- IPV6_2292HOPLIMIT = 0x8
- IPV6_2292HOPOPTS = 0x3
- IPV6_2292PKTINFO = 0x2
- IPV6_2292PKTOPTIONS = 0x6
- IPV6_2292RTHDR = 0x5
- IPV6_ADDRFORM = 0x1
- IPV6_ADD_MEMBERSHIP = 0x14
- IPV6_AUTHHDR = 0xa
- IPV6_CHECKSUM = 0x7
- IPV6_DONTFRAG = 0x3e
- IPV6_DROP_MEMBERSHIP = 0x15
- IPV6_DSTOPTS = 0x3b
- IPV6_HDRINCL = 0x24
- IPV6_HOPLIMIT = 0x34
- IPV6_HOPOPTS = 0x36
- IPV6_IPSEC_POLICY = 0x22
- IPV6_JOIN_ANYCAST = 0x1b
- IPV6_JOIN_GROUP = 0x14
- IPV6_LEAVE_ANYCAST = 0x1c
- IPV6_LEAVE_GROUP = 0x15
- IPV6_MTU = 0x18
- IPV6_MTU_DISCOVER = 0x17
- IPV6_MULTICAST_HOPS = 0x12
- IPV6_MULTICAST_IF = 0x11
- IPV6_MULTICAST_LOOP = 0x13
- IPV6_NEXTHOP = 0x9
- IPV6_PATHMTU = 0x3d
- IPV6_PKTINFO = 0x32
- IPV6_PMTUDISC_DO = 0x2
- IPV6_PMTUDISC_DONT = 0x0
- IPV6_PMTUDISC_INTERFACE = 0x4
- IPV6_PMTUDISC_OMIT = 0x5
- IPV6_PMTUDISC_PROBE = 0x3
- IPV6_PMTUDISC_WANT = 0x1
- IPV6_RECVDSTOPTS = 0x3a
- IPV6_RECVERR = 0x19
- IPV6_RECVHOPLIMIT = 0x33
- IPV6_RECVHOPOPTS = 0x35
- IPV6_RECVPATHMTU = 0x3c
- IPV6_RECVPKTINFO = 0x31
- IPV6_RECVRTHDR = 0x38
- IPV6_RECVTCLASS = 0x42
- IPV6_ROUTER_ALERT = 0x16
- IPV6_RTHDR = 0x39
- IPV6_RTHDRDSTOPTS = 0x37
- IPV6_RTHDR_LOOSE = 0x0
- IPV6_RTHDR_STRICT = 0x1
- IPV6_RTHDR_TYPE_0 = 0x0
- IPV6_RXDSTOPTS = 0x3b
- IPV6_RXHOPOPTS = 0x36
- IPV6_TCLASS = 0x43
- IPV6_UNICAST_HOPS = 0x10
- IPV6_V6ONLY = 0x1a
- IPV6_XFRM_POLICY = 0x23
- IP_ADD_MEMBERSHIP = 0x23
- IP_ADD_SOURCE_MEMBERSHIP = 0x27
- IP_BIND_ADDRESS_NO_PORT = 0x18
- IP_BLOCK_SOURCE = 0x26
- IP_CHECKSUM = 0x17
- IP_DEFAULT_MULTICAST_LOOP = 0x1
- IP_DEFAULT_MULTICAST_TTL = 0x1
- IP_DF = 0x4000
- IP_DROP_MEMBERSHIP = 0x24
- IP_DROP_SOURCE_MEMBERSHIP = 0x28
- IP_FREEBIND = 0xf
- IP_HDRINCL = 0x3
- IP_IPSEC_POLICY = 0x10
- IP_MAXPACKET = 0xffff
- IP_MAX_MEMBERSHIPS = 0x14
- IP_MF = 0x2000
- IP_MINTTL = 0x15
- IP_MSFILTER = 0x29
- IP_MSS = 0x240
- IP_MTU = 0xe
- IP_MTU_DISCOVER = 0xa
- IP_MULTICAST_ALL = 0x31
- IP_MULTICAST_IF = 0x20
- IP_MULTICAST_LOOP = 0x22
- IP_MULTICAST_TTL = 0x21
- IP_NODEFRAG = 0x16
- IP_OFFMASK = 0x1fff
- IP_OPTIONS = 0x4
- IP_ORIGDSTADDR = 0x14
- IP_PASSSEC = 0x12
- IP_PKTINFO = 0x8
- IP_PKTOPTIONS = 0x9
- IP_PMTUDISC = 0xa
- IP_PMTUDISC_DO = 0x2
- IP_PMTUDISC_DONT = 0x0
- IP_PMTUDISC_INTERFACE = 0x4
- IP_PMTUDISC_OMIT = 0x5
- IP_PMTUDISC_PROBE = 0x3
- IP_PMTUDISC_WANT = 0x1
- IP_RECVERR = 0xb
- IP_RECVOPTS = 0x6
- IP_RECVORIGDSTADDR = 0x14
- IP_RECVRETOPTS = 0x7
- IP_RECVTOS = 0xd
- IP_RECVTTL = 0xc
- IP_RETOPTS = 0x7
- IP_RF = 0x8000
- IP_ROUTER_ALERT = 0x5
- IP_TOS = 0x1
- IP_TRANSPARENT = 0x13
- IP_TTL = 0x2
- IP_UNBLOCK_SOURCE = 0x25
- IP_UNICAST_IF = 0x32
- IP_XFRM_POLICY = 0x11
- ISIG = 0x1
- ISTRIP = 0x20
- IUCLC = 0x200
- IUTF8 = 0x4000
- IXANY = 0x800
- IXOFF = 0x1000
- IXON = 0x400
- LINUX_REBOOT_CMD_CAD_OFF = 0x0
- LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
- LINUX_REBOOT_CMD_HALT = 0xcdef0123
- LINUX_REBOOT_CMD_KEXEC = 0x45584543
- LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
- LINUX_REBOOT_CMD_RESTART = 0x1234567
- LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
- LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
- LINUX_REBOOT_MAGIC1 = 0xfee1dead
- LINUX_REBOOT_MAGIC2 = 0x28121969
- LOCK_EX = 0x2
- LOCK_NB = 0x4
- LOCK_SH = 0x1
- LOCK_UN = 0x8
- MADV_DODUMP = 0x11
- MADV_DOFORK = 0xb
- MADV_DONTDUMP = 0x10
- MADV_DONTFORK = 0xa
- MADV_DONTNEED = 0x4
- MADV_FREE = 0x8
- MADV_HUGEPAGE = 0xe
- MADV_HWPOISON = 0x64
- MADV_MERGEABLE = 0xc
- MADV_NOHUGEPAGE = 0xf
- MADV_NORMAL = 0x0
- MADV_RANDOM = 0x1
- MADV_REMOVE = 0x9
- MADV_SEQUENTIAL = 0x2
- MADV_UNMERGEABLE = 0xd
- MADV_WILLNEED = 0x3
- MAP_ANON = 0x20
- MAP_ANONYMOUS = 0x20
- MAP_DENYWRITE = 0x800
- MAP_EXECUTABLE = 0x1000
- MAP_FILE = 0x0
- MAP_FIXED = 0x10
- MAP_GROWSDOWN = 0x200
- MAP_HUGETLB = 0x40000
- MAP_HUGE_MASK = 0x3f
- MAP_HUGE_SHIFT = 0x1a
- MAP_LOCKED = 0x100
- MAP_NONBLOCK = 0x10000
- MAP_NORESERVE = 0x40
- MAP_POPULATE = 0x8000
- MAP_PRIVATE = 0x2
- MAP_RENAME = 0x20
- MAP_SHARED = 0x1
- MAP_STACK = 0x20000
- MAP_TYPE = 0xf
- MCL_CURRENT = 0x2000
- MCL_FUTURE = 0x4000
- MCL_ONFAULT = 0x8000
- MNT_DETACH = 0x2
- MNT_EXPIRE = 0x4
- MNT_FORCE = 0x1
- MSG_BATCH = 0x40000
- MSG_CMSG_CLOEXEC = 0x40000000
- MSG_CONFIRM = 0x800
- MSG_CTRUNC = 0x8
- MSG_DONTROUTE = 0x4
- MSG_DONTWAIT = 0x40
- MSG_EOR = 0x80
- MSG_ERRQUEUE = 0x2000
- MSG_FASTOPEN = 0x20000000
- MSG_FIN = 0x200
- MSG_MORE = 0x8000
- MSG_NOSIGNAL = 0x4000
- MSG_OOB = 0x1
- MSG_PEEK = 0x2
- MSG_PROXY = 0x10
- MSG_RST = 0x1000
- MSG_SYN = 0x400
- MSG_TRUNC = 0x20
- MSG_TRYHARD = 0x4
- MSG_WAITALL = 0x100
- MSG_WAITFORONE = 0x10000
- MS_ACTIVE = 0x40000000
- MS_ASYNC = 0x1
- MS_BIND = 0x1000
- MS_DIRSYNC = 0x80
- MS_INVALIDATE = 0x2
- MS_I_VERSION = 0x800000
- MS_KERNMOUNT = 0x400000
- MS_LAZYTIME = 0x2000000
- MS_MANDLOCK = 0x40
- MS_MGC_MSK = 0xffff0000
- MS_MGC_VAL = 0xc0ed0000
- MS_MOVE = 0x2000
- MS_NOATIME = 0x400
- MS_NODEV = 0x4
- MS_NODIRATIME = 0x800
- MS_NOEXEC = 0x8
- MS_NOSUID = 0x2
- MS_NOUSER = -0x80000000
- MS_POSIXACL = 0x10000
- MS_PRIVATE = 0x40000
- MS_RDONLY = 0x1
- MS_REC = 0x4000
- MS_RELATIME = 0x200000
- MS_REMOUNT = 0x20
- MS_RMT_MASK = 0x2800051
- MS_SHARED = 0x100000
- MS_SILENT = 0x8000
- MS_SLAVE = 0x80000
- MS_STRICTATIME = 0x1000000
- MS_SYNC = 0x4
- MS_SYNCHRONOUS = 0x10
- MS_UNBINDABLE = 0x20000
- NAME_MAX = 0xff
- NETLINK_ADD_MEMBERSHIP = 0x1
- NETLINK_AUDIT = 0x9
- NETLINK_BROADCAST_ERROR = 0x4
- NETLINK_CAP_ACK = 0xa
- NETLINK_CONNECTOR = 0xb
- NETLINK_CRYPTO = 0x15
- NETLINK_DNRTMSG = 0xe
- NETLINK_DROP_MEMBERSHIP = 0x2
- NETLINK_ECRYPTFS = 0x13
- NETLINK_FIB_LOOKUP = 0xa
- NETLINK_FIREWALL = 0x3
- NETLINK_GENERIC = 0x10
- NETLINK_INET_DIAG = 0x4
- NETLINK_IP6_FW = 0xd
- NETLINK_ISCSI = 0x8
- NETLINK_KOBJECT_UEVENT = 0xf
- NETLINK_LISTEN_ALL_NSID = 0x8
- NETLINK_LIST_MEMBERSHIPS = 0x9
- NETLINK_NETFILTER = 0xc
- NETLINK_NFLOG = 0x5
- NETLINK_NO_ENOBUFS = 0x5
- NETLINK_PKTINFO = 0x3
- NETLINK_RDMA = 0x14
- NETLINK_ROUTE = 0x0
- NETLINK_RX_RING = 0x6
- NETLINK_SCSITRANSPORT = 0x12
- NETLINK_SELINUX = 0x7
- NETLINK_SOCK_DIAG = 0x4
- NETLINK_TX_RING = 0x7
- NETLINK_UNUSED = 0x1
- NETLINK_USERSOCK = 0x2
- NETLINK_XFRM = 0x6
- NL0 = 0x0
- NL1 = 0x100
- NLA_ALIGNTO = 0x4
- NLA_F_NESTED = 0x8000
- NLA_F_NET_BYTEORDER = 0x4000
- NLA_HDRLEN = 0x4
- NLDLY = 0x100
- NLMSG_ALIGNTO = 0x4
- NLMSG_DONE = 0x3
- NLMSG_ERROR = 0x2
- NLMSG_HDRLEN = 0x10
- NLMSG_MIN_TYPE = 0x10
- NLMSG_NOOP = 0x1
- NLMSG_OVERRUN = 0x4
- NLM_F_ACK = 0x4
- NLM_F_APPEND = 0x800
- NLM_F_ATOMIC = 0x400
- NLM_F_CREATE = 0x400
- NLM_F_DUMP = 0x300
- NLM_F_DUMP_FILTERED = 0x20
- NLM_F_DUMP_INTR = 0x10
- NLM_F_ECHO = 0x8
- NLM_F_EXCL = 0x200
- NLM_F_MATCH = 0x200
- NLM_F_MULTI = 0x2
- NLM_F_REPLACE = 0x100
- NLM_F_REQUEST = 0x1
- NLM_F_ROOT = 0x100
- NOFLSH = 0x80
- OCRNL = 0x8
- OFDEL = 0x80
- OFILL = 0x40
- OLCUC = 0x2
- ONLCR = 0x4
- ONLRET = 0x20
- ONOCR = 0x10
- OPOST = 0x1
- O_ACCMODE = 0x3
- O_APPEND = 0x8
- O_ASYNC = 0x40
- O_CLOEXEC = 0x400000
- O_CREAT = 0x200
- O_DIRECT = 0x100000
- O_DIRECTORY = 0x10000
- O_DSYNC = 0x2000
- O_EXCL = 0x800
- O_FSYNC = 0x802000
- O_LARGEFILE = 0x0
- O_NDELAY = 0x4004
- O_NOATIME = 0x200000
- O_NOCTTY = 0x8000
- O_NOFOLLOW = 0x20000
- O_NONBLOCK = 0x4000
- O_PATH = 0x1000000
- O_RDONLY = 0x0
- O_RDWR = 0x2
- O_RSYNC = 0x802000
- O_SYNC = 0x802000
- O_TMPFILE = 0x2010000
- O_TRUNC = 0x400
- O_WRONLY = 0x1
- PACKET_ADD_MEMBERSHIP = 0x1
- PACKET_AUXDATA = 0x8
- PACKET_BROADCAST = 0x1
- PACKET_COPY_THRESH = 0x7
- PACKET_DROP_MEMBERSHIP = 0x2
- PACKET_FANOUT = 0x12
- PACKET_FANOUT_CBPF = 0x6
- PACKET_FANOUT_CPU = 0x2
- PACKET_FANOUT_DATA = 0x16
- PACKET_FANOUT_EBPF = 0x7
- PACKET_FANOUT_FLAG_DEFRAG = 0x8000
- PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
- PACKET_FANOUT_HASH = 0x0
- PACKET_FANOUT_LB = 0x1
- PACKET_FANOUT_QM = 0x5
- PACKET_FANOUT_RND = 0x4
- PACKET_FANOUT_ROLLOVER = 0x3
- PACKET_FASTROUTE = 0x6
- PACKET_HDRLEN = 0xb
- PACKET_HOST = 0x0
- PACKET_KERNEL = 0x7
- PACKET_LOOPBACK = 0x5
- PACKET_LOSS = 0xe
- PACKET_MR_ALLMULTI = 0x2
- PACKET_MR_MULTICAST = 0x0
- PACKET_MR_PROMISC = 0x1
- PACKET_MR_UNICAST = 0x3
- PACKET_MULTICAST = 0x2
- PACKET_ORIGDEV = 0x9
- PACKET_OTHERHOST = 0x3
- PACKET_OUTGOING = 0x4
- PACKET_QDISC_BYPASS = 0x14
- PACKET_RECV_OUTPUT = 0x3
- PACKET_RESERVE = 0xc
- PACKET_ROLLOVER_STATS = 0x15
- PACKET_RX_RING = 0x5
- PACKET_STATISTICS = 0x6
- PACKET_TIMESTAMP = 0x11
- PACKET_TX_HAS_OFF = 0x13
- PACKET_TX_RING = 0xd
- PACKET_TX_TIMESTAMP = 0x10
- PACKET_USER = 0x6
- PACKET_VERSION = 0xa
- PACKET_VNET_HDR = 0xf
- PARENB = 0x100
- PARITY_CRC16_PR0 = 0x2
- PARITY_CRC16_PR0_CCITT = 0x4
- PARITY_CRC16_PR1 = 0x3
- PARITY_CRC16_PR1_CCITT = 0x5
- PARITY_CRC32_PR0_CCITT = 0x6
- PARITY_CRC32_PR1_CCITT = 0x7
- PARITY_DEFAULT = 0x0
- PARITY_NONE = 0x1
- PARMRK = 0x8
- PARODD = 0x200
- PENDIN = 0x4000
- PRIO_PGRP = 0x1
- PRIO_PROCESS = 0x0
- PRIO_USER = 0x2
- PROT_EXEC = 0x4
- PROT_GROWSDOWN = 0x1000000
- PROT_GROWSUP = 0x2000000
- PROT_NONE = 0x0
- PROT_READ = 0x1
- PROT_WRITE = 0x2
- PR_CAPBSET_DROP = 0x18
- PR_CAPBSET_READ = 0x17
- PR_CAP_AMBIENT = 0x2f
- PR_CAP_AMBIENT_CLEAR_ALL = 0x4
- PR_CAP_AMBIENT_IS_SET = 0x1
- PR_CAP_AMBIENT_LOWER = 0x3
- PR_CAP_AMBIENT_RAISE = 0x2
- PR_ENDIAN_BIG = 0x0
- PR_ENDIAN_LITTLE = 0x1
- PR_ENDIAN_PPC_LITTLE = 0x2
- PR_FPEMU_NOPRINT = 0x1
- PR_FPEMU_SIGFPE = 0x2
- PR_FP_EXC_ASYNC = 0x2
- PR_FP_EXC_DISABLED = 0x0
- PR_FP_EXC_DIV = 0x10000
- PR_FP_EXC_INV = 0x100000
- PR_FP_EXC_NONRECOV = 0x1
- PR_FP_EXC_OVF = 0x20000
- PR_FP_EXC_PRECISE = 0x3
- PR_FP_EXC_RES = 0x80000
- PR_FP_EXC_SW_ENABLE = 0x80
- PR_FP_EXC_UND = 0x40000
- PR_FP_MODE_FR = 0x1
- PR_FP_MODE_FRE = 0x2
- PR_GET_CHILD_SUBREAPER = 0x25
- PR_GET_DUMPABLE = 0x3
- PR_GET_ENDIAN = 0x13
- PR_GET_FPEMU = 0x9
- PR_GET_FPEXC = 0xb
- PR_GET_FP_MODE = 0x2e
- PR_GET_KEEPCAPS = 0x7
- PR_GET_NAME = 0x10
- PR_GET_NO_NEW_PRIVS = 0x27
- PR_GET_PDEATHSIG = 0x2
- PR_GET_SECCOMP = 0x15
- PR_GET_SECUREBITS = 0x1b
- PR_GET_THP_DISABLE = 0x2a
- PR_GET_TID_ADDRESS = 0x28
- PR_GET_TIMERSLACK = 0x1e
- PR_GET_TIMING = 0xd
- PR_GET_TSC = 0x19
- PR_GET_UNALIGN = 0x5
- PR_MCE_KILL = 0x21
- PR_MCE_KILL_CLEAR = 0x0
- PR_MCE_KILL_DEFAULT = 0x2
- PR_MCE_KILL_EARLY = 0x1
- PR_MCE_KILL_GET = 0x22
- PR_MCE_KILL_LATE = 0x0
- PR_MCE_KILL_SET = 0x1
- PR_MPX_DISABLE_MANAGEMENT = 0x2c
- PR_MPX_ENABLE_MANAGEMENT = 0x2b
- PR_SET_CHILD_SUBREAPER = 0x24
- PR_SET_DUMPABLE = 0x4
- PR_SET_ENDIAN = 0x14
- PR_SET_FPEMU = 0xa
- PR_SET_FPEXC = 0xc
- PR_SET_FP_MODE = 0x2d
- PR_SET_KEEPCAPS = 0x8
- PR_SET_MM = 0x23
- PR_SET_MM_ARG_END = 0x9
- PR_SET_MM_ARG_START = 0x8
- PR_SET_MM_AUXV = 0xc
- PR_SET_MM_BRK = 0x7
- PR_SET_MM_END_CODE = 0x2
- PR_SET_MM_END_DATA = 0x4
- PR_SET_MM_ENV_END = 0xb
- PR_SET_MM_ENV_START = 0xa
- PR_SET_MM_EXE_FILE = 0xd
- PR_SET_MM_MAP = 0xe
- PR_SET_MM_MAP_SIZE = 0xf
- PR_SET_MM_START_BRK = 0x6
- PR_SET_MM_START_CODE = 0x1
- PR_SET_MM_START_DATA = 0x3
- PR_SET_MM_START_STACK = 0x5
- PR_SET_NAME = 0xf
- PR_SET_NO_NEW_PRIVS = 0x26
- PR_SET_PDEATHSIG = 0x1
- PR_SET_PTRACER = 0x59616d61
- PR_SET_PTRACER_ANY = -0x1
- PR_SET_SECCOMP = 0x16
- PR_SET_SECUREBITS = 0x1c
- PR_SET_THP_DISABLE = 0x29
- PR_SET_TIMERSLACK = 0x1d
- PR_SET_TIMING = 0xe
- PR_SET_TSC = 0x1a
- PR_SET_UNALIGN = 0x6
- PR_TASK_PERF_EVENTS_DISABLE = 0x1f
- PR_TASK_PERF_EVENTS_ENABLE = 0x20
- PR_TIMING_STATISTICAL = 0x0
- PR_TIMING_TIMESTAMP = 0x1
- PR_TSC_ENABLE = 0x1
- PR_TSC_SIGSEGV = 0x2
- PR_UNALIGN_NOPRINT = 0x1
- PR_UNALIGN_SIGBUS = 0x2
- PTRACE_ATTACH = 0x10
- PTRACE_CONT = 0x7
- PTRACE_DETACH = 0x11
- PTRACE_EVENT_CLONE = 0x3
- PTRACE_EVENT_EXEC = 0x4
- PTRACE_EVENT_EXIT = 0x6
- PTRACE_EVENT_FORK = 0x1
- PTRACE_EVENT_SECCOMP = 0x7
- PTRACE_EVENT_STOP = 0x80
- PTRACE_EVENT_VFORK = 0x2
- PTRACE_EVENT_VFORK_DONE = 0x5
- PTRACE_GETEVENTMSG = 0x4201
- PTRACE_GETFPAREGS = 0x14
- PTRACE_GETFPREGS = 0xe
- PTRACE_GETFPREGS64 = 0x19
- PTRACE_GETREGS = 0xc
- PTRACE_GETREGS64 = 0x16
- PTRACE_GETREGSET = 0x4204
- PTRACE_GETSIGINFO = 0x4202
- PTRACE_GETSIGMASK = 0x420a
- PTRACE_INTERRUPT = 0x4207
- PTRACE_KILL = 0x8
- PTRACE_LISTEN = 0x4208
- PTRACE_O_EXITKILL = 0x100000
- PTRACE_O_MASK = 0x3000ff
- PTRACE_O_SUSPEND_SECCOMP = 0x200000
- PTRACE_O_TRACECLONE = 0x8
- PTRACE_O_TRACEEXEC = 0x10
- PTRACE_O_TRACEEXIT = 0x40
- PTRACE_O_TRACEFORK = 0x2
- PTRACE_O_TRACESECCOMP = 0x80
- PTRACE_O_TRACESYSGOOD = 0x1
- PTRACE_O_TRACEVFORK = 0x4
- PTRACE_O_TRACEVFORKDONE = 0x20
- PTRACE_PEEKDATA = 0x2
- PTRACE_PEEKSIGINFO = 0x4209
- PTRACE_PEEKSIGINFO_SHARED = 0x1
- PTRACE_PEEKTEXT = 0x1
- PTRACE_PEEKUSR = 0x3
- PTRACE_POKEDATA = 0x5
- PTRACE_POKETEXT = 0x4
- PTRACE_POKEUSR = 0x6
- PTRACE_READDATA = 0x10
- PTRACE_READTEXT = 0x12
- PTRACE_SECCOMP_GET_FILTER = 0x420c
- PTRACE_SEIZE = 0x4206
- PTRACE_SETFPAREGS = 0x15
- PTRACE_SETFPREGS = 0xf
- PTRACE_SETFPREGS64 = 0x1a
- PTRACE_SETOPTIONS = 0x4200
- PTRACE_SETREGS = 0xd
- PTRACE_SETREGS64 = 0x17
- PTRACE_SETREGSET = 0x4205
- PTRACE_SETSIGINFO = 0x4203
- PTRACE_SETSIGMASK = 0x420b
- PTRACE_SINGLESTEP = 0x9
- PTRACE_SPARC_DETACH = 0xb
- PTRACE_SYSCALL = 0x18
- PTRACE_TRACEME = 0x0
- PTRACE_WRITEDATA = 0x11
- PTRACE_WRITETEXT = 0x13
- PT_FP = 0x48
- PT_G0 = 0x10
- PT_G1 = 0x14
- PT_G2 = 0x18
- PT_G3 = 0x1c
- PT_G4 = 0x20
- PT_G5 = 0x24
- PT_G6 = 0x28
- PT_G7 = 0x2c
- PT_I0 = 0x30
- PT_I1 = 0x34
- PT_I2 = 0x38
- PT_I3 = 0x3c
- PT_I4 = 0x40
- PT_I5 = 0x44
- PT_I6 = 0x48
- PT_I7 = 0x4c
- PT_NPC = 0x8
- PT_PC = 0x4
- PT_PSR = 0x0
- PT_REGS_MAGIC = 0x57ac6c00
- PT_TNPC = 0x90
- PT_TPC = 0x88
- PT_TSTATE = 0x80
- PT_V9_FP = 0x70
- PT_V9_G0 = 0x0
- PT_V9_G1 = 0x8
- PT_V9_G2 = 0x10
- PT_V9_G3 = 0x18
- PT_V9_G4 = 0x20
- PT_V9_G5 = 0x28
- PT_V9_G6 = 0x30
- PT_V9_G7 = 0x38
- PT_V9_I0 = 0x40
- PT_V9_I1 = 0x48
- PT_V9_I2 = 0x50
- PT_V9_I3 = 0x58
- PT_V9_I4 = 0x60
- PT_V9_I5 = 0x68
- PT_V9_I6 = 0x70
- PT_V9_I7 = 0x78
- PT_V9_MAGIC = 0x9c
- PT_V9_TNPC = 0x90
- PT_V9_TPC = 0x88
- PT_V9_TSTATE = 0x80
- PT_V9_Y = 0x98
- PT_WIM = 0x10
- PT_Y = 0xc
- RLIMIT_AS = 0x9
- RLIMIT_CORE = 0x4
- RLIMIT_CPU = 0x0
- RLIMIT_DATA = 0x2
- RLIMIT_FSIZE = 0x1
- RLIMIT_NOFILE = 0x6
- RLIMIT_STACK = 0x3
- RLIM_INFINITY = -0x1
- RTAX_ADVMSS = 0x8
- RTAX_CC_ALGO = 0x10
- RTAX_CWND = 0x7
- RTAX_FEATURES = 0xc
- RTAX_FEATURE_ALLFRAG = 0x8
- RTAX_FEATURE_ECN = 0x1
- RTAX_FEATURE_MASK = 0xf
- RTAX_FEATURE_SACK = 0x2
- RTAX_FEATURE_TIMESTAMP = 0x4
- RTAX_HOPLIMIT = 0xa
- RTAX_INITCWND = 0xb
- RTAX_INITRWND = 0xe
- RTAX_LOCK = 0x1
- RTAX_MAX = 0x10
- RTAX_MTU = 0x2
- RTAX_QUICKACK = 0xf
- RTAX_REORDERING = 0x9
- RTAX_RTO_MIN = 0xd
- RTAX_RTT = 0x4
- RTAX_RTTVAR = 0x5
- RTAX_SSTHRESH = 0x6
- RTAX_UNSPEC = 0x0
- RTAX_WINDOW = 0x3
- RTA_ALIGNTO = 0x4
- RTA_MAX = 0x18
- RTCF_DIRECTSRC = 0x4000000
- RTCF_DOREDIRECT = 0x1000000
- RTCF_LOG = 0x2000000
- RTCF_MASQ = 0x400000
- RTCF_NAT = 0x800000
- RTCF_VALVE = 0x200000
- RTF_ADDRCLASSMASK = 0xf8000000
- RTF_ADDRCONF = 0x40000
- RTF_ALLONLINK = 0x20000
- RTF_BROADCAST = 0x10000000
- RTF_CACHE = 0x1000000
- RTF_DEFAULT = 0x10000
- RTF_DYNAMIC = 0x10
- RTF_FLOW = 0x2000000
- RTF_GATEWAY = 0x2
- RTF_HOST = 0x4
- RTF_INTERFACE = 0x40000000
- RTF_IRTT = 0x100
- RTF_LINKRT = 0x100000
- RTF_LOCAL = 0x80000000
- RTF_MODIFIED = 0x20
- RTF_MSS = 0x40
- RTF_MTU = 0x40
- RTF_MULTICAST = 0x20000000
- RTF_NAT = 0x8000000
- RTF_NOFORWARD = 0x1000
- RTF_NONEXTHOP = 0x200000
- RTF_NOPMTUDISC = 0x4000
- RTF_POLICY = 0x4000000
- RTF_REINSTATE = 0x8
- RTF_REJECT = 0x200
- RTF_STATIC = 0x400
- RTF_THROW = 0x2000
- RTF_UP = 0x1
- RTF_WINDOW = 0x80
- RTF_XRESOLVE = 0x800
- RTM_BASE = 0x10
- RTM_DELACTION = 0x31
- RTM_DELADDR = 0x15
- RTM_DELADDRLABEL = 0x49
- RTM_DELLINK = 0x11
- RTM_DELMDB = 0x55
- RTM_DELNEIGH = 0x1d
- RTM_DELNSID = 0x59
- RTM_DELQDISC = 0x25
- RTM_DELROUTE = 0x19
- RTM_DELRULE = 0x21
- RTM_DELTCLASS = 0x29
- RTM_DELTFILTER = 0x2d
- RTM_F_CLONED = 0x200
- RTM_F_EQUALIZE = 0x400
- RTM_F_LOOKUP_TABLE = 0x1000
- RTM_F_NOTIFY = 0x100
- RTM_F_PREFIX = 0x800
- RTM_GETACTION = 0x32
- RTM_GETADDR = 0x16
- RTM_GETADDRLABEL = 0x4a
- RTM_GETANYCAST = 0x3e
- RTM_GETDCB = 0x4e
- RTM_GETLINK = 0x12
- RTM_GETMDB = 0x56
- RTM_GETMULTICAST = 0x3a
- RTM_GETNEIGH = 0x1e
- RTM_GETNEIGHTBL = 0x42
- RTM_GETNETCONF = 0x52
- RTM_GETNSID = 0x5a
- RTM_GETQDISC = 0x26
- RTM_GETROUTE = 0x1a
- RTM_GETRULE = 0x22
- RTM_GETSTATS = 0x5e
- RTM_GETTCLASS = 0x2a
- RTM_GETTFILTER = 0x2e
- RTM_MAX = 0x5f
- RTM_NEWACTION = 0x30
- RTM_NEWADDR = 0x14
- RTM_NEWADDRLABEL = 0x48
- RTM_NEWLINK = 0x10
- RTM_NEWMDB = 0x54
- RTM_NEWNDUSEROPT = 0x44
- RTM_NEWNEIGH = 0x1c
- RTM_NEWNEIGHTBL = 0x40
- RTM_NEWNETCONF = 0x50
- RTM_NEWNSID = 0x58
- RTM_NEWPREFIX = 0x34
- RTM_NEWQDISC = 0x24
- RTM_NEWROUTE = 0x18
- RTM_NEWRULE = 0x20
- RTM_NEWSTATS = 0x5c
- RTM_NEWTCLASS = 0x28
- RTM_NEWTFILTER = 0x2c
- RTM_NR_FAMILIES = 0x14
- RTM_NR_MSGTYPES = 0x50
- RTM_SETDCB = 0x4f
- RTM_SETLINK = 0x13
- RTM_SETNEIGHTBL = 0x43
- RTNH_ALIGNTO = 0x4
- RTNH_COMPARE_MASK = 0x11
- RTNH_F_DEAD = 0x1
- RTNH_F_LINKDOWN = 0x10
- RTNH_F_OFFLOAD = 0x8
- RTNH_F_ONLINK = 0x4
- RTNH_F_PERVASIVE = 0x2
- RTN_MAX = 0xb
- RTPROT_BABEL = 0x2a
- RTPROT_BIRD = 0xc
- RTPROT_BOOT = 0x3
- RTPROT_DHCP = 0x10
- RTPROT_DNROUTED = 0xd
- RTPROT_GATED = 0x8
- RTPROT_KERNEL = 0x2
- RTPROT_MROUTED = 0x11
- RTPROT_MRT = 0xa
- RTPROT_NTK = 0xf
- RTPROT_RA = 0x9
- RTPROT_REDIRECT = 0x1
- RTPROT_STATIC = 0x4
- RTPROT_UNSPEC = 0x0
- RTPROT_XORP = 0xe
- RTPROT_ZEBRA = 0xb
- RT_CLASS_DEFAULT = 0xfd
- RT_CLASS_LOCAL = 0xff
- RT_CLASS_MAIN = 0xfe
- RT_CLASS_MAX = 0xff
- RT_CLASS_UNSPEC = 0x0
- RUSAGE_CHILDREN = -0x1
- RUSAGE_SELF = 0x0
- RUSAGE_THREAD = 0x1
- SCM_CREDENTIALS = 0x2
- SCM_RIGHTS = 0x1
- SCM_TIMESTAMP = 0x1d
- SCM_TIMESTAMPING = 0x23
- SCM_TIMESTAMPNS = 0x21
- SCM_WIFI_STATUS = 0x25
- SHUT_RD = 0x0
- SHUT_RDWR = 0x2
- SHUT_WR = 0x1
- SIOCADDDLCI = 0x8980
- SIOCADDMULTI = 0x8931
- SIOCADDRT = 0x890b
- SIOCATMARK = 0x8905
- SIOCBONDCHANGEACTIVE = 0x8995
- SIOCBONDENSLAVE = 0x8990
- SIOCBONDINFOQUERY = 0x8994
- SIOCBONDRELEASE = 0x8991
- SIOCBONDSETHWADDR = 0x8992
- SIOCBONDSLAVEINFOQUERY = 0x8993
- SIOCBRADDBR = 0x89a0
- SIOCBRADDIF = 0x89a2
- SIOCBRDELBR = 0x89a1
- SIOCBRDELIF = 0x89a3
- SIOCDARP = 0x8953
- SIOCDELDLCI = 0x8981
- SIOCDELMULTI = 0x8932
- SIOCDELRT = 0x890c
- SIOCDEVPRIVATE = 0x89f0
- SIOCDIFADDR = 0x8936
- SIOCDRARP = 0x8960
- SIOCETHTOOL = 0x8946
- SIOCGARP = 0x8954
- SIOCGHWTSTAMP = 0x89b1
- SIOCGIFADDR = 0x8915
- SIOCGIFBR = 0x8940
- SIOCGIFBRDADDR = 0x8919
- SIOCGIFCONF = 0x8912
- SIOCGIFCOUNT = 0x8938
- SIOCGIFDSTADDR = 0x8917
- SIOCGIFENCAP = 0x8925
- SIOCGIFFLAGS = 0x8913
- SIOCGIFHWADDR = 0x8927
- SIOCGIFINDEX = 0x8933
- SIOCGIFMAP = 0x8970
- SIOCGIFMEM = 0x891f
- SIOCGIFMETRIC = 0x891d
- SIOCGIFMTU = 0x8921
- SIOCGIFNAME = 0x8910
- SIOCGIFNETMASK = 0x891b
- SIOCGIFPFLAGS = 0x8935
- SIOCGIFSLAVE = 0x8929
- SIOCGIFTXQLEN = 0x8942
- SIOCGIFVLAN = 0x8982
- SIOCGMIIPHY = 0x8947
- SIOCGMIIREG = 0x8948
- SIOCGPGRP = 0x8904
- SIOCGRARP = 0x8961
- SIOCGSTAMP = 0x8906
- SIOCGSTAMPNS = 0x8907
- SIOCINQ = 0x4004667f
- SIOCOUTQ = 0x40047473
- SIOCOUTQNSD = 0x894b
- SIOCPROTOPRIVATE = 0x89e0
- SIOCRTMSG = 0x890d
- SIOCSARP = 0x8955
- SIOCSHWTSTAMP = 0x89b0
- SIOCSIFADDR = 0x8916
- SIOCSIFBR = 0x8941
- SIOCSIFBRDADDR = 0x891a
- SIOCSIFDSTADDR = 0x8918
- SIOCSIFENCAP = 0x8926
- SIOCSIFFLAGS = 0x8914
- SIOCSIFHWADDR = 0x8924
- SIOCSIFHWBROADCAST = 0x8937
- SIOCSIFLINK = 0x8911
- SIOCSIFMAP = 0x8971
- SIOCSIFMEM = 0x8920
- SIOCSIFMETRIC = 0x891e
- SIOCSIFMTU = 0x8922
- SIOCSIFNAME = 0x8923
- SIOCSIFNETMASK = 0x891c
- SIOCSIFPFLAGS = 0x8934
- SIOCSIFSLAVE = 0x8930
- SIOCSIFTXQLEN = 0x8943
- SIOCSIFVLAN = 0x8983
- SIOCSMIIREG = 0x8949
- SIOCSPGRP = 0x8902
- SIOCSRARP = 0x8962
- SIOCWANDEV = 0x894a
- SOCK_CLOEXEC = 0x400000
- SOCK_DCCP = 0x6
- SOCK_DGRAM = 0x2
- SOCK_NONBLOCK = 0x4000
- SOCK_PACKET = 0xa
- SOCK_RAW = 0x3
- SOCK_RDM = 0x4
- SOCK_SEQPACKET = 0x5
- SOCK_STREAM = 0x1
- SOL_AAL = 0x109
- SOL_ALG = 0x117
- SOL_ATM = 0x108
- SOL_CAIF = 0x116
- SOL_DCCP = 0x10d
- SOL_DECNET = 0x105
- SOL_ICMPV6 = 0x3a
- SOL_IP = 0x0
- SOL_IPV6 = 0x29
- SOL_IRDA = 0x10a
- SOL_IUCV = 0x115
- SOL_KCM = 0x119
- SOL_LLC = 0x10c
- SOL_NETBEUI = 0x10b
- SOL_NETLINK = 0x10e
- SOL_NFC = 0x118
- SOL_PACKET = 0x107
- SOL_PNPIPE = 0x113
- SOL_PPPOL2TP = 0x111
- SOL_RAW = 0xff
- SOL_RDS = 0x114
- SOL_RXRPC = 0x110
- SOL_SOCKET = 0xffff
- SOL_TCP = 0x6
- SOL_TIPC = 0x10f
- SOL_X25 = 0x106
- SOMAXCONN = 0x80
- SO_ACCEPTCONN = 0x8000
- SO_ATTACH_BPF = 0x34
- SO_ATTACH_FILTER = 0x1a
- SO_ATTACH_REUSEPORT_CBPF = 0x35
- SO_ATTACH_REUSEPORT_EBPF = 0x36
- SO_BINDTODEVICE = 0xd
- SO_BPF_EXTENSIONS = 0x32
- SO_BROADCAST = 0x20
- SO_BSDCOMPAT = 0x400
- SO_BUSY_POLL = 0x30
- SO_CNX_ADVICE = 0x37
- SO_DEBUG = 0x1
- SO_DETACH_BPF = 0x1b
- SO_DETACH_FILTER = 0x1b
- SO_DOMAIN = 0x1029
- SO_DONTROUTE = 0x10
- SO_ERROR = 0x1007
- SO_GET_FILTER = 0x1a
- SO_INCOMING_CPU = 0x33
- SO_KEEPALIVE = 0x8
- SO_LINGER = 0x80
- SO_LOCK_FILTER = 0x28
- SO_MARK = 0x22
- SO_MAX_PACING_RATE = 0x31
- SO_NOFCS = 0x27
- SO_NO_CHECK = 0xb
- SO_OOBINLINE = 0x100
- SO_PASSCRED = 0x2
- SO_PASSSEC = 0x1f
- SO_PEEK_OFF = 0x26
- SO_PEERCRED = 0x40
- SO_PEERNAME = 0x1c
- SO_PEERSEC = 0x1e
- SO_PRIORITY = 0xc
- SO_PROTOCOL = 0x1028
- SO_RCVBUF = 0x1002
- SO_RCVBUFFORCE = 0x100b
- SO_RCVLOWAT = 0x800
- SO_RCVTIMEO = 0x2000
- SO_REUSEADDR = 0x4
- SO_REUSEPORT = 0x200
- SO_RXQ_OVFL = 0x24
- SO_SECURITY_AUTHENTICATION = 0x5001
- SO_SECURITY_ENCRYPTION_NETWORK = 0x5004
- SO_SECURITY_ENCRYPTION_TRANSPORT = 0x5002
- SO_SELECT_ERR_QUEUE = 0x29
- SO_SNDBUF = 0x1001
- SO_SNDBUFFORCE = 0x100a
- SO_SNDLOWAT = 0x1000
- SO_SNDTIMEO = 0x4000
- SO_TIMESTAMP = 0x1d
- SO_TIMESTAMPING = 0x23
- SO_TIMESTAMPNS = 0x21
- SO_TYPE = 0x1008
- SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
- SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
- SO_VM_SOCKETS_BUFFER_SIZE = 0x0
- SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
- SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
- SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
- SO_VM_SOCKETS_TRUSTED = 0x5
- SO_WIFI_STATUS = 0x25
- SPLICE_F_GIFT = 0x8
- SPLICE_F_MORE = 0x4
- SPLICE_F_MOVE = 0x1
- SPLICE_F_NONBLOCK = 0x2
- S_BLKSIZE = 0x200
- S_IEXEC = 0x40
- S_IFBLK = 0x6000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFIFO = 0x1000
- S_IFLNK = 0xa000
- S_IFMT = 0xf000
- S_IFREG = 0x8000
- S_IFSOCK = 0xc000
- S_IREAD = 0x100
- S_IRGRP = 0x20
- S_IROTH = 0x4
- S_IRUSR = 0x100
- S_IRWXG = 0x38
- S_IRWXO = 0x7
- S_IRWXU = 0x1c0
- S_ISGID = 0x400
- S_ISUID = 0x800
- S_ISVTX = 0x200
- S_IWGRP = 0x10
- S_IWOTH = 0x2
- S_IWRITE = 0x80
- S_IWUSR = 0x80
- S_IXGRP = 0x8
- S_IXOTH = 0x1
- S_IXUSR = 0x40
- TAB0 = 0x0
- TAB1 = 0x800
- TAB2 = 0x1000
- TAB3 = 0x1800
- TABDLY = 0x1800
- TCFLSH = 0x20005407
- TCGETA = 0x40125401
- TCGETS = 0x40245408
- TCGETS2 = 0x402c540c
- TCIFLUSH = 0x0
- TCIOFF = 0x2
- TCIOFLUSH = 0x2
- TCION = 0x3
- TCOFLUSH = 0x1
- TCOOFF = 0x0
- TCOON = 0x1
- TCP_CC_INFO = 0x1a
- TCP_CONGESTION = 0xd
- TCP_COOKIE_IN_ALWAYS = 0x1
- TCP_COOKIE_MAX = 0x10
- TCP_COOKIE_MIN = 0x8
- TCP_COOKIE_OUT_NEVER = 0x2
- TCP_COOKIE_PAIR_SIZE = 0x20
- TCP_COOKIE_TRANSACTIONS = 0xf
- TCP_CORK = 0x3
- TCP_DEFER_ACCEPT = 0x9
- TCP_FASTOPEN = 0x17
- TCP_INFO = 0xb
- TCP_KEEPCNT = 0x6
- TCP_KEEPIDLE = 0x4
- TCP_KEEPINTVL = 0x5
- TCP_LINGER2 = 0x8
- TCP_MAXSEG = 0x2
- TCP_MAXWIN = 0xffff
- TCP_MAX_WINSHIFT = 0xe
- TCP_MD5SIG = 0xe
- TCP_MD5SIG_MAXKEYLEN = 0x50
- TCP_MSS = 0x200
- TCP_MSS_DEFAULT = 0x218
- TCP_MSS_DESIRED = 0x4c4
- TCP_NODELAY = 0x1
- TCP_NOTSENT_LOWAT = 0x19
- TCP_QUEUE_SEQ = 0x15
- TCP_QUICKACK = 0xc
- TCP_REPAIR = 0x13
- TCP_REPAIR_OPTIONS = 0x16
- TCP_REPAIR_QUEUE = 0x14
- TCP_SAVED_SYN = 0x1c
- TCP_SAVE_SYN = 0x1b
- TCP_SYNCNT = 0x7
- TCP_S_DATA_IN = 0x4
- TCP_S_DATA_OUT = 0x8
- TCP_THIN_DUPACK = 0x11
- TCP_THIN_LINEAR_TIMEOUTS = 0x10
- TCP_TIMESTAMP = 0x18
- TCP_USER_TIMEOUT = 0x12
- TCP_WINDOW_CLAMP = 0xa
- TCSAFLUSH = 0x2
- TCSBRK = 0x20005405
- TCSBRKP = 0x5425
- TCSETA = 0x80125402
- TCSETAF = 0x80125404
- TCSETAW = 0x80125403
- TCSETS = 0x80245409
- TCSETS2 = 0x802c540d
- TCSETSF = 0x8024540b
- TCSETSF2 = 0x802c540f
- TCSETSW = 0x8024540a
- TCSETSW2 = 0x802c540e
- TCXONC = 0x20005406
- TIOCCBRK = 0x2000747a
- TIOCCONS = 0x20007424
- TIOCEXCL = 0x2000740d
- TIOCGDEV = 0x40045432
- TIOCGETD = 0x40047400
- TIOCGEXCL = 0x40045440
- TIOCGICOUNT = 0x545d
- TIOCGLCKTRMIOS = 0x5456
- TIOCGPGRP = 0x40047483
- TIOCGPKT = 0x40045438
- TIOCGPTLCK = 0x40045439
- TIOCGPTN = 0x40047486
- TIOCGRS485 = 0x40205441
- TIOCGSERIAL = 0x541e
- TIOCGSID = 0x40047485
- TIOCGSOFTCAR = 0x40047464
- TIOCGWINSZ = 0x40087468
- TIOCINQ = 0x4004667f
- TIOCLINUX = 0x541c
- TIOCMBIC = 0x8004746b
- TIOCMBIS = 0x8004746c
- TIOCMGET = 0x4004746a
- TIOCMIWAIT = 0x545c
- TIOCMSET = 0x8004746d
- TIOCM_CAR = 0x40
- TIOCM_CD = 0x40
- TIOCM_CTS = 0x20
- TIOCM_DSR = 0x100
- TIOCM_DTR = 0x2
- TIOCM_LE = 0x1
- TIOCM_LOOP = 0x8000
- TIOCM_OUT1 = 0x2000
- TIOCM_OUT2 = 0x4000
- TIOCM_RI = 0x80
- TIOCM_RNG = 0x80
- TIOCM_RTS = 0x4
- TIOCM_SR = 0x10
- TIOCM_ST = 0x8
- TIOCNOTTY = 0x20007471
- TIOCNXCL = 0x2000740e
- TIOCOUTQ = 0x40047473
- TIOCPKT = 0x80047470
- TIOCPKT_DATA = 0x0
- TIOCPKT_DOSTOP = 0x20
- TIOCPKT_FLUSHREAD = 0x1
- TIOCPKT_FLUSHWRITE = 0x2
- TIOCPKT_IOCTL = 0x40
- TIOCPKT_NOSTOP = 0x10
- TIOCPKT_START = 0x8
- TIOCPKT_STOP = 0x4
- TIOCSBRK = 0x2000747b
- TIOCSCTTY = 0x20007484
- TIOCSERCONFIG = 0x5453
- TIOCSERGETLSR = 0x5459
- TIOCSERGETMULTI = 0x545a
- TIOCSERGSTRUCT = 0x5458
- TIOCSERGWILD = 0x5454
- TIOCSERSETMULTI = 0x545b
- TIOCSERSWILD = 0x5455
- TIOCSER_TEMT = 0x1
- TIOCSETD = 0x80047401
- TIOCSIG = 0x80047488
- TIOCSLCKTRMIOS = 0x5457
- TIOCSPGRP = 0x80047482
- TIOCSPTLCK = 0x80047487
- TIOCSRS485 = 0xc0205442
- TIOCSSERIAL = 0x541f
- TIOCSSOFTCAR = 0x80047465
- TIOCSTART = 0x2000746e
- TIOCSTI = 0x80017472
- TIOCSTOP = 0x2000746f
- TIOCSWINSZ = 0x80087467
- TIOCVHANGUP = 0x20005437
- TOSTOP = 0x100
- TUNATTACHFILTER = 0x801054d5
- TUNDETACHFILTER = 0x801054d6
- TUNGETFEATURES = 0x400454cf
- TUNGETFILTER = 0x401054db
- TUNGETIFF = 0x400454d2
- TUNGETSNDBUF = 0x400454d3
- TUNGETVNETBE = 0x400454df
- TUNGETVNETHDRSZ = 0x400454d7
- TUNGETVNETLE = 0x400454dd
- TUNSETDEBUG = 0x800454c9
- TUNSETGROUP = 0x800454ce
- TUNSETIFF = 0x800454ca
- TUNSETIFINDEX = 0x800454da
- TUNSETLINK = 0x800454cd
- TUNSETNOCSUM = 0x800454c8
- TUNSETOFFLOAD = 0x800454d0
- TUNSETOWNER = 0x800454cc
- TUNSETPERSIST = 0x800454cb
- TUNSETQUEUE = 0x800454d9
- TUNSETSNDBUF = 0x800454d4
- TUNSETTXFILTER = 0x800454d1
- TUNSETVNETBE = 0x800454de
- TUNSETVNETHDRSZ = 0x800454d8
- TUNSETVNETLE = 0x800454dc
- VDISCARD = 0xd
- VDSUSP = 0xb
- VEOF = 0x4
- VEOL = 0x5
- VEOL2 = 0x6
- VERASE = 0x2
- VINTR = 0x0
- VKILL = 0x3
- VLNEXT = 0xf
- VMADDR_CID_ANY = 0xffffffff
- VMADDR_CID_HOST = 0x2
- VMADDR_CID_HYPERVISOR = 0x0
- VMADDR_CID_RESERVED = 0x1
- VMADDR_PORT_ANY = 0xffffffff
- VMIN = 0x4
- VQUIT = 0x1
- VREPRINT = 0xc
- VSTART = 0x8
- VSTOP = 0x9
- VSUSP = 0xa
- VSWTC = 0x7
- VT0 = 0x0
- VT1 = 0x4000
- VTDLY = 0x4000
- VTIME = 0x5
- VWERASE = 0xe
- WALL = 0x40000000
- WCLONE = 0x80000000
- WCONTINUED = 0x8
- WEXITED = 0x4
- WNOHANG = 0x1
- WNOTHREAD = 0x20000000
- WNOWAIT = 0x1000000
- WORDSIZE = 0x40
- WRAP = 0x20000
- WSTOPPED = 0x2
- WUNTRACED = 0x2
- XCASE = 0x4
- XTABS = 0x1800
- __TIOCFLUSH = 0x80047410
+ AAFS_MAGIC = 0x5a3c69f0
+ ADFS_SUPER_MAGIC = 0xadf5
+ AFFS_SUPER_MAGIC = 0xadff
+ AFS_FS_MAGIC = 0x6b414653
+ AFS_SUPER_MAGIC = 0x5346414f
+ AF_ALG = 0x26
+ AF_APPLETALK = 0x5
+ AF_ASH = 0x12
+ AF_ATMPVC = 0x8
+ AF_ATMSVC = 0x14
+ AF_AX25 = 0x3
+ AF_BLUETOOTH = 0x1f
+ AF_BRIDGE = 0x7
+ AF_CAIF = 0x25
+ AF_CAN = 0x1d
+ AF_DECnet = 0xc
+ AF_ECONET = 0x13
+ AF_FILE = 0x1
+ AF_IB = 0x1b
+ AF_IEEE802154 = 0x24
+ AF_INET = 0x2
+ AF_INET6 = 0xa
+ AF_IPX = 0x4
+ AF_IRDA = 0x17
+ AF_ISDN = 0x22
+ AF_IUCV = 0x20
+ AF_KCM = 0x29
+ AF_KEY = 0xf
+ AF_LLC = 0x1a
+ AF_LOCAL = 0x1
+ AF_MAX = 0x2c
+ AF_MPLS = 0x1c
+ AF_NETBEUI = 0xd
+ AF_NETLINK = 0x10
+ AF_NETROM = 0x6
+ AF_NFC = 0x27
+ AF_PACKET = 0x11
+ AF_PHONET = 0x23
+ AF_PPPOX = 0x18
+ AF_QIPCRTR = 0x2a
+ AF_RDS = 0x15
+ AF_ROSE = 0xb
+ AF_ROUTE = 0x10
+ AF_RXRPC = 0x21
+ AF_SECURITY = 0xe
+ AF_SMC = 0x2b
+ AF_SNA = 0x16
+ AF_TIPC = 0x1e
+ AF_UNIX = 0x1
+ AF_UNSPEC = 0x0
+ AF_VSOCK = 0x28
+ AF_WANPIPE = 0x19
+ AF_X25 = 0x9
+ AF_XDP = 0x2c
+ ALG_OP_DECRYPT = 0x0
+ ALG_OP_ENCRYPT = 0x1
+ ALG_SET_AEAD_ASSOCLEN = 0x4
+ ALG_SET_AEAD_AUTHSIZE = 0x5
+ ALG_SET_IV = 0x2
+ ALG_SET_KEY = 0x1
+ ALG_SET_OP = 0x3
+ ANON_INODE_FS_MAGIC = 0x9041934
+ ARPHRD_6LOWPAN = 0x339
+ ARPHRD_ADAPT = 0x108
+ ARPHRD_APPLETLK = 0x8
+ ARPHRD_ARCNET = 0x7
+ ARPHRD_ASH = 0x30d
+ ARPHRD_ATM = 0x13
+ ARPHRD_AX25 = 0x3
+ ARPHRD_BIF = 0x307
+ ARPHRD_CAIF = 0x336
+ ARPHRD_CAN = 0x118
+ ARPHRD_CHAOS = 0x5
+ ARPHRD_CISCO = 0x201
+ ARPHRD_CSLIP = 0x101
+ ARPHRD_CSLIP6 = 0x103
+ ARPHRD_DDCMP = 0x205
+ ARPHRD_DLCI = 0xf
+ ARPHRD_ECONET = 0x30e
+ ARPHRD_EETHER = 0x2
+ ARPHRD_ETHER = 0x1
+ ARPHRD_EUI64 = 0x1b
+ ARPHRD_FCAL = 0x311
+ ARPHRD_FCFABRIC = 0x313
+ ARPHRD_FCPL = 0x312
+ ARPHRD_FCPP = 0x310
+ ARPHRD_FDDI = 0x306
+ ARPHRD_FRAD = 0x302
+ ARPHRD_HDLC = 0x201
+ ARPHRD_HIPPI = 0x30c
+ ARPHRD_HWX25 = 0x110
+ ARPHRD_IEEE1394 = 0x18
+ ARPHRD_IEEE802 = 0x6
+ ARPHRD_IEEE80211 = 0x321
+ ARPHRD_IEEE80211_PRISM = 0x322
+ ARPHRD_IEEE80211_RADIOTAP = 0x323
+ ARPHRD_IEEE802154 = 0x324
+ ARPHRD_IEEE802154_MONITOR = 0x325
+ ARPHRD_IEEE802_TR = 0x320
+ ARPHRD_INFINIBAND = 0x20
+ ARPHRD_IP6GRE = 0x337
+ ARPHRD_IPDDP = 0x309
+ ARPHRD_IPGRE = 0x30a
+ ARPHRD_IRDA = 0x30f
+ ARPHRD_LAPB = 0x204
+ ARPHRD_LOCALTLK = 0x305
+ ARPHRD_LOOPBACK = 0x304
+ ARPHRD_METRICOM = 0x17
+ ARPHRD_NETLINK = 0x338
+ ARPHRD_NETROM = 0x0
+ ARPHRD_NONE = 0xfffe
+ ARPHRD_PHONET = 0x334
+ ARPHRD_PHONET_PIPE = 0x335
+ ARPHRD_PIMREG = 0x30b
+ ARPHRD_PPP = 0x200
+ ARPHRD_PRONET = 0x4
+ ARPHRD_RAWHDLC = 0x206
+ ARPHRD_RAWIP = 0x207
+ ARPHRD_ROSE = 0x10e
+ ARPHRD_RSRVD = 0x104
+ ARPHRD_SIT = 0x308
+ ARPHRD_SKIP = 0x303
+ ARPHRD_SLIP = 0x100
+ ARPHRD_SLIP6 = 0x102
+ ARPHRD_TUNNEL = 0x300
+ ARPHRD_TUNNEL6 = 0x301
+ ARPHRD_VOID = 0xffff
+ ARPHRD_VSOCKMON = 0x33a
+ ARPHRD_X25 = 0x10f
+ ASI_LEON_DFLUSH = 0x11
+ ASI_LEON_IFLUSH = 0x10
+ ASI_LEON_MMUFLUSH = 0x18
+ AUTOFS_SUPER_MAGIC = 0x187
+ B0 = 0x0
+ B1000000 = 0x1008
+ B110 = 0x3
+ B115200 = 0x1002
+ B1152000 = 0x1009
+ B1200 = 0x9
+ B134 = 0x4
+ B150 = 0x5
+ B1500000 = 0x100a
+ B1800 = 0xa
+ B19200 = 0xe
+ B200 = 0x6
+ B2000000 = 0x100b
+ B230400 = 0x1003
+ B2400 = 0xb
+ B2500000 = 0x100c
+ B300 = 0x7
+ B3000000 = 0x100d
+ B3500000 = 0x100e
+ B38400 = 0xf
+ B4000000 = 0x100f
+ B460800 = 0x1004
+ B4800 = 0xc
+ B50 = 0x1
+ B500000 = 0x1005
+ B57600 = 0x1001
+ B576000 = 0x1006
+ B600 = 0x8
+ B75 = 0x2
+ B921600 = 0x1007
+ B9600 = 0xd
+ BALLOON_KVM_MAGIC = 0x13661366
+ BDEVFS_MAGIC = 0x62646576
+ BINFMTFS_MAGIC = 0x42494e4d
+ BLKBSZGET = 0x40081270
+ BLKBSZSET = 0x80081271
+ BLKFLSBUF = 0x20001261
+ BLKFRAGET = 0x20001265
+ BLKFRASET = 0x20001264
+ BLKGETSIZE = 0x20001260
+ BLKGETSIZE64 = 0x40081272
+ BLKPBSZGET = 0x2000127b
+ BLKRAGET = 0x20001263
+ BLKRASET = 0x20001262
+ BLKROGET = 0x2000125e
+ BLKROSET = 0x2000125d
+ BLKRRPART = 0x2000125f
+ BLKSECTGET = 0x20001267
+ BLKSECTSET = 0x20001266
+ BLKSSZGET = 0x20001268
+ BOTHER = 0x1000
+ BPF_A = 0x10
+ BPF_ABS = 0x20
+ BPF_ADD = 0x0
+ BPF_ALU = 0x4
+ BPF_AND = 0x50
+ BPF_B = 0x10
+ BPF_DIV = 0x30
+ BPF_FS_MAGIC = 0xcafe4a11
+ BPF_H = 0x8
+ BPF_IMM = 0x0
+ BPF_IND = 0x40
+ BPF_JA = 0x0
+ BPF_JEQ = 0x10
+ BPF_JGE = 0x30
+ BPF_JGT = 0x20
+ BPF_JMP = 0x5
+ BPF_JSET = 0x40
+ BPF_K = 0x0
+ BPF_LD = 0x0
+ BPF_LDX = 0x1
+ BPF_LEN = 0x80
+ BPF_LL_OFF = -0x200000
+ BPF_LSH = 0x60
+ BPF_MAJOR_VERSION = 0x1
+ BPF_MAXINSNS = 0x1000
+ BPF_MEM = 0x60
+ BPF_MEMWORDS = 0x10
+ BPF_MINOR_VERSION = 0x1
+ BPF_MISC = 0x7
+ BPF_MOD = 0x90
+ BPF_MSH = 0xa0
+ BPF_MUL = 0x20
+ BPF_NEG = 0x80
+ BPF_NET_OFF = -0x100000
+ BPF_OR = 0x40
+ BPF_RET = 0x6
+ BPF_RSH = 0x70
+ BPF_ST = 0x2
+ BPF_STX = 0x3
+ BPF_SUB = 0x10
+ BPF_TAX = 0x0
+ BPF_TXA = 0x80
+ BPF_W = 0x0
+ BPF_X = 0x8
+ BPF_XOR = 0xa0
+ BRKINT = 0x2
+ BS0 = 0x0
+ BS1 = 0x2000
+ BSDLY = 0x2000
+ BTRFS_SUPER_MAGIC = 0x9123683e
+ BTRFS_TEST_MAGIC = 0x73727279
+ CAN_BCM = 0x2
+ CAN_EFF_FLAG = 0x80000000
+ CAN_EFF_ID_BITS = 0x1d
+ CAN_EFF_MASK = 0x1fffffff
+ CAN_ERR_FLAG = 0x20000000
+ CAN_ERR_MASK = 0x1fffffff
+ CAN_INV_FILTER = 0x20000000
+ CAN_ISOTP = 0x6
+ CAN_MAX_DLC = 0x8
+ CAN_MAX_DLEN = 0x8
+ CAN_MCNET = 0x5
+ CAN_MTU = 0x10
+ CAN_NPROTO = 0x7
+ CAN_RAW = 0x1
+ CAN_RAW_FILTER_MAX = 0x200
+ CAN_RTR_FLAG = 0x40000000
+ CAN_SFF_ID_BITS = 0xb
+ CAN_SFF_MASK = 0x7ff
+ CAN_TP16 = 0x3
+ CAN_TP20 = 0x4
+ CBAUD = 0x100f
+ CBAUDEX = 0x1000
+ CFLUSH = 0xf
+ CGROUP2_SUPER_MAGIC = 0x63677270
+ CGROUP_SUPER_MAGIC = 0x27e0eb
+ CIBAUD = 0x100f0000
+ CLOCAL = 0x800
+ CLOCK_BOOTTIME = 0x7
+ CLOCK_BOOTTIME_ALARM = 0x9
+ CLOCK_DEFAULT = 0x0
+ CLOCK_EXT = 0x1
+ CLOCK_INT = 0x2
+ CLOCK_MONOTONIC = 0x1
+ CLOCK_MONOTONIC_COARSE = 0x6
+ CLOCK_MONOTONIC_RAW = 0x4
+ CLOCK_PROCESS_CPUTIME_ID = 0x2
+ CLOCK_REALTIME = 0x0
+ CLOCK_REALTIME_ALARM = 0x8
+ CLOCK_REALTIME_COARSE = 0x5
+ CLOCK_TAI = 0xb
+ CLOCK_THREAD_CPUTIME_ID = 0x3
+ CLOCK_TXFROMRX = 0x4
+ CLOCK_TXINT = 0x3
+ CLONE_CHILD_CLEARTID = 0x200000
+ CLONE_CHILD_SETTID = 0x1000000
+ CLONE_DETACHED = 0x400000
+ CLONE_FILES = 0x400
+ CLONE_FS = 0x200
+ CLONE_IO = 0x80000000
+ CLONE_NEWCGROUP = 0x2000000
+ CLONE_NEWIPC = 0x8000000
+ CLONE_NEWNET = 0x40000000
+ CLONE_NEWNS = 0x20000
+ CLONE_NEWPID = 0x20000000
+ CLONE_NEWUSER = 0x10000000
+ CLONE_NEWUTS = 0x4000000
+ CLONE_PARENT = 0x8000
+ CLONE_PARENT_SETTID = 0x100000
+ CLONE_PTRACE = 0x2000
+ CLONE_SETTLS = 0x80000
+ CLONE_SIGHAND = 0x800
+ CLONE_SYSVSEM = 0x40000
+ CLONE_THREAD = 0x10000
+ CLONE_UNTRACED = 0x800000
+ CLONE_VFORK = 0x4000
+ CLONE_VM = 0x100
+ CMSPAR = 0x40000000
+ CODA_SUPER_MAGIC = 0x73757245
+ CR0 = 0x0
+ CR1 = 0x200
+ CR2 = 0x400
+ CR3 = 0x600
+ CRAMFS_MAGIC = 0x28cd3d45
+ CRDLY = 0x600
+ CREAD = 0x80
+ CRTSCTS = 0x80000000
+ CS5 = 0x0
+ CS6 = 0x10
+ CS7 = 0x20
+ CS8 = 0x30
+ CSIGNAL = 0xff
+ CSIZE = 0x30
+ CSTART = 0x11
+ CSTATUS = 0x0
+ CSTOP = 0x13
+ CSTOPB = 0x40
+ CSUSP = 0x1a
+ DAXFS_MAGIC = 0x64646178
+ DEBUGFS_MAGIC = 0x64626720
+ DEVPTS_SUPER_MAGIC = 0x1cd1
+ DT_BLK = 0x6
+ DT_CHR = 0x2
+ DT_DIR = 0x4
+ DT_FIFO = 0x1
+ DT_LNK = 0xa
+ DT_REG = 0x8
+ DT_SOCK = 0xc
+ DT_UNKNOWN = 0x0
+ DT_WHT = 0xe
+ ECHO = 0x8
+ ECHOCTL = 0x200
+ ECHOE = 0x10
+ ECHOK = 0x20
+ ECHOKE = 0x800
+ ECHONL = 0x40
+ ECHOPRT = 0x400
+ ECRYPTFS_SUPER_MAGIC = 0xf15f
+ EFD_CLOEXEC = 0x400000
+ EFD_NONBLOCK = 0x4000
+ EFD_SEMAPHORE = 0x1
+ EFIVARFS_MAGIC = 0xde5e81e4
+ EFS_SUPER_MAGIC = 0x414a53
+ EMT_TAGOVF = 0x1
+ ENCODING_DEFAULT = 0x0
+ ENCODING_FM_MARK = 0x3
+ ENCODING_FM_SPACE = 0x4
+ ENCODING_MANCHESTER = 0x5
+ ENCODING_NRZ = 0x1
+ ENCODING_NRZI = 0x2
+ EPOLLERR = 0x8
+ EPOLLET = 0x80000000
+ EPOLLEXCLUSIVE = 0x10000000
+ EPOLLHUP = 0x10
+ EPOLLIN = 0x1
+ EPOLLMSG = 0x400
+ EPOLLONESHOT = 0x40000000
+ EPOLLOUT = 0x4
+ EPOLLPRI = 0x2
+ EPOLLRDBAND = 0x80
+ EPOLLRDHUP = 0x2000
+ EPOLLRDNORM = 0x40
+ EPOLLWAKEUP = 0x20000000
+ EPOLLWRBAND = 0x200
+ EPOLLWRNORM = 0x100
+ EPOLL_CLOEXEC = 0x400000
+ EPOLL_CTL_ADD = 0x1
+ EPOLL_CTL_DEL = 0x2
+ EPOLL_CTL_MOD = 0x3
+ ETH_P_1588 = 0x88f7
+ ETH_P_8021AD = 0x88a8
+ ETH_P_8021AH = 0x88e7
+ ETH_P_8021Q = 0x8100
+ ETH_P_80221 = 0x8917
+ ETH_P_802_2 = 0x4
+ ETH_P_802_3 = 0x1
+ ETH_P_802_3_MIN = 0x600
+ ETH_P_802_EX1 = 0x88b5
+ ETH_P_AARP = 0x80f3
+ ETH_P_AF_IUCV = 0xfbfb
+ ETH_P_ALL = 0x3
+ ETH_P_AOE = 0x88a2
+ ETH_P_ARCNET = 0x1a
+ ETH_P_ARP = 0x806
+ ETH_P_ATALK = 0x809b
+ ETH_P_ATMFATE = 0x8884
+ ETH_P_ATMMPOA = 0x884c
+ ETH_P_AX25 = 0x2
+ ETH_P_BATMAN = 0x4305
+ ETH_P_BPQ = 0x8ff
+ ETH_P_CAIF = 0xf7
+ ETH_P_CAN = 0xc
+ ETH_P_CANFD = 0xd
+ ETH_P_CONTROL = 0x16
+ ETH_P_CUST = 0x6006
+ ETH_P_DDCMP = 0x6
+ ETH_P_DEC = 0x6000
+ ETH_P_DIAG = 0x6005
+ ETH_P_DNA_DL = 0x6001
+ ETH_P_DNA_RC = 0x6002
+ ETH_P_DNA_RT = 0x6003
+ ETH_P_DSA = 0x1b
+ ETH_P_ECONET = 0x18
+ ETH_P_EDSA = 0xdada
+ ETH_P_ERSPAN = 0x88be
+ ETH_P_ERSPAN2 = 0x22eb
+ ETH_P_FCOE = 0x8906
+ ETH_P_FIP = 0x8914
+ ETH_P_HDLC = 0x19
+ ETH_P_HSR = 0x892f
+ ETH_P_IBOE = 0x8915
+ ETH_P_IEEE802154 = 0xf6
+ ETH_P_IEEEPUP = 0xa00
+ ETH_P_IEEEPUPAT = 0xa01
+ ETH_P_IFE = 0xed3e
+ ETH_P_IP = 0x800
+ ETH_P_IPV6 = 0x86dd
+ ETH_P_IPX = 0x8137
+ ETH_P_IRDA = 0x17
+ ETH_P_LAT = 0x6004
+ ETH_P_LINK_CTL = 0x886c
+ ETH_P_LOCALTALK = 0x9
+ ETH_P_LOOP = 0x60
+ ETH_P_LOOPBACK = 0x9000
+ ETH_P_MACSEC = 0x88e5
+ ETH_P_MAP = 0xf9
+ ETH_P_MOBITEX = 0x15
+ ETH_P_MPLS_MC = 0x8848
+ ETH_P_MPLS_UC = 0x8847
+ ETH_P_MVRP = 0x88f5
+ ETH_P_NCSI = 0x88f8
+ ETH_P_NSH = 0x894f
+ ETH_P_PAE = 0x888e
+ ETH_P_PAUSE = 0x8808
+ ETH_P_PHONET = 0xf5
+ ETH_P_PPPTALK = 0x10
+ ETH_P_PPP_DISC = 0x8863
+ ETH_P_PPP_MP = 0x8
+ ETH_P_PPP_SES = 0x8864
+ ETH_P_PREAUTH = 0x88c7
+ ETH_P_PRP = 0x88fb
+ ETH_P_PUP = 0x200
+ ETH_P_PUPAT = 0x201
+ ETH_P_QINQ1 = 0x9100
+ ETH_P_QINQ2 = 0x9200
+ ETH_P_QINQ3 = 0x9300
+ ETH_P_RARP = 0x8035
+ ETH_P_SCA = 0x6007
+ ETH_P_SLOW = 0x8809
+ ETH_P_SNAP = 0x5
+ ETH_P_TDLS = 0x890d
+ ETH_P_TEB = 0x6558
+ ETH_P_TIPC = 0x88ca
+ ETH_P_TRAILER = 0x1c
+ ETH_P_TR_802_2 = 0x11
+ ETH_P_TSN = 0x22f0
+ ETH_P_WAN_PPP = 0x7
+ ETH_P_WCCP = 0x883e
+ ETH_P_X25 = 0x805
+ ETH_P_XDSA = 0xf8
+ EXABYTE_ENABLE_NEST = 0xf0
+ EXT2_SUPER_MAGIC = 0xef53
+ EXT3_SUPER_MAGIC = 0xef53
+ EXT4_SUPER_MAGIC = 0xef53
+ EXTA = 0xe
+ EXTB = 0xf
+ EXTPROC = 0x10000
+ F2FS_SUPER_MAGIC = 0xf2f52010
+ FALLOC_FL_COLLAPSE_RANGE = 0x8
+ FALLOC_FL_INSERT_RANGE = 0x20
+ FALLOC_FL_KEEP_SIZE = 0x1
+ FALLOC_FL_NO_HIDE_STALE = 0x4
+ FALLOC_FL_PUNCH_HOLE = 0x2
+ FALLOC_FL_UNSHARE_RANGE = 0x40
+ FALLOC_FL_ZERO_RANGE = 0x10
+ FD_CLOEXEC = 0x1
+ FD_SETSIZE = 0x400
+ FF0 = 0x0
+ FF1 = 0x8000
+ FFDLY = 0x8000
+ FLUSHO = 0x1000
+ FS_ENCRYPTION_MODE_AES_128_CBC = 0x5
+ FS_ENCRYPTION_MODE_AES_128_CTS = 0x6
+ FS_ENCRYPTION_MODE_AES_256_CBC = 0x3
+ FS_ENCRYPTION_MODE_AES_256_CTS = 0x4
+ FS_ENCRYPTION_MODE_AES_256_GCM = 0x2
+ FS_ENCRYPTION_MODE_AES_256_XTS = 0x1
+ FS_ENCRYPTION_MODE_INVALID = 0x0
+ FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8
+ FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7
+ FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615
+ FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614
+ FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613
+ FS_KEY_DESCRIPTOR_SIZE = 0x8
+ FS_KEY_DESC_PREFIX = "fscrypt:"
+ FS_KEY_DESC_PREFIX_SIZE = 0x8
+ FS_MAX_KEY_SIZE = 0x40
+ FS_POLICY_FLAGS_PAD_16 = 0x2
+ FS_POLICY_FLAGS_PAD_32 = 0x3
+ FS_POLICY_FLAGS_PAD_4 = 0x0
+ FS_POLICY_FLAGS_PAD_8 = 0x1
+ FS_POLICY_FLAGS_PAD_MASK = 0x3
+ FS_POLICY_FLAGS_VALID = 0x3
+ FUTEXFS_SUPER_MAGIC = 0xbad1dea
+ F_ADD_SEALS = 0x409
+ F_DUPFD = 0x0
+ F_DUPFD_CLOEXEC = 0x406
+ F_EXLCK = 0x4
+ F_GETFD = 0x1
+ F_GETFL = 0x3
+ F_GETLEASE = 0x401
+ F_GETLK = 0x7
+ F_GETLK64 = 0x7
+ F_GETOWN = 0x5
+ F_GETOWN_EX = 0x10
+ F_GETPIPE_SZ = 0x408
+ F_GETSIG = 0xb
+ F_GET_FILE_RW_HINT = 0x40d
+ F_GET_RW_HINT = 0x40b
+ F_GET_SEALS = 0x40a
+ F_LOCK = 0x1
+ F_NOTIFY = 0x402
+ F_OFD_GETLK = 0x24
+ F_OFD_SETLK = 0x25
+ F_OFD_SETLKW = 0x26
+ F_OK = 0x0
+ F_RDLCK = 0x1
+ F_SEAL_GROW = 0x4
+ F_SEAL_SEAL = 0x1
+ F_SEAL_SHRINK = 0x2
+ F_SEAL_WRITE = 0x8
+ F_SETFD = 0x2
+ F_SETFL = 0x4
+ F_SETLEASE = 0x400
+ F_SETLK = 0x8
+ F_SETLK64 = 0x8
+ F_SETLKW = 0x9
+ F_SETLKW64 = 0x9
+ F_SETOWN = 0x6
+ F_SETOWN_EX = 0xf
+ F_SETPIPE_SZ = 0x407
+ F_SETSIG = 0xa
+ F_SET_FILE_RW_HINT = 0x40e
+ F_SET_RW_HINT = 0x40c
+ F_SHLCK = 0x8
+ F_TEST = 0x3
+ F_TLOCK = 0x2
+ F_ULOCK = 0x0
+ F_UNLCK = 0x3
+ F_WRLCK = 0x2
+ GENL_ADMIN_PERM = 0x1
+ GENL_CMD_CAP_DO = 0x2
+ GENL_CMD_CAP_DUMP = 0x4
+ GENL_CMD_CAP_HASPOL = 0x8
+ GENL_HDRLEN = 0x4
+ GENL_ID_CTRL = 0x10
+ GENL_ID_PMCRAID = 0x12
+ GENL_ID_VFS_DQUOT = 0x11
+ GENL_MAX_ID = 0x3ff
+ GENL_MIN_ID = 0x10
+ GENL_NAMSIZ = 0x10
+ GENL_START_ALLOC = 0x13
+ GENL_UNS_ADMIN_PERM = 0x10
+ GRND_NONBLOCK = 0x1
+ GRND_RANDOM = 0x2
+ HDIO_DRIVE_CMD = 0x31f
+ HDIO_DRIVE_CMD_AEB = 0x31e
+ HDIO_DRIVE_CMD_HDR_SIZE = 0x4
+ HDIO_DRIVE_HOB_HDR_SIZE = 0x8
+ HDIO_DRIVE_RESET = 0x31c
+ HDIO_DRIVE_TASK = 0x31e
+ HDIO_DRIVE_TASKFILE = 0x31d
+ HDIO_DRIVE_TASK_HDR_SIZE = 0x8
+ HDIO_GETGEO = 0x301
+ HDIO_GET_32BIT = 0x309
+ HDIO_GET_ACOUSTIC = 0x30f
+ HDIO_GET_ADDRESS = 0x310
+ HDIO_GET_BUSSTATE = 0x31a
+ HDIO_GET_DMA = 0x30b
+ HDIO_GET_IDENTITY = 0x30d
+ HDIO_GET_KEEPSETTINGS = 0x308
+ HDIO_GET_MULTCOUNT = 0x304
+ HDIO_GET_NICE = 0x30c
+ HDIO_GET_NOWERR = 0x30a
+ HDIO_GET_QDMA = 0x305
+ HDIO_GET_UNMASKINTR = 0x302
+ HDIO_GET_WCACHE = 0x30e
+ HDIO_OBSOLETE_IDENTITY = 0x307
+ HDIO_SCAN_HWIF = 0x328
+ HDIO_SET_32BIT = 0x324
+ HDIO_SET_ACOUSTIC = 0x32c
+ HDIO_SET_ADDRESS = 0x32f
+ HDIO_SET_BUSSTATE = 0x32d
+ HDIO_SET_DMA = 0x326
+ HDIO_SET_KEEPSETTINGS = 0x323
+ HDIO_SET_MULTCOUNT = 0x321
+ HDIO_SET_NICE = 0x329
+ HDIO_SET_NOWERR = 0x325
+ HDIO_SET_PIO_MODE = 0x327
+ HDIO_SET_QDMA = 0x32e
+ HDIO_SET_UNMASKINTR = 0x322
+ HDIO_SET_WCACHE = 0x32b
+ HDIO_SET_XFER = 0x306
+ HDIO_TRISTATE_HWIF = 0x31b
+ HDIO_UNREGISTER_HWIF = 0x32a
+ HOSTFS_SUPER_MAGIC = 0xc0ffee
+ HPFS_SUPER_MAGIC = 0xf995e849
+ HUGETLBFS_MAGIC = 0x958458f6
+ HUPCL = 0x400
+ IBSHIFT = 0x10
+ ICANON = 0x2
+ ICMPV6_FILTER = 0x1
+ ICRNL = 0x100
+ IEXTEN = 0x8000
+ IFA_F_DADFAILED = 0x8
+ IFA_F_DEPRECATED = 0x20
+ IFA_F_HOMEADDRESS = 0x10
+ IFA_F_MANAGETEMPADDR = 0x100
+ IFA_F_MCAUTOJOIN = 0x400
+ IFA_F_NODAD = 0x2
+ IFA_F_NOPREFIXROUTE = 0x200
+ IFA_F_OPTIMISTIC = 0x4
+ IFA_F_PERMANENT = 0x80
+ IFA_F_SECONDARY = 0x1
+ IFA_F_STABLE_PRIVACY = 0x800
+ IFA_F_TEMPORARY = 0x1
+ IFA_F_TENTATIVE = 0x40
+ IFA_MAX = 0xa
+ IFF_ALLMULTI = 0x200
+ IFF_ATTACH_QUEUE = 0x200
+ IFF_AUTOMEDIA = 0x4000
+ IFF_BROADCAST = 0x2
+ IFF_DEBUG = 0x4
+ IFF_DETACH_QUEUE = 0x400
+ IFF_DORMANT = 0x20000
+ IFF_DYNAMIC = 0x8000
+ IFF_ECHO = 0x40000
+ IFF_LOOPBACK = 0x8
+ IFF_LOWER_UP = 0x10000
+ IFF_MASTER = 0x400
+ IFF_MULTICAST = 0x1000
+ IFF_MULTI_QUEUE = 0x100
+ IFF_NAPI = 0x10
+ IFF_NAPI_FRAGS = 0x20
+ IFF_NOARP = 0x80
+ IFF_NOFILTER = 0x1000
+ IFF_NOTRAILERS = 0x20
+ IFF_NO_PI = 0x1000
+ IFF_ONE_QUEUE = 0x2000
+ IFF_PERSIST = 0x800
+ IFF_POINTOPOINT = 0x10
+ IFF_PORTSEL = 0x2000
+ IFF_PROMISC = 0x100
+ IFF_RUNNING = 0x40
+ IFF_SLAVE = 0x800
+ IFF_TAP = 0x2
+ IFF_TUN = 0x1
+ IFF_TUN_EXCL = 0x8000
+ IFF_UP = 0x1
+ IFF_VNET_HDR = 0x4000
+ IFF_VOLATILE = 0x70c5a
+ IFNAMSIZ = 0x10
+ IGNBRK = 0x1
+ IGNCR = 0x80
+ IGNPAR = 0x4
+ IMAXBEL = 0x2000
+ INLCR = 0x40
+ INPCK = 0x10
+ IN_ACCESS = 0x1
+ IN_ALL_EVENTS = 0xfff
+ IN_ATTRIB = 0x4
+ IN_CLASSA_HOST = 0xffffff
+ IN_CLASSA_MAX = 0x80
+ IN_CLASSA_NET = 0xff000000
+ IN_CLASSA_NSHIFT = 0x18
+ IN_CLASSB_HOST = 0xffff
+ IN_CLASSB_MAX = 0x10000
+ IN_CLASSB_NET = 0xffff0000
+ IN_CLASSB_NSHIFT = 0x10
+ IN_CLASSC_HOST = 0xff
+ IN_CLASSC_NET = 0xffffff00
+ IN_CLASSC_NSHIFT = 0x8
+ IN_CLOEXEC = 0x400000
+ IN_CLOSE = 0x18
+ IN_CLOSE_NOWRITE = 0x10
+ IN_CLOSE_WRITE = 0x8
+ IN_CREATE = 0x100
+ IN_DELETE = 0x200
+ IN_DELETE_SELF = 0x400
+ IN_DONT_FOLLOW = 0x2000000
+ IN_EXCL_UNLINK = 0x4000000
+ IN_IGNORED = 0x8000
+ IN_ISDIR = 0x40000000
+ IN_LOOPBACKNET = 0x7f
+ IN_MASK_ADD = 0x20000000
+ IN_MODIFY = 0x2
+ IN_MOVE = 0xc0
+ IN_MOVED_FROM = 0x40
+ IN_MOVED_TO = 0x80
+ IN_MOVE_SELF = 0x800
+ IN_NONBLOCK = 0x4000
+ IN_ONESHOT = 0x80000000
+ IN_ONLYDIR = 0x1000000
+ IN_OPEN = 0x20
+ IN_Q_OVERFLOW = 0x4000
+ IN_UNMOUNT = 0x2000
+ IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
+ IPPROTO_AH = 0x33
+ IPPROTO_BEETPH = 0x5e
+ IPPROTO_COMP = 0x6c
+ IPPROTO_DCCP = 0x21
+ IPPROTO_DSTOPTS = 0x3c
+ IPPROTO_EGP = 0x8
+ IPPROTO_ENCAP = 0x62
+ IPPROTO_ESP = 0x32
+ IPPROTO_FRAGMENT = 0x2c
+ IPPROTO_GRE = 0x2f
+ IPPROTO_HOPOPTS = 0x0
+ IPPROTO_ICMP = 0x1
+ IPPROTO_ICMPV6 = 0x3a
+ IPPROTO_IDP = 0x16
+ IPPROTO_IGMP = 0x2
+ IPPROTO_IP = 0x0
+ IPPROTO_IPIP = 0x4
+ IPPROTO_IPV6 = 0x29
+ IPPROTO_MH = 0x87
+ IPPROTO_MPLS = 0x89
+ IPPROTO_MTP = 0x5c
+ IPPROTO_NONE = 0x3b
+ IPPROTO_PIM = 0x67
+ IPPROTO_PUP = 0xc
+ IPPROTO_RAW = 0xff
+ IPPROTO_ROUTING = 0x2b
+ IPPROTO_RSVP = 0x2e
+ IPPROTO_SCTP = 0x84
+ IPPROTO_TCP = 0x6
+ IPPROTO_TP = 0x1d
+ IPPROTO_UDP = 0x11
+ IPPROTO_UDPLITE = 0x88
+ IPV6_2292DSTOPTS = 0x4
+ IPV6_2292HOPLIMIT = 0x8
+ IPV6_2292HOPOPTS = 0x3
+ IPV6_2292PKTINFO = 0x2
+ IPV6_2292PKTOPTIONS = 0x6
+ IPV6_2292RTHDR = 0x5
+ IPV6_ADDRFORM = 0x1
+ IPV6_ADDR_PREFERENCES = 0x48
+ IPV6_ADD_MEMBERSHIP = 0x14
+ IPV6_AUTHHDR = 0xa
+ IPV6_AUTOFLOWLABEL = 0x46
+ IPV6_CHECKSUM = 0x7
+ IPV6_DONTFRAG = 0x3e
+ IPV6_DROP_MEMBERSHIP = 0x15
+ IPV6_DSTOPTS = 0x3b
+ IPV6_FREEBIND = 0x4e
+ IPV6_HDRINCL = 0x24
+ IPV6_HOPLIMIT = 0x34
+ IPV6_HOPOPTS = 0x36
+ IPV6_IPSEC_POLICY = 0x22
+ IPV6_JOIN_ANYCAST = 0x1b
+ IPV6_JOIN_GROUP = 0x14
+ IPV6_LEAVE_ANYCAST = 0x1c
+ IPV6_LEAVE_GROUP = 0x15
+ IPV6_MINHOPCOUNT = 0x49
+ IPV6_MTU = 0x18
+ IPV6_MTU_DISCOVER = 0x17
+ IPV6_MULTICAST_HOPS = 0x12
+ IPV6_MULTICAST_IF = 0x11
+ IPV6_MULTICAST_LOOP = 0x13
+ IPV6_NEXTHOP = 0x9
+ IPV6_ORIGDSTADDR = 0x4a
+ IPV6_PATHMTU = 0x3d
+ IPV6_PKTINFO = 0x32
+ IPV6_PMTUDISC_DO = 0x2
+ IPV6_PMTUDISC_DONT = 0x0
+ IPV6_PMTUDISC_INTERFACE = 0x4
+ IPV6_PMTUDISC_OMIT = 0x5
+ IPV6_PMTUDISC_PROBE = 0x3
+ IPV6_PMTUDISC_WANT = 0x1
+ IPV6_RECVDSTOPTS = 0x3a
+ IPV6_RECVERR = 0x19
+ IPV6_RECVFRAGSIZE = 0x4d
+ IPV6_RECVHOPLIMIT = 0x33
+ IPV6_RECVHOPOPTS = 0x35
+ IPV6_RECVORIGDSTADDR = 0x4a
+ IPV6_RECVPATHMTU = 0x3c
+ IPV6_RECVPKTINFO = 0x31
+ IPV6_RECVRTHDR = 0x38
+ IPV6_RECVTCLASS = 0x42
+ IPV6_ROUTER_ALERT = 0x16
+ IPV6_RTHDR = 0x39
+ IPV6_RTHDRDSTOPTS = 0x37
+ IPV6_RTHDR_LOOSE = 0x0
+ IPV6_RTHDR_STRICT = 0x1
+ IPV6_RTHDR_TYPE_0 = 0x0
+ IPV6_RXDSTOPTS = 0x3b
+ IPV6_RXHOPOPTS = 0x36
+ IPV6_TCLASS = 0x43
+ IPV6_TRANSPARENT = 0x4b
+ IPV6_UNICAST_HOPS = 0x10
+ IPV6_UNICAST_IF = 0x4c
+ IPV6_V6ONLY = 0x1a
+ IPV6_XFRM_POLICY = 0x23
+ IP_ADD_MEMBERSHIP = 0x23
+ IP_ADD_SOURCE_MEMBERSHIP = 0x27
+ IP_BIND_ADDRESS_NO_PORT = 0x18
+ IP_BLOCK_SOURCE = 0x26
+ IP_CHECKSUM = 0x17
+ IP_DEFAULT_MULTICAST_LOOP = 0x1
+ IP_DEFAULT_MULTICAST_TTL = 0x1
+ IP_DF = 0x4000
+ IP_DROP_MEMBERSHIP = 0x24
+ IP_DROP_SOURCE_MEMBERSHIP = 0x28
+ IP_FREEBIND = 0xf
+ IP_HDRINCL = 0x3
+ IP_IPSEC_POLICY = 0x10
+ IP_MAXPACKET = 0xffff
+ IP_MAX_MEMBERSHIPS = 0x14
+ IP_MF = 0x2000
+ IP_MINTTL = 0x15
+ IP_MSFILTER = 0x29
+ IP_MSS = 0x240
+ IP_MTU = 0xe
+ IP_MTU_DISCOVER = 0xa
+ IP_MULTICAST_ALL = 0x31
+ IP_MULTICAST_IF = 0x20
+ IP_MULTICAST_LOOP = 0x22
+ IP_MULTICAST_TTL = 0x21
+ IP_NODEFRAG = 0x16
+ IP_OFFMASK = 0x1fff
+ IP_OPTIONS = 0x4
+ IP_ORIGDSTADDR = 0x14
+ IP_PASSSEC = 0x12
+ IP_PKTINFO = 0x8
+ IP_PKTOPTIONS = 0x9
+ IP_PMTUDISC = 0xa
+ IP_PMTUDISC_DO = 0x2
+ IP_PMTUDISC_DONT = 0x0
+ IP_PMTUDISC_INTERFACE = 0x4
+ IP_PMTUDISC_OMIT = 0x5
+ IP_PMTUDISC_PROBE = 0x3
+ IP_PMTUDISC_WANT = 0x1
+ IP_RECVERR = 0xb
+ IP_RECVFRAGSIZE = 0x19
+ IP_RECVOPTS = 0x6
+ IP_RECVORIGDSTADDR = 0x14
+ IP_RECVRETOPTS = 0x7
+ IP_RECVTOS = 0xd
+ IP_RECVTTL = 0xc
+ IP_RETOPTS = 0x7
+ IP_RF = 0x8000
+ IP_ROUTER_ALERT = 0x5
+ IP_TOS = 0x1
+ IP_TRANSPARENT = 0x13
+ IP_TTL = 0x2
+ IP_UNBLOCK_SOURCE = 0x25
+ IP_UNICAST_IF = 0x32
+ IP_XFRM_POLICY = 0x11
+ ISIG = 0x1
+ ISOFS_SUPER_MAGIC = 0x9660
+ ISTRIP = 0x20
+ IUCLC = 0x200
+ IUTF8 = 0x4000
+ IXANY = 0x800
+ IXOFF = 0x1000
+ IXON = 0x400
+ JFFS2_SUPER_MAGIC = 0x72b6
+ KEXEC_ARCH_386 = 0x30000
+ KEXEC_ARCH_68K = 0x40000
+ KEXEC_ARCH_AARCH64 = 0xb70000
+ KEXEC_ARCH_ARM = 0x280000
+ KEXEC_ARCH_DEFAULT = 0x0
+ KEXEC_ARCH_IA_64 = 0x320000
+ KEXEC_ARCH_MASK = 0xffff0000
+ KEXEC_ARCH_MIPS = 0x80000
+ KEXEC_ARCH_MIPS_LE = 0xa0000
+ KEXEC_ARCH_PPC = 0x140000
+ KEXEC_ARCH_PPC64 = 0x150000
+ KEXEC_ARCH_S390 = 0x160000
+ KEXEC_ARCH_SH = 0x2a0000
+ KEXEC_ARCH_X86_64 = 0x3e0000
+ KEXEC_FILE_NO_INITRAMFS = 0x4
+ KEXEC_FILE_ON_CRASH = 0x2
+ KEXEC_FILE_UNLOAD = 0x1
+ KEXEC_ON_CRASH = 0x1
+ KEXEC_PRESERVE_CONTEXT = 0x2
+ KEXEC_SEGMENT_MAX = 0x10
+ KEYCTL_ASSUME_AUTHORITY = 0x10
+ KEYCTL_CHOWN = 0x4
+ KEYCTL_CLEAR = 0x7
+ KEYCTL_DESCRIBE = 0x6
+ KEYCTL_DH_COMPUTE = 0x17
+ KEYCTL_GET_KEYRING_ID = 0x0
+ KEYCTL_GET_PERSISTENT = 0x16
+ KEYCTL_GET_SECURITY = 0x11
+ KEYCTL_INSTANTIATE = 0xc
+ KEYCTL_INSTANTIATE_IOV = 0x14
+ KEYCTL_INVALIDATE = 0x15
+ KEYCTL_JOIN_SESSION_KEYRING = 0x1
+ KEYCTL_LINK = 0x8
+ KEYCTL_NEGATE = 0xd
+ KEYCTL_PKEY_DECRYPT = 0x1a
+ KEYCTL_PKEY_ENCRYPT = 0x19
+ KEYCTL_PKEY_QUERY = 0x18
+ KEYCTL_PKEY_SIGN = 0x1b
+ KEYCTL_PKEY_VERIFY = 0x1c
+ KEYCTL_READ = 0xb
+ KEYCTL_REJECT = 0x13
+ KEYCTL_RESTRICT_KEYRING = 0x1d
+ KEYCTL_REVOKE = 0x3
+ KEYCTL_SEARCH = 0xa
+ KEYCTL_SESSION_TO_PARENT = 0x12
+ KEYCTL_SETPERM = 0x5
+ KEYCTL_SET_REQKEY_KEYRING = 0xe
+ KEYCTL_SET_TIMEOUT = 0xf
+ KEYCTL_SUPPORTS_DECRYPT = 0x2
+ KEYCTL_SUPPORTS_ENCRYPT = 0x1
+ KEYCTL_SUPPORTS_SIGN = 0x4
+ KEYCTL_SUPPORTS_VERIFY = 0x8
+ KEYCTL_UNLINK = 0x9
+ KEYCTL_UPDATE = 0x2
+ KEY_REQKEY_DEFL_DEFAULT = 0x0
+ KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6
+ KEY_REQKEY_DEFL_NO_CHANGE = -0x1
+ KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2
+ KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7
+ KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3
+ KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1
+ KEY_REQKEY_DEFL_USER_KEYRING = 0x4
+ KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5
+ KEY_SPEC_GROUP_KEYRING = -0x6
+ KEY_SPEC_PROCESS_KEYRING = -0x2
+ KEY_SPEC_REQKEY_AUTH_KEY = -0x7
+ KEY_SPEC_REQUESTOR_KEYRING = -0x8
+ KEY_SPEC_SESSION_KEYRING = -0x3
+ KEY_SPEC_THREAD_KEYRING = -0x1
+ KEY_SPEC_USER_KEYRING = -0x4
+ KEY_SPEC_USER_SESSION_KEYRING = -0x5
+ LINUX_REBOOT_CMD_CAD_OFF = 0x0
+ LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef
+ LINUX_REBOOT_CMD_HALT = 0xcdef0123
+ LINUX_REBOOT_CMD_KEXEC = 0x45584543
+ LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc
+ LINUX_REBOOT_CMD_RESTART = 0x1234567
+ LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4
+ LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2
+ LINUX_REBOOT_MAGIC1 = 0xfee1dead
+ LINUX_REBOOT_MAGIC2 = 0x28121969
+ LOCK_EX = 0x2
+ LOCK_NB = 0x4
+ LOCK_SH = 0x1
+ LOCK_UN = 0x8
+ MADV_DODUMP = 0x11
+ MADV_DOFORK = 0xb
+ MADV_DONTDUMP = 0x10
+ MADV_DONTFORK = 0xa
+ MADV_DONTNEED = 0x4
+ MADV_FREE = 0x8
+ MADV_HUGEPAGE = 0xe
+ MADV_HWPOISON = 0x64
+ MADV_KEEPONFORK = 0x13
+ MADV_MERGEABLE = 0xc
+ MADV_NOHUGEPAGE = 0xf
+ MADV_NORMAL = 0x0
+ MADV_RANDOM = 0x1
+ MADV_REMOVE = 0x9
+ MADV_SEQUENTIAL = 0x2
+ MADV_UNMERGEABLE = 0xd
+ MADV_WILLNEED = 0x3
+ MADV_WIPEONFORK = 0x12
+ MAP_ANON = 0x20
+ MAP_ANONYMOUS = 0x20
+ MAP_DENYWRITE = 0x800
+ MAP_EXECUTABLE = 0x1000
+ MAP_FILE = 0x0
+ MAP_FIXED = 0x10
+ MAP_FIXED_NOREPLACE = 0x100000
+ MAP_GROWSDOWN = 0x200
+ MAP_HUGETLB = 0x40000
+ MAP_HUGE_MASK = 0x3f
+ MAP_HUGE_SHIFT = 0x1a
+ MAP_LOCKED = 0x100
+ MAP_NONBLOCK = 0x10000
+ MAP_NORESERVE = 0x40
+ MAP_POPULATE = 0x8000
+ MAP_PRIVATE = 0x2
+ MAP_RENAME = 0x20
+ MAP_SHARED = 0x1
+ MAP_SHARED_VALIDATE = 0x3
+ MAP_STACK = 0x20000
+ MAP_TYPE = 0xf
+ MCL_CURRENT = 0x2000
+ MCL_FUTURE = 0x4000
+ MCL_ONFAULT = 0x8000
+ MFD_ALLOW_SEALING = 0x2
+ MFD_CLOEXEC = 0x1
+ MFD_HUGETLB = 0x4
+ MFD_HUGE_16GB = -0x78000000
+ MFD_HUGE_16MB = 0x60000000
+ MFD_HUGE_1GB = 0x78000000
+ MFD_HUGE_1MB = 0x50000000
+ MFD_HUGE_256MB = 0x70000000
+ MFD_HUGE_2GB = 0x7c000000
+ MFD_HUGE_2MB = 0x54000000
+ MFD_HUGE_32MB = 0x64000000
+ MFD_HUGE_512KB = 0x4c000000
+ MFD_HUGE_512MB = 0x74000000
+ MFD_HUGE_64KB = 0x40000000
+ MFD_HUGE_8MB = 0x5c000000
+ MFD_HUGE_MASK = 0x3f
+ MFD_HUGE_SHIFT = 0x1a
+ MINIX2_SUPER_MAGIC = 0x2468
+ MINIX2_SUPER_MAGIC2 = 0x2478
+ MINIX3_SUPER_MAGIC = 0x4d5a
+ MINIX_SUPER_MAGIC = 0x137f
+ MINIX_SUPER_MAGIC2 = 0x138f
+ MNT_DETACH = 0x2
+ MNT_EXPIRE = 0x4
+ MNT_FORCE = 0x1
+ MODULE_INIT_IGNORE_MODVERSIONS = 0x1
+ MODULE_INIT_IGNORE_VERMAGIC = 0x2
+ MSDOS_SUPER_MAGIC = 0x4d44
+ MSG_BATCH = 0x40000
+ MSG_CMSG_CLOEXEC = 0x40000000
+ MSG_CONFIRM = 0x800
+ MSG_CTRUNC = 0x8
+ MSG_DONTROUTE = 0x4
+ MSG_DONTWAIT = 0x40
+ MSG_EOR = 0x80
+ MSG_ERRQUEUE = 0x2000
+ MSG_FASTOPEN = 0x20000000
+ MSG_FIN = 0x200
+ MSG_MORE = 0x8000
+ MSG_NOSIGNAL = 0x4000
+ MSG_OOB = 0x1
+ MSG_PEEK = 0x2
+ MSG_PROXY = 0x10
+ MSG_RST = 0x1000
+ MSG_SYN = 0x400
+ MSG_TRUNC = 0x20
+ MSG_TRYHARD = 0x4
+ MSG_WAITALL = 0x100
+ MSG_WAITFORONE = 0x10000
+ MSG_ZEROCOPY = 0x4000000
+ MS_ACTIVE = 0x40000000
+ MS_ASYNC = 0x1
+ MS_BIND = 0x1000
+ MS_BORN = 0x20000000
+ MS_DIRSYNC = 0x80
+ MS_INVALIDATE = 0x2
+ MS_I_VERSION = 0x800000
+ MS_KERNMOUNT = 0x400000
+ MS_LAZYTIME = 0x2000000
+ MS_MANDLOCK = 0x40
+ MS_MGC_MSK = 0xffff0000
+ MS_MGC_VAL = 0xc0ed0000
+ MS_MOVE = 0x2000
+ MS_NOATIME = 0x400
+ MS_NODEV = 0x4
+ MS_NODIRATIME = 0x800
+ MS_NOEXEC = 0x8
+ MS_NOREMOTELOCK = 0x8000000
+ MS_NOSEC = 0x10000000
+ MS_NOSUID = 0x2
+ MS_NOUSER = -0x80000000
+ MS_POSIXACL = 0x10000
+ MS_PRIVATE = 0x40000
+ MS_RDONLY = 0x1
+ MS_REC = 0x4000
+ MS_RELATIME = 0x200000
+ MS_REMOUNT = 0x20
+ MS_RMT_MASK = 0x2800051
+ MS_SHARED = 0x100000
+ MS_SILENT = 0x8000
+ MS_SLAVE = 0x80000
+ MS_STRICTATIME = 0x1000000
+ MS_SUBMOUNT = 0x4000000
+ MS_SYNC = 0x4
+ MS_SYNCHRONOUS = 0x10
+ MS_UNBINDABLE = 0x20000
+ MS_VERBOSE = 0x8000
+ MTD_INODE_FS_MAGIC = 0x11307854
+ NAME_MAX = 0xff
+ NCP_SUPER_MAGIC = 0x564c
+ NETLINK_ADD_MEMBERSHIP = 0x1
+ NETLINK_AUDIT = 0x9
+ NETLINK_BROADCAST_ERROR = 0x4
+ NETLINK_CAP_ACK = 0xa
+ NETLINK_CONNECTOR = 0xb
+ NETLINK_CRYPTO = 0x15
+ NETLINK_DNRTMSG = 0xe
+ NETLINK_DROP_MEMBERSHIP = 0x2
+ NETLINK_ECRYPTFS = 0x13
+ NETLINK_EXT_ACK = 0xb
+ NETLINK_FIB_LOOKUP = 0xa
+ NETLINK_FIREWALL = 0x3
+ NETLINK_GENERIC = 0x10
+ NETLINK_GET_STRICT_CHK = 0xc
+ NETLINK_INET_DIAG = 0x4
+ NETLINK_IP6_FW = 0xd
+ NETLINK_ISCSI = 0x8
+ NETLINK_KOBJECT_UEVENT = 0xf
+ NETLINK_LISTEN_ALL_NSID = 0x8
+ NETLINK_LIST_MEMBERSHIPS = 0x9
+ NETLINK_NETFILTER = 0xc
+ NETLINK_NFLOG = 0x5
+ NETLINK_NO_ENOBUFS = 0x5
+ NETLINK_PKTINFO = 0x3
+ NETLINK_RDMA = 0x14
+ NETLINK_ROUTE = 0x0
+ NETLINK_RX_RING = 0x6
+ NETLINK_SCSITRANSPORT = 0x12
+ NETLINK_SELINUX = 0x7
+ NETLINK_SMC = 0x16
+ NETLINK_SOCK_DIAG = 0x4
+ NETLINK_TX_RING = 0x7
+ NETLINK_UNUSED = 0x1
+ NETLINK_USERSOCK = 0x2
+ NETLINK_XFRM = 0x6
+ NETNSA_MAX = 0x3
+ NETNSA_NSID_NOT_ASSIGNED = -0x1
+ NFNETLINK_V0 = 0x0
+ NFNLGRP_ACCT_QUOTA = 0x8
+ NFNLGRP_CONNTRACK_DESTROY = 0x3
+ NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6
+ NFNLGRP_CONNTRACK_EXP_NEW = 0x4
+ NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5
+ NFNLGRP_CONNTRACK_NEW = 0x1
+ NFNLGRP_CONNTRACK_UPDATE = 0x2
+ NFNLGRP_MAX = 0x9
+ NFNLGRP_NFTABLES = 0x7
+ NFNLGRP_NFTRACE = 0x9
+ NFNLGRP_NONE = 0x0
+ NFNL_BATCH_MAX = 0x1
+ NFNL_MSG_BATCH_BEGIN = 0x10
+ NFNL_MSG_BATCH_END = 0x11
+ NFNL_NFA_NEST = 0x8000
+ NFNL_SUBSYS_ACCT = 0x7
+ NFNL_SUBSYS_COUNT = 0xc
+ NFNL_SUBSYS_CTHELPER = 0x9
+ NFNL_SUBSYS_CTNETLINK = 0x1
+ NFNL_SUBSYS_CTNETLINK_EXP = 0x2
+ NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8
+ NFNL_SUBSYS_IPSET = 0x6
+ NFNL_SUBSYS_NFTABLES = 0xa
+ NFNL_SUBSYS_NFT_COMPAT = 0xb
+ NFNL_SUBSYS_NONE = 0x0
+ NFNL_SUBSYS_OSF = 0x5
+ NFNL_SUBSYS_QUEUE = 0x3
+ NFNL_SUBSYS_ULOG = 0x4
+ NFS_SUPER_MAGIC = 0x6969
+ NILFS_SUPER_MAGIC = 0x3434
+ NL0 = 0x0
+ NL1 = 0x100
+ NLA_ALIGNTO = 0x4
+ NLA_F_NESTED = 0x8000
+ NLA_F_NET_BYTEORDER = 0x4000
+ NLA_HDRLEN = 0x4
+ NLDLY = 0x100
+ NLMSG_ALIGNTO = 0x4
+ NLMSG_DONE = 0x3
+ NLMSG_ERROR = 0x2
+ NLMSG_HDRLEN = 0x10
+ NLMSG_MIN_TYPE = 0x10
+ NLMSG_NOOP = 0x1
+ NLMSG_OVERRUN = 0x4
+ NLM_F_ACK = 0x4
+ NLM_F_ACK_TLVS = 0x200
+ NLM_F_APPEND = 0x800
+ NLM_F_ATOMIC = 0x400
+ NLM_F_CAPPED = 0x100
+ NLM_F_CREATE = 0x400
+ NLM_F_DUMP = 0x300
+ NLM_F_DUMP_FILTERED = 0x20
+ NLM_F_DUMP_INTR = 0x10
+ NLM_F_ECHO = 0x8
+ NLM_F_EXCL = 0x200
+ NLM_F_MATCH = 0x200
+ NLM_F_MULTI = 0x2
+ NLM_F_NONREC = 0x100
+ NLM_F_REPLACE = 0x100
+ NLM_F_REQUEST = 0x1
+ NLM_F_ROOT = 0x100
+ NOFLSH = 0x80
+ NSFS_MAGIC = 0x6e736673
+ OCFS2_SUPER_MAGIC = 0x7461636f
+ OCRNL = 0x8
+ OFDEL = 0x80
+ OFILL = 0x40
+ OLCUC = 0x2
+ ONLCR = 0x4
+ ONLRET = 0x20
+ ONOCR = 0x10
+ OPENPROM_SUPER_MAGIC = 0x9fa1
+ OPOST = 0x1
+ OVERLAYFS_SUPER_MAGIC = 0x794c7630
+ O_ACCMODE = 0x3
+ O_APPEND = 0x8
+ O_ASYNC = 0x40
+ O_CLOEXEC = 0x400000
+ O_CREAT = 0x200
+ O_DIRECT = 0x100000
+ O_DIRECTORY = 0x10000
+ O_DSYNC = 0x2000
+ O_EXCL = 0x800
+ O_FSYNC = 0x802000
+ O_LARGEFILE = 0x0
+ O_NDELAY = 0x4004
+ O_NOATIME = 0x200000
+ O_NOCTTY = 0x8000
+ O_NOFOLLOW = 0x20000
+ O_NONBLOCK = 0x4000
+ O_PATH = 0x1000000
+ O_RDONLY = 0x0
+ O_RDWR = 0x2
+ O_RSYNC = 0x802000
+ O_SYNC = 0x802000
+ O_TMPFILE = 0x2010000
+ O_TRUNC = 0x400
+ O_WRONLY = 0x1
+ PACKET_ADD_MEMBERSHIP = 0x1
+ PACKET_AUXDATA = 0x8
+ PACKET_BROADCAST = 0x1
+ PACKET_COPY_THRESH = 0x7
+ PACKET_DROP_MEMBERSHIP = 0x2
+ PACKET_FANOUT = 0x12
+ PACKET_FANOUT_CBPF = 0x6
+ PACKET_FANOUT_CPU = 0x2
+ PACKET_FANOUT_DATA = 0x16
+ PACKET_FANOUT_EBPF = 0x7
+ PACKET_FANOUT_FLAG_DEFRAG = 0x8000
+ PACKET_FANOUT_FLAG_ROLLOVER = 0x1000
+ PACKET_FANOUT_FLAG_UNIQUEID = 0x2000
+ PACKET_FANOUT_HASH = 0x0
+ PACKET_FANOUT_LB = 0x1
+ PACKET_FANOUT_QM = 0x5
+ PACKET_FANOUT_RND = 0x4
+ PACKET_FANOUT_ROLLOVER = 0x3
+ PACKET_FASTROUTE = 0x6
+ PACKET_HDRLEN = 0xb
+ PACKET_HOST = 0x0
+ PACKET_IGNORE_OUTGOING = 0x17
+ PACKET_KERNEL = 0x7
+ PACKET_LOOPBACK = 0x5
+ PACKET_LOSS = 0xe
+ PACKET_MR_ALLMULTI = 0x2
+ PACKET_MR_MULTICAST = 0x0
+ PACKET_MR_PROMISC = 0x1
+ PACKET_MR_UNICAST = 0x3
+ PACKET_MULTICAST = 0x2
+ PACKET_ORIGDEV = 0x9
+ PACKET_OTHERHOST = 0x3
+ PACKET_OUTGOING = 0x4
+ PACKET_QDISC_BYPASS = 0x14
+ PACKET_RECV_OUTPUT = 0x3
+ PACKET_RESERVE = 0xc
+ PACKET_ROLLOVER_STATS = 0x15
+ PACKET_RX_RING = 0x5
+ PACKET_STATISTICS = 0x6
+ PACKET_TIMESTAMP = 0x11
+ PACKET_TX_HAS_OFF = 0x13
+ PACKET_TX_RING = 0xd
+ PACKET_TX_TIMESTAMP = 0x10
+ PACKET_USER = 0x6
+ PACKET_VERSION = 0xa
+ PACKET_VNET_HDR = 0xf
+ PARENB = 0x100
+ PARITY_CRC16_PR0 = 0x2
+ PARITY_CRC16_PR0_CCITT = 0x4
+ PARITY_CRC16_PR1 = 0x3
+ PARITY_CRC16_PR1_CCITT = 0x5
+ PARITY_CRC32_PR0_CCITT = 0x6
+ PARITY_CRC32_PR1_CCITT = 0x7
+ PARITY_DEFAULT = 0x0
+ PARITY_NONE = 0x1
+ PARMRK = 0x8
+ PARODD = 0x200
+ PENDIN = 0x4000
+ PERF_EVENT_IOC_DISABLE = 0x20002401
+ PERF_EVENT_IOC_ENABLE = 0x20002400
+ PERF_EVENT_IOC_ID = 0x40082407
+ PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b
+ PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409
+ PERF_EVENT_IOC_PERIOD = 0x80082404
+ PERF_EVENT_IOC_QUERY_BPF = 0xc008240a
+ PERF_EVENT_IOC_REFRESH = 0x20002402
+ PERF_EVENT_IOC_RESET = 0x20002403
+ PERF_EVENT_IOC_SET_BPF = 0x80042408
+ PERF_EVENT_IOC_SET_FILTER = 0x80082406
+ PERF_EVENT_IOC_SET_OUTPUT = 0x20002405
+ PIPEFS_MAGIC = 0x50495045
+ PPPIOCATTACH = 0x8004743d
+ PPPIOCATTCHAN = 0x80047438
+ PPPIOCCONNECT = 0x8004743a
+ PPPIOCDETACH = 0x8004743c
+ PPPIOCDISCONN = 0x20007439
+ PPPIOCGASYNCMAP = 0x40047458
+ PPPIOCGCHAN = 0x40047437
+ PPPIOCGDEBUG = 0x40047441
+ PPPIOCGFLAGS = 0x4004745a
+ PPPIOCGIDLE = 0x4010743f
+ PPPIOCGL2TPSTATS = 0x40487436
+ PPPIOCGMRU = 0x40047453
+ PPPIOCGNPMODE = 0xc008744c
+ PPPIOCGRASYNCMAP = 0x40047455
+ PPPIOCGUNIT = 0x40047456
+ PPPIOCGXASYNCMAP = 0x40207450
+ PPPIOCNEWUNIT = 0xc004743e
+ PPPIOCSACTIVE = 0x80107446
+ PPPIOCSASYNCMAP = 0x80047457
+ PPPIOCSCOMPRESS = 0x8010744d
+ PPPIOCSDEBUG = 0x80047440
+ PPPIOCSFLAGS = 0x80047459
+ PPPIOCSMAXCID = 0x80047451
+ PPPIOCSMRRU = 0x8004743b
+ PPPIOCSMRU = 0x80047452
+ PPPIOCSNPMODE = 0x8008744b
+ PPPIOCSPASS = 0x80107447
+ PPPIOCSRASYNCMAP = 0x80047454
+ PPPIOCSXASYNCMAP = 0x8020744f
+ PPPIOCXFERUNIT = 0x2000744e
+ PRIO_PGRP = 0x1
+ PRIO_PROCESS = 0x0
+ PRIO_USER = 0x2
+ PROC_SUPER_MAGIC = 0x9fa0
+ PROT_EXEC = 0x4
+ PROT_GROWSDOWN = 0x1000000
+ PROT_GROWSUP = 0x2000000
+ PROT_NONE = 0x0
+ PROT_READ = 0x1
+ PROT_WRITE = 0x2
+ PR_CAPBSET_DROP = 0x18
+ PR_CAPBSET_READ = 0x17
+ PR_CAP_AMBIENT = 0x2f
+ PR_CAP_AMBIENT_CLEAR_ALL = 0x4
+ PR_CAP_AMBIENT_IS_SET = 0x1
+ PR_CAP_AMBIENT_LOWER = 0x3
+ PR_CAP_AMBIENT_RAISE = 0x2
+ PR_ENDIAN_BIG = 0x0
+ PR_ENDIAN_LITTLE = 0x1
+ PR_ENDIAN_PPC_LITTLE = 0x2
+ PR_FPEMU_NOPRINT = 0x1
+ PR_FPEMU_SIGFPE = 0x2
+ PR_FP_EXC_ASYNC = 0x2
+ PR_FP_EXC_DISABLED = 0x0
+ PR_FP_EXC_DIV = 0x10000
+ PR_FP_EXC_INV = 0x100000
+ PR_FP_EXC_NONRECOV = 0x1
+ PR_FP_EXC_OVF = 0x20000
+ PR_FP_EXC_PRECISE = 0x3
+ PR_FP_EXC_RES = 0x80000
+ PR_FP_EXC_SW_ENABLE = 0x80
+ PR_FP_EXC_UND = 0x40000
+ PR_FP_MODE_FR = 0x1
+ PR_FP_MODE_FRE = 0x2
+ PR_GET_CHILD_SUBREAPER = 0x25
+ PR_GET_DUMPABLE = 0x3
+ PR_GET_ENDIAN = 0x13
+ PR_GET_FPEMU = 0x9
+ PR_GET_FPEXC = 0xb
+ PR_GET_FP_MODE = 0x2e
+ PR_GET_KEEPCAPS = 0x7
+ PR_GET_NAME = 0x10
+ PR_GET_NO_NEW_PRIVS = 0x27
+ PR_GET_PDEATHSIG = 0x2
+ PR_GET_SECCOMP = 0x15
+ PR_GET_SECUREBITS = 0x1b
+ PR_GET_SPECULATION_CTRL = 0x34
+ PR_GET_THP_DISABLE = 0x2a
+ PR_GET_TID_ADDRESS = 0x28
+ PR_GET_TIMERSLACK = 0x1e
+ PR_GET_TIMING = 0xd
+ PR_GET_TSC = 0x19
+ PR_GET_UNALIGN = 0x5
+ PR_MCE_KILL = 0x21
+ PR_MCE_KILL_CLEAR = 0x0
+ PR_MCE_KILL_DEFAULT = 0x2
+ PR_MCE_KILL_EARLY = 0x1
+ PR_MCE_KILL_GET = 0x22
+ PR_MCE_KILL_LATE = 0x0
+ PR_MCE_KILL_SET = 0x1
+ PR_MPX_DISABLE_MANAGEMENT = 0x2c
+ PR_MPX_ENABLE_MANAGEMENT = 0x2b
+ PR_SET_CHILD_SUBREAPER = 0x24
+ PR_SET_DUMPABLE = 0x4
+ PR_SET_ENDIAN = 0x14
+ PR_SET_FPEMU = 0xa
+ PR_SET_FPEXC = 0xc
+ PR_SET_FP_MODE = 0x2d
+ PR_SET_KEEPCAPS = 0x8
+ PR_SET_MM = 0x23
+ PR_SET_MM_ARG_END = 0x9
+ PR_SET_MM_ARG_START = 0x8
+ PR_SET_MM_AUXV = 0xc
+ PR_SET_MM_BRK = 0x7
+ PR_SET_MM_END_CODE = 0x2
+ PR_SET_MM_END_DATA = 0x4
+ PR_SET_MM_ENV_END = 0xb
+ PR_SET_MM_ENV_START = 0xa
+ PR_SET_MM_EXE_FILE = 0xd
+ PR_SET_MM_MAP = 0xe
+ PR_SET_MM_MAP_SIZE = 0xf
+ PR_SET_MM_START_BRK = 0x6
+ PR_SET_MM_START_CODE = 0x1
+ PR_SET_MM_START_DATA = 0x3
+ PR_SET_MM_START_STACK = 0x5
+ PR_SET_NAME = 0xf
+ PR_SET_NO_NEW_PRIVS = 0x26
+ PR_SET_PDEATHSIG = 0x1
+ PR_SET_PTRACER = 0x59616d61
+ PR_SET_PTRACER_ANY = 0xffffffffffffffff
+ PR_SET_SECCOMP = 0x16
+ PR_SET_SECUREBITS = 0x1c
+ PR_SET_SPECULATION_CTRL = 0x35
+ PR_SET_THP_DISABLE = 0x29
+ PR_SET_TIMERSLACK = 0x1d
+ PR_SET_TIMING = 0xe
+ PR_SET_TSC = 0x1a
+ PR_SET_UNALIGN = 0x6
+ PR_SPEC_DISABLE = 0x4
+ PR_SPEC_ENABLE = 0x2
+ PR_SPEC_FORCE_DISABLE = 0x8
+ PR_SPEC_INDIRECT_BRANCH = 0x1
+ PR_SPEC_NOT_AFFECTED = 0x0
+ PR_SPEC_PRCTL = 0x1
+ PR_SPEC_STORE_BYPASS = 0x0
+ PR_SVE_GET_VL = 0x33
+ PR_SVE_SET_VL = 0x32
+ PR_SVE_SET_VL_ONEXEC = 0x40000
+ PR_SVE_VL_INHERIT = 0x20000
+ PR_SVE_VL_LEN_MASK = 0xffff
+ PR_TASK_PERF_EVENTS_DISABLE = 0x1f
+ PR_TASK_PERF_EVENTS_ENABLE = 0x20
+ PR_TIMING_STATISTICAL = 0x0
+ PR_TIMING_TIMESTAMP = 0x1
+ PR_TSC_ENABLE = 0x1
+ PR_TSC_SIGSEGV = 0x2
+ PR_UNALIGN_NOPRINT = 0x1
+ PR_UNALIGN_SIGBUS = 0x2
+ PSTOREFS_MAGIC = 0x6165676c
+ PTRACE_ATTACH = 0x10
+ PTRACE_CONT = 0x7
+ PTRACE_DETACH = 0x11
+ PTRACE_EVENT_CLONE = 0x3
+ PTRACE_EVENT_EXEC = 0x4
+ PTRACE_EVENT_EXIT = 0x6
+ PTRACE_EVENT_FORK = 0x1
+ PTRACE_EVENT_SECCOMP = 0x7
+ PTRACE_EVENT_STOP = 0x80
+ PTRACE_EVENT_VFORK = 0x2
+ PTRACE_EVENT_VFORK_DONE = 0x5
+ PTRACE_GETEVENTMSG = 0x4201
+ PTRACE_GETFPAREGS = 0x14
+ PTRACE_GETFPREGS = 0xe
+ PTRACE_GETFPREGS64 = 0x19
+ PTRACE_GETREGS = 0xc
+ PTRACE_GETREGS64 = 0x16
+ PTRACE_GETREGSET = 0x4204
+ PTRACE_GETSIGINFO = 0x4202
+ PTRACE_GETSIGMASK = 0x420a
+ PTRACE_INTERRUPT = 0x4207
+ PTRACE_KILL = 0x8
+ PTRACE_LISTEN = 0x4208
+ PTRACE_O_EXITKILL = 0x100000
+ PTRACE_O_MASK = 0x3000ff
+ PTRACE_O_SUSPEND_SECCOMP = 0x200000
+ PTRACE_O_TRACECLONE = 0x8
+ PTRACE_O_TRACEEXEC = 0x10
+ PTRACE_O_TRACEEXIT = 0x40
+ PTRACE_O_TRACEFORK = 0x2
+ PTRACE_O_TRACESECCOMP = 0x80
+ PTRACE_O_TRACESYSGOOD = 0x1
+ PTRACE_O_TRACEVFORK = 0x4
+ PTRACE_O_TRACEVFORKDONE = 0x20
+ PTRACE_PEEKDATA = 0x2
+ PTRACE_PEEKSIGINFO = 0x4209
+ PTRACE_PEEKSIGINFO_SHARED = 0x1
+ PTRACE_PEEKTEXT = 0x1
+ PTRACE_PEEKUSR = 0x3
+ PTRACE_POKEDATA = 0x5
+ PTRACE_POKETEXT = 0x4
+ PTRACE_POKEUSR = 0x6
+ PTRACE_READDATA = 0x10
+ PTRACE_READTEXT = 0x12
+ PTRACE_SECCOMP_GET_FILTER = 0x420c
+ PTRACE_SECCOMP_GET_METADATA = 0x420d
+ PTRACE_SEIZE = 0x4206
+ PTRACE_SETFPAREGS = 0x15
+ PTRACE_SETFPREGS = 0xf
+ PTRACE_SETFPREGS64 = 0x1a
+ PTRACE_SETOPTIONS = 0x4200
+ PTRACE_SETREGS = 0xd
+ PTRACE_SETREGS64 = 0x17
+ PTRACE_SETREGSET = 0x4205
+ PTRACE_SETSIGINFO = 0x4203
+ PTRACE_SETSIGMASK = 0x420b
+ PTRACE_SINGLESTEP = 0x9
+ PTRACE_SPARC_DETACH = 0xb
+ PTRACE_SYSCALL = 0x18
+ PTRACE_TRACEME = 0x0
+ PTRACE_WRITEDATA = 0x11
+ PTRACE_WRITETEXT = 0x13
+ PT_FP = 0x48
+ PT_G0 = 0x10
+ PT_G1 = 0x14
+ PT_G2 = 0x18
+ PT_G3 = 0x1c
+ PT_G4 = 0x20
+ PT_G5 = 0x24
+ PT_G6 = 0x28
+ PT_G7 = 0x2c
+ PT_I0 = 0x30
+ PT_I1 = 0x34
+ PT_I2 = 0x38
+ PT_I3 = 0x3c
+ PT_I4 = 0x40
+ PT_I5 = 0x44
+ PT_I6 = 0x48
+ PT_I7 = 0x4c
+ PT_NPC = 0x8
+ PT_PC = 0x4
+ PT_PSR = 0x0
+ PT_REGS_MAGIC = 0x57ac6c00
+ PT_TNPC = 0x90
+ PT_TPC = 0x88
+ PT_TSTATE = 0x80
+ PT_V9_FP = 0x70
+ PT_V9_G0 = 0x0
+ PT_V9_G1 = 0x8
+ PT_V9_G2 = 0x10
+ PT_V9_G3 = 0x18
+ PT_V9_G4 = 0x20
+ PT_V9_G5 = 0x28
+ PT_V9_G6 = 0x30
+ PT_V9_G7 = 0x38
+ PT_V9_I0 = 0x40
+ PT_V9_I1 = 0x48
+ PT_V9_I2 = 0x50
+ PT_V9_I3 = 0x58
+ PT_V9_I4 = 0x60
+ PT_V9_I5 = 0x68
+ PT_V9_I6 = 0x70
+ PT_V9_I7 = 0x78
+ PT_V9_MAGIC = 0x9c
+ PT_V9_TNPC = 0x90
+ PT_V9_TPC = 0x88
+ PT_V9_TSTATE = 0x80
+ PT_V9_Y = 0x98
+ PT_WIM = 0x10
+ PT_Y = 0xc
+ QNX4_SUPER_MAGIC = 0x2f
+ QNX6_SUPER_MAGIC = 0x68191122
+ RAMFS_MAGIC = 0x858458f6
+ RDTGROUP_SUPER_MAGIC = 0x7655821
+ REISERFS_SUPER_MAGIC = 0x52654973
+ RENAME_EXCHANGE = 0x2
+ RENAME_NOREPLACE = 0x1
+ RENAME_WHITEOUT = 0x4
+ RLIMIT_AS = 0x9
+ RLIMIT_CORE = 0x4
+ RLIMIT_CPU = 0x0
+ RLIMIT_DATA = 0x2
+ RLIMIT_FSIZE = 0x1
+ RLIMIT_LOCKS = 0xa
+ RLIMIT_MEMLOCK = 0x8
+ RLIMIT_MSGQUEUE = 0xc
+ RLIMIT_NICE = 0xd
+ RLIMIT_NOFILE = 0x6
+ RLIMIT_NPROC = 0x7
+ RLIMIT_RSS = 0x5
+ RLIMIT_RTPRIO = 0xe
+ RLIMIT_RTTIME = 0xf
+ RLIMIT_SIGPENDING = 0xb
+ RLIMIT_STACK = 0x3
+ RLIM_INFINITY = 0xffffffffffffffff
+ RTAX_ADVMSS = 0x8
+ RTAX_CC_ALGO = 0x10
+ RTAX_CWND = 0x7
+ RTAX_FASTOPEN_NO_COOKIE = 0x11
+ RTAX_FEATURES = 0xc
+ RTAX_FEATURE_ALLFRAG = 0x8
+ RTAX_FEATURE_ECN = 0x1
+ RTAX_FEATURE_MASK = 0xf
+ RTAX_FEATURE_SACK = 0x2
+ RTAX_FEATURE_TIMESTAMP = 0x4
+ RTAX_HOPLIMIT = 0xa
+ RTAX_INITCWND = 0xb
+ RTAX_INITRWND = 0xe
+ RTAX_LOCK = 0x1
+ RTAX_MAX = 0x11
+ RTAX_MTU = 0x2
+ RTAX_QUICKACK = 0xf
+ RTAX_REORDERING = 0x9
+ RTAX_RTO_MIN = 0xd
+ RTAX_RTT = 0x4
+ RTAX_RTTVAR = 0x5
+ RTAX_SSTHRESH = 0x6
+ RTAX_UNSPEC = 0x0
+ RTAX_WINDOW = 0x3
+ RTA_ALIGNTO = 0x4
+ RTA_MAX = 0x1d
+ RTCF_DIRECTSRC = 0x4000000
+ RTCF_DOREDIRECT = 0x1000000
+ RTCF_LOG = 0x2000000
+ RTCF_MASQ = 0x400000
+ RTCF_NAT = 0x800000
+ RTCF_VALVE = 0x200000
+ RTC_AF = 0x20
+ RTC_AIE_OFF = 0x20007002
+ RTC_AIE_ON = 0x20007001
+ RTC_ALM_READ = 0x40247008
+ RTC_ALM_SET = 0x80247007
+ RTC_EPOCH_READ = 0x4008700d
+ RTC_EPOCH_SET = 0x8008700e
+ RTC_IRQF = 0x80
+ RTC_IRQP_READ = 0x4008700b
+ RTC_IRQP_SET = 0x8008700c
+ RTC_MAX_FREQ = 0x2000
+ RTC_PF = 0x40
+ RTC_PIE_OFF = 0x20007006
+ RTC_PIE_ON = 0x20007005
+ RTC_PLL_GET = 0x40207011
+ RTC_PLL_SET = 0x80207012
+ RTC_RD_TIME = 0x40247009
+ RTC_SET_TIME = 0x8024700a
+ RTC_UF = 0x10
+ RTC_UIE_OFF = 0x20007004
+ RTC_UIE_ON = 0x20007003
+ RTC_VL_CLR = 0x20007014
+ RTC_VL_READ = 0x40047013
+ RTC_WIE_OFF = 0x20007010
+ RTC_WIE_ON = 0x2000700f
+ RTC_WKALM_RD = 0x40287010
+ RTC_WKALM_SET = 0x8028700f
+ RTF_ADDRCLASSMASK = 0xf8000000
+ RTF_ADDRCONF = 0x40000
+ RTF_ALLONLINK = 0x20000
+ RTF_BROADCAST = 0x10000000
+ RTF_CACHE = 0x1000000
+ RTF_DEFAULT = 0x10000
+ RTF_DYNAMIC = 0x10
+ RTF_FLOW = 0x2000000
+ RTF_GATEWAY = 0x2
+ RTF_HOST = 0x4
+ RTF_INTERFACE = 0x40000000
+ RTF_IRTT = 0x100
+ RTF_LINKRT = 0x100000
+ RTF_LOCAL = 0x80000000
+ RTF_MODIFIED = 0x20
+ RTF_MSS = 0x40
+ RTF_MTU = 0x40
+ RTF_MULTICAST = 0x20000000
+ RTF_NAT = 0x8000000
+ RTF_NOFORWARD = 0x1000
+ RTF_NONEXTHOP = 0x200000
+ RTF_NOPMTUDISC = 0x4000
+ RTF_POLICY = 0x4000000
+ RTF_REINSTATE = 0x8
+ RTF_REJECT = 0x200
+ RTF_STATIC = 0x400
+ RTF_THROW = 0x2000
+ RTF_UP = 0x1
+ RTF_WINDOW = 0x80
+ RTF_XRESOLVE = 0x800
+ RTM_BASE = 0x10
+ RTM_DELACTION = 0x31
+ RTM_DELADDR = 0x15
+ RTM_DELADDRLABEL = 0x49
+ RTM_DELCHAIN = 0x65
+ RTM_DELLINK = 0x11
+ RTM_DELMDB = 0x55
+ RTM_DELNEIGH = 0x1d
+ RTM_DELNETCONF = 0x51
+ RTM_DELNSID = 0x59
+ RTM_DELQDISC = 0x25
+ RTM_DELROUTE = 0x19
+ RTM_DELRULE = 0x21
+ RTM_DELTCLASS = 0x29
+ RTM_DELTFILTER = 0x2d
+ RTM_F_CLONED = 0x200
+ RTM_F_EQUALIZE = 0x400
+ RTM_F_FIB_MATCH = 0x2000
+ RTM_F_LOOKUP_TABLE = 0x1000
+ RTM_F_NOTIFY = 0x100
+ RTM_F_PREFIX = 0x800
+ RTM_GETACTION = 0x32
+ RTM_GETADDR = 0x16
+ RTM_GETADDRLABEL = 0x4a
+ RTM_GETANYCAST = 0x3e
+ RTM_GETCHAIN = 0x66
+ RTM_GETDCB = 0x4e
+ RTM_GETLINK = 0x12
+ RTM_GETMDB = 0x56
+ RTM_GETMULTICAST = 0x3a
+ RTM_GETNEIGH = 0x1e
+ RTM_GETNEIGHTBL = 0x42
+ RTM_GETNETCONF = 0x52
+ RTM_GETNSID = 0x5a
+ RTM_GETQDISC = 0x26
+ RTM_GETROUTE = 0x1a
+ RTM_GETRULE = 0x22
+ RTM_GETSTATS = 0x5e
+ RTM_GETTCLASS = 0x2a
+ RTM_GETTFILTER = 0x2e
+ RTM_MAX = 0x67
+ RTM_NEWACTION = 0x30
+ RTM_NEWADDR = 0x14
+ RTM_NEWADDRLABEL = 0x48
+ RTM_NEWCACHEREPORT = 0x60
+ RTM_NEWCHAIN = 0x64
+ RTM_NEWLINK = 0x10
+ RTM_NEWMDB = 0x54
+ RTM_NEWNDUSEROPT = 0x44
+ RTM_NEWNEIGH = 0x1c
+ RTM_NEWNEIGHTBL = 0x40
+ RTM_NEWNETCONF = 0x50
+ RTM_NEWNSID = 0x58
+ RTM_NEWPREFIX = 0x34
+ RTM_NEWQDISC = 0x24
+ RTM_NEWROUTE = 0x18
+ RTM_NEWRULE = 0x20
+ RTM_NEWSTATS = 0x5c
+ RTM_NEWTCLASS = 0x28
+ RTM_NEWTFILTER = 0x2c
+ RTM_NR_FAMILIES = 0x16
+ RTM_NR_MSGTYPES = 0x58
+ RTM_SETDCB = 0x4f
+ RTM_SETLINK = 0x13
+ RTM_SETNEIGHTBL = 0x43
+ RTNH_ALIGNTO = 0x4
+ RTNH_COMPARE_MASK = 0x19
+ RTNH_F_DEAD = 0x1
+ RTNH_F_LINKDOWN = 0x10
+ RTNH_F_OFFLOAD = 0x8
+ RTNH_F_ONLINK = 0x4
+ RTNH_F_PERVASIVE = 0x2
+ RTNH_F_UNRESOLVED = 0x20
+ RTN_MAX = 0xb
+ RTPROT_BABEL = 0x2a
+ RTPROT_BGP = 0xba
+ RTPROT_BIRD = 0xc
+ RTPROT_BOOT = 0x3
+ RTPROT_DHCP = 0x10
+ RTPROT_DNROUTED = 0xd
+ RTPROT_EIGRP = 0xc0
+ RTPROT_GATED = 0x8
+ RTPROT_ISIS = 0xbb
+ RTPROT_KERNEL = 0x2
+ RTPROT_MROUTED = 0x11
+ RTPROT_MRT = 0xa
+ RTPROT_NTK = 0xf
+ RTPROT_OSPF = 0xbc
+ RTPROT_RA = 0x9
+ RTPROT_REDIRECT = 0x1
+ RTPROT_RIP = 0xbd
+ RTPROT_STATIC = 0x4
+ RTPROT_UNSPEC = 0x0
+ RTPROT_XORP = 0xe
+ RTPROT_ZEBRA = 0xb
+ RT_CLASS_DEFAULT = 0xfd
+ RT_CLASS_LOCAL = 0xff
+ RT_CLASS_MAIN = 0xfe
+ RT_CLASS_MAX = 0xff
+ RT_CLASS_UNSPEC = 0x0
+ RUSAGE_CHILDREN = -0x1
+ RUSAGE_SELF = 0x0
+ RUSAGE_THREAD = 0x1
+ SCM_CREDENTIALS = 0x2
+ SCM_RIGHTS = 0x1
+ SCM_TIMESTAMP = 0x1d
+ SCM_TIMESTAMPING = 0x23
+ SCM_TIMESTAMPING_OPT_STATS = 0x38
+ SCM_TIMESTAMPING_PKTINFO = 0x3c
+ SCM_TIMESTAMPNS = 0x21
+ SCM_TXTIME = 0x3f
+ SCM_WIFI_STATUS = 0x25
+ SC_LOG_FLUSH = 0x100000
+ SECCOMP_MODE_DISABLED = 0x0
+ SECCOMP_MODE_FILTER = 0x2
+ SECCOMP_MODE_STRICT = 0x1
+ SECURITYFS_MAGIC = 0x73636673
+ SELINUX_MAGIC = 0xf97cff8c
+ SHUT_RD = 0x0
+ SHUT_RDWR = 0x2
+ SHUT_WR = 0x1
+ SIOCADDDLCI = 0x8980
+ SIOCADDMULTI = 0x8931
+ SIOCADDRT = 0x890b
+ SIOCATMARK = 0x8905
+ SIOCBONDCHANGEACTIVE = 0x8995
+ SIOCBONDENSLAVE = 0x8990
+ SIOCBONDINFOQUERY = 0x8994
+ SIOCBONDRELEASE = 0x8991
+ SIOCBONDSETHWADDR = 0x8992
+ SIOCBONDSLAVEINFOQUERY = 0x8993
+ SIOCBRADDBR = 0x89a0
+ SIOCBRADDIF = 0x89a2
+ SIOCBRDELBR = 0x89a1
+ SIOCBRDELIF = 0x89a3
+ SIOCDARP = 0x8953
+ SIOCDELDLCI = 0x8981
+ SIOCDELMULTI = 0x8932
+ SIOCDELRT = 0x890c
+ SIOCDEVPRIVATE = 0x89f0
+ SIOCDIFADDR = 0x8936
+ SIOCDRARP = 0x8960
+ SIOCETHTOOL = 0x8946
+ SIOCGARP = 0x8954
+ SIOCGHWTSTAMP = 0x89b1
+ SIOCGIFADDR = 0x8915
+ SIOCGIFBR = 0x8940
+ SIOCGIFBRDADDR = 0x8919
+ SIOCGIFCONF = 0x8912
+ SIOCGIFCOUNT = 0x8938
+ SIOCGIFDSTADDR = 0x8917
+ SIOCGIFENCAP = 0x8925
+ SIOCGIFFLAGS = 0x8913
+ SIOCGIFHWADDR = 0x8927
+ SIOCGIFINDEX = 0x8933
+ SIOCGIFMAP = 0x8970
+ SIOCGIFMEM = 0x891f
+ SIOCGIFMETRIC = 0x891d
+ SIOCGIFMTU = 0x8921
+ SIOCGIFNAME = 0x8910
+ SIOCGIFNETMASK = 0x891b
+ SIOCGIFPFLAGS = 0x8935
+ SIOCGIFSLAVE = 0x8929
+ SIOCGIFTXQLEN = 0x8942
+ SIOCGIFVLAN = 0x8982
+ SIOCGMIIPHY = 0x8947
+ SIOCGMIIREG = 0x8948
+ SIOCGPGRP = 0x8904
+ SIOCGPPPCSTATS = 0x89f2
+ SIOCGPPPSTATS = 0x89f0
+ SIOCGPPPVER = 0x89f1
+ SIOCGRARP = 0x8961
+ SIOCGSKNS = 0x894c
+ SIOCGSTAMP = 0x8906
+ SIOCGSTAMPNS = 0x8907
+ SIOCINQ = 0x4004667f
+ SIOCOUTQ = 0x40047473
+ SIOCOUTQNSD = 0x894b
+ SIOCPROTOPRIVATE = 0x89e0
+ SIOCRTMSG = 0x890d
+ SIOCSARP = 0x8955
+ SIOCSHWTSTAMP = 0x89b0
+ SIOCSIFADDR = 0x8916
+ SIOCSIFBR = 0x8941
+ SIOCSIFBRDADDR = 0x891a
+ SIOCSIFDSTADDR = 0x8918
+ SIOCSIFENCAP = 0x8926
+ SIOCSIFFLAGS = 0x8914
+ SIOCSIFHWADDR = 0x8924
+ SIOCSIFHWBROADCAST = 0x8937
+ SIOCSIFLINK = 0x8911
+ SIOCSIFMAP = 0x8971
+ SIOCSIFMEM = 0x8920
+ SIOCSIFMETRIC = 0x891e
+ SIOCSIFMTU = 0x8922
+ SIOCSIFNAME = 0x8923
+ SIOCSIFNETMASK = 0x891c
+ SIOCSIFPFLAGS = 0x8934
+ SIOCSIFSLAVE = 0x8930
+ SIOCSIFTXQLEN = 0x8943
+ SIOCSIFVLAN = 0x8983
+ SIOCSMIIREG = 0x8949
+ SIOCSPGRP = 0x8902
+ SIOCSRARP = 0x8962
+ SIOCWANDEV = 0x894a
+ SMACK_MAGIC = 0x43415d53
+ SMART_AUTOSAVE = 0xd2
+ SMART_AUTO_OFFLINE = 0xdb
+ SMART_DISABLE = 0xd9
+ SMART_ENABLE = 0xd8
+ SMART_HCYL_PASS = 0xc2
+ SMART_IMMEDIATE_OFFLINE = 0xd4
+ SMART_LCYL_PASS = 0x4f
+ SMART_READ_LOG_SECTOR = 0xd5
+ SMART_READ_THRESHOLDS = 0xd1
+ SMART_READ_VALUES = 0xd0
+ SMART_SAVE = 0xd3
+ SMART_STATUS = 0xda
+ SMART_WRITE_LOG_SECTOR = 0xd6
+ SMART_WRITE_THRESHOLDS = 0xd7
+ SMB_SUPER_MAGIC = 0x517b
+ SOCKFS_MAGIC = 0x534f434b
+ SOCK_CLOEXEC = 0x400000
+ SOCK_DCCP = 0x6
+ SOCK_DGRAM = 0x2
+ SOCK_IOC_TYPE = 0x89
+ SOCK_NONBLOCK = 0x4000
+ SOCK_PACKET = 0xa
+ SOCK_RAW = 0x3
+ SOCK_RDM = 0x4
+ SOCK_SEQPACKET = 0x5
+ SOCK_STREAM = 0x1
+ SOL_AAL = 0x109
+ SOL_ALG = 0x117
+ SOL_ATM = 0x108
+ SOL_CAIF = 0x116
+ SOL_CAN_BASE = 0x64
+ SOL_DCCP = 0x10d
+ SOL_DECNET = 0x105
+ SOL_ICMPV6 = 0x3a
+ SOL_IP = 0x0
+ SOL_IPV6 = 0x29
+ SOL_IRDA = 0x10a
+ SOL_IUCV = 0x115
+ SOL_KCM = 0x119
+ SOL_LLC = 0x10c
+ SOL_NETBEUI = 0x10b
+ SOL_NETLINK = 0x10e
+ SOL_NFC = 0x118
+ SOL_PACKET = 0x107
+ SOL_PNPIPE = 0x113
+ SOL_PPPOL2TP = 0x111
+ SOL_RAW = 0xff
+ SOL_RDS = 0x114
+ SOL_RXRPC = 0x110
+ SOL_SOCKET = 0xffff
+ SOL_TCP = 0x6
+ SOL_TIPC = 0x10f
+ SOL_TLS = 0x11a
+ SOL_X25 = 0x106
+ SOL_XDP = 0x11b
+ SOMAXCONN = 0x80
+ SO_ACCEPTCONN = 0x8000
+ SO_ATTACH_BPF = 0x34
+ SO_ATTACH_FILTER = 0x1a
+ SO_ATTACH_REUSEPORT_CBPF = 0x35
+ SO_ATTACH_REUSEPORT_EBPF = 0x36
+ SO_BINDTODEVICE = 0xd
+ SO_BPF_EXTENSIONS = 0x32
+ SO_BROADCAST = 0x20
+ SO_BSDCOMPAT = 0x400
+ SO_BUSY_POLL = 0x30
+ SO_CNX_ADVICE = 0x37
+ SO_COOKIE = 0x3b
+ SO_DEBUG = 0x1
+ SO_DETACH_BPF = 0x1b
+ SO_DETACH_FILTER = 0x1b
+ SO_DOMAIN = 0x1029
+ SO_DONTROUTE = 0x10
+ SO_ERROR = 0x1007
+ SO_GET_FILTER = 0x1a
+ SO_INCOMING_CPU = 0x33
+ SO_INCOMING_NAPI_ID = 0x3a
+ SO_KEEPALIVE = 0x8
+ SO_LINGER = 0x80
+ SO_LOCK_FILTER = 0x28
+ SO_MARK = 0x22
+ SO_MAX_PACING_RATE = 0x31
+ SO_MEMINFO = 0x39
+ SO_NOFCS = 0x27
+ SO_NO_CHECK = 0xb
+ SO_OOBINLINE = 0x100
+ SO_PASSCRED = 0x2
+ SO_PASSSEC = 0x1f
+ SO_PEEK_OFF = 0x26
+ SO_PEERCRED = 0x40
+ SO_PEERGROUPS = 0x3d
+ SO_PEERNAME = 0x1c
+ SO_PEERSEC = 0x1e
+ SO_PRIORITY = 0xc
+ SO_PROTOCOL = 0x1028
+ SO_RCVBUF = 0x1002
+ SO_RCVBUFFORCE = 0x100b
+ SO_RCVLOWAT = 0x800
+ SO_RCVTIMEO = 0x2000
+ SO_REUSEADDR = 0x4
+ SO_REUSEPORT = 0x200
+ SO_RXQ_OVFL = 0x24
+ SO_SECURITY_AUTHENTICATION = 0x5001
+ SO_SECURITY_ENCRYPTION_NETWORK = 0x5004
+ SO_SECURITY_ENCRYPTION_TRANSPORT = 0x5002
+ SO_SELECT_ERR_QUEUE = 0x29
+ SO_SNDBUF = 0x1001
+ SO_SNDBUFFORCE = 0x100a
+ SO_SNDLOWAT = 0x1000
+ SO_SNDTIMEO = 0x4000
+ SO_TIMESTAMP = 0x1d
+ SO_TIMESTAMPING = 0x23
+ SO_TIMESTAMPNS = 0x21
+ SO_TXTIME = 0x3f
+ SO_TYPE = 0x1008
+ SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2
+ SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1
+ SO_VM_SOCKETS_BUFFER_SIZE = 0x0
+ SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6
+ SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7
+ SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3
+ SO_VM_SOCKETS_TRUSTED = 0x5
+ SO_WIFI_STATUS = 0x25
+ SO_ZEROCOPY = 0x3e
+ SPLICE_F_GIFT = 0x8
+ SPLICE_F_MORE = 0x4
+ SPLICE_F_MOVE = 0x1
+ SPLICE_F_NONBLOCK = 0x2
+ SQUASHFS_MAGIC = 0x73717368
+ STACK_END_MAGIC = 0x57ac6e9d
+ STATX_ALL = 0xfff
+ STATX_ATIME = 0x20
+ STATX_ATTR_APPEND = 0x20
+ STATX_ATTR_AUTOMOUNT = 0x1000
+ STATX_ATTR_COMPRESSED = 0x4
+ STATX_ATTR_ENCRYPTED = 0x800
+ STATX_ATTR_IMMUTABLE = 0x10
+ STATX_ATTR_NODUMP = 0x40
+ STATX_BASIC_STATS = 0x7ff
+ STATX_BLOCKS = 0x400
+ STATX_BTIME = 0x800
+ STATX_CTIME = 0x80
+ STATX_GID = 0x10
+ STATX_INO = 0x100
+ STATX_MODE = 0x2
+ STATX_MTIME = 0x40
+ STATX_NLINK = 0x4
+ STATX_SIZE = 0x200
+ STATX_TYPE = 0x1
+ STATX_UID = 0x8
+ STATX__RESERVED = 0x80000000
+ SYNC_FILE_RANGE_WAIT_AFTER = 0x4
+ SYNC_FILE_RANGE_WAIT_BEFORE = 0x1
+ SYNC_FILE_RANGE_WRITE = 0x2
+ SYSFS_MAGIC = 0x62656572
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
+ TAB0 = 0x0
+ TAB1 = 0x800
+ TAB2 = 0x1000
+ TAB3 = 0x1800
+ TABDLY = 0x1800
+ TASKSTATS_CMD_ATTR_MAX = 0x4
+ TASKSTATS_CMD_MAX = 0x2
+ TASKSTATS_GENL_NAME = "TASKSTATS"
+ TASKSTATS_GENL_VERSION = 0x1
+ TASKSTATS_TYPE_MAX = 0x6
+ TASKSTATS_VERSION = 0x9
+ TCFLSH = 0x20005407
+ TCGETA = 0x40125401
+ TCGETS = 0x40245408
+ TCGETS2 = 0x402c540c
+ TCIFLUSH = 0x0
+ TCIOFF = 0x2
+ TCIOFLUSH = 0x2
+ TCION = 0x3
+ TCOFLUSH = 0x1
+ TCOOFF = 0x0
+ TCOON = 0x1
+ TCP_CC_INFO = 0x1a
+ TCP_CONGESTION = 0xd
+ TCP_COOKIE_IN_ALWAYS = 0x1
+ TCP_COOKIE_MAX = 0x10
+ TCP_COOKIE_MIN = 0x8
+ TCP_COOKIE_OUT_NEVER = 0x2
+ TCP_COOKIE_PAIR_SIZE = 0x20
+ TCP_COOKIE_TRANSACTIONS = 0xf
+ TCP_CORK = 0x3
+ TCP_DEFER_ACCEPT = 0x9
+ TCP_FASTOPEN = 0x17
+ TCP_FASTOPEN_CONNECT = 0x1e
+ TCP_FASTOPEN_KEY = 0x21
+ TCP_FASTOPEN_NO_COOKIE = 0x22
+ TCP_INFO = 0xb
+ TCP_KEEPCNT = 0x6
+ TCP_KEEPIDLE = 0x4
+ TCP_KEEPINTVL = 0x5
+ TCP_LINGER2 = 0x8
+ TCP_MAXSEG = 0x2
+ TCP_MAXWIN = 0xffff
+ TCP_MAX_WINSHIFT = 0xe
+ TCP_MD5SIG = 0xe
+ TCP_MD5SIG_EXT = 0x20
+ TCP_MD5SIG_FLAG_PREFIX = 0x1
+ TCP_MD5SIG_MAXKEYLEN = 0x50
+ TCP_MSS = 0x200
+ TCP_MSS_DEFAULT = 0x218
+ TCP_MSS_DESIRED = 0x4c4
+ TCP_NODELAY = 0x1
+ TCP_NOTSENT_LOWAT = 0x19
+ TCP_QUEUE_SEQ = 0x15
+ TCP_QUICKACK = 0xc
+ TCP_REPAIR = 0x13
+ TCP_REPAIR_OPTIONS = 0x16
+ TCP_REPAIR_QUEUE = 0x14
+ TCP_REPAIR_WINDOW = 0x1d
+ TCP_SAVED_SYN = 0x1c
+ TCP_SAVE_SYN = 0x1b
+ TCP_SYNCNT = 0x7
+ TCP_S_DATA_IN = 0x4
+ TCP_S_DATA_OUT = 0x8
+ TCP_THIN_DUPACK = 0x11
+ TCP_THIN_LINEAR_TIMEOUTS = 0x10
+ TCP_TIMESTAMP = 0x18
+ TCP_ULP = 0x1f
+ TCP_USER_TIMEOUT = 0x12
+ TCP_WINDOW_CLAMP = 0xa
+ TCSAFLUSH = 0x2
+ TCSBRK = 0x20005405
+ TCSBRKP = 0x5425
+ TCSETA = 0x80125402
+ TCSETAF = 0x80125404
+ TCSETAW = 0x80125403
+ TCSETS = 0x80245409
+ TCSETS2 = 0x802c540d
+ TCSETSF = 0x8024540b
+ TCSETSF2 = 0x802c540f
+ TCSETSW = 0x8024540a
+ TCSETSW2 = 0x802c540e
+ TCXONC = 0x20005406
+ TIOCCBRK = 0x2000747a
+ TIOCCONS = 0x20007424
+ TIOCEXCL = 0x2000740d
+ TIOCGDEV = 0x40045432
+ TIOCGETD = 0x40047400
+ TIOCGEXCL = 0x40045440
+ TIOCGICOUNT = 0x545d
+ TIOCGISO7816 = 0x40285443
+ TIOCGLCKTRMIOS = 0x5456
+ TIOCGPGRP = 0x40047483
+ TIOCGPKT = 0x40045438
+ TIOCGPTLCK = 0x40045439
+ TIOCGPTN = 0x40047486
+ TIOCGPTPEER = 0x20007489
+ TIOCGRS485 = 0x40205441
+ TIOCGSERIAL = 0x541e
+ TIOCGSID = 0x40047485
+ TIOCGSOFTCAR = 0x40047464
+ TIOCGWINSZ = 0x40087468
+ TIOCINQ = 0x4004667f
+ TIOCLINUX = 0x541c
+ TIOCMBIC = 0x8004746b
+ TIOCMBIS = 0x8004746c
+ TIOCMGET = 0x4004746a
+ TIOCMIWAIT = 0x545c
+ TIOCMSET = 0x8004746d
+ TIOCM_CAR = 0x40
+ TIOCM_CD = 0x40
+ TIOCM_CTS = 0x20
+ TIOCM_DSR = 0x100
+ TIOCM_DTR = 0x2
+ TIOCM_LE = 0x1
+ TIOCM_RI = 0x80
+ TIOCM_RNG = 0x80
+ TIOCM_RTS = 0x4
+ TIOCM_SR = 0x10
+ TIOCM_ST = 0x8
+ TIOCNOTTY = 0x20007471
+ TIOCNXCL = 0x2000740e
+ TIOCOUTQ = 0x40047473
+ TIOCPKT = 0x80047470
+ TIOCPKT_DATA = 0x0
+ TIOCPKT_DOSTOP = 0x20
+ TIOCPKT_FLUSHREAD = 0x1
+ TIOCPKT_FLUSHWRITE = 0x2
+ TIOCPKT_IOCTL = 0x40
+ TIOCPKT_NOSTOP = 0x10
+ TIOCPKT_START = 0x8
+ TIOCPKT_STOP = 0x4
+ TIOCSBRK = 0x2000747b
+ TIOCSCTTY = 0x20007484
+ TIOCSERCONFIG = 0x5453
+ TIOCSERGETLSR = 0x5459
+ TIOCSERGETMULTI = 0x545a
+ TIOCSERGSTRUCT = 0x5458
+ TIOCSERGWILD = 0x5454
+ TIOCSERSETMULTI = 0x545b
+ TIOCSERSWILD = 0x5455
+ TIOCSETD = 0x80047401
+ TIOCSIG = 0x80047488
+ TIOCSISO7816 = 0xc0285444
+ TIOCSLCKTRMIOS = 0x5457
+ TIOCSPGRP = 0x80047482
+ TIOCSPTLCK = 0x80047487
+ TIOCSRS485 = 0xc0205442
+ TIOCSSERIAL = 0x541f
+ TIOCSSOFTCAR = 0x80047465
+ TIOCSTART = 0x2000746e
+ TIOCSTI = 0x80017472
+ TIOCSTOP = 0x2000746f
+ TIOCSWINSZ = 0x80087467
+ TIOCVHANGUP = 0x20005437
+ TMPFS_MAGIC = 0x1021994
+ TOSTOP = 0x100
+ TPACKET_ALIGNMENT = 0x10
+ TPACKET_HDRLEN = 0x34
+ TP_STATUS_AVAILABLE = 0x0
+ TP_STATUS_BLK_TMO = 0x20
+ TP_STATUS_COPY = 0x2
+ TP_STATUS_CSUMNOTREADY = 0x8
+ TP_STATUS_CSUM_VALID = 0x80
+ TP_STATUS_KERNEL = 0x0
+ TP_STATUS_LOSING = 0x4
+ TP_STATUS_SENDING = 0x2
+ TP_STATUS_SEND_REQUEST = 0x1
+ TP_STATUS_TS_RAW_HARDWARE = -0x80000000
+ TP_STATUS_TS_SOFTWARE = 0x20000000
+ TP_STATUS_TS_SYS_HARDWARE = 0x40000000
+ TP_STATUS_USER = 0x1
+ TP_STATUS_VLAN_TPID_VALID = 0x40
+ TP_STATUS_VLAN_VALID = 0x10
+ TP_STATUS_WRONG_FORMAT = 0x4
+ TRACEFS_MAGIC = 0x74726163
+ TS_COMM_LEN = 0x20
+ TUNATTACHFILTER = 0x801054d5
+ TUNDETACHFILTER = 0x801054d6
+ TUNGETFEATURES = 0x400454cf
+ TUNGETFILTER = 0x401054db
+ TUNGETIFF = 0x400454d2
+ TUNGETSNDBUF = 0x400454d3
+ TUNGETVNETBE = 0x400454df
+ TUNGETVNETHDRSZ = 0x400454d7
+ TUNGETVNETLE = 0x400454dd
+ TUNSETDEBUG = 0x800454c9
+ TUNSETFILTEREBPF = 0x400454e1
+ TUNSETGROUP = 0x800454ce
+ TUNSETIFF = 0x800454ca
+ TUNSETIFINDEX = 0x800454da
+ TUNSETLINK = 0x800454cd
+ TUNSETNOCSUM = 0x800454c8
+ TUNSETOFFLOAD = 0x800454d0
+ TUNSETOWNER = 0x800454cc
+ TUNSETPERSIST = 0x800454cb
+ TUNSETQUEUE = 0x800454d9
+ TUNSETSNDBUF = 0x800454d4
+ TUNSETSTEERINGEBPF = 0x400454e0
+ TUNSETTXFILTER = 0x800454d1
+ TUNSETVNETBE = 0x800454de
+ TUNSETVNETHDRSZ = 0x800454d8
+ TUNSETVNETLE = 0x800454dc
+ UBI_IOCATT = 0x80186f40
+ UBI_IOCDET = 0x80046f41
+ UBI_IOCEBCH = 0x80044f02
+ UBI_IOCEBER = 0x80044f01
+ UBI_IOCEBISMAP = 0x40044f05
+ UBI_IOCEBMAP = 0x80084f03
+ UBI_IOCEBUNMAP = 0x80044f04
+ UBI_IOCMKVOL = 0x80986f00
+ UBI_IOCRMVOL = 0x80046f01
+ UBI_IOCRNVOL = 0x91106f03
+ UBI_IOCRSVOL = 0x800c6f02
+ UBI_IOCSETVOLPROP = 0x80104f06
+ UBI_IOCVOLCRBLK = 0x80804f07
+ UBI_IOCVOLRMBLK = 0x20004f08
+ UBI_IOCVOLUP = 0x80084f00
+ UDF_SUPER_MAGIC = 0x15013346
+ UMOUNT_NOFOLLOW = 0x8
+ USBDEVICE_SUPER_MAGIC = 0x9fa2
+ UTIME_NOW = 0x3fffffff
+ UTIME_OMIT = 0x3ffffffe
+ V9FS_MAGIC = 0x1021997
+ VDISCARD = 0xd
+ VEOF = 0x4
+ VEOL = 0xb
+ VEOL2 = 0x10
+ VERASE = 0x2
+ VINTR = 0x0
+ VKILL = 0x3
+ VLNEXT = 0xf
+ VMADDR_CID_ANY = 0xffffffff
+ VMADDR_CID_HOST = 0x2
+ VMADDR_CID_HYPERVISOR = 0x0
+ VMADDR_CID_RESERVED = 0x1
+ VMADDR_PORT_ANY = 0xffffffff
+ VMIN = 0x6
+ VM_SOCKETS_INVALID_VERSION = 0xffffffff
+ VQUIT = 0x1
+ VREPRINT = 0xc
+ VSTART = 0x8
+ VSTOP = 0x9
+ VSUSP = 0xa
+ VSWTC = 0x7
+ VT0 = 0x0
+ VT1 = 0x4000
+ VTDLY = 0x4000
+ VTIME = 0x5
+ VWERASE = 0xe
+ WALL = 0x40000000
+ WCLONE = 0x80000000
+ WCONTINUED = 0x8
+ WDIOC_GETBOOTSTATUS = 0x40045702
+ WDIOC_GETPRETIMEOUT = 0x40045709
+ WDIOC_GETSTATUS = 0x40045701
+ WDIOC_GETSUPPORT = 0x40285700
+ WDIOC_GETTEMP = 0x40045703
+ WDIOC_GETTIMELEFT = 0x4004570a
+ WDIOC_GETTIMEOUT = 0x40045707
+ WDIOC_KEEPALIVE = 0x40045705
+ WDIOC_SETOPTIONS = 0x40045704
+ WDIOC_SETPRETIMEOUT = 0xc0045708
+ WDIOC_SETTIMEOUT = 0xc0045706
+ WEXITED = 0x4
+ WIN_ACKMEDIACHANGE = 0xdb
+ WIN_CHECKPOWERMODE1 = 0xe5
+ WIN_CHECKPOWERMODE2 = 0x98
+ WIN_DEVICE_RESET = 0x8
+ WIN_DIAGNOSE = 0x90
+ WIN_DOORLOCK = 0xde
+ WIN_DOORUNLOCK = 0xdf
+ WIN_DOWNLOAD_MICROCODE = 0x92
+ WIN_FLUSH_CACHE = 0xe7
+ WIN_FLUSH_CACHE_EXT = 0xea
+ WIN_FORMAT = 0x50
+ WIN_GETMEDIASTATUS = 0xda
+ WIN_IDENTIFY = 0xec
+ WIN_IDENTIFY_DMA = 0xee
+ WIN_IDLEIMMEDIATE = 0xe1
+ WIN_INIT = 0x60
+ WIN_MEDIAEJECT = 0xed
+ WIN_MULTREAD = 0xc4
+ WIN_MULTREAD_EXT = 0x29
+ WIN_MULTWRITE = 0xc5
+ WIN_MULTWRITE_EXT = 0x39
+ WIN_NOP = 0x0
+ WIN_PACKETCMD = 0xa0
+ WIN_PIDENTIFY = 0xa1
+ WIN_POSTBOOT = 0xdc
+ WIN_PREBOOT = 0xdd
+ WIN_QUEUED_SERVICE = 0xa2
+ WIN_READ = 0x20
+ WIN_READDMA = 0xc8
+ WIN_READDMA_EXT = 0x25
+ WIN_READDMA_ONCE = 0xc9
+ WIN_READDMA_QUEUED = 0xc7
+ WIN_READDMA_QUEUED_EXT = 0x26
+ WIN_READ_BUFFER = 0xe4
+ WIN_READ_EXT = 0x24
+ WIN_READ_LONG = 0x22
+ WIN_READ_LONG_ONCE = 0x23
+ WIN_READ_NATIVE_MAX = 0xf8
+ WIN_READ_NATIVE_MAX_EXT = 0x27
+ WIN_READ_ONCE = 0x21
+ WIN_RECAL = 0x10
+ WIN_RESTORE = 0x10
+ WIN_SECURITY_DISABLE = 0xf6
+ WIN_SECURITY_ERASE_PREPARE = 0xf3
+ WIN_SECURITY_ERASE_UNIT = 0xf4
+ WIN_SECURITY_FREEZE_LOCK = 0xf5
+ WIN_SECURITY_SET_PASS = 0xf1
+ WIN_SECURITY_UNLOCK = 0xf2
+ WIN_SEEK = 0x70
+ WIN_SETFEATURES = 0xef
+ WIN_SETIDLE1 = 0xe3
+ WIN_SETIDLE2 = 0x97
+ WIN_SETMULT = 0xc6
+ WIN_SET_MAX = 0xf9
+ WIN_SET_MAX_EXT = 0x37
+ WIN_SLEEPNOW1 = 0xe6
+ WIN_SLEEPNOW2 = 0x99
+ WIN_SMART = 0xb0
+ WIN_SPECIFY = 0x91
+ WIN_SRST = 0x8
+ WIN_STANDBY = 0xe2
+ WIN_STANDBY2 = 0x96
+ WIN_STANDBYNOW1 = 0xe0
+ WIN_STANDBYNOW2 = 0x94
+ WIN_VERIFY = 0x40
+ WIN_VERIFY_EXT = 0x42
+ WIN_VERIFY_ONCE = 0x41
+ WIN_WRITE = 0x30
+ WIN_WRITEDMA = 0xca
+ WIN_WRITEDMA_EXT = 0x35
+ WIN_WRITEDMA_ONCE = 0xcb
+ WIN_WRITEDMA_QUEUED = 0xcc
+ WIN_WRITEDMA_QUEUED_EXT = 0x36
+ WIN_WRITE_BUFFER = 0xe8
+ WIN_WRITE_EXT = 0x34
+ WIN_WRITE_LONG = 0x32
+ WIN_WRITE_LONG_ONCE = 0x33
+ WIN_WRITE_ONCE = 0x31
+ WIN_WRITE_SAME = 0xe9
+ WIN_WRITE_VERIFY = 0x3c
+ WNOHANG = 0x1
+ WNOTHREAD = 0x20000000
+ WNOWAIT = 0x1000000
+ WORDSIZE = 0x40
+ WSTOPPED = 0x2
+ WUNTRACED = 0x2
+ XATTR_CREATE = 0x1
+ XATTR_REPLACE = 0x2
+ XCASE = 0x4
+ XDP_COPY = 0x2
+ XDP_FLAGS_DRV_MODE = 0x4
+ XDP_FLAGS_HW_MODE = 0x8
+ XDP_FLAGS_MASK = 0xf
+ XDP_FLAGS_MODES = 0xe
+ XDP_FLAGS_SKB_MODE = 0x2
+ XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1
+ XDP_MMAP_OFFSETS = 0x1
+ XDP_PGOFF_RX_RING = 0x0
+ XDP_PGOFF_TX_RING = 0x80000000
+ XDP_RX_RING = 0x2
+ XDP_SHARED_UMEM = 0x1
+ XDP_STATISTICS = 0x7
+ XDP_TX_RING = 0x3
+ XDP_UMEM_COMPLETION_RING = 0x6
+ XDP_UMEM_FILL_RING = 0x5
+ XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000
+ XDP_UMEM_PGOFF_FILL_RING = 0x100000000
+ XDP_UMEM_REG = 0x4
+ XDP_ZEROCOPY = 0x4
+ XENFS_SUPER_MAGIC = 0xabba1974
+ XFS_SUPER_MAGIC = 0x58465342
+ XTABS = 0x1800
+ ZSMALLOC_MAGIC = 0x58295829
+ __TIOCFLUSH = 0x80047410
)
// Errors
@@ -1969,174 +2628,182 @@ const (
)
// Error table
-var errors = [...]string{
- 1: "operation not permitted",
- 2: "no such file or directory",
- 3: "no such process",
- 4: "interrupted system call",
- 5: "input/output error",
- 6: "no such device or address",
- 7: "argument list too long",
- 8: "exec format error",
- 9: "bad file descriptor",
- 10: "no child processes",
- 11: "resource temporarily unavailable",
- 12: "cannot allocate memory",
- 13: "permission denied",
- 14: "bad address",
- 15: "block device required",
- 16: "device or resource busy",
- 17: "file exists",
- 18: "invalid cross-device link",
- 19: "no such device",
- 20: "not a directory",
- 21: "is a directory",
- 22: "invalid argument",
- 23: "too many open files in system",
- 24: "too many open files",
- 25: "inappropriate ioctl for device",
- 26: "text file busy",
- 27: "file too large",
- 28: "no space left on device",
- 29: "illegal seek",
- 30: "read-only file system",
- 31: "too many links",
- 32: "broken pipe",
- 33: "numerical argument out of domain",
- 34: "numerical result out of range",
- 36: "operation now in progress",
- 37: "operation already in progress",
- 38: "socket operation on non-socket",
- 39: "destination address required",
- 40: "message too long",
- 41: "protocol wrong type for socket",
- 42: "protocol not available",
- 43: "protocol not supported",
- 44: "socket type not supported",
- 45: "operation not supported",
- 46: "protocol family not supported",
- 47: "address family not supported by protocol",
- 48: "address already in use",
- 49: "cannot assign requested address",
- 50: "network is down",
- 51: "network is unreachable",
- 52: "network dropped connection on reset",
- 53: "software caused connection abort",
- 54: "connection reset by peer",
- 55: "no buffer space available",
- 56: "transport endpoint is already connected",
- 57: "transport endpoint is not connected",
- 58: "cannot send after transport endpoint shutdown",
- 59: "too many references: cannot splice",
- 60: "connection timed out",
- 61: "connection refused",
- 62: "too many levels of symbolic links",
- 63: "file name too long",
- 64: "host is down",
- 65: "no route to host",
- 66: "directory not empty",
- 67: "too many processes",
- 68: "too many users",
- 69: "disk quota exceeded",
- 70: "stale file handle",
- 71: "object is remote",
- 72: "device not a stream",
- 73: "timer expired",
- 74: "out of streams resources",
- 75: "no message of desired type",
- 76: "bad message",
- 77: "identifier removed",
- 78: "resource deadlock avoided",
- 79: "no locks available",
- 80: "machine is not on the network",
- 81: "unknown error 81",
- 82: "link has been severed",
- 83: "advertise error",
- 84: "srmount error",
- 85: "communication error on send",
- 86: "protocol error",
- 87: "multihop attempted",
- 88: "RFS specific error",
- 89: "remote address changed",
- 90: "function not implemented",
- 91: "streams pipe error",
- 92: "value too large for defined data type",
- 93: "file descriptor in bad state",
- 94: "channel number out of range",
- 95: "level 2 not synchronized",
- 96: "level 3 halted",
- 97: "level 3 reset",
- 98: "link number out of range",
- 99: "protocol driver not attached",
- 100: "no CSI structure available",
- 101: "level 2 halted",
- 102: "invalid exchange",
- 103: "invalid request descriptor",
- 104: "exchange full",
- 105: "no anode",
- 106: "invalid request code",
- 107: "invalid slot",
- 108: "file locking deadlock error",
- 109: "bad font file format",
- 110: "cannot exec a shared library directly",
- 111: "no data available",
- 112: "accessing a corrupted shared library",
- 113: "package not installed",
- 114: "can not access a needed shared library",
- 115: "name not unique on network",
- 116: "interrupted system call should be restarted",
- 117: "structure needs cleaning",
- 118: "not a XENIX named type file",
- 119: "no XENIX semaphores available",
- 120: "is a named type file",
- 121: "remote I/O error",
- 122: "invalid or incomplete multibyte or wide character",
- 123: "attempting to link in too many shared libraries",
- 124: ".lib section in a.out corrupted",
- 125: "no medium found",
- 126: "wrong medium type",
- 127: "operation canceled",
- 128: "required key not available",
- 129: "key has expired",
- 130: "key has been revoked",
- 131: "key was rejected by service",
- 132: "owner died",
- 133: "state not recoverable",
- 134: "operation not possible due to RF-kill",
- 135: "memory page has hardware error",
+var errorList = [...]struct {
+ num syscall.Errno
+ name string
+ desc string
+}{
+ {1, "EPERM", "operation not permitted"},
+ {2, "ENOENT", "no such file or directory"},
+ {3, "ESRCH", "no such process"},
+ {4, "EINTR", "interrupted system call"},
+ {5, "EIO", "input/output error"},
+ {6, "ENXIO", "no such device or address"},
+ {7, "E2BIG", "argument list too long"},
+ {8, "ENOEXEC", "exec format error"},
+ {9, "EBADF", "bad file descriptor"},
+ {10, "ECHILD", "no child processes"},
+ {11, "EAGAIN", "resource temporarily unavailable"},
+ {12, "ENOMEM", "cannot allocate memory"},
+ {13, "EACCES", "permission denied"},
+ {14, "EFAULT", "bad address"},
+ {15, "ENOTBLK", "block device required"},
+ {16, "EBUSY", "device or resource busy"},
+ {17, "EEXIST", "file exists"},
+ {18, "EXDEV", "invalid cross-device link"},
+ {19, "ENODEV", "no such device"},
+ {20, "ENOTDIR", "not a directory"},
+ {21, "EISDIR", "is a directory"},
+ {22, "EINVAL", "invalid argument"},
+ {23, "ENFILE", "too many open files in system"},
+ {24, "EMFILE", "too many open files"},
+ {25, "ENOTTY", "inappropriate ioctl for device"},
+ {26, "ETXTBSY", "text file busy"},
+ {27, "EFBIG", "file too large"},
+ {28, "ENOSPC", "no space left on device"},
+ {29, "ESPIPE", "illegal seek"},
+ {30, "EROFS", "read-only file system"},
+ {31, "EMLINK", "too many links"},
+ {32, "EPIPE", "broken pipe"},
+ {33, "EDOM", "numerical argument out of domain"},
+ {34, "ERANGE", "numerical result out of range"},
+ {36, "EINPROGRESS", "operation now in progress"},
+ {37, "EALREADY", "operation already in progress"},
+ {38, "ENOTSOCK", "socket operation on non-socket"},
+ {39, "EDESTADDRREQ", "destination address required"},
+ {40, "EMSGSIZE", "message too long"},
+ {41, "EPROTOTYPE", "protocol wrong type for socket"},
+ {42, "ENOPROTOOPT", "protocol not available"},
+ {43, "EPROTONOSUPPORT", "protocol not supported"},
+ {44, "ESOCKTNOSUPPORT", "socket type not supported"},
+ {45, "ENOTSUP", "operation not supported"},
+ {46, "EPFNOSUPPORT", "protocol family not supported"},
+ {47, "EAFNOSUPPORT", "address family not supported by protocol"},
+ {48, "EADDRINUSE", "address already in use"},
+ {49, "EADDRNOTAVAIL", "cannot assign requested address"},
+ {50, "ENETDOWN", "network is down"},
+ {51, "ENETUNREACH", "network is unreachable"},
+ {52, "ENETRESET", "network dropped connection on reset"},
+ {53, "ECONNABORTED", "software caused connection abort"},
+ {54, "ECONNRESET", "connection reset by peer"},
+ {55, "ENOBUFS", "no buffer space available"},
+ {56, "EISCONN", "transport endpoint is already connected"},
+ {57, "ENOTCONN", "transport endpoint is not connected"},
+ {58, "ESHUTDOWN", "cannot send after transport endpoint shutdown"},
+ {59, "ETOOMANYREFS", "too many references: cannot splice"},
+ {60, "ETIMEDOUT", "connection timed out"},
+ {61, "ECONNREFUSED", "connection refused"},
+ {62, "ELOOP", "too many levels of symbolic links"},
+ {63, "ENAMETOOLONG", "file name too long"},
+ {64, "EHOSTDOWN", "host is down"},
+ {65, "EHOSTUNREACH", "no route to host"},
+ {66, "ENOTEMPTY", "directory not empty"},
+ {67, "EPROCLIM", "too many processes"},
+ {68, "EUSERS", "too many users"},
+ {69, "EDQUOT", "disk quota exceeded"},
+ {70, "ESTALE", "stale file handle"},
+ {71, "EREMOTE", "object is remote"},
+ {72, "ENOSTR", "device not a stream"},
+ {73, "ETIME", "timer expired"},
+ {74, "ENOSR", "out of streams resources"},
+ {75, "ENOMSG", "no message of desired type"},
+ {76, "EBADMSG", "bad message"},
+ {77, "EIDRM", "identifier removed"},
+ {78, "EDEADLK", "resource deadlock avoided"},
+ {79, "ENOLCK", "no locks available"},
+ {80, "ENONET", "machine is not on the network"},
+ {81, "ERREMOTE", "unknown error 81"},
+ {82, "ENOLINK", "link has been severed"},
+ {83, "EADV", "advertise error"},
+ {84, "ESRMNT", "srmount error"},
+ {85, "ECOMM", "communication error on send"},
+ {86, "EPROTO", "protocol error"},
+ {87, "EMULTIHOP", "multihop attempted"},
+ {88, "EDOTDOT", "RFS specific error"},
+ {89, "EREMCHG", "remote address changed"},
+ {90, "ENOSYS", "function not implemented"},
+ {91, "ESTRPIPE", "streams pipe error"},
+ {92, "EOVERFLOW", "value too large for defined data type"},
+ {93, "EBADFD", "file descriptor in bad state"},
+ {94, "ECHRNG", "channel number out of range"},
+ {95, "EL2NSYNC", "level 2 not synchronized"},
+ {96, "EL3HLT", "level 3 halted"},
+ {97, "EL3RST", "level 3 reset"},
+ {98, "ELNRNG", "link number out of range"},
+ {99, "EUNATCH", "protocol driver not attached"},
+ {100, "ENOCSI", "no CSI structure available"},
+ {101, "EL2HLT", "level 2 halted"},
+ {102, "EBADE", "invalid exchange"},
+ {103, "EBADR", "invalid request descriptor"},
+ {104, "EXFULL", "exchange full"},
+ {105, "ENOANO", "no anode"},
+ {106, "EBADRQC", "invalid request code"},
+ {107, "EBADSLT", "invalid slot"},
+ {108, "EDEADLOCK", "file locking deadlock error"},
+ {109, "EBFONT", "bad font file format"},
+ {110, "ELIBEXEC", "cannot exec a shared library directly"},
+ {111, "ENODATA", "no data available"},
+ {112, "ELIBBAD", "accessing a corrupted shared library"},
+ {113, "ENOPKG", "package not installed"},
+ {114, "ELIBACC", "can not access a needed shared library"},
+ {115, "ENOTUNIQ", "name not unique on network"},
+ {116, "ERESTART", "interrupted system call should be restarted"},
+ {117, "EUCLEAN", "structure needs cleaning"},
+ {118, "ENOTNAM", "not a XENIX named type file"},
+ {119, "ENAVAIL", "no XENIX semaphores available"},
+ {120, "EISNAM", "is a named type file"},
+ {121, "EREMOTEIO", "remote I/O error"},
+ {122, "EILSEQ", "invalid or incomplete multibyte or wide character"},
+ {123, "ELIBMAX", "attempting to link in too many shared libraries"},
+ {124, "ELIBSCN", ".lib section in a.out corrupted"},
+ {125, "ENOMEDIUM", "no medium found"},
+ {126, "EMEDIUMTYPE", "wrong medium type"},
+ {127, "ECANCELED", "operation canceled"},
+ {128, "ENOKEY", "required key not available"},
+ {129, "EKEYEXPIRED", "key has expired"},
+ {130, "EKEYREVOKED", "key has been revoked"},
+ {131, "EKEYREJECTED", "key was rejected by service"},
+ {132, "EOWNERDEAD", "owner died"},
+ {133, "ENOTRECOVERABLE", "state not recoverable"},
+ {134, "ERFKILL", "operation not possible due to RF-kill"},
+ {135, "EHWPOISON", "memory page has hardware error"},
}
// Signal table
-var signals = [...]string{
- 1: "hangup",
- 2: "interrupt",
- 3: "quit",
- 4: "illegal instruction",
- 5: "trace/breakpoint trap",
- 6: "aborted",
- 7: "EMT trap",
- 8: "floating point exception",
- 9: "killed",
- 10: "bus error",
- 11: "segmentation fault",
- 12: "bad system call",
- 13: "broken pipe",
- 14: "alarm clock",
- 15: "terminated",
- 16: "urgent I/O condition",
- 17: "stopped (signal)",
- 18: "stopped",
- 19: "continued",
- 20: "child exited",
- 21: "stopped (tty input)",
- 22: "stopped (tty output)",
- 23: "I/O possible",
- 24: "CPU time limit exceeded",
- 25: "file size limit exceeded",
- 26: "virtual timer expired",
- 27: "profiling timer expired",
- 28: "window changed",
- 29: "resource lost",
- 30: "user defined signal 1",
- 31: "user defined signal 2",
+var signalList = [...]struct {
+ num syscall.Signal
+ name string
+ desc string
+}{
+ {1, "SIGHUP", "hangup"},
+ {2, "SIGINT", "interrupt"},
+ {3, "SIGQUIT", "quit"},
+ {4, "SIGILL", "illegal instruction"},
+ {5, "SIGTRAP", "trace/breakpoint trap"},
+ {6, "SIGABRT", "aborted"},
+ {7, "SIGEMT", "EMT trap"},
+ {8, "SIGFPE", "floating point exception"},
+ {9, "SIGKILL", "killed"},
+ {10, "SIGBUS", "bus error"},
+ {11, "SIGSEGV", "segmentation fault"},
+ {12, "SIGSYS", "bad system call"},
+ {13, "SIGPIPE", "broken pipe"},
+ {14, "SIGALRM", "alarm clock"},
+ {15, "SIGTERM", "terminated"},
+ {16, "SIGURG", "urgent I/O condition"},
+ {17, "SIGSTOP", "stopped (signal)"},
+ {18, "SIGTSTP", "stopped"},
+ {19, "SIGCONT", "continued"},
+ {20, "SIGCHLD", "child exited"},
+ {21, "SIGTTIN", "stopped (tty input)"},
+ {22, "SIGTTOU", "stopped (tty output)"},
+ {23, "SIGIO", "I/O possible"},
+ {24, "SIGXCPU", "CPU time limit exceeded"},
+ {25, "SIGXFSZ", "file size limit exceeded"},
+ {26, "SIGVTALRM", "virtual timer expired"},
+ {27, "SIGPROF", "profiling timer expired"},
+ {28, "SIGWINCH", "window changed"},
+ {29, "SIGLOST", "power failure"},
+ {30, "SIGUSR1", "user defined signal 1"},
+ {31, "SIGUSR2", "user defined signal 2"},
}
diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go
index cd93ce0d8..78cc04ea6 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go
@@ -550,6 +550,10 @@ const (
EV_ONESHOT = 0x10
EV_SYSFLAGS = 0xf000
EXTA = 0x4b00
+ EXTATTR_CMD_START = 0x1
+ EXTATTR_CMD_STOP = 0x2
+ EXTATTR_NAMESPACE_SYSTEM = 0x2
+ EXTATTR_NAMESPACE_USER = 0x1
EXTB = 0x9600
EXTPROC = 0x800
FD_CLOEXEC = 0x1
@@ -1016,6 +1020,43 @@ const (
MAP_WIRED = 0x800
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
+ MNT_ASYNC = 0x40
+ MNT_BASIC_FLAGS = 0xe782807f
+ MNT_DEFEXPORTED = 0x200
+ MNT_DISCARD = 0x800000
+ MNT_EXKERB = 0x800
+ MNT_EXNORESPORT = 0x8000000
+ MNT_EXPORTANON = 0x400
+ MNT_EXPORTED = 0x100
+ MNT_EXPUBLIC = 0x10000000
+ MNT_EXRDONLY = 0x80
+ MNT_EXTATTR = 0x1000000
+ MNT_FORCE = 0x80000
+ MNT_GETARGS = 0x400000
+ MNT_IGNORE = 0x100000
+ MNT_LAZY = 0x3
+ MNT_LOCAL = 0x1000
+ MNT_LOG = 0x2000000
+ MNT_NOATIME = 0x4000000
+ MNT_NOCOREDUMP = 0x8000
+ MNT_NODEV = 0x10
+ MNT_NODEVMTIME = 0x40000000
+ MNT_NOEXEC = 0x4
+ MNT_NOSUID = 0x8
+ MNT_NOWAIT = 0x2
+ MNT_OP_FLAGS = 0x4d0000
+ MNT_QUOTA = 0x2000
+ MNT_RDONLY = 0x1
+ MNT_RELATIME = 0x20000
+ MNT_RELOAD = 0x40000
+ MNT_ROOTFS = 0x4000
+ MNT_SOFTDEP = 0x80000000
+ MNT_SYMPERM = 0x20000000
+ MNT_SYNCHRONOUS = 0x2
+ MNT_UNION = 0x20
+ MNT_UPDATE = 0x10000
+ MNT_VISFLAGMASK = 0xff90ffff
+ MNT_WAIT = 0x1
MSG_BCAST = 0x100
MSG_CMSG_CLOEXEC = 0x800
MSG_CONTROLMBUF = 0x2000000
@@ -1109,7 +1150,10 @@ const (
RLIMIT_CPU = 0x0
RLIMIT_DATA = 0x2
RLIMIT_FSIZE = 0x1
+ RLIMIT_MEMLOCK = 0x6
RLIMIT_NOFILE = 0x8
+ RLIMIT_NPROC = 0x7
+ RLIMIT_RSS = 0x5
RLIMIT_STACK = 0x3
RLIM_INFINITY = 0x7fffffffffffffff
RTAX_AUTHOR = 0x6
diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
index 071701c41..92185e693 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go
@@ -540,6 +540,10 @@ const (
EV_ONESHOT = 0x10
EV_SYSFLAGS = 0xf000
EXTA = 0x4b00
+ EXTATTR_CMD_START = 0x1
+ EXTATTR_CMD_STOP = 0x2
+ EXTATTR_NAMESPACE_SYSTEM = 0x2
+ EXTATTR_NAMESPACE_USER = 0x1
EXTB = 0x9600
EXTPROC = 0x800
FD_CLOEXEC = 0x1
@@ -1006,6 +1010,43 @@ const (
MAP_WIRED = 0x800
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
+ MNT_ASYNC = 0x40
+ MNT_BASIC_FLAGS = 0xe782807f
+ MNT_DEFEXPORTED = 0x200
+ MNT_DISCARD = 0x800000
+ MNT_EXKERB = 0x800
+ MNT_EXNORESPORT = 0x8000000
+ MNT_EXPORTANON = 0x400
+ MNT_EXPORTED = 0x100
+ MNT_EXPUBLIC = 0x10000000
+ MNT_EXRDONLY = 0x80
+ MNT_EXTATTR = 0x1000000
+ MNT_FORCE = 0x80000
+ MNT_GETARGS = 0x400000
+ MNT_IGNORE = 0x100000
+ MNT_LAZY = 0x3
+ MNT_LOCAL = 0x1000
+ MNT_LOG = 0x2000000
+ MNT_NOATIME = 0x4000000
+ MNT_NOCOREDUMP = 0x8000
+ MNT_NODEV = 0x10
+ MNT_NODEVMTIME = 0x40000000
+ MNT_NOEXEC = 0x4
+ MNT_NOSUID = 0x8
+ MNT_NOWAIT = 0x2
+ MNT_OP_FLAGS = 0x4d0000
+ MNT_QUOTA = 0x2000
+ MNT_RDONLY = 0x1
+ MNT_RELATIME = 0x20000
+ MNT_RELOAD = 0x40000
+ MNT_ROOTFS = 0x4000
+ MNT_SOFTDEP = 0x80000000
+ MNT_SYMPERM = 0x20000000
+ MNT_SYNCHRONOUS = 0x2
+ MNT_UNION = 0x20
+ MNT_UPDATE = 0x10000
+ MNT_VISFLAGMASK = 0xff90ffff
+ MNT_WAIT = 0x1
MSG_BCAST = 0x100
MSG_CMSG_CLOEXEC = 0x800
MSG_CONTROLMBUF = 0x2000000
@@ -1099,7 +1140,10 @@ const (
RLIMIT_CPU = 0x0
RLIMIT_DATA = 0x2
RLIMIT_FSIZE = 0x1
+ RLIMIT_MEMLOCK = 0x6
RLIMIT_NOFILE = 0x8
+ RLIMIT_NPROC = 0x7
+ RLIMIT_RSS = 0x5
RLIMIT_STACK = 0x3
RLIM_INFINITY = 0x7fffffffffffffff
RTAX_AUTHOR = 0x6
diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go
index 5fe56ae8c..373ad4543 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go
@@ -532,6 +532,10 @@ const (
EV_ONESHOT = 0x10
EV_SYSFLAGS = 0xf000
EXTA = 0x4b00
+ EXTATTR_CMD_START = 0x1
+ EXTATTR_CMD_STOP = 0x2
+ EXTATTR_NAMESPACE_SYSTEM = 0x2
+ EXTATTR_NAMESPACE_USER = 0x1
EXTB = 0x9600
EXTPROC = 0x800
FD_CLOEXEC = 0x1
@@ -996,6 +1000,43 @@ const (
MAP_STACK = 0x2000
MAP_TRYFIXED = 0x400
MAP_WIRED = 0x800
+ MNT_ASYNC = 0x40
+ MNT_BASIC_FLAGS = 0xe782807f
+ MNT_DEFEXPORTED = 0x200
+ MNT_DISCARD = 0x800000
+ MNT_EXKERB = 0x800
+ MNT_EXNORESPORT = 0x8000000
+ MNT_EXPORTANON = 0x400
+ MNT_EXPORTED = 0x100
+ MNT_EXPUBLIC = 0x10000000
+ MNT_EXRDONLY = 0x80
+ MNT_EXTATTR = 0x1000000
+ MNT_FORCE = 0x80000
+ MNT_GETARGS = 0x400000
+ MNT_IGNORE = 0x100000
+ MNT_LAZY = 0x3
+ MNT_LOCAL = 0x1000
+ MNT_LOG = 0x2000000
+ MNT_NOATIME = 0x4000000
+ MNT_NOCOREDUMP = 0x8000
+ MNT_NODEV = 0x10
+ MNT_NODEVMTIME = 0x40000000
+ MNT_NOEXEC = 0x4
+ MNT_NOSUID = 0x8
+ MNT_NOWAIT = 0x2
+ MNT_OP_FLAGS = 0x4d0000
+ MNT_QUOTA = 0x2000
+ MNT_RDONLY = 0x1
+ MNT_RELATIME = 0x20000
+ MNT_RELOAD = 0x40000
+ MNT_ROOTFS = 0x4000
+ MNT_SOFTDEP = 0x80000000
+ MNT_SYMPERM = 0x20000000
+ MNT_SYNCHRONOUS = 0x2
+ MNT_UNION = 0x20
+ MNT_UPDATE = 0x10000
+ MNT_VISFLAGMASK = 0xff90ffff
+ MNT_WAIT = 0x1
MSG_BCAST = 0x100
MSG_CMSG_CLOEXEC = 0x800
MSG_CONTROLMBUF = 0x2000000
@@ -1089,7 +1130,10 @@ const (
RLIMIT_CPU = 0x0
RLIMIT_DATA = 0x2
RLIMIT_FSIZE = 0x1
+ RLIMIT_MEMLOCK = 0x6
RLIMIT_NOFILE = 0x8
+ RLIMIT_NPROC = 0x7
+ RLIMIT_RSS = 0x5
RLIMIT_STACK = 0x3
RLIM_INFINITY = 0x7fffffffffffffff
RTAX_AUTHOR = 0x6
diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go
index 0a1c3e7e8..d8be04518 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go
@@ -899,6 +899,32 @@ const (
MAP_TRYFIXED = 0x400
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
+ MNT_ASYNC = 0x40
+ MNT_DEFEXPORTED = 0x200
+ MNT_DELEXPORT = 0x20000
+ MNT_DOOMED = 0x8000000
+ MNT_EXPORTANON = 0x400
+ MNT_EXPORTED = 0x100
+ MNT_EXRDONLY = 0x80
+ MNT_FORCE = 0x80000
+ MNT_LAZY = 0x3
+ MNT_LOCAL = 0x1000
+ MNT_NOATIME = 0x8000
+ MNT_NODEV = 0x10
+ MNT_NOEXEC = 0x4
+ MNT_NOSUID = 0x8
+ MNT_NOWAIT = 0x2
+ MNT_QUOTA = 0x2000
+ MNT_RDONLY = 0x1
+ MNT_RELOAD = 0x40000
+ MNT_ROOTFS = 0x4000
+ MNT_SOFTDEP = 0x4000000
+ MNT_SYNCHRONOUS = 0x2
+ MNT_UPDATE = 0x10000
+ MNT_VISFLAGMASK = 0x400ffff
+ MNT_WAIT = 0x1
+ MNT_WANTRDWR = 0x2000000
+ MNT_WXALLOWED = 0x800
MSG_BCAST = 0x100
MSG_CTRUNC = 0x20
MSG_DONTROUTE = 0x4
@@ -1218,6 +1244,34 @@ const (
SO_TIMESTAMP = 0x800
SO_TYPE = 0x1008
SO_USELOOPBACK = 0x40
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TCIFLUSH = 0x1
TCIOFLUSH = 0x3
TCOFLUSH = 0x2
diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
index acfc66469..1f9e8a29e 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go
@@ -472,6 +472,7 @@ const (
F_GETLK = 0x7
F_GETOWN = 0x5
F_ISATTY = 0xb
+ F_OK = 0x0
F_RDLCK = 0x1
F_SETFD = 0x2
F_SETFL = 0x4
@@ -938,6 +939,34 @@ const (
MAP_TRYFIXED = 0x0
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
+ MNT_ASYNC = 0x40
+ MNT_DEFEXPORTED = 0x200
+ MNT_DELEXPORT = 0x20000
+ MNT_DOOMED = 0x8000000
+ MNT_EXPORTANON = 0x400
+ MNT_EXPORTED = 0x100
+ MNT_EXRDONLY = 0x80
+ MNT_FORCE = 0x80000
+ MNT_LAZY = 0x3
+ MNT_LOCAL = 0x1000
+ MNT_NOATIME = 0x8000
+ MNT_NODEV = 0x10
+ MNT_NOEXEC = 0x4
+ MNT_NOPERM = 0x20
+ MNT_NOSUID = 0x8
+ MNT_NOWAIT = 0x2
+ MNT_QUOTA = 0x2000
+ MNT_RDONLY = 0x1
+ MNT_RELOAD = 0x40000
+ MNT_ROOTFS = 0x4000
+ MNT_SOFTDEP = 0x4000000
+ MNT_STALLED = 0x100000
+ MNT_SYNCHRONOUS = 0x2
+ MNT_UPDATE = 0x10000
+ MNT_VISFLAGMASK = 0x400ffff
+ MNT_WAIT = 0x1
+ MNT_WANTRDWR = 0x2000000
+ MNT_WXALLOWED = 0x800
MSG_BCAST = 0x100
MSG_CMSG_CLOEXEC = 0x800
MSG_CTRUNC = 0x20
@@ -1296,6 +1325,34 @@ const (
SO_TYPE = 0x1008
SO_USELOOPBACK = 0x40
SO_ZEROIZE = 0x2000
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TCIFLUSH = 0x1
TCIOFF = 0x3
TCIOFLUSH = 0x3
@@ -1386,6 +1443,8 @@ const (
TIOCUCNTL_CBRK = 0x7a
TIOCUCNTL_SBRK = 0x7b
TOSTOP = 0x400000
+ UTIME_NOW = -0x2
+ UTIME_OMIT = -0x1
VDISCARD = 0xf
VDSUSP = 0xb
VEOF = 0x0
diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go
index 93e37c4b2..79d5695c3 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go
@@ -899,6 +899,32 @@ const (
MAP_TRYFIXED = 0x0
MCL_CURRENT = 0x1
MCL_FUTURE = 0x2
+ MNT_ASYNC = 0x40
+ MNT_DEFEXPORTED = 0x200
+ MNT_DELEXPORT = 0x20000
+ MNT_DOOMED = 0x8000000
+ MNT_EXPORTANON = 0x400
+ MNT_EXPORTED = 0x100
+ MNT_EXRDONLY = 0x80
+ MNT_FORCE = 0x80000
+ MNT_LAZY = 0x3
+ MNT_LOCAL = 0x1000
+ MNT_NOATIME = 0x8000
+ MNT_NODEV = 0x10
+ MNT_NOEXEC = 0x4
+ MNT_NOSUID = 0x8
+ MNT_NOWAIT = 0x2
+ MNT_QUOTA = 0x2000
+ MNT_RDONLY = 0x1
+ MNT_RELOAD = 0x40000
+ MNT_ROOTFS = 0x4000
+ MNT_SOFTDEP = 0x4000000
+ MNT_SYNCHRONOUS = 0x2
+ MNT_UPDATE = 0x10000
+ MNT_VISFLAGMASK = 0x400ffff
+ MNT_WAIT = 0x1
+ MNT_WANTRDWR = 0x2000000
+ MNT_WXALLOWED = 0x800
MSG_BCAST = 0x100
MSG_CMSG_CLOEXEC = 0x800
MSG_CTRUNC = 0x20
@@ -1221,6 +1247,34 @@ const (
SO_TIMESTAMP = 0x800
SO_TYPE = 0x1008
SO_USELOOPBACK = 0x40
+ S_BLKSIZE = 0x200
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISTXT = 0x200
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TCIFLUSH = 0x1
TCIOFLUSH = 0x3
TCOFLUSH = 0x2
diff --git a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
index be42830cf..22569db31 100644
--- a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go
@@ -996,6 +996,39 @@ const (
SO_USELOOPBACK = 0x40
SO_VRRP = 0x1017
SO_WROFF = 0x2
+ S_ENFMT = 0x400
+ S_IAMB = 0x1ff
+ S_IEXEC = 0x40
+ S_IFBLK = 0x6000
+ S_IFCHR = 0x2000
+ S_IFDIR = 0x4000
+ S_IFDOOR = 0xd000
+ S_IFIFO = 0x1000
+ S_IFLNK = 0xa000
+ S_IFMT = 0xf000
+ S_IFNAM = 0x5000
+ S_IFPORT = 0xe000
+ S_IFREG = 0x8000
+ S_IFSOCK = 0xc000
+ S_INSEM = 0x1
+ S_INSHD = 0x2
+ S_IREAD = 0x100
+ S_IRGRP = 0x20
+ S_IROTH = 0x4
+ S_IRUSR = 0x100
+ S_IRWXG = 0x38
+ S_IRWXO = 0x7
+ S_IRWXU = 0x1c0
+ S_ISGID = 0x400
+ S_ISUID = 0x800
+ S_ISVTX = 0x200
+ S_IWGRP = 0x10
+ S_IWOTH = 0x2
+ S_IWRITE = 0x80
+ S_IWUSR = 0x80
+ S_IXGRP = 0x8
+ S_IXOTH = 0x1
+ S_IXUSR = 0x40
TAB0 = 0x0
TAB1 = 0x800
TAB2 = 0x1000
@@ -1102,6 +1135,8 @@ const (
TIOCSTOP = 0x746f
TIOCSWINSZ = 0x5467
TOSTOP = 0x100
+ UTIME_NOW = -0x1
+ UTIME_OMIT = -0x2
VCEOF = 0x8
VCEOL = 0x9
VDISCARD = 0xd
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go
new file mode 100644
index 000000000..79f6e0566
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go
@@ -0,0 +1,1450 @@
+// go run mksyscall_aix_ppc.go -aix -tags aix,ppc syscall_aix.go syscall_aix_ppc.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build aix,ppc
+
+package unix
+
+/*
+#include <stdint.h>
+#include <stddef.h>
+int utimes(uintptr_t, uintptr_t);
+int utimensat(int, uintptr_t, uintptr_t, int);
+int getcwd(uintptr_t, size_t);
+int accept(int, uintptr_t, uintptr_t);
+int getdirent(int, uintptr_t, size_t);
+int wait4(int, uintptr_t, int, uintptr_t);
+int ioctl(int, int, uintptr_t);
+int fcntl(uintptr_t, int, uintptr_t);
+int acct(uintptr_t);
+int chdir(uintptr_t);
+int chroot(uintptr_t);
+int close(int);
+int dup(int);
+void exit(int);
+int faccessat(int, uintptr_t, unsigned int, int);
+int fchdir(int);
+int fchmod(int, unsigned int);
+int fchmodat(int, uintptr_t, unsigned int, int);
+int fchownat(int, uintptr_t, int, int, int);
+int fdatasync(int);
+int fsync(int);
+int getpgid(int);
+int getpgrp();
+int getpid();
+int getppid();
+int getpriority(int, int);
+int getrusage(int, uintptr_t);
+int getsid(int);
+int kill(int, int);
+int syslog(int, uintptr_t, size_t);
+int mkdir(int, uintptr_t, unsigned int);
+int mkdirat(int, uintptr_t, unsigned int);
+int mkfifo(uintptr_t, unsigned int);
+int mknod(uintptr_t, unsigned int, int);
+int mknodat(int, uintptr_t, unsigned int, int);
+int nanosleep(uintptr_t, uintptr_t);
+int open64(uintptr_t, int, unsigned int);
+int openat(int, uintptr_t, int, unsigned int);
+int read(int, uintptr_t, size_t);
+int readlink(uintptr_t, uintptr_t, size_t);
+int renameat(int, uintptr_t, int, uintptr_t);
+int setdomainname(uintptr_t, size_t);
+int sethostname(uintptr_t, size_t);
+int setpgid(int, int);
+int setsid();
+int settimeofday(uintptr_t);
+int setuid(int);
+int setgid(int);
+int setpriority(int, int, int);
+int statx(int, uintptr_t, int, int, uintptr_t);
+int sync();
+uintptr_t times(uintptr_t);
+int umask(int);
+int uname(uintptr_t);
+int unlink(uintptr_t);
+int unlinkat(int, uintptr_t, int);
+int ustat(int, uintptr_t);
+int write(int, uintptr_t, size_t);
+int dup2(int, int);
+int posix_fadvise64(int, long long, long long, int);
+int fchown(int, int, int);
+int fstat(int, uintptr_t);
+int fstatat(int, uintptr_t, uintptr_t, int);
+int fstatfs(int, uintptr_t);
+int ftruncate(int, long long);
+int getegid();
+int geteuid();
+int getgid();
+int getuid();
+int lchown(uintptr_t, int, int);
+int listen(int, int);
+int lstat(uintptr_t, uintptr_t);
+int pause();
+int pread64(int, uintptr_t, size_t, long long);
+int pwrite64(int, uintptr_t, size_t, long long);
+int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
+int setregid(int, int);
+int setreuid(int, int);
+int shutdown(int, int);
+long long splice(int, uintptr_t, int, uintptr_t, int, int);
+int stat(uintptr_t, uintptr_t);
+int statfs(uintptr_t, uintptr_t);
+int truncate(uintptr_t, long long);
+int bind(int, uintptr_t, uintptr_t);
+int connect(int, uintptr_t, uintptr_t);
+int getgroups(int, uintptr_t);
+int setgroups(int, uintptr_t);
+int getsockopt(int, int, int, uintptr_t, uintptr_t);
+int setsockopt(int, int, int, uintptr_t, uintptr_t);
+int socket(int, int, int);
+int socketpair(int, int, int, uintptr_t);
+int getpeername(int, uintptr_t, uintptr_t);
+int getsockname(int, uintptr_t, uintptr_t);
+int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);
+int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);
+int recvmsg(int, uintptr_t, int);
+int sendmsg(int, uintptr_t, int);
+int munmap(uintptr_t, uintptr_t);
+int madvise(uintptr_t, size_t, int);
+int mprotect(uintptr_t, size_t, int);
+int mlock(uintptr_t, size_t);
+int mlockall(int);
+int msync(uintptr_t, size_t, int);
+int munlock(uintptr_t, size_t);
+int munlockall();
+int pipe(uintptr_t);
+int poll(uintptr_t, int, int);
+int gettimeofday(uintptr_t, uintptr_t);
+int time(uintptr_t);
+int utime(uintptr_t, uintptr_t);
+int getrlimit64(int, uintptr_t);
+int setrlimit64(int, uintptr_t);
+long long lseek64(int, long long, int);
+uintptr_t mmap(uintptr_t, uintptr_t, int, int, int, long long);
+
+*/
+import "C"
+import (
+ "unsafe"
+)
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func utimes(path string, times *[2]Timeval) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.utimes(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))), C.int(flag))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getcwd(buf []byte) (err error) {
+ var _p0 *byte
+ if len(buf) > 0 {
+ _p0 = &buf[0]
+ }
+ var _p1 int
+ _p1 = len(buf)
+ r0, er := C.getcwd(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
+ r0, er := C.accept(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))
+ fd = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getdirent(fd int, buf []byte) (n int, err error) {
+ var _p0 *byte
+ if len(buf) > 0 {
+ _p0 = &buf[0]
+ }
+ var _p1 int
+ _p1 = len(buf)
+ r0, er := C.getdirent(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) {
+ r0, er := C.wait4(C.int(pid), C.uintptr_t(uintptr(unsafe.Pointer(status))), C.int(options), C.uintptr_t(uintptr(unsafe.Pointer(rusage))))
+ wpid = Pid_t(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ioctl(fd int, req uint, arg uintptr) (err error) {
+ r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) {
+ r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))
+ r = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {
+ r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(uintptr(unsafe.Pointer(lk))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fcntl(fd int, cmd int, arg int) (val int, err error) {
+ r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))
+ val = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Acct(path string) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.acct(C.uintptr_t(_p0))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chdir(path string) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.chdir(C.uintptr_t(_p0))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chroot(path string) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.chroot(C.uintptr_t(_p0))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Close(fd int) (err error) {
+ r0, er := C.close(C.int(fd))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup(oldfd int) (fd int, err error) {
+ r0, er := C.dup(C.int(oldfd))
+ fd = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Exit(code int) {
+ C.exit(C.int(code))
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchdir(fd int) (err error) {
+ r0, er := C.fchdir(C.int(fd))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmod(fd int, mode uint32) (err error) {
+ r0, er := C.fchmod(C.int(fd), C.uint(mode))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fdatasync(fd int) (err error) {
+ r0, er := C.fdatasync(C.int(fd))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsync(fd int) (err error) {
+ r0, er := C.fsync(C.int(fd))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgid(pid int) (pgid int, err error) {
+ r0, er := C.getpgid(C.int(pid))
+ pgid = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgrp() (pid int) {
+ r0, _ := C.getpgrp()
+ pid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpid() (pid int) {
+ r0, _ := C.getpid()
+ pid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getppid() (ppid int) {
+ r0, _ := C.getppid()
+ ppid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpriority(which int, who int) (prio int, err error) {
+ r0, er := C.getpriority(C.int(which), C.int(who))
+ prio = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrusage(who int, rusage *Rusage) (err error) {
+ r0, er := C.getrusage(C.int(who), C.uintptr_t(uintptr(unsafe.Pointer(rusage))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getsid(pid int) (sid int, err error) {
+ r0, er := C.getsid(C.int(pid))
+ sid = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Kill(pid int, sig Signal) (err error) {
+ r0, er := C.kill(C.int(pid), C.int(sig))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Klogctl(typ int, buf []byte) (n int, err error) {
+ var _p0 *byte
+ if len(buf) > 0 {
+ _p0 = &buf[0]
+ }
+ var _p1 int
+ _p1 = len(buf)
+ r0, er := C.syslog(C.int(typ), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdir(dirfd int, path string, mode uint32) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkfifo(path string, mode uint32) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.mkfifo(C.uintptr_t(_p0), C.uint(mode))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mknod(path string, mode uint32, dev int) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
+ r0, er := C.nanosleep(C.uintptr_t(uintptr(unsafe.Pointer(time))), C.uintptr_t(uintptr(unsafe.Pointer(leftover))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Open(path string, mode int, perm uint32) (fd int, err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm))
+ fd = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode))
+ fd = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func read(fd int, p []byte) (n int, err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ var _p1 int
+ _p1 = len(p)
+ r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlink(path string, buf []byte) (n int, err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ var _p1 *byte
+ if len(buf) > 0 {
+ _p1 = &buf[0]
+ }
+ var _p2 int
+ _p2 = len(buf)
+ r0, er := C.readlink(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(_p1))), C.size_t(_p2))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(oldpath)))
+ _p1 := uintptr(unsafe.Pointer(C.CString(newpath)))
+ r0, er := C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setdomainname(p []byte) (err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ var _p1 int
+ _p1 = len(p)
+ r0, er := C.setdomainname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Sethostname(p []byte) (err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ var _p1 int
+ _p1 = len(p)
+ r0, er := C.sethostname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpgid(pid int, pgid int) (err error) {
+ r0, er := C.setpgid(C.int(pid), C.int(pgid))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setsid() (pid int, err error) {
+ r0, er := C.setsid()
+ pid = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Settimeofday(tv *Timeval) (err error) {
+ r0, er := C.settimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setuid(uid int) (err error) {
+ r0, er := C.setuid(C.int(uid))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setgid(uid int) (err error) {
+ r0, er := C.setgid(C.int(uid))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpriority(which int, who int, prio int) (err error) {
+ r0, er := C.setpriority(C.int(which), C.int(who), C.int(prio))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Sync() {
+ C.sync()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Times(tms *Tms) (ticks uintptr, err error) {
+ r0, er := C.times(C.uintptr_t(uintptr(unsafe.Pointer(tms))))
+ ticks = uintptr(r0)
+ if uintptr(r0) == ^uintptr(0) && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Umask(mask int) (oldmask int) {
+ r0, _ := C.umask(C.int(mask))
+ oldmask = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Uname(buf *Utsname) (err error) {
+ r0, er := C.uname(C.uintptr_t(uintptr(unsafe.Pointer(buf))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlink(path string) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.unlink(C.uintptr_t(_p0))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Ustat(dev int, ubuf *Ustat_t) (err error) {
+ r0, er := C.ustat(C.int(dev), C.uintptr_t(uintptr(unsafe.Pointer(ubuf))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func write(fd int, p []byte) (n int, err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ var _p1 int
+ _p1 = len(p)
+ r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func readlen(fd int, p *byte, np int) (n int, err error) {
+ r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func writelen(fd int, p *byte, np int) (n int, err error) {
+ r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup2(oldfd int, newfd int) (err error) {
+ r0, er := C.dup2(C.int(oldfd), C.int(newfd))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
+ r0, er := C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchown(fd int, uid int, gid int) (err error) {
+ r0, er := C.fchown(C.int(fd), C.int(uid), C.int(gid))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstat(fd int, stat *Stat_t) (err error) {
+ r0, er := C.fstat(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))), C.int(flags))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatfs(fd int, buf *Statfs_t) (err error) {
+ r0, er := C.fstatfs(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(buf))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Ftruncate(fd int, length int64) (err error) {
+ r0, er := C.ftruncate(C.int(fd), C.longlong(length))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getegid() (egid int) {
+ r0, _ := C.getegid()
+ egid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Geteuid() (euid int) {
+ r0, _ := C.geteuid()
+ euid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getgid() (gid int) {
+ r0, _ := C.getgid()
+ gid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getuid() (uid int) {
+ r0, _ := C.getuid()
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lchown(path string, uid int, gid int) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Listen(s int, n int) (err error) {
+ r0, er := C.listen(C.int(s), C.int(n))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lstat(path string, stat *Stat_t) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.lstat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pause() (err error) {
+ r0, er := C.pause()
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pread(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ var _p1 int
+ _p1 = len(p)
+ r0, er := C.pread64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ var _p1 int
+ _p1 = len(p)
+ r0, er := C.pwrite64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
+ r0, er := C.pselect(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout))), C.uintptr_t(uintptr(unsafe.Pointer(sigmask))))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setregid(rgid int, egid int) (err error) {
+ r0, er := C.setregid(C.int(rgid), C.int(egid))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setreuid(ruid int, euid int) (err error) {
+ r0, er := C.setreuid(C.int(ruid), C.int(euid))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Shutdown(fd int, how int) (err error) {
+ r0, er := C.shutdown(C.int(fd), C.int(how))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
+ r0, er := C.splice(C.int(rfd), C.uintptr_t(uintptr(unsafe.Pointer(roff))), C.int(wfd), C.uintptr_t(uintptr(unsafe.Pointer(woff))), C.int(len), C.int(flags))
+ n = int64(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Stat(path string, stat *Stat_t) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.stat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statfs(path string, buf *Statfs_t) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.statfs(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Truncate(path string, length int64) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.truncate(C.uintptr_t(_p0), C.longlong(length))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ r0, er := C.bind(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen)))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ r0, er := C.connect(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen)))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getgroups(n int, list *_Gid_t) (nn int, err error) {
+ r0, er := C.getgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list))))
+ nn = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setgroups(n int, list *_Gid_t) (err error) {
+ r0, er := C.setgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
+ r0, er := C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(uintptr(unsafe.Pointer(vallen))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
+ r0, er := C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(vallen))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socket(domain int, typ int, proto int) (fd int, err error) {
+ r0, er := C.socket(C.int(domain), C.int(typ), C.int(proto))
+ fd = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
+ r0, er := C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(uintptr(unsafe.Pointer(fd))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ r0, er := C.getpeername(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ r0, er := C.getsockname(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ var _p1 int
+ _p1 = len(p)
+ r0, er := C.recvfrom(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(unsafe.Pointer(from))), C.uintptr_t(uintptr(unsafe.Pointer(fromlen))))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
+ var _p0 *byte
+ if len(buf) > 0 {
+ _p0 = &buf[0]
+ }
+ var _p1 int
+ _p1 = len(buf)
+ r0, er := C.sendto(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(to)), C.uintptr_t(uintptr(addrlen)))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, er := C.recvmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, er := C.sendmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func munmap(addr uintptr, length uintptr) (err error) {
+ r0, er := C.munmap(C.uintptr_t(addr), C.uintptr_t(length))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Madvise(b []byte, advice int) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ var _p1 int
+ _p1 = len(b)
+ r0, er := C.madvise(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(advice))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mprotect(b []byte, prot int) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ var _p1 int
+ _p1 = len(b)
+ r0, er := C.mprotect(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(prot))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlock(b []byte) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ var _p1 int
+ _p1 = len(b)
+ r0, er := C.mlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlockall(flags int) (err error) {
+ r0, er := C.mlockall(C.int(flags))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Msync(b []byte, flags int) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ var _p1 int
+ _p1 = len(b)
+ r0, er := C.msync(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlock(b []byte) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ var _p1 int
+ _p1 = len(b)
+ r0, er := C.munlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlockall() (err error) {
+ r0, er := C.munlockall()
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func pipe(p *[2]_C_int) (err error) {
+ r0, er := C.pipe(C.uintptr_t(uintptr(unsafe.Pointer(p))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
+ r0, er := C.poll(C.uintptr_t(uintptr(unsafe.Pointer(fds))), C.int(nfds), C.int(timeout))
+ n = int(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func gettimeofday(tv *Timeval, tzp *Timezone) (err error) {
+ r0, er := C.gettimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))), C.uintptr_t(uintptr(unsafe.Pointer(tzp))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Time(t *Time_t) (tt Time_t, err error) {
+ r0, er := C.time(C.uintptr_t(uintptr(unsafe.Pointer(t))))
+ tt = Time_t(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Utime(path string, buf *Utimbuf) (err error) {
+ _p0 := uintptr(unsafe.Pointer(C.CString(path)))
+ r0, er := C.utime(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrlimit(resource int, rlim *Rlimit) (err error) {
+ r0, er := C.getrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setrlimit(resource int, rlim *Rlimit) (err error) {
+ r0, er := C.setrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim))))
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seek(fd int, offset int64, whence int) (off int64, err error) {
+ r0, er := C.lseek64(C.int(fd), C.longlong(offset), C.int(whence))
+ off = int64(r0)
+ if r0 == -1 && er != nil {
+ err = er
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
+ r0, er := C.mmap(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset))
+ xaddr = uintptr(r0)
+ if uintptr(r0) == ^uintptr(0) && er != nil {
+ err = er
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go
new file mode 100644
index 000000000..3e929e520
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go
@@ -0,0 +1,1408 @@
+// mksyscall_aix_ppc64.pl -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build aix,ppc64
+
+package unix
+
+import (
+ "unsafe"
+)
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func utimes(path string, times *[2]Timeval) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callutimes(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callutimensat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), flag)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getcwd(buf []byte) (err error) {
+ var _p0 *byte
+ if len(buf) > 0 {
+ _p0 = &buf[0]
+ }
+ _, e1 := callgetcwd(uintptr(unsafe.Pointer(_p0)), len(buf))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
+ r0, e1 := callaccept(s, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getdirent(fd int, buf []byte) (n int, err error) {
+ var _p0 *byte
+ if len(buf) > 0 {
+ _p0 = &buf[0]
+ }
+ r0, e1 := callgetdirent(fd, uintptr(unsafe.Pointer(_p0)), len(buf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) {
+ r0, e1 := callwait4(int(pid), uintptr(unsafe.Pointer(status)), options, uintptr(unsafe.Pointer(rusage)))
+ wpid = Pid_t(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ioctl(fd int, req uint, arg uintptr) (err error) {
+ _, e1 := callioctl(fd, int(req), arg)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) {
+ r0, e1 := callfcntl(fd, cmd, uintptr(arg))
+ r = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {
+ _, e1 := callfcntl(fd, cmd, uintptr(unsafe.Pointer(lk)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fcntl(fd int, cmd int, arg int) (val int, err error) {
+ r0, e1 := callfcntl(uintptr(fd), cmd, uintptr(arg))
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Acct(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callacct(uintptr(unsafe.Pointer(_p0)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chdir(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callchdir(uintptr(unsafe.Pointer(_p0)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chroot(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callchroot(uintptr(unsafe.Pointer(_p0)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Close(fd int) (err error) {
+ _, e1 := callclose(fd)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup(oldfd int) (fd int, err error) {
+ r0, e1 := calldup(oldfd)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Exit(code int) {
+ callexit(code)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callfaccessat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchdir(fd int) (err error) {
+ _, e1 := callfchdir(fd)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmod(fd int, mode uint32) (err error) {
+ _, e1 := callfchmod(fd, mode)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callfchmodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callfchownat(dirfd, uintptr(unsafe.Pointer(_p0)), uid, gid, flags)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fdatasync(fd int) (err error) {
+ _, e1 := callfdatasync(fd)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsync(fd int) (err error) {
+ _, e1 := callfsync(fd)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgid(pid int) (pgid int, err error) {
+ r0, e1 := callgetpgid(pid)
+ pgid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgrp() (pid int) {
+ r0, _ := callgetpgrp()
+ pid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpid() (pid int) {
+ r0, _ := callgetpid()
+ pid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getppid() (ppid int) {
+ r0, _ := callgetppid()
+ ppid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpriority(which int, who int) (prio int, err error) {
+ r0, e1 := callgetpriority(which, who)
+ prio = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrusage(who int, rusage *Rusage) (err error) {
+ _, e1 := callgetrusage(who, uintptr(unsafe.Pointer(rusage)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getsid(pid int) (sid int, err error) {
+ r0, e1 := callgetsid(pid)
+ sid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Kill(pid int, sig Signal) (err error) {
+ _, e1 := callkill(pid, int(sig))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Klogctl(typ int, buf []byte) (n int, err error) {
+ var _p0 *byte
+ if len(buf) > 0 {
+ _p0 = &buf[0]
+ }
+ r0, e1 := callsyslog(typ, uintptr(unsafe.Pointer(_p0)), len(buf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdir(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callmkdir(dirfd, uintptr(unsafe.Pointer(_p0)), mode)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callmkdirat(dirfd, uintptr(unsafe.Pointer(_p0)), mode)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkfifo(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callmkfifo(uintptr(unsafe.Pointer(_p0)), mode)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mknod(path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callmknod(uintptr(unsafe.Pointer(_p0)), mode, dev)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callmknodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, dev)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
+ _, e1 := callnanosleep(uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Open(path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, e1 := callopen64(uintptr(unsafe.Pointer(_p0)), mode, perm)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, e1 := callopenat(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mode)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func read(fd int, p []byte) (n int, err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ r0, e1 := callread(fd, uintptr(unsafe.Pointer(_p0)), len(p))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlink(path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ if len(buf) > 0 {
+ _p1 = &buf[0]
+ }
+ r0, e1 := callreadlink(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), len(buf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, e1 := callrenameat(olddirfd, uintptr(unsafe.Pointer(_p0)), newdirfd, uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setdomainname(p []byte) (err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ _, e1 := callsetdomainname(uintptr(unsafe.Pointer(_p0)), len(p))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Sethostname(p []byte) (err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ _, e1 := callsethostname(uintptr(unsafe.Pointer(_p0)), len(p))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpgid(pid int, pgid int) (err error) {
+ _, e1 := callsetpgid(pid, pgid)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setsid() (pid int, err error) {
+ r0, e1 := callsetsid()
+ pid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Settimeofday(tv *Timeval) (err error) {
+ _, e1 := callsettimeofday(uintptr(unsafe.Pointer(tv)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setuid(uid int) (err error) {
+ _, e1 := callsetuid(uid)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setgid(uid int) (err error) {
+ _, e1 := callsetgid(uid)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpriority(which int, who int, prio int) (err error) {
+ _, e1 := callsetpriority(which, who, prio)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callstatx(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mask, uintptr(unsafe.Pointer(stat)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Sync() {
+ callsync()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Times(tms *Tms) (ticks uintptr, err error) {
+ r0, e1 := calltimes(uintptr(unsafe.Pointer(tms)))
+ ticks = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Umask(mask int) (oldmask int) {
+ r0, _ := callumask(mask)
+ oldmask = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Uname(buf *Utsname) (err error) {
+ _, e1 := calluname(uintptr(unsafe.Pointer(buf)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlink(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callunlink(uintptr(unsafe.Pointer(_p0)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callunlinkat(dirfd, uintptr(unsafe.Pointer(_p0)), flags)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Ustat(dev int, ubuf *Ustat_t) (err error) {
+ _, e1 := callustat(dev, uintptr(unsafe.Pointer(ubuf)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func write(fd int, p []byte) (n int, err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(_p0)), len(p))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func readlen(fd int, p *byte, np int) (n int, err error) {
+ r0, e1 := callread(fd, uintptr(unsafe.Pointer(p)), np)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func writelen(fd int, p *byte, np int) (n int, err error) {
+ r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(p)), np)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup2(oldfd int, newfd int) (err error) {
+ _, e1 := calldup2(oldfd, newfd)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
+ _, e1 := callposix_fadvise64(fd, offset, length, advice)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchown(fd int, uid int, gid int) (err error) {
+ _, e1 := callfchown(fd, uid, gid)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstat(fd int, stat *Stat_t) (err error) {
+ _, e1 := callfstat(fd, uintptr(unsafe.Pointer(stat)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callfstatat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), flags)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatfs(fd int, buf *Statfs_t) (err error) {
+ _, e1 := callfstatfs(fd, uintptr(unsafe.Pointer(buf)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Ftruncate(fd int, length int64) (err error) {
+ _, e1 := callftruncate(fd, length)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getegid() (egid int) {
+ r0, _ := callgetegid()
+ egid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Geteuid() (euid int) {
+ r0, _ := callgeteuid()
+ euid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getgid() (gid int) {
+ r0, _ := callgetgid()
+ gid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getuid() (uid int) {
+ r0, _ := callgetuid()
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lchown(path string, uid int, gid int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := calllchown(uintptr(unsafe.Pointer(_p0)), uid, gid)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Listen(s int, n int) (err error) {
+ _, e1 := calllisten(s, n)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lstat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := calllstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pause() (err error) {
+ _, e1 := callpause()
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pread(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ r0, e1 := callpread64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ r0, e1 := callpwrite64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
+ r0, e1 := callpselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setregid(rgid int, egid int) (err error) {
+ _, e1 := callsetregid(rgid, egid)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setreuid(ruid int, euid int) (err error) {
+ _, e1 := callsetreuid(ruid, euid)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Shutdown(fd int, how int) (err error) {
+ _, e1 := callshutdown(fd, how)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
+ r0, e1 := callsplice(rfd, uintptr(unsafe.Pointer(roff)), wfd, uintptr(unsafe.Pointer(woff)), len, flags)
+ n = int64(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Stat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statfs(path string, buf *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callstatfs(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Truncate(path string, length int64) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := calltruncate(uintptr(unsafe.Pointer(_p0)), length)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, e1 := callbind(s, uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, e1 := callconnect(s, uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getgroups(n int, list *_Gid_t) (nn int, err error) {
+ r0, e1 := callgetgroups(n, uintptr(unsafe.Pointer(list)))
+ nn = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setgroups(n int, list *_Gid_t) (err error) {
+ _, e1 := callsetgroups(n, uintptr(unsafe.Pointer(list)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
+ _, e1 := callgetsockopt(s, level, name, uintptr(val), uintptr(unsafe.Pointer(vallen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
+ _, e1 := callsetsockopt(s, level, name, uintptr(val), vallen)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socket(domain int, typ int, proto int) (fd int, err error) {
+ r0, e1 := callsocket(domain, typ, proto)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
+ _, e1 := callsocketpair(domain, typ, proto, uintptr(unsafe.Pointer(fd)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, e1 := callgetpeername(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, e1 := callgetsockname(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
+ var _p0 *byte
+ if len(p) > 0 {
+ _p0 = &p[0]
+ }
+ r0, e1 := callrecvfrom(fd, uintptr(unsafe.Pointer(_p0)), len(p), flags, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
+ var _p0 *byte
+ if len(buf) > 0 {
+ _p0 = &buf[0]
+ }
+ _, e1 := callsendto(s, uintptr(unsafe.Pointer(_p0)), len(buf), flags, uintptr(to), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, e1 := callrecvmsg(s, uintptr(unsafe.Pointer(msg)), flags)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, e1 := callsendmsg(s, uintptr(unsafe.Pointer(msg)), flags)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func munmap(addr uintptr, length uintptr) (err error) {
+ _, e1 := callmunmap(addr, length)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Madvise(b []byte, advice int) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ _, e1 := callmadvise(uintptr(unsafe.Pointer(_p0)), len(b), advice)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mprotect(b []byte, prot int) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ _, e1 := callmprotect(uintptr(unsafe.Pointer(_p0)), len(b), prot)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlock(b []byte) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ _, e1 := callmlock(uintptr(unsafe.Pointer(_p0)), len(b))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlockall(flags int) (err error) {
+ _, e1 := callmlockall(flags)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Msync(b []byte, flags int) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ _, e1 := callmsync(uintptr(unsafe.Pointer(_p0)), len(b), flags)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlock(b []byte) (err error) {
+ var _p0 *byte
+ if len(b) > 0 {
+ _p0 = &b[0]
+ }
+ _, e1 := callmunlock(uintptr(unsafe.Pointer(_p0)), len(b))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlockall() (err error) {
+ _, e1 := callmunlockall()
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func pipe(p *[2]_C_int) (err error) {
+ _, e1 := callpipe(uintptr(unsafe.Pointer(p)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
+ r0, e1 := callpoll(uintptr(unsafe.Pointer(fds)), nfds, timeout)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func gettimeofday(tv *Timeval, tzp *Timezone) (err error) {
+ _, e1 := callgettimeofday(uintptr(unsafe.Pointer(tv)), uintptr(unsafe.Pointer(tzp)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Time(t *Time_t) (tt Time_t, err error) {
+ r0, e1 := calltime(uintptr(unsafe.Pointer(t)))
+ tt = Time_t(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Utime(path string, buf *Utimbuf) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, e1 := callutime(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrlimit(resource int, rlim *Rlimit) (err error) {
+ _, e1 := callgetrlimit(resource, uintptr(unsafe.Pointer(rlim)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setrlimit(resource int, rlim *Rlimit) (err error) {
+ _, e1 := callsetrlimit(resource, uintptr(unsafe.Pointer(rlim)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seek(fd int, offset int64, whence int) (off int64, err error) {
+ r0, e1 := calllseek(fd, offset, whence)
+ off = int64(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
+ r0, e1 := callmmap64(addr, length, prot, flags, fd, offset)
+ xaddr = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go
new file mode 100644
index 000000000..a185ee842
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go
@@ -0,0 +1,1162 @@
+// mksyscall_aix_ppc64.pl -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build aix,ppc64
+// +build !gccgo
+
+package unix
+
+import (
+ "unsafe"
+)
+
+//go:cgo_import_dynamic libc_utimes utimes "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_utimensat utimensat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getcwd getcwd "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_accept accept "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getdirent getdirent "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_wait4 wait4 "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_ioctl ioctl "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_fcntl fcntl "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_acct acct "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_chdir chdir "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_chroot chroot "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_close close "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_dup dup "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_exit exit "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_faccessat faccessat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_fchdir fchdir "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_fchmod fchmod "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_fchownat fchownat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_fsync fsync "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getpgid getpgid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getpid getpid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getppid getppid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getpriority getpriority "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getrusage getrusage "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getsid getsid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_kill kill "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_syslog syslog "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_mkdir mkdir "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_mknod mknod "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_mknodat mknodat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_open64 open64 "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_openat openat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_read read "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_readlink readlink "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_renameat renameat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_setdomainname setdomainname "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_sethostname sethostname "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_setpgid setpgid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_setsid setsid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_setuid setuid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_setgid setgid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_setpriority setpriority "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_statx statx "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_sync sync "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_times times "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_umask umask "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_uname uname "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_unlink unlink "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_ustat ustat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_write write "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_dup2 dup2 "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_posix_fadvise64 posix_fadvise64 "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_fchown fchown "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_fstat fstat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_fstatat fstatat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getegid getegid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_geteuid geteuid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getgid getgid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getuid getuid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_lchown lchown "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_listen listen "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_lstat lstat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_pause pause "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_pread64 pread64 "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_pwrite64 pwrite64 "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_pselect pselect "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_setregid setregid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_setreuid setreuid "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_shutdown shutdown "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_splice splice "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_stat stat "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_statfs statfs "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_truncate truncate "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_bind bind "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_connect connect "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getgroups getgroups "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_setgroups setgroups "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_socket socket "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_socketpair socketpair "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getpeername getpeername "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getsockname getsockname "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_sendto sendto "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_munmap munmap "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_madvise madvise "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_mprotect mprotect "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_mlock mlock "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_mlockall mlockall "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_msync msync "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_munlock munlock "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_munlockall munlockall "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_pipe pipe "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_poll poll "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_time time "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_utime utime "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_lseek lseek "libc.a/shr_64.o"
+//go:cgo_import_dynamic libc_mmap64 mmap64 "libc.a/shr_64.o"
+
+//go:linkname libc_utimes libc_utimes
+//go:linkname libc_utimensat libc_utimensat
+//go:linkname libc_getcwd libc_getcwd
+//go:linkname libc_accept libc_accept
+//go:linkname libc_getdirent libc_getdirent
+//go:linkname libc_wait4 libc_wait4
+//go:linkname libc_ioctl libc_ioctl
+//go:linkname libc_fcntl libc_fcntl
+//go:linkname libc_acct libc_acct
+//go:linkname libc_chdir libc_chdir
+//go:linkname libc_chroot libc_chroot
+//go:linkname libc_close libc_close
+//go:linkname libc_dup libc_dup
+//go:linkname libc_exit libc_exit
+//go:linkname libc_faccessat libc_faccessat
+//go:linkname libc_fchdir libc_fchdir
+//go:linkname libc_fchmod libc_fchmod
+//go:linkname libc_fchmodat libc_fchmodat
+//go:linkname libc_fchownat libc_fchownat
+//go:linkname libc_fdatasync libc_fdatasync
+//go:linkname libc_fsync libc_fsync
+//go:linkname libc_getpgid libc_getpgid
+//go:linkname libc_getpgrp libc_getpgrp
+//go:linkname libc_getpid libc_getpid
+//go:linkname libc_getppid libc_getppid
+//go:linkname libc_getpriority libc_getpriority
+//go:linkname libc_getrusage libc_getrusage
+//go:linkname libc_getsid libc_getsid
+//go:linkname libc_kill libc_kill
+//go:linkname libc_syslog libc_syslog
+//go:linkname libc_mkdir libc_mkdir
+//go:linkname libc_mkdirat libc_mkdirat
+//go:linkname libc_mkfifo libc_mkfifo
+//go:linkname libc_mknod libc_mknod
+//go:linkname libc_mknodat libc_mknodat
+//go:linkname libc_nanosleep libc_nanosleep
+//go:linkname libc_open64 libc_open64
+//go:linkname libc_openat libc_openat
+//go:linkname libc_read libc_read
+//go:linkname libc_readlink libc_readlink
+//go:linkname libc_renameat libc_renameat
+//go:linkname libc_setdomainname libc_setdomainname
+//go:linkname libc_sethostname libc_sethostname
+//go:linkname libc_setpgid libc_setpgid
+//go:linkname libc_setsid libc_setsid
+//go:linkname libc_settimeofday libc_settimeofday
+//go:linkname libc_setuid libc_setuid
+//go:linkname libc_setgid libc_setgid
+//go:linkname libc_setpriority libc_setpriority
+//go:linkname libc_statx libc_statx
+//go:linkname libc_sync libc_sync
+//go:linkname libc_times libc_times
+//go:linkname libc_umask libc_umask
+//go:linkname libc_uname libc_uname
+//go:linkname libc_unlink libc_unlink
+//go:linkname libc_unlinkat libc_unlinkat
+//go:linkname libc_ustat libc_ustat
+//go:linkname libc_write libc_write
+//go:linkname libc_dup2 libc_dup2
+//go:linkname libc_posix_fadvise64 libc_posix_fadvise64
+//go:linkname libc_fchown libc_fchown
+//go:linkname libc_fstat libc_fstat
+//go:linkname libc_fstatat libc_fstatat
+//go:linkname libc_fstatfs libc_fstatfs
+//go:linkname libc_ftruncate libc_ftruncate
+//go:linkname libc_getegid libc_getegid
+//go:linkname libc_geteuid libc_geteuid
+//go:linkname libc_getgid libc_getgid
+//go:linkname libc_getuid libc_getuid
+//go:linkname libc_lchown libc_lchown
+//go:linkname libc_listen libc_listen
+//go:linkname libc_lstat libc_lstat
+//go:linkname libc_pause libc_pause
+//go:linkname libc_pread64 libc_pread64
+//go:linkname libc_pwrite64 libc_pwrite64
+//go:linkname libc_pselect libc_pselect
+//go:linkname libc_setregid libc_setregid
+//go:linkname libc_setreuid libc_setreuid
+//go:linkname libc_shutdown libc_shutdown
+//go:linkname libc_splice libc_splice
+//go:linkname libc_stat libc_stat
+//go:linkname libc_statfs libc_statfs
+//go:linkname libc_truncate libc_truncate
+//go:linkname libc_bind libc_bind
+//go:linkname libc_connect libc_connect
+//go:linkname libc_getgroups libc_getgroups
+//go:linkname libc_setgroups libc_setgroups
+//go:linkname libc_getsockopt libc_getsockopt
+//go:linkname libc_setsockopt libc_setsockopt
+//go:linkname libc_socket libc_socket
+//go:linkname libc_socketpair libc_socketpair
+//go:linkname libc_getpeername libc_getpeername
+//go:linkname libc_getsockname libc_getsockname
+//go:linkname libc_recvfrom libc_recvfrom
+//go:linkname libc_sendto libc_sendto
+//go:linkname libc_recvmsg libc_recvmsg
+//go:linkname libc_sendmsg libc_sendmsg
+//go:linkname libc_munmap libc_munmap
+//go:linkname libc_madvise libc_madvise
+//go:linkname libc_mprotect libc_mprotect
+//go:linkname libc_mlock libc_mlock
+//go:linkname libc_mlockall libc_mlockall
+//go:linkname libc_msync libc_msync
+//go:linkname libc_munlock libc_munlock
+//go:linkname libc_munlockall libc_munlockall
+//go:linkname libc_pipe libc_pipe
+//go:linkname libc_poll libc_poll
+//go:linkname libc_gettimeofday libc_gettimeofday
+//go:linkname libc_time libc_time
+//go:linkname libc_utime libc_utime
+//go:linkname libc_getrlimit libc_getrlimit
+//go:linkname libc_setrlimit libc_setrlimit
+//go:linkname libc_lseek libc_lseek
+//go:linkname libc_mmap64 libc_mmap64
+
+type syscallFunc uintptr
+
+var (
+ libc_utimes,
+ libc_utimensat,
+ libc_getcwd,
+ libc_accept,
+ libc_getdirent,
+ libc_wait4,
+ libc_ioctl,
+ libc_fcntl,
+ libc_acct,
+ libc_chdir,
+ libc_chroot,
+ libc_close,
+ libc_dup,
+ libc_exit,
+ libc_faccessat,
+ libc_fchdir,
+ libc_fchmod,
+ libc_fchmodat,
+ libc_fchownat,
+ libc_fdatasync,
+ libc_fsync,
+ libc_getpgid,
+ libc_getpgrp,
+ libc_getpid,
+ libc_getppid,
+ libc_getpriority,
+ libc_getrusage,
+ libc_getsid,
+ libc_kill,
+ libc_syslog,
+ libc_mkdir,
+ libc_mkdirat,
+ libc_mkfifo,
+ libc_mknod,
+ libc_mknodat,
+ libc_nanosleep,
+ libc_open64,
+ libc_openat,
+ libc_read,
+ libc_readlink,
+ libc_renameat,
+ libc_setdomainname,
+ libc_sethostname,
+ libc_setpgid,
+ libc_setsid,
+ libc_settimeofday,
+ libc_setuid,
+ libc_setgid,
+ libc_setpriority,
+ libc_statx,
+ libc_sync,
+ libc_times,
+ libc_umask,
+ libc_uname,
+ libc_unlink,
+ libc_unlinkat,
+ libc_ustat,
+ libc_write,
+ libc_dup2,
+ libc_posix_fadvise64,
+ libc_fchown,
+ libc_fstat,
+ libc_fstatat,
+ libc_fstatfs,
+ libc_ftruncate,
+ libc_getegid,
+ libc_geteuid,
+ libc_getgid,
+ libc_getuid,
+ libc_lchown,
+ libc_listen,
+ libc_lstat,
+ libc_pause,
+ libc_pread64,
+ libc_pwrite64,
+ libc_pselect,
+ libc_setregid,
+ libc_setreuid,
+ libc_shutdown,
+ libc_splice,
+ libc_stat,
+ libc_statfs,
+ libc_truncate,
+ libc_bind,
+ libc_connect,
+ libc_getgroups,
+ libc_setgroups,
+ libc_getsockopt,
+ libc_setsockopt,
+ libc_socket,
+ libc_socketpair,
+ libc_getpeername,
+ libc_getsockname,
+ libc_recvfrom,
+ libc_sendto,
+ libc_recvmsg,
+ libc_sendmsg,
+ libc_munmap,
+ libc_madvise,
+ libc_mprotect,
+ libc_mlock,
+ libc_mlockall,
+ libc_msync,
+ libc_munlock,
+ libc_munlockall,
+ libc_pipe,
+ libc_poll,
+ libc_gettimeofday,
+ libc_time,
+ libc_utime,
+ libc_getrlimit,
+ libc_setrlimit,
+ libc_lseek,
+ libc_mmap64 syscallFunc
+)
+
+// Implemented in runtime/syscall_aix.go.
+func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
+func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimes)), 2, _p0, times, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimensat)), 4, uintptr(dirfd), _p0, times, uintptr(flag), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getcwd)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_accept)), 3, uintptr(s), rsa, addrlen, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getdirent)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_wait4)), 4, uintptr(pid), status, uintptr(options), rusage, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), arg, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fcntl)), 3, fd, uintptr(cmd), arg, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_acct)), 1, _p0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chdir)), 1, _p0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chroot)), 1, _p0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callclose(fd int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_close)), 1, uintptr(fd), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calldup(oldfd int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup)), 1, uintptr(oldfd), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callexit(code int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_exit)), 1, uintptr(code), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_faccessat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfchdir(fd int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchownat)), 5, uintptr(dirfd), _p0, uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfdatasync(fd int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfsync(fd int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetpgid(pid int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetpgrp() (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpgrp)), 0, 0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetpid() (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpid)), 0, 0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetppid() (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getppid)), 0, 0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetpriority(which int, who int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrusage)), 2, uintptr(who), rusage, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetsid(pid int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callkill(pid int, sig int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_kill)), 2, uintptr(pid), uintptr(sig), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_syslog)), 3, uintptr(typ), _p0, uintptr(_lenp0), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdir)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdirat)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkfifo)), 2, _p0, uintptr(mode), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknod)), 3, _p0, uintptr(mode), uintptr(dev), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(dev), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nanosleep)), 2, time, leftover, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_open64)), 3, _p0, uintptr(mode), uintptr(perm), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_openat)), 4, uintptr(dirfd), _p0, uintptr(flags), uintptr(mode), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_read)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_readlink)), 3, _p0, _p1, uintptr(_lenp1), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_renameat)), 4, uintptr(olddirfd), _p0, uintptr(newdirfd), _p1, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setdomainname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sethostname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetsid() (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setsid)), 0, 0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_settimeofday)), 1, tv, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetuid(uid int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetgid(uid int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setgid)), 1, uintptr(uid), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statx)), 5, uintptr(dirfd), _p0, uintptr(flags), uintptr(mask), stat, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsync() (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sync)), 0, 0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calltimes(tms uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_times)), 1, tms, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callumask(mask int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_umask)), 1, uintptr(mask), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calluname(buf uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_uname)), 1, buf, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlink)), 1, _p0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlinkat)), 3, uintptr(dirfd), _p0, uintptr(flags), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ustat)), 2, uintptr(dev), ubuf, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_write)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_posix_fadvise64)), 4, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstat)), 2, uintptr(fd), stat, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatat)), 4, uintptr(dirfd), _p0, stat, uintptr(flags), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatfs)), 2, uintptr(fd), buf, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ftruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetegid() (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getegid)), 0, 0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgeteuid() (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_geteuid)), 0, 0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetgid() (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgid)), 0, 0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetuid() (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getuid)), 0, 0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lchown)), 3, _p0, uintptr(uid), uintptr(gid), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calllisten(s int, n int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_listen)), 2, uintptr(s), uintptr(n), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lstat)), 2, _p0, stat, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callpause() (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pause)), 0, 0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pread64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pwrite64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pselect)), 6, uintptr(nfd), r, w, e, timeout, sigmask)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callshutdown(fd int, how int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_shutdown)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_splice)), 6, uintptr(rfd), roff, uintptr(wfd), woff, uintptr(len), uintptr(flags))
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_stat)), 2, _p0, stat, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statfs)), 2, _p0, buf, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_truncate)), 2, _p0, uintptr(length), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_bind)), 3, uintptr(s), addr, addrlen, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_connect)), 3, uintptr(s), addr, addrlen, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgroups)), 2, uintptr(n), list, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setgroups)), 2, uintptr(n), list, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), fd, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpeername)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsockname)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_recvfrom)), 6, uintptr(fd), _p0, uintptr(_lenp0), uintptr(flags), from, fromlen)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sendto)), 6, uintptr(s), _p0, uintptr(_lenp0), uintptr(flags), to, addrlen)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_recvmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sendmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munmap)), 2, addr, length, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_madvise)), 3, _p0, uintptr(_lenp0), uintptr(advice), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mprotect)), 3, _p0, uintptr(_lenp0), uintptr(prot), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmlockall(flags int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_msync)), 3, _p0, uintptr(_lenp0), uintptr(flags), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmunlockall() (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlockall)), 0, 0, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callpipe(p uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_pipe)), 1, p, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_poll)), 3, fds, uintptr(nfds), uintptr(timeout), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_gettimeofday)), 2, tv, tzp, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calltime(t uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_time)), 1, t, 0, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utime)), 2, _p0, buf, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) {
+ r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mmap64)), 6, addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go
new file mode 100644
index 000000000..aef7c0e78
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go
@@ -0,0 +1,1042 @@
+// mksyscall_aix_ppc64.pl -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build aix,ppc64
+// +build gccgo
+
+package unix
+
+/*
+#include <stdint.h>
+int utimes(uintptr_t, uintptr_t);
+int utimensat(int, uintptr_t, uintptr_t, int);
+int getcwd(uintptr_t, size_t);
+int accept(int, uintptr_t, uintptr_t);
+int getdirent(int, uintptr_t, size_t);
+int wait4(int, uintptr_t, int, uintptr_t);
+int ioctl(int, int, uintptr_t);
+int fcntl(uintptr_t, int, uintptr_t);
+int acct(uintptr_t);
+int chdir(uintptr_t);
+int chroot(uintptr_t);
+int close(int);
+int dup(int);
+void exit(int);
+int faccessat(int, uintptr_t, unsigned int, int);
+int fchdir(int);
+int fchmod(int, unsigned int);
+int fchmodat(int, uintptr_t, unsigned int, int);
+int fchownat(int, uintptr_t, int, int, int);
+int fdatasync(int);
+int fsync(int);
+int getpgid(int);
+int getpgrp();
+int getpid();
+int getppid();
+int getpriority(int, int);
+int getrusage(int, uintptr_t);
+int getsid(int);
+int kill(int, int);
+int syslog(int, uintptr_t, size_t);
+int mkdir(int, uintptr_t, unsigned int);
+int mkdirat(int, uintptr_t, unsigned int);
+int mkfifo(uintptr_t, unsigned int);
+int mknod(uintptr_t, unsigned int, int);
+int mknodat(int, uintptr_t, unsigned int, int);
+int nanosleep(uintptr_t, uintptr_t);
+int open64(uintptr_t, int, unsigned int);
+int openat(int, uintptr_t, int, unsigned int);
+int read(int, uintptr_t, size_t);
+int readlink(uintptr_t, uintptr_t, size_t);
+int renameat(int, uintptr_t, int, uintptr_t);
+int setdomainname(uintptr_t, size_t);
+int sethostname(uintptr_t, size_t);
+int setpgid(int, int);
+int setsid();
+int settimeofday(uintptr_t);
+int setuid(int);
+int setgid(int);
+int setpriority(int, int, int);
+int statx(int, uintptr_t, int, int, uintptr_t);
+int sync();
+uintptr_t times(uintptr_t);
+int umask(int);
+int uname(uintptr_t);
+int unlink(uintptr_t);
+int unlinkat(int, uintptr_t, int);
+int ustat(int, uintptr_t);
+int write(int, uintptr_t, size_t);
+int dup2(int, int);
+int posix_fadvise64(int, long long, long long, int);
+int fchown(int, int, int);
+int fstat(int, uintptr_t);
+int fstatat(int, uintptr_t, uintptr_t, int);
+int fstatfs(int, uintptr_t);
+int ftruncate(int, long long);
+int getegid();
+int geteuid();
+int getgid();
+int getuid();
+int lchown(uintptr_t, int, int);
+int listen(int, int);
+int lstat(uintptr_t, uintptr_t);
+int pause();
+int pread64(int, uintptr_t, size_t, long long);
+int pwrite64(int, uintptr_t, size_t, long long);
+int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
+int setregid(int, int);
+int setreuid(int, int);
+int shutdown(int, int);
+long long splice(int, uintptr_t, int, uintptr_t, int, int);
+int stat(uintptr_t, uintptr_t);
+int statfs(uintptr_t, uintptr_t);
+int truncate(uintptr_t, long long);
+int bind(int, uintptr_t, uintptr_t);
+int connect(int, uintptr_t, uintptr_t);
+int getgroups(int, uintptr_t);
+int setgroups(int, uintptr_t);
+int getsockopt(int, int, int, uintptr_t, uintptr_t);
+int setsockopt(int, int, int, uintptr_t, uintptr_t);
+int socket(int, int, int);
+int socketpair(int, int, int, uintptr_t);
+int getpeername(int, uintptr_t, uintptr_t);
+int getsockname(int, uintptr_t, uintptr_t);
+int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);
+int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);
+int recvmsg(int, uintptr_t, int);
+int sendmsg(int, uintptr_t, int);
+int munmap(uintptr_t, uintptr_t);
+int madvise(uintptr_t, size_t, int);
+int mprotect(uintptr_t, size_t, int);
+int mlock(uintptr_t, size_t);
+int mlockall(int);
+int msync(uintptr_t, size_t, int);
+int munlock(uintptr_t, size_t);
+int munlockall();
+int pipe(uintptr_t);
+int poll(uintptr_t, int, int);
+int gettimeofday(uintptr_t, uintptr_t);
+int time(uintptr_t);
+int utime(uintptr_t, uintptr_t);
+int getrlimit(int, uintptr_t);
+int setrlimit(int, uintptr_t);
+long long lseek(int, long long, int);
+uintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long);
+
+*/
+import "C"
+import (
+ "syscall"
+)
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.utimes(C.uintptr_t(_p0), C.uintptr_t(times)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(times), C.int(flag)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getcwd(C.uintptr_t(_p0), C.size_t(_lenp0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.accept(C.int(s), C.uintptr_t(rsa), C.uintptr_t(addrlen)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getdirent(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.wait4(C.int(pid), C.uintptr_t(status), C.int(options), C.uintptr_t(rusage)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.acct(C.uintptr_t(_p0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.chdir(C.uintptr_t(_p0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.chroot(C.uintptr_t(_p0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callclose(fd int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.close(C.int(fd)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calldup(oldfd int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.dup(C.int(oldfd)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callexit(code int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.exit(C.int(code)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfchdir(fd int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.fchdir(C.int(fd)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.fchmod(C.int(fd), C.uint(mode)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfdatasync(fd int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.fdatasync(C.int(fd)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfsync(fd int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.fsync(C.int(fd)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetpgid(pid int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getpgid(C.int(pid)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetpgrp() (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getpgrp())
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetpid() (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getpid())
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetppid() (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getppid())
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetpriority(which int, who int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getpriority(C.int(which), C.int(who)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getrusage(C.int(who), C.uintptr_t(rusage)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetsid(pid int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getsid(C.int(pid)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callkill(pid int, sig int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.kill(C.int(pid), C.int(sig)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.syslog(C.int(typ), C.uintptr_t(_p0), C.size_t(_lenp0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.mkfifo(C.uintptr_t(_p0), C.uint(mode)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.nanosleep(C.uintptr_t(time), C.uintptr_t(leftover)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.read(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.readlink(C.uintptr_t(_p0), C.uintptr_t(_p1), C.size_t(_lenp1)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.setdomainname(C.uintptr_t(_p0), C.size_t(_lenp0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.sethostname(C.uintptr_t(_p0), C.size_t(_lenp0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.setpgid(C.int(pid), C.int(pgid)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetsid() (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.setsid())
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.settimeofday(C.uintptr_t(tv)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetuid(uid int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.setuid(C.int(uid)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetgid(uid int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.setgid(C.int(uid)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.setpriority(C.int(which), C.int(who), C.int(prio)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(stat)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsync() (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.sync())
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calltimes(tms uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.times(C.uintptr_t(tms)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callumask(mask int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.umask(C.int(mask)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calluname(buf uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.uname(C.uintptr_t(buf)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.unlink(C.uintptr_t(_p0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.ustat(C.int(dev), C.uintptr_t(ubuf)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.write(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.dup2(C.int(oldfd), C.int(newfd)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.fchown(C.int(fd), C.int(uid), C.int(gid)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.fstat(C.int(fd), C.uintptr_t(stat)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(stat), C.int(flags)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.fstatfs(C.int(fd), C.uintptr_t(buf)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.ftruncate(C.int(fd), C.longlong(length)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetegid() (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getegid())
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgeteuid() (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.geteuid())
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetgid() (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getgid())
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetuid() (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getuid())
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calllisten(s int, n int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.listen(C.int(s), C.int(n)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.lstat(C.uintptr_t(_p0), C.uintptr_t(stat)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callpause() (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.pause())
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.pread64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.pwrite64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.pselect(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout), C.uintptr_t(sigmask)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.setregid(C.int(rgid), C.int(egid)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.setreuid(C.int(ruid), C.int(euid)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callshutdown(fd int, how int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.shutdown(C.int(fd), C.int(how)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.splice(C.int(rfd), C.uintptr_t(roff), C.int(wfd), C.uintptr_t(woff), C.int(len), C.int(flags)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.stat(C.uintptr_t(_p0), C.uintptr_t(stat)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.statfs(C.uintptr_t(_p0), C.uintptr_t(buf)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.truncate(C.uintptr_t(_p0), C.longlong(length)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.bind(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.connect(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getgroups(C.int(n), C.uintptr_t(list)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.setgroups(C.int(n), C.uintptr_t(list)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.socket(C.int(domain), C.int(typ), C.int(proto)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(fd)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getpeername(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getsockname(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.recvfrom(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(from), C.uintptr_t(fromlen)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.sendto(C.int(s), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(to), C.uintptr_t(addrlen)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.recvmsg(C.int(s), C.uintptr_t(msg), C.int(flags)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.sendmsg(C.int(s), C.uintptr_t(msg), C.int(flags)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.munmap(C.uintptr_t(addr), C.uintptr_t(length)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.madvise(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(advice)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.mprotect(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(prot)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.mlock(C.uintptr_t(_p0), C.size_t(_lenp0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmlockall(flags int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.mlockall(C.int(flags)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.msync(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.munlock(C.uintptr_t(_p0), C.size_t(_lenp0)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmunlockall() (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.munlockall())
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callpipe(p uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.pipe(C.uintptr_t(p)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.poll(C.uintptr_t(fds), C.int(nfds), C.int(timeout)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.gettimeofday(C.uintptr_t(tv), C.uintptr_t(tzp)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calltime(t uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.time(C.uintptr_t(t)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.utime(C.uintptr_t(_p0), C.uintptr_t(buf)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.getrlimit(C.int(resource), C.uintptr_t(rlim)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.setrlimit(C.int(resource), C.uintptr_t(rlim)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.lseek(C.int(fd), C.longlong(offset), C.int(whence)))
+ e1 = syscall.GetErrno()
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) {
+ r1 = uintptr(C.mmap64(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset)))
+ e1 = syscall.GetErrno()
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go
new file mode 100644
index 000000000..c4ec7ff87
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go
@@ -0,0 +1,1810 @@
+// go run mksyscall.go -l32 -tags darwin,386,!go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build darwin,386,!go1.12
+
+package unix
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var _ syscall.Errno
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setgroups(ngid int, gid *_Gid_t) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
+ r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
+ wpid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socket(domain int, typ int, proto int) (fd int, err error) {
+ r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
+ _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Shutdown(s int, how int) (err error) {
+ _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
+ _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
+ r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
+ var _p0 unsafe.Pointer
+ if len(mib) > 0 {
+ _p0 = unsafe.Pointer(&mib[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func utimes(path string, timeval *[2]Timeval) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func futimes(fd int, timeval *[2]Timeval) (err error) {
+ _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fcntl(fd int, cmd int, arg int) (val int, err error) {
+ r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Madvise(b []byte, behav int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlock(b []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlockall(flags int) (err error) {
+ _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mprotect(b []byte, prot int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Msync(b []byte, flags int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlock(b []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlockall() (err error) {
+ _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := Syscall6(SYS_GETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func pipe() (r int, w int, err error) {
+ r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
+ r = int(r0)
+ w = int(r1)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func removexattr(path string, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fremovexattr(fd int, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
+ r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := Syscall6(SYS_SETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kill(pid int, signum int, posix int) (err error) {
+ _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ioctl(fd int, req uint, arg uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
+ _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Access(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
+ _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chdir(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chflags(path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chmod(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chown(path string, uid int, gid int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chroot(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Close(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup(fd int) (nfd int, err error) {
+ r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
+ nfd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup2(from int, to int) (err error) {
+ _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Exchangedata(path1 string, path2 string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path1)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(path2)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Exit(code int) {
+ Syscall(SYS_EXIT, uintptr(code), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchdir(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchflags(fd int, flags int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmod(fd int, mode uint32) (err error) {
+ _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchown(fd int, uid int, gid int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flock(fd int, how int) (err error) {
+ _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fpathconf(fd int, name int) (val int, err error) {
+ r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsync(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Ftruncate(fd int, length int64) (err error) {
+ _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getdtablesize() (size int) {
+ r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
+ size = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getegid() (egid int) {
+ r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
+ egid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Geteuid() (uid int) {
+ r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getgid() (gid int) {
+ r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
+ gid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgid(pid int) (pgid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
+ pgid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgrp() (pgrp int) {
+ r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
+ pgrp = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpid() (pid int) {
+ r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
+ pid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getppid() (ppid int) {
+ r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
+ ppid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpriority(which int, who int) (prio int, err error) {
+ r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
+ prio = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrlimit(which int, lim *Rlimit) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrusage(who int, rusage *Rusage) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getsid(pid int) (sid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
+ sid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getuid() (uid int) {
+ r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Issetugid() (tainted bool) {
+ r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
+ tainted = bool(r0 != 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Kqueue() (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lchown(path string, uid int, gid int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Link(path string, link string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Listen(s int, backlog int) (err error) {
+ _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdir(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkfifo(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mknod(path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Open(path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pathconf(path string, name int) (val int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pread(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func read(fd int, p []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlink(path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Rename(from string, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Revoke(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Rmdir(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
+ r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
+ newoffset = int64(int64(r1)<<32 | int64(r0))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
+ _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setegid(egid int) (err error) {
+ _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seteuid(euid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setgid(gid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setlogin(name string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpgid(pid int, pgid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpriority(which int, who int, prio int) (err error) {
+ _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setprivexec(flag int) (err error) {
+ _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setregid(rgid int, egid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setreuid(ruid int, euid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setrlimit(which int, lim *Rlimit) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setsid() (pid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
+ pid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Settimeofday(tp *Timeval) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setuid(uid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Symlink(path string, link string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Sync() (err error) {
+ _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Truncate(path string, length int64) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Umask(newmask int) (oldmask int) {
+ r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
+ oldmask = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Undelete(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlink(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unmount(path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func write(fd int, p []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
+ r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
+ ret = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func munmap(addr uintptr, length uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
+ r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ sec = int32(r0)
+ usec = int32(r1)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstat(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatfs(fd int, stat *Statfs_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(buf), uintptr(size), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lstat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Stat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statfs(path string, stat *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
index ac02d4d84..23346dc68 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -l32 -tags darwin,386 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go
+// go run mksyscall.go -l32 -tags darwin,386,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go
// Code generated by the command above; see README.md. DO NOT EDIT.
-// +build darwin,386
+// +build darwin,386,go1.12
package unix
@@ -15,7 +15,7 @@ var _ syscall.Errno
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -23,20 +23,30 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
return
}
+func libc_getgroups_trampoline()
+
+//go:linkname libc_getgroups libc_getgroups
+//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setgroups(ngid int, gid *_Gid_t) (err error) {
- _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setgroups_trampoline()
+
+//go:linkname libc_setgroups libc_setgroups
+//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
wpid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -44,10 +54,15 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err
return
}
+func libc_wait4_trampoline()
+
+//go:linkname libc_wait4 libc_wait4
+//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -55,30 +70,45 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
return
}
+func libc_accept_trampoline()
+
+//go:linkname libc_accept libc_accept
+//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
- _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
+ _, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_bind_trampoline()
+
+//go:linkname libc_bind libc_bind
+//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
- _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
+ _, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_connect_trampoline()
+
+//go:linkname libc_connect libc_connect
+//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func socket(domain int, typ int, proto int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -86,66 +116,101 @@ func socket(domain int, typ int, proto int) (fd int, err error) {
return
}
+func libc_socket_trampoline()
+
+//go:linkname libc_socket libc_socket
+//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
- _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getsockopt_trampoline()
+
+//go:linkname libc_getsockopt libc_getsockopt
+//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
- _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setsockopt_trampoline()
+
+//go:linkname libc_setsockopt libc_setsockopt
+//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getpeername_trampoline()
+
+//go:linkname libc_getpeername libc_getpeername
+//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getsockname_trampoline()
+
+//go:linkname libc_getsockname libc_getsockname
+//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Shutdown(s int, how int) (err error) {
- _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_shutdown_trampoline()
+
+//go:linkname libc_shutdown libc_shutdown
+//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
- _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
+ _, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_socketpair_trampoline()
+
+//go:linkname libc_socketpair libc_socketpair
+//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
@@ -155,7 +220,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -163,6 +228,11 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
return
}
+func libc_recvfrom_trampoline()
+
+//go:linkname libc_recvfrom libc_recvfrom
+//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
@@ -172,17 +242,22 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
+ _, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_sendto_trampoline()
+
+//go:linkname libc_sendto libc_sendto
+//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ r0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -190,10 +265,15 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
return
}
+func libc_recvmsg_trampoline()
+
+//go:linkname libc_recvmsg libc_recvmsg
+//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ r0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -201,10 +281,15 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
return
}
+func libc_sendmsg_trampoline()
+
+//go:linkname libc_sendmsg libc_sendmsg
+//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
- r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -212,6 +297,11 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
return
}
+func libc_kevent_trampoline()
+
+//go:linkname libc_kevent libc_kevent
+//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
@@ -221,13 +311,18 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
+ _, _, e1 := syscall_syscall6(funcPC(libc___sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc___sysctl_trampoline()
+
+//go:linkname libc___sysctl libc___sysctl
+//go:cgo_import_dynamic libc___sysctl __sysctl "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func utimes(path string, timeval *[2]Timeval) (err error) {
@@ -236,27 +331,37 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_utimes_trampoline()
+
+//go:linkname libc_utimes libc_utimes
+//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func futimes(fd int, timeval *[2]Timeval) (err error) {
- _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_futimes_trampoline()
+
+//go:linkname libc_futimes libc_futimes
+//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func fcntl(fd int, cmd int, arg int) (val int, err error) {
- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
+ r0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -264,10 +369,15 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
return
}
+func libc_fcntl_trampoline()
+
+//go:linkname libc_fcntl libc_fcntl
+//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
+ r0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -275,6 +385,11 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
return
}
+func libc_poll_trampoline()
+
+//go:linkname libc_poll libc_poll
+//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Madvise(b []byte, behav int) (err error) {
@@ -284,13 +399,18 @@ func Madvise(b []byte, behav int) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
+ _, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_madvise_trampoline()
+
+//go:linkname libc_madvise libc_madvise
+//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mlock(b []byte) (err error) {
@@ -300,23 +420,33 @@ func Mlock(b []byte) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mlock_trampoline()
+
+//go:linkname libc_mlock libc_mlock
+//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mlockall(flags int) (err error) {
- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mlockall_trampoline()
+
+//go:linkname libc_mlockall libc_mlockall
+//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mprotect(b []byte, prot int) (err error) {
@@ -326,13 +456,18 @@ func Mprotect(b []byte, prot int) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
+ _, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mprotect_trampoline()
+
+//go:linkname libc_mprotect libc_mprotect
+//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Msync(b []byte, flags int) (err error) {
@@ -342,13 +477,18 @@ func Msync(b []byte, flags int) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
+ _, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_msync_trampoline()
+
+//go:linkname libc_msync libc_msync
+//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Munlock(b []byte) (err error) {
@@ -358,37 +498,67 @@ func Munlock(b []byte) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_munlock_trampoline()
+
+//go:linkname libc_munlock libc_munlock
+//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Munlockall() (err error) {
- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_munlockall_trampoline()
+
+//go:linkname libc_munlockall libc_munlockall
+//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_ptrace_trampoline()
+
+//go:linkname libc_ptrace libc_ptrace
+//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := syscall_syscall6(funcPC(libc_getattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getattrlist_trampoline()
+
+//go:linkname libc_getattrlist libc_getattrlist
+//go:cgo_import_dynamic libc_getattrlist getattrlist "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func pipe() (r int, w int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)
r = int(r0)
w = int(r1)
if e1 != 0 {
@@ -397,6 +567,11 @@ func pipe() (r int, w int, err error) {
return
}
+func libc_pipe_trampoline()
+
+//go:linkname libc_pipe libc_pipe
+//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
@@ -410,7 +585,7 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o
if err != nil {
return
}
- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -418,6 +593,32 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o
return
}
+func libc_getxattr_trampoline()
+
+//go:linkname libc_getxattr libc_getxattr
+//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fgetxattr_trampoline()
+
+//go:linkname libc_fgetxattr libc_fgetxattr
+//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
@@ -431,13 +632,38 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ _, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setxattr_trampoline()
+
+//go:linkname libc_setxattr libc_setxattr
+//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fsetxattr_trampoline()
+
+//go:linkname libc_fsetxattr libc_fsetxattr
+//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func removexattr(path string, attr string, options int) (err error) {
@@ -451,13 +677,38 @@ func removexattr(path string, attr string, options int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ _, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_removexattr_trampoline()
+
+//go:linkname libc_removexattr libc_removexattr
+//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fremovexattr(fd int, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fremovexattr_trampoline()
+
+//go:linkname libc_fremovexattr libc_fremovexattr
+//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
@@ -466,7 +717,7 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro
if err != nil {
return
}
- r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -474,26 +725,87 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro
return
}
+func libc_listxattr_trampoline()
+
+//go:linkname libc_listxattr libc_listxattr
+//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
+ r0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_flistxattr_trampoline()
+
+//go:linkname libc_flistxattr libc_flistxattr
+//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_setattrlist_trampoline()
+
+//go:linkname libc_setattrlist libc_setattrlist
+//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func kill(pid int, signum int, posix int) (err error) {
- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
+ _, _, e1 := syscall_syscall(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_kill_trampoline()
+
+//go:linkname libc_kill libc_kill
+//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func ioctl(fd int, req uint, arg uintptr) (err error) {
- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
+ _, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_ioctl_trampoline()
+
+//go:linkname libc_ioctl libc_ioctl
+//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
+ _, _, e1 := syscall_syscall9(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_sendfile_trampoline()
+
+//go:linkname libc_sendfile libc_sendfile
+//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Access(path string, mode uint32) (err error) {
@@ -502,23 +814,33 @@ func Access(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_access_trampoline()
+
+//go:linkname libc_access libc_access
+//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
- _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_adjtime_trampoline()
+
+//go:linkname libc_adjtime libc_adjtime
+//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chdir(path string) (err error) {
@@ -527,13 +849,18 @@ func Chdir(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chdir_trampoline()
+
+//go:linkname libc_chdir libc_chdir
+//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chflags(path string, flags int) (err error) {
@@ -542,13 +869,18 @@ func Chflags(path string, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chflags_trampoline()
+
+//go:linkname libc_chflags libc_chflags
+//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chmod(path string, mode uint32) (err error) {
@@ -557,13 +889,18 @@ func Chmod(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chmod_trampoline()
+
+//go:linkname libc_chmod libc_chmod
+//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chown(path string, uid int, gid int) (err error) {
@@ -572,13 +909,18 @@ func Chown(path string, uid int, gid int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ _, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chown_trampoline()
+
+//go:linkname libc_chown libc_chown
+//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chroot(path string) (err error) {
@@ -587,27 +929,37 @@ func Chroot(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chroot_trampoline()
+
+//go:linkname libc_chroot libc_chroot
+//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Close(fd int) (err error) {
- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_close_trampoline()
+
+//go:linkname libc_close libc_close
+//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Dup(fd int) (nfd int, err error) {
- r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)
nfd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -615,16 +967,26 @@ func Dup(fd int) (nfd int, err error) {
return
}
+func libc_dup_trampoline()
+
+//go:linkname libc_dup libc_dup
+//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Dup2(from int, to int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_dup2_trampoline()
+
+//go:linkname libc_dup2 libc_dup2
+//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Exchangedata(path1 string, path2 string, options int) (err error) {
@@ -638,20 +1000,30 @@ func Exchangedata(path1 string, path2 string, options int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ _, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_exchangedata_trampoline()
+
+//go:linkname libc_exchangedata libc_exchangedata
+//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Exit(code int) {
- Syscall(SYS_EXIT, uintptr(code), 0, 0)
+ syscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0)
return
}
+func libc_exit_trampoline()
+
+//go:linkname libc_exit libc_exit
+//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
@@ -660,43 +1032,63 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_faccessat_trampoline()
+
+//go:linkname libc_faccessat libc_faccessat
+//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchdir(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchdir_trampoline()
+
+//go:linkname libc_fchdir libc_fchdir
+//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchflags(fd int, flags int) (err error) {
- _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchflags_trampoline()
+
+//go:linkname libc_fchflags libc_fchflags
+//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchmod(fd int, mode uint32) (err error) {
- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchmod_trampoline()
+
+//go:linkname libc_fchmod libc_fchmod
+//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
@@ -705,23 +1097,33 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchmodat_trampoline()
+
+//go:linkname libc_fchmodat libc_fchmodat
+//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
+ _, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchown_trampoline()
+
+//go:linkname libc_fchown libc_fchown
+//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
@@ -730,142 +1132,135 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_fchownat_trampoline()
-func Flock(fd int, how int) (err error) {
- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_fchownat libc_fchownat
+//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fpathconf(fd int, name int) (val int, err error) {
- r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
- val = int(r0)
+func Flock(fd int, how int) (err error) {
+ _, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_flock_trampoline()
-func Fstat(fd int, stat *Stat_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_flock libc_flock
+//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+func Fpathconf(fd int, name int) (val int, err error) {
+ r0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0)
+ val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_fpathconf_trampoline()
-func Fstatfs(fd int, stat *Statfs_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_fpathconf libc_fpathconf
+//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fsync_trampoline()
+
+//go:linkname libc_fsync libc_fsync
+//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Ftruncate(fd int, length int64) (err error) {
- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))
+ _, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), uintptr(length>>32))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_ftruncate_trampoline()
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_ftruncate libc_ftruncate
+//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getdtablesize() (size int) {
- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
+ r0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0)
size = int(r0)
return
}
+func libc_getdtablesize_trampoline()
+
+//go:linkname libc_getdtablesize libc_getdtablesize
+//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getegid() (egid int) {
- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0)
egid = int(r0)
return
}
+func libc_getegid_trampoline()
+
+//go:linkname libc_getegid libc_getegid
+//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Geteuid() (uid int) {
- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0)
uid = int(r0)
return
}
+func libc_geteuid_trampoline()
+
+//go:linkname libc_geteuid libc_geteuid
+//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getgid() (gid int) {
- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0)
gid = int(r0)
return
}
+func libc_getgid_trampoline()
+
+//go:linkname libc_getgid libc_getgid
+//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpgid(pid int) (pgid int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0)
pgid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -873,34 +1268,54 @@ func Getpgid(pid int) (pgid int, err error) {
return
}
+func libc_getpgid_trampoline()
+
+//go:linkname libc_getpgid libc_getpgid
+//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpgrp() (pgrp int) {
- r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0)
pgrp = int(r0)
return
}
+func libc_getpgrp_trampoline()
+
+//go:linkname libc_getpgrp libc_getpgrp
+//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpid() (pid int) {
- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0)
pid = int(r0)
return
}
+func libc_getpid_trampoline()
+
+//go:linkname libc_getpid libc_getpid
+//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getppid() (ppid int) {
- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0)
ppid = int(r0)
return
}
+func libc_getppid_trampoline()
+
+//go:linkname libc_getppid libc_getppid
+//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpriority(which int, who int) (prio int, err error) {
- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0)
prio = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -908,30 +1323,45 @@ func Getpriority(which int, who int) (prio int, err error) {
return
}
+func libc_getpriority_trampoline()
+
+//go:linkname libc_getpriority libc_getpriority
+//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getrlimit(which int, lim *Rlimit) (err error) {
- _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getrlimit_trampoline()
+
+//go:linkname libc_getrlimit libc_getrlimit
+//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getrusage(who int, rusage *Rusage) (err error) {
- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getrusage_trampoline()
+
+//go:linkname libc_getrusage libc_getrusage
+//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getsid(pid int) (sid int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0)
sid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -939,26 +1369,41 @@ func Getsid(pid int) (sid int, err error) {
return
}
+func libc_getsid_trampoline()
+
+//go:linkname libc_getsid libc_getsid
+//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getuid() (uid int) {
- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0)
uid = int(r0)
return
}
+func libc_getuid_trampoline()
+
+//go:linkname libc_getuid libc_getuid
+//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Issetugid() (tainted bool) {
- r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0)
tainted = bool(r0 != 0)
return
}
+func libc_issetugid_trampoline()
+
+//go:linkname libc_issetugid libc_issetugid
+//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Kqueue() (fd int, err error) {
- r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0)
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -966,6 +1411,11 @@ func Kqueue() (fd int, err error) {
return
}
+func libc_kqueue_trampoline()
+
+//go:linkname libc_kqueue libc_kqueue
+//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Lchown(path string, uid int, gid int) (err error) {
@@ -974,13 +1424,18 @@ func Lchown(path string, uid int, gid int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ _, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_lchown_trampoline()
+
+//go:linkname libc_lchown libc_lchown
+//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Link(path string, link string) (err error) {
@@ -994,13 +1449,18 @@ func Link(path string, link string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_link_trampoline()
+
+//go:linkname libc_link libc_link
+//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
@@ -1014,37 +1474,32 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_linkat_trampoline()
+
+//go:linkname libc_linkat libc_linkat
+//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Listen(s int, backlog int) (err error) {
- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_listen_trampoline()
-func Lstat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_listen libc_listen
+//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
@@ -1054,13 +1509,18 @@ func Mkdir(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mkdir_trampoline()
+
+//go:linkname libc_mkdir libc_mkdir
+//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
@@ -1069,13 +1529,18 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ _, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mkdirat_trampoline()
+
+//go:linkname libc_mkdirat libc_mkdirat
+//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mkfifo(path string, mode uint32) (err error) {
@@ -1084,13 +1549,18 @@ func Mkfifo(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mkfifo_trampoline()
+
+//go:linkname libc_mkfifo libc_mkfifo
+//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mknod(path string, mode uint32, dev int) (err error) {
@@ -1099,13 +1569,18 @@ func Mknod(path string, mode uint32, dev int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
+ _, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mknod_trampoline()
+
+//go:linkname libc_mknod libc_mknod
+//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Open(path string, mode int, perm uint32) (fd int, err error) {
@@ -1114,7 +1589,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
if err != nil {
return
}
- r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
+ r0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1122,6 +1597,11 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
+func libc_open_trampoline()
+
+//go:linkname libc_open libc_open
+//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
@@ -1130,7 +1610,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
if err != nil {
return
}
- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1138,6 +1618,11 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
return
}
+func libc_openat_trampoline()
+
+//go:linkname libc_openat libc_openat
+//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Pathconf(path string, name int) (val int, err error) {
@@ -1146,7 +1631,7 @@ func Pathconf(path string, name int) (val int, err error) {
if err != nil {
return
}
- r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1154,6 +1639,11 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
+func libc_pathconf_trampoline()
+
+//go:linkname libc_pathconf libc_pathconf
+//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Pread(fd int, p []byte, offset int64) (n int, err error) {
@@ -1163,7 +1653,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1171,6 +1661,11 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
return
}
+func libc_pread_trampoline()
+
+//go:linkname libc_pread libc_pread
+//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
@@ -1180,7 +1675,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1188,6 +1683,11 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
return
}
+func libc_pwrite_trampoline()
+
+//go:linkname libc_pwrite libc_pwrite
+//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func read(fd int, p []byte) (n int, err error) {
@@ -1197,7 +1697,7 @@ func read(fd int, p []byte) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1205,6 +1705,11 @@ func read(fd int, p []byte) (n int, err error) {
return
}
+func libc_read_trampoline()
+
+//go:linkname libc_read libc_read
+//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Readlink(path string, buf []byte) (n int, err error) {
@@ -1219,7 +1724,7 @@ func Readlink(path string, buf []byte) (n int, err error) {
} else {
_p1 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1227,6 +1732,11 @@ func Readlink(path string, buf []byte) (n int, err error) {
return
}
+func libc_readlink_trampoline()
+
+//go:linkname libc_readlink libc_readlink
+//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
@@ -1241,7 +1751,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
} else {
_p1 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1249,6 +1759,11 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
return
}
+func libc_readlinkat_trampoline()
+
+//go:linkname libc_readlinkat libc_readlinkat
+//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Rename(from string, to string) (err error) {
@@ -1262,13 +1777,18 @@ func Rename(from string, to string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_rename_trampoline()
+
+//go:linkname libc_rename libc_rename
+//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Renameat(fromfd int, from string, tofd int, to string) (err error) {
@@ -1282,13 +1802,18 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_renameat_trampoline()
+
+//go:linkname libc_renameat libc_renameat
+//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Revoke(path string) (err error) {
@@ -1297,13 +1822,18 @@ func Revoke(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_revoke_trampoline()
+
+//go:linkname libc_revoke libc_revoke
+//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Rmdir(path string) (err error) {
@@ -1312,17 +1842,22 @@ func Rmdir(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_rmdir_trampoline()
+
+//go:linkname libc_rmdir libc_rmdir
+//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
+ r0, r1, e1 := syscall_syscall6(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
newoffset = int64(int64(r1)<<32 | int64(r0))
if e1 != 0 {
err = errnoErr(e1)
@@ -1330,46 +1865,71 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
return
}
+func libc_lseek_trampoline()
+
+//go:linkname libc_lseek libc_lseek
+//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_select_trampoline()
+
+//go:linkname libc_select libc_select
+//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setegid(egid int) (err error) {
- _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setegid_trampoline()
+
+//go:linkname libc_setegid libc_setegid
+//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Seteuid(euid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_seteuid_trampoline()
+
+//go:linkname libc_seteuid libc_seteuid
+//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setgid(gid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setgid_trampoline()
+
+//go:linkname libc_setgid libc_setgid
+//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setlogin(name string) (err error) {
@@ -1378,77 +1938,112 @@ func Setlogin(name string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setlogin_trampoline()
+
+//go:linkname libc_setlogin libc_setlogin
+//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setpgid(pid int, pgid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setpgid_trampoline()
+
+//go:linkname libc_setpgid libc_setpgid
+//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setpriority(which int, who int, prio int) (err error) {
- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
+ _, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setpriority_trampoline()
+
+//go:linkname libc_setpriority libc_setpriority
+//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setprivexec(flag int) (err error) {
- _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setprivexec_trampoline()
+
+//go:linkname libc_setprivexec libc_setprivexec
+//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setregid(rgid int, egid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setregid_trampoline()
+
+//go:linkname libc_setregid libc_setregid
+//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setreuid(ruid int, euid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setreuid_trampoline()
+
+//go:linkname libc_setreuid libc_setreuid
+//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setrlimit(which int, lim *Rlimit) (err error) {
- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setrlimit_trampoline()
+
+//go:linkname libc_setrlimit libc_setrlimit
+//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setsid() (pid int, err error) {
- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0)
pid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1456,55 +2051,40 @@ func Setsid() (pid int, err error) {
return
}
+func libc_setsid_trampoline()
+
+//go:linkname libc_setsid libc_setsid
+//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Settimeofday(tp *Timeval) (err error) {
- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_settimeofday_trampoline()
-func Setuid(uid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_settimeofday libc_settimeofday
+//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Stat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+func Setuid(uid int) (err error) {
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_setuid_trampoline()
-func Statfs(path string, stat *Statfs_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_setuid libc_setuid
+//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
@@ -1519,13 +2099,18 @@ func Symlink(path string, link string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_symlink_trampoline()
+
+//go:linkname libc_symlink libc_symlink
+//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
@@ -1539,23 +2124,33 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ _, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_symlinkat_trampoline()
+
+//go:linkname libc_symlinkat libc_symlinkat
+//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Sync() (err error) {
- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_sync_trampoline()
+
+//go:linkname libc_sync libc_sync
+//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Truncate(path string, length int64) (err error) {
@@ -1564,21 +2159,31 @@ func Truncate(path string, length int64) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
+ _, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_truncate_trampoline()
+
+//go:linkname libc_truncate libc_truncate
+//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Umask(newmask int) (oldmask int) {
- r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
+ r0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0)
oldmask = int(r0)
return
}
+func libc_umask_trampoline()
+
+//go:linkname libc_umask libc_umask
+//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Undelete(path string) (err error) {
@@ -1587,13 +2192,18 @@ func Undelete(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_undelete_trampoline()
+
+//go:linkname libc_undelete libc_undelete
+//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Unlink(path string) (err error) {
@@ -1602,13 +2212,18 @@ func Unlink(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_unlink_trampoline()
+
+//go:linkname libc_unlink libc_unlink
+//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Unlinkat(dirfd int, path string, flags int) (err error) {
@@ -1617,13 +2232,18 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ _, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_unlinkat_trampoline()
+
+//go:linkname libc_unlinkat libc_unlinkat
+//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Unmount(path string, flags int) (err error) {
@@ -1632,13 +2252,18 @@ func Unmount(path string, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_unmount_trampoline()
+
+//go:linkname libc_unmount libc_unmount
+//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func write(fd int, p []byte) (n int, err error) {
@@ -1648,7 +2273,7 @@ func write(fd int, p []byte) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1656,10 +2281,15 @@ func write(fd int, p []byte) (n int, err error) {
return
}
+func libc_write_trampoline()
+
+//go:linkname libc_write libc_write
+//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
- r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
+ r0, _, e1 := syscall_syscall9(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
ret = uintptr(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1667,20 +2297,30 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (
return
}
+func libc_mmap_trampoline()
+
+//go:linkname libc_mmap libc_mmap
+//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func munmap(addr uintptr, length uintptr) (err error) {
- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_munmap_trampoline()
+
+//go:linkname libc_munmap libc_munmap
+//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1691,7 +2331,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1702,7 +2342,7 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
- r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
sec = int32(r0)
usec = int32(r1)
if e1 != 0 {
@@ -1710,3 +2350,156 @@ func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
}
return
}
+
+func libc_gettimeofday_trampoline()
+
+//go:linkname libc_gettimeofday libc_gettimeofday
+//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstat(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := syscall_syscall(funcPC(libc_fstat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fstat64_trampoline()
+
+//go:linkname libc_fstat64 libc_fstat64
+//go:cgo_import_dynamic libc_fstat64 fstat64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall6(funcPC(libc_fstatat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fstatat64_trampoline()
+
+//go:linkname libc_fstatat64 libc_fstatat64
+//go:cgo_import_dynamic libc_fstatat64 fstatat64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatfs(fd int, stat *Statfs_t) (err error) {
+ _, _, e1 := syscall_syscall(funcPC(libc_fstatfs64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fstatfs64_trampoline()
+
+//go:linkname libc_fstatfs64 libc_fstatfs64
+//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := syscall_syscall6(funcPC(libc___getdirentries64_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc___getdirentries64_trampoline()
+
+//go:linkname libc___getdirentries64 libc___getdirentries64
+//go:cgo_import_dynamic libc___getdirentries64 __getdirentries64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
+ r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat64_trampoline), uintptr(buf), uintptr(size), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_getfsstat64_trampoline()
+
+//go:linkname libc_getfsstat64 libc_getfsstat64
+//go:cgo_import_dynamic libc_getfsstat64 getfsstat64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lstat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_lstat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_lstat64_trampoline()
+
+//go:linkname libc_lstat64 libc_lstat64
+//go:cgo_import_dynamic libc_lstat64 lstat64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Stat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_stat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_stat64_trampoline()
+
+//go:linkname libc_stat64 libc_stat64
+//go:cgo_import_dynamic libc_stat64 stat64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statfs(path string, stat *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_statfs64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_statfs64_trampoline()
+
+//go:linkname libc_statfs64 libc_statfs64
+//go:cgo_import_dynamic libc_statfs64 statfs64 "/usr/lib/libSystem.B.dylib"
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s
new file mode 100644
index 000000000..37b85b4f6
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s
@@ -0,0 +1,284 @@
+// go run mkasm_darwin.go 386
+// Code generated by the command above; DO NOT EDIT.
+
+// +build go1.12
+
+#include "textflag.h"
+TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getgroups(SB)
+TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setgroups(SB)
+TEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_wait4(SB)
+TEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_accept(SB)
+TEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_bind(SB)
+TEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_connect(SB)
+TEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_socket(SB)
+TEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getsockopt(SB)
+TEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setsockopt(SB)
+TEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpeername(SB)
+TEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getsockname(SB)
+TEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_shutdown(SB)
+TEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_socketpair(SB)
+TEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_recvfrom(SB)
+TEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sendto(SB)
+TEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_recvmsg(SB)
+TEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sendmsg(SB)
+TEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_kevent(SB)
+TEXT ·libc___sysctl_trampoline(SB),NOSPLIT,$0-0
+ JMP libc___sysctl(SB)
+TEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_utimes(SB)
+TEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_futimes(SB)
+TEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fcntl(SB)
+TEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_poll(SB)
+TEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_madvise(SB)
+TEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mlock(SB)
+TEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mlockall(SB)
+TEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mprotect(SB)
+TEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_msync(SB)
+TEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_munlock(SB)
+TEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_munlockall(SB)
+TEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_ptrace(SB)
+TEXT ·libc_getattrlist_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getattrlist(SB)
+TEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pipe(SB)
+TEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getxattr(SB)
+TEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fgetxattr(SB)
+TEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setxattr(SB)
+TEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fsetxattr(SB)
+TEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_removexattr(SB)
+TEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fremovexattr(SB)
+TEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_listxattr(SB)
+TEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_flistxattr(SB)
+TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setattrlist(SB)
+TEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_kill(SB)
+TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_ioctl(SB)
+TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sendfile(SB)
+TEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_access(SB)
+TEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_adjtime(SB)
+TEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chdir(SB)
+TEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chflags(SB)
+TEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chmod(SB)
+TEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chown(SB)
+TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chroot(SB)
+TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_close(SB)
+TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_dup(SB)
+TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_dup2(SB)
+TEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_exchangedata(SB)
+TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_exit(SB)
+TEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_faccessat(SB)
+TEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchdir(SB)
+TEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchflags(SB)
+TEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchmod(SB)
+TEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchmodat(SB)
+TEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchown(SB)
+TEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchownat(SB)
+TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_flock(SB)
+TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fpathconf(SB)
+TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fsync(SB)
+TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_ftruncate(SB)
+TEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getdtablesize(SB)
+TEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getegid(SB)
+TEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_geteuid(SB)
+TEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getgid(SB)
+TEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpgid(SB)
+TEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpgrp(SB)
+TEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpid(SB)
+TEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getppid(SB)
+TEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpriority(SB)
+TEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getrlimit(SB)
+TEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getrusage(SB)
+TEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getsid(SB)
+TEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getuid(SB)
+TEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_issetugid(SB)
+TEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_kqueue(SB)
+TEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_lchown(SB)
+TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_link(SB)
+TEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_linkat(SB)
+TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_listen(SB)
+TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mkdir(SB)
+TEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mkdirat(SB)
+TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mkfifo(SB)
+TEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mknod(SB)
+TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_open(SB)
+TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_openat(SB)
+TEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pathconf(SB)
+TEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pread(SB)
+TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pwrite(SB)
+TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_read(SB)
+TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_readlink(SB)
+TEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_readlinkat(SB)
+TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_rename(SB)
+TEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_renameat(SB)
+TEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_revoke(SB)
+TEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_rmdir(SB)
+TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_lseek(SB)
+TEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_select(SB)
+TEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setegid(SB)
+TEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_seteuid(SB)
+TEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setgid(SB)
+TEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setlogin(SB)
+TEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setpgid(SB)
+TEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setpriority(SB)
+TEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setprivexec(SB)
+TEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setregid(SB)
+TEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setreuid(SB)
+TEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setrlimit(SB)
+TEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setsid(SB)
+TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_settimeofday(SB)
+TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setuid(SB)
+TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_symlink(SB)
+TEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_symlinkat(SB)
+TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sync(SB)
+TEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_truncate(SB)
+TEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_umask(SB)
+TEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_undelete(SB)
+TEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_unlink(SB)
+TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_unlinkat(SB)
+TEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_unmount(SB)
+TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_write(SB)
+TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mmap(SB)
+TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_munmap(SB)
+TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_gettimeofday(SB)
+TEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fstat64(SB)
+TEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fstatat64(SB)
+TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fstatfs64(SB)
+TEXT ·libc___getdirentries64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc___getdirentries64(SB)
+TEXT ·libc_getfsstat64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getfsstat64(SB)
+TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_lstat64(SB)
+TEXT ·libc_stat64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_stat64(SB)
+TEXT ·libc_statfs64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_statfs64(SB)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go
new file mode 100644
index 000000000..2581e8960
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go
@@ -0,0 +1,1810 @@
+// go run mksyscall.go -tags darwin,amd64,!go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build darwin,amd64,!go1.12
+
+package unix
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var _ syscall.Errno
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setgroups(ngid int, gid *_Gid_t) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
+ r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
+ wpid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socket(domain int, typ int, proto int) (fd int, err error) {
+ r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
+ _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Shutdown(s int, how int) (err error) {
+ _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
+ _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
+ r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
+ var _p0 unsafe.Pointer
+ if len(mib) > 0 {
+ _p0 = unsafe.Pointer(&mib[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func utimes(path string, timeval *[2]Timeval) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func futimes(fd int, timeval *[2]Timeval) (err error) {
+ _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fcntl(fd int, cmd int, arg int) (val int, err error) {
+ r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Madvise(b []byte, behav int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlock(b []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlockall(flags int) (err error) {
+ _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mprotect(b []byte, prot int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Msync(b []byte, flags int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlock(b []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlockall() (err error) {
+ _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := Syscall6(SYS_GETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func pipe() (r int, w int, err error) {
+ r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
+ r = int(r0)
+ w = int(r1)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func removexattr(path string, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fremovexattr(fd int, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
+ r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := Syscall6(SYS_SETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kill(pid int, signum int, posix int) (err error) {
+ _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ioctl(fd int, req uint, arg uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
+ _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Access(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
+ _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chdir(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chflags(path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chmod(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chown(path string, uid int, gid int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chroot(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Close(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup(fd int) (nfd int, err error) {
+ r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
+ nfd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup2(from int, to int) (err error) {
+ _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Exchangedata(path1 string, path2 string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path1)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(path2)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Exit(code int) {
+ Syscall(SYS_EXIT, uintptr(code), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchdir(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchflags(fd int, flags int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmod(fd int, mode uint32) (err error) {
+ _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchown(fd int, uid int, gid int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flock(fd int, how int) (err error) {
+ _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fpathconf(fd int, name int) (val int, err error) {
+ r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsync(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Ftruncate(fd int, length int64) (err error) {
+ _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getdtablesize() (size int) {
+ r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
+ size = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getegid() (egid int) {
+ r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
+ egid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Geteuid() (uid int) {
+ r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getgid() (gid int) {
+ r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
+ gid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgid(pid int) (pgid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
+ pgid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgrp() (pgrp int) {
+ r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
+ pgrp = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpid() (pid int) {
+ r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
+ pid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getppid() (ppid int) {
+ r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
+ ppid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpriority(which int, who int) (prio int, err error) {
+ r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
+ prio = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrlimit(which int, lim *Rlimit) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrusage(who int, rusage *Rusage) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getsid(pid int) (sid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
+ sid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getuid() (uid int) {
+ r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Issetugid() (tainted bool) {
+ r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
+ tainted = bool(r0 != 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Kqueue() (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lchown(path string, uid int, gid int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Link(path string, link string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Listen(s int, backlog int) (err error) {
+ _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdir(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkfifo(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mknod(path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Open(path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pathconf(path string, name int) (val int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pread(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func read(fd int, p []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlink(path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Rename(from string, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Revoke(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Rmdir(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
+ r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
+ newoffset = int64(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
+ _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setegid(egid int) (err error) {
+ _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seteuid(euid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setgid(gid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setlogin(name string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpgid(pid int, pgid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpriority(which int, who int, prio int) (err error) {
+ _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setprivexec(flag int) (err error) {
+ _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setregid(rgid int, egid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setreuid(ruid int, euid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setrlimit(which int, lim *Rlimit) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setsid() (pid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
+ pid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Settimeofday(tp *Timeval) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setuid(uid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Symlink(path string, link string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Sync() (err error) {
+ _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Truncate(path string, length int64) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Umask(newmask int) (oldmask int) {
+ r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
+ oldmask = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Undelete(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlink(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unmount(path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func write(fd int, p []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
+ r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
+ ret = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func munmap(addr uintptr, length uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
+ r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ sec = int64(r0)
+ usec = int32(r1)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstat(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatfs(fd int, stat *Statfs_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(buf), uintptr(size), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lstat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Stat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statfs(path string, stat *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
index 1dd3cfa0e..b50178d67 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go
+// go run mksyscall.go -tags darwin,amd64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go
// Code generated by the command above; see README.md. DO NOT EDIT.
-// +build darwin,amd64
+// +build darwin,amd64,go1.12
package unix
@@ -15,7 +15,7 @@ var _ syscall.Errno
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -23,20 +23,30 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
return
}
+func libc_getgroups_trampoline()
+
+//go:linkname libc_getgroups libc_getgroups
+//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setgroups(ngid int, gid *_Gid_t) (err error) {
- _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setgroups_trampoline()
+
+//go:linkname libc_setgroups libc_setgroups
+//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
wpid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -44,10 +54,15 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err
return
}
+func libc_wait4_trampoline()
+
+//go:linkname libc_wait4 libc_wait4
+//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -55,30 +70,45 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
return
}
+func libc_accept_trampoline()
+
+//go:linkname libc_accept libc_accept
+//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
- _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
+ _, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_bind_trampoline()
+
+//go:linkname libc_bind libc_bind
+//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
- _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
+ _, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_connect_trampoline()
+
+//go:linkname libc_connect libc_connect
+//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func socket(domain int, typ int, proto int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -86,66 +116,101 @@ func socket(domain int, typ int, proto int) (fd int, err error) {
return
}
+func libc_socket_trampoline()
+
+//go:linkname libc_socket libc_socket
+//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
- _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getsockopt_trampoline()
+
+//go:linkname libc_getsockopt libc_getsockopt
+//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
- _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setsockopt_trampoline()
+
+//go:linkname libc_setsockopt libc_setsockopt
+//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getpeername_trampoline()
+
+//go:linkname libc_getpeername libc_getpeername
+//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getsockname_trampoline()
+
+//go:linkname libc_getsockname libc_getsockname
+//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Shutdown(s int, how int) (err error) {
- _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_shutdown_trampoline()
+
+//go:linkname libc_shutdown libc_shutdown
+//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
- _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
+ _, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_socketpair_trampoline()
+
+//go:linkname libc_socketpair libc_socketpair
+//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
@@ -155,7 +220,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -163,6 +228,11 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
return
}
+func libc_recvfrom_trampoline()
+
+//go:linkname libc_recvfrom libc_recvfrom
+//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
@@ -172,17 +242,22 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
+ _, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_sendto_trampoline()
+
+//go:linkname libc_sendto libc_sendto
+//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ r0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -190,10 +265,15 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
return
}
+func libc_recvmsg_trampoline()
+
+//go:linkname libc_recvmsg libc_recvmsg
+//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ r0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -201,10 +281,15 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
return
}
+func libc_sendmsg_trampoline()
+
+//go:linkname libc_sendmsg libc_sendmsg
+//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
- r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -212,6 +297,11 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
return
}
+func libc_kevent_trampoline()
+
+//go:linkname libc_kevent libc_kevent
+//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
@@ -221,13 +311,18 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
+ _, _, e1 := syscall_syscall6(funcPC(libc___sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc___sysctl_trampoline()
+
+//go:linkname libc___sysctl libc___sysctl
+//go:cgo_import_dynamic libc___sysctl __sysctl "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func utimes(path string, timeval *[2]Timeval) (err error) {
@@ -236,27 +331,37 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_utimes_trampoline()
+
+//go:linkname libc_utimes libc_utimes
+//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func futimes(fd int, timeval *[2]Timeval) (err error) {
- _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_futimes_trampoline()
+
+//go:linkname libc_futimes libc_futimes
+//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func fcntl(fd int, cmd int, arg int) (val int, err error) {
- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
+ r0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -264,10 +369,15 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
return
}
+func libc_fcntl_trampoline()
+
+//go:linkname libc_fcntl libc_fcntl
+//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
+ r0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -275,6 +385,11 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
return
}
+func libc_poll_trampoline()
+
+//go:linkname libc_poll libc_poll
+//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Madvise(b []byte, behav int) (err error) {
@@ -284,13 +399,18 @@ func Madvise(b []byte, behav int) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
+ _, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_madvise_trampoline()
+
+//go:linkname libc_madvise libc_madvise
+//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mlock(b []byte) (err error) {
@@ -300,23 +420,33 @@ func Mlock(b []byte) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mlock_trampoline()
+
+//go:linkname libc_mlock libc_mlock
+//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mlockall(flags int) (err error) {
- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mlockall_trampoline()
+
+//go:linkname libc_mlockall libc_mlockall
+//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mprotect(b []byte, prot int) (err error) {
@@ -326,13 +456,18 @@ func Mprotect(b []byte, prot int) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
+ _, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mprotect_trampoline()
+
+//go:linkname libc_mprotect libc_mprotect
+//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Msync(b []byte, flags int) (err error) {
@@ -342,13 +477,18 @@ func Msync(b []byte, flags int) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
+ _, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_msync_trampoline()
+
+//go:linkname libc_msync libc_msync
+//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Munlock(b []byte) (err error) {
@@ -358,37 +498,67 @@ func Munlock(b []byte) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_munlock_trampoline()
+
+//go:linkname libc_munlock libc_munlock
+//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Munlockall() (err error) {
- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_munlockall_trampoline()
+
+//go:linkname libc_munlockall libc_munlockall
+//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_ptrace_trampoline()
+
+//go:linkname libc_ptrace libc_ptrace
+//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := syscall_syscall6(funcPC(libc_getattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getattrlist_trampoline()
+
+//go:linkname libc_getattrlist libc_getattrlist
+//go:cgo_import_dynamic libc_getattrlist getattrlist "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func pipe() (r int, w int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)
r = int(r0)
w = int(r1)
if e1 != 0 {
@@ -397,6 +567,11 @@ func pipe() (r int, w int, err error) {
return
}
+func libc_pipe_trampoline()
+
+//go:linkname libc_pipe libc_pipe
+//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
@@ -410,7 +585,7 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o
if err != nil {
return
}
- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -418,6 +593,32 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o
return
}
+func libc_getxattr_trampoline()
+
+//go:linkname libc_getxattr libc_getxattr
+//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fgetxattr_trampoline()
+
+//go:linkname libc_fgetxattr libc_fgetxattr
+//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
@@ -431,13 +632,38 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ _, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setxattr_trampoline()
+
+//go:linkname libc_setxattr libc_setxattr
+//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fsetxattr_trampoline()
+
+//go:linkname libc_fsetxattr libc_fsetxattr
+//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func removexattr(path string, attr string, options int) (err error) {
@@ -451,13 +677,38 @@ func removexattr(path string, attr string, options int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ _, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_removexattr_trampoline()
+
+//go:linkname libc_removexattr libc_removexattr
+//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fremovexattr(fd int, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fremovexattr_trampoline()
+
+//go:linkname libc_fremovexattr libc_fremovexattr
+//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
@@ -466,7 +717,7 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro
if err != nil {
return
}
- r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -474,26 +725,87 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro
return
}
+func libc_listxattr_trampoline()
+
+//go:linkname libc_listxattr libc_listxattr
+//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
+ r0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_flistxattr_trampoline()
+
+//go:linkname libc_flistxattr libc_flistxattr
+//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_setattrlist_trampoline()
+
+//go:linkname libc_setattrlist libc_setattrlist
+//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func kill(pid int, signum int, posix int) (err error) {
- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
+ _, _, e1 := syscall_syscall(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_kill_trampoline()
+
+//go:linkname libc_kill libc_kill
+//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func ioctl(fd int, req uint, arg uintptr) (err error) {
- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
+ _, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_ioctl_trampoline()
+
+//go:linkname libc_ioctl libc_ioctl
+//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
+ _, _, e1 := syscall_syscall6(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_sendfile_trampoline()
+
+//go:linkname libc_sendfile libc_sendfile
+//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Access(path string, mode uint32) (err error) {
@@ -502,23 +814,33 @@ func Access(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_access_trampoline()
+
+//go:linkname libc_access libc_access
+//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
- _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_adjtime_trampoline()
+
+//go:linkname libc_adjtime libc_adjtime
+//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chdir(path string) (err error) {
@@ -527,13 +849,18 @@ func Chdir(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chdir_trampoline()
+
+//go:linkname libc_chdir libc_chdir
+//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chflags(path string, flags int) (err error) {
@@ -542,13 +869,18 @@ func Chflags(path string, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chflags_trampoline()
+
+//go:linkname libc_chflags libc_chflags
+//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chmod(path string, mode uint32) (err error) {
@@ -557,13 +889,18 @@ func Chmod(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chmod_trampoline()
+
+//go:linkname libc_chmod libc_chmod
+//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chown(path string, uid int, gid int) (err error) {
@@ -572,13 +909,18 @@ func Chown(path string, uid int, gid int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ _, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chown_trampoline()
+
+//go:linkname libc_chown libc_chown
+//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chroot(path string) (err error) {
@@ -587,27 +929,37 @@ func Chroot(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chroot_trampoline()
+
+//go:linkname libc_chroot libc_chroot
+//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Close(fd int) (err error) {
- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_close_trampoline()
+
+//go:linkname libc_close libc_close
+//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Dup(fd int) (nfd int, err error) {
- r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)
nfd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -615,16 +967,26 @@ func Dup(fd int) (nfd int, err error) {
return
}
+func libc_dup_trampoline()
+
+//go:linkname libc_dup libc_dup
+//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Dup2(from int, to int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_dup2_trampoline()
+
+//go:linkname libc_dup2 libc_dup2
+//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Exchangedata(path1 string, path2 string, options int) (err error) {
@@ -638,20 +1000,30 @@ func Exchangedata(path1 string, path2 string, options int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ _, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_exchangedata_trampoline()
+
+//go:linkname libc_exchangedata libc_exchangedata
+//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Exit(code int) {
- Syscall(SYS_EXIT, uintptr(code), 0, 0)
+ syscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0)
return
}
+func libc_exit_trampoline()
+
+//go:linkname libc_exit libc_exit
+//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
@@ -660,43 +1032,63 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_faccessat_trampoline()
+
+//go:linkname libc_faccessat libc_faccessat
+//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchdir(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchdir_trampoline()
+
+//go:linkname libc_fchdir libc_fchdir
+//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchflags(fd int, flags int) (err error) {
- _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchflags_trampoline()
+
+//go:linkname libc_fchflags libc_fchflags
+//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchmod(fd int, mode uint32) (err error) {
- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchmod_trampoline()
+
+//go:linkname libc_fchmod libc_fchmod
+//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
@@ -705,23 +1097,33 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchmodat_trampoline()
+
+//go:linkname libc_fchmodat libc_fchmodat
+//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
+ _, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchown_trampoline()
+
+//go:linkname libc_fchown libc_fchown
+//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
@@ -730,142 +1132,135 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_fchownat_trampoline()
-func Flock(fd int, how int) (err error) {
- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_fchownat libc_fchownat
+//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fpathconf(fd int, name int) (val int, err error) {
- r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
- val = int(r0)
+func Flock(fd int, how int) (err error) {
+ _, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_flock_trampoline()
-func Fstat(fd int, stat *Stat_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_flock libc_flock
+//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+func Fpathconf(fd int, name int) (val int, err error) {
+ r0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0)
+ val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_fpathconf_trampoline()
-func Fstatfs(fd int, stat *Statfs_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_fpathconf libc_fpathconf
+//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fsync_trampoline()
+
+//go:linkname libc_fsync libc_fsync
+//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Ftruncate(fd int, length int64) (err error) {
- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_ftruncate_trampoline()
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_ftruncate libc_ftruncate
+//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getdtablesize() (size int) {
- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
+ r0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0)
size = int(r0)
return
}
+func libc_getdtablesize_trampoline()
+
+//go:linkname libc_getdtablesize libc_getdtablesize
+//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getegid() (egid int) {
- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0)
egid = int(r0)
return
}
+func libc_getegid_trampoline()
+
+//go:linkname libc_getegid libc_getegid
+//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Geteuid() (uid int) {
- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0)
uid = int(r0)
return
}
+func libc_geteuid_trampoline()
+
+//go:linkname libc_geteuid libc_geteuid
+//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getgid() (gid int) {
- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0)
gid = int(r0)
return
}
+func libc_getgid_trampoline()
+
+//go:linkname libc_getgid libc_getgid
+//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpgid(pid int) (pgid int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0)
pgid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -873,34 +1268,54 @@ func Getpgid(pid int) (pgid int, err error) {
return
}
+func libc_getpgid_trampoline()
+
+//go:linkname libc_getpgid libc_getpgid
+//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpgrp() (pgrp int) {
- r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0)
pgrp = int(r0)
return
}
+func libc_getpgrp_trampoline()
+
+//go:linkname libc_getpgrp libc_getpgrp
+//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpid() (pid int) {
- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0)
pid = int(r0)
return
}
+func libc_getpid_trampoline()
+
+//go:linkname libc_getpid libc_getpid
+//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getppid() (ppid int) {
- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0)
ppid = int(r0)
return
}
+func libc_getppid_trampoline()
+
+//go:linkname libc_getppid libc_getppid
+//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpriority(which int, who int) (prio int, err error) {
- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0)
prio = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -908,30 +1323,45 @@ func Getpriority(which int, who int) (prio int, err error) {
return
}
+func libc_getpriority_trampoline()
+
+//go:linkname libc_getpriority libc_getpriority
+//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getrlimit(which int, lim *Rlimit) (err error) {
- _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getrlimit_trampoline()
+
+//go:linkname libc_getrlimit libc_getrlimit
+//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getrusage(who int, rusage *Rusage) (err error) {
- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getrusage_trampoline()
+
+//go:linkname libc_getrusage libc_getrusage
+//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getsid(pid int) (sid int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0)
sid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -939,26 +1369,41 @@ func Getsid(pid int) (sid int, err error) {
return
}
+func libc_getsid_trampoline()
+
+//go:linkname libc_getsid libc_getsid
+//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getuid() (uid int) {
- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0)
uid = int(r0)
return
}
+func libc_getuid_trampoline()
+
+//go:linkname libc_getuid libc_getuid
+//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Issetugid() (tainted bool) {
- r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0)
tainted = bool(r0 != 0)
return
}
+func libc_issetugid_trampoline()
+
+//go:linkname libc_issetugid libc_issetugid
+//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Kqueue() (fd int, err error) {
- r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0)
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -966,6 +1411,11 @@ func Kqueue() (fd int, err error) {
return
}
+func libc_kqueue_trampoline()
+
+//go:linkname libc_kqueue libc_kqueue
+//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Lchown(path string, uid int, gid int) (err error) {
@@ -974,13 +1424,18 @@ func Lchown(path string, uid int, gid int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ _, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_lchown_trampoline()
+
+//go:linkname libc_lchown libc_lchown
+//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Link(path string, link string) (err error) {
@@ -994,13 +1449,18 @@ func Link(path string, link string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_link_trampoline()
+
+//go:linkname libc_link libc_link
+//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
@@ -1014,37 +1474,32 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_linkat_trampoline()
+
+//go:linkname libc_linkat libc_linkat
+//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Listen(s int, backlog int) (err error) {
- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_listen_trampoline()
-func Lstat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_listen libc_listen
+//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
@@ -1054,13 +1509,18 @@ func Mkdir(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mkdir_trampoline()
+
+//go:linkname libc_mkdir libc_mkdir
+//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
@@ -1069,13 +1529,18 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ _, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mkdirat_trampoline()
+
+//go:linkname libc_mkdirat libc_mkdirat
+//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mkfifo(path string, mode uint32) (err error) {
@@ -1084,13 +1549,18 @@ func Mkfifo(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mkfifo_trampoline()
+
+//go:linkname libc_mkfifo libc_mkfifo
+//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mknod(path string, mode uint32, dev int) (err error) {
@@ -1099,13 +1569,18 @@ func Mknod(path string, mode uint32, dev int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
+ _, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mknod_trampoline()
+
+//go:linkname libc_mknod libc_mknod
+//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Open(path string, mode int, perm uint32) (fd int, err error) {
@@ -1114,7 +1589,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
if err != nil {
return
}
- r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
+ r0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1122,6 +1597,11 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
+func libc_open_trampoline()
+
+//go:linkname libc_open libc_open
+//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
@@ -1130,7 +1610,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
if err != nil {
return
}
- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1138,6 +1618,11 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
return
}
+func libc_openat_trampoline()
+
+//go:linkname libc_openat libc_openat
+//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Pathconf(path string, name int) (val int, err error) {
@@ -1146,7 +1631,7 @@ func Pathconf(path string, name int) (val int, err error) {
if err != nil {
return
}
- r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1154,6 +1639,11 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
+func libc_pathconf_trampoline()
+
+//go:linkname libc_pathconf libc_pathconf
+//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Pread(fd int, p []byte, offset int64) (n int, err error) {
@@ -1163,7 +1653,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1171,6 +1661,11 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
return
}
+func libc_pread_trampoline()
+
+//go:linkname libc_pread libc_pread
+//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
@@ -1180,7 +1675,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1188,6 +1683,11 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
return
}
+func libc_pwrite_trampoline()
+
+//go:linkname libc_pwrite libc_pwrite
+//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func read(fd int, p []byte) (n int, err error) {
@@ -1197,7 +1697,7 @@ func read(fd int, p []byte) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1205,6 +1705,11 @@ func read(fd int, p []byte) (n int, err error) {
return
}
+func libc_read_trampoline()
+
+//go:linkname libc_read libc_read
+//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Readlink(path string, buf []byte) (n int, err error) {
@@ -1219,7 +1724,7 @@ func Readlink(path string, buf []byte) (n int, err error) {
} else {
_p1 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1227,6 +1732,11 @@ func Readlink(path string, buf []byte) (n int, err error) {
return
}
+func libc_readlink_trampoline()
+
+//go:linkname libc_readlink libc_readlink
+//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
@@ -1241,7 +1751,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
} else {
_p1 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1249,6 +1759,11 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
return
}
+func libc_readlinkat_trampoline()
+
+//go:linkname libc_readlinkat libc_readlinkat
+//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Rename(from string, to string) (err error) {
@@ -1262,13 +1777,18 @@ func Rename(from string, to string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_rename_trampoline()
+
+//go:linkname libc_rename libc_rename
+//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Renameat(fromfd int, from string, tofd int, to string) (err error) {
@@ -1282,13 +1802,18 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_renameat_trampoline()
+
+//go:linkname libc_renameat libc_renameat
+//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Revoke(path string) (err error) {
@@ -1297,13 +1822,18 @@ func Revoke(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_revoke_trampoline()
+
+//go:linkname libc_revoke libc_revoke
+//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Rmdir(path string) (err error) {
@@ -1312,17 +1842,22 @@ func Rmdir(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_rmdir_trampoline()
+
+//go:linkname libc_rmdir libc_rmdir
+//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
+ r0, _, e1 := syscall_syscall(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(whence))
newoffset = int64(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1330,46 +1865,71 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
return
}
+func libc_lseek_trampoline()
+
+//go:linkname libc_lseek libc_lseek
+//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_select_trampoline()
+
+//go:linkname libc_select libc_select
+//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setegid(egid int) (err error) {
- _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setegid_trampoline()
+
+//go:linkname libc_setegid libc_setegid
+//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Seteuid(euid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_seteuid_trampoline()
+
+//go:linkname libc_seteuid libc_seteuid
+//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setgid(gid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setgid_trampoline()
+
+//go:linkname libc_setgid libc_setgid
+//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setlogin(name string) (err error) {
@@ -1378,77 +1938,112 @@ func Setlogin(name string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setlogin_trampoline()
+
+//go:linkname libc_setlogin libc_setlogin
+//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setpgid(pid int, pgid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setpgid_trampoline()
+
+//go:linkname libc_setpgid libc_setpgid
+//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setpriority(which int, who int, prio int) (err error) {
- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
+ _, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setpriority_trampoline()
+
+//go:linkname libc_setpriority libc_setpriority
+//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setprivexec(flag int) (err error) {
- _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setprivexec_trampoline()
+
+//go:linkname libc_setprivexec libc_setprivexec
+//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setregid(rgid int, egid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setregid_trampoline()
+
+//go:linkname libc_setregid libc_setregid
+//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setreuid(ruid int, euid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setreuid_trampoline()
+
+//go:linkname libc_setreuid libc_setreuid
+//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setrlimit(which int, lim *Rlimit) (err error) {
- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setrlimit_trampoline()
+
+//go:linkname libc_setrlimit libc_setrlimit
+//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setsid() (pid int, err error) {
- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0)
pid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1456,55 +2051,40 @@ func Setsid() (pid int, err error) {
return
}
+func libc_setsid_trampoline()
+
+//go:linkname libc_setsid libc_setsid
+//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Settimeofday(tp *Timeval) (err error) {
- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_settimeofday_trampoline()
-func Setuid(uid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_settimeofday libc_settimeofday
+//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Stat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+func Setuid(uid int) (err error) {
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_setuid_trampoline()
-func Statfs(path string, stat *Statfs_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_setuid libc_setuid
+//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
@@ -1519,13 +2099,18 @@ func Symlink(path string, link string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_symlink_trampoline()
+
+//go:linkname libc_symlink libc_symlink
+//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
@@ -1539,23 +2124,33 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ _, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_symlinkat_trampoline()
+
+//go:linkname libc_symlinkat libc_symlinkat
+//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Sync() (err error) {
- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_sync_trampoline()
+
+//go:linkname libc_sync libc_sync
+//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Truncate(path string, length int64) (err error) {
@@ -1564,21 +2159,31 @@ func Truncate(path string, length int64) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_truncate_trampoline()
+
+//go:linkname libc_truncate libc_truncate
+//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Umask(newmask int) (oldmask int) {
- r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
+ r0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0)
oldmask = int(r0)
return
}
+func libc_umask_trampoline()
+
+//go:linkname libc_umask libc_umask
+//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Undelete(path string) (err error) {
@@ -1587,13 +2192,18 @@ func Undelete(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_undelete_trampoline()
+
+//go:linkname libc_undelete libc_undelete
+//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Unlink(path string) (err error) {
@@ -1602,13 +2212,18 @@ func Unlink(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_unlink_trampoline()
+
+//go:linkname libc_unlink libc_unlink
+//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Unlinkat(dirfd int, path string, flags int) (err error) {
@@ -1617,13 +2232,18 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ _, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_unlinkat_trampoline()
+
+//go:linkname libc_unlinkat libc_unlinkat
+//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Unmount(path string, flags int) (err error) {
@@ -1632,13 +2252,18 @@ func Unmount(path string, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_unmount_trampoline()
+
+//go:linkname libc_unmount libc_unmount
+//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func write(fd int, p []byte) (n int, err error) {
@@ -1648,7 +2273,7 @@ func write(fd int, p []byte) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1656,10 +2281,15 @@ func write(fd int, p []byte) (n int, err error) {
return
}
+func libc_write_trampoline()
+
+//go:linkname libc_write libc_write
+//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
- r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
ret = uintptr(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1667,20 +2297,30 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (
return
}
+func libc_mmap_trampoline()
+
+//go:linkname libc_mmap libc_mmap
+//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func munmap(addr uintptr, length uintptr) (err error) {
- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_munmap_trampoline()
+
+//go:linkname libc_munmap libc_munmap
+//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1691,7 +2331,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1702,7 +2342,7 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
- r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
sec = int64(r0)
usec = int32(r1)
if e1 != 0 {
@@ -1710,3 +2350,156 @@ func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
}
return
}
+
+func libc_gettimeofday_trampoline()
+
+//go:linkname libc_gettimeofday libc_gettimeofday
+//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstat(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := syscall_syscall(funcPC(libc_fstat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fstat64_trampoline()
+
+//go:linkname libc_fstat64 libc_fstat64
+//go:cgo_import_dynamic libc_fstat64 fstat64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall6(funcPC(libc_fstatat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fstatat64_trampoline()
+
+//go:linkname libc_fstatat64 libc_fstatat64
+//go:cgo_import_dynamic libc_fstatat64 fstatat64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatfs(fd int, stat *Statfs_t) (err error) {
+ _, _, e1 := syscall_syscall(funcPC(libc_fstatfs64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fstatfs64_trampoline()
+
+//go:linkname libc_fstatfs64 libc_fstatfs64
+//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := syscall_syscall6(funcPC(libc___getdirentries64_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc___getdirentries64_trampoline()
+
+//go:linkname libc___getdirentries64 libc___getdirentries64
+//go:cgo_import_dynamic libc___getdirentries64 __getdirentries64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
+ r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat64_trampoline), uintptr(buf), uintptr(size), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_getfsstat64_trampoline()
+
+//go:linkname libc_getfsstat64 libc_getfsstat64
+//go:cgo_import_dynamic libc_getfsstat64 getfsstat64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lstat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_lstat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_lstat64_trampoline()
+
+//go:linkname libc_lstat64 libc_lstat64
+//go:cgo_import_dynamic libc_lstat64 lstat64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Stat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_stat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_stat64_trampoline()
+
+//go:linkname libc_stat64 libc_stat64
+//go:cgo_import_dynamic libc_stat64 stat64 "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statfs(path string, stat *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_statfs64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_statfs64_trampoline()
+
+//go:linkname libc_statfs64 libc_statfs64
+//go:cgo_import_dynamic libc_statfs64 statfs64 "/usr/lib/libSystem.B.dylib"
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
new file mode 100644
index 000000000..da9b900a8
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
@@ -0,0 +1,284 @@
+// go run mkasm_darwin.go amd64
+// Code generated by the command above; DO NOT EDIT.
+
+// +build go1.12
+
+#include "textflag.h"
+TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getgroups(SB)
+TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setgroups(SB)
+TEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_wait4(SB)
+TEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_accept(SB)
+TEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_bind(SB)
+TEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_connect(SB)
+TEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_socket(SB)
+TEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getsockopt(SB)
+TEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setsockopt(SB)
+TEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpeername(SB)
+TEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getsockname(SB)
+TEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_shutdown(SB)
+TEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_socketpair(SB)
+TEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_recvfrom(SB)
+TEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sendto(SB)
+TEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_recvmsg(SB)
+TEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sendmsg(SB)
+TEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_kevent(SB)
+TEXT ·libc___sysctl_trampoline(SB),NOSPLIT,$0-0
+ JMP libc___sysctl(SB)
+TEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_utimes(SB)
+TEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_futimes(SB)
+TEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fcntl(SB)
+TEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_poll(SB)
+TEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_madvise(SB)
+TEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mlock(SB)
+TEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mlockall(SB)
+TEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mprotect(SB)
+TEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_msync(SB)
+TEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_munlock(SB)
+TEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_munlockall(SB)
+TEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_ptrace(SB)
+TEXT ·libc_getattrlist_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getattrlist(SB)
+TEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pipe(SB)
+TEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getxattr(SB)
+TEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fgetxattr(SB)
+TEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setxattr(SB)
+TEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fsetxattr(SB)
+TEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_removexattr(SB)
+TEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fremovexattr(SB)
+TEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_listxattr(SB)
+TEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_flistxattr(SB)
+TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setattrlist(SB)
+TEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_kill(SB)
+TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_ioctl(SB)
+TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sendfile(SB)
+TEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_access(SB)
+TEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_adjtime(SB)
+TEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chdir(SB)
+TEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chflags(SB)
+TEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chmod(SB)
+TEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chown(SB)
+TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chroot(SB)
+TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_close(SB)
+TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_dup(SB)
+TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_dup2(SB)
+TEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_exchangedata(SB)
+TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_exit(SB)
+TEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_faccessat(SB)
+TEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchdir(SB)
+TEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchflags(SB)
+TEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchmod(SB)
+TEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchmodat(SB)
+TEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchown(SB)
+TEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchownat(SB)
+TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_flock(SB)
+TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fpathconf(SB)
+TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fsync(SB)
+TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_ftruncate(SB)
+TEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getdtablesize(SB)
+TEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getegid(SB)
+TEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_geteuid(SB)
+TEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getgid(SB)
+TEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpgid(SB)
+TEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpgrp(SB)
+TEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpid(SB)
+TEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getppid(SB)
+TEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpriority(SB)
+TEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getrlimit(SB)
+TEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getrusage(SB)
+TEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getsid(SB)
+TEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getuid(SB)
+TEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_issetugid(SB)
+TEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_kqueue(SB)
+TEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_lchown(SB)
+TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_link(SB)
+TEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_linkat(SB)
+TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_listen(SB)
+TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mkdir(SB)
+TEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mkdirat(SB)
+TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mkfifo(SB)
+TEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mknod(SB)
+TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_open(SB)
+TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_openat(SB)
+TEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pathconf(SB)
+TEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pread(SB)
+TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pwrite(SB)
+TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_read(SB)
+TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_readlink(SB)
+TEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_readlinkat(SB)
+TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_rename(SB)
+TEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_renameat(SB)
+TEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_revoke(SB)
+TEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_rmdir(SB)
+TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_lseek(SB)
+TEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_select(SB)
+TEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setegid(SB)
+TEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_seteuid(SB)
+TEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setgid(SB)
+TEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setlogin(SB)
+TEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setpgid(SB)
+TEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setpriority(SB)
+TEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setprivexec(SB)
+TEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setregid(SB)
+TEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setreuid(SB)
+TEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setrlimit(SB)
+TEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setsid(SB)
+TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_settimeofday(SB)
+TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setuid(SB)
+TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_symlink(SB)
+TEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_symlinkat(SB)
+TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sync(SB)
+TEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_truncate(SB)
+TEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_umask(SB)
+TEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_undelete(SB)
+TEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_unlink(SB)
+TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_unlinkat(SB)
+TEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_unmount(SB)
+TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_write(SB)
+TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mmap(SB)
+TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_munmap(SB)
+TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_gettimeofday(SB)
+TEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fstat64(SB)
+TEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fstatat64(SB)
+TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fstatfs64(SB)
+TEXT ·libc___getdirentries64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc___getdirentries64(SB)
+TEXT ·libc_getfsstat64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getfsstat64(SB)
+TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_lstat64(SB)
+TEXT ·libc_stat64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_stat64(SB)
+TEXT ·libc_statfs64_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_statfs64(SB)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go
new file mode 100644
index 000000000..f8caecef0
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go
@@ -0,0 +1,1793 @@
+// go run mksyscall.go -l32 -tags darwin,arm,!go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build darwin,arm,!go1.12
+
+package unix
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var _ syscall.Errno
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setgroups(ngid int, gid *_Gid_t) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
+ r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
+ wpid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socket(domain int, typ int, proto int) (fd int, err error) {
+ r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
+ _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Shutdown(s int, how int) (err error) {
+ _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
+ _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
+ r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
+ var _p0 unsafe.Pointer
+ if len(mib) > 0 {
+ _p0 = unsafe.Pointer(&mib[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func utimes(path string, timeval *[2]Timeval) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func futimes(fd int, timeval *[2]Timeval) (err error) {
+ _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fcntl(fd int, cmd int, arg int) (val int, err error) {
+ r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Madvise(b []byte, behav int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlock(b []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlockall(flags int) (err error) {
+ _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mprotect(b []byte, prot int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Msync(b []byte, flags int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlock(b []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlockall() (err error) {
+ _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := Syscall6(SYS_GETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func pipe() (r int, w int, err error) {
+ r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
+ r = int(r0)
+ w = int(r1)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func removexattr(path string, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fremovexattr(fd int, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
+ r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := Syscall6(SYS_SETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kill(pid int, signum int, posix int) (err error) {
+ _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ioctl(fd int, req uint, arg uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
+ _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Access(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
+ _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chdir(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chflags(path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chmod(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chown(path string, uid int, gid int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chroot(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Close(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup(fd int) (nfd int, err error) {
+ r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
+ nfd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup2(from int, to int) (err error) {
+ _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Exchangedata(path1 string, path2 string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path1)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(path2)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Exit(code int) {
+ Syscall(SYS_EXIT, uintptr(code), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchdir(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchflags(fd int, flags int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmod(fd int, mode uint32) (err error) {
+ _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchown(fd int, uid int, gid int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flock(fd int, how int) (err error) {
+ _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fpathconf(fd int, name int) (val int, err error) {
+ r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsync(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Ftruncate(fd int, length int64) (err error) {
+ _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getdtablesize() (size int) {
+ r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
+ size = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getegid() (egid int) {
+ r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
+ egid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Geteuid() (uid int) {
+ r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getgid() (gid int) {
+ r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
+ gid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgid(pid int) (pgid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
+ pgid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgrp() (pgrp int) {
+ r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
+ pgrp = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpid() (pid int) {
+ r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
+ pid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getppid() (ppid int) {
+ r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
+ ppid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpriority(which int, who int) (prio int, err error) {
+ r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
+ prio = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrlimit(which int, lim *Rlimit) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrusage(who int, rusage *Rusage) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getsid(pid int) (sid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
+ sid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getuid() (uid int) {
+ r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Issetugid() (tainted bool) {
+ r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
+ tainted = bool(r0 != 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Kqueue() (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lchown(path string, uid int, gid int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Link(path string, link string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Listen(s int, backlog int) (err error) {
+ _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdir(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkfifo(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mknod(path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Open(path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pathconf(path string, name int) (val int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pread(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func read(fd int, p []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlink(path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Rename(from string, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Revoke(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Rmdir(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
+ r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
+ newoffset = int64(int64(r1)<<32 | int64(r0))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
+ _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setegid(egid int) (err error) {
+ _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seteuid(euid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setgid(gid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setlogin(name string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpgid(pid int, pgid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpriority(which int, who int, prio int) (err error) {
+ _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setprivexec(flag int) (err error) {
+ _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setregid(rgid int, egid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setreuid(ruid int, euid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setrlimit(which int, lim *Rlimit) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setsid() (pid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
+ pid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Settimeofday(tp *Timeval) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setuid(uid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Symlink(path string, link string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Sync() (err error) {
+ _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Truncate(path string, length int64) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Umask(newmask int) (oldmask int) {
+ r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
+ oldmask = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Undelete(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlink(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unmount(path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func write(fd int, p []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
+ r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
+ ret = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func munmap(addr uintptr, length uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
+ r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ sec = int32(r0)
+ usec = int32(r1)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstat(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatfs(fd int, stat *Statfs_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(buf), uintptr(size), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lstat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Stat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statfs(path string, stat *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
index cab46e74b..01cffbf46 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -l32 -tags darwin,arm syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go
+// go run mksyscall.go -l32 -tags darwin,arm,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go
// Code generated by the command above; see README.md. DO NOT EDIT.
-// +build darwin,arm
+// +build darwin,arm,go1.12
package unix
@@ -15,7 +15,7 @@ var _ syscall.Errno
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -23,20 +23,30 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
return
}
+func libc_getgroups_trampoline()
+
+//go:linkname libc_getgroups libc_getgroups
+//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setgroups(ngid int, gid *_Gid_t) (err error) {
- _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setgroups_trampoline()
+
+//go:linkname libc_setgroups libc_setgroups
+//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
wpid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -44,10 +54,15 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err
return
}
+func libc_wait4_trampoline()
+
+//go:linkname libc_wait4 libc_wait4
+//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -55,30 +70,45 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
return
}
+func libc_accept_trampoline()
+
+//go:linkname libc_accept libc_accept
+//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
- _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
+ _, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_bind_trampoline()
+
+//go:linkname libc_bind libc_bind
+//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
- _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
+ _, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_connect_trampoline()
+
+//go:linkname libc_connect libc_connect
+//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func socket(domain int, typ int, proto int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -86,66 +116,101 @@ func socket(domain int, typ int, proto int) (fd int, err error) {
return
}
+func libc_socket_trampoline()
+
+//go:linkname libc_socket libc_socket
+//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
- _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getsockopt_trampoline()
+
+//go:linkname libc_getsockopt libc_getsockopt
+//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
- _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setsockopt_trampoline()
+
+//go:linkname libc_setsockopt libc_setsockopt
+//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getpeername_trampoline()
+
+//go:linkname libc_getpeername libc_getpeername
+//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getsockname_trampoline()
+
+//go:linkname libc_getsockname libc_getsockname
+//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Shutdown(s int, how int) (err error) {
- _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_shutdown_trampoline()
+
+//go:linkname libc_shutdown libc_shutdown
+//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
- _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
+ _, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_socketpair_trampoline()
+
+//go:linkname libc_socketpair libc_socketpair
+//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
@@ -155,7 +220,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -163,6 +228,11 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
return
}
+func libc_recvfrom_trampoline()
+
+//go:linkname libc_recvfrom libc_recvfrom
+//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
@@ -172,17 +242,22 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
+ _, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_sendto_trampoline()
+
+//go:linkname libc_sendto libc_sendto
+//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ r0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -190,10 +265,15 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
return
}
+func libc_recvmsg_trampoline()
+
+//go:linkname libc_recvmsg libc_recvmsg
+//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ r0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -201,10 +281,15 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
return
}
+func libc_sendmsg_trampoline()
+
+//go:linkname libc_sendmsg libc_sendmsg
+//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
- r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -212,6 +297,11 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
return
}
+func libc_kevent_trampoline()
+
+//go:linkname libc_kevent libc_kevent
+//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
@@ -221,13 +311,18 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
+ _, _, e1 := syscall_syscall6(funcPC(libc___sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc___sysctl_trampoline()
+
+//go:linkname libc___sysctl libc___sysctl
+//go:cgo_import_dynamic libc___sysctl __sysctl "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func utimes(path string, timeval *[2]Timeval) (err error) {
@@ -236,27 +331,37 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_utimes_trampoline()
+
+//go:linkname libc_utimes libc_utimes
+//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func futimes(fd int, timeval *[2]Timeval) (err error) {
- _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_futimes_trampoline()
+
+//go:linkname libc_futimes libc_futimes
+//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func fcntl(fd int, cmd int, arg int) (val int, err error) {
- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
+ r0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -264,10 +369,15 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
return
}
+func libc_fcntl_trampoline()
+
+//go:linkname libc_fcntl libc_fcntl
+//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
+ r0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -275,6 +385,11 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
return
}
+func libc_poll_trampoline()
+
+//go:linkname libc_poll libc_poll
+//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Madvise(b []byte, behav int) (err error) {
@@ -284,13 +399,18 @@ func Madvise(b []byte, behav int) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
+ _, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_madvise_trampoline()
+
+//go:linkname libc_madvise libc_madvise
+//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mlock(b []byte) (err error) {
@@ -300,23 +420,33 @@ func Mlock(b []byte) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mlock_trampoline()
+
+//go:linkname libc_mlock libc_mlock
+//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mlockall(flags int) (err error) {
- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mlockall_trampoline()
+
+//go:linkname libc_mlockall libc_mlockall
+//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mprotect(b []byte, prot int) (err error) {
@@ -326,13 +456,18 @@ func Mprotect(b []byte, prot int) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
+ _, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mprotect_trampoline()
+
+//go:linkname libc_mprotect libc_mprotect
+//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Msync(b []byte, flags int) (err error) {
@@ -342,13 +477,18 @@ func Msync(b []byte, flags int) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
+ _, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_msync_trampoline()
+
+//go:linkname libc_msync libc_msync
+//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Munlock(b []byte) (err error) {
@@ -358,37 +498,67 @@ func Munlock(b []byte) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_munlock_trampoline()
+
+//go:linkname libc_munlock libc_munlock
+//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Munlockall() (err error) {
- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_munlockall_trampoline()
+
+//go:linkname libc_munlockall libc_munlockall
+//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_ptrace_trampoline()
+
+//go:linkname libc_ptrace libc_ptrace
+//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := syscall_syscall6(funcPC(libc_getattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_getattrlist_trampoline()
+
+//go:linkname libc_getattrlist libc_getattrlist
+//go:cgo_import_dynamic libc_getattrlist getattrlist "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func pipe() (r int, w int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)
r = int(r0)
w = int(r1)
if e1 != 0 {
@@ -397,6 +567,11 @@ func pipe() (r int, w int, err error) {
return
}
+func libc_pipe_trampoline()
+
+//go:linkname libc_pipe libc_pipe
+//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
@@ -410,7 +585,7 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o
if err != nil {
return
}
- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -418,6 +593,32 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o
return
}
+func libc_getxattr_trampoline()
+
+//go:linkname libc_getxattr libc_getxattr
+//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fgetxattr_trampoline()
+
+//go:linkname libc_fgetxattr libc_fgetxattr
+//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
@@ -431,13 +632,38 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ _, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_setxattr_trampoline()
+
+//go:linkname libc_setxattr libc_setxattr
+//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fsetxattr_trampoline()
+
+//go:linkname libc_fsetxattr libc_fsetxattr
+//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func removexattr(path string, attr string, options int) (err error) {
@@ -451,13 +677,38 @@ func removexattr(path string, attr string, options int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ _, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_removexattr_trampoline()
+
+//go:linkname libc_removexattr libc_removexattr
+//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fremovexattr(fd int, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fremovexattr_trampoline()
+
+//go:linkname libc_fremovexattr libc_fremovexattr
+//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
@@ -466,7 +717,7 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro
if err != nil {
return
}
- r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -474,26 +725,87 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro
return
}
+func libc_listxattr_trampoline()
+
+//go:linkname libc_listxattr libc_listxattr
+//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
+ r0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_flistxattr_trampoline()
+
+//go:linkname libc_flistxattr libc_flistxattr
+//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_setattrlist_trampoline()
+
+//go:linkname libc_setattrlist libc_setattrlist
+//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func kill(pid int, signum int, posix int) (err error) {
- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
+ _, _, e1 := syscall_syscall(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_kill_trampoline()
+
+//go:linkname libc_kill libc_kill
+//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func ioctl(fd int, req uint, arg uintptr) (err error) {
- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
+ _, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_ioctl_trampoline()
+
+//go:linkname libc_ioctl libc_ioctl
+//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
+ _, _, e1 := syscall_syscall9(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_sendfile_trampoline()
+
+//go:linkname libc_sendfile libc_sendfile
+//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Access(path string, mode uint32) (err error) {
@@ -502,23 +814,33 @@ func Access(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_access_trampoline()
+
+//go:linkname libc_access libc_access
+//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
- _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_adjtime_trampoline()
+
+//go:linkname libc_adjtime libc_adjtime
+//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chdir(path string) (err error) {
@@ -527,13 +849,18 @@ func Chdir(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chdir_trampoline()
+
+//go:linkname libc_chdir libc_chdir
+//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chflags(path string, flags int) (err error) {
@@ -542,13 +869,18 @@ func Chflags(path string, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chflags_trampoline()
+
+//go:linkname libc_chflags libc_chflags
+//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chmod(path string, mode uint32) (err error) {
@@ -557,13 +889,18 @@ func Chmod(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chmod_trampoline()
+
+//go:linkname libc_chmod libc_chmod
+//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chown(path string, uid int, gid int) (err error) {
@@ -572,13 +909,18 @@ func Chown(path string, uid int, gid int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ _, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chown_trampoline()
+
+//go:linkname libc_chown libc_chown
+//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chroot(path string) (err error) {
@@ -587,27 +929,37 @@ func Chroot(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chroot_trampoline()
+
+//go:linkname libc_chroot libc_chroot
+//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Close(fd int) (err error) {
- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_close_trampoline()
+
+//go:linkname libc_close libc_close
+//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Dup(fd int) (nfd int, err error) {
- r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)
nfd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -615,16 +967,26 @@ func Dup(fd int) (nfd int, err error) {
return
}
+func libc_dup_trampoline()
+
+//go:linkname libc_dup libc_dup
+//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Dup2(from int, to int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_dup2_trampoline()
+
+//go:linkname libc_dup2 libc_dup2
+//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Exchangedata(path1 string, path2 string, options int) (err error) {
@@ -638,20 +1000,30 @@ func Exchangedata(path1 string, path2 string, options int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ _, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_exchangedata_trampoline()
+
+//go:linkname libc_exchangedata libc_exchangedata
+//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Exit(code int) {
- Syscall(SYS_EXIT, uintptr(code), 0, 0)
+ syscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0)
return
}
+func libc_exit_trampoline()
+
+//go:linkname libc_exit libc_exit
+//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
@@ -660,43 +1032,63 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_faccessat_trampoline()
+
+//go:linkname libc_faccessat libc_faccessat
+//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchdir(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchdir_trampoline()
+
+//go:linkname libc_fchdir libc_fchdir
+//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchflags(fd int, flags int) (err error) {
- _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchflags_trampoline()
+
+//go:linkname libc_fchflags libc_fchflags
+//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchmod(fd int, mode uint32) (err error) {
- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchmod_trampoline()
+
+//go:linkname libc_fchmod libc_fchmod
+//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
@@ -705,23 +1097,33 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchmodat_trampoline()
+
+//go:linkname libc_fchmodat libc_fchmodat
+//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
+ _, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchown_trampoline()
+
+//go:linkname libc_fchown libc_fchown
+//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
@@ -730,142 +1132,135 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_fchownat_trampoline()
-func Flock(fd int, how int) (err error) {
- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_fchownat libc_fchownat
+//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fpathconf(fd int, name int) (val int, err error) {
- r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
- val = int(r0)
+func Flock(fd int, how int) (err error) {
+ _, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_flock_trampoline()
-func Fstat(fd int, stat *Stat_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_flock libc_flock
+//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+func Fpathconf(fd int, name int) (val int, err error) {
+ r0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0)
+ val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_fpathconf_trampoline()
-func Fstatfs(fd int, stat *Statfs_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_fpathconf libc_fpathconf
+//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fsync_trampoline()
+
+//go:linkname libc_fsync libc_fsync
+//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Ftruncate(fd int, length int64) (err error) {
- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))
+ _, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), uintptr(length>>32))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_ftruncate_trampoline()
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_ftruncate libc_ftruncate
+//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getdtablesize() (size int) {
- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
+ r0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0)
size = int(r0)
return
}
+func libc_getdtablesize_trampoline()
+
+//go:linkname libc_getdtablesize libc_getdtablesize
+//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getegid() (egid int) {
- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0)
egid = int(r0)
return
}
+func libc_getegid_trampoline()
+
+//go:linkname libc_getegid libc_getegid
+//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Geteuid() (uid int) {
- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0)
uid = int(r0)
return
}
+func libc_geteuid_trampoline()
+
+//go:linkname libc_geteuid libc_geteuid
+//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getgid() (gid int) {
- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0)
gid = int(r0)
return
}
+func libc_getgid_trampoline()
+
+//go:linkname libc_getgid libc_getgid
+//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpgid(pid int) (pgid int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0)
pgid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -873,34 +1268,54 @@ func Getpgid(pid int) (pgid int, err error) {
return
}
+func libc_getpgid_trampoline()
+
+//go:linkname libc_getpgid libc_getpgid
+//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpgrp() (pgrp int) {
- r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0)
pgrp = int(r0)
return
}
+func libc_getpgrp_trampoline()
+
+//go:linkname libc_getpgrp libc_getpgrp
+//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpid() (pid int) {
- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0)
pid = int(r0)
return
}
+func libc_getpid_trampoline()
+
+//go:linkname libc_getpid libc_getpid
+//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getppid() (ppid int) {
- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0)
ppid = int(r0)
return
}
+func libc_getppid_trampoline()
+
+//go:linkname libc_getppid libc_getppid
+//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpriority(which int, who int) (prio int, err error) {
- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0)
prio = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -908,30 +1323,45 @@ func Getpriority(which int, who int) (prio int, err error) {
return
}
+func libc_getpriority_trampoline()
+
+//go:linkname libc_getpriority libc_getpriority
+//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getrlimit(which int, lim *Rlimit) (err error) {
- _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getrlimit_trampoline()
+
+//go:linkname libc_getrlimit libc_getrlimit
+//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getrusage(who int, rusage *Rusage) (err error) {
- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getrusage_trampoline()
+
+//go:linkname libc_getrusage libc_getrusage
+//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getsid(pid int) (sid int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0)
sid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -939,26 +1369,41 @@ func Getsid(pid int) (sid int, err error) {
return
}
+func libc_getsid_trampoline()
+
+//go:linkname libc_getsid libc_getsid
+//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getuid() (uid int) {
- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0)
uid = int(r0)
return
}
+func libc_getuid_trampoline()
+
+//go:linkname libc_getuid libc_getuid
+//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Issetugid() (tainted bool) {
- r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0)
tainted = bool(r0 != 0)
return
}
+func libc_issetugid_trampoline()
+
+//go:linkname libc_issetugid libc_issetugid
+//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Kqueue() (fd int, err error) {
- r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0)
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -966,6 +1411,11 @@ func Kqueue() (fd int, err error) {
return
}
+func libc_kqueue_trampoline()
+
+//go:linkname libc_kqueue libc_kqueue
+//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Lchown(path string, uid int, gid int) (err error) {
@@ -974,13 +1424,18 @@ func Lchown(path string, uid int, gid int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ _, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_lchown_trampoline()
+
+//go:linkname libc_lchown libc_lchown
+//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Link(path string, link string) (err error) {
@@ -994,13 +1449,18 @@ func Link(path string, link string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_link_trampoline()
+
+//go:linkname libc_link libc_link
+//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
@@ -1014,37 +1474,32 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_linkat_trampoline()
+
+//go:linkname libc_linkat libc_linkat
+//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Listen(s int, backlog int) (err error) {
- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_listen_trampoline()
-func Lstat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_listen libc_listen
+//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
@@ -1054,13 +1509,18 @@ func Mkdir(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mkdir_trampoline()
+
+//go:linkname libc_mkdir libc_mkdir
+//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
@@ -1069,13 +1529,18 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ _, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mkdirat_trampoline()
+
+//go:linkname libc_mkdirat libc_mkdirat
+//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mkfifo(path string, mode uint32) (err error) {
@@ -1084,13 +1549,18 @@ func Mkfifo(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mkfifo_trampoline()
+
+//go:linkname libc_mkfifo libc_mkfifo
+//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mknod(path string, mode uint32, dev int) (err error) {
@@ -1099,13 +1569,18 @@ func Mknod(path string, mode uint32, dev int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
+ _, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mknod_trampoline()
+
+//go:linkname libc_mknod libc_mknod
+//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Open(path string, mode int, perm uint32) (fd int, err error) {
@@ -1114,7 +1589,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
if err != nil {
return
}
- r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
+ r0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1122,6 +1597,11 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
+func libc_open_trampoline()
+
+//go:linkname libc_open libc_open
+//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
@@ -1130,7 +1610,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
if err != nil {
return
}
- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1138,6 +1618,11 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
return
}
+func libc_openat_trampoline()
+
+//go:linkname libc_openat libc_openat
+//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Pathconf(path string, name int) (val int, err error) {
@@ -1146,7 +1631,7 @@ func Pathconf(path string, name int) (val int, err error) {
if err != nil {
return
}
- r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1154,6 +1639,11 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
+func libc_pathconf_trampoline()
+
+//go:linkname libc_pathconf libc_pathconf
+//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Pread(fd int, p []byte, offset int64) (n int, err error) {
@@ -1163,7 +1653,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1171,6 +1661,11 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
return
}
+func libc_pread_trampoline()
+
+//go:linkname libc_pread libc_pread
+//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
@@ -1180,7 +1675,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1188,6 +1683,11 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
return
}
+func libc_pwrite_trampoline()
+
+//go:linkname libc_pwrite libc_pwrite
+//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func read(fd int, p []byte) (n int, err error) {
@@ -1197,7 +1697,7 @@ func read(fd int, p []byte) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1205,6 +1705,11 @@ func read(fd int, p []byte) (n int, err error) {
return
}
+func libc_read_trampoline()
+
+//go:linkname libc_read libc_read
+//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Readlink(path string, buf []byte) (n int, err error) {
@@ -1219,7 +1724,7 @@ func Readlink(path string, buf []byte) (n int, err error) {
} else {
_p1 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1227,6 +1732,11 @@ func Readlink(path string, buf []byte) (n int, err error) {
return
}
+func libc_readlink_trampoline()
+
+//go:linkname libc_readlink libc_readlink
+//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
@@ -1241,7 +1751,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
} else {
_p1 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1249,6 +1759,11 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
return
}
+func libc_readlinkat_trampoline()
+
+//go:linkname libc_readlinkat libc_readlinkat
+//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Rename(from string, to string) (err error) {
@@ -1262,13 +1777,18 @@ func Rename(from string, to string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_rename_trampoline()
+
+//go:linkname libc_rename libc_rename
+//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Renameat(fromfd int, from string, tofd int, to string) (err error) {
@@ -1282,13 +1802,18 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_renameat_trampoline()
+
+//go:linkname libc_renameat libc_renameat
+//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Revoke(path string) (err error) {
@@ -1297,13 +1822,18 @@ func Revoke(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_revoke_trampoline()
+
+//go:linkname libc_revoke libc_revoke
+//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Rmdir(path string) (err error) {
@@ -1312,17 +1842,22 @@ func Rmdir(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_rmdir_trampoline()
+
+//go:linkname libc_rmdir libc_rmdir
+//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
+ r0, r1, e1 := syscall_syscall6(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)
newoffset = int64(int64(r1)<<32 | int64(r0))
if e1 != 0 {
err = errnoErr(e1)
@@ -1330,46 +1865,71 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
return
}
+func libc_lseek_trampoline()
+
+//go:linkname libc_lseek libc_lseek
+//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_select_trampoline()
+
+//go:linkname libc_select libc_select
+//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setegid(egid int) (err error) {
- _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setegid_trampoline()
+
+//go:linkname libc_setegid libc_setegid
+//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Seteuid(euid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_seteuid_trampoline()
+
+//go:linkname libc_seteuid libc_seteuid
+//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setgid(gid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setgid_trampoline()
+
+//go:linkname libc_setgid libc_setgid
+//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setlogin(name string) (err error) {
@@ -1378,77 +1938,112 @@ func Setlogin(name string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setlogin_trampoline()
+
+//go:linkname libc_setlogin libc_setlogin
+//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setpgid(pid int, pgid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setpgid_trampoline()
+
+//go:linkname libc_setpgid libc_setpgid
+//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setpriority(which int, who int, prio int) (err error) {
- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
+ _, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setpriority_trampoline()
+
+//go:linkname libc_setpriority libc_setpriority
+//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setprivexec(flag int) (err error) {
- _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setprivexec_trampoline()
+
+//go:linkname libc_setprivexec libc_setprivexec
+//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setregid(rgid int, egid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setregid_trampoline()
+
+//go:linkname libc_setregid libc_setregid
+//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setreuid(ruid int, euid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setreuid_trampoline()
+
+//go:linkname libc_setreuid libc_setreuid
+//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setrlimit(which int, lim *Rlimit) (err error) {
- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setrlimit_trampoline()
+
+//go:linkname libc_setrlimit libc_setrlimit
+//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setsid() (pid int, err error) {
- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0)
pid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1456,55 +2051,40 @@ func Setsid() (pid int, err error) {
return
}
+func libc_setsid_trampoline()
+
+//go:linkname libc_setsid libc_setsid
+//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Settimeofday(tp *Timeval) (err error) {
- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_settimeofday_trampoline()
-func Setuid(uid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_settimeofday libc_settimeofday
+//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Stat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+func Setuid(uid int) (err error) {
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_setuid_trampoline()
-func Statfs(path string, stat *Statfs_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_setuid libc_setuid
+//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
@@ -1519,13 +2099,18 @@ func Symlink(path string, link string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_symlink_trampoline()
+
+//go:linkname libc_symlink libc_symlink
+//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
@@ -1539,23 +2124,33 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ _, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_symlinkat_trampoline()
+
+//go:linkname libc_symlinkat libc_symlinkat
+//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Sync() (err error) {
- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_sync_trampoline()
+
+//go:linkname libc_sync libc_sync
+//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Truncate(path string, length int64) (err error) {
@@ -1564,21 +2159,31 @@ func Truncate(path string, length int64) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
+ _, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_truncate_trampoline()
+
+//go:linkname libc_truncate libc_truncate
+//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Umask(newmask int) (oldmask int) {
- r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
+ r0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0)
oldmask = int(r0)
return
}
+func libc_umask_trampoline()
+
+//go:linkname libc_umask libc_umask
+//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Undelete(path string) (err error) {
@@ -1587,13 +2192,18 @@ func Undelete(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_undelete_trampoline()
+
+//go:linkname libc_undelete libc_undelete
+//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Unlink(path string) (err error) {
@@ -1602,13 +2212,18 @@ func Unlink(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_unlink_trampoline()
+
+//go:linkname libc_unlink libc_unlink
+//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Unlinkat(dirfd int, path string, flags int) (err error) {
@@ -1617,13 +2232,18 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ _, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_unlinkat_trampoline()
+
+//go:linkname libc_unlinkat libc_unlinkat
+//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Unmount(path string, flags int) (err error) {
@@ -1632,13 +2252,18 @@ func Unmount(path string, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_unmount_trampoline()
+
+//go:linkname libc_unmount libc_unmount
+//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func write(fd int, p []byte) (n int, err error) {
@@ -1648,7 +2273,7 @@ func write(fd int, p []byte) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1656,10 +2281,15 @@ func write(fd int, p []byte) (n int, err error) {
return
}
+func libc_write_trampoline()
+
+//go:linkname libc_write libc_write
+//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
- r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
+ r0, _, e1 := syscall_syscall9(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)
ret = uintptr(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1667,20 +2297,30 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (
return
}
+func libc_mmap_trampoline()
+
+//go:linkname libc_mmap libc_mmap
+//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func munmap(addr uintptr, length uintptr) (err error) {
- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_munmap_trampoline()
+
+//go:linkname libc_munmap libc_munmap
+//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1691,7 +2331,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1702,7 +2342,7 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
- r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
sec = int32(r0)
usec = int32(r1)
if e1 != 0 {
@@ -1710,3 +2350,134 @@ func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {
}
return
}
+
+func libc_gettimeofday_trampoline()
+
+//go:linkname libc_gettimeofday libc_gettimeofday
+//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstat(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := syscall_syscall(funcPC(libc_fstat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fstat_trampoline()
+
+//go:linkname libc_fstat libc_fstat
+//go:cgo_import_dynamic libc_fstat fstat "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall6(funcPC(libc_fstatat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fstatat_trampoline()
+
+//go:linkname libc_fstatat libc_fstatat
+//go:cgo_import_dynamic libc_fstatat fstatat "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatfs(fd int, stat *Statfs_t) (err error) {
+ _, _, e1 := syscall_syscall(funcPC(libc_fstatfs_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fstatfs_trampoline()
+
+//go:linkname libc_fstatfs libc_fstatfs
+//go:cgo_import_dynamic libc_fstatfs fstatfs "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
+ r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat_trampoline), uintptr(buf), uintptr(size), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_getfsstat_trampoline()
+
+//go:linkname libc_getfsstat libc_getfsstat
+//go:cgo_import_dynamic libc_getfsstat getfsstat "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lstat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_lstat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_lstat_trampoline()
+
+//go:linkname libc_lstat libc_lstat
+//go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Stat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_stat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_stat_trampoline()
+
+//go:linkname libc_stat libc_stat
+//go:cgo_import_dynamic libc_stat stat "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statfs(path string, stat *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_statfs_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_statfs_trampoline()
+
+//go:linkname libc_statfs libc_statfs
+//go:cgo_import_dynamic libc_statfs statfs "/usr/lib/libSystem.B.dylib"
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s
new file mode 100644
index 000000000..994056f35
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s
@@ -0,0 +1,282 @@
+// go run mkasm_darwin.go arm
+// Code generated by the command above; DO NOT EDIT.
+
+// +build go1.12
+
+#include "textflag.h"
+TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getgroups(SB)
+TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setgroups(SB)
+TEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_wait4(SB)
+TEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_accept(SB)
+TEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_bind(SB)
+TEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_connect(SB)
+TEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_socket(SB)
+TEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getsockopt(SB)
+TEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setsockopt(SB)
+TEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpeername(SB)
+TEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getsockname(SB)
+TEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_shutdown(SB)
+TEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_socketpair(SB)
+TEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_recvfrom(SB)
+TEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sendto(SB)
+TEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_recvmsg(SB)
+TEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sendmsg(SB)
+TEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_kevent(SB)
+TEXT ·libc___sysctl_trampoline(SB),NOSPLIT,$0-0
+ JMP libc___sysctl(SB)
+TEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_utimes(SB)
+TEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_futimes(SB)
+TEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fcntl(SB)
+TEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_poll(SB)
+TEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_madvise(SB)
+TEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mlock(SB)
+TEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mlockall(SB)
+TEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mprotect(SB)
+TEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_msync(SB)
+TEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_munlock(SB)
+TEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_munlockall(SB)
+TEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_ptrace(SB)
+TEXT ·libc_getattrlist_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getattrlist(SB)
+TEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pipe(SB)
+TEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getxattr(SB)
+TEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fgetxattr(SB)
+TEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setxattr(SB)
+TEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fsetxattr(SB)
+TEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_removexattr(SB)
+TEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fremovexattr(SB)
+TEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_listxattr(SB)
+TEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_flistxattr(SB)
+TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setattrlist(SB)
+TEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_kill(SB)
+TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_ioctl(SB)
+TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sendfile(SB)
+TEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_access(SB)
+TEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_adjtime(SB)
+TEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chdir(SB)
+TEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chflags(SB)
+TEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chmod(SB)
+TEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chown(SB)
+TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chroot(SB)
+TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_close(SB)
+TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_dup(SB)
+TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_dup2(SB)
+TEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_exchangedata(SB)
+TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_exit(SB)
+TEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_faccessat(SB)
+TEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchdir(SB)
+TEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchflags(SB)
+TEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchmod(SB)
+TEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchmodat(SB)
+TEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchown(SB)
+TEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchownat(SB)
+TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_flock(SB)
+TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fpathconf(SB)
+TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fsync(SB)
+TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_ftruncate(SB)
+TEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getdtablesize(SB)
+TEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getegid(SB)
+TEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_geteuid(SB)
+TEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getgid(SB)
+TEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpgid(SB)
+TEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpgrp(SB)
+TEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpid(SB)
+TEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getppid(SB)
+TEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpriority(SB)
+TEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getrlimit(SB)
+TEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getrusage(SB)
+TEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getsid(SB)
+TEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getuid(SB)
+TEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_issetugid(SB)
+TEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_kqueue(SB)
+TEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_lchown(SB)
+TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_link(SB)
+TEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_linkat(SB)
+TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_listen(SB)
+TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mkdir(SB)
+TEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mkdirat(SB)
+TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mkfifo(SB)
+TEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mknod(SB)
+TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_open(SB)
+TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_openat(SB)
+TEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pathconf(SB)
+TEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pread(SB)
+TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pwrite(SB)
+TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_read(SB)
+TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_readlink(SB)
+TEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_readlinkat(SB)
+TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_rename(SB)
+TEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_renameat(SB)
+TEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_revoke(SB)
+TEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_rmdir(SB)
+TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_lseek(SB)
+TEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_select(SB)
+TEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setegid(SB)
+TEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_seteuid(SB)
+TEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setgid(SB)
+TEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setlogin(SB)
+TEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setpgid(SB)
+TEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setpriority(SB)
+TEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setprivexec(SB)
+TEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setregid(SB)
+TEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setreuid(SB)
+TEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setrlimit(SB)
+TEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setsid(SB)
+TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_settimeofday(SB)
+TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setuid(SB)
+TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_symlink(SB)
+TEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_symlinkat(SB)
+TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sync(SB)
+TEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_truncate(SB)
+TEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_umask(SB)
+TEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_undelete(SB)
+TEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_unlink(SB)
+TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_unlinkat(SB)
+TEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_unmount(SB)
+TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_write(SB)
+TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mmap(SB)
+TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_munmap(SB)
+TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_gettimeofday(SB)
+TEXT ·libc_fstat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fstat(SB)
+TEXT ·libc_fstatat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fstatat(SB)
+TEXT ·libc_fstatfs_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fstatfs(SB)
+TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getfsstat(SB)
+TEXT ·libc_lstat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_lstat(SB)
+TEXT ·libc_stat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_stat(SB)
+TEXT ·libc_statfs_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_statfs(SB)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go
new file mode 100644
index 000000000..3fd0f3c85
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go
@@ -0,0 +1,1793 @@
+// go run mksyscall.go -tags darwin,arm64,!go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build darwin,arm64,!go1.12
+
+package unix
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var _ syscall.Errno
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setgroups(ngid int, gid *_Gid_t) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
+ r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
+ wpid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socket(domain int, typ int, proto int) (fd int, err error) {
+ r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
+ _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Shutdown(s int, how int) (err error) {
+ _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
+ _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
+ r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
+ var _p0 unsafe.Pointer
+ if len(mib) > 0 {
+ _p0 = unsafe.Pointer(&mib[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func utimes(path string, timeval *[2]Timeval) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func futimes(fd int, timeval *[2]Timeval) (err error) {
+ _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fcntl(fd int, cmd int, arg int) (val int, err error) {
+ r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Madvise(b []byte, behav int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlock(b []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlockall(flags int) (err error) {
+ _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mprotect(b []byte, prot int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Msync(b []byte, flags int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlock(b []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlockall() (err error) {
+ _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := Syscall6(SYS_GETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func pipe() (r int, w int, err error) {
+ r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
+ r = int(r0)
+ w = int(r1)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func removexattr(path string, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fremovexattr(fd int, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
+ r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := Syscall6(SYS_SETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kill(pid int, signum int, posix int) (err error) {
+ _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ioctl(fd int, req uint, arg uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
+ _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Access(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
+ _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chdir(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chflags(path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chmod(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chown(path string, uid int, gid int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chroot(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Close(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup(fd int) (nfd int, err error) {
+ r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
+ nfd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup2(from int, to int) (err error) {
+ _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Exchangedata(path1 string, path2 string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path1)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(path2)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Exit(code int) {
+ Syscall(SYS_EXIT, uintptr(code), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchdir(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchflags(fd int, flags int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmod(fd int, mode uint32) (err error) {
+ _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchown(fd int, uid int, gid int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flock(fd int, how int) (err error) {
+ _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fpathconf(fd int, name int) (val int, err error) {
+ r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsync(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Ftruncate(fd int, length int64) (err error) {
+ _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getdtablesize() (size int) {
+ r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
+ size = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getegid() (egid int) {
+ r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
+ egid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Geteuid() (uid int) {
+ r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getgid() (gid int) {
+ r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
+ gid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgid(pid int) (pgid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
+ pgid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgrp() (pgrp int) {
+ r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
+ pgrp = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpid() (pid int) {
+ r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
+ pid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getppid() (ppid int) {
+ r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
+ ppid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpriority(which int, who int) (prio int, err error) {
+ r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
+ prio = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrlimit(which int, lim *Rlimit) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrusage(who int, rusage *Rusage) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getsid(pid int) (sid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
+ sid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getuid() (uid int) {
+ r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Issetugid() (tainted bool) {
+ r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
+ tainted = bool(r0 != 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Kqueue() (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lchown(path string, uid int, gid int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Link(path string, link string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Listen(s int, backlog int) (err error) {
+ _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdir(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkfifo(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mknod(path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Open(path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pathconf(path string, name int) (val int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pread(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func read(fd int, p []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlink(path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Rename(from string, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Revoke(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Rmdir(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
+ r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
+ newoffset = int64(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
+ _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setegid(egid int) (err error) {
+ _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seteuid(euid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setgid(gid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setlogin(name string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpgid(pid int, pgid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpriority(which int, who int, prio int) (err error) {
+ _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setprivexec(flag int) (err error) {
+ _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setregid(rgid int, egid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setreuid(ruid int, euid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setrlimit(which int, lim *Rlimit) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setsid() (pid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
+ pid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Settimeofday(tp *Timeval) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setuid(uid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Symlink(path string, link string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Sync() (err error) {
+ _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Truncate(path string, length int64) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Umask(newmask int) (oldmask int) {
+ r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
+ oldmask = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Undelete(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlink(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unmount(path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func write(fd int, p []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
+ r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
+ ret = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func munmap(addr uintptr, length uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
+ r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ sec = int64(r0)
+ usec = int32(r1)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstat(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatfs(fd int, stat *Statfs_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(buf), uintptr(size), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lstat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Stat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statfs(path string, stat *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
index 13478dd0b..8f2691dee 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
@@ -1,7 +1,7 @@
-// mksyscall.pl -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go
+// go run mksyscall.go -tags darwin,arm64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go
// Code generated by the command above; see README.md. DO NOT EDIT.
-// +build darwin,arm64
+// +build darwin,arm64,go1.12
package unix
@@ -15,7 +15,7 @@ var _ syscall.Errno
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -23,20 +23,30 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
return
}
+func libc_getgroups_trampoline()
+
+//go:linkname libc_getgroups libc_getgroups
+//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setgroups(ngid int, gid *_Gid_t) (err error) {
- _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setgroups_trampoline()
+
+//go:linkname libc_setgroups libc_setgroups
+//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
- r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
wpid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -44,10 +54,15 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err
return
}
+func libc_wait4_trampoline()
+
+//go:linkname libc_wait4 libc_wait4
+//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
- r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -55,30 +70,45 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
return
}
+func libc_accept_trampoline()
+
+//go:linkname libc_accept libc_accept
+//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
- _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
+ _, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_bind_trampoline()
+
+//go:linkname libc_bind libc_bind
+//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
- _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
+ _, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_connect_trampoline()
+
+//go:linkname libc_connect libc_connect
+//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func socket(domain int, typ int, proto int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -86,66 +116,101 @@ func socket(domain int, typ int, proto int) (fd int, err error) {
return
}
+func libc_socket_trampoline()
+
+//go:linkname libc_socket libc_socket
+//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
- _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getsockopt_trampoline()
+
+//go:linkname libc_getsockopt libc_getsockopt
+//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
- _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setsockopt_trampoline()
+
+//go:linkname libc_setsockopt libc_setsockopt
+//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getpeername_trampoline()
+
+//go:linkname libc_getpeername libc_getpeername
+//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
- _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getsockname_trampoline()
+
+//go:linkname libc_getsockname libc_getsockname
+//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Shutdown(s int, how int) (err error) {
- _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_shutdown_trampoline()
+
+//go:linkname libc_shutdown libc_shutdown
+//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
- _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
+ _, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_socketpair_trampoline()
+
+//go:linkname libc_socketpair libc_socketpair
+//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
@@ -155,7 +220,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -163,6 +228,11 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
return
}
+func libc_recvfrom_trampoline()
+
+//go:linkname libc_recvfrom libc_recvfrom
+//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
@@ -172,17 +242,22 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
+ _, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_sendto_trampoline()
+
+//go:linkname libc_sendto libc_sendto
+//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ r0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -190,10 +265,15 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
return
}
+func libc_recvmsg_trampoline()
+
+//go:linkname libc_recvmsg libc_recvmsg
+//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ r0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -201,10 +281,15 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
return
}
+func libc_sendmsg_trampoline()
+
+//go:linkname libc_sendmsg libc_sendmsg
+//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
- r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -212,6 +297,11 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
return
}
+func libc_kevent_trampoline()
+
+//go:linkname libc_kevent libc_kevent
+//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
@@ -221,13 +311,18 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
+ _, _, e1 := syscall_syscall6(funcPC(libc___sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc___sysctl_trampoline()
+
+//go:linkname libc___sysctl libc___sysctl
+//go:cgo_import_dynamic libc___sysctl __sysctl "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func utimes(path string, timeval *[2]Timeval) (err error) {
@@ -236,27 +331,37 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_utimes_trampoline()
+
+//go:linkname libc_utimes libc_utimes
+//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func futimes(fd int, timeval *[2]Timeval) (err error) {
- _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_futimes_trampoline()
+
+//go:linkname libc_futimes libc_futimes
+//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func fcntl(fd int, cmd int, arg int) (val int, err error) {
- r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
+ r0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg))
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -264,10 +369,15 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
return
}
+func libc_fcntl_trampoline()
+
+//go:linkname libc_fcntl libc_fcntl
+//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
+ r0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -275,6 +385,11 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
return
}
+func libc_poll_trampoline()
+
+//go:linkname libc_poll libc_poll
+//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Madvise(b []byte, behav int) (err error) {
@@ -284,13 +399,18 @@ func Madvise(b []byte, behav int) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
+ _, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_madvise_trampoline()
+
+//go:linkname libc_madvise libc_madvise
+//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mlock(b []byte) (err error) {
@@ -300,23 +420,33 @@ func Mlock(b []byte) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mlock_trampoline()
+
+//go:linkname libc_mlock libc_mlock
+//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mlockall(flags int) (err error) {
- _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mlockall_trampoline()
+
+//go:linkname libc_mlockall libc_mlockall
+//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mprotect(b []byte, prot int) (err error) {
@@ -326,13 +456,18 @@ func Mprotect(b []byte, prot int) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
+ _, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mprotect_trampoline()
+
+//go:linkname libc_mprotect libc_mprotect
+//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Msync(b []byte, flags int) (err error) {
@@ -342,13 +477,18 @@ func Msync(b []byte, flags int) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
+ _, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_msync_trampoline()
+
+//go:linkname libc_msync libc_msync
+//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Munlock(b []byte) (err error) {
@@ -358,37 +498,67 @@ func Munlock(b []byte) (err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_munlock_trampoline()
+
+//go:linkname libc_munlock libc_munlock
+//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Munlockall() (err error) {
- _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_munlockall_trampoline()
+
+//go:linkname libc_munlockall libc_munlockall
+//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
- _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_ptrace_trampoline()
+
+//go:linkname libc_ptrace libc_ptrace
+//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := syscall_syscall6(funcPC(libc_getattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_getattrlist_trampoline()
+
+//go:linkname libc_getattrlist libc_getattrlist
+//go:cgo_import_dynamic libc_getattrlist getattrlist "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func pipe() (r int, w int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)
r = int(r0)
w = int(r1)
if e1 != 0 {
@@ -397,6 +567,11 @@ func pipe() (r int, w int, err error) {
return
}
+func libc_pipe_trampoline()
+
+//go:linkname libc_pipe libc_pipe
+//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
@@ -410,7 +585,7 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o
if err != nil {
return
}
- r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -418,6 +593,32 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o
return
}
+func libc_getxattr_trampoline()
+
+//go:linkname libc_getxattr libc_getxattr
+//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fgetxattr_trampoline()
+
+//go:linkname libc_fgetxattr libc_fgetxattr
+//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {
@@ -431,13 +632,38 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ _, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_setxattr_trampoline()
+
+//go:linkname libc_setxattr libc_setxattr
+//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fsetxattr_trampoline()
+
+//go:linkname libc_fsetxattr libc_fsetxattr
+//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func removexattr(path string, attr string, options int) (err error) {
@@ -451,13 +677,38 @@ func removexattr(path string, attr string, options int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ _, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_removexattr_trampoline()
+
+//go:linkname libc_removexattr libc_removexattr
+//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fremovexattr(fd int, attr string, options int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fremovexattr_trampoline()
+
+//go:linkname libc_fremovexattr libc_fremovexattr
+//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func listxattr(path string, dest *byte, size int, options int) (sz int, err error) {
@@ -466,7 +717,7 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro
if err != nil {
return
}
- r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
sz = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -474,26 +725,87 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro
return
}
+func libc_listxattr_trampoline()
+
+//go:linkname libc_listxattr libc_listxattr
+//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {
+ r0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_flistxattr_trampoline()
+
+//go:linkname libc_flistxattr libc_flistxattr
+//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {
+ _, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_setattrlist_trampoline()
+
+//go:linkname libc_setattrlist libc_setattrlist
+//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func kill(pid int, signum int, posix int) (err error) {
- _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))
+ _, _, e1 := syscall_syscall(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_kill_trampoline()
+
+//go:linkname libc_kill libc_kill
+//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func ioctl(fd int, req uint, arg uintptr) (err error) {
- _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
+ _, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_ioctl_trampoline()
+
+//go:linkname libc_ioctl libc_ioctl
+//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {
+ _, _, e1 := syscall_syscall6(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_sendfile_trampoline()
+
+//go:linkname libc_sendfile libc_sendfile
+//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Access(path string, mode uint32) (err error) {
@@ -502,23 +814,33 @@ func Access(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_access_trampoline()
+
+//go:linkname libc_access libc_access
+//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
- _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_adjtime_trampoline()
+
+//go:linkname libc_adjtime libc_adjtime
+//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chdir(path string) (err error) {
@@ -527,13 +849,18 @@ func Chdir(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chdir_trampoline()
+
+//go:linkname libc_chdir libc_chdir
+//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chflags(path string, flags int) (err error) {
@@ -542,13 +869,18 @@ func Chflags(path string, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chflags_trampoline()
+
+//go:linkname libc_chflags libc_chflags
+//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chmod(path string, mode uint32) (err error) {
@@ -557,13 +889,18 @@ func Chmod(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chmod_trampoline()
+
+//go:linkname libc_chmod libc_chmod
+//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chown(path string, uid int, gid int) (err error) {
@@ -572,13 +909,18 @@ func Chown(path string, uid int, gid int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ _, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chown_trampoline()
+
+//go:linkname libc_chown libc_chown
+//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Chroot(path string) (err error) {
@@ -587,27 +929,37 @@ func Chroot(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_chroot_trampoline()
+
+//go:linkname libc_chroot libc_chroot
+//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Close(fd int) (err error) {
- _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_close_trampoline()
+
+//go:linkname libc_close libc_close
+//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Dup(fd int) (nfd int, err error) {
- r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)
nfd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -615,16 +967,26 @@ func Dup(fd int) (nfd int, err error) {
return
}
+func libc_dup_trampoline()
+
+//go:linkname libc_dup libc_dup
+//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Dup2(from int, to int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_dup2_trampoline()
+
+//go:linkname libc_dup2 libc_dup2
+//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Exchangedata(path1 string, path2 string, options int) (err error) {
@@ -638,20 +1000,30 @@ func Exchangedata(path1 string, path2 string, options int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
+ _, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_exchangedata_trampoline()
+
+//go:linkname libc_exchangedata libc_exchangedata
+//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Exit(code int) {
- Syscall(SYS_EXIT, uintptr(code), 0, 0)
+ syscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0)
return
}
+func libc_exit_trampoline()
+
+//go:linkname libc_exit libc_exit
+//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
@@ -660,43 +1032,63 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_faccessat_trampoline()
+
+//go:linkname libc_faccessat libc_faccessat
+//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchdir(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchdir_trampoline()
+
+//go:linkname libc_fchdir libc_fchdir
+//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchflags(fd int, flags int) (err error) {
- _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchflags_trampoline()
+
+//go:linkname libc_fchflags libc_fchflags
+//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchmod(fd int, mode uint32) (err error) {
- _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchmod_trampoline()
+
+//go:linkname libc_fchmod libc_fchmod
+//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
@@ -705,23 +1097,33 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchmodat_trampoline()
+
+//go:linkname libc_fchmodat libc_fchmodat
+//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchown(fd int, uid int, gid int) (err error) {
- _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
+ _, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fchown_trampoline()
+
+//go:linkname libc_fchown libc_fchown
+//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
@@ -730,142 +1132,135 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_fchownat_trampoline()
-func Flock(fd int, how int) (err error) {
- _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_fchownat libc_fchownat
+//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fpathconf(fd int, name int) (val int, err error) {
- r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
- val = int(r0)
+func Flock(fd int, how int) (err error) {
+ _, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_flock_trampoline()
-func Fstat(fd int, stat *Stat_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_flock libc_flock
+//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+func Fpathconf(fd int, name int) (val int, err error) {
+ r0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0)
+ val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_fpathconf_trampoline()
-func Fstatfs(fd int, stat *Statfs_t) (err error) {
- _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_fpathconf libc_fpathconf
+//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Fsync(fd int) (err error) {
- _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_fsync_trampoline()
+
+//go:linkname libc_fsync libc_fsync
+//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Ftruncate(fd int, length int64) (err error) {
- _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_ftruncate_trampoline()
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
- var _p0 unsafe.Pointer
- if len(buf) > 0 {
- _p0 = unsafe.Pointer(&buf[0])
- } else {
- _p0 = unsafe.Pointer(&_zero)
- }
- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
- n = int(r0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_ftruncate libc_ftruncate
+//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getdtablesize() (size int) {
- r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
+ r0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0)
size = int(r0)
return
}
+func libc_getdtablesize_trampoline()
+
+//go:linkname libc_getdtablesize libc_getdtablesize
+//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getegid() (egid int) {
- r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0)
egid = int(r0)
return
}
+func libc_getegid_trampoline()
+
+//go:linkname libc_getegid libc_getegid
+//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Geteuid() (uid int) {
- r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0)
uid = int(r0)
return
}
+func libc_geteuid_trampoline()
+
+//go:linkname libc_geteuid libc_geteuid
+//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getgid() (gid int) {
- r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0)
gid = int(r0)
return
}
+func libc_getgid_trampoline()
+
+//go:linkname libc_getgid libc_getgid
+//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpgid(pid int) (pgid int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0)
pgid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -873,34 +1268,54 @@ func Getpgid(pid int) (pgid int, err error) {
return
}
+func libc_getpgid_trampoline()
+
+//go:linkname libc_getpgid libc_getpgid
+//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpgrp() (pgrp int) {
- r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0)
pgrp = int(r0)
return
}
+func libc_getpgrp_trampoline()
+
+//go:linkname libc_getpgrp libc_getpgrp
+//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpid() (pid int) {
- r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0)
pid = int(r0)
return
}
+func libc_getpid_trampoline()
+
+//go:linkname libc_getpid libc_getpid
+//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getppid() (ppid int) {
- r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0)
ppid = int(r0)
return
}
+func libc_getppid_trampoline()
+
+//go:linkname libc_getppid libc_getppid
+//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getpriority(which int, who int) (prio int, err error) {
- r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0)
prio = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -908,30 +1323,45 @@ func Getpriority(which int, who int) (prio int, err error) {
return
}
+func libc_getpriority_trampoline()
+
+//go:linkname libc_getpriority libc_getpriority
+//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getrlimit(which int, lim *Rlimit) (err error) {
- _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getrlimit_trampoline()
+
+//go:linkname libc_getrlimit libc_getrlimit
+//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getrusage(who int, rusage *Rusage) (err error) {
- _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_getrusage_trampoline()
+
+//go:linkname libc_getrusage libc_getrusage
+//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getsid(pid int) (sid int, err error) {
- r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0)
sid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -939,26 +1369,41 @@ func Getsid(pid int) (sid int, err error) {
return
}
+func libc_getsid_trampoline()
+
+//go:linkname libc_getsid libc_getsid
+//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Getuid() (uid int) {
- r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0)
uid = int(r0)
return
}
+func libc_getuid_trampoline()
+
+//go:linkname libc_getuid libc_getuid
+//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Issetugid() (tainted bool) {
- r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)
+ r0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0)
tainted = bool(r0 != 0)
return
}
+func libc_issetugid_trampoline()
+
+//go:linkname libc_issetugid libc_issetugid
+//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Kqueue() (fd int, err error) {
- r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0)
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -966,6 +1411,11 @@ func Kqueue() (fd int, err error) {
return
}
+func libc_kqueue_trampoline()
+
+//go:linkname libc_kqueue libc_kqueue
+//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Lchown(path string, uid int, gid int) (err error) {
@@ -974,13 +1424,18 @@ func Lchown(path string, uid int, gid int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ _, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_lchown_trampoline()
+
+//go:linkname libc_lchown libc_lchown
+//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Link(path string, link string) (err error) {
@@ -994,13 +1449,18 @@ func Link(path string, link string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_link_trampoline()
+
+//go:linkname libc_link libc_link
+//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
@@ -1014,37 +1474,32 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_linkat_trampoline()
+
+//go:linkname libc_linkat libc_linkat
+//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Listen(s int, backlog int) (err error) {
- _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_listen_trampoline()
-func Lstat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_listen libc_listen
+//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
@@ -1054,13 +1509,18 @@ func Mkdir(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mkdir_trampoline()
+
+//go:linkname libc_mkdir libc_mkdir
+//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
@@ -1069,13 +1529,18 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ _, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mkdirat_trampoline()
+
+//go:linkname libc_mkdirat libc_mkdirat
+//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mkfifo(path string, mode uint32) (err error) {
@@ -1084,13 +1549,18 @@ func Mkfifo(path string, mode uint32) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mkfifo_trampoline()
+
+//go:linkname libc_mkfifo libc_mkfifo
+//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Mknod(path string, mode uint32, dev int) (err error) {
@@ -1099,13 +1569,18 @@ func Mknod(path string, mode uint32, dev int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
+ _, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_mknod_trampoline()
+
+//go:linkname libc_mknod libc_mknod
+//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Open(path string, mode int, perm uint32) (fd int, err error) {
@@ -1114,7 +1589,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
if err != nil {
return
}
- r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
+ r0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1122,6 +1597,11 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
+func libc_open_trampoline()
+
+//go:linkname libc_open libc_open
+//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
@@ -1130,7 +1610,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
if err != nil {
return
}
- r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1138,6 +1618,11 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
return
}
+func libc_openat_trampoline()
+
+//go:linkname libc_openat libc_openat
+//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Pathconf(path string, name int) (val int, err error) {
@@ -1146,7 +1631,7 @@ func Pathconf(path string, name int) (val int, err error) {
if err != nil {
return
}
- r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
+ r0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
val = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1154,6 +1639,11 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
+func libc_pathconf_trampoline()
+
+//go:linkname libc_pathconf libc_pathconf
+//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Pread(fd int, p []byte, offset int64) (n int, err error) {
@@ -1163,7 +1653,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1171,6 +1661,11 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
return
}
+func libc_pread_trampoline()
+
+//go:linkname libc_pread libc_pread
+//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
@@ -1180,7 +1675,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1188,6 +1683,11 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
return
}
+func libc_pwrite_trampoline()
+
+//go:linkname libc_pwrite libc_pwrite
+//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func read(fd int, p []byte) (n int, err error) {
@@ -1197,7 +1697,7 @@ func read(fd int, p []byte) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1205,6 +1705,11 @@ func read(fd int, p []byte) (n int, err error) {
return
}
+func libc_read_trampoline()
+
+//go:linkname libc_read libc_read
+//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Readlink(path string, buf []byte) (n int, err error) {
@@ -1219,7 +1724,7 @@ func Readlink(path string, buf []byte) (n int, err error) {
} else {
_p1 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1227,6 +1732,11 @@ func Readlink(path string, buf []byte) (n int, err error) {
return
}
+func libc_readlink_trampoline()
+
+//go:linkname libc_readlink libc_readlink
+//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
@@ -1241,7 +1751,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
} else {
_p1 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ r0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1249,6 +1759,11 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
return
}
+func libc_readlinkat_trampoline()
+
+//go:linkname libc_readlinkat libc_readlinkat
+//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Rename(from string, to string) (err error) {
@@ -1262,13 +1777,18 @@ func Rename(from string, to string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_rename_trampoline()
+
+//go:linkname libc_rename libc_rename
+//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Renameat(fromfd int, from string, tofd int, to string) (err error) {
@@ -1282,13 +1802,18 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_renameat_trampoline()
+
+//go:linkname libc_renameat libc_renameat
+//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Revoke(path string) (err error) {
@@ -1297,13 +1822,18 @@ func Revoke(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_revoke_trampoline()
+
+//go:linkname libc_revoke libc_revoke
+//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Rmdir(path string) (err error) {
@@ -1312,17 +1842,22 @@ func Rmdir(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_rmdir_trampoline()
+
+//go:linkname libc_rmdir libc_rmdir
+//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
- r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
+ r0, _, e1 := syscall_syscall(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(whence))
newoffset = int64(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1330,46 +1865,71 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
return
}
+func libc_lseek_trampoline()
+
+//go:linkname libc_lseek libc_lseek
+//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
- _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
+ _, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_select_trampoline()
+
+//go:linkname libc_select libc_select
+//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setegid(egid int) (err error) {
- _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setegid_trampoline()
+
+//go:linkname libc_setegid libc_setegid
+//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Seteuid(euid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_seteuid_trampoline()
+
+//go:linkname libc_seteuid libc_seteuid
+//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setgid(gid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setgid_trampoline()
+
+//go:linkname libc_setgid libc_setgid
+//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setlogin(name string) (err error) {
@@ -1378,77 +1938,112 @@ func Setlogin(name string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setlogin_trampoline()
+
+//go:linkname libc_setlogin libc_setlogin
+//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setpgid(pid int, pgid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setpgid_trampoline()
+
+//go:linkname libc_setpgid libc_setpgid
+//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setpriority(which int, who int, prio int) (err error) {
- _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
+ _, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setpriority_trampoline()
+
+//go:linkname libc_setpriority libc_setpriority
+//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setprivexec(flag int) (err error) {
- _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setprivexec_trampoline()
+
+//go:linkname libc_setprivexec libc_setprivexec
+//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setregid(rgid int, egid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setregid_trampoline()
+
+//go:linkname libc_setregid libc_setregid
+//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setreuid(ruid int, euid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setreuid_trampoline()
+
+//go:linkname libc_setreuid libc_setreuid
+//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setrlimit(which int, lim *Rlimit) (err error) {
- _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_setrlimit_trampoline()
+
+//go:linkname libc_setrlimit libc_setrlimit
+//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Setsid() (pid int, err error) {
- r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
+ r0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0)
pid = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1456,55 +2051,40 @@ func Setsid() (pid int, err error) {
return
}
+func libc_setsid_trampoline()
+
+//go:linkname libc_setsid libc_setsid
+//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Settimeofday(tp *Timeval) (err error) {
- _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_settimeofday_trampoline()
-func Setuid(uid int) (err error) {
- _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_settimeofday libc_settimeofday
+//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Stat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+func Setuid(uid int) (err error) {
+ _, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func libc_setuid_trampoline()
-func Statfs(path string, stat *Statfs_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
+//go:linkname libc_setuid libc_setuid
+//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib"
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
@@ -1519,13 +2099,18 @@ func Symlink(path string, link string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_symlink_trampoline()
+
+//go:linkname libc_symlink libc_symlink
+//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
@@ -1539,23 +2124,33 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ _, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_symlinkat_trampoline()
+
+//go:linkname libc_symlinkat libc_symlinkat
+//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Sync() (err error) {
- _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_sync_trampoline()
+
+//go:linkname libc_sync libc_sync
+//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Truncate(path string, length int64) (err error) {
@@ -1564,21 +2159,31 @@ func Truncate(path string, length int64) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_truncate_trampoline()
+
+//go:linkname libc_truncate libc_truncate
+//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Umask(newmask int) (oldmask int) {
- r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
+ r0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0)
oldmask = int(r0)
return
}
+func libc_umask_trampoline()
+
+//go:linkname libc_umask libc_umask
+//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Undelete(path string) (err error) {
@@ -1587,13 +2192,18 @@ func Undelete(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_undelete_trampoline()
+
+//go:linkname libc_undelete libc_undelete
+//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Unlink(path string) (err error) {
@@ -1602,13 +2212,18 @@ func Unlink(path string) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_unlink_trampoline()
+
+//go:linkname libc_unlink libc_unlink
+//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Unlinkat(dirfd int, path string, flags int) (err error) {
@@ -1617,13 +2232,18 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ _, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_unlinkat_trampoline()
+
+//go:linkname libc_unlinkat libc_unlinkat
+//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func Unmount(path string, flags int) (err error) {
@@ -1632,13 +2252,18 @@ func Unmount(path string, flags int) (err error) {
if err != nil {
return
}
- _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_unmount_trampoline()
+
+//go:linkname libc_unmount libc_unmount
+//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func write(fd int, p []byte) (n int, err error) {
@@ -1648,7 +2273,7 @@ func write(fd int, p []byte) (n int, err error) {
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1656,10 +2281,15 @@ func write(fd int, p []byte) (n int, err error) {
return
}
+func libc_write_trampoline()
+
+//go:linkname libc_write libc_write
+//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
- r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
+ r0, _, e1 := syscall_syscall6(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
ret = uintptr(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1667,20 +2297,30 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (
return
}
+func libc_mmap_trampoline()
+
+//go:linkname libc_mmap libc_mmap
+//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func munmap(addr uintptr, length uintptr) (err error) {
- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
+ _, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)
if e1 != 0 {
err = errnoErr(e1)
}
return
}
+func libc_munmap_trampoline()
+
+//go:linkname libc_munmap libc_munmap
+//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib"
+
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1691,7 +2331,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
- r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1702,7 +2342,7 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
- r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ r0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)
sec = int64(r0)
usec = int32(r1)
if e1 != 0 {
@@ -1710,3 +2350,134 @@ func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {
}
return
}
+
+func libc_gettimeofday_trampoline()
+
+//go:linkname libc_gettimeofday libc_gettimeofday
+//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstat(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := syscall_syscall(funcPC(libc_fstat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fstat_trampoline()
+
+//go:linkname libc_fstat libc_fstat
+//go:cgo_import_dynamic libc_fstat fstat "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall6(funcPC(libc_fstatat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fstatat_trampoline()
+
+//go:linkname libc_fstatat libc_fstatat
+//go:cgo_import_dynamic libc_fstatat fstatat "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatfs(fd int, stat *Statfs_t) (err error) {
+ _, _, e1 := syscall_syscall(funcPC(libc_fstatfs_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_fstatfs_trampoline()
+
+//go:linkname libc_fstatfs libc_fstatfs
+//go:cgo_import_dynamic libc_fstatfs fstatfs "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {
+ r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat_trampoline), uintptr(buf), uintptr(size), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_getfsstat_trampoline()
+
+//go:linkname libc_getfsstat libc_getfsstat
+//go:cgo_import_dynamic libc_getfsstat getfsstat "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lstat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_lstat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_lstat_trampoline()
+
+//go:linkname libc_lstat libc_lstat
+//go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Stat(path string, stat *Stat_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_stat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_stat_trampoline()
+
+//go:linkname libc_stat libc_stat
+//go:cgo_import_dynamic libc_stat stat "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statfs(path string, stat *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := syscall_syscall(funcPC(libc_statfs_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+func libc_statfs_trampoline()
+
+//go:linkname libc_statfs libc_statfs
+//go:cgo_import_dynamic libc_statfs statfs "/usr/lib/libSystem.B.dylib"
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
new file mode 100644
index 000000000..61dc0d4c1
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
@@ -0,0 +1,282 @@
+// go run mkasm_darwin.go arm64
+// Code generated by the command above; DO NOT EDIT.
+
+// +build go1.12
+
+#include "textflag.h"
+TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getgroups(SB)
+TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setgroups(SB)
+TEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_wait4(SB)
+TEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_accept(SB)
+TEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_bind(SB)
+TEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_connect(SB)
+TEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_socket(SB)
+TEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getsockopt(SB)
+TEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setsockopt(SB)
+TEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpeername(SB)
+TEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getsockname(SB)
+TEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_shutdown(SB)
+TEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_socketpair(SB)
+TEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_recvfrom(SB)
+TEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sendto(SB)
+TEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_recvmsg(SB)
+TEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sendmsg(SB)
+TEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_kevent(SB)
+TEXT ·libc___sysctl_trampoline(SB),NOSPLIT,$0-0
+ JMP libc___sysctl(SB)
+TEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_utimes(SB)
+TEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_futimes(SB)
+TEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fcntl(SB)
+TEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_poll(SB)
+TEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_madvise(SB)
+TEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mlock(SB)
+TEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mlockall(SB)
+TEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mprotect(SB)
+TEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_msync(SB)
+TEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_munlock(SB)
+TEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_munlockall(SB)
+TEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_ptrace(SB)
+TEXT ·libc_getattrlist_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getattrlist(SB)
+TEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pipe(SB)
+TEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getxattr(SB)
+TEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fgetxattr(SB)
+TEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setxattr(SB)
+TEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fsetxattr(SB)
+TEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_removexattr(SB)
+TEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fremovexattr(SB)
+TEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_listxattr(SB)
+TEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_flistxattr(SB)
+TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setattrlist(SB)
+TEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_kill(SB)
+TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_ioctl(SB)
+TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sendfile(SB)
+TEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_access(SB)
+TEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_adjtime(SB)
+TEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chdir(SB)
+TEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chflags(SB)
+TEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chmod(SB)
+TEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chown(SB)
+TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_chroot(SB)
+TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_close(SB)
+TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_dup(SB)
+TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_dup2(SB)
+TEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_exchangedata(SB)
+TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_exit(SB)
+TEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_faccessat(SB)
+TEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchdir(SB)
+TEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchflags(SB)
+TEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchmod(SB)
+TEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchmodat(SB)
+TEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchown(SB)
+TEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fchownat(SB)
+TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_flock(SB)
+TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fpathconf(SB)
+TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fsync(SB)
+TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_ftruncate(SB)
+TEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getdtablesize(SB)
+TEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getegid(SB)
+TEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_geteuid(SB)
+TEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getgid(SB)
+TEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpgid(SB)
+TEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpgrp(SB)
+TEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpid(SB)
+TEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getppid(SB)
+TEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getpriority(SB)
+TEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getrlimit(SB)
+TEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getrusage(SB)
+TEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getsid(SB)
+TEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getuid(SB)
+TEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_issetugid(SB)
+TEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_kqueue(SB)
+TEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_lchown(SB)
+TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_link(SB)
+TEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_linkat(SB)
+TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_listen(SB)
+TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mkdir(SB)
+TEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mkdirat(SB)
+TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mkfifo(SB)
+TEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mknod(SB)
+TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_open(SB)
+TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_openat(SB)
+TEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pathconf(SB)
+TEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pread(SB)
+TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_pwrite(SB)
+TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_read(SB)
+TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_readlink(SB)
+TEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_readlinkat(SB)
+TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_rename(SB)
+TEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_renameat(SB)
+TEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_revoke(SB)
+TEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_rmdir(SB)
+TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_lseek(SB)
+TEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_select(SB)
+TEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setegid(SB)
+TEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_seteuid(SB)
+TEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setgid(SB)
+TEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setlogin(SB)
+TEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setpgid(SB)
+TEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setpriority(SB)
+TEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setprivexec(SB)
+TEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setregid(SB)
+TEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setreuid(SB)
+TEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setrlimit(SB)
+TEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setsid(SB)
+TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_settimeofday(SB)
+TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_setuid(SB)
+TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_symlink(SB)
+TEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_symlinkat(SB)
+TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_sync(SB)
+TEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_truncate(SB)
+TEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_umask(SB)
+TEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_undelete(SB)
+TEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_unlink(SB)
+TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_unlinkat(SB)
+TEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_unmount(SB)
+TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_write(SB)
+TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_mmap(SB)
+TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_munmap(SB)
+TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_gettimeofday(SB)
+TEXT ·libc_fstat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fstat(SB)
+TEXT ·libc_fstatat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fstatat(SB)
+TEXT ·libc_fstatfs_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_fstatfs(SB)
+TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_getfsstat(SB)
+TEXT ·libc_lstat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_lstat(SB)
+TEXT ·libc_stat_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_stat(SB)
+TEXT ·libc_statfs_trampoline(SB),NOSPLIT,$0-0
+ JMP libc_statfs(SB)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
index 91f36e9ec..da9986dd2 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go
+// go run mksyscall.go -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build dragonfly,amd64
@@ -588,6 +588,21 @@ func Exit(code int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fchdir(fd int) (err error) {
_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -643,6 +658,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -927,6 +957,26 @@ func Link(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Listen(s int, backlog int) (err error) {
_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
if e1 != 0 {
@@ -967,6 +1017,21 @@ func Mkdir(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkfifo(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -997,6 +1062,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mknodat(fd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
if e1 != 0 {
@@ -1023,6 +1103,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Pathconf(path string, name int) (val int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1345,6 +1441,26 @@ func Symlink(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Sync() (err error) {
_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
if e1 != 0 {
@@ -1408,6 +1524,21 @@ func Unlink(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Unmount(path string, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
index a86434a7b..80903e47b 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go
+// go run mksyscall.go -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build freebsd,386
@@ -377,10 +377,8 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe() (r int, w int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
- r = int(r0)
- w = int(r1)
+func pipe2(p *[2]_C_int, flags int) (err error) {
+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -914,7 +912,7 @@ func Fpathconf(fd int, name int) (val int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstat(fd int, stat *Stat_t) (err error) {
+func fstat(fd int, stat *stat_freebsd11_t) (err error) {
_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
if e1 != 0 {
err = errnoErr(e1)
@@ -924,7 +922,17 @@ func Fstat(fd int, stat *Stat_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+func fstat_freebsd12(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -939,7 +947,22 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstatfs(fd int, stat *Statfs_t) (err error) {
+func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) {
_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
if e1 != 0 {
err = errnoErr(e1)
@@ -949,6 +972,16 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -969,14 +1002,14 @@ func Ftruncate(fd int, length int64) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Getdents(fd int, buf []byte) (n int, err error) {
+func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
var _p0 unsafe.Pointer
if len(buf) > 0 {
_p0 = unsafe.Pointer(&buf[0])
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -986,14 +1019,14 @@ func Getdents(fd int, buf []byte) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+func getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) {
var _p0 unsafe.Pointer
if len(buf) > 0 {
_p0 = unsafe.Pointer(&buf[0])
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1224,7 +1257,7 @@ func Listen(s int, backlog int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Lstat(path string, stat *Stat_t) (err error) {
+func lstat(path string, stat *stat_freebsd11_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -1284,7 +1317,7 @@ func Mkfifo(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Mknod(path string, mode uint32, dev int) (err error) {
+func mknod(path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -1299,6 +1332,36 @@ func Mknod(path string, mode uint32, dev int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func mknodat(fd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
if e1 != 0 {
@@ -1689,7 +1752,7 @@ func Setuid(uid int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Stat(path string, stat *Stat_t) (err error) {
+func stat(path string, stat *stat_freebsd11_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -1704,7 +1767,7 @@ func Stat(path string, stat *Stat_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Statfs(path string, stat *Statfs_t) (err error) {
+func statfs(path string, stat *statfs_freebsd11_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -1719,6 +1782,21 @@ func Statfs(path string, stat *Statfs_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func statfs_freebsd12(path string, stat *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Symlink(path string, link string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
index 040e2f760..cd250ff0e 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go
+// go run mksyscall.go -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build freebsd,amd64
@@ -377,10 +377,8 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe() (r int, w int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
- r = int(r0)
- w = int(r1)
+func pipe2(p *[2]_C_int, flags int) (err error) {
+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -914,7 +912,7 @@ func Fpathconf(fd int, name int) (val int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstat(fd int, stat *Stat_t) (err error) {
+func fstat(fd int, stat *stat_freebsd11_t) (err error) {
_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
if e1 != 0 {
err = errnoErr(e1)
@@ -924,7 +922,17 @@ func Fstat(fd int, stat *Stat_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+func fstat_freebsd12(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -939,7 +947,22 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstatfs(fd int, stat *Statfs_t) (err error) {
+func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) {
_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
if e1 != 0 {
err = errnoErr(e1)
@@ -949,6 +972,16 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -969,14 +1002,14 @@ func Ftruncate(fd int, length int64) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Getdents(fd int, buf []byte) (n int, err error) {
+func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
var _p0 unsafe.Pointer
if len(buf) > 0 {
_p0 = unsafe.Pointer(&buf[0])
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -986,14 +1019,14 @@ func Getdents(fd int, buf []byte) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+func getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) {
var _p0 unsafe.Pointer
if len(buf) > 0 {
_p0 = unsafe.Pointer(&buf[0])
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1224,7 +1257,7 @@ func Listen(s int, backlog int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Lstat(path string, stat *Stat_t) (err error) {
+func lstat(path string, stat *stat_freebsd11_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -1284,7 +1317,7 @@ func Mkfifo(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Mknod(path string, mode uint32, dev int) (err error) {
+func mknod(path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -1299,6 +1332,36 @@ func Mknod(path string, mode uint32, dev int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func mknodat(fd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
if e1 != 0 {
@@ -1689,7 +1752,7 @@ func Setuid(uid int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Stat(path string, stat *Stat_t) (err error) {
+func stat(path string, stat *stat_freebsd11_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -1704,7 +1767,7 @@ func Stat(path string, stat *Stat_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Statfs(path string, stat *Statfs_t) (err error) {
+func statfs(path string, stat *statfs_freebsd11_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -1719,6 +1782,21 @@ func Statfs(path string, stat *Statfs_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func statfs_freebsd12(path string, stat *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Symlink(path string, link string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
index cddc5e86b..290a9c2cb 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go
+// go run mksyscall.go -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build freebsd,arm
@@ -377,10 +377,8 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func pipe() (r int, w int, err error) {
- r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
- r = int(r0)
- w = int(r1)
+func pipe2(p *[2]_C_int, flags int) (err error) {
+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -914,7 +912,7 @@ func Fpathconf(fd int, name int) (val int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstat(fd int, stat *Stat_t) (err error) {
+func fstat(fd int, stat *stat_freebsd11_t) (err error) {
_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
if e1 != 0 {
err = errnoErr(e1)
@@ -924,7 +922,17 @@ func Fstat(fd int, stat *Stat_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+func fstat_freebsd12(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -939,7 +947,22 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstatfs(fd int, stat *Statfs_t) (err error) {
+func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) {
_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
if e1 != 0 {
err = errnoErr(e1)
@@ -949,6 +972,16 @@ func Fstatfs(fd int, stat *Statfs_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -969,14 +1002,14 @@ func Ftruncate(fd int, length int64) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Getdents(fd int, buf []byte) (n int, err error) {
+func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
var _p0 unsafe.Pointer
if len(buf) > 0 {
_p0 = unsafe.Pointer(&buf[0])
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -986,14 +1019,14 @@ func Getdents(fd int, buf []byte) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+func getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) {
var _p0 unsafe.Pointer
if len(buf) > 0 {
_p0 = unsafe.Pointer(&buf[0])
} else {
_p0 = unsafe.Pointer(&_zero)
}
- r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
n = int(r0)
if e1 != 0 {
err = errnoErr(e1)
@@ -1224,7 +1257,7 @@ func Listen(s int, backlog int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Lstat(path string, stat *Stat_t) (err error) {
+func lstat(path string, stat *stat_freebsd11_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -1284,7 +1317,7 @@ func Mkfifo(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Mknod(path string, mode uint32, dev int) (err error) {
+func mknod(path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -1299,6 +1332,36 @@ func Mknod(path string, mode uint32, dev int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func mknodat(fd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
if e1 != 0 {
@@ -1689,7 +1752,7 @@ func Setuid(uid int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Stat(path string, stat *Stat_t) (err error) {
+func stat(path string, stat *stat_freebsd11_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -1704,7 +1767,7 @@ func Stat(path string, stat *Stat_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Statfs(path string, stat *Statfs_t) (err error) {
+func statfs(path string, stat *statfs_freebsd11_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
if err != nil {
@@ -1719,6 +1782,21 @@ func Statfs(path string, stat *Statfs_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func statfs_freebsd12(path string, stat *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Symlink(path string, link string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go
new file mode 100644
index 000000000..c6df9d2e8
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go
@@ -0,0 +1,2015 @@
+// go run mksyscall.go -tags freebsd,arm64 -- syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm64.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build freebsd,arm64
+
+package unix
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var _ syscall.Errno
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setgroups(ngid int, gid *_Gid_t) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
+ r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
+ wpid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socket(domain int, typ int, proto int) (fd int, err error) {
+ r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
+ _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Shutdown(s int, how int) (err error) {
+ _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
+ _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
+ r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
+ var _p0 unsafe.Pointer
+ if len(mib) > 0 {
+ _p0 = unsafe.Pointer(&mib[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func utimes(path string, timeval *[2]Timeval) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func futimes(fd int, timeval *[2]Timeval) (err error) {
+ _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fcntl(fd int, cmd int, arg int) (val int, err error) {
+ r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Madvise(b []byte, behav int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlock(b []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlockall(flags int) (err error) {
+ _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mprotect(b []byte, prot int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Msync(b []byte, flags int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlock(b []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlockall() (err error) {
+ _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func pipe2(p *[2]_C_int, flags int) (err error) {
+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getcwd(buf []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ioctl(fd int, req uint, arg uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Access(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
+ _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func CapEnter() (err error) {
+ _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func capRightsGet(version int, fd int, rightsp *CapRights) (err error) {
+ _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func capRightsLimit(fd int, rightsp *CapRights) (err error) {
+ _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chdir(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chflags(path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chmod(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chown(path string, uid int, gid int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chroot(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Close(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup(fd int) (nfd int, err error) {
+ r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
+ nfd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup2(from int, to int) (err error) {
+ _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Exit(code int) {
+ Syscall(SYS_EXIT, uintptr(code), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
+ _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchdir(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchflags(fd int, flags int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmod(fd int, mode uint32) (err error) {
+ _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchown(fd int, uid int, gid int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flock(fd int, how int) (err error) {
+ _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fpathconf(fd int, name int) (val int, err error) {
+ r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fstat(fd int, stat *stat_freebsd11_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fstat_freebsd12(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsync(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Ftruncate(fd int, length int64) (err error) {
+ _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getdtablesize() (size int) {
+ r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)
+ size = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getegid() (egid int) {
+ r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
+ egid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Geteuid() (uid int) {
+ r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getgid() (gid int) {
+ r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
+ gid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgid(pid int) (pgid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
+ pgid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgrp() (pgrp int) {
+ r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
+ pgrp = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpid() (pid int) {
+ r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
+ pid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getppid() (ppid int) {
+ r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
+ ppid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpriority(which int, who int) (prio int, err error) {
+ r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
+ prio = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrlimit(which int, lim *Rlimit) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrusage(who int, rusage *Rusage) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getsid(pid int) (sid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
+ sid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Gettimeofday(tv *Timeval) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getuid() (uid int) {
+ r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Issetugid() (tainted bool) {
+ r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
+ tainted = bool(r0 != 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Kill(pid int, signum syscall.Signal) (err error) {
+ _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Kqueue() (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lchown(path string, uid int, gid int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Link(path string, link string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Listen(s int, backlog int) (err error) {
+ _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func lstat(path string, stat *stat_freebsd11_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdir(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkfifo(path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mknod(path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mknodat(fd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Open(path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pathconf(path string, name int) (val int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pread(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func read(fd int, p []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlink(path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Rename(from string, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Revoke(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Rmdir(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
+ r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
+ newoffset = int64(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
+ _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setegid(egid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seteuid(euid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setgid(gid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setlogin(name string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpgid(pid int, pgid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpriority(which int, who int, prio int) (err error) {
+ _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setregid(rgid int, egid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setreuid(ruid int, euid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setresgid(rgid int, egid int, sgid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setresuid(ruid int, euid int, suid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setrlimit(which int, lim *Rlimit) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setsid() (pid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
+ pid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Settimeofday(tp *Timeval) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setuid(uid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func stat(path string, stat *stat_freebsd11_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func statfs(path string, stat *statfs_freebsd11_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func statfs_freebsd12(path string, stat *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Symlink(path string, link string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Sync() (err error) {
+ _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Truncate(path string, length int64) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Umask(newmask int) (oldmask int) {
+ r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
+ oldmask = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Undelete(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlink(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unmount(path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func write(fd int, p []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
+ r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
+ ret = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func munmap(addr uintptr, length uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {
+ r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
+ nfd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
index 237e96095..5356a5175 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go
+// go run mksyscall.go -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build linux,386
@@ -417,6 +417,16 @@ func Chroot(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockGettime(clockid int32, time *Timespec) (err error) {
_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
if e1 != 0 {
@@ -448,6 +458,21 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(oldfd int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
fd = int(r0)
@@ -574,6 +599,60 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +663,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -722,6 +837,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(pathname)
@@ -904,6 +1040,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1063,6 +1215,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
index 9b40f580b..0f6d265d8 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go
+// go run mksyscall.go -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build linux,amd64
@@ -417,6 +417,16 @@ func Chroot(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockGettime(clockid int32, time *Timespec) (err error) {
_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
if e1 != 0 {
@@ -448,6 +458,21 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(oldfd int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
fd = int(r0)
@@ -574,6 +599,60 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +663,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -722,6 +837,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(pathname)
@@ -904,6 +1040,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1063,6 +1215,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -1634,7 +1806,7 @@ func Getuid() (uid int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func InotifyInit() (fd int, err error) {
+func inotifyInit() (fd int, err error) {
r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)
fd = int(r0)
if e1 != 0 {
@@ -1690,21 +1862,6 @@ func Listen(s int, n int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Lstat(path string, stat *Stat_t) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Pause() (err error) {
_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)
if e1 != 0 {
@@ -2175,3 +2332,18 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
}
return
}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(cmdline)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
index d93cc2f3b..012261ad5 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go
+// go run mksyscall.go -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build linux,arm
@@ -417,6 +417,16 @@ func Chroot(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockGettime(clockid int32, time *Timespec) (err error) {
_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
if e1 != 0 {
@@ -448,6 +458,21 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(oldfd int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
fd = int(r0)
@@ -574,6 +599,60 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +663,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -722,6 +837,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(pathname)
@@ -904,6 +1040,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1063,6 +1215,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -2110,3 +2282,13 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
}
return
}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func armSyncFileRange(fd int, flags int, off int64, n int64) (err error) {
+ _, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
index 5f7d0213b..b890cb03c 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go
+// go run mksyscall.go -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build linux,arm64
@@ -417,6 +417,16 @@ func Chroot(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockGettime(clockid int32, time *Timespec) (err error) {
_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
if e1 != 0 {
@@ -448,6 +458,21 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(oldfd int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
fd = int(r0)
@@ -574,6 +599,60 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +663,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -722,6 +837,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(pathname)
@@ -904,6 +1040,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1063,6 +1215,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
index e76170528..cc17b43d3 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go
+// go run mksyscall.go -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build linux,mips
@@ -417,6 +417,16 @@ func Chroot(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockGettime(clockid int32, time *Timespec) (err error) {
_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
if e1 != 0 {
@@ -448,6 +458,21 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(oldfd int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
fd = int(r0)
@@ -574,6 +599,60 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +663,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -722,6 +837,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(pathname)
@@ -904,6 +1040,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1063,6 +1215,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -2137,6 +2309,18 @@ func pipe2(p *[2]_C_int, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func pipe() (p1 int, p2 int, err error) {
+ r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
+ p1 = int(r0)
+ p2 = int(r1)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {
r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))
xaddr = uintptr(r0)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
index 382e072f5..25026415d 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go
+// go run mksyscall.go -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build linux,mips64
@@ -417,6 +417,16 @@ func Chroot(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockGettime(clockid int32, time *Timespec) (err error) {
_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
if e1 != 0 {
@@ -448,6 +458,21 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(oldfd int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
fd = int(r0)
@@ -574,6 +599,60 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +663,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -722,6 +837,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(pathname)
@@ -904,6 +1040,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1063,6 +1215,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -1547,21 +1719,6 @@ func Fchown(fd int, uid int, gid int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fstatfs(fd int, buf *Statfs_t) (err error) {
_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
if e1 != 0 {
@@ -2121,6 +2278,21 @@ func fstat(fd int, st *stat_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fstatat(dirfd int, path string, st *stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func lstat(path string, st *stat_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
index da33eb12b..83d8bb8af 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go
+// go run mksyscall.go -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build linux,mips64le
@@ -417,6 +417,16 @@ func Chroot(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockGettime(clockid int32, time *Timespec) (err error) {
_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
if e1 != 0 {
@@ -448,6 +458,21 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(oldfd int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
fd = int(r0)
@@ -574,6 +599,60 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +663,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -722,6 +837,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(pathname)
@@ -904,6 +1040,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1063,6 +1215,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -1547,21 +1719,6 @@ func Fchown(fd int, uid int, gid int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fstatfs(fd int, buf *Statfs_t) (err error) {
_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
if e1 != 0 {
@@ -2121,6 +2278,21 @@ func fstat(fd int, st *stat_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func fstatat(dirfd int, path string, st *stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func lstat(path string, st *stat_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
index f6e45189a..b16b3e102 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go
+// go run mksyscall.go -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build linux,mipsle
@@ -417,6 +417,16 @@ func Chroot(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockGettime(clockid int32, time *Timespec) (err error) {
_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
if e1 != 0 {
@@ -448,6 +458,21 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(oldfd int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
fd = int(r0)
@@ -574,6 +599,60 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +663,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -722,6 +837,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(pathname)
@@ -904,6 +1040,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1063,6 +1215,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -2137,6 +2309,18 @@ func pipe2(p *[2]_C_int, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func pipe() (p1 int, p2 int, err error) {
+ r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)
+ p1 = int(r0)
+ p2 = int(r1)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {
r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))
xaddr = uintptr(r0)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
index 0ae2aa842..27b6a6bf0 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go
+// go run mksyscall.go -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build linux,ppc64
@@ -417,6 +417,16 @@ func Chroot(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockGettime(clockid int32, time *Timespec) (err error) {
_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
if e1 != 0 {
@@ -448,6 +458,21 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(oldfd int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
fd = int(r0)
@@ -574,6 +599,60 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +663,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -722,6 +837,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(pathname)
@@ -904,6 +1040,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1063,6 +1215,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -1474,8 +1646,13 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
+func faccessat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1484,9 +1661,8 @@ func Dup2(oldfd int, newfd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
+func Dup2(oldfd int, newfd int) (err error) {
+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1495,13 +1671,9 @@ func EpollCreate(size int) (fd int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func faccessat(dirfd int, path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+func EpollCreate(size int) (fd int, err error) {
+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
+ fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1903,16 +2075,6 @@ func Statfs(path string, buf *Statfs_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
- _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Truncate(path string, length int64) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -2222,3 +2384,28 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
}
return
}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func syncFileRange2(fd int, flags int, off int64, n int64) (err error) {
+ _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(cmdline)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
index fa16c165e..f7ecc9afd 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go
+// go run mksyscall.go -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build linux,ppc64le
@@ -417,6 +417,16 @@ func Chroot(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockGettime(clockid int32, time *Timespec) (err error) {
_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
if e1 != 0 {
@@ -448,6 +458,21 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(oldfd int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
fd = int(r0)
@@ -574,6 +599,60 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +663,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -722,6 +837,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(pathname)
@@ -904,6 +1040,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1063,6 +1215,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -1474,8 +1646,13 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Dup2(oldfd int, newfd int) (err error) {
- _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
+func faccessat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1484,9 +1661,8 @@ func Dup2(oldfd int, newfd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func EpollCreate(size int) (fd int, err error) {
- r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
- fd = int(r0)
+func Dup2(oldfd int, newfd int) (err error) {
+ _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1495,13 +1671,9 @@ func EpollCreate(size int) (fd int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func faccessat(dirfd int, path string, mode uint32) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+func EpollCreate(size int) (fd int, err error) {
+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)
+ fd = int(r0)
if e1 != 0 {
err = errnoErr(e1)
}
@@ -1903,16 +2075,6 @@ func Statfs(path string, buf *Statfs_t) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
- _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Truncate(path string, length int64) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -2222,3 +2384,28 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
}
return
}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func syncFileRange2(fd int, flags int, off int64, n int64) (err error) {
+ _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(cmdline)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
new file mode 100644
index 000000000..e3cd4e53f
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
@@ -0,0 +1,2191 @@
+// go run mksyscall.go -tags linux,riscv64 syscall_linux.go syscall_linux_riscv64.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build linux,riscv64
+
+package unix
+
+import (
+ "syscall"
+ "unsafe"
+)
+
+var _ syscall.Errno
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fchmodat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ioctl(fd int, req uint, arg uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
+ r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getcwd(buf []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
+ r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
+ wpid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {
+ r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func keyctlJoin(cmd int, arg2 string) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(arg2)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(arg3)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(arg4)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(payload) > 0 {
+ _p0 = unsafe.Pointer(&payload[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(arg)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(source)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(target)
+ if err != nil {
+ return
+ }
+ var _p2 *byte
+ _p2, err = BytePtrFromString(fstype)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Acct(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(keyType)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(description)
+ if err != nil {
+ return
+ }
+ var _p2 unsafe.Pointer
+ if len(payload) > 0 {
+ _p2 = unsafe.Pointer(&payload[0])
+ } else {
+ _p2 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)
+ id = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Adjtimex(buf *Timex) (state int, err error) {
+ r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)
+ state = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chdir(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Chroot(path string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ClockGettime(clockid int32, time *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Close(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
+ r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup(oldfd int) (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Dup3(oldfd int, newfd int, flags int) (err error) {
+ _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func EpollCreate1(flag int) (fd int, err error) {
+ r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {
+ _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Eventfd(initval uint, flags int) (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Exit(code int) {
+ SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
+ _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchdir(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchmod(fd int, mode uint32) (err error) {
+ _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func fcntl(fd int, cmd int, arg int) (val int, err error) {
+ r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))
+ val = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fdatasync(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flock(fd int, how int) (err error) {
+ _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsync(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getdents(fd int, buf []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpgid(pid int) (pgid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
+ pgid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpid() (pid int) {
+ r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)
+ pid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getppid() (ppid int) {
+ r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)
+ ppid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getpriority(which int, who int) (prio int, err error) {
+ r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
+ prio = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrandom(buf []byte, flags int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrusage(who int, rusage *Rusage) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getsid(pid int) (sid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
+ sid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Gettid() (tid int) {
+ r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)
+ tid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p2 unsafe.Pointer
+ if len(dest) > 0 {
+ _p2 = unsafe.Pointer(&dest[0])
+ } else {
+ _p2 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(pathname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))
+ watchdesc = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func InotifyInit1(flags int) (fd int, err error) {
+ r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {
+ r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)
+ success = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Kill(pid int, sig syscall.Signal) (err error) {
+ _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Klogctl(typ int, buf []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p2 unsafe.Pointer
+ if len(dest) > 0 {
+ _p2 = unsafe.Pointer(&dest[0])
+ } else {
+ _p2 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Listxattr(path string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Llistxattr(path string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lremovexattr(path string, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p2 unsafe.Pointer
+ if len(data) > 0 {
+ _p2 = unsafe.Pointer(&data[0])
+ } else {
+ _p2 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {
+ r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func PivotRoot(newroot string, putold string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(newroot)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(putold)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
+ _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
+ r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func read(fd int, p []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Removexattr(path string, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(keyType)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(description)
+ if err != nil {
+ return
+ }
+ var _p2 *byte
+ _p2, err = BytePtrFromString(callback)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)
+ id = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setdomainname(p []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Sethostname(p []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpgid(pid int, pgid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setsid() (pid int, err error) {
+ r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
+ pid = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Settimeofday(tv *Timeval) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setns(fd int, nstype int) (err error) {
+ _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setpriority(which int, who int, prio int) (err error) {
+ _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setxattr(path string, attr string, data []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p2 unsafe.Pointer
+ if len(data) > 0 {
+ _p2 = unsafe.Pointer(&data[0])
+ } else {
+ _p2 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Sync() {
+ SyscallNoError(SYS_SYNC, 0, 0, 0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Syncfs(fd int) (err error) {
+ _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Sysinfo(info *Sysinfo_t) (err error) {
+ _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {
+ r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)
+ n = int64(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {
+ _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Times(tms *Tms) (ticks uintptr, err error) {
+ r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)
+ ticks = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Umask(mask int) (oldmask int) {
+ r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)
+ oldmask = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Uname(buf *Utsname) (err error) {
+ _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unmount(target string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(target)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Unshare(flags int) (err error) {
+ _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func write(fd int, p []byte) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func exitThread(code int) (err error) {
+ _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func readlen(fd int, p *byte, np int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func writelen(fd int, p *byte, np int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func munmap(addr uintptr, length uintptr) (err error) {
+ _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Madvise(b []byte, advice int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mprotect(b []byte, prot int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlock(b []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Mlockall(flags int) (err error) {
+ _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Msync(b []byte, flags int) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlock(b []byte) (err error) {
+ var _p0 unsafe.Pointer
+ if len(b) > 0 {
+ _p0 = unsafe.Pointer(&b[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Munlockall() (err error) {
+ _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func faccessat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(events) > 0 {
+ _p0 = unsafe.Pointer(&events[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
+ _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fchown(fd int, uid int, gid int) (err error) {
+ _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstat(fd int, stat *Stat_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fstatfs(fd int, buf *Statfs_t) (err error) {
+ _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Ftruncate(fd int, length int64) (err error) {
+ _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getegid() (egid int) {
+ r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)
+ egid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Geteuid() (euid int) {
+ r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)
+ euid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getgid() (gid int) {
+ r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)
+ gid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getrlimit(resource int, rlim *Rlimit) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Getuid() (uid int) {
+ r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)
+ uid = int(r0)
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Listen(s int, n int) (err error) {
+ _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pread(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Seek(fd int, offset int64, whence int) (off int64, err error) {
+ r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))
+ off = int64(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+ r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
+ written = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setfsgid(gid int) (err error) {
+ _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setfsuid(uid int) (err error) {
+ _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setregid(rgid int, egid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setresgid(rgid int, egid int, sgid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setresuid(ruid int, euid int, suid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setrlimit(resource int, rlim *Rlimit) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Setreuid(ruid int, euid int) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Shutdown(fd int, how int) (err error) {
+ _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
+ r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
+ n = int64(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Statfs(path string, buf *Statfs_t) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func SyncFileRange(fd int, off int64, n int64, flags int) (err error) {
+ _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Truncate(path string, length int64) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
+ r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {
+ r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
+ _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getgroups(n int, list *_Gid_t) (nn int, err error) {
+ r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
+ nn = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setgroups(n int, list *_Gid_t) (err error) {
+ _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
+ _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
+ _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socket(domain int, typ int, proto int) (fd int, err error) {
+ r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
+ _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
+ var _p0 unsafe.Pointer
+ if len(p) > 0 {
+ _p0 = unsafe.Pointer(&p[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
+ var _p0 unsafe.Pointer
+ if len(buf) > 0 {
+ _p0 = unsafe.Pointer(&buf[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
+ r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {
+ r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))
+ xaddr = uintptr(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Gettimeofday(tv *Timeval) (err error) {
+ _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func pipe2(p *[2]_C_int, flags int) (err error) {
+ _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
index 38f903cd3..3001d3798 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -tags linux,s390x syscall_linux.go syscall_linux_s390x.go
+// go run mksyscall.go -tags linux,s390x syscall_linux.go syscall_linux_s390x.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build linux,s390x
@@ -417,6 +417,16 @@ func Chroot(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockGettime(clockid int32, time *Timespec) (err error) {
_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
if e1 != 0 {
@@ -448,6 +458,21 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(oldfd int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
fd = int(r0)
@@ -574,6 +599,60 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -584,6 +663,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -722,6 +837,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(pathname)
@@ -904,6 +1040,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1063,6 +1215,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -1992,3 +2164,18 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
}
return
}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(cmdline)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
index b26aee957..aafe3660f 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go
+// go run mksyscall.go -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build linux,sparc64
@@ -417,6 +417,16 @@ func Chroot(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ClockGetres(clockid int32, res *Timespec) (err error) {
+ _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ClockGettime(clockid int32, time *Timespec) (err error) {
_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)
if e1 != 0 {
@@ -448,6 +458,21 @@ func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags in
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func DeleteModule(name string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(oldfd int) (fd int, err error) {
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)
fd = int(r0)
@@ -508,21 +533,6 @@ func Exit(code int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
- var _p0 *byte
- _p0, err = BytePtrFromString(path)
- if err != nil {
- return
- }
- _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
- if e1 != 0 {
- err = errnoErr(e1)
- }
- return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
func Fallocate(fd int, mode uint32, off int64, len int64) (err error) {
_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)
if e1 != 0 {
@@ -589,6 +599,60 @@ func Fdatasync(fd int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func FinitModule(fd int, params string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Flistxattr(fd int, dest []byte) (sz int, err error) {
+ var _p0 unsafe.Pointer
+ if len(dest) > 0 {
+ _p0 = unsafe.Pointer(&dest[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))
+ sz = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -599,6 +663,42 @@ func Flock(fd int, how int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fremovexattr(fd int, attr string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attr)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(dest) > 0 {
+ _p1 = unsafe.Pointer(&dest[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
if e1 != 0 {
@@ -737,6 +837,27 @@ func Getxattr(path string, attr string, dest []byte) (sz int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func InitModule(moduleImage []byte, params string) (err error) {
+ var _p0 unsafe.Pointer
+ if len(moduleImage) > 0 {
+ _p0 = unsafe.Pointer(&moduleImage[0])
+ } else {
+ _p0 = unsafe.Pointer(&_zero)
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(params)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(pathname)
@@ -919,6 +1040,22 @@ func Lsetxattr(path string, attr string, data []byte, flags int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func MemfdCreate(name string, flags int) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(name)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1078,6 +1215,26 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(keyType)
@@ -1489,6 +1646,21 @@ func Munlockall() (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func faccessat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {
var _p0 unsafe.Pointer
if len(events) > 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
index b3298930e..642db7670 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go
+// go run mksyscall.go -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build netbsd,386
@@ -571,6 +571,220 @@ func Exit(code int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -651,6 +865,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -900,6 +1129,26 @@ func Link(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Listen(s int, backlog int) (err error) {
_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
if e1 != 0 {
@@ -940,6 +1189,21 @@ func Mkdir(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkfifo(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -955,6 +1219,21 @@ func Mkfifo(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mknod(path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -970,6 +1249,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
if e1 != 0 {
@@ -996,6 +1290,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Pathconf(path string, name int) (val int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1085,6 +1395,28 @@ func Readlink(path string, buf []byte) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Rename(from string, to string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(from)
@@ -1105,6 +1437,26 @@ func Rename(from string, to string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Revoke(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1302,6 +1654,26 @@ func Symlink(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Sync() (err error) {
_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
if e1 != 0 {
@@ -1350,6 +1722,21 @@ func Unlink(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Unmount(path string, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
index 5096ef07e..59585fee3 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go
+// go run mksyscall.go -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build netbsd,amd64
@@ -571,6 +571,220 @@ func Exit(code int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -651,6 +865,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -900,6 +1129,26 @@ func Link(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Listen(s int, backlog int) (err error) {
_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
if e1 != 0 {
@@ -940,6 +1189,21 @@ func Mkdir(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkfifo(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -955,6 +1219,21 @@ func Mkfifo(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mknod(path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -970,6 +1249,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
if e1 != 0 {
@@ -996,6 +1290,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Pathconf(path string, name int) (val int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1085,6 +1395,28 @@ func Readlink(path string, buf []byte) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Rename(from string, to string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(from)
@@ -1105,6 +1437,26 @@ func Rename(from string, to string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Revoke(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1302,6 +1654,26 @@ func Symlink(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Sync() (err error) {
_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
if e1 != 0 {
@@ -1350,6 +1722,21 @@ func Unlink(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Unmount(path string, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
index b7141c63f..6ec31434b 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go
+// go run mksyscall.go -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build netbsd,arm
@@ -571,6 +571,220 @@ func Exit(code int) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(file)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(attrname)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
+ ret = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -651,6 +865,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -900,6 +1129,26 @@ func Link(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Listen(s int, backlog int) (err error) {
_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
if e1 != 0 {
@@ -940,6 +1189,21 @@ func Mkdir(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkfifo(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -955,6 +1219,21 @@ func Mkfifo(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mknod(path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -970,6 +1249,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
if e1 != 0 {
@@ -996,6 +1290,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Pathconf(path string, name int) (val int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1085,6 +1395,28 @@ func Readlink(path string, buf []byte) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Rename(from string, to string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(from)
@@ -1105,6 +1437,26 @@ func Rename(from string, to string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Revoke(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1302,6 +1654,26 @@ func Symlink(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Sync() (err error) {
_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
if e1 != 0 {
@@ -1350,6 +1722,21 @@ func Unlink(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Unmount(path string, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
index 1942049b0..6a489fac0 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go
+// go run mksyscall.go -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build openbsd,386
@@ -431,6 +431,17 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
+ r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Access(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -639,6 +650,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -909,6 +935,26 @@ func Link(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Listen(s int, backlog int) (err error) {
_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
if e1 != 0 {
@@ -949,6 +995,21 @@ func Mkdir(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkfifo(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -964,6 +1025,21 @@ func Mkfifo(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mknod(path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -979,6 +1055,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
if e1 != 0 {
@@ -1005,6 +1096,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Pathconf(path string, name int) (val int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1094,6 +1201,28 @@ func Readlink(path string, buf []byte) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Rename(from string, to string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(from)
@@ -1114,6 +1243,26 @@ func Rename(from string, to string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Revoke(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1371,6 +1520,26 @@ func Symlink(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Sync() (err error) {
_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
if e1 != 0 {
@@ -1419,6 +1588,21 @@ func Unlink(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Unmount(path string, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
index d351c72cb..30cba4347 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go
+// go run mksyscall.go -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build openbsd,amd64
@@ -431,6 +431,17 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
+ r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Access(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -639,6 +650,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -909,6 +935,26 @@ func Link(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Listen(s int, backlog int) (err error) {
_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
if e1 != 0 {
@@ -949,6 +995,21 @@ func Mkdir(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkfifo(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -964,6 +1025,21 @@ func Mkfifo(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mknod(path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -979,6 +1055,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
if e1 != 0 {
@@ -1005,6 +1096,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Pathconf(path string, name int) (val int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1094,6 +1201,28 @@ func Readlink(path string, buf []byte) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Rename(from string, to string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(from)
@@ -1114,6 +1243,26 @@ func Rename(from string, to string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Revoke(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1371,6 +1520,26 @@ func Symlink(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Sync() (err error) {
_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
if e1 != 0 {
@@ -1419,6 +1588,21 @@ func Unlink(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Unmount(path string, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
index 617d47f0f..fa1beda33 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
@@ -1,4 +1,4 @@
-// mksyscall.pl -l32 -openbsd -arm -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go
+// go run mksyscall.go -l32 -openbsd -arm -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build openbsd,arm
@@ -431,6 +431,17 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
+ r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Access(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -639,6 +650,21 @@ func Fchown(fd int, uid int, gid int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
if e1 != 0 {
@@ -909,6 +935,26 @@ func Link(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(link)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Listen(s int, backlog int) (err error) {
_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
if e1 != 0 {
@@ -949,6 +995,21 @@ func Mkdir(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkdirat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkfifo(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -964,6 +1025,21 @@ func Mkfifo(path string, mode uint32) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mknod(path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -979,6 +1055,21 @@ func Mknod(path string, mode uint32, dev int) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
if e1 != 0 {
@@ -1005,6 +1096,22 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+ fd = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Pathconf(path string, name int) (val int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1094,6 +1201,28 @@ func Readlink(path string, buf []byte) (n int, err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ var _p1 unsafe.Pointer
+ if len(buf) > 0 {
+ _p1 = unsafe.Pointer(&buf[0])
+ } else {
+ _p1 = unsafe.Pointer(&_zero)
+ }
+ r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+ n = int(r0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Rename(from string, to string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(from)
@@ -1114,6 +1243,26 @@ func Rename(from string, to string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Renameat(fromfd int, from string, tofd int, to string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(from)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(to)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Revoke(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1371,6 +1520,26 @@ func Symlink(path string, link string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(oldpath)
+ if err != nil {
+ return
+ }
+ var _p1 *byte
+ _p1, err = BytePtrFromString(newpath)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Sync() (err error) {
_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
if e1 != 0 {
@@ -1419,6 +1588,21 @@ func Unlink(path string) (err error) {
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+func Unlinkat(dirfd int, path string, flags int) (err error) {
+ var _p0 *byte
+ _p0, err = BytePtrFromString(path)
+ if err != nil {
+ return
+ }
+ _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+ if e1 != 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Unmount(path string, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
index e2e5fc5e0..97b22a499 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
@@ -399,6 +399,8 @@ var (
procrecvfrom syscallFunc
)
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func pipe(p *[2]_C_int) (n int, err error) {
r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0)
n = int(r0)
@@ -408,6 +410,8 @@ func pipe(p *[2]_C_int) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
if e1 != 0 {
@@ -416,6 +420,8 @@ func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getcwd(buf []byte) (n int, err error) {
var _p0 *byte
if len(buf) > 0 {
@@ -429,6 +435,8 @@ func Getcwd(buf []byte) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)
n = int(r0)
@@ -438,6 +446,8 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func setgroups(ngid int, gid *_Gid_t) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)
if e1 != 0 {
@@ -446,6 +456,8 @@ func setgroups(ngid int, gid *_Gid_t) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
wpid = int32(r0)
@@ -455,6 +467,8 @@ func wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32,
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func gethostname(buf []byte) (n int, err error) {
var _p0 *byte
if len(buf) > 0 {
@@ -468,6 +482,8 @@ func gethostname(buf []byte) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func utimes(path string, times *[2]Timeval) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -481,6 +497,8 @@ func utimes(path string, times *[2]Timeval) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -494,6 +512,8 @@ func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func fcntl(fd int, cmd int, arg int) (val int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)
val = int(r0)
@@ -503,6 +523,8 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0)
if e1 != 0 {
@@ -511,6 +533,8 @@ func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
fd = int(r0)
@@ -520,6 +544,8 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
n = int(r0)
@@ -529,6 +555,8 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)
n = int(r0)
@@ -538,6 +566,8 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func acct(path *byte) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -546,24 +576,32 @@ func acct(path *byte) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func __makedev(version int, major uint, minor uint) (val uint64) {
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__makedev)), 3, uintptr(version), uintptr(major), uintptr(minor), 0, 0, 0)
val = uint64(r0)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func __major(version int, dev uint64) (val uint) {
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__major)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0)
val = uint(r0)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func __minor(version int, dev uint64) (val uint) {
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__minor)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0)
val = uint(r0)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func ioctl(fd int, req uint, arg uintptr) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)
if e1 != 0 {
@@ -572,6 +610,8 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpoll)), 3, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout), 0, 0, 0)
n = int(r0)
@@ -581,6 +621,8 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Access(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -594,6 +636,8 @@ func Access(path string, mode uint32) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0)
if e1 != 0 {
@@ -602,6 +646,8 @@ func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Chdir(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -615,6 +661,8 @@ func Chdir(path string) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Chmod(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -628,6 +676,8 @@ func Chmod(path string, mode uint32) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Chown(path string, uid int, gid int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -641,6 +691,8 @@ func Chown(path string, uid int, gid int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Chroot(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -654,6 +706,8 @@ func Chroot(path string) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Close(fd int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -662,6 +716,8 @@ func Close(fd int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Creat(path string, mode uint32) (fd int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -676,6 +732,8 @@ func Creat(path string, mode uint32) (fd int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup(fd int) (nfd int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0)
nfd = int(r0)
@@ -685,6 +743,8 @@ func Dup(fd int) (nfd int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Dup2(oldfd int, newfd int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)
if e1 != 0 {
@@ -693,11 +753,15 @@ func Dup2(oldfd int, newfd int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Exit(code int) {
sysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -711,6 +775,8 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fchdir(fd int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -719,6 +785,8 @@ func Fchdir(fd int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fchmod(fd int, mode uint32) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)
if e1 != 0 {
@@ -727,6 +795,8 @@ func Fchmod(fd int, mode uint32) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -740,6 +810,8 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fchown(fd int, uid int, gid int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)
if e1 != 0 {
@@ -748,6 +820,8 @@ func Fchown(fd int, uid int, gid int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -761,6 +835,8 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fdatasync(fd int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -769,6 +845,8 @@ func Fdatasync(fd int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Flock(fd int, how int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0)
if e1 != 0 {
@@ -777,6 +855,8 @@ func Flock(fd int, how int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fpathconf(fd int, name int) (val int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0)
val = int(r0)
@@ -786,6 +866,8 @@ func Fpathconf(fd int, name int) (val int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fstat(fd int, stat *Stat_t) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)
if e1 != 0 {
@@ -794,6 +876,8 @@ func Fstat(fd int, stat *Stat_t) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -807,6 +891,8 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0)
if e1 != 0 {
@@ -815,6 +901,8 @@ func Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) {
var _p0 *byte
if len(buf) > 0 {
@@ -828,18 +916,24 @@ func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getgid() (gid int) {
r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0)
gid = int(r0)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getpid() (pid int) {
r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0)
pid = int(r0)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getpgid(pid int) (pgid int, err error) {
r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)
pgid = int(r0)
@@ -849,6 +943,8 @@ func Getpgid(pid int) (pgid int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getpgrp() (pgid int, err error) {
r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0)
pgid = int(r0)
@@ -858,24 +954,32 @@ func Getpgrp() (pgid int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Geteuid() (euid int) {
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0)
euid = int(r0)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getegid() (egid int) {
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0)
egid = int(r0)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getppid() (ppid int) {
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0)
ppid = int(r0)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getpriority(which int, who int) (n int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)
n = int(r0)
@@ -885,6 +989,8 @@ func Getpriority(which int, who int) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrlimit(which int, lim *Rlimit) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)
if e1 != 0 {
@@ -893,6 +999,8 @@ func Getrlimit(which int, lim *Rlimit) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getrusage(who int, rusage *Rusage) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0)
if e1 != 0 {
@@ -901,6 +1009,8 @@ func Getrusage(who int, rusage *Rusage) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Gettimeofday(tv *Timeval) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -909,12 +1019,16 @@ func Gettimeofday(tv *Timeval) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Getuid() (uid int) {
r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0)
uid = int(r0)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Kill(pid int, signum syscall.Signal) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0)
if e1 != 0 {
@@ -923,6 +1037,8 @@ func Kill(pid int, signum syscall.Signal) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Lchown(path string, uid int, gid int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -936,6 +1052,8 @@ func Lchown(path string, uid int, gid int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Link(path string, link string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -954,6 +1072,8 @@ func Link(path string, link string) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Listen(s int, backlog int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0)
if e1 != 0 {
@@ -962,6 +1082,8 @@ func Listen(s int, backlog int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Lstat(path string, stat *Stat_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -975,6 +1097,8 @@ func Lstat(path string, stat *Stat_t) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Madvise(b []byte, advice int) (err error) {
var _p0 *byte
if len(b) > 0 {
@@ -987,6 +1111,8 @@ func Madvise(b []byte, advice int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdir(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1000,6 +1126,8 @@ func Mkdir(path string, mode uint32) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkdirat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1013,6 +1141,8 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkfifo(path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1026,6 +1156,8 @@ func Mkfifo(path string, mode uint32) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1039,6 +1171,8 @@ func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mknod(path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1052,6 +1186,8 @@ func Mknod(path string, mode uint32, dev int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1065,6 +1201,8 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mlock(b []byte) (err error) {
var _p0 *byte
if len(b) > 0 {
@@ -1077,6 +1215,8 @@ func Mlock(b []byte) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mlockall(flags int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -1085,6 +1225,8 @@ func Mlockall(flags int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Mprotect(b []byte, prot int) (err error) {
var _p0 *byte
if len(b) > 0 {
@@ -1097,6 +1239,8 @@ func Mprotect(b []byte, prot int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Msync(b []byte, flags int) (err error) {
var _p0 *byte
if len(b) > 0 {
@@ -1109,6 +1253,8 @@ func Msync(b []byte, flags int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Munlock(b []byte) (err error) {
var _p0 *byte
if len(b) > 0 {
@@ -1121,6 +1267,8 @@ func Munlock(b []byte) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Munlockall() (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -1129,6 +1277,8 @@ func Munlockall() (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0)
if e1 != 0 {
@@ -1137,6 +1287,8 @@ func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Open(path string, mode int, perm uint32) (fd int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1151,6 +1303,8 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1165,6 +1319,8 @@ func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Pathconf(path string, name int) (val int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1179,6 +1335,8 @@ func Pathconf(path string, name int) (val int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Pause() (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -1187,6 +1345,8 @@ func Pause() (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Pread(fd int, p []byte, offset int64) (n int, err error) {
var _p0 *byte
if len(p) > 0 {
@@ -1200,6 +1360,8 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
var _p0 *byte
if len(p) > 0 {
@@ -1213,6 +1375,8 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func read(fd int, p []byte) (n int, err error) {
var _p0 *byte
if len(p) > 0 {
@@ -1226,6 +1390,8 @@ func read(fd int, p []byte) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Readlink(path string, buf []byte) (n int, err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1244,6 +1410,8 @@ func Readlink(path string, buf []byte) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Rename(from string, to string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(from)
@@ -1262,6 +1430,8 @@ func Rename(from string, to string) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(oldpath)
@@ -1280,6 +1450,8 @@ func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err e
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Rmdir(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1293,6 +1465,8 @@ func Rmdir(path string) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)
newoffset = int64(r0)
@@ -1302,6 +1476,8 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSelect)), 5, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
if e1 != 0 {
@@ -1310,6 +1486,8 @@ func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Setegid(egid int) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -1318,6 +1496,8 @@ func Setegid(egid int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Seteuid(euid int) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -1326,6 +1506,8 @@ func Seteuid(euid int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Setgid(gid int) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -1334,6 +1516,8 @@ func Setgid(gid int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Sethostname(p []byte) (err error) {
var _p0 *byte
if len(p) > 0 {
@@ -1346,6 +1530,8 @@ func Sethostname(p []byte) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Setpgid(pid int, pgid int) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)
if e1 != 0 {
@@ -1354,6 +1540,8 @@ func Setpgid(pid int, pgid int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Setpriority(which int, who int, prio int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)
if e1 != 0 {
@@ -1362,6 +1550,8 @@ func Setpriority(which int, who int, prio int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Setregid(rgid int, egid int) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)
if e1 != 0 {
@@ -1370,6 +1560,8 @@ func Setregid(rgid int, egid int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Setreuid(ruid int, euid int) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)
if e1 != 0 {
@@ -1378,6 +1570,8 @@ func Setreuid(ruid int, euid int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Setrlimit(which int, lim *Rlimit) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)
if e1 != 0 {
@@ -1386,6 +1580,8 @@ func Setrlimit(which int, lim *Rlimit) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Setsid() (pid int, err error) {
r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0)
pid = int(r0)
@@ -1395,6 +1591,8 @@ func Setsid() (pid int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Setuid(uid int) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -1403,6 +1601,8 @@ func Setuid(uid int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Shutdown(s int, how int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0)
if e1 != 0 {
@@ -1411,6 +1611,8 @@ func Shutdown(s int, how int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Stat(path string, stat *Stat_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1424,6 +1626,8 @@ func Stat(path string, stat *Stat_t) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Statvfs(path string, vfsstat *Statvfs_t) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1437,6 +1641,8 @@ func Statvfs(path string, vfsstat *Statvfs_t) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Symlink(path string, link string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1455,6 +1661,8 @@ func Symlink(path string, link string) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Sync() (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -1463,6 +1671,8 @@ func Sync() (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Times(tms *Tms) (ticks uintptr, err error) {
r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0)
ticks = uintptr(r0)
@@ -1472,6 +1682,8 @@ func Times(tms *Tms) (ticks uintptr, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Truncate(path string, length int64) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1485,6 +1697,8 @@ func Truncate(path string, length int64) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Fsync(fd int) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -1493,6 +1707,8 @@ func Fsync(fd int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Ftruncate(fd int, length int64) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)
if e1 != 0 {
@@ -1501,12 +1717,16 @@ func Ftruncate(fd int, length int64) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Umask(mask int) (oldmask int) {
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0)
oldmask = int(r0)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Uname(buf *Utsname) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0)
if e1 != 0 {
@@ -1515,6 +1735,8 @@ func Uname(buf *Utsname) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Unmount(target string, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(target)
@@ -1528,6 +1750,8 @@ func Unmount(target string, flags int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Unlink(path string) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1541,6 +1765,8 @@ func Unlink(path string) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Unlinkat(dirfd int, path string, flags int) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1554,6 +1780,8 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Ustat(dev int, ubuf *Ustat_t) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0)
if e1 != 0 {
@@ -1562,6 +1790,8 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func Utime(path string, buf *Utimbuf) (err error) {
var _p0 *byte
_p0, err = BytePtrFromString(path)
@@ -1575,6 +1805,8 @@ func Utime(path string, buf *Utimbuf) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
if e1 != 0 {
@@ -1583,6 +1815,8 @@ func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_connect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)
if e1 != 0 {
@@ -1591,6 +1825,8 @@ func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
ret = uintptr(r0)
@@ -1600,6 +1836,8 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func munmap(addr uintptr, length uintptr) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0)
if e1 != 0 {
@@ -1608,6 +1846,8 @@ func munmap(addr uintptr, length uintptr) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendfile)), 4, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)
written = int(r0)
@@ -1617,6 +1857,8 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
var _p0 *byte
if len(buf) > 0 {
@@ -1629,6 +1871,8 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func socket(domain int, typ int, proto int) (fd int, err error) {
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)
fd = int(r0)
@@ -1638,6 +1882,8 @@ func socket(domain int, typ int, proto int) (fd int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
if e1 != 0 {
@@ -1646,6 +1892,8 @@ func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func write(fd int, p []byte) (n int, err error) {
var _p0 *byte
if len(p) > 0 {
@@ -1659,6 +1907,8 @@ func write(fd int, p []byte) (n int, err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
if e1 != 0 {
@@ -1667,6 +1917,8 @@ func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)
if e1 != 0 {
@@ -1675,6 +1927,8 @@ func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
if e1 != 0 {
@@ -1683,6 +1937,8 @@ func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr)
return
}
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
var _p0 *byte
if len(p) > 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go
index 90c95c2c7..d014451c9 100644
--- a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go
@@ -254,4 +254,17 @@ var sysctlMib = []mibentry{
{"net.mpls.ttl", []_C_int{4, 33, 2}},
{"net.pflow.stats", []_C_int{4, 34, 1}},
{"net.pipex.enable", []_C_int{4, 35, 1}},
+ {"vm.anonmin", []_C_int{2, 7}},
+ {"vm.loadavg", []_C_int{2, 2}},
+ {"vm.maxslp", []_C_int{2, 10}},
+ {"vm.nkmempages", []_C_int{2, 6}},
+ {"vm.psstrings", []_C_int{2, 3}},
+ {"vm.swapencrypt.enable", []_C_int{2, 5, 0}},
+ {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}},
+ {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}},
+ {"vm.uspace", []_C_int{2, 11}},
+ {"vm.uvmexp", []_C_int{2, 4}},
+ {"vm.vmmeter", []_C_int{2, 1}},
+ {"vm.vnodemin", []_C_int{2, 9}},
+ {"vm.vtextmin", []_C_int{2, 8}},
}
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go
index d1d36da3f..f33614532 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go
@@ -1,4 +1,4 @@
-// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/syscall.h
+// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/syscall.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build 386,darwin
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go
index e35de4145..9e2837e0e 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go
@@ -1,4 +1,4 @@
-// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/syscall.h
+// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/syscall.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build amd64,darwin
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go
index f2df27db2..103a72ed1 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go
@@ -1,4 +1,4 @@
-// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h
+// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build arm,darwin
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go
index 969463023..7ab2130b9 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go
@@ -1,4 +1,4 @@
-// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h
+// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build arm64,darwin
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go
index b2c9ef81b..ff3976edb 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go
@@ -1,4 +1,4 @@
-// mksysnum_dragonfly.pl
+// go run mksysnum.go http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build amd64,dragonfly
@@ -13,7 +13,7 @@ const (
SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }
SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
SYS_CLOSE = 6 // { int close(int fd); }
- SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, \
+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } wait4 wait_args int
SYS_LINK = 9 // { int link(char *path, char *link); }
SYS_UNLINK = 10 // { int unlink(char *path); }
SYS_CHDIR = 12 // { int chdir(char *path); }
@@ -22,17 +22,17 @@ const (
SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int
- SYS_GETFSSTAT = 18 // { int getfsstat(struct statfs *buf, long bufsize, \
+ SYS_GETFSSTAT = 18 // { int getfsstat(struct statfs *buf, long bufsize, int flags); }
SYS_GETPID = 20 // { pid_t getpid(void); }
- SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, \
+ SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); }
SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
SYS_SETUID = 23 // { int setuid(uid_t uid); }
SYS_GETUID = 24 // { uid_t getuid(void); }
SYS_GETEUID = 25 // { uid_t geteuid(void); }
- SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, \
+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); }
SYS_SENDMSG = 28 // { int sendmsg(int s, caddr_t msg, int flags); }
- SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, \
+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, caddr_t from, int *fromlenaddr); }
SYS_ACCEPT = 30 // { int accept(int s, caddr_t name, int *anamelen); }
SYS_GETPEERNAME = 31 // { int getpeername(int fdes, caddr_t asa, int *alen); }
SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, caddr_t asa, int *alen); }
@@ -45,8 +45,8 @@ const (
SYS_DUP = 41 // { int dup(int fd); }
SYS_PIPE = 42 // { int pipe(void); }
SYS_GETEGID = 43 // { gid_t getegid(void); }
- SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
- SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, \
+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); }
SYS_GETGID = 47 // { gid_t getgid(void); }
SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); }
SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
@@ -67,32 +67,32 @@ const (
SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); }
SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); }
- SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); }
SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); }
SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); }
SYS_GETPGRP = 81 // { int getpgrp(void); }
SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
- SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, \
+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
SYS_SWAPON = 85 // { int swapon(char *name); }
SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); }
SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
SYS_DUP2 = 90 // { int dup2(int from, int to); }
SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
- SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
SYS_FSYNC = 95 // { int fsync(int fd); }
SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); }
SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); }
SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); }
SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); }
- SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
SYS_LISTEN = 106 // { int listen(int s, int backlog); }
- SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); }
- SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
- SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
- SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
@@ -100,15 +100,15 @@ const (
SYS_RENAME = 128 // { int rename(char *from, char *to); }
SYS_FLOCK = 131 // { int flock(int fd, int how); }
SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
- SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
- SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, \
+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
SYS_RMDIR = 137 // { int rmdir(char *path); }
SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); }
- SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
SYS_SETSID = 147 // { int setsid(void); }
- SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
SYS_STATFS = 157 // { int statfs(char *path, struct statfs *buf); }
SYS_FSTATFS = 158 // { int fstatfs(int fd, struct statfs *buf); }
SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); }
@@ -116,53 +116,53 @@ const (
SYS_SETDOMAINNAME = 163 // { int setdomainname(char *domainname, int len); }
SYS_UNAME = 164 // { int uname(struct utsname *name); }
SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
- SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
- SYS_EXTPREAD = 173 // { ssize_t extpread(int fd, void *buf, \
- SYS_EXTPWRITE = 174 // { ssize_t extpwrite(int fd, const void *buf, \
+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
+ SYS_EXTPREAD = 173 // { ssize_t extpread(int fd, void *buf, size_t nbyte, int flags, off_t offset); }
+ SYS_EXTPWRITE = 174 // { ssize_t extpwrite(int fd, const void *buf, size_t nbyte, int flags, off_t offset); }
SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
SYS_SETGID = 181 // { int setgid(gid_t gid); }
SYS_SETEGID = 182 // { int setegid(gid_t egid); }
SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
- SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
- SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
- SYS_MMAP = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, \
+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
+ SYS_MMAP = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }
// SYS_NOSYS = 198; // { int nosys(void); } __syscall __syscall_args int
- SYS_LSEEK = 199 // { off_t lseek(int fd, int pad, off_t offset, \
+ SYS_LSEEK = 199 // { off_t lseek(int fd, int pad, off_t offset, int whence); }
SYS_TRUNCATE = 200 // { int truncate(char *path, int pad, off_t length); }
SYS_FTRUNCATE = 201 // { int ftruncate(int fd, int pad, off_t length); }
- SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, \
+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
SYS_UNDELETE = 205 // { int undelete(char *path); }
SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
- SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
- SYS___SEMCTL = 220 // { int __semctl(int semid, int semnum, int cmd, \
+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
+ SYS___SEMCTL = 220 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); }
- SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \
- SYS_MSGCTL = 224 // { int msgctl(int msqid, int cmd, \
+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, u_int nsops); }
+ SYS_MSGCTL = 224 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
- SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, \
- SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, \
- SYS_SHMAT = 228 // { caddr_t shmat(int shmid, const void *shmaddr, \
- SYS_SHMCTL = 229 // { int shmctl(int shmid, int cmd, \
+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
+ SYS_SHMAT = 228 // { caddr_t shmat(int shmid, const void *shmaddr, int shmflg); }
+ SYS_SHMCTL = 229 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); }
- SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
- SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, \
- SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
- SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
+ SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }
+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); }
SYS_RFORK = 251 // { int rfork(int flags); }
- SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, \
+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }
SYS_ISSETUGID = 253 // { int issetugid(void); }
SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); }
- SYS_EXTPREADV = 289 // { ssize_t extpreadv(int fd, struct iovec *iovp, \
- SYS_EXTPWRITEV = 290 // { ssize_t extpwritev(int fd, struct iovec *iovp,\
+ SYS_EXTPREADV = 289 // { ssize_t extpreadv(int fd, struct iovec *iovp, u_int iovcnt, int flags, off_t offset); }
+ SYS_EXTPWRITEV = 290 // { ssize_t extpwritev(int fd, struct iovec *iovp,u_int iovcnt, int flags, off_t offset); }
SYS_FHSTATFS = 297 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
SYS_MODNEXT = 300 // { int modnext(int modid); }
@@ -200,34 +200,34 @@ const (
SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); }
SYS_JAIL = 338 // { int jail(struct jail *jail); }
- SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, \
+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
- SYS_SIGACTION = 342 // { int sigaction(int sig, const struct sigaction *act, \
+ SYS_SIGACTION = 342 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
SYS_SIGRETURN = 344 // { int sigreturn(ucontext_t *sigcntxp); }
- SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set,\
- SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set,\
- SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
- SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
- SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, \
- SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, \
- SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set,siginfo_t *info, const struct timespec *timeout); }
+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set,siginfo_t *info); }
+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
- SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
- SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, \
- SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
- SYS_EXTATTR_SET_FILE = 356 // { int extattr_set_file(const char *path, \
- SYS_EXTATTR_GET_FILE = 357 // { int extattr_get_file(const char *path, \
- SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
+ SYS_EXTATTR_SET_FILE = 356 // { int extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_GET_FILE = 357 // { int extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }
SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
SYS_KQUEUE = 362 // { int kqueue(void); }
- SYS_KEVENT = 363 // { int kevent(int fd, \
+ SYS_KEVENT = 363 // { int kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); }
SYS_LCHFLAGS = 391 // { int lchflags(char *path, int flags); }
SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); }
- SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, \
+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
SYS_VARSYM_SET = 450 // { int varsym_set(int level, const char *name, const char *data); }
SYS_VARSYM_GET = 451 // { int varsym_get(int mask, const char *wild, char *buf, int bufsize); }
SYS_VARSYM_LIST = 452 // { int varsym_list(int level, char *buf, int maxsize, int *marker); }
@@ -245,58 +245,58 @@ const (
SYS_FSTAT = 476 // { int fstat(int fd, struct stat *sb); }
SYS_LSTAT = 477 // { int lstat(const char *path, struct stat *ub); }
SYS_FHSTAT = 478 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
- SYS_GETDIRENTRIES = 479 // { int getdirentries(int fd, char *buf, u_int count, \
+ SYS_GETDIRENTRIES = 479 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }
SYS_GETDENTS = 480 // { int getdents(int fd, char *buf, size_t count); }
- SYS_USCHED_SET = 481 // { int usched_set(pid_t pid, int cmd, void *data, \
+ SYS_USCHED_SET = 481 // { int usched_set(pid_t pid, int cmd, void *data, int bytes); }
SYS_EXTACCEPT = 482 // { int extaccept(int s, int flags, caddr_t name, int *anamelen); }
SYS_EXTCONNECT = 483 // { int extconnect(int s, int flags, caddr_t name, int namelen); }
SYS_MCONTROL = 485 // { int mcontrol(void *addr, size_t len, int behav, off_t value); }
SYS_VMSPACE_CREATE = 486 // { int vmspace_create(void *id, int type, void *data); }
SYS_VMSPACE_DESTROY = 487 // { int vmspace_destroy(void *id); }
- SYS_VMSPACE_CTL = 488 // { int vmspace_ctl(void *id, int cmd, \
- SYS_VMSPACE_MMAP = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, \
- SYS_VMSPACE_MUNMAP = 490 // { int vmspace_munmap(void *id, void *addr, \
- SYS_VMSPACE_MCONTROL = 491 // { int vmspace_mcontrol(void *id, void *addr, \
- SYS_VMSPACE_PREAD = 492 // { ssize_t vmspace_pread(void *id, void *buf, \
- SYS_VMSPACE_PWRITE = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, \
+ SYS_VMSPACE_CTL = 488 // { int vmspace_ctl(void *id, int cmd, struct trapframe *tframe, struct vextframe *vframe); }
+ SYS_VMSPACE_MMAP = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, int prot, int flags, int fd, off_t offset); }
+ SYS_VMSPACE_MUNMAP = 490 // { int vmspace_munmap(void *id, void *addr, size_t len); }
+ SYS_VMSPACE_MCONTROL = 491 // { int vmspace_mcontrol(void *id, void *addr, size_t len, int behav, off_t value); }
+ SYS_VMSPACE_PREAD = 492 // { ssize_t vmspace_pread(void *id, void *buf, size_t nbyte, int flags, off_t offset); }
+ SYS_VMSPACE_PWRITE = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, size_t nbyte, int flags, off_t offset); }
SYS_EXTEXIT = 494 // { void extexit(int how, int status, void *addr); }
SYS_LWP_CREATE = 495 // { int lwp_create(struct lwp_params *params); }
SYS_LWP_GETTID = 496 // { lwpid_t lwp_gettid(void); }
SYS_LWP_KILL = 497 // { int lwp_kill(pid_t pid, lwpid_t tid, int signum); }
SYS_LWP_RTPRIO = 498 // { int lwp_rtprio(int function, pid_t pid, lwpid_t tid, struct rtprio *rtp); }
- SYS_PSELECT = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, \
+ SYS_PSELECT = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sigmask); }
SYS_STATVFS = 500 // { int statvfs(const char *path, struct statvfs *buf); }
SYS_FSTATVFS = 501 // { int fstatvfs(int fd, struct statvfs *buf); }
SYS_FHSTATVFS = 502 // { int fhstatvfs(const struct fhandle *u_fhp, struct statvfs *buf); }
- SYS_GETVFSSTAT = 503 // { int getvfsstat(struct statfs *buf, \
+ SYS_GETVFSSTAT = 503 // { int getvfsstat(struct statfs *buf, struct statvfs *vbuf, long vbufsize, int flags); }
SYS_OPENAT = 504 // { int openat(int fd, char *path, int flags, int mode); }
- SYS_FSTATAT = 505 // { int fstatat(int fd, char *path, \
- SYS_FCHMODAT = 506 // { int fchmodat(int fd, char *path, int mode, \
- SYS_FCHOWNAT = 507 // { int fchownat(int fd, char *path, int uid, int gid, \
+ SYS_FSTATAT = 505 // { int fstatat(int fd, char *path, struct stat *sb, int flags); }
+ SYS_FCHMODAT = 506 // { int fchmodat(int fd, char *path, int mode, int flags); }
+ SYS_FCHOWNAT = 507 // { int fchownat(int fd, char *path, int uid, int gid, int flags); }
SYS_UNLINKAT = 508 // { int unlinkat(int fd, char *path, int flags); }
- SYS_FACCESSAT = 509 // { int faccessat(int fd, char *path, int amode, \
- SYS_MQ_OPEN = 510 // { mqd_t mq_open(const char * name, int oflag, \
+ SYS_FACCESSAT = 509 // { int faccessat(int fd, char *path, int amode, int flags); }
+ SYS_MQ_OPEN = 510 // { mqd_t mq_open(const char * name, int oflag, mode_t mode, struct mq_attr *attr); }
SYS_MQ_CLOSE = 511 // { int mq_close(mqd_t mqdes); }
SYS_MQ_UNLINK = 512 // { int mq_unlink(const char *name); }
- SYS_MQ_GETATTR = 513 // { int mq_getattr(mqd_t mqdes, \
- SYS_MQ_SETATTR = 514 // { int mq_setattr(mqd_t mqdes, \
- SYS_MQ_NOTIFY = 515 // { int mq_notify(mqd_t mqdes, \
- SYS_MQ_SEND = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, \
- SYS_MQ_RECEIVE = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, \
- SYS_MQ_TIMEDSEND = 518 // { int mq_timedsend(mqd_t mqdes, \
- SYS_MQ_TIMEDRECEIVE = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, \
+ SYS_MQ_GETATTR = 513 // { int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat); }
+ SYS_MQ_SETATTR = 514 // { int mq_setattr(mqd_t mqdes, const struct mq_attr *mqstat, struct mq_attr *omqstat); }
+ SYS_MQ_NOTIFY = 515 // { int mq_notify(mqd_t mqdes, const struct sigevent *notification); }
+ SYS_MQ_SEND = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio); }
+ SYS_MQ_RECEIVE = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio); }
+ SYS_MQ_TIMEDSEND = 518 // { int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }
+ SYS_MQ_TIMEDRECEIVE = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
SYS_IOPRIO_SET = 520 // { int ioprio_set(int which, int who, int prio); }
SYS_IOPRIO_GET = 521 // { int ioprio_get(int which, int who); }
SYS_CHROOT_KERNEL = 522 // { int chroot_kernel(char *path); }
- SYS_RENAMEAT = 523 // { int renameat(int oldfd, char *old, int newfd, \
+ SYS_RENAMEAT = 523 // { int renameat(int oldfd, char *old, int newfd, char *new); }
SYS_MKDIRAT = 524 // { int mkdirat(int fd, char *path, mode_t mode); }
SYS_MKFIFOAT = 525 // { int mkfifoat(int fd, char *path, mode_t mode); }
- SYS_MKNODAT = 526 // { int mknodat(int fd, char *path, mode_t mode, \
- SYS_READLINKAT = 527 // { int readlinkat(int fd, char *path, char *buf, \
+ SYS_MKNODAT = 526 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
+ SYS_READLINKAT = 527 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }
SYS_SYMLINKAT = 528 // { int symlinkat(char *path1, int fd, char *path2); }
SYS_SWAPOFF = 529 // { int swapoff(char *name); }
- SYS_VQUOTACTL = 530 // { int vquotactl(const char *path, \
- SYS_LINKAT = 531 // { int linkat(int fd1, char *path1, int fd2, \
+ SYS_VQUOTACTL = 530 // { int vquotactl(const char *path, struct plistref *pref); }
+ SYS_LINKAT = 531 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flags); }
SYS_EACCESS = 532 // { int eaccess(char *path, int flags); }
SYS_LPATHCONF = 533 // { int lpathconf(char *path, int name); }
SYS_VMM_GUEST_CTL = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); }
@@ -308,7 +308,7 @@ const (
SYS_FUTIMENS = 540 // { int futimens(int fd, const struct timespec *ts); }
SYS_ACCEPT4 = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); }
SYS_LWP_SETNAME = 542 // { int lwp_setname(lwpid_t tid, const char *name); }
- SYS_PPOLL = 543 // { int ppoll(struct pollfd *fds, u_int nfds, \
+ SYS_PPOLL = 543 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *sigmask); }
SYS_LWP_SETAFFINITY = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); }
SYS_LWP_GETAFFINITY = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); }
SYS_LWP_CREATE2 = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); }
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go
index b64a8122c..b1e81b717 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go
@@ -1,4 +1,4 @@
-// mksysnum_freebsd.pl
+// go run mksysnum.go http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build 386,freebsd
@@ -7,347 +7,397 @@ package unix
const (
// SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
- SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
- SYS_FORK = 2 // { int fork(void); }
- SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
- SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
- SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
- SYS_CLOSE = 6 // { int close(int fd); }
- SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
- SYS_LINK = 9 // { int link(char *path, char *link); }
- SYS_UNLINK = 10 // { int unlink(char *path); }
- SYS_CHDIR = 12 // { int chdir(char *path); }
- SYS_FCHDIR = 13 // { int fchdir(int fd); }
- SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
- SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
- SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
- SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
- SYS_GETPID = 20 // { pid_t getpid(void); }
- SYS_MOUNT = 21 // { int mount(char *type, char *path, \
- SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
- SYS_SETUID = 23 // { int setuid(uid_t uid); }
- SYS_GETUID = 24 // { uid_t getuid(void); }
- SYS_GETEUID = 25 // { uid_t geteuid(void); }
- SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
- SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
- SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
- SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
- SYS_ACCEPT = 30 // { int accept(int s, \
- SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
- SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
- SYS_ACCESS = 33 // { int access(char *path, int amode); }
- SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
- SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
- SYS_SYNC = 36 // { int sync(void); }
- SYS_KILL = 37 // { int kill(int pid, int signum); }
- SYS_GETPPID = 39 // { pid_t getppid(void); }
- SYS_DUP = 41 // { int dup(u_int fd); }
- SYS_PIPE = 42 // { int pipe(void); }
- SYS_GETEGID = 43 // { gid_t getegid(void); }
- SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
- SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
- SYS_GETGID = 47 // { gid_t getgid(void); }
- SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
- SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
- SYS_ACCT = 51 // { int acct(char *path); }
- SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
- SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
- SYS_REBOOT = 55 // { int reboot(int opt); }
- SYS_REVOKE = 56 // { int revoke(char *path); }
- SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
- SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
- SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
- SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
- SYS_CHROOT = 61 // { int chroot(char *path); }
- SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
- SYS_VFORK = 66 // { int vfork(void); }
- SYS_SBRK = 69 // { int sbrk(int incr); }
- SYS_SSTK = 70 // { int sstk(int incr); }
- SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
- SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
- SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
- SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
- SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
- SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
- SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
- SYS_GETPGRP = 81 // { int getpgrp(void); }
- SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
- SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
- SYS_SWAPON = 85 // { int swapon(char *name); }
- SYS_GETITIMER = 86 // { int getitimer(u_int which, \
- SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
- SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
- SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
- SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
- SYS_FSYNC = 95 // { int fsync(int fd); }
- SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
- SYS_SOCKET = 97 // { int socket(int domain, int type, \
- SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
- SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
- SYS_BIND = 104 // { int bind(int s, caddr_t name, \
- SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
- SYS_LISTEN = 106 // { int listen(int s, int backlog); }
- SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
- SYS_GETRUSAGE = 117 // { int getrusage(int who, \
- SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
- SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
- SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
- SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
- SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
- SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
- SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
- SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
- SYS_RENAME = 128 // { int rename(char *from, char *to); }
- SYS_FLOCK = 131 // { int flock(int fd, int how); }
- SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
- SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
- SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
- SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
- SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
- SYS_RMDIR = 137 // { int rmdir(char *path); }
- SYS_UTIMES = 138 // { int utimes(char *path, \
- SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
- SYS_SETSID = 147 // { int setsid(void); }
- SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
- SYS_LGETFH = 160 // { int lgetfh(char *fname, \
- SYS_GETFH = 161 // { int getfh(char *fname, \
- SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
- SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
- SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \
- SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \
- SYS_SETFIB = 175 // { int setfib(int fibnum); }
- SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
- SYS_SETGID = 181 // { int setgid(gid_t gid); }
- SYS_SETEGID = 182 // { int setegid(gid_t egid); }
- SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
- SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
- SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
- SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
- SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
- SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
- SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
- SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
- SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
- SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \
- SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \
- SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \
- SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \
- SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
- SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
- SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
- SYS_UNDELETE = 205 // { int undelete(char *path); }
- SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
- SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
- SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
- SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
- SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
- SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
- SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
- SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
- SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
- SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
- SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
- SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
- SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
- SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
- SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
- SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
- SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
- SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
- SYS_RFORK = 251 // { int rfork(int flags); }
- SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
- SYS_ISSETUGID = 253 // { int issetugid(void); }
- SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
- SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
- SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
- SYS_LUTIMES = 276 // { int lutimes(char *path, \
- SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
- SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
- SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
- SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
- SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
- SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
- SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
- SYS_MODNEXT = 300 // { int modnext(int modid); }
- SYS_MODSTAT = 301 // { int modstat(int modid, \
- SYS_MODFNEXT = 302 // { int modfnext(int modid); }
- SYS_MODFIND = 303 // { int modfind(const char *name); }
- SYS_KLDLOAD = 304 // { int kldload(const char *file); }
- SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
- SYS_KLDFIND = 306 // { int kldfind(const char *file); }
- SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
- SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
- SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
- SYS_GETSID = 310 // { int getsid(pid_t pid); }
- SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
- SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
- SYS_YIELD = 321 // { int yield(void); }
- SYS_MLOCKALL = 324 // { int mlockall(int how); }
- SYS_MUNLOCKALL = 325 // { int munlockall(void); }
- SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
- SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
- SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
- SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
- SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
- SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
- SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
- SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
- SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
- SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
- SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
- SYS_JAIL = 338 // { int jail(struct jail *jail); }
- SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
- SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
- SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
- SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
- SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
- SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
- SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
- SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
- SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
- SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
- SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
- SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
- SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
- SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
- SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
- SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
- SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
- SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
- SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
- SYS_KQUEUE = 362 // { int kqueue(void); }
- SYS_KEVENT = 363 // { int kevent(int fd, \
- SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
- SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
- SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
- SYS___SETUGID = 374 // { int __setugid(int flag); }
- SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
- SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
- SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
- SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
- SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
- SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
- SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
- SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
- SYS_KENV = 390 // { int kenv(int what, const char *name, \
- SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
- SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
- SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
- SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
- SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
- SYS_STATFS = 396 // { int statfs(char *path, \
- SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
- SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
- SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
- SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
- SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
- SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
- SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
- SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
- SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
- SYS_SIGACTION = 416 // { int sigaction(int sig, \
- SYS_SIGRETURN = 417 // { int sigreturn( \
- SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
- SYS_SETCONTEXT = 422 // { int setcontext( \
- SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
- SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
- SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
- SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
- SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
- SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
- SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
- SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
- SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
- SYS_THR_SELF = 432 // { int thr_self(long *id); }
- SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
- SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
- SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
- SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
- SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
- SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
- SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
- SYS_THR_SUSPEND = 442 // { int thr_suspend( \
- SYS_THR_WAKE = 443 // { int thr_wake(long id); }
- SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
- SYS_AUDIT = 445 // { int audit(const void *record, \
- SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
- SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
- SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
- SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
- SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
- SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
- SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
- SYS_AUDITCTL = 453 // { int auditctl(char *path); }
- SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
- SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
- SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
- SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
- SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
- SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
- SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
- SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
- SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
- SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
- SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
- SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
- SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
- SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
- SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
- SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
- SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
- SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
- SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
- SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
- SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
- SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
- SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
- SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
- SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
- SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
- SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
- SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
- SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
- SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
- SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
- SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
- SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
- SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
- SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
- SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
- SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
- SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
- SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
- SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
- SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
- SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
- SYS_CAP_ENTER = 516 // { int cap_enter(void); }
- SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
- SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
- SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
- SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
- SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
- SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
- SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
- SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
- SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
- SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
- SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
- SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
- SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
- SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
- SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
- SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
- SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
- SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
- SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
- SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
- SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
- SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
- SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
- SYS_ACCEPT4 = 541 // { int accept4(int s, \
- SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
- SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
- SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
- SYS_FUTIMENS = 546 // { int futimens(int fd, \
- SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
+ SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void
+ SYS_FORK = 2 // { int fork(void); }
+ SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); }
+ SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }
+ SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
+ SYS_CLOSE = 6 // { int close(int fd); }
+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); }
+ SYS_LINK = 9 // { int link(char *path, char *link); }
+ SYS_UNLINK = 10 // { int unlink(char *path); }
+ SYS_CHDIR = 12 // { int chdir(char *path); }
+ SYS_FCHDIR = 13 // { int fchdir(int fd); }
+ SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
+ SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
+ SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
+ SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int
+ SYS_GETPID = 20 // { pid_t getpid(void); }
+ SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); }
+ SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
+ SYS_SETUID = 23 // { int setuid(uid_t uid); }
+ SYS_GETUID = 24 // { uid_t getuid(void); }
+ SYS_GETEUID = 25 // { uid_t geteuid(void); }
+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
+ SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); }
+ SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); }
+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }
+ SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }
+ SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
+ SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
+ SYS_ACCESS = 33 // { int access(char *path, int amode); }
+ SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
+ SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
+ SYS_SYNC = 36 // { int sync(void); }
+ SYS_KILL = 37 // { int kill(int pid, int signum); }
+ SYS_GETPPID = 39 // { pid_t getppid(void); }
+ SYS_DUP = 41 // { int dup(u_int fd); }
+ SYS_PIPE = 42 // { int pipe(void); }
+ SYS_GETEGID = 43 // { gid_t getegid(void); }
+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); }
+ SYS_GETGID = 47 // { gid_t getgid(void); }
+ SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); }
+ SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
+ SYS_ACCT = 51 // { int acct(char *path); }
+ SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); }
+ SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); }
+ SYS_REBOOT = 55 // { int reboot(int opt); }
+ SYS_REVOKE = 56 // { int revoke(char *path); }
+ SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
+ SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); }
+ SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); }
+ SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int
+ SYS_CHROOT = 61 // { int chroot(char *path); }
+ SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); }
+ SYS_VFORK = 66 // { int vfork(void); }
+ SYS_SBRK = 69 // { int sbrk(int incr); }
+ SYS_SSTK = 70 // { int sstk(int incr); }
+ SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int
+ SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
+ SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); }
+ SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); }
+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); }
+ SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); }
+ SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); }
+ SYS_GETPGRP = 81 // { int getpgrp(void); }
+ SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
+ SYS_SWAPON = 85 // { int swapon(char *name); }
+ SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); }
+ SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
+ SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
+ SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
+ SYS_FSYNC = 95 // { int fsync(int fd); }
+ SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); }
+ SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); }
+ SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); }
+ SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
+ SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); }
+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
+ SYS_LISTEN = 106 // { int listen(int s, int backlog); }
+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
+ SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); }
+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
+ SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
+ SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
+ SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
+ SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
+ SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
+ SYS_RENAME = 128 // { int rename(char *from, char *to); }
+ SYS_FLOCK = 131 // { int flock(int fd, int how); }
+ SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
+ SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
+ SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
+ SYS_RMDIR = 137 // { int rmdir(char *path); }
+ SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); }
+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
+ SYS_SETSID = 147 // { int setsid(void); }
+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
+ SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
+ SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); }
+ SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }
+ SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); }
+ SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
+ SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }
+ SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }
+ SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); }
+ SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
+ SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
+ SYS_SETFIB = 175 // { int setfib(int fibnum); }
+ SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
+ SYS_SETGID = 181 // { int setgid(gid_t gid); }
+ SYS_SETEGID = 182 // { int setegid(gid_t egid); }
+ SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
+ SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
+ SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
+ SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
+ SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
+ SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
+ SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }
+ SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }
+ SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, off_t offset, int whence); }
+ SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, off_t length); }
+ SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, off_t length); }
+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
+ SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
+ SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
+ SYS_UNDELETE = 205 // { int undelete(char *path); }
+ SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
+ SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
+ SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); }
+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }
+ SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
+ SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }
+ SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
+ SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); }
+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
+ SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); }
+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
+ SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }
+ SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
+ SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
+ SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }
+ SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
+ SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
+ SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); }
+ SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); }
+ SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); }
+ SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
+ SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); }
+ SYS_RFORK = 251 // { int rfork(int flags); }
+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }
+ SYS_ISSETUGID = 253 // { int issetugid(void); }
+ SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
+ SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); }
+ SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); }
+ SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }
+ SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); }
+ SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
+ SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); }
+ SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
+ SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
+ SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
+ SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
+ SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
+ SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
+ SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
+ SYS_MODNEXT = 300 // { int modnext(int modid); }
+ SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); }
+ SYS_MODFNEXT = 302 // { int modfnext(int modid); }
+ SYS_MODFIND = 303 // { int modfind(const char *name); }
+ SYS_KLDLOAD = 304 // { int kldload(const char *file); }
+ SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
+ SYS_KLDFIND = 306 // { int kldfind(const char *file); }
+ SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
+ SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }
+ SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
+ SYS_GETSID = 310 // { int getsid(pid_t pid); }
+ SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
+ SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
+ SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); }
+ SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
+ SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
+ SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); }
+ SYS_OAIO_READ = 318 // { int oaio_read(struct oaiocb *aiocbp); }
+ SYS_OAIO_WRITE = 319 // { int oaio_write(struct oaiocb *aiocbp); }
+ SYS_OLIO_LISTIO = 320 // { int olio_listio(int mode, struct oaiocb * const *acb_list, int nent, struct osigevent *sig); }
+ SYS_YIELD = 321 // { int yield(void); }
+ SYS_MLOCKALL = 324 // { int mlockall(int how); }
+ SYS_MUNLOCKALL = 325 // { int munlockall(void); }
+ SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
+ SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
+ SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
+ SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
+ SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
+ SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
+ SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
+ SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
+ SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
+ SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
+ SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); }
+ SYS_JAIL = 338 // { int jail(struct jail *jail); }
+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
+ SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
+ SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }
+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }
+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
+ SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
+ SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
+ SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); }
+ SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
+ SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
+ SYS_KQUEUE = 362 // { int kqueue(void); }
+ SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
+ SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
+ SYS___SETUGID = 374 // { int __setugid(int flag); }
+ SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
+ SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }
+ SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
+ SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
+ SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }
+ SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }
+ SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }
+ SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }
+ SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); }
+ SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); }
+ SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); }
+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
+ SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); }
+ SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int flags); }
+ SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); }
+ SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
+ SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
+ SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); }
+ SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); }
+ SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); }
+ SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); }
+ SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); }
+ SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }
+ SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); }
+ SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); }
+ SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); }
+ SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }
+ SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }
+ SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }
+ SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); }
+ SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }
+ SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
+ SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); }
+ SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
+ SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); }
+ SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }
+ SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
+ SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }
+ SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); }
+ SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }
+ SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
+ SYS_THR_SELF = 432 // { int thr_self(long *id); }
+ SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
+ SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
+ SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
+ SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
+ SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
+ SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); }
+ SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); }
+ SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }
+ SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); }
+ SYS_THR_WAKE = 443 // { int thr_wake(long id); }
+ SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
+ SYS_AUDIT = 445 // { int audit(const void *record, u_int length); }
+ SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); }
+ SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
+ SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
+ SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
+ SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
+ SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
+ SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
+ SYS_AUDITCTL = 453 // { int auditctl(char *path); }
+ SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }
+ SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); }
+ SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
+ SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }
+ SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }
+ SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
+ SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);}
+ SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }
+ SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); }
+ SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
+ SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
+ SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
+ SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }
+ SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); }
+ SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
+ SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
+ SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
+ SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
+ SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
+ SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }
+ SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); }
+ SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
+ SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
+ SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
+ SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); }
+ SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
+ SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
+ SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }
+ SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }
+ SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }
+ SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }
+ SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); }
+ SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }
+ SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }
+ SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); }
+ SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }
+ SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); }
+ SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
+ SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
+ SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
+ SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
+ SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }
+ SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }
+ SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }
+ SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); }
+ SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
+ SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
+ SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); }
+ SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }
+ SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }
+ SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
+ SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
+ SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
+ SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
+ SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
+ SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
+ SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }
+ SYS_CAP_ENTER = 516 // { int cap_enter(void); }
+ SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
+ SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
+ SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
+ SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
+ SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }
+ SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); }
+ SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
+ SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }
+ SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }
+ SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
+ SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }
+ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }
+ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }
+ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }
+ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }
+ SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }
+ SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }
+ SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }
+ SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }
+ SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
+ SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); }
+ SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }
+ SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }
+ SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); }
+ SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go
index 81722ac9f..73e277fe7 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go
@@ -1,4 +1,4 @@
-// mksysnum_freebsd.pl
+// go run mksysnum.go http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build amd64,freebsd
@@ -7,347 +7,397 @@ package unix
const (
// SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
- SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
- SYS_FORK = 2 // { int fork(void); }
- SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
- SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
- SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
- SYS_CLOSE = 6 // { int close(int fd); }
- SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
- SYS_LINK = 9 // { int link(char *path, char *link); }
- SYS_UNLINK = 10 // { int unlink(char *path); }
- SYS_CHDIR = 12 // { int chdir(char *path); }
- SYS_FCHDIR = 13 // { int fchdir(int fd); }
- SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
- SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
- SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
- SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
- SYS_GETPID = 20 // { pid_t getpid(void); }
- SYS_MOUNT = 21 // { int mount(char *type, char *path, \
- SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
- SYS_SETUID = 23 // { int setuid(uid_t uid); }
- SYS_GETUID = 24 // { uid_t getuid(void); }
- SYS_GETEUID = 25 // { uid_t geteuid(void); }
- SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
- SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
- SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
- SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
- SYS_ACCEPT = 30 // { int accept(int s, \
- SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
- SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
- SYS_ACCESS = 33 // { int access(char *path, int amode); }
- SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
- SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
- SYS_SYNC = 36 // { int sync(void); }
- SYS_KILL = 37 // { int kill(int pid, int signum); }
- SYS_GETPPID = 39 // { pid_t getppid(void); }
- SYS_DUP = 41 // { int dup(u_int fd); }
- SYS_PIPE = 42 // { int pipe(void); }
- SYS_GETEGID = 43 // { gid_t getegid(void); }
- SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
- SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
- SYS_GETGID = 47 // { gid_t getgid(void); }
- SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
- SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
- SYS_ACCT = 51 // { int acct(char *path); }
- SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
- SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
- SYS_REBOOT = 55 // { int reboot(int opt); }
- SYS_REVOKE = 56 // { int revoke(char *path); }
- SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
- SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
- SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
- SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
- SYS_CHROOT = 61 // { int chroot(char *path); }
- SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
- SYS_VFORK = 66 // { int vfork(void); }
- SYS_SBRK = 69 // { int sbrk(int incr); }
- SYS_SSTK = 70 // { int sstk(int incr); }
- SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
- SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
- SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
- SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
- SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
- SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
- SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
- SYS_GETPGRP = 81 // { int getpgrp(void); }
- SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
- SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
- SYS_SWAPON = 85 // { int swapon(char *name); }
- SYS_GETITIMER = 86 // { int getitimer(u_int which, \
- SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
- SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
- SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
- SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
- SYS_FSYNC = 95 // { int fsync(int fd); }
- SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
- SYS_SOCKET = 97 // { int socket(int domain, int type, \
- SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
- SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
- SYS_BIND = 104 // { int bind(int s, caddr_t name, \
- SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
- SYS_LISTEN = 106 // { int listen(int s, int backlog); }
- SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
- SYS_GETRUSAGE = 117 // { int getrusage(int who, \
- SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
- SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
- SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
- SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
- SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
- SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
- SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
- SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
- SYS_RENAME = 128 // { int rename(char *from, char *to); }
- SYS_FLOCK = 131 // { int flock(int fd, int how); }
- SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
- SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
- SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
- SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
- SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
- SYS_RMDIR = 137 // { int rmdir(char *path); }
- SYS_UTIMES = 138 // { int utimes(char *path, \
- SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
- SYS_SETSID = 147 // { int setsid(void); }
- SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
- SYS_LGETFH = 160 // { int lgetfh(char *fname, \
- SYS_GETFH = 161 // { int getfh(char *fname, \
- SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
- SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
- SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \
- SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \
- SYS_SETFIB = 175 // { int setfib(int fibnum); }
- SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
- SYS_SETGID = 181 // { int setgid(gid_t gid); }
- SYS_SETEGID = 182 // { int setegid(gid_t egid); }
- SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
- SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
- SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
- SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
- SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
- SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
- SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
- SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
- SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
- SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \
- SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \
- SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \
- SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \
- SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
- SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
- SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
- SYS_UNDELETE = 205 // { int undelete(char *path); }
- SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
- SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
- SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
- SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
- SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
- SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
- SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
- SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
- SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
- SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
- SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
- SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
- SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
- SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
- SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
- SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
- SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
- SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
- SYS_RFORK = 251 // { int rfork(int flags); }
- SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
- SYS_ISSETUGID = 253 // { int issetugid(void); }
- SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
- SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
- SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
- SYS_LUTIMES = 276 // { int lutimes(char *path, \
- SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
- SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
- SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
- SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
- SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
- SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
- SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
- SYS_MODNEXT = 300 // { int modnext(int modid); }
- SYS_MODSTAT = 301 // { int modstat(int modid, \
- SYS_MODFNEXT = 302 // { int modfnext(int modid); }
- SYS_MODFIND = 303 // { int modfind(const char *name); }
- SYS_KLDLOAD = 304 // { int kldload(const char *file); }
- SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
- SYS_KLDFIND = 306 // { int kldfind(const char *file); }
- SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
- SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
- SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
- SYS_GETSID = 310 // { int getsid(pid_t pid); }
- SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
- SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
- SYS_YIELD = 321 // { int yield(void); }
- SYS_MLOCKALL = 324 // { int mlockall(int how); }
- SYS_MUNLOCKALL = 325 // { int munlockall(void); }
- SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
- SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
- SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
- SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
- SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
- SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
- SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
- SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
- SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
- SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
- SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
- SYS_JAIL = 338 // { int jail(struct jail *jail); }
- SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
- SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
- SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
- SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
- SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
- SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
- SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
- SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
- SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
- SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
- SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
- SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
- SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
- SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
- SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
- SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
- SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
- SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
- SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
- SYS_KQUEUE = 362 // { int kqueue(void); }
- SYS_KEVENT = 363 // { int kevent(int fd, \
- SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
- SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
- SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
- SYS___SETUGID = 374 // { int __setugid(int flag); }
- SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
- SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
- SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
- SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
- SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
- SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
- SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
- SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
- SYS_KENV = 390 // { int kenv(int what, const char *name, \
- SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
- SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
- SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
- SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
- SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
- SYS_STATFS = 396 // { int statfs(char *path, \
- SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
- SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
- SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
- SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
- SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
- SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
- SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
- SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
- SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
- SYS_SIGACTION = 416 // { int sigaction(int sig, \
- SYS_SIGRETURN = 417 // { int sigreturn( \
- SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
- SYS_SETCONTEXT = 422 // { int setcontext( \
- SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
- SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
- SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
- SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
- SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
- SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
- SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
- SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
- SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
- SYS_THR_SELF = 432 // { int thr_self(long *id); }
- SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
- SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
- SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
- SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
- SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
- SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
- SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
- SYS_THR_SUSPEND = 442 // { int thr_suspend( \
- SYS_THR_WAKE = 443 // { int thr_wake(long id); }
- SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
- SYS_AUDIT = 445 // { int audit(const void *record, \
- SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
- SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
- SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
- SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
- SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
- SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
- SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
- SYS_AUDITCTL = 453 // { int auditctl(char *path); }
- SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
- SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
- SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
- SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
- SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
- SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
- SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
- SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
- SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
- SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
- SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
- SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
- SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
- SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
- SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
- SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
- SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
- SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
- SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
- SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
- SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
- SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
- SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
- SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
- SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
- SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
- SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
- SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
- SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
- SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
- SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
- SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
- SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
- SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
- SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
- SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
- SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
- SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
- SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
- SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
- SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
- SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
- SYS_CAP_ENTER = 516 // { int cap_enter(void); }
- SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
- SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
- SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
- SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
- SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
- SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
- SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
- SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
- SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
- SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
- SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
- SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
- SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
- SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
- SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
- SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
- SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
- SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
- SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
- SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
- SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
- SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
- SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
- SYS_ACCEPT4 = 541 // { int accept4(int s, \
- SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
- SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
- SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
- SYS_FUTIMENS = 546 // { int futimens(int fd, \
- SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
+ SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void
+ SYS_FORK = 2 // { int fork(void); }
+ SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); }
+ SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }
+ SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
+ SYS_CLOSE = 6 // { int close(int fd); }
+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); }
+ SYS_LINK = 9 // { int link(char *path, char *link); }
+ SYS_UNLINK = 10 // { int unlink(char *path); }
+ SYS_CHDIR = 12 // { int chdir(char *path); }
+ SYS_FCHDIR = 13 // { int fchdir(int fd); }
+ SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
+ SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
+ SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
+ SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int
+ SYS_GETPID = 20 // { pid_t getpid(void); }
+ SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); }
+ SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
+ SYS_SETUID = 23 // { int setuid(uid_t uid); }
+ SYS_GETUID = 24 // { uid_t getuid(void); }
+ SYS_GETEUID = 25 // { uid_t geteuid(void); }
+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
+ SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); }
+ SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); }
+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }
+ SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }
+ SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
+ SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
+ SYS_ACCESS = 33 // { int access(char *path, int amode); }
+ SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
+ SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
+ SYS_SYNC = 36 // { int sync(void); }
+ SYS_KILL = 37 // { int kill(int pid, int signum); }
+ SYS_GETPPID = 39 // { pid_t getppid(void); }
+ SYS_DUP = 41 // { int dup(u_int fd); }
+ SYS_PIPE = 42 // { int pipe(void); }
+ SYS_GETEGID = 43 // { gid_t getegid(void); }
+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); }
+ SYS_GETGID = 47 // { gid_t getgid(void); }
+ SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); }
+ SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
+ SYS_ACCT = 51 // { int acct(char *path); }
+ SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); }
+ SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); }
+ SYS_REBOOT = 55 // { int reboot(int opt); }
+ SYS_REVOKE = 56 // { int revoke(char *path); }
+ SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
+ SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); }
+ SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); }
+ SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int
+ SYS_CHROOT = 61 // { int chroot(char *path); }
+ SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); }
+ SYS_VFORK = 66 // { int vfork(void); }
+ SYS_SBRK = 69 // { int sbrk(int incr); }
+ SYS_SSTK = 70 // { int sstk(int incr); }
+ SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int
+ SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
+ SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); }
+ SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); }
+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); }
+ SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); }
+ SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); }
+ SYS_GETPGRP = 81 // { int getpgrp(void); }
+ SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
+ SYS_SWAPON = 85 // { int swapon(char *name); }
+ SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); }
+ SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
+ SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
+ SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
+ SYS_FSYNC = 95 // { int fsync(int fd); }
+ SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); }
+ SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); }
+ SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); }
+ SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
+ SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); }
+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
+ SYS_LISTEN = 106 // { int listen(int s, int backlog); }
+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
+ SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); }
+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
+ SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
+ SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
+ SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
+ SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
+ SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
+ SYS_RENAME = 128 // { int rename(char *from, char *to); }
+ SYS_FLOCK = 131 // { int flock(int fd, int how); }
+ SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
+ SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
+ SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
+ SYS_RMDIR = 137 // { int rmdir(char *path); }
+ SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); }
+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
+ SYS_SETSID = 147 // { int setsid(void); }
+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
+ SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
+ SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); }
+ SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }
+ SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); }
+ SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
+ SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }
+ SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }
+ SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); }
+ SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
+ SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
+ SYS_SETFIB = 175 // { int setfib(int fibnum); }
+ SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
+ SYS_SETGID = 181 // { int setgid(gid_t gid); }
+ SYS_SETEGID = 182 // { int setegid(gid_t egid); }
+ SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
+ SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
+ SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
+ SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
+ SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
+ SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
+ SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }
+ SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }
+ SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, off_t offset, int whence); }
+ SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, off_t length); }
+ SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, off_t length); }
+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
+ SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
+ SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
+ SYS_UNDELETE = 205 // { int undelete(char *path); }
+ SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
+ SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
+ SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); }
+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }
+ SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
+ SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }
+ SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
+ SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); }
+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
+ SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); }
+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
+ SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }
+ SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
+ SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
+ SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }
+ SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
+ SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
+ SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); }
+ SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); }
+ SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); }
+ SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
+ SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); }
+ SYS_RFORK = 251 // { int rfork(int flags); }
+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }
+ SYS_ISSETUGID = 253 // { int issetugid(void); }
+ SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
+ SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); }
+ SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); }
+ SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }
+ SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); }
+ SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
+ SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); }
+ SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
+ SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
+ SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
+ SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
+ SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
+ SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
+ SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
+ SYS_MODNEXT = 300 // { int modnext(int modid); }
+ SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); }
+ SYS_MODFNEXT = 302 // { int modfnext(int modid); }
+ SYS_MODFIND = 303 // { int modfind(const char *name); }
+ SYS_KLDLOAD = 304 // { int kldload(const char *file); }
+ SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
+ SYS_KLDFIND = 306 // { int kldfind(const char *file); }
+ SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
+ SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }
+ SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
+ SYS_GETSID = 310 // { int getsid(pid_t pid); }
+ SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
+ SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
+ SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); }
+ SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
+ SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
+ SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); }
+ SYS_OAIO_READ = 318 // { int oaio_read(struct oaiocb *aiocbp); }
+ SYS_OAIO_WRITE = 319 // { int oaio_write(struct oaiocb *aiocbp); }
+ SYS_OLIO_LISTIO = 320 // { int olio_listio(int mode, struct oaiocb * const *acb_list, int nent, struct osigevent *sig); }
+ SYS_YIELD = 321 // { int yield(void); }
+ SYS_MLOCKALL = 324 // { int mlockall(int how); }
+ SYS_MUNLOCKALL = 325 // { int munlockall(void); }
+ SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
+ SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
+ SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
+ SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
+ SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
+ SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
+ SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
+ SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
+ SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
+ SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
+ SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); }
+ SYS_JAIL = 338 // { int jail(struct jail *jail); }
+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
+ SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
+ SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }
+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }
+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
+ SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
+ SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
+ SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); }
+ SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
+ SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
+ SYS_KQUEUE = 362 // { int kqueue(void); }
+ SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
+ SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
+ SYS___SETUGID = 374 // { int __setugid(int flag); }
+ SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
+ SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }
+ SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
+ SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
+ SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }
+ SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }
+ SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }
+ SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }
+ SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); }
+ SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); }
+ SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); }
+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
+ SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); }
+ SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int flags); }
+ SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); }
+ SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
+ SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
+ SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); }
+ SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); }
+ SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); }
+ SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); }
+ SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); }
+ SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }
+ SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); }
+ SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); }
+ SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); }
+ SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }
+ SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }
+ SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }
+ SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); }
+ SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }
+ SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
+ SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); }
+ SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
+ SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); }
+ SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }
+ SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
+ SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }
+ SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); }
+ SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }
+ SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
+ SYS_THR_SELF = 432 // { int thr_self(long *id); }
+ SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
+ SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
+ SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
+ SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
+ SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
+ SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); }
+ SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); }
+ SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }
+ SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); }
+ SYS_THR_WAKE = 443 // { int thr_wake(long id); }
+ SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
+ SYS_AUDIT = 445 // { int audit(const void *record, u_int length); }
+ SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); }
+ SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
+ SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
+ SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
+ SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
+ SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
+ SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
+ SYS_AUDITCTL = 453 // { int auditctl(char *path); }
+ SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }
+ SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); }
+ SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
+ SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }
+ SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }
+ SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
+ SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);}
+ SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }
+ SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); }
+ SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
+ SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
+ SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
+ SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }
+ SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); }
+ SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
+ SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
+ SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
+ SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
+ SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
+ SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }
+ SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); }
+ SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
+ SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
+ SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
+ SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); }
+ SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
+ SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
+ SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }
+ SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }
+ SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }
+ SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }
+ SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); }
+ SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }
+ SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }
+ SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); }
+ SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }
+ SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); }
+ SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
+ SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
+ SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
+ SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
+ SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }
+ SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }
+ SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }
+ SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); }
+ SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
+ SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
+ SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); }
+ SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }
+ SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }
+ SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
+ SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
+ SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
+ SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
+ SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
+ SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
+ SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }
+ SYS_CAP_ENTER = 516 // { int cap_enter(void); }
+ SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
+ SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
+ SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
+ SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
+ SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }
+ SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); }
+ SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
+ SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }
+ SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }
+ SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
+ SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }
+ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }
+ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }
+ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }
+ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }
+ SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }
+ SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }
+ SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }
+ SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }
+ SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
+ SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); }
+ SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }
+ SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }
+ SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); }
+ SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go
index 448831418..e12b46919 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go
@@ -1,4 +1,4 @@
-// mksysnum_freebsd.pl
+// go run mksysnum.go http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build arm,freebsd
@@ -7,347 +7,397 @@ package unix
const (
// SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
- SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
- SYS_FORK = 2 // { int fork(void); }
- SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
- SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
- SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
- SYS_CLOSE = 6 // { int close(int fd); }
- SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
- SYS_LINK = 9 // { int link(char *path, char *link); }
- SYS_UNLINK = 10 // { int unlink(char *path); }
- SYS_CHDIR = 12 // { int chdir(char *path); }
- SYS_FCHDIR = 13 // { int fchdir(int fd); }
- SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
- SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
- SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
- SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
- SYS_GETPID = 20 // { pid_t getpid(void); }
- SYS_MOUNT = 21 // { int mount(char *type, char *path, \
- SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
- SYS_SETUID = 23 // { int setuid(uid_t uid); }
- SYS_GETUID = 24 // { uid_t getuid(void); }
- SYS_GETEUID = 25 // { uid_t geteuid(void); }
- SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
- SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
- SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
- SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
- SYS_ACCEPT = 30 // { int accept(int s, \
- SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
- SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
- SYS_ACCESS = 33 // { int access(char *path, int amode); }
- SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
- SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
- SYS_SYNC = 36 // { int sync(void); }
- SYS_KILL = 37 // { int kill(int pid, int signum); }
- SYS_GETPPID = 39 // { pid_t getppid(void); }
- SYS_DUP = 41 // { int dup(u_int fd); }
- SYS_PIPE = 42 // { int pipe(void); }
- SYS_GETEGID = 43 // { gid_t getegid(void); }
- SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
- SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
- SYS_GETGID = 47 // { gid_t getgid(void); }
- SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
- SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
- SYS_ACCT = 51 // { int acct(char *path); }
- SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
- SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
- SYS_REBOOT = 55 // { int reboot(int opt); }
- SYS_REVOKE = 56 // { int revoke(char *path); }
- SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
- SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
- SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
- SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
- SYS_CHROOT = 61 // { int chroot(char *path); }
- SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
- SYS_VFORK = 66 // { int vfork(void); }
- SYS_SBRK = 69 // { int sbrk(int incr); }
- SYS_SSTK = 70 // { int sstk(int incr); }
- SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
- SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
- SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
- SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
- SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
- SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
- SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
- SYS_GETPGRP = 81 // { int getpgrp(void); }
- SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
- SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
- SYS_SWAPON = 85 // { int swapon(char *name); }
- SYS_GETITIMER = 86 // { int getitimer(u_int which, \
- SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
- SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
- SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
- SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
- SYS_FSYNC = 95 // { int fsync(int fd); }
- SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
- SYS_SOCKET = 97 // { int socket(int domain, int type, \
- SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
- SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
- SYS_BIND = 104 // { int bind(int s, caddr_t name, \
- SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
- SYS_LISTEN = 106 // { int listen(int s, int backlog); }
- SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
- SYS_GETRUSAGE = 117 // { int getrusage(int who, \
- SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
- SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
- SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
- SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
- SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
- SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
- SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
- SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
- SYS_RENAME = 128 // { int rename(char *from, char *to); }
- SYS_FLOCK = 131 // { int flock(int fd, int how); }
- SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
- SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
- SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
- SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
- SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
- SYS_RMDIR = 137 // { int rmdir(char *path); }
- SYS_UTIMES = 138 // { int utimes(char *path, \
- SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
- SYS_SETSID = 147 // { int setsid(void); }
- SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
- SYS_LGETFH = 160 // { int lgetfh(char *fname, \
- SYS_GETFH = 161 // { int getfh(char *fname, \
- SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
- SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
- SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \
- SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \
- SYS_SETFIB = 175 // { int setfib(int fibnum); }
- SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
- SYS_SETGID = 181 // { int setgid(gid_t gid); }
- SYS_SETEGID = 182 // { int setegid(gid_t egid); }
- SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
- SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
- SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
- SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
- SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
- SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
- SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
- SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
- SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
- SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \
- SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \
- SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \
- SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \
- SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
- SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
- SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
- SYS_UNDELETE = 205 // { int undelete(char *path); }
- SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
- SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
- SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
- SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
- SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
- SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
- SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
- SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
- SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
- SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
- SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
- SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
- SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
- SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
- SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
- SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
- SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
- SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
- SYS_RFORK = 251 // { int rfork(int flags); }
- SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
- SYS_ISSETUGID = 253 // { int issetugid(void); }
- SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
- SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
- SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
- SYS_LUTIMES = 276 // { int lutimes(char *path, \
- SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
- SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
- SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
- SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
- SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
- SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
- SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
- SYS_MODNEXT = 300 // { int modnext(int modid); }
- SYS_MODSTAT = 301 // { int modstat(int modid, \
- SYS_MODFNEXT = 302 // { int modfnext(int modid); }
- SYS_MODFIND = 303 // { int modfind(const char *name); }
- SYS_KLDLOAD = 304 // { int kldload(const char *file); }
- SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
- SYS_KLDFIND = 306 // { int kldfind(const char *file); }
- SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
- SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
- SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
- SYS_GETSID = 310 // { int getsid(pid_t pid); }
- SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
- SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
- SYS_YIELD = 321 // { int yield(void); }
- SYS_MLOCKALL = 324 // { int mlockall(int how); }
- SYS_MUNLOCKALL = 325 // { int munlockall(void); }
- SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
- SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
- SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
- SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
- SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
- SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
- SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
- SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
- SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
- SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
- SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
- SYS_JAIL = 338 // { int jail(struct jail *jail); }
- SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
- SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
- SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
- SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
- SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
- SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
- SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
- SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
- SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
- SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
- SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
- SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
- SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
- SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
- SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
- SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
- SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
- SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
- SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
- SYS_KQUEUE = 362 // { int kqueue(void); }
- SYS_KEVENT = 363 // { int kevent(int fd, \
- SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
- SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
- SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
- SYS___SETUGID = 374 // { int __setugid(int flag); }
- SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
- SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
- SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
- SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
- SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
- SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
- SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
- SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
- SYS_KENV = 390 // { int kenv(int what, const char *name, \
- SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
- SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
- SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
- SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
- SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
- SYS_STATFS = 396 // { int statfs(char *path, \
- SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
- SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
- SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
- SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
- SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
- SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
- SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
- SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
- SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
- SYS_SIGACTION = 416 // { int sigaction(int sig, \
- SYS_SIGRETURN = 417 // { int sigreturn( \
- SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
- SYS_SETCONTEXT = 422 // { int setcontext( \
- SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
- SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
- SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
- SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
- SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
- SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
- SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
- SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
- SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
- SYS_THR_SELF = 432 // { int thr_self(long *id); }
- SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
- SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
- SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
- SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
- SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
- SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
- SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
- SYS_THR_SUSPEND = 442 // { int thr_suspend( \
- SYS_THR_WAKE = 443 // { int thr_wake(long id); }
- SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
- SYS_AUDIT = 445 // { int audit(const void *record, \
- SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
- SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
- SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
- SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
- SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
- SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
- SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
- SYS_AUDITCTL = 453 // { int auditctl(char *path); }
- SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
- SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
- SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
- SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
- SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
- SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
- SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
- SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
- SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
- SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
- SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
- SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
- SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
- SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
- SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
- SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
- SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
- SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
- SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
- SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
- SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
- SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
- SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
- SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
- SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
- SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
- SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
- SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
- SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
- SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
- SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
- SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
- SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
- SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
- SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
- SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
- SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
- SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
- SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
- SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
- SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
- SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
- SYS_CAP_ENTER = 516 // { int cap_enter(void); }
- SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
- SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
- SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
- SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
- SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
- SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
- SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
- SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
- SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
- SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
- SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
- SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
- SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
- SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
- SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
- SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
- SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
- SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
- SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
- SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
- SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
- SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
- SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
- SYS_ACCEPT4 = 541 // { int accept4(int s, \
- SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
- SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
- SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
- SYS_FUTIMENS = 546 // { int futimens(int fd, \
- SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
+ SYS_EXIT = 1 // { void sys_exit(int rval); } exit sys_exit_args void
+ SYS_FORK = 2 // { int fork(void); }
+ SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); }
+ SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }
+ SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
+ SYS_CLOSE = 6 // { int close(int fd); }
+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); }
+ SYS_LINK = 9 // { int link(char *path, char *link); }
+ SYS_UNLINK = 10 // { int unlink(char *path); }
+ SYS_CHDIR = 12 // { int chdir(char *path); }
+ SYS_FCHDIR = 13 // { int fchdir(int fd); }
+ SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
+ SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
+ SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
+ SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int
+ SYS_GETPID = 20 // { pid_t getpid(void); }
+ SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, caddr_t data); }
+ SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
+ SYS_SETUID = 23 // { int setuid(uid_t uid); }
+ SYS_GETUID = 24 // { uid_t getuid(void); }
+ SYS_GETEUID = 25 // { uid_t geteuid(void); }
+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }
+ SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); }
+ SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, int flags); }
+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }
+ SYS_ACCEPT = 30 // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }
+ SYS_GETPEERNAME = 31 // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
+ SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }
+ SYS_ACCESS = 33 // { int access(char *path, int amode); }
+ SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
+ SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
+ SYS_SYNC = 36 // { int sync(void); }
+ SYS_KILL = 37 // { int kill(int pid, int signum); }
+ SYS_GETPPID = 39 // { pid_t getppid(void); }
+ SYS_DUP = 41 // { int dup(u_int fd); }
+ SYS_PIPE = 42 // { int pipe(void); }
+ SYS_GETEGID = 43 // { gid_t getegid(void); }
+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }
+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, int pid); }
+ SYS_GETGID = 47 // { gid_t getgid(void); }
+ SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); }
+ SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
+ SYS_ACCT = 51 // { int acct(char *path); }
+ SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); }
+ SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); }
+ SYS_REBOOT = 55 // { int reboot(int opt); }
+ SYS_REVOKE = 56 // { int revoke(char *path); }
+ SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
+ SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, size_t count); }
+ SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); }
+ SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int
+ SYS_CHROOT = 61 // { int chroot(char *path); }
+ SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); }
+ SYS_VFORK = 66 // { int vfork(void); }
+ SYS_SBRK = 69 // { int sbrk(int incr); }
+ SYS_SSTK = 70 // { int sstk(int incr); }
+ SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise ovadvise_args int
+ SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
+ SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, int prot); }
+ SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); }
+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, char *vec); }
+ SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); }
+ SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); }
+ SYS_GETPGRP = 81 // { int getpgrp(void); }
+ SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }
+ SYS_SWAPON = 85 // { int swapon(char *name); }
+ SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); }
+ SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
+ SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
+ SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
+ SYS_FSYNC = 95 // { int fsync(int fd); }
+ SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); }
+ SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); }
+ SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); }
+ SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
+ SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); }
+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }
+ SYS_LISTEN = 106 // { int listen(int s, int backlog); }
+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }
+ SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); }
+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }
+ SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }
+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }
+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }
+ SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
+ SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
+ SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
+ SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
+ SYS_RENAME = 128 // { int rename(char *from, char *to); }
+ SYS_FLOCK = 131 // { int flock(int fd, int how); }
+ SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }
+ SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }
+ SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
+ SYS_RMDIR = 137 // { int rmdir(char *path); }
+ SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); }
+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }
+ SYS_SETSID = 147 // { int setsid(void); }
+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }
+ SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
+ SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); }
+ SYS_LGETFH = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }
+ SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); }
+ SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }
+ SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }
+ SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }
+ SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, int a4); }
+ SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
+ SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
+ SYS_SETFIB = 175 // { int setfib(int fibnum); }
+ SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
+ SYS_SETGID = 181 // { int setgid(gid_t gid); }
+ SYS_SETEGID = 182 // { int setegid(gid_t egid); }
+ SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
+ SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
+ SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
+ SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
+ SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
+ SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int
+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int
+ SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }
+ SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }
+ SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, off_t offset, int whence); }
+ SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, off_t length); }
+ SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, off_t length); }
+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int
+ SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
+ SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
+ SYS_UNDELETE = 205 // { int undelete(char *path); }
+ SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
+ SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }
+ SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); }
+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }
+ SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
+ SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }
+ SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
+ SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); }
+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }
+ SYS_CLOCK_SETTIME = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); }
+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }
+ SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }
+ SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
+ SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }
+ SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }
+ SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
+ SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
+ SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); }
+ SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); }
+ SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); }
+ SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
+ SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); }
+ SYS_RFORK = 251 // { int rfork(int flags); }
+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }
+ SYS_ISSETUGID = 253 // { int issetugid(void); }
+ SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
+ SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); }
+ SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); }
+ SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }
+ SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, size_t count); }
+ SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
+ SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); }
+ SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
+ SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
+ SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
+ SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
+ SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }
+ SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }
+ SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }
+ SYS_MODNEXT = 300 // { int modnext(int modid); }
+ SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat *stat); }
+ SYS_MODFNEXT = 302 // { int modfnext(int modid); }
+ SYS_MODFIND = 303 // { int modfind(const char *name); }
+ SYS_KLDLOAD = 304 // { int kldload(const char *file); }
+ SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
+ SYS_KLDFIND = 306 // { int kldfind(const char *file); }
+ SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
+ SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }
+ SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
+ SYS_GETSID = 310 // { int getsid(pid_t pid); }
+ SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
+ SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
+ SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); }
+ SYS_AIO_SUSPEND = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }
+ SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }
+ SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); }
+ SYS_OAIO_READ = 318 // { int oaio_read(struct oaiocb *aiocbp); }
+ SYS_OAIO_WRITE = 319 // { int oaio_write(struct oaiocb *aiocbp); }
+ SYS_OLIO_LISTIO = 320 // { int olio_listio(int mode, struct oaiocb * const *acb_list, int nent, struct osigevent *sig); }
+ SYS_YIELD = 321 // { int yield(void); }
+ SYS_MLOCKALL = 324 // { int mlockall(int how); }
+ SYS_MUNLOCKALL = 325 // { int munlockall(void); }
+ SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
+ SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }
+ SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }
+ SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }
+ SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
+ SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
+ SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
+ SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
+ SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }
+ SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
+ SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); }
+ SYS_JAIL = 338 // { int jail(struct jail *jail); }
+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }
+ SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
+ SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }
+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }
+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }
+ SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }
+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }
+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }
+ SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }
+ SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); }
+ SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
+ SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
+ SYS_KQUEUE = 362 // { int kqueue(void); }
+ SYS_KEVENT = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
+ SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }
+ SYS___SETUGID = 374 // { int __setugid(int flag); }
+ SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
+ SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }
+ SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
+ SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
+ SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }
+ SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }
+ SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }
+ SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }
+ SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); }
+ SYS_LCHFLAGS = 391 // { int lchflags(const char *path, u_long flags); }
+ SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); }
+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }
+ SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, int call, void *arg); }
+ SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, long bufsize, int flags); }
+ SYS_STATFS = 396 // { int statfs(char *path, struct statfs *buf); }
+ SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
+ SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }
+ SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); }
+ SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); }
+ SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); }
+ SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); }
+ SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, unsigned int value); }
+ SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }
+ SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); }
+ SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); }
+ SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); }
+ SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }
+ SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }
+ SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }
+ SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }
+ SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); }
+ SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }
+ SYS_SIGACTION = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }
+ SYS_SIGRETURN = 417 // { int sigreturn( const struct __ucontext *sigcntxp); }
+ SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
+ SYS_SETCONTEXT = 422 // { int setcontext( const struct __ucontext *ucp); }
+ SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }
+ SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
+ SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }
+ SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }
+ SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, int *sig); }
+ SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }
+ SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
+ SYS_THR_SELF = 432 // { int thr_self(long *id); }
+ SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
+ SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); }
+ SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); }
+ SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
+ SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }
+ SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); }
+ SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); }
+ SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }
+ SYS_THR_SUSPEND = 442 // { int thr_suspend( const struct timespec *timeout); }
+ SYS_THR_WAKE = 443 // { int thr_wake(long id); }
+ SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
+ SYS_AUDIT = 445 // { int audit(const void *record, u_int length); }
+ SYS_AUDITON = 446 // { int auditon(int cmd, void *data, u_int length); }
+ SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
+ SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
+ SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
+ SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
+ SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
+ SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }
+ SYS_AUDITCTL = 453 // { int auditctl(char *path); }
+ SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }
+ SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, int param_size); }
+ SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
+ SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }
+ SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }
+ SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }
+ SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len,unsigned msg_prio, const struct timespec *abs_timeout);}
+ SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }
+ SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); }
+ SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
+ SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
+ SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
+ SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }
+ SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); }
+ SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
+ SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }
+ SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr * from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
+ SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }
+ SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }
+ SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }
+ SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, int whence); }
+ SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
+ SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
+ SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
+ SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, mode_t mode); }
+ SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
+ SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
+ SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }
+ SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }
+ SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }
+ SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }
+ SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, int flag); }
+ SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }
+ SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }
+ SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, char **envv); }
+ SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }
+ SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, struct timeval *times); }
+ SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }
+ SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
+ SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
+ SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }
+ SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }
+ SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }
+ SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }
+ SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, char *path2); }
+ SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
+ SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
+ SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); }
+ SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }
+ SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }
+ SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
+ SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
+ SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }
+ SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }
+ SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }
+ SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
+ SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }
+ SYS_CAP_ENTER = 516 // { int cap_enter(void); }
+ SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
+ SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
+ SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
+ SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
+ SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }
+ SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, size_t namelen); }
+ SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
+ SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }
+ SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }
+ SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }
+ SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }
+ SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }
+ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }
+ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }
+ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }
+ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }
+ SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }
+ SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }
+ SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }
+ SYS_ACCEPT4 = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }
+ SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
+ SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); }
+ SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }
+ SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }
+ SYS_FUTIMENS = 546 // { int futimens(int fd, struct timespec *times); }
+ SYS_UTIMENSAT = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go
new file mode 100644
index 000000000..8c1e16ca5
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go
@@ -0,0 +1,395 @@
+// mksysnum_freebsd.pl
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build arm64,freebsd
+
+package unix
+
+const (
+ // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int
+ SYS_EXIT = 1 // { void sys_exit(int rval); } exit \
+ SYS_FORK = 2 // { int fork(void); }
+ SYS_READ = 3 // { ssize_t read(int fd, void *buf, \
+ SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \
+ SYS_OPEN = 5 // { int open(char *path, int flags, int mode); }
+ SYS_CLOSE = 6 // { int close(int fd); }
+ SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \
+ SYS_LINK = 9 // { int link(char *path, char *link); }
+ SYS_UNLINK = 10 // { int unlink(char *path); }
+ SYS_CHDIR = 12 // { int chdir(char *path); }
+ SYS_FCHDIR = 13 // { int fchdir(int fd); }
+ SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); }
+ SYS_CHMOD = 15 // { int chmod(char *path, int mode); }
+ SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); }
+ SYS_OBREAK = 17 // { int obreak(char *nsize); } break \
+ SYS_GETPID = 20 // { pid_t getpid(void); }
+ SYS_MOUNT = 21 // { int mount(char *type, char *path, \
+ SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); }
+ SYS_SETUID = 23 // { int setuid(uid_t uid); }
+ SYS_GETUID = 24 // { uid_t getuid(void); }
+ SYS_GETEUID = 25 // { uid_t geteuid(void); }
+ SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \
+ SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \
+ SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \
+ SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \
+ SYS_ACCEPT = 30 // { int accept(int s, \
+ SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \
+ SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \
+ SYS_ACCESS = 33 // { int access(char *path, int amode); }
+ SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); }
+ SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); }
+ SYS_SYNC = 36 // { int sync(void); }
+ SYS_KILL = 37 // { int kill(int pid, int signum); }
+ SYS_GETPPID = 39 // { pid_t getppid(void); }
+ SYS_DUP = 41 // { int dup(u_int fd); }
+ SYS_GETEGID = 43 // { gid_t getegid(void); }
+ SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \
+ SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \
+ SYS_GETGID = 47 // { gid_t getgid(void); }
+ SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \
+ SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); }
+ SYS_ACCT = 51 // { int acct(char *path); }
+ SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \
+ SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \
+ SYS_REBOOT = 55 // { int reboot(int opt); }
+ SYS_REVOKE = 56 // { int revoke(char *path); }
+ SYS_SYMLINK = 57 // { int symlink(char *path, char *link); }
+ SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \
+ SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \
+ SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \
+ SYS_CHROOT = 61 // { int chroot(char *path); }
+ SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \
+ SYS_VFORK = 66 // { int vfork(void); }
+ SYS_SBRK = 69 // { int sbrk(int incr); }
+ SYS_SSTK = 70 // { int sstk(int incr); }
+ SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \
+ SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); }
+ SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \
+ SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \
+ SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \
+ SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \
+ SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \
+ SYS_GETPGRP = 81 // { int getpgrp(void); }
+ SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); }
+ SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \
+ SYS_SWAPON = 85 // { int swapon(char *name); }
+ SYS_GETITIMER = 86 // { int getitimer(u_int which, \
+ SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); }
+ SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); }
+ SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); }
+ SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \
+ SYS_FSYNC = 95 // { int fsync(int fd); }
+ SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \
+ SYS_SOCKET = 97 // { int socket(int domain, int type, \
+ SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \
+ SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); }
+ SYS_BIND = 104 // { int bind(int s, caddr_t name, \
+ SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \
+ SYS_LISTEN = 106 // { int listen(int s, int backlog); }
+ SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \
+ SYS_GETRUSAGE = 117 // { int getrusage(int who, \
+ SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \
+ SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \
+ SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \
+ SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \
+ SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); }
+ SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); }
+ SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); }
+ SYS_SETREGID = 127 // { int setregid(int rgid, int egid); }
+ SYS_RENAME = 128 // { int rename(char *from, char *to); }
+ SYS_FLOCK = 131 // { int flock(int fd, int how); }
+ SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); }
+ SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \
+ SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); }
+ SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \
+ SYS_MKDIR = 136 // { int mkdir(char *path, int mode); }
+ SYS_RMDIR = 137 // { int rmdir(char *path); }
+ SYS_UTIMES = 138 // { int utimes(char *path, \
+ SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \
+ SYS_SETSID = 147 // { int setsid(void); }
+ SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \
+ SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }
+ SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); }
+ SYS_LGETFH = 160 // { int lgetfh(char *fname, \
+ SYS_GETFH = 161 // { int getfh(char *fname, \
+ SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); }
+ SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \
+ SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, \
+ SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, \
+ SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, \
+ SYS_SETFIB = 175 // { int setfib(int fibnum); }
+ SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); }
+ SYS_SETGID = 181 // { int setgid(gid_t gid); }
+ SYS_SETEGID = 182 // { int setegid(gid_t egid); }
+ SYS_SETEUID = 183 // { int seteuid(uid_t euid); }
+ SYS_STAT = 188 // { int stat(char *path, struct stat *ub); }
+ SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); }
+ SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); }
+ SYS_PATHCONF = 191 // { int pathconf(char *path, int name); }
+ SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); }
+ SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \
+ SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \
+ SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \
+ SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \
+ SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); }
+ SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); }
+ SYS_UNDELETE = 205 // { int undelete(char *path); }
+ SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); }
+ SYS_GETPGID = 207 // { int getpgid(pid_t pid); }
+ SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \
+ SYS_SEMGET = 221 // { int semget(key_t key, int nsems, \
+ SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \
+ SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); }
+ SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, \
+ SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, \
+ SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, \
+ SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); }
+ SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, \
+ SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \
+ SYS_CLOCK_SETTIME = 233 // { int clock_settime( \
+ SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \
+ SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \
+ SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); }
+ SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \
+ SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \
+ SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); }
+ SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \
+ SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); }
+ SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \
+ SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \
+ SYS_CLOCK_NANOSLEEP = 244 // { int clock_nanosleep(clockid_t clock_id, \
+ SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\
+ SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }
+ SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \
+ SYS_RFORK = 251 // { int rfork(int flags); }
+ SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \
+ SYS_ISSETUGID = 253 // { int issetugid(void); }
+ SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); }
+ SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); }
+ SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); }
+ SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, \
+ SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \
+ SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); }
+ SYS_LUTIMES = 276 // { int lutimes(char *path, \
+ SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); }
+ SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); }
+ SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); }
+ SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \
+ SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \
+ SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \
+ SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \
+ SYS_MODNEXT = 300 // { int modnext(int modid); }
+ SYS_MODSTAT = 301 // { int modstat(int modid, \
+ SYS_MODFNEXT = 302 // { int modfnext(int modid); }
+ SYS_MODFIND = 303 // { int modfind(const char *name); }
+ SYS_KLDLOAD = 304 // { int kldload(const char *file); }
+ SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); }
+ SYS_KLDFIND = 306 // { int kldfind(const char *file); }
+ SYS_KLDNEXT = 307 // { int kldnext(int fileid); }
+ SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \
+ SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); }
+ SYS_GETSID = 310 // { int getsid(pid_t pid); }
+ SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \
+ SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \
+ SYS_AIO_RETURN = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }
+ SYS_AIO_SUSPEND = 315 // { int aio_suspend( \
+ SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, \
+ SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); }
+ SYS_YIELD = 321 // { int yield(void); }
+ SYS_MLOCKALL = 324 // { int mlockall(int how); }
+ SYS_MUNLOCKALL = 325 // { int munlockall(void); }
+ SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); }
+ SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \
+ SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \
+ SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \
+ SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); }
+ SYS_SCHED_YIELD = 331 // { int sched_yield (void); }
+ SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }
+ SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }
+ SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \
+ SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); }
+ SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \
+ SYS_JAIL = 338 // { int jail(struct jail *jail); }
+ SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \
+ SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); }
+ SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); }
+ SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \
+ SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \
+ SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \
+ SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \
+ SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \
+ SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \
+ SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \
+ SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \
+ SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \
+ SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \
+ SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \
+ SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \
+ SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \
+ SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \
+ SYS_AIO_WAITCOMPLETE = 359 // { ssize_t aio_waitcomplete( \
+ SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \
+ SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \
+ SYS_KQUEUE = 362 // { int kqueue(void); }
+ SYS_KEVENT = 363 // { int kevent(int fd, \
+ SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \
+ SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \
+ SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \
+ SYS___SETUGID = 374 // { int __setugid(int flag); }
+ SYS_EACCESS = 376 // { int eaccess(char *path, int amode); }
+ SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \
+ SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); }
+ SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); }
+ SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \
+ SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \
+ SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \
+ SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \
+ SYS_KENV = 390 // { int kenv(int what, const char *name, \
+ SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \
+ SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \
+ SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \
+ SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \
+ SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \
+ SYS_STATFS = 396 // { int statfs(char *path, \
+ SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); }
+ SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \
+ SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); }
+ SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); }
+ SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); }
+ SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); }
+ SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, \
+ SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, \
+ SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); }
+ SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); }
+ SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); }
+ SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \
+ SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \
+ SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \
+ SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \
+ SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \
+ SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \
+ SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \
+ SYS_SIGACTION = 416 // { int sigaction(int sig, \
+ SYS_SIGRETURN = 417 // { int sigreturn( \
+ SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); }
+ SYS_SETCONTEXT = 422 // { int setcontext( \
+ SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \
+ SYS_SWAPOFF = 424 // { int swapoff(const char *name); }
+ SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \
+ SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \
+ SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \
+ SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \
+ SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \
+ SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \
+ SYS_THR_EXIT = 431 // { void thr_exit(long *state); }
+ SYS_THR_SELF = 432 // { int thr_self(long *id); }
+ SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); }
+ SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); }
+ SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \
+ SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \
+ SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \
+ SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, \
+ SYS_THR_SUSPEND = 442 // { int thr_suspend( \
+ SYS_THR_WAKE = 443 // { int thr_wake(long id); }
+ SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); }
+ SYS_AUDIT = 445 // { int audit(const void *record, \
+ SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \
+ SYS_GETAUID = 447 // { int getauid(uid_t *auid); }
+ SYS_SETAUID = 448 // { int setauid(uid_t *auid); }
+ SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); }
+ SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); }
+ SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \
+ SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \
+ SYS_AUDITCTL = 453 // { int auditctl(char *path); }
+ SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \
+ SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \
+ SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); }
+ SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, \
+ SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, \
+ SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, \
+ SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, \
+ SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, \
+ SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); }
+ SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); }
+ SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); }
+ SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }
+ SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \
+ SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); }
+ SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \
+ SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \
+ SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \
+ SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \
+ SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \
+ SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \
+ SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \
+ SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); }
+ SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); }
+ SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); }
+ SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \
+ SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); }
+ SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); }
+ SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \
+ SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \
+ SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \
+ SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \
+ SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \
+ SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \
+ SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \
+ SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \
+ SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \
+ SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \
+ SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \
+ SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); }
+ SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }
+ SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \
+ SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \
+ SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \
+ SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \
+ SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \
+ SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); }
+ SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); }
+ SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); }
+ SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \
+ SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \
+ SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); }
+ SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); }
+ SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, \
+ SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, \
+ SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, \
+ SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); }
+ SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \
+ SYS_CAP_ENTER = 516 // { int cap_enter(void); }
+ SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }
+ SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); }
+ SYS_PDKILL = 519 // { int pdkill(int fd, int signum); }
+ SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); }
+ SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \
+ SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \
+ SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); }
+ SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \
+ SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \
+ SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \
+ SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \
+ SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \
+ SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \
+ SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \
+ SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \
+ SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \
+ SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \
+ SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \
+ SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \
+ SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \
+ SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \
+ SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \
+ SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \
+ SYS_ACCEPT4 = 541 // { int accept4(int s, \
+ SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); }
+ SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); }
+ SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \
+ SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \
+ SYS_FUTIMENS = 546 // { int futimens(int fd, \
+ SYS_UTIMENSAT = 547 // { int utimensat(int fd, \
+ SYS_NUMA_GETAFFINITY = 548 // { int numa_getaffinity(cpuwhich_t which, \
+ SYS_NUMA_SETAFFINITY = 549 // { int numa_setaffinity(cpuwhich_t which, \
+ SYS_FDATASYNC = 550 // { int fdatasync(int fd); }
+)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
index 95ab12903..8d17873de 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
@@ -1,4 +1,4 @@
-// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m32 /tmp/include/asm/unistd.h
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -m32 /tmp/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build 386,linux
@@ -387,4 +387,6 @@ const (
SYS_PKEY_FREE = 382
SYS_STATX = 383
SYS_ARCH_PRCTL = 384
+ SYS_IO_PGETEVENTS = 385
+ SYS_RSEQ = 386
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
index c5dabf2e4..b3d8ad79d 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
@@ -1,4 +1,4 @@
-// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m64 /tmp/include/asm/unistd.h
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -m64 /tmp/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build amd64,linux
@@ -339,4 +339,6 @@ const (
SYS_PKEY_ALLOC = 330
SYS_PKEY_FREE = 331
SYS_STATX = 332
+ SYS_IO_PGETEVENTS = 333
+ SYS_RSEQ = 334
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
index ab7fa5fd3..e092822fb 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
@@ -1,4 +1,4 @@
-// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build arm,linux
@@ -359,4 +359,6 @@ const (
SYS_PKEY_ALLOC = 395
SYS_PKEY_FREE = 396
SYS_STATX = 397
+ SYS_RSEQ = 398
+ SYS_IO_PGETEVENTS = 399
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
index b1c6b4bd3..320696789 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
@@ -1,4 +1,4 @@
-// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build arm64,linux
@@ -283,4 +283,6 @@ const (
SYS_PKEY_ALLOC = 289
SYS_PKEY_FREE = 290
SYS_STATX = 291
+ SYS_IO_PGETEVENTS = 292
+ SYS_RSEQ = 293
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
index 2e9aa7a3e..6893a5bd0 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
@@ -1,4 +1,4 @@
-// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build mips,linux
@@ -372,4 +372,6 @@ const (
SYS_PKEY_ALLOC = 4364
SYS_PKEY_FREE = 4365
SYS_STATX = 4366
+ SYS_RSEQ = 4367
+ SYS_IO_PGETEVENTS = 4368
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
index 92827635a..40164cacd 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
@@ -1,4 +1,4 @@
-// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build mips64,linux
@@ -332,4 +332,6 @@ const (
SYS_PKEY_ALLOC = 5324
SYS_PKEY_FREE = 5325
SYS_STATX = 5326
+ SYS_RSEQ = 5327
+ SYS_IO_PGETEVENTS = 5328
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
index 45bd3fd6c..8a909738b 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
@@ -1,4 +1,4 @@
-// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build mips64le,linux
@@ -332,4 +332,6 @@ const (
SYS_PKEY_ALLOC = 5324
SYS_PKEY_FREE = 5325
SYS_STATX = 5326
+ SYS_RSEQ = 5327
+ SYS_IO_PGETEVENTS = 5328
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
index 62ccac4b7..8d7818422 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
@@ -1,4 +1,4 @@
-// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build mipsle,linux
@@ -372,4 +372,6 @@ const (
SYS_PKEY_ALLOC = 4364
SYS_PKEY_FREE = 4365
SYS_STATX = 4366
+ SYS_RSEQ = 4367
+ SYS_IO_PGETEVENTS = 4368
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
index 384d49bfa..ec5bde3d5 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
@@ -1,4 +1,4 @@
-// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build ppc64,linux
@@ -370,4 +370,6 @@ const (
SYS_PKEY_ALLOC = 384
SYS_PKEY_FREE = 385
SYS_PKEY_MPROTECT = 386
+ SYS_RSEQ = 387
+ SYS_IO_PGETEVENTS = 388
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
index 9623248a5..bdbabdbcd 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
@@ -1,4 +1,4 @@
-// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build ppc64le,linux
@@ -370,4 +370,6 @@ const (
SYS_PKEY_ALLOC = 384
SYS_PKEY_FREE = 385
SYS_PKEY_MPROTECT = 386
+ SYS_RSEQ = 387
+ SYS_IO_PGETEVENTS = 388
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
new file mode 100644
index 000000000..473c74613
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
@@ -0,0 +1,287 @@
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build riscv64,linux
+
+package unix
+
+const (
+ SYS_IO_SETUP = 0
+ SYS_IO_DESTROY = 1
+ SYS_IO_SUBMIT = 2
+ SYS_IO_CANCEL = 3
+ SYS_IO_GETEVENTS = 4
+ SYS_SETXATTR = 5
+ SYS_LSETXATTR = 6
+ SYS_FSETXATTR = 7
+ SYS_GETXATTR = 8
+ SYS_LGETXATTR = 9
+ SYS_FGETXATTR = 10
+ SYS_LISTXATTR = 11
+ SYS_LLISTXATTR = 12
+ SYS_FLISTXATTR = 13
+ SYS_REMOVEXATTR = 14
+ SYS_LREMOVEXATTR = 15
+ SYS_FREMOVEXATTR = 16
+ SYS_GETCWD = 17
+ SYS_LOOKUP_DCOOKIE = 18
+ SYS_EVENTFD2 = 19
+ SYS_EPOLL_CREATE1 = 20
+ SYS_EPOLL_CTL = 21
+ SYS_EPOLL_PWAIT = 22
+ SYS_DUP = 23
+ SYS_DUP3 = 24
+ SYS_FCNTL = 25
+ SYS_INOTIFY_INIT1 = 26
+ SYS_INOTIFY_ADD_WATCH = 27
+ SYS_INOTIFY_RM_WATCH = 28
+ SYS_IOCTL = 29
+ SYS_IOPRIO_SET = 30
+ SYS_IOPRIO_GET = 31
+ SYS_FLOCK = 32
+ SYS_MKNODAT = 33
+ SYS_MKDIRAT = 34
+ SYS_UNLINKAT = 35
+ SYS_SYMLINKAT = 36
+ SYS_LINKAT = 37
+ SYS_UMOUNT2 = 39
+ SYS_MOUNT = 40
+ SYS_PIVOT_ROOT = 41
+ SYS_NFSSERVCTL = 42
+ SYS_STATFS = 43
+ SYS_FSTATFS = 44
+ SYS_TRUNCATE = 45
+ SYS_FTRUNCATE = 46
+ SYS_FALLOCATE = 47
+ SYS_FACCESSAT = 48
+ SYS_CHDIR = 49
+ SYS_FCHDIR = 50
+ SYS_CHROOT = 51
+ SYS_FCHMOD = 52
+ SYS_FCHMODAT = 53
+ SYS_FCHOWNAT = 54
+ SYS_FCHOWN = 55
+ SYS_OPENAT = 56
+ SYS_CLOSE = 57
+ SYS_VHANGUP = 58
+ SYS_PIPE2 = 59
+ SYS_QUOTACTL = 60
+ SYS_GETDENTS64 = 61
+ SYS_LSEEK = 62
+ SYS_READ = 63
+ SYS_WRITE = 64
+ SYS_READV = 65
+ SYS_WRITEV = 66
+ SYS_PREAD64 = 67
+ SYS_PWRITE64 = 68
+ SYS_PREADV = 69
+ SYS_PWRITEV = 70
+ SYS_SENDFILE = 71
+ SYS_PSELECT6 = 72
+ SYS_PPOLL = 73
+ SYS_SIGNALFD4 = 74
+ SYS_VMSPLICE = 75
+ SYS_SPLICE = 76
+ SYS_TEE = 77
+ SYS_READLINKAT = 78
+ SYS_FSTATAT = 79
+ SYS_FSTAT = 80
+ SYS_SYNC = 81
+ SYS_FSYNC = 82
+ SYS_FDATASYNC = 83
+ SYS_SYNC_FILE_RANGE = 84
+ SYS_TIMERFD_CREATE = 85
+ SYS_TIMERFD_SETTIME = 86
+ SYS_TIMERFD_GETTIME = 87
+ SYS_UTIMENSAT = 88
+ SYS_ACCT = 89
+ SYS_CAPGET = 90
+ SYS_CAPSET = 91
+ SYS_PERSONALITY = 92
+ SYS_EXIT = 93
+ SYS_EXIT_GROUP = 94
+ SYS_WAITID = 95
+ SYS_SET_TID_ADDRESS = 96
+ SYS_UNSHARE = 97
+ SYS_FUTEX = 98
+ SYS_SET_ROBUST_LIST = 99
+ SYS_GET_ROBUST_LIST = 100
+ SYS_NANOSLEEP = 101
+ SYS_GETITIMER = 102
+ SYS_SETITIMER = 103
+ SYS_KEXEC_LOAD = 104
+ SYS_INIT_MODULE = 105
+ SYS_DELETE_MODULE = 106
+ SYS_TIMER_CREATE = 107
+ SYS_TIMER_GETTIME = 108
+ SYS_TIMER_GETOVERRUN = 109
+ SYS_TIMER_SETTIME = 110
+ SYS_TIMER_DELETE = 111
+ SYS_CLOCK_SETTIME = 112
+ SYS_CLOCK_GETTIME = 113
+ SYS_CLOCK_GETRES = 114
+ SYS_CLOCK_NANOSLEEP = 115
+ SYS_SYSLOG = 116
+ SYS_PTRACE = 117
+ SYS_SCHED_SETPARAM = 118
+ SYS_SCHED_SETSCHEDULER = 119
+ SYS_SCHED_GETSCHEDULER = 120
+ SYS_SCHED_GETPARAM = 121
+ SYS_SCHED_SETAFFINITY = 122
+ SYS_SCHED_GETAFFINITY = 123
+ SYS_SCHED_YIELD = 124
+ SYS_SCHED_GET_PRIORITY_MAX = 125
+ SYS_SCHED_GET_PRIORITY_MIN = 126
+ SYS_SCHED_RR_GET_INTERVAL = 127
+ SYS_RESTART_SYSCALL = 128
+ SYS_KILL = 129
+ SYS_TKILL = 130
+ SYS_TGKILL = 131
+ SYS_SIGALTSTACK = 132
+ SYS_RT_SIGSUSPEND = 133
+ SYS_RT_SIGACTION = 134
+ SYS_RT_SIGPROCMASK = 135
+ SYS_RT_SIGPENDING = 136
+ SYS_RT_SIGTIMEDWAIT = 137
+ SYS_RT_SIGQUEUEINFO = 138
+ SYS_RT_SIGRETURN = 139
+ SYS_SETPRIORITY = 140
+ SYS_GETPRIORITY = 141
+ SYS_REBOOT = 142
+ SYS_SETREGID = 143
+ SYS_SETGID = 144
+ SYS_SETREUID = 145
+ SYS_SETUID = 146
+ SYS_SETRESUID = 147
+ SYS_GETRESUID = 148
+ SYS_SETRESGID = 149
+ SYS_GETRESGID = 150
+ SYS_SETFSUID = 151
+ SYS_SETFSGID = 152
+ SYS_TIMES = 153
+ SYS_SETPGID = 154
+ SYS_GETPGID = 155
+ SYS_GETSID = 156
+ SYS_SETSID = 157
+ SYS_GETGROUPS = 158
+ SYS_SETGROUPS = 159
+ SYS_UNAME = 160
+ SYS_SETHOSTNAME = 161
+ SYS_SETDOMAINNAME = 162
+ SYS_GETRLIMIT = 163
+ SYS_SETRLIMIT = 164
+ SYS_GETRUSAGE = 165
+ SYS_UMASK = 166
+ SYS_PRCTL = 167
+ SYS_GETCPU = 168
+ SYS_GETTIMEOFDAY = 169
+ SYS_SETTIMEOFDAY = 170
+ SYS_ADJTIMEX = 171
+ SYS_GETPID = 172
+ SYS_GETPPID = 173
+ SYS_GETUID = 174
+ SYS_GETEUID = 175
+ SYS_GETGID = 176
+ SYS_GETEGID = 177
+ SYS_GETTID = 178
+ SYS_SYSINFO = 179
+ SYS_MQ_OPEN = 180
+ SYS_MQ_UNLINK = 181
+ SYS_MQ_TIMEDSEND = 182
+ SYS_MQ_TIMEDRECEIVE = 183
+ SYS_MQ_NOTIFY = 184
+ SYS_MQ_GETSETATTR = 185
+ SYS_MSGGET = 186
+ SYS_MSGCTL = 187
+ SYS_MSGRCV = 188
+ SYS_MSGSND = 189
+ SYS_SEMGET = 190
+ SYS_SEMCTL = 191
+ SYS_SEMTIMEDOP = 192
+ SYS_SEMOP = 193
+ SYS_SHMGET = 194
+ SYS_SHMCTL = 195
+ SYS_SHMAT = 196
+ SYS_SHMDT = 197
+ SYS_SOCKET = 198
+ SYS_SOCKETPAIR = 199
+ SYS_BIND = 200
+ SYS_LISTEN = 201
+ SYS_ACCEPT = 202
+ SYS_CONNECT = 203
+ SYS_GETSOCKNAME = 204
+ SYS_GETPEERNAME = 205
+ SYS_SENDTO = 206
+ SYS_RECVFROM = 207
+ SYS_SETSOCKOPT = 208
+ SYS_GETSOCKOPT = 209
+ SYS_SHUTDOWN = 210
+ SYS_SENDMSG = 211
+ SYS_RECVMSG = 212
+ SYS_READAHEAD = 213
+ SYS_BRK = 214
+ SYS_MUNMAP = 215
+ SYS_MREMAP = 216
+ SYS_ADD_KEY = 217
+ SYS_REQUEST_KEY = 218
+ SYS_KEYCTL = 219
+ SYS_CLONE = 220
+ SYS_EXECVE = 221
+ SYS_MMAP = 222
+ SYS_FADVISE64 = 223
+ SYS_SWAPON = 224
+ SYS_SWAPOFF = 225
+ SYS_MPROTECT = 226
+ SYS_MSYNC = 227
+ SYS_MLOCK = 228
+ SYS_MUNLOCK = 229
+ SYS_MLOCKALL = 230
+ SYS_MUNLOCKALL = 231
+ SYS_MINCORE = 232
+ SYS_MADVISE = 233
+ SYS_REMAP_FILE_PAGES = 234
+ SYS_MBIND = 235
+ SYS_GET_MEMPOLICY = 236
+ SYS_SET_MEMPOLICY = 237
+ SYS_MIGRATE_PAGES = 238
+ SYS_MOVE_PAGES = 239
+ SYS_RT_TGSIGQUEUEINFO = 240
+ SYS_PERF_EVENT_OPEN = 241
+ SYS_ACCEPT4 = 242
+ SYS_RECVMMSG = 243
+ SYS_ARCH_SPECIFIC_SYSCALL = 244
+ SYS_WAIT4 = 260
+ SYS_PRLIMIT64 = 261
+ SYS_FANOTIFY_INIT = 262
+ SYS_FANOTIFY_MARK = 263
+ SYS_NAME_TO_HANDLE_AT = 264
+ SYS_OPEN_BY_HANDLE_AT = 265
+ SYS_CLOCK_ADJTIME = 266
+ SYS_SYNCFS = 267
+ SYS_SETNS = 268
+ SYS_SENDMMSG = 269
+ SYS_PROCESS_VM_READV = 270
+ SYS_PROCESS_VM_WRITEV = 271
+ SYS_KCMP = 272
+ SYS_FINIT_MODULE = 273
+ SYS_SCHED_SETATTR = 274
+ SYS_SCHED_GETATTR = 275
+ SYS_RENAMEAT2 = 276
+ SYS_SECCOMP = 277
+ SYS_GETRANDOM = 278
+ SYS_MEMFD_CREATE = 279
+ SYS_BPF = 280
+ SYS_EXECVEAT = 281
+ SYS_USERFAULTFD = 282
+ SYS_MEMBARRIER = 283
+ SYS_MLOCK2 = 284
+ SYS_COPY_FILE_RANGE = 285
+ SYS_PREADV2 = 286
+ SYS_PWRITEV2 = 287
+ SYS_PKEY_MPROTECT = 288
+ SYS_PKEY_ALLOC = 289
+ SYS_PKEY_FREE = 290
+ SYS_STATX = 291
+ SYS_IO_PGETEVENTS = 292
+ SYS_RSEQ = 293
+)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
index c061d6f1d..6eb7c257f 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
@@ -1,4 +1,4 @@
-// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build s390x,linux
@@ -332,4 +332,6 @@ const (
SYS_STATX = 379
SYS_S390_STHYI = 380
SYS_KEXEC_FILE_LOAD = 381
+ SYS_IO_PGETEVENTS = 382
+ SYS_RSEQ = 383
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
index 2d0993672..93480fcb1 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
@@ -1,5 +1,5 @@
-// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__arch64__ linux/usr/include/asm/unistd.h
-// Code generated by the command above; DO NOT EDIT.
+// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h
+// Code generated by the command above; see README.md. DO NOT EDIT.
// +build sparc64,linux
@@ -345,4 +345,6 @@ const (
SYS_COPY_FILE_RANGE = 357
SYS_PREADV2 = 358
SYS_PWRITEV2 = 359
+ SYS_STATX = 360
+ SYS_IO_PGETEVENTS = 361
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go
index f0daa05a9..e66a8c9d3 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go
@@ -1,5 +1,5 @@
-// mksysnum_netbsd.pl
-// Code generated by the command above; DO NOT EDIT.
+// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master
+// Code generated by the command above; see README.md. DO NOT EDIT.
// +build 386,netbsd
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go
index ddb25b94f..42c788f24 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go
@@ -1,5 +1,5 @@
-// mksysnum_netbsd.pl
-// Code generated by the command above; DO NOT EDIT.
+// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master
+// Code generated by the command above; see README.md. DO NOT EDIT.
// +build amd64,netbsd
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go
index 315bd63f8..0a0757179 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go
@@ -1,5 +1,5 @@
-// mksysnum_netbsd.pl
-// Code generated by the command above; DO NOT EDIT.
+// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master
+// Code generated by the command above; see README.md. DO NOT EDIT.
// +build arm,netbsd
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go
index 07787301f..d5bf3c449 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go
@@ -1,5 +1,5 @@
-// mksysnum_openbsd.pl
-// Code generated by the command above; DO NOT EDIT.
+// go run mksysnum.go http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
+// Code generated by the command above; see README.md. DO NOT EDIT.
// +build 386,openbsd
@@ -9,109 +9,119 @@ const (
SYS_EXIT = 1 // { void sys_exit(int rval); }
SYS_FORK = 2 // { int sys_fork(void); }
SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
- SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \
- SYS_OPEN = 5 // { int sys_open(const char *path, \
+ SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
+ SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); }
SYS_CLOSE = 6 // { int sys_close(int fd); }
- SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \
+ SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); }
+ SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); }
SYS_LINK = 9 // { int sys_link(const char *path, const char *link); }
SYS_UNLINK = 10 // { int sys_unlink(const char *path); }
- SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \
+ SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
SYS_CHDIR = 12 // { int sys_chdir(const char *path); }
SYS_FCHDIR = 13 // { int sys_fchdir(int fd); }
- SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \
+ SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); }
- SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \
+ SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break
SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); }
- SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \
+ SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); }
SYS_GETPID = 20 // { pid_t sys_getpid(void); }
- SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \
+ SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); }
SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); }
SYS_SETUID = 23 // { int sys_setuid(uid_t uid); }
SYS_GETUID = 24 // { uid_t sys_getuid(void); }
SYS_GETEUID = 25 // { uid_t sys_geteuid(void); }
- SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \
- SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \
- SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \
- SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \
- SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \
- SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \
- SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \
- SYS_ACCESS = 33 // { int sys_access(const char *path, int flags); }
+ SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
+ SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
+ SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
+ SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
+ SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
+ SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
+ SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
+ SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); }
SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); }
SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); }
SYS_SYNC = 36 // { void sys_sync(void); }
- SYS_KILL = 37 // { int sys_kill(int pid, int signum); }
SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); }
SYS_GETPPID = 39 // { pid_t sys_getppid(void); }
SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); }
SYS_DUP = 41 // { int sys_dup(int fd); }
- SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \
+ SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
SYS_GETEGID = 43 // { gid_t sys_getegid(void); }
- SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \
- SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \
- SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \
+ SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
+ SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
+ SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
SYS_GETGID = 47 // { gid_t sys_getgid(void); }
SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); }
- SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); }
SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); }
SYS_ACCT = 51 // { int sys_acct(const char *path); }
SYS_SIGPENDING = 52 // { int sys_sigpending(void); }
SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); }
- SYS_IOCTL = 54 // { int sys_ioctl(int fd, \
+ SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); }
SYS_REBOOT = 55 // { int sys_reboot(int opt); }
SYS_REVOKE = 56 // { int sys_revoke(const char *path); }
- SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \
- SYS_READLINK = 58 // { int sys_readlink(const char *path, char *buf, \
- SYS_EXECVE = 59 // { int sys_execve(const char *path, \
+ SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); }
+ SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
+ SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); }
SYS_CHROOT = 61 // { int sys_chroot(const char *path); }
- SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \
- SYS_STATFS = 63 // { int sys_statfs(const char *path, \
+ SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
+ SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); }
SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); }
- SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \
+ SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
SYS_VFORK = 66 // { int sys_vfork(void); }
- SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \
- SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \
- SYS_SETITIMER = 69 // { int sys_setitimer(int which, \
- SYS_GETITIMER = 70 // { int sys_getitimer(int which, \
- SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \
- SYS_KEVENT = 72 // { int sys_kevent(int fd, \
+ SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
+ SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
+ SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
+ SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); }
+ SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
+ SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); }
- SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \
- SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \
- SYS_UTIMES = 76 // { int sys_utimes(const char *path, \
- SYS_FUTIMES = 77 // { int sys_futimes(int fd, \
- SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \
- SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \
- SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \
+ SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); }
+ SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); }
+ SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); }
+ SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); }
+ SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, char *vec); }
+ SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
+ SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
SYS_GETPGRP = 81 // { int sys_getpgrp(void); }
- SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, int pgid); }
- SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \
- SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \
- SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \
- SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \
- SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \
+ SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); }
+ SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
+ SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
+ SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); }
+ SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
+ SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
+ SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
+ SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
SYS_DUP2 = 90 // { int sys_dup2(int from, int to); }
- SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \
+ SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); }
- SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \
+ SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
+ SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
SYS_FSYNC = 95 // { int sys_fsync(int fd); }
SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); }
SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); }
- SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \
+ SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); }
SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); }
+ SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); }
+ SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); }
SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
- SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \
- SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \
+ SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
+ SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); }
- SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \
- SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \
+ SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
+ SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
+ SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
+ SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); }
- SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \
- SYS_READV = 120 // { ssize_t sys_readv(int fd, \
- SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \
+ SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
+ SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); }
+ SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
+ SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
+ SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
+ SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
+ SYS_KILL = 122 // { int sys_kill(int pid, int signum); }
SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); }
SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
@@ -119,89 +129,90 @@ const (
SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); }
SYS_FLOCK = 131 // { int sys_flock(int fd, int how); }
SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
- SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \
+ SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); }
- SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \
+ SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); }
SYS_RMDIR = 137 // { int sys_rmdir(const char *path); }
- SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \
+ SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
+ SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
SYS_SETSID = 147 // { int sys_setsid(void); }
- SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \
+ SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); }
SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); }
- SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \
- SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \
+ SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
+ SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
SYS_SETGID = 181 // { int sys_setgid(gid_t gid); }
SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); }
SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); }
SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); }
SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); }
SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
- SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \
- SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \
- SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \
- SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \
- SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \
+ SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
+ SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
+ SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
+ SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
+ SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
- SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \
+ SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); }
SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); }
SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); }
- SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \
+ SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); }
- SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \
- SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \
- SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \
+ SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
+ SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
+ SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); }
- SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \
- SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \
+ SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
+ SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
SYS_ISSETUGID = 253 // { int sys_issetugid(void); }
SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); }
SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); }
SYS_PIPE = 263 // { int sys_pipe(int *fdp); }
SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
- SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \
- SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \
+ SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
+ SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
SYS_KQUEUE = 269 // { int sys_kqueue(void); }
SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); }
SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); }
- SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \
- SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \
- SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \
- SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \
- SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \
+ SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
+ SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
+ SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
+ SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
+ SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); }
- SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \
+ SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
- SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \
- SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \
- SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \
- SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \
- SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \
+ SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
+ SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
+ SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
+ SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
+ SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); }
SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); }
- SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \
+ SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); }
- SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \
+ SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); }
- SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \
+ SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); }
SYS_GETRTABLE = 311 // { int sys_getrtable(void); }
- SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \
- SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \
- SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \
- SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \
- SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \
- SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \
- SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \
- SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \
- SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \
- SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \
- SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \
- SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \
+ SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
+ SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
+ SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
+ SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
+ SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
+ SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
+ SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
+ SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
+ SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
+ SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
+ SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
+ SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); }
SYS___GET_TCB = 330 // { void *sys___get_tcb(void); }
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go
index 10edff07d..cbcfdfb33 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go
@@ -1,4 +1,4 @@
-// mksysnum_openbsd.pl
+// go run mksysnum.go http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build amd64,openbsd
@@ -9,35 +9,35 @@ const (
SYS_EXIT = 1 // { void sys_exit(int rval); }
SYS_FORK = 2 // { int sys_fork(void); }
SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
- SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \
- SYS_OPEN = 5 // { int sys_open(const char *path, \
+ SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
+ SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); }
SYS_CLOSE = 6 // { int sys_close(int fd); }
SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); }
- SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \
+ SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); }
SYS_LINK = 9 // { int sys_link(const char *path, const char *link); }
SYS_UNLINK = 10 // { int sys_unlink(const char *path); }
- SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \
+ SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
SYS_CHDIR = 12 // { int sys_chdir(const char *path); }
SYS_FCHDIR = 13 // { int sys_fchdir(int fd); }
- SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \
+ SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); }
- SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \
+ SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break
SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); }
- SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \
+ SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); }
SYS_GETPID = 20 // { pid_t sys_getpid(void); }
- SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \
+ SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); }
SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); }
SYS_SETUID = 23 // { int sys_setuid(uid_t uid); }
SYS_GETUID = 24 // { uid_t sys_getuid(void); }
SYS_GETEUID = 25 // { uid_t sys_geteuid(void); }
- SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \
- SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \
- SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \
- SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \
- SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \
- SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \
- SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \
+ SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
+ SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
+ SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
+ SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
+ SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
+ SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
+ SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); }
SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); }
SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); }
@@ -46,80 +46,81 @@ const (
SYS_GETPPID = 39 // { pid_t sys_getppid(void); }
SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); }
SYS_DUP = 41 // { int sys_dup(int fd); }
- SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \
+ SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
SYS_GETEGID = 43 // { gid_t sys_getegid(void); }
- SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \
- SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \
- SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \
+ SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
+ SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
+ SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
SYS_GETGID = 47 // { gid_t sys_getgid(void); }
SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); }
SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); }
SYS_ACCT = 51 // { int sys_acct(const char *path); }
SYS_SIGPENDING = 52 // { int sys_sigpending(void); }
SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); }
- SYS_IOCTL = 54 // { int sys_ioctl(int fd, \
+ SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); }
SYS_REBOOT = 55 // { int sys_reboot(int opt); }
SYS_REVOKE = 56 // { int sys_revoke(const char *path); }
- SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \
- SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, \
- SYS_EXECVE = 59 // { int sys_execve(const char *path, \
+ SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); }
+ SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
+ SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); }
SYS_CHROOT = 61 // { int sys_chroot(const char *path); }
- SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \
- SYS_STATFS = 63 // { int sys_statfs(const char *path, \
+ SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
+ SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); }
SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); }
- SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \
+ SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
SYS_VFORK = 66 // { int sys_vfork(void); }
- SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \
- SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \
- SYS_SETITIMER = 69 // { int sys_setitimer(int which, \
- SYS_GETITIMER = 70 // { int sys_getitimer(int which, \
- SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \
- SYS_KEVENT = 72 // { int sys_kevent(int fd, \
+ SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
+ SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
+ SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
+ SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); }
+ SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
+ SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); }
- SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \
- SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \
- SYS_UTIMES = 76 // { int sys_utimes(const char *path, \
- SYS_FUTIMES = 77 // { int sys_futimes(int fd, \
- SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \
- SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \
- SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \
+ SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); }
+ SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); }
+ SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); }
+ SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); }
+ SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, char *vec); }
+ SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
+ SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
SYS_GETPGRP = 81 // { int sys_getpgrp(void); }
SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); }
- SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, \
- SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \
- SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \
- SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, \
- SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \
- SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \
- SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \
+ SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
+ SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
+ SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); }
+ SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
+ SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
+ SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
+ SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
SYS_DUP2 = 90 // { int sys_dup2(int from, int to); }
- SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \
+ SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); }
- SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, \
- SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \
+ SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
+ SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
SYS_FSYNC = 95 // { int sys_fsync(int fd); }
SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); }
SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); }
- SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \
+ SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); }
SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); }
SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); }
SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); }
SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
- SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \
- SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \
+ SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
+ SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); }
- SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, \
- SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, \
- SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \
- SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \
+ SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
+ SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
+ SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
+ SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); }
- SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, \
- SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \
+ SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
+ SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); }
+ SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
- SYS_READV = 120 // { ssize_t sys_readv(int fd, \
- SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \
+ SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
+ SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
SYS_KILL = 122 // { int sys_kill(int pid, int signum); }
SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); }
@@ -128,90 +129,90 @@ const (
SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); }
SYS_FLOCK = 131 // { int sys_flock(int fd, int how); }
SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
- SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \
+ SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); }
- SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \
+ SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); }
SYS_RMDIR = 137 // { int sys_rmdir(const char *path); }
- SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \
+ SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
SYS_SETSID = 147 // { int sys_setsid(void); }
- SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \
+ SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); }
SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); }
- SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \
- SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \
+ SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
+ SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
SYS_SETGID = 181 // { int sys_setgid(gid_t gid); }
SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); }
SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); }
SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); }
SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); }
SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
- SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \
- SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \
- SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \
- SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \
- SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \
+ SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
+ SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
+ SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
+ SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
+ SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
- SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, \
+ SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); }
SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); }
SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); }
- SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \
+ SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); }
- SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \
- SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \
- SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \
+ SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
+ SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
+ SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); }
- SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \
- SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \
+ SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
+ SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
SYS_ISSETUGID = 253 // { int sys_issetugid(void); }
SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); }
SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); }
SYS_PIPE = 263 // { int sys_pipe(int *fdp); }
SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
- SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \
- SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \
+ SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
+ SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
SYS_KQUEUE = 269 // { int sys_kqueue(void); }
SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); }
SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); }
- SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \
- SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \
- SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \
- SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \
- SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \
+ SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
+ SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
+ SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
+ SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
+ SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); }
- SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \
+ SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
- SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \
- SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \
- SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \
- SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \
- SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \
+ SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
+ SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
+ SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
+ SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
+ SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); }
SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); }
- SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \
+ SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); }
- SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \
+ SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); }
- SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \
+ SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); }
SYS_GETRTABLE = 311 // { int sys_getrtable(void); }
- SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \
- SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \
- SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \
- SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \
- SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \
- SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \
- SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \
- SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \
- SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \
- SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \
- SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \
- SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \
+ SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
+ SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
+ SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
+ SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
+ SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
+ SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
+ SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
+ SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
+ SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
+ SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
+ SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
+ SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); }
SYS___GET_TCB = 330 // { void *sys___get_tcb(void); }
)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
index 7a1693acb..a84cead96 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
@@ -1,5 +1,5 @@
-// mksysnum_openbsd.pl
-// Code generated by the command above; DO NOT EDIT.
+// go run mksysnum.go http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master
+// Code generated by the command above; see README.md. DO NOT EDIT.
// +build arm,openbsd
@@ -9,35 +9,35 @@ const (
SYS_EXIT = 1 // { void sys_exit(int rval); }
SYS_FORK = 2 // { int sys_fork(void); }
SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
- SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \
- SYS_OPEN = 5 // { int sys_open(const char *path, \
+ SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }
+ SYS_OPEN = 5 // { int sys_open(const char *path, int flags, ... mode_t mode); }
SYS_CLOSE = 6 // { int sys_close(int fd); }
SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); }
- SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \
+ SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, size_t psize); }
SYS_LINK = 9 // { int sys_link(const char *path, const char *link); }
SYS_UNLINK = 10 // { int sys_unlink(const char *path); }
- SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \
+ SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }
SYS_CHDIR = 12 // { int sys_chdir(const char *path); }
SYS_FCHDIR = 13 // { int sys_fchdir(int fd); }
- SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \
+ SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }
SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); }
- SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \
+ SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, gid_t gid); }
SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break
SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); }
- SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \
+ SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, struct rusage *rusage); }
SYS_GETPID = 20 // { pid_t sys_getpid(void); }
- SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \
+ SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, int flags, void *data); }
SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); }
SYS_SETUID = 23 // { int sys_setuid(uid_t uid); }
SYS_GETUID = 24 // { uid_t sys_getuid(void); }
SYS_GETEUID = 25 // { uid_t sys_geteuid(void); }
- SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \
- SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \
- SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \
- SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \
- SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \
- SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \
- SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \
+ SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }
+ SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }
+ SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }
+ SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }
+ SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }
+ SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }
+ SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }
SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); }
SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); }
SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); }
@@ -46,77 +46,81 @@ const (
SYS_GETPPID = 39 // { pid_t sys_getppid(void); }
SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); }
SYS_DUP = 41 // { int sys_dup(int fd); }
- SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \
+ SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }
SYS_GETEGID = 43 // { gid_t sys_getegid(void); }
- SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \
- SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \
- SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \
+ SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }
+ SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }
+ SYS_SIGACTION = 46 // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }
SYS_GETGID = 47 // { gid_t sys_getgid(void); }
SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); }
- SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); }
SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); }
SYS_ACCT = 51 // { int sys_acct(const char *path); }
SYS_SIGPENDING = 52 // { int sys_sigpending(void); }
SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); }
- SYS_IOCTL = 54 // { int sys_ioctl(int fd, \
+ SYS_IOCTL = 54 // { int sys_ioctl(int fd, u_long com, ... void *data); }
SYS_REBOOT = 55 // { int sys_reboot(int opt); }
SYS_REVOKE = 56 // { int sys_revoke(const char *path); }
- SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \
- SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, \
- SYS_EXECVE = 59 // { int sys_execve(const char *path, \
+ SYS_SYMLINK = 57 // { int sys_symlink(const char *path, const char *link); }
+ SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }
+ SYS_EXECVE = 59 // { int sys_execve(const char *path, char * const *argp, char * const *envp); }
SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); }
SYS_CHROOT = 61 // { int sys_chroot(const char *path); }
- SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \
- SYS_STATFS = 63 // { int sys_statfs(const char *path, \
+ SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }
+ SYS_STATFS = 63 // { int sys_statfs(const char *path, struct statfs *buf); }
SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); }
- SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \
+ SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }
SYS_VFORK = 66 // { int sys_vfork(void); }
- SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \
- SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \
- SYS_SETITIMER = 69 // { int sys_setitimer(int which, \
- SYS_GETITIMER = 70 // { int sys_getitimer(int which, \
- SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \
- SYS_KEVENT = 72 // { int sys_kevent(int fd, \
+ SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }
+ SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }
+ SYS_SETITIMER = 69 // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }
+ SYS_GETITIMER = 70 // { int sys_getitimer(int which, struct itimerval *itv); }
+ SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }
+ SYS_KEVENT = 72 // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }
SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); }
- SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \
- SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \
- SYS_UTIMES = 76 // { int sys_utimes(const char *path, \
- SYS_FUTIMES = 77 // { int sys_futimes(int fd, \
- SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \
- SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \
- SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \
+ SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, int prot); }
+ SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, int behav); }
+ SYS_UTIMES = 76 // { int sys_utimes(const char *path, const struct timeval *tptr); }
+ SYS_FUTIMES = 77 // { int sys_futimes(int fd, const struct timeval *tptr); }
+ SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, char *vec); }
+ SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, gid_t *gidset); }
+ SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }
SYS_GETPGRP = 81 // { int sys_getpgrp(void); }
SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); }
- SYS_SENDSYSLOG = 83 // { int sys_sendsyslog(const void *buf, size_t nbyte); }
- SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \
- SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \
- SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \
- SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \
- SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \
+ SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }
+ SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }
+ SYS_FUTIMENS = 85 // { int sys_futimens(int fd, const struct timespec *times); }
+ SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }
+ SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }
+ SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }
+ SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }
SYS_DUP2 = 90 // { int sys_dup2(int from, int to); }
- SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \
+ SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }
SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); }
- SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, \
- SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \
+ SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }
+ SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }
SYS_FSYNC = 95 // { int sys_fsync(int fd); }
SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); }
SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); }
- SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \
+ SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }
SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); }
SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); }
SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); }
SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); }
SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
- SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \
- SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \
+ SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }
+ SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }
SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); }
- SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, \
- SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \
- SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \
+ SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }
+ SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, const char *execpromises); }
+ SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }
+ SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }
SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); }
- SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \
- SYS_READV = 120 // { ssize_t sys_readv(int fd, \
- SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \
+ SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }
+ SYS_UNVEIL = 114 // { int sys_unveil(const char *path, const char *permissions); }
+ SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }
+ SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
+ SYS_READV = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }
+ SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }
SYS_KILL = 122 // { int sys_kill(int pid, int signum); }
SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); }
@@ -125,89 +129,90 @@ const (
SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); }
SYS_FLOCK = 131 // { int sys_flock(int fd, int how); }
SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
- SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \
+ SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }
SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); }
- SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \
+ SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }
SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); }
SYS_RMDIR = 137 // { int sys_rmdir(const char *path); }
- SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \
+ SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }
+ SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
SYS_SETSID = 147 // { int sys_setsid(void); }
- SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \
+ SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }
SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); }
SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); }
- SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \
- SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \
+ SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }
+ SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }
SYS_SETGID = 181 // { int sys_setgid(gid_t gid); }
SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); }
SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); }
SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); }
SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); }
SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
- SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \
- SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \
- SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \
- SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \
- SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \
+ SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }
+ SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }
+ SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
+ SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }
+ SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, off_t length); }
SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
- SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \
+ SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }
SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); }
SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); }
SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); }
- SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \
+ SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }
SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); }
- SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \
- SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \
- SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \
+ SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }
+ SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }
+ SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }
SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); }
- SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \
- SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \
+ SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }
+ SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }
SYS_ISSETUGID = 253 // { int sys_issetugid(void); }
SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); }
SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); }
SYS_PIPE = 263 // { int sys_pipe(int *fdp); }
SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
- SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \
- SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \
+ SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
+ SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }
SYS_KQUEUE = 269 // { int sys_kqueue(void); }
SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); }
SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); }
- SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \
- SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \
- SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \
- SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \
- SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \
+ SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }
+ SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }
+ SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }
+ SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
+ SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }
SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); }
- SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \
+ SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }
SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
- SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \
- SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \
- SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \
- SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \
- SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \
+ SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }
+ SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }
+ SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }
+ SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }
+ SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }
SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); }
SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); }
- SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \
+ SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }
SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); }
- SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \
+ SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }
SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); }
- SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \
+ SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }
SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); }
SYS_GETRTABLE = 311 // { int sys_getrtable(void); }
- SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \
- SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \
- SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \
- SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \
- SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \
- SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \
- SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \
- SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \
- SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \
- SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \
- SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \
- SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \
+ SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }
+ SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }
+ SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }
+ SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }
+ SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }
+ SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }
+ SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }
+ SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }
+ SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }
+ SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }
+ SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }
+ SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }
SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); }
SYS___GET_TCB = 330 // { void *sys___get_tcb(void); }
)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go
new file mode 100644
index 000000000..cedc9b0f2
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go
@@ -0,0 +1,345 @@
+// cgo -godefs types_aix.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build ppc,aix
+
+package unix
+
+const (
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
+ PathMax = 0x3ff
+)
+
+type (
+ _C_short int16
+ _C_int int32
+ _C_long int32
+ _C_long_long int64
+)
+
+type off64 int64
+type off int32
+type Mode_t uint32
+
+type Timespec struct {
+ Sec int32
+ Nsec int32
+}
+
+type StTimespec struct {
+ Sec int32
+ Nsec int32
+}
+
+type Timeval struct {
+ Sec int32
+ Usec int32
+}
+
+type Timeval32 struct {
+ Sec int32
+ Usec int32
+}
+
+type Timex struct{}
+
+type Time_t int32
+
+type Tms struct{}
+
+type Utimbuf struct {
+ Actime int32
+ Modtime int32
+}
+
+type Timezone struct {
+ Minuteswest int32
+ Dsttime int32
+}
+
+type Rusage struct {
+ Utime Timeval
+ Stime Timeval
+ Maxrss int32
+ Ixrss int32
+ Idrss int32
+ Isrss int32
+ Minflt int32
+ Majflt int32
+ Nswap int32
+ Inblock int32
+ Oublock int32
+ Msgsnd int32
+ Msgrcv int32
+ Nsignals int32
+ Nvcsw int32
+ Nivcsw int32
+}
+
+type Rlimit struct {
+ Cur uint64
+ Max uint64
+}
+
+type Pid_t int32
+
+type _Gid_t uint32
+
+type dev_t uint32
+
+type Stat_t struct {
+ Dev uint32
+ Ino uint32
+ Mode uint32
+ Nlink int16
+ Flag uint16
+ Uid uint32
+ Gid uint32
+ Rdev uint32
+ Size int32
+ Atim StTimespec
+ Mtim StTimespec
+ Ctim StTimespec
+ Blksize int32
+ Blocks int32
+ Vfstype int32
+ Vfs uint32
+ Type uint32
+ Gen uint32
+ Reserved [9]uint32
+}
+
+type StatxTimestamp struct{}
+
+type Statx_t struct{}
+
+type Dirent struct {
+ Offset uint32
+ Ino uint32
+ Reclen uint16
+ Namlen uint16
+ Name [256]uint8
+}
+
+type RawSockaddrInet4 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]uint8
+}
+
+type RawSockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+type RawSockaddrUnix struct {
+ Len uint8
+ Family uint8
+ Path [1023]uint8
+}
+
+type RawSockaddr struct {
+ Len uint8
+ Family uint8
+ Data [14]uint8
+}
+
+type RawSockaddrAny struct {
+ Addr RawSockaddr
+ Pad [1012]uint8
+}
+
+type _Socklen uint32
+
+type Cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type ICMPv6Filter struct {
+ Filt [8]uint32
+}
+
+type Iovec struct {
+ Base *byte
+ Len uint32
+}
+
+type IPMreq struct {
+ Multiaddr [4]byte /* in_addr */
+ Interface [4]byte /* in_addr */
+}
+
+type IPv6Mreq struct {
+ Multiaddr [16]byte /* in6_addr */
+ Interface uint32
+}
+
+type IPv6MTUInfo struct {
+ Addr RawSockaddrInet6
+ Mtu uint32
+}
+
+type Linger struct {
+ Onoff int32
+ Linger int32
+}
+
+type Msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *Iovec
+ Iovlen int32
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+const (
+ SizeofSockaddrInet4 = 0x10
+ SizeofSockaddrInet6 = 0x1c
+ SizeofSockaddrAny = 0x404
+ SizeofSockaddrUnix = 0x401
+ SizeofLinger = 0x8
+ SizeofIPMreq = 0x8
+ SizeofIPv6Mreq = 0x14
+ SizeofIPv6MTUInfo = 0x20
+ SizeofMsghdr = 0x1c
+ SizeofCmsghdr = 0xc
+ SizeofICMPv6Filter = 0x20
+)
+
+const (
+ SizeofIfMsghdr = 0x10
+)
+
+type IfMsgHdr struct {
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ Addrlen uint8
+ _ [1]byte
+}
+
+type FdSet struct {
+ Bits [2048]int32
+}
+
+type Utsname struct {
+ Sysname [32]byte
+ Nodename [32]byte
+ Release [32]byte
+ Version [32]byte
+ Machine [32]byte
+}
+
+type Ustat_t struct{}
+
+type Sigset_t struct {
+ Losigs uint32
+ Hisigs uint32
+}
+
+const (
+ AT_FDCWD = -0x2
+ AT_REMOVEDIR = 0x1
+ AT_SYMLINK_NOFOLLOW = 0x1
+)
+
+type Termios struct {
+ Iflag uint32
+ Oflag uint32
+ Cflag uint32
+ Lflag uint32
+ Cc [16]uint8
+}
+
+type Termio struct {
+ Iflag uint16
+ Oflag uint16
+ Cflag uint16
+ Lflag uint16
+ Line uint8
+ Cc [8]uint8
+ _ [1]byte
+}
+
+type Winsize struct {
+ Row uint16
+ Col uint16
+ Xpixel uint16
+ Ypixel uint16
+}
+
+type PollFd struct {
+ Fd int32
+ Events uint16
+ Revents uint16
+}
+
+const (
+ POLLERR = 0x4000
+ POLLHUP = 0x2000
+ POLLIN = 0x1
+ POLLNVAL = 0x8000
+ POLLOUT = 0x2
+ POLLPRI = 0x4
+ POLLRDBAND = 0x20
+ POLLRDNORM = 0x10
+ POLLWRBAND = 0x40
+ POLLWRNORM = 0x2
+)
+
+type Flock_t struct {
+ Type int16
+ Whence int16
+ Sysid uint32
+ Pid int32
+ Vfs int32
+ Start int64
+ Len int64
+}
+
+type Fsid_t struct {
+ Val [2]uint32
+}
+type Fsid64_t struct {
+ Val [2]uint64
+}
+
+type Statfs_t struct {
+ Version int32
+ Type int32
+ Bsize uint32
+ Blocks uint32
+ Bfree uint32
+ Bavail uint32
+ Files uint32
+ Ffree uint32
+ Fsid Fsid_t
+ Vfstype int32
+ Fsize uint32
+ Vfsnumber int32
+ Vfsoff int32
+ Vfslen int32
+ Vfsvers int32
+ Fname [32]uint8
+ Fpack [32]uint8
+ Name_max int32
+}
+
+const RNDGETENTCNT = 0x80045200
diff --git a/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go
new file mode 100644
index 000000000..f46482d27
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go
@@ -0,0 +1,354 @@
+// cgo -godefs types_aix.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build ppc64,aix
+
+package unix
+
+const (
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
+ PathMax = 0x3ff
+)
+
+type (
+ _C_short int16
+ _C_int int32
+ _C_long int64
+ _C_long_long int64
+)
+
+type off64 int64
+type off int64
+type Mode_t uint32
+
+type Timespec struct {
+ Sec int64
+ Nsec int64
+}
+
+type StTimespec struct {
+ Sec int64
+ Nsec int32
+ _ [4]byte
+}
+
+type Timeval struct {
+ Sec int64
+ Usec int32
+ _ [4]byte
+}
+
+type Timeval32 struct {
+ Sec int32
+ Usec int32
+}
+
+type Timex struct{}
+
+type Time_t int64
+
+type Tms struct{}
+
+type Utimbuf struct {
+ Actime int64
+ Modtime int64
+}
+
+type Timezone struct {
+ Minuteswest int32
+ Dsttime int32
+}
+
+type Rusage struct {
+ Utime Timeval
+ Stime Timeval
+ Maxrss int64
+ Ixrss int64
+ Idrss int64
+ Isrss int64
+ Minflt int64
+ Majflt int64
+ Nswap int64
+ Inblock int64
+ Oublock int64
+ Msgsnd int64
+ Msgrcv int64
+ Nsignals int64
+ Nvcsw int64
+ Nivcsw int64
+}
+
+type Rlimit struct {
+ Cur uint64
+ Max uint64
+}
+
+type Pid_t int32
+
+type _Gid_t uint32
+
+type dev_t uint64
+
+type Stat_t struct {
+ Dev uint64
+ Ino uint64
+ Mode uint32
+ Nlink int16
+ Flag uint16
+ Uid uint32
+ Gid uint32
+ Rdev uint64
+ Ssize int32
+ _ [4]byte
+ Atim StTimespec
+ Mtim StTimespec
+ Ctim StTimespec
+ Blksize int64
+ Blocks int64
+ Vfstype int32
+ Vfs uint32
+ Type uint32
+ Gen uint32
+ Reserved [9]uint32
+ Padto_ll uint32
+ Size int64
+}
+
+type StatxTimestamp struct{}
+
+type Statx_t struct{}
+
+type Dirent struct {
+ Offset uint64
+ Ino uint64
+ Reclen uint16
+ Namlen uint16
+ Name [256]uint8
+ _ [4]byte
+}
+
+type RawSockaddrInet4 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]uint8
+}
+
+type RawSockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+type RawSockaddrUnix struct {
+ Len uint8
+ Family uint8
+ Path [1023]uint8
+}
+
+type RawSockaddr struct {
+ Len uint8
+ Family uint8
+ Data [14]uint8
+}
+
+type RawSockaddrAny struct {
+ Addr RawSockaddr
+ Pad [1012]uint8
+}
+
+type _Socklen uint32
+
+type Cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type ICMPv6Filter struct {
+ Filt [8]uint32
+}
+
+type Iovec struct {
+ Base *byte
+ Len uint64
+}
+
+type IPMreq struct {
+ Multiaddr [4]byte /* in_addr */
+ Interface [4]byte /* in_addr */
+}
+
+type IPv6Mreq struct {
+ Multiaddr [16]byte /* in6_addr */
+ Interface uint32
+}
+
+type IPv6MTUInfo struct {
+ Addr RawSockaddrInet6
+ Mtu uint32
+}
+
+type Linger struct {
+ Onoff int32
+ Linger int32
+}
+
+type Msghdr struct {
+ Name *byte
+ Namelen uint32
+ _ [4]byte
+ Iov *Iovec
+ Iovlen int32
+ _ [4]byte
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+const (
+ SizeofSockaddrInet4 = 0x10
+ SizeofSockaddrInet6 = 0x1c
+ SizeofSockaddrAny = 0x404
+ SizeofSockaddrUnix = 0x401
+ SizeofLinger = 0x8
+ SizeofIPMreq = 0x8
+ SizeofIPv6Mreq = 0x14
+ SizeofIPv6MTUInfo = 0x20
+ SizeofMsghdr = 0x30
+ SizeofCmsghdr = 0xc
+ SizeofICMPv6Filter = 0x20
+)
+
+const (
+ SizeofIfMsghdr = 0x10
+)
+
+type IfMsgHdr struct {
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ Addrlen uint8
+ _ [1]byte
+}
+
+type FdSet struct {
+ Bits [1024]int64
+}
+
+type Utsname struct {
+ Sysname [32]byte
+ Nodename [32]byte
+ Release [32]byte
+ Version [32]byte
+ Machine [32]byte
+}
+
+type Ustat_t struct{}
+
+type Sigset_t struct {
+ Set [4]uint64
+}
+
+const (
+ AT_FDCWD = -0x2
+ AT_REMOVEDIR = 0x1
+ AT_SYMLINK_NOFOLLOW = 0x1
+)
+
+type Termios struct {
+ Iflag uint32
+ Oflag uint32
+ Cflag uint32
+ Lflag uint32
+ Cc [16]uint8
+}
+
+type Termio struct {
+ Iflag uint16
+ Oflag uint16
+ Cflag uint16
+ Lflag uint16
+ Line uint8
+ Cc [8]uint8
+ _ [1]byte
+}
+
+type Winsize struct {
+ Row uint16
+ Col uint16
+ Xpixel uint16
+ Ypixel uint16
+}
+
+type PollFd struct {
+ Fd int32
+ Events uint16
+ Revents uint16
+}
+
+const (
+ POLLERR = 0x4000
+ POLLHUP = 0x2000
+ POLLIN = 0x1
+ POLLNVAL = 0x8000
+ POLLOUT = 0x2
+ POLLPRI = 0x4
+ POLLRDBAND = 0x20
+ POLLRDNORM = 0x10
+ POLLWRBAND = 0x40
+ POLLWRNORM = 0x2
+)
+
+type Flock_t struct {
+ Type int16
+ Whence int16
+ Sysid uint32
+ Pid int32
+ Vfs int32
+ Start int64
+ Len int64
+}
+
+type Fsid_t struct {
+ Val [2]uint32
+}
+type Fsid64_t struct {
+ Val [2]uint64
+}
+
+type Statfs_t struct {
+ Version int32
+ Type int32
+ Bsize uint64
+ Blocks uint64
+ Bfree uint64
+ Bavail uint64
+ Files uint64
+ Ffree uint64
+ Fsid Fsid64_t
+ Vfstype int32
+ _ [4]byte
+ Fsize uint64
+ Vfsnumber int32
+ Vfsoff int32
+ Vfslen int32
+ Vfsvers int32
+ Fname [32]uint8
+ Fpack [32]uint8
+ Name_max int32
+ _ [4]byte
+}
+
+const RNDGETENTCNT = 0x80045200
diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go
index 327af5fba..2aeb52a88 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x4
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x4
- sizeofLongLong = 0x8
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
)
type (
diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
index 116e6e075..0d0d9f2cc 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
)
type (
diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go
index 2750ad760..04e344b78 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go
@@ -7,11 +7,11 @@
package unix
const (
- sizeofPtr = 0x4
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x4
- sizeofLongLong = 0x8
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
)
type (
diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
index 8cead0996..9fec185c1 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
)
type (
diff --git a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
index 315a553bd..7b34e2e2c 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
)
type (
@@ -56,23 +56,6 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
Ino uint64
Nlink uint32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
index 878a21ad6..c146c1ad3 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x4
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x4
- sizeofLongLong = 0x8
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
)
type (
@@ -57,41 +57,55 @@ type Rlimit struct {
type _Gid_t uint32
const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
+ _statfsVersion = 0x20140518
+ _dirblksiz = 0x400
)
type Stat_t struct {
- Dev uint32
- Ino uint32
- Mode uint16
- Nlink uint16
- Uid uint32
- Gid uint32
- Rdev uint32
- Atimespec Timespec
- Mtimespec Timespec
- Ctimespec Timespec
- Size int64
- Blocks int64
- Blksize int32
- Flags uint32
- Gen uint32
- Lspare int32
- Birthtimespec Timespec
- Pad_cgo_0 [8]byte
+ Dev uint64
+ Ino uint64
+ Nlink uint64
+ Mode uint16
+ _0 int16
+ Uid uint32
+ Gid uint32
+ _1 int32
+ Rdev uint64
+ Atim_ext int32
+ Atim Timespec
+ Mtim_ext int32
+ Mtim Timespec
+ Ctim_ext int32
+ Ctim Timespec
+ Btim_ext int32
+ Birthtim Timespec
+ Size int64
+ Blocks int64
+ Blksize int32
+ Flags uint32
+ Gen uint64
+ Spare [10]uint64
+}
+
+type stat_freebsd11_t struct {
+ Dev uint32
+ Ino uint32
+ Mode uint16
+ Nlink uint16
+ Uid uint32
+ Gid uint32
+ Rdev uint32
+ Atim Timespec
+ Mtim Timespec
+ Ctim Timespec
+ Size int64
+ Blocks int64
+ Blksize int32
+ Flags uint32
+ Gen uint32
+ Lspare int32
+ Birthtim Timespec
+ _ [8]byte
}
type Statfs_t struct {
@@ -115,6 +129,31 @@ type Statfs_t struct {
Fsid Fsid
Charspare [80]int8
Fstypename [16]int8
+ Mntfromname [1024]int8
+ Mntonname [1024]int8
+}
+
+type statfs_freebsd11_t struct {
+ Version uint32
+ Type uint32
+ Flags uint64
+ Bsize uint64
+ Iosize uint64
+ Blocks uint64
+ Bfree uint64
+ Bavail int64
+ Files uint64
+ Ffree int64
+ Syncwrites uint64
+ Asyncwrites uint64
+ Syncreads uint64
+ Asyncreads uint64
+ Spare [10]uint64
+ Namemax uint32
+ Owner uint32
+ Fsid Fsid
+ Charspare [80]int8
+ Fstypename [16]int8
Mntfromname [88]int8
Mntonname [88]int8
}
@@ -129,6 +168,17 @@ type Flock_t struct {
}
type Dirent struct {
+ Fileno uint64
+ Off int64
+ Reclen uint16
+ Type uint8
+ Pad0 uint8
+ Namlen uint16
+ Pad1 uint16
+ Name [256]int8
+}
+
+type dirent_freebsd11 struct {
Fileno uint32
Reclen uint16
Type uint8
@@ -289,7 +339,7 @@ type Kevent_t struct {
}
type FdSet struct {
- X__fds_bits [32]uint32
+ Bits [32]uint32
}
const (
@@ -305,53 +355,53 @@ const (
)
type ifMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Addrs int32
- Flags int32
- Index uint16
- Pad_cgo_0 [2]byte
- Data ifData
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+ Data ifData
}
type IfMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Addrs int32
- Flags int32
- Index uint16
- Pad_cgo_0 [2]byte
- Data IfData
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+ Data IfData
}
type ifData struct {
- Type uint8
- Physical uint8
- Addrlen uint8
- Hdrlen uint8
- Link_state uint8
- Vhid uint8
- Datalen uint16
- Mtu uint32
- Metric uint32
- Baudrate uint64
- Ipackets uint64
- Ierrors uint64
- Opackets uint64
- Oerrors uint64
- Collisions uint64
- Ibytes uint64
- Obytes uint64
- Imcasts uint64
- Omcasts uint64
- Iqdrops uint64
- Oqdrops uint64
- Noproto uint64
- Hwassist uint64
- X__ifi_epoch [8]byte
- X__ifi_lastchange [16]byte
+ Type uint8
+ Physical uint8
+ Addrlen uint8
+ Hdrlen uint8
+ Link_state uint8
+ Vhid uint8
+ Datalen uint16
+ Mtu uint32
+ Metric uint32
+ Baudrate uint64
+ Ipackets uint64
+ Ierrors uint64
+ Opackets uint64
+ Oerrors uint64
+ Collisions uint64
+ Ibytes uint64
+ Obytes uint64
+ Imcasts uint64
+ Omcasts uint64
+ Iqdrops uint64
+ Oqdrops uint64
+ Noproto uint64
+ Hwassist uint64
+ _ [8]byte
+ _ [16]byte
}
type IfData struct {
@@ -383,24 +433,24 @@ type IfData struct {
}
type IfaMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Addrs int32
- Flags int32
- Index uint16
- Pad_cgo_0 [2]byte
- Metric int32
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+ Metric int32
}
type IfmaMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Addrs int32
- Flags int32
- Index uint16
- Pad_cgo_0 [2]byte
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
}
type IfAnnounceMsghdr struct {
@@ -413,19 +463,19 @@ type IfAnnounceMsghdr struct {
}
type RtMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Index uint16
- Pad_cgo_0 [2]byte
- Flags int32
- Addrs int32
- Pid int32
- Seq int32
- Errno int32
- Fmask int32
- Inits uint32
- Rmx RtMetrics
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Index uint16
+ _ [2]byte
+ Flags int32
+ Addrs int32
+ Pid int32
+ Seq int32
+ Errno int32
+ Fmask int32
+ Inits uint32
+ Rmx RtMetrics
}
type RtMetrics struct {
@@ -482,18 +532,18 @@ type BpfInsn struct {
}
type BpfHdr struct {
- Tstamp Timeval
- Caplen uint32
- Datalen uint32
- Hdrlen uint16
- Pad_cgo_0 [2]byte
+ Tstamp Timeval
+ Caplen uint32
+ Datalen uint32
+ Hdrlen uint16
+ _ [2]byte
}
type BpfZbufHeader struct {
Kernel_gen uint32
Kernel_len uint32
User_gen uint32
- X_bzh_pad [5]uint32
+ _ [5]uint32
}
type Termios struct {
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
index 8408af125..ac33a8dd4 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
)
type (
@@ -57,40 +57,50 @@ type Rlimit struct {
type _Gid_t uint32
const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
+ _statfsVersion = 0x20140518
+ _dirblksiz = 0x400
)
type Stat_t struct {
- Dev uint32
- Ino uint32
- Mode uint16
- Nlink uint16
- Uid uint32
- Gid uint32
- Rdev uint32
- Atimespec Timespec
- Mtimespec Timespec
- Ctimespec Timespec
- Size int64
- Blocks int64
- Blksize int32
- Flags uint32
- Gen uint32
- Lspare int32
- Birthtimespec Timespec
+ Dev uint64
+ Ino uint64
+ Nlink uint64
+ Mode uint16
+ _0 int16
+ Uid uint32
+ Gid uint32
+ _1 int32
+ Rdev uint64
+ Atim Timespec
+ Mtim Timespec
+ Ctim Timespec
+ Birthtim Timespec
+ Size int64
+ Blocks int64
+ Blksize int32
+ Flags uint32
+ Gen uint64
+ Spare [10]uint64
+}
+
+type stat_freebsd11_t struct {
+ Dev uint32
+ Ino uint32
+ Mode uint16
+ Nlink uint16
+ Uid uint32
+ Gid uint32
+ Rdev uint32
+ Atim Timespec
+ Mtim Timespec
+ Ctim Timespec
+ Size int64
+ Blocks int64
+ Blksize int32
+ Flags uint32
+ Gen uint32
+ Lspare int32
+ Birthtim Timespec
}
type Statfs_t struct {
@@ -114,21 +124,57 @@ type Statfs_t struct {
Fsid Fsid
Charspare [80]int8
Fstypename [16]int8
+ Mntfromname [1024]int8
+ Mntonname [1024]int8
+}
+
+type statfs_freebsd11_t struct {
+ Version uint32
+ Type uint32
+ Flags uint64
+ Bsize uint64
+ Iosize uint64
+ Blocks uint64
+ Bfree uint64
+ Bavail int64
+ Files uint64
+ Ffree int64
+ Syncwrites uint64
+ Asyncwrites uint64
+ Syncreads uint64
+ Asyncreads uint64
+ Spare [10]uint64
+ Namemax uint32
+ Owner uint32
+ Fsid Fsid
+ Charspare [80]int8
+ Fstypename [16]int8
Mntfromname [88]int8
Mntonname [88]int8
}
type Flock_t struct {
- Start int64
- Len int64
- Pid int32
- Type int16
- Whence int16
- Sysid int32
- Pad_cgo_0 [4]byte
+ Start int64
+ Len int64
+ Pid int32
+ Type int16
+ Whence int16
+ Sysid int32
+ _ [4]byte
}
type Dirent struct {
+ Fileno uint64
+ Off int64
+ Reclen uint16
+ Type uint8
+ Pad0 uint8
+ Namlen uint16
+ Pad1 uint16
+ Name [256]int8
+}
+
+type dirent_freebsd11 struct {
Fileno uint32
Reclen uint16
Type uint8
@@ -229,10 +275,10 @@ type IPv6Mreq struct {
type Msghdr struct {
Name *byte
Namelen uint32
- Pad_cgo_0 [4]byte
+ _ [4]byte
Iov *Iovec
Iovlen int32
- Pad_cgo_1 [4]byte
+ _ [4]byte
Control *byte
Controllen uint32
Flags int32
@@ -291,7 +337,7 @@ type Kevent_t struct {
}
type FdSet struct {
- X__fds_bits [16]uint64
+ Bits [16]uint64
}
const (
@@ -307,53 +353,53 @@ const (
)
type ifMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Addrs int32
- Flags int32
- Index uint16
- Pad_cgo_0 [2]byte
- Data ifData
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+ Data ifData
}
type IfMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Addrs int32
- Flags int32
- Index uint16
- Pad_cgo_0 [2]byte
- Data IfData
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+ Data IfData
}
type ifData struct {
- Type uint8
- Physical uint8
- Addrlen uint8
- Hdrlen uint8
- Link_state uint8
- Vhid uint8
- Datalen uint16
- Mtu uint32
- Metric uint32
- Baudrate uint64
- Ipackets uint64
- Ierrors uint64
- Opackets uint64
- Oerrors uint64
- Collisions uint64
- Ibytes uint64
- Obytes uint64
- Imcasts uint64
- Omcasts uint64
- Iqdrops uint64
- Oqdrops uint64
- Noproto uint64
- Hwassist uint64
- X__ifi_epoch [8]byte
- X__ifi_lastchange [16]byte
+ Type uint8
+ Physical uint8
+ Addrlen uint8
+ Hdrlen uint8
+ Link_state uint8
+ Vhid uint8
+ Datalen uint16
+ Mtu uint32
+ Metric uint32
+ Baudrate uint64
+ Ipackets uint64
+ Ierrors uint64
+ Opackets uint64
+ Oerrors uint64
+ Collisions uint64
+ Ibytes uint64
+ Obytes uint64
+ Imcasts uint64
+ Omcasts uint64
+ Iqdrops uint64
+ Oqdrops uint64
+ Noproto uint64
+ Hwassist uint64
+ _ [8]byte
+ _ [16]byte
}
type IfData struct {
@@ -385,24 +431,24 @@ type IfData struct {
}
type IfaMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Addrs int32
- Flags int32
- Index uint16
- Pad_cgo_0 [2]byte
- Metric int32
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+ Metric int32
}
type IfmaMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Addrs int32
- Flags int32
- Index uint16
- Pad_cgo_0 [2]byte
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
}
type IfAnnounceMsghdr struct {
@@ -415,19 +461,19 @@ type IfAnnounceMsghdr struct {
}
type RtMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Index uint16
- Pad_cgo_0 [2]byte
- Flags int32
- Addrs int32
- Pid int32
- Seq int32
- Errno int32
- Fmask int32
- Inits uint64
- Rmx RtMetrics
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Index uint16
+ _ [2]byte
+ Flags int32
+ Addrs int32
+ Pid int32
+ Seq int32
+ Errno int32
+ Fmask int32
+ Inits uint64
+ Rmx RtMetrics
}
type RtMetrics struct {
@@ -472,9 +518,9 @@ type BpfZbuf struct {
}
type BpfProgram struct {
- Len uint32
- Pad_cgo_0 [4]byte
- Insns *BpfInsn
+ Len uint32
+ _ [4]byte
+ Insns *BpfInsn
}
type BpfInsn struct {
@@ -485,18 +531,18 @@ type BpfInsn struct {
}
type BpfHdr struct {
- Tstamp Timeval
- Caplen uint32
- Datalen uint32
- Hdrlen uint16
- Pad_cgo_0 [6]byte
+ Tstamp Timeval
+ Caplen uint32
+ Datalen uint32
+ Hdrlen uint16
+ _ [6]byte
}
type BpfZbufHeader struct {
Kernel_gen uint32
Kernel_len uint32
User_gen uint32
- X_bzh_pad [5]uint32
+ _ [5]uint32
}
type Termios struct {
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
index 4b2d9a483..e27511a64 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x4
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x4
- sizeofLongLong = 0x8
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
)
type (
@@ -21,15 +21,15 @@ type (
)
type Timespec struct {
- Sec int64
- Nsec int32
- Pad_cgo_0 [4]byte
+ Sec int64
+ Nsec int32
+ _ [4]byte
}
type Timeval struct {
- Sec int64
- Usec int32
- Pad_cgo_0 [4]byte
+ Sec int64
+ Usec int32
+ _ [4]byte
}
type Rusage struct {
@@ -59,40 +59,50 @@ type Rlimit struct {
type _Gid_t uint32
const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
+ _statfsVersion = 0x20140518
+ _dirblksiz = 0x400
)
type Stat_t struct {
- Dev uint32
- Ino uint32
- Mode uint16
- Nlink uint16
- Uid uint32
- Gid uint32
- Rdev uint32
- Atimespec Timespec
- Mtimespec Timespec
- Ctimespec Timespec
- Size int64
- Blocks int64
- Blksize int32
- Flags uint32
- Gen uint32
- Lspare int32
- Birthtimespec Timespec
+ Dev uint64
+ Ino uint64
+ Nlink uint64
+ Mode uint16
+ _0 int16
+ Uid uint32
+ Gid uint32
+ _1 int32
+ Rdev uint64
+ Atim Timespec
+ Mtim Timespec
+ Ctim Timespec
+ Birthtim Timespec
+ Size int64
+ Blocks int64
+ Blksize int32
+ Flags uint32
+ Gen uint64
+ Spare [10]uint64
+}
+
+type stat_freebsd11_t struct {
+ Dev uint32
+ Ino uint32
+ Mode uint16
+ Nlink uint16
+ Uid uint32
+ Gid uint32
+ Rdev uint32
+ Atim Timespec
+ Mtim Timespec
+ Ctim Timespec
+ Size int64
+ Blocks int64
+ Blksize int32
+ Flags uint32
+ Gen uint32
+ Lspare int32
+ Birthtim Timespec
}
type Statfs_t struct {
@@ -116,21 +126,57 @@ type Statfs_t struct {
Fsid Fsid
Charspare [80]int8
Fstypename [16]int8
+ Mntfromname [1024]int8
+ Mntonname [1024]int8
+}
+
+type statfs_freebsd11_t struct {
+ Version uint32
+ Type uint32
+ Flags uint64
+ Bsize uint64
+ Iosize uint64
+ Blocks uint64
+ Bfree uint64
+ Bavail int64
+ Files uint64
+ Ffree int64
+ Syncwrites uint64
+ Asyncwrites uint64
+ Syncreads uint64
+ Asyncreads uint64
+ Spare [10]uint64
+ Namemax uint32
+ Owner uint32
+ Fsid Fsid
+ Charspare [80]int8
+ Fstypename [16]int8
Mntfromname [88]int8
Mntonname [88]int8
}
type Flock_t struct {
- Start int64
- Len int64
- Pid int32
- Type int16
- Whence int16
- Sysid int32
- Pad_cgo_0 [4]byte
+ Start int64
+ Len int64
+ Pid int32
+ Type int16
+ Whence int16
+ Sysid int32
+ _ [4]byte
}
type Dirent struct {
+ Fileno uint64
+ Off int64
+ Reclen uint16
+ Type uint8
+ Pad0 uint8
+ Namlen uint16
+ Pad1 uint16
+ Name [256]int8
+}
+
+type dirent_freebsd11 struct {
Fileno uint32
Reclen uint16
Type uint8
@@ -291,7 +337,7 @@ type Kevent_t struct {
}
type FdSet struct {
- X__fds_bits [32]uint32
+ Bits [32]uint32
}
const (
@@ -307,53 +353,53 @@ const (
)
type ifMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Addrs int32
- Flags int32
- Index uint16
- Pad_cgo_0 [2]byte
- Data ifData
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+ Data ifData
}
type IfMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Addrs int32
- Flags int32
- Index uint16
- Pad_cgo_0 [2]byte
- Data IfData
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+ Data IfData
}
type ifData struct {
- Type uint8
- Physical uint8
- Addrlen uint8
- Hdrlen uint8
- Link_state uint8
- Vhid uint8
- Datalen uint16
- Mtu uint32
- Metric uint32
- Baudrate uint64
- Ipackets uint64
- Ierrors uint64
- Opackets uint64
- Oerrors uint64
- Collisions uint64
- Ibytes uint64
- Obytes uint64
- Imcasts uint64
- Omcasts uint64
- Iqdrops uint64
- Oqdrops uint64
- Noproto uint64
- Hwassist uint64
- X__ifi_epoch [8]byte
- X__ifi_lastchange [16]byte
+ Type uint8
+ Physical uint8
+ Addrlen uint8
+ Hdrlen uint8
+ Link_state uint8
+ Vhid uint8
+ Datalen uint16
+ Mtu uint32
+ Metric uint32
+ Baudrate uint64
+ Ipackets uint64
+ Ierrors uint64
+ Opackets uint64
+ Oerrors uint64
+ Collisions uint64
+ Ibytes uint64
+ Obytes uint64
+ Imcasts uint64
+ Omcasts uint64
+ Iqdrops uint64
+ Oqdrops uint64
+ Noproto uint64
+ Hwassist uint64
+ _ [8]byte
+ _ [16]byte
}
type IfData struct {
@@ -380,30 +426,30 @@ type IfData struct {
Iqdrops uint32
Noproto uint32
Hwassist uint32
- Pad_cgo_0 [4]byte
+ _ [4]byte
Epoch int64
Lastchange Timeval
}
type IfaMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Addrs int32
- Flags int32
- Index uint16
- Pad_cgo_0 [2]byte
- Metric int32
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+ Metric int32
}
type IfmaMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Addrs int32
- Flags int32
- Index uint16
- Pad_cgo_0 [2]byte
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
}
type IfAnnounceMsghdr struct {
@@ -416,19 +462,19 @@ type IfAnnounceMsghdr struct {
}
type RtMsghdr struct {
- Msglen uint16
- Version uint8
- Type uint8
- Index uint16
- Pad_cgo_0 [2]byte
- Flags int32
- Addrs int32
- Pid int32
- Seq int32
- Errno int32
- Fmask int32
- Inits uint32
- Rmx RtMetrics
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Index uint16
+ _ [2]byte
+ Flags int32
+ Addrs int32
+ Pid int32
+ Seq int32
+ Errno int32
+ Fmask int32
+ Inits uint32
+ Rmx RtMetrics
}
type RtMetrics struct {
@@ -485,18 +531,18 @@ type BpfInsn struct {
}
type BpfHdr struct {
- Tstamp Timeval
- Caplen uint32
- Datalen uint32
- Hdrlen uint16
- Pad_cgo_0 [6]byte
+ Tstamp Timeval
+ Caplen uint32
+ Datalen uint32
+ Hdrlen uint16
+ _ [6]byte
}
type BpfZbufHeader struct {
Kernel_gen uint32
Kernel_len uint32
User_gen uint32
- X_bzh_pad [5]uint32
+ _ [5]uint32
}
type Termios struct {
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
new file mode 100644
index 000000000..2aadc1a4d
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
@@ -0,0 +1,602 @@
+// cgo -godefs types_freebsd.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build arm64,freebsd
+
+package unix
+
+const (
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
+)
+
+type (
+ _C_short int16
+ _C_int int32
+ _C_long int64
+ _C_long_long int64
+)
+
+type Timespec struct {
+ Sec int64
+ Nsec int64
+}
+
+type Timeval struct {
+ Sec int64
+ Usec int64
+}
+
+type Rusage struct {
+ Utime Timeval
+ Stime Timeval
+ Maxrss int64
+ Ixrss int64
+ Idrss int64
+ Isrss int64
+ Minflt int64
+ Majflt int64
+ Nswap int64
+ Inblock int64
+ Oublock int64
+ Msgsnd int64
+ Msgrcv int64
+ Nsignals int64
+ Nvcsw int64
+ Nivcsw int64
+}
+
+type Rlimit struct {
+ Cur int64
+ Max int64
+}
+
+type _Gid_t uint32
+
+const (
+ _statfsVersion = 0x20140518
+ _dirblksiz = 0x400
+)
+
+type Stat_t struct {
+ Dev uint64
+ Ino uint64
+ Nlink uint64
+ Mode uint16
+ _0 int16
+ Uid uint32
+ Gid uint32
+ _1 int32
+ Rdev uint64
+ Atim Timespec
+ Mtim Timespec
+ Ctim Timespec
+ Birthtim Timespec
+ Size int64
+ Blocks int64
+ Blksize int32
+ Flags uint32
+ Gen uint64
+ Spare [10]uint64
+}
+
+type stat_freebsd11_t struct {
+ Dev uint32
+ Ino uint32
+ Mode uint16
+ Nlink uint16
+ Uid uint32
+ Gid uint32
+ Rdev uint32
+ Atim Timespec
+ Mtim Timespec
+ Ctim Timespec
+ Size int64
+ Blocks int64
+ Blksize int32
+ Flags uint32
+ Gen uint32
+ Lspare int32
+ Birthtim Timespec
+}
+
+type Statfs_t struct {
+ Version uint32
+ Type uint32
+ Flags uint64
+ Bsize uint64
+ Iosize uint64
+ Blocks uint64
+ Bfree uint64
+ Bavail int64
+ Files uint64
+ Ffree int64
+ Syncwrites uint64
+ Asyncwrites uint64
+ Syncreads uint64
+ Asyncreads uint64
+ Spare [10]uint64
+ Namemax uint32
+ Owner uint32
+ Fsid Fsid
+ Charspare [80]int8
+ Fstypename [16]int8
+ Mntfromname [1024]int8
+ Mntonname [1024]int8
+}
+
+type statfs_freebsd11_t struct {
+ Version uint32
+ Type uint32
+ Flags uint64
+ Bsize uint64
+ Iosize uint64
+ Blocks uint64
+ Bfree uint64
+ Bavail int64
+ Files uint64
+ Ffree int64
+ Syncwrites uint64
+ Asyncwrites uint64
+ Syncreads uint64
+ Asyncreads uint64
+ Spare [10]uint64
+ Namemax uint32
+ Owner uint32
+ Fsid Fsid
+ Charspare [80]int8
+ Fstypename [16]int8
+ Mntfromname [88]int8
+ Mntonname [88]int8
+}
+
+type Flock_t struct {
+ Start int64
+ Len int64
+ Pid int32
+ Type int16
+ Whence int16
+ Sysid int32
+ _ [4]byte
+}
+
+type Dirent struct {
+ Fileno uint64
+ Off int64
+ Reclen uint16
+ Type uint8
+ Pad0 uint8
+ Namlen uint16
+ Pad1 uint16
+ Name [256]int8
+}
+
+type dirent_freebsd11 struct {
+ Fileno uint32
+ Reclen uint16
+ Type uint8
+ Namlen uint8
+ Name [256]int8
+}
+
+type Fsid struct {
+ Val [2]int32
+}
+
+const (
+ PathMax = 0x400
+)
+
+const (
+ FADV_NORMAL = 0x0
+ FADV_RANDOM = 0x1
+ FADV_SEQUENTIAL = 0x2
+ FADV_WILLNEED = 0x3
+ FADV_DONTNEED = 0x4
+ FADV_NOREUSE = 0x5
+)
+
+type RawSockaddrInet4 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]int8
+}
+
+type RawSockaddrInet6 struct {
+ Len uint8
+ Family uint8
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+type RawSockaddrUnix struct {
+ Len uint8
+ Family uint8
+ Path [104]int8
+}
+
+type RawSockaddrDatalink struct {
+ Len uint8
+ Family uint8
+ Index uint16
+ Type uint8
+ Nlen uint8
+ Alen uint8
+ Slen uint8
+ Data [46]int8
+}
+
+type RawSockaddr struct {
+ Len uint8
+ Family uint8
+ Data [14]int8
+}
+
+type RawSockaddrAny struct {
+ Addr RawSockaddr
+ Pad [92]int8
+}
+
+type _Socklen uint32
+
+type Linger struct {
+ Onoff int32
+ Linger int32
+}
+
+type Iovec struct {
+ Base *byte
+ Len uint64
+}
+
+type IPMreq struct {
+ Multiaddr [4]byte /* in_addr */
+ Interface [4]byte /* in_addr */
+}
+
+type IPMreqn struct {
+ Multiaddr [4]byte /* in_addr */
+ Address [4]byte /* in_addr */
+ Ifindex int32
+}
+
+type IPv6Mreq struct {
+ Multiaddr [16]byte /* in6_addr */
+ Interface uint32
+}
+
+type Msghdr struct {
+ Name *byte
+ Namelen uint32
+ _ [4]byte
+ Iov *Iovec
+ Iovlen int32
+ _ [4]byte
+ Control *byte
+ Controllen uint32
+ Flags int32
+}
+
+type Cmsghdr struct {
+ Len uint32
+ Level int32
+ Type int32
+}
+
+type Inet6Pktinfo struct {
+ Addr [16]byte /* in6_addr */
+ Ifindex uint32
+}
+
+type IPv6MTUInfo struct {
+ Addr RawSockaddrInet6
+ Mtu uint32
+}
+
+type ICMPv6Filter struct {
+ Filt [8]uint32
+}
+
+const (
+ SizeofSockaddrInet4 = 0x10
+ SizeofSockaddrInet6 = 0x1c
+ SizeofSockaddrAny = 0x6c
+ SizeofSockaddrUnix = 0x6a
+ SizeofSockaddrDatalink = 0x36
+ SizeofLinger = 0x8
+ SizeofIPMreq = 0x8
+ SizeofIPMreqn = 0xc
+ SizeofIPv6Mreq = 0x14
+ SizeofMsghdr = 0x30
+ SizeofCmsghdr = 0xc
+ SizeofInet6Pktinfo = 0x14
+ SizeofIPv6MTUInfo = 0x20
+ SizeofICMPv6Filter = 0x20
+)
+
+const (
+ PTRACE_TRACEME = 0x0
+ PTRACE_CONT = 0x7
+ PTRACE_KILL = 0x8
+)
+
+type Kevent_t struct {
+ Ident uint64
+ Filter int16
+ Flags uint16
+ Fflags uint32
+ Data int64
+ Udata *byte
+}
+
+type FdSet struct {
+ Bits [16]uint64
+}
+
+const (
+ sizeofIfMsghdr = 0xa8
+ SizeofIfMsghdr = 0xa8
+ sizeofIfData = 0x98
+ SizeofIfData = 0x98
+ SizeofIfaMsghdr = 0x14
+ SizeofIfmaMsghdr = 0x10
+ SizeofIfAnnounceMsghdr = 0x18
+ SizeofRtMsghdr = 0x98
+ SizeofRtMetrics = 0x70
+)
+
+type ifMsghdr struct {
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+ Data ifData
+}
+
+type IfMsghdr struct {
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+ Data IfData
+}
+
+type ifData struct {
+ Type uint8
+ Physical uint8
+ Addrlen uint8
+ Hdrlen uint8
+ Link_state uint8
+ Vhid uint8
+ Datalen uint16
+ Mtu uint32
+ Metric uint32
+ Baudrate uint64
+ Ipackets uint64
+ Ierrors uint64
+ Opackets uint64
+ Oerrors uint64
+ Collisions uint64
+ Ibytes uint64
+ Obytes uint64
+ Imcasts uint64
+ Omcasts uint64
+ Iqdrops uint64
+ Oqdrops uint64
+ Noproto uint64
+ Hwassist uint64
+ _ [8]byte
+ _ [16]byte
+}
+
+type IfData struct {
+ Type uint8
+ Physical uint8
+ Addrlen uint8
+ Hdrlen uint8
+ Link_state uint8
+ Spare_char1 uint8
+ Spare_char2 uint8
+ Datalen uint8
+ Mtu uint64
+ Metric uint64
+ Baudrate uint64
+ Ipackets uint64
+ Ierrors uint64
+ Opackets uint64
+ Oerrors uint64
+ Collisions uint64
+ Ibytes uint64
+ Obytes uint64
+ Imcasts uint64
+ Omcasts uint64
+ Iqdrops uint64
+ Noproto uint64
+ Hwassist uint64
+ Epoch int64
+ Lastchange Timeval
+}
+
+type IfaMsghdr struct {
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+ Metric int32
+}
+
+type IfmaMsghdr struct {
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Addrs int32
+ Flags int32
+ Index uint16
+ _ [2]byte
+}
+
+type IfAnnounceMsghdr struct {
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Index uint16
+ Name [16]int8
+ What uint16
+}
+
+type RtMsghdr struct {
+ Msglen uint16
+ Version uint8
+ Type uint8
+ Index uint16
+ _ [2]byte
+ Flags int32
+ Addrs int32
+ Pid int32
+ Seq int32
+ Errno int32
+ Fmask int32
+ Inits uint64
+ Rmx RtMetrics
+}
+
+type RtMetrics struct {
+ Locks uint64
+ Mtu uint64
+ Hopcount uint64
+ Expire uint64
+ Recvpipe uint64
+ Sendpipe uint64
+ Ssthresh uint64
+ Rtt uint64
+ Rttvar uint64
+ Pksent uint64
+ Weight uint64
+ Filler [3]uint64
+}
+
+const (
+ SizeofBpfVersion = 0x4
+ SizeofBpfStat = 0x8
+ SizeofBpfZbuf = 0x18
+ SizeofBpfProgram = 0x10
+ SizeofBpfInsn = 0x8
+ SizeofBpfHdr = 0x20
+ SizeofBpfZbufHeader = 0x20
+)
+
+type BpfVersion struct {
+ Major uint16
+ Minor uint16
+}
+
+type BpfStat struct {
+ Recv uint32
+ Drop uint32
+}
+
+type BpfZbuf struct {
+ Bufa *byte
+ Bufb *byte
+ Buflen uint64
+}
+
+type BpfProgram struct {
+ Len uint32
+ _ [4]byte
+ Insns *BpfInsn
+}
+
+type BpfInsn struct {
+ Code uint16
+ Jt uint8
+ Jf uint8
+ K uint32
+}
+
+type BpfHdr struct {
+ Tstamp Timeval
+ Caplen uint32
+ Datalen uint32
+ Hdrlen uint16
+ _ [6]byte
+}
+
+type BpfZbufHeader struct {
+ Kernel_gen uint32
+ Kernel_len uint32
+ User_gen uint32
+ _ [5]uint32
+}
+
+type Termios struct {
+ Iflag uint32
+ Oflag uint32
+ Cflag uint32
+ Lflag uint32
+ Cc [20]uint8
+ Ispeed uint32
+ Ospeed uint32
+}
+
+type Winsize struct {
+ Row uint16
+ Col uint16
+ Xpixel uint16
+ Ypixel uint16
+}
+
+const (
+ AT_FDCWD = -0x64
+ AT_REMOVEDIR = 0x800
+ AT_SYMLINK_FOLLOW = 0x400
+ AT_SYMLINK_NOFOLLOW = 0x200
+)
+
+type PollFd struct {
+ Fd int32
+ Events int16
+ Revents int16
+}
+
+const (
+ POLLERR = 0x8
+ POLLHUP = 0x10
+ POLLIN = 0x1
+ POLLINIGNEOF = 0x2000
+ POLLNVAL = 0x20
+ POLLOUT = 0x4
+ POLLPRI = 0x2
+ POLLRDBAND = 0x80
+ POLLRDNORM = 0x40
+ POLLWRBAND = 0x100
+ POLLWRNORM = 0x4
+)
+
+type CapRights struct {
+ Rights [2]uint64
+}
+
+type Utsname struct {
+ Sysname [256]byte
+ Nodename [256]byte
+ Release [256]byte
+ Version [256]byte
+ Machine [256]byte
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
index e89bc6b36..ebf10d48d 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x4
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x4
- sizeofLongLong = 0x8
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
PathMax = 0x1000
)
@@ -98,7 +98,6 @@ type _Gid_t uint32
type Stat_t struct {
Dev uint64
_ uint16
- _ [2]byte
_ uint32
Mode uint32
Nlink uint32
@@ -106,7 +105,6 @@ type Stat_t struct {
Gid uint32
Rdev uint64
_ uint16
- _ [2]byte
Size int64
Blksize int32
Blocks int64
@@ -248,9 +246,15 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
- _ [2]byte
Ifindex int32
Addr [8]byte
}
@@ -271,6 +275,16 @@ type RawSockaddrVM struct {
Zero [4]uint8
}
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -365,7 +379,6 @@ type TCPInfo struct {
Probes uint8
Backoff uint8
Options uint8
- _ [2]byte
Rto uint32
Ato uint32
Snd_mss uint32
@@ -401,9 +414,12 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x8
SizeofIPMreq = 0x8
@@ -433,6 +449,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -476,7 +493,7 @@ const (
IFLA_EVENT = 0x2c
IFLA_NEW_NETNSID = 0x2d
IFLA_IF_NETNSID = 0x2e
- IFLA_MAX = 0x31
+ IFLA_MAX = 0x33
RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd
@@ -501,6 +518,20 @@ const (
RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1
RTN_LOCAL = 0x2
@@ -617,7 +648,6 @@ type SockFilter struct {
type SockFprog struct {
Len uint16
- _ [2]byte
Filter *SockFilter
}
@@ -753,11 +783,10 @@ type Winsize struct {
type Taskstats struct {
Version uint16
- _ [2]byte
Ac_exitcode uint32
Ac_flag uint8
Ac_nice uint8
- _ [6]byte
+ _ [4]byte
Cpu_count uint64
Cpu_delay_total uint64
Blkio_count uint64
@@ -799,6 +828,8 @@ type Taskstats struct {
Cpu_scaled_run_real_total uint64
Freepages_count uint64
Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
}
const (
@@ -1831,7 +1862,6 @@ type RTCTime struct {
type RTCWkAlrm struct {
Enabled uint8
Pending uint8
- _ [2]byte
Time RTCTime
}
@@ -1844,3 +1874,113 @@ type RTCPLLInfo struct {
Negmult int32
Clock int32
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+}
+
+const (
+ BLKPG = 0x1269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
index d95372bae..99a6900d2 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
PathMax = 0x1000
)
@@ -33,13 +33,11 @@ type Timeval struct {
type Timex struct {
Modes uint32
- _ [4]byte
Offset int64
Freq int64
Maxerror int64
Esterror int64
Status int32
- _ [4]byte
Constant int64
Precision int64
Tolerance int64
@@ -48,7 +46,6 @@ type Timex struct {
Ppsfreq int64
Jitter int64
Shift int32
- _ [4]byte
Stabil int64
Jitcnt int64
Calcnt int64
@@ -162,7 +159,6 @@ type Fsid struct {
type Flock_t struct {
Type int16
Whence int16
- _ [4]byte
Start int64
Len int64
Pid int32
@@ -250,9 +246,15 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
- _ [2]byte
Ifindex int32
Addr [8]byte
}
@@ -273,6 +275,16 @@ type RawSockaddrVM struct {
Zero [4]uint8
}
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -321,7 +333,6 @@ type PacketMreq struct {
type Msghdr struct {
Name *byte
Namelen uint32
- _ [4]byte
Iov *Iovec
Iovlen uint64
Control *byte
@@ -369,7 +380,6 @@ type TCPInfo struct {
Probes uint8
Backoff uint8
Options uint8
- _ [2]byte
Rto uint32
Ato uint32
Snd_mss uint32
@@ -405,9 +415,12 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8
@@ -437,6 +450,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -480,7 +494,7 @@ const (
IFLA_EVENT = 0x2c
IFLA_NEW_NETNSID = 0x2d
IFLA_IF_NETNSID = 0x2e
- IFLA_MAX = 0x31
+ IFLA_MAX = 0x33
RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd
@@ -505,6 +519,20 @@ const (
RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1
RTN_LOCAL = 0x2
@@ -621,7 +649,6 @@ type SockFilter struct {
type SockFprog struct {
Len uint16
- _ [6]byte
Filter *SockFilter
}
@@ -679,7 +706,6 @@ type Sysinfo_t struct {
Freeswap uint64
Procs uint16
Pad uint16
- _ [4]byte
Totalhigh uint64
Freehigh uint64
Unit uint32
@@ -698,7 +724,6 @@ type Utsname struct {
type Ustat_t struct {
Tfree int32
- _ [4]byte
Tinode uint64
Fname [6]int8
Fpack [6]int8
@@ -771,11 +796,9 @@ type Winsize struct {
type Taskstats struct {
Version uint16
- _ [2]byte
Ac_exitcode uint32
Ac_flag uint8
Ac_nice uint8
- _ [6]byte
Cpu_count uint64
Cpu_delay_total uint64
Blkio_count uint64
@@ -793,7 +816,6 @@ type Taskstats struct {
Ac_pid uint32
Ac_ppid uint32
Ac_btime uint32
- _ [4]byte
Ac_etime uint64
Ac_utime uint64
Ac_stime uint64
@@ -817,6 +839,8 @@ type Taskstats struct {
Cpu_scaled_run_real_total uint64
Freepages_count uint64
Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
}
const (
@@ -1165,7 +1189,6 @@ type HDGeometry struct {
Heads uint8
Sectors uint8
Cylinders uint16
- _ [4]byte
Start uint64
}
@@ -1851,7 +1874,6 @@ type RTCTime struct {
type RTCWkAlrm struct {
Enabled uint8
Pending uint8
- _ [2]byte
Time RTCTime
}
@@ -1864,3 +1886,114 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x1269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
index 77875ba01..5ccc4b541 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x4
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x4
- sizeofLongLong = 0x8
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
PathMax = 0x1000
)
@@ -98,7 +98,6 @@ type _Gid_t uint32
type Stat_t struct {
Dev uint64
_ uint16
- _ [2]byte
_ uint32
Mode uint32
Nlink uint32
@@ -106,7 +105,7 @@ type Stat_t struct {
Gid uint32
Rdev uint64
_ uint16
- _ [6]byte
+ _ [4]byte
Size int64
Blksize int32
_ [4]byte
@@ -251,9 +250,15 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
- _ [2]byte
Ifindex int32
Addr [8]byte
}
@@ -274,6 +279,16 @@ type RawSockaddrVM struct {
Zero [4]uint8
}
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
type RawSockaddr struct {
Family uint16
Data [14]uint8
@@ -368,7 +383,6 @@ type TCPInfo struct {
Probes uint8
Backoff uint8
Options uint8
- _ [2]byte
Rto uint32
Ato uint32
Snd_mss uint32
@@ -404,9 +418,12 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x8
SizeofIPMreq = 0x8
@@ -436,6 +453,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -479,7 +497,7 @@ const (
IFLA_EVENT = 0x2c
IFLA_NEW_NETNSID = 0x2d
IFLA_IF_NETNSID = 0x2e
- IFLA_MAX = 0x31
+ IFLA_MAX = 0x33
RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd
@@ -504,6 +522,20 @@ const (
RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1
RTN_LOCAL = 0x2
@@ -620,7 +652,6 @@ type SockFilter struct {
type SockFprog struct {
Len uint16
- _ [2]byte
Filter *SockFilter
}
@@ -741,11 +772,10 @@ type Winsize struct {
type Taskstats struct {
Version uint16
- _ [2]byte
Ac_exitcode uint32
Ac_flag uint8
Ac_nice uint8
- _ [6]byte
+ _ [4]byte
Cpu_count uint64
Cpu_delay_total uint64
Blkio_count uint64
@@ -787,6 +817,8 @@ type Taskstats struct {
Cpu_scaled_run_real_total uint64
Freepages_count uint64
Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
}
const (
@@ -1820,7 +1852,6 @@ type RTCTime struct {
type RTCWkAlrm struct {
Enabled uint8
Pending uint8
- _ [2]byte
Time RTCTime
}
@@ -1833,3 +1864,114 @@ type RTCPLLInfo struct {
Negmult int32
Clock int32
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x1269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
index 5a9df694a..be375d9bb 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
PathMax = 0x1000
)
@@ -33,13 +33,11 @@ type Timeval struct {
type Timex struct {
Modes uint32
- _ [4]byte
Offset int64
Freq int64
Maxerror int64
Esterror int64
Status int32
- _ [4]byte
Constant int64
Precision int64
Tolerance int64
@@ -48,7 +46,6 @@ type Timex struct {
Ppsfreq int64
Jitter int64
Shift int32
- _ [4]byte
Stabil int64
Jitcnt int64
Calcnt int64
@@ -163,7 +160,6 @@ type Fsid struct {
type Flock_t struct {
Type int16
Whence int16
- _ [4]byte
Start int64
Len int64
Pid int32
@@ -251,9 +247,15 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
- _ [2]byte
Ifindex int32
Addr [8]byte
}
@@ -274,6 +276,16 @@ type RawSockaddrVM struct {
Zero [4]uint8
}
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -322,7 +334,6 @@ type PacketMreq struct {
type Msghdr struct {
Name *byte
Namelen uint32
- _ [4]byte
Iov *Iovec
Iovlen uint64
Control *byte
@@ -370,7 +381,6 @@ type TCPInfo struct {
Probes uint8
Backoff uint8
Options uint8
- _ [2]byte
Rto uint32
Ato uint32
Snd_mss uint32
@@ -406,9 +416,12 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8
@@ -438,6 +451,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -481,7 +495,7 @@ const (
IFLA_EVENT = 0x2c
IFLA_NEW_NETNSID = 0x2d
IFLA_IF_NETNSID = 0x2e
- IFLA_MAX = 0x31
+ IFLA_MAX = 0x33
RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd
@@ -506,6 +520,20 @@ const (
RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1
RTN_LOCAL = 0x2
@@ -622,7 +650,6 @@ type SockFilter struct {
type SockFprog struct {
Len uint16
- _ [6]byte
Filter *SockFilter
}
@@ -657,7 +684,6 @@ type Sysinfo_t struct {
Freeswap uint64
Procs uint16
Pad uint16
- _ [4]byte
Totalhigh uint64
Freehigh uint64
Unit uint32
@@ -676,7 +702,6 @@ type Utsname struct {
type Ustat_t struct {
Tfree int32
- _ [4]byte
Tinode uint64
Fname [6]int8
Fpack [6]int8
@@ -750,11 +775,9 @@ type Winsize struct {
type Taskstats struct {
Version uint16
- _ [2]byte
Ac_exitcode uint32
Ac_flag uint8
Ac_nice uint8
- _ [6]byte
Cpu_count uint64
Cpu_delay_total uint64
Blkio_count uint64
@@ -772,7 +795,6 @@ type Taskstats struct {
Ac_pid uint32
Ac_ppid uint32
Ac_btime uint32
- _ [4]byte
Ac_etime uint64
Ac_utime uint64
Ac_stime uint64
@@ -796,6 +818,8 @@ type Taskstats struct {
Cpu_scaled_run_real_total uint64
Freepages_count uint64
Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
}
const (
@@ -1144,7 +1168,6 @@ type HDGeometry struct {
Heads uint8
Sectors uint8
Cylinders uint16
- _ [4]byte
Start uint64
}
@@ -1830,7 +1853,6 @@ type RTCTime struct {
type RTCWkAlrm struct {
Enabled uint8
Pending uint8
- _ [2]byte
Time RTCTime
}
@@ -1843,3 +1865,114 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x1269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
index dcb239de8..195f7e1f8 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x4
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x4
- sizeofLongLong = 0x8
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
PathMax = 0x1000
)
@@ -249,9 +249,15 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
- _ [2]byte
Ifindex int32
Addr [8]byte
}
@@ -272,6 +278,16 @@ type RawSockaddrVM struct {
Zero [4]uint8
}
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -366,7 +382,6 @@ type TCPInfo struct {
Probes uint8
Backoff uint8
Options uint8
- _ [2]byte
Rto uint32
Ato uint32
Snd_mss uint32
@@ -402,9 +417,12 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x8
SizeofIPMreq = 0x8
@@ -434,6 +452,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -477,7 +496,7 @@ const (
IFLA_EVENT = 0x2c
IFLA_NEW_NETNSID = 0x2d
IFLA_IF_NETNSID = 0x2e
- IFLA_MAX = 0x31
+ IFLA_MAX = 0x33
RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd
@@ -502,6 +521,20 @@ const (
RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1
RTN_LOCAL = 0x2
@@ -618,7 +651,6 @@ type SockFilter struct {
type SockFprog struct {
Len uint16
- _ [2]byte
Filter *SockFilter
}
@@ -745,11 +777,10 @@ type Winsize struct {
type Taskstats struct {
Version uint16
- _ [2]byte
Ac_exitcode uint32
Ac_flag uint8
Ac_nice uint8
- _ [6]byte
+ _ [4]byte
Cpu_count uint64
Cpu_delay_total uint64
Blkio_count uint64
@@ -791,6 +822,8 @@ type Taskstats struct {
Cpu_scaled_run_real_total uint64
Freepages_count uint64
Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
}
const (
@@ -1825,7 +1858,6 @@ type RTCTime struct {
type RTCWkAlrm struct {
Enabled uint8
Pending uint8
- _ [2]byte
Time RTCTime
}
@@ -1838,3 +1870,114 @@ type RTCPLLInfo struct {
Negmult int32
Clock int32
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
index 9cf85f721..77acf5698 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
PathMax = 0x1000
)
@@ -33,13 +33,11 @@ type Timeval struct {
type Timex struct {
Modes uint32
- _ [4]byte
Offset int64
Freq int64
Maxerror int64
Esterror int64
Status int32
- _ [4]byte
Constant int64
Precision int64
Tolerance int64
@@ -48,7 +46,6 @@ type Timex struct {
Ppsfreq int64
Jitter int64
Shift int32
- _ [4]byte
Stabil int64
Jitcnt int64
Calcnt int64
@@ -163,7 +160,6 @@ type Fsid struct {
type Flock_t struct {
Type int16
Whence int16
- _ [4]byte
Start int64
Len int64
Pid int32
@@ -251,9 +247,15 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
- _ [2]byte
Ifindex int32
Addr [8]byte
}
@@ -274,6 +276,16 @@ type RawSockaddrVM struct {
Zero [4]uint8
}
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -322,7 +334,6 @@ type PacketMreq struct {
type Msghdr struct {
Name *byte
Namelen uint32
- _ [4]byte
Iov *Iovec
Iovlen uint64
Control *byte
@@ -370,7 +381,6 @@ type TCPInfo struct {
Probes uint8
Backoff uint8
Options uint8
- _ [2]byte
Rto uint32
Ato uint32
Snd_mss uint32
@@ -406,9 +416,12 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8
@@ -438,6 +451,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -481,7 +495,7 @@ const (
IFLA_EVENT = 0x2c
IFLA_NEW_NETNSID = 0x2d
IFLA_IF_NETNSID = 0x2e
- IFLA_MAX = 0x31
+ IFLA_MAX = 0x33
RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd
@@ -506,6 +520,20 @@ const (
RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1
RTN_LOCAL = 0x2
@@ -622,7 +650,6 @@ type SockFilter struct {
type SockFprog struct {
Len uint16
- _ [6]byte
Filter *SockFilter
}
@@ -660,7 +687,6 @@ type Sysinfo_t struct {
Freeswap uint64
Procs uint16
Pad uint16
- _ [4]byte
Totalhigh uint64
Freehigh uint64
Unit uint32
@@ -679,7 +705,6 @@ type Utsname struct {
type Ustat_t struct {
Tfree int32
- _ [4]byte
Tinode uint64
Fname [6]int8
Fpack [6]int8
@@ -752,11 +777,9 @@ type Winsize struct {
type Taskstats struct {
Version uint16
- _ [2]byte
Ac_exitcode uint32
Ac_flag uint8
Ac_nice uint8
- _ [6]byte
Cpu_count uint64
Cpu_delay_total uint64
Blkio_count uint64
@@ -774,7 +797,6 @@ type Taskstats struct {
Ac_pid uint32
Ac_ppid uint32
Ac_btime uint32
- _ [4]byte
Ac_etime uint64
Ac_utime uint64
Ac_stime uint64
@@ -798,6 +820,8 @@ type Taskstats struct {
Cpu_scaled_run_real_total uint64
Freepages_count uint64
Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
}
const (
@@ -1146,7 +1170,6 @@ type HDGeometry struct {
Heads uint8
Sectors uint8
Cylinders uint16
- _ [4]byte
Start uint64
}
@@ -1832,7 +1855,6 @@ type RTCTime struct {
type RTCWkAlrm struct {
Enabled uint8
Pending uint8
- _ [2]byte
Time RTCTime
}
@@ -1845,3 +1867,114 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
index 6fd66e751..2fb7498da 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
PathMax = 0x1000
)
@@ -33,13 +33,11 @@ type Timeval struct {
type Timex struct {
Modes uint32
- _ [4]byte
Offset int64
Freq int64
Maxerror int64
Esterror int64
Status int32
- _ [4]byte
Constant int64
Precision int64
Tolerance int64
@@ -48,7 +46,6 @@ type Timex struct {
Ppsfreq int64
Jitter int64
Shift int32
- _ [4]byte
Stabil int64
Jitcnt int64
Calcnt int64
@@ -163,7 +160,6 @@ type Fsid struct {
type Flock_t struct {
Type int16
Whence int16
- _ [4]byte
Start int64
Len int64
Pid int32
@@ -251,9 +247,15 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
- _ [2]byte
Ifindex int32
Addr [8]byte
}
@@ -274,6 +276,16 @@ type RawSockaddrVM struct {
Zero [4]uint8
}
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -322,7 +334,6 @@ type PacketMreq struct {
type Msghdr struct {
Name *byte
Namelen uint32
- _ [4]byte
Iov *Iovec
Iovlen uint64
Control *byte
@@ -370,7 +381,6 @@ type TCPInfo struct {
Probes uint8
Backoff uint8
Options uint8
- _ [2]byte
Rto uint32
Ato uint32
Snd_mss uint32
@@ -406,9 +416,12 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8
@@ -438,6 +451,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -481,7 +495,7 @@ const (
IFLA_EVENT = 0x2c
IFLA_NEW_NETNSID = 0x2d
IFLA_IF_NETNSID = 0x2e
- IFLA_MAX = 0x31
+ IFLA_MAX = 0x33
RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd
@@ -506,6 +520,20 @@ const (
RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1
RTN_LOCAL = 0x2
@@ -622,7 +650,6 @@ type SockFilter struct {
type SockFprog struct {
Len uint16
- _ [6]byte
Filter *SockFilter
}
@@ -660,7 +687,6 @@ type Sysinfo_t struct {
Freeswap uint64
Procs uint16
Pad uint16
- _ [4]byte
Totalhigh uint64
Freehigh uint64
Unit uint32
@@ -679,7 +705,6 @@ type Utsname struct {
type Ustat_t struct {
Tfree int32
- _ [4]byte
Tinode uint64
Fname [6]int8
Fpack [6]int8
@@ -752,11 +777,9 @@ type Winsize struct {
type Taskstats struct {
Version uint16
- _ [2]byte
Ac_exitcode uint32
Ac_flag uint8
Ac_nice uint8
- _ [6]byte
Cpu_count uint64
Cpu_delay_total uint64
Blkio_count uint64
@@ -774,7 +797,6 @@ type Taskstats struct {
Ac_pid uint32
Ac_ppid uint32
Ac_btime uint32
- _ [4]byte
Ac_etime uint64
Ac_utime uint64
Ac_stime uint64
@@ -798,6 +820,8 @@ type Taskstats struct {
Cpu_scaled_run_real_total uint64
Freepages_count uint64
Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
}
const (
@@ -1146,7 +1170,6 @@ type HDGeometry struct {
Heads uint8
Sectors uint8
Cylinders uint16
- _ [4]byte
Start uint64
}
@@ -1832,7 +1855,6 @@ type RTCTime struct {
type RTCWkAlrm struct {
Enabled uint8
Pending uint8
- _ [2]byte
Time RTCTime
}
@@ -1845,3 +1867,114 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
index faa5b3ef1..41cb14863 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x4
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x4
- sizeofLongLong = 0x8
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
PathMax = 0x1000
)
@@ -249,9 +249,15 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
- _ [2]byte
Ifindex int32
Addr [8]byte
}
@@ -272,6 +278,16 @@ type RawSockaddrVM struct {
Zero [4]uint8
}
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -366,7 +382,6 @@ type TCPInfo struct {
Probes uint8
Backoff uint8
Options uint8
- _ [2]byte
Rto uint32
Ato uint32
Snd_mss uint32
@@ -402,9 +417,12 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x8
SizeofIPMreq = 0x8
@@ -434,6 +452,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -477,7 +496,7 @@ const (
IFLA_EVENT = 0x2c
IFLA_NEW_NETNSID = 0x2d
IFLA_IF_NETNSID = 0x2e
- IFLA_MAX = 0x31
+ IFLA_MAX = 0x33
RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd
@@ -502,6 +521,20 @@ const (
RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1
RTN_LOCAL = 0x2
@@ -618,7 +651,6 @@ type SockFilter struct {
type SockFprog struct {
Len uint16
- _ [2]byte
Filter *SockFilter
}
@@ -745,11 +777,10 @@ type Winsize struct {
type Taskstats struct {
Version uint16
- _ [2]byte
Ac_exitcode uint32
Ac_flag uint8
Ac_nice uint8
- _ [6]byte
+ _ [4]byte
Cpu_count uint64
Cpu_delay_total uint64
Blkio_count uint64
@@ -791,6 +822,8 @@ type Taskstats struct {
Cpu_scaled_run_real_total uint64
Freepages_count uint64
Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
}
const (
@@ -1825,7 +1858,6 @@ type RTCTime struct {
type RTCWkAlrm struct {
Enabled uint8
Pending uint8
- _ [2]byte
Time RTCTime
}
@@ -1838,3 +1870,114 @@ type RTCPLLInfo struct {
Negmult int32
Clock int32
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
index ad4c45246..8e6b5fa68 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
PathMax = 0x1000
)
@@ -33,13 +33,11 @@ type Timeval struct {
type Timex struct {
Modes uint32
- _ [4]byte
Offset int64
Freq int64
Maxerror int64
Esterror int64
Status int32
- _ [4]byte
Constant int64
Precision int64
Tolerance int64
@@ -48,7 +46,6 @@ type Timex struct {
Ppsfreq int64
Jitter int64
Shift int32
- _ [4]byte
Stabil int64
Jitcnt int64
Calcnt int64
@@ -164,7 +161,6 @@ type Fsid struct {
type Flock_t struct {
Type int16
Whence int16
- _ [4]byte
Start int64
Len int64
Pid int32
@@ -252,9 +248,15 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
- _ [2]byte
Ifindex int32
Addr [8]byte
}
@@ -275,6 +277,16 @@ type RawSockaddrVM struct {
Zero [4]uint8
}
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
type RawSockaddr struct {
Family uint16
Data [14]uint8
@@ -323,7 +335,6 @@ type PacketMreq struct {
type Msghdr struct {
Name *byte
Namelen uint32
- _ [4]byte
Iov *Iovec
Iovlen uint64
Control *byte
@@ -371,7 +382,6 @@ type TCPInfo struct {
Probes uint8
Backoff uint8
Options uint8
- _ [2]byte
Rto uint32
Ato uint32
Snd_mss uint32
@@ -407,9 +417,12 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8
@@ -439,6 +452,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -482,7 +496,7 @@ const (
IFLA_EVENT = 0x2c
IFLA_NEW_NETNSID = 0x2d
IFLA_IF_NETNSID = 0x2e
- IFLA_MAX = 0x31
+ IFLA_MAX = 0x33
RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd
@@ -507,6 +521,20 @@ const (
RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1
RTN_LOCAL = 0x2
@@ -623,7 +651,6 @@ type SockFilter struct {
type SockFprog struct {
Len uint16
- _ [6]byte
Filter *SockFilter
}
@@ -667,7 +694,6 @@ type Sysinfo_t struct {
Freeswap uint64
Procs uint16
Pad uint16
- _ [4]byte
Totalhigh uint64
Freehigh uint64
Unit uint32
@@ -686,7 +712,6 @@ type Utsname struct {
type Ustat_t struct {
Tfree int32
- _ [4]byte
Tinode uint64
Fname [6]uint8
Fpack [6]uint8
@@ -760,11 +785,9 @@ type Winsize struct {
type Taskstats struct {
Version uint16
- _ [2]byte
Ac_exitcode uint32
Ac_flag uint8
Ac_nice uint8
- _ [6]byte
Cpu_count uint64
Cpu_delay_total uint64
Blkio_count uint64
@@ -782,7 +805,6 @@ type Taskstats struct {
Ac_pid uint32
Ac_ppid uint32
Ac_btime uint32
- _ [4]byte
Ac_etime uint64
Ac_utime uint64
Ac_stime uint64
@@ -806,6 +828,8 @@ type Taskstats struct {
Cpu_scaled_run_real_total uint64
Freepages_count uint64
Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
}
const (
@@ -1154,7 +1178,6 @@ type HDGeometry struct {
Heads uint8
Sectors uint8
Cylinders uint16
- _ [4]byte
Start uint64
}
@@ -1840,7 +1863,6 @@ type RTCTime struct {
type RTCWkAlrm struct {
Enabled uint8
Pending uint8
- _ [2]byte
Time RTCTime
}
@@ -1853,3 +1875,114 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
index 1fdb2f216..019d2d6a9 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
PathMax = 0x1000
)
@@ -33,13 +33,11 @@ type Timeval struct {
type Timex struct {
Modes uint32
- _ [4]byte
Offset int64
Freq int64
Maxerror int64
Esterror int64
Status int32
- _ [4]byte
Constant int64
Precision int64
Tolerance int64
@@ -48,7 +46,6 @@ type Timex struct {
Ppsfreq int64
Jitter int64
Shift int32
- _ [4]byte
Stabil int64
Jitcnt int64
Calcnt int64
@@ -164,7 +161,6 @@ type Fsid struct {
type Flock_t struct {
Type int16
Whence int16
- _ [4]byte
Start int64
Len int64
Pid int32
@@ -252,9 +248,15 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
- _ [2]byte
Ifindex int32
Addr [8]byte
}
@@ -275,6 +277,16 @@ type RawSockaddrVM struct {
Zero [4]uint8
}
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
type RawSockaddr struct {
Family uint16
Data [14]uint8
@@ -323,7 +335,6 @@ type PacketMreq struct {
type Msghdr struct {
Name *byte
Namelen uint32
- _ [4]byte
Iov *Iovec
Iovlen uint64
Control *byte
@@ -371,7 +382,6 @@ type TCPInfo struct {
Probes uint8
Backoff uint8
Options uint8
- _ [2]byte
Rto uint32
Ato uint32
Snd_mss uint32
@@ -407,9 +417,12 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8
@@ -439,6 +452,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -482,7 +496,7 @@ const (
IFLA_EVENT = 0x2c
IFLA_NEW_NETNSID = 0x2d
IFLA_IF_NETNSID = 0x2e
- IFLA_MAX = 0x31
+ IFLA_MAX = 0x33
RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd
@@ -507,6 +521,20 @@ const (
RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1
RTN_LOCAL = 0x2
@@ -623,7 +651,6 @@ type SockFilter struct {
type SockFprog struct {
Len uint16
- _ [6]byte
Filter *SockFilter
}
@@ -667,7 +694,6 @@ type Sysinfo_t struct {
Freeswap uint64
Procs uint16
Pad uint16
- _ [4]byte
Totalhigh uint64
Freehigh uint64
Unit uint32
@@ -686,7 +712,6 @@ type Utsname struct {
type Ustat_t struct {
Tfree int32
- _ [4]byte
Tinode uint64
Fname [6]uint8
Fpack [6]uint8
@@ -760,11 +785,9 @@ type Winsize struct {
type Taskstats struct {
Version uint16
- _ [2]byte
Ac_exitcode uint32
Ac_flag uint8
Ac_nice uint8
- _ [6]byte
Cpu_count uint64
Cpu_delay_total uint64
Blkio_count uint64
@@ -782,7 +805,6 @@ type Taskstats struct {
Ac_pid uint32
Ac_ppid uint32
Ac_btime uint32
- _ [4]byte
Ac_etime uint64
Ac_utime uint64
Ac_stime uint64
@@ -806,6 +828,8 @@ type Taskstats struct {
Cpu_scaled_run_real_total uint64
Freepages_count uint64
Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
}
const (
@@ -1154,7 +1178,6 @@ type HDGeometry struct {
Heads uint8
Sectors uint8
Cylinders uint16
- _ [4]byte
Start uint64
}
@@ -1840,7 +1863,6 @@ type RTCTime struct {
type RTCWkAlrm struct {
Enabled uint8
Pending uint8
- _ [2]byte
Time RTCTime
}
@@ -1853,3 +1875,114 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
new file mode 100644
index 000000000..cf110ce2b
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
@@ -0,0 +1,2005 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
+// +build riscv64,linux
+
+package unix
+
+const (
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
+ PathMax = 0x1000
+)
+
+type (
+ _C_short int16
+ _C_int int32
+ _C_long int64
+ _C_long_long int64
+)
+
+type Timespec struct {
+ Sec int64
+ Nsec int64
+}
+
+type Timeval struct {
+ Sec int64
+ Usec int64
+}
+
+type Timex struct {
+ Modes uint32
+ Offset int64
+ Freq int64
+ Maxerror int64
+ Esterror int64
+ Status int32
+ Constant int64
+ Precision int64
+ Tolerance int64
+ Time Timeval
+ Tick int64
+ Ppsfreq int64
+ Jitter int64
+ Shift int32
+ Stabil int64
+ Jitcnt int64
+ Calcnt int64
+ Errcnt int64
+ Stbcnt int64
+ Tai int32
+ _ [44]byte
+}
+
+type Time_t int64
+
+type Tms struct {
+ Utime int64
+ Stime int64
+ Cutime int64
+ Cstime int64
+}
+
+type Utimbuf struct {
+ Actime int64
+ Modtime int64
+}
+
+type Rusage struct {
+ Utime Timeval
+ Stime Timeval
+ Maxrss int64
+ Ixrss int64
+ Idrss int64
+ Isrss int64
+ Minflt int64
+ Majflt int64
+ Nswap int64
+ Inblock int64
+ Oublock int64
+ Msgsnd int64
+ Msgrcv int64
+ Nsignals int64
+ Nvcsw int64
+ Nivcsw int64
+}
+
+type Rlimit struct {
+ Cur uint64
+ Max uint64
+}
+
+type _Gid_t uint32
+
+type Stat_t struct {
+ Dev uint64
+ Ino uint64
+ Mode uint32
+ Nlink uint32
+ Uid uint32
+ Gid uint32
+ Rdev uint64
+ _ uint64
+ Size int64
+ Blksize int32
+ _ int32
+ Blocks int64
+ Atim Timespec
+ Mtim Timespec
+ Ctim Timespec
+ _ [2]int32
+}
+
+type StatxTimestamp struct {
+ Sec int64
+ Nsec uint32
+ _ int32
+}
+
+type Statx_t struct {
+ Mask uint32
+ Blksize uint32
+ Attributes uint64
+ Nlink uint32
+ Uid uint32
+ Gid uint32
+ Mode uint16
+ _ [1]uint16
+ Ino uint64
+ Size uint64
+ Blocks uint64
+ Attributes_mask uint64
+ Atime StatxTimestamp
+ Btime StatxTimestamp
+ Ctime StatxTimestamp
+ Mtime StatxTimestamp
+ Rdev_major uint32
+ Rdev_minor uint32
+ Dev_major uint32
+ Dev_minor uint32
+ _ [14]uint64
+}
+
+type Dirent struct {
+ Ino uint64
+ Off int64
+ Reclen uint16
+ Type uint8
+ Name [256]uint8
+ _ [5]byte
+}
+
+type Fsid struct {
+ Val [2]int32
+}
+
+type Flock_t struct {
+ Type int16
+ Whence int16
+ Start int64
+ Len int64
+ Pid int32
+ _ [4]byte
+}
+
+type FscryptPolicy struct {
+ Version uint8
+ Contents_encryption_mode uint8
+ Filenames_encryption_mode uint8
+ Flags uint8
+ Master_key_descriptor [8]uint8
+}
+
+type FscryptKey struct {
+ Mode uint32
+ Raw [64]uint8
+ Size uint32
+}
+
+type KeyctlDHParams struct {
+ Private int32
+ Prime int32
+ Base int32
+}
+
+const (
+ FADV_NORMAL = 0x0
+ FADV_RANDOM = 0x1
+ FADV_SEQUENTIAL = 0x2
+ FADV_WILLNEED = 0x3
+ FADV_DONTNEED = 0x4
+ FADV_NOREUSE = 0x5
+)
+
+type RawSockaddrInet4 struct {
+ Family uint16
+ Port uint16
+ Addr [4]byte /* in_addr */
+ Zero [8]uint8
+}
+
+type RawSockaddrInet6 struct {
+ Family uint16
+ Port uint16
+ Flowinfo uint32
+ Addr [16]byte /* in6_addr */
+ Scope_id uint32
+}
+
+type RawSockaddrUnix struct {
+ Family uint16
+ Path [108]uint8
+}
+
+type RawSockaddrLinklayer struct {
+ Family uint16
+ Protocol uint16
+ Ifindex int32
+ Hatype uint16
+ Pkttype uint8
+ Halen uint8
+ Addr [8]uint8
+}
+
+type RawSockaddrNetlink struct {
+ Family uint16
+ Pad uint16
+ Pid uint32
+ Groups uint32
+}
+
+type RawSockaddrHCI struct {
+ Family uint16
+ Dev uint16
+ Channel uint16
+}
+
+type RawSockaddrL2 struct {
+ Family uint16
+ Psm uint16
+ Bdaddr [6]uint8
+ Cid uint16
+ Bdaddr_type uint8
+ _ [1]byte
+}
+
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
+type RawSockaddrCAN struct {
+ Family uint16
+ Ifindex int32
+ Addr [8]byte
+}
+
+type RawSockaddrALG struct {
+ Family uint16
+ Type [14]uint8
+ Feat uint32
+ Mask uint32
+ Name [64]uint8
+}
+
+type RawSockaddrVM struct {
+ Family uint16
+ Reserved1 uint16
+ Port uint32
+ Cid uint32
+ Zero [4]uint8
+}
+
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
+type RawSockaddr struct {
+ Family uint16
+ Data [14]uint8
+}
+
+type RawSockaddrAny struct {
+ Addr RawSockaddr
+ Pad [96]uint8
+}
+
+type _Socklen uint32
+
+type Linger struct {
+ Onoff int32
+ Linger int32
+}
+
+type Iovec struct {
+ Base *byte
+ Len uint64
+}
+
+type IPMreq struct {
+ Multiaddr [4]byte /* in_addr */
+ Interface [4]byte /* in_addr */
+}
+
+type IPMreqn struct {
+ Multiaddr [4]byte /* in_addr */
+ Address [4]byte /* in_addr */
+ Ifindex int32
+}
+
+type IPv6Mreq struct {
+ Multiaddr [16]byte /* in6_addr */
+ Interface uint32
+}
+
+type PacketMreq struct {
+ Ifindex int32
+ Type uint16
+ Alen uint16
+ Address [8]uint8
+}
+
+type Msghdr struct {
+ Name *byte
+ Namelen uint32
+ Iov *Iovec
+ Iovlen uint64
+ Control *byte
+ Controllen uint64
+ Flags int32
+ _ [4]byte
+}
+
+type Cmsghdr struct {
+ Len uint64
+ Level int32
+ Type int32
+}
+
+type Inet4Pktinfo struct {
+ Ifindex int32
+ Spec_dst [4]byte /* in_addr */
+ Addr [4]byte /* in_addr */
+}
+
+type Inet6Pktinfo struct {
+ Addr [16]byte /* in6_addr */
+ Ifindex uint32
+}
+
+type IPv6MTUInfo struct {
+ Addr RawSockaddrInet6
+ Mtu uint32
+}
+
+type ICMPv6Filter struct {
+ Data [8]uint32
+}
+
+type Ucred struct {
+ Pid int32
+ Uid uint32
+ Gid uint32
+}
+
+type TCPInfo struct {
+ State uint8
+ Ca_state uint8
+ Retransmits uint8
+ Probes uint8
+ Backoff uint8
+ Options uint8
+ Rto uint32
+ Ato uint32
+ Snd_mss uint32
+ Rcv_mss uint32
+ Unacked uint32
+ Sacked uint32
+ Lost uint32
+ Retrans uint32
+ Fackets uint32
+ Last_data_sent uint32
+ Last_ack_sent uint32
+ Last_data_recv uint32
+ Last_ack_recv uint32
+ Pmtu uint32
+ Rcv_ssthresh uint32
+ Rtt uint32
+ Rttvar uint32
+ Snd_ssthresh uint32
+ Snd_cwnd uint32
+ Advmss uint32
+ Reordering uint32
+ Rcv_rtt uint32
+ Rcv_space uint32
+ Total_retrans uint32
+}
+
+const (
+ SizeofSockaddrInet4 = 0x10
+ SizeofSockaddrInet6 = 0x1c
+ SizeofSockaddrAny = 0x70
+ SizeofSockaddrUnix = 0x6e
+ SizeofSockaddrLinklayer = 0x14
+ SizeofSockaddrNetlink = 0xc
+ SizeofSockaddrHCI = 0x6
+ SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
+ SizeofSockaddrCAN = 0x10
+ SizeofSockaddrALG = 0x58
+ SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
+ SizeofLinger = 0x8
+ SizeofIovec = 0x10
+ SizeofIPMreq = 0x8
+ SizeofIPMreqn = 0xc
+ SizeofIPv6Mreq = 0x14
+ SizeofPacketMreq = 0x10
+ SizeofMsghdr = 0x38
+ SizeofCmsghdr = 0x10
+ SizeofInet4Pktinfo = 0xc
+ SizeofInet6Pktinfo = 0x14
+ SizeofIPv6MTUInfo = 0x20
+ SizeofICMPv6Filter = 0x20
+ SizeofUcred = 0xc
+ SizeofTCPInfo = 0x68
+)
+
+const (
+ IFA_UNSPEC = 0x0
+ IFA_ADDRESS = 0x1
+ IFA_LOCAL = 0x2
+ IFA_LABEL = 0x3
+ IFA_BROADCAST = 0x4
+ IFA_ANYCAST = 0x5
+ IFA_CACHEINFO = 0x6
+ IFA_MULTICAST = 0x7
+ IFLA_UNSPEC = 0x0
+ IFLA_ADDRESS = 0x1
+ IFLA_BROADCAST = 0x2
+ IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
+ IFLA_MTU = 0x4
+ IFLA_LINK = 0x5
+ IFLA_QDISC = 0x6
+ IFLA_STATS = 0x7
+ IFLA_COST = 0x8
+ IFLA_PRIORITY = 0x9
+ IFLA_MASTER = 0xa
+ IFLA_WIRELESS = 0xb
+ IFLA_PROTINFO = 0xc
+ IFLA_TXQLEN = 0xd
+ IFLA_MAP = 0xe
+ IFLA_WEIGHT = 0xf
+ IFLA_OPERSTATE = 0x10
+ IFLA_LINKMODE = 0x11
+ IFLA_LINKINFO = 0x12
+ IFLA_NET_NS_PID = 0x13
+ IFLA_IFALIAS = 0x14
+ IFLA_NUM_VF = 0x15
+ IFLA_VFINFO_LIST = 0x16
+ IFLA_STATS64 = 0x17
+ IFLA_VF_PORTS = 0x18
+ IFLA_PORT_SELF = 0x19
+ IFLA_AF_SPEC = 0x1a
+ IFLA_GROUP = 0x1b
+ IFLA_NET_NS_FD = 0x1c
+ IFLA_EXT_MASK = 0x1d
+ IFLA_PROMISCUITY = 0x1e
+ IFLA_NUM_TX_QUEUES = 0x1f
+ IFLA_NUM_RX_QUEUES = 0x20
+ IFLA_CARRIER = 0x21
+ IFLA_PHYS_PORT_ID = 0x22
+ IFLA_CARRIER_CHANGES = 0x23
+ IFLA_PHYS_SWITCH_ID = 0x24
+ IFLA_LINK_NETNSID = 0x25
+ IFLA_PHYS_PORT_NAME = 0x26
+ IFLA_PROTO_DOWN = 0x27
+ IFLA_GSO_MAX_SEGS = 0x28
+ IFLA_GSO_MAX_SIZE = 0x29
+ IFLA_PAD = 0x2a
+ IFLA_XDP = 0x2b
+ IFLA_EVENT = 0x2c
+ IFLA_NEW_NETNSID = 0x2d
+ IFLA_IF_NETNSID = 0x2e
+ IFLA_MAX = 0x33
+ RT_SCOPE_UNIVERSE = 0x0
+ RT_SCOPE_SITE = 0xc8
+ RT_SCOPE_LINK = 0xfd
+ RT_SCOPE_HOST = 0xfe
+ RT_SCOPE_NOWHERE = 0xff
+ RT_TABLE_UNSPEC = 0x0
+ RT_TABLE_COMPAT = 0xfc
+ RT_TABLE_DEFAULT = 0xfd
+ RT_TABLE_MAIN = 0xfe
+ RT_TABLE_LOCAL = 0xff
+ RT_TABLE_MAX = 0xffffffff
+ RTA_UNSPEC = 0x0
+ RTA_DST = 0x1
+ RTA_SRC = 0x2
+ RTA_IIF = 0x3
+ RTA_OIF = 0x4
+ RTA_GATEWAY = 0x5
+ RTA_PRIORITY = 0x6
+ RTA_PREFSRC = 0x7
+ RTA_METRICS = 0x8
+ RTA_MULTIPATH = 0x9
+ RTA_FLOW = 0xb
+ RTA_CACHEINFO = 0xc
+ RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
+ RTN_UNSPEC = 0x0
+ RTN_UNICAST = 0x1
+ RTN_LOCAL = 0x2
+ RTN_BROADCAST = 0x3
+ RTN_ANYCAST = 0x4
+ RTN_MULTICAST = 0x5
+ RTN_BLACKHOLE = 0x6
+ RTN_UNREACHABLE = 0x7
+ RTN_PROHIBIT = 0x8
+ RTN_THROW = 0x9
+ RTN_NAT = 0xa
+ RTN_XRESOLVE = 0xb
+ RTNLGRP_NONE = 0x0
+ RTNLGRP_LINK = 0x1
+ RTNLGRP_NOTIFY = 0x2
+ RTNLGRP_NEIGH = 0x3
+ RTNLGRP_TC = 0x4
+ RTNLGRP_IPV4_IFADDR = 0x5
+ RTNLGRP_IPV4_MROUTE = 0x6
+ RTNLGRP_IPV4_ROUTE = 0x7
+ RTNLGRP_IPV4_RULE = 0x8
+ RTNLGRP_IPV6_IFADDR = 0x9
+ RTNLGRP_IPV6_MROUTE = 0xa
+ RTNLGRP_IPV6_ROUTE = 0xb
+ RTNLGRP_IPV6_IFINFO = 0xc
+ RTNLGRP_IPV6_PREFIX = 0x12
+ RTNLGRP_IPV6_RULE = 0x13
+ RTNLGRP_ND_USEROPT = 0x14
+ SizeofNlMsghdr = 0x10
+ SizeofNlMsgerr = 0x14
+ SizeofRtGenmsg = 0x1
+ SizeofNlAttr = 0x4
+ SizeofRtAttr = 0x4
+ SizeofIfInfomsg = 0x10
+ SizeofIfAddrmsg = 0x8
+ SizeofRtMsg = 0xc
+ SizeofRtNexthop = 0x8
+)
+
+type NlMsghdr struct {
+ Len uint32
+ Type uint16
+ Flags uint16
+ Seq uint32
+ Pid uint32
+}
+
+type NlMsgerr struct {
+ Error int32
+ Msg NlMsghdr
+}
+
+type RtGenmsg struct {
+ Family uint8
+}
+
+type NlAttr struct {
+ Len uint16
+ Type uint16
+}
+
+type RtAttr struct {
+ Len uint16
+ Type uint16
+}
+
+type IfInfomsg struct {
+ Family uint8
+ _ uint8
+ Type uint16
+ Index int32
+ Flags uint32
+ Change uint32
+}
+
+type IfAddrmsg struct {
+ Family uint8
+ Prefixlen uint8
+ Flags uint8
+ Scope uint8
+ Index uint32
+}
+
+type RtMsg struct {
+ Family uint8
+ Dst_len uint8
+ Src_len uint8
+ Tos uint8
+ Table uint8
+ Protocol uint8
+ Scope uint8
+ Type uint8
+ Flags uint32
+}
+
+type RtNexthop struct {
+ Len uint16
+ Flags uint8
+ Hops uint8
+ Ifindex int32
+}
+
+const (
+ SizeofSockFilter = 0x8
+ SizeofSockFprog = 0x10
+)
+
+type SockFilter struct {
+ Code uint16
+ Jt uint8
+ Jf uint8
+ K uint32
+}
+
+type SockFprog struct {
+ Len uint16
+ Filter *SockFilter
+}
+
+type InotifyEvent struct {
+ Wd int32
+ Mask uint32
+ Cookie uint32
+ Len uint32
+}
+
+const SizeofInotifyEvent = 0x10
+
+type PtraceRegs struct {
+ Pc uint64
+ Ra uint64
+ Sp uint64
+ Gp uint64
+ Tp uint64
+ T0 uint64
+ T1 uint64
+ T2 uint64
+ S0 uint64
+ S1 uint64
+ A0 uint64
+ A1 uint64
+ A2 uint64
+ A3 uint64
+ A4 uint64
+ A5 uint64
+ A6 uint64
+ A7 uint64
+ S2 uint64
+ S3 uint64
+ S4 uint64
+ S5 uint64
+ S6 uint64
+ S7 uint64
+ S8 uint64
+ S9 uint64
+ S10 uint64
+ S11 uint64
+ T3 uint64
+ T4 uint64
+ T5 uint64
+ T6 uint64
+}
+
+type FdSet struct {
+ Bits [16]int64
+}
+
+type Sysinfo_t struct {
+ Uptime int64
+ Loads [3]uint64
+ Totalram uint64
+ Freeram uint64
+ Sharedram uint64
+ Bufferram uint64
+ Totalswap uint64
+ Freeswap uint64
+ Procs uint16
+ Pad uint16
+ Totalhigh uint64
+ Freehigh uint64
+ Unit uint32
+ _ [0]uint8
+ _ [4]byte
+}
+
+type Utsname struct {
+ Sysname [65]byte
+ Nodename [65]byte
+ Release [65]byte
+ Version [65]byte
+ Machine [65]byte
+ Domainname [65]byte
+}
+
+type Ustat_t struct {
+ Tfree int32
+ Tinode uint64
+ Fname [6]uint8
+ Fpack [6]uint8
+ _ [4]byte
+}
+
+type EpollEvent struct {
+ Events uint32
+ Fd int32
+ Pad int32
+}
+
+const (
+ AT_EMPTY_PATH = 0x1000
+ AT_FDCWD = -0x64
+ AT_NO_AUTOMOUNT = 0x800
+ AT_REMOVEDIR = 0x200
+
+ AT_STATX_SYNC_AS_STAT = 0x0
+ AT_STATX_FORCE_SYNC = 0x2000
+ AT_STATX_DONT_SYNC = 0x4000
+
+ AT_SYMLINK_FOLLOW = 0x400
+ AT_SYMLINK_NOFOLLOW = 0x100
+
+ AT_EACCESS = 0x200
+)
+
+type PollFd struct {
+ Fd int32
+ Events int16
+ Revents int16
+}
+
+const (
+ POLLIN = 0x1
+ POLLPRI = 0x2
+ POLLOUT = 0x4
+ POLLRDHUP = 0x2000
+ POLLERR = 0x8
+ POLLHUP = 0x10
+ POLLNVAL = 0x20
+)
+
+type Sigset_t struct {
+ Val [16]uint64
+}
+
+const RNDGETENTCNT = 0x80045200
+
+const PERF_IOC_FLAG_GROUP = 0x1
+
+type Termios struct {
+ Iflag uint32
+ Oflag uint32
+ Cflag uint32
+ Lflag uint32
+ Line uint8
+ Cc [19]uint8
+ Ispeed uint32
+ Ospeed uint32
+}
+
+type Winsize struct {
+ Row uint16
+ Col uint16
+ Xpixel uint16
+ Ypixel uint16
+}
+
+type Taskstats struct {
+ Version uint16
+ Ac_exitcode uint32
+ Ac_flag uint8
+ Ac_nice uint8
+ Cpu_count uint64
+ Cpu_delay_total uint64
+ Blkio_count uint64
+ Blkio_delay_total uint64
+ Swapin_count uint64
+ Swapin_delay_total uint64
+ Cpu_run_real_total uint64
+ Cpu_run_virtual_total uint64
+ Ac_comm [32]uint8
+ Ac_sched uint8
+ Ac_pad [3]uint8
+ _ [4]byte
+ Ac_uid uint32
+ Ac_gid uint32
+ Ac_pid uint32
+ Ac_ppid uint32
+ Ac_btime uint32
+ Ac_etime uint64
+ Ac_utime uint64
+ Ac_stime uint64
+ Ac_minflt uint64
+ Ac_majflt uint64
+ Coremem uint64
+ Virtmem uint64
+ Hiwater_rss uint64
+ Hiwater_vm uint64
+ Read_char uint64
+ Write_char uint64
+ Read_syscalls uint64
+ Write_syscalls uint64
+ Read_bytes uint64
+ Write_bytes uint64
+ Cancelled_write_bytes uint64
+ Nvcsw uint64
+ Nivcsw uint64
+ Ac_utimescaled uint64
+ Ac_stimescaled uint64
+ Cpu_scaled_run_real_total uint64
+ Freepages_count uint64
+ Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
+}
+
+const (
+ TASKSTATS_CMD_UNSPEC = 0x0
+ TASKSTATS_CMD_GET = 0x1
+ TASKSTATS_CMD_NEW = 0x2
+ TASKSTATS_TYPE_UNSPEC = 0x0
+ TASKSTATS_TYPE_PID = 0x1
+ TASKSTATS_TYPE_TGID = 0x2
+ TASKSTATS_TYPE_STATS = 0x3
+ TASKSTATS_TYPE_AGGR_PID = 0x4
+ TASKSTATS_TYPE_AGGR_TGID = 0x5
+ TASKSTATS_TYPE_NULL = 0x6
+ TASKSTATS_CMD_ATTR_UNSPEC = 0x0
+ TASKSTATS_CMD_ATTR_PID = 0x1
+ TASKSTATS_CMD_ATTR_TGID = 0x2
+ TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
+ TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
+)
+
+type CGroupStats struct {
+ Sleeping uint64
+ Running uint64
+ Stopped uint64
+ Uninterruptible uint64
+ Io_wait uint64
+}
+
+const (
+ CGROUPSTATS_CMD_UNSPEC = 0x3
+ CGROUPSTATS_CMD_GET = 0x4
+ CGROUPSTATS_CMD_NEW = 0x5
+ CGROUPSTATS_TYPE_UNSPEC = 0x0
+ CGROUPSTATS_TYPE_CGROUP_STATS = 0x1
+ CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0
+ CGROUPSTATS_CMD_ATTR_FD = 0x1
+)
+
+type Genlmsghdr struct {
+ Cmd uint8
+ Version uint8
+ Reserved uint16
+}
+
+const (
+ CTRL_CMD_UNSPEC = 0x0
+ CTRL_CMD_NEWFAMILY = 0x1
+ CTRL_CMD_DELFAMILY = 0x2
+ CTRL_CMD_GETFAMILY = 0x3
+ CTRL_CMD_NEWOPS = 0x4
+ CTRL_CMD_DELOPS = 0x5
+ CTRL_CMD_GETOPS = 0x6
+ CTRL_CMD_NEWMCAST_GRP = 0x7
+ CTRL_CMD_DELMCAST_GRP = 0x8
+ CTRL_CMD_GETMCAST_GRP = 0x9
+ CTRL_ATTR_UNSPEC = 0x0
+ CTRL_ATTR_FAMILY_ID = 0x1
+ CTRL_ATTR_FAMILY_NAME = 0x2
+ CTRL_ATTR_VERSION = 0x3
+ CTRL_ATTR_HDRSIZE = 0x4
+ CTRL_ATTR_MAXATTR = 0x5
+ CTRL_ATTR_OPS = 0x6
+ CTRL_ATTR_MCAST_GROUPS = 0x7
+ CTRL_ATTR_OP_UNSPEC = 0x0
+ CTRL_ATTR_OP_ID = 0x1
+ CTRL_ATTR_OP_FLAGS = 0x2
+ CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
+ CTRL_ATTR_MCAST_GRP_NAME = 0x1
+ CTRL_ATTR_MCAST_GRP_ID = 0x2
+)
+
+type cpuMask uint64
+
+const (
+ _CPU_SETSIZE = 0x400
+ _NCPUBITS = 0x40
+)
+
+const (
+ BDADDR_BREDR = 0x0
+ BDADDR_LE_PUBLIC = 0x1
+ BDADDR_LE_RANDOM = 0x2
+)
+
+type PerfEventAttr struct {
+ Type uint32
+ Size uint32
+ Config uint64
+ Sample uint64
+ Sample_type uint64
+ Read_format uint64
+ Bits uint64
+ Wakeup uint32
+ Bp_type uint32
+ Ext1 uint64
+ Ext2 uint64
+ Branch_sample_type uint64
+ Sample_regs_user uint64
+ Sample_stack_user uint32
+ Clockid int32
+ Sample_regs_intr uint64
+ Aux_watermark uint32
+ _ uint32
+}
+
+type PerfEventMmapPage struct {
+ Version uint32
+ Compat_version uint32
+ Lock uint32
+ Index uint32
+ Offset int64
+ Time_enabled uint64
+ Time_running uint64
+ Capabilities uint64
+ Pmc_width uint16
+ Time_shift uint16
+ Time_mult uint32
+ Time_offset uint64
+ Time_zero uint64
+ Size uint32
+ _ [948]uint8
+ Data_head uint64
+ Data_tail uint64
+ Data_offset uint64
+ Data_size uint64
+ Aux_head uint64
+ Aux_tail uint64
+ Aux_offset uint64
+ Aux_size uint64
+}
+
+const (
+ PerfBitDisabled uint64 = CBitFieldMaskBit0
+ PerfBitInherit = CBitFieldMaskBit1
+ PerfBitPinned = CBitFieldMaskBit2
+ PerfBitExclusive = CBitFieldMaskBit3
+ PerfBitExcludeUser = CBitFieldMaskBit4
+ PerfBitExcludeKernel = CBitFieldMaskBit5
+ PerfBitExcludeHv = CBitFieldMaskBit6
+ PerfBitExcludeIdle = CBitFieldMaskBit7
+ PerfBitMmap = CBitFieldMaskBit8
+ PerfBitComm = CBitFieldMaskBit9
+ PerfBitFreq = CBitFieldMaskBit10
+ PerfBitInheritStat = CBitFieldMaskBit11
+ PerfBitEnableOnExec = CBitFieldMaskBit12
+ PerfBitTask = CBitFieldMaskBit13
+ PerfBitWatermark = CBitFieldMaskBit14
+ PerfBitPreciseIPBit1 = CBitFieldMaskBit15
+ PerfBitPreciseIPBit2 = CBitFieldMaskBit16
+ PerfBitMmapData = CBitFieldMaskBit17
+ PerfBitSampleIDAll = CBitFieldMaskBit18
+ PerfBitExcludeHost = CBitFieldMaskBit19
+ PerfBitExcludeGuest = CBitFieldMaskBit20
+ PerfBitExcludeCallchainKernel = CBitFieldMaskBit21
+ PerfBitExcludeCallchainUser = CBitFieldMaskBit22
+ PerfBitMmap2 = CBitFieldMaskBit23
+ PerfBitCommExec = CBitFieldMaskBit24
+ PerfBitUseClockID = CBitFieldMaskBit25
+ PerfBitContextSwitch = CBitFieldMaskBit26
+)
+
+const (
+ PERF_TYPE_HARDWARE = 0x0
+ PERF_TYPE_SOFTWARE = 0x1
+ PERF_TYPE_TRACEPOINT = 0x2
+ PERF_TYPE_HW_CACHE = 0x3
+ PERF_TYPE_RAW = 0x4
+ PERF_TYPE_BREAKPOINT = 0x5
+
+ PERF_COUNT_HW_CPU_CYCLES = 0x0
+ PERF_COUNT_HW_INSTRUCTIONS = 0x1
+ PERF_COUNT_HW_CACHE_REFERENCES = 0x2
+ PERF_COUNT_HW_CACHE_MISSES = 0x3
+ PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4
+ PERF_COUNT_HW_BRANCH_MISSES = 0x5
+ PERF_COUNT_HW_BUS_CYCLES = 0x6
+ PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7
+ PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8
+ PERF_COUNT_HW_REF_CPU_CYCLES = 0x9
+
+ PERF_COUNT_HW_CACHE_L1D = 0x0
+ PERF_COUNT_HW_CACHE_L1I = 0x1
+ PERF_COUNT_HW_CACHE_LL = 0x2
+ PERF_COUNT_HW_CACHE_DTLB = 0x3
+ PERF_COUNT_HW_CACHE_ITLB = 0x4
+ PERF_COUNT_HW_CACHE_BPU = 0x5
+ PERF_COUNT_HW_CACHE_NODE = 0x6
+
+ PERF_COUNT_HW_CACHE_OP_READ = 0x0
+ PERF_COUNT_HW_CACHE_OP_WRITE = 0x1
+ PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2
+
+ PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0
+ PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1
+
+ PERF_COUNT_SW_CPU_CLOCK = 0x0
+ PERF_COUNT_SW_TASK_CLOCK = 0x1
+ PERF_COUNT_SW_PAGE_FAULTS = 0x2
+ PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3
+ PERF_COUNT_SW_CPU_MIGRATIONS = 0x4
+ PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5
+ PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6
+ PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7
+ PERF_COUNT_SW_EMULATION_FAULTS = 0x8
+ PERF_COUNT_SW_DUMMY = 0x9
+
+ PERF_SAMPLE_IP = 0x1
+ PERF_SAMPLE_TID = 0x2
+ PERF_SAMPLE_TIME = 0x4
+ PERF_SAMPLE_ADDR = 0x8
+ PERF_SAMPLE_READ = 0x10
+ PERF_SAMPLE_CALLCHAIN = 0x20
+ PERF_SAMPLE_ID = 0x40
+ PERF_SAMPLE_CPU = 0x80
+ PERF_SAMPLE_PERIOD = 0x100
+ PERF_SAMPLE_STREAM_ID = 0x200
+ PERF_SAMPLE_RAW = 0x400
+ PERF_SAMPLE_BRANCH_STACK = 0x800
+
+ PERF_SAMPLE_BRANCH_USER = 0x1
+ PERF_SAMPLE_BRANCH_KERNEL = 0x2
+ PERF_SAMPLE_BRANCH_HV = 0x4
+ PERF_SAMPLE_BRANCH_ANY = 0x8
+ PERF_SAMPLE_BRANCH_ANY_CALL = 0x10
+ PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20
+ PERF_SAMPLE_BRANCH_IND_CALL = 0x40
+
+ PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1
+ PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2
+ PERF_FORMAT_ID = 0x4
+ PERF_FORMAT_GROUP = 0x8
+
+ PERF_RECORD_MMAP = 0x1
+ PERF_RECORD_LOST = 0x2
+ PERF_RECORD_COMM = 0x3
+ PERF_RECORD_EXIT = 0x4
+ PERF_RECORD_THROTTLE = 0x5
+ PERF_RECORD_UNTHROTTLE = 0x6
+ PERF_RECORD_FORK = 0x7
+ PERF_RECORD_READ = 0x8
+ PERF_RECORD_SAMPLE = 0x9
+
+ PERF_CONTEXT_HV = -0x20
+ PERF_CONTEXT_KERNEL = -0x80
+ PERF_CONTEXT_USER = -0x200
+
+ PERF_CONTEXT_GUEST = -0x800
+ PERF_CONTEXT_GUEST_KERNEL = -0x880
+ PERF_CONTEXT_GUEST_USER = -0xa00
+
+ PERF_FLAG_FD_NO_GROUP = 0x1
+ PERF_FLAG_FD_OUTPUT = 0x2
+ PERF_FLAG_PID_CGROUP = 0x4
+)
+
+const (
+ CBitFieldMaskBit0 = 0x1
+ CBitFieldMaskBit1 = 0x2
+ CBitFieldMaskBit2 = 0x4
+ CBitFieldMaskBit3 = 0x8
+ CBitFieldMaskBit4 = 0x10
+ CBitFieldMaskBit5 = 0x20
+ CBitFieldMaskBit6 = 0x40
+ CBitFieldMaskBit7 = 0x80
+ CBitFieldMaskBit8 = 0x100
+ CBitFieldMaskBit9 = 0x200
+ CBitFieldMaskBit10 = 0x400
+ CBitFieldMaskBit11 = 0x800
+ CBitFieldMaskBit12 = 0x1000
+ CBitFieldMaskBit13 = 0x2000
+ CBitFieldMaskBit14 = 0x4000
+ CBitFieldMaskBit15 = 0x8000
+ CBitFieldMaskBit16 = 0x10000
+ CBitFieldMaskBit17 = 0x20000
+ CBitFieldMaskBit18 = 0x40000
+ CBitFieldMaskBit19 = 0x80000
+ CBitFieldMaskBit20 = 0x100000
+ CBitFieldMaskBit21 = 0x200000
+ CBitFieldMaskBit22 = 0x400000
+ CBitFieldMaskBit23 = 0x800000
+ CBitFieldMaskBit24 = 0x1000000
+ CBitFieldMaskBit25 = 0x2000000
+ CBitFieldMaskBit26 = 0x4000000
+ CBitFieldMaskBit27 = 0x8000000
+ CBitFieldMaskBit28 = 0x10000000
+ CBitFieldMaskBit29 = 0x20000000
+ CBitFieldMaskBit30 = 0x40000000
+ CBitFieldMaskBit31 = 0x80000000
+ CBitFieldMaskBit32 = 0x100000000
+ CBitFieldMaskBit33 = 0x200000000
+ CBitFieldMaskBit34 = 0x400000000
+ CBitFieldMaskBit35 = 0x800000000
+ CBitFieldMaskBit36 = 0x1000000000
+ CBitFieldMaskBit37 = 0x2000000000
+ CBitFieldMaskBit38 = 0x4000000000
+ CBitFieldMaskBit39 = 0x8000000000
+ CBitFieldMaskBit40 = 0x10000000000
+ CBitFieldMaskBit41 = 0x20000000000
+ CBitFieldMaskBit42 = 0x40000000000
+ CBitFieldMaskBit43 = 0x80000000000
+ CBitFieldMaskBit44 = 0x100000000000
+ CBitFieldMaskBit45 = 0x200000000000
+ CBitFieldMaskBit46 = 0x400000000000
+ CBitFieldMaskBit47 = 0x800000000000
+ CBitFieldMaskBit48 = 0x1000000000000
+ CBitFieldMaskBit49 = 0x2000000000000
+ CBitFieldMaskBit50 = 0x4000000000000
+ CBitFieldMaskBit51 = 0x8000000000000
+ CBitFieldMaskBit52 = 0x10000000000000
+ CBitFieldMaskBit53 = 0x20000000000000
+ CBitFieldMaskBit54 = 0x40000000000000
+ CBitFieldMaskBit55 = 0x80000000000000
+ CBitFieldMaskBit56 = 0x100000000000000
+ CBitFieldMaskBit57 = 0x200000000000000
+ CBitFieldMaskBit58 = 0x400000000000000
+ CBitFieldMaskBit59 = 0x800000000000000
+ CBitFieldMaskBit60 = 0x1000000000000000
+ CBitFieldMaskBit61 = 0x2000000000000000
+ CBitFieldMaskBit62 = 0x4000000000000000
+ CBitFieldMaskBit63 = 0x8000000000000000
+)
+
+type SockaddrStorage struct {
+ Family uint16
+ _ [118]uint8
+ _ uint64
+}
+
+type TCPMD5Sig struct {
+ Addr SockaddrStorage
+ Flags uint8
+ Prefixlen uint8
+ Keylen uint16
+ _ uint32
+ Key [80]uint8
+}
+
+type HDDriveCmdHdr struct {
+ Command uint8
+ Number uint8
+ Feature uint8
+ Count uint8
+}
+
+type HDGeometry struct {
+ Heads uint8
+ Sectors uint8
+ Cylinders uint16
+ Start uint64
+}
+
+type HDDriveID struct {
+ Config uint16
+ Cyls uint16
+ Reserved2 uint16
+ Heads uint16
+ Track_bytes uint16
+ Sector_bytes uint16
+ Sectors uint16
+ Vendor0 uint16
+ Vendor1 uint16
+ Vendor2 uint16
+ Serial_no [20]uint8
+ Buf_type uint16
+ Buf_size uint16
+ Ecc_bytes uint16
+ Fw_rev [8]uint8
+ Model [40]uint8
+ Max_multsect uint8
+ Vendor3 uint8
+ Dword_io uint16
+ Vendor4 uint8
+ Capability uint8
+ Reserved50 uint16
+ Vendor5 uint8
+ TPIO uint8
+ Vendor6 uint8
+ TDMA uint8
+ Field_valid uint16
+ Cur_cyls uint16
+ Cur_heads uint16
+ Cur_sectors uint16
+ Cur_capacity0 uint16
+ Cur_capacity1 uint16
+ Multsect uint8
+ Multsect_valid uint8
+ Lba_capacity uint32
+ Dma_1word uint16
+ Dma_mword uint16
+ Eide_pio_modes uint16
+ Eide_dma_min uint16
+ Eide_dma_time uint16
+ Eide_pio uint16
+ Eide_pio_iordy uint16
+ Words69_70 [2]uint16
+ Words71_74 [4]uint16
+ Queue_depth uint16
+ Words76_79 [4]uint16
+ Major_rev_num uint16
+ Minor_rev_num uint16
+ Command_set_1 uint16
+ Command_set_2 uint16
+ Cfsse uint16
+ Cfs_enable_1 uint16
+ Cfs_enable_2 uint16
+ Csf_default uint16
+ Dma_ultra uint16
+ Trseuc uint16
+ TrsEuc uint16
+ CurAPMvalues uint16
+ Mprc uint16
+ Hw_config uint16
+ Acoustic uint16
+ Msrqs uint16
+ Sxfert uint16
+ Sal uint16
+ Spg uint32
+ Lba_capacity_2 uint64
+ Words104_125 [22]uint16
+ Last_lun uint16
+ Word127 uint16
+ Dlf uint16
+ Csfo uint16
+ Words130_155 [26]uint16
+ Word156 uint16
+ Words157_159 [3]uint16
+ Cfa_power uint16
+ Words161_175 [15]uint16
+ Words176_205 [30]uint16
+ Words206_254 [49]uint16
+ Integrity_word uint16
+}
+
+type Statfs_t struct {
+ Type int64
+ Bsize int64
+ Blocks uint64
+ Bfree uint64
+ Bavail uint64
+ Files uint64
+ Ffree uint64
+ Fsid Fsid
+ Namelen int64
+ Frsize int64
+ Flags int64
+ Spare [4]int64
+}
+
+const (
+ ST_MANDLOCK = 0x40
+ ST_NOATIME = 0x400
+ ST_NODEV = 0x4
+ ST_NODIRATIME = 0x800
+ ST_NOEXEC = 0x8
+ ST_NOSUID = 0x2
+ ST_RDONLY = 0x1
+ ST_RELATIME = 0x1000
+ ST_SYNCHRONOUS = 0x10
+)
+
+type TpacketHdr struct {
+ Status uint64
+ Len uint32
+ Snaplen uint32
+ Mac uint16
+ Net uint16
+ Sec uint32
+ Usec uint32
+ _ [4]byte
+}
+
+type Tpacket2Hdr struct {
+ Status uint32
+ Len uint32
+ Snaplen uint32
+ Mac uint16
+ Net uint16
+ Sec uint32
+ Nsec uint32
+ Vlan_tci uint16
+ Vlan_tpid uint16
+ _ [4]uint8
+}
+
+type Tpacket3Hdr struct {
+ Next_offset uint32
+ Sec uint32
+ Nsec uint32
+ Snaplen uint32
+ Len uint32
+ Status uint32
+ Mac uint16
+ Net uint16
+ Hv1 TpacketHdrVariant1
+ _ [8]uint8
+}
+
+type TpacketHdrVariant1 struct {
+ Rxhash uint32
+ Vlan_tci uint32
+ Vlan_tpid uint16
+ _ uint16
+}
+
+type TpacketBlockDesc struct {
+ Version uint32
+ To_priv uint32
+ Hdr [40]byte
+}
+
+type TpacketReq struct {
+ Block_size uint32
+ Block_nr uint32
+ Frame_size uint32
+ Frame_nr uint32
+}
+
+type TpacketReq3 struct {
+ Block_size uint32
+ Block_nr uint32
+ Frame_size uint32
+ Frame_nr uint32
+ Retire_blk_tov uint32
+ Sizeof_priv uint32
+ Feature_req_word uint32
+}
+
+type TpacketStats struct {
+ Packets uint32
+ Drops uint32
+}
+
+type TpacketStatsV3 struct {
+ Packets uint32
+ Drops uint32
+ Freeze_q_cnt uint32
+}
+
+type TpacketAuxdata struct {
+ Status uint32
+ Len uint32
+ Snaplen uint32
+ Mac uint16
+ Net uint16
+ Vlan_tci uint16
+ Vlan_tpid uint16
+}
+
+const (
+ TPACKET_V1 = 0x0
+ TPACKET_V2 = 0x1
+ TPACKET_V3 = 0x2
+)
+
+const (
+ SizeofTpacketHdr = 0x20
+ SizeofTpacket2Hdr = 0x20
+ SizeofTpacket3Hdr = 0x30
+)
+
+const (
+ NF_INET_PRE_ROUTING = 0x0
+ NF_INET_LOCAL_IN = 0x1
+ NF_INET_FORWARD = 0x2
+ NF_INET_LOCAL_OUT = 0x3
+ NF_INET_POST_ROUTING = 0x4
+ NF_INET_NUMHOOKS = 0x5
+)
+
+const (
+ NF_NETDEV_INGRESS = 0x0
+ NF_NETDEV_NUMHOOKS = 0x1
+)
+
+const (
+ NFPROTO_UNSPEC = 0x0
+ NFPROTO_INET = 0x1
+ NFPROTO_IPV4 = 0x2
+ NFPROTO_ARP = 0x3
+ NFPROTO_NETDEV = 0x5
+ NFPROTO_BRIDGE = 0x7
+ NFPROTO_IPV6 = 0xa
+ NFPROTO_DECNET = 0xc
+ NFPROTO_NUMPROTO = 0xd
+)
+
+type Nfgenmsg struct {
+ Nfgen_family uint8
+ Version uint8
+ Res_id uint16
+}
+
+const (
+ NFNL_BATCH_UNSPEC = 0x0
+ NFNL_BATCH_GENID = 0x1
+)
+
+const (
+ NFT_REG_VERDICT = 0x0
+ NFT_REG_1 = 0x1
+ NFT_REG_2 = 0x2
+ NFT_REG_3 = 0x3
+ NFT_REG_4 = 0x4
+ NFT_REG32_00 = 0x8
+ NFT_REG32_01 = 0x9
+ NFT_REG32_02 = 0xa
+ NFT_REG32_03 = 0xb
+ NFT_REG32_04 = 0xc
+ NFT_REG32_05 = 0xd
+ NFT_REG32_06 = 0xe
+ NFT_REG32_07 = 0xf
+ NFT_REG32_08 = 0x10
+ NFT_REG32_09 = 0x11
+ NFT_REG32_10 = 0x12
+ NFT_REG32_11 = 0x13
+ NFT_REG32_12 = 0x14
+ NFT_REG32_13 = 0x15
+ NFT_REG32_14 = 0x16
+ NFT_REG32_15 = 0x17
+ NFT_CONTINUE = -0x1
+ NFT_BREAK = -0x2
+ NFT_JUMP = -0x3
+ NFT_GOTO = -0x4
+ NFT_RETURN = -0x5
+ NFT_MSG_NEWTABLE = 0x0
+ NFT_MSG_GETTABLE = 0x1
+ NFT_MSG_DELTABLE = 0x2
+ NFT_MSG_NEWCHAIN = 0x3
+ NFT_MSG_GETCHAIN = 0x4
+ NFT_MSG_DELCHAIN = 0x5
+ NFT_MSG_NEWRULE = 0x6
+ NFT_MSG_GETRULE = 0x7
+ NFT_MSG_DELRULE = 0x8
+ NFT_MSG_NEWSET = 0x9
+ NFT_MSG_GETSET = 0xa
+ NFT_MSG_DELSET = 0xb
+ NFT_MSG_NEWSETELEM = 0xc
+ NFT_MSG_GETSETELEM = 0xd
+ NFT_MSG_DELSETELEM = 0xe
+ NFT_MSG_NEWGEN = 0xf
+ NFT_MSG_GETGEN = 0x10
+ NFT_MSG_TRACE = 0x11
+ NFT_MSG_NEWOBJ = 0x12
+ NFT_MSG_GETOBJ = 0x13
+ NFT_MSG_DELOBJ = 0x14
+ NFT_MSG_GETOBJ_RESET = 0x15
+ NFT_MSG_MAX = 0x19
+ NFTA_LIST_UNPEC = 0x0
+ NFTA_LIST_ELEM = 0x1
+ NFTA_HOOK_UNSPEC = 0x0
+ NFTA_HOOK_HOOKNUM = 0x1
+ NFTA_HOOK_PRIORITY = 0x2
+ NFTA_HOOK_DEV = 0x3
+ NFT_TABLE_F_DORMANT = 0x1
+ NFTA_TABLE_UNSPEC = 0x0
+ NFTA_TABLE_NAME = 0x1
+ NFTA_TABLE_FLAGS = 0x2
+ NFTA_TABLE_USE = 0x3
+ NFTA_CHAIN_UNSPEC = 0x0
+ NFTA_CHAIN_TABLE = 0x1
+ NFTA_CHAIN_HANDLE = 0x2
+ NFTA_CHAIN_NAME = 0x3
+ NFTA_CHAIN_HOOK = 0x4
+ NFTA_CHAIN_POLICY = 0x5
+ NFTA_CHAIN_USE = 0x6
+ NFTA_CHAIN_TYPE = 0x7
+ NFTA_CHAIN_COUNTERS = 0x8
+ NFTA_CHAIN_PAD = 0x9
+ NFTA_RULE_UNSPEC = 0x0
+ NFTA_RULE_TABLE = 0x1
+ NFTA_RULE_CHAIN = 0x2
+ NFTA_RULE_HANDLE = 0x3
+ NFTA_RULE_EXPRESSIONS = 0x4
+ NFTA_RULE_COMPAT = 0x5
+ NFTA_RULE_POSITION = 0x6
+ NFTA_RULE_USERDATA = 0x7
+ NFTA_RULE_PAD = 0x8
+ NFTA_RULE_ID = 0x9
+ NFT_RULE_COMPAT_F_INV = 0x2
+ NFT_RULE_COMPAT_F_MASK = 0x2
+ NFTA_RULE_COMPAT_UNSPEC = 0x0
+ NFTA_RULE_COMPAT_PROTO = 0x1
+ NFTA_RULE_COMPAT_FLAGS = 0x2
+ NFT_SET_ANONYMOUS = 0x1
+ NFT_SET_CONSTANT = 0x2
+ NFT_SET_INTERVAL = 0x4
+ NFT_SET_MAP = 0x8
+ NFT_SET_TIMEOUT = 0x10
+ NFT_SET_EVAL = 0x20
+ NFT_SET_OBJECT = 0x40
+ NFT_SET_POL_PERFORMANCE = 0x0
+ NFT_SET_POL_MEMORY = 0x1
+ NFTA_SET_DESC_UNSPEC = 0x0
+ NFTA_SET_DESC_SIZE = 0x1
+ NFTA_SET_UNSPEC = 0x0
+ NFTA_SET_TABLE = 0x1
+ NFTA_SET_NAME = 0x2
+ NFTA_SET_FLAGS = 0x3
+ NFTA_SET_KEY_TYPE = 0x4
+ NFTA_SET_KEY_LEN = 0x5
+ NFTA_SET_DATA_TYPE = 0x6
+ NFTA_SET_DATA_LEN = 0x7
+ NFTA_SET_POLICY = 0x8
+ NFTA_SET_DESC = 0x9
+ NFTA_SET_ID = 0xa
+ NFTA_SET_TIMEOUT = 0xb
+ NFTA_SET_GC_INTERVAL = 0xc
+ NFTA_SET_USERDATA = 0xd
+ NFTA_SET_PAD = 0xe
+ NFTA_SET_OBJ_TYPE = 0xf
+ NFT_SET_ELEM_INTERVAL_END = 0x1
+ NFTA_SET_ELEM_UNSPEC = 0x0
+ NFTA_SET_ELEM_KEY = 0x1
+ NFTA_SET_ELEM_DATA = 0x2
+ NFTA_SET_ELEM_FLAGS = 0x3
+ NFTA_SET_ELEM_TIMEOUT = 0x4
+ NFTA_SET_ELEM_EXPIRATION = 0x5
+ NFTA_SET_ELEM_USERDATA = 0x6
+ NFTA_SET_ELEM_EXPR = 0x7
+ NFTA_SET_ELEM_PAD = 0x8
+ NFTA_SET_ELEM_OBJREF = 0x9
+ NFTA_SET_ELEM_LIST_UNSPEC = 0x0
+ NFTA_SET_ELEM_LIST_TABLE = 0x1
+ NFTA_SET_ELEM_LIST_SET = 0x2
+ NFTA_SET_ELEM_LIST_ELEMENTS = 0x3
+ NFTA_SET_ELEM_LIST_SET_ID = 0x4
+ NFT_DATA_VALUE = 0x0
+ NFT_DATA_VERDICT = 0xffffff00
+ NFTA_DATA_UNSPEC = 0x0
+ NFTA_DATA_VALUE = 0x1
+ NFTA_DATA_VERDICT = 0x2
+ NFTA_VERDICT_UNSPEC = 0x0
+ NFTA_VERDICT_CODE = 0x1
+ NFTA_VERDICT_CHAIN = 0x2
+ NFTA_EXPR_UNSPEC = 0x0
+ NFTA_EXPR_NAME = 0x1
+ NFTA_EXPR_DATA = 0x2
+ NFTA_IMMEDIATE_UNSPEC = 0x0
+ NFTA_IMMEDIATE_DREG = 0x1
+ NFTA_IMMEDIATE_DATA = 0x2
+ NFTA_BITWISE_UNSPEC = 0x0
+ NFTA_BITWISE_SREG = 0x1
+ NFTA_BITWISE_DREG = 0x2
+ NFTA_BITWISE_LEN = 0x3
+ NFTA_BITWISE_MASK = 0x4
+ NFTA_BITWISE_XOR = 0x5
+ NFT_BYTEORDER_NTOH = 0x0
+ NFT_BYTEORDER_HTON = 0x1
+ NFTA_BYTEORDER_UNSPEC = 0x0
+ NFTA_BYTEORDER_SREG = 0x1
+ NFTA_BYTEORDER_DREG = 0x2
+ NFTA_BYTEORDER_OP = 0x3
+ NFTA_BYTEORDER_LEN = 0x4
+ NFTA_BYTEORDER_SIZE = 0x5
+ NFT_CMP_EQ = 0x0
+ NFT_CMP_NEQ = 0x1
+ NFT_CMP_LT = 0x2
+ NFT_CMP_LTE = 0x3
+ NFT_CMP_GT = 0x4
+ NFT_CMP_GTE = 0x5
+ NFTA_CMP_UNSPEC = 0x0
+ NFTA_CMP_SREG = 0x1
+ NFTA_CMP_OP = 0x2
+ NFTA_CMP_DATA = 0x3
+ NFT_RANGE_EQ = 0x0
+ NFT_RANGE_NEQ = 0x1
+ NFTA_RANGE_UNSPEC = 0x0
+ NFTA_RANGE_SREG = 0x1
+ NFTA_RANGE_OP = 0x2
+ NFTA_RANGE_FROM_DATA = 0x3
+ NFTA_RANGE_TO_DATA = 0x4
+ NFT_LOOKUP_F_INV = 0x1
+ NFTA_LOOKUP_UNSPEC = 0x0
+ NFTA_LOOKUP_SET = 0x1
+ NFTA_LOOKUP_SREG = 0x2
+ NFTA_LOOKUP_DREG = 0x3
+ NFTA_LOOKUP_SET_ID = 0x4
+ NFTA_LOOKUP_FLAGS = 0x5
+ NFT_DYNSET_OP_ADD = 0x0
+ NFT_DYNSET_OP_UPDATE = 0x1
+ NFT_DYNSET_F_INV = 0x1
+ NFTA_DYNSET_UNSPEC = 0x0
+ NFTA_DYNSET_SET_NAME = 0x1
+ NFTA_DYNSET_SET_ID = 0x2
+ NFTA_DYNSET_OP = 0x3
+ NFTA_DYNSET_SREG_KEY = 0x4
+ NFTA_DYNSET_SREG_DATA = 0x5
+ NFTA_DYNSET_TIMEOUT = 0x6
+ NFTA_DYNSET_EXPR = 0x7
+ NFTA_DYNSET_PAD = 0x8
+ NFTA_DYNSET_FLAGS = 0x9
+ NFT_PAYLOAD_LL_HEADER = 0x0
+ NFT_PAYLOAD_NETWORK_HEADER = 0x1
+ NFT_PAYLOAD_TRANSPORT_HEADER = 0x2
+ NFT_PAYLOAD_CSUM_NONE = 0x0
+ NFT_PAYLOAD_CSUM_INET = 0x1
+ NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1
+ NFTA_PAYLOAD_UNSPEC = 0x0
+ NFTA_PAYLOAD_DREG = 0x1
+ NFTA_PAYLOAD_BASE = 0x2
+ NFTA_PAYLOAD_OFFSET = 0x3
+ NFTA_PAYLOAD_LEN = 0x4
+ NFTA_PAYLOAD_SREG = 0x5
+ NFTA_PAYLOAD_CSUM_TYPE = 0x6
+ NFTA_PAYLOAD_CSUM_OFFSET = 0x7
+ NFTA_PAYLOAD_CSUM_FLAGS = 0x8
+ NFT_EXTHDR_F_PRESENT = 0x1
+ NFT_EXTHDR_OP_IPV6 = 0x0
+ NFT_EXTHDR_OP_TCPOPT = 0x1
+ NFTA_EXTHDR_UNSPEC = 0x0
+ NFTA_EXTHDR_DREG = 0x1
+ NFTA_EXTHDR_TYPE = 0x2
+ NFTA_EXTHDR_OFFSET = 0x3
+ NFTA_EXTHDR_LEN = 0x4
+ NFTA_EXTHDR_FLAGS = 0x5
+ NFTA_EXTHDR_OP = 0x6
+ NFTA_EXTHDR_SREG = 0x7
+ NFT_META_LEN = 0x0
+ NFT_META_PROTOCOL = 0x1
+ NFT_META_PRIORITY = 0x2
+ NFT_META_MARK = 0x3
+ NFT_META_IIF = 0x4
+ NFT_META_OIF = 0x5
+ NFT_META_IIFNAME = 0x6
+ NFT_META_OIFNAME = 0x7
+ NFT_META_IIFTYPE = 0x8
+ NFT_META_OIFTYPE = 0x9
+ NFT_META_SKUID = 0xa
+ NFT_META_SKGID = 0xb
+ NFT_META_NFTRACE = 0xc
+ NFT_META_RTCLASSID = 0xd
+ NFT_META_SECMARK = 0xe
+ NFT_META_NFPROTO = 0xf
+ NFT_META_L4PROTO = 0x10
+ NFT_META_BRI_IIFNAME = 0x11
+ NFT_META_BRI_OIFNAME = 0x12
+ NFT_META_PKTTYPE = 0x13
+ NFT_META_CPU = 0x14
+ NFT_META_IIFGROUP = 0x15
+ NFT_META_OIFGROUP = 0x16
+ NFT_META_CGROUP = 0x17
+ NFT_META_PRANDOM = 0x18
+ NFT_RT_CLASSID = 0x0
+ NFT_RT_NEXTHOP4 = 0x1
+ NFT_RT_NEXTHOP6 = 0x2
+ NFT_RT_TCPMSS = 0x3
+ NFT_HASH_JENKINS = 0x0
+ NFT_HASH_SYM = 0x1
+ NFTA_HASH_UNSPEC = 0x0
+ NFTA_HASH_SREG = 0x1
+ NFTA_HASH_DREG = 0x2
+ NFTA_HASH_LEN = 0x3
+ NFTA_HASH_MODULUS = 0x4
+ NFTA_HASH_SEED = 0x5
+ NFTA_HASH_OFFSET = 0x6
+ NFTA_HASH_TYPE = 0x7
+ NFTA_META_UNSPEC = 0x0
+ NFTA_META_DREG = 0x1
+ NFTA_META_KEY = 0x2
+ NFTA_META_SREG = 0x3
+ NFTA_RT_UNSPEC = 0x0
+ NFTA_RT_DREG = 0x1
+ NFTA_RT_KEY = 0x2
+ NFT_CT_STATE = 0x0
+ NFT_CT_DIRECTION = 0x1
+ NFT_CT_STATUS = 0x2
+ NFT_CT_MARK = 0x3
+ NFT_CT_SECMARK = 0x4
+ NFT_CT_EXPIRATION = 0x5
+ NFT_CT_HELPER = 0x6
+ NFT_CT_L3PROTOCOL = 0x7
+ NFT_CT_SRC = 0x8
+ NFT_CT_DST = 0x9
+ NFT_CT_PROTOCOL = 0xa
+ NFT_CT_PROTO_SRC = 0xb
+ NFT_CT_PROTO_DST = 0xc
+ NFT_CT_LABELS = 0xd
+ NFT_CT_PKTS = 0xe
+ NFT_CT_BYTES = 0xf
+ NFT_CT_AVGPKT = 0x10
+ NFT_CT_ZONE = 0x11
+ NFT_CT_EVENTMASK = 0x12
+ NFTA_CT_UNSPEC = 0x0
+ NFTA_CT_DREG = 0x1
+ NFTA_CT_KEY = 0x2
+ NFTA_CT_DIRECTION = 0x3
+ NFTA_CT_SREG = 0x4
+ NFT_LIMIT_PKTS = 0x0
+ NFT_LIMIT_PKT_BYTES = 0x1
+ NFT_LIMIT_F_INV = 0x1
+ NFTA_LIMIT_UNSPEC = 0x0
+ NFTA_LIMIT_RATE = 0x1
+ NFTA_LIMIT_UNIT = 0x2
+ NFTA_LIMIT_BURST = 0x3
+ NFTA_LIMIT_TYPE = 0x4
+ NFTA_LIMIT_FLAGS = 0x5
+ NFTA_LIMIT_PAD = 0x6
+ NFTA_COUNTER_UNSPEC = 0x0
+ NFTA_COUNTER_BYTES = 0x1
+ NFTA_COUNTER_PACKETS = 0x2
+ NFTA_COUNTER_PAD = 0x3
+ NFTA_LOG_UNSPEC = 0x0
+ NFTA_LOG_GROUP = 0x1
+ NFTA_LOG_PREFIX = 0x2
+ NFTA_LOG_SNAPLEN = 0x3
+ NFTA_LOG_QTHRESHOLD = 0x4
+ NFTA_LOG_LEVEL = 0x5
+ NFTA_LOG_FLAGS = 0x6
+ NFTA_QUEUE_UNSPEC = 0x0
+ NFTA_QUEUE_NUM = 0x1
+ NFTA_QUEUE_TOTAL = 0x2
+ NFTA_QUEUE_FLAGS = 0x3
+ NFTA_QUEUE_SREG_QNUM = 0x4
+ NFT_QUOTA_F_INV = 0x1
+ NFT_QUOTA_F_DEPLETED = 0x2
+ NFTA_QUOTA_UNSPEC = 0x0
+ NFTA_QUOTA_BYTES = 0x1
+ NFTA_QUOTA_FLAGS = 0x2
+ NFTA_QUOTA_PAD = 0x3
+ NFTA_QUOTA_CONSUMED = 0x4
+ NFT_REJECT_ICMP_UNREACH = 0x0
+ NFT_REJECT_TCP_RST = 0x1
+ NFT_REJECT_ICMPX_UNREACH = 0x2
+ NFT_REJECT_ICMPX_NO_ROUTE = 0x0
+ NFT_REJECT_ICMPX_PORT_UNREACH = 0x1
+ NFT_REJECT_ICMPX_HOST_UNREACH = 0x2
+ NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3
+ NFTA_REJECT_UNSPEC = 0x0
+ NFTA_REJECT_TYPE = 0x1
+ NFTA_REJECT_ICMP_CODE = 0x2
+ NFT_NAT_SNAT = 0x0
+ NFT_NAT_DNAT = 0x1
+ NFTA_NAT_UNSPEC = 0x0
+ NFTA_NAT_TYPE = 0x1
+ NFTA_NAT_FAMILY = 0x2
+ NFTA_NAT_REG_ADDR_MIN = 0x3
+ NFTA_NAT_REG_ADDR_MAX = 0x4
+ NFTA_NAT_REG_PROTO_MIN = 0x5
+ NFTA_NAT_REG_PROTO_MAX = 0x6
+ NFTA_NAT_FLAGS = 0x7
+ NFTA_MASQ_UNSPEC = 0x0
+ NFTA_MASQ_FLAGS = 0x1
+ NFTA_MASQ_REG_PROTO_MIN = 0x2
+ NFTA_MASQ_REG_PROTO_MAX = 0x3
+ NFTA_REDIR_UNSPEC = 0x0
+ NFTA_REDIR_REG_PROTO_MIN = 0x1
+ NFTA_REDIR_REG_PROTO_MAX = 0x2
+ NFTA_REDIR_FLAGS = 0x3
+ NFTA_DUP_UNSPEC = 0x0
+ NFTA_DUP_SREG_ADDR = 0x1
+ NFTA_DUP_SREG_DEV = 0x2
+ NFTA_FWD_UNSPEC = 0x0
+ NFTA_FWD_SREG_DEV = 0x1
+ NFTA_OBJREF_UNSPEC = 0x0
+ NFTA_OBJREF_IMM_TYPE = 0x1
+ NFTA_OBJREF_IMM_NAME = 0x2
+ NFTA_OBJREF_SET_SREG = 0x3
+ NFTA_OBJREF_SET_NAME = 0x4
+ NFTA_OBJREF_SET_ID = 0x5
+ NFTA_GEN_UNSPEC = 0x0
+ NFTA_GEN_ID = 0x1
+ NFTA_GEN_PROC_PID = 0x2
+ NFTA_GEN_PROC_NAME = 0x3
+ NFTA_FIB_UNSPEC = 0x0
+ NFTA_FIB_DREG = 0x1
+ NFTA_FIB_RESULT = 0x2
+ NFTA_FIB_FLAGS = 0x3
+ NFT_FIB_RESULT_UNSPEC = 0x0
+ NFT_FIB_RESULT_OIF = 0x1
+ NFT_FIB_RESULT_OIFNAME = 0x2
+ NFT_FIB_RESULT_ADDRTYPE = 0x3
+ NFTA_FIB_F_SADDR = 0x1
+ NFTA_FIB_F_DADDR = 0x2
+ NFTA_FIB_F_MARK = 0x4
+ NFTA_FIB_F_IIF = 0x8
+ NFTA_FIB_F_OIF = 0x10
+ NFTA_FIB_F_PRESENT = 0x20
+ NFTA_CT_HELPER_UNSPEC = 0x0
+ NFTA_CT_HELPER_NAME = 0x1
+ NFTA_CT_HELPER_L3PROTO = 0x2
+ NFTA_CT_HELPER_L4PROTO = 0x3
+ NFTA_OBJ_UNSPEC = 0x0
+ NFTA_OBJ_TABLE = 0x1
+ NFTA_OBJ_NAME = 0x2
+ NFTA_OBJ_TYPE = 0x3
+ NFTA_OBJ_DATA = 0x4
+ NFTA_OBJ_USE = 0x5
+ NFTA_TRACE_UNSPEC = 0x0
+ NFTA_TRACE_TABLE = 0x1
+ NFTA_TRACE_CHAIN = 0x2
+ NFTA_TRACE_RULE_HANDLE = 0x3
+ NFTA_TRACE_TYPE = 0x4
+ NFTA_TRACE_VERDICT = 0x5
+ NFTA_TRACE_ID = 0x6
+ NFTA_TRACE_LL_HEADER = 0x7
+ NFTA_TRACE_NETWORK_HEADER = 0x8
+ NFTA_TRACE_TRANSPORT_HEADER = 0x9
+ NFTA_TRACE_IIF = 0xa
+ NFTA_TRACE_IIFTYPE = 0xb
+ NFTA_TRACE_OIF = 0xc
+ NFTA_TRACE_OIFTYPE = 0xd
+ NFTA_TRACE_MARK = 0xe
+ NFTA_TRACE_NFPROTO = 0xf
+ NFTA_TRACE_POLICY = 0x10
+ NFTA_TRACE_PAD = 0x11
+ NFT_TRACETYPE_UNSPEC = 0x0
+ NFT_TRACETYPE_POLICY = 0x1
+ NFT_TRACETYPE_RETURN = 0x2
+ NFT_TRACETYPE_RULE = 0x3
+ NFTA_NG_UNSPEC = 0x0
+ NFTA_NG_DREG = 0x1
+ NFTA_NG_MODULUS = 0x2
+ NFTA_NG_TYPE = 0x3
+ NFTA_NG_OFFSET = 0x4
+ NFT_NG_INCREMENTAL = 0x0
+ NFT_NG_RANDOM = 0x1
+)
+
+type RTCTime struct {
+ Sec int32
+ Min int32
+ Hour int32
+ Mday int32
+ Mon int32
+ Year int32
+ Wday int32
+ Yday int32
+ Isdst int32
+}
+
+type RTCWkAlrm struct {
+ Enabled uint8
+ Pending uint8
+ Time RTCTime
+}
+
+type RTCPLLInfo struct {
+ Ctrl int32
+ Value int32
+ Max int32
+ Min int32
+ Posmult int32
+ Negmult int32
+ Clock int64
+}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x1269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
index d32079d1a..abdc0863d 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
PathMax = 0x1000
)
@@ -33,13 +33,11 @@ type Timeval struct {
type Timex struct {
Modes uint32
- _ [4]byte
Offset int64
Freq int64
Maxerror int64
Esterror int64
Status int32
- _ [4]byte
Constant int64
Precision int64
Tolerance int64
@@ -48,7 +46,6 @@ type Timex struct {
Ppsfreq int64
Jitter int64
Shift int32
- _ [4]byte
Stabil int64
Jitcnt int64
Calcnt int64
@@ -162,7 +159,6 @@ type Fsid struct {
type Flock_t struct {
Type int16
Whence int16
- _ [4]byte
Start int64
Len int64
Pid int32
@@ -250,9 +246,15 @@ type RawSockaddrL2 struct {
_ [1]byte
}
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
Family uint16
- _ [2]byte
Ifindex int32
Addr [8]byte
}
@@ -273,6 +275,16 @@ type RawSockaddrVM struct {
Zero [4]uint8
}
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -321,7 +333,6 @@ type PacketMreq struct {
type Msghdr struct {
Name *byte
Namelen uint32
- _ [4]byte
Iov *Iovec
Iovlen uint64
Control *byte
@@ -369,7 +380,6 @@ type TCPInfo struct {
Probes uint8
Backoff uint8
Options uint8
- _ [2]byte
Rto uint32
Ato uint32
Snd_mss uint32
@@ -405,9 +415,12 @@ const (
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
SizeofIovec = 0x10
SizeofIPMreq = 0x8
@@ -437,6 +450,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -480,7 +494,7 @@ const (
IFLA_EVENT = 0x2c
IFLA_NEW_NETNSID = 0x2d
IFLA_IF_NETNSID = 0x2e
- IFLA_MAX = 0x31
+ IFLA_MAX = 0x33
RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd
@@ -505,6 +519,20 @@ const (
RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1
RTN_LOCAL = 0x2
@@ -621,7 +649,6 @@ type SockFilter struct {
type SockFprog struct {
Len uint16
- _ [6]byte
Filter *SockFilter
}
@@ -651,18 +678,15 @@ type PtracePsw struct {
type PtraceFpregs struct {
Fpc uint32
- _ [4]byte
Fprs [16]float64
}
type PtracePer struct {
_ [0]uint64
- _ [24]byte
- _ [8]byte
+ _ [32]byte
Starting_addr uint64
Ending_addr uint64
Perc_atmid uint16
- _ [6]byte
Address uint64
Access_id uint8
_ [7]byte
@@ -683,7 +707,6 @@ type Sysinfo_t struct {
Freeswap uint64
Procs uint16
Pad uint16
- _ [4]byte
Totalhigh uint64
Freehigh uint64
Unit uint32
@@ -702,7 +725,6 @@ type Utsname struct {
type Ustat_t struct {
Tfree int32
- _ [4]byte
Tinode uint64
Fname [6]int8
Fpack [6]int8
@@ -776,11 +798,9 @@ type Winsize struct {
type Taskstats struct {
Version uint16
- _ [2]byte
Ac_exitcode uint32
Ac_flag uint8
Ac_nice uint8
- _ [6]byte
Cpu_count uint64
Cpu_delay_total uint64
Blkio_count uint64
@@ -798,7 +818,6 @@ type Taskstats struct {
Ac_pid uint32
Ac_ppid uint32
Ac_btime uint32
- _ [4]byte
Ac_etime uint64
Ac_utime uint64
Ac_stime uint64
@@ -822,6 +841,8 @@ type Taskstats struct {
Cpu_scaled_run_real_total uint64
Freepages_count uint64
Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
}
const (
@@ -1170,7 +1191,6 @@ type HDGeometry struct {
Heads uint8
Sectors uint8
Cylinders uint16
- _ [4]byte
Start uint64
}
@@ -1857,7 +1877,6 @@ type RTCTime struct {
type RTCWkAlrm struct {
Enabled uint8
Pending uint8
- _ [2]byte
Time RTCTime
}
@@ -1870,3 +1889,114 @@ type RTCPLLInfo struct {
Negmult int32
Clock int64
}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x1269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
index 8e7384b89..b0c9798d7 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
@@ -1,15 +1,16 @@
+// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go
+// Code generated by the command above; see README.md. DO NOT EDIT.
+
// +build sparc64,linux
-// Created by cgo -godefs - DO NOT EDIT
-// cgo -godefs types_linux.go | go run mkpost.go
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
PathMax = 0x1000
)
@@ -26,20 +27,18 @@ type Timespec struct {
}
type Timeval struct {
- Sec int64
- Usec int32
- Pad_cgo_0 [4]byte
+ Sec int64
+ Usec int32
+ _ [4]byte
}
type Timex struct {
Modes uint32
- Pad_cgo_0 [4]byte
Offset int64
Freq int64
Maxerror int64
Esterror int64
Status int32
- Pad_cgo_1 [4]byte
Constant int64
Precision int64
Tolerance int64
@@ -48,14 +47,13 @@ type Timex struct {
Ppsfreq int64
Jitter int64
Shift int32
- Pad_cgo_2 [4]byte
Stabil int64
Jitcnt int64
Calcnt int64
Errcnt int64
Stbcnt int64
Tai int32
- Pad_cgo_3 [44]byte
+ _ [44]byte
}
type Time_t int64
@@ -99,64 +97,96 @@ type Rlimit struct {
type _Gid_t uint32
type Stat_t struct {
- Dev uint64
- X__pad1 uint16
- Pad_cgo_0 [6]byte
- Ino uint64
- Mode uint32
- Nlink uint32
- Uid uint32
- Gid uint32
- Rdev uint64
- X__pad2 uint16
- Pad_cgo_1 [6]byte
- Size int64
- Blksize int64
- Blocks int64
- Atim Timespec
- Mtim Timespec
- Ctim Timespec
- X__glibc_reserved4 uint64
- X__glibc_reserved5 uint64
+ Dev uint64
+ _ uint16
+ Ino uint64
+ Mode uint32
+ Nlink uint32
+ Uid uint32
+ Gid uint32
+ Rdev uint64
+ _ uint16
+ Size int64
+ Blksize int64
+ Blocks int64
+ Atim Timespec
+ Mtim Timespec
+ Ctim Timespec
+ _ uint64
+ _ uint64
}
-type Statfs_t struct {
- Type int64
- Bsize int64
- Blocks uint64
- Bfree uint64
- Bavail uint64
- Files uint64
- Ffree uint64
- Fsid Fsid
- Namelen int64
- Frsize int64
- Flags int64
- Spare [4]int64
+type StatxTimestamp struct {
+ Sec int64
+ Nsec uint32
+ _ int32
+}
+
+type Statx_t struct {
+ Mask uint32
+ Blksize uint32
+ Attributes uint64
+ Nlink uint32
+ Uid uint32
+ Gid uint32
+ Mode uint16
+ _ [1]uint16
+ Ino uint64
+ Size uint64
+ Blocks uint64
+ Attributes_mask uint64
+ Atime StatxTimestamp
+ Btime StatxTimestamp
+ Ctime StatxTimestamp
+ Mtime StatxTimestamp
+ Rdev_major uint32
+ Rdev_minor uint32
+ Dev_major uint32
+ Dev_minor uint32
+ _ [14]uint64
}
type Dirent struct {
- Ino uint64
- Off int64
- Reclen uint16
- Type uint8
- Name [256]int8
- Pad_cgo_0 [5]byte
+ Ino uint64
+ Off int64
+ Reclen uint16
+ Type uint8
+ Name [256]int8
+ _ [5]byte
}
type Fsid struct {
- X__val [2]int32
+ Val [2]int32
}
type Flock_t struct {
- Type int16
- Whence int16
- Pad_cgo_0 [4]byte
- Start int64
- Len int64
- Pid int32
- X__glibc_reserved int16
- Pad_cgo_1 [2]byte
+ Type int16
+ Whence int16
+ Start int64
+ Len int64
+ Pid int32
+ _ int16
+ _ [2]byte
+}
+
+type FscryptPolicy struct {
+ Version uint8
+ Contents_encryption_mode uint8
+ Filenames_encryption_mode uint8
+ Flags uint8
+ Master_key_descriptor [8]uint8
+}
+
+type FscryptKey struct {
+ Mode uint32
+ Raw [64]uint8
+ Size uint32
+}
+
+type KeyctlDHParams struct {
+ Private int32
+ Prime int32
+ Base int32
}
const (
@@ -211,11 +241,26 @@ type RawSockaddrHCI struct {
Channel uint16
}
+type RawSockaddrL2 struct {
+ Family uint16
+ Psm uint16
+ Bdaddr [6]uint8
+ Cid uint16
+ Bdaddr_type uint8
+ _ [1]byte
+}
+
+type RawSockaddrRFCOMM struct {
+ Family uint16
+ Bdaddr [6]uint8
+ Channel uint8
+ _ [1]byte
+}
+
type RawSockaddrCAN struct {
- Family uint16
- Pad_cgo_0 [2]byte
- Ifindex int32
- Addr [8]byte
+ Family uint16
+ Ifindex int32
+ Addr [8]byte
}
type RawSockaddrALG struct {
@@ -234,6 +279,16 @@ type RawSockaddrVM struct {
Zero [4]uint8
}
+type RawSockaddrXDP struct {
+ Family uint16
+ Flags uint16
+ Ifindex uint32
+ Queue_id uint32
+ Shared_umem_fd uint32
+}
+
+type RawSockaddrPPPoX [0x1e]byte
+
type RawSockaddr struct {
Family uint16
Data [14]int8
@@ -272,16 +327,22 @@ type IPv6Mreq struct {
Interface uint32
}
+type PacketMreq struct {
+ Ifindex int32
+ Type uint16
+ Alen uint16
+ Address [8]uint8
+}
+
type Msghdr struct {
Name *byte
Namelen uint32
- Pad_cgo_0 [4]byte
Iov *Iovec
Iovlen uint64
Control *byte
Controllen uint64
Flags int32
- Pad_cgo_1 [4]byte
+ _ [4]byte
}
type Cmsghdr struct {
@@ -323,7 +384,6 @@ type TCPInfo struct {
Probes uint8
Backoff uint8
Options uint8
- Pad_cgo_0 [2]byte
Rto uint32
Ato uint32
Snd_mss uint32
@@ -358,13 +418,19 @@ const (
SizeofSockaddrLinklayer = 0x14
SizeofSockaddrNetlink = 0xc
SizeofSockaddrHCI = 0x6
+ SizeofSockaddrL2 = 0xe
+ SizeofSockaddrRFCOMM = 0xa
SizeofSockaddrCAN = 0x10
SizeofSockaddrALG = 0x58
SizeofSockaddrVM = 0x10
+ SizeofSockaddrXDP = 0x10
+ SizeofSockaddrPPPoX = 0x1e
SizeofLinger = 0x8
+ SizeofIovec = 0x10
SizeofIPMreq = 0x8
SizeofIPMreqn = 0xc
SizeofIPv6Mreq = 0x14
+ SizeofPacketMreq = 0x10
SizeofMsghdr = 0x38
SizeofCmsghdr = 0x10
SizeofInet4Pktinfo = 0xc
@@ -388,6 +454,7 @@ const (
IFLA_ADDRESS = 0x1
IFLA_BROADCAST = 0x2
IFLA_IFNAME = 0x3
+ IFLA_INFO_KIND = 0x1
IFLA_MTU = 0x4
IFLA_LINK = 0x5
IFLA_QDISC = 0x6
@@ -431,7 +498,7 @@ const (
IFLA_EVENT = 0x2c
IFLA_NEW_NETNSID = 0x2d
IFLA_IF_NETNSID = 0x2e
- IFLA_MAX = 0x2e
+ IFLA_MAX = 0x33
RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd
@@ -456,6 +523,20 @@ const (
RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf
+ RTA_MARK = 0x10
+ RTA_MFC_STATS = 0x11
+ RTA_VIA = 0x12
+ RTA_NEWDST = 0x13
+ RTA_PREF = 0x14
+ RTA_ENCAP_TYPE = 0x15
+ RTA_ENCAP = 0x16
+ RTA_EXPIRES = 0x17
+ RTA_PAD = 0x18
+ RTA_UID = 0x19
+ RTA_TTL_PROPAGATE = 0x1a
+ RTA_IP_PROTO = 0x1b
+ RTA_SPORT = 0x1c
+ RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1
RTN_LOCAL = 0x2
@@ -523,12 +604,12 @@ type RtAttr struct {
}
type IfInfomsg struct {
- Family uint8
- X__ifi_pad uint8
- Type uint16
- Index int32
- Flags uint32
- Change uint32
+ Family uint8
+ _ uint8
+ Type uint16
+ Index int32
+ Flags uint32
+ Change uint32
}
type IfAddrmsg struct {
@@ -571,9 +652,8 @@ type SockFilter struct {
}
type SockFprog struct {
- Len uint16
- Pad_cgo_0 [6]byte
- Filter *SockFilter
+ Len uint16
+ Filter *SockFilter
}
type InotifyEvent struct {
@@ -594,15 +674,6 @@ type PtraceRegs struct {
Magic uint32
}
-type ptracePsw struct {
-}
-
-type ptraceFpregs struct {
-}
-
-type ptracePer struct {
-}
-
type FdSet struct {
Bits [16]int64
}
@@ -618,12 +689,11 @@ type Sysinfo_t struct {
Freeswap uint64
Procs uint16
Pad uint16
- Pad_cgo_0 [4]byte
Totalhigh uint64
Freehigh uint64
Unit uint32
- X_f [0]int8
- Pad_cgo_1 [4]byte
+ _ [0]int8
+ _ [4]byte
}
type Utsname struct {
@@ -636,26 +706,34 @@ type Utsname struct {
}
type Ustat_t struct {
- Tfree int32
- Pad_cgo_0 [4]byte
- Tinode uint64
- Fname [6]int8
- Fpack [6]int8
- Pad_cgo_1 [4]byte
+ Tfree int32
+ Tinode uint64
+ Fname [6]int8
+ Fpack [6]int8
+ _ [4]byte
}
type EpollEvent struct {
- Events uint32
- X_padFd int32
- Fd int32
- Pad int32
+ Events uint32
+ _ int32
+ Fd int32
+ Pad int32
}
const (
- AT_FDCWD = -0x64
- AT_REMOVEDIR = 0x200
+ AT_EMPTY_PATH = 0x1000
+ AT_FDCWD = -0x64
+ AT_NO_AUTOMOUNT = 0x800
+ AT_REMOVEDIR = 0x200
+
+ AT_STATX_SYNC_AS_STAT = 0x0
+ AT_STATX_FORCE_SYNC = 0x2000
+ AT_STATX_DONT_SYNC = 0x4000
+
AT_SYMLINK_FOLLOW = 0x400
AT_SYMLINK_NOFOLLOW = 0x100
+
+ AT_EACCESS = 0x200
)
type PollFd struct {
@@ -675,9 +753,13 @@ const (
)
type Sigset_t struct {
- X__val [16]uint64
+ Val [16]uint64
}
+const RNDGETENTCNT = 0x40045200
+
+const PERF_IOC_FLAG_GROUP = 0x1
+
type Termios struct {
Iflag uint32
Oflag uint32
@@ -688,3 +770,1214 @@ type Termios struct {
Ispeed uint32
Ospeed uint32
}
+
+type Winsize struct {
+ Row uint16
+ Col uint16
+ Xpixel uint16
+ Ypixel uint16
+}
+
+type Taskstats struct {
+ Version uint16
+ Ac_exitcode uint32
+ Ac_flag uint8
+ Ac_nice uint8
+ Cpu_count uint64
+ Cpu_delay_total uint64
+ Blkio_count uint64
+ Blkio_delay_total uint64
+ Swapin_count uint64
+ Swapin_delay_total uint64
+ Cpu_run_real_total uint64
+ Cpu_run_virtual_total uint64
+ Ac_comm [32]int8
+ Ac_sched uint8
+ Ac_pad [3]uint8
+ _ [4]byte
+ Ac_uid uint32
+ Ac_gid uint32
+ Ac_pid uint32
+ Ac_ppid uint32
+ Ac_btime uint32
+ Ac_etime uint64
+ Ac_utime uint64
+ Ac_stime uint64
+ Ac_minflt uint64
+ Ac_majflt uint64
+ Coremem uint64
+ Virtmem uint64
+ Hiwater_rss uint64
+ Hiwater_vm uint64
+ Read_char uint64
+ Write_char uint64
+ Read_syscalls uint64
+ Write_syscalls uint64
+ Read_bytes uint64
+ Write_bytes uint64
+ Cancelled_write_bytes uint64
+ Nvcsw uint64
+ Nivcsw uint64
+ Ac_utimescaled uint64
+ Ac_stimescaled uint64
+ Cpu_scaled_run_real_total uint64
+ Freepages_count uint64
+ Freepages_delay_total uint64
+ Thrashing_count uint64
+ Thrashing_delay_total uint64
+}
+
+const (
+ TASKSTATS_CMD_UNSPEC = 0x0
+ TASKSTATS_CMD_GET = 0x1
+ TASKSTATS_CMD_NEW = 0x2
+ TASKSTATS_TYPE_UNSPEC = 0x0
+ TASKSTATS_TYPE_PID = 0x1
+ TASKSTATS_TYPE_TGID = 0x2
+ TASKSTATS_TYPE_STATS = 0x3
+ TASKSTATS_TYPE_AGGR_PID = 0x4
+ TASKSTATS_TYPE_AGGR_TGID = 0x5
+ TASKSTATS_TYPE_NULL = 0x6
+ TASKSTATS_CMD_ATTR_UNSPEC = 0x0
+ TASKSTATS_CMD_ATTR_PID = 0x1
+ TASKSTATS_CMD_ATTR_TGID = 0x2
+ TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3
+ TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4
+)
+
+type CGroupStats struct {
+ Sleeping uint64
+ Running uint64
+ Stopped uint64
+ Uninterruptible uint64
+ Io_wait uint64
+}
+
+const (
+ CGROUPSTATS_CMD_UNSPEC = 0x3
+ CGROUPSTATS_CMD_GET = 0x4
+ CGROUPSTATS_CMD_NEW = 0x5
+ CGROUPSTATS_TYPE_UNSPEC = 0x0
+ CGROUPSTATS_TYPE_CGROUP_STATS = 0x1
+ CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0
+ CGROUPSTATS_CMD_ATTR_FD = 0x1
+)
+
+type Genlmsghdr struct {
+ Cmd uint8
+ Version uint8
+ Reserved uint16
+}
+
+const (
+ CTRL_CMD_UNSPEC = 0x0
+ CTRL_CMD_NEWFAMILY = 0x1
+ CTRL_CMD_DELFAMILY = 0x2
+ CTRL_CMD_GETFAMILY = 0x3
+ CTRL_CMD_NEWOPS = 0x4
+ CTRL_CMD_DELOPS = 0x5
+ CTRL_CMD_GETOPS = 0x6
+ CTRL_CMD_NEWMCAST_GRP = 0x7
+ CTRL_CMD_DELMCAST_GRP = 0x8
+ CTRL_CMD_GETMCAST_GRP = 0x9
+ CTRL_ATTR_UNSPEC = 0x0
+ CTRL_ATTR_FAMILY_ID = 0x1
+ CTRL_ATTR_FAMILY_NAME = 0x2
+ CTRL_ATTR_VERSION = 0x3
+ CTRL_ATTR_HDRSIZE = 0x4
+ CTRL_ATTR_MAXATTR = 0x5
+ CTRL_ATTR_OPS = 0x6
+ CTRL_ATTR_MCAST_GROUPS = 0x7
+ CTRL_ATTR_OP_UNSPEC = 0x0
+ CTRL_ATTR_OP_ID = 0x1
+ CTRL_ATTR_OP_FLAGS = 0x2
+ CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0
+ CTRL_ATTR_MCAST_GRP_NAME = 0x1
+ CTRL_ATTR_MCAST_GRP_ID = 0x2
+)
+
+type cpuMask uint64
+
+const (
+ _CPU_SETSIZE = 0x400
+ _NCPUBITS = 0x40
+)
+
+const (
+ BDADDR_BREDR = 0x0
+ BDADDR_LE_PUBLIC = 0x1
+ BDADDR_LE_RANDOM = 0x2
+)
+
+type PerfEventAttr struct {
+ Type uint32
+ Size uint32
+ Config uint64
+ Sample uint64
+ Sample_type uint64
+ Read_format uint64
+ Bits uint64
+ Wakeup uint32
+ Bp_type uint32
+ Ext1 uint64
+ Ext2 uint64
+ Branch_sample_type uint64
+ Sample_regs_user uint64
+ Sample_stack_user uint32
+ Clockid int32
+ Sample_regs_intr uint64
+ Aux_watermark uint32
+ _ uint32
+}
+
+type PerfEventMmapPage struct {
+ Version uint32
+ Compat_version uint32
+ Lock uint32
+ Index uint32
+ Offset int64
+ Time_enabled uint64
+ Time_running uint64
+ Capabilities uint64
+ Pmc_width uint16
+ Time_shift uint16
+ Time_mult uint32
+ Time_offset uint64
+ Time_zero uint64
+ Size uint32
+ _ [948]uint8
+ Data_head uint64
+ Data_tail uint64
+ Data_offset uint64
+ Data_size uint64
+ Aux_head uint64
+ Aux_tail uint64
+ Aux_offset uint64
+ Aux_size uint64
+}
+
+const (
+ PerfBitDisabled uint64 = CBitFieldMaskBit0
+ PerfBitInherit = CBitFieldMaskBit1
+ PerfBitPinned = CBitFieldMaskBit2
+ PerfBitExclusive = CBitFieldMaskBit3
+ PerfBitExcludeUser = CBitFieldMaskBit4
+ PerfBitExcludeKernel = CBitFieldMaskBit5
+ PerfBitExcludeHv = CBitFieldMaskBit6
+ PerfBitExcludeIdle = CBitFieldMaskBit7
+ PerfBitMmap = CBitFieldMaskBit8
+ PerfBitComm = CBitFieldMaskBit9
+ PerfBitFreq = CBitFieldMaskBit10
+ PerfBitInheritStat = CBitFieldMaskBit11
+ PerfBitEnableOnExec = CBitFieldMaskBit12
+ PerfBitTask = CBitFieldMaskBit13
+ PerfBitWatermark = CBitFieldMaskBit14
+ PerfBitPreciseIPBit1 = CBitFieldMaskBit15
+ PerfBitPreciseIPBit2 = CBitFieldMaskBit16
+ PerfBitMmapData = CBitFieldMaskBit17
+ PerfBitSampleIDAll = CBitFieldMaskBit18
+ PerfBitExcludeHost = CBitFieldMaskBit19
+ PerfBitExcludeGuest = CBitFieldMaskBit20
+ PerfBitExcludeCallchainKernel = CBitFieldMaskBit21
+ PerfBitExcludeCallchainUser = CBitFieldMaskBit22
+ PerfBitMmap2 = CBitFieldMaskBit23
+ PerfBitCommExec = CBitFieldMaskBit24
+ PerfBitUseClockID = CBitFieldMaskBit25
+ PerfBitContextSwitch = CBitFieldMaskBit26
+)
+
+const (
+ PERF_TYPE_HARDWARE = 0x0
+ PERF_TYPE_SOFTWARE = 0x1
+ PERF_TYPE_TRACEPOINT = 0x2
+ PERF_TYPE_HW_CACHE = 0x3
+ PERF_TYPE_RAW = 0x4
+ PERF_TYPE_BREAKPOINT = 0x5
+
+ PERF_COUNT_HW_CPU_CYCLES = 0x0
+ PERF_COUNT_HW_INSTRUCTIONS = 0x1
+ PERF_COUNT_HW_CACHE_REFERENCES = 0x2
+ PERF_COUNT_HW_CACHE_MISSES = 0x3
+ PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4
+ PERF_COUNT_HW_BRANCH_MISSES = 0x5
+ PERF_COUNT_HW_BUS_CYCLES = 0x6
+ PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7
+ PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8
+ PERF_COUNT_HW_REF_CPU_CYCLES = 0x9
+
+ PERF_COUNT_HW_CACHE_L1D = 0x0
+ PERF_COUNT_HW_CACHE_L1I = 0x1
+ PERF_COUNT_HW_CACHE_LL = 0x2
+ PERF_COUNT_HW_CACHE_DTLB = 0x3
+ PERF_COUNT_HW_CACHE_ITLB = 0x4
+ PERF_COUNT_HW_CACHE_BPU = 0x5
+ PERF_COUNT_HW_CACHE_NODE = 0x6
+
+ PERF_COUNT_HW_CACHE_OP_READ = 0x0
+ PERF_COUNT_HW_CACHE_OP_WRITE = 0x1
+ PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2
+
+ PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0
+ PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1
+
+ PERF_COUNT_SW_CPU_CLOCK = 0x0
+ PERF_COUNT_SW_TASK_CLOCK = 0x1
+ PERF_COUNT_SW_PAGE_FAULTS = 0x2
+ PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3
+ PERF_COUNT_SW_CPU_MIGRATIONS = 0x4
+ PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5
+ PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6
+ PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7
+ PERF_COUNT_SW_EMULATION_FAULTS = 0x8
+ PERF_COUNT_SW_DUMMY = 0x9
+
+ PERF_SAMPLE_IP = 0x1
+ PERF_SAMPLE_TID = 0x2
+ PERF_SAMPLE_TIME = 0x4
+ PERF_SAMPLE_ADDR = 0x8
+ PERF_SAMPLE_READ = 0x10
+ PERF_SAMPLE_CALLCHAIN = 0x20
+ PERF_SAMPLE_ID = 0x40
+ PERF_SAMPLE_CPU = 0x80
+ PERF_SAMPLE_PERIOD = 0x100
+ PERF_SAMPLE_STREAM_ID = 0x200
+ PERF_SAMPLE_RAW = 0x400
+ PERF_SAMPLE_BRANCH_STACK = 0x800
+
+ PERF_SAMPLE_BRANCH_USER = 0x1
+ PERF_SAMPLE_BRANCH_KERNEL = 0x2
+ PERF_SAMPLE_BRANCH_HV = 0x4
+ PERF_SAMPLE_BRANCH_ANY = 0x8
+ PERF_SAMPLE_BRANCH_ANY_CALL = 0x10
+ PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20
+ PERF_SAMPLE_BRANCH_IND_CALL = 0x40
+
+ PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1
+ PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2
+ PERF_FORMAT_ID = 0x4
+ PERF_FORMAT_GROUP = 0x8
+
+ PERF_RECORD_MMAP = 0x1
+ PERF_RECORD_LOST = 0x2
+ PERF_RECORD_COMM = 0x3
+ PERF_RECORD_EXIT = 0x4
+ PERF_RECORD_THROTTLE = 0x5
+ PERF_RECORD_UNTHROTTLE = 0x6
+ PERF_RECORD_FORK = 0x7
+ PERF_RECORD_READ = 0x8
+ PERF_RECORD_SAMPLE = 0x9
+
+ PERF_CONTEXT_HV = -0x20
+ PERF_CONTEXT_KERNEL = -0x80
+ PERF_CONTEXT_USER = -0x200
+
+ PERF_CONTEXT_GUEST = -0x800
+ PERF_CONTEXT_GUEST_KERNEL = -0x880
+ PERF_CONTEXT_GUEST_USER = -0xa00
+
+ PERF_FLAG_FD_NO_GROUP = 0x1
+ PERF_FLAG_FD_OUTPUT = 0x2
+ PERF_FLAG_PID_CGROUP = 0x4
+)
+
+const (
+ CBitFieldMaskBit0 = 0x8000000000000000
+ CBitFieldMaskBit1 = 0x4000000000000000
+ CBitFieldMaskBit2 = 0x2000000000000000
+ CBitFieldMaskBit3 = 0x1000000000000000
+ CBitFieldMaskBit4 = 0x800000000000000
+ CBitFieldMaskBit5 = 0x400000000000000
+ CBitFieldMaskBit6 = 0x200000000000000
+ CBitFieldMaskBit7 = 0x100000000000000
+ CBitFieldMaskBit8 = 0x80000000000000
+ CBitFieldMaskBit9 = 0x40000000000000
+ CBitFieldMaskBit10 = 0x20000000000000
+ CBitFieldMaskBit11 = 0x10000000000000
+ CBitFieldMaskBit12 = 0x8000000000000
+ CBitFieldMaskBit13 = 0x4000000000000
+ CBitFieldMaskBit14 = 0x2000000000000
+ CBitFieldMaskBit15 = 0x1000000000000
+ CBitFieldMaskBit16 = 0x800000000000
+ CBitFieldMaskBit17 = 0x400000000000
+ CBitFieldMaskBit18 = 0x200000000000
+ CBitFieldMaskBit19 = 0x100000000000
+ CBitFieldMaskBit20 = 0x80000000000
+ CBitFieldMaskBit21 = 0x40000000000
+ CBitFieldMaskBit22 = 0x20000000000
+ CBitFieldMaskBit23 = 0x10000000000
+ CBitFieldMaskBit24 = 0x8000000000
+ CBitFieldMaskBit25 = 0x4000000000
+ CBitFieldMaskBit26 = 0x2000000000
+ CBitFieldMaskBit27 = 0x1000000000
+ CBitFieldMaskBit28 = 0x800000000
+ CBitFieldMaskBit29 = 0x400000000
+ CBitFieldMaskBit30 = 0x200000000
+ CBitFieldMaskBit31 = 0x100000000
+ CBitFieldMaskBit32 = 0x80000000
+ CBitFieldMaskBit33 = 0x40000000
+ CBitFieldMaskBit34 = 0x20000000
+ CBitFieldMaskBit35 = 0x10000000
+ CBitFieldMaskBit36 = 0x8000000
+ CBitFieldMaskBit37 = 0x4000000
+ CBitFieldMaskBit38 = 0x2000000
+ CBitFieldMaskBit39 = 0x1000000
+ CBitFieldMaskBit40 = 0x800000
+ CBitFieldMaskBit41 = 0x400000
+ CBitFieldMaskBit42 = 0x200000
+ CBitFieldMaskBit43 = 0x100000
+ CBitFieldMaskBit44 = 0x80000
+ CBitFieldMaskBit45 = 0x40000
+ CBitFieldMaskBit46 = 0x20000
+ CBitFieldMaskBit47 = 0x10000
+ CBitFieldMaskBit48 = 0x8000
+ CBitFieldMaskBit49 = 0x4000
+ CBitFieldMaskBit50 = 0x2000
+ CBitFieldMaskBit51 = 0x1000
+ CBitFieldMaskBit52 = 0x800
+ CBitFieldMaskBit53 = 0x400
+ CBitFieldMaskBit54 = 0x200
+ CBitFieldMaskBit55 = 0x100
+ CBitFieldMaskBit56 = 0x80
+ CBitFieldMaskBit57 = 0x40
+ CBitFieldMaskBit58 = 0x20
+ CBitFieldMaskBit59 = 0x10
+ CBitFieldMaskBit60 = 0x8
+ CBitFieldMaskBit61 = 0x4
+ CBitFieldMaskBit62 = 0x2
+ CBitFieldMaskBit63 = 0x1
+)
+
+type SockaddrStorage struct {
+ Family uint16
+ _ [118]int8
+ _ uint64
+}
+
+type TCPMD5Sig struct {
+ Addr SockaddrStorage
+ Flags uint8
+ Prefixlen uint8
+ Keylen uint16
+ _ uint32
+ Key [80]uint8
+}
+
+type HDDriveCmdHdr struct {
+ Command uint8
+ Number uint8
+ Feature uint8
+ Count uint8
+}
+
+type HDGeometry struct {
+ Heads uint8
+ Sectors uint8
+ Cylinders uint16
+ Start uint64
+}
+
+type HDDriveID struct {
+ Config uint16
+ Cyls uint16
+ Reserved2 uint16
+ Heads uint16
+ Track_bytes uint16
+ Sector_bytes uint16
+ Sectors uint16
+ Vendor0 uint16
+ Vendor1 uint16
+ Vendor2 uint16
+ Serial_no [20]uint8
+ Buf_type uint16
+ Buf_size uint16
+ Ecc_bytes uint16
+ Fw_rev [8]uint8
+ Model [40]uint8
+ Max_multsect uint8
+ Vendor3 uint8
+ Dword_io uint16
+ Vendor4 uint8
+ Capability uint8
+ Reserved50 uint16
+ Vendor5 uint8
+ TPIO uint8
+ Vendor6 uint8
+ TDMA uint8
+ Field_valid uint16
+ Cur_cyls uint16
+ Cur_heads uint16
+ Cur_sectors uint16
+ Cur_capacity0 uint16
+ Cur_capacity1 uint16
+ Multsect uint8
+ Multsect_valid uint8
+ Lba_capacity uint32
+ Dma_1word uint16
+ Dma_mword uint16
+ Eide_pio_modes uint16
+ Eide_dma_min uint16
+ Eide_dma_time uint16
+ Eide_pio uint16
+ Eide_pio_iordy uint16
+ Words69_70 [2]uint16
+ Words71_74 [4]uint16
+ Queue_depth uint16
+ Words76_79 [4]uint16
+ Major_rev_num uint16
+ Minor_rev_num uint16
+ Command_set_1 uint16
+ Command_set_2 uint16
+ Cfsse uint16
+ Cfs_enable_1 uint16
+ Cfs_enable_2 uint16
+ Csf_default uint16
+ Dma_ultra uint16
+ Trseuc uint16
+ TrsEuc uint16
+ CurAPMvalues uint16
+ Mprc uint16
+ Hw_config uint16
+ Acoustic uint16
+ Msrqs uint16
+ Sxfert uint16
+ Sal uint16
+ Spg uint32
+ Lba_capacity_2 uint64
+ Words104_125 [22]uint16
+ Last_lun uint16
+ Word127 uint16
+ Dlf uint16
+ Csfo uint16
+ Words130_155 [26]uint16
+ Word156 uint16
+ Words157_159 [3]uint16
+ Cfa_power uint16
+ Words161_175 [15]uint16
+ Words176_205 [30]uint16
+ Words206_254 [49]uint16
+ Integrity_word uint16
+}
+
+type Statfs_t struct {
+ Type int64
+ Bsize int64
+ Blocks uint64
+ Bfree uint64
+ Bavail uint64
+ Files uint64
+ Ffree uint64
+ Fsid Fsid
+ Namelen int64
+ Frsize int64
+ Flags int64
+ Spare [4]int64
+}
+
+const (
+ ST_MANDLOCK = 0x40
+ ST_NOATIME = 0x400
+ ST_NODEV = 0x4
+ ST_NODIRATIME = 0x800
+ ST_NOEXEC = 0x8
+ ST_NOSUID = 0x2
+ ST_RDONLY = 0x1
+ ST_RELATIME = 0x1000
+ ST_SYNCHRONOUS = 0x10
+)
+
+type TpacketHdr struct {
+ Status uint64
+ Len uint32
+ Snaplen uint32
+ Mac uint16
+ Net uint16
+ Sec uint32
+ Usec uint32
+ _ [4]byte
+}
+
+type Tpacket2Hdr struct {
+ Status uint32
+ Len uint32
+ Snaplen uint32
+ Mac uint16
+ Net uint16
+ Sec uint32
+ Nsec uint32
+ Vlan_tci uint16
+ Vlan_tpid uint16
+ _ [4]uint8
+}
+
+type Tpacket3Hdr struct {
+ Next_offset uint32
+ Sec uint32
+ Nsec uint32
+ Snaplen uint32
+ Len uint32
+ Status uint32
+ Mac uint16
+ Net uint16
+ Hv1 TpacketHdrVariant1
+ _ [8]uint8
+}
+
+type TpacketHdrVariant1 struct {
+ Rxhash uint32
+ Vlan_tci uint32
+ Vlan_tpid uint16
+ _ uint16
+}
+
+type TpacketBlockDesc struct {
+ Version uint32
+ To_priv uint32
+ Hdr [40]byte
+}
+
+type TpacketReq struct {
+ Block_size uint32
+ Block_nr uint32
+ Frame_size uint32
+ Frame_nr uint32
+}
+
+type TpacketReq3 struct {
+ Block_size uint32
+ Block_nr uint32
+ Frame_size uint32
+ Frame_nr uint32
+ Retire_blk_tov uint32
+ Sizeof_priv uint32
+ Feature_req_word uint32
+}
+
+type TpacketStats struct {
+ Packets uint32
+ Drops uint32
+}
+
+type TpacketStatsV3 struct {
+ Packets uint32
+ Drops uint32
+ Freeze_q_cnt uint32
+}
+
+type TpacketAuxdata struct {
+ Status uint32
+ Len uint32
+ Snaplen uint32
+ Mac uint16
+ Net uint16
+ Vlan_tci uint16
+ Vlan_tpid uint16
+}
+
+const (
+ TPACKET_V1 = 0x0
+ TPACKET_V2 = 0x1
+ TPACKET_V3 = 0x2
+)
+
+const (
+ SizeofTpacketHdr = 0x20
+ SizeofTpacket2Hdr = 0x20
+ SizeofTpacket3Hdr = 0x30
+)
+
+const (
+ NF_INET_PRE_ROUTING = 0x0
+ NF_INET_LOCAL_IN = 0x1
+ NF_INET_FORWARD = 0x2
+ NF_INET_LOCAL_OUT = 0x3
+ NF_INET_POST_ROUTING = 0x4
+ NF_INET_NUMHOOKS = 0x5
+)
+
+const (
+ NF_NETDEV_INGRESS = 0x0
+ NF_NETDEV_NUMHOOKS = 0x1
+)
+
+const (
+ NFPROTO_UNSPEC = 0x0
+ NFPROTO_INET = 0x1
+ NFPROTO_IPV4 = 0x2
+ NFPROTO_ARP = 0x3
+ NFPROTO_NETDEV = 0x5
+ NFPROTO_BRIDGE = 0x7
+ NFPROTO_IPV6 = 0xa
+ NFPROTO_DECNET = 0xc
+ NFPROTO_NUMPROTO = 0xd
+)
+
+type Nfgenmsg struct {
+ Nfgen_family uint8
+ Version uint8
+ Res_id uint16
+}
+
+const (
+ NFNL_BATCH_UNSPEC = 0x0
+ NFNL_BATCH_GENID = 0x1
+)
+
+const (
+ NFT_REG_VERDICT = 0x0
+ NFT_REG_1 = 0x1
+ NFT_REG_2 = 0x2
+ NFT_REG_3 = 0x3
+ NFT_REG_4 = 0x4
+ NFT_REG32_00 = 0x8
+ NFT_REG32_01 = 0x9
+ NFT_REG32_02 = 0xa
+ NFT_REG32_03 = 0xb
+ NFT_REG32_04 = 0xc
+ NFT_REG32_05 = 0xd
+ NFT_REG32_06 = 0xe
+ NFT_REG32_07 = 0xf
+ NFT_REG32_08 = 0x10
+ NFT_REG32_09 = 0x11
+ NFT_REG32_10 = 0x12
+ NFT_REG32_11 = 0x13
+ NFT_REG32_12 = 0x14
+ NFT_REG32_13 = 0x15
+ NFT_REG32_14 = 0x16
+ NFT_REG32_15 = 0x17
+ NFT_CONTINUE = -0x1
+ NFT_BREAK = -0x2
+ NFT_JUMP = -0x3
+ NFT_GOTO = -0x4
+ NFT_RETURN = -0x5
+ NFT_MSG_NEWTABLE = 0x0
+ NFT_MSG_GETTABLE = 0x1
+ NFT_MSG_DELTABLE = 0x2
+ NFT_MSG_NEWCHAIN = 0x3
+ NFT_MSG_GETCHAIN = 0x4
+ NFT_MSG_DELCHAIN = 0x5
+ NFT_MSG_NEWRULE = 0x6
+ NFT_MSG_GETRULE = 0x7
+ NFT_MSG_DELRULE = 0x8
+ NFT_MSG_NEWSET = 0x9
+ NFT_MSG_GETSET = 0xa
+ NFT_MSG_DELSET = 0xb
+ NFT_MSG_NEWSETELEM = 0xc
+ NFT_MSG_GETSETELEM = 0xd
+ NFT_MSG_DELSETELEM = 0xe
+ NFT_MSG_NEWGEN = 0xf
+ NFT_MSG_GETGEN = 0x10
+ NFT_MSG_TRACE = 0x11
+ NFT_MSG_NEWOBJ = 0x12
+ NFT_MSG_GETOBJ = 0x13
+ NFT_MSG_DELOBJ = 0x14
+ NFT_MSG_GETOBJ_RESET = 0x15
+ NFT_MSG_MAX = 0x19
+ NFTA_LIST_UNPEC = 0x0
+ NFTA_LIST_ELEM = 0x1
+ NFTA_HOOK_UNSPEC = 0x0
+ NFTA_HOOK_HOOKNUM = 0x1
+ NFTA_HOOK_PRIORITY = 0x2
+ NFTA_HOOK_DEV = 0x3
+ NFT_TABLE_F_DORMANT = 0x1
+ NFTA_TABLE_UNSPEC = 0x0
+ NFTA_TABLE_NAME = 0x1
+ NFTA_TABLE_FLAGS = 0x2
+ NFTA_TABLE_USE = 0x3
+ NFTA_CHAIN_UNSPEC = 0x0
+ NFTA_CHAIN_TABLE = 0x1
+ NFTA_CHAIN_HANDLE = 0x2
+ NFTA_CHAIN_NAME = 0x3
+ NFTA_CHAIN_HOOK = 0x4
+ NFTA_CHAIN_POLICY = 0x5
+ NFTA_CHAIN_USE = 0x6
+ NFTA_CHAIN_TYPE = 0x7
+ NFTA_CHAIN_COUNTERS = 0x8
+ NFTA_CHAIN_PAD = 0x9
+ NFTA_RULE_UNSPEC = 0x0
+ NFTA_RULE_TABLE = 0x1
+ NFTA_RULE_CHAIN = 0x2
+ NFTA_RULE_HANDLE = 0x3
+ NFTA_RULE_EXPRESSIONS = 0x4
+ NFTA_RULE_COMPAT = 0x5
+ NFTA_RULE_POSITION = 0x6
+ NFTA_RULE_USERDATA = 0x7
+ NFTA_RULE_PAD = 0x8
+ NFTA_RULE_ID = 0x9
+ NFT_RULE_COMPAT_F_INV = 0x2
+ NFT_RULE_COMPAT_F_MASK = 0x2
+ NFTA_RULE_COMPAT_UNSPEC = 0x0
+ NFTA_RULE_COMPAT_PROTO = 0x1
+ NFTA_RULE_COMPAT_FLAGS = 0x2
+ NFT_SET_ANONYMOUS = 0x1
+ NFT_SET_CONSTANT = 0x2
+ NFT_SET_INTERVAL = 0x4
+ NFT_SET_MAP = 0x8
+ NFT_SET_TIMEOUT = 0x10
+ NFT_SET_EVAL = 0x20
+ NFT_SET_OBJECT = 0x40
+ NFT_SET_POL_PERFORMANCE = 0x0
+ NFT_SET_POL_MEMORY = 0x1
+ NFTA_SET_DESC_UNSPEC = 0x0
+ NFTA_SET_DESC_SIZE = 0x1
+ NFTA_SET_UNSPEC = 0x0
+ NFTA_SET_TABLE = 0x1
+ NFTA_SET_NAME = 0x2
+ NFTA_SET_FLAGS = 0x3
+ NFTA_SET_KEY_TYPE = 0x4
+ NFTA_SET_KEY_LEN = 0x5
+ NFTA_SET_DATA_TYPE = 0x6
+ NFTA_SET_DATA_LEN = 0x7
+ NFTA_SET_POLICY = 0x8
+ NFTA_SET_DESC = 0x9
+ NFTA_SET_ID = 0xa
+ NFTA_SET_TIMEOUT = 0xb
+ NFTA_SET_GC_INTERVAL = 0xc
+ NFTA_SET_USERDATA = 0xd
+ NFTA_SET_PAD = 0xe
+ NFTA_SET_OBJ_TYPE = 0xf
+ NFT_SET_ELEM_INTERVAL_END = 0x1
+ NFTA_SET_ELEM_UNSPEC = 0x0
+ NFTA_SET_ELEM_KEY = 0x1
+ NFTA_SET_ELEM_DATA = 0x2
+ NFTA_SET_ELEM_FLAGS = 0x3
+ NFTA_SET_ELEM_TIMEOUT = 0x4
+ NFTA_SET_ELEM_EXPIRATION = 0x5
+ NFTA_SET_ELEM_USERDATA = 0x6
+ NFTA_SET_ELEM_EXPR = 0x7
+ NFTA_SET_ELEM_PAD = 0x8
+ NFTA_SET_ELEM_OBJREF = 0x9
+ NFTA_SET_ELEM_LIST_UNSPEC = 0x0
+ NFTA_SET_ELEM_LIST_TABLE = 0x1
+ NFTA_SET_ELEM_LIST_SET = 0x2
+ NFTA_SET_ELEM_LIST_ELEMENTS = 0x3
+ NFTA_SET_ELEM_LIST_SET_ID = 0x4
+ NFT_DATA_VALUE = 0x0
+ NFT_DATA_VERDICT = 0xffffff00
+ NFTA_DATA_UNSPEC = 0x0
+ NFTA_DATA_VALUE = 0x1
+ NFTA_DATA_VERDICT = 0x2
+ NFTA_VERDICT_UNSPEC = 0x0
+ NFTA_VERDICT_CODE = 0x1
+ NFTA_VERDICT_CHAIN = 0x2
+ NFTA_EXPR_UNSPEC = 0x0
+ NFTA_EXPR_NAME = 0x1
+ NFTA_EXPR_DATA = 0x2
+ NFTA_IMMEDIATE_UNSPEC = 0x0
+ NFTA_IMMEDIATE_DREG = 0x1
+ NFTA_IMMEDIATE_DATA = 0x2
+ NFTA_BITWISE_UNSPEC = 0x0
+ NFTA_BITWISE_SREG = 0x1
+ NFTA_BITWISE_DREG = 0x2
+ NFTA_BITWISE_LEN = 0x3
+ NFTA_BITWISE_MASK = 0x4
+ NFTA_BITWISE_XOR = 0x5
+ NFT_BYTEORDER_NTOH = 0x0
+ NFT_BYTEORDER_HTON = 0x1
+ NFTA_BYTEORDER_UNSPEC = 0x0
+ NFTA_BYTEORDER_SREG = 0x1
+ NFTA_BYTEORDER_DREG = 0x2
+ NFTA_BYTEORDER_OP = 0x3
+ NFTA_BYTEORDER_LEN = 0x4
+ NFTA_BYTEORDER_SIZE = 0x5
+ NFT_CMP_EQ = 0x0
+ NFT_CMP_NEQ = 0x1
+ NFT_CMP_LT = 0x2
+ NFT_CMP_LTE = 0x3
+ NFT_CMP_GT = 0x4
+ NFT_CMP_GTE = 0x5
+ NFTA_CMP_UNSPEC = 0x0
+ NFTA_CMP_SREG = 0x1
+ NFTA_CMP_OP = 0x2
+ NFTA_CMP_DATA = 0x3
+ NFT_RANGE_EQ = 0x0
+ NFT_RANGE_NEQ = 0x1
+ NFTA_RANGE_UNSPEC = 0x0
+ NFTA_RANGE_SREG = 0x1
+ NFTA_RANGE_OP = 0x2
+ NFTA_RANGE_FROM_DATA = 0x3
+ NFTA_RANGE_TO_DATA = 0x4
+ NFT_LOOKUP_F_INV = 0x1
+ NFTA_LOOKUP_UNSPEC = 0x0
+ NFTA_LOOKUP_SET = 0x1
+ NFTA_LOOKUP_SREG = 0x2
+ NFTA_LOOKUP_DREG = 0x3
+ NFTA_LOOKUP_SET_ID = 0x4
+ NFTA_LOOKUP_FLAGS = 0x5
+ NFT_DYNSET_OP_ADD = 0x0
+ NFT_DYNSET_OP_UPDATE = 0x1
+ NFT_DYNSET_F_INV = 0x1
+ NFTA_DYNSET_UNSPEC = 0x0
+ NFTA_DYNSET_SET_NAME = 0x1
+ NFTA_DYNSET_SET_ID = 0x2
+ NFTA_DYNSET_OP = 0x3
+ NFTA_DYNSET_SREG_KEY = 0x4
+ NFTA_DYNSET_SREG_DATA = 0x5
+ NFTA_DYNSET_TIMEOUT = 0x6
+ NFTA_DYNSET_EXPR = 0x7
+ NFTA_DYNSET_PAD = 0x8
+ NFTA_DYNSET_FLAGS = 0x9
+ NFT_PAYLOAD_LL_HEADER = 0x0
+ NFT_PAYLOAD_NETWORK_HEADER = 0x1
+ NFT_PAYLOAD_TRANSPORT_HEADER = 0x2
+ NFT_PAYLOAD_CSUM_NONE = 0x0
+ NFT_PAYLOAD_CSUM_INET = 0x1
+ NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1
+ NFTA_PAYLOAD_UNSPEC = 0x0
+ NFTA_PAYLOAD_DREG = 0x1
+ NFTA_PAYLOAD_BASE = 0x2
+ NFTA_PAYLOAD_OFFSET = 0x3
+ NFTA_PAYLOAD_LEN = 0x4
+ NFTA_PAYLOAD_SREG = 0x5
+ NFTA_PAYLOAD_CSUM_TYPE = 0x6
+ NFTA_PAYLOAD_CSUM_OFFSET = 0x7
+ NFTA_PAYLOAD_CSUM_FLAGS = 0x8
+ NFT_EXTHDR_F_PRESENT = 0x1
+ NFT_EXTHDR_OP_IPV6 = 0x0
+ NFT_EXTHDR_OP_TCPOPT = 0x1
+ NFTA_EXTHDR_UNSPEC = 0x0
+ NFTA_EXTHDR_DREG = 0x1
+ NFTA_EXTHDR_TYPE = 0x2
+ NFTA_EXTHDR_OFFSET = 0x3
+ NFTA_EXTHDR_LEN = 0x4
+ NFTA_EXTHDR_FLAGS = 0x5
+ NFTA_EXTHDR_OP = 0x6
+ NFTA_EXTHDR_SREG = 0x7
+ NFT_META_LEN = 0x0
+ NFT_META_PROTOCOL = 0x1
+ NFT_META_PRIORITY = 0x2
+ NFT_META_MARK = 0x3
+ NFT_META_IIF = 0x4
+ NFT_META_OIF = 0x5
+ NFT_META_IIFNAME = 0x6
+ NFT_META_OIFNAME = 0x7
+ NFT_META_IIFTYPE = 0x8
+ NFT_META_OIFTYPE = 0x9
+ NFT_META_SKUID = 0xa
+ NFT_META_SKGID = 0xb
+ NFT_META_NFTRACE = 0xc
+ NFT_META_RTCLASSID = 0xd
+ NFT_META_SECMARK = 0xe
+ NFT_META_NFPROTO = 0xf
+ NFT_META_L4PROTO = 0x10
+ NFT_META_BRI_IIFNAME = 0x11
+ NFT_META_BRI_OIFNAME = 0x12
+ NFT_META_PKTTYPE = 0x13
+ NFT_META_CPU = 0x14
+ NFT_META_IIFGROUP = 0x15
+ NFT_META_OIFGROUP = 0x16
+ NFT_META_CGROUP = 0x17
+ NFT_META_PRANDOM = 0x18
+ NFT_RT_CLASSID = 0x0
+ NFT_RT_NEXTHOP4 = 0x1
+ NFT_RT_NEXTHOP6 = 0x2
+ NFT_RT_TCPMSS = 0x3
+ NFT_HASH_JENKINS = 0x0
+ NFT_HASH_SYM = 0x1
+ NFTA_HASH_UNSPEC = 0x0
+ NFTA_HASH_SREG = 0x1
+ NFTA_HASH_DREG = 0x2
+ NFTA_HASH_LEN = 0x3
+ NFTA_HASH_MODULUS = 0x4
+ NFTA_HASH_SEED = 0x5
+ NFTA_HASH_OFFSET = 0x6
+ NFTA_HASH_TYPE = 0x7
+ NFTA_META_UNSPEC = 0x0
+ NFTA_META_DREG = 0x1
+ NFTA_META_KEY = 0x2
+ NFTA_META_SREG = 0x3
+ NFTA_RT_UNSPEC = 0x0
+ NFTA_RT_DREG = 0x1
+ NFTA_RT_KEY = 0x2
+ NFT_CT_STATE = 0x0
+ NFT_CT_DIRECTION = 0x1
+ NFT_CT_STATUS = 0x2
+ NFT_CT_MARK = 0x3
+ NFT_CT_SECMARK = 0x4
+ NFT_CT_EXPIRATION = 0x5
+ NFT_CT_HELPER = 0x6
+ NFT_CT_L3PROTOCOL = 0x7
+ NFT_CT_SRC = 0x8
+ NFT_CT_DST = 0x9
+ NFT_CT_PROTOCOL = 0xa
+ NFT_CT_PROTO_SRC = 0xb
+ NFT_CT_PROTO_DST = 0xc
+ NFT_CT_LABELS = 0xd
+ NFT_CT_PKTS = 0xe
+ NFT_CT_BYTES = 0xf
+ NFT_CT_AVGPKT = 0x10
+ NFT_CT_ZONE = 0x11
+ NFT_CT_EVENTMASK = 0x12
+ NFTA_CT_UNSPEC = 0x0
+ NFTA_CT_DREG = 0x1
+ NFTA_CT_KEY = 0x2
+ NFTA_CT_DIRECTION = 0x3
+ NFTA_CT_SREG = 0x4
+ NFT_LIMIT_PKTS = 0x0
+ NFT_LIMIT_PKT_BYTES = 0x1
+ NFT_LIMIT_F_INV = 0x1
+ NFTA_LIMIT_UNSPEC = 0x0
+ NFTA_LIMIT_RATE = 0x1
+ NFTA_LIMIT_UNIT = 0x2
+ NFTA_LIMIT_BURST = 0x3
+ NFTA_LIMIT_TYPE = 0x4
+ NFTA_LIMIT_FLAGS = 0x5
+ NFTA_LIMIT_PAD = 0x6
+ NFTA_COUNTER_UNSPEC = 0x0
+ NFTA_COUNTER_BYTES = 0x1
+ NFTA_COUNTER_PACKETS = 0x2
+ NFTA_COUNTER_PAD = 0x3
+ NFTA_LOG_UNSPEC = 0x0
+ NFTA_LOG_GROUP = 0x1
+ NFTA_LOG_PREFIX = 0x2
+ NFTA_LOG_SNAPLEN = 0x3
+ NFTA_LOG_QTHRESHOLD = 0x4
+ NFTA_LOG_LEVEL = 0x5
+ NFTA_LOG_FLAGS = 0x6
+ NFTA_QUEUE_UNSPEC = 0x0
+ NFTA_QUEUE_NUM = 0x1
+ NFTA_QUEUE_TOTAL = 0x2
+ NFTA_QUEUE_FLAGS = 0x3
+ NFTA_QUEUE_SREG_QNUM = 0x4
+ NFT_QUOTA_F_INV = 0x1
+ NFT_QUOTA_F_DEPLETED = 0x2
+ NFTA_QUOTA_UNSPEC = 0x0
+ NFTA_QUOTA_BYTES = 0x1
+ NFTA_QUOTA_FLAGS = 0x2
+ NFTA_QUOTA_PAD = 0x3
+ NFTA_QUOTA_CONSUMED = 0x4
+ NFT_REJECT_ICMP_UNREACH = 0x0
+ NFT_REJECT_TCP_RST = 0x1
+ NFT_REJECT_ICMPX_UNREACH = 0x2
+ NFT_REJECT_ICMPX_NO_ROUTE = 0x0
+ NFT_REJECT_ICMPX_PORT_UNREACH = 0x1
+ NFT_REJECT_ICMPX_HOST_UNREACH = 0x2
+ NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3
+ NFTA_REJECT_UNSPEC = 0x0
+ NFTA_REJECT_TYPE = 0x1
+ NFTA_REJECT_ICMP_CODE = 0x2
+ NFT_NAT_SNAT = 0x0
+ NFT_NAT_DNAT = 0x1
+ NFTA_NAT_UNSPEC = 0x0
+ NFTA_NAT_TYPE = 0x1
+ NFTA_NAT_FAMILY = 0x2
+ NFTA_NAT_REG_ADDR_MIN = 0x3
+ NFTA_NAT_REG_ADDR_MAX = 0x4
+ NFTA_NAT_REG_PROTO_MIN = 0x5
+ NFTA_NAT_REG_PROTO_MAX = 0x6
+ NFTA_NAT_FLAGS = 0x7
+ NFTA_MASQ_UNSPEC = 0x0
+ NFTA_MASQ_FLAGS = 0x1
+ NFTA_MASQ_REG_PROTO_MIN = 0x2
+ NFTA_MASQ_REG_PROTO_MAX = 0x3
+ NFTA_REDIR_UNSPEC = 0x0
+ NFTA_REDIR_REG_PROTO_MIN = 0x1
+ NFTA_REDIR_REG_PROTO_MAX = 0x2
+ NFTA_REDIR_FLAGS = 0x3
+ NFTA_DUP_UNSPEC = 0x0
+ NFTA_DUP_SREG_ADDR = 0x1
+ NFTA_DUP_SREG_DEV = 0x2
+ NFTA_FWD_UNSPEC = 0x0
+ NFTA_FWD_SREG_DEV = 0x1
+ NFTA_OBJREF_UNSPEC = 0x0
+ NFTA_OBJREF_IMM_TYPE = 0x1
+ NFTA_OBJREF_IMM_NAME = 0x2
+ NFTA_OBJREF_SET_SREG = 0x3
+ NFTA_OBJREF_SET_NAME = 0x4
+ NFTA_OBJREF_SET_ID = 0x5
+ NFTA_GEN_UNSPEC = 0x0
+ NFTA_GEN_ID = 0x1
+ NFTA_GEN_PROC_PID = 0x2
+ NFTA_GEN_PROC_NAME = 0x3
+ NFTA_FIB_UNSPEC = 0x0
+ NFTA_FIB_DREG = 0x1
+ NFTA_FIB_RESULT = 0x2
+ NFTA_FIB_FLAGS = 0x3
+ NFT_FIB_RESULT_UNSPEC = 0x0
+ NFT_FIB_RESULT_OIF = 0x1
+ NFT_FIB_RESULT_OIFNAME = 0x2
+ NFT_FIB_RESULT_ADDRTYPE = 0x3
+ NFTA_FIB_F_SADDR = 0x1
+ NFTA_FIB_F_DADDR = 0x2
+ NFTA_FIB_F_MARK = 0x4
+ NFTA_FIB_F_IIF = 0x8
+ NFTA_FIB_F_OIF = 0x10
+ NFTA_FIB_F_PRESENT = 0x20
+ NFTA_CT_HELPER_UNSPEC = 0x0
+ NFTA_CT_HELPER_NAME = 0x1
+ NFTA_CT_HELPER_L3PROTO = 0x2
+ NFTA_CT_HELPER_L4PROTO = 0x3
+ NFTA_OBJ_UNSPEC = 0x0
+ NFTA_OBJ_TABLE = 0x1
+ NFTA_OBJ_NAME = 0x2
+ NFTA_OBJ_TYPE = 0x3
+ NFTA_OBJ_DATA = 0x4
+ NFTA_OBJ_USE = 0x5
+ NFTA_TRACE_UNSPEC = 0x0
+ NFTA_TRACE_TABLE = 0x1
+ NFTA_TRACE_CHAIN = 0x2
+ NFTA_TRACE_RULE_HANDLE = 0x3
+ NFTA_TRACE_TYPE = 0x4
+ NFTA_TRACE_VERDICT = 0x5
+ NFTA_TRACE_ID = 0x6
+ NFTA_TRACE_LL_HEADER = 0x7
+ NFTA_TRACE_NETWORK_HEADER = 0x8
+ NFTA_TRACE_TRANSPORT_HEADER = 0x9
+ NFTA_TRACE_IIF = 0xa
+ NFTA_TRACE_IIFTYPE = 0xb
+ NFTA_TRACE_OIF = 0xc
+ NFTA_TRACE_OIFTYPE = 0xd
+ NFTA_TRACE_MARK = 0xe
+ NFTA_TRACE_NFPROTO = 0xf
+ NFTA_TRACE_POLICY = 0x10
+ NFTA_TRACE_PAD = 0x11
+ NFT_TRACETYPE_UNSPEC = 0x0
+ NFT_TRACETYPE_POLICY = 0x1
+ NFT_TRACETYPE_RETURN = 0x2
+ NFT_TRACETYPE_RULE = 0x3
+ NFTA_NG_UNSPEC = 0x0
+ NFTA_NG_DREG = 0x1
+ NFTA_NG_MODULUS = 0x2
+ NFTA_NG_TYPE = 0x3
+ NFTA_NG_OFFSET = 0x4
+ NFT_NG_INCREMENTAL = 0x0
+ NFT_NG_RANDOM = 0x1
+)
+
+type RTCTime struct {
+ Sec int32
+ Min int32
+ Hour int32
+ Mday int32
+ Mon int32
+ Year int32
+ Wday int32
+ Yday int32
+ Isdst int32
+}
+
+type RTCWkAlrm struct {
+ Enabled uint8
+ Pending uint8
+ Time RTCTime
+}
+
+type RTCPLLInfo struct {
+ Ctrl int32
+ Value int32
+ Max int32
+ Min int32
+ Posmult int32
+ Negmult int32
+ Clock int64
+}
+
+type BlkpgIoctlArg struct {
+ Op int32
+ Flags int32
+ Datalen int32
+ Data *byte
+}
+
+type BlkpgPartition struct {
+ Start int64
+ Length int64
+ Pno int32
+ Devname [64]uint8
+ Volname [64]uint8
+ _ [4]byte
+}
+
+const (
+ BLKPG = 0x20001269
+ BLKPG_ADD_PARTITION = 0x1
+ BLKPG_DEL_PARTITION = 0x2
+ BLKPG_RESIZE_PARTITION = 0x3
+)
+
+const (
+ NETNSA_NONE = 0x0
+ NETNSA_NSID = 0x1
+ NETNSA_PID = 0x2
+ NETNSA_FD = 0x3
+)
+
+type XDPRingOffset struct {
+ Producer uint64
+ Consumer uint64
+ Desc uint64
+}
+
+type XDPMmapOffsets struct {
+ Rx XDPRingOffset
+ Tx XDPRingOffset
+ Fr XDPRingOffset
+ Cr XDPRingOffset
+}
+
+type XDPUmemReg struct {
+ Addr uint64
+ Len uint64
+ Size uint32
+ Headroom uint32
+}
+
+type XDPStatistics struct {
+ Rx_dropped uint64
+ Rx_invalid_descs uint64
+ Tx_invalid_descs uint64
+}
+
+type XDPDesc struct {
+ Addr uint64
+ Len uint32
+ Options uint32
+}
+
+const (
+ NCSI_CMD_UNSPEC = 0x0
+ NCSI_CMD_PKG_INFO = 0x1
+ NCSI_CMD_SET_INTERFACE = 0x2
+ NCSI_CMD_CLEAR_INTERFACE = 0x3
+ NCSI_ATTR_UNSPEC = 0x0
+ NCSI_ATTR_IFINDEX = 0x1
+ NCSI_ATTR_PACKAGE_LIST = 0x2
+ NCSI_ATTR_PACKAGE_ID = 0x3
+ NCSI_ATTR_CHANNEL_ID = 0x4
+ NCSI_PKG_ATTR_UNSPEC = 0x0
+ NCSI_PKG_ATTR = 0x1
+ NCSI_PKG_ATTR_ID = 0x2
+ NCSI_PKG_ATTR_FORCED = 0x3
+ NCSI_PKG_ATTR_CHANNEL_LIST = 0x4
+ NCSI_CHANNEL_ATTR_UNSPEC = 0x0
+ NCSI_CHANNEL_ATTR = 0x1
+ NCSI_CHANNEL_ATTR_ID = 0x2
+ NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3
+ NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4
+ NCSI_CHANNEL_ATTR_VERSION_STR = 0x5
+ NCSI_CHANNEL_ATTR_LINK_STATE = 0x6
+ NCSI_CHANNEL_ATTR_ACTIVE = 0x7
+ NCSI_CHANNEL_ATTR_FORCED = 0x8
+ NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9
+ NCSI_CHANNEL_ATTR_VLAN_ID = 0xa
+)
+
+const (
+ SOF_TIMESTAMPING_TX_HARDWARE = 0x1
+ SOF_TIMESTAMPING_TX_SOFTWARE = 0x2
+ SOF_TIMESTAMPING_RX_HARDWARE = 0x4
+ SOF_TIMESTAMPING_RX_SOFTWARE = 0x8
+ SOF_TIMESTAMPING_SOFTWARE = 0x10
+ SOF_TIMESTAMPING_SYS_HARDWARE = 0x20
+ SOF_TIMESTAMPING_RAW_HARDWARE = 0x40
+ SOF_TIMESTAMPING_OPT_ID = 0x80
+ SOF_TIMESTAMPING_TX_SCHED = 0x100
+ SOF_TIMESTAMPING_TX_ACK = 0x200
+ SOF_TIMESTAMPING_OPT_CMSG = 0x400
+ SOF_TIMESTAMPING_OPT_TSONLY = 0x800
+ SOF_TIMESTAMPING_OPT_STATS = 0x1000
+ SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000
+ SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000
+
+ SOF_TIMESTAMPING_LAST = 0x4000
+ SOF_TIMESTAMPING_MASK = 0x7fff
+)
diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go
index 4b86fb2b3..2dae0c17a 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x4
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x4
- sizeofLongLong = 0x8
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
)
type (
@@ -402,6 +402,13 @@ type Winsize struct {
Ypixel uint16
}
+type Ptmget struct {
+ Cfd int32
+ Sfd int32
+ Cn [1024]byte
+ Sn [1024]byte
+}
+
const (
AT_FDCWD = -0x64
AT_SYMLINK_NOFOLLOW = 0x200
@@ -446,3 +453,13 @@ type Utsname struct {
Version [256]byte
Machine [256]byte
}
+
+const SizeofClockinfo = 0x14
+
+type Clockinfo struct {
+ Hz int32
+ Tick int32
+ Tickadj int32
+ Stathz int32
+ Profhz int32
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go
index 9048a509d..1f0e76c0c 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
)
type (
@@ -409,6 +409,13 @@ type Winsize struct {
Ypixel uint16
}
+type Ptmget struct {
+ Cfd int32
+ Sfd int32
+ Cn [1024]byte
+ Sn [1024]byte
+}
+
const (
AT_FDCWD = -0x64
AT_SYMLINK_NOFOLLOW = 0x200
@@ -453,3 +460,13 @@ type Utsname struct {
Version [256]byte
Machine [256]byte
}
+
+const SizeofClockinfo = 0x14
+
+type Clockinfo struct {
+ Hz int32
+ Tick int32
+ Tickadj int32
+ Stathz int32
+ Profhz int32
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go
index 00525e7b0..53f2159c7 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x4
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x4
- sizeofLongLong = 0x8
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
)
type (
@@ -407,6 +407,13 @@ type Winsize struct {
Ypixel uint16
}
+type Ptmget struct {
+ Cfd int32
+ Sfd int32
+ Cn [1024]byte
+ Sn [1024]byte
+}
+
const (
AT_FDCWD = -0x64
AT_SYMLINK_NOFOLLOW = 0x200
@@ -451,3 +458,13 @@ type Utsname struct {
Version [256]byte
Machine [256]byte
}
+
+const SizeofClockinfo = 0x14
+
+type Clockinfo struct {
+ Hz int32
+ Tick int32
+ Tickadj int32
+ Stathz int32
+ Profhz int32
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
index d5a2d75da..8b37d8399 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x4
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x4
- sizeofLongLong = 0x8
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
)
type (
@@ -56,23 +56,6 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
Mode uint32
Dev int32
@@ -475,6 +458,8 @@ const (
POLLWRNORM = 0x4
)
+type Sigset_t uint32
+
type Utsname struct {
Sysname [256]byte
Nodename [256]byte
@@ -482,3 +467,94 @@ type Utsname struct {
Version [256]byte
Machine [256]byte
}
+
+const SizeofUvmexp = 0x158
+
+type Uvmexp struct {
+ Pagesize int32
+ Pagemask int32
+ Pageshift int32
+ Npages int32
+ Free int32
+ Active int32
+ Inactive int32
+ Paging int32
+ Wired int32
+ Zeropages int32
+ Reserve_pagedaemon int32
+ Reserve_kernel int32
+ Anonpages int32
+ Vnodepages int32
+ Vtextpages int32
+ Freemin int32
+ Freetarg int32
+ Inactarg int32
+ Wiredmax int32
+ Anonmin int32
+ Vtextmin int32
+ Vnodemin int32
+ Anonminpct int32
+ Vtextminpct int32
+ Vnodeminpct int32
+ Nswapdev int32
+ Swpages int32
+ Swpginuse int32
+ Swpgonly int32
+ Nswget int32
+ Nanon int32
+ Nanonneeded int32
+ Nfreeanon int32
+ Faults int32
+ Traps int32
+ Intrs int32
+ Swtch int32
+ Softs int32
+ Syscalls int32
+ Pageins int32
+ Obsolete_swapins int32
+ Obsolete_swapouts int32
+ Pgswapin int32
+ Pgswapout int32
+ Forks int32
+ Forks_ppwait int32
+ Forks_sharevm int32
+ Pga_zerohit int32
+ Pga_zeromiss int32
+ Zeroaborts int32
+ Fltnoram int32
+ Fltnoanon int32
+ Fltnoamap int32
+ Fltpgwait int32
+ Fltpgrele int32
+ Fltrelck int32
+ Fltrelckok int32
+ Fltanget int32
+ Fltanretry int32
+ Fltamcopy int32
+ Fltnamap int32
+ Fltnomap int32
+ Fltlget int32
+ Fltget int32
+ Flt_anon int32
+ Flt_acow int32
+ Flt_obj int32
+ Flt_prcopy int32
+ Flt_przero int32
+ Pdwoke int32
+ Pdrevs int32
+ Pdswout int32
+ Pdfreed int32
+ Pdscans int32
+ Pdanscan int32
+ Pdobscan int32
+ Pdreact int32
+ Pdbusy int32
+ Pdpageouts int32
+ Pdpending int32
+ Pddeact int32
+ Pdreanon int32
+ Pdrevnode int32
+ Pdrevtext int32
+ Fpswtch int32
+ Kmapent int32
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
index 5a9c81848..6efea4635 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
)
type (
@@ -56,23 +56,6 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
Mode uint32
Dev int32
@@ -475,6 +458,8 @@ const (
POLLWRNORM = 0x4
)
+type Sigset_t uint32
+
type Utsname struct {
Sysname [256]byte
Nodename [256]byte
@@ -482,3 +467,94 @@ type Utsname struct {
Version [256]byte
Machine [256]byte
}
+
+const SizeofUvmexp = 0x158
+
+type Uvmexp struct {
+ Pagesize int32
+ Pagemask int32
+ Pageshift int32
+ Npages int32
+ Free int32
+ Active int32
+ Inactive int32
+ Paging int32
+ Wired int32
+ Zeropages int32
+ Reserve_pagedaemon int32
+ Reserve_kernel int32
+ Anonpages int32
+ Vnodepages int32
+ Vtextpages int32
+ Freemin int32
+ Freetarg int32
+ Inactarg int32
+ Wiredmax int32
+ Anonmin int32
+ Vtextmin int32
+ Vnodemin int32
+ Anonminpct int32
+ Vtextminpct int32
+ Vnodeminpct int32
+ Nswapdev int32
+ Swpages int32
+ Swpginuse int32
+ Swpgonly int32
+ Nswget int32
+ Nanon int32
+ Nanonneeded int32
+ Nfreeanon int32
+ Faults int32
+ Traps int32
+ Intrs int32
+ Swtch int32
+ Softs int32
+ Syscalls int32
+ Pageins int32
+ Obsolete_swapins int32
+ Obsolete_swapouts int32
+ Pgswapin int32
+ Pgswapout int32
+ Forks int32
+ Forks_ppwait int32
+ Forks_sharevm int32
+ Pga_zerohit int32
+ Pga_zeromiss int32
+ Zeroaborts int32
+ Fltnoram int32
+ Fltnoanon int32
+ Fltnoamap int32
+ Fltpgwait int32
+ Fltpgrele int32
+ Fltrelck int32
+ Fltrelckok int32
+ Fltanget int32
+ Fltanretry int32
+ Fltamcopy int32
+ Fltnamap int32
+ Fltnomap int32
+ Fltlget int32
+ Fltget int32
+ Flt_anon int32
+ Flt_acow int32
+ Flt_obj int32
+ Flt_prcopy int32
+ Flt_przero int32
+ Pdwoke int32
+ Pdrevs int32
+ Pdswout int32
+ Pdfreed int32
+ Pdscans int32
+ Pdanscan int32
+ Pdobscan int32
+ Pdreact int32
+ Pdbusy int32
+ Pdpageouts int32
+ Pdpending int32
+ Pddeact int32
+ Pdreanon int32
+ Pdrevnode int32
+ Pdrevtext int32
+ Fpswtch int32
+ Kmapent int32
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
index e35b13b6f..510efc3ea 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go
@@ -1,4 +1,4 @@
-// cgo -godefs types_openbsd.go | go run mkpost.go
+// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go
// Code generated by the command above; see README.md. DO NOT EDIT.
// +build arm,openbsd
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x4
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x4
- sizeofLongLong = 0x8
+ SizeofPtr = 0x4
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x4
+ SizeofLongLong = 0x8
)
type (
@@ -23,11 +23,13 @@ type (
type Timespec struct {
Sec int64
Nsec int32
+ _ [4]byte
}
type Timeval struct {
Sec int64
Usec int32
+ _ [4]byte
}
type Rusage struct {
@@ -56,46 +58,31 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
- Mode uint32
- Dev int32
- Ino uint64
- Nlink uint32
- Uid uint32
- Gid uint32
- Rdev int32
- Atim Timespec
- Mtim Timespec
- Ctim Timespec
- Size int64
- Blocks int64
- Blksize int32
- Flags uint32
- Gen uint32
- X__st_birthtim Timespec
+ Mode uint32
+ Dev int32
+ Ino uint64
+ Nlink uint32
+ Uid uint32
+ Gid uint32
+ Rdev int32
+ Atim Timespec
+ Mtim Timespec
+ Ctim Timespec
+ Size int64
+ Blocks int64
+ Blksize int32
+ Flags uint32
+ Gen uint32
+ _ [4]byte
+ _ Timespec
}
type Statfs_t struct {
F_flags uint32
F_bsize uint32
F_iosize uint32
+ _ [4]byte
F_blocks uint64
F_bfree uint64
F_bavail int64
@@ -110,11 +97,11 @@ type Statfs_t struct {
F_namemax uint32
F_owner uint32
F_ctime uint64
- F_fstypename [16]uint8
- F_mntonname [90]uint8
- F_mntfromname [90]uint8
- F_mntfromspec [90]uint8
- Pad_cgo_0 [2]byte
+ F_fstypename [16]int8
+ F_mntonname [90]int8
+ F_mntfromname [90]int8
+ F_mntfromspec [90]int8
+ _ [2]byte
Mount_info [160]byte
}
@@ -127,13 +114,13 @@ type Flock_t struct {
}
type Dirent struct {
- Fileno uint64
- Off int64
- Reclen uint16
- Type uint8
- Namlen uint8
- X__d_padding [4]uint8
- Name [256]uint8
+ Fileno uint64
+ Off int64
+ Reclen uint16
+ Type uint8
+ Namlen uint8
+ _ [4]uint8
+ Name [256]int8
}
type Fsid struct {
@@ -268,8 +255,10 @@ type Kevent_t struct {
Filter int16
Flags uint16
Fflags uint32
+ _ [4]byte
Data int64
Udata *byte
+ _ [4]byte
}
type FdSet struct {
@@ -277,8 +266,8 @@ type FdSet struct {
}
const (
- SizeofIfMsghdr = 0x98
- SizeofIfData = 0x80
+ SizeofIfMsghdr = 0xa8
+ SizeofIfData = 0x90
SizeofIfaMsghdr = 0x18
SizeofIfAnnounceMsghdr = 0x1a
SizeofRtMsghdr = 0x60
@@ -307,7 +296,7 @@ type IfData struct {
Link_state uint8
Mtu uint32
Metric uint32
- Pad uint32
+ Rdomain uint32
Baudrate uint64
Ipackets uint64
Ierrors uint64
@@ -319,8 +308,10 @@ type IfData struct {
Imcasts uint64
Omcasts uint64
Iqdrops uint64
+ Oqdrops uint64
Noproto uint64
Capabilities uint32
+ _ [4]byte
Lastchange Timeval
}
@@ -345,7 +336,7 @@ type IfAnnounceMsghdr struct {
Hdrlen uint16
Index uint16
What uint16
- Name [16]uint8
+ Name [16]int8
}
type RtMsghdr struct {
@@ -415,11 +406,11 @@ type BpfInsn struct {
}
type BpfHdr struct {
- Tstamp BpfTimeval
- Caplen uint32
- Datalen uint32
- Hdrlen uint16
- Pad_cgo_0 [2]byte
+ Tstamp BpfTimeval
+ Caplen uint32
+ Datalen uint32
+ Hdrlen uint16
+ _ [2]byte
}
type BpfTimeval struct {
@@ -468,6 +459,8 @@ const (
POLLWRNORM = 0x4
)
+type Sigset_t uint32
+
type Utsname struct {
Sysname [256]byte
Nodename [256]byte
@@ -475,3 +468,94 @@ type Utsname struct {
Version [256]byte
Machine [256]byte
}
+
+const SizeofUvmexp = 0x158
+
+type Uvmexp struct {
+ Pagesize int32
+ Pagemask int32
+ Pageshift int32
+ Npages int32
+ Free int32
+ Active int32
+ Inactive int32
+ Paging int32
+ Wired int32
+ Zeropages int32
+ Reserve_pagedaemon int32
+ Reserve_kernel int32
+ Unused01 int32
+ Vnodepages int32
+ Vtextpages int32
+ Freemin int32
+ Freetarg int32
+ Inactarg int32
+ Wiredmax int32
+ Anonmin int32
+ Vtextmin int32
+ Vnodemin int32
+ Anonminpct int32
+ Vtextminpct int32
+ Vnodeminpct int32
+ Nswapdev int32
+ Swpages int32
+ Swpginuse int32
+ Swpgonly int32
+ Nswget int32
+ Nanon int32
+ Unused05 int32
+ Unused06 int32
+ Faults int32
+ Traps int32
+ Intrs int32
+ Swtch int32
+ Softs int32
+ Syscalls int32
+ Pageins int32
+ Unused07 int32
+ Unused08 int32
+ Pgswapin int32
+ Pgswapout int32
+ Forks int32
+ Forks_ppwait int32
+ Forks_sharevm int32
+ Pga_zerohit int32
+ Pga_zeromiss int32
+ Unused09 int32
+ Fltnoram int32
+ Fltnoanon int32
+ Fltnoamap int32
+ Fltpgwait int32
+ Fltpgrele int32
+ Fltrelck int32
+ Fltrelckok int32
+ Fltanget int32
+ Fltanretry int32
+ Fltamcopy int32
+ Fltnamap int32
+ Fltnomap int32
+ Fltlget int32
+ Fltget int32
+ Flt_anon int32
+ Flt_acow int32
+ Flt_obj int32
+ Flt_prcopy int32
+ Flt_przero int32
+ Pdwoke int32
+ Pdrevs int32
+ Pdswout int32
+ Pdfreed int32
+ Pdscans int32
+ Pdanscan int32
+ Pdobscan int32
+ Pdreact int32
+ Pdbusy int32
+ Pdpageouts int32
+ Pdpending int32
+ Pddeact int32
+ Unused11 int32
+ Unused12 int32
+ Unused13 int32
+ Fpswtch int32
+ Kmapent int32
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
index 2248598d0..8531a190f 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go
@@ -6,11 +6,11 @@
package unix
const (
- sizeofPtr = 0x8
- sizeofShort = 0x2
- sizeofInt = 0x4
- sizeofLong = 0x8
- sizeofLongLong = 0x8
+ SizeofPtr = 0x8
+ SizeofShort = 0x2
+ SizeofInt = 0x4
+ SizeofLong = 0x8
+ SizeofLongLong = 0x8
PathMax = 0x400
MaxHostNameLen = 0x100
)
@@ -75,23 +75,6 @@ type Rlimit struct {
type _Gid_t uint32
-const (
- S_IFMT = 0xf000
- S_IFIFO = 0x1000
- S_IFCHR = 0x2000
- S_IFDIR = 0x4000
- S_IFBLK = 0x6000
- S_IFREG = 0x8000
- S_IFLNK = 0xa000
- S_IFSOCK = 0xc000
- S_ISUID = 0x800
- S_ISGID = 0x400
- S_ISVTX = 0x200
- S_IRUSR = 0x100
- S_IWUSR = 0x80
- S_IXUSR = 0x40
-)
-
type Stat_t struct {
Dev uint64
Ino uint64
diff --git a/vendor/golang.org/x/sys/windows/aliases.go b/vendor/golang.org/x/sys/windows/aliases.go
new file mode 100644
index 000000000..af3af60db
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/aliases.go
@@ -0,0 +1,13 @@
+// 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.
+
+// +build windows
+// +build go1.9
+
+package windows
+
+import "syscall"
+
+type Errno = syscall.Errno
+type SysProcAttr = syscall.SysProcAttr
diff --git a/vendor/golang.org/x/sys/windows/asm_windows_arm.s b/vendor/golang.org/x/sys/windows/asm_windows_arm.s
new file mode 100644
index 000000000..55d8b91a2
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/asm_windows_arm.s
@@ -0,0 +1,11 @@
+// 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.
+
+#include "textflag.h"
+
+TEXT ·getprocaddress(SB),NOSPLIT,$0
+ B syscall·getprocaddress(SB)
+
+TEXT ·loadlibrary(SB),NOSPLIT,$0
+ B syscall·loadlibrary(SB)
diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go
index 24aa90bbb..62fc31b40 100644
--- a/vendor/golang.org/x/sys/windows/service.go
+++ b/vendor/golang.org/x/sys/windows/service.go
@@ -43,6 +43,11 @@ const (
SC_STATUS_PROCESS_INFO = 0
+ SC_ACTION_NONE = 0
+ SC_ACTION_RESTART = 1
+ SC_ACTION_REBOOT = 2
+ SC_ACTION_RUN_COMMAND = 3
+
SERVICE_STOPPED = 1
SERVICE_START_PENDING = 2
SERVICE_STOP_PENDING = 3
@@ -148,6 +153,19 @@ type ENUM_SERVICE_STATUS_PROCESS struct {
ServiceStatusProcess SERVICE_STATUS_PROCESS
}
+type SERVICE_FAILURE_ACTIONS struct {
+ ResetPeriod uint32
+ RebootMsg *uint16
+ Command *uint16
+ ActionsCount uint32
+ Actions *SC_ACTION
+}
+
+type SC_ACTION struct {
+ Type uint32
+ Delay uint32
+}
+
//sys CloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle
//sys CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW
//sys OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW
diff --git a/vendor/golang.org/x/sys/windows/svc/event.go b/vendor/golang.org/x/sys/windows/svc/event.go
new file mode 100644
index 000000000..0508e2288
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/svc/event.go
@@ -0,0 +1,48 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build windows
+
+package svc
+
+import (
+ "errors"
+
+ "golang.org/x/sys/windows"
+)
+
+// event represents auto-reset, initially non-signaled Windows event.
+// It is used to communicate between go and asm parts of this package.
+type event struct {
+ h windows.Handle
+}
+
+func newEvent() (*event, error) {
+ h, err := windows.CreateEvent(nil, 0, 0, nil)
+ if err != nil {
+ return nil, err
+ }
+ return &event{h: h}, nil
+}
+
+func (e *event) Close() error {
+ return windows.CloseHandle(e.h)
+}
+
+func (e *event) Set() error {
+ return windows.SetEvent(e.h)
+}
+
+func (e *event) Wait() error {
+ s, err := windows.WaitForSingleObject(e.h, windows.INFINITE)
+ switch s {
+ case windows.WAIT_OBJECT_0:
+ break
+ case windows.WAIT_FAILED:
+ return err
+ default:
+ return errors.New("unexpected result from WaitForSingleObject")
+ }
+ return nil
+}
diff --git a/vendor/golang.org/x/sys/windows/svc/go12.c b/vendor/golang.org/x/sys/windows/svc/go12.c
new file mode 100644
index 000000000..6f1be1fa3
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/svc/go12.c
@@ -0,0 +1,24 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build windows
+// +build !go1.3
+
+// copied from pkg/runtime
+typedef unsigned int uint32;
+typedef unsigned long long int uint64;
+#ifdef _64BIT
+typedef uint64 uintptr;
+#else
+typedef uint32 uintptr;
+#endif
+
+// from sys_386.s or sys_amd64.s
+void ·servicemain(void);
+
+void
+·getServiceMain(uintptr *r)
+{
+ *r = (uintptr)·servicemain;
+}
diff --git a/vendor/golang.org/x/sys/windows/svc/go12.go b/vendor/golang.org/x/sys/windows/svc/go12.go
new file mode 100644
index 000000000..cd8b913c9
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/svc/go12.go
@@ -0,0 +1,11 @@
+// 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.
+
+// +build windows
+// +build !go1.3
+
+package svc
+
+// from go12.c
+func getServiceMain(r *uintptr)
diff --git a/vendor/golang.org/x/sys/windows/svc/go13.go b/vendor/golang.org/x/sys/windows/svc/go13.go
new file mode 100644
index 000000000..9d7f3cec5
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/svc/go13.go
@@ -0,0 +1,31 @@
+// 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.
+
+// +build windows
+// +build go1.3
+
+package svc
+
+import "unsafe"
+
+const ptrSize = 4 << (^uintptr(0) >> 63) // unsafe.Sizeof(uintptr(0)) but an ideal const
+
+// Should be a built-in for unsafe.Pointer?
+func add(p unsafe.Pointer, x uintptr) unsafe.Pointer {
+ return unsafe.Pointer(uintptr(p) + x)
+}
+
+// funcPC returns the entry PC of the function f.
+// It assumes that f is a func value. Otherwise the behavior is undefined.
+func funcPC(f interface{}) uintptr {
+ return **(**uintptr)(add(unsafe.Pointer(&f), ptrSize))
+}
+
+// from sys_386.s and sys_amd64.s
+func servicectlhandler(ctl uint32) uintptr
+func servicemain(argc uint32, argv **uint16)
+
+func getServiceMain(r *uintptr) {
+ *r = funcPC(servicemain)
+}
diff --git a/vendor/golang.org/x/sys/windows/svc/security.go b/vendor/golang.org/x/sys/windows/svc/security.go
new file mode 100644
index 000000000..6fbc9236e
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/svc/security.go
@@ -0,0 +1,62 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build windows
+
+package svc
+
+import (
+ "unsafe"
+
+ "golang.org/x/sys/windows"
+)
+
+func allocSid(subAuth0 uint32) (*windows.SID, error) {
+ var sid *windows.SID
+ err := windows.AllocateAndInitializeSid(&windows.SECURITY_NT_AUTHORITY,
+ 1, subAuth0, 0, 0, 0, 0, 0, 0, 0, &sid)
+ if err != nil {
+ return nil, err
+ }
+ return sid, nil
+}
+
+// IsAnInteractiveSession determines if calling process is running interactively.
+// It queries the process token for membership in the Interactive group.
+// http://stackoverflow.com/questions/2668851/how-do-i-detect-that-my-application-is-running-as-service-or-in-an-interactive-s
+func IsAnInteractiveSession() (bool, error) {
+ interSid, err := allocSid(windows.SECURITY_INTERACTIVE_RID)
+ if err != nil {
+ return false, err
+ }
+ defer windows.FreeSid(interSid)
+
+ serviceSid, err := allocSid(windows.SECURITY_SERVICE_RID)
+ if err != nil {
+ return false, err
+ }
+ defer windows.FreeSid(serviceSid)
+
+ t, err := windows.OpenCurrentProcessToken()
+ if err != nil {
+ return false, err
+ }
+ defer t.Close()
+
+ gs, err := t.GetTokenGroups()
+ if err != nil {
+ return false, err
+ }
+ p := unsafe.Pointer(&gs.Groups[0])
+ groups := (*[2 << 20]windows.SIDAndAttributes)(p)[:gs.GroupCount]
+ for _, g := range groups {
+ if windows.EqualSid(g.Sid, interSid) {
+ return true, nil
+ }
+ if windows.EqualSid(g.Sid, serviceSid) {
+ return false, nil
+ }
+ }
+ return false, nil
+}
diff --git a/vendor/golang.org/x/sys/windows/svc/service.go b/vendor/golang.org/x/sys/windows/svc/service.go
new file mode 100644
index 000000000..cda26b54b
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/svc/service.go
@@ -0,0 +1,363 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build windows
+
+// Package svc provides everything required to build Windows service.
+//
+package svc
+
+import (
+ "errors"
+ "runtime"
+ "syscall"
+ "unsafe"
+
+ "golang.org/x/sys/windows"
+)
+
+// State describes service execution state (Stopped, Running and so on).
+type State uint32
+
+const (
+ Stopped = State(windows.SERVICE_STOPPED)
+ StartPending = State(windows.SERVICE_START_PENDING)
+ StopPending = State(windows.SERVICE_STOP_PENDING)
+ Running = State(windows.SERVICE_RUNNING)
+ ContinuePending = State(windows.SERVICE_CONTINUE_PENDING)
+ PausePending = State(windows.SERVICE_PAUSE_PENDING)
+ Paused = State(windows.SERVICE_PAUSED)
+)
+
+// Cmd represents service state change request. It is sent to a service
+// by the service manager, and should be actioned upon by the service.
+type Cmd uint32
+
+const (
+ Stop = Cmd(windows.SERVICE_CONTROL_STOP)
+ Pause = Cmd(windows.SERVICE_CONTROL_PAUSE)
+ Continue = Cmd(windows.SERVICE_CONTROL_CONTINUE)
+ Interrogate = Cmd(windows.SERVICE_CONTROL_INTERROGATE)
+ Shutdown = Cmd(windows.SERVICE_CONTROL_SHUTDOWN)
+ ParamChange = Cmd(windows.SERVICE_CONTROL_PARAMCHANGE)
+ NetBindAdd = Cmd(windows.SERVICE_CONTROL_NETBINDADD)
+ NetBindRemove = Cmd(windows.SERVICE_CONTROL_NETBINDREMOVE)
+ NetBindEnable = Cmd(windows.SERVICE_CONTROL_NETBINDENABLE)
+ NetBindDisable = Cmd(windows.SERVICE_CONTROL_NETBINDDISABLE)
+ DeviceEvent = Cmd(windows.SERVICE_CONTROL_DEVICEEVENT)
+ HardwareProfileChange = Cmd(windows.SERVICE_CONTROL_HARDWAREPROFILECHANGE)
+ PowerEvent = Cmd(windows.SERVICE_CONTROL_POWEREVENT)
+ SessionChange = Cmd(windows.SERVICE_CONTROL_SESSIONCHANGE)
+)
+
+// Accepted is used to describe commands accepted by the service.
+// Note that Interrogate is always accepted.
+type Accepted uint32
+
+const (
+ AcceptStop = Accepted(windows.SERVICE_ACCEPT_STOP)
+ AcceptShutdown = Accepted(windows.SERVICE_ACCEPT_SHUTDOWN)
+ AcceptPauseAndContinue = Accepted(windows.SERVICE_ACCEPT_PAUSE_CONTINUE)
+ AcceptParamChange = Accepted(windows.SERVICE_ACCEPT_PARAMCHANGE)
+ AcceptNetBindChange = Accepted(windows.SERVICE_ACCEPT_NETBINDCHANGE)
+ AcceptHardwareProfileChange = Accepted(windows.SERVICE_ACCEPT_HARDWAREPROFILECHANGE)
+ AcceptPowerEvent = Accepted(windows.SERVICE_ACCEPT_POWEREVENT)
+ AcceptSessionChange = Accepted(windows.SERVICE_ACCEPT_SESSIONCHANGE)
+)
+
+// Status combines State and Accepted commands to fully describe running service.
+type Status struct {
+ State State
+ Accepts Accepted
+ CheckPoint uint32 // used to report progress during a lengthy operation
+ WaitHint uint32 // estimated time required for a pending operation, in milliseconds
+}
+
+// ChangeRequest is sent to the service Handler to request service status change.
+type ChangeRequest struct {
+ Cmd Cmd
+ EventType uint32
+ EventData uintptr
+ CurrentStatus Status
+}
+
+// Handler is the interface that must be implemented to build Windows service.
+type Handler interface {
+
+ // Execute will be called by the package code at the start of
+ // the service, and the service will exit once Execute completes.
+ // Inside Execute you must read service change requests from r and
+ // act accordingly. You must keep service control manager up to date
+ // about state of your service by writing into s as required.
+ // args contains service name followed by argument strings passed
+ // to the service.
+ // You can provide service exit code in exitCode return parameter,
+ // with 0 being "no error". You can also indicate if exit code,
+ // if any, is service specific or not by using svcSpecificEC
+ // parameter.
+ Execute(args []string, r <-chan ChangeRequest, s chan<- Status) (svcSpecificEC bool, exitCode uint32)
+}
+
+var (
+ // These are used by asm code.
+ goWaitsH uintptr
+ cWaitsH uintptr
+ ssHandle uintptr
+ sName *uint16
+ sArgc uintptr
+ sArgv **uint16
+ ctlHandlerExProc uintptr
+ cSetEvent uintptr
+ cWaitForSingleObject uintptr
+ cRegisterServiceCtrlHandlerExW uintptr
+)
+
+func init() {
+ k := syscall.MustLoadDLL("kernel32.dll")
+ cSetEvent = k.MustFindProc("SetEvent").Addr()
+ cWaitForSingleObject = k.MustFindProc("WaitForSingleObject").Addr()
+ a := syscall.MustLoadDLL("advapi32.dll")
+ cRegisterServiceCtrlHandlerExW = a.MustFindProc("RegisterServiceCtrlHandlerExW").Addr()
+}
+
+// The HandlerEx prototype also has a context pointer but since we don't use
+// it at start-up time we don't have to pass it over either.
+type ctlEvent struct {
+ cmd Cmd
+ eventType uint32
+ eventData uintptr
+ errno uint32
+}
+
+// service provides access to windows service api.
+type service struct {
+ name string
+ h windows.Handle
+ cWaits *event
+ goWaits *event
+ c chan ctlEvent
+ handler Handler
+}
+
+func newService(name string, handler Handler) (*service, error) {
+ var s service
+ var err error
+ s.name = name
+ s.c = make(chan ctlEvent)
+ s.handler = handler
+ s.cWaits, err = newEvent()
+ if err != nil {
+ return nil, err
+ }
+ s.goWaits, err = newEvent()
+ if err != nil {
+ s.cWaits.Close()
+ return nil, err
+ }
+ return &s, nil
+}
+
+func (s *service) close() error {
+ s.cWaits.Close()
+ s.goWaits.Close()
+ return nil
+}
+
+type exitCode struct {
+ isSvcSpecific bool
+ errno uint32
+}
+
+func (s *service) updateStatus(status *Status, ec *exitCode) error {
+ if s.h == 0 {
+ return errors.New("updateStatus with no service status handle")
+ }
+ var t windows.SERVICE_STATUS
+ t.ServiceType = windows.SERVICE_WIN32_OWN_PROCESS
+ t.CurrentState = uint32(status.State)
+ if status.Accepts&AcceptStop != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_STOP
+ }
+ if status.Accepts&AcceptShutdown != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_SHUTDOWN
+ }
+ if status.Accepts&AcceptPauseAndContinue != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_PAUSE_CONTINUE
+ }
+ if status.Accepts&AcceptParamChange != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_PARAMCHANGE
+ }
+ if status.Accepts&AcceptNetBindChange != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_NETBINDCHANGE
+ }
+ if status.Accepts&AcceptHardwareProfileChange != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_HARDWAREPROFILECHANGE
+ }
+ if status.Accepts&AcceptPowerEvent != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_POWEREVENT
+ }
+ if status.Accepts&AcceptSessionChange != 0 {
+ t.ControlsAccepted |= windows.SERVICE_ACCEPT_SESSIONCHANGE
+ }
+ if ec.errno == 0 {
+ t.Win32ExitCode = windows.NO_ERROR
+ t.ServiceSpecificExitCode = windows.NO_ERROR
+ } else if ec.isSvcSpecific {
+ t.Win32ExitCode = uint32(windows.ERROR_SERVICE_SPECIFIC_ERROR)
+ t.ServiceSpecificExitCode = ec.errno
+ } else {
+ t.Win32ExitCode = ec.errno
+ t.ServiceSpecificExitCode = windows.NO_ERROR
+ }
+ t.CheckPoint = status.CheckPoint
+ t.WaitHint = status.WaitHint
+ return windows.SetServiceStatus(s.h, &t)
+}
+
+const (
+ sysErrSetServiceStatusFailed = uint32(syscall.APPLICATION_ERROR) + iota
+ sysErrNewThreadInCallback
+)
+
+func (s *service) run() {
+ s.goWaits.Wait()
+ s.h = windows.Handle(ssHandle)
+ argv := (*[100]*int16)(unsafe.Pointer(sArgv))[:sArgc]
+ args := make([]string, len(argv))
+ for i, a := range argv {
+ args[i] = syscall.UTF16ToString((*[1 << 20]uint16)(unsafe.Pointer(a))[:])
+ }
+
+ cmdsToHandler := make(chan ChangeRequest)
+ changesFromHandler := make(chan Status)
+ exitFromHandler := make(chan exitCode)
+
+ go func() {
+ ss, errno := s.handler.Execute(args, cmdsToHandler, changesFromHandler)
+ exitFromHandler <- exitCode{ss, errno}
+ }()
+
+ status := Status{State: Stopped}
+ ec := exitCode{isSvcSpecific: true, errno: 0}
+ var outch chan ChangeRequest
+ inch := s.c
+ var cmd Cmd
+ var evtype uint32
+ var evdata uintptr
+loop:
+ for {
+ select {
+ case r := <-inch:
+ if r.errno != 0 {
+ ec.errno = r.errno
+ break loop
+ }
+ inch = nil
+ outch = cmdsToHandler
+ cmd = r.cmd
+ evtype = r.eventType
+ evdata = r.eventData
+ case outch <- ChangeRequest{cmd, evtype, evdata, status}:
+ inch = s.c
+ outch = nil
+ case c := <-changesFromHandler:
+ err := s.updateStatus(&c, &ec)
+ if err != nil {
+ // best suitable error number
+ ec.errno = sysErrSetServiceStatusFailed
+ if err2, ok := err.(syscall.Errno); ok {
+ ec.errno = uint32(err2)
+ }
+ break loop
+ }
+ status = c
+ case ec = <-exitFromHandler:
+ break loop
+ }
+ }
+
+ s.updateStatus(&Status{State: Stopped}, &ec)
+ s.cWaits.Set()
+}
+
+func newCallback(fn interface{}) (cb uintptr, err error) {
+ defer func() {
+ r := recover()
+ if r == nil {
+ return
+ }
+ cb = 0
+ switch v := r.(type) {
+ case string:
+ err = errors.New(v)
+ case error:
+ err = v
+ default:
+ err = errors.New("unexpected panic in syscall.NewCallback")
+ }
+ }()
+ return syscall.NewCallback(fn), nil
+}
+
+// BUG(brainman): There is no mechanism to run multiple services
+// inside one single executable. Perhaps, it can be overcome by
+// using RegisterServiceCtrlHandlerEx Windows api.
+
+// Run executes service name by calling appropriate handler function.
+func Run(name string, handler Handler) error {
+ runtime.LockOSThread()
+
+ tid := windows.GetCurrentThreadId()
+
+ s, err := newService(name, handler)
+ if err != nil {
+ return err
+ }
+
+ ctlHandler := func(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr {
+ e := ctlEvent{cmd: Cmd(ctl), eventType: evtype, eventData: evdata}
+ // We assume that this callback function is running on
+ // the same thread as Run. Nowhere in MS documentation
+ // I could find statement to guarantee that. So putting
+ // check here to verify, otherwise things will go bad
+ // quickly, if ignored.
+ i := windows.GetCurrentThreadId()
+ if i != tid {
+ e.errno = sysErrNewThreadInCallback
+ }
+ s.c <- e
+ // Always return NO_ERROR (0) for now.
+ return 0
+ }
+
+ var svcmain uintptr
+ getServiceMain(&svcmain)
+ t := []windows.SERVICE_TABLE_ENTRY{
+ {ServiceName: syscall.StringToUTF16Ptr(s.name), ServiceProc: svcmain},
+ {ServiceName: nil, ServiceProc: 0},
+ }
+
+ goWaitsH = uintptr(s.goWaits.h)
+ cWaitsH = uintptr(s.cWaits.h)
+ sName = t[0].ServiceName
+ ctlHandlerExProc, err = newCallback(ctlHandler)
+ if err != nil {
+ return err
+ }
+
+ go s.run()
+
+ err = windows.StartServiceCtrlDispatcher(&t[0])
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+// StatusHandle returns service status handle. It is safe to call this function
+// from inside the Handler.Execute because then it is guaranteed to be set.
+// This code will have to change once multiple services are possible per process.
+func StatusHandle() windows.Handle {
+ return windows.Handle(ssHandle)
+}
diff --git a/vendor/golang.org/x/sys/windows/svc/sys_386.s b/vendor/golang.org/x/sys/windows/svc/sys_386.s
new file mode 100644
index 000000000..2c82a9d91
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/svc/sys_386.s
@@ -0,0 +1,68 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build windows
+
+// func servicemain(argc uint32, argv **uint16)
+TEXT ·servicemain(SB),7,$0
+ MOVL argc+0(FP), AX
+ MOVL AX, ·sArgc(SB)
+ MOVL argv+4(FP), AX
+ MOVL AX, ·sArgv(SB)
+
+ PUSHL BP
+ PUSHL BX
+ PUSHL SI
+ PUSHL DI
+
+ SUBL $12, SP
+
+ MOVL ·sName(SB), AX
+ MOVL AX, (SP)
+ MOVL $·servicectlhandler(SB), AX
+ MOVL AX, 4(SP)
+ MOVL $0, 8(SP)
+ MOVL ·cRegisterServiceCtrlHandlerExW(SB), AX
+ MOVL SP, BP
+ CALL AX
+ MOVL BP, SP
+ CMPL AX, $0
+ JE exit
+ MOVL AX, ·ssHandle(SB)
+
+ MOVL ·goWaitsH(SB), AX
+ MOVL AX, (SP)
+ MOVL ·cSetEvent(SB), AX
+ MOVL SP, BP
+ CALL AX
+ MOVL BP, SP
+
+ MOVL ·cWaitsH(SB), AX
+ MOVL AX, (SP)
+ MOVL $-1, AX
+ MOVL AX, 4(SP)
+ MOVL ·cWaitForSingleObject(SB), AX
+ MOVL SP, BP
+ CALL AX
+ MOVL BP, SP
+
+exit:
+ ADDL $12, SP
+
+ POPL DI
+ POPL SI
+ POPL BX
+ POPL BP
+
+ MOVL 0(SP), CX
+ ADDL $12, SP
+ JMP CX
+
+// I do not know why, but this seems to be the only way to call
+// ctlHandlerProc on Windows 7.
+
+// func servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr {
+TEXT ·servicectlhandler(SB),7,$0
+ MOVL ·ctlHandlerExProc(SB), CX
+ JMP CX
diff --git a/vendor/golang.org/x/sys/windows/svc/sys_amd64.s b/vendor/golang.org/x/sys/windows/svc/sys_amd64.s
new file mode 100644
index 000000000..bde25e9c4
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/svc/sys_amd64.s
@@ -0,0 +1,42 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build windows
+
+// func servicemain(argc uint32, argv **uint16)
+TEXT ·servicemain(SB),7,$0
+ MOVL CX, ·sArgc(SB)
+ MOVQ DX, ·sArgv(SB)
+
+ SUBQ $32, SP // stack for the first 4 syscall params
+
+ MOVQ ·sName(SB), CX
+ MOVQ $·servicectlhandler(SB), DX
+ // BUG(pastarmovj): Figure out a way to pass in context in R8.
+ MOVQ ·cRegisterServiceCtrlHandlerExW(SB), AX
+ CALL AX
+ CMPQ AX, $0
+ JE exit
+ MOVQ AX, ·ssHandle(SB)
+
+ MOVQ ·goWaitsH(SB), CX
+ MOVQ ·cSetEvent(SB), AX
+ CALL AX
+
+ MOVQ ·cWaitsH(SB), CX
+ MOVQ $4294967295, DX
+ MOVQ ·cWaitForSingleObject(SB), AX
+ CALL AX
+
+exit:
+ ADDQ $32, SP
+ RET
+
+// I do not know why, but this seems to be the only way to call
+// ctlHandlerProc on Windows 7.
+
+// func ·servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr {
+TEXT ·servicectlhandler(SB),7,$0
+ MOVQ ·ctlHandlerExProc(SB), AX
+ JMP AX
diff --git a/vendor/golang.org/x/sys/windows/svc/sys_arm.s b/vendor/golang.org/x/sys/windows/svc/sys_arm.s
new file mode 100644
index 000000000..33c692a8d
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/svc/sys_arm.s
@@ -0,0 +1,38 @@
+// 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.
+
+// +build windows
+
+#include "textflag.h"
+
+// func servicemain(argc uint32, argv **uint16)
+TEXT ·servicemain(SB),NOSPLIT|NOFRAME,$0
+ MOVM.DB.W [R4, R14], (R13) // push {r4, lr}
+ MOVW R13, R4
+ BIC $0x7, R13 // alignment for ABI
+
+ MOVW R0, ·sArgc(SB)
+ MOVW R1, ·sArgv(SB)
+
+ MOVW ·sName(SB), R0
+ MOVW ·ctlHandlerExProc(SB), R1
+ MOVW $0, R2
+ MOVW ·cRegisterServiceCtrlHandlerExW(SB), R3
+ BL (R3)
+ CMP $0, R0
+ BEQ exit
+ MOVW R0, ·ssHandle(SB)
+
+ MOVW ·goWaitsH(SB), R0
+ MOVW ·cSetEvent(SB), R1
+ BL (R1)
+
+ MOVW ·cWaitsH(SB), R0
+ MOVW $-1, R1
+ MOVW ·cWaitForSingleObject(SB), R2
+ BL (R2)
+
+exit:
+ MOVW R4, R13 // free extra stack space
+ MOVM.IA.W (R13), [R4, R15] // pop {r4, pc}
diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go
index 1e9f4bb4a..8a00b71f1 100644
--- a/vendor/golang.org/x/sys/windows/syscall_windows.go
+++ b/vendor/golang.org/x/sys/windows/syscall_windows.go
@@ -112,12 +112,14 @@ func Getpagesize() int { return 4096 }
// NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention.
// This is useful when interoperating with Windows code requiring callbacks.
+// The argument is expected to be a function with with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr.
func NewCallback(fn interface{}) uintptr {
return syscall.NewCallback(fn)
}
// NewCallbackCDecl converts a Go function to a function pointer conforming to the cdecl calling convention.
// This is useful when interoperating with Windows code requiring callbacks.
+// The argument is expected to be a function with with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr.
func NewCallbackCDecl(fn interface{}) uintptr {
return syscall.NewCallbackCDecl(fn)
}
@@ -653,7 +655,7 @@ type RawSockaddr struct {
type RawSockaddrAny struct {
Addr RawSockaddr
- Pad [96]int8
+ Pad [100]int8
}
type Sockaddr interface {
@@ -702,19 +704,69 @@ func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, int32, error) {
return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil
}
+type RawSockaddrUnix struct {
+ Family uint16
+ Path [UNIX_PATH_MAX]int8
+}
+
type SockaddrUnix struct {
Name string
+ raw RawSockaddrUnix
}
func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, int32, error) {
- // TODO(brainman): implement SockaddrUnix.sockaddr()
- return nil, 0, syscall.EWINDOWS
+ name := sa.Name
+ n := len(name)
+ if n > len(sa.raw.Path) {
+ return nil, 0, syscall.EINVAL
+ }
+ if n == len(sa.raw.Path) && name[0] != '@' {
+ return nil, 0, syscall.EINVAL
+ }
+ sa.raw.Family = AF_UNIX
+ for i := 0; i < n; i++ {
+ sa.raw.Path[i] = int8(name[i])
+ }
+ // length is family (uint16), name, NUL.
+ sl := int32(2)
+ if n > 0 {
+ sl += int32(n) + 1
+ }
+ if sa.raw.Path[0] == '@' {
+ sa.raw.Path[0] = 0
+ // Don't count trailing NUL for abstract address.
+ sl--
+ }
+
+ return unsafe.Pointer(&sa.raw), sl, nil
}
func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) {
switch rsa.Addr.Family {
case AF_UNIX:
- return nil, syscall.EWINDOWS
+ pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))
+ sa := new(SockaddrUnix)
+ if pp.Path[0] == 0 {
+ // "Abstract" Unix domain socket.
+ // Rewrite leading NUL as @ for textual display.
+ // (This is the standard convention.)
+ // Not friendly to overwrite in place,
+ // but the callers below don't care.
+ pp.Path[0] = '@'
+ }
+
+ // Assume path ends at NUL.
+ // This is not technically the Linux semantics for
+ // abstract Unix domain sockets--they are supposed
+ // to be uninterpreted fixed-size binary blobs--but
+ // everyone uses this convention.
+ n := 0
+ for n < len(pp.Path) && pp.Path[n] != 0 {
+ n++
+ }
+ bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
+ sa.Name = string(bytes)
+ return sa, nil
case AF_INET:
pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))
diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go
index b4e424788..141ca81bd 100644
--- a/vendor/golang.org/x/sys/windows/types_windows.go
+++ b/vendor/golang.org/x/sys/windows/types_windows.go
@@ -94,16 +94,29 @@ const (
FILE_APPEND_DATA = 0x00000004
FILE_WRITE_ATTRIBUTES = 0x00000100
- FILE_SHARE_READ = 0x00000001
- FILE_SHARE_WRITE = 0x00000002
- FILE_SHARE_DELETE = 0x00000004
- FILE_ATTRIBUTE_READONLY = 0x00000001
- FILE_ATTRIBUTE_HIDDEN = 0x00000002
- FILE_ATTRIBUTE_SYSTEM = 0x00000004
- FILE_ATTRIBUTE_DIRECTORY = 0x00000010
- FILE_ATTRIBUTE_ARCHIVE = 0x00000020
- FILE_ATTRIBUTE_NORMAL = 0x00000080
- FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
+ FILE_SHARE_READ = 0x00000001
+ FILE_SHARE_WRITE = 0x00000002
+ FILE_SHARE_DELETE = 0x00000004
+
+ FILE_ATTRIBUTE_READONLY = 0x00000001
+ FILE_ATTRIBUTE_HIDDEN = 0x00000002
+ FILE_ATTRIBUTE_SYSTEM = 0x00000004
+ FILE_ATTRIBUTE_DIRECTORY = 0x00000010
+ FILE_ATTRIBUTE_ARCHIVE = 0x00000020
+ FILE_ATTRIBUTE_DEVICE = 0x00000040
+ FILE_ATTRIBUTE_NORMAL = 0x00000080
+ FILE_ATTRIBUTE_TEMPORARY = 0x00000100
+ FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200
+ FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
+ FILE_ATTRIBUTE_COMPRESSED = 0x00000800
+ FILE_ATTRIBUTE_OFFLINE = 0x00001000
+ FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000
+ FILE_ATTRIBUTE_ENCRYPTED = 0x00004000
+ FILE_ATTRIBUTE_INTEGRITY_STREAM = 0x00008000
+ FILE_ATTRIBUTE_VIRTUAL = 0x00010000
+ FILE_ATTRIBUTE_NO_SCRUB_DATA = 0x00020000
+ FILE_ATTRIBUTE_RECALL_ON_OPEN = 0x00040000
+ FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000
INVALID_FILE_ATTRIBUTES = 0xffffffff
@@ -257,15 +270,87 @@ const (
USAGE_MATCH_TYPE_AND = 0
USAGE_MATCH_TYPE_OR = 1
+ /* msgAndCertEncodingType values for CertOpenStore function */
X509_ASN_ENCODING = 0x00000001
PKCS_7_ASN_ENCODING = 0x00010000
- CERT_STORE_PROV_MEMORY = 2
-
- CERT_STORE_ADD_ALWAYS = 4
-
+ /* storeProvider values for CertOpenStore function */
+ CERT_STORE_PROV_MSG = 1
+ CERT_STORE_PROV_MEMORY = 2
+ CERT_STORE_PROV_FILE = 3
+ CERT_STORE_PROV_REG = 4
+ CERT_STORE_PROV_PKCS7 = 5
+ CERT_STORE_PROV_SERIALIZED = 6
+ CERT_STORE_PROV_FILENAME_A = 7
+ CERT_STORE_PROV_FILENAME_W = 8
+ CERT_STORE_PROV_FILENAME = CERT_STORE_PROV_FILENAME_W
+ CERT_STORE_PROV_SYSTEM_A = 9
+ CERT_STORE_PROV_SYSTEM_W = 10
+ CERT_STORE_PROV_SYSTEM = CERT_STORE_PROV_SYSTEM_W
+ CERT_STORE_PROV_COLLECTION = 11
+ CERT_STORE_PROV_SYSTEM_REGISTRY_A = 12
+ CERT_STORE_PROV_SYSTEM_REGISTRY_W = 13
+ CERT_STORE_PROV_SYSTEM_REGISTRY = CERT_STORE_PROV_SYSTEM_REGISTRY_W
+ CERT_STORE_PROV_PHYSICAL_W = 14
+ CERT_STORE_PROV_PHYSICAL = CERT_STORE_PROV_PHYSICAL_W
+ CERT_STORE_PROV_SMART_CARD_W = 15
+ CERT_STORE_PROV_SMART_CARD = CERT_STORE_PROV_SMART_CARD_W
+ CERT_STORE_PROV_LDAP_W = 16
+ CERT_STORE_PROV_LDAP = CERT_STORE_PROV_LDAP_W
+ CERT_STORE_PROV_PKCS12 = 17
+
+ /* store characteristics (low WORD of flag) for CertOpenStore function */
+ CERT_STORE_NO_CRYPT_RELEASE_FLAG = 0x00000001
+ CERT_STORE_SET_LOCALIZED_NAME_FLAG = 0x00000002
CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004
-
+ CERT_STORE_DELETE_FLAG = 0x00000010
+ CERT_STORE_UNSAFE_PHYSICAL_FLAG = 0x00000020
+ CERT_STORE_SHARE_STORE_FLAG = 0x00000040
+ CERT_STORE_SHARE_CONTEXT_FLAG = 0x00000080
+ CERT_STORE_MANIFOLD_FLAG = 0x00000100
+ CERT_STORE_ENUM_ARCHIVED_FLAG = 0x00000200
+ CERT_STORE_UPDATE_KEYID_FLAG = 0x00000400
+ CERT_STORE_BACKUP_RESTORE_FLAG = 0x00000800
+ CERT_STORE_MAXIMUM_ALLOWED_FLAG = 0x00001000
+ CERT_STORE_CREATE_NEW_FLAG = 0x00002000
+ CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000
+ CERT_STORE_READONLY_FLAG = 0x00008000
+
+ /* store locations (high WORD of flag) for CertOpenStore function */
+ CERT_SYSTEM_STORE_CURRENT_USER = 0x00010000
+ CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x00020000
+ CERT_SYSTEM_STORE_CURRENT_SERVICE = 0x00040000
+ CERT_SYSTEM_STORE_SERVICES = 0x00050000
+ CERT_SYSTEM_STORE_USERS = 0x00060000
+ CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY = 0x00070000
+ CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 0x00080000
+ CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 0x00090000
+ CERT_SYSTEM_STORE_UNPROTECTED_FLAG = 0x40000000
+ CERT_SYSTEM_STORE_RELOCATE_FLAG = 0x80000000
+
+ /* Miscellaneous high-WORD flags for CertOpenStore function */
+ CERT_REGISTRY_STORE_REMOTE_FLAG = 0x00010000
+ CERT_REGISTRY_STORE_SERIALIZED_FLAG = 0x00020000
+ CERT_REGISTRY_STORE_ROAMING_FLAG = 0x00040000
+ CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG = 0x00080000
+ CERT_REGISTRY_STORE_LM_GPT_FLAG = 0x01000000
+ CERT_REGISTRY_STORE_CLIENT_GPT_FLAG = 0x80000000
+ CERT_FILE_STORE_COMMIT_ENABLE_FLAG = 0x00010000
+ CERT_LDAP_STORE_SIGN_FLAG = 0x00010000
+ CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG = 0x00020000
+ CERT_LDAP_STORE_OPENED_FLAG = 0x00040000
+ CERT_LDAP_STORE_UNBIND_FLAG = 0x00080000
+
+ /* addDisposition values for CertAddCertificateContextToStore function */
+ CERT_STORE_ADD_NEW = 1
+ CERT_STORE_ADD_USE_EXISTING = 2
+ CERT_STORE_ADD_REPLACE_EXISTING = 3
+ CERT_STORE_ADD_ALWAYS = 4
+ CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5
+ CERT_STORE_ADD_NEWER = 6
+ CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES = 7
+
+ /* ErrorStatus values for CertTrustStatus struct */
CERT_TRUST_NO_ERROR = 0x00000000
CERT_TRUST_IS_NOT_TIME_VALID = 0x00000001
CERT_TRUST_IS_REVOKED = 0x00000004
@@ -282,11 +367,31 @@ const (
CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT = 0x00002000
CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000
CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT = 0x00008000
+ CERT_TRUST_IS_PARTIAL_CHAIN = 0x00010000
+ CERT_TRUST_CTL_IS_NOT_TIME_VALID = 0x00020000
+ CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID = 0x00040000
+ CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE = 0x00080000
+ CERT_TRUST_HAS_WEAK_SIGNATURE = 0x00100000
CERT_TRUST_IS_OFFLINE_REVOCATION = 0x01000000
CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY = 0x02000000
CERT_TRUST_IS_EXPLICIT_DISTRUST = 0x04000000
CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT = 0x08000000
+ /* InfoStatus values for CertTrustStatus struct */
+ CERT_TRUST_HAS_EXACT_MATCH_ISSUER = 0x00000001
+ CERT_TRUST_HAS_KEY_MATCH_ISSUER = 0x00000002
+ CERT_TRUST_HAS_NAME_MATCH_ISSUER = 0x00000004
+ CERT_TRUST_IS_SELF_SIGNED = 0x00000008
+ CERT_TRUST_HAS_PREFERRED_ISSUER = 0x00000100
+ CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY = 0x00000400
+ CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS = 0x00000400
+ CERT_TRUST_IS_PEER_TRUSTED = 0x00000800
+ CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED = 0x00001000
+ CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE = 0x00002000
+ CERT_TRUST_IS_CA_TRUSTED = 0x00004000
+ CERT_TRUST_IS_COMPLEX_CHAIN = 0x00010000
+
+ /* policyOID values for CertVerifyCertificateChainPolicy function */
CERT_CHAIN_POLICY_BASE = 1
CERT_CHAIN_POLICY_AUTHENTICODE = 2
CERT_CHAIN_POLICY_AUTHENTICODE_TS = 3
@@ -295,6 +400,7 @@ const (
CERT_CHAIN_POLICY_NT_AUTH = 6
CERT_CHAIN_POLICY_MICROSOFT_ROOT = 7
CERT_CHAIN_POLICY_EV = 8
+ CERT_CHAIN_POLICY_SSL_F12 = 9
CERT_E_EXPIRED = 0x800B0101
CERT_E_ROLE = 0x800B0103
@@ -302,8 +408,16 @@ const (
CERT_E_UNTRUSTEDROOT = 0x800B0109
CERT_E_CN_NO_MATCH = 0x800B010F
+ /* AuthType values for SSLExtraCertChainPolicyPara struct */
AUTHTYPE_CLIENT = 1
AUTHTYPE_SERVER = 2
+
+ /* Checks values for SSLExtraCertChainPolicyPara struct */
+ SECURITY_FLAG_IGNORE_REVOCATION = 0x00000080
+ SECURITY_FLAG_IGNORE_UNKNOWN_CA = 0x00000100
+ SECURITY_FLAG_IGNORE_WRONG_USAGE = 0x00000200
+ SECURITY_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000
+ SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000
)
var (
@@ -1339,7 +1453,7 @@ type SmallRect struct {
Bottom int16
}
-// Used with GetConsoleScreenBuffer to retreive information about a console
+// Used with GetConsoleScreenBuffer to retrieve information about a console
// screen buffer. See
// https://docs.microsoft.com/en-us/windows/console/console-screen-buffer-info-str
// for details.
@@ -1351,3 +1465,5 @@ type ConsoleScreenBufferInfo struct {
Window SmallRect
MaximumWindowSize Coord
}
+
+const UNIX_PATH_MAX = 108 // defined in afunix.h
diff --git a/vendor/golang.org/x/sys/windows/types_windows_arm.go b/vendor/golang.org/x/sys/windows/types_windows_arm.go
new file mode 100644
index 000000000..74571e360
--- /dev/null
+++ b/vendor/golang.org/x/sys/windows/types_windows_arm.go
@@ -0,0 +1,22 @@
+// 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 windows
+
+type WSAData struct {
+ Version uint16
+ HighVersion uint16
+ Description [WSADESCRIPTION_LEN + 1]byte
+ SystemStatus [WSASYS_STATUS_LEN + 1]byte
+ MaxSockets uint16
+ MaxUdpDg uint16
+ VendorInfo *byte
+}
+
+type Servent struct {
+ Name *byte
+ Aliases **byte
+ Port uint16
+ Proto *byte
+}
diff --git a/vendor/golang.org/x/text/README b/vendor/golang.org/x/text/README
deleted file mode 100644
index 4826fe8fb..000000000
--- a/vendor/golang.org/x/text/README
+++ /dev/null
@@ -1,23 +0,0 @@
-This repository holds supplementary Go libraries for text processing, many involving Unicode.
-
-To submit changes to this repository, see http://golang.org/doc/contribute.html.
-
-To generate the tables in this repository (except for the encoding tables),
-run go generate from this directory. By default tables are generated for the
-Unicode version in core and the CLDR version defined in
-golang.org/x/text/unicode/cldr.
-
-Running go generate will as a side effect create a DATA subdirectory in this
-directory which holds all files that are used as a source for generating the
-tables. This directory will also serve as a cache.
-
-Run
-
- go test ./...
-
-from this directory to run all tests. Add the "-tags icu" flag to also run
-ICU conformance tests (if available). This requires that you have the correct
-ICU version installed on your system.
-
-TODO:
-- updating unversioned source files. \ No newline at end of file
diff --git a/vendor/golang.org/x/text/README.md b/vendor/golang.org/x/text/README.md
new file mode 100644
index 000000000..61d5ee4d1
--- /dev/null
+++ b/vendor/golang.org/x/text/README.md
@@ -0,0 +1,93 @@
+# Go Text
+
+This repository holds supplementary Go libraries for text processing, many involving Unicode.
+
+## Semantic Versioning
+This repo uses Semantic versioning (http://semver.org/), so
+1. MAJOR version when you make incompatible API changes,
+1. MINOR version when you add functionality in a backwards-compatible manner,
+ and
+1. PATCH version when you make backwards-compatible bug fixes.
+
+Until version 1.0.0 of x/text is reached, the minor version is considered a
+major version. So going from 0.1.0 to 0.2.0 is considered to be a major version
+bump.
+
+A major new CLDR version is mapped to a minor version increase in x/text.
+Any other new CLDR version is mapped to a patch version increase in x/text.
+
+It is important that the Unicode version used in `x/text` matches the one used
+by your Go compiler. The `x/text` repository supports multiple versions of
+Unicode and will match the version of Unicode to that of the Go compiler. At the
+moment this is supported for Go compilers from version 1.7.
+
+## Download/Install
+
+The easiest way to install is to run `go get -u golang.org/x/text`. You can
+also manually git clone the repository to `$GOPATH/src/golang.org/x/text`.
+
+## Contribute
+To submit changes to this repository, see http://golang.org/doc/contribute.html.
+
+To generate the tables in this repository (except for the encoding tables),
+run go generate from this directory. By default tables are generated for the
+Unicode version in core and the CLDR version defined in
+golang.org/x/text/unicode/cldr.
+
+Running go generate will as a side effect create a DATA subdirectory in this
+directory, which holds all files that are used as a source for generating the
+tables. This directory will also serve as a cache.
+
+## Testing
+Run
+
+ go test ./...
+
+from this directory to run all tests. Add the "-tags icu" flag to also run
+ICU conformance tests (if available). This requires that you have the correct
+ICU version installed on your system.
+
+TODO:
+- updating unversioned source files.
+
+## Generating Tables
+
+To generate the tables in this repository (except for the encoding
+tables), run `go generate` from this directory. By default tables are
+generated for the Unicode version in core and the CLDR version defined in
+golang.org/x/text/unicode/cldr.
+
+Running go generate will as a side effect create a DATA subdirectory in this
+directory which holds all files that are used as a source for generating the
+tables. This directory will also serve as a cache.
+
+## Versions
+To update a Unicode version run
+
+ UNICODE_VERSION=x.x.x go generate
+
+where `x.x.x` must correspond to a directory in https://www.unicode.org/Public/.
+If this version is newer than the version in core it will also update the
+relevant packages there. The idna package in x/net will always be updated.
+
+To update a CLDR version run
+
+ CLDR_VERSION=version go generate
+
+where `version` must correspond to a directory in
+https://www.unicode.org/Public/cldr/.
+
+Note that the code gets adapted over time to changes in the data and that
+backwards compatibility is not maintained.
+So updating to a different version may not work.
+
+The files in DATA/{iana|icu|w3|whatwg} are currently not versioned.
+
+## Report Issues / Send Patches
+
+This repository uses Gerrit for code changes. To learn how to submit changes to
+this repository, see https://golang.org/doc/contribute.html.
+
+The main issue tracker for the image repository is located at
+https://github.com/golang/go/issues. Prefix your issue with "x/text:" in the
+subject line, so it is easy to find.
diff --git a/vendor/golang.org/x/text/collate/collate.go b/vendor/golang.org/x/text/collate/collate.go
index 885ab80da..d8c23cb69 100644
--- a/vendor/golang.org/x/text/collate/collate.go
+++ b/vendor/golang.org/x/text/collate/collate.go
@@ -7,8 +7,7 @@
//go:generate go run maketables.go -cldr=23 -unicode=6.2.0
// Package collate contains types for comparing and sorting Unicode strings
-// according to a given collation order. Package locale provides a high-level
-// interface to collation. Users should typically use that package instead.
+// according to a given collation order.
package collate // import "golang.org/x/text/collate"
import (
@@ -194,7 +193,7 @@ func (c *Collator) compare() int {
// The returned slice will point to an allocation in Buffer and will remain
// valid until the next call to buf.Reset().
func (c *Collator) Key(buf *Buffer, str []byte) []byte {
- // See http://www.unicode.org/reports/tr10/#Main_Algorithm for more details.
+ // See https://www.unicode.org/reports/tr10/#Main_Algorithm for more details.
buf.init()
return c.key(buf, c.getColElems(str))
}
@@ -204,7 +203,7 @@ func (c *Collator) Key(buf *Buffer, str []byte) []byte {
// The returned slice will point to an allocation in Buffer and will retain
// valid until the next call to buf.ResetKeys().
func (c *Collator) KeyFromString(buf *Buffer, str string) []byte {
- // See http://www.unicode.org/reports/tr10/#Main_Algorithm for more details.
+ // See https://www.unicode.org/reports/tr10/#Main_Algorithm for more details.
buf.init()
return c.key(buf, c.getColElemsString(str))
}
diff --git a/vendor/golang.org/x/text/collate/option.go b/vendor/golang.org/x/text/collate/option.go
index f39ef6841..19cb54675 100644
--- a/vendor/golang.org/x/text/collate/option.go
+++ b/vendor/golang.org/x/text/collate/option.go
@@ -165,7 +165,7 @@ var (
IgnoreWidth Option = ignoreWidth
ignoreWidth = Option{2, ignoreWidthF}
- // Loose sets the collator to ignore diacritics, case and weight.
+ // Loose sets the collator to ignore diacritics, case and width.
Loose Option = loose
loose = Option{4, looseF}
@@ -217,7 +217,7 @@ func Reorder(s ...string) Option {
// alternateHandling identifies the various ways in which variables are handled.
// A rune with a primary weight lower than the variable top is considered a
// variable.
-// See http://www.unicode.org/reports/tr10/#Variable_Weighting for details.
+// See https://www.unicode.org/reports/tr10/#Variable_Weighting for details.
type alternateHandling int
const (
diff --git a/vendor/golang.org/x/text/collate/tables.go b/vendor/golang.org/x/text/collate/tables.go
index 525d8529f..9ec4f3d49 100644
--- a/vendor/golang.org/x/text/collate/tables.go
+++ b/vendor/golang.org/x/text/collate/tables.go
@@ -1,4 +1,4 @@
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
package collate
diff --git a/vendor/golang.org/x/text/encoding/charmap/charmap.go b/vendor/golang.org/x/text/encoding/charmap/charmap.go
new file mode 100644
index 000000000..e89ff0734
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/charmap/charmap.go
@@ -0,0 +1,249 @@
+// 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 maketables.go
+
+// Package charmap provides simple character encodings such as IBM Code Page 437
+// and Windows 1252.
+package charmap // import "golang.org/x/text/encoding/charmap"
+
+import (
+ "unicode/utf8"
+
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/internal"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/transform"
+)
+
+// These encodings vary only in the way clients should interpret them. Their
+// coded character set is identical and a single implementation can be shared.
+var (
+ // ISO8859_6E is the ISO 8859-6E encoding.
+ ISO8859_6E encoding.Encoding = &iso8859_6E
+
+ // ISO8859_6I is the ISO 8859-6I encoding.
+ ISO8859_6I encoding.Encoding = &iso8859_6I
+
+ // ISO8859_8E is the ISO 8859-8E encoding.
+ ISO8859_8E encoding.Encoding = &iso8859_8E
+
+ // ISO8859_8I is the ISO 8859-8I encoding.
+ ISO8859_8I encoding.Encoding = &iso8859_8I
+
+ iso8859_6E = internal.Encoding{
+ Encoding: ISO8859_6,
+ Name: "ISO-8859-6E",
+ MIB: identifier.ISO88596E,
+ }
+
+ iso8859_6I = internal.Encoding{
+ Encoding: ISO8859_6,
+ Name: "ISO-8859-6I",
+ MIB: identifier.ISO88596I,
+ }
+
+ iso8859_8E = internal.Encoding{
+ Encoding: ISO8859_8,
+ Name: "ISO-8859-8E",
+ MIB: identifier.ISO88598E,
+ }
+
+ iso8859_8I = internal.Encoding{
+ Encoding: ISO8859_8,
+ Name: "ISO-8859-8I",
+ MIB: identifier.ISO88598I,
+ }
+)
+
+// All is a list of all defined encodings in this package.
+var All []encoding.Encoding = listAll
+
+// TODO: implement these encodings, in order of importance.
+// ASCII, ISO8859_1: Rather common. Close to Windows 1252.
+// ISO8859_9: Close to Windows 1254.
+
+// utf8Enc holds a rune's UTF-8 encoding in data[:len].
+type utf8Enc struct {
+ len uint8
+ data [3]byte
+}
+
+// Charmap is an 8-bit character set encoding.
+type Charmap struct {
+ // name is the encoding's name.
+ name string
+ // mib is the encoding type of this encoder.
+ mib identifier.MIB
+ // asciiSuperset states whether the encoding is a superset of ASCII.
+ asciiSuperset bool
+ // low is the lower bound of the encoded byte for a non-ASCII rune. If
+ // Charmap.asciiSuperset is true then this will be 0x80, otherwise 0x00.
+ low uint8
+ // replacement is the encoded replacement character.
+ replacement byte
+ // decode is the map from encoded byte to UTF-8.
+ decode [256]utf8Enc
+ // encoding is the map from runes to encoded bytes. Each entry is a
+ // uint32: the high 8 bits are the encoded byte and the low 24 bits are
+ // the rune. The table entries are sorted by ascending rune.
+ encode [256]uint32
+}
+
+// NewDecoder implements the encoding.Encoding interface.
+func (m *Charmap) NewDecoder() *encoding.Decoder {
+ return &encoding.Decoder{Transformer: charmapDecoder{charmap: m}}
+}
+
+// NewEncoder implements the encoding.Encoding interface.
+func (m *Charmap) NewEncoder() *encoding.Encoder {
+ return &encoding.Encoder{Transformer: charmapEncoder{charmap: m}}
+}
+
+// String returns the Charmap's name.
+func (m *Charmap) String() string {
+ return m.name
+}
+
+// ID implements an internal interface.
+func (m *Charmap) ID() (mib identifier.MIB, other string) {
+ return m.mib, ""
+}
+
+// charmapDecoder implements transform.Transformer by decoding to UTF-8.
+type charmapDecoder struct {
+ transform.NopResetter
+ charmap *Charmap
+}
+
+func (m charmapDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ for i, c := range src {
+ if m.charmap.asciiSuperset && c < utf8.RuneSelf {
+ if nDst >= len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst] = c
+ nDst++
+ nSrc = i + 1
+ continue
+ }
+
+ decode := &m.charmap.decode[c]
+ n := int(decode.len)
+ if nDst+n > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ // It's 15% faster to avoid calling copy for these tiny slices.
+ for j := 0; j < n; j++ {
+ dst[nDst] = decode.data[j]
+ nDst++
+ }
+ nSrc = i + 1
+ }
+ return nDst, nSrc, err
+}
+
+// DecodeByte returns the Charmap's rune decoding of the byte b.
+func (m *Charmap) DecodeByte(b byte) rune {
+ switch x := &m.decode[b]; x.len {
+ case 1:
+ return rune(x.data[0])
+ case 2:
+ return rune(x.data[0]&0x1f)<<6 | rune(x.data[1]&0x3f)
+ default:
+ return rune(x.data[0]&0x0f)<<12 | rune(x.data[1]&0x3f)<<6 | rune(x.data[2]&0x3f)
+ }
+}
+
+// charmapEncoder implements transform.Transformer by encoding from UTF-8.
+type charmapEncoder struct {
+ transform.NopResetter
+ charmap *Charmap
+}
+
+func (m charmapEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+loop:
+ for nSrc < len(src) {
+ if nDst >= len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ r = rune(src[nSrc])
+
+ // Decode a 1-byte rune.
+ if r < utf8.RuneSelf {
+ if m.charmap.asciiSuperset {
+ nSrc++
+ dst[nDst] = uint8(r)
+ nDst++
+ continue
+ }
+ size = 1
+
+ } else {
+ // Decode a multi-byte rune.
+ r, size = utf8.DecodeRune(src[nSrc:])
+ if size == 1 {
+ // All valid runes of size 1 (those below utf8.RuneSelf) were
+ // handled above. We have invalid UTF-8 or we haven't seen the
+ // full character yet.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ } else {
+ err = internal.RepertoireError(m.charmap.replacement)
+ }
+ break
+ }
+ }
+
+ // Binary search in [low, high) for that rune in the m.charmap.encode table.
+ for low, high := int(m.charmap.low), 0x100; ; {
+ if low >= high {
+ err = internal.RepertoireError(m.charmap.replacement)
+ break loop
+ }
+ mid := (low + high) / 2
+ got := m.charmap.encode[mid]
+ gotRune := rune(got & (1<<24 - 1))
+ if gotRune < r {
+ low = mid + 1
+ } else if gotRune > r {
+ high = mid
+ } else {
+ dst[nDst] = byte(got >> 24)
+ nDst++
+ break
+ }
+ }
+ nSrc += size
+ }
+ return nDst, nSrc, err
+}
+
+// EncodeRune returns the Charmap's byte encoding of the rune r. ok is whether
+// r is in the Charmap's repertoire. If not, b is set to the Charmap's
+// replacement byte. This is often the ASCII substitute character '\x1a'.
+func (m *Charmap) EncodeRune(r rune) (b byte, ok bool) {
+ if r < utf8.RuneSelf && m.asciiSuperset {
+ return byte(r), true
+ }
+ for low, high := int(m.low), 0x100; ; {
+ if low >= high {
+ return m.replacement, false
+ }
+ mid := (low + high) / 2
+ got := m.encode[mid]
+ gotRune := rune(got & (1<<24 - 1))
+ if gotRune < r {
+ low = mid + 1
+ } else if gotRune > r {
+ high = mid
+ } else {
+ return byte(got >> 24), true
+ }
+ }
+}
diff --git a/vendor/golang.org/x/text/encoding/charmap/tables.go b/vendor/golang.org/x/text/encoding/charmap/tables.go
new file mode 100644
index 000000000..cf7281e9e
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/charmap/tables.go
@@ -0,0 +1,7410 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package charmap
+
+import (
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/internal/identifier"
+)
+
+// CodePage037 is the IBM Code Page 037 encoding.
+var CodePage037 *Charmap = &codePage037
+
+var codePage037 = Charmap{
+ name: "IBM Code Page 037",
+ mib: identifier.IBM037,
+ asciiSuperset: false,
+ low: 0x00,
+ replacement: 0x3f,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
+ {2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
+ {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
+ {2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}},
+ {1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
+ {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
+ {2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
+ {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
+ {2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
+ {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}},
+ {1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x3b, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xac, 0x00}},
+ {1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}},
+ {1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+ {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}},
+ {1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}},
+ {1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}},
+ {1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}},
+ {1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
+ {2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}},
+ {1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}},
+ {1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}},
+ {1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}},
+ {1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+ {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+ {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}},
+ {2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
+ {1, [3]byte{0x5b, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
+ {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}},
+ {1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}},
+ {1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}},
+ {1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}},
+ {1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}},
+ {1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}},
+ {1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}},
+ {1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
+ {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007,
+ 0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017,
+ 0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027,
+ 0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f,
+ 0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037,
+ 0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f,
+ 0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047,
+ 0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f,
+ 0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057,
+ 0xe7000058, 0xe8000059, 0xe900005a, 0xba00005b, 0xe000005c, 0xbb00005d, 0xb000005e, 0x6d00005f,
+ 0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067,
+ 0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f,
+ 0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077,
+ 0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f,
+ 0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087,
+ 0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f,
+ 0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097,
+ 0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f,
+ 0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0x9f0000a4, 0xb20000a5, 0x6a0000a6, 0xb50000a7,
+ 0xbd0000a8, 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0x5f0000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af,
+ 0x900000b0, 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7,
+ 0x9d0000b8, 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf,
+ 0x640000c0, 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7,
+ 0x740000c8, 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf,
+ 0xac0000d0, 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7,
+ 0x800000d8, 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xad0000dd, 0xae0000de, 0x590000df,
+ 0x440000e0, 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7,
+ 0x540000e8, 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef,
+ 0x8c0000f0, 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7,
+ 0x700000f8, 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff,
+ },
+}
+
+// CodePage437 is the IBM Code Page 437 encoding.
+var CodePage437 *Charmap = &codePage437
+
+var codePage437 = Charmap{
+ name: "IBM Code Page 437",
+ mib: identifier.PC8CodePage437,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
+ {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}},
+ {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
+ {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}},
+ {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc6, 0x92, 0x00}},
+ {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
+ {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
+ {2, [3]byte{0xc2, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
+ {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
+ {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}},
+ {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}},
+ {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
+ {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
+ {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
+ {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}},
+ {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
+ {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
+ {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
+ {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}},
+ {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
+ {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
+ {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
+ {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
+ {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}},
+ {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}},
+ {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}},
+ {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}},
+ {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}},
+ {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
+ {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}},
+ {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}},
+ {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}},
+ {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
+ {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}},
+ {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}},
+ {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}},
+ {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}},
+ {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}},
+ {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}},
+ {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
+ {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}},
+ {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
+ {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xff0000a0, 0xad0000a1, 0x9b0000a2, 0x9c0000a3, 0x9d0000a5, 0xa60000aa, 0xae0000ab, 0xaa0000ac,
+ 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xaf0000bb, 0xac0000bc,
+ 0xab0000bd, 0xa80000bf, 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7, 0x900000c9, 0xa50000d1,
+ 0x990000d6, 0x9a0000dc, 0xe10000df, 0x850000e0, 0xa00000e1, 0x830000e2, 0x840000e4, 0x860000e5,
+ 0x910000e6, 0x870000e7, 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed,
+ 0x8c0000ee, 0x8b0000ef, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0x940000f6, 0xf60000f7,
+ 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0x980000ff, 0x9f000192, 0xe2000393, 0xe9000398,
+ 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3,
+ 0xe70003c4, 0xed0003c6, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229,
+ 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500,
+ 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c,
+ 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555,
+ 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d,
+ 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565,
+ 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580,
+ 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
+ },
+}
+
+// CodePage850 is the IBM Code Page 850 encoding.
+var CodePage850 *Charmap = &codePage850
+
+var codePage850 = Charmap{
+ name: "IBM Code Page 850",
+ mib: identifier.PC850Multilingual,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
+ {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}},
+ {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
+ {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}},
+ {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}},
+ {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc6, 0x92, 0x00}},
+ {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
+ {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
+ {2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
+ {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
+ {3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}},
+ {2, [3]byte{0xc2, 0xa9, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
+ {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
+ {3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xc2, 0xa2, 0x00}},
+ {2, [3]byte{0xc2, 0xa5, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}},
+ {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
+ {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
+ {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
+ {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
+ {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
+ {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
+ {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
+ {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
+ {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0x90, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}},
+ {2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}},
+ {2, [3]byte{0xc3, 0x8f, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}},
+ {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
+ {3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xc2, 0xa6, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}},
+ {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
+ {2, [3]byte{0xc3, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xbe, 0x00}},
+ {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9a, 0x00}},
+ {2, [3]byte{0xc3, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+ {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}},
+ {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x97}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
+ {2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xff0000a0, 0xad0000a1, 0xbd0000a2, 0x9c0000a3, 0xcf0000a4, 0xbe0000a5, 0xdd0000a6, 0xf50000a7,
+ 0xf90000a8, 0xb80000a9, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf00000ad, 0xa90000ae, 0xee0000af,
+ 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xfc0000b3, 0xef0000b4, 0xe60000b5, 0xf40000b6, 0xfa0000b7,
+ 0xf70000b8, 0xfb0000b9, 0xa70000ba, 0xaf0000bb, 0xac0000bc, 0xab0000bd, 0xf30000be, 0xa80000bf,
+ 0xb70000c0, 0xb50000c1, 0xb60000c2, 0xc70000c3, 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7,
+ 0xd40000c8, 0x900000c9, 0xd20000ca, 0xd30000cb, 0xde0000cc, 0xd60000cd, 0xd70000ce, 0xd80000cf,
+ 0xd10000d0, 0xa50000d1, 0xe30000d2, 0xe00000d3, 0xe20000d4, 0xe50000d5, 0x990000d6, 0x9e0000d7,
+ 0x9d0000d8, 0xeb0000d9, 0xe90000da, 0xea0000db, 0x9a0000dc, 0xed0000dd, 0xe80000de, 0xe10000df,
+ 0x850000e0, 0xa00000e1, 0x830000e2, 0xc60000e3, 0x840000e4, 0x860000e5, 0x910000e6, 0x870000e7,
+ 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, 0x8c0000ee, 0x8b0000ef,
+ 0xd00000f0, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0xe40000f5, 0x940000f6, 0xf60000f7,
+ 0x9b0000f8, 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0xec0000fd, 0xe70000fe, 0x980000ff,
+ 0xd5000131, 0x9f000192, 0xf2002017, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514,
+ 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551,
+ 0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569,
+ 0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
+ },
+}
+
+// CodePage852 is the IBM Code Page 852 encoding.
+var CodePage852 *Charmap = &codePage852
+
+var codePage852 = Charmap{
+ name: "IBM Code Page 852",
+ mib: identifier.PCp852,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
+ {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc5, 0xaf, 0x00}},
+ {2, [3]byte{0xc4, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc5, 0x82, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc5, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc5, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}},
+ {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc4, 0xb9, 0x00}},
+ {2, [3]byte{0xc4, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc4, 0xbd, 0x00}},
+ {2, [3]byte{0xc4, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0x9a, 0x00}},
+ {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xa4, 0x00}},
+ {2, [3]byte{0xc5, 0xa5, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc4, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
+ {2, [3]byte{0xc4, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}},
+ {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc5, 0xbe, 0x00}},
+ {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc4, 0x99, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc5, 0xba, 0x00}},
+ {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc5, 0x9f, 0x00}},
+ {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
+ {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
+ {3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x9a, 0x00}},
+ {2, [3]byte{0xc5, 0x9e, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
+ {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
+ {3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
+ {2, [3]byte{0xc5, 0xbc, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}},
+ {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
+ {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
+ {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
+ {2, [3]byte{0xc4, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}},
+ {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
+ {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
+ {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
+ {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
+ {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc4, 0x90, 0x00}},
+ {2, [3]byte{0xc4, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc4, 0x8f, 0x00}}, {2, [3]byte{0xc5, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}},
+ {2, [3]byte{0xc4, 0x9b, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}},
+ {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
+ {3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xc5, 0xa2, 0x00}},
+ {2, [3]byte{0xc5, 0xae, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}},
+ {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}},
+ {2, [3]byte{0xc5, 0x84, 0x00}}, {2, [3]byte{0xc5, 0x88, 0x00}},
+ {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0xa1, 0x00}},
+ {2, [3]byte{0xc5, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x9a, 0x00}},
+ {2, [3]byte{0xc5, 0x95, 0x00}}, {2, [3]byte{0xc5, 0xb0, 0x00}},
+ {2, [3]byte{0xc3, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+ {2, [3]byte{0xc5, 0xa3, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}},
+ {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}},
+ {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}},
+ {2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
+ {2, [3]byte{0xcb, 0x99, 0x00}}, {2, [3]byte{0xc5, 0xb1, 0x00}},
+ {2, [3]byte{0xc5, 0x98, 0x00}}, {2, [3]byte{0xc5, 0x99, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xff0000a0, 0xcf0000a4, 0xf50000a7, 0xf90000a8, 0xae0000ab, 0xaa0000ac, 0xf00000ad, 0xf80000b0,
+ 0xef0000b4, 0xf70000b8, 0xaf0000bb, 0xb50000c1, 0xb60000c2, 0x8e0000c4, 0x800000c7, 0x900000c9,
+ 0xd30000cb, 0xd60000cd, 0xd70000ce, 0xe00000d3, 0xe20000d4, 0x990000d6, 0x9e0000d7, 0xe90000da,
+ 0x9a0000dc, 0xed0000dd, 0xe10000df, 0xa00000e1, 0x830000e2, 0x840000e4, 0x870000e7, 0x820000e9,
+ 0x890000eb, 0xa10000ed, 0x8c0000ee, 0xa20000f3, 0x930000f4, 0x940000f6, 0xf60000f7, 0xa30000fa,
+ 0x810000fc, 0xec0000fd, 0xc6000102, 0xc7000103, 0xa4000104, 0xa5000105, 0x8f000106, 0x86000107,
+ 0xac00010c, 0x9f00010d, 0xd200010e, 0xd400010f, 0xd1000110, 0xd0000111, 0xa8000118, 0xa9000119,
+ 0xb700011a, 0xd800011b, 0x91000139, 0x9200013a, 0x9500013d, 0x9600013e, 0x9d000141, 0x88000142,
+ 0xe3000143, 0xe4000144, 0xd5000147, 0xe5000148, 0x8a000150, 0x8b000151, 0xe8000154, 0xea000155,
+ 0xfc000158, 0xfd000159, 0x9700015a, 0x9800015b, 0xb800015e, 0xad00015f, 0xe6000160, 0xe7000161,
+ 0xdd000162, 0xee000163, 0x9b000164, 0x9c000165, 0xde00016e, 0x8500016f, 0xeb000170, 0xfb000171,
+ 0x8d000179, 0xab00017a, 0xbd00017b, 0xbe00017c, 0xa600017d, 0xa700017e, 0xf30002c7, 0xf40002d8,
+ 0xfa0002d9, 0xf20002db, 0xf10002dd, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514,
+ 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551,
+ 0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569,
+ 0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
+ },
+}
+
+// CodePage855 is the IBM Code Page 855 encoding.
+var CodePage855 *Charmap = &codePage855
+
+var codePage855 = Charmap{
+ name: "IBM Code Page 855",
+ mib: identifier.IBM855,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xd1, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x82, 0x00}},
+ {2, [3]byte{0xd1, 0x93, 0x00}}, {2, [3]byte{0xd0, 0x83, 0x00}},
+ {2, [3]byte{0xd1, 0x91, 0x00}}, {2, [3]byte{0xd0, 0x81, 0x00}},
+ {2, [3]byte{0xd1, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x84, 0x00}},
+ {2, [3]byte{0xd1, 0x95, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}},
+ {2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x86, 0x00}},
+ {2, [3]byte{0xd1, 0x97, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}},
+ {2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x88, 0x00}},
+ {2, [3]byte{0xd1, 0x99, 0x00}}, {2, [3]byte{0xd0, 0x89, 0x00}},
+ {2, [3]byte{0xd1, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x8a, 0x00}},
+ {2, [3]byte{0xd1, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x8b, 0x00}},
+ {2, [3]byte{0xd1, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x8c, 0x00}},
+ {2, [3]byte{0xd1, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x8e, 0x00}},
+ {2, [3]byte{0xd1, 0x9f, 0x00}}, {2, [3]byte{0xd0, 0x8f, 0x00}},
+ {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0xae, 0x00}},
+ {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd0, 0xaa, 0x00}},
+ {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0x90, 0x00}},
+ {2, [3]byte{0xd0, 0xb1, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}},
+ {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd0, 0xa6, 0x00}},
+ {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0x94, 0x00}},
+ {2, [3]byte{0xd0, 0xb5, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
+ {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd0, 0xa4, 0x00}},
+ {2, [3]byte{0xd0, 0xb3, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
+ {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
+ {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
+ {3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xd1, 0x85, 0x00}},
+ {2, [3]byte{0xd0, 0xa5, 0x00}}, {2, [3]byte{0xd0, 0xb8, 0x00}},
+ {2, [3]byte{0xd0, 0x98, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
+ {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
+ {3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xd0, 0xb9, 0x00}},
+ {2, [3]byte{0xd0, 0x99, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}},
+ {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
+ {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
+ {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
+ {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0x9a, 0x00}},
+ {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
+ {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
+ {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
+ {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
+ {2, [3]byte{0xd0, 0xbb, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}},
+ {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0x9c, 0x00}},
+ {2, [3]byte{0xd0, 0xbd, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}},
+ {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0x9e, 0x00}},
+ {2, [3]byte{0xd0, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}},
+ {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
+ {3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xd0, 0x9f, 0x00}},
+ {2, [3]byte{0xd1, 0x8f, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}},
+ {2, [3]byte{0xd0, 0xaf, 0x00}}, {2, [3]byte{0xd1, 0x80, 0x00}},
+ {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
+ {2, [3]byte{0xd0, 0xa1, 0x00}}, {2, [3]byte{0xd1, 0x82, 0x00}},
+ {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
+ {2, [3]byte{0xd0, 0xa3, 0x00}}, {2, [3]byte{0xd0, 0xb6, 0x00}},
+ {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0xb2, 0x00}},
+ {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd1, 0x8c, 0x00}},
+ {2, [3]byte{0xd0, 0xac, 0x00}}, {3, [3]byte{0xe2, 0x84, 0x96}},
+ {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
+ {2, [3]byte{0xd0, 0xab, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}},
+ {2, [3]byte{0xd0, 0x97, 0x00}}, {2, [3]byte{0xd1, 0x88, 0x00}},
+ {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}},
+ {2, [3]byte{0xd0, 0xad, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
+ {2, [3]byte{0xd0, 0xa9, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}},
+ {2, [3]byte{0xd0, 0xa7, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xff0000a0, 0xcf0000a4, 0xfd0000a7, 0xae0000ab, 0xf00000ad, 0xaf0000bb, 0x85000401, 0x81000402,
+ 0x83000403, 0x87000404, 0x89000405, 0x8b000406, 0x8d000407, 0x8f000408, 0x91000409, 0x9300040a,
+ 0x9500040b, 0x9700040c, 0x9900040e, 0x9b00040f, 0xa1000410, 0xa3000411, 0xec000412, 0xad000413,
+ 0xa7000414, 0xa9000415, 0xea000416, 0xf4000417, 0xb8000418, 0xbe000419, 0xc700041a, 0xd100041b,
+ 0xd300041c, 0xd500041d, 0xd700041e, 0xdd00041f, 0xe2000420, 0xe4000421, 0xe6000422, 0xe8000423,
+ 0xab000424, 0xb6000425, 0xa5000426, 0xfc000427, 0xf6000428, 0xfa000429, 0x9f00042a, 0xf200042b,
+ 0xee00042c, 0xf800042d, 0x9d00042e, 0xe000042f, 0xa0000430, 0xa2000431, 0xeb000432, 0xac000433,
+ 0xa6000434, 0xa8000435, 0xe9000436, 0xf3000437, 0xb7000438, 0xbd000439, 0xc600043a, 0xd000043b,
+ 0xd200043c, 0xd400043d, 0xd600043e, 0xd800043f, 0xe1000440, 0xe3000441, 0xe5000442, 0xe7000443,
+ 0xaa000444, 0xb5000445, 0xa4000446, 0xfb000447, 0xf5000448, 0xf9000449, 0x9e00044a, 0xf100044b,
+ 0xed00044c, 0xf700044d, 0x9c00044e, 0xde00044f, 0x84000451, 0x80000452, 0x82000453, 0x86000454,
+ 0x88000455, 0x8a000456, 0x8c000457, 0x8e000458, 0x90000459, 0x9200045a, 0x9400045b, 0x9600045c,
+ 0x9800045e, 0x9a00045f, 0xef002116, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514,
+ 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551,
+ 0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569,
+ 0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
+ },
+}
+
+// CodePage858 is the Windows Code Page 858 encoding.
+var CodePage858 *Charmap = &codePage858
+
+var codePage858 = Charmap{
+ name: "Windows Code Page 858",
+ mib: identifier.IBM00858,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
+ {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}},
+ {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
+ {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}},
+ {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}},
+ {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc6, 0x92, 0x00}},
+ {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
+ {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
+ {2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
+ {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
+ {3, [3]byte{0xe2, 0x94, 0xa4}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}},
+ {2, [3]byte{0xc2, 0xa9, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
+ {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
+ {3, [3]byte{0xe2, 0x95, 0x9d}}, {2, [3]byte{0xc2, 0xa2, 0x00}},
+ {2, [3]byte{0xc2, 0xa5, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x90}},
+ {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
+ {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
+ {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
+ {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
+ {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
+ {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
+ {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
+ {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
+ {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0x90, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}},
+ {2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}},
+ {2, [3]byte{0xc3, 0x8f, 0x00}}, {3, [3]byte{0xe2, 0x94, 0x98}},
+ {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
+ {3, [3]byte{0xe2, 0x96, 0x84}}, {2, [3]byte{0xc2, 0xa6, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {3, [3]byte{0xe2, 0x96, 0x80}},
+ {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
+ {2, [3]byte{0xc3, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xbe, 0x00}},
+ {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9a, 0x00}},
+ {2, [3]byte{0xc3, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+ {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}},
+ {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x97}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
+ {2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xff0000a0, 0xad0000a1, 0xbd0000a2, 0x9c0000a3, 0xcf0000a4, 0xbe0000a5, 0xdd0000a6, 0xf50000a7,
+ 0xf90000a8, 0xb80000a9, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf00000ad, 0xa90000ae, 0xee0000af,
+ 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xfc0000b3, 0xef0000b4, 0xe60000b5, 0xf40000b6, 0xfa0000b7,
+ 0xf70000b8, 0xfb0000b9, 0xa70000ba, 0xaf0000bb, 0xac0000bc, 0xab0000bd, 0xf30000be, 0xa80000bf,
+ 0xb70000c0, 0xb50000c1, 0xb60000c2, 0xc70000c3, 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7,
+ 0xd40000c8, 0x900000c9, 0xd20000ca, 0xd30000cb, 0xde0000cc, 0xd60000cd, 0xd70000ce, 0xd80000cf,
+ 0xd10000d0, 0xa50000d1, 0xe30000d2, 0xe00000d3, 0xe20000d4, 0xe50000d5, 0x990000d6, 0x9e0000d7,
+ 0x9d0000d8, 0xeb0000d9, 0xe90000da, 0xea0000db, 0x9a0000dc, 0xed0000dd, 0xe80000de, 0xe10000df,
+ 0x850000e0, 0xa00000e1, 0x830000e2, 0xc60000e3, 0x840000e4, 0x860000e5, 0x910000e6, 0x870000e7,
+ 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, 0x8c0000ee, 0x8b0000ef,
+ 0xd00000f0, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0xe40000f5, 0x940000f6, 0xf60000f7,
+ 0x9b0000f8, 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0xec0000fd, 0xe70000fe, 0x980000ff,
+ 0x9f000192, 0xf2002017, 0xd50020ac, 0xc4002500, 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514,
+ 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c, 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551,
+ 0xc9002554, 0xbb002557, 0xc800255a, 0xbc00255d, 0xcc002560, 0xb9002563, 0xcb002566, 0xca002569,
+ 0xce00256c, 0xdf002580, 0xdc002584, 0xdb002588, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
+ },
+}
+
+// CodePage860 is the IBM Code Page 860 encoding.
+var CodePage860 *Charmap = &codePage860
+
+var codePage860 = Charmap{
+ name: "IBM Code Page 860",
+ mib: identifier.IBM860,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
+ {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
+ {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}},
+ {2, [3]byte{0xc3, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0x8a, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}},
+ {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x82, 0x00}},
+ {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+ {2, [3]byte{0xc3, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}},
+ {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
+ {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
+ {2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
+ {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
+ {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}},
+ {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}},
+ {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
+ {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
+ {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
+ {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}},
+ {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
+ {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
+ {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
+ {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}},
+ {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
+ {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
+ {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
+ {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
+ {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}},
+ {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}},
+ {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}},
+ {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}},
+ {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}},
+ {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
+ {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}},
+ {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}},
+ {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}},
+ {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
+ {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}},
+ {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}},
+ {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}},
+ {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}},
+ {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}},
+ {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}},
+ {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
+ {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}},
+ {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
+ {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xff0000a0, 0xad0000a1, 0x9b0000a2, 0x9c0000a3, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf80000b0,
+ 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xaf0000bb, 0xac0000bc, 0xab0000bd,
+ 0xa80000bf, 0x910000c0, 0x860000c1, 0x8f0000c2, 0x8e0000c3, 0x800000c7, 0x920000c8, 0x900000c9,
+ 0x890000ca, 0x980000cc, 0x8b0000cd, 0xa50000d1, 0xa90000d2, 0x9f0000d3, 0x8c0000d4, 0x990000d5,
+ 0x9d0000d9, 0x960000da, 0x9a0000dc, 0xe10000df, 0x850000e0, 0xa00000e1, 0x830000e2, 0x840000e3,
+ 0x870000e7, 0x8a0000e8, 0x820000e9, 0x880000ea, 0x8d0000ec, 0xa10000ed, 0xa40000f1, 0x950000f2,
+ 0xa20000f3, 0x930000f4, 0x940000f5, 0xf60000f7, 0x970000f9, 0xa30000fa, 0x810000fc, 0xe2000393,
+ 0xe9000398, 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0,
+ 0xe50003c3, 0xe70003c4, 0xed0003c6, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e,
+ 0xef002229, 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xf4002320, 0xf5002321, 0xc4002500,
+ 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c,
+ 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555,
+ 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d,
+ 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565,
+ 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580,
+ 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
+ },
+}
+
+// CodePage862 is the IBM Code Page 862 encoding.
+var CodePage862 *Charmap = &codePage862
+
+var codePage862 = Charmap{
+ name: "IBM Code Page 862",
+ mib: identifier.PC862LatinHebrew,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xd7, 0x90, 0x00}}, {2, [3]byte{0xd7, 0x91, 0x00}},
+ {2, [3]byte{0xd7, 0x92, 0x00}}, {2, [3]byte{0xd7, 0x93, 0x00}},
+ {2, [3]byte{0xd7, 0x94, 0x00}}, {2, [3]byte{0xd7, 0x95, 0x00}},
+ {2, [3]byte{0xd7, 0x96, 0x00}}, {2, [3]byte{0xd7, 0x97, 0x00}},
+ {2, [3]byte{0xd7, 0x98, 0x00}}, {2, [3]byte{0xd7, 0x99, 0x00}},
+ {2, [3]byte{0xd7, 0x9a, 0x00}}, {2, [3]byte{0xd7, 0x9b, 0x00}},
+ {2, [3]byte{0xd7, 0x9c, 0x00}}, {2, [3]byte{0xd7, 0x9d, 0x00}},
+ {2, [3]byte{0xd7, 0x9e, 0x00}}, {2, [3]byte{0xd7, 0x9f, 0x00}},
+ {2, [3]byte{0xd7, 0xa0, 0x00}}, {2, [3]byte{0xd7, 0xa1, 0x00}},
+ {2, [3]byte{0xd7, 0xa2, 0x00}}, {2, [3]byte{0xd7, 0xa3, 0x00}},
+ {2, [3]byte{0xd7, 0xa4, 0x00}}, {2, [3]byte{0xd7, 0xa5, 0x00}},
+ {2, [3]byte{0xd7, 0xa6, 0x00}}, {2, [3]byte{0xd7, 0xa7, 0x00}},
+ {2, [3]byte{0xd7, 0xa8, 0x00}}, {2, [3]byte{0xd7, 0xa9, 0x00}},
+ {2, [3]byte{0xd7, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}},
+ {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc6, 0x92, 0x00}},
+ {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
+ {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
+ {2, [3]byte{0xc2, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
+ {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
+ {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}},
+ {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}},
+ {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
+ {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
+ {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
+ {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}},
+ {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
+ {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
+ {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
+ {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}},
+ {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
+ {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
+ {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
+ {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
+ {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}},
+ {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}},
+ {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}},
+ {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}},
+ {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}},
+ {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
+ {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}},
+ {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}},
+ {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}},
+ {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
+ {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}},
+ {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}},
+ {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}},
+ {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}},
+ {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}},
+ {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}},
+ {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
+ {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}},
+ {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
+ {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xff0000a0, 0xad0000a1, 0x9b0000a2, 0x9c0000a3, 0x9d0000a5, 0xa60000aa, 0xae0000ab, 0xaa0000ac,
+ 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xaf0000bb, 0xac0000bc,
+ 0xab0000bd, 0xa80000bf, 0xa50000d1, 0xe10000df, 0xa00000e1, 0xa10000ed, 0xa40000f1, 0xa20000f3,
+ 0xf60000f7, 0xa30000fa, 0x9f000192, 0xe2000393, 0xe9000398, 0xe40003a3, 0xe80003a6, 0xea0003a9,
+ 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3, 0xe70003c4, 0xed0003c6, 0x800005d0,
+ 0x810005d1, 0x820005d2, 0x830005d3, 0x840005d4, 0x850005d5, 0x860005d6, 0x870005d7, 0x880005d8,
+ 0x890005d9, 0x8a0005da, 0x8b0005db, 0x8c0005dc, 0x8d0005dd, 0x8e0005de, 0x8f0005df, 0x900005e0,
+ 0x910005e1, 0x920005e2, 0x930005e3, 0x940005e4, 0x950005e5, 0x960005e6, 0x970005e7, 0x980005e8,
+ 0x990005e9, 0x9a0005ea, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229,
+ 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500,
+ 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c,
+ 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555,
+ 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d,
+ 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565,
+ 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580,
+ 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
+ },
+}
+
+// CodePage863 is the IBM Code Page 863 encoding.
+var CodePage863 *Charmap = &codePage863
+
+var codePage863 = Charmap{
+ name: "IBM Code Page 863",
+ mib: identifier.IBM863,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
+ {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x97}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0x88, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+ {2, [3]byte{0xc3, 0x8b, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa2, 0x00}},
+ {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9b, 0x00}}, {2, [3]byte{0xc6, 0x92, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb4, 0x00}},
+ {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
+ {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
+ {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
+ {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
+ {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}},
+ {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}},
+ {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
+ {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
+ {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
+ {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}},
+ {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
+ {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
+ {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
+ {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}},
+ {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
+ {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
+ {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
+ {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
+ {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}},
+ {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}},
+ {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}},
+ {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}},
+ {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}},
+ {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
+ {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}},
+ {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}},
+ {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}},
+ {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
+ {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}},
+ {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}},
+ {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}},
+ {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}},
+ {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}},
+ {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}},
+ {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
+ {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}},
+ {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
+ {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xff0000a0, 0x9b0000a2, 0x9c0000a3, 0x980000a4, 0xa00000a6, 0x8f0000a7, 0xa40000a8, 0xae0000ab,
+ 0xaa0000ac, 0xa70000af, 0xf80000b0, 0xf10000b1, 0xfd0000b2, 0xa60000b3, 0xa10000b4, 0xe60000b5,
+ 0x860000b6, 0xfa0000b7, 0xa50000b8, 0xaf0000bb, 0xac0000bc, 0xab0000bd, 0xad0000be, 0x8e0000c0,
+ 0x840000c2, 0x800000c7, 0x910000c8, 0x900000c9, 0x920000ca, 0x940000cb, 0xa80000ce, 0x950000cf,
+ 0x990000d4, 0x9d0000d9, 0x9e0000db, 0x9a0000dc, 0xe10000df, 0x850000e0, 0x830000e2, 0x870000e7,
+ 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8c0000ee, 0x8b0000ef, 0xa20000f3, 0x930000f4,
+ 0xf60000f7, 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0x9f000192, 0xe2000393, 0xe9000398,
+ 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3,
+ 0xe70003c4, 0xed0003c6, 0x8d002017, 0xfc00207f, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229,
+ 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500,
+ 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c,
+ 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555,
+ 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d,
+ 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565,
+ 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580,
+ 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
+ },
+}
+
+// CodePage865 is the IBM Code Page 865 encoding.
+var CodePage865 *Charmap = &codePage865
+
+var codePage865 = Charmap{
+ name: "IBM Code Page 865",
+ mib: identifier.IBM865,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
+ {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa0, 0x00}},
+ {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
+ {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}},
+ {2, [3]byte{0xc2, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xa7}}, {2, [3]byte{0xc6, 0x92, 0x00}},
+ {2, [3]byte{0xc3, 0xa1, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xba, 0x00}},
+ {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
+ {2, [3]byte{0xc2, 0xbf, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0x90}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
+ {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
+ {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}},
+ {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}},
+ {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
+ {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
+ {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
+ {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}},
+ {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
+ {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
+ {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
+ {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}},
+ {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
+ {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
+ {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
+ {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
+ {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}},
+ {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}},
+ {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}},
+ {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}},
+ {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}},
+ {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
+ {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}},
+ {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}},
+ {2, [3]byte{0xce, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xce, 0x93, 0x00}}, {2, [3]byte{0xcf, 0x80, 0x00}},
+ {2, [3]byte{0xce, 0xa3, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
+ {2, [3]byte{0xc2, 0xb5, 0x00}}, {2, [3]byte{0xcf, 0x84, 0x00}},
+ {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0x98, 0x00}},
+ {2, [3]byte{0xce, 0xa9, 0x00}}, {2, [3]byte{0xce, 0xb4, 0x00}},
+ {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xcf, 0x86, 0x00}},
+ {2, [3]byte{0xce, 0xb5, 0x00}}, {3, [3]byte{0xe2, 0x88, 0xa9}},
+ {3, [3]byte{0xe2, 0x89, 0xa1}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {3, [3]byte{0xe2, 0x89, 0xa5}}, {3, [3]byte{0xe2, 0x89, 0xa4}},
+ {3, [3]byte{0xe2, 0x8c, 0xa0}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
+ {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}},
+ {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
+ {3, [3]byte{0xe2, 0x81, 0xbf}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xff0000a0, 0xad0000a1, 0x9c0000a3, 0xaf0000a4, 0xa60000aa, 0xae0000ab, 0xaa0000ac, 0xf80000b0,
+ 0xf10000b1, 0xfd0000b2, 0xe60000b5, 0xfa0000b7, 0xa70000ba, 0xac0000bc, 0xab0000bd, 0xa80000bf,
+ 0x8e0000c4, 0x8f0000c5, 0x920000c6, 0x800000c7, 0x900000c9, 0xa50000d1, 0x990000d6, 0x9d0000d8,
+ 0x9a0000dc, 0xe10000df, 0x850000e0, 0xa00000e1, 0x830000e2, 0x840000e4, 0x860000e5, 0x910000e6,
+ 0x870000e7, 0x8a0000e8, 0x820000e9, 0x880000ea, 0x890000eb, 0x8d0000ec, 0xa10000ed, 0x8c0000ee,
+ 0x8b0000ef, 0xa40000f1, 0x950000f2, 0xa20000f3, 0x930000f4, 0x940000f6, 0xf60000f7, 0x9b0000f8,
+ 0x970000f9, 0xa30000fa, 0x960000fb, 0x810000fc, 0x980000ff, 0x9f000192, 0xe2000393, 0xe9000398,
+ 0xe40003a3, 0xe80003a6, 0xea0003a9, 0xe00003b1, 0xeb0003b4, 0xee0003b5, 0xe30003c0, 0xe50003c3,
+ 0xe70003c4, 0xed0003c6, 0xfc00207f, 0x9e0020a7, 0xf9002219, 0xfb00221a, 0xec00221e, 0xef002229,
+ 0xf7002248, 0xf0002261, 0xf3002264, 0xf2002265, 0xa9002310, 0xf4002320, 0xf5002321, 0xc4002500,
+ 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c,
+ 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555,
+ 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d,
+ 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565,
+ 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580,
+ 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
+ },
+}
+
+// CodePage866 is the IBM Code Page 866 encoding.
+var CodePage866 *Charmap = &codePage866
+
+var codePage866 = Charmap{
+ name: "IBM Code Page 866",
+ mib: identifier.IBM866,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}},
+ {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
+ {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
+ {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}},
+ {2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}},
+ {2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}},
+ {2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}},
+ {2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}},
+ {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}},
+ {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}},
+ {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}},
+ {2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}},
+ {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}},
+ {2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}},
+ {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}},
+ {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}},
+ {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}},
+ {2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}},
+ {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}},
+ {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}},
+ {2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}},
+ {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}},
+ {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}},
+ {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
+ {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x94, 0x82}},
+ {3, [3]byte{0xe2, 0x94, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa1}},
+ {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0x96}},
+ {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
+ {3, [3]byte{0xe2, 0x95, 0x91}}, {3, [3]byte{0xe2, 0x95, 0x97}},
+ {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
+ {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x94, 0x90}},
+ {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
+ {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0x9c}},
+ {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0xbc}},
+ {3, [3]byte{0xe2, 0x95, 0x9e}}, {3, [3]byte{0xe2, 0x95, 0x9f}},
+ {3, [3]byte{0xe2, 0x95, 0x9a}}, {3, [3]byte{0xe2, 0x95, 0x94}},
+ {3, [3]byte{0xe2, 0x95, 0xa9}}, {3, [3]byte{0xe2, 0x95, 0xa6}},
+ {3, [3]byte{0xe2, 0x95, 0xa0}}, {3, [3]byte{0xe2, 0x95, 0x90}},
+ {3, [3]byte{0xe2, 0x95, 0xac}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
+ {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa4}},
+ {3, [3]byte{0xe2, 0x95, 0xa5}}, {3, [3]byte{0xe2, 0x95, 0x99}},
+ {3, [3]byte{0xe2, 0x95, 0x98}}, {3, [3]byte{0xe2, 0x95, 0x92}},
+ {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0xab}},
+ {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x94, 0x98}},
+ {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x88}},
+ {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x8c}},
+ {3, [3]byte{0xe2, 0x96, 0x90}}, {3, [3]byte{0xe2, 0x96, 0x80}},
+ {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
+ {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
+ {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}},
+ {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}},
+ {2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
+ {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
+ {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}},
+ {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}},
+ {2, [3]byte{0xd0, 0x81, 0x00}}, {2, [3]byte{0xd1, 0x91, 0x00}},
+ {2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x94, 0x00}},
+ {2, [3]byte{0xd0, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}},
+ {2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x9e, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x99}},
+ {2, [3]byte{0xc2, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
+ {3, [3]byte{0xe2, 0x84, 0x96}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
+ {3, [3]byte{0xe2, 0x96, 0xa0}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xff0000a0, 0xfd0000a4, 0xf80000b0, 0xfa0000b7, 0xf0000401, 0xf2000404, 0xf4000407, 0xf600040e,
+ 0x80000410, 0x81000411, 0x82000412, 0x83000413, 0x84000414, 0x85000415, 0x86000416, 0x87000417,
+ 0x88000418, 0x89000419, 0x8a00041a, 0x8b00041b, 0x8c00041c, 0x8d00041d, 0x8e00041e, 0x8f00041f,
+ 0x90000420, 0x91000421, 0x92000422, 0x93000423, 0x94000424, 0x95000425, 0x96000426, 0x97000427,
+ 0x98000428, 0x99000429, 0x9a00042a, 0x9b00042b, 0x9c00042c, 0x9d00042d, 0x9e00042e, 0x9f00042f,
+ 0xa0000430, 0xa1000431, 0xa2000432, 0xa3000433, 0xa4000434, 0xa5000435, 0xa6000436, 0xa7000437,
+ 0xa8000438, 0xa9000439, 0xaa00043a, 0xab00043b, 0xac00043c, 0xad00043d, 0xae00043e, 0xaf00043f,
+ 0xe0000440, 0xe1000441, 0xe2000442, 0xe3000443, 0xe4000444, 0xe5000445, 0xe6000446, 0xe7000447,
+ 0xe8000448, 0xe9000449, 0xea00044a, 0xeb00044b, 0xec00044c, 0xed00044d, 0xee00044e, 0xef00044f,
+ 0xf1000451, 0xf3000454, 0xf5000457, 0xf700045e, 0xfc002116, 0xf9002219, 0xfb00221a, 0xc4002500,
+ 0xb3002502, 0xda00250c, 0xbf002510, 0xc0002514, 0xd9002518, 0xc300251c, 0xb4002524, 0xc200252c,
+ 0xc1002534, 0xc500253c, 0xcd002550, 0xba002551, 0xd5002552, 0xd6002553, 0xc9002554, 0xb8002555,
+ 0xb7002556, 0xbb002557, 0xd4002558, 0xd3002559, 0xc800255a, 0xbe00255b, 0xbd00255c, 0xbc00255d,
+ 0xc600255e, 0xc700255f, 0xcc002560, 0xb5002561, 0xb6002562, 0xb9002563, 0xd1002564, 0xd2002565,
+ 0xcb002566, 0xcf002567, 0xd0002568, 0xca002569, 0xd800256a, 0xd700256b, 0xce00256c, 0xdf002580,
+ 0xdc002584, 0xdb002588, 0xdd00258c, 0xde002590, 0xb0002591, 0xb1002592, 0xb2002593, 0xfe0025a0,
+ },
+}
+
+// CodePage1047 is the IBM Code Page 1047 encoding.
+var CodePage1047 *Charmap = &codePage1047
+
+var codePage1047 = Charmap{
+ name: "IBM Code Page 1047",
+ mib: identifier.IBM1047,
+ asciiSuperset: false,
+ low: 0x00,
+ replacement: 0x3f,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
+ {2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
+ {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
+ {2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}},
+ {1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
+ {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
+ {2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
+ {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
+ {2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
+ {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}},
+ {1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x3b, 0x00, 0x00}}, {1, [3]byte{0x5e, 0x00, 0x00}},
+ {1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}},
+ {1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+ {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}},
+ {1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}},
+ {1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}},
+ {1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}},
+ {1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa4, 0x00}},
+ {2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}},
+ {1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}},
+ {1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}},
+ {1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}},
+ {1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+ {2, [3]byte{0xc3, 0x90, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}},
+ {2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
+ {2, [3]byte{0xc3, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
+ {2, [3]byte{0xc2, 0xaf, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
+ {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}},
+ {1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}},
+ {1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}},
+ {1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}},
+ {1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}},
+ {1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}},
+ {1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}},
+ {1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
+ {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007,
+ 0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017,
+ 0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027,
+ 0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f,
+ 0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037,
+ 0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f,
+ 0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047,
+ 0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f,
+ 0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057,
+ 0xe7000058, 0xe8000059, 0xe900005a, 0xad00005b, 0xe000005c, 0xbd00005d, 0x5f00005e, 0x6d00005f,
+ 0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067,
+ 0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f,
+ 0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077,
+ 0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f,
+ 0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087,
+ 0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f,
+ 0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097,
+ 0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f,
+ 0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0x9f0000a4, 0xb20000a5, 0x6a0000a6, 0xb50000a7,
+ 0xbb0000a8, 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0xb00000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af,
+ 0x900000b0, 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7,
+ 0x9d0000b8, 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf,
+ 0x640000c0, 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7,
+ 0x740000c8, 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf,
+ 0xac0000d0, 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7,
+ 0x800000d8, 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xba0000dd, 0xae0000de, 0x590000df,
+ 0x440000e0, 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7,
+ 0x540000e8, 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef,
+ 0x8c0000f0, 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7,
+ 0x700000f8, 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff,
+ },
+}
+
+// CodePage1140 is the IBM Code Page 1140 encoding.
+var CodePage1140 *Charmap = &codePage1140
+
+var codePage1140 = Charmap{
+ name: "IBM Code Page 1140",
+ mib: identifier.IBM01140,
+ asciiSuperset: false,
+ low: 0x00,
+ replacement: 0x3f,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x9c, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x86, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x97, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
+ {2, [3]byte{0xc2, 0x8e, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x9d, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
+ {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
+ {2, [3]byte{0xc2, 0x84, 0x00}}, {1, [3]byte{0x0a, 0x00, 0x00}},
+ {1, [3]byte{0x17, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
+ {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
+ {2, [3]byte{0xc2, 0x8c, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
+ {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
+ {2, [3]byte{0xc2, 0x96, 0x00}}, {1, [3]byte{0x04, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
+ {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x9e, 0x00}}, {1, [3]byte{0x1a, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa0, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa4, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc3, 0xa7, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {1, [3]byte{0x2e, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x28, 0x00, 0x00}},
+ {1, [3]byte{0x2b, 0x00, 0x00}}, {1, [3]byte{0x7c, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {1, [3]byte{0x21, 0x00, 0x00}}, {1, [3]byte{0x24, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x3b, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xac, 0x00}},
+ {1, [3]byte{0x2d, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x84, 0x00}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {1, [3]byte{0x2c, 0x00, 0x00}},
+ {1, [3]byte{0x25, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {1, [3]byte{0x60, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x3d, 0x00, 0x00}}, {1, [3]byte{0x22, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xab, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+ {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {1, [3]byte{0x6a, 0x00, 0x00}},
+ {1, [3]byte{0x6b, 0x00, 0x00}}, {1, [3]byte{0x6c, 0x00, 0x00}},
+ {1, [3]byte{0x6d, 0x00, 0x00}}, {1, [3]byte{0x6e, 0x00, 0x00}},
+ {1, [3]byte{0x6f, 0x00, 0x00}}, {1, [3]byte{0x70, 0x00, 0x00}},
+ {1, [3]byte{0x71, 0x00, 0x00}}, {1, [3]byte{0x72, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xba, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}},
+ {2, [3]byte{0xc2, 0xb5, 0x00}}, {1, [3]byte{0x7e, 0x00, 0x00}},
+ {1, [3]byte{0x73, 0x00, 0x00}}, {1, [3]byte{0x74, 0x00, 0x00}},
+ {1, [3]byte{0x75, 0x00, 0x00}}, {1, [3]byte{0x76, 0x00, 0x00}},
+ {1, [3]byte{0x77, 0x00, 0x00}}, {1, [3]byte{0x78, 0x00, 0x00}},
+ {1, [3]byte{0x79, 0x00, 0x00}}, {1, [3]byte{0x7a, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+ {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+ {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xae, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xa9, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xbc, 0x00}},
+ {2, [3]byte{0xc2, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xbe, 0x00}},
+ {1, [3]byte{0x5b, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {1, [3]byte{0x7b, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb2, 0x00}},
+ {2, [3]byte{0xc3, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {1, [3]byte{0x7d, 0x00, 0x00}}, {1, [3]byte{0x4a, 0x00, 0x00}},
+ {1, [3]byte{0x4b, 0x00, 0x00}}, {1, [3]byte{0x4c, 0x00, 0x00}},
+ {1, [3]byte{0x4d, 0x00, 0x00}}, {1, [3]byte{0x4e, 0x00, 0x00}},
+ {1, [3]byte{0x4f, 0x00, 0x00}}, {1, [3]byte{0x50, 0x00, 0x00}},
+ {1, [3]byte{0x51, 0x00, 0x00}}, {1, [3]byte{0x52, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xb9, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {1, [3]byte{0x53, 0x00, 0x00}}, {1, [3]byte{0x54, 0x00, 0x00}},
+ {1, [3]byte{0x55, 0x00, 0x00}}, {1, [3]byte{0x56, 0x00, 0x00}},
+ {1, [3]byte{0x57, 0x00, 0x00}}, {1, [3]byte{0x58, 0x00, 0x00}},
+ {1, [3]byte{0x59, 0x00, 0x00}}, {1, [3]byte{0x5a, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x92, 0x00}},
+ {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0xb3, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x37000004, 0x2d000005, 0x2e000006, 0x2f000007,
+ 0x16000008, 0x05000009, 0x2500000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x3c000014, 0x3d000015, 0x32000016, 0x26000017,
+ 0x18000018, 0x19000019, 0x3f00001a, 0x2700001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x40000020, 0x5a000021, 0x7f000022, 0x7b000023, 0x5b000024, 0x6c000025, 0x50000026, 0x7d000027,
+ 0x4d000028, 0x5d000029, 0x5c00002a, 0x4e00002b, 0x6b00002c, 0x6000002d, 0x4b00002e, 0x6100002f,
+ 0xf0000030, 0xf1000031, 0xf2000032, 0xf3000033, 0xf4000034, 0xf5000035, 0xf6000036, 0xf7000037,
+ 0xf8000038, 0xf9000039, 0x7a00003a, 0x5e00003b, 0x4c00003c, 0x7e00003d, 0x6e00003e, 0x6f00003f,
+ 0x7c000040, 0xc1000041, 0xc2000042, 0xc3000043, 0xc4000044, 0xc5000045, 0xc6000046, 0xc7000047,
+ 0xc8000048, 0xc9000049, 0xd100004a, 0xd200004b, 0xd300004c, 0xd400004d, 0xd500004e, 0xd600004f,
+ 0xd7000050, 0xd8000051, 0xd9000052, 0xe2000053, 0xe3000054, 0xe4000055, 0xe5000056, 0xe6000057,
+ 0xe7000058, 0xe8000059, 0xe900005a, 0xba00005b, 0xe000005c, 0xbb00005d, 0xb000005e, 0x6d00005f,
+ 0x79000060, 0x81000061, 0x82000062, 0x83000063, 0x84000064, 0x85000065, 0x86000066, 0x87000067,
+ 0x88000068, 0x89000069, 0x9100006a, 0x9200006b, 0x9300006c, 0x9400006d, 0x9500006e, 0x9600006f,
+ 0x97000070, 0x98000071, 0x99000072, 0xa2000073, 0xa3000074, 0xa4000075, 0xa5000076, 0xa6000077,
+ 0xa7000078, 0xa8000079, 0xa900007a, 0xc000007b, 0x4f00007c, 0xd000007d, 0xa100007e, 0x0700007f,
+ 0x20000080, 0x21000081, 0x22000082, 0x23000083, 0x24000084, 0x15000085, 0x06000086, 0x17000087,
+ 0x28000088, 0x29000089, 0x2a00008a, 0x2b00008b, 0x2c00008c, 0x0900008d, 0x0a00008e, 0x1b00008f,
+ 0x30000090, 0x31000091, 0x1a000092, 0x33000093, 0x34000094, 0x35000095, 0x36000096, 0x08000097,
+ 0x38000098, 0x39000099, 0x3a00009a, 0x3b00009b, 0x0400009c, 0x1400009d, 0x3e00009e, 0xff00009f,
+ 0x410000a0, 0xaa0000a1, 0x4a0000a2, 0xb10000a3, 0xb20000a5, 0x6a0000a6, 0xb50000a7, 0xbd0000a8,
+ 0xb40000a9, 0x9a0000aa, 0x8a0000ab, 0x5f0000ac, 0xca0000ad, 0xaf0000ae, 0xbc0000af, 0x900000b0,
+ 0x8f0000b1, 0xea0000b2, 0xfa0000b3, 0xbe0000b4, 0xa00000b5, 0xb60000b6, 0xb30000b7, 0x9d0000b8,
+ 0xda0000b9, 0x9b0000ba, 0x8b0000bb, 0xb70000bc, 0xb80000bd, 0xb90000be, 0xab0000bf, 0x640000c0,
+ 0x650000c1, 0x620000c2, 0x660000c3, 0x630000c4, 0x670000c5, 0x9e0000c6, 0x680000c7, 0x740000c8,
+ 0x710000c9, 0x720000ca, 0x730000cb, 0x780000cc, 0x750000cd, 0x760000ce, 0x770000cf, 0xac0000d0,
+ 0x690000d1, 0xed0000d2, 0xee0000d3, 0xeb0000d4, 0xef0000d5, 0xec0000d6, 0xbf0000d7, 0x800000d8,
+ 0xfd0000d9, 0xfe0000da, 0xfb0000db, 0xfc0000dc, 0xad0000dd, 0xae0000de, 0x590000df, 0x440000e0,
+ 0x450000e1, 0x420000e2, 0x460000e3, 0x430000e4, 0x470000e5, 0x9c0000e6, 0x480000e7, 0x540000e8,
+ 0x510000e9, 0x520000ea, 0x530000eb, 0x580000ec, 0x550000ed, 0x560000ee, 0x570000ef, 0x8c0000f0,
+ 0x490000f1, 0xcd0000f2, 0xce0000f3, 0xcb0000f4, 0xcf0000f5, 0xcc0000f6, 0xe10000f7, 0x700000f8,
+ 0xdd0000f9, 0xde0000fa, 0xdb0000fb, 0xdc0000fc, 0x8d0000fd, 0x8e0000fe, 0xdf0000ff, 0x9f0020ac,
+ },
+}
+
+// ISO8859_1 is the ISO 8859-1 encoding.
+var ISO8859_1 *Charmap = &iso8859_1
+
+var iso8859_1 = Charmap{
+ name: "ISO 8859-1",
+ mib: identifier.ISOLatin1,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
+ {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
+ {2, [3]byte{0xc2, 0x84, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
+ {2, [3]byte{0xc2, 0x86, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
+ {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
+ {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
+ {2, [3]byte{0xc2, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
+ {2, [3]byte{0xc2, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
+ {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
+ {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
+ {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
+ {2, [3]byte{0xc2, 0x96, 0x00}}, {2, [3]byte{0xc2, 0x97, 0x00}},
+ {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
+ {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
+ {2, [3]byte{0xc2, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0x9d, 0x00}},
+ {2, [3]byte{0xc2, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+ {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+ {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+ {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0x80000080, 0x81000081, 0x82000082, 0x83000083, 0x84000084, 0x85000085, 0x86000086, 0x87000087,
+ 0x88000088, 0x89000089, 0x8a00008a, 0x8b00008b, 0x8c00008c, 0x8d00008d, 0x8e00008e, 0x8f00008f,
+ 0x90000090, 0x91000091, 0x92000092, 0x93000093, 0x94000094, 0x95000095, 0x96000096, 0x97000097,
+ 0x98000098, 0x99000099, 0x9a00009a, 0x9b00009b, 0x9c00009c, 0x9d00009d, 0x9e00009e, 0x9f00009f,
+ 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7,
+ 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af,
+ 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
+ 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf,
+ 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7,
+ 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
+ 0xd00000d0, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7,
+ 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df,
+ 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7,
+ 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef,
+ 0xf00000f0, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7,
+ 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, 0xfe0000fe, 0xff0000ff,
+ },
+}
+
+// ISO8859_2 is the ISO 8859-2 encoding.
+var ISO8859_2 *Charmap = &iso8859_2
+
+var iso8859_2 = Charmap{
+ name: "ISO 8859-2",
+ mib: identifier.ISOLatin2,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}},
+ {2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xbd, 0x00}},
+ {2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc5, 0xa0, 0x00}},
+ {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc5, 0xa4, 0x00}},
+ {2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}},
+ {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc4, 0xbe, 0x00}},
+ {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xa1, 0x00}},
+ {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc5, 0xa5, 0x00}},
+ {2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}},
+ {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}},
+ {2, [3]byte{0xc5, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xb9, 0x00}},
+ {2, [3]byte{0xc4, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
+ {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc4, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc4, 0x8e, 0x00}},
+ {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}},
+ {2, [3]byte{0xc5, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x90, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xc5, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xae, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xb0, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+ {2, [3]byte{0xc5, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc5, 0x95, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xba, 0x00}},
+ {2, [3]byte{0xc4, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc4, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc4, 0x8f, 0x00}},
+ {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}},
+ {2, [3]byte{0xc5, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xc5, 0x99, 0x00}}, {2, [3]byte{0xc5, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc5, 0xb1, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+ {2, [3]byte{0xc5, 0xa3, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa40000a4, 0xa70000a7, 0xa80000a8, 0xad0000ad, 0xb00000b0, 0xb40000b4, 0xb80000b8,
+ 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc70000c7, 0xc90000c9, 0xcb0000cb, 0xcd0000cd, 0xce0000ce,
+ 0xd30000d3, 0xd40000d4, 0xd60000d6, 0xd70000d7, 0xda0000da, 0xdc0000dc, 0xdd0000dd, 0xdf0000df,
+ 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe70000e7, 0xe90000e9, 0xeb0000eb, 0xed0000ed, 0xee0000ee,
+ 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf70000f7, 0xfa0000fa, 0xfc0000fc, 0xfd0000fd, 0xc3000102,
+ 0xe3000103, 0xa1000104, 0xb1000105, 0xc6000106, 0xe6000107, 0xc800010c, 0xe800010d, 0xcf00010e,
+ 0xef00010f, 0xd0000110, 0xf0000111, 0xca000118, 0xea000119, 0xcc00011a, 0xec00011b, 0xc5000139,
+ 0xe500013a, 0xa500013d, 0xb500013e, 0xa3000141, 0xb3000142, 0xd1000143, 0xf1000144, 0xd2000147,
+ 0xf2000148, 0xd5000150, 0xf5000151, 0xc0000154, 0xe0000155, 0xd8000158, 0xf8000159, 0xa600015a,
+ 0xb600015b, 0xaa00015e, 0xba00015f, 0xa9000160, 0xb9000161, 0xde000162, 0xfe000163, 0xab000164,
+ 0xbb000165, 0xd900016e, 0xf900016f, 0xdb000170, 0xfb000171, 0xac000179, 0xbc00017a, 0xaf00017b,
+ 0xbf00017c, 0xae00017d, 0xbe00017e, 0xb70002c7, 0xa20002d8, 0xff0002d9, 0xb20002db, 0xbd0002dd,
+ 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd,
+ 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd,
+ 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd,
+ 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd, 0xbd0002dd,
+ },
+}
+
+// ISO8859_3 is the ISO 8859-3 encoding.
+var ISO8859_3 *Charmap = &iso8859_3
+
+var iso8859_3 = Charmap{
+ name: "ISO 8859-3",
+ mib: identifier.ISOLatin3,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0xa6, 0x00}},
+ {2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc4, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}},
+ {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc4, 0x9e, 0x00}},
+ {2, [3]byte{0xc4, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc4, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}},
+ {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc4, 0x9f, 0x00}},
+ {2, [3]byte{0xc4, 0xb5, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xbc, 0x00}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x8a, 0x00}},
+ {2, [3]byte{0xc4, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc4, 0xa0, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xc4, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xac, 0x00}},
+ {2, [3]byte{0xc5, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0x8b, 0x00}},
+ {2, [3]byte{0xc4, 0x89, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+ {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc4, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xc4, 0x9d, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xad, 0x00}},
+ {2, [3]byte{0xc5, 0x9d, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa30000a3, 0xa40000a4, 0xa70000a7, 0xa80000a8, 0xad0000ad, 0xb00000b0, 0xb20000b2,
+ 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb70000b7, 0xb80000b8, 0xbd0000bd, 0xc00000c0, 0xc10000c1,
+ 0xc20000c2, 0xc40000c4, 0xc70000c7, 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc,
+ 0xcd0000cd, 0xce0000ce, 0xcf0000cf, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd60000d6,
+ 0xd70000d7, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1,
+ 0xe20000e2, 0xe40000e4, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec,
+ 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf60000f6,
+ 0xf70000f7, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xc6000108, 0xe6000109, 0xc500010a,
+ 0xe500010b, 0xd800011c, 0xf800011d, 0xab00011e, 0xbb00011f, 0xd5000120, 0xf5000121, 0xa6000124,
+ 0xb6000125, 0xa1000126, 0xb1000127, 0xa9000130, 0xb9000131, 0xac000134, 0xbc000135, 0xde00015c,
+ 0xfe00015d, 0xaa00015e, 0xba00015f, 0xdd00016c, 0xfd00016d, 0xaf00017b, 0xbf00017c, 0xa20002d8,
+ 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9,
+ 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9,
+ 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9,
+ 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9,
+ 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9, 0xff0002d9,
+ },
+}
+
+// ISO8859_4 is the ISO 8859-4 encoding.
+var ISO8859_4 *Charmap = &iso8859_4
+
+var iso8859_4 = Charmap{
+ name: "ISO 8859-4",
+ mib: identifier.ISOLatin4,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}},
+ {2, [3]byte{0xc4, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0x96, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xa8, 0x00}},
+ {2, [3]byte{0xc4, 0xbb, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc5, 0xa0, 0x00}},
+ {2, [3]byte{0xc4, 0x92, 0x00}}, {2, [3]byte{0xc4, 0xa2, 0x00}},
+ {2, [3]byte{0xc5, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}},
+ {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0x97, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc4, 0xa9, 0x00}},
+ {2, [3]byte{0xc4, 0xbc, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xa1, 0x00}},
+ {2, [3]byte{0xc4, 0x93, 0x00}}, {2, [3]byte{0xc4, 0xa3, 0x00}},
+ {2, [3]byte{0xc5, 0xa7, 0x00}}, {2, [3]byte{0xc5, 0x8a, 0x00}},
+ {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0x8b, 0x00}},
+ {2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}},
+ {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc4, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc4, 0xaa, 0x00}},
+ {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x85, 0x00}},
+ {2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc4, 0xb6, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xb2, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xa8, 0x00}},
+ {2, [3]byte{0xc5, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}},
+ {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc4, 0x97, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc4, 0xab, 0x00}},
+ {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x86, 0x00}},
+ {2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc4, 0xb7, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xa9, 0x00}},
+ {2, [3]byte{0xc5, 0xab, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa40000a4, 0xa70000a7, 0xa80000a8, 0xad0000ad, 0xaf0000af, 0xb00000b0, 0xb40000b4,
+ 0xb80000b8, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc90000c9,
+ 0xcb0000cb, 0xcd0000cd, 0xce0000ce, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8,
+ 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4,
+ 0xe50000e5, 0xe60000e6, 0xe90000e9, 0xeb0000eb, 0xed0000ed, 0xee0000ee, 0xf40000f4, 0xf50000f5,
+ 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xc0000100, 0xe0000101,
+ 0xa1000104, 0xb1000105, 0xc800010c, 0xe800010d, 0xd0000110, 0xf0000111, 0xaa000112, 0xba000113,
+ 0xcc000116, 0xec000117, 0xca000118, 0xea000119, 0xab000122, 0xbb000123, 0xa5000128, 0xb5000129,
+ 0xcf00012a, 0xef00012b, 0xc700012e, 0xe700012f, 0xd3000136, 0xf3000137, 0xa2000138, 0xa600013b,
+ 0xb600013c, 0xd1000145, 0xf1000146, 0xbd00014a, 0xbf00014b, 0xd200014c, 0xf200014d, 0xa3000156,
+ 0xb3000157, 0xa9000160, 0xb9000161, 0xac000166, 0xbc000167, 0xdd000168, 0xfd000169, 0xde00016a,
+ 0xfe00016b, 0xd9000172, 0xf9000173, 0xae00017d, 0xbe00017e, 0xb70002c7, 0xff0002d9, 0xb20002db,
+ 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db,
+ 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db,
+ 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db,
+ 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db, 0xb20002db,
+ },
+}
+
+// ISO8859_5 is the ISO 8859-5 encoding.
+var ISO8859_5 *Charmap = &iso8859_5
+
+var iso8859_5 = Charmap{
+ name: "ISO 8859-5",
+ mib: identifier.ISOLatinCyrillic,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0x81, 0x00}},
+ {2, [3]byte{0xd0, 0x82, 0x00}}, {2, [3]byte{0xd0, 0x83, 0x00}},
+ {2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}},
+ {2, [3]byte{0xd0, 0x86, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}},
+ {2, [3]byte{0xd0, 0x88, 0x00}}, {2, [3]byte{0xd0, 0x89, 0x00}},
+ {2, [3]byte{0xd0, 0x8a, 0x00}}, {2, [3]byte{0xd0, 0x8b, 0x00}},
+ {2, [3]byte{0xd0, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0x8f, 0x00}},
+ {2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}},
+ {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
+ {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
+ {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}},
+ {2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}},
+ {2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}},
+ {2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}},
+ {2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}},
+ {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}},
+ {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}},
+ {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}},
+ {2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}},
+ {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}},
+ {2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}},
+ {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}},
+ {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}},
+ {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}},
+ {2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}},
+ {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}},
+ {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}},
+ {2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}},
+ {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}},
+ {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}},
+ {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}},
+ {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
+ {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
+ {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}},
+ {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}},
+ {2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
+ {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
+ {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}},
+ {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}},
+ {3, [3]byte{0xe2, 0x84, 0x96}}, {2, [3]byte{0xd1, 0x91, 0x00}},
+ {2, [3]byte{0xd1, 0x92, 0x00}}, {2, [3]byte{0xd1, 0x93, 0x00}},
+ {2, [3]byte{0xd1, 0x94, 0x00}}, {2, [3]byte{0xd1, 0x95, 0x00}},
+ {2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}},
+ {2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd1, 0x99, 0x00}},
+ {2, [3]byte{0xd1, 0x9a, 0x00}}, {2, [3]byte{0xd1, 0x9b, 0x00}},
+ {2, [3]byte{0xd1, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xd1, 0x9e, 0x00}}, {2, [3]byte{0xd1, 0x9f, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xfd0000a7, 0xad0000ad, 0xa1000401, 0xa2000402, 0xa3000403, 0xa4000404, 0xa5000405,
+ 0xa6000406, 0xa7000407, 0xa8000408, 0xa9000409, 0xaa00040a, 0xab00040b, 0xac00040c, 0xae00040e,
+ 0xaf00040f, 0xb0000410, 0xb1000411, 0xb2000412, 0xb3000413, 0xb4000414, 0xb5000415, 0xb6000416,
+ 0xb7000417, 0xb8000418, 0xb9000419, 0xba00041a, 0xbb00041b, 0xbc00041c, 0xbd00041d, 0xbe00041e,
+ 0xbf00041f, 0xc0000420, 0xc1000421, 0xc2000422, 0xc3000423, 0xc4000424, 0xc5000425, 0xc6000426,
+ 0xc7000427, 0xc8000428, 0xc9000429, 0xca00042a, 0xcb00042b, 0xcc00042c, 0xcd00042d, 0xce00042e,
+ 0xcf00042f, 0xd0000430, 0xd1000431, 0xd2000432, 0xd3000433, 0xd4000434, 0xd5000435, 0xd6000436,
+ 0xd7000437, 0xd8000438, 0xd9000439, 0xda00043a, 0xdb00043b, 0xdc00043c, 0xdd00043d, 0xde00043e,
+ 0xdf00043f, 0xe0000440, 0xe1000441, 0xe2000442, 0xe3000443, 0xe4000444, 0xe5000445, 0xe6000446,
+ 0xe7000447, 0xe8000448, 0xe9000449, 0xea00044a, 0xeb00044b, 0xec00044c, 0xed00044d, 0xee00044e,
+ 0xef00044f, 0xf1000451, 0xf2000452, 0xf3000453, 0xf4000454, 0xf5000455, 0xf6000456, 0xf7000457,
+ 0xf8000458, 0xf9000459, 0xfa00045a, 0xfb00045b, 0xfc00045c, 0xfe00045e, 0xff00045f, 0xf0002116,
+ 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116,
+ 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116,
+ 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116,
+ 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116, 0xf0002116,
+ },
+}
+
+// ISO8859_6 is the ISO 8859-6 encoding.
+var ISO8859_6 *Charmap = &iso8859_6
+
+var iso8859_6 = Charmap{
+ name: "ISO 8859-6",
+ mib: identifier.ISOLatinArabic,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xd8, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd8, 0x9b, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd8, 0x9f, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xd8, 0xa1, 0x00}},
+ {2, [3]byte{0xd8, 0xa2, 0x00}}, {2, [3]byte{0xd8, 0xa3, 0x00}},
+ {2, [3]byte{0xd8, 0xa4, 0x00}}, {2, [3]byte{0xd8, 0xa5, 0x00}},
+ {2, [3]byte{0xd8, 0xa6, 0x00}}, {2, [3]byte{0xd8, 0xa7, 0x00}},
+ {2, [3]byte{0xd8, 0xa8, 0x00}}, {2, [3]byte{0xd8, 0xa9, 0x00}},
+ {2, [3]byte{0xd8, 0xaa, 0x00}}, {2, [3]byte{0xd8, 0xab, 0x00}},
+ {2, [3]byte{0xd8, 0xac, 0x00}}, {2, [3]byte{0xd8, 0xad, 0x00}},
+ {2, [3]byte{0xd8, 0xae, 0x00}}, {2, [3]byte{0xd8, 0xaf, 0x00}},
+ {2, [3]byte{0xd8, 0xb0, 0x00}}, {2, [3]byte{0xd8, 0xb1, 0x00}},
+ {2, [3]byte{0xd8, 0xb2, 0x00}}, {2, [3]byte{0xd8, 0xb3, 0x00}},
+ {2, [3]byte{0xd8, 0xb4, 0x00}}, {2, [3]byte{0xd8, 0xb5, 0x00}},
+ {2, [3]byte{0xd8, 0xb6, 0x00}}, {2, [3]byte{0xd8, 0xb7, 0x00}},
+ {2, [3]byte{0xd8, 0xb8, 0x00}}, {2, [3]byte{0xd8, 0xb9, 0x00}},
+ {2, [3]byte{0xd8, 0xba, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xd9, 0x80, 0x00}}, {2, [3]byte{0xd9, 0x81, 0x00}},
+ {2, [3]byte{0xd9, 0x82, 0x00}}, {2, [3]byte{0xd9, 0x83, 0x00}},
+ {2, [3]byte{0xd9, 0x84, 0x00}}, {2, [3]byte{0xd9, 0x85, 0x00}},
+ {2, [3]byte{0xd9, 0x86, 0x00}}, {2, [3]byte{0xd9, 0x87, 0x00}},
+ {2, [3]byte{0xd9, 0x88, 0x00}}, {2, [3]byte{0xd9, 0x89, 0x00}},
+ {2, [3]byte{0xd9, 0x8a, 0x00}}, {2, [3]byte{0xd9, 0x8b, 0x00}},
+ {2, [3]byte{0xd9, 0x8c, 0x00}}, {2, [3]byte{0xd9, 0x8d, 0x00}},
+ {2, [3]byte{0xd9, 0x8e, 0x00}}, {2, [3]byte{0xd9, 0x8f, 0x00}},
+ {2, [3]byte{0xd9, 0x90, 0x00}}, {2, [3]byte{0xd9, 0x91, 0x00}},
+ {2, [3]byte{0xd9, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa40000a4, 0xad0000ad, 0xac00060c, 0xbb00061b, 0xbf00061f, 0xc1000621, 0xc2000622,
+ 0xc3000623, 0xc4000624, 0xc5000625, 0xc6000626, 0xc7000627, 0xc8000628, 0xc9000629, 0xca00062a,
+ 0xcb00062b, 0xcc00062c, 0xcd00062d, 0xce00062e, 0xcf00062f, 0xd0000630, 0xd1000631, 0xd2000632,
+ 0xd3000633, 0xd4000634, 0xd5000635, 0xd6000636, 0xd7000637, 0xd8000638, 0xd9000639, 0xda00063a,
+ 0xe0000640, 0xe1000641, 0xe2000642, 0xe3000643, 0xe4000644, 0xe5000645, 0xe6000646, 0xe7000647,
+ 0xe8000648, 0xe9000649, 0xea00064a, 0xeb00064b, 0xec00064c, 0xed00064d, 0xee00064e, 0xef00064f,
+ 0xf0000650, 0xf1000651, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
+ 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
+ 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
+ 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
+ 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
+ 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
+ 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
+ 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
+ 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
+ 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652, 0xf2000652,
+ },
+}
+
+// ISO8859_7 is the ISO 8859-7 encoding.
+var ISO8859_7 *Charmap = &iso8859_7
+
+var iso8859_7 = Charmap{
+ name: "ISO 8859-7",
+ mib: identifier.ISOLatinGreek,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x98}},
+ {3, [3]byte{0xe2, 0x80, 0x99}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xe2, 0x82, 0xaf}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xcd, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x95}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xce, 0x84, 0x00}}, {2, [3]byte{0xce, 0x85, 0x00}},
+ {2, [3]byte{0xce, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xce, 0x88, 0x00}}, {2, [3]byte{0xce, 0x89, 0x00}},
+ {2, [3]byte{0xce, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xce, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xce, 0x8e, 0x00}}, {2, [3]byte{0xce, 0x8f, 0x00}},
+ {2, [3]byte{0xce, 0x90, 0x00}}, {2, [3]byte{0xce, 0x91, 0x00}},
+ {2, [3]byte{0xce, 0x92, 0x00}}, {2, [3]byte{0xce, 0x93, 0x00}},
+ {2, [3]byte{0xce, 0x94, 0x00}}, {2, [3]byte{0xce, 0x95, 0x00}},
+ {2, [3]byte{0xce, 0x96, 0x00}}, {2, [3]byte{0xce, 0x97, 0x00}},
+ {2, [3]byte{0xce, 0x98, 0x00}}, {2, [3]byte{0xce, 0x99, 0x00}},
+ {2, [3]byte{0xce, 0x9a, 0x00}}, {2, [3]byte{0xce, 0x9b, 0x00}},
+ {2, [3]byte{0xce, 0x9c, 0x00}}, {2, [3]byte{0xce, 0x9d, 0x00}},
+ {2, [3]byte{0xce, 0x9e, 0x00}}, {2, [3]byte{0xce, 0x9f, 0x00}},
+ {2, [3]byte{0xce, 0xa0, 0x00}}, {2, [3]byte{0xce, 0xa1, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xce, 0xa3, 0x00}},
+ {2, [3]byte{0xce, 0xa4, 0x00}}, {2, [3]byte{0xce, 0xa5, 0x00}},
+ {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0xa7, 0x00}},
+ {2, [3]byte{0xce, 0xa8, 0x00}}, {2, [3]byte{0xce, 0xa9, 0x00}},
+ {2, [3]byte{0xce, 0xaa, 0x00}}, {2, [3]byte{0xce, 0xab, 0x00}},
+ {2, [3]byte{0xce, 0xac, 0x00}}, {2, [3]byte{0xce, 0xad, 0x00}},
+ {2, [3]byte{0xce, 0xae, 0x00}}, {2, [3]byte{0xce, 0xaf, 0x00}},
+ {2, [3]byte{0xce, 0xb0, 0x00}}, {2, [3]byte{0xce, 0xb1, 0x00}},
+ {2, [3]byte{0xce, 0xb2, 0x00}}, {2, [3]byte{0xce, 0xb3, 0x00}},
+ {2, [3]byte{0xce, 0xb4, 0x00}}, {2, [3]byte{0xce, 0xb5, 0x00}},
+ {2, [3]byte{0xce, 0xb6, 0x00}}, {2, [3]byte{0xce, 0xb7, 0x00}},
+ {2, [3]byte{0xce, 0xb8, 0x00}}, {2, [3]byte{0xce, 0xb9, 0x00}},
+ {2, [3]byte{0xce, 0xba, 0x00}}, {2, [3]byte{0xce, 0xbb, 0x00}},
+ {2, [3]byte{0xce, 0xbc, 0x00}}, {2, [3]byte{0xce, 0xbd, 0x00}},
+ {2, [3]byte{0xce, 0xbe, 0x00}}, {2, [3]byte{0xce, 0xbf, 0x00}},
+ {2, [3]byte{0xcf, 0x80, 0x00}}, {2, [3]byte{0xcf, 0x81, 0x00}},
+ {2, [3]byte{0xcf, 0x82, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
+ {2, [3]byte{0xcf, 0x84, 0x00}}, {2, [3]byte{0xcf, 0x85, 0x00}},
+ {2, [3]byte{0xcf, 0x86, 0x00}}, {2, [3]byte{0xcf, 0x87, 0x00}},
+ {2, [3]byte{0xcf, 0x88, 0x00}}, {2, [3]byte{0xcf, 0x89, 0x00}},
+ {2, [3]byte{0xcf, 0x8a, 0x00}}, {2, [3]byte{0xcf, 0x8b, 0x00}},
+ {2, [3]byte{0xcf, 0x8c, 0x00}}, {2, [3]byte{0xcf, 0x8d, 0x00}},
+ {2, [3]byte{0xcf, 0x8e, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa30000a3, 0xa60000a6, 0xa70000a7, 0xa80000a8, 0xa90000a9, 0xab0000ab, 0xac0000ac,
+ 0xad0000ad, 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb70000b7, 0xbb0000bb, 0xbd0000bd,
+ 0xaa00037a, 0xb4000384, 0xb5000385, 0xb6000386, 0xb8000388, 0xb9000389, 0xba00038a, 0xbc00038c,
+ 0xbe00038e, 0xbf00038f, 0xc0000390, 0xc1000391, 0xc2000392, 0xc3000393, 0xc4000394, 0xc5000395,
+ 0xc6000396, 0xc7000397, 0xc8000398, 0xc9000399, 0xca00039a, 0xcb00039b, 0xcc00039c, 0xcd00039d,
+ 0xce00039e, 0xcf00039f, 0xd00003a0, 0xd10003a1, 0xd30003a3, 0xd40003a4, 0xd50003a5, 0xd60003a6,
+ 0xd70003a7, 0xd80003a8, 0xd90003a9, 0xda0003aa, 0xdb0003ab, 0xdc0003ac, 0xdd0003ad, 0xde0003ae,
+ 0xdf0003af, 0xe00003b0, 0xe10003b1, 0xe20003b2, 0xe30003b3, 0xe40003b4, 0xe50003b5, 0xe60003b6,
+ 0xe70003b7, 0xe80003b8, 0xe90003b9, 0xea0003ba, 0xeb0003bb, 0xec0003bc, 0xed0003bd, 0xee0003be,
+ 0xef0003bf, 0xf00003c0, 0xf10003c1, 0xf20003c2, 0xf30003c3, 0xf40003c4, 0xf50003c5, 0xf60003c6,
+ 0xf70003c7, 0xf80003c8, 0xf90003c9, 0xfa0003ca, 0xfb0003cb, 0xfc0003cc, 0xfd0003cd, 0xfe0003ce,
+ 0xaf002015, 0xa1002018, 0xa2002019, 0xa40020ac, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af,
+ 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af,
+ 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af,
+ 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af,
+ 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af, 0xa50020af,
+ },
+}
+
+// ISO8859_8 is the ISO 8859-8 encoding.
+var ISO8859_8 *Charmap = &iso8859_8
+
+var iso8859_8 = Charmap{
+ name: "ISO 8859-8",
+ mib: identifier.ISOLatinHebrew,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbe, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x97}},
+ {2, [3]byte{0xd7, 0x90, 0x00}}, {2, [3]byte{0xd7, 0x91, 0x00}},
+ {2, [3]byte{0xd7, 0x92, 0x00}}, {2, [3]byte{0xd7, 0x93, 0x00}},
+ {2, [3]byte{0xd7, 0x94, 0x00}}, {2, [3]byte{0xd7, 0x95, 0x00}},
+ {2, [3]byte{0xd7, 0x96, 0x00}}, {2, [3]byte{0xd7, 0x97, 0x00}},
+ {2, [3]byte{0xd7, 0x98, 0x00}}, {2, [3]byte{0xd7, 0x99, 0x00}},
+ {2, [3]byte{0xd7, 0x9a, 0x00}}, {2, [3]byte{0xd7, 0x9b, 0x00}},
+ {2, [3]byte{0xd7, 0x9c, 0x00}}, {2, [3]byte{0xd7, 0x9d, 0x00}},
+ {2, [3]byte{0xd7, 0x9e, 0x00}}, {2, [3]byte{0xd7, 0x9f, 0x00}},
+ {2, [3]byte{0xd7, 0xa0, 0x00}}, {2, [3]byte{0xd7, 0xa1, 0x00}},
+ {2, [3]byte{0xd7, 0xa2, 0x00}}, {2, [3]byte{0xd7, 0xa3, 0x00}},
+ {2, [3]byte{0xd7, 0xa4, 0x00}}, {2, [3]byte{0xd7, 0xa5, 0x00}},
+ {2, [3]byte{0xd7, 0xa6, 0x00}}, {2, [3]byte{0xd7, 0xa7, 0x00}},
+ {2, [3]byte{0xd7, 0xa8, 0x00}}, {2, [3]byte{0xd7, 0xa9, 0x00}},
+ {2, [3]byte{0xd7, 0xaa, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x8e}},
+ {3, [3]byte{0xe2, 0x80, 0x8f}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8,
+ 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1,
+ 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9,
+ 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xaa0000d7, 0xba0000f7, 0xe00005d0, 0xe10005d1,
+ 0xe20005d2, 0xe30005d3, 0xe40005d4, 0xe50005d5, 0xe60005d6, 0xe70005d7, 0xe80005d8, 0xe90005d9,
+ 0xea0005da, 0xeb0005db, 0xec0005dc, 0xed0005dd, 0xee0005de, 0xef0005df, 0xf00005e0, 0xf10005e1,
+ 0xf20005e2, 0xf30005e3, 0xf40005e4, 0xf50005e5, 0xf60005e6, 0xf70005e7, 0xf80005e8, 0xf90005e9,
+ 0xfa0005ea, 0xfd00200e, 0xfe00200f, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
+ 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
+ 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
+ 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
+ 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
+ 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
+ 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
+ 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
+ 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017, 0xdf002017,
+ },
+}
+
+// ISO8859_9 is the ISO 8859-9 encoding.
+var ISO8859_9 *Charmap = &iso8859_9
+
+var iso8859_9 = Charmap{
+ name: "ISO 8859-9",
+ mib: identifier.ISOLatin5,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc2, 0x80, 0x00}}, {2, [3]byte{0xc2, 0x81, 0x00}},
+ {2, [3]byte{0xc2, 0x82, 0x00}}, {2, [3]byte{0xc2, 0x83, 0x00}},
+ {2, [3]byte{0xc2, 0x84, 0x00}}, {2, [3]byte{0xc2, 0x85, 0x00}},
+ {2, [3]byte{0xc2, 0x86, 0x00}}, {2, [3]byte{0xc2, 0x87, 0x00}},
+ {2, [3]byte{0xc2, 0x88, 0x00}}, {2, [3]byte{0xc2, 0x89, 0x00}},
+ {2, [3]byte{0xc2, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0x8b, 0x00}},
+ {2, [3]byte{0xc2, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0x8d, 0x00}},
+ {2, [3]byte{0xc2, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0x8f, 0x00}},
+ {2, [3]byte{0xc2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0x91, 0x00}},
+ {2, [3]byte{0xc2, 0x92, 0x00}}, {2, [3]byte{0xc2, 0x93, 0x00}},
+ {2, [3]byte{0xc2, 0x94, 0x00}}, {2, [3]byte{0xc2, 0x95, 0x00}},
+ {2, [3]byte{0xc2, 0x96, 0x00}}, {2, [3]byte{0xc2, 0x97, 0x00}},
+ {2, [3]byte{0xc2, 0x98, 0x00}}, {2, [3]byte{0xc2, 0x99, 0x00}},
+ {2, [3]byte{0xc2, 0x9a, 0x00}}, {2, [3]byte{0xc2, 0x9b, 0x00}},
+ {2, [3]byte{0xc2, 0x9c, 0x00}}, {2, [3]byte{0xc2, 0x9d, 0x00}},
+ {2, [3]byte{0xc2, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0x9f, 0x00}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc4, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}},
+ {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc4, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+ {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}},
+ {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0x80000080, 0x81000081, 0x82000082, 0x83000083, 0x84000084, 0x85000085, 0x86000086, 0x87000087,
+ 0x88000088, 0x89000089, 0x8a00008a, 0x8b00008b, 0x8c00008c, 0x8d00008d, 0x8e00008e, 0x8f00008f,
+ 0x90000090, 0x91000091, 0x92000092, 0x93000093, 0x94000094, 0x95000095, 0x96000096, 0x97000097,
+ 0x98000098, 0x99000099, 0x9a00009a, 0x9b00009b, 0x9c00009c, 0x9d00009d, 0x9e00009e, 0x9f00009f,
+ 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7,
+ 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af,
+ 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
+ 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf,
+ 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7,
+ 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
+ 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8,
+ 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2,
+ 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea,
+ 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3,
+ 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb,
+ 0xfc0000fc, 0xff0000ff, 0xd000011e, 0xf000011f, 0xdd000130, 0xfd000131, 0xde00015e, 0xfe00015f,
+ },
+}
+
+// ISO8859_10 is the ISO 8859-10 encoding.
+var ISO8859_10 *Charmap = &iso8859_10
+
+var iso8859_10 = Charmap{
+ name: "ISO 8859-10",
+ mib: identifier.ISOLatin6,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}},
+ {2, [3]byte{0xc4, 0x92, 0x00}}, {2, [3]byte{0xc4, 0xa2, 0x00}},
+ {2, [3]byte{0xc4, 0xaa, 0x00}}, {2, [3]byte{0xc4, 0xa8, 0x00}},
+ {2, [3]byte{0xc4, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc4, 0xbb, 0x00}}, {2, [3]byte{0xc4, 0x90, 0x00}},
+ {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0xa6, 0x00}},
+ {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc5, 0xaa, 0x00}}, {2, [3]byte{0xc5, 0x8a, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}},
+ {2, [3]byte{0xc4, 0x93, 0x00}}, {2, [3]byte{0xc4, 0xa3, 0x00}},
+ {2, [3]byte{0xc4, 0xab, 0x00}}, {2, [3]byte{0xc4, 0xa9, 0x00}},
+ {2, [3]byte{0xc4, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc4, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0x91, 0x00}},
+ {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc5, 0xa7, 0x00}},
+ {2, [3]byte{0xc5, 0xbe, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x95}},
+ {2, [3]byte{0xc5, 0xab, 0x00}}, {2, [3]byte{0xc5, 0x8b, 0x00}},
+ {2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}},
+ {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc4, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x85, 0x00}},
+ {2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc5, 0xa8, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xb2, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+ {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}},
+ {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc4, 0x97, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc5, 0x86, 0x00}},
+ {2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc5, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+ {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc4, 0xb8, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa70000a7, 0xad0000ad, 0xb00000b0, 0xb70000b7, 0xc10000c1, 0xc20000c2, 0xc30000c3,
+ 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc90000c9, 0xcb0000cb, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
+ 0xd00000d0, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd80000d8, 0xda0000da, 0xdb0000db,
+ 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4,
+ 0xe50000e5, 0xe60000e6, 0xe90000e9, 0xeb0000eb, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf00000f0,
+ 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf80000f8, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc,
+ 0xfd0000fd, 0xfe0000fe, 0xc0000100, 0xe0000101, 0xa1000104, 0xb1000105, 0xc800010c, 0xe800010d,
+ 0xa9000110, 0xb9000111, 0xa2000112, 0xb2000113, 0xcc000116, 0xec000117, 0xca000118, 0xea000119,
+ 0xa3000122, 0xb3000123, 0xa5000128, 0xb5000129, 0xa400012a, 0xb400012b, 0xc700012e, 0xe700012f,
+ 0xa6000136, 0xb6000137, 0xff000138, 0xa800013b, 0xb800013c, 0xd1000145, 0xf1000146, 0xaf00014a,
+ 0xbf00014b, 0xd200014c, 0xf200014d, 0xaa000160, 0xba000161, 0xab000166, 0xbb000167, 0xd7000168,
+ 0xf7000169, 0xae00016a, 0xbe00016b, 0xd9000172, 0xf9000173, 0xac00017d, 0xbc00017e, 0xbd002015,
+ 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015,
+ 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015,
+ 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015,
+ 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015, 0xbd002015,
+ },
+}
+
+// ISO8859_13 is the ISO 8859-13 encoding.
+var ISO8859_13 *Charmap = &iso8859_13
+
+var iso8859_13 = Charmap{
+ name: "ISO 8859-13",
+ mib: identifier.ISO885913,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9d}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9e}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xc5, 0x96, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc3, 0x86, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x9c}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xc5, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}},
+ {2, [3]byte{0xc4, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}},
+ {2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc4, 0x92, 0x00}},
+ {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc4, 0x96, 0x00}},
+ {2, [3]byte{0xc4, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0xb6, 0x00}},
+ {2, [3]byte{0xc4, 0xaa, 0x00}}, {2, [3]byte{0xc4, 0xbb, 0x00}},
+ {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}},
+ {2, [3]byte{0xc5, 0x85, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xc5, 0xb2, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}},
+ {2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xaa, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
+ {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc4, 0x85, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}},
+ {2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc4, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc4, 0x93, 0x00}},
+ {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xc4, 0x97, 0x00}},
+ {2, [3]byte{0xc4, 0xa3, 0x00}}, {2, [3]byte{0xc4, 0xb7, 0x00}},
+ {2, [3]byte{0xc4, 0xab, 0x00}}, {2, [3]byte{0xc4, 0xbc, 0x00}},
+ {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}},
+ {2, [3]byte{0xc5, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xc5, 0xb3, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}},
+ {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}},
+ {2, [3]byte{0xc5, 0xbe, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x99}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0xa90000a9, 0xab0000ab,
+ 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb50000b5,
+ 0xb60000b6, 0xb70000b7, 0xb90000b9, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xc40000c4,
+ 0xc50000c5, 0xaf0000c6, 0xc90000c9, 0xd30000d3, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xa80000d8,
+ 0xdc0000dc, 0xdf0000df, 0xe40000e4, 0xe50000e5, 0xbf0000e6, 0xe90000e9, 0xf30000f3, 0xf50000f5,
+ 0xf60000f6, 0xf70000f7, 0xb80000f8, 0xfc0000fc, 0xc2000100, 0xe2000101, 0xc0000104, 0xe0000105,
+ 0xc3000106, 0xe3000107, 0xc800010c, 0xe800010d, 0xc7000112, 0xe7000113, 0xcb000116, 0xeb000117,
+ 0xc6000118, 0xe6000119, 0xcc000122, 0xec000123, 0xce00012a, 0xee00012b, 0xc100012e, 0xe100012f,
+ 0xcd000136, 0xed000137, 0xcf00013b, 0xef00013c, 0xd9000141, 0xf9000142, 0xd1000143, 0xf1000144,
+ 0xd2000145, 0xf2000146, 0xd400014c, 0xf400014d, 0xaa000156, 0xba000157, 0xda00015a, 0xfa00015b,
+ 0xd0000160, 0xf0000161, 0xdb00016a, 0xfb00016b, 0xd8000172, 0xf8000173, 0xca000179, 0xea00017a,
+ 0xdd00017b, 0xfd00017c, 0xde00017d, 0xfe00017e, 0xff002019, 0xb400201c, 0xa100201d, 0xa500201e,
+ 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e,
+ 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e,
+ 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e,
+ 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e, 0xa500201e,
+ },
+}
+
+// ISO8859_14 is the ISO 8859-14 encoding.
+var ISO8859_14 *Charmap = &iso8859_14
+
+var iso8859_14 = Charmap{
+ name: "ISO 8859-14",
+ mib: identifier.ISO885914,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe1, 0xb8, 0x82}},
+ {3, [3]byte{0xe1, 0xb8, 0x83}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc4, 0x8a, 0x00}}, {2, [3]byte{0xc4, 0x8b, 0x00}},
+ {3, [3]byte{0xe1, 0xb8, 0x8a}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {3, [3]byte{0xe1, 0xba, 0x80}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {3, [3]byte{0xe1, 0xba, 0x82}}, {3, [3]byte{0xe1, 0xb8, 0x8b}},
+ {3, [3]byte{0xe1, 0xbb, 0xb2}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc5, 0xb8, 0x00}},
+ {3, [3]byte{0xe1, 0xb8, 0x9e}}, {3, [3]byte{0xe1, 0xb8, 0x9f}},
+ {2, [3]byte{0xc4, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0xa1, 0x00}},
+ {3, [3]byte{0xe1, 0xb9, 0x80}}, {3, [3]byte{0xe1, 0xb9, 0x81}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {3, [3]byte{0xe1, 0xb9, 0x96}},
+ {3, [3]byte{0xe1, 0xba, 0x81}}, {3, [3]byte{0xe1, 0xb9, 0x97}},
+ {3, [3]byte{0xe1, 0xba, 0x83}}, {3, [3]byte{0xe1, 0xb9, 0xa0}},
+ {3, [3]byte{0xe1, 0xbb, 0xb3}}, {3, [3]byte{0xe1, 0xba, 0x84}},
+ {3, [3]byte{0xe1, 0xba, 0x85}}, {3, [3]byte{0xe1, 0xb9, 0xa1}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc5, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {3, [3]byte{0xe1, 0xb9, 0xaa}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+ {2, [3]byte{0xc5, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc5, 0xb5, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+ {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {3, [3]byte{0xe1, 0xb9, 0xab}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+ {2, [3]byte{0xc5, 0xb7, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa30000a3, 0xa70000a7, 0xa90000a9, 0xad0000ad, 0xae0000ae, 0xb60000b6, 0xc00000c0,
+ 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, 0xc80000c8,
+ 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, 0xd10000d1,
+ 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd80000d8, 0xd90000d9, 0xda0000da,
+ 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3,
+ 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb,
+ 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4,
+ 0xf50000f5, 0xf60000f6, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd,
+ 0xff0000ff, 0xa400010a, 0xa500010b, 0xb2000120, 0xb3000121, 0xd0000174, 0xf0000175, 0xde000176,
+ 0xfe000177, 0xaf000178, 0xa1001e02, 0xa2001e03, 0xa6001e0a, 0xab001e0b, 0xb0001e1e, 0xb1001e1f,
+ 0xb4001e40, 0xb5001e41, 0xb7001e56, 0xb9001e57, 0xbb001e60, 0xbf001e61, 0xd7001e6a, 0xf7001e6b,
+ 0xa8001e80, 0xb8001e81, 0xaa001e82, 0xba001e83, 0xbd001e84, 0xbe001e85, 0xac001ef2, 0xbc001ef3,
+ 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3,
+ 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3,
+ 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3,
+ 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3, 0xbc001ef3,
+ },
+}
+
+// ISO8859_15 is the ISO 8859-15 encoding.
+var ISO8859_15 *Charmap = &iso8859_15
+
+var iso8859_15 = Charmap{
+ name: "ISO 8859-15",
+ mib: identifier.ISO885915,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+ {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xc5, 0x93, 0x00}},
+ {2, [3]byte{0xc5, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+ {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+ {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+ {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa50000a5, 0xa70000a7, 0xa90000a9, 0xaa0000aa,
+ 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1, 0xb20000b2,
+ 0xb30000b3, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbf0000bf,
+ 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7,
+ 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
+ 0xd00000d0, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7,
+ 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df,
+ 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7,
+ 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef,
+ 0xf00000f0, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7,
+ 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, 0xfe0000fe, 0xff0000ff,
+ 0xbc000152, 0xbd000153, 0xa6000160, 0xa8000161, 0xbe000178, 0xb400017d, 0xb800017e, 0xa40020ac,
+ 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
+ 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
+ 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
+ 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
+ },
+}
+
+// ISO8859_16 is the ISO 8859-16 encoding.
+var ISO8859_16 *Charmap = &iso8859_16
+
+var iso8859_16 = Charmap{
+ name: "ISO 8859-16",
+ mib: identifier.ISO885916,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}},
+ {2, [3]byte{0xc4, 0x85, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xe2, 0x80, 0x9e}},
+ {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xc8, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}},
+ {2, [3]byte{0xc5, 0xbd, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9d}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc4, 0x8d, 0x00}},
+ {2, [3]byte{0xc8, 0x99, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xc5, 0x93, 0x00}},
+ {2, [3]byte{0xc5, 0xb8, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x90, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc5, 0x9a, 0x00}},
+ {2, [3]byte{0xc5, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0x98, 0x00}},
+ {2, [3]byte{0xc8, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}},
+ {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc5, 0x9b, 0x00}},
+ {2, [3]byte{0xc5, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0x99, 0x00}},
+ {2, [3]byte{0xc8, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa70000a7, 0xa90000a9, 0xab0000ab, 0xad0000ad, 0xb00000b0, 0xb10000b1, 0xb60000b6,
+ 0xb70000b7, 0xbb0000bb, 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc60000c6, 0xc70000c7,
+ 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
+ 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd60000d6, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc,
+ 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe60000e6, 0xe70000e7, 0xe80000e8,
+ 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf20000f2,
+ 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xff0000ff,
+ 0xc3000102, 0xe3000103, 0xa1000104, 0xa2000105, 0xc5000106, 0xe5000107, 0xb200010c, 0xb900010d,
+ 0xd0000110, 0xf0000111, 0xdd000118, 0xfd000119, 0xa3000141, 0xb3000142, 0xd1000143, 0xf1000144,
+ 0xd5000150, 0xf5000151, 0xbc000152, 0xbd000153, 0xd700015a, 0xf700015b, 0xa6000160, 0xa8000161,
+ 0xd8000170, 0xf8000171, 0xbe000178, 0xac000179, 0xae00017a, 0xaf00017b, 0xbf00017c, 0xb400017d,
+ 0xb800017e, 0xaa000218, 0xba000219, 0xde00021a, 0xfe00021b, 0xb500201d, 0xa500201e, 0xa40020ac,
+ 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
+ 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
+ 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
+ 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac, 0xa40020ac,
+ },
+}
+
+// KOI8R is the KOI8-R encoding.
+var KOI8R *Charmap = &koi8R
+
+var koi8R = Charmap{
+ name: "KOI8-R",
+ mib: identifier.KOI8R,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0x82}},
+ {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x94, 0x90}},
+ {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0x98}},
+ {3, [3]byte{0xe2, 0x94, 0x9c}}, {3, [3]byte{0xe2, 0x94, 0xa4}},
+ {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
+ {3, [3]byte{0xe2, 0x94, 0xbc}}, {3, [3]byte{0xe2, 0x96, 0x80}},
+ {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x88}},
+ {3, [3]byte{0xe2, 0x96, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x90}},
+ {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
+ {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x8c, 0xa0}},
+ {3, [3]byte{0xe2, 0x96, 0xa0}}, {3, [3]byte{0xe2, 0x88, 0x99}},
+ {3, [3]byte{0xe2, 0x88, 0x9a}}, {3, [3]byte{0xe2, 0x89, 0x88}},
+ {3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
+ {2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {3, [3]byte{0xe2, 0x95, 0x90}}, {3, [3]byte{0xe2, 0x95, 0x91}},
+ {3, [3]byte{0xe2, 0x95, 0x92}}, {2, [3]byte{0xd1, 0x91, 0x00}},
+ {3, [3]byte{0xe2, 0x95, 0x93}}, {3, [3]byte{0xe2, 0x95, 0x94}},
+ {3, [3]byte{0xe2, 0x95, 0x95}}, {3, [3]byte{0xe2, 0x95, 0x96}},
+ {3, [3]byte{0xe2, 0x95, 0x97}}, {3, [3]byte{0xe2, 0x95, 0x98}},
+ {3, [3]byte{0xe2, 0x95, 0x99}}, {3, [3]byte{0xe2, 0x95, 0x9a}},
+ {3, [3]byte{0xe2, 0x95, 0x9b}}, {3, [3]byte{0xe2, 0x95, 0x9c}},
+ {3, [3]byte{0xe2, 0x95, 0x9d}}, {3, [3]byte{0xe2, 0x95, 0x9e}},
+ {3, [3]byte{0xe2, 0x95, 0x9f}}, {3, [3]byte{0xe2, 0x95, 0xa0}},
+ {3, [3]byte{0xe2, 0x95, 0xa1}}, {2, [3]byte{0xd0, 0x81, 0x00}},
+ {3, [3]byte{0xe2, 0x95, 0xa2}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
+ {3, [3]byte{0xe2, 0x95, 0xa4}}, {3, [3]byte{0xe2, 0x95, 0xa5}},
+ {3, [3]byte{0xe2, 0x95, 0xa6}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
+ {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa9}},
+ {3, [3]byte{0xe2, 0x95, 0xaa}}, {3, [3]byte{0xe2, 0x95, 0xab}},
+ {3, [3]byte{0xe2, 0x95, 0xac}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0xb0, 0x00}},
+ {2, [3]byte{0xd0, 0xb1, 0x00}}, {2, [3]byte{0xd1, 0x86, 0x00}},
+ {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}},
+ {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}},
+ {2, [3]byte{0xd1, 0x85, 0x00}}, {2, [3]byte{0xd0, 0xb8, 0x00}},
+ {2, [3]byte{0xd0, 0xb9, 0x00}}, {2, [3]byte{0xd0, 0xba, 0x00}},
+ {2, [3]byte{0xd0, 0xbb, 0x00}}, {2, [3]byte{0xd0, 0xbc, 0x00}},
+ {2, [3]byte{0xd0, 0xbd, 0x00}}, {2, [3]byte{0xd0, 0xbe, 0x00}},
+ {2, [3]byte{0xd0, 0xbf, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}},
+ {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
+ {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
+ {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb2, 0x00}},
+ {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
+ {2, [3]byte{0xd0, 0xb7, 0x00}}, {2, [3]byte{0xd1, 0x88, 0x00}},
+ {2, [3]byte{0xd1, 0x8d, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
+ {2, [3]byte{0xd1, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x8a, 0x00}},
+ {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0x90, 0x00}},
+ {2, [3]byte{0xd0, 0x91, 0x00}}, {2, [3]byte{0xd0, 0xa6, 0x00}},
+ {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
+ {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
+ {2, [3]byte{0xd0, 0xa5, 0x00}}, {2, [3]byte{0xd0, 0x98, 0x00}},
+ {2, [3]byte{0xd0, 0x99, 0x00}}, {2, [3]byte{0xd0, 0x9a, 0x00}},
+ {2, [3]byte{0xd0, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x9c, 0x00}},
+ {2, [3]byte{0xd0, 0x9d, 0x00}}, {2, [3]byte{0xd0, 0x9e, 0x00}},
+ {2, [3]byte{0xd0, 0x9f, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}},
+ {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}},
+ {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}},
+ {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x92, 0x00}},
+ {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}},
+ {2, [3]byte{0xd0, 0x97, 0x00}}, {2, [3]byte{0xd0, 0xa8, 0x00}},
+ {2, [3]byte{0xd0, 0xad, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}},
+ {2, [3]byte{0xd0, 0xa7, 0x00}}, {2, [3]byte{0xd0, 0xaa, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0x9a0000a0, 0xbf0000a9, 0x9c0000b0, 0x9d0000b2, 0x9e0000b7, 0x9f0000f7, 0xb3000401, 0xe1000410,
+ 0xe2000411, 0xf7000412, 0xe7000413, 0xe4000414, 0xe5000415, 0xf6000416, 0xfa000417, 0xe9000418,
+ 0xea000419, 0xeb00041a, 0xec00041b, 0xed00041c, 0xee00041d, 0xef00041e, 0xf000041f, 0xf2000420,
+ 0xf3000421, 0xf4000422, 0xf5000423, 0xe6000424, 0xe8000425, 0xe3000426, 0xfe000427, 0xfb000428,
+ 0xfd000429, 0xff00042a, 0xf900042b, 0xf800042c, 0xfc00042d, 0xe000042e, 0xf100042f, 0xc1000430,
+ 0xc2000431, 0xd7000432, 0xc7000433, 0xc4000434, 0xc5000435, 0xd6000436, 0xda000437, 0xc9000438,
+ 0xca000439, 0xcb00043a, 0xcc00043b, 0xcd00043c, 0xce00043d, 0xcf00043e, 0xd000043f, 0xd2000440,
+ 0xd3000441, 0xd4000442, 0xd5000443, 0xc6000444, 0xc8000445, 0xc3000446, 0xde000447, 0xdb000448,
+ 0xdd000449, 0xdf00044a, 0xd900044b, 0xd800044c, 0xdc00044d, 0xc000044e, 0xd100044f, 0xa3000451,
+ 0x95002219, 0x9600221a, 0x97002248, 0x98002264, 0x99002265, 0x93002320, 0x9b002321, 0x80002500,
+ 0x81002502, 0x8200250c, 0x83002510, 0x84002514, 0x85002518, 0x8600251c, 0x87002524, 0x8800252c,
+ 0x89002534, 0x8a00253c, 0xa0002550, 0xa1002551, 0xa2002552, 0xa4002553, 0xa5002554, 0xa6002555,
+ 0xa7002556, 0xa8002557, 0xa9002558, 0xaa002559, 0xab00255a, 0xac00255b, 0xad00255c, 0xae00255d,
+ 0xaf00255e, 0xb000255f, 0xb1002560, 0xb2002561, 0xb4002562, 0xb5002563, 0xb6002564, 0xb7002565,
+ 0xb8002566, 0xb9002567, 0xba002568, 0xbb002569, 0xbc00256a, 0xbd00256b, 0xbe00256c, 0x8b002580,
+ 0x8c002584, 0x8d002588, 0x8e00258c, 0x8f002590, 0x90002591, 0x91002592, 0x92002593, 0x940025a0,
+ },
+}
+
+// KOI8U is the KOI8-U encoding.
+var KOI8U *Charmap = &koi8U
+
+var koi8U = Charmap{
+ name: "KOI8-U",
+ mib: identifier.KOI8U,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xe2, 0x94, 0x80}}, {3, [3]byte{0xe2, 0x94, 0x82}},
+ {3, [3]byte{0xe2, 0x94, 0x8c}}, {3, [3]byte{0xe2, 0x94, 0x90}},
+ {3, [3]byte{0xe2, 0x94, 0x94}}, {3, [3]byte{0xe2, 0x94, 0x98}},
+ {3, [3]byte{0xe2, 0x94, 0x9c}}, {3, [3]byte{0xe2, 0x94, 0xa4}},
+ {3, [3]byte{0xe2, 0x94, 0xac}}, {3, [3]byte{0xe2, 0x94, 0xb4}},
+ {3, [3]byte{0xe2, 0x94, 0xbc}}, {3, [3]byte{0xe2, 0x96, 0x80}},
+ {3, [3]byte{0xe2, 0x96, 0x84}}, {3, [3]byte{0xe2, 0x96, 0x88}},
+ {3, [3]byte{0xe2, 0x96, 0x8c}}, {3, [3]byte{0xe2, 0x96, 0x90}},
+ {3, [3]byte{0xe2, 0x96, 0x91}}, {3, [3]byte{0xe2, 0x96, 0x92}},
+ {3, [3]byte{0xe2, 0x96, 0x93}}, {3, [3]byte{0xe2, 0x8c, 0xa0}},
+ {3, [3]byte{0xe2, 0x96, 0xa0}}, {3, [3]byte{0xe2, 0x88, 0x99}},
+ {3, [3]byte{0xe2, 0x88, 0x9a}}, {3, [3]byte{0xe2, 0x89, 0x88}},
+ {3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x8c, 0xa1}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb2, 0x00}},
+ {2, [3]byte{0xc2, 0xb7, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {3, [3]byte{0xe2, 0x95, 0x90}}, {3, [3]byte{0xe2, 0x95, 0x91}},
+ {3, [3]byte{0xe2, 0x95, 0x92}}, {2, [3]byte{0xd1, 0x91, 0x00}},
+ {2, [3]byte{0xd1, 0x94, 0x00}}, {3, [3]byte{0xe2, 0x95, 0x94}},
+ {2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}},
+ {3, [3]byte{0xe2, 0x95, 0x97}}, {3, [3]byte{0xe2, 0x95, 0x98}},
+ {3, [3]byte{0xe2, 0x95, 0x99}}, {3, [3]byte{0xe2, 0x95, 0x9a}},
+ {3, [3]byte{0xe2, 0x95, 0x9b}}, {2, [3]byte{0xd2, 0x91, 0x00}},
+ {2, [3]byte{0xd1, 0x9e, 0x00}}, {3, [3]byte{0xe2, 0x95, 0x9e}},
+ {3, [3]byte{0xe2, 0x95, 0x9f}}, {3, [3]byte{0xe2, 0x95, 0xa0}},
+ {3, [3]byte{0xe2, 0x95, 0xa1}}, {2, [3]byte{0xd0, 0x81, 0x00}},
+ {2, [3]byte{0xd0, 0x84, 0x00}}, {3, [3]byte{0xe2, 0x95, 0xa3}},
+ {2, [3]byte{0xd0, 0x86, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}},
+ {3, [3]byte{0xe2, 0x95, 0xa6}}, {3, [3]byte{0xe2, 0x95, 0xa7}},
+ {3, [3]byte{0xe2, 0x95, 0xa8}}, {3, [3]byte{0xe2, 0x95, 0xa9}},
+ {3, [3]byte{0xe2, 0x95, 0xaa}}, {2, [3]byte{0xd2, 0x90, 0x00}},
+ {2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd0, 0xb0, 0x00}},
+ {2, [3]byte{0xd0, 0xb1, 0x00}}, {2, [3]byte{0xd1, 0x86, 0x00}},
+ {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}},
+ {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}},
+ {2, [3]byte{0xd1, 0x85, 0x00}}, {2, [3]byte{0xd0, 0xb8, 0x00}},
+ {2, [3]byte{0xd0, 0xb9, 0x00}}, {2, [3]byte{0xd0, 0xba, 0x00}},
+ {2, [3]byte{0xd0, 0xbb, 0x00}}, {2, [3]byte{0xd0, 0xbc, 0x00}},
+ {2, [3]byte{0xd0, 0xbd, 0x00}}, {2, [3]byte{0xd0, 0xbe, 0x00}},
+ {2, [3]byte{0xd0, 0xbf, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}},
+ {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
+ {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
+ {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb2, 0x00}},
+ {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
+ {2, [3]byte{0xd0, 0xb7, 0x00}}, {2, [3]byte{0xd1, 0x88, 0x00}},
+ {2, [3]byte{0xd1, 0x8d, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
+ {2, [3]byte{0xd1, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x8a, 0x00}},
+ {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0x90, 0x00}},
+ {2, [3]byte{0xd0, 0x91, 0x00}}, {2, [3]byte{0xd0, 0xa6, 0x00}},
+ {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
+ {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
+ {2, [3]byte{0xd0, 0xa5, 0x00}}, {2, [3]byte{0xd0, 0x98, 0x00}},
+ {2, [3]byte{0xd0, 0x99, 0x00}}, {2, [3]byte{0xd0, 0x9a, 0x00}},
+ {2, [3]byte{0xd0, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x9c, 0x00}},
+ {2, [3]byte{0xd0, 0x9d, 0x00}}, {2, [3]byte{0xd0, 0x9e, 0x00}},
+ {2, [3]byte{0xd0, 0x9f, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}},
+ {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}},
+ {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}},
+ {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x92, 0x00}},
+ {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}},
+ {2, [3]byte{0xd0, 0x97, 0x00}}, {2, [3]byte{0xd0, 0xa8, 0x00}},
+ {2, [3]byte{0xd0, 0xad, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}},
+ {2, [3]byte{0xd0, 0xa7, 0x00}}, {2, [3]byte{0xd0, 0xaa, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0x9a0000a0, 0xbf0000a9, 0x9c0000b0, 0x9d0000b2, 0x9e0000b7, 0x9f0000f7, 0xb3000401, 0xb4000404,
+ 0xb6000406, 0xb7000407, 0xbe00040e, 0xe1000410, 0xe2000411, 0xf7000412, 0xe7000413, 0xe4000414,
+ 0xe5000415, 0xf6000416, 0xfa000417, 0xe9000418, 0xea000419, 0xeb00041a, 0xec00041b, 0xed00041c,
+ 0xee00041d, 0xef00041e, 0xf000041f, 0xf2000420, 0xf3000421, 0xf4000422, 0xf5000423, 0xe6000424,
+ 0xe8000425, 0xe3000426, 0xfe000427, 0xfb000428, 0xfd000429, 0xff00042a, 0xf900042b, 0xf800042c,
+ 0xfc00042d, 0xe000042e, 0xf100042f, 0xc1000430, 0xc2000431, 0xd7000432, 0xc7000433, 0xc4000434,
+ 0xc5000435, 0xd6000436, 0xda000437, 0xc9000438, 0xca000439, 0xcb00043a, 0xcc00043b, 0xcd00043c,
+ 0xce00043d, 0xcf00043e, 0xd000043f, 0xd2000440, 0xd3000441, 0xd4000442, 0xd5000443, 0xc6000444,
+ 0xc8000445, 0xc3000446, 0xde000447, 0xdb000448, 0xdd000449, 0xdf00044a, 0xd900044b, 0xd800044c,
+ 0xdc00044d, 0xc000044e, 0xd100044f, 0xa3000451, 0xa4000454, 0xa6000456, 0xa7000457, 0xae00045e,
+ 0xbd000490, 0xad000491, 0x95002219, 0x9600221a, 0x97002248, 0x98002264, 0x99002265, 0x93002320,
+ 0x9b002321, 0x80002500, 0x81002502, 0x8200250c, 0x83002510, 0x84002514, 0x85002518, 0x8600251c,
+ 0x87002524, 0x8800252c, 0x89002534, 0x8a00253c, 0xa0002550, 0xa1002551, 0xa2002552, 0xa5002554,
+ 0xa8002557, 0xa9002558, 0xaa002559, 0xab00255a, 0xac00255b, 0xaf00255e, 0xb000255f, 0xb1002560,
+ 0xb2002561, 0xb5002563, 0xb8002566, 0xb9002567, 0xba002568, 0xbb002569, 0xbc00256a, 0x8b002580,
+ 0x8c002584, 0x8d002588, 0x8e00258c, 0x8f002590, 0x90002591, 0x91002592, 0x92002593, 0x940025a0,
+ },
+}
+
+// Macintosh is the Macintosh encoding.
+var Macintosh *Charmap = &macintosh
+
+var macintosh = Charmap{
+ name: "Macintosh",
+ mib: identifier.Macintosh,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x91, 0x00}}, {2, [3]byte{0xc3, 0x96, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa2, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
+ {2, [3]byte{0xc3, 0xa5, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xa9, 0x00}}, {2, [3]byte{0xc3, 0xa8, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xad, 0x00}}, {2, [3]byte{0xc3, 0xac, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xb1, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb4, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xbb, 0x00}}, {2, [3]byte{0xc3, 0xbc, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0xa0}}, {2, [3]byte{0xc2, 0xb0, 0x00}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa7, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {3, [3]byte{0xe2, 0x84, 0xa2}}, {2, [3]byte{0xc2, 0xb4, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {3, [3]byte{0xe2, 0x89, 0xa0}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x98, 0x00}},
+ {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}},
+ {2, [3]byte{0xc2, 0xa5, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {3, [3]byte{0xe2, 0x88, 0x82}}, {3, [3]byte{0xe2, 0x88, 0x91}},
+ {3, [3]byte{0xe2, 0x88, 0x8f}}, {2, [3]byte{0xcf, 0x80, 0x00}},
+ {3, [3]byte{0xe2, 0x88, 0xab}}, {2, [3]byte{0xc2, 0xaa, 0x00}},
+ {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xce, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xb8, 0x00}},
+ {2, [3]byte{0xc2, 0xbf, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
+ {2, [3]byte{0xc6, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
+ {3, [3]byte{0xe2, 0x88, 0x86}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xbb, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0x80, 0x00}},
+ {2, [3]byte{0xc3, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xc5, 0x93, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
+ {3, [3]byte{0xe2, 0x80, 0x9c}}, {3, [3]byte{0xe2, 0x80, 0x9d}},
+ {3, [3]byte{0xe2, 0x80, 0x98}}, {3, [3]byte{0xe2, 0x80, 0x99}},
+ {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x97, 0x8a}},
+ {2, [3]byte{0xc3, 0xbf, 0x00}}, {2, [3]byte{0xc5, 0xb8, 0x00}},
+ {3, [3]byte{0xe2, 0x81, 0x84}}, {3, [3]byte{0xe2, 0x82, 0xac}},
+ {3, [3]byte{0xe2, 0x80, 0xb9}}, {3, [3]byte{0xe2, 0x80, 0xba}},
+ {3, [3]byte{0xef, 0xac, 0x81}}, {3, [3]byte{0xef, 0xac, 0x82}},
+ {3, [3]byte{0xe2, 0x80, 0xa1}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x9a}}, {3, [3]byte{0xe2, 0x80, 0x9e}},
+ {3, [3]byte{0xe2, 0x80, 0xb0}}, {2, [3]byte{0xc3, 0x82, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x8b, 0x00}}, {2, [3]byte{0xc3, 0x88, 0x00}},
+ {2, [3]byte{0xc3, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0x8e, 0x00}},
+ {2, [3]byte{0xc3, 0x8f, 0x00}}, {2, [3]byte{0xc3, 0x8c, 0x00}},
+ {2, [3]byte{0xc3, 0x93, 0x00}}, {2, [3]byte{0xc3, 0x94, 0x00}},
+ {3, [3]byte{0xef, 0xa3, 0xbf}}, {2, [3]byte{0xc3, 0x92, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x99, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}},
+ {2, [3]byte{0xcb, 0x86, 0x00}}, {2, [3]byte{0xcb, 0x9c, 0x00}},
+ {2, [3]byte{0xc2, 0xaf, 0x00}}, {2, [3]byte{0xcb, 0x98, 0x00}},
+ {2, [3]byte{0xcb, 0x99, 0x00}}, {2, [3]byte{0xcb, 0x9a, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}},
+ {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xca0000a0, 0xc10000a1, 0xa20000a2, 0xa30000a3, 0xb40000a5, 0xa40000a7, 0xac0000a8, 0xa90000a9,
+ 0xbb0000aa, 0xc70000ab, 0xc20000ac, 0xa80000ae, 0xf80000af, 0xa10000b0, 0xb10000b1, 0xab0000b4,
+ 0xb50000b5, 0xa60000b6, 0xe10000b7, 0xfc0000b8, 0xbc0000ba, 0xc80000bb, 0xc00000bf, 0xcb0000c0,
+ 0xe70000c1, 0xe50000c2, 0xcc0000c3, 0x800000c4, 0x810000c5, 0xae0000c6, 0x820000c7, 0xe90000c8,
+ 0x830000c9, 0xe60000ca, 0xe80000cb, 0xed0000cc, 0xea0000cd, 0xeb0000ce, 0xec0000cf, 0x840000d1,
+ 0xf10000d2, 0xee0000d3, 0xef0000d4, 0xcd0000d5, 0x850000d6, 0xaf0000d8, 0xf40000d9, 0xf20000da,
+ 0xf30000db, 0x860000dc, 0xa70000df, 0x880000e0, 0x870000e1, 0x890000e2, 0x8b0000e3, 0x8a0000e4,
+ 0x8c0000e5, 0xbe0000e6, 0x8d0000e7, 0x8f0000e8, 0x8e0000e9, 0x900000ea, 0x910000eb, 0x930000ec,
+ 0x920000ed, 0x940000ee, 0x950000ef, 0x960000f1, 0x980000f2, 0x970000f3, 0x990000f4, 0x9b0000f5,
+ 0x9a0000f6, 0xd60000f7, 0xbf0000f8, 0x9d0000f9, 0x9c0000fa, 0x9e0000fb, 0x9f0000fc, 0xd80000ff,
+ 0xf5000131, 0xce000152, 0xcf000153, 0xd9000178, 0xc4000192, 0xf60002c6, 0xff0002c7, 0xf90002d8,
+ 0xfa0002d9, 0xfb0002da, 0xfe0002db, 0xf70002dc, 0xfd0002dd, 0xbd0003a9, 0xb90003c0, 0xd0002013,
+ 0xd1002014, 0xd4002018, 0xd5002019, 0xe200201a, 0xd200201c, 0xd300201d, 0xe300201e, 0xa0002020,
+ 0xe0002021, 0xa5002022, 0xc9002026, 0xe4002030, 0xdc002039, 0xdd00203a, 0xda002044, 0xdb0020ac,
+ 0xaa002122, 0xb6002202, 0xc6002206, 0xb800220f, 0xb7002211, 0xc300221a, 0xb000221e, 0xba00222b,
+ 0xc5002248, 0xad002260, 0xb2002264, 0xb3002265, 0xd70025ca, 0xf000f8ff, 0xde00fb01, 0xdf00fb02,
+ },
+}
+
+// MacintoshCyrillic is the Macintosh Cyrillic encoding.
+var MacintoshCyrillic *Charmap = &macintoshCyrillic
+
+var macintoshCyrillic = Charmap{
+ name: "Macintosh Cyrillic",
+ mib: identifier.MacintoshCyrillic,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}},
+ {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
+ {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
+ {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}},
+ {2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}},
+ {2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}},
+ {2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}},
+ {2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}},
+ {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}},
+ {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}},
+ {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}},
+ {2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}},
+ {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}},
+ {2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}},
+ {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}},
+ {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0xa0}}, {2, [3]byte{0xc2, 0xb0, 0x00}},
+ {2, [3]byte{0xd2, 0x90, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa7, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0x86, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {3, [3]byte{0xe2, 0x84, 0xa2}}, {2, [3]byte{0xd0, 0x82, 0x00}},
+ {2, [3]byte{0xd1, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x89, 0xa0}},
+ {2, [3]byte{0xd0, 0x83, 0x00}}, {2, [3]byte{0xd1, 0x93, 0x00}},
+ {3, [3]byte{0xe2, 0x88, 0x9e}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {3, [3]byte{0xe2, 0x89, 0xa4}}, {3, [3]byte{0xe2, 0x89, 0xa5}},
+ {2, [3]byte{0xd1, 0x96, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xd2, 0x91, 0x00}}, {2, [3]byte{0xd0, 0x88, 0x00}},
+ {2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x94, 0x00}},
+ {2, [3]byte{0xd0, 0x87, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}},
+ {2, [3]byte{0xd0, 0x89, 0x00}}, {2, [3]byte{0xd1, 0x99, 0x00}},
+ {2, [3]byte{0xd0, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x9a, 0x00}},
+ {2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {3, [3]byte{0xe2, 0x88, 0x9a}},
+ {2, [3]byte{0xc6, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x89, 0x88}},
+ {3, [3]byte{0xe2, 0x88, 0x86}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xbb, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0x8b, 0x00}},
+ {2, [3]byte{0xd1, 0x9b, 0x00}}, {2, [3]byte{0xd0, 0x8c, 0x00}},
+ {2, [3]byte{0xd1, 0x9c, 0x00}}, {2, [3]byte{0xd1, 0x95, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
+ {3, [3]byte{0xe2, 0x80, 0x9c}}, {3, [3]byte{0xe2, 0x80, 0x9d}},
+ {3, [3]byte{0xe2, 0x80, 0x98}}, {3, [3]byte{0xe2, 0x80, 0x99}},
+ {2, [3]byte{0xc3, 0xb7, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x9e}},
+ {2, [3]byte{0xd0, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x9e, 0x00}},
+ {2, [3]byte{0xd0, 0x8f, 0x00}}, {2, [3]byte{0xd1, 0x9f, 0x00}},
+ {3, [3]byte{0xe2, 0x84, 0x96}}, {2, [3]byte{0xd0, 0x81, 0x00}},
+ {2, [3]byte{0xd1, 0x91, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}},
+ {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}},
+ {2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}},
+ {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}},
+ {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}},
+ {2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}},
+ {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}},
+ {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}},
+ {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}},
+ {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
+ {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
+ {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}},
+ {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}},
+ {2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
+ {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
+ {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}},
+ {2, [3]byte{0xd1, 0x8e, 0x00}}, {3, [3]byte{0xe2, 0x82, 0xac}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xca0000a0, 0xa30000a3, 0xa40000a7, 0xa90000a9, 0xc70000ab, 0xc20000ac, 0xa80000ae, 0xa10000b0,
+ 0xb10000b1, 0xb50000b5, 0xa60000b6, 0xc80000bb, 0xd60000f7, 0xc4000192, 0xdd000401, 0xab000402,
+ 0xae000403, 0xb8000404, 0xc1000405, 0xa7000406, 0xba000407, 0xb7000408, 0xbc000409, 0xbe00040a,
+ 0xcb00040b, 0xcd00040c, 0xd800040e, 0xda00040f, 0x80000410, 0x81000411, 0x82000412, 0x83000413,
+ 0x84000414, 0x85000415, 0x86000416, 0x87000417, 0x88000418, 0x89000419, 0x8a00041a, 0x8b00041b,
+ 0x8c00041c, 0x8d00041d, 0x8e00041e, 0x8f00041f, 0x90000420, 0x91000421, 0x92000422, 0x93000423,
+ 0x94000424, 0x95000425, 0x96000426, 0x97000427, 0x98000428, 0x99000429, 0x9a00042a, 0x9b00042b,
+ 0x9c00042c, 0x9d00042d, 0x9e00042e, 0x9f00042f, 0xe0000430, 0xe1000431, 0xe2000432, 0xe3000433,
+ 0xe4000434, 0xe5000435, 0xe6000436, 0xe7000437, 0xe8000438, 0xe9000439, 0xea00043a, 0xeb00043b,
+ 0xec00043c, 0xed00043d, 0xee00043e, 0xef00043f, 0xf0000440, 0xf1000441, 0xf2000442, 0xf3000443,
+ 0xf4000444, 0xf5000445, 0xf6000446, 0xf7000447, 0xf8000448, 0xf9000449, 0xfa00044a, 0xfb00044b,
+ 0xfc00044c, 0xfd00044d, 0xfe00044e, 0xdf00044f, 0xde000451, 0xac000452, 0xaf000453, 0xb9000454,
+ 0xcf000455, 0xb4000456, 0xbb000457, 0xc0000458, 0xbd000459, 0xbf00045a, 0xcc00045b, 0xce00045c,
+ 0xd900045e, 0xdb00045f, 0xa2000490, 0xb6000491, 0xd0002013, 0xd1002014, 0xd4002018, 0xd5002019,
+ 0xd200201c, 0xd300201d, 0xd700201e, 0xa0002020, 0xa5002022, 0xc9002026, 0xff0020ac, 0xdc002116,
+ 0xaa002122, 0xc6002206, 0xc300221a, 0xb000221e, 0xc5002248, 0xad002260, 0xb2002264, 0xb3002265,
+ },
+}
+
+// Windows874 is the Windows 874 encoding.
+var Windows874 *Charmap = &windows874
+
+var windows874 = Charmap{
+ name: "Windows 874",
+ mib: identifier.Windows874,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
+ {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
+ {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
+ {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xe0, 0xb8, 0x81}},
+ {3, [3]byte{0xe0, 0xb8, 0x82}}, {3, [3]byte{0xe0, 0xb8, 0x83}},
+ {3, [3]byte{0xe0, 0xb8, 0x84}}, {3, [3]byte{0xe0, 0xb8, 0x85}},
+ {3, [3]byte{0xe0, 0xb8, 0x86}}, {3, [3]byte{0xe0, 0xb8, 0x87}},
+ {3, [3]byte{0xe0, 0xb8, 0x88}}, {3, [3]byte{0xe0, 0xb8, 0x89}},
+ {3, [3]byte{0xe0, 0xb8, 0x8a}}, {3, [3]byte{0xe0, 0xb8, 0x8b}},
+ {3, [3]byte{0xe0, 0xb8, 0x8c}}, {3, [3]byte{0xe0, 0xb8, 0x8d}},
+ {3, [3]byte{0xe0, 0xb8, 0x8e}}, {3, [3]byte{0xe0, 0xb8, 0x8f}},
+ {3, [3]byte{0xe0, 0xb8, 0x90}}, {3, [3]byte{0xe0, 0xb8, 0x91}},
+ {3, [3]byte{0xe0, 0xb8, 0x92}}, {3, [3]byte{0xe0, 0xb8, 0x93}},
+ {3, [3]byte{0xe0, 0xb8, 0x94}}, {3, [3]byte{0xe0, 0xb8, 0x95}},
+ {3, [3]byte{0xe0, 0xb8, 0x96}}, {3, [3]byte{0xe0, 0xb8, 0x97}},
+ {3, [3]byte{0xe0, 0xb8, 0x98}}, {3, [3]byte{0xe0, 0xb8, 0x99}},
+ {3, [3]byte{0xe0, 0xb8, 0x9a}}, {3, [3]byte{0xe0, 0xb8, 0x9b}},
+ {3, [3]byte{0xe0, 0xb8, 0x9c}}, {3, [3]byte{0xe0, 0xb8, 0x9d}},
+ {3, [3]byte{0xe0, 0xb8, 0x9e}}, {3, [3]byte{0xe0, 0xb8, 0x9f}},
+ {3, [3]byte{0xe0, 0xb8, 0xa0}}, {3, [3]byte{0xe0, 0xb8, 0xa1}},
+ {3, [3]byte{0xe0, 0xb8, 0xa2}}, {3, [3]byte{0xe0, 0xb8, 0xa3}},
+ {3, [3]byte{0xe0, 0xb8, 0xa4}}, {3, [3]byte{0xe0, 0xb8, 0xa5}},
+ {3, [3]byte{0xe0, 0xb8, 0xa6}}, {3, [3]byte{0xe0, 0xb8, 0xa7}},
+ {3, [3]byte{0xe0, 0xb8, 0xa8}}, {3, [3]byte{0xe0, 0xb8, 0xa9}},
+ {3, [3]byte{0xe0, 0xb8, 0xaa}}, {3, [3]byte{0xe0, 0xb8, 0xab}},
+ {3, [3]byte{0xe0, 0xb8, 0xac}}, {3, [3]byte{0xe0, 0xb8, 0xad}},
+ {3, [3]byte{0xe0, 0xb8, 0xae}}, {3, [3]byte{0xe0, 0xb8, 0xaf}},
+ {3, [3]byte{0xe0, 0xb8, 0xb0}}, {3, [3]byte{0xe0, 0xb8, 0xb1}},
+ {3, [3]byte{0xe0, 0xb8, 0xb2}}, {3, [3]byte{0xe0, 0xb8, 0xb3}},
+ {3, [3]byte{0xe0, 0xb8, 0xb4}}, {3, [3]byte{0xe0, 0xb8, 0xb5}},
+ {3, [3]byte{0xe0, 0xb8, 0xb6}}, {3, [3]byte{0xe0, 0xb8, 0xb7}},
+ {3, [3]byte{0xe0, 0xb8, 0xb8}}, {3, [3]byte{0xe0, 0xb8, 0xb9}},
+ {3, [3]byte{0xe0, 0xb8, 0xba}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe0, 0xb8, 0xbf}},
+ {3, [3]byte{0xe0, 0xb9, 0x80}}, {3, [3]byte{0xe0, 0xb9, 0x81}},
+ {3, [3]byte{0xe0, 0xb9, 0x82}}, {3, [3]byte{0xe0, 0xb9, 0x83}},
+ {3, [3]byte{0xe0, 0xb9, 0x84}}, {3, [3]byte{0xe0, 0xb9, 0x85}},
+ {3, [3]byte{0xe0, 0xb9, 0x86}}, {3, [3]byte{0xe0, 0xb9, 0x87}},
+ {3, [3]byte{0xe0, 0xb9, 0x88}}, {3, [3]byte{0xe0, 0xb9, 0x89}},
+ {3, [3]byte{0xe0, 0xb9, 0x8a}}, {3, [3]byte{0xe0, 0xb9, 0x8b}},
+ {3, [3]byte{0xe0, 0xb9, 0x8c}}, {3, [3]byte{0xe0, 0xb9, 0x8d}},
+ {3, [3]byte{0xe0, 0xb9, 0x8e}}, {3, [3]byte{0xe0, 0xb9, 0x8f}},
+ {3, [3]byte{0xe0, 0xb9, 0x90}}, {3, [3]byte{0xe0, 0xb9, 0x91}},
+ {3, [3]byte{0xe0, 0xb9, 0x92}}, {3, [3]byte{0xe0, 0xb9, 0x93}},
+ {3, [3]byte{0xe0, 0xb9, 0x94}}, {3, [3]byte{0xe0, 0xb9, 0x95}},
+ {3, [3]byte{0xe0, 0xb9, 0x96}}, {3, [3]byte{0xe0, 0xb9, 0x97}},
+ {3, [3]byte{0xe0, 0xb9, 0x98}}, {3, [3]byte{0xe0, 0xb9, 0x99}},
+ {3, [3]byte{0xe0, 0xb9, 0x9a}}, {3, [3]byte{0xe0, 0xb9, 0x9b}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa1000e01, 0xa2000e02, 0xa3000e03, 0xa4000e04, 0xa5000e05, 0xa6000e06, 0xa7000e07,
+ 0xa8000e08, 0xa9000e09, 0xaa000e0a, 0xab000e0b, 0xac000e0c, 0xad000e0d, 0xae000e0e, 0xaf000e0f,
+ 0xb0000e10, 0xb1000e11, 0xb2000e12, 0xb3000e13, 0xb4000e14, 0xb5000e15, 0xb6000e16, 0xb7000e17,
+ 0xb8000e18, 0xb9000e19, 0xba000e1a, 0xbb000e1b, 0xbc000e1c, 0xbd000e1d, 0xbe000e1e, 0xbf000e1f,
+ 0xc0000e20, 0xc1000e21, 0xc2000e22, 0xc3000e23, 0xc4000e24, 0xc5000e25, 0xc6000e26, 0xc7000e27,
+ 0xc8000e28, 0xc9000e29, 0xca000e2a, 0xcb000e2b, 0xcc000e2c, 0xcd000e2d, 0xce000e2e, 0xcf000e2f,
+ 0xd0000e30, 0xd1000e31, 0xd2000e32, 0xd3000e33, 0xd4000e34, 0xd5000e35, 0xd6000e36, 0xd7000e37,
+ 0xd8000e38, 0xd9000e39, 0xda000e3a, 0xdf000e3f, 0xe0000e40, 0xe1000e41, 0xe2000e42, 0xe3000e43,
+ 0xe4000e44, 0xe5000e45, 0xe6000e46, 0xe7000e47, 0xe8000e48, 0xe9000e49, 0xea000e4a, 0xeb000e4b,
+ 0xec000e4c, 0xed000e4d, 0xee000e4e, 0xef000e4f, 0xf0000e50, 0xf1000e51, 0xf2000e52, 0xf3000e53,
+ 0xf4000e54, 0xf5000e55, 0xf6000e56, 0xf7000e57, 0xf8000e58, 0xf9000e59, 0xfa000e5a, 0xfb000e5b,
+ 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x9300201c, 0x9400201d, 0x95002022, 0x85002026,
+ 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac,
+ 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac,
+ 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac,
+ 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac, 0x800020ac,
+ },
+}
+
+// Windows1250 is the Windows 1250 encoding.
+var Windows1250 *Charmap = &windows1250
+
+var windows1250 = Charmap{
+ name: "Windows 1250",
+ mib: identifier.Windows1250,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xe2, 0x80, 0x9a}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
+ {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
+ {2, [3]byte{0xc5, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
+ {2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xa4, 0x00}},
+ {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc5, 0xb9, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
+ {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
+ {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
+ {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
+ {2, [3]byte{0xc5, 0xa1, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}},
+ {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0xa5, 0x00}},
+ {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xba, 0x00}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xcb, 0x87, 0x00}},
+ {2, [3]byte{0xcb, 0x98, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0x84, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xcb, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc4, 0x85, 0x00}},
+ {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc4, 0xbd, 0x00}}, {2, [3]byte{0xcb, 0x9d, 0x00}},
+ {2, [3]byte{0xc4, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}},
+ {2, [3]byte{0xc5, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xb9, 0x00}},
+ {2, [3]byte{0xc4, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
+ {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc4, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc4, 0x8e, 0x00}},
+ {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}},
+ {2, [3]byte{0xc5, 0x87, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc5, 0x90, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xc5, 0x98, 0x00}}, {2, [3]byte{0xc5, 0xae, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xb0, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+ {2, [3]byte{0xc5, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc5, 0x95, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc4, 0xba, 0x00}},
+ {2, [3]byte{0xc4, 0x87, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc4, 0x9b, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc4, 0x8f, 0x00}},
+ {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}},
+ {2, [3]byte{0xc5, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc5, 0x91, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xc5, 0x99, 0x00}}, {2, [3]byte{0xc5, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc5, 0xb1, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+ {2, [3]byte{0xc5, 0xa3, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0xa80000a8, 0xa90000a9, 0xab0000ab, 0xac0000ac,
+ 0xad0000ad, 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
+ 0xb80000b8, 0xbb0000bb, 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc70000c7, 0xc90000c9, 0xcb0000cb,
+ 0xcd0000cd, 0xce0000ce, 0xd30000d3, 0xd40000d4, 0xd60000d6, 0xd70000d7, 0xda0000da, 0xdc0000dc,
+ 0xdd0000dd, 0xdf0000df, 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe70000e7, 0xe90000e9, 0xeb0000eb,
+ 0xed0000ed, 0xee0000ee, 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf70000f7, 0xfa0000fa, 0xfc0000fc,
+ 0xfd0000fd, 0xc3000102, 0xe3000103, 0xa5000104, 0xb9000105, 0xc6000106, 0xe6000107, 0xc800010c,
+ 0xe800010d, 0xcf00010e, 0xef00010f, 0xd0000110, 0xf0000111, 0xca000118, 0xea000119, 0xcc00011a,
+ 0xec00011b, 0xc5000139, 0xe500013a, 0xbc00013d, 0xbe00013e, 0xa3000141, 0xb3000142, 0xd1000143,
+ 0xf1000144, 0xd2000147, 0xf2000148, 0xd5000150, 0xf5000151, 0xc0000154, 0xe0000155, 0xd8000158,
+ 0xf8000159, 0x8c00015a, 0x9c00015b, 0xaa00015e, 0xba00015f, 0x8a000160, 0x9a000161, 0xde000162,
+ 0xfe000163, 0x8d000164, 0x9d000165, 0xd900016e, 0xf900016f, 0xdb000170, 0xfb000171, 0x8f000179,
+ 0x9f00017a, 0xaf00017b, 0xbf00017c, 0x8e00017d, 0x9e00017e, 0xa10002c7, 0xa20002d8, 0xff0002d9,
+ 0xb20002db, 0xbd0002dd, 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c,
+ 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039,
+ 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
+ },
+}
+
+// Windows1251 is the Windows 1251 encoding.
+var Windows1251 *Charmap = &windows1251
+
+var windows1251 = Charmap{
+ name: "Windows 1251",
+ mib: identifier.Windows1251,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {2, [3]byte{0xd0, 0x82, 0x00}}, {2, [3]byte{0xd0, 0x83, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xd1, 0x93, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
+ {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
+ {2, [3]byte{0xd0, 0x89, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
+ {2, [3]byte{0xd0, 0x8a, 0x00}}, {2, [3]byte{0xd0, 0x8c, 0x00}},
+ {2, [3]byte{0xd0, 0x8b, 0x00}}, {2, [3]byte{0xd0, 0x8f, 0x00}},
+ {2, [3]byte{0xd1, 0x92, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x98}},
+ {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
+ {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
+ {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
+ {2, [3]byte{0xd1, 0x99, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}},
+ {2, [3]byte{0xd1, 0x9a, 0x00}}, {2, [3]byte{0xd1, 0x9c, 0x00}},
+ {2, [3]byte{0xd1, 0x9b, 0x00}}, {2, [3]byte{0xd1, 0x9f, 0x00}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0x8e, 0x00}},
+ {2, [3]byte{0xd1, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x88, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xd2, 0x90, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xd0, 0x81, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xd0, 0x84, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xd0, 0x87, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xd0, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x96, 0x00}},
+ {2, [3]byte{0xd2, 0x91, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xd1, 0x91, 0x00}}, {3, [3]byte{0xe2, 0x84, 0x96}},
+ {2, [3]byte{0xd1, 0x94, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xd1, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x85, 0x00}},
+ {2, [3]byte{0xd1, 0x95, 0x00}}, {2, [3]byte{0xd1, 0x97, 0x00}},
+ {2, [3]byte{0xd0, 0x90, 0x00}}, {2, [3]byte{0xd0, 0x91, 0x00}},
+ {2, [3]byte{0xd0, 0x92, 0x00}}, {2, [3]byte{0xd0, 0x93, 0x00}},
+ {2, [3]byte{0xd0, 0x94, 0x00}}, {2, [3]byte{0xd0, 0x95, 0x00}},
+ {2, [3]byte{0xd0, 0x96, 0x00}}, {2, [3]byte{0xd0, 0x97, 0x00}},
+ {2, [3]byte{0xd0, 0x98, 0x00}}, {2, [3]byte{0xd0, 0x99, 0x00}},
+ {2, [3]byte{0xd0, 0x9a, 0x00}}, {2, [3]byte{0xd0, 0x9b, 0x00}},
+ {2, [3]byte{0xd0, 0x9c, 0x00}}, {2, [3]byte{0xd0, 0x9d, 0x00}},
+ {2, [3]byte{0xd0, 0x9e, 0x00}}, {2, [3]byte{0xd0, 0x9f, 0x00}},
+ {2, [3]byte{0xd0, 0xa0, 0x00}}, {2, [3]byte{0xd0, 0xa1, 0x00}},
+ {2, [3]byte{0xd0, 0xa2, 0x00}}, {2, [3]byte{0xd0, 0xa3, 0x00}},
+ {2, [3]byte{0xd0, 0xa4, 0x00}}, {2, [3]byte{0xd0, 0xa5, 0x00}},
+ {2, [3]byte{0xd0, 0xa6, 0x00}}, {2, [3]byte{0xd0, 0xa7, 0x00}},
+ {2, [3]byte{0xd0, 0xa8, 0x00}}, {2, [3]byte{0xd0, 0xa9, 0x00}},
+ {2, [3]byte{0xd0, 0xaa, 0x00}}, {2, [3]byte{0xd0, 0xab, 0x00}},
+ {2, [3]byte{0xd0, 0xac, 0x00}}, {2, [3]byte{0xd0, 0xad, 0x00}},
+ {2, [3]byte{0xd0, 0xae, 0x00}}, {2, [3]byte{0xd0, 0xaf, 0x00}},
+ {2, [3]byte{0xd0, 0xb0, 0x00}}, {2, [3]byte{0xd0, 0xb1, 0x00}},
+ {2, [3]byte{0xd0, 0xb2, 0x00}}, {2, [3]byte{0xd0, 0xb3, 0x00}},
+ {2, [3]byte{0xd0, 0xb4, 0x00}}, {2, [3]byte{0xd0, 0xb5, 0x00}},
+ {2, [3]byte{0xd0, 0xb6, 0x00}}, {2, [3]byte{0xd0, 0xb7, 0x00}},
+ {2, [3]byte{0xd0, 0xb8, 0x00}}, {2, [3]byte{0xd0, 0xb9, 0x00}},
+ {2, [3]byte{0xd0, 0xba, 0x00}}, {2, [3]byte{0xd0, 0xbb, 0x00}},
+ {2, [3]byte{0xd0, 0xbc, 0x00}}, {2, [3]byte{0xd0, 0xbd, 0x00}},
+ {2, [3]byte{0xd0, 0xbe, 0x00}}, {2, [3]byte{0xd0, 0xbf, 0x00}},
+ {2, [3]byte{0xd1, 0x80, 0x00}}, {2, [3]byte{0xd1, 0x81, 0x00}},
+ {2, [3]byte{0xd1, 0x82, 0x00}}, {2, [3]byte{0xd1, 0x83, 0x00}},
+ {2, [3]byte{0xd1, 0x84, 0x00}}, {2, [3]byte{0xd1, 0x85, 0x00}},
+ {2, [3]byte{0xd1, 0x86, 0x00}}, {2, [3]byte{0xd1, 0x87, 0x00}},
+ {2, [3]byte{0xd1, 0x88, 0x00}}, {2, [3]byte{0xd1, 0x89, 0x00}},
+ {2, [3]byte{0xd1, 0x8a, 0x00}}, {2, [3]byte{0xd1, 0x8b, 0x00}},
+ {2, [3]byte{0xd1, 0x8c, 0x00}}, {2, [3]byte{0xd1, 0x8d, 0x00}},
+ {2, [3]byte{0xd1, 0x8e, 0x00}}, {2, [3]byte{0xd1, 0x8f, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad,
+ 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xbb0000bb, 0xa8000401,
+ 0x80000402, 0x81000403, 0xaa000404, 0xbd000405, 0xb2000406, 0xaf000407, 0xa3000408, 0x8a000409,
+ 0x8c00040a, 0x8e00040b, 0x8d00040c, 0xa100040e, 0x8f00040f, 0xc0000410, 0xc1000411, 0xc2000412,
+ 0xc3000413, 0xc4000414, 0xc5000415, 0xc6000416, 0xc7000417, 0xc8000418, 0xc9000419, 0xca00041a,
+ 0xcb00041b, 0xcc00041c, 0xcd00041d, 0xce00041e, 0xcf00041f, 0xd0000420, 0xd1000421, 0xd2000422,
+ 0xd3000423, 0xd4000424, 0xd5000425, 0xd6000426, 0xd7000427, 0xd8000428, 0xd9000429, 0xda00042a,
+ 0xdb00042b, 0xdc00042c, 0xdd00042d, 0xde00042e, 0xdf00042f, 0xe0000430, 0xe1000431, 0xe2000432,
+ 0xe3000433, 0xe4000434, 0xe5000435, 0xe6000436, 0xe7000437, 0xe8000438, 0xe9000439, 0xea00043a,
+ 0xeb00043b, 0xec00043c, 0xed00043d, 0xee00043e, 0xef00043f, 0xf0000440, 0xf1000441, 0xf2000442,
+ 0xf3000443, 0xf4000444, 0xf5000445, 0xf6000446, 0xf7000447, 0xf8000448, 0xf9000449, 0xfa00044a,
+ 0xfb00044b, 0xfc00044c, 0xfd00044d, 0xfe00044e, 0xff00044f, 0xb8000451, 0x90000452, 0x83000453,
+ 0xba000454, 0xbe000455, 0xb3000456, 0xbf000457, 0xbc000458, 0x9a000459, 0x9c00045a, 0x9e00045b,
+ 0x9d00045c, 0xa200045e, 0x9f00045f, 0xa5000490, 0xb4000491, 0x96002013, 0x97002014, 0x91002018,
+ 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022,
+ 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x880020ac, 0xb9002116, 0x99002122, 0x99002122,
+ },
+}
+
+// Windows1252 is the Windows 1252 encoding.
+var Windows1252 *Charmap = &windows1252
+
+var windows1252 = Charmap{
+ name: "Windows 1252",
+ mib: identifier.Windows1252,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
+ {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
+ {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
+ {2, [3]byte{0xc5, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
+ {2, [3]byte{0xc5, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc5, 0xbd, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
+ {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
+ {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
+ {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
+ {2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
+ {2, [3]byte{0xc5, 0xa1, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}},
+ {2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xc5, 0xb8, 0x00}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc3, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc3, 0x9d, 0x00}},
+ {2, [3]byte{0xc3, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc3, 0xb0, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+ {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc3, 0xbd, 0x00}},
+ {2, [3]byte{0xc3, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7,
+ 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af,
+ 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
+ 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf,
+ 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7,
+ 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
+ 0xd00000d0, 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7,
+ 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdd0000dd, 0xde0000de, 0xdf0000df,
+ 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7,
+ 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef,
+ 0xf00000f0, 0xf10000f1, 0xf20000f2, 0xf30000f3, 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7,
+ 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb, 0xfc0000fc, 0xfd0000fd, 0xfe0000fe, 0xff0000ff,
+ 0x8c000152, 0x9c000153, 0x8a000160, 0x9a000161, 0x9f000178, 0x8e00017d, 0x9e00017e, 0x83000192,
+ 0x880002c6, 0x980002dc, 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c,
+ 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039,
+ 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
+ },
+}
+
+// Windows1253 is the Windows 1253 encoding.
+var Windows1253 *Charmap = &windows1253
+
+var windows1253 = Charmap{
+ name: "Windows 1253",
+ mib: identifier.Windows1253,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
+ {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
+ {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
+ {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
+ {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xce, 0x85, 0x00}},
+ {2, [3]byte{0xce, 0x86, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x95}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xce, 0x84, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xce, 0x88, 0x00}}, {2, [3]byte{0xce, 0x89, 0x00}},
+ {2, [3]byte{0xce, 0x8a, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xce, 0x8c, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xce, 0x8e, 0x00}}, {2, [3]byte{0xce, 0x8f, 0x00}},
+ {2, [3]byte{0xce, 0x90, 0x00}}, {2, [3]byte{0xce, 0x91, 0x00}},
+ {2, [3]byte{0xce, 0x92, 0x00}}, {2, [3]byte{0xce, 0x93, 0x00}},
+ {2, [3]byte{0xce, 0x94, 0x00}}, {2, [3]byte{0xce, 0x95, 0x00}},
+ {2, [3]byte{0xce, 0x96, 0x00}}, {2, [3]byte{0xce, 0x97, 0x00}},
+ {2, [3]byte{0xce, 0x98, 0x00}}, {2, [3]byte{0xce, 0x99, 0x00}},
+ {2, [3]byte{0xce, 0x9a, 0x00}}, {2, [3]byte{0xce, 0x9b, 0x00}},
+ {2, [3]byte{0xce, 0x9c, 0x00}}, {2, [3]byte{0xce, 0x9d, 0x00}},
+ {2, [3]byte{0xce, 0x9e, 0x00}}, {2, [3]byte{0xce, 0x9f, 0x00}},
+ {2, [3]byte{0xce, 0xa0, 0x00}}, {2, [3]byte{0xce, 0xa1, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xce, 0xa3, 0x00}},
+ {2, [3]byte{0xce, 0xa4, 0x00}}, {2, [3]byte{0xce, 0xa5, 0x00}},
+ {2, [3]byte{0xce, 0xa6, 0x00}}, {2, [3]byte{0xce, 0xa7, 0x00}},
+ {2, [3]byte{0xce, 0xa8, 0x00}}, {2, [3]byte{0xce, 0xa9, 0x00}},
+ {2, [3]byte{0xce, 0xaa, 0x00}}, {2, [3]byte{0xce, 0xab, 0x00}},
+ {2, [3]byte{0xce, 0xac, 0x00}}, {2, [3]byte{0xce, 0xad, 0x00}},
+ {2, [3]byte{0xce, 0xae, 0x00}}, {2, [3]byte{0xce, 0xaf, 0x00}},
+ {2, [3]byte{0xce, 0xb0, 0x00}}, {2, [3]byte{0xce, 0xb1, 0x00}},
+ {2, [3]byte{0xce, 0xb2, 0x00}}, {2, [3]byte{0xce, 0xb3, 0x00}},
+ {2, [3]byte{0xce, 0xb4, 0x00}}, {2, [3]byte{0xce, 0xb5, 0x00}},
+ {2, [3]byte{0xce, 0xb6, 0x00}}, {2, [3]byte{0xce, 0xb7, 0x00}},
+ {2, [3]byte{0xce, 0xb8, 0x00}}, {2, [3]byte{0xce, 0xb9, 0x00}},
+ {2, [3]byte{0xce, 0xba, 0x00}}, {2, [3]byte{0xce, 0xbb, 0x00}},
+ {2, [3]byte{0xce, 0xbc, 0x00}}, {2, [3]byte{0xce, 0xbd, 0x00}},
+ {2, [3]byte{0xce, 0xbe, 0x00}}, {2, [3]byte{0xce, 0xbf, 0x00}},
+ {2, [3]byte{0xcf, 0x80, 0x00}}, {2, [3]byte{0xcf, 0x81, 0x00}},
+ {2, [3]byte{0xcf, 0x82, 0x00}}, {2, [3]byte{0xcf, 0x83, 0x00}},
+ {2, [3]byte{0xcf, 0x84, 0x00}}, {2, [3]byte{0xcf, 0x85, 0x00}},
+ {2, [3]byte{0xcf, 0x86, 0x00}}, {2, [3]byte{0xcf, 0x87, 0x00}},
+ {2, [3]byte{0xcf, 0x88, 0x00}}, {2, [3]byte{0xcf, 0x89, 0x00}},
+ {2, [3]byte{0xcf, 0x8a, 0x00}}, {2, [3]byte{0xcf, 0x8b, 0x00}},
+ {2, [3]byte{0xcf, 0x8c, 0x00}}, {2, [3]byte{0xcf, 0x8d, 0x00}},
+ {2, [3]byte{0xcf, 0x8e, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8, 0xa90000a9,
+ 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3,
+ 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xbb0000bb, 0xbd0000bd, 0x83000192, 0xb4000384, 0xa1000385,
+ 0xa2000386, 0xb8000388, 0xb9000389, 0xba00038a, 0xbc00038c, 0xbe00038e, 0xbf00038f, 0xc0000390,
+ 0xc1000391, 0xc2000392, 0xc3000393, 0xc4000394, 0xc5000395, 0xc6000396, 0xc7000397, 0xc8000398,
+ 0xc9000399, 0xca00039a, 0xcb00039b, 0xcc00039c, 0xcd00039d, 0xce00039e, 0xcf00039f, 0xd00003a0,
+ 0xd10003a1, 0xd30003a3, 0xd40003a4, 0xd50003a5, 0xd60003a6, 0xd70003a7, 0xd80003a8, 0xd90003a9,
+ 0xda0003aa, 0xdb0003ab, 0xdc0003ac, 0xdd0003ad, 0xde0003ae, 0xdf0003af, 0xe00003b0, 0xe10003b1,
+ 0xe20003b2, 0xe30003b3, 0xe40003b4, 0xe50003b5, 0xe60003b6, 0xe70003b7, 0xe80003b8, 0xe90003b9,
+ 0xea0003ba, 0xeb0003bb, 0xec0003bc, 0xed0003bd, 0xee0003be, 0xef0003bf, 0xf00003c0, 0xf10003c1,
+ 0xf20003c2, 0xf30003c3, 0xf40003c4, 0xf50003c5, 0xf60003c6, 0xf70003c7, 0xf80003c8, 0xf90003c9,
+ 0xfa0003ca, 0xfb0003cb, 0xfc0003cc, 0xfd0003cd, 0xfe0003ce, 0x96002013, 0x97002014, 0xaf002015,
+ 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021,
+ 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122,
+ 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
+ 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
+ },
+}
+
+// Windows1254 is the Windows 1254 encoding.
+var Windows1254 *Charmap = &windows1254
+
+var windows1254 = Charmap{
+ name: "Windows 1254",
+ mib: identifier.Windows1254,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
+ {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
+ {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
+ {2, [3]byte{0xc5, 0xa0, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
+ {2, [3]byte{0xc5, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
+ {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
+ {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
+ {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
+ {2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
+ {2, [3]byte{0xc5, 0xa1, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}},
+ {2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xb8, 0x00}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc3, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xc3, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc4, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xc3, 0x92, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc4, 0xb0, 0x00}},
+ {2, [3]byte{0xc5, 0x9e, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc3, 0xa3, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xac, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc4, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+ {2, [3]byte{0xc3, 0xb2, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc4, 0xb1, 0x00}},
+ {2, [3]byte{0xc5, 0x9f, 0x00}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7,
+ 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af,
+ 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
+ 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf,
+ 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc30000c3, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7,
+ 0xc80000c8, 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcc0000cc, 0xcd0000cd, 0xce0000ce, 0xcf0000cf,
+ 0xd10000d1, 0xd20000d2, 0xd30000d3, 0xd40000d4, 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xd80000d8,
+ 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc, 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2,
+ 0xe30000e3, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7, 0xe80000e8, 0xe90000e9, 0xea0000ea,
+ 0xeb0000eb, 0xec0000ec, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1, 0xf20000f2, 0xf30000f3,
+ 0xf40000f4, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb,
+ 0xfc0000fc, 0xff0000ff, 0xd000011e, 0xf000011f, 0xdd000130, 0xfd000131, 0x8c000152, 0x9c000153,
+ 0xde00015e, 0xfe00015f, 0x8a000160, 0x9a000161, 0x9f000178, 0x83000192, 0x880002c6, 0x980002dc,
+ 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e,
+ 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x800020ac,
+ 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
+ },
+}
+
+// Windows1255 is the Windows 1255 encoding.
+var Windows1255 *Charmap = &windows1255
+
+var windows1255 = Charmap{
+ name: "Windows 1255",
+ mib: identifier.Windows1255,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
+ {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
+ {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
+ {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
+ {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
+ {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
+ {2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xaa}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xb7, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+ {2, [3]byte{0xd6, 0xb0, 0x00}}, {2, [3]byte{0xd6, 0xb1, 0x00}},
+ {2, [3]byte{0xd6, 0xb2, 0x00}}, {2, [3]byte{0xd6, 0xb3, 0x00}},
+ {2, [3]byte{0xd6, 0xb4, 0x00}}, {2, [3]byte{0xd6, 0xb5, 0x00}},
+ {2, [3]byte{0xd6, 0xb6, 0x00}}, {2, [3]byte{0xd6, 0xb7, 0x00}},
+ {2, [3]byte{0xd6, 0xb8, 0x00}}, {2, [3]byte{0xd6, 0xb9, 0x00}},
+ {2, [3]byte{0xd6, 0xba, 0x00}}, {2, [3]byte{0xd6, 0xbb, 0x00}},
+ {2, [3]byte{0xd6, 0xbc, 0x00}}, {2, [3]byte{0xd6, 0xbd, 0x00}},
+ {2, [3]byte{0xd6, 0xbe, 0x00}}, {2, [3]byte{0xd6, 0xbf, 0x00}},
+ {2, [3]byte{0xd7, 0x80, 0x00}}, {2, [3]byte{0xd7, 0x81, 0x00}},
+ {2, [3]byte{0xd7, 0x82, 0x00}}, {2, [3]byte{0xd7, 0x83, 0x00}},
+ {2, [3]byte{0xd7, 0xb0, 0x00}}, {2, [3]byte{0xd7, 0xb1, 0x00}},
+ {2, [3]byte{0xd7, 0xb2, 0x00}}, {2, [3]byte{0xd7, 0xb3, 0x00}},
+ {2, [3]byte{0xd7, 0xb4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xd7, 0x90, 0x00}}, {2, [3]byte{0xd7, 0x91, 0x00}},
+ {2, [3]byte{0xd7, 0x92, 0x00}}, {2, [3]byte{0xd7, 0x93, 0x00}},
+ {2, [3]byte{0xd7, 0x94, 0x00}}, {2, [3]byte{0xd7, 0x95, 0x00}},
+ {2, [3]byte{0xd7, 0x96, 0x00}}, {2, [3]byte{0xd7, 0x97, 0x00}},
+ {2, [3]byte{0xd7, 0x98, 0x00}}, {2, [3]byte{0xd7, 0x99, 0x00}},
+ {2, [3]byte{0xd7, 0x9a, 0x00}}, {2, [3]byte{0xd7, 0x9b, 0x00}},
+ {2, [3]byte{0xd7, 0x9c, 0x00}}, {2, [3]byte{0xd7, 0x9d, 0x00}},
+ {2, [3]byte{0xd7, 0x9e, 0x00}}, {2, [3]byte{0xd7, 0x9f, 0x00}},
+ {2, [3]byte{0xd7, 0xa0, 0x00}}, {2, [3]byte{0xd7, 0xa1, 0x00}},
+ {2, [3]byte{0xd7, 0xa2, 0x00}}, {2, [3]byte{0xd7, 0xa3, 0x00}},
+ {2, [3]byte{0xd7, 0xa4, 0x00}}, {2, [3]byte{0xd7, 0xa5, 0x00}},
+ {2, [3]byte{0xd7, 0xa6, 0x00}}, {2, [3]byte{0xd7, 0xa7, 0x00}},
+ {2, [3]byte{0xd7, 0xa8, 0x00}}, {2, [3]byte{0xd7, 0xa9, 0x00}},
+ {2, [3]byte{0xd7, 0xaa, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x8e}},
+ {3, [3]byte{0xe2, 0x80, 0x8f}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8,
+ 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1,
+ 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9,
+ 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf, 0xaa0000d7, 0xba0000f7, 0x83000192,
+ 0x880002c6, 0x980002dc, 0xc00005b0, 0xc10005b1, 0xc20005b2, 0xc30005b3, 0xc40005b4, 0xc50005b5,
+ 0xc60005b6, 0xc70005b7, 0xc80005b8, 0xc90005b9, 0xca0005ba, 0xcb0005bb, 0xcc0005bc, 0xcd0005bd,
+ 0xce0005be, 0xcf0005bf, 0xd00005c0, 0xd10005c1, 0xd20005c2, 0xd30005c3, 0xe00005d0, 0xe10005d1,
+ 0xe20005d2, 0xe30005d3, 0xe40005d4, 0xe50005d5, 0xe60005d6, 0xe70005d7, 0xe80005d8, 0xe90005d9,
+ 0xea0005da, 0xeb0005db, 0xec0005dc, 0xed0005dd, 0xee0005de, 0xef0005df, 0xf00005e0, 0xf10005e1,
+ 0xf20005e2, 0xf30005e3, 0xf40005e4, 0xf50005e5, 0xf60005e6, 0xf70005e7, 0xf80005e8, 0xf90005e9,
+ 0xfa0005ea, 0xd40005f0, 0xd50005f1, 0xd60005f2, 0xd70005f3, 0xd80005f4, 0xfd00200e, 0xfe00200f,
+ 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e,
+ 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0xa40020aa,
+ 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
+ 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
+ 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
+ },
+}
+
+// Windows1256 is the Windows 1256 encoding.
+var Windows1256 *Charmap = &windows1256
+
+var windows1256 = Charmap{
+ name: "Windows 1256",
+ mib: identifier.Windows1256,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {2, [3]byte{0xd9, 0xbe, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
+ {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
+ {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
+ {2, [3]byte{0xd9, 0xb9, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
+ {2, [3]byte{0xc5, 0x92, 0x00}}, {2, [3]byte{0xda, 0x86, 0x00}},
+ {2, [3]byte{0xda, 0x98, 0x00}}, {2, [3]byte{0xda, 0x88, 0x00}},
+ {2, [3]byte{0xda, 0xaf, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x98}},
+ {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
+ {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
+ {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
+ {2, [3]byte{0xda, 0xa9, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
+ {2, [3]byte{0xda, 0x91, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xba}},
+ {2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x8c}},
+ {3, [3]byte{0xe2, 0x80, 0x8d}}, {2, [3]byte{0xda, 0xba, 0x00}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xd8, 0x8c, 0x00}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xda, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xd8, 0x9b, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xd8, 0x9f, 0x00}},
+ {2, [3]byte{0xdb, 0x81, 0x00}}, {2, [3]byte{0xd8, 0xa1, 0x00}},
+ {2, [3]byte{0xd8, 0xa2, 0x00}}, {2, [3]byte{0xd8, 0xa3, 0x00}},
+ {2, [3]byte{0xd8, 0xa4, 0x00}}, {2, [3]byte{0xd8, 0xa5, 0x00}},
+ {2, [3]byte{0xd8, 0xa6, 0x00}}, {2, [3]byte{0xd8, 0xa7, 0x00}},
+ {2, [3]byte{0xd8, 0xa8, 0x00}}, {2, [3]byte{0xd8, 0xa9, 0x00}},
+ {2, [3]byte{0xd8, 0xaa, 0x00}}, {2, [3]byte{0xd8, 0xab, 0x00}},
+ {2, [3]byte{0xd8, 0xac, 0x00}}, {2, [3]byte{0xd8, 0xad, 0x00}},
+ {2, [3]byte{0xd8, 0xae, 0x00}}, {2, [3]byte{0xd8, 0xaf, 0x00}},
+ {2, [3]byte{0xd8, 0xb0, 0x00}}, {2, [3]byte{0xd8, 0xb1, 0x00}},
+ {2, [3]byte{0xd8, 0xb2, 0x00}}, {2, [3]byte{0xd8, 0xb3, 0x00}},
+ {2, [3]byte{0xd8, 0xb4, 0x00}}, {2, [3]byte{0xd8, 0xb5, 0x00}},
+ {2, [3]byte{0xd8, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xd8, 0xb7, 0x00}}, {2, [3]byte{0xd8, 0xb8, 0x00}},
+ {2, [3]byte{0xd8, 0xb9, 0x00}}, {2, [3]byte{0xd8, 0xba, 0x00}},
+ {2, [3]byte{0xd9, 0x80, 0x00}}, {2, [3]byte{0xd9, 0x81, 0x00}},
+ {2, [3]byte{0xd9, 0x82, 0x00}}, {2, [3]byte{0xd9, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xd9, 0x84, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xd9, 0x85, 0x00}},
+ {2, [3]byte{0xd9, 0x86, 0x00}}, {2, [3]byte{0xd9, 0x87, 0x00}},
+ {2, [3]byte{0xd9, 0x88, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xd9, 0x89, 0x00}}, {2, [3]byte{0xd9, 0x8a, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xd9, 0x8b, 0x00}}, {2, [3]byte{0xd9, 0x8c, 0x00}},
+ {2, [3]byte{0xd9, 0x8d, 0x00}}, {2, [3]byte{0xd9, 0x8e, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xd9, 0x8f, 0x00}},
+ {2, [3]byte{0xd9, 0x90, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xd9, 0x91, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xd9, 0x92, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {3, [3]byte{0xe2, 0x80, 0x8e}},
+ {3, [3]byte{0xe2, 0x80, 0x8f}}, {2, [3]byte{0xdb, 0x92, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7, 0xa80000a8,
+ 0xa90000a9, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af, 0xb00000b0, 0xb10000b1,
+ 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0xb80000b8, 0xb90000b9,
+ 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xd70000d7, 0xe00000e0, 0xe20000e2, 0xe70000e7,
+ 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xee0000ee, 0xef0000ef, 0xf40000f4, 0xf70000f7,
+ 0xf90000f9, 0xfb0000fb, 0xfc0000fc, 0x8c000152, 0x9c000153, 0x83000192, 0x880002c6, 0xa100060c,
+ 0xba00061b, 0xbf00061f, 0xc1000621, 0xc2000622, 0xc3000623, 0xc4000624, 0xc5000625, 0xc6000626,
+ 0xc7000627, 0xc8000628, 0xc9000629, 0xca00062a, 0xcb00062b, 0xcc00062c, 0xcd00062d, 0xce00062e,
+ 0xcf00062f, 0xd0000630, 0xd1000631, 0xd2000632, 0xd3000633, 0xd4000634, 0xd5000635, 0xd6000636,
+ 0xd8000637, 0xd9000638, 0xda000639, 0xdb00063a, 0xdc000640, 0xdd000641, 0xde000642, 0xdf000643,
+ 0xe1000644, 0xe3000645, 0xe4000646, 0xe5000647, 0xe6000648, 0xec000649, 0xed00064a, 0xf000064b,
+ 0xf100064c, 0xf200064d, 0xf300064e, 0xf500064f, 0xf6000650, 0xf8000651, 0xfa000652, 0x8a000679,
+ 0x8100067e, 0x8d000686, 0x8f000688, 0x9a000691, 0x8e000698, 0x980006a9, 0x900006af, 0x9f0006ba,
+ 0xaa0006be, 0xc00006c1, 0xff0006d2, 0x9d00200c, 0x9e00200d, 0xfd00200e, 0xfe00200f, 0x96002013,
+ 0x97002014, 0x91002018, 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020,
+ 0x87002021, 0x95002022, 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0x800020ac, 0x99002122,
+ },
+}
+
+// Windows1257 is the Windows 1257 encoding.
+var Windows1257 *Charmap = &windows1257
+
+var windows1257 = Charmap{
+ name: "Windows 1257",
+ mib: identifier.Windows1257,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xe2, 0x80, 0x9a}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
+ {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc2, 0xa8, 0x00}},
+ {2, [3]byte{0xcb, 0x87, 0x00}}, {2, [3]byte{0xc2, 0xb8, 0x00}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
+ {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
+ {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
+ {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+ {2, [3]byte{0xcb, 0x9b, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xc5, 0x96, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc3, 0x86, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xc5, 0x97, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc3, 0xa6, 0x00}},
+ {2, [3]byte{0xc4, 0x84, 0x00}}, {2, [3]byte{0xc4, 0xae, 0x00}},
+ {2, [3]byte{0xc4, 0x80, 0x00}}, {2, [3]byte{0xc4, 0x86, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc4, 0x98, 0x00}}, {2, [3]byte{0xc4, 0x92, 0x00}},
+ {2, [3]byte{0xc4, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc5, 0xb9, 0x00}}, {2, [3]byte{0xc4, 0x96, 0x00}},
+ {2, [3]byte{0xc4, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0xb6, 0x00}},
+ {2, [3]byte{0xc4, 0xaa, 0x00}}, {2, [3]byte{0xc4, 0xbb, 0x00}},
+ {2, [3]byte{0xc5, 0xa0, 0x00}}, {2, [3]byte{0xc5, 0x83, 0x00}},
+ {2, [3]byte{0xc5, 0x85, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc5, 0x8c, 0x00}}, {2, [3]byte{0xc3, 0x95, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xc5, 0xb2, 0x00}}, {2, [3]byte{0xc5, 0x81, 0x00}},
+ {2, [3]byte{0xc5, 0x9a, 0x00}}, {2, [3]byte{0xc5, 0xaa, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc5, 0xbb, 0x00}},
+ {2, [3]byte{0xc5, 0xbd, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc4, 0x85, 0x00}}, {2, [3]byte{0xc4, 0xaf, 0x00}},
+ {2, [3]byte{0xc4, 0x81, 0x00}}, {2, [3]byte{0xc4, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc4, 0x99, 0x00}}, {2, [3]byte{0xc4, 0x93, 0x00}},
+ {2, [3]byte{0xc4, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc5, 0xba, 0x00}}, {2, [3]byte{0xc4, 0x97, 0x00}},
+ {2, [3]byte{0xc4, 0xa3, 0x00}}, {2, [3]byte{0xc4, 0xb7, 0x00}},
+ {2, [3]byte{0xc4, 0xab, 0x00}}, {2, [3]byte{0xc4, 0xbc, 0x00}},
+ {2, [3]byte{0xc5, 0xa1, 0x00}}, {2, [3]byte{0xc5, 0x84, 0x00}},
+ {2, [3]byte{0xc5, 0x86, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc5, 0x8d, 0x00}}, {2, [3]byte{0xc3, 0xb5, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xc5, 0xb3, 0x00}}, {2, [3]byte{0xc5, 0x82, 0x00}},
+ {2, [3]byte{0xc5, 0x9b, 0x00}}, {2, [3]byte{0xc5, 0xab, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc5, 0xbc, 0x00}},
+ {2, [3]byte{0xc5, 0xbe, 0x00}}, {2, [3]byte{0xcb, 0x99, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa60000a6, 0xa70000a7, 0x8d0000a8, 0xa90000a9,
+ 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0x9d0000af, 0xb00000b0, 0xb10000b1, 0xb20000b2,
+ 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7, 0x8f0000b8, 0xb90000b9, 0xbb0000bb,
+ 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xc40000c4, 0xc50000c5, 0xaf0000c6, 0xc90000c9, 0xd30000d3,
+ 0xd50000d5, 0xd60000d6, 0xd70000d7, 0xa80000d8, 0xdc0000dc, 0xdf0000df, 0xe40000e4, 0xe50000e5,
+ 0xbf0000e6, 0xe90000e9, 0xf30000f3, 0xf50000f5, 0xf60000f6, 0xf70000f7, 0xb80000f8, 0xfc0000fc,
+ 0xc2000100, 0xe2000101, 0xc0000104, 0xe0000105, 0xc3000106, 0xe3000107, 0xc800010c, 0xe800010d,
+ 0xc7000112, 0xe7000113, 0xcb000116, 0xeb000117, 0xc6000118, 0xe6000119, 0xcc000122, 0xec000123,
+ 0xce00012a, 0xee00012b, 0xc100012e, 0xe100012f, 0xcd000136, 0xed000137, 0xcf00013b, 0xef00013c,
+ 0xd9000141, 0xf9000142, 0xd1000143, 0xf1000144, 0xd2000145, 0xf2000146, 0xd400014c, 0xf400014d,
+ 0xaa000156, 0xba000157, 0xda00015a, 0xfa00015b, 0xd0000160, 0xf0000161, 0xdb00016a, 0xfb00016b,
+ 0xd8000172, 0xf8000173, 0xca000179, 0xea00017a, 0xdd00017b, 0xfd00017c, 0xde00017d, 0xfe00017e,
+ 0x8e0002c7, 0xff0002d9, 0x9e0002db, 0x96002013, 0x97002014, 0x91002018, 0x92002019, 0x8200201a,
+ 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022, 0x85002026, 0x89002030,
+ 0x8b002039, 0x9b00203a, 0x800020ac, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
+ 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
+ },
+}
+
+// Windows1258 is the Windows 1258 encoding.
+var Windows1258 *Charmap = &windows1258
+
+var windows1258 = Charmap{
+ name: "Windows 1258",
+ mib: identifier.Windows1258,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xac}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xe2, 0x80, 0x9a}}, {2, [3]byte{0xc6, 0x92, 0x00}},
+ {3, [3]byte{0xe2, 0x80, 0x9e}}, {3, [3]byte{0xe2, 0x80, 0xa6}},
+ {3, [3]byte{0xe2, 0x80, 0xa0}}, {3, [3]byte{0xe2, 0x80, 0xa1}},
+ {2, [3]byte{0xcb, 0x86, 0x00}}, {3, [3]byte{0xe2, 0x80, 0xb0}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xb9}},
+ {2, [3]byte{0xc5, 0x92, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0x98}},
+ {3, [3]byte{0xe2, 0x80, 0x99}}, {3, [3]byte{0xe2, 0x80, 0x9c}},
+ {3, [3]byte{0xe2, 0x80, 0x9d}}, {3, [3]byte{0xe2, 0x80, 0xa2}},
+ {3, [3]byte{0xe2, 0x80, 0x93}}, {3, [3]byte{0xe2, 0x80, 0x94}},
+ {2, [3]byte{0xcb, 0x9c, 0x00}}, {3, [3]byte{0xe2, 0x84, 0xa2}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {3, [3]byte{0xe2, 0x80, 0xba}},
+ {2, [3]byte{0xc5, 0x93, 0x00}}, {3, [3]byte{0xef, 0xbf, 0xbd}},
+ {3, [3]byte{0xef, 0xbf, 0xbd}}, {2, [3]byte{0xc5, 0xb8, 0x00}},
+ {2, [3]byte{0xc2, 0xa0, 0x00}}, {2, [3]byte{0xc2, 0xa1, 0x00}},
+ {2, [3]byte{0xc2, 0xa2, 0x00}}, {2, [3]byte{0xc2, 0xa3, 0x00}},
+ {2, [3]byte{0xc2, 0xa4, 0x00}}, {2, [3]byte{0xc2, 0xa5, 0x00}},
+ {2, [3]byte{0xc2, 0xa6, 0x00}}, {2, [3]byte{0xc2, 0xa7, 0x00}},
+ {2, [3]byte{0xc2, 0xa8, 0x00}}, {2, [3]byte{0xc2, 0xa9, 0x00}},
+ {2, [3]byte{0xc2, 0xaa, 0x00}}, {2, [3]byte{0xc2, 0xab, 0x00}},
+ {2, [3]byte{0xc2, 0xac, 0x00}}, {2, [3]byte{0xc2, 0xad, 0x00}},
+ {2, [3]byte{0xc2, 0xae, 0x00}}, {2, [3]byte{0xc2, 0xaf, 0x00}},
+ {2, [3]byte{0xc2, 0xb0, 0x00}}, {2, [3]byte{0xc2, 0xb1, 0x00}},
+ {2, [3]byte{0xc2, 0xb2, 0x00}}, {2, [3]byte{0xc2, 0xb3, 0x00}},
+ {2, [3]byte{0xc2, 0xb4, 0x00}}, {2, [3]byte{0xc2, 0xb5, 0x00}},
+ {2, [3]byte{0xc2, 0xb6, 0x00}}, {2, [3]byte{0xc2, 0xb7, 0x00}},
+ {2, [3]byte{0xc2, 0xb8, 0x00}}, {2, [3]byte{0xc2, 0xb9, 0x00}},
+ {2, [3]byte{0xc2, 0xba, 0x00}}, {2, [3]byte{0xc2, 0xbb, 0x00}},
+ {2, [3]byte{0xc2, 0xbc, 0x00}}, {2, [3]byte{0xc2, 0xbd, 0x00}},
+ {2, [3]byte{0xc2, 0xbe, 0x00}}, {2, [3]byte{0xc2, 0xbf, 0x00}},
+ {2, [3]byte{0xc3, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x81, 0x00}},
+ {2, [3]byte{0xc3, 0x82, 0x00}}, {2, [3]byte{0xc4, 0x82, 0x00}},
+ {2, [3]byte{0xc3, 0x84, 0x00}}, {2, [3]byte{0xc3, 0x85, 0x00}},
+ {2, [3]byte{0xc3, 0x86, 0x00}}, {2, [3]byte{0xc3, 0x87, 0x00}},
+ {2, [3]byte{0xc3, 0x88, 0x00}}, {2, [3]byte{0xc3, 0x89, 0x00}},
+ {2, [3]byte{0xc3, 0x8a, 0x00}}, {2, [3]byte{0xc3, 0x8b, 0x00}},
+ {2, [3]byte{0xcc, 0x80, 0x00}}, {2, [3]byte{0xc3, 0x8d, 0x00}},
+ {2, [3]byte{0xc3, 0x8e, 0x00}}, {2, [3]byte{0xc3, 0x8f, 0x00}},
+ {2, [3]byte{0xc4, 0x90, 0x00}}, {2, [3]byte{0xc3, 0x91, 0x00}},
+ {2, [3]byte{0xcc, 0x89, 0x00}}, {2, [3]byte{0xc3, 0x93, 0x00}},
+ {2, [3]byte{0xc3, 0x94, 0x00}}, {2, [3]byte{0xc6, 0xa0, 0x00}},
+ {2, [3]byte{0xc3, 0x96, 0x00}}, {2, [3]byte{0xc3, 0x97, 0x00}},
+ {2, [3]byte{0xc3, 0x98, 0x00}}, {2, [3]byte{0xc3, 0x99, 0x00}},
+ {2, [3]byte{0xc3, 0x9a, 0x00}}, {2, [3]byte{0xc3, 0x9b, 0x00}},
+ {2, [3]byte{0xc3, 0x9c, 0x00}}, {2, [3]byte{0xc6, 0xaf, 0x00}},
+ {2, [3]byte{0xcc, 0x83, 0x00}}, {2, [3]byte{0xc3, 0x9f, 0x00}},
+ {2, [3]byte{0xc3, 0xa0, 0x00}}, {2, [3]byte{0xc3, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xa2, 0x00}}, {2, [3]byte{0xc4, 0x83, 0x00}},
+ {2, [3]byte{0xc3, 0xa4, 0x00}}, {2, [3]byte{0xc3, 0xa5, 0x00}},
+ {2, [3]byte{0xc3, 0xa6, 0x00}}, {2, [3]byte{0xc3, 0xa7, 0x00}},
+ {2, [3]byte{0xc3, 0xa8, 0x00}}, {2, [3]byte{0xc3, 0xa9, 0x00}},
+ {2, [3]byte{0xc3, 0xaa, 0x00}}, {2, [3]byte{0xc3, 0xab, 0x00}},
+ {2, [3]byte{0xcc, 0x81, 0x00}}, {2, [3]byte{0xc3, 0xad, 0x00}},
+ {2, [3]byte{0xc3, 0xae, 0x00}}, {2, [3]byte{0xc3, 0xaf, 0x00}},
+ {2, [3]byte{0xc4, 0x91, 0x00}}, {2, [3]byte{0xc3, 0xb1, 0x00}},
+ {2, [3]byte{0xcc, 0xa3, 0x00}}, {2, [3]byte{0xc3, 0xb3, 0x00}},
+ {2, [3]byte{0xc3, 0xb4, 0x00}}, {2, [3]byte{0xc6, 0xa1, 0x00}},
+ {2, [3]byte{0xc3, 0xb6, 0x00}}, {2, [3]byte{0xc3, 0xb7, 0x00}},
+ {2, [3]byte{0xc3, 0xb8, 0x00}}, {2, [3]byte{0xc3, 0xb9, 0x00}},
+ {2, [3]byte{0xc3, 0xba, 0x00}}, {2, [3]byte{0xc3, 0xbb, 0x00}},
+ {2, [3]byte{0xc3, 0xbc, 0x00}}, {2, [3]byte{0xc6, 0xb0, 0x00}},
+ {3, [3]byte{0xe2, 0x82, 0xab}}, {2, [3]byte{0xc3, 0xbf, 0x00}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0xa00000a0, 0xa10000a1, 0xa20000a2, 0xa30000a3, 0xa40000a4, 0xa50000a5, 0xa60000a6, 0xa70000a7,
+ 0xa80000a8, 0xa90000a9, 0xaa0000aa, 0xab0000ab, 0xac0000ac, 0xad0000ad, 0xae0000ae, 0xaf0000af,
+ 0xb00000b0, 0xb10000b1, 0xb20000b2, 0xb30000b3, 0xb40000b4, 0xb50000b5, 0xb60000b6, 0xb70000b7,
+ 0xb80000b8, 0xb90000b9, 0xba0000ba, 0xbb0000bb, 0xbc0000bc, 0xbd0000bd, 0xbe0000be, 0xbf0000bf,
+ 0xc00000c0, 0xc10000c1, 0xc20000c2, 0xc40000c4, 0xc50000c5, 0xc60000c6, 0xc70000c7, 0xc80000c8,
+ 0xc90000c9, 0xca0000ca, 0xcb0000cb, 0xcd0000cd, 0xce0000ce, 0xcf0000cf, 0xd10000d1, 0xd30000d3,
+ 0xd40000d4, 0xd60000d6, 0xd70000d7, 0xd80000d8, 0xd90000d9, 0xda0000da, 0xdb0000db, 0xdc0000dc,
+ 0xdf0000df, 0xe00000e0, 0xe10000e1, 0xe20000e2, 0xe40000e4, 0xe50000e5, 0xe60000e6, 0xe70000e7,
+ 0xe80000e8, 0xe90000e9, 0xea0000ea, 0xeb0000eb, 0xed0000ed, 0xee0000ee, 0xef0000ef, 0xf10000f1,
+ 0xf30000f3, 0xf40000f4, 0xf60000f6, 0xf70000f7, 0xf80000f8, 0xf90000f9, 0xfa0000fa, 0xfb0000fb,
+ 0xfc0000fc, 0xff0000ff, 0xc3000102, 0xe3000103, 0xd0000110, 0xf0000111, 0x8c000152, 0x9c000153,
+ 0x9f000178, 0x83000192, 0xd50001a0, 0xf50001a1, 0xdd0001af, 0xfd0001b0, 0x880002c6, 0x980002dc,
+ 0xcc000300, 0xec000301, 0xde000303, 0xd2000309, 0xf2000323, 0x96002013, 0x97002014, 0x91002018,
+ 0x92002019, 0x8200201a, 0x9300201c, 0x9400201d, 0x8400201e, 0x86002020, 0x87002021, 0x95002022,
+ 0x85002026, 0x89002030, 0x8b002039, 0x9b00203a, 0xfe0020ab, 0x800020ac, 0x99002122, 0x99002122,
+ 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122, 0x99002122,
+ },
+}
+
+// XUserDefined is the X-User-Defined encoding.
+//
+// It is defined at http://encoding.spec.whatwg.org/#x-user-defined
+var XUserDefined *Charmap = &xUserDefined
+
+var xUserDefined = Charmap{
+ name: "X-User-Defined",
+ mib: identifier.XUserDefined,
+ asciiSuperset: true,
+ low: 0x80,
+ replacement: 0x1a,
+ decode: [256]utf8Enc{
+ {1, [3]byte{0x00, 0x00, 0x00}}, {1, [3]byte{0x01, 0x00, 0x00}},
+ {1, [3]byte{0x02, 0x00, 0x00}}, {1, [3]byte{0x03, 0x00, 0x00}},
+ {1, [3]byte{0x04, 0x00, 0x00}}, {1, [3]byte{0x05, 0x00, 0x00}},
+ {1, [3]byte{0x06, 0x00, 0x00}}, {1, [3]byte{0x07, 0x00, 0x00}},
+ {1, [3]byte{0x08, 0x00, 0x00}}, {1, [3]byte{0x09, 0x00, 0x00}},
+ {1, [3]byte{0x0a, 0x00, 0x00}}, {1, [3]byte{0x0b, 0x00, 0x00}},
+ {1, [3]byte{0x0c, 0x00, 0x00}}, {1, [3]byte{0x0d, 0x00, 0x00}},
+ {1, [3]byte{0x0e, 0x00, 0x00}}, {1, [3]byte{0x0f, 0x00, 0x00}},
+ {1, [3]byte{0x10, 0x00, 0x00}}, {1, [3]byte{0x11, 0x00, 0x00}},
+ {1, [3]byte{0x12, 0x00, 0x00}}, {1, [3]byte{0x13, 0x00, 0x00}},
+ {1, [3]byte{0x14, 0x00, 0x00}}, {1, [3]byte{0x15, 0x00, 0x00}},
+ {1, [3]byte{0x16, 0x00, 0x00}}, {1, [3]byte{0x17, 0x00, 0x00}},
+ {1, [3]byte{0x18, 0x00, 0x00}}, {1, [3]byte{0x19, 0x00, 0x00}},
+ {1, [3]byte{0x1a, 0x00, 0x00}}, {1, [3]byte{0x1b, 0x00, 0x00}},
+ {1, [3]byte{0x1c, 0x00, 0x00}}, {1, [3]byte{0x1d, 0x00, 0x00}},
+ {1, [3]byte{0x1e, 0x00, 0x00}}, {1, [3]byte{0x1f, 0x00, 0x00}},
+ {1, [3]byte{0x20, 0x00, 0x00}}, {1, [3]byte{0x21, 0x00, 0x00}},
+ {1, [3]byte{0x22, 0x00, 0x00}}, {1, [3]byte{0x23, 0x00, 0x00}},
+ {1, [3]byte{0x24, 0x00, 0x00}}, {1, [3]byte{0x25, 0x00, 0x00}},
+ {1, [3]byte{0x26, 0x00, 0x00}}, {1, [3]byte{0x27, 0x00, 0x00}},
+ {1, [3]byte{0x28, 0x00, 0x00}}, {1, [3]byte{0x29, 0x00, 0x00}},
+ {1, [3]byte{0x2a, 0x00, 0x00}}, {1, [3]byte{0x2b, 0x00, 0x00}},
+ {1, [3]byte{0x2c, 0x00, 0x00}}, {1, [3]byte{0x2d, 0x00, 0x00}},
+ {1, [3]byte{0x2e, 0x00, 0x00}}, {1, [3]byte{0x2f, 0x00, 0x00}},
+ {1, [3]byte{0x30, 0x00, 0x00}}, {1, [3]byte{0x31, 0x00, 0x00}},
+ {1, [3]byte{0x32, 0x00, 0x00}}, {1, [3]byte{0x33, 0x00, 0x00}},
+ {1, [3]byte{0x34, 0x00, 0x00}}, {1, [3]byte{0x35, 0x00, 0x00}},
+ {1, [3]byte{0x36, 0x00, 0x00}}, {1, [3]byte{0x37, 0x00, 0x00}},
+ {1, [3]byte{0x38, 0x00, 0x00}}, {1, [3]byte{0x39, 0x00, 0x00}},
+ {1, [3]byte{0x3a, 0x00, 0x00}}, {1, [3]byte{0x3b, 0x00, 0x00}},
+ {1, [3]byte{0x3c, 0x00, 0x00}}, {1, [3]byte{0x3d, 0x00, 0x00}},
+ {1, [3]byte{0x3e, 0x00, 0x00}}, {1, [3]byte{0x3f, 0x00, 0x00}},
+ {1, [3]byte{0x40, 0x00, 0x00}}, {1, [3]byte{0x41, 0x00, 0x00}},
+ {1, [3]byte{0x42, 0x00, 0x00}}, {1, [3]byte{0x43, 0x00, 0x00}},
+ {1, [3]byte{0x44, 0x00, 0x00}}, {1, [3]byte{0x45, 0x00, 0x00}},
+ {1, [3]byte{0x46, 0x00, 0x00}}, {1, [3]byte{0x47, 0x00, 0x00}},
+ {1, [3]byte{0x48, 0x00, 0x00}}, {1, [3]byte{0x49, 0x00, 0x00}},
+ {1, [3]byte{0x4a, 0x00, 0x00}}, {1, [3]byte{0x4b, 0x00, 0x00}},
+ {1, [3]byte{0x4c, 0x00, 0x00}}, {1, [3]byte{0x4d, 0x00, 0x00}},
+ {1, [3]byte{0x4e, 0x00, 0x00}}, {1, [3]byte{0x4f, 0x00, 0x00}},
+ {1, [3]byte{0x50, 0x00, 0x00}}, {1, [3]byte{0x51, 0x00, 0x00}},
+ {1, [3]byte{0x52, 0x00, 0x00}}, {1, [3]byte{0x53, 0x00, 0x00}},
+ {1, [3]byte{0x54, 0x00, 0x00}}, {1, [3]byte{0x55, 0x00, 0x00}},
+ {1, [3]byte{0x56, 0x00, 0x00}}, {1, [3]byte{0x57, 0x00, 0x00}},
+ {1, [3]byte{0x58, 0x00, 0x00}}, {1, [3]byte{0x59, 0x00, 0x00}},
+ {1, [3]byte{0x5a, 0x00, 0x00}}, {1, [3]byte{0x5b, 0x00, 0x00}},
+ {1, [3]byte{0x5c, 0x00, 0x00}}, {1, [3]byte{0x5d, 0x00, 0x00}},
+ {1, [3]byte{0x5e, 0x00, 0x00}}, {1, [3]byte{0x5f, 0x00, 0x00}},
+ {1, [3]byte{0x60, 0x00, 0x00}}, {1, [3]byte{0x61, 0x00, 0x00}},
+ {1, [3]byte{0x62, 0x00, 0x00}}, {1, [3]byte{0x63, 0x00, 0x00}},
+ {1, [3]byte{0x64, 0x00, 0x00}}, {1, [3]byte{0x65, 0x00, 0x00}},
+ {1, [3]byte{0x66, 0x00, 0x00}}, {1, [3]byte{0x67, 0x00, 0x00}},
+ {1, [3]byte{0x68, 0x00, 0x00}}, {1, [3]byte{0x69, 0x00, 0x00}},
+ {1, [3]byte{0x6a, 0x00, 0x00}}, {1, [3]byte{0x6b, 0x00, 0x00}},
+ {1, [3]byte{0x6c, 0x00, 0x00}}, {1, [3]byte{0x6d, 0x00, 0x00}},
+ {1, [3]byte{0x6e, 0x00, 0x00}}, {1, [3]byte{0x6f, 0x00, 0x00}},
+ {1, [3]byte{0x70, 0x00, 0x00}}, {1, [3]byte{0x71, 0x00, 0x00}},
+ {1, [3]byte{0x72, 0x00, 0x00}}, {1, [3]byte{0x73, 0x00, 0x00}},
+ {1, [3]byte{0x74, 0x00, 0x00}}, {1, [3]byte{0x75, 0x00, 0x00}},
+ {1, [3]byte{0x76, 0x00, 0x00}}, {1, [3]byte{0x77, 0x00, 0x00}},
+ {1, [3]byte{0x78, 0x00, 0x00}}, {1, [3]byte{0x79, 0x00, 0x00}},
+ {1, [3]byte{0x7a, 0x00, 0x00}}, {1, [3]byte{0x7b, 0x00, 0x00}},
+ {1, [3]byte{0x7c, 0x00, 0x00}}, {1, [3]byte{0x7d, 0x00, 0x00}},
+ {1, [3]byte{0x7e, 0x00, 0x00}}, {1, [3]byte{0x7f, 0x00, 0x00}},
+ {3, [3]byte{0xef, 0x9e, 0x80}}, {3, [3]byte{0xef, 0x9e, 0x81}},
+ {3, [3]byte{0xef, 0x9e, 0x82}}, {3, [3]byte{0xef, 0x9e, 0x83}},
+ {3, [3]byte{0xef, 0x9e, 0x84}}, {3, [3]byte{0xef, 0x9e, 0x85}},
+ {3, [3]byte{0xef, 0x9e, 0x86}}, {3, [3]byte{0xef, 0x9e, 0x87}},
+ {3, [3]byte{0xef, 0x9e, 0x88}}, {3, [3]byte{0xef, 0x9e, 0x89}},
+ {3, [3]byte{0xef, 0x9e, 0x8a}}, {3, [3]byte{0xef, 0x9e, 0x8b}},
+ {3, [3]byte{0xef, 0x9e, 0x8c}}, {3, [3]byte{0xef, 0x9e, 0x8d}},
+ {3, [3]byte{0xef, 0x9e, 0x8e}}, {3, [3]byte{0xef, 0x9e, 0x8f}},
+ {3, [3]byte{0xef, 0x9e, 0x90}}, {3, [3]byte{0xef, 0x9e, 0x91}},
+ {3, [3]byte{0xef, 0x9e, 0x92}}, {3, [3]byte{0xef, 0x9e, 0x93}},
+ {3, [3]byte{0xef, 0x9e, 0x94}}, {3, [3]byte{0xef, 0x9e, 0x95}},
+ {3, [3]byte{0xef, 0x9e, 0x96}}, {3, [3]byte{0xef, 0x9e, 0x97}},
+ {3, [3]byte{0xef, 0x9e, 0x98}}, {3, [3]byte{0xef, 0x9e, 0x99}},
+ {3, [3]byte{0xef, 0x9e, 0x9a}}, {3, [3]byte{0xef, 0x9e, 0x9b}},
+ {3, [3]byte{0xef, 0x9e, 0x9c}}, {3, [3]byte{0xef, 0x9e, 0x9d}},
+ {3, [3]byte{0xef, 0x9e, 0x9e}}, {3, [3]byte{0xef, 0x9e, 0x9f}},
+ {3, [3]byte{0xef, 0x9e, 0xa0}}, {3, [3]byte{0xef, 0x9e, 0xa1}},
+ {3, [3]byte{0xef, 0x9e, 0xa2}}, {3, [3]byte{0xef, 0x9e, 0xa3}},
+ {3, [3]byte{0xef, 0x9e, 0xa4}}, {3, [3]byte{0xef, 0x9e, 0xa5}},
+ {3, [3]byte{0xef, 0x9e, 0xa6}}, {3, [3]byte{0xef, 0x9e, 0xa7}},
+ {3, [3]byte{0xef, 0x9e, 0xa8}}, {3, [3]byte{0xef, 0x9e, 0xa9}},
+ {3, [3]byte{0xef, 0x9e, 0xaa}}, {3, [3]byte{0xef, 0x9e, 0xab}},
+ {3, [3]byte{0xef, 0x9e, 0xac}}, {3, [3]byte{0xef, 0x9e, 0xad}},
+ {3, [3]byte{0xef, 0x9e, 0xae}}, {3, [3]byte{0xef, 0x9e, 0xaf}},
+ {3, [3]byte{0xef, 0x9e, 0xb0}}, {3, [3]byte{0xef, 0x9e, 0xb1}},
+ {3, [3]byte{0xef, 0x9e, 0xb2}}, {3, [3]byte{0xef, 0x9e, 0xb3}},
+ {3, [3]byte{0xef, 0x9e, 0xb4}}, {3, [3]byte{0xef, 0x9e, 0xb5}},
+ {3, [3]byte{0xef, 0x9e, 0xb6}}, {3, [3]byte{0xef, 0x9e, 0xb7}},
+ {3, [3]byte{0xef, 0x9e, 0xb8}}, {3, [3]byte{0xef, 0x9e, 0xb9}},
+ {3, [3]byte{0xef, 0x9e, 0xba}}, {3, [3]byte{0xef, 0x9e, 0xbb}},
+ {3, [3]byte{0xef, 0x9e, 0xbc}}, {3, [3]byte{0xef, 0x9e, 0xbd}},
+ {3, [3]byte{0xef, 0x9e, 0xbe}}, {3, [3]byte{0xef, 0x9e, 0xbf}},
+ {3, [3]byte{0xef, 0x9f, 0x80}}, {3, [3]byte{0xef, 0x9f, 0x81}},
+ {3, [3]byte{0xef, 0x9f, 0x82}}, {3, [3]byte{0xef, 0x9f, 0x83}},
+ {3, [3]byte{0xef, 0x9f, 0x84}}, {3, [3]byte{0xef, 0x9f, 0x85}},
+ {3, [3]byte{0xef, 0x9f, 0x86}}, {3, [3]byte{0xef, 0x9f, 0x87}},
+ {3, [3]byte{0xef, 0x9f, 0x88}}, {3, [3]byte{0xef, 0x9f, 0x89}},
+ {3, [3]byte{0xef, 0x9f, 0x8a}}, {3, [3]byte{0xef, 0x9f, 0x8b}},
+ {3, [3]byte{0xef, 0x9f, 0x8c}}, {3, [3]byte{0xef, 0x9f, 0x8d}},
+ {3, [3]byte{0xef, 0x9f, 0x8e}}, {3, [3]byte{0xef, 0x9f, 0x8f}},
+ {3, [3]byte{0xef, 0x9f, 0x90}}, {3, [3]byte{0xef, 0x9f, 0x91}},
+ {3, [3]byte{0xef, 0x9f, 0x92}}, {3, [3]byte{0xef, 0x9f, 0x93}},
+ {3, [3]byte{0xef, 0x9f, 0x94}}, {3, [3]byte{0xef, 0x9f, 0x95}},
+ {3, [3]byte{0xef, 0x9f, 0x96}}, {3, [3]byte{0xef, 0x9f, 0x97}},
+ {3, [3]byte{0xef, 0x9f, 0x98}}, {3, [3]byte{0xef, 0x9f, 0x99}},
+ {3, [3]byte{0xef, 0x9f, 0x9a}}, {3, [3]byte{0xef, 0x9f, 0x9b}},
+ {3, [3]byte{0xef, 0x9f, 0x9c}}, {3, [3]byte{0xef, 0x9f, 0x9d}},
+ {3, [3]byte{0xef, 0x9f, 0x9e}}, {3, [3]byte{0xef, 0x9f, 0x9f}},
+ {3, [3]byte{0xef, 0x9f, 0xa0}}, {3, [3]byte{0xef, 0x9f, 0xa1}},
+ {3, [3]byte{0xef, 0x9f, 0xa2}}, {3, [3]byte{0xef, 0x9f, 0xa3}},
+ {3, [3]byte{0xef, 0x9f, 0xa4}}, {3, [3]byte{0xef, 0x9f, 0xa5}},
+ {3, [3]byte{0xef, 0x9f, 0xa6}}, {3, [3]byte{0xef, 0x9f, 0xa7}},
+ {3, [3]byte{0xef, 0x9f, 0xa8}}, {3, [3]byte{0xef, 0x9f, 0xa9}},
+ {3, [3]byte{0xef, 0x9f, 0xaa}}, {3, [3]byte{0xef, 0x9f, 0xab}},
+ {3, [3]byte{0xef, 0x9f, 0xac}}, {3, [3]byte{0xef, 0x9f, 0xad}},
+ {3, [3]byte{0xef, 0x9f, 0xae}}, {3, [3]byte{0xef, 0x9f, 0xaf}},
+ {3, [3]byte{0xef, 0x9f, 0xb0}}, {3, [3]byte{0xef, 0x9f, 0xb1}},
+ {3, [3]byte{0xef, 0x9f, 0xb2}}, {3, [3]byte{0xef, 0x9f, 0xb3}},
+ {3, [3]byte{0xef, 0x9f, 0xb4}}, {3, [3]byte{0xef, 0x9f, 0xb5}},
+ {3, [3]byte{0xef, 0x9f, 0xb6}}, {3, [3]byte{0xef, 0x9f, 0xb7}},
+ {3, [3]byte{0xef, 0x9f, 0xb8}}, {3, [3]byte{0xef, 0x9f, 0xb9}},
+ {3, [3]byte{0xef, 0x9f, 0xba}}, {3, [3]byte{0xef, 0x9f, 0xbb}},
+ {3, [3]byte{0xef, 0x9f, 0xbc}}, {3, [3]byte{0xef, 0x9f, 0xbd}},
+ {3, [3]byte{0xef, 0x9f, 0xbe}}, {3, [3]byte{0xef, 0x9f, 0xbf}},
+ },
+ encode: [256]uint32{
+ 0x00000000, 0x01000001, 0x02000002, 0x03000003, 0x04000004, 0x05000005, 0x06000006, 0x07000007,
+ 0x08000008, 0x09000009, 0x0a00000a, 0x0b00000b, 0x0c00000c, 0x0d00000d, 0x0e00000e, 0x0f00000f,
+ 0x10000010, 0x11000011, 0x12000012, 0x13000013, 0x14000014, 0x15000015, 0x16000016, 0x17000017,
+ 0x18000018, 0x19000019, 0x1a00001a, 0x1b00001b, 0x1c00001c, 0x1d00001d, 0x1e00001e, 0x1f00001f,
+ 0x20000020, 0x21000021, 0x22000022, 0x23000023, 0x24000024, 0x25000025, 0x26000026, 0x27000027,
+ 0x28000028, 0x29000029, 0x2a00002a, 0x2b00002b, 0x2c00002c, 0x2d00002d, 0x2e00002e, 0x2f00002f,
+ 0x30000030, 0x31000031, 0x32000032, 0x33000033, 0x34000034, 0x35000035, 0x36000036, 0x37000037,
+ 0x38000038, 0x39000039, 0x3a00003a, 0x3b00003b, 0x3c00003c, 0x3d00003d, 0x3e00003e, 0x3f00003f,
+ 0x40000040, 0x41000041, 0x42000042, 0x43000043, 0x44000044, 0x45000045, 0x46000046, 0x47000047,
+ 0x48000048, 0x49000049, 0x4a00004a, 0x4b00004b, 0x4c00004c, 0x4d00004d, 0x4e00004e, 0x4f00004f,
+ 0x50000050, 0x51000051, 0x52000052, 0x53000053, 0x54000054, 0x55000055, 0x56000056, 0x57000057,
+ 0x58000058, 0x59000059, 0x5a00005a, 0x5b00005b, 0x5c00005c, 0x5d00005d, 0x5e00005e, 0x5f00005f,
+ 0x60000060, 0x61000061, 0x62000062, 0x63000063, 0x64000064, 0x65000065, 0x66000066, 0x67000067,
+ 0x68000068, 0x69000069, 0x6a00006a, 0x6b00006b, 0x6c00006c, 0x6d00006d, 0x6e00006e, 0x6f00006f,
+ 0x70000070, 0x71000071, 0x72000072, 0x73000073, 0x74000074, 0x75000075, 0x76000076, 0x77000077,
+ 0x78000078, 0x79000079, 0x7a00007a, 0x7b00007b, 0x7c00007c, 0x7d00007d, 0x7e00007e, 0x7f00007f,
+ 0x8000f780, 0x8100f781, 0x8200f782, 0x8300f783, 0x8400f784, 0x8500f785, 0x8600f786, 0x8700f787,
+ 0x8800f788, 0x8900f789, 0x8a00f78a, 0x8b00f78b, 0x8c00f78c, 0x8d00f78d, 0x8e00f78e, 0x8f00f78f,
+ 0x9000f790, 0x9100f791, 0x9200f792, 0x9300f793, 0x9400f794, 0x9500f795, 0x9600f796, 0x9700f797,
+ 0x9800f798, 0x9900f799, 0x9a00f79a, 0x9b00f79b, 0x9c00f79c, 0x9d00f79d, 0x9e00f79e, 0x9f00f79f,
+ 0xa000f7a0, 0xa100f7a1, 0xa200f7a2, 0xa300f7a3, 0xa400f7a4, 0xa500f7a5, 0xa600f7a6, 0xa700f7a7,
+ 0xa800f7a8, 0xa900f7a9, 0xaa00f7aa, 0xab00f7ab, 0xac00f7ac, 0xad00f7ad, 0xae00f7ae, 0xaf00f7af,
+ 0xb000f7b0, 0xb100f7b1, 0xb200f7b2, 0xb300f7b3, 0xb400f7b4, 0xb500f7b5, 0xb600f7b6, 0xb700f7b7,
+ 0xb800f7b8, 0xb900f7b9, 0xba00f7ba, 0xbb00f7bb, 0xbc00f7bc, 0xbd00f7bd, 0xbe00f7be, 0xbf00f7bf,
+ 0xc000f7c0, 0xc100f7c1, 0xc200f7c2, 0xc300f7c3, 0xc400f7c4, 0xc500f7c5, 0xc600f7c6, 0xc700f7c7,
+ 0xc800f7c8, 0xc900f7c9, 0xca00f7ca, 0xcb00f7cb, 0xcc00f7cc, 0xcd00f7cd, 0xce00f7ce, 0xcf00f7cf,
+ 0xd000f7d0, 0xd100f7d1, 0xd200f7d2, 0xd300f7d3, 0xd400f7d4, 0xd500f7d5, 0xd600f7d6, 0xd700f7d7,
+ 0xd800f7d8, 0xd900f7d9, 0xda00f7da, 0xdb00f7db, 0xdc00f7dc, 0xdd00f7dd, 0xde00f7de, 0xdf00f7df,
+ 0xe000f7e0, 0xe100f7e1, 0xe200f7e2, 0xe300f7e3, 0xe400f7e4, 0xe500f7e5, 0xe600f7e6, 0xe700f7e7,
+ 0xe800f7e8, 0xe900f7e9, 0xea00f7ea, 0xeb00f7eb, 0xec00f7ec, 0xed00f7ed, 0xee00f7ee, 0xef00f7ef,
+ 0xf000f7f0, 0xf100f7f1, 0xf200f7f2, 0xf300f7f3, 0xf400f7f4, 0xf500f7f5, 0xf600f7f6, 0xf700f7f7,
+ 0xf800f7f8, 0xf900f7f9, 0xfa00f7fa, 0xfb00f7fb, 0xfc00f7fc, 0xfd00f7fd, 0xfe00f7fe, 0xff00f7ff,
+ },
+}
+var listAll = []encoding.Encoding{
+ CodePage037,
+ CodePage437,
+ CodePage850,
+ CodePage852,
+ CodePage855,
+ CodePage858,
+ CodePage860,
+ CodePage862,
+ CodePage863,
+ CodePage865,
+ CodePage866,
+ CodePage1047,
+ CodePage1140,
+ ISO8859_1,
+ ISO8859_2,
+ ISO8859_3,
+ ISO8859_4,
+ ISO8859_5,
+ ISO8859_6,
+ ISO8859_6E,
+ ISO8859_6I,
+ ISO8859_7,
+ ISO8859_8,
+ ISO8859_8E,
+ ISO8859_8I,
+ ISO8859_9,
+ ISO8859_10,
+ ISO8859_13,
+ ISO8859_14,
+ ISO8859_15,
+ ISO8859_16,
+ KOI8R,
+ KOI8U,
+ Macintosh,
+ MacintoshCyrillic,
+ Windows874,
+ Windows1250,
+ Windows1251,
+ Windows1252,
+ Windows1253,
+ Windows1254,
+ Windows1255,
+ Windows1256,
+ Windows1257,
+ Windows1258,
+ XUserDefined,
+}
+
+// Total table size 87024 bytes (84KiB); checksum: 811C9DC5
diff --git a/vendor/golang.org/x/text/encoding/encoding.go b/vendor/golang.org/x/text/encoding/encoding.go
new file mode 100644
index 000000000..a0bd7cd4d
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/encoding.go
@@ -0,0 +1,335 @@
+// 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 encoding defines an interface for character encodings, such as Shift
+// JIS and Windows 1252, that can convert to and from UTF-8.
+//
+// Encoding implementations are provided in other packages, such as
+// golang.org/x/text/encoding/charmap and
+// golang.org/x/text/encoding/japanese.
+package encoding // import "golang.org/x/text/encoding"
+
+import (
+ "errors"
+ "io"
+ "strconv"
+ "unicode/utf8"
+
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/transform"
+)
+
+// TODO:
+// - There seems to be some inconsistency in when decoders return errors
+// and when not. Also documentation seems to suggest they shouldn't return
+// errors at all (except for UTF-16).
+// - Encoders seem to rely on or at least benefit from the input being in NFC
+// normal form. Perhaps add an example how users could prepare their output.
+
+// Encoding is a character set encoding that can be transformed to and from
+// UTF-8.
+type Encoding interface {
+ // NewDecoder returns a Decoder.
+ NewDecoder() *Decoder
+
+ // NewEncoder returns an Encoder.
+ NewEncoder() *Encoder
+}
+
+// A Decoder converts bytes to UTF-8. It implements transform.Transformer.
+//
+// Transforming source bytes that are not of that encoding will not result in an
+// error per se. Each byte that cannot be transcoded will be represented in the
+// output by the UTF-8 encoding of '\uFFFD', the replacement rune.
+type Decoder struct {
+ transform.Transformer
+
+ // This forces external creators of Decoders to use names in struct
+ // initializers, allowing for future extendibility without having to break
+ // code.
+ _ struct{}
+}
+
+// Bytes converts the given encoded bytes to UTF-8. It returns the converted
+// bytes or nil, err if any error occurred.
+func (d *Decoder) Bytes(b []byte) ([]byte, error) {
+ b, _, err := transform.Bytes(d, b)
+ if err != nil {
+ return nil, err
+ }
+ return b, nil
+}
+
+// String converts the given encoded string to UTF-8. It returns the converted
+// string or "", err if any error occurred.
+func (d *Decoder) String(s string) (string, error) {
+ s, _, err := transform.String(d, s)
+ if err != nil {
+ return "", err
+ }
+ return s, nil
+}
+
+// Reader wraps another Reader to decode its bytes.
+//
+// The Decoder may not be used for any other operation as long as the returned
+// Reader is in use.
+func (d *Decoder) Reader(r io.Reader) io.Reader {
+ return transform.NewReader(r, d)
+}
+
+// An Encoder converts bytes from UTF-8. It implements transform.Transformer.
+//
+// Each rune that cannot be transcoded will result in an error. In this case,
+// the transform will consume all source byte up to, not including the offending
+// rune. Transforming source bytes that are not valid UTF-8 will be replaced by
+// `\uFFFD`. To return early with an error instead, use transform.Chain to
+// preprocess the data with a UTF8Validator.
+type Encoder struct {
+ transform.Transformer
+
+ // This forces external creators of Encoders to use names in struct
+ // initializers, allowing for future extendibility without having to break
+ // code.
+ _ struct{}
+}
+
+// Bytes converts bytes from UTF-8. It returns the converted bytes or nil, err if
+// any error occurred.
+func (e *Encoder) Bytes(b []byte) ([]byte, error) {
+ b, _, err := transform.Bytes(e, b)
+ if err != nil {
+ return nil, err
+ }
+ return b, nil
+}
+
+// String converts a string from UTF-8. It returns the converted string or
+// "", err if any error occurred.
+func (e *Encoder) String(s string) (string, error) {
+ s, _, err := transform.String(e, s)
+ if err != nil {
+ return "", err
+ }
+ return s, nil
+}
+
+// Writer wraps another Writer to encode its UTF-8 output.
+//
+// The Encoder may not be used for any other operation as long as the returned
+// Writer is in use.
+func (e *Encoder) Writer(w io.Writer) io.Writer {
+ return transform.NewWriter(w, e)
+}
+
+// ASCIISub is the ASCII substitute character, as recommended by
+// https://unicode.org/reports/tr36/#Text_Comparison
+const ASCIISub = '\x1a'
+
+// Nop is the nop encoding. Its transformed bytes are the same as the source
+// bytes; it does not replace invalid UTF-8 sequences.
+var Nop Encoding = nop{}
+
+type nop struct{}
+
+func (nop) NewDecoder() *Decoder {
+ return &Decoder{Transformer: transform.Nop}
+}
+func (nop) NewEncoder() *Encoder {
+ return &Encoder{Transformer: transform.Nop}
+}
+
+// Replacement is the replacement encoding. Decoding from the replacement
+// encoding yields a single '\uFFFD' replacement rune. Encoding from UTF-8 to
+// the replacement encoding yields the same as the source bytes except that
+// invalid UTF-8 is converted to '\uFFFD'.
+//
+// It is defined at http://encoding.spec.whatwg.org/#replacement
+var Replacement Encoding = replacement{}
+
+type replacement struct{}
+
+func (replacement) NewDecoder() *Decoder {
+ return &Decoder{Transformer: replacementDecoder{}}
+}
+
+func (replacement) NewEncoder() *Encoder {
+ return &Encoder{Transformer: replacementEncoder{}}
+}
+
+func (replacement) ID() (mib identifier.MIB, other string) {
+ return identifier.Replacement, ""
+}
+
+type replacementDecoder struct{ transform.NopResetter }
+
+func (replacementDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ if len(dst) < 3 {
+ return 0, 0, transform.ErrShortDst
+ }
+ if atEOF {
+ const fffd = "\ufffd"
+ dst[0] = fffd[0]
+ dst[1] = fffd[1]
+ dst[2] = fffd[2]
+ nDst = 3
+ }
+ return nDst, len(src), nil
+}
+
+type replacementEncoder struct{ transform.NopResetter }
+
+func (replacementEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+
+ for ; nSrc < len(src); nSrc += size {
+ r = rune(src[nSrc])
+
+ // Decode a 1-byte rune.
+ if r < utf8.RuneSelf {
+ size = 1
+
+ } else {
+ // Decode a multi-byte rune.
+ r, size = utf8.DecodeRune(src[nSrc:])
+ if size == 1 {
+ // All valid runes of size 1 (those below utf8.RuneSelf) were
+ // handled above. We have invalid UTF-8 or we haven't seen the
+ // full character yet.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+ r = '\ufffd'
+ }
+ }
+
+ if nDst+utf8.RuneLen(r) > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ nDst += utf8.EncodeRune(dst[nDst:], r)
+ }
+ return nDst, nSrc, err
+}
+
+// HTMLEscapeUnsupported wraps encoders to replace source runes outside the
+// repertoire of the destination encoding with HTML escape sequences.
+//
+// This wrapper exists to comply to URL and HTML forms requiring a
+// non-terminating legacy encoder. The produced sequences may lead to data
+// loss as they are indistinguishable from legitimate input. To avoid this
+// issue, use UTF-8 encodings whenever possible.
+func HTMLEscapeUnsupported(e *Encoder) *Encoder {
+ return &Encoder{Transformer: &errorHandler{e, errorToHTML}}
+}
+
+// ReplaceUnsupported wraps encoders to replace source runes outside the
+// repertoire of the destination encoding with an encoding-specific
+// replacement.
+//
+// This wrapper is only provided for backwards compatibility and legacy
+// handling. Its use is strongly discouraged. Use UTF-8 whenever possible.
+func ReplaceUnsupported(e *Encoder) *Encoder {
+ return &Encoder{Transformer: &errorHandler{e, errorToReplacement}}
+}
+
+type errorHandler struct {
+ *Encoder
+ handler func(dst []byte, r rune, err repertoireError) (n int, ok bool)
+}
+
+// TODO: consider making this error public in some form.
+type repertoireError interface {
+ Replacement() byte
+}
+
+func (h errorHandler) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ nDst, nSrc, err = h.Transformer.Transform(dst, src, atEOF)
+ for err != nil {
+ rerr, ok := err.(repertoireError)
+ if !ok {
+ return nDst, nSrc, err
+ }
+ r, sz := utf8.DecodeRune(src[nSrc:])
+ n, ok := h.handler(dst[nDst:], r, rerr)
+ if !ok {
+ return nDst, nSrc, transform.ErrShortDst
+ }
+ err = nil
+ nDst += n
+ if nSrc += sz; nSrc < len(src) {
+ var dn, sn int
+ dn, sn, err = h.Transformer.Transform(dst[nDst:], src[nSrc:], atEOF)
+ nDst += dn
+ nSrc += sn
+ }
+ }
+ return nDst, nSrc, err
+}
+
+func errorToHTML(dst []byte, r rune, err repertoireError) (n int, ok bool) {
+ buf := [8]byte{}
+ b := strconv.AppendUint(buf[:0], uint64(r), 10)
+ if n = len(b) + len("&#;"); n >= len(dst) {
+ return 0, false
+ }
+ dst[0] = '&'
+ dst[1] = '#'
+ dst[copy(dst[2:], b)+2] = ';'
+ return n, true
+}
+
+func errorToReplacement(dst []byte, r rune, err repertoireError) (n int, ok bool) {
+ if len(dst) == 0 {
+ return 0, false
+ }
+ dst[0] = err.Replacement()
+ return 1, true
+}
+
+// ErrInvalidUTF8 means that a transformer encountered invalid UTF-8.
+var ErrInvalidUTF8 = errors.New("encoding: invalid UTF-8")
+
+// UTF8Validator is a transformer that returns ErrInvalidUTF8 on the first
+// input byte that is not valid UTF-8.
+var UTF8Validator transform.Transformer = utf8Validator{}
+
+type utf8Validator struct{ transform.NopResetter }
+
+func (utf8Validator) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ n := len(src)
+ if n > len(dst) {
+ n = len(dst)
+ }
+ for i := 0; i < n; {
+ if c := src[i]; c < utf8.RuneSelf {
+ dst[i] = c
+ i++
+ continue
+ }
+ _, size := utf8.DecodeRune(src[i:])
+ if size == 1 {
+ // All valid runes of size 1 (those below utf8.RuneSelf) were
+ // handled above. We have invalid UTF-8 or we haven't seen the
+ // full character yet.
+ err = ErrInvalidUTF8
+ if !atEOF && !utf8.FullRune(src[i:]) {
+ err = transform.ErrShortSrc
+ }
+ return i, i, err
+ }
+ if i+size > len(dst) {
+ return i, i, transform.ErrShortDst
+ }
+ for ; size > 0; size-- {
+ dst[i] = src[i]
+ i++
+ }
+ }
+ if len(src) > len(dst) {
+ err = transform.ErrShortDst
+ }
+ return n, n, err
+}
diff --git a/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go b/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go
new file mode 100644
index 000000000..bdc7d15dd
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go
@@ -0,0 +1,86 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run gen.go
+
+// Package htmlindex maps character set encoding names to Encodings as
+// recommended by the W3C for use in HTML 5. See http://www.w3.org/TR/encoding.
+package htmlindex
+
+// TODO: perhaps have a "bare" version of the index (used by this package) that
+// is not pre-loaded with all encodings. Global variables in encodings prevent
+// the linker from being able to purge unneeded tables. This means that
+// referencing all encodings, as this package does for the default index, links
+// in all encodings unconditionally.
+//
+// This issue can be solved by either solving the linking issue (see
+// https://github.com/golang/go/issues/6330) or refactoring the encoding tables
+// (e.g. moving the tables to internal packages that do not use global
+// variables).
+
+// TODO: allow canonicalizing names
+
+import (
+ "errors"
+ "strings"
+ "sync"
+
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/language"
+)
+
+var (
+ errInvalidName = errors.New("htmlindex: invalid encoding name")
+ errUnknown = errors.New("htmlindex: unknown Encoding")
+ errUnsupported = errors.New("htmlindex: this encoding is not supported")
+)
+
+var (
+ matcherOnce sync.Once
+ matcher language.Matcher
+)
+
+// LanguageDefault returns the canonical name of the default encoding for a
+// given language.
+func LanguageDefault(tag language.Tag) string {
+ matcherOnce.Do(func() {
+ tags := []language.Tag{}
+ for _, t := range strings.Split(locales, " ") {
+ tags = append(tags, language.MustParse(t))
+ }
+ matcher = language.NewMatcher(tags, language.PreferSameScript(true))
+ })
+ _, i, _ := matcher.Match(tag)
+ return canonical[localeMap[i]] // Default is Windows-1252.
+}
+
+// Get returns an Encoding for one of the names listed in
+// http://www.w3.org/TR/encoding using the Default Index. Matching is case-
+// insensitive.
+func Get(name string) (encoding.Encoding, error) {
+ x, ok := nameMap[strings.ToLower(strings.TrimSpace(name))]
+ if !ok {
+ return nil, errInvalidName
+ }
+ return encodings[x], nil
+}
+
+// Name reports the canonical name of the given Encoding. It will return
+// an error if e is not associated with a supported encoding scheme.
+func Name(e encoding.Encoding) (string, error) {
+ id, ok := e.(identifier.Interface)
+ if !ok {
+ return "", errUnknown
+ }
+ mib, _ := id.ID()
+ if mib == 0 {
+ return "", errUnknown
+ }
+ v, ok := mibMap[mib]
+ if !ok {
+ return "", errUnsupported
+ }
+ return canonical[v], nil
+}
diff --git a/vendor/golang.org/x/text/encoding/htmlindex/map.go b/vendor/golang.org/x/text/encoding/htmlindex/map.go
new file mode 100644
index 000000000..c61439045
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/htmlindex/map.go
@@ -0,0 +1,105 @@
+// 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 htmlindex
+
+import (
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/charmap"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/encoding/japanese"
+ "golang.org/x/text/encoding/korean"
+ "golang.org/x/text/encoding/simplifiedchinese"
+ "golang.org/x/text/encoding/traditionalchinese"
+ "golang.org/x/text/encoding/unicode"
+)
+
+// mibMap maps a MIB identifier to an htmlEncoding index.
+var mibMap = map[identifier.MIB]htmlEncoding{
+ identifier.UTF8: utf8,
+ identifier.UTF16BE: utf16be,
+ identifier.UTF16LE: utf16le,
+ identifier.IBM866: ibm866,
+ identifier.ISOLatin2: iso8859_2,
+ identifier.ISOLatin3: iso8859_3,
+ identifier.ISOLatin4: iso8859_4,
+ identifier.ISOLatinCyrillic: iso8859_5,
+ identifier.ISOLatinArabic: iso8859_6,
+ identifier.ISOLatinGreek: iso8859_7,
+ identifier.ISOLatinHebrew: iso8859_8,
+ identifier.ISO88598I: iso8859_8I,
+ identifier.ISOLatin6: iso8859_10,
+ identifier.ISO885913: iso8859_13,
+ identifier.ISO885914: iso8859_14,
+ identifier.ISO885915: iso8859_15,
+ identifier.ISO885916: iso8859_16,
+ identifier.KOI8R: koi8r,
+ identifier.KOI8U: koi8u,
+ identifier.Macintosh: macintosh,
+ identifier.MacintoshCyrillic: macintoshCyrillic,
+ identifier.Windows874: windows874,
+ identifier.Windows1250: windows1250,
+ identifier.Windows1251: windows1251,
+ identifier.Windows1252: windows1252,
+ identifier.Windows1253: windows1253,
+ identifier.Windows1254: windows1254,
+ identifier.Windows1255: windows1255,
+ identifier.Windows1256: windows1256,
+ identifier.Windows1257: windows1257,
+ identifier.Windows1258: windows1258,
+ identifier.XUserDefined: xUserDefined,
+ identifier.GBK: gbk,
+ identifier.GB18030: gb18030,
+ identifier.Big5: big5,
+ identifier.EUCPkdFmtJapanese: eucjp,
+ identifier.ISO2022JP: iso2022jp,
+ identifier.ShiftJIS: shiftJIS,
+ identifier.EUCKR: euckr,
+ identifier.Replacement: replacement,
+}
+
+// encodings maps the internal htmlEncoding to an Encoding.
+// TODO: consider using a reusable index in encoding/internal.
+var encodings = [numEncodings]encoding.Encoding{
+ utf8: unicode.UTF8,
+ ibm866: charmap.CodePage866,
+ iso8859_2: charmap.ISO8859_2,
+ iso8859_3: charmap.ISO8859_3,
+ iso8859_4: charmap.ISO8859_4,
+ iso8859_5: charmap.ISO8859_5,
+ iso8859_6: charmap.ISO8859_6,
+ iso8859_7: charmap.ISO8859_7,
+ iso8859_8: charmap.ISO8859_8,
+ iso8859_8I: charmap.ISO8859_8I,
+ iso8859_10: charmap.ISO8859_10,
+ iso8859_13: charmap.ISO8859_13,
+ iso8859_14: charmap.ISO8859_14,
+ iso8859_15: charmap.ISO8859_15,
+ iso8859_16: charmap.ISO8859_16,
+ koi8r: charmap.KOI8R,
+ koi8u: charmap.KOI8U,
+ macintosh: charmap.Macintosh,
+ windows874: charmap.Windows874,
+ windows1250: charmap.Windows1250,
+ windows1251: charmap.Windows1251,
+ windows1252: charmap.Windows1252,
+ windows1253: charmap.Windows1253,
+ windows1254: charmap.Windows1254,
+ windows1255: charmap.Windows1255,
+ windows1256: charmap.Windows1256,
+ windows1257: charmap.Windows1257,
+ windows1258: charmap.Windows1258,
+ macintoshCyrillic: charmap.MacintoshCyrillic,
+ gbk: simplifiedchinese.GBK,
+ gb18030: simplifiedchinese.GB18030,
+ big5: traditionalchinese.Big5,
+ eucjp: japanese.EUCJP,
+ iso2022jp: japanese.ISO2022JP,
+ shiftJIS: japanese.ShiftJIS,
+ euckr: korean.EUCKR,
+ replacement: encoding.Replacement,
+ utf16be: unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM),
+ utf16le: unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM),
+ xUserDefined: charmap.XUserDefined,
+}
diff --git a/vendor/golang.org/x/text/encoding/htmlindex/tables.go b/vendor/golang.org/x/text/encoding/htmlindex/tables.go
new file mode 100644
index 000000000..f074e2c6d
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/htmlindex/tables.go
@@ -0,0 +1,353 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package htmlindex
+
+type htmlEncoding byte
+
+const (
+ utf8 htmlEncoding = iota
+ ibm866
+ iso8859_2
+ iso8859_3
+ iso8859_4
+ iso8859_5
+ iso8859_6
+ iso8859_7
+ iso8859_8
+ iso8859_8I
+ iso8859_10
+ iso8859_13
+ iso8859_14
+ iso8859_15
+ iso8859_16
+ koi8r
+ koi8u
+ macintosh
+ windows874
+ windows1250
+ windows1251
+ windows1252
+ windows1253
+ windows1254
+ windows1255
+ windows1256
+ windows1257
+ windows1258
+ macintoshCyrillic
+ gbk
+ gb18030
+ big5
+ eucjp
+ iso2022jp
+ shiftJIS
+ euckr
+ replacement
+ utf16be
+ utf16le
+ xUserDefined
+ numEncodings
+)
+
+var canonical = [numEncodings]string{
+ "utf-8",
+ "ibm866",
+ "iso-8859-2",
+ "iso-8859-3",
+ "iso-8859-4",
+ "iso-8859-5",
+ "iso-8859-6",
+ "iso-8859-7",
+ "iso-8859-8",
+ "iso-8859-8-i",
+ "iso-8859-10",
+ "iso-8859-13",
+ "iso-8859-14",
+ "iso-8859-15",
+ "iso-8859-16",
+ "koi8-r",
+ "koi8-u",
+ "macintosh",
+ "windows-874",
+ "windows-1250",
+ "windows-1251",
+ "windows-1252",
+ "windows-1253",
+ "windows-1254",
+ "windows-1255",
+ "windows-1256",
+ "windows-1257",
+ "windows-1258",
+ "x-mac-cyrillic",
+ "gbk",
+ "gb18030",
+ "big5",
+ "euc-jp",
+ "iso-2022-jp",
+ "shift_jis",
+ "euc-kr",
+ "replacement",
+ "utf-16be",
+ "utf-16le",
+ "x-user-defined",
+}
+
+var nameMap = map[string]htmlEncoding{
+ "unicode-1-1-utf-8": utf8,
+ "utf-8": utf8,
+ "utf8": utf8,
+ "866": ibm866,
+ "cp866": ibm866,
+ "csibm866": ibm866,
+ "ibm866": ibm866,
+ "csisolatin2": iso8859_2,
+ "iso-8859-2": iso8859_2,
+ "iso-ir-101": iso8859_2,
+ "iso8859-2": iso8859_2,
+ "iso88592": iso8859_2,
+ "iso_8859-2": iso8859_2,
+ "iso_8859-2:1987": iso8859_2,
+ "l2": iso8859_2,
+ "latin2": iso8859_2,
+ "csisolatin3": iso8859_3,
+ "iso-8859-3": iso8859_3,
+ "iso-ir-109": iso8859_3,
+ "iso8859-3": iso8859_3,
+ "iso88593": iso8859_3,
+ "iso_8859-3": iso8859_3,
+ "iso_8859-3:1988": iso8859_3,
+ "l3": iso8859_3,
+ "latin3": iso8859_3,
+ "csisolatin4": iso8859_4,
+ "iso-8859-4": iso8859_4,
+ "iso-ir-110": iso8859_4,
+ "iso8859-4": iso8859_4,
+ "iso88594": iso8859_4,
+ "iso_8859-4": iso8859_4,
+ "iso_8859-4:1988": iso8859_4,
+ "l4": iso8859_4,
+ "latin4": iso8859_4,
+ "csisolatincyrillic": iso8859_5,
+ "cyrillic": iso8859_5,
+ "iso-8859-5": iso8859_5,
+ "iso-ir-144": iso8859_5,
+ "iso8859-5": iso8859_5,
+ "iso88595": iso8859_5,
+ "iso_8859-5": iso8859_5,
+ "iso_8859-5:1988": iso8859_5,
+ "arabic": iso8859_6,
+ "asmo-708": iso8859_6,
+ "csiso88596e": iso8859_6,
+ "csiso88596i": iso8859_6,
+ "csisolatinarabic": iso8859_6,
+ "ecma-114": iso8859_6,
+ "iso-8859-6": iso8859_6,
+ "iso-8859-6-e": iso8859_6,
+ "iso-8859-6-i": iso8859_6,
+ "iso-ir-127": iso8859_6,
+ "iso8859-6": iso8859_6,
+ "iso88596": iso8859_6,
+ "iso_8859-6": iso8859_6,
+ "iso_8859-6:1987": iso8859_6,
+ "csisolatingreek": iso8859_7,
+ "ecma-118": iso8859_7,
+ "elot_928": iso8859_7,
+ "greek": iso8859_7,
+ "greek8": iso8859_7,
+ "iso-8859-7": iso8859_7,
+ "iso-ir-126": iso8859_7,
+ "iso8859-7": iso8859_7,
+ "iso88597": iso8859_7,
+ "iso_8859-7": iso8859_7,
+ "iso_8859-7:1987": iso8859_7,
+ "sun_eu_greek": iso8859_7,
+ "csiso88598e": iso8859_8,
+ "csisolatinhebrew": iso8859_8,
+ "hebrew": iso8859_8,
+ "iso-8859-8": iso8859_8,
+ "iso-8859-8-e": iso8859_8,
+ "iso-ir-138": iso8859_8,
+ "iso8859-8": iso8859_8,
+ "iso88598": iso8859_8,
+ "iso_8859-8": iso8859_8,
+ "iso_8859-8:1988": iso8859_8,
+ "visual": iso8859_8,
+ "csiso88598i": iso8859_8I,
+ "iso-8859-8-i": iso8859_8I,
+ "logical": iso8859_8I,
+ "csisolatin6": iso8859_10,
+ "iso-8859-10": iso8859_10,
+ "iso-ir-157": iso8859_10,
+ "iso8859-10": iso8859_10,
+ "iso885910": iso8859_10,
+ "l6": iso8859_10,
+ "latin6": iso8859_10,
+ "iso-8859-13": iso8859_13,
+ "iso8859-13": iso8859_13,
+ "iso885913": iso8859_13,
+ "iso-8859-14": iso8859_14,
+ "iso8859-14": iso8859_14,
+ "iso885914": iso8859_14,
+ "csisolatin9": iso8859_15,
+ "iso-8859-15": iso8859_15,
+ "iso8859-15": iso8859_15,
+ "iso885915": iso8859_15,
+ "iso_8859-15": iso8859_15,
+ "l9": iso8859_15,
+ "iso-8859-16": iso8859_16,
+ "cskoi8r": koi8r,
+ "koi": koi8r,
+ "koi8": koi8r,
+ "koi8-r": koi8r,
+ "koi8_r": koi8r,
+ "koi8-ru": koi8u,
+ "koi8-u": koi8u,
+ "csmacintosh": macintosh,
+ "mac": macintosh,
+ "macintosh": macintosh,
+ "x-mac-roman": macintosh,
+ "dos-874": windows874,
+ "iso-8859-11": windows874,
+ "iso8859-11": windows874,
+ "iso885911": windows874,
+ "tis-620": windows874,
+ "windows-874": windows874,
+ "cp1250": windows1250,
+ "windows-1250": windows1250,
+ "x-cp1250": windows1250,
+ "cp1251": windows1251,
+ "windows-1251": windows1251,
+ "x-cp1251": windows1251,
+ "ansi_x3.4-1968": windows1252,
+ "ascii": windows1252,
+ "cp1252": windows1252,
+ "cp819": windows1252,
+ "csisolatin1": windows1252,
+ "ibm819": windows1252,
+ "iso-8859-1": windows1252,
+ "iso-ir-100": windows1252,
+ "iso8859-1": windows1252,
+ "iso88591": windows1252,
+ "iso_8859-1": windows1252,
+ "iso_8859-1:1987": windows1252,
+ "l1": windows1252,
+ "latin1": windows1252,
+ "us-ascii": windows1252,
+ "windows-1252": windows1252,
+ "x-cp1252": windows1252,
+ "cp1253": windows1253,
+ "windows-1253": windows1253,
+ "x-cp1253": windows1253,
+ "cp1254": windows1254,
+ "csisolatin5": windows1254,
+ "iso-8859-9": windows1254,
+ "iso-ir-148": windows1254,
+ "iso8859-9": windows1254,
+ "iso88599": windows1254,
+ "iso_8859-9": windows1254,
+ "iso_8859-9:1989": windows1254,
+ "l5": windows1254,
+ "latin5": windows1254,
+ "windows-1254": windows1254,
+ "x-cp1254": windows1254,
+ "cp1255": windows1255,
+ "windows-1255": windows1255,
+ "x-cp1255": windows1255,
+ "cp1256": windows1256,
+ "windows-1256": windows1256,
+ "x-cp1256": windows1256,
+ "cp1257": windows1257,
+ "windows-1257": windows1257,
+ "x-cp1257": windows1257,
+ "cp1258": windows1258,
+ "windows-1258": windows1258,
+ "x-cp1258": windows1258,
+ "x-mac-cyrillic": macintoshCyrillic,
+ "x-mac-ukrainian": macintoshCyrillic,
+ "chinese": gbk,
+ "csgb2312": gbk,
+ "csiso58gb231280": gbk,
+ "gb2312": gbk,
+ "gb_2312": gbk,
+ "gb_2312-80": gbk,
+ "gbk": gbk,
+ "iso-ir-58": gbk,
+ "x-gbk": gbk,
+ "gb18030": gb18030,
+ "big5": big5,
+ "big5-hkscs": big5,
+ "cn-big5": big5,
+ "csbig5": big5,
+ "x-x-big5": big5,
+ "cseucpkdfmtjapanese": eucjp,
+ "euc-jp": eucjp,
+ "x-euc-jp": eucjp,
+ "csiso2022jp": iso2022jp,
+ "iso-2022-jp": iso2022jp,
+ "csshiftjis": shiftJIS,
+ "ms932": shiftJIS,
+ "ms_kanji": shiftJIS,
+ "shift-jis": shiftJIS,
+ "shift_jis": shiftJIS,
+ "sjis": shiftJIS,
+ "windows-31j": shiftJIS,
+ "x-sjis": shiftJIS,
+ "cseuckr": euckr,
+ "csksc56011987": euckr,
+ "euc-kr": euckr,
+ "iso-ir-149": euckr,
+ "korean": euckr,
+ "ks_c_5601-1987": euckr,
+ "ks_c_5601-1989": euckr,
+ "ksc5601": euckr,
+ "ksc_5601": euckr,
+ "windows-949": euckr,
+ "csiso2022kr": replacement,
+ "hz-gb-2312": replacement,
+ "iso-2022-cn": replacement,
+ "iso-2022-cn-ext": replacement,
+ "iso-2022-kr": replacement,
+ "replacement": replacement,
+ "utf-16be": utf16be,
+ "utf-16": utf16le,
+ "utf-16le": utf16le,
+ "x-user-defined": xUserDefined,
+}
+
+var localeMap = []htmlEncoding{
+ windows1252, // und_Latn
+ windows1256, // ar
+ windows1251, // ba
+ windows1251, // be
+ windows1251, // bg
+ windows1250, // cs
+ iso8859_7, // el
+ windows1257, // et
+ windows1256, // fa
+ windows1255, // he
+ windows1250, // hr
+ iso8859_2, // hu
+ shiftJIS, // ja
+ windows1251, // kk
+ euckr, // ko
+ windows1254, // ku
+ windows1251, // ky
+ windows1257, // lt
+ windows1257, // lv
+ windows1251, // mk
+ iso8859_2, // pl
+ windows1251, // ru
+ windows1251, // sah
+ windows1250, // sk
+ iso8859_2, // sl
+ windows1251, // sr
+ windows1251, // tg
+ windows874, // th
+ windows1254, // tr
+ windows1251, // tt
+ windows1251, // uk
+ windows1258, // vi
+ gb18030, // zh-hans
+ big5, // zh-hant
+}
+
+const locales = "und_Latn ar ba be bg cs el et fa he hr hu ja kk ko ku ky lt lv mk pl ru sah sk sl sr tg th tr tt uk vi zh-hans zh-hant"
diff --git a/vendor/golang.org/x/text/encoding/internal/identifier/identifier.go b/vendor/golang.org/x/text/encoding/internal/identifier/identifier.go
new file mode 100644
index 000000000..5c9b85c28
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/internal/identifier/identifier.go
@@ -0,0 +1,81 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run gen.go
+
+// Package identifier defines the contract between implementations of Encoding
+// and Index by defining identifiers that uniquely identify standardized coded
+// character sets (CCS) and character encoding schemes (CES), which we will
+// together refer to as encodings, for which Encoding implementations provide
+// converters to and from UTF-8. This package is typically only of concern to
+// implementers of Indexes and Encodings.
+//
+// One part of the identifier is the MIB code, which is defined by IANA and
+// uniquely identifies a CCS or CES. Each code is associated with data that
+// references authorities, official documentation as well as aliases and MIME
+// names.
+//
+// Not all CESs are covered by the IANA registry. The "other" string that is
+// returned by ID can be used to identify other character sets or versions of
+// existing ones.
+//
+// It is recommended that each package that provides a set of Encodings provide
+// the All and Common variables to reference all supported encodings and
+// commonly used subset. This allows Index implementations to include all
+// available encodings without explicitly referencing or knowing about them.
+package identifier
+
+// Note: this package is internal, but could be made public if there is a need
+// for writing third-party Indexes and Encodings.
+
+// References:
+// - http://source.icu-project.org/repos/icu/icu/trunk/source/data/mappings/convrtrs.txt
+// - http://www.iana.org/assignments/character-sets/character-sets.xhtml
+// - http://www.iana.org/assignments/ianacharset-mib/ianacharset-mib
+// - http://www.ietf.org/rfc/rfc2978.txt
+// - https://www.unicode.org/reports/tr22/
+// - http://www.w3.org/TR/encoding/
+// - https://encoding.spec.whatwg.org/
+// - https://encoding.spec.whatwg.org/encodings.json
+// - https://tools.ietf.org/html/rfc6657#section-5
+
+// Interface can be implemented by Encodings to define the CCS or CES for which
+// it implements conversions.
+type Interface interface {
+ // ID returns an encoding identifier. Exactly one of the mib and other
+ // values should be non-zero.
+ //
+ // In the usual case it is only necessary to indicate the MIB code. The
+ // other string can be used to specify encodings for which there is no MIB,
+ // such as "x-mac-dingbat".
+ //
+ // The other string may only contain the characters a-z, A-Z, 0-9, - and _.
+ ID() (mib MIB, other string)
+
+ // NOTE: the restrictions on the encoding are to allow extending the syntax
+ // with additional information such as versions, vendors and other variants.
+}
+
+// A MIB identifies an encoding. It is derived from the IANA MIB codes and adds
+// some identifiers for some encodings that are not covered by the IANA
+// standard.
+//
+// See http://www.iana.org/assignments/ianacharset-mib.
+type MIB uint16
+
+// These additional MIB types are not defined in IANA. They are added because
+// they are common and defined within the text repo.
+const (
+ // Unofficial marks the start of encodings not registered by IANA.
+ Unofficial MIB = 10000 + iota
+
+ // Replacement is the WhatWG replacement encoding.
+ Replacement
+
+ // XUserDefined is the code for x-user-defined.
+ XUserDefined
+
+ // MacintoshCyrillic is the code for x-mac-cyrillic.
+ MacintoshCyrillic
+)
diff --git a/vendor/golang.org/x/text/encoding/internal/identifier/mib.go b/vendor/golang.org/x/text/encoding/internal/identifier/mib.go
new file mode 100644
index 000000000..8cc29021c
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/internal/identifier/mib.go
@@ -0,0 +1,1621 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package identifier
+
+const (
+ // ASCII is the MIB identifier with IANA name US-ASCII (MIME: US-ASCII).
+ //
+ // ANSI X3.4-1986
+ // Reference: RFC2046
+ ASCII MIB = 3
+
+ // ISOLatin1 is the MIB identifier with IANA name ISO_8859-1:1987 (MIME: ISO-8859-1).
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISOLatin1 MIB = 4
+
+ // ISOLatin2 is the MIB identifier with IANA name ISO_8859-2:1987 (MIME: ISO-8859-2).
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISOLatin2 MIB = 5
+
+ // ISOLatin3 is the MIB identifier with IANA name ISO_8859-3:1988 (MIME: ISO-8859-3).
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISOLatin3 MIB = 6
+
+ // ISOLatin4 is the MIB identifier with IANA name ISO_8859-4:1988 (MIME: ISO-8859-4).
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISOLatin4 MIB = 7
+
+ // ISOLatinCyrillic is the MIB identifier with IANA name ISO_8859-5:1988 (MIME: ISO-8859-5).
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISOLatinCyrillic MIB = 8
+
+ // ISOLatinArabic is the MIB identifier with IANA name ISO_8859-6:1987 (MIME: ISO-8859-6).
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISOLatinArabic MIB = 9
+
+ // ISOLatinGreek is the MIB identifier with IANA name ISO_8859-7:1987 (MIME: ISO-8859-7).
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1947
+ // Reference: RFC1345
+ ISOLatinGreek MIB = 10
+
+ // ISOLatinHebrew is the MIB identifier with IANA name ISO_8859-8:1988 (MIME: ISO-8859-8).
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISOLatinHebrew MIB = 11
+
+ // ISOLatin5 is the MIB identifier with IANA name ISO_8859-9:1989 (MIME: ISO-8859-9).
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISOLatin5 MIB = 12
+
+ // ISOLatin6 is the MIB identifier with IANA name ISO-8859-10 (MIME: ISO-8859-10).
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISOLatin6 MIB = 13
+
+ // ISOTextComm is the MIB identifier with IANA name ISO_6937-2-add.
+ //
+ // ISO-IR: International Register of Escape Sequences and ISO 6937-2:1983
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISOTextComm MIB = 14
+
+ // HalfWidthKatakana is the MIB identifier with IANA name JIS_X0201.
+ //
+ // JIS X 0201-1976. One byte only, this is equivalent to
+ // JIS/Roman (similar to ASCII) plus eight-bit half-width
+ // Katakana
+ // Reference: RFC1345
+ HalfWidthKatakana MIB = 15
+
+ // JISEncoding is the MIB identifier with IANA name JIS_Encoding.
+ //
+ // JIS X 0202-1991. Uses ISO 2022 escape sequences to
+ // shift code sets as documented in JIS X 0202-1991.
+ JISEncoding MIB = 16
+
+ // ShiftJIS is the MIB identifier with IANA name Shift_JIS (MIME: Shift_JIS).
+ //
+ // This charset is an extension of csHalfWidthKatakana by
+ // adding graphic characters in JIS X 0208. The CCS's are
+ // JIS X0201:1997 and JIS X0208:1997. The
+ // complete definition is shown in Appendix 1 of JIS
+ // X0208:1997.
+ // This charset can be used for the top-level media type "text".
+ ShiftJIS MIB = 17
+
+ // EUCPkdFmtJapanese is the MIB identifier with IANA name Extended_UNIX_Code_Packed_Format_for_Japanese (MIME: EUC-JP).
+ //
+ // Standardized by OSF, UNIX International, and UNIX Systems
+ // Laboratories Pacific. Uses ISO 2022 rules to select
+ // code set 0: US-ASCII (a single 7-bit byte set)
+ // code set 1: JIS X0208-1990 (a double 8-bit byte set)
+ // restricted to A0-FF in both bytes
+ // code set 2: Half Width Katakana (a single 7-bit byte set)
+ // requiring SS2 as the character prefix
+ // code set 3: JIS X0212-1990 (a double 7-bit byte set)
+ // restricted to A0-FF in both bytes
+ // requiring SS3 as the character prefix
+ EUCPkdFmtJapanese MIB = 18
+
+ // EUCFixWidJapanese is the MIB identifier with IANA name Extended_UNIX_Code_Fixed_Width_for_Japanese.
+ //
+ // Used in Japan. Each character is 2 octets.
+ // code set 0: US-ASCII (a single 7-bit byte set)
+ // 1st byte = 00
+ // 2nd byte = 20-7E
+ // code set 1: JIS X0208-1990 (a double 7-bit byte set)
+ // restricted to A0-FF in both bytes
+ // code set 2: Half Width Katakana (a single 7-bit byte set)
+ // 1st byte = 00
+ // 2nd byte = A0-FF
+ // code set 3: JIS X0212-1990 (a double 7-bit byte set)
+ // restricted to A0-FF in
+ // the first byte
+ // and 21-7E in the second byte
+ EUCFixWidJapanese MIB = 19
+
+ // ISO4UnitedKingdom is the MIB identifier with IANA name BS_4730.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO4UnitedKingdom MIB = 20
+
+ // ISO11SwedishForNames is the MIB identifier with IANA name SEN_850200_C.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO11SwedishForNames MIB = 21
+
+ // ISO15Italian is the MIB identifier with IANA name IT.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO15Italian MIB = 22
+
+ // ISO17Spanish is the MIB identifier with IANA name ES.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO17Spanish MIB = 23
+
+ // ISO21German is the MIB identifier with IANA name DIN_66003.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO21German MIB = 24
+
+ // ISO60Norwegian1 is the MIB identifier with IANA name NS_4551-1.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO60Norwegian1 MIB = 25
+
+ // ISO69French is the MIB identifier with IANA name NF_Z_62-010.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO69French MIB = 26
+
+ // ISO10646UTF1 is the MIB identifier with IANA name ISO-10646-UTF-1.
+ //
+ // Universal Transfer Format (1), this is the multibyte
+ // encoding, that subsets ASCII-7. It does not have byte
+ // ordering issues.
+ ISO10646UTF1 MIB = 27
+
+ // ISO646basic1983 is the MIB identifier with IANA name ISO_646.basic:1983.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO646basic1983 MIB = 28
+
+ // INVARIANT is the MIB identifier with IANA name INVARIANT.
+ //
+ // Reference: RFC1345
+ INVARIANT MIB = 29
+
+ // ISO2IntlRefVersion is the MIB identifier with IANA name ISO_646.irv:1983.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO2IntlRefVersion MIB = 30
+
+ // NATSSEFI is the MIB identifier with IANA name NATS-SEFI.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ NATSSEFI MIB = 31
+
+ // NATSSEFIADD is the MIB identifier with IANA name NATS-SEFI-ADD.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ NATSSEFIADD MIB = 32
+
+ // NATSDANO is the MIB identifier with IANA name NATS-DANO.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ NATSDANO MIB = 33
+
+ // NATSDANOADD is the MIB identifier with IANA name NATS-DANO-ADD.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ NATSDANOADD MIB = 34
+
+ // ISO10Swedish is the MIB identifier with IANA name SEN_850200_B.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO10Swedish MIB = 35
+
+ // KSC56011987 is the MIB identifier with IANA name KS_C_5601-1987.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ KSC56011987 MIB = 36
+
+ // ISO2022KR is the MIB identifier with IANA name ISO-2022-KR (MIME: ISO-2022-KR).
+ //
+ // rfc1557 (see also KS_C_5601-1987)
+ // Reference: RFC1557
+ ISO2022KR MIB = 37
+
+ // EUCKR is the MIB identifier with IANA name EUC-KR (MIME: EUC-KR).
+ //
+ // rfc1557 (see also KS_C_5861-1992)
+ // Reference: RFC1557
+ EUCKR MIB = 38
+
+ // ISO2022JP is the MIB identifier with IANA name ISO-2022-JP (MIME: ISO-2022-JP).
+ //
+ // rfc1468 (see also rfc2237 )
+ // Reference: RFC1468
+ ISO2022JP MIB = 39
+
+ // ISO2022JP2 is the MIB identifier with IANA name ISO-2022-JP-2 (MIME: ISO-2022-JP-2).
+ //
+ // rfc1554
+ // Reference: RFC1554
+ ISO2022JP2 MIB = 40
+
+ // ISO13JISC6220jp is the MIB identifier with IANA name JIS_C6220-1969-jp.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO13JISC6220jp MIB = 41
+
+ // ISO14JISC6220ro is the MIB identifier with IANA name JIS_C6220-1969-ro.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO14JISC6220ro MIB = 42
+
+ // ISO16Portuguese is the MIB identifier with IANA name PT.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO16Portuguese MIB = 43
+
+ // ISO18Greek7Old is the MIB identifier with IANA name greek7-old.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO18Greek7Old MIB = 44
+
+ // ISO19LatinGreek is the MIB identifier with IANA name latin-greek.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO19LatinGreek MIB = 45
+
+ // ISO25French is the MIB identifier with IANA name NF_Z_62-010_(1973).
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO25French MIB = 46
+
+ // ISO27LatinGreek1 is the MIB identifier with IANA name Latin-greek-1.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO27LatinGreek1 MIB = 47
+
+ // ISO5427Cyrillic is the MIB identifier with IANA name ISO_5427.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO5427Cyrillic MIB = 48
+
+ // ISO42JISC62261978 is the MIB identifier with IANA name JIS_C6226-1978.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO42JISC62261978 MIB = 49
+
+ // ISO47BSViewdata is the MIB identifier with IANA name BS_viewdata.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO47BSViewdata MIB = 50
+
+ // ISO49INIS is the MIB identifier with IANA name INIS.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO49INIS MIB = 51
+
+ // ISO50INIS8 is the MIB identifier with IANA name INIS-8.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO50INIS8 MIB = 52
+
+ // ISO51INISCyrillic is the MIB identifier with IANA name INIS-cyrillic.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO51INISCyrillic MIB = 53
+
+ // ISO54271981 is the MIB identifier with IANA name ISO_5427:1981.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO54271981 MIB = 54
+
+ // ISO5428Greek is the MIB identifier with IANA name ISO_5428:1980.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO5428Greek MIB = 55
+
+ // ISO57GB1988 is the MIB identifier with IANA name GB_1988-80.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO57GB1988 MIB = 56
+
+ // ISO58GB231280 is the MIB identifier with IANA name GB_2312-80.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO58GB231280 MIB = 57
+
+ // ISO61Norwegian2 is the MIB identifier with IANA name NS_4551-2.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO61Norwegian2 MIB = 58
+
+ // ISO70VideotexSupp1 is the MIB identifier with IANA name videotex-suppl.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO70VideotexSupp1 MIB = 59
+
+ // ISO84Portuguese2 is the MIB identifier with IANA name PT2.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO84Portuguese2 MIB = 60
+
+ // ISO85Spanish2 is the MIB identifier with IANA name ES2.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO85Spanish2 MIB = 61
+
+ // ISO86Hungarian is the MIB identifier with IANA name MSZ_7795.3.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO86Hungarian MIB = 62
+
+ // ISO87JISX0208 is the MIB identifier with IANA name JIS_C6226-1983.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO87JISX0208 MIB = 63
+
+ // ISO88Greek7 is the MIB identifier with IANA name greek7.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO88Greek7 MIB = 64
+
+ // ISO89ASMO449 is the MIB identifier with IANA name ASMO_449.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO89ASMO449 MIB = 65
+
+ // ISO90 is the MIB identifier with IANA name iso-ir-90.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO90 MIB = 66
+
+ // ISO91JISC62291984a is the MIB identifier with IANA name JIS_C6229-1984-a.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO91JISC62291984a MIB = 67
+
+ // ISO92JISC62991984b is the MIB identifier with IANA name JIS_C6229-1984-b.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO92JISC62991984b MIB = 68
+
+ // ISO93JIS62291984badd is the MIB identifier with IANA name JIS_C6229-1984-b-add.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO93JIS62291984badd MIB = 69
+
+ // ISO94JIS62291984hand is the MIB identifier with IANA name JIS_C6229-1984-hand.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO94JIS62291984hand MIB = 70
+
+ // ISO95JIS62291984handadd is the MIB identifier with IANA name JIS_C6229-1984-hand-add.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO95JIS62291984handadd MIB = 71
+
+ // ISO96JISC62291984kana is the MIB identifier with IANA name JIS_C6229-1984-kana.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO96JISC62291984kana MIB = 72
+
+ // ISO2033 is the MIB identifier with IANA name ISO_2033-1983.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO2033 MIB = 73
+
+ // ISO99NAPLPS is the MIB identifier with IANA name ANSI_X3.110-1983.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO99NAPLPS MIB = 74
+
+ // ISO102T617bit is the MIB identifier with IANA name T.61-7bit.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO102T617bit MIB = 75
+
+ // ISO103T618bit is the MIB identifier with IANA name T.61-8bit.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO103T618bit MIB = 76
+
+ // ISO111ECMACyrillic is the MIB identifier with IANA name ECMA-cyrillic.
+ //
+ // ISO registry
+ // (formerly ECMA
+ // registry )
+ ISO111ECMACyrillic MIB = 77
+
+ // ISO121Canadian1 is the MIB identifier with IANA name CSA_Z243.4-1985-1.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO121Canadian1 MIB = 78
+
+ // ISO122Canadian2 is the MIB identifier with IANA name CSA_Z243.4-1985-2.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO122Canadian2 MIB = 79
+
+ // ISO123CSAZ24341985gr is the MIB identifier with IANA name CSA_Z243.4-1985-gr.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO123CSAZ24341985gr MIB = 80
+
+ // ISO88596E is the MIB identifier with IANA name ISO_8859-6-E (MIME: ISO-8859-6-E).
+ //
+ // rfc1556
+ // Reference: RFC1556
+ ISO88596E MIB = 81
+
+ // ISO88596I is the MIB identifier with IANA name ISO_8859-6-I (MIME: ISO-8859-6-I).
+ //
+ // rfc1556
+ // Reference: RFC1556
+ ISO88596I MIB = 82
+
+ // ISO128T101G2 is the MIB identifier with IANA name T.101-G2.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO128T101G2 MIB = 83
+
+ // ISO88598E is the MIB identifier with IANA name ISO_8859-8-E (MIME: ISO-8859-8-E).
+ //
+ // rfc1556
+ // Reference: RFC1556
+ ISO88598E MIB = 84
+
+ // ISO88598I is the MIB identifier with IANA name ISO_8859-8-I (MIME: ISO-8859-8-I).
+ //
+ // rfc1556
+ // Reference: RFC1556
+ ISO88598I MIB = 85
+
+ // ISO139CSN369103 is the MIB identifier with IANA name CSN_369103.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO139CSN369103 MIB = 86
+
+ // ISO141JUSIB1002 is the MIB identifier with IANA name JUS_I.B1.002.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO141JUSIB1002 MIB = 87
+
+ // ISO143IECP271 is the MIB identifier with IANA name IEC_P27-1.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO143IECP271 MIB = 88
+
+ // ISO146Serbian is the MIB identifier with IANA name JUS_I.B1.003-serb.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO146Serbian MIB = 89
+
+ // ISO147Macedonian is the MIB identifier with IANA name JUS_I.B1.003-mac.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO147Macedonian MIB = 90
+
+ // ISO150GreekCCITT is the MIB identifier with IANA name greek-ccitt.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO150GreekCCITT MIB = 91
+
+ // ISO151Cuba is the MIB identifier with IANA name NC_NC00-10:81.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO151Cuba MIB = 92
+
+ // ISO6937Add is the MIB identifier with IANA name ISO_6937-2-25.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO6937Add MIB = 93
+
+ // ISO153GOST1976874 is the MIB identifier with IANA name GOST_19768-74.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO153GOST1976874 MIB = 94
+
+ // ISO8859Supp is the MIB identifier with IANA name ISO_8859-supp.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO8859Supp MIB = 95
+
+ // ISO10367Box is the MIB identifier with IANA name ISO_10367-box.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO10367Box MIB = 96
+
+ // ISO158Lap is the MIB identifier with IANA name latin-lap.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO158Lap MIB = 97
+
+ // ISO159JISX02121990 is the MIB identifier with IANA name JIS_X0212-1990.
+ //
+ // ISO-IR: International Register of Escape Sequences
+ // Note: The current registration authority is IPSJ/ITSCJ, Japan.
+ // Reference: RFC1345
+ ISO159JISX02121990 MIB = 98
+
+ // ISO646Danish is the MIB identifier with IANA name DS_2089.
+ //
+ // Danish Standard, DS 2089, February 1974
+ // Reference: RFC1345
+ ISO646Danish MIB = 99
+
+ // USDK is the MIB identifier with IANA name us-dk.
+ //
+ // Reference: RFC1345
+ USDK MIB = 100
+
+ // DKUS is the MIB identifier with IANA name dk-us.
+ //
+ // Reference: RFC1345
+ DKUS MIB = 101
+
+ // KSC5636 is the MIB identifier with IANA name KSC5636.
+ //
+ // Reference: RFC1345
+ KSC5636 MIB = 102
+
+ // Unicode11UTF7 is the MIB identifier with IANA name UNICODE-1-1-UTF-7.
+ //
+ // rfc1642
+ // Reference: RFC1642
+ Unicode11UTF7 MIB = 103
+
+ // ISO2022CN is the MIB identifier with IANA name ISO-2022-CN.
+ //
+ // rfc1922
+ // Reference: RFC1922
+ ISO2022CN MIB = 104
+
+ // ISO2022CNEXT is the MIB identifier with IANA name ISO-2022-CN-EXT.
+ //
+ // rfc1922
+ // Reference: RFC1922
+ ISO2022CNEXT MIB = 105
+
+ // UTF8 is the MIB identifier with IANA name UTF-8.
+ //
+ // rfc3629
+ // Reference: RFC3629
+ UTF8 MIB = 106
+
+ // ISO885913 is the MIB identifier with IANA name ISO-8859-13.
+ //
+ // ISO See http://www.iana.org/assignments/charset-reg/ISO-8859-13 http://www.iana.org/assignments/charset-reg/ISO-8859-13
+ ISO885913 MIB = 109
+
+ // ISO885914 is the MIB identifier with IANA name ISO-8859-14.
+ //
+ // ISO See http://www.iana.org/assignments/charset-reg/ISO-8859-14
+ ISO885914 MIB = 110
+
+ // ISO885915 is the MIB identifier with IANA name ISO-8859-15.
+ //
+ // ISO
+ // Please see: http://www.iana.org/assignments/charset-reg/ISO-8859-15
+ ISO885915 MIB = 111
+
+ // ISO885916 is the MIB identifier with IANA name ISO-8859-16.
+ //
+ // ISO
+ ISO885916 MIB = 112
+
+ // GBK is the MIB identifier with IANA name GBK.
+ //
+ // Chinese IT Standardization Technical Committee
+ // Please see: http://www.iana.org/assignments/charset-reg/GBK
+ GBK MIB = 113
+
+ // GB18030 is the MIB identifier with IANA name GB18030.
+ //
+ // Chinese IT Standardization Technical Committee
+ // Please see: http://www.iana.org/assignments/charset-reg/GB18030
+ GB18030 MIB = 114
+
+ // OSDEBCDICDF0415 is the MIB identifier with IANA name OSD_EBCDIC_DF04_15.
+ //
+ // Fujitsu-Siemens standard mainframe EBCDIC encoding
+ // Please see: http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-15
+ OSDEBCDICDF0415 MIB = 115
+
+ // OSDEBCDICDF03IRV is the MIB identifier with IANA name OSD_EBCDIC_DF03_IRV.
+ //
+ // Fujitsu-Siemens standard mainframe EBCDIC encoding
+ // Please see: http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF03-IRV
+ OSDEBCDICDF03IRV MIB = 116
+
+ // OSDEBCDICDF041 is the MIB identifier with IANA name OSD_EBCDIC_DF04_1.
+ //
+ // Fujitsu-Siemens standard mainframe EBCDIC encoding
+ // Please see: http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-1
+ OSDEBCDICDF041 MIB = 117
+
+ // ISO115481 is the MIB identifier with IANA name ISO-11548-1.
+ //
+ // See http://www.iana.org/assignments/charset-reg/ISO-11548-1
+ ISO115481 MIB = 118
+
+ // KZ1048 is the MIB identifier with IANA name KZ-1048.
+ //
+ // See http://www.iana.org/assignments/charset-reg/KZ-1048
+ KZ1048 MIB = 119
+
+ // Unicode is the MIB identifier with IANA name ISO-10646-UCS-2.
+ //
+ // the 2-octet Basic Multilingual Plane, aka Unicode
+ // this needs to specify network byte order: the standard
+ // does not specify (it is a 16-bit integer space)
+ Unicode MIB = 1000
+
+ // UCS4 is the MIB identifier with IANA name ISO-10646-UCS-4.
+ //
+ // the full code space. (same comment about byte order,
+ // these are 31-bit numbers.
+ UCS4 MIB = 1001
+
+ // UnicodeASCII is the MIB identifier with IANA name ISO-10646-UCS-Basic.
+ //
+ // ASCII subset of Unicode. Basic Latin = collection 1
+ // See ISO 10646, Appendix A
+ UnicodeASCII MIB = 1002
+
+ // UnicodeLatin1 is the MIB identifier with IANA name ISO-10646-Unicode-Latin1.
+ //
+ // ISO Latin-1 subset of Unicode. Basic Latin and Latin-1
+ // Supplement = collections 1 and 2. See ISO 10646,
+ // Appendix A. See rfc1815 .
+ UnicodeLatin1 MIB = 1003
+
+ // UnicodeJapanese is the MIB identifier with IANA name ISO-10646-J-1.
+ //
+ // ISO 10646 Japanese, see rfc1815 .
+ UnicodeJapanese MIB = 1004
+
+ // UnicodeIBM1261 is the MIB identifier with IANA name ISO-Unicode-IBM-1261.
+ //
+ // IBM Latin-2, -3, -5, Extended Presentation Set, GCSGID: 1261
+ UnicodeIBM1261 MIB = 1005
+
+ // UnicodeIBM1268 is the MIB identifier with IANA name ISO-Unicode-IBM-1268.
+ //
+ // IBM Latin-4 Extended Presentation Set, GCSGID: 1268
+ UnicodeIBM1268 MIB = 1006
+
+ // UnicodeIBM1276 is the MIB identifier with IANA name ISO-Unicode-IBM-1276.
+ //
+ // IBM Cyrillic Greek Extended Presentation Set, GCSGID: 1276
+ UnicodeIBM1276 MIB = 1007
+
+ // UnicodeIBM1264 is the MIB identifier with IANA name ISO-Unicode-IBM-1264.
+ //
+ // IBM Arabic Presentation Set, GCSGID: 1264
+ UnicodeIBM1264 MIB = 1008
+
+ // UnicodeIBM1265 is the MIB identifier with IANA name ISO-Unicode-IBM-1265.
+ //
+ // IBM Hebrew Presentation Set, GCSGID: 1265
+ UnicodeIBM1265 MIB = 1009
+
+ // Unicode11 is the MIB identifier with IANA name UNICODE-1-1.
+ //
+ // rfc1641
+ // Reference: RFC1641
+ Unicode11 MIB = 1010
+
+ // SCSU is the MIB identifier with IANA name SCSU.
+ //
+ // SCSU See http://www.iana.org/assignments/charset-reg/SCSU
+ SCSU MIB = 1011
+
+ // UTF7 is the MIB identifier with IANA name UTF-7.
+ //
+ // rfc2152
+ // Reference: RFC2152
+ UTF7 MIB = 1012
+
+ // UTF16BE is the MIB identifier with IANA name UTF-16BE.
+ //
+ // rfc2781
+ // Reference: RFC2781
+ UTF16BE MIB = 1013
+
+ // UTF16LE is the MIB identifier with IANA name UTF-16LE.
+ //
+ // rfc2781
+ // Reference: RFC2781
+ UTF16LE MIB = 1014
+
+ // UTF16 is the MIB identifier with IANA name UTF-16.
+ //
+ // rfc2781
+ // Reference: RFC2781
+ UTF16 MIB = 1015
+
+ // CESU8 is the MIB identifier with IANA name CESU-8.
+ //
+ // https://www.unicode.org/unicode/reports/tr26
+ CESU8 MIB = 1016
+
+ // UTF32 is the MIB identifier with IANA name UTF-32.
+ //
+ // https://www.unicode.org/unicode/reports/tr19/
+ UTF32 MIB = 1017
+
+ // UTF32BE is the MIB identifier with IANA name UTF-32BE.
+ //
+ // https://www.unicode.org/unicode/reports/tr19/
+ UTF32BE MIB = 1018
+
+ // UTF32LE is the MIB identifier with IANA name UTF-32LE.
+ //
+ // https://www.unicode.org/unicode/reports/tr19/
+ UTF32LE MIB = 1019
+
+ // BOCU1 is the MIB identifier with IANA name BOCU-1.
+ //
+ // https://www.unicode.org/notes/tn6/
+ BOCU1 MIB = 1020
+
+ // Windows30Latin1 is the MIB identifier with IANA name ISO-8859-1-Windows-3.0-Latin-1.
+ //
+ // Extended ISO 8859-1 Latin-1 for Windows 3.0.
+ // PCL Symbol Set id: 9U
+ Windows30Latin1 MIB = 2000
+
+ // Windows31Latin1 is the MIB identifier with IANA name ISO-8859-1-Windows-3.1-Latin-1.
+ //
+ // Extended ISO 8859-1 Latin-1 for Windows 3.1.
+ // PCL Symbol Set id: 19U
+ Windows31Latin1 MIB = 2001
+
+ // Windows31Latin2 is the MIB identifier with IANA name ISO-8859-2-Windows-Latin-2.
+ //
+ // Extended ISO 8859-2. Latin-2 for Windows 3.1.
+ // PCL Symbol Set id: 9E
+ Windows31Latin2 MIB = 2002
+
+ // Windows31Latin5 is the MIB identifier with IANA name ISO-8859-9-Windows-Latin-5.
+ //
+ // Extended ISO 8859-9. Latin-5 for Windows 3.1
+ // PCL Symbol Set id: 5T
+ Windows31Latin5 MIB = 2003
+
+ // HPRoman8 is the MIB identifier with IANA name hp-roman8.
+ //
+ // LaserJet IIP Printer User's Manual,
+ // HP part no 33471-90901, Hewlet-Packard, June 1989.
+ // Reference: RFC1345
+ HPRoman8 MIB = 2004
+
+ // AdobeStandardEncoding is the MIB identifier with IANA name Adobe-Standard-Encoding.
+ //
+ // PostScript Language Reference Manual
+ // PCL Symbol Set id: 10J
+ AdobeStandardEncoding MIB = 2005
+
+ // VenturaUS is the MIB identifier with IANA name Ventura-US.
+ //
+ // Ventura US. ASCII plus characters typically used in
+ // publishing, like pilcrow, copyright, registered, trade mark,
+ // section, dagger, and double dagger in the range A0 (hex)
+ // to FF (hex).
+ // PCL Symbol Set id: 14J
+ VenturaUS MIB = 2006
+
+ // VenturaInternational is the MIB identifier with IANA name Ventura-International.
+ //
+ // Ventura International. ASCII plus coded characters similar
+ // to Roman8.
+ // PCL Symbol Set id: 13J
+ VenturaInternational MIB = 2007
+
+ // DECMCS is the MIB identifier with IANA name DEC-MCS.
+ //
+ // VAX/VMS User's Manual,
+ // Order Number: AI-Y517A-TE, April 1986.
+ // Reference: RFC1345
+ DECMCS MIB = 2008
+
+ // PC850Multilingual is the MIB identifier with IANA name IBM850.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ PC850Multilingual MIB = 2009
+
+ // PC8DanishNorwegian is the MIB identifier with IANA name PC8-Danish-Norwegian.
+ //
+ // PC Danish Norwegian
+ // 8-bit PC set for Danish Norwegian
+ // PCL Symbol Set id: 11U
+ PC8DanishNorwegian MIB = 2012
+
+ // PC862LatinHebrew is the MIB identifier with IANA name IBM862.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ PC862LatinHebrew MIB = 2013
+
+ // PC8Turkish is the MIB identifier with IANA name PC8-Turkish.
+ //
+ // PC Latin Turkish. PCL Symbol Set id: 9T
+ PC8Turkish MIB = 2014
+
+ // IBMSymbols is the MIB identifier with IANA name IBM-Symbols.
+ //
+ // Presentation Set, CPGID: 259
+ IBMSymbols MIB = 2015
+
+ // IBMThai is the MIB identifier with IANA name IBM-Thai.
+ //
+ // Presentation Set, CPGID: 838
+ IBMThai MIB = 2016
+
+ // HPLegal is the MIB identifier with IANA name HP-Legal.
+ //
+ // PCL 5 Comparison Guide, Hewlett-Packard,
+ // HP part number 5961-0510, October 1992
+ // PCL Symbol Set id: 1U
+ HPLegal MIB = 2017
+
+ // HPPiFont is the MIB identifier with IANA name HP-Pi-font.
+ //
+ // PCL 5 Comparison Guide, Hewlett-Packard,
+ // HP part number 5961-0510, October 1992
+ // PCL Symbol Set id: 15U
+ HPPiFont MIB = 2018
+
+ // HPMath8 is the MIB identifier with IANA name HP-Math8.
+ //
+ // PCL 5 Comparison Guide, Hewlett-Packard,
+ // HP part number 5961-0510, October 1992
+ // PCL Symbol Set id: 8M
+ HPMath8 MIB = 2019
+
+ // HPPSMath is the MIB identifier with IANA name Adobe-Symbol-Encoding.
+ //
+ // PostScript Language Reference Manual
+ // PCL Symbol Set id: 5M
+ HPPSMath MIB = 2020
+
+ // HPDesktop is the MIB identifier with IANA name HP-DeskTop.
+ //
+ // PCL 5 Comparison Guide, Hewlett-Packard,
+ // HP part number 5961-0510, October 1992
+ // PCL Symbol Set id: 7J
+ HPDesktop MIB = 2021
+
+ // VenturaMath is the MIB identifier with IANA name Ventura-Math.
+ //
+ // PCL 5 Comparison Guide, Hewlett-Packard,
+ // HP part number 5961-0510, October 1992
+ // PCL Symbol Set id: 6M
+ VenturaMath MIB = 2022
+
+ // MicrosoftPublishing is the MIB identifier with IANA name Microsoft-Publishing.
+ //
+ // PCL 5 Comparison Guide, Hewlett-Packard,
+ // HP part number 5961-0510, October 1992
+ // PCL Symbol Set id: 6J
+ MicrosoftPublishing MIB = 2023
+
+ // Windows31J is the MIB identifier with IANA name Windows-31J.
+ //
+ // Windows Japanese. A further extension of Shift_JIS
+ // to include NEC special characters (Row 13), NEC
+ // selection of IBM extensions (Rows 89 to 92), and IBM
+ // extensions (Rows 115 to 119). The CCS's are
+ // JIS X0201:1997, JIS X0208:1997, and these extensions.
+ // This charset can be used for the top-level media type "text",
+ // but it is of limited or specialized use (see rfc2278 ).
+ // PCL Symbol Set id: 19K
+ Windows31J MIB = 2024
+
+ // GB2312 is the MIB identifier with IANA name GB2312 (MIME: GB2312).
+ //
+ // Chinese for People's Republic of China (PRC) mixed one byte,
+ // two byte set:
+ // 20-7E = one byte ASCII
+ // A1-FE = two byte PRC Kanji
+ // See GB 2312-80
+ // PCL Symbol Set Id: 18C
+ GB2312 MIB = 2025
+
+ // Big5 is the MIB identifier with IANA name Big5 (MIME: Big5).
+ //
+ // Chinese for Taiwan Multi-byte set.
+ // PCL Symbol Set Id: 18T
+ Big5 MIB = 2026
+
+ // Macintosh is the MIB identifier with IANA name macintosh.
+ //
+ // The Unicode Standard ver1.0, ISBN 0-201-56788-1, Oct 1991
+ // Reference: RFC1345
+ Macintosh MIB = 2027
+
+ // IBM037 is the MIB identifier with IANA name IBM037.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM037 MIB = 2028
+
+ // IBM038 is the MIB identifier with IANA name IBM038.
+ //
+ // IBM 3174 Character Set Ref, GA27-3831-02, March 1990
+ // Reference: RFC1345
+ IBM038 MIB = 2029
+
+ // IBM273 is the MIB identifier with IANA name IBM273.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM273 MIB = 2030
+
+ // IBM274 is the MIB identifier with IANA name IBM274.
+ //
+ // IBM 3174 Character Set Ref, GA27-3831-02, March 1990
+ // Reference: RFC1345
+ IBM274 MIB = 2031
+
+ // IBM275 is the MIB identifier with IANA name IBM275.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM275 MIB = 2032
+
+ // IBM277 is the MIB identifier with IANA name IBM277.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM277 MIB = 2033
+
+ // IBM278 is the MIB identifier with IANA name IBM278.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM278 MIB = 2034
+
+ // IBM280 is the MIB identifier with IANA name IBM280.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM280 MIB = 2035
+
+ // IBM281 is the MIB identifier with IANA name IBM281.
+ //
+ // IBM 3174 Character Set Ref, GA27-3831-02, March 1990
+ // Reference: RFC1345
+ IBM281 MIB = 2036
+
+ // IBM284 is the MIB identifier with IANA name IBM284.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM284 MIB = 2037
+
+ // IBM285 is the MIB identifier with IANA name IBM285.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM285 MIB = 2038
+
+ // IBM290 is the MIB identifier with IANA name IBM290.
+ //
+ // IBM 3174 Character Set Ref, GA27-3831-02, March 1990
+ // Reference: RFC1345
+ IBM290 MIB = 2039
+
+ // IBM297 is the MIB identifier with IANA name IBM297.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM297 MIB = 2040
+
+ // IBM420 is the MIB identifier with IANA name IBM420.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990,
+ // IBM NLS RM p 11-11
+ // Reference: RFC1345
+ IBM420 MIB = 2041
+
+ // IBM423 is the MIB identifier with IANA name IBM423.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM423 MIB = 2042
+
+ // IBM424 is the MIB identifier with IANA name IBM424.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM424 MIB = 2043
+
+ // PC8CodePage437 is the MIB identifier with IANA name IBM437.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ PC8CodePage437 MIB = 2011
+
+ // IBM500 is the MIB identifier with IANA name IBM500.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM500 MIB = 2044
+
+ // IBM851 is the MIB identifier with IANA name IBM851.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM851 MIB = 2045
+
+ // PCp852 is the MIB identifier with IANA name IBM852.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ PCp852 MIB = 2010
+
+ // IBM855 is the MIB identifier with IANA name IBM855.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM855 MIB = 2046
+
+ // IBM857 is the MIB identifier with IANA name IBM857.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM857 MIB = 2047
+
+ // IBM860 is the MIB identifier with IANA name IBM860.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM860 MIB = 2048
+
+ // IBM861 is the MIB identifier with IANA name IBM861.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM861 MIB = 2049
+
+ // IBM863 is the MIB identifier with IANA name IBM863.
+ //
+ // IBM Keyboard layouts and code pages, PN 07G4586 June 1991
+ // Reference: RFC1345
+ IBM863 MIB = 2050
+
+ // IBM864 is the MIB identifier with IANA name IBM864.
+ //
+ // IBM Keyboard layouts and code pages, PN 07G4586 June 1991
+ // Reference: RFC1345
+ IBM864 MIB = 2051
+
+ // IBM865 is the MIB identifier with IANA name IBM865.
+ //
+ // IBM DOS 3.3 Ref (Abridged), 94X9575 (Feb 1987)
+ // Reference: RFC1345
+ IBM865 MIB = 2052
+
+ // IBM868 is the MIB identifier with IANA name IBM868.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM868 MIB = 2053
+
+ // IBM869 is the MIB identifier with IANA name IBM869.
+ //
+ // IBM Keyboard layouts and code pages, PN 07G4586 June 1991
+ // Reference: RFC1345
+ IBM869 MIB = 2054
+
+ // IBM870 is the MIB identifier with IANA name IBM870.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM870 MIB = 2055
+
+ // IBM871 is the MIB identifier with IANA name IBM871.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM871 MIB = 2056
+
+ // IBM880 is the MIB identifier with IANA name IBM880.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM880 MIB = 2057
+
+ // IBM891 is the MIB identifier with IANA name IBM891.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM891 MIB = 2058
+
+ // IBM903 is the MIB identifier with IANA name IBM903.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM903 MIB = 2059
+
+ // IBBM904 is the MIB identifier with IANA name IBM904.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBBM904 MIB = 2060
+
+ // IBM905 is the MIB identifier with IANA name IBM905.
+ //
+ // IBM 3174 Character Set Ref, GA27-3831-02, March 1990
+ // Reference: RFC1345
+ IBM905 MIB = 2061
+
+ // IBM918 is the MIB identifier with IANA name IBM918.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM918 MIB = 2062
+
+ // IBM1026 is the MIB identifier with IANA name IBM1026.
+ //
+ // IBM NLS RM Vol2 SE09-8002-01, March 1990
+ // Reference: RFC1345
+ IBM1026 MIB = 2063
+
+ // IBMEBCDICATDE is the MIB identifier with IANA name EBCDIC-AT-DE.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ IBMEBCDICATDE MIB = 2064
+
+ // EBCDICATDEA is the MIB identifier with IANA name EBCDIC-AT-DE-A.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICATDEA MIB = 2065
+
+ // EBCDICCAFR is the MIB identifier with IANA name EBCDIC-CA-FR.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICCAFR MIB = 2066
+
+ // EBCDICDKNO is the MIB identifier with IANA name EBCDIC-DK-NO.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICDKNO MIB = 2067
+
+ // EBCDICDKNOA is the MIB identifier with IANA name EBCDIC-DK-NO-A.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICDKNOA MIB = 2068
+
+ // EBCDICFISE is the MIB identifier with IANA name EBCDIC-FI-SE.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICFISE MIB = 2069
+
+ // EBCDICFISEA is the MIB identifier with IANA name EBCDIC-FI-SE-A.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICFISEA MIB = 2070
+
+ // EBCDICFR is the MIB identifier with IANA name EBCDIC-FR.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICFR MIB = 2071
+
+ // EBCDICIT is the MIB identifier with IANA name EBCDIC-IT.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICIT MIB = 2072
+
+ // EBCDICPT is the MIB identifier with IANA name EBCDIC-PT.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICPT MIB = 2073
+
+ // EBCDICES is the MIB identifier with IANA name EBCDIC-ES.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICES MIB = 2074
+
+ // EBCDICESA is the MIB identifier with IANA name EBCDIC-ES-A.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICESA MIB = 2075
+
+ // EBCDICESS is the MIB identifier with IANA name EBCDIC-ES-S.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICESS MIB = 2076
+
+ // EBCDICUK is the MIB identifier with IANA name EBCDIC-UK.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICUK MIB = 2077
+
+ // EBCDICUS is the MIB identifier with IANA name EBCDIC-US.
+ //
+ // IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
+ // Reference: RFC1345
+ EBCDICUS MIB = 2078
+
+ // Unknown8BiT is the MIB identifier with IANA name UNKNOWN-8BIT.
+ //
+ // Reference: RFC1428
+ Unknown8BiT MIB = 2079
+
+ // Mnemonic is the MIB identifier with IANA name MNEMONIC.
+ //
+ // rfc1345 , also known as "mnemonic+ascii+38"
+ // Reference: RFC1345
+ Mnemonic MIB = 2080
+
+ // Mnem is the MIB identifier with IANA name MNEM.
+ //
+ // rfc1345 , also known as "mnemonic+ascii+8200"
+ // Reference: RFC1345
+ Mnem MIB = 2081
+
+ // VISCII is the MIB identifier with IANA name VISCII.
+ //
+ // rfc1456
+ // Reference: RFC1456
+ VISCII MIB = 2082
+
+ // VIQR is the MIB identifier with IANA name VIQR.
+ //
+ // rfc1456
+ // Reference: RFC1456
+ VIQR MIB = 2083
+
+ // KOI8R is the MIB identifier with IANA name KOI8-R (MIME: KOI8-R).
+ //
+ // rfc1489 , based on GOST-19768-74, ISO-6937/8,
+ // INIS-Cyrillic, ISO-5427.
+ // Reference: RFC1489
+ KOI8R MIB = 2084
+
+ // HZGB2312 is the MIB identifier with IANA name HZ-GB-2312.
+ //
+ // rfc1842 , rfc1843 rfc1843 rfc1842
+ HZGB2312 MIB = 2085
+
+ // IBM866 is the MIB identifier with IANA name IBM866.
+ //
+ // IBM NLDG Volume 2 (SE09-8002-03) August 1994
+ IBM866 MIB = 2086
+
+ // PC775Baltic is the MIB identifier with IANA name IBM775.
+ //
+ // HP PCL 5 Comparison Guide (P/N 5021-0329) pp B-13, 1996
+ PC775Baltic MIB = 2087
+
+ // KOI8U is the MIB identifier with IANA name KOI8-U.
+ //
+ // rfc2319
+ // Reference: RFC2319
+ KOI8U MIB = 2088
+
+ // IBM00858 is the MIB identifier with IANA name IBM00858.
+ //
+ // IBM See http://www.iana.org/assignments/charset-reg/IBM00858
+ IBM00858 MIB = 2089
+
+ // IBM00924 is the MIB identifier with IANA name IBM00924.
+ //
+ // IBM See http://www.iana.org/assignments/charset-reg/IBM00924
+ IBM00924 MIB = 2090
+
+ // IBM01140 is the MIB identifier with IANA name IBM01140.
+ //
+ // IBM See http://www.iana.org/assignments/charset-reg/IBM01140
+ IBM01140 MIB = 2091
+
+ // IBM01141 is the MIB identifier with IANA name IBM01141.
+ //
+ // IBM See http://www.iana.org/assignments/charset-reg/IBM01141
+ IBM01141 MIB = 2092
+
+ // IBM01142 is the MIB identifier with IANA name IBM01142.
+ //
+ // IBM See http://www.iana.org/assignments/charset-reg/IBM01142
+ IBM01142 MIB = 2093
+
+ // IBM01143 is the MIB identifier with IANA name IBM01143.
+ //
+ // IBM See http://www.iana.org/assignments/charset-reg/IBM01143
+ IBM01143 MIB = 2094
+
+ // IBM01144 is the MIB identifier with IANA name IBM01144.
+ //
+ // IBM See http://www.iana.org/assignments/charset-reg/IBM01144
+ IBM01144 MIB = 2095
+
+ // IBM01145 is the MIB identifier with IANA name IBM01145.
+ //
+ // IBM See http://www.iana.org/assignments/charset-reg/IBM01145
+ IBM01145 MIB = 2096
+
+ // IBM01146 is the MIB identifier with IANA name IBM01146.
+ //
+ // IBM See http://www.iana.org/assignments/charset-reg/IBM01146
+ IBM01146 MIB = 2097
+
+ // IBM01147 is the MIB identifier with IANA name IBM01147.
+ //
+ // IBM See http://www.iana.org/assignments/charset-reg/IBM01147
+ IBM01147 MIB = 2098
+
+ // IBM01148 is the MIB identifier with IANA name IBM01148.
+ //
+ // IBM See http://www.iana.org/assignments/charset-reg/IBM01148
+ IBM01148 MIB = 2099
+
+ // IBM01149 is the MIB identifier with IANA name IBM01149.
+ //
+ // IBM See http://www.iana.org/assignments/charset-reg/IBM01149
+ IBM01149 MIB = 2100
+
+ // Big5HKSCS is the MIB identifier with IANA name Big5-HKSCS.
+ //
+ // See http://www.iana.org/assignments/charset-reg/Big5-HKSCS
+ Big5HKSCS MIB = 2101
+
+ // IBM1047 is the MIB identifier with IANA name IBM1047.
+ //
+ // IBM1047 (EBCDIC Latin 1/Open Systems) http://www-1.ibm.com/servers/eserver/iseries/software/globalization/pdf/cp01047z.pdf
+ IBM1047 MIB = 2102
+
+ // PTCP154 is the MIB identifier with IANA name PTCP154.
+ //
+ // See http://www.iana.org/assignments/charset-reg/PTCP154
+ PTCP154 MIB = 2103
+
+ // Amiga1251 is the MIB identifier with IANA name Amiga-1251.
+ //
+ // See http://www.amiga.ultranet.ru/Amiga-1251.html
+ Amiga1251 MIB = 2104
+
+ // KOI7switched is the MIB identifier with IANA name KOI7-switched.
+ //
+ // See http://www.iana.org/assignments/charset-reg/KOI7-switched
+ KOI7switched MIB = 2105
+
+ // BRF is the MIB identifier with IANA name BRF.
+ //
+ // See http://www.iana.org/assignments/charset-reg/BRF
+ BRF MIB = 2106
+
+ // TSCII is the MIB identifier with IANA name TSCII.
+ //
+ // See http://www.iana.org/assignments/charset-reg/TSCII
+ TSCII MIB = 2107
+
+ // CP51932 is the MIB identifier with IANA name CP51932.
+ //
+ // See http://www.iana.org/assignments/charset-reg/CP51932
+ CP51932 MIB = 2108
+
+ // Windows874 is the MIB identifier with IANA name windows-874.
+ //
+ // See http://www.iana.org/assignments/charset-reg/windows-874
+ Windows874 MIB = 2109
+
+ // Windows1250 is the MIB identifier with IANA name windows-1250.
+ //
+ // Microsoft http://www.iana.org/assignments/charset-reg/windows-1250
+ Windows1250 MIB = 2250
+
+ // Windows1251 is the MIB identifier with IANA name windows-1251.
+ //
+ // Microsoft http://www.iana.org/assignments/charset-reg/windows-1251
+ Windows1251 MIB = 2251
+
+ // Windows1252 is the MIB identifier with IANA name windows-1252.
+ //
+ // Microsoft http://www.iana.org/assignments/charset-reg/windows-1252
+ Windows1252 MIB = 2252
+
+ // Windows1253 is the MIB identifier with IANA name windows-1253.
+ //
+ // Microsoft http://www.iana.org/assignments/charset-reg/windows-1253
+ Windows1253 MIB = 2253
+
+ // Windows1254 is the MIB identifier with IANA name windows-1254.
+ //
+ // Microsoft http://www.iana.org/assignments/charset-reg/windows-1254
+ Windows1254 MIB = 2254
+
+ // Windows1255 is the MIB identifier with IANA name windows-1255.
+ //
+ // Microsoft http://www.iana.org/assignments/charset-reg/windows-1255
+ Windows1255 MIB = 2255
+
+ // Windows1256 is the MIB identifier with IANA name windows-1256.
+ //
+ // Microsoft http://www.iana.org/assignments/charset-reg/windows-1256
+ Windows1256 MIB = 2256
+
+ // Windows1257 is the MIB identifier with IANA name windows-1257.
+ //
+ // Microsoft http://www.iana.org/assignments/charset-reg/windows-1257
+ Windows1257 MIB = 2257
+
+ // Windows1258 is the MIB identifier with IANA name windows-1258.
+ //
+ // Microsoft http://www.iana.org/assignments/charset-reg/windows-1258
+ Windows1258 MIB = 2258
+
+ // TIS620 is the MIB identifier with IANA name TIS-620.
+ //
+ // Thai Industrial Standards Institute (TISI)
+ TIS620 MIB = 2259
+
+ // CP50220 is the MIB identifier with IANA name CP50220.
+ //
+ // See http://www.iana.org/assignments/charset-reg/CP50220
+ CP50220 MIB = 2260
+)
diff --git a/vendor/golang.org/x/text/encoding/internal/internal.go b/vendor/golang.org/x/text/encoding/internal/internal.go
new file mode 100644
index 000000000..75a5fd165
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/internal/internal.go
@@ -0,0 +1,75 @@
+// 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 code that is shared among encoding implementations.
+package internal
+
+import (
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/transform"
+)
+
+// Encoding is an implementation of the Encoding interface that adds the String
+// and ID methods to an existing encoding.
+type Encoding struct {
+ encoding.Encoding
+ Name string
+ MIB identifier.MIB
+}
+
+// _ verifies that Encoding implements identifier.Interface.
+var _ identifier.Interface = (*Encoding)(nil)
+
+func (e *Encoding) String() string {
+ return e.Name
+}
+
+func (e *Encoding) ID() (mib identifier.MIB, other string) {
+ return e.MIB, ""
+}
+
+// SimpleEncoding is an Encoding that combines two Transformers.
+type SimpleEncoding struct {
+ Decoder transform.Transformer
+ Encoder transform.Transformer
+}
+
+func (e *SimpleEncoding) NewDecoder() *encoding.Decoder {
+ return &encoding.Decoder{Transformer: e.Decoder}
+}
+
+func (e *SimpleEncoding) NewEncoder() *encoding.Encoder {
+ return &encoding.Encoder{Transformer: e.Encoder}
+}
+
+// FuncEncoding is an Encoding that combines two functions returning a new
+// Transformer.
+type FuncEncoding struct {
+ Decoder func() transform.Transformer
+ Encoder func() transform.Transformer
+}
+
+func (e FuncEncoding) NewDecoder() *encoding.Decoder {
+ return &encoding.Decoder{Transformer: e.Decoder()}
+}
+
+func (e FuncEncoding) NewEncoder() *encoding.Encoder {
+ return &encoding.Encoder{Transformer: e.Encoder()}
+}
+
+// A RepertoireError indicates a rune is not in the repertoire of a destination
+// encoding. It is associated with an encoding-specific suggested replacement
+// byte.
+type RepertoireError byte
+
+// Error implements the error interrface.
+func (r RepertoireError) Error() string {
+ return "encoding: rune not supported by encoding."
+}
+
+// Replacement returns the replacement string associated with this error.
+func (r RepertoireError) Replacement() byte { return byte(r) }
+
+var ErrASCIIReplacement = RepertoireError(encoding.ASCIISub)
diff --git a/vendor/golang.org/x/text/encoding/japanese/all.go b/vendor/golang.org/x/text/encoding/japanese/all.go
new file mode 100644
index 000000000..6cfa8de45
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/japanese/all.go
@@ -0,0 +1,12 @@
+// 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 japanese
+
+import (
+ "golang.org/x/text/encoding"
+)
+
+// All is a list of all defined encodings in this package.
+var All = []encoding.Encoding{EUCJP, ISO2022JP, ShiftJIS}
diff --git a/vendor/golang.org/x/text/encoding/japanese/eucjp.go b/vendor/golang.org/x/text/encoding/japanese/eucjp.go
new file mode 100644
index 000000000..79313fa58
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/japanese/eucjp.go
@@ -0,0 +1,225 @@
+// 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 japanese
+
+import (
+ "unicode/utf8"
+
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/internal"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/transform"
+)
+
+// EUCJP is the EUC-JP encoding.
+var EUCJP encoding.Encoding = &eucJP
+
+var eucJP = internal.Encoding{
+ &internal.SimpleEncoding{eucJPDecoder{}, eucJPEncoder{}},
+ "EUC-JP",
+ identifier.EUCPkdFmtJapanese,
+}
+
+type eucJPDecoder struct{ transform.NopResetter }
+
+// See https://encoding.spec.whatwg.org/#euc-jp-decoder.
+func (eucJPDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+loop:
+ for ; nSrc < len(src); nSrc += size {
+ switch c0 := src[nSrc]; {
+ case c0 < utf8.RuneSelf:
+ r, size = rune(c0), 1
+
+ case c0 == 0x8e:
+ if nSrc+1 >= len(src) {
+ if !atEOF {
+ err = transform.ErrShortSrc
+ break loop
+ }
+ r, size = utf8.RuneError, 1
+ break
+ }
+ c1 := src[nSrc+1]
+ switch {
+ case c1 < 0xa1:
+ r, size = utf8.RuneError, 1
+ case c1 > 0xdf:
+ r, size = utf8.RuneError, 2
+ if c1 == 0xff {
+ size = 1
+ }
+ default:
+ r, size = rune(c1)+(0xff61-0xa1), 2
+ }
+ case c0 == 0x8f:
+ if nSrc+2 >= len(src) {
+ if !atEOF {
+ err = transform.ErrShortSrc
+ break loop
+ }
+ r, size = utf8.RuneError, 1
+ if p := nSrc + 1; p < len(src) && 0xa1 <= src[p] && src[p] < 0xfe {
+ size = 2
+ }
+ break
+ }
+ c1 := src[nSrc+1]
+ if c1 < 0xa1 || 0xfe < c1 {
+ r, size = utf8.RuneError, 1
+ break
+ }
+ c2 := src[nSrc+2]
+ if c2 < 0xa1 || 0xfe < c2 {
+ r, size = utf8.RuneError, 2
+ break
+ }
+ r, size = utf8.RuneError, 3
+ if i := int(c1-0xa1)*94 + int(c2-0xa1); i < len(jis0212Decode) {
+ r = rune(jis0212Decode[i])
+ if r == 0 {
+ r = utf8.RuneError
+ }
+ }
+
+ case 0xa1 <= c0 && c0 <= 0xfe:
+ if nSrc+1 >= len(src) {
+ if !atEOF {
+ err = transform.ErrShortSrc
+ break loop
+ }
+ r, size = utf8.RuneError, 1
+ break
+ }
+ c1 := src[nSrc+1]
+ if c1 < 0xa1 || 0xfe < c1 {
+ r, size = utf8.RuneError, 1
+ break
+ }
+ r, size = utf8.RuneError, 2
+ if i := int(c0-0xa1)*94 + int(c1-0xa1); i < len(jis0208Decode) {
+ r = rune(jis0208Decode[i])
+ if r == 0 {
+ r = utf8.RuneError
+ }
+ }
+
+ default:
+ r, size = utf8.RuneError, 1
+ }
+
+ if nDst+utf8.RuneLen(r) > len(dst) {
+ err = transform.ErrShortDst
+ break loop
+ }
+ nDst += utf8.EncodeRune(dst[nDst:], r)
+ }
+ return nDst, nSrc, err
+}
+
+type eucJPEncoder struct{ transform.NopResetter }
+
+func (eucJPEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+ for ; nSrc < len(src); nSrc += size {
+ r = rune(src[nSrc])
+
+ // Decode a 1-byte rune.
+ if r < utf8.RuneSelf {
+ size = 1
+
+ } else {
+ // Decode a multi-byte rune.
+ r, size = utf8.DecodeRune(src[nSrc:])
+ if size == 1 {
+ // All valid runes of size 1 (those below utf8.RuneSelf) were
+ // handled above. We have invalid UTF-8 or we haven't seen the
+ // full character yet.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+ }
+
+ // func init checks that the switch covers all tables.
+ switch {
+ case encode0Low <= r && r < encode0High:
+ if r = rune(encode0[r-encode0Low]); r != 0 {
+ goto write2or3
+ }
+ case encode1Low <= r && r < encode1High:
+ if r = rune(encode1[r-encode1Low]); r != 0 {
+ goto write2or3
+ }
+ case encode2Low <= r && r < encode2High:
+ if r = rune(encode2[r-encode2Low]); r != 0 {
+ goto write2or3
+ }
+ case encode3Low <= r && r < encode3High:
+ if r = rune(encode3[r-encode3Low]); r != 0 {
+ goto write2or3
+ }
+ case encode4Low <= r && r < encode4High:
+ if r = rune(encode4[r-encode4Low]); r != 0 {
+ goto write2or3
+ }
+ case encode5Low <= r && r < encode5High:
+ if 0xff61 <= r && r < 0xffa0 {
+ goto write2
+ }
+ if r = rune(encode5[r-encode5Low]); r != 0 {
+ goto write2or3
+ }
+ }
+ err = internal.ErrASCIIReplacement
+ break
+ }
+
+ if nDst >= len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst] = uint8(r)
+ nDst++
+ continue
+
+ write2or3:
+ if r>>tableShift == jis0208 {
+ if nDst+2 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ } else {
+ if nDst+3 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst] = 0x8f
+ nDst++
+ }
+ dst[nDst+0] = 0xa1 + uint8(r>>codeShift)&codeMask
+ dst[nDst+1] = 0xa1 + uint8(r)&codeMask
+ nDst += 2
+ continue
+
+ write2:
+ if nDst+2 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+0] = 0x8e
+ dst[nDst+1] = uint8(r - (0xff61 - 0xa1))
+ nDst += 2
+ continue
+ }
+ return nDst, nSrc, err
+}
+
+func init() {
+ // Check that the hard-coded encode switch covers all tables.
+ if numEncodeTables != 6 {
+ panic("bad numEncodeTables")
+ }
+}
diff --git a/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go b/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go
new file mode 100644
index 000000000..613226df5
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go
@@ -0,0 +1,299 @@
+// 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 japanese
+
+import (
+ "unicode/utf8"
+
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/internal"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/transform"
+)
+
+// ISO2022JP is the ISO-2022-JP encoding.
+var ISO2022JP encoding.Encoding = &iso2022JP
+
+var iso2022JP = internal.Encoding{
+ internal.FuncEncoding{iso2022JPNewDecoder, iso2022JPNewEncoder},
+ "ISO-2022-JP",
+ identifier.ISO2022JP,
+}
+
+func iso2022JPNewDecoder() transform.Transformer {
+ return new(iso2022JPDecoder)
+}
+
+func iso2022JPNewEncoder() transform.Transformer {
+ return new(iso2022JPEncoder)
+}
+
+const (
+ asciiState = iota
+ katakanaState
+ jis0208State
+ jis0212State
+)
+
+const asciiEsc = 0x1b
+
+type iso2022JPDecoder int
+
+func (d *iso2022JPDecoder) Reset() {
+ *d = asciiState
+}
+
+func (d *iso2022JPDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+ for ; nSrc < len(src); nSrc += size {
+ c0 := src[nSrc]
+ if c0 >= utf8.RuneSelf {
+ r, size = '\ufffd', 1
+ goto write
+ }
+
+ if c0 == asciiEsc {
+ if nSrc+2 >= len(src) {
+ if !atEOF {
+ return nDst, nSrc, transform.ErrShortSrc
+ }
+ // TODO: is it correct to only skip 1??
+ r, size = '\ufffd', 1
+ goto write
+ }
+ size = 3
+ c1 := src[nSrc+1]
+ c2 := src[nSrc+2]
+ switch {
+ case c1 == '$' && (c2 == '@' || c2 == 'B'): // 0x24 {0x40, 0x42}
+ *d = jis0208State
+ continue
+ case c1 == '$' && c2 == '(': // 0x24 0x28
+ if nSrc+3 >= len(src) {
+ if !atEOF {
+ return nDst, nSrc, transform.ErrShortSrc
+ }
+ r, size = '\ufffd', 1
+ goto write
+ }
+ size = 4
+ if src[nSrc+3] == 'D' {
+ *d = jis0212State
+ continue
+ }
+ case c1 == '(' && (c2 == 'B' || c2 == 'J'): // 0x28 {0x42, 0x4A}
+ *d = asciiState
+ continue
+ case c1 == '(' && c2 == 'I': // 0x28 0x49
+ *d = katakanaState
+ continue
+ }
+ r, size = '\ufffd', 1
+ goto write
+ }
+
+ switch *d {
+ case asciiState:
+ r, size = rune(c0), 1
+
+ case katakanaState:
+ if c0 < 0x21 || 0x60 <= c0 {
+ r, size = '\ufffd', 1
+ goto write
+ }
+ r, size = rune(c0)+(0xff61-0x21), 1
+
+ default:
+ if c0 == 0x0a {
+ *d = asciiState
+ r, size = rune(c0), 1
+ goto write
+ }
+ if nSrc+1 >= len(src) {
+ if !atEOF {
+ return nDst, nSrc, transform.ErrShortSrc
+ }
+ r, size = '\ufffd', 1
+ goto write
+ }
+ size = 2
+ c1 := src[nSrc+1]
+ i := int(c0-0x21)*94 + int(c1-0x21)
+ if *d == jis0208State && i < len(jis0208Decode) {
+ r = rune(jis0208Decode[i])
+ } else if *d == jis0212State && i < len(jis0212Decode) {
+ r = rune(jis0212Decode[i])
+ } else {
+ r = '\ufffd'
+ goto write
+ }
+ if r == 0 {
+ r = '\ufffd'
+ }
+ }
+
+ write:
+ if nDst+utf8.RuneLen(r) > len(dst) {
+ return nDst, nSrc, transform.ErrShortDst
+ }
+ nDst += utf8.EncodeRune(dst[nDst:], r)
+ }
+ return nDst, nSrc, err
+}
+
+type iso2022JPEncoder int
+
+func (e *iso2022JPEncoder) Reset() {
+ *e = asciiState
+}
+
+func (e *iso2022JPEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+ for ; nSrc < len(src); nSrc += size {
+ r = rune(src[nSrc])
+
+ // Decode a 1-byte rune.
+ if r < utf8.RuneSelf {
+ size = 1
+
+ } else {
+ // Decode a multi-byte rune.
+ r, size = utf8.DecodeRune(src[nSrc:])
+ if size == 1 {
+ // All valid runes of size 1 (those below utf8.RuneSelf) were
+ // handled above. We have invalid UTF-8 or we haven't seen the
+ // full character yet.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+ }
+
+ // func init checks that the switch covers all tables.
+ //
+ // http://encoding.spec.whatwg.org/#iso-2022-jp says that "the index jis0212
+ // is not used by the iso-2022-jp encoder due to lack of widespread support".
+ //
+ // TODO: do we have to special-case U+00A5 and U+203E, as per
+ // http://encoding.spec.whatwg.org/#iso-2022-jp
+ // Doing so would mean that "\u00a5" would not be preserved
+ // after an encode-decode round trip.
+ switch {
+ case encode0Low <= r && r < encode0High:
+ if r = rune(encode0[r-encode0Low]); r>>tableShift == jis0208 {
+ goto writeJIS
+ }
+ case encode1Low <= r && r < encode1High:
+ if r = rune(encode1[r-encode1Low]); r>>tableShift == jis0208 {
+ goto writeJIS
+ }
+ case encode2Low <= r && r < encode2High:
+ if r = rune(encode2[r-encode2Low]); r>>tableShift == jis0208 {
+ goto writeJIS
+ }
+ case encode3Low <= r && r < encode3High:
+ if r = rune(encode3[r-encode3Low]); r>>tableShift == jis0208 {
+ goto writeJIS
+ }
+ case encode4Low <= r && r < encode4High:
+ if r = rune(encode4[r-encode4Low]); r>>tableShift == jis0208 {
+ goto writeJIS
+ }
+ case encode5Low <= r && r < encode5High:
+ if 0xff61 <= r && r < 0xffa0 {
+ goto writeKatakana
+ }
+ if r = rune(encode5[r-encode5Low]); r>>tableShift == jis0208 {
+ goto writeJIS
+ }
+ }
+
+ // Switch back to ASCII state in case of error so that an ASCII
+ // replacement character can be written in the correct state.
+ if *e != asciiState {
+ if nDst+3 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ *e = asciiState
+ dst[nDst+0] = asciiEsc
+ dst[nDst+1] = '('
+ dst[nDst+2] = 'B'
+ nDst += 3
+ }
+ err = internal.ErrASCIIReplacement
+ break
+ }
+
+ if *e != asciiState {
+ if nDst+4 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ *e = asciiState
+ dst[nDst+0] = asciiEsc
+ dst[nDst+1] = '('
+ dst[nDst+2] = 'B'
+ nDst += 3
+ } else if nDst >= len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst] = uint8(r)
+ nDst++
+ continue
+
+ writeJIS:
+ if *e != jis0208State {
+ if nDst+5 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ *e = jis0208State
+ dst[nDst+0] = asciiEsc
+ dst[nDst+1] = '$'
+ dst[nDst+2] = 'B'
+ nDst += 3
+ } else if nDst+2 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+0] = 0x21 + uint8(r>>codeShift)&codeMask
+ dst[nDst+1] = 0x21 + uint8(r)&codeMask
+ nDst += 2
+ continue
+
+ writeKatakana:
+ if *e != katakanaState {
+ if nDst+4 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ *e = katakanaState
+ dst[nDst+0] = asciiEsc
+ dst[nDst+1] = '('
+ dst[nDst+2] = 'I'
+ nDst += 3
+ } else if nDst >= len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst] = uint8(r - (0xff61 - 0x21))
+ nDst++
+ continue
+ }
+ if atEOF && err == nil && *e != asciiState {
+ if nDst+3 > len(dst) {
+ err = transform.ErrShortDst
+ } else {
+ *e = asciiState
+ dst[nDst+0] = asciiEsc
+ dst[nDst+1] = '('
+ dst[nDst+2] = 'B'
+ nDst += 3
+ }
+ }
+ return nDst, nSrc, err
+}
diff --git a/vendor/golang.org/x/text/encoding/japanese/shiftjis.go b/vendor/golang.org/x/text/encoding/japanese/shiftjis.go
new file mode 100644
index 000000000..16fd8a6e3
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/japanese/shiftjis.go
@@ -0,0 +1,189 @@
+// 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 japanese
+
+import (
+ "unicode/utf8"
+
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/internal"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/transform"
+)
+
+// ShiftJIS is the Shift JIS encoding, also known as Code Page 932 and
+// Windows-31J.
+var ShiftJIS encoding.Encoding = &shiftJIS
+
+var shiftJIS = internal.Encoding{
+ &internal.SimpleEncoding{shiftJISDecoder{}, shiftJISEncoder{}},
+ "Shift JIS",
+ identifier.ShiftJIS,
+}
+
+type shiftJISDecoder struct{ transform.NopResetter }
+
+func (shiftJISDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+loop:
+ for ; nSrc < len(src); nSrc += size {
+ switch c0 := src[nSrc]; {
+ case c0 < utf8.RuneSelf:
+ r, size = rune(c0), 1
+
+ case 0xa1 <= c0 && c0 < 0xe0:
+ r, size = rune(c0)+(0xff61-0xa1), 1
+
+ case (0x81 <= c0 && c0 < 0xa0) || (0xe0 <= c0 && c0 < 0xfd):
+ if c0 <= 0x9f {
+ c0 -= 0x70
+ } else {
+ c0 -= 0xb0
+ }
+ c0 = 2*c0 - 0x21
+
+ if nSrc+1 >= len(src) {
+ if !atEOF {
+ err = transform.ErrShortSrc
+ break loop
+ }
+ r, size = '\ufffd', 1
+ goto write
+ }
+ c1 := src[nSrc+1]
+ switch {
+ case c1 < 0x40:
+ r, size = '\ufffd', 1 // c1 is ASCII so output on next round
+ goto write
+ case c1 < 0x7f:
+ c0--
+ c1 -= 0x40
+ case c1 == 0x7f:
+ r, size = '\ufffd', 1 // c1 is ASCII so output on next round
+ goto write
+ case c1 < 0x9f:
+ c0--
+ c1 -= 0x41
+ case c1 < 0xfd:
+ c1 -= 0x9f
+ default:
+ r, size = '\ufffd', 2
+ goto write
+ }
+ r, size = '\ufffd', 2
+ if i := int(c0)*94 + int(c1); i < len(jis0208Decode) {
+ r = rune(jis0208Decode[i])
+ if r == 0 {
+ r = '\ufffd'
+ }
+ }
+
+ case c0 == 0x80:
+ r, size = 0x80, 1
+
+ default:
+ r, size = '\ufffd', 1
+ }
+ write:
+ if nDst+utf8.RuneLen(r) > len(dst) {
+ err = transform.ErrShortDst
+ break loop
+ }
+ nDst += utf8.EncodeRune(dst[nDst:], r)
+ }
+ return nDst, nSrc, err
+}
+
+type shiftJISEncoder struct{ transform.NopResetter }
+
+func (shiftJISEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+loop:
+ for ; nSrc < len(src); nSrc += size {
+ r = rune(src[nSrc])
+
+ // Decode a 1-byte rune.
+ if r < utf8.RuneSelf {
+ size = 1
+
+ } else {
+ // Decode a multi-byte rune.
+ r, size = utf8.DecodeRune(src[nSrc:])
+ if size == 1 {
+ // All valid runes of size 1 (those below utf8.RuneSelf) were
+ // handled above. We have invalid UTF-8 or we haven't seen the
+ // full character yet.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ break loop
+ }
+ }
+
+ // func init checks that the switch covers all tables.
+ switch {
+ case encode0Low <= r && r < encode0High:
+ if r = rune(encode0[r-encode0Low]); r>>tableShift == jis0208 {
+ goto write2
+ }
+ case encode1Low <= r && r < encode1High:
+ if r = rune(encode1[r-encode1Low]); r>>tableShift == jis0208 {
+ goto write2
+ }
+ case encode2Low <= r && r < encode2High:
+ if r = rune(encode2[r-encode2Low]); r>>tableShift == jis0208 {
+ goto write2
+ }
+ case encode3Low <= r && r < encode3High:
+ if r = rune(encode3[r-encode3Low]); r>>tableShift == jis0208 {
+ goto write2
+ }
+ case encode4Low <= r && r < encode4High:
+ if r = rune(encode4[r-encode4Low]); r>>tableShift == jis0208 {
+ goto write2
+ }
+ case encode5Low <= r && r < encode5High:
+ if 0xff61 <= r && r < 0xffa0 {
+ r -= 0xff61 - 0xa1
+ goto write1
+ }
+ if r = rune(encode5[r-encode5Low]); r>>tableShift == jis0208 {
+ goto write2
+ }
+ }
+ err = internal.ErrASCIIReplacement
+ break
+ }
+
+ write1:
+ if nDst >= len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst] = uint8(r)
+ nDst++
+ continue
+
+ write2:
+ j1 := uint8(r>>codeShift) & codeMask
+ j2 := uint8(r) & codeMask
+ if nDst+2 > len(dst) {
+ err = transform.ErrShortDst
+ break loop
+ }
+ if j1 <= 61 {
+ dst[nDst+0] = 129 + j1/2
+ } else {
+ dst[nDst+0] = 193 + j1/2
+ }
+ if j1&1 == 0 {
+ dst[nDst+1] = j2 + j2/63 + 64
+ } else {
+ dst[nDst+1] = j2 + 159
+ }
+ nDst += 2
+ continue
+ }
+ return nDst, nSrc, err
+}
diff --git a/vendor/golang.org/x/text/encoding/japanese/tables.go b/vendor/golang.org/x/text/encoding/japanese/tables.go
new file mode 100644
index 000000000..8717b79ae
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/japanese/tables.go
@@ -0,0 +1,26971 @@
+// generated by go run maketables.go; DO NOT EDIT
+
+// Package japanese provides Japanese encodings such as EUC-JP and Shift JIS.
+package japanese // import "golang.org/x/text/encoding/japanese"
+
+// jis0208Decode is the decoding table from JIS 0208 code to Unicode.
+// It is defined at http://encoding.spec.whatwg.org/index-jis0208.txt
+var jis0208Decode = [...]uint16{
+ 0: 0x3000,
+ 1: 0x3001,
+ 2: 0x3002,
+ 3: 0xFF0C,
+ 4: 0xFF0E,
+ 5: 0x30FB,
+ 6: 0xFF1A,
+ 7: 0xFF1B,
+ 8: 0xFF1F,
+ 9: 0xFF01,
+ 10: 0x309B,
+ 11: 0x309C,
+ 12: 0x00B4,
+ 13: 0xFF40,
+ 14: 0x00A8,
+ 15: 0xFF3E,
+ 16: 0xFFE3,
+ 17: 0xFF3F,
+ 18: 0x30FD,
+ 19: 0x30FE,
+ 20: 0x309D,
+ 21: 0x309E,
+ 22: 0x3003,
+ 23: 0x4EDD,
+ 24: 0x3005,
+ 25: 0x3006,
+ 26: 0x3007,
+ 27: 0x30FC,
+ 28: 0x2015,
+ 29: 0x2010,
+ 30: 0xFF0F,
+ 31: 0xFF3C,
+ 32: 0xFF5E,
+ 33: 0x2225,
+ 34: 0xFF5C,
+ 35: 0x2026,
+ 36: 0x2025,
+ 37: 0x2018,
+ 38: 0x2019,
+ 39: 0x201C,
+ 40: 0x201D,
+ 41: 0xFF08,
+ 42: 0xFF09,
+ 43: 0x3014,
+ 44: 0x3015,
+ 45: 0xFF3B,
+ 46: 0xFF3D,
+ 47: 0xFF5B,
+ 48: 0xFF5D,
+ 49: 0x3008,
+ 50: 0x3009,
+ 51: 0x300A,
+ 52: 0x300B,
+ 53: 0x300C,
+ 54: 0x300D,
+ 55: 0x300E,
+ 56: 0x300F,
+ 57: 0x3010,
+ 58: 0x3011,
+ 59: 0xFF0B,
+ 60: 0xFF0D,
+ 61: 0x00B1,
+ 62: 0x00D7,
+ 63: 0x00F7,
+ 64: 0xFF1D,
+ 65: 0x2260,
+ 66: 0xFF1C,
+ 67: 0xFF1E,
+ 68: 0x2266,
+ 69: 0x2267,
+ 70: 0x221E,
+ 71: 0x2234,
+ 72: 0x2642,
+ 73: 0x2640,
+ 74: 0x00B0,
+ 75: 0x2032,
+ 76: 0x2033,
+ 77: 0x2103,
+ 78: 0xFFE5,
+ 79: 0xFF04,
+ 80: 0xFFE0,
+ 81: 0xFFE1,
+ 82: 0xFF05,
+ 83: 0xFF03,
+ 84: 0xFF06,
+ 85: 0xFF0A,
+ 86: 0xFF20,
+ 87: 0x00A7,
+ 88: 0x2606,
+ 89: 0x2605,
+ 90: 0x25CB,
+ 91: 0x25CF,
+ 92: 0x25CE,
+ 93: 0x25C7,
+ 94: 0x25C6,
+ 95: 0x25A1,
+ 96: 0x25A0,
+ 97: 0x25B3,
+ 98: 0x25B2,
+ 99: 0x25BD,
+ 100: 0x25BC,
+ 101: 0x203B,
+ 102: 0x3012,
+ 103: 0x2192,
+ 104: 0x2190,
+ 105: 0x2191,
+ 106: 0x2193,
+ 107: 0x3013,
+ 119: 0x2208,
+ 120: 0x220B,
+ 121: 0x2286,
+ 122: 0x2287,
+ 123: 0x2282,
+ 124: 0x2283,
+ 125: 0x222A,
+ 126: 0x2229,
+ 135: 0x2227,
+ 136: 0x2228,
+ 137: 0xFFE2,
+ 138: 0x21D2,
+ 139: 0x21D4,
+ 140: 0x2200,
+ 141: 0x2203,
+ 153: 0x2220,
+ 154: 0x22A5,
+ 155: 0x2312,
+ 156: 0x2202,
+ 157: 0x2207,
+ 158: 0x2261,
+ 159: 0x2252,
+ 160: 0x226A,
+ 161: 0x226B,
+ 162: 0x221A,
+ 163: 0x223D,
+ 164: 0x221D,
+ 165: 0x2235,
+ 166: 0x222B,
+ 167: 0x222C,
+ 175: 0x212B,
+ 176: 0x2030,
+ 177: 0x266F,
+ 178: 0x266D,
+ 179: 0x266A,
+ 180: 0x2020,
+ 181: 0x2021,
+ 182: 0x00B6,
+ 187: 0x25EF,
+ 203: 0xFF10,
+ 204: 0xFF11,
+ 205: 0xFF12,
+ 206: 0xFF13,
+ 207: 0xFF14,
+ 208: 0xFF15,
+ 209: 0xFF16,
+ 210: 0xFF17,
+ 211: 0xFF18,
+ 212: 0xFF19,
+ 220: 0xFF21,
+ 221: 0xFF22,
+ 222: 0xFF23,
+ 223: 0xFF24,
+ 224: 0xFF25,
+ 225: 0xFF26,
+ 226: 0xFF27,
+ 227: 0xFF28,
+ 228: 0xFF29,
+ 229: 0xFF2A,
+ 230: 0xFF2B,
+ 231: 0xFF2C,
+ 232: 0xFF2D,
+ 233: 0xFF2E,
+ 234: 0xFF2F,
+ 235: 0xFF30,
+ 236: 0xFF31,
+ 237: 0xFF32,
+ 238: 0xFF33,
+ 239: 0xFF34,
+ 240: 0xFF35,
+ 241: 0xFF36,
+ 242: 0xFF37,
+ 243: 0xFF38,
+ 244: 0xFF39,
+ 245: 0xFF3A,
+ 252: 0xFF41,
+ 253: 0xFF42,
+ 254: 0xFF43,
+ 255: 0xFF44,
+ 256: 0xFF45,
+ 257: 0xFF46,
+ 258: 0xFF47,
+ 259: 0xFF48,
+ 260: 0xFF49,
+ 261: 0xFF4A,
+ 262: 0xFF4B,
+ 263: 0xFF4C,
+ 264: 0xFF4D,
+ 265: 0xFF4E,
+ 266: 0xFF4F,
+ 267: 0xFF50,
+ 268: 0xFF51,
+ 269: 0xFF52,
+ 270: 0xFF53,
+ 271: 0xFF54,
+ 272: 0xFF55,
+ 273: 0xFF56,
+ 274: 0xFF57,
+ 275: 0xFF58,
+ 276: 0xFF59,
+ 277: 0xFF5A,
+ 282: 0x3041,
+ 283: 0x3042,
+ 284: 0x3043,
+ 285: 0x3044,
+ 286: 0x3045,
+ 287: 0x3046,
+ 288: 0x3047,
+ 289: 0x3048,
+ 290: 0x3049,
+ 291: 0x304A,
+ 292: 0x304B,
+ 293: 0x304C,
+ 294: 0x304D,
+ 295: 0x304E,
+ 296: 0x304F,
+ 297: 0x3050,
+ 298: 0x3051,
+ 299: 0x3052,
+ 300: 0x3053,
+ 301: 0x3054,
+ 302: 0x3055,
+ 303: 0x3056,
+ 304: 0x3057,
+ 305: 0x3058,
+ 306: 0x3059,
+ 307: 0x305A,
+ 308: 0x305B,
+ 309: 0x305C,
+ 310: 0x305D,
+ 311: 0x305E,
+ 312: 0x305F,
+ 313: 0x3060,
+ 314: 0x3061,
+ 315: 0x3062,
+ 316: 0x3063,
+ 317: 0x3064,
+ 318: 0x3065,
+ 319: 0x3066,
+ 320: 0x3067,
+ 321: 0x3068,
+ 322: 0x3069,
+ 323: 0x306A,
+ 324: 0x306B,
+ 325: 0x306C,
+ 326: 0x306D,
+ 327: 0x306E,
+ 328: 0x306F,
+ 329: 0x3070,
+ 330: 0x3071,
+ 331: 0x3072,
+ 332: 0x3073,
+ 333: 0x3074,
+ 334: 0x3075,
+ 335: 0x3076,
+ 336: 0x3077,
+ 337: 0x3078,
+ 338: 0x3079,
+ 339: 0x307A,
+ 340: 0x307B,
+ 341: 0x307C,
+ 342: 0x307D,
+ 343: 0x307E,
+ 344: 0x307F,
+ 345: 0x3080,
+ 346: 0x3081,
+ 347: 0x3082,
+ 348: 0x3083,
+ 349: 0x3084,
+ 350: 0x3085,
+ 351: 0x3086,
+ 352: 0x3087,
+ 353: 0x3088,
+ 354: 0x3089,
+ 355: 0x308A,
+ 356: 0x308B,
+ 357: 0x308C,
+ 358: 0x308D,
+ 359: 0x308E,
+ 360: 0x308F,
+ 361: 0x3090,
+ 362: 0x3091,
+ 363: 0x3092,
+ 364: 0x3093,
+ 376: 0x30A1,
+ 377: 0x30A2,
+ 378: 0x30A3,
+ 379: 0x30A4,
+ 380: 0x30A5,
+ 381: 0x30A6,
+ 382: 0x30A7,
+ 383: 0x30A8,
+ 384: 0x30A9,
+ 385: 0x30AA,
+ 386: 0x30AB,
+ 387: 0x30AC,
+ 388: 0x30AD,
+ 389: 0x30AE,
+ 390: 0x30AF,
+ 391: 0x30B0,
+ 392: 0x30B1,
+ 393: 0x30B2,
+ 394: 0x30B3,
+ 395: 0x30B4,
+ 396: 0x30B5,
+ 397: 0x30B6,
+ 398: 0x30B7,
+ 399: 0x30B8,
+ 400: 0x30B9,
+ 401: 0x30BA,
+ 402: 0x30BB,
+ 403: 0x30BC,
+ 404: 0x30BD,
+ 405: 0x30BE,
+ 406: 0x30BF,
+ 407: 0x30C0,
+ 408: 0x30C1,
+ 409: 0x30C2,
+ 410: 0x30C3,
+ 411: 0x30C4,
+ 412: 0x30C5,
+ 413: 0x30C6,
+ 414: 0x30C7,
+ 415: 0x30C8,
+ 416: 0x30C9,
+ 417: 0x30CA,
+ 418: 0x30CB,
+ 419: 0x30CC,
+ 420: 0x30CD,
+ 421: 0x30CE,
+ 422: 0x30CF,
+ 423: 0x30D0,
+ 424: 0x30D1,
+ 425: 0x30D2,
+ 426: 0x30D3,
+ 427: 0x30D4,
+ 428: 0x30D5,
+ 429: 0x30D6,
+ 430: 0x30D7,
+ 431: 0x30D8,
+ 432: 0x30D9,
+ 433: 0x30DA,
+ 434: 0x30DB,
+ 435: 0x30DC,
+ 436: 0x30DD,
+ 437: 0x30DE,
+ 438: 0x30DF,
+ 439: 0x30E0,
+ 440: 0x30E1,
+ 441: 0x30E2,
+ 442: 0x30E3,
+ 443: 0x30E4,
+ 444: 0x30E5,
+ 445: 0x30E6,
+ 446: 0x30E7,
+ 447: 0x30E8,
+ 448: 0x30E9,
+ 449: 0x30EA,
+ 450: 0x30EB,
+ 451: 0x30EC,
+ 452: 0x30ED,
+ 453: 0x30EE,
+ 454: 0x30EF,
+ 455: 0x30F0,
+ 456: 0x30F1,
+ 457: 0x30F2,
+ 458: 0x30F3,
+ 459: 0x30F4,
+ 460: 0x30F5,
+ 461: 0x30F6,
+ 470: 0x0391,
+ 471: 0x0392,
+ 472: 0x0393,
+ 473: 0x0394,
+ 474: 0x0395,
+ 475: 0x0396,
+ 476: 0x0397,
+ 477: 0x0398,
+ 478: 0x0399,
+ 479: 0x039A,
+ 480: 0x039B,
+ 481: 0x039C,
+ 482: 0x039D,
+ 483: 0x039E,
+ 484: 0x039F,
+ 485: 0x03A0,
+ 486: 0x03A1,
+ 487: 0x03A3,
+ 488: 0x03A4,
+ 489: 0x03A5,
+ 490: 0x03A6,
+ 491: 0x03A7,
+ 492: 0x03A8,
+ 493: 0x03A9,
+ 502: 0x03B1,
+ 503: 0x03B2,
+ 504: 0x03B3,
+ 505: 0x03B4,
+ 506: 0x03B5,
+ 507: 0x03B6,
+ 508: 0x03B7,
+ 509: 0x03B8,
+ 510: 0x03B9,
+ 511: 0x03BA,
+ 512: 0x03BB,
+ 513: 0x03BC,
+ 514: 0x03BD,
+ 515: 0x03BE,
+ 516: 0x03BF,
+ 517: 0x03C0,
+ 518: 0x03C1,
+ 519: 0x03C3,
+ 520: 0x03C4,
+ 521: 0x03C5,
+ 522: 0x03C6,
+ 523: 0x03C7,
+ 524: 0x03C8,
+ 525: 0x03C9,
+ 564: 0x0410,
+ 565: 0x0411,
+ 566: 0x0412,
+ 567: 0x0413,
+ 568: 0x0414,
+ 569: 0x0415,
+ 570: 0x0401,
+ 571: 0x0416,
+ 572: 0x0417,
+ 573: 0x0418,
+ 574: 0x0419,
+ 575: 0x041A,
+ 576: 0x041B,
+ 577: 0x041C,
+ 578: 0x041D,
+ 579: 0x041E,
+ 580: 0x041F,
+ 581: 0x0420,
+ 582: 0x0421,
+ 583: 0x0422,
+ 584: 0x0423,
+ 585: 0x0424,
+ 586: 0x0425,
+ 587: 0x0426,
+ 588: 0x0427,
+ 589: 0x0428,
+ 590: 0x0429,
+ 591: 0x042A,
+ 592: 0x042B,
+ 593: 0x042C,
+ 594: 0x042D,
+ 595: 0x042E,
+ 596: 0x042F,
+ 612: 0x0430,
+ 613: 0x0431,
+ 614: 0x0432,
+ 615: 0x0433,
+ 616: 0x0434,
+ 617: 0x0435,
+ 618: 0x0451,
+ 619: 0x0436,
+ 620: 0x0437,
+ 621: 0x0438,
+ 622: 0x0439,
+ 623: 0x043A,
+ 624: 0x043B,
+ 625: 0x043C,
+ 626: 0x043D,
+ 627: 0x043E,
+ 628: 0x043F,
+ 629: 0x0440,
+ 630: 0x0441,
+ 631: 0x0442,
+ 632: 0x0443,
+ 633: 0x0444,
+ 634: 0x0445,
+ 635: 0x0446,
+ 636: 0x0447,
+ 637: 0x0448,
+ 638: 0x0449,
+ 639: 0x044A,
+ 640: 0x044B,
+ 641: 0x044C,
+ 642: 0x044D,
+ 643: 0x044E,
+ 644: 0x044F,
+ 658: 0x2500,
+ 659: 0x2502,
+ 660: 0x250C,
+ 661: 0x2510,
+ 662: 0x2518,
+ 663: 0x2514,
+ 664: 0x251C,
+ 665: 0x252C,
+ 666: 0x2524,
+ 667: 0x2534,
+ 668: 0x253C,
+ 669: 0x2501,
+ 670: 0x2503,
+ 671: 0x250F,
+ 672: 0x2513,
+ 673: 0x251B,
+ 674: 0x2517,
+ 675: 0x2523,
+ 676: 0x2533,
+ 677: 0x252B,
+ 678: 0x253B,
+ 679: 0x254B,
+ 680: 0x2520,
+ 681: 0x252F,
+ 682: 0x2528,
+ 683: 0x2537,
+ 684: 0x253F,
+ 685: 0x251D,
+ 686: 0x2530,
+ 687: 0x2525,
+ 688: 0x2538,
+ 689: 0x2542,
+ 1128: 0x2460,
+ 1129: 0x2461,
+ 1130: 0x2462,
+ 1131: 0x2463,
+ 1132: 0x2464,
+ 1133: 0x2465,
+ 1134: 0x2466,
+ 1135: 0x2467,
+ 1136: 0x2468,
+ 1137: 0x2469,
+ 1138: 0x246A,
+ 1139: 0x246B,
+ 1140: 0x246C,
+ 1141: 0x246D,
+ 1142: 0x246E,
+ 1143: 0x246F,
+ 1144: 0x2470,
+ 1145: 0x2471,
+ 1146: 0x2472,
+ 1147: 0x2473,
+ 1148: 0x2160,
+ 1149: 0x2161,
+ 1150: 0x2162,
+ 1151: 0x2163,
+ 1152: 0x2164,
+ 1153: 0x2165,
+ 1154: 0x2166,
+ 1155: 0x2167,
+ 1156: 0x2168,
+ 1157: 0x2169,
+ 1159: 0x3349,
+ 1160: 0x3314,
+ 1161: 0x3322,
+ 1162: 0x334D,
+ 1163: 0x3318,
+ 1164: 0x3327,
+ 1165: 0x3303,
+ 1166: 0x3336,
+ 1167: 0x3351,
+ 1168: 0x3357,
+ 1169: 0x330D,
+ 1170: 0x3326,
+ 1171: 0x3323,
+ 1172: 0x332B,
+ 1173: 0x334A,
+ 1174: 0x333B,
+ 1175: 0x339C,
+ 1176: 0x339D,
+ 1177: 0x339E,
+ 1178: 0x338E,
+ 1179: 0x338F,
+ 1180: 0x33C4,
+ 1181: 0x33A1,
+ 1190: 0x337B,
+ 1191: 0x301D,
+ 1192: 0x301F,
+ 1193: 0x2116,
+ 1194: 0x33CD,
+ 1195: 0x2121,
+ 1196: 0x32A4,
+ 1197: 0x32A5,
+ 1198: 0x32A6,
+ 1199: 0x32A7,
+ 1200: 0x32A8,
+ 1201: 0x3231,
+ 1202: 0x3232,
+ 1203: 0x3239,
+ 1204: 0x337E,
+ 1205: 0x337D,
+ 1206: 0x337C,
+ 1207: 0x2252,
+ 1208: 0x2261,
+ 1209: 0x222B,
+ 1210: 0x222E,
+ 1211: 0x2211,
+ 1212: 0x221A,
+ 1213: 0x22A5,
+ 1214: 0x2220,
+ 1215: 0x221F,
+ 1216: 0x22BF,
+ 1217: 0x2235,
+ 1218: 0x2229,
+ 1219: 0x222A,
+ 1410: 0x4E9C,
+ 1411: 0x5516,
+ 1412: 0x5A03,
+ 1413: 0x963F,
+ 1414: 0x54C0,
+ 1415: 0x611B,
+ 1416: 0x6328,
+ 1417: 0x59F6,
+ 1418: 0x9022,
+ 1419: 0x8475,
+ 1420: 0x831C,
+ 1421: 0x7A50,
+ 1422: 0x60AA,
+ 1423: 0x63E1,
+ 1424: 0x6E25,
+ 1425: 0x65ED,
+ 1426: 0x8466,
+ 1427: 0x82A6,
+ 1428: 0x9BF5,
+ 1429: 0x6893,
+ 1430: 0x5727,
+ 1431: 0x65A1,
+ 1432: 0x6271,
+ 1433: 0x5B9B,
+ 1434: 0x59D0,
+ 1435: 0x867B,
+ 1436: 0x98F4,
+ 1437: 0x7D62,
+ 1438: 0x7DBE,
+ 1439: 0x9B8E,
+ 1440: 0x6216,
+ 1441: 0x7C9F,
+ 1442: 0x88B7,
+ 1443: 0x5B89,
+ 1444: 0x5EB5,
+ 1445: 0x6309,
+ 1446: 0x6697,
+ 1447: 0x6848,
+ 1448: 0x95C7,
+ 1449: 0x978D,
+ 1450: 0x674F,
+ 1451: 0x4EE5,
+ 1452: 0x4F0A,
+ 1453: 0x4F4D,
+ 1454: 0x4F9D,
+ 1455: 0x5049,
+ 1456: 0x56F2,
+ 1457: 0x5937,
+ 1458: 0x59D4,
+ 1459: 0x5A01,
+ 1460: 0x5C09,
+ 1461: 0x60DF,
+ 1462: 0x610F,
+ 1463: 0x6170,
+ 1464: 0x6613,
+ 1465: 0x6905,
+ 1466: 0x70BA,
+ 1467: 0x754F,
+ 1468: 0x7570,
+ 1469: 0x79FB,
+ 1470: 0x7DAD,
+ 1471: 0x7DEF,
+ 1472: 0x80C3,
+ 1473: 0x840E,
+ 1474: 0x8863,
+ 1475: 0x8B02,
+ 1476: 0x9055,
+ 1477: 0x907A,
+ 1478: 0x533B,
+ 1479: 0x4E95,
+ 1480: 0x4EA5,
+ 1481: 0x57DF,
+ 1482: 0x80B2,
+ 1483: 0x90C1,
+ 1484: 0x78EF,
+ 1485: 0x4E00,
+ 1486: 0x58F1,
+ 1487: 0x6EA2,
+ 1488: 0x9038,
+ 1489: 0x7A32,
+ 1490: 0x8328,
+ 1491: 0x828B,
+ 1492: 0x9C2F,
+ 1493: 0x5141,
+ 1494: 0x5370,
+ 1495: 0x54BD,
+ 1496: 0x54E1,
+ 1497: 0x56E0,
+ 1498: 0x59FB,
+ 1499: 0x5F15,
+ 1500: 0x98F2,
+ 1501: 0x6DEB,
+ 1502: 0x80E4,
+ 1503: 0x852D,
+ 1504: 0x9662,
+ 1505: 0x9670,
+ 1506: 0x96A0,
+ 1507: 0x97FB,
+ 1508: 0x540B,
+ 1509: 0x53F3,
+ 1510: 0x5B87,
+ 1511: 0x70CF,
+ 1512: 0x7FBD,
+ 1513: 0x8FC2,
+ 1514: 0x96E8,
+ 1515: 0x536F,
+ 1516: 0x9D5C,
+ 1517: 0x7ABA,
+ 1518: 0x4E11,
+ 1519: 0x7893,
+ 1520: 0x81FC,
+ 1521: 0x6E26,
+ 1522: 0x5618,
+ 1523: 0x5504,
+ 1524: 0x6B1D,
+ 1525: 0x851A,
+ 1526: 0x9C3B,
+ 1527: 0x59E5,
+ 1528: 0x53A9,
+ 1529: 0x6D66,
+ 1530: 0x74DC,
+ 1531: 0x958F,
+ 1532: 0x5642,
+ 1533: 0x4E91,
+ 1534: 0x904B,
+ 1535: 0x96F2,
+ 1536: 0x834F,
+ 1537: 0x990C,
+ 1538: 0x53E1,
+ 1539: 0x55B6,
+ 1540: 0x5B30,
+ 1541: 0x5F71,
+ 1542: 0x6620,
+ 1543: 0x66F3,
+ 1544: 0x6804,
+ 1545: 0x6C38,
+ 1546: 0x6CF3,
+ 1547: 0x6D29,
+ 1548: 0x745B,
+ 1549: 0x76C8,
+ 1550: 0x7A4E,
+ 1551: 0x9834,
+ 1552: 0x82F1,
+ 1553: 0x885B,
+ 1554: 0x8A60,
+ 1555: 0x92ED,
+ 1556: 0x6DB2,
+ 1557: 0x75AB,
+ 1558: 0x76CA,
+ 1559: 0x99C5,
+ 1560: 0x60A6,
+ 1561: 0x8B01,
+ 1562: 0x8D8A,
+ 1563: 0x95B2,
+ 1564: 0x698E,
+ 1565: 0x53AD,
+ 1566: 0x5186,
+ 1567: 0x5712,
+ 1568: 0x5830,
+ 1569: 0x5944,
+ 1570: 0x5BB4,
+ 1571: 0x5EF6,
+ 1572: 0x6028,
+ 1573: 0x63A9,
+ 1574: 0x63F4,
+ 1575: 0x6CBF,
+ 1576: 0x6F14,
+ 1577: 0x708E,
+ 1578: 0x7114,
+ 1579: 0x7159,
+ 1580: 0x71D5,
+ 1581: 0x733F,
+ 1582: 0x7E01,
+ 1583: 0x8276,
+ 1584: 0x82D1,
+ 1585: 0x8597,
+ 1586: 0x9060,
+ 1587: 0x925B,
+ 1588: 0x9D1B,
+ 1589: 0x5869,
+ 1590: 0x65BC,
+ 1591: 0x6C5A,
+ 1592: 0x7525,
+ 1593: 0x51F9,
+ 1594: 0x592E,
+ 1595: 0x5965,
+ 1596: 0x5F80,
+ 1597: 0x5FDC,
+ 1598: 0x62BC,
+ 1599: 0x65FA,
+ 1600: 0x6A2A,
+ 1601: 0x6B27,
+ 1602: 0x6BB4,
+ 1603: 0x738B,
+ 1604: 0x7FC1,
+ 1605: 0x8956,
+ 1606: 0x9D2C,
+ 1607: 0x9D0E,
+ 1608: 0x9EC4,
+ 1609: 0x5CA1,
+ 1610: 0x6C96,
+ 1611: 0x837B,
+ 1612: 0x5104,
+ 1613: 0x5C4B,
+ 1614: 0x61B6,
+ 1615: 0x81C6,
+ 1616: 0x6876,
+ 1617: 0x7261,
+ 1618: 0x4E59,
+ 1619: 0x4FFA,
+ 1620: 0x5378,
+ 1621: 0x6069,
+ 1622: 0x6E29,
+ 1623: 0x7A4F,
+ 1624: 0x97F3,
+ 1625: 0x4E0B,
+ 1626: 0x5316,
+ 1627: 0x4EEE,
+ 1628: 0x4F55,
+ 1629: 0x4F3D,
+ 1630: 0x4FA1,
+ 1631: 0x4F73,
+ 1632: 0x52A0,
+ 1633: 0x53EF,
+ 1634: 0x5609,
+ 1635: 0x590F,
+ 1636: 0x5AC1,
+ 1637: 0x5BB6,
+ 1638: 0x5BE1,
+ 1639: 0x79D1,
+ 1640: 0x6687,
+ 1641: 0x679C,
+ 1642: 0x67B6,
+ 1643: 0x6B4C,
+ 1644: 0x6CB3,
+ 1645: 0x706B,
+ 1646: 0x73C2,
+ 1647: 0x798D,
+ 1648: 0x79BE,
+ 1649: 0x7A3C,
+ 1650: 0x7B87,
+ 1651: 0x82B1,
+ 1652: 0x82DB,
+ 1653: 0x8304,
+ 1654: 0x8377,
+ 1655: 0x83EF,
+ 1656: 0x83D3,
+ 1657: 0x8766,
+ 1658: 0x8AB2,
+ 1659: 0x5629,
+ 1660: 0x8CA8,
+ 1661: 0x8FE6,
+ 1662: 0x904E,
+ 1663: 0x971E,
+ 1664: 0x868A,
+ 1665: 0x4FC4,
+ 1666: 0x5CE8,
+ 1667: 0x6211,
+ 1668: 0x7259,
+ 1669: 0x753B,
+ 1670: 0x81E5,
+ 1671: 0x82BD,
+ 1672: 0x86FE,
+ 1673: 0x8CC0,
+ 1674: 0x96C5,
+ 1675: 0x9913,
+ 1676: 0x99D5,
+ 1677: 0x4ECB,
+ 1678: 0x4F1A,
+ 1679: 0x89E3,
+ 1680: 0x56DE,
+ 1681: 0x584A,
+ 1682: 0x58CA,
+ 1683: 0x5EFB,
+ 1684: 0x5FEB,
+ 1685: 0x602A,
+ 1686: 0x6094,
+ 1687: 0x6062,
+ 1688: 0x61D0,
+ 1689: 0x6212,
+ 1690: 0x62D0,
+ 1691: 0x6539,
+ 1692: 0x9B41,
+ 1693: 0x6666,
+ 1694: 0x68B0,
+ 1695: 0x6D77,
+ 1696: 0x7070,
+ 1697: 0x754C,
+ 1698: 0x7686,
+ 1699: 0x7D75,
+ 1700: 0x82A5,
+ 1701: 0x87F9,
+ 1702: 0x958B,
+ 1703: 0x968E,
+ 1704: 0x8C9D,
+ 1705: 0x51F1,
+ 1706: 0x52BE,
+ 1707: 0x5916,
+ 1708: 0x54B3,
+ 1709: 0x5BB3,
+ 1710: 0x5D16,
+ 1711: 0x6168,
+ 1712: 0x6982,
+ 1713: 0x6DAF,
+ 1714: 0x788D,
+ 1715: 0x84CB,
+ 1716: 0x8857,
+ 1717: 0x8A72,
+ 1718: 0x93A7,
+ 1719: 0x9AB8,
+ 1720: 0x6D6C,
+ 1721: 0x99A8,
+ 1722: 0x86D9,
+ 1723: 0x57A3,
+ 1724: 0x67FF,
+ 1725: 0x86CE,
+ 1726: 0x920E,
+ 1727: 0x5283,
+ 1728: 0x5687,
+ 1729: 0x5404,
+ 1730: 0x5ED3,
+ 1731: 0x62E1,
+ 1732: 0x64B9,
+ 1733: 0x683C,
+ 1734: 0x6838,
+ 1735: 0x6BBB,
+ 1736: 0x7372,
+ 1737: 0x78BA,
+ 1738: 0x7A6B,
+ 1739: 0x899A,
+ 1740: 0x89D2,
+ 1741: 0x8D6B,
+ 1742: 0x8F03,
+ 1743: 0x90ED,
+ 1744: 0x95A3,
+ 1745: 0x9694,
+ 1746: 0x9769,
+ 1747: 0x5B66,
+ 1748: 0x5CB3,
+ 1749: 0x697D,
+ 1750: 0x984D,
+ 1751: 0x984E,
+ 1752: 0x639B,
+ 1753: 0x7B20,
+ 1754: 0x6A2B,
+ 1755: 0x6A7F,
+ 1756: 0x68B6,
+ 1757: 0x9C0D,
+ 1758: 0x6F5F,
+ 1759: 0x5272,
+ 1760: 0x559D,
+ 1761: 0x6070,
+ 1762: 0x62EC,
+ 1763: 0x6D3B,
+ 1764: 0x6E07,
+ 1765: 0x6ED1,
+ 1766: 0x845B,
+ 1767: 0x8910,
+ 1768: 0x8F44,
+ 1769: 0x4E14,
+ 1770: 0x9C39,
+ 1771: 0x53F6,
+ 1772: 0x691B,
+ 1773: 0x6A3A,
+ 1774: 0x9784,
+ 1775: 0x682A,
+ 1776: 0x515C,
+ 1777: 0x7AC3,
+ 1778: 0x84B2,
+ 1779: 0x91DC,
+ 1780: 0x938C,
+ 1781: 0x565B,
+ 1782: 0x9D28,
+ 1783: 0x6822,
+ 1784: 0x8305,
+ 1785: 0x8431,
+ 1786: 0x7CA5,
+ 1787: 0x5208,
+ 1788: 0x82C5,
+ 1789: 0x74E6,
+ 1790: 0x4E7E,
+ 1791: 0x4F83,
+ 1792: 0x51A0,
+ 1793: 0x5BD2,
+ 1794: 0x520A,
+ 1795: 0x52D8,
+ 1796: 0x52E7,
+ 1797: 0x5DFB,
+ 1798: 0x559A,
+ 1799: 0x582A,
+ 1800: 0x59E6,
+ 1801: 0x5B8C,
+ 1802: 0x5B98,
+ 1803: 0x5BDB,
+ 1804: 0x5E72,
+ 1805: 0x5E79,
+ 1806: 0x60A3,
+ 1807: 0x611F,
+ 1808: 0x6163,
+ 1809: 0x61BE,
+ 1810: 0x63DB,
+ 1811: 0x6562,
+ 1812: 0x67D1,
+ 1813: 0x6853,
+ 1814: 0x68FA,
+ 1815: 0x6B3E,
+ 1816: 0x6B53,
+ 1817: 0x6C57,
+ 1818: 0x6F22,
+ 1819: 0x6F97,
+ 1820: 0x6F45,
+ 1821: 0x74B0,
+ 1822: 0x7518,
+ 1823: 0x76E3,
+ 1824: 0x770B,
+ 1825: 0x7AFF,
+ 1826: 0x7BA1,
+ 1827: 0x7C21,
+ 1828: 0x7DE9,
+ 1829: 0x7F36,
+ 1830: 0x7FF0,
+ 1831: 0x809D,
+ 1832: 0x8266,
+ 1833: 0x839E,
+ 1834: 0x89B3,
+ 1835: 0x8ACC,
+ 1836: 0x8CAB,
+ 1837: 0x9084,
+ 1838: 0x9451,
+ 1839: 0x9593,
+ 1840: 0x9591,
+ 1841: 0x95A2,
+ 1842: 0x9665,
+ 1843: 0x97D3,
+ 1844: 0x9928,
+ 1845: 0x8218,
+ 1846: 0x4E38,
+ 1847: 0x542B,
+ 1848: 0x5CB8,
+ 1849: 0x5DCC,
+ 1850: 0x73A9,
+ 1851: 0x764C,
+ 1852: 0x773C,
+ 1853: 0x5CA9,
+ 1854: 0x7FEB,
+ 1855: 0x8D0B,
+ 1856: 0x96C1,
+ 1857: 0x9811,
+ 1858: 0x9854,
+ 1859: 0x9858,
+ 1860: 0x4F01,
+ 1861: 0x4F0E,
+ 1862: 0x5371,
+ 1863: 0x559C,
+ 1864: 0x5668,
+ 1865: 0x57FA,
+ 1866: 0x5947,
+ 1867: 0x5B09,
+ 1868: 0x5BC4,
+ 1869: 0x5C90,
+ 1870: 0x5E0C,
+ 1871: 0x5E7E,
+ 1872: 0x5FCC,
+ 1873: 0x63EE,
+ 1874: 0x673A,
+ 1875: 0x65D7,
+ 1876: 0x65E2,
+ 1877: 0x671F,
+ 1878: 0x68CB,
+ 1879: 0x68C4,
+ 1880: 0x6A5F,
+ 1881: 0x5E30,
+ 1882: 0x6BC5,
+ 1883: 0x6C17,
+ 1884: 0x6C7D,
+ 1885: 0x757F,
+ 1886: 0x7948,
+ 1887: 0x5B63,
+ 1888: 0x7A00,
+ 1889: 0x7D00,
+ 1890: 0x5FBD,
+ 1891: 0x898F,
+ 1892: 0x8A18,
+ 1893: 0x8CB4,
+ 1894: 0x8D77,
+ 1895: 0x8ECC,
+ 1896: 0x8F1D,
+ 1897: 0x98E2,
+ 1898: 0x9A0E,
+ 1899: 0x9B3C,
+ 1900: 0x4E80,
+ 1901: 0x507D,
+ 1902: 0x5100,
+ 1903: 0x5993,
+ 1904: 0x5B9C,
+ 1905: 0x622F,
+ 1906: 0x6280,
+ 1907: 0x64EC,
+ 1908: 0x6B3A,
+ 1909: 0x72A0,
+ 1910: 0x7591,
+ 1911: 0x7947,
+ 1912: 0x7FA9,
+ 1913: 0x87FB,
+ 1914: 0x8ABC,
+ 1915: 0x8B70,
+ 1916: 0x63AC,
+ 1917: 0x83CA,
+ 1918: 0x97A0,
+ 1919: 0x5409,
+ 1920: 0x5403,
+ 1921: 0x55AB,
+ 1922: 0x6854,
+ 1923: 0x6A58,
+ 1924: 0x8A70,
+ 1925: 0x7827,
+ 1926: 0x6775,
+ 1927: 0x9ECD,
+ 1928: 0x5374,
+ 1929: 0x5BA2,
+ 1930: 0x811A,
+ 1931: 0x8650,
+ 1932: 0x9006,
+ 1933: 0x4E18,
+ 1934: 0x4E45,
+ 1935: 0x4EC7,
+ 1936: 0x4F11,
+ 1937: 0x53CA,
+ 1938: 0x5438,
+ 1939: 0x5BAE,
+ 1940: 0x5F13,
+ 1941: 0x6025,
+ 1942: 0x6551,
+ 1943: 0x673D,
+ 1944: 0x6C42,
+ 1945: 0x6C72,
+ 1946: 0x6CE3,
+ 1947: 0x7078,
+ 1948: 0x7403,
+ 1949: 0x7A76,
+ 1950: 0x7AAE,
+ 1951: 0x7B08,
+ 1952: 0x7D1A,
+ 1953: 0x7CFE,
+ 1954: 0x7D66,
+ 1955: 0x65E7,
+ 1956: 0x725B,
+ 1957: 0x53BB,
+ 1958: 0x5C45,
+ 1959: 0x5DE8,
+ 1960: 0x62D2,
+ 1961: 0x62E0,
+ 1962: 0x6319,
+ 1963: 0x6E20,
+ 1964: 0x865A,
+ 1965: 0x8A31,
+ 1966: 0x8DDD,
+ 1967: 0x92F8,
+ 1968: 0x6F01,
+ 1969: 0x79A6,
+ 1970: 0x9B5A,
+ 1971: 0x4EA8,
+ 1972: 0x4EAB,
+ 1973: 0x4EAC,
+ 1974: 0x4F9B,
+ 1975: 0x4FA0,
+ 1976: 0x50D1,
+ 1977: 0x5147,
+ 1978: 0x7AF6,
+ 1979: 0x5171,
+ 1980: 0x51F6,
+ 1981: 0x5354,
+ 1982: 0x5321,
+ 1983: 0x537F,
+ 1984: 0x53EB,
+ 1985: 0x55AC,
+ 1986: 0x5883,
+ 1987: 0x5CE1,
+ 1988: 0x5F37,
+ 1989: 0x5F4A,
+ 1990: 0x602F,
+ 1991: 0x6050,
+ 1992: 0x606D,
+ 1993: 0x631F,
+ 1994: 0x6559,
+ 1995: 0x6A4B,
+ 1996: 0x6CC1,
+ 1997: 0x72C2,
+ 1998: 0x72ED,
+ 1999: 0x77EF,
+ 2000: 0x80F8,
+ 2001: 0x8105,
+ 2002: 0x8208,
+ 2003: 0x854E,
+ 2004: 0x90F7,
+ 2005: 0x93E1,
+ 2006: 0x97FF,
+ 2007: 0x9957,
+ 2008: 0x9A5A,
+ 2009: 0x4EF0,
+ 2010: 0x51DD,
+ 2011: 0x5C2D,
+ 2012: 0x6681,
+ 2013: 0x696D,
+ 2014: 0x5C40,
+ 2015: 0x66F2,
+ 2016: 0x6975,
+ 2017: 0x7389,
+ 2018: 0x6850,
+ 2019: 0x7C81,
+ 2020: 0x50C5,
+ 2021: 0x52E4,
+ 2022: 0x5747,
+ 2023: 0x5DFE,
+ 2024: 0x9326,
+ 2025: 0x65A4,
+ 2026: 0x6B23,
+ 2027: 0x6B3D,
+ 2028: 0x7434,
+ 2029: 0x7981,
+ 2030: 0x79BD,
+ 2031: 0x7B4B,
+ 2032: 0x7DCA,
+ 2033: 0x82B9,
+ 2034: 0x83CC,
+ 2035: 0x887F,
+ 2036: 0x895F,
+ 2037: 0x8B39,
+ 2038: 0x8FD1,
+ 2039: 0x91D1,
+ 2040: 0x541F,
+ 2041: 0x9280,
+ 2042: 0x4E5D,
+ 2043: 0x5036,
+ 2044: 0x53E5,
+ 2045: 0x533A,
+ 2046: 0x72D7,
+ 2047: 0x7396,
+ 2048: 0x77E9,
+ 2049: 0x82E6,
+ 2050: 0x8EAF,
+ 2051: 0x99C6,
+ 2052: 0x99C8,
+ 2053: 0x99D2,
+ 2054: 0x5177,
+ 2055: 0x611A,
+ 2056: 0x865E,
+ 2057: 0x55B0,
+ 2058: 0x7A7A,
+ 2059: 0x5076,
+ 2060: 0x5BD3,
+ 2061: 0x9047,
+ 2062: 0x9685,
+ 2063: 0x4E32,
+ 2064: 0x6ADB,
+ 2065: 0x91E7,
+ 2066: 0x5C51,
+ 2067: 0x5C48,
+ 2068: 0x6398,
+ 2069: 0x7A9F,
+ 2070: 0x6C93,
+ 2071: 0x9774,
+ 2072: 0x8F61,
+ 2073: 0x7AAA,
+ 2074: 0x718A,
+ 2075: 0x9688,
+ 2076: 0x7C82,
+ 2077: 0x6817,
+ 2078: 0x7E70,
+ 2079: 0x6851,
+ 2080: 0x936C,
+ 2081: 0x52F2,
+ 2082: 0x541B,
+ 2083: 0x85AB,
+ 2084: 0x8A13,
+ 2085: 0x7FA4,
+ 2086: 0x8ECD,
+ 2087: 0x90E1,
+ 2088: 0x5366,
+ 2089: 0x8888,
+ 2090: 0x7941,
+ 2091: 0x4FC2,
+ 2092: 0x50BE,
+ 2093: 0x5211,
+ 2094: 0x5144,
+ 2095: 0x5553,
+ 2096: 0x572D,
+ 2097: 0x73EA,
+ 2098: 0x578B,
+ 2099: 0x5951,
+ 2100: 0x5F62,
+ 2101: 0x5F84,
+ 2102: 0x6075,
+ 2103: 0x6176,
+ 2104: 0x6167,
+ 2105: 0x61A9,
+ 2106: 0x63B2,
+ 2107: 0x643A,
+ 2108: 0x656C,
+ 2109: 0x666F,
+ 2110: 0x6842,
+ 2111: 0x6E13,
+ 2112: 0x7566,
+ 2113: 0x7A3D,
+ 2114: 0x7CFB,
+ 2115: 0x7D4C,
+ 2116: 0x7D99,
+ 2117: 0x7E4B,
+ 2118: 0x7F6B,
+ 2119: 0x830E,
+ 2120: 0x834A,
+ 2121: 0x86CD,
+ 2122: 0x8A08,
+ 2123: 0x8A63,
+ 2124: 0x8B66,
+ 2125: 0x8EFD,
+ 2126: 0x981A,
+ 2127: 0x9D8F,
+ 2128: 0x82B8,
+ 2129: 0x8FCE,
+ 2130: 0x9BE8,
+ 2131: 0x5287,
+ 2132: 0x621F,
+ 2133: 0x6483,
+ 2134: 0x6FC0,
+ 2135: 0x9699,
+ 2136: 0x6841,
+ 2137: 0x5091,
+ 2138: 0x6B20,
+ 2139: 0x6C7A,
+ 2140: 0x6F54,
+ 2141: 0x7A74,
+ 2142: 0x7D50,
+ 2143: 0x8840,
+ 2144: 0x8A23,
+ 2145: 0x6708,
+ 2146: 0x4EF6,
+ 2147: 0x5039,
+ 2148: 0x5026,
+ 2149: 0x5065,
+ 2150: 0x517C,
+ 2151: 0x5238,
+ 2152: 0x5263,
+ 2153: 0x55A7,
+ 2154: 0x570F,
+ 2155: 0x5805,
+ 2156: 0x5ACC,
+ 2157: 0x5EFA,
+ 2158: 0x61B2,
+ 2159: 0x61F8,
+ 2160: 0x62F3,
+ 2161: 0x6372,
+ 2162: 0x691C,
+ 2163: 0x6A29,
+ 2164: 0x727D,
+ 2165: 0x72AC,
+ 2166: 0x732E,
+ 2167: 0x7814,
+ 2168: 0x786F,
+ 2169: 0x7D79,
+ 2170: 0x770C,
+ 2171: 0x80A9,
+ 2172: 0x898B,
+ 2173: 0x8B19,
+ 2174: 0x8CE2,
+ 2175: 0x8ED2,
+ 2176: 0x9063,
+ 2177: 0x9375,
+ 2178: 0x967A,
+ 2179: 0x9855,
+ 2180: 0x9A13,
+ 2181: 0x9E78,
+ 2182: 0x5143,
+ 2183: 0x539F,
+ 2184: 0x53B3,
+ 2185: 0x5E7B,
+ 2186: 0x5F26,
+ 2187: 0x6E1B,
+ 2188: 0x6E90,
+ 2189: 0x7384,
+ 2190: 0x73FE,
+ 2191: 0x7D43,
+ 2192: 0x8237,
+ 2193: 0x8A00,
+ 2194: 0x8AFA,
+ 2195: 0x9650,
+ 2196: 0x4E4E,
+ 2197: 0x500B,
+ 2198: 0x53E4,
+ 2199: 0x547C,
+ 2200: 0x56FA,
+ 2201: 0x59D1,
+ 2202: 0x5B64,
+ 2203: 0x5DF1,
+ 2204: 0x5EAB,
+ 2205: 0x5F27,
+ 2206: 0x6238,
+ 2207: 0x6545,
+ 2208: 0x67AF,
+ 2209: 0x6E56,
+ 2210: 0x72D0,
+ 2211: 0x7CCA,
+ 2212: 0x88B4,
+ 2213: 0x80A1,
+ 2214: 0x80E1,
+ 2215: 0x83F0,
+ 2216: 0x864E,
+ 2217: 0x8A87,
+ 2218: 0x8DE8,
+ 2219: 0x9237,
+ 2220: 0x96C7,
+ 2221: 0x9867,
+ 2222: 0x9F13,
+ 2223: 0x4E94,
+ 2224: 0x4E92,
+ 2225: 0x4F0D,
+ 2226: 0x5348,
+ 2227: 0x5449,
+ 2228: 0x543E,
+ 2229: 0x5A2F,
+ 2230: 0x5F8C,
+ 2231: 0x5FA1,
+ 2232: 0x609F,
+ 2233: 0x68A7,
+ 2234: 0x6A8E,
+ 2235: 0x745A,
+ 2236: 0x7881,
+ 2237: 0x8A9E,
+ 2238: 0x8AA4,
+ 2239: 0x8B77,
+ 2240: 0x9190,
+ 2241: 0x4E5E,
+ 2242: 0x9BC9,
+ 2243: 0x4EA4,
+ 2244: 0x4F7C,
+ 2245: 0x4FAF,
+ 2246: 0x5019,
+ 2247: 0x5016,
+ 2248: 0x5149,
+ 2249: 0x516C,
+ 2250: 0x529F,
+ 2251: 0x52B9,
+ 2252: 0x52FE,
+ 2253: 0x539A,
+ 2254: 0x53E3,
+ 2255: 0x5411,
+ 2256: 0x540E,
+ 2257: 0x5589,
+ 2258: 0x5751,
+ 2259: 0x57A2,
+ 2260: 0x597D,
+ 2261: 0x5B54,
+ 2262: 0x5B5D,
+ 2263: 0x5B8F,
+ 2264: 0x5DE5,
+ 2265: 0x5DE7,
+ 2266: 0x5DF7,
+ 2267: 0x5E78,
+ 2268: 0x5E83,
+ 2269: 0x5E9A,
+ 2270: 0x5EB7,
+ 2271: 0x5F18,
+ 2272: 0x6052,
+ 2273: 0x614C,
+ 2274: 0x6297,
+ 2275: 0x62D8,
+ 2276: 0x63A7,
+ 2277: 0x653B,
+ 2278: 0x6602,
+ 2279: 0x6643,
+ 2280: 0x66F4,
+ 2281: 0x676D,
+ 2282: 0x6821,
+ 2283: 0x6897,
+ 2284: 0x69CB,
+ 2285: 0x6C5F,
+ 2286: 0x6D2A,
+ 2287: 0x6D69,
+ 2288: 0x6E2F,
+ 2289: 0x6E9D,
+ 2290: 0x7532,
+ 2291: 0x7687,
+ 2292: 0x786C,
+ 2293: 0x7A3F,
+ 2294: 0x7CE0,
+ 2295: 0x7D05,
+ 2296: 0x7D18,
+ 2297: 0x7D5E,
+ 2298: 0x7DB1,
+ 2299: 0x8015,
+ 2300: 0x8003,
+ 2301: 0x80AF,
+ 2302: 0x80B1,
+ 2303: 0x8154,
+ 2304: 0x818F,
+ 2305: 0x822A,
+ 2306: 0x8352,
+ 2307: 0x884C,
+ 2308: 0x8861,
+ 2309: 0x8B1B,
+ 2310: 0x8CA2,
+ 2311: 0x8CFC,
+ 2312: 0x90CA,
+ 2313: 0x9175,
+ 2314: 0x9271,
+ 2315: 0x783F,
+ 2316: 0x92FC,
+ 2317: 0x95A4,
+ 2318: 0x964D,
+ 2319: 0x9805,
+ 2320: 0x9999,
+ 2321: 0x9AD8,
+ 2322: 0x9D3B,
+ 2323: 0x525B,
+ 2324: 0x52AB,
+ 2325: 0x53F7,
+ 2326: 0x5408,
+ 2327: 0x58D5,
+ 2328: 0x62F7,
+ 2329: 0x6FE0,
+ 2330: 0x8C6A,
+ 2331: 0x8F5F,
+ 2332: 0x9EB9,
+ 2333: 0x514B,
+ 2334: 0x523B,
+ 2335: 0x544A,
+ 2336: 0x56FD,
+ 2337: 0x7A40,
+ 2338: 0x9177,
+ 2339: 0x9D60,
+ 2340: 0x9ED2,
+ 2341: 0x7344,
+ 2342: 0x6F09,
+ 2343: 0x8170,
+ 2344: 0x7511,
+ 2345: 0x5FFD,
+ 2346: 0x60DA,
+ 2347: 0x9AA8,
+ 2348: 0x72DB,
+ 2349: 0x8FBC,
+ 2350: 0x6B64,
+ 2351: 0x9803,
+ 2352: 0x4ECA,
+ 2353: 0x56F0,
+ 2354: 0x5764,
+ 2355: 0x58BE,
+ 2356: 0x5A5A,
+ 2357: 0x6068,
+ 2358: 0x61C7,
+ 2359: 0x660F,
+ 2360: 0x6606,
+ 2361: 0x6839,
+ 2362: 0x68B1,
+ 2363: 0x6DF7,
+ 2364: 0x75D5,
+ 2365: 0x7D3A,
+ 2366: 0x826E,
+ 2367: 0x9B42,
+ 2368: 0x4E9B,
+ 2369: 0x4F50,
+ 2370: 0x53C9,
+ 2371: 0x5506,
+ 2372: 0x5D6F,
+ 2373: 0x5DE6,
+ 2374: 0x5DEE,
+ 2375: 0x67FB,
+ 2376: 0x6C99,
+ 2377: 0x7473,
+ 2378: 0x7802,
+ 2379: 0x8A50,
+ 2380: 0x9396,
+ 2381: 0x88DF,
+ 2382: 0x5750,
+ 2383: 0x5EA7,
+ 2384: 0x632B,
+ 2385: 0x50B5,
+ 2386: 0x50AC,
+ 2387: 0x518D,
+ 2388: 0x6700,
+ 2389: 0x54C9,
+ 2390: 0x585E,
+ 2391: 0x59BB,
+ 2392: 0x5BB0,
+ 2393: 0x5F69,
+ 2394: 0x624D,
+ 2395: 0x63A1,
+ 2396: 0x683D,
+ 2397: 0x6B73,
+ 2398: 0x6E08,
+ 2399: 0x707D,
+ 2400: 0x91C7,
+ 2401: 0x7280,
+ 2402: 0x7815,
+ 2403: 0x7826,
+ 2404: 0x796D,
+ 2405: 0x658E,
+ 2406: 0x7D30,
+ 2407: 0x83DC,
+ 2408: 0x88C1,
+ 2409: 0x8F09,
+ 2410: 0x969B,
+ 2411: 0x5264,
+ 2412: 0x5728,
+ 2413: 0x6750,
+ 2414: 0x7F6A,
+ 2415: 0x8CA1,
+ 2416: 0x51B4,
+ 2417: 0x5742,
+ 2418: 0x962A,
+ 2419: 0x583A,
+ 2420: 0x698A,
+ 2421: 0x80B4,
+ 2422: 0x54B2,
+ 2423: 0x5D0E,
+ 2424: 0x57FC,
+ 2425: 0x7895,
+ 2426: 0x9DFA,
+ 2427: 0x4F5C,
+ 2428: 0x524A,
+ 2429: 0x548B,
+ 2430: 0x643E,
+ 2431: 0x6628,
+ 2432: 0x6714,
+ 2433: 0x67F5,
+ 2434: 0x7A84,
+ 2435: 0x7B56,
+ 2436: 0x7D22,
+ 2437: 0x932F,
+ 2438: 0x685C,
+ 2439: 0x9BAD,
+ 2440: 0x7B39,
+ 2441: 0x5319,
+ 2442: 0x518A,
+ 2443: 0x5237,
+ 2444: 0x5BDF,
+ 2445: 0x62F6,
+ 2446: 0x64AE,
+ 2447: 0x64E6,
+ 2448: 0x672D,
+ 2449: 0x6BBA,
+ 2450: 0x85A9,
+ 2451: 0x96D1,
+ 2452: 0x7690,
+ 2453: 0x9BD6,
+ 2454: 0x634C,
+ 2455: 0x9306,
+ 2456: 0x9BAB,
+ 2457: 0x76BF,
+ 2458: 0x6652,
+ 2459: 0x4E09,
+ 2460: 0x5098,
+ 2461: 0x53C2,
+ 2462: 0x5C71,
+ 2463: 0x60E8,
+ 2464: 0x6492,
+ 2465: 0x6563,
+ 2466: 0x685F,
+ 2467: 0x71E6,
+ 2468: 0x73CA,
+ 2469: 0x7523,
+ 2470: 0x7B97,
+ 2471: 0x7E82,
+ 2472: 0x8695,
+ 2473: 0x8B83,
+ 2474: 0x8CDB,
+ 2475: 0x9178,
+ 2476: 0x9910,
+ 2477: 0x65AC,
+ 2478: 0x66AB,
+ 2479: 0x6B8B,
+ 2480: 0x4ED5,
+ 2481: 0x4ED4,
+ 2482: 0x4F3A,
+ 2483: 0x4F7F,
+ 2484: 0x523A,
+ 2485: 0x53F8,
+ 2486: 0x53F2,
+ 2487: 0x55E3,
+ 2488: 0x56DB,
+ 2489: 0x58EB,
+ 2490: 0x59CB,
+ 2491: 0x59C9,
+ 2492: 0x59FF,
+ 2493: 0x5B50,
+ 2494: 0x5C4D,
+ 2495: 0x5E02,
+ 2496: 0x5E2B,
+ 2497: 0x5FD7,
+ 2498: 0x601D,
+ 2499: 0x6307,
+ 2500: 0x652F,
+ 2501: 0x5B5C,
+ 2502: 0x65AF,
+ 2503: 0x65BD,
+ 2504: 0x65E8,
+ 2505: 0x679D,
+ 2506: 0x6B62,
+ 2507: 0x6B7B,
+ 2508: 0x6C0F,
+ 2509: 0x7345,
+ 2510: 0x7949,
+ 2511: 0x79C1,
+ 2512: 0x7CF8,
+ 2513: 0x7D19,
+ 2514: 0x7D2B,
+ 2515: 0x80A2,
+ 2516: 0x8102,
+ 2517: 0x81F3,
+ 2518: 0x8996,
+ 2519: 0x8A5E,
+ 2520: 0x8A69,
+ 2521: 0x8A66,
+ 2522: 0x8A8C,
+ 2523: 0x8AEE,
+ 2524: 0x8CC7,
+ 2525: 0x8CDC,
+ 2526: 0x96CC,
+ 2527: 0x98FC,
+ 2528: 0x6B6F,
+ 2529: 0x4E8B,
+ 2530: 0x4F3C,
+ 2531: 0x4F8D,
+ 2532: 0x5150,
+ 2533: 0x5B57,
+ 2534: 0x5BFA,
+ 2535: 0x6148,
+ 2536: 0x6301,
+ 2537: 0x6642,
+ 2538: 0x6B21,
+ 2539: 0x6ECB,
+ 2540: 0x6CBB,
+ 2541: 0x723E,
+ 2542: 0x74BD,
+ 2543: 0x75D4,
+ 2544: 0x78C1,
+ 2545: 0x793A,
+ 2546: 0x800C,
+ 2547: 0x8033,
+ 2548: 0x81EA,
+ 2549: 0x8494,
+ 2550: 0x8F9E,
+ 2551: 0x6C50,
+ 2552: 0x9E7F,
+ 2553: 0x5F0F,
+ 2554: 0x8B58,
+ 2555: 0x9D2B,
+ 2556: 0x7AFA,
+ 2557: 0x8EF8,
+ 2558: 0x5B8D,
+ 2559: 0x96EB,
+ 2560: 0x4E03,
+ 2561: 0x53F1,
+ 2562: 0x57F7,
+ 2563: 0x5931,
+ 2564: 0x5AC9,
+ 2565: 0x5BA4,
+ 2566: 0x6089,
+ 2567: 0x6E7F,
+ 2568: 0x6F06,
+ 2569: 0x75BE,
+ 2570: 0x8CEA,
+ 2571: 0x5B9F,
+ 2572: 0x8500,
+ 2573: 0x7BE0,
+ 2574: 0x5072,
+ 2575: 0x67F4,
+ 2576: 0x829D,
+ 2577: 0x5C61,
+ 2578: 0x854A,
+ 2579: 0x7E1E,
+ 2580: 0x820E,
+ 2581: 0x5199,
+ 2582: 0x5C04,
+ 2583: 0x6368,
+ 2584: 0x8D66,
+ 2585: 0x659C,
+ 2586: 0x716E,
+ 2587: 0x793E,
+ 2588: 0x7D17,
+ 2589: 0x8005,
+ 2590: 0x8B1D,
+ 2591: 0x8ECA,
+ 2592: 0x906E,
+ 2593: 0x86C7,
+ 2594: 0x90AA,
+ 2595: 0x501F,
+ 2596: 0x52FA,
+ 2597: 0x5C3A,
+ 2598: 0x6753,
+ 2599: 0x707C,
+ 2600: 0x7235,
+ 2601: 0x914C,
+ 2602: 0x91C8,
+ 2603: 0x932B,
+ 2604: 0x82E5,
+ 2605: 0x5BC2,
+ 2606: 0x5F31,
+ 2607: 0x60F9,
+ 2608: 0x4E3B,
+ 2609: 0x53D6,
+ 2610: 0x5B88,
+ 2611: 0x624B,
+ 2612: 0x6731,
+ 2613: 0x6B8A,
+ 2614: 0x72E9,
+ 2615: 0x73E0,
+ 2616: 0x7A2E,
+ 2617: 0x816B,
+ 2618: 0x8DA3,
+ 2619: 0x9152,
+ 2620: 0x9996,
+ 2621: 0x5112,
+ 2622: 0x53D7,
+ 2623: 0x546A,
+ 2624: 0x5BFF,
+ 2625: 0x6388,
+ 2626: 0x6A39,
+ 2627: 0x7DAC,
+ 2628: 0x9700,
+ 2629: 0x56DA,
+ 2630: 0x53CE,
+ 2631: 0x5468,
+ 2632: 0x5B97,
+ 2633: 0x5C31,
+ 2634: 0x5DDE,
+ 2635: 0x4FEE,
+ 2636: 0x6101,
+ 2637: 0x62FE,
+ 2638: 0x6D32,
+ 2639: 0x79C0,
+ 2640: 0x79CB,
+ 2641: 0x7D42,
+ 2642: 0x7E4D,
+ 2643: 0x7FD2,
+ 2644: 0x81ED,
+ 2645: 0x821F,
+ 2646: 0x8490,
+ 2647: 0x8846,
+ 2648: 0x8972,
+ 2649: 0x8B90,
+ 2650: 0x8E74,
+ 2651: 0x8F2F,
+ 2652: 0x9031,
+ 2653: 0x914B,
+ 2654: 0x916C,
+ 2655: 0x96C6,
+ 2656: 0x919C,
+ 2657: 0x4EC0,
+ 2658: 0x4F4F,
+ 2659: 0x5145,
+ 2660: 0x5341,
+ 2661: 0x5F93,
+ 2662: 0x620E,
+ 2663: 0x67D4,
+ 2664: 0x6C41,
+ 2665: 0x6E0B,
+ 2666: 0x7363,
+ 2667: 0x7E26,
+ 2668: 0x91CD,
+ 2669: 0x9283,
+ 2670: 0x53D4,
+ 2671: 0x5919,
+ 2672: 0x5BBF,
+ 2673: 0x6DD1,
+ 2674: 0x795D,
+ 2675: 0x7E2E,
+ 2676: 0x7C9B,
+ 2677: 0x587E,
+ 2678: 0x719F,
+ 2679: 0x51FA,
+ 2680: 0x8853,
+ 2681: 0x8FF0,
+ 2682: 0x4FCA,
+ 2683: 0x5CFB,
+ 2684: 0x6625,
+ 2685: 0x77AC,
+ 2686: 0x7AE3,
+ 2687: 0x821C,
+ 2688: 0x99FF,
+ 2689: 0x51C6,
+ 2690: 0x5FAA,
+ 2691: 0x65EC,
+ 2692: 0x696F,
+ 2693: 0x6B89,
+ 2694: 0x6DF3,
+ 2695: 0x6E96,
+ 2696: 0x6F64,
+ 2697: 0x76FE,
+ 2698: 0x7D14,
+ 2699: 0x5DE1,
+ 2700: 0x9075,
+ 2701: 0x9187,
+ 2702: 0x9806,
+ 2703: 0x51E6,
+ 2704: 0x521D,
+ 2705: 0x6240,
+ 2706: 0x6691,
+ 2707: 0x66D9,
+ 2708: 0x6E1A,
+ 2709: 0x5EB6,
+ 2710: 0x7DD2,
+ 2711: 0x7F72,
+ 2712: 0x66F8,
+ 2713: 0x85AF,
+ 2714: 0x85F7,
+ 2715: 0x8AF8,
+ 2716: 0x52A9,
+ 2717: 0x53D9,
+ 2718: 0x5973,
+ 2719: 0x5E8F,
+ 2720: 0x5F90,
+ 2721: 0x6055,
+ 2722: 0x92E4,
+ 2723: 0x9664,
+ 2724: 0x50B7,
+ 2725: 0x511F,
+ 2726: 0x52DD,
+ 2727: 0x5320,
+ 2728: 0x5347,
+ 2729: 0x53EC,
+ 2730: 0x54E8,
+ 2731: 0x5546,
+ 2732: 0x5531,
+ 2733: 0x5617,
+ 2734: 0x5968,
+ 2735: 0x59BE,
+ 2736: 0x5A3C,
+ 2737: 0x5BB5,
+ 2738: 0x5C06,
+ 2739: 0x5C0F,
+ 2740: 0x5C11,
+ 2741: 0x5C1A,
+ 2742: 0x5E84,
+ 2743: 0x5E8A,
+ 2744: 0x5EE0,
+ 2745: 0x5F70,
+ 2746: 0x627F,
+ 2747: 0x6284,
+ 2748: 0x62DB,
+ 2749: 0x638C,
+ 2750: 0x6377,
+ 2751: 0x6607,
+ 2752: 0x660C,
+ 2753: 0x662D,
+ 2754: 0x6676,
+ 2755: 0x677E,
+ 2756: 0x68A2,
+ 2757: 0x6A1F,
+ 2758: 0x6A35,
+ 2759: 0x6CBC,
+ 2760: 0x6D88,
+ 2761: 0x6E09,
+ 2762: 0x6E58,
+ 2763: 0x713C,
+ 2764: 0x7126,
+ 2765: 0x7167,
+ 2766: 0x75C7,
+ 2767: 0x7701,
+ 2768: 0x785D,
+ 2769: 0x7901,
+ 2770: 0x7965,
+ 2771: 0x79F0,
+ 2772: 0x7AE0,
+ 2773: 0x7B11,
+ 2774: 0x7CA7,
+ 2775: 0x7D39,
+ 2776: 0x8096,
+ 2777: 0x83D6,
+ 2778: 0x848B,
+ 2779: 0x8549,
+ 2780: 0x885D,
+ 2781: 0x88F3,
+ 2782: 0x8A1F,
+ 2783: 0x8A3C,
+ 2784: 0x8A54,
+ 2785: 0x8A73,
+ 2786: 0x8C61,
+ 2787: 0x8CDE,
+ 2788: 0x91A4,
+ 2789: 0x9266,
+ 2790: 0x937E,
+ 2791: 0x9418,
+ 2792: 0x969C,
+ 2793: 0x9798,
+ 2794: 0x4E0A,
+ 2795: 0x4E08,
+ 2796: 0x4E1E,
+ 2797: 0x4E57,
+ 2798: 0x5197,
+ 2799: 0x5270,
+ 2800: 0x57CE,
+ 2801: 0x5834,
+ 2802: 0x58CC,
+ 2803: 0x5B22,
+ 2804: 0x5E38,
+ 2805: 0x60C5,
+ 2806: 0x64FE,
+ 2807: 0x6761,
+ 2808: 0x6756,
+ 2809: 0x6D44,
+ 2810: 0x72B6,
+ 2811: 0x7573,
+ 2812: 0x7A63,
+ 2813: 0x84B8,
+ 2814: 0x8B72,
+ 2815: 0x91B8,
+ 2816: 0x9320,
+ 2817: 0x5631,
+ 2818: 0x57F4,
+ 2819: 0x98FE,
+ 2820: 0x62ED,
+ 2821: 0x690D,
+ 2822: 0x6B96,
+ 2823: 0x71ED,
+ 2824: 0x7E54,
+ 2825: 0x8077,
+ 2826: 0x8272,
+ 2827: 0x89E6,
+ 2828: 0x98DF,
+ 2829: 0x8755,
+ 2830: 0x8FB1,
+ 2831: 0x5C3B,
+ 2832: 0x4F38,
+ 2833: 0x4FE1,
+ 2834: 0x4FB5,
+ 2835: 0x5507,
+ 2836: 0x5A20,
+ 2837: 0x5BDD,
+ 2838: 0x5BE9,
+ 2839: 0x5FC3,
+ 2840: 0x614E,
+ 2841: 0x632F,
+ 2842: 0x65B0,
+ 2843: 0x664B,
+ 2844: 0x68EE,
+ 2845: 0x699B,
+ 2846: 0x6D78,
+ 2847: 0x6DF1,
+ 2848: 0x7533,
+ 2849: 0x75B9,
+ 2850: 0x771F,
+ 2851: 0x795E,
+ 2852: 0x79E6,
+ 2853: 0x7D33,
+ 2854: 0x81E3,
+ 2855: 0x82AF,
+ 2856: 0x85AA,
+ 2857: 0x89AA,
+ 2858: 0x8A3A,
+ 2859: 0x8EAB,
+ 2860: 0x8F9B,
+ 2861: 0x9032,
+ 2862: 0x91DD,
+ 2863: 0x9707,
+ 2864: 0x4EBA,
+ 2865: 0x4EC1,
+ 2866: 0x5203,
+ 2867: 0x5875,
+ 2868: 0x58EC,
+ 2869: 0x5C0B,
+ 2870: 0x751A,
+ 2871: 0x5C3D,
+ 2872: 0x814E,
+ 2873: 0x8A0A,
+ 2874: 0x8FC5,
+ 2875: 0x9663,
+ 2876: 0x976D,
+ 2877: 0x7B25,
+ 2878: 0x8ACF,
+ 2879: 0x9808,
+ 2880: 0x9162,
+ 2881: 0x56F3,
+ 2882: 0x53A8,
+ 2883: 0x9017,
+ 2884: 0x5439,
+ 2885: 0x5782,
+ 2886: 0x5E25,
+ 2887: 0x63A8,
+ 2888: 0x6C34,
+ 2889: 0x708A,
+ 2890: 0x7761,
+ 2891: 0x7C8B,
+ 2892: 0x7FE0,
+ 2893: 0x8870,
+ 2894: 0x9042,
+ 2895: 0x9154,
+ 2896: 0x9310,
+ 2897: 0x9318,
+ 2898: 0x968F,
+ 2899: 0x745E,
+ 2900: 0x9AC4,
+ 2901: 0x5D07,
+ 2902: 0x5D69,
+ 2903: 0x6570,
+ 2904: 0x67A2,
+ 2905: 0x8DA8,
+ 2906: 0x96DB,
+ 2907: 0x636E,
+ 2908: 0x6749,
+ 2909: 0x6919,
+ 2910: 0x83C5,
+ 2911: 0x9817,
+ 2912: 0x96C0,
+ 2913: 0x88FE,
+ 2914: 0x6F84,
+ 2915: 0x647A,
+ 2916: 0x5BF8,
+ 2917: 0x4E16,
+ 2918: 0x702C,
+ 2919: 0x755D,
+ 2920: 0x662F,
+ 2921: 0x51C4,
+ 2922: 0x5236,
+ 2923: 0x52E2,
+ 2924: 0x59D3,
+ 2925: 0x5F81,
+ 2926: 0x6027,
+ 2927: 0x6210,
+ 2928: 0x653F,
+ 2929: 0x6574,
+ 2930: 0x661F,
+ 2931: 0x6674,
+ 2932: 0x68F2,
+ 2933: 0x6816,
+ 2934: 0x6B63,
+ 2935: 0x6E05,
+ 2936: 0x7272,
+ 2937: 0x751F,
+ 2938: 0x76DB,
+ 2939: 0x7CBE,
+ 2940: 0x8056,
+ 2941: 0x58F0,
+ 2942: 0x88FD,
+ 2943: 0x897F,
+ 2944: 0x8AA0,
+ 2945: 0x8A93,
+ 2946: 0x8ACB,
+ 2947: 0x901D,
+ 2948: 0x9192,
+ 2949: 0x9752,
+ 2950: 0x9759,
+ 2951: 0x6589,
+ 2952: 0x7A0E,
+ 2953: 0x8106,
+ 2954: 0x96BB,
+ 2955: 0x5E2D,
+ 2956: 0x60DC,
+ 2957: 0x621A,
+ 2958: 0x65A5,
+ 2959: 0x6614,
+ 2960: 0x6790,
+ 2961: 0x77F3,
+ 2962: 0x7A4D,
+ 2963: 0x7C4D,
+ 2964: 0x7E3E,
+ 2965: 0x810A,
+ 2966: 0x8CAC,
+ 2967: 0x8D64,
+ 2968: 0x8DE1,
+ 2969: 0x8E5F,
+ 2970: 0x78A9,
+ 2971: 0x5207,
+ 2972: 0x62D9,
+ 2973: 0x63A5,
+ 2974: 0x6442,
+ 2975: 0x6298,
+ 2976: 0x8A2D,
+ 2977: 0x7A83,
+ 2978: 0x7BC0,
+ 2979: 0x8AAC,
+ 2980: 0x96EA,
+ 2981: 0x7D76,
+ 2982: 0x820C,
+ 2983: 0x8749,
+ 2984: 0x4ED9,
+ 2985: 0x5148,
+ 2986: 0x5343,
+ 2987: 0x5360,
+ 2988: 0x5BA3,
+ 2989: 0x5C02,
+ 2990: 0x5C16,
+ 2991: 0x5DDD,
+ 2992: 0x6226,
+ 2993: 0x6247,
+ 2994: 0x64B0,
+ 2995: 0x6813,
+ 2996: 0x6834,
+ 2997: 0x6CC9,
+ 2998: 0x6D45,
+ 2999: 0x6D17,
+ 3000: 0x67D3,
+ 3001: 0x6F5C,
+ 3002: 0x714E,
+ 3003: 0x717D,
+ 3004: 0x65CB,
+ 3005: 0x7A7F,
+ 3006: 0x7BAD,
+ 3007: 0x7DDA,
+ 3008: 0x7E4A,
+ 3009: 0x7FA8,
+ 3010: 0x817A,
+ 3011: 0x821B,
+ 3012: 0x8239,
+ 3013: 0x85A6,
+ 3014: 0x8A6E,
+ 3015: 0x8CCE,
+ 3016: 0x8DF5,
+ 3017: 0x9078,
+ 3018: 0x9077,
+ 3019: 0x92AD,
+ 3020: 0x9291,
+ 3021: 0x9583,
+ 3022: 0x9BAE,
+ 3023: 0x524D,
+ 3024: 0x5584,
+ 3025: 0x6F38,
+ 3026: 0x7136,
+ 3027: 0x5168,
+ 3028: 0x7985,
+ 3029: 0x7E55,
+ 3030: 0x81B3,
+ 3031: 0x7CCE,
+ 3032: 0x564C,
+ 3033: 0x5851,
+ 3034: 0x5CA8,
+ 3035: 0x63AA,
+ 3036: 0x66FE,
+ 3037: 0x66FD,
+ 3038: 0x695A,
+ 3039: 0x72D9,
+ 3040: 0x758F,
+ 3041: 0x758E,
+ 3042: 0x790E,
+ 3043: 0x7956,
+ 3044: 0x79DF,
+ 3045: 0x7C97,
+ 3046: 0x7D20,
+ 3047: 0x7D44,
+ 3048: 0x8607,
+ 3049: 0x8A34,
+ 3050: 0x963B,
+ 3051: 0x9061,
+ 3052: 0x9F20,
+ 3053: 0x50E7,
+ 3054: 0x5275,
+ 3055: 0x53CC,
+ 3056: 0x53E2,
+ 3057: 0x5009,
+ 3058: 0x55AA,
+ 3059: 0x58EE,
+ 3060: 0x594F,
+ 3061: 0x723D,
+ 3062: 0x5B8B,
+ 3063: 0x5C64,
+ 3064: 0x531D,
+ 3065: 0x60E3,
+ 3066: 0x60F3,
+ 3067: 0x635C,
+ 3068: 0x6383,
+ 3069: 0x633F,
+ 3070: 0x63BB,
+ 3071: 0x64CD,
+ 3072: 0x65E9,
+ 3073: 0x66F9,
+ 3074: 0x5DE3,
+ 3075: 0x69CD,
+ 3076: 0x69FD,
+ 3077: 0x6F15,
+ 3078: 0x71E5,
+ 3079: 0x4E89,
+ 3080: 0x75E9,
+ 3081: 0x76F8,
+ 3082: 0x7A93,
+ 3083: 0x7CDF,
+ 3084: 0x7DCF,
+ 3085: 0x7D9C,
+ 3086: 0x8061,
+ 3087: 0x8349,
+ 3088: 0x8358,
+ 3089: 0x846C,
+ 3090: 0x84BC,
+ 3091: 0x85FB,
+ 3092: 0x88C5,
+ 3093: 0x8D70,
+ 3094: 0x9001,
+ 3095: 0x906D,
+ 3096: 0x9397,
+ 3097: 0x971C,
+ 3098: 0x9A12,
+ 3099: 0x50CF,
+ 3100: 0x5897,
+ 3101: 0x618E,
+ 3102: 0x81D3,
+ 3103: 0x8535,
+ 3104: 0x8D08,
+ 3105: 0x9020,
+ 3106: 0x4FC3,
+ 3107: 0x5074,
+ 3108: 0x5247,
+ 3109: 0x5373,
+ 3110: 0x606F,
+ 3111: 0x6349,
+ 3112: 0x675F,
+ 3113: 0x6E2C,
+ 3114: 0x8DB3,
+ 3115: 0x901F,
+ 3116: 0x4FD7,
+ 3117: 0x5C5E,
+ 3118: 0x8CCA,
+ 3119: 0x65CF,
+ 3120: 0x7D9A,
+ 3121: 0x5352,
+ 3122: 0x8896,
+ 3123: 0x5176,
+ 3124: 0x63C3,
+ 3125: 0x5B58,
+ 3126: 0x5B6B,
+ 3127: 0x5C0A,
+ 3128: 0x640D,
+ 3129: 0x6751,
+ 3130: 0x905C,
+ 3131: 0x4ED6,
+ 3132: 0x591A,
+ 3133: 0x592A,
+ 3134: 0x6C70,
+ 3135: 0x8A51,
+ 3136: 0x553E,
+ 3137: 0x5815,
+ 3138: 0x59A5,
+ 3139: 0x60F0,
+ 3140: 0x6253,
+ 3141: 0x67C1,
+ 3142: 0x8235,
+ 3143: 0x6955,
+ 3144: 0x9640,
+ 3145: 0x99C4,
+ 3146: 0x9A28,
+ 3147: 0x4F53,
+ 3148: 0x5806,
+ 3149: 0x5BFE,
+ 3150: 0x8010,
+ 3151: 0x5CB1,
+ 3152: 0x5E2F,
+ 3153: 0x5F85,
+ 3154: 0x6020,
+ 3155: 0x614B,
+ 3156: 0x6234,
+ 3157: 0x66FF,
+ 3158: 0x6CF0,
+ 3159: 0x6EDE,
+ 3160: 0x80CE,
+ 3161: 0x817F,
+ 3162: 0x82D4,
+ 3163: 0x888B,
+ 3164: 0x8CB8,
+ 3165: 0x9000,
+ 3166: 0x902E,
+ 3167: 0x968A,
+ 3168: 0x9EDB,
+ 3169: 0x9BDB,
+ 3170: 0x4EE3,
+ 3171: 0x53F0,
+ 3172: 0x5927,
+ 3173: 0x7B2C,
+ 3174: 0x918D,
+ 3175: 0x984C,
+ 3176: 0x9DF9,
+ 3177: 0x6EDD,
+ 3178: 0x7027,
+ 3179: 0x5353,
+ 3180: 0x5544,
+ 3181: 0x5B85,
+ 3182: 0x6258,
+ 3183: 0x629E,
+ 3184: 0x62D3,
+ 3185: 0x6CA2,
+ 3186: 0x6FEF,
+ 3187: 0x7422,
+ 3188: 0x8A17,
+ 3189: 0x9438,
+ 3190: 0x6FC1,
+ 3191: 0x8AFE,
+ 3192: 0x8338,
+ 3193: 0x51E7,
+ 3194: 0x86F8,
+ 3195: 0x53EA,
+ 3196: 0x53E9,
+ 3197: 0x4F46,
+ 3198: 0x9054,
+ 3199: 0x8FB0,
+ 3200: 0x596A,
+ 3201: 0x8131,
+ 3202: 0x5DFD,
+ 3203: 0x7AEA,
+ 3204: 0x8FBF,
+ 3205: 0x68DA,
+ 3206: 0x8C37,
+ 3207: 0x72F8,
+ 3208: 0x9C48,
+ 3209: 0x6A3D,
+ 3210: 0x8AB0,
+ 3211: 0x4E39,
+ 3212: 0x5358,
+ 3213: 0x5606,
+ 3214: 0x5766,
+ 3215: 0x62C5,
+ 3216: 0x63A2,
+ 3217: 0x65E6,
+ 3218: 0x6B4E,
+ 3219: 0x6DE1,
+ 3220: 0x6E5B,
+ 3221: 0x70AD,
+ 3222: 0x77ED,
+ 3223: 0x7AEF,
+ 3224: 0x7BAA,
+ 3225: 0x7DBB,
+ 3226: 0x803D,
+ 3227: 0x80C6,
+ 3228: 0x86CB,
+ 3229: 0x8A95,
+ 3230: 0x935B,
+ 3231: 0x56E3,
+ 3232: 0x58C7,
+ 3233: 0x5F3E,
+ 3234: 0x65AD,
+ 3235: 0x6696,
+ 3236: 0x6A80,
+ 3237: 0x6BB5,
+ 3238: 0x7537,
+ 3239: 0x8AC7,
+ 3240: 0x5024,
+ 3241: 0x77E5,
+ 3242: 0x5730,
+ 3243: 0x5F1B,
+ 3244: 0x6065,
+ 3245: 0x667A,
+ 3246: 0x6C60,
+ 3247: 0x75F4,
+ 3248: 0x7A1A,
+ 3249: 0x7F6E,
+ 3250: 0x81F4,
+ 3251: 0x8718,
+ 3252: 0x9045,
+ 3253: 0x99B3,
+ 3254: 0x7BC9,
+ 3255: 0x755C,
+ 3256: 0x7AF9,
+ 3257: 0x7B51,
+ 3258: 0x84C4,
+ 3259: 0x9010,
+ 3260: 0x79E9,
+ 3261: 0x7A92,
+ 3262: 0x8336,
+ 3263: 0x5AE1,
+ 3264: 0x7740,
+ 3265: 0x4E2D,
+ 3266: 0x4EF2,
+ 3267: 0x5B99,
+ 3268: 0x5FE0,
+ 3269: 0x62BD,
+ 3270: 0x663C,
+ 3271: 0x67F1,
+ 3272: 0x6CE8,
+ 3273: 0x866B,
+ 3274: 0x8877,
+ 3275: 0x8A3B,
+ 3276: 0x914E,
+ 3277: 0x92F3,
+ 3278: 0x99D0,
+ 3279: 0x6A17,
+ 3280: 0x7026,
+ 3281: 0x732A,
+ 3282: 0x82E7,
+ 3283: 0x8457,
+ 3284: 0x8CAF,
+ 3285: 0x4E01,
+ 3286: 0x5146,
+ 3287: 0x51CB,
+ 3288: 0x558B,
+ 3289: 0x5BF5,
+ 3290: 0x5E16,
+ 3291: 0x5E33,
+ 3292: 0x5E81,
+ 3293: 0x5F14,
+ 3294: 0x5F35,
+ 3295: 0x5F6B,
+ 3296: 0x5FB4,
+ 3297: 0x61F2,
+ 3298: 0x6311,
+ 3299: 0x66A2,
+ 3300: 0x671D,
+ 3301: 0x6F6E,
+ 3302: 0x7252,
+ 3303: 0x753A,
+ 3304: 0x773A,
+ 3305: 0x8074,
+ 3306: 0x8139,
+ 3307: 0x8178,
+ 3308: 0x8776,
+ 3309: 0x8ABF,
+ 3310: 0x8ADC,
+ 3311: 0x8D85,
+ 3312: 0x8DF3,
+ 3313: 0x929A,
+ 3314: 0x9577,
+ 3315: 0x9802,
+ 3316: 0x9CE5,
+ 3317: 0x52C5,
+ 3318: 0x6357,
+ 3319: 0x76F4,
+ 3320: 0x6715,
+ 3321: 0x6C88,
+ 3322: 0x73CD,
+ 3323: 0x8CC3,
+ 3324: 0x93AE,
+ 3325: 0x9673,
+ 3326: 0x6D25,
+ 3327: 0x589C,
+ 3328: 0x690E,
+ 3329: 0x69CC,
+ 3330: 0x8FFD,
+ 3331: 0x939A,
+ 3332: 0x75DB,
+ 3333: 0x901A,
+ 3334: 0x585A,
+ 3335: 0x6802,
+ 3336: 0x63B4,
+ 3337: 0x69FB,
+ 3338: 0x4F43,
+ 3339: 0x6F2C,
+ 3340: 0x67D8,
+ 3341: 0x8FBB,
+ 3342: 0x8526,
+ 3343: 0x7DB4,
+ 3344: 0x9354,
+ 3345: 0x693F,
+ 3346: 0x6F70,
+ 3347: 0x576A,
+ 3348: 0x58F7,
+ 3349: 0x5B2C,
+ 3350: 0x7D2C,
+ 3351: 0x722A,
+ 3352: 0x540A,
+ 3353: 0x91E3,
+ 3354: 0x9DB4,
+ 3355: 0x4EAD,
+ 3356: 0x4F4E,
+ 3357: 0x505C,
+ 3358: 0x5075,
+ 3359: 0x5243,
+ 3360: 0x8C9E,
+ 3361: 0x5448,
+ 3362: 0x5824,
+ 3363: 0x5B9A,
+ 3364: 0x5E1D,
+ 3365: 0x5E95,
+ 3366: 0x5EAD,
+ 3367: 0x5EF7,
+ 3368: 0x5F1F,
+ 3369: 0x608C,
+ 3370: 0x62B5,
+ 3371: 0x633A,
+ 3372: 0x63D0,
+ 3373: 0x68AF,
+ 3374: 0x6C40,
+ 3375: 0x7887,
+ 3376: 0x798E,
+ 3377: 0x7A0B,
+ 3378: 0x7DE0,
+ 3379: 0x8247,
+ 3380: 0x8A02,
+ 3381: 0x8AE6,
+ 3382: 0x8E44,
+ 3383: 0x9013,
+ 3384: 0x90B8,
+ 3385: 0x912D,
+ 3386: 0x91D8,
+ 3387: 0x9F0E,
+ 3388: 0x6CE5,
+ 3389: 0x6458,
+ 3390: 0x64E2,
+ 3391: 0x6575,
+ 3392: 0x6EF4,
+ 3393: 0x7684,
+ 3394: 0x7B1B,
+ 3395: 0x9069,
+ 3396: 0x93D1,
+ 3397: 0x6EBA,
+ 3398: 0x54F2,
+ 3399: 0x5FB9,
+ 3400: 0x64A4,
+ 3401: 0x8F4D,
+ 3402: 0x8FED,
+ 3403: 0x9244,
+ 3404: 0x5178,
+ 3405: 0x586B,
+ 3406: 0x5929,
+ 3407: 0x5C55,
+ 3408: 0x5E97,
+ 3409: 0x6DFB,
+ 3410: 0x7E8F,
+ 3411: 0x751C,
+ 3412: 0x8CBC,
+ 3413: 0x8EE2,
+ 3414: 0x985B,
+ 3415: 0x70B9,
+ 3416: 0x4F1D,
+ 3417: 0x6BBF,
+ 3418: 0x6FB1,
+ 3419: 0x7530,
+ 3420: 0x96FB,
+ 3421: 0x514E,
+ 3422: 0x5410,
+ 3423: 0x5835,
+ 3424: 0x5857,
+ 3425: 0x59AC,
+ 3426: 0x5C60,
+ 3427: 0x5F92,
+ 3428: 0x6597,
+ 3429: 0x675C,
+ 3430: 0x6E21,
+ 3431: 0x767B,
+ 3432: 0x83DF,
+ 3433: 0x8CED,
+ 3434: 0x9014,
+ 3435: 0x90FD,
+ 3436: 0x934D,
+ 3437: 0x7825,
+ 3438: 0x783A,
+ 3439: 0x52AA,
+ 3440: 0x5EA6,
+ 3441: 0x571F,
+ 3442: 0x5974,
+ 3443: 0x6012,
+ 3444: 0x5012,
+ 3445: 0x515A,
+ 3446: 0x51AC,
+ 3447: 0x51CD,
+ 3448: 0x5200,
+ 3449: 0x5510,
+ 3450: 0x5854,
+ 3451: 0x5858,
+ 3452: 0x5957,
+ 3453: 0x5B95,
+ 3454: 0x5CF6,
+ 3455: 0x5D8B,
+ 3456: 0x60BC,
+ 3457: 0x6295,
+ 3458: 0x642D,
+ 3459: 0x6771,
+ 3460: 0x6843,
+ 3461: 0x68BC,
+ 3462: 0x68DF,
+ 3463: 0x76D7,
+ 3464: 0x6DD8,
+ 3465: 0x6E6F,
+ 3466: 0x6D9B,
+ 3467: 0x706F,
+ 3468: 0x71C8,
+ 3469: 0x5F53,
+ 3470: 0x75D8,
+ 3471: 0x7977,
+ 3472: 0x7B49,
+ 3473: 0x7B54,
+ 3474: 0x7B52,
+ 3475: 0x7CD6,
+ 3476: 0x7D71,
+ 3477: 0x5230,
+ 3478: 0x8463,
+ 3479: 0x8569,
+ 3480: 0x85E4,
+ 3481: 0x8A0E,
+ 3482: 0x8B04,
+ 3483: 0x8C46,
+ 3484: 0x8E0F,
+ 3485: 0x9003,
+ 3486: 0x900F,
+ 3487: 0x9419,
+ 3488: 0x9676,
+ 3489: 0x982D,
+ 3490: 0x9A30,
+ 3491: 0x95D8,
+ 3492: 0x50CD,
+ 3493: 0x52D5,
+ 3494: 0x540C,
+ 3495: 0x5802,
+ 3496: 0x5C0E,
+ 3497: 0x61A7,
+ 3498: 0x649E,
+ 3499: 0x6D1E,
+ 3500: 0x77B3,
+ 3501: 0x7AE5,
+ 3502: 0x80F4,
+ 3503: 0x8404,
+ 3504: 0x9053,
+ 3505: 0x9285,
+ 3506: 0x5CE0,
+ 3507: 0x9D07,
+ 3508: 0x533F,
+ 3509: 0x5F97,
+ 3510: 0x5FB3,
+ 3511: 0x6D9C,
+ 3512: 0x7279,
+ 3513: 0x7763,
+ 3514: 0x79BF,
+ 3515: 0x7BE4,
+ 3516: 0x6BD2,
+ 3517: 0x72EC,
+ 3518: 0x8AAD,
+ 3519: 0x6803,
+ 3520: 0x6A61,
+ 3521: 0x51F8,
+ 3522: 0x7A81,
+ 3523: 0x6934,
+ 3524: 0x5C4A,
+ 3525: 0x9CF6,
+ 3526: 0x82EB,
+ 3527: 0x5BC5,
+ 3528: 0x9149,
+ 3529: 0x701E,
+ 3530: 0x5678,
+ 3531: 0x5C6F,
+ 3532: 0x60C7,
+ 3533: 0x6566,
+ 3534: 0x6C8C,
+ 3535: 0x8C5A,
+ 3536: 0x9041,
+ 3537: 0x9813,
+ 3538: 0x5451,
+ 3539: 0x66C7,
+ 3540: 0x920D,
+ 3541: 0x5948,
+ 3542: 0x90A3,
+ 3543: 0x5185,
+ 3544: 0x4E4D,
+ 3545: 0x51EA,
+ 3546: 0x8599,
+ 3547: 0x8B0E,
+ 3548: 0x7058,
+ 3549: 0x637A,
+ 3550: 0x934B,
+ 3551: 0x6962,
+ 3552: 0x99B4,
+ 3553: 0x7E04,
+ 3554: 0x7577,
+ 3555: 0x5357,
+ 3556: 0x6960,
+ 3557: 0x8EDF,
+ 3558: 0x96E3,
+ 3559: 0x6C5D,
+ 3560: 0x4E8C,
+ 3561: 0x5C3C,
+ 3562: 0x5F10,
+ 3563: 0x8FE9,
+ 3564: 0x5302,
+ 3565: 0x8CD1,
+ 3566: 0x8089,
+ 3567: 0x8679,
+ 3568: 0x5EFF,
+ 3569: 0x65E5,
+ 3570: 0x4E73,
+ 3571: 0x5165,
+ 3572: 0x5982,
+ 3573: 0x5C3F,
+ 3574: 0x97EE,
+ 3575: 0x4EFB,
+ 3576: 0x598A,
+ 3577: 0x5FCD,
+ 3578: 0x8A8D,
+ 3579: 0x6FE1,
+ 3580: 0x79B0,
+ 3581: 0x7962,
+ 3582: 0x5BE7,
+ 3583: 0x8471,
+ 3584: 0x732B,
+ 3585: 0x71B1,
+ 3586: 0x5E74,
+ 3587: 0x5FF5,
+ 3588: 0x637B,
+ 3589: 0x649A,
+ 3590: 0x71C3,
+ 3591: 0x7C98,
+ 3592: 0x4E43,
+ 3593: 0x5EFC,
+ 3594: 0x4E4B,
+ 3595: 0x57DC,
+ 3596: 0x56A2,
+ 3597: 0x60A9,
+ 3598: 0x6FC3,
+ 3599: 0x7D0D,
+ 3600: 0x80FD,
+ 3601: 0x8133,
+ 3602: 0x81BF,
+ 3603: 0x8FB2,
+ 3604: 0x8997,
+ 3605: 0x86A4,
+ 3606: 0x5DF4,
+ 3607: 0x628A,
+ 3608: 0x64AD,
+ 3609: 0x8987,
+ 3610: 0x6777,
+ 3611: 0x6CE2,
+ 3612: 0x6D3E,
+ 3613: 0x7436,
+ 3614: 0x7834,
+ 3615: 0x5A46,
+ 3616: 0x7F75,
+ 3617: 0x82AD,
+ 3618: 0x99AC,
+ 3619: 0x4FF3,
+ 3620: 0x5EC3,
+ 3621: 0x62DD,
+ 3622: 0x6392,
+ 3623: 0x6557,
+ 3624: 0x676F,
+ 3625: 0x76C3,
+ 3626: 0x724C,
+ 3627: 0x80CC,
+ 3628: 0x80BA,
+ 3629: 0x8F29,
+ 3630: 0x914D,
+ 3631: 0x500D,
+ 3632: 0x57F9,
+ 3633: 0x5A92,
+ 3634: 0x6885,
+ 3635: 0x6973,
+ 3636: 0x7164,
+ 3637: 0x72FD,
+ 3638: 0x8CB7,
+ 3639: 0x58F2,
+ 3640: 0x8CE0,
+ 3641: 0x966A,
+ 3642: 0x9019,
+ 3643: 0x877F,
+ 3644: 0x79E4,
+ 3645: 0x77E7,
+ 3646: 0x8429,
+ 3647: 0x4F2F,
+ 3648: 0x5265,
+ 3649: 0x535A,
+ 3650: 0x62CD,
+ 3651: 0x67CF,
+ 3652: 0x6CCA,
+ 3653: 0x767D,
+ 3654: 0x7B94,
+ 3655: 0x7C95,
+ 3656: 0x8236,
+ 3657: 0x8584,
+ 3658: 0x8FEB,
+ 3659: 0x66DD,
+ 3660: 0x6F20,
+ 3661: 0x7206,
+ 3662: 0x7E1B,
+ 3663: 0x83AB,
+ 3664: 0x99C1,
+ 3665: 0x9EA6,
+ 3666: 0x51FD,
+ 3667: 0x7BB1,
+ 3668: 0x7872,
+ 3669: 0x7BB8,
+ 3670: 0x8087,
+ 3671: 0x7B48,
+ 3672: 0x6AE8,
+ 3673: 0x5E61,
+ 3674: 0x808C,
+ 3675: 0x7551,
+ 3676: 0x7560,
+ 3677: 0x516B,
+ 3678: 0x9262,
+ 3679: 0x6E8C,
+ 3680: 0x767A,
+ 3681: 0x9197,
+ 3682: 0x9AEA,
+ 3683: 0x4F10,
+ 3684: 0x7F70,
+ 3685: 0x629C,
+ 3686: 0x7B4F,
+ 3687: 0x95A5,
+ 3688: 0x9CE9,
+ 3689: 0x567A,
+ 3690: 0x5859,
+ 3691: 0x86E4,
+ 3692: 0x96BC,
+ 3693: 0x4F34,
+ 3694: 0x5224,
+ 3695: 0x534A,
+ 3696: 0x53CD,
+ 3697: 0x53DB,
+ 3698: 0x5E06,
+ 3699: 0x642C,
+ 3700: 0x6591,
+ 3701: 0x677F,
+ 3702: 0x6C3E,
+ 3703: 0x6C4E,
+ 3704: 0x7248,
+ 3705: 0x72AF,
+ 3706: 0x73ED,
+ 3707: 0x7554,
+ 3708: 0x7E41,
+ 3709: 0x822C,
+ 3710: 0x85E9,
+ 3711: 0x8CA9,
+ 3712: 0x7BC4,
+ 3713: 0x91C6,
+ 3714: 0x7169,
+ 3715: 0x9812,
+ 3716: 0x98EF,
+ 3717: 0x633D,
+ 3718: 0x6669,
+ 3719: 0x756A,
+ 3720: 0x76E4,
+ 3721: 0x78D0,
+ 3722: 0x8543,
+ 3723: 0x86EE,
+ 3724: 0x532A,
+ 3725: 0x5351,
+ 3726: 0x5426,
+ 3727: 0x5983,
+ 3728: 0x5E87,
+ 3729: 0x5F7C,
+ 3730: 0x60B2,
+ 3731: 0x6249,
+ 3732: 0x6279,
+ 3733: 0x62AB,
+ 3734: 0x6590,
+ 3735: 0x6BD4,
+ 3736: 0x6CCC,
+ 3737: 0x75B2,
+ 3738: 0x76AE,
+ 3739: 0x7891,
+ 3740: 0x79D8,
+ 3741: 0x7DCB,
+ 3742: 0x7F77,
+ 3743: 0x80A5,
+ 3744: 0x88AB,
+ 3745: 0x8AB9,
+ 3746: 0x8CBB,
+ 3747: 0x907F,
+ 3748: 0x975E,
+ 3749: 0x98DB,
+ 3750: 0x6A0B,
+ 3751: 0x7C38,
+ 3752: 0x5099,
+ 3753: 0x5C3E,
+ 3754: 0x5FAE,
+ 3755: 0x6787,
+ 3756: 0x6BD8,
+ 3757: 0x7435,
+ 3758: 0x7709,
+ 3759: 0x7F8E,
+ 3760: 0x9F3B,
+ 3761: 0x67CA,
+ 3762: 0x7A17,
+ 3763: 0x5339,
+ 3764: 0x758B,
+ 3765: 0x9AED,
+ 3766: 0x5F66,
+ 3767: 0x819D,
+ 3768: 0x83F1,
+ 3769: 0x8098,
+ 3770: 0x5F3C,
+ 3771: 0x5FC5,
+ 3772: 0x7562,
+ 3773: 0x7B46,
+ 3774: 0x903C,
+ 3775: 0x6867,
+ 3776: 0x59EB,
+ 3777: 0x5A9B,
+ 3778: 0x7D10,
+ 3779: 0x767E,
+ 3780: 0x8B2C,
+ 3781: 0x4FF5,
+ 3782: 0x5F6A,
+ 3783: 0x6A19,
+ 3784: 0x6C37,
+ 3785: 0x6F02,
+ 3786: 0x74E2,
+ 3787: 0x7968,
+ 3788: 0x8868,
+ 3789: 0x8A55,
+ 3790: 0x8C79,
+ 3791: 0x5EDF,
+ 3792: 0x63CF,
+ 3793: 0x75C5,
+ 3794: 0x79D2,
+ 3795: 0x82D7,
+ 3796: 0x9328,
+ 3797: 0x92F2,
+ 3798: 0x849C,
+ 3799: 0x86ED,
+ 3800: 0x9C2D,
+ 3801: 0x54C1,
+ 3802: 0x5F6C,
+ 3803: 0x658C,
+ 3804: 0x6D5C,
+ 3805: 0x7015,
+ 3806: 0x8CA7,
+ 3807: 0x8CD3,
+ 3808: 0x983B,
+ 3809: 0x654F,
+ 3810: 0x74F6,
+ 3811: 0x4E0D,
+ 3812: 0x4ED8,
+ 3813: 0x57E0,
+ 3814: 0x592B,
+ 3815: 0x5A66,
+ 3816: 0x5BCC,
+ 3817: 0x51A8,
+ 3818: 0x5E03,
+ 3819: 0x5E9C,
+ 3820: 0x6016,
+ 3821: 0x6276,
+ 3822: 0x6577,
+ 3823: 0x65A7,
+ 3824: 0x666E,
+ 3825: 0x6D6E,
+ 3826: 0x7236,
+ 3827: 0x7B26,
+ 3828: 0x8150,
+ 3829: 0x819A,
+ 3830: 0x8299,
+ 3831: 0x8B5C,
+ 3832: 0x8CA0,
+ 3833: 0x8CE6,
+ 3834: 0x8D74,
+ 3835: 0x961C,
+ 3836: 0x9644,
+ 3837: 0x4FAE,
+ 3838: 0x64AB,
+ 3839: 0x6B66,
+ 3840: 0x821E,
+ 3841: 0x8461,
+ 3842: 0x856A,
+ 3843: 0x90E8,
+ 3844: 0x5C01,
+ 3845: 0x6953,
+ 3846: 0x98A8,
+ 3847: 0x847A,
+ 3848: 0x8557,
+ 3849: 0x4F0F,
+ 3850: 0x526F,
+ 3851: 0x5FA9,
+ 3852: 0x5E45,
+ 3853: 0x670D,
+ 3854: 0x798F,
+ 3855: 0x8179,
+ 3856: 0x8907,
+ 3857: 0x8986,
+ 3858: 0x6DF5,
+ 3859: 0x5F17,
+ 3860: 0x6255,
+ 3861: 0x6CB8,
+ 3862: 0x4ECF,
+ 3863: 0x7269,
+ 3864: 0x9B92,
+ 3865: 0x5206,
+ 3866: 0x543B,
+ 3867: 0x5674,
+ 3868: 0x58B3,
+ 3869: 0x61A4,
+ 3870: 0x626E,
+ 3871: 0x711A,
+ 3872: 0x596E,
+ 3873: 0x7C89,
+ 3874: 0x7CDE,
+ 3875: 0x7D1B,
+ 3876: 0x96F0,
+ 3877: 0x6587,
+ 3878: 0x805E,
+ 3879: 0x4E19,
+ 3880: 0x4F75,
+ 3881: 0x5175,
+ 3882: 0x5840,
+ 3883: 0x5E63,
+ 3884: 0x5E73,
+ 3885: 0x5F0A,
+ 3886: 0x67C4,
+ 3887: 0x4E26,
+ 3888: 0x853D,
+ 3889: 0x9589,
+ 3890: 0x965B,
+ 3891: 0x7C73,
+ 3892: 0x9801,
+ 3893: 0x50FB,
+ 3894: 0x58C1,
+ 3895: 0x7656,
+ 3896: 0x78A7,
+ 3897: 0x5225,
+ 3898: 0x77A5,
+ 3899: 0x8511,
+ 3900: 0x7B86,
+ 3901: 0x504F,
+ 3902: 0x5909,
+ 3903: 0x7247,
+ 3904: 0x7BC7,
+ 3905: 0x7DE8,
+ 3906: 0x8FBA,
+ 3907: 0x8FD4,
+ 3908: 0x904D,
+ 3909: 0x4FBF,
+ 3910: 0x52C9,
+ 3911: 0x5A29,
+ 3912: 0x5F01,
+ 3913: 0x97AD,
+ 3914: 0x4FDD,
+ 3915: 0x8217,
+ 3916: 0x92EA,
+ 3917: 0x5703,
+ 3918: 0x6355,
+ 3919: 0x6B69,
+ 3920: 0x752B,
+ 3921: 0x88DC,
+ 3922: 0x8F14,
+ 3923: 0x7A42,
+ 3924: 0x52DF,
+ 3925: 0x5893,
+ 3926: 0x6155,
+ 3927: 0x620A,
+ 3928: 0x66AE,
+ 3929: 0x6BCD,
+ 3930: 0x7C3F,
+ 3931: 0x83E9,
+ 3932: 0x5023,
+ 3933: 0x4FF8,
+ 3934: 0x5305,
+ 3935: 0x5446,
+ 3936: 0x5831,
+ 3937: 0x5949,
+ 3938: 0x5B9D,
+ 3939: 0x5CF0,
+ 3940: 0x5CEF,
+ 3941: 0x5D29,
+ 3942: 0x5E96,
+ 3943: 0x62B1,
+ 3944: 0x6367,
+ 3945: 0x653E,
+ 3946: 0x65B9,
+ 3947: 0x670B,
+ 3948: 0x6CD5,
+ 3949: 0x6CE1,
+ 3950: 0x70F9,
+ 3951: 0x7832,
+ 3952: 0x7E2B,
+ 3953: 0x80DE,
+ 3954: 0x82B3,
+ 3955: 0x840C,
+ 3956: 0x84EC,
+ 3957: 0x8702,
+ 3958: 0x8912,
+ 3959: 0x8A2A,
+ 3960: 0x8C4A,
+ 3961: 0x90A6,
+ 3962: 0x92D2,
+ 3963: 0x98FD,
+ 3964: 0x9CF3,
+ 3965: 0x9D6C,
+ 3966: 0x4E4F,
+ 3967: 0x4EA1,
+ 3968: 0x508D,
+ 3969: 0x5256,
+ 3970: 0x574A,
+ 3971: 0x59A8,
+ 3972: 0x5E3D,
+ 3973: 0x5FD8,
+ 3974: 0x5FD9,
+ 3975: 0x623F,
+ 3976: 0x66B4,
+ 3977: 0x671B,
+ 3978: 0x67D0,
+ 3979: 0x68D2,
+ 3980: 0x5192,
+ 3981: 0x7D21,
+ 3982: 0x80AA,
+ 3983: 0x81A8,
+ 3984: 0x8B00,
+ 3985: 0x8C8C,
+ 3986: 0x8CBF,
+ 3987: 0x927E,
+ 3988: 0x9632,
+ 3989: 0x5420,
+ 3990: 0x982C,
+ 3991: 0x5317,
+ 3992: 0x50D5,
+ 3993: 0x535C,
+ 3994: 0x58A8,
+ 3995: 0x64B2,
+ 3996: 0x6734,
+ 3997: 0x7267,
+ 3998: 0x7766,
+ 3999: 0x7A46,
+ 4000: 0x91E6,
+ 4001: 0x52C3,
+ 4002: 0x6CA1,
+ 4003: 0x6B86,
+ 4004: 0x5800,
+ 4005: 0x5E4C,
+ 4006: 0x5954,
+ 4007: 0x672C,
+ 4008: 0x7FFB,
+ 4009: 0x51E1,
+ 4010: 0x76C6,
+ 4011: 0x6469,
+ 4012: 0x78E8,
+ 4013: 0x9B54,
+ 4014: 0x9EBB,
+ 4015: 0x57CB,
+ 4016: 0x59B9,
+ 4017: 0x6627,
+ 4018: 0x679A,
+ 4019: 0x6BCE,
+ 4020: 0x54E9,
+ 4021: 0x69D9,
+ 4022: 0x5E55,
+ 4023: 0x819C,
+ 4024: 0x6795,
+ 4025: 0x9BAA,
+ 4026: 0x67FE,
+ 4027: 0x9C52,
+ 4028: 0x685D,
+ 4029: 0x4EA6,
+ 4030: 0x4FE3,
+ 4031: 0x53C8,
+ 4032: 0x62B9,
+ 4033: 0x672B,
+ 4034: 0x6CAB,
+ 4035: 0x8FC4,
+ 4036: 0x4FAD,
+ 4037: 0x7E6D,
+ 4038: 0x9EBF,
+ 4039: 0x4E07,
+ 4040: 0x6162,
+ 4041: 0x6E80,
+ 4042: 0x6F2B,
+ 4043: 0x8513,
+ 4044: 0x5473,
+ 4045: 0x672A,
+ 4046: 0x9B45,
+ 4047: 0x5DF3,
+ 4048: 0x7B95,
+ 4049: 0x5CAC,
+ 4050: 0x5BC6,
+ 4051: 0x871C,
+ 4052: 0x6E4A,
+ 4053: 0x84D1,
+ 4054: 0x7A14,
+ 4055: 0x8108,
+ 4056: 0x5999,
+ 4057: 0x7C8D,
+ 4058: 0x6C11,
+ 4059: 0x7720,
+ 4060: 0x52D9,
+ 4061: 0x5922,
+ 4062: 0x7121,
+ 4063: 0x725F,
+ 4064: 0x77DB,
+ 4065: 0x9727,
+ 4066: 0x9D61,
+ 4067: 0x690B,
+ 4068: 0x5A7F,
+ 4069: 0x5A18,
+ 4070: 0x51A5,
+ 4071: 0x540D,
+ 4072: 0x547D,
+ 4073: 0x660E,
+ 4074: 0x76DF,
+ 4075: 0x8FF7,
+ 4076: 0x9298,
+ 4077: 0x9CF4,
+ 4078: 0x59EA,
+ 4079: 0x725D,
+ 4080: 0x6EC5,
+ 4081: 0x514D,
+ 4082: 0x68C9,
+ 4083: 0x7DBF,
+ 4084: 0x7DEC,
+ 4085: 0x9762,
+ 4086: 0x9EBA,
+ 4087: 0x6478,
+ 4088: 0x6A21,
+ 4089: 0x8302,
+ 4090: 0x5984,
+ 4091: 0x5B5F,
+ 4092: 0x6BDB,
+ 4093: 0x731B,
+ 4094: 0x76F2,
+ 4095: 0x7DB2,
+ 4096: 0x8017,
+ 4097: 0x8499,
+ 4098: 0x5132,
+ 4099: 0x6728,
+ 4100: 0x9ED9,
+ 4101: 0x76EE,
+ 4102: 0x6762,
+ 4103: 0x52FF,
+ 4104: 0x9905,
+ 4105: 0x5C24,
+ 4106: 0x623B,
+ 4107: 0x7C7E,
+ 4108: 0x8CB0,
+ 4109: 0x554F,
+ 4110: 0x60B6,
+ 4111: 0x7D0B,
+ 4112: 0x9580,
+ 4113: 0x5301,
+ 4114: 0x4E5F,
+ 4115: 0x51B6,
+ 4116: 0x591C,
+ 4117: 0x723A,
+ 4118: 0x8036,
+ 4119: 0x91CE,
+ 4120: 0x5F25,
+ 4121: 0x77E2,
+ 4122: 0x5384,
+ 4123: 0x5F79,
+ 4124: 0x7D04,
+ 4125: 0x85AC,
+ 4126: 0x8A33,
+ 4127: 0x8E8D,
+ 4128: 0x9756,
+ 4129: 0x67F3,
+ 4130: 0x85AE,
+ 4131: 0x9453,
+ 4132: 0x6109,
+ 4133: 0x6108,
+ 4134: 0x6CB9,
+ 4135: 0x7652,
+ 4136: 0x8AED,
+ 4137: 0x8F38,
+ 4138: 0x552F,
+ 4139: 0x4F51,
+ 4140: 0x512A,
+ 4141: 0x52C7,
+ 4142: 0x53CB,
+ 4143: 0x5BA5,
+ 4144: 0x5E7D,
+ 4145: 0x60A0,
+ 4146: 0x6182,
+ 4147: 0x63D6,
+ 4148: 0x6709,
+ 4149: 0x67DA,
+ 4150: 0x6E67,
+ 4151: 0x6D8C,
+ 4152: 0x7336,
+ 4153: 0x7337,
+ 4154: 0x7531,
+ 4155: 0x7950,
+ 4156: 0x88D5,
+ 4157: 0x8A98,
+ 4158: 0x904A,
+ 4159: 0x9091,
+ 4160: 0x90F5,
+ 4161: 0x96C4,
+ 4162: 0x878D,
+ 4163: 0x5915,
+ 4164: 0x4E88,
+ 4165: 0x4F59,
+ 4166: 0x4E0E,
+ 4167: 0x8A89,
+ 4168: 0x8F3F,
+ 4169: 0x9810,
+ 4170: 0x50AD,
+ 4171: 0x5E7C,
+ 4172: 0x5996,
+ 4173: 0x5BB9,
+ 4174: 0x5EB8,
+ 4175: 0x63DA,
+ 4176: 0x63FA,
+ 4177: 0x64C1,
+ 4178: 0x66DC,
+ 4179: 0x694A,
+ 4180: 0x69D8,
+ 4181: 0x6D0B,
+ 4182: 0x6EB6,
+ 4183: 0x7194,
+ 4184: 0x7528,
+ 4185: 0x7AAF,
+ 4186: 0x7F8A,
+ 4187: 0x8000,
+ 4188: 0x8449,
+ 4189: 0x84C9,
+ 4190: 0x8981,
+ 4191: 0x8B21,
+ 4192: 0x8E0A,
+ 4193: 0x9065,
+ 4194: 0x967D,
+ 4195: 0x990A,
+ 4196: 0x617E,
+ 4197: 0x6291,
+ 4198: 0x6B32,
+ 4199: 0x6C83,
+ 4200: 0x6D74,
+ 4201: 0x7FCC,
+ 4202: 0x7FFC,
+ 4203: 0x6DC0,
+ 4204: 0x7F85,
+ 4205: 0x87BA,
+ 4206: 0x88F8,
+ 4207: 0x6765,
+ 4208: 0x83B1,
+ 4209: 0x983C,
+ 4210: 0x96F7,
+ 4211: 0x6D1B,
+ 4212: 0x7D61,
+ 4213: 0x843D,
+ 4214: 0x916A,
+ 4215: 0x4E71,
+ 4216: 0x5375,
+ 4217: 0x5D50,
+ 4218: 0x6B04,
+ 4219: 0x6FEB,
+ 4220: 0x85CD,
+ 4221: 0x862D,
+ 4222: 0x89A7,
+ 4223: 0x5229,
+ 4224: 0x540F,
+ 4225: 0x5C65,
+ 4226: 0x674E,
+ 4227: 0x68A8,
+ 4228: 0x7406,
+ 4229: 0x7483,
+ 4230: 0x75E2,
+ 4231: 0x88CF,
+ 4232: 0x88E1,
+ 4233: 0x91CC,
+ 4234: 0x96E2,
+ 4235: 0x9678,
+ 4236: 0x5F8B,
+ 4237: 0x7387,
+ 4238: 0x7ACB,
+ 4239: 0x844E,
+ 4240: 0x63A0,
+ 4241: 0x7565,
+ 4242: 0x5289,
+ 4243: 0x6D41,
+ 4244: 0x6E9C,
+ 4245: 0x7409,
+ 4246: 0x7559,
+ 4247: 0x786B,
+ 4248: 0x7C92,
+ 4249: 0x9686,
+ 4250: 0x7ADC,
+ 4251: 0x9F8D,
+ 4252: 0x4FB6,
+ 4253: 0x616E,
+ 4254: 0x65C5,
+ 4255: 0x865C,
+ 4256: 0x4E86,
+ 4257: 0x4EAE,
+ 4258: 0x50DA,
+ 4259: 0x4E21,
+ 4260: 0x51CC,
+ 4261: 0x5BEE,
+ 4262: 0x6599,
+ 4263: 0x6881,
+ 4264: 0x6DBC,
+ 4265: 0x731F,
+ 4266: 0x7642,
+ 4267: 0x77AD,
+ 4268: 0x7A1C,
+ 4269: 0x7CE7,
+ 4270: 0x826F,
+ 4271: 0x8AD2,
+ 4272: 0x907C,
+ 4273: 0x91CF,
+ 4274: 0x9675,
+ 4275: 0x9818,
+ 4276: 0x529B,
+ 4277: 0x7DD1,
+ 4278: 0x502B,
+ 4279: 0x5398,
+ 4280: 0x6797,
+ 4281: 0x6DCB,
+ 4282: 0x71D0,
+ 4283: 0x7433,
+ 4284: 0x81E8,
+ 4285: 0x8F2A,
+ 4286: 0x96A3,
+ 4287: 0x9C57,
+ 4288: 0x9E9F,
+ 4289: 0x7460,
+ 4290: 0x5841,
+ 4291: 0x6D99,
+ 4292: 0x7D2F,
+ 4293: 0x985E,
+ 4294: 0x4EE4,
+ 4295: 0x4F36,
+ 4296: 0x4F8B,
+ 4297: 0x51B7,
+ 4298: 0x52B1,
+ 4299: 0x5DBA,
+ 4300: 0x601C,
+ 4301: 0x73B2,
+ 4302: 0x793C,
+ 4303: 0x82D3,
+ 4304: 0x9234,
+ 4305: 0x96B7,
+ 4306: 0x96F6,
+ 4307: 0x970A,
+ 4308: 0x9E97,
+ 4309: 0x9F62,
+ 4310: 0x66A6,
+ 4311: 0x6B74,
+ 4312: 0x5217,
+ 4313: 0x52A3,
+ 4314: 0x70C8,
+ 4315: 0x88C2,
+ 4316: 0x5EC9,
+ 4317: 0x604B,
+ 4318: 0x6190,
+ 4319: 0x6F23,
+ 4320: 0x7149,
+ 4321: 0x7C3E,
+ 4322: 0x7DF4,
+ 4323: 0x806F,
+ 4324: 0x84EE,
+ 4325: 0x9023,
+ 4326: 0x932C,
+ 4327: 0x5442,
+ 4328: 0x9B6F,
+ 4329: 0x6AD3,
+ 4330: 0x7089,
+ 4331: 0x8CC2,
+ 4332: 0x8DEF,
+ 4333: 0x9732,
+ 4334: 0x52B4,
+ 4335: 0x5A41,
+ 4336: 0x5ECA,
+ 4337: 0x5F04,
+ 4338: 0x6717,
+ 4339: 0x697C,
+ 4340: 0x6994,
+ 4341: 0x6D6A,
+ 4342: 0x6F0F,
+ 4343: 0x7262,
+ 4344: 0x72FC,
+ 4345: 0x7BED,
+ 4346: 0x8001,
+ 4347: 0x807E,
+ 4348: 0x874B,
+ 4349: 0x90CE,
+ 4350: 0x516D,
+ 4351: 0x9E93,
+ 4352: 0x7984,
+ 4353: 0x808B,
+ 4354: 0x9332,
+ 4355: 0x8AD6,
+ 4356: 0x502D,
+ 4357: 0x548C,
+ 4358: 0x8A71,
+ 4359: 0x6B6A,
+ 4360: 0x8CC4,
+ 4361: 0x8107,
+ 4362: 0x60D1,
+ 4363: 0x67A0,
+ 4364: 0x9DF2,
+ 4365: 0x4E99,
+ 4366: 0x4E98,
+ 4367: 0x9C10,
+ 4368: 0x8A6B,
+ 4369: 0x85C1,
+ 4370: 0x8568,
+ 4371: 0x6900,
+ 4372: 0x6E7E,
+ 4373: 0x7897,
+ 4374: 0x8155,
+ 4418: 0x5F0C,
+ 4419: 0x4E10,
+ 4420: 0x4E15,
+ 4421: 0x4E2A,
+ 4422: 0x4E31,
+ 4423: 0x4E36,
+ 4424: 0x4E3C,
+ 4425: 0x4E3F,
+ 4426: 0x4E42,
+ 4427: 0x4E56,
+ 4428: 0x4E58,
+ 4429: 0x4E82,
+ 4430: 0x4E85,
+ 4431: 0x8C6B,
+ 4432: 0x4E8A,
+ 4433: 0x8212,
+ 4434: 0x5F0D,
+ 4435: 0x4E8E,
+ 4436: 0x4E9E,
+ 4437: 0x4E9F,
+ 4438: 0x4EA0,
+ 4439: 0x4EA2,
+ 4440: 0x4EB0,
+ 4441: 0x4EB3,
+ 4442: 0x4EB6,
+ 4443: 0x4ECE,
+ 4444: 0x4ECD,
+ 4445: 0x4EC4,
+ 4446: 0x4EC6,
+ 4447: 0x4EC2,
+ 4448: 0x4ED7,
+ 4449: 0x4EDE,
+ 4450: 0x4EED,
+ 4451: 0x4EDF,
+ 4452: 0x4EF7,
+ 4453: 0x4F09,
+ 4454: 0x4F5A,
+ 4455: 0x4F30,
+ 4456: 0x4F5B,
+ 4457: 0x4F5D,
+ 4458: 0x4F57,
+ 4459: 0x4F47,
+ 4460: 0x4F76,
+ 4461: 0x4F88,
+ 4462: 0x4F8F,
+ 4463: 0x4F98,
+ 4464: 0x4F7B,
+ 4465: 0x4F69,
+ 4466: 0x4F70,
+ 4467: 0x4F91,
+ 4468: 0x4F6F,
+ 4469: 0x4F86,
+ 4470: 0x4F96,
+ 4471: 0x5118,
+ 4472: 0x4FD4,
+ 4473: 0x4FDF,
+ 4474: 0x4FCE,
+ 4475: 0x4FD8,
+ 4476: 0x4FDB,
+ 4477: 0x4FD1,
+ 4478: 0x4FDA,
+ 4479: 0x4FD0,
+ 4480: 0x4FE4,
+ 4481: 0x4FE5,
+ 4482: 0x501A,
+ 4483: 0x5028,
+ 4484: 0x5014,
+ 4485: 0x502A,
+ 4486: 0x5025,
+ 4487: 0x5005,
+ 4488: 0x4F1C,
+ 4489: 0x4FF6,
+ 4490: 0x5021,
+ 4491: 0x5029,
+ 4492: 0x502C,
+ 4493: 0x4FFE,
+ 4494: 0x4FEF,
+ 4495: 0x5011,
+ 4496: 0x5006,
+ 4497: 0x5043,
+ 4498: 0x5047,
+ 4499: 0x6703,
+ 4500: 0x5055,
+ 4501: 0x5050,
+ 4502: 0x5048,
+ 4503: 0x505A,
+ 4504: 0x5056,
+ 4505: 0x506C,
+ 4506: 0x5078,
+ 4507: 0x5080,
+ 4508: 0x509A,
+ 4509: 0x5085,
+ 4510: 0x50B4,
+ 4511: 0x50B2,
+ 4512: 0x50C9,
+ 4513: 0x50CA,
+ 4514: 0x50B3,
+ 4515: 0x50C2,
+ 4516: 0x50D6,
+ 4517: 0x50DE,
+ 4518: 0x50E5,
+ 4519: 0x50ED,
+ 4520: 0x50E3,
+ 4521: 0x50EE,
+ 4522: 0x50F9,
+ 4523: 0x50F5,
+ 4524: 0x5109,
+ 4525: 0x5101,
+ 4526: 0x5102,
+ 4527: 0x5116,
+ 4528: 0x5115,
+ 4529: 0x5114,
+ 4530: 0x511A,
+ 4531: 0x5121,
+ 4532: 0x513A,
+ 4533: 0x5137,
+ 4534: 0x513C,
+ 4535: 0x513B,
+ 4536: 0x513F,
+ 4537: 0x5140,
+ 4538: 0x5152,
+ 4539: 0x514C,
+ 4540: 0x5154,
+ 4541: 0x5162,
+ 4542: 0x7AF8,
+ 4543: 0x5169,
+ 4544: 0x516A,
+ 4545: 0x516E,
+ 4546: 0x5180,
+ 4547: 0x5182,
+ 4548: 0x56D8,
+ 4549: 0x518C,
+ 4550: 0x5189,
+ 4551: 0x518F,
+ 4552: 0x5191,
+ 4553: 0x5193,
+ 4554: 0x5195,
+ 4555: 0x5196,
+ 4556: 0x51A4,
+ 4557: 0x51A6,
+ 4558: 0x51A2,
+ 4559: 0x51A9,
+ 4560: 0x51AA,
+ 4561: 0x51AB,
+ 4562: 0x51B3,
+ 4563: 0x51B1,
+ 4564: 0x51B2,
+ 4565: 0x51B0,
+ 4566: 0x51B5,
+ 4567: 0x51BD,
+ 4568: 0x51C5,
+ 4569: 0x51C9,
+ 4570: 0x51DB,
+ 4571: 0x51E0,
+ 4572: 0x8655,
+ 4573: 0x51E9,
+ 4574: 0x51ED,
+ 4575: 0x51F0,
+ 4576: 0x51F5,
+ 4577: 0x51FE,
+ 4578: 0x5204,
+ 4579: 0x520B,
+ 4580: 0x5214,
+ 4581: 0x520E,
+ 4582: 0x5227,
+ 4583: 0x522A,
+ 4584: 0x522E,
+ 4585: 0x5233,
+ 4586: 0x5239,
+ 4587: 0x524F,
+ 4588: 0x5244,
+ 4589: 0x524B,
+ 4590: 0x524C,
+ 4591: 0x525E,
+ 4592: 0x5254,
+ 4593: 0x526A,
+ 4594: 0x5274,
+ 4595: 0x5269,
+ 4596: 0x5273,
+ 4597: 0x527F,
+ 4598: 0x527D,
+ 4599: 0x528D,
+ 4600: 0x5294,
+ 4601: 0x5292,
+ 4602: 0x5271,
+ 4603: 0x5288,
+ 4604: 0x5291,
+ 4605: 0x8FA8,
+ 4606: 0x8FA7,
+ 4607: 0x52AC,
+ 4608: 0x52AD,
+ 4609: 0x52BC,
+ 4610: 0x52B5,
+ 4611: 0x52C1,
+ 4612: 0x52CD,
+ 4613: 0x52D7,
+ 4614: 0x52DE,
+ 4615: 0x52E3,
+ 4616: 0x52E6,
+ 4617: 0x98ED,
+ 4618: 0x52E0,
+ 4619: 0x52F3,
+ 4620: 0x52F5,
+ 4621: 0x52F8,
+ 4622: 0x52F9,
+ 4623: 0x5306,
+ 4624: 0x5308,
+ 4625: 0x7538,
+ 4626: 0x530D,
+ 4627: 0x5310,
+ 4628: 0x530F,
+ 4629: 0x5315,
+ 4630: 0x531A,
+ 4631: 0x5323,
+ 4632: 0x532F,
+ 4633: 0x5331,
+ 4634: 0x5333,
+ 4635: 0x5338,
+ 4636: 0x5340,
+ 4637: 0x5346,
+ 4638: 0x5345,
+ 4639: 0x4E17,
+ 4640: 0x5349,
+ 4641: 0x534D,
+ 4642: 0x51D6,
+ 4643: 0x535E,
+ 4644: 0x5369,
+ 4645: 0x536E,
+ 4646: 0x5918,
+ 4647: 0x537B,
+ 4648: 0x5377,
+ 4649: 0x5382,
+ 4650: 0x5396,
+ 4651: 0x53A0,
+ 4652: 0x53A6,
+ 4653: 0x53A5,
+ 4654: 0x53AE,
+ 4655: 0x53B0,
+ 4656: 0x53B6,
+ 4657: 0x53C3,
+ 4658: 0x7C12,
+ 4659: 0x96D9,
+ 4660: 0x53DF,
+ 4661: 0x66FC,
+ 4662: 0x71EE,
+ 4663: 0x53EE,
+ 4664: 0x53E8,
+ 4665: 0x53ED,
+ 4666: 0x53FA,
+ 4667: 0x5401,
+ 4668: 0x543D,
+ 4669: 0x5440,
+ 4670: 0x542C,
+ 4671: 0x542D,
+ 4672: 0x543C,
+ 4673: 0x542E,
+ 4674: 0x5436,
+ 4675: 0x5429,
+ 4676: 0x541D,
+ 4677: 0x544E,
+ 4678: 0x548F,
+ 4679: 0x5475,
+ 4680: 0x548E,
+ 4681: 0x545F,
+ 4682: 0x5471,
+ 4683: 0x5477,
+ 4684: 0x5470,
+ 4685: 0x5492,
+ 4686: 0x547B,
+ 4687: 0x5480,
+ 4688: 0x5476,
+ 4689: 0x5484,
+ 4690: 0x5490,
+ 4691: 0x5486,
+ 4692: 0x54C7,
+ 4693: 0x54A2,
+ 4694: 0x54B8,
+ 4695: 0x54A5,
+ 4696: 0x54AC,
+ 4697: 0x54C4,
+ 4698: 0x54C8,
+ 4699: 0x54A8,
+ 4700: 0x54AB,
+ 4701: 0x54C2,
+ 4702: 0x54A4,
+ 4703: 0x54BE,
+ 4704: 0x54BC,
+ 4705: 0x54D8,
+ 4706: 0x54E5,
+ 4707: 0x54E6,
+ 4708: 0x550F,
+ 4709: 0x5514,
+ 4710: 0x54FD,
+ 4711: 0x54EE,
+ 4712: 0x54ED,
+ 4713: 0x54FA,
+ 4714: 0x54E2,
+ 4715: 0x5539,
+ 4716: 0x5540,
+ 4717: 0x5563,
+ 4718: 0x554C,
+ 4719: 0x552E,
+ 4720: 0x555C,
+ 4721: 0x5545,
+ 4722: 0x5556,
+ 4723: 0x5557,
+ 4724: 0x5538,
+ 4725: 0x5533,
+ 4726: 0x555D,
+ 4727: 0x5599,
+ 4728: 0x5580,
+ 4729: 0x54AF,
+ 4730: 0x558A,
+ 4731: 0x559F,
+ 4732: 0x557B,
+ 4733: 0x557E,
+ 4734: 0x5598,
+ 4735: 0x559E,
+ 4736: 0x55AE,
+ 4737: 0x557C,
+ 4738: 0x5583,
+ 4739: 0x55A9,
+ 4740: 0x5587,
+ 4741: 0x55A8,
+ 4742: 0x55DA,
+ 4743: 0x55C5,
+ 4744: 0x55DF,
+ 4745: 0x55C4,
+ 4746: 0x55DC,
+ 4747: 0x55E4,
+ 4748: 0x55D4,
+ 4749: 0x5614,
+ 4750: 0x55F7,
+ 4751: 0x5616,
+ 4752: 0x55FE,
+ 4753: 0x55FD,
+ 4754: 0x561B,
+ 4755: 0x55F9,
+ 4756: 0x564E,
+ 4757: 0x5650,
+ 4758: 0x71DF,
+ 4759: 0x5634,
+ 4760: 0x5636,
+ 4761: 0x5632,
+ 4762: 0x5638,
+ 4763: 0x566B,
+ 4764: 0x5664,
+ 4765: 0x562F,
+ 4766: 0x566C,
+ 4767: 0x566A,
+ 4768: 0x5686,
+ 4769: 0x5680,
+ 4770: 0x568A,
+ 4771: 0x56A0,
+ 4772: 0x5694,
+ 4773: 0x568F,
+ 4774: 0x56A5,
+ 4775: 0x56AE,
+ 4776: 0x56B6,
+ 4777: 0x56B4,
+ 4778: 0x56C2,
+ 4779: 0x56BC,
+ 4780: 0x56C1,
+ 4781: 0x56C3,
+ 4782: 0x56C0,
+ 4783: 0x56C8,
+ 4784: 0x56CE,
+ 4785: 0x56D1,
+ 4786: 0x56D3,
+ 4787: 0x56D7,
+ 4788: 0x56EE,
+ 4789: 0x56F9,
+ 4790: 0x5700,
+ 4791: 0x56FF,
+ 4792: 0x5704,
+ 4793: 0x5709,
+ 4794: 0x5708,
+ 4795: 0x570B,
+ 4796: 0x570D,
+ 4797: 0x5713,
+ 4798: 0x5718,
+ 4799: 0x5716,
+ 4800: 0x55C7,
+ 4801: 0x571C,
+ 4802: 0x5726,
+ 4803: 0x5737,
+ 4804: 0x5738,
+ 4805: 0x574E,
+ 4806: 0x573B,
+ 4807: 0x5740,
+ 4808: 0x574F,
+ 4809: 0x5769,
+ 4810: 0x57C0,
+ 4811: 0x5788,
+ 4812: 0x5761,
+ 4813: 0x577F,
+ 4814: 0x5789,
+ 4815: 0x5793,
+ 4816: 0x57A0,
+ 4817: 0x57B3,
+ 4818: 0x57A4,
+ 4819: 0x57AA,
+ 4820: 0x57B0,
+ 4821: 0x57C3,
+ 4822: 0x57C6,
+ 4823: 0x57D4,
+ 4824: 0x57D2,
+ 4825: 0x57D3,
+ 4826: 0x580A,
+ 4827: 0x57D6,
+ 4828: 0x57E3,
+ 4829: 0x580B,
+ 4830: 0x5819,
+ 4831: 0x581D,
+ 4832: 0x5872,
+ 4833: 0x5821,
+ 4834: 0x5862,
+ 4835: 0x584B,
+ 4836: 0x5870,
+ 4837: 0x6BC0,
+ 4838: 0x5852,
+ 4839: 0x583D,
+ 4840: 0x5879,
+ 4841: 0x5885,
+ 4842: 0x58B9,
+ 4843: 0x589F,
+ 4844: 0x58AB,
+ 4845: 0x58BA,
+ 4846: 0x58DE,
+ 4847: 0x58BB,
+ 4848: 0x58B8,
+ 4849: 0x58AE,
+ 4850: 0x58C5,
+ 4851: 0x58D3,
+ 4852: 0x58D1,
+ 4853: 0x58D7,
+ 4854: 0x58D9,
+ 4855: 0x58D8,
+ 4856: 0x58E5,
+ 4857: 0x58DC,
+ 4858: 0x58E4,
+ 4859: 0x58DF,
+ 4860: 0x58EF,
+ 4861: 0x58FA,
+ 4862: 0x58F9,
+ 4863: 0x58FB,
+ 4864: 0x58FC,
+ 4865: 0x58FD,
+ 4866: 0x5902,
+ 4867: 0x590A,
+ 4868: 0x5910,
+ 4869: 0x591B,
+ 4870: 0x68A6,
+ 4871: 0x5925,
+ 4872: 0x592C,
+ 4873: 0x592D,
+ 4874: 0x5932,
+ 4875: 0x5938,
+ 4876: 0x593E,
+ 4877: 0x7AD2,
+ 4878: 0x5955,
+ 4879: 0x5950,
+ 4880: 0x594E,
+ 4881: 0x595A,
+ 4882: 0x5958,
+ 4883: 0x5962,
+ 4884: 0x5960,
+ 4885: 0x5967,
+ 4886: 0x596C,
+ 4887: 0x5969,
+ 4888: 0x5978,
+ 4889: 0x5981,
+ 4890: 0x599D,
+ 4891: 0x4F5E,
+ 4892: 0x4FAB,
+ 4893: 0x59A3,
+ 4894: 0x59B2,
+ 4895: 0x59C6,
+ 4896: 0x59E8,
+ 4897: 0x59DC,
+ 4898: 0x598D,
+ 4899: 0x59D9,
+ 4900: 0x59DA,
+ 4901: 0x5A25,
+ 4902: 0x5A1F,
+ 4903: 0x5A11,
+ 4904: 0x5A1C,
+ 4905: 0x5A09,
+ 4906: 0x5A1A,
+ 4907: 0x5A40,
+ 4908: 0x5A6C,
+ 4909: 0x5A49,
+ 4910: 0x5A35,
+ 4911: 0x5A36,
+ 4912: 0x5A62,
+ 4913: 0x5A6A,
+ 4914: 0x5A9A,
+ 4915: 0x5ABC,
+ 4916: 0x5ABE,
+ 4917: 0x5ACB,
+ 4918: 0x5AC2,
+ 4919: 0x5ABD,
+ 4920: 0x5AE3,
+ 4921: 0x5AD7,
+ 4922: 0x5AE6,
+ 4923: 0x5AE9,
+ 4924: 0x5AD6,
+ 4925: 0x5AFA,
+ 4926: 0x5AFB,
+ 4927: 0x5B0C,
+ 4928: 0x5B0B,
+ 4929: 0x5B16,
+ 4930: 0x5B32,
+ 4931: 0x5AD0,
+ 4932: 0x5B2A,
+ 4933: 0x5B36,
+ 4934: 0x5B3E,
+ 4935: 0x5B43,
+ 4936: 0x5B45,
+ 4937: 0x5B40,
+ 4938: 0x5B51,
+ 4939: 0x5B55,
+ 4940: 0x5B5A,
+ 4941: 0x5B5B,
+ 4942: 0x5B65,
+ 4943: 0x5B69,
+ 4944: 0x5B70,
+ 4945: 0x5B73,
+ 4946: 0x5B75,
+ 4947: 0x5B78,
+ 4948: 0x6588,
+ 4949: 0x5B7A,
+ 4950: 0x5B80,
+ 4951: 0x5B83,
+ 4952: 0x5BA6,
+ 4953: 0x5BB8,
+ 4954: 0x5BC3,
+ 4955: 0x5BC7,
+ 4956: 0x5BC9,
+ 4957: 0x5BD4,
+ 4958: 0x5BD0,
+ 4959: 0x5BE4,
+ 4960: 0x5BE6,
+ 4961: 0x5BE2,
+ 4962: 0x5BDE,
+ 4963: 0x5BE5,
+ 4964: 0x5BEB,
+ 4965: 0x5BF0,
+ 4966: 0x5BF6,
+ 4967: 0x5BF3,
+ 4968: 0x5C05,
+ 4969: 0x5C07,
+ 4970: 0x5C08,
+ 4971: 0x5C0D,
+ 4972: 0x5C13,
+ 4973: 0x5C20,
+ 4974: 0x5C22,
+ 4975: 0x5C28,
+ 4976: 0x5C38,
+ 4977: 0x5C39,
+ 4978: 0x5C41,
+ 4979: 0x5C46,
+ 4980: 0x5C4E,
+ 4981: 0x5C53,
+ 4982: 0x5C50,
+ 4983: 0x5C4F,
+ 4984: 0x5B71,
+ 4985: 0x5C6C,
+ 4986: 0x5C6E,
+ 4987: 0x4E62,
+ 4988: 0x5C76,
+ 4989: 0x5C79,
+ 4990: 0x5C8C,
+ 4991: 0x5C91,
+ 4992: 0x5C94,
+ 4993: 0x599B,
+ 4994: 0x5CAB,
+ 4995: 0x5CBB,
+ 4996: 0x5CB6,
+ 4997: 0x5CBC,
+ 4998: 0x5CB7,
+ 4999: 0x5CC5,
+ 5000: 0x5CBE,
+ 5001: 0x5CC7,
+ 5002: 0x5CD9,
+ 5003: 0x5CE9,
+ 5004: 0x5CFD,
+ 5005: 0x5CFA,
+ 5006: 0x5CED,
+ 5007: 0x5D8C,
+ 5008: 0x5CEA,
+ 5009: 0x5D0B,
+ 5010: 0x5D15,
+ 5011: 0x5D17,
+ 5012: 0x5D5C,
+ 5013: 0x5D1F,
+ 5014: 0x5D1B,
+ 5015: 0x5D11,
+ 5016: 0x5D14,
+ 5017: 0x5D22,
+ 5018: 0x5D1A,
+ 5019: 0x5D19,
+ 5020: 0x5D18,
+ 5021: 0x5D4C,
+ 5022: 0x5D52,
+ 5023: 0x5D4E,
+ 5024: 0x5D4B,
+ 5025: 0x5D6C,
+ 5026: 0x5D73,
+ 5027: 0x5D76,
+ 5028: 0x5D87,
+ 5029: 0x5D84,
+ 5030: 0x5D82,
+ 5031: 0x5DA2,
+ 5032: 0x5D9D,
+ 5033: 0x5DAC,
+ 5034: 0x5DAE,
+ 5035: 0x5DBD,
+ 5036: 0x5D90,
+ 5037: 0x5DB7,
+ 5038: 0x5DBC,
+ 5039: 0x5DC9,
+ 5040: 0x5DCD,
+ 5041: 0x5DD3,
+ 5042: 0x5DD2,
+ 5043: 0x5DD6,
+ 5044: 0x5DDB,
+ 5045: 0x5DEB,
+ 5046: 0x5DF2,
+ 5047: 0x5DF5,
+ 5048: 0x5E0B,
+ 5049: 0x5E1A,
+ 5050: 0x5E19,
+ 5051: 0x5E11,
+ 5052: 0x5E1B,
+ 5053: 0x5E36,
+ 5054: 0x5E37,
+ 5055: 0x5E44,
+ 5056: 0x5E43,
+ 5057: 0x5E40,
+ 5058: 0x5E4E,
+ 5059: 0x5E57,
+ 5060: 0x5E54,
+ 5061: 0x5E5F,
+ 5062: 0x5E62,
+ 5063: 0x5E64,
+ 5064: 0x5E47,
+ 5065: 0x5E75,
+ 5066: 0x5E76,
+ 5067: 0x5E7A,
+ 5068: 0x9EBC,
+ 5069: 0x5E7F,
+ 5070: 0x5EA0,
+ 5071: 0x5EC1,
+ 5072: 0x5EC2,
+ 5073: 0x5EC8,
+ 5074: 0x5ED0,
+ 5075: 0x5ECF,
+ 5076: 0x5ED6,
+ 5077: 0x5EE3,
+ 5078: 0x5EDD,
+ 5079: 0x5EDA,
+ 5080: 0x5EDB,
+ 5081: 0x5EE2,
+ 5082: 0x5EE1,
+ 5083: 0x5EE8,
+ 5084: 0x5EE9,
+ 5085: 0x5EEC,
+ 5086: 0x5EF1,
+ 5087: 0x5EF3,
+ 5088: 0x5EF0,
+ 5089: 0x5EF4,
+ 5090: 0x5EF8,
+ 5091: 0x5EFE,
+ 5092: 0x5F03,
+ 5093: 0x5F09,
+ 5094: 0x5F5D,
+ 5095: 0x5F5C,
+ 5096: 0x5F0B,
+ 5097: 0x5F11,
+ 5098: 0x5F16,
+ 5099: 0x5F29,
+ 5100: 0x5F2D,
+ 5101: 0x5F38,
+ 5102: 0x5F41,
+ 5103: 0x5F48,
+ 5104: 0x5F4C,
+ 5105: 0x5F4E,
+ 5106: 0x5F2F,
+ 5107: 0x5F51,
+ 5108: 0x5F56,
+ 5109: 0x5F57,
+ 5110: 0x5F59,
+ 5111: 0x5F61,
+ 5112: 0x5F6D,
+ 5113: 0x5F73,
+ 5114: 0x5F77,
+ 5115: 0x5F83,
+ 5116: 0x5F82,
+ 5117: 0x5F7F,
+ 5118: 0x5F8A,
+ 5119: 0x5F88,
+ 5120: 0x5F91,
+ 5121: 0x5F87,
+ 5122: 0x5F9E,
+ 5123: 0x5F99,
+ 5124: 0x5F98,
+ 5125: 0x5FA0,
+ 5126: 0x5FA8,
+ 5127: 0x5FAD,
+ 5128: 0x5FBC,
+ 5129: 0x5FD6,
+ 5130: 0x5FFB,
+ 5131: 0x5FE4,
+ 5132: 0x5FF8,
+ 5133: 0x5FF1,
+ 5134: 0x5FDD,
+ 5135: 0x60B3,
+ 5136: 0x5FFF,
+ 5137: 0x6021,
+ 5138: 0x6060,
+ 5139: 0x6019,
+ 5140: 0x6010,
+ 5141: 0x6029,
+ 5142: 0x600E,
+ 5143: 0x6031,
+ 5144: 0x601B,
+ 5145: 0x6015,
+ 5146: 0x602B,
+ 5147: 0x6026,
+ 5148: 0x600F,
+ 5149: 0x603A,
+ 5150: 0x605A,
+ 5151: 0x6041,
+ 5152: 0x606A,
+ 5153: 0x6077,
+ 5154: 0x605F,
+ 5155: 0x604A,
+ 5156: 0x6046,
+ 5157: 0x604D,
+ 5158: 0x6063,
+ 5159: 0x6043,
+ 5160: 0x6064,
+ 5161: 0x6042,
+ 5162: 0x606C,
+ 5163: 0x606B,
+ 5164: 0x6059,
+ 5165: 0x6081,
+ 5166: 0x608D,
+ 5167: 0x60E7,
+ 5168: 0x6083,
+ 5169: 0x609A,
+ 5170: 0x6084,
+ 5171: 0x609B,
+ 5172: 0x6096,
+ 5173: 0x6097,
+ 5174: 0x6092,
+ 5175: 0x60A7,
+ 5176: 0x608B,
+ 5177: 0x60E1,
+ 5178: 0x60B8,
+ 5179: 0x60E0,
+ 5180: 0x60D3,
+ 5181: 0x60B4,
+ 5182: 0x5FF0,
+ 5183: 0x60BD,
+ 5184: 0x60C6,
+ 5185: 0x60B5,
+ 5186: 0x60D8,
+ 5187: 0x614D,
+ 5188: 0x6115,
+ 5189: 0x6106,
+ 5190: 0x60F6,
+ 5191: 0x60F7,
+ 5192: 0x6100,
+ 5193: 0x60F4,
+ 5194: 0x60FA,
+ 5195: 0x6103,
+ 5196: 0x6121,
+ 5197: 0x60FB,
+ 5198: 0x60F1,
+ 5199: 0x610D,
+ 5200: 0x610E,
+ 5201: 0x6147,
+ 5202: 0x613E,
+ 5203: 0x6128,
+ 5204: 0x6127,
+ 5205: 0x614A,
+ 5206: 0x613F,
+ 5207: 0x613C,
+ 5208: 0x612C,
+ 5209: 0x6134,
+ 5210: 0x613D,
+ 5211: 0x6142,
+ 5212: 0x6144,
+ 5213: 0x6173,
+ 5214: 0x6177,
+ 5215: 0x6158,
+ 5216: 0x6159,
+ 5217: 0x615A,
+ 5218: 0x616B,
+ 5219: 0x6174,
+ 5220: 0x616F,
+ 5221: 0x6165,
+ 5222: 0x6171,
+ 5223: 0x615F,
+ 5224: 0x615D,
+ 5225: 0x6153,
+ 5226: 0x6175,
+ 5227: 0x6199,
+ 5228: 0x6196,
+ 5229: 0x6187,
+ 5230: 0x61AC,
+ 5231: 0x6194,
+ 5232: 0x619A,
+ 5233: 0x618A,
+ 5234: 0x6191,
+ 5235: 0x61AB,
+ 5236: 0x61AE,
+ 5237: 0x61CC,
+ 5238: 0x61CA,
+ 5239: 0x61C9,
+ 5240: 0x61F7,
+ 5241: 0x61C8,
+ 5242: 0x61C3,
+ 5243: 0x61C6,
+ 5244: 0x61BA,
+ 5245: 0x61CB,
+ 5246: 0x7F79,
+ 5247: 0x61CD,
+ 5248: 0x61E6,
+ 5249: 0x61E3,
+ 5250: 0x61F6,
+ 5251: 0x61FA,
+ 5252: 0x61F4,
+ 5253: 0x61FF,
+ 5254: 0x61FD,
+ 5255: 0x61FC,
+ 5256: 0x61FE,
+ 5257: 0x6200,
+ 5258: 0x6208,
+ 5259: 0x6209,
+ 5260: 0x620D,
+ 5261: 0x620C,
+ 5262: 0x6214,
+ 5263: 0x621B,
+ 5264: 0x621E,
+ 5265: 0x6221,
+ 5266: 0x622A,
+ 5267: 0x622E,
+ 5268: 0x6230,
+ 5269: 0x6232,
+ 5270: 0x6233,
+ 5271: 0x6241,
+ 5272: 0x624E,
+ 5273: 0x625E,
+ 5274: 0x6263,
+ 5275: 0x625B,
+ 5276: 0x6260,
+ 5277: 0x6268,
+ 5278: 0x627C,
+ 5279: 0x6282,
+ 5280: 0x6289,
+ 5281: 0x627E,
+ 5282: 0x6292,
+ 5283: 0x6293,
+ 5284: 0x6296,
+ 5285: 0x62D4,
+ 5286: 0x6283,
+ 5287: 0x6294,
+ 5288: 0x62D7,
+ 5289: 0x62D1,
+ 5290: 0x62BB,
+ 5291: 0x62CF,
+ 5292: 0x62FF,
+ 5293: 0x62C6,
+ 5294: 0x64D4,
+ 5295: 0x62C8,
+ 5296: 0x62DC,
+ 5297: 0x62CC,
+ 5298: 0x62CA,
+ 5299: 0x62C2,
+ 5300: 0x62C7,
+ 5301: 0x629B,
+ 5302: 0x62C9,
+ 5303: 0x630C,
+ 5304: 0x62EE,
+ 5305: 0x62F1,
+ 5306: 0x6327,
+ 5307: 0x6302,
+ 5308: 0x6308,
+ 5309: 0x62EF,
+ 5310: 0x62F5,
+ 5311: 0x6350,
+ 5312: 0x633E,
+ 5313: 0x634D,
+ 5314: 0x641C,
+ 5315: 0x634F,
+ 5316: 0x6396,
+ 5317: 0x638E,
+ 5318: 0x6380,
+ 5319: 0x63AB,
+ 5320: 0x6376,
+ 5321: 0x63A3,
+ 5322: 0x638F,
+ 5323: 0x6389,
+ 5324: 0x639F,
+ 5325: 0x63B5,
+ 5326: 0x636B,
+ 5327: 0x6369,
+ 5328: 0x63BE,
+ 5329: 0x63E9,
+ 5330: 0x63C0,
+ 5331: 0x63C6,
+ 5332: 0x63E3,
+ 5333: 0x63C9,
+ 5334: 0x63D2,
+ 5335: 0x63F6,
+ 5336: 0x63C4,
+ 5337: 0x6416,
+ 5338: 0x6434,
+ 5339: 0x6406,
+ 5340: 0x6413,
+ 5341: 0x6426,
+ 5342: 0x6436,
+ 5343: 0x651D,
+ 5344: 0x6417,
+ 5345: 0x6428,
+ 5346: 0x640F,
+ 5347: 0x6467,
+ 5348: 0x646F,
+ 5349: 0x6476,
+ 5350: 0x644E,
+ 5351: 0x652A,
+ 5352: 0x6495,
+ 5353: 0x6493,
+ 5354: 0x64A5,
+ 5355: 0x64A9,
+ 5356: 0x6488,
+ 5357: 0x64BC,
+ 5358: 0x64DA,
+ 5359: 0x64D2,
+ 5360: 0x64C5,
+ 5361: 0x64C7,
+ 5362: 0x64BB,
+ 5363: 0x64D8,
+ 5364: 0x64C2,
+ 5365: 0x64F1,
+ 5366: 0x64E7,
+ 5367: 0x8209,
+ 5368: 0x64E0,
+ 5369: 0x64E1,
+ 5370: 0x62AC,
+ 5371: 0x64E3,
+ 5372: 0x64EF,
+ 5373: 0x652C,
+ 5374: 0x64F6,
+ 5375: 0x64F4,
+ 5376: 0x64F2,
+ 5377: 0x64FA,
+ 5378: 0x6500,
+ 5379: 0x64FD,
+ 5380: 0x6518,
+ 5381: 0x651C,
+ 5382: 0x6505,
+ 5383: 0x6524,
+ 5384: 0x6523,
+ 5385: 0x652B,
+ 5386: 0x6534,
+ 5387: 0x6535,
+ 5388: 0x6537,
+ 5389: 0x6536,
+ 5390: 0x6538,
+ 5391: 0x754B,
+ 5392: 0x6548,
+ 5393: 0x6556,
+ 5394: 0x6555,
+ 5395: 0x654D,
+ 5396: 0x6558,
+ 5397: 0x655E,
+ 5398: 0x655D,
+ 5399: 0x6572,
+ 5400: 0x6578,
+ 5401: 0x6582,
+ 5402: 0x6583,
+ 5403: 0x8B8A,
+ 5404: 0x659B,
+ 5405: 0x659F,
+ 5406: 0x65AB,
+ 5407: 0x65B7,
+ 5408: 0x65C3,
+ 5409: 0x65C6,
+ 5410: 0x65C1,
+ 5411: 0x65C4,
+ 5412: 0x65CC,
+ 5413: 0x65D2,
+ 5414: 0x65DB,
+ 5415: 0x65D9,
+ 5416: 0x65E0,
+ 5417: 0x65E1,
+ 5418: 0x65F1,
+ 5419: 0x6772,
+ 5420: 0x660A,
+ 5421: 0x6603,
+ 5422: 0x65FB,
+ 5423: 0x6773,
+ 5424: 0x6635,
+ 5425: 0x6636,
+ 5426: 0x6634,
+ 5427: 0x661C,
+ 5428: 0x664F,
+ 5429: 0x6644,
+ 5430: 0x6649,
+ 5431: 0x6641,
+ 5432: 0x665E,
+ 5433: 0x665D,
+ 5434: 0x6664,
+ 5435: 0x6667,
+ 5436: 0x6668,
+ 5437: 0x665F,
+ 5438: 0x6662,
+ 5439: 0x6670,
+ 5440: 0x6683,
+ 5441: 0x6688,
+ 5442: 0x668E,
+ 5443: 0x6689,
+ 5444: 0x6684,
+ 5445: 0x6698,
+ 5446: 0x669D,
+ 5447: 0x66C1,
+ 5448: 0x66B9,
+ 5449: 0x66C9,
+ 5450: 0x66BE,
+ 5451: 0x66BC,
+ 5452: 0x66C4,
+ 5453: 0x66B8,
+ 5454: 0x66D6,
+ 5455: 0x66DA,
+ 5456: 0x66E0,
+ 5457: 0x663F,
+ 5458: 0x66E6,
+ 5459: 0x66E9,
+ 5460: 0x66F0,
+ 5461: 0x66F5,
+ 5462: 0x66F7,
+ 5463: 0x670F,
+ 5464: 0x6716,
+ 5465: 0x671E,
+ 5466: 0x6726,
+ 5467: 0x6727,
+ 5468: 0x9738,
+ 5469: 0x672E,
+ 5470: 0x673F,
+ 5471: 0x6736,
+ 5472: 0x6741,
+ 5473: 0x6738,
+ 5474: 0x6737,
+ 5475: 0x6746,
+ 5476: 0x675E,
+ 5477: 0x6760,
+ 5478: 0x6759,
+ 5479: 0x6763,
+ 5480: 0x6764,
+ 5481: 0x6789,
+ 5482: 0x6770,
+ 5483: 0x67A9,
+ 5484: 0x677C,
+ 5485: 0x676A,
+ 5486: 0x678C,
+ 5487: 0x678B,
+ 5488: 0x67A6,
+ 5489: 0x67A1,
+ 5490: 0x6785,
+ 5491: 0x67B7,
+ 5492: 0x67EF,
+ 5493: 0x67B4,
+ 5494: 0x67EC,
+ 5495: 0x67B3,
+ 5496: 0x67E9,
+ 5497: 0x67B8,
+ 5498: 0x67E4,
+ 5499: 0x67DE,
+ 5500: 0x67DD,
+ 5501: 0x67E2,
+ 5502: 0x67EE,
+ 5503: 0x67B9,
+ 5504: 0x67CE,
+ 5505: 0x67C6,
+ 5506: 0x67E7,
+ 5507: 0x6A9C,
+ 5508: 0x681E,
+ 5509: 0x6846,
+ 5510: 0x6829,
+ 5511: 0x6840,
+ 5512: 0x684D,
+ 5513: 0x6832,
+ 5514: 0x684E,
+ 5515: 0x68B3,
+ 5516: 0x682B,
+ 5517: 0x6859,
+ 5518: 0x6863,
+ 5519: 0x6877,
+ 5520: 0x687F,
+ 5521: 0x689F,
+ 5522: 0x688F,
+ 5523: 0x68AD,
+ 5524: 0x6894,
+ 5525: 0x689D,
+ 5526: 0x689B,
+ 5527: 0x6883,
+ 5528: 0x6AAE,
+ 5529: 0x68B9,
+ 5530: 0x6874,
+ 5531: 0x68B5,
+ 5532: 0x68A0,
+ 5533: 0x68BA,
+ 5534: 0x690F,
+ 5535: 0x688D,
+ 5536: 0x687E,
+ 5537: 0x6901,
+ 5538: 0x68CA,
+ 5539: 0x6908,
+ 5540: 0x68D8,
+ 5541: 0x6922,
+ 5542: 0x6926,
+ 5543: 0x68E1,
+ 5544: 0x690C,
+ 5545: 0x68CD,
+ 5546: 0x68D4,
+ 5547: 0x68E7,
+ 5548: 0x68D5,
+ 5549: 0x6936,
+ 5550: 0x6912,
+ 5551: 0x6904,
+ 5552: 0x68D7,
+ 5553: 0x68E3,
+ 5554: 0x6925,
+ 5555: 0x68F9,
+ 5556: 0x68E0,
+ 5557: 0x68EF,
+ 5558: 0x6928,
+ 5559: 0x692A,
+ 5560: 0x691A,
+ 5561: 0x6923,
+ 5562: 0x6921,
+ 5563: 0x68C6,
+ 5564: 0x6979,
+ 5565: 0x6977,
+ 5566: 0x695C,
+ 5567: 0x6978,
+ 5568: 0x696B,
+ 5569: 0x6954,
+ 5570: 0x697E,
+ 5571: 0x696E,
+ 5572: 0x6939,
+ 5573: 0x6974,
+ 5574: 0x693D,
+ 5575: 0x6959,
+ 5576: 0x6930,
+ 5577: 0x6961,
+ 5578: 0x695E,
+ 5579: 0x695D,
+ 5580: 0x6981,
+ 5581: 0x696A,
+ 5582: 0x69B2,
+ 5583: 0x69AE,
+ 5584: 0x69D0,
+ 5585: 0x69BF,
+ 5586: 0x69C1,
+ 5587: 0x69D3,
+ 5588: 0x69BE,
+ 5589: 0x69CE,
+ 5590: 0x5BE8,
+ 5591: 0x69CA,
+ 5592: 0x69DD,
+ 5593: 0x69BB,
+ 5594: 0x69C3,
+ 5595: 0x69A7,
+ 5596: 0x6A2E,
+ 5597: 0x6991,
+ 5598: 0x69A0,
+ 5599: 0x699C,
+ 5600: 0x6995,
+ 5601: 0x69B4,
+ 5602: 0x69DE,
+ 5603: 0x69E8,
+ 5604: 0x6A02,
+ 5605: 0x6A1B,
+ 5606: 0x69FF,
+ 5607: 0x6B0A,
+ 5608: 0x69F9,
+ 5609: 0x69F2,
+ 5610: 0x69E7,
+ 5611: 0x6A05,
+ 5612: 0x69B1,
+ 5613: 0x6A1E,
+ 5614: 0x69ED,
+ 5615: 0x6A14,
+ 5616: 0x69EB,
+ 5617: 0x6A0A,
+ 5618: 0x6A12,
+ 5619: 0x6AC1,
+ 5620: 0x6A23,
+ 5621: 0x6A13,
+ 5622: 0x6A44,
+ 5623: 0x6A0C,
+ 5624: 0x6A72,
+ 5625: 0x6A36,
+ 5626: 0x6A78,
+ 5627: 0x6A47,
+ 5628: 0x6A62,
+ 5629: 0x6A59,
+ 5630: 0x6A66,
+ 5631: 0x6A48,
+ 5632: 0x6A38,
+ 5633: 0x6A22,
+ 5634: 0x6A90,
+ 5635: 0x6A8D,
+ 5636: 0x6AA0,
+ 5637: 0x6A84,
+ 5638: 0x6AA2,
+ 5639: 0x6AA3,
+ 5640: 0x6A97,
+ 5641: 0x8617,
+ 5642: 0x6ABB,
+ 5643: 0x6AC3,
+ 5644: 0x6AC2,
+ 5645: 0x6AB8,
+ 5646: 0x6AB3,
+ 5647: 0x6AAC,
+ 5648: 0x6ADE,
+ 5649: 0x6AD1,
+ 5650: 0x6ADF,
+ 5651: 0x6AAA,
+ 5652: 0x6ADA,
+ 5653: 0x6AEA,
+ 5654: 0x6AFB,
+ 5655: 0x6B05,
+ 5656: 0x8616,
+ 5657: 0x6AFA,
+ 5658: 0x6B12,
+ 5659: 0x6B16,
+ 5660: 0x9B31,
+ 5661: 0x6B1F,
+ 5662: 0x6B38,
+ 5663: 0x6B37,
+ 5664: 0x76DC,
+ 5665: 0x6B39,
+ 5666: 0x98EE,
+ 5667: 0x6B47,
+ 5668: 0x6B43,
+ 5669: 0x6B49,
+ 5670: 0x6B50,
+ 5671: 0x6B59,
+ 5672: 0x6B54,
+ 5673: 0x6B5B,
+ 5674: 0x6B5F,
+ 5675: 0x6B61,
+ 5676: 0x6B78,
+ 5677: 0x6B79,
+ 5678: 0x6B7F,
+ 5679: 0x6B80,
+ 5680: 0x6B84,
+ 5681: 0x6B83,
+ 5682: 0x6B8D,
+ 5683: 0x6B98,
+ 5684: 0x6B95,
+ 5685: 0x6B9E,
+ 5686: 0x6BA4,
+ 5687: 0x6BAA,
+ 5688: 0x6BAB,
+ 5689: 0x6BAF,
+ 5690: 0x6BB2,
+ 5691: 0x6BB1,
+ 5692: 0x6BB3,
+ 5693: 0x6BB7,
+ 5694: 0x6BBC,
+ 5695: 0x6BC6,
+ 5696: 0x6BCB,
+ 5697: 0x6BD3,
+ 5698: 0x6BDF,
+ 5699: 0x6BEC,
+ 5700: 0x6BEB,
+ 5701: 0x6BF3,
+ 5702: 0x6BEF,
+ 5703: 0x9EBE,
+ 5704: 0x6C08,
+ 5705: 0x6C13,
+ 5706: 0x6C14,
+ 5707: 0x6C1B,
+ 5708: 0x6C24,
+ 5709: 0x6C23,
+ 5710: 0x6C5E,
+ 5711: 0x6C55,
+ 5712: 0x6C62,
+ 5713: 0x6C6A,
+ 5714: 0x6C82,
+ 5715: 0x6C8D,
+ 5716: 0x6C9A,
+ 5717: 0x6C81,
+ 5718: 0x6C9B,
+ 5719: 0x6C7E,
+ 5720: 0x6C68,
+ 5721: 0x6C73,
+ 5722: 0x6C92,
+ 5723: 0x6C90,
+ 5724: 0x6CC4,
+ 5725: 0x6CF1,
+ 5726: 0x6CD3,
+ 5727: 0x6CBD,
+ 5728: 0x6CD7,
+ 5729: 0x6CC5,
+ 5730: 0x6CDD,
+ 5731: 0x6CAE,
+ 5732: 0x6CB1,
+ 5733: 0x6CBE,
+ 5734: 0x6CBA,
+ 5735: 0x6CDB,
+ 5736: 0x6CEF,
+ 5737: 0x6CD9,
+ 5738: 0x6CEA,
+ 5739: 0x6D1F,
+ 5740: 0x884D,
+ 5741: 0x6D36,
+ 5742: 0x6D2B,
+ 5743: 0x6D3D,
+ 5744: 0x6D38,
+ 5745: 0x6D19,
+ 5746: 0x6D35,
+ 5747: 0x6D33,
+ 5748: 0x6D12,
+ 5749: 0x6D0C,
+ 5750: 0x6D63,
+ 5751: 0x6D93,
+ 5752: 0x6D64,
+ 5753: 0x6D5A,
+ 5754: 0x6D79,
+ 5755: 0x6D59,
+ 5756: 0x6D8E,
+ 5757: 0x6D95,
+ 5758: 0x6FE4,
+ 5759: 0x6D85,
+ 5760: 0x6DF9,
+ 5761: 0x6E15,
+ 5762: 0x6E0A,
+ 5763: 0x6DB5,
+ 5764: 0x6DC7,
+ 5765: 0x6DE6,
+ 5766: 0x6DB8,
+ 5767: 0x6DC6,
+ 5768: 0x6DEC,
+ 5769: 0x6DDE,
+ 5770: 0x6DCC,
+ 5771: 0x6DE8,
+ 5772: 0x6DD2,
+ 5773: 0x6DC5,
+ 5774: 0x6DFA,
+ 5775: 0x6DD9,
+ 5776: 0x6DE4,
+ 5777: 0x6DD5,
+ 5778: 0x6DEA,
+ 5779: 0x6DEE,
+ 5780: 0x6E2D,
+ 5781: 0x6E6E,
+ 5782: 0x6E2E,
+ 5783: 0x6E19,
+ 5784: 0x6E72,
+ 5785: 0x6E5F,
+ 5786: 0x6E3E,
+ 5787: 0x6E23,
+ 5788: 0x6E6B,
+ 5789: 0x6E2B,
+ 5790: 0x6E76,
+ 5791: 0x6E4D,
+ 5792: 0x6E1F,
+ 5793: 0x6E43,
+ 5794: 0x6E3A,
+ 5795: 0x6E4E,
+ 5796: 0x6E24,
+ 5797: 0x6EFF,
+ 5798: 0x6E1D,
+ 5799: 0x6E38,
+ 5800: 0x6E82,
+ 5801: 0x6EAA,
+ 5802: 0x6E98,
+ 5803: 0x6EC9,
+ 5804: 0x6EB7,
+ 5805: 0x6ED3,
+ 5806: 0x6EBD,
+ 5807: 0x6EAF,
+ 5808: 0x6EC4,
+ 5809: 0x6EB2,
+ 5810: 0x6ED4,
+ 5811: 0x6ED5,
+ 5812: 0x6E8F,
+ 5813: 0x6EA5,
+ 5814: 0x6EC2,
+ 5815: 0x6E9F,
+ 5816: 0x6F41,
+ 5817: 0x6F11,
+ 5818: 0x704C,
+ 5819: 0x6EEC,
+ 5820: 0x6EF8,
+ 5821: 0x6EFE,
+ 5822: 0x6F3F,
+ 5823: 0x6EF2,
+ 5824: 0x6F31,
+ 5825: 0x6EEF,
+ 5826: 0x6F32,
+ 5827: 0x6ECC,
+ 5828: 0x6F3E,
+ 5829: 0x6F13,
+ 5830: 0x6EF7,
+ 5831: 0x6F86,
+ 5832: 0x6F7A,
+ 5833: 0x6F78,
+ 5834: 0x6F81,
+ 5835: 0x6F80,
+ 5836: 0x6F6F,
+ 5837: 0x6F5B,
+ 5838: 0x6FF3,
+ 5839: 0x6F6D,
+ 5840: 0x6F82,
+ 5841: 0x6F7C,
+ 5842: 0x6F58,
+ 5843: 0x6F8E,
+ 5844: 0x6F91,
+ 5845: 0x6FC2,
+ 5846: 0x6F66,
+ 5847: 0x6FB3,
+ 5848: 0x6FA3,
+ 5849: 0x6FA1,
+ 5850: 0x6FA4,
+ 5851: 0x6FB9,
+ 5852: 0x6FC6,
+ 5853: 0x6FAA,
+ 5854: 0x6FDF,
+ 5855: 0x6FD5,
+ 5856: 0x6FEC,
+ 5857: 0x6FD4,
+ 5858: 0x6FD8,
+ 5859: 0x6FF1,
+ 5860: 0x6FEE,
+ 5861: 0x6FDB,
+ 5862: 0x7009,
+ 5863: 0x700B,
+ 5864: 0x6FFA,
+ 5865: 0x7011,
+ 5866: 0x7001,
+ 5867: 0x700F,
+ 5868: 0x6FFE,
+ 5869: 0x701B,
+ 5870: 0x701A,
+ 5871: 0x6F74,
+ 5872: 0x701D,
+ 5873: 0x7018,
+ 5874: 0x701F,
+ 5875: 0x7030,
+ 5876: 0x703E,
+ 5877: 0x7032,
+ 5878: 0x7051,
+ 5879: 0x7063,
+ 5880: 0x7099,
+ 5881: 0x7092,
+ 5882: 0x70AF,
+ 5883: 0x70F1,
+ 5884: 0x70AC,
+ 5885: 0x70B8,
+ 5886: 0x70B3,
+ 5887: 0x70AE,
+ 5888: 0x70DF,
+ 5889: 0x70CB,
+ 5890: 0x70DD,
+ 5891: 0x70D9,
+ 5892: 0x7109,
+ 5893: 0x70FD,
+ 5894: 0x711C,
+ 5895: 0x7119,
+ 5896: 0x7165,
+ 5897: 0x7155,
+ 5898: 0x7188,
+ 5899: 0x7166,
+ 5900: 0x7162,
+ 5901: 0x714C,
+ 5902: 0x7156,
+ 5903: 0x716C,
+ 5904: 0x718F,
+ 5905: 0x71FB,
+ 5906: 0x7184,
+ 5907: 0x7195,
+ 5908: 0x71A8,
+ 5909: 0x71AC,
+ 5910: 0x71D7,
+ 5911: 0x71B9,
+ 5912: 0x71BE,
+ 5913: 0x71D2,
+ 5914: 0x71C9,
+ 5915: 0x71D4,
+ 5916: 0x71CE,
+ 5917: 0x71E0,
+ 5918: 0x71EC,
+ 5919: 0x71E7,
+ 5920: 0x71F5,
+ 5921: 0x71FC,
+ 5922: 0x71F9,
+ 5923: 0x71FF,
+ 5924: 0x720D,
+ 5925: 0x7210,
+ 5926: 0x721B,
+ 5927: 0x7228,
+ 5928: 0x722D,
+ 5929: 0x722C,
+ 5930: 0x7230,
+ 5931: 0x7232,
+ 5932: 0x723B,
+ 5933: 0x723C,
+ 5934: 0x723F,
+ 5935: 0x7240,
+ 5936: 0x7246,
+ 5937: 0x724B,
+ 5938: 0x7258,
+ 5939: 0x7274,
+ 5940: 0x727E,
+ 5941: 0x7282,
+ 5942: 0x7281,
+ 5943: 0x7287,
+ 5944: 0x7292,
+ 5945: 0x7296,
+ 5946: 0x72A2,
+ 5947: 0x72A7,
+ 5948: 0x72B9,
+ 5949: 0x72B2,
+ 5950: 0x72C3,
+ 5951: 0x72C6,
+ 5952: 0x72C4,
+ 5953: 0x72CE,
+ 5954: 0x72D2,
+ 5955: 0x72E2,
+ 5956: 0x72E0,
+ 5957: 0x72E1,
+ 5958: 0x72F9,
+ 5959: 0x72F7,
+ 5960: 0x500F,
+ 5961: 0x7317,
+ 5962: 0x730A,
+ 5963: 0x731C,
+ 5964: 0x7316,
+ 5965: 0x731D,
+ 5966: 0x7334,
+ 5967: 0x732F,
+ 5968: 0x7329,
+ 5969: 0x7325,
+ 5970: 0x733E,
+ 5971: 0x734E,
+ 5972: 0x734F,
+ 5973: 0x9ED8,
+ 5974: 0x7357,
+ 5975: 0x736A,
+ 5976: 0x7368,
+ 5977: 0x7370,
+ 5978: 0x7378,
+ 5979: 0x7375,
+ 5980: 0x737B,
+ 5981: 0x737A,
+ 5982: 0x73C8,
+ 5983: 0x73B3,
+ 5984: 0x73CE,
+ 5985: 0x73BB,
+ 5986: 0x73C0,
+ 5987: 0x73E5,
+ 5988: 0x73EE,
+ 5989: 0x73DE,
+ 5990: 0x74A2,
+ 5991: 0x7405,
+ 5992: 0x746F,
+ 5993: 0x7425,
+ 5994: 0x73F8,
+ 5995: 0x7432,
+ 5996: 0x743A,
+ 5997: 0x7455,
+ 5998: 0x743F,
+ 5999: 0x745F,
+ 6000: 0x7459,
+ 6001: 0x7441,
+ 6002: 0x745C,
+ 6003: 0x7469,
+ 6004: 0x7470,
+ 6005: 0x7463,
+ 6006: 0x746A,
+ 6007: 0x7476,
+ 6008: 0x747E,
+ 6009: 0x748B,
+ 6010: 0x749E,
+ 6011: 0x74A7,
+ 6012: 0x74CA,
+ 6013: 0x74CF,
+ 6014: 0x74D4,
+ 6015: 0x73F1,
+ 6016: 0x74E0,
+ 6017: 0x74E3,
+ 6018: 0x74E7,
+ 6019: 0x74E9,
+ 6020: 0x74EE,
+ 6021: 0x74F2,
+ 6022: 0x74F0,
+ 6023: 0x74F1,
+ 6024: 0x74F8,
+ 6025: 0x74F7,
+ 6026: 0x7504,
+ 6027: 0x7503,
+ 6028: 0x7505,
+ 6029: 0x750C,
+ 6030: 0x750E,
+ 6031: 0x750D,
+ 6032: 0x7515,
+ 6033: 0x7513,
+ 6034: 0x751E,
+ 6035: 0x7526,
+ 6036: 0x752C,
+ 6037: 0x753C,
+ 6038: 0x7544,
+ 6039: 0x754D,
+ 6040: 0x754A,
+ 6041: 0x7549,
+ 6042: 0x755B,
+ 6043: 0x7546,
+ 6044: 0x755A,
+ 6045: 0x7569,
+ 6046: 0x7564,
+ 6047: 0x7567,
+ 6048: 0x756B,
+ 6049: 0x756D,
+ 6050: 0x7578,
+ 6051: 0x7576,
+ 6052: 0x7586,
+ 6053: 0x7587,
+ 6054: 0x7574,
+ 6055: 0x758A,
+ 6056: 0x7589,
+ 6057: 0x7582,
+ 6058: 0x7594,
+ 6059: 0x759A,
+ 6060: 0x759D,
+ 6061: 0x75A5,
+ 6062: 0x75A3,
+ 6063: 0x75C2,
+ 6064: 0x75B3,
+ 6065: 0x75C3,
+ 6066: 0x75B5,
+ 6067: 0x75BD,
+ 6068: 0x75B8,
+ 6069: 0x75BC,
+ 6070: 0x75B1,
+ 6071: 0x75CD,
+ 6072: 0x75CA,
+ 6073: 0x75D2,
+ 6074: 0x75D9,
+ 6075: 0x75E3,
+ 6076: 0x75DE,
+ 6077: 0x75FE,
+ 6078: 0x75FF,
+ 6079: 0x75FC,
+ 6080: 0x7601,
+ 6081: 0x75F0,
+ 6082: 0x75FA,
+ 6083: 0x75F2,
+ 6084: 0x75F3,
+ 6085: 0x760B,
+ 6086: 0x760D,
+ 6087: 0x7609,
+ 6088: 0x761F,
+ 6089: 0x7627,
+ 6090: 0x7620,
+ 6091: 0x7621,
+ 6092: 0x7622,
+ 6093: 0x7624,
+ 6094: 0x7634,
+ 6095: 0x7630,
+ 6096: 0x763B,
+ 6097: 0x7647,
+ 6098: 0x7648,
+ 6099: 0x7646,
+ 6100: 0x765C,
+ 6101: 0x7658,
+ 6102: 0x7661,
+ 6103: 0x7662,
+ 6104: 0x7668,
+ 6105: 0x7669,
+ 6106: 0x766A,
+ 6107: 0x7667,
+ 6108: 0x766C,
+ 6109: 0x7670,
+ 6110: 0x7672,
+ 6111: 0x7676,
+ 6112: 0x7678,
+ 6113: 0x767C,
+ 6114: 0x7680,
+ 6115: 0x7683,
+ 6116: 0x7688,
+ 6117: 0x768B,
+ 6118: 0x768E,
+ 6119: 0x7696,
+ 6120: 0x7693,
+ 6121: 0x7699,
+ 6122: 0x769A,
+ 6123: 0x76B0,
+ 6124: 0x76B4,
+ 6125: 0x76B8,
+ 6126: 0x76B9,
+ 6127: 0x76BA,
+ 6128: 0x76C2,
+ 6129: 0x76CD,
+ 6130: 0x76D6,
+ 6131: 0x76D2,
+ 6132: 0x76DE,
+ 6133: 0x76E1,
+ 6134: 0x76E5,
+ 6135: 0x76E7,
+ 6136: 0x76EA,
+ 6137: 0x862F,
+ 6138: 0x76FB,
+ 6139: 0x7708,
+ 6140: 0x7707,
+ 6141: 0x7704,
+ 6142: 0x7729,
+ 6143: 0x7724,
+ 6144: 0x771E,
+ 6145: 0x7725,
+ 6146: 0x7726,
+ 6147: 0x771B,
+ 6148: 0x7737,
+ 6149: 0x7738,
+ 6150: 0x7747,
+ 6151: 0x775A,
+ 6152: 0x7768,
+ 6153: 0x776B,
+ 6154: 0x775B,
+ 6155: 0x7765,
+ 6156: 0x777F,
+ 6157: 0x777E,
+ 6158: 0x7779,
+ 6159: 0x778E,
+ 6160: 0x778B,
+ 6161: 0x7791,
+ 6162: 0x77A0,
+ 6163: 0x779E,
+ 6164: 0x77B0,
+ 6165: 0x77B6,
+ 6166: 0x77B9,
+ 6167: 0x77BF,
+ 6168: 0x77BC,
+ 6169: 0x77BD,
+ 6170: 0x77BB,
+ 6171: 0x77C7,
+ 6172: 0x77CD,
+ 6173: 0x77D7,
+ 6174: 0x77DA,
+ 6175: 0x77DC,
+ 6176: 0x77E3,
+ 6177: 0x77EE,
+ 6178: 0x77FC,
+ 6179: 0x780C,
+ 6180: 0x7812,
+ 6181: 0x7926,
+ 6182: 0x7820,
+ 6183: 0x792A,
+ 6184: 0x7845,
+ 6185: 0x788E,
+ 6186: 0x7874,
+ 6187: 0x7886,
+ 6188: 0x787C,
+ 6189: 0x789A,
+ 6190: 0x788C,
+ 6191: 0x78A3,
+ 6192: 0x78B5,
+ 6193: 0x78AA,
+ 6194: 0x78AF,
+ 6195: 0x78D1,
+ 6196: 0x78C6,
+ 6197: 0x78CB,
+ 6198: 0x78D4,
+ 6199: 0x78BE,
+ 6200: 0x78BC,
+ 6201: 0x78C5,
+ 6202: 0x78CA,
+ 6203: 0x78EC,
+ 6204: 0x78E7,
+ 6205: 0x78DA,
+ 6206: 0x78FD,
+ 6207: 0x78F4,
+ 6208: 0x7907,
+ 6209: 0x7912,
+ 6210: 0x7911,
+ 6211: 0x7919,
+ 6212: 0x792C,
+ 6213: 0x792B,
+ 6214: 0x7940,
+ 6215: 0x7960,
+ 6216: 0x7957,
+ 6217: 0x795F,
+ 6218: 0x795A,
+ 6219: 0x7955,
+ 6220: 0x7953,
+ 6221: 0x797A,
+ 6222: 0x797F,
+ 6223: 0x798A,
+ 6224: 0x799D,
+ 6225: 0x79A7,
+ 6226: 0x9F4B,
+ 6227: 0x79AA,
+ 6228: 0x79AE,
+ 6229: 0x79B3,
+ 6230: 0x79B9,
+ 6231: 0x79BA,
+ 6232: 0x79C9,
+ 6233: 0x79D5,
+ 6234: 0x79E7,
+ 6235: 0x79EC,
+ 6236: 0x79E1,
+ 6237: 0x79E3,
+ 6238: 0x7A08,
+ 6239: 0x7A0D,
+ 6240: 0x7A18,
+ 6241: 0x7A19,
+ 6242: 0x7A20,
+ 6243: 0x7A1F,
+ 6244: 0x7980,
+ 6245: 0x7A31,
+ 6246: 0x7A3B,
+ 6247: 0x7A3E,
+ 6248: 0x7A37,
+ 6249: 0x7A43,
+ 6250: 0x7A57,
+ 6251: 0x7A49,
+ 6252: 0x7A61,
+ 6253: 0x7A62,
+ 6254: 0x7A69,
+ 6255: 0x9F9D,
+ 6256: 0x7A70,
+ 6257: 0x7A79,
+ 6258: 0x7A7D,
+ 6259: 0x7A88,
+ 6260: 0x7A97,
+ 6261: 0x7A95,
+ 6262: 0x7A98,
+ 6263: 0x7A96,
+ 6264: 0x7AA9,
+ 6265: 0x7AC8,
+ 6266: 0x7AB0,
+ 6267: 0x7AB6,
+ 6268: 0x7AC5,
+ 6269: 0x7AC4,
+ 6270: 0x7ABF,
+ 6271: 0x9083,
+ 6272: 0x7AC7,
+ 6273: 0x7ACA,
+ 6274: 0x7ACD,
+ 6275: 0x7ACF,
+ 6276: 0x7AD5,
+ 6277: 0x7AD3,
+ 6278: 0x7AD9,
+ 6279: 0x7ADA,
+ 6280: 0x7ADD,
+ 6281: 0x7AE1,
+ 6282: 0x7AE2,
+ 6283: 0x7AE6,
+ 6284: 0x7AED,
+ 6285: 0x7AF0,
+ 6286: 0x7B02,
+ 6287: 0x7B0F,
+ 6288: 0x7B0A,
+ 6289: 0x7B06,
+ 6290: 0x7B33,
+ 6291: 0x7B18,
+ 6292: 0x7B19,
+ 6293: 0x7B1E,
+ 6294: 0x7B35,
+ 6295: 0x7B28,
+ 6296: 0x7B36,
+ 6297: 0x7B50,
+ 6298: 0x7B7A,
+ 6299: 0x7B04,
+ 6300: 0x7B4D,
+ 6301: 0x7B0B,
+ 6302: 0x7B4C,
+ 6303: 0x7B45,
+ 6304: 0x7B75,
+ 6305: 0x7B65,
+ 6306: 0x7B74,
+ 6307: 0x7B67,
+ 6308: 0x7B70,
+ 6309: 0x7B71,
+ 6310: 0x7B6C,
+ 6311: 0x7B6E,
+ 6312: 0x7B9D,
+ 6313: 0x7B98,
+ 6314: 0x7B9F,
+ 6315: 0x7B8D,
+ 6316: 0x7B9C,
+ 6317: 0x7B9A,
+ 6318: 0x7B8B,
+ 6319: 0x7B92,
+ 6320: 0x7B8F,
+ 6321: 0x7B5D,
+ 6322: 0x7B99,
+ 6323: 0x7BCB,
+ 6324: 0x7BC1,
+ 6325: 0x7BCC,
+ 6326: 0x7BCF,
+ 6327: 0x7BB4,
+ 6328: 0x7BC6,
+ 6329: 0x7BDD,
+ 6330: 0x7BE9,
+ 6331: 0x7C11,
+ 6332: 0x7C14,
+ 6333: 0x7BE6,
+ 6334: 0x7BE5,
+ 6335: 0x7C60,
+ 6336: 0x7C00,
+ 6337: 0x7C07,
+ 6338: 0x7C13,
+ 6339: 0x7BF3,
+ 6340: 0x7BF7,
+ 6341: 0x7C17,
+ 6342: 0x7C0D,
+ 6343: 0x7BF6,
+ 6344: 0x7C23,
+ 6345: 0x7C27,
+ 6346: 0x7C2A,
+ 6347: 0x7C1F,
+ 6348: 0x7C37,
+ 6349: 0x7C2B,
+ 6350: 0x7C3D,
+ 6351: 0x7C4C,
+ 6352: 0x7C43,
+ 6353: 0x7C54,
+ 6354: 0x7C4F,
+ 6355: 0x7C40,
+ 6356: 0x7C50,
+ 6357: 0x7C58,
+ 6358: 0x7C5F,
+ 6359: 0x7C64,
+ 6360: 0x7C56,
+ 6361: 0x7C65,
+ 6362: 0x7C6C,
+ 6363: 0x7C75,
+ 6364: 0x7C83,
+ 6365: 0x7C90,
+ 6366: 0x7CA4,
+ 6367: 0x7CAD,
+ 6368: 0x7CA2,
+ 6369: 0x7CAB,
+ 6370: 0x7CA1,
+ 6371: 0x7CA8,
+ 6372: 0x7CB3,
+ 6373: 0x7CB2,
+ 6374: 0x7CB1,
+ 6375: 0x7CAE,
+ 6376: 0x7CB9,
+ 6377: 0x7CBD,
+ 6378: 0x7CC0,
+ 6379: 0x7CC5,
+ 6380: 0x7CC2,
+ 6381: 0x7CD8,
+ 6382: 0x7CD2,
+ 6383: 0x7CDC,
+ 6384: 0x7CE2,
+ 6385: 0x9B3B,
+ 6386: 0x7CEF,
+ 6387: 0x7CF2,
+ 6388: 0x7CF4,
+ 6389: 0x7CF6,
+ 6390: 0x7CFA,
+ 6391: 0x7D06,
+ 6392: 0x7D02,
+ 6393: 0x7D1C,
+ 6394: 0x7D15,
+ 6395: 0x7D0A,
+ 6396: 0x7D45,
+ 6397: 0x7D4B,
+ 6398: 0x7D2E,
+ 6399: 0x7D32,
+ 6400: 0x7D3F,
+ 6401: 0x7D35,
+ 6402: 0x7D46,
+ 6403: 0x7D73,
+ 6404: 0x7D56,
+ 6405: 0x7D4E,
+ 6406: 0x7D72,
+ 6407: 0x7D68,
+ 6408: 0x7D6E,
+ 6409: 0x7D4F,
+ 6410: 0x7D63,
+ 6411: 0x7D93,
+ 6412: 0x7D89,
+ 6413: 0x7D5B,
+ 6414: 0x7D8F,
+ 6415: 0x7D7D,
+ 6416: 0x7D9B,
+ 6417: 0x7DBA,
+ 6418: 0x7DAE,
+ 6419: 0x7DA3,
+ 6420: 0x7DB5,
+ 6421: 0x7DC7,
+ 6422: 0x7DBD,
+ 6423: 0x7DAB,
+ 6424: 0x7E3D,
+ 6425: 0x7DA2,
+ 6426: 0x7DAF,
+ 6427: 0x7DDC,
+ 6428: 0x7DB8,
+ 6429: 0x7D9F,
+ 6430: 0x7DB0,
+ 6431: 0x7DD8,
+ 6432: 0x7DDD,
+ 6433: 0x7DE4,
+ 6434: 0x7DDE,
+ 6435: 0x7DFB,
+ 6436: 0x7DF2,
+ 6437: 0x7DE1,
+ 6438: 0x7E05,
+ 6439: 0x7E0A,
+ 6440: 0x7E23,
+ 6441: 0x7E21,
+ 6442: 0x7E12,
+ 6443: 0x7E31,
+ 6444: 0x7E1F,
+ 6445: 0x7E09,
+ 6446: 0x7E0B,
+ 6447: 0x7E22,
+ 6448: 0x7E46,
+ 6449: 0x7E66,
+ 6450: 0x7E3B,
+ 6451: 0x7E35,
+ 6452: 0x7E39,
+ 6453: 0x7E43,
+ 6454: 0x7E37,
+ 6455: 0x7E32,
+ 6456: 0x7E3A,
+ 6457: 0x7E67,
+ 6458: 0x7E5D,
+ 6459: 0x7E56,
+ 6460: 0x7E5E,
+ 6461: 0x7E59,
+ 6462: 0x7E5A,
+ 6463: 0x7E79,
+ 6464: 0x7E6A,
+ 6465: 0x7E69,
+ 6466: 0x7E7C,
+ 6467: 0x7E7B,
+ 6468: 0x7E83,
+ 6469: 0x7DD5,
+ 6470: 0x7E7D,
+ 6471: 0x8FAE,
+ 6472: 0x7E7F,
+ 6473: 0x7E88,
+ 6474: 0x7E89,
+ 6475: 0x7E8C,
+ 6476: 0x7E92,
+ 6477: 0x7E90,
+ 6478: 0x7E93,
+ 6479: 0x7E94,
+ 6480: 0x7E96,
+ 6481: 0x7E8E,
+ 6482: 0x7E9B,
+ 6483: 0x7E9C,
+ 6484: 0x7F38,
+ 6485: 0x7F3A,
+ 6486: 0x7F45,
+ 6487: 0x7F4C,
+ 6488: 0x7F4D,
+ 6489: 0x7F4E,
+ 6490: 0x7F50,
+ 6491: 0x7F51,
+ 6492: 0x7F55,
+ 6493: 0x7F54,
+ 6494: 0x7F58,
+ 6495: 0x7F5F,
+ 6496: 0x7F60,
+ 6497: 0x7F68,
+ 6498: 0x7F69,
+ 6499: 0x7F67,
+ 6500: 0x7F78,
+ 6501: 0x7F82,
+ 6502: 0x7F86,
+ 6503: 0x7F83,
+ 6504: 0x7F88,
+ 6505: 0x7F87,
+ 6506: 0x7F8C,
+ 6507: 0x7F94,
+ 6508: 0x7F9E,
+ 6509: 0x7F9D,
+ 6510: 0x7F9A,
+ 6511: 0x7FA3,
+ 6512: 0x7FAF,
+ 6513: 0x7FB2,
+ 6514: 0x7FB9,
+ 6515: 0x7FAE,
+ 6516: 0x7FB6,
+ 6517: 0x7FB8,
+ 6518: 0x8B71,
+ 6519: 0x7FC5,
+ 6520: 0x7FC6,
+ 6521: 0x7FCA,
+ 6522: 0x7FD5,
+ 6523: 0x7FD4,
+ 6524: 0x7FE1,
+ 6525: 0x7FE6,
+ 6526: 0x7FE9,
+ 6527: 0x7FF3,
+ 6528: 0x7FF9,
+ 6529: 0x98DC,
+ 6530: 0x8006,
+ 6531: 0x8004,
+ 6532: 0x800B,
+ 6533: 0x8012,
+ 6534: 0x8018,
+ 6535: 0x8019,
+ 6536: 0x801C,
+ 6537: 0x8021,
+ 6538: 0x8028,
+ 6539: 0x803F,
+ 6540: 0x803B,
+ 6541: 0x804A,
+ 6542: 0x8046,
+ 6543: 0x8052,
+ 6544: 0x8058,
+ 6545: 0x805A,
+ 6546: 0x805F,
+ 6547: 0x8062,
+ 6548: 0x8068,
+ 6549: 0x8073,
+ 6550: 0x8072,
+ 6551: 0x8070,
+ 6552: 0x8076,
+ 6553: 0x8079,
+ 6554: 0x807D,
+ 6555: 0x807F,
+ 6556: 0x8084,
+ 6557: 0x8086,
+ 6558: 0x8085,
+ 6559: 0x809B,
+ 6560: 0x8093,
+ 6561: 0x809A,
+ 6562: 0x80AD,
+ 6563: 0x5190,
+ 6564: 0x80AC,
+ 6565: 0x80DB,
+ 6566: 0x80E5,
+ 6567: 0x80D9,
+ 6568: 0x80DD,
+ 6569: 0x80C4,
+ 6570: 0x80DA,
+ 6571: 0x80D6,
+ 6572: 0x8109,
+ 6573: 0x80EF,
+ 6574: 0x80F1,
+ 6575: 0x811B,
+ 6576: 0x8129,
+ 6577: 0x8123,
+ 6578: 0x812F,
+ 6579: 0x814B,
+ 6580: 0x968B,
+ 6581: 0x8146,
+ 6582: 0x813E,
+ 6583: 0x8153,
+ 6584: 0x8151,
+ 6585: 0x80FC,
+ 6586: 0x8171,
+ 6587: 0x816E,
+ 6588: 0x8165,
+ 6589: 0x8166,
+ 6590: 0x8174,
+ 6591: 0x8183,
+ 6592: 0x8188,
+ 6593: 0x818A,
+ 6594: 0x8180,
+ 6595: 0x8182,
+ 6596: 0x81A0,
+ 6597: 0x8195,
+ 6598: 0x81A4,
+ 6599: 0x81A3,
+ 6600: 0x815F,
+ 6601: 0x8193,
+ 6602: 0x81A9,
+ 6603: 0x81B0,
+ 6604: 0x81B5,
+ 6605: 0x81BE,
+ 6606: 0x81B8,
+ 6607: 0x81BD,
+ 6608: 0x81C0,
+ 6609: 0x81C2,
+ 6610: 0x81BA,
+ 6611: 0x81C9,
+ 6612: 0x81CD,
+ 6613: 0x81D1,
+ 6614: 0x81D9,
+ 6615: 0x81D8,
+ 6616: 0x81C8,
+ 6617: 0x81DA,
+ 6618: 0x81DF,
+ 6619: 0x81E0,
+ 6620: 0x81E7,
+ 6621: 0x81FA,
+ 6622: 0x81FB,
+ 6623: 0x81FE,
+ 6624: 0x8201,
+ 6625: 0x8202,
+ 6626: 0x8205,
+ 6627: 0x8207,
+ 6628: 0x820A,
+ 6629: 0x820D,
+ 6630: 0x8210,
+ 6631: 0x8216,
+ 6632: 0x8229,
+ 6633: 0x822B,
+ 6634: 0x8238,
+ 6635: 0x8233,
+ 6636: 0x8240,
+ 6637: 0x8259,
+ 6638: 0x8258,
+ 6639: 0x825D,
+ 6640: 0x825A,
+ 6641: 0x825F,
+ 6642: 0x8264,
+ 6643: 0x8262,
+ 6644: 0x8268,
+ 6645: 0x826A,
+ 6646: 0x826B,
+ 6647: 0x822E,
+ 6648: 0x8271,
+ 6649: 0x8277,
+ 6650: 0x8278,
+ 6651: 0x827E,
+ 6652: 0x828D,
+ 6653: 0x8292,
+ 6654: 0x82AB,
+ 6655: 0x829F,
+ 6656: 0x82BB,
+ 6657: 0x82AC,
+ 6658: 0x82E1,
+ 6659: 0x82E3,
+ 6660: 0x82DF,
+ 6661: 0x82D2,
+ 6662: 0x82F4,
+ 6663: 0x82F3,
+ 6664: 0x82FA,
+ 6665: 0x8393,
+ 6666: 0x8303,
+ 6667: 0x82FB,
+ 6668: 0x82F9,
+ 6669: 0x82DE,
+ 6670: 0x8306,
+ 6671: 0x82DC,
+ 6672: 0x8309,
+ 6673: 0x82D9,
+ 6674: 0x8335,
+ 6675: 0x8334,
+ 6676: 0x8316,
+ 6677: 0x8332,
+ 6678: 0x8331,
+ 6679: 0x8340,
+ 6680: 0x8339,
+ 6681: 0x8350,
+ 6682: 0x8345,
+ 6683: 0x832F,
+ 6684: 0x832B,
+ 6685: 0x8317,
+ 6686: 0x8318,
+ 6687: 0x8385,
+ 6688: 0x839A,
+ 6689: 0x83AA,
+ 6690: 0x839F,
+ 6691: 0x83A2,
+ 6692: 0x8396,
+ 6693: 0x8323,
+ 6694: 0x838E,
+ 6695: 0x8387,
+ 6696: 0x838A,
+ 6697: 0x837C,
+ 6698: 0x83B5,
+ 6699: 0x8373,
+ 6700: 0x8375,
+ 6701: 0x83A0,
+ 6702: 0x8389,
+ 6703: 0x83A8,
+ 6704: 0x83F4,
+ 6705: 0x8413,
+ 6706: 0x83EB,
+ 6707: 0x83CE,
+ 6708: 0x83FD,
+ 6709: 0x8403,
+ 6710: 0x83D8,
+ 6711: 0x840B,
+ 6712: 0x83C1,
+ 6713: 0x83F7,
+ 6714: 0x8407,
+ 6715: 0x83E0,
+ 6716: 0x83F2,
+ 6717: 0x840D,
+ 6718: 0x8422,
+ 6719: 0x8420,
+ 6720: 0x83BD,
+ 6721: 0x8438,
+ 6722: 0x8506,
+ 6723: 0x83FB,
+ 6724: 0x846D,
+ 6725: 0x842A,
+ 6726: 0x843C,
+ 6727: 0x855A,
+ 6728: 0x8484,
+ 6729: 0x8477,
+ 6730: 0x846B,
+ 6731: 0x84AD,
+ 6732: 0x846E,
+ 6733: 0x8482,
+ 6734: 0x8469,
+ 6735: 0x8446,
+ 6736: 0x842C,
+ 6737: 0x846F,
+ 6738: 0x8479,
+ 6739: 0x8435,
+ 6740: 0x84CA,
+ 6741: 0x8462,
+ 6742: 0x84B9,
+ 6743: 0x84BF,
+ 6744: 0x849F,
+ 6745: 0x84D9,
+ 6746: 0x84CD,
+ 6747: 0x84BB,
+ 6748: 0x84DA,
+ 6749: 0x84D0,
+ 6750: 0x84C1,
+ 6751: 0x84C6,
+ 6752: 0x84D6,
+ 6753: 0x84A1,
+ 6754: 0x8521,
+ 6755: 0x84FF,
+ 6756: 0x84F4,
+ 6757: 0x8517,
+ 6758: 0x8518,
+ 6759: 0x852C,
+ 6760: 0x851F,
+ 6761: 0x8515,
+ 6762: 0x8514,
+ 6763: 0x84FC,
+ 6764: 0x8540,
+ 6765: 0x8563,
+ 6766: 0x8558,
+ 6767: 0x8548,
+ 6768: 0x8541,
+ 6769: 0x8602,
+ 6770: 0x854B,
+ 6771: 0x8555,
+ 6772: 0x8580,
+ 6773: 0x85A4,
+ 6774: 0x8588,
+ 6775: 0x8591,
+ 6776: 0x858A,
+ 6777: 0x85A8,
+ 6778: 0x856D,
+ 6779: 0x8594,
+ 6780: 0x859B,
+ 6781: 0x85EA,
+ 6782: 0x8587,
+ 6783: 0x859C,
+ 6784: 0x8577,
+ 6785: 0x857E,
+ 6786: 0x8590,
+ 6787: 0x85C9,
+ 6788: 0x85BA,
+ 6789: 0x85CF,
+ 6790: 0x85B9,
+ 6791: 0x85D0,
+ 6792: 0x85D5,
+ 6793: 0x85DD,
+ 6794: 0x85E5,
+ 6795: 0x85DC,
+ 6796: 0x85F9,
+ 6797: 0x860A,
+ 6798: 0x8613,
+ 6799: 0x860B,
+ 6800: 0x85FE,
+ 6801: 0x85FA,
+ 6802: 0x8606,
+ 6803: 0x8622,
+ 6804: 0x861A,
+ 6805: 0x8630,
+ 6806: 0x863F,
+ 6807: 0x864D,
+ 6808: 0x4E55,
+ 6809: 0x8654,
+ 6810: 0x865F,
+ 6811: 0x8667,
+ 6812: 0x8671,
+ 6813: 0x8693,
+ 6814: 0x86A3,
+ 6815: 0x86A9,
+ 6816: 0x86AA,
+ 6817: 0x868B,
+ 6818: 0x868C,
+ 6819: 0x86B6,
+ 6820: 0x86AF,
+ 6821: 0x86C4,
+ 6822: 0x86C6,
+ 6823: 0x86B0,
+ 6824: 0x86C9,
+ 6825: 0x8823,
+ 6826: 0x86AB,
+ 6827: 0x86D4,
+ 6828: 0x86DE,
+ 6829: 0x86E9,
+ 6830: 0x86EC,
+ 6831: 0x86DF,
+ 6832: 0x86DB,
+ 6833: 0x86EF,
+ 6834: 0x8712,
+ 6835: 0x8706,
+ 6836: 0x8708,
+ 6837: 0x8700,
+ 6838: 0x8703,
+ 6839: 0x86FB,
+ 6840: 0x8711,
+ 6841: 0x8709,
+ 6842: 0x870D,
+ 6843: 0x86F9,
+ 6844: 0x870A,
+ 6845: 0x8734,
+ 6846: 0x873F,
+ 6847: 0x8737,
+ 6848: 0x873B,
+ 6849: 0x8725,
+ 6850: 0x8729,
+ 6851: 0x871A,
+ 6852: 0x8760,
+ 6853: 0x875F,
+ 6854: 0x8778,
+ 6855: 0x874C,
+ 6856: 0x874E,
+ 6857: 0x8774,
+ 6858: 0x8757,
+ 6859: 0x8768,
+ 6860: 0x876E,
+ 6861: 0x8759,
+ 6862: 0x8753,
+ 6863: 0x8763,
+ 6864: 0x876A,
+ 6865: 0x8805,
+ 6866: 0x87A2,
+ 6867: 0x879F,
+ 6868: 0x8782,
+ 6869: 0x87AF,
+ 6870: 0x87CB,
+ 6871: 0x87BD,
+ 6872: 0x87C0,
+ 6873: 0x87D0,
+ 6874: 0x96D6,
+ 6875: 0x87AB,
+ 6876: 0x87C4,
+ 6877: 0x87B3,
+ 6878: 0x87C7,
+ 6879: 0x87C6,
+ 6880: 0x87BB,
+ 6881: 0x87EF,
+ 6882: 0x87F2,
+ 6883: 0x87E0,
+ 6884: 0x880F,
+ 6885: 0x880D,
+ 6886: 0x87FE,
+ 6887: 0x87F6,
+ 6888: 0x87F7,
+ 6889: 0x880E,
+ 6890: 0x87D2,
+ 6891: 0x8811,
+ 6892: 0x8816,
+ 6893: 0x8815,
+ 6894: 0x8822,
+ 6895: 0x8821,
+ 6896: 0x8831,
+ 6897: 0x8836,
+ 6898: 0x8839,
+ 6899: 0x8827,
+ 6900: 0x883B,
+ 6901: 0x8844,
+ 6902: 0x8842,
+ 6903: 0x8852,
+ 6904: 0x8859,
+ 6905: 0x885E,
+ 6906: 0x8862,
+ 6907: 0x886B,
+ 6908: 0x8881,
+ 6909: 0x887E,
+ 6910: 0x889E,
+ 6911: 0x8875,
+ 6912: 0x887D,
+ 6913: 0x88B5,
+ 6914: 0x8872,
+ 6915: 0x8882,
+ 6916: 0x8897,
+ 6917: 0x8892,
+ 6918: 0x88AE,
+ 6919: 0x8899,
+ 6920: 0x88A2,
+ 6921: 0x888D,
+ 6922: 0x88A4,
+ 6923: 0x88B0,
+ 6924: 0x88BF,
+ 6925: 0x88B1,
+ 6926: 0x88C3,
+ 6927: 0x88C4,
+ 6928: 0x88D4,
+ 6929: 0x88D8,
+ 6930: 0x88D9,
+ 6931: 0x88DD,
+ 6932: 0x88F9,
+ 6933: 0x8902,
+ 6934: 0x88FC,
+ 6935: 0x88F4,
+ 6936: 0x88E8,
+ 6937: 0x88F2,
+ 6938: 0x8904,
+ 6939: 0x890C,
+ 6940: 0x890A,
+ 6941: 0x8913,
+ 6942: 0x8943,
+ 6943: 0x891E,
+ 6944: 0x8925,
+ 6945: 0x892A,
+ 6946: 0x892B,
+ 6947: 0x8941,
+ 6948: 0x8944,
+ 6949: 0x893B,
+ 6950: 0x8936,
+ 6951: 0x8938,
+ 6952: 0x894C,
+ 6953: 0x891D,
+ 6954: 0x8960,
+ 6955: 0x895E,
+ 6956: 0x8966,
+ 6957: 0x8964,
+ 6958: 0x896D,
+ 6959: 0x896A,
+ 6960: 0x896F,
+ 6961: 0x8974,
+ 6962: 0x8977,
+ 6963: 0x897E,
+ 6964: 0x8983,
+ 6965: 0x8988,
+ 6966: 0x898A,
+ 6967: 0x8993,
+ 6968: 0x8998,
+ 6969: 0x89A1,
+ 6970: 0x89A9,
+ 6971: 0x89A6,
+ 6972: 0x89AC,
+ 6973: 0x89AF,
+ 6974: 0x89B2,
+ 6975: 0x89BA,
+ 6976: 0x89BD,
+ 6977: 0x89BF,
+ 6978: 0x89C0,
+ 6979: 0x89DA,
+ 6980: 0x89DC,
+ 6981: 0x89DD,
+ 6982: 0x89E7,
+ 6983: 0x89F4,
+ 6984: 0x89F8,
+ 6985: 0x8A03,
+ 6986: 0x8A16,
+ 6987: 0x8A10,
+ 6988: 0x8A0C,
+ 6989: 0x8A1B,
+ 6990: 0x8A1D,
+ 6991: 0x8A25,
+ 6992: 0x8A36,
+ 6993: 0x8A41,
+ 6994: 0x8A5B,
+ 6995: 0x8A52,
+ 6996: 0x8A46,
+ 6997: 0x8A48,
+ 6998: 0x8A7C,
+ 6999: 0x8A6D,
+ 7000: 0x8A6C,
+ 7001: 0x8A62,
+ 7002: 0x8A85,
+ 7003: 0x8A82,
+ 7004: 0x8A84,
+ 7005: 0x8AA8,
+ 7006: 0x8AA1,
+ 7007: 0x8A91,
+ 7008: 0x8AA5,
+ 7009: 0x8AA6,
+ 7010: 0x8A9A,
+ 7011: 0x8AA3,
+ 7012: 0x8AC4,
+ 7013: 0x8ACD,
+ 7014: 0x8AC2,
+ 7015: 0x8ADA,
+ 7016: 0x8AEB,
+ 7017: 0x8AF3,
+ 7018: 0x8AE7,
+ 7019: 0x8AE4,
+ 7020: 0x8AF1,
+ 7021: 0x8B14,
+ 7022: 0x8AE0,
+ 7023: 0x8AE2,
+ 7024: 0x8AF7,
+ 7025: 0x8ADE,
+ 7026: 0x8ADB,
+ 7027: 0x8B0C,
+ 7028: 0x8B07,
+ 7029: 0x8B1A,
+ 7030: 0x8AE1,
+ 7031: 0x8B16,
+ 7032: 0x8B10,
+ 7033: 0x8B17,
+ 7034: 0x8B20,
+ 7035: 0x8B33,
+ 7036: 0x97AB,
+ 7037: 0x8B26,
+ 7038: 0x8B2B,
+ 7039: 0x8B3E,
+ 7040: 0x8B28,
+ 7041: 0x8B41,
+ 7042: 0x8B4C,
+ 7043: 0x8B4F,
+ 7044: 0x8B4E,
+ 7045: 0x8B49,
+ 7046: 0x8B56,
+ 7047: 0x8B5B,
+ 7048: 0x8B5A,
+ 7049: 0x8B6B,
+ 7050: 0x8B5F,
+ 7051: 0x8B6C,
+ 7052: 0x8B6F,
+ 7053: 0x8B74,
+ 7054: 0x8B7D,
+ 7055: 0x8B80,
+ 7056: 0x8B8C,
+ 7057: 0x8B8E,
+ 7058: 0x8B92,
+ 7059: 0x8B93,
+ 7060: 0x8B96,
+ 7061: 0x8B99,
+ 7062: 0x8B9A,
+ 7063: 0x8C3A,
+ 7064: 0x8C41,
+ 7065: 0x8C3F,
+ 7066: 0x8C48,
+ 7067: 0x8C4C,
+ 7068: 0x8C4E,
+ 7069: 0x8C50,
+ 7070: 0x8C55,
+ 7071: 0x8C62,
+ 7072: 0x8C6C,
+ 7073: 0x8C78,
+ 7074: 0x8C7A,
+ 7075: 0x8C82,
+ 7076: 0x8C89,
+ 7077: 0x8C85,
+ 7078: 0x8C8A,
+ 7079: 0x8C8D,
+ 7080: 0x8C8E,
+ 7081: 0x8C94,
+ 7082: 0x8C7C,
+ 7083: 0x8C98,
+ 7084: 0x621D,
+ 7085: 0x8CAD,
+ 7086: 0x8CAA,
+ 7087: 0x8CBD,
+ 7088: 0x8CB2,
+ 7089: 0x8CB3,
+ 7090: 0x8CAE,
+ 7091: 0x8CB6,
+ 7092: 0x8CC8,
+ 7093: 0x8CC1,
+ 7094: 0x8CE4,
+ 7095: 0x8CE3,
+ 7096: 0x8CDA,
+ 7097: 0x8CFD,
+ 7098: 0x8CFA,
+ 7099: 0x8CFB,
+ 7100: 0x8D04,
+ 7101: 0x8D05,
+ 7102: 0x8D0A,
+ 7103: 0x8D07,
+ 7104: 0x8D0F,
+ 7105: 0x8D0D,
+ 7106: 0x8D10,
+ 7107: 0x9F4E,
+ 7108: 0x8D13,
+ 7109: 0x8CCD,
+ 7110: 0x8D14,
+ 7111: 0x8D16,
+ 7112: 0x8D67,
+ 7113: 0x8D6D,
+ 7114: 0x8D71,
+ 7115: 0x8D73,
+ 7116: 0x8D81,
+ 7117: 0x8D99,
+ 7118: 0x8DC2,
+ 7119: 0x8DBE,
+ 7120: 0x8DBA,
+ 7121: 0x8DCF,
+ 7122: 0x8DDA,
+ 7123: 0x8DD6,
+ 7124: 0x8DCC,
+ 7125: 0x8DDB,
+ 7126: 0x8DCB,
+ 7127: 0x8DEA,
+ 7128: 0x8DEB,
+ 7129: 0x8DDF,
+ 7130: 0x8DE3,
+ 7131: 0x8DFC,
+ 7132: 0x8E08,
+ 7133: 0x8E09,
+ 7134: 0x8DFF,
+ 7135: 0x8E1D,
+ 7136: 0x8E1E,
+ 7137: 0x8E10,
+ 7138: 0x8E1F,
+ 7139: 0x8E42,
+ 7140: 0x8E35,
+ 7141: 0x8E30,
+ 7142: 0x8E34,
+ 7143: 0x8E4A,
+ 7144: 0x8E47,
+ 7145: 0x8E49,
+ 7146: 0x8E4C,
+ 7147: 0x8E50,
+ 7148: 0x8E48,
+ 7149: 0x8E59,
+ 7150: 0x8E64,
+ 7151: 0x8E60,
+ 7152: 0x8E2A,
+ 7153: 0x8E63,
+ 7154: 0x8E55,
+ 7155: 0x8E76,
+ 7156: 0x8E72,
+ 7157: 0x8E7C,
+ 7158: 0x8E81,
+ 7159: 0x8E87,
+ 7160: 0x8E85,
+ 7161: 0x8E84,
+ 7162: 0x8E8B,
+ 7163: 0x8E8A,
+ 7164: 0x8E93,
+ 7165: 0x8E91,
+ 7166: 0x8E94,
+ 7167: 0x8E99,
+ 7168: 0x8EAA,
+ 7169: 0x8EA1,
+ 7170: 0x8EAC,
+ 7171: 0x8EB0,
+ 7172: 0x8EC6,
+ 7173: 0x8EB1,
+ 7174: 0x8EBE,
+ 7175: 0x8EC5,
+ 7176: 0x8EC8,
+ 7177: 0x8ECB,
+ 7178: 0x8EDB,
+ 7179: 0x8EE3,
+ 7180: 0x8EFC,
+ 7181: 0x8EFB,
+ 7182: 0x8EEB,
+ 7183: 0x8EFE,
+ 7184: 0x8F0A,
+ 7185: 0x8F05,
+ 7186: 0x8F15,
+ 7187: 0x8F12,
+ 7188: 0x8F19,
+ 7189: 0x8F13,
+ 7190: 0x8F1C,
+ 7191: 0x8F1F,
+ 7192: 0x8F1B,
+ 7193: 0x8F0C,
+ 7194: 0x8F26,
+ 7195: 0x8F33,
+ 7196: 0x8F3B,
+ 7197: 0x8F39,
+ 7198: 0x8F45,
+ 7199: 0x8F42,
+ 7200: 0x8F3E,
+ 7201: 0x8F4C,
+ 7202: 0x8F49,
+ 7203: 0x8F46,
+ 7204: 0x8F4E,
+ 7205: 0x8F57,
+ 7206: 0x8F5C,
+ 7207: 0x8F62,
+ 7208: 0x8F63,
+ 7209: 0x8F64,
+ 7210: 0x8F9C,
+ 7211: 0x8F9F,
+ 7212: 0x8FA3,
+ 7213: 0x8FAD,
+ 7214: 0x8FAF,
+ 7215: 0x8FB7,
+ 7216: 0x8FDA,
+ 7217: 0x8FE5,
+ 7218: 0x8FE2,
+ 7219: 0x8FEA,
+ 7220: 0x8FEF,
+ 7221: 0x9087,
+ 7222: 0x8FF4,
+ 7223: 0x9005,
+ 7224: 0x8FF9,
+ 7225: 0x8FFA,
+ 7226: 0x9011,
+ 7227: 0x9015,
+ 7228: 0x9021,
+ 7229: 0x900D,
+ 7230: 0x901E,
+ 7231: 0x9016,
+ 7232: 0x900B,
+ 7233: 0x9027,
+ 7234: 0x9036,
+ 7235: 0x9035,
+ 7236: 0x9039,
+ 7237: 0x8FF8,
+ 7238: 0x904F,
+ 7239: 0x9050,
+ 7240: 0x9051,
+ 7241: 0x9052,
+ 7242: 0x900E,
+ 7243: 0x9049,
+ 7244: 0x903E,
+ 7245: 0x9056,
+ 7246: 0x9058,
+ 7247: 0x905E,
+ 7248: 0x9068,
+ 7249: 0x906F,
+ 7250: 0x9076,
+ 7251: 0x96A8,
+ 7252: 0x9072,
+ 7253: 0x9082,
+ 7254: 0x907D,
+ 7255: 0x9081,
+ 7256: 0x9080,
+ 7257: 0x908A,
+ 7258: 0x9089,
+ 7259: 0x908F,
+ 7260: 0x90A8,
+ 7261: 0x90AF,
+ 7262: 0x90B1,
+ 7263: 0x90B5,
+ 7264: 0x90E2,
+ 7265: 0x90E4,
+ 7266: 0x6248,
+ 7267: 0x90DB,
+ 7268: 0x9102,
+ 7269: 0x9112,
+ 7270: 0x9119,
+ 7271: 0x9132,
+ 7272: 0x9130,
+ 7273: 0x914A,
+ 7274: 0x9156,
+ 7275: 0x9158,
+ 7276: 0x9163,
+ 7277: 0x9165,
+ 7278: 0x9169,
+ 7279: 0x9173,
+ 7280: 0x9172,
+ 7281: 0x918B,
+ 7282: 0x9189,
+ 7283: 0x9182,
+ 7284: 0x91A2,
+ 7285: 0x91AB,
+ 7286: 0x91AF,
+ 7287: 0x91AA,
+ 7288: 0x91B5,
+ 7289: 0x91B4,
+ 7290: 0x91BA,
+ 7291: 0x91C0,
+ 7292: 0x91C1,
+ 7293: 0x91C9,
+ 7294: 0x91CB,
+ 7295: 0x91D0,
+ 7296: 0x91D6,
+ 7297: 0x91DF,
+ 7298: 0x91E1,
+ 7299: 0x91DB,
+ 7300: 0x91FC,
+ 7301: 0x91F5,
+ 7302: 0x91F6,
+ 7303: 0x921E,
+ 7304: 0x91FF,
+ 7305: 0x9214,
+ 7306: 0x922C,
+ 7307: 0x9215,
+ 7308: 0x9211,
+ 7309: 0x925E,
+ 7310: 0x9257,
+ 7311: 0x9245,
+ 7312: 0x9249,
+ 7313: 0x9264,
+ 7314: 0x9248,
+ 7315: 0x9295,
+ 7316: 0x923F,
+ 7317: 0x924B,
+ 7318: 0x9250,
+ 7319: 0x929C,
+ 7320: 0x9296,
+ 7321: 0x9293,
+ 7322: 0x929B,
+ 7323: 0x925A,
+ 7324: 0x92CF,
+ 7325: 0x92B9,
+ 7326: 0x92B7,
+ 7327: 0x92E9,
+ 7328: 0x930F,
+ 7329: 0x92FA,
+ 7330: 0x9344,
+ 7331: 0x932E,
+ 7332: 0x9319,
+ 7333: 0x9322,
+ 7334: 0x931A,
+ 7335: 0x9323,
+ 7336: 0x933A,
+ 7337: 0x9335,
+ 7338: 0x933B,
+ 7339: 0x935C,
+ 7340: 0x9360,
+ 7341: 0x937C,
+ 7342: 0x936E,
+ 7343: 0x9356,
+ 7344: 0x93B0,
+ 7345: 0x93AC,
+ 7346: 0x93AD,
+ 7347: 0x9394,
+ 7348: 0x93B9,
+ 7349: 0x93D6,
+ 7350: 0x93D7,
+ 7351: 0x93E8,
+ 7352: 0x93E5,
+ 7353: 0x93D8,
+ 7354: 0x93C3,
+ 7355: 0x93DD,
+ 7356: 0x93D0,
+ 7357: 0x93C8,
+ 7358: 0x93E4,
+ 7359: 0x941A,
+ 7360: 0x9414,
+ 7361: 0x9413,
+ 7362: 0x9403,
+ 7363: 0x9407,
+ 7364: 0x9410,
+ 7365: 0x9436,
+ 7366: 0x942B,
+ 7367: 0x9435,
+ 7368: 0x9421,
+ 7369: 0x943A,
+ 7370: 0x9441,
+ 7371: 0x9452,
+ 7372: 0x9444,
+ 7373: 0x945B,
+ 7374: 0x9460,
+ 7375: 0x9462,
+ 7376: 0x945E,
+ 7377: 0x946A,
+ 7378: 0x9229,
+ 7379: 0x9470,
+ 7380: 0x9475,
+ 7381: 0x9477,
+ 7382: 0x947D,
+ 7383: 0x945A,
+ 7384: 0x947C,
+ 7385: 0x947E,
+ 7386: 0x9481,
+ 7387: 0x947F,
+ 7388: 0x9582,
+ 7389: 0x9587,
+ 7390: 0x958A,
+ 7391: 0x9594,
+ 7392: 0x9596,
+ 7393: 0x9598,
+ 7394: 0x9599,
+ 7395: 0x95A0,
+ 7396: 0x95A8,
+ 7397: 0x95A7,
+ 7398: 0x95AD,
+ 7399: 0x95BC,
+ 7400: 0x95BB,
+ 7401: 0x95B9,
+ 7402: 0x95BE,
+ 7403: 0x95CA,
+ 7404: 0x6FF6,
+ 7405: 0x95C3,
+ 7406: 0x95CD,
+ 7407: 0x95CC,
+ 7408: 0x95D5,
+ 7409: 0x95D4,
+ 7410: 0x95D6,
+ 7411: 0x95DC,
+ 7412: 0x95E1,
+ 7413: 0x95E5,
+ 7414: 0x95E2,
+ 7415: 0x9621,
+ 7416: 0x9628,
+ 7417: 0x962E,
+ 7418: 0x962F,
+ 7419: 0x9642,
+ 7420: 0x964C,
+ 7421: 0x964F,
+ 7422: 0x964B,
+ 7423: 0x9677,
+ 7424: 0x965C,
+ 7425: 0x965E,
+ 7426: 0x965D,
+ 7427: 0x965F,
+ 7428: 0x9666,
+ 7429: 0x9672,
+ 7430: 0x966C,
+ 7431: 0x968D,
+ 7432: 0x9698,
+ 7433: 0x9695,
+ 7434: 0x9697,
+ 7435: 0x96AA,
+ 7436: 0x96A7,
+ 7437: 0x96B1,
+ 7438: 0x96B2,
+ 7439: 0x96B0,
+ 7440: 0x96B4,
+ 7441: 0x96B6,
+ 7442: 0x96B8,
+ 7443: 0x96B9,
+ 7444: 0x96CE,
+ 7445: 0x96CB,
+ 7446: 0x96C9,
+ 7447: 0x96CD,
+ 7448: 0x894D,
+ 7449: 0x96DC,
+ 7450: 0x970D,
+ 7451: 0x96D5,
+ 7452: 0x96F9,
+ 7453: 0x9704,
+ 7454: 0x9706,
+ 7455: 0x9708,
+ 7456: 0x9713,
+ 7457: 0x970E,
+ 7458: 0x9711,
+ 7459: 0x970F,
+ 7460: 0x9716,
+ 7461: 0x9719,
+ 7462: 0x9724,
+ 7463: 0x972A,
+ 7464: 0x9730,
+ 7465: 0x9739,
+ 7466: 0x973D,
+ 7467: 0x973E,
+ 7468: 0x9744,
+ 7469: 0x9746,
+ 7470: 0x9748,
+ 7471: 0x9742,
+ 7472: 0x9749,
+ 7473: 0x975C,
+ 7474: 0x9760,
+ 7475: 0x9764,
+ 7476: 0x9766,
+ 7477: 0x9768,
+ 7478: 0x52D2,
+ 7479: 0x976B,
+ 7480: 0x9771,
+ 7481: 0x9779,
+ 7482: 0x9785,
+ 7483: 0x977C,
+ 7484: 0x9781,
+ 7485: 0x977A,
+ 7486: 0x9786,
+ 7487: 0x978B,
+ 7488: 0x978F,
+ 7489: 0x9790,
+ 7490: 0x979C,
+ 7491: 0x97A8,
+ 7492: 0x97A6,
+ 7493: 0x97A3,
+ 7494: 0x97B3,
+ 7495: 0x97B4,
+ 7496: 0x97C3,
+ 7497: 0x97C6,
+ 7498: 0x97C8,
+ 7499: 0x97CB,
+ 7500: 0x97DC,
+ 7501: 0x97ED,
+ 7502: 0x9F4F,
+ 7503: 0x97F2,
+ 7504: 0x7ADF,
+ 7505: 0x97F6,
+ 7506: 0x97F5,
+ 7507: 0x980F,
+ 7508: 0x980C,
+ 7509: 0x9838,
+ 7510: 0x9824,
+ 7511: 0x9821,
+ 7512: 0x9837,
+ 7513: 0x983D,
+ 7514: 0x9846,
+ 7515: 0x984F,
+ 7516: 0x984B,
+ 7517: 0x986B,
+ 7518: 0x986F,
+ 7519: 0x9870,
+ 7520: 0x9871,
+ 7521: 0x9874,
+ 7522: 0x9873,
+ 7523: 0x98AA,
+ 7524: 0x98AF,
+ 7525: 0x98B1,
+ 7526: 0x98B6,
+ 7527: 0x98C4,
+ 7528: 0x98C3,
+ 7529: 0x98C6,
+ 7530: 0x98E9,
+ 7531: 0x98EB,
+ 7532: 0x9903,
+ 7533: 0x9909,
+ 7534: 0x9912,
+ 7535: 0x9914,
+ 7536: 0x9918,
+ 7537: 0x9921,
+ 7538: 0x991D,
+ 7539: 0x991E,
+ 7540: 0x9924,
+ 7541: 0x9920,
+ 7542: 0x992C,
+ 7543: 0x992E,
+ 7544: 0x993D,
+ 7545: 0x993E,
+ 7546: 0x9942,
+ 7547: 0x9949,
+ 7548: 0x9945,
+ 7549: 0x9950,
+ 7550: 0x994B,
+ 7551: 0x9951,
+ 7552: 0x9952,
+ 7553: 0x994C,
+ 7554: 0x9955,
+ 7555: 0x9997,
+ 7556: 0x9998,
+ 7557: 0x99A5,
+ 7558: 0x99AD,
+ 7559: 0x99AE,
+ 7560: 0x99BC,
+ 7561: 0x99DF,
+ 7562: 0x99DB,
+ 7563: 0x99DD,
+ 7564: 0x99D8,
+ 7565: 0x99D1,
+ 7566: 0x99ED,
+ 7567: 0x99EE,
+ 7568: 0x99F1,
+ 7569: 0x99F2,
+ 7570: 0x99FB,
+ 7571: 0x99F8,
+ 7572: 0x9A01,
+ 7573: 0x9A0F,
+ 7574: 0x9A05,
+ 7575: 0x99E2,
+ 7576: 0x9A19,
+ 7577: 0x9A2B,
+ 7578: 0x9A37,
+ 7579: 0x9A45,
+ 7580: 0x9A42,
+ 7581: 0x9A40,
+ 7582: 0x9A43,
+ 7583: 0x9A3E,
+ 7584: 0x9A55,
+ 7585: 0x9A4D,
+ 7586: 0x9A5B,
+ 7587: 0x9A57,
+ 7588: 0x9A5F,
+ 7589: 0x9A62,
+ 7590: 0x9A65,
+ 7591: 0x9A64,
+ 7592: 0x9A69,
+ 7593: 0x9A6B,
+ 7594: 0x9A6A,
+ 7595: 0x9AAD,
+ 7596: 0x9AB0,
+ 7597: 0x9ABC,
+ 7598: 0x9AC0,
+ 7599: 0x9ACF,
+ 7600: 0x9AD1,
+ 7601: 0x9AD3,
+ 7602: 0x9AD4,
+ 7603: 0x9ADE,
+ 7604: 0x9ADF,
+ 7605: 0x9AE2,
+ 7606: 0x9AE3,
+ 7607: 0x9AE6,
+ 7608: 0x9AEF,
+ 7609: 0x9AEB,
+ 7610: 0x9AEE,
+ 7611: 0x9AF4,
+ 7612: 0x9AF1,
+ 7613: 0x9AF7,
+ 7614: 0x9AFB,
+ 7615: 0x9B06,
+ 7616: 0x9B18,
+ 7617: 0x9B1A,
+ 7618: 0x9B1F,
+ 7619: 0x9B22,
+ 7620: 0x9B23,
+ 7621: 0x9B25,
+ 7622: 0x9B27,
+ 7623: 0x9B28,
+ 7624: 0x9B29,
+ 7625: 0x9B2A,
+ 7626: 0x9B2E,
+ 7627: 0x9B2F,
+ 7628: 0x9B32,
+ 7629: 0x9B44,
+ 7630: 0x9B43,
+ 7631: 0x9B4F,
+ 7632: 0x9B4D,
+ 7633: 0x9B4E,
+ 7634: 0x9B51,
+ 7635: 0x9B58,
+ 7636: 0x9B74,
+ 7637: 0x9B93,
+ 7638: 0x9B83,
+ 7639: 0x9B91,
+ 7640: 0x9B96,
+ 7641: 0x9B97,
+ 7642: 0x9B9F,
+ 7643: 0x9BA0,
+ 7644: 0x9BA8,
+ 7645: 0x9BB4,
+ 7646: 0x9BC0,
+ 7647: 0x9BCA,
+ 7648: 0x9BB9,
+ 7649: 0x9BC6,
+ 7650: 0x9BCF,
+ 7651: 0x9BD1,
+ 7652: 0x9BD2,
+ 7653: 0x9BE3,
+ 7654: 0x9BE2,
+ 7655: 0x9BE4,
+ 7656: 0x9BD4,
+ 7657: 0x9BE1,
+ 7658: 0x9C3A,
+ 7659: 0x9BF2,
+ 7660: 0x9BF1,
+ 7661: 0x9BF0,
+ 7662: 0x9C15,
+ 7663: 0x9C14,
+ 7664: 0x9C09,
+ 7665: 0x9C13,
+ 7666: 0x9C0C,
+ 7667: 0x9C06,
+ 7668: 0x9C08,
+ 7669: 0x9C12,
+ 7670: 0x9C0A,
+ 7671: 0x9C04,
+ 7672: 0x9C2E,
+ 7673: 0x9C1B,
+ 7674: 0x9C25,
+ 7675: 0x9C24,
+ 7676: 0x9C21,
+ 7677: 0x9C30,
+ 7678: 0x9C47,
+ 7679: 0x9C32,
+ 7680: 0x9C46,
+ 7681: 0x9C3E,
+ 7682: 0x9C5A,
+ 7683: 0x9C60,
+ 7684: 0x9C67,
+ 7685: 0x9C76,
+ 7686: 0x9C78,
+ 7687: 0x9CE7,
+ 7688: 0x9CEC,
+ 7689: 0x9CF0,
+ 7690: 0x9D09,
+ 7691: 0x9D08,
+ 7692: 0x9CEB,
+ 7693: 0x9D03,
+ 7694: 0x9D06,
+ 7695: 0x9D2A,
+ 7696: 0x9D26,
+ 7697: 0x9DAF,
+ 7698: 0x9D23,
+ 7699: 0x9D1F,
+ 7700: 0x9D44,
+ 7701: 0x9D15,
+ 7702: 0x9D12,
+ 7703: 0x9D41,
+ 7704: 0x9D3F,
+ 7705: 0x9D3E,
+ 7706: 0x9D46,
+ 7707: 0x9D48,
+ 7708: 0x9D5D,
+ 7709: 0x9D5E,
+ 7710: 0x9D64,
+ 7711: 0x9D51,
+ 7712: 0x9D50,
+ 7713: 0x9D59,
+ 7714: 0x9D72,
+ 7715: 0x9D89,
+ 7716: 0x9D87,
+ 7717: 0x9DAB,
+ 7718: 0x9D6F,
+ 7719: 0x9D7A,
+ 7720: 0x9D9A,
+ 7721: 0x9DA4,
+ 7722: 0x9DA9,
+ 7723: 0x9DB2,
+ 7724: 0x9DC4,
+ 7725: 0x9DC1,
+ 7726: 0x9DBB,
+ 7727: 0x9DB8,
+ 7728: 0x9DBA,
+ 7729: 0x9DC6,
+ 7730: 0x9DCF,
+ 7731: 0x9DC2,
+ 7732: 0x9DD9,
+ 7733: 0x9DD3,
+ 7734: 0x9DF8,
+ 7735: 0x9DE6,
+ 7736: 0x9DED,
+ 7737: 0x9DEF,
+ 7738: 0x9DFD,
+ 7739: 0x9E1A,
+ 7740: 0x9E1B,
+ 7741: 0x9E1E,
+ 7742: 0x9E75,
+ 7743: 0x9E79,
+ 7744: 0x9E7D,
+ 7745: 0x9E81,
+ 7746: 0x9E88,
+ 7747: 0x9E8B,
+ 7748: 0x9E8C,
+ 7749: 0x9E92,
+ 7750: 0x9E95,
+ 7751: 0x9E91,
+ 7752: 0x9E9D,
+ 7753: 0x9EA5,
+ 7754: 0x9EA9,
+ 7755: 0x9EB8,
+ 7756: 0x9EAA,
+ 7757: 0x9EAD,
+ 7758: 0x9761,
+ 7759: 0x9ECC,
+ 7760: 0x9ECE,
+ 7761: 0x9ECF,
+ 7762: 0x9ED0,
+ 7763: 0x9ED4,
+ 7764: 0x9EDC,
+ 7765: 0x9EDE,
+ 7766: 0x9EDD,
+ 7767: 0x9EE0,
+ 7768: 0x9EE5,
+ 7769: 0x9EE8,
+ 7770: 0x9EEF,
+ 7771: 0x9EF4,
+ 7772: 0x9EF6,
+ 7773: 0x9EF7,
+ 7774: 0x9EF9,
+ 7775: 0x9EFB,
+ 7776: 0x9EFC,
+ 7777: 0x9EFD,
+ 7778: 0x9F07,
+ 7779: 0x9F08,
+ 7780: 0x76B7,
+ 7781: 0x9F15,
+ 7782: 0x9F21,
+ 7783: 0x9F2C,
+ 7784: 0x9F3E,
+ 7785: 0x9F4A,
+ 7786: 0x9F52,
+ 7787: 0x9F54,
+ 7788: 0x9F63,
+ 7789: 0x9F5F,
+ 7790: 0x9F60,
+ 7791: 0x9F61,
+ 7792: 0x9F66,
+ 7793: 0x9F67,
+ 7794: 0x9F6C,
+ 7795: 0x9F6A,
+ 7796: 0x9F77,
+ 7797: 0x9F72,
+ 7798: 0x9F76,
+ 7799: 0x9F95,
+ 7800: 0x9F9C,
+ 7801: 0x9FA0,
+ 7802: 0x582F,
+ 7803: 0x69C7,
+ 7804: 0x9059,
+ 7805: 0x7464,
+ 7806: 0x51DC,
+ 7807: 0x7199,
+ 8272: 0x7E8A,
+ 8273: 0x891C,
+ 8274: 0x9348,
+ 8275: 0x9288,
+ 8276: 0x84DC,
+ 8277: 0x4FC9,
+ 8278: 0x70BB,
+ 8279: 0x6631,
+ 8280: 0x68C8,
+ 8281: 0x92F9,
+ 8282: 0x66FB,
+ 8283: 0x5F45,
+ 8284: 0x4E28,
+ 8285: 0x4EE1,
+ 8286: 0x4EFC,
+ 8287: 0x4F00,
+ 8288: 0x4F03,
+ 8289: 0x4F39,
+ 8290: 0x4F56,
+ 8291: 0x4F92,
+ 8292: 0x4F8A,
+ 8293: 0x4F9A,
+ 8294: 0x4F94,
+ 8295: 0x4FCD,
+ 8296: 0x5040,
+ 8297: 0x5022,
+ 8298: 0x4FFF,
+ 8299: 0x501E,
+ 8300: 0x5046,
+ 8301: 0x5070,
+ 8302: 0x5042,
+ 8303: 0x5094,
+ 8304: 0x50F4,
+ 8305: 0x50D8,
+ 8306: 0x514A,
+ 8307: 0x5164,
+ 8308: 0x519D,
+ 8309: 0x51BE,
+ 8310: 0x51EC,
+ 8311: 0x5215,
+ 8312: 0x529C,
+ 8313: 0x52A6,
+ 8314: 0x52C0,
+ 8315: 0x52DB,
+ 8316: 0x5300,
+ 8317: 0x5307,
+ 8318: 0x5324,
+ 8319: 0x5372,
+ 8320: 0x5393,
+ 8321: 0x53B2,
+ 8322: 0x53DD,
+ 8323: 0xFA0E,
+ 8324: 0x549C,
+ 8325: 0x548A,
+ 8326: 0x54A9,
+ 8327: 0x54FF,
+ 8328: 0x5586,
+ 8329: 0x5759,
+ 8330: 0x5765,
+ 8331: 0x57AC,
+ 8332: 0x57C8,
+ 8333: 0x57C7,
+ 8334: 0xFA0F,
+ 8335: 0xFA10,
+ 8336: 0x589E,
+ 8337: 0x58B2,
+ 8338: 0x590B,
+ 8339: 0x5953,
+ 8340: 0x595B,
+ 8341: 0x595D,
+ 8342: 0x5963,
+ 8343: 0x59A4,
+ 8344: 0x59BA,
+ 8345: 0x5B56,
+ 8346: 0x5BC0,
+ 8347: 0x752F,
+ 8348: 0x5BD8,
+ 8349: 0x5BEC,
+ 8350: 0x5C1E,
+ 8351: 0x5CA6,
+ 8352: 0x5CBA,
+ 8353: 0x5CF5,
+ 8354: 0x5D27,
+ 8355: 0x5D53,
+ 8356: 0xFA11,
+ 8357: 0x5D42,
+ 8358: 0x5D6D,
+ 8359: 0x5DB8,
+ 8360: 0x5DB9,
+ 8361: 0x5DD0,
+ 8362: 0x5F21,
+ 8363: 0x5F34,
+ 8364: 0x5F67,
+ 8365: 0x5FB7,
+ 8366: 0x5FDE,
+ 8367: 0x605D,
+ 8368: 0x6085,
+ 8369: 0x608A,
+ 8370: 0x60DE,
+ 8371: 0x60D5,
+ 8372: 0x6120,
+ 8373: 0x60F2,
+ 8374: 0x6111,
+ 8375: 0x6137,
+ 8376: 0x6130,
+ 8377: 0x6198,
+ 8378: 0x6213,
+ 8379: 0x62A6,
+ 8380: 0x63F5,
+ 8381: 0x6460,
+ 8382: 0x649D,
+ 8383: 0x64CE,
+ 8384: 0x654E,
+ 8385: 0x6600,
+ 8386: 0x6615,
+ 8387: 0x663B,
+ 8388: 0x6609,
+ 8389: 0x662E,
+ 8390: 0x661E,
+ 8391: 0x6624,
+ 8392: 0x6665,
+ 8393: 0x6657,
+ 8394: 0x6659,
+ 8395: 0xFA12,
+ 8396: 0x6673,
+ 8397: 0x6699,
+ 8398: 0x66A0,
+ 8399: 0x66B2,
+ 8400: 0x66BF,
+ 8401: 0x66FA,
+ 8402: 0x670E,
+ 8403: 0xF929,
+ 8404: 0x6766,
+ 8405: 0x67BB,
+ 8406: 0x6852,
+ 8407: 0x67C0,
+ 8408: 0x6801,
+ 8409: 0x6844,
+ 8410: 0x68CF,
+ 8411: 0xFA13,
+ 8412: 0x6968,
+ 8413: 0xFA14,
+ 8414: 0x6998,
+ 8415: 0x69E2,
+ 8416: 0x6A30,
+ 8417: 0x6A6B,
+ 8418: 0x6A46,
+ 8419: 0x6A73,
+ 8420: 0x6A7E,
+ 8421: 0x6AE2,
+ 8422: 0x6AE4,
+ 8423: 0x6BD6,
+ 8424: 0x6C3F,
+ 8425: 0x6C5C,
+ 8426: 0x6C86,
+ 8427: 0x6C6F,
+ 8428: 0x6CDA,
+ 8429: 0x6D04,
+ 8430: 0x6D87,
+ 8431: 0x6D6F,
+ 8432: 0x6D96,
+ 8433: 0x6DAC,
+ 8434: 0x6DCF,
+ 8435: 0x6DF8,
+ 8436: 0x6DF2,
+ 8437: 0x6DFC,
+ 8438: 0x6E39,
+ 8439: 0x6E5C,
+ 8440: 0x6E27,
+ 8441: 0x6E3C,
+ 8442: 0x6EBF,
+ 8443: 0x6F88,
+ 8444: 0x6FB5,
+ 8445: 0x6FF5,
+ 8446: 0x7005,
+ 8447: 0x7007,
+ 8448: 0x7028,
+ 8449: 0x7085,
+ 8450: 0x70AB,
+ 8451: 0x710F,
+ 8452: 0x7104,
+ 8453: 0x715C,
+ 8454: 0x7146,
+ 8455: 0x7147,
+ 8456: 0xFA15,
+ 8457: 0x71C1,
+ 8458: 0x71FE,
+ 8459: 0x72B1,
+ 8460: 0x72BE,
+ 8461: 0x7324,
+ 8462: 0xFA16,
+ 8463: 0x7377,
+ 8464: 0x73BD,
+ 8465: 0x73C9,
+ 8466: 0x73D6,
+ 8467: 0x73E3,
+ 8468: 0x73D2,
+ 8469: 0x7407,
+ 8470: 0x73F5,
+ 8471: 0x7426,
+ 8472: 0x742A,
+ 8473: 0x7429,
+ 8474: 0x742E,
+ 8475: 0x7462,
+ 8476: 0x7489,
+ 8477: 0x749F,
+ 8478: 0x7501,
+ 8479: 0x756F,
+ 8480: 0x7682,
+ 8481: 0x769C,
+ 8482: 0x769E,
+ 8483: 0x769B,
+ 8484: 0x76A6,
+ 8485: 0xFA17,
+ 8486: 0x7746,
+ 8487: 0x52AF,
+ 8488: 0x7821,
+ 8489: 0x784E,
+ 8490: 0x7864,
+ 8491: 0x787A,
+ 8492: 0x7930,
+ 8493: 0xFA18,
+ 8494: 0xFA19,
+ 8495: 0xFA1A,
+ 8496: 0x7994,
+ 8497: 0xFA1B,
+ 8498: 0x799B,
+ 8499: 0x7AD1,
+ 8500: 0x7AE7,
+ 8501: 0xFA1C,
+ 8502: 0x7AEB,
+ 8503: 0x7B9E,
+ 8504: 0xFA1D,
+ 8505: 0x7D48,
+ 8506: 0x7D5C,
+ 8507: 0x7DB7,
+ 8508: 0x7DA0,
+ 8509: 0x7DD6,
+ 8510: 0x7E52,
+ 8511: 0x7F47,
+ 8512: 0x7FA1,
+ 8513: 0xFA1E,
+ 8514: 0x8301,
+ 8515: 0x8362,
+ 8516: 0x837F,
+ 8517: 0x83C7,
+ 8518: 0x83F6,
+ 8519: 0x8448,
+ 8520: 0x84B4,
+ 8521: 0x8553,
+ 8522: 0x8559,
+ 8523: 0x856B,
+ 8524: 0xFA1F,
+ 8525: 0x85B0,
+ 8526: 0xFA20,
+ 8527: 0xFA21,
+ 8528: 0x8807,
+ 8529: 0x88F5,
+ 8530: 0x8A12,
+ 8531: 0x8A37,
+ 8532: 0x8A79,
+ 8533: 0x8AA7,
+ 8534: 0x8ABE,
+ 8535: 0x8ADF,
+ 8536: 0xFA22,
+ 8537: 0x8AF6,
+ 8538: 0x8B53,
+ 8539: 0x8B7F,
+ 8540: 0x8CF0,
+ 8541: 0x8CF4,
+ 8542: 0x8D12,
+ 8543: 0x8D76,
+ 8544: 0xFA23,
+ 8545: 0x8ECF,
+ 8546: 0xFA24,
+ 8547: 0xFA25,
+ 8548: 0x9067,
+ 8549: 0x90DE,
+ 8550: 0xFA26,
+ 8551: 0x9115,
+ 8552: 0x9127,
+ 8553: 0x91DA,
+ 8554: 0x91D7,
+ 8555: 0x91DE,
+ 8556: 0x91ED,
+ 8557: 0x91EE,
+ 8558: 0x91E4,
+ 8559: 0x91E5,
+ 8560: 0x9206,
+ 8561: 0x9210,
+ 8562: 0x920A,
+ 8563: 0x923A,
+ 8564: 0x9240,
+ 8565: 0x923C,
+ 8566: 0x924E,
+ 8567: 0x9259,
+ 8568: 0x9251,
+ 8569: 0x9239,
+ 8570: 0x9267,
+ 8571: 0x92A7,
+ 8572: 0x9277,
+ 8573: 0x9278,
+ 8574: 0x92E7,
+ 8575: 0x92D7,
+ 8576: 0x92D9,
+ 8577: 0x92D0,
+ 8578: 0xFA27,
+ 8579: 0x92D5,
+ 8580: 0x92E0,
+ 8581: 0x92D3,
+ 8582: 0x9325,
+ 8583: 0x9321,
+ 8584: 0x92FB,
+ 8585: 0xFA28,
+ 8586: 0x931E,
+ 8587: 0x92FF,
+ 8588: 0x931D,
+ 8589: 0x9302,
+ 8590: 0x9370,
+ 8591: 0x9357,
+ 8592: 0x93A4,
+ 8593: 0x93C6,
+ 8594: 0x93DE,
+ 8595: 0x93F8,
+ 8596: 0x9431,
+ 8597: 0x9445,
+ 8598: 0x9448,
+ 8599: 0x9592,
+ 8600: 0xF9DC,
+ 8601: 0xFA29,
+ 8602: 0x969D,
+ 8603: 0x96AF,
+ 8604: 0x9733,
+ 8605: 0x973B,
+ 8606: 0x9743,
+ 8607: 0x974D,
+ 8608: 0x974F,
+ 8609: 0x9751,
+ 8610: 0x9755,
+ 8611: 0x9857,
+ 8612: 0x9865,
+ 8613: 0xFA2A,
+ 8614: 0xFA2B,
+ 8615: 0x9927,
+ 8616: 0xFA2C,
+ 8617: 0x999E,
+ 8618: 0x9A4E,
+ 8619: 0x9AD9,
+ 8620: 0x9ADC,
+ 8621: 0x9B75,
+ 8622: 0x9B72,
+ 8623: 0x9B8F,
+ 8624: 0x9BB1,
+ 8625: 0x9BBB,
+ 8626: 0x9C00,
+ 8627: 0x9D70,
+ 8628: 0x9D6B,
+ 8629: 0xFA2D,
+ 8630: 0x9E19,
+ 8631: 0x9ED1,
+ 8634: 0x2170,
+ 8635: 0x2171,
+ 8636: 0x2172,
+ 8637: 0x2173,
+ 8638: 0x2174,
+ 8639: 0x2175,
+ 8640: 0x2176,
+ 8641: 0x2177,
+ 8642: 0x2178,
+ 8643: 0x2179,
+ 8644: 0xFFE2,
+ 8645: 0xFFE4,
+ 8646: 0xFF07,
+ 8647: 0xFF02,
+ 10716: 0x2170,
+ 10717: 0x2171,
+ 10718: 0x2172,
+ 10719: 0x2173,
+ 10720: 0x2174,
+ 10721: 0x2175,
+ 10722: 0x2176,
+ 10723: 0x2177,
+ 10724: 0x2178,
+ 10725: 0x2179,
+ 10726: 0x2160,
+ 10727: 0x2161,
+ 10728: 0x2162,
+ 10729: 0x2163,
+ 10730: 0x2164,
+ 10731: 0x2165,
+ 10732: 0x2166,
+ 10733: 0x2167,
+ 10734: 0x2168,
+ 10735: 0x2169,
+ 10736: 0xFFE2,
+ 10737: 0xFFE4,
+ 10738: 0xFF07,
+ 10739: 0xFF02,
+ 10740: 0x3231,
+ 10741: 0x2116,
+ 10742: 0x2121,
+ 10743: 0x2235,
+ 10744: 0x7E8A,
+ 10745: 0x891C,
+ 10746: 0x9348,
+ 10747: 0x9288,
+ 10748: 0x84DC,
+ 10749: 0x4FC9,
+ 10750: 0x70BB,
+ 10751: 0x6631,
+ 10752: 0x68C8,
+ 10753: 0x92F9,
+ 10754: 0x66FB,
+ 10755: 0x5F45,
+ 10756: 0x4E28,
+ 10757: 0x4EE1,
+ 10758: 0x4EFC,
+ 10759: 0x4F00,
+ 10760: 0x4F03,
+ 10761: 0x4F39,
+ 10762: 0x4F56,
+ 10763: 0x4F92,
+ 10764: 0x4F8A,
+ 10765: 0x4F9A,
+ 10766: 0x4F94,
+ 10767: 0x4FCD,
+ 10768: 0x5040,
+ 10769: 0x5022,
+ 10770: 0x4FFF,
+ 10771: 0x501E,
+ 10772: 0x5046,
+ 10773: 0x5070,
+ 10774: 0x5042,
+ 10775: 0x5094,
+ 10776: 0x50F4,
+ 10777: 0x50D8,
+ 10778: 0x514A,
+ 10779: 0x5164,
+ 10780: 0x519D,
+ 10781: 0x51BE,
+ 10782: 0x51EC,
+ 10783: 0x5215,
+ 10784: 0x529C,
+ 10785: 0x52A6,
+ 10786: 0x52C0,
+ 10787: 0x52DB,
+ 10788: 0x5300,
+ 10789: 0x5307,
+ 10790: 0x5324,
+ 10791: 0x5372,
+ 10792: 0x5393,
+ 10793: 0x53B2,
+ 10794: 0x53DD,
+ 10795: 0xFA0E,
+ 10796: 0x549C,
+ 10797: 0x548A,
+ 10798: 0x54A9,
+ 10799: 0x54FF,
+ 10800: 0x5586,
+ 10801: 0x5759,
+ 10802: 0x5765,
+ 10803: 0x57AC,
+ 10804: 0x57C8,
+ 10805: 0x57C7,
+ 10806: 0xFA0F,
+ 10807: 0xFA10,
+ 10808: 0x589E,
+ 10809: 0x58B2,
+ 10810: 0x590B,
+ 10811: 0x5953,
+ 10812: 0x595B,
+ 10813: 0x595D,
+ 10814: 0x5963,
+ 10815: 0x59A4,
+ 10816: 0x59BA,
+ 10817: 0x5B56,
+ 10818: 0x5BC0,
+ 10819: 0x752F,
+ 10820: 0x5BD8,
+ 10821: 0x5BEC,
+ 10822: 0x5C1E,
+ 10823: 0x5CA6,
+ 10824: 0x5CBA,
+ 10825: 0x5CF5,
+ 10826: 0x5D27,
+ 10827: 0x5D53,
+ 10828: 0xFA11,
+ 10829: 0x5D42,
+ 10830: 0x5D6D,
+ 10831: 0x5DB8,
+ 10832: 0x5DB9,
+ 10833: 0x5DD0,
+ 10834: 0x5F21,
+ 10835: 0x5F34,
+ 10836: 0x5F67,
+ 10837: 0x5FB7,
+ 10838: 0x5FDE,
+ 10839: 0x605D,
+ 10840: 0x6085,
+ 10841: 0x608A,
+ 10842: 0x60DE,
+ 10843: 0x60D5,
+ 10844: 0x6120,
+ 10845: 0x60F2,
+ 10846: 0x6111,
+ 10847: 0x6137,
+ 10848: 0x6130,
+ 10849: 0x6198,
+ 10850: 0x6213,
+ 10851: 0x62A6,
+ 10852: 0x63F5,
+ 10853: 0x6460,
+ 10854: 0x649D,
+ 10855: 0x64CE,
+ 10856: 0x654E,
+ 10857: 0x6600,
+ 10858: 0x6615,
+ 10859: 0x663B,
+ 10860: 0x6609,
+ 10861: 0x662E,
+ 10862: 0x661E,
+ 10863: 0x6624,
+ 10864: 0x6665,
+ 10865: 0x6657,
+ 10866: 0x6659,
+ 10867: 0xFA12,
+ 10868: 0x6673,
+ 10869: 0x6699,
+ 10870: 0x66A0,
+ 10871: 0x66B2,
+ 10872: 0x66BF,
+ 10873: 0x66FA,
+ 10874: 0x670E,
+ 10875: 0xF929,
+ 10876: 0x6766,
+ 10877: 0x67BB,
+ 10878: 0x6852,
+ 10879: 0x67C0,
+ 10880: 0x6801,
+ 10881: 0x6844,
+ 10882: 0x68CF,
+ 10883: 0xFA13,
+ 10884: 0x6968,
+ 10885: 0xFA14,
+ 10886: 0x6998,
+ 10887: 0x69E2,
+ 10888: 0x6A30,
+ 10889: 0x6A6B,
+ 10890: 0x6A46,
+ 10891: 0x6A73,
+ 10892: 0x6A7E,
+ 10893: 0x6AE2,
+ 10894: 0x6AE4,
+ 10895: 0x6BD6,
+ 10896: 0x6C3F,
+ 10897: 0x6C5C,
+ 10898: 0x6C86,
+ 10899: 0x6C6F,
+ 10900: 0x6CDA,
+ 10901: 0x6D04,
+ 10902: 0x6D87,
+ 10903: 0x6D6F,
+ 10904: 0x6D96,
+ 10905: 0x6DAC,
+ 10906: 0x6DCF,
+ 10907: 0x6DF8,
+ 10908: 0x6DF2,
+ 10909: 0x6DFC,
+ 10910: 0x6E39,
+ 10911: 0x6E5C,
+ 10912: 0x6E27,
+ 10913: 0x6E3C,
+ 10914: 0x6EBF,
+ 10915: 0x6F88,
+ 10916: 0x6FB5,
+ 10917: 0x6FF5,
+ 10918: 0x7005,
+ 10919: 0x7007,
+ 10920: 0x7028,
+ 10921: 0x7085,
+ 10922: 0x70AB,
+ 10923: 0x710F,
+ 10924: 0x7104,
+ 10925: 0x715C,
+ 10926: 0x7146,
+ 10927: 0x7147,
+ 10928: 0xFA15,
+ 10929: 0x71C1,
+ 10930: 0x71FE,
+ 10931: 0x72B1,
+ 10932: 0x72BE,
+ 10933: 0x7324,
+ 10934: 0xFA16,
+ 10935: 0x7377,
+ 10936: 0x73BD,
+ 10937: 0x73C9,
+ 10938: 0x73D6,
+ 10939: 0x73E3,
+ 10940: 0x73D2,
+ 10941: 0x7407,
+ 10942: 0x73F5,
+ 10943: 0x7426,
+ 10944: 0x742A,
+ 10945: 0x7429,
+ 10946: 0x742E,
+ 10947: 0x7462,
+ 10948: 0x7489,
+ 10949: 0x749F,
+ 10950: 0x7501,
+ 10951: 0x756F,
+ 10952: 0x7682,
+ 10953: 0x769C,
+ 10954: 0x769E,
+ 10955: 0x769B,
+ 10956: 0x76A6,
+ 10957: 0xFA17,
+ 10958: 0x7746,
+ 10959: 0x52AF,
+ 10960: 0x7821,
+ 10961: 0x784E,
+ 10962: 0x7864,
+ 10963: 0x787A,
+ 10964: 0x7930,
+ 10965: 0xFA18,
+ 10966: 0xFA19,
+ 10967: 0xFA1A,
+ 10968: 0x7994,
+ 10969: 0xFA1B,
+ 10970: 0x799B,
+ 10971: 0x7AD1,
+ 10972: 0x7AE7,
+ 10973: 0xFA1C,
+ 10974: 0x7AEB,
+ 10975: 0x7B9E,
+ 10976: 0xFA1D,
+ 10977: 0x7D48,
+ 10978: 0x7D5C,
+ 10979: 0x7DB7,
+ 10980: 0x7DA0,
+ 10981: 0x7DD6,
+ 10982: 0x7E52,
+ 10983: 0x7F47,
+ 10984: 0x7FA1,
+ 10985: 0xFA1E,
+ 10986: 0x8301,
+ 10987: 0x8362,
+ 10988: 0x837F,
+ 10989: 0x83C7,
+ 10990: 0x83F6,
+ 10991: 0x8448,
+ 10992: 0x84B4,
+ 10993: 0x8553,
+ 10994: 0x8559,
+ 10995: 0x856B,
+ 10996: 0xFA1F,
+ 10997: 0x85B0,
+ 10998: 0xFA20,
+ 10999: 0xFA21,
+ 11000: 0x8807,
+ 11001: 0x88F5,
+ 11002: 0x8A12,
+ 11003: 0x8A37,
+ 11004: 0x8A79,
+ 11005: 0x8AA7,
+ 11006: 0x8ABE,
+ 11007: 0x8ADF,
+ 11008: 0xFA22,
+ 11009: 0x8AF6,
+ 11010: 0x8B53,
+ 11011: 0x8B7F,
+ 11012: 0x8CF0,
+ 11013: 0x8CF4,
+ 11014: 0x8D12,
+ 11015: 0x8D76,
+ 11016: 0xFA23,
+ 11017: 0x8ECF,
+ 11018: 0xFA24,
+ 11019: 0xFA25,
+ 11020: 0x9067,
+ 11021: 0x90DE,
+ 11022: 0xFA26,
+ 11023: 0x9115,
+ 11024: 0x9127,
+ 11025: 0x91DA,
+ 11026: 0x91D7,
+ 11027: 0x91DE,
+ 11028: 0x91ED,
+ 11029: 0x91EE,
+ 11030: 0x91E4,
+ 11031: 0x91E5,
+ 11032: 0x9206,
+ 11033: 0x9210,
+ 11034: 0x920A,
+ 11035: 0x923A,
+ 11036: 0x9240,
+ 11037: 0x923C,
+ 11038: 0x924E,
+ 11039: 0x9259,
+ 11040: 0x9251,
+ 11041: 0x9239,
+ 11042: 0x9267,
+ 11043: 0x92A7,
+ 11044: 0x9277,
+ 11045: 0x9278,
+ 11046: 0x92E7,
+ 11047: 0x92D7,
+ 11048: 0x92D9,
+ 11049: 0x92D0,
+ 11050: 0xFA27,
+ 11051: 0x92D5,
+ 11052: 0x92E0,
+ 11053: 0x92D3,
+ 11054: 0x9325,
+ 11055: 0x9321,
+ 11056: 0x92FB,
+ 11057: 0xFA28,
+ 11058: 0x931E,
+ 11059: 0x92FF,
+ 11060: 0x931D,
+ 11061: 0x9302,
+ 11062: 0x9370,
+ 11063: 0x9357,
+ 11064: 0x93A4,
+ 11065: 0x93C6,
+ 11066: 0x93DE,
+ 11067: 0x93F8,
+ 11068: 0x9431,
+ 11069: 0x9445,
+ 11070: 0x9448,
+ 11071: 0x9592,
+ 11072: 0xF9DC,
+ 11073: 0xFA29,
+ 11074: 0x969D,
+ 11075: 0x96AF,
+ 11076: 0x9733,
+ 11077: 0x973B,
+ 11078: 0x9743,
+ 11079: 0x974D,
+ 11080: 0x974F,
+ 11081: 0x9751,
+ 11082: 0x9755,
+ 11083: 0x9857,
+ 11084: 0x9865,
+ 11085: 0xFA2A,
+ 11086: 0xFA2B,
+ 11087: 0x9927,
+ 11088: 0xFA2C,
+ 11089: 0x999E,
+ 11090: 0x9A4E,
+ 11091: 0x9AD9,
+ 11092: 0x9ADC,
+ 11093: 0x9B75,
+ 11094: 0x9B72,
+ 11095: 0x9B8F,
+ 11096: 0x9BB1,
+ 11097: 0x9BBB,
+ 11098: 0x9C00,
+ 11099: 0x9D70,
+ 11100: 0x9D6B,
+ 11101: 0xFA2D,
+ 11102: 0x9E19,
+ 11103: 0x9ED1,
+}
+
+// jis0212Decode is the decoding table from JIS 0212 code to Unicode.
+// It is defined at http://encoding.spec.whatwg.org/index-jis0212.txt
+var jis0212Decode = [...]uint16{
+ 108: 0x02D8,
+ 109: 0x02C7,
+ 110: 0x00B8,
+ 111: 0x02D9,
+ 112: 0x02DD,
+ 113: 0x00AF,
+ 114: 0x02DB,
+ 115: 0x02DA,
+ 116: 0xFF5E,
+ 117: 0x0384,
+ 118: 0x0385,
+ 127: 0x00A1,
+ 128: 0x00A6,
+ 129: 0x00BF,
+ 168: 0x00BA,
+ 169: 0x00AA,
+ 170: 0x00A9,
+ 171: 0x00AE,
+ 172: 0x2122,
+ 173: 0x00A4,
+ 174: 0x2116,
+ 534: 0x0386,
+ 535: 0x0388,
+ 536: 0x0389,
+ 537: 0x038A,
+ 538: 0x03AA,
+ 540: 0x038C,
+ 542: 0x038E,
+ 543: 0x03AB,
+ 545: 0x038F,
+ 550: 0x03AC,
+ 551: 0x03AD,
+ 552: 0x03AE,
+ 553: 0x03AF,
+ 554: 0x03CA,
+ 555: 0x0390,
+ 556: 0x03CC,
+ 557: 0x03C2,
+ 558: 0x03CD,
+ 559: 0x03CB,
+ 560: 0x03B0,
+ 561: 0x03CE,
+ 597: 0x0402,
+ 598: 0x0403,
+ 599: 0x0404,
+ 600: 0x0405,
+ 601: 0x0406,
+ 602: 0x0407,
+ 603: 0x0408,
+ 604: 0x0409,
+ 605: 0x040A,
+ 606: 0x040B,
+ 607: 0x040C,
+ 608: 0x040E,
+ 609: 0x040F,
+ 645: 0x0452,
+ 646: 0x0453,
+ 647: 0x0454,
+ 648: 0x0455,
+ 649: 0x0456,
+ 650: 0x0457,
+ 651: 0x0458,
+ 652: 0x0459,
+ 653: 0x045A,
+ 654: 0x045B,
+ 655: 0x045C,
+ 656: 0x045E,
+ 657: 0x045F,
+ 752: 0x00C6,
+ 753: 0x0110,
+ 755: 0x0126,
+ 757: 0x0132,
+ 759: 0x0141,
+ 760: 0x013F,
+ 762: 0x014A,
+ 763: 0x00D8,
+ 764: 0x0152,
+ 766: 0x0166,
+ 767: 0x00DE,
+ 784: 0x00E6,
+ 785: 0x0111,
+ 786: 0x00F0,
+ 787: 0x0127,
+ 788: 0x0131,
+ 789: 0x0133,
+ 790: 0x0138,
+ 791: 0x0142,
+ 792: 0x0140,
+ 793: 0x0149,
+ 794: 0x014B,
+ 795: 0x00F8,
+ 796: 0x0153,
+ 797: 0x00DF,
+ 798: 0x0167,
+ 799: 0x00FE,
+ 846: 0x00C1,
+ 847: 0x00C0,
+ 848: 0x00C4,
+ 849: 0x00C2,
+ 850: 0x0102,
+ 851: 0x01CD,
+ 852: 0x0100,
+ 853: 0x0104,
+ 854: 0x00C5,
+ 855: 0x00C3,
+ 856: 0x0106,
+ 857: 0x0108,
+ 858: 0x010C,
+ 859: 0x00C7,
+ 860: 0x010A,
+ 861: 0x010E,
+ 862: 0x00C9,
+ 863: 0x00C8,
+ 864: 0x00CB,
+ 865: 0x00CA,
+ 866: 0x011A,
+ 867: 0x0116,
+ 868: 0x0112,
+ 869: 0x0118,
+ 871: 0x011C,
+ 872: 0x011E,
+ 873: 0x0122,
+ 874: 0x0120,
+ 875: 0x0124,
+ 876: 0x00CD,
+ 877: 0x00CC,
+ 878: 0x00CF,
+ 879: 0x00CE,
+ 880: 0x01CF,
+ 881: 0x0130,
+ 882: 0x012A,
+ 883: 0x012E,
+ 884: 0x0128,
+ 885: 0x0134,
+ 886: 0x0136,
+ 887: 0x0139,
+ 888: 0x013D,
+ 889: 0x013B,
+ 890: 0x0143,
+ 891: 0x0147,
+ 892: 0x0145,
+ 893: 0x00D1,
+ 894: 0x00D3,
+ 895: 0x00D2,
+ 896: 0x00D6,
+ 897: 0x00D4,
+ 898: 0x01D1,
+ 899: 0x0150,
+ 900: 0x014C,
+ 901: 0x00D5,
+ 902: 0x0154,
+ 903: 0x0158,
+ 904: 0x0156,
+ 905: 0x015A,
+ 906: 0x015C,
+ 907: 0x0160,
+ 908: 0x015E,
+ 909: 0x0164,
+ 910: 0x0162,
+ 911: 0x00DA,
+ 912: 0x00D9,
+ 913: 0x00DC,
+ 914: 0x00DB,
+ 915: 0x016C,
+ 916: 0x01D3,
+ 917: 0x0170,
+ 918: 0x016A,
+ 919: 0x0172,
+ 920: 0x016E,
+ 921: 0x0168,
+ 922: 0x01D7,
+ 923: 0x01DB,
+ 924: 0x01D9,
+ 925: 0x01D5,
+ 926: 0x0174,
+ 927: 0x00DD,
+ 928: 0x0178,
+ 929: 0x0176,
+ 930: 0x0179,
+ 931: 0x017D,
+ 932: 0x017B,
+ 940: 0x00E1,
+ 941: 0x00E0,
+ 942: 0x00E4,
+ 943: 0x00E2,
+ 944: 0x0103,
+ 945: 0x01CE,
+ 946: 0x0101,
+ 947: 0x0105,
+ 948: 0x00E5,
+ 949: 0x00E3,
+ 950: 0x0107,
+ 951: 0x0109,
+ 952: 0x010D,
+ 953: 0x00E7,
+ 954: 0x010B,
+ 955: 0x010F,
+ 956: 0x00E9,
+ 957: 0x00E8,
+ 958: 0x00EB,
+ 959: 0x00EA,
+ 960: 0x011B,
+ 961: 0x0117,
+ 962: 0x0113,
+ 963: 0x0119,
+ 964: 0x01F5,
+ 965: 0x011D,
+ 966: 0x011F,
+ 968: 0x0121,
+ 969: 0x0125,
+ 970: 0x00ED,
+ 971: 0x00EC,
+ 972: 0x00EF,
+ 973: 0x00EE,
+ 974: 0x01D0,
+ 976: 0x012B,
+ 977: 0x012F,
+ 978: 0x0129,
+ 979: 0x0135,
+ 980: 0x0137,
+ 981: 0x013A,
+ 982: 0x013E,
+ 983: 0x013C,
+ 984: 0x0144,
+ 985: 0x0148,
+ 986: 0x0146,
+ 987: 0x00F1,
+ 988: 0x00F3,
+ 989: 0x00F2,
+ 990: 0x00F6,
+ 991: 0x00F4,
+ 992: 0x01D2,
+ 993: 0x0151,
+ 994: 0x014D,
+ 995: 0x00F5,
+ 996: 0x0155,
+ 997: 0x0159,
+ 998: 0x0157,
+ 999: 0x015B,
+ 1000: 0x015D,
+ 1001: 0x0161,
+ 1002: 0x015F,
+ 1003: 0x0165,
+ 1004: 0x0163,
+ 1005: 0x00FA,
+ 1006: 0x00F9,
+ 1007: 0x00FC,
+ 1008: 0x00FB,
+ 1009: 0x016D,
+ 1010: 0x01D4,
+ 1011: 0x0171,
+ 1012: 0x016B,
+ 1013: 0x0173,
+ 1014: 0x016F,
+ 1015: 0x0169,
+ 1016: 0x01D8,
+ 1017: 0x01DC,
+ 1018: 0x01DA,
+ 1019: 0x01D6,
+ 1020: 0x0175,
+ 1021: 0x00FD,
+ 1022: 0x00FF,
+ 1023: 0x0177,
+ 1024: 0x017A,
+ 1025: 0x017E,
+ 1026: 0x017C,
+ 1410: 0x4E02,
+ 1411: 0x4E04,
+ 1412: 0x4E05,
+ 1413: 0x4E0C,
+ 1414: 0x4E12,
+ 1415: 0x4E1F,
+ 1416: 0x4E23,
+ 1417: 0x4E24,
+ 1418: 0x4E28,
+ 1419: 0x4E2B,
+ 1420: 0x4E2E,
+ 1421: 0x4E2F,
+ 1422: 0x4E30,
+ 1423: 0x4E35,
+ 1424: 0x4E40,
+ 1425: 0x4E41,
+ 1426: 0x4E44,
+ 1427: 0x4E47,
+ 1428: 0x4E51,
+ 1429: 0x4E5A,
+ 1430: 0x4E5C,
+ 1431: 0x4E63,
+ 1432: 0x4E68,
+ 1433: 0x4E69,
+ 1434: 0x4E74,
+ 1435: 0x4E75,
+ 1436: 0x4E79,
+ 1437: 0x4E7F,
+ 1438: 0x4E8D,
+ 1439: 0x4E96,
+ 1440: 0x4E97,
+ 1441: 0x4E9D,
+ 1442: 0x4EAF,
+ 1443: 0x4EB9,
+ 1444: 0x4EC3,
+ 1445: 0x4ED0,
+ 1446: 0x4EDA,
+ 1447: 0x4EDB,
+ 1448: 0x4EE0,
+ 1449: 0x4EE1,
+ 1450: 0x4EE2,
+ 1451: 0x4EE8,
+ 1452: 0x4EEF,
+ 1453: 0x4EF1,
+ 1454: 0x4EF3,
+ 1455: 0x4EF5,
+ 1456: 0x4EFD,
+ 1457: 0x4EFE,
+ 1458: 0x4EFF,
+ 1459: 0x4F00,
+ 1460: 0x4F02,
+ 1461: 0x4F03,
+ 1462: 0x4F08,
+ 1463: 0x4F0B,
+ 1464: 0x4F0C,
+ 1465: 0x4F12,
+ 1466: 0x4F15,
+ 1467: 0x4F16,
+ 1468: 0x4F17,
+ 1469: 0x4F19,
+ 1470: 0x4F2E,
+ 1471: 0x4F31,
+ 1472: 0x4F60,
+ 1473: 0x4F33,
+ 1474: 0x4F35,
+ 1475: 0x4F37,
+ 1476: 0x4F39,
+ 1477: 0x4F3B,
+ 1478: 0x4F3E,
+ 1479: 0x4F40,
+ 1480: 0x4F42,
+ 1481: 0x4F48,
+ 1482: 0x4F49,
+ 1483: 0x4F4B,
+ 1484: 0x4F4C,
+ 1485: 0x4F52,
+ 1486: 0x4F54,
+ 1487: 0x4F56,
+ 1488: 0x4F58,
+ 1489: 0x4F5F,
+ 1490: 0x4F63,
+ 1491: 0x4F6A,
+ 1492: 0x4F6C,
+ 1493: 0x4F6E,
+ 1494: 0x4F71,
+ 1495: 0x4F77,
+ 1496: 0x4F78,
+ 1497: 0x4F79,
+ 1498: 0x4F7A,
+ 1499: 0x4F7D,
+ 1500: 0x4F7E,
+ 1501: 0x4F81,
+ 1502: 0x4F82,
+ 1503: 0x4F84,
+ 1504: 0x4F85,
+ 1505: 0x4F89,
+ 1506: 0x4F8A,
+ 1507: 0x4F8C,
+ 1508: 0x4F8E,
+ 1509: 0x4F90,
+ 1510: 0x4F92,
+ 1511: 0x4F93,
+ 1512: 0x4F94,
+ 1513: 0x4F97,
+ 1514: 0x4F99,
+ 1515: 0x4F9A,
+ 1516: 0x4F9E,
+ 1517: 0x4F9F,
+ 1518: 0x4FB2,
+ 1519: 0x4FB7,
+ 1520: 0x4FB9,
+ 1521: 0x4FBB,
+ 1522: 0x4FBC,
+ 1523: 0x4FBD,
+ 1524: 0x4FBE,
+ 1525: 0x4FC0,
+ 1526: 0x4FC1,
+ 1527: 0x4FC5,
+ 1528: 0x4FC6,
+ 1529: 0x4FC8,
+ 1530: 0x4FC9,
+ 1531: 0x4FCB,
+ 1532: 0x4FCC,
+ 1533: 0x4FCD,
+ 1534: 0x4FCF,
+ 1535: 0x4FD2,
+ 1536: 0x4FDC,
+ 1537: 0x4FE0,
+ 1538: 0x4FE2,
+ 1539: 0x4FF0,
+ 1540: 0x4FF2,
+ 1541: 0x4FFC,
+ 1542: 0x4FFD,
+ 1543: 0x4FFF,
+ 1544: 0x5000,
+ 1545: 0x5001,
+ 1546: 0x5004,
+ 1547: 0x5007,
+ 1548: 0x500A,
+ 1549: 0x500C,
+ 1550: 0x500E,
+ 1551: 0x5010,
+ 1552: 0x5013,
+ 1553: 0x5017,
+ 1554: 0x5018,
+ 1555: 0x501B,
+ 1556: 0x501C,
+ 1557: 0x501D,
+ 1558: 0x501E,
+ 1559: 0x5022,
+ 1560: 0x5027,
+ 1561: 0x502E,
+ 1562: 0x5030,
+ 1563: 0x5032,
+ 1564: 0x5033,
+ 1565: 0x5035,
+ 1566: 0x5040,
+ 1567: 0x5041,
+ 1568: 0x5042,
+ 1569: 0x5045,
+ 1570: 0x5046,
+ 1571: 0x504A,
+ 1572: 0x504C,
+ 1573: 0x504E,
+ 1574: 0x5051,
+ 1575: 0x5052,
+ 1576: 0x5053,
+ 1577: 0x5057,
+ 1578: 0x5059,
+ 1579: 0x505F,
+ 1580: 0x5060,
+ 1581: 0x5062,
+ 1582: 0x5063,
+ 1583: 0x5066,
+ 1584: 0x5067,
+ 1585: 0x506A,
+ 1586: 0x506D,
+ 1587: 0x5070,
+ 1588: 0x5071,
+ 1589: 0x503B,
+ 1590: 0x5081,
+ 1591: 0x5083,
+ 1592: 0x5084,
+ 1593: 0x5086,
+ 1594: 0x508A,
+ 1595: 0x508E,
+ 1596: 0x508F,
+ 1597: 0x5090,
+ 1598: 0x5092,
+ 1599: 0x5093,
+ 1600: 0x5094,
+ 1601: 0x5096,
+ 1602: 0x509B,
+ 1603: 0x509C,
+ 1604: 0x509E,
+ 1605: 0x509F,
+ 1606: 0x50A0,
+ 1607: 0x50A1,
+ 1608: 0x50A2,
+ 1609: 0x50AA,
+ 1610: 0x50AF,
+ 1611: 0x50B0,
+ 1612: 0x50B9,
+ 1613: 0x50BA,
+ 1614: 0x50BD,
+ 1615: 0x50C0,
+ 1616: 0x50C3,
+ 1617: 0x50C4,
+ 1618: 0x50C7,
+ 1619: 0x50CC,
+ 1620: 0x50CE,
+ 1621: 0x50D0,
+ 1622: 0x50D3,
+ 1623: 0x50D4,
+ 1624: 0x50D8,
+ 1625: 0x50DC,
+ 1626: 0x50DD,
+ 1627: 0x50DF,
+ 1628: 0x50E2,
+ 1629: 0x50E4,
+ 1630: 0x50E6,
+ 1631: 0x50E8,
+ 1632: 0x50E9,
+ 1633: 0x50EF,
+ 1634: 0x50F1,
+ 1635: 0x50F6,
+ 1636: 0x50FA,
+ 1637: 0x50FE,
+ 1638: 0x5103,
+ 1639: 0x5106,
+ 1640: 0x5107,
+ 1641: 0x5108,
+ 1642: 0x510B,
+ 1643: 0x510C,
+ 1644: 0x510D,
+ 1645: 0x510E,
+ 1646: 0x50F2,
+ 1647: 0x5110,
+ 1648: 0x5117,
+ 1649: 0x5119,
+ 1650: 0x511B,
+ 1651: 0x511C,
+ 1652: 0x511D,
+ 1653: 0x511E,
+ 1654: 0x5123,
+ 1655: 0x5127,
+ 1656: 0x5128,
+ 1657: 0x512C,
+ 1658: 0x512D,
+ 1659: 0x512F,
+ 1660: 0x5131,
+ 1661: 0x5133,
+ 1662: 0x5134,
+ 1663: 0x5135,
+ 1664: 0x5138,
+ 1665: 0x5139,
+ 1666: 0x5142,
+ 1667: 0x514A,
+ 1668: 0x514F,
+ 1669: 0x5153,
+ 1670: 0x5155,
+ 1671: 0x5157,
+ 1672: 0x5158,
+ 1673: 0x515F,
+ 1674: 0x5164,
+ 1675: 0x5166,
+ 1676: 0x517E,
+ 1677: 0x5183,
+ 1678: 0x5184,
+ 1679: 0x518B,
+ 1680: 0x518E,
+ 1681: 0x5198,
+ 1682: 0x519D,
+ 1683: 0x51A1,
+ 1684: 0x51A3,
+ 1685: 0x51AD,
+ 1686: 0x51B8,
+ 1687: 0x51BA,
+ 1688: 0x51BC,
+ 1689: 0x51BE,
+ 1690: 0x51BF,
+ 1691: 0x51C2,
+ 1692: 0x51C8,
+ 1693: 0x51CF,
+ 1694: 0x51D1,
+ 1695: 0x51D2,
+ 1696: 0x51D3,
+ 1697: 0x51D5,
+ 1698: 0x51D8,
+ 1699: 0x51DE,
+ 1700: 0x51E2,
+ 1701: 0x51E5,
+ 1702: 0x51EE,
+ 1703: 0x51F2,
+ 1704: 0x51F3,
+ 1705: 0x51F4,
+ 1706: 0x51F7,
+ 1707: 0x5201,
+ 1708: 0x5202,
+ 1709: 0x5205,
+ 1710: 0x5212,
+ 1711: 0x5213,
+ 1712: 0x5215,
+ 1713: 0x5216,
+ 1714: 0x5218,
+ 1715: 0x5222,
+ 1716: 0x5228,
+ 1717: 0x5231,
+ 1718: 0x5232,
+ 1719: 0x5235,
+ 1720: 0x523C,
+ 1721: 0x5245,
+ 1722: 0x5249,
+ 1723: 0x5255,
+ 1724: 0x5257,
+ 1725: 0x5258,
+ 1726: 0x525A,
+ 1727: 0x525C,
+ 1728: 0x525F,
+ 1729: 0x5260,
+ 1730: 0x5261,
+ 1731: 0x5266,
+ 1732: 0x526E,
+ 1733: 0x5277,
+ 1734: 0x5278,
+ 1735: 0x5279,
+ 1736: 0x5280,
+ 1737: 0x5282,
+ 1738: 0x5285,
+ 1739: 0x528A,
+ 1740: 0x528C,
+ 1741: 0x5293,
+ 1742: 0x5295,
+ 1743: 0x5296,
+ 1744: 0x5297,
+ 1745: 0x5298,
+ 1746: 0x529A,
+ 1747: 0x529C,
+ 1748: 0x52A4,
+ 1749: 0x52A5,
+ 1750: 0x52A6,
+ 1751: 0x52A7,
+ 1752: 0x52AF,
+ 1753: 0x52B0,
+ 1754: 0x52B6,
+ 1755: 0x52B7,
+ 1756: 0x52B8,
+ 1757: 0x52BA,
+ 1758: 0x52BB,
+ 1759: 0x52BD,
+ 1760: 0x52C0,
+ 1761: 0x52C4,
+ 1762: 0x52C6,
+ 1763: 0x52C8,
+ 1764: 0x52CC,
+ 1765: 0x52CF,
+ 1766: 0x52D1,
+ 1767: 0x52D4,
+ 1768: 0x52D6,
+ 1769: 0x52DB,
+ 1770: 0x52DC,
+ 1771: 0x52E1,
+ 1772: 0x52E5,
+ 1773: 0x52E8,
+ 1774: 0x52E9,
+ 1775: 0x52EA,
+ 1776: 0x52EC,
+ 1777: 0x52F0,
+ 1778: 0x52F1,
+ 1779: 0x52F4,
+ 1780: 0x52F6,
+ 1781: 0x52F7,
+ 1782: 0x5300,
+ 1783: 0x5303,
+ 1784: 0x530A,
+ 1785: 0x530B,
+ 1786: 0x530C,
+ 1787: 0x5311,
+ 1788: 0x5313,
+ 1789: 0x5318,
+ 1790: 0x531B,
+ 1791: 0x531C,
+ 1792: 0x531E,
+ 1793: 0x531F,
+ 1794: 0x5325,
+ 1795: 0x5327,
+ 1796: 0x5328,
+ 1797: 0x5329,
+ 1798: 0x532B,
+ 1799: 0x532C,
+ 1800: 0x532D,
+ 1801: 0x5330,
+ 1802: 0x5332,
+ 1803: 0x5335,
+ 1804: 0x533C,
+ 1805: 0x533D,
+ 1806: 0x533E,
+ 1807: 0x5342,
+ 1808: 0x534C,
+ 1809: 0x534B,
+ 1810: 0x5359,
+ 1811: 0x535B,
+ 1812: 0x5361,
+ 1813: 0x5363,
+ 1814: 0x5365,
+ 1815: 0x536C,
+ 1816: 0x536D,
+ 1817: 0x5372,
+ 1818: 0x5379,
+ 1819: 0x537E,
+ 1820: 0x5383,
+ 1821: 0x5387,
+ 1822: 0x5388,
+ 1823: 0x538E,
+ 1824: 0x5393,
+ 1825: 0x5394,
+ 1826: 0x5399,
+ 1827: 0x539D,
+ 1828: 0x53A1,
+ 1829: 0x53A4,
+ 1830: 0x53AA,
+ 1831: 0x53AB,
+ 1832: 0x53AF,
+ 1833: 0x53B2,
+ 1834: 0x53B4,
+ 1835: 0x53B5,
+ 1836: 0x53B7,
+ 1837: 0x53B8,
+ 1838: 0x53BA,
+ 1839: 0x53BD,
+ 1840: 0x53C0,
+ 1841: 0x53C5,
+ 1842: 0x53CF,
+ 1843: 0x53D2,
+ 1844: 0x53D3,
+ 1845: 0x53D5,
+ 1846: 0x53DA,
+ 1847: 0x53DD,
+ 1848: 0x53DE,
+ 1849: 0x53E0,
+ 1850: 0x53E6,
+ 1851: 0x53E7,
+ 1852: 0x53F5,
+ 1853: 0x5402,
+ 1854: 0x5413,
+ 1855: 0x541A,
+ 1856: 0x5421,
+ 1857: 0x5427,
+ 1858: 0x5428,
+ 1859: 0x542A,
+ 1860: 0x542F,
+ 1861: 0x5431,
+ 1862: 0x5434,
+ 1863: 0x5435,
+ 1864: 0x5443,
+ 1865: 0x5444,
+ 1866: 0x5447,
+ 1867: 0x544D,
+ 1868: 0x544F,
+ 1869: 0x545E,
+ 1870: 0x5462,
+ 1871: 0x5464,
+ 1872: 0x5466,
+ 1873: 0x5467,
+ 1874: 0x5469,
+ 1875: 0x546B,
+ 1876: 0x546D,
+ 1877: 0x546E,
+ 1878: 0x5474,
+ 1879: 0x547F,
+ 1880: 0x5481,
+ 1881: 0x5483,
+ 1882: 0x5485,
+ 1883: 0x5488,
+ 1884: 0x5489,
+ 1885: 0x548D,
+ 1886: 0x5491,
+ 1887: 0x5495,
+ 1888: 0x5496,
+ 1889: 0x549C,
+ 1890: 0x549F,
+ 1891: 0x54A1,
+ 1892: 0x54A6,
+ 1893: 0x54A7,
+ 1894: 0x54A9,
+ 1895: 0x54AA,
+ 1896: 0x54AD,
+ 1897: 0x54AE,
+ 1898: 0x54B1,
+ 1899: 0x54B7,
+ 1900: 0x54B9,
+ 1901: 0x54BA,
+ 1902: 0x54BB,
+ 1903: 0x54BF,
+ 1904: 0x54C6,
+ 1905: 0x54CA,
+ 1906: 0x54CD,
+ 1907: 0x54CE,
+ 1908: 0x54E0,
+ 1909: 0x54EA,
+ 1910: 0x54EC,
+ 1911: 0x54EF,
+ 1912: 0x54F6,
+ 1913: 0x54FC,
+ 1914: 0x54FE,
+ 1915: 0x54FF,
+ 1916: 0x5500,
+ 1917: 0x5501,
+ 1918: 0x5505,
+ 1919: 0x5508,
+ 1920: 0x5509,
+ 1921: 0x550C,
+ 1922: 0x550D,
+ 1923: 0x550E,
+ 1924: 0x5515,
+ 1925: 0x552A,
+ 1926: 0x552B,
+ 1927: 0x5532,
+ 1928: 0x5535,
+ 1929: 0x5536,
+ 1930: 0x553B,
+ 1931: 0x553C,
+ 1932: 0x553D,
+ 1933: 0x5541,
+ 1934: 0x5547,
+ 1935: 0x5549,
+ 1936: 0x554A,
+ 1937: 0x554D,
+ 1938: 0x5550,
+ 1939: 0x5551,
+ 1940: 0x5558,
+ 1941: 0x555A,
+ 1942: 0x555B,
+ 1943: 0x555E,
+ 1944: 0x5560,
+ 1945: 0x5561,
+ 1946: 0x5564,
+ 1947: 0x5566,
+ 1948: 0x557F,
+ 1949: 0x5581,
+ 1950: 0x5582,
+ 1951: 0x5586,
+ 1952: 0x5588,
+ 1953: 0x558E,
+ 1954: 0x558F,
+ 1955: 0x5591,
+ 1956: 0x5592,
+ 1957: 0x5593,
+ 1958: 0x5594,
+ 1959: 0x5597,
+ 1960: 0x55A3,
+ 1961: 0x55A4,
+ 1962: 0x55AD,
+ 1963: 0x55B2,
+ 1964: 0x55BF,
+ 1965: 0x55C1,
+ 1966: 0x55C3,
+ 1967: 0x55C6,
+ 1968: 0x55C9,
+ 1969: 0x55CB,
+ 1970: 0x55CC,
+ 1971: 0x55CE,
+ 1972: 0x55D1,
+ 1973: 0x55D2,
+ 1974: 0x55D3,
+ 1975: 0x55D7,
+ 1976: 0x55D8,
+ 1977: 0x55DB,
+ 1978: 0x55DE,
+ 1979: 0x55E2,
+ 1980: 0x55E9,
+ 1981: 0x55F6,
+ 1982: 0x55FF,
+ 1983: 0x5605,
+ 1984: 0x5608,
+ 1985: 0x560A,
+ 1986: 0x560D,
+ 1987: 0x560E,
+ 1988: 0x560F,
+ 1989: 0x5610,
+ 1990: 0x5611,
+ 1991: 0x5612,
+ 1992: 0x5619,
+ 1993: 0x562C,
+ 1994: 0x5630,
+ 1995: 0x5633,
+ 1996: 0x5635,
+ 1997: 0x5637,
+ 1998: 0x5639,
+ 1999: 0x563B,
+ 2000: 0x563C,
+ 2001: 0x563D,
+ 2002: 0x563F,
+ 2003: 0x5640,
+ 2004: 0x5641,
+ 2005: 0x5643,
+ 2006: 0x5644,
+ 2007: 0x5646,
+ 2008: 0x5649,
+ 2009: 0x564B,
+ 2010: 0x564D,
+ 2011: 0x564F,
+ 2012: 0x5654,
+ 2013: 0x565E,
+ 2014: 0x5660,
+ 2015: 0x5661,
+ 2016: 0x5662,
+ 2017: 0x5663,
+ 2018: 0x5666,
+ 2019: 0x5669,
+ 2020: 0x566D,
+ 2021: 0x566F,
+ 2022: 0x5671,
+ 2023: 0x5672,
+ 2024: 0x5675,
+ 2025: 0x5684,
+ 2026: 0x5685,
+ 2027: 0x5688,
+ 2028: 0x568B,
+ 2029: 0x568C,
+ 2030: 0x5695,
+ 2031: 0x5699,
+ 2032: 0x569A,
+ 2033: 0x569D,
+ 2034: 0x569E,
+ 2035: 0x569F,
+ 2036: 0x56A6,
+ 2037: 0x56A7,
+ 2038: 0x56A8,
+ 2039: 0x56A9,
+ 2040: 0x56AB,
+ 2041: 0x56AC,
+ 2042: 0x56AD,
+ 2043: 0x56B1,
+ 2044: 0x56B3,
+ 2045: 0x56B7,
+ 2046: 0x56BE,
+ 2047: 0x56C5,
+ 2048: 0x56C9,
+ 2049: 0x56CA,
+ 2050: 0x56CB,
+ 2051: 0x56CF,
+ 2052: 0x56D0,
+ 2053: 0x56CC,
+ 2054: 0x56CD,
+ 2055: 0x56D9,
+ 2056: 0x56DC,
+ 2057: 0x56DD,
+ 2058: 0x56DF,
+ 2059: 0x56E1,
+ 2060: 0x56E4,
+ 2061: 0x56E5,
+ 2062: 0x56E6,
+ 2063: 0x56E7,
+ 2064: 0x56E8,
+ 2065: 0x56F1,
+ 2066: 0x56EB,
+ 2067: 0x56ED,
+ 2068: 0x56F6,
+ 2069: 0x56F7,
+ 2070: 0x5701,
+ 2071: 0x5702,
+ 2072: 0x5707,
+ 2073: 0x570A,
+ 2074: 0x570C,
+ 2075: 0x5711,
+ 2076: 0x5715,
+ 2077: 0x571A,
+ 2078: 0x571B,
+ 2079: 0x571D,
+ 2080: 0x5720,
+ 2081: 0x5722,
+ 2082: 0x5723,
+ 2083: 0x5724,
+ 2084: 0x5725,
+ 2085: 0x5729,
+ 2086: 0x572A,
+ 2087: 0x572C,
+ 2088: 0x572E,
+ 2089: 0x572F,
+ 2090: 0x5733,
+ 2091: 0x5734,
+ 2092: 0x573D,
+ 2093: 0x573E,
+ 2094: 0x573F,
+ 2095: 0x5745,
+ 2096: 0x5746,
+ 2097: 0x574C,
+ 2098: 0x574D,
+ 2099: 0x5752,
+ 2100: 0x5762,
+ 2101: 0x5765,
+ 2102: 0x5767,
+ 2103: 0x5768,
+ 2104: 0x576B,
+ 2105: 0x576D,
+ 2106: 0x576E,
+ 2107: 0x576F,
+ 2108: 0x5770,
+ 2109: 0x5771,
+ 2110: 0x5773,
+ 2111: 0x5774,
+ 2112: 0x5775,
+ 2113: 0x5777,
+ 2114: 0x5779,
+ 2115: 0x577A,
+ 2116: 0x577B,
+ 2117: 0x577C,
+ 2118: 0x577E,
+ 2119: 0x5781,
+ 2120: 0x5783,
+ 2121: 0x578C,
+ 2122: 0x5794,
+ 2123: 0x5797,
+ 2124: 0x5799,
+ 2125: 0x579A,
+ 2126: 0x579C,
+ 2127: 0x579D,
+ 2128: 0x579E,
+ 2129: 0x579F,
+ 2130: 0x57A1,
+ 2131: 0x5795,
+ 2132: 0x57A7,
+ 2133: 0x57A8,
+ 2134: 0x57A9,
+ 2135: 0x57AC,
+ 2136: 0x57B8,
+ 2137: 0x57BD,
+ 2138: 0x57C7,
+ 2139: 0x57C8,
+ 2140: 0x57CC,
+ 2141: 0x57CF,
+ 2142: 0x57D5,
+ 2143: 0x57DD,
+ 2144: 0x57DE,
+ 2145: 0x57E4,
+ 2146: 0x57E6,
+ 2147: 0x57E7,
+ 2148: 0x57E9,
+ 2149: 0x57ED,
+ 2150: 0x57F0,
+ 2151: 0x57F5,
+ 2152: 0x57F6,
+ 2153: 0x57F8,
+ 2154: 0x57FD,
+ 2155: 0x57FE,
+ 2156: 0x57FF,
+ 2157: 0x5803,
+ 2158: 0x5804,
+ 2159: 0x5808,
+ 2160: 0x5809,
+ 2161: 0x57E1,
+ 2162: 0x580C,
+ 2163: 0x580D,
+ 2164: 0x581B,
+ 2165: 0x581E,
+ 2166: 0x581F,
+ 2167: 0x5820,
+ 2168: 0x5826,
+ 2169: 0x5827,
+ 2170: 0x582D,
+ 2171: 0x5832,
+ 2172: 0x5839,
+ 2173: 0x583F,
+ 2174: 0x5849,
+ 2175: 0x584C,
+ 2176: 0x584D,
+ 2177: 0x584F,
+ 2178: 0x5850,
+ 2179: 0x5855,
+ 2180: 0x585F,
+ 2181: 0x5861,
+ 2182: 0x5864,
+ 2183: 0x5867,
+ 2184: 0x5868,
+ 2185: 0x5878,
+ 2186: 0x587C,
+ 2187: 0x587F,
+ 2188: 0x5880,
+ 2189: 0x5881,
+ 2190: 0x5887,
+ 2191: 0x5888,
+ 2192: 0x5889,
+ 2193: 0x588A,
+ 2194: 0x588C,
+ 2195: 0x588D,
+ 2196: 0x588F,
+ 2197: 0x5890,
+ 2198: 0x5894,
+ 2199: 0x5896,
+ 2200: 0x589D,
+ 2201: 0x58A0,
+ 2202: 0x58A1,
+ 2203: 0x58A2,
+ 2204: 0x58A6,
+ 2205: 0x58A9,
+ 2206: 0x58B1,
+ 2207: 0x58B2,
+ 2208: 0x58C4,
+ 2209: 0x58BC,
+ 2210: 0x58C2,
+ 2211: 0x58C8,
+ 2212: 0x58CD,
+ 2213: 0x58CE,
+ 2214: 0x58D0,
+ 2215: 0x58D2,
+ 2216: 0x58D4,
+ 2217: 0x58D6,
+ 2218: 0x58DA,
+ 2219: 0x58DD,
+ 2220: 0x58E1,
+ 2221: 0x58E2,
+ 2222: 0x58E9,
+ 2223: 0x58F3,
+ 2224: 0x5905,
+ 2225: 0x5906,
+ 2226: 0x590B,
+ 2227: 0x590C,
+ 2228: 0x5912,
+ 2229: 0x5913,
+ 2230: 0x5914,
+ 2231: 0x8641,
+ 2232: 0x591D,
+ 2233: 0x5921,
+ 2234: 0x5923,
+ 2235: 0x5924,
+ 2236: 0x5928,
+ 2237: 0x592F,
+ 2238: 0x5930,
+ 2239: 0x5933,
+ 2240: 0x5935,
+ 2241: 0x5936,
+ 2242: 0x593F,
+ 2243: 0x5943,
+ 2244: 0x5946,
+ 2245: 0x5952,
+ 2246: 0x5953,
+ 2247: 0x5959,
+ 2248: 0x595B,
+ 2249: 0x595D,
+ 2250: 0x595E,
+ 2251: 0x595F,
+ 2252: 0x5961,
+ 2253: 0x5963,
+ 2254: 0x596B,
+ 2255: 0x596D,
+ 2256: 0x596F,
+ 2257: 0x5972,
+ 2258: 0x5975,
+ 2259: 0x5976,
+ 2260: 0x5979,
+ 2261: 0x597B,
+ 2262: 0x597C,
+ 2263: 0x598B,
+ 2264: 0x598C,
+ 2265: 0x598E,
+ 2266: 0x5992,
+ 2267: 0x5995,
+ 2268: 0x5997,
+ 2269: 0x599F,
+ 2270: 0x59A4,
+ 2271: 0x59A7,
+ 2272: 0x59AD,
+ 2273: 0x59AE,
+ 2274: 0x59AF,
+ 2275: 0x59B0,
+ 2276: 0x59B3,
+ 2277: 0x59B7,
+ 2278: 0x59BA,
+ 2279: 0x59BC,
+ 2280: 0x59C1,
+ 2281: 0x59C3,
+ 2282: 0x59C4,
+ 2283: 0x59C8,
+ 2284: 0x59CA,
+ 2285: 0x59CD,
+ 2286: 0x59D2,
+ 2287: 0x59DD,
+ 2288: 0x59DE,
+ 2289: 0x59DF,
+ 2290: 0x59E3,
+ 2291: 0x59E4,
+ 2292: 0x59E7,
+ 2293: 0x59EE,
+ 2294: 0x59EF,
+ 2295: 0x59F1,
+ 2296: 0x59F2,
+ 2297: 0x59F4,
+ 2298: 0x59F7,
+ 2299: 0x5A00,
+ 2300: 0x5A04,
+ 2301: 0x5A0C,
+ 2302: 0x5A0D,
+ 2303: 0x5A0E,
+ 2304: 0x5A12,
+ 2305: 0x5A13,
+ 2306: 0x5A1E,
+ 2307: 0x5A23,
+ 2308: 0x5A24,
+ 2309: 0x5A27,
+ 2310: 0x5A28,
+ 2311: 0x5A2A,
+ 2312: 0x5A2D,
+ 2313: 0x5A30,
+ 2314: 0x5A44,
+ 2315: 0x5A45,
+ 2316: 0x5A47,
+ 2317: 0x5A48,
+ 2318: 0x5A4C,
+ 2319: 0x5A50,
+ 2320: 0x5A55,
+ 2321: 0x5A5E,
+ 2322: 0x5A63,
+ 2323: 0x5A65,
+ 2324: 0x5A67,
+ 2325: 0x5A6D,
+ 2326: 0x5A77,
+ 2327: 0x5A7A,
+ 2328: 0x5A7B,
+ 2329: 0x5A7E,
+ 2330: 0x5A8B,
+ 2331: 0x5A90,
+ 2332: 0x5A93,
+ 2333: 0x5A96,
+ 2334: 0x5A99,
+ 2335: 0x5A9C,
+ 2336: 0x5A9E,
+ 2337: 0x5A9F,
+ 2338: 0x5AA0,
+ 2339: 0x5AA2,
+ 2340: 0x5AA7,
+ 2341: 0x5AAC,
+ 2342: 0x5AB1,
+ 2343: 0x5AB2,
+ 2344: 0x5AB3,
+ 2345: 0x5AB5,
+ 2346: 0x5AB8,
+ 2347: 0x5ABA,
+ 2348: 0x5ABB,
+ 2349: 0x5ABF,
+ 2350: 0x5AC4,
+ 2351: 0x5AC6,
+ 2352: 0x5AC8,
+ 2353: 0x5ACF,
+ 2354: 0x5ADA,
+ 2355: 0x5ADC,
+ 2356: 0x5AE0,
+ 2357: 0x5AE5,
+ 2358: 0x5AEA,
+ 2359: 0x5AEE,
+ 2360: 0x5AF5,
+ 2361: 0x5AF6,
+ 2362: 0x5AFD,
+ 2363: 0x5B00,
+ 2364: 0x5B01,
+ 2365: 0x5B08,
+ 2366: 0x5B17,
+ 2367: 0x5B34,
+ 2368: 0x5B19,
+ 2369: 0x5B1B,
+ 2370: 0x5B1D,
+ 2371: 0x5B21,
+ 2372: 0x5B25,
+ 2373: 0x5B2D,
+ 2374: 0x5B38,
+ 2375: 0x5B41,
+ 2376: 0x5B4B,
+ 2377: 0x5B4C,
+ 2378: 0x5B52,
+ 2379: 0x5B56,
+ 2380: 0x5B5E,
+ 2381: 0x5B68,
+ 2382: 0x5B6E,
+ 2383: 0x5B6F,
+ 2384: 0x5B7C,
+ 2385: 0x5B7D,
+ 2386: 0x5B7E,
+ 2387: 0x5B7F,
+ 2388: 0x5B81,
+ 2389: 0x5B84,
+ 2390: 0x5B86,
+ 2391: 0x5B8A,
+ 2392: 0x5B8E,
+ 2393: 0x5B90,
+ 2394: 0x5B91,
+ 2395: 0x5B93,
+ 2396: 0x5B94,
+ 2397: 0x5B96,
+ 2398: 0x5BA8,
+ 2399: 0x5BA9,
+ 2400: 0x5BAC,
+ 2401: 0x5BAD,
+ 2402: 0x5BAF,
+ 2403: 0x5BB1,
+ 2404: 0x5BB2,
+ 2405: 0x5BB7,
+ 2406: 0x5BBA,
+ 2407: 0x5BBC,
+ 2408: 0x5BC0,
+ 2409: 0x5BC1,
+ 2410: 0x5BCD,
+ 2411: 0x5BCF,
+ 2412: 0x5BD6,
+ 2413: 0x5BD7,
+ 2414: 0x5BD8,
+ 2415: 0x5BD9,
+ 2416: 0x5BDA,
+ 2417: 0x5BE0,
+ 2418: 0x5BEF,
+ 2419: 0x5BF1,
+ 2420: 0x5BF4,
+ 2421: 0x5BFD,
+ 2422: 0x5C0C,
+ 2423: 0x5C17,
+ 2424: 0x5C1E,
+ 2425: 0x5C1F,
+ 2426: 0x5C23,
+ 2427: 0x5C26,
+ 2428: 0x5C29,
+ 2429: 0x5C2B,
+ 2430: 0x5C2C,
+ 2431: 0x5C2E,
+ 2432: 0x5C30,
+ 2433: 0x5C32,
+ 2434: 0x5C35,
+ 2435: 0x5C36,
+ 2436: 0x5C59,
+ 2437: 0x5C5A,
+ 2438: 0x5C5C,
+ 2439: 0x5C62,
+ 2440: 0x5C63,
+ 2441: 0x5C67,
+ 2442: 0x5C68,
+ 2443: 0x5C69,
+ 2444: 0x5C6D,
+ 2445: 0x5C70,
+ 2446: 0x5C74,
+ 2447: 0x5C75,
+ 2448: 0x5C7A,
+ 2449: 0x5C7B,
+ 2450: 0x5C7C,
+ 2451: 0x5C7D,
+ 2452: 0x5C87,
+ 2453: 0x5C88,
+ 2454: 0x5C8A,
+ 2455: 0x5C8F,
+ 2456: 0x5C92,
+ 2457: 0x5C9D,
+ 2458: 0x5C9F,
+ 2459: 0x5CA0,
+ 2460: 0x5CA2,
+ 2461: 0x5CA3,
+ 2462: 0x5CA6,
+ 2463: 0x5CAA,
+ 2464: 0x5CB2,
+ 2465: 0x5CB4,
+ 2466: 0x5CB5,
+ 2467: 0x5CBA,
+ 2468: 0x5CC9,
+ 2469: 0x5CCB,
+ 2470: 0x5CD2,
+ 2471: 0x5CDD,
+ 2472: 0x5CD7,
+ 2473: 0x5CEE,
+ 2474: 0x5CF1,
+ 2475: 0x5CF2,
+ 2476: 0x5CF4,
+ 2477: 0x5D01,
+ 2478: 0x5D06,
+ 2479: 0x5D0D,
+ 2480: 0x5D12,
+ 2481: 0x5D2B,
+ 2482: 0x5D23,
+ 2483: 0x5D24,
+ 2484: 0x5D26,
+ 2485: 0x5D27,
+ 2486: 0x5D31,
+ 2487: 0x5D34,
+ 2488: 0x5D39,
+ 2489: 0x5D3D,
+ 2490: 0x5D3F,
+ 2491: 0x5D42,
+ 2492: 0x5D43,
+ 2493: 0x5D46,
+ 2494: 0x5D48,
+ 2495: 0x5D55,
+ 2496: 0x5D51,
+ 2497: 0x5D59,
+ 2498: 0x5D4A,
+ 2499: 0x5D5F,
+ 2500: 0x5D60,
+ 2501: 0x5D61,
+ 2502: 0x5D62,
+ 2503: 0x5D64,
+ 2504: 0x5D6A,
+ 2505: 0x5D6D,
+ 2506: 0x5D70,
+ 2507: 0x5D79,
+ 2508: 0x5D7A,
+ 2509: 0x5D7E,
+ 2510: 0x5D7F,
+ 2511: 0x5D81,
+ 2512: 0x5D83,
+ 2513: 0x5D88,
+ 2514: 0x5D8A,
+ 2515: 0x5D92,
+ 2516: 0x5D93,
+ 2517: 0x5D94,
+ 2518: 0x5D95,
+ 2519: 0x5D99,
+ 2520: 0x5D9B,
+ 2521: 0x5D9F,
+ 2522: 0x5DA0,
+ 2523: 0x5DA7,
+ 2524: 0x5DAB,
+ 2525: 0x5DB0,
+ 2526: 0x5DB4,
+ 2527: 0x5DB8,
+ 2528: 0x5DB9,
+ 2529: 0x5DC3,
+ 2530: 0x5DC7,
+ 2531: 0x5DCB,
+ 2532: 0x5DD0,
+ 2533: 0x5DCE,
+ 2534: 0x5DD8,
+ 2535: 0x5DD9,
+ 2536: 0x5DE0,
+ 2537: 0x5DE4,
+ 2538: 0x5DE9,
+ 2539: 0x5DF8,
+ 2540: 0x5DF9,
+ 2541: 0x5E00,
+ 2542: 0x5E07,
+ 2543: 0x5E0D,
+ 2544: 0x5E12,
+ 2545: 0x5E14,
+ 2546: 0x5E15,
+ 2547: 0x5E18,
+ 2548: 0x5E1F,
+ 2549: 0x5E20,
+ 2550: 0x5E2E,
+ 2551: 0x5E28,
+ 2552: 0x5E32,
+ 2553: 0x5E35,
+ 2554: 0x5E3E,
+ 2555: 0x5E4B,
+ 2556: 0x5E50,
+ 2557: 0x5E49,
+ 2558: 0x5E51,
+ 2559: 0x5E56,
+ 2560: 0x5E58,
+ 2561: 0x5E5B,
+ 2562: 0x5E5C,
+ 2563: 0x5E5E,
+ 2564: 0x5E68,
+ 2565: 0x5E6A,
+ 2566: 0x5E6B,
+ 2567: 0x5E6C,
+ 2568: 0x5E6D,
+ 2569: 0x5E6E,
+ 2570: 0x5E70,
+ 2571: 0x5E80,
+ 2572: 0x5E8B,
+ 2573: 0x5E8E,
+ 2574: 0x5EA2,
+ 2575: 0x5EA4,
+ 2576: 0x5EA5,
+ 2577: 0x5EA8,
+ 2578: 0x5EAA,
+ 2579: 0x5EAC,
+ 2580: 0x5EB1,
+ 2581: 0x5EB3,
+ 2582: 0x5EBD,
+ 2583: 0x5EBE,
+ 2584: 0x5EBF,
+ 2585: 0x5EC6,
+ 2586: 0x5ECC,
+ 2587: 0x5ECB,
+ 2588: 0x5ECE,
+ 2589: 0x5ED1,
+ 2590: 0x5ED2,
+ 2591: 0x5ED4,
+ 2592: 0x5ED5,
+ 2593: 0x5EDC,
+ 2594: 0x5EDE,
+ 2595: 0x5EE5,
+ 2596: 0x5EEB,
+ 2597: 0x5F02,
+ 2598: 0x5F06,
+ 2599: 0x5F07,
+ 2600: 0x5F08,
+ 2601: 0x5F0E,
+ 2602: 0x5F19,
+ 2603: 0x5F1C,
+ 2604: 0x5F1D,
+ 2605: 0x5F21,
+ 2606: 0x5F22,
+ 2607: 0x5F23,
+ 2608: 0x5F24,
+ 2609: 0x5F28,
+ 2610: 0x5F2B,
+ 2611: 0x5F2C,
+ 2612: 0x5F2E,
+ 2613: 0x5F30,
+ 2614: 0x5F34,
+ 2615: 0x5F36,
+ 2616: 0x5F3B,
+ 2617: 0x5F3D,
+ 2618: 0x5F3F,
+ 2619: 0x5F40,
+ 2620: 0x5F44,
+ 2621: 0x5F45,
+ 2622: 0x5F47,
+ 2623: 0x5F4D,
+ 2624: 0x5F50,
+ 2625: 0x5F54,
+ 2626: 0x5F58,
+ 2627: 0x5F5B,
+ 2628: 0x5F60,
+ 2629: 0x5F63,
+ 2630: 0x5F64,
+ 2631: 0x5F67,
+ 2632: 0x5F6F,
+ 2633: 0x5F72,
+ 2634: 0x5F74,
+ 2635: 0x5F75,
+ 2636: 0x5F78,
+ 2637: 0x5F7A,
+ 2638: 0x5F7D,
+ 2639: 0x5F7E,
+ 2640: 0x5F89,
+ 2641: 0x5F8D,
+ 2642: 0x5F8F,
+ 2643: 0x5F96,
+ 2644: 0x5F9C,
+ 2645: 0x5F9D,
+ 2646: 0x5FA2,
+ 2647: 0x5FA7,
+ 2648: 0x5FAB,
+ 2649: 0x5FA4,
+ 2650: 0x5FAC,
+ 2651: 0x5FAF,
+ 2652: 0x5FB0,
+ 2653: 0x5FB1,
+ 2654: 0x5FB8,
+ 2655: 0x5FC4,
+ 2656: 0x5FC7,
+ 2657: 0x5FC8,
+ 2658: 0x5FC9,
+ 2659: 0x5FCB,
+ 2660: 0x5FD0,
+ 2661: 0x5FD1,
+ 2662: 0x5FD2,
+ 2663: 0x5FD3,
+ 2664: 0x5FD4,
+ 2665: 0x5FDE,
+ 2666: 0x5FE1,
+ 2667: 0x5FE2,
+ 2668: 0x5FE8,
+ 2669: 0x5FE9,
+ 2670: 0x5FEA,
+ 2671: 0x5FEC,
+ 2672: 0x5FED,
+ 2673: 0x5FEE,
+ 2674: 0x5FEF,
+ 2675: 0x5FF2,
+ 2676: 0x5FF3,
+ 2677: 0x5FF6,
+ 2678: 0x5FFA,
+ 2679: 0x5FFC,
+ 2680: 0x6007,
+ 2681: 0x600A,
+ 2682: 0x600D,
+ 2683: 0x6013,
+ 2684: 0x6014,
+ 2685: 0x6017,
+ 2686: 0x6018,
+ 2687: 0x601A,
+ 2688: 0x601F,
+ 2689: 0x6024,
+ 2690: 0x602D,
+ 2691: 0x6033,
+ 2692: 0x6035,
+ 2693: 0x6040,
+ 2694: 0x6047,
+ 2695: 0x6048,
+ 2696: 0x6049,
+ 2697: 0x604C,
+ 2698: 0x6051,
+ 2699: 0x6054,
+ 2700: 0x6056,
+ 2701: 0x6057,
+ 2702: 0x605D,
+ 2703: 0x6061,
+ 2704: 0x6067,
+ 2705: 0x6071,
+ 2706: 0x607E,
+ 2707: 0x607F,
+ 2708: 0x6082,
+ 2709: 0x6086,
+ 2710: 0x6088,
+ 2711: 0x608A,
+ 2712: 0x608E,
+ 2713: 0x6091,
+ 2714: 0x6093,
+ 2715: 0x6095,
+ 2716: 0x6098,
+ 2717: 0x609D,
+ 2718: 0x609E,
+ 2719: 0x60A2,
+ 2720: 0x60A4,
+ 2721: 0x60A5,
+ 2722: 0x60A8,
+ 2723: 0x60B0,
+ 2724: 0x60B1,
+ 2725: 0x60B7,
+ 2726: 0x60BB,
+ 2727: 0x60BE,
+ 2728: 0x60C2,
+ 2729: 0x60C4,
+ 2730: 0x60C8,
+ 2731: 0x60C9,
+ 2732: 0x60CA,
+ 2733: 0x60CB,
+ 2734: 0x60CE,
+ 2735: 0x60CF,
+ 2736: 0x60D4,
+ 2737: 0x60D5,
+ 2738: 0x60D9,
+ 2739: 0x60DB,
+ 2740: 0x60DD,
+ 2741: 0x60DE,
+ 2742: 0x60E2,
+ 2743: 0x60E5,
+ 2744: 0x60F2,
+ 2745: 0x60F5,
+ 2746: 0x60F8,
+ 2747: 0x60FC,
+ 2748: 0x60FD,
+ 2749: 0x6102,
+ 2750: 0x6107,
+ 2751: 0x610A,
+ 2752: 0x610C,
+ 2753: 0x6110,
+ 2754: 0x6111,
+ 2755: 0x6112,
+ 2756: 0x6113,
+ 2757: 0x6114,
+ 2758: 0x6116,
+ 2759: 0x6117,
+ 2760: 0x6119,
+ 2761: 0x611C,
+ 2762: 0x611E,
+ 2763: 0x6122,
+ 2764: 0x612A,
+ 2765: 0x612B,
+ 2766: 0x6130,
+ 2767: 0x6131,
+ 2768: 0x6135,
+ 2769: 0x6136,
+ 2770: 0x6137,
+ 2771: 0x6139,
+ 2772: 0x6141,
+ 2773: 0x6145,
+ 2774: 0x6146,
+ 2775: 0x6149,
+ 2776: 0x615E,
+ 2777: 0x6160,
+ 2778: 0x616C,
+ 2779: 0x6172,
+ 2780: 0x6178,
+ 2781: 0x617B,
+ 2782: 0x617C,
+ 2783: 0x617F,
+ 2784: 0x6180,
+ 2785: 0x6181,
+ 2786: 0x6183,
+ 2787: 0x6184,
+ 2788: 0x618B,
+ 2789: 0x618D,
+ 2790: 0x6192,
+ 2791: 0x6193,
+ 2792: 0x6197,
+ 2793: 0x6198,
+ 2794: 0x619C,
+ 2795: 0x619D,
+ 2796: 0x619F,
+ 2797: 0x61A0,
+ 2798: 0x61A5,
+ 2799: 0x61A8,
+ 2800: 0x61AA,
+ 2801: 0x61AD,
+ 2802: 0x61B8,
+ 2803: 0x61B9,
+ 2804: 0x61BC,
+ 2805: 0x61C0,
+ 2806: 0x61C1,
+ 2807: 0x61C2,
+ 2808: 0x61CE,
+ 2809: 0x61CF,
+ 2810: 0x61D5,
+ 2811: 0x61DC,
+ 2812: 0x61DD,
+ 2813: 0x61DE,
+ 2814: 0x61DF,
+ 2815: 0x61E1,
+ 2816: 0x61E2,
+ 2817: 0x61E7,
+ 2818: 0x61E9,
+ 2819: 0x61E5,
+ 2820: 0x61EC,
+ 2821: 0x61ED,
+ 2822: 0x61EF,
+ 2823: 0x6201,
+ 2824: 0x6203,
+ 2825: 0x6204,
+ 2826: 0x6207,
+ 2827: 0x6213,
+ 2828: 0x6215,
+ 2829: 0x621C,
+ 2830: 0x6220,
+ 2831: 0x6222,
+ 2832: 0x6223,
+ 2833: 0x6227,
+ 2834: 0x6229,
+ 2835: 0x622B,
+ 2836: 0x6239,
+ 2837: 0x623D,
+ 2838: 0x6242,
+ 2839: 0x6243,
+ 2840: 0x6244,
+ 2841: 0x6246,
+ 2842: 0x624C,
+ 2843: 0x6250,
+ 2844: 0x6251,
+ 2845: 0x6252,
+ 2846: 0x6254,
+ 2847: 0x6256,
+ 2848: 0x625A,
+ 2849: 0x625C,
+ 2850: 0x6264,
+ 2851: 0x626D,
+ 2852: 0x626F,
+ 2853: 0x6273,
+ 2854: 0x627A,
+ 2855: 0x627D,
+ 2856: 0x628D,
+ 2857: 0x628E,
+ 2858: 0x628F,
+ 2859: 0x6290,
+ 2860: 0x62A6,
+ 2861: 0x62A8,
+ 2862: 0x62B3,
+ 2863: 0x62B6,
+ 2864: 0x62B7,
+ 2865: 0x62BA,
+ 2866: 0x62BE,
+ 2867: 0x62BF,
+ 2868: 0x62C4,
+ 2869: 0x62CE,
+ 2870: 0x62D5,
+ 2871: 0x62D6,
+ 2872: 0x62DA,
+ 2873: 0x62EA,
+ 2874: 0x62F2,
+ 2875: 0x62F4,
+ 2876: 0x62FC,
+ 2877: 0x62FD,
+ 2878: 0x6303,
+ 2879: 0x6304,
+ 2880: 0x630A,
+ 2881: 0x630B,
+ 2882: 0x630D,
+ 2883: 0x6310,
+ 2884: 0x6313,
+ 2885: 0x6316,
+ 2886: 0x6318,
+ 2887: 0x6329,
+ 2888: 0x632A,
+ 2889: 0x632D,
+ 2890: 0x6335,
+ 2891: 0x6336,
+ 2892: 0x6339,
+ 2893: 0x633C,
+ 2894: 0x6341,
+ 2895: 0x6342,
+ 2896: 0x6343,
+ 2897: 0x6344,
+ 2898: 0x6346,
+ 2899: 0x634A,
+ 2900: 0x634B,
+ 2901: 0x634E,
+ 2902: 0x6352,
+ 2903: 0x6353,
+ 2904: 0x6354,
+ 2905: 0x6358,
+ 2906: 0x635B,
+ 2907: 0x6365,
+ 2908: 0x6366,
+ 2909: 0x636C,
+ 2910: 0x636D,
+ 2911: 0x6371,
+ 2912: 0x6374,
+ 2913: 0x6375,
+ 2914: 0x6378,
+ 2915: 0x637C,
+ 2916: 0x637D,
+ 2917: 0x637F,
+ 2918: 0x6382,
+ 2919: 0x6384,
+ 2920: 0x6387,
+ 2921: 0x638A,
+ 2922: 0x6390,
+ 2923: 0x6394,
+ 2924: 0x6395,
+ 2925: 0x6399,
+ 2926: 0x639A,
+ 2927: 0x639E,
+ 2928: 0x63A4,
+ 2929: 0x63A6,
+ 2930: 0x63AD,
+ 2931: 0x63AE,
+ 2932: 0x63AF,
+ 2933: 0x63BD,
+ 2934: 0x63C1,
+ 2935: 0x63C5,
+ 2936: 0x63C8,
+ 2937: 0x63CE,
+ 2938: 0x63D1,
+ 2939: 0x63D3,
+ 2940: 0x63D4,
+ 2941: 0x63D5,
+ 2942: 0x63DC,
+ 2943: 0x63E0,
+ 2944: 0x63E5,
+ 2945: 0x63EA,
+ 2946: 0x63EC,
+ 2947: 0x63F2,
+ 2948: 0x63F3,
+ 2949: 0x63F5,
+ 2950: 0x63F8,
+ 2951: 0x63F9,
+ 2952: 0x6409,
+ 2953: 0x640A,
+ 2954: 0x6410,
+ 2955: 0x6412,
+ 2956: 0x6414,
+ 2957: 0x6418,
+ 2958: 0x641E,
+ 2959: 0x6420,
+ 2960: 0x6422,
+ 2961: 0x6424,
+ 2962: 0x6425,
+ 2963: 0x6429,
+ 2964: 0x642A,
+ 2965: 0x642F,
+ 2966: 0x6430,
+ 2967: 0x6435,
+ 2968: 0x643D,
+ 2969: 0x643F,
+ 2970: 0x644B,
+ 2971: 0x644F,
+ 2972: 0x6451,
+ 2973: 0x6452,
+ 2974: 0x6453,
+ 2975: 0x6454,
+ 2976: 0x645A,
+ 2977: 0x645B,
+ 2978: 0x645C,
+ 2979: 0x645D,
+ 2980: 0x645F,
+ 2981: 0x6460,
+ 2982: 0x6461,
+ 2983: 0x6463,
+ 2984: 0x646D,
+ 2985: 0x6473,
+ 2986: 0x6474,
+ 2987: 0x647B,
+ 2988: 0x647D,
+ 2989: 0x6485,
+ 2990: 0x6487,
+ 2991: 0x648F,
+ 2992: 0x6490,
+ 2993: 0x6491,
+ 2994: 0x6498,
+ 2995: 0x6499,
+ 2996: 0x649B,
+ 2997: 0x649D,
+ 2998: 0x649F,
+ 2999: 0x64A1,
+ 3000: 0x64A3,
+ 3001: 0x64A6,
+ 3002: 0x64A8,
+ 3003: 0x64AC,
+ 3004: 0x64B3,
+ 3005: 0x64BD,
+ 3006: 0x64BE,
+ 3007: 0x64BF,
+ 3008: 0x64C4,
+ 3009: 0x64C9,
+ 3010: 0x64CA,
+ 3011: 0x64CB,
+ 3012: 0x64CC,
+ 3013: 0x64CE,
+ 3014: 0x64D0,
+ 3015: 0x64D1,
+ 3016: 0x64D5,
+ 3017: 0x64D7,
+ 3018: 0x64E4,
+ 3019: 0x64E5,
+ 3020: 0x64E9,
+ 3021: 0x64EA,
+ 3022: 0x64ED,
+ 3023: 0x64F0,
+ 3024: 0x64F5,
+ 3025: 0x64F7,
+ 3026: 0x64FB,
+ 3027: 0x64FF,
+ 3028: 0x6501,
+ 3029: 0x6504,
+ 3030: 0x6508,
+ 3031: 0x6509,
+ 3032: 0x650A,
+ 3033: 0x650F,
+ 3034: 0x6513,
+ 3035: 0x6514,
+ 3036: 0x6516,
+ 3037: 0x6519,
+ 3038: 0x651B,
+ 3039: 0x651E,
+ 3040: 0x651F,
+ 3041: 0x6522,
+ 3042: 0x6526,
+ 3043: 0x6529,
+ 3044: 0x652E,
+ 3045: 0x6531,
+ 3046: 0x653A,
+ 3047: 0x653C,
+ 3048: 0x653D,
+ 3049: 0x6543,
+ 3050: 0x6547,
+ 3051: 0x6549,
+ 3052: 0x6550,
+ 3053: 0x6552,
+ 3054: 0x6554,
+ 3055: 0x655F,
+ 3056: 0x6560,
+ 3057: 0x6567,
+ 3058: 0x656B,
+ 3059: 0x657A,
+ 3060: 0x657D,
+ 3061: 0x6581,
+ 3062: 0x6585,
+ 3063: 0x658A,
+ 3064: 0x6592,
+ 3065: 0x6595,
+ 3066: 0x6598,
+ 3067: 0x659D,
+ 3068: 0x65A0,
+ 3069: 0x65A3,
+ 3070: 0x65A6,
+ 3071: 0x65AE,
+ 3072: 0x65B2,
+ 3073: 0x65B3,
+ 3074: 0x65B4,
+ 3075: 0x65BF,
+ 3076: 0x65C2,
+ 3077: 0x65C8,
+ 3078: 0x65C9,
+ 3079: 0x65CE,
+ 3080: 0x65D0,
+ 3081: 0x65D4,
+ 3082: 0x65D6,
+ 3083: 0x65D8,
+ 3084: 0x65DF,
+ 3085: 0x65F0,
+ 3086: 0x65F2,
+ 3087: 0x65F4,
+ 3088: 0x65F5,
+ 3089: 0x65F9,
+ 3090: 0x65FE,
+ 3091: 0x65FF,
+ 3092: 0x6600,
+ 3093: 0x6604,
+ 3094: 0x6608,
+ 3095: 0x6609,
+ 3096: 0x660D,
+ 3097: 0x6611,
+ 3098: 0x6612,
+ 3099: 0x6615,
+ 3100: 0x6616,
+ 3101: 0x661D,
+ 3102: 0x661E,
+ 3103: 0x6621,
+ 3104: 0x6622,
+ 3105: 0x6623,
+ 3106: 0x6624,
+ 3107: 0x6626,
+ 3108: 0x6629,
+ 3109: 0x662A,
+ 3110: 0x662B,
+ 3111: 0x662C,
+ 3112: 0x662E,
+ 3113: 0x6630,
+ 3114: 0x6631,
+ 3115: 0x6633,
+ 3116: 0x6639,
+ 3117: 0x6637,
+ 3118: 0x6640,
+ 3119: 0x6645,
+ 3120: 0x6646,
+ 3121: 0x664A,
+ 3122: 0x664C,
+ 3123: 0x6651,
+ 3124: 0x664E,
+ 3125: 0x6657,
+ 3126: 0x6658,
+ 3127: 0x6659,
+ 3128: 0x665B,
+ 3129: 0x665C,
+ 3130: 0x6660,
+ 3131: 0x6661,
+ 3132: 0x66FB,
+ 3133: 0x666A,
+ 3134: 0x666B,
+ 3135: 0x666C,
+ 3136: 0x667E,
+ 3137: 0x6673,
+ 3138: 0x6675,
+ 3139: 0x667F,
+ 3140: 0x6677,
+ 3141: 0x6678,
+ 3142: 0x6679,
+ 3143: 0x667B,
+ 3144: 0x6680,
+ 3145: 0x667C,
+ 3146: 0x668B,
+ 3147: 0x668C,
+ 3148: 0x668D,
+ 3149: 0x6690,
+ 3150: 0x6692,
+ 3151: 0x6699,
+ 3152: 0x669A,
+ 3153: 0x669B,
+ 3154: 0x669C,
+ 3155: 0x669F,
+ 3156: 0x66A0,
+ 3157: 0x66A4,
+ 3158: 0x66AD,
+ 3159: 0x66B1,
+ 3160: 0x66B2,
+ 3161: 0x66B5,
+ 3162: 0x66BB,
+ 3163: 0x66BF,
+ 3164: 0x66C0,
+ 3165: 0x66C2,
+ 3166: 0x66C3,
+ 3167: 0x66C8,
+ 3168: 0x66CC,
+ 3169: 0x66CE,
+ 3170: 0x66CF,
+ 3171: 0x66D4,
+ 3172: 0x66DB,
+ 3173: 0x66DF,
+ 3174: 0x66E8,
+ 3175: 0x66EB,
+ 3176: 0x66EC,
+ 3177: 0x66EE,
+ 3178: 0x66FA,
+ 3179: 0x6705,
+ 3180: 0x6707,
+ 3181: 0x670E,
+ 3182: 0x6713,
+ 3183: 0x6719,
+ 3184: 0x671C,
+ 3185: 0x6720,
+ 3186: 0x6722,
+ 3187: 0x6733,
+ 3188: 0x673E,
+ 3189: 0x6745,
+ 3190: 0x6747,
+ 3191: 0x6748,
+ 3192: 0x674C,
+ 3193: 0x6754,
+ 3194: 0x6755,
+ 3195: 0x675D,
+ 3196: 0x6766,
+ 3197: 0x676C,
+ 3198: 0x676E,
+ 3199: 0x6774,
+ 3200: 0x6776,
+ 3201: 0x677B,
+ 3202: 0x6781,
+ 3203: 0x6784,
+ 3204: 0x678E,
+ 3205: 0x678F,
+ 3206: 0x6791,
+ 3207: 0x6793,
+ 3208: 0x6796,
+ 3209: 0x6798,
+ 3210: 0x6799,
+ 3211: 0x679B,
+ 3212: 0x67B0,
+ 3213: 0x67B1,
+ 3214: 0x67B2,
+ 3215: 0x67B5,
+ 3216: 0x67BB,
+ 3217: 0x67BC,
+ 3218: 0x67BD,
+ 3219: 0x67F9,
+ 3220: 0x67C0,
+ 3221: 0x67C2,
+ 3222: 0x67C3,
+ 3223: 0x67C5,
+ 3224: 0x67C8,
+ 3225: 0x67C9,
+ 3226: 0x67D2,
+ 3227: 0x67D7,
+ 3228: 0x67D9,
+ 3229: 0x67DC,
+ 3230: 0x67E1,
+ 3231: 0x67E6,
+ 3232: 0x67F0,
+ 3233: 0x67F2,
+ 3234: 0x67F6,
+ 3235: 0x67F7,
+ 3236: 0x6852,
+ 3237: 0x6814,
+ 3238: 0x6819,
+ 3239: 0x681D,
+ 3240: 0x681F,
+ 3241: 0x6828,
+ 3242: 0x6827,
+ 3243: 0x682C,
+ 3244: 0x682D,
+ 3245: 0x682F,
+ 3246: 0x6830,
+ 3247: 0x6831,
+ 3248: 0x6833,
+ 3249: 0x683B,
+ 3250: 0x683F,
+ 3251: 0x6844,
+ 3252: 0x6845,
+ 3253: 0x684A,
+ 3254: 0x684C,
+ 3255: 0x6855,
+ 3256: 0x6857,
+ 3257: 0x6858,
+ 3258: 0x685B,
+ 3259: 0x686B,
+ 3260: 0x686E,
+ 3261: 0x686F,
+ 3262: 0x6870,
+ 3263: 0x6871,
+ 3264: 0x6872,
+ 3265: 0x6875,
+ 3266: 0x6879,
+ 3267: 0x687A,
+ 3268: 0x687B,
+ 3269: 0x687C,
+ 3270: 0x6882,
+ 3271: 0x6884,
+ 3272: 0x6886,
+ 3273: 0x6888,
+ 3274: 0x6896,
+ 3275: 0x6898,
+ 3276: 0x689A,
+ 3277: 0x689C,
+ 3278: 0x68A1,
+ 3279: 0x68A3,
+ 3280: 0x68A5,
+ 3281: 0x68A9,
+ 3282: 0x68AA,
+ 3283: 0x68AE,
+ 3284: 0x68B2,
+ 3285: 0x68BB,
+ 3286: 0x68C5,
+ 3287: 0x68C8,
+ 3288: 0x68CC,
+ 3289: 0x68CF,
+ 3290: 0x68D0,
+ 3291: 0x68D1,
+ 3292: 0x68D3,
+ 3293: 0x68D6,
+ 3294: 0x68D9,
+ 3295: 0x68DC,
+ 3296: 0x68DD,
+ 3297: 0x68E5,
+ 3298: 0x68E8,
+ 3299: 0x68EA,
+ 3300: 0x68EB,
+ 3301: 0x68EC,
+ 3302: 0x68ED,
+ 3303: 0x68F0,
+ 3304: 0x68F1,
+ 3305: 0x68F5,
+ 3306: 0x68F6,
+ 3307: 0x68FB,
+ 3308: 0x68FC,
+ 3309: 0x68FD,
+ 3310: 0x6906,
+ 3311: 0x6909,
+ 3312: 0x690A,
+ 3313: 0x6910,
+ 3314: 0x6911,
+ 3315: 0x6913,
+ 3316: 0x6916,
+ 3317: 0x6917,
+ 3318: 0x6931,
+ 3319: 0x6933,
+ 3320: 0x6935,
+ 3321: 0x6938,
+ 3322: 0x693B,
+ 3323: 0x6942,
+ 3324: 0x6945,
+ 3325: 0x6949,
+ 3326: 0x694E,
+ 3327: 0x6957,
+ 3328: 0x695B,
+ 3329: 0x6963,
+ 3330: 0x6964,
+ 3331: 0x6965,
+ 3332: 0x6966,
+ 3333: 0x6968,
+ 3334: 0x6969,
+ 3335: 0x696C,
+ 3336: 0x6970,
+ 3337: 0x6971,
+ 3338: 0x6972,
+ 3339: 0x697A,
+ 3340: 0x697B,
+ 3341: 0x697F,
+ 3342: 0x6980,
+ 3343: 0x698D,
+ 3344: 0x6992,
+ 3345: 0x6996,
+ 3346: 0x6998,
+ 3347: 0x69A1,
+ 3348: 0x69A5,
+ 3349: 0x69A6,
+ 3350: 0x69A8,
+ 3351: 0x69AB,
+ 3352: 0x69AD,
+ 3353: 0x69AF,
+ 3354: 0x69B7,
+ 3355: 0x69B8,
+ 3356: 0x69BA,
+ 3357: 0x69BC,
+ 3358: 0x69C5,
+ 3359: 0x69C8,
+ 3360: 0x69D1,
+ 3361: 0x69D6,
+ 3362: 0x69D7,
+ 3363: 0x69E2,
+ 3364: 0x69E5,
+ 3365: 0x69EE,
+ 3366: 0x69EF,
+ 3367: 0x69F1,
+ 3368: 0x69F3,
+ 3369: 0x69F5,
+ 3370: 0x69FE,
+ 3371: 0x6A00,
+ 3372: 0x6A01,
+ 3373: 0x6A03,
+ 3374: 0x6A0F,
+ 3375: 0x6A11,
+ 3376: 0x6A15,
+ 3377: 0x6A1A,
+ 3378: 0x6A1D,
+ 3379: 0x6A20,
+ 3380: 0x6A24,
+ 3381: 0x6A28,
+ 3382: 0x6A30,
+ 3383: 0x6A32,
+ 3384: 0x6A34,
+ 3385: 0x6A37,
+ 3386: 0x6A3B,
+ 3387: 0x6A3E,
+ 3388: 0x6A3F,
+ 3389: 0x6A45,
+ 3390: 0x6A46,
+ 3391: 0x6A49,
+ 3392: 0x6A4A,
+ 3393: 0x6A4E,
+ 3394: 0x6A50,
+ 3395: 0x6A51,
+ 3396: 0x6A52,
+ 3397: 0x6A55,
+ 3398: 0x6A56,
+ 3399: 0x6A5B,
+ 3400: 0x6A64,
+ 3401: 0x6A67,
+ 3402: 0x6A6A,
+ 3403: 0x6A71,
+ 3404: 0x6A73,
+ 3405: 0x6A7E,
+ 3406: 0x6A81,
+ 3407: 0x6A83,
+ 3408: 0x6A86,
+ 3409: 0x6A87,
+ 3410: 0x6A89,
+ 3411: 0x6A8B,
+ 3412: 0x6A91,
+ 3413: 0x6A9B,
+ 3414: 0x6A9D,
+ 3415: 0x6A9E,
+ 3416: 0x6A9F,
+ 3417: 0x6AA5,
+ 3418: 0x6AAB,
+ 3419: 0x6AAF,
+ 3420: 0x6AB0,
+ 3421: 0x6AB1,
+ 3422: 0x6AB4,
+ 3423: 0x6ABD,
+ 3424: 0x6ABE,
+ 3425: 0x6ABF,
+ 3426: 0x6AC6,
+ 3427: 0x6AC9,
+ 3428: 0x6AC8,
+ 3429: 0x6ACC,
+ 3430: 0x6AD0,
+ 3431: 0x6AD4,
+ 3432: 0x6AD5,
+ 3433: 0x6AD6,
+ 3434: 0x6ADC,
+ 3435: 0x6ADD,
+ 3436: 0x6AE4,
+ 3437: 0x6AE7,
+ 3438: 0x6AEC,
+ 3439: 0x6AF0,
+ 3440: 0x6AF1,
+ 3441: 0x6AF2,
+ 3442: 0x6AFC,
+ 3443: 0x6AFD,
+ 3444: 0x6B02,
+ 3445: 0x6B03,
+ 3446: 0x6B06,
+ 3447: 0x6B07,
+ 3448: 0x6B09,
+ 3449: 0x6B0F,
+ 3450: 0x6B10,
+ 3451: 0x6B11,
+ 3452: 0x6B17,
+ 3453: 0x6B1B,
+ 3454: 0x6B1E,
+ 3455: 0x6B24,
+ 3456: 0x6B28,
+ 3457: 0x6B2B,
+ 3458: 0x6B2C,
+ 3459: 0x6B2F,
+ 3460: 0x6B35,
+ 3461: 0x6B36,
+ 3462: 0x6B3B,
+ 3463: 0x6B3F,
+ 3464: 0x6B46,
+ 3465: 0x6B4A,
+ 3466: 0x6B4D,
+ 3467: 0x6B52,
+ 3468: 0x6B56,
+ 3469: 0x6B58,
+ 3470: 0x6B5D,
+ 3471: 0x6B60,
+ 3472: 0x6B67,
+ 3473: 0x6B6B,
+ 3474: 0x6B6E,
+ 3475: 0x6B70,
+ 3476: 0x6B75,
+ 3477: 0x6B7D,
+ 3478: 0x6B7E,
+ 3479: 0x6B82,
+ 3480: 0x6B85,
+ 3481: 0x6B97,
+ 3482: 0x6B9B,
+ 3483: 0x6B9F,
+ 3484: 0x6BA0,
+ 3485: 0x6BA2,
+ 3486: 0x6BA3,
+ 3487: 0x6BA8,
+ 3488: 0x6BA9,
+ 3489: 0x6BAC,
+ 3490: 0x6BAD,
+ 3491: 0x6BAE,
+ 3492: 0x6BB0,
+ 3493: 0x6BB8,
+ 3494: 0x6BB9,
+ 3495: 0x6BBD,
+ 3496: 0x6BBE,
+ 3497: 0x6BC3,
+ 3498: 0x6BC4,
+ 3499: 0x6BC9,
+ 3500: 0x6BCC,
+ 3501: 0x6BD6,
+ 3502: 0x6BDA,
+ 3503: 0x6BE1,
+ 3504: 0x6BE3,
+ 3505: 0x6BE6,
+ 3506: 0x6BE7,
+ 3507: 0x6BEE,
+ 3508: 0x6BF1,
+ 3509: 0x6BF7,
+ 3510: 0x6BF9,
+ 3511: 0x6BFF,
+ 3512: 0x6C02,
+ 3513: 0x6C04,
+ 3514: 0x6C05,
+ 3515: 0x6C09,
+ 3516: 0x6C0D,
+ 3517: 0x6C0E,
+ 3518: 0x6C10,
+ 3519: 0x6C12,
+ 3520: 0x6C19,
+ 3521: 0x6C1F,
+ 3522: 0x6C26,
+ 3523: 0x6C27,
+ 3524: 0x6C28,
+ 3525: 0x6C2C,
+ 3526: 0x6C2E,
+ 3527: 0x6C33,
+ 3528: 0x6C35,
+ 3529: 0x6C36,
+ 3530: 0x6C3A,
+ 3531: 0x6C3B,
+ 3532: 0x6C3F,
+ 3533: 0x6C4A,
+ 3534: 0x6C4B,
+ 3535: 0x6C4D,
+ 3536: 0x6C4F,
+ 3537: 0x6C52,
+ 3538: 0x6C54,
+ 3539: 0x6C59,
+ 3540: 0x6C5B,
+ 3541: 0x6C5C,
+ 3542: 0x6C6B,
+ 3543: 0x6C6D,
+ 3544: 0x6C6F,
+ 3545: 0x6C74,
+ 3546: 0x6C76,
+ 3547: 0x6C78,
+ 3548: 0x6C79,
+ 3549: 0x6C7B,
+ 3550: 0x6C85,
+ 3551: 0x6C86,
+ 3552: 0x6C87,
+ 3553: 0x6C89,
+ 3554: 0x6C94,
+ 3555: 0x6C95,
+ 3556: 0x6C97,
+ 3557: 0x6C98,
+ 3558: 0x6C9C,
+ 3559: 0x6C9F,
+ 3560: 0x6CB0,
+ 3561: 0x6CB2,
+ 3562: 0x6CB4,
+ 3563: 0x6CC2,
+ 3564: 0x6CC6,
+ 3565: 0x6CCD,
+ 3566: 0x6CCF,
+ 3567: 0x6CD0,
+ 3568: 0x6CD1,
+ 3569: 0x6CD2,
+ 3570: 0x6CD4,
+ 3571: 0x6CD6,
+ 3572: 0x6CDA,
+ 3573: 0x6CDC,
+ 3574: 0x6CE0,
+ 3575: 0x6CE7,
+ 3576: 0x6CE9,
+ 3577: 0x6CEB,
+ 3578: 0x6CEC,
+ 3579: 0x6CEE,
+ 3580: 0x6CF2,
+ 3581: 0x6CF4,
+ 3582: 0x6D04,
+ 3583: 0x6D07,
+ 3584: 0x6D0A,
+ 3585: 0x6D0E,
+ 3586: 0x6D0F,
+ 3587: 0x6D11,
+ 3588: 0x6D13,
+ 3589: 0x6D1A,
+ 3590: 0x6D26,
+ 3591: 0x6D27,
+ 3592: 0x6D28,
+ 3593: 0x6C67,
+ 3594: 0x6D2E,
+ 3595: 0x6D2F,
+ 3596: 0x6D31,
+ 3597: 0x6D39,
+ 3598: 0x6D3C,
+ 3599: 0x6D3F,
+ 3600: 0x6D57,
+ 3601: 0x6D5E,
+ 3602: 0x6D5F,
+ 3603: 0x6D61,
+ 3604: 0x6D65,
+ 3605: 0x6D67,
+ 3606: 0x6D6F,
+ 3607: 0x6D70,
+ 3608: 0x6D7C,
+ 3609: 0x6D82,
+ 3610: 0x6D87,
+ 3611: 0x6D91,
+ 3612: 0x6D92,
+ 3613: 0x6D94,
+ 3614: 0x6D96,
+ 3615: 0x6D97,
+ 3616: 0x6D98,
+ 3617: 0x6DAA,
+ 3618: 0x6DAC,
+ 3619: 0x6DB4,
+ 3620: 0x6DB7,
+ 3621: 0x6DB9,
+ 3622: 0x6DBD,
+ 3623: 0x6DBF,
+ 3624: 0x6DC4,
+ 3625: 0x6DC8,
+ 3626: 0x6DCA,
+ 3627: 0x6DCE,
+ 3628: 0x6DCF,
+ 3629: 0x6DD6,
+ 3630: 0x6DDB,
+ 3631: 0x6DDD,
+ 3632: 0x6DDF,
+ 3633: 0x6DE0,
+ 3634: 0x6DE2,
+ 3635: 0x6DE5,
+ 3636: 0x6DE9,
+ 3637: 0x6DEF,
+ 3638: 0x6DF0,
+ 3639: 0x6DF4,
+ 3640: 0x6DF6,
+ 3641: 0x6DFC,
+ 3642: 0x6E00,
+ 3643: 0x6E04,
+ 3644: 0x6E1E,
+ 3645: 0x6E22,
+ 3646: 0x6E27,
+ 3647: 0x6E32,
+ 3648: 0x6E36,
+ 3649: 0x6E39,
+ 3650: 0x6E3B,
+ 3651: 0x6E3C,
+ 3652: 0x6E44,
+ 3653: 0x6E45,
+ 3654: 0x6E48,
+ 3655: 0x6E49,
+ 3656: 0x6E4B,
+ 3657: 0x6E4F,
+ 3658: 0x6E51,
+ 3659: 0x6E52,
+ 3660: 0x6E53,
+ 3661: 0x6E54,
+ 3662: 0x6E57,
+ 3663: 0x6E5C,
+ 3664: 0x6E5D,
+ 3665: 0x6E5E,
+ 3666: 0x6E62,
+ 3667: 0x6E63,
+ 3668: 0x6E68,
+ 3669: 0x6E73,
+ 3670: 0x6E7B,
+ 3671: 0x6E7D,
+ 3672: 0x6E8D,
+ 3673: 0x6E93,
+ 3674: 0x6E99,
+ 3675: 0x6EA0,
+ 3676: 0x6EA7,
+ 3677: 0x6EAD,
+ 3678: 0x6EAE,
+ 3679: 0x6EB1,
+ 3680: 0x6EB3,
+ 3681: 0x6EBB,
+ 3682: 0x6EBF,
+ 3683: 0x6EC0,
+ 3684: 0x6EC1,
+ 3685: 0x6EC3,
+ 3686: 0x6EC7,
+ 3687: 0x6EC8,
+ 3688: 0x6ECA,
+ 3689: 0x6ECD,
+ 3690: 0x6ECE,
+ 3691: 0x6ECF,
+ 3692: 0x6EEB,
+ 3693: 0x6EED,
+ 3694: 0x6EEE,
+ 3695: 0x6EF9,
+ 3696: 0x6EFB,
+ 3697: 0x6EFD,
+ 3698: 0x6F04,
+ 3699: 0x6F08,
+ 3700: 0x6F0A,
+ 3701: 0x6F0C,
+ 3702: 0x6F0D,
+ 3703: 0x6F16,
+ 3704: 0x6F18,
+ 3705: 0x6F1A,
+ 3706: 0x6F1B,
+ 3707: 0x6F26,
+ 3708: 0x6F29,
+ 3709: 0x6F2A,
+ 3710: 0x6F2F,
+ 3711: 0x6F30,
+ 3712: 0x6F33,
+ 3713: 0x6F36,
+ 3714: 0x6F3B,
+ 3715: 0x6F3C,
+ 3716: 0x6F2D,
+ 3717: 0x6F4F,
+ 3718: 0x6F51,
+ 3719: 0x6F52,
+ 3720: 0x6F53,
+ 3721: 0x6F57,
+ 3722: 0x6F59,
+ 3723: 0x6F5A,
+ 3724: 0x6F5D,
+ 3725: 0x6F5E,
+ 3726: 0x6F61,
+ 3727: 0x6F62,
+ 3728: 0x6F68,
+ 3729: 0x6F6C,
+ 3730: 0x6F7D,
+ 3731: 0x6F7E,
+ 3732: 0x6F83,
+ 3733: 0x6F87,
+ 3734: 0x6F88,
+ 3735: 0x6F8B,
+ 3736: 0x6F8C,
+ 3737: 0x6F8D,
+ 3738: 0x6F90,
+ 3739: 0x6F92,
+ 3740: 0x6F93,
+ 3741: 0x6F94,
+ 3742: 0x6F96,
+ 3743: 0x6F9A,
+ 3744: 0x6F9F,
+ 3745: 0x6FA0,
+ 3746: 0x6FA5,
+ 3747: 0x6FA6,
+ 3748: 0x6FA7,
+ 3749: 0x6FA8,
+ 3750: 0x6FAE,
+ 3751: 0x6FAF,
+ 3752: 0x6FB0,
+ 3753: 0x6FB5,
+ 3754: 0x6FB6,
+ 3755: 0x6FBC,
+ 3756: 0x6FC5,
+ 3757: 0x6FC7,
+ 3758: 0x6FC8,
+ 3759: 0x6FCA,
+ 3760: 0x6FDA,
+ 3761: 0x6FDE,
+ 3762: 0x6FE8,
+ 3763: 0x6FE9,
+ 3764: 0x6FF0,
+ 3765: 0x6FF5,
+ 3766: 0x6FF9,
+ 3767: 0x6FFC,
+ 3768: 0x6FFD,
+ 3769: 0x7000,
+ 3770: 0x7005,
+ 3771: 0x7006,
+ 3772: 0x7007,
+ 3773: 0x700D,
+ 3774: 0x7017,
+ 3775: 0x7020,
+ 3776: 0x7023,
+ 3777: 0x702F,
+ 3778: 0x7034,
+ 3779: 0x7037,
+ 3780: 0x7039,
+ 3781: 0x703C,
+ 3782: 0x7043,
+ 3783: 0x7044,
+ 3784: 0x7048,
+ 3785: 0x7049,
+ 3786: 0x704A,
+ 3787: 0x704B,
+ 3788: 0x7054,
+ 3789: 0x7055,
+ 3790: 0x705D,
+ 3791: 0x705E,
+ 3792: 0x704E,
+ 3793: 0x7064,
+ 3794: 0x7065,
+ 3795: 0x706C,
+ 3796: 0x706E,
+ 3797: 0x7075,
+ 3798: 0x7076,
+ 3799: 0x707E,
+ 3800: 0x7081,
+ 3801: 0x7085,
+ 3802: 0x7086,
+ 3803: 0x7094,
+ 3804: 0x7095,
+ 3805: 0x7096,
+ 3806: 0x7097,
+ 3807: 0x7098,
+ 3808: 0x709B,
+ 3809: 0x70A4,
+ 3810: 0x70AB,
+ 3811: 0x70B0,
+ 3812: 0x70B1,
+ 3813: 0x70B4,
+ 3814: 0x70B7,
+ 3815: 0x70CA,
+ 3816: 0x70D1,
+ 3817: 0x70D3,
+ 3818: 0x70D4,
+ 3819: 0x70D5,
+ 3820: 0x70D6,
+ 3821: 0x70D8,
+ 3822: 0x70DC,
+ 3823: 0x70E4,
+ 3824: 0x70FA,
+ 3825: 0x7103,
+ 3826: 0x7104,
+ 3827: 0x7105,
+ 3828: 0x7106,
+ 3829: 0x7107,
+ 3830: 0x710B,
+ 3831: 0x710C,
+ 3832: 0x710F,
+ 3833: 0x711E,
+ 3834: 0x7120,
+ 3835: 0x712B,
+ 3836: 0x712D,
+ 3837: 0x712F,
+ 3838: 0x7130,
+ 3839: 0x7131,
+ 3840: 0x7138,
+ 3841: 0x7141,
+ 3842: 0x7145,
+ 3843: 0x7146,
+ 3844: 0x7147,
+ 3845: 0x714A,
+ 3846: 0x714B,
+ 3847: 0x7150,
+ 3848: 0x7152,
+ 3849: 0x7157,
+ 3850: 0x715A,
+ 3851: 0x715C,
+ 3852: 0x715E,
+ 3853: 0x7160,
+ 3854: 0x7168,
+ 3855: 0x7179,
+ 3856: 0x7180,
+ 3857: 0x7185,
+ 3858: 0x7187,
+ 3859: 0x718C,
+ 3860: 0x7192,
+ 3861: 0x719A,
+ 3862: 0x719B,
+ 3863: 0x71A0,
+ 3864: 0x71A2,
+ 3865: 0x71AF,
+ 3866: 0x71B0,
+ 3867: 0x71B2,
+ 3868: 0x71B3,
+ 3869: 0x71BA,
+ 3870: 0x71BF,
+ 3871: 0x71C0,
+ 3872: 0x71C1,
+ 3873: 0x71C4,
+ 3874: 0x71CB,
+ 3875: 0x71CC,
+ 3876: 0x71D3,
+ 3877: 0x71D6,
+ 3878: 0x71D9,
+ 3879: 0x71DA,
+ 3880: 0x71DC,
+ 3881: 0x71F8,
+ 3882: 0x71FE,
+ 3883: 0x7200,
+ 3884: 0x7207,
+ 3885: 0x7208,
+ 3886: 0x7209,
+ 3887: 0x7213,
+ 3888: 0x7217,
+ 3889: 0x721A,
+ 3890: 0x721D,
+ 3891: 0x721F,
+ 3892: 0x7224,
+ 3893: 0x722B,
+ 3894: 0x722F,
+ 3895: 0x7234,
+ 3896: 0x7238,
+ 3897: 0x7239,
+ 3898: 0x7241,
+ 3899: 0x7242,
+ 3900: 0x7243,
+ 3901: 0x7245,
+ 3902: 0x724E,
+ 3903: 0x724F,
+ 3904: 0x7250,
+ 3905: 0x7253,
+ 3906: 0x7255,
+ 3907: 0x7256,
+ 3908: 0x725A,
+ 3909: 0x725C,
+ 3910: 0x725E,
+ 3911: 0x7260,
+ 3912: 0x7263,
+ 3913: 0x7268,
+ 3914: 0x726B,
+ 3915: 0x726E,
+ 3916: 0x726F,
+ 3917: 0x7271,
+ 3918: 0x7277,
+ 3919: 0x7278,
+ 3920: 0x727B,
+ 3921: 0x727C,
+ 3922: 0x727F,
+ 3923: 0x7284,
+ 3924: 0x7289,
+ 3925: 0x728D,
+ 3926: 0x728E,
+ 3927: 0x7293,
+ 3928: 0x729B,
+ 3929: 0x72A8,
+ 3930: 0x72AD,
+ 3931: 0x72AE,
+ 3932: 0x72B1,
+ 3933: 0x72B4,
+ 3934: 0x72BE,
+ 3935: 0x72C1,
+ 3936: 0x72C7,
+ 3937: 0x72C9,
+ 3938: 0x72CC,
+ 3939: 0x72D5,
+ 3940: 0x72D6,
+ 3941: 0x72D8,
+ 3942: 0x72DF,
+ 3943: 0x72E5,
+ 3944: 0x72F3,
+ 3945: 0x72F4,
+ 3946: 0x72FA,
+ 3947: 0x72FB,
+ 3948: 0x72FE,
+ 3949: 0x7302,
+ 3950: 0x7304,
+ 3951: 0x7305,
+ 3952: 0x7307,
+ 3953: 0x730B,
+ 3954: 0x730D,
+ 3955: 0x7312,
+ 3956: 0x7313,
+ 3957: 0x7318,
+ 3958: 0x7319,
+ 3959: 0x731E,
+ 3960: 0x7322,
+ 3961: 0x7324,
+ 3962: 0x7327,
+ 3963: 0x7328,
+ 3964: 0x732C,
+ 3965: 0x7331,
+ 3966: 0x7332,
+ 3967: 0x7335,
+ 3968: 0x733A,
+ 3969: 0x733B,
+ 3970: 0x733D,
+ 3971: 0x7343,
+ 3972: 0x734D,
+ 3973: 0x7350,
+ 3974: 0x7352,
+ 3975: 0x7356,
+ 3976: 0x7358,
+ 3977: 0x735D,
+ 3978: 0x735E,
+ 3979: 0x735F,
+ 3980: 0x7360,
+ 3981: 0x7366,
+ 3982: 0x7367,
+ 3983: 0x7369,
+ 3984: 0x736B,
+ 3985: 0x736C,
+ 3986: 0x736E,
+ 3987: 0x736F,
+ 3988: 0x7371,
+ 3989: 0x7377,
+ 3990: 0x7379,
+ 3991: 0x737C,
+ 3992: 0x7380,
+ 3993: 0x7381,
+ 3994: 0x7383,
+ 3995: 0x7385,
+ 3996: 0x7386,
+ 3997: 0x738E,
+ 3998: 0x7390,
+ 3999: 0x7393,
+ 4000: 0x7395,
+ 4001: 0x7397,
+ 4002: 0x7398,
+ 4003: 0x739C,
+ 4004: 0x739E,
+ 4005: 0x739F,
+ 4006: 0x73A0,
+ 4007: 0x73A2,
+ 4008: 0x73A5,
+ 4009: 0x73A6,
+ 4010: 0x73AA,
+ 4011: 0x73AB,
+ 4012: 0x73AD,
+ 4013: 0x73B5,
+ 4014: 0x73B7,
+ 4015: 0x73B9,
+ 4016: 0x73BC,
+ 4017: 0x73BD,
+ 4018: 0x73BF,
+ 4019: 0x73C5,
+ 4020: 0x73C6,
+ 4021: 0x73C9,
+ 4022: 0x73CB,
+ 4023: 0x73CC,
+ 4024: 0x73CF,
+ 4025: 0x73D2,
+ 4026: 0x73D3,
+ 4027: 0x73D6,
+ 4028: 0x73D9,
+ 4029: 0x73DD,
+ 4030: 0x73E1,
+ 4031: 0x73E3,
+ 4032: 0x73E6,
+ 4033: 0x73E7,
+ 4034: 0x73E9,
+ 4035: 0x73F4,
+ 4036: 0x73F5,
+ 4037: 0x73F7,
+ 4038: 0x73F9,
+ 4039: 0x73FA,
+ 4040: 0x73FB,
+ 4041: 0x73FD,
+ 4042: 0x73FF,
+ 4043: 0x7400,
+ 4044: 0x7401,
+ 4045: 0x7404,
+ 4046: 0x7407,
+ 4047: 0x740A,
+ 4048: 0x7411,
+ 4049: 0x741A,
+ 4050: 0x741B,
+ 4051: 0x7424,
+ 4052: 0x7426,
+ 4053: 0x7428,
+ 4054: 0x7429,
+ 4055: 0x742A,
+ 4056: 0x742B,
+ 4057: 0x742C,
+ 4058: 0x742D,
+ 4059: 0x742E,
+ 4060: 0x742F,
+ 4061: 0x7430,
+ 4062: 0x7431,
+ 4063: 0x7439,
+ 4064: 0x7440,
+ 4065: 0x7443,
+ 4066: 0x7444,
+ 4067: 0x7446,
+ 4068: 0x7447,
+ 4069: 0x744B,
+ 4070: 0x744D,
+ 4071: 0x7451,
+ 4072: 0x7452,
+ 4073: 0x7457,
+ 4074: 0x745D,
+ 4075: 0x7462,
+ 4076: 0x7466,
+ 4077: 0x7467,
+ 4078: 0x7468,
+ 4079: 0x746B,
+ 4080: 0x746D,
+ 4081: 0x746E,
+ 4082: 0x7471,
+ 4083: 0x7472,
+ 4084: 0x7480,
+ 4085: 0x7481,
+ 4086: 0x7485,
+ 4087: 0x7486,
+ 4088: 0x7487,
+ 4089: 0x7489,
+ 4090: 0x748F,
+ 4091: 0x7490,
+ 4092: 0x7491,
+ 4093: 0x7492,
+ 4094: 0x7498,
+ 4095: 0x7499,
+ 4096: 0x749A,
+ 4097: 0x749C,
+ 4098: 0x749F,
+ 4099: 0x74A0,
+ 4100: 0x74A1,
+ 4101: 0x74A3,
+ 4102: 0x74A6,
+ 4103: 0x74A8,
+ 4104: 0x74A9,
+ 4105: 0x74AA,
+ 4106: 0x74AB,
+ 4107: 0x74AE,
+ 4108: 0x74AF,
+ 4109: 0x74B1,
+ 4110: 0x74B2,
+ 4111: 0x74B5,
+ 4112: 0x74B9,
+ 4113: 0x74BB,
+ 4114: 0x74BF,
+ 4115: 0x74C8,
+ 4116: 0x74C9,
+ 4117: 0x74CC,
+ 4118: 0x74D0,
+ 4119: 0x74D3,
+ 4120: 0x74D8,
+ 4121: 0x74DA,
+ 4122: 0x74DB,
+ 4123: 0x74DE,
+ 4124: 0x74DF,
+ 4125: 0x74E4,
+ 4126: 0x74E8,
+ 4127: 0x74EA,
+ 4128: 0x74EB,
+ 4129: 0x74EF,
+ 4130: 0x74F4,
+ 4131: 0x74FA,
+ 4132: 0x74FB,
+ 4133: 0x74FC,
+ 4134: 0x74FF,
+ 4135: 0x7506,
+ 4136: 0x7512,
+ 4137: 0x7516,
+ 4138: 0x7517,
+ 4139: 0x7520,
+ 4140: 0x7521,
+ 4141: 0x7524,
+ 4142: 0x7527,
+ 4143: 0x7529,
+ 4144: 0x752A,
+ 4145: 0x752F,
+ 4146: 0x7536,
+ 4147: 0x7539,
+ 4148: 0x753D,
+ 4149: 0x753E,
+ 4150: 0x753F,
+ 4151: 0x7540,
+ 4152: 0x7543,
+ 4153: 0x7547,
+ 4154: 0x7548,
+ 4155: 0x754E,
+ 4156: 0x7550,
+ 4157: 0x7552,
+ 4158: 0x7557,
+ 4159: 0x755E,
+ 4160: 0x755F,
+ 4161: 0x7561,
+ 4162: 0x756F,
+ 4163: 0x7571,
+ 4164: 0x7579,
+ 4165: 0x757A,
+ 4166: 0x757B,
+ 4167: 0x757C,
+ 4168: 0x757D,
+ 4169: 0x757E,
+ 4170: 0x7581,
+ 4171: 0x7585,
+ 4172: 0x7590,
+ 4173: 0x7592,
+ 4174: 0x7593,
+ 4175: 0x7595,
+ 4176: 0x7599,
+ 4177: 0x759C,
+ 4178: 0x75A2,
+ 4179: 0x75A4,
+ 4180: 0x75B4,
+ 4181: 0x75BA,
+ 4182: 0x75BF,
+ 4183: 0x75C0,
+ 4184: 0x75C1,
+ 4185: 0x75C4,
+ 4186: 0x75C6,
+ 4187: 0x75CC,
+ 4188: 0x75CE,
+ 4189: 0x75CF,
+ 4190: 0x75D7,
+ 4191: 0x75DC,
+ 4192: 0x75DF,
+ 4193: 0x75E0,
+ 4194: 0x75E1,
+ 4195: 0x75E4,
+ 4196: 0x75E7,
+ 4197: 0x75EC,
+ 4198: 0x75EE,
+ 4199: 0x75EF,
+ 4200: 0x75F1,
+ 4201: 0x75F9,
+ 4202: 0x7600,
+ 4203: 0x7602,
+ 4204: 0x7603,
+ 4205: 0x7604,
+ 4206: 0x7607,
+ 4207: 0x7608,
+ 4208: 0x760A,
+ 4209: 0x760C,
+ 4210: 0x760F,
+ 4211: 0x7612,
+ 4212: 0x7613,
+ 4213: 0x7615,
+ 4214: 0x7616,
+ 4215: 0x7619,
+ 4216: 0x761B,
+ 4217: 0x761C,
+ 4218: 0x761D,
+ 4219: 0x761E,
+ 4220: 0x7623,
+ 4221: 0x7625,
+ 4222: 0x7626,
+ 4223: 0x7629,
+ 4224: 0x762D,
+ 4225: 0x7632,
+ 4226: 0x7633,
+ 4227: 0x7635,
+ 4228: 0x7638,
+ 4229: 0x7639,
+ 4230: 0x763A,
+ 4231: 0x763C,
+ 4232: 0x764A,
+ 4233: 0x7640,
+ 4234: 0x7641,
+ 4235: 0x7643,
+ 4236: 0x7644,
+ 4237: 0x7645,
+ 4238: 0x7649,
+ 4239: 0x764B,
+ 4240: 0x7655,
+ 4241: 0x7659,
+ 4242: 0x765F,
+ 4243: 0x7664,
+ 4244: 0x7665,
+ 4245: 0x766D,
+ 4246: 0x766E,
+ 4247: 0x766F,
+ 4248: 0x7671,
+ 4249: 0x7674,
+ 4250: 0x7681,
+ 4251: 0x7685,
+ 4252: 0x768C,
+ 4253: 0x768D,
+ 4254: 0x7695,
+ 4255: 0x769B,
+ 4256: 0x769C,
+ 4257: 0x769D,
+ 4258: 0x769F,
+ 4259: 0x76A0,
+ 4260: 0x76A2,
+ 4261: 0x76A3,
+ 4262: 0x76A4,
+ 4263: 0x76A5,
+ 4264: 0x76A6,
+ 4265: 0x76A7,
+ 4266: 0x76A8,
+ 4267: 0x76AA,
+ 4268: 0x76AD,
+ 4269: 0x76BD,
+ 4270: 0x76C1,
+ 4271: 0x76C5,
+ 4272: 0x76C9,
+ 4273: 0x76CB,
+ 4274: 0x76CC,
+ 4275: 0x76CE,
+ 4276: 0x76D4,
+ 4277: 0x76D9,
+ 4278: 0x76E0,
+ 4279: 0x76E6,
+ 4280: 0x76E8,
+ 4281: 0x76EC,
+ 4282: 0x76F0,
+ 4283: 0x76F1,
+ 4284: 0x76F6,
+ 4285: 0x76F9,
+ 4286: 0x76FC,
+ 4287: 0x7700,
+ 4288: 0x7706,
+ 4289: 0x770A,
+ 4290: 0x770E,
+ 4291: 0x7712,
+ 4292: 0x7714,
+ 4293: 0x7715,
+ 4294: 0x7717,
+ 4295: 0x7719,
+ 4296: 0x771A,
+ 4297: 0x771C,
+ 4298: 0x7722,
+ 4299: 0x7728,
+ 4300: 0x772D,
+ 4301: 0x772E,
+ 4302: 0x772F,
+ 4303: 0x7734,
+ 4304: 0x7735,
+ 4305: 0x7736,
+ 4306: 0x7739,
+ 4307: 0x773D,
+ 4308: 0x773E,
+ 4309: 0x7742,
+ 4310: 0x7745,
+ 4311: 0x7746,
+ 4312: 0x774A,
+ 4313: 0x774D,
+ 4314: 0x774E,
+ 4315: 0x774F,
+ 4316: 0x7752,
+ 4317: 0x7756,
+ 4318: 0x7757,
+ 4319: 0x775C,
+ 4320: 0x775E,
+ 4321: 0x775F,
+ 4322: 0x7760,
+ 4323: 0x7762,
+ 4324: 0x7764,
+ 4325: 0x7767,
+ 4326: 0x776A,
+ 4327: 0x776C,
+ 4328: 0x7770,
+ 4329: 0x7772,
+ 4330: 0x7773,
+ 4331: 0x7774,
+ 4332: 0x777A,
+ 4333: 0x777D,
+ 4334: 0x7780,
+ 4335: 0x7784,
+ 4336: 0x778C,
+ 4337: 0x778D,
+ 4338: 0x7794,
+ 4339: 0x7795,
+ 4340: 0x7796,
+ 4341: 0x779A,
+ 4342: 0x779F,
+ 4343: 0x77A2,
+ 4344: 0x77A7,
+ 4345: 0x77AA,
+ 4346: 0x77AE,
+ 4347: 0x77AF,
+ 4348: 0x77B1,
+ 4349: 0x77B5,
+ 4350: 0x77BE,
+ 4351: 0x77C3,
+ 4352: 0x77C9,
+ 4353: 0x77D1,
+ 4354: 0x77D2,
+ 4355: 0x77D5,
+ 4356: 0x77D9,
+ 4357: 0x77DE,
+ 4358: 0x77DF,
+ 4359: 0x77E0,
+ 4360: 0x77E4,
+ 4361: 0x77E6,
+ 4362: 0x77EA,
+ 4363: 0x77EC,
+ 4364: 0x77F0,
+ 4365: 0x77F1,
+ 4366: 0x77F4,
+ 4367: 0x77F8,
+ 4368: 0x77FB,
+ 4369: 0x7805,
+ 4370: 0x7806,
+ 4371: 0x7809,
+ 4372: 0x780D,
+ 4373: 0x780E,
+ 4374: 0x7811,
+ 4375: 0x781D,
+ 4376: 0x7821,
+ 4377: 0x7822,
+ 4378: 0x7823,
+ 4379: 0x782D,
+ 4380: 0x782E,
+ 4381: 0x7830,
+ 4382: 0x7835,
+ 4383: 0x7837,
+ 4384: 0x7843,
+ 4385: 0x7844,
+ 4386: 0x7847,
+ 4387: 0x7848,
+ 4388: 0x784C,
+ 4389: 0x784E,
+ 4390: 0x7852,
+ 4391: 0x785C,
+ 4392: 0x785E,
+ 4393: 0x7860,
+ 4394: 0x7861,
+ 4395: 0x7863,
+ 4396: 0x7864,
+ 4397: 0x7868,
+ 4398: 0x786A,
+ 4399: 0x786E,
+ 4400: 0x787A,
+ 4401: 0x787E,
+ 4402: 0x788A,
+ 4403: 0x788F,
+ 4404: 0x7894,
+ 4405: 0x7898,
+ 4406: 0x78A1,
+ 4407: 0x789D,
+ 4408: 0x789E,
+ 4409: 0x789F,
+ 4410: 0x78A4,
+ 4411: 0x78A8,
+ 4412: 0x78AC,
+ 4413: 0x78AD,
+ 4414: 0x78B0,
+ 4415: 0x78B1,
+ 4416: 0x78B2,
+ 4417: 0x78B3,
+ 4418: 0x78BB,
+ 4419: 0x78BD,
+ 4420: 0x78BF,
+ 4421: 0x78C7,
+ 4422: 0x78C8,
+ 4423: 0x78C9,
+ 4424: 0x78CC,
+ 4425: 0x78CE,
+ 4426: 0x78D2,
+ 4427: 0x78D3,
+ 4428: 0x78D5,
+ 4429: 0x78D6,
+ 4430: 0x78E4,
+ 4431: 0x78DB,
+ 4432: 0x78DF,
+ 4433: 0x78E0,
+ 4434: 0x78E1,
+ 4435: 0x78E6,
+ 4436: 0x78EA,
+ 4437: 0x78F2,
+ 4438: 0x78F3,
+ 4439: 0x7900,
+ 4440: 0x78F6,
+ 4441: 0x78F7,
+ 4442: 0x78FA,
+ 4443: 0x78FB,
+ 4444: 0x78FF,
+ 4445: 0x7906,
+ 4446: 0x790C,
+ 4447: 0x7910,
+ 4448: 0x791A,
+ 4449: 0x791C,
+ 4450: 0x791E,
+ 4451: 0x791F,
+ 4452: 0x7920,
+ 4453: 0x7925,
+ 4454: 0x7927,
+ 4455: 0x7929,
+ 4456: 0x792D,
+ 4457: 0x7931,
+ 4458: 0x7934,
+ 4459: 0x7935,
+ 4460: 0x793B,
+ 4461: 0x793D,
+ 4462: 0x793F,
+ 4463: 0x7944,
+ 4464: 0x7945,
+ 4465: 0x7946,
+ 4466: 0x794A,
+ 4467: 0x794B,
+ 4468: 0x794F,
+ 4469: 0x7951,
+ 4470: 0x7954,
+ 4471: 0x7958,
+ 4472: 0x795B,
+ 4473: 0x795C,
+ 4474: 0x7967,
+ 4475: 0x7969,
+ 4476: 0x796B,
+ 4477: 0x7972,
+ 4478: 0x7979,
+ 4479: 0x797B,
+ 4480: 0x797C,
+ 4481: 0x797E,
+ 4482: 0x798B,
+ 4483: 0x798C,
+ 4484: 0x7991,
+ 4485: 0x7993,
+ 4486: 0x7994,
+ 4487: 0x7995,
+ 4488: 0x7996,
+ 4489: 0x7998,
+ 4490: 0x799B,
+ 4491: 0x799C,
+ 4492: 0x79A1,
+ 4493: 0x79A8,
+ 4494: 0x79A9,
+ 4495: 0x79AB,
+ 4496: 0x79AF,
+ 4497: 0x79B1,
+ 4498: 0x79B4,
+ 4499: 0x79B8,
+ 4500: 0x79BB,
+ 4501: 0x79C2,
+ 4502: 0x79C4,
+ 4503: 0x79C7,
+ 4504: 0x79C8,
+ 4505: 0x79CA,
+ 4506: 0x79CF,
+ 4507: 0x79D4,
+ 4508: 0x79D6,
+ 4509: 0x79DA,
+ 4510: 0x79DD,
+ 4511: 0x79DE,
+ 4512: 0x79E0,
+ 4513: 0x79E2,
+ 4514: 0x79E5,
+ 4515: 0x79EA,
+ 4516: 0x79EB,
+ 4517: 0x79ED,
+ 4518: 0x79F1,
+ 4519: 0x79F8,
+ 4520: 0x79FC,
+ 4521: 0x7A02,
+ 4522: 0x7A03,
+ 4523: 0x7A07,
+ 4524: 0x7A09,
+ 4525: 0x7A0A,
+ 4526: 0x7A0C,
+ 4527: 0x7A11,
+ 4528: 0x7A15,
+ 4529: 0x7A1B,
+ 4530: 0x7A1E,
+ 4531: 0x7A21,
+ 4532: 0x7A27,
+ 4533: 0x7A2B,
+ 4534: 0x7A2D,
+ 4535: 0x7A2F,
+ 4536: 0x7A30,
+ 4537: 0x7A34,
+ 4538: 0x7A35,
+ 4539: 0x7A38,
+ 4540: 0x7A39,
+ 4541: 0x7A3A,
+ 4542: 0x7A44,
+ 4543: 0x7A45,
+ 4544: 0x7A47,
+ 4545: 0x7A48,
+ 4546: 0x7A4C,
+ 4547: 0x7A55,
+ 4548: 0x7A56,
+ 4549: 0x7A59,
+ 4550: 0x7A5C,
+ 4551: 0x7A5D,
+ 4552: 0x7A5F,
+ 4553: 0x7A60,
+ 4554: 0x7A65,
+ 4555: 0x7A67,
+ 4556: 0x7A6A,
+ 4557: 0x7A6D,
+ 4558: 0x7A75,
+ 4559: 0x7A78,
+ 4560: 0x7A7E,
+ 4561: 0x7A80,
+ 4562: 0x7A82,
+ 4563: 0x7A85,
+ 4564: 0x7A86,
+ 4565: 0x7A8A,
+ 4566: 0x7A8B,
+ 4567: 0x7A90,
+ 4568: 0x7A91,
+ 4569: 0x7A94,
+ 4570: 0x7A9E,
+ 4571: 0x7AA0,
+ 4572: 0x7AA3,
+ 4573: 0x7AAC,
+ 4574: 0x7AB3,
+ 4575: 0x7AB5,
+ 4576: 0x7AB9,
+ 4577: 0x7ABB,
+ 4578: 0x7ABC,
+ 4579: 0x7AC6,
+ 4580: 0x7AC9,
+ 4581: 0x7ACC,
+ 4582: 0x7ACE,
+ 4583: 0x7AD1,
+ 4584: 0x7ADB,
+ 4585: 0x7AE8,
+ 4586: 0x7AE9,
+ 4587: 0x7AEB,
+ 4588: 0x7AEC,
+ 4589: 0x7AF1,
+ 4590: 0x7AF4,
+ 4591: 0x7AFB,
+ 4592: 0x7AFD,
+ 4593: 0x7AFE,
+ 4594: 0x7B07,
+ 4595: 0x7B14,
+ 4596: 0x7B1F,
+ 4597: 0x7B23,
+ 4598: 0x7B27,
+ 4599: 0x7B29,
+ 4600: 0x7B2A,
+ 4601: 0x7B2B,
+ 4602: 0x7B2D,
+ 4603: 0x7B2E,
+ 4604: 0x7B2F,
+ 4605: 0x7B30,
+ 4606: 0x7B31,
+ 4607: 0x7B34,
+ 4608: 0x7B3D,
+ 4609: 0x7B3F,
+ 4610: 0x7B40,
+ 4611: 0x7B41,
+ 4612: 0x7B47,
+ 4613: 0x7B4E,
+ 4614: 0x7B55,
+ 4615: 0x7B60,
+ 4616: 0x7B64,
+ 4617: 0x7B66,
+ 4618: 0x7B69,
+ 4619: 0x7B6A,
+ 4620: 0x7B6D,
+ 4621: 0x7B6F,
+ 4622: 0x7B72,
+ 4623: 0x7B73,
+ 4624: 0x7B77,
+ 4625: 0x7B84,
+ 4626: 0x7B89,
+ 4627: 0x7B8E,
+ 4628: 0x7B90,
+ 4629: 0x7B91,
+ 4630: 0x7B96,
+ 4631: 0x7B9B,
+ 4632: 0x7B9E,
+ 4633: 0x7BA0,
+ 4634: 0x7BA5,
+ 4635: 0x7BAC,
+ 4636: 0x7BAF,
+ 4637: 0x7BB0,
+ 4638: 0x7BB2,
+ 4639: 0x7BB5,
+ 4640: 0x7BB6,
+ 4641: 0x7BBA,
+ 4642: 0x7BBB,
+ 4643: 0x7BBC,
+ 4644: 0x7BBD,
+ 4645: 0x7BC2,
+ 4646: 0x7BC5,
+ 4647: 0x7BC8,
+ 4648: 0x7BCA,
+ 4649: 0x7BD4,
+ 4650: 0x7BD6,
+ 4651: 0x7BD7,
+ 4652: 0x7BD9,
+ 4653: 0x7BDA,
+ 4654: 0x7BDB,
+ 4655: 0x7BE8,
+ 4656: 0x7BEA,
+ 4657: 0x7BF2,
+ 4658: 0x7BF4,
+ 4659: 0x7BF5,
+ 4660: 0x7BF8,
+ 4661: 0x7BF9,
+ 4662: 0x7BFA,
+ 4663: 0x7BFC,
+ 4664: 0x7BFE,
+ 4665: 0x7C01,
+ 4666: 0x7C02,
+ 4667: 0x7C03,
+ 4668: 0x7C04,
+ 4669: 0x7C06,
+ 4670: 0x7C09,
+ 4671: 0x7C0B,
+ 4672: 0x7C0C,
+ 4673: 0x7C0E,
+ 4674: 0x7C0F,
+ 4675: 0x7C19,
+ 4676: 0x7C1B,
+ 4677: 0x7C20,
+ 4678: 0x7C25,
+ 4679: 0x7C26,
+ 4680: 0x7C28,
+ 4681: 0x7C2C,
+ 4682: 0x7C31,
+ 4683: 0x7C33,
+ 4684: 0x7C34,
+ 4685: 0x7C36,
+ 4686: 0x7C39,
+ 4687: 0x7C3A,
+ 4688: 0x7C46,
+ 4689: 0x7C4A,
+ 4690: 0x7C55,
+ 4691: 0x7C51,
+ 4692: 0x7C52,
+ 4693: 0x7C53,
+ 4694: 0x7C59,
+ 4695: 0x7C5A,
+ 4696: 0x7C5B,
+ 4697: 0x7C5C,
+ 4698: 0x7C5D,
+ 4699: 0x7C5E,
+ 4700: 0x7C61,
+ 4701: 0x7C63,
+ 4702: 0x7C67,
+ 4703: 0x7C69,
+ 4704: 0x7C6D,
+ 4705: 0x7C6E,
+ 4706: 0x7C70,
+ 4707: 0x7C72,
+ 4708: 0x7C79,
+ 4709: 0x7C7C,
+ 4710: 0x7C7D,
+ 4711: 0x7C86,
+ 4712: 0x7C87,
+ 4713: 0x7C8F,
+ 4714: 0x7C94,
+ 4715: 0x7C9E,
+ 4716: 0x7CA0,
+ 4717: 0x7CA6,
+ 4718: 0x7CB0,
+ 4719: 0x7CB6,
+ 4720: 0x7CB7,
+ 4721: 0x7CBA,
+ 4722: 0x7CBB,
+ 4723: 0x7CBC,
+ 4724: 0x7CBF,
+ 4725: 0x7CC4,
+ 4726: 0x7CC7,
+ 4727: 0x7CC8,
+ 4728: 0x7CC9,
+ 4729: 0x7CCD,
+ 4730: 0x7CCF,
+ 4731: 0x7CD3,
+ 4732: 0x7CD4,
+ 4733: 0x7CD5,
+ 4734: 0x7CD7,
+ 4735: 0x7CD9,
+ 4736: 0x7CDA,
+ 4737: 0x7CDD,
+ 4738: 0x7CE6,
+ 4739: 0x7CE9,
+ 4740: 0x7CEB,
+ 4741: 0x7CF5,
+ 4742: 0x7D03,
+ 4743: 0x7D07,
+ 4744: 0x7D08,
+ 4745: 0x7D09,
+ 4746: 0x7D0F,
+ 4747: 0x7D11,
+ 4748: 0x7D12,
+ 4749: 0x7D13,
+ 4750: 0x7D16,
+ 4751: 0x7D1D,
+ 4752: 0x7D1E,
+ 4753: 0x7D23,
+ 4754: 0x7D26,
+ 4755: 0x7D2A,
+ 4756: 0x7D2D,
+ 4757: 0x7D31,
+ 4758: 0x7D3C,
+ 4759: 0x7D3D,
+ 4760: 0x7D3E,
+ 4761: 0x7D40,
+ 4762: 0x7D41,
+ 4763: 0x7D47,
+ 4764: 0x7D48,
+ 4765: 0x7D4D,
+ 4766: 0x7D51,
+ 4767: 0x7D53,
+ 4768: 0x7D57,
+ 4769: 0x7D59,
+ 4770: 0x7D5A,
+ 4771: 0x7D5C,
+ 4772: 0x7D5D,
+ 4773: 0x7D65,
+ 4774: 0x7D67,
+ 4775: 0x7D6A,
+ 4776: 0x7D70,
+ 4777: 0x7D78,
+ 4778: 0x7D7A,
+ 4779: 0x7D7B,
+ 4780: 0x7D7F,
+ 4781: 0x7D81,
+ 4782: 0x7D82,
+ 4783: 0x7D83,
+ 4784: 0x7D85,
+ 4785: 0x7D86,
+ 4786: 0x7D88,
+ 4787: 0x7D8B,
+ 4788: 0x7D8C,
+ 4789: 0x7D8D,
+ 4790: 0x7D91,
+ 4791: 0x7D96,
+ 4792: 0x7D97,
+ 4793: 0x7D9D,
+ 4794: 0x7D9E,
+ 4795: 0x7DA6,
+ 4796: 0x7DA7,
+ 4797: 0x7DAA,
+ 4798: 0x7DB3,
+ 4799: 0x7DB6,
+ 4800: 0x7DB7,
+ 4801: 0x7DB9,
+ 4802: 0x7DC2,
+ 4803: 0x7DC3,
+ 4804: 0x7DC4,
+ 4805: 0x7DC5,
+ 4806: 0x7DC6,
+ 4807: 0x7DCC,
+ 4808: 0x7DCD,
+ 4809: 0x7DCE,
+ 4810: 0x7DD7,
+ 4811: 0x7DD9,
+ 4812: 0x7E00,
+ 4813: 0x7DE2,
+ 4814: 0x7DE5,
+ 4815: 0x7DE6,
+ 4816: 0x7DEA,
+ 4817: 0x7DEB,
+ 4818: 0x7DED,
+ 4819: 0x7DF1,
+ 4820: 0x7DF5,
+ 4821: 0x7DF6,
+ 4822: 0x7DF9,
+ 4823: 0x7DFA,
+ 4824: 0x7E08,
+ 4825: 0x7E10,
+ 4826: 0x7E11,
+ 4827: 0x7E15,
+ 4828: 0x7E17,
+ 4829: 0x7E1C,
+ 4830: 0x7E1D,
+ 4831: 0x7E20,
+ 4832: 0x7E27,
+ 4833: 0x7E28,
+ 4834: 0x7E2C,
+ 4835: 0x7E2D,
+ 4836: 0x7E2F,
+ 4837: 0x7E33,
+ 4838: 0x7E36,
+ 4839: 0x7E3F,
+ 4840: 0x7E44,
+ 4841: 0x7E45,
+ 4842: 0x7E47,
+ 4843: 0x7E4E,
+ 4844: 0x7E50,
+ 4845: 0x7E52,
+ 4846: 0x7E58,
+ 4847: 0x7E5F,
+ 4848: 0x7E61,
+ 4849: 0x7E62,
+ 4850: 0x7E65,
+ 4851: 0x7E6B,
+ 4852: 0x7E6E,
+ 4853: 0x7E6F,
+ 4854: 0x7E73,
+ 4855: 0x7E78,
+ 4856: 0x7E7E,
+ 4857: 0x7E81,
+ 4858: 0x7E86,
+ 4859: 0x7E87,
+ 4860: 0x7E8A,
+ 4861: 0x7E8D,
+ 4862: 0x7E91,
+ 4863: 0x7E95,
+ 4864: 0x7E98,
+ 4865: 0x7E9A,
+ 4866: 0x7E9D,
+ 4867: 0x7E9E,
+ 4868: 0x7F3C,
+ 4869: 0x7F3B,
+ 4870: 0x7F3D,
+ 4871: 0x7F3E,
+ 4872: 0x7F3F,
+ 4873: 0x7F43,
+ 4874: 0x7F44,
+ 4875: 0x7F47,
+ 4876: 0x7F4F,
+ 4877: 0x7F52,
+ 4878: 0x7F53,
+ 4879: 0x7F5B,
+ 4880: 0x7F5C,
+ 4881: 0x7F5D,
+ 4882: 0x7F61,
+ 4883: 0x7F63,
+ 4884: 0x7F64,
+ 4885: 0x7F65,
+ 4886: 0x7F66,
+ 4887: 0x7F6D,
+ 4888: 0x7F71,
+ 4889: 0x7F7D,
+ 4890: 0x7F7E,
+ 4891: 0x7F7F,
+ 4892: 0x7F80,
+ 4893: 0x7F8B,
+ 4894: 0x7F8D,
+ 4895: 0x7F8F,
+ 4896: 0x7F90,
+ 4897: 0x7F91,
+ 4898: 0x7F96,
+ 4899: 0x7F97,
+ 4900: 0x7F9C,
+ 4901: 0x7FA1,
+ 4902: 0x7FA2,
+ 4903: 0x7FA6,
+ 4904: 0x7FAA,
+ 4905: 0x7FAD,
+ 4906: 0x7FB4,
+ 4907: 0x7FBC,
+ 4908: 0x7FBF,
+ 4909: 0x7FC0,
+ 4910: 0x7FC3,
+ 4911: 0x7FC8,
+ 4912: 0x7FCE,
+ 4913: 0x7FCF,
+ 4914: 0x7FDB,
+ 4915: 0x7FDF,
+ 4916: 0x7FE3,
+ 4917: 0x7FE5,
+ 4918: 0x7FE8,
+ 4919: 0x7FEC,
+ 4920: 0x7FEE,
+ 4921: 0x7FEF,
+ 4922: 0x7FF2,
+ 4923: 0x7FFA,
+ 4924: 0x7FFD,
+ 4925: 0x7FFE,
+ 4926: 0x7FFF,
+ 4927: 0x8007,
+ 4928: 0x8008,
+ 4929: 0x800A,
+ 4930: 0x800D,
+ 4931: 0x800E,
+ 4932: 0x800F,
+ 4933: 0x8011,
+ 4934: 0x8013,
+ 4935: 0x8014,
+ 4936: 0x8016,
+ 4937: 0x801D,
+ 4938: 0x801E,
+ 4939: 0x801F,
+ 4940: 0x8020,
+ 4941: 0x8024,
+ 4942: 0x8026,
+ 4943: 0x802C,
+ 4944: 0x802E,
+ 4945: 0x8030,
+ 4946: 0x8034,
+ 4947: 0x8035,
+ 4948: 0x8037,
+ 4949: 0x8039,
+ 4950: 0x803A,
+ 4951: 0x803C,
+ 4952: 0x803E,
+ 4953: 0x8040,
+ 4954: 0x8044,
+ 4955: 0x8060,
+ 4956: 0x8064,
+ 4957: 0x8066,
+ 4958: 0x806D,
+ 4959: 0x8071,
+ 4960: 0x8075,
+ 4961: 0x8081,
+ 4962: 0x8088,
+ 4963: 0x808E,
+ 4964: 0x809C,
+ 4965: 0x809E,
+ 4966: 0x80A6,
+ 4967: 0x80A7,
+ 4968: 0x80AB,
+ 4969: 0x80B8,
+ 4970: 0x80B9,
+ 4971: 0x80C8,
+ 4972: 0x80CD,
+ 4973: 0x80CF,
+ 4974: 0x80D2,
+ 4975: 0x80D4,
+ 4976: 0x80D5,
+ 4977: 0x80D7,
+ 4978: 0x80D8,
+ 4979: 0x80E0,
+ 4980: 0x80ED,
+ 4981: 0x80EE,
+ 4982: 0x80F0,
+ 4983: 0x80F2,
+ 4984: 0x80F3,
+ 4985: 0x80F6,
+ 4986: 0x80F9,
+ 4987: 0x80FA,
+ 4988: 0x80FE,
+ 4989: 0x8103,
+ 4990: 0x810B,
+ 4991: 0x8116,
+ 4992: 0x8117,
+ 4993: 0x8118,
+ 4994: 0x811C,
+ 4995: 0x811E,
+ 4996: 0x8120,
+ 4997: 0x8124,
+ 4998: 0x8127,
+ 4999: 0x812C,
+ 5000: 0x8130,
+ 5001: 0x8135,
+ 5002: 0x813A,
+ 5003: 0x813C,
+ 5004: 0x8145,
+ 5005: 0x8147,
+ 5006: 0x814A,
+ 5007: 0x814C,
+ 5008: 0x8152,
+ 5009: 0x8157,
+ 5010: 0x8160,
+ 5011: 0x8161,
+ 5012: 0x8167,
+ 5013: 0x8168,
+ 5014: 0x8169,
+ 5015: 0x816D,
+ 5016: 0x816F,
+ 5017: 0x8177,
+ 5018: 0x8181,
+ 5019: 0x8190,
+ 5020: 0x8184,
+ 5021: 0x8185,
+ 5022: 0x8186,
+ 5023: 0x818B,
+ 5024: 0x818E,
+ 5025: 0x8196,
+ 5026: 0x8198,
+ 5027: 0x819B,
+ 5028: 0x819E,
+ 5029: 0x81A2,
+ 5030: 0x81AE,
+ 5031: 0x81B2,
+ 5032: 0x81B4,
+ 5033: 0x81BB,
+ 5034: 0x81CB,
+ 5035: 0x81C3,
+ 5036: 0x81C5,
+ 5037: 0x81CA,
+ 5038: 0x81CE,
+ 5039: 0x81CF,
+ 5040: 0x81D5,
+ 5041: 0x81D7,
+ 5042: 0x81DB,
+ 5043: 0x81DD,
+ 5044: 0x81DE,
+ 5045: 0x81E1,
+ 5046: 0x81E4,
+ 5047: 0x81EB,
+ 5048: 0x81EC,
+ 5049: 0x81F0,
+ 5050: 0x81F1,
+ 5051: 0x81F2,
+ 5052: 0x81F5,
+ 5053: 0x81F6,
+ 5054: 0x81F8,
+ 5055: 0x81F9,
+ 5056: 0x81FD,
+ 5057: 0x81FF,
+ 5058: 0x8200,
+ 5059: 0x8203,
+ 5060: 0x820F,
+ 5061: 0x8213,
+ 5062: 0x8214,
+ 5063: 0x8219,
+ 5064: 0x821A,
+ 5065: 0x821D,
+ 5066: 0x8221,
+ 5067: 0x8222,
+ 5068: 0x8228,
+ 5069: 0x8232,
+ 5070: 0x8234,
+ 5071: 0x823A,
+ 5072: 0x8243,
+ 5073: 0x8244,
+ 5074: 0x8245,
+ 5075: 0x8246,
+ 5076: 0x824B,
+ 5077: 0x824E,
+ 5078: 0x824F,
+ 5079: 0x8251,
+ 5080: 0x8256,
+ 5081: 0x825C,
+ 5082: 0x8260,
+ 5083: 0x8263,
+ 5084: 0x8267,
+ 5085: 0x826D,
+ 5086: 0x8274,
+ 5087: 0x827B,
+ 5088: 0x827D,
+ 5089: 0x827F,
+ 5090: 0x8280,
+ 5091: 0x8281,
+ 5092: 0x8283,
+ 5093: 0x8284,
+ 5094: 0x8287,
+ 5095: 0x8289,
+ 5096: 0x828A,
+ 5097: 0x828E,
+ 5098: 0x8291,
+ 5099: 0x8294,
+ 5100: 0x8296,
+ 5101: 0x8298,
+ 5102: 0x829A,
+ 5103: 0x829B,
+ 5104: 0x82A0,
+ 5105: 0x82A1,
+ 5106: 0x82A3,
+ 5107: 0x82A4,
+ 5108: 0x82A7,
+ 5109: 0x82A8,
+ 5110: 0x82A9,
+ 5111: 0x82AA,
+ 5112: 0x82AE,
+ 5113: 0x82B0,
+ 5114: 0x82B2,
+ 5115: 0x82B4,
+ 5116: 0x82B7,
+ 5117: 0x82BA,
+ 5118: 0x82BC,
+ 5119: 0x82BE,
+ 5120: 0x82BF,
+ 5121: 0x82C6,
+ 5122: 0x82D0,
+ 5123: 0x82D5,
+ 5124: 0x82DA,
+ 5125: 0x82E0,
+ 5126: 0x82E2,
+ 5127: 0x82E4,
+ 5128: 0x82E8,
+ 5129: 0x82EA,
+ 5130: 0x82ED,
+ 5131: 0x82EF,
+ 5132: 0x82F6,
+ 5133: 0x82F7,
+ 5134: 0x82FD,
+ 5135: 0x82FE,
+ 5136: 0x8300,
+ 5137: 0x8301,
+ 5138: 0x8307,
+ 5139: 0x8308,
+ 5140: 0x830A,
+ 5141: 0x830B,
+ 5142: 0x8354,
+ 5143: 0x831B,
+ 5144: 0x831D,
+ 5145: 0x831E,
+ 5146: 0x831F,
+ 5147: 0x8321,
+ 5148: 0x8322,
+ 5149: 0x832C,
+ 5150: 0x832D,
+ 5151: 0x832E,
+ 5152: 0x8330,
+ 5153: 0x8333,
+ 5154: 0x8337,
+ 5155: 0x833A,
+ 5156: 0x833C,
+ 5157: 0x833D,
+ 5158: 0x8342,
+ 5159: 0x8343,
+ 5160: 0x8344,
+ 5161: 0x8347,
+ 5162: 0x834D,
+ 5163: 0x834E,
+ 5164: 0x8351,
+ 5165: 0x8355,
+ 5166: 0x8356,
+ 5167: 0x8357,
+ 5168: 0x8370,
+ 5169: 0x8378,
+ 5170: 0x837D,
+ 5171: 0x837F,
+ 5172: 0x8380,
+ 5173: 0x8382,
+ 5174: 0x8384,
+ 5175: 0x8386,
+ 5176: 0x838D,
+ 5177: 0x8392,
+ 5178: 0x8394,
+ 5179: 0x8395,
+ 5180: 0x8398,
+ 5181: 0x8399,
+ 5182: 0x839B,
+ 5183: 0x839C,
+ 5184: 0x839D,
+ 5185: 0x83A6,
+ 5186: 0x83A7,
+ 5187: 0x83A9,
+ 5188: 0x83AC,
+ 5189: 0x83BE,
+ 5190: 0x83BF,
+ 5191: 0x83C0,
+ 5192: 0x83C7,
+ 5193: 0x83C9,
+ 5194: 0x83CF,
+ 5195: 0x83D0,
+ 5196: 0x83D1,
+ 5197: 0x83D4,
+ 5198: 0x83DD,
+ 5199: 0x8353,
+ 5200: 0x83E8,
+ 5201: 0x83EA,
+ 5202: 0x83F6,
+ 5203: 0x83F8,
+ 5204: 0x83F9,
+ 5205: 0x83FC,
+ 5206: 0x8401,
+ 5207: 0x8406,
+ 5208: 0x840A,
+ 5209: 0x840F,
+ 5210: 0x8411,
+ 5211: 0x8415,
+ 5212: 0x8419,
+ 5213: 0x83AD,
+ 5214: 0x842F,
+ 5215: 0x8439,
+ 5216: 0x8445,
+ 5217: 0x8447,
+ 5218: 0x8448,
+ 5219: 0x844A,
+ 5220: 0x844D,
+ 5221: 0x844F,
+ 5222: 0x8451,
+ 5223: 0x8452,
+ 5224: 0x8456,
+ 5225: 0x8458,
+ 5226: 0x8459,
+ 5227: 0x845A,
+ 5228: 0x845C,
+ 5229: 0x8460,
+ 5230: 0x8464,
+ 5231: 0x8465,
+ 5232: 0x8467,
+ 5233: 0x846A,
+ 5234: 0x8470,
+ 5235: 0x8473,
+ 5236: 0x8474,
+ 5237: 0x8476,
+ 5238: 0x8478,
+ 5239: 0x847C,
+ 5240: 0x847D,
+ 5241: 0x8481,
+ 5242: 0x8485,
+ 5243: 0x8492,
+ 5244: 0x8493,
+ 5245: 0x8495,
+ 5246: 0x849E,
+ 5247: 0x84A6,
+ 5248: 0x84A8,
+ 5249: 0x84A9,
+ 5250: 0x84AA,
+ 5251: 0x84AF,
+ 5252: 0x84B1,
+ 5253: 0x84B4,
+ 5254: 0x84BA,
+ 5255: 0x84BD,
+ 5256: 0x84BE,
+ 5257: 0x84C0,
+ 5258: 0x84C2,
+ 5259: 0x84C7,
+ 5260: 0x84C8,
+ 5261: 0x84CC,
+ 5262: 0x84CF,
+ 5263: 0x84D3,
+ 5264: 0x84DC,
+ 5265: 0x84E7,
+ 5266: 0x84EA,
+ 5267: 0x84EF,
+ 5268: 0x84F0,
+ 5269: 0x84F1,
+ 5270: 0x84F2,
+ 5271: 0x84F7,
+ 5272: 0x8532,
+ 5273: 0x84FA,
+ 5274: 0x84FB,
+ 5275: 0x84FD,
+ 5276: 0x8502,
+ 5277: 0x8503,
+ 5278: 0x8507,
+ 5279: 0x850C,
+ 5280: 0x850E,
+ 5281: 0x8510,
+ 5282: 0x851C,
+ 5283: 0x851E,
+ 5284: 0x8522,
+ 5285: 0x8523,
+ 5286: 0x8524,
+ 5287: 0x8525,
+ 5288: 0x8527,
+ 5289: 0x852A,
+ 5290: 0x852B,
+ 5291: 0x852F,
+ 5292: 0x8533,
+ 5293: 0x8534,
+ 5294: 0x8536,
+ 5295: 0x853F,
+ 5296: 0x8546,
+ 5297: 0x854F,
+ 5298: 0x8550,
+ 5299: 0x8551,
+ 5300: 0x8552,
+ 5301: 0x8553,
+ 5302: 0x8556,
+ 5303: 0x8559,
+ 5304: 0x855C,
+ 5305: 0x855D,
+ 5306: 0x855E,
+ 5307: 0x855F,
+ 5308: 0x8560,
+ 5309: 0x8561,
+ 5310: 0x8562,
+ 5311: 0x8564,
+ 5312: 0x856B,
+ 5313: 0x856F,
+ 5314: 0x8579,
+ 5315: 0x857A,
+ 5316: 0x857B,
+ 5317: 0x857D,
+ 5318: 0x857F,
+ 5319: 0x8581,
+ 5320: 0x8585,
+ 5321: 0x8586,
+ 5322: 0x8589,
+ 5323: 0x858B,
+ 5324: 0x858C,
+ 5325: 0x858F,
+ 5326: 0x8593,
+ 5327: 0x8598,
+ 5328: 0x859D,
+ 5329: 0x859F,
+ 5330: 0x85A0,
+ 5331: 0x85A2,
+ 5332: 0x85A5,
+ 5333: 0x85A7,
+ 5334: 0x85B4,
+ 5335: 0x85B6,
+ 5336: 0x85B7,
+ 5337: 0x85B8,
+ 5338: 0x85BC,
+ 5339: 0x85BD,
+ 5340: 0x85BE,
+ 5341: 0x85BF,
+ 5342: 0x85C2,
+ 5343: 0x85C7,
+ 5344: 0x85CA,
+ 5345: 0x85CB,
+ 5346: 0x85CE,
+ 5347: 0x85AD,
+ 5348: 0x85D8,
+ 5349: 0x85DA,
+ 5350: 0x85DF,
+ 5351: 0x85E0,
+ 5352: 0x85E6,
+ 5353: 0x85E8,
+ 5354: 0x85ED,
+ 5355: 0x85F3,
+ 5356: 0x85F6,
+ 5357: 0x85FC,
+ 5358: 0x85FF,
+ 5359: 0x8600,
+ 5360: 0x8604,
+ 5361: 0x8605,
+ 5362: 0x860D,
+ 5363: 0x860E,
+ 5364: 0x8610,
+ 5365: 0x8611,
+ 5366: 0x8612,
+ 5367: 0x8618,
+ 5368: 0x8619,
+ 5369: 0x861B,
+ 5370: 0x861E,
+ 5371: 0x8621,
+ 5372: 0x8627,
+ 5373: 0x8629,
+ 5374: 0x8636,
+ 5375: 0x8638,
+ 5376: 0x863A,
+ 5377: 0x863C,
+ 5378: 0x863D,
+ 5379: 0x8640,
+ 5380: 0x8642,
+ 5381: 0x8646,
+ 5382: 0x8652,
+ 5383: 0x8653,
+ 5384: 0x8656,
+ 5385: 0x8657,
+ 5386: 0x8658,
+ 5387: 0x8659,
+ 5388: 0x865D,
+ 5389: 0x8660,
+ 5390: 0x8661,
+ 5391: 0x8662,
+ 5392: 0x8663,
+ 5393: 0x8664,
+ 5394: 0x8669,
+ 5395: 0x866C,
+ 5396: 0x866F,
+ 5397: 0x8675,
+ 5398: 0x8676,
+ 5399: 0x8677,
+ 5400: 0x867A,
+ 5401: 0x868D,
+ 5402: 0x8691,
+ 5403: 0x8696,
+ 5404: 0x8698,
+ 5405: 0x869A,
+ 5406: 0x869C,
+ 5407: 0x86A1,
+ 5408: 0x86A6,
+ 5409: 0x86A7,
+ 5410: 0x86A8,
+ 5411: 0x86AD,
+ 5412: 0x86B1,
+ 5413: 0x86B3,
+ 5414: 0x86B4,
+ 5415: 0x86B5,
+ 5416: 0x86B7,
+ 5417: 0x86B8,
+ 5418: 0x86B9,
+ 5419: 0x86BF,
+ 5420: 0x86C0,
+ 5421: 0x86C1,
+ 5422: 0x86C3,
+ 5423: 0x86C5,
+ 5424: 0x86D1,
+ 5425: 0x86D2,
+ 5426: 0x86D5,
+ 5427: 0x86D7,
+ 5428: 0x86DA,
+ 5429: 0x86DC,
+ 5430: 0x86E0,
+ 5431: 0x86E3,
+ 5432: 0x86E5,
+ 5433: 0x86E7,
+ 5434: 0x8688,
+ 5435: 0x86FA,
+ 5436: 0x86FC,
+ 5437: 0x86FD,
+ 5438: 0x8704,
+ 5439: 0x8705,
+ 5440: 0x8707,
+ 5441: 0x870B,
+ 5442: 0x870E,
+ 5443: 0x870F,
+ 5444: 0x8710,
+ 5445: 0x8713,
+ 5446: 0x8714,
+ 5447: 0x8719,
+ 5448: 0x871E,
+ 5449: 0x871F,
+ 5450: 0x8721,
+ 5451: 0x8723,
+ 5452: 0x8728,
+ 5453: 0x872E,
+ 5454: 0x872F,
+ 5455: 0x8731,
+ 5456: 0x8732,
+ 5457: 0x8739,
+ 5458: 0x873A,
+ 5459: 0x873C,
+ 5460: 0x873D,
+ 5461: 0x873E,
+ 5462: 0x8740,
+ 5463: 0x8743,
+ 5464: 0x8745,
+ 5465: 0x874D,
+ 5466: 0x8758,
+ 5467: 0x875D,
+ 5468: 0x8761,
+ 5469: 0x8764,
+ 5470: 0x8765,
+ 5471: 0x876F,
+ 5472: 0x8771,
+ 5473: 0x8772,
+ 5474: 0x877B,
+ 5475: 0x8783,
+ 5476: 0x8784,
+ 5477: 0x8785,
+ 5478: 0x8786,
+ 5479: 0x8787,
+ 5480: 0x8788,
+ 5481: 0x8789,
+ 5482: 0x878B,
+ 5483: 0x878C,
+ 5484: 0x8790,
+ 5485: 0x8793,
+ 5486: 0x8795,
+ 5487: 0x8797,
+ 5488: 0x8798,
+ 5489: 0x8799,
+ 5490: 0x879E,
+ 5491: 0x87A0,
+ 5492: 0x87A3,
+ 5493: 0x87A7,
+ 5494: 0x87AC,
+ 5495: 0x87AD,
+ 5496: 0x87AE,
+ 5497: 0x87B1,
+ 5498: 0x87B5,
+ 5499: 0x87BE,
+ 5500: 0x87BF,
+ 5501: 0x87C1,
+ 5502: 0x87C8,
+ 5503: 0x87C9,
+ 5504: 0x87CA,
+ 5505: 0x87CE,
+ 5506: 0x87D5,
+ 5507: 0x87D6,
+ 5508: 0x87D9,
+ 5509: 0x87DA,
+ 5510: 0x87DC,
+ 5511: 0x87DF,
+ 5512: 0x87E2,
+ 5513: 0x87E3,
+ 5514: 0x87E4,
+ 5515: 0x87EA,
+ 5516: 0x87EB,
+ 5517: 0x87ED,
+ 5518: 0x87F1,
+ 5519: 0x87F3,
+ 5520: 0x87F8,
+ 5521: 0x87FA,
+ 5522: 0x87FF,
+ 5523: 0x8801,
+ 5524: 0x8803,
+ 5525: 0x8806,
+ 5526: 0x8809,
+ 5527: 0x880A,
+ 5528: 0x880B,
+ 5529: 0x8810,
+ 5530: 0x8819,
+ 5531: 0x8812,
+ 5532: 0x8813,
+ 5533: 0x8814,
+ 5534: 0x8818,
+ 5535: 0x881A,
+ 5536: 0x881B,
+ 5537: 0x881C,
+ 5538: 0x881E,
+ 5539: 0x881F,
+ 5540: 0x8828,
+ 5541: 0x882D,
+ 5542: 0x882E,
+ 5543: 0x8830,
+ 5544: 0x8832,
+ 5545: 0x8835,
+ 5546: 0x883A,
+ 5547: 0x883C,
+ 5548: 0x8841,
+ 5549: 0x8843,
+ 5550: 0x8845,
+ 5551: 0x8848,
+ 5552: 0x8849,
+ 5553: 0x884A,
+ 5554: 0x884B,
+ 5555: 0x884E,
+ 5556: 0x8851,
+ 5557: 0x8855,
+ 5558: 0x8856,
+ 5559: 0x8858,
+ 5560: 0x885A,
+ 5561: 0x885C,
+ 5562: 0x885F,
+ 5563: 0x8860,
+ 5564: 0x8864,
+ 5565: 0x8869,
+ 5566: 0x8871,
+ 5567: 0x8879,
+ 5568: 0x887B,
+ 5569: 0x8880,
+ 5570: 0x8898,
+ 5571: 0x889A,
+ 5572: 0x889B,
+ 5573: 0x889C,
+ 5574: 0x889F,
+ 5575: 0x88A0,
+ 5576: 0x88A8,
+ 5577: 0x88AA,
+ 5578: 0x88BA,
+ 5579: 0x88BD,
+ 5580: 0x88BE,
+ 5581: 0x88C0,
+ 5582: 0x88CA,
+ 5583: 0x88CB,
+ 5584: 0x88CC,
+ 5585: 0x88CD,
+ 5586: 0x88CE,
+ 5587: 0x88D1,
+ 5588: 0x88D2,
+ 5589: 0x88D3,
+ 5590: 0x88DB,
+ 5591: 0x88DE,
+ 5592: 0x88E7,
+ 5593: 0x88EF,
+ 5594: 0x88F0,
+ 5595: 0x88F1,
+ 5596: 0x88F5,
+ 5597: 0x88F7,
+ 5598: 0x8901,
+ 5599: 0x8906,
+ 5600: 0x890D,
+ 5601: 0x890E,
+ 5602: 0x890F,
+ 5603: 0x8915,
+ 5604: 0x8916,
+ 5605: 0x8918,
+ 5606: 0x8919,
+ 5607: 0x891A,
+ 5608: 0x891C,
+ 5609: 0x8920,
+ 5610: 0x8926,
+ 5611: 0x8927,
+ 5612: 0x8928,
+ 5613: 0x8930,
+ 5614: 0x8931,
+ 5615: 0x8932,
+ 5616: 0x8935,
+ 5617: 0x8939,
+ 5618: 0x893A,
+ 5619: 0x893E,
+ 5620: 0x8940,
+ 5621: 0x8942,
+ 5622: 0x8945,
+ 5623: 0x8946,
+ 5624: 0x8949,
+ 5625: 0x894F,
+ 5626: 0x8952,
+ 5627: 0x8957,
+ 5628: 0x895A,
+ 5629: 0x895B,
+ 5630: 0x895C,
+ 5631: 0x8961,
+ 5632: 0x8962,
+ 5633: 0x8963,
+ 5634: 0x896B,
+ 5635: 0x896E,
+ 5636: 0x8970,
+ 5637: 0x8973,
+ 5638: 0x8975,
+ 5639: 0x897A,
+ 5640: 0x897B,
+ 5641: 0x897C,
+ 5642: 0x897D,
+ 5643: 0x8989,
+ 5644: 0x898D,
+ 5645: 0x8990,
+ 5646: 0x8994,
+ 5647: 0x8995,
+ 5648: 0x899B,
+ 5649: 0x899C,
+ 5650: 0x899F,
+ 5651: 0x89A0,
+ 5652: 0x89A5,
+ 5653: 0x89B0,
+ 5654: 0x89B4,
+ 5655: 0x89B5,
+ 5656: 0x89B6,
+ 5657: 0x89B7,
+ 5658: 0x89BC,
+ 5659: 0x89D4,
+ 5660: 0x89D5,
+ 5661: 0x89D6,
+ 5662: 0x89D7,
+ 5663: 0x89D8,
+ 5664: 0x89E5,
+ 5665: 0x89E9,
+ 5666: 0x89EB,
+ 5667: 0x89ED,
+ 5668: 0x89F1,
+ 5669: 0x89F3,
+ 5670: 0x89F6,
+ 5671: 0x89F9,
+ 5672: 0x89FD,
+ 5673: 0x89FF,
+ 5674: 0x8A04,
+ 5675: 0x8A05,
+ 5676: 0x8A07,
+ 5677: 0x8A0F,
+ 5678: 0x8A11,
+ 5679: 0x8A12,
+ 5680: 0x8A14,
+ 5681: 0x8A15,
+ 5682: 0x8A1E,
+ 5683: 0x8A20,
+ 5684: 0x8A22,
+ 5685: 0x8A24,
+ 5686: 0x8A26,
+ 5687: 0x8A2B,
+ 5688: 0x8A2C,
+ 5689: 0x8A2F,
+ 5690: 0x8A35,
+ 5691: 0x8A37,
+ 5692: 0x8A3D,
+ 5693: 0x8A3E,
+ 5694: 0x8A40,
+ 5695: 0x8A43,
+ 5696: 0x8A45,
+ 5697: 0x8A47,
+ 5698: 0x8A49,
+ 5699: 0x8A4D,
+ 5700: 0x8A4E,
+ 5701: 0x8A53,
+ 5702: 0x8A56,
+ 5703: 0x8A57,
+ 5704: 0x8A58,
+ 5705: 0x8A5C,
+ 5706: 0x8A5D,
+ 5707: 0x8A61,
+ 5708: 0x8A65,
+ 5709: 0x8A67,
+ 5710: 0x8A75,
+ 5711: 0x8A76,
+ 5712: 0x8A77,
+ 5713: 0x8A79,
+ 5714: 0x8A7A,
+ 5715: 0x8A7B,
+ 5716: 0x8A7E,
+ 5717: 0x8A7F,
+ 5718: 0x8A80,
+ 5719: 0x8A83,
+ 5720: 0x8A86,
+ 5721: 0x8A8B,
+ 5722: 0x8A8F,
+ 5723: 0x8A90,
+ 5724: 0x8A92,
+ 5725: 0x8A96,
+ 5726: 0x8A97,
+ 5727: 0x8A99,
+ 5728: 0x8A9F,
+ 5729: 0x8AA7,
+ 5730: 0x8AA9,
+ 5731: 0x8AAE,
+ 5732: 0x8AAF,
+ 5733: 0x8AB3,
+ 5734: 0x8AB6,
+ 5735: 0x8AB7,
+ 5736: 0x8ABB,
+ 5737: 0x8ABE,
+ 5738: 0x8AC3,
+ 5739: 0x8AC6,
+ 5740: 0x8AC8,
+ 5741: 0x8AC9,
+ 5742: 0x8ACA,
+ 5743: 0x8AD1,
+ 5744: 0x8AD3,
+ 5745: 0x8AD4,
+ 5746: 0x8AD5,
+ 5747: 0x8AD7,
+ 5748: 0x8ADD,
+ 5749: 0x8ADF,
+ 5750: 0x8AEC,
+ 5751: 0x8AF0,
+ 5752: 0x8AF4,
+ 5753: 0x8AF5,
+ 5754: 0x8AF6,
+ 5755: 0x8AFC,
+ 5756: 0x8AFF,
+ 5757: 0x8B05,
+ 5758: 0x8B06,
+ 5759: 0x8B0B,
+ 5760: 0x8B11,
+ 5761: 0x8B1C,
+ 5762: 0x8B1E,
+ 5763: 0x8B1F,
+ 5764: 0x8B0A,
+ 5765: 0x8B2D,
+ 5766: 0x8B30,
+ 5767: 0x8B37,
+ 5768: 0x8B3C,
+ 5769: 0x8B42,
+ 5770: 0x8B43,
+ 5771: 0x8B44,
+ 5772: 0x8B45,
+ 5773: 0x8B46,
+ 5774: 0x8B48,
+ 5775: 0x8B52,
+ 5776: 0x8B53,
+ 5777: 0x8B54,
+ 5778: 0x8B59,
+ 5779: 0x8B4D,
+ 5780: 0x8B5E,
+ 5781: 0x8B63,
+ 5782: 0x8B6D,
+ 5783: 0x8B76,
+ 5784: 0x8B78,
+ 5785: 0x8B79,
+ 5786: 0x8B7C,
+ 5787: 0x8B7E,
+ 5788: 0x8B81,
+ 5789: 0x8B84,
+ 5790: 0x8B85,
+ 5791: 0x8B8B,
+ 5792: 0x8B8D,
+ 5793: 0x8B8F,
+ 5794: 0x8B94,
+ 5795: 0x8B95,
+ 5796: 0x8B9C,
+ 5797: 0x8B9E,
+ 5798: 0x8B9F,
+ 5799: 0x8C38,
+ 5800: 0x8C39,
+ 5801: 0x8C3D,
+ 5802: 0x8C3E,
+ 5803: 0x8C45,
+ 5804: 0x8C47,
+ 5805: 0x8C49,
+ 5806: 0x8C4B,
+ 5807: 0x8C4F,
+ 5808: 0x8C51,
+ 5809: 0x8C53,
+ 5810: 0x8C54,
+ 5811: 0x8C57,
+ 5812: 0x8C58,
+ 5813: 0x8C5B,
+ 5814: 0x8C5D,
+ 5815: 0x8C59,
+ 5816: 0x8C63,
+ 5817: 0x8C64,
+ 5818: 0x8C66,
+ 5819: 0x8C68,
+ 5820: 0x8C69,
+ 5821: 0x8C6D,
+ 5822: 0x8C73,
+ 5823: 0x8C75,
+ 5824: 0x8C76,
+ 5825: 0x8C7B,
+ 5826: 0x8C7E,
+ 5827: 0x8C86,
+ 5828: 0x8C87,
+ 5829: 0x8C8B,
+ 5830: 0x8C90,
+ 5831: 0x8C92,
+ 5832: 0x8C93,
+ 5833: 0x8C99,
+ 5834: 0x8C9B,
+ 5835: 0x8C9C,
+ 5836: 0x8CA4,
+ 5837: 0x8CB9,
+ 5838: 0x8CBA,
+ 5839: 0x8CC5,
+ 5840: 0x8CC6,
+ 5841: 0x8CC9,
+ 5842: 0x8CCB,
+ 5843: 0x8CCF,
+ 5844: 0x8CD6,
+ 5845: 0x8CD5,
+ 5846: 0x8CD9,
+ 5847: 0x8CDD,
+ 5848: 0x8CE1,
+ 5849: 0x8CE8,
+ 5850: 0x8CEC,
+ 5851: 0x8CEF,
+ 5852: 0x8CF0,
+ 5853: 0x8CF2,
+ 5854: 0x8CF5,
+ 5855: 0x8CF7,
+ 5856: 0x8CF8,
+ 5857: 0x8CFE,
+ 5858: 0x8CFF,
+ 5859: 0x8D01,
+ 5860: 0x8D03,
+ 5861: 0x8D09,
+ 5862: 0x8D12,
+ 5863: 0x8D17,
+ 5864: 0x8D1B,
+ 5865: 0x8D65,
+ 5866: 0x8D69,
+ 5867: 0x8D6C,
+ 5868: 0x8D6E,
+ 5869: 0x8D7F,
+ 5870: 0x8D82,
+ 5871: 0x8D84,
+ 5872: 0x8D88,
+ 5873: 0x8D8D,
+ 5874: 0x8D90,
+ 5875: 0x8D91,
+ 5876: 0x8D95,
+ 5877: 0x8D9E,
+ 5878: 0x8D9F,
+ 5879: 0x8DA0,
+ 5880: 0x8DA6,
+ 5881: 0x8DAB,
+ 5882: 0x8DAC,
+ 5883: 0x8DAF,
+ 5884: 0x8DB2,
+ 5885: 0x8DB5,
+ 5886: 0x8DB7,
+ 5887: 0x8DB9,
+ 5888: 0x8DBB,
+ 5889: 0x8DC0,
+ 5890: 0x8DC5,
+ 5891: 0x8DC6,
+ 5892: 0x8DC7,
+ 5893: 0x8DC8,
+ 5894: 0x8DCA,
+ 5895: 0x8DCE,
+ 5896: 0x8DD1,
+ 5897: 0x8DD4,
+ 5898: 0x8DD5,
+ 5899: 0x8DD7,
+ 5900: 0x8DD9,
+ 5901: 0x8DE4,
+ 5902: 0x8DE5,
+ 5903: 0x8DE7,
+ 5904: 0x8DEC,
+ 5905: 0x8DF0,
+ 5906: 0x8DBC,
+ 5907: 0x8DF1,
+ 5908: 0x8DF2,
+ 5909: 0x8DF4,
+ 5910: 0x8DFD,
+ 5911: 0x8E01,
+ 5912: 0x8E04,
+ 5913: 0x8E05,
+ 5914: 0x8E06,
+ 5915: 0x8E0B,
+ 5916: 0x8E11,
+ 5917: 0x8E14,
+ 5918: 0x8E16,
+ 5919: 0x8E20,
+ 5920: 0x8E21,
+ 5921: 0x8E22,
+ 5922: 0x8E23,
+ 5923: 0x8E26,
+ 5924: 0x8E27,
+ 5925: 0x8E31,
+ 5926: 0x8E33,
+ 5927: 0x8E36,
+ 5928: 0x8E37,
+ 5929: 0x8E38,
+ 5930: 0x8E39,
+ 5931: 0x8E3D,
+ 5932: 0x8E40,
+ 5933: 0x8E41,
+ 5934: 0x8E4B,
+ 5935: 0x8E4D,
+ 5936: 0x8E4E,
+ 5937: 0x8E4F,
+ 5938: 0x8E54,
+ 5939: 0x8E5B,
+ 5940: 0x8E5C,
+ 5941: 0x8E5D,
+ 5942: 0x8E5E,
+ 5943: 0x8E61,
+ 5944: 0x8E62,
+ 5945: 0x8E69,
+ 5946: 0x8E6C,
+ 5947: 0x8E6D,
+ 5948: 0x8E6F,
+ 5949: 0x8E70,
+ 5950: 0x8E71,
+ 5951: 0x8E79,
+ 5952: 0x8E7A,
+ 5953: 0x8E7B,
+ 5954: 0x8E82,
+ 5955: 0x8E83,
+ 5956: 0x8E89,
+ 5957: 0x8E90,
+ 5958: 0x8E92,
+ 5959: 0x8E95,
+ 5960: 0x8E9A,
+ 5961: 0x8E9B,
+ 5962: 0x8E9D,
+ 5963: 0x8E9E,
+ 5964: 0x8EA2,
+ 5965: 0x8EA7,
+ 5966: 0x8EA9,
+ 5967: 0x8EAD,
+ 5968: 0x8EAE,
+ 5969: 0x8EB3,
+ 5970: 0x8EB5,
+ 5971: 0x8EBA,
+ 5972: 0x8EBB,
+ 5973: 0x8EC0,
+ 5974: 0x8EC1,
+ 5975: 0x8EC3,
+ 5976: 0x8EC4,
+ 5977: 0x8EC7,
+ 5978: 0x8ECF,
+ 5979: 0x8ED1,
+ 5980: 0x8ED4,
+ 5981: 0x8EDC,
+ 5982: 0x8EE8,
+ 5983: 0x8EEE,
+ 5984: 0x8EF0,
+ 5985: 0x8EF1,
+ 5986: 0x8EF7,
+ 5987: 0x8EF9,
+ 5988: 0x8EFA,
+ 5989: 0x8EED,
+ 5990: 0x8F00,
+ 5991: 0x8F02,
+ 5992: 0x8F07,
+ 5993: 0x8F08,
+ 5994: 0x8F0F,
+ 5995: 0x8F10,
+ 5996: 0x8F16,
+ 5997: 0x8F17,
+ 5998: 0x8F18,
+ 5999: 0x8F1E,
+ 6000: 0x8F20,
+ 6001: 0x8F21,
+ 6002: 0x8F23,
+ 6003: 0x8F25,
+ 6004: 0x8F27,
+ 6005: 0x8F28,
+ 6006: 0x8F2C,
+ 6007: 0x8F2D,
+ 6008: 0x8F2E,
+ 6009: 0x8F34,
+ 6010: 0x8F35,
+ 6011: 0x8F36,
+ 6012: 0x8F37,
+ 6013: 0x8F3A,
+ 6014: 0x8F40,
+ 6015: 0x8F41,
+ 6016: 0x8F43,
+ 6017: 0x8F47,
+ 6018: 0x8F4F,
+ 6019: 0x8F51,
+ 6020: 0x8F52,
+ 6021: 0x8F53,
+ 6022: 0x8F54,
+ 6023: 0x8F55,
+ 6024: 0x8F58,
+ 6025: 0x8F5D,
+ 6026: 0x8F5E,
+ 6027: 0x8F65,
+ 6028: 0x8F9D,
+ 6029: 0x8FA0,
+ 6030: 0x8FA1,
+ 6031: 0x8FA4,
+ 6032: 0x8FA5,
+ 6033: 0x8FA6,
+ 6034: 0x8FB5,
+ 6035: 0x8FB6,
+ 6036: 0x8FB8,
+ 6037: 0x8FBE,
+ 6038: 0x8FC0,
+ 6039: 0x8FC1,
+ 6040: 0x8FC6,
+ 6041: 0x8FCA,
+ 6042: 0x8FCB,
+ 6043: 0x8FCD,
+ 6044: 0x8FD0,
+ 6045: 0x8FD2,
+ 6046: 0x8FD3,
+ 6047: 0x8FD5,
+ 6048: 0x8FE0,
+ 6049: 0x8FE3,
+ 6050: 0x8FE4,
+ 6051: 0x8FE8,
+ 6052: 0x8FEE,
+ 6053: 0x8FF1,
+ 6054: 0x8FF5,
+ 6055: 0x8FF6,
+ 6056: 0x8FFB,
+ 6057: 0x8FFE,
+ 6058: 0x9002,
+ 6059: 0x9004,
+ 6060: 0x9008,
+ 6061: 0x900C,
+ 6062: 0x9018,
+ 6063: 0x901B,
+ 6064: 0x9028,
+ 6065: 0x9029,
+ 6066: 0x902F,
+ 6067: 0x902A,
+ 6068: 0x902C,
+ 6069: 0x902D,
+ 6070: 0x9033,
+ 6071: 0x9034,
+ 6072: 0x9037,
+ 6073: 0x903F,
+ 6074: 0x9043,
+ 6075: 0x9044,
+ 6076: 0x904C,
+ 6077: 0x905B,
+ 6078: 0x905D,
+ 6079: 0x9062,
+ 6080: 0x9066,
+ 6081: 0x9067,
+ 6082: 0x906C,
+ 6083: 0x9070,
+ 6084: 0x9074,
+ 6085: 0x9079,
+ 6086: 0x9085,
+ 6087: 0x9088,
+ 6088: 0x908B,
+ 6089: 0x908C,
+ 6090: 0x908E,
+ 6091: 0x9090,
+ 6092: 0x9095,
+ 6093: 0x9097,
+ 6094: 0x9098,
+ 6095: 0x9099,
+ 6096: 0x909B,
+ 6097: 0x90A0,
+ 6098: 0x90A1,
+ 6099: 0x90A2,
+ 6100: 0x90A5,
+ 6101: 0x90B0,
+ 6102: 0x90B2,
+ 6103: 0x90B3,
+ 6104: 0x90B4,
+ 6105: 0x90B6,
+ 6106: 0x90BD,
+ 6107: 0x90CC,
+ 6108: 0x90BE,
+ 6109: 0x90C3,
+ 6110: 0x90C4,
+ 6111: 0x90C5,
+ 6112: 0x90C7,
+ 6113: 0x90C8,
+ 6114: 0x90D5,
+ 6115: 0x90D7,
+ 6116: 0x90D8,
+ 6117: 0x90D9,
+ 6118: 0x90DC,
+ 6119: 0x90DD,
+ 6120: 0x90DF,
+ 6121: 0x90E5,
+ 6122: 0x90D2,
+ 6123: 0x90F6,
+ 6124: 0x90EB,
+ 6125: 0x90EF,
+ 6126: 0x90F0,
+ 6127: 0x90F4,
+ 6128: 0x90FE,
+ 6129: 0x90FF,
+ 6130: 0x9100,
+ 6131: 0x9104,
+ 6132: 0x9105,
+ 6133: 0x9106,
+ 6134: 0x9108,
+ 6135: 0x910D,
+ 6136: 0x9110,
+ 6137: 0x9114,
+ 6138: 0x9116,
+ 6139: 0x9117,
+ 6140: 0x9118,
+ 6141: 0x911A,
+ 6142: 0x911C,
+ 6143: 0x911E,
+ 6144: 0x9120,
+ 6145: 0x9125,
+ 6146: 0x9122,
+ 6147: 0x9123,
+ 6148: 0x9127,
+ 6149: 0x9129,
+ 6150: 0x912E,
+ 6151: 0x912F,
+ 6152: 0x9131,
+ 6153: 0x9134,
+ 6154: 0x9136,
+ 6155: 0x9137,
+ 6156: 0x9139,
+ 6157: 0x913A,
+ 6158: 0x913C,
+ 6159: 0x913D,
+ 6160: 0x9143,
+ 6161: 0x9147,
+ 6162: 0x9148,
+ 6163: 0x914F,
+ 6164: 0x9153,
+ 6165: 0x9157,
+ 6166: 0x9159,
+ 6167: 0x915A,
+ 6168: 0x915B,
+ 6169: 0x9161,
+ 6170: 0x9164,
+ 6171: 0x9167,
+ 6172: 0x916D,
+ 6173: 0x9174,
+ 6174: 0x9179,
+ 6175: 0x917A,
+ 6176: 0x917B,
+ 6177: 0x9181,
+ 6178: 0x9183,
+ 6179: 0x9185,
+ 6180: 0x9186,
+ 6181: 0x918A,
+ 6182: 0x918E,
+ 6183: 0x9191,
+ 6184: 0x9193,
+ 6185: 0x9194,
+ 6186: 0x9195,
+ 6187: 0x9198,
+ 6188: 0x919E,
+ 6189: 0x91A1,
+ 6190: 0x91A6,
+ 6191: 0x91A8,
+ 6192: 0x91AC,
+ 6193: 0x91AD,
+ 6194: 0x91AE,
+ 6195: 0x91B0,
+ 6196: 0x91B1,
+ 6197: 0x91B2,
+ 6198: 0x91B3,
+ 6199: 0x91B6,
+ 6200: 0x91BB,
+ 6201: 0x91BC,
+ 6202: 0x91BD,
+ 6203: 0x91BF,
+ 6204: 0x91C2,
+ 6205: 0x91C3,
+ 6206: 0x91C5,
+ 6207: 0x91D3,
+ 6208: 0x91D4,
+ 6209: 0x91D7,
+ 6210: 0x91D9,
+ 6211: 0x91DA,
+ 6212: 0x91DE,
+ 6213: 0x91E4,
+ 6214: 0x91E5,
+ 6215: 0x91E9,
+ 6216: 0x91EA,
+ 6217: 0x91EC,
+ 6218: 0x91ED,
+ 6219: 0x91EE,
+ 6220: 0x91EF,
+ 6221: 0x91F0,
+ 6222: 0x91F1,
+ 6223: 0x91F7,
+ 6224: 0x91F9,
+ 6225: 0x91FB,
+ 6226: 0x91FD,
+ 6227: 0x9200,
+ 6228: 0x9201,
+ 6229: 0x9204,
+ 6230: 0x9205,
+ 6231: 0x9206,
+ 6232: 0x9207,
+ 6233: 0x9209,
+ 6234: 0x920A,
+ 6235: 0x920C,
+ 6236: 0x9210,
+ 6237: 0x9212,
+ 6238: 0x9213,
+ 6239: 0x9216,
+ 6240: 0x9218,
+ 6241: 0x921C,
+ 6242: 0x921D,
+ 6243: 0x9223,
+ 6244: 0x9224,
+ 6245: 0x9225,
+ 6246: 0x9226,
+ 6247: 0x9228,
+ 6248: 0x922E,
+ 6249: 0x922F,
+ 6250: 0x9230,
+ 6251: 0x9233,
+ 6252: 0x9235,
+ 6253: 0x9236,
+ 6254: 0x9238,
+ 6255: 0x9239,
+ 6256: 0x923A,
+ 6257: 0x923C,
+ 6258: 0x923E,
+ 6259: 0x9240,
+ 6260: 0x9242,
+ 6261: 0x9243,
+ 6262: 0x9246,
+ 6263: 0x9247,
+ 6264: 0x924A,
+ 6265: 0x924D,
+ 6266: 0x924E,
+ 6267: 0x924F,
+ 6268: 0x9251,
+ 6269: 0x9258,
+ 6270: 0x9259,
+ 6271: 0x925C,
+ 6272: 0x925D,
+ 6273: 0x9260,
+ 6274: 0x9261,
+ 6275: 0x9265,
+ 6276: 0x9267,
+ 6277: 0x9268,
+ 6278: 0x9269,
+ 6279: 0x926E,
+ 6280: 0x926F,
+ 6281: 0x9270,
+ 6282: 0x9275,
+ 6283: 0x9276,
+ 6284: 0x9277,
+ 6285: 0x9278,
+ 6286: 0x9279,
+ 6287: 0x927B,
+ 6288: 0x927C,
+ 6289: 0x927D,
+ 6290: 0x927F,
+ 6291: 0x9288,
+ 6292: 0x9289,
+ 6293: 0x928A,
+ 6294: 0x928D,
+ 6295: 0x928E,
+ 6296: 0x9292,
+ 6297: 0x9297,
+ 6298: 0x9299,
+ 6299: 0x929F,
+ 6300: 0x92A0,
+ 6301: 0x92A4,
+ 6302: 0x92A5,
+ 6303: 0x92A7,
+ 6304: 0x92A8,
+ 6305: 0x92AB,
+ 6306: 0x92AF,
+ 6307: 0x92B2,
+ 6308: 0x92B6,
+ 6309: 0x92B8,
+ 6310: 0x92BA,
+ 6311: 0x92BB,
+ 6312: 0x92BC,
+ 6313: 0x92BD,
+ 6314: 0x92BF,
+ 6315: 0x92C0,
+ 6316: 0x92C1,
+ 6317: 0x92C2,
+ 6318: 0x92C3,
+ 6319: 0x92C5,
+ 6320: 0x92C6,
+ 6321: 0x92C7,
+ 6322: 0x92C8,
+ 6323: 0x92CB,
+ 6324: 0x92CC,
+ 6325: 0x92CD,
+ 6326: 0x92CE,
+ 6327: 0x92D0,
+ 6328: 0x92D3,
+ 6329: 0x92D5,
+ 6330: 0x92D7,
+ 6331: 0x92D8,
+ 6332: 0x92D9,
+ 6333: 0x92DC,
+ 6334: 0x92DD,
+ 6335: 0x92DF,
+ 6336: 0x92E0,
+ 6337: 0x92E1,
+ 6338: 0x92E3,
+ 6339: 0x92E5,
+ 6340: 0x92E7,
+ 6341: 0x92E8,
+ 6342: 0x92EC,
+ 6343: 0x92EE,
+ 6344: 0x92F0,
+ 6345: 0x92F9,
+ 6346: 0x92FB,
+ 6347: 0x92FF,
+ 6348: 0x9300,
+ 6349: 0x9302,
+ 6350: 0x9308,
+ 6351: 0x930D,
+ 6352: 0x9311,
+ 6353: 0x9314,
+ 6354: 0x9315,
+ 6355: 0x931C,
+ 6356: 0x931D,
+ 6357: 0x931E,
+ 6358: 0x931F,
+ 6359: 0x9321,
+ 6360: 0x9324,
+ 6361: 0x9325,
+ 6362: 0x9327,
+ 6363: 0x9329,
+ 6364: 0x932A,
+ 6365: 0x9333,
+ 6366: 0x9334,
+ 6367: 0x9336,
+ 6368: 0x9337,
+ 6369: 0x9347,
+ 6370: 0x9348,
+ 6371: 0x9349,
+ 6372: 0x9350,
+ 6373: 0x9351,
+ 6374: 0x9352,
+ 6375: 0x9355,
+ 6376: 0x9357,
+ 6377: 0x9358,
+ 6378: 0x935A,
+ 6379: 0x935E,
+ 6380: 0x9364,
+ 6381: 0x9365,
+ 6382: 0x9367,
+ 6383: 0x9369,
+ 6384: 0x936A,
+ 6385: 0x936D,
+ 6386: 0x936F,
+ 6387: 0x9370,
+ 6388: 0x9371,
+ 6389: 0x9373,
+ 6390: 0x9374,
+ 6391: 0x9376,
+ 6392: 0x937A,
+ 6393: 0x937D,
+ 6394: 0x937F,
+ 6395: 0x9380,
+ 6396: 0x9381,
+ 6397: 0x9382,
+ 6398: 0x9388,
+ 6399: 0x938A,
+ 6400: 0x938B,
+ 6401: 0x938D,
+ 6402: 0x938F,
+ 6403: 0x9392,
+ 6404: 0x9395,
+ 6405: 0x9398,
+ 6406: 0x939B,
+ 6407: 0x939E,
+ 6408: 0x93A1,
+ 6409: 0x93A3,
+ 6410: 0x93A4,
+ 6411: 0x93A6,
+ 6412: 0x93A8,
+ 6413: 0x93AB,
+ 6414: 0x93B4,
+ 6415: 0x93B5,
+ 6416: 0x93B6,
+ 6417: 0x93BA,
+ 6418: 0x93A9,
+ 6419: 0x93C1,
+ 6420: 0x93C4,
+ 6421: 0x93C5,
+ 6422: 0x93C6,
+ 6423: 0x93C7,
+ 6424: 0x93C9,
+ 6425: 0x93CA,
+ 6426: 0x93CB,
+ 6427: 0x93CC,
+ 6428: 0x93CD,
+ 6429: 0x93D3,
+ 6430: 0x93D9,
+ 6431: 0x93DC,
+ 6432: 0x93DE,
+ 6433: 0x93DF,
+ 6434: 0x93E2,
+ 6435: 0x93E6,
+ 6436: 0x93E7,
+ 6437: 0x93F9,
+ 6438: 0x93F7,
+ 6439: 0x93F8,
+ 6440: 0x93FA,
+ 6441: 0x93FB,
+ 6442: 0x93FD,
+ 6443: 0x9401,
+ 6444: 0x9402,
+ 6445: 0x9404,
+ 6446: 0x9408,
+ 6447: 0x9409,
+ 6448: 0x940D,
+ 6449: 0x940E,
+ 6450: 0x940F,
+ 6451: 0x9415,
+ 6452: 0x9416,
+ 6453: 0x9417,
+ 6454: 0x941F,
+ 6455: 0x942E,
+ 6456: 0x942F,
+ 6457: 0x9431,
+ 6458: 0x9432,
+ 6459: 0x9433,
+ 6460: 0x9434,
+ 6461: 0x943B,
+ 6462: 0x943F,
+ 6463: 0x943D,
+ 6464: 0x9443,
+ 6465: 0x9445,
+ 6466: 0x9448,
+ 6467: 0x944A,
+ 6468: 0x944C,
+ 6469: 0x9455,
+ 6470: 0x9459,
+ 6471: 0x945C,
+ 6472: 0x945F,
+ 6473: 0x9461,
+ 6474: 0x9463,
+ 6475: 0x9468,
+ 6476: 0x946B,
+ 6477: 0x946D,
+ 6478: 0x946E,
+ 6479: 0x946F,
+ 6480: 0x9471,
+ 6481: 0x9472,
+ 6482: 0x9484,
+ 6483: 0x9483,
+ 6484: 0x9578,
+ 6485: 0x9579,
+ 6486: 0x957E,
+ 6487: 0x9584,
+ 6488: 0x9588,
+ 6489: 0x958C,
+ 6490: 0x958D,
+ 6491: 0x958E,
+ 6492: 0x959D,
+ 6493: 0x959E,
+ 6494: 0x959F,
+ 6495: 0x95A1,
+ 6496: 0x95A6,
+ 6497: 0x95A9,
+ 6498: 0x95AB,
+ 6499: 0x95AC,
+ 6500: 0x95B4,
+ 6501: 0x95B6,
+ 6502: 0x95BA,
+ 6503: 0x95BD,
+ 6504: 0x95BF,
+ 6505: 0x95C6,
+ 6506: 0x95C8,
+ 6507: 0x95C9,
+ 6508: 0x95CB,
+ 6509: 0x95D0,
+ 6510: 0x95D1,
+ 6511: 0x95D2,
+ 6512: 0x95D3,
+ 6513: 0x95D9,
+ 6514: 0x95DA,
+ 6515: 0x95DD,
+ 6516: 0x95DE,
+ 6517: 0x95DF,
+ 6518: 0x95E0,
+ 6519: 0x95E4,
+ 6520: 0x95E6,
+ 6521: 0x961D,
+ 6522: 0x961E,
+ 6523: 0x9622,
+ 6524: 0x9624,
+ 6525: 0x9625,
+ 6526: 0x9626,
+ 6527: 0x962C,
+ 6528: 0x9631,
+ 6529: 0x9633,
+ 6530: 0x9637,
+ 6531: 0x9638,
+ 6532: 0x9639,
+ 6533: 0x963A,
+ 6534: 0x963C,
+ 6535: 0x963D,
+ 6536: 0x9641,
+ 6537: 0x9652,
+ 6538: 0x9654,
+ 6539: 0x9656,
+ 6540: 0x9657,
+ 6541: 0x9658,
+ 6542: 0x9661,
+ 6543: 0x966E,
+ 6544: 0x9674,
+ 6545: 0x967B,
+ 6546: 0x967C,
+ 6547: 0x967E,
+ 6548: 0x967F,
+ 6549: 0x9681,
+ 6550: 0x9682,
+ 6551: 0x9683,
+ 6552: 0x9684,
+ 6553: 0x9689,
+ 6554: 0x9691,
+ 6555: 0x9696,
+ 6556: 0x969A,
+ 6557: 0x969D,
+ 6558: 0x969F,
+ 6559: 0x96A4,
+ 6560: 0x96A5,
+ 6561: 0x96A6,
+ 6562: 0x96A9,
+ 6563: 0x96AE,
+ 6564: 0x96AF,
+ 6565: 0x96B3,
+ 6566: 0x96BA,
+ 6567: 0x96CA,
+ 6568: 0x96D2,
+ 6569: 0x5DB2,
+ 6570: 0x96D8,
+ 6571: 0x96DA,
+ 6572: 0x96DD,
+ 6573: 0x96DE,
+ 6574: 0x96DF,
+ 6575: 0x96E9,
+ 6576: 0x96EF,
+ 6577: 0x96F1,
+ 6578: 0x96FA,
+ 6579: 0x9702,
+ 6580: 0x9703,
+ 6581: 0x9705,
+ 6582: 0x9709,
+ 6583: 0x971A,
+ 6584: 0x971B,
+ 6585: 0x971D,
+ 6586: 0x9721,
+ 6587: 0x9722,
+ 6588: 0x9723,
+ 6589: 0x9728,
+ 6590: 0x9731,
+ 6591: 0x9733,
+ 6592: 0x9741,
+ 6593: 0x9743,
+ 6594: 0x974A,
+ 6595: 0x974E,
+ 6596: 0x974F,
+ 6597: 0x9755,
+ 6598: 0x9757,
+ 6599: 0x9758,
+ 6600: 0x975A,
+ 6601: 0x975B,
+ 6602: 0x9763,
+ 6603: 0x9767,
+ 6604: 0x976A,
+ 6605: 0x976E,
+ 6606: 0x9773,
+ 6607: 0x9776,
+ 6608: 0x9777,
+ 6609: 0x9778,
+ 6610: 0x977B,
+ 6611: 0x977D,
+ 6612: 0x977F,
+ 6613: 0x9780,
+ 6614: 0x9789,
+ 6615: 0x9795,
+ 6616: 0x9796,
+ 6617: 0x9797,
+ 6618: 0x9799,
+ 6619: 0x979A,
+ 6620: 0x979E,
+ 6621: 0x979F,
+ 6622: 0x97A2,
+ 6623: 0x97AC,
+ 6624: 0x97AE,
+ 6625: 0x97B1,
+ 6626: 0x97B2,
+ 6627: 0x97B5,
+ 6628: 0x97B6,
+ 6629: 0x97B8,
+ 6630: 0x97B9,
+ 6631: 0x97BA,
+ 6632: 0x97BC,
+ 6633: 0x97BE,
+ 6634: 0x97BF,
+ 6635: 0x97C1,
+ 6636: 0x97C4,
+ 6637: 0x97C5,
+ 6638: 0x97C7,
+ 6639: 0x97C9,
+ 6640: 0x97CA,
+ 6641: 0x97CC,
+ 6642: 0x97CD,
+ 6643: 0x97CE,
+ 6644: 0x97D0,
+ 6645: 0x97D1,
+ 6646: 0x97D4,
+ 6647: 0x97D7,
+ 6648: 0x97D8,
+ 6649: 0x97D9,
+ 6650: 0x97DD,
+ 6651: 0x97DE,
+ 6652: 0x97E0,
+ 6653: 0x97DB,
+ 6654: 0x97E1,
+ 6655: 0x97E4,
+ 6656: 0x97EF,
+ 6657: 0x97F1,
+ 6658: 0x97F4,
+ 6659: 0x97F7,
+ 6660: 0x97F8,
+ 6661: 0x97FA,
+ 6662: 0x9807,
+ 6663: 0x980A,
+ 6664: 0x9819,
+ 6665: 0x980D,
+ 6666: 0x980E,
+ 6667: 0x9814,
+ 6668: 0x9816,
+ 6669: 0x981C,
+ 6670: 0x981E,
+ 6671: 0x9820,
+ 6672: 0x9823,
+ 6673: 0x9826,
+ 6674: 0x982B,
+ 6675: 0x982E,
+ 6676: 0x982F,
+ 6677: 0x9830,
+ 6678: 0x9832,
+ 6679: 0x9833,
+ 6680: 0x9835,
+ 6681: 0x9825,
+ 6682: 0x983E,
+ 6683: 0x9844,
+ 6684: 0x9847,
+ 6685: 0x984A,
+ 6686: 0x9851,
+ 6687: 0x9852,
+ 6688: 0x9853,
+ 6689: 0x9856,
+ 6690: 0x9857,
+ 6691: 0x9859,
+ 6692: 0x985A,
+ 6693: 0x9862,
+ 6694: 0x9863,
+ 6695: 0x9865,
+ 6696: 0x9866,
+ 6697: 0x986A,
+ 6698: 0x986C,
+ 6699: 0x98AB,
+ 6700: 0x98AD,
+ 6701: 0x98AE,
+ 6702: 0x98B0,
+ 6703: 0x98B4,
+ 6704: 0x98B7,
+ 6705: 0x98B8,
+ 6706: 0x98BA,
+ 6707: 0x98BB,
+ 6708: 0x98BF,
+ 6709: 0x98C2,
+ 6710: 0x98C5,
+ 6711: 0x98C8,
+ 6712: 0x98CC,
+ 6713: 0x98E1,
+ 6714: 0x98E3,
+ 6715: 0x98E5,
+ 6716: 0x98E6,
+ 6717: 0x98E7,
+ 6718: 0x98EA,
+ 6719: 0x98F3,
+ 6720: 0x98F6,
+ 6721: 0x9902,
+ 6722: 0x9907,
+ 6723: 0x9908,
+ 6724: 0x9911,
+ 6725: 0x9915,
+ 6726: 0x9916,
+ 6727: 0x9917,
+ 6728: 0x991A,
+ 6729: 0x991B,
+ 6730: 0x991C,
+ 6731: 0x991F,
+ 6732: 0x9922,
+ 6733: 0x9926,
+ 6734: 0x9927,
+ 6735: 0x992B,
+ 6736: 0x9931,
+ 6737: 0x9932,
+ 6738: 0x9933,
+ 6739: 0x9934,
+ 6740: 0x9935,
+ 6741: 0x9939,
+ 6742: 0x993A,
+ 6743: 0x993B,
+ 6744: 0x993C,
+ 6745: 0x9940,
+ 6746: 0x9941,
+ 6747: 0x9946,
+ 6748: 0x9947,
+ 6749: 0x9948,
+ 6750: 0x994D,
+ 6751: 0x994E,
+ 6752: 0x9954,
+ 6753: 0x9958,
+ 6754: 0x9959,
+ 6755: 0x995B,
+ 6756: 0x995C,
+ 6757: 0x995E,
+ 6758: 0x995F,
+ 6759: 0x9960,
+ 6760: 0x999B,
+ 6761: 0x999D,
+ 6762: 0x999F,
+ 6763: 0x99A6,
+ 6764: 0x99B0,
+ 6765: 0x99B1,
+ 6766: 0x99B2,
+ 6767: 0x99B5,
+ 6768: 0x99B9,
+ 6769: 0x99BA,
+ 6770: 0x99BD,
+ 6771: 0x99BF,
+ 6772: 0x99C3,
+ 6773: 0x99C9,
+ 6774: 0x99D3,
+ 6775: 0x99D4,
+ 6776: 0x99D9,
+ 6777: 0x99DA,
+ 6778: 0x99DC,
+ 6779: 0x99DE,
+ 6780: 0x99E7,
+ 6781: 0x99EA,
+ 6782: 0x99EB,
+ 6783: 0x99EC,
+ 6784: 0x99F0,
+ 6785: 0x99F4,
+ 6786: 0x99F5,
+ 6787: 0x99F9,
+ 6788: 0x99FD,
+ 6789: 0x99FE,
+ 6790: 0x9A02,
+ 6791: 0x9A03,
+ 6792: 0x9A04,
+ 6793: 0x9A0B,
+ 6794: 0x9A0C,
+ 6795: 0x9A10,
+ 6796: 0x9A11,
+ 6797: 0x9A16,
+ 6798: 0x9A1E,
+ 6799: 0x9A20,
+ 6800: 0x9A22,
+ 6801: 0x9A23,
+ 6802: 0x9A24,
+ 6803: 0x9A27,
+ 6804: 0x9A2D,
+ 6805: 0x9A2E,
+ 6806: 0x9A33,
+ 6807: 0x9A35,
+ 6808: 0x9A36,
+ 6809: 0x9A38,
+ 6810: 0x9A47,
+ 6811: 0x9A41,
+ 6812: 0x9A44,
+ 6813: 0x9A4A,
+ 6814: 0x9A4B,
+ 6815: 0x9A4C,
+ 6816: 0x9A4E,
+ 6817: 0x9A51,
+ 6818: 0x9A54,
+ 6819: 0x9A56,
+ 6820: 0x9A5D,
+ 6821: 0x9AAA,
+ 6822: 0x9AAC,
+ 6823: 0x9AAE,
+ 6824: 0x9AAF,
+ 6825: 0x9AB2,
+ 6826: 0x9AB4,
+ 6827: 0x9AB5,
+ 6828: 0x9AB6,
+ 6829: 0x9AB9,
+ 6830: 0x9ABB,
+ 6831: 0x9ABE,
+ 6832: 0x9ABF,
+ 6833: 0x9AC1,
+ 6834: 0x9AC3,
+ 6835: 0x9AC6,
+ 6836: 0x9AC8,
+ 6837: 0x9ACE,
+ 6838: 0x9AD0,
+ 6839: 0x9AD2,
+ 6840: 0x9AD5,
+ 6841: 0x9AD6,
+ 6842: 0x9AD7,
+ 6843: 0x9ADB,
+ 6844: 0x9ADC,
+ 6845: 0x9AE0,
+ 6846: 0x9AE4,
+ 6847: 0x9AE5,
+ 6848: 0x9AE7,
+ 6849: 0x9AE9,
+ 6850: 0x9AEC,
+ 6851: 0x9AF2,
+ 6852: 0x9AF3,
+ 6853: 0x9AF5,
+ 6854: 0x9AF9,
+ 6855: 0x9AFA,
+ 6856: 0x9AFD,
+ 6857: 0x9AFF,
+ 6858: 0x9B00,
+ 6859: 0x9B01,
+ 6860: 0x9B02,
+ 6861: 0x9B03,
+ 6862: 0x9B04,
+ 6863: 0x9B05,
+ 6864: 0x9B08,
+ 6865: 0x9B09,
+ 6866: 0x9B0B,
+ 6867: 0x9B0C,
+ 6868: 0x9B0D,
+ 6869: 0x9B0E,
+ 6870: 0x9B10,
+ 6871: 0x9B12,
+ 6872: 0x9B16,
+ 6873: 0x9B19,
+ 6874: 0x9B1B,
+ 6875: 0x9B1C,
+ 6876: 0x9B20,
+ 6877: 0x9B26,
+ 6878: 0x9B2B,
+ 6879: 0x9B2D,
+ 6880: 0x9B33,
+ 6881: 0x9B34,
+ 6882: 0x9B35,
+ 6883: 0x9B37,
+ 6884: 0x9B39,
+ 6885: 0x9B3A,
+ 6886: 0x9B3D,
+ 6887: 0x9B48,
+ 6888: 0x9B4B,
+ 6889: 0x9B4C,
+ 6890: 0x9B55,
+ 6891: 0x9B56,
+ 6892: 0x9B57,
+ 6893: 0x9B5B,
+ 6894: 0x9B5E,
+ 6895: 0x9B61,
+ 6896: 0x9B63,
+ 6897: 0x9B65,
+ 6898: 0x9B66,
+ 6899: 0x9B68,
+ 6900: 0x9B6A,
+ 6901: 0x9B6B,
+ 6902: 0x9B6C,
+ 6903: 0x9B6D,
+ 6904: 0x9B6E,
+ 6905: 0x9B73,
+ 6906: 0x9B75,
+ 6907: 0x9B77,
+ 6908: 0x9B78,
+ 6909: 0x9B79,
+ 6910: 0x9B7F,
+ 6911: 0x9B80,
+ 6912: 0x9B84,
+ 6913: 0x9B85,
+ 6914: 0x9B86,
+ 6915: 0x9B87,
+ 6916: 0x9B89,
+ 6917: 0x9B8A,
+ 6918: 0x9B8B,
+ 6919: 0x9B8D,
+ 6920: 0x9B8F,
+ 6921: 0x9B90,
+ 6922: 0x9B94,
+ 6923: 0x9B9A,
+ 6924: 0x9B9D,
+ 6925: 0x9B9E,
+ 6926: 0x9BA6,
+ 6927: 0x9BA7,
+ 6928: 0x9BA9,
+ 6929: 0x9BAC,
+ 6930: 0x9BB0,
+ 6931: 0x9BB1,
+ 6932: 0x9BB2,
+ 6933: 0x9BB7,
+ 6934: 0x9BB8,
+ 6935: 0x9BBB,
+ 6936: 0x9BBC,
+ 6937: 0x9BBE,
+ 6938: 0x9BBF,
+ 6939: 0x9BC1,
+ 6940: 0x9BC7,
+ 6941: 0x9BC8,
+ 6942: 0x9BCE,
+ 6943: 0x9BD0,
+ 6944: 0x9BD7,
+ 6945: 0x9BD8,
+ 6946: 0x9BDD,
+ 6947: 0x9BDF,
+ 6948: 0x9BE5,
+ 6949: 0x9BE7,
+ 6950: 0x9BEA,
+ 6951: 0x9BEB,
+ 6952: 0x9BEF,
+ 6953: 0x9BF3,
+ 6954: 0x9BF7,
+ 6955: 0x9BF8,
+ 6956: 0x9BF9,
+ 6957: 0x9BFA,
+ 6958: 0x9BFD,
+ 6959: 0x9BFF,
+ 6960: 0x9C00,
+ 6961: 0x9C02,
+ 6962: 0x9C0B,
+ 6963: 0x9C0F,
+ 6964: 0x9C11,
+ 6965: 0x9C16,
+ 6966: 0x9C18,
+ 6967: 0x9C19,
+ 6968: 0x9C1A,
+ 6969: 0x9C1C,
+ 6970: 0x9C1E,
+ 6971: 0x9C22,
+ 6972: 0x9C23,
+ 6973: 0x9C26,
+ 6974: 0x9C27,
+ 6975: 0x9C28,
+ 6976: 0x9C29,
+ 6977: 0x9C2A,
+ 6978: 0x9C31,
+ 6979: 0x9C35,
+ 6980: 0x9C36,
+ 6981: 0x9C37,
+ 6982: 0x9C3D,
+ 6983: 0x9C41,
+ 6984: 0x9C43,
+ 6985: 0x9C44,
+ 6986: 0x9C45,
+ 6987: 0x9C49,
+ 6988: 0x9C4A,
+ 6989: 0x9C4E,
+ 6990: 0x9C4F,
+ 6991: 0x9C50,
+ 6992: 0x9C53,
+ 6993: 0x9C54,
+ 6994: 0x9C56,
+ 6995: 0x9C58,
+ 6996: 0x9C5B,
+ 6997: 0x9C5D,
+ 6998: 0x9C5E,
+ 6999: 0x9C5F,
+ 7000: 0x9C63,
+ 7001: 0x9C69,
+ 7002: 0x9C6A,
+ 7003: 0x9C5C,
+ 7004: 0x9C6B,
+ 7005: 0x9C68,
+ 7006: 0x9C6E,
+ 7007: 0x9C70,
+ 7008: 0x9C72,
+ 7009: 0x9C75,
+ 7010: 0x9C77,
+ 7011: 0x9C7B,
+ 7012: 0x9CE6,
+ 7013: 0x9CF2,
+ 7014: 0x9CF7,
+ 7015: 0x9CF9,
+ 7016: 0x9D0B,
+ 7017: 0x9D02,
+ 7018: 0x9D11,
+ 7019: 0x9D17,
+ 7020: 0x9D18,
+ 7021: 0x9D1C,
+ 7022: 0x9D1D,
+ 7023: 0x9D1E,
+ 7024: 0x9D2F,
+ 7025: 0x9D30,
+ 7026: 0x9D32,
+ 7027: 0x9D33,
+ 7028: 0x9D34,
+ 7029: 0x9D3A,
+ 7030: 0x9D3C,
+ 7031: 0x9D45,
+ 7032: 0x9D3D,
+ 7033: 0x9D42,
+ 7034: 0x9D43,
+ 7035: 0x9D47,
+ 7036: 0x9D4A,
+ 7037: 0x9D53,
+ 7038: 0x9D54,
+ 7039: 0x9D5F,
+ 7040: 0x9D63,
+ 7041: 0x9D62,
+ 7042: 0x9D65,
+ 7043: 0x9D69,
+ 7044: 0x9D6A,
+ 7045: 0x9D6B,
+ 7046: 0x9D70,
+ 7047: 0x9D76,
+ 7048: 0x9D77,
+ 7049: 0x9D7B,
+ 7050: 0x9D7C,
+ 7051: 0x9D7E,
+ 7052: 0x9D83,
+ 7053: 0x9D84,
+ 7054: 0x9D86,
+ 7055: 0x9D8A,
+ 7056: 0x9D8D,
+ 7057: 0x9D8E,
+ 7058: 0x9D92,
+ 7059: 0x9D93,
+ 7060: 0x9D95,
+ 7061: 0x9D96,
+ 7062: 0x9D97,
+ 7063: 0x9D98,
+ 7064: 0x9DA1,
+ 7065: 0x9DAA,
+ 7066: 0x9DAC,
+ 7067: 0x9DAE,
+ 7068: 0x9DB1,
+ 7069: 0x9DB5,
+ 7070: 0x9DB9,
+ 7071: 0x9DBC,
+ 7072: 0x9DBF,
+ 7073: 0x9DC3,
+ 7074: 0x9DC7,
+ 7075: 0x9DC9,
+ 7076: 0x9DCA,
+ 7077: 0x9DD4,
+ 7078: 0x9DD5,
+ 7079: 0x9DD6,
+ 7080: 0x9DD7,
+ 7081: 0x9DDA,
+ 7082: 0x9DDE,
+ 7083: 0x9DDF,
+ 7084: 0x9DE0,
+ 7085: 0x9DE5,
+ 7086: 0x9DE7,
+ 7087: 0x9DE9,
+ 7088: 0x9DEB,
+ 7089: 0x9DEE,
+ 7090: 0x9DF0,
+ 7091: 0x9DF3,
+ 7092: 0x9DF4,
+ 7093: 0x9DFE,
+ 7094: 0x9E0A,
+ 7095: 0x9E02,
+ 7096: 0x9E07,
+ 7097: 0x9E0E,
+ 7098: 0x9E10,
+ 7099: 0x9E11,
+ 7100: 0x9E12,
+ 7101: 0x9E15,
+ 7102: 0x9E16,
+ 7103: 0x9E19,
+ 7104: 0x9E1C,
+ 7105: 0x9E1D,
+ 7106: 0x9E7A,
+ 7107: 0x9E7B,
+ 7108: 0x9E7C,
+ 7109: 0x9E80,
+ 7110: 0x9E82,
+ 7111: 0x9E83,
+ 7112: 0x9E84,
+ 7113: 0x9E85,
+ 7114: 0x9E87,
+ 7115: 0x9E8E,
+ 7116: 0x9E8F,
+ 7117: 0x9E96,
+ 7118: 0x9E98,
+ 7119: 0x9E9B,
+ 7120: 0x9E9E,
+ 7121: 0x9EA4,
+ 7122: 0x9EA8,
+ 7123: 0x9EAC,
+ 7124: 0x9EAE,
+ 7125: 0x9EAF,
+ 7126: 0x9EB0,
+ 7127: 0x9EB3,
+ 7128: 0x9EB4,
+ 7129: 0x9EB5,
+ 7130: 0x9EC6,
+ 7131: 0x9EC8,
+ 7132: 0x9ECB,
+ 7133: 0x9ED5,
+ 7134: 0x9EDF,
+ 7135: 0x9EE4,
+ 7136: 0x9EE7,
+ 7137: 0x9EEC,
+ 7138: 0x9EED,
+ 7139: 0x9EEE,
+ 7140: 0x9EF0,
+ 7141: 0x9EF1,
+ 7142: 0x9EF2,
+ 7143: 0x9EF5,
+ 7144: 0x9EF8,
+ 7145: 0x9EFF,
+ 7146: 0x9F02,
+ 7147: 0x9F03,
+ 7148: 0x9F09,
+ 7149: 0x9F0F,
+ 7150: 0x9F10,
+ 7151: 0x9F11,
+ 7152: 0x9F12,
+ 7153: 0x9F14,
+ 7154: 0x9F16,
+ 7155: 0x9F17,
+ 7156: 0x9F19,
+ 7157: 0x9F1A,
+ 7158: 0x9F1B,
+ 7159: 0x9F1F,
+ 7160: 0x9F22,
+ 7161: 0x9F26,
+ 7162: 0x9F2A,
+ 7163: 0x9F2B,
+ 7164: 0x9F2F,
+ 7165: 0x9F31,
+ 7166: 0x9F32,
+ 7167: 0x9F34,
+ 7168: 0x9F37,
+ 7169: 0x9F39,
+ 7170: 0x9F3A,
+ 7171: 0x9F3C,
+ 7172: 0x9F3D,
+ 7173: 0x9F3F,
+ 7174: 0x9F41,
+ 7175: 0x9F43,
+ 7176: 0x9F44,
+ 7177: 0x9F45,
+ 7178: 0x9F46,
+ 7179: 0x9F47,
+ 7180: 0x9F53,
+ 7181: 0x9F55,
+ 7182: 0x9F56,
+ 7183: 0x9F57,
+ 7184: 0x9F58,
+ 7185: 0x9F5A,
+ 7186: 0x9F5D,
+ 7187: 0x9F5E,
+ 7188: 0x9F68,
+ 7189: 0x9F69,
+ 7190: 0x9F6D,
+ 7191: 0x9F6E,
+ 7192: 0x9F6F,
+ 7193: 0x9F70,
+ 7194: 0x9F71,
+ 7195: 0x9F73,
+ 7196: 0x9F75,
+ 7197: 0x9F7A,
+ 7198: 0x9F7D,
+ 7199: 0x9F8F,
+ 7200: 0x9F90,
+ 7201: 0x9F91,
+ 7202: 0x9F92,
+ 7203: 0x9F94,
+ 7204: 0x9F96,
+ 7205: 0x9F97,
+ 7206: 0x9F9E,
+ 7207: 0x9FA1,
+ 7208: 0x9FA2,
+ 7209: 0x9FA3,
+ 7210: 0x9FA5,
+}
+
+const (
+ jis0208 = 1
+ jis0212 = 2
+ codeMask = 0x7f
+ codeShift = 7
+ tableShift = 14
+)
+
+const numEncodeTables = 6
+
+// encodeX are the encoding tables from Unicode to JIS code,
+// sorted by decreasing length.
+// encode0: 20902 entries for runes in [19968, 40870).
+// encode1: 1632 entries for runes in [ 8208, 9840).
+// encode2: 974 entries for runes in [12288, 13262).
+// encode3: 959 entries for runes in [ 161, 1120).
+// encode4: 261 entries for runes in [63785, 64046).
+// encode5: 229 entries for runes in [65281, 65510).
+//
+// The high two bits of the value record whether the JIS code comes from the
+// JIS0208 table (high bits == 1) or the JIS0212 table (high bits == 2).
+// The low 14 bits are two 7-bit unsigned integers j1 and j2 that form the
+// JIS code (94*j1 + j2) within that table.
+
+const encode0Low, encode0High = 19968, 40870
+
+var encode0 = [...]uint16{
+ 19968 - 19968: jis0208<<14 | 0x0F<<7 | 0x4B,
+ 19969 - 19968: jis0208<<14 | 0x22<<7 | 0x59,
+ 19970 - 19968: jis0212<<14 | 0x0F<<7 | 0x00,
+ 19971 - 19968: jis0208<<14 | 0x1B<<7 | 0x16,
+ 19972 - 19968: jis0212<<14 | 0x0F<<7 | 0x01,
+ 19973 - 19968: jis0212<<14 | 0x0F<<7 | 0x02,
+ 19975 - 19968: jis0208<<14 | 0x2A<<7 | 0x5B,
+ 19976 - 19968: jis0208<<14 | 0x1D<<7 | 0x45,
+ 19977 - 19968: jis0208<<14 | 0x1A<<7 | 0x0F,
+ 19978 - 19968: jis0208<<14 | 0x1D<<7 | 0x44,
+ 19979 - 19968: jis0208<<14 | 0x11<<7 | 0x1B,
+ 19980 - 19968: jis0212<<14 | 0x0F<<7 | 0x03,
+ 19981 - 19968: jis0208<<14 | 0x28<<7 | 0x33,
+ 19982 - 19968: jis0208<<14 | 0x2C<<7 | 0x1E,
+ 19984 - 19968: jis0208<<14 | 0x2F<<7 | 0x01,
+ 19985 - 19968: jis0208<<14 | 0x10<<7 | 0x0E,
+ 19986 - 19968: jis0212<<14 | 0x0F<<7 | 0x04,
+ 19988 - 19968: jis0208<<14 | 0x12<<7 | 0x4D,
+ 19989 - 19968: jis0208<<14 | 0x2F<<7 | 0x02,
+ 19990 - 19968: jis0208<<14 | 0x1F<<7 | 0x03,
+ 19991 - 19968: jis0208<<14 | 0x31<<7 | 0x21,
+ 19992 - 19968: jis0208<<14 | 0x14<<7 | 0x35,
+ 19993 - 19968: jis0208<<14 | 0x29<<7 | 0x19,
+ 19998 - 19968: jis0208<<14 | 0x1D<<7 | 0x46,
+ 19999 - 19968: jis0212<<14 | 0x0F<<7 | 0x05,
+ 20001 - 19968: jis0208<<14 | 0x2D<<7 | 0x1D,
+ 20003 - 19968: jis0212<<14 | 0x0F<<7 | 0x06,
+ 20004 - 19968: jis0212<<14 | 0x0F<<7 | 0x07,
+ 20006 - 19968: jis0208<<14 | 0x29<<7 | 0x21,
+ 20008 - 19968: jis0208<<14 | 0x58<<7 | 0x0C,
+ 20010 - 19968: jis0208<<14 | 0x2F<<7 | 0x03,
+ 20011 - 19968: jis0212<<14 | 0x0F<<7 | 0x09,
+ 20013 - 19968: jis0208<<14 | 0x22<<7 | 0x45,
+ 20014 - 19968: jis0212<<14 | 0x0F<<7 | 0x0A,
+ 20015 - 19968: jis0212<<14 | 0x0F<<7 | 0x0B,
+ 20016 - 19968: jis0212<<14 | 0x0F<<7 | 0x0C,
+ 20017 - 19968: jis0208<<14 | 0x2F<<7 | 0x04,
+ 20018 - 19968: jis0208<<14 | 0x15<<7 | 0x59,
+ 20021 - 19968: jis0212<<14 | 0x0F<<7 | 0x0D,
+ 20022 - 19968: jis0208<<14 | 0x2F<<7 | 0x05,
+ 20024 - 19968: jis0208<<14 | 0x13<<7 | 0x3C,
+ 20025 - 19968: jis0208<<14 | 0x22<<7 | 0x0F,
+ 20027 - 19968: jis0208<<14 | 0x1B<<7 | 0x46,
+ 20028 - 19968: jis0208<<14 | 0x2F<<7 | 0x06,
+ 20031 - 19968: jis0208<<14 | 0x2F<<7 | 0x07,
+ 20032 - 19968: jis0212<<14 | 0x0F<<7 | 0x0E,
+ 20033 - 19968: jis0212<<14 | 0x0F<<7 | 0x0F,
+ 20034 - 19968: jis0208<<14 | 0x2F<<7 | 0x08,
+ 20035 - 19968: jis0208<<14 | 0x26<<7 | 0x14,
+ 20036 - 19968: jis0212<<14 | 0x0F<<7 | 0x10,
+ 20037 - 19968: jis0208<<14 | 0x14<<7 | 0x36,
+ 20039 - 19968: jis0212<<14 | 0x0F<<7 | 0x11,
+ 20043 - 19968: jis0208<<14 | 0x26<<7 | 0x16,
+ 20045 - 19968: jis0208<<14 | 0x25<<7 | 0x42,
+ 20046 - 19968: jis0208<<14 | 0x17<<7 | 0x22,
+ 20047 - 19968: jis0208<<14 | 0x2A<<7 | 0x12,
+ 20049 - 19968: jis0212<<14 | 0x0F<<7 | 0x12,
+ 20053 - 19968: jis0208<<14 | 0x48<<7 | 0x28,
+ 20054 - 19968: jis0208<<14 | 0x2F<<7 | 0x09,
+ 20055 - 19968: jis0208<<14 | 0x1D<<7 | 0x47,
+ 20056 - 19968: jis0208<<14 | 0x2F<<7 | 0x0A,
+ 20057 - 19968: jis0208<<14 | 0x11<<7 | 0x14,
+ 20058 - 19968: jis0212<<14 | 0x0F<<7 | 0x13,
+ 20060 - 19968: jis0212<<14 | 0x0F<<7 | 0x14,
+ 20061 - 19968: jis0208<<14 | 0x15<<7 | 0x44,
+ 20062 - 19968: jis0208<<14 | 0x17<<7 | 0x4F,
+ 20063 - 19968: jis0208<<14 | 0x2B<<7 | 0x48,
+ 20066 - 19968: jis0208<<14 | 0x35<<7 | 0x05,
+ 20067 - 19968: jis0212<<14 | 0x0F<<7 | 0x15,
+ 20072 - 19968: jis0212<<14 | 0x0F<<7 | 0x16,
+ 20073 - 19968: jis0212<<14 | 0x0F<<7 | 0x17,
+ 20081 - 19968: jis0208<<14 | 0x2C<<7 | 0x4F,
+ 20083 - 19968: jis0208<<14 | 0x25<<7 | 0x5C,
+ 20084 - 19968: jis0212<<14 | 0x0F<<7 | 0x18,
+ 20085 - 19968: jis0212<<14 | 0x0F<<7 | 0x19,
+ 20089 - 19968: jis0212<<14 | 0x0F<<7 | 0x1A,
+ 20094 - 19968: jis0208<<14 | 0x13<<7 | 0x04,
+ 20095 - 19968: jis0212<<14 | 0x0F<<7 | 0x1B,
+ 20096 - 19968: jis0208<<14 | 0x14<<7 | 0x14,
+ 20098 - 19968: jis0208<<14 | 0x2F<<7 | 0x0B,
+ 20101 - 19968: jis0208<<14 | 0x2F<<7 | 0x0C,
+ 20102 - 19968: jis0208<<14 | 0x2D<<7 | 0x1A,
+ 20104 - 19968: jis0208<<14 | 0x2C<<7 | 0x1C,
+ 20105 - 19968: jis0208<<14 | 0x20<<7 | 0x47,
+ 20106 - 19968: jis0208<<14 | 0x2F<<7 | 0x0E,
+ 20107 - 19968: jis0208<<14 | 0x1A<<7 | 0x55,
+ 20108 - 19968: jis0208<<14 | 0x25<<7 | 0x52,
+ 20109 - 19968: jis0212<<14 | 0x0F<<7 | 0x1C,
+ 20110 - 19968: jis0208<<14 | 0x2F<<7 | 0x11,
+ 20113 - 19968: jis0208<<14 | 0x10<<7 | 0x1D,
+ 20114 - 19968: jis0208<<14 | 0x17<<7 | 0x3E,
+ 20116 - 19968: jis0208<<14 | 0x17<<7 | 0x3D,
+ 20117 - 19968: jis0208<<14 | 0x0F<<7 | 0x45,
+ 20118 - 19968: jis0212<<14 | 0x0F<<7 | 0x1D,
+ 20119 - 19968: jis0212<<14 | 0x0F<<7 | 0x1E,
+ 20120 - 19968: jis0208<<14 | 0x2E<<7 | 0x2A,
+ 20121 - 19968: jis0208<<14 | 0x2E<<7 | 0x29,
+ 20123 - 19968: jis0208<<14 | 0x19<<7 | 0x12,
+ 20124 - 19968: jis0208<<14 | 0x0F<<7 | 0x00,
+ 20125 - 19968: jis0212<<14 | 0x0F<<7 | 0x1F,
+ 20126 - 19968: jis0208<<14 | 0x2F<<7 | 0x12,
+ 20127 - 19968: jis0208<<14 | 0x2F<<7 | 0x13,
+ 20128 - 19968: jis0208<<14 | 0x2F<<7 | 0x14,
+ 20129 - 19968: jis0208<<14 | 0x2A<<7 | 0x13,
+ 20130 - 19968: jis0208<<14 | 0x2F<<7 | 0x15,
+ 20132 - 19968: jis0208<<14 | 0x17<<7 | 0x51,
+ 20133 - 19968: jis0208<<14 | 0x0F<<7 | 0x46,
+ 20134 - 19968: jis0208<<14 | 0x2A<<7 | 0x51,
+ 20136 - 19968: jis0208<<14 | 0x14<<7 | 0x5B,
+ 20139 - 19968: jis0208<<14 | 0x14<<7 | 0x5C,
+ 20140 - 19968: jis0208<<14 | 0x14<<7 | 0x5D,
+ 20141 - 19968: jis0208<<14 | 0x23<<7 | 0x41,
+ 20142 - 19968: jis0208<<14 | 0x2D<<7 | 0x1B,
+ 20143 - 19968: jis0212<<14 | 0x0F<<7 | 0x20,
+ 20144 - 19968: jis0208<<14 | 0x2F<<7 | 0x16,
+ 20147 - 19968: jis0208<<14 | 0x2F<<7 | 0x17,
+ 20150 - 19968: jis0208<<14 | 0x2F<<7 | 0x18,
+ 20153 - 19968: jis0212<<14 | 0x0F<<7 | 0x21,
+ 20154 - 19968: jis0208<<14 | 0x1E<<7 | 0x2C,
+ 20160 - 19968: jis0208<<14 | 0x1C<<7 | 0x19,
+ 20161 - 19968: jis0208<<14 | 0x1E<<7 | 0x2D,
+ 20162 - 19968: jis0208<<14 | 0x2F<<7 | 0x1D,
+ 20163 - 19968: jis0212<<14 | 0x0F<<7 | 0x22,
+ 20164 - 19968: jis0208<<14 | 0x2F<<7 | 0x1B,
+ 20166 - 19968: jis0208<<14 | 0x2F<<7 | 0x1C,
+ 20167 - 19968: jis0208<<14 | 0x14<<7 | 0x37,
+ 20170 - 19968: jis0208<<14 | 0x19<<7 | 0x02,
+ 20171 - 19968: jis0208<<14 | 0x11<<7 | 0x4F,
+ 20173 - 19968: jis0208<<14 | 0x2F<<7 | 0x1A,
+ 20174 - 19968: jis0208<<14 | 0x2F<<7 | 0x19,
+ 20175 - 19968: jis0208<<14 | 0x29<<7 | 0x08,
+ 20176 - 19968: jis0212<<14 | 0x0F<<7 | 0x23,
+ 20180 - 19968: jis0208<<14 | 0x1A<<7 | 0x25,
+ 20181 - 19968: jis0208<<14 | 0x1A<<7 | 0x24,
+ 20182 - 19968: jis0208<<14 | 0x21<<7 | 0x1D,
+ 20183 - 19968: jis0208<<14 | 0x2F<<7 | 0x1E,
+ 20184 - 19968: jis0208<<14 | 0x28<<7 | 0x34,
+ 20185 - 19968: jis0208<<14 | 0x1F<<7 | 0x46,
+ 20186 - 19968: jis0212<<14 | 0x0F<<7 | 0x24,
+ 20187 - 19968: jis0212<<14 | 0x0F<<7 | 0x25,
+ 20189 - 19968: jis0208<<14 | 0x00<<7 | 0x17,
+ 20190 - 19968: jis0208<<14 | 0x2F<<7 | 0x1F,
+ 20191 - 19968: jis0208<<14 | 0x2F<<7 | 0x21,
+ 20192 - 19968: jis0212<<14 | 0x0F<<7 | 0x26,
+ 20193 - 19968: jis0208<<14 | 0x58<<7 | 0x0D,
+ 20194 - 19968: jis0212<<14 | 0x0F<<7 | 0x28,
+ 20195 - 19968: jis0208<<14 | 0x21<<7 | 0x44,
+ 20196 - 19968: jis0208<<14 | 0x2D<<7 | 0x40,
+ 20197 - 19968: jis0208<<14 | 0x0F<<7 | 0x29,
+ 20200 - 19968: jis0212<<14 | 0x0F<<7 | 0x29,
+ 20205 - 19968: jis0208<<14 | 0x2F<<7 | 0x20,
+ 20206 - 19968: jis0208<<14 | 0x11<<7 | 0x1D,
+ 20207 - 19968: jis0212<<14 | 0x0F<<7 | 0x2A,
+ 20208 - 19968: jis0208<<14 | 0x15<<7 | 0x23,
+ 20209 - 19968: jis0212<<14 | 0x0F<<7 | 0x2B,
+ 20210 - 19968: jis0208<<14 | 0x22<<7 | 0x46,
+ 20211 - 19968: jis0212<<14 | 0x0F<<7 | 0x2C,
+ 20213 - 19968: jis0212<<14 | 0x0F<<7 | 0x2D,
+ 20214 - 19968: jis0208<<14 | 0x16<<7 | 0x4E,
+ 20215 - 19968: jis0208<<14 | 0x2F<<7 | 0x22,
+ 20219 - 19968: jis0208<<14 | 0x26<<7 | 0x03,
+ 20220 - 19968: jis0208<<14 | 0x58<<7 | 0x0E,
+ 20221 - 19968: jis0212<<14 | 0x0F<<7 | 0x2E,
+ 20222 - 19968: jis0212<<14 | 0x0F<<7 | 0x2F,
+ 20223 - 19968: jis0212<<14 | 0x0F<<7 | 0x30,
+ 20224 - 19968: jis0208<<14 | 0x58<<7 | 0x0F,
+ 20225 - 19968: jis0208<<14 | 0x13<<7 | 0x4A,
+ 20226 - 19968: jis0212<<14 | 0x0F<<7 | 0x32,
+ 20227 - 19968: jis0208<<14 | 0x58<<7 | 0x10,
+ 20232 - 19968: jis0212<<14 | 0x0F<<7 | 0x34,
+ 20233 - 19968: jis0208<<14 | 0x2F<<7 | 0x23,
+ 20234 - 19968: jis0208<<14 | 0x0F<<7 | 0x2A,
+ 20235 - 19968: jis0212<<14 | 0x0F<<7 | 0x35,
+ 20236 - 19968: jis0212<<14 | 0x0F<<7 | 0x36,
+ 20237 - 19968: jis0208<<14 | 0x17<<7 | 0x3F,
+ 20238 - 19968: jis0208<<14 | 0x13<<7 | 0x4B,
+ 20239 - 19968: jis0208<<14 | 0x28<<7 | 0x59,
+ 20240 - 19968: jis0208<<14 | 0x27<<7 | 0x11,
+ 20241 - 19968: jis0208<<14 | 0x14<<7 | 0x38,
+ 20242 - 19968: jis0212<<14 | 0x0F<<7 | 0x37,
+ 20245 - 19968: jis0212<<14 | 0x0F<<7 | 0x38,
+ 20246 - 19968: jis0212<<14 | 0x0F<<7 | 0x39,
+ 20247 - 19968: jis0212<<14 | 0x0F<<7 | 0x3A,
+ 20249 - 19968: jis0212<<14 | 0x0F<<7 | 0x3B,
+ 20250 - 19968: jis0208<<14 | 0x11<<7 | 0x50,
+ 20252 - 19968: jis0208<<14 | 0x2F<<7 | 0x46,
+ 20253 - 19968: jis0208<<14 | 0x24<<7 | 0x20,
+ 20270 - 19968: jis0212<<14 | 0x0F<<7 | 0x3C,
+ 20271 - 19968: jis0208<<14 | 0x26<<7 | 0x4B,
+ 20272 - 19968: jis0208<<14 | 0x2F<<7 | 0x25,
+ 20273 - 19968: jis0212<<14 | 0x0F<<7 | 0x3D,
+ 20275 - 19968: jis0212<<14 | 0x0F<<7 | 0x3F,
+ 20276 - 19968: jis0208<<14 | 0x27<<7 | 0x1B,
+ 20277 - 19968: jis0212<<14 | 0x0F<<7 | 0x40,
+ 20278 - 19968: jis0208<<14 | 0x2D<<7 | 0x41,
+ 20279 - 19968: jis0212<<14 | 0x0F<<7 | 0x41,
+ 20280 - 19968: jis0208<<14 | 0x1E<<7 | 0x0C,
+ 20281 - 19968: jis0208<<14 | 0x58<<7 | 0x11,
+ 20282 - 19968: jis0208<<14 | 0x1A<<7 | 0x26,
+ 20283 - 19968: jis0212<<14 | 0x0F<<7 | 0x43,
+ 20284 - 19968: jis0208<<14 | 0x1A<<7 | 0x56,
+ 20285 - 19968: jis0208<<14 | 0x11<<7 | 0x1F,
+ 20286 - 19968: jis0212<<14 | 0x0F<<7 | 0x44,
+ 20288 - 19968: jis0212<<14 | 0x0F<<7 | 0x45,
+ 20290 - 19968: jis0212<<14 | 0x0F<<7 | 0x46,
+ 20291 - 19968: jis0208<<14 | 0x23<<7 | 0x30,
+ 20294 - 19968: jis0208<<14 | 0x22<<7 | 0x01,
+ 20295 - 19968: jis0208<<14 | 0x2F<<7 | 0x29,
+ 20296 - 19968: jis0212<<14 | 0x0F<<7 | 0x47,
+ 20297 - 19968: jis0212<<14 | 0x0F<<7 | 0x48,
+ 20299 - 19968: jis0212<<14 | 0x0F<<7 | 0x49,
+ 20300 - 19968: jis0212<<14 | 0x0F<<7 | 0x4A,
+ 20301 - 19968: jis0208<<14 | 0x0F<<7 | 0x2B,
+ 20302 - 19968: jis0208<<14 | 0x23<<7 | 0x42,
+ 20303 - 19968: jis0208<<14 | 0x1C<<7 | 0x1A,
+ 20304 - 19968: jis0208<<14 | 0x19<<7 | 0x13,
+ 20305 - 19968: jis0208<<14 | 0x2C<<7 | 0x03,
+ 20306 - 19968: jis0212<<14 | 0x0F<<7 | 0x4B,
+ 20307 - 19968: jis0208<<14 | 0x21<<7 | 0x2D,
+ 20308 - 19968: jis0212<<14 | 0x0F<<7 | 0x4C,
+ 20309 - 19968: jis0208<<14 | 0x11<<7 | 0x1E,
+ 20310 - 19968: jis0208<<14 | 0x58<<7 | 0x12,
+ 20311 - 19968: jis0208<<14 | 0x2F<<7 | 0x28,
+ 20312 - 19968: jis0212<<14 | 0x0F<<7 | 0x4E,
+ 20313 - 19968: jis0208<<14 | 0x2C<<7 | 0x1D,
+ 20314 - 19968: jis0208<<14 | 0x2F<<7 | 0x24,
+ 20315 - 19968: jis0208<<14 | 0x2F<<7 | 0x26,
+ 20316 - 19968: jis0208<<14 | 0x19<<7 | 0x4D,
+ 20317 - 19968: jis0208<<14 | 0x2F<<7 | 0x27,
+ 20318 - 19968: jis0208<<14 | 0x34<<7 | 0x03,
+ 20319 - 19968: jis0212<<14 | 0x0F<<7 | 0x4F,
+ 20320 - 19968: jis0212<<14 | 0x0F<<7 | 0x3E,
+ 20323 - 19968: jis0212<<14 | 0x0F<<7 | 0x50,
+ 20329 - 19968: jis0208<<14 | 0x2F<<7 | 0x2F,
+ 20330 - 19968: jis0212<<14 | 0x0F<<7 | 0x51,
+ 20332 - 19968: jis0212<<14 | 0x0F<<7 | 0x52,
+ 20334 - 19968: jis0212<<14 | 0x0F<<7 | 0x53,
+ 20335 - 19968: jis0208<<14 | 0x2F<<7 | 0x32,
+ 20336 - 19968: jis0208<<14 | 0x2F<<7 | 0x30,
+ 20337 - 19968: jis0212<<14 | 0x0F<<7 | 0x54,
+ 20339 - 19968: jis0208<<14 | 0x11<<7 | 0x21,
+ 20341 - 19968: jis0208<<14 | 0x29<<7 | 0x1A,
+ 20342 - 19968: jis0208<<14 | 0x2F<<7 | 0x2A,
+ 20343 - 19968: jis0212<<14 | 0x0F<<7 | 0x55,
+ 20344 - 19968: jis0212<<14 | 0x0F<<7 | 0x56,
+ 20345 - 19968: jis0212<<14 | 0x0F<<7 | 0x57,
+ 20346 - 19968: jis0212<<14 | 0x0F<<7 | 0x58,
+ 20347 - 19968: jis0208<<14 | 0x2F<<7 | 0x2E,
+ 20348 - 19968: jis0208<<14 | 0x17<<7 | 0x52,
+ 20349 - 19968: jis0212<<14 | 0x0F<<7 | 0x59,
+ 20350 - 19968: jis0212<<14 | 0x0F<<7 | 0x5A,
+ 20351 - 19968: jis0208<<14 | 0x1A<<7 | 0x27,
+ 20353 - 19968: jis0212<<14 | 0x0F<<7 | 0x5B,
+ 20354 - 19968: jis0212<<14 | 0x0F<<7 | 0x5C,
+ 20355 - 19968: jis0208<<14 | 0x13<<7 | 0x05,
+ 20356 - 19968: jis0212<<14 | 0x0F<<7 | 0x5D,
+ 20357 - 19968: jis0212<<14 | 0x10<<7 | 0x00,
+ 20358 - 19968: jis0208<<14 | 0x2F<<7 | 0x33,
+ 20360 - 19968: jis0208<<14 | 0x2F<<7 | 0x2B,
+ 20361 - 19968: jis0212<<14 | 0x10<<7 | 0x01,
+ 20362 - 19968: jis0208<<14 | 0x58<<7 | 0x14,
+ 20363 - 19968: jis0208<<14 | 0x2D<<7 | 0x42,
+ 20364 - 19968: jis0212<<14 | 0x10<<7 | 0x03,
+ 20365 - 19968: jis0208<<14 | 0x1A<<7 | 0x57,
+ 20366 - 19968: jis0212<<14 | 0x10<<7 | 0x04,
+ 20367 - 19968: jis0208<<14 | 0x2F<<7 | 0x2C,
+ 20368 - 19968: jis0212<<14 | 0x10<<7 | 0x05,
+ 20369 - 19968: jis0208<<14 | 0x2F<<7 | 0x31,
+ 20370 - 19968: jis0208<<14 | 0x58<<7 | 0x13,
+ 20371 - 19968: jis0212<<14 | 0x10<<7 | 0x07,
+ 20372 - 19968: jis0208<<14 | 0x58<<7 | 0x16,
+ 20374 - 19968: jis0208<<14 | 0x2F<<7 | 0x34,
+ 20375 - 19968: jis0212<<14 | 0x10<<7 | 0x09,
+ 20376 - 19968: jis0208<<14 | 0x2F<<7 | 0x2D,
+ 20377 - 19968: jis0212<<14 | 0x10<<7 | 0x0A,
+ 20378 - 19968: jis0208<<14 | 0x58<<7 | 0x15,
+ 20379 - 19968: jis0208<<14 | 0x15<<7 | 0x00,
+ 20381 - 19968: jis0208<<14 | 0x0F<<7 | 0x2C,
+ 20382 - 19968: jis0212<<14 | 0x10<<7 | 0x0C,
+ 20383 - 19968: jis0212<<14 | 0x10<<7 | 0x0D,
+ 20384 - 19968: jis0208<<14 | 0x15<<7 | 0x01,
+ 20385 - 19968: jis0208<<14 | 0x11<<7 | 0x20,
+ 20395 - 19968: jis0208<<14 | 0x34<<7 | 0x04,
+ 20397 - 19968: jis0208<<14 | 0x2A<<7 | 0x58,
+ 20398 - 19968: jis0208<<14 | 0x28<<7 | 0x4D,
+ 20399 - 19968: jis0208<<14 | 0x17<<7 | 0x53,
+ 20402 - 19968: jis0212<<14 | 0x10<<7 | 0x0E,
+ 20405 - 19968: jis0208<<14 | 0x1E<<7 | 0x0E,
+ 20406 - 19968: jis0208<<14 | 0x2D<<7 | 0x16,
+ 20407 - 19968: jis0212<<14 | 0x10<<7 | 0x0F,
+ 20409 - 19968: jis0212<<14 | 0x10<<7 | 0x10,
+ 20411 - 19968: jis0212<<14 | 0x10<<7 | 0x11,
+ 20412 - 19968: jis0212<<14 | 0x10<<7 | 0x12,
+ 20413 - 19968: jis0212<<14 | 0x10<<7 | 0x13,
+ 20414 - 19968: jis0212<<14 | 0x10<<7 | 0x14,
+ 20415 - 19968: jis0208<<14 | 0x29<<7 | 0x37,
+ 20416 - 19968: jis0212<<14 | 0x10<<7 | 0x15,
+ 20417 - 19968: jis0212<<14 | 0x10<<7 | 0x16,
+ 20418 - 19968: jis0208<<14 | 0x16<<7 | 0x17,
+ 20419 - 19968: jis0208<<14 | 0x21<<7 | 0x04,
+ 20420 - 19968: jis0208<<14 | 0x11<<7 | 0x43,
+ 20421 - 19968: jis0212<<14 | 0x10<<7 | 0x17,
+ 20422 - 19968: jis0212<<14 | 0x10<<7 | 0x18,
+ 20424 - 19968: jis0212<<14 | 0x10<<7 | 0x19,
+ 20425 - 19968: jis0208<<14 | 0x58<<7 | 0x05,
+ 20426 - 19968: jis0208<<14 | 0x1C<<7 | 0x32,
+ 20427 - 19968: jis0212<<14 | 0x10<<7 | 0x1B,
+ 20428 - 19968: jis0212<<14 | 0x10<<7 | 0x1C,
+ 20429 - 19968: jis0208<<14 | 0x58<<7 | 0x17,
+ 20430 - 19968: jis0208<<14 | 0x2F<<7 | 0x38,
+ 20431 - 19968: jis0212<<14 | 0x10<<7 | 0x1E,
+ 20432 - 19968: jis0208<<14 | 0x2F<<7 | 0x3D,
+ 20433 - 19968: jis0208<<14 | 0x2F<<7 | 0x3B,
+ 20434 - 19968: jis0212<<14 | 0x10<<7 | 0x1F,
+ 20436 - 19968: jis0208<<14 | 0x2F<<7 | 0x36,
+ 20439 - 19968: jis0208<<14 | 0x21<<7 | 0x0E,
+ 20440 - 19968: jis0208<<14 | 0x2F<<7 | 0x39,
+ 20442 - 19968: jis0208<<14 | 0x2F<<7 | 0x3C,
+ 20443 - 19968: jis0208<<14 | 0x2F<<7 | 0x3A,
+ 20444 - 19968: jis0212<<14 | 0x10<<7 | 0x20,
+ 20445 - 19968: jis0208<<14 | 0x29<<7 | 0x3C,
+ 20447 - 19968: jis0208<<14 | 0x2F<<7 | 0x37,
+ 20448 - 19968: jis0212<<14 | 0x10<<7 | 0x21,
+ 20449 - 19968: jis0208<<14 | 0x1E<<7 | 0x0D,
+ 20450 - 19968: jis0212<<14 | 0x10<<7 | 0x22,
+ 20451 - 19968: jis0208<<14 | 0x2A<<7 | 0x52,
+ 20452 - 19968: jis0208<<14 | 0x2F<<7 | 0x3E,
+ 20453 - 19968: jis0208<<14 | 0x2F<<7 | 0x3F,
+ 20462 - 19968: jis0208<<14 | 0x1C<<7 | 0x03,
+ 20463 - 19968: jis0208<<14 | 0x2F<<7 | 0x4C,
+ 20464 - 19968: jis0212<<14 | 0x10<<7 | 0x23,
+ 20466 - 19968: jis0212<<14 | 0x10<<7 | 0x24,
+ 20467 - 19968: jis0208<<14 | 0x26<<7 | 0x2F,
+ 20469 - 19968: jis0208<<14 | 0x28<<7 | 0x15,
+ 20470 - 19968: jis0208<<14 | 0x2F<<7 | 0x47,
+ 20472 - 19968: jis0208<<14 | 0x29<<7 | 0x4F,
+ 20474 - 19968: jis0208<<14 | 0x11<<7 | 0x15,
+ 20476 - 19968: jis0212<<14 | 0x10<<7 | 0x25,
+ 20477 - 19968: jis0212<<14 | 0x10<<7 | 0x26,
+ 20478 - 19968: jis0208<<14 | 0x2F<<7 | 0x4B,
+ 20479 - 19968: jis0208<<14 | 0x58<<7 | 0x1A,
+ 20480 - 19968: jis0212<<14 | 0x10<<7 | 0x28,
+ 20481 - 19968: jis0212<<14 | 0x10<<7 | 0x29,
+ 20484 - 19968: jis0212<<14 | 0x10<<7 | 0x2A,
+ 20485 - 19968: jis0208<<14 | 0x2F<<7 | 0x45,
+ 20486 - 19968: jis0208<<14 | 0x2F<<7 | 0x4E,
+ 20487 - 19968: jis0212<<14 | 0x10<<7 | 0x2B,
+ 20489 - 19968: jis0208<<14 | 0x20<<7 | 0x31,
+ 20490 - 19968: jis0212<<14 | 0x10<<7 | 0x2C,
+ 20491 - 19968: jis0208<<14 | 0x17<<7 | 0x23,
+ 20492 - 19968: jis0212<<14 | 0x10<<7 | 0x2D,
+ 20493 - 19968: jis0208<<14 | 0x26<<7 | 0x3B,
+ 20494 - 19968: jis0212<<14 | 0x10<<7 | 0x2E,
+ 20495 - 19968: jis0208<<14 | 0x3F<<7 | 0x26,
+ 20496 - 19968: jis0212<<14 | 0x10<<7 | 0x2F,
+ 20497 - 19968: jis0208<<14 | 0x2F<<7 | 0x4D,
+ 20498 - 19968: jis0208<<14 | 0x24<<7 | 0x3C,
+ 20499 - 19968: jis0212<<14 | 0x10<<7 | 0x30,
+ 20500 - 19968: jis0208<<14 | 0x2F<<7 | 0x42,
+ 20502 - 19968: jis0208<<14 | 0x17<<7 | 0x55,
+ 20503 - 19968: jis0212<<14 | 0x10<<7 | 0x31,
+ 20504 - 19968: jis0212<<14 | 0x10<<7 | 0x32,
+ 20505 - 19968: jis0208<<14 | 0x17<<7 | 0x54,
+ 20506 - 19968: jis0208<<14 | 0x2F<<7 | 0x40,
+ 20507 - 19968: jis0212<<14 | 0x10<<7 | 0x33,
+ 20508 - 19968: jis0212<<14 | 0x10<<7 | 0x34,
+ 20509 - 19968: jis0212<<14 | 0x10<<7 | 0x35,
+ 20510 - 19968: jis0208<<14 | 0x58<<7 | 0x1B,
+ 20511 - 19968: jis0208<<14 | 0x1B<<7 | 0x39,
+ 20513 - 19968: jis0208<<14 | 0x2F<<7 | 0x48,
+ 20514 - 19968: jis0208<<14 | 0x58<<7 | 0x19,
+ 20515 - 19968: jis0208<<14 | 0x29<<7 | 0x4E,
+ 20516 - 19968: jis0208<<14 | 0x22<<7 | 0x2C,
+ 20517 - 19968: jis0208<<14 | 0x2F<<7 | 0x44,
+ 20518 - 19968: jis0208<<14 | 0x16<<7 | 0x50,
+ 20519 - 19968: jis0212<<14 | 0x10<<7 | 0x38,
+ 20520 - 19968: jis0208<<14 | 0x2F<<7 | 0x41,
+ 20521 - 19968: jis0208<<14 | 0x2F<<7 | 0x49,
+ 20522 - 19968: jis0208<<14 | 0x2F<<7 | 0x43,
+ 20523 - 19968: jis0208<<14 | 0x2D<<7 | 0x30,
+ 20524 - 19968: jis0208<<14 | 0x2F<<7 | 0x4A,
+ 20525 - 19968: jis0208<<14 | 0x2E<<7 | 0x20,
+ 20526 - 19968: jis0212<<14 | 0x10<<7 | 0x39,
+ 20528 - 19968: jis0212<<14 | 0x10<<7 | 0x3A,
+ 20530 - 19968: jis0212<<14 | 0x10<<7 | 0x3B,
+ 20531 - 19968: jis0212<<14 | 0x10<<7 | 0x3C,
+ 20533 - 19968: jis0212<<14 | 0x10<<7 | 0x3D,
+ 20534 - 19968: jis0208<<14 | 0x15<<7 | 0x45,
+ 20537 - 19968: jis0208<<14 | 0x16<<7 | 0x4F,
+ 20539 - 19968: jis0212<<14 | 0x10<<7 | 0x55,
+ 20544 - 19968: jis0208<<14 | 0x58<<7 | 0x18,
+ 20545 - 19968: jis0212<<14 | 0x10<<7 | 0x3F,
+ 20546 - 19968: jis0208<<14 | 0x58<<7 | 0x1E,
+ 20547 - 19968: jis0208<<14 | 0x2F<<7 | 0x4F,
+ 20549 - 19968: jis0212<<14 | 0x10<<7 | 0x41,
+ 20550 - 19968: jis0208<<14 | 0x58<<7 | 0x1C,
+ 20551 - 19968: jis0208<<14 | 0x2F<<7 | 0x50,
+ 20552 - 19968: jis0208<<14 | 0x2F<<7 | 0x54,
+ 20553 - 19968: jis0208<<14 | 0x0F<<7 | 0x2D,
+ 20554 - 19968: jis0212<<14 | 0x10<<7 | 0x43,
+ 20556 - 19968: jis0212<<14 | 0x10<<7 | 0x44,
+ 20558 - 19968: jis0212<<14 | 0x10<<7 | 0x45,
+ 20559 - 19968: jis0208<<14 | 0x29<<7 | 0x2F,
+ 20560 - 19968: jis0208<<14 | 0x2F<<7 | 0x53,
+ 20561 - 19968: jis0212<<14 | 0x10<<7 | 0x46,
+ 20562 - 19968: jis0212<<14 | 0x10<<7 | 0x47,
+ 20563 - 19968: jis0212<<14 | 0x10<<7 | 0x48,
+ 20565 - 19968: jis0208<<14 | 0x2F<<7 | 0x52,
+ 20566 - 19968: jis0208<<14 | 0x2F<<7 | 0x56,
+ 20567 - 19968: jis0212<<14 | 0x10<<7 | 0x49,
+ 20569 - 19968: jis0212<<14 | 0x10<<7 | 0x4A,
+ 20570 - 19968: jis0208<<14 | 0x2F<<7 | 0x55,
+ 20572 - 19968: jis0208<<14 | 0x23<<7 | 0x43,
+ 20575 - 19968: jis0212<<14 | 0x10<<7 | 0x4B,
+ 20576 - 19968: jis0212<<14 | 0x10<<7 | 0x4C,
+ 20578 - 19968: jis0212<<14 | 0x10<<7 | 0x4D,
+ 20579 - 19968: jis0212<<14 | 0x10<<7 | 0x4E,
+ 20581 - 19968: jis0208<<14 | 0x16<<7 | 0x51,
+ 20582 - 19968: jis0212<<14 | 0x10<<7 | 0x4F,
+ 20583 - 19968: jis0212<<14 | 0x10<<7 | 0x50,
+ 20586 - 19968: jis0212<<14 | 0x10<<7 | 0x51,
+ 20588 - 19968: jis0208<<14 | 0x2F<<7 | 0x57,
+ 20589 - 19968: jis0212<<14 | 0x10<<7 | 0x52,
+ 20592 - 19968: jis0208<<14 | 0x58<<7 | 0x1D,
+ 20593 - 19968: jis0212<<14 | 0x10<<7 | 0x54,
+ 20594 - 19968: jis0208<<14 | 0x1B<<7 | 0x24,
+ 20596 - 19968: jis0208<<14 | 0x21<<7 | 0x05,
+ 20597 - 19968: jis0208<<14 | 0x23<<7 | 0x44,
+ 20598 - 19968: jis0208<<14 | 0x15<<7 | 0x55,
+ 20600 - 19968: jis0208<<14 | 0x2F<<7 | 0x58,
+ 20605 - 19968: jis0208<<14 | 0x14<<7 | 0x15,
+ 20608 - 19968: jis0208<<14 | 0x2F<<7 | 0x59,
+ 20609 - 19968: jis0212<<14 | 0x10<<7 | 0x56,
+ 20611 - 19968: jis0212<<14 | 0x10<<7 | 0x57,
+ 20612 - 19968: jis0212<<14 | 0x10<<7 | 0x58,
+ 20613 - 19968: jis0208<<14 | 0x2F<<7 | 0x5B,
+ 20614 - 19968: jis0212<<14 | 0x10<<7 | 0x59,
+ 20618 - 19968: jis0212<<14 | 0x10<<7 | 0x5A,
+ 20621 - 19968: jis0208<<14 | 0x2A<<7 | 0x14,
+ 20622 - 19968: jis0212<<14 | 0x10<<7 | 0x5B,
+ 20623 - 19968: jis0212<<14 | 0x10<<7 | 0x5C,
+ 20624 - 19968: jis0212<<14 | 0x10<<7 | 0x5D,
+ 20625 - 19968: jis0208<<14 | 0x16<<7 | 0x45,
+ 20626 - 19968: jis0212<<14 | 0x11<<7 | 0x00,
+ 20627 - 19968: jis0212<<14 | 0x11<<7 | 0x01,
+ 20628 - 19968: jis0208<<14 | 0x58<<7 | 0x1F,
+ 20630 - 19968: jis0212<<14 | 0x11<<7 | 0x03,
+ 20632 - 19968: jis0208<<14 | 0x1A<<7 | 0x10,
+ 20633 - 19968: jis0208<<14 | 0x27<<7 | 0x56,
+ 20634 - 19968: jis0208<<14 | 0x2F<<7 | 0x5A,
+ 20635 - 19968: jis0212<<14 | 0x11<<7 | 0x04,
+ 20636 - 19968: jis0212<<14 | 0x11<<7 | 0x05,
+ 20638 - 19968: jis0212<<14 | 0x11<<7 | 0x06,
+ 20639 - 19968: jis0212<<14 | 0x11<<7 | 0x07,
+ 20640 - 19968: jis0212<<14 | 0x11<<7 | 0x08,
+ 20641 - 19968: jis0212<<14 | 0x11<<7 | 0x09,
+ 20642 - 19968: jis0212<<14 | 0x11<<7 | 0x0A,
+ 20650 - 19968: jis0212<<14 | 0x11<<7 | 0x0B,
+ 20652 - 19968: jis0208<<14 | 0x19<<7 | 0x24,
+ 20653 - 19968: jis0208<<14 | 0x2C<<7 | 0x22,
+ 20655 - 19968: jis0212<<14 | 0x11<<7 | 0x0C,
+ 20656 - 19968: jis0212<<14 | 0x11<<7 | 0x0D,
+ 20658 - 19968: jis0208<<14 | 0x2F<<7 | 0x5D,
+ 20659 - 19968: jis0208<<14 | 0x30<<7 | 0x02,
+ 20660 - 19968: jis0208<<14 | 0x2F<<7 | 0x5C,
+ 20661 - 19968: jis0208<<14 | 0x19<<7 | 0x23,
+ 20663 - 19968: jis0208<<14 | 0x1C<<7 | 0x5C,
+ 20665 - 19968: jis0212<<14 | 0x11<<7 | 0x0E,
+ 20666 - 19968: jis0212<<14 | 0x11<<7 | 0x0F,
+ 20669 - 19968: jis0212<<14 | 0x11<<7 | 0x10,
+ 20670 - 19968: jis0208<<14 | 0x16<<7 | 0x18,
+ 20672 - 19968: jis0212<<14 | 0x11<<7 | 0x11,
+ 20674 - 19968: jis0208<<14 | 0x30<<7 | 0x03,
+ 20675 - 19968: jis0212<<14 | 0x11<<7 | 0x12,
+ 20676 - 19968: jis0212<<14 | 0x11<<7 | 0x13,
+ 20677 - 19968: jis0208<<14 | 0x15<<7 | 0x2E,
+ 20679 - 19968: jis0212<<14 | 0x11<<7 | 0x14,
+ 20681 - 19968: jis0208<<14 | 0x30<<7 | 0x00,
+ 20682 - 19968: jis0208<<14 | 0x30<<7 | 0x01,
+ 20684 - 19968: jis0212<<14 | 0x11<<7 | 0x15,
+ 20685 - 19968: jis0208<<14 | 0x25<<7 | 0x0E,
+ 20686 - 19968: jis0212<<14 | 0x11<<7 | 0x16,
+ 20687 - 19968: jis0208<<14 | 0x20<<7 | 0x5B,
+ 20688 - 19968: jis0212<<14 | 0x11<<7 | 0x17,
+ 20689 - 19968: jis0208<<14 | 0x15<<7 | 0x02,
+ 20691 - 19968: jis0212<<14 | 0x11<<7 | 0x18,
+ 20692 - 19968: jis0212<<14 | 0x11<<7 | 0x19,
+ 20693 - 19968: jis0208<<14 | 0x2A<<7 | 0x2C,
+ 20694 - 19968: jis0208<<14 | 0x30<<7 | 0x04,
+ 20696 - 19968: jis0208<<14 | 0x58<<7 | 0x21,
+ 20698 - 19968: jis0208<<14 | 0x2D<<7 | 0x1C,
+ 20700 - 19968: jis0212<<14 | 0x11<<7 | 0x1B,
+ 20701 - 19968: jis0212<<14 | 0x11<<7 | 0x1C,
+ 20702 - 19968: jis0208<<14 | 0x30<<7 | 0x05,
+ 20703 - 19968: jis0212<<14 | 0x11<<7 | 0x1D,
+ 20706 - 19968: jis0212<<14 | 0x11<<7 | 0x1E,
+ 20707 - 19968: jis0208<<14 | 0x30<<7 | 0x08,
+ 20708 - 19968: jis0212<<14 | 0x11<<7 | 0x1F,
+ 20709 - 19968: jis0208<<14 | 0x30<<7 | 0x06,
+ 20710 - 19968: jis0212<<14 | 0x11<<7 | 0x20,
+ 20711 - 19968: jis0208<<14 | 0x20<<7 | 0x2D,
+ 20712 - 19968: jis0212<<14 | 0x11<<7 | 0x21,
+ 20713 - 19968: jis0212<<14 | 0x11<<7 | 0x22,
+ 20717 - 19968: jis0208<<14 | 0x30<<7 | 0x07,
+ 20718 - 19968: jis0208<<14 | 0x30<<7 | 0x09,
+ 20719 - 19968: jis0212<<14 | 0x11<<7 | 0x23,
+ 20721 - 19968: jis0212<<14 | 0x11<<7 | 0x24,
+ 20722 - 19968: jis0212<<14 | 0x11<<7 | 0x30,
+ 20724 - 19968: jis0208<<14 | 0x58<<7 | 0x20,
+ 20725 - 19968: jis0208<<14 | 0x30<<7 | 0x0B,
+ 20726 - 19968: jis0212<<14 | 0x11<<7 | 0x25,
+ 20729 - 19968: jis0208<<14 | 0x30<<7 | 0x0A,
+ 20730 - 19968: jis0212<<14 | 0x11<<7 | 0x26,
+ 20731 - 19968: jis0208<<14 | 0x29<<7 | 0x27,
+ 20734 - 19968: jis0212<<14 | 0x11<<7 | 0x27,
+ 20736 - 19968: jis0208<<14 | 0x14<<7 | 0x16,
+ 20737 - 19968: jis0208<<14 | 0x30<<7 | 0x0D,
+ 20738 - 19968: jis0208<<14 | 0x30<<7 | 0x0E,
+ 20739 - 19968: jis0212<<14 | 0x11<<7 | 0x28,
+ 20740 - 19968: jis0208<<14 | 0x11<<7 | 0x0E,
+ 20742 - 19968: jis0212<<14 | 0x11<<7 | 0x29,
+ 20743 - 19968: jis0212<<14 | 0x11<<7 | 0x2A,
+ 20744 - 19968: jis0212<<14 | 0x11<<7 | 0x2B,
+ 20745 - 19968: jis0208<<14 | 0x30<<7 | 0x0C,
+ 20747 - 19968: jis0212<<14 | 0x11<<7 | 0x2C,
+ 20748 - 19968: jis0212<<14 | 0x11<<7 | 0x2D,
+ 20749 - 19968: jis0212<<14 | 0x11<<7 | 0x2E,
+ 20750 - 19968: jis0212<<14 | 0x11<<7 | 0x2F,
+ 20752 - 19968: jis0212<<14 | 0x11<<7 | 0x31,
+ 20754 - 19968: jis0208<<14 | 0x1B<<7 | 0x53,
+ 20756 - 19968: jis0208<<14 | 0x30<<7 | 0x11,
+ 20757 - 19968: jis0208<<14 | 0x30<<7 | 0x10,
+ 20758 - 19968: jis0208<<14 | 0x30<<7 | 0x0F,
+ 20759 - 19968: jis0212<<14 | 0x11<<7 | 0x32,
+ 20760 - 19968: jis0208<<14 | 0x2F<<7 | 0x35,
+ 20761 - 19968: jis0212<<14 | 0x11<<7 | 0x33,
+ 20762 - 19968: jis0208<<14 | 0x30<<7 | 0x12,
+ 20763 - 19968: jis0212<<14 | 0x11<<7 | 0x34,
+ 20764 - 19968: jis0212<<14 | 0x11<<7 | 0x35,
+ 20765 - 19968: jis0212<<14 | 0x11<<7 | 0x36,
+ 20766 - 19968: jis0212<<14 | 0x11<<7 | 0x37,
+ 20767 - 19968: jis0208<<14 | 0x1C<<7 | 0x5D,
+ 20769 - 19968: jis0208<<14 | 0x30<<7 | 0x13,
+ 20771 - 19968: jis0212<<14 | 0x11<<7 | 0x38,
+ 20775 - 19968: jis0212<<14 | 0x11<<7 | 0x39,
+ 20776 - 19968: jis0212<<14 | 0x11<<7 | 0x3A,
+ 20778 - 19968: jis0208<<14 | 0x2C<<7 | 0x04,
+ 20780 - 19968: jis0212<<14 | 0x11<<7 | 0x3B,
+ 20781 - 19968: jis0212<<14 | 0x11<<7 | 0x3C,
+ 20783 - 19968: jis0212<<14 | 0x11<<7 | 0x3D,
+ 20785 - 19968: jis0212<<14 | 0x11<<7 | 0x3E,
+ 20786 - 19968: jis0208<<14 | 0x2B<<7 | 0x38,
+ 20787 - 19968: jis0212<<14 | 0x11<<7 | 0x3F,
+ 20788 - 19968: jis0212<<14 | 0x11<<7 | 0x40,
+ 20789 - 19968: jis0212<<14 | 0x11<<7 | 0x41,
+ 20791 - 19968: jis0208<<14 | 0x30<<7 | 0x15,
+ 20792 - 19968: jis0212<<14 | 0x11<<7 | 0x42,
+ 20793 - 19968: jis0212<<14 | 0x11<<7 | 0x43,
+ 20794 - 19968: jis0208<<14 | 0x30<<7 | 0x14,
+ 20795 - 19968: jis0208<<14 | 0x30<<7 | 0x17,
+ 20796 - 19968: jis0208<<14 | 0x30<<7 | 0x16,
+ 20799 - 19968: jis0208<<14 | 0x30<<7 | 0x18,
+ 20800 - 19968: jis0208<<14 | 0x30<<7 | 0x19,
+ 20801 - 19968: jis0208<<14 | 0x0F<<7 | 0x53,
+ 20802 - 19968: jis0212<<14 | 0x11<<7 | 0x44,
+ 20803 - 19968: jis0208<<14 | 0x17<<7 | 0x14,
+ 20804 - 19968: jis0208<<14 | 0x16<<7 | 0x1A,
+ 20805 - 19968: jis0208<<14 | 0x1C<<7 | 0x1B,
+ 20806 - 19968: jis0208<<14 | 0x22<<7 | 0x5A,
+ 20807 - 19968: jis0208<<14 | 0x15<<7 | 0x03,
+ 20808 - 19968: jis0208<<14 | 0x1F<<7 | 0x47,
+ 20809 - 19968: jis0208<<14 | 0x17<<7 | 0x56,
+ 20810 - 19968: jis0208<<14 | 0x58<<7 | 0x22,
+ 20811 - 19968: jis0208<<14 | 0x18<<7 | 0x4D,
+ 20812 - 19968: jis0208<<14 | 0x30<<7 | 0x1B,
+ 20813 - 19968: jis0208<<14 | 0x2B<<7 | 0x27,
+ 20814 - 19968: jis0208<<14 | 0x24<<7 | 0x25,
+ 20815 - 19968: jis0212<<14 | 0x11<<7 | 0x46,
+ 20816 - 19968: jis0208<<14 | 0x1A<<7 | 0x58,
+ 20818 - 19968: jis0208<<14 | 0x30<<7 | 0x1A,
+ 20819 - 19968: jis0212<<14 | 0x11<<7 | 0x47,
+ 20820 - 19968: jis0208<<14 | 0x30<<7 | 0x1C,
+ 20821 - 19968: jis0212<<14 | 0x11<<7 | 0x48,
+ 20823 - 19968: jis0212<<14 | 0x11<<7 | 0x49,
+ 20824 - 19968: jis0212<<14 | 0x11<<7 | 0x4A,
+ 20826 - 19968: jis0208<<14 | 0x24<<7 | 0x3D,
+ 20828 - 19968: jis0208<<14 | 0x12<<7 | 0x54,
+ 20831 - 19968: jis0212<<14 | 0x11<<7 | 0x4B,
+ 20834 - 19968: jis0208<<14 | 0x30<<7 | 0x1D,
+ 20836 - 19968: jis0208<<14 | 0x58<<7 | 0x23,
+ 20837 - 19968: jis0208<<14 | 0x25<<7 | 0x5D,
+ 20838 - 19968: jis0212<<14 | 0x11<<7 | 0x4D,
+ 20840 - 19968: jis0208<<14 | 0x20<<7 | 0x13,
+ 20841 - 19968: jis0208<<14 | 0x30<<7 | 0x1F,
+ 20842 - 19968: jis0208<<14 | 0x30<<7 | 0x20,
+ 20843 - 19968: jis0208<<14 | 0x27<<7 | 0x0B,
+ 20844 - 19968: jis0208<<14 | 0x17<<7 | 0x57,
+ 20845 - 19968: jis0208<<14 | 0x2E<<7 | 0x1A,
+ 20846 - 19968: jis0208<<14 | 0x30<<7 | 0x21,
+ 20849 - 19968: jis0208<<14 | 0x15<<7 | 0x05,
+ 20853 - 19968: jis0208<<14 | 0x29<<7 | 0x1B,
+ 20854 - 19968: jis0208<<14 | 0x21<<7 | 0x15,
+ 20855 - 19968: jis0208<<14 | 0x15<<7 | 0x50,
+ 20856 - 19968: jis0208<<14 | 0x24<<7 | 0x14,
+ 20860 - 19968: jis0208<<14 | 0x16<<7 | 0x52,
+ 20862 - 19968: jis0212<<14 | 0x11<<7 | 0x4E,
+ 20864 - 19968: jis0208<<14 | 0x30<<7 | 0x22,
+ 20866 - 19968: jis0208<<14 | 0x30<<7 | 0x23,
+ 20867 - 19968: jis0212<<14 | 0x11<<7 | 0x4F,
+ 20868 - 19968: jis0212<<14 | 0x11<<7 | 0x50,
+ 20869 - 19968: jis0208<<14 | 0x25<<7 | 0x41,
+ 20870 - 19968: jis0208<<14 | 0x10<<7 | 0x3E,
+ 20873 - 19968: jis0208<<14 | 0x30<<7 | 0x26,
+ 20874 - 19968: jis0208<<14 | 0x19<<7 | 0x5C,
+ 20875 - 19968: jis0212<<14 | 0x11<<7 | 0x51,
+ 20876 - 19968: jis0208<<14 | 0x30<<7 | 0x25,
+ 20877 - 19968: jis0208<<14 | 0x19<<7 | 0x25,
+ 20878 - 19968: jis0212<<14 | 0x11<<7 | 0x52,
+ 20879 - 19968: jis0208<<14 | 0x30<<7 | 0x27,
+ 20880 - 19968: jis0208<<14 | 0x45<<7 | 0x4D,
+ 20881 - 19968: jis0208<<14 | 0x30<<7 | 0x28,
+ 20882 - 19968: jis0208<<14 | 0x2A<<7 | 0x20,
+ 20883 - 19968: jis0208<<14 | 0x30<<7 | 0x29,
+ 20885 - 19968: jis0208<<14 | 0x30<<7 | 0x2A,
+ 20886 - 19968: jis0208<<14 | 0x30<<7 | 0x2B,
+ 20887 - 19968: jis0208<<14 | 0x1D<<7 | 0x48,
+ 20888 - 19968: jis0212<<14 | 0x11<<7 | 0x53,
+ 20889 - 19968: jis0208<<14 | 0x1B<<7 | 0x2B,
+ 20893 - 19968: jis0208<<14 | 0x58<<7 | 0x24,
+ 20896 - 19968: jis0208<<14 | 0x13<<7 | 0x06,
+ 20897 - 19968: jis0212<<14 | 0x11<<7 | 0x55,
+ 20898 - 19968: jis0208<<14 | 0x30<<7 | 0x2E,
+ 20899 - 19968: jis0212<<14 | 0x11<<7 | 0x56,
+ 20900 - 19968: jis0208<<14 | 0x30<<7 | 0x2C,
+ 20901 - 19968: jis0208<<14 | 0x2B<<7 | 0x1C,
+ 20902 - 19968: jis0208<<14 | 0x30<<7 | 0x2D,
+ 20904 - 19968: jis0208<<14 | 0x28<<7 | 0x39,
+ 20905 - 19968: jis0208<<14 | 0x30<<7 | 0x2F,
+ 20906 - 19968: jis0208<<14 | 0x30<<7 | 0x30,
+ 20907 - 19968: jis0208<<14 | 0x30<<7 | 0x31,
+ 20908 - 19968: jis0208<<14 | 0x24<<7 | 0x3E,
+ 20909 - 19968: jis0212<<14 | 0x11<<7 | 0x57,
+ 20912 - 19968: jis0208<<14 | 0x30<<7 | 0x35,
+ 20913 - 19968: jis0208<<14 | 0x30<<7 | 0x33,
+ 20914 - 19968: jis0208<<14 | 0x30<<7 | 0x34,
+ 20915 - 19968: jis0208<<14 | 0x30<<7 | 0x32,
+ 20916 - 19968: jis0208<<14 | 0x19<<7 | 0x42,
+ 20917 - 19968: jis0208<<14 | 0x30<<7 | 0x36,
+ 20918 - 19968: jis0208<<14 | 0x2B<<7 | 0x49,
+ 20919 - 19968: jis0208<<14 | 0x2D<<7 | 0x43,
+ 20920 - 19968: jis0212<<14 | 0x11<<7 | 0x58,
+ 20922 - 19968: jis0212<<14 | 0x11<<7 | 0x59,
+ 20924 - 19968: jis0212<<14 | 0x11<<7 | 0x5A,
+ 20925 - 19968: jis0208<<14 | 0x30<<7 | 0x37,
+ 20926 - 19968: jis0208<<14 | 0x58<<7 | 0x25,
+ 20927 - 19968: jis0212<<14 | 0x11<<7 | 0x5C,
+ 20930 - 19968: jis0212<<14 | 0x11<<7 | 0x5D,
+ 20932 - 19968: jis0208<<14 | 0x1F<<7 | 0x07,
+ 20933 - 19968: jis0208<<14 | 0x30<<7 | 0x38,
+ 20934 - 19968: jis0208<<14 | 0x1C<<7 | 0x39,
+ 20936 - 19968: jis0212<<14 | 0x12<<7 | 0x00,
+ 20937 - 19968: jis0208<<14 | 0x30<<7 | 0x39,
+ 20939 - 19968: jis0208<<14 | 0x22<<7 | 0x5B,
+ 20940 - 19968: jis0208<<14 | 0x2D<<7 | 0x1E,
+ 20941 - 19968: jis0208<<14 | 0x24<<7 | 0x3F,
+ 20943 - 19968: jis0212<<14 | 0x12<<7 | 0x01,
+ 20945 - 19968: jis0212<<14 | 0x12<<7 | 0x02,
+ 20946 - 19968: jis0212<<14 | 0x12<<7 | 0x03,
+ 20947 - 19968: jis0212<<14 | 0x12<<7 | 0x04,
+ 20949 - 19968: jis0212<<14 | 0x12<<7 | 0x05,
+ 20950 - 19968: jis0208<<14 | 0x31<<7 | 0x24,
+ 20952 - 19968: jis0212<<14 | 0x12<<7 | 0x06,
+ 20955 - 19968: jis0208<<14 | 0x30<<7 | 0x3A,
+ 20956 - 19968: jis0208<<14 | 0x53<<7 | 0x04,
+ 20957 - 19968: jis0208<<14 | 0x15<<7 | 0x24,
+ 20958 - 19968: jis0212<<14 | 0x12<<7 | 0x07,
+ 20960 - 19968: jis0208<<14 | 0x30<<7 | 0x3B,
+ 20961 - 19968: jis0208<<14 | 0x2A<<7 | 0x3D,
+ 20962 - 19968: jis0212<<14 | 0x12<<7 | 0x08,
+ 20965 - 19968: jis0212<<14 | 0x12<<7 | 0x09,
+ 20966 - 19968: jis0208<<14 | 0x1C<<7 | 0x47,
+ 20967 - 19968: jis0208<<14 | 0x21<<7 | 0x5B,
+ 20969 - 19968: jis0208<<14 | 0x30<<7 | 0x3D,
+ 20970 - 19968: jis0208<<14 | 0x25<<7 | 0x43,
+ 20972 - 19968: jis0208<<14 | 0x58<<7 | 0x26,
+ 20973 - 19968: jis0208<<14 | 0x30<<7 | 0x3E,
+ 20974 - 19968: jis0212<<14 | 0x12<<7 | 0x0A,
+ 20976 - 19968: jis0208<<14 | 0x30<<7 | 0x3F,
+ 20977 - 19968: jis0208<<14 | 0x12<<7 | 0x0D,
+ 20978 - 19968: jis0212<<14 | 0x12<<7 | 0x0B,
+ 20979 - 19968: jis0212<<14 | 0x12<<7 | 0x0C,
+ 20980 - 19968: jis0212<<14 | 0x12<<7 | 0x0D,
+ 20981 - 19968: jis0208<<14 | 0x30<<7 | 0x40,
+ 20982 - 19968: jis0208<<14 | 0x15<<7 | 0x06,
+ 20983 - 19968: jis0212<<14 | 0x12<<7 | 0x0E,
+ 20984 - 19968: jis0208<<14 | 0x25<<7 | 0x2B,
+ 20985 - 19968: jis0208<<14 | 0x10<<7 | 0x59,
+ 20986 - 19968: jis0208<<14 | 0x1C<<7 | 0x2F,
+ 20989 - 19968: jis0208<<14 | 0x27<<7 | 0x00,
+ 20990 - 19968: jis0208<<14 | 0x30<<7 | 0x41,
+ 20992 - 19968: jis0208<<14 | 0x24<<7 | 0x40,
+ 20993 - 19968: jis0212<<14 | 0x12<<7 | 0x0F,
+ 20994 - 19968: jis0212<<14 | 0x12<<7 | 0x10,
+ 20995 - 19968: jis0208<<14 | 0x1E<<7 | 0x2E,
+ 20996 - 19968: jis0208<<14 | 0x30<<7 | 0x42,
+ 20997 - 19968: jis0212<<14 | 0x12<<7 | 0x11,
+ 20998 - 19968: jis0208<<14 | 0x29<<7 | 0x0B,
+ 20999 - 19968: jis0208<<14 | 0x1F<<7 | 0x39,
+ 21000 - 19968: jis0208<<14 | 0x13<<7 | 0x01,
+ 21002 - 19968: jis0208<<14 | 0x13<<7 | 0x08,
+ 21003 - 19968: jis0208<<14 | 0x30<<7 | 0x43,
+ 21006 - 19968: jis0208<<14 | 0x30<<7 | 0x45,
+ 21009 - 19968: jis0208<<14 | 0x16<<7 | 0x19,
+ 21010 - 19968: jis0212<<14 | 0x12<<7 | 0x12,
+ 21011 - 19968: jis0212<<14 | 0x12<<7 | 0x13,
+ 21012 - 19968: jis0208<<14 | 0x30<<7 | 0x44,
+ 21013 - 19968: jis0208<<14 | 0x58<<7 | 0x27,
+ 21014 - 19968: jis0212<<14 | 0x12<<7 | 0x15,
+ 21015 - 19968: jis0208<<14 | 0x2D<<7 | 0x52,
+ 21016 - 19968: jis0212<<14 | 0x12<<7 | 0x16,
+ 21021 - 19968: jis0208<<14 | 0x1C<<7 | 0x48,
+ 21026 - 19968: jis0212<<14 | 0x12<<7 | 0x17,
+ 21028 - 19968: jis0208<<14 | 0x27<<7 | 0x1C,
+ 21029 - 19968: jis0208<<14 | 0x29<<7 | 0x2B,
+ 21031 - 19968: jis0208<<14 | 0x30<<7 | 0x46,
+ 21032 - 19968: jis0212<<14 | 0x12<<7 | 0x18,
+ 21033 - 19968: jis0208<<14 | 0x2C<<7 | 0x57,
+ 21034 - 19968: jis0208<<14 | 0x30<<7 | 0x47,
+ 21038 - 19968: jis0208<<14 | 0x30<<7 | 0x48,
+ 21040 - 19968: jis0208<<14 | 0x24<<7 | 0x5D,
+ 21041 - 19968: jis0212<<14 | 0x12<<7 | 0x19,
+ 21042 - 19968: jis0212<<14 | 0x12<<7 | 0x1A,
+ 21043 - 19968: jis0208<<14 | 0x30<<7 | 0x49,
+ 21045 - 19968: jis0212<<14 | 0x12<<7 | 0x1B,
+ 21046 - 19968: jis0208<<14 | 0x1F<<7 | 0x08,
+ 21047 - 19968: jis0208<<14 | 0x19<<7 | 0x5D,
+ 21048 - 19968: jis0208<<14 | 0x16<<7 | 0x53,
+ 21049 - 19968: jis0208<<14 | 0x30<<7 | 0x4A,
+ 21050 - 19968: jis0208<<14 | 0x1A<<7 | 0x28,
+ 21051 - 19968: jis0208<<14 | 0x18<<7 | 0x4E,
+ 21052 - 19968: jis0212<<14 | 0x12<<7 | 0x1C,
+ 21059 - 19968: jis0208<<14 | 0x23<<7 | 0x45,
+ 21060 - 19968: jis0208<<14 | 0x30<<7 | 0x4C,
+ 21061 - 19968: jis0212<<14 | 0x12<<7 | 0x1D,
+ 21063 - 19968: jis0208<<14 | 0x21<<7 | 0x06,
+ 21065 - 19968: jis0212<<14 | 0x12<<7 | 0x1E,
+ 21066 - 19968: jis0208<<14 | 0x19<<7 | 0x4E,
+ 21067 - 19968: jis0208<<14 | 0x30<<7 | 0x4D,
+ 21068 - 19968: jis0208<<14 | 0x30<<7 | 0x4E,
+ 21069 - 19968: jis0208<<14 | 0x20<<7 | 0x0F,
+ 21071 - 19968: jis0208<<14 | 0x30<<7 | 0x4B,
+ 21076 - 19968: jis0208<<14 | 0x30<<7 | 0x50,
+ 21077 - 19968: jis0212<<14 | 0x12<<7 | 0x1F,
+ 21078 - 19968: jis0208<<14 | 0x2A<<7 | 0x15,
+ 21079 - 19968: jis0212<<14 | 0x12<<7 | 0x20,
+ 21080 - 19968: jis0212<<14 | 0x12<<7 | 0x21,
+ 21082 - 19968: jis0212<<14 | 0x12<<7 | 0x22,
+ 21083 - 19968: jis0208<<14 | 0x18<<7 | 0x43,
+ 21084 - 19968: jis0212<<14 | 0x12<<7 | 0x23,
+ 21086 - 19968: jis0208<<14 | 0x30<<7 | 0x4F,
+ 21087 - 19968: jis0212<<14 | 0x12<<7 | 0x24,
+ 21088 - 19968: jis0212<<14 | 0x12<<7 | 0x25,
+ 21089 - 19968: jis0212<<14 | 0x12<<7 | 0x26,
+ 21091 - 19968: jis0208<<14 | 0x16<<7 | 0x54,
+ 21092 - 19968: jis0208<<14 | 0x19<<7 | 0x3D,
+ 21093 - 19968: jis0208<<14 | 0x26<<7 | 0x4C,
+ 21094 - 19968: jis0212<<14 | 0x12<<7 | 0x27,
+ 21097 - 19968: jis0208<<14 | 0x30<<7 | 0x53,
+ 21098 - 19968: jis0208<<14 | 0x30<<7 | 0x51,
+ 21102 - 19968: jis0212<<14 | 0x12<<7 | 0x28,
+ 21103 - 19968: jis0208<<14 | 0x28<<7 | 0x5A,
+ 21104 - 19968: jis0208<<14 | 0x1D<<7 | 0x49,
+ 21105 - 19968: jis0208<<14 | 0x30<<7 | 0x5A,
+ 21106 - 19968: jis0208<<14 | 0x12<<7 | 0x43,
+ 21107 - 19968: jis0208<<14 | 0x30<<7 | 0x54,
+ 21108 - 19968: jis0208<<14 | 0x30<<7 | 0x52,
+ 21109 - 19968: jis0208<<14 | 0x20<<7 | 0x2E,
+ 21111 - 19968: jis0212<<14 | 0x12<<7 | 0x29,
+ 21112 - 19968: jis0212<<14 | 0x12<<7 | 0x2A,
+ 21113 - 19968: jis0212<<14 | 0x12<<7 | 0x2B,
+ 21117 - 19968: jis0208<<14 | 0x30<<7 | 0x56,
+ 21119 - 19968: jis0208<<14 | 0x30<<7 | 0x55,
+ 21120 - 19968: jis0212<<14 | 0x12<<7 | 0x2C,
+ 21122 - 19968: jis0212<<14 | 0x12<<7 | 0x2D,
+ 21123 - 19968: jis0208<<14 | 0x12<<7 | 0x23,
+ 21125 - 19968: jis0212<<14 | 0x12<<7 | 0x2E,
+ 21127 - 19968: jis0208<<14 | 0x16<<7 | 0x3F,
+ 21128 - 19968: jis0208<<14 | 0x30<<7 | 0x5B,
+ 21129 - 19968: jis0208<<14 | 0x2D<<7 | 0x0C,
+ 21130 - 19968: jis0212<<14 | 0x12<<7 | 0x2F,
+ 21132 - 19968: jis0212<<14 | 0x12<<7 | 0x30,
+ 21133 - 19968: jis0208<<14 | 0x30<<7 | 0x57,
+ 21137 - 19968: jis0208<<14 | 0x30<<7 | 0x5C,
+ 21138 - 19968: jis0208<<14 | 0x30<<7 | 0x59,
+ 21139 - 19968: jis0212<<14 | 0x12<<7 | 0x31,
+ 21140 - 19968: jis0208<<14 | 0x30<<7 | 0x58,
+ 21141 - 19968: jis0212<<14 | 0x12<<7 | 0x32,
+ 21142 - 19968: jis0212<<14 | 0x12<<7 | 0x33,
+ 21143 - 19968: jis0212<<14 | 0x12<<7 | 0x34,
+ 21144 - 19968: jis0212<<14 | 0x12<<7 | 0x35,
+ 21146 - 19968: jis0212<<14 | 0x12<<7 | 0x36,
+ 21147 - 19968: jis0208<<14 | 0x2D<<7 | 0x2E,
+ 21148 - 19968: jis0208<<14 | 0x58<<7 | 0x28,
+ 21151 - 19968: jis0208<<14 | 0x17<<7 | 0x58,
+ 21152 - 19968: jis0208<<14 | 0x11<<7 | 0x22,
+ 21155 - 19968: jis0208<<14 | 0x2D<<7 | 0x53,
+ 21156 - 19968: jis0212<<14 | 0x12<<7 | 0x38,
+ 21157 - 19968: jis0212<<14 | 0x12<<7 | 0x39,
+ 21158 - 19968: jis0208<<14 | 0x58<<7 | 0x29,
+ 21159 - 19968: jis0212<<14 | 0x12<<7 | 0x3B,
+ 21161 - 19968: jis0208<<14 | 0x1C<<7 | 0x54,
+ 21162 - 19968: jis0208<<14 | 0x24<<7 | 0x37,
+ 21163 - 19968: jis0208<<14 | 0x18<<7 | 0x44,
+ 21164 - 19968: jis0208<<14 | 0x31<<7 | 0x01,
+ 21165 - 19968: jis0208<<14 | 0x31<<7 | 0x02,
+ 21167 - 19968: jis0208<<14 | 0x5A<<7 | 0x1B,
+ 21168 - 19968: jis0212<<14 | 0x12<<7 | 0x3D,
+ 21169 - 19968: jis0208<<14 | 0x2D<<7 | 0x44,
+ 21172 - 19968: jis0208<<14 | 0x2E<<7 | 0x0A,
+ 21173 - 19968: jis0208<<14 | 0x31<<7 | 0x04,
+ 21174 - 19968: jis0212<<14 | 0x12<<7 | 0x3E,
+ 21175 - 19968: jis0212<<14 | 0x12<<7 | 0x3F,
+ 21176 - 19968: jis0212<<14 | 0x12<<7 | 0x40,
+ 21177 - 19968: jis0208<<14 | 0x17<<7 | 0x59,
+ 21178 - 19968: jis0212<<14 | 0x12<<7 | 0x41,
+ 21179 - 19968: jis0212<<14 | 0x12<<7 | 0x42,
+ 21180 - 19968: jis0208<<14 | 0x31<<7 | 0x03,
+ 21181 - 19968: jis0212<<14 | 0x12<<7 | 0x43,
+ 21182 - 19968: jis0208<<14 | 0x12<<7 | 0x0E,
+ 21184 - 19968: jis0208<<14 | 0x58<<7 | 0x2A,
+ 21185 - 19968: jis0208<<14 | 0x31<<7 | 0x05,
+ 21187 - 19968: jis0208<<14 | 0x2A<<7 | 0x35,
+ 21188 - 19968: jis0212<<14 | 0x12<<7 | 0x45,
+ 21189 - 19968: jis0208<<14 | 0x23<<7 | 0x1B,
+ 21190 - 19968: jis0212<<14 | 0x12<<7 | 0x46,
+ 21191 - 19968: jis0208<<14 | 0x2C<<7 | 0x05,
+ 21192 - 19968: jis0212<<14 | 0x12<<7 | 0x47,
+ 21193 - 19968: jis0208<<14 | 0x29<<7 | 0x38,
+ 21196 - 19968: jis0212<<14 | 0x12<<7 | 0x48,
+ 21197 - 19968: jis0208<<14 | 0x31<<7 | 0x06,
+ 21199 - 19968: jis0212<<14 | 0x12<<7 | 0x49,
+ 21201 - 19968: jis0212<<14 | 0x12<<7 | 0x4A,
+ 21202 - 19968: jis0208<<14 | 0x4F<<7 | 0x34,
+ 21204 - 19968: jis0212<<14 | 0x12<<7 | 0x4B,
+ 21205 - 19968: jis0208<<14 | 0x25<<7 | 0x0F,
+ 21206 - 19968: jis0212<<14 | 0x12<<7 | 0x4C,
+ 21207 - 19968: jis0208<<14 | 0x31<<7 | 0x07,
+ 21208 - 19968: jis0208<<14 | 0x13<<7 | 0x09,
+ 21209 - 19968: jis0208<<14 | 0x2B<<7 | 0x12,
+ 21211 - 19968: jis0208<<14 | 0x58<<7 | 0x2B,
+ 21212 - 19968: jis0212<<14 | 0x12<<7 | 0x4E,
+ 21213 - 19968: jis0208<<14 | 0x1D<<7 | 0x00,
+ 21214 - 19968: jis0208<<14 | 0x31<<7 | 0x08,
+ 21215 - 19968: jis0208<<14 | 0x29<<7 | 0x46,
+ 21216 - 19968: jis0208<<14 | 0x31<<7 | 0x0C,
+ 21217 - 19968: jis0212<<14 | 0x12<<7 | 0x4F,
+ 21218 - 19968: jis0208<<14 | 0x1F<<7 | 0x09,
+ 21219 - 19968: jis0208<<14 | 0x31<<7 | 0x09,
+ 21220 - 19968: jis0208<<14 | 0x15<<7 | 0x2F,
+ 21221 - 19968: jis0212<<14 | 0x12<<7 | 0x50,
+ 21222 - 19968: jis0208<<14 | 0x31<<7 | 0x0A,
+ 21223 - 19968: jis0208<<14 | 0x13<<7 | 0x0A,
+ 21224 - 19968: jis0212<<14 | 0x12<<7 | 0x51,
+ 21225 - 19968: jis0212<<14 | 0x12<<7 | 0x52,
+ 21226 - 19968: jis0212<<14 | 0x12<<7 | 0x53,
+ 21228 - 19968: jis0212<<14 | 0x12<<7 | 0x54,
+ 21232 - 19968: jis0212<<14 | 0x12<<7 | 0x55,
+ 21233 - 19968: jis0212<<14 | 0x12<<7 | 0x56,
+ 21234 - 19968: jis0208<<14 | 0x16<<7 | 0x0D,
+ 21235 - 19968: jis0208<<14 | 0x31<<7 | 0x0D,
+ 21236 - 19968: jis0212<<14 | 0x12<<7 | 0x57,
+ 21237 - 19968: jis0208<<14 | 0x31<<7 | 0x0E,
+ 21238 - 19968: jis0212<<14 | 0x12<<7 | 0x58,
+ 21239 - 19968: jis0212<<14 | 0x12<<7 | 0x59,
+ 21240 - 19968: jis0208<<14 | 0x31<<7 | 0x0F,
+ 21241 - 19968: jis0208<<14 | 0x31<<7 | 0x10,
+ 21242 - 19968: jis0208<<14 | 0x1B<<7 | 0x3A,
+ 21246 - 19968: jis0208<<14 | 0x17<<7 | 0x5A,
+ 21247 - 19968: jis0208<<14 | 0x2B<<7 | 0x3D,
+ 21248 - 19968: jis0208<<14 | 0x58<<7 | 0x2C,
+ 21249 - 19968: jis0208<<14 | 0x2B<<7 | 0x47,
+ 21250 - 19968: jis0208<<14 | 0x25<<7 | 0x56,
+ 21251 - 19968: jis0212<<14 | 0x12<<7 | 0x5B,
+ 21253 - 19968: jis0208<<14 | 0x29<<7 | 0x50,
+ 21254 - 19968: jis0208<<14 | 0x31<<7 | 0x11,
+ 21255 - 19968: jis0208<<14 | 0x58<<7 | 0x2D,
+ 21256 - 19968: jis0208<<14 | 0x31<<7 | 0x12,
+ 21258 - 19968: jis0212<<14 | 0x12<<7 | 0x5C,
+ 21259 - 19968: jis0212<<14 | 0x12<<7 | 0x5D,
+ 21260 - 19968: jis0212<<14 | 0x13<<7 | 0x00,
+ 21261 - 19968: jis0208<<14 | 0x31<<7 | 0x14,
+ 21263 - 19968: jis0208<<14 | 0x31<<7 | 0x16,
+ 21264 - 19968: jis0208<<14 | 0x31<<7 | 0x15,
+ 21265 - 19968: jis0212<<14 | 0x13<<7 | 0x01,
+ 21267 - 19968: jis0212<<14 | 0x13<<7 | 0x02,
+ 21269 - 19968: jis0208<<14 | 0x31<<7 | 0x17,
+ 21270 - 19968: jis0208<<14 | 0x11<<7 | 0x1C,
+ 21271 - 19968: jis0208<<14 | 0x2A<<7 | 0x2B,
+ 21272 - 19968: jis0212<<14 | 0x13<<7 | 0x03,
+ 21273 - 19968: jis0208<<14 | 0x19<<7 | 0x5B,
+ 21274 - 19968: jis0208<<14 | 0x31<<7 | 0x18,
+ 21275 - 19968: jis0212<<14 | 0x13<<7 | 0x04,
+ 21276 - 19968: jis0212<<14 | 0x13<<7 | 0x05,
+ 21277 - 19968: jis0208<<14 | 0x20<<7 | 0x38,
+ 21278 - 19968: jis0212<<14 | 0x13<<7 | 0x06,
+ 21279 - 19968: jis0212<<14 | 0x13<<7 | 0x07,
+ 21280 - 19968: jis0208<<14 | 0x1D<<7 | 0x01,
+ 21281 - 19968: jis0208<<14 | 0x15<<7 | 0x08,
+ 21283 - 19968: jis0208<<14 | 0x31<<7 | 0x19,
+ 21284 - 19968: jis0208<<14 | 0x58<<7 | 0x2E,
+ 21285 - 19968: jis0212<<14 | 0x13<<7 | 0x08,
+ 21287 - 19968: jis0212<<14 | 0x13<<7 | 0x09,
+ 21288 - 19968: jis0212<<14 | 0x13<<7 | 0x0A,
+ 21289 - 19968: jis0212<<14 | 0x13<<7 | 0x0B,
+ 21290 - 19968: jis0208<<14 | 0x27<<7 | 0x3A,
+ 21291 - 19968: jis0212<<14 | 0x13<<7 | 0x0C,
+ 21292 - 19968: jis0212<<14 | 0x13<<7 | 0x0D,
+ 21293 - 19968: jis0212<<14 | 0x13<<7 | 0x0E,
+ 21295 - 19968: jis0208<<14 | 0x31<<7 | 0x1A,
+ 21296 - 19968: jis0212<<14 | 0x13<<7 | 0x0F,
+ 21297 - 19968: jis0208<<14 | 0x31<<7 | 0x1B,
+ 21298 - 19968: jis0212<<14 | 0x13<<7 | 0x10,
+ 21299 - 19968: jis0208<<14 | 0x31<<7 | 0x1C,
+ 21301 - 19968: jis0212<<14 | 0x13<<7 | 0x11,
+ 21304 - 19968: jis0208<<14 | 0x31<<7 | 0x1D,
+ 21305 - 19968: jis0208<<14 | 0x28<<7 | 0x03,
+ 21306 - 19968: jis0208<<14 | 0x15<<7 | 0x47,
+ 21307 - 19968: jis0208<<14 | 0x0F<<7 | 0x44,
+ 21308 - 19968: jis0212<<14 | 0x13<<7 | 0x12,
+ 21309 - 19968: jis0212<<14 | 0x13<<7 | 0x13,
+ 21310 - 19968: jis0212<<14 | 0x13<<7 | 0x14,
+ 21311 - 19968: jis0208<<14 | 0x25<<7 | 0x1E,
+ 21312 - 19968: jis0208<<14 | 0x31<<7 | 0x1E,
+ 21313 - 19968: jis0208<<14 | 0x1C<<7 | 0x1C,
+ 21314 - 19968: jis0212<<14 | 0x13<<7 | 0x15,
+ 21315 - 19968: jis0208<<14 | 0x1F<<7 | 0x48,
+ 21317 - 19968: jis0208<<14 | 0x31<<7 | 0x20,
+ 21318 - 19968: jis0208<<14 | 0x31<<7 | 0x1F,
+ 21319 - 19968: jis0208<<14 | 0x1D<<7 | 0x02,
+ 21320 - 19968: jis0208<<14 | 0x17<<7 | 0x40,
+ 21321 - 19968: jis0208<<14 | 0x31<<7 | 0x22,
+ 21322 - 19968: jis0208<<14 | 0x27<<7 | 0x1D,
+ 21323 - 19968: jis0212<<14 | 0x13<<7 | 0x17,
+ 21324 - 19968: jis0212<<14 | 0x13<<7 | 0x16,
+ 21325 - 19968: jis0208<<14 | 0x31<<7 | 0x23,
+ 21329 - 19968: jis0208<<14 | 0x27<<7 | 0x3B,
+ 21330 - 19968: jis0208<<14 | 0x21<<7 | 0x13,
+ 21331 - 19968: jis0208<<14 | 0x21<<7 | 0x4D,
+ 21332 - 19968: jis0208<<14 | 0x15<<7 | 0x07,
+ 21335 - 19968: jis0208<<14 | 0x25<<7 | 0x4D,
+ 21336 - 19968: jis0208<<14 | 0x22<<7 | 0x10,
+ 21337 - 19968: jis0212<<14 | 0x13<<7 | 0x18,
+ 21338 - 19968: jis0208<<14 | 0x26<<7 | 0x4D,
+ 21339 - 19968: jis0212<<14 | 0x13<<7 | 0x19,
+ 21340 - 19968: jis0208<<14 | 0x2A<<7 | 0x2D,
+ 21342 - 19968: jis0208<<14 | 0x31<<7 | 0x25,
+ 21344 - 19968: jis0208<<14 | 0x1F<<7 | 0x49,
+ 21345 - 19968: jis0212<<14 | 0x13<<7 | 0x1A,
+ 21347 - 19968: jis0212<<14 | 0x13<<7 | 0x1B,
+ 21349 - 19968: jis0212<<14 | 0x13<<7 | 0x1C,
+ 21350 - 19968: jis0208<<14 | 0x16<<7 | 0x14,
+ 21353 - 19968: jis0208<<14 | 0x31<<7 | 0x26,
+ 21356 - 19968: jis0212<<14 | 0x13<<7 | 0x1D,
+ 21357 - 19968: jis0212<<14 | 0x13<<7 | 0x1E,
+ 21358 - 19968: jis0208<<14 | 0x31<<7 | 0x27,
+ 21359 - 19968: jis0208<<14 | 0x10<<7 | 0x0B,
+ 21360 - 19968: jis0208<<14 | 0x0F<<7 | 0x54,
+ 21361 - 19968: jis0208<<14 | 0x13<<7 | 0x4C,
+ 21362 - 19968: jis0208<<14 | 0x58<<7 | 0x2F,
+ 21363 - 19968: jis0208<<14 | 0x21<<7 | 0x07,
+ 21364 - 19968: jis0208<<14 | 0x14<<7 | 0x30,
+ 21365 - 19968: jis0208<<14 | 0x2C<<7 | 0x50,
+ 21367 - 19968: jis0208<<14 | 0x31<<7 | 0x2A,
+ 21368 - 19968: jis0208<<14 | 0x11<<7 | 0x16,
+ 21369 - 19968: jis0212<<14 | 0x13<<7 | 0x20,
+ 21371 - 19968: jis0208<<14 | 0x31<<7 | 0x29,
+ 21374 - 19968: jis0212<<14 | 0x13<<7 | 0x21,
+ 21375 - 19968: jis0208<<14 | 0x15<<7 | 0x09,
+ 21378 - 19968: jis0208<<14 | 0x31<<7 | 0x2B,
+ 21379 - 19968: jis0212<<14 | 0x13<<7 | 0x22,
+ 21380 - 19968: jis0208<<14 | 0x2B<<7 | 0x50,
+ 21383 - 19968: jis0212<<14 | 0x13<<7 | 0x23,
+ 21384 - 19968: jis0212<<14 | 0x13<<7 | 0x24,
+ 21390 - 19968: jis0212<<14 | 0x13<<7 | 0x25,
+ 21395 - 19968: jis0208<<14 | 0x58<<7 | 0x30,
+ 21396 - 19968: jis0212<<14 | 0x13<<7 | 0x27,
+ 21398 - 19968: jis0208<<14 | 0x31<<7 | 0x2C,
+ 21400 - 19968: jis0208<<14 | 0x2D<<7 | 0x31,
+ 21401 - 19968: jis0212<<14 | 0x13<<7 | 0x28,
+ 21402 - 19968: jis0208<<14 | 0x17<<7 | 0x5B,
+ 21405 - 19968: jis0212<<14 | 0x13<<7 | 0x29,
+ 21407 - 19968: jis0208<<14 | 0x17<<7 | 0x15,
+ 21408 - 19968: jis0208<<14 | 0x31<<7 | 0x2D,
+ 21409 - 19968: jis0212<<14 | 0x13<<7 | 0x2A,
+ 21412 - 19968: jis0212<<14 | 0x13<<7 | 0x2B,
+ 21413 - 19968: jis0208<<14 | 0x31<<7 | 0x2F,
+ 21414 - 19968: jis0208<<14 | 0x31<<7 | 0x2E,
+ 21416 - 19968: jis0208<<14 | 0x1E<<7 | 0x3E,
+ 21417 - 19968: jis0208<<14 | 0x10<<7 | 0x18,
+ 21418 - 19968: jis0212<<14 | 0x13<<7 | 0x2C,
+ 21419 - 19968: jis0212<<14 | 0x13<<7 | 0x2D,
+ 21421 - 19968: jis0208<<14 | 0x10<<7 | 0x3D,
+ 21422 - 19968: jis0208<<14 | 0x31<<7 | 0x30,
+ 21423 - 19968: jis0212<<14 | 0x13<<7 | 0x2E,
+ 21424 - 19968: jis0208<<14 | 0x31<<7 | 0x31,
+ 21426 - 19968: jis0208<<14 | 0x58<<7 | 0x31,
+ 21427 - 19968: jis0208<<14 | 0x17<<7 | 0x16,
+ 21428 - 19968: jis0212<<14 | 0x13<<7 | 0x30,
+ 21429 - 19968: jis0212<<14 | 0x13<<7 | 0x31,
+ 21430 - 19968: jis0208<<14 | 0x31<<7 | 0x32,
+ 21431 - 19968: jis0212<<14 | 0x13<<7 | 0x32,
+ 21432 - 19968: jis0212<<14 | 0x13<<7 | 0x33,
+ 21434 - 19968: jis0212<<14 | 0x13<<7 | 0x34,
+ 21435 - 19968: jis0208<<14 | 0x14<<7 | 0x4D,
+ 21437 - 19968: jis0212<<14 | 0x13<<7 | 0x35,
+ 21440 - 19968: jis0212<<14 | 0x13<<7 | 0x36,
+ 21442 - 19968: jis0208<<14 | 0x1A<<7 | 0x11,
+ 21443 - 19968: jis0208<<14 | 0x31<<7 | 0x33,
+ 21445 - 19968: jis0212<<14 | 0x13<<7 | 0x37,
+ 21448 - 19968: jis0208<<14 | 0x2A<<7 | 0x53,
+ 21449 - 19968: jis0208<<14 | 0x19<<7 | 0x14,
+ 21450 - 19968: jis0208<<14 | 0x14<<7 | 0x39,
+ 21451 - 19968: jis0208<<14 | 0x2C<<7 | 0x06,
+ 21452 - 19968: jis0208<<14 | 0x20<<7 | 0x2F,
+ 21453 - 19968: jis0208<<14 | 0x27<<7 | 0x1E,
+ 21454 - 19968: jis0208<<14 | 0x1B<<7 | 0x5C,
+ 21455 - 19968: jis0212<<14 | 0x13<<7 | 0x38,
+ 21458 - 19968: jis0212<<14 | 0x13<<7 | 0x39,
+ 21459 - 19968: jis0212<<14 | 0x13<<7 | 0x3A,
+ 21460 - 19968: jis0208<<14 | 0x1C<<7 | 0x26,
+ 21461 - 19968: jis0212<<14 | 0x13<<7 | 0x3B,
+ 21462 - 19968: jis0208<<14 | 0x1B<<7 | 0x47,
+ 21463 - 19968: jis0208<<14 | 0x1B<<7 | 0x54,
+ 21465 - 19968: jis0208<<14 | 0x1C<<7 | 0x55,
+ 21466 - 19968: jis0212<<14 | 0x13<<7 | 0x3C,
+ 21467 - 19968: jis0208<<14 | 0x27<<7 | 0x1F,
+ 21469 - 19968: jis0208<<14 | 0x58<<7 | 0x32,
+ 21470 - 19968: jis0212<<14 | 0x13<<7 | 0x3E,
+ 21471 - 19968: jis0208<<14 | 0x31<<7 | 0x36,
+ 21472 - 19968: jis0212<<14 | 0x13<<7 | 0x3F,
+ 21473 - 19968: jis0208<<14 | 0x10<<7 | 0x22,
+ 21474 - 19968: jis0208<<14 | 0x20<<7 | 0x30,
+ 21475 - 19968: jis0208<<14 | 0x17<<7 | 0x5C,
+ 21476 - 19968: jis0208<<14 | 0x17<<7 | 0x24,
+ 21477 - 19968: jis0208<<14 | 0x15<<7 | 0x46,
+ 21478 - 19968: jis0212<<14 | 0x13<<7 | 0x40,
+ 21479 - 19968: jis0212<<14 | 0x13<<7 | 0x41,
+ 21480 - 19968: jis0208<<14 | 0x31<<7 | 0x3A,
+ 21481 - 19968: jis0208<<14 | 0x22<<7 | 0x00,
+ 21482 - 19968: jis0208<<14 | 0x21<<7 | 0x5D,
+ 21483 - 19968: jis0208<<14 | 0x15<<7 | 0x0A,
+ 21484 - 19968: jis0208<<14 | 0x1D<<7 | 0x03,
+ 21485 - 19968: jis0208<<14 | 0x31<<7 | 0x3B,
+ 21486 - 19968: jis0208<<14 | 0x31<<7 | 0x39,
+ 21487 - 19968: jis0208<<14 | 0x11<<7 | 0x23,
+ 21488 - 19968: jis0208<<14 | 0x21<<7 | 0x45,
+ 21489 - 19968: jis0208<<14 | 0x1B<<7 | 0x17,
+ 21490 - 19968: jis0208<<14 | 0x1A<<7 | 0x2A,
+ 21491 - 19968: jis0208<<14 | 0x10<<7 | 0x05,
+ 21493 - 19968: jis0212<<14 | 0x13<<7 | 0x42,
+ 21494 - 19968: jis0208<<14 | 0x12<<7 | 0x4F,
+ 21495 - 19968: jis0208<<14 | 0x18<<7 | 0x45,
+ 21496 - 19968: jis0208<<14 | 0x1A<<7 | 0x29,
+ 21498 - 19968: jis0208<<14 | 0x31<<7 | 0x3C,
+ 21505 - 19968: jis0208<<14 | 0x31<<7 | 0x3D,
+ 21506 - 19968: jis0212<<14 | 0x13<<7 | 0x43,
+ 21507 - 19968: jis0208<<14 | 0x14<<7 | 0x28,
+ 21508 - 19968: jis0208<<14 | 0x12<<7 | 0x25,
+ 21512 - 19968: jis0208<<14 | 0x18<<7 | 0x46,
+ 21513 - 19968: jis0208<<14 | 0x14<<7 | 0x27,
+ 21514 - 19968: jis0208<<14 | 0x23<<7 | 0x3E,
+ 21515 - 19968: jis0208<<14 | 0x10<<7 | 0x04,
+ 21516 - 19968: jis0208<<14 | 0x25<<7 | 0x10,
+ 21517 - 19968: jis0208<<14 | 0x2B<<7 | 0x1D,
+ 21518 - 19968: jis0208<<14 | 0x18<<7 | 0x00,
+ 21519 - 19968: jis0208<<14 | 0x2C<<7 | 0x58,
+ 21520 - 19968: jis0208<<14 | 0x24<<7 | 0x26,
+ 21521 - 19968: jis0208<<14 | 0x17<<7 | 0x5D,
+ 21523 - 19968: jis0212<<14 | 0x13<<7 | 0x44,
+ 21530 - 19968: jis0212<<14 | 0x13<<7 | 0x45,
+ 21531 - 19968: jis0208<<14 | 0x16<<7 | 0x0E,
+ 21533 - 19968: jis0208<<14 | 0x31<<7 | 0x46,
+ 21535 - 19968: jis0208<<14 | 0x15<<7 | 0x42,
+ 21536 - 19968: jis0208<<14 | 0x2A<<7 | 0x29,
+ 21537 - 19968: jis0212<<14 | 0x13<<7 | 0x46,
+ 21542 - 19968: jis0208<<14 | 0x27<<7 | 0x3C,
+ 21543 - 19968: jis0212<<14 | 0x13<<7 | 0x47,
+ 21544 - 19968: jis0212<<14 | 0x13<<7 | 0x48,
+ 21545 - 19968: jis0208<<14 | 0x31<<7 | 0x45,
+ 21546 - 19968: jis0212<<14 | 0x13<<7 | 0x49,
+ 21547 - 19968: jis0208<<14 | 0x13<<7 | 0x3D,
+ 21548 - 19968: jis0208<<14 | 0x31<<7 | 0x40,
+ 21549 - 19968: jis0208<<14 | 0x31<<7 | 0x41,
+ 21550 - 19968: jis0208<<14 | 0x31<<7 | 0x43,
+ 21551 - 19968: jis0212<<14 | 0x13<<7 | 0x4A,
+ 21553 - 19968: jis0212<<14 | 0x13<<7 | 0x4B,
+ 21556 - 19968: jis0212<<14 | 0x13<<7 | 0x4C,
+ 21557 - 19968: jis0212<<14 | 0x13<<7 | 0x4D,
+ 21558 - 19968: jis0208<<14 | 0x31<<7 | 0x44,
+ 21560 - 19968: jis0208<<14 | 0x14<<7 | 0x3A,
+ 21561 - 19968: jis0208<<14 | 0x1E<<7 | 0x40,
+ 21563 - 19968: jis0208<<14 | 0x29<<7 | 0x0C,
+ 21564 - 19968: jis0208<<14 | 0x31<<7 | 0x42,
+ 21565 - 19968: jis0208<<14 | 0x31<<7 | 0x3E,
+ 21566 - 19968: jis0208<<14 | 0x17<<7 | 0x42,
+ 21568 - 19968: jis0208<<14 | 0x31<<7 | 0x3F,
+ 21570 - 19968: jis0208<<14 | 0x2E<<7 | 0x03,
+ 21571 - 19968: jis0212<<14 | 0x13<<7 | 0x4E,
+ 21572 - 19968: jis0212<<14 | 0x13<<7 | 0x4F,
+ 21574 - 19968: jis0208<<14 | 0x29<<7 | 0x51,
+ 21575 - 19968: jis0212<<14 | 0x13<<7 | 0x50,
+ 21576 - 19968: jis0208<<14 | 0x23<<7 | 0x47,
+ 21577 - 19968: jis0208<<14 | 0x17<<7 | 0x41,
+ 21578 - 19968: jis0208<<14 | 0x18<<7 | 0x4F,
+ 21581 - 19968: jis0212<<14 | 0x13<<7 | 0x51,
+ 21582 - 19968: jis0208<<14 | 0x31<<7 | 0x47,
+ 21583 - 19968: jis0212<<14 | 0x13<<7 | 0x52,
+ 21585 - 19968: jis0208<<14 | 0x25<<7 | 0x3C,
+ 21598 - 19968: jis0212<<14 | 0x13<<7 | 0x53,
+ 21599 - 19968: jis0208<<14 | 0x31<<7 | 0x4B,
+ 21602 - 19968: jis0212<<14 | 0x13<<7 | 0x54,
+ 21604 - 19968: jis0212<<14 | 0x13<<7 | 0x55,
+ 21606 - 19968: jis0212<<14 | 0x13<<7 | 0x56,
+ 21607 - 19968: jis0212<<14 | 0x13<<7 | 0x57,
+ 21608 - 19968: jis0208<<14 | 0x1B<<7 | 0x5D,
+ 21609 - 19968: jis0212<<14 | 0x13<<7 | 0x58,
+ 21610 - 19968: jis0208<<14 | 0x1B<<7 | 0x55,
+ 21611 - 19968: jis0212<<14 | 0x13<<7 | 0x59,
+ 21613 - 19968: jis0212<<14 | 0x13<<7 | 0x5A,
+ 21614 - 19968: jis0212<<14 | 0x13<<7 | 0x5B,
+ 21616 - 19968: jis0208<<14 | 0x31<<7 | 0x4E,
+ 21617 - 19968: jis0208<<14 | 0x31<<7 | 0x4C,
+ 21619 - 19968: jis0208<<14 | 0x2B<<7 | 0x02,
+ 21620 - 19968: jis0212<<14 | 0x13<<7 | 0x5C,
+ 21621 - 19968: jis0208<<14 | 0x31<<7 | 0x49,
+ 21622 - 19968: jis0208<<14 | 0x31<<7 | 0x52,
+ 21623 - 19968: jis0208<<14 | 0x31<<7 | 0x4D,
+ 21627 - 19968: jis0208<<14 | 0x31<<7 | 0x50,
+ 21628 - 19968: jis0208<<14 | 0x17<<7 | 0x25,
+ 21629 - 19968: jis0208<<14 | 0x2B<<7 | 0x1E,
+ 21631 - 19968: jis0212<<14 | 0x13<<7 | 0x5D,
+ 21632 - 19968: jis0208<<14 | 0x31<<7 | 0x51,
+ 21633 - 19968: jis0212<<14 | 0x14<<7 | 0x00,
+ 21635 - 19968: jis0212<<14 | 0x14<<7 | 0x01,
+ 21636 - 19968: jis0208<<14 | 0x31<<7 | 0x53,
+ 21637 - 19968: jis0212<<14 | 0x14<<7 | 0x02,
+ 21638 - 19968: jis0208<<14 | 0x31<<7 | 0x55,
+ 21640 - 19968: jis0212<<14 | 0x14<<7 | 0x03,
+ 21641 - 19968: jis0212<<14 | 0x14<<7 | 0x04,
+ 21642 - 19968: jis0208<<14 | 0x58<<7 | 0x35,
+ 21643 - 19968: jis0208<<14 | 0x19<<7 | 0x4F,
+ 21644 - 19968: jis0208<<14 | 0x2E<<7 | 0x21,
+ 21645 - 19968: jis0212<<14 | 0x14<<7 | 0x05,
+ 21646 - 19968: jis0208<<14 | 0x31<<7 | 0x4A,
+ 21647 - 19968: jis0208<<14 | 0x31<<7 | 0x48,
+ 21648 - 19968: jis0208<<14 | 0x31<<7 | 0x54,
+ 21649 - 19968: jis0212<<14 | 0x14<<7 | 0x06,
+ 21650 - 19968: jis0208<<14 | 0x31<<7 | 0x4F,
+ 21653 - 19968: jis0212<<14 | 0x14<<7 | 0x07,
+ 21654 - 19968: jis0212<<14 | 0x14<<7 | 0x08,
+ 21660 - 19968: jis0208<<14 | 0x58<<7 | 0x34,
+ 21663 - 19968: jis0212<<14 | 0x14<<7 | 0x0A,
+ 21665 - 19968: jis0212<<14 | 0x14<<7 | 0x0B,
+ 21666 - 19968: jis0208<<14 | 0x31<<7 | 0x57,
+ 21668 - 19968: jis0208<<14 | 0x32<<7 | 0x02,
+ 21669 - 19968: jis0208<<14 | 0x31<<7 | 0x59,
+ 21670 - 19968: jis0212<<14 | 0x14<<7 | 0x0C,
+ 21671 - 19968: jis0212<<14 | 0x14<<7 | 0x0D,
+ 21672 - 19968: jis0208<<14 | 0x31<<7 | 0x5D,
+ 21673 - 19968: jis0208<<14 | 0x58<<7 | 0x36,
+ 21674 - 19968: jis0212<<14 | 0x14<<7 | 0x0F,
+ 21675 - 19968: jis0208<<14 | 0x32<<7 | 0x00,
+ 21676 - 19968: jis0208<<14 | 0x31<<7 | 0x5A,
+ 21677 - 19968: jis0212<<14 | 0x14<<7 | 0x10,
+ 21678 - 19968: jis0212<<14 | 0x14<<7 | 0x11,
+ 21679 - 19968: jis0208<<14 | 0x32<<7 | 0x1D,
+ 21681 - 19968: jis0212<<14 | 0x14<<7 | 0x12,
+ 21682 - 19968: jis0208<<14 | 0x19<<7 | 0x48,
+ 21683 - 19968: jis0208<<14 | 0x12<<7 | 0x10,
+ 21687 - 19968: jis0212<<14 | 0x14<<7 | 0x13,
+ 21688 - 19968: jis0208<<14 | 0x31<<7 | 0x58,
+ 21689 - 19968: jis0212<<14 | 0x14<<7 | 0x14,
+ 21690 - 19968: jis0212<<14 | 0x14<<7 | 0x15,
+ 21691 - 19968: jis0212<<14 | 0x14<<7 | 0x16,
+ 21692 - 19968: jis0208<<14 | 0x32<<7 | 0x04,
+ 21693 - 19968: jis0208<<14 | 0x0F<<7 | 0x55,
+ 21694 - 19968: jis0208<<14 | 0x32<<7 | 0x03,
+ 21695 - 19968: jis0212<<14 | 0x14<<7 | 0x17,
+ 21696 - 19968: jis0208<<14 | 0x0F<<7 | 0x04,
+ 21697 - 19968: jis0208<<14 | 0x28<<7 | 0x29,
+ 21698 - 19968: jis0208<<14 | 0x32<<7 | 0x01,
+ 21700 - 19968: jis0208<<14 | 0x31<<7 | 0x5B,
+ 21702 - 19968: jis0212<<14 | 0x14<<7 | 0x18,
+ 21703 - 19968: jis0208<<14 | 0x31<<7 | 0x56,
+ 21704 - 19968: jis0208<<14 | 0x31<<7 | 0x5C,
+ 21705 - 19968: jis0208<<14 | 0x19<<7 | 0x27,
+ 21706 - 19968: jis0212<<14 | 0x14<<7 | 0x19,
+ 21709 - 19968: jis0212<<14 | 0x14<<7 | 0x1A,
+ 21710 - 19968: jis0212<<14 | 0x14<<7 | 0x1B,
+ 21720 - 19968: jis0208<<14 | 0x32<<7 | 0x05,
+ 21728 - 19968: jis0212<<14 | 0x14<<7 | 0x1C,
+ 21729 - 19968: jis0208<<14 | 0x0F<<7 | 0x56,
+ 21730 - 19968: jis0208<<14 | 0x32<<7 | 0x0E,
+ 21733 - 19968: jis0208<<14 | 0x32<<7 | 0x06,
+ 21734 - 19968: jis0208<<14 | 0x32<<7 | 0x07,
+ 21736 - 19968: jis0208<<14 | 0x1D<<7 | 0x04,
+ 21737 - 19968: jis0208<<14 | 0x2A<<7 | 0x48,
+ 21738 - 19968: jis0212<<14 | 0x14<<7 | 0x1D,
+ 21740 - 19968: jis0212<<14 | 0x14<<7 | 0x1E,
+ 21741 - 19968: jis0208<<14 | 0x32<<7 | 0x0C,
+ 21742 - 19968: jis0208<<14 | 0x32<<7 | 0x0B,
+ 21743 - 19968: jis0212<<14 | 0x14<<7 | 0x1F,
+ 21746 - 19968: jis0208<<14 | 0x24<<7 | 0x0E,
+ 21750 - 19968: jis0212<<14 | 0x14<<7 | 0x20,
+ 21754 - 19968: jis0208<<14 | 0x32<<7 | 0x0D,
+ 21756 - 19968: jis0212<<14 | 0x14<<7 | 0x21,
+ 21757 - 19968: jis0208<<14 | 0x32<<7 | 0x0A,
+ 21758 - 19968: jis0212<<14 | 0x14<<7 | 0x22,
+ 21759 - 19968: jis0208<<14 | 0x58<<7 | 0x37,
+ 21760 - 19968: jis0212<<14 | 0x14<<7 | 0x24,
+ 21761 - 19968: jis0212<<14 | 0x14<<7 | 0x25,
+ 21764 - 19968: jis0208<<14 | 0x10<<7 | 0x13,
+ 21765 - 19968: jis0212<<14 | 0x14<<7 | 0x26,
+ 21766 - 19968: jis0208<<14 | 0x19<<7 | 0x15,
+ 21767 - 19968: jis0208<<14 | 0x1E<<7 | 0x0F,
+ 21768 - 19968: jis0212<<14 | 0x14<<7 | 0x27,
+ 21769 - 19968: jis0212<<14 | 0x14<<7 | 0x28,
+ 21772 - 19968: jis0212<<14 | 0x14<<7 | 0x29,
+ 21773 - 19968: jis0212<<14 | 0x14<<7 | 0x2A,
+ 21774 - 19968: jis0212<<14 | 0x14<<7 | 0x2B,
+ 21775 - 19968: jis0208<<14 | 0x32<<7 | 0x08,
+ 21776 - 19968: jis0208<<14 | 0x24<<7 | 0x41,
+ 21780 - 19968: jis0208<<14 | 0x32<<7 | 0x09,
+ 21781 - 19968: jis0212<<14 | 0x14<<7 | 0x2C,
+ 21782 - 19968: jis0208<<14 | 0x0F<<7 | 0x01,
+ 21802 - 19968: jis0212<<14 | 0x14<<7 | 0x2D,
+ 21803 - 19968: jis0212<<14 | 0x14<<7 | 0x2E,
+ 21806 - 19968: jis0208<<14 | 0x32<<7 | 0x13,
+ 21807 - 19968: jis0208<<14 | 0x2C<<7 | 0x02,
+ 21809 - 19968: jis0208<<14 | 0x1D<<7 | 0x06,
+ 21810 - 19968: jis0212<<14 | 0x14<<7 | 0x2F,
+ 21811 - 19968: jis0208<<14 | 0x32<<7 | 0x19,
+ 21813 - 19968: jis0212<<14 | 0x14<<7 | 0x30,
+ 21814 - 19968: jis0212<<14 | 0x14<<7 | 0x31,
+ 21816 - 19968: jis0208<<14 | 0x32<<7 | 0x18,
+ 21817 - 19968: jis0208<<14 | 0x32<<7 | 0x0F,
+ 21819 - 19968: jis0212<<14 | 0x14<<7 | 0x32,
+ 21820 - 19968: jis0212<<14 | 0x14<<7 | 0x33,
+ 21821 - 19968: jis0212<<14 | 0x14<<7 | 0x34,
+ 21822 - 19968: jis0208<<14 | 0x21<<7 | 0x22,
+ 21824 - 19968: jis0208<<14 | 0x32<<7 | 0x10,
+ 21825 - 19968: jis0212<<14 | 0x14<<7 | 0x35,
+ 21828 - 19968: jis0208<<14 | 0x21<<7 | 0x4E,
+ 21829 - 19968: jis0208<<14 | 0x32<<7 | 0x15,
+ 21830 - 19968: jis0208<<14 | 0x1D<<7 | 0x05,
+ 21831 - 19968: jis0212<<14 | 0x14<<7 | 0x36,
+ 21833 - 19968: jis0212<<14 | 0x14<<7 | 0x37,
+ 21834 - 19968: jis0212<<14 | 0x14<<7 | 0x38,
+ 21836 - 19968: jis0208<<14 | 0x32<<7 | 0x12,
+ 21837 - 19968: jis0212<<14 | 0x14<<7 | 0x39,
+ 21839 - 19968: jis0208<<14 | 0x2B<<7 | 0x43,
+ 21840 - 19968: jis0212<<14 | 0x14<<7 | 0x3A,
+ 21841 - 19968: jis0212<<14 | 0x14<<7 | 0x3B,
+ 21843 - 19968: jis0208<<14 | 0x16<<7 | 0x1B,
+ 21846 - 19968: jis0208<<14 | 0x32<<7 | 0x16,
+ 21847 - 19968: jis0208<<14 | 0x32<<7 | 0x17,
+ 21848 - 19968: jis0212<<14 | 0x14<<7 | 0x3C,
+ 21850 - 19968: jis0212<<14 | 0x14<<7 | 0x3D,
+ 21851 - 19968: jis0212<<14 | 0x14<<7 | 0x3E,
+ 21852 - 19968: jis0208<<14 | 0x32<<7 | 0x14,
+ 21853 - 19968: jis0208<<14 | 0x32<<7 | 0x1A,
+ 21854 - 19968: jis0212<<14 | 0x14<<7 | 0x3F,
+ 21856 - 19968: jis0212<<14 | 0x14<<7 | 0x40,
+ 21857 - 19968: jis0212<<14 | 0x14<<7 | 0x41,
+ 21859 - 19968: jis0208<<14 | 0x32<<7 | 0x11,
+ 21860 - 19968: jis0212<<14 | 0x14<<7 | 0x42,
+ 21862 - 19968: jis0212<<14 | 0x14<<7 | 0x43,
+ 21883 - 19968: jis0208<<14 | 0x32<<7 | 0x20,
+ 21884 - 19968: jis0208<<14 | 0x32<<7 | 0x25,
+ 21886 - 19968: jis0208<<14 | 0x32<<7 | 0x21,
+ 21887 - 19968: jis0212<<14 | 0x14<<7 | 0x44,
+ 21888 - 19968: jis0208<<14 | 0x32<<7 | 0x1C,
+ 21889 - 19968: jis0212<<14 | 0x14<<7 | 0x45,
+ 21890 - 19968: jis0212<<14 | 0x14<<7 | 0x46,
+ 21891 - 19968: jis0208<<14 | 0x32<<7 | 0x26,
+ 21892 - 19968: jis0208<<14 | 0x20<<7 | 0x10,
+ 21894 - 19968: jis0208<<14 | 0x58<<7 | 0x38,
+ 21895 - 19968: jis0208<<14 | 0x32<<7 | 0x28,
+ 21896 - 19968: jis0212<<14 | 0x14<<7 | 0x48,
+ 21897 - 19968: jis0208<<14 | 0x18<<7 | 0x01,
+ 21898 - 19968: jis0208<<14 | 0x32<<7 | 0x1E,
+ 21899 - 19968: jis0208<<14 | 0x22<<7 | 0x5C,
+ 21902 - 19968: jis0212<<14 | 0x14<<7 | 0x49,
+ 21903 - 19968: jis0212<<14 | 0x14<<7 | 0x4A,
+ 21905 - 19968: jis0212<<14 | 0x14<<7 | 0x4B,
+ 21906 - 19968: jis0212<<14 | 0x14<<7 | 0x4C,
+ 21907 - 19968: jis0212<<14 | 0x14<<7 | 0x4D,
+ 21908 - 19968: jis0212<<14 | 0x14<<7 | 0x4E,
+ 21911 - 19968: jis0212<<14 | 0x14<<7 | 0x4F,
+ 21912 - 19968: jis0208<<14 | 0x32<<7 | 0x22,
+ 21913 - 19968: jis0208<<14 | 0x32<<7 | 0x1B,
+ 21914 - 19968: jis0208<<14 | 0x13<<7 | 0x0C,
+ 21916 - 19968: jis0208<<14 | 0x13<<7 | 0x4D,
+ 21917 - 19968: jis0208<<14 | 0x12<<7 | 0x44,
+ 21918 - 19968: jis0208<<14 | 0x32<<7 | 0x23,
+ 21919 - 19968: jis0208<<14 | 0x32<<7 | 0x1F,
+ 21923 - 19968: jis0212<<14 | 0x14<<7 | 0x50,
+ 21924 - 19968: jis0212<<14 | 0x14<<7 | 0x51,
+ 21927 - 19968: jis0208<<14 | 0x16<<7 | 0x55,
+ 21928 - 19968: jis0208<<14 | 0x32<<7 | 0x29,
+ 21929 - 19968: jis0208<<14 | 0x32<<7 | 0x27,
+ 21930 - 19968: jis0208<<14 | 0x20<<7 | 0x32,
+ 21931 - 19968: jis0208<<14 | 0x14<<7 | 0x29,
+ 21932 - 19968: jis0208<<14 | 0x15<<7 | 0x0B,
+ 21933 - 19968: jis0212<<14 | 0x14<<7 | 0x52,
+ 21934 - 19968: jis0208<<14 | 0x32<<7 | 0x24,
+ 21936 - 19968: jis0208<<14 | 0x15<<7 | 0x53,
+ 21938 - 19968: jis0212<<14 | 0x14<<7 | 0x53,
+ 21942 - 19968: jis0208<<14 | 0x10<<7 | 0x23,
+ 21951 - 19968: jis0212<<14 | 0x14<<7 | 0x54,
+ 21953 - 19968: jis0212<<14 | 0x14<<7 | 0x55,
+ 21955 - 19968: jis0212<<14 | 0x14<<7 | 0x56,
+ 21956 - 19968: jis0208<<14 | 0x32<<7 | 0x2D,
+ 21957 - 19968: jis0208<<14 | 0x32<<7 | 0x2B,
+ 21958 - 19968: jis0212<<14 | 0x14<<7 | 0x57,
+ 21959 - 19968: jis0208<<14 | 0x33<<7 | 0x06,
+ 21961 - 19968: jis0212<<14 | 0x14<<7 | 0x58,
+ 21963 - 19968: jis0212<<14 | 0x14<<7 | 0x59,
+ 21964 - 19968: jis0212<<14 | 0x14<<7 | 0x5A,
+ 21966 - 19968: jis0212<<14 | 0x14<<7 | 0x5B,
+ 21969 - 19968: jis0212<<14 | 0x14<<7 | 0x5C,
+ 21970 - 19968: jis0212<<14 | 0x14<<7 | 0x5D,
+ 21971 - 19968: jis0212<<14 | 0x15<<7 | 0x00,
+ 21972 - 19968: jis0208<<14 | 0x32<<7 | 0x30,
+ 21975 - 19968: jis0212<<14 | 0x15<<7 | 0x01,
+ 21976 - 19968: jis0212<<14 | 0x15<<7 | 0x02,
+ 21978 - 19968: jis0208<<14 | 0x32<<7 | 0x2A,
+ 21979 - 19968: jis0212<<14 | 0x15<<7 | 0x03,
+ 21980 - 19968: jis0208<<14 | 0x32<<7 | 0x2E,
+ 21982 - 19968: jis0212<<14 | 0x15<<7 | 0x04,
+ 21983 - 19968: jis0208<<14 | 0x32<<7 | 0x2C,
+ 21986 - 19968: jis0212<<14 | 0x15<<7 | 0x05,
+ 21987 - 19968: jis0208<<14 | 0x1A<<7 | 0x2B,
+ 21988 - 19968: jis0208<<14 | 0x32<<7 | 0x2F,
+ 21993 - 19968: jis0212<<14 | 0x15<<7 | 0x06,
+ 22006 - 19968: jis0212<<14 | 0x15<<7 | 0x07,
+ 22007 - 19968: jis0208<<14 | 0x32<<7 | 0x32,
+ 22009 - 19968: jis0208<<14 | 0x32<<7 | 0x37,
+ 22013 - 19968: jis0208<<14 | 0x32<<7 | 0x35,
+ 22014 - 19968: jis0208<<14 | 0x32<<7 | 0x34,
+ 22015 - 19968: jis0212<<14 | 0x15<<7 | 0x08,
+ 22021 - 19968: jis0212<<14 | 0x15<<7 | 0x09,
+ 22022 - 19968: jis0208<<14 | 0x22<<7 | 0x11,
+ 22024 - 19968: jis0212<<14 | 0x15<<7 | 0x0A,
+ 22025 - 19968: jis0208<<14 | 0x11<<7 | 0x24,
+ 22026 - 19968: jis0212<<14 | 0x15<<7 | 0x0B,
+ 22029 - 19968: jis0212<<14 | 0x15<<7 | 0x0C,
+ 22030 - 19968: jis0212<<14 | 0x15<<7 | 0x0D,
+ 22031 - 19968: jis0212<<14 | 0x15<<7 | 0x0E,
+ 22032 - 19968: jis0212<<14 | 0x15<<7 | 0x0F,
+ 22033 - 19968: jis0212<<14 | 0x15<<7 | 0x10,
+ 22034 - 19968: jis0212<<14 | 0x15<<7 | 0x11,
+ 22036 - 19968: jis0208<<14 | 0x32<<7 | 0x31,
+ 22038 - 19968: jis0208<<14 | 0x32<<7 | 0x33,
+ 22039 - 19968: jis0208<<14 | 0x1D<<7 | 0x07,
+ 22040 - 19968: jis0208<<14 | 0x10<<7 | 0x12,
+ 22041 - 19968: jis0212<<14 | 0x15<<7 | 0x12,
+ 22043 - 19968: jis0208<<14 | 0x32<<7 | 0x36,
+ 22057 - 19968: jis0208<<14 | 0x11<<7 | 0x3D,
+ 22060 - 19968: jis0212<<14 | 0x15<<7 | 0x13,
+ 22063 - 19968: jis0208<<14 | 0x32<<7 | 0x41,
+ 22064 - 19968: jis0212<<14 | 0x15<<7 | 0x14,
+ 22065 - 19968: jis0208<<14 | 0x1D<<7 | 0x5B,
+ 22066 - 19968: jis0208<<14 | 0x32<<7 | 0x3D,
+ 22067 - 19968: jis0212<<14 | 0x15<<7 | 0x15,
+ 22068 - 19968: jis0208<<14 | 0x32<<7 | 0x3B,
+ 22069 - 19968: jis0212<<14 | 0x15<<7 | 0x16,
+ 22070 - 19968: jis0208<<14 | 0x32<<7 | 0x3C,
+ 22071 - 19968: jis0212<<14 | 0x15<<7 | 0x17,
+ 22072 - 19968: jis0208<<14 | 0x32<<7 | 0x3E,
+ 22073 - 19968: jis0212<<14 | 0x15<<7 | 0x18,
+ 22075 - 19968: jis0212<<14 | 0x15<<7 | 0x19,
+ 22076 - 19968: jis0212<<14 | 0x15<<7 | 0x1A,
+ 22077 - 19968: jis0212<<14 | 0x15<<7 | 0x1B,
+ 22079 - 19968: jis0212<<14 | 0x15<<7 | 0x1C,
+ 22080 - 19968: jis0212<<14 | 0x15<<7 | 0x1D,
+ 22081 - 19968: jis0212<<14 | 0x15<<7 | 0x1E,
+ 22082 - 19968: jis0208<<14 | 0x10<<7 | 0x1C,
+ 22083 - 19968: jis0212<<14 | 0x15<<7 | 0x1F,
+ 22084 - 19968: jis0212<<14 | 0x15<<7 | 0x20,
+ 22086 - 19968: jis0212<<14 | 0x15<<7 | 0x21,
+ 22089 - 19968: jis0212<<14 | 0x15<<7 | 0x22,
+ 22091 - 19968: jis0212<<14 | 0x15<<7 | 0x23,
+ 22092 - 19968: jis0208<<14 | 0x20<<7 | 0x18,
+ 22093 - 19968: jis0212<<14 | 0x15<<7 | 0x24,
+ 22094 - 19968: jis0208<<14 | 0x32<<7 | 0x38,
+ 22095 - 19968: jis0212<<14 | 0x15<<7 | 0x25,
+ 22096 - 19968: jis0208<<14 | 0x32<<7 | 0x39,
+ 22100 - 19968: jis0212<<14 | 0x15<<7 | 0x26,
+ 22107 - 19968: jis0208<<14 | 0x12<<7 | 0x59,
+ 22110 - 19968: jis0212<<14 | 0x15<<7 | 0x27,
+ 22112 - 19968: jis0212<<14 | 0x15<<7 | 0x28,
+ 22113 - 19968: jis0212<<14 | 0x15<<7 | 0x29,
+ 22114 - 19968: jis0212<<14 | 0x15<<7 | 0x2A,
+ 22115 - 19968: jis0212<<14 | 0x15<<7 | 0x2B,
+ 22116 - 19968: jis0208<<14 | 0x32<<7 | 0x40,
+ 22118 - 19968: jis0212<<14 | 0x15<<7 | 0x2C,
+ 22120 - 19968: jis0208<<14 | 0x13<<7 | 0x4E,
+ 22121 - 19968: jis0212<<14 | 0x15<<7 | 0x2D,
+ 22122 - 19968: jis0208<<14 | 0x32<<7 | 0x43,
+ 22123 - 19968: jis0208<<14 | 0x32<<7 | 0x3F,
+ 22124 - 19968: jis0208<<14 | 0x32<<7 | 0x42,
+ 22125 - 19968: jis0212<<14 | 0x15<<7 | 0x2E,
+ 22127 - 19968: jis0212<<14 | 0x15<<7 | 0x2F,
+ 22129 - 19968: jis0212<<14 | 0x15<<7 | 0x30,
+ 22130 - 19968: jis0212<<14 | 0x15<<7 | 0x31,
+ 22132 - 19968: jis0208<<14 | 0x29<<7 | 0x0D,
+ 22133 - 19968: jis0212<<14 | 0x15<<7 | 0x32,
+ 22136 - 19968: jis0208<<14 | 0x25<<7 | 0x34,
+ 22138 - 19968: jis0208<<14 | 0x27<<7 | 0x17,
+ 22144 - 19968: jis0208<<14 | 0x32<<7 | 0x45,
+ 22148 - 19968: jis0212<<14 | 0x15<<7 | 0x33,
+ 22149 - 19968: jis0212<<14 | 0x15<<7 | 0x34,
+ 22150 - 19968: jis0208<<14 | 0x32<<7 | 0x44,
+ 22151 - 19968: jis0208<<14 | 0x12<<7 | 0x24,
+ 22152 - 19968: jis0212<<14 | 0x15<<7 | 0x35,
+ 22154 - 19968: jis0208<<14 | 0x32<<7 | 0x46,
+ 22155 - 19968: jis0212<<14 | 0x15<<7 | 0x36,
+ 22156 - 19968: jis0212<<14 | 0x15<<7 | 0x37,
+ 22159 - 19968: jis0208<<14 | 0x32<<7 | 0x49,
+ 22164 - 19968: jis0208<<14 | 0x32<<7 | 0x48,
+ 22165 - 19968: jis0212<<14 | 0x15<<7 | 0x38,
+ 22169 - 19968: jis0212<<14 | 0x15<<7 | 0x39,
+ 22170 - 19968: jis0212<<14 | 0x15<<7 | 0x3A,
+ 22173 - 19968: jis0212<<14 | 0x15<<7 | 0x3B,
+ 22174 - 19968: jis0212<<14 | 0x15<<7 | 0x3C,
+ 22175 - 19968: jis0212<<14 | 0x15<<7 | 0x3D,
+ 22176 - 19968: jis0208<<14 | 0x32<<7 | 0x47,
+ 22178 - 19968: jis0208<<14 | 0x26<<7 | 0x18,
+ 22181 - 19968: jis0208<<14 | 0x32<<7 | 0x4A,
+ 22182 - 19968: jis0212<<14 | 0x15<<7 | 0x3E,
+ 22183 - 19968: jis0212<<14 | 0x15<<7 | 0x3F,
+ 22184 - 19968: jis0212<<14 | 0x15<<7 | 0x40,
+ 22185 - 19968: jis0212<<14 | 0x15<<7 | 0x41,
+ 22187 - 19968: jis0212<<14 | 0x15<<7 | 0x42,
+ 22188 - 19968: jis0212<<14 | 0x15<<7 | 0x43,
+ 22189 - 19968: jis0212<<14 | 0x15<<7 | 0x44,
+ 22190 - 19968: jis0208<<14 | 0x32<<7 | 0x4B,
+ 22193 - 19968: jis0212<<14 | 0x15<<7 | 0x45,
+ 22195 - 19968: jis0212<<14 | 0x15<<7 | 0x46,
+ 22196 - 19968: jis0208<<14 | 0x32<<7 | 0x4D,
+ 22198 - 19968: jis0208<<14 | 0x32<<7 | 0x4C,
+ 22199 - 19968: jis0212<<14 | 0x15<<7 | 0x47,
+ 22204 - 19968: jis0208<<14 | 0x32<<7 | 0x4F,
+ 22206 - 19968: jis0212<<14 | 0x15<<7 | 0x48,
+ 22208 - 19968: jis0208<<14 | 0x32<<7 | 0x52,
+ 22209 - 19968: jis0208<<14 | 0x32<<7 | 0x50,
+ 22210 - 19968: jis0208<<14 | 0x32<<7 | 0x4E,
+ 22211 - 19968: jis0208<<14 | 0x32<<7 | 0x51,
+ 22213 - 19968: jis0212<<14 | 0x15<<7 | 0x49,
+ 22216 - 19968: jis0208<<14 | 0x32<<7 | 0x53,
+ 22217 - 19968: jis0212<<14 | 0x15<<7 | 0x4A,
+ 22218 - 19968: jis0212<<14 | 0x15<<7 | 0x4B,
+ 22219 - 19968: jis0212<<14 | 0x15<<7 | 0x4C,
+ 22220 - 19968: jis0212<<14 | 0x15<<7 | 0x4F,
+ 22221 - 19968: jis0212<<14 | 0x15<<7 | 0x50,
+ 22222 - 19968: jis0208<<14 | 0x32<<7 | 0x54,
+ 22223 - 19968: jis0212<<14 | 0x15<<7 | 0x4D,
+ 22224 - 19968: jis0212<<14 | 0x15<<7 | 0x4E,
+ 22225 - 19968: jis0208<<14 | 0x32<<7 | 0x55,
+ 22227 - 19968: jis0208<<14 | 0x32<<7 | 0x56,
+ 22231 - 19968: jis0208<<14 | 0x32<<7 | 0x57,
+ 22232 - 19968: jis0208<<14 | 0x30<<7 | 0x24,
+ 22233 - 19968: jis0212<<14 | 0x15<<7 | 0x51,
+ 22234 - 19968: jis0208<<14 | 0x1B<<7 | 0x5B,
+ 22235 - 19968: jis0208<<14 | 0x1A<<7 | 0x2C,
+ 22236 - 19968: jis0212<<14 | 0x15<<7 | 0x52,
+ 22237 - 19968: jis0212<<14 | 0x15<<7 | 0x53,
+ 22238 - 19968: jis0208<<14 | 0x11<<7 | 0x52,
+ 22239 - 19968: jis0212<<14 | 0x15<<7 | 0x54,
+ 22240 - 19968: jis0208<<14 | 0x0F<<7 | 0x57,
+ 22241 - 19968: jis0212<<14 | 0x15<<7 | 0x55,
+ 22243 - 19968: jis0208<<14 | 0x22<<7 | 0x23,
+ 22244 - 19968: jis0212<<14 | 0x15<<7 | 0x56,
+ 22245 - 19968: jis0212<<14 | 0x15<<7 | 0x57,
+ 22246 - 19968: jis0212<<14 | 0x15<<7 | 0x58,
+ 22247 - 19968: jis0212<<14 | 0x15<<7 | 0x59,
+ 22248 - 19968: jis0212<<14 | 0x15<<7 | 0x5A,
+ 22251 - 19968: jis0212<<14 | 0x15<<7 | 0x5C,
+ 22253 - 19968: jis0212<<14 | 0x15<<7 | 0x5D,
+ 22254 - 19968: jis0208<<14 | 0x32<<7 | 0x58,
+ 22256 - 19968: jis0208<<14 | 0x19<<7 | 0x03,
+ 22257 - 19968: jis0212<<14 | 0x15<<7 | 0x5B,
+ 22258 - 19968: jis0208<<14 | 0x0F<<7 | 0x2E,
+ 22259 - 19968: jis0208<<14 | 0x1E<<7 | 0x3D,
+ 22262 - 19968: jis0212<<14 | 0x16<<7 | 0x00,
+ 22263 - 19968: jis0212<<14 | 0x16<<7 | 0x01,
+ 22265 - 19968: jis0208<<14 | 0x32<<7 | 0x59,
+ 22266 - 19968: jis0208<<14 | 0x17<<7 | 0x26,
+ 22269 - 19968: jis0208<<14 | 0x18<<7 | 0x50,
+ 22271 - 19968: jis0208<<14 | 0x32<<7 | 0x5B,
+ 22272 - 19968: jis0208<<14 | 0x32<<7 | 0x5A,
+ 22273 - 19968: jis0212<<14 | 0x16<<7 | 0x02,
+ 22274 - 19968: jis0212<<14 | 0x16<<7 | 0x03,
+ 22275 - 19968: jis0208<<14 | 0x29<<7 | 0x3F,
+ 22276 - 19968: jis0208<<14 | 0x32<<7 | 0x5C,
+ 22279 - 19968: jis0212<<14 | 0x16<<7 | 0x04,
+ 22280 - 19968: jis0208<<14 | 0x33<<7 | 0x00,
+ 22281 - 19968: jis0208<<14 | 0x32<<7 | 0x5D,
+ 22282 - 19968: jis0212<<14 | 0x16<<7 | 0x05,
+ 22283 - 19968: jis0208<<14 | 0x33<<7 | 0x01,
+ 22284 - 19968: jis0212<<14 | 0x16<<7 | 0x06,
+ 22285 - 19968: jis0208<<14 | 0x33<<7 | 0x02,
+ 22287 - 19968: jis0208<<14 | 0x16<<7 | 0x56,
+ 22289 - 19968: jis0212<<14 | 0x16<<7 | 0x07,
+ 22290 - 19968: jis0208<<14 | 0x10<<7 | 0x3F,
+ 22291 - 19968: jis0208<<14 | 0x33<<7 | 0x03,
+ 22293 - 19968: jis0212<<14 | 0x16<<7 | 0x08,
+ 22294 - 19968: jis0208<<14 | 0x33<<7 | 0x05,
+ 22296 - 19968: jis0208<<14 | 0x33<<7 | 0x04,
+ 22298 - 19968: jis0212<<14 | 0x16<<7 | 0x09,
+ 22299 - 19968: jis0212<<14 | 0x16<<7 | 0x0A,
+ 22300 - 19968: jis0208<<14 | 0x33<<7 | 0x07,
+ 22301 - 19968: jis0212<<14 | 0x16<<7 | 0x0B,
+ 22303 - 19968: jis0208<<14 | 0x24<<7 | 0x39,
+ 22304 - 19968: jis0212<<14 | 0x16<<7 | 0x0C,
+ 22306 - 19968: jis0212<<14 | 0x16<<7 | 0x0D,
+ 22307 - 19968: jis0212<<14 | 0x16<<7 | 0x0E,
+ 22308 - 19968: jis0212<<14 | 0x16<<7 | 0x0F,
+ 22309 - 19968: jis0212<<14 | 0x16<<7 | 0x10,
+ 22310 - 19968: jis0208<<14 | 0x33<<7 | 0x08,
+ 22311 - 19968: jis0208<<14 | 0x0F<<7 | 0x14,
+ 22312 - 19968: jis0208<<14 | 0x19<<7 | 0x3E,
+ 22313 - 19968: jis0212<<14 | 0x16<<7 | 0x11,
+ 22314 - 19968: jis0212<<14 | 0x16<<7 | 0x12,
+ 22316 - 19968: jis0212<<14 | 0x16<<7 | 0x13,
+ 22317 - 19968: jis0208<<14 | 0x16<<7 | 0x1C,
+ 22318 - 19968: jis0212<<14 | 0x16<<7 | 0x14,
+ 22319 - 19968: jis0212<<14 | 0x16<<7 | 0x15,
+ 22320 - 19968: jis0208<<14 | 0x22<<7 | 0x2E,
+ 22323 - 19968: jis0212<<14 | 0x16<<7 | 0x16,
+ 22324 - 19968: jis0212<<14 | 0x16<<7 | 0x17,
+ 22327 - 19968: jis0208<<14 | 0x33<<7 | 0x09,
+ 22328 - 19968: jis0208<<14 | 0x33<<7 | 0x0A,
+ 22331 - 19968: jis0208<<14 | 0x33<<7 | 0x0C,
+ 22333 - 19968: jis0212<<14 | 0x16<<7 | 0x18,
+ 22334 - 19968: jis0212<<14 | 0x16<<7 | 0x19,
+ 22335 - 19968: jis0212<<14 | 0x16<<7 | 0x1A,
+ 22336 - 19968: jis0208<<14 | 0x33<<7 | 0x0D,
+ 22338 - 19968: jis0208<<14 | 0x19<<7 | 0x43,
+ 22341 - 19968: jis0212<<14 | 0x16<<7 | 0x1B,
+ 22342 - 19968: jis0212<<14 | 0x16<<7 | 0x1C,
+ 22343 - 19968: jis0208<<14 | 0x15<<7 | 0x30,
+ 22346 - 19968: jis0208<<14 | 0x2A<<7 | 0x16,
+ 22348 - 19968: jis0212<<14 | 0x16<<7 | 0x1D,
+ 22349 - 19968: jis0212<<14 | 0x16<<7 | 0x1E,
+ 22350 - 19968: jis0208<<14 | 0x33<<7 | 0x0B,
+ 22351 - 19968: jis0208<<14 | 0x33<<7 | 0x0E,
+ 22352 - 19968: jis0208<<14 | 0x19<<7 | 0x20,
+ 22353 - 19968: jis0208<<14 | 0x18<<7 | 0x02,
+ 22354 - 19968: jis0212<<14 | 0x16<<7 | 0x1F,
+ 22361 - 19968: jis0208<<14 | 0x58<<7 | 0x39,
+ 22369 - 19968: jis0208<<14 | 0x33<<7 | 0x12,
+ 22370 - 19968: jis0212<<14 | 0x16<<7 | 0x20,
+ 22372 - 19968: jis0208<<14 | 0x19<<7 | 0x04,
+ 22373 - 19968: jis0208<<14 | 0x58<<7 | 0x3A,
+ 22374 - 19968: jis0208<<14 | 0x22<<7 | 0x12,
+ 22375 - 19968: jis0212<<14 | 0x16<<7 | 0x22,
+ 22376 - 19968: jis0212<<14 | 0x16<<7 | 0x23,
+ 22377 - 19968: jis0208<<14 | 0x33<<7 | 0x0F,
+ 22378 - 19968: jis0208<<14 | 0x23<<7 | 0x39,
+ 22379 - 19968: jis0212<<14 | 0x16<<7 | 0x24,
+ 22381 - 19968: jis0212<<14 | 0x16<<7 | 0x25,
+ 22382 - 19968: jis0212<<14 | 0x16<<7 | 0x26,
+ 22383 - 19968: jis0212<<14 | 0x16<<7 | 0x27,
+ 22384 - 19968: jis0212<<14 | 0x16<<7 | 0x28,
+ 22385 - 19968: jis0212<<14 | 0x16<<7 | 0x29,
+ 22387 - 19968: jis0212<<14 | 0x16<<7 | 0x2A,
+ 22388 - 19968: jis0212<<14 | 0x16<<7 | 0x2B,
+ 22389 - 19968: jis0212<<14 | 0x16<<7 | 0x2C,
+ 22391 - 19968: jis0212<<14 | 0x16<<7 | 0x2D,
+ 22393 - 19968: jis0212<<14 | 0x16<<7 | 0x2E,
+ 22394 - 19968: jis0212<<14 | 0x16<<7 | 0x2F,
+ 22395 - 19968: jis0212<<14 | 0x16<<7 | 0x30,
+ 22396 - 19968: jis0212<<14 | 0x16<<7 | 0x31,
+ 22398 - 19968: jis0212<<14 | 0x16<<7 | 0x32,
+ 22399 - 19968: jis0208<<14 | 0x33<<7 | 0x13,
+ 22401 - 19968: jis0212<<14 | 0x16<<7 | 0x33,
+ 22402 - 19968: jis0208<<14 | 0x1E<<7 | 0x41,
+ 22403 - 19968: jis0212<<14 | 0x16<<7 | 0x34,
+ 22408 - 19968: jis0208<<14 | 0x33<<7 | 0x11,
+ 22409 - 19968: jis0208<<14 | 0x33<<7 | 0x14,
+ 22411 - 19968: jis0208<<14 | 0x16<<7 | 0x1E,
+ 22412 - 19968: jis0212<<14 | 0x16<<7 | 0x35,
+ 22419 - 19968: jis0208<<14 | 0x33<<7 | 0x15,
+ 22420 - 19968: jis0212<<14 | 0x16<<7 | 0x36,
+ 22421 - 19968: jis0212<<14 | 0x16<<7 | 0x3F,
+ 22423 - 19968: jis0212<<14 | 0x16<<7 | 0x37,
+ 22425 - 19968: jis0212<<14 | 0x16<<7 | 0x38,
+ 22426 - 19968: jis0212<<14 | 0x16<<7 | 0x39,
+ 22428 - 19968: jis0212<<14 | 0x16<<7 | 0x3A,
+ 22429 - 19968: jis0212<<14 | 0x16<<7 | 0x3B,
+ 22430 - 19968: jis0212<<14 | 0x16<<7 | 0x3C,
+ 22431 - 19968: jis0212<<14 | 0x16<<7 | 0x3D,
+ 22432 - 19968: jis0208<<14 | 0x33<<7 | 0x16,
+ 22433 - 19968: jis0212<<14 | 0x16<<7 | 0x3E,
+ 22434 - 19968: jis0208<<14 | 0x18<<7 | 0x03,
+ 22435 - 19968: jis0208<<14 | 0x12<<7 | 0x1F,
+ 22436 - 19968: jis0208<<14 | 0x33<<7 | 0x18,
+ 22439 - 19968: jis0212<<14 | 0x16<<7 | 0x40,
+ 22440 - 19968: jis0212<<14 | 0x16<<7 | 0x41,
+ 22441 - 19968: jis0212<<14 | 0x16<<7 | 0x42,
+ 22442 - 19968: jis0208<<14 | 0x33<<7 | 0x19,
+ 22444 - 19968: jis0208<<14 | 0x58<<7 | 0x3B,
+ 22448 - 19968: jis0208<<14 | 0x33<<7 | 0x1A,
+ 22451 - 19968: jis0208<<14 | 0x33<<7 | 0x17,
+ 22456 - 19968: jis0212<<14 | 0x16<<7 | 0x44,
+ 22461 - 19968: jis0212<<14 | 0x16<<7 | 0x45,
+ 22464 - 19968: jis0208<<14 | 0x33<<7 | 0x10,
+ 22467 - 19968: jis0208<<14 | 0x33<<7 | 0x1B,
+ 22470 - 19968: jis0208<<14 | 0x33<<7 | 0x1C,
+ 22471 - 19968: jis0208<<14 | 0x58<<7 | 0x3D,
+ 22472 - 19968: jis0208<<14 | 0x58<<7 | 0x3C,
+ 22475 - 19968: jis0208<<14 | 0x2A<<7 | 0x43,
+ 22476 - 19968: jis0212<<14 | 0x16<<7 | 0x48,
+ 22478 - 19968: jis0208<<14 | 0x1D<<7 | 0x4A,
+ 22479 - 19968: jis0212<<14 | 0x16<<7 | 0x49,
+ 22482 - 19968: jis0208<<14 | 0x33<<7 | 0x1E,
+ 22483 - 19968: jis0208<<14 | 0x33<<7 | 0x1F,
+ 22484 - 19968: jis0208<<14 | 0x33<<7 | 0x1D,
+ 22485 - 19968: jis0212<<14 | 0x16<<7 | 0x4A,
+ 22486 - 19968: jis0208<<14 | 0x33<<7 | 0x21,
+ 22492 - 19968: jis0208<<14 | 0x26<<7 | 0x17,
+ 22493 - 19968: jis0212<<14 | 0x16<<7 | 0x4B,
+ 22494 - 19968: jis0212<<14 | 0x16<<7 | 0x4C,
+ 22495 - 19968: jis0208<<14 | 0x0F<<7 | 0x47,
+ 22496 - 19968: jis0208<<14 | 0x28<<7 | 0x35,
+ 22497 - 19968: jis0212<<14 | 0x16<<7 | 0x5D,
+ 22499 - 19968: jis0208<<14 | 0x33<<7 | 0x22,
+ 22500 - 19968: jis0212<<14 | 0x16<<7 | 0x4D,
+ 22502 - 19968: jis0212<<14 | 0x16<<7 | 0x4E,
+ 22503 - 19968: jis0212<<14 | 0x16<<7 | 0x4F,
+ 22505 - 19968: jis0212<<14 | 0x16<<7 | 0x50,
+ 22509 - 19968: jis0212<<14 | 0x16<<7 | 0x51,
+ 22512 - 19968: jis0212<<14 | 0x16<<7 | 0x52,
+ 22516 - 19968: jis0208<<14 | 0x1D<<7 | 0x5C,
+ 22517 - 19968: jis0212<<14 | 0x16<<7 | 0x53,
+ 22518 - 19968: jis0212<<14 | 0x16<<7 | 0x54,
+ 22519 - 19968: jis0208<<14 | 0x1B<<7 | 0x18,
+ 22520 - 19968: jis0212<<14 | 0x16<<7 | 0x55,
+ 22521 - 19968: jis0208<<14 | 0x26<<7 | 0x3C,
+ 22522 - 19968: jis0208<<14 | 0x13<<7 | 0x4F,
+ 22524 - 19968: jis0208<<14 | 0x19<<7 | 0x4A,
+ 22525 - 19968: jis0212<<14 | 0x16<<7 | 0x56,
+ 22526 - 19968: jis0212<<14 | 0x16<<7 | 0x57,
+ 22527 - 19968: jis0212<<14 | 0x16<<7 | 0x58,
+ 22528 - 19968: jis0208<<14 | 0x2A<<7 | 0x38,
+ 22530 - 19968: jis0208<<14 | 0x25<<7 | 0x11,
+ 22531 - 19968: jis0212<<14 | 0x16<<7 | 0x59,
+ 22532 - 19968: jis0212<<14 | 0x16<<7 | 0x5A,
+ 22533 - 19968: jis0208<<14 | 0x16<<7 | 0x57,
+ 22534 - 19968: jis0208<<14 | 0x21<<7 | 0x2E,
+ 22536 - 19968: jis0212<<14 | 0x16<<7 | 0x5B,
+ 22537 - 19968: jis0212<<14 | 0x16<<7 | 0x5C,
+ 22538 - 19968: jis0208<<14 | 0x33<<7 | 0x20,
+ 22539 - 19968: jis0208<<14 | 0x33<<7 | 0x23,
+ 22540 - 19968: jis0212<<14 | 0x17<<7 | 0x00,
+ 22541 - 19968: jis0212<<14 | 0x17<<7 | 0x01,
+ 22549 - 19968: jis0208<<14 | 0x21<<7 | 0x23,
+ 22553 - 19968: jis0208<<14 | 0x33<<7 | 0x24,
+ 22555 - 19968: jis0212<<14 | 0x17<<7 | 0x02,
+ 22557 - 19968: jis0208<<14 | 0x33<<7 | 0x25,
+ 22558 - 19968: jis0212<<14 | 0x17<<7 | 0x03,
+ 22559 - 19968: jis0212<<14 | 0x17<<7 | 0x04,
+ 22560 - 19968: jis0212<<14 | 0x17<<7 | 0x05,
+ 22561 - 19968: jis0208<<14 | 0x33<<7 | 0x27,
+ 22564 - 19968: jis0208<<14 | 0x23<<7 | 0x48,
+ 22566 - 19968: jis0212<<14 | 0x17<<7 | 0x06,
+ 22567 - 19968: jis0212<<14 | 0x17<<7 | 0x07,
+ 22570 - 19968: jis0208<<14 | 0x13<<7 | 0x0D,
+ 22573 - 19968: jis0212<<14 | 0x17<<7 | 0x08,
+ 22575 - 19968: jis0208<<14 | 0x53<<7 | 0x00,
+ 22576 - 19968: jis0208<<14 | 0x10<<7 | 0x40,
+ 22577 - 19968: jis0208<<14 | 0x29<<7 | 0x52,
+ 22578 - 19968: jis0212<<14 | 0x17<<7 | 0x09,
+ 22580 - 19968: jis0208<<14 | 0x1D<<7 | 0x4B,
+ 22581 - 19968: jis0208<<14 | 0x24<<7 | 0x27,
+ 22585 - 19968: jis0212<<14 | 0x17<<7 | 0x0A,
+ 22586 - 19968: jis0208<<14 | 0x19<<7 | 0x45,
+ 22589 - 19968: jis0208<<14 | 0x33<<7 | 0x2D,
+ 22591 - 19968: jis0212<<14 | 0x17<<7 | 0x0B,
+ 22592 - 19968: jis0208<<14 | 0x29<<7 | 0x1C,
+ 22593 - 19968: jis0208<<14 | 0x2D<<7 | 0x3C,
+ 22601 - 19968: jis0212<<14 | 0x17<<7 | 0x0C,
+ 22602 - 19968: jis0208<<14 | 0x11<<7 | 0x53,
+ 22603 - 19968: jis0208<<14 | 0x33<<7 | 0x29,
+ 22604 - 19968: jis0212<<14 | 0x17<<7 | 0x0D,
+ 22605 - 19968: jis0212<<14 | 0x17<<7 | 0x0E,
+ 22607 - 19968: jis0212<<14 | 0x17<<7 | 0x0F,
+ 22608 - 19968: jis0212<<14 | 0x17<<7 | 0x10,
+ 22609 - 19968: jis0208<<14 | 0x20<<7 | 0x19,
+ 22610 - 19968: jis0208<<14 | 0x33<<7 | 0x2C,
+ 22612 - 19968: jis0208<<14 | 0x24<<7 | 0x42,
+ 22613 - 19968: jis0212<<14 | 0x17<<7 | 0x11,
+ 22615 - 19968: jis0208<<14 | 0x24<<7 | 0x28,
+ 22616 - 19968: jis0208<<14 | 0x24<<7 | 0x43,
+ 22617 - 19968: jis0208<<14 | 0x27<<7 | 0x18,
+ 22618 - 19968: jis0208<<14 | 0x23<<7 | 0x2C,
+ 22622 - 19968: jis0208<<14 | 0x19<<7 | 0x28,
+ 22623 - 19968: jis0212<<14 | 0x17<<7 | 0x12,
+ 22625 - 19968: jis0212<<14 | 0x17<<7 | 0x13,
+ 22626 - 19968: jis0208<<14 | 0x33<<7 | 0x28,
+ 22628 - 19968: jis0212<<14 | 0x17<<7 | 0x14,
+ 22631 - 19968: jis0212<<14 | 0x17<<7 | 0x15,
+ 22632 - 19968: jis0212<<14 | 0x17<<7 | 0x16,
+ 22633 - 19968: jis0208<<14 | 0x10<<7 | 0x55,
+ 22635 - 19968: jis0208<<14 | 0x24<<7 | 0x15,
+ 22640 - 19968: jis0208<<14 | 0x33<<7 | 0x2A,
+ 22642 - 19968: jis0208<<14 | 0x33<<7 | 0x26,
+ 22645 - 19968: jis0208<<14 | 0x1E<<7 | 0x2F,
+ 22648 - 19968: jis0212<<14 | 0x17<<7 | 0x17,
+ 22649 - 19968: jis0208<<14 | 0x33<<7 | 0x2E,
+ 22652 - 19968: jis0212<<14 | 0x17<<7 | 0x18,
+ 22654 - 19968: jis0208<<14 | 0x1C<<7 | 0x2D,
+ 22655 - 19968: jis0212<<14 | 0x17<<7 | 0x19,
+ 22656 - 19968: jis0212<<14 | 0x17<<7 | 0x1A,
+ 22657 - 19968: jis0212<<14 | 0x17<<7 | 0x1B,
+ 22659 - 19968: jis0208<<14 | 0x15<<7 | 0x0C,
+ 22661 - 19968: jis0208<<14 | 0x33<<7 | 0x2F,
+ 22663 - 19968: jis0212<<14 | 0x17<<7 | 0x1C,
+ 22664 - 19968: jis0212<<14 | 0x17<<7 | 0x1D,
+ 22665 - 19968: jis0212<<14 | 0x17<<7 | 0x1E,
+ 22666 - 19968: jis0212<<14 | 0x17<<7 | 0x1F,
+ 22668 - 19968: jis0212<<14 | 0x17<<7 | 0x20,
+ 22669 - 19968: jis0212<<14 | 0x17<<7 | 0x21,
+ 22671 - 19968: jis0212<<14 | 0x17<<7 | 0x22,
+ 22672 - 19968: jis0212<<14 | 0x17<<7 | 0x23,
+ 22675 - 19968: jis0208<<14 | 0x29<<7 | 0x47,
+ 22676 - 19968: jis0212<<14 | 0x17<<7 | 0x24,
+ 22678 - 19968: jis0212<<14 | 0x17<<7 | 0x25,
+ 22679 - 19968: jis0208<<14 | 0x20<<7 | 0x5C,
+ 22684 - 19968: jis0208<<14 | 0x23<<7 | 0x25,
+ 22685 - 19968: jis0212<<14 | 0x17<<7 | 0x26,
+ 22686 - 19968: jis0208<<14 | 0x58<<7 | 0x40,
+ 22687 - 19968: jis0208<<14 | 0x33<<7 | 0x31,
+ 22688 - 19968: jis0212<<14 | 0x17<<7 | 0x27,
+ 22689 - 19968: jis0212<<14 | 0x17<<7 | 0x28,
+ 22690 - 19968: jis0212<<14 | 0x17<<7 | 0x29,
+ 22694 - 19968: jis0212<<14 | 0x17<<7 | 0x2A,
+ 22696 - 19968: jis0208<<14 | 0x2A<<7 | 0x2E,
+ 22697 - 19968: jis0212<<14 | 0x17<<7 | 0x2B,
+ 22699 - 19968: jis0208<<14 | 0x33<<7 | 0x32,
+ 22702 - 19968: jis0208<<14 | 0x33<<7 | 0x37,
+ 22705 - 19968: jis0212<<14 | 0x17<<7 | 0x2C,
+ 22706 - 19968: jis0208<<14 | 0x58<<7 | 0x41,
+ 22707 - 19968: jis0208<<14 | 0x29<<7 | 0x0E,
+ 22712 - 19968: jis0208<<14 | 0x33<<7 | 0x36,
+ 22713 - 19968: jis0208<<14 | 0x33<<7 | 0x30,
+ 22714 - 19968: jis0208<<14 | 0x33<<7 | 0x33,
+ 22715 - 19968: jis0208<<14 | 0x33<<7 | 0x35,
+ 22716 - 19968: jis0212<<14 | 0x17<<7 | 0x2F,
+ 22718 - 19968: jis0208<<14 | 0x19<<7 | 0x05,
+ 22721 - 19968: jis0208<<14 | 0x29<<7 | 0x28,
+ 22722 - 19968: jis0212<<14 | 0x17<<7 | 0x30,
+ 22724 - 19968: jis0212<<14 | 0x17<<7 | 0x2E,
+ 22725 - 19968: jis0208<<14 | 0x33<<7 | 0x38,
+ 22727 - 19968: jis0208<<14 | 0x22<<7 | 0x24,
+ 22728 - 19968: jis0212<<14 | 0x17<<7 | 0x31,
+ 22730 - 19968: jis0208<<14 | 0x11<<7 | 0x54,
+ 22732 - 19968: jis0208<<14 | 0x1D<<7 | 0x4C,
+ 22733 - 19968: jis0212<<14 | 0x17<<7 | 0x32,
+ 22734 - 19968: jis0212<<14 | 0x17<<7 | 0x33,
+ 22736 - 19968: jis0212<<14 | 0x17<<7 | 0x34,
+ 22737 - 19968: jis0208<<14 | 0x33<<7 | 0x3A,
+ 22738 - 19968: jis0212<<14 | 0x17<<7 | 0x35,
+ 22739 - 19968: jis0208<<14 | 0x33<<7 | 0x39,
+ 22740 - 19968: jis0212<<14 | 0x17<<7 | 0x36,
+ 22741 - 19968: jis0208<<14 | 0x18<<7 | 0x47,
+ 22742 - 19968: jis0212<<14 | 0x17<<7 | 0x37,
+ 22743 - 19968: jis0208<<14 | 0x33<<7 | 0x3B,
+ 22744 - 19968: jis0208<<14 | 0x33<<7 | 0x3D,
+ 22745 - 19968: jis0208<<14 | 0x33<<7 | 0x3C,
+ 22746 - 19968: jis0212<<14 | 0x17<<7 | 0x38,
+ 22748 - 19968: jis0208<<14 | 0x33<<7 | 0x3F,
+ 22749 - 19968: jis0212<<14 | 0x17<<7 | 0x39,
+ 22750 - 19968: jis0208<<14 | 0x33<<7 | 0x34,
+ 22751 - 19968: jis0208<<14 | 0x33<<7 | 0x41,
+ 22753 - 19968: jis0212<<14 | 0x17<<7 | 0x3A,
+ 22754 - 19968: jis0212<<14 | 0x17<<7 | 0x3B,
+ 22756 - 19968: jis0208<<14 | 0x33<<7 | 0x40,
+ 22757 - 19968: jis0208<<14 | 0x33<<7 | 0x3E,
+ 22761 - 19968: jis0212<<14 | 0x17<<7 | 0x3C,
+ 22763 - 19968: jis0208<<14 | 0x1A<<7 | 0x2D,
+ 22764 - 19968: jis0208<<14 | 0x1E<<7 | 0x30,
+ 22766 - 19968: jis0208<<14 | 0x20<<7 | 0x33,
+ 22767 - 19968: jis0208<<14 | 0x33<<7 | 0x42,
+ 22768 - 19968: jis0208<<14 | 0x1F<<7 | 0x1B,
+ 22769 - 19968: jis0208<<14 | 0x0F<<7 | 0x4C,
+ 22770 - 19968: jis0208<<14 | 0x26<<7 | 0x43,
+ 22771 - 19968: jis0212<<14 | 0x17<<7 | 0x3D,
+ 22775 - 19968: jis0208<<14 | 0x23<<7 | 0x3A,
+ 22777 - 19968: jis0208<<14 | 0x33<<7 | 0x44,
+ 22778 - 19968: jis0208<<14 | 0x33<<7 | 0x43,
+ 22779 - 19968: jis0208<<14 | 0x33<<7 | 0x45,
+ 22780 - 19968: jis0208<<14 | 0x33<<7 | 0x46,
+ 22781 - 19968: jis0208<<14 | 0x33<<7 | 0x47,
+ 22786 - 19968: jis0208<<14 | 0x33<<7 | 0x48,
+ 22789 - 19968: jis0212<<14 | 0x17<<7 | 0x3E,
+ 22790 - 19968: jis0212<<14 | 0x17<<7 | 0x3F,
+ 22793 - 19968: jis0208<<14 | 0x29<<7 | 0x30,
+ 22794 - 19968: jis0208<<14 | 0x33<<7 | 0x49,
+ 22795 - 19968: jis0208<<14 | 0x58<<7 | 0x42,
+ 22796 - 19968: jis0212<<14 | 0x17<<7 | 0x41,
+ 22799 - 19968: jis0208<<14 | 0x11<<7 | 0x25,
+ 22800 - 19968: jis0208<<14 | 0x33<<7 | 0x4A,
+ 22802 - 19968: jis0212<<14 | 0x17<<7 | 0x42,
+ 22803 - 19968: jis0212<<14 | 0x17<<7 | 0x43,
+ 22804 - 19968: jis0212<<14 | 0x17<<7 | 0x44,
+ 22805 - 19968: jis0208<<14 | 0x2C<<7 | 0x1B,
+ 22806 - 19968: jis0208<<14 | 0x12<<7 | 0x0F,
+ 22808 - 19968: jis0208<<14 | 0x31<<7 | 0x28,
+ 22809 - 19968: jis0208<<14 | 0x1C<<7 | 0x27,
+ 22810 - 19968: jis0208<<14 | 0x21<<7 | 0x1E,
+ 22811 - 19968: jis0208<<14 | 0x33<<7 | 0x4B,
+ 22812 - 19968: jis0208<<14 | 0x2B<<7 | 0x4A,
+ 22813 - 19968: jis0212<<14 | 0x17<<7 | 0x46,
+ 22817 - 19968: jis0212<<14 | 0x17<<7 | 0x47,
+ 22818 - 19968: jis0208<<14 | 0x2B<<7 | 0x13,
+ 22819 - 19968: jis0212<<14 | 0x17<<7 | 0x48,
+ 22820 - 19968: jis0212<<14 | 0x17<<7 | 0x49,
+ 22821 - 19968: jis0208<<14 | 0x33<<7 | 0x4D,
+ 22823 - 19968: jis0208<<14 | 0x21<<7 | 0x46,
+ 22824 - 19968: jis0212<<14 | 0x17<<7 | 0x4A,
+ 22825 - 19968: jis0208<<14 | 0x24<<7 | 0x16,
+ 22826 - 19968: jis0208<<14 | 0x21<<7 | 0x1F,
+ 22827 - 19968: jis0208<<14 | 0x28<<7 | 0x36,
+ 22828 - 19968: jis0208<<14 | 0x33<<7 | 0x4E,
+ 22829 - 19968: jis0208<<14 | 0x33<<7 | 0x4F,
+ 22830 - 19968: jis0208<<14 | 0x10<<7 | 0x5A,
+ 22831 - 19968: jis0212<<14 | 0x17<<7 | 0x4B,
+ 22832 - 19968: jis0212<<14 | 0x17<<7 | 0x4C,
+ 22833 - 19968: jis0208<<14 | 0x1B<<7 | 0x19,
+ 22834 - 19968: jis0208<<14 | 0x33<<7 | 0x50,
+ 22835 - 19968: jis0212<<14 | 0x17<<7 | 0x4D,
+ 22837 - 19968: jis0212<<14 | 0x17<<7 | 0x4E,
+ 22838 - 19968: jis0212<<14 | 0x17<<7 | 0x4F,
+ 22839 - 19968: jis0208<<14 | 0x0F<<7 | 0x2F,
+ 22840 - 19968: jis0208<<14 | 0x33<<7 | 0x51,
+ 22846 - 19968: jis0208<<14 | 0x33<<7 | 0x52,
+ 22847 - 19968: jis0212<<14 | 0x17<<7 | 0x50,
+ 22851 - 19968: jis0212<<14 | 0x17<<7 | 0x51,
+ 22852 - 19968: jis0208<<14 | 0x10<<7 | 0x41,
+ 22854 - 19968: jis0212<<14 | 0x17<<7 | 0x52,
+ 22855 - 19968: jis0208<<14 | 0x13<<7 | 0x50,
+ 22856 - 19968: jis0208<<14 | 0x25<<7 | 0x3F,
+ 22857 - 19968: jis0208<<14 | 0x29<<7 | 0x53,
+ 22862 - 19968: jis0208<<14 | 0x33<<7 | 0x56,
+ 22863 - 19968: jis0208<<14 | 0x20<<7 | 0x34,
+ 22864 - 19968: jis0208<<14 | 0x33<<7 | 0x55,
+ 22865 - 19968: jis0208<<14 | 0x16<<7 | 0x1F,
+ 22866 - 19968: jis0212<<14 | 0x17<<7 | 0x53,
+ 22867 - 19968: jis0208<<14 | 0x58<<7 | 0x43,
+ 22868 - 19968: jis0208<<14 | 0x2A<<7 | 0x3A,
+ 22869 - 19968: jis0208<<14 | 0x33<<7 | 0x54,
+ 22871 - 19968: jis0208<<14 | 0x24<<7 | 0x44,
+ 22872 - 19968: jis0208<<14 | 0x33<<7 | 0x58,
+ 22873 - 19968: jis0212<<14 | 0x17<<7 | 0x55,
+ 22874 - 19968: jis0208<<14 | 0x33<<7 | 0x57,
+ 22875 - 19968: jis0208<<14 | 0x58<<7 | 0x44,
+ 22877 - 19968: jis0208<<14 | 0x58<<7 | 0x45,
+ 22878 - 19968: jis0212<<14 | 0x17<<7 | 0x58,
+ 22879 - 19968: jis0212<<14 | 0x17<<7 | 0x59,
+ 22880 - 19968: jis0208<<14 | 0x33<<7 | 0x5A,
+ 22881 - 19968: jis0212<<14 | 0x17<<7 | 0x5A,
+ 22882 - 19968: jis0208<<14 | 0x33<<7 | 0x59,
+ 22883 - 19968: jis0208<<14 | 0x58<<7 | 0x46,
+ 22885 - 19968: jis0208<<14 | 0x10<<7 | 0x5B,
+ 22887 - 19968: jis0208<<14 | 0x33<<7 | 0x5B,
+ 22888 - 19968: jis0208<<14 | 0x1D<<7 | 0x08,
+ 22889 - 19968: jis0208<<14 | 0x33<<7 | 0x5D,
+ 22890 - 19968: jis0208<<14 | 0x22<<7 | 0x04,
+ 22891 - 19968: jis0212<<14 | 0x17<<7 | 0x5C,
+ 22892 - 19968: jis0208<<14 | 0x33<<7 | 0x5C,
+ 22893 - 19968: jis0212<<14 | 0x17<<7 | 0x5D,
+ 22894 - 19968: jis0208<<14 | 0x29<<7 | 0x12,
+ 22895 - 19968: jis0212<<14 | 0x18<<7 | 0x00,
+ 22898 - 19968: jis0212<<14 | 0x18<<7 | 0x01,
+ 22899 - 19968: jis0208<<14 | 0x1C<<7 | 0x56,
+ 22900 - 19968: jis0208<<14 | 0x24<<7 | 0x3A,
+ 22901 - 19968: jis0212<<14 | 0x18<<7 | 0x02,
+ 22902 - 19968: jis0212<<14 | 0x18<<7 | 0x03,
+ 22904 - 19968: jis0208<<14 | 0x34<<7 | 0x00,
+ 22905 - 19968: jis0212<<14 | 0x18<<7 | 0x04,
+ 22907 - 19968: jis0212<<14 | 0x18<<7 | 0x05,
+ 22908 - 19968: jis0212<<14 | 0x18<<7 | 0x06,
+ 22909 - 19968: jis0208<<14 | 0x18<<7 | 0x04,
+ 22913 - 19968: jis0208<<14 | 0x34<<7 | 0x01,
+ 22914 - 19968: jis0208<<14 | 0x26<<7 | 0x00,
+ 22915 - 19968: jis0208<<14 | 0x27<<7 | 0x3D,
+ 22916 - 19968: jis0208<<14 | 0x2B<<7 | 0x30,
+ 22922 - 19968: jis0208<<14 | 0x26<<7 | 0x04,
+ 22923 - 19968: jis0212<<14 | 0x18<<7 | 0x07,
+ 22924 - 19968: jis0212<<14 | 0x18<<7 | 0x08,
+ 22925 - 19968: jis0208<<14 | 0x34<<7 | 0x0A,
+ 22926 - 19968: jis0212<<14 | 0x18<<7 | 0x09,
+ 22930 - 19968: jis0212<<14 | 0x18<<7 | 0x0A,
+ 22931 - 19968: jis0208<<14 | 0x14<<7 | 0x17,
+ 22933 - 19968: jis0212<<14 | 0x18<<7 | 0x0B,
+ 22934 - 19968: jis0208<<14 | 0x2C<<7 | 0x24,
+ 22935 - 19968: jis0212<<14 | 0x18<<7 | 0x0C,
+ 22937 - 19968: jis0208<<14 | 0x2B<<7 | 0x0E,
+ 22939 - 19968: jis0208<<14 | 0x35<<7 | 0x0B,
+ 22941 - 19968: jis0208<<14 | 0x34<<7 | 0x02,
+ 22943 - 19968: jis0212<<14 | 0x18<<7 | 0x0D,
+ 22947 - 19968: jis0208<<14 | 0x34<<7 | 0x05,
+ 22948 - 19968: jis0208<<14 | 0x58<<7 | 0x47,
+ 22949 - 19968: jis0208<<14 | 0x21<<7 | 0x24,
+ 22951 - 19968: jis0212<<14 | 0x18<<7 | 0x0F,
+ 22952 - 19968: jis0208<<14 | 0x2A<<7 | 0x17,
+ 22956 - 19968: jis0208<<14 | 0x24<<7 | 0x29,
+ 22957 - 19968: jis0212<<14 | 0x18<<7 | 0x10,
+ 22958 - 19968: jis0212<<14 | 0x18<<7 | 0x11,
+ 22959 - 19968: jis0212<<14 | 0x18<<7 | 0x12,
+ 22960 - 19968: jis0212<<14 | 0x18<<7 | 0x13,
+ 22962 - 19968: jis0208<<14 | 0x34<<7 | 0x06,
+ 22963 - 19968: jis0212<<14 | 0x18<<7 | 0x14,
+ 22967 - 19968: jis0212<<14 | 0x18<<7 | 0x15,
+ 22969 - 19968: jis0208<<14 | 0x2A<<7 | 0x44,
+ 22970 - 19968: jis0208<<14 | 0x58<<7 | 0x48,
+ 22971 - 19968: jis0208<<14 | 0x19<<7 | 0x29,
+ 22972 - 19968: jis0212<<14 | 0x18<<7 | 0x17,
+ 22974 - 19968: jis0208<<14 | 0x1D<<7 | 0x09,
+ 22977 - 19968: jis0212<<14 | 0x18<<7 | 0x18,
+ 22979 - 19968: jis0212<<14 | 0x18<<7 | 0x19,
+ 22980 - 19968: jis0212<<14 | 0x18<<7 | 0x1A,
+ 22982 - 19968: jis0208<<14 | 0x34<<7 | 0x07,
+ 22984 - 19968: jis0212<<14 | 0x18<<7 | 0x1B,
+ 22985 - 19968: jis0208<<14 | 0x1A<<7 | 0x2F,
+ 22986 - 19968: jis0212<<14 | 0x18<<7 | 0x1C,
+ 22987 - 19968: jis0208<<14 | 0x1A<<7 | 0x2E,
+ 22989 - 19968: jis0212<<14 | 0x18<<7 | 0x1D,
+ 22992 - 19968: jis0208<<14 | 0x0F<<7 | 0x18,
+ 22993 - 19968: jis0208<<14 | 0x17<<7 | 0x27,
+ 22994 - 19968: jis0212<<14 | 0x18<<7 | 0x1E,
+ 22995 - 19968: jis0208<<14 | 0x1F<<7 | 0x0A,
+ 22996 - 19968: jis0208<<14 | 0x0F<<7 | 0x30,
+ 23001 - 19968: jis0208<<14 | 0x34<<7 | 0x0B,
+ 23002 - 19968: jis0208<<14 | 0x34<<7 | 0x0C,
+ 23004 - 19968: jis0208<<14 | 0x34<<7 | 0x09,
+ 23005 - 19968: jis0212<<14 | 0x18<<7 | 0x1F,
+ 23006 - 19968: jis0212<<14 | 0x18<<7 | 0x20,
+ 23007 - 19968: jis0212<<14 | 0x18<<7 | 0x21,
+ 23011 - 19968: jis0212<<14 | 0x18<<7 | 0x22,
+ 23012 - 19968: jis0212<<14 | 0x18<<7 | 0x23,
+ 23013 - 19968: jis0208<<14 | 0x10<<7 | 0x17,
+ 23014 - 19968: jis0208<<14 | 0x13<<7 | 0x0E,
+ 23015 - 19968: jis0212<<14 | 0x18<<7 | 0x24,
+ 23016 - 19968: jis0208<<14 | 0x34<<7 | 0x08,
+ 23018 - 19968: jis0208<<14 | 0x2B<<7 | 0x24,
+ 23019 - 19968: jis0208<<14 | 0x28<<7 | 0x10,
+ 23022 - 19968: jis0212<<14 | 0x18<<7 | 0x25,
+ 23023 - 19968: jis0212<<14 | 0x18<<7 | 0x26,
+ 23025 - 19968: jis0212<<14 | 0x18<<7 | 0x27,
+ 23026 - 19968: jis0212<<14 | 0x18<<7 | 0x28,
+ 23028 - 19968: jis0212<<14 | 0x18<<7 | 0x29,
+ 23030 - 19968: jis0208<<14 | 0x0F<<7 | 0x07,
+ 23031 - 19968: jis0212<<14 | 0x18<<7 | 0x2A,
+ 23035 - 19968: jis0208<<14 | 0x0F<<7 | 0x58,
+ 23039 - 19968: jis0208<<14 | 0x1A<<7 | 0x30,
+ 23040 - 19968: jis0212<<14 | 0x18<<7 | 0x2B,
+ 23041 - 19968: jis0208<<14 | 0x0F<<7 | 0x31,
+ 23043 - 19968: jis0208<<14 | 0x0F<<7 | 0x02,
+ 23044 - 19968: jis0212<<14 | 0x18<<7 | 0x2C,
+ 23049 - 19968: jis0208<<14 | 0x34<<7 | 0x11,
+ 23052 - 19968: jis0212<<14 | 0x18<<7 | 0x2D,
+ 23053 - 19968: jis0212<<14 | 0x18<<7 | 0x2E,
+ 23054 - 19968: jis0212<<14 | 0x18<<7 | 0x2F,
+ 23057 - 19968: jis0208<<14 | 0x34<<7 | 0x0F,
+ 23058 - 19968: jis0212<<14 | 0x18<<7 | 0x30,
+ 23059 - 19968: jis0212<<14 | 0x18<<7 | 0x31,
+ 23064 - 19968: jis0208<<14 | 0x2B<<7 | 0x1B,
+ 23066 - 19968: jis0208<<14 | 0x34<<7 | 0x12,
+ 23068 - 19968: jis0208<<14 | 0x34<<7 | 0x10,
+ 23070 - 19968: jis0212<<14 | 0x18<<7 | 0x32,
+ 23071 - 19968: jis0208<<14 | 0x34<<7 | 0x0E,
+ 23072 - 19968: jis0208<<14 | 0x1E<<7 | 0x10,
+ 23075 - 19968: jis0212<<14 | 0x18<<7 | 0x33,
+ 23076 - 19968: jis0212<<14 | 0x18<<7 | 0x34,
+ 23077 - 19968: jis0208<<14 | 0x34<<7 | 0x0D,
+ 23079 - 19968: jis0212<<14 | 0x18<<7 | 0x35,
+ 23080 - 19968: jis0212<<14 | 0x18<<7 | 0x36,
+ 23081 - 19968: jis0208<<14 | 0x29<<7 | 0x39,
+ 23082 - 19968: jis0212<<14 | 0x18<<7 | 0x37,
+ 23085 - 19968: jis0212<<14 | 0x18<<7 | 0x38,
+ 23087 - 19968: jis0208<<14 | 0x17<<7 | 0x43,
+ 23088 - 19968: jis0212<<14 | 0x18<<7 | 0x39,
+ 23093 - 19968: jis0208<<14 | 0x34<<7 | 0x16,
+ 23094 - 19968: jis0208<<14 | 0x34<<7 | 0x17,
+ 23100 - 19968: jis0208<<14 | 0x1D<<7 | 0x0A,
+ 23104 - 19968: jis0208<<14 | 0x34<<7 | 0x13,
+ 23105 - 19968: jis0208<<14 | 0x2E<<7 | 0x0B,
+ 23108 - 19968: jis0212<<14 | 0x18<<7 | 0x3A,
+ 23109 - 19968: jis0212<<14 | 0x18<<7 | 0x3B,
+ 23110 - 19968: jis0208<<14 | 0x26<<7 | 0x2B,
+ 23111 - 19968: jis0212<<14 | 0x18<<7 | 0x3C,
+ 23112 - 19968: jis0212<<14 | 0x18<<7 | 0x3D,
+ 23113 - 19968: jis0208<<14 | 0x34<<7 | 0x15,
+ 23116 - 19968: jis0212<<14 | 0x18<<7 | 0x3E,
+ 23120 - 19968: jis0212<<14 | 0x18<<7 | 0x3F,
+ 23125 - 19968: jis0212<<14 | 0x18<<7 | 0x40,
+ 23130 - 19968: jis0208<<14 | 0x19<<7 | 0x06,
+ 23134 - 19968: jis0212<<14 | 0x18<<7 | 0x41,
+ 23138 - 19968: jis0208<<14 | 0x34<<7 | 0x18,
+ 23139 - 19968: jis0212<<14 | 0x18<<7 | 0x42,
+ 23141 - 19968: jis0212<<14 | 0x18<<7 | 0x43,
+ 23142 - 19968: jis0208<<14 | 0x28<<7 | 0x37,
+ 23143 - 19968: jis0212<<14 | 0x18<<7 | 0x44,
+ 23146 - 19968: jis0208<<14 | 0x34<<7 | 0x19,
+ 23148 - 19968: jis0208<<14 | 0x34<<7 | 0x14,
+ 23149 - 19968: jis0212<<14 | 0x18<<7 | 0x45,
+ 23159 - 19968: jis0212<<14 | 0x18<<7 | 0x46,
+ 23162 - 19968: jis0212<<14 | 0x18<<7 | 0x47,
+ 23163 - 19968: jis0212<<14 | 0x18<<7 | 0x48,
+ 23166 - 19968: jis0212<<14 | 0x18<<7 | 0x49,
+ 23167 - 19968: jis0208<<14 | 0x2B<<7 | 0x1A,
+ 23179 - 19968: jis0212<<14 | 0x18<<7 | 0x4A,
+ 23184 - 19968: jis0212<<14 | 0x18<<7 | 0x4B,
+ 23186 - 19968: jis0208<<14 | 0x26<<7 | 0x3D,
+ 23187 - 19968: jis0212<<14 | 0x18<<7 | 0x4C,
+ 23190 - 19968: jis0212<<14 | 0x18<<7 | 0x4D,
+ 23193 - 19968: jis0212<<14 | 0x18<<7 | 0x4E,
+ 23194 - 19968: jis0208<<14 | 0x34<<7 | 0x1A,
+ 23195 - 19968: jis0208<<14 | 0x28<<7 | 0x11,
+ 23196 - 19968: jis0212<<14 | 0x18<<7 | 0x4F,
+ 23198 - 19968: jis0212<<14 | 0x18<<7 | 0x50,
+ 23199 - 19968: jis0212<<14 | 0x18<<7 | 0x51,
+ 23200 - 19968: jis0212<<14 | 0x18<<7 | 0x52,
+ 23202 - 19968: jis0212<<14 | 0x18<<7 | 0x53,
+ 23207 - 19968: jis0212<<14 | 0x18<<7 | 0x54,
+ 23212 - 19968: jis0212<<14 | 0x18<<7 | 0x55,
+ 23217 - 19968: jis0212<<14 | 0x18<<7 | 0x56,
+ 23218 - 19968: jis0212<<14 | 0x18<<7 | 0x57,
+ 23219 - 19968: jis0212<<14 | 0x18<<7 | 0x58,
+ 23221 - 19968: jis0212<<14 | 0x18<<7 | 0x59,
+ 23224 - 19968: jis0212<<14 | 0x18<<7 | 0x5A,
+ 23226 - 19968: jis0212<<14 | 0x18<<7 | 0x5B,
+ 23227 - 19968: jis0212<<14 | 0x18<<7 | 0x5C,
+ 23228 - 19968: jis0208<<14 | 0x34<<7 | 0x1B,
+ 23229 - 19968: jis0208<<14 | 0x34<<7 | 0x1F,
+ 23230 - 19968: jis0208<<14 | 0x34<<7 | 0x1C,
+ 23231 - 19968: jis0212<<14 | 0x18<<7 | 0x5D,
+ 23233 - 19968: jis0208<<14 | 0x11<<7 | 0x26,
+ 23234 - 19968: jis0208<<14 | 0x34<<7 | 0x1E,
+ 23236 - 19968: jis0212<<14 | 0x19<<7 | 0x00,
+ 23238 - 19968: jis0212<<14 | 0x19<<7 | 0x01,
+ 23240 - 19968: jis0212<<14 | 0x19<<7 | 0x02,
+ 23241 - 19968: jis0208<<14 | 0x1B<<7 | 0x1A,
+ 23243 - 19968: jis0208<<14 | 0x34<<7 | 0x1D,
+ 23244 - 19968: jis0208<<14 | 0x16<<7 | 0x58,
+ 23247 - 19968: jis0212<<14 | 0x19<<7 | 0x03,
+ 23248 - 19968: jis0208<<14 | 0x34<<7 | 0x2B,
+ 23254 - 19968: jis0208<<14 | 0x34<<7 | 0x24,
+ 23255 - 19968: jis0208<<14 | 0x34<<7 | 0x21,
+ 23258 - 19968: jis0212<<14 | 0x19<<7 | 0x04,
+ 23260 - 19968: jis0212<<14 | 0x19<<7 | 0x05,
+ 23264 - 19968: jis0212<<14 | 0x19<<7 | 0x06,
+ 23265 - 19968: jis0208<<14 | 0x22<<7 | 0x43,
+ 23267 - 19968: jis0208<<14 | 0x34<<7 | 0x20,
+ 23269 - 19968: jis0212<<14 | 0x19<<7 | 0x07,
+ 23270 - 19968: jis0208<<14 | 0x34<<7 | 0x22,
+ 23273 - 19968: jis0208<<14 | 0x34<<7 | 0x23,
+ 23274 - 19968: jis0212<<14 | 0x19<<7 | 0x08,
+ 23278 - 19968: jis0212<<14 | 0x19<<7 | 0x09,
+ 23285 - 19968: jis0212<<14 | 0x19<<7 | 0x0A,
+ 23286 - 19968: jis0212<<14 | 0x19<<7 | 0x0B,
+ 23290 - 19968: jis0208<<14 | 0x34<<7 | 0x25,
+ 23291 - 19968: jis0208<<14 | 0x34<<7 | 0x26,
+ 23293 - 19968: jis0212<<14 | 0x19<<7 | 0x0C,
+ 23296 - 19968: jis0212<<14 | 0x19<<7 | 0x0D,
+ 23297 - 19968: jis0212<<14 | 0x19<<7 | 0x0E,
+ 23304 - 19968: jis0212<<14 | 0x19<<7 | 0x0F,
+ 23305 - 19968: jis0208<<14 | 0x13<<7 | 0x51,
+ 23307 - 19968: jis0208<<14 | 0x34<<7 | 0x28,
+ 23308 - 19968: jis0208<<14 | 0x34<<7 | 0x27,
+ 23318 - 19968: jis0208<<14 | 0x34<<7 | 0x29,
+ 23319 - 19968: jis0212<<14 | 0x19<<7 | 0x10,
+ 23321 - 19968: jis0212<<14 | 0x19<<7 | 0x12,
+ 23323 - 19968: jis0212<<14 | 0x19<<7 | 0x13,
+ 23325 - 19968: jis0212<<14 | 0x19<<7 | 0x14,
+ 23329 - 19968: jis0212<<14 | 0x19<<7 | 0x15,
+ 23330 - 19968: jis0208<<14 | 0x1D<<7 | 0x4D,
+ 23333 - 19968: jis0212<<14 | 0x19<<7 | 0x16,
+ 23338 - 19968: jis0208<<14 | 0x34<<7 | 0x2C,
+ 23340 - 19968: jis0208<<14 | 0x23<<7 | 0x3B,
+ 23341 - 19968: jis0212<<14 | 0x19<<7 | 0x17,
+ 23344 - 19968: jis0208<<14 | 0x10<<7 | 0x24,
+ 23346 - 19968: jis0208<<14 | 0x34<<7 | 0x2A,
+ 23348 - 19968: jis0212<<14 | 0x19<<7 | 0x11,
+ 23350 - 19968: jis0208<<14 | 0x34<<7 | 0x2D,
+ 23352 - 19968: jis0212<<14 | 0x19<<7 | 0x18,
+ 23358 - 19968: jis0208<<14 | 0x34<<7 | 0x2E,
+ 23360 - 19968: jis0208<<14 | 0x34<<7 | 0x31,
+ 23361 - 19968: jis0212<<14 | 0x19<<7 | 0x19,
+ 23363 - 19968: jis0208<<14 | 0x34<<7 | 0x2F,
+ 23365 - 19968: jis0208<<14 | 0x34<<7 | 0x30,
+ 23371 - 19968: jis0212<<14 | 0x19<<7 | 0x1A,
+ 23372 - 19968: jis0212<<14 | 0x19<<7 | 0x1B,
+ 23376 - 19968: jis0208<<14 | 0x1A<<7 | 0x31,
+ 23377 - 19968: jis0208<<14 | 0x34<<7 | 0x32,
+ 23378 - 19968: jis0212<<14 | 0x19<<7 | 0x1C,
+ 23380 - 19968: jis0208<<14 | 0x18<<7 | 0x05,
+ 23381 - 19968: jis0208<<14 | 0x34<<7 | 0x33,
+ 23382 - 19968: jis0208<<14 | 0x58<<7 | 0x49,
+ 23383 - 19968: jis0208<<14 | 0x1A<<7 | 0x59,
+ 23384 - 19968: jis0208<<14 | 0x21<<7 | 0x17,
+ 23386 - 19968: jis0208<<14 | 0x34<<7 | 0x34,
+ 23387 - 19968: jis0208<<14 | 0x34<<7 | 0x35,
+ 23388 - 19968: jis0208<<14 | 0x1A<<7 | 0x39,
+ 23389 - 19968: jis0208<<14 | 0x18<<7 | 0x06,
+ 23390 - 19968: jis0212<<14 | 0x19<<7 | 0x1E,
+ 23391 - 19968: jis0208<<14 | 0x2B<<7 | 0x31,
+ 23395 - 19968: jis0208<<14 | 0x14<<7 | 0x07,
+ 23396 - 19968: jis0208<<14 | 0x17<<7 | 0x28,
+ 23397 - 19968: jis0208<<14 | 0x34<<7 | 0x36,
+ 23398 - 19968: jis0208<<14 | 0x12<<7 | 0x37,
+ 23400 - 19968: jis0212<<14 | 0x19<<7 | 0x1F,
+ 23401 - 19968: jis0208<<14 | 0x34<<7 | 0x37,
+ 23403 - 19968: jis0208<<14 | 0x21<<7 | 0x18,
+ 23406 - 19968: jis0212<<14 | 0x19<<7 | 0x20,
+ 23407 - 19968: jis0212<<14 | 0x19<<7 | 0x21,
+ 23408 - 19968: jis0208<<14 | 0x34<<7 | 0x38,
+ 23409 - 19968: jis0208<<14 | 0x35<<7 | 0x02,
+ 23411 - 19968: jis0208<<14 | 0x34<<7 | 0x39,
+ 23413 - 19968: jis0208<<14 | 0x34<<7 | 0x3A,
+ 23416 - 19968: jis0208<<14 | 0x34<<7 | 0x3B,
+ 23418 - 19968: jis0208<<14 | 0x34<<7 | 0x3D,
+ 23420 - 19968: jis0212<<14 | 0x19<<7 | 0x22,
+ 23421 - 19968: jis0212<<14 | 0x19<<7 | 0x23,
+ 23422 - 19968: jis0212<<14 | 0x19<<7 | 0x24,
+ 23423 - 19968: jis0212<<14 | 0x19<<7 | 0x25,
+ 23424 - 19968: jis0208<<14 | 0x34<<7 | 0x3E,
+ 23425 - 19968: jis0212<<14 | 0x19<<7 | 0x26,
+ 23427 - 19968: jis0208<<14 | 0x34<<7 | 0x3F,
+ 23428 - 19968: jis0212<<14 | 0x19<<7 | 0x27,
+ 23429 - 19968: jis0208<<14 | 0x21<<7 | 0x4F,
+ 23430 - 19968: jis0212<<14 | 0x19<<7 | 0x28,
+ 23431 - 19968: jis0208<<14 | 0x10<<7 | 0x06,
+ 23432 - 19968: jis0208<<14 | 0x1B<<7 | 0x48,
+ 23433 - 19968: jis0208<<14 | 0x0F<<7 | 0x21,
+ 23434 - 19968: jis0212<<14 | 0x19<<7 | 0x29,
+ 23435 - 19968: jis0208<<14 | 0x20<<7 | 0x36,
+ 23436 - 19968: jis0208<<14 | 0x13<<7 | 0x0F,
+ 23437 - 19968: jis0208<<14 | 0x1B<<7 | 0x14,
+ 23438 - 19968: jis0212<<14 | 0x19<<7 | 0x2A,
+ 23439 - 19968: jis0208<<14 | 0x18<<7 | 0x07,
+ 23440 - 19968: jis0212<<14 | 0x19<<7 | 0x2B,
+ 23441 - 19968: jis0212<<14 | 0x19<<7 | 0x2C,
+ 23443 - 19968: jis0212<<14 | 0x19<<7 | 0x2D,
+ 23444 - 19968: jis0212<<14 | 0x19<<7 | 0x2E,
+ 23445 - 19968: jis0208<<14 | 0x24<<7 | 0x45,
+ 23446 - 19968: jis0212<<14 | 0x19<<7 | 0x2F,
+ 23447 - 19968: jis0208<<14 | 0x1C<<7 | 0x00,
+ 23448 - 19968: jis0208<<14 | 0x13<<7 | 0x10,
+ 23449 - 19968: jis0208<<14 | 0x22<<7 | 0x47,
+ 23450 - 19968: jis0208<<14 | 0x23<<7 | 0x49,
+ 23451 - 19968: jis0208<<14 | 0x0F<<7 | 0x17,
+ 23452 - 19968: jis0208<<14 | 0x14<<7 | 0x18,
+ 23453 - 19968: jis0208<<14 | 0x29<<7 | 0x54,
+ 23455 - 19968: jis0208<<14 | 0x1B<<7 | 0x21,
+ 23458 - 19968: jis0208<<14 | 0x14<<7 | 0x31,
+ 23459 - 19968: jis0208<<14 | 0x1F<<7 | 0x4A,
+ 23460 - 19968: jis0208<<14 | 0x1B<<7 | 0x1B,
+ 23461 - 19968: jis0208<<14 | 0x2C<<7 | 0x07,
+ 23462 - 19968: jis0208<<14 | 0x34<<7 | 0x40,
+ 23464 - 19968: jis0212<<14 | 0x19<<7 | 0x30,
+ 23465 - 19968: jis0212<<14 | 0x19<<7 | 0x31,
+ 23468 - 19968: jis0212<<14 | 0x19<<7 | 0x32,
+ 23469 - 19968: jis0212<<14 | 0x19<<7 | 0x33,
+ 23470 - 19968: jis0208<<14 | 0x14<<7 | 0x3B,
+ 23471 - 19968: jis0212<<14 | 0x19<<7 | 0x34,
+ 23472 - 19968: jis0208<<14 | 0x19<<7 | 0x2A,
+ 23473 - 19968: jis0212<<14 | 0x19<<7 | 0x35,
+ 23474 - 19968: jis0212<<14 | 0x19<<7 | 0x36,
+ 23475 - 19968: jis0208<<14 | 0x12<<7 | 0x11,
+ 23476 - 19968: jis0208<<14 | 0x10<<7 | 0x42,
+ 23477 - 19968: jis0208<<14 | 0x1D<<7 | 0x0B,
+ 23478 - 19968: jis0208<<14 | 0x11<<7 | 0x27,
+ 23479 - 19968: jis0212<<14 | 0x19<<7 | 0x37,
+ 23480 - 19968: jis0208<<14 | 0x34<<7 | 0x41,
+ 23481 - 19968: jis0208<<14 | 0x2C<<7 | 0x25,
+ 23482 - 19968: jis0212<<14 | 0x19<<7 | 0x38,
+ 23484 - 19968: jis0212<<14 | 0x19<<7 | 0x39,
+ 23487 - 19968: jis0208<<14 | 0x1C<<7 | 0x28,
+ 23488 - 19968: jis0208<<14 | 0x58<<7 | 0x4A,
+ 23489 - 19968: jis0212<<14 | 0x19<<7 | 0x3B,
+ 23490 - 19968: jis0208<<14 | 0x1B<<7 | 0x43,
+ 23491 - 19968: jis0208<<14 | 0x34<<7 | 0x42,
+ 23492 - 19968: jis0208<<14 | 0x13<<7 | 0x52,
+ 23493 - 19968: jis0208<<14 | 0x25<<7 | 0x31,
+ 23494 - 19968: jis0208<<14 | 0x2B<<7 | 0x08,
+ 23495 - 19968: jis0208<<14 | 0x34<<7 | 0x43,
+ 23497 - 19968: jis0208<<14 | 0x34<<7 | 0x44,
+ 23500 - 19968: jis0208<<14 | 0x28<<7 | 0x38,
+ 23501 - 19968: jis0212<<14 | 0x19<<7 | 0x3C,
+ 23503 - 19968: jis0212<<14 | 0x19<<7 | 0x3D,
+ 23504 - 19968: jis0208<<14 | 0x34<<7 | 0x46,
+ 23506 - 19968: jis0208<<14 | 0x13<<7 | 0x07,
+ 23507 - 19968: jis0208<<14 | 0x15<<7 | 0x56,
+ 23508 - 19968: jis0208<<14 | 0x34<<7 | 0x45,
+ 23510 - 19968: jis0212<<14 | 0x19<<7 | 0x3E,
+ 23511 - 19968: jis0212<<14 | 0x19<<7 | 0x3F,
+ 23512 - 19968: jis0208<<14 | 0x58<<7 | 0x4C,
+ 23513 - 19968: jis0212<<14 | 0x19<<7 | 0x41,
+ 23514 - 19968: jis0212<<14 | 0x19<<7 | 0x42,
+ 23515 - 19968: jis0208<<14 | 0x13<<7 | 0x11,
+ 23517 - 19968: jis0208<<14 | 0x1E<<7 | 0x11,
+ 23518 - 19968: jis0208<<14 | 0x34<<7 | 0x4A,
+ 23519 - 19968: jis0208<<14 | 0x1A<<7 | 0x00,
+ 23520 - 19968: jis0212<<14 | 0x19<<7 | 0x43,
+ 23521 - 19968: jis0208<<14 | 0x11<<7 | 0x28,
+ 23522 - 19968: jis0208<<14 | 0x34<<7 | 0x49,
+ 23524 - 19968: jis0208<<14 | 0x34<<7 | 0x47,
+ 23525 - 19968: jis0208<<14 | 0x34<<7 | 0x4B,
+ 23526 - 19968: jis0208<<14 | 0x34<<7 | 0x48,
+ 23527 - 19968: jis0208<<14 | 0x26<<7 | 0x0A,
+ 23528 - 19968: jis0208<<14 | 0x3B<<7 | 0x2C,
+ 23529 - 19968: jis0208<<14 | 0x1E<<7 | 0x12,
+ 23531 - 19968: jis0208<<14 | 0x34<<7 | 0x4C,
+ 23532 - 19968: jis0208<<14 | 0x58<<7 | 0x4D,
+ 23534 - 19968: jis0208<<14 | 0x2D<<7 | 0x1F,
+ 23535 - 19968: jis0212<<14 | 0x19<<7 | 0x44,
+ 23536 - 19968: jis0208<<14 | 0x34<<7 | 0x4D,
+ 23537 - 19968: jis0212<<14 | 0x19<<7 | 0x45,
+ 23539 - 19968: jis0208<<14 | 0x34<<7 | 0x4F,
+ 23540 - 19968: jis0212<<14 | 0x19<<7 | 0x46,
+ 23541 - 19968: jis0208<<14 | 0x22<<7 | 0x5D,
+ 23542 - 19968: jis0208<<14 | 0x34<<7 | 0x4E,
+ 23544 - 19968: jis0208<<14 | 0x1F<<7 | 0x02,
+ 23546 - 19968: jis0208<<14 | 0x1A<<7 | 0x5A,
+ 23549 - 19968: jis0212<<14 | 0x19<<7 | 0x47,
+ 23550 - 19968: jis0208<<14 | 0x21<<7 | 0x2F,
+ 23551 - 19968: jis0208<<14 | 0x1B<<7 | 0x56,
+ 23553 - 19968: jis0208<<14 | 0x28<<7 | 0x54,
+ 23554 - 19968: jis0208<<14 | 0x1F<<7 | 0x4B,
+ 23556 - 19968: jis0208<<14 | 0x1B<<7 | 0x2C,
+ 23557 - 19968: jis0208<<14 | 0x34<<7 | 0x50,
+ 23558 - 19968: jis0208<<14 | 0x1D<<7 | 0x0C,
+ 23559 - 19968: jis0208<<14 | 0x34<<7 | 0x51,
+ 23560 - 19968: jis0208<<14 | 0x34<<7 | 0x52,
+ 23561 - 19968: jis0208<<14 | 0x0F<<7 | 0x32,
+ 23562 - 19968: jis0208<<14 | 0x21<<7 | 0x19,
+ 23563 - 19968: jis0208<<14 | 0x1E<<7 | 0x31,
+ 23564 - 19968: jis0212<<14 | 0x19<<7 | 0x48,
+ 23565 - 19968: jis0208<<14 | 0x34<<7 | 0x53,
+ 23566 - 19968: jis0208<<14 | 0x25<<7 | 0x12,
+ 23567 - 19968: jis0208<<14 | 0x1D<<7 | 0x0D,
+ 23569 - 19968: jis0208<<14 | 0x1D<<7 | 0x0E,
+ 23571 - 19968: jis0208<<14 | 0x34<<7 | 0x54,
+ 23574 - 19968: jis0208<<14 | 0x1F<<7 | 0x4C,
+ 23575 - 19968: jis0212<<14 | 0x19<<7 | 0x49,
+ 23578 - 19968: jis0208<<14 | 0x1D<<7 | 0x0F,
+ 23582 - 19968: jis0208<<14 | 0x58<<7 | 0x4E,
+ 23583 - 19968: jis0212<<14 | 0x19<<7 | 0x4B,
+ 23584 - 19968: jis0208<<14 | 0x34<<7 | 0x55,
+ 23586 - 19968: jis0208<<14 | 0x34<<7 | 0x56,
+ 23587 - 19968: jis0212<<14 | 0x19<<7 | 0x4C,
+ 23588 - 19968: jis0208<<14 | 0x2B<<7 | 0x3F,
+ 23590 - 19968: jis0212<<14 | 0x19<<7 | 0x4D,
+ 23592 - 19968: jis0208<<14 | 0x34<<7 | 0x57,
+ 23593 - 19968: jis0212<<14 | 0x19<<7 | 0x4E,
+ 23595 - 19968: jis0212<<14 | 0x19<<7 | 0x4F,
+ 23596 - 19968: jis0212<<14 | 0x19<<7 | 0x50,
+ 23597 - 19968: jis0208<<14 | 0x15<<7 | 0x25,
+ 23598 - 19968: jis0212<<14 | 0x19<<7 | 0x51,
+ 23600 - 19968: jis0212<<14 | 0x19<<7 | 0x52,
+ 23601 - 19968: jis0208<<14 | 0x1C<<7 | 0x01,
+ 23602 - 19968: jis0212<<14 | 0x19<<7 | 0x53,
+ 23605 - 19968: jis0212<<14 | 0x19<<7 | 0x54,
+ 23606 - 19968: jis0212<<14 | 0x19<<7 | 0x55,
+ 23608 - 19968: jis0208<<14 | 0x34<<7 | 0x58,
+ 23609 - 19968: jis0208<<14 | 0x34<<7 | 0x59,
+ 23610 - 19968: jis0208<<14 | 0x1B<<7 | 0x3B,
+ 23611 - 19968: jis0208<<14 | 0x1E<<7 | 0x0B,
+ 23612 - 19968: jis0208<<14 | 0x25<<7 | 0x53,
+ 23613 - 19968: jis0208<<14 | 0x1E<<7 | 0x33,
+ 23614 - 19968: jis0208<<14 | 0x27<<7 | 0x57,
+ 23615 - 19968: jis0208<<14 | 0x26<<7 | 0x01,
+ 23616 - 19968: jis0208<<14 | 0x15<<7 | 0x28,
+ 23617 - 19968: jis0208<<14 | 0x34<<7 | 0x5A,
+ 23621 - 19968: jis0208<<14 | 0x14<<7 | 0x4E,
+ 23622 - 19968: jis0208<<14 | 0x34<<7 | 0x5B,
+ 23624 - 19968: jis0208<<14 | 0x15<<7 | 0x5D,
+ 23626 - 19968: jis0208<<14 | 0x25<<7 | 0x2E,
+ 23627 - 19968: jis0208<<14 | 0x11<<7 | 0x0F,
+ 23629 - 19968: jis0208<<14 | 0x1A<<7 | 0x32,
+ 23630 - 19968: jis0208<<14 | 0x34<<7 | 0x5C,
+ 23631 - 19968: jis0208<<14 | 0x35<<7 | 0x01,
+ 23632 - 19968: jis0208<<14 | 0x35<<7 | 0x00,
+ 23633 - 19968: jis0208<<14 | 0x15<<7 | 0x5C,
+ 23635 - 19968: jis0208<<14 | 0x34<<7 | 0x5D,
+ 23637 - 19968: jis0208<<14 | 0x24<<7 | 0x17,
+ 23641 - 19968: jis0212<<14 | 0x19<<7 | 0x56,
+ 23642 - 19968: jis0212<<14 | 0x19<<7 | 0x57,
+ 23644 - 19968: jis0212<<14 | 0x19<<7 | 0x58,
+ 23646 - 19968: jis0208<<14 | 0x21<<7 | 0x0F,
+ 23648 - 19968: jis0208<<14 | 0x24<<7 | 0x2A,
+ 23649 - 19968: jis0208<<14 | 0x1B<<7 | 0x27,
+ 23650 - 19968: jis0212<<14 | 0x19<<7 | 0x59,
+ 23651 - 19968: jis0212<<14 | 0x19<<7 | 0x5A,
+ 23652 - 19968: jis0208<<14 | 0x20<<7 | 0x37,
+ 23653 - 19968: jis0208<<14 | 0x2C<<7 | 0x59,
+ 23655 - 19968: jis0212<<14 | 0x19<<7 | 0x5B,
+ 23656 - 19968: jis0212<<14 | 0x19<<7 | 0x5C,
+ 23657 - 19968: jis0212<<14 | 0x19<<7 | 0x5D,
+ 23660 - 19968: jis0208<<14 | 0x35<<7 | 0x03,
+ 23661 - 19968: jis0212<<14 | 0x1A<<7 | 0x00,
+ 23662 - 19968: jis0208<<14 | 0x35<<7 | 0x04,
+ 23663 - 19968: jis0208<<14 | 0x25<<7 | 0x35,
+ 23664 - 19968: jis0212<<14 | 0x1A<<7 | 0x01,
+ 23665 - 19968: jis0208<<14 | 0x1A<<7 | 0x12,
+ 23668 - 19968: jis0212<<14 | 0x1A<<7 | 0x02,
+ 23669 - 19968: jis0212<<14 | 0x1A<<7 | 0x03,
+ 23670 - 19968: jis0208<<14 | 0x35<<7 | 0x06,
+ 23673 - 19968: jis0208<<14 | 0x35<<7 | 0x07,
+ 23674 - 19968: jis0212<<14 | 0x1A<<7 | 0x04,
+ 23675 - 19968: jis0212<<14 | 0x1A<<7 | 0x05,
+ 23676 - 19968: jis0212<<14 | 0x1A<<7 | 0x06,
+ 23677 - 19968: jis0212<<14 | 0x1A<<7 | 0x07,
+ 23687 - 19968: jis0212<<14 | 0x1A<<7 | 0x08,
+ 23688 - 19968: jis0212<<14 | 0x1A<<7 | 0x09,
+ 23690 - 19968: jis0212<<14 | 0x1A<<7 | 0x0A,
+ 23692 - 19968: jis0208<<14 | 0x35<<7 | 0x08,
+ 23695 - 19968: jis0212<<14 | 0x1A<<7 | 0x0B,
+ 23696 - 19968: jis0208<<14 | 0x13<<7 | 0x53,
+ 23697 - 19968: jis0208<<14 | 0x35<<7 | 0x09,
+ 23698 - 19968: jis0212<<14 | 0x1A<<7 | 0x0C,
+ 23700 - 19968: jis0208<<14 | 0x35<<7 | 0x0A,
+ 23709 - 19968: jis0212<<14 | 0x1A<<7 | 0x0D,
+ 23711 - 19968: jis0212<<14 | 0x1A<<7 | 0x0E,
+ 23712 - 19968: jis0212<<14 | 0x1A<<7 | 0x0F,
+ 23713 - 19968: jis0208<<14 | 0x11<<7 | 0x0B,
+ 23714 - 19968: jis0212<<14 | 0x1A<<7 | 0x10,
+ 23715 - 19968: jis0212<<14 | 0x1A<<7 | 0x11,
+ 23718 - 19968: jis0208<<14 | 0x58<<7 | 0x4F,
+ 23720 - 19968: jis0208<<14 | 0x20<<7 | 0x1A,
+ 23721 - 19968: jis0208<<14 | 0x13<<7 | 0x43,
+ 23722 - 19968: jis0212<<14 | 0x1A<<7 | 0x13,
+ 23723 - 19968: jis0208<<14 | 0x35<<7 | 0x0C,
+ 23724 - 19968: jis0208<<14 | 0x2B<<7 | 0x07,
+ 23729 - 19968: jis0208<<14 | 0x21<<7 | 0x31,
+ 23730 - 19968: jis0212<<14 | 0x1A<<7 | 0x14,
+ 23731 - 19968: jis0208<<14 | 0x12<<7 | 0x38,
+ 23732 - 19968: jis0212<<14 | 0x1A<<7 | 0x15,
+ 23733 - 19968: jis0212<<14 | 0x1A<<7 | 0x16,
+ 23734 - 19968: jis0208<<14 | 0x35<<7 | 0x0E,
+ 23735 - 19968: jis0208<<14 | 0x35<<7 | 0x10,
+ 23736 - 19968: jis0208<<14 | 0x13<<7 | 0x3E,
+ 23738 - 19968: jis0208<<14 | 0x58<<7 | 0x50,
+ 23739 - 19968: jis0208<<14 | 0x35<<7 | 0x0D,
+ 23740 - 19968: jis0208<<14 | 0x35<<7 | 0x0F,
+ 23742 - 19968: jis0208<<14 | 0x35<<7 | 0x12,
+ 23749 - 19968: jis0208<<14 | 0x35<<7 | 0x11,
+ 23751 - 19968: jis0208<<14 | 0x35<<7 | 0x13,
+ 23753 - 19968: jis0212<<14 | 0x1A<<7 | 0x18,
+ 23755 - 19968: jis0212<<14 | 0x1A<<7 | 0x19,
+ 23762 - 19968: jis0212<<14 | 0x1A<<7 | 0x1A,
+ 23767 - 19968: jis0212<<14 | 0x1A<<7 | 0x1C,
+ 23769 - 19968: jis0208<<14 | 0x35<<7 | 0x14,
+ 23773 - 19968: jis0212<<14 | 0x1A<<7 | 0x1B,
+ 23776 - 19968: jis0208<<14 | 0x25<<7 | 0x1C,
+ 23777 - 19968: jis0208<<14 | 0x15<<7 | 0x0D,
+ 23784 - 19968: jis0208<<14 | 0x11<<7 | 0x44,
+ 23785 - 19968: jis0208<<14 | 0x35<<7 | 0x15,
+ 23786 - 19968: jis0208<<14 | 0x35<<7 | 0x1A,
+ 23789 - 19968: jis0208<<14 | 0x35<<7 | 0x18,
+ 23790 - 19968: jis0212<<14 | 0x1A<<7 | 0x1D,
+ 23791 - 19968: jis0208<<14 | 0x29<<7 | 0x56,
+ 23792 - 19968: jis0208<<14 | 0x29<<7 | 0x55,
+ 23793 - 19968: jis0212<<14 | 0x1A<<7 | 0x1E,
+ 23794 - 19968: jis0212<<14 | 0x1A<<7 | 0x1F,
+ 23796 - 19968: jis0212<<14 | 0x1A<<7 | 0x20,
+ 23797 - 19968: jis0208<<14 | 0x58<<7 | 0x51,
+ 23798 - 19968: jis0208<<14 | 0x24<<7 | 0x46,
+ 23802 - 19968: jis0208<<14 | 0x35<<7 | 0x17,
+ 23803 - 19968: jis0208<<14 | 0x1C<<7 | 0x33,
+ 23805 - 19968: jis0208<<14 | 0x35<<7 | 0x16,
+ 23809 - 19968: jis0212<<14 | 0x1A<<7 | 0x21,
+ 23814 - 19968: jis0212<<14 | 0x1A<<7 | 0x22,
+ 23815 - 19968: jis0208<<14 | 0x1E<<7 | 0x51,
+ 23819 - 19968: jis0208<<14 | 0x35<<7 | 0x1B,
+ 23821 - 19968: jis0212<<14 | 0x1A<<7 | 0x23,
+ 23822 - 19968: jis0208<<14 | 0x19<<7 | 0x49,
+ 23825 - 19968: jis0208<<14 | 0x35<<7 | 0x21,
+ 23826 - 19968: jis0212<<14 | 0x1A<<7 | 0x24,
+ 23828 - 19968: jis0208<<14 | 0x35<<7 | 0x22,
+ 23829 - 19968: jis0208<<14 | 0x35<<7 | 0x1C,
+ 23830 - 19968: jis0208<<14 | 0x12<<7 | 0x12,
+ 23831 - 19968: jis0208<<14 | 0x35<<7 | 0x1D,
+ 23832 - 19968: jis0208<<14 | 0x35<<7 | 0x26,
+ 23833 - 19968: jis0208<<14 | 0x35<<7 | 0x25,
+ 23834 - 19968: jis0208<<14 | 0x35<<7 | 0x24,
+ 23835 - 19968: jis0208<<14 | 0x35<<7 | 0x20,
+ 23839 - 19968: jis0208<<14 | 0x35<<7 | 0x1F,
+ 23842 - 19968: jis0208<<14 | 0x35<<7 | 0x23,
+ 23843 - 19968: jis0212<<14 | 0x1A<<7 | 0x26,
+ 23844 - 19968: jis0212<<14 | 0x1A<<7 | 0x27,
+ 23846 - 19968: jis0212<<14 | 0x1A<<7 | 0x28,
+ 23847 - 19968: jis0208<<14 | 0x58<<7 | 0x52,
+ 23849 - 19968: jis0208<<14 | 0x29<<7 | 0x57,
+ 23851 - 19968: jis0212<<14 | 0x1A<<7 | 0x25,
+ 23857 - 19968: jis0212<<14 | 0x1A<<7 | 0x2A,
+ 23860 - 19968: jis0212<<14 | 0x1A<<7 | 0x2B,
+ 23865 - 19968: jis0212<<14 | 0x1A<<7 | 0x2C,
+ 23869 - 19968: jis0212<<14 | 0x1A<<7 | 0x2D,
+ 23871 - 19968: jis0212<<14 | 0x1A<<7 | 0x2E,
+ 23874 - 19968: jis0208<<14 | 0x58<<7 | 0x55,
+ 23875 - 19968: jis0212<<14 | 0x1A<<7 | 0x30,
+ 23878 - 19968: jis0212<<14 | 0x1A<<7 | 0x31,
+ 23880 - 19968: jis0212<<14 | 0x1A<<7 | 0x32,
+ 23882 - 19968: jis0212<<14 | 0x1A<<7 | 0x36,
+ 23883 - 19968: jis0208<<14 | 0x35<<7 | 0x2A,
+ 23884 - 19968: jis0208<<14 | 0x35<<7 | 0x27,
+ 23886 - 19968: jis0208<<14 | 0x35<<7 | 0x29,
+ 23888 - 19968: jis0208<<14 | 0x2C<<7 | 0x51,
+ 23889 - 19968: jis0212<<14 | 0x1A<<7 | 0x34,
+ 23890 - 19968: jis0208<<14 | 0x35<<7 | 0x28,
+ 23891 - 19968: jis0208<<14 | 0x58<<7 | 0x53,
+ 23893 - 19968: jis0212<<14 | 0x1A<<7 | 0x33,
+ 23897 - 19968: jis0212<<14 | 0x1A<<7 | 0x35,
+ 23900 - 19968: jis0208<<14 | 0x35<<7 | 0x1E,
+ 23903 - 19968: jis0212<<14 | 0x1A<<7 | 0x37,
+ 23904 - 19968: jis0212<<14 | 0x1A<<7 | 0x38,
+ 23905 - 19968: jis0212<<14 | 0x1A<<7 | 0x39,
+ 23906 - 19968: jis0212<<14 | 0x1A<<7 | 0x3A,
+ 23908 - 19968: jis0212<<14 | 0x1A<<7 | 0x3B,
+ 23913 - 19968: jis0208<<14 | 0x1E<<7 | 0x52,
+ 23914 - 19968: jis0212<<14 | 0x1A<<7 | 0x3C,
+ 23916 - 19968: jis0208<<14 | 0x35<<7 | 0x2B,
+ 23917 - 19968: jis0208<<14 | 0x58<<7 | 0x56,
+ 23919 - 19968: jis0208<<14 | 0x19<<7 | 0x16,
+ 23920 - 19968: jis0212<<14 | 0x1A<<7 | 0x3E,
+ 23923 - 19968: jis0208<<14 | 0x35<<7 | 0x2C,
+ 23926 - 19968: jis0208<<14 | 0x35<<7 | 0x2D,
+ 23929 - 19968: jis0212<<14 | 0x1A<<7 | 0x3F,
+ 23930 - 19968: jis0212<<14 | 0x1A<<7 | 0x40,
+ 23934 - 19968: jis0212<<14 | 0x1A<<7 | 0x41,
+ 23935 - 19968: jis0212<<14 | 0x1A<<7 | 0x42,
+ 23937 - 19968: jis0212<<14 | 0x1A<<7 | 0x43,
+ 23938 - 19968: jis0208<<14 | 0x35<<7 | 0x30,
+ 23939 - 19968: jis0212<<14 | 0x1A<<7 | 0x44,
+ 23940 - 19968: jis0208<<14 | 0x35<<7 | 0x2F,
+ 23943 - 19968: jis0208<<14 | 0x35<<7 | 0x2E,
+ 23944 - 19968: jis0212<<14 | 0x1A<<7 | 0x45,
+ 23946 - 19968: jis0212<<14 | 0x1A<<7 | 0x46,
+ 23947 - 19968: jis0208<<14 | 0x24<<7 | 0x47,
+ 23948 - 19968: jis0208<<14 | 0x35<<7 | 0x19,
+ 23952 - 19968: jis0208<<14 | 0x35<<7 | 0x36,
+ 23954 - 19968: jis0212<<14 | 0x1A<<7 | 0x47,
+ 23955 - 19968: jis0212<<14 | 0x1A<<7 | 0x48,
+ 23956 - 19968: jis0212<<14 | 0x1A<<7 | 0x49,
+ 23957 - 19968: jis0212<<14 | 0x1A<<7 | 0x4A,
+ 23961 - 19968: jis0212<<14 | 0x1A<<7 | 0x4B,
+ 23963 - 19968: jis0212<<14 | 0x1A<<7 | 0x4C,
+ 23965 - 19968: jis0208<<14 | 0x35<<7 | 0x32,
+ 23967 - 19968: jis0212<<14 | 0x1A<<7 | 0x4D,
+ 23968 - 19968: jis0212<<14 | 0x1A<<7 | 0x4E,
+ 23970 - 19968: jis0208<<14 | 0x35<<7 | 0x31,
+ 23975 - 19968: jis0212<<14 | 0x1A<<7 | 0x4F,
+ 23979 - 19968: jis0212<<14 | 0x1A<<7 | 0x50,
+ 23980 - 19968: jis0208<<14 | 0x35<<7 | 0x33,
+ 23982 - 19968: jis0208<<14 | 0x35<<7 | 0x34,
+ 23984 - 19968: jis0212<<14 | 0x1A<<7 | 0x51,
+ 23986 - 19968: jis0212<<14 | 0x45<<7 | 0x53,
+ 23988 - 19968: jis0212<<14 | 0x1A<<7 | 0x52,
+ 23991 - 19968: jis0208<<14 | 0x35<<7 | 0x37,
+ 23992 - 19968: jis0208<<14 | 0x58<<7 | 0x57,
+ 23993 - 19968: jis0208<<14 | 0x58<<7 | 0x58,
+ 23994 - 19968: jis0208<<14 | 0x2D<<7 | 0x45,
+ 23996 - 19968: jis0208<<14 | 0x35<<7 | 0x38,
+ 23997 - 19968: jis0208<<14 | 0x35<<7 | 0x35,
+ 24003 - 19968: jis0212<<14 | 0x1A<<7 | 0x55,
+ 24007 - 19968: jis0212<<14 | 0x1A<<7 | 0x56,
+ 24009 - 19968: jis0208<<14 | 0x35<<7 | 0x39,
+ 24011 - 19968: jis0212<<14 | 0x1A<<7 | 0x57,
+ 24012 - 19968: jis0208<<14 | 0x13<<7 | 0x3F,
+ 24013 - 19968: jis0208<<14 | 0x35<<7 | 0x3A,
+ 24014 - 19968: jis0212<<14 | 0x1A<<7 | 0x59,
+ 24016 - 19968: jis0208<<14 | 0x58<<7 | 0x59,
+ 24018 - 19968: jis0208<<14 | 0x35<<7 | 0x3C,
+ 24019 - 19968: jis0208<<14 | 0x35<<7 | 0x3B,
+ 24022 - 19968: jis0208<<14 | 0x35<<7 | 0x3D,
+ 24024 - 19968: jis0212<<14 | 0x1A<<7 | 0x5A,
+ 24025 - 19968: jis0212<<14 | 0x1A<<7 | 0x5B,
+ 24027 - 19968: jis0208<<14 | 0x35<<7 | 0x3E,
+ 24029 - 19968: jis0208<<14 | 0x1F<<7 | 0x4D,
+ 24030 - 19968: jis0208<<14 | 0x1C<<7 | 0x02,
+ 24032 - 19968: jis0212<<14 | 0x1A<<7 | 0x5C,
+ 24033 - 19968: jis0208<<14 | 0x1C<<7 | 0x43,
+ 24035 - 19968: jis0208<<14 | 0x20<<7 | 0x42,
+ 24036 - 19968: jis0212<<14 | 0x1A<<7 | 0x5D,
+ 24037 - 19968: jis0208<<14 | 0x18<<7 | 0x08,
+ 24038 - 19968: jis0208<<14 | 0x19<<7 | 0x17,
+ 24039 - 19968: jis0208<<14 | 0x18<<7 | 0x09,
+ 24040 - 19968: jis0208<<14 | 0x14<<7 | 0x4F,
+ 24041 - 19968: jis0212<<14 | 0x1B<<7 | 0x00,
+ 24043 - 19968: jis0208<<14 | 0x35<<7 | 0x3F,
+ 24046 - 19968: jis0208<<14 | 0x19<<7 | 0x18,
+ 24049 - 19968: jis0208<<14 | 0x17<<7 | 0x29,
+ 24050 - 19968: jis0208<<14 | 0x35<<7 | 0x40,
+ 24051 - 19968: jis0208<<14 | 0x2B<<7 | 0x05,
+ 24052 - 19968: jis0208<<14 | 0x26<<7 | 0x22,
+ 24053 - 19968: jis0208<<14 | 0x35<<7 | 0x41,
+ 24055 - 19968: jis0208<<14 | 0x18<<7 | 0x0A,
+ 24056 - 19968: jis0212<<14 | 0x1B<<7 | 0x01,
+ 24057 - 19968: jis0212<<14 | 0x1B<<7 | 0x02,
+ 24059 - 19968: jis0208<<14 | 0x13<<7 | 0x0B,
+ 24061 - 19968: jis0208<<14 | 0x22<<7 | 0x06,
+ 24062 - 19968: jis0208<<14 | 0x15<<7 | 0x31,
+ 24064 - 19968: jis0212<<14 | 0x1B<<7 | 0x03,
+ 24066 - 19968: jis0208<<14 | 0x1A<<7 | 0x33,
+ 24067 - 19968: jis0208<<14 | 0x28<<7 | 0x3A,
+ 24070 - 19968: jis0208<<14 | 0x27<<7 | 0x20,
+ 24071 - 19968: jis0212<<14 | 0x1B<<7 | 0x04,
+ 24075 - 19968: jis0208<<14 | 0x35<<7 | 0x42,
+ 24076 - 19968: jis0208<<14 | 0x13<<7 | 0x54,
+ 24077 - 19968: jis0212<<14 | 0x1B<<7 | 0x05,
+ 24081 - 19968: jis0208<<14 | 0x35<<7 | 0x45,
+ 24082 - 19968: jis0212<<14 | 0x1B<<7 | 0x06,
+ 24084 - 19968: jis0212<<14 | 0x1B<<7 | 0x07,
+ 24085 - 19968: jis0212<<14 | 0x1B<<7 | 0x08,
+ 24086 - 19968: jis0208<<14 | 0x23<<7 | 0x00,
+ 24088 - 19968: jis0212<<14 | 0x1B<<7 | 0x09,
+ 24089 - 19968: jis0208<<14 | 0x35<<7 | 0x44,
+ 24090 - 19968: jis0208<<14 | 0x35<<7 | 0x43,
+ 24091 - 19968: jis0208<<14 | 0x35<<7 | 0x46,
+ 24093 - 19968: jis0208<<14 | 0x23<<7 | 0x4A,
+ 24095 - 19968: jis0212<<14 | 0x1B<<7 | 0x0A,
+ 24096 - 19968: jis0212<<14 | 0x1B<<7 | 0x0B,
+ 24101 - 19968: jis0208<<14 | 0x1E<<7 | 0x42,
+ 24104 - 19968: jis0212<<14 | 0x1B<<7 | 0x0D,
+ 24107 - 19968: jis0208<<14 | 0x1A<<7 | 0x34,
+ 24109 - 19968: jis0208<<14 | 0x1F<<7 | 0x29,
+ 24110 - 19968: jis0212<<14 | 0x1B<<7 | 0x0C,
+ 24111 - 19968: jis0208<<14 | 0x21<<7 | 0x32,
+ 24112 - 19968: jis0208<<14 | 0x14<<7 | 0x01,
+ 24114 - 19968: jis0212<<14 | 0x1B<<7 | 0x0E,
+ 24115 - 19968: jis0208<<14 | 0x23<<7 | 0x01,
+ 24117 - 19968: jis0212<<14 | 0x1B<<7 | 0x0F,
+ 24118 - 19968: jis0208<<14 | 0x35<<7 | 0x47,
+ 24119 - 19968: jis0208<<14 | 0x35<<7 | 0x48,
+ 24120 - 19968: jis0208<<14 | 0x1D<<7 | 0x4E,
+ 24125 - 19968: jis0208<<14 | 0x2A<<7 | 0x18,
+ 24126 - 19968: jis0212<<14 | 0x1B<<7 | 0x10,
+ 24128 - 19968: jis0208<<14 | 0x35<<7 | 0x4B,
+ 24131 - 19968: jis0208<<14 | 0x35<<7 | 0x4A,
+ 24132 - 19968: jis0208<<14 | 0x35<<7 | 0x49,
+ 24133 - 19968: jis0208<<14 | 0x28<<7 | 0x5C,
+ 24135 - 19968: jis0208<<14 | 0x35<<7 | 0x52,
+ 24137 - 19968: jis0212<<14 | 0x1B<<7 | 0x13,
+ 24139 - 19968: jis0212<<14 | 0x1B<<7 | 0x11,
+ 24140 - 19968: jis0208<<14 | 0x2A<<7 | 0x39,
+ 24142 - 19968: jis0208<<14 | 0x35<<7 | 0x4C,
+ 24144 - 19968: jis0212<<14 | 0x1B<<7 | 0x12,
+ 24145 - 19968: jis0212<<14 | 0x1B<<7 | 0x14,
+ 24148 - 19968: jis0208<<14 | 0x35<<7 | 0x4E,
+ 24149 - 19968: jis0208<<14 | 0x2A<<7 | 0x4A,
+ 24150 - 19968: jis0212<<14 | 0x1B<<7 | 0x15,
+ 24151 - 19968: jis0208<<14 | 0x35<<7 | 0x4D,
+ 24152 - 19968: jis0212<<14 | 0x1B<<7 | 0x16,
+ 24155 - 19968: jis0212<<14 | 0x1B<<7 | 0x17,
+ 24156 - 19968: jis0212<<14 | 0x1B<<7 | 0x18,
+ 24158 - 19968: jis0212<<14 | 0x1B<<7 | 0x19,
+ 24159 - 19968: jis0208<<14 | 0x35<<7 | 0x4F,
+ 24161 - 19968: jis0208<<14 | 0x27<<7 | 0x07,
+ 24162 - 19968: jis0208<<14 | 0x35<<7 | 0x50,
+ 24163 - 19968: jis0208<<14 | 0x29<<7 | 0x1D,
+ 24164 - 19968: jis0208<<14 | 0x35<<7 | 0x51,
+ 24168 - 19968: jis0212<<14 | 0x1B<<7 | 0x1A,
+ 24170 - 19968: jis0212<<14 | 0x1B<<7 | 0x1B,
+ 24171 - 19968: jis0212<<14 | 0x1B<<7 | 0x1C,
+ 24172 - 19968: jis0212<<14 | 0x1B<<7 | 0x1D,
+ 24173 - 19968: jis0212<<14 | 0x1B<<7 | 0x1E,
+ 24174 - 19968: jis0212<<14 | 0x1B<<7 | 0x1F,
+ 24176 - 19968: jis0212<<14 | 0x1B<<7 | 0x20,
+ 24178 - 19968: jis0208<<14 | 0x13<<7 | 0x12,
+ 24179 - 19968: jis0208<<14 | 0x29<<7 | 0x1E,
+ 24180 - 19968: jis0208<<14 | 0x26<<7 | 0x0E,
+ 24181 - 19968: jis0208<<14 | 0x35<<7 | 0x53,
+ 24182 - 19968: jis0208<<14 | 0x35<<7 | 0x54,
+ 24184 - 19968: jis0208<<14 | 0x18<<7 | 0x0B,
+ 24185 - 19968: jis0208<<14 | 0x13<<7 | 0x13,
+ 24186 - 19968: jis0208<<14 | 0x35<<7 | 0x55,
+ 24187 - 19968: jis0208<<14 | 0x17<<7 | 0x17,
+ 24188 - 19968: jis0208<<14 | 0x2C<<7 | 0x23,
+ 24189 - 19968: jis0208<<14 | 0x2C<<7 | 0x08,
+ 24190 - 19968: jis0208<<14 | 0x13<<7 | 0x55,
+ 24191 - 19968: jis0208<<14 | 0x35<<7 | 0x57,
+ 24192 - 19968: jis0212<<14 | 0x1B<<7 | 0x21,
+ 24193 - 19968: jis0208<<14 | 0x23<<7 | 0x02,
+ 24195 - 19968: jis0208<<14 | 0x18<<7 | 0x0C,
+ 24196 - 19968: jis0208<<14 | 0x1D<<7 | 0x10,
+ 24199 - 19968: jis0208<<14 | 0x27<<7 | 0x3E,
+ 24202 - 19968: jis0208<<14 | 0x1D<<7 | 0x11,
+ 24203 - 19968: jis0212<<14 | 0x1B<<7 | 0x22,
+ 24206 - 19968: jis0212<<14 | 0x1B<<7 | 0x23,
+ 24207 - 19968: jis0208<<14 | 0x1C<<7 | 0x57,
+ 24213 - 19968: jis0208<<14 | 0x23<<7 | 0x4B,
+ 24214 - 19968: jis0208<<14 | 0x29<<7 | 0x58,
+ 24215 - 19968: jis0208<<14 | 0x24<<7 | 0x18,
+ 24218 - 19968: jis0208<<14 | 0x18<<7 | 0x0D,
+ 24220 - 19968: jis0208<<14 | 0x28<<7 | 0x3B,
+ 24224 - 19968: jis0208<<14 | 0x35<<7 | 0x58,
+ 24226 - 19968: jis0212<<14 | 0x1B<<7 | 0x24,
+ 24228 - 19968: jis0212<<14 | 0x1B<<7 | 0x25,
+ 24229 - 19968: jis0212<<14 | 0x1B<<7 | 0x26,
+ 24230 - 19968: jis0208<<14 | 0x24<<7 | 0x38,
+ 24231 - 19968: jis0208<<14 | 0x19<<7 | 0x21,
+ 24232 - 19968: jis0212<<14 | 0x1B<<7 | 0x27,
+ 24234 - 19968: jis0212<<14 | 0x1B<<7 | 0x28,
+ 24235 - 19968: jis0208<<14 | 0x17<<7 | 0x2A,
+ 24236 - 19968: jis0212<<14 | 0x1B<<7 | 0x29,
+ 24237 - 19968: jis0208<<14 | 0x23<<7 | 0x4C,
+ 24241 - 19968: jis0212<<14 | 0x1B<<7 | 0x2A,
+ 24243 - 19968: jis0212<<14 | 0x1B<<7 | 0x2B,
+ 24245 - 19968: jis0208<<14 | 0x0F<<7 | 0x22,
+ 24246 - 19968: jis0208<<14 | 0x1C<<7 | 0x4D,
+ 24247 - 19968: jis0208<<14 | 0x18<<7 | 0x0E,
+ 24248 - 19968: jis0208<<14 | 0x2C<<7 | 0x26,
+ 24253 - 19968: jis0212<<14 | 0x1B<<7 | 0x2C,
+ 24254 - 19968: jis0212<<14 | 0x1B<<7 | 0x2D,
+ 24255 - 19968: jis0212<<14 | 0x1B<<7 | 0x2E,
+ 24257 - 19968: jis0208<<14 | 0x35<<7 | 0x59,
+ 24258 - 19968: jis0208<<14 | 0x35<<7 | 0x5A,
+ 24259 - 19968: jis0208<<14 | 0x26<<7 | 0x30,
+ 24262 - 19968: jis0212<<14 | 0x1B<<7 | 0x2F,
+ 24264 - 19968: jis0208<<14 | 0x35<<7 | 0x5B,
+ 24265 - 19968: jis0208<<14 | 0x2D<<7 | 0x56,
+ 24266 - 19968: jis0208<<14 | 0x2E<<7 | 0x0C,
+ 24267 - 19968: jis0212<<14 | 0x1B<<7 | 0x31,
+ 24268 - 19968: jis0212<<14 | 0x1B<<7 | 0x30,
+ 24270 - 19968: jis0212<<14 | 0x1B<<7 | 0x32,
+ 24271 - 19968: jis0208<<14 | 0x35<<7 | 0x5D,
+ 24272 - 19968: jis0208<<14 | 0x35<<7 | 0x5C,
+ 24273 - 19968: jis0212<<14 | 0x1B<<7 | 0x33,
+ 24274 - 19968: jis0212<<14 | 0x1B<<7 | 0x34,
+ 24275 - 19968: jis0208<<14 | 0x12<<7 | 0x26,
+ 24276 - 19968: jis0212<<14 | 0x1B<<7 | 0x35,
+ 24277 - 19968: jis0212<<14 | 0x1B<<7 | 0x36,
+ 24278 - 19968: jis0208<<14 | 0x36<<7 | 0x00,
+ 24282 - 19968: jis0208<<14 | 0x36<<7 | 0x03,
+ 24283 - 19968: jis0208<<14 | 0x36<<7 | 0x04,
+ 24284 - 19968: jis0212<<14 | 0x1B<<7 | 0x37,
+ 24285 - 19968: jis0208<<14 | 0x36<<7 | 0x02,
+ 24286 - 19968: jis0212<<14 | 0x1B<<7 | 0x38,
+ 24287 - 19968: jis0208<<14 | 0x28<<7 | 0x1F,
+ 24288 - 19968: jis0208<<14 | 0x1D<<7 | 0x12,
+ 24289 - 19968: jis0208<<14 | 0x36<<7 | 0x06,
+ 24290 - 19968: jis0208<<14 | 0x36<<7 | 0x05,
+ 24291 - 19968: jis0208<<14 | 0x36<<7 | 0x01,
+ 24293 - 19968: jis0212<<14 | 0x1B<<7 | 0x39,
+ 24296 - 19968: jis0208<<14 | 0x36<<7 | 0x07,
+ 24297 - 19968: jis0208<<14 | 0x36<<7 | 0x08,
+ 24299 - 19968: jis0212<<14 | 0x1B<<7 | 0x3A,
+ 24300 - 19968: jis0208<<14 | 0x36<<7 | 0x09,
+ 24304 - 19968: jis0208<<14 | 0x36<<7 | 0x0C,
+ 24305 - 19968: jis0208<<14 | 0x36<<7 | 0x0A,
+ 24307 - 19968: jis0208<<14 | 0x36<<7 | 0x0B,
+ 24308 - 19968: jis0208<<14 | 0x36<<7 | 0x0D,
+ 24310 - 19968: jis0208<<14 | 0x10<<7 | 0x43,
+ 24311 - 19968: jis0208<<14 | 0x23<<7 | 0x4D,
+ 24312 - 19968: jis0208<<14 | 0x36<<7 | 0x0E,
+ 24314 - 19968: jis0208<<14 | 0x16<<7 | 0x59,
+ 24315 - 19968: jis0208<<14 | 0x11<<7 | 0x55,
+ 24316 - 19968: jis0208<<14 | 0x26<<7 | 0x15,
+ 24318 - 19968: jis0208<<14 | 0x36<<7 | 0x0F,
+ 24319 - 19968: jis0208<<14 | 0x25<<7 | 0x5A,
+ 24321 - 19968: jis0208<<14 | 0x29<<7 | 0x3A,
+ 24322 - 19968: jis0212<<14 | 0x1B<<7 | 0x3B,
+ 24323 - 19968: jis0208<<14 | 0x36<<7 | 0x10,
+ 24324 - 19968: jis0208<<14 | 0x2E<<7 | 0x0D,
+ 24326 - 19968: jis0212<<14 | 0x1B<<7 | 0x3C,
+ 24327 - 19968: jis0212<<14 | 0x1B<<7 | 0x3D,
+ 24328 - 19968: jis0212<<14 | 0x1B<<7 | 0x3E,
+ 24329 - 19968: jis0208<<14 | 0x36<<7 | 0x11,
+ 24330 - 19968: jis0208<<14 | 0x29<<7 | 0x1F,
+ 24331 - 19968: jis0208<<14 | 0x36<<7 | 0x14,
+ 24332 - 19968: jis0208<<14 | 0x2F<<7 | 0x00,
+ 24333 - 19968: jis0208<<14 | 0x2F<<7 | 0x10,
+ 24334 - 19968: jis0212<<14 | 0x1B<<7 | 0x3F,
+ 24335 - 19968: jis0208<<14 | 0x1B<<7 | 0x0F,
+ 24336 - 19968: jis0208<<14 | 0x25<<7 | 0x54,
+ 24337 - 19968: jis0208<<14 | 0x36<<7 | 0x15,
+ 24339 - 19968: jis0208<<14 | 0x14<<7 | 0x3C,
+ 24340 - 19968: jis0208<<14 | 0x23<<7 | 0x03,
+ 24341 - 19968: jis0208<<14 | 0x0F<<7 | 0x59,
+ 24342 - 19968: jis0208<<14 | 0x36<<7 | 0x16,
+ 24343 - 19968: jis0208<<14 | 0x29<<7 | 0x05,
+ 24344 - 19968: jis0208<<14 | 0x18<<7 | 0x0F,
+ 24345 - 19968: jis0212<<14 | 0x1B<<7 | 0x40,
+ 24347 - 19968: jis0208<<14 | 0x22<<7 | 0x2F,
+ 24348 - 19968: jis0212<<14 | 0x1B<<7 | 0x41,
+ 24349 - 19968: jis0212<<14 | 0x1B<<7 | 0x42,
+ 24351 - 19968: jis0208<<14 | 0x23<<7 | 0x4E,
+ 24353 - 19968: jis0208<<14 | 0x58<<7 | 0x5A,
+ 24354 - 19968: jis0212<<14 | 0x1B<<7 | 0x44,
+ 24355 - 19968: jis0212<<14 | 0x1B<<7 | 0x45,
+ 24356 - 19968: jis0212<<14 | 0x1B<<7 | 0x46,
+ 24357 - 19968: jis0208<<14 | 0x2B<<7 | 0x4E,
+ 24358 - 19968: jis0208<<14 | 0x17<<7 | 0x18,
+ 24359 - 19968: jis0208<<14 | 0x17<<7 | 0x2B,
+ 24360 - 19968: jis0212<<14 | 0x1B<<7 | 0x47,
+ 24361 - 19968: jis0208<<14 | 0x36<<7 | 0x17,
+ 24363 - 19968: jis0212<<14 | 0x1B<<7 | 0x48,
+ 24364 - 19968: jis0212<<14 | 0x1B<<7 | 0x49,
+ 24365 - 19968: jis0208<<14 | 0x36<<7 | 0x18,
+ 24366 - 19968: jis0212<<14 | 0x1B<<7 | 0x4A,
+ 24367 - 19968: jis0208<<14 | 0x36<<7 | 0x1E,
+ 24368 - 19968: jis0212<<14 | 0x1B<<7 | 0x4B,
+ 24369 - 19968: jis0208<<14 | 0x1B<<7 | 0x44,
+ 24372 - 19968: jis0208<<14 | 0x58<<7 | 0x5B,
+ 24373 - 19968: jis0208<<14 | 0x23<<7 | 0x04,
+ 24374 - 19968: jis0212<<14 | 0x1B<<7 | 0x4D,
+ 24375 - 19968: jis0208<<14 | 0x15<<7 | 0x0E,
+ 24376 - 19968: jis0208<<14 | 0x36<<7 | 0x19,
+ 24379 - 19968: jis0212<<14 | 0x1B<<7 | 0x4E,
+ 24380 - 19968: jis0208<<14 | 0x28<<7 | 0x0A,
+ 24381 - 19968: jis0212<<14 | 0x1B<<7 | 0x4F,
+ 24382 - 19968: jis0208<<14 | 0x22<<7 | 0x25,
+ 24383 - 19968: jis0212<<14 | 0x1B<<7 | 0x50,
+ 24384 - 19968: jis0212<<14 | 0x1B<<7 | 0x51,
+ 24385 - 19968: jis0208<<14 | 0x36<<7 | 0x1A,
+ 24388 - 19968: jis0212<<14 | 0x1B<<7 | 0x52,
+ 24389 - 19968: jis0208<<14 | 0x58<<7 | 0x0B,
+ 24391 - 19968: jis0212<<14 | 0x1B<<7 | 0x54,
+ 24392 - 19968: jis0208<<14 | 0x36<<7 | 0x1B,
+ 24394 - 19968: jis0208<<14 | 0x15<<7 | 0x0F,
+ 24396 - 19968: jis0208<<14 | 0x36<<7 | 0x1C,
+ 24397 - 19968: jis0212<<14 | 0x1B<<7 | 0x55,
+ 24398 - 19968: jis0208<<14 | 0x36<<7 | 0x1D,
+ 24400 - 19968: jis0212<<14 | 0x1B<<7 | 0x56,
+ 24401 - 19968: jis0208<<14 | 0x36<<7 | 0x1F,
+ 24403 - 19968: jis0208<<14 | 0x24<<7 | 0x55,
+ 24404 - 19968: jis0212<<14 | 0x1B<<7 | 0x57,
+ 24406 - 19968: jis0208<<14 | 0x36<<7 | 0x20,
+ 24407 - 19968: jis0208<<14 | 0x36<<7 | 0x21,
+ 24408 - 19968: jis0212<<14 | 0x1B<<7 | 0x58,
+ 24409 - 19968: jis0208<<14 | 0x36<<7 | 0x22,
+ 24411 - 19968: jis0212<<14 | 0x1B<<7 | 0x59,
+ 24412 - 19968: jis0208<<14 | 0x36<<7 | 0x13,
+ 24413 - 19968: jis0208<<14 | 0x36<<7 | 0x12,
+ 24416 - 19968: jis0212<<14 | 0x1B<<7 | 0x5A,
+ 24417 - 19968: jis0208<<14 | 0x36<<7 | 0x23,
+ 24418 - 19968: jis0208<<14 | 0x16<<7 | 0x20,
+ 24419 - 19968: jis0212<<14 | 0x1B<<7 | 0x5B,
+ 24420 - 19968: jis0212<<14 | 0x1B<<7 | 0x5C,
+ 24422 - 19968: jis0208<<14 | 0x28<<7 | 0x06,
+ 24423 - 19968: jis0208<<14 | 0x58<<7 | 0x5C,
+ 24425 - 19968: jis0208<<14 | 0x19<<7 | 0x2B,
+ 24426 - 19968: jis0208<<14 | 0x28<<7 | 0x16,
+ 24427 - 19968: jis0208<<14 | 0x23<<7 | 0x05,
+ 24428 - 19968: jis0208<<14 | 0x28<<7 | 0x2A,
+ 24429 - 19968: jis0208<<14 | 0x36<<7 | 0x24,
+ 24431 - 19968: jis0212<<14 | 0x1C<<7 | 0x00,
+ 24432 - 19968: jis0208<<14 | 0x1D<<7 | 0x13,
+ 24433 - 19968: jis0208<<14 | 0x10<<7 | 0x25,
+ 24434 - 19968: jis0212<<14 | 0x1C<<7 | 0x01,
+ 24435 - 19968: jis0208<<14 | 0x36<<7 | 0x25,
+ 24436 - 19968: jis0212<<14 | 0x1C<<7 | 0x02,
+ 24437 - 19968: jis0212<<14 | 0x1C<<7 | 0x03,
+ 24439 - 19968: jis0208<<14 | 0x36<<7 | 0x26,
+ 24440 - 19968: jis0212<<14 | 0x1C<<7 | 0x04,
+ 24441 - 19968: jis0208<<14 | 0x2B<<7 | 0x51,
+ 24442 - 19968: jis0212<<14 | 0x1C<<7 | 0x05,
+ 24444 - 19968: jis0208<<14 | 0x27<<7 | 0x3F,
+ 24445 - 19968: jis0212<<14 | 0x1C<<7 | 0x06,
+ 24446 - 19968: jis0212<<14 | 0x1C<<7 | 0x07,
+ 24447 - 19968: jis0208<<14 | 0x36<<7 | 0x29,
+ 24448 - 19968: jis0208<<14 | 0x10<<7 | 0x5C,
+ 24449 - 19968: jis0208<<14 | 0x1F<<7 | 0x0B,
+ 24450 - 19968: jis0208<<14 | 0x36<<7 | 0x28,
+ 24451 - 19968: jis0208<<14 | 0x36<<7 | 0x27,
+ 24452 - 19968: jis0208<<14 | 0x16<<7 | 0x21,
+ 24453 - 19968: jis0208<<14 | 0x21<<7 | 0x33,
+ 24455 - 19968: jis0208<<14 | 0x36<<7 | 0x2D,
+ 24456 - 19968: jis0208<<14 | 0x36<<7 | 0x2B,
+ 24457 - 19968: jis0212<<14 | 0x1C<<7 | 0x08,
+ 24458 - 19968: jis0208<<14 | 0x36<<7 | 0x2A,
+ 24459 - 19968: jis0208<<14 | 0x2D<<7 | 0x06,
+ 24460 - 19968: jis0208<<14 | 0x17<<7 | 0x44,
+ 24461 - 19968: jis0212<<14 | 0x1C<<7 | 0x09,
+ 24463 - 19968: jis0212<<14 | 0x1C<<7 | 0x0A,
+ 24464 - 19968: jis0208<<14 | 0x1C<<7 | 0x58,
+ 24465 - 19968: jis0208<<14 | 0x36<<7 | 0x2C,
+ 24466 - 19968: jis0208<<14 | 0x24<<7 | 0x2B,
+ 24467 - 19968: jis0208<<14 | 0x1C<<7 | 0x1D,
+ 24470 - 19968: jis0212<<14 | 0x1C<<7 | 0x0B,
+ 24471 - 19968: jis0208<<14 | 0x25<<7 | 0x1F,
+ 24472 - 19968: jis0208<<14 | 0x36<<7 | 0x30,
+ 24473 - 19968: jis0208<<14 | 0x36<<7 | 0x2F,
+ 24476 - 19968: jis0212<<14 | 0x1C<<7 | 0x0C,
+ 24477 - 19968: jis0212<<14 | 0x1C<<7 | 0x0D,
+ 24478 - 19968: jis0208<<14 | 0x36<<7 | 0x2E,
+ 24480 - 19968: jis0208<<14 | 0x36<<7 | 0x31,
+ 24481 - 19968: jis0208<<14 | 0x17<<7 | 0x45,
+ 24482 - 19968: jis0212<<14 | 0x1C<<7 | 0x0E,
+ 24484 - 19968: jis0212<<14 | 0x1C<<7 | 0x11,
+ 24487 - 19968: jis0212<<14 | 0x1C<<7 | 0x0F,
+ 24488 - 19968: jis0208<<14 | 0x36<<7 | 0x32,
+ 24489 - 19968: jis0208<<14 | 0x28<<7 | 0x5B,
+ 24490 - 19968: jis0208<<14 | 0x1C<<7 | 0x3A,
+ 24491 - 19968: jis0212<<14 | 0x1C<<7 | 0x10,
+ 24492 - 19968: jis0212<<14 | 0x1C<<7 | 0x12,
+ 24493 - 19968: jis0208<<14 | 0x36<<7 | 0x33,
+ 24494 - 19968: jis0208<<14 | 0x27<<7 | 0x58,
+ 24495 - 19968: jis0212<<14 | 0x1C<<7 | 0x13,
+ 24496 - 19968: jis0212<<14 | 0x1C<<7 | 0x14,
+ 24497 - 19968: jis0212<<14 | 0x1C<<7 | 0x15,
+ 24499 - 19968: jis0208<<14 | 0x25<<7 | 0x20,
+ 24500 - 19968: jis0208<<14 | 0x23<<7 | 0x06,
+ 24503 - 19968: jis0208<<14 | 0x58<<7 | 0x5D,
+ 24504 - 19968: jis0212<<14 | 0x1C<<7 | 0x16,
+ 24505 - 19968: jis0208<<14 | 0x24<<7 | 0x0F,
+ 24508 - 19968: jis0208<<14 | 0x36<<7 | 0x34,
+ 24509 - 19968: jis0208<<14 | 0x14<<7 | 0x0A,
+ 24515 - 19968: jis0208<<14 | 0x1E<<7 | 0x13,
+ 24516 - 19968: jis0212<<14 | 0x1C<<7 | 0x17,
+ 24517 - 19968: jis0208<<14 | 0x28<<7 | 0x0B,
+ 24519 - 19968: jis0212<<14 | 0x1C<<7 | 0x18,
+ 24520 - 19968: jis0212<<14 | 0x1C<<7 | 0x19,
+ 24521 - 19968: jis0212<<14 | 0x1C<<7 | 0x1A,
+ 24523 - 19968: jis0212<<14 | 0x1C<<7 | 0x1B,
+ 24524 - 19968: jis0208<<14 | 0x13<<7 | 0x56,
+ 24525 - 19968: jis0208<<14 | 0x26<<7 | 0x05,
+ 24528 - 19968: jis0212<<14 | 0x1C<<7 | 0x1C,
+ 24529 - 19968: jis0212<<14 | 0x1C<<7 | 0x1D,
+ 24530 - 19968: jis0212<<14 | 0x1C<<7 | 0x1E,
+ 24531 - 19968: jis0212<<14 | 0x1C<<7 | 0x1F,
+ 24532 - 19968: jis0212<<14 | 0x1C<<7 | 0x20,
+ 24534 - 19968: jis0208<<14 | 0x36<<7 | 0x35,
+ 24535 - 19968: jis0208<<14 | 0x1A<<7 | 0x35,
+ 24536 - 19968: jis0208<<14 | 0x2A<<7 | 0x19,
+ 24537 - 19968: jis0208<<14 | 0x2A<<7 | 0x1A,
+ 24540 - 19968: jis0208<<14 | 0x10<<7 | 0x5D,
+ 24541 - 19968: jis0208<<14 | 0x36<<7 | 0x3A,
+ 24542 - 19968: jis0208<<14 | 0x59<<7 | 0x00,
+ 24544 - 19968: jis0208<<14 | 0x22<<7 | 0x48,
+ 24545 - 19968: jis0212<<14 | 0x1C<<7 | 0x22,
+ 24546 - 19968: jis0212<<14 | 0x1C<<7 | 0x23,
+ 24548 - 19968: jis0208<<14 | 0x36<<7 | 0x37,
+ 24552 - 19968: jis0212<<14 | 0x1C<<7 | 0x24,
+ 24553 - 19968: jis0212<<14 | 0x1C<<7 | 0x25,
+ 24554 - 19968: jis0212<<14 | 0x1C<<7 | 0x26,
+ 24555 - 19968: jis0208<<14 | 0x11<<7 | 0x56,
+ 24556 - 19968: jis0212<<14 | 0x1C<<7 | 0x27,
+ 24557 - 19968: jis0212<<14 | 0x1C<<7 | 0x28,
+ 24558 - 19968: jis0212<<14 | 0x1C<<7 | 0x29,
+ 24559 - 19968: jis0212<<14 | 0x1C<<7 | 0x2A,
+ 24560 - 19968: jis0208<<14 | 0x37<<7 | 0x0C,
+ 24561 - 19968: jis0208<<14 | 0x36<<7 | 0x39,
+ 24562 - 19968: jis0212<<14 | 0x1C<<7 | 0x2B,
+ 24563 - 19968: jis0212<<14 | 0x1C<<7 | 0x2C,
+ 24565 - 19968: jis0208<<14 | 0x26<<7 | 0x0F,
+ 24566 - 19968: jis0212<<14 | 0x1C<<7 | 0x2D,
+ 24568 - 19968: jis0208<<14 | 0x36<<7 | 0x38,
+ 24570 - 19968: jis0212<<14 | 0x1C<<7 | 0x2E,
+ 24571 - 19968: jis0208<<14 | 0x36<<7 | 0x36,
+ 24572 - 19968: jis0212<<14 | 0x1C<<7 | 0x2F,
+ 24573 - 19968: jis0208<<14 | 0x18<<7 | 0x59,
+ 24575 - 19968: jis0208<<14 | 0x36<<7 | 0x3C,
+ 24583 - 19968: jis0212<<14 | 0x1C<<7 | 0x30,
+ 24586 - 19968: jis0212<<14 | 0x1C<<7 | 0x31,
+ 24589 - 19968: jis0212<<14 | 0x1C<<7 | 0x32,
+ 24590 - 19968: jis0208<<14 | 0x36<<7 | 0x42,
+ 24591 - 19968: jis0208<<14 | 0x36<<7 | 0x48,
+ 24592 - 19968: jis0208<<14 | 0x36<<7 | 0x40,
+ 24594 - 19968: jis0208<<14 | 0x24<<7 | 0x3B,
+ 24595 - 19968: jis0212<<14 | 0x1C<<7 | 0x33,
+ 24596 - 19968: jis0212<<14 | 0x1C<<7 | 0x34,
+ 24597 - 19968: jis0208<<14 | 0x36<<7 | 0x45,
+ 24598 - 19968: jis0208<<14 | 0x28<<7 | 0x3C,
+ 24599 - 19968: jis0212<<14 | 0x1C<<7 | 0x35,
+ 24600 - 19968: jis0212<<14 | 0x1C<<7 | 0x36,
+ 24601 - 19968: jis0208<<14 | 0x36<<7 | 0x3F,
+ 24602 - 19968: jis0212<<14 | 0x1C<<7 | 0x37,
+ 24603 - 19968: jis0208<<14 | 0x36<<7 | 0x44,
+ 24604 - 19968: jis0208<<14 | 0x2D<<7 | 0x46,
+ 24605 - 19968: jis0208<<14 | 0x1A<<7 | 0x36,
+ 24607 - 19968: jis0212<<14 | 0x1C<<7 | 0x38,
+ 24608 - 19968: jis0208<<14 | 0x21<<7 | 0x34,
+ 24609 - 19968: jis0208<<14 | 0x36<<7 | 0x3D,
+ 24612 - 19968: jis0212<<14 | 0x1C<<7 | 0x39,
+ 24613 - 19968: jis0208<<14 | 0x14<<7 | 0x3D,
+ 24614 - 19968: jis0208<<14 | 0x36<<7 | 0x47,
+ 24615 - 19968: jis0208<<14 | 0x1F<<7 | 0x0C,
+ 24616 - 19968: jis0208<<14 | 0x10<<7 | 0x44,
+ 24617 - 19968: jis0208<<14 | 0x36<<7 | 0x41,
+ 24618 - 19968: jis0208<<14 | 0x11<<7 | 0x57,
+ 24619 - 19968: jis0208<<14 | 0x36<<7 | 0x46,
+ 24621 - 19968: jis0212<<14 | 0x1C<<7 | 0x3A,
+ 24623 - 19968: jis0208<<14 | 0x15<<7 | 0x10,
+ 24625 - 19968: jis0208<<14 | 0x36<<7 | 0x43,
+ 24627 - 19968: jis0212<<14 | 0x1C<<7 | 0x3B,
+ 24629 - 19968: jis0212<<14 | 0x1C<<7 | 0x3C,
+ 24634 - 19968: jis0208<<14 | 0x36<<7 | 0x49,
+ 24640 - 19968: jis0212<<14 | 0x1C<<7 | 0x3D,
+ 24641 - 19968: jis0208<<14 | 0x36<<7 | 0x4B,
+ 24642 - 19968: jis0208<<14 | 0x36<<7 | 0x55,
+ 24643 - 19968: jis0208<<14 | 0x36<<7 | 0x53,
+ 24646 - 19968: jis0208<<14 | 0x36<<7 | 0x50,
+ 24647 - 19968: jis0212<<14 | 0x1C<<7 | 0x3E,
+ 24648 - 19968: jis0212<<14 | 0x1C<<7 | 0x3F,
+ 24649 - 19968: jis0212<<14 | 0x1C<<7 | 0x40,
+ 24650 - 19968: jis0208<<14 | 0x36<<7 | 0x4F,
+ 24651 - 19968: jis0208<<14 | 0x2D<<7 | 0x57,
+ 24652 - 19968: jis0212<<14 | 0x1C<<7 | 0x41,
+ 24653 - 19968: jis0208<<14 | 0x36<<7 | 0x51,
+ 24656 - 19968: jis0208<<14 | 0x15<<7 | 0x11,
+ 24657 - 19968: jis0212<<14 | 0x1C<<7 | 0x42,
+ 24658 - 19968: jis0208<<14 | 0x18<<7 | 0x10,
+ 24660 - 19968: jis0212<<14 | 0x1C<<7 | 0x43,
+ 24661 - 19968: jis0208<<14 | 0x1C<<7 | 0x59,
+ 24662 - 19968: jis0212<<14 | 0x1C<<7 | 0x44,
+ 24663 - 19968: jis0212<<14 | 0x1C<<7 | 0x45,
+ 24665 - 19968: jis0208<<14 | 0x36<<7 | 0x58,
+ 24666 - 19968: jis0208<<14 | 0x36<<7 | 0x4A,
+ 24669 - 19968: jis0208<<14 | 0x59<<7 | 0x01,
+ 24671 - 19968: jis0208<<14 | 0x36<<7 | 0x4E,
+ 24672 - 19968: jis0208<<14 | 0x36<<7 | 0x3E,
+ 24673 - 19968: jis0212<<14 | 0x1C<<7 | 0x47,
+ 24674 - 19968: jis0208<<14 | 0x11<<7 | 0x59,
+ 24675 - 19968: jis0208<<14 | 0x36<<7 | 0x52,
+ 24676 - 19968: jis0208<<14 | 0x36<<7 | 0x54,
+ 24677 - 19968: jis0208<<14 | 0x22<<7 | 0x30,
+ 24679 - 19968: jis0212<<14 | 0x1C<<7 | 0x48,
+ 24680 - 19968: jis0208<<14 | 0x19<<7 | 0x07,
+ 24681 - 19968: jis0208<<14 | 0x11<<7 | 0x17,
+ 24682 - 19968: jis0208<<14 | 0x36<<7 | 0x4C,
+ 24683 - 19968: jis0208<<14 | 0x36<<7 | 0x57,
+ 24684 - 19968: jis0208<<14 | 0x36<<7 | 0x56,
+ 24685 - 19968: jis0208<<14 | 0x15<<7 | 0x12,
+ 24687 - 19968: jis0208<<14 | 0x21<<7 | 0x08,
+ 24688 - 19968: jis0208<<14 | 0x12<<7 | 0x45,
+ 24689 - 19968: jis0212<<14 | 0x1C<<7 | 0x49,
+ 24693 - 19968: jis0208<<14 | 0x16<<7 | 0x22,
+ 24695 - 19968: jis0208<<14 | 0x36<<7 | 0x4D,
+ 24702 - 19968: jis0212<<14 | 0x1C<<7 | 0x4A,
+ 24703 - 19968: jis0212<<14 | 0x1C<<7 | 0x4B,
+ 24705 - 19968: jis0208<<14 | 0x36<<7 | 0x59,
+ 24706 - 19968: jis0212<<14 | 0x1C<<7 | 0x4C,
+ 24707 - 19968: jis0208<<14 | 0x36<<7 | 0x5C,
+ 24708 - 19968: jis0208<<14 | 0x37<<7 | 0x00,
+ 24709 - 19968: jis0208<<14 | 0x59<<7 | 0x02,
+ 24710 - 19968: jis0212<<14 | 0x1C<<7 | 0x4D,
+ 24712 - 19968: jis0212<<14 | 0x1C<<7 | 0x4E,
+ 24713 - 19968: jis0208<<14 | 0x1B<<7 | 0x1C,
+ 24714 - 19968: jis0208<<14 | 0x59<<7 | 0x03,
+ 24715 - 19968: jis0208<<14 | 0x37<<7 | 0x06,
+ 24716 - 19968: jis0208<<14 | 0x23<<7 | 0x4F,
+ 24717 - 19968: jis0208<<14 | 0x36<<7 | 0x5A,
+ 24718 - 19968: jis0212<<14 | 0x1C<<7 | 0x50,
+ 24721 - 19968: jis0212<<14 | 0x1C<<7 | 0x51,
+ 24722 - 19968: jis0208<<14 | 0x37<<7 | 0x04,
+ 24723 - 19968: jis0212<<14 | 0x1C<<7 | 0x52,
+ 24724 - 19968: jis0208<<14 | 0x11<<7 | 0x58,
+ 24725 - 19968: jis0212<<14 | 0x1C<<7 | 0x53,
+ 24726 - 19968: jis0208<<14 | 0x37<<7 | 0x02,
+ 24727 - 19968: jis0208<<14 | 0x37<<7 | 0x03,
+ 24728 - 19968: jis0212<<14 | 0x1C<<7 | 0x54,
+ 24730 - 19968: jis0208<<14 | 0x36<<7 | 0x5D,
+ 24731 - 19968: jis0208<<14 | 0x37<<7 | 0x01,
+ 24733 - 19968: jis0212<<14 | 0x1C<<7 | 0x55,
+ 24734 - 19968: jis0212<<14 | 0x1C<<7 | 0x56,
+ 24735 - 19968: jis0208<<14 | 0x17<<7 | 0x46,
+ 24736 - 19968: jis0208<<14 | 0x2C<<7 | 0x09,
+ 24738 - 19968: jis0212<<14 | 0x1C<<7 | 0x57,
+ 24739 - 19968: jis0208<<14 | 0x13<<7 | 0x14,
+ 24740 - 19968: jis0212<<14 | 0x1C<<7 | 0x58,
+ 24741 - 19968: jis0212<<14 | 0x1C<<7 | 0x59,
+ 24742 - 19968: jis0208<<14 | 0x10<<7 | 0x38,
+ 24743 - 19968: jis0208<<14 | 0x37<<7 | 0x05,
+ 24744 - 19968: jis0212<<14 | 0x1C<<7 | 0x5A,
+ 24745 - 19968: jis0208<<14 | 0x26<<7 | 0x19,
+ 24746 - 19968: jis0208<<14 | 0x0F<<7 | 0x0C,
+ 24752 - 19968: jis0212<<14 | 0x1C<<7 | 0x5B,
+ 24753 - 19968: jis0212<<14 | 0x1C<<7 | 0x5C,
+ 24754 - 19968: jis0208<<14 | 0x27<<7 | 0x40,
+ 24755 - 19968: jis0208<<14 | 0x36<<7 | 0x3B,
+ 24756 - 19968: jis0208<<14 | 0x37<<7 | 0x0B,
+ 24757 - 19968: jis0208<<14 | 0x37<<7 | 0x0F,
+ 24758 - 19968: jis0208<<14 | 0x2B<<7 | 0x44,
+ 24759 - 19968: jis0212<<14 | 0x1C<<7 | 0x5D,
+ 24760 - 19968: jis0208<<14 | 0x37<<7 | 0x08,
+ 24763 - 19968: jis0212<<14 | 0x1D<<7 | 0x00,
+ 24764 - 19968: jis0208<<14 | 0x24<<7 | 0x48,
+ 24765 - 19968: jis0208<<14 | 0x37<<7 | 0x0D,
+ 24766 - 19968: jis0212<<14 | 0x1D<<7 | 0x01,
+ 24770 - 19968: jis0212<<14 | 0x1D<<7 | 0x02,
+ 24772 - 19968: jis0212<<14 | 0x1D<<7 | 0x03,
+ 24773 - 19968: jis0208<<14 | 0x1D<<7 | 0x4F,
+ 24774 - 19968: jis0208<<14 | 0x37<<7 | 0x0E,
+ 24775 - 19968: jis0208<<14 | 0x25<<7 | 0x36,
+ 24776 - 19968: jis0212<<14 | 0x1D<<7 | 0x04,
+ 24777 - 19968: jis0212<<14 | 0x1D<<7 | 0x05,
+ 24778 - 19968: jis0212<<14 | 0x1D<<7 | 0x06,
+ 24779 - 19968: jis0212<<14 | 0x1D<<7 | 0x07,
+ 24782 - 19968: jis0212<<14 | 0x1D<<7 | 0x08,
+ 24783 - 19968: jis0212<<14 | 0x1D<<7 | 0x09,
+ 24785 - 19968: jis0208<<14 | 0x2E<<7 | 0x26,
+ 24787 - 19968: jis0208<<14 | 0x37<<7 | 0x0A,
+ 24788 - 19968: jis0212<<14 | 0x1D<<7 | 0x0A,
+ 24789 - 19968: jis0208<<14 | 0x59<<7 | 0x05,
+ 24792 - 19968: jis0208<<14 | 0x37<<7 | 0x10,
+ 24793 - 19968: jis0212<<14 | 0x1D<<7 | 0x0C,
+ 24794 - 19968: jis0208<<14 | 0x18<<7 | 0x5A,
+ 24795 - 19968: jis0212<<14 | 0x1D<<7 | 0x0D,
+ 24796 - 19968: jis0208<<14 | 0x1F<<7 | 0x2A,
+ 24797 - 19968: jis0212<<14 | 0x1D<<7 | 0x0E,
+ 24798 - 19968: jis0208<<14 | 0x59<<7 | 0x04,
+ 24799 - 19968: jis0208<<14 | 0x0F<<7 | 0x33,
+ 24800 - 19968: jis0208<<14 | 0x37<<7 | 0x09,
+ 24801 - 19968: jis0208<<14 | 0x37<<7 | 0x07,
+ 24802 - 19968: jis0212<<14 | 0x1D<<7 | 0x10,
+ 24803 - 19968: jis0208<<14 | 0x20<<7 | 0x39,
+ 24805 - 19968: jis0212<<14 | 0x1D<<7 | 0x11,
+ 24807 - 19968: jis0208<<14 | 0x36<<7 | 0x5B,
+ 24808 - 19968: jis0208<<14 | 0x1A<<7 | 0x13,
+ 24816 - 19968: jis0208<<14 | 0x21<<7 | 0x25,
+ 24817 - 19968: jis0208<<14 | 0x37<<7 | 0x1C,
+ 24818 - 19968: jis0208<<14 | 0x59<<7 | 0x07,
+ 24819 - 19968: jis0208<<14 | 0x20<<7 | 0x3A,
+ 24820 - 19968: jis0208<<14 | 0x37<<7 | 0x17,
+ 24821 - 19968: jis0212<<14 | 0x1D<<7 | 0x13,
+ 24822 - 19968: jis0208<<14 | 0x37<<7 | 0x14,
+ 24823 - 19968: jis0208<<14 | 0x37<<7 | 0x15,
+ 24824 - 19968: jis0212<<14 | 0x1D<<7 | 0x14,
+ 24825 - 19968: jis0208<<14 | 0x1B<<7 | 0x45,
+ 24826 - 19968: jis0208<<14 | 0x37<<7 | 0x18,
+ 24827 - 19968: jis0208<<14 | 0x37<<7 | 0x1B,
+ 24828 - 19968: jis0212<<14 | 0x1D<<7 | 0x15,
+ 24829 - 19968: jis0212<<14 | 0x1D<<7 | 0x16,
+ 24832 - 19968: jis0208<<14 | 0x37<<7 | 0x16,
+ 24833 - 19968: jis0208<<14 | 0x1C<<7 | 0x04,
+ 24834 - 19968: jis0212<<14 | 0x1D<<7 | 0x17,
+ 24835 - 19968: jis0208<<14 | 0x37<<7 | 0x19,
+ 24838 - 19968: jis0208<<14 | 0x37<<7 | 0x13,
+ 24839 - 19968: jis0212<<14 | 0x1D<<7 | 0x18,
+ 24840 - 19968: jis0208<<14 | 0x2B<<7 | 0x5B,
+ 24841 - 19968: jis0208<<14 | 0x2B<<7 | 0x5A,
+ 24842 - 19968: jis0212<<14 | 0x1D<<7 | 0x19,
+ 24844 - 19968: jis0212<<14 | 0x1D<<7 | 0x1A,
+ 24845 - 19968: jis0208<<14 | 0x37<<7 | 0x1D,
+ 24846 - 19968: jis0208<<14 | 0x37<<7 | 0x1E,
+ 24847 - 19968: jis0208<<14 | 0x0F<<7 | 0x34,
+ 24848 - 19968: jis0212<<14 | 0x1D<<7 | 0x1B,
+ 24849 - 19968: jis0208<<14 | 0x59<<7 | 0x08,
+ 24850 - 19968: jis0212<<14 | 0x1D<<7 | 0x1D,
+ 24851 - 19968: jis0212<<14 | 0x1D<<7 | 0x1E,
+ 24852 - 19968: jis0212<<14 | 0x1D<<7 | 0x1F,
+ 24853 - 19968: jis0208<<14 | 0x37<<7 | 0x12,
+ 24854 - 19968: jis0212<<14 | 0x1D<<7 | 0x20,
+ 24855 - 19968: jis0212<<14 | 0x1D<<7 | 0x21,
+ 24857 - 19968: jis0212<<14 | 0x1D<<7 | 0x22,
+ 24858 - 19968: jis0208<<14 | 0x15<<7 | 0x51,
+ 24859 - 19968: jis0208<<14 | 0x0F<<7 | 0x05,
+ 24860 - 19968: jis0212<<14 | 0x1D<<7 | 0x23,
+ 24862 - 19968: jis0212<<14 | 0x1D<<7 | 0x24,
+ 24863 - 19968: jis0208<<14 | 0x13<<7 | 0x15,
+ 24864 - 19968: jis0208<<14 | 0x59<<7 | 0x06,
+ 24865 - 19968: jis0208<<14 | 0x37<<7 | 0x1A,
+ 24866 - 19968: jis0212<<14 | 0x1D<<7 | 0x25,
+ 24871 - 19968: jis0208<<14 | 0x37<<7 | 0x22,
+ 24872 - 19968: jis0208<<14 | 0x37<<7 | 0x21,
+ 24874 - 19968: jis0212<<14 | 0x1D<<7 | 0x26,
+ 24875 - 19968: jis0212<<14 | 0x1D<<7 | 0x27,
+ 24876 - 19968: jis0208<<14 | 0x37<<7 | 0x26,
+ 24880 - 19968: jis0208<<14 | 0x59<<7 | 0x0A,
+ 24881 - 19968: jis0212<<14 | 0x1D<<7 | 0x29,
+ 24884 - 19968: jis0208<<14 | 0x37<<7 | 0x27,
+ 24885 - 19968: jis0212<<14 | 0x1D<<7 | 0x2A,
+ 24886 - 19968: jis0212<<14 | 0x1D<<7 | 0x2B,
+ 24887 - 19968: jis0208<<14 | 0x59<<7 | 0x09,
+ 24889 - 19968: jis0212<<14 | 0x1D<<7 | 0x2D,
+ 24892 - 19968: jis0208<<14 | 0x37<<7 | 0x25,
+ 24893 - 19968: jis0208<<14 | 0x37<<7 | 0x28,
+ 24894 - 19968: jis0208<<14 | 0x37<<7 | 0x20,
+ 24895 - 19968: jis0208<<14 | 0x37<<7 | 0x24,
+ 24897 - 19968: jis0212<<14 | 0x1D<<7 | 0x2E,
+ 24898 - 19968: jis0208<<14 | 0x37<<7 | 0x29,
+ 24900 - 19968: jis0208<<14 | 0x37<<7 | 0x2A,
+ 24901 - 19968: jis0212<<14 | 0x1D<<7 | 0x2F,
+ 24902 - 19968: jis0212<<14 | 0x1D<<7 | 0x30,
+ 24903 - 19968: jis0208<<14 | 0x37<<7 | 0x1F,
+ 24904 - 19968: jis0208<<14 | 0x1A<<7 | 0x5B,
+ 24905 - 19968: jis0212<<14 | 0x1D<<7 | 0x31,
+ 24906 - 19968: jis0208<<14 | 0x37<<7 | 0x23,
+ 24907 - 19968: jis0208<<14 | 0x21<<7 | 0x35,
+ 24908 - 19968: jis0208<<14 | 0x18<<7 | 0x11,
+ 24909 - 19968: jis0208<<14 | 0x37<<7 | 0x11,
+ 24910 - 19968: jis0208<<14 | 0x1E<<7 | 0x14,
+ 24915 - 19968: jis0208<<14 | 0x37<<7 | 0x37,
+ 24917 - 19968: jis0208<<14 | 0x29<<7 | 0x48,
+ 24920 - 19968: jis0208<<14 | 0x37<<7 | 0x2D,
+ 24921 - 19968: jis0208<<14 | 0x37<<7 | 0x2E,
+ 24922 - 19968: jis0208<<14 | 0x37<<7 | 0x2F,
+ 24925 - 19968: jis0208<<14 | 0x37<<7 | 0x36,
+ 24926 - 19968: jis0212<<14 | 0x1D<<7 | 0x32,
+ 24927 - 19968: jis0208<<14 | 0x37<<7 | 0x35,
+ 24928 - 19968: jis0212<<14 | 0x1D<<7 | 0x33,
+ 24930 - 19968: jis0208<<14 | 0x2A<<7 | 0x5C,
+ 24931 - 19968: jis0208<<14 | 0x13<<7 | 0x16,
+ 24933 - 19968: jis0208<<14 | 0x37<<7 | 0x33,
+ 24935 - 19968: jis0208<<14 | 0x16<<7 | 0x24,
+ 24936 - 19968: jis0208<<14 | 0x12<<7 | 0x13,
+ 24939 - 19968: jis0208<<14 | 0x37<<7 | 0x30,
+ 24940 - 19968: jis0212<<14 | 0x1D<<7 | 0x34,
+ 24942 - 19968: jis0208<<14 | 0x2D<<7 | 0x17,
+ 24943 - 19968: jis0208<<14 | 0x37<<7 | 0x32,
+ 24944 - 19968: jis0208<<14 | 0x0F<<7 | 0x35,
+ 24945 - 19968: jis0208<<14 | 0x37<<7 | 0x34,
+ 24946 - 19968: jis0212<<14 | 0x1D<<7 | 0x35,
+ 24947 - 19968: jis0208<<14 | 0x37<<7 | 0x2B,
+ 24948 - 19968: jis0208<<14 | 0x37<<7 | 0x31,
+ 24949 - 19968: jis0208<<14 | 0x37<<7 | 0x38,
+ 24950 - 19968: jis0208<<14 | 0x16<<7 | 0x23,
+ 24951 - 19968: jis0208<<14 | 0x37<<7 | 0x2C,
+ 24952 - 19968: jis0212<<14 | 0x1D<<7 | 0x36,
+ 24955 - 19968: jis0212<<14 | 0x1D<<7 | 0x37,
+ 24956 - 19968: jis0212<<14 | 0x1D<<7 | 0x38,
+ 24958 - 19968: jis0208<<14 | 0x2C<<7 | 0x3C,
+ 24959 - 19968: jis0212<<14 | 0x1D<<7 | 0x39,
+ 24960 - 19968: jis0212<<14 | 0x1D<<7 | 0x3A,
+ 24961 - 19968: jis0212<<14 | 0x1D<<7 | 0x3B,
+ 24962 - 19968: jis0208<<14 | 0x2C<<7 | 0x0A,
+ 24963 - 19968: jis0212<<14 | 0x1D<<7 | 0x3C,
+ 24964 - 19968: jis0212<<14 | 0x1D<<7 | 0x3D,
+ 24967 - 19968: jis0208<<14 | 0x37<<7 | 0x3B,
+ 24970 - 19968: jis0208<<14 | 0x37<<7 | 0x3F,
+ 24971 - 19968: jis0212<<14 | 0x1D<<7 | 0x3E,
+ 24973 - 19968: jis0212<<14 | 0x1D<<7 | 0x3F,
+ 24974 - 19968: jis0208<<14 | 0x20<<7 | 0x5D,
+ 24976 - 19968: jis0208<<14 | 0x2D<<7 | 0x58,
+ 24977 - 19968: jis0208<<14 | 0x37<<7 | 0x40,
+ 24978 - 19968: jis0212<<14 | 0x1D<<7 | 0x40,
+ 24979 - 19968: jis0212<<14 | 0x1D<<7 | 0x41,
+ 24980 - 19968: jis0208<<14 | 0x37<<7 | 0x3D,
+ 24982 - 19968: jis0208<<14 | 0x37<<7 | 0x3A,
+ 24983 - 19968: jis0212<<14 | 0x1D<<7 | 0x42,
+ 24984 - 19968: jis0208<<14 | 0x59<<7 | 0x0B,
+ 24985 - 19968: jis0208<<14 | 0x37<<7 | 0x39,
+ 24986 - 19968: jis0208<<14 | 0x37<<7 | 0x3E,
+ 24988 - 19968: jis0212<<14 | 0x1D<<7 | 0x44,
+ 24989 - 19968: jis0212<<14 | 0x1D<<7 | 0x45,
+ 24991 - 19968: jis0212<<14 | 0x1D<<7 | 0x46,
+ 24992 - 19968: jis0212<<14 | 0x1D<<7 | 0x47,
+ 24996 - 19968: jis0208<<14 | 0x29<<7 | 0x0F,
+ 24997 - 19968: jis0212<<14 | 0x1D<<7 | 0x48,
+ 24999 - 19968: jis0208<<14 | 0x25<<7 | 0x13,
+ 25000 - 19968: jis0212<<14 | 0x1D<<7 | 0x49,
+ 25001 - 19968: jis0208<<14 | 0x16<<7 | 0x25,
+ 25002 - 19968: jis0212<<14 | 0x1D<<7 | 0x4A,
+ 25003 - 19968: jis0208<<14 | 0x37<<7 | 0x41,
+ 25004 - 19968: jis0208<<14 | 0x37<<7 | 0x3C,
+ 25005 - 19968: jis0212<<14 | 0x1D<<7 | 0x4B,
+ 25006 - 19968: jis0208<<14 | 0x37<<7 | 0x42,
+ 25010 - 19968: jis0208<<14 | 0x16<<7 | 0x5A,
+ 25014 - 19968: jis0208<<14 | 0x11<<7 | 0x10,
+ 25016 - 19968: jis0212<<14 | 0x1D<<7 | 0x4C,
+ 25017 - 19968: jis0212<<14 | 0x1D<<7 | 0x4D,
+ 25018 - 19968: jis0208<<14 | 0x37<<7 | 0x4A,
+ 25020 - 19968: jis0212<<14 | 0x1D<<7 | 0x4E,
+ 25022 - 19968: jis0208<<14 | 0x13<<7 | 0x17,
+ 25024 - 19968: jis0212<<14 | 0x1D<<7 | 0x4F,
+ 25025 - 19968: jis0212<<14 | 0x1D<<7 | 0x50,
+ 25026 - 19968: jis0212<<14 | 0x1D<<7 | 0x51,
+ 25027 - 19968: jis0208<<14 | 0x37<<7 | 0x48,
+ 25030 - 19968: jis0208<<14 | 0x37<<7 | 0x49,
+ 25031 - 19968: jis0208<<14 | 0x19<<7 | 0x08,
+ 25032 - 19968: jis0208<<14 | 0x37<<7 | 0x47,
+ 25033 - 19968: jis0208<<14 | 0x37<<7 | 0x45,
+ 25034 - 19968: jis0208<<14 | 0x37<<7 | 0x44,
+ 25035 - 19968: jis0208<<14 | 0x37<<7 | 0x4B,
+ 25036 - 19968: jis0208<<14 | 0x37<<7 | 0x43,
+ 25037 - 19968: jis0208<<14 | 0x37<<7 | 0x4D,
+ 25038 - 19968: jis0212<<14 | 0x1D<<7 | 0x52,
+ 25039 - 19968: jis0212<<14 | 0x1D<<7 | 0x53,
+ 25040 - 19968: jis0208<<14 | 0x11<<7 | 0x5A,
+ 25045 - 19968: jis0212<<14 | 0x1D<<7 | 0x54,
+ 25052 - 19968: jis0212<<14 | 0x1D<<7 | 0x55,
+ 25053 - 19968: jis0212<<14 | 0x1D<<7 | 0x56,
+ 25054 - 19968: jis0212<<14 | 0x1D<<7 | 0x57,
+ 25055 - 19968: jis0212<<14 | 0x1D<<7 | 0x58,
+ 25057 - 19968: jis0212<<14 | 0x1D<<7 | 0x59,
+ 25058 - 19968: jis0212<<14 | 0x1D<<7 | 0x5A,
+ 25059 - 19968: jis0208<<14 | 0x37<<7 | 0x4F,
+ 25061 - 19968: jis0212<<14 | 0x1D<<7 | 0x5D,
+ 25062 - 19968: jis0208<<14 | 0x37<<7 | 0x4E,
+ 25063 - 19968: jis0212<<14 | 0x1D<<7 | 0x5B,
+ 25065 - 19968: jis0212<<14 | 0x1D<<7 | 0x5C,
+ 25068 - 19968: jis0212<<14 | 0x1E<<7 | 0x00,
+ 25069 - 19968: jis0212<<14 | 0x1E<<7 | 0x01,
+ 25071 - 19968: jis0212<<14 | 0x1E<<7 | 0x02,
+ 25074 - 19968: jis0208<<14 | 0x23<<7 | 0x07,
+ 25076 - 19968: jis0208<<14 | 0x37<<7 | 0x52,
+ 25078 - 19968: jis0208<<14 | 0x37<<7 | 0x50,
+ 25079 - 19968: jis0208<<14 | 0x37<<7 | 0x46,
+ 25080 - 19968: jis0208<<14 | 0x16<<7 | 0x5B,
+ 25082 - 19968: jis0208<<14 | 0x37<<7 | 0x51,
+ 25084 - 19968: jis0208<<14 | 0x37<<7 | 0x55,
+ 25085 - 19968: jis0208<<14 | 0x37<<7 | 0x54,
+ 25086 - 19968: jis0208<<14 | 0x37<<7 | 0x56,
+ 25087 - 19968: jis0208<<14 | 0x37<<7 | 0x53,
+ 25088 - 19968: jis0208<<14 | 0x37<<7 | 0x57,
+ 25089 - 19968: jis0212<<14 | 0x1E<<7 | 0x03,
+ 25091 - 19968: jis0212<<14 | 0x1E<<7 | 0x04,
+ 25092 - 19968: jis0212<<14 | 0x1E<<7 | 0x05,
+ 25095 - 19968: jis0212<<14 | 0x1E<<7 | 0x06,
+ 25096 - 19968: jis0208<<14 | 0x37<<7 | 0x58,
+ 25097 - 19968: jis0208<<14 | 0x37<<7 | 0x59,
+ 25098 - 19968: jis0208<<14 | 0x29<<7 | 0x49,
+ 25100 - 19968: jis0208<<14 | 0x37<<7 | 0x5B,
+ 25101 - 19968: jis0208<<14 | 0x37<<7 | 0x5A,
+ 25102 - 19968: jis0208<<14 | 0x1C<<7 | 0x1E,
+ 25104 - 19968: jis0208<<14 | 0x1F<<7 | 0x0D,
+ 25105 - 19968: jis0208<<14 | 0x11<<7 | 0x45,
+ 25106 - 19968: jis0208<<14 | 0x11<<7 | 0x5B,
+ 25107 - 19968: jis0208<<14 | 0x59<<7 | 0x0C,
+ 25108 - 19968: jis0208<<14 | 0x37<<7 | 0x5C,
+ 25109 - 19968: jis0212<<14 | 0x1E<<7 | 0x08,
+ 25110 - 19968: jis0208<<14 | 0x0F<<7 | 0x1E,
+ 25114 - 19968: jis0208<<14 | 0x1F<<7 | 0x2B,
+ 25115 - 19968: jis0208<<14 | 0x37<<7 | 0x5D,
+ 25116 - 19968: jis0212<<14 | 0x1E<<7 | 0x09,
+ 25117 - 19968: jis0208<<14 | 0x4B<<7 | 0x22,
+ 25118 - 19968: jis0208<<14 | 0x38<<7 | 0x00,
+ 25119 - 19968: jis0208<<14 | 0x16<<7 | 0x40,
+ 25120 - 19968: jis0212<<14 | 0x1E<<7 | 0x0A,
+ 25121 - 19968: jis0208<<14 | 0x38<<7 | 0x01,
+ 25122 - 19968: jis0212<<14 | 0x1E<<7 | 0x0B,
+ 25123 - 19968: jis0212<<14 | 0x1E<<7 | 0x0C,
+ 25126 - 19968: jis0208<<14 | 0x1F<<7 | 0x4E,
+ 25127 - 19968: jis0212<<14 | 0x1E<<7 | 0x0D,
+ 25129 - 19968: jis0212<<14 | 0x1E<<7 | 0x0E,
+ 25130 - 19968: jis0208<<14 | 0x38<<7 | 0x02,
+ 25131 - 19968: jis0212<<14 | 0x1E<<7 | 0x0F,
+ 25134 - 19968: jis0208<<14 | 0x38<<7 | 0x03,
+ 25135 - 19968: jis0208<<14 | 0x14<<7 | 0x19,
+ 25136 - 19968: jis0208<<14 | 0x38<<7 | 0x04,
+ 25138 - 19968: jis0208<<14 | 0x38<<7 | 0x05,
+ 25139 - 19968: jis0208<<14 | 0x38<<7 | 0x06,
+ 25140 - 19968: jis0208<<14 | 0x21<<7 | 0x36,
+ 25144 - 19968: jis0208<<14 | 0x17<<7 | 0x2C,
+ 25145 - 19968: jis0212<<14 | 0x1E<<7 | 0x10,
+ 25147 - 19968: jis0208<<14 | 0x2B<<7 | 0x40,
+ 25149 - 19968: jis0212<<14 | 0x1E<<7 | 0x11,
+ 25151 - 19968: jis0208<<14 | 0x2A<<7 | 0x1B,
+ 25152 - 19968: jis0208<<14 | 0x1C<<7 | 0x49,
+ 25153 - 19968: jis0208<<14 | 0x38<<7 | 0x07,
+ 25154 - 19968: jis0212<<14 | 0x1E<<7 | 0x12,
+ 25155 - 19968: jis0212<<14 | 0x1E<<7 | 0x13,
+ 25156 - 19968: jis0212<<14 | 0x1E<<7 | 0x14,
+ 25158 - 19968: jis0212<<14 | 0x1E<<7 | 0x15,
+ 25159 - 19968: jis0208<<14 | 0x1F<<7 | 0x4F,
+ 25160 - 19968: jis0208<<14 | 0x4D<<7 | 0x1C,
+ 25161 - 19968: jis0208<<14 | 0x27<<7 | 0x41,
+ 25163 - 19968: jis0208<<14 | 0x1B<<7 | 0x49,
+ 25164 - 19968: jis0212<<14 | 0x1E<<7 | 0x16,
+ 25165 - 19968: jis0208<<14 | 0x19<<7 | 0x2C,
+ 25166 - 19968: jis0208<<14 | 0x38<<7 | 0x08,
+ 25168 - 19968: jis0212<<14 | 0x1E<<7 | 0x17,
+ 25169 - 19968: jis0212<<14 | 0x1E<<7 | 0x18,
+ 25170 - 19968: jis0212<<14 | 0x1E<<7 | 0x19,
+ 25171 - 19968: jis0208<<14 | 0x21<<7 | 0x26,
+ 25172 - 19968: jis0212<<14 | 0x1E<<7 | 0x1A,
+ 25173 - 19968: jis0208<<14 | 0x29<<7 | 0x06,
+ 25174 - 19968: jis0212<<14 | 0x1E<<7 | 0x1B,
+ 25176 - 19968: jis0208<<14 | 0x21<<7 | 0x50,
+ 25178 - 19968: jis0212<<14 | 0x1E<<7 | 0x1C,
+ 25179 - 19968: jis0208<<14 | 0x38<<7 | 0x0B,
+ 25180 - 19968: jis0212<<14 | 0x1E<<7 | 0x1D,
+ 25182 - 19968: jis0208<<14 | 0x38<<7 | 0x09,
+ 25184 - 19968: jis0208<<14 | 0x38<<7 | 0x0C,
+ 25187 - 19968: jis0208<<14 | 0x38<<7 | 0x0A,
+ 25188 - 19968: jis0212<<14 | 0x1E<<7 | 0x1E,
+ 25192 - 19968: jis0208<<14 | 0x38<<7 | 0x0D,
+ 25197 - 19968: jis0212<<14 | 0x1E<<7 | 0x1F,
+ 25198 - 19968: jis0208<<14 | 0x29<<7 | 0x10,
+ 25199 - 19968: jis0212<<14 | 0x1E<<7 | 0x20,
+ 25201 - 19968: jis0208<<14 | 0x0F<<7 | 0x16,
+ 25203 - 19968: jis0212<<14 | 0x1E<<7 | 0x21,
+ 25206 - 19968: jis0208<<14 | 0x28<<7 | 0x3D,
+ 25209 - 19968: jis0208<<14 | 0x27<<7 | 0x42,
+ 25210 - 19968: jis0212<<14 | 0x1E<<7 | 0x22,
+ 25212 - 19968: jis0208<<14 | 0x38<<7 | 0x0E,
+ 25213 - 19968: jis0212<<14 | 0x1E<<7 | 0x23,
+ 25214 - 19968: jis0208<<14 | 0x38<<7 | 0x11,
+ 25215 - 19968: jis0208<<14 | 0x1D<<7 | 0x14,
+ 25216 - 19968: jis0208<<14 | 0x14<<7 | 0x1A,
+ 25218 - 19968: jis0208<<14 | 0x38<<7 | 0x0F,
+ 25219 - 19968: jis0208<<14 | 0x38<<7 | 0x16,
+ 25220 - 19968: jis0208<<14 | 0x1D<<7 | 0x15,
+ 25225 - 19968: jis0208<<14 | 0x38<<7 | 0x10,
+ 25226 - 19968: jis0208<<14 | 0x26<<7 | 0x23,
+ 25229 - 19968: jis0212<<14 | 0x1E<<7 | 0x24,
+ 25230 - 19968: jis0212<<14 | 0x1E<<7 | 0x25,
+ 25231 - 19968: jis0212<<14 | 0x1E<<7 | 0x26,
+ 25232 - 19968: jis0212<<14 | 0x1E<<7 | 0x27,
+ 25233 - 19968: jis0208<<14 | 0x2C<<7 | 0x3D,
+ 25234 - 19968: jis0208<<14 | 0x38<<7 | 0x12,
+ 25235 - 19968: jis0208<<14 | 0x38<<7 | 0x13,
+ 25236 - 19968: jis0208<<14 | 0x38<<7 | 0x17,
+ 25237 - 19968: jis0208<<14 | 0x24<<7 | 0x49,
+ 25238 - 19968: jis0208<<14 | 0x38<<7 | 0x14,
+ 25239 - 19968: jis0208<<14 | 0x18<<7 | 0x12,
+ 25240 - 19968: jis0208<<14 | 0x1F<<7 | 0x3D,
+ 25243 - 19968: jis0208<<14 | 0x38<<7 | 0x25,
+ 25244 - 19968: jis0208<<14 | 0x27<<7 | 0x13,
+ 25246 - 19968: jis0208<<14 | 0x21<<7 | 0x51,
+ 25254 - 19968: jis0208<<14 | 0x59<<7 | 0x0D,
+ 25256 - 19968: jis0212<<14 | 0x1E<<7 | 0x29,
+ 25259 - 19968: jis0208<<14 | 0x27<<7 | 0x43,
+ 25260 - 19968: jis0208<<14 | 0x39<<7 | 0x0C,
+ 25265 - 19968: jis0208<<14 | 0x29<<7 | 0x59,
+ 25267 - 19968: jis0212<<14 | 0x1E<<7 | 0x2A,
+ 25269 - 19968: jis0208<<14 | 0x23<<7 | 0x50,
+ 25270 - 19968: jis0212<<14 | 0x1E<<7 | 0x2B,
+ 25271 - 19968: jis0212<<14 | 0x1E<<7 | 0x2C,
+ 25273 - 19968: jis0208<<14 | 0x2A<<7 | 0x54,
+ 25274 - 19968: jis0212<<14 | 0x1E<<7 | 0x2D,
+ 25275 - 19968: jis0208<<14 | 0x38<<7 | 0x1A,
+ 25276 - 19968: jis0208<<14 | 0x11<<7 | 0x00,
+ 25277 - 19968: jis0208<<14 | 0x22<<7 | 0x49,
+ 25278 - 19968: jis0212<<14 | 0x1E<<7 | 0x2E,
+ 25279 - 19968: jis0212<<14 | 0x1E<<7 | 0x2F,
+ 25282 - 19968: jis0208<<14 | 0x38<<7 | 0x23,
+ 25284 - 19968: jis0212<<14 | 0x1E<<7 | 0x30,
+ 25285 - 19968: jis0208<<14 | 0x22<<7 | 0x13,
+ 25286 - 19968: jis0208<<14 | 0x38<<7 | 0x1D,
+ 25287 - 19968: jis0208<<14 | 0x38<<7 | 0x24,
+ 25288 - 19968: jis0208<<14 | 0x38<<7 | 0x1F,
+ 25289 - 19968: jis0208<<14 | 0x38<<7 | 0x26,
+ 25290 - 19968: jis0208<<14 | 0x38<<7 | 0x22,
+ 25292 - 19968: jis0208<<14 | 0x38<<7 | 0x21,
+ 25293 - 19968: jis0208<<14 | 0x26<<7 | 0x4E,
+ 25294 - 19968: jis0212<<14 | 0x1E<<7 | 0x31,
+ 25295 - 19968: jis0208<<14 | 0x38<<7 | 0x1B,
+ 25296 - 19968: jis0208<<14 | 0x11<<7 | 0x5C,
+ 25297 - 19968: jis0208<<14 | 0x38<<7 | 0x19,
+ 25298 - 19968: jis0208<<14 | 0x14<<7 | 0x50,
+ 25299 - 19968: jis0208<<14 | 0x21<<7 | 0x52,
+ 25300 - 19968: jis0208<<14 | 0x38<<7 | 0x15,
+ 25301 - 19968: jis0212<<14 | 0x1E<<7 | 0x32,
+ 25302 - 19968: jis0212<<14 | 0x1E<<7 | 0x33,
+ 25303 - 19968: jis0208<<14 | 0x38<<7 | 0x18,
+ 25304 - 19968: jis0208<<14 | 0x18<<7 | 0x13,
+ 25305 - 19968: jis0208<<14 | 0x1F<<7 | 0x3A,
+ 25306 - 19968: jis0212<<14 | 0x1E<<7 | 0x34,
+ 25307 - 19968: jis0208<<14 | 0x1D<<7 | 0x16,
+ 25308 - 19968: jis0208<<14 | 0x38<<7 | 0x20,
+ 25309 - 19968: jis0208<<14 | 0x26<<7 | 0x31,
+ 25312 - 19968: jis0208<<14 | 0x14<<7 | 0x51,
+ 25313 - 19968: jis0208<<14 | 0x12<<7 | 0x27,
+ 25322 - 19968: jis0212<<14 | 0x1E<<7 | 0x35,
+ 25324 - 19968: jis0208<<14 | 0x12<<7 | 0x46,
+ 25325 - 19968: jis0208<<14 | 0x1E<<7 | 0x00,
+ 25326 - 19968: jis0208<<14 | 0x38<<7 | 0x28,
+ 25327 - 19968: jis0208<<14 | 0x38<<7 | 0x2D,
+ 25329 - 19968: jis0208<<14 | 0x38<<7 | 0x29,
+ 25330 - 19968: jis0212<<14 | 0x1E<<7 | 0x36,
+ 25331 - 19968: jis0208<<14 | 0x16<<7 | 0x5C,
+ 25332 - 19968: jis0212<<14 | 0x1E<<7 | 0x37,
+ 25333 - 19968: jis0208<<14 | 0x38<<7 | 0x2E,
+ 25334 - 19968: jis0208<<14 | 0x1A<<7 | 0x01,
+ 25335 - 19968: jis0208<<14 | 0x18<<7 | 0x48,
+ 25340 - 19968: jis0212<<14 | 0x1E<<7 | 0x38,
+ 25341 - 19968: jis0212<<14 | 0x1E<<7 | 0x39,
+ 25342 - 19968: jis0208<<14 | 0x1C<<7 | 0x05,
+ 25343 - 19968: jis0208<<14 | 0x38<<7 | 0x1C,
+ 25345 - 19968: jis0208<<14 | 0x1A<<7 | 0x5C,
+ 25346 - 19968: jis0208<<14 | 0x38<<7 | 0x2B,
+ 25347 - 19968: jis0212<<14 | 0x1E<<7 | 0x3A,
+ 25348 - 19968: jis0212<<14 | 0x1E<<7 | 0x3B,
+ 25351 - 19968: jis0208<<14 | 0x1A<<7 | 0x37,
+ 25352 - 19968: jis0208<<14 | 0x38<<7 | 0x2C,
+ 25353 - 19968: jis0208<<14 | 0x0F<<7 | 0x23,
+ 25354 - 19968: jis0212<<14 | 0x1E<<7 | 0x3C,
+ 25355 - 19968: jis0212<<14 | 0x1E<<7 | 0x3D,
+ 25356 - 19968: jis0208<<14 | 0x38<<7 | 0x27,
+ 25357 - 19968: jis0212<<14 | 0x1E<<7 | 0x3E,
+ 25360 - 19968: jis0212<<14 | 0x1E<<7 | 0x3F,
+ 25361 - 19968: jis0208<<14 | 0x23<<7 | 0x08,
+ 25363 - 19968: jis0212<<14 | 0x1E<<7 | 0x40,
+ 25366 - 19968: jis0212<<14 | 0x1E<<7 | 0x41,
+ 25368 - 19968: jis0212<<14 | 0x1E<<7 | 0x42,
+ 25369 - 19968: jis0208<<14 | 0x14<<7 | 0x52,
+ 25375 - 19968: jis0208<<14 | 0x15<<7 | 0x13,
+ 25383 - 19968: jis0208<<14 | 0x38<<7 | 0x2A,
+ 25384 - 19968: jis0208<<14 | 0x0F<<7 | 0x06,
+ 25385 - 19968: jis0212<<14 | 0x1E<<7 | 0x43,
+ 25386 - 19968: jis0212<<14 | 0x1E<<7 | 0x44,
+ 25387 - 19968: jis0208<<14 | 0x19<<7 | 0x22,
+ 25389 - 19968: jis0212<<14 | 0x1E<<7 | 0x45,
+ 25391 - 19968: jis0208<<14 | 0x1E<<7 | 0x15,
+ 25397 - 19968: jis0212<<14 | 0x1E<<7 | 0x46,
+ 25398 - 19968: jis0212<<14 | 0x1E<<7 | 0x47,
+ 25401 - 19968: jis0212<<14 | 0x1E<<7 | 0x48,
+ 25402 - 19968: jis0208<<14 | 0x23<<7 | 0x51,
+ 25404 - 19968: jis0212<<14 | 0x1E<<7 | 0x49,
+ 25405 - 19968: jis0208<<14 | 0x27<<7 | 0x33,
+ 25406 - 19968: jis0208<<14 | 0x38<<7 | 0x30,
+ 25407 - 19968: jis0208<<14 | 0x20<<7 | 0x3D,
+ 25409 - 19968: jis0212<<14 | 0x1E<<7 | 0x4A,
+ 25410 - 19968: jis0212<<14 | 0x1E<<7 | 0x4B,
+ 25411 - 19968: jis0212<<14 | 0x1E<<7 | 0x4C,
+ 25412 - 19968: jis0212<<14 | 0x1E<<7 | 0x4D,
+ 25414 - 19968: jis0212<<14 | 0x1E<<7 | 0x4E,
+ 25417 - 19968: jis0208<<14 | 0x21<<7 | 0x09,
+ 25418 - 19968: jis0212<<14 | 0x1E<<7 | 0x4F,
+ 25419 - 19968: jis0212<<14 | 0x1E<<7 | 0x50,
+ 25420 - 19968: jis0208<<14 | 0x1A<<7 | 0x0A,
+ 25421 - 19968: jis0208<<14 | 0x38<<7 | 0x31,
+ 25422 - 19968: jis0212<<14 | 0x1E<<7 | 0x51,
+ 25423 - 19968: jis0208<<14 | 0x38<<7 | 0x33,
+ 25424 - 19968: jis0208<<14 | 0x38<<7 | 0x2F,
+ 25426 - 19968: jis0212<<14 | 0x1E<<7 | 0x52,
+ 25427 - 19968: jis0212<<14 | 0x1E<<7 | 0x53,
+ 25428 - 19968: jis0212<<14 | 0x1E<<7 | 0x54,
+ 25429 - 19968: jis0208<<14 | 0x29<<7 | 0x40,
+ 25431 - 19968: jis0208<<14 | 0x23<<7 | 0x1C,
+ 25432 - 19968: jis0212<<14 | 0x1E<<7 | 0x55,
+ 25435 - 19968: jis0212<<14 | 0x1E<<7 | 0x56,
+ 25436 - 19968: jis0208<<14 | 0x20<<7 | 0x3B,
+ 25445 - 19968: jis0212<<14 | 0x1E<<7 | 0x57,
+ 25446 - 19968: jis0212<<14 | 0x1E<<7 | 0x58,
+ 25447 - 19968: jis0208<<14 | 0x29<<7 | 0x5A,
+ 25448 - 19968: jis0208<<14 | 0x1B<<7 | 0x2D,
+ 25449 - 19968: jis0208<<14 | 0x38<<7 | 0x3F,
+ 25451 - 19968: jis0208<<14 | 0x38<<7 | 0x3E,
+ 25452 - 19968: jis0212<<14 | 0x1E<<7 | 0x59,
+ 25453 - 19968: jis0212<<14 | 0x1E<<7 | 0x5A,
+ 25454 - 19968: jis0208<<14 | 0x1E<<7 | 0x57,
+ 25457 - 19968: jis0212<<14 | 0x1E<<7 | 0x5B,
+ 25458 - 19968: jis0208<<14 | 0x16<<7 | 0x5D,
+ 25460 - 19968: jis0212<<14 | 0x1E<<7 | 0x5C,
+ 25461 - 19968: jis0212<<14 | 0x1E<<7 | 0x5D,
+ 25462 - 19968: jis0208<<14 | 0x38<<7 | 0x38,
+ 25463 - 19968: jis0208<<14 | 0x1D<<7 | 0x18,
+ 25464 - 19968: jis0212<<14 | 0x1F<<7 | 0x00,
+ 25466 - 19968: jis0208<<14 | 0x25<<7 | 0x47,
+ 25467 - 19968: jis0208<<14 | 0x26<<7 | 0x10,
+ 25468 - 19968: jis0212<<14 | 0x1F<<7 | 0x01,
+ 25469 - 19968: jis0212<<14 | 0x1F<<7 | 0x02,
+ 25471 - 19968: jis0212<<14 | 0x1F<<7 | 0x03,
+ 25472 - 19968: jis0208<<14 | 0x38<<7 | 0x36,
+ 25474 - 19968: jis0212<<14 | 0x1F<<7 | 0x04,
+ 25475 - 19968: jis0208<<14 | 0x20<<7 | 0x3C,
+ 25476 - 19968: jis0212<<14 | 0x1F<<7 | 0x05,
+ 25479 - 19968: jis0212<<14 | 0x1F<<7 | 0x06,
+ 25480 - 19968: jis0208<<14 | 0x1B<<7 | 0x57,
+ 25481 - 19968: jis0208<<14 | 0x38<<7 | 0x3B,
+ 25482 - 19968: jis0212<<14 | 0x1F<<7 | 0x07,
+ 25484 - 19968: jis0208<<14 | 0x1D<<7 | 0x17,
+ 25486 - 19968: jis0208<<14 | 0x38<<7 | 0x35,
+ 25487 - 19968: jis0208<<14 | 0x38<<7 | 0x3A,
+ 25488 - 19968: jis0212<<14 | 0x1F<<7 | 0x08,
+ 25490 - 19968: jis0208<<14 | 0x26<<7 | 0x32,
+ 25492 - 19968: jis0212<<14 | 0x1F<<7 | 0x09,
+ 25493 - 19968: jis0212<<14 | 0x1F<<7 | 0x0A,
+ 25494 - 19968: jis0208<<14 | 0x38<<7 | 0x34,
+ 25496 - 19968: jis0208<<14 | 0x16<<7 | 0x00,
+ 25497 - 19968: jis0212<<14 | 0x1F<<7 | 0x0B,
+ 25498 - 19968: jis0212<<14 | 0x1F<<7 | 0x0C,
+ 25499 - 19968: jis0208<<14 | 0x12<<7 | 0x3C,
+ 25502 - 19968: jis0212<<14 | 0x1F<<7 | 0x0D,
+ 25503 - 19968: jis0208<<14 | 0x38<<7 | 0x3C,
+ 25504 - 19968: jis0208<<14 | 0x2D<<7 | 0x0A,
+ 25505 - 19968: jis0208<<14 | 0x19<<7 | 0x2D,
+ 25506 - 19968: jis0208<<14 | 0x22<<7 | 0x14,
+ 25507 - 19968: jis0208<<14 | 0x38<<7 | 0x39,
+ 25508 - 19968: jis0212<<14 | 0x1F<<7 | 0x0E,
+ 25509 - 19968: jis0208<<14 | 0x1F<<7 | 0x3B,
+ 25510 - 19968: jis0212<<14 | 0x1F<<7 | 0x0F,
+ 25511 - 19968: jis0208<<14 | 0x18<<7 | 0x14,
+ 25512 - 19968: jis0208<<14 | 0x1E<<7 | 0x43,
+ 25513 - 19968: jis0208<<14 | 0x10<<7 | 0x45,
+ 25514 - 19968: jis0208<<14 | 0x20<<7 | 0x1B,
+ 25515 - 19968: jis0208<<14 | 0x38<<7 | 0x37,
+ 25516 - 19968: jis0208<<14 | 0x14<<7 | 0x24,
+ 25517 - 19968: jis0212<<14 | 0x1F<<7 | 0x10,
+ 25518 - 19968: jis0212<<14 | 0x1F<<7 | 0x11,
+ 25519 - 19968: jis0212<<14 | 0x1F<<7 | 0x12,
+ 25522 - 19968: jis0208<<14 | 0x16<<7 | 0x26,
+ 25524 - 19968: jis0208<<14 | 0x23<<7 | 0x2E,
+ 25525 - 19968: jis0208<<14 | 0x38<<7 | 0x3D,
+ 25531 - 19968: jis0208<<14 | 0x20<<7 | 0x3E,
+ 25533 - 19968: jis0212<<14 | 0x1F<<7 | 0x13,
+ 25534 - 19968: jis0208<<14 | 0x38<<7 | 0x40,
+ 25536 - 19968: jis0208<<14 | 0x38<<7 | 0x42,
+ 25537 - 19968: jis0212<<14 | 0x1F<<7 | 0x14,
+ 25539 - 19968: jis0208<<14 | 0x21<<7 | 0x16,
+ 25540 - 19968: jis0208<<14 | 0x38<<7 | 0x48,
+ 25541 - 19968: jis0212<<14 | 0x1F<<7 | 0x15,
+ 25542 - 19968: jis0208<<14 | 0x38<<7 | 0x43,
+ 25544 - 19968: jis0212<<14 | 0x1F<<7 | 0x16,
+ 25545 - 19968: jis0208<<14 | 0x38<<7 | 0x45,
+ 25550 - 19968: jis0212<<14 | 0x1F<<7 | 0x17,
+ 25551 - 19968: jis0208<<14 | 0x28<<7 | 0x20,
+ 25552 - 19968: jis0208<<14 | 0x23<<7 | 0x52,
+ 25553 - 19968: jis0212<<14 | 0x1F<<7 | 0x18,
+ 25554 - 19968: jis0208<<14 | 0x38<<7 | 0x46,
+ 25555 - 19968: jis0212<<14 | 0x1F<<7 | 0x19,
+ 25556 - 19968: jis0212<<14 | 0x1F<<7 | 0x1A,
+ 25557 - 19968: jis0212<<14 | 0x1F<<7 | 0x1B,
+ 25558 - 19968: jis0208<<14 | 0x2C<<7 | 0x0B,
+ 25562 - 19968: jis0208<<14 | 0x2C<<7 | 0x27,
+ 25563 - 19968: jis0208<<14 | 0x13<<7 | 0x18,
+ 25564 - 19968: jis0212<<14 | 0x1F<<7 | 0x1C,
+ 25568 - 19968: jis0212<<14 | 0x1F<<7 | 0x1D,
+ 25569 - 19968: jis0208<<14 | 0x0F<<7 | 0x0D,
+ 25571 - 19968: jis0208<<14 | 0x38<<7 | 0x44,
+ 25573 - 19968: jis0212<<14 | 0x1F<<7 | 0x1E,
+ 25577 - 19968: jis0208<<14 | 0x38<<7 | 0x41,
+ 25578 - 19968: jis0212<<14 | 0x1F<<7 | 0x1F,
+ 25580 - 19968: jis0212<<14 | 0x1F<<7 | 0x20,
+ 25582 - 19968: jis0208<<14 | 0x13<<7 | 0x57,
+ 25586 - 19968: jis0212<<14 | 0x1F<<7 | 0x21,
+ 25587 - 19968: jis0212<<14 | 0x1F<<7 | 0x22,
+ 25588 - 19968: jis0208<<14 | 0x10<<7 | 0x46,
+ 25589 - 19968: jis0208<<14 | 0x59<<7 | 0x0E,
+ 25590 - 19968: jis0208<<14 | 0x38<<7 | 0x47,
+ 25592 - 19968: jis0212<<14 | 0x1F<<7 | 0x24,
+ 25593 - 19968: jis0212<<14 | 0x1F<<7 | 0x25,
+ 25594 - 19968: jis0208<<14 | 0x2C<<7 | 0x28,
+ 25606 - 19968: jis0208<<14 | 0x38<<7 | 0x4B,
+ 25609 - 19968: jis0212<<14 | 0x1F<<7 | 0x26,
+ 25610 - 19968: jis0212<<14 | 0x1F<<7 | 0x27,
+ 25613 - 19968: jis0208<<14 | 0x21<<7 | 0x1A,
+ 25615 - 19968: jis0208<<14 | 0x38<<7 | 0x52,
+ 25616 - 19968: jis0212<<14 | 0x1F<<7 | 0x28,
+ 25618 - 19968: jis0212<<14 | 0x1F<<7 | 0x29,
+ 25619 - 19968: jis0208<<14 | 0x38<<7 | 0x4C,
+ 25620 - 19968: jis0212<<14 | 0x1F<<7 | 0x2A,
+ 25622 - 19968: jis0208<<14 | 0x38<<7 | 0x49,
+ 25623 - 19968: jis0208<<14 | 0x38<<7 | 0x50,
+ 25624 - 19968: jis0212<<14 | 0x1F<<7 | 0x2B,
+ 25628 - 19968: jis0208<<14 | 0x38<<7 | 0x32,
+ 25630 - 19968: jis0212<<14 | 0x1F<<7 | 0x2C,
+ 25632 - 19968: jis0212<<14 | 0x1F<<7 | 0x2D,
+ 25634 - 19968: jis0212<<14 | 0x1F<<7 | 0x2E,
+ 25636 - 19968: jis0212<<14 | 0x1F<<7 | 0x2F,
+ 25637 - 19968: jis0212<<14 | 0x1F<<7 | 0x30,
+ 25638 - 19968: jis0208<<14 | 0x38<<7 | 0x4D,
+ 25640 - 19968: jis0208<<14 | 0x38<<7 | 0x51,
+ 25641 - 19968: jis0212<<14 | 0x1F<<7 | 0x31,
+ 25642 - 19968: jis0212<<14 | 0x1F<<7 | 0x32,
+ 25644 - 19968: jis0208<<14 | 0x27<<7 | 0x21,
+ 25645 - 19968: jis0208<<14 | 0x24<<7 | 0x4A,
+ 25647 - 19968: jis0212<<14 | 0x1F<<7 | 0x33,
+ 25648 - 19968: jis0212<<14 | 0x1F<<7 | 0x34,
+ 25652 - 19968: jis0208<<14 | 0x38<<7 | 0x4A,
+ 25653 - 19968: jis0212<<14 | 0x1F<<7 | 0x35,
+ 25654 - 19968: jis0208<<14 | 0x38<<7 | 0x4E,
+ 25658 - 19968: jis0208<<14 | 0x16<<7 | 0x27,
+ 25661 - 19968: jis0212<<14 | 0x1F<<7 | 0x36,
+ 25662 - 19968: jis0208<<14 | 0x19<<7 | 0x50,
+ 25663 - 19968: jis0212<<14 | 0x1F<<7 | 0x37,
+ 25666 - 19968: jis0208<<14 | 0x1F<<7 | 0x3C,
+ 25675 - 19968: jis0212<<14 | 0x1F<<7 | 0x38,
+ 25678 - 19968: jis0208<<14 | 0x38<<7 | 0x56,
+ 25679 - 19968: jis0212<<14 | 0x1F<<7 | 0x39,
+ 25681 - 19968: jis0212<<14 | 0x1F<<7 | 0x3A,
+ 25682 - 19968: jis0212<<14 | 0x1F<<7 | 0x3B,
+ 25683 - 19968: jis0212<<14 | 0x1F<<7 | 0x3C,
+ 25684 - 19968: jis0212<<14 | 0x1F<<7 | 0x3D,
+ 25688 - 19968: jis0208<<14 | 0x24<<7 | 0x05,
+ 25690 - 19968: jis0212<<14 | 0x1F<<7 | 0x3E,
+ 25691 - 19968: jis0212<<14 | 0x1F<<7 | 0x3F,
+ 25692 - 19968: jis0212<<14 | 0x1F<<7 | 0x40,
+ 25693 - 19968: jis0212<<14 | 0x1F<<7 | 0x41,
+ 25695 - 19968: jis0212<<14 | 0x1F<<7 | 0x42,
+ 25696 - 19968: jis0208<<14 | 0x59<<7 | 0x0F,
+ 25697 - 19968: jis0212<<14 | 0x1F<<7 | 0x44,
+ 25699 - 19968: jis0212<<14 | 0x1F<<7 | 0x45,
+ 25703 - 19968: jis0208<<14 | 0x38<<7 | 0x53,
+ 25705 - 19968: jis0208<<14 | 0x2A<<7 | 0x3F,
+ 25709 - 19968: jis0212<<14 | 0x1F<<7 | 0x46,
+ 25711 - 19968: jis0208<<14 | 0x38<<7 | 0x54,
+ 25715 - 19968: jis0212<<14 | 0x1F<<7 | 0x47,
+ 25716 - 19968: jis0212<<14 | 0x1F<<7 | 0x48,
+ 25718 - 19968: jis0208<<14 | 0x38<<7 | 0x55,
+ 25720 - 19968: jis0208<<14 | 0x2B<<7 | 0x2D,
+ 25722 - 19968: jis0208<<14 | 0x1F<<7 | 0x01,
+ 25723 - 19968: jis0212<<14 | 0x1F<<7 | 0x49,
+ 25725 - 19968: jis0212<<14 | 0x1F<<7 | 0x4A,
+ 25731 - 19968: jis0208<<14 | 0x16<<7 | 0x41,
+ 25733 - 19968: jis0212<<14 | 0x1F<<7 | 0x4B,
+ 25735 - 19968: jis0212<<14 | 0x1F<<7 | 0x4C,
+ 25736 - 19968: jis0208<<14 | 0x38<<7 | 0x5C,
+ 25743 - 19968: jis0212<<14 | 0x1F<<7 | 0x4D,
+ 25744 - 19968: jis0212<<14 | 0x1F<<7 | 0x4E,
+ 25745 - 19968: jis0212<<14 | 0x1F<<7 | 0x4F,
+ 25746 - 19968: jis0208<<14 | 0x1A<<7 | 0x14,
+ 25747 - 19968: jis0208<<14 | 0x38<<7 | 0x59,
+ 25749 - 19968: jis0208<<14 | 0x38<<7 | 0x58,
+ 25752 - 19968: jis0212<<14 | 0x1F<<7 | 0x50,
+ 25753 - 19968: jis0212<<14 | 0x1F<<7 | 0x51,
+ 25754 - 19968: jis0208<<14 | 0x26<<7 | 0x11,
+ 25755 - 19968: jis0212<<14 | 0x1F<<7 | 0x52,
+ 25757 - 19968: jis0208<<14 | 0x59<<7 | 0x10,
+ 25758 - 19968: jis0208<<14 | 0x25<<7 | 0x14,
+ 25759 - 19968: jis0212<<14 | 0x1F<<7 | 0x54,
+ 25761 - 19968: jis0212<<14 | 0x1F<<7 | 0x55,
+ 25763 - 19968: jis0212<<14 | 0x1F<<7 | 0x56,
+ 25764 - 19968: jis0208<<14 | 0x24<<7 | 0x10,
+ 25765 - 19968: jis0208<<14 | 0x38<<7 | 0x5A,
+ 25766 - 19968: jis0212<<14 | 0x1F<<7 | 0x57,
+ 25768 - 19968: jis0212<<14 | 0x1F<<7 | 0x58,
+ 25769 - 19968: jis0208<<14 | 0x38<<7 | 0x5B,
+ 25771 - 19968: jis0208<<14 | 0x28<<7 | 0x4E,
+ 25772 - 19968: jis0212<<14 | 0x1F<<7 | 0x59,
+ 25773 - 19968: jis0208<<14 | 0x26<<7 | 0x24,
+ 25774 - 19968: jis0208<<14 | 0x1A<<7 | 0x02,
+ 25776 - 19968: jis0208<<14 | 0x1F<<7 | 0x50,
+ 25778 - 19968: jis0208<<14 | 0x2A<<7 | 0x2F,
+ 25779 - 19968: jis0212<<14 | 0x1F<<7 | 0x5A,
+ 25785 - 19968: jis0208<<14 | 0x12<<7 | 0x28,
+ 25787 - 19968: jis0208<<14 | 0x39<<7 | 0x04,
+ 25788 - 19968: jis0208<<14 | 0x38<<7 | 0x5D,
+ 25789 - 19968: jis0212<<14 | 0x1F<<7 | 0x5B,
+ 25790 - 19968: jis0212<<14 | 0x1F<<7 | 0x5C,
+ 25791 - 19968: jis0212<<14 | 0x1F<<7 | 0x5D,
+ 25793 - 19968: jis0208<<14 | 0x2C<<7 | 0x29,
+ 25794 - 19968: jis0208<<14 | 0x39<<7 | 0x06,
+ 25796 - 19968: jis0212<<14 | 0x20<<7 | 0x00,
+ 25797 - 19968: jis0208<<14 | 0x39<<7 | 0x02,
+ 25799 - 19968: jis0208<<14 | 0x39<<7 | 0x03,
+ 25801 - 19968: jis0212<<14 | 0x20<<7 | 0x01,
+ 25802 - 19968: jis0212<<14 | 0x20<<7 | 0x02,
+ 25803 - 19968: jis0212<<14 | 0x20<<7 | 0x03,
+ 25804 - 19968: jis0212<<14 | 0x20<<7 | 0x04,
+ 25805 - 19968: jis0208<<14 | 0x20<<7 | 0x3F,
+ 25806 - 19968: jis0208<<14 | 0x59<<7 | 0x11,
+ 25808 - 19968: jis0212<<14 | 0x20<<7 | 0x06,
+ 25809 - 19968: jis0212<<14 | 0x20<<7 | 0x07,
+ 25810 - 19968: jis0208<<14 | 0x39<<7 | 0x01,
+ 25812 - 19968: jis0208<<14 | 0x38<<7 | 0x1E,
+ 25813 - 19968: jis0212<<14 | 0x20<<7 | 0x08,
+ 25815 - 19968: jis0212<<14 | 0x20<<7 | 0x09,
+ 25816 - 19968: jis0208<<14 | 0x39<<7 | 0x05,
+ 25818 - 19968: jis0208<<14 | 0x39<<7 | 0x00,
+ 25824 - 19968: jis0208<<14 | 0x39<<7 | 0x0A,
+ 25825 - 19968: jis0208<<14 | 0x39<<7 | 0x0B,
+ 25826 - 19968: jis0208<<14 | 0x24<<7 | 0x06,
+ 25827 - 19968: jis0208<<14 | 0x39<<7 | 0x0D,
+ 25828 - 19968: jis0212<<14 | 0x20<<7 | 0x0A,
+ 25829 - 19968: jis0212<<14 | 0x20<<7 | 0x0B,
+ 25830 - 19968: jis0208<<14 | 0x1A<<7 | 0x03,
+ 25831 - 19968: jis0208<<14 | 0x39<<7 | 0x08,
+ 25833 - 19968: jis0212<<14 | 0x20<<7 | 0x0C,
+ 25834 - 19968: jis0212<<14 | 0x20<<7 | 0x0D,
+ 25836 - 19968: jis0208<<14 | 0x14<<7 | 0x1B,
+ 25837 - 19968: jis0212<<14 | 0x20<<7 | 0x0E,
+ 25839 - 19968: jis0208<<14 | 0x39<<7 | 0x0E,
+ 25840 - 19968: jis0212<<14 | 0x20<<7 | 0x0F,
+ 25841 - 19968: jis0208<<14 | 0x39<<7 | 0x07,
+ 25842 - 19968: jis0208<<14 | 0x39<<7 | 0x12,
+ 25844 - 19968: jis0208<<14 | 0x39<<7 | 0x11,
+ 25845 - 19968: jis0212<<14 | 0x20<<7 | 0x10,
+ 25846 - 19968: jis0208<<14 | 0x39<<7 | 0x10,
+ 25847 - 19968: jis0212<<14 | 0x20<<7 | 0x11,
+ 25850 - 19968: jis0208<<14 | 0x39<<7 | 0x13,
+ 25851 - 19968: jis0212<<14 | 0x20<<7 | 0x12,
+ 25853 - 19968: jis0208<<14 | 0x39<<7 | 0x15,
+ 25854 - 19968: jis0208<<14 | 0x1D<<7 | 0x50,
+ 25855 - 19968: jis0212<<14 | 0x20<<7 | 0x13,
+ 25856 - 19968: jis0208<<14 | 0x39<<7 | 0x14,
+ 25857 - 19968: jis0212<<14 | 0x20<<7 | 0x14,
+ 25860 - 19968: jis0212<<14 | 0x20<<7 | 0x15,
+ 25861 - 19968: jis0208<<14 | 0x39<<7 | 0x18,
+ 25864 - 19968: jis0212<<14 | 0x20<<7 | 0x16,
+ 25865 - 19968: jis0212<<14 | 0x20<<7 | 0x17,
+ 25866 - 19968: jis0212<<14 | 0x20<<7 | 0x18,
+ 25871 - 19968: jis0212<<14 | 0x20<<7 | 0x19,
+ 25875 - 19968: jis0212<<14 | 0x20<<7 | 0x1A,
+ 25876 - 19968: jis0212<<14 | 0x20<<7 | 0x1B,
+ 25878 - 19968: jis0212<<14 | 0x20<<7 | 0x1C,
+ 25880 - 19968: jis0208<<14 | 0x39<<7 | 0x16,
+ 25881 - 19968: jis0212<<14 | 0x20<<7 | 0x1D,
+ 25883 - 19968: jis0212<<14 | 0x20<<7 | 0x1E,
+ 25884 - 19968: jis0208<<14 | 0x39<<7 | 0x17,
+ 25885 - 19968: jis0208<<14 | 0x38<<7 | 0x4F,
+ 25886 - 19968: jis0212<<14 | 0x20<<7 | 0x1F,
+ 25887 - 19968: jis0212<<14 | 0x20<<7 | 0x20,
+ 25890 - 19968: jis0212<<14 | 0x20<<7 | 0x21,
+ 25891 - 19968: jis0208<<14 | 0x39<<7 | 0x1A,
+ 25892 - 19968: jis0208<<14 | 0x39<<7 | 0x19,
+ 25894 - 19968: jis0212<<14 | 0x20<<7 | 0x22,
+ 25897 - 19968: jis0212<<14 | 0x20<<7 | 0x23,
+ 25898 - 19968: jis0208<<14 | 0x38<<7 | 0x57,
+ 25899 - 19968: jis0208<<14 | 0x39<<7 | 0x1B,
+ 25900 - 19968: jis0208<<14 | 0x39<<7 | 0x0F,
+ 25902 - 19968: jis0212<<14 | 0x20<<7 | 0x24,
+ 25903 - 19968: jis0208<<14 | 0x1A<<7 | 0x38,
+ 25905 - 19968: jis0212<<14 | 0x20<<7 | 0x25,
+ 25908 - 19968: jis0208<<14 | 0x39<<7 | 0x1C,
+ 25909 - 19968: jis0208<<14 | 0x39<<7 | 0x1D,
+ 25910 - 19968: jis0208<<14 | 0x39<<7 | 0x1F,
+ 25911 - 19968: jis0208<<14 | 0x39<<7 | 0x1E,
+ 25912 - 19968: jis0208<<14 | 0x39<<7 | 0x20,
+ 25913 - 19968: jis0208<<14 | 0x11<<7 | 0x5D,
+ 25914 - 19968: jis0212<<14 | 0x20<<7 | 0x26,
+ 25915 - 19968: jis0208<<14 | 0x18<<7 | 0x15,
+ 25916 - 19968: jis0212<<14 | 0x20<<7 | 0x27,
+ 25917 - 19968: jis0212<<14 | 0x20<<7 | 0x28,
+ 25918 - 19968: jis0208<<14 | 0x29<<7 | 0x5B,
+ 25919 - 19968: jis0208<<14 | 0x1F<<7 | 0x0E,
+ 25923 - 19968: jis0212<<14 | 0x20<<7 | 0x29,
+ 25925 - 19968: jis0208<<14 | 0x17<<7 | 0x2D,
+ 25927 - 19968: jis0212<<14 | 0x20<<7 | 0x2A,
+ 25928 - 19968: jis0208<<14 | 0x39<<7 | 0x22,
+ 25929 - 19968: jis0212<<14 | 0x20<<7 | 0x2B,
+ 25933 - 19968: jis0208<<14 | 0x39<<7 | 0x25,
+ 25934 - 19968: jis0208<<14 | 0x59<<7 | 0x12,
+ 25935 - 19968: jis0208<<14 | 0x28<<7 | 0x31,
+ 25936 - 19968: jis0212<<14 | 0x20<<7 | 0x2C,
+ 25937 - 19968: jis0208<<14 | 0x14<<7 | 0x3E,
+ 25938 - 19968: jis0212<<14 | 0x20<<7 | 0x2D,
+ 25940 - 19968: jis0212<<14 | 0x20<<7 | 0x2E,
+ 25941 - 19968: jis0208<<14 | 0x39<<7 | 0x24,
+ 25942 - 19968: jis0208<<14 | 0x39<<7 | 0x23,
+ 25943 - 19968: jis0208<<14 | 0x26<<7 | 0x33,
+ 25944 - 19968: jis0208<<14 | 0x39<<7 | 0x26,
+ 25945 - 19968: jis0208<<14 | 0x15<<7 | 0x14,
+ 25949 - 19968: jis0208<<14 | 0x39<<7 | 0x28,
+ 25950 - 19968: jis0208<<14 | 0x39<<7 | 0x27,
+ 25951 - 19968: jis0212<<14 | 0x20<<7 | 0x2F,
+ 25952 - 19968: jis0212<<14 | 0x20<<7 | 0x30,
+ 25954 - 19968: jis0208<<14 | 0x13<<7 | 0x19,
+ 25955 - 19968: jis0208<<14 | 0x1A<<7 | 0x15,
+ 25958 - 19968: jis0208<<14 | 0x25<<7 | 0x37,
+ 25959 - 19968: jis0212<<14 | 0x20<<7 | 0x31,
+ 25963 - 19968: jis0212<<14 | 0x20<<7 | 0x32,
+ 25964 - 19968: jis0208<<14 | 0x16<<7 | 0x28,
+ 25968 - 19968: jis0208<<14 | 0x1E<<7 | 0x53,
+ 25970 - 19968: jis0208<<14 | 0x39<<7 | 0x29,
+ 25972 - 19968: jis0208<<14 | 0x1F<<7 | 0x0F,
+ 25973 - 19968: jis0208<<14 | 0x24<<7 | 0x07,
+ 25975 - 19968: jis0208<<14 | 0x28<<7 | 0x3E,
+ 25976 - 19968: jis0208<<14 | 0x39<<7 | 0x2A,
+ 25978 - 19968: jis0212<<14 | 0x20<<7 | 0x33,
+ 25981 - 19968: jis0212<<14 | 0x20<<7 | 0x34,
+ 25985 - 19968: jis0212<<14 | 0x20<<7 | 0x35,
+ 25986 - 19968: jis0208<<14 | 0x39<<7 | 0x2B,
+ 25987 - 19968: jis0208<<14 | 0x39<<7 | 0x2C,
+ 25989 - 19968: jis0212<<14 | 0x20<<7 | 0x36,
+ 25991 - 19968: jis0208<<14 | 0x29<<7 | 0x17,
+ 25992 - 19968: jis0208<<14 | 0x34<<7 | 0x3C,
+ 25993 - 19968: jis0208<<14 | 0x1F<<7 | 0x25,
+ 25994 - 19968: jis0212<<14 | 0x20<<7 | 0x37,
+ 25996 - 19968: jis0208<<14 | 0x28<<7 | 0x2B,
+ 25998 - 19968: jis0208<<14 | 0x19<<7 | 0x37,
+ 26000 - 19968: jis0208<<14 | 0x27<<7 | 0x44,
+ 26001 - 19968: jis0208<<14 | 0x27<<7 | 0x22,
+ 26002 - 19968: jis0212<<14 | 0x20<<7 | 0x38,
+ 26005 - 19968: jis0212<<14 | 0x20<<7 | 0x39,
+ 26007 - 19968: jis0208<<14 | 0x24<<7 | 0x2C,
+ 26008 - 19968: jis0212<<14 | 0x20<<7 | 0x3A,
+ 26009 - 19968: jis0208<<14 | 0x2D<<7 | 0x20,
+ 26011 - 19968: jis0208<<14 | 0x39<<7 | 0x2E,
+ 26012 - 19968: jis0208<<14 | 0x1B<<7 | 0x2F,
+ 26013 - 19968: jis0212<<14 | 0x20<<7 | 0x3B,
+ 26015 - 19968: jis0208<<14 | 0x39<<7 | 0x2F,
+ 26016 - 19968: jis0212<<14 | 0x20<<7 | 0x3C,
+ 26017 - 19968: jis0208<<14 | 0x0F<<7 | 0x15,
+ 26019 - 19968: jis0212<<14 | 0x20<<7 | 0x3D,
+ 26020 - 19968: jis0208<<14 | 0x15<<7 | 0x33,
+ 26021 - 19968: jis0208<<14 | 0x1F<<7 | 0x2C,
+ 26022 - 19968: jis0212<<14 | 0x20<<7 | 0x3E,
+ 26023 - 19968: jis0208<<14 | 0x28<<7 | 0x3F,
+ 26027 - 19968: jis0208<<14 | 0x39<<7 | 0x30,
+ 26028 - 19968: jis0208<<14 | 0x1A<<7 | 0x21,
+ 26029 - 19968: jis0208<<14 | 0x22<<7 | 0x26,
+ 26030 - 19968: jis0212<<14 | 0x20<<7 | 0x3F,
+ 26031 - 19968: jis0208<<14 | 0x1A<<7 | 0x3A,
+ 26032 - 19968: jis0208<<14 | 0x1E<<7 | 0x16,
+ 26034 - 19968: jis0212<<14 | 0x20<<7 | 0x40,
+ 26035 - 19968: jis0212<<14 | 0x20<<7 | 0x41,
+ 26036 - 19968: jis0212<<14 | 0x20<<7 | 0x42,
+ 26039 - 19968: jis0208<<14 | 0x39<<7 | 0x31,
+ 26041 - 19968: jis0208<<14 | 0x29<<7 | 0x5C,
+ 26044 - 19968: jis0208<<14 | 0x10<<7 | 0x56,
+ 26045 - 19968: jis0208<<14 | 0x1A<<7 | 0x3B,
+ 26047 - 19968: jis0212<<14 | 0x20<<7 | 0x43,
+ 26049 - 19968: jis0208<<14 | 0x39<<7 | 0x34,
+ 26050 - 19968: jis0212<<14 | 0x20<<7 | 0x44,
+ 26051 - 19968: jis0208<<14 | 0x39<<7 | 0x32,
+ 26052 - 19968: jis0208<<14 | 0x39<<7 | 0x35,
+ 26053 - 19968: jis0208<<14 | 0x2D<<7 | 0x18,
+ 26054 - 19968: jis0208<<14 | 0x39<<7 | 0x33,
+ 26056 - 19968: jis0212<<14 | 0x20<<7 | 0x45,
+ 26057 - 19968: jis0212<<14 | 0x20<<7 | 0x46,
+ 26059 - 19968: jis0208<<14 | 0x1F<<7 | 0x5A,
+ 26060 - 19968: jis0208<<14 | 0x39<<7 | 0x36,
+ 26062 - 19968: jis0212<<14 | 0x20<<7 | 0x47,
+ 26063 - 19968: jis0208<<14 | 0x21<<7 | 0x11,
+ 26064 - 19968: jis0212<<14 | 0x20<<7 | 0x48,
+ 26066 - 19968: jis0208<<14 | 0x39<<7 | 0x37,
+ 26068 - 19968: jis0212<<14 | 0x20<<7 | 0x49,
+ 26070 - 19968: jis0212<<14 | 0x20<<7 | 0x4A,
+ 26071 - 19968: jis0208<<14 | 0x13<<7 | 0x59,
+ 26072 - 19968: jis0212<<14 | 0x20<<7 | 0x4B,
+ 26073 - 19968: jis0208<<14 | 0x39<<7 | 0x39,
+ 26075 - 19968: jis0208<<14 | 0x39<<7 | 0x38,
+ 26079 - 19968: jis0212<<14 | 0x20<<7 | 0x4C,
+ 26080 - 19968: jis0208<<14 | 0x39<<7 | 0x3A,
+ 26081 - 19968: jis0208<<14 | 0x39<<7 | 0x3B,
+ 26082 - 19968: jis0208<<14 | 0x13<<7 | 0x5A,
+ 26085 - 19968: jis0208<<14 | 0x25<<7 | 0x5B,
+ 26086 - 19968: jis0208<<14 | 0x22<<7 | 0x15,
+ 26087 - 19968: jis0208<<14 | 0x14<<7 | 0x4B,
+ 26088 - 19968: jis0208<<14 | 0x1A<<7 | 0x3C,
+ 26089 - 19968: jis0208<<14 | 0x20<<7 | 0x40,
+ 26092 - 19968: jis0208<<14 | 0x1C<<7 | 0x3B,
+ 26093 - 19968: jis0208<<14 | 0x0F<<7 | 0x0F,
+ 26096 - 19968: jis0212<<14 | 0x20<<7 | 0x4D,
+ 26097 - 19968: jis0208<<14 | 0x39<<7 | 0x3C,
+ 26098 - 19968: jis0212<<14 | 0x20<<7 | 0x4E,
+ 26100 - 19968: jis0212<<14 | 0x20<<7 | 0x4F,
+ 26101 - 19968: jis0212<<14 | 0x20<<7 | 0x50,
+ 26105 - 19968: jis0212<<14 | 0x20<<7 | 0x51,
+ 26106 - 19968: jis0208<<14 | 0x11<<7 | 0x01,
+ 26107 - 19968: jis0208<<14 | 0x39<<7 | 0x40,
+ 26110 - 19968: jis0212<<14 | 0x20<<7 | 0x52,
+ 26111 - 19968: jis0212<<14 | 0x20<<7 | 0x53,
+ 26112 - 19968: jis0208<<14 | 0x59<<7 | 0x13,
+ 26114 - 19968: jis0208<<14 | 0x18<<7 | 0x16,
+ 26115 - 19968: jis0208<<14 | 0x39<<7 | 0x3F,
+ 26116 - 19968: jis0212<<14 | 0x20<<7 | 0x55,
+ 26118 - 19968: jis0208<<14 | 0x19<<7 | 0x0A,
+ 26119 - 19968: jis0208<<14 | 0x1D<<7 | 0x19,
+ 26120 - 19968: jis0212<<14 | 0x20<<7 | 0x56,
+ 26121 - 19968: jis0208<<14 | 0x59<<7 | 0x16,
+ 26122 - 19968: jis0208<<14 | 0x39<<7 | 0x3E,
+ 26124 - 19968: jis0208<<14 | 0x1D<<7 | 0x1A,
+ 26125 - 19968: jis0212<<14 | 0x20<<7 | 0x58,
+ 26126 - 19968: jis0208<<14 | 0x2B<<7 | 0x1F,
+ 26127 - 19968: jis0208<<14 | 0x19<<7 | 0x09,
+ 26129 - 19968: jis0212<<14 | 0x20<<7 | 0x59,
+ 26130 - 19968: jis0212<<14 | 0x20<<7 | 0x5A,
+ 26131 - 19968: jis0208<<14 | 0x0F<<7 | 0x36,
+ 26132 - 19968: jis0208<<14 | 0x1F<<7 | 0x2D,
+ 26133 - 19968: jis0208<<14 | 0x59<<7 | 0x14,
+ 26134 - 19968: jis0212<<14 | 0x20<<7 | 0x5C,
+ 26140 - 19968: jis0208<<14 | 0x39<<7 | 0x45,
+ 26141 - 19968: jis0212<<14 | 0x20<<7 | 0x5D,
+ 26142 - 19968: jis0208<<14 | 0x59<<7 | 0x18,
+ 26143 - 19968: jis0208<<14 | 0x1F<<7 | 0x10,
+ 26144 - 19968: jis0208<<14 | 0x10<<7 | 0x26,
+ 26145 - 19968: jis0212<<14 | 0x21<<7 | 0x01,
+ 26146 - 19968: jis0212<<14 | 0x21<<7 | 0x02,
+ 26147 - 19968: jis0212<<14 | 0x21<<7 | 0x03,
+ 26148 - 19968: jis0208<<14 | 0x59<<7 | 0x19,
+ 26149 - 19968: jis0208<<14 | 0x1C<<7 | 0x34,
+ 26150 - 19968: jis0212<<14 | 0x21<<7 | 0x05,
+ 26151 - 19968: jis0208<<14 | 0x2A<<7 | 0x45,
+ 26152 - 19968: jis0208<<14 | 0x19<<7 | 0x51,
+ 26153 - 19968: jis0212<<14 | 0x21<<7 | 0x06,
+ 26154 - 19968: jis0212<<14 | 0x21<<7 | 0x07,
+ 26155 - 19968: jis0212<<14 | 0x21<<7 | 0x08,
+ 26156 - 19968: jis0212<<14 | 0x21<<7 | 0x09,
+ 26157 - 19968: jis0208<<14 | 0x1D<<7 | 0x1B,
+ 26158 - 19968: jis0208<<14 | 0x59<<7 | 0x17,
+ 26159 - 19968: jis0208<<14 | 0x1F<<7 | 0x06,
+ 26160 - 19968: jis0212<<14 | 0x21<<7 | 0x0B,
+ 26161 - 19968: jis0208<<14 | 0x58<<7 | 0x07,
+ 26163 - 19968: jis0212<<14 | 0x21<<7 | 0x0D,
+ 26164 - 19968: jis0208<<14 | 0x39<<7 | 0x44,
+ 26165 - 19968: jis0208<<14 | 0x39<<7 | 0x42,
+ 26166 - 19968: jis0208<<14 | 0x39<<7 | 0x43,
+ 26167 - 19968: jis0212<<14 | 0x21<<7 | 0x0F,
+ 26169 - 19968: jis0212<<14 | 0x21<<7 | 0x0E,
+ 26171 - 19968: jis0208<<14 | 0x59<<7 | 0x15,
+ 26172 - 19968: jis0208<<14 | 0x22<<7 | 0x4A,
+ 26175 - 19968: jis0208<<14 | 0x3A<<7 | 0x05,
+ 26176 - 19968: jis0212<<14 | 0x21<<7 | 0x10,
+ 26177 - 19968: jis0208<<14 | 0x39<<7 | 0x49,
+ 26178 - 19968: jis0208<<14 | 0x1A<<7 | 0x5D,
+ 26179 - 19968: jis0208<<14 | 0x18<<7 | 0x17,
+ 26180 - 19968: jis0208<<14 | 0x39<<7 | 0x47,
+ 26181 - 19968: jis0212<<14 | 0x21<<7 | 0x11,
+ 26182 - 19968: jis0212<<14 | 0x21<<7 | 0x12,
+ 26185 - 19968: jis0208<<14 | 0x39<<7 | 0x48,
+ 26186 - 19968: jis0212<<14 | 0x21<<7 | 0x13,
+ 26187 - 19968: jis0208<<14 | 0x1E<<7 | 0x17,
+ 26188 - 19968: jis0212<<14 | 0x21<<7 | 0x14,
+ 26190 - 19968: jis0212<<14 | 0x21<<7 | 0x16,
+ 26191 - 19968: jis0208<<14 | 0x39<<7 | 0x46,
+ 26193 - 19968: jis0212<<14 | 0x21<<7 | 0x15,
+ 26194 - 19968: jis0208<<14 | 0x1A<<7 | 0x0E,
+ 26199 - 19968: jis0208<<14 | 0x59<<7 | 0x1B,
+ 26200 - 19968: jis0212<<14 | 0x21<<7 | 0x18,
+ 26201 - 19968: jis0208<<14 | 0x59<<7 | 0x1C,
+ 26203 - 19968: jis0212<<14 | 0x21<<7 | 0x1A,
+ 26204 - 19968: jis0212<<14 | 0x21<<7 | 0x1B,
+ 26205 - 19968: jis0208<<14 | 0x39<<7 | 0x4B,
+ 26206 - 19968: jis0208<<14 | 0x39<<7 | 0x4A,
+ 26207 - 19968: jis0208<<14 | 0x39<<7 | 0x4F,
+ 26208 - 19968: jis0212<<14 | 0x21<<7 | 0x1C,
+ 26209 - 19968: jis0212<<14 | 0x21<<7 | 0x1D,
+ 26210 - 19968: jis0208<<14 | 0x39<<7 | 0x50,
+ 26212 - 19968: jis0208<<14 | 0x39<<7 | 0x4C,
+ 26213 - 19968: jis0208<<14 | 0x59<<7 | 0x1A,
+ 26214 - 19968: jis0208<<14 | 0x12<<7 | 0x01,
+ 26215 - 19968: jis0208<<14 | 0x39<<7 | 0x4D,
+ 26216 - 19968: jis0208<<14 | 0x39<<7 | 0x4E,
+ 26217 - 19968: jis0208<<14 | 0x27<<7 | 0x34,
+ 26218 - 19968: jis0212<<14 | 0x21<<7 | 0x1F,
+ 26219 - 19968: jis0212<<14 | 0x21<<7 | 0x20,
+ 26220 - 19968: jis0212<<14 | 0x21<<7 | 0x21,
+ 26222 - 19968: jis0208<<14 | 0x28<<7 | 0x40,
+ 26223 - 19968: jis0208<<14 | 0x16<<7 | 0x29,
+ 26224 - 19968: jis0208<<14 | 0x39<<7 | 0x51,
+ 26227 - 19968: jis0208<<14 | 0x59<<7 | 0x1E,
+ 26228 - 19968: jis0208<<14 | 0x1F<<7 | 0x11,
+ 26229 - 19968: jis0212<<14 | 0x21<<7 | 0x24,
+ 26230 - 19968: jis0208<<14 | 0x1D<<7 | 0x1C,
+ 26231 - 19968: jis0212<<14 | 0x21<<7 | 0x26,
+ 26232 - 19968: jis0212<<14 | 0x21<<7 | 0x27,
+ 26233 - 19968: jis0212<<14 | 0x21<<7 | 0x28,
+ 26234 - 19968: jis0208<<14 | 0x22<<7 | 0x31,
+ 26235 - 19968: jis0212<<14 | 0x21<<7 | 0x29,
+ 26236 - 19968: jis0212<<14 | 0x21<<7 | 0x2B,
+ 26238 - 19968: jis0212<<14 | 0x21<<7 | 0x22,
+ 26239 - 19968: jis0212<<14 | 0x21<<7 | 0x25,
+ 26240 - 19968: jis0212<<14 | 0x21<<7 | 0x2A,
+ 26241 - 19968: jis0208<<14 | 0x15<<7 | 0x26,
+ 26243 - 19968: jis0208<<14 | 0x39<<7 | 0x52,
+ 26244 - 19968: jis0208<<14 | 0x39<<7 | 0x56,
+ 26247 - 19968: jis0208<<14 | 0x11<<7 | 0x2A,
+ 26248 - 19968: jis0208<<14 | 0x39<<7 | 0x53,
+ 26249 - 19968: jis0208<<14 | 0x39<<7 | 0x55,
+ 26251 - 19968: jis0212<<14 | 0x21<<7 | 0x2C,
+ 26252 - 19968: jis0212<<14 | 0x21<<7 | 0x2D,
+ 26253 - 19968: jis0212<<14 | 0x21<<7 | 0x2E,
+ 26254 - 19968: jis0208<<14 | 0x39<<7 | 0x54,
+ 26256 - 19968: jis0212<<14 | 0x21<<7 | 0x2F,
+ 26257 - 19968: jis0208<<14 | 0x1C<<7 | 0x4A,
+ 26258 - 19968: jis0212<<14 | 0x21<<7 | 0x30,
+ 26262 - 19968: jis0208<<14 | 0x22<<7 | 0x27,
+ 26263 - 19968: jis0208<<14 | 0x0F<<7 | 0x24,
+ 26264 - 19968: jis0208<<14 | 0x39<<7 | 0x57,
+ 26265 - 19968: jis0208<<14 | 0x59<<7 | 0x1F,
+ 26266 - 19968: jis0212<<14 | 0x21<<7 | 0x32,
+ 26267 - 19968: jis0212<<14 | 0x21<<7 | 0x33,
+ 26268 - 19968: jis0212<<14 | 0x21<<7 | 0x34,
+ 26269 - 19968: jis0208<<14 | 0x39<<7 | 0x58,
+ 26271 - 19968: jis0212<<14 | 0x21<<7 | 0x35,
+ 26272 - 19968: jis0208<<14 | 0x59<<7 | 0x20,
+ 26274 - 19968: jis0208<<14 | 0x23<<7 | 0x09,
+ 26276 - 19968: jis0212<<14 | 0x21<<7 | 0x37,
+ 26278 - 19968: jis0208<<14 | 0x2D<<7 | 0x50,
+ 26283 - 19968: jis0208<<14 | 0x1A<<7 | 0x22,
+ 26285 - 19968: jis0212<<14 | 0x21<<7 | 0x38,
+ 26286 - 19968: jis0208<<14 | 0x29<<7 | 0x4A,
+ 26289 - 19968: jis0212<<14 | 0x21<<7 | 0x39,
+ 26290 - 19968: jis0208<<14 | 0x59<<7 | 0x21,
+ 26292 - 19968: jis0208<<14 | 0x2A<<7 | 0x1C,
+ 26293 - 19968: jis0212<<14 | 0x21<<7 | 0x3B,
+ 26296 - 19968: jis0208<<14 | 0x3A<<7 | 0x01,
+ 26297 - 19968: jis0208<<14 | 0x39<<7 | 0x5A,
+ 26299 - 19968: jis0212<<14 | 0x21<<7 | 0x3C,
+ 26300 - 19968: jis0208<<14 | 0x39<<7 | 0x5D,
+ 26302 - 19968: jis0208<<14 | 0x39<<7 | 0x5C,
+ 26303 - 19968: jis0208<<14 | 0x59<<7 | 0x22,
+ 26304 - 19968: jis0212<<14 | 0x21<<7 | 0x3E,
+ 26305 - 19968: jis0208<<14 | 0x39<<7 | 0x59,
+ 26306 - 19968: jis0212<<14 | 0x21<<7 | 0x3F,
+ 26307 - 19968: jis0212<<14 | 0x21<<7 | 0x40,
+ 26308 - 19968: jis0208<<14 | 0x3A<<7 | 0x00,
+ 26311 - 19968: jis0208<<14 | 0x25<<7 | 0x3D,
+ 26312 - 19968: jis0212<<14 | 0x21<<7 | 0x41,
+ 26313 - 19968: jis0208<<14 | 0x39<<7 | 0x5B,
+ 26316 - 19968: jis0212<<14 | 0x21<<7 | 0x42,
+ 26318 - 19968: jis0212<<14 | 0x21<<7 | 0x43,
+ 26319 - 19968: jis0212<<14 | 0x21<<7 | 0x44,
+ 26324 - 19968: jis0212<<14 | 0x21<<7 | 0x45,
+ 26326 - 19968: jis0208<<14 | 0x3A<<7 | 0x02,
+ 26329 - 19968: jis0208<<14 | 0x1C<<7 | 0x4B,
+ 26330 - 19968: jis0208<<14 | 0x3A<<7 | 0x03,
+ 26331 - 19968: jis0212<<14 | 0x21<<7 | 0x46,
+ 26332 - 19968: jis0208<<14 | 0x2C<<7 | 0x2A,
+ 26333 - 19968: jis0208<<14 | 0x26<<7 | 0x57,
+ 26335 - 19968: jis0212<<14 | 0x21<<7 | 0x47,
+ 26336 - 19968: jis0208<<14 | 0x3A<<7 | 0x04,
+ 26342 - 19968: jis0208<<14 | 0x3A<<7 | 0x06,
+ 26344 - 19968: jis0212<<14 | 0x21<<7 | 0x48,
+ 26345 - 19968: jis0208<<14 | 0x3A<<7 | 0x07,
+ 26347 - 19968: jis0212<<14 | 0x21<<7 | 0x49,
+ 26348 - 19968: jis0212<<14 | 0x21<<7 | 0x4A,
+ 26350 - 19968: jis0212<<14 | 0x21<<7 | 0x4B,
+ 26352 - 19968: jis0208<<14 | 0x3A<<7 | 0x08,
+ 26354 - 19968: jis0208<<14 | 0x15<<7 | 0x29,
+ 26355 - 19968: jis0208<<14 | 0x10<<7 | 0x27,
+ 26356 - 19968: jis0208<<14 | 0x18<<7 | 0x18,
+ 26357 - 19968: jis0208<<14 | 0x3A<<7 | 0x09,
+ 26359 - 19968: jis0208<<14 | 0x3A<<7 | 0x0A,
+ 26360 - 19968: jis0208<<14 | 0x1C<<7 | 0x50,
+ 26361 - 19968: jis0208<<14 | 0x20<<7 | 0x41,
+ 26362 - 19968: jis0208<<14 | 0x59<<7 | 0x23,
+ 26363 - 19968: jis0208<<14 | 0x58<<7 | 0x0A,
+ 26364 - 19968: jis0208<<14 | 0x31<<7 | 0x37,
+ 26365 - 19968: jis0208<<14 | 0x20<<7 | 0x1D,
+ 26366 - 19968: jis0208<<14 | 0x20<<7 | 0x1C,
+ 26367 - 19968: jis0208<<14 | 0x21<<7 | 0x37,
+ 26368 - 19968: jis0208<<14 | 0x19<<7 | 0x26,
+ 26371 - 19968: jis0208<<14 | 0x2F<<7 | 0x51,
+ 26373 - 19968: jis0212<<14 | 0x21<<7 | 0x4D,
+ 26375 - 19968: jis0212<<14 | 0x21<<7 | 0x4E,
+ 26376 - 19968: jis0208<<14 | 0x16<<7 | 0x4D,
+ 26377 - 19968: jis0208<<14 | 0x2C<<7 | 0x0C,
+ 26379 - 19968: jis0208<<14 | 0x29<<7 | 0x5D,
+ 26381 - 19968: jis0208<<14 | 0x28<<7 | 0x5D,
+ 26382 - 19968: jis0208<<14 | 0x59<<7 | 0x24,
+ 26383 - 19968: jis0208<<14 | 0x3A<<7 | 0x0B,
+ 26387 - 19968: jis0212<<14 | 0x21<<7 | 0x50,
+ 26388 - 19968: jis0208<<14 | 0x19<<7 | 0x52,
+ 26389 - 19968: jis0208<<14 | 0x23<<7 | 0x1E,
+ 26390 - 19968: jis0208<<14 | 0x3A<<7 | 0x0C,
+ 26391 - 19968: jis0208<<14 | 0x2E<<7 | 0x0E,
+ 26393 - 19968: jis0212<<14 | 0x21<<7 | 0x51,
+ 26395 - 19968: jis0208<<14 | 0x2A<<7 | 0x1D,
+ 26396 - 19968: jis0212<<14 | 0x21<<7 | 0x52,
+ 26397 - 19968: jis0208<<14 | 0x23<<7 | 0x0A,
+ 26398 - 19968: jis0208<<14 | 0x3A<<7 | 0x0D,
+ 26399 - 19968: jis0208<<14 | 0x13<<7 | 0x5B,
+ 26400 - 19968: jis0212<<14 | 0x21<<7 | 0x53,
+ 26402 - 19968: jis0212<<14 | 0x21<<7 | 0x54,
+ 26406 - 19968: jis0208<<14 | 0x3A<<7 | 0x0E,
+ 26407 - 19968: jis0208<<14 | 0x3A<<7 | 0x0F,
+ 26408 - 19968: jis0208<<14 | 0x2B<<7 | 0x39,
+ 26410 - 19968: jis0208<<14 | 0x2B<<7 | 0x03,
+ 26411 - 19968: jis0208<<14 | 0x2A<<7 | 0x55,
+ 26412 - 19968: jis0208<<14 | 0x2A<<7 | 0x3B,
+ 26413 - 19968: jis0208<<14 | 0x1A<<7 | 0x04,
+ 26414 - 19968: jis0208<<14 | 0x3A<<7 | 0x11,
+ 26417 - 19968: jis0208<<14 | 0x1B<<7 | 0x4A,
+ 26419 - 19968: jis0212<<14 | 0x21<<7 | 0x55,
+ 26420 - 19968: jis0208<<14 | 0x2A<<7 | 0x30,
+ 26422 - 19968: jis0208<<14 | 0x3A<<7 | 0x13,
+ 26423 - 19968: jis0208<<14 | 0x3A<<7 | 0x16,
+ 26424 - 19968: jis0208<<14 | 0x3A<<7 | 0x15,
+ 26426 - 19968: jis0208<<14 | 0x13<<7 | 0x58,
+ 26429 - 19968: jis0208<<14 | 0x14<<7 | 0x3F,
+ 26430 - 19968: jis0212<<14 | 0x21<<7 | 0x56,
+ 26431 - 19968: jis0208<<14 | 0x3A<<7 | 0x12,
+ 26433 - 19968: jis0208<<14 | 0x3A<<7 | 0x14,
+ 26437 - 19968: jis0212<<14 | 0x21<<7 | 0x57,
+ 26438 - 19968: jis0208<<14 | 0x3A<<7 | 0x17,
+ 26439 - 19968: jis0212<<14 | 0x21<<7 | 0x58,
+ 26440 - 19968: jis0212<<14 | 0x21<<7 | 0x59,
+ 26441 - 19968: jis0208<<14 | 0x1E<<7 | 0x58,
+ 26444 - 19968: jis0212<<14 | 0x21<<7 | 0x5A,
+ 26446 - 19968: jis0208<<14 | 0x2C<<7 | 0x5A,
+ 26447 - 19968: jis0208<<14 | 0x0F<<7 | 0x28,
+ 26448 - 19968: jis0208<<14 | 0x19<<7 | 0x3F,
+ 26449 - 19968: jis0208<<14 | 0x21<<7 | 0x1B,
+ 26451 - 19968: jis0208<<14 | 0x1B<<7 | 0x3C,
+ 26452 - 19968: jis0212<<14 | 0x21<<7 | 0x5B,
+ 26453 - 19968: jis0212<<14 | 0x21<<7 | 0x5C,
+ 26454 - 19968: jis0208<<14 | 0x1D<<7 | 0x52,
+ 26457 - 19968: jis0208<<14 | 0x3A<<7 | 0x1A,
+ 26460 - 19968: jis0208<<14 | 0x24<<7 | 0x2D,
+ 26461 - 19968: jis0212<<14 | 0x21<<7 | 0x5D,
+ 26462 - 19968: jis0208<<14 | 0x3A<<7 | 0x18,
+ 26463 - 19968: jis0208<<14 | 0x21<<7 | 0x0A,
+ 26464 - 19968: jis0208<<14 | 0x3A<<7 | 0x19,
+ 26465 - 19968: jis0208<<14 | 0x1D<<7 | 0x51,
+ 26466 - 19968: jis0208<<14 | 0x2B<<7 | 0x3C,
+ 26467 - 19968: jis0208<<14 | 0x3A<<7 | 0x1B,
+ 26468 - 19968: jis0208<<14 | 0x3A<<7 | 0x1C,
+ 26469 - 19968: jis0208<<14 | 0x2C<<7 | 0x47,
+ 26470 - 19968: jis0208<<14 | 0x59<<7 | 0x26,
+ 26474 - 19968: jis0208<<14 | 0x3A<<7 | 0x21,
+ 26476 - 19968: jis0212<<14 | 0x22<<7 | 0x01,
+ 26477 - 19968: jis0208<<14 | 0x18<<7 | 0x19,
+ 26478 - 19968: jis0212<<14 | 0x22<<7 | 0x02,
+ 26479 - 19968: jis0208<<14 | 0x26<<7 | 0x34,
+ 26480 - 19968: jis0208<<14 | 0x3A<<7 | 0x1E,
+ 26481 - 19968: jis0208<<14 | 0x24<<7 | 0x4B,
+ 26482 - 19968: jis0208<<14 | 0x39<<7 | 0x3D,
+ 26483 - 19968: jis0208<<14 | 0x39<<7 | 0x41,
+ 26484 - 19968: jis0212<<14 | 0x22<<7 | 0x03,
+ 26485 - 19968: jis0208<<14 | 0x14<<7 | 0x2E,
+ 26486 - 19968: jis0212<<14 | 0x22<<7 | 0x04,
+ 26487 - 19968: jis0208<<14 | 0x26<<7 | 0x26,
+ 26491 - 19968: jis0212<<14 | 0x22<<7 | 0x05,
+ 26492 - 19968: jis0208<<14 | 0x3A<<7 | 0x20,
+ 26494 - 19968: jis0208<<14 | 0x1D<<7 | 0x1D,
+ 26495 - 19968: jis0208<<14 | 0x27<<7 | 0x23,
+ 26497 - 19968: jis0212<<14 | 0x22<<7 | 0x06,
+ 26500 - 19968: jis0212<<14 | 0x22<<7 | 0x07,
+ 26501 - 19968: jis0208<<14 | 0x3A<<7 | 0x26,
+ 26503 - 19968: jis0208<<14 | 0x27<<7 | 0x59,
+ 26505 - 19968: jis0208<<14 | 0x3A<<7 | 0x1D,
+ 26507 - 19968: jis0208<<14 | 0x3A<<7 | 0x23,
+ 26508 - 19968: jis0208<<14 | 0x3A<<7 | 0x22,
+ 26510 - 19968: jis0212<<14 | 0x22<<7 | 0x08,
+ 26511 - 19968: jis0212<<14 | 0x22<<7 | 0x09,
+ 26512 - 19968: jis0208<<14 | 0x1F<<7 | 0x2E,
+ 26513 - 19968: jis0212<<14 | 0x22<<7 | 0x0A,
+ 26515 - 19968: jis0212<<14 | 0x22<<7 | 0x0B,
+ 26517 - 19968: jis0208<<14 | 0x2A<<7 | 0x4C,
+ 26518 - 19968: jis0212<<14 | 0x22<<7 | 0x0C,
+ 26519 - 19968: jis0208<<14 | 0x2D<<7 | 0x32,
+ 26520 - 19968: jis0212<<14 | 0x22<<7 | 0x0D,
+ 26521 - 19968: jis0212<<14 | 0x22<<7 | 0x0E,
+ 26522 - 19968: jis0208<<14 | 0x2A<<7 | 0x46,
+ 26523 - 19968: jis0212<<14 | 0x22<<7 | 0x0F,
+ 26524 - 19968: jis0208<<14 | 0x11<<7 | 0x2B,
+ 26525 - 19968: jis0208<<14 | 0x1A<<7 | 0x3D,
+ 26528 - 19968: jis0208<<14 | 0x2E<<7 | 0x27,
+ 26529 - 19968: jis0208<<14 | 0x3A<<7 | 0x25,
+ 26530 - 19968: jis0208<<14 | 0x1E<<7 | 0x54,
+ 26534 - 19968: jis0208<<14 | 0x3A<<7 | 0x24,
+ 26537 - 19968: jis0208<<14 | 0x3A<<7 | 0x1F,
+ 26543 - 19968: jis0208<<14 | 0x17<<7 | 0x2E,
+ 26544 - 19968: jis0212<<14 | 0x22<<7 | 0x10,
+ 26545 - 19968: jis0212<<14 | 0x22<<7 | 0x11,
+ 26546 - 19968: jis0212<<14 | 0x22<<7 | 0x12,
+ 26547 - 19968: jis0208<<14 | 0x3A<<7 | 0x2B,
+ 26548 - 19968: jis0208<<14 | 0x3A<<7 | 0x29,
+ 26549 - 19968: jis0212<<14 | 0x22<<7 | 0x13,
+ 26550 - 19968: jis0208<<14 | 0x11<<7 | 0x2C,
+ 26551 - 19968: jis0208<<14 | 0x3A<<7 | 0x27,
+ 26552 - 19968: jis0208<<14 | 0x3A<<7 | 0x2D,
+ 26553 - 19968: jis0208<<14 | 0x3A<<7 | 0x33,
+ 26555 - 19968: jis0208<<14 | 0x59<<7 | 0x27,
+ 26556 - 19968: jis0212<<14 | 0x22<<7 | 0x15,
+ 26557 - 19968: jis0212<<14 | 0x22<<7 | 0x16,
+ 26560 - 19968: jis0208<<14 | 0x59<<7 | 0x29,
+ 26561 - 19968: jis0208<<14 | 0x21<<7 | 0x27,
+ 26562 - 19968: jis0212<<14 | 0x22<<7 | 0x19,
+ 26563 - 19968: jis0212<<14 | 0x22<<7 | 0x1A,
+ 26564 - 19968: jis0208<<14 | 0x29<<7 | 0x20,
+ 26565 - 19968: jis0212<<14 | 0x22<<7 | 0x1B,
+ 26566 - 19968: jis0208<<14 | 0x3A<<7 | 0x35,
+ 26568 - 19968: jis0212<<14 | 0x22<<7 | 0x1C,
+ 26569 - 19968: jis0212<<14 | 0x22<<7 | 0x1D,
+ 26570 - 19968: jis0208<<14 | 0x28<<7 | 0x01,
+ 26574 - 19968: jis0208<<14 | 0x3A<<7 | 0x34,
+ 26575 - 19968: jis0208<<14 | 0x26<<7 | 0x4F,
+ 26576 - 19968: jis0208<<14 | 0x2A<<7 | 0x1E,
+ 26577 - 19968: jis0208<<14 | 0x13<<7 | 0x1A,
+ 26578 - 19968: jis0212<<14 | 0x22<<7 | 0x1E,
+ 26579 - 19968: jis0208<<14 | 0x1F<<7 | 0x56,
+ 26580 - 19968: jis0208<<14 | 0x1C<<7 | 0x1F,
+ 26583 - 19968: jis0212<<14 | 0x22<<7 | 0x1F,
+ 26584 - 19968: jis0208<<14 | 0x23<<7 | 0x32,
+ 26585 - 19968: jis0212<<14 | 0x22<<7 | 0x20,
+ 26586 - 19968: jis0208<<14 | 0x2C<<7 | 0x0D,
+ 26588 - 19968: jis0212<<14 | 0x22<<7 | 0x21,
+ 26589 - 19968: jis0208<<14 | 0x3A<<7 | 0x30,
+ 26590 - 19968: jis0208<<14 | 0x3A<<7 | 0x2F,
+ 26593 - 19968: jis0212<<14 | 0x22<<7 | 0x22,
+ 26594 - 19968: jis0208<<14 | 0x3A<<7 | 0x31,
+ 26596 - 19968: jis0208<<14 | 0x3A<<7 | 0x2E,
+ 26598 - 19968: jis0212<<14 | 0x22<<7 | 0x23,
+ 26599 - 19968: jis0208<<14 | 0x3A<<7 | 0x36,
+ 26601 - 19968: jis0208<<14 | 0x3A<<7 | 0x2C,
+ 26604 - 19968: jis0208<<14 | 0x3A<<7 | 0x2A,
+ 26606 - 19968: jis0208<<14 | 0x3A<<7 | 0x32,
+ 26607 - 19968: jis0208<<14 | 0x3A<<7 | 0x28,
+ 26608 - 19968: jis0212<<14 | 0x22<<7 | 0x24,
+ 26609 - 19968: jis0208<<14 | 0x22<<7 | 0x4B,
+ 26610 - 19968: jis0212<<14 | 0x22<<7 | 0x25,
+ 26611 - 19968: jis0208<<14 | 0x2B<<7 | 0x57,
+ 26612 - 19968: jis0208<<14 | 0x1B<<7 | 0x25,
+ 26613 - 19968: jis0208<<14 | 0x19<<7 | 0x53,
+ 26614 - 19968: jis0212<<14 | 0x22<<7 | 0x26,
+ 26615 - 19968: jis0212<<14 | 0x22<<7 | 0x27,
+ 26617 - 19968: jis0212<<14 | 0x22<<7 | 0x17,
+ 26619 - 19968: jis0208<<14 | 0x19<<7 | 0x19,
+ 26622 - 19968: jis0208<<14 | 0x2A<<7 | 0x4E,
+ 26623 - 19968: jis0208<<14 | 0x12<<7 | 0x20,
+ 26625 - 19968: jis0208<<14 | 0x59<<7 | 0x2A,
+ 26626 - 19968: jis0208<<14 | 0x23<<7 | 0x2D,
+ 26627 - 19968: jis0208<<14 | 0x25<<7 | 0x29,
+ 26628 - 19968: jis0208<<14 | 0x10<<7 | 0x28,
+ 26643 - 19968: jis0208<<14 | 0x1F<<7 | 0x51,
+ 26644 - 19968: jis0212<<14 | 0x22<<7 | 0x29,
+ 26646 - 19968: jis0208<<14 | 0x1F<<7 | 0x13,
+ 26647 - 19968: jis0208<<14 | 0x16<<7 | 0x09,
+ 26649 - 19968: jis0212<<14 | 0x22<<7 | 0x2A,
+ 26653 - 19968: jis0212<<14 | 0x22<<7 | 0x2B,
+ 26654 - 19968: jis0208<<14 | 0x3A<<7 | 0x38,
+ 26655 - 19968: jis0212<<14 | 0x22<<7 | 0x2C,
+ 26657 - 19968: jis0208<<14 | 0x18<<7 | 0x1A,
+ 26658 - 19968: jis0208<<14 | 0x12<<7 | 0x5B,
+ 26663 - 19968: jis0212<<14 | 0x22<<7 | 0x2E,
+ 26664 - 19968: jis0212<<14 | 0x22<<7 | 0x2D,
+ 26665 - 19968: jis0208<<14 | 0x3A<<7 | 0x3A,
+ 26666 - 19968: jis0208<<14 | 0x12<<7 | 0x53,
+ 26667 - 19968: jis0208<<14 | 0x3A<<7 | 0x40,
+ 26668 - 19968: jis0212<<14 | 0x22<<7 | 0x2F,
+ 26669 - 19968: jis0212<<14 | 0x22<<7 | 0x30,
+ 26671 - 19968: jis0212<<14 | 0x22<<7 | 0x31,
+ 26672 - 19968: jis0212<<14 | 0x22<<7 | 0x32,
+ 26673 - 19968: jis0212<<14 | 0x22<<7 | 0x33,
+ 26674 - 19968: jis0208<<14 | 0x3A<<7 | 0x3D,
+ 26675 - 19968: jis0212<<14 | 0x22<<7 | 0x34,
+ 26676 - 19968: jis0208<<14 | 0x1F<<7 | 0x52,
+ 26680 - 19968: jis0208<<14 | 0x12<<7 | 0x2A,
+ 26681 - 19968: jis0208<<14 | 0x19<<7 | 0x0B,
+ 26683 - 19968: jis0212<<14 | 0x22<<7 | 0x35,
+ 26684 - 19968: jis0208<<14 | 0x12<<7 | 0x29,
+ 26685 - 19968: jis0208<<14 | 0x19<<7 | 0x2E,
+ 26687 - 19968: jis0212<<14 | 0x22<<7 | 0x36,
+ 26688 - 19968: jis0208<<14 | 0x3A<<7 | 0x3B,
+ 26689 - 19968: jis0208<<14 | 0x16<<7 | 0x44,
+ 26690 - 19968: jis0208<<14 | 0x16<<7 | 0x2A,
+ 26691 - 19968: jis0208<<14 | 0x24<<7 | 0x4C,
+ 26692 - 19968: jis0208<<14 | 0x59<<7 | 0x2B,
+ 26693 - 19968: jis0212<<14 | 0x22<<7 | 0x38,
+ 26694 - 19968: jis0208<<14 | 0x3A<<7 | 0x39,
+ 26696 - 19968: jis0208<<14 | 0x0F<<7 | 0x25,
+ 26698 - 19968: jis0212<<14 | 0x22<<7 | 0x39,
+ 26700 - 19968: jis0212<<14 | 0x22<<7 | 0x3A,
+ 26701 - 19968: jis0208<<14 | 0x3A<<7 | 0x3C,
+ 26702 - 19968: jis0208<<14 | 0x3A<<7 | 0x3E,
+ 26704 - 19968: jis0208<<14 | 0x15<<7 | 0x2C,
+ 26705 - 19968: jis0208<<14 | 0x16<<7 | 0x0B,
+ 26706 - 19968: jis0208<<14 | 0x59<<7 | 0x28,
+ 26707 - 19968: jis0208<<14 | 0x13<<7 | 0x1B,
+ 26708 - 19968: jis0208<<14 | 0x14<<7 | 0x2A,
+ 26709 - 19968: jis0212<<14 | 0x22<<7 | 0x3B,
+ 26711 - 19968: jis0212<<14 | 0x22<<7 | 0x3C,
+ 26712 - 19968: jis0212<<14 | 0x22<<7 | 0x3D,
+ 26713 - 19968: jis0208<<14 | 0x3A<<7 | 0x41,
+ 26715 - 19968: jis0212<<14 | 0x22<<7 | 0x3E,
+ 26716 - 19968: jis0208<<14 | 0x19<<7 | 0x58,
+ 26717 - 19968: jis0208<<14 | 0x2A<<7 | 0x50,
+ 26719 - 19968: jis0208<<14 | 0x1A<<7 | 0x16,
+ 26723 - 19968: jis0208<<14 | 0x3A<<7 | 0x42,
+ 26727 - 19968: jis0208<<14 | 0x28<<7 | 0x0F,
+ 26731 - 19968: jis0212<<14 | 0x22<<7 | 0x3F,
+ 26734 - 19968: jis0212<<14 | 0x22<<7 | 0x40,
+ 26735 - 19968: jis0212<<14 | 0x22<<7 | 0x41,
+ 26736 - 19968: jis0212<<14 | 0x22<<7 | 0x42,
+ 26737 - 19968: jis0212<<14 | 0x22<<7 | 0x43,
+ 26738 - 19968: jis0212<<14 | 0x22<<7 | 0x44,
+ 26740 - 19968: jis0208<<14 | 0x3A<<7 | 0x4E,
+ 26741 - 19968: jis0212<<14 | 0x22<<7 | 0x45,
+ 26742 - 19968: jis0208<<14 | 0x11<<7 | 0x12,
+ 26743 - 19968: jis0208<<14 | 0x3A<<7 | 0x43,
+ 26745 - 19968: jis0212<<14 | 0x22<<7 | 0x46,
+ 26746 - 19968: jis0212<<14 | 0x22<<7 | 0x47,
+ 26747 - 19968: jis0212<<14 | 0x22<<7 | 0x48,
+ 26748 - 19968: jis0212<<14 | 0x22<<7 | 0x49,
+ 26750 - 19968: jis0208<<14 | 0x3A<<7 | 0x54,
+ 26751 - 19968: jis0208<<14 | 0x3A<<7 | 0x44,
+ 26753 - 19968: jis0208<<14 | 0x2D<<7 | 0x21,
+ 26754 - 19968: jis0212<<14 | 0x22<<7 | 0x4A,
+ 26755 - 19968: jis0208<<14 | 0x3A<<7 | 0x4B,
+ 26756 - 19968: jis0212<<14 | 0x22<<7 | 0x4B,
+ 26757 - 19968: jis0208<<14 | 0x26<<7 | 0x3E,
+ 26758 - 19968: jis0212<<14 | 0x22<<7 | 0x4C,
+ 26760 - 19968: jis0212<<14 | 0x22<<7 | 0x4D,
+ 26765 - 19968: jis0208<<14 | 0x3A<<7 | 0x53,
+ 26767 - 19968: jis0208<<14 | 0x3A<<7 | 0x46,
+ 26771 - 19968: jis0208<<14 | 0x0F<<7 | 0x13,
+ 26772 - 19968: jis0208<<14 | 0x3A<<7 | 0x48,
+ 26774 - 19968: jis0212<<14 | 0x22<<7 | 0x4E,
+ 26775 - 19968: jis0208<<14 | 0x18<<7 | 0x1B,
+ 26776 - 19968: jis0212<<14 | 0x22<<7 | 0x4F,
+ 26778 - 19968: jis0212<<14 | 0x22<<7 | 0x50,
+ 26779 - 19968: jis0208<<14 | 0x3A<<7 | 0x4A,
+ 26780 - 19968: jis0212<<14 | 0x22<<7 | 0x51,
+ 26781 - 19968: jis0208<<14 | 0x3A<<7 | 0x49,
+ 26783 - 19968: jis0208<<14 | 0x3A<<7 | 0x45,
+ 26784 - 19968: jis0208<<14 | 0x3A<<7 | 0x50,
+ 26785 - 19968: jis0212<<14 | 0x22<<7 | 0x52,
+ 26786 - 19968: jis0208<<14 | 0x1D<<7 | 0x1E,
+ 26787 - 19968: jis0212<<14 | 0x22<<7 | 0x53,
+ 26789 - 19968: jis0212<<14 | 0x22<<7 | 0x54,
+ 26790 - 19968: jis0208<<14 | 0x33<<7 | 0x4C,
+ 26791 - 19968: jis0208<<14 | 0x17<<7 | 0x47,
+ 26792 - 19968: jis0208<<14 | 0x2C<<7 | 0x5B,
+ 26793 - 19968: jis0212<<14 | 0x22<<7 | 0x55,
+ 26794 - 19968: jis0212<<14 | 0x22<<7 | 0x56,
+ 26797 - 19968: jis0208<<14 | 0x3A<<7 | 0x47,
+ 26798 - 19968: jis0212<<14 | 0x22<<7 | 0x57,
+ 26799 - 19968: jis0208<<14 | 0x23<<7 | 0x53,
+ 26800 - 19968: jis0208<<14 | 0x12<<7 | 0x02,
+ 26801 - 19968: jis0208<<14 | 0x19<<7 | 0x0C,
+ 26802 - 19968: jis0212<<14 | 0x22<<7 | 0x58,
+ 26803 - 19968: jis0208<<14 | 0x3A<<7 | 0x3F,
+ 26805 - 19968: jis0208<<14 | 0x3A<<7 | 0x4F,
+ 26806 - 19968: jis0208<<14 | 0x12<<7 | 0x40,
+ 26809 - 19968: jis0208<<14 | 0x3A<<7 | 0x4D,
+ 26810 - 19968: jis0208<<14 | 0x3A<<7 | 0x51,
+ 26811 - 19968: jis0212<<14 | 0x22<<7 | 0x59,
+ 26812 - 19968: jis0208<<14 | 0x24<<7 | 0x4D,
+ 26820 - 19968: jis0208<<14 | 0x13<<7 | 0x5D,
+ 26821 - 19968: jis0212<<14 | 0x22<<7 | 0x5A,
+ 26822 - 19968: jis0208<<14 | 0x3B<<7 | 0x11,
+ 26824 - 19968: jis0208<<14 | 0x58<<7 | 0x08,
+ 26825 - 19968: jis0208<<14 | 0x2B<<7 | 0x28,
+ 26826 - 19968: jis0208<<14 | 0x3A<<7 | 0x56,
+ 26827 - 19968: jis0208<<14 | 0x13<<7 | 0x5C,
+ 26828 - 19968: jis0212<<14 | 0x22<<7 | 0x5C,
+ 26829 - 19968: jis0208<<14 | 0x3A<<7 | 0x5D,
+ 26831 - 19968: jis0208<<14 | 0x59<<7 | 0x2C,
+ 26832 - 19968: jis0212<<14 | 0x23<<7 | 0x00,
+ 26833 - 19968: jis0212<<14 | 0x23<<7 | 0x01,
+ 26834 - 19968: jis0208<<14 | 0x2A<<7 | 0x1F,
+ 26835 - 19968: jis0212<<14 | 0x23<<7 | 0x02,
+ 26836 - 19968: jis0208<<14 | 0x3B<<7 | 0x00,
+ 26837 - 19968: jis0208<<14 | 0x3B<<7 | 0x02,
+ 26838 - 19968: jis0212<<14 | 0x23<<7 | 0x03,
+ 26839 - 19968: jis0208<<14 | 0x3B<<7 | 0x06,
+ 26840 - 19968: jis0208<<14 | 0x3A<<7 | 0x58,
+ 26841 - 19968: jis0212<<14 | 0x23<<7 | 0x04,
+ 26842 - 19968: jis0208<<14 | 0x22<<7 | 0x09,
+ 26844 - 19968: jis0212<<14 | 0x23<<7 | 0x05,
+ 26845 - 19968: jis0212<<14 | 0x23<<7 | 0x06,
+ 26847 - 19968: jis0208<<14 | 0x24<<7 | 0x4E,
+ 26848 - 19968: jis0208<<14 | 0x3B<<7 | 0x0A,
+ 26849 - 19968: jis0208<<14 | 0x3A<<7 | 0x5B,
+ 26851 - 19968: jis0208<<14 | 0x3B<<7 | 0x07,
+ 26853 - 19968: jis0212<<14 | 0x23<<7 | 0x07,
+ 26855 - 19968: jis0208<<14 | 0x3B<<7 | 0x01,
+ 26856 - 19968: jis0212<<14 | 0x23<<7 | 0x08,
+ 26858 - 19968: jis0212<<14 | 0x23<<7 | 0x09,
+ 26859 - 19968: jis0212<<14 | 0x23<<7 | 0x0A,
+ 26860 - 19968: jis0212<<14 | 0x23<<7 | 0x0B,
+ 26861 - 19968: jis0212<<14 | 0x23<<7 | 0x0C,
+ 26862 - 19968: jis0208<<14 | 0x1E<<7 | 0x18,
+ 26863 - 19968: jis0208<<14 | 0x3B<<7 | 0x0B,
+ 26864 - 19968: jis0212<<14 | 0x23<<7 | 0x0D,
+ 26865 - 19968: jis0212<<14 | 0x23<<7 | 0x0E,
+ 26866 - 19968: jis0208<<14 | 0x1F<<7 | 0x12,
+ 26869 - 19968: jis0212<<14 | 0x23<<7 | 0x0F,
+ 26870 - 19968: jis0212<<14 | 0x23<<7 | 0x10,
+ 26873 - 19968: jis0208<<14 | 0x3B<<7 | 0x09,
+ 26874 - 19968: jis0208<<14 | 0x13<<7 | 0x1C,
+ 26875 - 19968: jis0212<<14 | 0x23<<7 | 0x11,
+ 26876 - 19968: jis0212<<14 | 0x23<<7 | 0x12,
+ 26877 - 19968: jis0212<<14 | 0x23<<7 | 0x13,
+ 26880 - 19968: jis0208<<14 | 0x2E<<7 | 0x2F,
+ 26881 - 19968: jis0208<<14 | 0x3A<<7 | 0x55,
+ 26884 - 19968: jis0208<<14 | 0x3B<<7 | 0x05,
+ 26885 - 19968: jis0208<<14 | 0x0F<<7 | 0x37,
+ 26886 - 19968: jis0212<<14 | 0x23<<7 | 0x14,
+ 26888 - 19968: jis0208<<14 | 0x3A<<7 | 0x57,
+ 26889 - 19968: jis0212<<14 | 0x23<<7 | 0x15,
+ 26890 - 19968: jis0212<<14 | 0x23<<7 | 0x16,
+ 26891 - 19968: jis0208<<14 | 0x2B<<7 | 0x19,
+ 26892 - 19968: jis0208<<14 | 0x3A<<7 | 0x5C,
+ 26893 - 19968: jis0208<<14 | 0x1E<<7 | 0x01,
+ 26894 - 19968: jis0208<<14 | 0x23<<7 | 0x26,
+ 26895 - 19968: jis0208<<14 | 0x3A<<7 | 0x52,
+ 26896 - 19968: jis0212<<14 | 0x23<<7 | 0x17,
+ 26897 - 19968: jis0212<<14 | 0x23<<7 | 0x18,
+ 26898 - 19968: jis0208<<14 | 0x3B<<7 | 0x04,
+ 26899 - 19968: jis0212<<14 | 0x23<<7 | 0x19,
+ 26902 - 19968: jis0212<<14 | 0x23<<7 | 0x1A,
+ 26903 - 19968: jis0212<<14 | 0x23<<7 | 0x1B,
+ 26905 - 19968: jis0208<<14 | 0x1E<<7 | 0x59,
+ 26906 - 19968: jis0208<<14 | 0x3B<<7 | 0x0E,
+ 26907 - 19968: jis0208<<14 | 0x12<<7 | 0x50,
+ 26908 - 19968: jis0208<<14 | 0x17<<7 | 0x00,
+ 26913 - 19968: jis0208<<14 | 0x3B<<7 | 0x10,
+ 26914 - 19968: jis0208<<14 | 0x3A<<7 | 0x59,
+ 26915 - 19968: jis0208<<14 | 0x3B<<7 | 0x0F,
+ 26917 - 19968: jis0208<<14 | 0x3B<<7 | 0x08,
+ 26918 - 19968: jis0208<<14 | 0x3A<<7 | 0x5A,
+ 26920 - 19968: jis0208<<14 | 0x3B<<7 | 0x0C,
+ 26922 - 19968: jis0208<<14 | 0x3B<<7 | 0x0D,
+ 26928 - 19968: jis0208<<14 | 0x3B<<7 | 0x1E,
+ 26929 - 19968: jis0212<<14 | 0x23<<7 | 0x1C,
+ 26931 - 19968: jis0212<<14 | 0x23<<7 | 0x1D,
+ 26932 - 19968: jis0208<<14 | 0x25<<7 | 0x2D,
+ 26933 - 19968: jis0212<<14 | 0x23<<7 | 0x1E,
+ 26934 - 19968: jis0208<<14 | 0x3B<<7 | 0x03,
+ 26936 - 19968: jis0212<<14 | 0x23<<7 | 0x1F,
+ 26937 - 19968: jis0208<<14 | 0x3B<<7 | 0x1A,
+ 26939 - 19968: jis0212<<14 | 0x23<<7 | 0x20,
+ 26941 - 19968: jis0208<<14 | 0x3B<<7 | 0x1C,
+ 26943 - 19968: jis0208<<14 | 0x23<<7 | 0x37,
+ 26946 - 19968: jis0212<<14 | 0x23<<7 | 0x21,
+ 26949 - 19968: jis0212<<14 | 0x23<<7 | 0x22,
+ 26953 - 19968: jis0212<<14 | 0x23<<7 | 0x23,
+ 26954 - 19968: jis0208<<14 | 0x2C<<7 | 0x2B,
+ 26958 - 19968: jis0212<<14 | 0x23<<7 | 0x24,
+ 26963 - 19968: jis0208<<14 | 0x28<<7 | 0x55,
+ 26964 - 19968: jis0208<<14 | 0x3B<<7 | 0x17,
+ 26965 - 19968: jis0208<<14 | 0x21<<7 | 0x29,
+ 26967 - 19968: jis0212<<14 | 0x23<<7 | 0x25,
+ 26969 - 19968: jis0208<<14 | 0x3B<<7 | 0x1D,
+ 26970 - 19968: jis0208<<14 | 0x20<<7 | 0x1E,
+ 26971 - 19968: jis0212<<14 | 0x23<<7 | 0x26,
+ 26972 - 19968: jis0208<<14 | 0x3B<<7 | 0x14,
+ 26973 - 19968: jis0208<<14 | 0x3B<<7 | 0x21,
+ 26974 - 19968: jis0208<<14 | 0x3B<<7 | 0x20,
+ 26976 - 19968: jis0208<<14 | 0x25<<7 | 0x4E,
+ 26977 - 19968: jis0208<<14 | 0x3B<<7 | 0x1F,
+ 26978 - 19968: jis0208<<14 | 0x25<<7 | 0x49,
+ 26979 - 19968: jis0212<<14 | 0x23<<7 | 0x27,
+ 26980 - 19968: jis0212<<14 | 0x23<<7 | 0x28,
+ 26981 - 19968: jis0212<<14 | 0x23<<7 | 0x29,
+ 26982 - 19968: jis0212<<14 | 0x23<<7 | 0x2A,
+ 26984 - 19968: jis0208<<14 | 0x59<<7 | 0x2E,
+ 26985 - 19968: jis0212<<14 | 0x23<<7 | 0x2C,
+ 26986 - 19968: jis0208<<14 | 0x3B<<7 | 0x23,
+ 26987 - 19968: jis0208<<14 | 0x3B<<7 | 0x16,
+ 26988 - 19968: jis0212<<14 | 0x23<<7 | 0x2D,
+ 26989 - 19968: jis0208<<14 | 0x15<<7 | 0x27,
+ 26990 - 19968: jis0208<<14 | 0x3B<<7 | 0x19,
+ 26991 - 19968: jis0208<<14 | 0x1C<<7 | 0x3C,
+ 26992 - 19968: jis0212<<14 | 0x23<<7 | 0x2E,
+ 26993 - 19968: jis0212<<14 | 0x23<<7 | 0x2F,
+ 26994 - 19968: jis0212<<14 | 0x23<<7 | 0x30,
+ 26995 - 19968: jis0208<<14 | 0x26<<7 | 0x3F,
+ 26996 - 19968: jis0208<<14 | 0x3B<<7 | 0x1B,
+ 26997 - 19968: jis0208<<14 | 0x15<<7 | 0x2A,
+ 26999 - 19968: jis0208<<14 | 0x3B<<7 | 0x13,
+ 27000 - 19968: jis0208<<14 | 0x3B<<7 | 0x15,
+ 27001 - 19968: jis0208<<14 | 0x3B<<7 | 0x12,
+ 27002 - 19968: jis0212<<14 | 0x23<<7 | 0x31,
+ 27003 - 19968: jis0212<<14 | 0x23<<7 | 0x32,
+ 27004 - 19968: jis0208<<14 | 0x2E<<7 | 0x0F,
+ 27005 - 19968: jis0208<<14 | 0x12<<7 | 0x39,
+ 27006 - 19968: jis0208<<14 | 0x3B<<7 | 0x18,
+ 27007 - 19968: jis0212<<14 | 0x23<<7 | 0x33,
+ 27008 - 19968: jis0212<<14 | 0x23<<7 | 0x34,
+ 27009 - 19968: jis0208<<14 | 0x3B<<7 | 0x22,
+ 27010 - 19968: jis0208<<14 | 0x12<<7 | 0x14,
+ 27018 - 19968: jis0208<<14 | 0x19<<7 | 0x46,
+ 27021 - 19968: jis0212<<14 | 0x23<<7 | 0x35,
+ 27022 - 19968: jis0208<<14 | 0x10<<7 | 0x3C,
+ 27025 - 19968: jis0208<<14 | 0x3B<<7 | 0x33,
+ 27026 - 19968: jis0212<<14 | 0x23<<7 | 0x36,
+ 27028 - 19968: jis0208<<14 | 0x2E<<7 | 0x10,
+ 27029 - 19968: jis0208<<14 | 0x3B<<7 | 0x36,
+ 27030 - 19968: jis0212<<14 | 0x23<<7 | 0x37,
+ 27032 - 19968: jis0208<<14 | 0x59<<7 | 0x30,
+ 27035 - 19968: jis0208<<14 | 0x1E<<7 | 0x19,
+ 27036 - 19968: jis0208<<14 | 0x3B<<7 | 0x35,
+ 27040 - 19968: jis0208<<14 | 0x3B<<7 | 0x34,
+ 27041 - 19968: jis0212<<14 | 0x23<<7 | 0x39,
+ 27045 - 19968: jis0212<<14 | 0x23<<7 | 0x3A,
+ 27046 - 19968: jis0212<<14 | 0x23<<7 | 0x3B,
+ 27047 - 19968: jis0208<<14 | 0x3B<<7 | 0x31,
+ 27048 - 19968: jis0212<<14 | 0x23<<7 | 0x3C,
+ 27051 - 19968: jis0212<<14 | 0x23<<7 | 0x3D,
+ 27053 - 19968: jis0212<<14 | 0x23<<7 | 0x3E,
+ 27054 - 19968: jis0208<<14 | 0x3B<<7 | 0x25,
+ 27055 - 19968: jis0212<<14 | 0x23<<7 | 0x3F,
+ 27057 - 19968: jis0208<<14 | 0x3B<<7 | 0x42,
+ 27058 - 19968: jis0208<<14 | 0x3B<<7 | 0x24,
+ 27060 - 19968: jis0208<<14 | 0x3B<<7 | 0x37,
+ 27063 - 19968: jis0212<<14 | 0x23<<7 | 0x40,
+ 27064 - 19968: jis0212<<14 | 0x23<<7 | 0x41,
+ 27066 - 19968: jis0212<<14 | 0x23<<7 | 0x42,
+ 27067 - 19968: jis0208<<14 | 0x3B<<7 | 0x2F,
+ 27068 - 19968: jis0212<<14 | 0x23<<7 | 0x43,
+ 27070 - 19968: jis0208<<14 | 0x3B<<7 | 0x2A,
+ 27071 - 19968: jis0208<<14 | 0x3B<<7 | 0x27,
+ 27073 - 19968: jis0208<<14 | 0x3B<<7 | 0x28,
+ 27075 - 19968: jis0208<<14 | 0x3B<<7 | 0x30,
+ 27077 - 19968: jis0212<<14 | 0x23<<7 | 0x44,
+ 27079 - 19968: jis0208<<14 | 0x53<<7 | 0x01,
+ 27080 - 19968: jis0212<<14 | 0x23<<7 | 0x45,
+ 27082 - 19968: jis0208<<14 | 0x3B<<7 | 0x2D,
+ 27083 - 19968: jis0208<<14 | 0x18<<7 | 0x1C,
+ 27084 - 19968: jis0208<<14 | 0x23<<7 | 0x27,
+ 27085 - 19968: jis0208<<14 | 0x20<<7 | 0x43,
+ 27086 - 19968: jis0208<<14 | 0x3B<<7 | 0x2B,
+ 27088 - 19968: jis0208<<14 | 0x3B<<7 | 0x26,
+ 27089 - 19968: jis0212<<14 | 0x23<<7 | 0x46,
+ 27091 - 19968: jis0208<<14 | 0x3B<<7 | 0x29,
+ 27094 - 19968: jis0212<<14 | 0x23<<7 | 0x47,
+ 27095 - 19968: jis0212<<14 | 0x23<<7 | 0x48,
+ 27096 - 19968: jis0208<<14 | 0x2C<<7 | 0x2C,
+ 27097 - 19968: jis0208<<14 | 0x2A<<7 | 0x49,
+ 27101 - 19968: jis0208<<14 | 0x3B<<7 | 0x2E,
+ 27102 - 19968: jis0208<<14 | 0x3B<<7 | 0x38,
+ 27106 - 19968: jis0208<<14 | 0x59<<7 | 0x31,
+ 27109 - 19968: jis0212<<14 | 0x23<<7 | 0x4A,
+ 27111 - 19968: jis0208<<14 | 0x3B<<7 | 0x40,
+ 27112 - 19968: jis0208<<14 | 0x3B<<7 | 0x39,
+ 27115 - 19968: jis0208<<14 | 0x3B<<7 | 0x46,
+ 27117 - 19968: jis0208<<14 | 0x3B<<7 | 0x44,
+ 27118 - 19968: jis0212<<14 | 0x23<<7 | 0x4B,
+ 27119 - 19968: jis0212<<14 | 0x23<<7 | 0x4C,
+ 27121 - 19968: jis0212<<14 | 0x23<<7 | 0x4D,
+ 27122 - 19968: jis0208<<14 | 0x3B<<7 | 0x3F,
+ 27123 - 19968: jis0212<<14 | 0x23<<7 | 0x4E,
+ 27125 - 19968: jis0212<<14 | 0x23<<7 | 0x4F,
+ 27129 - 19968: jis0208<<14 | 0x3B<<7 | 0x3E,
+ 27131 - 19968: jis0208<<14 | 0x23<<7 | 0x2F,
+ 27133 - 19968: jis0208<<14 | 0x20<<7 | 0x44,
+ 27134 - 19968: jis0212<<14 | 0x23<<7 | 0x50,
+ 27135 - 19968: jis0208<<14 | 0x3B<<7 | 0x3C,
+ 27136 - 19968: jis0212<<14 | 0x23<<7 | 0x51,
+ 27137 - 19968: jis0212<<14 | 0x23<<7 | 0x52,
+ 27138 - 19968: jis0208<<14 | 0x3B<<7 | 0x3A,
+ 27139 - 19968: jis0212<<14 | 0x23<<7 | 0x53,
+ 27141 - 19968: jis0208<<14 | 0x3B<<7 | 0x41,
+ 27146 - 19968: jis0208<<14 | 0x3B<<7 | 0x47,
+ 27147 - 19968: jis0208<<14 | 0x27<<7 | 0x54,
+ 27148 - 19968: jis0208<<14 | 0x3B<<7 | 0x4D,
+ 27151 - 19968: jis0212<<14 | 0x23<<7 | 0x54,
+ 27153 - 19968: jis0212<<14 | 0x23<<7 | 0x55,
+ 27154 - 19968: jis0208<<14 | 0x3B<<7 | 0x48,
+ 27155 - 19968: jis0208<<14 | 0x3B<<7 | 0x4B,
+ 27156 - 19968: jis0208<<14 | 0x3B<<7 | 0x45,
+ 27157 - 19968: jis0212<<14 | 0x23<<7 | 0x56,
+ 27159 - 19968: jis0208<<14 | 0x22<<7 | 0x53,
+ 27161 - 19968: jis0208<<14 | 0x28<<7 | 0x17,
+ 27162 - 19968: jis0212<<14 | 0x23<<7 | 0x57,
+ 27163 - 19968: jis0208<<14 | 0x3B<<7 | 0x3B,
+ 27165 - 19968: jis0212<<14 | 0x23<<7 | 0x58,
+ 27166 - 19968: jis0208<<14 | 0x3B<<7 | 0x43,
+ 27167 - 19968: jis0208<<14 | 0x1D<<7 | 0x1F,
+ 27168 - 19968: jis0212<<14 | 0x23<<7 | 0x59,
+ 27169 - 19968: jis0208<<14 | 0x2B<<7 | 0x2E,
+ 27170 - 19968: jis0208<<14 | 0x3B<<7 | 0x57,
+ 27171 - 19968: jis0208<<14 | 0x3B<<7 | 0x4A,
+ 27172 - 19968: jis0212<<14 | 0x23<<7 | 0x5A,
+ 27176 - 19968: jis0212<<14 | 0x23<<7 | 0x5B,
+ 27177 - 19968: jis0208<<14 | 0x17<<7 | 0x01,
+ 27178 - 19968: jis0208<<14 | 0x11<<7 | 0x02,
+ 27179 - 19968: jis0208<<14 | 0x12<<7 | 0x3E,
+ 27182 - 19968: jis0208<<14 | 0x3B<<7 | 0x32,
+ 27184 - 19968: jis0208<<14 | 0x59<<7 | 0x32,
+ 27186 - 19968: jis0212<<14 | 0x23<<7 | 0x5D,
+ 27188 - 19968: jis0212<<14 | 0x24<<7 | 0x00,
+ 27189 - 19968: jis0208<<14 | 0x1D<<7 | 0x20,
+ 27190 - 19968: jis0208<<14 | 0x3B<<7 | 0x4F,
+ 27191 - 19968: jis0212<<14 | 0x24<<7 | 0x01,
+ 27192 - 19968: jis0208<<14 | 0x3B<<7 | 0x56,
+ 27193 - 19968: jis0208<<14 | 0x1B<<7 | 0x58,
+ 27194 - 19968: jis0208<<14 | 0x12<<7 | 0x51,
+ 27195 - 19968: jis0212<<14 | 0x24<<7 | 0x02,
+ 27197 - 19968: jis0208<<14 | 0x22<<7 | 0x0D,
+ 27198 - 19968: jis0212<<14 | 0x24<<7 | 0x03,
+ 27199 - 19968: jis0212<<14 | 0x24<<7 | 0x04,
+ 27204 - 19968: jis0208<<14 | 0x3B<<7 | 0x4C,
+ 27205 - 19968: jis0212<<14 | 0x24<<7 | 0x05,
+ 27206 - 19968: jis0208<<14 | 0x59<<7 | 0x34,
+ 27207 - 19968: jis0208<<14 | 0x3B<<7 | 0x51,
+ 27208 - 19968: jis0208<<14 | 0x3B<<7 | 0x55,
+ 27209 - 19968: jis0212<<14 | 0x24<<7 | 0x07,
+ 27210 - 19968: jis0212<<14 | 0x24<<7 | 0x08,
+ 27211 - 19968: jis0208<<14 | 0x15<<7 | 0x15,
+ 27214 - 19968: jis0212<<14 | 0x24<<7 | 0x09,
+ 27216 - 19968: jis0212<<14 | 0x24<<7 | 0x0A,
+ 27217 - 19968: jis0212<<14 | 0x24<<7 | 0x0B,
+ 27218 - 19968: jis0212<<14 | 0x24<<7 | 0x0C,
+ 27221 - 19968: jis0212<<14 | 0x24<<7 | 0x0D,
+ 27222 - 19968: jis0212<<14 | 0x24<<7 | 0x0E,
+ 27224 - 19968: jis0208<<14 | 0x14<<7 | 0x2B,
+ 27225 - 19968: jis0208<<14 | 0x3B<<7 | 0x53,
+ 27227 - 19968: jis0212<<14 | 0x24<<7 | 0x0F,
+ 27231 - 19968: jis0208<<14 | 0x14<<7 | 0x00,
+ 27233 - 19968: jis0208<<14 | 0x25<<7 | 0x2A,
+ 27234 - 19968: jis0208<<14 | 0x3B<<7 | 0x52,
+ 27236 - 19968: jis0212<<14 | 0x24<<7 | 0x10,
+ 27238 - 19968: jis0208<<14 | 0x3B<<7 | 0x54,
+ 27239 - 19968: jis0212<<14 | 0x24<<7 | 0x11,
+ 27242 - 19968: jis0212<<14 | 0x24<<7 | 0x12,
+ 27243 - 19968: jis0208<<14 | 0x59<<7 | 0x33,
+ 27249 - 19968: jis0212<<14 | 0x24<<7 | 0x13,
+ 27250 - 19968: jis0208<<14 | 0x3B<<7 | 0x4E,
+ 27251 - 19968: jis0208<<14 | 0x59<<7 | 0x35,
+ 27256 - 19968: jis0208<<14 | 0x3B<<7 | 0x50,
+ 27262 - 19968: jis0208<<14 | 0x59<<7 | 0x36,
+ 27263 - 19968: jis0208<<14 | 0x12<<7 | 0x3F,
+ 27264 - 19968: jis0208<<14 | 0x22<<7 | 0x28,
+ 27265 - 19968: jis0212<<14 | 0x24<<7 | 0x16,
+ 27267 - 19968: jis0212<<14 | 0x24<<7 | 0x17,
+ 27268 - 19968: jis0208<<14 | 0x3B<<7 | 0x5B,
+ 27270 - 19968: jis0212<<14 | 0x24<<7 | 0x18,
+ 27271 - 19968: jis0212<<14 | 0x24<<7 | 0x19,
+ 27273 - 19968: jis0212<<14 | 0x24<<7 | 0x1A,
+ 27275 - 19968: jis0212<<14 | 0x24<<7 | 0x1B,
+ 27277 - 19968: jis0208<<14 | 0x3B<<7 | 0x59,
+ 27278 - 19968: jis0208<<14 | 0x17<<7 | 0x48,
+ 27280 - 19968: jis0208<<14 | 0x3B<<7 | 0x58,
+ 27281 - 19968: jis0212<<14 | 0x24<<7 | 0x1C,
+ 27287 - 19968: jis0208<<14 | 0x3C<<7 | 0x00,
+ 27291 - 19968: jis0212<<14 | 0x24<<7 | 0x1D,
+ 27292 - 19968: jis0208<<14 | 0x3A<<7 | 0x37,
+ 27293 - 19968: jis0212<<14 | 0x24<<7 | 0x1E,
+ 27294 - 19968: jis0212<<14 | 0x24<<7 | 0x1F,
+ 27295 - 19968: jis0212<<14 | 0x24<<7 | 0x20,
+ 27296 - 19968: jis0208<<14 | 0x3B<<7 | 0x5A,
+ 27298 - 19968: jis0208<<14 | 0x3B<<7 | 0x5C,
+ 27299 - 19968: jis0208<<14 | 0x3B<<7 | 0x5D,
+ 27301 - 19968: jis0212<<14 | 0x24<<7 | 0x21,
+ 27306 - 19968: jis0208<<14 | 0x3C<<7 | 0x0B,
+ 27307 - 19968: jis0212<<14 | 0x24<<7 | 0x22,
+ 27308 - 19968: jis0208<<14 | 0x3C<<7 | 0x07,
+ 27310 - 19968: jis0208<<14 | 0x3A<<7 | 0x4C,
+ 27311 - 19968: jis0212<<14 | 0x24<<7 | 0x23,
+ 27312 - 19968: jis0212<<14 | 0x24<<7 | 0x24,
+ 27313 - 19968: jis0212<<14 | 0x24<<7 | 0x25,
+ 27315 - 19968: jis0208<<14 | 0x3C<<7 | 0x06,
+ 27316 - 19968: jis0212<<14 | 0x24<<7 | 0x26,
+ 27320 - 19968: jis0208<<14 | 0x3C<<7 | 0x05,
+ 27323 - 19968: jis0208<<14 | 0x3C<<7 | 0x02,
+ 27325 - 19968: jis0212<<14 | 0x24<<7 | 0x27,
+ 27326 - 19968: jis0212<<14 | 0x24<<7 | 0x28,
+ 27327 - 19968: jis0212<<14 | 0x24<<7 | 0x29,
+ 27329 - 19968: jis0208<<14 | 0x3B<<7 | 0x49,
+ 27330 - 19968: jis0208<<14 | 0x3C<<7 | 0x04,
+ 27331 - 19968: jis0208<<14 | 0x3C<<7 | 0x03,
+ 27334 - 19968: jis0212<<14 | 0x24<<7 | 0x2A,
+ 27336 - 19968: jis0212<<14 | 0x24<<7 | 0x2C,
+ 27337 - 19968: jis0212<<14 | 0x24<<7 | 0x2B,
+ 27340 - 19968: jis0212<<14 | 0x24<<7 | 0x2D,
+ 27344 - 19968: jis0212<<14 | 0x24<<7 | 0x2E,
+ 27345 - 19968: jis0208<<14 | 0x3C<<7 | 0x09,
+ 27347 - 19968: jis0208<<14 | 0x2E<<7 | 0x05,
+ 27348 - 19968: jis0212<<14 | 0x24<<7 | 0x2F,
+ 27349 - 19968: jis0212<<14 | 0x24<<7 | 0x30,
+ 27350 - 19968: jis0212<<14 | 0x24<<7 | 0x31,
+ 27354 - 19968: jis0208<<14 | 0x3C<<7 | 0x0C,
+ 27355 - 19968: jis0208<<14 | 0x15<<7 | 0x5A,
+ 27356 - 19968: jis0212<<14 | 0x24<<7 | 0x32,
+ 27357 - 19968: jis0212<<14 | 0x24<<7 | 0x33,
+ 27358 - 19968: jis0208<<14 | 0x3C<<7 | 0x08,
+ 27359 - 19968: jis0208<<14 | 0x3C<<7 | 0x0A,
+ 27362 - 19968: jis0208<<14 | 0x59<<7 | 0x37,
+ 27364 - 19968: jis0208<<14 | 0x59<<7 | 0x38,
+ 27367 - 19968: jis0212<<14 | 0x24<<7 | 0x35,
+ 27368 - 19968: jis0208<<14 | 0x27<<7 | 0x06,
+ 27370 - 19968: jis0208<<14 | 0x3C<<7 | 0x0D,
+ 27372 - 19968: jis0212<<14 | 0x24<<7 | 0x36,
+ 27376 - 19968: jis0212<<14 | 0x24<<7 | 0x37,
+ 27377 - 19968: jis0212<<14 | 0x24<<7 | 0x38,
+ 27378 - 19968: jis0212<<14 | 0x24<<7 | 0x39,
+ 27386 - 19968: jis0208<<14 | 0x3C<<7 | 0x11,
+ 27387 - 19968: jis0208<<14 | 0x3C<<7 | 0x0E,
+ 27388 - 19968: jis0212<<14 | 0x24<<7 | 0x3A,
+ 27389 - 19968: jis0212<<14 | 0x24<<7 | 0x3B,
+ 27394 - 19968: jis0212<<14 | 0x24<<7 | 0x3C,
+ 27395 - 19968: jis0212<<14 | 0x24<<7 | 0x3D,
+ 27396 - 19968: jis0208<<14 | 0x2C<<7 | 0x52,
+ 27397 - 19968: jis0208<<14 | 0x3C<<7 | 0x0F,
+ 27398 - 19968: jis0212<<14 | 0x24<<7 | 0x3E,
+ 27399 - 19968: jis0212<<14 | 0x24<<7 | 0x3F,
+ 27401 - 19968: jis0212<<14 | 0x24<<7 | 0x40,
+ 27402 - 19968: jis0208<<14 | 0x3B<<7 | 0x3D,
+ 27407 - 19968: jis0212<<14 | 0x24<<7 | 0x41,
+ 27408 - 19968: jis0212<<14 | 0x24<<7 | 0x42,
+ 27409 - 19968: jis0212<<14 | 0x24<<7 | 0x43,
+ 27410 - 19968: jis0208<<14 | 0x3C<<7 | 0x12,
+ 27414 - 19968: jis0208<<14 | 0x3C<<7 | 0x13,
+ 27415 - 19968: jis0212<<14 | 0x24<<7 | 0x44,
+ 27419 - 19968: jis0212<<14 | 0x24<<7 | 0x45,
+ 27421 - 19968: jis0208<<14 | 0x10<<7 | 0x14,
+ 27422 - 19968: jis0212<<14 | 0x24<<7 | 0x46,
+ 27423 - 19968: jis0208<<14 | 0x3C<<7 | 0x15,
+ 27424 - 19968: jis0208<<14 | 0x16<<7 | 0x46,
+ 27425 - 19968: jis0208<<14 | 0x1B<<7 | 0x00,
+ 27427 - 19968: jis0208<<14 | 0x15<<7 | 0x34,
+ 27428 - 19968: jis0212<<14 | 0x24<<7 | 0x47,
+ 27431 - 19968: jis0208<<14 | 0x11<<7 | 0x03,
+ 27432 - 19968: jis0212<<14 | 0x24<<7 | 0x48,
+ 27435 - 19968: jis0212<<14 | 0x24<<7 | 0x49,
+ 27436 - 19968: jis0212<<14 | 0x24<<7 | 0x4A,
+ 27439 - 19968: jis0212<<14 | 0x24<<7 | 0x4B,
+ 27442 - 19968: jis0208<<14 | 0x2C<<7 | 0x3E,
+ 27445 - 19968: jis0212<<14 | 0x24<<7 | 0x4C,
+ 27446 - 19968: jis0212<<14 | 0x24<<7 | 0x4D,
+ 27447 - 19968: jis0208<<14 | 0x3C<<7 | 0x17,
+ 27448 - 19968: jis0208<<14 | 0x3C<<7 | 0x16,
+ 27449 - 19968: jis0208<<14 | 0x3C<<7 | 0x19,
+ 27450 - 19968: jis0208<<14 | 0x14<<7 | 0x1C,
+ 27451 - 19968: jis0212<<14 | 0x24<<7 | 0x4E,
+ 27453 - 19968: jis0208<<14 | 0x15<<7 | 0x35,
+ 27454 - 19968: jis0208<<14 | 0x13<<7 | 0x1D,
+ 27455 - 19968: jis0212<<14 | 0x24<<7 | 0x4F,
+ 27459 - 19968: jis0208<<14 | 0x3C<<7 | 0x1C,
+ 27462 - 19968: jis0212<<14 | 0x24<<7 | 0x50,
+ 27463 - 19968: jis0208<<14 | 0x3C<<7 | 0x1B,
+ 27465 - 19968: jis0208<<14 | 0x3C<<7 | 0x1D,
+ 27466 - 19968: jis0212<<14 | 0x24<<7 | 0x51,
+ 27468 - 19968: jis0208<<14 | 0x11<<7 | 0x2D,
+ 27469 - 19968: jis0212<<14 | 0x24<<7 | 0x52,
+ 27470 - 19968: jis0208<<14 | 0x22<<7 | 0x16,
+ 27472 - 19968: jis0208<<14 | 0x3C<<7 | 0x1E,
+ 27474 - 19968: jis0212<<14 | 0x24<<7 | 0x53,
+ 27475 - 19968: jis0208<<14 | 0x13<<7 | 0x1E,
+ 27476 - 19968: jis0208<<14 | 0x3C<<7 | 0x20,
+ 27478 - 19968: jis0212<<14 | 0x24<<7 | 0x54,
+ 27480 - 19968: jis0212<<14 | 0x24<<7 | 0x55,
+ 27481 - 19968: jis0208<<14 | 0x3C<<7 | 0x1F,
+ 27483 - 19968: jis0208<<14 | 0x3C<<7 | 0x21,
+ 27485 - 19968: jis0212<<14 | 0x24<<7 | 0x56,
+ 27487 - 19968: jis0208<<14 | 0x3C<<7 | 0x22,
+ 27488 - 19968: jis0212<<14 | 0x24<<7 | 0x57,
+ 27489 - 19968: jis0208<<14 | 0x3C<<7 | 0x23,
+ 27490 - 19968: jis0208<<14 | 0x1A<<7 | 0x3E,
+ 27491 - 19968: jis0208<<14 | 0x1F<<7 | 0x14,
+ 27492 - 19968: jis0208<<14 | 0x19<<7 | 0x00,
+ 27494 - 19968: jis0208<<14 | 0x28<<7 | 0x4F,
+ 27495 - 19968: jis0212<<14 | 0x24<<7 | 0x58,
+ 27497 - 19968: jis0208<<14 | 0x29<<7 | 0x41,
+ 27498 - 19968: jis0208<<14 | 0x2E<<7 | 0x23,
+ 27499 - 19968: jis0212<<14 | 0x24<<7 | 0x59,
+ 27502 - 19968: jis0212<<14 | 0x24<<7 | 0x5A,
+ 27503 - 19968: jis0208<<14 | 0x1A<<7 | 0x54,
+ 27504 - 19968: jis0212<<14 | 0x24<<7 | 0x5B,
+ 27507 - 19968: jis0208<<14 | 0x19<<7 | 0x2F,
+ 27508 - 19968: jis0208<<14 | 0x2D<<7 | 0x51,
+ 27509 - 19968: jis0212<<14 | 0x24<<7 | 0x5C,
+ 27512 - 19968: jis0208<<14 | 0x3C<<7 | 0x24,
+ 27513 - 19968: jis0208<<14 | 0x3C<<7 | 0x25,
+ 27515 - 19968: jis0208<<14 | 0x1A<<7 | 0x3F,
+ 27517 - 19968: jis0212<<14 | 0x24<<7 | 0x5D,
+ 27518 - 19968: jis0212<<14 | 0x25<<7 | 0x00,
+ 27519 - 19968: jis0208<<14 | 0x3C<<7 | 0x26,
+ 27520 - 19968: jis0208<<14 | 0x3C<<7 | 0x27,
+ 27522 - 19968: jis0212<<14 | 0x25<<7 | 0x01,
+ 27523 - 19968: jis0208<<14 | 0x3C<<7 | 0x29,
+ 27524 - 19968: jis0208<<14 | 0x3C<<7 | 0x28,
+ 27525 - 19968: jis0212<<14 | 0x25<<7 | 0x02,
+ 27526 - 19968: jis0208<<14 | 0x2A<<7 | 0x37,
+ 27529 - 19968: jis0208<<14 | 0x1C<<7 | 0x3D,
+ 27530 - 19968: jis0208<<14 | 0x1B<<7 | 0x4B,
+ 27531 - 19968: jis0208<<14 | 0x1A<<7 | 0x23,
+ 27533 - 19968: jis0208<<14 | 0x3C<<7 | 0x2A,
+ 27541 - 19968: jis0208<<14 | 0x3C<<7 | 0x2C,
+ 27542 - 19968: jis0208<<14 | 0x1E<<7 | 0x02,
+ 27543 - 19968: jis0212<<14 | 0x25<<7 | 0x03,
+ 27544 - 19968: jis0208<<14 | 0x3C<<7 | 0x2B,
+ 27547 - 19968: jis0212<<14 | 0x25<<7 | 0x04,
+ 27550 - 19968: jis0208<<14 | 0x3C<<7 | 0x2D,
+ 27551 - 19968: jis0212<<14 | 0x25<<7 | 0x05,
+ 27552 - 19968: jis0212<<14 | 0x25<<7 | 0x06,
+ 27554 - 19968: jis0212<<14 | 0x25<<7 | 0x07,
+ 27555 - 19968: jis0212<<14 | 0x25<<7 | 0x08,
+ 27556 - 19968: jis0208<<14 | 0x3C<<7 | 0x2E,
+ 27560 - 19968: jis0212<<14 | 0x25<<7 | 0x09,
+ 27561 - 19968: jis0212<<14 | 0x25<<7 | 0x0A,
+ 27562 - 19968: jis0208<<14 | 0x3C<<7 | 0x2F,
+ 27563 - 19968: jis0208<<14 | 0x3C<<7 | 0x30,
+ 27564 - 19968: jis0212<<14 | 0x25<<7 | 0x0B,
+ 27565 - 19968: jis0212<<14 | 0x25<<7 | 0x0C,
+ 27566 - 19968: jis0212<<14 | 0x25<<7 | 0x0D,
+ 27567 - 19968: jis0208<<14 | 0x3C<<7 | 0x31,
+ 27568 - 19968: jis0212<<14 | 0x25<<7 | 0x0E,
+ 27569 - 19968: jis0208<<14 | 0x3C<<7 | 0x33,
+ 27570 - 19968: jis0208<<14 | 0x3C<<7 | 0x32,
+ 27571 - 19968: jis0208<<14 | 0x3C<<7 | 0x34,
+ 27572 - 19968: jis0208<<14 | 0x11<<7 | 0x04,
+ 27573 - 19968: jis0208<<14 | 0x22<<7 | 0x29,
+ 27575 - 19968: jis0208<<14 | 0x3C<<7 | 0x35,
+ 27576 - 19968: jis0212<<14 | 0x25<<7 | 0x0F,
+ 27577 - 19968: jis0212<<14 | 0x25<<7 | 0x10,
+ 27578 - 19968: jis0208<<14 | 0x1A<<7 | 0x05,
+ 27579 - 19968: jis0208<<14 | 0x12<<7 | 0x2B,
+ 27580 - 19968: jis0208<<14 | 0x3C<<7 | 0x36,
+ 27581 - 19968: jis0212<<14 | 0x25<<7 | 0x11,
+ 27582 - 19968: jis0212<<14 | 0x25<<7 | 0x12,
+ 27583 - 19968: jis0208<<14 | 0x24<<7 | 0x21,
+ 27584 - 19968: jis0208<<14 | 0x33<<7 | 0x2B,
+ 27587 - 19968: jis0212<<14 | 0x25<<7 | 0x13,
+ 27588 - 19968: jis0212<<14 | 0x25<<7 | 0x14,
+ 27589 - 19968: jis0208<<14 | 0x14<<7 | 0x02,
+ 27590 - 19968: jis0208<<14 | 0x3C<<7 | 0x37,
+ 27593 - 19968: jis0212<<14 | 0x25<<7 | 0x15,
+ 27595 - 19968: jis0208<<14 | 0x3C<<7 | 0x38,
+ 27596 - 19968: jis0212<<14 | 0x25<<7 | 0x16,
+ 27597 - 19968: jis0208<<14 | 0x29<<7 | 0x4B,
+ 27598 - 19968: jis0208<<14 | 0x2A<<7 | 0x47,
+ 27602 - 19968: jis0208<<14 | 0x25<<7 | 0x26,
+ 27603 - 19968: jis0208<<14 | 0x3C<<7 | 0x39,
+ 27604 - 19968: jis0208<<14 | 0x27<<7 | 0x45,
+ 27606 - 19968: jis0208<<14 | 0x59<<7 | 0x39,
+ 27608 - 19968: jis0208<<14 | 0x27<<7 | 0x5A,
+ 27610 - 19968: jis0212<<14 | 0x25<<7 | 0x18,
+ 27611 - 19968: jis0208<<14 | 0x2B<<7 | 0x32,
+ 27615 - 19968: jis0208<<14 | 0x3C<<7 | 0x3A,
+ 27617 - 19968: jis0212<<14 | 0x25<<7 | 0x19,
+ 27619 - 19968: jis0212<<14 | 0x25<<7 | 0x1A,
+ 27622 - 19968: jis0212<<14 | 0x25<<7 | 0x1B,
+ 27623 - 19968: jis0212<<14 | 0x25<<7 | 0x1C,
+ 27627 - 19968: jis0208<<14 | 0x3C<<7 | 0x3C,
+ 27628 - 19968: jis0208<<14 | 0x3C<<7 | 0x3B,
+ 27630 - 19968: jis0212<<14 | 0x25<<7 | 0x1D,
+ 27631 - 19968: jis0208<<14 | 0x3C<<7 | 0x3E,
+ 27633 - 19968: jis0212<<14 | 0x25<<7 | 0x1E,
+ 27635 - 19968: jis0208<<14 | 0x3C<<7 | 0x3D,
+ 27639 - 19968: jis0212<<14 | 0x25<<7 | 0x1F,
+ 27641 - 19968: jis0212<<14 | 0x25<<7 | 0x20,
+ 27647 - 19968: jis0212<<14 | 0x25<<7 | 0x21,
+ 27650 - 19968: jis0212<<14 | 0x25<<7 | 0x22,
+ 27652 - 19968: jis0212<<14 | 0x25<<7 | 0x23,
+ 27653 - 19968: jis0212<<14 | 0x25<<7 | 0x24,
+ 27656 - 19968: jis0208<<14 | 0x3C<<7 | 0x40,
+ 27657 - 19968: jis0212<<14 | 0x25<<7 | 0x25,
+ 27661 - 19968: jis0212<<14 | 0x25<<7 | 0x26,
+ 27662 - 19968: jis0212<<14 | 0x25<<7 | 0x27,
+ 27663 - 19968: jis0208<<14 | 0x1A<<7 | 0x40,
+ 27664 - 19968: jis0212<<14 | 0x25<<7 | 0x28,
+ 27665 - 19968: jis0208<<14 | 0x2B<<7 | 0x10,
+ 27666 - 19968: jis0212<<14 | 0x25<<7 | 0x29,
+ 27667 - 19968: jis0208<<14 | 0x3C<<7 | 0x41,
+ 27668 - 19968: jis0208<<14 | 0x3C<<7 | 0x42,
+ 27671 - 19968: jis0208<<14 | 0x14<<7 | 0x03,
+ 27673 - 19968: jis0212<<14 | 0x25<<7 | 0x2A,
+ 27675 - 19968: jis0208<<14 | 0x3C<<7 | 0x43,
+ 27679 - 19968: jis0212<<14 | 0x25<<7 | 0x2B,
+ 27683 - 19968: jis0208<<14 | 0x3C<<7 | 0x45,
+ 27684 - 19968: jis0208<<14 | 0x3C<<7 | 0x44,
+ 27686 - 19968: jis0212<<14 | 0x25<<7 | 0x2C,
+ 27687 - 19968: jis0212<<14 | 0x25<<7 | 0x2D,
+ 27688 - 19968: jis0212<<14 | 0x25<<7 | 0x2E,
+ 27692 - 19968: jis0212<<14 | 0x25<<7 | 0x2F,
+ 27694 - 19968: jis0212<<14 | 0x25<<7 | 0x30,
+ 27699 - 19968: jis0212<<14 | 0x25<<7 | 0x31,
+ 27700 - 19968: jis0208<<14 | 0x1E<<7 | 0x44,
+ 27701 - 19968: jis0212<<14 | 0x25<<7 | 0x32,
+ 27702 - 19968: jis0212<<14 | 0x25<<7 | 0x33,
+ 27703 - 19968: jis0208<<14 | 0x28<<7 | 0x18,
+ 27704 - 19968: jis0208<<14 | 0x10<<7 | 0x29,
+ 27706 - 19968: jis0212<<14 | 0x25<<7 | 0x34,
+ 27707 - 19968: jis0212<<14 | 0x25<<7 | 0x35,
+ 27710 - 19968: jis0208<<14 | 0x27<<7 | 0x24,
+ 27711 - 19968: jis0208<<14 | 0x59<<7 | 0x3A,
+ 27712 - 19968: jis0208<<14 | 0x23<<7 | 0x54,
+ 27713 - 19968: jis0208<<14 | 0x1C<<7 | 0x20,
+ 27714 - 19968: jis0208<<14 | 0x14<<7 | 0x40,
+ 27722 - 19968: jis0212<<14 | 0x25<<7 | 0x37,
+ 27723 - 19968: jis0212<<14 | 0x25<<7 | 0x38,
+ 27725 - 19968: jis0212<<14 | 0x25<<7 | 0x39,
+ 27726 - 19968: jis0208<<14 | 0x27<<7 | 0x25,
+ 27727 - 19968: jis0212<<14 | 0x25<<7 | 0x3A,
+ 27728 - 19968: jis0208<<14 | 0x1B<<7 | 0x0D,
+ 27730 - 19968: jis0212<<14 | 0x25<<7 | 0x3B,
+ 27732 - 19968: jis0212<<14 | 0x25<<7 | 0x3C,
+ 27733 - 19968: jis0208<<14 | 0x3C<<7 | 0x47,
+ 27735 - 19968: jis0208<<14 | 0x13<<7 | 0x1F,
+ 27737 - 19968: jis0212<<14 | 0x25<<7 | 0x3D,
+ 27738 - 19968: jis0208<<14 | 0x10<<7 | 0x57,
+ 27739 - 19968: jis0212<<14 | 0x25<<7 | 0x3E,
+ 27740 - 19968: jis0208<<14 | 0x59<<7 | 0x3B,
+ 27741 - 19968: jis0208<<14 | 0x25<<7 | 0x51,
+ 27742 - 19968: jis0208<<14 | 0x3C<<7 | 0x46,
+ 27743 - 19968: jis0208<<14 | 0x18<<7 | 0x1D,
+ 27744 - 19968: jis0208<<14 | 0x22<<7 | 0x32,
+ 27746 - 19968: jis0208<<14 | 0x3C<<7 | 0x48,
+ 27751 - 19968: jis0212<<14 | 0x26<<7 | 0x15,
+ 27752 - 19968: jis0208<<14 | 0x3C<<7 | 0x50,
+ 27754 - 19968: jis0208<<14 | 0x3C<<7 | 0x49,
+ 27755 - 19968: jis0212<<14 | 0x25<<7 | 0x40,
+ 27757 - 19968: jis0212<<14 | 0x25<<7 | 0x41,
+ 27759 - 19968: jis0208<<14 | 0x59<<7 | 0x3D,
+ 27760 - 19968: jis0208<<14 | 0x21<<7 | 0x20,
+ 27762 - 19968: jis0208<<14 | 0x14<<7 | 0x41,
+ 27763 - 19968: jis0208<<14 | 0x3C<<7 | 0x51,
+ 27764 - 19968: jis0212<<14 | 0x25<<7 | 0x43,
+ 27766 - 19968: jis0212<<14 | 0x25<<7 | 0x44,
+ 27768 - 19968: jis0212<<14 | 0x25<<7 | 0x45,
+ 27769 - 19968: jis0212<<14 | 0x25<<7 | 0x46,
+ 27770 - 19968: jis0208<<14 | 0x16<<7 | 0x47,
+ 27771 - 19968: jis0212<<14 | 0x25<<7 | 0x47,
+ 27773 - 19968: jis0208<<14 | 0x14<<7 | 0x04,
+ 27774 - 19968: jis0208<<14 | 0x3C<<7 | 0x4F,
+ 27777 - 19968: jis0208<<14 | 0x3C<<7 | 0x4D,
+ 27778 - 19968: jis0208<<14 | 0x3C<<7 | 0x4A,
+ 27779 - 19968: jis0208<<14 | 0x2C<<7 | 0x3F,
+ 27781 - 19968: jis0212<<14 | 0x25<<7 | 0x48,
+ 27782 - 19968: jis0208<<14 | 0x59<<7 | 0x3C,
+ 27783 - 19968: jis0212<<14 | 0x25<<7 | 0x4A,
+ 27784 - 19968: jis0208<<14 | 0x23<<7 | 0x1F,
+ 27785 - 19968: jis0212<<14 | 0x25<<7 | 0x4B,
+ 27788 - 19968: jis0208<<14 | 0x25<<7 | 0x38,
+ 27789 - 19968: jis0208<<14 | 0x3C<<7 | 0x4B,
+ 27792 - 19968: jis0208<<14 | 0x3C<<7 | 0x53,
+ 27794 - 19968: jis0208<<14 | 0x3C<<7 | 0x52,
+ 27795 - 19968: jis0208<<14 | 0x16<<7 | 0x02,
+ 27796 - 19968: jis0212<<14 | 0x25<<7 | 0x4C,
+ 27797 - 19968: jis0212<<14 | 0x25<<7 | 0x4D,
+ 27798 - 19968: jis0208<<14 | 0x11<<7 | 0x0C,
+ 27799 - 19968: jis0212<<14 | 0x25<<7 | 0x4E,
+ 27800 - 19968: jis0212<<14 | 0x25<<7 | 0x4F,
+ 27801 - 19968: jis0208<<14 | 0x19<<7 | 0x1A,
+ 27802 - 19968: jis0208<<14 | 0x3C<<7 | 0x4C,
+ 27803 - 19968: jis0208<<14 | 0x3C<<7 | 0x4E,
+ 27804 - 19968: jis0212<<14 | 0x25<<7 | 0x50,
+ 27807 - 19968: jis0212<<14 | 0x25<<7 | 0x51,
+ 27809 - 19968: jis0208<<14 | 0x2A<<7 | 0x36,
+ 27810 - 19968: jis0208<<14 | 0x21<<7 | 0x53,
+ 27819 - 19968: jis0208<<14 | 0x2A<<7 | 0x56,
+ 27822 - 19968: jis0208<<14 | 0x3C<<7 | 0x5B,
+ 27824 - 19968: jis0212<<14 | 0x25<<7 | 0x52,
+ 27825 - 19968: jis0208<<14 | 0x3C<<7 | 0x5C,
+ 27826 - 19968: jis0212<<14 | 0x25<<7 | 0x53,
+ 27827 - 19968: jis0208<<14 | 0x11<<7 | 0x2E,
+ 27828 - 19968: jis0212<<14 | 0x25<<7 | 0x54,
+ 27832 - 19968: jis0208<<14 | 0x29<<7 | 0x07,
+ 27833 - 19968: jis0208<<14 | 0x2B<<7 | 0x5C,
+ 27834 - 19968: jis0208<<14 | 0x3D<<7 | 0x00,
+ 27835 - 19968: jis0208<<14 | 0x1B<<7 | 0x02,
+ 27836 - 19968: jis0208<<14 | 0x1D<<7 | 0x21,
+ 27837 - 19968: jis0208<<14 | 0x3C<<7 | 0x57,
+ 27838 - 19968: jis0208<<14 | 0x3C<<7 | 0x5D,
+ 27839 - 19968: jis0208<<14 | 0x10<<7 | 0x47,
+ 27841 - 19968: jis0208<<14 | 0x15<<7 | 0x16,
+ 27842 - 19968: jis0212<<14 | 0x25<<7 | 0x55,
+ 27844 - 19968: jis0208<<14 | 0x3C<<7 | 0x54,
+ 27845 - 19968: jis0208<<14 | 0x3C<<7 | 0x59,
+ 27846 - 19968: jis0212<<14 | 0x25<<7 | 0x56,
+ 27849 - 19968: jis0208<<14 | 0x1F<<7 | 0x53,
+ 27850 - 19968: jis0208<<14 | 0x26<<7 | 0x50,
+ 27852 - 19968: jis0208<<14 | 0x27<<7 | 0x46,
+ 27853 - 19968: jis0212<<14 | 0x25<<7 | 0x57,
+ 27855 - 19968: jis0212<<14 | 0x25<<7 | 0x58,
+ 27856 - 19968: jis0212<<14 | 0x25<<7 | 0x59,
+ 27857 - 19968: jis0212<<14 | 0x25<<7 | 0x5A,
+ 27858 - 19968: jis0212<<14 | 0x25<<7 | 0x5B,
+ 27859 - 19968: jis0208<<14 | 0x3C<<7 | 0x56,
+ 27860 - 19968: jis0212<<14 | 0x25<<7 | 0x5C,
+ 27861 - 19968: jis0208<<14 | 0x2A<<7 | 0x00,
+ 27862 - 19968: jis0212<<14 | 0x25<<7 | 0x5D,
+ 27863 - 19968: jis0208<<14 | 0x3C<<7 | 0x58,
+ 27865 - 19968: jis0208<<14 | 0x3D<<7 | 0x03,
+ 27866 - 19968: jis0208<<14 | 0x59<<7 | 0x3E,
+ 27867 - 19968: jis0208<<14 | 0x3D<<7 | 0x01,
+ 27868 - 19968: jis0212<<14 | 0x26<<7 | 0x01,
+ 27869 - 19968: jis0208<<14 | 0x3C<<7 | 0x5A,
+ 27872 - 19968: jis0212<<14 | 0x26<<7 | 0x02,
+ 27873 - 19968: jis0208<<14 | 0x2A<<7 | 0x01,
+ 27874 - 19968: jis0208<<14 | 0x26<<7 | 0x27,
+ 27875 - 19968: jis0208<<14 | 0x14<<7 | 0x42,
+ 27877 - 19968: jis0208<<14 | 0x24<<7 | 0x04,
+ 27879 - 19968: jis0212<<14 | 0x26<<7 | 0x03,
+ 27880 - 19968: jis0208<<14 | 0x22<<7 | 0x4C,
+ 27881 - 19968: jis0212<<14 | 0x26<<7 | 0x04,
+ 27882 - 19968: jis0208<<14 | 0x3D<<7 | 0x04,
+ 27883 - 19968: jis0212<<14 | 0x26<<7 | 0x05,
+ 27884 - 19968: jis0212<<14 | 0x26<<7 | 0x06,
+ 27886 - 19968: jis0212<<14 | 0x26<<7 | 0x07,
+ 27887 - 19968: jis0208<<14 | 0x3D<<7 | 0x02,
+ 27888 - 19968: jis0208<<14 | 0x21<<7 | 0x38,
+ 27889 - 19968: jis0208<<14 | 0x3C<<7 | 0x55,
+ 27890 - 19968: jis0212<<14 | 0x26<<7 | 0x08,
+ 27891 - 19968: jis0208<<14 | 0x10<<7 | 0x2A,
+ 27892 - 19968: jis0212<<14 | 0x26<<7 | 0x09,
+ 27908 - 19968: jis0208<<14 | 0x59<<7 | 0x3F,
+ 27911 - 19968: jis0212<<14 | 0x26<<7 | 0x0B,
+ 27914 - 19968: jis0212<<14 | 0x26<<7 | 0x0C,
+ 27915 - 19968: jis0208<<14 | 0x2C<<7 | 0x2D,
+ 27916 - 19968: jis0208<<14 | 0x3D<<7 | 0x0F,
+ 27918 - 19968: jis0212<<14 | 0x26<<7 | 0x0D,
+ 27919 - 19968: jis0212<<14 | 0x26<<7 | 0x0E,
+ 27921 - 19968: jis0212<<14 | 0x26<<7 | 0x0F,
+ 27922 - 19968: jis0208<<14 | 0x3D<<7 | 0x0E,
+ 27923 - 19968: jis0212<<14 | 0x26<<7 | 0x10,
+ 27927 - 19968: jis0208<<14 | 0x1F<<7 | 0x55,
+ 27929 - 19968: jis0208<<14 | 0x3D<<7 | 0x0B,
+ 27930 - 19968: jis0212<<14 | 0x26<<7 | 0x11,
+ 27931 - 19968: jis0208<<14 | 0x2C<<7 | 0x4B,
+ 27934 - 19968: jis0208<<14 | 0x25<<7 | 0x15,
+ 27935 - 19968: jis0208<<14 | 0x3D<<7 | 0x05,
+ 27941 - 19968: jis0208<<14 | 0x23<<7 | 0x24,
+ 27942 - 19968: jis0212<<14 | 0x26<<7 | 0x12,
+ 27943 - 19968: jis0212<<14 | 0x26<<7 | 0x13,
+ 27944 - 19968: jis0212<<14 | 0x26<<7 | 0x14,
+ 27945 - 19968: jis0208<<14 | 0x10<<7 | 0x2B,
+ 27946 - 19968: jis0208<<14 | 0x18<<7 | 0x1E,
+ 27947 - 19968: jis0208<<14 | 0x3D<<7 | 0x08,
+ 27950 - 19968: jis0212<<14 | 0x26<<7 | 0x16,
+ 27951 - 19968: jis0212<<14 | 0x26<<7 | 0x17,
+ 27953 - 19968: jis0212<<14 | 0x26<<7 | 0x18,
+ 27954 - 19968: jis0208<<14 | 0x1C<<7 | 0x06,
+ 27955 - 19968: jis0208<<14 | 0x3D<<7 | 0x0D,
+ 27957 - 19968: jis0208<<14 | 0x3D<<7 | 0x0C,
+ 27958 - 19968: jis0208<<14 | 0x3D<<7 | 0x07,
+ 27960 - 19968: jis0208<<14 | 0x3D<<7 | 0x0A,
+ 27961 - 19968: jis0212<<14 | 0x26<<7 | 0x19,
+ 27963 - 19968: jis0208<<14 | 0x12<<7 | 0x47,
+ 27964 - 19968: jis0212<<14 | 0x26<<7 | 0x1A,
+ 27965 - 19968: jis0208<<14 | 0x3D<<7 | 0x09,
+ 27966 - 19968: jis0208<<14 | 0x26<<7 | 0x28,
+ 27967 - 19968: jis0212<<14 | 0x26<<7 | 0x1B,
+ 27969 - 19968: jis0208<<14 | 0x2D<<7 | 0x0D,
+ 27972 - 19968: jis0208<<14 | 0x1D<<7 | 0x53,
+ 27973 - 19968: jis0208<<14 | 0x1F<<7 | 0x54,
+ 27991 - 19968: jis0212<<14 | 0x26<<7 | 0x1C,
+ 27993 - 19968: jis0208<<14 | 0x3D<<7 | 0x15,
+ 27994 - 19968: jis0208<<14 | 0x3D<<7 | 0x13,
+ 27996 - 19968: jis0208<<14 | 0x28<<7 | 0x2C,
+ 27998 - 19968: jis0212<<14 | 0x26<<7 | 0x1D,
+ 27999 - 19968: jis0212<<14 | 0x26<<7 | 0x1E,
+ 28001 - 19968: jis0212<<14 | 0x26<<7 | 0x1F,
+ 28003 - 19968: jis0208<<14 | 0x3D<<7 | 0x10,
+ 28004 - 19968: jis0208<<14 | 0x3D<<7 | 0x12,
+ 28005 - 19968: jis0212<<14 | 0x26<<7 | 0x20,
+ 28006 - 19968: jis0208<<14 | 0x10<<7 | 0x19,
+ 28007 - 19968: jis0212<<14 | 0x26<<7 | 0x21,
+ 28009 - 19968: jis0208<<14 | 0x18<<7 | 0x1F,
+ 28010 - 19968: jis0208<<14 | 0x2E<<7 | 0x11,
+ 28012 - 19968: jis0208<<14 | 0x12<<7 | 0x1C,
+ 28014 - 19968: jis0208<<14 | 0x28<<7 | 0x41,
+ 28015 - 19968: jis0208<<14 | 0x59<<7 | 0x41,
+ 28016 - 19968: jis0212<<14 | 0x26<<7 | 0x23,
+ 28020 - 19968: jis0208<<14 | 0x2C<<7 | 0x40,
+ 28023 - 19968: jis0208<<14 | 0x12<<7 | 0x03,
+ 28024 - 19968: jis0208<<14 | 0x1E<<7 | 0x1A,
+ 28025 - 19968: jis0208<<14 | 0x3D<<7 | 0x14,
+ 28028 - 19968: jis0212<<14 | 0x26<<7 | 0x24,
+ 28034 - 19968: jis0212<<14 | 0x26<<7 | 0x25,
+ 28037 - 19968: jis0208<<14 | 0x3D<<7 | 0x19,
+ 28039 - 19968: jis0208<<14 | 0x59<<7 | 0x40,
+ 28040 - 19968: jis0208<<14 | 0x1D<<7 | 0x22,
+ 28044 - 19968: jis0208<<14 | 0x2C<<7 | 0x0F,
+ 28046 - 19968: jis0208<<14 | 0x3D<<7 | 0x16,
+ 28049 - 19968: jis0212<<14 | 0x26<<7 | 0x27,
+ 28050 - 19968: jis0212<<14 | 0x26<<7 | 0x28,
+ 28051 - 19968: jis0208<<14 | 0x3D<<7 | 0x11,
+ 28052 - 19968: jis0212<<14 | 0x26<<7 | 0x29,
+ 28053 - 19968: jis0208<<14 | 0x3D<<7 | 0x17,
+ 28054 - 19968: jis0208<<14 | 0x59<<7 | 0x42,
+ 28055 - 19968: jis0212<<14 | 0x26<<7 | 0x2B,
+ 28056 - 19968: jis0212<<14 | 0x26<<7 | 0x2C,
+ 28057 - 19968: jis0208<<14 | 0x2D<<7 | 0x3D,
+ 28059 - 19968: jis0208<<14 | 0x24<<7 | 0x52,
+ 28060 - 19968: jis0208<<14 | 0x25<<7 | 0x21,
+ 28074 - 19968: jis0212<<14 | 0x26<<7 | 0x2D,
+ 28076 - 19968: jis0208<<14 | 0x59<<7 | 0x43,
+ 28079 - 19968: jis0208<<14 | 0x12<<7 | 0x15,
+ 28082 - 19968: jis0208<<14 | 0x10<<7 | 0x34,
+ 28084 - 19968: jis0212<<14 | 0x26<<7 | 0x2F,
+ 28085 - 19968: jis0208<<14 | 0x3D<<7 | 0x1D,
+ 28087 - 19968: jis0212<<14 | 0x26<<7 | 0x30,
+ 28088 - 19968: jis0208<<14 | 0x3D<<7 | 0x20,
+ 28089 - 19968: jis0212<<14 | 0x26<<7 | 0x31,
+ 28092 - 19968: jis0208<<14 | 0x2D<<7 | 0x22,
+ 28093 - 19968: jis0212<<14 | 0x26<<7 | 0x32,
+ 28095 - 19968: jis0212<<14 | 0x26<<7 | 0x33,
+ 28096 - 19968: jis0208<<14 | 0x2C<<7 | 0x43,
+ 28100 - 19968: jis0212<<14 | 0x26<<7 | 0x34,
+ 28101 - 19968: jis0208<<14 | 0x3D<<7 | 0x27,
+ 28102 - 19968: jis0208<<14 | 0x3D<<7 | 0x21,
+ 28103 - 19968: jis0208<<14 | 0x3D<<7 | 0x1E,
+ 28104 - 19968: jis0212<<14 | 0x26<<7 | 0x35,
+ 28106 - 19968: jis0212<<14 | 0x26<<7 | 0x36,
+ 28107 - 19968: jis0208<<14 | 0x2D<<7 | 0x33,
+ 28108 - 19968: jis0208<<14 | 0x3D<<7 | 0x24,
+ 28110 - 19968: jis0212<<14 | 0x26<<7 | 0x37,
+ 28111 - 19968: jis0208<<14 | 0x59<<7 | 0x44,
+ 28113 - 19968: jis0208<<14 | 0x1C<<7 | 0x29,
+ 28114 - 19968: jis0208<<14 | 0x3D<<7 | 0x26,
+ 28117 - 19968: jis0208<<14 | 0x3D<<7 | 0x2B,
+ 28118 - 19968: jis0212<<14 | 0x26<<7 | 0x39,
+ 28120 - 19968: jis0208<<14 | 0x24<<7 | 0x50,
+ 28121 - 19968: jis0208<<14 | 0x3D<<7 | 0x29,
+ 28123 - 19968: jis0212<<14 | 0x26<<7 | 0x3A,
+ 28125 - 19968: jis0212<<14 | 0x26<<7 | 0x3B,
+ 28126 - 19968: jis0208<<14 | 0x3D<<7 | 0x23,
+ 28127 - 19968: jis0212<<14 | 0x26<<7 | 0x3C,
+ 28128 - 19968: jis0212<<14 | 0x26<<7 | 0x3D,
+ 28129 - 19968: jis0208<<14 | 0x22<<7 | 0x17,
+ 28130 - 19968: jis0212<<14 | 0x26<<7 | 0x3E,
+ 28132 - 19968: jis0208<<14 | 0x3D<<7 | 0x2A,
+ 28133 - 19968: jis0212<<14 | 0x26<<7 | 0x3F,
+ 28134 - 19968: jis0208<<14 | 0x3D<<7 | 0x1F,
+ 28136 - 19968: jis0208<<14 | 0x3D<<7 | 0x25,
+ 28137 - 19968: jis0212<<14 | 0x26<<7 | 0x40,
+ 28138 - 19968: jis0208<<14 | 0x3D<<7 | 0x2C,
+ 28139 - 19968: jis0208<<14 | 0x0F<<7 | 0x5B,
+ 28140 - 19968: jis0208<<14 | 0x3D<<7 | 0x22,
+ 28142 - 19968: jis0208<<14 | 0x3D<<7 | 0x2D,
+ 28143 - 19968: jis0212<<14 | 0x26<<7 | 0x41,
+ 28144 - 19968: jis0212<<14 | 0x26<<7 | 0x42,
+ 28145 - 19968: jis0208<<14 | 0x1E<<7 | 0x1B,
+ 28146 - 19968: jis0208<<14 | 0x59<<7 | 0x46,
+ 28147 - 19968: jis0208<<14 | 0x1C<<7 | 0x3E,
+ 28148 - 19968: jis0212<<14 | 0x26<<7 | 0x43,
+ 28149 - 19968: jis0208<<14 | 0x29<<7 | 0x04,
+ 28150 - 19968: jis0212<<14 | 0x26<<7 | 0x44,
+ 28151 - 19968: jis0208<<14 | 0x19<<7 | 0x0D,
+ 28152 - 19968: jis0208<<14 | 0x59<<7 | 0x45,
+ 28153 - 19968: jis0208<<14 | 0x3D<<7 | 0x1A,
+ 28154 - 19968: jis0208<<14 | 0x3D<<7 | 0x28,
+ 28155 - 19968: jis0208<<14 | 0x24<<7 | 0x19,
+ 28156 - 19968: jis0208<<14 | 0x59<<7 | 0x47,
+ 28160 - 19968: jis0212<<14 | 0x26<<7 | 0x46,
+ 28164 - 19968: jis0212<<14 | 0x26<<7 | 0x47,
+ 28165 - 19968: jis0208<<14 | 0x1F<<7 | 0x15,
+ 28167 - 19968: jis0208<<14 | 0x12<<7 | 0x48,
+ 28168 - 19968: jis0208<<14 | 0x19<<7 | 0x30,
+ 28169 - 19968: jis0208<<14 | 0x1D<<7 | 0x23,
+ 28170 - 19968: jis0208<<14 | 0x3D<<7 | 0x1C,
+ 28171 - 19968: jis0208<<14 | 0x1C<<7 | 0x21,
+ 28179 - 19968: jis0208<<14 | 0x16<<7 | 0x2B,
+ 28181 - 19968: jis0208<<14 | 0x3D<<7 | 0x1B,
+ 28185 - 19968: jis0208<<14 | 0x3D<<7 | 0x31,
+ 28186 - 19968: jis0208<<14 | 0x1C<<7 | 0x4C,
+ 28187 - 19968: jis0208<<14 | 0x17<<7 | 0x19,
+ 28189 - 19968: jis0208<<14 | 0x3D<<7 | 0x40,
+ 28190 - 19968: jis0212<<14 | 0x26<<7 | 0x48,
+ 28191 - 19968: jis0208<<14 | 0x3D<<7 | 0x3A,
+ 28192 - 19968: jis0208<<14 | 0x14<<7 | 0x53,
+ 28193 - 19968: jis0208<<14 | 0x24<<7 | 0x2E,
+ 28194 - 19968: jis0212<<14 | 0x26<<7 | 0x49,
+ 28195 - 19968: jis0208<<14 | 0x3D<<7 | 0x35,
+ 28196 - 19968: jis0208<<14 | 0x3D<<7 | 0x3E,
+ 28197 - 19968: jis0208<<14 | 0x0F<<7 | 0x0E,
+ 28198 - 19968: jis0208<<14 | 0x10<<7 | 0x11,
+ 28199 - 19968: jis0208<<14 | 0x59<<7 | 0x4A,
+ 28201 - 19968: jis0208<<14 | 0x11<<7 | 0x18,
+ 28203 - 19968: jis0208<<14 | 0x3D<<7 | 0x37,
+ 28204 - 19968: jis0208<<14 | 0x21<<7 | 0x0B,
+ 28205 - 19968: jis0208<<14 | 0x3D<<7 | 0x2E,
+ 28206 - 19968: jis0208<<14 | 0x3D<<7 | 0x30,
+ 28207 - 19968: jis0208<<14 | 0x18<<7 | 0x20,
+ 28210 - 19968: jis0212<<14 | 0x26<<7 | 0x4B,
+ 28214 - 19968: jis0212<<14 | 0x26<<7 | 0x4C,
+ 28216 - 19968: jis0208<<14 | 0x3D<<7 | 0x41,
+ 28217 - 19968: jis0208<<14 | 0x59<<7 | 0x48,
+ 28218 - 19968: jis0208<<14 | 0x3D<<7 | 0x3C,
+ 28219 - 19968: jis0212<<14 | 0x26<<7 | 0x4E,
+ 28220 - 19968: jis0208<<14 | 0x59<<7 | 0x4B,
+ 28222 - 19968: jis0208<<14 | 0x3D<<7 | 0x34,
+ 28227 - 19968: jis0208<<14 | 0x3D<<7 | 0x3B,
+ 28228 - 19968: jis0212<<14 | 0x26<<7 | 0x50,
+ 28229 - 19968: jis0212<<14 | 0x26<<7 | 0x51,
+ 28232 - 19968: jis0212<<14 | 0x26<<7 | 0x52,
+ 28233 - 19968: jis0212<<14 | 0x26<<7 | 0x53,
+ 28234 - 19968: jis0208<<14 | 0x2B<<7 | 0x0A,
+ 28235 - 19968: jis0212<<14 | 0x26<<7 | 0x54,
+ 28237 - 19968: jis0208<<14 | 0x3D<<7 | 0x39,
+ 28238 - 19968: jis0208<<14 | 0x3D<<7 | 0x3D,
+ 28239 - 19968: jis0212<<14 | 0x26<<7 | 0x55,
+ 28241 - 19968: jis0212<<14 | 0x26<<7 | 0x56,
+ 28242 - 19968: jis0212<<14 | 0x26<<7 | 0x57,
+ 28243 - 19968: jis0212<<14 | 0x26<<7 | 0x58,
+ 28244 - 19968: jis0212<<14 | 0x26<<7 | 0x59,
+ 28246 - 19968: jis0208<<14 | 0x17<<7 | 0x2F,
+ 28247 - 19968: jis0212<<14 | 0x26<<7 | 0x5A,
+ 28248 - 19968: jis0208<<14 | 0x1D<<7 | 0x24,
+ 28251 - 19968: jis0208<<14 | 0x22<<7 | 0x18,
+ 28252 - 19968: jis0208<<14 | 0x59<<7 | 0x49,
+ 28253 - 19968: jis0212<<14 | 0x26<<7 | 0x5C,
+ 28254 - 19968: jis0212<<14 | 0x26<<7 | 0x5D,
+ 28255 - 19968: jis0208<<14 | 0x3D<<7 | 0x33,
+ 28258 - 19968: jis0212<<14 | 0x27<<7 | 0x00,
+ 28259 - 19968: jis0212<<14 | 0x27<<7 | 0x01,
+ 28263 - 19968: jis0208<<14 | 0x2C<<7 | 0x0E,
+ 28264 - 19968: jis0212<<14 | 0x27<<7 | 0x02,
+ 28267 - 19968: jis0208<<14 | 0x3D<<7 | 0x36,
+ 28270 - 19968: jis0208<<14 | 0x3D<<7 | 0x2F,
+ 28271 - 19968: jis0208<<14 | 0x24<<7 | 0x51,
+ 28274 - 19968: jis0208<<14 | 0x3D<<7 | 0x32,
+ 28275 - 19968: jis0212<<14 | 0x27<<7 | 0x03,
+ 28278 - 19968: jis0208<<14 | 0x3D<<7 | 0x38,
+ 28283 - 19968: jis0212<<14 | 0x27<<7 | 0x04,
+ 28285 - 19968: jis0212<<14 | 0x27<<7 | 0x05,
+ 28286 - 19968: jis0208<<14 | 0x2E<<7 | 0x30,
+ 28287 - 19968: jis0208<<14 | 0x1B<<7 | 0x1D,
+ 28288 - 19968: jis0208<<14 | 0x2A<<7 | 0x5D,
+ 28290 - 19968: jis0208<<14 | 0x3D<<7 | 0x42,
+ 28300 - 19968: jis0208<<14 | 0x27<<7 | 0x0D,
+ 28301 - 19968: jis0212<<14 | 0x27<<7 | 0x06,
+ 28303 - 19968: jis0208<<14 | 0x3D<<7 | 0x4E,
+ 28304 - 19968: jis0208<<14 | 0x17<<7 | 0x1A,
+ 28307 - 19968: jis0212<<14 | 0x27<<7 | 0x07,
+ 28310 - 19968: jis0208<<14 | 0x1C<<7 | 0x3F,
+ 28312 - 19968: jis0208<<14 | 0x3D<<7 | 0x44,
+ 28313 - 19968: jis0212<<14 | 0x27<<7 | 0x08,
+ 28316 - 19968: jis0208<<14 | 0x2D<<7 | 0x0E,
+ 28317 - 19968: jis0208<<14 | 0x18<<7 | 0x21,
+ 28319 - 19968: jis0208<<14 | 0x3D<<7 | 0x51,
+ 28320 - 19968: jis0212<<14 | 0x27<<7 | 0x09,
+ 28322 - 19968: jis0208<<14 | 0x0F<<7 | 0x4D,
+ 28325 - 19968: jis0208<<14 | 0x3D<<7 | 0x4F,
+ 28327 - 19968: jis0212<<14 | 0x27<<7 | 0x0A,
+ 28330 - 19968: jis0208<<14 | 0x3D<<7 | 0x43,
+ 28333 - 19968: jis0212<<14 | 0x27<<7 | 0x0B,
+ 28334 - 19968: jis0212<<14 | 0x27<<7 | 0x0C,
+ 28335 - 19968: jis0208<<14 | 0x3D<<7 | 0x49,
+ 28337 - 19968: jis0212<<14 | 0x27<<7 | 0x0D,
+ 28338 - 19968: jis0208<<14 | 0x3D<<7 | 0x4B,
+ 28339 - 19968: jis0212<<14 | 0x27<<7 | 0x0E,
+ 28342 - 19968: jis0208<<14 | 0x2C<<7 | 0x2E,
+ 28343 - 19968: jis0208<<14 | 0x3D<<7 | 0x46,
+ 28346 - 19968: jis0208<<14 | 0x24<<7 | 0x0D,
+ 28347 - 19968: jis0212<<14 | 0x27<<7 | 0x0F,
+ 28349 - 19968: jis0208<<14 | 0x3D<<7 | 0x48,
+ 28351 - 19968: jis0208<<14 | 0x59<<7 | 0x4C,
+ 28352 - 19968: jis0212<<14 | 0x27<<7 | 0x11,
+ 28353 - 19968: jis0212<<14 | 0x27<<7 | 0x12,
+ 28354 - 19968: jis0208<<14 | 0x3D<<7 | 0x50,
+ 28355 - 19968: jis0212<<14 | 0x27<<7 | 0x13,
+ 28356 - 19968: jis0208<<14 | 0x3D<<7 | 0x4A,
+ 28357 - 19968: jis0208<<14 | 0x2B<<7 | 0x26,
+ 28359 - 19968: jis0212<<14 | 0x27<<7 | 0x14,
+ 28360 - 19968: jis0212<<14 | 0x27<<7 | 0x15,
+ 28361 - 19968: jis0208<<14 | 0x3D<<7 | 0x45,
+ 28362 - 19968: jis0212<<14 | 0x27<<7 | 0x16,
+ 28363 - 19968: jis0208<<14 | 0x1B<<7 | 0x01,
+ 28364 - 19968: jis0208<<14 | 0x3D<<7 | 0x5D,
+ 28365 - 19968: jis0212<<14 | 0x27<<7 | 0x17,
+ 28366 - 19968: jis0212<<14 | 0x27<<7 | 0x18,
+ 28367 - 19968: jis0212<<14 | 0x27<<7 | 0x19,
+ 28369 - 19968: jis0208<<14 | 0x12<<7 | 0x49,
+ 28371 - 19968: jis0208<<14 | 0x3D<<7 | 0x47,
+ 28372 - 19968: jis0208<<14 | 0x3D<<7 | 0x4C,
+ 28373 - 19968: jis0208<<14 | 0x3D<<7 | 0x4D,
+ 28381 - 19968: jis0208<<14 | 0x21<<7 | 0x4B,
+ 28382 - 19968: jis0208<<14 | 0x21<<7 | 0x39,
+ 28395 - 19968: jis0212<<14 | 0x27<<7 | 0x1A,
+ 28396 - 19968: jis0208<<14 | 0x3D<<7 | 0x55,
+ 28397 - 19968: jis0212<<14 | 0x27<<7 | 0x1B,
+ 28398 - 19968: jis0212<<14 | 0x27<<7 | 0x1C,
+ 28399 - 19968: jis0208<<14 | 0x3D<<7 | 0x5B,
+ 28402 - 19968: jis0208<<14 | 0x3D<<7 | 0x59,
+ 28404 - 19968: jis0208<<14 | 0x24<<7 | 0x08,
+ 28407 - 19968: jis0208<<14 | 0x3E<<7 | 0x02,
+ 28408 - 19968: jis0208<<14 | 0x3D<<7 | 0x56,
+ 28409 - 19968: jis0212<<14 | 0x27<<7 | 0x1D,
+ 28411 - 19968: jis0212<<14 | 0x27<<7 | 0x1E,
+ 28413 - 19968: jis0212<<14 | 0x27<<7 | 0x1F,
+ 28414 - 19968: jis0208<<14 | 0x3D<<7 | 0x57,
+ 28415 - 19968: jis0208<<14 | 0x3D<<7 | 0x3F,
+ 28417 - 19968: jis0208<<14 | 0x14<<7 | 0x58,
+ 28418 - 19968: jis0208<<14 | 0x28<<7 | 0x19,
+ 28420 - 19968: jis0212<<14 | 0x27<<7 | 0x20,
+ 28422 - 19968: jis0208<<14 | 0x1B<<7 | 0x1E,
+ 28424 - 19968: jis0212<<14 | 0x27<<7 | 0x21,
+ 28425 - 19968: jis0208<<14 | 0x18<<7 | 0x56,
+ 28426 - 19968: jis0212<<14 | 0x27<<7 | 0x22,
+ 28428 - 19968: jis0212<<14 | 0x27<<7 | 0x23,
+ 28429 - 19968: jis0212<<14 | 0x27<<7 | 0x24,
+ 28431 - 19968: jis0208<<14 | 0x2E<<7 | 0x12,
+ 28433 - 19968: jis0208<<14 | 0x3D<<7 | 0x53,
+ 28435 - 19968: jis0208<<14 | 0x3E<<7 | 0x01,
+ 28436 - 19968: jis0208<<14 | 0x10<<7 | 0x48,
+ 28437 - 19968: jis0208<<14 | 0x20<<7 | 0x45,
+ 28438 - 19968: jis0212<<14 | 0x27<<7 | 0x25,
+ 28440 - 19968: jis0212<<14 | 0x27<<7 | 0x26,
+ 28442 - 19968: jis0212<<14 | 0x27<<7 | 0x27,
+ 28443 - 19968: jis0212<<14 | 0x27<<7 | 0x28,
+ 28448 - 19968: jis0208<<14 | 0x26<<7 | 0x58,
+ 28450 - 19968: jis0208<<14 | 0x13<<7 | 0x20,
+ 28451 - 19968: jis0208<<14 | 0x2D<<7 | 0x59,
+ 28454 - 19968: jis0212<<14 | 0x27<<7 | 0x29,
+ 28457 - 19968: jis0212<<14 | 0x27<<7 | 0x2A,
+ 28458 - 19968: jis0212<<14 | 0x27<<7 | 0x2B,
+ 28459 - 19968: jis0208<<14 | 0x2B<<7 | 0x00,
+ 28460 - 19968: jis0208<<14 | 0x23<<7 | 0x31,
+ 28461 - 19968: jis0212<<14 | 0x27<<7 | 0x32,
+ 28463 - 19968: jis0212<<14 | 0x27<<7 | 0x2C,
+ 28464 - 19968: jis0212<<14 | 0x27<<7 | 0x2D,
+ 28465 - 19968: jis0208<<14 | 0x3D<<7 | 0x5A,
+ 28466 - 19968: jis0208<<14 | 0x3D<<7 | 0x5C,
+ 28467 - 19968: jis0212<<14 | 0x27<<7 | 0x2E,
+ 28470 - 19968: jis0212<<14 | 0x27<<7 | 0x2F,
+ 28472 - 19968: jis0208<<14 | 0x20<<7 | 0x11,
+ 28475 - 19968: jis0212<<14 | 0x27<<7 | 0x30,
+ 28476 - 19968: jis0212<<14 | 0x27<<7 | 0x31,
+ 28478 - 19968: jis0208<<14 | 0x3E<<7 | 0x00,
+ 28479 - 19968: jis0208<<14 | 0x3D<<7 | 0x58,
+ 28481 - 19968: jis0208<<14 | 0x3D<<7 | 0x52,
+ 28485 - 19968: jis0208<<14 | 0x13<<7 | 0x22,
+ 28495 - 19968: jis0212<<14 | 0x27<<7 | 0x33,
+ 28497 - 19968: jis0212<<14 | 0x27<<7 | 0x34,
+ 28498 - 19968: jis0212<<14 | 0x27<<7 | 0x35,
+ 28499 - 19968: jis0212<<14 | 0x27<<7 | 0x36,
+ 28500 - 19968: jis0208<<14 | 0x16<<7 | 0x48,
+ 28503 - 19968: jis0212<<14 | 0x27<<7 | 0x37,
+ 28504 - 19968: jis0208<<14 | 0x3E<<7 | 0x0E,
+ 28505 - 19968: jis0212<<14 | 0x27<<7 | 0x38,
+ 28506 - 19968: jis0212<<14 | 0x27<<7 | 0x39,
+ 28507 - 19968: jis0208<<14 | 0x3E<<7 | 0x09,
+ 28508 - 19968: jis0208<<14 | 0x1F<<7 | 0x57,
+ 28509 - 19968: jis0212<<14 | 0x27<<7 | 0x3A,
+ 28510 - 19968: jis0212<<14 | 0x27<<7 | 0x3B,
+ 28511 - 19968: jis0208<<14 | 0x12<<7 | 0x42,
+ 28513 - 19968: jis0212<<14 | 0x27<<7 | 0x3C,
+ 28514 - 19968: jis0212<<14 | 0x27<<7 | 0x3D,
+ 28516 - 19968: jis0208<<14 | 0x1C<<7 | 0x40,
+ 28518 - 19968: jis0208<<14 | 0x3E<<7 | 0x12,
+ 28520 - 19968: jis0212<<14 | 0x27<<7 | 0x3E,
+ 28524 - 19968: jis0212<<14 | 0x27<<7 | 0x3F,
+ 28525 - 19968: jis0208<<14 | 0x3E<<7 | 0x0B,
+ 28526 - 19968: jis0208<<14 | 0x23<<7 | 0x0B,
+ 28527 - 19968: jis0208<<14 | 0x3E<<7 | 0x08,
+ 28528 - 19968: jis0208<<14 | 0x23<<7 | 0x38,
+ 28532 - 19968: jis0208<<14 | 0x3E<<7 | 0x2B,
+ 28536 - 19968: jis0208<<14 | 0x3E<<7 | 0x05,
+ 28538 - 19968: jis0208<<14 | 0x3E<<7 | 0x04,
+ 28540 - 19968: jis0208<<14 | 0x3E<<7 | 0x0D,
+ 28541 - 19968: jis0212<<14 | 0x27<<7 | 0x40,
+ 28542 - 19968: jis0212<<14 | 0x27<<7 | 0x41,
+ 28544 - 19968: jis0208<<14 | 0x3E<<7 | 0x07,
+ 28545 - 19968: jis0208<<14 | 0x3E<<7 | 0x06,
+ 28546 - 19968: jis0208<<14 | 0x3E<<7 | 0x0C,
+ 28547 - 19968: jis0212<<14 | 0x27<<7 | 0x42,
+ 28548 - 19968: jis0208<<14 | 0x1F<<7 | 0x00,
+ 28550 - 19968: jis0208<<14 | 0x3E<<7 | 0x03,
+ 28551 - 19968: jis0212<<14 | 0x27<<7 | 0x43,
+ 28552 - 19968: jis0208<<14 | 0x59<<7 | 0x4D,
+ 28555 - 19968: jis0212<<14 | 0x27<<7 | 0x45,
+ 28556 - 19968: jis0212<<14 | 0x27<<7 | 0x46,
+ 28557 - 19968: jis0212<<14 | 0x27<<7 | 0x47,
+ 28558 - 19968: jis0208<<14 | 0x3E<<7 | 0x0F,
+ 28560 - 19968: jis0212<<14 | 0x27<<7 | 0x48,
+ 28561 - 19968: jis0208<<14 | 0x3E<<7 | 0x10,
+ 28562 - 19968: jis0212<<14 | 0x27<<7 | 0x49,
+ 28563 - 19968: jis0212<<14 | 0x27<<7 | 0x4A,
+ 28564 - 19968: jis0212<<14 | 0x27<<7 | 0x4B,
+ 28566 - 19968: jis0212<<14 | 0x27<<7 | 0x4C,
+ 28567 - 19968: jis0208<<14 | 0x13<<7 | 0x21,
+ 28570 - 19968: jis0212<<14 | 0x27<<7 | 0x4D,
+ 28575 - 19968: jis0212<<14 | 0x27<<7 | 0x4E,
+ 28576 - 19968: jis0212<<14 | 0x27<<7 | 0x4F,
+ 28577 - 19968: jis0208<<14 | 0x3E<<7 | 0x15,
+ 28579 - 19968: jis0208<<14 | 0x3E<<7 | 0x14,
+ 28580 - 19968: jis0208<<14 | 0x3E<<7 | 0x16,
+ 28581 - 19968: jis0212<<14 | 0x27<<7 | 0x50,
+ 28582 - 19968: jis0212<<14 | 0x27<<7 | 0x51,
+ 28583 - 19968: jis0212<<14 | 0x27<<7 | 0x52,
+ 28584 - 19968: jis0212<<14 | 0x27<<7 | 0x53,
+ 28586 - 19968: jis0208<<14 | 0x3E<<7 | 0x19,
+ 28590 - 19968: jis0212<<14 | 0x27<<7 | 0x54,
+ 28591 - 19968: jis0212<<14 | 0x27<<7 | 0x55,
+ 28592 - 19968: jis0212<<14 | 0x27<<7 | 0x56,
+ 28593 - 19968: jis0208<<14 | 0x24<<7 | 0x22,
+ 28595 - 19968: jis0208<<14 | 0x3E<<7 | 0x13,
+ 28597 - 19968: jis0208<<14 | 0x59<<7 | 0x4E,
+ 28598 - 19968: jis0212<<14 | 0x27<<7 | 0x58,
+ 28601 - 19968: jis0208<<14 | 0x3E<<7 | 0x17,
+ 28604 - 19968: jis0212<<14 | 0x27<<7 | 0x59,
+ 28608 - 19968: jis0208<<14 | 0x16<<7 | 0x42,
+ 28609 - 19968: jis0208<<14 | 0x21<<7 | 0x58,
+ 28610 - 19968: jis0208<<14 | 0x3E<<7 | 0x11,
+ 28611 - 19968: jis0208<<14 | 0x26<<7 | 0x1A,
+ 28613 - 19968: jis0212<<14 | 0x27<<7 | 0x5A,
+ 28614 - 19968: jis0208<<14 | 0x3E<<7 | 0x18,
+ 28615 - 19968: jis0212<<14 | 0x27<<7 | 0x5B,
+ 28616 - 19968: jis0212<<14 | 0x27<<7 | 0x5C,
+ 28618 - 19968: jis0212<<14 | 0x27<<7 | 0x5D,
+ 28628 - 19968: jis0208<<14 | 0x3E<<7 | 0x1D,
+ 28629 - 19968: jis0208<<14 | 0x3E<<7 | 0x1B,
+ 28632 - 19968: jis0208<<14 | 0x3E<<7 | 0x1E,
+ 28634 - 19968: jis0212<<14 | 0x28<<7 | 0x00,
+ 28635 - 19968: jis0208<<14 | 0x3E<<7 | 0x21,
+ 28638 - 19968: jis0212<<14 | 0x28<<7 | 0x01,
+ 28639 - 19968: jis0208<<14 | 0x3E<<7 | 0x1A,
+ 28640 - 19968: jis0208<<14 | 0x18<<7 | 0x49,
+ 28641 - 19968: jis0208<<14 | 0x26<<7 | 0x07,
+ 28644 - 19968: jis0208<<14 | 0x3D<<7 | 0x18,
+ 28648 - 19968: jis0212<<14 | 0x28<<7 | 0x02,
+ 28649 - 19968: jis0212<<14 | 0x28<<7 | 0x03,
+ 28651 - 19968: jis0208<<14 | 0x2C<<7 | 0x53,
+ 28652 - 19968: jis0208<<14 | 0x3E<<7 | 0x1C,
+ 28654 - 19968: jis0208<<14 | 0x3E<<7 | 0x20,
+ 28655 - 19968: jis0208<<14 | 0x21<<7 | 0x54,
+ 28656 - 19968: jis0212<<14 | 0x28<<7 | 0x04,
+ 28657 - 19968: jis0208<<14 | 0x3E<<7 | 0x1F,
+ 28659 - 19968: jis0208<<14 | 0x3E<<7 | 0x0A,
+ 28661 - 19968: jis0208<<14 | 0x59<<7 | 0x4F,
+ 28662 - 19968: jis0208<<14 | 0x4E<<7 | 0x48,
+ 28665 - 19968: jis0212<<14 | 0x28<<7 | 0x06,
+ 28666 - 19968: jis0208<<14 | 0x3E<<7 | 0x24,
+ 28668 - 19968: jis0212<<14 | 0x28<<7 | 0x07,
+ 28669 - 19968: jis0212<<14 | 0x28<<7 | 0x08,
+ 28670 - 19968: jis0208<<14 | 0x3E<<7 | 0x28,
+ 28672 - 19968: jis0212<<14 | 0x28<<7 | 0x09,
+ 28673 - 19968: jis0208<<14 | 0x3E<<7 | 0x26,
+ 28677 - 19968: jis0208<<14 | 0x59<<7 | 0x50,
+ 28678 - 19968: jis0212<<14 | 0x28<<7 | 0x0B,
+ 28679 - 19968: jis0208<<14 | 0x59<<7 | 0x51,
+ 28681 - 19968: jis0208<<14 | 0x3E<<7 | 0x22,
+ 28683 - 19968: jis0208<<14 | 0x3E<<7 | 0x23,
+ 28685 - 19968: jis0212<<14 | 0x28<<7 | 0x0D,
+ 28687 - 19968: jis0208<<14 | 0x3E<<7 | 0x27,
+ 28689 - 19968: jis0208<<14 | 0x3E<<7 | 0x25,
+ 28693 - 19968: jis0208<<14 | 0x28<<7 | 0x2D,
+ 28695 - 19968: jis0212<<14 | 0x28<<7 | 0x0E,
+ 28696 - 19968: jis0208<<14 | 0x3E<<7 | 0x2D,
+ 28698 - 19968: jis0208<<14 | 0x3E<<7 | 0x2A,
+ 28699 - 19968: jis0208<<14 | 0x3E<<7 | 0x29,
+ 28701 - 19968: jis0208<<14 | 0x3E<<7 | 0x2C,
+ 28702 - 19968: jis0208<<14 | 0x25<<7 | 0x33,
+ 28703 - 19968: jis0208<<14 | 0x3E<<7 | 0x2E,
+ 28704 - 19968: jis0212<<14 | 0x28<<7 | 0x0F,
+ 28707 - 19968: jis0212<<14 | 0x28<<7 | 0x10,
+ 28710 - 19968: jis0208<<14 | 0x22<<7 | 0x54,
+ 28711 - 19968: jis0208<<14 | 0x21<<7 | 0x4C,
+ 28712 - 19968: jis0208<<14 | 0x59<<7 | 0x52,
+ 28716 - 19968: jis0208<<14 | 0x1F<<7 | 0x04,
+ 28719 - 19968: jis0212<<14 | 0x28<<7 | 0x11,
+ 28720 - 19968: jis0208<<14 | 0x3E<<7 | 0x2F,
+ 28722 - 19968: jis0208<<14 | 0x3E<<7 | 0x31,
+ 28724 - 19968: jis0212<<14 | 0x28<<7 | 0x12,
+ 28727 - 19968: jis0212<<14 | 0x28<<7 | 0x13,
+ 28729 - 19968: jis0212<<14 | 0x28<<7 | 0x14,
+ 28732 - 19968: jis0212<<14 | 0x28<<7 | 0x15,
+ 28734 - 19968: jis0208<<14 | 0x3E<<7 | 0x30,
+ 28739 - 19968: jis0212<<14 | 0x28<<7 | 0x16,
+ 28740 - 19968: jis0212<<14 | 0x28<<7 | 0x17,
+ 28744 - 19968: jis0212<<14 | 0x28<<7 | 0x18,
+ 28745 - 19968: jis0212<<14 | 0x28<<7 | 0x19,
+ 28746 - 19968: jis0212<<14 | 0x28<<7 | 0x1A,
+ 28747 - 19968: jis0212<<14 | 0x28<<7 | 0x1B,
+ 28748 - 19968: jis0208<<14 | 0x3D<<7 | 0x54,
+ 28750 - 19968: jis0212<<14 | 0x28<<7 | 0x20,
+ 28753 - 19968: jis0208<<14 | 0x3E<<7 | 0x32,
+ 28756 - 19968: jis0212<<14 | 0x28<<7 | 0x1C,
+ 28757 - 19968: jis0212<<14 | 0x28<<7 | 0x1D,
+ 28760 - 19968: jis0208<<14 | 0x25<<7 | 0x46,
+ 28765 - 19968: jis0212<<14 | 0x28<<7 | 0x1E,
+ 28766 - 19968: jis0212<<14 | 0x28<<7 | 0x1F,
+ 28771 - 19968: jis0208<<14 | 0x3E<<7 | 0x33,
+ 28772 - 19968: jis0212<<14 | 0x28<<7 | 0x21,
+ 28773 - 19968: jis0212<<14 | 0x28<<7 | 0x22,
+ 28779 - 19968: jis0208<<14 | 0x11<<7 | 0x2F,
+ 28780 - 19968: jis0212<<14 | 0x28<<7 | 0x23,
+ 28782 - 19968: jis0212<<14 | 0x28<<7 | 0x24,
+ 28783 - 19968: jis0208<<14 | 0x24<<7 | 0x53,
+ 28784 - 19968: jis0208<<14 | 0x12<<7 | 0x04,
+ 28789 - 19968: jis0212<<14 | 0x28<<7 | 0x25,
+ 28790 - 19968: jis0212<<14 | 0x28<<7 | 0x26,
+ 28792 - 19968: jis0208<<14 | 0x14<<7 | 0x43,
+ 28796 - 19968: jis0208<<14 | 0x1B<<7 | 0x3D,
+ 28797 - 19968: jis0208<<14 | 0x19<<7 | 0x31,
+ 28798 - 19968: jis0212<<14 | 0x28<<7 | 0x27,
+ 28801 - 19968: jis0212<<14 | 0x28<<7 | 0x28,
+ 28805 - 19968: jis0208<<14 | 0x59<<7 | 0x53,
+ 28806 - 19968: jis0212<<14 | 0x28<<7 | 0x2A,
+ 28809 - 19968: jis0208<<14 | 0x2E<<7 | 0x06,
+ 28810 - 19968: jis0208<<14 | 0x1E<<7 | 0x45,
+ 28814 - 19968: jis0208<<14 | 0x10<<7 | 0x49,
+ 28818 - 19968: jis0208<<14 | 0x3E<<7 | 0x35,
+ 28820 - 19968: jis0212<<14 | 0x28<<7 | 0x2B,
+ 28821 - 19968: jis0212<<14 | 0x28<<7 | 0x2C,
+ 28822 - 19968: jis0212<<14 | 0x28<<7 | 0x2D,
+ 28823 - 19968: jis0212<<14 | 0x28<<7 | 0x2E,
+ 28824 - 19968: jis0212<<14 | 0x28<<7 | 0x2F,
+ 28825 - 19968: jis0208<<14 | 0x3E<<7 | 0x34,
+ 28827 - 19968: jis0212<<14 | 0x28<<7 | 0x30,
+ 28836 - 19968: jis0212<<14 | 0x28<<7 | 0x31,
+ 28843 - 19968: jis0208<<14 | 0x59<<7 | 0x54,
+ 28844 - 19968: jis0208<<14 | 0x3E<<7 | 0x38,
+ 28845 - 19968: jis0208<<14 | 0x22<<7 | 0x19,
+ 28846 - 19968: jis0208<<14 | 0x3E<<7 | 0x3B,
+ 28847 - 19968: jis0208<<14 | 0x3E<<7 | 0x36,
+ 28848 - 19968: jis0212<<14 | 0x28<<7 | 0x33,
+ 28849 - 19968: jis0212<<14 | 0x28<<7 | 0x34,
+ 28851 - 19968: jis0208<<14 | 0x3E<<7 | 0x3A,
+ 28852 - 19968: jis0212<<14 | 0x28<<7 | 0x35,
+ 28855 - 19968: jis0212<<14 | 0x28<<7 | 0x36,
+ 28856 - 19968: jis0208<<14 | 0x3E<<7 | 0x39,
+ 28857 - 19968: jis0208<<14 | 0x24<<7 | 0x1F,
+ 28858 - 19968: jis0208<<14 | 0x0F<<7 | 0x38,
+ 28859 - 19968: jis0208<<14 | 0x58<<7 | 0x06,
+ 28872 - 19968: jis0208<<14 | 0x2D<<7 | 0x54,
+ 28874 - 19968: jis0212<<14 | 0x28<<7 | 0x37,
+ 28875 - 19968: jis0208<<14 | 0x3E<<7 | 0x3D,
+ 28879 - 19968: jis0208<<14 | 0x10<<7 | 0x07,
+ 28881 - 19968: jis0212<<14 | 0x28<<7 | 0x38,
+ 28883 - 19968: jis0212<<14 | 0x28<<7 | 0x39,
+ 28884 - 19968: jis0212<<14 | 0x28<<7 | 0x3A,
+ 28885 - 19968: jis0212<<14 | 0x28<<7 | 0x3B,
+ 28886 - 19968: jis0212<<14 | 0x28<<7 | 0x3C,
+ 28888 - 19968: jis0212<<14 | 0x28<<7 | 0x3D,
+ 28889 - 19968: jis0208<<14 | 0x3E<<7 | 0x3F,
+ 28892 - 19968: jis0212<<14 | 0x28<<7 | 0x3E,
+ 28893 - 19968: jis0208<<14 | 0x3E<<7 | 0x3E,
+ 28895 - 19968: jis0208<<14 | 0x3E<<7 | 0x3C,
+ 28900 - 19968: jis0212<<14 | 0x28<<7 | 0x3F,
+ 28913 - 19968: jis0208<<14 | 0x3E<<7 | 0x37,
+ 28921 - 19968: jis0208<<14 | 0x2A<<7 | 0x02,
+ 28922 - 19968: jis0212<<14 | 0x28<<7 | 0x40,
+ 28925 - 19968: jis0208<<14 | 0x3E<<7 | 0x41,
+ 28931 - 19968: jis0212<<14 | 0x28<<7 | 0x41,
+ 28932 - 19968: jis0208<<14 | 0x59<<7 | 0x56,
+ 28933 - 19968: jis0212<<14 | 0x28<<7 | 0x43,
+ 28934 - 19968: jis0212<<14 | 0x28<<7 | 0x44,
+ 28935 - 19968: jis0212<<14 | 0x28<<7 | 0x45,
+ 28937 - 19968: jis0208<<14 | 0x3E<<7 | 0x40,
+ 28939 - 19968: jis0212<<14 | 0x28<<7 | 0x46,
+ 28940 - 19968: jis0212<<14 | 0x28<<7 | 0x47,
+ 28943 - 19968: jis0208<<14 | 0x59<<7 | 0x55,
+ 28948 - 19968: jis0208<<14 | 0x10<<7 | 0x4A,
+ 28953 - 19968: jis0208<<14 | 0x3E<<7 | 0x43,
+ 28954 - 19968: jis0208<<14 | 0x29<<7 | 0x11,
+ 28956 - 19968: jis0208<<14 | 0x3E<<7 | 0x42,
+ 28958 - 19968: jis0212<<14 | 0x28<<7 | 0x49,
+ 28960 - 19968: jis0212<<14 | 0x28<<7 | 0x4A,
+ 28961 - 19968: jis0208<<14 | 0x2B<<7 | 0x14,
+ 28966 - 19968: jis0208<<14 | 0x1D<<7 | 0x26,
+ 28971 - 19968: jis0212<<14 | 0x28<<7 | 0x4B,
+ 28973 - 19968: jis0212<<14 | 0x28<<7 | 0x4C,
+ 28975 - 19968: jis0212<<14 | 0x28<<7 | 0x4D,
+ 28976 - 19968: jis0212<<14 | 0x28<<7 | 0x4E,
+ 28977 - 19968: jis0212<<14 | 0x28<<7 | 0x4F,
+ 28982 - 19968: jis0208<<14 | 0x20<<7 | 0x12,
+ 28984 - 19968: jis0212<<14 | 0x28<<7 | 0x50,
+ 28988 - 19968: jis0208<<14 | 0x1D<<7 | 0x25,
+ 28993 - 19968: jis0212<<14 | 0x28<<7 | 0x51,
+ 28997 - 19968: jis0212<<14 | 0x28<<7 | 0x52,
+ 28998 - 19968: jis0208<<14 | 0x59<<7 | 0x58,
+ 28999 - 19968: jis0208<<14 | 0x59<<7 | 0x59,
+ 29001 - 19968: jis0208<<14 | 0x2D<<7 | 0x5A,
+ 29002 - 19968: jis0212<<14 | 0x28<<7 | 0x55,
+ 29003 - 19968: jis0212<<14 | 0x28<<7 | 0x56,
+ 29004 - 19968: jis0208<<14 | 0x3E<<7 | 0x49,
+ 29006 - 19968: jis0208<<14 | 0x1F<<7 | 0x58,
+ 29008 - 19968: jis0212<<14 | 0x28<<7 | 0x57,
+ 29010 - 19968: jis0212<<14 | 0x28<<7 | 0x58,
+ 29013 - 19968: jis0208<<14 | 0x3E<<7 | 0x45,
+ 29014 - 19968: jis0208<<14 | 0x3E<<7 | 0x4A,
+ 29015 - 19968: jis0212<<14 | 0x28<<7 | 0x59,
+ 29017 - 19968: jis0208<<14 | 0x10<<7 | 0x4B,
+ 29018 - 19968: jis0212<<14 | 0x28<<7 | 0x5A,
+ 29020 - 19968: jis0208<<14 | 0x59<<7 | 0x57,
+ 29022 - 19968: jis0212<<14 | 0x28<<7 | 0x5C,
+ 29024 - 19968: jis0212<<14 | 0x28<<7 | 0x5D,
+ 29026 - 19968: jis0208<<14 | 0x3E<<7 | 0x48,
+ 29028 - 19968: jis0208<<14 | 0x26<<7 | 0x40,
+ 29029 - 19968: jis0208<<14 | 0x3E<<7 | 0x44,
+ 29030 - 19968: jis0208<<14 | 0x3E<<7 | 0x47,
+ 29031 - 19968: jis0208<<14 | 0x1D<<7 | 0x27,
+ 29032 - 19968: jis0212<<14 | 0x29<<7 | 0x00,
+ 29033 - 19968: jis0208<<14 | 0x27<<7 | 0x30,
+ 29036 - 19968: jis0208<<14 | 0x3E<<7 | 0x4B,
+ 29038 - 19968: jis0208<<14 | 0x1B<<7 | 0x30,
+ 29049 - 19968: jis0212<<14 | 0x29<<7 | 0x01,
+ 29053 - 19968: jis0208<<14 | 0x1F<<7 | 0x59,
+ 29056 - 19968: jis0212<<14 | 0x29<<7 | 0x02,
+ 29060 - 19968: jis0208<<14 | 0x3E<<7 | 0x4E,
+ 29061 - 19968: jis0212<<14 | 0x29<<7 | 0x03,
+ 29063 - 19968: jis0212<<14 | 0x29<<7 | 0x04,
+ 29064 - 19968: jis0208<<14 | 0x3E<<7 | 0x46,
+ 29066 - 19968: jis0208<<14 | 0x16<<7 | 0x06,
+ 29068 - 19968: jis0212<<14 | 0x29<<7 | 0x05,
+ 29071 - 19968: jis0208<<14 | 0x3E<<7 | 0x4C,
+ 29074 - 19968: jis0212<<14 | 0x29<<7 | 0x06,
+ 29076 - 19968: jis0208<<14 | 0x2C<<7 | 0x2F,
+ 29077 - 19968: jis0208<<14 | 0x3E<<7 | 0x4F,
+ 29081 - 19968: jis0208<<14 | 0x53<<7 | 0x05,
+ 29082 - 19968: jis0212<<14 | 0x29<<7 | 0x07,
+ 29083 - 19968: jis0212<<14 | 0x29<<7 | 0x08,
+ 29087 - 19968: jis0208<<14 | 0x1C<<7 | 0x2E,
+ 29088 - 19968: jis0212<<14 | 0x29<<7 | 0x09,
+ 29090 - 19968: jis0212<<14 | 0x29<<7 | 0x0A,
+ 29096 - 19968: jis0208<<14 | 0x3E<<7 | 0x50,
+ 29100 - 19968: jis0208<<14 | 0x3E<<7 | 0x51,
+ 29103 - 19968: jis0212<<14 | 0x29<<7 | 0x0B,
+ 29104 - 19968: jis0212<<14 | 0x29<<7 | 0x0C,
+ 29105 - 19968: jis0208<<14 | 0x26<<7 | 0x0D,
+ 29106 - 19968: jis0212<<14 | 0x29<<7 | 0x0D,
+ 29107 - 19968: jis0212<<14 | 0x29<<7 | 0x0E,
+ 29113 - 19968: jis0208<<14 | 0x3E<<7 | 0x53,
+ 29114 - 19968: jis0212<<14 | 0x29<<7 | 0x0F,
+ 29118 - 19968: jis0208<<14 | 0x3E<<7 | 0x54,
+ 29119 - 19968: jis0212<<14 | 0x29<<7 | 0x10,
+ 29120 - 19968: jis0212<<14 | 0x29<<7 | 0x11,
+ 29121 - 19968: jis0208<<14 | 0x59<<7 | 0x5B,
+ 29123 - 19968: jis0208<<14 | 0x26<<7 | 0x12,
+ 29124 - 19968: jis0212<<14 | 0x29<<7 | 0x13,
+ 29128 - 19968: jis0208<<14 | 0x24<<7 | 0x54,
+ 29129 - 19968: jis0208<<14 | 0x3E<<7 | 0x56,
+ 29131 - 19968: jis0212<<14 | 0x29<<7 | 0x14,
+ 29132 - 19968: jis0212<<14 | 0x29<<7 | 0x15,
+ 29134 - 19968: jis0208<<14 | 0x3E<<7 | 0x58,
+ 29136 - 19968: jis0208<<14 | 0x2D<<7 | 0x34,
+ 29138 - 19968: jis0208<<14 | 0x3E<<7 | 0x55,
+ 29139 - 19968: jis0212<<14 | 0x29<<7 | 0x16,
+ 29140 - 19968: jis0208<<14 | 0x3E<<7 | 0x57,
+ 29141 - 19968: jis0208<<14 | 0x10<<7 | 0x4C,
+ 29142 - 19968: jis0212<<14 | 0x29<<7 | 0x17,
+ 29143 - 19968: jis0208<<14 | 0x3E<<7 | 0x52,
+ 29145 - 19968: jis0212<<14 | 0x29<<7 | 0x18,
+ 29146 - 19968: jis0212<<14 | 0x29<<7 | 0x19,
+ 29148 - 19968: jis0212<<14 | 0x29<<7 | 0x1A,
+ 29151 - 19968: jis0208<<14 | 0x32<<7 | 0x3A,
+ 29152 - 19968: jis0208<<14 | 0x3E<<7 | 0x59,
+ 29157 - 19968: jis0208<<14 | 0x20<<7 | 0x46,
+ 29158 - 19968: jis0208<<14 | 0x1A<<7 | 0x17,
+ 29159 - 19968: jis0208<<14 | 0x3E<<7 | 0x5B,
+ 29164 - 19968: jis0208<<14 | 0x3E<<7 | 0x5A,
+ 29165 - 19968: jis0208<<14 | 0x1E<<7 | 0x03,
+ 29166 - 19968: jis0208<<14 | 0x31<<7 | 0x38,
+ 29173 - 19968: jis0208<<14 | 0x3E<<7 | 0x5C,
+ 29176 - 19968: jis0212<<14 | 0x29<<7 | 0x1B,
+ 29177 - 19968: jis0208<<14 | 0x3F<<7 | 0x00,
+ 29179 - 19968: jis0208<<14 | 0x3E<<7 | 0x4D,
+ 29180 - 19968: jis0208<<14 | 0x3E<<7 | 0x5D,
+ 29182 - 19968: jis0208<<14 | 0x59<<7 | 0x5C,
+ 29183 - 19968: jis0208<<14 | 0x3F<<7 | 0x01,
+ 29184 - 19968: jis0212<<14 | 0x29<<7 | 0x1D,
+ 29190 - 19968: jis0208<<14 | 0x26<<7 | 0x59,
+ 29191 - 19968: jis0212<<14 | 0x29<<7 | 0x1E,
+ 29192 - 19968: jis0212<<14 | 0x29<<7 | 0x1F,
+ 29193 - 19968: jis0212<<14 | 0x29<<7 | 0x20,
+ 29197 - 19968: jis0208<<14 | 0x3F<<7 | 0x02,
+ 29200 - 19968: jis0208<<14 | 0x3F<<7 | 0x03,
+ 29203 - 19968: jis0212<<14 | 0x29<<7 | 0x21,
+ 29207 - 19968: jis0212<<14 | 0x29<<7 | 0x22,
+ 29210 - 19968: jis0212<<14 | 0x29<<7 | 0x23,
+ 29211 - 19968: jis0208<<14 | 0x3F<<7 | 0x04,
+ 29213 - 19968: jis0212<<14 | 0x29<<7 | 0x24,
+ 29215 - 19968: jis0212<<14 | 0x29<<7 | 0x25,
+ 29220 - 19968: jis0212<<14 | 0x29<<7 | 0x26,
+ 29224 - 19968: jis0208<<14 | 0x3F<<7 | 0x05,
+ 29226 - 19968: jis0208<<14 | 0x23<<7 | 0x3D,
+ 29227 - 19968: jis0212<<14 | 0x29<<7 | 0x27,
+ 29228 - 19968: jis0208<<14 | 0x3F<<7 | 0x07,
+ 29229 - 19968: jis0208<<14 | 0x3F<<7 | 0x06,
+ 29231 - 19968: jis0212<<14 | 0x29<<7 | 0x28,
+ 29232 - 19968: jis0208<<14 | 0x3F<<7 | 0x08,
+ 29234 - 19968: jis0208<<14 | 0x3F<<7 | 0x09,
+ 29236 - 19968: jis0212<<14 | 0x29<<7 | 0x29,
+ 29237 - 19968: jis0208<<14 | 0x1B<<7 | 0x3E,
+ 29238 - 19968: jis0208<<14 | 0x28<<7 | 0x42,
+ 29240 - 19968: jis0212<<14 | 0x29<<7 | 0x2A,
+ 29241 - 19968: jis0212<<14 | 0x29<<7 | 0x2B,
+ 29242 - 19968: jis0208<<14 | 0x2B<<7 | 0x4B,
+ 29243 - 19968: jis0208<<14 | 0x3F<<7 | 0x0A,
+ 29244 - 19968: jis0208<<14 | 0x3F<<7 | 0x0B,
+ 29245 - 19968: jis0208<<14 | 0x20<<7 | 0x35,
+ 29246 - 19968: jis0208<<14 | 0x1B<<7 | 0x03,
+ 29247 - 19968: jis0208<<14 | 0x3F<<7 | 0x0C,
+ 29248 - 19968: jis0208<<14 | 0x3F<<7 | 0x0D,
+ 29249 - 19968: jis0212<<14 | 0x29<<7 | 0x2C,
+ 29250 - 19968: jis0212<<14 | 0x29<<7 | 0x2D,
+ 29251 - 19968: jis0212<<14 | 0x29<<7 | 0x2E,
+ 29253 - 19968: jis0212<<14 | 0x29<<7 | 0x2F,
+ 29254 - 19968: jis0208<<14 | 0x3F<<7 | 0x0E,
+ 29255 - 19968: jis0208<<14 | 0x29<<7 | 0x31,
+ 29256 - 19968: jis0208<<14 | 0x27<<7 | 0x26,
+ 29259 - 19968: jis0208<<14 | 0x3F<<7 | 0x0F,
+ 29260 - 19968: jis0208<<14 | 0x26<<7 | 0x36,
+ 29262 - 19968: jis0212<<14 | 0x29<<7 | 0x30,
+ 29263 - 19968: jis0212<<14 | 0x29<<7 | 0x31,
+ 29264 - 19968: jis0212<<14 | 0x29<<7 | 0x32,
+ 29266 - 19968: jis0208<<14 | 0x23<<7 | 0x0C,
+ 29267 - 19968: jis0212<<14 | 0x29<<7 | 0x33,
+ 29269 - 19968: jis0212<<14 | 0x29<<7 | 0x34,
+ 29270 - 19968: jis0212<<14 | 0x29<<7 | 0x35,
+ 29272 - 19968: jis0208<<14 | 0x3F<<7 | 0x10,
+ 29273 - 19968: jis0208<<14 | 0x11<<7 | 0x46,
+ 29274 - 19968: jis0212<<14 | 0x29<<7 | 0x36,
+ 29275 - 19968: jis0208<<14 | 0x14<<7 | 0x4C,
+ 29276 - 19968: jis0212<<14 | 0x29<<7 | 0x37,
+ 29277 - 19968: jis0208<<14 | 0x2B<<7 | 0x25,
+ 29278 - 19968: jis0212<<14 | 0x29<<7 | 0x38,
+ 29279 - 19968: jis0208<<14 | 0x2B<<7 | 0x15,
+ 29280 - 19968: jis0212<<14 | 0x29<<7 | 0x39,
+ 29281 - 19968: jis0208<<14 | 0x11<<7 | 0x13,
+ 29282 - 19968: jis0208<<14 | 0x2E<<7 | 0x13,
+ 29283 - 19968: jis0212<<14 | 0x29<<7 | 0x3A,
+ 29287 - 19968: jis0208<<14 | 0x2A<<7 | 0x31,
+ 29288 - 19968: jis0212<<14 | 0x29<<7 | 0x3B,
+ 29289 - 19968: jis0208<<14 | 0x29<<7 | 0x09,
+ 29291 - 19968: jis0212<<14 | 0x29<<7 | 0x3C,
+ 29294 - 19968: jis0212<<14 | 0x29<<7 | 0x3D,
+ 29295 - 19968: jis0212<<14 | 0x29<<7 | 0x3E,
+ 29297 - 19968: jis0212<<14 | 0x29<<7 | 0x3F,
+ 29298 - 19968: jis0208<<14 | 0x1F<<7 | 0x16,
+ 29300 - 19968: jis0208<<14 | 0x3F<<7 | 0x11,
+ 29303 - 19968: jis0212<<14 | 0x29<<7 | 0x40,
+ 29304 - 19968: jis0212<<14 | 0x29<<7 | 0x41,
+ 29305 - 19968: jis0208<<14 | 0x25<<7 | 0x22,
+ 29307 - 19968: jis0212<<14 | 0x29<<7 | 0x42,
+ 29308 - 19968: jis0212<<14 | 0x29<<7 | 0x43,
+ 29309 - 19968: jis0208<<14 | 0x17<<7 | 0x02,
+ 29310 - 19968: jis0208<<14 | 0x3F<<7 | 0x12,
+ 29311 - 19968: jis0212<<14 | 0x29<<7 | 0x44,
+ 29312 - 19968: jis0208<<14 | 0x19<<7 | 0x33,
+ 29313 - 19968: jis0208<<14 | 0x3F<<7 | 0x14,
+ 29314 - 19968: jis0208<<14 | 0x3F<<7 | 0x13,
+ 29316 - 19968: jis0212<<14 | 0x29<<7 | 0x45,
+ 29319 - 19968: jis0208<<14 | 0x3F<<7 | 0x15,
+ 29321 - 19968: jis0212<<14 | 0x29<<7 | 0x46,
+ 29325 - 19968: jis0212<<14 | 0x29<<7 | 0x47,
+ 29326 - 19968: jis0212<<14 | 0x29<<7 | 0x48,
+ 29330 - 19968: jis0208<<14 | 0x3F<<7 | 0x16,
+ 29331 - 19968: jis0212<<14 | 0x29<<7 | 0x49,
+ 29334 - 19968: jis0208<<14 | 0x3F<<7 | 0x17,
+ 29339 - 19968: jis0212<<14 | 0x29<<7 | 0x4A,
+ 29344 - 19968: jis0208<<14 | 0x14<<7 | 0x1D,
+ 29346 - 19968: jis0208<<14 | 0x3F<<7 | 0x18,
+ 29351 - 19968: jis0208<<14 | 0x3F<<7 | 0x19,
+ 29352 - 19968: jis0212<<14 | 0x29<<7 | 0x4B,
+ 29356 - 19968: jis0208<<14 | 0x17<<7 | 0x03,
+ 29357 - 19968: jis0212<<14 | 0x29<<7 | 0x4C,
+ 29358 - 19968: jis0212<<14 | 0x29<<7 | 0x4D,
+ 29359 - 19968: jis0208<<14 | 0x27<<7 | 0x27,
+ 29361 - 19968: jis0208<<14 | 0x59<<7 | 0x5D,
+ 29362 - 19968: jis0208<<14 | 0x3F<<7 | 0x1B,
+ 29364 - 19968: jis0212<<14 | 0x29<<7 | 0x4F,
+ 29366 - 19968: jis0208<<14 | 0x1D<<7 | 0x54,
+ 29369 - 19968: jis0208<<14 | 0x3F<<7 | 0x1A,
+ 29374 - 19968: jis0208<<14 | 0x5A<<7 | 0x00,
+ 29377 - 19968: jis0212<<14 | 0x29<<7 | 0x51,
+ 29378 - 19968: jis0208<<14 | 0x15<<7 | 0x17,
+ 29379 - 19968: jis0208<<14 | 0x3F<<7 | 0x1C,
+ 29380 - 19968: jis0208<<14 | 0x3F<<7 | 0x1E,
+ 29382 - 19968: jis0208<<14 | 0x3F<<7 | 0x1D,
+ 29383 - 19968: jis0212<<14 | 0x29<<7 | 0x52,
+ 29385 - 19968: jis0212<<14 | 0x29<<7 | 0x53,
+ 29388 - 19968: jis0212<<14 | 0x29<<7 | 0x54,
+ 29390 - 19968: jis0208<<14 | 0x3F<<7 | 0x1F,
+ 29392 - 19968: jis0208<<14 | 0x17<<7 | 0x30,
+ 29394 - 19968: jis0208<<14 | 0x3F<<7 | 0x20,
+ 29397 - 19968: jis0212<<14 | 0x29<<7 | 0x55,
+ 29398 - 19968: jis0212<<14 | 0x29<<7 | 0x56,
+ 29399 - 19968: jis0208<<14 | 0x15<<7 | 0x48,
+ 29400 - 19968: jis0212<<14 | 0x29<<7 | 0x57,
+ 29401 - 19968: jis0208<<14 | 0x20<<7 | 0x1F,
+ 29403 - 19968: jis0208<<14 | 0x18<<7 | 0x5C,
+ 29407 - 19968: jis0212<<14 | 0x29<<7 | 0x58,
+ 29408 - 19968: jis0208<<14 | 0x3F<<7 | 0x22,
+ 29409 - 19968: jis0208<<14 | 0x3F<<7 | 0x23,
+ 29410 - 19968: jis0208<<14 | 0x3F<<7 | 0x21,
+ 29413 - 19968: jis0212<<14 | 0x29<<7 | 0x59,
+ 29417 - 19968: jis0208<<14 | 0x1B<<7 | 0x4C,
+ 29420 - 19968: jis0208<<14 | 0x25<<7 | 0x27,
+ 29421 - 19968: jis0208<<14 | 0x15<<7 | 0x18,
+ 29427 - 19968: jis0212<<14 | 0x29<<7 | 0x5A,
+ 29428 - 19968: jis0212<<14 | 0x29<<7 | 0x5B,
+ 29431 - 19968: jis0208<<14 | 0x3F<<7 | 0x25,
+ 29432 - 19968: jis0208<<14 | 0x22<<7 | 0x0B,
+ 29433 - 19968: jis0208<<14 | 0x3F<<7 | 0x24,
+ 29434 - 19968: jis0212<<14 | 0x29<<7 | 0x5C,
+ 29435 - 19968: jis0212<<14 | 0x29<<7 | 0x5D,
+ 29436 - 19968: jis0208<<14 | 0x2E<<7 | 0x14,
+ 29437 - 19968: jis0208<<14 | 0x26<<7 | 0x41,
+ 29438 - 19968: jis0212<<14 | 0x2A<<7 | 0x00,
+ 29442 - 19968: jis0212<<14 | 0x2A<<7 | 0x01,
+ 29444 - 19968: jis0212<<14 | 0x2A<<7 | 0x02,
+ 29445 - 19968: jis0212<<14 | 0x2A<<7 | 0x03,
+ 29447 - 19968: jis0212<<14 | 0x2A<<7 | 0x04,
+ 29450 - 19968: jis0208<<14 | 0x3F<<7 | 0x28,
+ 29451 - 19968: jis0212<<14 | 0x2A<<7 | 0x05,
+ 29453 - 19968: jis0212<<14 | 0x2A<<7 | 0x06,
+ 29458 - 19968: jis0212<<14 | 0x2A<<7 | 0x07,
+ 29459 - 19968: jis0212<<14 | 0x2A<<7 | 0x08,
+ 29462 - 19968: jis0208<<14 | 0x3F<<7 | 0x2A,
+ 29463 - 19968: jis0208<<14 | 0x3F<<7 | 0x27,
+ 29464 - 19968: jis0212<<14 | 0x2A<<7 | 0x09,
+ 29465 - 19968: jis0212<<14 | 0x2A<<7 | 0x0A,
+ 29467 - 19968: jis0208<<14 | 0x2B<<7 | 0x33,
+ 29468 - 19968: jis0208<<14 | 0x3F<<7 | 0x29,
+ 29469 - 19968: jis0208<<14 | 0x3F<<7 | 0x2B,
+ 29470 - 19968: jis0212<<14 | 0x2A<<7 | 0x0B,
+ 29471 - 19968: jis0208<<14 | 0x2D<<7 | 0x23,
+ 29474 - 19968: jis0212<<14 | 0x2A<<7 | 0x0C,
+ 29476 - 19968: jis0208<<14 | 0x5A<<7 | 0x01,
+ 29477 - 19968: jis0208<<14 | 0x3F<<7 | 0x2F,
+ 29479 - 19968: jis0212<<14 | 0x2A<<7 | 0x0E,
+ 29480 - 19968: jis0212<<14 | 0x2A<<7 | 0x0F,
+ 29481 - 19968: jis0208<<14 | 0x3F<<7 | 0x2E,
+ 29482 - 19968: jis0208<<14 | 0x22<<7 | 0x55,
+ 29483 - 19968: jis0208<<14 | 0x26<<7 | 0x0C,
+ 29484 - 19968: jis0212<<14 | 0x2A<<7 | 0x10,
+ 29486 - 19968: jis0208<<14 | 0x17<<7 | 0x04,
+ 29487 - 19968: jis0208<<14 | 0x3F<<7 | 0x2D,
+ 29489 - 19968: jis0212<<14 | 0x2A<<7 | 0x11,
+ 29490 - 19968: jis0212<<14 | 0x2A<<7 | 0x12,
+ 29492 - 19968: jis0208<<14 | 0x3F<<7 | 0x2C,
+ 29493 - 19968: jis0212<<14 | 0x2A<<7 | 0x13,
+ 29494 - 19968: jis0208<<14 | 0x2C<<7 | 0x10,
+ 29495 - 19968: jis0208<<14 | 0x2C<<7 | 0x11,
+ 29498 - 19968: jis0212<<14 | 0x2A<<7 | 0x14,
+ 29499 - 19968: jis0212<<14 | 0x2A<<7 | 0x15,
+ 29501 - 19968: jis0212<<14 | 0x2A<<7 | 0x16,
+ 29502 - 19968: jis0208<<14 | 0x3F<<7 | 0x30,
+ 29503 - 19968: jis0208<<14 | 0x10<<7 | 0x4D,
+ 29507 - 19968: jis0212<<14 | 0x2A<<7 | 0x17,
+ 29508 - 19968: jis0208<<14 | 0x18<<7 | 0x55,
+ 29509 - 19968: jis0208<<14 | 0x1A<<7 | 0x41,
+ 29517 - 19968: jis0212<<14 | 0x2A<<7 | 0x18,
+ 29518 - 19968: jis0208<<14 | 0x3F<<7 | 0x31,
+ 29519 - 19968: jis0208<<14 | 0x3F<<7 | 0x32,
+ 29520 - 19968: jis0212<<14 | 0x2A<<7 | 0x19,
+ 29522 - 19968: jis0212<<14 | 0x2A<<7 | 0x1A,
+ 29526 - 19968: jis0212<<14 | 0x2A<<7 | 0x1B,
+ 29527 - 19968: jis0208<<14 | 0x3F<<7 | 0x34,
+ 29528 - 19968: jis0212<<14 | 0x2A<<7 | 0x1C,
+ 29533 - 19968: jis0212<<14 | 0x2A<<7 | 0x1D,
+ 29534 - 19968: jis0212<<14 | 0x2A<<7 | 0x1E,
+ 29535 - 19968: jis0212<<14 | 0x2A<<7 | 0x1F,
+ 29536 - 19968: jis0212<<14 | 0x2A<<7 | 0x20,
+ 29539 - 19968: jis0208<<14 | 0x1C<<7 | 0x22,
+ 29542 - 19968: jis0212<<14 | 0x2A<<7 | 0x21,
+ 29543 - 19968: jis0212<<14 | 0x2A<<7 | 0x22,
+ 29544 - 19968: jis0208<<14 | 0x3F<<7 | 0x36,
+ 29545 - 19968: jis0212<<14 | 0x2A<<7 | 0x23,
+ 29546 - 19968: jis0208<<14 | 0x3F<<7 | 0x35,
+ 29547 - 19968: jis0212<<14 | 0x2A<<7 | 0x24,
+ 29548 - 19968: jis0212<<14 | 0x2A<<7 | 0x25,
+ 29550 - 19968: jis0212<<14 | 0x2A<<7 | 0x26,
+ 29551 - 19968: jis0212<<14 | 0x2A<<7 | 0x27,
+ 29552 - 19968: jis0208<<14 | 0x3F<<7 | 0x37,
+ 29553 - 19968: jis0212<<14 | 0x2A<<7 | 0x28,
+ 29554 - 19968: jis0208<<14 | 0x12<<7 | 0x2C,
+ 29557 - 19968: jis0208<<14 | 0x3F<<7 | 0x39,
+ 29559 - 19968: jis0208<<14 | 0x5A<<7 | 0x03,
+ 29560 - 19968: jis0208<<14 | 0x3F<<7 | 0x38,
+ 29561 - 19968: jis0212<<14 | 0x2A<<7 | 0x2A,
+ 29562 - 19968: jis0208<<14 | 0x3F<<7 | 0x3B,
+ 29563 - 19968: jis0208<<14 | 0x3F<<7 | 0x3A,
+ 29564 - 19968: jis0212<<14 | 0x2A<<7 | 0x2B,
+ 29568 - 19968: jis0212<<14 | 0x2A<<7 | 0x2C,
+ 29569 - 19968: jis0212<<14 | 0x2A<<7 | 0x2D,
+ 29571 - 19968: jis0212<<14 | 0x2A<<7 | 0x2E,
+ 29572 - 19968: jis0208<<14 | 0x17<<7 | 0x1B,
+ 29573 - 19968: jis0212<<14 | 0x2A<<7 | 0x2F,
+ 29574 - 19968: jis0212<<14 | 0x2A<<7 | 0x30,
+ 29575 - 19968: jis0208<<14 | 0x2D<<7 | 0x07,
+ 29577 - 19968: jis0208<<14 | 0x15<<7 | 0x2B,
+ 29579 - 19968: jis0208<<14 | 0x11<<7 | 0x05,
+ 29582 - 19968: jis0212<<14 | 0x2A<<7 | 0x31,
+ 29584 - 19968: jis0212<<14 | 0x2A<<7 | 0x32,
+ 29587 - 19968: jis0212<<14 | 0x2A<<7 | 0x33,
+ 29589 - 19968: jis0212<<14 | 0x2A<<7 | 0x34,
+ 29590 - 19968: jis0208<<14 | 0x15<<7 | 0x49,
+ 29591 - 19968: jis0212<<14 | 0x2A<<7 | 0x35,
+ 29592 - 19968: jis0212<<14 | 0x2A<<7 | 0x36,
+ 29596 - 19968: jis0212<<14 | 0x2A<<7 | 0x37,
+ 29598 - 19968: jis0212<<14 | 0x2A<<7 | 0x38,
+ 29599 - 19968: jis0212<<14 | 0x2A<<7 | 0x39,
+ 29600 - 19968: jis0212<<14 | 0x2A<<7 | 0x3A,
+ 29602 - 19968: jis0212<<14 | 0x2A<<7 | 0x3B,
+ 29605 - 19968: jis0212<<14 | 0x2A<<7 | 0x3C,
+ 29606 - 19968: jis0212<<14 | 0x2A<<7 | 0x3D,
+ 29609 - 19968: jis0208<<14 | 0x13<<7 | 0x40,
+ 29610 - 19968: jis0212<<14 | 0x2A<<7 | 0x3E,
+ 29611 - 19968: jis0212<<14 | 0x2A<<7 | 0x3F,
+ 29613 - 19968: jis0212<<14 | 0x2A<<7 | 0x40,
+ 29618 - 19968: jis0208<<14 | 0x2D<<7 | 0x47,
+ 29619 - 19968: jis0208<<14 | 0x3F<<7 | 0x3D,
+ 29621 - 19968: jis0212<<14 | 0x2A<<7 | 0x41,
+ 29623 - 19968: jis0212<<14 | 0x2A<<7 | 0x42,
+ 29625 - 19968: jis0212<<14 | 0x2A<<7 | 0x43,
+ 29627 - 19968: jis0208<<14 | 0x3F<<7 | 0x3F,
+ 29628 - 19968: jis0212<<14 | 0x2A<<7 | 0x44,
+ 29629 - 19968: jis0208<<14 | 0x5A<<7 | 0x04,
+ 29631 - 19968: jis0212<<14 | 0x2A<<7 | 0x46,
+ 29632 - 19968: jis0208<<14 | 0x3F<<7 | 0x40,
+ 29634 - 19968: jis0208<<14 | 0x11<<7 | 0x30,
+ 29637 - 19968: jis0212<<14 | 0x2A<<7 | 0x47,
+ 29638 - 19968: jis0212<<14 | 0x2A<<7 | 0x48,
+ 29640 - 19968: jis0208<<14 | 0x3F<<7 | 0x3C,
+ 29641 - 19968: jis0208<<14 | 0x5A<<7 | 0x05,
+ 29642 - 19968: jis0208<<14 | 0x1A<<7 | 0x18,
+ 29643 - 19968: jis0212<<14 | 0x2A<<7 | 0x4A,
+ 29644 - 19968: jis0212<<14 | 0x2A<<7 | 0x4B,
+ 29645 - 19968: jis0208<<14 | 0x23<<7 | 0x20,
+ 29646 - 19968: jis0208<<14 | 0x3F<<7 | 0x3E,
+ 29647 - 19968: jis0212<<14 | 0x2A<<7 | 0x4C,
+ 29650 - 19968: jis0208<<14 | 0x5A<<7 | 0x08,
+ 29651 - 19968: jis0212<<14 | 0x2A<<7 | 0x4E,
+ 29654 - 19968: jis0208<<14 | 0x5A<<7 | 0x06,
+ 29657 - 19968: jis0212<<14 | 0x2A<<7 | 0x50,
+ 29661 - 19968: jis0212<<14 | 0x2A<<7 | 0x51,
+ 29662 - 19968: jis0208<<14 | 0x3F<<7 | 0x43,
+ 29664 - 19968: jis0208<<14 | 0x1B<<7 | 0x4D,
+ 29665 - 19968: jis0212<<14 | 0x2A<<7 | 0x52,
+ 29667 - 19968: jis0208<<14 | 0x5A<<7 | 0x07,
+ 29669 - 19968: jis0208<<14 | 0x3F<<7 | 0x41,
+ 29670 - 19968: jis0212<<14 | 0x2A<<7 | 0x54,
+ 29671 - 19968: jis0212<<14 | 0x2A<<7 | 0x55,
+ 29673 - 19968: jis0212<<14 | 0x2A<<7 | 0x56,
+ 29674 - 19968: jis0208<<14 | 0x16<<7 | 0x1D,
+ 29677 - 19968: jis0208<<14 | 0x27<<7 | 0x28,
+ 29678 - 19968: jis0208<<14 | 0x3F<<7 | 0x42,
+ 29681 - 19968: jis0208<<14 | 0x3F<<7 | 0x5D,
+ 29684 - 19968: jis0212<<14 | 0x2A<<7 | 0x57,
+ 29685 - 19968: jis0208<<14 | 0x5A<<7 | 0x0A,
+ 29687 - 19968: jis0212<<14 | 0x2A<<7 | 0x59,
+ 29688 - 19968: jis0208<<14 | 0x3F<<7 | 0x48,
+ 29689 - 19968: jis0212<<14 | 0x2A<<7 | 0x5A,
+ 29690 - 19968: jis0212<<14 | 0x2A<<7 | 0x5B,
+ 29691 - 19968: jis0212<<14 | 0x2A<<7 | 0x5C,
+ 29693 - 19968: jis0212<<14 | 0x2A<<7 | 0x5D,
+ 29694 - 19968: jis0208<<14 | 0x17<<7 | 0x1C,
+ 29695 - 19968: jis0212<<14 | 0x2B<<7 | 0x00,
+ 29696 - 19968: jis0212<<14 | 0x2B<<7 | 0x01,
+ 29697 - 19968: jis0212<<14 | 0x2B<<7 | 0x02,
+ 29699 - 19968: jis0208<<14 | 0x14<<7 | 0x44,
+ 29700 - 19968: jis0212<<14 | 0x2B<<7 | 0x03,
+ 29701 - 19968: jis0208<<14 | 0x3F<<7 | 0x45,
+ 29702 - 19968: jis0208<<14 | 0x2C<<7 | 0x5C,
+ 29703 - 19968: jis0208<<14 | 0x5A<<7 | 0x09,
+ 29705 - 19968: jis0208<<14 | 0x2D<<7 | 0x0F,
+ 29706 - 19968: jis0212<<14 | 0x2B<<7 | 0x05,
+ 29713 - 19968: jis0212<<14 | 0x2B<<7 | 0x06,
+ 29722 - 19968: jis0212<<14 | 0x2B<<7 | 0x07,
+ 29723 - 19968: jis0212<<14 | 0x2B<<7 | 0x08,
+ 29730 - 19968: jis0208<<14 | 0x21<<7 | 0x55,
+ 29732 - 19968: jis0212<<14 | 0x2B<<7 | 0x09,
+ 29733 - 19968: jis0208<<14 | 0x3F<<7 | 0x47,
+ 29734 - 19968: jis0208<<14 | 0x5A<<7 | 0x0B,
+ 29736 - 19968: jis0212<<14 | 0x2B<<7 | 0x0B,
+ 29737 - 19968: jis0208<<14 | 0x5A<<7 | 0x0D,
+ 29738 - 19968: jis0208<<14 | 0x5A<<7 | 0x0C,
+ 29739 - 19968: jis0212<<14 | 0x2B<<7 | 0x0E,
+ 29740 - 19968: jis0212<<14 | 0x2B<<7 | 0x0F,
+ 29741 - 19968: jis0212<<14 | 0x2B<<7 | 0x10,
+ 29742 - 19968: jis0208<<14 | 0x5A<<7 | 0x0E,
+ 29743 - 19968: jis0212<<14 | 0x2B<<7 | 0x12,
+ 29744 - 19968: jis0212<<14 | 0x2B<<7 | 0x13,
+ 29745 - 19968: jis0212<<14 | 0x2B<<7 | 0x14,
+ 29746 - 19968: jis0208<<14 | 0x3F<<7 | 0x49,
+ 29747 - 19968: jis0208<<14 | 0x2D<<7 | 0x35,
+ 29748 - 19968: jis0208<<14 | 0x15<<7 | 0x36,
+ 29749 - 19968: jis0208<<14 | 0x27<<7 | 0x5B,
+ 29750 - 19968: jis0208<<14 | 0x26<<7 | 0x29,
+ 29753 - 19968: jis0212<<14 | 0x2B<<7 | 0x15,
+ 29754 - 19968: jis0208<<14 | 0x3F<<7 | 0x4A,
+ 29759 - 19968: jis0208<<14 | 0x3F<<7 | 0x4C,
+ 29760 - 19968: jis0212<<14 | 0x2B<<7 | 0x16,
+ 29761 - 19968: jis0208<<14 | 0x3F<<7 | 0x4F,
+ 29763 - 19968: jis0212<<14 | 0x2B<<7 | 0x17,
+ 29764 - 19968: jis0212<<14 | 0x2B<<7 | 0x18,
+ 29766 - 19968: jis0212<<14 | 0x2B<<7 | 0x19,
+ 29767 - 19968: jis0212<<14 | 0x2B<<7 | 0x1A,
+ 29771 - 19968: jis0212<<14 | 0x2B<<7 | 0x1B,
+ 29773 - 19968: jis0212<<14 | 0x2B<<7 | 0x1C,
+ 29777 - 19968: jis0212<<14 | 0x2B<<7 | 0x1D,
+ 29778 - 19968: jis0212<<14 | 0x2B<<7 | 0x1E,
+ 29781 - 19968: jis0208<<14 | 0x3F<<7 | 0x4B,
+ 29783 - 19968: jis0212<<14 | 0x2B<<7 | 0x1F,
+ 29785 - 19968: jis0208<<14 | 0x3F<<7 | 0x4E,
+ 29786 - 19968: jis0208<<14 | 0x17<<7 | 0x49,
+ 29787 - 19968: jis0208<<14 | 0x10<<7 | 0x2C,
+ 29788 - 19968: jis0208<<14 | 0x3F<<7 | 0x50,
+ 29789 - 19968: jis0212<<14 | 0x2B<<7 | 0x20,
+ 29790 - 19968: jis0208<<14 | 0x1E<<7 | 0x4F,
+ 29791 - 19968: jis0208<<14 | 0x3F<<7 | 0x4D,
+ 29792 - 19968: jis0208<<14 | 0x2D<<7 | 0x3B,
+ 29794 - 19968: jis0208<<14 | 0x5A<<7 | 0x0F,
+ 29795 - 19968: jis0208<<14 | 0x3F<<7 | 0x53,
+ 29796 - 19968: jis0208<<14 | 0x53<<7 | 0x03,
+ 29798 - 19968: jis0212<<14 | 0x2B<<7 | 0x22,
+ 29799 - 19968: jis0212<<14 | 0x2B<<7 | 0x23,
+ 29800 - 19968: jis0212<<14 | 0x2B<<7 | 0x24,
+ 29801 - 19968: jis0208<<14 | 0x3F<<7 | 0x51,
+ 29802 - 19968: jis0208<<14 | 0x3F<<7 | 0x54,
+ 29803 - 19968: jis0212<<14 | 0x2B<<7 | 0x25,
+ 29805 - 19968: jis0212<<14 | 0x2B<<7 | 0x26,
+ 29806 - 19968: jis0212<<14 | 0x2B<<7 | 0x27,
+ 29807 - 19968: jis0208<<14 | 0x3F<<7 | 0x46,
+ 29808 - 19968: jis0208<<14 | 0x3F<<7 | 0x52,
+ 29809 - 19968: jis0212<<14 | 0x2B<<7 | 0x28,
+ 29810 - 19968: jis0212<<14 | 0x2B<<7 | 0x29,
+ 29811 - 19968: jis0208<<14 | 0x19<<7 | 0x1B,
+ 29814 - 19968: jis0208<<14 | 0x3F<<7 | 0x55,
+ 29822 - 19968: jis0208<<14 | 0x3F<<7 | 0x56,
+ 29824 - 19968: jis0212<<14 | 0x2B<<7 | 0x2A,
+ 29825 - 19968: jis0212<<14 | 0x2B<<7 | 0x2B,
+ 29827 - 19968: jis0208<<14 | 0x2C<<7 | 0x5D,
+ 29829 - 19968: jis0212<<14 | 0x2B<<7 | 0x2C,
+ 29830 - 19968: jis0212<<14 | 0x2B<<7 | 0x2D,
+ 29831 - 19968: jis0212<<14 | 0x2B<<7 | 0x2E,
+ 29833 - 19968: jis0208<<14 | 0x5A<<7 | 0x10,
+ 29835 - 19968: jis0208<<14 | 0x3F<<7 | 0x57,
+ 29839 - 19968: jis0212<<14 | 0x2B<<7 | 0x30,
+ 29840 - 19968: jis0212<<14 | 0x2B<<7 | 0x31,
+ 29841 - 19968: jis0212<<14 | 0x2B<<7 | 0x32,
+ 29842 - 19968: jis0212<<14 | 0x2B<<7 | 0x33,
+ 29848 - 19968: jis0212<<14 | 0x2B<<7 | 0x34,
+ 29849 - 19968: jis0212<<14 | 0x2B<<7 | 0x35,
+ 29850 - 19968: jis0212<<14 | 0x2B<<7 | 0x36,
+ 29852 - 19968: jis0212<<14 | 0x2B<<7 | 0x37,
+ 29854 - 19968: jis0208<<14 | 0x3F<<7 | 0x58,
+ 29855 - 19968: jis0208<<14 | 0x5A<<7 | 0x11,
+ 29856 - 19968: jis0212<<14 | 0x2B<<7 | 0x39,
+ 29857 - 19968: jis0212<<14 | 0x2B<<7 | 0x3A,
+ 29858 - 19968: jis0208<<14 | 0x3F<<7 | 0x44,
+ 29859 - 19968: jis0212<<14 | 0x2B<<7 | 0x3B,
+ 29862 - 19968: jis0212<<14 | 0x2B<<7 | 0x3C,
+ 29863 - 19968: jis0208<<14 | 0x3F<<7 | 0x59,
+ 29864 - 19968: jis0212<<14 | 0x2B<<7 | 0x3D,
+ 29865 - 19968: jis0212<<14 | 0x2B<<7 | 0x3E,
+ 29866 - 19968: jis0212<<14 | 0x2B<<7 | 0x3F,
+ 29867 - 19968: jis0212<<14 | 0x2B<<7 | 0x40,
+ 29870 - 19968: jis0212<<14 | 0x2B<<7 | 0x41,
+ 29871 - 19968: jis0212<<14 | 0x2B<<7 | 0x42,
+ 29872 - 19968: jis0208<<14 | 0x13<<7 | 0x23,
+ 29873 - 19968: jis0212<<14 | 0x2B<<7 | 0x43,
+ 29874 - 19968: jis0212<<14 | 0x2B<<7 | 0x44,
+ 29877 - 19968: jis0212<<14 | 0x2B<<7 | 0x45,
+ 29881 - 19968: jis0212<<14 | 0x2B<<7 | 0x46,
+ 29883 - 19968: jis0212<<14 | 0x2B<<7 | 0x47,
+ 29885 - 19968: jis0208<<14 | 0x1B<<7 | 0x04,
+ 29887 - 19968: jis0212<<14 | 0x2B<<7 | 0x48,
+ 29896 - 19968: jis0212<<14 | 0x2B<<7 | 0x49,
+ 29897 - 19968: jis0212<<14 | 0x2B<<7 | 0x4A,
+ 29898 - 19968: jis0208<<14 | 0x3F<<7 | 0x5A,
+ 29900 - 19968: jis0212<<14 | 0x2B<<7 | 0x4B,
+ 29903 - 19968: jis0208<<14 | 0x3F<<7 | 0x5B,
+ 29904 - 19968: jis0212<<14 | 0x2B<<7 | 0x4C,
+ 29907 - 19968: jis0212<<14 | 0x2B<<7 | 0x4D,
+ 29908 - 19968: jis0208<<14 | 0x3F<<7 | 0x5C,
+ 29912 - 19968: jis0212<<14 | 0x2B<<7 | 0x4E,
+ 29914 - 19968: jis0212<<14 | 0x2B<<7 | 0x4F,
+ 29915 - 19968: jis0212<<14 | 0x2B<<7 | 0x50,
+ 29916 - 19968: jis0208<<14 | 0x10<<7 | 0x1A,
+ 29918 - 19968: jis0212<<14 | 0x2B<<7 | 0x51,
+ 29919 - 19968: jis0212<<14 | 0x2B<<7 | 0x52,
+ 29920 - 19968: jis0208<<14 | 0x40<<7 | 0x00,
+ 29922 - 19968: jis0208<<14 | 0x28<<7 | 0x1A,
+ 29923 - 19968: jis0208<<14 | 0x40<<7 | 0x01,
+ 29924 - 19968: jis0212<<14 | 0x2B<<7 | 0x53,
+ 29926 - 19968: jis0208<<14 | 0x13<<7 | 0x03,
+ 29927 - 19968: jis0208<<14 | 0x40<<7 | 0x02,
+ 29928 - 19968: jis0212<<14 | 0x2B<<7 | 0x54,
+ 29929 - 19968: jis0208<<14 | 0x40<<7 | 0x03,
+ 29930 - 19968: jis0212<<14 | 0x2B<<7 | 0x55,
+ 29931 - 19968: jis0212<<14 | 0x2B<<7 | 0x56,
+ 29934 - 19968: jis0208<<14 | 0x40<<7 | 0x04,
+ 29935 - 19968: jis0212<<14 | 0x2B<<7 | 0x57,
+ 29936 - 19968: jis0208<<14 | 0x40<<7 | 0x06,
+ 29937 - 19968: jis0208<<14 | 0x40<<7 | 0x07,
+ 29938 - 19968: jis0208<<14 | 0x40<<7 | 0x05,
+ 29940 - 19968: jis0212<<14 | 0x2B<<7 | 0x58,
+ 29942 - 19968: jis0208<<14 | 0x28<<7 | 0x32,
+ 29943 - 19968: jis0208<<14 | 0x40<<7 | 0x09,
+ 29944 - 19968: jis0208<<14 | 0x40<<7 | 0x08,
+ 29946 - 19968: jis0212<<14 | 0x2B<<7 | 0x59,
+ 29947 - 19968: jis0212<<14 | 0x2B<<7 | 0x5A,
+ 29948 - 19968: jis0212<<14 | 0x2B<<7 | 0x5B,
+ 29951 - 19968: jis0212<<14 | 0x2B<<7 | 0x5C,
+ 29953 - 19968: jis0208<<14 | 0x5A<<7 | 0x12,
+ 29955 - 19968: jis0208<<14 | 0x40<<7 | 0x0B,
+ 29956 - 19968: jis0208<<14 | 0x40<<7 | 0x0A,
+ 29957 - 19968: jis0208<<14 | 0x40<<7 | 0x0C,
+ 29958 - 19968: jis0212<<14 | 0x2B<<7 | 0x5D,
+ 29964 - 19968: jis0208<<14 | 0x40<<7 | 0x0D,
+ 29965 - 19968: jis0208<<14 | 0x40<<7 | 0x0F,
+ 29966 - 19968: jis0208<<14 | 0x40<<7 | 0x0E,
+ 29969 - 19968: jis0208<<14 | 0x18<<7 | 0x58,
+ 29970 - 19968: jis0212<<14 | 0x2C<<7 | 0x00,
+ 29971 - 19968: jis0208<<14 | 0x40<<7 | 0x11,
+ 29973 - 19968: jis0208<<14 | 0x40<<7 | 0x10,
+ 29974 - 19968: jis0212<<14 | 0x2C<<7 | 0x01,
+ 29975 - 19968: jis0212<<14 | 0x2C<<7 | 0x02,
+ 29976 - 19968: jis0208<<14 | 0x13<<7 | 0x24,
+ 29978 - 19968: jis0208<<14 | 0x1E<<7 | 0x32,
+ 29980 - 19968: jis0208<<14 | 0x24<<7 | 0x1B,
+ 29982 - 19968: jis0208<<14 | 0x40<<7 | 0x12,
+ 29983 - 19968: jis0208<<14 | 0x1F<<7 | 0x17,
+ 29984 - 19968: jis0212<<14 | 0x2C<<7 | 0x03,
+ 29985 - 19968: jis0212<<14 | 0x2C<<7 | 0x04,
+ 29987 - 19968: jis0208<<14 | 0x1A<<7 | 0x19,
+ 29988 - 19968: jis0212<<14 | 0x2C<<7 | 0x05,
+ 29989 - 19968: jis0208<<14 | 0x10<<7 | 0x58,
+ 29990 - 19968: jis0208<<14 | 0x40<<7 | 0x13,
+ 29991 - 19968: jis0212<<14 | 0x2C<<7 | 0x06,
+ 29992 - 19968: jis0208<<14 | 0x2C<<7 | 0x30,
+ 29993 - 19968: jis0212<<14 | 0x2C<<7 | 0x07,
+ 29994 - 19968: jis0212<<14 | 0x2C<<7 | 0x08,
+ 29995 - 19968: jis0208<<14 | 0x29<<7 | 0x42,
+ 29996 - 19968: jis0208<<14 | 0x40<<7 | 0x14,
+ 29999 - 19968: jis0208<<14 | 0x58<<7 | 0x4B,
+ 30000 - 19968: jis0208<<14 | 0x24<<7 | 0x23,
+ 30001 - 19968: jis0208<<14 | 0x2C<<7 | 0x12,
+ 30002 - 19968: jis0208<<14 | 0x18<<7 | 0x22,
+ 30003 - 19968: jis0208<<14 | 0x1E<<7 | 0x1C,
+ 30006 - 19968: jis0212<<14 | 0x2C<<7 | 0x0A,
+ 30007 - 19968: jis0208<<14 | 0x22<<7 | 0x2A,
+ 30008 - 19968: jis0208<<14 | 0x31<<7 | 0x13,
+ 30009 - 19968: jis0212<<14 | 0x2C<<7 | 0x0B,
+ 30010 - 19968: jis0208<<14 | 0x23<<7 | 0x0D,
+ 30011 - 19968: jis0208<<14 | 0x11<<7 | 0x47,
+ 30012 - 19968: jis0208<<14 | 0x40<<7 | 0x15,
+ 30013 - 19968: jis0212<<14 | 0x2C<<7 | 0x0C,
+ 30014 - 19968: jis0212<<14 | 0x2C<<7 | 0x0D,
+ 30015 - 19968: jis0212<<14 | 0x2C<<7 | 0x0E,
+ 30016 - 19968: jis0212<<14 | 0x2C<<7 | 0x0F,
+ 30019 - 19968: jis0212<<14 | 0x2C<<7 | 0x10,
+ 30020 - 19968: jis0208<<14 | 0x40<<7 | 0x16,
+ 30022 - 19968: jis0208<<14 | 0x40<<7 | 0x1B,
+ 30023 - 19968: jis0212<<14 | 0x2C<<7 | 0x11,
+ 30024 - 19968: jis0212<<14 | 0x2C<<7 | 0x12,
+ 30025 - 19968: jis0208<<14 | 0x40<<7 | 0x19,
+ 30026 - 19968: jis0208<<14 | 0x40<<7 | 0x18,
+ 30027 - 19968: jis0208<<14 | 0x39<<7 | 0x21,
+ 30028 - 19968: jis0208<<14 | 0x12<<7 | 0x05,
+ 30029 - 19968: jis0208<<14 | 0x40<<7 | 0x17,
+ 30030 - 19968: jis0212<<14 | 0x2C<<7 | 0x13,
+ 30031 - 19968: jis0208<<14 | 0x0F<<7 | 0x39,
+ 30032 - 19968: jis0212<<14 | 0x2C<<7 | 0x14,
+ 30033 - 19968: jis0208<<14 | 0x27<<7 | 0x09,
+ 30034 - 19968: jis0212<<14 | 0x2C<<7 | 0x15,
+ 30036 - 19968: jis0208<<14 | 0x27<<7 | 0x29,
+ 30039 - 19968: jis0212<<14 | 0x2C<<7 | 0x16,
+ 30041 - 19968: jis0208<<14 | 0x2D<<7 | 0x10,
+ 30042 - 19968: jis0208<<14 | 0x40<<7 | 0x1C,
+ 30043 - 19968: jis0208<<14 | 0x40<<7 | 0x1A,
+ 30044 - 19968: jis0208<<14 | 0x22<<7 | 0x3B,
+ 30045 - 19968: jis0208<<14 | 0x1F<<7 | 0x05,
+ 30046 - 19968: jis0212<<14 | 0x2C<<7 | 0x17,
+ 30047 - 19968: jis0212<<14 | 0x2C<<7 | 0x18,
+ 30048 - 19968: jis0208<<14 | 0x27<<7 | 0x0A,
+ 30049 - 19968: jis0212<<14 | 0x2C<<7 | 0x19,
+ 30050 - 19968: jis0208<<14 | 0x28<<7 | 0x0C,
+ 30052 - 19968: jis0208<<14 | 0x40<<7 | 0x1E,
+ 30053 - 19968: jis0208<<14 | 0x2D<<7 | 0x0B,
+ 30054 - 19968: jis0208<<14 | 0x16<<7 | 0x2C,
+ 30055 - 19968: jis0208<<14 | 0x40<<7 | 0x1F,
+ 30057 - 19968: jis0208<<14 | 0x40<<7 | 0x1D,
+ 30058 - 19968: jis0208<<14 | 0x27<<7 | 0x35,
+ 30059 - 19968: jis0208<<14 | 0x40<<7 | 0x20,
+ 30061 - 19968: jis0208<<14 | 0x40<<7 | 0x21,
+ 30063 - 19968: jis0208<<14 | 0x5A<<7 | 0x13,
+ 30064 - 19968: jis0208<<14 | 0x0F<<7 | 0x3A,
+ 30065 - 19968: jis0212<<14 | 0x2C<<7 | 0x1B,
+ 30067 - 19968: jis0208<<14 | 0x1D<<7 | 0x55,
+ 30068 - 19968: jis0208<<14 | 0x40<<7 | 0x26,
+ 30070 - 19968: jis0208<<14 | 0x40<<7 | 0x23,
+ 30071 - 19968: jis0208<<14 | 0x25<<7 | 0x4C,
+ 30072 - 19968: jis0208<<14 | 0x40<<7 | 0x22,
+ 30073 - 19968: jis0212<<14 | 0x2C<<7 | 0x1C,
+ 30074 - 19968: jis0212<<14 | 0x2C<<7 | 0x1D,
+ 30075 - 19968: jis0212<<14 | 0x2C<<7 | 0x1E,
+ 30076 - 19968: jis0212<<14 | 0x2C<<7 | 0x1F,
+ 30077 - 19968: jis0212<<14 | 0x2C<<7 | 0x20,
+ 30078 - 19968: jis0212<<14 | 0x2C<<7 | 0x21,
+ 30079 - 19968: jis0208<<14 | 0x14<<7 | 0x05,
+ 30081 - 19968: jis0212<<14 | 0x2C<<7 | 0x22,
+ 30082 - 19968: jis0208<<14 | 0x40<<7 | 0x29,
+ 30085 - 19968: jis0212<<14 | 0x2C<<7 | 0x23,
+ 30086 - 19968: jis0208<<14 | 0x40<<7 | 0x24,
+ 30087 - 19968: jis0208<<14 | 0x40<<7 | 0x25,
+ 30089 - 19968: jis0208<<14 | 0x40<<7 | 0x28,
+ 30090 - 19968: jis0208<<14 | 0x40<<7 | 0x27,
+ 30091 - 19968: jis0208<<14 | 0x28<<7 | 0x04,
+ 30094 - 19968: jis0208<<14 | 0x20<<7 | 0x21,
+ 30095 - 19968: jis0208<<14 | 0x20<<7 | 0x20,
+ 30096 - 19968: jis0212<<14 | 0x2C<<7 | 0x24,
+ 30097 - 19968: jis0208<<14 | 0x14<<7 | 0x1E,
+ 30098 - 19968: jis0212<<14 | 0x2C<<7 | 0x25,
+ 30099 - 19968: jis0212<<14 | 0x2C<<7 | 0x26,
+ 30100 - 19968: jis0208<<14 | 0x40<<7 | 0x2A,
+ 30101 - 19968: jis0212<<14 | 0x2C<<7 | 0x27,
+ 30105 - 19968: jis0212<<14 | 0x2C<<7 | 0x28,
+ 30106 - 19968: jis0208<<14 | 0x40<<7 | 0x2B,
+ 30108 - 19968: jis0212<<14 | 0x2C<<7 | 0x29,
+ 30109 - 19968: jis0208<<14 | 0x40<<7 | 0x2C,
+ 30114 - 19968: jis0212<<14 | 0x2C<<7 | 0x2A,
+ 30115 - 19968: jis0208<<14 | 0x40<<7 | 0x2E,
+ 30116 - 19968: jis0212<<14 | 0x2C<<7 | 0x2B,
+ 30117 - 19968: jis0208<<14 | 0x40<<7 | 0x2D,
+ 30123 - 19968: jis0208<<14 | 0x10<<7 | 0x35,
+ 30129 - 19968: jis0208<<14 | 0x40<<7 | 0x36,
+ 30130 - 19968: jis0208<<14 | 0x27<<7 | 0x47,
+ 30131 - 19968: jis0208<<14 | 0x40<<7 | 0x30,
+ 30132 - 19968: jis0212<<14 | 0x2C<<7 | 0x2C,
+ 30133 - 19968: jis0208<<14 | 0x40<<7 | 0x32,
+ 30136 - 19968: jis0208<<14 | 0x40<<7 | 0x34,
+ 30137 - 19968: jis0208<<14 | 0x1E<<7 | 0x1D,
+ 30138 - 19968: jis0212<<14 | 0x2C<<7 | 0x2D,
+ 30140 - 19968: jis0208<<14 | 0x40<<7 | 0x35,
+ 30141 - 19968: jis0208<<14 | 0x40<<7 | 0x33,
+ 30142 - 19968: jis0208<<14 | 0x1B<<7 | 0x1F,
+ 30143 - 19968: jis0212<<14 | 0x2C<<7 | 0x2E,
+ 30144 - 19968: jis0212<<14 | 0x2C<<7 | 0x2F,
+ 30145 - 19968: jis0212<<14 | 0x2C<<7 | 0x30,
+ 30146 - 19968: jis0208<<14 | 0x40<<7 | 0x2F,
+ 30147 - 19968: jis0208<<14 | 0x40<<7 | 0x31,
+ 30148 - 19968: jis0212<<14 | 0x2C<<7 | 0x31,
+ 30149 - 19968: jis0208<<14 | 0x28<<7 | 0x21,
+ 30150 - 19968: jis0212<<14 | 0x2C<<7 | 0x32,
+ 30151 - 19968: jis0208<<14 | 0x1D<<7 | 0x28,
+ 30154 - 19968: jis0208<<14 | 0x40<<7 | 0x38,
+ 30156 - 19968: jis0212<<14 | 0x2C<<7 | 0x33,
+ 30157 - 19968: jis0208<<14 | 0x40<<7 | 0x37,
+ 30158 - 19968: jis0212<<14 | 0x2C<<7 | 0x34,
+ 30159 - 19968: jis0212<<14 | 0x2C<<7 | 0x35,
+ 30162 - 19968: jis0208<<14 | 0x40<<7 | 0x39,
+ 30164 - 19968: jis0208<<14 | 0x1B<<7 | 0x05,
+ 30165 - 19968: jis0208<<14 | 0x19<<7 | 0x0E,
+ 30167 - 19968: jis0212<<14 | 0x2C<<7 | 0x36,
+ 30168 - 19968: jis0208<<14 | 0x24<<7 | 0x56,
+ 30169 - 19968: jis0208<<14 | 0x40<<7 | 0x3A,
+ 30171 - 19968: jis0208<<14 | 0x23<<7 | 0x2A,
+ 30172 - 19968: jis0212<<14 | 0x2C<<7 | 0x37,
+ 30174 - 19968: jis0208<<14 | 0x40<<7 | 0x3C,
+ 30175 - 19968: jis0212<<14 | 0x2C<<7 | 0x38,
+ 30176 - 19968: jis0212<<14 | 0x2C<<7 | 0x39,
+ 30177 - 19968: jis0212<<14 | 0x2C<<7 | 0x3A,
+ 30178 - 19968: jis0208<<14 | 0x2D<<7 | 0x00,
+ 30179 - 19968: jis0208<<14 | 0x40<<7 | 0x3B,
+ 30180 - 19968: jis0212<<14 | 0x2C<<7 | 0x3B,
+ 30183 - 19968: jis0212<<14 | 0x2C<<7 | 0x3C,
+ 30185 - 19968: jis0208<<14 | 0x20<<7 | 0x48,
+ 30188 - 19968: jis0212<<14 | 0x2C<<7 | 0x3D,
+ 30190 - 19968: jis0212<<14 | 0x2C<<7 | 0x3E,
+ 30191 - 19968: jis0212<<14 | 0x2C<<7 | 0x3F,
+ 30192 - 19968: jis0208<<14 | 0x40<<7 | 0x41,
+ 30193 - 19968: jis0212<<14 | 0x2C<<7 | 0x40,
+ 30194 - 19968: jis0208<<14 | 0x40<<7 | 0x43,
+ 30195 - 19968: jis0208<<14 | 0x40<<7 | 0x44,
+ 30196 - 19968: jis0208<<14 | 0x22<<7 | 0x33,
+ 30201 - 19968: jis0212<<14 | 0x2C<<7 | 0x41,
+ 30202 - 19968: jis0208<<14 | 0x40<<7 | 0x42,
+ 30204 - 19968: jis0208<<14 | 0x40<<7 | 0x3F,
+ 30206 - 19968: jis0208<<14 | 0x40<<7 | 0x3D,
+ 30207 - 19968: jis0208<<14 | 0x40<<7 | 0x3E,
+ 30208 - 19968: jis0212<<14 | 0x2C<<7 | 0x42,
+ 30209 - 19968: jis0208<<14 | 0x40<<7 | 0x40,
+ 30210 - 19968: jis0212<<14 | 0x2C<<7 | 0x43,
+ 30211 - 19968: jis0212<<14 | 0x2C<<7 | 0x44,
+ 30212 - 19968: jis0212<<14 | 0x2C<<7 | 0x45,
+ 30215 - 19968: jis0212<<14 | 0x2C<<7 | 0x46,
+ 30216 - 19968: jis0212<<14 | 0x2C<<7 | 0x47,
+ 30217 - 19968: jis0208<<14 | 0x40<<7 | 0x47,
+ 30218 - 19968: jis0212<<14 | 0x2C<<7 | 0x48,
+ 30219 - 19968: jis0208<<14 | 0x40<<7 | 0x45,
+ 30220 - 19968: jis0212<<14 | 0x2C<<7 | 0x49,
+ 30221 - 19968: jis0208<<14 | 0x40<<7 | 0x46,
+ 30223 - 19968: jis0212<<14 | 0x2C<<7 | 0x4A,
+ 30226 - 19968: jis0212<<14 | 0x2C<<7 | 0x4B,
+ 30227 - 19968: jis0212<<14 | 0x2C<<7 | 0x4C,
+ 30229 - 19968: jis0212<<14 | 0x2C<<7 | 0x4D,
+ 30230 - 19968: jis0212<<14 | 0x2C<<7 | 0x4E,
+ 30233 - 19968: jis0212<<14 | 0x2C<<7 | 0x4F,
+ 30235 - 19968: jis0212<<14 | 0x2C<<7 | 0x50,
+ 30236 - 19968: jis0212<<14 | 0x2C<<7 | 0x51,
+ 30237 - 19968: jis0212<<14 | 0x2C<<7 | 0x52,
+ 30238 - 19968: jis0212<<14 | 0x2C<<7 | 0x53,
+ 30239 - 19968: jis0208<<14 | 0x40<<7 | 0x48,
+ 30240 - 19968: jis0208<<14 | 0x40<<7 | 0x4A,
+ 30241 - 19968: jis0208<<14 | 0x40<<7 | 0x4B,
+ 30242 - 19968: jis0208<<14 | 0x40<<7 | 0x4C,
+ 30243 - 19968: jis0212<<14 | 0x2C<<7 | 0x54,
+ 30244 - 19968: jis0208<<14 | 0x40<<7 | 0x4D,
+ 30245 - 19968: jis0212<<14 | 0x2C<<7 | 0x55,
+ 30246 - 19968: jis0212<<14 | 0x2C<<7 | 0x56,
+ 30247 - 19968: jis0208<<14 | 0x40<<7 | 0x49,
+ 30249 - 19968: jis0212<<14 | 0x2C<<7 | 0x57,
+ 30253 - 19968: jis0212<<14 | 0x2C<<7 | 0x58,
+ 30256 - 19968: jis0208<<14 | 0x40<<7 | 0x4F,
+ 30258 - 19968: jis0212<<14 | 0x2C<<7 | 0x59,
+ 30259 - 19968: jis0212<<14 | 0x2C<<7 | 0x5A,
+ 30260 - 19968: jis0208<<14 | 0x40<<7 | 0x4E,
+ 30261 - 19968: jis0212<<14 | 0x2C<<7 | 0x5B,
+ 30264 - 19968: jis0212<<14 | 0x2C<<7 | 0x5C,
+ 30265 - 19968: jis0212<<14 | 0x2C<<7 | 0x5D,
+ 30266 - 19968: jis0212<<14 | 0x2D<<7 | 0x00,
+ 30267 - 19968: jis0208<<14 | 0x40<<7 | 0x50,
+ 30268 - 19968: jis0212<<14 | 0x2D<<7 | 0x01,
+ 30272 - 19968: jis0212<<14 | 0x2D<<7 | 0x03,
+ 30273 - 19968: jis0212<<14 | 0x2D<<7 | 0x04,
+ 30274 - 19968: jis0208<<14 | 0x2D<<7 | 0x24,
+ 30275 - 19968: jis0212<<14 | 0x2D<<7 | 0x05,
+ 30276 - 19968: jis0212<<14 | 0x2D<<7 | 0x06,
+ 30277 - 19968: jis0212<<14 | 0x2D<<7 | 0x07,
+ 30278 - 19968: jis0208<<14 | 0x40<<7 | 0x53,
+ 30279 - 19968: jis0208<<14 | 0x40<<7 | 0x51,
+ 30280 - 19968: jis0208<<14 | 0x40<<7 | 0x52,
+ 30281 - 19968: jis0212<<14 | 0x2D<<7 | 0x08,
+ 30282 - 19968: jis0212<<14 | 0x2D<<7 | 0x02,
+ 30283 - 19968: jis0212<<14 | 0x2D<<7 | 0x09,
+ 30284 - 19968: jis0208<<14 | 0x13<<7 | 0x41,
+ 30290 - 19968: jis0208<<14 | 0x2B<<7 | 0x5D,
+ 30293 - 19968: jis0212<<14 | 0x2D<<7 | 0x0A,
+ 30294 - 19968: jis0208<<14 | 0x29<<7 | 0x29,
+ 30296 - 19968: jis0208<<14 | 0x40<<7 | 0x55,
+ 30297 - 19968: jis0212<<14 | 0x2D<<7 | 0x0B,
+ 30300 - 19968: jis0208<<14 | 0x40<<7 | 0x54,
+ 30303 - 19968: jis0212<<14 | 0x2D<<7 | 0x0C,
+ 30305 - 19968: jis0208<<14 | 0x40<<7 | 0x56,
+ 30306 - 19968: jis0208<<14 | 0x40<<7 | 0x57,
+ 30308 - 19968: jis0212<<14 | 0x2D<<7 | 0x0D,
+ 30309 - 19968: jis0212<<14 | 0x2D<<7 | 0x0E,
+ 30311 - 19968: jis0208<<14 | 0x40<<7 | 0x5B,
+ 30312 - 19968: jis0208<<14 | 0x40<<7 | 0x58,
+ 30313 - 19968: jis0208<<14 | 0x40<<7 | 0x59,
+ 30314 - 19968: jis0208<<14 | 0x40<<7 | 0x5A,
+ 30316 - 19968: jis0208<<14 | 0x40<<7 | 0x5C,
+ 30317 - 19968: jis0212<<14 | 0x2D<<7 | 0x0F,
+ 30318 - 19968: jis0212<<14 | 0x2D<<7 | 0x10,
+ 30319 - 19968: jis0212<<14 | 0x2D<<7 | 0x11,
+ 30320 - 19968: jis0208<<14 | 0x40<<7 | 0x5D,
+ 30321 - 19968: jis0212<<14 | 0x2D<<7 | 0x12,
+ 30322 - 19968: jis0208<<14 | 0x41<<7 | 0x00,
+ 30324 - 19968: jis0212<<14 | 0x2D<<7 | 0x13,
+ 30326 - 19968: jis0208<<14 | 0x41<<7 | 0x01,
+ 30328 - 19968: jis0208<<14 | 0x41<<7 | 0x02,
+ 30330 - 19968: jis0208<<14 | 0x27<<7 | 0x0E,
+ 30331 - 19968: jis0208<<14 | 0x24<<7 | 0x2F,
+ 30332 - 19968: jis0208<<14 | 0x41<<7 | 0x03,
+ 30333 - 19968: jis0208<<14 | 0x26<<7 | 0x51,
+ 30334 - 19968: jis0208<<14 | 0x28<<7 | 0x13,
+ 30336 - 19968: jis0208<<14 | 0x41<<7 | 0x04,
+ 30337 - 19968: jis0212<<14 | 0x2D<<7 | 0x14,
+ 30338 - 19968: jis0208<<14 | 0x5A<<7 | 0x14,
+ 30339 - 19968: jis0208<<14 | 0x41<<7 | 0x05,
+ 30340 - 19968: jis0208<<14 | 0x24<<7 | 0x09,
+ 30341 - 19968: jis0212<<14 | 0x2D<<7 | 0x15,
+ 30342 - 19968: jis0208<<14 | 0x12<<7 | 0x06,
+ 30343 - 19968: jis0208<<14 | 0x18<<7 | 0x23,
+ 30344 - 19968: jis0208<<14 | 0x41<<7 | 0x06,
+ 30347 - 19968: jis0208<<14 | 0x41<<7 | 0x07,
+ 30348 - 19968: jis0212<<14 | 0x2D<<7 | 0x16,
+ 30349 - 19968: jis0212<<14 | 0x2D<<7 | 0x17,
+ 30350 - 19968: jis0208<<14 | 0x41<<7 | 0x08,
+ 30352 - 19968: jis0208<<14 | 0x1A<<7 | 0x08,
+ 30355 - 19968: jis0208<<14 | 0x41<<7 | 0x0A,
+ 30357 - 19968: jis0212<<14 | 0x2D<<7 | 0x18,
+ 30358 - 19968: jis0208<<14 | 0x41<<7 | 0x09,
+ 30361 - 19968: jis0208<<14 | 0x41<<7 | 0x0B,
+ 30362 - 19968: jis0208<<14 | 0x41<<7 | 0x0C,
+ 30363 - 19968: jis0208<<14 | 0x5A<<7 | 0x17,
+ 30364 - 19968: jis0208<<14 | 0x5A<<7 | 0x15,
+ 30365 - 19968: jis0212<<14 | 0x2D<<7 | 0x1B,
+ 30366 - 19968: jis0208<<14 | 0x5A<<7 | 0x16,
+ 30367 - 19968: jis0212<<14 | 0x2D<<7 | 0x1C,
+ 30368 - 19968: jis0212<<14 | 0x2D<<7 | 0x1D,
+ 30370 - 19968: jis0212<<14 | 0x2D<<7 | 0x1E,
+ 30371 - 19968: jis0212<<14 | 0x2D<<7 | 0x1F,
+ 30372 - 19968: jis0212<<14 | 0x2D<<7 | 0x20,
+ 30373 - 19968: jis0212<<14 | 0x2D<<7 | 0x21,
+ 30374 - 19968: jis0208<<14 | 0x5A<<7 | 0x18,
+ 30375 - 19968: jis0212<<14 | 0x2D<<7 | 0x23,
+ 30376 - 19968: jis0212<<14 | 0x2D<<7 | 0x24,
+ 30378 - 19968: jis0212<<14 | 0x2D<<7 | 0x25,
+ 30381 - 19968: jis0212<<14 | 0x2D<<7 | 0x26,
+ 30382 - 19968: jis0208<<14 | 0x27<<7 | 0x48,
+ 30384 - 19968: jis0208<<14 | 0x41<<7 | 0x0D,
+ 30388 - 19968: jis0208<<14 | 0x41<<7 | 0x0E,
+ 30391 - 19968: jis0208<<14 | 0x52<<7 | 0x48,
+ 30392 - 19968: jis0208<<14 | 0x41<<7 | 0x0F,
+ 30393 - 19968: jis0208<<14 | 0x41<<7 | 0x10,
+ 30394 - 19968: jis0208<<14 | 0x41<<7 | 0x11,
+ 30397 - 19968: jis0212<<14 | 0x2D<<7 | 0x27,
+ 30399 - 19968: jis0208<<14 | 0x1A<<7 | 0x0D,
+ 30401 - 19968: jis0212<<14 | 0x2D<<7 | 0x28,
+ 30402 - 19968: jis0208<<14 | 0x41<<7 | 0x12,
+ 30403 - 19968: jis0208<<14 | 0x26<<7 | 0x35,
+ 30405 - 19968: jis0212<<14 | 0x2D<<7 | 0x29,
+ 30406 - 19968: jis0208<<14 | 0x2A<<7 | 0x3E,
+ 30408 - 19968: jis0208<<14 | 0x10<<7 | 0x2D,
+ 30409 - 19968: jis0212<<14 | 0x2D<<7 | 0x2A,
+ 30410 - 19968: jis0208<<14 | 0x10<<7 | 0x36,
+ 30411 - 19968: jis0212<<14 | 0x2D<<7 | 0x2B,
+ 30412 - 19968: jis0212<<14 | 0x2D<<7 | 0x2C,
+ 30413 - 19968: jis0208<<14 | 0x41<<7 | 0x13,
+ 30414 - 19968: jis0212<<14 | 0x2D<<7 | 0x2D,
+ 30418 - 19968: jis0208<<14 | 0x41<<7 | 0x15,
+ 30420 - 19968: jis0212<<14 | 0x2D<<7 | 0x2E,
+ 30422 - 19968: jis0208<<14 | 0x41<<7 | 0x14,
+ 30423 - 19968: jis0208<<14 | 0x24<<7 | 0x4F,
+ 30425 - 19968: jis0212<<14 | 0x2D<<7 | 0x2F,
+ 30427 - 19968: jis0208<<14 | 0x1F<<7 | 0x18,
+ 30428 - 19968: jis0208<<14 | 0x3C<<7 | 0x18,
+ 30430 - 19968: jis0208<<14 | 0x41<<7 | 0x16,
+ 30431 - 19968: jis0208<<14 | 0x2B<<7 | 0x20,
+ 30432 - 19968: jis0212<<14 | 0x2D<<7 | 0x30,
+ 30433 - 19968: jis0208<<14 | 0x41<<7 | 0x17,
+ 30435 - 19968: jis0208<<14 | 0x13<<7 | 0x25,
+ 30436 - 19968: jis0208<<14 | 0x27<<7 | 0x36,
+ 30437 - 19968: jis0208<<14 | 0x41<<7 | 0x18,
+ 30438 - 19968: jis0212<<14 | 0x2D<<7 | 0x31,
+ 30439 - 19968: jis0208<<14 | 0x41<<7 | 0x19,
+ 30440 - 19968: jis0212<<14 | 0x2D<<7 | 0x32,
+ 30442 - 19968: jis0208<<14 | 0x41<<7 | 0x1A,
+ 30444 - 19968: jis0212<<14 | 0x2D<<7 | 0x33,
+ 30446 - 19968: jis0208<<14 | 0x2B<<7 | 0x3B,
+ 30448 - 19968: jis0212<<14 | 0x2D<<7 | 0x34,
+ 30449 - 19968: jis0212<<14 | 0x2D<<7 | 0x35,
+ 30450 - 19968: jis0208<<14 | 0x2B<<7 | 0x34,
+ 30452 - 19968: jis0208<<14 | 0x23<<7 | 0x1D,
+ 30454 - 19968: jis0212<<14 | 0x2D<<7 | 0x36,
+ 30456 - 19968: jis0208<<14 | 0x20<<7 | 0x49,
+ 30457 - 19968: jis0212<<14 | 0x2D<<7 | 0x37,
+ 30459 - 19968: jis0208<<14 | 0x41<<7 | 0x1C,
+ 30460 - 19968: jis0212<<14 | 0x2D<<7 | 0x38,
+ 30462 - 19968: jis0208<<14 | 0x1C<<7 | 0x41,
+ 30464 - 19968: jis0212<<14 | 0x2D<<7 | 0x39,
+ 30465 - 19968: jis0208<<14 | 0x1D<<7 | 0x29,
+ 30468 - 19968: jis0208<<14 | 0x41<<7 | 0x1F,
+ 30470 - 19968: jis0212<<14 | 0x2D<<7 | 0x3A,
+ 30471 - 19968: jis0208<<14 | 0x41<<7 | 0x1E,
+ 30472 - 19968: jis0208<<14 | 0x41<<7 | 0x1D,
+ 30473 - 19968: jis0208<<14 | 0x27<<7 | 0x5C,
+ 30474 - 19968: jis0212<<14 | 0x2D<<7 | 0x3B,
+ 30475 - 19968: jis0208<<14 | 0x13<<7 | 0x26,
+ 30476 - 19968: jis0208<<14 | 0x17<<7 | 0x08,
+ 30478 - 19968: jis0212<<14 | 0x2D<<7 | 0x3C,
+ 30482 - 19968: jis0212<<14 | 0x2D<<7 | 0x3D,
+ 30484 - 19968: jis0212<<14 | 0x2D<<7 | 0x3E,
+ 30485 - 19968: jis0212<<14 | 0x2D<<7 | 0x3F,
+ 30487 - 19968: jis0212<<14 | 0x2D<<7 | 0x40,
+ 30489 - 19968: jis0212<<14 | 0x2D<<7 | 0x41,
+ 30490 - 19968: jis0212<<14 | 0x2D<<7 | 0x42,
+ 30491 - 19968: jis0208<<14 | 0x41<<7 | 0x25,
+ 30492 - 19968: jis0212<<14 | 0x2D<<7 | 0x43,
+ 30494 - 19968: jis0208<<14 | 0x41<<7 | 0x22,
+ 30495 - 19968: jis0208<<14 | 0x1E<<7 | 0x1E,
+ 30496 - 19968: jis0208<<14 | 0x2B<<7 | 0x11,
+ 30498 - 19968: jis0212<<14 | 0x2D<<7 | 0x44,
+ 30500 - 19968: jis0208<<14 | 0x41<<7 | 0x21,
+ 30501 - 19968: jis0208<<14 | 0x41<<7 | 0x23,
+ 30502 - 19968: jis0208<<14 | 0x41<<7 | 0x24,
+ 30504 - 19968: jis0212<<14 | 0x2D<<7 | 0x45,
+ 30505 - 19968: jis0208<<14 | 0x41<<7 | 0x20,
+ 30509 - 19968: jis0212<<14 | 0x2D<<7 | 0x46,
+ 30510 - 19968: jis0212<<14 | 0x2D<<7 | 0x47,
+ 30511 - 19968: jis0212<<14 | 0x2D<<7 | 0x48,
+ 30516 - 19968: jis0212<<14 | 0x2D<<7 | 0x49,
+ 30517 - 19968: jis0212<<14 | 0x2D<<7 | 0x4A,
+ 30518 - 19968: jis0212<<14 | 0x2D<<7 | 0x4B,
+ 30519 - 19968: jis0208<<14 | 0x41<<7 | 0x26,
+ 30520 - 19968: jis0208<<14 | 0x41<<7 | 0x27,
+ 30521 - 19968: jis0212<<14 | 0x2D<<7 | 0x4C,
+ 30522 - 19968: jis0208<<14 | 0x23<<7 | 0x0E,
+ 30524 - 19968: jis0208<<14 | 0x13<<7 | 0x42,
+ 30525 - 19968: jis0212<<14 | 0x2D<<7 | 0x4D,
+ 30526 - 19968: jis0212<<14 | 0x2D<<7 | 0x4E,
+ 30528 - 19968: jis0208<<14 | 0x22<<7 | 0x44,
+ 30530 - 19968: jis0212<<14 | 0x2D<<7 | 0x4F,
+ 30533 - 19968: jis0212<<14 | 0x2D<<7 | 0x50,
+ 30534 - 19968: jis0208<<14 | 0x5A<<7 | 0x1A,
+ 30535 - 19968: jis0208<<14 | 0x41<<7 | 0x28,
+ 30538 - 19968: jis0212<<14 | 0x2D<<7 | 0x52,
+ 30541 - 19968: jis0212<<14 | 0x2D<<7 | 0x53,
+ 30542 - 19968: jis0212<<14 | 0x2D<<7 | 0x54,
+ 30543 - 19968: jis0212<<14 | 0x2D<<7 | 0x55,
+ 30546 - 19968: jis0212<<14 | 0x2D<<7 | 0x56,
+ 30550 - 19968: jis0212<<14 | 0x2D<<7 | 0x57,
+ 30551 - 19968: jis0212<<14 | 0x2D<<7 | 0x58,
+ 30554 - 19968: jis0208<<14 | 0x41<<7 | 0x29,
+ 30555 - 19968: jis0208<<14 | 0x41<<7 | 0x2C,
+ 30556 - 19968: jis0212<<14 | 0x2D<<7 | 0x59,
+ 30558 - 19968: jis0212<<14 | 0x2D<<7 | 0x5A,
+ 30559 - 19968: jis0212<<14 | 0x2D<<7 | 0x5B,
+ 30560 - 19968: jis0212<<14 | 0x2D<<7 | 0x5C,
+ 30561 - 19968: jis0208<<14 | 0x1E<<7 | 0x46,
+ 30562 - 19968: jis0212<<14 | 0x2D<<7 | 0x5D,
+ 30563 - 19968: jis0208<<14 | 0x25<<7 | 0x23,
+ 30564 - 19968: jis0212<<14 | 0x2E<<7 | 0x00,
+ 30565 - 19968: jis0208<<14 | 0x41<<7 | 0x2D,
+ 30566 - 19968: jis0208<<14 | 0x2A<<7 | 0x32,
+ 30567 - 19968: jis0212<<14 | 0x2E<<7 | 0x01,
+ 30568 - 19968: jis0208<<14 | 0x41<<7 | 0x2A,
+ 30570 - 19968: jis0212<<14 | 0x2E<<7 | 0x02,
+ 30571 - 19968: jis0208<<14 | 0x41<<7 | 0x2B,
+ 30572 - 19968: jis0212<<14 | 0x2E<<7 | 0x03,
+ 30576 - 19968: jis0212<<14 | 0x2E<<7 | 0x04,
+ 30578 - 19968: jis0212<<14 | 0x2E<<7 | 0x05,
+ 30579 - 19968: jis0212<<14 | 0x2E<<7 | 0x06,
+ 30580 - 19968: jis0212<<14 | 0x2E<<7 | 0x07,
+ 30585 - 19968: jis0208<<14 | 0x41<<7 | 0x30,
+ 30586 - 19968: jis0212<<14 | 0x2E<<7 | 0x08,
+ 30589 - 19968: jis0212<<14 | 0x2E<<7 | 0x09,
+ 30590 - 19968: jis0208<<14 | 0x41<<7 | 0x2F,
+ 30591 - 19968: jis0208<<14 | 0x41<<7 | 0x2E,
+ 30592 - 19968: jis0212<<14 | 0x2E<<7 | 0x0A,
+ 30596 - 19968: jis0212<<14 | 0x2E<<7 | 0x0B,
+ 30603 - 19968: jis0208<<14 | 0x41<<7 | 0x32,
+ 30604 - 19968: jis0212<<14 | 0x2E<<7 | 0x0C,
+ 30605 - 19968: jis0212<<14 | 0x2E<<7 | 0x0D,
+ 30606 - 19968: jis0208<<14 | 0x41<<7 | 0x31,
+ 30609 - 19968: jis0208<<14 | 0x41<<7 | 0x33,
+ 30612 - 19968: jis0212<<14 | 0x2E<<7 | 0x0E,
+ 30613 - 19968: jis0212<<14 | 0x2E<<7 | 0x0F,
+ 30614 - 19968: jis0212<<14 | 0x2E<<7 | 0x10,
+ 30618 - 19968: jis0212<<14 | 0x2E<<7 | 0x11,
+ 30622 - 19968: jis0208<<14 | 0x41<<7 | 0x35,
+ 30623 - 19968: jis0212<<14 | 0x2E<<7 | 0x12,
+ 30624 - 19968: jis0208<<14 | 0x41<<7 | 0x34,
+ 30626 - 19968: jis0212<<14 | 0x2E<<7 | 0x13,
+ 30629 - 19968: jis0208<<14 | 0x29<<7 | 0x2C,
+ 30631 - 19968: jis0212<<14 | 0x2E<<7 | 0x14,
+ 30634 - 19968: jis0212<<14 | 0x2E<<7 | 0x15,
+ 30636 - 19968: jis0208<<14 | 0x1C<<7 | 0x35,
+ 30637 - 19968: jis0208<<14 | 0x2D<<7 | 0x25,
+ 30638 - 19968: jis0212<<14 | 0x2E<<7 | 0x16,
+ 30639 - 19968: jis0212<<14 | 0x2E<<7 | 0x17,
+ 30640 - 19968: jis0208<<14 | 0x41<<7 | 0x36,
+ 30641 - 19968: jis0212<<14 | 0x2E<<7 | 0x18,
+ 30643 - 19968: jis0208<<14 | 0x25<<7 | 0x16,
+ 30645 - 19968: jis0212<<14 | 0x2E<<7 | 0x19,
+ 30646 - 19968: jis0208<<14 | 0x41<<7 | 0x37,
+ 30649 - 19968: jis0208<<14 | 0x41<<7 | 0x38,
+ 30651 - 19968: jis0208<<14 | 0x41<<7 | 0x3C,
+ 30652 - 19968: jis0208<<14 | 0x41<<7 | 0x3A,
+ 30653 - 19968: jis0208<<14 | 0x41<<7 | 0x3B,
+ 30654 - 19968: jis0212<<14 | 0x2E<<7 | 0x1A,
+ 30655 - 19968: jis0208<<14 | 0x41<<7 | 0x39,
+ 30659 - 19968: jis0212<<14 | 0x2E<<7 | 0x1B,
+ 30663 - 19968: jis0208<<14 | 0x41<<7 | 0x3D,
+ 30665 - 19968: jis0212<<14 | 0x2E<<7 | 0x1C,
+ 30669 - 19968: jis0208<<14 | 0x41<<7 | 0x3E,
+ 30673 - 19968: jis0212<<14 | 0x2E<<7 | 0x1D,
+ 30674 - 19968: jis0212<<14 | 0x2E<<7 | 0x1E,
+ 30677 - 19968: jis0212<<14 | 0x2E<<7 | 0x1F,
+ 30679 - 19968: jis0208<<14 | 0x41<<7 | 0x3F,
+ 30681 - 19968: jis0212<<14 | 0x2E<<7 | 0x20,
+ 30682 - 19968: jis0208<<14 | 0x41<<7 | 0x40,
+ 30683 - 19968: jis0208<<14 | 0x2B<<7 | 0x16,
+ 30684 - 19968: jis0208<<14 | 0x41<<7 | 0x41,
+ 30686 - 19968: jis0212<<14 | 0x2E<<7 | 0x21,
+ 30687 - 19968: jis0212<<14 | 0x2E<<7 | 0x22,
+ 30688 - 19968: jis0212<<14 | 0x2E<<7 | 0x23,
+ 30690 - 19968: jis0208<<14 | 0x2B<<7 | 0x4F,
+ 30691 - 19968: jis0208<<14 | 0x41<<7 | 0x42,
+ 30692 - 19968: jis0212<<14 | 0x2E<<7 | 0x24,
+ 30693 - 19968: jis0208<<14 | 0x22<<7 | 0x2D,
+ 30694 - 19968: jis0212<<14 | 0x2E<<7 | 0x25,
+ 30695 - 19968: jis0208<<14 | 0x26<<7 | 0x49,
+ 30697 - 19968: jis0208<<14 | 0x15<<7 | 0x4A,
+ 30698 - 19968: jis0212<<14 | 0x2E<<7 | 0x26,
+ 30700 - 19968: jis0212<<14 | 0x2E<<7 | 0x27,
+ 30701 - 19968: jis0208<<14 | 0x22<<7 | 0x1A,
+ 30702 - 19968: jis0208<<14 | 0x41<<7 | 0x43,
+ 30703 - 19968: jis0208<<14 | 0x15<<7 | 0x19,
+ 30704 - 19968: jis0212<<14 | 0x2E<<7 | 0x28,
+ 30705 - 19968: jis0212<<14 | 0x2E<<7 | 0x29,
+ 30707 - 19968: jis0208<<14 | 0x1F<<7 | 0x2F,
+ 30708 - 19968: jis0212<<14 | 0x2E<<7 | 0x2A,
+ 30712 - 19968: jis0212<<14 | 0x2E<<7 | 0x2B,
+ 30715 - 19968: jis0212<<14 | 0x2E<<7 | 0x2C,
+ 30716 - 19968: jis0208<<14 | 0x41<<7 | 0x44,
+ 30722 - 19968: jis0208<<14 | 0x19<<7 | 0x1C,
+ 30725 - 19968: jis0212<<14 | 0x2E<<7 | 0x2D,
+ 30726 - 19968: jis0212<<14 | 0x2E<<7 | 0x2E,
+ 30729 - 19968: jis0212<<14 | 0x2E<<7 | 0x2F,
+ 30732 - 19968: jis0208<<14 | 0x41<<7 | 0x45,
+ 30733 - 19968: jis0212<<14 | 0x2E<<7 | 0x30,
+ 30734 - 19968: jis0212<<14 | 0x2E<<7 | 0x31,
+ 30737 - 19968: jis0212<<14 | 0x2E<<7 | 0x32,
+ 30738 - 19968: jis0208<<14 | 0x41<<7 | 0x46,
+ 30740 - 19968: jis0208<<14 | 0x17<<7 | 0x05,
+ 30741 - 19968: jis0208<<14 | 0x19<<7 | 0x34,
+ 30749 - 19968: jis0212<<14 | 0x2E<<7 | 0x33,
+ 30752 - 19968: jis0208<<14 | 0x41<<7 | 0x48,
+ 30753 - 19968: jis0208<<14 | 0x5A<<7 | 0x1C,
+ 30754 - 19968: jis0212<<14 | 0x2E<<7 | 0x35,
+ 30755 - 19968: jis0212<<14 | 0x2E<<7 | 0x36,
+ 30757 - 19968: jis0208<<14 | 0x24<<7 | 0x35,
+ 30758 - 19968: jis0208<<14 | 0x19<<7 | 0x35,
+ 30759 - 19968: jis0208<<14 | 0x14<<7 | 0x2D,
+ 30765 - 19968: jis0212<<14 | 0x2E<<7 | 0x37,
+ 30766 - 19968: jis0212<<14 | 0x2E<<7 | 0x38,
+ 30768 - 19968: jis0212<<14 | 0x2E<<7 | 0x39,
+ 30770 - 19968: jis0208<<14 | 0x2A<<7 | 0x03,
+ 30772 - 19968: jis0208<<14 | 0x26<<7 | 0x2A,
+ 30773 - 19968: jis0212<<14 | 0x2E<<7 | 0x3A,
+ 30775 - 19968: jis0212<<14 | 0x2E<<7 | 0x3B,
+ 30778 - 19968: jis0208<<14 | 0x24<<7 | 0x36,
+ 30783 - 19968: jis0208<<14 | 0x18<<7 | 0x3B,
+ 30787 - 19968: jis0212<<14 | 0x2E<<7 | 0x3C,
+ 30788 - 19968: jis0212<<14 | 0x2E<<7 | 0x3D,
+ 30789 - 19968: jis0208<<14 | 0x41<<7 | 0x4A,
+ 30791 - 19968: jis0212<<14 | 0x2E<<7 | 0x3E,
+ 30792 - 19968: jis0212<<14 | 0x2E<<7 | 0x3F,
+ 30796 - 19968: jis0212<<14 | 0x2E<<7 | 0x40,
+ 30798 - 19968: jis0208<<14 | 0x5A<<7 | 0x1D,
+ 30802 - 19968: jis0212<<14 | 0x2E<<7 | 0x42,
+ 30812 - 19968: jis0212<<14 | 0x2E<<7 | 0x43,
+ 30813 - 19968: jis0208<<14 | 0x1D<<7 | 0x2A,
+ 30814 - 19968: jis0212<<14 | 0x2E<<7 | 0x44,
+ 30816 - 19968: jis0212<<14 | 0x2E<<7 | 0x45,
+ 30817 - 19968: jis0212<<14 | 0x2E<<7 | 0x46,
+ 30819 - 19968: jis0212<<14 | 0x2E<<7 | 0x47,
+ 30820 - 19968: jis0208<<14 | 0x5A<<7 | 0x1E,
+ 30824 - 19968: jis0212<<14 | 0x2E<<7 | 0x49,
+ 30826 - 19968: jis0212<<14 | 0x2E<<7 | 0x4A,
+ 30827 - 19968: jis0208<<14 | 0x2D<<7 | 0x11,
+ 30828 - 19968: jis0208<<14 | 0x18<<7 | 0x24,
+ 30830 - 19968: jis0212<<14 | 0x2E<<7 | 0x4B,
+ 30831 - 19968: jis0208<<14 | 0x17<<7 | 0x06,
+ 30834 - 19968: jis0208<<14 | 0x27<<7 | 0x02,
+ 30836 - 19968: jis0208<<14 | 0x41<<7 | 0x4C,
+ 30842 - 19968: jis0208<<14 | 0x5A<<7 | 0x1F,
+ 30844 - 19968: jis0208<<14 | 0x41<<7 | 0x4E,
+ 30846 - 19968: jis0212<<14 | 0x2E<<7 | 0x4D,
+ 30849 - 19968: jis0208<<14 | 0x17<<7 | 0x4A,
+ 30854 - 19968: jis0208<<14 | 0x41<<7 | 0x4D,
+ 30855 - 19968: jis0208<<14 | 0x23<<7 | 0x55,
+ 30858 - 19968: jis0212<<14 | 0x2E<<7 | 0x4E,
+ 30860 - 19968: jis0208<<14 | 0x41<<7 | 0x50,
+ 30861 - 19968: jis0208<<14 | 0x12<<7 | 0x16,
+ 30862 - 19968: jis0208<<14 | 0x41<<7 | 0x4B,
+ 30863 - 19968: jis0212<<14 | 0x2E<<7 | 0x4F,
+ 30865 - 19968: jis0208<<14 | 0x27<<7 | 0x49,
+ 30867 - 19968: jis0208<<14 | 0x10<<7 | 0x0F,
+ 30868 - 19968: jis0212<<14 | 0x2E<<7 | 0x50,
+ 30869 - 19968: jis0208<<14 | 0x19<<7 | 0x4B,
+ 30871 - 19968: jis0208<<14 | 0x2E<<7 | 0x31,
+ 30872 - 19968: jis0212<<14 | 0x2E<<7 | 0x51,
+ 30874 - 19968: jis0208<<14 | 0x41<<7 | 0x4F,
+ 30877 - 19968: jis0212<<14 | 0x2E<<7 | 0x53,
+ 30878 - 19968: jis0212<<14 | 0x2E<<7 | 0x54,
+ 30879 - 19968: jis0212<<14 | 0x2E<<7 | 0x55,
+ 30881 - 19968: jis0212<<14 | 0x2E<<7 | 0x52,
+ 30883 - 19968: jis0208<<14 | 0x41<<7 | 0x51,
+ 30884 - 19968: jis0212<<14 | 0x2E<<7 | 0x56,
+ 30887 - 19968: jis0208<<14 | 0x29<<7 | 0x2A,
+ 30888 - 19968: jis0212<<14 | 0x2E<<7 | 0x57,
+ 30889 - 19968: jis0208<<14 | 0x1F<<7 | 0x38,
+ 30890 - 19968: jis0208<<14 | 0x41<<7 | 0x53,
+ 30892 - 19968: jis0212<<14 | 0x2E<<7 | 0x58,
+ 30893 - 19968: jis0212<<14 | 0x2E<<7 | 0x59,
+ 30895 - 19968: jis0208<<14 | 0x41<<7 | 0x54,
+ 30896 - 19968: jis0212<<14 | 0x2E<<7 | 0x5A,
+ 30897 - 19968: jis0212<<14 | 0x2E<<7 | 0x5B,
+ 30898 - 19968: jis0212<<14 | 0x2E<<7 | 0x5C,
+ 30899 - 19968: jis0212<<14 | 0x2E<<7 | 0x5D,
+ 30901 - 19968: jis0208<<14 | 0x41<<7 | 0x52,
+ 30906 - 19968: jis0208<<14 | 0x12<<7 | 0x2D,
+ 30907 - 19968: jis0212<<14 | 0x2F<<7 | 0x00,
+ 30908 - 19968: jis0208<<14 | 0x41<<7 | 0x5A,
+ 30909 - 19968: jis0212<<14 | 0x2F<<7 | 0x01,
+ 30910 - 19968: jis0208<<14 | 0x41<<7 | 0x59,
+ 30911 - 19968: jis0212<<14 | 0x2F<<7 | 0x02,
+ 30913 - 19968: jis0208<<14 | 0x1B<<7 | 0x06,
+ 30917 - 19968: jis0208<<14 | 0x41<<7 | 0x5B,
+ 30918 - 19968: jis0208<<14 | 0x41<<7 | 0x56,
+ 30919 - 19968: jis0212<<14 | 0x2F<<7 | 0x03,
+ 30920 - 19968: jis0212<<14 | 0x2F<<7 | 0x04,
+ 30921 - 19968: jis0212<<14 | 0x2F<<7 | 0x05,
+ 30922 - 19968: jis0208<<14 | 0x41<<7 | 0x5C,
+ 30923 - 19968: jis0208<<14 | 0x41<<7 | 0x57,
+ 30924 - 19968: jis0212<<14 | 0x2F<<7 | 0x06,
+ 30926 - 19968: jis0212<<14 | 0x2F<<7 | 0x07,
+ 30928 - 19968: jis0208<<14 | 0x27<<7 | 0x37,
+ 30929 - 19968: jis0208<<14 | 0x41<<7 | 0x55,
+ 30930 - 19968: jis0212<<14 | 0x2F<<7 | 0x08,
+ 30931 - 19968: jis0212<<14 | 0x2F<<7 | 0x09,
+ 30932 - 19968: jis0208<<14 | 0x41<<7 | 0x58,
+ 30933 - 19968: jis0212<<14 | 0x2F<<7 | 0x0A,
+ 30934 - 19968: jis0212<<14 | 0x2F<<7 | 0x0B,
+ 30938 - 19968: jis0208<<14 | 0x42<<7 | 0x01,
+ 30939 - 19968: jis0212<<14 | 0x2F<<7 | 0x0D,
+ 30943 - 19968: jis0212<<14 | 0x2F<<7 | 0x0E,
+ 30944 - 19968: jis0212<<14 | 0x2F<<7 | 0x0F,
+ 30945 - 19968: jis0212<<14 | 0x2F<<7 | 0x10,
+ 30948 - 19968: jis0212<<14 | 0x2F<<7 | 0x0C,
+ 30950 - 19968: jis0212<<14 | 0x2F<<7 | 0x11,
+ 30951 - 19968: jis0208<<14 | 0x42<<7 | 0x00,
+ 30952 - 19968: jis0208<<14 | 0x2A<<7 | 0x40,
+ 30954 - 19968: jis0212<<14 | 0x2F<<7 | 0x12,
+ 30956 - 19968: jis0208<<14 | 0x41<<7 | 0x5D,
+ 30959 - 19968: jis0208<<14 | 0x0F<<7 | 0x4A,
+ 30962 - 19968: jis0212<<14 | 0x2F<<7 | 0x13,
+ 30963 - 19968: jis0212<<14 | 0x2F<<7 | 0x14,
+ 30964 - 19968: jis0208<<14 | 0x42<<7 | 0x03,
+ 30966 - 19968: jis0212<<14 | 0x2F<<7 | 0x16,
+ 30967 - 19968: jis0212<<14 | 0x2F<<7 | 0x17,
+ 30970 - 19968: jis0212<<14 | 0x2F<<7 | 0x18,
+ 30971 - 19968: jis0212<<14 | 0x2F<<7 | 0x19,
+ 30973 - 19968: jis0208<<14 | 0x42<<7 | 0x02,
+ 30975 - 19968: jis0212<<14 | 0x2F<<7 | 0x1A,
+ 30976 - 19968: jis0212<<14 | 0x2F<<7 | 0x15,
+ 30977 - 19968: jis0208<<14 | 0x1D<<7 | 0x2B,
+ 30982 - 19968: jis0212<<14 | 0x2F<<7 | 0x1B,
+ 30983 - 19968: jis0208<<14 | 0x42<<7 | 0x04,
+ 30988 - 19968: jis0212<<14 | 0x2F<<7 | 0x1C,
+ 30990 - 19968: jis0208<<14 | 0x20<<7 | 0x22,
+ 30992 - 19968: jis0212<<14 | 0x2F<<7 | 0x1D,
+ 30993 - 19968: jis0208<<14 | 0x42<<7 | 0x06,
+ 30994 - 19968: jis0208<<14 | 0x42<<7 | 0x05,
+ 31001 - 19968: jis0208<<14 | 0x42<<7 | 0x07,
+ 31002 - 19968: jis0212<<14 | 0x2F<<7 | 0x1E,
+ 31004 - 19968: jis0212<<14 | 0x2F<<7 | 0x1F,
+ 31006 - 19968: jis0212<<14 | 0x2F<<7 | 0x20,
+ 31007 - 19968: jis0212<<14 | 0x2F<<7 | 0x21,
+ 31008 - 19968: jis0212<<14 | 0x2F<<7 | 0x22,
+ 31013 - 19968: jis0212<<14 | 0x2F<<7 | 0x23,
+ 31014 - 19968: jis0208<<14 | 0x41<<7 | 0x47,
+ 31015 - 19968: jis0212<<14 | 0x2F<<7 | 0x24,
+ 31017 - 19968: jis0212<<14 | 0x2F<<7 | 0x25,
+ 31018 - 19968: jis0208<<14 | 0x41<<7 | 0x49,
+ 31019 - 19968: jis0208<<14 | 0x42<<7 | 0x09,
+ 31020 - 19968: jis0208<<14 | 0x42<<7 | 0x08,
+ 31021 - 19968: jis0212<<14 | 0x2F<<7 | 0x26,
+ 31024 - 19968: jis0208<<14 | 0x5A<<7 | 0x20,
+ 31025 - 19968: jis0212<<14 | 0x2F<<7 | 0x27,
+ 31028 - 19968: jis0212<<14 | 0x2F<<7 | 0x28,
+ 31029 - 19968: jis0212<<14 | 0x2F<<7 | 0x29,
+ 31034 - 19968: jis0208<<14 | 0x1B<<7 | 0x07,
+ 31035 - 19968: jis0212<<14 | 0x2F<<7 | 0x2A,
+ 31036 - 19968: jis0208<<14 | 0x2D<<7 | 0x48,
+ 31037 - 19968: jis0212<<14 | 0x2F<<7 | 0x2B,
+ 31038 - 19968: jis0208<<14 | 0x1B<<7 | 0x31,
+ 31039 - 19968: jis0212<<14 | 0x2F<<7 | 0x2C,
+ 31040 - 19968: jis0208<<14 | 0x42<<7 | 0x0A,
+ 31041 - 19968: jis0208<<14 | 0x16<<7 | 0x16,
+ 31044 - 19968: jis0212<<14 | 0x2F<<7 | 0x2D,
+ 31045 - 19968: jis0212<<14 | 0x2F<<7 | 0x2E,
+ 31046 - 19968: jis0212<<14 | 0x2F<<7 | 0x2F,
+ 31047 - 19968: jis0208<<14 | 0x14<<7 | 0x1F,
+ 31048 - 19968: jis0208<<14 | 0x14<<7 | 0x06,
+ 31049 - 19968: jis0208<<14 | 0x1A<<7 | 0x42,
+ 31050 - 19968: jis0212<<14 | 0x2F<<7 | 0x30,
+ 31051 - 19968: jis0212<<14 | 0x2F<<7 | 0x31,
+ 31055 - 19968: jis0212<<14 | 0x2F<<7 | 0x32,
+ 31056 - 19968: jis0208<<14 | 0x2C<<7 | 0x13,
+ 31057 - 19968: jis0212<<14 | 0x2F<<7 | 0x33,
+ 31059 - 19968: jis0208<<14 | 0x42<<7 | 0x10,
+ 31060 - 19968: jis0212<<14 | 0x2F<<7 | 0x34,
+ 31061 - 19968: jis0208<<14 | 0x42<<7 | 0x0F,
+ 31062 - 19968: jis0208<<14 | 0x20<<7 | 0x23,
+ 31063 - 19968: jis0208<<14 | 0x42<<7 | 0x0C,
+ 31064 - 19968: jis0212<<14 | 0x2F<<7 | 0x35,
+ 31066 - 19968: jis0208<<14 | 0x42<<7 | 0x0E,
+ 31067 - 19968: jis0212<<14 | 0x2F<<7 | 0x36,
+ 31068 - 19968: jis0212<<14 | 0x2F<<7 | 0x37,
+ 31069 - 19968: jis0208<<14 | 0x1C<<7 | 0x2A,
+ 31070 - 19968: jis0208<<14 | 0x1E<<7 | 0x1F,
+ 31071 - 19968: jis0208<<14 | 0x42<<7 | 0x0D,
+ 31072 - 19968: jis0208<<14 | 0x42<<7 | 0x0B,
+ 31074 - 19968: jis0208<<14 | 0x26<<7 | 0x09,
+ 31077 - 19968: jis0208<<14 | 0x1D<<7 | 0x2C,
+ 31079 - 19968: jis0212<<14 | 0x2F<<7 | 0x38,
+ 31080 - 19968: jis0208<<14 | 0x28<<7 | 0x1B,
+ 31081 - 19968: jis0212<<14 | 0x2F<<7 | 0x39,
+ 31083 - 19968: jis0212<<14 | 0x2F<<7 | 0x3A,
+ 31085 - 19968: jis0208<<14 | 0x19<<7 | 0x36,
+ 31090 - 19968: jis0212<<14 | 0x2F<<7 | 0x3B,
+ 31095 - 19968: jis0208<<14 | 0x24<<7 | 0x57,
+ 31097 - 19968: jis0212<<14 | 0x2F<<7 | 0x3C,
+ 31098 - 19968: jis0208<<14 | 0x42<<7 | 0x11,
+ 31099 - 19968: jis0212<<14 | 0x2F<<7 | 0x3D,
+ 31100 - 19968: jis0212<<14 | 0x2F<<7 | 0x3E,
+ 31102 - 19968: jis0212<<14 | 0x2F<<7 | 0x3F,
+ 31103 - 19968: jis0208<<14 | 0x42<<7 | 0x12,
+ 31104 - 19968: jis0208<<14 | 0x42<<7 | 0x28,
+ 31105 - 19968: jis0208<<14 | 0x15<<7 | 0x37,
+ 31108 - 19968: jis0208<<14 | 0x2E<<7 | 0x1C,
+ 31109 - 19968: jis0208<<14 | 0x20<<7 | 0x14,
+ 31114 - 19968: jis0208<<14 | 0x42<<7 | 0x13,
+ 31115 - 19968: jis0212<<14 | 0x2F<<7 | 0x40,
+ 31116 - 19968: jis0212<<14 | 0x2F<<7 | 0x41,
+ 31117 - 19968: jis0208<<14 | 0x11<<7 | 0x31,
+ 31118 - 19968: jis0208<<14 | 0x23<<7 | 0x56,
+ 31119 - 19968: jis0208<<14 | 0x29<<7 | 0x00,
+ 31121 - 19968: jis0212<<14 | 0x2F<<7 | 0x42,
+ 31123 - 19968: jis0212<<14 | 0x2F<<7 | 0x43,
+ 31124 - 19968: jis0208<<14 | 0x5A<<7 | 0x24,
+ 31125 - 19968: jis0212<<14 | 0x2F<<7 | 0x45,
+ 31126 - 19968: jis0212<<14 | 0x2F<<7 | 0x46,
+ 31128 - 19968: jis0212<<14 | 0x2F<<7 | 0x47,
+ 31131 - 19968: jis0208<<14 | 0x5A<<7 | 0x26,
+ 31132 - 19968: jis0212<<14 | 0x2F<<7 | 0x49,
+ 31133 - 19968: jis0208<<14 | 0x42<<7 | 0x14,
+ 31137 - 19968: jis0212<<14 | 0x2F<<7 | 0x4A,
+ 31142 - 19968: jis0208<<14 | 0x14<<7 | 0x59,
+ 31143 - 19968: jis0208<<14 | 0x42<<7 | 0x15,
+ 31144 - 19968: jis0212<<14 | 0x2F<<7 | 0x4B,
+ 31145 - 19968: jis0212<<14 | 0x2F<<7 | 0x4C,
+ 31146 - 19968: jis0208<<14 | 0x42<<7 | 0x17,
+ 31147 - 19968: jis0212<<14 | 0x2F<<7 | 0x4D,
+ 31150 - 19968: jis0208<<14 | 0x42<<7 | 0x18,
+ 31151 - 19968: jis0212<<14 | 0x2F<<7 | 0x4E,
+ 31152 - 19968: jis0208<<14 | 0x26<<7 | 0x08,
+ 31153 - 19968: jis0212<<14 | 0x2F<<7 | 0x4F,
+ 31155 - 19968: jis0208<<14 | 0x42<<7 | 0x19,
+ 31156 - 19968: jis0212<<14 | 0x2F<<7 | 0x50,
+ 31160 - 19968: jis0212<<14 | 0x2F<<7 | 0x51,
+ 31161 - 19968: jis0208<<14 | 0x42<<7 | 0x1A,
+ 31162 - 19968: jis0208<<14 | 0x42<<7 | 0x1B,
+ 31163 - 19968: jis0212<<14 | 0x2F<<7 | 0x52,
+ 31165 - 19968: jis0208<<14 | 0x15<<7 | 0x38,
+ 31166 - 19968: jis0208<<14 | 0x11<<7 | 0x32,
+ 31167 - 19968: jis0208<<14 | 0x25<<7 | 0x24,
+ 31168 - 19968: jis0208<<14 | 0x1C<<7 | 0x07,
+ 31169 - 19968: jis0208<<14 | 0x1A<<7 | 0x43,
+ 31170 - 19968: jis0212<<14 | 0x2F<<7 | 0x53,
+ 31172 - 19968: jis0212<<14 | 0x2F<<7 | 0x54,
+ 31175 - 19968: jis0212<<14 | 0x2F<<7 | 0x55,
+ 31176 - 19968: jis0212<<14 | 0x2F<<7 | 0x56,
+ 31177 - 19968: jis0208<<14 | 0x42<<7 | 0x1C,
+ 31178 - 19968: jis0212<<14 | 0x2F<<7 | 0x57,
+ 31179 - 19968: jis0208<<14 | 0x1C<<7 | 0x08,
+ 31183 - 19968: jis0212<<14 | 0x2F<<7 | 0x58,
+ 31185 - 19968: jis0208<<14 | 0x11<<7 | 0x29,
+ 31186 - 19968: jis0208<<14 | 0x28<<7 | 0x22,
+ 31188 - 19968: jis0212<<14 | 0x2F<<7 | 0x59,
+ 31189 - 19968: jis0208<<14 | 0x42<<7 | 0x1D,
+ 31190 - 19968: jis0212<<14 | 0x2F<<7 | 0x5A,
+ 31192 - 19968: jis0208<<14 | 0x27<<7 | 0x4A,
+ 31194 - 19968: jis0212<<14 | 0x2F<<7 | 0x5B,
+ 31197 - 19968: jis0212<<14 | 0x2F<<7 | 0x5C,
+ 31198 - 19968: jis0212<<14 | 0x2F<<7 | 0x5D,
+ 31199 - 19968: jis0208<<14 | 0x20<<7 | 0x24,
+ 31200 - 19968: jis0212<<14 | 0x30<<7 | 0x00,
+ 31201 - 19968: jis0208<<14 | 0x42<<7 | 0x20,
+ 31202 - 19968: jis0212<<14 | 0x30<<7 | 0x01,
+ 31203 - 19968: jis0208<<14 | 0x42<<7 | 0x21,
+ 31204 - 19968: jis0208<<14 | 0x26<<7 | 0x48,
+ 31205 - 19968: jis0212<<14 | 0x30<<7 | 0x02,
+ 31206 - 19968: jis0208<<14 | 0x1E<<7 | 0x20,
+ 31207 - 19968: jis0208<<14 | 0x42<<7 | 0x1E,
+ 31209 - 19968: jis0208<<14 | 0x22<<7 | 0x40,
+ 31210 - 19968: jis0212<<14 | 0x30<<7 | 0x03,
+ 31211 - 19968: jis0212<<14 | 0x30<<7 | 0x04,
+ 31212 - 19968: jis0208<<14 | 0x42<<7 | 0x1F,
+ 31213 - 19968: jis0212<<14 | 0x30<<7 | 0x05,
+ 31216 - 19968: jis0208<<14 | 0x1D<<7 | 0x2D,
+ 31217 - 19968: jis0212<<14 | 0x30<<7 | 0x06,
+ 31224 - 19968: jis0212<<14 | 0x30<<7 | 0x07,
+ 31227 - 19968: jis0208<<14 | 0x0F<<7 | 0x3B,
+ 31228 - 19968: jis0212<<14 | 0x30<<7 | 0x08,
+ 31232 - 19968: jis0208<<14 | 0x14<<7 | 0x08,
+ 31234 - 19968: jis0212<<14 | 0x30<<7 | 0x09,
+ 31235 - 19968: jis0212<<14 | 0x30<<7 | 0x0A,
+ 31239 - 19968: jis0212<<14 | 0x30<<7 | 0x0B,
+ 31240 - 19968: jis0208<<14 | 0x42<<7 | 0x22,
+ 31241 - 19968: jis0212<<14 | 0x30<<7 | 0x0C,
+ 31242 - 19968: jis0212<<14 | 0x30<<7 | 0x0D,
+ 31243 - 19968: jis0208<<14 | 0x23<<7 | 0x57,
+ 31244 - 19968: jis0212<<14 | 0x30<<7 | 0x0E,
+ 31245 - 19968: jis0208<<14 | 0x42<<7 | 0x23,
+ 31246 - 19968: jis0208<<14 | 0x1F<<7 | 0x26,
+ 31249 - 19968: jis0212<<14 | 0x30<<7 | 0x0F,
+ 31252 - 19968: jis0208<<14 | 0x2B<<7 | 0x0C,
+ 31253 - 19968: jis0212<<14 | 0x30<<7 | 0x10,
+ 31255 - 19968: jis0208<<14 | 0x28<<7 | 0x02,
+ 31256 - 19968: jis0208<<14 | 0x42<<7 | 0x24,
+ 31257 - 19968: jis0208<<14 | 0x42<<7 | 0x25,
+ 31258 - 19968: jis0208<<14 | 0x22<<7 | 0x34,
+ 31259 - 19968: jis0212<<14 | 0x30<<7 | 0x11,
+ 31260 - 19968: jis0208<<14 | 0x2D<<7 | 0x26,
+ 31262 - 19968: jis0212<<14 | 0x30<<7 | 0x12,
+ 31263 - 19968: jis0208<<14 | 0x42<<7 | 0x27,
+ 31264 - 19968: jis0208<<14 | 0x42<<7 | 0x26,
+ 31265 - 19968: jis0212<<14 | 0x30<<7 | 0x13,
+ 31271 - 19968: jis0212<<14 | 0x30<<7 | 0x14,
+ 31275 - 19968: jis0212<<14 | 0x30<<7 | 0x15,
+ 31277 - 19968: jis0212<<14 | 0x30<<7 | 0x16,
+ 31278 - 19968: jis0208<<14 | 0x1B<<7 | 0x4E,
+ 31279 - 19968: jis0212<<14 | 0x30<<7 | 0x17,
+ 31280 - 19968: jis0212<<14 | 0x30<<7 | 0x18,
+ 31281 - 19968: jis0208<<14 | 0x42<<7 | 0x29,
+ 31282 - 19968: jis0208<<14 | 0x0F<<7 | 0x4F,
+ 31284 - 19968: jis0212<<14 | 0x30<<7 | 0x19,
+ 31285 - 19968: jis0212<<14 | 0x30<<7 | 0x1A,
+ 31287 - 19968: jis0208<<14 | 0x42<<7 | 0x2C,
+ 31288 - 19968: jis0212<<14 | 0x30<<7 | 0x1B,
+ 31289 - 19968: jis0212<<14 | 0x30<<7 | 0x1C,
+ 31290 - 19968: jis0212<<14 | 0x30<<7 | 0x1D,
+ 31291 - 19968: jis0208<<14 | 0x42<<7 | 0x2A,
+ 31292 - 19968: jis0208<<14 | 0x11<<7 | 0x33,
+ 31293 - 19968: jis0208<<14 | 0x16<<7 | 0x2D,
+ 31294 - 19968: jis0208<<14 | 0x42<<7 | 0x2B,
+ 31295 - 19968: jis0208<<14 | 0x18<<7 | 0x25,
+ 31296 - 19968: jis0208<<14 | 0x18<<7 | 0x51,
+ 31298 - 19968: jis0208<<14 | 0x29<<7 | 0x45,
+ 31299 - 19968: jis0208<<14 | 0x42<<7 | 0x2D,
+ 31300 - 19968: jis0212<<14 | 0x30<<7 | 0x1E,
+ 31301 - 19968: jis0212<<14 | 0x30<<7 | 0x1F,
+ 31302 - 19968: jis0208<<14 | 0x2A<<7 | 0x33,
+ 31303 - 19968: jis0212<<14 | 0x30<<7 | 0x20,
+ 31304 - 19968: jis0212<<14 | 0x30<<7 | 0x21,
+ 31305 - 19968: jis0208<<14 | 0x42<<7 | 0x2F,
+ 31308 - 19968: jis0212<<14 | 0x30<<7 | 0x22,
+ 31309 - 19968: jis0208<<14 | 0x1F<<7 | 0x30,
+ 31310 - 19968: jis0208<<14 | 0x10<<7 | 0x2E,
+ 31311 - 19968: jis0208<<14 | 0x11<<7 | 0x19,
+ 31312 - 19968: jis0208<<14 | 0x0F<<7 | 0x0B,
+ 31317 - 19968: jis0212<<14 | 0x30<<7 | 0x23,
+ 31318 - 19968: jis0212<<14 | 0x30<<7 | 0x24,
+ 31319 - 19968: jis0208<<14 | 0x42<<7 | 0x2E,
+ 31321 - 19968: jis0212<<14 | 0x30<<7 | 0x25,
+ 31324 - 19968: jis0212<<14 | 0x30<<7 | 0x26,
+ 31325 - 19968: jis0212<<14 | 0x30<<7 | 0x27,
+ 31327 - 19968: jis0212<<14 | 0x30<<7 | 0x28,
+ 31328 - 19968: jis0212<<14 | 0x30<<7 | 0x29,
+ 31329 - 19968: jis0208<<14 | 0x42<<7 | 0x30,
+ 31330 - 19968: jis0208<<14 | 0x42<<7 | 0x31,
+ 31331 - 19968: jis0208<<14 | 0x1D<<7 | 0x56,
+ 31333 - 19968: jis0212<<14 | 0x30<<7 | 0x2A,
+ 31335 - 19968: jis0212<<14 | 0x30<<7 | 0x2B,
+ 31337 - 19968: jis0208<<14 | 0x42<<7 | 0x32,
+ 31338 - 19968: jis0212<<14 | 0x30<<7 | 0x2C,
+ 31339 - 19968: jis0208<<14 | 0x12<<7 | 0x2E,
+ 31341 - 19968: jis0212<<14 | 0x30<<7 | 0x2D,
+ 31344 - 19968: jis0208<<14 | 0x42<<7 | 0x34,
+ 31348 - 19968: jis0208<<14 | 0x16<<7 | 0x49,
+ 31349 - 19968: jis0212<<14 | 0x30<<7 | 0x2E,
+ 31350 - 19968: jis0208<<14 | 0x14<<7 | 0x45,
+ 31352 - 19968: jis0212<<14 | 0x30<<7 | 0x2F,
+ 31353 - 19968: jis0208<<14 | 0x42<<7 | 0x35,
+ 31354 - 19968: jis0208<<14 | 0x15<<7 | 0x54,
+ 31357 - 19968: jis0208<<14 | 0x42<<7 | 0x36,
+ 31358 - 19968: jis0212<<14 | 0x30<<7 | 0x30,
+ 31359 - 19968: jis0208<<14 | 0x1F<<7 | 0x5B,
+ 31360 - 19968: jis0212<<14 | 0x30<<7 | 0x31,
+ 31361 - 19968: jis0208<<14 | 0x25<<7 | 0x2C,
+ 31362 - 19968: jis0212<<14 | 0x30<<7 | 0x32,
+ 31363 - 19968: jis0208<<14 | 0x1F<<7 | 0x3F,
+ 31364 - 19968: jis0208<<14 | 0x19<<7 | 0x54,
+ 31365 - 19968: jis0212<<14 | 0x30<<7 | 0x33,
+ 31366 - 19968: jis0212<<14 | 0x30<<7 | 0x34,
+ 31368 - 19968: jis0208<<14 | 0x42<<7 | 0x37,
+ 31370 - 19968: jis0212<<14 | 0x30<<7 | 0x35,
+ 31371 - 19968: jis0212<<14 | 0x30<<7 | 0x36,
+ 31376 - 19968: jis0212<<14 | 0x30<<7 | 0x37,
+ 31377 - 19968: jis0212<<14 | 0x30<<7 | 0x38,
+ 31378 - 19968: jis0208<<14 | 0x22<<7 | 0x41,
+ 31379 - 19968: jis0208<<14 | 0x20<<7 | 0x4A,
+ 31380 - 19968: jis0212<<14 | 0x30<<7 | 0x39,
+ 31381 - 19968: jis0208<<14 | 0x42<<7 | 0x39,
+ 31382 - 19968: jis0208<<14 | 0x42<<7 | 0x3B,
+ 31383 - 19968: jis0208<<14 | 0x42<<7 | 0x38,
+ 31384 - 19968: jis0208<<14 | 0x42<<7 | 0x3A,
+ 31390 - 19968: jis0212<<14 | 0x30<<7 | 0x3A,
+ 31391 - 19968: jis0208<<14 | 0x16<<7 | 0x01,
+ 31392 - 19968: jis0212<<14 | 0x30<<7 | 0x3B,
+ 31395 - 19968: jis0212<<14 | 0x30<<7 | 0x3C,
+ 31401 - 19968: jis0208<<14 | 0x42<<7 | 0x3C,
+ 31402 - 19968: jis0208<<14 | 0x16<<7 | 0x05,
+ 31404 - 19968: jis0212<<14 | 0x30<<7 | 0x3D,
+ 31406 - 19968: jis0208<<14 | 0x14<<7 | 0x46,
+ 31407 - 19968: jis0208<<14 | 0x2C<<7 | 0x31,
+ 31408 - 19968: jis0208<<14 | 0x42<<7 | 0x3E,
+ 31411 - 19968: jis0212<<14 | 0x30<<7 | 0x3E,
+ 31413 - 19968: jis0212<<14 | 0x30<<7 | 0x3F,
+ 31414 - 19968: jis0208<<14 | 0x42<<7 | 0x3F,
+ 31417 - 19968: jis0212<<14 | 0x30<<7 | 0x40,
+ 31418 - 19968: jis0208<<14 | 0x10<<7 | 0x0D,
+ 31419 - 19968: jis0212<<14 | 0x30<<7 | 0x41,
+ 31420 - 19968: jis0212<<14 | 0x30<<7 | 0x42,
+ 31423 - 19968: jis0208<<14 | 0x42<<7 | 0x42,
+ 31427 - 19968: jis0208<<14 | 0x12<<7 | 0x55,
+ 31428 - 19968: jis0208<<14 | 0x42<<7 | 0x41,
+ 31429 - 19968: jis0208<<14 | 0x42<<7 | 0x40,
+ 31430 - 19968: jis0212<<14 | 0x30<<7 | 0x43,
+ 31431 - 19968: jis0208<<14 | 0x42<<7 | 0x44,
+ 31432 - 19968: jis0208<<14 | 0x42<<7 | 0x3D,
+ 31433 - 19968: jis0212<<14 | 0x30<<7 | 0x44,
+ 31434 - 19968: jis0208<<14 | 0x42<<7 | 0x45,
+ 31435 - 19968: jis0208<<14 | 0x2D<<7 | 0x08,
+ 31436 - 19968: jis0212<<14 | 0x30<<7 | 0x45,
+ 31437 - 19968: jis0208<<14 | 0x42<<7 | 0x46,
+ 31438 - 19968: jis0212<<14 | 0x30<<7 | 0x46,
+ 31439 - 19968: jis0208<<14 | 0x42<<7 | 0x47,
+ 31441 - 19968: jis0208<<14 | 0x5A<<7 | 0x27,
+ 31442 - 19968: jis0208<<14 | 0x33<<7 | 0x53,
+ 31443 - 19968: jis0208<<14 | 0x42<<7 | 0x49,
+ 31445 - 19968: jis0208<<14 | 0x42<<7 | 0x48,
+ 31449 - 19968: jis0208<<14 | 0x42<<7 | 0x4A,
+ 31450 - 19968: jis0208<<14 | 0x42<<7 | 0x4B,
+ 31451 - 19968: jis0212<<14 | 0x30<<7 | 0x48,
+ 31452 - 19968: jis0208<<14 | 0x2D<<7 | 0x14,
+ 31453 - 19968: jis0208<<14 | 0x42<<7 | 0x4C,
+ 31455 - 19968: jis0208<<14 | 0x4F<<7 | 0x4E,
+ 31456 - 19968: jis0208<<14 | 0x1D<<7 | 0x2E,
+ 31457 - 19968: jis0208<<14 | 0x42<<7 | 0x4D,
+ 31458 - 19968: jis0208<<14 | 0x42<<7 | 0x4E,
+ 31459 - 19968: jis0208<<14 | 0x1C<<7 | 0x36,
+ 31461 - 19968: jis0208<<14 | 0x25<<7 | 0x17,
+ 31462 - 19968: jis0208<<14 | 0x42<<7 | 0x4F,
+ 31463 - 19968: jis0208<<14 | 0x5A<<7 | 0x28,
+ 31464 - 19968: jis0212<<14 | 0x30<<7 | 0x49,
+ 31465 - 19968: jis0212<<14 | 0x30<<7 | 0x4A,
+ 31466 - 19968: jis0208<<14 | 0x22<<7 | 0x07,
+ 31467 - 19968: jis0208<<14 | 0x5A<<7 | 0x2A,
+ 31468 - 19968: jis0212<<14 | 0x30<<7 | 0x4C,
+ 31469 - 19968: jis0208<<14 | 0x42<<7 | 0x50,
+ 31471 - 19968: jis0208<<14 | 0x22<<7 | 0x1B,
+ 31472 - 19968: jis0208<<14 | 0x42<<7 | 0x51,
+ 31473 - 19968: jis0212<<14 | 0x30<<7 | 0x4D,
+ 31476 - 19968: jis0212<<14 | 0x30<<7 | 0x4E,
+ 31478 - 19968: jis0208<<14 | 0x15<<7 | 0x04,
+ 31480 - 19968: jis0208<<14 | 0x30<<7 | 0x1E,
+ 31481 - 19968: jis0208<<14 | 0x22<<7 | 0x3C,
+ 31482 - 19968: jis0208<<14 | 0x1B<<7 | 0x12,
+ 31483 - 19968: jis0212<<14 | 0x30<<7 | 0x4F,
+ 31485 - 19968: jis0212<<14 | 0x30<<7 | 0x50,
+ 31486 - 19968: jis0212<<14 | 0x30<<7 | 0x51,
+ 31487 - 19968: jis0208<<14 | 0x13<<7 | 0x27,
+ 31490 - 19968: jis0208<<14 | 0x42<<7 | 0x52,
+ 31492 - 19968: jis0208<<14 | 0x43<<7 | 0x01,
+ 31494 - 19968: jis0208<<14 | 0x42<<7 | 0x55,
+ 31495 - 19968: jis0212<<14 | 0x30<<7 | 0x52,
+ 31496 - 19968: jis0208<<14 | 0x14<<7 | 0x47,
+ 31498 - 19968: jis0208<<14 | 0x42<<7 | 0x54,
+ 31499 - 19968: jis0208<<14 | 0x43<<7 | 0x03,
+ 31503 - 19968: jis0208<<14 | 0x42<<7 | 0x53,
+ 31505 - 19968: jis0208<<14 | 0x1D<<7 | 0x2F,
+ 31508 - 19968: jis0212<<14 | 0x30<<7 | 0x53,
+ 31512 - 19968: jis0208<<14 | 0x42<<7 | 0x57,
+ 31513 - 19968: jis0208<<14 | 0x42<<7 | 0x58,
+ 31515 - 19968: jis0208<<14 | 0x24<<7 | 0x0A,
+ 31518 - 19968: jis0208<<14 | 0x42<<7 | 0x59,
+ 31519 - 19968: jis0212<<14 | 0x30<<7 | 0x54,
+ 31520 - 19968: jis0208<<14 | 0x12<<7 | 0x3D,
+ 31523 - 19968: jis0212<<14 | 0x30<<7 | 0x55,
+ 31525 - 19968: jis0208<<14 | 0x1E<<7 | 0x39,
+ 31526 - 19968: jis0208<<14 | 0x28<<7 | 0x43,
+ 31527 - 19968: jis0212<<14 | 0x30<<7 | 0x56,
+ 31528 - 19968: jis0208<<14 | 0x42<<7 | 0x5B,
+ 31529 - 19968: jis0212<<14 | 0x30<<7 | 0x57,
+ 31530 - 19968: jis0212<<14 | 0x30<<7 | 0x58,
+ 31531 - 19968: jis0212<<14 | 0x30<<7 | 0x59,
+ 31532 - 19968: jis0208<<14 | 0x21<<7 | 0x47,
+ 31533 - 19968: jis0212<<14 | 0x30<<7 | 0x5A,
+ 31534 - 19968: jis0212<<14 | 0x30<<7 | 0x5B,
+ 31535 - 19968: jis0212<<14 | 0x30<<7 | 0x5C,
+ 31536 - 19968: jis0212<<14 | 0x30<<7 | 0x5D,
+ 31537 - 19968: jis0212<<14 | 0x31<<7 | 0x00,
+ 31539 - 19968: jis0208<<14 | 0x42<<7 | 0x56,
+ 31540 - 19968: jis0212<<14 | 0x31<<7 | 0x01,
+ 31541 - 19968: jis0208<<14 | 0x42<<7 | 0x5A,
+ 31542 - 19968: jis0208<<14 | 0x42<<7 | 0x5C,
+ 31545 - 19968: jis0208<<14 | 0x19<<7 | 0x5A,
+ 31549 - 19968: jis0212<<14 | 0x31<<7 | 0x02,
+ 31551 - 19968: jis0212<<14 | 0x31<<7 | 0x03,
+ 31552 - 19968: jis0212<<14 | 0x31<<7 | 0x04,
+ 31553 - 19968: jis0212<<14 | 0x31<<7 | 0x05,
+ 31557 - 19968: jis0208<<14 | 0x43<<7 | 0x05,
+ 31558 - 19968: jis0208<<14 | 0x28<<7 | 0x0D,
+ 31559 - 19968: jis0212<<14 | 0x31<<7 | 0x06,
+ 31560 - 19968: jis0208<<14 | 0x27<<7 | 0x05,
+ 31561 - 19968: jis0208<<14 | 0x24<<7 | 0x58,
+ 31563 - 19968: jis0208<<14 | 0x15<<7 | 0x39,
+ 31564 - 19968: jis0208<<14 | 0x43<<7 | 0x04,
+ 31565 - 19968: jis0208<<14 | 0x43<<7 | 0x02,
+ 31566 - 19968: jis0212<<14 | 0x31<<7 | 0x07,
+ 31567 - 19968: jis0208<<14 | 0x27<<7 | 0x14,
+ 31568 - 19968: jis0208<<14 | 0x42<<7 | 0x5D,
+ 31569 - 19968: jis0208<<14 | 0x22<<7 | 0x3D,
+ 31570 - 19968: jis0208<<14 | 0x24<<7 | 0x5A,
+ 31572 - 19968: jis0208<<14 | 0x24<<7 | 0x59,
+ 31573 - 19968: jis0212<<14 | 0x31<<7 | 0x08,
+ 31574 - 19968: jis0208<<14 | 0x19<<7 | 0x55,
+ 31581 - 19968: jis0208<<14 | 0x43<<7 | 0x17,
+ 31584 - 19968: jis0212<<14 | 0x31<<7 | 0x09,
+ 31588 - 19968: jis0212<<14 | 0x31<<7 | 0x0A,
+ 31589 - 19968: jis0208<<14 | 0x43<<7 | 0x07,
+ 31590 - 19968: jis0212<<14 | 0x31<<7 | 0x0B,
+ 31591 - 19968: jis0208<<14 | 0x43<<7 | 0x09,
+ 31593 - 19968: jis0212<<14 | 0x31<<7 | 0x0C,
+ 31594 - 19968: jis0212<<14 | 0x31<<7 | 0x0D,
+ 31596 - 19968: jis0208<<14 | 0x43<<7 | 0x0C,
+ 31597 - 19968: jis0212<<14 | 0x31<<7 | 0x0E,
+ 31598 - 19968: jis0208<<14 | 0x43<<7 | 0x0D,
+ 31599 - 19968: jis0212<<14 | 0x31<<7 | 0x0F,
+ 31600 - 19968: jis0208<<14 | 0x43<<7 | 0x0A,
+ 31601 - 19968: jis0208<<14 | 0x43<<7 | 0x0B,
+ 31602 - 19968: jis0212<<14 | 0x31<<7 | 0x10,
+ 31603 - 19968: jis0212<<14 | 0x31<<7 | 0x11,
+ 31604 - 19968: jis0208<<14 | 0x43<<7 | 0x08,
+ 31605 - 19968: jis0208<<14 | 0x43<<7 | 0x06,
+ 31607 - 19968: jis0212<<14 | 0x31<<7 | 0x12,
+ 31610 - 19968: jis0208<<14 | 0x43<<7 | 0x00,
+ 31620 - 19968: jis0212<<14 | 0x31<<7 | 0x13,
+ 31622 - 19968: jis0208<<14 | 0x29<<7 | 0x2E,
+ 31623 - 19968: jis0208<<14 | 0x11<<7 | 0x34,
+ 31625 - 19968: jis0212<<14 | 0x31<<7 | 0x14,
+ 31627 - 19968: jis0208<<14 | 0x43<<7 | 0x14,
+ 31629 - 19968: jis0208<<14 | 0x43<<7 | 0x11,
+ 31630 - 19968: jis0212<<14 | 0x31<<7 | 0x15,
+ 31631 - 19968: jis0208<<14 | 0x43<<7 | 0x16,
+ 31632 - 19968: jis0212<<14 | 0x31<<7 | 0x16,
+ 31633 - 19968: jis0212<<14 | 0x31<<7 | 0x17,
+ 31634 - 19968: jis0208<<14 | 0x43<<7 | 0x15,
+ 31636 - 19968: jis0208<<14 | 0x26<<7 | 0x52,
+ 31637 - 19968: jis0208<<14 | 0x2B<<7 | 0x06,
+ 31638 - 19968: jis0212<<14 | 0x31<<7 | 0x18,
+ 31639 - 19968: jis0208<<14 | 0x1A<<7 | 0x1A,
+ 31640 - 19968: jis0208<<14 | 0x43<<7 | 0x0F,
+ 31641 - 19968: jis0208<<14 | 0x43<<7 | 0x18,
+ 31642 - 19968: jis0208<<14 | 0x43<<7 | 0x13,
+ 31643 - 19968: jis0212<<14 | 0x31<<7 | 0x19,
+ 31644 - 19968: jis0208<<14 | 0x43<<7 | 0x12,
+ 31645 - 19968: jis0208<<14 | 0x43<<7 | 0x0E,
+ 31646 - 19968: jis0208<<14 | 0x5A<<7 | 0x2B,
+ 31647 - 19968: jis0208<<14 | 0x43<<7 | 0x10,
+ 31648 - 19968: jis0212<<14 | 0x31<<7 | 0x1B,
+ 31649 - 19968: jis0208<<14 | 0x13<<7 | 0x28,
+ 31653 - 19968: jis0212<<14 | 0x31<<7 | 0x1C,
+ 31658 - 19968: jis0208<<14 | 0x22<<7 | 0x1C,
+ 31660 - 19968: jis0212<<14 | 0x31<<7 | 0x1D,
+ 31661 - 19968: jis0208<<14 | 0x1F<<7 | 0x5C,
+ 31663 - 19968: jis0212<<14 | 0x31<<7 | 0x1E,
+ 31664 - 19968: jis0212<<14 | 0x31<<7 | 0x1F,
+ 31665 - 19968: jis0208<<14 | 0x27<<7 | 0x01,
+ 31666 - 19968: jis0212<<14 | 0x31<<7 | 0x20,
+ 31668 - 19968: jis0208<<14 | 0x43<<7 | 0x1D,
+ 31669 - 19968: jis0212<<14 | 0x31<<7 | 0x21,
+ 31670 - 19968: jis0212<<14 | 0x31<<7 | 0x22,
+ 31672 - 19968: jis0208<<14 | 0x27<<7 | 0x03,
+ 31674 - 19968: jis0212<<14 | 0x31<<7 | 0x23,
+ 31675 - 19968: jis0212<<14 | 0x31<<7 | 0x24,
+ 31676 - 19968: jis0212<<14 | 0x31<<7 | 0x25,
+ 31677 - 19968: jis0212<<14 | 0x31<<7 | 0x26,
+ 31680 - 19968: jis0208<<14 | 0x1F<<7 | 0x40,
+ 31681 - 19968: jis0208<<14 | 0x43<<7 | 0x1A,
+ 31682 - 19968: jis0212<<14 | 0x31<<7 | 0x27,
+ 31684 - 19968: jis0208<<14 | 0x27<<7 | 0x2E,
+ 31685 - 19968: jis0212<<14 | 0x31<<7 | 0x28,
+ 31686 - 19968: jis0208<<14 | 0x43<<7 | 0x1E,
+ 31687 - 19968: jis0208<<14 | 0x29<<7 | 0x32,
+ 31688 - 19968: jis0212<<14 | 0x31<<7 | 0x29,
+ 31689 - 19968: jis0208<<14 | 0x22<<7 | 0x3A,
+ 31690 - 19968: jis0212<<14 | 0x31<<7 | 0x2A,
+ 31691 - 19968: jis0208<<14 | 0x43<<7 | 0x19,
+ 31692 - 19968: jis0208<<14 | 0x43<<7 | 0x1B,
+ 31695 - 19968: jis0208<<14 | 0x43<<7 | 0x1C,
+ 31700 - 19968: jis0212<<14 | 0x31<<7 | 0x2B,
+ 31702 - 19968: jis0212<<14 | 0x31<<7 | 0x2C,
+ 31703 - 19968: jis0212<<14 | 0x31<<7 | 0x2D,
+ 31705 - 19968: jis0212<<14 | 0x31<<7 | 0x2E,
+ 31706 - 19968: jis0212<<14 | 0x31<<7 | 0x2F,
+ 31707 - 19968: jis0212<<14 | 0x31<<7 | 0x30,
+ 31709 - 19968: jis0208<<14 | 0x43<<7 | 0x1F,
+ 31712 - 19968: jis0208<<14 | 0x1B<<7 | 0x23,
+ 31716 - 19968: jis0208<<14 | 0x25<<7 | 0x25,
+ 31717 - 19968: jis0208<<14 | 0x43<<7 | 0x24,
+ 31718 - 19968: jis0208<<14 | 0x43<<7 | 0x23,
+ 31720 - 19968: jis0212<<14 | 0x31<<7 | 0x31,
+ 31721 - 19968: jis0208<<14 | 0x43<<7 | 0x20,
+ 31722 - 19968: jis0212<<14 | 0x31<<7 | 0x32,
+ 31725 - 19968: jis0208<<14 | 0x2E<<7 | 0x15,
+ 31730 - 19968: jis0212<<14 | 0x31<<7 | 0x33,
+ 31731 - 19968: jis0208<<14 | 0x43<<7 | 0x29,
+ 31732 - 19968: jis0212<<14 | 0x31<<7 | 0x34,
+ 31733 - 19968: jis0212<<14 | 0x31<<7 | 0x35,
+ 31734 - 19968: jis0208<<14 | 0x43<<7 | 0x2D,
+ 31735 - 19968: jis0208<<14 | 0x43<<7 | 0x2A,
+ 31736 - 19968: jis0212<<14 | 0x31<<7 | 0x36,
+ 31737 - 19968: jis0212<<14 | 0x31<<7 | 0x37,
+ 31738 - 19968: jis0212<<14 | 0x31<<7 | 0x38,
+ 31740 - 19968: jis0212<<14 | 0x31<<7 | 0x39,
+ 31742 - 19968: jis0212<<14 | 0x31<<7 | 0x3A,
+ 31744 - 19968: jis0208<<14 | 0x43<<7 | 0x26,
+ 31745 - 19968: jis0212<<14 | 0x31<<7 | 0x3B,
+ 31746 - 19968: jis0212<<14 | 0x31<<7 | 0x3C,
+ 31747 - 19968: jis0212<<14 | 0x31<<7 | 0x3D,
+ 31748 - 19968: jis0212<<14 | 0x31<<7 | 0x3E,
+ 31750 - 19968: jis0212<<14 | 0x31<<7 | 0x3F,
+ 31751 - 19968: jis0208<<14 | 0x43<<7 | 0x27,
+ 31753 - 19968: jis0212<<14 | 0x31<<7 | 0x40,
+ 31755 - 19968: jis0212<<14 | 0x31<<7 | 0x41,
+ 31756 - 19968: jis0212<<14 | 0x31<<7 | 0x42,
+ 31757 - 19968: jis0208<<14 | 0x43<<7 | 0x2C,
+ 31758 - 19968: jis0212<<14 | 0x31<<7 | 0x43,
+ 31759 - 19968: jis0212<<14 | 0x31<<7 | 0x44,
+ 31761 - 19968: jis0208<<14 | 0x43<<7 | 0x21,
+ 31762 - 19968: jis0208<<14 | 0x31<<7 | 0x34,
+ 31763 - 19968: jis0208<<14 | 0x43<<7 | 0x28,
+ 31764 - 19968: jis0208<<14 | 0x43<<7 | 0x22,
+ 31767 - 19968: jis0208<<14 | 0x43<<7 | 0x2B,
+ 31769 - 19968: jis0212<<14 | 0x31<<7 | 0x45,
+ 31771 - 19968: jis0212<<14 | 0x31<<7 | 0x46,
+ 31775 - 19968: jis0208<<14 | 0x43<<7 | 0x31,
+ 31776 - 19968: jis0212<<14 | 0x31<<7 | 0x47,
+ 31777 - 19968: jis0208<<14 | 0x13<<7 | 0x29,
+ 31779 - 19968: jis0208<<14 | 0x43<<7 | 0x2E,
+ 31781 - 19968: jis0212<<14 | 0x31<<7 | 0x48,
+ 31782 - 19968: jis0212<<14 | 0x31<<7 | 0x49,
+ 31783 - 19968: jis0208<<14 | 0x43<<7 | 0x2F,
+ 31784 - 19968: jis0212<<14 | 0x31<<7 | 0x4A,
+ 31786 - 19968: jis0208<<14 | 0x43<<7 | 0x30,
+ 31787 - 19968: jis0208<<14 | 0x43<<7 | 0x33,
+ 31788 - 19968: jis0212<<14 | 0x31<<7 | 0x4B,
+ 31793 - 19968: jis0212<<14 | 0x31<<7 | 0x4C,
+ 31795 - 19968: jis0212<<14 | 0x31<<7 | 0x4D,
+ 31796 - 19968: jis0212<<14 | 0x31<<7 | 0x4E,
+ 31798 - 19968: jis0212<<14 | 0x31<<7 | 0x4F,
+ 31799 - 19968: jis0208<<14 | 0x43<<7 | 0x32,
+ 31800 - 19968: jis0208<<14 | 0x27<<7 | 0x55,
+ 31801 - 19968: jis0212<<14 | 0x31<<7 | 0x50,
+ 31802 - 19968: jis0212<<14 | 0x31<<7 | 0x51,
+ 31805 - 19968: jis0208<<14 | 0x43<<7 | 0x34,
+ 31806 - 19968: jis0208<<14 | 0x2D<<7 | 0x5B,
+ 31807 - 19968: jis0208<<14 | 0x29<<7 | 0x4C,
+ 31808 - 19968: jis0208<<14 | 0x43<<7 | 0x39,
+ 31811 - 19968: jis0208<<14 | 0x43<<7 | 0x36,
+ 31814 - 19968: jis0212<<14 | 0x31<<7 | 0x52,
+ 31818 - 19968: jis0212<<14 | 0x31<<7 | 0x53,
+ 31820 - 19968: jis0208<<14 | 0x43<<7 | 0x35,
+ 31821 - 19968: jis0208<<14 | 0x1F<<7 | 0x31,
+ 31823 - 19968: jis0208<<14 | 0x43<<7 | 0x38,
+ 31824 - 19968: jis0208<<14 | 0x43<<7 | 0x3A,
+ 31825 - 19968: jis0212<<14 | 0x31<<7 | 0x55,
+ 31826 - 19968: jis0212<<14 | 0x31<<7 | 0x56,
+ 31827 - 19968: jis0212<<14 | 0x31<<7 | 0x57,
+ 31828 - 19968: jis0208<<14 | 0x43<<7 | 0x37,
+ 31829 - 19968: jis0212<<14 | 0x31<<7 | 0x54,
+ 31830 - 19968: jis0208<<14 | 0x43<<7 | 0x3E,
+ 31832 - 19968: jis0208<<14 | 0x43<<7 | 0x3B,
+ 31833 - 19968: jis0212<<14 | 0x31<<7 | 0x58,
+ 31834 - 19968: jis0212<<14 | 0x31<<7 | 0x59,
+ 31835 - 19968: jis0212<<14 | 0x31<<7 | 0x5A,
+ 31836 - 19968: jis0212<<14 | 0x31<<7 | 0x5B,
+ 31837 - 19968: jis0212<<14 | 0x31<<7 | 0x5C,
+ 31838 - 19968: jis0212<<14 | 0x31<<7 | 0x5D,
+ 31839 - 19968: jis0208<<14 | 0x43<<7 | 0x3C,
+ 31840 - 19968: jis0208<<14 | 0x43<<7 | 0x25,
+ 31841 - 19968: jis0212<<14 | 0x32<<7 | 0x00,
+ 31843 - 19968: jis0212<<14 | 0x32<<7 | 0x01,
+ 31844 - 19968: jis0208<<14 | 0x43<<7 | 0x3D,
+ 31845 - 19968: jis0208<<14 | 0x43<<7 | 0x3F,
+ 31847 - 19968: jis0212<<14 | 0x32<<7 | 0x02,
+ 31849 - 19968: jis0212<<14 | 0x32<<7 | 0x03,
+ 31852 - 19968: jis0208<<14 | 0x43<<7 | 0x40,
+ 31853 - 19968: jis0212<<14 | 0x32<<7 | 0x04,
+ 31854 - 19968: jis0212<<14 | 0x32<<7 | 0x05,
+ 31856 - 19968: jis0212<<14 | 0x32<<7 | 0x06,
+ 31858 - 19968: jis0212<<14 | 0x32<<7 | 0x07,
+ 31859 - 19968: jis0208<<14 | 0x29<<7 | 0x25,
+ 31861 - 19968: jis0208<<14 | 0x43<<7 | 0x41,
+ 31865 - 19968: jis0212<<14 | 0x32<<7 | 0x08,
+ 31868 - 19968: jis0212<<14 | 0x32<<7 | 0x09,
+ 31869 - 19968: jis0212<<14 | 0x32<<7 | 0x0A,
+ 31870 - 19968: jis0208<<14 | 0x2B<<7 | 0x41,
+ 31873 - 19968: jis0208<<14 | 0x15<<7 | 0x2D,
+ 31874 - 19968: jis0208<<14 | 0x16<<7 | 0x08,
+ 31875 - 19968: jis0208<<14 | 0x43<<7 | 0x42,
+ 31878 - 19968: jis0212<<14 | 0x32<<7 | 0x0B,
+ 31879 - 19968: jis0212<<14 | 0x32<<7 | 0x0C,
+ 31881 - 19968: jis0208<<14 | 0x29<<7 | 0x13,
+ 31883 - 19968: jis0208<<14 | 0x1E<<7 | 0x47,
+ 31885 - 19968: jis0208<<14 | 0x2B<<7 | 0x0F,
+ 31887 - 19968: jis0212<<14 | 0x32<<7 | 0x0D,
+ 31888 - 19968: jis0208<<14 | 0x43<<7 | 0x43,
+ 31890 - 19968: jis0208<<14 | 0x2D<<7 | 0x12,
+ 31892 - 19968: jis0212<<14 | 0x32<<7 | 0x0E,
+ 31893 - 19968: jis0208<<14 | 0x26<<7 | 0x53,
+ 31895 - 19968: jis0208<<14 | 0x20<<7 | 0x25,
+ 31896 - 19968: jis0208<<14 | 0x26<<7 | 0x13,
+ 31899 - 19968: jis0208<<14 | 0x1C<<7 | 0x2C,
+ 31902 - 19968: jis0212<<14 | 0x32<<7 | 0x0F,
+ 31903 - 19968: jis0208<<14 | 0x0F<<7 | 0x1F,
+ 31904 - 19968: jis0212<<14 | 0x32<<7 | 0x10,
+ 31905 - 19968: jis0208<<14 | 0x43<<7 | 0x48,
+ 31906 - 19968: jis0208<<14 | 0x43<<7 | 0x46,
+ 31908 - 19968: jis0208<<14 | 0x43<<7 | 0x44,
+ 31909 - 19968: jis0208<<14 | 0x13<<7 | 0x00,
+ 31910 - 19968: jis0212<<14 | 0x32<<7 | 0x11,
+ 31911 - 19968: jis0208<<14 | 0x1D<<7 | 0x30,
+ 31912 - 19968: jis0208<<14 | 0x43<<7 | 0x49,
+ 31915 - 19968: jis0208<<14 | 0x43<<7 | 0x47,
+ 31917 - 19968: jis0208<<14 | 0x43<<7 | 0x45,
+ 31918 - 19968: jis0208<<14 | 0x43<<7 | 0x4D,
+ 31920 - 19968: jis0212<<14 | 0x32<<7 | 0x12,
+ 31921 - 19968: jis0208<<14 | 0x43<<7 | 0x4C,
+ 31922 - 19968: jis0208<<14 | 0x43<<7 | 0x4B,
+ 31923 - 19968: jis0208<<14 | 0x43<<7 | 0x4A,
+ 31926 - 19968: jis0212<<14 | 0x32<<7 | 0x13,
+ 31927 - 19968: jis0212<<14 | 0x32<<7 | 0x14,
+ 31929 - 19968: jis0208<<14 | 0x43<<7 | 0x4E,
+ 31930 - 19968: jis0212<<14 | 0x32<<7 | 0x15,
+ 31931 - 19968: jis0212<<14 | 0x32<<7 | 0x16,
+ 31932 - 19968: jis0212<<14 | 0x32<<7 | 0x17,
+ 31933 - 19968: jis0208<<14 | 0x43<<7 | 0x4F,
+ 31934 - 19968: jis0208<<14 | 0x1F<<7 | 0x19,
+ 31935 - 19968: jis0212<<14 | 0x32<<7 | 0x18,
+ 31936 - 19968: jis0208<<14 | 0x43<<7 | 0x50,
+ 31938 - 19968: jis0208<<14 | 0x43<<7 | 0x52,
+ 31940 - 19968: jis0212<<14 | 0x32<<7 | 0x19,
+ 31941 - 19968: jis0208<<14 | 0x43<<7 | 0x51,
+ 31943 - 19968: jis0212<<14 | 0x32<<7 | 0x1A,
+ 31944 - 19968: jis0212<<14 | 0x32<<7 | 0x1B,
+ 31945 - 19968: jis0212<<14 | 0x32<<7 | 0x1C,
+ 31946 - 19968: jis0208<<14 | 0x17<<7 | 0x31,
+ 31949 - 19968: jis0212<<14 | 0x32<<7 | 0x1D,
+ 31950 - 19968: jis0208<<14 | 0x20<<7 | 0x17,
+ 31951 - 19968: jis0212<<14 | 0x32<<7 | 0x1E,
+ 31954 - 19968: jis0208<<14 | 0x43<<7 | 0x54,
+ 31955 - 19968: jis0212<<14 | 0x32<<7 | 0x1F,
+ 31956 - 19968: jis0212<<14 | 0x32<<7 | 0x20,
+ 31957 - 19968: jis0212<<14 | 0x32<<7 | 0x21,
+ 31958 - 19968: jis0208<<14 | 0x24<<7 | 0x5B,
+ 31959 - 19968: jis0212<<14 | 0x32<<7 | 0x22,
+ 31960 - 19968: jis0208<<14 | 0x43<<7 | 0x53,
+ 31961 - 19968: jis0212<<14 | 0x32<<7 | 0x23,
+ 31962 - 19968: jis0212<<14 | 0x32<<7 | 0x24,
+ 31964 - 19968: jis0208<<14 | 0x43<<7 | 0x55,
+ 31965 - 19968: jis0212<<14 | 0x32<<7 | 0x25,
+ 31966 - 19968: jis0208<<14 | 0x29<<7 | 0x14,
+ 31967 - 19968: jis0208<<14 | 0x20<<7 | 0x4B,
+ 31968 - 19968: jis0208<<14 | 0x18<<7 | 0x26,
+ 31970 - 19968: jis0208<<14 | 0x43<<7 | 0x56,
+ 31974 - 19968: jis0212<<14 | 0x32<<7 | 0x26,
+ 31975 - 19968: jis0208<<14 | 0x2D<<7 | 0x27,
+ 31977 - 19968: jis0212<<14 | 0x32<<7 | 0x27,
+ 31979 - 19968: jis0212<<14 | 0x32<<7 | 0x28,
+ 31983 - 19968: jis0208<<14 | 0x43<<7 | 0x58,
+ 31986 - 19968: jis0208<<14 | 0x43<<7 | 0x59,
+ 31988 - 19968: jis0208<<14 | 0x43<<7 | 0x5A,
+ 31989 - 19968: jis0212<<14 | 0x32<<7 | 0x29,
+ 31990 - 19968: jis0208<<14 | 0x43<<7 | 0x5B,
+ 31992 - 19968: jis0208<<14 | 0x1A<<7 | 0x44,
+ 31994 - 19968: jis0208<<14 | 0x43<<7 | 0x5C,
+ 31995 - 19968: jis0208<<14 | 0x16<<7 | 0x2E,
+ 31998 - 19968: jis0208<<14 | 0x14<<7 | 0x49,
+ 32000 - 19968: jis0208<<14 | 0x14<<7 | 0x09,
+ 32002 - 19968: jis0208<<14 | 0x44<<7 | 0x00,
+ 32003 - 19968: jis0212<<14 | 0x32<<7 | 0x2A,
+ 32004 - 19968: jis0208<<14 | 0x2B<<7 | 0x52,
+ 32005 - 19968: jis0208<<14 | 0x18<<7 | 0x27,
+ 32006 - 19968: jis0208<<14 | 0x43<<7 | 0x5D,
+ 32007 - 19968: jis0212<<14 | 0x32<<7 | 0x2B,
+ 32008 - 19968: jis0212<<14 | 0x32<<7 | 0x2C,
+ 32009 - 19968: jis0212<<14 | 0x32<<7 | 0x2D,
+ 32010 - 19968: jis0208<<14 | 0x44<<7 | 0x03,
+ 32011 - 19968: jis0208<<14 | 0x2B<<7 | 0x45,
+ 32013 - 19968: jis0208<<14 | 0x26<<7 | 0x1B,
+ 32015 - 19968: jis0212<<14 | 0x32<<7 | 0x2E,
+ 32016 - 19968: jis0208<<14 | 0x28<<7 | 0x12,
+ 32017 - 19968: jis0212<<14 | 0x32<<7 | 0x2F,
+ 32018 - 19968: jis0212<<14 | 0x32<<7 | 0x30,
+ 32019 - 19968: jis0212<<14 | 0x32<<7 | 0x31,
+ 32020 - 19968: jis0208<<14 | 0x1C<<7 | 0x42,
+ 32021 - 19968: jis0208<<14 | 0x44<<7 | 0x02,
+ 32022 - 19968: jis0212<<14 | 0x32<<7 | 0x32,
+ 32023 - 19968: jis0208<<14 | 0x1B<<7 | 0x32,
+ 32024 - 19968: jis0208<<14 | 0x18<<7 | 0x28,
+ 32025 - 19968: jis0208<<14 | 0x1A<<7 | 0x45,
+ 32026 - 19968: jis0208<<14 | 0x14<<7 | 0x48,
+ 32027 - 19968: jis0208<<14 | 0x29<<7 | 0x15,
+ 32028 - 19968: jis0208<<14 | 0x44<<7 | 0x01,
+ 32029 - 19968: jis0212<<14 | 0x32<<7 | 0x33,
+ 32030 - 19968: jis0212<<14 | 0x32<<7 | 0x34,
+ 32032 - 19968: jis0208<<14 | 0x20<<7 | 0x26,
+ 32033 - 19968: jis0208<<14 | 0x2A<<7 | 0x21,
+ 32034 - 19968: jis0208<<14 | 0x19<<7 | 0x56,
+ 32035 - 19968: jis0212<<14 | 0x32<<7 | 0x35,
+ 32038 - 19968: jis0212<<14 | 0x32<<7 | 0x36,
+ 32042 - 19968: jis0212<<14 | 0x32<<7 | 0x37,
+ 32043 - 19968: jis0208<<14 | 0x1A<<7 | 0x46,
+ 32044 - 19968: jis0208<<14 | 0x23<<7 | 0x3C,
+ 32045 - 19968: jis0212<<14 | 0x32<<7 | 0x38,
+ 32046 - 19968: jis0208<<14 | 0x44<<7 | 0x06,
+ 32047 - 19968: jis0208<<14 | 0x2D<<7 | 0x3E,
+ 32048 - 19968: jis0208<<14 | 0x19<<7 | 0x38,
+ 32049 - 19968: jis0212<<14 | 0x32<<7 | 0x39,
+ 32050 - 19968: jis0208<<14 | 0x44<<7 | 0x07,
+ 32051 - 19968: jis0208<<14 | 0x1E<<7 | 0x21,
+ 32053 - 19968: jis0208<<14 | 0x44<<7 | 0x09,
+ 32057 - 19968: jis0208<<14 | 0x1D<<7 | 0x31,
+ 32058 - 19968: jis0208<<14 | 0x19<<7 | 0x0F,
+ 32060 - 19968: jis0212<<14 | 0x32<<7 | 0x3A,
+ 32061 - 19968: jis0212<<14 | 0x32<<7 | 0x3B,
+ 32062 - 19968: jis0212<<14 | 0x32<<7 | 0x3C,
+ 32063 - 19968: jis0208<<14 | 0x44<<7 | 0x08,
+ 32064 - 19968: jis0212<<14 | 0x32<<7 | 0x3D,
+ 32065 - 19968: jis0212<<14 | 0x32<<7 | 0x3E,
+ 32066 - 19968: jis0208<<14 | 0x1C<<7 | 0x09,
+ 32067 - 19968: jis0208<<14 | 0x17<<7 | 0x1D,
+ 32068 - 19968: jis0208<<14 | 0x20<<7 | 0x27,
+ 32069 - 19968: jis0208<<14 | 0x44<<7 | 0x04,
+ 32070 - 19968: jis0208<<14 | 0x44<<7 | 0x0A,
+ 32071 - 19968: jis0212<<14 | 0x32<<7 | 0x3F,
+ 32072 - 19968: jis0208<<14 | 0x5A<<7 | 0x2D,
+ 32075 - 19968: jis0208<<14 | 0x44<<7 | 0x05,
+ 32076 - 19968: jis0208<<14 | 0x16<<7 | 0x2F,
+ 32077 - 19968: jis0212<<14 | 0x32<<7 | 0x41,
+ 32078 - 19968: jis0208<<14 | 0x44<<7 | 0x0D,
+ 32079 - 19968: jis0208<<14 | 0x44<<7 | 0x11,
+ 32080 - 19968: jis0208<<14 | 0x16<<7 | 0x4A,
+ 32081 - 19968: jis0212<<14 | 0x32<<7 | 0x42,
+ 32083 - 19968: jis0212<<14 | 0x32<<7 | 0x43,
+ 32086 - 19968: jis0208<<14 | 0x44<<7 | 0x0C,
+ 32087 - 19968: jis0212<<14 | 0x32<<7 | 0x44,
+ 32089 - 19968: jis0212<<14 | 0x32<<7 | 0x45,
+ 32090 - 19968: jis0212<<14 | 0x32<<7 | 0x46,
+ 32091 - 19968: jis0208<<14 | 0x44<<7 | 0x15,
+ 32092 - 19968: jis0208<<14 | 0x5A<<7 | 0x2E,
+ 32093 - 19968: jis0212<<14 | 0x32<<7 | 0x48,
+ 32094 - 19968: jis0208<<14 | 0x18<<7 | 0x29,
+ 32097 - 19968: jis0208<<14 | 0x2C<<7 | 0x4C,
+ 32098 - 19968: jis0208<<14 | 0x0F<<7 | 0x1B,
+ 32099 - 19968: jis0208<<14 | 0x44<<7 | 0x12,
+ 32101 - 19968: jis0212<<14 | 0x32<<7 | 0x49,
+ 32102 - 19968: jis0208<<14 | 0x14<<7 | 0x4A,
+ 32103 - 19968: jis0212<<14 | 0x32<<7 | 0x4A,
+ 32104 - 19968: jis0208<<14 | 0x44<<7 | 0x0F,
+ 32106 - 19968: jis0212<<14 | 0x32<<7 | 0x4B,
+ 32110 - 19968: jis0208<<14 | 0x44<<7 | 0x10,
+ 32112 - 19968: jis0212<<14 | 0x32<<7 | 0x4C,
+ 32113 - 19968: jis0208<<14 | 0x24<<7 | 0x5C,
+ 32114 - 19968: jis0208<<14 | 0x44<<7 | 0x0E,
+ 32115 - 19968: jis0208<<14 | 0x44<<7 | 0x0B,
+ 32117 - 19968: jis0208<<14 | 0x12<<7 | 0x07,
+ 32118 - 19968: jis0208<<14 | 0x1F<<7 | 0x43,
+ 32120 - 19968: jis0212<<14 | 0x32<<7 | 0x4D,
+ 32121 - 19968: jis0208<<14 | 0x17<<7 | 0x07,
+ 32122 - 19968: jis0212<<14 | 0x32<<7 | 0x4E,
+ 32123 - 19968: jis0212<<14 | 0x32<<7 | 0x4F,
+ 32125 - 19968: jis0208<<14 | 0x44<<7 | 0x17,
+ 32127 - 19968: jis0212<<14 | 0x32<<7 | 0x50,
+ 32129 - 19968: jis0212<<14 | 0x32<<7 | 0x51,
+ 32130 - 19968: jis0212<<14 | 0x32<<7 | 0x52,
+ 32131 - 19968: jis0212<<14 | 0x32<<7 | 0x53,
+ 32133 - 19968: jis0212<<14 | 0x32<<7 | 0x54,
+ 32134 - 19968: jis0212<<14 | 0x32<<7 | 0x55,
+ 32136 - 19968: jis0212<<14 | 0x32<<7 | 0x56,
+ 32137 - 19968: jis0208<<14 | 0x44<<7 | 0x14,
+ 32139 - 19968: jis0212<<14 | 0x32<<7 | 0x57,
+ 32140 - 19968: jis0212<<14 | 0x32<<7 | 0x58,
+ 32141 - 19968: jis0212<<14 | 0x32<<7 | 0x59,
+ 32143 - 19968: jis0208<<14 | 0x44<<7 | 0x16,
+ 32145 - 19968: jis0212<<14 | 0x32<<7 | 0x5A,
+ 32147 - 19968: jis0208<<14 | 0x44<<7 | 0x13,
+ 32150 - 19968: jis0212<<14 | 0x32<<7 | 0x5B,
+ 32151 - 19968: jis0212<<14 | 0x32<<7 | 0x5C,
+ 32153 - 19968: jis0208<<14 | 0x16<<7 | 0x30,
+ 32154 - 19968: jis0208<<14 | 0x21<<7 | 0x12,
+ 32155 - 19968: jis0208<<14 | 0x44<<7 | 0x18,
+ 32156 - 19968: jis0208<<14 | 0x20<<7 | 0x4D,
+ 32157 - 19968: jis0212<<14 | 0x32<<7 | 0x5D,
+ 32158 - 19968: jis0212<<14 | 0x33<<7 | 0x00,
+ 32159 - 19968: jis0208<<14 | 0x44<<7 | 0x25,
+ 32160 - 19968: jis0208<<14 | 0x5A<<7 | 0x30,
+ 32162 - 19968: jis0208<<14 | 0x44<<7 | 0x21,
+ 32163 - 19968: jis0208<<14 | 0x44<<7 | 0x1B,
+ 32166 - 19968: jis0212<<14 | 0x33<<7 | 0x01,
+ 32167 - 19968: jis0212<<14 | 0x33<<7 | 0x02,
+ 32170 - 19968: jis0212<<14 | 0x33<<7 | 0x03,
+ 32171 - 19968: jis0208<<14 | 0x44<<7 | 0x1F,
+ 32172 - 19968: jis0208<<14 | 0x1B<<7 | 0x59,
+ 32173 - 19968: jis0208<<14 | 0x0F<<7 | 0x3C,
+ 32174 - 19968: jis0208<<14 | 0x44<<7 | 0x1A,
+ 32175 - 19968: jis0208<<14 | 0x44<<7 | 0x22,
+ 32176 - 19968: jis0208<<14 | 0x44<<7 | 0x26,
+ 32177 - 19968: jis0208<<14 | 0x18<<7 | 0x2A,
+ 32178 - 19968: jis0208<<14 | 0x2B<<7 | 0x35,
+ 32179 - 19968: jis0212<<14 | 0x33<<7 | 0x04,
+ 32180 - 19968: jis0208<<14 | 0x23<<7 | 0x35,
+ 32181 - 19968: jis0208<<14 | 0x44<<7 | 0x1C,
+ 32182 - 19968: jis0212<<14 | 0x33<<7 | 0x05,
+ 32183 - 19968: jis0208<<14 | 0x5A<<7 | 0x2F,
+ 32184 - 19968: jis0208<<14 | 0x44<<7 | 0x24,
+ 32185 - 19968: jis0212<<14 | 0x33<<7 | 0x07,
+ 32186 - 19968: jis0208<<14 | 0x44<<7 | 0x19,
+ 32187 - 19968: jis0208<<14 | 0x22<<7 | 0x1D,
+ 32189 - 19968: jis0208<<14 | 0x44<<7 | 0x1E,
+ 32190 - 19968: jis0208<<14 | 0x0F<<7 | 0x1C,
+ 32191 - 19968: jis0208<<14 | 0x2B<<7 | 0x29,
+ 32194 - 19968: jis0212<<14 | 0x33<<7 | 0x08,
+ 32195 - 19968: jis0212<<14 | 0x33<<7 | 0x09,
+ 32196 - 19968: jis0212<<14 | 0x33<<7 | 0x0A,
+ 32197 - 19968: jis0212<<14 | 0x33<<7 | 0x0B,
+ 32198 - 19968: jis0212<<14 | 0x33<<7 | 0x0C,
+ 32199 - 19968: jis0208<<14 | 0x44<<7 | 0x1D,
+ 32202 - 19968: jis0208<<14 | 0x15<<7 | 0x3A,
+ 32203 - 19968: jis0208<<14 | 0x27<<7 | 0x4B,
+ 32204 - 19968: jis0212<<14 | 0x33<<7 | 0x0D,
+ 32205 - 19968: jis0212<<14 | 0x33<<7 | 0x0E,
+ 32206 - 19968: jis0212<<14 | 0x33<<7 | 0x0F,
+ 32207 - 19968: jis0208<<14 | 0x20<<7 | 0x4C,
+ 32209 - 19968: jis0208<<14 | 0x2D<<7 | 0x2F,
+ 32210 - 19968: jis0208<<14 | 0x1C<<7 | 0x4E,
+ 32213 - 19968: jis0208<<14 | 0x44<<7 | 0x4D,
+ 32214 - 19968: jis0208<<14 | 0x5A<<7 | 0x31,
+ 32215 - 19968: jis0212<<14 | 0x33<<7 | 0x10,
+ 32216 - 19968: jis0208<<14 | 0x44<<7 | 0x27,
+ 32217 - 19968: jis0212<<14 | 0x33<<7 | 0x11,
+ 32218 - 19968: jis0208<<14 | 0x1F<<7 | 0x5D,
+ 32220 - 19968: jis0208<<14 | 0x44<<7 | 0x23,
+ 32221 - 19968: jis0208<<14 | 0x44<<7 | 0x28,
+ 32222 - 19968: jis0208<<14 | 0x44<<7 | 0x2A,
+ 32224 - 19968: jis0208<<14 | 0x23<<7 | 0x58,
+ 32225 - 19968: jis0208<<14 | 0x44<<7 | 0x2D,
+ 32226 - 19968: jis0212<<14 | 0x33<<7 | 0x13,
+ 32228 - 19968: jis0208<<14 | 0x44<<7 | 0x29,
+ 32229 - 19968: jis0212<<14 | 0x33<<7 | 0x14,
+ 32230 - 19968: jis0212<<14 | 0x33<<7 | 0x15,
+ 32232 - 19968: jis0208<<14 | 0x29<<7 | 0x33,
+ 32233 - 19968: jis0208<<14 | 0x13<<7 | 0x2A,
+ 32234 - 19968: jis0212<<14 | 0x33<<7 | 0x16,
+ 32235 - 19968: jis0212<<14 | 0x33<<7 | 0x17,
+ 32236 - 19968: jis0208<<14 | 0x2B<<7 | 0x2A,
+ 32237 - 19968: jis0212<<14 | 0x33<<7 | 0x18,
+ 32239 - 19968: jis0208<<14 | 0x0F<<7 | 0x3D,
+ 32241 - 19968: jis0212<<14 | 0x33<<7 | 0x19,
+ 32242 - 19968: jis0208<<14 | 0x44<<7 | 0x2C,
+ 32244 - 19968: jis0208<<14 | 0x2D<<7 | 0x5C,
+ 32245 - 19968: jis0212<<14 | 0x33<<7 | 0x1A,
+ 32246 - 19968: jis0212<<14 | 0x33<<7 | 0x1B,
+ 32249 - 19968: jis0212<<14 | 0x33<<7 | 0x1C,
+ 32250 - 19968: jis0212<<14 | 0x33<<7 | 0x1D,
+ 32251 - 19968: jis0208<<14 | 0x44<<7 | 0x2B,
+ 32256 - 19968: jis0212<<14 | 0x33<<7 | 0x12,
+ 32257 - 19968: jis0208<<14 | 0x10<<7 | 0x4E,
+ 32260 - 19968: jis0208<<14 | 0x25<<7 | 0x4B,
+ 32261 - 19968: jis0208<<14 | 0x44<<7 | 0x2E,
+ 32264 - 19968: jis0212<<14 | 0x33<<7 | 0x1E,
+ 32265 - 19968: jis0208<<14 | 0x44<<7 | 0x35,
+ 32266 - 19968: jis0208<<14 | 0x44<<7 | 0x2F,
+ 32267 - 19968: jis0208<<14 | 0x44<<7 | 0x36,
+ 32272 - 19968: jis0212<<14 | 0x33<<7 | 0x1F,
+ 32273 - 19968: jis0212<<14 | 0x33<<7 | 0x20,
+ 32274 - 19968: jis0208<<14 | 0x44<<7 | 0x32,
+ 32277 - 19968: jis0212<<14 | 0x33<<7 | 0x21,
+ 32279 - 19968: jis0212<<14 | 0x33<<7 | 0x22,
+ 32283 - 19968: jis0208<<14 | 0x26<<7 | 0x5A,
+ 32284 - 19968: jis0212<<14 | 0x33<<7 | 0x23,
+ 32285 - 19968: jis0212<<14 | 0x33<<7 | 0x24,
+ 32286 - 19968: jis0208<<14 | 0x1B<<7 | 0x29,
+ 32287 - 19968: jis0208<<14 | 0x44<<7 | 0x34,
+ 32288 - 19968: jis0212<<14 | 0x33<<7 | 0x25,
+ 32289 - 19968: jis0208<<14 | 0x44<<7 | 0x31,
+ 32290 - 19968: jis0208<<14 | 0x44<<7 | 0x37,
+ 32291 - 19968: jis0208<<14 | 0x44<<7 | 0x30,
+ 32294 - 19968: jis0208<<14 | 0x1C<<7 | 0x23,
+ 32295 - 19968: jis0212<<14 | 0x33<<7 | 0x26,
+ 32296 - 19968: jis0212<<14 | 0x33<<7 | 0x27,
+ 32299 - 19968: jis0208<<14 | 0x2A<<7 | 0x04,
+ 32300 - 19968: jis0212<<14 | 0x33<<7 | 0x28,
+ 32301 - 19968: jis0212<<14 | 0x33<<7 | 0x29,
+ 32302 - 19968: jis0208<<14 | 0x1C<<7 | 0x2B,
+ 32303 - 19968: jis0212<<14 | 0x33<<7 | 0x2A,
+ 32305 - 19968: jis0208<<14 | 0x44<<7 | 0x33,
+ 32306 - 19968: jis0208<<14 | 0x44<<7 | 0x3F,
+ 32307 - 19968: jis0212<<14 | 0x33<<7 | 0x2B,
+ 32309 - 19968: jis0208<<14 | 0x44<<7 | 0x3B,
+ 32310 - 19968: jis0212<<14 | 0x33<<7 | 0x2C,
+ 32311 - 19968: jis0208<<14 | 0x44<<7 | 0x3E,
+ 32313 - 19968: jis0208<<14 | 0x44<<7 | 0x3C,
+ 32314 - 19968: jis0208<<14 | 0x44<<7 | 0x40,
+ 32315 - 19968: jis0208<<14 | 0x44<<7 | 0x3A,
+ 32317 - 19968: jis0208<<14 | 0x44<<7 | 0x20,
+ 32318 - 19968: jis0208<<14 | 0x1F<<7 | 0x32,
+ 32319 - 19968: jis0212<<14 | 0x33<<7 | 0x2D,
+ 32321 - 19968: jis0208<<14 | 0x27<<7 | 0x2A,
+ 32323 - 19968: jis0208<<14 | 0x44<<7 | 0x3D,
+ 32324 - 19968: jis0212<<14 | 0x33<<7 | 0x2E,
+ 32325 - 19968: jis0212<<14 | 0x33<<7 | 0x2F,
+ 32326 - 19968: jis0208<<14 | 0x44<<7 | 0x38,
+ 32327 - 19968: jis0212<<14 | 0x33<<7 | 0x30,
+ 32330 - 19968: jis0208<<14 | 0x20<<7 | 0x00,
+ 32331 - 19968: jis0208<<14 | 0x16<<7 | 0x31,
+ 32333 - 19968: jis0208<<14 | 0x1C<<7 | 0x0A,
+ 32334 - 19968: jis0212<<14 | 0x33<<7 | 0x31,
+ 32336 - 19968: jis0212<<14 | 0x33<<7 | 0x32,
+ 32338 - 19968: jis0208<<14 | 0x5A<<7 | 0x32,
+ 32340 - 19968: jis0208<<14 | 0x1E<<7 | 0x04,
+ 32341 - 19968: jis0208<<14 | 0x20<<7 | 0x15,
+ 32342 - 19968: jis0208<<14 | 0x44<<7 | 0x43,
+ 32344 - 19968: jis0212<<14 | 0x33<<7 | 0x34,
+ 32345 - 19968: jis0208<<14 | 0x44<<7 | 0x45,
+ 32346 - 19968: jis0208<<14 | 0x44<<7 | 0x46,
+ 32349 - 19968: jis0208<<14 | 0x44<<7 | 0x42,
+ 32350 - 19968: jis0208<<14 | 0x44<<7 | 0x44,
+ 32351 - 19968: jis0212<<14 | 0x33<<7 | 0x35,
+ 32353 - 19968: jis0212<<14 | 0x33<<7 | 0x36,
+ 32354 - 19968: jis0212<<14 | 0x33<<7 | 0x37,
+ 32357 - 19968: jis0212<<14 | 0x33<<7 | 0x38,
+ 32358 - 19968: jis0208<<14 | 0x44<<7 | 0x39,
+ 32359 - 19968: jis0208<<14 | 0x44<<7 | 0x41,
+ 32361 - 19968: jis0208<<14 | 0x44<<7 | 0x49,
+ 32362 - 19968: jis0208<<14 | 0x44<<7 | 0x48,
+ 32363 - 19968: jis0212<<14 | 0x33<<7 | 0x39,
+ 32365 - 19968: jis0208<<14 | 0x2A<<7 | 0x59,
+ 32366 - 19968: jis0212<<14 | 0x33<<7 | 0x3A,
+ 32367 - 19968: jis0212<<14 | 0x33<<7 | 0x3B,
+ 32368 - 19968: jis0208<<14 | 0x16<<7 | 0x0A,
+ 32371 - 19968: jis0212<<14 | 0x33<<7 | 0x3C,
+ 32376 - 19968: jis0212<<14 | 0x33<<7 | 0x3D,
+ 32377 - 19968: jis0208<<14 | 0x44<<7 | 0x47,
+ 32379 - 19968: jis0208<<14 | 0x44<<7 | 0x4B,
+ 32380 - 19968: jis0208<<14 | 0x44<<7 | 0x4A,
+ 32381 - 19968: jis0208<<14 | 0x44<<7 | 0x4E,
+ 32382 - 19968: jis0212<<14 | 0x33<<7 | 0x3E,
+ 32383 - 19968: jis0208<<14 | 0x44<<7 | 0x50,
+ 32385 - 19968: jis0212<<14 | 0x33<<7 | 0x3F,
+ 32386 - 19968: jis0208<<14 | 0x1A<<7 | 0x1B,
+ 32387 - 19968: jis0208<<14 | 0x44<<7 | 0x4C,
+ 32390 - 19968: jis0212<<14 | 0x33<<7 | 0x40,
+ 32391 - 19968: jis0212<<14 | 0x33<<7 | 0x41,
+ 32392 - 19968: jis0208<<14 | 0x44<<7 | 0x51,
+ 32393 - 19968: jis0208<<14 | 0x44<<7 | 0x52,
+ 32394 - 19968: jis0208<<14 | 0x58<<7 | 0x00,
+ 32396 - 19968: jis0208<<14 | 0x44<<7 | 0x53,
+ 32397 - 19968: jis0212<<14 | 0x33<<7 | 0x43,
+ 32398 - 19968: jis0208<<14 | 0x44<<7 | 0x59,
+ 32399 - 19968: jis0208<<14 | 0x24<<7 | 0x1A,
+ 32400 - 19968: jis0208<<14 | 0x44<<7 | 0x55,
+ 32401 - 19968: jis0212<<14 | 0x33<<7 | 0x44,
+ 32402 - 19968: jis0208<<14 | 0x44<<7 | 0x54,
+ 32403 - 19968: jis0208<<14 | 0x44<<7 | 0x56,
+ 32404 - 19968: jis0208<<14 | 0x44<<7 | 0x57,
+ 32405 - 19968: jis0212<<14 | 0x33<<7 | 0x45,
+ 32406 - 19968: jis0208<<14 | 0x44<<7 | 0x58,
+ 32408 - 19968: jis0212<<14 | 0x33<<7 | 0x46,
+ 32410 - 19968: jis0212<<14 | 0x33<<7 | 0x47,
+ 32411 - 19968: jis0208<<14 | 0x44<<7 | 0x5A,
+ 32412 - 19968: jis0208<<14 | 0x44<<7 | 0x5B,
+ 32413 - 19968: jis0212<<14 | 0x33<<7 | 0x48,
+ 32414 - 19968: jis0212<<14 | 0x33<<7 | 0x49,
+ 32566 - 19968: jis0208<<14 | 0x13<<7 | 0x2B,
+ 32568 - 19968: jis0208<<14 | 0x44<<7 | 0x5C,
+ 32570 - 19968: jis0208<<14 | 0x44<<7 | 0x5D,
+ 32571 - 19968: jis0212<<14 | 0x33<<7 | 0x4B,
+ 32572 - 19968: jis0212<<14 | 0x33<<7 | 0x4A,
+ 32573 - 19968: jis0212<<14 | 0x33<<7 | 0x4C,
+ 32574 - 19968: jis0212<<14 | 0x33<<7 | 0x4D,
+ 32575 - 19968: jis0212<<14 | 0x33<<7 | 0x4E,
+ 32579 - 19968: jis0212<<14 | 0x33<<7 | 0x4F,
+ 32580 - 19968: jis0212<<14 | 0x33<<7 | 0x50,
+ 32581 - 19968: jis0208<<14 | 0x45<<7 | 0x00,
+ 32583 - 19968: jis0208<<14 | 0x5A<<7 | 0x33,
+ 32588 - 19968: jis0208<<14 | 0x45<<7 | 0x01,
+ 32589 - 19968: jis0208<<14 | 0x45<<7 | 0x02,
+ 32590 - 19968: jis0208<<14 | 0x45<<7 | 0x03,
+ 32591 - 19968: jis0212<<14 | 0x33<<7 | 0x52,
+ 32592 - 19968: jis0208<<14 | 0x45<<7 | 0x04,
+ 32593 - 19968: jis0208<<14 | 0x45<<7 | 0x05,
+ 32594 - 19968: jis0212<<14 | 0x33<<7 | 0x53,
+ 32595 - 19968: jis0212<<14 | 0x33<<7 | 0x54,
+ 32596 - 19968: jis0208<<14 | 0x45<<7 | 0x07,
+ 32597 - 19968: jis0208<<14 | 0x45<<7 | 0x06,
+ 32600 - 19968: jis0208<<14 | 0x45<<7 | 0x08,
+ 32603 - 19968: jis0212<<14 | 0x33<<7 | 0x55,
+ 32604 - 19968: jis0212<<14 | 0x33<<7 | 0x56,
+ 32605 - 19968: jis0212<<14 | 0x33<<7 | 0x57,
+ 32607 - 19968: jis0208<<14 | 0x45<<7 | 0x09,
+ 32608 - 19968: jis0208<<14 | 0x45<<7 | 0x0A,
+ 32609 - 19968: jis0212<<14 | 0x33<<7 | 0x58,
+ 32611 - 19968: jis0212<<14 | 0x33<<7 | 0x59,
+ 32612 - 19968: jis0212<<14 | 0x33<<7 | 0x5A,
+ 32613 - 19968: jis0212<<14 | 0x33<<7 | 0x5B,
+ 32614 - 19968: jis0212<<14 | 0x33<<7 | 0x5C,
+ 32615 - 19968: jis0208<<14 | 0x45<<7 | 0x0D,
+ 32616 - 19968: jis0208<<14 | 0x45<<7 | 0x0B,
+ 32617 - 19968: jis0208<<14 | 0x45<<7 | 0x0C,
+ 32618 - 19968: jis0208<<14 | 0x19<<7 | 0x40,
+ 32619 - 19968: jis0208<<14 | 0x16<<7 | 0x32,
+ 32621 - 19968: jis0212<<14 | 0x33<<7 | 0x5D,
+ 32622 - 19968: jis0208<<14 | 0x22<<7 | 0x35,
+ 32624 - 19968: jis0208<<14 | 0x27<<7 | 0x12,
+ 32625 - 19968: jis0212<<14 | 0x34<<7 | 0x00,
+ 32626 - 19968: jis0208<<14 | 0x1C<<7 | 0x4F,
+ 32629 - 19968: jis0208<<14 | 0x26<<7 | 0x2C,
+ 32631 - 19968: jis0208<<14 | 0x27<<7 | 0x4C,
+ 32632 - 19968: jis0208<<14 | 0x45<<7 | 0x0E,
+ 32633 - 19968: jis0208<<14 | 0x37<<7 | 0x4C,
+ 32637 - 19968: jis0212<<14 | 0x34<<7 | 0x01,
+ 32638 - 19968: jis0212<<14 | 0x34<<7 | 0x02,
+ 32639 - 19968: jis0212<<14 | 0x34<<7 | 0x03,
+ 32640 - 19968: jis0212<<14 | 0x34<<7 | 0x04,
+ 32642 - 19968: jis0208<<14 | 0x45<<7 | 0x0F,
+ 32643 - 19968: jis0208<<14 | 0x45<<7 | 0x11,
+ 32645 - 19968: jis0208<<14 | 0x2C<<7 | 0x44,
+ 32646 - 19968: jis0208<<14 | 0x45<<7 | 0x10,
+ 32647 - 19968: jis0208<<14 | 0x45<<7 | 0x13,
+ 32648 - 19968: jis0208<<14 | 0x45<<7 | 0x12,
+ 32650 - 19968: jis0208<<14 | 0x2C<<7 | 0x32,
+ 32651 - 19968: jis0212<<14 | 0x34<<7 | 0x05,
+ 32652 - 19968: jis0208<<14 | 0x45<<7 | 0x14,
+ 32653 - 19968: jis0212<<14 | 0x34<<7 | 0x06,
+ 32654 - 19968: jis0208<<14 | 0x27<<7 | 0x5D,
+ 32655 - 19968: jis0212<<14 | 0x34<<7 | 0x07,
+ 32656 - 19968: jis0212<<14 | 0x34<<7 | 0x08,
+ 32657 - 19968: jis0212<<14 | 0x34<<7 | 0x09,
+ 32660 - 19968: jis0208<<14 | 0x45<<7 | 0x15,
+ 32662 - 19968: jis0212<<14 | 0x34<<7 | 0x0A,
+ 32663 - 19968: jis0212<<14 | 0x34<<7 | 0x0B,
+ 32666 - 19968: jis0208<<14 | 0x45<<7 | 0x18,
+ 32668 - 19968: jis0212<<14 | 0x34<<7 | 0x0C,
+ 32669 - 19968: jis0208<<14 | 0x45<<7 | 0x17,
+ 32670 - 19968: jis0208<<14 | 0x45<<7 | 0x16,
+ 32673 - 19968: jis0208<<14 | 0x5A<<7 | 0x34,
+ 32674 - 19968: jis0212<<14 | 0x34<<7 | 0x0E,
+ 32675 - 19968: jis0208<<14 | 0x45<<7 | 0x19,
+ 32676 - 19968: jis0208<<14 | 0x16<<7 | 0x11,
+ 32678 - 19968: jis0212<<14 | 0x34<<7 | 0x0F,
+ 32680 - 19968: jis0208<<14 | 0x20<<7 | 0x01,
+ 32681 - 19968: jis0208<<14 | 0x14<<7 | 0x20,
+ 32682 - 19968: jis0212<<14 | 0x34<<7 | 0x10,
+ 32685 - 19968: jis0212<<14 | 0x34<<7 | 0x11,
+ 32686 - 19968: jis0208<<14 | 0x45<<7 | 0x1D,
+ 32687 - 19968: jis0208<<14 | 0x45<<7 | 0x1A,
+ 32690 - 19968: jis0208<<14 | 0x45<<7 | 0x1B,
+ 32692 - 19968: jis0212<<14 | 0x34<<7 | 0x12,
+ 32694 - 19968: jis0208<<14 | 0x45<<7 | 0x1E,
+ 32696 - 19968: jis0208<<14 | 0x45<<7 | 0x1F,
+ 32697 - 19968: jis0208<<14 | 0x45<<7 | 0x1C,
+ 32700 - 19968: jis0212<<14 | 0x34<<7 | 0x13,
+ 32701 - 19968: jis0208<<14 | 0x10<<7 | 0x08,
+ 32703 - 19968: jis0212<<14 | 0x34<<7 | 0x14,
+ 32704 - 19968: jis0212<<14 | 0x34<<7 | 0x15,
+ 32705 - 19968: jis0208<<14 | 0x11<<7 | 0x06,
+ 32707 - 19968: jis0212<<14 | 0x34<<7 | 0x16,
+ 32709 - 19968: jis0208<<14 | 0x45<<7 | 0x21,
+ 32710 - 19968: jis0208<<14 | 0x45<<7 | 0x22,
+ 32712 - 19968: jis0212<<14 | 0x34<<7 | 0x17,
+ 32714 - 19968: jis0208<<14 | 0x45<<7 | 0x23,
+ 32716 - 19968: jis0208<<14 | 0x2C<<7 | 0x41,
+ 32718 - 19968: jis0212<<14 | 0x34<<7 | 0x18,
+ 32719 - 19968: jis0212<<14 | 0x34<<7 | 0x19,
+ 32722 - 19968: jis0208<<14 | 0x1C<<7 | 0x0B,
+ 32724 - 19968: jis0208<<14 | 0x45<<7 | 0x25,
+ 32725 - 19968: jis0208<<14 | 0x45<<7 | 0x24,
+ 32731 - 19968: jis0212<<14 | 0x34<<7 | 0x1A,
+ 32735 - 19968: jis0212<<14 | 0x34<<7 | 0x1B,
+ 32736 - 19968: jis0208<<14 | 0x1E<<7 | 0x48,
+ 32737 - 19968: jis0208<<14 | 0x45<<7 | 0x26,
+ 32739 - 19968: jis0212<<14 | 0x34<<7 | 0x1C,
+ 32741 - 19968: jis0212<<14 | 0x34<<7 | 0x1D,
+ 32742 - 19968: jis0208<<14 | 0x45<<7 | 0x27,
+ 32744 - 19968: jis0212<<14 | 0x34<<7 | 0x1E,
+ 32745 - 19968: jis0208<<14 | 0x45<<7 | 0x28,
+ 32747 - 19968: jis0208<<14 | 0x13<<7 | 0x44,
+ 32748 - 19968: jis0212<<14 | 0x34<<7 | 0x1F,
+ 32750 - 19968: jis0212<<14 | 0x34<<7 | 0x20,
+ 32751 - 19968: jis0212<<14 | 0x34<<7 | 0x21,
+ 32752 - 19968: jis0208<<14 | 0x13<<7 | 0x2C,
+ 32754 - 19968: jis0212<<14 | 0x34<<7 | 0x22,
+ 32755 - 19968: jis0208<<14 | 0x45<<7 | 0x29,
+ 32761 - 19968: jis0208<<14 | 0x45<<7 | 0x2A,
+ 32762 - 19968: jis0212<<14 | 0x34<<7 | 0x23,
+ 32763 - 19968: jis0208<<14 | 0x2A<<7 | 0x3C,
+ 32764 - 19968: jis0208<<14 | 0x2C<<7 | 0x42,
+ 32765 - 19968: jis0212<<14 | 0x34<<7 | 0x24,
+ 32766 - 19968: jis0212<<14 | 0x34<<7 | 0x25,
+ 32767 - 19968: jis0212<<14 | 0x34<<7 | 0x26,
+ 32768 - 19968: jis0208<<14 | 0x2C<<7 | 0x33,
+ 32769 - 19968: jis0208<<14 | 0x2E<<7 | 0x16,
+ 32771 - 19968: jis0208<<14 | 0x18<<7 | 0x2C,
+ 32772 - 19968: jis0208<<14 | 0x45<<7 | 0x2D,
+ 32773 - 19968: jis0208<<14 | 0x1B<<7 | 0x33,
+ 32774 - 19968: jis0208<<14 | 0x45<<7 | 0x2C,
+ 32775 - 19968: jis0212<<14 | 0x34<<7 | 0x27,
+ 32776 - 19968: jis0212<<14 | 0x34<<7 | 0x28,
+ 32778 - 19968: jis0212<<14 | 0x34<<7 | 0x29,
+ 32779 - 19968: jis0208<<14 | 0x45<<7 | 0x2E,
+ 32780 - 19968: jis0208<<14 | 0x1B<<7 | 0x08,
+ 32781 - 19968: jis0212<<14 | 0x34<<7 | 0x2A,
+ 32782 - 19968: jis0212<<14 | 0x34<<7 | 0x2B,
+ 32783 - 19968: jis0212<<14 | 0x34<<7 | 0x2C,
+ 32784 - 19968: jis0208<<14 | 0x21<<7 | 0x30,
+ 32785 - 19968: jis0212<<14 | 0x34<<7 | 0x2D,
+ 32786 - 19968: jis0208<<14 | 0x45<<7 | 0x2F,
+ 32787 - 19968: jis0212<<14 | 0x34<<7 | 0x2E,
+ 32788 - 19968: jis0212<<14 | 0x34<<7 | 0x2F,
+ 32789 - 19968: jis0208<<14 | 0x18<<7 | 0x2B,
+ 32790 - 19968: jis0212<<14 | 0x34<<7 | 0x30,
+ 32791 - 19968: jis0208<<14 | 0x2B<<7 | 0x36,
+ 32792 - 19968: jis0208<<14 | 0x45<<7 | 0x30,
+ 32793 - 19968: jis0208<<14 | 0x45<<7 | 0x31,
+ 32796 - 19968: jis0208<<14 | 0x45<<7 | 0x32,
+ 32797 - 19968: jis0212<<14 | 0x34<<7 | 0x31,
+ 32798 - 19968: jis0212<<14 | 0x34<<7 | 0x32,
+ 32799 - 19968: jis0212<<14 | 0x34<<7 | 0x33,
+ 32800 - 19968: jis0212<<14 | 0x34<<7 | 0x34,
+ 32801 - 19968: jis0208<<14 | 0x45<<7 | 0x33,
+ 32804 - 19968: jis0212<<14 | 0x34<<7 | 0x35,
+ 32806 - 19968: jis0212<<14 | 0x34<<7 | 0x36,
+ 32808 - 19968: jis0208<<14 | 0x45<<7 | 0x34,
+ 32812 - 19968: jis0212<<14 | 0x34<<7 | 0x37,
+ 32814 - 19968: jis0212<<14 | 0x34<<7 | 0x38,
+ 32816 - 19968: jis0212<<14 | 0x34<<7 | 0x39,
+ 32819 - 19968: jis0208<<14 | 0x1B<<7 | 0x09,
+ 32820 - 19968: jis0212<<14 | 0x34<<7 | 0x3A,
+ 32821 - 19968: jis0212<<14 | 0x34<<7 | 0x3B,
+ 32822 - 19968: jis0208<<14 | 0x2B<<7 | 0x4C,
+ 32823 - 19968: jis0212<<14 | 0x34<<7 | 0x3C,
+ 32825 - 19968: jis0212<<14 | 0x34<<7 | 0x3D,
+ 32826 - 19968: jis0212<<14 | 0x34<<7 | 0x3E,
+ 32827 - 19968: jis0208<<14 | 0x45<<7 | 0x36,
+ 32828 - 19968: jis0212<<14 | 0x34<<7 | 0x3F,
+ 32829 - 19968: jis0208<<14 | 0x22<<7 | 0x1E,
+ 32830 - 19968: jis0212<<14 | 0x34<<7 | 0x40,
+ 32831 - 19968: jis0208<<14 | 0x45<<7 | 0x35,
+ 32832 - 19968: jis0212<<14 | 0x34<<7 | 0x41,
+ 32836 - 19968: jis0212<<14 | 0x34<<7 | 0x42,
+ 32838 - 19968: jis0208<<14 | 0x45<<7 | 0x38,
+ 32842 - 19968: jis0208<<14 | 0x45<<7 | 0x37,
+ 32850 - 19968: jis0208<<14 | 0x45<<7 | 0x39,
+ 32854 - 19968: jis0208<<14 | 0x1F<<7 | 0x1A,
+ 32856 - 19968: jis0208<<14 | 0x45<<7 | 0x3A,
+ 32858 - 19968: jis0208<<14 | 0x45<<7 | 0x3B,
+ 32862 - 19968: jis0208<<14 | 0x29<<7 | 0x18,
+ 32863 - 19968: jis0208<<14 | 0x45<<7 | 0x3C,
+ 32864 - 19968: jis0212<<14 | 0x34<<7 | 0x43,
+ 32865 - 19968: jis0208<<14 | 0x20<<7 | 0x4E,
+ 32866 - 19968: jis0208<<14 | 0x45<<7 | 0x3D,
+ 32868 - 19968: jis0212<<14 | 0x34<<7 | 0x44,
+ 32870 - 19968: jis0212<<14 | 0x34<<7 | 0x45,
+ 32872 - 19968: jis0208<<14 | 0x45<<7 | 0x3E,
+ 32877 - 19968: jis0212<<14 | 0x34<<7 | 0x46,
+ 32879 - 19968: jis0208<<14 | 0x2D<<7 | 0x5D,
+ 32880 - 19968: jis0208<<14 | 0x45<<7 | 0x41,
+ 32881 - 19968: jis0212<<14 | 0x34<<7 | 0x47,
+ 32882 - 19968: jis0208<<14 | 0x45<<7 | 0x40,
+ 32883 - 19968: jis0208<<14 | 0x45<<7 | 0x3F,
+ 32884 - 19968: jis0208<<14 | 0x23<<7 | 0x0F,
+ 32885 - 19968: jis0212<<14 | 0x34<<7 | 0x48,
+ 32886 - 19968: jis0208<<14 | 0x45<<7 | 0x42,
+ 32887 - 19968: jis0208<<14 | 0x1E<<7 | 0x05,
+ 32889 - 19968: jis0208<<14 | 0x45<<7 | 0x43,
+ 32893 - 19968: jis0208<<14 | 0x45<<7 | 0x44,
+ 32894 - 19968: jis0208<<14 | 0x2E<<7 | 0x17,
+ 32895 - 19968: jis0208<<14 | 0x45<<7 | 0x45,
+ 32897 - 19968: jis0212<<14 | 0x34<<7 | 0x49,
+ 32900 - 19968: jis0208<<14 | 0x45<<7 | 0x46,
+ 32901 - 19968: jis0208<<14 | 0x45<<7 | 0x48,
+ 32902 - 19968: jis0208<<14 | 0x45<<7 | 0x47,
+ 32903 - 19968: jis0208<<14 | 0x27<<7 | 0x04,
+ 32904 - 19968: jis0212<<14 | 0x34<<7 | 0x4A,
+ 32905 - 19968: jis0208<<14 | 0x25<<7 | 0x58,
+ 32907 - 19968: jis0208<<14 | 0x2E<<7 | 0x1D,
+ 32908 - 19968: jis0208<<14 | 0x27<<7 | 0x08,
+ 32910 - 19968: jis0212<<14 | 0x34<<7 | 0x4B,
+ 32915 - 19968: jis0208<<14 | 0x45<<7 | 0x4A,
+ 32918 - 19968: jis0208<<14 | 0x1D<<7 | 0x32,
+ 32920 - 19968: jis0208<<14 | 0x28<<7 | 0x09,
+ 32922 - 19968: jis0208<<14 | 0x45<<7 | 0x4B,
+ 32923 - 19968: jis0208<<14 | 0x45<<7 | 0x49,
+ 32924 - 19968: jis0212<<14 | 0x34<<7 | 0x4C,
+ 32925 - 19968: jis0208<<14 | 0x13<<7 | 0x2D,
+ 32926 - 19968: jis0212<<14 | 0x34<<7 | 0x4D,
+ 32929 - 19968: jis0208<<14 | 0x17<<7 | 0x33,
+ 32930 - 19968: jis0208<<14 | 0x1A<<7 | 0x47,
+ 32933 - 19968: jis0208<<14 | 0x27<<7 | 0x4D,
+ 32934 - 19968: jis0212<<14 | 0x34<<7 | 0x4E,
+ 32935 - 19968: jis0212<<14 | 0x34<<7 | 0x4F,
+ 32937 - 19968: jis0208<<14 | 0x17<<7 | 0x09,
+ 32938 - 19968: jis0208<<14 | 0x2A<<7 | 0x22,
+ 32939 - 19968: jis0212<<14 | 0x34<<7 | 0x50,
+ 32940 - 19968: jis0208<<14 | 0x45<<7 | 0x4E,
+ 32941 - 19968: jis0208<<14 | 0x45<<7 | 0x4C,
+ 32943 - 19968: jis0208<<14 | 0x18<<7 | 0x2D,
+ 32945 - 19968: jis0208<<14 | 0x18<<7 | 0x2E,
+ 32946 - 19968: jis0208<<14 | 0x0F<<7 | 0x48,
+ 32948 - 19968: jis0208<<14 | 0x19<<7 | 0x47,
+ 32952 - 19968: jis0212<<14 | 0x34<<7 | 0x51,
+ 32953 - 19968: jis0212<<14 | 0x34<<7 | 0x52,
+ 32954 - 19968: jis0208<<14 | 0x26<<7 | 0x38,
+ 32963 - 19968: jis0208<<14 | 0x0F<<7 | 0x3E,
+ 32964 - 19968: jis0208<<14 | 0x45<<7 | 0x53,
+ 32966 - 19968: jis0208<<14 | 0x22<<7 | 0x1F,
+ 32968 - 19968: jis0212<<14 | 0x34<<7 | 0x53,
+ 32972 - 19968: jis0208<<14 | 0x26<<7 | 0x37,
+ 32973 - 19968: jis0212<<14 | 0x34<<7 | 0x54,
+ 32974 - 19968: jis0208<<14 | 0x21<<7 | 0x3A,
+ 32975 - 19968: jis0212<<14 | 0x34<<7 | 0x55,
+ 32978 - 19968: jis0212<<14 | 0x34<<7 | 0x56,
+ 32980 - 19968: jis0212<<14 | 0x34<<7 | 0x57,
+ 32981 - 19968: jis0212<<14 | 0x34<<7 | 0x58,
+ 32982 - 19968: jis0208<<14 | 0x45<<7 | 0x55,
+ 32983 - 19968: jis0212<<14 | 0x34<<7 | 0x59,
+ 32984 - 19968: jis0212<<14 | 0x34<<7 | 0x5A,
+ 32985 - 19968: jis0208<<14 | 0x45<<7 | 0x51,
+ 32986 - 19968: jis0208<<14 | 0x45<<7 | 0x54,
+ 32987 - 19968: jis0208<<14 | 0x45<<7 | 0x4F,
+ 32989 - 19968: jis0208<<14 | 0x45<<7 | 0x52,
+ 32990 - 19968: jis0208<<14 | 0x2A<<7 | 0x05,
+ 32992 - 19968: jis0212<<14 | 0x34<<7 | 0x5B,
+ 32993 - 19968: jis0208<<14 | 0x17<<7 | 0x34,
+ 32996 - 19968: jis0208<<14 | 0x0F<<7 | 0x5C,
+ 32997 - 19968: jis0208<<14 | 0x45<<7 | 0x50,
+ 33005 - 19968: jis0212<<14 | 0x34<<7 | 0x5C,
+ 33006 - 19968: jis0212<<14 | 0x34<<7 | 0x5D,
+ 33007 - 19968: jis0208<<14 | 0x45<<7 | 0x57,
+ 33008 - 19968: jis0212<<14 | 0x35<<7 | 0x00,
+ 33009 - 19968: jis0208<<14 | 0x45<<7 | 0x58,
+ 33010 - 19968: jis0212<<14 | 0x35<<7 | 0x01,
+ 33011 - 19968: jis0212<<14 | 0x35<<7 | 0x02,
+ 33012 - 19968: jis0208<<14 | 0x25<<7 | 0x18,
+ 33014 - 19968: jis0212<<14 | 0x35<<7 | 0x03,
+ 33016 - 19968: jis0208<<14 | 0x15<<7 | 0x1A,
+ 33017 - 19968: jis0212<<14 | 0x35<<7 | 0x04,
+ 33018 - 19968: jis0212<<14 | 0x35<<7 | 0x05,
+ 33020 - 19968: jis0208<<14 | 0x46<<7 | 0x05,
+ 33021 - 19968: jis0208<<14 | 0x26<<7 | 0x1C,
+ 33022 - 19968: jis0212<<14 | 0x35<<7 | 0x06,
+ 33026 - 19968: jis0208<<14 | 0x1A<<7 | 0x48,
+ 33027 - 19968: jis0212<<14 | 0x35<<7 | 0x07,
+ 33029 - 19968: jis0208<<14 | 0x15<<7 | 0x1B,
+ 33030 - 19968: jis0208<<14 | 0x1F<<7 | 0x27,
+ 33031 - 19968: jis0208<<14 | 0x2E<<7 | 0x25,
+ 33032 - 19968: jis0208<<14 | 0x2B<<7 | 0x0D,
+ 33033 - 19968: jis0208<<14 | 0x45<<7 | 0x56,
+ 33034 - 19968: jis0208<<14 | 0x1F<<7 | 0x33,
+ 33035 - 19968: jis0212<<14 | 0x35<<7 | 0x08,
+ 33046 - 19968: jis0212<<14 | 0x35<<7 | 0x09,
+ 33047 - 19968: jis0212<<14 | 0x35<<7 | 0x0A,
+ 33048 - 19968: jis0212<<14 | 0x35<<7 | 0x0B,
+ 33050 - 19968: jis0208<<14 | 0x14<<7 | 0x32,
+ 33051 - 19968: jis0208<<14 | 0x45<<7 | 0x59,
+ 33052 - 19968: jis0212<<14 | 0x35<<7 | 0x0C,
+ 33054 - 19968: jis0212<<14 | 0x35<<7 | 0x0D,
+ 33056 - 19968: jis0212<<14 | 0x35<<7 | 0x0E,
+ 33059 - 19968: jis0208<<14 | 0x45<<7 | 0x5B,
+ 33060 - 19968: jis0212<<14 | 0x35<<7 | 0x0F,
+ 33063 - 19968: jis0212<<14 | 0x35<<7 | 0x10,
+ 33065 - 19968: jis0208<<14 | 0x45<<7 | 0x5A,
+ 33068 - 19968: jis0212<<14 | 0x35<<7 | 0x11,
+ 33071 - 19968: jis0208<<14 | 0x45<<7 | 0x5C,
+ 33072 - 19968: jis0212<<14 | 0x35<<7 | 0x12,
+ 33073 - 19968: jis0208<<14 | 0x22<<7 | 0x05,
+ 33075 - 19968: jis0208<<14 | 0x26<<7 | 0x1D,
+ 33077 - 19968: jis0212<<14 | 0x35<<7 | 0x13,
+ 33081 - 19968: jis0208<<14 | 0x23<<7 | 0x10,
+ 33082 - 19968: jis0212<<14 | 0x35<<7 | 0x14,
+ 33084 - 19968: jis0212<<14 | 0x35<<7 | 0x15,
+ 33086 - 19968: jis0208<<14 | 0x46<<7 | 0x02,
+ 33093 - 19968: jis0212<<14 | 0x35<<7 | 0x16,
+ 33094 - 19968: jis0208<<14 | 0x46<<7 | 0x01,
+ 33095 - 19968: jis0212<<14 | 0x35<<7 | 0x17,
+ 33098 - 19968: jis0212<<14 | 0x35<<7 | 0x18,
+ 33099 - 19968: jis0208<<14 | 0x45<<7 | 0x5D,
+ 33100 - 19968: jis0212<<14 | 0x35<<7 | 0x19,
+ 33102 - 19968: jis0208<<14 | 0x1E<<7 | 0x34,
+ 33104 - 19968: jis0208<<14 | 0x28<<7 | 0x44,
+ 33105 - 19968: jis0208<<14 | 0x46<<7 | 0x04,
+ 33106 - 19968: jis0212<<14 | 0x35<<7 | 0x1A,
+ 33107 - 19968: jis0208<<14 | 0x46<<7 | 0x03,
+ 33108 - 19968: jis0208<<14 | 0x18<<7 | 0x2F,
+ 33109 - 19968: jis0208<<14 | 0x2E<<7 | 0x32,
+ 33111 - 19968: jis0212<<14 | 0x35<<7 | 0x1B,
+ 33119 - 19968: jis0208<<14 | 0x46<<7 | 0x14,
+ 33120 - 19968: jis0212<<14 | 0x35<<7 | 0x1C,
+ 33121 - 19968: jis0212<<14 | 0x35<<7 | 0x1D,
+ 33125 - 19968: jis0208<<14 | 0x46<<7 | 0x08,
+ 33126 - 19968: jis0208<<14 | 0x46<<7 | 0x09,
+ 33127 - 19968: jis0212<<14 | 0x35<<7 | 0x1E,
+ 33128 - 19968: jis0212<<14 | 0x35<<7 | 0x1F,
+ 33129 - 19968: jis0212<<14 | 0x35<<7 | 0x20,
+ 33131 - 19968: jis0208<<14 | 0x1B<<7 | 0x4F,
+ 33133 - 19968: jis0212<<14 | 0x35<<7 | 0x21,
+ 33134 - 19968: jis0208<<14 | 0x46<<7 | 0x07,
+ 33135 - 19968: jis0212<<14 | 0x35<<7 | 0x22,
+ 33136 - 19968: jis0208<<14 | 0x18<<7 | 0x57,
+ 33137 - 19968: jis0208<<14 | 0x46<<7 | 0x06,
+ 33140 - 19968: jis0208<<14 | 0x46<<7 | 0x0A,
+ 33143 - 19968: jis0212<<14 | 0x35<<7 | 0x23,
+ 33144 - 19968: jis0208<<14 | 0x23<<7 | 0x11,
+ 33145 - 19968: jis0208<<14 | 0x29<<7 | 0x01,
+ 33146 - 19968: jis0208<<14 | 0x20<<7 | 0x02,
+ 33151 - 19968: jis0208<<14 | 0x21<<7 | 0x3B,
+ 33152 - 19968: jis0208<<14 | 0x46<<7 | 0x0E,
+ 33153 - 19968: jis0212<<14 | 0x35<<7 | 0x24,
+ 33154 - 19968: jis0208<<14 | 0x46<<7 | 0x0F,
+ 33155 - 19968: jis0208<<14 | 0x46<<7 | 0x0B,
+ 33156 - 19968: jis0212<<14 | 0x35<<7 | 0x26,
+ 33157 - 19968: jis0212<<14 | 0x35<<7 | 0x27,
+ 33158 - 19968: jis0212<<14 | 0x35<<7 | 0x28,
+ 33160 - 19968: jis0208<<14 | 0x46<<7 | 0x0C,
+ 33162 - 19968: jis0208<<14 | 0x46<<7 | 0x0D,
+ 33163 - 19968: jis0212<<14 | 0x35<<7 | 0x29,
+ 33166 - 19968: jis0212<<14 | 0x35<<7 | 0x2A,
+ 33167 - 19968: jis0208<<14 | 0x18<<7 | 0x30,
+ 33168 - 19968: jis0212<<14 | 0x35<<7 | 0x25,
+ 33171 - 19968: jis0208<<14 | 0x46<<7 | 0x15,
+ 33173 - 19968: jis0208<<14 | 0x46<<7 | 0x11,
+ 33174 - 19968: jis0212<<14 | 0x35<<7 | 0x2B,
+ 33176 - 19968: jis0212<<14 | 0x35<<7 | 0x2C,
+ 33178 - 19968: jis0208<<14 | 0x28<<7 | 0x45,
+ 33179 - 19968: jis0212<<14 | 0x35<<7 | 0x2D,
+ 33180 - 19968: jis0208<<14 | 0x2A<<7 | 0x4B,
+ 33181 - 19968: jis0208<<14 | 0x28<<7 | 0x07,
+ 33182 - 19968: jis0212<<14 | 0x35<<7 | 0x2E,
+ 33184 - 19968: jis0208<<14 | 0x46<<7 | 0x10,
+ 33186 - 19968: jis0212<<14 | 0x35<<7 | 0x2F,
+ 33187 - 19968: jis0208<<14 | 0x46<<7 | 0x13,
+ 33188 - 19968: jis0208<<14 | 0x46<<7 | 0x12,
+ 33192 - 19968: jis0208<<14 | 0x2A<<7 | 0x23,
+ 33193 - 19968: jis0208<<14 | 0x46<<7 | 0x16,
+ 33198 - 19968: jis0212<<14 | 0x35<<7 | 0x30,
+ 33200 - 19968: jis0208<<14 | 0x46<<7 | 0x17,
+ 33202 - 19968: jis0212<<14 | 0x35<<7 | 0x31,
+ 33203 - 19968: jis0208<<14 | 0x20<<7 | 0x16,
+ 33204 - 19968: jis0212<<14 | 0x35<<7 | 0x32,
+ 33205 - 19968: jis0208<<14 | 0x46<<7 | 0x18,
+ 33208 - 19968: jis0208<<14 | 0x46<<7 | 0x1A,
+ 33210 - 19968: jis0208<<14 | 0x46<<7 | 0x1E,
+ 33211 - 19968: jis0212<<14 | 0x35<<7 | 0x33,
+ 33213 - 19968: jis0208<<14 | 0x46<<7 | 0x1B,
+ 33214 - 19968: jis0208<<14 | 0x46<<7 | 0x19,
+ 33215 - 19968: jis0208<<14 | 0x26<<7 | 0x1E,
+ 33216 - 19968: jis0208<<14 | 0x46<<7 | 0x1C,
+ 33218 - 19968: jis0208<<14 | 0x46<<7 | 0x1D,
+ 33219 - 19968: jis0212<<14 | 0x35<<7 | 0x35,
+ 33221 - 19968: jis0212<<14 | 0x35<<7 | 0x36,
+ 33222 - 19968: jis0208<<14 | 0x11<<7 | 0x11,
+ 33224 - 19968: jis0208<<14 | 0x46<<7 | 0x24,
+ 33225 - 19968: jis0208<<14 | 0x46<<7 | 0x1F,
+ 33226 - 19968: jis0212<<14 | 0x35<<7 | 0x37,
+ 33227 - 19968: jis0212<<14 | 0x35<<7 | 0x34,
+ 33229 - 19968: jis0208<<14 | 0x46<<7 | 0x20,
+ 33230 - 19968: jis0212<<14 | 0x35<<7 | 0x38,
+ 33231 - 19968: jis0212<<14 | 0x35<<7 | 0x39,
+ 33233 - 19968: jis0208<<14 | 0x46<<7 | 0x21,
+ 33235 - 19968: jis0208<<14 | 0x21<<7 | 0x00,
+ 33237 - 19968: jis0212<<14 | 0x35<<7 | 0x3A,
+ 33239 - 19968: jis0212<<14 | 0x35<<7 | 0x3B,
+ 33240 - 19968: jis0208<<14 | 0x46<<7 | 0x23,
+ 33241 - 19968: jis0208<<14 | 0x46<<7 | 0x22,
+ 33242 - 19968: jis0208<<14 | 0x46<<7 | 0x25,
+ 33243 - 19968: jis0212<<14 | 0x35<<7 | 0x3C,
+ 33245 - 19968: jis0212<<14 | 0x35<<7 | 0x3D,
+ 33246 - 19968: jis0212<<14 | 0x35<<7 | 0x3E,
+ 33247 - 19968: jis0208<<14 | 0x46<<7 | 0x26,
+ 33248 - 19968: jis0208<<14 | 0x46<<7 | 0x27,
+ 33249 - 19968: jis0212<<14 | 0x35<<7 | 0x3F,
+ 33251 - 19968: jis0208<<14 | 0x1E<<7 | 0x22,
+ 33252 - 19968: jis0212<<14 | 0x35<<7 | 0x40,
+ 33253 - 19968: jis0208<<14 | 0x11<<7 | 0x48,
+ 33255 - 19968: jis0208<<14 | 0x46<<7 | 0x28,
+ 33256 - 19968: jis0208<<14 | 0x2D<<7 | 0x36,
+ 33258 - 19968: jis0208<<14 | 0x1B<<7 | 0x0A,
+ 33259 - 19968: jis0212<<14 | 0x35<<7 | 0x41,
+ 33260 - 19968: jis0212<<14 | 0x35<<7 | 0x42,
+ 33261 - 19968: jis0208<<14 | 0x1C<<7 | 0x0C,
+ 33264 - 19968: jis0212<<14 | 0x35<<7 | 0x43,
+ 33265 - 19968: jis0212<<14 | 0x35<<7 | 0x44,
+ 33266 - 19968: jis0212<<14 | 0x35<<7 | 0x45,
+ 33267 - 19968: jis0208<<14 | 0x1A<<7 | 0x49,
+ 33268 - 19968: jis0208<<14 | 0x22<<7 | 0x36,
+ 33269 - 19968: jis0212<<14 | 0x35<<7 | 0x46,
+ 33270 - 19968: jis0212<<14 | 0x35<<7 | 0x47,
+ 33272 - 19968: jis0212<<14 | 0x35<<7 | 0x48,
+ 33273 - 19968: jis0212<<14 | 0x35<<7 | 0x49,
+ 33274 - 19968: jis0208<<14 | 0x46<<7 | 0x29,
+ 33275 - 19968: jis0208<<14 | 0x46<<7 | 0x2A,
+ 33276 - 19968: jis0208<<14 | 0x10<<7 | 0x10,
+ 33277 - 19968: jis0212<<14 | 0x35<<7 | 0x4A,
+ 33278 - 19968: jis0208<<14 | 0x46<<7 | 0x2B,
+ 33279 - 19968: jis0212<<14 | 0x35<<7 | 0x4B,
+ 33280 - 19968: jis0212<<14 | 0x35<<7 | 0x4C,
+ 33281 - 19968: jis0208<<14 | 0x46<<7 | 0x2C,
+ 33282 - 19968: jis0208<<14 | 0x46<<7 | 0x2D,
+ 33283 - 19968: jis0212<<14 | 0x35<<7 | 0x4D,
+ 33285 - 19968: jis0208<<14 | 0x46<<7 | 0x2E,
+ 33287 - 19968: jis0208<<14 | 0x46<<7 | 0x2F,
+ 33288 - 19968: jis0208<<14 | 0x15<<7 | 0x1C,
+ 33289 - 19968: jis0208<<14 | 0x39<<7 | 0x09,
+ 33290 - 19968: jis0208<<14 | 0x46<<7 | 0x30,
+ 33292 - 19968: jis0208<<14 | 0x1F<<7 | 0x44,
+ 33293 - 19968: jis0208<<14 | 0x46<<7 | 0x31,
+ 33294 - 19968: jis0208<<14 | 0x1B<<7 | 0x2A,
+ 33295 - 19968: jis0212<<14 | 0x35<<7 | 0x4E,
+ 33296 - 19968: jis0208<<14 | 0x46<<7 | 0x32,
+ 33298 - 19968: jis0208<<14 | 0x2F<<7 | 0x0F,
+ 33299 - 19968: jis0212<<14 | 0x35<<7 | 0x4F,
+ 33300 - 19968: jis0212<<14 | 0x35<<7 | 0x50,
+ 33302 - 19968: jis0208<<14 | 0x46<<7 | 0x33,
+ 33303 - 19968: jis0208<<14 | 0x29<<7 | 0x3D,
+ 33304 - 19968: jis0208<<14 | 0x13<<7 | 0x3B,
+ 33305 - 19968: jis0212<<14 | 0x35<<7 | 0x51,
+ 33306 - 19968: jis0212<<14 | 0x35<<7 | 0x52,
+ 33307 - 19968: jis0208<<14 | 0x20<<7 | 0x03,
+ 33308 - 19968: jis0208<<14 | 0x1C<<7 | 0x37,
+ 33309 - 19968: jis0212<<14 | 0x35<<7 | 0x53,
+ 33310 - 19968: jis0208<<14 | 0x28<<7 | 0x50,
+ 33311 - 19968: jis0208<<14 | 0x1C<<7 | 0x0D,
+ 33313 - 19968: jis0212<<14 | 0x35<<7 | 0x54,
+ 33314 - 19968: jis0212<<14 | 0x35<<7 | 0x55,
+ 33320 - 19968: jis0212<<14 | 0x35<<7 | 0x56,
+ 33321 - 19968: jis0208<<14 | 0x46<<7 | 0x34,
+ 33322 - 19968: jis0208<<14 | 0x18<<7 | 0x31,
+ 33323 - 19968: jis0208<<14 | 0x46<<7 | 0x35,
+ 33324 - 19968: jis0208<<14 | 0x27<<7 | 0x2B,
+ 33326 - 19968: jis0208<<14 | 0x46<<7 | 0x43,
+ 33330 - 19968: jis0212<<14 | 0x35<<7 | 0x57,
+ 33331 - 19968: jis0208<<14 | 0x46<<7 | 0x37,
+ 33332 - 19968: jis0212<<14 | 0x35<<7 | 0x58,
+ 33333 - 19968: jis0208<<14 | 0x21<<7 | 0x28,
+ 33334 - 19968: jis0208<<14 | 0x26<<7 | 0x54,
+ 33335 - 19968: jis0208<<14 | 0x17<<7 | 0x1E,
+ 33336 - 19968: jis0208<<14 | 0x46<<7 | 0x36,
+ 33337 - 19968: jis0208<<14 | 0x20<<7 | 0x04,
+ 33338 - 19968: jis0212<<14 | 0x35<<7 | 0x59,
+ 33344 - 19968: jis0208<<14 | 0x46<<7 | 0x38,
+ 33347 - 19968: jis0212<<14 | 0x35<<7 | 0x5A,
+ 33348 - 19968: jis0212<<14 | 0x35<<7 | 0x5B,
+ 33349 - 19968: jis0212<<14 | 0x35<<7 | 0x5C,
+ 33350 - 19968: jis0212<<14 | 0x35<<7 | 0x5D,
+ 33351 - 19968: jis0208<<14 | 0x23<<7 | 0x59,
+ 33355 - 19968: jis0212<<14 | 0x36<<7 | 0x00,
+ 33358 - 19968: jis0212<<14 | 0x36<<7 | 0x01,
+ 33359 - 19968: jis0212<<14 | 0x36<<7 | 0x02,
+ 33361 - 19968: jis0212<<14 | 0x36<<7 | 0x03,
+ 33366 - 19968: jis0212<<14 | 0x36<<7 | 0x04,
+ 33368 - 19968: jis0208<<14 | 0x46<<7 | 0x3A,
+ 33369 - 19968: jis0208<<14 | 0x46<<7 | 0x39,
+ 33370 - 19968: jis0208<<14 | 0x46<<7 | 0x3C,
+ 33372 - 19968: jis0212<<14 | 0x36<<7 | 0x05,
+ 33373 - 19968: jis0208<<14 | 0x46<<7 | 0x3B,
+ 33375 - 19968: jis0208<<14 | 0x46<<7 | 0x3D,
+ 33376 - 19968: jis0212<<14 | 0x36<<7 | 0x06,
+ 33378 - 19968: jis0208<<14 | 0x46<<7 | 0x3F,
+ 33379 - 19968: jis0212<<14 | 0x36<<7 | 0x07,
+ 33380 - 19968: jis0208<<14 | 0x46<<7 | 0x3E,
+ 33382 - 19968: jis0208<<14 | 0x13<<7 | 0x2E,
+ 33383 - 19968: jis0212<<14 | 0x36<<7 | 0x08,
+ 33384 - 19968: jis0208<<14 | 0x46<<7 | 0x40,
+ 33386 - 19968: jis0208<<14 | 0x46<<7 | 0x41,
+ 33387 - 19968: jis0208<<14 | 0x46<<7 | 0x42,
+ 33389 - 19968: jis0212<<14 | 0x36<<7 | 0x09,
+ 33390 - 19968: jis0208<<14 | 0x19<<7 | 0x10,
+ 33391 - 19968: jis0208<<14 | 0x2D<<7 | 0x28,
+ 33393 - 19968: jis0208<<14 | 0x46<<7 | 0x44,
+ 33394 - 19968: jis0208<<14 | 0x1E<<7 | 0x06,
+ 33396 - 19968: jis0212<<14 | 0x36<<7 | 0x0A,
+ 33398 - 19968: jis0208<<14 | 0x10<<7 | 0x4F,
+ 33399 - 19968: jis0208<<14 | 0x46<<7 | 0x45,
+ 33400 - 19968: jis0208<<14 | 0x46<<7 | 0x46,
+ 33403 - 19968: jis0212<<14 | 0x36<<7 | 0x0B,
+ 33405 - 19968: jis0212<<14 | 0x36<<7 | 0x0C,
+ 33406 - 19968: jis0208<<14 | 0x46<<7 | 0x47,
+ 33407 - 19968: jis0212<<14 | 0x36<<7 | 0x0D,
+ 33408 - 19968: jis0212<<14 | 0x36<<7 | 0x0E,
+ 33409 - 19968: jis0212<<14 | 0x36<<7 | 0x0F,
+ 33411 - 19968: jis0212<<14 | 0x36<<7 | 0x10,
+ 33412 - 19968: jis0212<<14 | 0x36<<7 | 0x11,
+ 33415 - 19968: jis0212<<14 | 0x36<<7 | 0x12,
+ 33417 - 19968: jis0212<<14 | 0x36<<7 | 0x13,
+ 33418 - 19968: jis0212<<14 | 0x36<<7 | 0x14,
+ 33419 - 19968: jis0208<<14 | 0x0F<<7 | 0x51,
+ 33421 - 19968: jis0208<<14 | 0x46<<7 | 0x48,
+ 33422 - 19968: jis0212<<14 | 0x36<<7 | 0x15,
+ 33425 - 19968: jis0212<<14 | 0x36<<7 | 0x16,
+ 33426 - 19968: jis0208<<14 | 0x46<<7 | 0x49,
+ 33428 - 19968: jis0212<<14 | 0x36<<7 | 0x17,
+ 33430 - 19968: jis0212<<14 | 0x36<<7 | 0x18,
+ 33432 - 19968: jis0212<<14 | 0x36<<7 | 0x19,
+ 33433 - 19968: jis0208<<14 | 0x28<<7 | 0x46,
+ 33434 - 19968: jis0212<<14 | 0x36<<7 | 0x1A,
+ 33435 - 19968: jis0212<<14 | 0x36<<7 | 0x1B,
+ 33437 - 19968: jis0208<<14 | 0x1B<<7 | 0x26,
+ 33439 - 19968: jis0208<<14 | 0x46<<7 | 0x4B,
+ 33440 - 19968: jis0212<<14 | 0x36<<7 | 0x1C,
+ 33441 - 19968: jis0212<<14 | 0x36<<7 | 0x1D,
+ 33443 - 19968: jis0212<<14 | 0x36<<7 | 0x1E,
+ 33444 - 19968: jis0212<<14 | 0x36<<7 | 0x1F,
+ 33445 - 19968: jis0208<<14 | 0x12<<7 | 0x08,
+ 33446 - 19968: jis0208<<14 | 0x0F<<7 | 0x11,
+ 33447 - 19968: jis0212<<14 | 0x36<<7 | 0x20,
+ 33448 - 19968: jis0212<<14 | 0x36<<7 | 0x21,
+ 33449 - 19968: jis0212<<14 | 0x36<<7 | 0x22,
+ 33450 - 19968: jis0212<<14 | 0x36<<7 | 0x23,
+ 33451 - 19968: jis0208<<14 | 0x46<<7 | 0x4A,
+ 33452 - 19968: jis0208<<14 | 0x46<<7 | 0x4D,
+ 33453 - 19968: jis0208<<14 | 0x26<<7 | 0x2D,
+ 33454 - 19968: jis0212<<14 | 0x36<<7 | 0x24,
+ 33455 - 19968: jis0208<<14 | 0x1E<<7 | 0x23,
+ 33456 - 19968: jis0212<<14 | 0x36<<7 | 0x25,
+ 33457 - 19968: jis0208<<14 | 0x11<<7 | 0x35,
+ 33458 - 19968: jis0212<<14 | 0x36<<7 | 0x26,
+ 33459 - 19968: jis0208<<14 | 0x2A<<7 | 0x06,
+ 33460 - 19968: jis0212<<14 | 0x36<<7 | 0x27,
+ 33463 - 19968: jis0212<<14 | 0x36<<7 | 0x28,
+ 33464 - 19968: jis0208<<14 | 0x16<<7 | 0x3C,
+ 33465 - 19968: jis0208<<14 | 0x15<<7 | 0x3B,
+ 33466 - 19968: jis0212<<14 | 0x36<<7 | 0x29,
+ 33467 - 19968: jis0208<<14 | 0x46<<7 | 0x4C,
+ 33468 - 19968: jis0212<<14 | 0x36<<7 | 0x2A,
+ 33469 - 19968: jis0208<<14 | 0x11<<7 | 0x49,
+ 33470 - 19968: jis0212<<14 | 0x36<<7 | 0x2B,
+ 33471 - 19968: jis0212<<14 | 0x36<<7 | 0x2C,
+ 33477 - 19968: jis0208<<14 | 0x13<<7 | 0x02,
+ 33478 - 19968: jis0212<<14 | 0x36<<7 | 0x2D,
+ 33488 - 19968: jis0212<<14 | 0x36<<7 | 0x2E,
+ 33489 - 19968: jis0208<<14 | 0x10<<7 | 0x50,
+ 33490 - 19968: jis0208<<14 | 0x46<<7 | 0x51,
+ 33491 - 19968: jis0208<<14 | 0x2D<<7 | 0x49,
+ 33492 - 19968: jis0208<<14 | 0x21<<7 | 0x3C,
+ 33493 - 19968: jis0212<<14 | 0x36<<7 | 0x2F,
+ 33495 - 19968: jis0208<<14 | 0x28<<7 | 0x23,
+ 33497 - 19968: jis0208<<14 | 0x46<<7 | 0x5D,
+ 33498 - 19968: jis0212<<14 | 0x36<<7 | 0x30,
+ 33499 - 19968: jis0208<<14 | 0x11<<7 | 0x36,
+ 33500 - 19968: jis0208<<14 | 0x46<<7 | 0x5B,
+ 33502 - 19968: jis0208<<14 | 0x46<<7 | 0x59,
+ 33503 - 19968: jis0208<<14 | 0x46<<7 | 0x50,
+ 33504 - 19968: jis0212<<14 | 0x36<<7 | 0x31,
+ 33505 - 19968: jis0208<<14 | 0x46<<7 | 0x4E,
+ 33506 - 19968: jis0212<<14 | 0x36<<7 | 0x32,
+ 33507 - 19968: jis0208<<14 | 0x46<<7 | 0x4F,
+ 33508 - 19968: jis0212<<14 | 0x36<<7 | 0x33,
+ 33509 - 19968: jis0208<<14 | 0x1B<<7 | 0x42,
+ 33510 - 19968: jis0208<<14 | 0x15<<7 | 0x4B,
+ 33511 - 19968: jis0208<<14 | 0x22<<7 | 0x56,
+ 33512 - 19968: jis0212<<14 | 0x36<<7 | 0x34,
+ 33514 - 19968: jis0212<<14 | 0x36<<7 | 0x35,
+ 33515 - 19968: jis0208<<14 | 0x25<<7 | 0x30,
+ 33517 - 19968: jis0212<<14 | 0x36<<7 | 0x36,
+ 33519 - 19968: jis0212<<14 | 0x36<<7 | 0x37,
+ 33521 - 19968: jis0208<<14 | 0x10<<7 | 0x30,
+ 33523 - 19968: jis0208<<14 | 0x46<<7 | 0x53,
+ 33524 - 19968: jis0208<<14 | 0x46<<7 | 0x52,
+ 33526 - 19968: jis0212<<14 | 0x36<<7 | 0x38,
+ 33527 - 19968: jis0212<<14 | 0x36<<7 | 0x39,
+ 33529 - 19968: jis0208<<14 | 0x46<<7 | 0x58,
+ 33530 - 19968: jis0208<<14 | 0x46<<7 | 0x54,
+ 33531 - 19968: jis0208<<14 | 0x46<<7 | 0x57,
+ 33533 - 19968: jis0212<<14 | 0x36<<7 | 0x3A,
+ 33534 - 19968: jis0212<<14 | 0x36<<7 | 0x3B,
+ 33536 - 19968: jis0212<<14 | 0x36<<7 | 0x3C,
+ 33537 - 19968: jis0208<<14 | 0x5A<<7 | 0x36,
+ 33538 - 19968: jis0208<<14 | 0x2B<<7 | 0x2F,
+ 33539 - 19968: jis0208<<14 | 0x46<<7 | 0x56,
+ 33540 - 19968: jis0208<<14 | 0x11<<7 | 0x37,
+ 33541 - 19968: jis0208<<14 | 0x12<<7 | 0x5C,
+ 33542 - 19968: jis0208<<14 | 0x46<<7 | 0x5A,
+ 33543 - 19968: jis0212<<14 | 0x36<<7 | 0x3E,
+ 33544 - 19968: jis0212<<14 | 0x36<<7 | 0x3F,
+ 33545 - 19968: jis0208<<14 | 0x46<<7 | 0x5C,
+ 33546 - 19968: jis0212<<14 | 0x36<<7 | 0x40,
+ 33547 - 19968: jis0212<<14 | 0x36<<7 | 0x41,
+ 33550 - 19968: jis0208<<14 | 0x16<<7 | 0x33,
+ 33558 - 19968: jis0208<<14 | 0x47<<7 | 0x02,
+ 33559 - 19968: jis0208<<14 | 0x47<<7 | 0x0B,
+ 33560 - 19968: jis0208<<14 | 0x47<<7 | 0x0C,
+ 33563 - 19968: jis0212<<14 | 0x36<<7 | 0x43,
+ 33564 - 19968: jis0208<<14 | 0x0F<<7 | 0x0A,
+ 33565 - 19968: jis0212<<14 | 0x36<<7 | 0x44,
+ 33566 - 19968: jis0212<<14 | 0x36<<7 | 0x45,
+ 33567 - 19968: jis0212<<14 | 0x36<<7 | 0x46,
+ 33569 - 19968: jis0212<<14 | 0x36<<7 | 0x47,
+ 33570 - 19968: jis0212<<14 | 0x36<<7 | 0x48,
+ 33571 - 19968: jis0208<<14 | 0x47<<7 | 0x13,
+ 33576 - 19968: jis0208<<14 | 0x0F<<7 | 0x50,
+ 33579 - 19968: jis0208<<14 | 0x47<<7 | 0x0A,
+ 33580 - 19968: jis0212<<14 | 0x36<<7 | 0x49,
+ 33581 - 19968: jis0212<<14 | 0x36<<7 | 0x4A,
+ 33582 - 19968: jis0212<<14 | 0x36<<7 | 0x4B,
+ 33583 - 19968: jis0208<<14 | 0x47<<7 | 0x09,
+ 33584 - 19968: jis0212<<14 | 0x36<<7 | 0x4C,
+ 33585 - 19968: jis0208<<14 | 0x47<<7 | 0x04,
+ 33586 - 19968: jis0208<<14 | 0x47<<7 | 0x03,
+ 33587 - 19968: jis0212<<14 | 0x36<<7 | 0x4D,
+ 33588 - 19968: jis0208<<14 | 0x47<<7 | 0x01,
+ 33589 - 19968: jis0208<<14 | 0x47<<7 | 0x00,
+ 33590 - 19968: jis0208<<14 | 0x22<<7 | 0x42,
+ 33591 - 19968: jis0212<<14 | 0x36<<7 | 0x4E,
+ 33592 - 19968: jis0208<<14 | 0x21<<7 | 0x5A,
+ 33593 - 19968: jis0208<<14 | 0x47<<7 | 0x06,
+ 33594 - 19968: jis0212<<14 | 0x36<<7 | 0x4F,
+ 33596 - 19968: jis0212<<14 | 0x36<<7 | 0x50,
+ 33597 - 19968: jis0212<<14 | 0x36<<7 | 0x51,
+ 33600 - 19968: jis0208<<14 | 0x47<<7 | 0x05,
+ 33602 - 19968: jis0212<<14 | 0x36<<7 | 0x52,
+ 33603 - 19968: jis0212<<14 | 0x36<<7 | 0x53,
+ 33604 - 19968: jis0212<<14 | 0x36<<7 | 0x54,
+ 33605 - 19968: jis0208<<14 | 0x47<<7 | 0x08,
+ 33607 - 19968: jis0212<<14 | 0x36<<7 | 0x55,
+ 33609 - 19968: jis0208<<14 | 0x20<<7 | 0x4F,
+ 33610 - 19968: jis0208<<14 | 0x16<<7 | 0x34,
+ 33613 - 19968: jis0212<<14 | 0x36<<7 | 0x56,
+ 33614 - 19968: jis0212<<14 | 0x36<<7 | 0x57,
+ 33615 - 19968: jis0208<<14 | 0x10<<7 | 0x20,
+ 33616 - 19968: jis0208<<14 | 0x47<<7 | 0x07,
+ 33617 - 19968: jis0212<<14 | 0x36<<7 | 0x58,
+ 33618 - 19968: jis0208<<14 | 0x18<<7 | 0x32,
+ 33619 - 19968: jis0212<<14 | 0x37<<7 | 0x1D,
+ 33620 - 19968: jis0212<<14 | 0x36<<7 | 0x42,
+ 33621 - 19968: jis0212<<14 | 0x36<<7 | 0x59,
+ 33622 - 19968: jis0212<<14 | 0x36<<7 | 0x5A,
+ 33623 - 19968: jis0212<<14 | 0x36<<7 | 0x5B,
+ 33624 - 19968: jis0208<<14 | 0x20<<7 | 0x50,
+ 33634 - 19968: jis0208<<14 | 0x5A<<7 | 0x37,
+ 33648 - 19968: jis0212<<14 | 0x36<<7 | 0x5C,
+ 33651 - 19968: jis0208<<14 | 0x47<<7 | 0x19,
+ 33653 - 19968: jis0208<<14 | 0x47<<7 | 0x1A,
+ 33655 - 19968: jis0208<<14 | 0x11<<7 | 0x38,
+ 33656 - 19968: jis0212<<14 | 0x36<<7 | 0x5D,
+ 33659 - 19968: jis0208<<14 | 0x11<<7 | 0x0D,
+ 33660 - 19968: jis0208<<14 | 0x47<<7 | 0x17,
+ 33661 - 19968: jis0212<<14 | 0x37<<7 | 0x00,
+ 33663 - 19968: jis0208<<14 | 0x5A<<7 | 0x38,
+ 33664 - 19968: jis0212<<14 | 0x37<<7 | 0x02,
+ 33666 - 19968: jis0212<<14 | 0x37<<7 | 0x03,
+ 33668 - 19968: jis0212<<14 | 0x37<<7 | 0x04,
+ 33669 - 19968: jis0208<<14 | 0x47<<7 | 0x0D,
+ 33670 - 19968: jis0212<<14 | 0x37<<7 | 0x05,
+ 33671 - 19968: jis0208<<14 | 0x47<<7 | 0x15,
+ 33673 - 19968: jis0208<<14 | 0x47<<7 | 0x1C,
+ 33674 - 19968: jis0208<<14 | 0x47<<7 | 0x16,
+ 33677 - 19968: jis0212<<14 | 0x37<<7 | 0x06,
+ 33678 - 19968: jis0208<<14 | 0x47<<7 | 0x14,
+ 33682 - 19968: jis0212<<14 | 0x37<<7 | 0x07,
+ 33683 - 19968: jis0208<<14 | 0x46<<7 | 0x55,
+ 33684 - 19968: jis0212<<14 | 0x37<<7 | 0x08,
+ 33685 - 19968: jis0212<<14 | 0x37<<7 | 0x09,
+ 33686 - 19968: jis0208<<14 | 0x47<<7 | 0x12,
+ 33688 - 19968: jis0212<<14 | 0x37<<7 | 0x0A,
+ 33689 - 19968: jis0212<<14 | 0x37<<7 | 0x0B,
+ 33690 - 19968: jis0208<<14 | 0x47<<7 | 0x0E,
+ 33691 - 19968: jis0212<<14 | 0x37<<7 | 0x0C,
+ 33692 - 19968: jis0212<<14 | 0x37<<7 | 0x0D,
+ 33693 - 19968: jis0212<<14 | 0x37<<7 | 0x0E,
+ 33694 - 19968: jis0208<<14 | 0x13<<7 | 0x2F,
+ 33695 - 19968: jis0208<<14 | 0x47<<7 | 0x10,
+ 33696 - 19968: jis0208<<14 | 0x47<<7 | 0x1B,
+ 33698 - 19968: jis0208<<14 | 0x47<<7 | 0x11,
+ 33702 - 19968: jis0212<<14 | 0x37<<7 | 0x0F,
+ 33703 - 19968: jis0212<<14 | 0x37<<7 | 0x10,
+ 33704 - 19968: jis0208<<14 | 0x47<<7 | 0x1D,
+ 33705 - 19968: jis0212<<14 | 0x37<<7 | 0x11,
+ 33706 - 19968: jis0208<<14 | 0x47<<7 | 0x0F,
+ 33707 - 19968: jis0208<<14 | 0x26<<7 | 0x5B,
+ 33708 - 19968: jis0212<<14 | 0x37<<7 | 0x12,
+ 33709 - 19968: jis0212<<14 | 0x37<<7 | 0x2B,
+ 33713 - 19968: jis0208<<14 | 0x2C<<7 | 0x48,
+ 33717 - 19968: jis0208<<14 | 0x47<<7 | 0x18,
+ 33725 - 19968: jis0208<<14 | 0x47<<7 | 0x2E,
+ 33726 - 19968: jis0212<<14 | 0x37<<7 | 0x13,
+ 33727 - 19968: jis0212<<14 | 0x37<<7 | 0x14,
+ 33728 - 19968: jis0212<<14 | 0x37<<7 | 0x15,
+ 33729 - 19968: jis0208<<14 | 0x47<<7 | 0x26,
+ 33733 - 19968: jis0208<<14 | 0x1E<<7 | 0x5A,
+ 33735 - 19968: jis0208<<14 | 0x5A<<7 | 0x39,
+ 33737 - 19968: jis0212<<14 | 0x37<<7 | 0x17,
+ 33738 - 19968: jis0208<<14 | 0x14<<7 | 0x25,
+ 33740 - 19968: jis0208<<14 | 0x15<<7 | 0x3C,
+ 33742 - 19968: jis0208<<14 | 0x47<<7 | 0x21,
+ 33743 - 19968: jis0212<<14 | 0x37<<7 | 0x18,
+ 33744 - 19968: jis0212<<14 | 0x37<<7 | 0x19,
+ 33745 - 19968: jis0212<<14 | 0x37<<7 | 0x1A,
+ 33747 - 19968: jis0208<<14 | 0x11<<7 | 0x3A,
+ 33748 - 19968: jis0212<<14 | 0x37<<7 | 0x1B,
+ 33750 - 19968: jis0208<<14 | 0x1D<<7 | 0x33,
+ 33752 - 19968: jis0208<<14 | 0x47<<7 | 0x24,
+ 33756 - 19968: jis0208<<14 | 0x19<<7 | 0x39,
+ 33757 - 19968: jis0212<<14 | 0x37<<7 | 0x1C,
+ 33759 - 19968: jis0208<<14 | 0x24<<7 | 0x30,
+ 33760 - 19968: jis0208<<14 | 0x47<<7 | 0x29,
+ 33768 - 19968: jis0212<<14 | 0x37<<7 | 0x1E,
+ 33769 - 19968: jis0208<<14 | 0x29<<7 | 0x4D,
+ 33770 - 19968: jis0212<<14 | 0x37<<7 | 0x1F,
+ 33771 - 19968: jis0208<<14 | 0x47<<7 | 0x20,
+ 33775 - 19968: jis0208<<14 | 0x11<<7 | 0x39,
+ 33776 - 19968: jis0208<<14 | 0x17<<7 | 0x35,
+ 33777 - 19968: jis0208<<14 | 0x28<<7 | 0x08,
+ 33778 - 19968: jis0208<<14 | 0x47<<7 | 0x2A,
+ 33780 - 19968: jis0208<<14 | 0x47<<7 | 0x1E,
+ 33782 - 19968: jis0208<<14 | 0x5A<<7 | 0x3A,
+ 33783 - 19968: jis0208<<14 | 0x47<<7 | 0x27,
+ 33784 - 19968: jis0212<<14 | 0x37<<7 | 0x21,
+ 33785 - 19968: jis0212<<14 | 0x37<<7 | 0x22,
+ 33787 - 19968: jis0208<<14 | 0x47<<7 | 0x31,
+ 33788 - 19968: jis0212<<14 | 0x37<<7 | 0x23,
+ 33789 - 19968: jis0208<<14 | 0x47<<7 | 0x22,
+ 33793 - 19968: jis0212<<14 | 0x37<<7 | 0x24,
+ 33795 - 19968: jis0208<<14 | 0x47<<7 | 0x23,
+ 33796 - 19968: jis0208<<14 | 0x25<<7 | 0x19,
+ 33798 - 19968: jis0212<<14 | 0x37<<7 | 0x25,
+ 33799 - 19968: jis0208<<14 | 0x47<<7 | 0x28,
+ 33802 - 19968: jis0212<<14 | 0x37<<7 | 0x26,
+ 33803 - 19968: jis0208<<14 | 0x47<<7 | 0x25,
+ 33804 - 19968: jis0208<<14 | 0x2A<<7 | 0x07,
+ 33805 - 19968: jis0208<<14 | 0x47<<7 | 0x2B,
+ 33806 - 19968: jis0208<<14 | 0x0F<<7 | 0x3F,
+ 33807 - 19968: jis0212<<14 | 0x37<<7 | 0x27,
+ 33809 - 19968: jis0212<<14 | 0x37<<7 | 0x28,
+ 33811 - 19968: jis0208<<14 | 0x47<<7 | 0x1F,
+ 33813 - 19968: jis0212<<14 | 0x37<<7 | 0x29,
+ 33817 - 19968: jis0212<<14 | 0x37<<7 | 0x2A,
+ 33824 - 19968: jis0208<<14 | 0x47<<7 | 0x2D,
+ 33826 - 19968: jis0208<<14 | 0x47<<7 | 0x2C,
+ 33833 - 19968: jis0208<<14 | 0x26<<7 | 0x4A,
+ 33834 - 19968: jis0208<<14 | 0x47<<7 | 0x33,
+ 33836 - 19968: jis0208<<14 | 0x47<<7 | 0x3E,
+ 33839 - 19968: jis0212<<14 | 0x37<<7 | 0x2C,
+ 33841 - 19968: jis0208<<14 | 0x12<<7 | 0x5D,
+ 33845 - 19968: jis0208<<14 | 0x47<<7 | 0x41,
+ 33848 - 19968: jis0208<<14 | 0x47<<7 | 0x2F,
+ 33849 - 19968: jis0212<<14 | 0x37<<7 | 0x2D,
+ 33852 - 19968: jis0208<<14 | 0x47<<7 | 0x34,
+ 33853 - 19968: jis0208<<14 | 0x2C<<7 | 0x4D,
+ 33861 - 19968: jis0212<<14 | 0x37<<7 | 0x2E,
+ 33862 - 19968: jis0208<<14 | 0x47<<7 | 0x3D,
+ 33863 - 19968: jis0212<<14 | 0x37<<7 | 0x2F,
+ 33864 - 19968: jis0208<<14 | 0x5A<<7 | 0x3B,
+ 33865 - 19968: jis0208<<14 | 0x2C<<7 | 0x34,
+ 33866 - 19968: jis0212<<14 | 0x37<<7 | 0x31,
+ 33869 - 19968: jis0212<<14 | 0x37<<7 | 0x32,
+ 33870 - 19968: jis0208<<14 | 0x2D<<7 | 0x09,
+ 33871 - 19968: jis0212<<14 | 0x37<<7 | 0x33,
+ 33873 - 19968: jis0212<<14 | 0x37<<7 | 0x34,
+ 33874 - 19968: jis0212<<14 | 0x37<<7 | 0x35,
+ 33878 - 19968: jis0212<<14 | 0x37<<7 | 0x36,
+ 33879 - 19968: jis0208<<14 | 0x22<<7 | 0x57,
+ 33880 - 19968: jis0212<<14 | 0x37<<7 | 0x37,
+ 33881 - 19968: jis0212<<14 | 0x37<<7 | 0x38,
+ 33882 - 19968: jis0212<<14 | 0x37<<7 | 0x39,
+ 33883 - 19968: jis0208<<14 | 0x12<<7 | 0x4A,
+ 33884 - 19968: jis0212<<14 | 0x37<<7 | 0x3A,
+ 33888 - 19968: jis0212<<14 | 0x37<<7 | 0x3B,
+ 33889 - 19968: jis0208<<14 | 0x28<<7 | 0x51,
+ 33890 - 19968: jis0208<<14 | 0x47<<7 | 0x43,
+ 33891 - 19968: jis0208<<14 | 0x25<<7 | 0x00,
+ 33892 - 19968: jis0212<<14 | 0x37<<7 | 0x3C,
+ 33893 - 19968: jis0212<<14 | 0x37<<7 | 0x3D,
+ 33894 - 19968: jis0208<<14 | 0x0F<<7 | 0x10,
+ 33895 - 19968: jis0212<<14 | 0x37<<7 | 0x3E,
+ 33897 - 19968: jis0208<<14 | 0x47<<7 | 0x3C,
+ 33898 - 19968: jis0212<<14 | 0x37<<7 | 0x3F,
+ 33899 - 19968: jis0208<<14 | 0x47<<7 | 0x38,
+ 33900 - 19968: jis0208<<14 | 0x20<<7 | 0x51,
+ 33901 - 19968: jis0208<<14 | 0x47<<7 | 0x32,
+ 33902 - 19968: jis0208<<14 | 0x47<<7 | 0x3A,
+ 33903 - 19968: jis0208<<14 | 0x47<<7 | 0x3F,
+ 33904 - 19968: jis0212<<14 | 0x37<<7 | 0x40,
+ 33905 - 19968: jis0208<<14 | 0x26<<7 | 0x0B,
+ 33907 - 19968: jis0212<<14 | 0x37<<7 | 0x41,
+ 33908 - 19968: jis0212<<14 | 0x37<<7 | 0x42,
+ 33909 - 19968: jis0208<<14 | 0x0F<<7 | 0x09,
+ 33910 - 19968: jis0212<<14 | 0x37<<7 | 0x43,
+ 33911 - 19968: jis0208<<14 | 0x47<<7 | 0x37,
+ 33912 - 19968: jis0212<<14 | 0x37<<7 | 0x44,
+ 33913 - 19968: jis0208<<14 | 0x47<<7 | 0x40,
+ 33914 - 19968: jis0208<<14 | 0x28<<7 | 0x57,
+ 33916 - 19968: jis0212<<14 | 0x37<<7 | 0x45,
+ 33917 - 19968: jis0212<<14 | 0x37<<7 | 0x46,
+ 33921 - 19968: jis0212<<14 | 0x37<<7 | 0x47,
+ 33922 - 19968: jis0208<<14 | 0x47<<7 | 0x3B,
+ 33924 - 19968: jis0208<<14 | 0x47<<7 | 0x36,
+ 33925 - 19968: jis0212<<14 | 0x37<<7 | 0x48,
+ 33931 - 19968: jis0208<<14 | 0x1D<<7 | 0x34,
+ 33936 - 19968: jis0208<<14 | 0x1C<<7 | 0x0E,
+ 33938 - 19968: jis0212<<14 | 0x37<<7 | 0x49,
+ 33939 - 19968: jis0212<<14 | 0x37<<7 | 0x4A,
+ 33940 - 19968: jis0208<<14 | 0x1B<<7 | 0x0B,
+ 33941 - 19968: jis0212<<14 | 0x37<<7 | 0x4B,
+ 33945 - 19968: jis0208<<14 | 0x2B<<7 | 0x37,
+ 33948 - 19968: jis0208<<14 | 0x28<<7 | 0x26,
+ 33950 - 19968: jis0212<<14 | 0x37<<7 | 0x4C,
+ 33951 - 19968: jis0208<<14 | 0x47<<7 | 0x46,
+ 33953 - 19968: jis0208<<14 | 0x47<<7 | 0x4F,
+ 33958 - 19968: jis0212<<14 | 0x37<<7 | 0x4D,
+ 33960 - 19968: jis0212<<14 | 0x37<<7 | 0x4E,
+ 33961 - 19968: jis0212<<14 | 0x37<<7 | 0x4F,
+ 33962 - 19968: jis0212<<14 | 0x37<<7 | 0x50,
+ 33965 - 19968: jis0208<<14 | 0x47<<7 | 0x39,
+ 33967 - 19968: jis0212<<14 | 0x37<<7 | 0x51,
+ 33969 - 19968: jis0212<<14 | 0x37<<7 | 0x52,
+ 33970 - 19968: jis0208<<14 | 0x12<<7 | 0x56,
+ 33972 - 19968: jis0208<<14 | 0x5A<<7 | 0x3C,
+ 33976 - 19968: jis0208<<14 | 0x1D<<7 | 0x57,
+ 33977 - 19968: jis0208<<14 | 0x47<<7 | 0x44,
+ 33978 - 19968: jis0212<<14 | 0x37<<7 | 0x54,
+ 33979 - 19968: jis0208<<14 | 0x47<<7 | 0x49,
+ 33980 - 19968: jis0208<<14 | 0x20<<7 | 0x52,
+ 33981 - 19968: jis0212<<14 | 0x37<<7 | 0x55,
+ 33982 - 19968: jis0212<<14 | 0x37<<7 | 0x56,
+ 33983 - 19968: jis0208<<14 | 0x47<<7 | 0x45,
+ 33984 - 19968: jis0212<<14 | 0x37<<7 | 0x57,
+ 33985 - 19968: jis0208<<14 | 0x47<<7 | 0x4C,
+ 33986 - 19968: jis0212<<14 | 0x37<<7 | 0x58,
+ 33988 - 19968: jis0208<<14 | 0x22<<7 | 0x3E,
+ 33990 - 19968: jis0208<<14 | 0x47<<7 | 0x4D,
+ 33991 - 19968: jis0212<<14 | 0x37<<7 | 0x59,
+ 33992 - 19968: jis0212<<14 | 0x37<<7 | 0x5A,
+ 33993 - 19968: jis0208<<14 | 0x2C<<7 | 0x35,
+ 33994 - 19968: jis0208<<14 | 0x47<<7 | 0x42,
+ 33995 - 19968: jis0208<<14 | 0x12<<7 | 0x17,
+ 33996 - 19968: jis0212<<14 | 0x37<<7 | 0x5B,
+ 33997 - 19968: jis0208<<14 | 0x47<<7 | 0x48,
+ 33999 - 19968: jis0212<<14 | 0x37<<7 | 0x5C,
+ 34000 - 19968: jis0208<<14 | 0x47<<7 | 0x4B,
+ 34001 - 19968: jis0208<<14 | 0x2B<<7 | 0x0B,
+ 34003 - 19968: jis0212<<14 | 0x37<<7 | 0x5D,
+ 34006 - 19968: jis0208<<14 | 0x47<<7 | 0x4E,
+ 34009 - 19968: jis0208<<14 | 0x47<<7 | 0x47,
+ 34010 - 19968: jis0208<<14 | 0x47<<7 | 0x4A,
+ 34012 - 19968: jis0208<<14 | 0x58<<7 | 0x04,
+ 34023 - 19968: jis0212<<14 | 0x38<<7 | 0x01,
+ 34026 - 19968: jis0212<<14 | 0x38<<7 | 0x02,
+ 34028 - 19968: jis0208<<14 | 0x2A<<7 | 0x08,
+ 34030 - 19968: jis0208<<14 | 0x2E<<7 | 0x00,
+ 34031 - 19968: jis0212<<14 | 0x38<<7 | 0x03,
+ 34032 - 19968: jis0212<<14 | 0x38<<7 | 0x04,
+ 34033 - 19968: jis0212<<14 | 0x38<<7 | 0x05,
+ 34034 - 19968: jis0212<<14 | 0x38<<7 | 0x06,
+ 34036 - 19968: jis0208<<14 | 0x47<<7 | 0x52,
+ 34039 - 19968: jis0212<<14 | 0x38<<7 | 0x07,
+ 34042 - 19968: jis0212<<14 | 0x38<<7 | 0x09,
+ 34043 - 19968: jis0212<<14 | 0x38<<7 | 0x0A,
+ 34044 - 19968: jis0208<<14 | 0x47<<7 | 0x59,
+ 34045 - 19968: jis0212<<14 | 0x38<<7 | 0x0B,
+ 34047 - 19968: jis0208<<14 | 0x47<<7 | 0x51,
+ 34048 - 19968: jis0208<<14 | 0x1B<<7 | 0x22,
+ 34050 - 19968: jis0212<<14 | 0x38<<7 | 0x0C,
+ 34051 - 19968: jis0212<<14 | 0x38<<7 | 0x0D,
+ 34054 - 19968: jis0208<<14 | 0x47<<7 | 0x30,
+ 34055 - 19968: jis0212<<14 | 0x38<<7 | 0x0E,
+ 34060 - 19968: jis0212<<14 | 0x38<<7 | 0x0F,
+ 34062 - 19968: jis0212<<14 | 0x38<<7 | 0x10,
+ 34064 - 19968: jis0212<<14 | 0x38<<7 | 0x11,
+ 34065 - 19968: jis0208<<14 | 0x29<<7 | 0x2D,
+ 34067 - 19968: jis0208<<14 | 0x2B<<7 | 0x01,
+ 34068 - 19968: jis0208<<14 | 0x47<<7 | 0x58,
+ 34069 - 19968: jis0208<<14 | 0x47<<7 | 0x57,
+ 34071 - 19968: jis0208<<14 | 0x47<<7 | 0x53,
+ 34072 - 19968: jis0208<<14 | 0x47<<7 | 0x54,
+ 34074 - 19968: jis0208<<14 | 0x10<<7 | 0x15,
+ 34076 - 19968: jis0212<<14 | 0x38<<7 | 0x12,
+ 34078 - 19968: jis0212<<14 | 0x38<<7 | 0x13,
+ 34079 - 19968: jis0208<<14 | 0x47<<7 | 0x56,
+ 34081 - 19968: jis0208<<14 | 0x47<<7 | 0x50,
+ 34082 - 19968: jis0212<<14 | 0x38<<7 | 0x14,
+ 34083 - 19968: jis0212<<14 | 0x38<<7 | 0x15,
+ 34084 - 19968: jis0212<<14 | 0x38<<7 | 0x16,
+ 34085 - 19968: jis0212<<14 | 0x38<<7 | 0x17,
+ 34086 - 19968: jis0208<<14 | 0x23<<7 | 0x34,
+ 34087 - 19968: jis0212<<14 | 0x38<<7 | 0x18,
+ 34090 - 19968: jis0212<<14 | 0x38<<7 | 0x19,
+ 34091 - 19968: jis0212<<14 | 0x38<<7 | 0x1A,
+ 34092 - 19968: jis0208<<14 | 0x47<<7 | 0x55,
+ 34093 - 19968: jis0208<<14 | 0x0F<<7 | 0x5D,
+ 34095 - 19968: jis0212<<14 | 0x38<<7 | 0x1B,
+ 34098 - 19968: jis0212<<14 | 0x38<<7 | 0x08,
+ 34099 - 19968: jis0212<<14 | 0x38<<7 | 0x1C,
+ 34100 - 19968: jis0212<<14 | 0x38<<7 | 0x1D,
+ 34101 - 19968: jis0208<<14 | 0x21<<7 | 0x01,
+ 34102 - 19968: jis0212<<14 | 0x38<<7 | 0x1E,
+ 34109 - 19968: jis0208<<14 | 0x29<<7 | 0x22,
+ 34111 - 19968: jis0212<<14 | 0x38<<7 | 0x1F,
+ 34112 - 19968: jis0208<<14 | 0x47<<7 | 0x5A,
+ 34113 - 19968: jis0208<<14 | 0x48<<7 | 0x00,
+ 34115 - 19968: jis0208<<14 | 0x27<<7 | 0x38,
+ 34118 - 19968: jis0212<<14 | 0x38<<7 | 0x20,
+ 34120 - 19968: jis0208<<14 | 0x47<<7 | 0x5D,
+ 34121 - 19968: jis0208<<14 | 0x1D<<7 | 0x35,
+ 34122 - 19968: jis0208<<14 | 0x1B<<7 | 0x28,
+ 34123 - 19968: jis0208<<14 | 0x48<<7 | 0x02,
+ 34126 - 19968: jis0208<<14 | 0x15<<7 | 0x1D,
+ 34127 - 19968: jis0212<<14 | 0x38<<7 | 0x21,
+ 34128 - 19968: jis0212<<14 | 0x38<<7 | 0x22,
+ 34129 - 19968: jis0212<<14 | 0x38<<7 | 0x23,
+ 34130 - 19968: jis0212<<14 | 0x38<<7 | 0x24,
+ 34131 - 19968: jis0208<<14 | 0x5A<<7 | 0x3D,
+ 34133 - 19968: jis0208<<14 | 0x48<<7 | 0x03,
+ 34134 - 19968: jis0212<<14 | 0x38<<7 | 0x26,
+ 34135 - 19968: jis0208<<14 | 0x28<<7 | 0x58,
+ 34136 - 19968: jis0208<<14 | 0x47<<7 | 0x5C,
+ 34137 - 19968: jis0208<<14 | 0x5A<<7 | 0x3E,
+ 34138 - 19968: jis0208<<14 | 0x47<<7 | 0x35,
+ 34140 - 19968: jis0212<<14 | 0x38<<7 | 0x28,
+ 34141 - 19968: jis0212<<14 | 0x38<<7 | 0x29,
+ 34142 - 19968: jis0212<<14 | 0x38<<7 | 0x2A,
+ 34143 - 19968: jis0212<<14 | 0x38<<7 | 0x2B,
+ 34144 - 19968: jis0212<<14 | 0x38<<7 | 0x2C,
+ 34145 - 19968: jis0212<<14 | 0x38<<7 | 0x2D,
+ 34146 - 19968: jis0212<<14 | 0x38<<7 | 0x2E,
+ 34147 - 19968: jis0208<<14 | 0x47<<7 | 0x5B,
+ 34148 - 19968: jis0212<<14 | 0x38<<7 | 0x2F,
+ 34152 - 19968: jis0208<<14 | 0x2E<<7 | 0x2E,
+ 34153 - 19968: jis0208<<14 | 0x25<<7 | 0x01,
+ 34154 - 19968: jis0208<<14 | 0x28<<7 | 0x52,
+ 34155 - 19968: jis0208<<14 | 0x5A<<7 | 0x3F,
+ 34157 - 19968: jis0208<<14 | 0x48<<7 | 0x0A,
+ 34159 - 19968: jis0212<<14 | 0x38<<7 | 0x31,
+ 34167 - 19968: jis0208<<14 | 0x48<<7 | 0x10,
+ 34169 - 19968: jis0212<<14 | 0x38<<7 | 0x32,
+ 34170 - 19968: jis0212<<14 | 0x38<<7 | 0x33,
+ 34171 - 19968: jis0212<<14 | 0x38<<7 | 0x34,
+ 34173 - 19968: jis0212<<14 | 0x38<<7 | 0x35,
+ 34174 - 19968: jis0208<<14 | 0x48<<7 | 0x11,
+ 34175 - 19968: jis0212<<14 | 0x38<<7 | 0x36,
+ 34176 - 19968: jis0208<<14 | 0x48<<7 | 0x04,
+ 34177 - 19968: jis0212<<14 | 0x38<<7 | 0x37,
+ 34180 - 19968: jis0208<<14 | 0x26<<7 | 0x55,
+ 34181 - 19968: jis0212<<14 | 0x38<<7 | 0x38,
+ 34182 - 19968: jis0212<<14 | 0x38<<7 | 0x39,
+ 34183 - 19968: jis0208<<14 | 0x48<<7 | 0x0E,
+ 34184 - 19968: jis0208<<14 | 0x48<<7 | 0x06,
+ 34185 - 19968: jis0212<<14 | 0x38<<7 | 0x3A,
+ 34186 - 19968: jis0208<<14 | 0x48<<7 | 0x08,
+ 34187 - 19968: jis0212<<14 | 0x38<<7 | 0x3B,
+ 34188 - 19968: jis0212<<14 | 0x38<<7 | 0x3C,
+ 34191 - 19968: jis0212<<14 | 0x38<<7 | 0x3D,
+ 34192 - 19968: jis0208<<14 | 0x48<<7 | 0x12,
+ 34193 - 19968: jis0208<<14 | 0x48<<7 | 0x07,
+ 34195 - 19968: jis0212<<14 | 0x38<<7 | 0x3E,
+ 34196 - 19968: jis0208<<14 | 0x48<<7 | 0x0B,
+ 34199 - 19968: jis0208<<14 | 0x10<<7 | 0x51,
+ 34200 - 19968: jis0212<<14 | 0x38<<7 | 0x3F,
+ 34201 - 19968: jis0208<<14 | 0x25<<7 | 0x44,
+ 34203 - 19968: jis0208<<14 | 0x48<<7 | 0x0C,
+ 34204 - 19968: jis0208<<14 | 0x48<<7 | 0x0F,
+ 34205 - 19968: jis0212<<14 | 0x38<<7 | 0x40,
+ 34207 - 19968: jis0212<<14 | 0x38<<7 | 0x41,
+ 34208 - 19968: jis0212<<14 | 0x38<<7 | 0x42,
+ 34210 - 19968: jis0212<<14 | 0x38<<7 | 0x43,
+ 34212 - 19968: jis0208<<14 | 0x48<<7 | 0x05,
+ 34213 - 19968: jis0212<<14 | 0x38<<7 | 0x44,
+ 34214 - 19968: jis0208<<14 | 0x20<<7 | 0x05,
+ 34215 - 19968: jis0212<<14 | 0x38<<7 | 0x45,
+ 34216 - 19968: jis0208<<14 | 0x48<<7 | 0x09,
+ 34217 - 19968: jis0208<<14 | 0x1A<<7 | 0x06,
+ 34218 - 19968: jis0208<<14 | 0x1E<<7 | 0x24,
+ 34219 - 19968: jis0208<<14 | 0x16<<7 | 0x0F,
+ 34220 - 19968: jis0208<<14 | 0x2B<<7 | 0x53,
+ 34221 - 19968: jis0212<<14 | 0x38<<7 | 0x53,
+ 34222 - 19968: jis0208<<14 | 0x2B<<7 | 0x58,
+ 34223 - 19968: jis0208<<14 | 0x1C<<7 | 0x51,
+ 34224 - 19968: jis0208<<14 | 0x5A<<7 | 0x41,
+ 34228 - 19968: jis0212<<14 | 0x38<<7 | 0x46,
+ 34230 - 19968: jis0212<<14 | 0x38<<7 | 0x47,
+ 34231 - 19968: jis0212<<14 | 0x38<<7 | 0x48,
+ 34232 - 19968: jis0212<<14 | 0x38<<7 | 0x49,
+ 34233 - 19968: jis0208<<14 | 0x48<<7 | 0x16,
+ 34234 - 19968: jis0208<<14 | 0x48<<7 | 0x14,
+ 34236 - 19968: jis0212<<14 | 0x38<<7 | 0x4A,
+ 34237 - 19968: jis0212<<14 | 0x38<<7 | 0x4B,
+ 34238 - 19968: jis0212<<14 | 0x38<<7 | 0x4C,
+ 34239 - 19968: jis0212<<14 | 0x38<<7 | 0x4D,
+ 34241 - 19968: jis0208<<14 | 0x2E<<7 | 0x2D,
+ 34242 - 19968: jis0212<<14 | 0x38<<7 | 0x4E,
+ 34247 - 19968: jis0212<<14 | 0x38<<7 | 0x4F,
+ 34249 - 19968: jis0208<<14 | 0x48<<7 | 0x13,
+ 34250 - 19968: jis0212<<14 | 0x38<<7 | 0x50,
+ 34251 - 19968: jis0212<<14 | 0x38<<7 | 0x51,
+ 34253 - 19968: jis0208<<14 | 0x2C<<7 | 0x54,
+ 34254 - 19968: jis0212<<14 | 0x38<<7 | 0x52,
+ 34255 - 19968: jis0208<<14 | 0x48<<7 | 0x15,
+ 34256 - 19968: jis0208<<14 | 0x48<<7 | 0x17,
+ 34261 - 19968: jis0208<<14 | 0x48<<7 | 0x18,
+ 34264 - 19968: jis0212<<14 | 0x38<<7 | 0x54,
+ 34266 - 19968: jis0212<<14 | 0x38<<7 | 0x55,
+ 34268 - 19968: jis0208<<14 | 0x48<<7 | 0x1B,
+ 34269 - 19968: jis0208<<14 | 0x48<<7 | 0x19,
+ 34271 - 19968: jis0212<<14 | 0x38<<7 | 0x56,
+ 34272 - 19968: jis0212<<14 | 0x38<<7 | 0x57,
+ 34276 - 19968: jis0208<<14 | 0x25<<7 | 0x02,
+ 34277 - 19968: jis0208<<14 | 0x48<<7 | 0x1A,
+ 34278 - 19968: jis0212<<14 | 0x38<<7 | 0x58,
+ 34280 - 19968: jis0212<<14 | 0x38<<7 | 0x59,
+ 34281 - 19968: jis0208<<14 | 0x27<<7 | 0x2C,
+ 34282 - 19968: jis0208<<14 | 0x48<<7 | 0x0D,
+ 34285 - 19968: jis0212<<14 | 0x38<<7 | 0x5A,
+ 34291 - 19968: jis0212<<14 | 0x38<<7 | 0x5B,
+ 34294 - 19968: jis0212<<14 | 0x38<<7 | 0x5C,
+ 34295 - 19968: jis0208<<14 | 0x1C<<7 | 0x52,
+ 34297 - 19968: jis0208<<14 | 0x48<<7 | 0x1C,
+ 34298 - 19968: jis0208<<14 | 0x48<<7 | 0x21,
+ 34299 - 19968: jis0208<<14 | 0x20<<7 | 0x53,
+ 34300 - 19968: jis0212<<14 | 0x38<<7 | 0x5D,
+ 34302 - 19968: jis0208<<14 | 0x48<<7 | 0x20,
+ 34303 - 19968: jis0212<<14 | 0x39<<7 | 0x00,
+ 34304 - 19968: jis0212<<14 | 0x39<<7 | 0x01,
+ 34306 - 19968: jis0208<<14 | 0x48<<7 | 0x01,
+ 34308 - 19968: jis0212<<14 | 0x39<<7 | 0x02,
+ 34309 - 19968: jis0212<<14 | 0x39<<7 | 0x03,
+ 34310 - 19968: jis0208<<14 | 0x48<<7 | 0x22,
+ 34311 - 19968: jis0208<<14 | 0x20<<7 | 0x28,
+ 34314 - 19968: jis0208<<14 | 0x48<<7 | 0x1D,
+ 34315 - 19968: jis0208<<14 | 0x48<<7 | 0x1F,
+ 34317 - 19968: jis0212<<14 | 0x39<<7 | 0x04,
+ 34318 - 19968: jis0212<<14 | 0x39<<7 | 0x05,
+ 34320 - 19968: jis0212<<14 | 0x39<<7 | 0x06,
+ 34321 - 19968: jis0212<<14 | 0x39<<7 | 0x07,
+ 34322 - 19968: jis0212<<14 | 0x39<<7 | 0x08,
+ 34323 - 19968: jis0208<<14 | 0x48<<7 | 0x1E,
+ 34326 - 19968: jis0208<<14 | 0x3C<<7 | 0x10,
+ 34327 - 19968: jis0208<<14 | 0x3C<<7 | 0x01,
+ 34328 - 19968: jis0212<<14 | 0x39<<7 | 0x09,
+ 34329 - 19968: jis0212<<14 | 0x39<<7 | 0x0A,
+ 34330 - 19968: jis0208<<14 | 0x48<<7 | 0x24,
+ 34331 - 19968: jis0212<<14 | 0x39<<7 | 0x0B,
+ 34334 - 19968: jis0212<<14 | 0x39<<7 | 0x0C,
+ 34337 - 19968: jis0212<<14 | 0x39<<7 | 0x0D,
+ 34338 - 19968: jis0208<<14 | 0x48<<7 | 0x23,
+ 34343 - 19968: jis0212<<14 | 0x39<<7 | 0x0E,
+ 34345 - 19968: jis0212<<14 | 0x39<<7 | 0x0F,
+ 34349 - 19968: jis0208<<14 | 0x2C<<7 | 0x55,
+ 34351 - 19968: jis0208<<14 | 0x41<<7 | 0x1B,
+ 34352 - 19968: jis0208<<14 | 0x48<<7 | 0x25,
+ 34358 - 19968: jis0212<<14 | 0x39<<7 | 0x10,
+ 34360 - 19968: jis0212<<14 | 0x39<<7 | 0x11,
+ 34362 - 19968: jis0212<<14 | 0x39<<7 | 0x12,
+ 34364 - 19968: jis0212<<14 | 0x39<<7 | 0x13,
+ 34365 - 19968: jis0212<<14 | 0x39<<7 | 0x14,
+ 34367 - 19968: jis0208<<14 | 0x48<<7 | 0x26,
+ 34368 - 19968: jis0212<<14 | 0x39<<7 | 0x15,
+ 34369 - 19968: jis0212<<14 | 0x17<<7 | 0x45,
+ 34370 - 19968: jis0212<<14 | 0x39<<7 | 0x16,
+ 34374 - 19968: jis0212<<14 | 0x39<<7 | 0x17,
+ 34381 - 19968: jis0208<<14 | 0x48<<7 | 0x27,
+ 34382 - 19968: jis0208<<14 | 0x17<<7 | 0x36,
+ 34384 - 19968: jis0208<<14 | 0x14<<7 | 0x33,
+ 34386 - 19968: jis0212<<14 | 0x39<<7 | 0x18,
+ 34387 - 19968: jis0212<<14 | 0x39<<7 | 0x19,
+ 34388 - 19968: jis0208<<14 | 0x48<<7 | 0x29,
+ 34389 - 19968: jis0208<<14 | 0x30<<7 | 0x3C,
+ 34390 - 19968: jis0212<<14 | 0x39<<7 | 0x1A,
+ 34391 - 19968: jis0212<<14 | 0x39<<7 | 0x1B,
+ 34392 - 19968: jis0212<<14 | 0x39<<7 | 0x1C,
+ 34393 - 19968: jis0212<<14 | 0x39<<7 | 0x1D,
+ 34394 - 19968: jis0208<<14 | 0x14<<7 | 0x54,
+ 34396 - 19968: jis0208<<14 | 0x2D<<7 | 0x19,
+ 34397 - 19968: jis0212<<14 | 0x39<<7 | 0x1E,
+ 34398 - 19968: jis0208<<14 | 0x15<<7 | 0x52,
+ 34399 - 19968: jis0208<<14 | 0x48<<7 | 0x2A,
+ 34400 - 19968: jis0212<<14 | 0x39<<7 | 0x1F,
+ 34401 - 19968: jis0212<<14 | 0x39<<7 | 0x20,
+ 34402 - 19968: jis0212<<14 | 0x39<<7 | 0x21,
+ 34403 - 19968: jis0212<<14 | 0x39<<7 | 0x22,
+ 34404 - 19968: jis0212<<14 | 0x39<<7 | 0x23,
+ 34407 - 19968: jis0208<<14 | 0x48<<7 | 0x2B,
+ 34409 - 19968: jis0212<<14 | 0x39<<7 | 0x24,
+ 34411 - 19968: jis0208<<14 | 0x22<<7 | 0x4D,
+ 34412 - 19968: jis0212<<14 | 0x39<<7 | 0x25,
+ 34415 - 19968: jis0212<<14 | 0x39<<7 | 0x26,
+ 34417 - 19968: jis0208<<14 | 0x48<<7 | 0x2C,
+ 34421 - 19968: jis0212<<14 | 0x39<<7 | 0x27,
+ 34422 - 19968: jis0212<<14 | 0x39<<7 | 0x28,
+ 34423 - 19968: jis0212<<14 | 0x39<<7 | 0x29,
+ 34425 - 19968: jis0208<<14 | 0x25<<7 | 0x59,
+ 34426 - 19968: jis0212<<14 | 0x39<<7 | 0x2A,
+ 34427 - 19968: jis0208<<14 | 0x0F<<7 | 0x19,
+ 34440 - 19968: jis0212<<14 | 0x39<<7 | 0x4C,
+ 34442 - 19968: jis0208<<14 | 0x11<<7 | 0x42,
+ 34443 - 19968: jis0208<<14 | 0x48<<7 | 0x31,
+ 34444 - 19968: jis0208<<14 | 0x48<<7 | 0x32,
+ 34445 - 19968: jis0212<<14 | 0x39<<7 | 0x2B,
+ 34449 - 19968: jis0212<<14 | 0x39<<7 | 0x2C,
+ 34451 - 19968: jis0208<<14 | 0x48<<7 | 0x2D,
+ 34453 - 19968: jis0208<<14 | 0x1A<<7 | 0x1C,
+ 34454 - 19968: jis0212<<14 | 0x39<<7 | 0x2D,
+ 34456 - 19968: jis0212<<14 | 0x39<<7 | 0x2E,
+ 34458 - 19968: jis0212<<14 | 0x39<<7 | 0x2F,
+ 34460 - 19968: jis0212<<14 | 0x39<<7 | 0x30,
+ 34465 - 19968: jis0212<<14 | 0x39<<7 | 0x31,
+ 34467 - 19968: jis0208<<14 | 0x48<<7 | 0x2E,
+ 34468 - 19968: jis0208<<14 | 0x26<<7 | 0x21,
+ 34470 - 19968: jis0212<<14 | 0x39<<7 | 0x32,
+ 34471 - 19968: jis0212<<14 | 0x39<<7 | 0x33,
+ 34472 - 19968: jis0212<<14 | 0x39<<7 | 0x34,
+ 34473 - 19968: jis0208<<14 | 0x48<<7 | 0x2F,
+ 34474 - 19968: jis0208<<14 | 0x48<<7 | 0x30,
+ 34475 - 19968: jis0208<<14 | 0x48<<7 | 0x3A,
+ 34477 - 19968: jis0212<<14 | 0x39<<7 | 0x35,
+ 34479 - 19968: jis0208<<14 | 0x48<<7 | 0x34,
+ 34480 - 19968: jis0208<<14 | 0x48<<7 | 0x37,
+ 34481 - 19968: jis0212<<14 | 0x39<<7 | 0x36,
+ 34483 - 19968: jis0212<<14 | 0x39<<7 | 0x37,
+ 34484 - 19968: jis0212<<14 | 0x39<<7 | 0x38,
+ 34485 - 19968: jis0212<<14 | 0x39<<7 | 0x39,
+ 34486 - 19968: jis0208<<14 | 0x48<<7 | 0x33,
+ 34487 - 19968: jis0212<<14 | 0x39<<7 | 0x3A,
+ 34488 - 19968: jis0212<<14 | 0x39<<7 | 0x3B,
+ 34489 - 19968: jis0212<<14 | 0x39<<7 | 0x3C,
+ 34495 - 19968: jis0212<<14 | 0x39<<7 | 0x3D,
+ 34496 - 19968: jis0212<<14 | 0x39<<7 | 0x3E,
+ 34497 - 19968: jis0212<<14 | 0x39<<7 | 0x3F,
+ 34499 - 19968: jis0212<<14 | 0x39<<7 | 0x40,
+ 34500 - 19968: jis0208<<14 | 0x48<<7 | 0x35,
+ 34501 - 19968: jis0212<<14 | 0x39<<7 | 0x41,
+ 34502 - 19968: jis0208<<14 | 0x48<<7 | 0x36,
+ 34503 - 19968: jis0208<<14 | 0x1B<<7 | 0x37,
+ 34505 - 19968: jis0208<<14 | 0x48<<7 | 0x38,
+ 34507 - 19968: jis0208<<14 | 0x22<<7 | 0x20,
+ 34509 - 19968: jis0208<<14 | 0x16<<7 | 0x35,
+ 34510 - 19968: jis0208<<14 | 0x12<<7 | 0x21,
+ 34513 - 19968: jis0212<<14 | 0x39<<7 | 0x42,
+ 34514 - 19968: jis0212<<14 | 0x39<<7 | 0x43,
+ 34516 - 19968: jis0208<<14 | 0x48<<7 | 0x3B,
+ 34517 - 19968: jis0212<<14 | 0x39<<7 | 0x44,
+ 34519 - 19968: jis0212<<14 | 0x39<<7 | 0x45,
+ 34521 - 19968: jis0208<<14 | 0x12<<7 | 0x1E,
+ 34522 - 19968: jis0212<<14 | 0x39<<7 | 0x46,
+ 34523 - 19968: jis0208<<14 | 0x48<<7 | 0x40,
+ 34524 - 19968: jis0212<<14 | 0x39<<7 | 0x47,
+ 34526 - 19968: jis0208<<14 | 0x48<<7 | 0x3C,
+ 34527 - 19968: jis0208<<14 | 0x48<<7 | 0x3F,
+ 34528 - 19968: jis0212<<14 | 0x39<<7 | 0x48,
+ 34531 - 19968: jis0212<<14 | 0x39<<7 | 0x49,
+ 34532 - 19968: jis0208<<14 | 0x27<<7 | 0x19,
+ 34533 - 19968: jis0212<<14 | 0x39<<7 | 0x4A,
+ 34535 - 19968: jis0212<<14 | 0x39<<7 | 0x4B,
+ 34537 - 19968: jis0208<<14 | 0x48<<7 | 0x3D,
+ 34540 - 19968: jis0208<<14 | 0x48<<7 | 0x3E,
+ 34541 - 19968: jis0208<<14 | 0x28<<7 | 0x27,
+ 34542 - 19968: jis0208<<14 | 0x27<<7 | 0x39,
+ 34543 - 19968: jis0208<<14 | 0x48<<7 | 0x41,
+ 34552 - 19968: jis0208<<14 | 0x21<<7 | 0x5C,
+ 34553 - 19968: jis0208<<14 | 0x48<<7 | 0x4B,
+ 34554 - 19968: jis0212<<14 | 0x39<<7 | 0x4D,
+ 34555 - 19968: jis0208<<14 | 0x48<<7 | 0x47,
+ 34556 - 19968: jis0212<<14 | 0x39<<7 | 0x4E,
+ 34557 - 19968: jis0212<<14 | 0x39<<7 | 0x4F,
+ 34558 - 19968: jis0208<<14 | 0x11<<7 | 0x4A,
+ 34560 - 19968: jis0208<<14 | 0x48<<7 | 0x45,
+ 34562 - 19968: jis0208<<14 | 0x2A<<7 | 0x09,
+ 34563 - 19968: jis0208<<14 | 0x48<<7 | 0x46,
+ 34564 - 19968: jis0212<<14 | 0x39<<7 | 0x50,
+ 34565 - 19968: jis0212<<14 | 0x39<<7 | 0x51,
+ 34566 - 19968: jis0208<<14 | 0x48<<7 | 0x43,
+ 34567 - 19968: jis0212<<14 | 0x39<<7 | 0x52,
+ 34568 - 19968: jis0208<<14 | 0x48<<7 | 0x44,
+ 34569 - 19968: jis0208<<14 | 0x48<<7 | 0x49,
+ 34570 - 19968: jis0208<<14 | 0x48<<7 | 0x4C,
+ 34571 - 19968: jis0212<<14 | 0x39<<7 | 0x53,
+ 34573 - 19968: jis0208<<14 | 0x48<<7 | 0x4A,
+ 34574 - 19968: jis0212<<14 | 0x39<<7 | 0x54,
+ 34575 - 19968: jis0212<<14 | 0x39<<7 | 0x55,
+ 34576 - 19968: jis0212<<14 | 0x39<<7 | 0x56,
+ 34577 - 19968: jis0208<<14 | 0x48<<7 | 0x48,
+ 34578 - 19968: jis0208<<14 | 0x48<<7 | 0x42,
+ 34579 - 19968: jis0212<<14 | 0x39<<7 | 0x57,
+ 34580 - 19968: jis0212<<14 | 0x39<<7 | 0x58,
+ 34584 - 19968: jis0208<<14 | 0x22<<7 | 0x37,
+ 34585 - 19968: jis0212<<14 | 0x39<<7 | 0x59,
+ 34586 - 19968: jis0208<<14 | 0x48<<7 | 0x53,
+ 34588 - 19968: jis0208<<14 | 0x2B<<7 | 0x09,
+ 34590 - 19968: jis0212<<14 | 0x39<<7 | 0x5A,
+ 34591 - 19968: jis0212<<14 | 0x39<<7 | 0x5B,
+ 34593 - 19968: jis0212<<14 | 0x39<<7 | 0x5C,
+ 34595 - 19968: jis0212<<14 | 0x39<<7 | 0x5D,
+ 34597 - 19968: jis0208<<14 | 0x48<<7 | 0x51,
+ 34600 - 19968: jis0212<<14 | 0x3A<<7 | 0x00,
+ 34601 - 19968: jis0208<<14 | 0x48<<7 | 0x52,
+ 34606 - 19968: jis0212<<14 | 0x3A<<7 | 0x01,
+ 34607 - 19968: jis0212<<14 | 0x3A<<7 | 0x02,
+ 34609 - 19968: jis0212<<14 | 0x3A<<7 | 0x03,
+ 34610 - 19968: jis0212<<14 | 0x3A<<7 | 0x04,
+ 34612 - 19968: jis0208<<14 | 0x48<<7 | 0x4D,
+ 34615 - 19968: jis0208<<14 | 0x48<<7 | 0x4F,
+ 34617 - 19968: jis0212<<14 | 0x3A<<7 | 0x05,
+ 34618 - 19968: jis0212<<14 | 0x3A<<7 | 0x06,
+ 34619 - 19968: jis0208<<14 | 0x48<<7 | 0x50,
+ 34620 - 19968: jis0212<<14 | 0x3A<<7 | 0x07,
+ 34621 - 19968: jis0212<<14 | 0x3A<<7 | 0x08,
+ 34622 - 19968: jis0212<<14 | 0x3A<<7 | 0x09,
+ 34623 - 19968: jis0208<<14 | 0x48<<7 | 0x4E,
+ 34624 - 19968: jis0212<<14 | 0x3A<<7 | 0x0A,
+ 34627 - 19968: jis0212<<14 | 0x3A<<7 | 0x0B,
+ 34629 - 19968: jis0212<<14 | 0x3A<<7 | 0x0C,
+ 34633 - 19968: jis0208<<14 | 0x1F<<7 | 0x45,
+ 34635 - 19968: jis0208<<14 | 0x2E<<7 | 0x18,
+ 34636 - 19968: jis0208<<14 | 0x48<<7 | 0x57,
+ 34637 - 19968: jis0212<<14 | 0x3A<<7 | 0x0D,
+ 34638 - 19968: jis0208<<14 | 0x48<<7 | 0x58,
+ 34643 - 19968: jis0208<<14 | 0x49<<7 | 0x00,
+ 34645 - 19968: jis0208<<14 | 0x1E<<7 | 0x09,
+ 34647 - 19968: jis0208<<14 | 0x48<<7 | 0x5A,
+ 34648 - 19968: jis0212<<14 | 0x3A<<7 | 0x0E,
+ 34649 - 19968: jis0208<<14 | 0x48<<7 | 0x5D,
+ 34653 - 19968: jis0212<<14 | 0x3A<<7 | 0x0F,
+ 34655 - 19968: jis0208<<14 | 0x48<<7 | 0x55,
+ 34656 - 19968: jis0208<<14 | 0x48<<7 | 0x54,
+ 34657 - 19968: jis0212<<14 | 0x3A<<7 | 0x10,
+ 34659 - 19968: jis0208<<14 | 0x49<<7 | 0x01,
+ 34660 - 19968: jis0212<<14 | 0x3A<<7 | 0x11,
+ 34661 - 19968: jis0212<<14 | 0x3A<<7 | 0x12,
+ 34662 - 19968: jis0208<<14 | 0x11<<7 | 0x3B,
+ 34664 - 19968: jis0208<<14 | 0x48<<7 | 0x5B,
+ 34666 - 19968: jis0208<<14 | 0x49<<7 | 0x02,
+ 34670 - 19968: jis0208<<14 | 0x48<<7 | 0x5C,
+ 34671 - 19968: jis0212<<14 | 0x3A<<7 | 0x13,
+ 34673 - 19968: jis0212<<14 | 0x3A<<7 | 0x14,
+ 34674 - 19968: jis0212<<14 | 0x3A<<7 | 0x15,
+ 34676 - 19968: jis0208<<14 | 0x48<<7 | 0x59,
+ 34678 - 19968: jis0208<<14 | 0x23<<7 | 0x12,
+ 34680 - 19968: jis0208<<14 | 0x48<<7 | 0x56,
+ 34683 - 19968: jis0212<<14 | 0x3A<<7 | 0x16,
+ 34687 - 19968: jis0208<<14 | 0x26<<7 | 0x47,
+ 34690 - 19968: jis0208<<14 | 0x49<<7 | 0x06,
+ 34691 - 19968: jis0212<<14 | 0x3A<<7 | 0x17,
+ 34692 - 19968: jis0212<<14 | 0x3A<<7 | 0x18,
+ 34693 - 19968: jis0212<<14 | 0x3A<<7 | 0x19,
+ 34694 - 19968: jis0212<<14 | 0x3A<<7 | 0x1A,
+ 34695 - 19968: jis0212<<14 | 0x3A<<7 | 0x1B,
+ 34696 - 19968: jis0212<<14 | 0x3A<<7 | 0x1C,
+ 34697 - 19968: jis0212<<14 | 0x3A<<7 | 0x1D,
+ 34699 - 19968: jis0212<<14 | 0x3A<<7 | 0x1E,
+ 34700 - 19968: jis0212<<14 | 0x3A<<7 | 0x1F,
+ 34701 - 19968: jis0208<<14 | 0x2C<<7 | 0x1A,
+ 34704 - 19968: jis0212<<14 | 0x3A<<7 | 0x20,
+ 34707 - 19968: jis0212<<14 | 0x3A<<7 | 0x21,
+ 34709 - 19968: jis0212<<14 | 0x3A<<7 | 0x22,
+ 34711 - 19968: jis0212<<14 | 0x3A<<7 | 0x23,
+ 34712 - 19968: jis0212<<14 | 0x3A<<7 | 0x24,
+ 34713 - 19968: jis0212<<14 | 0x3A<<7 | 0x25,
+ 34718 - 19968: jis0212<<14 | 0x3A<<7 | 0x26,
+ 34719 - 19968: jis0208<<14 | 0x49<<7 | 0x05,
+ 34720 - 19968: jis0212<<14 | 0x3A<<7 | 0x27,
+ 34722 - 19968: jis0208<<14 | 0x49<<7 | 0x04,
+ 34723 - 19968: jis0212<<14 | 0x3A<<7 | 0x28,
+ 34727 - 19968: jis0212<<14 | 0x3A<<7 | 0x29,
+ 34731 - 19968: jis0208<<14 | 0x49<<7 | 0x0D,
+ 34732 - 19968: jis0212<<14 | 0x3A<<7 | 0x2A,
+ 34733 - 19968: jis0212<<14 | 0x3A<<7 | 0x2B,
+ 34734 - 19968: jis0212<<14 | 0x3A<<7 | 0x2C,
+ 34735 - 19968: jis0208<<14 | 0x49<<7 | 0x07,
+ 34737 - 19968: jis0212<<14 | 0x3A<<7 | 0x2D,
+ 34739 - 19968: jis0208<<14 | 0x49<<7 | 0x0F,
+ 34741 - 19968: jis0212<<14 | 0x3A<<7 | 0x2E,
+ 34746 - 19968: jis0208<<14 | 0x2C<<7 | 0x45,
+ 34747 - 19968: jis0208<<14 | 0x49<<7 | 0x12,
+ 34749 - 19968: jis0208<<14 | 0x49<<7 | 0x09,
+ 34750 - 19968: jis0212<<14 | 0x3A<<7 | 0x2F,
+ 34751 - 19968: jis0212<<14 | 0x3A<<7 | 0x30,
+ 34752 - 19968: jis0208<<14 | 0x49<<7 | 0x0A,
+ 34753 - 19968: jis0212<<14 | 0x3A<<7 | 0x31,
+ 34756 - 19968: jis0208<<14 | 0x49<<7 | 0x0E,
+ 34758 - 19968: jis0208<<14 | 0x49<<7 | 0x11,
+ 34759 - 19968: jis0208<<14 | 0x49<<7 | 0x10,
+ 34760 - 19968: jis0212<<14 | 0x3A<<7 | 0x32,
+ 34761 - 19968: jis0212<<14 | 0x3A<<7 | 0x33,
+ 34762 - 19968: jis0212<<14 | 0x3A<<7 | 0x34,
+ 34763 - 19968: jis0208<<14 | 0x49<<7 | 0x08,
+ 34766 - 19968: jis0212<<14 | 0x3A<<7 | 0x35,
+ 34768 - 19968: jis0208<<14 | 0x49<<7 | 0x0B,
+ 34770 - 19968: jis0208<<14 | 0x49<<7 | 0x1C,
+ 34773 - 19968: jis0212<<14 | 0x3A<<7 | 0x36,
+ 34774 - 19968: jis0212<<14 | 0x3A<<7 | 0x37,
+ 34777 - 19968: jis0212<<14 | 0x3A<<7 | 0x38,
+ 34778 - 19968: jis0212<<14 | 0x3A<<7 | 0x39,
+ 34780 - 19968: jis0212<<14 | 0x3A<<7 | 0x3A,
+ 34783 - 19968: jis0212<<14 | 0x3A<<7 | 0x3B,
+ 34784 - 19968: jis0208<<14 | 0x49<<7 | 0x15,
+ 34786 - 19968: jis0212<<14 | 0x3A<<7 | 0x3C,
+ 34787 - 19968: jis0212<<14 | 0x3A<<7 | 0x3D,
+ 34788 - 19968: jis0212<<14 | 0x3A<<7 | 0x3E,
+ 34794 - 19968: jis0212<<14 | 0x3A<<7 | 0x3F,
+ 34795 - 19968: jis0212<<14 | 0x3A<<7 | 0x40,
+ 34797 - 19968: jis0212<<14 | 0x3A<<7 | 0x41,
+ 34799 - 19968: jis0208<<14 | 0x49<<7 | 0x13,
+ 34801 - 19968: jis0212<<14 | 0x3A<<7 | 0x42,
+ 34802 - 19968: jis0208<<14 | 0x49<<7 | 0x14,
+ 34803 - 19968: jis0212<<14 | 0x3A<<7 | 0x43,
+ 34806 - 19968: jis0208<<14 | 0x49<<7 | 0x19,
+ 34807 - 19968: jis0208<<14 | 0x49<<7 | 0x1A,
+ 34808 - 19968: jis0212<<14 | 0x3A<<7 | 0x44,
+ 34809 - 19968: jis0208<<14 | 0x12<<7 | 0x09,
+ 34810 - 19968: jis0212<<14 | 0x3A<<7 | 0x45,
+ 34811 - 19968: jis0208<<14 | 0x14<<7 | 0x21,
+ 34814 - 19968: jis0208<<14 | 0x49<<7 | 0x18,
+ 34815 - 19968: jis0212<<14 | 0x3A<<7 | 0x46,
+ 34817 - 19968: jis0212<<14 | 0x3A<<7 | 0x47,
+ 34819 - 19968: jis0212<<14 | 0x3A<<7 | 0x48,
+ 34821 - 19968: jis0208<<14 | 0x49<<7 | 0x03,
+ 34822 - 19968: jis0212<<14 | 0x3A<<7 | 0x49,
+ 34823 - 19968: jis0208<<14 | 0x5A<<7 | 0x44,
+ 34825 - 19968: jis0212<<14 | 0x3A<<7 | 0x4A,
+ 34826 - 19968: jis0212<<14 | 0x3A<<7 | 0x4B,
+ 34827 - 19968: jis0212<<14 | 0x3A<<7 | 0x4C,
+ 34829 - 19968: jis0208<<14 | 0x49<<7 | 0x17,
+ 34830 - 19968: jis0208<<14 | 0x49<<7 | 0x1B,
+ 34831 - 19968: jis0208<<14 | 0x49<<7 | 0x16,
+ 34832 - 19968: jis0212<<14 | 0x3A<<7 | 0x4D,
+ 34833 - 19968: jis0208<<14 | 0x49<<7 | 0x1D,
+ 34834 - 19968: jis0212<<14 | 0x3A<<7 | 0x4F,
+ 34835 - 19968: jis0212<<14 | 0x3A<<7 | 0x50,
+ 34836 - 19968: jis0212<<14 | 0x3A<<7 | 0x51,
+ 34837 - 19968: jis0208<<14 | 0x49<<7 | 0x1F,
+ 34838 - 19968: jis0208<<14 | 0x49<<7 | 0x1E,
+ 34840 - 19968: jis0212<<14 | 0x3A<<7 | 0x52,
+ 34841 - 19968: jis0212<<14 | 0x3A<<7 | 0x4E,
+ 34842 - 19968: jis0212<<14 | 0x3A<<7 | 0x53,
+ 34843 - 19968: jis0212<<14 | 0x3A<<7 | 0x54,
+ 34844 - 19968: jis0212<<14 | 0x3A<<7 | 0x55,
+ 34846 - 19968: jis0212<<14 | 0x3A<<7 | 0x56,
+ 34847 - 19968: jis0212<<14 | 0x3A<<7 | 0x57,
+ 34849 - 19968: jis0208<<14 | 0x49<<7 | 0x21,
+ 34850 - 19968: jis0208<<14 | 0x49<<7 | 0x20,
+ 34851 - 19968: jis0208<<14 | 0x48<<7 | 0x39,
+ 34855 - 19968: jis0208<<14 | 0x49<<7 | 0x25,
+ 34856 - 19968: jis0212<<14 | 0x3A<<7 | 0x58,
+ 34861 - 19968: jis0212<<14 | 0x3A<<7 | 0x59,
+ 34862 - 19968: jis0212<<14 | 0x3A<<7 | 0x5A,
+ 34864 - 19968: jis0212<<14 | 0x3A<<7 | 0x5B,
+ 34865 - 19968: jis0208<<14 | 0x49<<7 | 0x22,
+ 34866 - 19968: jis0212<<14 | 0x3A<<7 | 0x5C,
+ 34869 - 19968: jis0212<<14 | 0x3A<<7 | 0x5D,
+ 34870 - 19968: jis0208<<14 | 0x49<<7 | 0x23,
+ 34873 - 19968: jis0208<<14 | 0x49<<7 | 0x24,
+ 34874 - 19968: jis0212<<14 | 0x3B<<7 | 0x00,
+ 34875 - 19968: jis0208<<14 | 0x49<<7 | 0x26,
+ 34876 - 19968: jis0212<<14 | 0x3B<<7 | 0x01,
+ 34880 - 19968: jis0208<<14 | 0x16<<7 | 0x4B,
+ 34881 - 19968: jis0212<<14 | 0x3B<<7 | 0x02,
+ 34882 - 19968: jis0208<<14 | 0x49<<7 | 0x28,
+ 34883 - 19968: jis0212<<14 | 0x3B<<7 | 0x03,
+ 34884 - 19968: jis0208<<14 | 0x49<<7 | 0x27,
+ 34885 - 19968: jis0212<<14 | 0x3B<<7 | 0x04,
+ 34886 - 19968: jis0208<<14 | 0x1C<<7 | 0x0F,
+ 34888 - 19968: jis0212<<14 | 0x3B<<7 | 0x05,
+ 34889 - 19968: jis0212<<14 | 0x3B<<7 | 0x06,
+ 34890 - 19968: jis0212<<14 | 0x3B<<7 | 0x07,
+ 34891 - 19968: jis0212<<14 | 0x3B<<7 | 0x08,
+ 34892 - 19968: jis0208<<14 | 0x18<<7 | 0x33,
+ 34893 - 19968: jis0208<<14 | 0x3D<<7 | 0x06,
+ 34894 - 19968: jis0212<<14 | 0x3B<<7 | 0x09,
+ 34897 - 19968: jis0212<<14 | 0x3B<<7 | 0x0A,
+ 34898 - 19968: jis0208<<14 | 0x49<<7 | 0x29,
+ 34899 - 19968: jis0208<<14 | 0x1C<<7 | 0x30,
+ 34901 - 19968: jis0212<<14 | 0x3B<<7 | 0x0B,
+ 34902 - 19968: jis0212<<14 | 0x3B<<7 | 0x0C,
+ 34903 - 19968: jis0208<<14 | 0x12<<7 | 0x18,
+ 34904 - 19968: jis0212<<14 | 0x3B<<7 | 0x0D,
+ 34905 - 19968: jis0208<<14 | 0x49<<7 | 0x2A,
+ 34906 - 19968: jis0212<<14 | 0x3B<<7 | 0x0E,
+ 34907 - 19968: jis0208<<14 | 0x10<<7 | 0x31,
+ 34908 - 19968: jis0212<<14 | 0x3B<<7 | 0x0F,
+ 34909 - 19968: jis0208<<14 | 0x1D<<7 | 0x36,
+ 34910 - 19968: jis0208<<14 | 0x49<<7 | 0x2B,
+ 34911 - 19968: jis0212<<14 | 0x3B<<7 | 0x10,
+ 34912 - 19968: jis0212<<14 | 0x3B<<7 | 0x11,
+ 34913 - 19968: jis0208<<14 | 0x18<<7 | 0x34,
+ 34914 - 19968: jis0208<<14 | 0x49<<7 | 0x2C,
+ 34915 - 19968: jis0208<<14 | 0x0F<<7 | 0x40,
+ 34916 - 19968: jis0212<<14 | 0x3B<<7 | 0x12,
+ 34920 - 19968: jis0208<<14 | 0x28<<7 | 0x1C,
+ 34921 - 19968: jis0212<<14 | 0x3B<<7 | 0x13,
+ 34923 - 19968: jis0208<<14 | 0x49<<7 | 0x2D,
+ 34928 - 19968: jis0208<<14 | 0x1E<<7 | 0x49,
+ 34929 - 19968: jis0212<<14 | 0x3B<<7 | 0x14,
+ 34930 - 19968: jis0208<<14 | 0x49<<7 | 0x34,
+ 34933 - 19968: jis0208<<14 | 0x49<<7 | 0x31,
+ 34935 - 19968: jis0208<<14 | 0x22<<7 | 0x4E,
+ 34937 - 19968: jis0212<<14 | 0x3B<<7 | 0x15,
+ 34939 - 19968: jis0212<<14 | 0x3B<<7 | 0x16,
+ 34941 - 19968: jis0208<<14 | 0x49<<7 | 0x32,
+ 34942 - 19968: jis0208<<14 | 0x49<<7 | 0x2F,
+ 34943 - 19968: jis0208<<14 | 0x15<<7 | 0x3D,
+ 34944 - 19968: jis0212<<14 | 0x3B<<7 | 0x17,
+ 34945 - 19968: jis0208<<14 | 0x49<<7 | 0x2E,
+ 34946 - 19968: jis0208<<14 | 0x49<<7 | 0x35,
+ 34952 - 19968: jis0208<<14 | 0x16<<7 | 0x15,
+ 34955 - 19968: jis0208<<14 | 0x21<<7 | 0x3D,
+ 34957 - 19968: jis0208<<14 | 0x49<<7 | 0x3B,
+ 34962 - 19968: jis0208<<14 | 0x49<<7 | 0x37,
+ 34966 - 19968: jis0208<<14 | 0x21<<7 | 0x14,
+ 34967 - 19968: jis0208<<14 | 0x49<<7 | 0x36,
+ 34968 - 19968: jis0212<<14 | 0x3B<<7 | 0x18,
+ 34969 - 19968: jis0208<<14 | 0x49<<7 | 0x39,
+ 34970 - 19968: jis0212<<14 | 0x3B<<7 | 0x19,
+ 34971 - 19968: jis0212<<14 | 0x3B<<7 | 0x1A,
+ 34972 - 19968: jis0212<<14 | 0x3B<<7 | 0x1B,
+ 34974 - 19968: jis0208<<14 | 0x49<<7 | 0x30,
+ 34975 - 19968: jis0212<<14 | 0x3B<<7 | 0x1C,
+ 34976 - 19968: jis0212<<14 | 0x3B<<7 | 0x1D,
+ 34978 - 19968: jis0208<<14 | 0x49<<7 | 0x3A,
+ 34980 - 19968: jis0208<<14 | 0x49<<7 | 0x3C,
+ 34984 - 19968: jis0212<<14 | 0x3B<<7 | 0x1E,
+ 34986 - 19968: jis0212<<14 | 0x3B<<7 | 0x1F,
+ 34987 - 19968: jis0208<<14 | 0x27<<7 | 0x4E,
+ 34990 - 19968: jis0208<<14 | 0x49<<7 | 0x38,
+ 34992 - 19968: jis0208<<14 | 0x49<<7 | 0x3D,
+ 34993 - 19968: jis0208<<14 | 0x49<<7 | 0x3F,
+ 34996 - 19968: jis0208<<14 | 0x17<<7 | 0x32,
+ 34997 - 19968: jis0208<<14 | 0x49<<7 | 0x33,
+ 34999 - 19968: jis0208<<14 | 0x0F<<7 | 0x20,
+ 35002 - 19968: jis0212<<14 | 0x3B<<7 | 0x20,
+ 35005 - 19968: jis0212<<14 | 0x3B<<7 | 0x21,
+ 35006 - 19968: jis0212<<14 | 0x3B<<7 | 0x22,
+ 35007 - 19968: jis0208<<14 | 0x49<<7 | 0x3E,
+ 35008 - 19968: jis0212<<14 | 0x3B<<7 | 0x23,
+ 35009 - 19968: jis0208<<14 | 0x19<<7 | 0x3A,
+ 35010 - 19968: jis0208<<14 | 0x2D<<7 | 0x55,
+ 35011 - 19968: jis0208<<14 | 0x49<<7 | 0x40,
+ 35012 - 19968: jis0208<<14 | 0x49<<7 | 0x41,
+ 35013 - 19968: jis0208<<14 | 0x20<<7 | 0x54,
+ 35018 - 19968: jis0212<<14 | 0x3B<<7 | 0x24,
+ 35019 - 19968: jis0212<<14 | 0x3B<<7 | 0x25,
+ 35020 - 19968: jis0212<<14 | 0x3B<<7 | 0x26,
+ 35021 - 19968: jis0212<<14 | 0x3B<<7 | 0x27,
+ 35022 - 19968: jis0212<<14 | 0x3B<<7 | 0x28,
+ 35023 - 19968: jis0208<<14 | 0x2D<<7 | 0x01,
+ 35025 - 19968: jis0212<<14 | 0x3B<<7 | 0x29,
+ 35026 - 19968: jis0212<<14 | 0x3B<<7 | 0x2A,
+ 35027 - 19968: jis0212<<14 | 0x3B<<7 | 0x2B,
+ 35028 - 19968: jis0208<<14 | 0x49<<7 | 0x42,
+ 35029 - 19968: jis0208<<14 | 0x2C<<7 | 0x14,
+ 35032 - 19968: jis0208<<14 | 0x49<<7 | 0x43,
+ 35033 - 19968: jis0208<<14 | 0x49<<7 | 0x44,
+ 35035 - 19968: jis0212<<14 | 0x3B<<7 | 0x2C,
+ 35036 - 19968: jis0208<<14 | 0x29<<7 | 0x43,
+ 35037 - 19968: jis0208<<14 | 0x49<<7 | 0x45,
+ 35038 - 19968: jis0212<<14 | 0x3B<<7 | 0x2D,
+ 35039 - 19968: jis0208<<14 | 0x19<<7 | 0x1F,
+ 35041 - 19968: jis0208<<14 | 0x2D<<7 | 0x02,
+ 35047 - 19968: jis0212<<14 | 0x3B<<7 | 0x2E,
+ 35048 - 19968: jis0208<<14 | 0x49<<7 | 0x4A,
+ 35055 - 19968: jis0212<<14 | 0x3B<<7 | 0x2F,
+ 35056 - 19968: jis0212<<14 | 0x3B<<7 | 0x30,
+ 35057 - 19968: jis0212<<14 | 0x3B<<7 | 0x31,
+ 35058 - 19968: jis0208<<14 | 0x49<<7 | 0x4B,
+ 35059 - 19968: jis0208<<14 | 0x1D<<7 | 0x37,
+ 35060 - 19968: jis0208<<14 | 0x49<<7 | 0x49,
+ 35061 - 19968: jis0208<<14 | 0x5A<<7 | 0x45,
+ 35063 - 19968: jis0212<<14 | 0x3B<<7 | 0x33,
+ 35064 - 19968: jis0208<<14 | 0x2C<<7 | 0x46,
+ 35065 - 19968: jis0208<<14 | 0x49<<7 | 0x46,
+ 35068 - 19968: jis0208<<14 | 0x49<<7 | 0x48,
+ 35069 - 19968: jis0208<<14 | 0x1F<<7 | 0x1C,
+ 35070 - 19968: jis0208<<14 | 0x1E<<7 | 0x5D,
+ 35073 - 19968: jis0212<<14 | 0x3B<<7 | 0x34,
+ 35074 - 19968: jis0208<<14 | 0x49<<7 | 0x47,
+ 35076 - 19968: jis0208<<14 | 0x49<<7 | 0x4C,
+ 35078 - 19968: jis0212<<14 | 0x3B<<7 | 0x35,
+ 35079 - 19968: jis0208<<14 | 0x29<<7 | 0x02,
+ 35082 - 19968: jis0208<<14 | 0x49<<7 | 0x4E,
+ 35084 - 19968: jis0208<<14 | 0x49<<7 | 0x4D,
+ 35085 - 19968: jis0212<<14 | 0x3B<<7 | 0x36,
+ 35086 - 19968: jis0212<<14 | 0x3B<<7 | 0x37,
+ 35087 - 19968: jis0212<<14 | 0x3B<<7 | 0x38,
+ 35088 - 19968: jis0208<<14 | 0x12<<7 | 0x4B,
+ 35090 - 19968: jis0208<<14 | 0x2A<<7 | 0x0A,
+ 35091 - 19968: jis0208<<14 | 0x49<<7 | 0x4F,
+ 35093 - 19968: jis0212<<14 | 0x3B<<7 | 0x39,
+ 35094 - 19968: jis0212<<14 | 0x3B<<7 | 0x3A,
+ 35096 - 19968: jis0212<<14 | 0x3B<<7 | 0x3B,
+ 35097 - 19968: jis0212<<14 | 0x3B<<7 | 0x3C,
+ 35098 - 19968: jis0212<<14 | 0x3B<<7 | 0x3D,
+ 35100 - 19968: jis0208<<14 | 0x58<<7 | 0x01,
+ 35101 - 19968: jis0208<<14 | 0x49<<7 | 0x5B,
+ 35102 - 19968: jis0208<<14 | 0x49<<7 | 0x51,
+ 35104 - 19968: jis0212<<14 | 0x3B<<7 | 0x3F,
+ 35109 - 19968: jis0208<<14 | 0x49<<7 | 0x52,
+ 35110 - 19968: jis0212<<14 | 0x3B<<7 | 0x40,
+ 35111 - 19968: jis0212<<14 | 0x3B<<7 | 0x41,
+ 35112 - 19968: jis0212<<14 | 0x3B<<7 | 0x42,
+ 35114 - 19968: jis0208<<14 | 0x49<<7 | 0x53,
+ 35115 - 19968: jis0208<<14 | 0x49<<7 | 0x54,
+ 35120 - 19968: jis0212<<14 | 0x3B<<7 | 0x43,
+ 35121 - 19968: jis0212<<14 | 0x3B<<7 | 0x44,
+ 35122 - 19968: jis0212<<14 | 0x3B<<7 | 0x45,
+ 35125 - 19968: jis0212<<14 | 0x3B<<7 | 0x46,
+ 35126 - 19968: jis0208<<14 | 0x49<<7 | 0x58,
+ 35128 - 19968: jis0208<<14 | 0x49<<7 | 0x59,
+ 35129 - 19968: jis0212<<14 | 0x3B<<7 | 0x47,
+ 35130 - 19968: jis0212<<14 | 0x3B<<7 | 0x48,
+ 35131 - 19968: jis0208<<14 | 0x49<<7 | 0x57,
+ 35134 - 19968: jis0212<<14 | 0x3B<<7 | 0x49,
+ 35136 - 19968: jis0212<<14 | 0x3B<<7 | 0x4A,
+ 35137 - 19968: jis0208<<14 | 0x49<<7 | 0x55,
+ 35138 - 19968: jis0212<<14 | 0x3B<<7 | 0x4B,
+ 35139 - 19968: jis0208<<14 | 0x49<<7 | 0x50,
+ 35140 - 19968: jis0208<<14 | 0x49<<7 | 0x56,
+ 35141 - 19968: jis0212<<14 | 0x3B<<7 | 0x4C,
+ 35142 - 19968: jis0212<<14 | 0x3B<<7 | 0x4D,
+ 35145 - 19968: jis0212<<14 | 0x3B<<7 | 0x4E,
+ 35148 - 19968: jis0208<<14 | 0x49<<7 | 0x5A,
+ 35149 - 19968: jis0208<<14 | 0x4F<<7 | 0x16,
+ 35151 - 19968: jis0212<<14 | 0x3B<<7 | 0x4F,
+ 35154 - 19968: jis0212<<14 | 0x3B<<7 | 0x50,
+ 35158 - 19968: jis0208<<14 | 0x11<<7 | 0x07,
+ 35159 - 19968: jis0212<<14 | 0x3B<<7 | 0x51,
+ 35162 - 19968: jis0212<<14 | 0x3B<<7 | 0x52,
+ 35163 - 19968: jis0212<<14 | 0x3B<<7 | 0x53,
+ 35164 - 19968: jis0212<<14 | 0x3B<<7 | 0x54,
+ 35166 - 19968: jis0208<<14 | 0x49<<7 | 0x5D,
+ 35167 - 19968: jis0208<<14 | 0x15<<7 | 0x3E,
+ 35168 - 19968: jis0208<<14 | 0x49<<7 | 0x5C,
+ 35169 - 19968: jis0212<<14 | 0x3B<<7 | 0x55,
+ 35170 - 19968: jis0212<<14 | 0x3B<<7 | 0x56,
+ 35171 - 19968: jis0212<<14 | 0x3B<<7 | 0x57,
+ 35172 - 19968: jis0208<<14 | 0x4A<<7 | 0x01,
+ 35174 - 19968: jis0208<<14 | 0x4A<<7 | 0x00,
+ 35178 - 19968: jis0208<<14 | 0x4A<<7 | 0x03,
+ 35179 - 19968: jis0212<<14 | 0x3B<<7 | 0x58,
+ 35181 - 19968: jis0208<<14 | 0x4A<<7 | 0x02,
+ 35182 - 19968: jis0212<<14 | 0x3B<<7 | 0x59,
+ 35183 - 19968: jis0208<<14 | 0x4A<<7 | 0x04,
+ 35184 - 19968: jis0212<<14 | 0x3B<<7 | 0x5A,
+ 35186 - 19968: jis0208<<14 | 0x1C<<7 | 0x10,
+ 35187 - 19968: jis0212<<14 | 0x3B<<7 | 0x5B,
+ 35188 - 19968: jis0208<<14 | 0x4A<<7 | 0x05,
+ 35189 - 19968: jis0212<<14 | 0x3B<<7 | 0x5C,
+ 35191 - 19968: jis0208<<14 | 0x4A<<7 | 0x06,
+ 35194 - 19968: jis0212<<14 | 0x3B<<7 | 0x5D,
+ 35195 - 19968: jis0212<<14 | 0x3C<<7 | 0x00,
+ 35196 - 19968: jis0212<<14 | 0x3C<<7 | 0x01,
+ 35197 - 19968: jis0212<<14 | 0x3C<<7 | 0x02,
+ 35198 - 19968: jis0208<<14 | 0x4A<<7 | 0x07,
+ 35199 - 19968: jis0208<<14 | 0x1F<<7 | 0x1D,
+ 35201 - 19968: jis0208<<14 | 0x2C<<7 | 0x36,
+ 35203 - 19968: jis0208<<14 | 0x4A<<7 | 0x08,
+ 35206 - 19968: jis0208<<14 | 0x29<<7 | 0x03,
+ 35207 - 19968: jis0208<<14 | 0x26<<7 | 0x25,
+ 35208 - 19968: jis0208<<14 | 0x4A<<7 | 0x09,
+ 35209 - 19968: jis0212<<14 | 0x3C<<7 | 0x03,
+ 35210 - 19968: jis0208<<14 | 0x4A<<7 | 0x0A,
+ 35211 - 19968: jis0208<<14 | 0x17<<7 | 0x0A,
+ 35213 - 19968: jis0212<<14 | 0x3C<<7 | 0x04,
+ 35215 - 19968: jis0208<<14 | 0x14<<7 | 0x0B,
+ 35216 - 19968: jis0212<<14 | 0x3C<<7 | 0x05,
+ 35219 - 19968: jis0208<<14 | 0x4A<<7 | 0x0B,
+ 35220 - 19968: jis0212<<14 | 0x3C<<7 | 0x06,
+ 35221 - 19968: jis0212<<14 | 0x3C<<7 | 0x07,
+ 35222 - 19968: jis0208<<14 | 0x1A<<7 | 0x4A,
+ 35223 - 19968: jis0208<<14 | 0x26<<7 | 0x20,
+ 35224 - 19968: jis0208<<14 | 0x4A<<7 | 0x0C,
+ 35226 - 19968: jis0208<<14 | 0x12<<7 | 0x2F,
+ 35227 - 19968: jis0212<<14 | 0x3C<<7 | 0x08,
+ 35228 - 19968: jis0212<<14 | 0x3C<<7 | 0x09,
+ 35231 - 19968: jis0212<<14 | 0x3C<<7 | 0x0A,
+ 35232 - 19968: jis0212<<14 | 0x3C<<7 | 0x0B,
+ 35233 - 19968: jis0208<<14 | 0x4A<<7 | 0x0D,
+ 35237 - 19968: jis0212<<14 | 0x3C<<7 | 0x0C,
+ 35238 - 19968: jis0208<<14 | 0x4A<<7 | 0x0F,
+ 35239 - 19968: jis0208<<14 | 0x2C<<7 | 0x56,
+ 35241 - 19968: jis0208<<14 | 0x4A<<7 | 0x0E,
+ 35242 - 19968: jis0208<<14 | 0x1E<<7 | 0x25,
+ 35244 - 19968: jis0208<<14 | 0x4A<<7 | 0x10,
+ 35247 - 19968: jis0208<<14 | 0x4A<<7 | 0x11,
+ 35248 - 19968: jis0212<<14 | 0x3C<<7 | 0x0D,
+ 35250 - 19968: jis0208<<14 | 0x4A<<7 | 0x12,
+ 35251 - 19968: jis0208<<14 | 0x13<<7 | 0x30,
+ 35252 - 19968: jis0212<<14 | 0x3C<<7 | 0x0E,
+ 35253 - 19968: jis0212<<14 | 0x3C<<7 | 0x0F,
+ 35254 - 19968: jis0212<<14 | 0x3C<<7 | 0x10,
+ 35255 - 19968: jis0212<<14 | 0x3C<<7 | 0x11,
+ 35258 - 19968: jis0208<<14 | 0x4A<<7 | 0x13,
+ 35260 - 19968: jis0212<<14 | 0x3C<<7 | 0x12,
+ 35261 - 19968: jis0208<<14 | 0x4A<<7 | 0x14,
+ 35263 - 19968: jis0208<<14 | 0x4A<<7 | 0x15,
+ 35264 - 19968: jis0208<<14 | 0x4A<<7 | 0x16,
+ 35282 - 19968: jis0208<<14 | 0x12<<7 | 0x30,
+ 35284 - 19968: jis0212<<14 | 0x3C<<7 | 0x13,
+ 35285 - 19968: jis0212<<14 | 0x3C<<7 | 0x14,
+ 35286 - 19968: jis0212<<14 | 0x3C<<7 | 0x15,
+ 35287 - 19968: jis0212<<14 | 0x3C<<7 | 0x16,
+ 35288 - 19968: jis0212<<14 | 0x3C<<7 | 0x17,
+ 35290 - 19968: jis0208<<14 | 0x4A<<7 | 0x17,
+ 35292 - 19968: jis0208<<14 | 0x4A<<7 | 0x18,
+ 35293 - 19968: jis0208<<14 | 0x4A<<7 | 0x19,
+ 35299 - 19968: jis0208<<14 | 0x11<<7 | 0x51,
+ 35301 - 19968: jis0212<<14 | 0x3C<<7 | 0x18,
+ 35302 - 19968: jis0208<<14 | 0x1E<<7 | 0x07,
+ 35303 - 19968: jis0208<<14 | 0x4A<<7 | 0x1A,
+ 35305 - 19968: jis0212<<14 | 0x3C<<7 | 0x19,
+ 35307 - 19968: jis0212<<14 | 0x3C<<7 | 0x1A,
+ 35309 - 19968: jis0212<<14 | 0x3C<<7 | 0x1B,
+ 35313 - 19968: jis0212<<14 | 0x3C<<7 | 0x1C,
+ 35315 - 19968: jis0212<<14 | 0x3C<<7 | 0x1D,
+ 35316 - 19968: jis0208<<14 | 0x4A<<7 | 0x1B,
+ 35318 - 19968: jis0212<<14 | 0x3C<<7 | 0x1E,
+ 35320 - 19968: jis0208<<14 | 0x4A<<7 | 0x1C,
+ 35321 - 19968: jis0212<<14 | 0x3C<<7 | 0x1F,
+ 35325 - 19968: jis0212<<14 | 0x3C<<7 | 0x20,
+ 35327 - 19968: jis0212<<14 | 0x3C<<7 | 0x21,
+ 35328 - 19968: jis0208<<14 | 0x17<<7 | 0x1F,
+ 35330 - 19968: jis0208<<14 | 0x23<<7 | 0x5A,
+ 35331 - 19968: jis0208<<14 | 0x4A<<7 | 0x1D,
+ 35332 - 19968: jis0212<<14 | 0x3C<<7 | 0x22,
+ 35333 - 19968: jis0212<<14 | 0x3C<<7 | 0x23,
+ 35335 - 19968: jis0212<<14 | 0x3C<<7 | 0x24,
+ 35336 - 19968: jis0208<<14 | 0x16<<7 | 0x36,
+ 35338 - 19968: jis0208<<14 | 0x1E<<7 | 0x35,
+ 35340 - 19968: jis0208<<14 | 0x4A<<7 | 0x20,
+ 35342 - 19968: jis0208<<14 | 0x25<<7 | 0x03,
+ 35343 - 19968: jis0212<<14 | 0x3C<<7 | 0x25,
+ 35344 - 19968: jis0208<<14 | 0x4A<<7 | 0x1F,
+ 35345 - 19968: jis0212<<14 | 0x3C<<7 | 0x26,
+ 35346 - 19968: jis0208<<14 | 0x5A<<7 | 0x46,
+ 35347 - 19968: jis0208<<14 | 0x16<<7 | 0x10,
+ 35348 - 19968: jis0212<<14 | 0x3C<<7 | 0x28,
+ 35349 - 19968: jis0212<<14 | 0x3C<<7 | 0x29,
+ 35350 - 19968: jis0208<<14 | 0x4A<<7 | 0x1E,
+ 35351 - 19968: jis0208<<14 | 0x21<<7 | 0x56,
+ 35352 - 19968: jis0208<<14 | 0x14<<7 | 0x0C,
+ 35355 - 19968: jis0208<<14 | 0x4A<<7 | 0x21,
+ 35357 - 19968: jis0208<<14 | 0x4A<<7 | 0x22,
+ 35358 - 19968: jis0212<<14 | 0x3C<<7 | 0x2A,
+ 35359 - 19968: jis0208<<14 | 0x1D<<7 | 0x38,
+ 35360 - 19968: jis0212<<14 | 0x3C<<7 | 0x2B,
+ 35362 - 19968: jis0212<<14 | 0x3C<<7 | 0x2C,
+ 35363 - 19968: jis0208<<14 | 0x16<<7 | 0x4C,
+ 35364 - 19968: jis0212<<14 | 0x3C<<7 | 0x2D,
+ 35365 - 19968: jis0208<<14 | 0x4A<<7 | 0x23,
+ 35366 - 19968: jis0212<<14 | 0x3C<<7 | 0x2E,
+ 35370 - 19968: jis0208<<14 | 0x2A<<7 | 0x0B,
+ 35371 - 19968: jis0212<<14 | 0x3C<<7 | 0x2F,
+ 35372 - 19968: jis0212<<14 | 0x3C<<7 | 0x30,
+ 35373 - 19968: jis0208<<14 | 0x1F<<7 | 0x3E,
+ 35375 - 19968: jis0212<<14 | 0x3C<<7 | 0x31,
+ 35377 - 19968: jis0208<<14 | 0x14<<7 | 0x55,
+ 35379 - 19968: jis0208<<14 | 0x2B<<7 | 0x54,
+ 35380 - 19968: jis0208<<14 | 0x20<<7 | 0x29,
+ 35381 - 19968: jis0212<<14 | 0x3C<<7 | 0x32,
+ 35382 - 19968: jis0208<<14 | 0x4A<<7 | 0x24,
+ 35383 - 19968: jis0208<<14 | 0x5A<<7 | 0x47,
+ 35386 - 19968: jis0208<<14 | 0x1E<<7 | 0x26,
+ 35387 - 19968: jis0208<<14 | 0x22<<7 | 0x4F,
+ 35388 - 19968: jis0208<<14 | 0x1D<<7 | 0x39,
+ 35389 - 19968: jis0212<<14 | 0x3C<<7 | 0x34,
+ 35390 - 19968: jis0212<<14 | 0x3C<<7 | 0x35,
+ 35392 - 19968: jis0212<<14 | 0x3C<<7 | 0x36,
+ 35393 - 19968: jis0208<<14 | 0x4A<<7 | 0x25,
+ 35395 - 19968: jis0212<<14 | 0x3C<<7 | 0x37,
+ 35397 - 19968: jis0212<<14 | 0x3C<<7 | 0x38,
+ 35398 - 19968: jis0208<<14 | 0x4A<<7 | 0x28,
+ 35399 - 19968: jis0212<<14 | 0x3C<<7 | 0x39,
+ 35400 - 19968: jis0208<<14 | 0x4A<<7 | 0x29,
+ 35401 - 19968: jis0212<<14 | 0x3C<<7 | 0x3A,
+ 35405 - 19968: jis0212<<14 | 0x3C<<7 | 0x3B,
+ 35406 - 19968: jis0212<<14 | 0x3C<<7 | 0x3C,
+ 35408 - 19968: jis0208<<14 | 0x19<<7 | 0x1D,
+ 35409 - 19968: jis0208<<14 | 0x21<<7 | 0x21,
+ 35410 - 19968: jis0208<<14 | 0x4A<<7 | 0x27,
+ 35411 - 19968: jis0212<<14 | 0x3C<<7 | 0x3D,
+ 35412 - 19968: jis0208<<14 | 0x1D<<7 | 0x3A,
+ 35413 - 19968: jis0208<<14 | 0x28<<7 | 0x1D,
+ 35414 - 19968: jis0212<<14 | 0x3C<<7 | 0x3E,
+ 35415 - 19968: jis0212<<14 | 0x3C<<7 | 0x3F,
+ 35416 - 19968: jis0212<<14 | 0x3C<<7 | 0x40,
+ 35419 - 19968: jis0208<<14 | 0x4A<<7 | 0x26,
+ 35420 - 19968: jis0212<<14 | 0x3C<<7 | 0x41,
+ 35421 - 19968: jis0212<<14 | 0x3C<<7 | 0x42,
+ 35422 - 19968: jis0208<<14 | 0x1A<<7 | 0x4B,
+ 35424 - 19968: jis0208<<14 | 0x10<<7 | 0x32,
+ 35425 - 19968: jis0212<<14 | 0x3C<<7 | 0x43,
+ 35426 - 19968: jis0208<<14 | 0x4A<<7 | 0x2D,
+ 35427 - 19968: jis0208<<14 | 0x16<<7 | 0x37,
+ 35429 - 19968: jis0212<<14 | 0x3C<<7 | 0x44,
+ 35430 - 19968: jis0208<<14 | 0x1A<<7 | 0x4D,
+ 35431 - 19968: jis0212<<14 | 0x3C<<7 | 0x45,
+ 35433 - 19968: jis0208<<14 | 0x1A<<7 | 0x4C,
+ 35435 - 19968: jis0208<<14 | 0x2E<<7 | 0x2C,
+ 35436 - 19968: jis0208<<14 | 0x4A<<7 | 0x2C,
+ 35437 - 19968: jis0208<<14 | 0x4A<<7 | 0x2B,
+ 35438 - 19968: jis0208<<14 | 0x20<<7 | 0x06,
+ 35440 - 19968: jis0208<<14 | 0x14<<7 | 0x2C,
+ 35441 - 19968: jis0208<<14 | 0x2E<<7 | 0x22,
+ 35442 - 19968: jis0208<<14 | 0x12<<7 | 0x19,
+ 35443 - 19968: jis0208<<14 | 0x1D<<7 | 0x3B,
+ 35445 - 19968: jis0212<<14 | 0x3C<<7 | 0x46,
+ 35446 - 19968: jis0212<<14 | 0x3C<<7 | 0x47,
+ 35447 - 19968: jis0212<<14 | 0x3C<<7 | 0x48,
+ 35449 - 19968: jis0208<<14 | 0x5A<<7 | 0x48,
+ 35450 - 19968: jis0212<<14 | 0x3C<<7 | 0x4A,
+ 35451 - 19968: jis0212<<14 | 0x3C<<7 | 0x4B,
+ 35452 - 19968: jis0208<<14 | 0x4A<<7 | 0x2A,
+ 35454 - 19968: jis0212<<14 | 0x3C<<7 | 0x4C,
+ 35455 - 19968: jis0212<<14 | 0x3C<<7 | 0x4D,
+ 35456 - 19968: jis0212<<14 | 0x3C<<7 | 0x4E,
+ 35458 - 19968: jis0208<<14 | 0x4A<<7 | 0x2F,
+ 35459 - 19968: jis0212<<14 | 0x3C<<7 | 0x4F,
+ 35460 - 19968: jis0208<<14 | 0x4A<<7 | 0x30,
+ 35461 - 19968: jis0208<<14 | 0x4A<<7 | 0x2E,
+ 35462 - 19968: jis0212<<14 | 0x3C<<7 | 0x50,
+ 35463 - 19968: jis0208<<14 | 0x17<<7 | 0x37,
+ 35465 - 19968: jis0208<<14 | 0x2C<<7 | 0x1F,
+ 35467 - 19968: jis0212<<14 | 0x3C<<7 | 0x51,
+ 35468 - 19968: jis0208<<14 | 0x1A<<7 | 0x4E,
+ 35469 - 19968: jis0208<<14 | 0x26<<7 | 0x06,
+ 35471 - 19968: jis0212<<14 | 0x3C<<7 | 0x52,
+ 35472 - 19968: jis0212<<14 | 0x3C<<7 | 0x53,
+ 35473 - 19968: jis0208<<14 | 0x4A<<7 | 0x33,
+ 35474 - 19968: jis0212<<14 | 0x3C<<7 | 0x54,
+ 35475 - 19968: jis0208<<14 | 0x1F<<7 | 0x1F,
+ 35477 - 19968: jis0208<<14 | 0x22<<7 | 0x21,
+ 35478 - 19968: jis0212<<14 | 0x3C<<7 | 0x55,
+ 35479 - 19968: jis0212<<14 | 0x3C<<7 | 0x56,
+ 35480 - 19968: jis0208<<14 | 0x2C<<7 | 0x15,
+ 35481 - 19968: jis0212<<14 | 0x3C<<7 | 0x57,
+ 35482 - 19968: jis0208<<14 | 0x4A<<7 | 0x36,
+ 35486 - 19968: jis0208<<14 | 0x17<<7 | 0x4B,
+ 35487 - 19968: jis0212<<14 | 0x3C<<7 | 0x58,
+ 35488 - 19968: jis0208<<14 | 0x1F<<7 | 0x1E,
+ 35489 - 19968: jis0208<<14 | 0x4A<<7 | 0x32,
+ 35491 - 19968: jis0208<<14 | 0x4A<<7 | 0x37,
+ 35492 - 19968: jis0208<<14 | 0x17<<7 | 0x4C,
+ 35493 - 19968: jis0208<<14 | 0x4A<<7 | 0x34,
+ 35494 - 19968: jis0208<<14 | 0x4A<<7 | 0x35,
+ 35495 - 19968: jis0208<<14 | 0x5A<<7 | 0x49,
+ 35496 - 19968: jis0208<<14 | 0x4A<<7 | 0x31,
+ 35497 - 19968: jis0212<<14 | 0x3C<<7 | 0x5A,
+ 35500 - 19968: jis0208<<14 | 0x1F<<7 | 0x41,
+ 35501 - 19968: jis0208<<14 | 0x25<<7 | 0x28,
+ 35502 - 19968: jis0212<<14 | 0x3C<<7 | 0x5B,
+ 35503 - 19968: jis0212<<14 | 0x3C<<7 | 0x5C,
+ 35504 - 19968: jis0208<<14 | 0x22<<7 | 0x0E,
+ 35506 - 19968: jis0208<<14 | 0x11<<7 | 0x3C,
+ 35507 - 19968: jis0212<<14 | 0x3C<<7 | 0x5D,
+ 35510 - 19968: jis0212<<14 | 0x3D<<7 | 0x00,
+ 35511 - 19968: jis0212<<14 | 0x3D<<7 | 0x01,
+ 35513 - 19968: jis0208<<14 | 0x27<<7 | 0x4F,
+ 35515 - 19968: jis0212<<14 | 0x3D<<7 | 0x02,
+ 35516 - 19968: jis0208<<14 | 0x14<<7 | 0x22,
+ 35518 - 19968: jis0208<<14 | 0x5A<<7 | 0x4A,
+ 35519 - 19968: jis0208<<14 | 0x23<<7 | 0x13,
+ 35522 - 19968: jis0208<<14 | 0x4A<<7 | 0x3A,
+ 35523 - 19968: jis0212<<14 | 0x3D<<7 | 0x04,
+ 35524 - 19968: jis0208<<14 | 0x4A<<7 | 0x38,
+ 35526 - 19968: jis0212<<14 | 0x3D<<7 | 0x05,
+ 35527 - 19968: jis0208<<14 | 0x22<<7 | 0x2B,
+ 35528 - 19968: jis0212<<14 | 0x3D<<7 | 0x06,
+ 35529 - 19968: jis0212<<14 | 0x3D<<7 | 0x07,
+ 35530 - 19968: jis0212<<14 | 0x3D<<7 | 0x08,
+ 35531 - 19968: jis0208<<14 | 0x1F<<7 | 0x20,
+ 35532 - 19968: jis0208<<14 | 0x13<<7 | 0x31,
+ 35533 - 19968: jis0208<<14 | 0x4A<<7 | 0x39,
+ 35535 - 19968: jis0208<<14 | 0x1E<<7 | 0x3A,
+ 35537 - 19968: jis0212<<14 | 0x3D<<7 | 0x09,
+ 35538 - 19968: jis0208<<14 | 0x2D<<7 | 0x29,
+ 35539 - 19968: jis0212<<14 | 0x3D<<7 | 0x0A,
+ 35540 - 19968: jis0212<<14 | 0x3D<<7 | 0x0B,
+ 35541 - 19968: jis0212<<14 | 0x3D<<7 | 0x0C,
+ 35542 - 19968: jis0208<<14 | 0x2E<<7 | 0x1F,
+ 35543 - 19968: jis0212<<14 | 0x3D<<7 | 0x0D,
+ 35546 - 19968: jis0208<<14 | 0x4A<<7 | 0x3B,
+ 35547 - 19968: jis0208<<14 | 0x4A<<7 | 0x46,
+ 35548 - 19968: jis0208<<14 | 0x23<<7 | 0x14,
+ 35549 - 19968: jis0212<<14 | 0x3D<<7 | 0x0E,
+ 35550 - 19968: jis0208<<14 | 0x4A<<7 | 0x45,
+ 35551 - 19968: jis0208<<14 | 0x5A<<7 | 0x4B,
+ 35552 - 19968: jis0208<<14 | 0x4A<<7 | 0x42,
+ 35553 - 19968: jis0208<<14 | 0x4A<<7 | 0x4A,
+ 35554 - 19968: jis0208<<14 | 0x4A<<7 | 0x43,
+ 35556 - 19968: jis0208<<14 | 0x4A<<7 | 0x3F,
+ 35558 - 19968: jis0208<<14 | 0x23<<7 | 0x5B,
+ 35559 - 19968: jis0208<<14 | 0x4A<<7 | 0x3E,
+ 35563 - 19968: jis0208<<14 | 0x4A<<7 | 0x3C,
+ 35564 - 19968: jis0212<<14 | 0x3D<<7 | 0x10,
+ 35565 - 19968: jis0208<<14 | 0x2C<<7 | 0x00,
+ 35566 - 19968: jis0208<<14 | 0x1A<<7 | 0x4F,
+ 35568 - 19968: jis0212<<14 | 0x3D<<7 | 0x11,
+ 35569 - 19968: jis0208<<14 | 0x4A<<7 | 0x40,
+ 35571 - 19968: jis0208<<14 | 0x4A<<7 | 0x3D,
+ 35572 - 19968: jis0212<<14 | 0x3D<<7 | 0x12,
+ 35573 - 19968: jis0212<<14 | 0x3D<<7 | 0x13,
+ 35574 - 19968: jis0208<<14 | 0x5A<<7 | 0x4D,
+ 35575 - 19968: jis0208<<14 | 0x4A<<7 | 0x44,
+ 35576 - 19968: jis0208<<14 | 0x1C<<7 | 0x53,
+ 35578 - 19968: jis0208<<14 | 0x17<<7 | 0x20,
+ 35580 - 19968: jis0212<<14 | 0x3D<<7 | 0x15,
+ 35582 - 19968: jis0208<<14 | 0x21<<7 | 0x59,
+ 35583 - 19968: jis0212<<14 | 0x3D<<7 | 0x16,
+ 35584 - 19968: jis0208<<14 | 0x2A<<7 | 0x24,
+ 35585 - 19968: jis0208<<14 | 0x10<<7 | 0x39,
+ 35586 - 19968: jis0208<<14 | 0x0F<<7 | 0x41,
+ 35588 - 19968: jis0208<<14 | 0x25<<7 | 0x04,
+ 35589 - 19968: jis0212<<14 | 0x3D<<7 | 0x17,
+ 35590 - 19968: jis0212<<14 | 0x3D<<7 | 0x18,
+ 35591 - 19968: jis0208<<14 | 0x4A<<7 | 0x48,
+ 35594 - 19968: jis0212<<14 | 0x3D<<7 | 0x1E,
+ 35595 - 19968: jis0212<<14 | 0x3D<<7 | 0x19,
+ 35596 - 19968: jis0208<<14 | 0x4A<<7 | 0x47,
+ 35598 - 19968: jis0208<<14 | 0x25<<7 | 0x45,
+ 35600 - 19968: jis0208<<14 | 0x4A<<7 | 0x4C,
+ 35601 - 19968: jis0212<<14 | 0x3D<<7 | 0x1A,
+ 35604 - 19968: jis0208<<14 | 0x4A<<7 | 0x41,
+ 35606 - 19968: jis0208<<14 | 0x4A<<7 | 0x4B,
+ 35607 - 19968: jis0208<<14 | 0x4A<<7 | 0x4D,
+ 35609 - 19968: jis0208<<14 | 0x17<<7 | 0x0B,
+ 35610 - 19968: jis0208<<14 | 0x4A<<7 | 0x49,
+ 35611 - 19968: jis0208<<14 | 0x18<<7 | 0x35,
+ 35612 - 19968: jis0212<<14 | 0x3D<<7 | 0x1B,
+ 35613 - 19968: jis0208<<14 | 0x1B<<7 | 0x34,
+ 35614 - 19968: jis0212<<14 | 0x3D<<7 | 0x1C,
+ 35615 - 19968: jis0212<<14 | 0x3D<<7 | 0x1D,
+ 35616 - 19968: jis0208<<14 | 0x4A<<7 | 0x4E,
+ 35617 - 19968: jis0208<<14 | 0x2C<<7 | 0x37,
+ 35622 - 19968: jis0208<<14 | 0x4A<<7 | 0x51,
+ 35624 - 19968: jis0208<<14 | 0x4A<<7 | 0x54,
+ 35627 - 19968: jis0208<<14 | 0x4A<<7 | 0x52,
+ 35628 - 19968: jis0208<<14 | 0x28<<7 | 0x14,
+ 35629 - 19968: jis0212<<14 | 0x3D<<7 | 0x1F,
+ 35632 - 19968: jis0212<<14 | 0x3D<<7 | 0x20,
+ 35635 - 19968: jis0208<<14 | 0x4A<<7 | 0x4F,
+ 35639 - 19968: jis0212<<14 | 0x3D<<7 | 0x21,
+ 35641 - 19968: jis0208<<14 | 0x15<<7 | 0x3F,
+ 35644 - 19968: jis0212<<14 | 0x3D<<7 | 0x22,
+ 35646 - 19968: jis0208<<14 | 0x4A<<7 | 0x53,
+ 35649 - 19968: jis0208<<14 | 0x4A<<7 | 0x55,
+ 35650 - 19968: jis0212<<14 | 0x3D<<7 | 0x23,
+ 35651 - 19968: jis0212<<14 | 0x3D<<7 | 0x24,
+ 35652 - 19968: jis0212<<14 | 0x3D<<7 | 0x25,
+ 35653 - 19968: jis0212<<14 | 0x3D<<7 | 0x26,
+ 35654 - 19968: jis0212<<14 | 0x3D<<7 | 0x27,
+ 35656 - 19968: jis0212<<14 | 0x3D<<7 | 0x28,
+ 35657 - 19968: jis0208<<14 | 0x4A<<7 | 0x59,
+ 35660 - 19968: jis0208<<14 | 0x4A<<7 | 0x56,
+ 35661 - 19968: jis0212<<14 | 0x3D<<7 | 0x2D,
+ 35662 - 19968: jis0208<<14 | 0x4A<<7 | 0x58,
+ 35663 - 19968: jis0208<<14 | 0x4A<<7 | 0x57,
+ 35666 - 19968: jis0212<<14 | 0x3D<<7 | 0x29,
+ 35667 - 19968: jis0208<<14 | 0x5A<<7 | 0x4E,
+ 35668 - 19968: jis0212<<14 | 0x3D<<7 | 0x2B,
+ 35670 - 19968: jis0208<<14 | 0x4A<<7 | 0x5A,
+ 35672 - 19968: jis0208<<14 | 0x1B<<7 | 0x10,
+ 35673 - 19968: jis0212<<14 | 0x3D<<7 | 0x2C,
+ 35674 - 19968: jis0208<<14 | 0x4A<<7 | 0x5C,
+ 35675 - 19968: jis0208<<14 | 0x4A<<7 | 0x5B,
+ 35676 - 19968: jis0208<<14 | 0x28<<7 | 0x47,
+ 35678 - 19968: jis0212<<14 | 0x3D<<7 | 0x2E,
+ 35679 - 19968: jis0208<<14 | 0x4B<<7 | 0x00,
+ 35683 - 19968: jis0212<<14 | 0x3D<<7 | 0x2F,
+ 35686 - 19968: jis0208<<14 | 0x16<<7 | 0x38,
+ 35691 - 19968: jis0208<<14 | 0x4A<<7 | 0x5D,
+ 35692 - 19968: jis0208<<14 | 0x4B<<7 | 0x01,
+ 35693 - 19968: jis0212<<14 | 0x3D<<7 | 0x30,
+ 35695 - 19968: jis0208<<14 | 0x4B<<7 | 0x02,
+ 35696 - 19968: jis0208<<14 | 0x14<<7 | 0x23,
+ 35697 - 19968: jis0208<<14 | 0x45<<7 | 0x20,
+ 35698 - 19968: jis0208<<14 | 0x1D<<7 | 0x58,
+ 35700 - 19968: jis0208<<14 | 0x4B<<7 | 0x03,
+ 35702 - 19968: jis0212<<14 | 0x3D<<7 | 0x31,
+ 35703 - 19968: jis0208<<14 | 0x17<<7 | 0x4D,
+ 35704 - 19968: jis0212<<14 | 0x3D<<7 | 0x32,
+ 35705 - 19968: jis0212<<14 | 0x3D<<7 | 0x33,
+ 35708 - 19968: jis0212<<14 | 0x3D<<7 | 0x34,
+ 35709 - 19968: jis0208<<14 | 0x4B<<7 | 0x04,
+ 35710 - 19968: jis0212<<14 | 0x3D<<7 | 0x35,
+ 35711 - 19968: jis0208<<14 | 0x5A<<7 | 0x4F,
+ 35712 - 19968: jis0208<<14 | 0x4B<<7 | 0x05,
+ 35713 - 19968: jis0212<<14 | 0x3D<<7 | 0x36,
+ 35715 - 19968: jis0208<<14 | 0x1A<<7 | 0x1D,
+ 35716 - 19968: jis0212<<14 | 0x3D<<7 | 0x37,
+ 35717 - 19968: jis0212<<14 | 0x3D<<7 | 0x38,
+ 35722 - 19968: jis0208<<14 | 0x39<<7 | 0x2D,
+ 35723 - 19968: jis0212<<14 | 0x3D<<7 | 0x39,
+ 35724 - 19968: jis0208<<14 | 0x4B<<7 | 0x06,
+ 35725 - 19968: jis0212<<14 | 0x3D<<7 | 0x3A,
+ 35726 - 19968: jis0208<<14 | 0x4B<<7 | 0x07,
+ 35727 - 19968: jis0212<<14 | 0x3D<<7 | 0x3B,
+ 35728 - 19968: jis0208<<14 | 0x1C<<7 | 0x11,
+ 35730 - 19968: jis0208<<14 | 0x4B<<7 | 0x08,
+ 35731 - 19968: jis0208<<14 | 0x4B<<7 | 0x09,
+ 35732 - 19968: jis0212<<14 | 0x3D<<7 | 0x3C,
+ 35733 - 19968: jis0212<<14 | 0x3D<<7 | 0x3D,
+ 35734 - 19968: jis0208<<14 | 0x4B<<7 | 0x0A,
+ 35737 - 19968: jis0208<<14 | 0x4B<<7 | 0x0B,
+ 35738 - 19968: jis0208<<14 | 0x4B<<7 | 0x0C,
+ 35740 - 19968: jis0212<<14 | 0x3D<<7 | 0x3E,
+ 35742 - 19968: jis0212<<14 | 0x3D<<7 | 0x3F,
+ 35743 - 19968: jis0212<<14 | 0x3D<<7 | 0x40,
+ 35895 - 19968: jis0208<<14 | 0x22<<7 | 0x0A,
+ 35896 - 19968: jis0212<<14 | 0x3D<<7 | 0x41,
+ 35897 - 19968: jis0212<<14 | 0x3D<<7 | 0x42,
+ 35898 - 19968: jis0208<<14 | 0x4B<<7 | 0x0D,
+ 35901 - 19968: jis0212<<14 | 0x3D<<7 | 0x43,
+ 35902 - 19968: jis0212<<14 | 0x3D<<7 | 0x44,
+ 35903 - 19968: jis0208<<14 | 0x4B<<7 | 0x0F,
+ 35905 - 19968: jis0208<<14 | 0x4B<<7 | 0x0E,
+ 35909 - 19968: jis0212<<14 | 0x3D<<7 | 0x45,
+ 35910 - 19968: jis0208<<14 | 0x25<<7 | 0x05,
+ 35911 - 19968: jis0212<<14 | 0x3D<<7 | 0x46,
+ 35912 - 19968: jis0208<<14 | 0x4B<<7 | 0x10,
+ 35913 - 19968: jis0212<<14 | 0x3D<<7 | 0x47,
+ 35914 - 19968: jis0208<<14 | 0x2A<<7 | 0x0C,
+ 35915 - 19968: jis0212<<14 | 0x3D<<7 | 0x48,
+ 35916 - 19968: jis0208<<14 | 0x4B<<7 | 0x11,
+ 35918 - 19968: jis0208<<14 | 0x4B<<7 | 0x12,
+ 35919 - 19968: jis0212<<14 | 0x3D<<7 | 0x49,
+ 35920 - 19968: jis0208<<14 | 0x4B<<7 | 0x13,
+ 35921 - 19968: jis0212<<14 | 0x3D<<7 | 0x4A,
+ 35923 - 19968: jis0212<<14 | 0x3D<<7 | 0x4B,
+ 35924 - 19968: jis0212<<14 | 0x3D<<7 | 0x4C,
+ 35925 - 19968: jis0208<<14 | 0x4B<<7 | 0x14,
+ 35927 - 19968: jis0212<<14 | 0x3D<<7 | 0x4D,
+ 35928 - 19968: jis0212<<14 | 0x3D<<7 | 0x4E,
+ 35929 - 19968: jis0212<<14 | 0x3D<<7 | 0x51,
+ 35930 - 19968: jis0208<<14 | 0x25<<7 | 0x39,
+ 35931 - 19968: jis0212<<14 | 0x3D<<7 | 0x4F,
+ 35933 - 19968: jis0212<<14 | 0x3D<<7 | 0x50,
+ 35937 - 19968: jis0208<<14 | 0x1D<<7 | 0x3C,
+ 35938 - 19968: jis0208<<14 | 0x4B<<7 | 0x15,
+ 35939 - 19968: jis0212<<14 | 0x3D<<7 | 0x52,
+ 35940 - 19968: jis0212<<14 | 0x3D<<7 | 0x53,
+ 35942 - 19968: jis0212<<14 | 0x3D<<7 | 0x54,
+ 35944 - 19968: jis0212<<14 | 0x3D<<7 | 0x55,
+ 35945 - 19968: jis0212<<14 | 0x3D<<7 | 0x56,
+ 35946 - 19968: jis0208<<14 | 0x18<<7 | 0x4A,
+ 35947 - 19968: jis0208<<14 | 0x2F<<7 | 0x0D,
+ 35948 - 19968: jis0208<<14 | 0x4B<<7 | 0x16,
+ 35949 - 19968: jis0212<<14 | 0x3D<<7 | 0x57,
+ 35955 - 19968: jis0212<<14 | 0x3D<<7 | 0x58,
+ 35957 - 19968: jis0212<<14 | 0x3D<<7 | 0x59,
+ 35958 - 19968: jis0212<<14 | 0x3D<<7 | 0x5A,
+ 35960 - 19968: jis0208<<14 | 0x4B<<7 | 0x17,
+ 35961 - 19968: jis0208<<14 | 0x28<<7 | 0x1E,
+ 35962 - 19968: jis0208<<14 | 0x4B<<7 | 0x18,
+ 35963 - 19968: jis0212<<14 | 0x3D<<7 | 0x5B,
+ 35964 - 19968: jis0208<<14 | 0x4B<<7 | 0x20,
+ 35966 - 19968: jis0212<<14 | 0x3D<<7 | 0x5C,
+ 35970 - 19968: jis0208<<14 | 0x4B<<7 | 0x19,
+ 35973 - 19968: jis0208<<14 | 0x4B<<7 | 0x1B,
+ 35974 - 19968: jis0212<<14 | 0x3D<<7 | 0x5D,
+ 35975 - 19968: jis0212<<14 | 0x3E<<7 | 0x00,
+ 35977 - 19968: jis0208<<14 | 0x4B<<7 | 0x1A,
+ 35978 - 19968: jis0208<<14 | 0x4B<<7 | 0x1C,
+ 35979 - 19968: jis0212<<14 | 0x3E<<7 | 0x01,
+ 35980 - 19968: jis0208<<14 | 0x2A<<7 | 0x25,
+ 35981 - 19968: jis0208<<14 | 0x4B<<7 | 0x1D,
+ 35982 - 19968: jis0208<<14 | 0x4B<<7 | 0x1E,
+ 35984 - 19968: jis0212<<14 | 0x3E<<7 | 0x02,
+ 35986 - 19968: jis0212<<14 | 0x3E<<7 | 0x03,
+ 35987 - 19968: jis0212<<14 | 0x3E<<7 | 0x04,
+ 35988 - 19968: jis0208<<14 | 0x4B<<7 | 0x1F,
+ 35992 - 19968: jis0208<<14 | 0x4B<<7 | 0x21,
+ 35993 - 19968: jis0212<<14 | 0x3E<<7 | 0x05,
+ 35995 - 19968: jis0212<<14 | 0x3E<<7 | 0x06,
+ 35996 - 19968: jis0212<<14 | 0x3E<<7 | 0x07,
+ 35997 - 19968: jis0208<<14 | 0x12<<7 | 0x0C,
+ 35998 - 19968: jis0208<<14 | 0x23<<7 | 0x46,
+ 36000 - 19968: jis0208<<14 | 0x28<<7 | 0x48,
+ 36001 - 19968: jis0208<<14 | 0x19<<7 | 0x41,
+ 36002 - 19968: jis0208<<14 | 0x18<<7 | 0x36,
+ 36004 - 19968: jis0212<<14 | 0x3E<<7 | 0x08,
+ 36007 - 19968: jis0208<<14 | 0x28<<7 | 0x2E,
+ 36008 - 19968: jis0208<<14 | 0x11<<7 | 0x3E,
+ 36009 - 19968: jis0208<<14 | 0x27<<7 | 0x2D,
+ 36010 - 19968: jis0208<<14 | 0x4B<<7 | 0x24,
+ 36011 - 19968: jis0208<<14 | 0x13<<7 | 0x32,
+ 36012 - 19968: jis0208<<14 | 0x1F<<7 | 0x34,
+ 36013 - 19968: jis0208<<14 | 0x4B<<7 | 0x23,
+ 36014 - 19968: jis0208<<14 | 0x4B<<7 | 0x28,
+ 36015 - 19968: jis0208<<14 | 0x22<<7 | 0x58,
+ 36016 - 19968: jis0208<<14 | 0x2B<<7 | 0x42,
+ 36018 - 19968: jis0208<<14 | 0x4B<<7 | 0x26,
+ 36019 - 19968: jis0208<<14 | 0x4B<<7 | 0x27,
+ 36020 - 19968: jis0208<<14 | 0x14<<7 | 0x0D,
+ 36022 - 19968: jis0208<<14 | 0x4B<<7 | 0x29,
+ 36023 - 19968: jis0208<<14 | 0x26<<7 | 0x42,
+ 36024 - 19968: jis0208<<14 | 0x21<<7 | 0x3E,
+ 36025 - 19968: jis0212<<14 | 0x3E<<7 | 0x09,
+ 36026 - 19968: jis0212<<14 | 0x3E<<7 | 0x0A,
+ 36027 - 19968: jis0208<<14 | 0x27<<7 | 0x50,
+ 36028 - 19968: jis0208<<14 | 0x24<<7 | 0x1C,
+ 36029 - 19968: jis0208<<14 | 0x4B<<7 | 0x25,
+ 36031 - 19968: jis0208<<14 | 0x2A<<7 | 0x26,
+ 36032 - 19968: jis0208<<14 | 0x11<<7 | 0x4B,
+ 36033 - 19968: jis0208<<14 | 0x4B<<7 | 0x2B,
+ 36034 - 19968: jis0208<<14 | 0x2E<<7 | 0x07,
+ 36035 - 19968: jis0208<<14 | 0x23<<7 | 0x21,
+ 36036 - 19968: jis0208<<14 | 0x2E<<7 | 0x24,
+ 36037 - 19968: jis0212<<14 | 0x3E<<7 | 0x0B,
+ 36038 - 19968: jis0212<<14 | 0x3E<<7 | 0x0C,
+ 36039 - 19968: jis0208<<14 | 0x1A<<7 | 0x50,
+ 36040 - 19968: jis0208<<14 | 0x4B<<7 | 0x2A,
+ 36041 - 19968: jis0212<<14 | 0x3E<<7 | 0x0D,
+ 36042 - 19968: jis0208<<14 | 0x21<<7 | 0x10,
+ 36043 - 19968: jis0212<<14 | 0x3E<<7 | 0x0E,
+ 36045 - 19968: jis0208<<14 | 0x4B<<7 | 0x3B,
+ 36046 - 19968: jis0208<<14 | 0x20<<7 | 0x07,
+ 36047 - 19968: jis0212<<14 | 0x3E<<7 | 0x0F,
+ 36049 - 19968: jis0208<<14 | 0x25<<7 | 0x57,
+ 36051 - 19968: jis0208<<14 | 0x28<<7 | 0x2F,
+ 36053 - 19968: jis0212<<14 | 0x3E<<7 | 0x11,
+ 36054 - 19968: jis0212<<14 | 0x3E<<7 | 0x10,
+ 36057 - 19968: jis0212<<14 | 0x3E<<7 | 0x12,
+ 36058 - 19968: jis0208<<14 | 0x4B<<7 | 0x2E,
+ 36059 - 19968: jis0208<<14 | 0x1A<<7 | 0x1E,
+ 36060 - 19968: jis0208<<14 | 0x1A<<7 | 0x51,
+ 36061 - 19968: jis0212<<14 | 0x3E<<7 | 0x13,
+ 36062 - 19968: jis0208<<14 | 0x1D<<7 | 0x3D,
+ 36064 - 19968: jis0208<<14 | 0x26<<7 | 0x44,
+ 36065 - 19968: jis0212<<14 | 0x3E<<7 | 0x14,
+ 36066 - 19968: jis0208<<14 | 0x17<<7 | 0x0C,
+ 36067 - 19968: jis0208<<14 | 0x4B<<7 | 0x2D,
+ 36068 - 19968: jis0208<<14 | 0x4B<<7 | 0x2C,
+ 36070 - 19968: jis0208<<14 | 0x28<<7 | 0x49,
+ 36072 - 19968: jis0212<<14 | 0x3E<<7 | 0x15,
+ 36074 - 19968: jis0208<<14 | 0x1B<<7 | 0x20,
+ 36076 - 19968: jis0212<<14 | 0x3E<<7 | 0x16,
+ 36077 - 19968: jis0208<<14 | 0x24<<7 | 0x31,
+ 36079 - 19968: jis0212<<14 | 0x3E<<7 | 0x17,
+ 36080 - 19968: jis0208<<14 | 0x5A<<7 | 0x50,
+ 36082 - 19968: jis0212<<14 | 0x3E<<7 | 0x19,
+ 36084 - 19968: jis0208<<14 | 0x5A<<7 | 0x51,
+ 36085 - 19968: jis0212<<14 | 0x3E<<7 | 0x1A,
+ 36087 - 19968: jis0212<<14 | 0x3E<<7 | 0x1B,
+ 36088 - 19968: jis0212<<14 | 0x3E<<7 | 0x1C,
+ 36090 - 19968: jis0208<<14 | 0x4B<<7 | 0x30,
+ 36091 - 19968: jis0208<<14 | 0x4B<<7 | 0x31,
+ 36092 - 19968: jis0208<<14 | 0x18<<7 | 0x37,
+ 36093 - 19968: jis0208<<14 | 0x4B<<7 | 0x2F,
+ 36094 - 19968: jis0212<<14 | 0x3E<<7 | 0x1D,
+ 36095 - 19968: jis0212<<14 | 0x3E<<7 | 0x1E,
+ 36097 - 19968: jis0212<<14 | 0x3E<<7 | 0x1F,
+ 36099 - 19968: jis0212<<14 | 0x3E<<7 | 0x20,
+ 36100 - 19968: jis0208<<14 | 0x4B<<7 | 0x32,
+ 36101 - 19968: jis0208<<14 | 0x4B<<7 | 0x33,
+ 36103 - 19968: jis0208<<14 | 0x4B<<7 | 0x35,
+ 36104 - 19968: jis0208<<14 | 0x21<<7 | 0x02,
+ 36105 - 19968: jis0212<<14 | 0x3E<<7 | 0x21,
+ 36106 - 19968: jis0208<<14 | 0x4B<<7 | 0x34,
+ 36107 - 19968: jis0208<<14 | 0x13<<7 | 0x45,
+ 36109 - 19968: jis0208<<14 | 0x4B<<7 | 0x37,
+ 36111 - 19968: jis0208<<14 | 0x4B<<7 | 0x36,
+ 36112 - 19968: jis0208<<14 | 0x4B<<7 | 0x38,
+ 36114 - 19968: jis0208<<14 | 0x5A<<7 | 0x52,
+ 36115 - 19968: jis0208<<14 | 0x4B<<7 | 0x3A,
+ 36116 - 19968: jis0208<<14 | 0x4B<<7 | 0x3C,
+ 36118 - 19968: jis0208<<14 | 0x4B<<7 | 0x3D,
+ 36119 - 19968: jis0212<<14 | 0x3E<<7 | 0x23,
+ 36123 - 19968: jis0212<<14 | 0x3E<<7 | 0x24,
+ 36196 - 19968: jis0208<<14 | 0x1F<<7 | 0x35,
+ 36197 - 19968: jis0212<<14 | 0x3E<<7 | 0x25,
+ 36198 - 19968: jis0208<<14 | 0x1B<<7 | 0x2E,
+ 36199 - 19968: jis0208<<14 | 0x4B<<7 | 0x3E,
+ 36201 - 19968: jis0212<<14 | 0x3E<<7 | 0x26,
+ 36203 - 19968: jis0208<<14 | 0x12<<7 | 0x31,
+ 36204 - 19968: jis0212<<14 | 0x3E<<7 | 0x27,
+ 36205 - 19968: jis0208<<14 | 0x4B<<7 | 0x3F,
+ 36206 - 19968: jis0212<<14 | 0x3E<<7 | 0x28,
+ 36208 - 19968: jis0208<<14 | 0x20<<7 | 0x55,
+ 36209 - 19968: jis0208<<14 | 0x4B<<7 | 0x40,
+ 36211 - 19968: jis0208<<14 | 0x4B<<7 | 0x41,
+ 36212 - 19968: jis0208<<14 | 0x28<<7 | 0x4A,
+ 36214 - 19968: jis0208<<14 | 0x5A<<7 | 0x53,
+ 36215 - 19968: jis0208<<14 | 0x14<<7 | 0x0E,
+ 36223 - 19968: jis0212<<14 | 0x3E<<7 | 0x29,
+ 36225 - 19968: jis0208<<14 | 0x4B<<7 | 0x42,
+ 36226 - 19968: jis0212<<14 | 0x3E<<7 | 0x2A,
+ 36228 - 19968: jis0212<<14 | 0x3E<<7 | 0x2B,
+ 36229 - 19968: jis0208<<14 | 0x23<<7 | 0x15,
+ 36232 - 19968: jis0212<<14 | 0x3E<<7 | 0x2C,
+ 36234 - 19968: jis0208<<14 | 0x10<<7 | 0x3A,
+ 36237 - 19968: jis0212<<14 | 0x3E<<7 | 0x2D,
+ 36240 - 19968: jis0212<<14 | 0x3E<<7 | 0x2E,
+ 36241 - 19968: jis0212<<14 | 0x3E<<7 | 0x2F,
+ 36245 - 19968: jis0212<<14 | 0x3E<<7 | 0x30,
+ 36249 - 19968: jis0208<<14 | 0x4B<<7 | 0x43,
+ 36254 - 19968: jis0212<<14 | 0x3E<<7 | 0x31,
+ 36255 - 19968: jis0212<<14 | 0x3E<<7 | 0x32,
+ 36256 - 19968: jis0212<<14 | 0x3E<<7 | 0x33,
+ 36259 - 19968: jis0208<<14 | 0x1B<<7 | 0x50,
+ 36262 - 19968: jis0212<<14 | 0x3E<<7 | 0x34,
+ 36264 - 19968: jis0208<<14 | 0x1E<<7 | 0x55,
+ 36267 - 19968: jis0212<<14 | 0x3E<<7 | 0x35,
+ 36268 - 19968: jis0212<<14 | 0x3E<<7 | 0x36,
+ 36271 - 19968: jis0212<<14 | 0x3E<<7 | 0x37,
+ 36274 - 19968: jis0212<<14 | 0x3E<<7 | 0x38,
+ 36275 - 19968: jis0208<<14 | 0x21<<7 | 0x0C,
+ 36277 - 19968: jis0212<<14 | 0x3E<<7 | 0x39,
+ 36279 - 19968: jis0212<<14 | 0x3E<<7 | 0x3A,
+ 36281 - 19968: jis0212<<14 | 0x3E<<7 | 0x3B,
+ 36282 - 19968: jis0208<<14 | 0x4B<<7 | 0x46,
+ 36283 - 19968: jis0212<<14 | 0x3E<<7 | 0x3C,
+ 36284 - 19968: jis0212<<14 | 0x3E<<7 | 0x4E,
+ 36286 - 19968: jis0208<<14 | 0x4B<<7 | 0x45,
+ 36288 - 19968: jis0212<<14 | 0x3E<<7 | 0x3D,
+ 36290 - 19968: jis0208<<14 | 0x4B<<7 | 0x44,
+ 36293 - 19968: jis0212<<14 | 0x3E<<7 | 0x3E,
+ 36294 - 19968: jis0212<<14 | 0x3E<<7 | 0x3F,
+ 36295 - 19968: jis0212<<14 | 0x3E<<7 | 0x40,
+ 36296 - 19968: jis0212<<14 | 0x3E<<7 | 0x41,
+ 36298 - 19968: jis0212<<14 | 0x3E<<7 | 0x42,
+ 36299 - 19968: jis0208<<14 | 0x4B<<7 | 0x4C,
+ 36300 - 19968: jis0208<<14 | 0x4B<<7 | 0x4A,
+ 36302 - 19968: jis0212<<14 | 0x3E<<7 | 0x43,
+ 36303 - 19968: jis0208<<14 | 0x4B<<7 | 0x47,
+ 36305 - 19968: jis0212<<14 | 0x3E<<7 | 0x44,
+ 36308 - 19968: jis0212<<14 | 0x3E<<7 | 0x45,
+ 36309 - 19968: jis0212<<14 | 0x3E<<7 | 0x46,
+ 36310 - 19968: jis0208<<14 | 0x4B<<7 | 0x49,
+ 36311 - 19968: jis0212<<14 | 0x3E<<7 | 0x47,
+ 36313 - 19968: jis0212<<14 | 0x3E<<7 | 0x48,
+ 36314 - 19968: jis0208<<14 | 0x4B<<7 | 0x48,
+ 36315 - 19968: jis0208<<14 | 0x4B<<7 | 0x4B,
+ 36317 - 19968: jis0208<<14 | 0x14<<7 | 0x56,
+ 36319 - 19968: jis0208<<14 | 0x4B<<7 | 0x4F,
+ 36321 - 19968: jis0208<<14 | 0x1F<<7 | 0x36,
+ 36323 - 19968: jis0208<<14 | 0x4B<<7 | 0x50,
+ 36324 - 19968: jis0212<<14 | 0x3E<<7 | 0x49,
+ 36325 - 19968: jis0212<<14 | 0x3E<<7 | 0x4A,
+ 36327 - 19968: jis0212<<14 | 0x3E<<7 | 0x4B,
+ 36328 - 19968: jis0208<<14 | 0x17<<7 | 0x38,
+ 36330 - 19968: jis0208<<14 | 0x4B<<7 | 0x4D,
+ 36331 - 19968: jis0208<<14 | 0x4B<<7 | 0x4E,
+ 36332 - 19968: jis0212<<14 | 0x3E<<7 | 0x4C,
+ 36335 - 19968: jis0208<<14 | 0x2E<<7 | 0x08,
+ 36336 - 19968: jis0212<<14 | 0x3E<<7 | 0x4D,
+ 36337 - 19968: jis0212<<14 | 0x3E<<7 | 0x4F,
+ 36338 - 19968: jis0212<<14 | 0x3E<<7 | 0x50,
+ 36339 - 19968: jis0208<<14 | 0x23<<7 | 0x16,
+ 36340 - 19968: jis0212<<14 | 0x3E<<7 | 0x51,
+ 36341 - 19968: jis0208<<14 | 0x20<<7 | 0x08,
+ 36348 - 19968: jis0208<<14 | 0x4B<<7 | 0x51,
+ 36349 - 19968: jis0212<<14 | 0x3E<<7 | 0x52,
+ 36351 - 19968: jis0208<<14 | 0x4B<<7 | 0x54,
+ 36353 - 19968: jis0212<<14 | 0x3E<<7 | 0x53,
+ 36356 - 19968: jis0212<<14 | 0x3E<<7 | 0x54,
+ 36357 - 19968: jis0212<<14 | 0x3E<<7 | 0x55,
+ 36358 - 19968: jis0212<<14 | 0x3E<<7 | 0x56,
+ 36360 - 19968: jis0208<<14 | 0x4B<<7 | 0x52,
+ 36361 - 19968: jis0208<<14 | 0x4B<<7 | 0x53,
+ 36362 - 19968: jis0208<<14 | 0x2C<<7 | 0x38,
+ 36363 - 19968: jis0212<<14 | 0x3E<<7 | 0x57,
+ 36367 - 19968: jis0208<<14 | 0x25<<7 | 0x06,
+ 36368 - 19968: jis0208<<14 | 0x4B<<7 | 0x57,
+ 36369 - 19968: jis0212<<14 | 0x3E<<7 | 0x58,
+ 36372 - 19968: jis0212<<14 | 0x3E<<7 | 0x59,
+ 36374 - 19968: jis0212<<14 | 0x3E<<7 | 0x5A,
+ 36381 - 19968: jis0208<<14 | 0x4B<<7 | 0x55,
+ 36382 - 19968: jis0208<<14 | 0x4B<<7 | 0x56,
+ 36383 - 19968: jis0208<<14 | 0x4B<<7 | 0x58,
+ 36384 - 19968: jis0212<<14 | 0x3E<<7 | 0x5B,
+ 36385 - 19968: jis0212<<14 | 0x3E<<7 | 0x5C,
+ 36386 - 19968: jis0212<<14 | 0x3E<<7 | 0x5D,
+ 36387 - 19968: jis0212<<14 | 0x3F<<7 | 0x00,
+ 36390 - 19968: jis0212<<14 | 0x3F<<7 | 0x01,
+ 36391 - 19968: jis0212<<14 | 0x3F<<7 | 0x02,
+ 36394 - 19968: jis0208<<14 | 0x4C<<7 | 0x08,
+ 36400 - 19968: jis0208<<14 | 0x4B<<7 | 0x5B,
+ 36401 - 19968: jis0212<<14 | 0x3F<<7 | 0x03,
+ 36403 - 19968: jis0212<<14 | 0x3F<<7 | 0x04,
+ 36404 - 19968: jis0208<<14 | 0x4B<<7 | 0x5C,
+ 36405 - 19968: jis0208<<14 | 0x4B<<7 | 0x5A,
+ 36406 - 19968: jis0212<<14 | 0x3F<<7 | 0x05,
+ 36407 - 19968: jis0212<<14 | 0x3F<<7 | 0x06,
+ 36408 - 19968: jis0212<<14 | 0x3F<<7 | 0x07,
+ 36409 - 19968: jis0212<<14 | 0x3F<<7 | 0x08,
+ 36413 - 19968: jis0212<<14 | 0x3F<<7 | 0x09,
+ 36416 - 19968: jis0212<<14 | 0x3F<<7 | 0x0A,
+ 36417 - 19968: jis0212<<14 | 0x3F<<7 | 0x0B,
+ 36418 - 19968: jis0208<<14 | 0x4B<<7 | 0x59,
+ 36420 - 19968: jis0208<<14 | 0x23<<7 | 0x5C,
+ 36423 - 19968: jis0208<<14 | 0x4C<<7 | 0x00,
+ 36424 - 19968: jis0208<<14 | 0x4C<<7 | 0x04,
+ 36425 - 19968: jis0208<<14 | 0x4C<<7 | 0x01,
+ 36426 - 19968: jis0208<<14 | 0x4B<<7 | 0x5D,
+ 36427 - 19968: jis0212<<14 | 0x3F<<7 | 0x0C,
+ 36428 - 19968: jis0208<<14 | 0x4C<<7 | 0x02,
+ 36429 - 19968: jis0212<<14 | 0x3F<<7 | 0x0D,
+ 36430 - 19968: jis0212<<14 | 0x3F<<7 | 0x0E,
+ 36431 - 19968: jis0212<<14 | 0x3F<<7 | 0x0F,
+ 36432 - 19968: jis0208<<14 | 0x4C<<7 | 0x03,
+ 36436 - 19968: jis0212<<14 | 0x3F<<7 | 0x10,
+ 36437 - 19968: jis0208<<14 | 0x4C<<7 | 0x0A,
+ 36441 - 19968: jis0208<<14 | 0x4C<<7 | 0x05,
+ 36443 - 19968: jis0212<<14 | 0x3F<<7 | 0x11,
+ 36444 - 19968: jis0212<<14 | 0x3F<<7 | 0x12,
+ 36445 - 19968: jis0212<<14 | 0x3F<<7 | 0x13,
+ 36446 - 19968: jis0212<<14 | 0x3F<<7 | 0x14,
+ 36447 - 19968: jis0208<<14 | 0x1F<<7 | 0x37,
+ 36448 - 19968: jis0208<<14 | 0x4C<<7 | 0x07,
+ 36449 - 19968: jis0212<<14 | 0x3F<<7 | 0x15,
+ 36450 - 19968: jis0212<<14 | 0x3F<<7 | 0x16,
+ 36451 - 19968: jis0208<<14 | 0x4C<<7 | 0x09,
+ 36452 - 19968: jis0208<<14 | 0x4C<<7 | 0x06,
+ 36457 - 19968: jis0212<<14 | 0x3F<<7 | 0x17,
+ 36460 - 19968: jis0212<<14 | 0x3F<<7 | 0x18,
+ 36461 - 19968: jis0212<<14 | 0x3F<<7 | 0x19,
+ 36463 - 19968: jis0212<<14 | 0x3F<<7 | 0x1A,
+ 36464 - 19968: jis0212<<14 | 0x3F<<7 | 0x1B,
+ 36465 - 19968: jis0212<<14 | 0x3F<<7 | 0x1C,
+ 36466 - 19968: jis0208<<14 | 0x4C<<7 | 0x0C,
+ 36468 - 19968: jis0208<<14 | 0x1C<<7 | 0x12,
+ 36470 - 19968: jis0208<<14 | 0x4C<<7 | 0x0B,
+ 36473 - 19968: jis0212<<14 | 0x3F<<7 | 0x1D,
+ 36474 - 19968: jis0212<<14 | 0x3F<<7 | 0x1E,
+ 36475 - 19968: jis0212<<14 | 0x3F<<7 | 0x1F,
+ 36476 - 19968: jis0208<<14 | 0x4C<<7 | 0x0D,
+ 36481 - 19968: jis0208<<14 | 0x4C<<7 | 0x0E,
+ 36482 - 19968: jis0212<<14 | 0x3F<<7 | 0x20,
+ 36483 - 19968: jis0212<<14 | 0x3F<<7 | 0x21,
+ 36484 - 19968: jis0208<<14 | 0x4C<<7 | 0x11,
+ 36485 - 19968: jis0208<<14 | 0x4C<<7 | 0x10,
+ 36487 - 19968: jis0208<<14 | 0x4C<<7 | 0x0F,
+ 36489 - 19968: jis0212<<14 | 0x3F<<7 | 0x22,
+ 36490 - 19968: jis0208<<14 | 0x4C<<7 | 0x13,
+ 36491 - 19968: jis0208<<14 | 0x4C<<7 | 0x12,
+ 36493 - 19968: jis0208<<14 | 0x2B<<7 | 0x55,
+ 36496 - 19968: jis0212<<14 | 0x3F<<7 | 0x23,
+ 36497 - 19968: jis0208<<14 | 0x4C<<7 | 0x15,
+ 36498 - 19968: jis0212<<14 | 0x3F<<7 | 0x24,
+ 36499 - 19968: jis0208<<14 | 0x4C<<7 | 0x14,
+ 36500 - 19968: jis0208<<14 | 0x4C<<7 | 0x16,
+ 36501 - 19968: jis0212<<14 | 0x3F<<7 | 0x25,
+ 36505 - 19968: jis0208<<14 | 0x4C<<7 | 0x17,
+ 36506 - 19968: jis0212<<14 | 0x3F<<7 | 0x26,
+ 36507 - 19968: jis0212<<14 | 0x3F<<7 | 0x27,
+ 36509 - 19968: jis0212<<14 | 0x3F<<7 | 0x28,
+ 36510 - 19968: jis0212<<14 | 0x3F<<7 | 0x29,
+ 36513 - 19968: jis0208<<14 | 0x4C<<7 | 0x19,
+ 36514 - 19968: jis0212<<14 | 0x3F<<7 | 0x2A,
+ 36519 - 19968: jis0212<<14 | 0x3F<<7 | 0x2B,
+ 36521 - 19968: jis0212<<14 | 0x3F<<7 | 0x2C,
+ 36522 - 19968: jis0208<<14 | 0x4C<<7 | 0x18,
+ 36523 - 19968: jis0208<<14 | 0x1E<<7 | 0x27,
+ 36524 - 19968: jis0208<<14 | 0x4C<<7 | 0x1A,
+ 36525 - 19968: jis0212<<14 | 0x3F<<7 | 0x2D,
+ 36526 - 19968: jis0212<<14 | 0x3F<<7 | 0x2E,
+ 36527 - 19968: jis0208<<14 | 0x15<<7 | 0x4C,
+ 36528 - 19968: jis0208<<14 | 0x4C<<7 | 0x1B,
+ 36529 - 19968: jis0208<<14 | 0x4C<<7 | 0x1D,
+ 36531 - 19968: jis0212<<14 | 0x3F<<7 | 0x2F,
+ 36533 - 19968: jis0212<<14 | 0x3F<<7 | 0x30,
+ 36538 - 19968: jis0212<<14 | 0x3F<<7 | 0x31,
+ 36539 - 19968: jis0212<<14 | 0x3F<<7 | 0x32,
+ 36542 - 19968: jis0208<<14 | 0x4C<<7 | 0x1E,
+ 36544 - 19968: jis0212<<14 | 0x3F<<7 | 0x33,
+ 36545 - 19968: jis0212<<14 | 0x3F<<7 | 0x34,
+ 36547 - 19968: jis0212<<14 | 0x3F<<7 | 0x35,
+ 36548 - 19968: jis0212<<14 | 0x3F<<7 | 0x36,
+ 36549 - 19968: jis0208<<14 | 0x4C<<7 | 0x1F,
+ 36550 - 19968: jis0208<<14 | 0x4C<<7 | 0x1C,
+ 36551 - 19968: jis0212<<14 | 0x3F<<7 | 0x37,
+ 36552 - 19968: jis0208<<14 | 0x4C<<7 | 0x20,
+ 36554 - 19968: jis0208<<14 | 0x1B<<7 | 0x35,
+ 36555 - 19968: jis0208<<14 | 0x4C<<7 | 0x21,
+ 36556 - 19968: jis0208<<14 | 0x14<<7 | 0x0F,
+ 36557 - 19968: jis0208<<14 | 0x16<<7 | 0x12,
+ 36559 - 19968: jis0208<<14 | 0x5A<<7 | 0x55,
+ 36561 - 19968: jis0212<<14 | 0x3F<<7 | 0x39,
+ 36562 - 19968: jis0208<<14 | 0x17<<7 | 0x0D,
+ 36564 - 19968: jis0212<<14 | 0x3F<<7 | 0x3A,
+ 36571 - 19968: jis0208<<14 | 0x4C<<7 | 0x22,
+ 36572 - 19968: jis0212<<14 | 0x3F<<7 | 0x3B,
+ 36575 - 19968: jis0208<<14 | 0x25<<7 | 0x4F,
+ 36578 - 19968: jis0208<<14 | 0x24<<7 | 0x1D,
+ 36579 - 19968: jis0208<<14 | 0x4C<<7 | 0x23,
+ 36584 - 19968: jis0212<<14 | 0x3F<<7 | 0x3C,
+ 36587 - 19968: jis0208<<14 | 0x4C<<7 | 0x26,
+ 36589 - 19968: jis0212<<14 | 0x3F<<7 | 0x43,
+ 36590 - 19968: jis0212<<14 | 0x3F<<7 | 0x3D,
+ 36592 - 19968: jis0212<<14 | 0x3F<<7 | 0x3E,
+ 36593 - 19968: jis0212<<14 | 0x3F<<7 | 0x3F,
+ 36599 - 19968: jis0212<<14 | 0x3F<<7 | 0x40,
+ 36600 - 19968: jis0208<<14 | 0x1B<<7 | 0x13,
+ 36601 - 19968: jis0212<<14 | 0x3F<<7 | 0x41,
+ 36602 - 19968: jis0212<<14 | 0x3F<<7 | 0x42,
+ 36603 - 19968: jis0208<<14 | 0x4C<<7 | 0x25,
+ 36604 - 19968: jis0208<<14 | 0x4C<<7 | 0x24,
+ 36605 - 19968: jis0208<<14 | 0x16<<7 | 0x39,
+ 36606 - 19968: jis0208<<14 | 0x4C<<7 | 0x27,
+ 36608 - 19968: jis0212<<14 | 0x3F<<7 | 0x44,
+ 36610 - 19968: jis0212<<14 | 0x3F<<7 | 0x45,
+ 36611 - 19968: jis0208<<14 | 0x12<<7 | 0x32,
+ 36613 - 19968: jis0208<<14 | 0x4C<<7 | 0x29,
+ 36615 - 19968: jis0212<<14 | 0x3F<<7 | 0x46,
+ 36616 - 19968: jis0212<<14 | 0x3F<<7 | 0x47,
+ 36617 - 19968: jis0208<<14 | 0x19<<7 | 0x3B,
+ 36618 - 19968: jis0208<<14 | 0x4C<<7 | 0x28,
+ 36620 - 19968: jis0208<<14 | 0x4C<<7 | 0x31,
+ 36623 - 19968: jis0212<<14 | 0x3F<<7 | 0x48,
+ 36624 - 19968: jis0212<<14 | 0x3F<<7 | 0x49,
+ 36626 - 19968: jis0208<<14 | 0x4C<<7 | 0x2B,
+ 36627 - 19968: jis0208<<14 | 0x4C<<7 | 0x2D,
+ 36628 - 19968: jis0208<<14 | 0x29<<7 | 0x44,
+ 36629 - 19968: jis0208<<14 | 0x4C<<7 | 0x2A,
+ 36630 - 19968: jis0212<<14 | 0x3F<<7 | 0x4A,
+ 36631 - 19968: jis0212<<14 | 0x3F<<7 | 0x4B,
+ 36632 - 19968: jis0212<<14 | 0x3F<<7 | 0x4C,
+ 36633 - 19968: jis0208<<14 | 0x4C<<7 | 0x2C,
+ 36635 - 19968: jis0208<<14 | 0x4C<<7 | 0x30,
+ 36636 - 19968: jis0208<<14 | 0x4C<<7 | 0x2E,
+ 36637 - 19968: jis0208<<14 | 0x14<<7 | 0x10,
+ 36638 - 19968: jis0212<<14 | 0x3F<<7 | 0x4D,
+ 36639 - 19968: jis0208<<14 | 0x4C<<7 | 0x2F,
+ 36640 - 19968: jis0212<<14 | 0x3F<<7 | 0x4E,
+ 36641 - 19968: jis0212<<14 | 0x3F<<7 | 0x4F,
+ 36643 - 19968: jis0212<<14 | 0x3F<<7 | 0x50,
+ 36645 - 19968: jis0212<<14 | 0x3F<<7 | 0x51,
+ 36646 - 19968: jis0208<<14 | 0x4C<<7 | 0x32,
+ 36647 - 19968: jis0212<<14 | 0x3F<<7 | 0x52,
+ 36648 - 19968: jis0212<<14 | 0x3F<<7 | 0x53,
+ 36649 - 19968: jis0208<<14 | 0x26<<7 | 0x39,
+ 36650 - 19968: jis0208<<14 | 0x2D<<7 | 0x37,
+ 36652 - 19968: jis0212<<14 | 0x3F<<7 | 0x54,
+ 36653 - 19968: jis0212<<14 | 0x3F<<7 | 0x55,
+ 36654 - 19968: jis0212<<14 | 0x3F<<7 | 0x56,
+ 36655 - 19968: jis0208<<14 | 0x1C<<7 | 0x13,
+ 36659 - 19968: jis0208<<14 | 0x4C<<7 | 0x33,
+ 36660 - 19968: jis0212<<14 | 0x3F<<7 | 0x57,
+ 36661 - 19968: jis0212<<14 | 0x3F<<7 | 0x58,
+ 36662 - 19968: jis0212<<14 | 0x3F<<7 | 0x59,
+ 36663 - 19968: jis0212<<14 | 0x3F<<7 | 0x5A,
+ 36664 - 19968: jis0208<<14 | 0x2C<<7 | 0x01,
+ 36665 - 19968: jis0208<<14 | 0x4C<<7 | 0x35,
+ 36666 - 19968: jis0212<<14 | 0x3F<<7 | 0x5B,
+ 36667 - 19968: jis0208<<14 | 0x4C<<7 | 0x34,
+ 36670 - 19968: jis0208<<14 | 0x4C<<7 | 0x38,
+ 36671 - 19968: jis0208<<14 | 0x2C<<7 | 0x20,
+ 36672 - 19968: jis0212<<14 | 0x3F<<7 | 0x5C,
+ 36673 - 19968: jis0212<<14 | 0x3F<<7 | 0x5D,
+ 36674 - 19968: jis0208<<14 | 0x4C<<7 | 0x37,
+ 36675 - 19968: jis0212<<14 | 0x40<<7 | 0x00,
+ 36676 - 19968: jis0208<<14 | 0x12<<7 | 0x4C,
+ 36677 - 19968: jis0208<<14 | 0x4C<<7 | 0x36,
+ 36678 - 19968: jis0208<<14 | 0x4C<<7 | 0x3B,
+ 36679 - 19968: jis0212<<14 | 0x40<<7 | 0x01,
+ 36681 - 19968: jis0208<<14 | 0x4C<<7 | 0x3A,
+ 36684 - 19968: jis0208<<14 | 0x4C<<7 | 0x39,
+ 36685 - 19968: jis0208<<14 | 0x24<<7 | 0x11,
+ 36686 - 19968: jis0208<<14 | 0x4C<<7 | 0x3C,
+ 36687 - 19968: jis0212<<14 | 0x40<<7 | 0x02,
+ 36689 - 19968: jis0212<<14 | 0x40<<7 | 0x03,
+ 36690 - 19968: jis0212<<14 | 0x40<<7 | 0x04,
+ 36691 - 19968: jis0212<<14 | 0x40<<7 | 0x05,
+ 36692 - 19968: jis0212<<14 | 0x40<<7 | 0x06,
+ 36693 - 19968: jis0212<<14 | 0x40<<7 | 0x07,
+ 36695 - 19968: jis0208<<14 | 0x4C<<7 | 0x3D,
+ 36696 - 19968: jis0212<<14 | 0x40<<7 | 0x08,
+ 36700 - 19968: jis0208<<14 | 0x4C<<7 | 0x3E,
+ 36701 - 19968: jis0212<<14 | 0x40<<7 | 0x09,
+ 36702 - 19968: jis0212<<14 | 0x40<<7 | 0x0A,
+ 36703 - 19968: jis0208<<14 | 0x18<<7 | 0x4B,
+ 36705 - 19968: jis0208<<14 | 0x16<<7 | 0x04,
+ 36706 - 19968: jis0208<<14 | 0x4C<<7 | 0x3F,
+ 36707 - 19968: jis0208<<14 | 0x4C<<7 | 0x40,
+ 36708 - 19968: jis0208<<14 | 0x4C<<7 | 0x41,
+ 36709 - 19968: jis0212<<14 | 0x40<<7 | 0x0B,
+ 36763 - 19968: jis0208<<14 | 0x1E<<7 | 0x28,
+ 36764 - 19968: jis0208<<14 | 0x4C<<7 | 0x42,
+ 36765 - 19968: jis0212<<14 | 0x40<<7 | 0x0C,
+ 36766 - 19968: jis0208<<14 | 0x1B<<7 | 0x0C,
+ 36767 - 19968: jis0208<<14 | 0x4C<<7 | 0x43,
+ 36768 - 19968: jis0212<<14 | 0x40<<7 | 0x0D,
+ 36769 - 19968: jis0212<<14 | 0x40<<7 | 0x0E,
+ 36771 - 19968: jis0208<<14 | 0x4C<<7 | 0x44,
+ 36772 - 19968: jis0212<<14 | 0x40<<7 | 0x0F,
+ 36773 - 19968: jis0212<<14 | 0x40<<7 | 0x10,
+ 36774 - 19968: jis0212<<14 | 0x40<<7 | 0x11,
+ 36775 - 19968: jis0208<<14 | 0x31<<7 | 0x00,
+ 36776 - 19968: jis0208<<14 | 0x30<<7 | 0x5D,
+ 36781 - 19968: jis0208<<14 | 0x4C<<7 | 0x45,
+ 36782 - 19968: jis0208<<14 | 0x44<<7 | 0x4F,
+ 36783 - 19968: jis0208<<14 | 0x4C<<7 | 0x46,
+ 36784 - 19968: jis0208<<14 | 0x22<<7 | 0x03,
+ 36785 - 19968: jis0208<<14 | 0x1E<<7 | 0x0A,
+ 36786 - 19968: jis0208<<14 | 0x26<<7 | 0x1F,
+ 36789 - 19968: jis0212<<14 | 0x40<<7 | 0x12,
+ 36790 - 19968: jis0212<<14 | 0x40<<7 | 0x13,
+ 36791 - 19968: jis0208<<14 | 0x4C<<7 | 0x47,
+ 36792 - 19968: jis0212<<14 | 0x40<<7 | 0x14,
+ 36794 - 19968: jis0208<<14 | 0x29<<7 | 0x34,
+ 36795 - 19968: jis0208<<14 | 0x23<<7 | 0x33,
+ 36796 - 19968: jis0208<<14 | 0x18<<7 | 0x5D,
+ 36798 - 19968: jis0212<<14 | 0x40<<7 | 0x15,
+ 36799 - 19968: jis0208<<14 | 0x22<<7 | 0x08,
+ 36800 - 19968: jis0212<<14 | 0x40<<7 | 0x16,
+ 36801 - 19968: jis0212<<14 | 0x40<<7 | 0x17,
+ 36802 - 19968: jis0208<<14 | 0x10<<7 | 0x09,
+ 36804 - 19968: jis0208<<14 | 0x2A<<7 | 0x57,
+ 36805 - 19968: jis0208<<14 | 0x1E<<7 | 0x36,
+ 36806 - 19968: jis0212<<14 | 0x40<<7 | 0x18,
+ 36810 - 19968: jis0212<<14 | 0x40<<7 | 0x19,
+ 36811 - 19968: jis0212<<14 | 0x40<<7 | 0x1A,
+ 36813 - 19968: jis0212<<14 | 0x40<<7 | 0x1B,
+ 36814 - 19968: jis0208<<14 | 0x16<<7 | 0x3D,
+ 36816 - 19968: jis0212<<14 | 0x40<<7 | 0x1C,
+ 36817 - 19968: jis0208<<14 | 0x15<<7 | 0x40,
+ 36818 - 19968: jis0212<<14 | 0x40<<7 | 0x1D,
+ 36819 - 19968: jis0212<<14 | 0x40<<7 | 0x1E,
+ 36820 - 19968: jis0208<<14 | 0x29<<7 | 0x35,
+ 36821 - 19968: jis0212<<14 | 0x40<<7 | 0x1F,
+ 36826 - 19968: jis0208<<14 | 0x4C<<7 | 0x48,
+ 36832 - 19968: jis0212<<14 | 0x40<<7 | 0x20,
+ 36834 - 19968: jis0208<<14 | 0x4C<<7 | 0x4A,
+ 36835 - 19968: jis0212<<14 | 0x40<<7 | 0x21,
+ 36836 - 19968: jis0212<<14 | 0x40<<7 | 0x22,
+ 36837 - 19968: jis0208<<14 | 0x4C<<7 | 0x49,
+ 36838 - 19968: jis0208<<14 | 0x11<<7 | 0x3F,
+ 36840 - 19968: jis0212<<14 | 0x40<<7 | 0x23,
+ 36841 - 19968: jis0208<<14 | 0x25<<7 | 0x55,
+ 36842 - 19968: jis0208<<14 | 0x4C<<7 | 0x4B,
+ 36843 - 19968: jis0208<<14 | 0x26<<7 | 0x56,
+ 36845 - 19968: jis0208<<14 | 0x24<<7 | 0x12,
+ 36846 - 19968: jis0212<<14 | 0x40<<7 | 0x24,
+ 36847 - 19968: jis0208<<14 | 0x4C<<7 | 0x4C,
+ 36848 - 19968: jis0208<<14 | 0x1C<<7 | 0x31,
+ 36849 - 19968: jis0212<<14 | 0x40<<7 | 0x25,
+ 36852 - 19968: jis0208<<14 | 0x4C<<7 | 0x4E,
+ 36853 - 19968: jis0212<<14 | 0x40<<7 | 0x26,
+ 36854 - 19968: jis0212<<14 | 0x40<<7 | 0x27,
+ 36855 - 19968: jis0208<<14 | 0x2B<<7 | 0x21,
+ 36856 - 19968: jis0208<<14 | 0x4C<<7 | 0x5D,
+ 36857 - 19968: jis0208<<14 | 0x4C<<7 | 0x50,
+ 36858 - 19968: jis0208<<14 | 0x4C<<7 | 0x51,
+ 36859 - 19968: jis0212<<14 | 0x40<<7 | 0x28,
+ 36861 - 19968: jis0208<<14 | 0x23<<7 | 0x28,
+ 36862 - 19968: jis0212<<14 | 0x40<<7 | 0x29,
+ 36864 - 19968: jis0208<<14 | 0x21<<7 | 0x3F,
+ 36865 - 19968: jis0208<<14 | 0x20<<7 | 0x56,
+ 36866 - 19968: jis0212<<14 | 0x40<<7 | 0x2A,
+ 36867 - 19968: jis0208<<14 | 0x25<<7 | 0x07,
+ 36868 - 19968: jis0212<<14 | 0x40<<7 | 0x2B,
+ 36869 - 19968: jis0208<<14 | 0x4C<<7 | 0x4F,
+ 36870 - 19968: jis0208<<14 | 0x14<<7 | 0x34,
+ 36872 - 19968: jis0212<<14 | 0x40<<7 | 0x2C,
+ 36875 - 19968: jis0208<<14 | 0x4C<<7 | 0x58,
+ 36876 - 19968: jis0212<<14 | 0x40<<7 | 0x2D,
+ 36877 - 19968: jis0208<<14 | 0x4C<<7 | 0x55,
+ 36878 - 19968: jis0208<<14 | 0x4D<<7 | 0x04,
+ 36879 - 19968: jis0208<<14 | 0x25<<7 | 0x08,
+ 36880 - 19968: jis0208<<14 | 0x22<<7 | 0x3F,
+ 36881 - 19968: jis0208<<14 | 0x4C<<7 | 0x52,
+ 36883 - 19968: jis0208<<14 | 0x23<<7 | 0x5D,
+ 36884 - 19968: jis0208<<14 | 0x24<<7 | 0x32,
+ 36885 - 19968: jis0208<<14 | 0x4C<<7 | 0x53,
+ 36886 - 19968: jis0208<<14 | 0x4C<<7 | 0x57,
+ 36887 - 19968: jis0208<<14 | 0x1E<<7 | 0x3F,
+ 36888 - 19968: jis0212<<14 | 0x40<<7 | 0x2E,
+ 36889 - 19968: jis0208<<14 | 0x26<<7 | 0x46,
+ 36890 - 19968: jis0208<<14 | 0x23<<7 | 0x2B,
+ 36891 - 19968: jis0212<<14 | 0x40<<7 | 0x2F,
+ 36893 - 19968: jis0208<<14 | 0x1F<<7 | 0x21,
+ 36894 - 19968: jis0208<<14 | 0x4C<<7 | 0x56,
+ 36895 - 19968: jis0208<<14 | 0x21<<7 | 0x0D,
+ 36896 - 19968: jis0208<<14 | 0x21<<7 | 0x03,
+ 36897 - 19968: jis0208<<14 | 0x4C<<7 | 0x54,
+ 36898 - 19968: jis0208<<14 | 0x0F<<7 | 0x08,
+ 36899 - 19968: jis0208<<14 | 0x2E<<7 | 0x01,
+ 36903 - 19968: jis0208<<14 | 0x4C<<7 | 0x59,
+ 36904 - 19968: jis0212<<14 | 0x40<<7 | 0x30,
+ 36905 - 19968: jis0212<<14 | 0x40<<7 | 0x31,
+ 36906 - 19968: jis0212<<14 | 0x40<<7 | 0x33,
+ 36908 - 19968: jis0212<<14 | 0x40<<7 | 0x34,
+ 36909 - 19968: jis0212<<14 | 0x40<<7 | 0x35,
+ 36910 - 19968: jis0208<<14 | 0x21<<7 | 0x40,
+ 36911 - 19968: jis0212<<14 | 0x40<<7 | 0x32,
+ 36913 - 19968: jis0208<<14 | 0x1C<<7 | 0x14,
+ 36914 - 19968: jis0208<<14 | 0x1E<<7 | 0x29,
+ 36915 - 19968: jis0212<<14 | 0x40<<7 | 0x36,
+ 36916 - 19968: jis0212<<14 | 0x40<<7 | 0x37,
+ 36917 - 19968: jis0208<<14 | 0x4C<<7 | 0x5B,
+ 36918 - 19968: jis0208<<14 | 0x4C<<7 | 0x5A,
+ 36919 - 19968: jis0212<<14 | 0x40<<7 | 0x38,
+ 36920 - 19968: jis0208<<14 | 0x0F<<7 | 0x4E,
+ 36921 - 19968: jis0208<<14 | 0x4C<<7 | 0x5C,
+ 36924 - 19968: jis0208<<14 | 0x28<<7 | 0x0E,
+ 36926 - 19968: jis0208<<14 | 0x4D<<7 | 0x06,
+ 36927 - 19968: jis0212<<14 | 0x40<<7 | 0x39,
+ 36929 - 19968: jis0208<<14 | 0x25<<7 | 0x3A,
+ 36930 - 19968: jis0208<<14 | 0x1E<<7 | 0x4A,
+ 36931 - 19968: jis0212<<14 | 0x40<<7 | 0x3A,
+ 36932 - 19968: jis0212<<14 | 0x40<<7 | 0x3B,
+ 36933 - 19968: jis0208<<14 | 0x22<<7 | 0x38,
+ 36935 - 19968: jis0208<<14 | 0x15<<7 | 0x57,
+ 36937 - 19968: jis0208<<14 | 0x4D<<7 | 0x05,
+ 36938 - 19968: jis0208<<14 | 0x2C<<7 | 0x16,
+ 36939 - 19968: jis0208<<14 | 0x10<<7 | 0x1E,
+ 36940 - 19968: jis0212<<14 | 0x40<<7 | 0x3C,
+ 36941 - 19968: jis0208<<14 | 0x29<<7 | 0x36,
+ 36942 - 19968: jis0208<<14 | 0x11<<7 | 0x40,
+ 36943 - 19968: jis0208<<14 | 0x4D<<7 | 0x00,
+ 36944 - 19968: jis0208<<14 | 0x4D<<7 | 0x01,
+ 36945 - 19968: jis0208<<14 | 0x4D<<7 | 0x02,
+ 36946 - 19968: jis0208<<14 | 0x4D<<7 | 0x03,
+ 36947 - 19968: jis0208<<14 | 0x25<<7 | 0x1A,
+ 36948 - 19968: jis0208<<14 | 0x22<<7 | 0x02,
+ 36949 - 19968: jis0208<<14 | 0x0F<<7 | 0x42,
+ 36950 - 19968: jis0208<<14 | 0x4D<<7 | 0x07,
+ 36952 - 19968: jis0208<<14 | 0x4D<<7 | 0x08,
+ 36953 - 19968: jis0208<<14 | 0x53<<7 | 0x02,
+ 36955 - 19968: jis0212<<14 | 0x40<<7 | 0x3D,
+ 36956 - 19968: jis0208<<14 | 0x21<<7 | 0x1C,
+ 36957 - 19968: jis0212<<14 | 0x40<<7 | 0x3E,
+ 36958 - 19968: jis0208<<14 | 0x4D<<7 | 0x09,
+ 36960 - 19968: jis0208<<14 | 0x10<<7 | 0x52,
+ 36961 - 19968: jis0208<<14 | 0x20<<7 | 0x2B,
+ 36962 - 19968: jis0212<<14 | 0x40<<7 | 0x3F,
+ 36963 - 19968: jis0208<<14 | 0x17<<7 | 0x0E,
+ 36965 - 19968: jis0208<<14 | 0x2C<<7 | 0x39,
+ 36966 - 19968: jis0212<<14 | 0x40<<7 | 0x40,
+ 36967 - 19968: jis0208<<14 | 0x5A<<7 | 0x58,
+ 36968 - 19968: jis0208<<14 | 0x4D<<7 | 0x0A,
+ 36969 - 19968: jis0208<<14 | 0x24<<7 | 0x0B,
+ 36972 - 19968: jis0212<<14 | 0x40<<7 | 0x42,
+ 36973 - 19968: jis0208<<14 | 0x20<<7 | 0x57,
+ 36974 - 19968: jis0208<<14 | 0x1B<<7 | 0x36,
+ 36975 - 19968: jis0208<<14 | 0x4D<<7 | 0x0B,
+ 36976 - 19968: jis0212<<14 | 0x40<<7 | 0x43,
+ 36978 - 19968: jis0208<<14 | 0x4D<<7 | 0x0E,
+ 36980 - 19968: jis0212<<14 | 0x40<<7 | 0x44,
+ 36981 - 19968: jis0208<<14 | 0x1C<<7 | 0x44,
+ 36982 - 19968: jis0208<<14 | 0x4D<<7 | 0x0C,
+ 36983 - 19968: jis0208<<14 | 0x20<<7 | 0x0A,
+ 36984 - 19968: jis0208<<14 | 0x20<<7 | 0x09,
+ 36985 - 19968: jis0212<<14 | 0x40<<7 | 0x45,
+ 36986 - 19968: jis0208<<14 | 0x0F<<7 | 0x43,
+ 36988 - 19968: jis0208<<14 | 0x2D<<7 | 0x2A,
+ 36989 - 19968: jis0208<<14 | 0x4D<<7 | 0x10,
+ 36991 - 19968: jis0208<<14 | 0x27<<7 | 0x51,
+ 36992 - 19968: jis0208<<14 | 0x4D<<7 | 0x12,
+ 36993 - 19968: jis0208<<14 | 0x4D<<7 | 0x11,
+ 36994 - 19968: jis0208<<14 | 0x4D<<7 | 0x0F,
+ 36995 - 19968: jis0208<<14 | 0x42<<7 | 0x43,
+ 36996 - 19968: jis0208<<14 | 0x13<<7 | 0x33,
+ 36997 - 19968: jis0212<<14 | 0x40<<7 | 0x46,
+ 36999 - 19968: jis0208<<14 | 0x4C<<7 | 0x4D,
+ 37000 - 19968: jis0212<<14 | 0x40<<7 | 0x47,
+ 37001 - 19968: jis0208<<14 | 0x4D<<7 | 0x14,
+ 37002 - 19968: jis0208<<14 | 0x4D<<7 | 0x13,
+ 37003 - 19968: jis0212<<14 | 0x40<<7 | 0x48,
+ 37004 - 19968: jis0212<<14 | 0x40<<7 | 0x49,
+ 37006 - 19968: jis0212<<14 | 0x40<<7 | 0x4A,
+ 37007 - 19968: jis0208<<14 | 0x4D<<7 | 0x15,
+ 37008 - 19968: jis0212<<14 | 0x40<<7 | 0x4B,
+ 37009 - 19968: jis0208<<14 | 0x2C<<7 | 0x17,
+ 37013 - 19968: jis0212<<14 | 0x40<<7 | 0x4C,
+ 37015 - 19968: jis0212<<14 | 0x40<<7 | 0x4D,
+ 37016 - 19968: jis0212<<14 | 0x40<<7 | 0x4E,
+ 37017 - 19968: jis0212<<14 | 0x40<<7 | 0x4F,
+ 37019 - 19968: jis0212<<14 | 0x40<<7 | 0x50,
+ 37024 - 19968: jis0212<<14 | 0x40<<7 | 0x51,
+ 37025 - 19968: jis0212<<14 | 0x40<<7 | 0x52,
+ 37026 - 19968: jis0212<<14 | 0x40<<7 | 0x53,
+ 37027 - 19968: jis0208<<14 | 0x25<<7 | 0x40,
+ 37029 - 19968: jis0212<<14 | 0x40<<7 | 0x54,
+ 37030 - 19968: jis0208<<14 | 0x2A<<7 | 0x0D,
+ 37032 - 19968: jis0208<<14 | 0x4D<<7 | 0x16,
+ 37034 - 19968: jis0208<<14 | 0x1B<<7 | 0x38,
+ 37039 - 19968: jis0208<<14 | 0x4D<<7 | 0x17,
+ 37040 - 19968: jis0212<<14 | 0x40<<7 | 0x55,
+ 37041 - 19968: jis0208<<14 | 0x4D<<7 | 0x18,
+ 37042 - 19968: jis0212<<14 | 0x40<<7 | 0x56,
+ 37043 - 19968: jis0212<<14 | 0x40<<7 | 0x57,
+ 37044 - 19968: jis0212<<14 | 0x40<<7 | 0x58,
+ 37045 - 19968: jis0208<<14 | 0x4D<<7 | 0x19,
+ 37046 - 19968: jis0212<<14 | 0x40<<7 | 0x59,
+ 37048 - 19968: jis0208<<14 | 0x24<<7 | 0x00,
+ 37053 - 19968: jis0212<<14 | 0x40<<7 | 0x5A,
+ 37054 - 19968: jis0212<<14 | 0x40<<7 | 0x5C,
+ 37057 - 19968: jis0208<<14 | 0x0F<<7 | 0x49,
+ 37059 - 19968: jis0212<<14 | 0x40<<7 | 0x5D,
+ 37060 - 19968: jis0212<<14 | 0x41<<7 | 0x00,
+ 37061 - 19968: jis0212<<14 | 0x41<<7 | 0x01,
+ 37063 - 19968: jis0212<<14 | 0x41<<7 | 0x02,
+ 37064 - 19968: jis0212<<14 | 0x41<<7 | 0x03,
+ 37066 - 19968: jis0208<<14 | 0x18<<7 | 0x38,
+ 37068 - 19968: jis0212<<14 | 0x40<<7 | 0x5B,
+ 37070 - 19968: jis0208<<14 | 0x2E<<7 | 0x19,
+ 37074 - 19968: jis0212<<14 | 0x41<<7 | 0x0C,
+ 37077 - 19968: jis0212<<14 | 0x41<<7 | 0x04,
+ 37079 - 19968: jis0212<<14 | 0x41<<7 | 0x05,
+ 37080 - 19968: jis0212<<14 | 0x41<<7 | 0x06,
+ 37081 - 19968: jis0212<<14 | 0x41<<7 | 0x07,
+ 37083 - 19968: jis0208<<14 | 0x4D<<7 | 0x1D,
+ 37084 - 19968: jis0212<<14 | 0x41<<7 | 0x08,
+ 37085 - 19968: jis0212<<14 | 0x41<<7 | 0x09,
+ 37086 - 19968: jis0208<<14 | 0x5A<<7 | 0x59,
+ 37087 - 19968: jis0212<<14 | 0x41<<7 | 0x0A,
+ 37089 - 19968: jis0208<<14 | 0x16<<7 | 0x13,
+ 37090 - 19968: jis0208<<14 | 0x4D<<7 | 0x1A,
+ 37092 - 19968: jis0208<<14 | 0x4D<<7 | 0x1B,
+ 37093 - 19968: jis0212<<14 | 0x41<<7 | 0x0B,
+ 37096 - 19968: jis0208<<14 | 0x28<<7 | 0x53,
+ 37099 - 19968: jis0212<<14 | 0x41<<7 | 0x0E,
+ 37101 - 19968: jis0208<<14 | 0x12<<7 | 0x33,
+ 37103 - 19968: jis0212<<14 | 0x41<<7 | 0x0F,
+ 37104 - 19968: jis0212<<14 | 0x41<<7 | 0x10,
+ 37108 - 19968: jis0212<<14 | 0x41<<7 | 0x11,
+ 37109 - 19968: jis0208<<14 | 0x2C<<7 | 0x18,
+ 37110 - 19968: jis0212<<14 | 0x41<<7 | 0x0D,
+ 37111 - 19968: jis0208<<14 | 0x15<<7 | 0x1E,
+ 37117 - 19968: jis0208<<14 | 0x24<<7 | 0x33,
+ 37118 - 19968: jis0212<<14 | 0x41<<7 | 0x12,
+ 37119 - 19968: jis0212<<14 | 0x41<<7 | 0x13,
+ 37120 - 19968: jis0212<<14 | 0x41<<7 | 0x14,
+ 37122 - 19968: jis0208<<14 | 0x4D<<7 | 0x1E,
+ 37124 - 19968: jis0212<<14 | 0x41<<7 | 0x15,
+ 37125 - 19968: jis0212<<14 | 0x41<<7 | 0x16,
+ 37126 - 19968: jis0212<<14 | 0x41<<7 | 0x17,
+ 37128 - 19968: jis0212<<14 | 0x41<<7 | 0x18,
+ 37133 - 19968: jis0212<<14 | 0x41<<7 | 0x19,
+ 37136 - 19968: jis0212<<14 | 0x41<<7 | 0x1A,
+ 37138 - 19968: jis0208<<14 | 0x4D<<7 | 0x1F,
+ 37140 - 19968: jis0212<<14 | 0x41<<7 | 0x1B,
+ 37141 - 19968: jis0208<<14 | 0x5A<<7 | 0x5B,
+ 37142 - 19968: jis0212<<14 | 0x41<<7 | 0x1C,
+ 37143 - 19968: jis0212<<14 | 0x41<<7 | 0x1D,
+ 37144 - 19968: jis0212<<14 | 0x41<<7 | 0x1E,
+ 37145 - 19968: jis0208<<14 | 0x4D<<7 | 0x20,
+ 37146 - 19968: jis0212<<14 | 0x41<<7 | 0x1F,
+ 37148 - 19968: jis0212<<14 | 0x41<<7 | 0x20,
+ 37150 - 19968: jis0212<<14 | 0x41<<7 | 0x21,
+ 37152 - 19968: jis0212<<14 | 0x41<<7 | 0x22,
+ 37154 - 19968: jis0212<<14 | 0x41<<7 | 0x24,
+ 37155 - 19968: jis0212<<14 | 0x41<<7 | 0x25,
+ 37157 - 19968: jis0212<<14 | 0x41<<7 | 0x23,
+ 37159 - 19968: jis0208<<14 | 0x5A<<7 | 0x5C,
+ 37161 - 19968: jis0212<<14 | 0x41<<7 | 0x27,
+ 37165 - 19968: jis0208<<14 | 0x24<<7 | 0x01,
+ 37166 - 19968: jis0212<<14 | 0x41<<7 | 0x28,
+ 37167 - 19968: jis0212<<14 | 0x41<<7 | 0x29,
+ 37168 - 19968: jis0208<<14 | 0x4D<<7 | 0x22,
+ 37169 - 19968: jis0212<<14 | 0x41<<7 | 0x2A,
+ 37170 - 19968: jis0208<<14 | 0x4D<<7 | 0x21,
+ 37172 - 19968: jis0212<<14 | 0x41<<7 | 0x2B,
+ 37174 - 19968: jis0212<<14 | 0x41<<7 | 0x2C,
+ 37175 - 19968: jis0212<<14 | 0x41<<7 | 0x2D,
+ 37177 - 19968: jis0212<<14 | 0x41<<7 | 0x2E,
+ 37178 - 19968: jis0212<<14 | 0x41<<7 | 0x2F,
+ 37180 - 19968: jis0212<<14 | 0x41<<7 | 0x30,
+ 37181 - 19968: jis0212<<14 | 0x41<<7 | 0x31,
+ 37187 - 19968: jis0212<<14 | 0x41<<7 | 0x32,
+ 37191 - 19968: jis0212<<14 | 0x41<<7 | 0x33,
+ 37192 - 19968: jis0212<<14 | 0x41<<7 | 0x34,
+ 37193 - 19968: jis0208<<14 | 0x25<<7 | 0x32,
+ 37194 - 19968: jis0208<<14 | 0x4D<<7 | 0x23,
+ 37195 - 19968: jis0208<<14 | 0x1C<<7 | 0x15,
+ 37196 - 19968: jis0208<<14 | 0x1B<<7 | 0x3F,
+ 37197 - 19968: jis0208<<14 | 0x26<<7 | 0x3A,
+ 37198 - 19968: jis0208<<14 | 0x22<<7 | 0x50,
+ 37199 - 19968: jis0212<<14 | 0x41<<7 | 0x35,
+ 37202 - 19968: jis0208<<14 | 0x1B<<7 | 0x51,
+ 37203 - 19968: jis0212<<14 | 0x41<<7 | 0x36,
+ 37204 - 19968: jis0208<<14 | 0x1E<<7 | 0x4B,
+ 37206 - 19968: jis0208<<14 | 0x4D<<7 | 0x24,
+ 37207 - 19968: jis0212<<14 | 0x41<<7 | 0x37,
+ 37208 - 19968: jis0208<<14 | 0x4D<<7 | 0x25,
+ 37209 - 19968: jis0212<<14 | 0x41<<7 | 0x38,
+ 37210 - 19968: jis0212<<14 | 0x41<<7 | 0x39,
+ 37211 - 19968: jis0212<<14 | 0x41<<7 | 0x3A,
+ 37217 - 19968: jis0212<<14 | 0x41<<7 | 0x3B,
+ 37218 - 19968: jis0208<<14 | 0x1E<<7 | 0x3C,
+ 37219 - 19968: jis0208<<14 | 0x4D<<7 | 0x26,
+ 37220 - 19968: jis0212<<14 | 0x41<<7 | 0x3C,
+ 37221 - 19968: jis0208<<14 | 0x4D<<7 | 0x27,
+ 37223 - 19968: jis0212<<14 | 0x41<<7 | 0x3D,
+ 37225 - 19968: jis0208<<14 | 0x4D<<7 | 0x28,
+ 37226 - 19968: jis0208<<14 | 0x2C<<7 | 0x4E,
+ 37228 - 19968: jis0208<<14 | 0x1C<<7 | 0x16,
+ 37229 - 19968: jis0212<<14 | 0x41<<7 | 0x3E,
+ 37234 - 19968: jis0208<<14 | 0x4D<<7 | 0x2A,
+ 37235 - 19968: jis0208<<14 | 0x4D<<7 | 0x29,
+ 37236 - 19968: jis0212<<14 | 0x41<<7 | 0x3F,
+ 37237 - 19968: jis0208<<14 | 0x18<<7 | 0x39,
+ 37239 - 19968: jis0208<<14 | 0x18<<7 | 0x52,
+ 37240 - 19968: jis0208<<14 | 0x1A<<7 | 0x1F,
+ 37241 - 19968: jis0212<<14 | 0x41<<7 | 0x40,
+ 37242 - 19968: jis0212<<14 | 0x41<<7 | 0x41,
+ 37243 - 19968: jis0212<<14 | 0x41<<7 | 0x42,
+ 37249 - 19968: jis0212<<14 | 0x41<<7 | 0x43,
+ 37250 - 19968: jis0208<<14 | 0x4D<<7 | 0x2D,
+ 37251 - 19968: jis0212<<14 | 0x41<<7 | 0x44,
+ 37253 - 19968: jis0212<<14 | 0x41<<7 | 0x45,
+ 37254 - 19968: jis0212<<14 | 0x41<<7 | 0x46,
+ 37255 - 19968: jis0208<<14 | 0x1C<<7 | 0x45,
+ 37257 - 19968: jis0208<<14 | 0x4D<<7 | 0x2C,
+ 37258 - 19968: jis0212<<14 | 0x41<<7 | 0x47,
+ 37259 - 19968: jis0208<<14 | 0x4D<<7 | 0x2B,
+ 37261 - 19968: jis0208<<14 | 0x21<<7 | 0x48,
+ 37262 - 19968: jis0212<<14 | 0x41<<7 | 0x48,
+ 37264 - 19968: jis0208<<14 | 0x17<<7 | 0x4E,
+ 37265 - 19968: jis0212<<14 | 0x41<<7 | 0x49,
+ 37266 - 19968: jis0208<<14 | 0x1F<<7 | 0x22,
+ 37267 - 19968: jis0212<<14 | 0x41<<7 | 0x4A,
+ 37268 - 19968: jis0212<<14 | 0x41<<7 | 0x4B,
+ 37269 - 19968: jis0212<<14 | 0x41<<7 | 0x4C,
+ 37271 - 19968: jis0208<<14 | 0x27<<7 | 0x0F,
+ 37272 - 19968: jis0212<<14 | 0x41<<7 | 0x4D,
+ 37276 - 19968: jis0208<<14 | 0x1C<<7 | 0x18,
+ 37278 - 19968: jis0212<<14 | 0x41<<7 | 0x4E,
+ 37281 - 19968: jis0212<<14 | 0x41<<7 | 0x4F,
+ 37282 - 19968: jis0208<<14 | 0x4D<<7 | 0x2E,
+ 37284 - 19968: jis0208<<14 | 0x1D<<7 | 0x3E,
+ 37286 - 19968: jis0212<<14 | 0x41<<7 | 0x50,
+ 37288 - 19968: jis0212<<14 | 0x41<<7 | 0x51,
+ 37290 - 19968: jis0208<<14 | 0x4D<<7 | 0x31,
+ 37291 - 19968: jis0208<<14 | 0x4D<<7 | 0x2F,
+ 37292 - 19968: jis0212<<14 | 0x41<<7 | 0x52,
+ 37293 - 19968: jis0212<<14 | 0x41<<7 | 0x53,
+ 37294 - 19968: jis0212<<14 | 0x41<<7 | 0x54,
+ 37295 - 19968: jis0208<<14 | 0x4D<<7 | 0x30,
+ 37296 - 19968: jis0212<<14 | 0x41<<7 | 0x55,
+ 37297 - 19968: jis0212<<14 | 0x41<<7 | 0x56,
+ 37298 - 19968: jis0212<<14 | 0x41<<7 | 0x57,
+ 37299 - 19968: jis0212<<14 | 0x41<<7 | 0x58,
+ 37300 - 19968: jis0208<<14 | 0x4D<<7 | 0x33,
+ 37301 - 19968: jis0208<<14 | 0x4D<<7 | 0x32,
+ 37302 - 19968: jis0212<<14 | 0x41<<7 | 0x59,
+ 37304 - 19968: jis0208<<14 | 0x1D<<7 | 0x59,
+ 37306 - 19968: jis0208<<14 | 0x4D<<7 | 0x34,
+ 37307 - 19968: jis0212<<14 | 0x41<<7 | 0x5A,
+ 37308 - 19968: jis0212<<14 | 0x41<<7 | 0x5B,
+ 37309 - 19968: jis0212<<14 | 0x41<<7 | 0x5C,
+ 37311 - 19968: jis0212<<14 | 0x41<<7 | 0x5D,
+ 37312 - 19968: jis0208<<14 | 0x4D<<7 | 0x35,
+ 37313 - 19968: jis0208<<14 | 0x4D<<7 | 0x36,
+ 37314 - 19968: jis0212<<14 | 0x42<<7 | 0x00,
+ 37315 - 19968: jis0212<<14 | 0x42<<7 | 0x01,
+ 37317 - 19968: jis0212<<14 | 0x42<<7 | 0x02,
+ 37318 - 19968: jis0208<<14 | 0x27<<7 | 0x2F,
+ 37319 - 19968: jis0208<<14 | 0x19<<7 | 0x32,
+ 37320 - 19968: jis0208<<14 | 0x1B<<7 | 0x40,
+ 37321 - 19968: jis0208<<14 | 0x4D<<7 | 0x37,
+ 37323 - 19968: jis0208<<14 | 0x4D<<7 | 0x38,
+ 37324 - 19968: jis0208<<14 | 0x2D<<7 | 0x03,
+ 37325 - 19968: jis0208<<14 | 0x1C<<7 | 0x24,
+ 37326 - 19968: jis0208<<14 | 0x2B<<7 | 0x4D,
+ 37327 - 19968: jis0208<<14 | 0x2D<<7 | 0x2B,
+ 37328 - 19968: jis0208<<14 | 0x4D<<7 | 0x39,
+ 37329 - 19968: jis0208<<14 | 0x15<<7 | 0x41,
+ 37331 - 19968: jis0212<<14 | 0x42<<7 | 0x03,
+ 37332 - 19968: jis0212<<14 | 0x42<<7 | 0x04,
+ 37334 - 19968: jis0208<<14 | 0x4D<<7 | 0x3A,
+ 37335 - 19968: jis0208<<14 | 0x5B<<7 | 0x00,
+ 37336 - 19968: jis0208<<14 | 0x24<<7 | 0x02,
+ 37337 - 19968: jis0212<<14 | 0x42<<7 | 0x06,
+ 37338 - 19968: jis0208<<14 | 0x5A<<7 | 0x5D,
+ 37339 - 19968: jis0208<<14 | 0x4D<<7 | 0x3D,
+ 37340 - 19968: jis0208<<14 | 0x12<<7 | 0x57,
+ 37341 - 19968: jis0208<<14 | 0x1E<<7 | 0x2A,
+ 37342 - 19968: jis0208<<14 | 0x5B<<7 | 0x01,
+ 37343 - 19968: jis0208<<14 | 0x4D<<7 | 0x3B,
+ 37345 - 19968: jis0208<<14 | 0x4D<<7 | 0x3C,
+ 37347 - 19968: jis0208<<14 | 0x23<<7 | 0x3F,
+ 37348 - 19968: jis0208<<14 | 0x5B<<7 | 0x04,
+ 37349 - 19968: jis0208<<14 | 0x5B<<7 | 0x05,
+ 37350 - 19968: jis0208<<14 | 0x2A<<7 | 0x34,
+ 37351 - 19968: jis0208<<14 | 0x15<<7 | 0x5B,
+ 37353 - 19968: jis0212<<14 | 0x42<<7 | 0x0B,
+ 37354 - 19968: jis0212<<14 | 0x42<<7 | 0x0C,
+ 37356 - 19968: jis0212<<14 | 0x42<<7 | 0x0D,
+ 37357 - 19968: jis0208<<14 | 0x5B<<7 | 0x02,
+ 37358 - 19968: jis0208<<14 | 0x5B<<7 | 0x03,
+ 37359 - 19968: jis0212<<14 | 0x42<<7 | 0x10,
+ 37360 - 19968: jis0212<<14 | 0x42<<7 | 0x11,
+ 37361 - 19968: jis0212<<14 | 0x42<<7 | 0x12,
+ 37365 - 19968: jis0208<<14 | 0x4D<<7 | 0x3F,
+ 37366 - 19968: jis0208<<14 | 0x4D<<7 | 0x40,
+ 37367 - 19968: jis0212<<14 | 0x42<<7 | 0x13,
+ 37369 - 19968: jis0212<<14 | 0x42<<7 | 0x14,
+ 37371 - 19968: jis0212<<14 | 0x42<<7 | 0x15,
+ 37372 - 19968: jis0208<<14 | 0x4D<<7 | 0x3E,
+ 37373 - 19968: jis0212<<14 | 0x42<<7 | 0x16,
+ 37375 - 19968: jis0208<<14 | 0x4D<<7 | 0x42,
+ 37376 - 19968: jis0212<<14 | 0x42<<7 | 0x17,
+ 37377 - 19968: jis0212<<14 | 0x42<<7 | 0x18,
+ 37380 - 19968: jis0212<<14 | 0x42<<7 | 0x19,
+ 37381 - 19968: jis0212<<14 | 0x42<<7 | 0x1A,
+ 37382 - 19968: jis0208<<14 | 0x5B<<7 | 0x06,
+ 37383 - 19968: jis0212<<14 | 0x42<<7 | 0x1C,
+ 37385 - 19968: jis0212<<14 | 0x42<<7 | 0x1D,
+ 37386 - 19968: jis0208<<14 | 0x5B<<7 | 0x08,
+ 37388 - 19968: jis0212<<14 | 0x42<<7 | 0x1F,
+ 37389 - 19968: jis0208<<14 | 0x25<<7 | 0x3E,
+ 37390 - 19968: jis0208<<14 | 0x12<<7 | 0x22,
+ 37392 - 19968: jis0208<<14 | 0x5B<<7 | 0x07,
+ 37393 - 19968: jis0208<<14 | 0x4D<<7 | 0x46,
+ 37394 - 19968: jis0212<<14 | 0x42<<7 | 0x21,
+ 37395 - 19968: jis0212<<14 | 0x42<<7 | 0x22,
+ 37396 - 19968: jis0208<<14 | 0x4D<<7 | 0x43,
+ 37397 - 19968: jis0208<<14 | 0x4D<<7 | 0x45,
+ 37398 - 19968: jis0212<<14 | 0x42<<7 | 0x23,
+ 37400 - 19968: jis0212<<14 | 0x42<<7 | 0x24,
+ 37404 - 19968: jis0212<<14 | 0x42<<7 | 0x25,
+ 37405 - 19968: jis0212<<14 | 0x42<<7 | 0x26,
+ 37406 - 19968: jis0208<<14 | 0x4D<<7 | 0x41,
+ 37411 - 19968: jis0212<<14 | 0x42<<7 | 0x27,
+ 37412 - 19968: jis0212<<14 | 0x42<<7 | 0x28,
+ 37413 - 19968: jis0212<<14 | 0x42<<7 | 0x29,
+ 37414 - 19968: jis0212<<14 | 0x42<<7 | 0x2A,
+ 37416 - 19968: jis0212<<14 | 0x42<<7 | 0x2B,
+ 37417 - 19968: jis0208<<14 | 0x4E<<7 | 0x2E,
+ 37420 - 19968: jis0208<<14 | 0x4D<<7 | 0x44,
+ 37422 - 19968: jis0212<<14 | 0x42<<7 | 0x2C,
+ 37423 - 19968: jis0212<<14 | 0x42<<7 | 0x2D,
+ 37424 - 19968: jis0212<<14 | 0x42<<7 | 0x2E,
+ 37427 - 19968: jis0212<<14 | 0x42<<7 | 0x2F,
+ 37428 - 19968: jis0208<<14 | 0x2D<<7 | 0x4A,
+ 37429 - 19968: jis0212<<14 | 0x42<<7 | 0x30,
+ 37430 - 19968: jis0212<<14 | 0x42<<7 | 0x31,
+ 37431 - 19968: jis0208<<14 | 0x17<<7 | 0x39,
+ 37432 - 19968: jis0212<<14 | 0x42<<7 | 0x32,
+ 37433 - 19968: jis0208<<14 | 0x5B<<7 | 0x0F,
+ 37434 - 19968: jis0208<<14 | 0x5B<<7 | 0x09,
+ 37436 - 19968: jis0208<<14 | 0x5B<<7 | 0x0B,
+ 37438 - 19968: jis0212<<14 | 0x42<<7 | 0x36,
+ 37439 - 19968: jis0208<<14 | 0x4D<<7 | 0x4E,
+ 37440 - 19968: jis0208<<14 | 0x5B<<7 | 0x0A,
+ 37442 - 19968: jis0212<<14 | 0x42<<7 | 0x38,
+ 37443 - 19968: jis0212<<14 | 0x42<<7 | 0x39,
+ 37444 - 19968: jis0208<<14 | 0x24<<7 | 0x13,
+ 37445 - 19968: jis0208<<14 | 0x4D<<7 | 0x49,
+ 37446 - 19968: jis0212<<14 | 0x42<<7 | 0x3A,
+ 37447 - 19968: jis0212<<14 | 0x42<<7 | 0x3B,
+ 37448 - 19968: jis0208<<14 | 0x4D<<7 | 0x4C,
+ 37449 - 19968: jis0208<<14 | 0x4D<<7 | 0x4A,
+ 37450 - 19968: jis0212<<14 | 0x42<<7 | 0x3C,
+ 37451 - 19968: jis0208<<14 | 0x4D<<7 | 0x4F,
+ 37453 - 19968: jis0212<<14 | 0x42<<7 | 0x3D,
+ 37454 - 19968: jis0208<<14 | 0x5B<<7 | 0x0C,
+ 37455 - 19968: jis0212<<14 | 0x42<<7 | 0x3F,
+ 37456 - 19968: jis0208<<14 | 0x4D<<7 | 0x50,
+ 37457 - 19968: jis0208<<14 | 0x5B<<7 | 0x0E,
+ 37463 - 19968: jis0208<<14 | 0x4D<<7 | 0x48,
+ 37464 - 19968: jis0212<<14 | 0x42<<7 | 0x41,
+ 37465 - 19968: jis0208<<14 | 0x5B<<7 | 0x0D,
+ 37466 - 19968: jis0208<<14 | 0x4D<<7 | 0x55,
+ 37467 - 19968: jis0208<<14 | 0x10<<7 | 0x53,
+ 37468 - 19968: jis0212<<14 | 0x42<<7 | 0x43,
+ 37469 - 19968: jis0212<<14 | 0x42<<7 | 0x44,
+ 37470 - 19968: jis0208<<14 | 0x4D<<7 | 0x47,
+ 37472 - 19968: jis0212<<14 | 0x42<<7 | 0x45,
+ 37473 - 19968: jis0212<<14 | 0x42<<7 | 0x46,
+ 37474 - 19968: jis0208<<14 | 0x27<<7 | 0x0C,
+ 37476 - 19968: jis0208<<14 | 0x4D<<7 | 0x4B,
+ 37477 - 19968: jis0212<<14 | 0x42<<7 | 0x47,
+ 37478 - 19968: jis0208<<14 | 0x1D<<7 | 0x3F,
+ 37479 - 19968: jis0208<<14 | 0x5B<<7 | 0x10,
+ 37480 - 19968: jis0212<<14 | 0x42<<7 | 0x49,
+ 37481 - 19968: jis0212<<14 | 0x42<<7 | 0x4A,
+ 37486 - 19968: jis0212<<14 | 0x42<<7 | 0x4B,
+ 37487 - 19968: jis0212<<14 | 0x42<<7 | 0x4C,
+ 37488 - 19968: jis0212<<14 | 0x42<<7 | 0x4D,
+ 37489 - 19968: jis0208<<14 | 0x18<<7 | 0x3A,
+ 37493 - 19968: jis0212<<14 | 0x42<<7 | 0x4E,
+ 37494 - 19968: jis0212<<14 | 0x42<<7 | 0x4F,
+ 37495 - 19968: jis0208<<14 | 0x5B<<7 | 0x12,
+ 37496 - 19968: jis0208<<14 | 0x5B<<7 | 0x13,
+ 37497 - 19968: jis0212<<14 | 0x42<<7 | 0x52,
+ 37499 - 19968: jis0212<<14 | 0x42<<7 | 0x53,
+ 37500 - 19968: jis0212<<14 | 0x42<<7 | 0x54,
+ 37501 - 19968: jis0212<<14 | 0x42<<7 | 0x55,
+ 37502 - 19968: jis0208<<14 | 0x2A<<7 | 0x27,
+ 37503 - 19968: jis0212<<14 | 0x42<<7 | 0x56,
+ 37504 - 19968: jis0208<<14 | 0x15<<7 | 0x43,
+ 37507 - 19968: jis0208<<14 | 0x1C<<7 | 0x25,
+ 37509 - 19968: jis0208<<14 | 0x25<<7 | 0x1B,
+ 37512 - 19968: jis0208<<14 | 0x58<<7 | 0x03,
+ 37513 - 19968: jis0212<<14 | 0x42<<7 | 0x58,
+ 37514 - 19968: jis0212<<14 | 0x42<<7 | 0x59,
+ 37517 - 19968: jis0212<<14 | 0x42<<7 | 0x5A,
+ 37518 - 19968: jis0212<<14 | 0x42<<7 | 0x5B,
+ 37521 - 19968: jis0208<<14 | 0x20<<7 | 0x0C,
+ 37522 - 19968: jis0212<<14 | 0x42<<7 | 0x5C,
+ 37523 - 19968: jis0208<<14 | 0x4D<<7 | 0x53,
+ 37525 - 19968: jis0208<<14 | 0x4D<<7 | 0x4D,
+ 37526 - 19968: jis0208<<14 | 0x4D<<7 | 0x52,
+ 37527 - 19968: jis0212<<14 | 0x42<<7 | 0x5D,
+ 37528 - 19968: jis0208<<14 | 0x2B<<7 | 0x22,
+ 37529 - 19968: jis0212<<14 | 0x43<<7 | 0x00,
+ 37530 - 19968: jis0208<<14 | 0x23<<7 | 0x17,
+ 37531 - 19968: jis0208<<14 | 0x4D<<7 | 0x54,
+ 37532 - 19968: jis0208<<14 | 0x4D<<7 | 0x51,
+ 37535 - 19968: jis0212<<14 | 0x43<<7 | 0x01,
+ 37536 - 19968: jis0212<<14 | 0x43<<7 | 0x02,
+ 37540 - 19968: jis0212<<14 | 0x43<<7 | 0x03,
+ 37541 - 19968: jis0212<<14 | 0x43<<7 | 0x04,
+ 37543 - 19968: jis0208<<14 | 0x5B<<7 | 0x11,
+ 37544 - 19968: jis0212<<14 | 0x43<<7 | 0x06,
+ 37547 - 19968: jis0212<<14 | 0x43<<7 | 0x07,
+ 37549 - 19968: jis0208<<14 | 0x20<<7 | 0x0B,
+ 37551 - 19968: jis0212<<14 | 0x43<<7 | 0x08,
+ 37554 - 19968: jis0212<<14 | 0x43<<7 | 0x09,
+ 37558 - 19968: jis0212<<14 | 0x43<<7 | 0x0A,
+ 37559 - 19968: jis0208<<14 | 0x4D<<7 | 0x58,
+ 37560 - 19968: jis0212<<14 | 0x43<<7 | 0x0B,
+ 37561 - 19968: jis0208<<14 | 0x4D<<7 | 0x57,
+ 37562 - 19968: jis0212<<14 | 0x43<<7 | 0x0C,
+ 37563 - 19968: jis0212<<14 | 0x43<<7 | 0x0D,
+ 37564 - 19968: jis0212<<14 | 0x43<<7 | 0x0E,
+ 37565 - 19968: jis0212<<14 | 0x43<<7 | 0x0F,
+ 37567 - 19968: jis0212<<14 | 0x43<<7 | 0x10,
+ 37568 - 19968: jis0212<<14 | 0x43<<7 | 0x11,
+ 37569 - 19968: jis0212<<14 | 0x43<<7 | 0x12,
+ 37570 - 19968: jis0212<<14 | 0x43<<7 | 0x13,
+ 37571 - 19968: jis0212<<14 | 0x43<<7 | 0x14,
+ 37573 - 19968: jis0212<<14 | 0x43<<7 | 0x15,
+ 37574 - 19968: jis0212<<14 | 0x43<<7 | 0x16,
+ 37575 - 19968: jis0212<<14 | 0x43<<7 | 0x17,
+ 37576 - 19968: jis0212<<14 | 0x43<<7 | 0x18,
+ 37579 - 19968: jis0212<<14 | 0x43<<7 | 0x19,
+ 37580 - 19968: jis0212<<14 | 0x43<<7 | 0x1A,
+ 37581 - 19968: jis0212<<14 | 0x43<<7 | 0x1B,
+ 37582 - 19968: jis0212<<14 | 0x43<<7 | 0x1C,
+ 37583 - 19968: jis0208<<14 | 0x4D<<7 | 0x56,
+ 37584 - 19968: jis0208<<14 | 0x5B<<7 | 0x17,
+ 37586 - 19968: jis0208<<14 | 0x2A<<7 | 0x0E,
+ 37587 - 19968: jis0208<<14 | 0x5B<<7 | 0x1B,
+ 37589 - 19968: jis0208<<14 | 0x5B<<7 | 0x19,
+ 37591 - 19968: jis0208<<14 | 0x5B<<7 | 0x15,
+ 37592 - 19968: jis0212<<14 | 0x43<<7 | 0x21,
+ 37593 - 19968: jis0208<<14 | 0x5B<<7 | 0x16,
+ 37596 - 19968: jis0212<<14 | 0x43<<7 | 0x23,
+ 37597 - 19968: jis0212<<14 | 0x43<<7 | 0x24,
+ 37599 - 19968: jis0212<<14 | 0x43<<7 | 0x25,
+ 37600 - 19968: jis0208<<14 | 0x5B<<7 | 0x1A,
+ 37601 - 19968: jis0212<<14 | 0x43<<7 | 0x27,
+ 37603 - 19968: jis0212<<14 | 0x43<<7 | 0x28,
+ 37604 - 19968: jis0208<<14 | 0x1C<<7 | 0x5A,
+ 37605 - 19968: jis0212<<14 | 0x43<<7 | 0x29,
+ 37607 - 19968: jis0208<<14 | 0x5B<<7 | 0x14,
+ 37608 - 19968: jis0212<<14 | 0x43<<7 | 0x2B,
+ 37609 - 19968: jis0208<<14 | 0x4D<<7 | 0x59,
+ 37610 - 19968: jis0208<<14 | 0x29<<7 | 0x3E,
+ 37612 - 19968: jis0212<<14 | 0x43<<7 | 0x2C,
+ 37613 - 19968: jis0208<<14 | 0x10<<7 | 0x33,
+ 37614 - 19968: jis0212<<14 | 0x43<<7 | 0x2D,
+ 37616 - 19968: jis0212<<14 | 0x43<<7 | 0x2E,
+ 37618 - 19968: jis0208<<14 | 0x28<<7 | 0x25,
+ 37619 - 19968: jis0208<<14 | 0x22<<7 | 0x51,
+ 37624 - 19968: jis0208<<14 | 0x14<<7 | 0x57,
+ 37625 - 19968: jis0208<<14 | 0x58<<7 | 0x09,
+ 37626 - 19968: jis0208<<14 | 0x4D<<7 | 0x5B,
+ 37627 - 19968: jis0208<<14 | 0x5B<<7 | 0x1E,
+ 37628 - 19968: jis0208<<14 | 0x18<<7 | 0x3C,
+ 37631 - 19968: jis0208<<14 | 0x5B<<7 | 0x21,
+ 37632 - 19968: jis0212<<14 | 0x43<<7 | 0x32,
+ 37634 - 19968: jis0208<<14 | 0x5B<<7 | 0x23,
+ 37638 - 19968: jis0208<<14 | 0x1A<<7 | 0x0B,
+ 37640 - 19968: jis0212<<14 | 0x43<<7 | 0x34,
+ 37645 - 19968: jis0212<<14 | 0x43<<7 | 0x35,
+ 37647 - 19968: jis0208<<14 | 0x4D<<7 | 0x5A,
+ 37648 - 19968: jis0208<<14 | 0x1E<<7 | 0x4C,
+ 37649 - 19968: jis0212<<14 | 0x43<<7 | 0x36,
+ 37652 - 19968: jis0212<<14 | 0x43<<7 | 0x37,
+ 37653 - 19968: jis0212<<14 | 0x43<<7 | 0x38,
+ 37656 - 19968: jis0208<<14 | 0x1E<<7 | 0x4D,
+ 37657 - 19968: jis0208<<14 | 0x4E<<7 | 0x00,
+ 37658 - 19968: jis0208<<14 | 0x4E<<7 | 0x02,
+ 37660 - 19968: jis0212<<14 | 0x43<<7 | 0x39,
+ 37661 - 19968: jis0208<<14 | 0x5B<<7 | 0x22,
+ 37662 - 19968: jis0208<<14 | 0x5B<<7 | 0x20,
+ 37663 - 19968: jis0212<<14 | 0x43<<7 | 0x3C,
+ 37664 - 19968: jis0208<<14 | 0x1D<<7 | 0x5A,
+ 37665 - 19968: jis0208<<14 | 0x5B<<7 | 0x1D,
+ 37666 - 19968: jis0208<<14 | 0x4E<<7 | 0x01,
+ 37667 - 19968: jis0208<<14 | 0x4E<<7 | 0x03,
+ 37668 - 19968: jis0212<<14 | 0x43<<7 | 0x3E,
+ 37669 - 19968: jis0208<<14 | 0x5B<<7 | 0x1C,
+ 37670 - 19968: jis0208<<14 | 0x15<<7 | 0x32,
+ 37671 - 19968: jis0212<<14 | 0x43<<7 | 0x40,
+ 37672 - 19968: jis0208<<14 | 0x28<<7 | 0x24,
+ 37673 - 19968: jis0212<<14 | 0x43<<7 | 0x41,
+ 37674 - 19968: jis0212<<14 | 0x43<<7 | 0x42,
+ 37675 - 19968: jis0208<<14 | 0x1B<<7 | 0x41,
+ 37676 - 19968: jis0208<<14 | 0x2E<<7 | 0x02,
+ 37678 - 19968: jis0208<<14 | 0x4D<<7 | 0x5D,
+ 37679 - 19968: jis0208<<14 | 0x19<<7 | 0x57,
+ 37682 - 19968: jis0208<<14 | 0x2E<<7 | 0x1E,
+ 37683 - 19968: jis0212<<14 | 0x43<<7 | 0x43,
+ 37684 - 19968: jis0212<<14 | 0x43<<7 | 0x44,
+ 37685 - 19968: jis0208<<14 | 0x4E<<7 | 0x05,
+ 37686 - 19968: jis0212<<14 | 0x43<<7 | 0x45,
+ 37687 - 19968: jis0212<<14 | 0x43<<7 | 0x46,
+ 37690 - 19968: jis0208<<14 | 0x4E<<7 | 0x04,
+ 37691 - 19968: jis0208<<14 | 0x4E<<7 | 0x06,
+ 37700 - 19968: jis0208<<14 | 0x4D<<7 | 0x5C,
+ 37703 - 19968: jis0212<<14 | 0x43<<7 | 0x47,
+ 37704 - 19968: jis0208<<14 | 0x58<<7 | 0x02,
+ 37705 - 19968: jis0212<<14 | 0x43<<7 | 0x49,
+ 37707 - 19968: jis0208<<14 | 0x25<<7 | 0x48,
+ 37709 - 19968: jis0208<<14 | 0x24<<7 | 0x34,
+ 37712 - 19968: jis0212<<14 | 0x43<<7 | 0x4A,
+ 37713 - 19968: jis0212<<14 | 0x43<<7 | 0x4B,
+ 37714 - 19968: jis0212<<14 | 0x43<<7 | 0x4C,
+ 37716 - 19968: jis0208<<14 | 0x23<<7 | 0x36,
+ 37717 - 19968: jis0212<<14 | 0x43<<7 | 0x4D,
+ 37718 - 19968: jis0208<<14 | 0x4E<<7 | 0x0B,
+ 37719 - 19968: jis0208<<14 | 0x5B<<7 | 0x25,
+ 37720 - 19968: jis0212<<14 | 0x43<<7 | 0x4F,
+ 37722 - 19968: jis0212<<14 | 0x43<<7 | 0x50,
+ 37723 - 19968: jis0208<<14 | 0x22<<7 | 0x22,
+ 37724 - 19968: jis0208<<14 | 0x4E<<7 | 0x07,
+ 37726 - 19968: jis0212<<14 | 0x43<<7 | 0x51,
+ 37728 - 19968: jis0208<<14 | 0x4E<<7 | 0x08,
+ 37732 - 19968: jis0212<<14 | 0x43<<7 | 0x52,
+ 37733 - 19968: jis0212<<14 | 0x43<<7 | 0x53,
+ 37735 - 19968: jis0212<<14 | 0x43<<7 | 0x54,
+ 37737 - 19968: jis0212<<14 | 0x43<<7 | 0x55,
+ 37738 - 19968: jis0212<<14 | 0x43<<7 | 0x56,
+ 37740 - 19968: jis0208<<14 | 0x16<<7 | 0x0C,
+ 37741 - 19968: jis0212<<14 | 0x43<<7 | 0x57,
+ 37742 - 19968: jis0208<<14 | 0x4E<<7 | 0x0A,
+ 37743 - 19968: jis0212<<14 | 0x43<<7 | 0x58,
+ 37744 - 19968: jis0208<<14 | 0x5B<<7 | 0x24,
+ 37745 - 19968: jis0212<<14 | 0x43<<7 | 0x5A,
+ 37747 - 19968: jis0212<<14 | 0x43<<7 | 0x5B,
+ 37748 - 19968: jis0212<<14 | 0x43<<7 | 0x5C,
+ 37749 - 19968: jis0208<<14 | 0x17<<7 | 0x0F,
+ 37750 - 19968: jis0212<<14 | 0x43<<7 | 0x5D,
+ 37754 - 19968: jis0212<<14 | 0x44<<7 | 0x00,
+ 37756 - 19968: jis0208<<14 | 0x4E<<7 | 0x09,
+ 37757 - 19968: jis0212<<14 | 0x44<<7 | 0x01,
+ 37758 - 19968: jis0208<<14 | 0x1D<<7 | 0x40,
+ 37759 - 19968: jis0212<<14 | 0x44<<7 | 0x02,
+ 37760 - 19968: jis0212<<14 | 0x44<<7 | 0x03,
+ 37761 - 19968: jis0212<<14 | 0x44<<7 | 0x04,
+ 37762 - 19968: jis0212<<14 | 0x44<<7 | 0x05,
+ 37768 - 19968: jis0212<<14 | 0x44<<7 | 0x06,
+ 37770 - 19968: jis0212<<14 | 0x44<<7 | 0x07,
+ 37771 - 19968: jis0212<<14 | 0x44<<7 | 0x08,
+ 37772 - 19968: jis0208<<14 | 0x12<<7 | 0x58,
+ 37773 - 19968: jis0212<<14 | 0x44<<7 | 0x09,
+ 37775 - 19968: jis0212<<14 | 0x44<<7 | 0x0A,
+ 37778 - 19968: jis0212<<14 | 0x44<<7 | 0x0B,
+ 37780 - 19968: jis0208<<14 | 0x4E<<7 | 0x0F,
+ 37781 - 19968: jis0212<<14 | 0x44<<7 | 0x0C,
+ 37782 - 19968: jis0208<<14 | 0x19<<7 | 0x1E,
+ 37783 - 19968: jis0208<<14 | 0x20<<7 | 0x58,
+ 37784 - 19968: jis0212<<14 | 0x44<<7 | 0x0D,
+ 37786 - 19968: jis0208<<14 | 0x23<<7 | 0x29,
+ 37787 - 19968: jis0212<<14 | 0x44<<7 | 0x0E,
+ 37790 - 19968: jis0212<<14 | 0x44<<7 | 0x0F,
+ 37793 - 19968: jis0212<<14 | 0x44<<7 | 0x10,
+ 37795 - 19968: jis0212<<14 | 0x44<<7 | 0x11,
+ 37796 - 19968: jis0208<<14 | 0x5B<<7 | 0x26,
+ 37798 - 19968: jis0212<<14 | 0x44<<7 | 0x13,
+ 37799 - 19968: jis0208<<14 | 0x12<<7 | 0x1A,
+ 37800 - 19968: jis0212<<14 | 0x44<<7 | 0x14,
+ 37801 - 19968: jis0212<<14 | 0x44<<7 | 0x1A,
+ 37803 - 19968: jis0212<<14 | 0x44<<7 | 0x15,
+ 37804 - 19968: jis0208<<14 | 0x4E<<7 | 0x0D,
+ 37805 - 19968: jis0208<<14 | 0x4E<<7 | 0x0E,
+ 37806 - 19968: jis0208<<14 | 0x23<<7 | 0x22,
+ 37808 - 19968: jis0208<<14 | 0x4E<<7 | 0x0C,
+ 37812 - 19968: jis0212<<14 | 0x44<<7 | 0x16,
+ 37813 - 19968: jis0212<<14 | 0x44<<7 | 0x17,
+ 37814 - 19968: jis0212<<14 | 0x44<<7 | 0x18,
+ 37817 - 19968: jis0208<<14 | 0x4E<<7 | 0x10,
+ 37818 - 19968: jis0212<<14 | 0x44<<7 | 0x19,
+ 37825 - 19968: jis0212<<14 | 0x44<<7 | 0x1B,
+ 37827 - 19968: jis0208<<14 | 0x4E<<7 | 0x16,
+ 37828 - 19968: jis0212<<14 | 0x44<<7 | 0x1C,
+ 37829 - 19968: jis0212<<14 | 0x44<<7 | 0x1D,
+ 37830 - 19968: jis0208<<14 | 0x5B<<7 | 0x27,
+ 37831 - 19968: jis0212<<14 | 0x44<<7 | 0x1F,
+ 37832 - 19968: jis0208<<14 | 0x4E<<7 | 0x19,
+ 37833 - 19968: jis0212<<14 | 0x44<<7 | 0x20,
+ 37834 - 19968: jis0212<<14 | 0x44<<7 | 0x21,
+ 37835 - 19968: jis0212<<14 | 0x44<<7 | 0x22,
+ 37836 - 19968: jis0212<<14 | 0x44<<7 | 0x23,
+ 37837 - 19968: jis0212<<14 | 0x44<<7 | 0x24,
+ 37840 - 19968: jis0208<<14 | 0x4E<<7 | 0x18,
+ 37841 - 19968: jis0208<<14 | 0x24<<7 | 0x0C,
+ 37843 - 19968: jis0212<<14 | 0x44<<7 | 0x25,
+ 37846 - 19968: jis0208<<14 | 0x4E<<7 | 0x11,
+ 37847 - 19968: jis0208<<14 | 0x4E<<7 | 0x12,
+ 37848 - 19968: jis0208<<14 | 0x4E<<7 | 0x15,
+ 37849 - 19968: jis0212<<14 | 0x44<<7 | 0x26,
+ 37852 - 19968: jis0212<<14 | 0x44<<7 | 0x27,
+ 37853 - 19968: jis0208<<14 | 0x4E<<7 | 0x17,
+ 37854 - 19968: jis0208<<14 | 0x5B<<7 | 0x28,
+ 37855 - 19968: jis0212<<14 | 0x44<<7 | 0x29,
+ 37857 - 19968: jis0208<<14 | 0x15<<7 | 0x1F,
+ 37858 - 19968: jis0212<<14 | 0x44<<7 | 0x2A,
+ 37860 - 19968: jis0208<<14 | 0x4E<<7 | 0x1A,
+ 37861 - 19968: jis0208<<14 | 0x4E<<7 | 0x14,
+ 37862 - 19968: jis0212<<14 | 0x44<<7 | 0x2B,
+ 37863 - 19968: jis0212<<14 | 0x44<<7 | 0x2C,
+ 37864 - 19968: jis0208<<14 | 0x4E<<7 | 0x13,
+ 37879 - 19968: jis0212<<14 | 0x44<<7 | 0x2E,
+ 37880 - 19968: jis0208<<14 | 0x5B<<7 | 0x29,
+ 37881 - 19968: jis0212<<14 | 0x44<<7 | 0x2D,
+ 37882 - 19968: jis0212<<14 | 0x44<<7 | 0x30,
+ 37883 - 19968: jis0212<<14 | 0x44<<7 | 0x31,
+ 37885 - 19968: jis0212<<14 | 0x44<<7 | 0x32,
+ 37889 - 19968: jis0212<<14 | 0x44<<7 | 0x33,
+ 37890 - 19968: jis0212<<14 | 0x44<<7 | 0x34,
+ 37891 - 19968: jis0208<<14 | 0x4E<<7 | 0x1E,
+ 37892 - 19968: jis0212<<14 | 0x44<<7 | 0x35,
+ 37895 - 19968: jis0208<<14 | 0x4E<<7 | 0x1F,
+ 37896 - 19968: jis0212<<14 | 0x44<<7 | 0x36,
+ 37897 - 19968: jis0212<<14 | 0x44<<7 | 0x37,
+ 37901 - 19968: jis0212<<14 | 0x44<<7 | 0x38,
+ 37902 - 19968: jis0212<<14 | 0x44<<7 | 0x39,
+ 37903 - 19968: jis0212<<14 | 0x44<<7 | 0x3A,
+ 37904 - 19968: jis0208<<14 | 0x4E<<7 | 0x20,
+ 37907 - 19968: jis0208<<14 | 0x4E<<7 | 0x1D,
+ 37908 - 19968: jis0208<<14 | 0x4E<<7 | 0x1C,
+ 37909 - 19968: jis0212<<14 | 0x44<<7 | 0x3B,
+ 37910 - 19968: jis0212<<14 | 0x44<<7 | 0x3C,
+ 37911 - 19968: jis0212<<14 | 0x44<<7 | 0x3D,
+ 37912 - 19968: jis0208<<14 | 0x1D<<7 | 0x41,
+ 37913 - 19968: jis0208<<14 | 0x25<<7 | 0x09,
+ 37914 - 19968: jis0208<<14 | 0x4E<<7 | 0x1B,
+ 37919 - 19968: jis0212<<14 | 0x44<<7 | 0x3E,
+ 37921 - 19968: jis0208<<14 | 0x4E<<7 | 0x24,
+ 37931 - 19968: jis0208<<14 | 0x4E<<7 | 0x22,
+ 37934 - 19968: jis0212<<14 | 0x44<<7 | 0x3F,
+ 37935 - 19968: jis0212<<14 | 0x44<<7 | 0x40,
+ 37937 - 19968: jis0208<<14 | 0x5B<<7 | 0x2A,
+ 37938 - 19968: jis0212<<14 | 0x44<<7 | 0x42,
+ 37939 - 19968: jis0212<<14 | 0x44<<7 | 0x43,
+ 37940 - 19968: jis0212<<14 | 0x44<<7 | 0x44,
+ 37941 - 19968: jis0208<<14 | 0x4E<<7 | 0x23,
+ 37942 - 19968: jis0208<<14 | 0x4E<<7 | 0x21,
+ 37944 - 19968: jis0208<<14 | 0x21<<7 | 0x57,
+ 37946 - 19968: jis0208<<14 | 0x4E<<7 | 0x25,
+ 37947 - 19968: jis0212<<14 | 0x44<<7 | 0x45,
+ 37949 - 19968: jis0212<<14 | 0x44<<7 | 0x47,
+ 37951 - 19968: jis0212<<14 | 0x44<<7 | 0x46,
+ 37953 - 19968: jis0208<<14 | 0x4E<<7 | 0x26,
+ 37955 - 19968: jis0212<<14 | 0x44<<7 | 0x48,
+ 37956 - 19968: jis0208<<14 | 0x4E<<7 | 0x28,
+ 37957 - 19968: jis0208<<14 | 0x5B<<7 | 0x2B,
+ 37960 - 19968: jis0208<<14 | 0x5B<<7 | 0x2C,
+ 37962 - 19968: jis0212<<14 | 0x44<<7 | 0x4B,
+ 37964 - 19968: jis0212<<14 | 0x44<<7 | 0x4C,
+ 37969 - 19968: jis0208<<14 | 0x13<<7 | 0x34,
+ 37970 - 19968: jis0208<<14 | 0x4E<<7 | 0x27,
+ 37971 - 19968: jis0208<<14 | 0x2B<<7 | 0x59,
+ 37973 - 19968: jis0212<<14 | 0x44<<7 | 0x4D,
+ 37977 - 19968: jis0212<<14 | 0x44<<7 | 0x4E,
+ 37978 - 19968: jis0208<<14 | 0x4E<<7 | 0x33,
+ 37979 - 19968: jis0208<<14 | 0x4E<<7 | 0x29,
+ 37980 - 19968: jis0212<<14 | 0x44<<7 | 0x4F,
+ 37982 - 19968: jis0208<<14 | 0x4E<<7 | 0x2C,
+ 37983 - 19968: jis0212<<14 | 0x44<<7 | 0x50,
+ 37984 - 19968: jis0208<<14 | 0x4E<<7 | 0x2A,
+ 37985 - 19968: jis0212<<14 | 0x44<<7 | 0x51,
+ 37986 - 19968: jis0208<<14 | 0x4E<<7 | 0x2B,
+ 37987 - 19968: jis0212<<14 | 0x44<<7 | 0x52,
+ 37992 - 19968: jis0212<<14 | 0x44<<7 | 0x53,
+ 37994 - 19968: jis0208<<14 | 0x4E<<7 | 0x2D,
+ 37995 - 19968: jis0212<<14 | 0x44<<7 | 0x54,
+ 37997 - 19968: jis0212<<14 | 0x44<<7 | 0x55,
+ 37998 - 19968: jis0212<<14 | 0x44<<7 | 0x56,
+ 37999 - 19968: jis0212<<14 | 0x44<<7 | 0x57,
+ 38000 - 19968: jis0208<<14 | 0x4E<<7 | 0x2F,
+ 38001 - 19968: jis0212<<14 | 0x44<<7 | 0x58,
+ 38002 - 19968: jis0212<<14 | 0x44<<7 | 0x59,
+ 38005 - 19968: jis0208<<14 | 0x4E<<7 | 0x30,
+ 38007 - 19968: jis0208<<14 | 0x4E<<7 | 0x31,
+ 38012 - 19968: jis0208<<14 | 0x4E<<7 | 0x34,
+ 38013 - 19968: jis0208<<14 | 0x4E<<7 | 0x32,
+ 38014 - 19968: jis0208<<14 | 0x4E<<7 | 0x35,
+ 38015 - 19968: jis0208<<14 | 0x4E<<7 | 0x37,
+ 38017 - 19968: jis0208<<14 | 0x4E<<7 | 0x36,
+ 38019 - 19968: jis0212<<14 | 0x44<<7 | 0x5B,
+ 38020 - 19968: jis0212<<14 | 0x44<<7 | 0x5A,
+ 38263 - 19968: jis0208<<14 | 0x23<<7 | 0x18,
+ 38264 - 19968: jis0212<<14 | 0x44<<7 | 0x5C,
+ 38265 - 19968: jis0212<<14 | 0x44<<7 | 0x5D,
+ 38270 - 19968: jis0212<<14 | 0x45<<7 | 0x00,
+ 38272 - 19968: jis0208<<14 | 0x2B<<7 | 0x46,
+ 38274 - 19968: jis0208<<14 | 0x4E<<7 | 0x38,
+ 38275 - 19968: jis0208<<14 | 0x20<<7 | 0x0D,
+ 38276 - 19968: jis0212<<14 | 0x45<<7 | 0x01,
+ 38279 - 19968: jis0208<<14 | 0x4E<<7 | 0x39,
+ 38280 - 19968: jis0212<<14 | 0x45<<7 | 0x02,
+ 38281 - 19968: jis0208<<14 | 0x29<<7 | 0x23,
+ 38282 - 19968: jis0208<<14 | 0x4E<<7 | 0x3A,
+ 38283 - 19968: jis0208<<14 | 0x12<<7 | 0x0A,
+ 38284 - 19968: jis0212<<14 | 0x45<<7 | 0x03,
+ 38285 - 19968: jis0212<<14 | 0x45<<7 | 0x04,
+ 38286 - 19968: jis0212<<14 | 0x45<<7 | 0x05,
+ 38287 - 19968: jis0208<<14 | 0x10<<7 | 0x1B,
+ 38289 - 19968: jis0208<<14 | 0x13<<7 | 0x36,
+ 38290 - 19968: jis0208<<14 | 0x5B<<7 | 0x2D,
+ 38291 - 19968: jis0208<<14 | 0x13<<7 | 0x35,
+ 38292 - 19968: jis0208<<14 | 0x4E<<7 | 0x3B,
+ 38294 - 19968: jis0208<<14 | 0x4E<<7 | 0x3C,
+ 38296 - 19968: jis0208<<14 | 0x4E<<7 | 0x3D,
+ 38297 - 19968: jis0208<<14 | 0x4E<<7 | 0x3E,
+ 38301 - 19968: jis0212<<14 | 0x45<<7 | 0x06,
+ 38302 - 19968: jis0212<<14 | 0x45<<7 | 0x07,
+ 38303 - 19968: jis0212<<14 | 0x45<<7 | 0x08,
+ 38304 - 19968: jis0208<<14 | 0x4E<<7 | 0x3F,
+ 38305 - 19968: jis0212<<14 | 0x45<<7 | 0x09,
+ 38306 - 19968: jis0208<<14 | 0x13<<7 | 0x37,
+ 38307 - 19968: jis0208<<14 | 0x12<<7 | 0x34,
+ 38308 - 19968: jis0208<<14 | 0x18<<7 | 0x3D,
+ 38309 - 19968: jis0208<<14 | 0x27<<7 | 0x15,
+ 38310 - 19968: jis0212<<14 | 0x45<<7 | 0x0A,
+ 38311 - 19968: jis0208<<14 | 0x4E<<7 | 0x41,
+ 38312 - 19968: jis0208<<14 | 0x4E<<7 | 0x40,
+ 38313 - 19968: jis0212<<14 | 0x45<<7 | 0x0B,
+ 38315 - 19968: jis0212<<14 | 0x45<<7 | 0x0C,
+ 38316 - 19968: jis0212<<14 | 0x45<<7 | 0x0D,
+ 38317 - 19968: jis0208<<14 | 0x4E<<7 | 0x42,
+ 38322 - 19968: jis0208<<14 | 0x10<<7 | 0x3B,
+ 38324 - 19968: jis0212<<14 | 0x45<<7 | 0x0E,
+ 38326 - 19968: jis0212<<14 | 0x45<<7 | 0x0F,
+ 38329 - 19968: jis0208<<14 | 0x4E<<7 | 0x45,
+ 38330 - 19968: jis0212<<14 | 0x45<<7 | 0x10,
+ 38331 - 19968: jis0208<<14 | 0x4E<<7 | 0x44,
+ 38332 - 19968: jis0208<<14 | 0x4E<<7 | 0x43,
+ 38333 - 19968: jis0212<<14 | 0x45<<7 | 0x11,
+ 38334 - 19968: jis0208<<14 | 0x4E<<7 | 0x46,
+ 38335 - 19968: jis0212<<14 | 0x45<<7 | 0x12,
+ 38339 - 19968: jis0208<<14 | 0x4E<<7 | 0x49,
+ 38342 - 19968: jis0212<<14 | 0x45<<7 | 0x13,
+ 38343 - 19968: jis0208<<14 | 0x0F<<7 | 0x26,
+ 38344 - 19968: jis0212<<14 | 0x45<<7 | 0x14,
+ 38345 - 19968: jis0212<<14 | 0x45<<7 | 0x15,
+ 38346 - 19968: jis0208<<14 | 0x4E<<7 | 0x47,
+ 38347 - 19968: jis0212<<14 | 0x45<<7 | 0x16,
+ 38348 - 19968: jis0208<<14 | 0x4E<<7 | 0x4B,
+ 38349 - 19968: jis0208<<14 | 0x4E<<7 | 0x4A,
+ 38352 - 19968: jis0212<<14 | 0x45<<7 | 0x17,
+ 38353 - 19968: jis0212<<14 | 0x45<<7 | 0x18,
+ 38354 - 19968: jis0212<<14 | 0x45<<7 | 0x19,
+ 38355 - 19968: jis0212<<14 | 0x45<<7 | 0x1A,
+ 38356 - 19968: jis0208<<14 | 0x4E<<7 | 0x4D,
+ 38357 - 19968: jis0208<<14 | 0x4E<<7 | 0x4C,
+ 38358 - 19968: jis0208<<14 | 0x4E<<7 | 0x4E,
+ 38360 - 19968: jis0208<<14 | 0x25<<7 | 0x0D,
+ 38361 - 19968: jis0212<<14 | 0x45<<7 | 0x1B,
+ 38362 - 19968: jis0212<<14 | 0x45<<7 | 0x1C,
+ 38364 - 19968: jis0208<<14 | 0x4E<<7 | 0x4F,
+ 38365 - 19968: jis0212<<14 | 0x45<<7 | 0x1D,
+ 38366 - 19968: jis0212<<14 | 0x45<<7 | 0x1E,
+ 38367 - 19968: jis0212<<14 | 0x45<<7 | 0x1F,
+ 38368 - 19968: jis0212<<14 | 0x45<<7 | 0x20,
+ 38369 - 19968: jis0208<<14 | 0x4E<<7 | 0x50,
+ 38370 - 19968: jis0208<<14 | 0x4E<<7 | 0x52,
+ 38372 - 19968: jis0212<<14 | 0x45<<7 | 0x21,
+ 38373 - 19968: jis0208<<14 | 0x4E<<7 | 0x51,
+ 38374 - 19968: jis0212<<14 | 0x45<<7 | 0x22,
+ 38428 - 19968: jis0208<<14 | 0x28<<7 | 0x4B,
+ 38429 - 19968: jis0212<<14 | 0x45<<7 | 0x23,
+ 38430 - 19968: jis0212<<14 | 0x45<<7 | 0x24,
+ 38433 - 19968: jis0208<<14 | 0x4E<<7 | 0x53,
+ 38434 - 19968: jis0212<<14 | 0x45<<7 | 0x25,
+ 38436 - 19968: jis0212<<14 | 0x45<<7 | 0x26,
+ 38437 - 19968: jis0212<<14 | 0x45<<7 | 0x27,
+ 38438 - 19968: jis0212<<14 | 0x45<<7 | 0x28,
+ 38440 - 19968: jis0208<<14 | 0x4E<<7 | 0x54,
+ 38442 - 19968: jis0208<<14 | 0x19<<7 | 0x44,
+ 38444 - 19968: jis0212<<14 | 0x45<<7 | 0x29,
+ 38446 - 19968: jis0208<<14 | 0x4E<<7 | 0x55,
+ 38447 - 19968: jis0208<<14 | 0x4E<<7 | 0x56,
+ 38449 - 19968: jis0212<<14 | 0x45<<7 | 0x2A,
+ 38450 - 19968: jis0208<<14 | 0x2A<<7 | 0x28,
+ 38451 - 19968: jis0212<<14 | 0x45<<7 | 0x2B,
+ 38455 - 19968: jis0212<<14 | 0x45<<7 | 0x2C,
+ 38456 - 19968: jis0212<<14 | 0x45<<7 | 0x2D,
+ 38457 - 19968: jis0212<<14 | 0x45<<7 | 0x2E,
+ 38458 - 19968: jis0212<<14 | 0x45<<7 | 0x2F,
+ 38459 - 19968: jis0208<<14 | 0x20<<7 | 0x2A,
+ 38460 - 19968: jis0212<<14 | 0x45<<7 | 0x30,
+ 38461 - 19968: jis0212<<14 | 0x45<<7 | 0x31,
+ 38463 - 19968: jis0208<<14 | 0x0F<<7 | 0x03,
+ 38464 - 19968: jis0208<<14 | 0x21<<7 | 0x2A,
+ 38465 - 19968: jis0212<<14 | 0x45<<7 | 0x32,
+ 38466 - 19968: jis0208<<14 | 0x4E<<7 | 0x57,
+ 38468 - 19968: jis0208<<14 | 0x28<<7 | 0x4C,
+ 38475 - 19968: jis0208<<14 | 0x4E<<7 | 0x5A,
+ 38476 - 19968: jis0208<<14 | 0x4E<<7 | 0x58,
+ 38477 - 19968: jis0208<<14 | 0x18<<7 | 0x3E,
+ 38479 - 19968: jis0208<<14 | 0x4E<<7 | 0x59,
+ 38480 - 19968: jis0208<<14 | 0x17<<7 | 0x21,
+ 38482 - 19968: jis0212<<14 | 0x45<<7 | 0x33,
+ 38484 - 19968: jis0212<<14 | 0x45<<7 | 0x34,
+ 38486 - 19968: jis0212<<14 | 0x45<<7 | 0x35,
+ 38487 - 19968: jis0212<<14 | 0x45<<7 | 0x36,
+ 38488 - 19968: jis0212<<14 | 0x45<<7 | 0x37,
+ 38491 - 19968: jis0208<<14 | 0x29<<7 | 0x24,
+ 38492 - 19968: jis0208<<14 | 0x4E<<7 | 0x5C,
+ 38493 - 19968: jis0208<<14 | 0x4F<<7 | 0x00,
+ 38494 - 19968: jis0208<<14 | 0x4E<<7 | 0x5D,
+ 38495 - 19968: jis0208<<14 | 0x4F<<7 | 0x01,
+ 38497 - 19968: jis0212<<14 | 0x45<<7 | 0x38,
+ 38498 - 19968: jis0208<<14 | 0x10<<7 | 0x00,
+ 38499 - 19968: jis0208<<14 | 0x1E<<7 | 0x37,
+ 38500 - 19968: jis0208<<14 | 0x1C<<7 | 0x5B,
+ 38501 - 19968: jis0208<<14 | 0x13<<7 | 0x38,
+ 38502 - 19968: jis0208<<14 | 0x4F<<7 | 0x02,
+ 38506 - 19968: jis0208<<14 | 0x26<<7 | 0x45,
+ 38508 - 19968: jis0208<<14 | 0x4F<<7 | 0x04,
+ 38510 - 19968: jis0212<<14 | 0x45<<7 | 0x39,
+ 38512 - 19968: jis0208<<14 | 0x10<<7 | 0x01,
+ 38514 - 19968: jis0208<<14 | 0x4F<<7 | 0x03,
+ 38515 - 19968: jis0208<<14 | 0x23<<7 | 0x23,
+ 38516 - 19968: jis0212<<14 | 0x45<<7 | 0x3A,
+ 38517 - 19968: jis0208<<14 | 0x2D<<7 | 0x2C,
+ 38518 - 19968: jis0208<<14 | 0x25<<7 | 0x0A,
+ 38519 - 19968: jis0208<<14 | 0x4E<<7 | 0x5B,
+ 38520 - 19968: jis0208<<14 | 0x2D<<7 | 0x05,
+ 38522 - 19968: jis0208<<14 | 0x17<<7 | 0x10,
+ 38523 - 19968: jis0212<<14 | 0x45<<7 | 0x3B,
+ 38524 - 19968: jis0212<<14 | 0x45<<7 | 0x3C,
+ 38525 - 19968: jis0208<<14 | 0x2C<<7 | 0x3A,
+ 38526 - 19968: jis0212<<14 | 0x45<<7 | 0x3D,
+ 38527 - 19968: jis0212<<14 | 0x45<<7 | 0x3E,
+ 38529 - 19968: jis0212<<14 | 0x45<<7 | 0x3F,
+ 38530 - 19968: jis0212<<14 | 0x45<<7 | 0x40,
+ 38531 - 19968: jis0212<<14 | 0x45<<7 | 0x41,
+ 38532 - 19968: jis0212<<14 | 0x45<<7 | 0x42,
+ 38533 - 19968: jis0208<<14 | 0x15<<7 | 0x58,
+ 38534 - 19968: jis0208<<14 | 0x2D<<7 | 0x13,
+ 38536 - 19968: jis0208<<14 | 0x16<<7 | 0x07,
+ 38537 - 19968: jis0212<<14 | 0x45<<7 | 0x43,
+ 38538 - 19968: jis0208<<14 | 0x21<<7 | 0x41,
+ 38539 - 19968: jis0208<<14 | 0x46<<7 | 0x00,
+ 38541 - 19968: jis0208<<14 | 0x4F<<7 | 0x05,
+ 38542 - 19968: jis0208<<14 | 0x12<<7 | 0x0B,
+ 38543 - 19968: jis0208<<14 | 0x1E<<7 | 0x4E,
+ 38545 - 19968: jis0212<<14 | 0x45<<7 | 0x44,
+ 38548 - 19968: jis0208<<14 | 0x12<<7 | 0x35,
+ 38549 - 19968: jis0208<<14 | 0x4F<<7 | 0x07,
+ 38550 - 19968: jis0212<<14 | 0x45<<7 | 0x45,
+ 38551 - 19968: jis0208<<14 | 0x4F<<7 | 0x08,
+ 38552 - 19968: jis0208<<14 | 0x4F<<7 | 0x06,
+ 38553 - 19968: jis0208<<14 | 0x16<<7 | 0x43,
+ 38554 - 19968: jis0212<<14 | 0x45<<7 | 0x46,
+ 38555 - 19968: jis0208<<14 | 0x19<<7 | 0x3C,
+ 38556 - 19968: jis0208<<14 | 0x1D<<7 | 0x42,
+ 38557 - 19968: jis0208<<14 | 0x5B<<7 | 0x30,
+ 38559 - 19968: jis0212<<14 | 0x45<<7 | 0x48,
+ 38560 - 19968: jis0208<<14 | 0x10<<7 | 0x02,
+ 38563 - 19968: jis0208<<14 | 0x2D<<7 | 0x38,
+ 38564 - 19968: jis0212<<14 | 0x45<<7 | 0x49,
+ 38565 - 19968: jis0212<<14 | 0x45<<7 | 0x4A,
+ 38566 - 19968: jis0212<<14 | 0x45<<7 | 0x4B,
+ 38567 - 19968: jis0208<<14 | 0x4F<<7 | 0x0A,
+ 38568 - 19968: jis0208<<14 | 0x4D<<7 | 0x0D,
+ 38569 - 19968: jis0212<<14 | 0x45<<7 | 0x4C,
+ 38570 - 19968: jis0208<<14 | 0x4F<<7 | 0x09,
+ 38574 - 19968: jis0212<<14 | 0x45<<7 | 0x4D,
+ 38575 - 19968: jis0208<<14 | 0x5B<<7 | 0x31,
+ 38576 - 19968: jis0208<<14 | 0x4F<<7 | 0x0D,
+ 38577 - 19968: jis0208<<14 | 0x4F<<7 | 0x0B,
+ 38578 - 19968: jis0208<<14 | 0x4F<<7 | 0x0C,
+ 38579 - 19968: jis0212<<14 | 0x45<<7 | 0x4F,
+ 38580 - 19968: jis0208<<14 | 0x4F<<7 | 0x0E,
+ 38582 - 19968: jis0208<<14 | 0x4F<<7 | 0x0F,
+ 38583 - 19968: jis0208<<14 | 0x2D<<7 | 0x4B,
+ 38584 - 19968: jis0208<<14 | 0x4F<<7 | 0x10,
+ 38585 - 19968: jis0208<<14 | 0x4F<<7 | 0x11,
+ 38586 - 19968: jis0212<<14 | 0x45<<7 | 0x50,
+ 38587 - 19968: jis0208<<14 | 0x1F<<7 | 0x28,
+ 38588 - 19968: jis0208<<14 | 0x27<<7 | 0x1A,
+ 38592 - 19968: jis0208<<14 | 0x1E<<7 | 0x5C,
+ 38593 - 19968: jis0208<<14 | 0x13<<7 | 0x46,
+ 38596 - 19968: jis0208<<14 | 0x2C<<7 | 0x19,
+ 38597 - 19968: jis0208<<14 | 0x11<<7 | 0x4C,
+ 38598 - 19968: jis0208<<14 | 0x1C<<7 | 0x17,
+ 38599 - 19968: jis0208<<14 | 0x17<<7 | 0x3A,
+ 38601 - 19968: jis0208<<14 | 0x4F<<7 | 0x14,
+ 38602 - 19968: jis0212<<14 | 0x45<<7 | 0x51,
+ 38603 - 19968: jis0208<<14 | 0x4F<<7 | 0x13,
+ 38604 - 19968: jis0208<<14 | 0x1A<<7 | 0x52,
+ 38605 - 19968: jis0208<<14 | 0x4F<<7 | 0x15,
+ 38606 - 19968: jis0208<<14 | 0x4F<<7 | 0x12,
+ 38609 - 19968: jis0208<<14 | 0x1A<<7 | 0x07,
+ 38610 - 19968: jis0212<<14 | 0x45<<7 | 0x52,
+ 38613 - 19968: jis0208<<14 | 0x4F<<7 | 0x19,
+ 38614 - 19968: jis0208<<14 | 0x49<<7 | 0x0C,
+ 38616 - 19968: jis0212<<14 | 0x45<<7 | 0x54,
+ 38617 - 19968: jis0208<<14 | 0x31<<7 | 0x35,
+ 38618 - 19968: jis0212<<14 | 0x45<<7 | 0x55,
+ 38619 - 19968: jis0208<<14 | 0x1E<<7 | 0x56,
+ 38620 - 19968: jis0208<<14 | 0x4F<<7 | 0x17,
+ 38621 - 19968: jis0212<<14 | 0x45<<7 | 0x56,
+ 38622 - 19968: jis0212<<14 | 0x45<<7 | 0x57,
+ 38623 - 19968: jis0212<<14 | 0x45<<7 | 0x58,
+ 38626 - 19968: jis0208<<14 | 0x2D<<7 | 0x04,
+ 38627 - 19968: jis0208<<14 | 0x25<<7 | 0x50,
+ 38632 - 19968: jis0208<<14 | 0x10<<7 | 0x0A,
+ 38633 - 19968: jis0212<<14 | 0x45<<7 | 0x59,
+ 38634 - 19968: jis0208<<14 | 0x1F<<7 | 0x42,
+ 38635 - 19968: jis0208<<14 | 0x1B<<7 | 0x15,
+ 38639 - 19968: jis0212<<14 | 0x45<<7 | 0x5A,
+ 38640 - 19968: jis0208<<14 | 0x29<<7 | 0x16,
+ 38641 - 19968: jis0212<<14 | 0x45<<7 | 0x5B,
+ 38642 - 19968: jis0208<<14 | 0x10<<7 | 0x1F,
+ 38646 - 19968: jis0208<<14 | 0x2D<<7 | 0x4C,
+ 38647 - 19968: jis0208<<14 | 0x2C<<7 | 0x4A,
+ 38649 - 19968: jis0208<<14 | 0x4F<<7 | 0x1A,
+ 38650 - 19968: jis0212<<14 | 0x45<<7 | 0x5C,
+ 38651 - 19968: jis0208<<14 | 0x24<<7 | 0x24,
+ 38656 - 19968: jis0208<<14 | 0x1B<<7 | 0x5A,
+ 38658 - 19968: jis0212<<14 | 0x45<<7 | 0x5D,
+ 38659 - 19968: jis0212<<14 | 0x46<<7 | 0x00,
+ 38660 - 19968: jis0208<<14 | 0x4F<<7 | 0x1B,
+ 38661 - 19968: jis0212<<14 | 0x46<<7 | 0x01,
+ 38662 - 19968: jis0208<<14 | 0x4F<<7 | 0x1C,
+ 38663 - 19968: jis0208<<14 | 0x1E<<7 | 0x2B,
+ 38664 - 19968: jis0208<<14 | 0x4F<<7 | 0x1D,
+ 38665 - 19968: jis0212<<14 | 0x46<<7 | 0x02,
+ 38666 - 19968: jis0208<<14 | 0x2D<<7 | 0x4D,
+ 38669 - 19968: jis0208<<14 | 0x4F<<7 | 0x18,
+ 38670 - 19968: jis0208<<14 | 0x4F<<7 | 0x1F,
+ 38671 - 19968: jis0208<<14 | 0x4F<<7 | 0x21,
+ 38673 - 19968: jis0208<<14 | 0x4F<<7 | 0x20,
+ 38675 - 19968: jis0208<<14 | 0x4F<<7 | 0x1E,
+ 38678 - 19968: jis0208<<14 | 0x4F<<7 | 0x22,
+ 38681 - 19968: jis0208<<14 | 0x4F<<7 | 0x23,
+ 38682 - 19968: jis0212<<14 | 0x46<<7 | 0x03,
+ 38683 - 19968: jis0212<<14 | 0x46<<7 | 0x04,
+ 38684 - 19968: jis0208<<14 | 0x20<<7 | 0x59,
+ 38685 - 19968: jis0212<<14 | 0x46<<7 | 0x05,
+ 38686 - 19968: jis0208<<14 | 0x11<<7 | 0x41,
+ 38689 - 19968: jis0212<<14 | 0x46<<7 | 0x06,
+ 38690 - 19968: jis0212<<14 | 0x46<<7 | 0x07,
+ 38691 - 19968: jis0212<<14 | 0x46<<7 | 0x08,
+ 38692 - 19968: jis0208<<14 | 0x4F<<7 | 0x24,
+ 38695 - 19968: jis0208<<14 | 0x2B<<7 | 0x17,
+ 38696 - 19968: jis0212<<14 | 0x46<<7 | 0x09,
+ 38698 - 19968: jis0208<<14 | 0x4F<<7 | 0x25,
+ 38704 - 19968: jis0208<<14 | 0x4F<<7 | 0x26,
+ 38705 - 19968: jis0212<<14 | 0x46<<7 | 0x0A,
+ 38706 - 19968: jis0208<<14 | 0x2E<<7 | 0x09,
+ 38707 - 19968: jis0208<<14 | 0x5B<<7 | 0x32,
+ 38712 - 19968: jis0208<<14 | 0x3A<<7 | 0x10,
+ 38713 - 19968: jis0208<<14 | 0x4F<<7 | 0x27,
+ 38715 - 19968: jis0208<<14 | 0x5B<<7 | 0x33,
+ 38717 - 19968: jis0208<<14 | 0x4F<<7 | 0x28,
+ 38718 - 19968: jis0208<<14 | 0x4F<<7 | 0x29,
+ 38721 - 19968: jis0212<<14 | 0x46<<7 | 0x0C,
+ 38722 - 19968: jis0208<<14 | 0x4F<<7 | 0x2D,
+ 38723 - 19968: jis0208<<14 | 0x5B<<7 | 0x34,
+ 38724 - 19968: jis0208<<14 | 0x4F<<7 | 0x2A,
+ 38726 - 19968: jis0208<<14 | 0x4F<<7 | 0x2B,
+ 38728 - 19968: jis0208<<14 | 0x4F<<7 | 0x2C,
+ 38729 - 19968: jis0208<<14 | 0x4F<<7 | 0x2E,
+ 38730 - 19968: jis0212<<14 | 0x46<<7 | 0x0E,
+ 38733 - 19968: jis0208<<14 | 0x5B<<7 | 0x35,
+ 38734 - 19968: jis0212<<14 | 0x46<<7 | 0x0F,
+ 38735 - 19968: jis0208<<14 | 0x5B<<7 | 0x36,
+ 38737 - 19968: jis0208<<14 | 0x5B<<7 | 0x37,
+ 38738 - 19968: jis0208<<14 | 0x1F<<7 | 0x23,
+ 38741 - 19968: jis0208<<14 | 0x5B<<7 | 0x38,
+ 38742 - 19968: jis0208<<14 | 0x2B<<7 | 0x56,
+ 38743 - 19968: jis0212<<14 | 0x46<<7 | 0x12,
+ 38744 - 19968: jis0212<<14 | 0x46<<7 | 0x13,
+ 38745 - 19968: jis0208<<14 | 0x1F<<7 | 0x24,
+ 38746 - 19968: jis0212<<14 | 0x46<<7 | 0x14,
+ 38747 - 19968: jis0212<<14 | 0x46<<7 | 0x15,
+ 38748 - 19968: jis0208<<14 | 0x4F<<7 | 0x2F,
+ 38750 - 19968: jis0208<<14 | 0x27<<7 | 0x52,
+ 38752 - 19968: jis0208<<14 | 0x4F<<7 | 0x30,
+ 38753 - 19968: jis0208<<14 | 0x52<<7 | 0x32,
+ 38754 - 19968: jis0208<<14 | 0x2B<<7 | 0x2B,
+ 38755 - 19968: jis0212<<14 | 0x46<<7 | 0x16,
+ 38756 - 19968: jis0208<<14 | 0x4F<<7 | 0x31,
+ 38758 - 19968: jis0208<<14 | 0x4F<<7 | 0x32,
+ 38759 - 19968: jis0212<<14 | 0x46<<7 | 0x17,
+ 38760 - 19968: jis0208<<14 | 0x4F<<7 | 0x33,
+ 38761 - 19968: jis0208<<14 | 0x12<<7 | 0x36,
+ 38762 - 19968: jis0212<<14 | 0x46<<7 | 0x18,
+ 38763 - 19968: jis0208<<14 | 0x4F<<7 | 0x35,
+ 38765 - 19968: jis0208<<14 | 0x1E<<7 | 0x38,
+ 38766 - 19968: jis0212<<14 | 0x46<<7 | 0x19,
+ 38769 - 19968: jis0208<<14 | 0x4F<<7 | 0x36,
+ 38771 - 19968: jis0212<<14 | 0x46<<7 | 0x1A,
+ 38772 - 19968: jis0208<<14 | 0x16<<7 | 0x03,
+ 38774 - 19968: jis0212<<14 | 0x46<<7 | 0x1B,
+ 38775 - 19968: jis0212<<14 | 0x46<<7 | 0x1C,
+ 38776 - 19968: jis0212<<14 | 0x46<<7 | 0x1D,
+ 38777 - 19968: jis0208<<14 | 0x4F<<7 | 0x37,
+ 38778 - 19968: jis0208<<14 | 0x4F<<7 | 0x3B,
+ 38779 - 19968: jis0212<<14 | 0x46<<7 | 0x1E,
+ 38780 - 19968: jis0208<<14 | 0x4F<<7 | 0x39,
+ 38781 - 19968: jis0212<<14 | 0x46<<7 | 0x1F,
+ 38783 - 19968: jis0212<<14 | 0x46<<7 | 0x20,
+ 38784 - 19968: jis0212<<14 | 0x46<<7 | 0x21,
+ 38785 - 19968: jis0208<<14 | 0x4F<<7 | 0x3A,
+ 38788 - 19968: jis0208<<14 | 0x12<<7 | 0x52,
+ 38789 - 19968: jis0208<<14 | 0x4F<<7 | 0x38,
+ 38790 - 19968: jis0208<<14 | 0x4F<<7 | 0x3C,
+ 38793 - 19968: jis0212<<14 | 0x46<<7 | 0x22,
+ 38795 - 19968: jis0208<<14 | 0x4F<<7 | 0x3D,
+ 38797 - 19968: jis0208<<14 | 0x0F<<7 | 0x27,
+ 38799 - 19968: jis0208<<14 | 0x4F<<7 | 0x3E,
+ 38800 - 19968: jis0208<<14 | 0x4F<<7 | 0x3F,
+ 38805 - 19968: jis0212<<14 | 0x46<<7 | 0x23,
+ 38806 - 19968: jis0212<<14 | 0x46<<7 | 0x24,
+ 38807 - 19968: jis0212<<14 | 0x46<<7 | 0x25,
+ 38808 - 19968: jis0208<<14 | 0x1D<<7 | 0x43,
+ 38809 - 19968: jis0212<<14 | 0x46<<7 | 0x26,
+ 38810 - 19968: jis0212<<14 | 0x46<<7 | 0x27,
+ 38812 - 19968: jis0208<<14 | 0x4F<<7 | 0x40,
+ 38814 - 19968: jis0212<<14 | 0x46<<7 | 0x28,
+ 38815 - 19968: jis0212<<14 | 0x46<<7 | 0x29,
+ 38816 - 19968: jis0208<<14 | 0x14<<7 | 0x26,
+ 38818 - 19968: jis0212<<14 | 0x46<<7 | 0x2A,
+ 38819 - 19968: jis0208<<14 | 0x4F<<7 | 0x43,
+ 38822 - 19968: jis0208<<14 | 0x4F<<7 | 0x42,
+ 38824 - 19968: jis0208<<14 | 0x4F<<7 | 0x41,
+ 38827 - 19968: jis0208<<14 | 0x4A<<7 | 0x50,
+ 38828 - 19968: jis0212<<14 | 0x46<<7 | 0x2B,
+ 38829 - 19968: jis0208<<14 | 0x29<<7 | 0x3B,
+ 38830 - 19968: jis0212<<14 | 0x46<<7 | 0x2C,
+ 38833 - 19968: jis0212<<14 | 0x46<<7 | 0x2D,
+ 38834 - 19968: jis0212<<14 | 0x46<<7 | 0x2E,
+ 38835 - 19968: jis0208<<14 | 0x4F<<7 | 0x44,
+ 38836 - 19968: jis0208<<14 | 0x4F<<7 | 0x45,
+ 38837 - 19968: jis0212<<14 | 0x46<<7 | 0x2F,
+ 38838 - 19968: jis0212<<14 | 0x46<<7 | 0x30,
+ 38840 - 19968: jis0212<<14 | 0x46<<7 | 0x31,
+ 38841 - 19968: jis0212<<14 | 0x46<<7 | 0x32,
+ 38842 - 19968: jis0212<<14 | 0x46<<7 | 0x33,
+ 38844 - 19968: jis0212<<14 | 0x46<<7 | 0x34,
+ 38846 - 19968: jis0212<<14 | 0x46<<7 | 0x35,
+ 38847 - 19968: jis0212<<14 | 0x46<<7 | 0x36,
+ 38849 - 19968: jis0212<<14 | 0x46<<7 | 0x37,
+ 38851 - 19968: jis0208<<14 | 0x4F<<7 | 0x46,
+ 38852 - 19968: jis0212<<14 | 0x46<<7 | 0x38,
+ 38853 - 19968: jis0212<<14 | 0x46<<7 | 0x39,
+ 38854 - 19968: jis0208<<14 | 0x4F<<7 | 0x47,
+ 38855 - 19968: jis0212<<14 | 0x46<<7 | 0x3A,
+ 38856 - 19968: jis0208<<14 | 0x4F<<7 | 0x48,
+ 38857 - 19968: jis0212<<14 | 0x46<<7 | 0x3B,
+ 38858 - 19968: jis0212<<14 | 0x46<<7 | 0x3C,
+ 38859 - 19968: jis0208<<14 | 0x4F<<7 | 0x49,
+ 38860 - 19968: jis0212<<14 | 0x46<<7 | 0x3D,
+ 38861 - 19968: jis0212<<14 | 0x46<<7 | 0x3E,
+ 38862 - 19968: jis0212<<14 | 0x46<<7 | 0x3F,
+ 38864 - 19968: jis0212<<14 | 0x46<<7 | 0x40,
+ 38865 - 19968: jis0212<<14 | 0x46<<7 | 0x41,
+ 38867 - 19968: jis0208<<14 | 0x13<<7 | 0x39,
+ 38868 - 19968: jis0212<<14 | 0x46<<7 | 0x42,
+ 38871 - 19968: jis0212<<14 | 0x46<<7 | 0x43,
+ 38872 - 19968: jis0212<<14 | 0x46<<7 | 0x44,
+ 38873 - 19968: jis0212<<14 | 0x46<<7 | 0x45,
+ 38875 - 19968: jis0212<<14 | 0x46<<7 | 0x49,
+ 38876 - 19968: jis0208<<14 | 0x4F<<7 | 0x4A,
+ 38877 - 19968: jis0212<<14 | 0x46<<7 | 0x46,
+ 38878 - 19968: jis0212<<14 | 0x46<<7 | 0x47,
+ 38880 - 19968: jis0212<<14 | 0x46<<7 | 0x48,
+ 38881 - 19968: jis0212<<14 | 0x46<<7 | 0x4A,
+ 38884 - 19968: jis0212<<14 | 0x46<<7 | 0x4B,
+ 38893 - 19968: jis0208<<14 | 0x4F<<7 | 0x4B,
+ 38894 - 19968: jis0208<<14 | 0x26<<7 | 0x02,
+ 38895 - 19968: jis0212<<14 | 0x46<<7 | 0x4C,
+ 38897 - 19968: jis0212<<14 | 0x46<<7 | 0x4D,
+ 38898 - 19968: jis0208<<14 | 0x4F<<7 | 0x4D,
+ 38899 - 19968: jis0208<<14 | 0x11<<7 | 0x1A,
+ 38900 - 19968: jis0212<<14 | 0x46<<7 | 0x4E,
+ 38901 - 19968: jis0208<<14 | 0x4F<<7 | 0x50,
+ 38902 - 19968: jis0208<<14 | 0x4F<<7 | 0x4F,
+ 38903 - 19968: jis0212<<14 | 0x46<<7 | 0x4F,
+ 38904 - 19968: jis0212<<14 | 0x46<<7 | 0x50,
+ 38906 - 19968: jis0212<<14 | 0x46<<7 | 0x51,
+ 38907 - 19968: jis0208<<14 | 0x10<<7 | 0x03,
+ 38911 - 19968: jis0208<<14 | 0x15<<7 | 0x20,
+ 38913 - 19968: jis0208<<14 | 0x29<<7 | 0x26,
+ 38914 - 19968: jis0208<<14 | 0x23<<7 | 0x19,
+ 38915 - 19968: jis0208<<14 | 0x19<<7 | 0x01,
+ 38917 - 19968: jis0208<<14 | 0x18<<7 | 0x3F,
+ 38918 - 19968: jis0208<<14 | 0x1C<<7 | 0x46,
+ 38919 - 19968: jis0212<<14 | 0x46<<7 | 0x52,
+ 38920 - 19968: jis0208<<14 | 0x1E<<7 | 0x3B,
+ 38922 - 19968: jis0212<<14 | 0x46<<7 | 0x53,
+ 38924 - 19968: jis0208<<14 | 0x4F<<7 | 0x52,
+ 38925 - 19968: jis0212<<14 | 0x46<<7 | 0x55,
+ 38926 - 19968: jis0212<<14 | 0x46<<7 | 0x56,
+ 38927 - 19968: jis0208<<14 | 0x4F<<7 | 0x51,
+ 38928 - 19968: jis0208<<14 | 0x2C<<7 | 0x21,
+ 38929 - 19968: jis0208<<14 | 0x13<<7 | 0x47,
+ 38930 - 19968: jis0208<<14 | 0x27<<7 | 0x31,
+ 38931 - 19968: jis0208<<14 | 0x25<<7 | 0x3B,
+ 38932 - 19968: jis0212<<14 | 0x46<<7 | 0x57,
+ 38934 - 19968: jis0212<<14 | 0x46<<7 | 0x58,
+ 38935 - 19968: jis0208<<14 | 0x1E<<7 | 0x5B,
+ 38936 - 19968: jis0208<<14 | 0x2D<<7 | 0x2D,
+ 38937 - 19968: jis0212<<14 | 0x46<<7 | 0x54,
+ 38938 - 19968: jis0208<<14 | 0x16<<7 | 0x3A,
+ 38940 - 19968: jis0212<<14 | 0x46<<7 | 0x59,
+ 38942 - 19968: jis0212<<14 | 0x46<<7 | 0x5A,
+ 38944 - 19968: jis0212<<14 | 0x46<<7 | 0x5B,
+ 38945 - 19968: jis0208<<14 | 0x4F<<7 | 0x55,
+ 38947 - 19968: jis0212<<14 | 0x46<<7 | 0x5C,
+ 38948 - 19968: jis0208<<14 | 0x4F<<7 | 0x54,
+ 38949 - 19968: jis0212<<14 | 0x47<<7 | 0x07,
+ 38950 - 19968: jis0212<<14 | 0x46<<7 | 0x5D,
+ 38955 - 19968: jis0212<<14 | 0x47<<7 | 0x00,
+ 38956 - 19968: jis0208<<14 | 0x2A<<7 | 0x2A,
+ 38957 - 19968: jis0208<<14 | 0x25<<7 | 0x0B,
+ 38958 - 19968: jis0212<<14 | 0x47<<7 | 0x01,
+ 38959 - 19968: jis0212<<14 | 0x47<<7 | 0x02,
+ 38960 - 19968: jis0212<<14 | 0x47<<7 | 0x03,
+ 38962 - 19968: jis0212<<14 | 0x47<<7 | 0x04,
+ 38963 - 19968: jis0212<<14 | 0x47<<7 | 0x05,
+ 38964 - 19968: jis0208<<14 | 0x10<<7 | 0x2F,
+ 38965 - 19968: jis0212<<14 | 0x47<<7 | 0x06,
+ 38967 - 19968: jis0208<<14 | 0x4F<<7 | 0x56,
+ 38968 - 19968: jis0208<<14 | 0x4F<<7 | 0x53,
+ 38971 - 19968: jis0208<<14 | 0x28<<7 | 0x30,
+ 38972 - 19968: jis0208<<14 | 0x2C<<7 | 0x49,
+ 38973 - 19968: jis0208<<14 | 0x4F<<7 | 0x57,
+ 38974 - 19968: jis0212<<14 | 0x47<<7 | 0x08,
+ 38980 - 19968: jis0212<<14 | 0x47<<7 | 0x09,
+ 38982 - 19968: jis0208<<14 | 0x4F<<7 | 0x58,
+ 38983 - 19968: jis0212<<14 | 0x47<<7 | 0x0A,
+ 38986 - 19968: jis0212<<14 | 0x47<<7 | 0x0B,
+ 38987 - 19968: jis0208<<14 | 0x4F<<7 | 0x5A,
+ 38988 - 19968: jis0208<<14 | 0x21<<7 | 0x49,
+ 38989 - 19968: jis0208<<14 | 0x12<<7 | 0x3A,
+ 38990 - 19968: jis0208<<14 | 0x12<<7 | 0x3B,
+ 38991 - 19968: jis0208<<14 | 0x4F<<7 | 0x59,
+ 38993 - 19968: jis0212<<14 | 0x47<<7 | 0x0C,
+ 38994 - 19968: jis0212<<14 | 0x47<<7 | 0x0D,
+ 38995 - 19968: jis0212<<14 | 0x47<<7 | 0x0E,
+ 38996 - 19968: jis0208<<14 | 0x13<<7 | 0x48,
+ 38997 - 19968: jis0208<<14 | 0x17<<7 | 0x11,
+ 38998 - 19968: jis0212<<14 | 0x47<<7 | 0x0F,
+ 38999 - 19968: jis0208<<14 | 0x5B<<7 | 0x39,
+ 39000 - 19968: jis0208<<14 | 0x13<<7 | 0x49,
+ 39001 - 19968: jis0212<<14 | 0x47<<7 | 0x11,
+ 39002 - 19968: jis0212<<14 | 0x47<<7 | 0x12,
+ 39003 - 19968: jis0208<<14 | 0x24<<7 | 0x1E,
+ 39006 - 19968: jis0208<<14 | 0x2D<<7 | 0x3F,
+ 39010 - 19968: jis0212<<14 | 0x47<<7 | 0x13,
+ 39011 - 19968: jis0212<<14 | 0x47<<7 | 0x14,
+ 39013 - 19968: jis0208<<14 | 0x5B<<7 | 0x3A,
+ 39014 - 19968: jis0212<<14 | 0x47<<7 | 0x16,
+ 39015 - 19968: jis0208<<14 | 0x17<<7 | 0x3B,
+ 39018 - 19968: jis0212<<14 | 0x47<<7 | 0x17,
+ 39019 - 19968: jis0208<<14 | 0x4F<<7 | 0x5B,
+ 39020 - 19968: jis0212<<14 | 0x47<<7 | 0x18,
+ 39023 - 19968: jis0208<<14 | 0x4F<<7 | 0x5C,
+ 39024 - 19968: jis0208<<14 | 0x4F<<7 | 0x5D,
+ 39025 - 19968: jis0208<<14 | 0x50<<7 | 0x00,
+ 39027 - 19968: jis0208<<14 | 0x50<<7 | 0x02,
+ 39028 - 19968: jis0208<<14 | 0x50<<7 | 0x01,
+ 39080 - 19968: jis0208<<14 | 0x28<<7 | 0x56,
+ 39082 - 19968: jis0208<<14 | 0x50<<7 | 0x03,
+ 39083 - 19968: jis0212<<14 | 0x47<<7 | 0x19,
+ 39085 - 19968: jis0212<<14 | 0x47<<7 | 0x1A,
+ 39086 - 19968: jis0212<<14 | 0x47<<7 | 0x1B,
+ 39087 - 19968: jis0208<<14 | 0x50<<7 | 0x04,
+ 39088 - 19968: jis0212<<14 | 0x47<<7 | 0x1C,
+ 39089 - 19968: jis0208<<14 | 0x50<<7 | 0x05,
+ 39092 - 19968: jis0212<<14 | 0x47<<7 | 0x1D,
+ 39094 - 19968: jis0208<<14 | 0x50<<7 | 0x06,
+ 39095 - 19968: jis0212<<14 | 0x47<<7 | 0x1E,
+ 39096 - 19968: jis0212<<14 | 0x47<<7 | 0x1F,
+ 39098 - 19968: jis0212<<14 | 0x47<<7 | 0x20,
+ 39099 - 19968: jis0212<<14 | 0x47<<7 | 0x21,
+ 39103 - 19968: jis0212<<14 | 0x47<<7 | 0x22,
+ 39106 - 19968: jis0212<<14 | 0x47<<7 | 0x23,
+ 39107 - 19968: jis0208<<14 | 0x50<<7 | 0x08,
+ 39108 - 19968: jis0208<<14 | 0x50<<7 | 0x07,
+ 39109 - 19968: jis0212<<14 | 0x47<<7 | 0x24,
+ 39110 - 19968: jis0208<<14 | 0x50<<7 | 0x09,
+ 39112 - 19968: jis0212<<14 | 0x47<<7 | 0x25,
+ 39116 - 19968: jis0212<<14 | 0x47<<7 | 0x26,
+ 39131 - 19968: jis0208<<14 | 0x27<<7 | 0x53,
+ 39132 - 19968: jis0208<<14 | 0x45<<7 | 0x2B,
+ 39135 - 19968: jis0208<<14 | 0x1E<<7 | 0x08,
+ 39137 - 19968: jis0212<<14 | 0x47<<7 | 0x27,
+ 39138 - 19968: jis0208<<14 | 0x14<<7 | 0x11,
+ 39139 - 19968: jis0212<<14 | 0x47<<7 | 0x28,
+ 39141 - 19968: jis0212<<14 | 0x47<<7 | 0x29,
+ 39142 - 19968: jis0212<<14 | 0x47<<7 | 0x2A,
+ 39143 - 19968: jis0212<<14 | 0x47<<7 | 0x2B,
+ 39145 - 19968: jis0208<<14 | 0x50<<7 | 0x0A,
+ 39146 - 19968: jis0212<<14 | 0x47<<7 | 0x2C,
+ 39147 - 19968: jis0208<<14 | 0x50<<7 | 0x0B,
+ 39149 - 19968: jis0208<<14 | 0x31<<7 | 0x0B,
+ 39150 - 19968: jis0208<<14 | 0x3C<<7 | 0x1A,
+ 39151 - 19968: jis0208<<14 | 0x27<<7 | 0x32,
+ 39154 - 19968: jis0208<<14 | 0x0F<<7 | 0x5A,
+ 39155 - 19968: jis0212<<14 | 0x47<<7 | 0x2D,
+ 39156 - 19968: jis0208<<14 | 0x0F<<7 | 0x1A,
+ 39158 - 19968: jis0212<<14 | 0x47<<7 | 0x2E,
+ 39164 - 19968: jis0208<<14 | 0x1A<<7 | 0x53,
+ 39165 - 19968: jis0208<<14 | 0x2A<<7 | 0x0F,
+ 39166 - 19968: jis0208<<14 | 0x1D<<7 | 0x5D,
+ 39170 - 19968: jis0212<<14 | 0x47<<7 | 0x2F,
+ 39171 - 19968: jis0208<<14 | 0x50<<7 | 0x0C,
+ 39173 - 19968: jis0208<<14 | 0x2B<<7 | 0x3E,
+ 39175 - 19968: jis0212<<14 | 0x47<<7 | 0x30,
+ 39176 - 19968: jis0212<<14 | 0x47<<7 | 0x31,
+ 39177 - 19968: jis0208<<14 | 0x50<<7 | 0x0D,
+ 39178 - 19968: jis0208<<14 | 0x2C<<7 | 0x3B,
+ 39180 - 19968: jis0208<<14 | 0x10<<7 | 0x21,
+ 39184 - 19968: jis0208<<14 | 0x1A<<7 | 0x20,
+ 39185 - 19968: jis0212<<14 | 0x47<<7 | 0x32,
+ 39186 - 19968: jis0208<<14 | 0x50<<7 | 0x0E,
+ 39187 - 19968: jis0208<<14 | 0x11<<7 | 0x4D,
+ 39188 - 19968: jis0208<<14 | 0x50<<7 | 0x0F,
+ 39189 - 19968: jis0212<<14 | 0x47<<7 | 0x33,
+ 39190 - 19968: jis0212<<14 | 0x47<<7 | 0x34,
+ 39191 - 19968: jis0212<<14 | 0x47<<7 | 0x35,
+ 39192 - 19968: jis0208<<14 | 0x50<<7 | 0x10,
+ 39194 - 19968: jis0212<<14 | 0x47<<7 | 0x36,
+ 39195 - 19968: jis0212<<14 | 0x47<<7 | 0x37,
+ 39196 - 19968: jis0212<<14 | 0x47<<7 | 0x38,
+ 39197 - 19968: jis0208<<14 | 0x50<<7 | 0x12,
+ 39198 - 19968: jis0208<<14 | 0x50<<7 | 0x13,
+ 39199 - 19968: jis0212<<14 | 0x47<<7 | 0x39,
+ 39200 - 19968: jis0208<<14 | 0x50<<7 | 0x15,
+ 39201 - 19968: jis0208<<14 | 0x50<<7 | 0x11,
+ 39202 - 19968: jis0212<<14 | 0x47<<7 | 0x3A,
+ 39204 - 19968: jis0208<<14 | 0x50<<7 | 0x14,
+ 39206 - 19968: jis0212<<14 | 0x47<<7 | 0x3B,
+ 39207 - 19968: jis0208<<14 | 0x5B<<7 | 0x3D,
+ 39208 - 19968: jis0208<<14 | 0x13<<7 | 0x3A,
+ 39211 - 19968: jis0212<<14 | 0x47<<7 | 0x3D,
+ 39212 - 19968: jis0208<<14 | 0x50<<7 | 0x16,
+ 39214 - 19968: jis0208<<14 | 0x50<<7 | 0x17,
+ 39217 - 19968: jis0212<<14 | 0x47<<7 | 0x3E,
+ 39218 - 19968: jis0212<<14 | 0x47<<7 | 0x3F,
+ 39219 - 19968: jis0212<<14 | 0x47<<7 | 0x40,
+ 39220 - 19968: jis0212<<14 | 0x47<<7 | 0x41,
+ 39221 - 19968: jis0212<<14 | 0x47<<7 | 0x42,
+ 39225 - 19968: jis0212<<14 | 0x47<<7 | 0x43,
+ 39226 - 19968: jis0212<<14 | 0x47<<7 | 0x44,
+ 39227 - 19968: jis0212<<14 | 0x47<<7 | 0x45,
+ 39228 - 19968: jis0212<<14 | 0x47<<7 | 0x46,
+ 39229 - 19968: jis0208<<14 | 0x50<<7 | 0x18,
+ 39230 - 19968: jis0208<<14 | 0x50<<7 | 0x19,
+ 39232 - 19968: jis0212<<14 | 0x47<<7 | 0x47,
+ 39233 - 19968: jis0212<<14 | 0x47<<7 | 0x48,
+ 39234 - 19968: jis0208<<14 | 0x50<<7 | 0x1A,
+ 39237 - 19968: jis0208<<14 | 0x50<<7 | 0x1C,
+ 39238 - 19968: jis0212<<14 | 0x47<<7 | 0x49,
+ 39239 - 19968: jis0212<<14 | 0x47<<7 | 0x4A,
+ 39240 - 19968: jis0212<<14 | 0x47<<7 | 0x4B,
+ 39241 - 19968: jis0208<<14 | 0x50<<7 | 0x1B,
+ 39243 - 19968: jis0208<<14 | 0x50<<7 | 0x1E,
+ 39244 - 19968: jis0208<<14 | 0x50<<7 | 0x21,
+ 39245 - 19968: jis0212<<14 | 0x47<<7 | 0x4C,
+ 39246 - 19968: jis0212<<14 | 0x47<<7 | 0x4D,
+ 39248 - 19968: jis0208<<14 | 0x50<<7 | 0x1D,
+ 39249 - 19968: jis0208<<14 | 0x50<<7 | 0x1F,
+ 39250 - 19968: jis0208<<14 | 0x50<<7 | 0x20,
+ 39252 - 19968: jis0212<<14 | 0x47<<7 | 0x4E,
+ 39253 - 19968: jis0208<<14 | 0x50<<7 | 0x22,
+ 39255 - 19968: jis0208<<14 | 0x15<<7 | 0x21,
+ 39256 - 19968: jis0212<<14 | 0x47<<7 | 0x4F,
+ 39257 - 19968: jis0212<<14 | 0x47<<7 | 0x50,
+ 39259 - 19968: jis0212<<14 | 0x47<<7 | 0x51,
+ 39260 - 19968: jis0212<<14 | 0x47<<7 | 0x52,
+ 39262 - 19968: jis0212<<14 | 0x47<<7 | 0x53,
+ 39263 - 19968: jis0212<<14 | 0x47<<7 | 0x54,
+ 39264 - 19968: jis0212<<14 | 0x47<<7 | 0x55,
+ 39318 - 19968: jis0208<<14 | 0x1B<<7 | 0x52,
+ 39319 - 19968: jis0208<<14 | 0x50<<7 | 0x23,
+ 39320 - 19968: jis0208<<14 | 0x50<<7 | 0x24,
+ 39321 - 19968: jis0208<<14 | 0x18<<7 | 0x40,
+ 39323 - 19968: jis0212<<14 | 0x47<<7 | 0x56,
+ 39325 - 19968: jis0212<<14 | 0x47<<7 | 0x57,
+ 39326 - 19968: jis0208<<14 | 0x5B<<7 | 0x3F,
+ 39327 - 19968: jis0212<<14 | 0x47<<7 | 0x58,
+ 39333 - 19968: jis0208<<14 | 0x50<<7 | 0x25,
+ 39334 - 19968: jis0212<<14 | 0x47<<7 | 0x59,
+ 39336 - 19968: jis0208<<14 | 0x12<<7 | 0x1D,
+ 39340 - 19968: jis0208<<14 | 0x26<<7 | 0x2E,
+ 39341 - 19968: jis0208<<14 | 0x50<<7 | 0x26,
+ 39342 - 19968: jis0208<<14 | 0x50<<7 | 0x27,
+ 39344 - 19968: jis0212<<14 | 0x47<<7 | 0x5A,
+ 39345 - 19968: jis0212<<14 | 0x47<<7 | 0x5B,
+ 39346 - 19968: jis0212<<14 | 0x47<<7 | 0x5C,
+ 39347 - 19968: jis0208<<14 | 0x22<<7 | 0x39,
+ 39348 - 19968: jis0208<<14 | 0x25<<7 | 0x4A,
+ 39349 - 19968: jis0212<<14 | 0x47<<7 | 0x5D,
+ 39353 - 19968: jis0212<<14 | 0x48<<7 | 0x00,
+ 39354 - 19968: jis0212<<14 | 0x48<<7 | 0x01,
+ 39356 - 19968: jis0208<<14 | 0x50<<7 | 0x28,
+ 39357 - 19968: jis0212<<14 | 0x48<<7 | 0x02,
+ 39359 - 19968: jis0212<<14 | 0x48<<7 | 0x03,
+ 39361 - 19968: jis0208<<14 | 0x26<<7 | 0x5C,
+ 39363 - 19968: jis0212<<14 | 0x48<<7 | 0x04,
+ 39364 - 19968: jis0208<<14 | 0x21<<7 | 0x2B,
+ 39365 - 19968: jis0208<<14 | 0x10<<7 | 0x37,
+ 39366 - 19968: jis0208<<14 | 0x15<<7 | 0x4D,
+ 39368 - 19968: jis0208<<14 | 0x15<<7 | 0x4E,
+ 39369 - 19968: jis0212<<14 | 0x48<<7 | 0x05,
+ 39376 - 19968: jis0208<<14 | 0x22<<7 | 0x52,
+ 39377 - 19968: jis0208<<14 | 0x50<<7 | 0x2D,
+ 39378 - 19968: jis0208<<14 | 0x15<<7 | 0x4F,
+ 39379 - 19968: jis0212<<14 | 0x48<<7 | 0x06,
+ 39380 - 19968: jis0212<<14 | 0x48<<7 | 0x07,
+ 39381 - 19968: jis0208<<14 | 0x11<<7 | 0x4E,
+ 39384 - 19968: jis0208<<14 | 0x50<<7 | 0x2C,
+ 39385 - 19968: jis0212<<14 | 0x48<<7 | 0x08,
+ 39386 - 19968: jis0212<<14 | 0x48<<7 | 0x09,
+ 39387 - 19968: jis0208<<14 | 0x50<<7 | 0x2A,
+ 39388 - 19968: jis0212<<14 | 0x48<<7 | 0x0A,
+ 39389 - 19968: jis0208<<14 | 0x50<<7 | 0x2B,
+ 39390 - 19968: jis0212<<14 | 0x48<<7 | 0x0B,
+ 39391 - 19968: jis0208<<14 | 0x50<<7 | 0x29,
+ 39394 - 19968: jis0208<<14 | 0x50<<7 | 0x37,
+ 39399 - 19968: jis0212<<14 | 0x48<<7 | 0x0C,
+ 39402 - 19968: jis0212<<14 | 0x48<<7 | 0x0D,
+ 39403 - 19968: jis0212<<14 | 0x48<<7 | 0x0E,
+ 39404 - 19968: jis0212<<14 | 0x48<<7 | 0x0F,
+ 39405 - 19968: jis0208<<14 | 0x50<<7 | 0x2E,
+ 39406 - 19968: jis0208<<14 | 0x50<<7 | 0x2F,
+ 39408 - 19968: jis0212<<14 | 0x48<<7 | 0x10,
+ 39409 - 19968: jis0208<<14 | 0x50<<7 | 0x30,
+ 39410 - 19968: jis0208<<14 | 0x50<<7 | 0x31,
+ 39412 - 19968: jis0212<<14 | 0x48<<7 | 0x11,
+ 39413 - 19968: jis0212<<14 | 0x48<<7 | 0x12,
+ 39416 - 19968: jis0208<<14 | 0x50<<7 | 0x33,
+ 39417 - 19968: jis0212<<14 | 0x48<<7 | 0x13,
+ 39419 - 19968: jis0208<<14 | 0x50<<7 | 0x32,
+ 39421 - 19968: jis0212<<14 | 0x48<<7 | 0x14,
+ 39422 - 19968: jis0212<<14 | 0x48<<7 | 0x15,
+ 39423 - 19968: jis0208<<14 | 0x1C<<7 | 0x38,
+ 39425 - 19968: jis0208<<14 | 0x50<<7 | 0x34,
+ 39426 - 19968: jis0212<<14 | 0x48<<7 | 0x16,
+ 39427 - 19968: jis0212<<14 | 0x48<<7 | 0x17,
+ 39428 - 19968: jis0212<<14 | 0x48<<7 | 0x18,
+ 39429 - 19968: jis0208<<14 | 0x50<<7 | 0x36,
+ 39435 - 19968: jis0212<<14 | 0x48<<7 | 0x19,
+ 39436 - 19968: jis0212<<14 | 0x48<<7 | 0x1A,
+ 39438 - 19968: jis0208<<14 | 0x14<<7 | 0x12,
+ 39439 - 19968: jis0208<<14 | 0x50<<7 | 0x35,
+ 39440 - 19968: jis0212<<14 | 0x48<<7 | 0x1B,
+ 39441 - 19968: jis0212<<14 | 0x48<<7 | 0x1C,
+ 39442 - 19968: jis0208<<14 | 0x20<<7 | 0x5A,
+ 39443 - 19968: jis0208<<14 | 0x17<<7 | 0x12,
+ 39446 - 19968: jis0212<<14 | 0x48<<7 | 0x1D,
+ 39449 - 19968: jis0208<<14 | 0x50<<7 | 0x38,
+ 39454 - 19968: jis0212<<14 | 0x48<<7 | 0x1E,
+ 39456 - 19968: jis0212<<14 | 0x48<<7 | 0x1F,
+ 39458 - 19968: jis0212<<14 | 0x48<<7 | 0x20,
+ 39459 - 19968: jis0212<<14 | 0x48<<7 | 0x21,
+ 39460 - 19968: jis0212<<14 | 0x48<<7 | 0x22,
+ 39463 - 19968: jis0212<<14 | 0x48<<7 | 0x23,
+ 39464 - 19968: jis0208<<14 | 0x21<<7 | 0x2C,
+ 39467 - 19968: jis0208<<14 | 0x50<<7 | 0x39,
+ 39469 - 19968: jis0212<<14 | 0x48<<7 | 0x24,
+ 39470 - 19968: jis0212<<14 | 0x48<<7 | 0x25,
+ 39472 - 19968: jis0208<<14 | 0x25<<7 | 0x0C,
+ 39475 - 19968: jis0212<<14 | 0x48<<7 | 0x26,
+ 39477 - 19968: jis0212<<14 | 0x48<<7 | 0x27,
+ 39478 - 19968: jis0212<<14 | 0x48<<7 | 0x28,
+ 39479 - 19968: jis0208<<14 | 0x50<<7 | 0x3A,
+ 39480 - 19968: jis0212<<14 | 0x48<<7 | 0x29,
+ 39486 - 19968: jis0208<<14 | 0x50<<7 | 0x3F,
+ 39488 - 19968: jis0208<<14 | 0x50<<7 | 0x3D,
+ 39489 - 19968: jis0212<<14 | 0x48<<7 | 0x2B,
+ 39490 - 19968: jis0208<<14 | 0x50<<7 | 0x3C,
+ 39491 - 19968: jis0208<<14 | 0x50<<7 | 0x3E,
+ 39492 - 19968: jis0212<<14 | 0x48<<7 | 0x2C,
+ 39493 - 19968: jis0208<<14 | 0x50<<7 | 0x3B,
+ 39495 - 19968: jis0212<<14 | 0x48<<7 | 0x2A,
+ 39498 - 19968: jis0212<<14 | 0x48<<7 | 0x2D,
+ 39499 - 19968: jis0212<<14 | 0x48<<7 | 0x2E,
+ 39500 - 19968: jis0212<<14 | 0x48<<7 | 0x2F,
+ 39501 - 19968: jis0208<<14 | 0x50<<7 | 0x41,
+ 39502 - 19968: jis0208<<14 | 0x5B<<7 | 0x40,
+ 39505 - 19968: jis0212<<14 | 0x48<<7 | 0x31,
+ 39508 - 19968: jis0212<<14 | 0x48<<7 | 0x32,
+ 39509 - 19968: jis0208<<14 | 0x50<<7 | 0x40,
+ 39510 - 19968: jis0212<<14 | 0x48<<7 | 0x33,
+ 39511 - 19968: jis0208<<14 | 0x50<<7 | 0x43,
+ 39514 - 19968: jis0208<<14 | 0x15<<7 | 0x22,
+ 39515 - 19968: jis0208<<14 | 0x50<<7 | 0x42,
+ 39517 - 19968: jis0212<<14 | 0x48<<7 | 0x34,
+ 39519 - 19968: jis0208<<14 | 0x50<<7 | 0x44,
+ 39522 - 19968: jis0208<<14 | 0x50<<7 | 0x45,
+ 39524 - 19968: jis0208<<14 | 0x50<<7 | 0x47,
+ 39525 - 19968: jis0208<<14 | 0x50<<7 | 0x46,
+ 39529 - 19968: jis0208<<14 | 0x50<<7 | 0x48,
+ 39530 - 19968: jis0208<<14 | 0x50<<7 | 0x4A,
+ 39531 - 19968: jis0208<<14 | 0x50<<7 | 0x49,
+ 39592 - 19968: jis0208<<14 | 0x18<<7 | 0x5B,
+ 39594 - 19968: jis0212<<14 | 0x48<<7 | 0x35,
+ 39596 - 19968: jis0212<<14 | 0x48<<7 | 0x36,
+ 39597 - 19968: jis0208<<14 | 0x50<<7 | 0x4B,
+ 39598 - 19968: jis0212<<14 | 0x48<<7 | 0x37,
+ 39599 - 19968: jis0212<<14 | 0x48<<7 | 0x38,
+ 39600 - 19968: jis0208<<14 | 0x50<<7 | 0x4C,
+ 39602 - 19968: jis0212<<14 | 0x48<<7 | 0x39,
+ 39604 - 19968: jis0212<<14 | 0x48<<7 | 0x3A,
+ 39605 - 19968: jis0212<<14 | 0x48<<7 | 0x3B,
+ 39606 - 19968: jis0212<<14 | 0x48<<7 | 0x3C,
+ 39608 - 19968: jis0208<<14 | 0x12<<7 | 0x1B,
+ 39609 - 19968: jis0212<<14 | 0x48<<7 | 0x3D,
+ 39611 - 19968: jis0212<<14 | 0x48<<7 | 0x3E,
+ 39612 - 19968: jis0208<<14 | 0x50<<7 | 0x4D,
+ 39614 - 19968: jis0212<<14 | 0x48<<7 | 0x3F,
+ 39615 - 19968: jis0212<<14 | 0x48<<7 | 0x40,
+ 39616 - 19968: jis0208<<14 | 0x50<<7 | 0x4E,
+ 39617 - 19968: jis0212<<14 | 0x48<<7 | 0x41,
+ 39619 - 19968: jis0212<<14 | 0x48<<7 | 0x42,
+ 39620 - 19968: jis0208<<14 | 0x1E<<7 | 0x50,
+ 39622 - 19968: jis0212<<14 | 0x48<<7 | 0x43,
+ 39624 - 19968: jis0212<<14 | 0x48<<7 | 0x44,
+ 39630 - 19968: jis0212<<14 | 0x48<<7 | 0x45,
+ 39631 - 19968: jis0208<<14 | 0x50<<7 | 0x4F,
+ 39632 - 19968: jis0212<<14 | 0x48<<7 | 0x46,
+ 39633 - 19968: jis0208<<14 | 0x50<<7 | 0x50,
+ 39634 - 19968: jis0212<<14 | 0x48<<7 | 0x47,
+ 39635 - 19968: jis0208<<14 | 0x50<<7 | 0x51,
+ 39636 - 19968: jis0208<<14 | 0x50<<7 | 0x52,
+ 39637 - 19968: jis0212<<14 | 0x48<<7 | 0x48,
+ 39638 - 19968: jis0212<<14 | 0x48<<7 | 0x49,
+ 39639 - 19968: jis0212<<14 | 0x48<<7 | 0x4A,
+ 39640 - 19968: jis0208<<14 | 0x18<<7 | 0x41,
+ 39641 - 19968: jis0208<<14 | 0x5B<<7 | 0x41,
+ 39643 - 19968: jis0212<<14 | 0x48<<7 | 0x4B,
+ 39644 - 19968: jis0208<<14 | 0x5B<<7 | 0x42,
+ 39646 - 19968: jis0208<<14 | 0x50<<7 | 0x53,
+ 39647 - 19968: jis0208<<14 | 0x50<<7 | 0x54,
+ 39648 - 19968: jis0212<<14 | 0x48<<7 | 0x4D,
+ 39650 - 19968: jis0208<<14 | 0x50<<7 | 0x55,
+ 39651 - 19968: jis0208<<14 | 0x50<<7 | 0x56,
+ 39652 - 19968: jis0212<<14 | 0x48<<7 | 0x4E,
+ 39653 - 19968: jis0212<<14 | 0x48<<7 | 0x4F,
+ 39654 - 19968: jis0208<<14 | 0x50<<7 | 0x57,
+ 39655 - 19968: jis0212<<14 | 0x48<<7 | 0x50,
+ 39657 - 19968: jis0212<<14 | 0x48<<7 | 0x51,
+ 39658 - 19968: jis0208<<14 | 0x27<<7 | 0x10,
+ 39659 - 19968: jis0208<<14 | 0x50<<7 | 0x59,
+ 39660 - 19968: jis0212<<14 | 0x48<<7 | 0x52,
+ 39661 - 19968: jis0208<<14 | 0x28<<7 | 0x05,
+ 39662 - 19968: jis0208<<14 | 0x50<<7 | 0x5A,
+ 39663 - 19968: jis0208<<14 | 0x50<<7 | 0x58,
+ 39665 - 19968: jis0208<<14 | 0x50<<7 | 0x5C,
+ 39666 - 19968: jis0212<<14 | 0x48<<7 | 0x53,
+ 39667 - 19968: jis0212<<14 | 0x48<<7 | 0x54,
+ 39668 - 19968: jis0208<<14 | 0x50<<7 | 0x5B,
+ 39669 - 19968: jis0212<<14 | 0x48<<7 | 0x55,
+ 39671 - 19968: jis0208<<14 | 0x50<<7 | 0x5D,
+ 39673 - 19968: jis0212<<14 | 0x48<<7 | 0x56,
+ 39674 - 19968: jis0212<<14 | 0x48<<7 | 0x57,
+ 39675 - 19968: jis0208<<14 | 0x51<<7 | 0x00,
+ 39677 - 19968: jis0212<<14 | 0x48<<7 | 0x58,
+ 39679 - 19968: jis0212<<14 | 0x48<<7 | 0x59,
+ 39680 - 19968: jis0212<<14 | 0x48<<7 | 0x5A,
+ 39681 - 19968: jis0212<<14 | 0x48<<7 | 0x5B,
+ 39682 - 19968: jis0212<<14 | 0x48<<7 | 0x5C,
+ 39683 - 19968: jis0212<<14 | 0x48<<7 | 0x5D,
+ 39684 - 19968: jis0212<<14 | 0x49<<7 | 0x00,
+ 39685 - 19968: jis0212<<14 | 0x49<<7 | 0x01,
+ 39686 - 19968: jis0208<<14 | 0x51<<7 | 0x01,
+ 39688 - 19968: jis0212<<14 | 0x49<<7 | 0x02,
+ 39689 - 19968: jis0212<<14 | 0x49<<7 | 0x03,
+ 39691 - 19968: jis0212<<14 | 0x49<<7 | 0x04,
+ 39692 - 19968: jis0212<<14 | 0x49<<7 | 0x05,
+ 39693 - 19968: jis0212<<14 | 0x49<<7 | 0x06,
+ 39694 - 19968: jis0212<<14 | 0x49<<7 | 0x07,
+ 39696 - 19968: jis0212<<14 | 0x49<<7 | 0x08,
+ 39698 - 19968: jis0212<<14 | 0x49<<7 | 0x09,
+ 39702 - 19968: jis0212<<14 | 0x49<<7 | 0x0A,
+ 39704 - 19968: jis0208<<14 | 0x51<<7 | 0x02,
+ 39705 - 19968: jis0212<<14 | 0x49<<7 | 0x0B,
+ 39706 - 19968: jis0208<<14 | 0x51<<7 | 0x03,
+ 39707 - 19968: jis0212<<14 | 0x49<<7 | 0x0C,
+ 39708 - 19968: jis0212<<14 | 0x49<<7 | 0x0D,
+ 39711 - 19968: jis0208<<14 | 0x51<<7 | 0x04,
+ 39712 - 19968: jis0212<<14 | 0x49<<7 | 0x0E,
+ 39714 - 19968: jis0208<<14 | 0x51<<7 | 0x05,
+ 39715 - 19968: jis0208<<14 | 0x51<<7 | 0x06,
+ 39717 - 19968: jis0208<<14 | 0x51<<7 | 0x07,
+ 39718 - 19968: jis0212<<14 | 0x49<<7 | 0x0F,
+ 39719 - 19968: jis0208<<14 | 0x51<<7 | 0x08,
+ 39720 - 19968: jis0208<<14 | 0x51<<7 | 0x09,
+ 39721 - 19968: jis0208<<14 | 0x51<<7 | 0x0A,
+ 39722 - 19968: jis0208<<14 | 0x51<<7 | 0x0B,
+ 39723 - 19968: jis0212<<14 | 0x49<<7 | 0x10,
+ 39725 - 19968: jis0212<<14 | 0x49<<7 | 0x11,
+ 39726 - 19968: jis0208<<14 | 0x51<<7 | 0x0C,
+ 39727 - 19968: jis0208<<14 | 0x51<<7 | 0x0D,
+ 39729 - 19968: jis0208<<14 | 0x3C<<7 | 0x14,
+ 39730 - 19968: jis0208<<14 | 0x51<<7 | 0x0E,
+ 39731 - 19968: jis0212<<14 | 0x49<<7 | 0x12,
+ 39732 - 19968: jis0212<<14 | 0x49<<7 | 0x13,
+ 39733 - 19968: jis0212<<14 | 0x49<<7 | 0x14,
+ 39735 - 19968: jis0212<<14 | 0x49<<7 | 0x15,
+ 39737 - 19968: jis0212<<14 | 0x49<<7 | 0x16,
+ 39738 - 19968: jis0212<<14 | 0x49<<7 | 0x17,
+ 39739 - 19968: jis0208<<14 | 0x43<<7 | 0x57,
+ 39740 - 19968: jis0208<<14 | 0x14<<7 | 0x13,
+ 39741 - 19968: jis0212<<14 | 0x49<<7 | 0x18,
+ 39745 - 19968: jis0208<<14 | 0x12<<7 | 0x00,
+ 39746 - 19968: jis0208<<14 | 0x19<<7 | 0x11,
+ 39747 - 19968: jis0208<<14 | 0x51<<7 | 0x10,
+ 39748 - 19968: jis0208<<14 | 0x51<<7 | 0x0F,
+ 39749 - 19968: jis0208<<14 | 0x2B<<7 | 0x04,
+ 39752 - 19968: jis0212<<14 | 0x49<<7 | 0x19,
+ 39755 - 19968: jis0212<<14 | 0x49<<7 | 0x1A,
+ 39756 - 19968: jis0212<<14 | 0x49<<7 | 0x1B,
+ 39757 - 19968: jis0208<<14 | 0x51<<7 | 0x12,
+ 39758 - 19968: jis0208<<14 | 0x51<<7 | 0x13,
+ 39759 - 19968: jis0208<<14 | 0x51<<7 | 0x11,
+ 39761 - 19968: jis0208<<14 | 0x51<<7 | 0x14,
+ 39764 - 19968: jis0208<<14 | 0x2A<<7 | 0x41,
+ 39765 - 19968: jis0212<<14 | 0x49<<7 | 0x1C,
+ 39766 - 19968: jis0212<<14 | 0x49<<7 | 0x1D,
+ 39767 - 19968: jis0212<<14 | 0x49<<7 | 0x1E,
+ 39768 - 19968: jis0208<<14 | 0x51<<7 | 0x15,
+ 39770 - 19968: jis0208<<14 | 0x14<<7 | 0x5A,
+ 39771 - 19968: jis0212<<14 | 0x49<<7 | 0x1F,
+ 39774 - 19968: jis0212<<14 | 0x49<<7 | 0x20,
+ 39777 - 19968: jis0212<<14 | 0x49<<7 | 0x21,
+ 39779 - 19968: jis0212<<14 | 0x49<<7 | 0x22,
+ 39781 - 19968: jis0212<<14 | 0x49<<7 | 0x23,
+ 39782 - 19968: jis0212<<14 | 0x49<<7 | 0x24,
+ 39784 - 19968: jis0212<<14 | 0x49<<7 | 0x25,
+ 39786 - 19968: jis0212<<14 | 0x49<<7 | 0x26,
+ 39787 - 19968: jis0212<<14 | 0x49<<7 | 0x27,
+ 39788 - 19968: jis0212<<14 | 0x49<<7 | 0x28,
+ 39789 - 19968: jis0212<<14 | 0x49<<7 | 0x29,
+ 39790 - 19968: jis0212<<14 | 0x49<<7 | 0x2A,
+ 39791 - 19968: jis0208<<14 | 0x2E<<7 | 0x04,
+ 39794 - 19968: jis0208<<14 | 0x5B<<7 | 0x44,
+ 39795 - 19968: jis0212<<14 | 0x49<<7 | 0x2B,
+ 39796 - 19968: jis0208<<14 | 0x51<<7 | 0x16,
+ 39797 - 19968: jis0208<<14 | 0x5B<<7 | 0x43,
+ 39799 - 19968: jis0212<<14 | 0x49<<7 | 0x2D,
+ 39800 - 19968: jis0212<<14 | 0x49<<7 | 0x2E,
+ 39801 - 19968: jis0212<<14 | 0x49<<7 | 0x2F,
+ 39807 - 19968: jis0212<<14 | 0x49<<7 | 0x30,
+ 39808 - 19968: jis0212<<14 | 0x49<<7 | 0x31,
+ 39811 - 19968: jis0208<<14 | 0x51<<7 | 0x18,
+ 39812 - 19968: jis0212<<14 | 0x49<<7 | 0x32,
+ 39813 - 19968: jis0212<<14 | 0x49<<7 | 0x33,
+ 39814 - 19968: jis0212<<14 | 0x49<<7 | 0x34,
+ 39815 - 19968: jis0212<<14 | 0x49<<7 | 0x35,
+ 39817 - 19968: jis0212<<14 | 0x49<<7 | 0x36,
+ 39818 - 19968: jis0212<<14 | 0x49<<7 | 0x37,
+ 39819 - 19968: jis0212<<14 | 0x49<<7 | 0x38,
+ 39821 - 19968: jis0212<<14 | 0x49<<7 | 0x39,
+ 39822 - 19968: jis0208<<14 | 0x0F<<7 | 0x1D,
+ 39823 - 19968: jis0208<<14 | 0x5B<<7 | 0x45,
+ 39824 - 19968: jis0212<<14 | 0x49<<7 | 0x3B,
+ 39825 - 19968: jis0208<<14 | 0x51<<7 | 0x19,
+ 39826 - 19968: jis0208<<14 | 0x29<<7 | 0x0A,
+ 39827 - 19968: jis0208<<14 | 0x51<<7 | 0x17,
+ 39828 - 19968: jis0212<<14 | 0x49<<7 | 0x3C,
+ 39830 - 19968: jis0208<<14 | 0x51<<7 | 0x1A,
+ 39831 - 19968: jis0208<<14 | 0x51<<7 | 0x1B,
+ 39834 - 19968: jis0212<<14 | 0x49<<7 | 0x3D,
+ 39837 - 19968: jis0212<<14 | 0x49<<7 | 0x3E,
+ 39838 - 19968: jis0212<<14 | 0x49<<7 | 0x3F,
+ 39839 - 19968: jis0208<<14 | 0x51<<7 | 0x1C,
+ 39840 - 19968: jis0208<<14 | 0x51<<7 | 0x1D,
+ 39846 - 19968: jis0212<<14 | 0x49<<7 | 0x40,
+ 39847 - 19968: jis0212<<14 | 0x49<<7 | 0x41,
+ 39848 - 19968: jis0208<<14 | 0x51<<7 | 0x1E,
+ 39849 - 19968: jis0212<<14 | 0x49<<7 | 0x42,
+ 39850 - 19968: jis0208<<14 | 0x2A<<7 | 0x4D,
+ 39851 - 19968: jis0208<<14 | 0x1A<<7 | 0x0C,
+ 39852 - 19968: jis0212<<14 | 0x49<<7 | 0x43,
+ 39853 - 19968: jis0208<<14 | 0x19<<7 | 0x59,
+ 39854 - 19968: jis0208<<14 | 0x20<<7 | 0x0E,
+ 39856 - 19968: jis0212<<14 | 0x49<<7 | 0x44,
+ 39857 - 19968: jis0208<<14 | 0x5B<<7 | 0x46,
+ 39858 - 19968: jis0212<<14 | 0x49<<7 | 0x46,
+ 39860 - 19968: jis0208<<14 | 0x51<<7 | 0x1F,
+ 39863 - 19968: jis0212<<14 | 0x49<<7 | 0x47,
+ 39864 - 19968: jis0212<<14 | 0x49<<7 | 0x48,
+ 39865 - 19968: jis0208<<14 | 0x51<<7 | 0x22,
+ 39867 - 19968: jis0208<<14 | 0x5B<<7 | 0x47,
+ 39868 - 19968: jis0212<<14 | 0x49<<7 | 0x4A,
+ 39870 - 19968: jis0212<<14 | 0x49<<7 | 0x4B,
+ 39871 - 19968: jis0212<<14 | 0x49<<7 | 0x4C,
+ 39872 - 19968: jis0208<<14 | 0x51<<7 | 0x20,
+ 39873 - 19968: jis0212<<14 | 0x49<<7 | 0x4D,
+ 39878 - 19968: jis0208<<14 | 0x51<<7 | 0x23,
+ 39879 - 19968: jis0212<<14 | 0x49<<7 | 0x4E,
+ 39880 - 19968: jis0212<<14 | 0x49<<7 | 0x4F,
+ 39881 - 19968: jis0208<<14 | 0x17<<7 | 0x50,
+ 39882 - 19968: jis0208<<14 | 0x51<<7 | 0x21,
+ 39886 - 19968: jis0212<<14 | 0x49<<7 | 0x50,
+ 39887 - 19968: jis0208<<14 | 0x51<<7 | 0x24,
+ 39888 - 19968: jis0212<<14 | 0x49<<7 | 0x51,
+ 39889 - 19968: jis0208<<14 | 0x51<<7 | 0x25,
+ 39890 - 19968: jis0208<<14 | 0x51<<7 | 0x26,
+ 39892 - 19968: jis0208<<14 | 0x51<<7 | 0x2A,
+ 39894 - 19968: jis0208<<14 | 0x1A<<7 | 0x09,
+ 39895 - 19968: jis0212<<14 | 0x49<<7 | 0x52,
+ 39896 - 19968: jis0212<<14 | 0x49<<7 | 0x53,
+ 39899 - 19968: jis0208<<14 | 0x21<<7 | 0x43,
+ 39901 - 19968: jis0212<<14 | 0x49<<7 | 0x54,
+ 39903 - 19968: jis0212<<14 | 0x49<<7 | 0x55,
+ 39905 - 19968: jis0208<<14 | 0x51<<7 | 0x2B,
+ 39906 - 19968: jis0208<<14 | 0x51<<7 | 0x28,
+ 39907 - 19968: jis0208<<14 | 0x51<<7 | 0x27,
+ 39908 - 19968: jis0208<<14 | 0x51<<7 | 0x29,
+ 39909 - 19968: jis0212<<14 | 0x49<<7 | 0x56,
+ 39911 - 19968: jis0212<<14 | 0x49<<7 | 0x57,
+ 39912 - 19968: jis0208<<14 | 0x16<<7 | 0x3E,
+ 39914 - 19968: jis0212<<14 | 0x49<<7 | 0x58,
+ 39915 - 19968: jis0212<<14 | 0x49<<7 | 0x59,
+ 39919 - 19968: jis0212<<14 | 0x49<<7 | 0x5A,
+ 39920 - 19968: jis0208<<14 | 0x51<<7 | 0x2F,
+ 39921 - 19968: jis0208<<14 | 0x51<<7 | 0x2E,
+ 39922 - 19968: jis0208<<14 | 0x51<<7 | 0x2D,
+ 39923 - 19968: jis0212<<14 | 0x49<<7 | 0x5B,
+ 39925 - 19968: jis0208<<14 | 0x0F<<7 | 0x12,
+ 39927 - 19968: jis0212<<14 | 0x49<<7 | 0x5C,
+ 39928 - 19968: jis0212<<14 | 0x49<<7 | 0x5D,
+ 39929 - 19968: jis0212<<14 | 0x4A<<7 | 0x00,
+ 39930 - 19968: jis0212<<14 | 0x4A<<7 | 0x01,
+ 39933 - 19968: jis0212<<14 | 0x4A<<7 | 0x02,
+ 39935 - 19968: jis0212<<14 | 0x4A<<7 | 0x03,
+ 39936 - 19968: jis0208<<14 | 0x5B<<7 | 0x48,
+ 39938 - 19968: jis0212<<14 | 0x4A<<7 | 0x05,
+ 39940 - 19968: jis0208<<14 | 0x51<<7 | 0x39,
+ 39942 - 19968: jis0208<<14 | 0x51<<7 | 0x35,
+ 39944 - 19968: jis0208<<14 | 0x51<<7 | 0x36,
+ 39945 - 19968: jis0208<<14 | 0x51<<7 | 0x32,
+ 39946 - 19968: jis0208<<14 | 0x51<<7 | 0x38,
+ 39947 - 19968: jis0212<<14 | 0x4A<<7 | 0x06,
+ 39948 - 19968: jis0208<<14 | 0x51<<7 | 0x34,
+ 39949 - 19968: jis0208<<14 | 0x12<<7 | 0x41,
+ 39951 - 19968: jis0212<<14 | 0x4A<<7 | 0x07,
+ 39952 - 19968: jis0208<<14 | 0x2E<<7 | 0x2B,
+ 39953 - 19968: jis0212<<14 | 0x4A<<7 | 0x08,
+ 39954 - 19968: jis0208<<14 | 0x51<<7 | 0x37,
+ 39955 - 19968: jis0208<<14 | 0x51<<7 | 0x33,
+ 39956 - 19968: jis0208<<14 | 0x51<<7 | 0x31,
+ 39957 - 19968: jis0208<<14 | 0x51<<7 | 0x30,
+ 39958 - 19968: jis0212<<14 | 0x4A<<7 | 0x09,
+ 39960 - 19968: jis0212<<14 | 0x4A<<7 | 0x0A,
+ 39961 - 19968: jis0212<<14 | 0x4A<<7 | 0x0B,
+ 39962 - 19968: jis0212<<14 | 0x4A<<7 | 0x0C,
+ 39963 - 19968: jis0208<<14 | 0x51<<7 | 0x3B,
+ 39964 - 19968: jis0212<<14 | 0x4A<<7 | 0x0D,
+ 39966 - 19968: jis0212<<14 | 0x4A<<7 | 0x0E,
+ 39969 - 19968: jis0208<<14 | 0x51<<7 | 0x3E,
+ 39970 - 19968: jis0212<<14 | 0x4A<<7 | 0x0F,
+ 39971 - 19968: jis0212<<14 | 0x4A<<7 | 0x10,
+ 39972 - 19968: jis0208<<14 | 0x51<<7 | 0x3D,
+ 39973 - 19968: jis0208<<14 | 0x51<<7 | 0x3C,
+ 39974 - 19968: jis0212<<14 | 0x4A<<7 | 0x11,
+ 39975 - 19968: jis0212<<14 | 0x4A<<7 | 0x12,
+ 39976 - 19968: jis0212<<14 | 0x4A<<7 | 0x13,
+ 39977 - 19968: jis0212<<14 | 0x4A<<7 | 0x14,
+ 39978 - 19968: jis0212<<14 | 0x4A<<7 | 0x15,
+ 39981 - 19968: jis0208<<14 | 0x28<<7 | 0x28,
+ 39982 - 19968: jis0208<<14 | 0x51<<7 | 0x3A,
+ 39983 - 19968: jis0208<<14 | 0x0F<<7 | 0x52,
+ 39984 - 19968: jis0208<<14 | 0x51<<7 | 0x3F,
+ 39985 - 19968: jis0212<<14 | 0x4A<<7 | 0x16,
+ 39986 - 19968: jis0208<<14 | 0x51<<7 | 0x41,
+ 39989 - 19968: jis0212<<14 | 0x4A<<7 | 0x17,
+ 39990 - 19968: jis0212<<14 | 0x4A<<7 | 0x18,
+ 39991 - 19968: jis0212<<14 | 0x4A<<7 | 0x19,
+ 39993 - 19968: jis0208<<14 | 0x12<<7 | 0x4E,
+ 39994 - 19968: jis0208<<14 | 0x51<<7 | 0x2C,
+ 39995 - 19968: jis0208<<14 | 0x10<<7 | 0x16,
+ 39997 - 19968: jis0212<<14 | 0x4A<<7 | 0x1A,
+ 39998 - 19968: jis0208<<14 | 0x51<<7 | 0x43,
+ 40001 - 19968: jis0212<<14 | 0x4A<<7 | 0x1B,
+ 40003 - 19968: jis0212<<14 | 0x4A<<7 | 0x1C,
+ 40004 - 19968: jis0212<<14 | 0x4A<<7 | 0x1D,
+ 40005 - 19968: jis0212<<14 | 0x4A<<7 | 0x1E,
+ 40006 - 19968: jis0208<<14 | 0x51<<7 | 0x42,
+ 40007 - 19968: jis0208<<14 | 0x51<<7 | 0x40,
+ 40008 - 19968: jis0208<<14 | 0x22<<7 | 0x0C,
+ 40009 - 19968: jis0212<<14 | 0x4A<<7 | 0x1F,
+ 40010 - 19968: jis0212<<14 | 0x4A<<7 | 0x20,
+ 40014 - 19968: jis0212<<14 | 0x4A<<7 | 0x21,
+ 40015 - 19968: jis0212<<14 | 0x4A<<7 | 0x22,
+ 40016 - 19968: jis0212<<14 | 0x4A<<7 | 0x23,
+ 40018 - 19968: jis0208<<14 | 0x2A<<7 | 0x4F,
+ 40019 - 19968: jis0212<<14 | 0x4A<<7 | 0x24,
+ 40020 - 19968: jis0212<<14 | 0x4A<<7 | 0x25,
+ 40022 - 19968: jis0212<<14 | 0x4A<<7 | 0x26,
+ 40023 - 19968: jis0208<<14 | 0x2D<<7 | 0x39,
+ 40024 - 19968: jis0212<<14 | 0x4A<<7 | 0x27,
+ 40026 - 19968: jis0208<<14 | 0x51<<7 | 0x44,
+ 40027 - 19968: jis0212<<14 | 0x4A<<7 | 0x28,
+ 40028 - 19968: jis0212<<14 | 0x4A<<7 | 0x2F,
+ 40029 - 19968: jis0212<<14 | 0x4A<<7 | 0x29,
+ 40030 - 19968: jis0212<<14 | 0x4A<<7 | 0x2A,
+ 40031 - 19968: jis0212<<14 | 0x4A<<7 | 0x2B,
+ 40032 - 19968: jis0208<<14 | 0x51<<7 | 0x45,
+ 40035 - 19968: jis0212<<14 | 0x4A<<7 | 0x2C,
+ 40039 - 19968: jis0208<<14 | 0x51<<7 | 0x46,
+ 40040 - 19968: jis0212<<14 | 0x4A<<7 | 0x31,
+ 40041 - 19968: jis0212<<14 | 0x4A<<7 | 0x2D,
+ 40042 - 19968: jis0212<<14 | 0x4A<<7 | 0x2E,
+ 40043 - 19968: jis0212<<14 | 0x4A<<7 | 0x30,
+ 40046 - 19968: jis0212<<14 | 0x4A<<7 | 0x32,
+ 40048 - 19968: jis0212<<14 | 0x4A<<7 | 0x33,
+ 40050 - 19968: jis0212<<14 | 0x4A<<7 | 0x34,
+ 40053 - 19968: jis0212<<14 | 0x4A<<7 | 0x35,
+ 40054 - 19968: jis0208<<14 | 0x51<<7 | 0x47,
+ 40055 - 19968: jis0212<<14 | 0x4A<<7 | 0x36,
+ 40056 - 19968: jis0208<<14 | 0x51<<7 | 0x48,
+ 40059 - 19968: jis0212<<14 | 0x4A<<7 | 0x37,
+ 40165 - 19968: jis0208<<14 | 0x23<<7 | 0x1A,
+ 40166 - 19968: jis0212<<14 | 0x4A<<7 | 0x38,
+ 40167 - 19968: jis0208<<14 | 0x51<<7 | 0x49,
+ 40169 - 19968: jis0208<<14 | 0x27<<7 | 0x16,
+ 40171 - 19968: jis0208<<14 | 0x51<<7 | 0x4E,
+ 40172 - 19968: jis0208<<14 | 0x51<<7 | 0x4A,
+ 40176 - 19968: jis0208<<14 | 0x51<<7 | 0x4B,
+ 40178 - 19968: jis0212<<14 | 0x4A<<7 | 0x39,
+ 40179 - 19968: jis0208<<14 | 0x2A<<7 | 0x10,
+ 40180 - 19968: jis0208<<14 | 0x2B<<7 | 0x23,
+ 40182 - 19968: jis0208<<14 | 0x25<<7 | 0x2F,
+ 40183 - 19968: jis0212<<14 | 0x4A<<7 | 0x3A,
+ 40185 - 19968: jis0212<<14 | 0x4A<<7 | 0x3B,
+ 40194 - 19968: jis0212<<14 | 0x4A<<7 | 0x3D,
+ 40195 - 19968: jis0208<<14 | 0x51<<7 | 0x4F,
+ 40198 - 19968: jis0208<<14 | 0x51<<7 | 0x50,
+ 40199 - 19968: jis0208<<14 | 0x25<<7 | 0x1D,
+ 40200 - 19968: jis0208<<14 | 0x51<<7 | 0x4D,
+ 40201 - 19968: jis0208<<14 | 0x51<<7 | 0x4C,
+ 40203 - 19968: jis0212<<14 | 0x4A<<7 | 0x3C,
+ 40206 - 19968: jis0208<<14 | 0x11<<7 | 0x09,
+ 40209 - 19968: jis0212<<14 | 0x4A<<7 | 0x3E,
+ 40210 - 19968: jis0208<<14 | 0x51<<7 | 0x58,
+ 40213 - 19968: jis0208<<14 | 0x51<<7 | 0x57,
+ 40215 - 19968: jis0212<<14 | 0x4A<<7 | 0x3F,
+ 40216 - 19968: jis0212<<14 | 0x4A<<7 | 0x40,
+ 40219 - 19968: jis0208<<14 | 0x10<<7 | 0x54,
+ 40220 - 19968: jis0212<<14 | 0x4A<<7 | 0x41,
+ 40221 - 19968: jis0212<<14 | 0x4A<<7 | 0x42,
+ 40222 - 19968: jis0212<<14 | 0x4A<<7 | 0x43,
+ 40223 - 19968: jis0208<<14 | 0x51<<7 | 0x55,
+ 40227 - 19968: jis0208<<14 | 0x51<<7 | 0x54,
+ 40230 - 19968: jis0208<<14 | 0x51<<7 | 0x52,
+ 40232 - 19968: jis0208<<14 | 0x12<<7 | 0x5A,
+ 40234 - 19968: jis0208<<14 | 0x51<<7 | 0x51,
+ 40235 - 19968: jis0208<<14 | 0x1B<<7 | 0x11,
+ 40236 - 19968: jis0208<<14 | 0x11<<7 | 0x08,
+ 40239 - 19968: jis0212<<14 | 0x4A<<7 | 0x44,
+ 40240 - 19968: jis0212<<14 | 0x4A<<7 | 0x45,
+ 40242 - 19968: jis0212<<14 | 0x4A<<7 | 0x46,
+ 40243 - 19968: jis0212<<14 | 0x4A<<7 | 0x47,
+ 40244 - 19968: jis0212<<14 | 0x4A<<7 | 0x48,
+ 40250 - 19968: jis0212<<14 | 0x4A<<7 | 0x49,
+ 40251 - 19968: jis0208<<14 | 0x18<<7 | 0x42,
+ 40252 - 19968: jis0212<<14 | 0x4A<<7 | 0x4A,
+ 40253 - 19968: jis0212<<14 | 0x4A<<7 | 0x4C,
+ 40254 - 19968: jis0208<<14 | 0x51<<7 | 0x5B,
+ 40255 - 19968: jis0208<<14 | 0x51<<7 | 0x5A,
+ 40257 - 19968: jis0208<<14 | 0x51<<7 | 0x59,
+ 40258 - 19968: jis0212<<14 | 0x4A<<7 | 0x4D,
+ 40259 - 19968: jis0212<<14 | 0x4A<<7 | 0x4E,
+ 40260 - 19968: jis0208<<14 | 0x51<<7 | 0x56,
+ 40261 - 19968: jis0212<<14 | 0x4A<<7 | 0x4B,
+ 40262 - 19968: jis0208<<14 | 0x51<<7 | 0x5C,
+ 40263 - 19968: jis0212<<14 | 0x4A<<7 | 0x4F,
+ 40264 - 19968: jis0208<<14 | 0x51<<7 | 0x5D,
+ 40266 - 19968: jis0212<<14 | 0x4A<<7 | 0x50,
+ 40272 - 19968: jis0208<<14 | 0x52<<7 | 0x04,
+ 40273 - 19968: jis0208<<14 | 0x52<<7 | 0x03,
+ 40275 - 19968: jis0212<<14 | 0x4A<<7 | 0x51,
+ 40276 - 19968: jis0212<<14 | 0x4A<<7 | 0x52,
+ 40281 - 19968: jis0208<<14 | 0x52<<7 | 0x05,
+ 40284 - 19968: jis0208<<14 | 0x10<<7 | 0x0C,
+ 40285 - 19968: jis0208<<14 | 0x52<<7 | 0x00,
+ 40286 - 19968: jis0208<<14 | 0x52<<7 | 0x01,
+ 40287 - 19968: jis0212<<14 | 0x4A<<7 | 0x53,
+ 40288 - 19968: jis0208<<14 | 0x18<<7 | 0x53,
+ 40289 - 19968: jis0208<<14 | 0x2B<<7 | 0x18,
+ 40290 - 19968: jis0212<<14 | 0x4A<<7 | 0x55,
+ 40291 - 19968: jis0212<<14 | 0x4A<<7 | 0x54,
+ 40292 - 19968: jis0208<<14 | 0x52<<7 | 0x02,
+ 40293 - 19968: jis0212<<14 | 0x4A<<7 | 0x56,
+ 40297 - 19968: jis0212<<14 | 0x4A<<7 | 0x57,
+ 40298 - 19968: jis0212<<14 | 0x4A<<7 | 0x58,
+ 40299 - 19968: jis0208<<14 | 0x5B<<7 | 0x4A,
+ 40300 - 19968: jis0208<<14 | 0x2A<<7 | 0x11,
+ 40303 - 19968: jis0208<<14 | 0x52<<7 | 0x0A,
+ 40304 - 19968: jis0208<<14 | 0x5B<<7 | 0x49,
+ 40306 - 19968: jis0208<<14 | 0x52<<7 | 0x06,
+ 40310 - 19968: jis0212<<14 | 0x4A<<7 | 0x5B,
+ 40311 - 19968: jis0212<<14 | 0x4A<<7 | 0x5C,
+ 40314 - 19968: jis0208<<14 | 0x52<<7 | 0x0B,
+ 40315 - 19968: jis0212<<14 | 0x4A<<7 | 0x5D,
+ 40316 - 19968: jis0212<<14 | 0x4B<<7 | 0x00,
+ 40318 - 19968: jis0212<<14 | 0x4B<<7 | 0x01,
+ 40323 - 19968: jis0212<<14 | 0x4B<<7 | 0x02,
+ 40324 - 19968: jis0212<<14 | 0x4B<<7 | 0x03,
+ 40326 - 19968: jis0212<<14 | 0x4B<<7 | 0x04,
+ 40327 - 19968: jis0208<<14 | 0x52<<7 | 0x08,
+ 40329 - 19968: jis0208<<14 | 0x52<<7 | 0x07,
+ 40330 - 19968: jis0212<<14 | 0x4B<<7 | 0x05,
+ 40333 - 19968: jis0212<<14 | 0x4B<<7 | 0x06,
+ 40334 - 19968: jis0212<<14 | 0x4B<<7 | 0x07,
+ 40335 - 19968: jis0208<<14 | 0x16<<7 | 0x3B,
+ 40338 - 19968: jis0212<<14 | 0x4B<<7 | 0x08,
+ 40339 - 19968: jis0212<<14 | 0x4B<<7 | 0x09,
+ 40341 - 19968: jis0212<<14 | 0x4B<<7 | 0x0A,
+ 40342 - 19968: jis0212<<14 | 0x4B<<7 | 0x0B,
+ 40343 - 19968: jis0212<<14 | 0x4B<<7 | 0x0C,
+ 40344 - 19968: jis0212<<14 | 0x4B<<7 | 0x0D,
+ 40346 - 19968: jis0208<<14 | 0x52<<7 | 0x0C,
+ 40353 - 19968: jis0212<<14 | 0x4B<<7 | 0x0E,
+ 40356 - 19968: jis0208<<14 | 0x52<<7 | 0x0D,
+ 40361 - 19968: jis0208<<14 | 0x52<<7 | 0x0E,
+ 40362 - 19968: jis0212<<14 | 0x4B<<7 | 0x0F,
+ 40363 - 19968: jis0208<<14 | 0x52<<7 | 0x09,
+ 40364 - 19968: jis0212<<14 | 0x4B<<7 | 0x10,
+ 40366 - 19968: jis0212<<14 | 0x4B<<7 | 0x11,
+ 40367 - 19968: jis0208<<14 | 0x51<<7 | 0x53,
+ 40369 - 19968: jis0212<<14 | 0x4B<<7 | 0x12,
+ 40370 - 19968: jis0208<<14 | 0x52<<7 | 0x0F,
+ 40372 - 19968: jis0208<<14 | 0x23<<7 | 0x40,
+ 40373 - 19968: jis0212<<14 | 0x4B<<7 | 0x13,
+ 40376 - 19968: jis0208<<14 | 0x52<<7 | 0x13,
+ 40377 - 19968: jis0212<<14 | 0x4B<<7 | 0x14,
+ 40378 - 19968: jis0208<<14 | 0x52<<7 | 0x14,
+ 40379 - 19968: jis0208<<14 | 0x52<<7 | 0x12,
+ 40380 - 19968: jis0212<<14 | 0x4B<<7 | 0x15,
+ 40383 - 19968: jis0212<<14 | 0x4B<<7 | 0x16,
+ 40385 - 19968: jis0208<<14 | 0x52<<7 | 0x11,
+ 40386 - 19968: jis0208<<14 | 0x52<<7 | 0x17,
+ 40387 - 19968: jis0212<<14 | 0x4B<<7 | 0x17,
+ 40388 - 19968: jis0208<<14 | 0x52<<7 | 0x10,
+ 40390 - 19968: jis0208<<14 | 0x52<<7 | 0x15,
+ 40391 - 19968: jis0212<<14 | 0x4B<<7 | 0x18,
+ 40393 - 19968: jis0212<<14 | 0x4B<<7 | 0x19,
+ 40394 - 19968: jis0212<<14 | 0x4B<<7 | 0x1A,
+ 40399 - 19968: jis0208<<14 | 0x52<<7 | 0x16,
+ 40403 - 19968: jis0208<<14 | 0x52<<7 | 0x19,
+ 40404 - 19968: jis0212<<14 | 0x4B<<7 | 0x1B,
+ 40405 - 19968: jis0212<<14 | 0x4B<<7 | 0x1C,
+ 40406 - 19968: jis0212<<14 | 0x4B<<7 | 0x1D,
+ 40407 - 19968: jis0212<<14 | 0x4B<<7 | 0x1E,
+ 40409 - 19968: jis0208<<14 | 0x52<<7 | 0x18,
+ 40410 - 19968: jis0212<<14 | 0x4B<<7 | 0x1F,
+ 40414 - 19968: jis0212<<14 | 0x4B<<7 | 0x20,
+ 40415 - 19968: jis0212<<14 | 0x4B<<7 | 0x21,
+ 40416 - 19968: jis0212<<14 | 0x4B<<7 | 0x22,
+ 40421 - 19968: jis0212<<14 | 0x4B<<7 | 0x23,
+ 40422 - 19968: jis0208<<14 | 0x52<<7 | 0x1B,
+ 40423 - 19968: jis0212<<14 | 0x4B<<7 | 0x24,
+ 40425 - 19968: jis0212<<14 | 0x4B<<7 | 0x25,
+ 40427 - 19968: jis0212<<14 | 0x4B<<7 | 0x26,
+ 40429 - 19968: jis0208<<14 | 0x52<<7 | 0x1C,
+ 40430 - 19968: jis0212<<14 | 0x4B<<7 | 0x27,
+ 40431 - 19968: jis0208<<14 | 0x52<<7 | 0x1D,
+ 40432 - 19968: jis0212<<14 | 0x4B<<7 | 0x28,
+ 40434 - 19968: jis0208<<14 | 0x2E<<7 | 0x28,
+ 40435 - 19968: jis0212<<14 | 0x4B<<7 | 0x29,
+ 40436 - 19968: jis0212<<14 | 0x4B<<7 | 0x2A,
+ 40440 - 19968: jis0208<<14 | 0x52<<7 | 0x1A,
+ 40441 - 19968: jis0208<<14 | 0x21<<7 | 0x4A,
+ 40442 - 19968: jis0208<<14 | 0x19<<7 | 0x4C,
+ 40445 - 19968: jis0208<<14 | 0x52<<7 | 0x1E,
+ 40446 - 19968: jis0212<<14 | 0x4B<<7 | 0x2B,
+ 40450 - 19968: jis0212<<14 | 0x4B<<7 | 0x2D,
+ 40455 - 19968: jis0212<<14 | 0x4B<<7 | 0x2E,
+ 40458 - 19968: jis0212<<14 | 0x4B<<7 | 0x2C,
+ 40462 - 19968: jis0212<<14 | 0x4B<<7 | 0x2F,
+ 40464 - 19968: jis0212<<14 | 0x4B<<7 | 0x30,
+ 40465 - 19968: jis0212<<14 | 0x4B<<7 | 0x31,
+ 40466 - 19968: jis0212<<14 | 0x4B<<7 | 0x32,
+ 40469 - 19968: jis0212<<14 | 0x4B<<7 | 0x33,
+ 40470 - 19968: jis0212<<14 | 0x4B<<7 | 0x34,
+ 40473 - 19968: jis0208<<14 | 0x5B<<7 | 0x4C,
+ 40474 - 19968: jis0208<<14 | 0x52<<7 | 0x1F,
+ 40475 - 19968: jis0208<<14 | 0x52<<7 | 0x20,
+ 40476 - 19968: jis0212<<14 | 0x4B<<7 | 0x36,
+ 40477 - 19968: jis0212<<14 | 0x4B<<7 | 0x37,
+ 40478 - 19968: jis0208<<14 | 0x52<<7 | 0x21,
+ 40565 - 19968: jis0208<<14 | 0x52<<7 | 0x22,
+ 40568 - 19968: jis0208<<14 | 0x17<<7 | 0x13,
+ 40569 - 19968: jis0208<<14 | 0x52<<7 | 0x23,
+ 40570 - 19968: jis0212<<14 | 0x4B<<7 | 0x38,
+ 40571 - 19968: jis0212<<14 | 0x4B<<7 | 0x39,
+ 40572 - 19968: jis0212<<14 | 0x4B<<7 | 0x3A,
+ 40573 - 19968: jis0208<<14 | 0x52<<7 | 0x24,
+ 40575 - 19968: jis0208<<14 | 0x1B<<7 | 0x0E,
+ 40576 - 19968: jis0212<<14 | 0x4B<<7 | 0x3B,
+ 40577 - 19968: jis0208<<14 | 0x52<<7 | 0x25,
+ 40578 - 19968: jis0212<<14 | 0x4B<<7 | 0x3C,
+ 40579 - 19968: jis0212<<14 | 0x4B<<7 | 0x3D,
+ 40580 - 19968: jis0212<<14 | 0x4B<<7 | 0x3E,
+ 40581 - 19968: jis0212<<14 | 0x4B<<7 | 0x3F,
+ 40583 - 19968: jis0212<<14 | 0x4B<<7 | 0x40,
+ 40584 - 19968: jis0208<<14 | 0x52<<7 | 0x26,
+ 40587 - 19968: jis0208<<14 | 0x52<<7 | 0x27,
+ 40588 - 19968: jis0208<<14 | 0x52<<7 | 0x28,
+ 40590 - 19968: jis0212<<14 | 0x4B<<7 | 0x41,
+ 40591 - 19968: jis0212<<14 | 0x4B<<7 | 0x42,
+ 40593 - 19968: jis0208<<14 | 0x52<<7 | 0x2B,
+ 40594 - 19968: jis0208<<14 | 0x52<<7 | 0x29,
+ 40595 - 19968: jis0208<<14 | 0x2E<<7 | 0x1B,
+ 40597 - 19968: jis0208<<14 | 0x52<<7 | 0x2A,
+ 40598 - 19968: jis0212<<14 | 0x4B<<7 | 0x43,
+ 40599 - 19968: jis0208<<14 | 0x2D<<7 | 0x4E,
+ 40600 - 19968: jis0212<<14 | 0x4B<<7 | 0x44,
+ 40603 - 19968: jis0212<<14 | 0x4B<<7 | 0x45,
+ 40605 - 19968: jis0208<<14 | 0x52<<7 | 0x2C,
+ 40606 - 19968: jis0212<<14 | 0x4B<<7 | 0x46,
+ 40607 - 19968: jis0208<<14 | 0x2D<<7 | 0x3A,
+ 40612 - 19968: jis0212<<14 | 0x4B<<7 | 0x47,
+ 40613 - 19968: jis0208<<14 | 0x52<<7 | 0x2D,
+ 40614 - 19968: jis0208<<14 | 0x26<<7 | 0x5D,
+ 40616 - 19968: jis0212<<14 | 0x4B<<7 | 0x48,
+ 40617 - 19968: jis0208<<14 | 0x52<<7 | 0x2E,
+ 40618 - 19968: jis0208<<14 | 0x52<<7 | 0x30,
+ 40620 - 19968: jis0212<<14 | 0x4B<<7 | 0x49,
+ 40621 - 19968: jis0208<<14 | 0x52<<7 | 0x31,
+ 40622 - 19968: jis0212<<14 | 0x4B<<7 | 0x4A,
+ 40623 - 19968: jis0212<<14 | 0x4B<<7 | 0x4B,
+ 40624 - 19968: jis0212<<14 | 0x4B<<7 | 0x4C,
+ 40627 - 19968: jis0212<<14 | 0x4B<<7 | 0x4D,
+ 40628 - 19968: jis0212<<14 | 0x4B<<7 | 0x4E,
+ 40629 - 19968: jis0212<<14 | 0x4B<<7 | 0x4F,
+ 40632 - 19968: jis0208<<14 | 0x52<<7 | 0x2F,
+ 40633 - 19968: jis0208<<14 | 0x18<<7 | 0x4C,
+ 40634 - 19968: jis0208<<14 | 0x2B<<7 | 0x2C,
+ 40635 - 19968: jis0208<<14 | 0x2A<<7 | 0x42,
+ 40636 - 19968: jis0208<<14 | 0x35<<7 | 0x56,
+ 40638 - 19968: jis0208<<14 | 0x3C<<7 | 0x3F,
+ 40639 - 19968: jis0208<<14 | 0x2A<<7 | 0x5A,
+ 40644 - 19968: jis0208<<14 | 0x11<<7 | 0x0A,
+ 40646 - 19968: jis0212<<14 | 0x4B<<7 | 0x50,
+ 40648 - 19968: jis0212<<14 | 0x4B<<7 | 0x51,
+ 40651 - 19968: jis0212<<14 | 0x4B<<7 | 0x52,
+ 40652 - 19968: jis0208<<14 | 0x52<<7 | 0x33,
+ 40653 - 19968: jis0208<<14 | 0x14<<7 | 0x2F,
+ 40654 - 19968: jis0208<<14 | 0x52<<7 | 0x34,
+ 40655 - 19968: jis0208<<14 | 0x52<<7 | 0x35,
+ 40656 - 19968: jis0208<<14 | 0x52<<7 | 0x36,
+ 40657 - 19968: jis0208<<14 | 0x5B<<7 | 0x4D,
+ 40658 - 19968: jis0208<<14 | 0x18<<7 | 0x54,
+ 40660 - 19968: jis0208<<14 | 0x52<<7 | 0x37,
+ 40661 - 19968: jis0212<<14 | 0x4B<<7 | 0x53,
+ 40664 - 19968: jis0208<<14 | 0x3F<<7 | 0x33,
+ 40665 - 19968: jis0208<<14 | 0x2B<<7 | 0x3A,
+ 40667 - 19968: jis0208<<14 | 0x21<<7 | 0x42,
+ 40668 - 19968: jis0208<<14 | 0x52<<7 | 0x38,
+ 40669 - 19968: jis0208<<14 | 0x52<<7 | 0x3A,
+ 40670 - 19968: jis0208<<14 | 0x52<<7 | 0x39,
+ 40671 - 19968: jis0212<<14 | 0x4B<<7 | 0x54,
+ 40672 - 19968: jis0208<<14 | 0x52<<7 | 0x3B,
+ 40676 - 19968: jis0212<<14 | 0x4B<<7 | 0x55,
+ 40677 - 19968: jis0208<<14 | 0x52<<7 | 0x3C,
+ 40679 - 19968: jis0212<<14 | 0x4B<<7 | 0x56,
+ 40680 - 19968: jis0208<<14 | 0x52<<7 | 0x3D,
+ 40684 - 19968: jis0212<<14 | 0x4B<<7 | 0x57,
+ 40685 - 19968: jis0212<<14 | 0x4B<<7 | 0x58,
+ 40686 - 19968: jis0212<<14 | 0x4B<<7 | 0x59,
+ 40687 - 19968: jis0208<<14 | 0x52<<7 | 0x3E,
+ 40688 - 19968: jis0212<<14 | 0x4B<<7 | 0x5A,
+ 40689 - 19968: jis0212<<14 | 0x4B<<7 | 0x5B,
+ 40690 - 19968: jis0212<<14 | 0x4B<<7 | 0x5C,
+ 40692 - 19968: jis0208<<14 | 0x52<<7 | 0x3F,
+ 40693 - 19968: jis0212<<14 | 0x4B<<7 | 0x5D,
+ 40694 - 19968: jis0208<<14 | 0x52<<7 | 0x40,
+ 40695 - 19968: jis0208<<14 | 0x52<<7 | 0x41,
+ 40696 - 19968: jis0212<<14 | 0x4C<<7 | 0x00,
+ 40697 - 19968: jis0208<<14 | 0x52<<7 | 0x42,
+ 40699 - 19968: jis0208<<14 | 0x52<<7 | 0x43,
+ 40700 - 19968: jis0208<<14 | 0x52<<7 | 0x44,
+ 40701 - 19968: jis0208<<14 | 0x52<<7 | 0x45,
+ 40703 - 19968: jis0212<<14 | 0x4C<<7 | 0x01,
+ 40706 - 19968: jis0212<<14 | 0x4C<<7 | 0x02,
+ 40707 - 19968: jis0212<<14 | 0x4C<<7 | 0x03,
+ 40711 - 19968: jis0208<<14 | 0x52<<7 | 0x46,
+ 40712 - 19968: jis0208<<14 | 0x52<<7 | 0x47,
+ 40713 - 19968: jis0212<<14 | 0x4C<<7 | 0x04,
+ 40718 - 19968: jis0208<<14 | 0x24<<7 | 0x03,
+ 40719 - 19968: jis0212<<14 | 0x4C<<7 | 0x05,
+ 40720 - 19968: jis0212<<14 | 0x4C<<7 | 0x06,
+ 40721 - 19968: jis0212<<14 | 0x4C<<7 | 0x07,
+ 40722 - 19968: jis0212<<14 | 0x4C<<7 | 0x08,
+ 40723 - 19968: jis0208<<14 | 0x17<<7 | 0x3C,
+ 40724 - 19968: jis0212<<14 | 0x4C<<7 | 0x09,
+ 40725 - 19968: jis0208<<14 | 0x52<<7 | 0x49,
+ 40726 - 19968: jis0212<<14 | 0x4C<<7 | 0x0A,
+ 40727 - 19968: jis0212<<14 | 0x4C<<7 | 0x0B,
+ 40729 - 19968: jis0212<<14 | 0x4C<<7 | 0x0C,
+ 40730 - 19968: jis0212<<14 | 0x4C<<7 | 0x0D,
+ 40731 - 19968: jis0212<<14 | 0x4C<<7 | 0x0E,
+ 40735 - 19968: jis0212<<14 | 0x4C<<7 | 0x0F,
+ 40736 - 19968: jis0208<<14 | 0x20<<7 | 0x2C,
+ 40737 - 19968: jis0208<<14 | 0x52<<7 | 0x4A,
+ 40738 - 19968: jis0212<<14 | 0x4C<<7 | 0x10,
+ 40742 - 19968: jis0212<<14 | 0x4C<<7 | 0x11,
+ 40746 - 19968: jis0212<<14 | 0x4C<<7 | 0x12,
+ 40747 - 19968: jis0212<<14 | 0x4C<<7 | 0x13,
+ 40748 - 19968: jis0208<<14 | 0x52<<7 | 0x4B,
+ 40751 - 19968: jis0212<<14 | 0x4C<<7 | 0x14,
+ 40753 - 19968: jis0212<<14 | 0x4C<<7 | 0x15,
+ 40754 - 19968: jis0212<<14 | 0x4C<<7 | 0x16,
+ 40756 - 19968: jis0212<<14 | 0x4C<<7 | 0x17,
+ 40759 - 19968: jis0212<<14 | 0x4C<<7 | 0x18,
+ 40761 - 19968: jis0212<<14 | 0x4C<<7 | 0x19,
+ 40762 - 19968: jis0212<<14 | 0x4C<<7 | 0x1A,
+ 40763 - 19968: jis0208<<14 | 0x28<<7 | 0x00,
+ 40764 - 19968: jis0212<<14 | 0x4C<<7 | 0x1B,
+ 40765 - 19968: jis0212<<14 | 0x4C<<7 | 0x1C,
+ 40766 - 19968: jis0208<<14 | 0x52<<7 | 0x4C,
+ 40767 - 19968: jis0212<<14 | 0x4C<<7 | 0x1D,
+ 40769 - 19968: jis0212<<14 | 0x4C<<7 | 0x1E,
+ 40771 - 19968: jis0212<<14 | 0x4C<<7 | 0x1F,
+ 40772 - 19968: jis0212<<14 | 0x4C<<7 | 0x20,
+ 40773 - 19968: jis0212<<14 | 0x4C<<7 | 0x21,
+ 40774 - 19968: jis0212<<14 | 0x4C<<7 | 0x22,
+ 40775 - 19968: jis0212<<14 | 0x4C<<7 | 0x23,
+ 40778 - 19968: jis0208<<14 | 0x52<<7 | 0x4D,
+ 40779 - 19968: jis0208<<14 | 0x42<<7 | 0x16,
+ 40782 - 19968: jis0208<<14 | 0x4B<<7 | 0x39,
+ 40783 - 19968: jis0208<<14 | 0x4F<<7 | 0x4C,
+ 40786 - 19968: jis0208<<14 | 0x52<<7 | 0x4E,
+ 40787 - 19968: jis0212<<14 | 0x4C<<7 | 0x24,
+ 40788 - 19968: jis0208<<14 | 0x52<<7 | 0x4F,
+ 40789 - 19968: jis0212<<14 | 0x4C<<7 | 0x25,
+ 40790 - 19968: jis0212<<14 | 0x4C<<7 | 0x26,
+ 40791 - 19968: jis0212<<14 | 0x4C<<7 | 0x27,
+ 40792 - 19968: jis0212<<14 | 0x4C<<7 | 0x28,
+ 40794 - 19968: jis0212<<14 | 0x4C<<7 | 0x29,
+ 40797 - 19968: jis0212<<14 | 0x4C<<7 | 0x2A,
+ 40798 - 19968: jis0212<<14 | 0x4C<<7 | 0x2B,
+ 40799 - 19968: jis0208<<14 | 0x52<<7 | 0x51,
+ 40800 - 19968: jis0208<<14 | 0x52<<7 | 0x52,
+ 40801 - 19968: jis0208<<14 | 0x52<<7 | 0x53,
+ 40802 - 19968: jis0208<<14 | 0x2D<<7 | 0x4F,
+ 40803 - 19968: jis0208<<14 | 0x52<<7 | 0x50,
+ 40806 - 19968: jis0208<<14 | 0x52<<7 | 0x54,
+ 40807 - 19968: jis0208<<14 | 0x52<<7 | 0x55,
+ 40808 - 19968: jis0212<<14 | 0x4C<<7 | 0x2C,
+ 40809 - 19968: jis0212<<14 | 0x4C<<7 | 0x2D,
+ 40810 - 19968: jis0208<<14 | 0x52<<7 | 0x57,
+ 40812 - 19968: jis0208<<14 | 0x52<<7 | 0x56,
+ 40813 - 19968: jis0212<<14 | 0x4C<<7 | 0x2E,
+ 40814 - 19968: jis0212<<14 | 0x4C<<7 | 0x2F,
+ 40815 - 19968: jis0212<<14 | 0x4C<<7 | 0x30,
+ 40816 - 19968: jis0212<<14 | 0x4C<<7 | 0x31,
+ 40817 - 19968: jis0212<<14 | 0x4C<<7 | 0x32,
+ 40818 - 19968: jis0208<<14 | 0x52<<7 | 0x59,
+ 40819 - 19968: jis0212<<14 | 0x4C<<7 | 0x33,
+ 40821 - 19968: jis0212<<14 | 0x4C<<7 | 0x34,
+ 40822 - 19968: jis0208<<14 | 0x52<<7 | 0x5A,
+ 40823 - 19968: jis0208<<14 | 0x52<<7 | 0x58,
+ 40826 - 19968: jis0212<<14 | 0x4C<<7 | 0x35,
+ 40829 - 19968: jis0212<<14 | 0x4C<<7 | 0x36,
+ 40845 - 19968: jis0208<<14 | 0x2D<<7 | 0x15,
+ 40847 - 19968: jis0212<<14 | 0x4C<<7 | 0x37,
+ 40848 - 19968: jis0212<<14 | 0x4C<<7 | 0x38,
+ 40849 - 19968: jis0212<<14 | 0x4C<<7 | 0x39,
+ 40850 - 19968: jis0212<<14 | 0x4C<<7 | 0x3A,
+ 40852 - 19968: jis0212<<14 | 0x4C<<7 | 0x3B,
+ 40853 - 19968: jis0208<<14 | 0x52<<7 | 0x5B,
+ 40854 - 19968: jis0212<<14 | 0x4C<<7 | 0x3C,
+ 40855 - 19968: jis0212<<14 | 0x4C<<7 | 0x3D,
+ 40860 - 19968: jis0208<<14 | 0x52<<7 | 0x5C,
+ 40861 - 19968: jis0208<<14 | 0x42<<7 | 0x33,
+ 40862 - 19968: jis0212<<14 | 0x4C<<7 | 0x3E,
+ 40864 - 19968: jis0208<<14 | 0x52<<7 | 0x5D,
+ 40865 - 19968: jis0212<<14 | 0x4C<<7 | 0x3F,
+ 40866 - 19968: jis0212<<14 | 0x4C<<7 | 0x40,
+ 40867 - 19968: jis0212<<14 | 0x4C<<7 | 0x41,
+ 40869 - 19968: jis0212<<14 | 0x4C<<7 | 0x42,
+}
+
+const encode1Low, encode1High = 8208, 9840
+
+var encode1 = [...]uint16{
+ 8208 - 8208: jis0208<<14 | 0x00<<7 | 0x1D,
+ 8213 - 8208: jis0208<<14 | 0x00<<7 | 0x1C,
+ 8216 - 8208: jis0208<<14 | 0x00<<7 | 0x25,
+ 8217 - 8208: jis0208<<14 | 0x00<<7 | 0x26,
+ 8220 - 8208: jis0208<<14 | 0x00<<7 | 0x27,
+ 8221 - 8208: jis0208<<14 | 0x00<<7 | 0x28,
+ 8224 - 8208: jis0208<<14 | 0x01<<7 | 0x56,
+ 8225 - 8208: jis0208<<14 | 0x01<<7 | 0x57,
+ 8229 - 8208: jis0208<<14 | 0x00<<7 | 0x24,
+ 8230 - 8208: jis0208<<14 | 0x00<<7 | 0x23,
+ 8240 - 8208: jis0208<<14 | 0x01<<7 | 0x52,
+ 8242 - 8208: jis0208<<14 | 0x00<<7 | 0x4B,
+ 8243 - 8208: jis0208<<14 | 0x00<<7 | 0x4C,
+ 8251 - 8208: jis0208<<14 | 0x01<<7 | 0x07,
+ 8451 - 8208: jis0208<<14 | 0x00<<7 | 0x4D,
+ 8470 - 8208: jis0208<<14 | 0x0C<<7 | 0x41,
+ 8481 - 8208: jis0208<<14 | 0x0C<<7 | 0x43,
+ 8482 - 8208: jis0212<<14 | 0x01<<7 | 0x4E,
+ 8491 - 8208: jis0208<<14 | 0x01<<7 | 0x51,
+ 8544 - 8208: jis0208<<14 | 0x0C<<7 | 0x14,
+ 8545 - 8208: jis0208<<14 | 0x0C<<7 | 0x15,
+ 8546 - 8208: jis0208<<14 | 0x0C<<7 | 0x16,
+ 8547 - 8208: jis0208<<14 | 0x0C<<7 | 0x17,
+ 8548 - 8208: jis0208<<14 | 0x0C<<7 | 0x18,
+ 8549 - 8208: jis0208<<14 | 0x0C<<7 | 0x19,
+ 8550 - 8208: jis0208<<14 | 0x0C<<7 | 0x1A,
+ 8551 - 8208: jis0208<<14 | 0x0C<<7 | 0x1B,
+ 8552 - 8208: jis0208<<14 | 0x0C<<7 | 0x1C,
+ 8553 - 8208: jis0208<<14 | 0x0C<<7 | 0x1D,
+ 8560 - 8208: jis0208<<14 | 0x5B<<7 | 0x50,
+ 8561 - 8208: jis0208<<14 | 0x5B<<7 | 0x51,
+ 8562 - 8208: jis0208<<14 | 0x5B<<7 | 0x52,
+ 8563 - 8208: jis0208<<14 | 0x5B<<7 | 0x53,
+ 8564 - 8208: jis0208<<14 | 0x5B<<7 | 0x54,
+ 8565 - 8208: jis0208<<14 | 0x5B<<7 | 0x55,
+ 8566 - 8208: jis0208<<14 | 0x5B<<7 | 0x56,
+ 8567 - 8208: jis0208<<14 | 0x5B<<7 | 0x57,
+ 8568 - 8208: jis0208<<14 | 0x5B<<7 | 0x58,
+ 8569 - 8208: jis0208<<14 | 0x5B<<7 | 0x59,
+ 8592 - 8208: jis0208<<14 | 0x01<<7 | 0x0A,
+ 8593 - 8208: jis0208<<14 | 0x01<<7 | 0x0B,
+ 8594 - 8208: jis0208<<14 | 0x01<<7 | 0x09,
+ 8595 - 8208: jis0208<<14 | 0x01<<7 | 0x0C,
+ 8658 - 8208: jis0208<<14 | 0x01<<7 | 0x2C,
+ 8660 - 8208: jis0208<<14 | 0x01<<7 | 0x2D,
+ 8704 - 8208: jis0208<<14 | 0x01<<7 | 0x2E,
+ 8706 - 8208: jis0208<<14 | 0x01<<7 | 0x3E,
+ 8707 - 8208: jis0208<<14 | 0x01<<7 | 0x2F,
+ 8711 - 8208: jis0208<<14 | 0x01<<7 | 0x3F,
+ 8712 - 8208: jis0208<<14 | 0x01<<7 | 0x19,
+ 8715 - 8208: jis0208<<14 | 0x01<<7 | 0x1A,
+ 8721 - 8208: jis0208<<14 | 0x0C<<7 | 0x53,
+ 8730 - 8208: jis0208<<14 | 0x01<<7 | 0x44,
+ 8733 - 8208: jis0208<<14 | 0x01<<7 | 0x46,
+ 8734 - 8208: jis0208<<14 | 0x00<<7 | 0x46,
+ 8735 - 8208: jis0208<<14 | 0x0C<<7 | 0x57,
+ 8736 - 8208: jis0208<<14 | 0x01<<7 | 0x3B,
+ 8741 - 8208: jis0208<<14 | 0x00<<7 | 0x21,
+ 8743 - 8208: jis0208<<14 | 0x01<<7 | 0x29,
+ 8744 - 8208: jis0208<<14 | 0x01<<7 | 0x2A,
+ 8745 - 8208: jis0208<<14 | 0x01<<7 | 0x20,
+ 8746 - 8208: jis0208<<14 | 0x01<<7 | 0x1F,
+ 8747 - 8208: jis0208<<14 | 0x01<<7 | 0x48,
+ 8748 - 8208: jis0208<<14 | 0x01<<7 | 0x49,
+ 8750 - 8208: jis0208<<14 | 0x0C<<7 | 0x52,
+ 8756 - 8208: jis0208<<14 | 0x00<<7 | 0x47,
+ 8757 - 8208: jis0208<<14 | 0x01<<7 | 0x47,
+ 8765 - 8208: jis0208<<14 | 0x01<<7 | 0x45,
+ 8786 - 8208: jis0208<<14 | 0x01<<7 | 0x41,
+ 8800 - 8208: jis0208<<14 | 0x00<<7 | 0x41,
+ 8801 - 8208: jis0208<<14 | 0x01<<7 | 0x40,
+ 8806 - 8208: jis0208<<14 | 0x00<<7 | 0x44,
+ 8807 - 8208: jis0208<<14 | 0x00<<7 | 0x45,
+ 8810 - 8208: jis0208<<14 | 0x01<<7 | 0x42,
+ 8811 - 8208: jis0208<<14 | 0x01<<7 | 0x43,
+ 8834 - 8208: jis0208<<14 | 0x01<<7 | 0x1D,
+ 8835 - 8208: jis0208<<14 | 0x01<<7 | 0x1E,
+ 8838 - 8208: jis0208<<14 | 0x01<<7 | 0x1B,
+ 8839 - 8208: jis0208<<14 | 0x01<<7 | 0x1C,
+ 8869 - 8208: jis0208<<14 | 0x01<<7 | 0x3C,
+ 8895 - 8208: jis0208<<14 | 0x0C<<7 | 0x58,
+ 8978 - 8208: jis0208<<14 | 0x01<<7 | 0x3D,
+ 9312 - 8208: jis0208<<14 | 0x0C<<7 | 0x00,
+ 9313 - 8208: jis0208<<14 | 0x0C<<7 | 0x01,
+ 9314 - 8208: jis0208<<14 | 0x0C<<7 | 0x02,
+ 9315 - 8208: jis0208<<14 | 0x0C<<7 | 0x03,
+ 9316 - 8208: jis0208<<14 | 0x0C<<7 | 0x04,
+ 9317 - 8208: jis0208<<14 | 0x0C<<7 | 0x05,
+ 9318 - 8208: jis0208<<14 | 0x0C<<7 | 0x06,
+ 9319 - 8208: jis0208<<14 | 0x0C<<7 | 0x07,
+ 9320 - 8208: jis0208<<14 | 0x0C<<7 | 0x08,
+ 9321 - 8208: jis0208<<14 | 0x0C<<7 | 0x09,
+ 9322 - 8208: jis0208<<14 | 0x0C<<7 | 0x0A,
+ 9323 - 8208: jis0208<<14 | 0x0C<<7 | 0x0B,
+ 9324 - 8208: jis0208<<14 | 0x0C<<7 | 0x0C,
+ 9325 - 8208: jis0208<<14 | 0x0C<<7 | 0x0D,
+ 9326 - 8208: jis0208<<14 | 0x0C<<7 | 0x0E,
+ 9327 - 8208: jis0208<<14 | 0x0C<<7 | 0x0F,
+ 9328 - 8208: jis0208<<14 | 0x0C<<7 | 0x10,
+ 9329 - 8208: jis0208<<14 | 0x0C<<7 | 0x11,
+ 9330 - 8208: jis0208<<14 | 0x0C<<7 | 0x12,
+ 9331 - 8208: jis0208<<14 | 0x0C<<7 | 0x13,
+ 9472 - 8208: jis0208<<14 | 0x07<<7 | 0x00,
+ 9473 - 8208: jis0208<<14 | 0x07<<7 | 0x0B,
+ 9474 - 8208: jis0208<<14 | 0x07<<7 | 0x01,
+ 9475 - 8208: jis0208<<14 | 0x07<<7 | 0x0C,
+ 9484 - 8208: jis0208<<14 | 0x07<<7 | 0x02,
+ 9487 - 8208: jis0208<<14 | 0x07<<7 | 0x0D,
+ 9488 - 8208: jis0208<<14 | 0x07<<7 | 0x03,
+ 9491 - 8208: jis0208<<14 | 0x07<<7 | 0x0E,
+ 9492 - 8208: jis0208<<14 | 0x07<<7 | 0x05,
+ 9495 - 8208: jis0208<<14 | 0x07<<7 | 0x10,
+ 9496 - 8208: jis0208<<14 | 0x07<<7 | 0x04,
+ 9499 - 8208: jis0208<<14 | 0x07<<7 | 0x0F,
+ 9500 - 8208: jis0208<<14 | 0x07<<7 | 0x06,
+ 9501 - 8208: jis0208<<14 | 0x07<<7 | 0x1B,
+ 9504 - 8208: jis0208<<14 | 0x07<<7 | 0x16,
+ 9507 - 8208: jis0208<<14 | 0x07<<7 | 0x11,
+ 9508 - 8208: jis0208<<14 | 0x07<<7 | 0x08,
+ 9509 - 8208: jis0208<<14 | 0x07<<7 | 0x1D,
+ 9512 - 8208: jis0208<<14 | 0x07<<7 | 0x18,
+ 9515 - 8208: jis0208<<14 | 0x07<<7 | 0x13,
+ 9516 - 8208: jis0208<<14 | 0x07<<7 | 0x07,
+ 9519 - 8208: jis0208<<14 | 0x07<<7 | 0x17,
+ 9520 - 8208: jis0208<<14 | 0x07<<7 | 0x1C,
+ 9523 - 8208: jis0208<<14 | 0x07<<7 | 0x12,
+ 9524 - 8208: jis0208<<14 | 0x07<<7 | 0x09,
+ 9527 - 8208: jis0208<<14 | 0x07<<7 | 0x19,
+ 9528 - 8208: jis0208<<14 | 0x07<<7 | 0x1E,
+ 9531 - 8208: jis0208<<14 | 0x07<<7 | 0x14,
+ 9532 - 8208: jis0208<<14 | 0x07<<7 | 0x0A,
+ 9535 - 8208: jis0208<<14 | 0x07<<7 | 0x1A,
+ 9538 - 8208: jis0208<<14 | 0x07<<7 | 0x1F,
+ 9547 - 8208: jis0208<<14 | 0x07<<7 | 0x15,
+ 9632 - 8208: jis0208<<14 | 0x01<<7 | 0x02,
+ 9633 - 8208: jis0208<<14 | 0x01<<7 | 0x01,
+ 9650 - 8208: jis0208<<14 | 0x01<<7 | 0x04,
+ 9651 - 8208: jis0208<<14 | 0x01<<7 | 0x03,
+ 9660 - 8208: jis0208<<14 | 0x01<<7 | 0x06,
+ 9661 - 8208: jis0208<<14 | 0x01<<7 | 0x05,
+ 9670 - 8208: jis0208<<14 | 0x01<<7 | 0x00,
+ 9671 - 8208: jis0208<<14 | 0x00<<7 | 0x5D,
+ 9675 - 8208: jis0208<<14 | 0x00<<7 | 0x5A,
+ 9678 - 8208: jis0208<<14 | 0x00<<7 | 0x5C,
+ 9679 - 8208: jis0208<<14 | 0x00<<7 | 0x5B,
+ 9711 - 8208: jis0208<<14 | 0x01<<7 | 0x5D,
+ 9733 - 8208: jis0208<<14 | 0x00<<7 | 0x59,
+ 9734 - 8208: jis0208<<14 | 0x00<<7 | 0x58,
+ 9792 - 8208: jis0208<<14 | 0x00<<7 | 0x49,
+ 9794 - 8208: jis0208<<14 | 0x00<<7 | 0x48,
+ 9834 - 8208: jis0208<<14 | 0x01<<7 | 0x55,
+ 9837 - 8208: jis0208<<14 | 0x01<<7 | 0x54,
+ 9839 - 8208: jis0208<<14 | 0x01<<7 | 0x53,
+}
+
+const encode2Low, encode2High = 12288, 13262
+
+var encode2 = [...]uint16{
+ 12288 - 12288: jis0208<<14 | 0x00<<7 | 0x00,
+ 12289 - 12288: jis0208<<14 | 0x00<<7 | 0x01,
+ 12290 - 12288: jis0208<<14 | 0x00<<7 | 0x02,
+ 12291 - 12288: jis0208<<14 | 0x00<<7 | 0x16,
+ 12293 - 12288: jis0208<<14 | 0x00<<7 | 0x18,
+ 12294 - 12288: jis0208<<14 | 0x00<<7 | 0x19,
+ 12295 - 12288: jis0208<<14 | 0x00<<7 | 0x1A,
+ 12296 - 12288: jis0208<<14 | 0x00<<7 | 0x31,
+ 12297 - 12288: jis0208<<14 | 0x00<<7 | 0x32,
+ 12298 - 12288: jis0208<<14 | 0x00<<7 | 0x33,
+ 12299 - 12288: jis0208<<14 | 0x00<<7 | 0x34,
+ 12300 - 12288: jis0208<<14 | 0x00<<7 | 0x35,
+ 12301 - 12288: jis0208<<14 | 0x00<<7 | 0x36,
+ 12302 - 12288: jis0208<<14 | 0x00<<7 | 0x37,
+ 12303 - 12288: jis0208<<14 | 0x00<<7 | 0x38,
+ 12304 - 12288: jis0208<<14 | 0x00<<7 | 0x39,
+ 12305 - 12288: jis0208<<14 | 0x00<<7 | 0x3A,
+ 12306 - 12288: jis0208<<14 | 0x01<<7 | 0x08,
+ 12307 - 12288: jis0208<<14 | 0x01<<7 | 0x0D,
+ 12308 - 12288: jis0208<<14 | 0x00<<7 | 0x2B,
+ 12309 - 12288: jis0208<<14 | 0x00<<7 | 0x2C,
+ 12317 - 12288: jis0208<<14 | 0x0C<<7 | 0x3F,
+ 12319 - 12288: jis0208<<14 | 0x0C<<7 | 0x40,
+ 12353 - 12288: jis0208<<14 | 0x03<<7 | 0x00,
+ 12354 - 12288: jis0208<<14 | 0x03<<7 | 0x01,
+ 12355 - 12288: jis0208<<14 | 0x03<<7 | 0x02,
+ 12356 - 12288: jis0208<<14 | 0x03<<7 | 0x03,
+ 12357 - 12288: jis0208<<14 | 0x03<<7 | 0x04,
+ 12358 - 12288: jis0208<<14 | 0x03<<7 | 0x05,
+ 12359 - 12288: jis0208<<14 | 0x03<<7 | 0x06,
+ 12360 - 12288: jis0208<<14 | 0x03<<7 | 0x07,
+ 12361 - 12288: jis0208<<14 | 0x03<<7 | 0x08,
+ 12362 - 12288: jis0208<<14 | 0x03<<7 | 0x09,
+ 12363 - 12288: jis0208<<14 | 0x03<<7 | 0x0A,
+ 12364 - 12288: jis0208<<14 | 0x03<<7 | 0x0B,
+ 12365 - 12288: jis0208<<14 | 0x03<<7 | 0x0C,
+ 12366 - 12288: jis0208<<14 | 0x03<<7 | 0x0D,
+ 12367 - 12288: jis0208<<14 | 0x03<<7 | 0x0E,
+ 12368 - 12288: jis0208<<14 | 0x03<<7 | 0x0F,
+ 12369 - 12288: jis0208<<14 | 0x03<<7 | 0x10,
+ 12370 - 12288: jis0208<<14 | 0x03<<7 | 0x11,
+ 12371 - 12288: jis0208<<14 | 0x03<<7 | 0x12,
+ 12372 - 12288: jis0208<<14 | 0x03<<7 | 0x13,
+ 12373 - 12288: jis0208<<14 | 0x03<<7 | 0x14,
+ 12374 - 12288: jis0208<<14 | 0x03<<7 | 0x15,
+ 12375 - 12288: jis0208<<14 | 0x03<<7 | 0x16,
+ 12376 - 12288: jis0208<<14 | 0x03<<7 | 0x17,
+ 12377 - 12288: jis0208<<14 | 0x03<<7 | 0x18,
+ 12378 - 12288: jis0208<<14 | 0x03<<7 | 0x19,
+ 12379 - 12288: jis0208<<14 | 0x03<<7 | 0x1A,
+ 12380 - 12288: jis0208<<14 | 0x03<<7 | 0x1B,
+ 12381 - 12288: jis0208<<14 | 0x03<<7 | 0x1C,
+ 12382 - 12288: jis0208<<14 | 0x03<<7 | 0x1D,
+ 12383 - 12288: jis0208<<14 | 0x03<<7 | 0x1E,
+ 12384 - 12288: jis0208<<14 | 0x03<<7 | 0x1F,
+ 12385 - 12288: jis0208<<14 | 0x03<<7 | 0x20,
+ 12386 - 12288: jis0208<<14 | 0x03<<7 | 0x21,
+ 12387 - 12288: jis0208<<14 | 0x03<<7 | 0x22,
+ 12388 - 12288: jis0208<<14 | 0x03<<7 | 0x23,
+ 12389 - 12288: jis0208<<14 | 0x03<<7 | 0x24,
+ 12390 - 12288: jis0208<<14 | 0x03<<7 | 0x25,
+ 12391 - 12288: jis0208<<14 | 0x03<<7 | 0x26,
+ 12392 - 12288: jis0208<<14 | 0x03<<7 | 0x27,
+ 12393 - 12288: jis0208<<14 | 0x03<<7 | 0x28,
+ 12394 - 12288: jis0208<<14 | 0x03<<7 | 0x29,
+ 12395 - 12288: jis0208<<14 | 0x03<<7 | 0x2A,
+ 12396 - 12288: jis0208<<14 | 0x03<<7 | 0x2B,
+ 12397 - 12288: jis0208<<14 | 0x03<<7 | 0x2C,
+ 12398 - 12288: jis0208<<14 | 0x03<<7 | 0x2D,
+ 12399 - 12288: jis0208<<14 | 0x03<<7 | 0x2E,
+ 12400 - 12288: jis0208<<14 | 0x03<<7 | 0x2F,
+ 12401 - 12288: jis0208<<14 | 0x03<<7 | 0x30,
+ 12402 - 12288: jis0208<<14 | 0x03<<7 | 0x31,
+ 12403 - 12288: jis0208<<14 | 0x03<<7 | 0x32,
+ 12404 - 12288: jis0208<<14 | 0x03<<7 | 0x33,
+ 12405 - 12288: jis0208<<14 | 0x03<<7 | 0x34,
+ 12406 - 12288: jis0208<<14 | 0x03<<7 | 0x35,
+ 12407 - 12288: jis0208<<14 | 0x03<<7 | 0x36,
+ 12408 - 12288: jis0208<<14 | 0x03<<7 | 0x37,
+ 12409 - 12288: jis0208<<14 | 0x03<<7 | 0x38,
+ 12410 - 12288: jis0208<<14 | 0x03<<7 | 0x39,
+ 12411 - 12288: jis0208<<14 | 0x03<<7 | 0x3A,
+ 12412 - 12288: jis0208<<14 | 0x03<<7 | 0x3B,
+ 12413 - 12288: jis0208<<14 | 0x03<<7 | 0x3C,
+ 12414 - 12288: jis0208<<14 | 0x03<<7 | 0x3D,
+ 12415 - 12288: jis0208<<14 | 0x03<<7 | 0x3E,
+ 12416 - 12288: jis0208<<14 | 0x03<<7 | 0x3F,
+ 12417 - 12288: jis0208<<14 | 0x03<<7 | 0x40,
+ 12418 - 12288: jis0208<<14 | 0x03<<7 | 0x41,
+ 12419 - 12288: jis0208<<14 | 0x03<<7 | 0x42,
+ 12420 - 12288: jis0208<<14 | 0x03<<7 | 0x43,
+ 12421 - 12288: jis0208<<14 | 0x03<<7 | 0x44,
+ 12422 - 12288: jis0208<<14 | 0x03<<7 | 0x45,
+ 12423 - 12288: jis0208<<14 | 0x03<<7 | 0x46,
+ 12424 - 12288: jis0208<<14 | 0x03<<7 | 0x47,
+ 12425 - 12288: jis0208<<14 | 0x03<<7 | 0x48,
+ 12426 - 12288: jis0208<<14 | 0x03<<7 | 0x49,
+ 12427 - 12288: jis0208<<14 | 0x03<<7 | 0x4A,
+ 12428 - 12288: jis0208<<14 | 0x03<<7 | 0x4B,
+ 12429 - 12288: jis0208<<14 | 0x03<<7 | 0x4C,
+ 12430 - 12288: jis0208<<14 | 0x03<<7 | 0x4D,
+ 12431 - 12288: jis0208<<14 | 0x03<<7 | 0x4E,
+ 12432 - 12288: jis0208<<14 | 0x03<<7 | 0x4F,
+ 12433 - 12288: jis0208<<14 | 0x03<<7 | 0x50,
+ 12434 - 12288: jis0208<<14 | 0x03<<7 | 0x51,
+ 12435 - 12288: jis0208<<14 | 0x03<<7 | 0x52,
+ 12443 - 12288: jis0208<<14 | 0x00<<7 | 0x0A,
+ 12444 - 12288: jis0208<<14 | 0x00<<7 | 0x0B,
+ 12445 - 12288: jis0208<<14 | 0x00<<7 | 0x14,
+ 12446 - 12288: jis0208<<14 | 0x00<<7 | 0x15,
+ 12449 - 12288: jis0208<<14 | 0x04<<7 | 0x00,
+ 12450 - 12288: jis0208<<14 | 0x04<<7 | 0x01,
+ 12451 - 12288: jis0208<<14 | 0x04<<7 | 0x02,
+ 12452 - 12288: jis0208<<14 | 0x04<<7 | 0x03,
+ 12453 - 12288: jis0208<<14 | 0x04<<7 | 0x04,
+ 12454 - 12288: jis0208<<14 | 0x04<<7 | 0x05,
+ 12455 - 12288: jis0208<<14 | 0x04<<7 | 0x06,
+ 12456 - 12288: jis0208<<14 | 0x04<<7 | 0x07,
+ 12457 - 12288: jis0208<<14 | 0x04<<7 | 0x08,
+ 12458 - 12288: jis0208<<14 | 0x04<<7 | 0x09,
+ 12459 - 12288: jis0208<<14 | 0x04<<7 | 0x0A,
+ 12460 - 12288: jis0208<<14 | 0x04<<7 | 0x0B,
+ 12461 - 12288: jis0208<<14 | 0x04<<7 | 0x0C,
+ 12462 - 12288: jis0208<<14 | 0x04<<7 | 0x0D,
+ 12463 - 12288: jis0208<<14 | 0x04<<7 | 0x0E,
+ 12464 - 12288: jis0208<<14 | 0x04<<7 | 0x0F,
+ 12465 - 12288: jis0208<<14 | 0x04<<7 | 0x10,
+ 12466 - 12288: jis0208<<14 | 0x04<<7 | 0x11,
+ 12467 - 12288: jis0208<<14 | 0x04<<7 | 0x12,
+ 12468 - 12288: jis0208<<14 | 0x04<<7 | 0x13,
+ 12469 - 12288: jis0208<<14 | 0x04<<7 | 0x14,
+ 12470 - 12288: jis0208<<14 | 0x04<<7 | 0x15,
+ 12471 - 12288: jis0208<<14 | 0x04<<7 | 0x16,
+ 12472 - 12288: jis0208<<14 | 0x04<<7 | 0x17,
+ 12473 - 12288: jis0208<<14 | 0x04<<7 | 0x18,
+ 12474 - 12288: jis0208<<14 | 0x04<<7 | 0x19,
+ 12475 - 12288: jis0208<<14 | 0x04<<7 | 0x1A,
+ 12476 - 12288: jis0208<<14 | 0x04<<7 | 0x1B,
+ 12477 - 12288: jis0208<<14 | 0x04<<7 | 0x1C,
+ 12478 - 12288: jis0208<<14 | 0x04<<7 | 0x1D,
+ 12479 - 12288: jis0208<<14 | 0x04<<7 | 0x1E,
+ 12480 - 12288: jis0208<<14 | 0x04<<7 | 0x1F,
+ 12481 - 12288: jis0208<<14 | 0x04<<7 | 0x20,
+ 12482 - 12288: jis0208<<14 | 0x04<<7 | 0x21,
+ 12483 - 12288: jis0208<<14 | 0x04<<7 | 0x22,
+ 12484 - 12288: jis0208<<14 | 0x04<<7 | 0x23,
+ 12485 - 12288: jis0208<<14 | 0x04<<7 | 0x24,
+ 12486 - 12288: jis0208<<14 | 0x04<<7 | 0x25,
+ 12487 - 12288: jis0208<<14 | 0x04<<7 | 0x26,
+ 12488 - 12288: jis0208<<14 | 0x04<<7 | 0x27,
+ 12489 - 12288: jis0208<<14 | 0x04<<7 | 0x28,
+ 12490 - 12288: jis0208<<14 | 0x04<<7 | 0x29,
+ 12491 - 12288: jis0208<<14 | 0x04<<7 | 0x2A,
+ 12492 - 12288: jis0208<<14 | 0x04<<7 | 0x2B,
+ 12493 - 12288: jis0208<<14 | 0x04<<7 | 0x2C,
+ 12494 - 12288: jis0208<<14 | 0x04<<7 | 0x2D,
+ 12495 - 12288: jis0208<<14 | 0x04<<7 | 0x2E,
+ 12496 - 12288: jis0208<<14 | 0x04<<7 | 0x2F,
+ 12497 - 12288: jis0208<<14 | 0x04<<7 | 0x30,
+ 12498 - 12288: jis0208<<14 | 0x04<<7 | 0x31,
+ 12499 - 12288: jis0208<<14 | 0x04<<7 | 0x32,
+ 12500 - 12288: jis0208<<14 | 0x04<<7 | 0x33,
+ 12501 - 12288: jis0208<<14 | 0x04<<7 | 0x34,
+ 12502 - 12288: jis0208<<14 | 0x04<<7 | 0x35,
+ 12503 - 12288: jis0208<<14 | 0x04<<7 | 0x36,
+ 12504 - 12288: jis0208<<14 | 0x04<<7 | 0x37,
+ 12505 - 12288: jis0208<<14 | 0x04<<7 | 0x38,
+ 12506 - 12288: jis0208<<14 | 0x04<<7 | 0x39,
+ 12507 - 12288: jis0208<<14 | 0x04<<7 | 0x3A,
+ 12508 - 12288: jis0208<<14 | 0x04<<7 | 0x3B,
+ 12509 - 12288: jis0208<<14 | 0x04<<7 | 0x3C,
+ 12510 - 12288: jis0208<<14 | 0x04<<7 | 0x3D,
+ 12511 - 12288: jis0208<<14 | 0x04<<7 | 0x3E,
+ 12512 - 12288: jis0208<<14 | 0x04<<7 | 0x3F,
+ 12513 - 12288: jis0208<<14 | 0x04<<7 | 0x40,
+ 12514 - 12288: jis0208<<14 | 0x04<<7 | 0x41,
+ 12515 - 12288: jis0208<<14 | 0x04<<7 | 0x42,
+ 12516 - 12288: jis0208<<14 | 0x04<<7 | 0x43,
+ 12517 - 12288: jis0208<<14 | 0x04<<7 | 0x44,
+ 12518 - 12288: jis0208<<14 | 0x04<<7 | 0x45,
+ 12519 - 12288: jis0208<<14 | 0x04<<7 | 0x46,
+ 12520 - 12288: jis0208<<14 | 0x04<<7 | 0x47,
+ 12521 - 12288: jis0208<<14 | 0x04<<7 | 0x48,
+ 12522 - 12288: jis0208<<14 | 0x04<<7 | 0x49,
+ 12523 - 12288: jis0208<<14 | 0x04<<7 | 0x4A,
+ 12524 - 12288: jis0208<<14 | 0x04<<7 | 0x4B,
+ 12525 - 12288: jis0208<<14 | 0x04<<7 | 0x4C,
+ 12526 - 12288: jis0208<<14 | 0x04<<7 | 0x4D,
+ 12527 - 12288: jis0208<<14 | 0x04<<7 | 0x4E,
+ 12528 - 12288: jis0208<<14 | 0x04<<7 | 0x4F,
+ 12529 - 12288: jis0208<<14 | 0x04<<7 | 0x50,
+ 12530 - 12288: jis0208<<14 | 0x04<<7 | 0x51,
+ 12531 - 12288: jis0208<<14 | 0x04<<7 | 0x52,
+ 12532 - 12288: jis0208<<14 | 0x04<<7 | 0x53,
+ 12533 - 12288: jis0208<<14 | 0x04<<7 | 0x54,
+ 12534 - 12288: jis0208<<14 | 0x04<<7 | 0x55,
+ 12539 - 12288: jis0208<<14 | 0x00<<7 | 0x05,
+ 12540 - 12288: jis0208<<14 | 0x00<<7 | 0x1B,
+ 12541 - 12288: jis0208<<14 | 0x00<<7 | 0x12,
+ 12542 - 12288: jis0208<<14 | 0x00<<7 | 0x13,
+ 12849 - 12288: jis0208<<14 | 0x0C<<7 | 0x49,
+ 12850 - 12288: jis0208<<14 | 0x0C<<7 | 0x4A,
+ 12857 - 12288: jis0208<<14 | 0x0C<<7 | 0x4B,
+ 12964 - 12288: jis0208<<14 | 0x0C<<7 | 0x44,
+ 12965 - 12288: jis0208<<14 | 0x0C<<7 | 0x45,
+ 12966 - 12288: jis0208<<14 | 0x0C<<7 | 0x46,
+ 12967 - 12288: jis0208<<14 | 0x0C<<7 | 0x47,
+ 12968 - 12288: jis0208<<14 | 0x0C<<7 | 0x48,
+ 13059 - 12288: jis0208<<14 | 0x0C<<7 | 0x25,
+ 13069 - 12288: jis0208<<14 | 0x0C<<7 | 0x29,
+ 13076 - 12288: jis0208<<14 | 0x0C<<7 | 0x20,
+ 13080 - 12288: jis0208<<14 | 0x0C<<7 | 0x23,
+ 13090 - 12288: jis0208<<14 | 0x0C<<7 | 0x21,
+ 13091 - 12288: jis0208<<14 | 0x0C<<7 | 0x2B,
+ 13094 - 12288: jis0208<<14 | 0x0C<<7 | 0x2A,
+ 13095 - 12288: jis0208<<14 | 0x0C<<7 | 0x24,
+ 13099 - 12288: jis0208<<14 | 0x0C<<7 | 0x2C,
+ 13110 - 12288: jis0208<<14 | 0x0C<<7 | 0x26,
+ 13115 - 12288: jis0208<<14 | 0x0C<<7 | 0x2E,
+ 13129 - 12288: jis0208<<14 | 0x0C<<7 | 0x1F,
+ 13130 - 12288: jis0208<<14 | 0x0C<<7 | 0x2D,
+ 13133 - 12288: jis0208<<14 | 0x0C<<7 | 0x22,
+ 13137 - 12288: jis0208<<14 | 0x0C<<7 | 0x27,
+ 13143 - 12288: jis0208<<14 | 0x0C<<7 | 0x28,
+ 13179 - 12288: jis0208<<14 | 0x0C<<7 | 0x3E,
+ 13180 - 12288: jis0208<<14 | 0x0C<<7 | 0x4E,
+ 13181 - 12288: jis0208<<14 | 0x0C<<7 | 0x4D,
+ 13182 - 12288: jis0208<<14 | 0x0C<<7 | 0x4C,
+ 13198 - 12288: jis0208<<14 | 0x0C<<7 | 0x32,
+ 13199 - 12288: jis0208<<14 | 0x0C<<7 | 0x33,
+ 13212 - 12288: jis0208<<14 | 0x0C<<7 | 0x2F,
+ 13213 - 12288: jis0208<<14 | 0x0C<<7 | 0x30,
+ 13214 - 12288: jis0208<<14 | 0x0C<<7 | 0x31,
+ 13217 - 12288: jis0208<<14 | 0x0C<<7 | 0x35,
+ 13252 - 12288: jis0208<<14 | 0x0C<<7 | 0x34,
+ 13261 - 12288: jis0208<<14 | 0x0C<<7 | 0x42,
+}
+
+const encode3Low, encode3High = 161, 1120
+
+var encode3 = [...]uint16{
+ 161 - 161: jis0212<<14 | 0x01<<7 | 0x21,
+ 164 - 161: jis0212<<14 | 0x01<<7 | 0x4F,
+ 166 - 161: jis0212<<14 | 0x01<<7 | 0x22,
+ 167 - 161: jis0208<<14 | 0x00<<7 | 0x57,
+ 168 - 161: jis0208<<14 | 0x00<<7 | 0x0E,
+ 169 - 161: jis0212<<14 | 0x01<<7 | 0x4C,
+ 170 - 161: jis0212<<14 | 0x01<<7 | 0x4B,
+ 174 - 161: jis0212<<14 | 0x01<<7 | 0x4D,
+ 175 - 161: jis0212<<14 | 0x01<<7 | 0x13,
+ 176 - 161: jis0208<<14 | 0x00<<7 | 0x4A,
+ 177 - 161: jis0208<<14 | 0x00<<7 | 0x3D,
+ 180 - 161: jis0208<<14 | 0x00<<7 | 0x0C,
+ 182 - 161: jis0208<<14 | 0x01<<7 | 0x58,
+ 184 - 161: jis0212<<14 | 0x01<<7 | 0x10,
+ 186 - 161: jis0212<<14 | 0x01<<7 | 0x4A,
+ 191 - 161: jis0212<<14 | 0x01<<7 | 0x23,
+ 192 - 161: jis0212<<14 | 0x09<<7 | 0x01,
+ 193 - 161: jis0212<<14 | 0x09<<7 | 0x00,
+ 194 - 161: jis0212<<14 | 0x09<<7 | 0x03,
+ 195 - 161: jis0212<<14 | 0x09<<7 | 0x09,
+ 196 - 161: jis0212<<14 | 0x09<<7 | 0x02,
+ 197 - 161: jis0212<<14 | 0x09<<7 | 0x08,
+ 198 - 161: jis0212<<14 | 0x08<<7 | 0x00,
+ 199 - 161: jis0212<<14 | 0x09<<7 | 0x0D,
+ 200 - 161: jis0212<<14 | 0x09<<7 | 0x11,
+ 201 - 161: jis0212<<14 | 0x09<<7 | 0x10,
+ 202 - 161: jis0212<<14 | 0x09<<7 | 0x13,
+ 203 - 161: jis0212<<14 | 0x09<<7 | 0x12,
+ 204 - 161: jis0212<<14 | 0x09<<7 | 0x1F,
+ 205 - 161: jis0212<<14 | 0x09<<7 | 0x1E,
+ 206 - 161: jis0212<<14 | 0x09<<7 | 0x21,
+ 207 - 161: jis0212<<14 | 0x09<<7 | 0x20,
+ 209 - 161: jis0212<<14 | 0x09<<7 | 0x2F,
+ 210 - 161: jis0212<<14 | 0x09<<7 | 0x31,
+ 211 - 161: jis0212<<14 | 0x09<<7 | 0x30,
+ 212 - 161: jis0212<<14 | 0x09<<7 | 0x33,
+ 213 - 161: jis0212<<14 | 0x09<<7 | 0x37,
+ 214 - 161: jis0212<<14 | 0x09<<7 | 0x32,
+ 215 - 161: jis0208<<14 | 0x00<<7 | 0x3E,
+ 216 - 161: jis0212<<14 | 0x08<<7 | 0x0B,
+ 217 - 161: jis0212<<14 | 0x09<<7 | 0x42,
+ 218 - 161: jis0212<<14 | 0x09<<7 | 0x41,
+ 219 - 161: jis0212<<14 | 0x09<<7 | 0x44,
+ 220 - 161: jis0212<<14 | 0x09<<7 | 0x43,
+ 221 - 161: jis0212<<14 | 0x09<<7 | 0x51,
+ 222 - 161: jis0212<<14 | 0x08<<7 | 0x0F,
+ 223 - 161: jis0212<<14 | 0x08<<7 | 0x2D,
+ 224 - 161: jis0212<<14 | 0x0A<<7 | 0x01,
+ 225 - 161: jis0212<<14 | 0x0A<<7 | 0x00,
+ 226 - 161: jis0212<<14 | 0x0A<<7 | 0x03,
+ 227 - 161: jis0212<<14 | 0x0A<<7 | 0x09,
+ 228 - 161: jis0212<<14 | 0x0A<<7 | 0x02,
+ 229 - 161: jis0212<<14 | 0x0A<<7 | 0x08,
+ 230 - 161: jis0212<<14 | 0x08<<7 | 0x20,
+ 231 - 161: jis0212<<14 | 0x0A<<7 | 0x0D,
+ 232 - 161: jis0212<<14 | 0x0A<<7 | 0x11,
+ 233 - 161: jis0212<<14 | 0x0A<<7 | 0x10,
+ 234 - 161: jis0212<<14 | 0x0A<<7 | 0x13,
+ 235 - 161: jis0212<<14 | 0x0A<<7 | 0x12,
+ 236 - 161: jis0212<<14 | 0x0A<<7 | 0x1F,
+ 237 - 161: jis0212<<14 | 0x0A<<7 | 0x1E,
+ 238 - 161: jis0212<<14 | 0x0A<<7 | 0x21,
+ 239 - 161: jis0212<<14 | 0x0A<<7 | 0x20,
+ 240 - 161: jis0212<<14 | 0x08<<7 | 0x22,
+ 241 - 161: jis0212<<14 | 0x0A<<7 | 0x2F,
+ 242 - 161: jis0212<<14 | 0x0A<<7 | 0x31,
+ 243 - 161: jis0212<<14 | 0x0A<<7 | 0x30,
+ 244 - 161: jis0212<<14 | 0x0A<<7 | 0x33,
+ 245 - 161: jis0212<<14 | 0x0A<<7 | 0x37,
+ 246 - 161: jis0212<<14 | 0x0A<<7 | 0x32,
+ 247 - 161: jis0208<<14 | 0x00<<7 | 0x3F,
+ 248 - 161: jis0212<<14 | 0x08<<7 | 0x2B,
+ 249 - 161: jis0212<<14 | 0x0A<<7 | 0x42,
+ 250 - 161: jis0212<<14 | 0x0A<<7 | 0x41,
+ 251 - 161: jis0212<<14 | 0x0A<<7 | 0x44,
+ 252 - 161: jis0212<<14 | 0x0A<<7 | 0x43,
+ 253 - 161: jis0212<<14 | 0x0A<<7 | 0x51,
+ 254 - 161: jis0212<<14 | 0x08<<7 | 0x2F,
+ 255 - 161: jis0212<<14 | 0x0A<<7 | 0x52,
+ 256 - 161: jis0212<<14 | 0x09<<7 | 0x06,
+ 257 - 161: jis0212<<14 | 0x0A<<7 | 0x06,
+ 258 - 161: jis0212<<14 | 0x09<<7 | 0x04,
+ 259 - 161: jis0212<<14 | 0x0A<<7 | 0x04,
+ 260 - 161: jis0212<<14 | 0x09<<7 | 0x07,
+ 261 - 161: jis0212<<14 | 0x0A<<7 | 0x07,
+ 262 - 161: jis0212<<14 | 0x09<<7 | 0x0A,
+ 263 - 161: jis0212<<14 | 0x0A<<7 | 0x0A,
+ 264 - 161: jis0212<<14 | 0x09<<7 | 0x0B,
+ 265 - 161: jis0212<<14 | 0x0A<<7 | 0x0B,
+ 266 - 161: jis0212<<14 | 0x09<<7 | 0x0E,
+ 267 - 161: jis0212<<14 | 0x0A<<7 | 0x0E,
+ 268 - 161: jis0212<<14 | 0x09<<7 | 0x0C,
+ 269 - 161: jis0212<<14 | 0x0A<<7 | 0x0C,
+ 270 - 161: jis0212<<14 | 0x09<<7 | 0x0F,
+ 271 - 161: jis0212<<14 | 0x0A<<7 | 0x0F,
+ 272 - 161: jis0212<<14 | 0x08<<7 | 0x01,
+ 273 - 161: jis0212<<14 | 0x08<<7 | 0x21,
+ 274 - 161: jis0212<<14 | 0x09<<7 | 0x16,
+ 275 - 161: jis0212<<14 | 0x0A<<7 | 0x16,
+ 278 - 161: jis0212<<14 | 0x09<<7 | 0x15,
+ 279 - 161: jis0212<<14 | 0x0A<<7 | 0x15,
+ 280 - 161: jis0212<<14 | 0x09<<7 | 0x17,
+ 281 - 161: jis0212<<14 | 0x0A<<7 | 0x17,
+ 282 - 161: jis0212<<14 | 0x09<<7 | 0x14,
+ 283 - 161: jis0212<<14 | 0x0A<<7 | 0x14,
+ 284 - 161: jis0212<<14 | 0x09<<7 | 0x19,
+ 285 - 161: jis0212<<14 | 0x0A<<7 | 0x19,
+ 286 - 161: jis0212<<14 | 0x09<<7 | 0x1A,
+ 287 - 161: jis0212<<14 | 0x0A<<7 | 0x1A,
+ 288 - 161: jis0212<<14 | 0x09<<7 | 0x1C,
+ 289 - 161: jis0212<<14 | 0x0A<<7 | 0x1C,
+ 290 - 161: jis0212<<14 | 0x09<<7 | 0x1B,
+ 292 - 161: jis0212<<14 | 0x09<<7 | 0x1D,
+ 293 - 161: jis0212<<14 | 0x0A<<7 | 0x1D,
+ 294 - 161: jis0212<<14 | 0x08<<7 | 0x03,
+ 295 - 161: jis0212<<14 | 0x08<<7 | 0x23,
+ 296 - 161: jis0212<<14 | 0x09<<7 | 0x26,
+ 297 - 161: jis0212<<14 | 0x0A<<7 | 0x26,
+ 298 - 161: jis0212<<14 | 0x09<<7 | 0x24,
+ 299 - 161: jis0212<<14 | 0x0A<<7 | 0x24,
+ 302 - 161: jis0212<<14 | 0x09<<7 | 0x25,
+ 303 - 161: jis0212<<14 | 0x0A<<7 | 0x25,
+ 304 - 161: jis0212<<14 | 0x09<<7 | 0x23,
+ 305 - 161: jis0212<<14 | 0x08<<7 | 0x24,
+ 306 - 161: jis0212<<14 | 0x08<<7 | 0x05,
+ 307 - 161: jis0212<<14 | 0x08<<7 | 0x25,
+ 308 - 161: jis0212<<14 | 0x09<<7 | 0x27,
+ 309 - 161: jis0212<<14 | 0x0A<<7 | 0x27,
+ 310 - 161: jis0212<<14 | 0x09<<7 | 0x28,
+ 311 - 161: jis0212<<14 | 0x0A<<7 | 0x28,
+ 312 - 161: jis0212<<14 | 0x08<<7 | 0x26,
+ 313 - 161: jis0212<<14 | 0x09<<7 | 0x29,
+ 314 - 161: jis0212<<14 | 0x0A<<7 | 0x29,
+ 315 - 161: jis0212<<14 | 0x09<<7 | 0x2B,
+ 316 - 161: jis0212<<14 | 0x0A<<7 | 0x2B,
+ 317 - 161: jis0212<<14 | 0x09<<7 | 0x2A,
+ 318 - 161: jis0212<<14 | 0x0A<<7 | 0x2A,
+ 319 - 161: jis0212<<14 | 0x08<<7 | 0x08,
+ 320 - 161: jis0212<<14 | 0x08<<7 | 0x28,
+ 321 - 161: jis0212<<14 | 0x08<<7 | 0x07,
+ 322 - 161: jis0212<<14 | 0x08<<7 | 0x27,
+ 323 - 161: jis0212<<14 | 0x09<<7 | 0x2C,
+ 324 - 161: jis0212<<14 | 0x0A<<7 | 0x2C,
+ 325 - 161: jis0212<<14 | 0x09<<7 | 0x2E,
+ 326 - 161: jis0212<<14 | 0x0A<<7 | 0x2E,
+ 327 - 161: jis0212<<14 | 0x09<<7 | 0x2D,
+ 328 - 161: jis0212<<14 | 0x0A<<7 | 0x2D,
+ 329 - 161: jis0212<<14 | 0x08<<7 | 0x29,
+ 330 - 161: jis0212<<14 | 0x08<<7 | 0x0A,
+ 331 - 161: jis0212<<14 | 0x08<<7 | 0x2A,
+ 332 - 161: jis0212<<14 | 0x09<<7 | 0x36,
+ 333 - 161: jis0212<<14 | 0x0A<<7 | 0x36,
+ 336 - 161: jis0212<<14 | 0x09<<7 | 0x35,
+ 337 - 161: jis0212<<14 | 0x0A<<7 | 0x35,
+ 338 - 161: jis0212<<14 | 0x08<<7 | 0x0C,
+ 339 - 161: jis0212<<14 | 0x08<<7 | 0x2C,
+ 340 - 161: jis0212<<14 | 0x09<<7 | 0x38,
+ 341 - 161: jis0212<<14 | 0x0A<<7 | 0x38,
+ 342 - 161: jis0212<<14 | 0x09<<7 | 0x3A,
+ 343 - 161: jis0212<<14 | 0x0A<<7 | 0x3A,
+ 344 - 161: jis0212<<14 | 0x09<<7 | 0x39,
+ 345 - 161: jis0212<<14 | 0x0A<<7 | 0x39,
+ 346 - 161: jis0212<<14 | 0x09<<7 | 0x3B,
+ 347 - 161: jis0212<<14 | 0x0A<<7 | 0x3B,
+ 348 - 161: jis0212<<14 | 0x09<<7 | 0x3C,
+ 349 - 161: jis0212<<14 | 0x0A<<7 | 0x3C,
+ 350 - 161: jis0212<<14 | 0x09<<7 | 0x3E,
+ 351 - 161: jis0212<<14 | 0x0A<<7 | 0x3E,
+ 352 - 161: jis0212<<14 | 0x09<<7 | 0x3D,
+ 353 - 161: jis0212<<14 | 0x0A<<7 | 0x3D,
+ 354 - 161: jis0212<<14 | 0x09<<7 | 0x40,
+ 355 - 161: jis0212<<14 | 0x0A<<7 | 0x40,
+ 356 - 161: jis0212<<14 | 0x09<<7 | 0x3F,
+ 357 - 161: jis0212<<14 | 0x0A<<7 | 0x3F,
+ 358 - 161: jis0212<<14 | 0x08<<7 | 0x0E,
+ 359 - 161: jis0212<<14 | 0x08<<7 | 0x2E,
+ 360 - 161: jis0212<<14 | 0x09<<7 | 0x4B,
+ 361 - 161: jis0212<<14 | 0x0A<<7 | 0x4B,
+ 362 - 161: jis0212<<14 | 0x09<<7 | 0x48,
+ 363 - 161: jis0212<<14 | 0x0A<<7 | 0x48,
+ 364 - 161: jis0212<<14 | 0x09<<7 | 0x45,
+ 365 - 161: jis0212<<14 | 0x0A<<7 | 0x45,
+ 366 - 161: jis0212<<14 | 0x09<<7 | 0x4A,
+ 367 - 161: jis0212<<14 | 0x0A<<7 | 0x4A,
+ 368 - 161: jis0212<<14 | 0x09<<7 | 0x47,
+ 369 - 161: jis0212<<14 | 0x0A<<7 | 0x47,
+ 370 - 161: jis0212<<14 | 0x09<<7 | 0x49,
+ 371 - 161: jis0212<<14 | 0x0A<<7 | 0x49,
+ 372 - 161: jis0212<<14 | 0x09<<7 | 0x50,
+ 373 - 161: jis0212<<14 | 0x0A<<7 | 0x50,
+ 374 - 161: jis0212<<14 | 0x09<<7 | 0x53,
+ 375 - 161: jis0212<<14 | 0x0A<<7 | 0x53,
+ 376 - 161: jis0212<<14 | 0x09<<7 | 0x52,
+ 377 - 161: jis0212<<14 | 0x09<<7 | 0x54,
+ 378 - 161: jis0212<<14 | 0x0A<<7 | 0x54,
+ 379 - 161: jis0212<<14 | 0x09<<7 | 0x56,
+ 380 - 161: jis0212<<14 | 0x0A<<7 | 0x56,
+ 381 - 161: jis0212<<14 | 0x09<<7 | 0x55,
+ 382 - 161: jis0212<<14 | 0x0A<<7 | 0x55,
+ 461 - 161: jis0212<<14 | 0x09<<7 | 0x05,
+ 462 - 161: jis0212<<14 | 0x0A<<7 | 0x05,
+ 463 - 161: jis0212<<14 | 0x09<<7 | 0x22,
+ 464 - 161: jis0212<<14 | 0x0A<<7 | 0x22,
+ 465 - 161: jis0212<<14 | 0x09<<7 | 0x34,
+ 466 - 161: jis0212<<14 | 0x0A<<7 | 0x34,
+ 467 - 161: jis0212<<14 | 0x09<<7 | 0x46,
+ 468 - 161: jis0212<<14 | 0x0A<<7 | 0x46,
+ 469 - 161: jis0212<<14 | 0x09<<7 | 0x4F,
+ 470 - 161: jis0212<<14 | 0x0A<<7 | 0x4F,
+ 471 - 161: jis0212<<14 | 0x09<<7 | 0x4C,
+ 472 - 161: jis0212<<14 | 0x0A<<7 | 0x4C,
+ 473 - 161: jis0212<<14 | 0x09<<7 | 0x4E,
+ 474 - 161: jis0212<<14 | 0x0A<<7 | 0x4E,
+ 475 - 161: jis0212<<14 | 0x09<<7 | 0x4D,
+ 476 - 161: jis0212<<14 | 0x0A<<7 | 0x4D,
+ 501 - 161: jis0212<<14 | 0x0A<<7 | 0x18,
+ 711 - 161: jis0212<<14 | 0x01<<7 | 0x0F,
+ 728 - 161: jis0212<<14 | 0x01<<7 | 0x0E,
+ 729 - 161: jis0212<<14 | 0x01<<7 | 0x11,
+ 730 - 161: jis0212<<14 | 0x01<<7 | 0x15,
+ 731 - 161: jis0212<<14 | 0x01<<7 | 0x14,
+ 733 - 161: jis0212<<14 | 0x01<<7 | 0x12,
+ 900 - 161: jis0212<<14 | 0x01<<7 | 0x17,
+ 901 - 161: jis0212<<14 | 0x01<<7 | 0x18,
+ 902 - 161: jis0212<<14 | 0x05<<7 | 0x40,
+ 904 - 161: jis0212<<14 | 0x05<<7 | 0x41,
+ 905 - 161: jis0212<<14 | 0x05<<7 | 0x42,
+ 906 - 161: jis0212<<14 | 0x05<<7 | 0x43,
+ 908 - 161: jis0212<<14 | 0x05<<7 | 0x46,
+ 910 - 161: jis0212<<14 | 0x05<<7 | 0x48,
+ 911 - 161: jis0212<<14 | 0x05<<7 | 0x4B,
+ 912 - 161: jis0212<<14 | 0x05<<7 | 0x55,
+ 913 - 161: jis0208<<14 | 0x05<<7 | 0x00,
+ 914 - 161: jis0208<<14 | 0x05<<7 | 0x01,
+ 915 - 161: jis0208<<14 | 0x05<<7 | 0x02,
+ 916 - 161: jis0208<<14 | 0x05<<7 | 0x03,
+ 917 - 161: jis0208<<14 | 0x05<<7 | 0x04,
+ 918 - 161: jis0208<<14 | 0x05<<7 | 0x05,
+ 919 - 161: jis0208<<14 | 0x05<<7 | 0x06,
+ 920 - 161: jis0208<<14 | 0x05<<7 | 0x07,
+ 921 - 161: jis0208<<14 | 0x05<<7 | 0x08,
+ 922 - 161: jis0208<<14 | 0x05<<7 | 0x09,
+ 923 - 161: jis0208<<14 | 0x05<<7 | 0x0A,
+ 924 - 161: jis0208<<14 | 0x05<<7 | 0x0B,
+ 925 - 161: jis0208<<14 | 0x05<<7 | 0x0C,
+ 926 - 161: jis0208<<14 | 0x05<<7 | 0x0D,
+ 927 - 161: jis0208<<14 | 0x05<<7 | 0x0E,
+ 928 - 161: jis0208<<14 | 0x05<<7 | 0x0F,
+ 929 - 161: jis0208<<14 | 0x05<<7 | 0x10,
+ 931 - 161: jis0208<<14 | 0x05<<7 | 0x11,
+ 932 - 161: jis0208<<14 | 0x05<<7 | 0x12,
+ 933 - 161: jis0208<<14 | 0x05<<7 | 0x13,
+ 934 - 161: jis0208<<14 | 0x05<<7 | 0x14,
+ 935 - 161: jis0208<<14 | 0x05<<7 | 0x15,
+ 936 - 161: jis0208<<14 | 0x05<<7 | 0x16,
+ 937 - 161: jis0208<<14 | 0x05<<7 | 0x17,
+ 938 - 161: jis0212<<14 | 0x05<<7 | 0x44,
+ 939 - 161: jis0212<<14 | 0x05<<7 | 0x49,
+ 940 - 161: jis0212<<14 | 0x05<<7 | 0x50,
+ 941 - 161: jis0212<<14 | 0x05<<7 | 0x51,
+ 942 - 161: jis0212<<14 | 0x05<<7 | 0x52,
+ 943 - 161: jis0212<<14 | 0x05<<7 | 0x53,
+ 944 - 161: jis0212<<14 | 0x05<<7 | 0x5A,
+ 945 - 161: jis0208<<14 | 0x05<<7 | 0x20,
+ 946 - 161: jis0208<<14 | 0x05<<7 | 0x21,
+ 947 - 161: jis0208<<14 | 0x05<<7 | 0x22,
+ 948 - 161: jis0208<<14 | 0x05<<7 | 0x23,
+ 949 - 161: jis0208<<14 | 0x05<<7 | 0x24,
+ 950 - 161: jis0208<<14 | 0x05<<7 | 0x25,
+ 951 - 161: jis0208<<14 | 0x05<<7 | 0x26,
+ 952 - 161: jis0208<<14 | 0x05<<7 | 0x27,
+ 953 - 161: jis0208<<14 | 0x05<<7 | 0x28,
+ 954 - 161: jis0208<<14 | 0x05<<7 | 0x29,
+ 955 - 161: jis0208<<14 | 0x05<<7 | 0x2A,
+ 956 - 161: jis0208<<14 | 0x05<<7 | 0x2B,
+ 957 - 161: jis0208<<14 | 0x05<<7 | 0x2C,
+ 958 - 161: jis0208<<14 | 0x05<<7 | 0x2D,
+ 959 - 161: jis0208<<14 | 0x05<<7 | 0x2E,
+ 960 - 161: jis0208<<14 | 0x05<<7 | 0x2F,
+ 961 - 161: jis0208<<14 | 0x05<<7 | 0x30,
+ 962 - 161: jis0212<<14 | 0x05<<7 | 0x57,
+ 963 - 161: jis0208<<14 | 0x05<<7 | 0x31,
+ 964 - 161: jis0208<<14 | 0x05<<7 | 0x32,
+ 965 - 161: jis0208<<14 | 0x05<<7 | 0x33,
+ 966 - 161: jis0208<<14 | 0x05<<7 | 0x34,
+ 967 - 161: jis0208<<14 | 0x05<<7 | 0x35,
+ 968 - 161: jis0208<<14 | 0x05<<7 | 0x36,
+ 969 - 161: jis0208<<14 | 0x05<<7 | 0x37,
+ 970 - 161: jis0212<<14 | 0x05<<7 | 0x54,
+ 971 - 161: jis0212<<14 | 0x05<<7 | 0x59,
+ 972 - 161: jis0212<<14 | 0x05<<7 | 0x56,
+ 973 - 161: jis0212<<14 | 0x05<<7 | 0x58,
+ 974 - 161: jis0212<<14 | 0x05<<7 | 0x5B,
+ 1025 - 161: jis0208<<14 | 0x06<<7 | 0x06,
+ 1026 - 161: jis0212<<14 | 0x06<<7 | 0x21,
+ 1027 - 161: jis0212<<14 | 0x06<<7 | 0x22,
+ 1028 - 161: jis0212<<14 | 0x06<<7 | 0x23,
+ 1029 - 161: jis0212<<14 | 0x06<<7 | 0x24,
+ 1030 - 161: jis0212<<14 | 0x06<<7 | 0x25,
+ 1031 - 161: jis0212<<14 | 0x06<<7 | 0x26,
+ 1032 - 161: jis0212<<14 | 0x06<<7 | 0x27,
+ 1033 - 161: jis0212<<14 | 0x06<<7 | 0x28,
+ 1034 - 161: jis0212<<14 | 0x06<<7 | 0x29,
+ 1035 - 161: jis0212<<14 | 0x06<<7 | 0x2A,
+ 1036 - 161: jis0212<<14 | 0x06<<7 | 0x2B,
+ 1038 - 161: jis0212<<14 | 0x06<<7 | 0x2C,
+ 1039 - 161: jis0212<<14 | 0x06<<7 | 0x2D,
+ 1040 - 161: jis0208<<14 | 0x06<<7 | 0x00,
+ 1041 - 161: jis0208<<14 | 0x06<<7 | 0x01,
+ 1042 - 161: jis0208<<14 | 0x06<<7 | 0x02,
+ 1043 - 161: jis0208<<14 | 0x06<<7 | 0x03,
+ 1044 - 161: jis0208<<14 | 0x06<<7 | 0x04,
+ 1045 - 161: jis0208<<14 | 0x06<<7 | 0x05,
+ 1046 - 161: jis0208<<14 | 0x06<<7 | 0x07,
+ 1047 - 161: jis0208<<14 | 0x06<<7 | 0x08,
+ 1048 - 161: jis0208<<14 | 0x06<<7 | 0x09,
+ 1049 - 161: jis0208<<14 | 0x06<<7 | 0x0A,
+ 1050 - 161: jis0208<<14 | 0x06<<7 | 0x0B,
+ 1051 - 161: jis0208<<14 | 0x06<<7 | 0x0C,
+ 1052 - 161: jis0208<<14 | 0x06<<7 | 0x0D,
+ 1053 - 161: jis0208<<14 | 0x06<<7 | 0x0E,
+ 1054 - 161: jis0208<<14 | 0x06<<7 | 0x0F,
+ 1055 - 161: jis0208<<14 | 0x06<<7 | 0x10,
+ 1056 - 161: jis0208<<14 | 0x06<<7 | 0x11,
+ 1057 - 161: jis0208<<14 | 0x06<<7 | 0x12,
+ 1058 - 161: jis0208<<14 | 0x06<<7 | 0x13,
+ 1059 - 161: jis0208<<14 | 0x06<<7 | 0x14,
+ 1060 - 161: jis0208<<14 | 0x06<<7 | 0x15,
+ 1061 - 161: jis0208<<14 | 0x06<<7 | 0x16,
+ 1062 - 161: jis0208<<14 | 0x06<<7 | 0x17,
+ 1063 - 161: jis0208<<14 | 0x06<<7 | 0x18,
+ 1064 - 161: jis0208<<14 | 0x06<<7 | 0x19,
+ 1065 - 161: jis0208<<14 | 0x06<<7 | 0x1A,
+ 1066 - 161: jis0208<<14 | 0x06<<7 | 0x1B,
+ 1067 - 161: jis0208<<14 | 0x06<<7 | 0x1C,
+ 1068 - 161: jis0208<<14 | 0x06<<7 | 0x1D,
+ 1069 - 161: jis0208<<14 | 0x06<<7 | 0x1E,
+ 1070 - 161: jis0208<<14 | 0x06<<7 | 0x1F,
+ 1071 - 161: jis0208<<14 | 0x06<<7 | 0x20,
+ 1072 - 161: jis0208<<14 | 0x06<<7 | 0x30,
+ 1073 - 161: jis0208<<14 | 0x06<<7 | 0x31,
+ 1074 - 161: jis0208<<14 | 0x06<<7 | 0x32,
+ 1075 - 161: jis0208<<14 | 0x06<<7 | 0x33,
+ 1076 - 161: jis0208<<14 | 0x06<<7 | 0x34,
+ 1077 - 161: jis0208<<14 | 0x06<<7 | 0x35,
+ 1078 - 161: jis0208<<14 | 0x06<<7 | 0x37,
+ 1079 - 161: jis0208<<14 | 0x06<<7 | 0x38,
+ 1080 - 161: jis0208<<14 | 0x06<<7 | 0x39,
+ 1081 - 161: jis0208<<14 | 0x06<<7 | 0x3A,
+ 1082 - 161: jis0208<<14 | 0x06<<7 | 0x3B,
+ 1083 - 161: jis0208<<14 | 0x06<<7 | 0x3C,
+ 1084 - 161: jis0208<<14 | 0x06<<7 | 0x3D,
+ 1085 - 161: jis0208<<14 | 0x06<<7 | 0x3E,
+ 1086 - 161: jis0208<<14 | 0x06<<7 | 0x3F,
+ 1087 - 161: jis0208<<14 | 0x06<<7 | 0x40,
+ 1088 - 161: jis0208<<14 | 0x06<<7 | 0x41,
+ 1089 - 161: jis0208<<14 | 0x06<<7 | 0x42,
+ 1090 - 161: jis0208<<14 | 0x06<<7 | 0x43,
+ 1091 - 161: jis0208<<14 | 0x06<<7 | 0x44,
+ 1092 - 161: jis0208<<14 | 0x06<<7 | 0x45,
+ 1093 - 161: jis0208<<14 | 0x06<<7 | 0x46,
+ 1094 - 161: jis0208<<14 | 0x06<<7 | 0x47,
+ 1095 - 161: jis0208<<14 | 0x06<<7 | 0x48,
+ 1096 - 161: jis0208<<14 | 0x06<<7 | 0x49,
+ 1097 - 161: jis0208<<14 | 0x06<<7 | 0x4A,
+ 1098 - 161: jis0208<<14 | 0x06<<7 | 0x4B,
+ 1099 - 161: jis0208<<14 | 0x06<<7 | 0x4C,
+ 1100 - 161: jis0208<<14 | 0x06<<7 | 0x4D,
+ 1101 - 161: jis0208<<14 | 0x06<<7 | 0x4E,
+ 1102 - 161: jis0208<<14 | 0x06<<7 | 0x4F,
+ 1103 - 161: jis0208<<14 | 0x06<<7 | 0x50,
+ 1105 - 161: jis0208<<14 | 0x06<<7 | 0x36,
+ 1106 - 161: jis0212<<14 | 0x06<<7 | 0x51,
+ 1107 - 161: jis0212<<14 | 0x06<<7 | 0x52,
+ 1108 - 161: jis0212<<14 | 0x06<<7 | 0x53,
+ 1109 - 161: jis0212<<14 | 0x06<<7 | 0x54,
+ 1110 - 161: jis0212<<14 | 0x06<<7 | 0x55,
+ 1111 - 161: jis0212<<14 | 0x06<<7 | 0x56,
+ 1112 - 161: jis0212<<14 | 0x06<<7 | 0x57,
+ 1113 - 161: jis0212<<14 | 0x06<<7 | 0x58,
+ 1114 - 161: jis0212<<14 | 0x06<<7 | 0x59,
+ 1115 - 161: jis0212<<14 | 0x06<<7 | 0x5A,
+ 1116 - 161: jis0212<<14 | 0x06<<7 | 0x5B,
+ 1118 - 161: jis0212<<14 | 0x06<<7 | 0x5C,
+ 1119 - 161: jis0212<<14 | 0x06<<7 | 0x5D,
+}
+
+const encode4Low, encode4High = 63785, 64046
+
+var encode4 = [...]uint16{
+ 63785 - 63785: jis0208<<14 | 0x59<<7 | 0x25,
+ 63964 - 63785: jis0208<<14 | 0x5B<<7 | 0x2E,
+ 64014 - 63785: jis0208<<14 | 0x58<<7 | 0x33,
+ 64015 - 63785: jis0208<<14 | 0x58<<7 | 0x3E,
+ 64016 - 63785: jis0208<<14 | 0x58<<7 | 0x3F,
+ 64017 - 63785: jis0208<<14 | 0x58<<7 | 0x54,
+ 64018 - 63785: jis0208<<14 | 0x59<<7 | 0x1D,
+ 64019 - 63785: jis0208<<14 | 0x59<<7 | 0x2D,
+ 64020 - 63785: jis0208<<14 | 0x59<<7 | 0x2F,
+ 64021 - 63785: jis0208<<14 | 0x59<<7 | 0x5A,
+ 64022 - 63785: jis0208<<14 | 0x5A<<7 | 0x02,
+ 64023 - 63785: jis0208<<14 | 0x5A<<7 | 0x19,
+ 64024 - 63785: jis0208<<14 | 0x5A<<7 | 0x21,
+ 64025 - 63785: jis0208<<14 | 0x5A<<7 | 0x22,
+ 64026 - 63785: jis0208<<14 | 0x5A<<7 | 0x23,
+ 64027 - 63785: jis0208<<14 | 0x5A<<7 | 0x25,
+ 64028 - 63785: jis0208<<14 | 0x5A<<7 | 0x29,
+ 64029 - 63785: jis0208<<14 | 0x5A<<7 | 0x2C,
+ 64030 - 63785: jis0208<<14 | 0x5A<<7 | 0x35,
+ 64031 - 63785: jis0208<<14 | 0x5A<<7 | 0x40,
+ 64032 - 63785: jis0208<<14 | 0x5A<<7 | 0x42,
+ 64033 - 63785: jis0208<<14 | 0x5A<<7 | 0x43,
+ 64034 - 63785: jis0208<<14 | 0x5A<<7 | 0x4C,
+ 64035 - 63785: jis0208<<14 | 0x5A<<7 | 0x54,
+ 64036 - 63785: jis0208<<14 | 0x5A<<7 | 0x56,
+ 64037 - 63785: jis0208<<14 | 0x5A<<7 | 0x57,
+ 64038 - 63785: jis0208<<14 | 0x5A<<7 | 0x5A,
+ 64039 - 63785: jis0208<<14 | 0x5B<<7 | 0x18,
+ 64040 - 63785: jis0208<<14 | 0x5B<<7 | 0x1F,
+ 64041 - 63785: jis0208<<14 | 0x5B<<7 | 0x2F,
+ 64042 - 63785: jis0208<<14 | 0x5B<<7 | 0x3B,
+ 64043 - 63785: jis0208<<14 | 0x5B<<7 | 0x3C,
+ 64044 - 63785: jis0208<<14 | 0x5B<<7 | 0x3E,
+ 64045 - 63785: jis0208<<14 | 0x5B<<7 | 0x4B,
+}
+
+const encode5Low, encode5High = 65281, 65510
+
+var encode5 = [...]uint16{
+ 65281 - 65281: jis0208<<14 | 0x00<<7 | 0x09,
+ 65282 - 65281: jis0208<<14 | 0x5B<<7 | 0x5D,
+ 65283 - 65281: jis0208<<14 | 0x00<<7 | 0x53,
+ 65284 - 65281: jis0208<<14 | 0x00<<7 | 0x4F,
+ 65285 - 65281: jis0208<<14 | 0x00<<7 | 0x52,
+ 65286 - 65281: jis0208<<14 | 0x00<<7 | 0x54,
+ 65287 - 65281: jis0208<<14 | 0x5B<<7 | 0x5C,
+ 65288 - 65281: jis0208<<14 | 0x00<<7 | 0x29,
+ 65289 - 65281: jis0208<<14 | 0x00<<7 | 0x2A,
+ 65290 - 65281: jis0208<<14 | 0x00<<7 | 0x55,
+ 65291 - 65281: jis0208<<14 | 0x00<<7 | 0x3B,
+ 65292 - 65281: jis0208<<14 | 0x00<<7 | 0x03,
+ 65293 - 65281: jis0208<<14 | 0x00<<7 | 0x3C,
+ 65294 - 65281: jis0208<<14 | 0x00<<7 | 0x04,
+ 65295 - 65281: jis0208<<14 | 0x00<<7 | 0x1E,
+ 65296 - 65281: jis0208<<14 | 0x02<<7 | 0x0F,
+ 65297 - 65281: jis0208<<14 | 0x02<<7 | 0x10,
+ 65298 - 65281: jis0208<<14 | 0x02<<7 | 0x11,
+ 65299 - 65281: jis0208<<14 | 0x02<<7 | 0x12,
+ 65300 - 65281: jis0208<<14 | 0x02<<7 | 0x13,
+ 65301 - 65281: jis0208<<14 | 0x02<<7 | 0x14,
+ 65302 - 65281: jis0208<<14 | 0x02<<7 | 0x15,
+ 65303 - 65281: jis0208<<14 | 0x02<<7 | 0x16,
+ 65304 - 65281: jis0208<<14 | 0x02<<7 | 0x17,
+ 65305 - 65281: jis0208<<14 | 0x02<<7 | 0x18,
+ 65306 - 65281: jis0208<<14 | 0x00<<7 | 0x06,
+ 65307 - 65281: jis0208<<14 | 0x00<<7 | 0x07,
+ 65308 - 65281: jis0208<<14 | 0x00<<7 | 0x42,
+ 65309 - 65281: jis0208<<14 | 0x00<<7 | 0x40,
+ 65310 - 65281: jis0208<<14 | 0x00<<7 | 0x43,
+ 65311 - 65281: jis0208<<14 | 0x00<<7 | 0x08,
+ 65312 - 65281: jis0208<<14 | 0x00<<7 | 0x56,
+ 65313 - 65281: jis0208<<14 | 0x02<<7 | 0x20,
+ 65314 - 65281: jis0208<<14 | 0x02<<7 | 0x21,
+ 65315 - 65281: jis0208<<14 | 0x02<<7 | 0x22,
+ 65316 - 65281: jis0208<<14 | 0x02<<7 | 0x23,
+ 65317 - 65281: jis0208<<14 | 0x02<<7 | 0x24,
+ 65318 - 65281: jis0208<<14 | 0x02<<7 | 0x25,
+ 65319 - 65281: jis0208<<14 | 0x02<<7 | 0x26,
+ 65320 - 65281: jis0208<<14 | 0x02<<7 | 0x27,
+ 65321 - 65281: jis0208<<14 | 0x02<<7 | 0x28,
+ 65322 - 65281: jis0208<<14 | 0x02<<7 | 0x29,
+ 65323 - 65281: jis0208<<14 | 0x02<<7 | 0x2A,
+ 65324 - 65281: jis0208<<14 | 0x02<<7 | 0x2B,
+ 65325 - 65281: jis0208<<14 | 0x02<<7 | 0x2C,
+ 65326 - 65281: jis0208<<14 | 0x02<<7 | 0x2D,
+ 65327 - 65281: jis0208<<14 | 0x02<<7 | 0x2E,
+ 65328 - 65281: jis0208<<14 | 0x02<<7 | 0x2F,
+ 65329 - 65281: jis0208<<14 | 0x02<<7 | 0x30,
+ 65330 - 65281: jis0208<<14 | 0x02<<7 | 0x31,
+ 65331 - 65281: jis0208<<14 | 0x02<<7 | 0x32,
+ 65332 - 65281: jis0208<<14 | 0x02<<7 | 0x33,
+ 65333 - 65281: jis0208<<14 | 0x02<<7 | 0x34,
+ 65334 - 65281: jis0208<<14 | 0x02<<7 | 0x35,
+ 65335 - 65281: jis0208<<14 | 0x02<<7 | 0x36,
+ 65336 - 65281: jis0208<<14 | 0x02<<7 | 0x37,
+ 65337 - 65281: jis0208<<14 | 0x02<<7 | 0x38,
+ 65338 - 65281: jis0208<<14 | 0x02<<7 | 0x39,
+ 65339 - 65281: jis0208<<14 | 0x00<<7 | 0x2D,
+ 65340 - 65281: jis0208<<14 | 0x00<<7 | 0x1F,
+ 65341 - 65281: jis0208<<14 | 0x00<<7 | 0x2E,
+ 65342 - 65281: jis0208<<14 | 0x00<<7 | 0x0F,
+ 65343 - 65281: jis0208<<14 | 0x00<<7 | 0x11,
+ 65344 - 65281: jis0208<<14 | 0x00<<7 | 0x0D,
+ 65345 - 65281: jis0208<<14 | 0x02<<7 | 0x40,
+ 65346 - 65281: jis0208<<14 | 0x02<<7 | 0x41,
+ 65347 - 65281: jis0208<<14 | 0x02<<7 | 0x42,
+ 65348 - 65281: jis0208<<14 | 0x02<<7 | 0x43,
+ 65349 - 65281: jis0208<<14 | 0x02<<7 | 0x44,
+ 65350 - 65281: jis0208<<14 | 0x02<<7 | 0x45,
+ 65351 - 65281: jis0208<<14 | 0x02<<7 | 0x46,
+ 65352 - 65281: jis0208<<14 | 0x02<<7 | 0x47,
+ 65353 - 65281: jis0208<<14 | 0x02<<7 | 0x48,
+ 65354 - 65281: jis0208<<14 | 0x02<<7 | 0x49,
+ 65355 - 65281: jis0208<<14 | 0x02<<7 | 0x4A,
+ 65356 - 65281: jis0208<<14 | 0x02<<7 | 0x4B,
+ 65357 - 65281: jis0208<<14 | 0x02<<7 | 0x4C,
+ 65358 - 65281: jis0208<<14 | 0x02<<7 | 0x4D,
+ 65359 - 65281: jis0208<<14 | 0x02<<7 | 0x4E,
+ 65360 - 65281: jis0208<<14 | 0x02<<7 | 0x4F,
+ 65361 - 65281: jis0208<<14 | 0x02<<7 | 0x50,
+ 65362 - 65281: jis0208<<14 | 0x02<<7 | 0x51,
+ 65363 - 65281: jis0208<<14 | 0x02<<7 | 0x52,
+ 65364 - 65281: jis0208<<14 | 0x02<<7 | 0x53,
+ 65365 - 65281: jis0208<<14 | 0x02<<7 | 0x54,
+ 65366 - 65281: jis0208<<14 | 0x02<<7 | 0x55,
+ 65367 - 65281: jis0208<<14 | 0x02<<7 | 0x56,
+ 65368 - 65281: jis0208<<14 | 0x02<<7 | 0x57,
+ 65369 - 65281: jis0208<<14 | 0x02<<7 | 0x58,
+ 65370 - 65281: jis0208<<14 | 0x02<<7 | 0x59,
+ 65371 - 65281: jis0208<<14 | 0x00<<7 | 0x2F,
+ 65372 - 65281: jis0208<<14 | 0x00<<7 | 0x22,
+ 65373 - 65281: jis0208<<14 | 0x00<<7 | 0x30,
+ 65374 - 65281: jis0208<<14 | 0x00<<7 | 0x20,
+ 65504 - 65281: jis0208<<14 | 0x00<<7 | 0x50,
+ 65505 - 65281: jis0208<<14 | 0x00<<7 | 0x51,
+ 65506 - 65281: jis0208<<14 | 0x01<<7 | 0x2B,
+ 65507 - 65281: jis0208<<14 | 0x00<<7 | 0x10,
+ 65508 - 65281: jis0208<<14 | 0x5B<<7 | 0x5B,
+ 65509 - 65281: jis0208<<14 | 0x00<<7 | 0x4E,
+}
diff --git a/vendor/golang.org/x/text/encoding/korean/euckr.go b/vendor/golang.org/x/text/encoding/korean/euckr.go
new file mode 100644
index 000000000..034337f5d
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/korean/euckr.go
@@ -0,0 +1,177 @@
+// 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 korean
+
+import (
+ "unicode/utf8"
+
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/internal"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/transform"
+)
+
+// All is a list of all defined encodings in this package.
+var All = []encoding.Encoding{EUCKR}
+
+// EUCKR is the EUC-KR encoding, also known as Code Page 949.
+var EUCKR encoding.Encoding = &eucKR
+
+var eucKR = internal.Encoding{
+ &internal.SimpleEncoding{eucKRDecoder{}, eucKREncoder{}},
+ "EUC-KR",
+ identifier.EUCKR,
+}
+
+type eucKRDecoder struct{ transform.NopResetter }
+
+func (eucKRDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+loop:
+ for ; nSrc < len(src); nSrc += size {
+ switch c0 := src[nSrc]; {
+ case c0 < utf8.RuneSelf:
+ r, size = rune(c0), 1
+
+ case 0x81 <= c0 && c0 < 0xff:
+ if nSrc+1 >= len(src) {
+ if !atEOF {
+ err = transform.ErrShortSrc
+ break loop
+ }
+ r, size = utf8.RuneError, 1
+ break
+ }
+ c1 := src[nSrc+1]
+ size = 2
+ if c0 < 0xc7 {
+ r = 178 * rune(c0-0x81)
+ switch {
+ case 0x41 <= c1 && c1 < 0x5b:
+ r += rune(c1) - (0x41 - 0*26)
+ case 0x61 <= c1 && c1 < 0x7b:
+ r += rune(c1) - (0x61 - 1*26)
+ case 0x81 <= c1 && c1 < 0xff:
+ r += rune(c1) - (0x81 - 2*26)
+ default:
+ goto decError
+ }
+ } else if 0xa1 <= c1 && c1 < 0xff {
+ r = 178*(0xc7-0x81) + rune(c0-0xc7)*94 + rune(c1-0xa1)
+ } else {
+ goto decError
+ }
+ if int(r) < len(decode) {
+ r = rune(decode[r])
+ if r != 0 {
+ break
+ }
+ }
+ decError:
+ r = utf8.RuneError
+ if c1 < utf8.RuneSelf {
+ size = 1
+ }
+
+ default:
+ r, size = utf8.RuneError, 1
+ break
+ }
+
+ if nDst+utf8.RuneLen(r) > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ nDst += utf8.EncodeRune(dst[nDst:], r)
+ }
+ return nDst, nSrc, err
+}
+
+type eucKREncoder struct{ transform.NopResetter }
+
+func (eucKREncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+ for ; nSrc < len(src); nSrc += size {
+ r = rune(src[nSrc])
+
+ // Decode a 1-byte rune.
+ if r < utf8.RuneSelf {
+ size = 1
+
+ if nDst >= len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst] = uint8(r)
+ nDst++
+ continue
+
+ } else {
+ // Decode a multi-byte rune.
+ r, size = utf8.DecodeRune(src[nSrc:])
+ if size == 1 {
+ // All valid runes of size 1 (those below utf8.RuneSelf) were
+ // handled above. We have invalid UTF-8 or we haven't seen the
+ // full character yet.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+ }
+
+ // func init checks that the switch covers all tables.
+ switch {
+ case encode0Low <= r && r < encode0High:
+ if r = rune(encode0[r-encode0Low]); r != 0 {
+ goto write2
+ }
+ case encode1Low <= r && r < encode1High:
+ if r = rune(encode1[r-encode1Low]); r != 0 {
+ goto write2
+ }
+ case encode2Low <= r && r < encode2High:
+ if r = rune(encode2[r-encode2Low]); r != 0 {
+ goto write2
+ }
+ case encode3Low <= r && r < encode3High:
+ if r = rune(encode3[r-encode3Low]); r != 0 {
+ goto write2
+ }
+ case encode4Low <= r && r < encode4High:
+ if r = rune(encode4[r-encode4Low]); r != 0 {
+ goto write2
+ }
+ case encode5Low <= r && r < encode5High:
+ if r = rune(encode5[r-encode5Low]); r != 0 {
+ goto write2
+ }
+ case encode6Low <= r && r < encode6High:
+ if r = rune(encode6[r-encode6Low]); r != 0 {
+ goto write2
+ }
+ }
+ err = internal.ErrASCIIReplacement
+ break
+ }
+
+ write2:
+ if nDst+2 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+0] = uint8(r >> 8)
+ dst[nDst+1] = uint8(r)
+ nDst += 2
+ continue
+ }
+ return nDst, nSrc, err
+}
+
+func init() {
+ // Check that the hard-coded encode switch covers all tables.
+ if numEncodeTables != 7 {
+ panic("bad numEncodeTables")
+ }
+}
diff --git a/vendor/golang.org/x/text/encoding/korean/tables.go b/vendor/golang.org/x/text/encoding/korean/tables.go
new file mode 100644
index 000000000..0480e85c4
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/korean/tables.go
@@ -0,0 +1,34152 @@
+// generated by go run maketables.go; DO NOT EDIT
+
+// Package korean provides Korean encodings such as EUC-KR.
+package korean // import "golang.org/x/text/encoding/korean"
+
+// decode is the decoding table from EUC-KR code to Unicode.
+// It is defined at http://encoding.spec.whatwg.org/index-euc-kr.txt
+var decode = [...]uint16{
+ 0: 0xAC02,
+ 1: 0xAC03,
+ 2: 0xAC05,
+ 3: 0xAC06,
+ 4: 0xAC0B,
+ 5: 0xAC0C,
+ 6: 0xAC0D,
+ 7: 0xAC0E,
+ 8: 0xAC0F,
+ 9: 0xAC18,
+ 10: 0xAC1E,
+ 11: 0xAC1F,
+ 12: 0xAC21,
+ 13: 0xAC22,
+ 14: 0xAC23,
+ 15: 0xAC25,
+ 16: 0xAC26,
+ 17: 0xAC27,
+ 18: 0xAC28,
+ 19: 0xAC29,
+ 20: 0xAC2A,
+ 21: 0xAC2B,
+ 22: 0xAC2E,
+ 23: 0xAC32,
+ 24: 0xAC33,
+ 25: 0xAC34,
+ 26: 0xAC35,
+ 27: 0xAC36,
+ 28: 0xAC37,
+ 29: 0xAC3A,
+ 30: 0xAC3B,
+ 31: 0xAC3D,
+ 32: 0xAC3E,
+ 33: 0xAC3F,
+ 34: 0xAC41,
+ 35: 0xAC42,
+ 36: 0xAC43,
+ 37: 0xAC44,
+ 38: 0xAC45,
+ 39: 0xAC46,
+ 40: 0xAC47,
+ 41: 0xAC48,
+ 42: 0xAC49,
+ 43: 0xAC4A,
+ 44: 0xAC4C,
+ 45: 0xAC4E,
+ 46: 0xAC4F,
+ 47: 0xAC50,
+ 48: 0xAC51,
+ 49: 0xAC52,
+ 50: 0xAC53,
+ 51: 0xAC55,
+ 52: 0xAC56,
+ 53: 0xAC57,
+ 54: 0xAC59,
+ 55: 0xAC5A,
+ 56: 0xAC5B,
+ 57: 0xAC5D,
+ 58: 0xAC5E,
+ 59: 0xAC5F,
+ 60: 0xAC60,
+ 61: 0xAC61,
+ 62: 0xAC62,
+ 63: 0xAC63,
+ 64: 0xAC64,
+ 65: 0xAC65,
+ 66: 0xAC66,
+ 67: 0xAC67,
+ 68: 0xAC68,
+ 69: 0xAC69,
+ 70: 0xAC6A,
+ 71: 0xAC6B,
+ 72: 0xAC6C,
+ 73: 0xAC6D,
+ 74: 0xAC6E,
+ 75: 0xAC6F,
+ 76: 0xAC72,
+ 77: 0xAC73,
+ 78: 0xAC75,
+ 79: 0xAC76,
+ 80: 0xAC79,
+ 81: 0xAC7B,
+ 82: 0xAC7C,
+ 83: 0xAC7D,
+ 84: 0xAC7E,
+ 85: 0xAC7F,
+ 86: 0xAC82,
+ 87: 0xAC87,
+ 88: 0xAC88,
+ 89: 0xAC8D,
+ 90: 0xAC8E,
+ 91: 0xAC8F,
+ 92: 0xAC91,
+ 93: 0xAC92,
+ 94: 0xAC93,
+ 95: 0xAC95,
+ 96: 0xAC96,
+ 97: 0xAC97,
+ 98: 0xAC98,
+ 99: 0xAC99,
+ 100: 0xAC9A,
+ 101: 0xAC9B,
+ 102: 0xAC9E,
+ 103: 0xACA2,
+ 104: 0xACA3,
+ 105: 0xACA4,
+ 106: 0xACA5,
+ 107: 0xACA6,
+ 108: 0xACA7,
+ 109: 0xACAB,
+ 110: 0xACAD,
+ 111: 0xACAE,
+ 112: 0xACB1,
+ 113: 0xACB2,
+ 114: 0xACB3,
+ 115: 0xACB4,
+ 116: 0xACB5,
+ 117: 0xACB6,
+ 118: 0xACB7,
+ 119: 0xACBA,
+ 120: 0xACBE,
+ 121: 0xACBF,
+ 122: 0xACC0,
+ 123: 0xACC2,
+ 124: 0xACC3,
+ 125: 0xACC5,
+ 126: 0xACC6,
+ 127: 0xACC7,
+ 128: 0xACC9,
+ 129: 0xACCA,
+ 130: 0xACCB,
+ 131: 0xACCD,
+ 132: 0xACCE,
+ 133: 0xACCF,
+ 134: 0xACD0,
+ 135: 0xACD1,
+ 136: 0xACD2,
+ 137: 0xACD3,
+ 138: 0xACD4,
+ 139: 0xACD6,
+ 140: 0xACD8,
+ 141: 0xACD9,
+ 142: 0xACDA,
+ 143: 0xACDB,
+ 144: 0xACDC,
+ 145: 0xACDD,
+ 146: 0xACDE,
+ 147: 0xACDF,
+ 148: 0xACE2,
+ 149: 0xACE3,
+ 150: 0xACE5,
+ 151: 0xACE6,
+ 152: 0xACE9,
+ 153: 0xACEB,
+ 154: 0xACED,
+ 155: 0xACEE,
+ 156: 0xACF2,
+ 157: 0xACF4,
+ 158: 0xACF7,
+ 159: 0xACF8,
+ 160: 0xACF9,
+ 161: 0xACFA,
+ 162: 0xACFB,
+ 163: 0xACFE,
+ 164: 0xACFF,
+ 165: 0xAD01,
+ 166: 0xAD02,
+ 167: 0xAD03,
+ 168: 0xAD05,
+ 169: 0xAD07,
+ 170: 0xAD08,
+ 171: 0xAD09,
+ 172: 0xAD0A,
+ 173: 0xAD0B,
+ 174: 0xAD0E,
+ 175: 0xAD10,
+ 176: 0xAD12,
+ 177: 0xAD13,
+ 178: 0xAD14,
+ 179: 0xAD15,
+ 180: 0xAD16,
+ 181: 0xAD17,
+ 182: 0xAD19,
+ 183: 0xAD1A,
+ 184: 0xAD1B,
+ 185: 0xAD1D,
+ 186: 0xAD1E,
+ 187: 0xAD1F,
+ 188: 0xAD21,
+ 189: 0xAD22,
+ 190: 0xAD23,
+ 191: 0xAD24,
+ 192: 0xAD25,
+ 193: 0xAD26,
+ 194: 0xAD27,
+ 195: 0xAD28,
+ 196: 0xAD2A,
+ 197: 0xAD2B,
+ 198: 0xAD2E,
+ 199: 0xAD2F,
+ 200: 0xAD30,
+ 201: 0xAD31,
+ 202: 0xAD32,
+ 203: 0xAD33,
+ 204: 0xAD36,
+ 205: 0xAD37,
+ 206: 0xAD39,
+ 207: 0xAD3A,
+ 208: 0xAD3B,
+ 209: 0xAD3D,
+ 210: 0xAD3E,
+ 211: 0xAD3F,
+ 212: 0xAD40,
+ 213: 0xAD41,
+ 214: 0xAD42,
+ 215: 0xAD43,
+ 216: 0xAD46,
+ 217: 0xAD48,
+ 218: 0xAD4A,
+ 219: 0xAD4B,
+ 220: 0xAD4C,
+ 221: 0xAD4D,
+ 222: 0xAD4E,
+ 223: 0xAD4F,
+ 224: 0xAD51,
+ 225: 0xAD52,
+ 226: 0xAD53,
+ 227: 0xAD55,
+ 228: 0xAD56,
+ 229: 0xAD57,
+ 230: 0xAD59,
+ 231: 0xAD5A,
+ 232: 0xAD5B,
+ 233: 0xAD5C,
+ 234: 0xAD5D,
+ 235: 0xAD5E,
+ 236: 0xAD5F,
+ 237: 0xAD60,
+ 238: 0xAD62,
+ 239: 0xAD64,
+ 240: 0xAD65,
+ 241: 0xAD66,
+ 242: 0xAD67,
+ 243: 0xAD68,
+ 244: 0xAD69,
+ 245: 0xAD6A,
+ 246: 0xAD6B,
+ 247: 0xAD6E,
+ 248: 0xAD6F,
+ 249: 0xAD71,
+ 250: 0xAD72,
+ 251: 0xAD77,
+ 252: 0xAD78,
+ 253: 0xAD79,
+ 254: 0xAD7A,
+ 255: 0xAD7E,
+ 256: 0xAD80,
+ 257: 0xAD83,
+ 258: 0xAD84,
+ 259: 0xAD85,
+ 260: 0xAD86,
+ 261: 0xAD87,
+ 262: 0xAD8A,
+ 263: 0xAD8B,
+ 264: 0xAD8D,
+ 265: 0xAD8E,
+ 266: 0xAD8F,
+ 267: 0xAD91,
+ 268: 0xAD92,
+ 269: 0xAD93,
+ 270: 0xAD94,
+ 271: 0xAD95,
+ 272: 0xAD96,
+ 273: 0xAD97,
+ 274: 0xAD98,
+ 275: 0xAD99,
+ 276: 0xAD9A,
+ 277: 0xAD9B,
+ 278: 0xAD9E,
+ 279: 0xAD9F,
+ 280: 0xADA0,
+ 281: 0xADA1,
+ 282: 0xADA2,
+ 283: 0xADA3,
+ 284: 0xADA5,
+ 285: 0xADA6,
+ 286: 0xADA7,
+ 287: 0xADA8,
+ 288: 0xADA9,
+ 289: 0xADAA,
+ 290: 0xADAB,
+ 291: 0xADAC,
+ 292: 0xADAD,
+ 293: 0xADAE,
+ 294: 0xADAF,
+ 295: 0xADB0,
+ 296: 0xADB1,
+ 297: 0xADB2,
+ 298: 0xADB3,
+ 299: 0xADB4,
+ 300: 0xADB5,
+ 301: 0xADB6,
+ 302: 0xADB8,
+ 303: 0xADB9,
+ 304: 0xADBA,
+ 305: 0xADBB,
+ 306: 0xADBC,
+ 307: 0xADBD,
+ 308: 0xADBE,
+ 309: 0xADBF,
+ 310: 0xADC2,
+ 311: 0xADC3,
+ 312: 0xADC5,
+ 313: 0xADC6,
+ 314: 0xADC7,
+ 315: 0xADC9,
+ 316: 0xADCA,
+ 317: 0xADCB,
+ 318: 0xADCC,
+ 319: 0xADCD,
+ 320: 0xADCE,
+ 321: 0xADCF,
+ 322: 0xADD2,
+ 323: 0xADD4,
+ 324: 0xADD5,
+ 325: 0xADD6,
+ 326: 0xADD7,
+ 327: 0xADD8,
+ 328: 0xADD9,
+ 329: 0xADDA,
+ 330: 0xADDB,
+ 331: 0xADDD,
+ 332: 0xADDE,
+ 333: 0xADDF,
+ 334: 0xADE1,
+ 335: 0xADE2,
+ 336: 0xADE3,
+ 337: 0xADE5,
+ 338: 0xADE6,
+ 339: 0xADE7,
+ 340: 0xADE8,
+ 341: 0xADE9,
+ 342: 0xADEA,
+ 343: 0xADEB,
+ 344: 0xADEC,
+ 345: 0xADED,
+ 346: 0xADEE,
+ 347: 0xADEF,
+ 348: 0xADF0,
+ 349: 0xADF1,
+ 350: 0xADF2,
+ 351: 0xADF3,
+ 352: 0xADF4,
+ 353: 0xADF5,
+ 354: 0xADF6,
+ 355: 0xADF7,
+ 356: 0xADFA,
+ 357: 0xADFB,
+ 358: 0xADFD,
+ 359: 0xADFE,
+ 360: 0xAE02,
+ 361: 0xAE03,
+ 362: 0xAE04,
+ 363: 0xAE05,
+ 364: 0xAE06,
+ 365: 0xAE07,
+ 366: 0xAE0A,
+ 367: 0xAE0C,
+ 368: 0xAE0E,
+ 369: 0xAE0F,
+ 370: 0xAE10,
+ 371: 0xAE11,
+ 372: 0xAE12,
+ 373: 0xAE13,
+ 374: 0xAE15,
+ 375: 0xAE16,
+ 376: 0xAE17,
+ 377: 0xAE18,
+ 378: 0xAE19,
+ 379: 0xAE1A,
+ 380: 0xAE1B,
+ 381: 0xAE1C,
+ 382: 0xAE1D,
+ 383: 0xAE1E,
+ 384: 0xAE1F,
+ 385: 0xAE20,
+ 386: 0xAE21,
+ 387: 0xAE22,
+ 388: 0xAE23,
+ 389: 0xAE24,
+ 390: 0xAE25,
+ 391: 0xAE26,
+ 392: 0xAE27,
+ 393: 0xAE28,
+ 394: 0xAE29,
+ 395: 0xAE2A,
+ 396: 0xAE2B,
+ 397: 0xAE2C,
+ 398: 0xAE2D,
+ 399: 0xAE2E,
+ 400: 0xAE2F,
+ 401: 0xAE32,
+ 402: 0xAE33,
+ 403: 0xAE35,
+ 404: 0xAE36,
+ 405: 0xAE39,
+ 406: 0xAE3B,
+ 407: 0xAE3C,
+ 408: 0xAE3D,
+ 409: 0xAE3E,
+ 410: 0xAE3F,
+ 411: 0xAE42,
+ 412: 0xAE44,
+ 413: 0xAE47,
+ 414: 0xAE48,
+ 415: 0xAE49,
+ 416: 0xAE4B,
+ 417: 0xAE4F,
+ 418: 0xAE51,
+ 419: 0xAE52,
+ 420: 0xAE53,
+ 421: 0xAE55,
+ 422: 0xAE57,
+ 423: 0xAE58,
+ 424: 0xAE59,
+ 425: 0xAE5A,
+ 426: 0xAE5B,
+ 427: 0xAE5E,
+ 428: 0xAE62,
+ 429: 0xAE63,
+ 430: 0xAE64,
+ 431: 0xAE66,
+ 432: 0xAE67,
+ 433: 0xAE6A,
+ 434: 0xAE6B,
+ 435: 0xAE6D,
+ 436: 0xAE6E,
+ 437: 0xAE6F,
+ 438: 0xAE71,
+ 439: 0xAE72,
+ 440: 0xAE73,
+ 441: 0xAE74,
+ 442: 0xAE75,
+ 443: 0xAE76,
+ 444: 0xAE77,
+ 445: 0xAE7A,
+ 446: 0xAE7E,
+ 447: 0xAE7F,
+ 448: 0xAE80,
+ 449: 0xAE81,
+ 450: 0xAE82,
+ 451: 0xAE83,
+ 452: 0xAE86,
+ 453: 0xAE87,
+ 454: 0xAE88,
+ 455: 0xAE89,
+ 456: 0xAE8A,
+ 457: 0xAE8B,
+ 458: 0xAE8D,
+ 459: 0xAE8E,
+ 460: 0xAE8F,
+ 461: 0xAE90,
+ 462: 0xAE91,
+ 463: 0xAE92,
+ 464: 0xAE93,
+ 465: 0xAE94,
+ 466: 0xAE95,
+ 467: 0xAE96,
+ 468: 0xAE97,
+ 469: 0xAE98,
+ 470: 0xAE99,
+ 471: 0xAE9A,
+ 472: 0xAE9B,
+ 473: 0xAE9C,
+ 474: 0xAE9D,
+ 475: 0xAE9E,
+ 476: 0xAE9F,
+ 477: 0xAEA0,
+ 478: 0xAEA1,
+ 479: 0xAEA2,
+ 480: 0xAEA3,
+ 481: 0xAEA4,
+ 482: 0xAEA5,
+ 483: 0xAEA6,
+ 484: 0xAEA7,
+ 485: 0xAEA8,
+ 486: 0xAEA9,
+ 487: 0xAEAA,
+ 488: 0xAEAB,
+ 489: 0xAEAC,
+ 490: 0xAEAD,
+ 491: 0xAEAE,
+ 492: 0xAEAF,
+ 493: 0xAEB0,
+ 494: 0xAEB1,
+ 495: 0xAEB2,
+ 496: 0xAEB3,
+ 497: 0xAEB4,
+ 498: 0xAEB5,
+ 499: 0xAEB6,
+ 500: 0xAEB7,
+ 501: 0xAEB8,
+ 502: 0xAEB9,
+ 503: 0xAEBA,
+ 504: 0xAEBB,
+ 505: 0xAEBF,
+ 506: 0xAEC1,
+ 507: 0xAEC2,
+ 508: 0xAEC3,
+ 509: 0xAEC5,
+ 510: 0xAEC6,
+ 511: 0xAEC7,
+ 512: 0xAEC8,
+ 513: 0xAEC9,
+ 514: 0xAECA,
+ 515: 0xAECB,
+ 516: 0xAECE,
+ 517: 0xAED2,
+ 518: 0xAED3,
+ 519: 0xAED4,
+ 520: 0xAED5,
+ 521: 0xAED6,
+ 522: 0xAED7,
+ 523: 0xAEDA,
+ 524: 0xAEDB,
+ 525: 0xAEDD,
+ 526: 0xAEDE,
+ 527: 0xAEDF,
+ 528: 0xAEE0,
+ 529: 0xAEE1,
+ 530: 0xAEE2,
+ 531: 0xAEE3,
+ 532: 0xAEE4,
+ 533: 0xAEE5,
+ 534: 0xAEE6,
+ 535: 0xAEE7,
+ 536: 0xAEE9,
+ 537: 0xAEEA,
+ 538: 0xAEEC,
+ 539: 0xAEEE,
+ 540: 0xAEEF,
+ 541: 0xAEF0,
+ 542: 0xAEF1,
+ 543: 0xAEF2,
+ 544: 0xAEF3,
+ 545: 0xAEF5,
+ 546: 0xAEF6,
+ 547: 0xAEF7,
+ 548: 0xAEF9,
+ 549: 0xAEFA,
+ 550: 0xAEFB,
+ 551: 0xAEFD,
+ 552: 0xAEFE,
+ 553: 0xAEFF,
+ 554: 0xAF00,
+ 555: 0xAF01,
+ 556: 0xAF02,
+ 557: 0xAF03,
+ 558: 0xAF04,
+ 559: 0xAF05,
+ 560: 0xAF06,
+ 561: 0xAF09,
+ 562: 0xAF0A,
+ 563: 0xAF0B,
+ 564: 0xAF0C,
+ 565: 0xAF0E,
+ 566: 0xAF0F,
+ 567: 0xAF11,
+ 568: 0xAF12,
+ 569: 0xAF13,
+ 570: 0xAF14,
+ 571: 0xAF15,
+ 572: 0xAF16,
+ 573: 0xAF17,
+ 574: 0xAF18,
+ 575: 0xAF19,
+ 576: 0xAF1A,
+ 577: 0xAF1B,
+ 578: 0xAF1C,
+ 579: 0xAF1D,
+ 580: 0xAF1E,
+ 581: 0xAF1F,
+ 582: 0xAF20,
+ 583: 0xAF21,
+ 584: 0xAF22,
+ 585: 0xAF23,
+ 586: 0xAF24,
+ 587: 0xAF25,
+ 588: 0xAF26,
+ 589: 0xAF27,
+ 590: 0xAF28,
+ 591: 0xAF29,
+ 592: 0xAF2A,
+ 593: 0xAF2B,
+ 594: 0xAF2E,
+ 595: 0xAF2F,
+ 596: 0xAF31,
+ 597: 0xAF33,
+ 598: 0xAF35,
+ 599: 0xAF36,
+ 600: 0xAF37,
+ 601: 0xAF38,
+ 602: 0xAF39,
+ 603: 0xAF3A,
+ 604: 0xAF3B,
+ 605: 0xAF3E,
+ 606: 0xAF40,
+ 607: 0xAF44,
+ 608: 0xAF45,
+ 609: 0xAF46,
+ 610: 0xAF47,
+ 611: 0xAF4A,
+ 612: 0xAF4B,
+ 613: 0xAF4C,
+ 614: 0xAF4D,
+ 615: 0xAF4E,
+ 616: 0xAF4F,
+ 617: 0xAF51,
+ 618: 0xAF52,
+ 619: 0xAF53,
+ 620: 0xAF54,
+ 621: 0xAF55,
+ 622: 0xAF56,
+ 623: 0xAF57,
+ 624: 0xAF58,
+ 625: 0xAF59,
+ 626: 0xAF5A,
+ 627: 0xAF5B,
+ 628: 0xAF5E,
+ 629: 0xAF5F,
+ 630: 0xAF60,
+ 631: 0xAF61,
+ 632: 0xAF62,
+ 633: 0xAF63,
+ 634: 0xAF66,
+ 635: 0xAF67,
+ 636: 0xAF68,
+ 637: 0xAF69,
+ 638: 0xAF6A,
+ 639: 0xAF6B,
+ 640: 0xAF6C,
+ 641: 0xAF6D,
+ 642: 0xAF6E,
+ 643: 0xAF6F,
+ 644: 0xAF70,
+ 645: 0xAF71,
+ 646: 0xAF72,
+ 647: 0xAF73,
+ 648: 0xAF74,
+ 649: 0xAF75,
+ 650: 0xAF76,
+ 651: 0xAF77,
+ 652: 0xAF78,
+ 653: 0xAF7A,
+ 654: 0xAF7B,
+ 655: 0xAF7C,
+ 656: 0xAF7D,
+ 657: 0xAF7E,
+ 658: 0xAF7F,
+ 659: 0xAF81,
+ 660: 0xAF82,
+ 661: 0xAF83,
+ 662: 0xAF85,
+ 663: 0xAF86,
+ 664: 0xAF87,
+ 665: 0xAF89,
+ 666: 0xAF8A,
+ 667: 0xAF8B,
+ 668: 0xAF8C,
+ 669: 0xAF8D,
+ 670: 0xAF8E,
+ 671: 0xAF8F,
+ 672: 0xAF92,
+ 673: 0xAF93,
+ 674: 0xAF94,
+ 675: 0xAF96,
+ 676: 0xAF97,
+ 677: 0xAF98,
+ 678: 0xAF99,
+ 679: 0xAF9A,
+ 680: 0xAF9B,
+ 681: 0xAF9D,
+ 682: 0xAF9E,
+ 683: 0xAF9F,
+ 684: 0xAFA0,
+ 685: 0xAFA1,
+ 686: 0xAFA2,
+ 687: 0xAFA3,
+ 688: 0xAFA4,
+ 689: 0xAFA5,
+ 690: 0xAFA6,
+ 691: 0xAFA7,
+ 692: 0xAFA8,
+ 693: 0xAFA9,
+ 694: 0xAFAA,
+ 695: 0xAFAB,
+ 696: 0xAFAC,
+ 697: 0xAFAD,
+ 698: 0xAFAE,
+ 699: 0xAFAF,
+ 700: 0xAFB0,
+ 701: 0xAFB1,
+ 702: 0xAFB2,
+ 703: 0xAFB3,
+ 704: 0xAFB4,
+ 705: 0xAFB5,
+ 706: 0xAFB6,
+ 707: 0xAFB7,
+ 708: 0xAFBA,
+ 709: 0xAFBB,
+ 710: 0xAFBD,
+ 711: 0xAFBE,
+ 712: 0xAFBF,
+ 713: 0xAFC1,
+ 714: 0xAFC2,
+ 715: 0xAFC3,
+ 716: 0xAFC4,
+ 717: 0xAFC5,
+ 718: 0xAFC6,
+ 719: 0xAFCA,
+ 720: 0xAFCC,
+ 721: 0xAFCF,
+ 722: 0xAFD0,
+ 723: 0xAFD1,
+ 724: 0xAFD2,
+ 725: 0xAFD3,
+ 726: 0xAFD5,
+ 727: 0xAFD6,
+ 728: 0xAFD7,
+ 729: 0xAFD8,
+ 730: 0xAFD9,
+ 731: 0xAFDA,
+ 732: 0xAFDB,
+ 733: 0xAFDD,
+ 734: 0xAFDE,
+ 735: 0xAFDF,
+ 736: 0xAFE0,
+ 737: 0xAFE1,
+ 738: 0xAFE2,
+ 739: 0xAFE3,
+ 740: 0xAFE4,
+ 741: 0xAFE5,
+ 742: 0xAFE6,
+ 743: 0xAFE7,
+ 744: 0xAFEA,
+ 745: 0xAFEB,
+ 746: 0xAFEC,
+ 747: 0xAFED,
+ 748: 0xAFEE,
+ 749: 0xAFEF,
+ 750: 0xAFF2,
+ 751: 0xAFF3,
+ 752: 0xAFF5,
+ 753: 0xAFF6,
+ 754: 0xAFF7,
+ 755: 0xAFF9,
+ 756: 0xAFFA,
+ 757: 0xAFFB,
+ 758: 0xAFFC,
+ 759: 0xAFFD,
+ 760: 0xAFFE,
+ 761: 0xAFFF,
+ 762: 0xB002,
+ 763: 0xB003,
+ 764: 0xB005,
+ 765: 0xB006,
+ 766: 0xB007,
+ 767: 0xB008,
+ 768: 0xB009,
+ 769: 0xB00A,
+ 770: 0xB00B,
+ 771: 0xB00D,
+ 772: 0xB00E,
+ 773: 0xB00F,
+ 774: 0xB011,
+ 775: 0xB012,
+ 776: 0xB013,
+ 777: 0xB015,
+ 778: 0xB016,
+ 779: 0xB017,
+ 780: 0xB018,
+ 781: 0xB019,
+ 782: 0xB01A,
+ 783: 0xB01B,
+ 784: 0xB01E,
+ 785: 0xB01F,
+ 786: 0xB020,
+ 787: 0xB021,
+ 788: 0xB022,
+ 789: 0xB023,
+ 790: 0xB024,
+ 791: 0xB025,
+ 792: 0xB026,
+ 793: 0xB027,
+ 794: 0xB029,
+ 795: 0xB02A,
+ 796: 0xB02B,
+ 797: 0xB02C,
+ 798: 0xB02D,
+ 799: 0xB02E,
+ 800: 0xB02F,
+ 801: 0xB030,
+ 802: 0xB031,
+ 803: 0xB032,
+ 804: 0xB033,
+ 805: 0xB034,
+ 806: 0xB035,
+ 807: 0xB036,
+ 808: 0xB037,
+ 809: 0xB038,
+ 810: 0xB039,
+ 811: 0xB03A,
+ 812: 0xB03B,
+ 813: 0xB03C,
+ 814: 0xB03D,
+ 815: 0xB03E,
+ 816: 0xB03F,
+ 817: 0xB040,
+ 818: 0xB041,
+ 819: 0xB042,
+ 820: 0xB043,
+ 821: 0xB046,
+ 822: 0xB047,
+ 823: 0xB049,
+ 824: 0xB04B,
+ 825: 0xB04D,
+ 826: 0xB04F,
+ 827: 0xB050,
+ 828: 0xB051,
+ 829: 0xB052,
+ 830: 0xB056,
+ 831: 0xB058,
+ 832: 0xB05A,
+ 833: 0xB05B,
+ 834: 0xB05C,
+ 835: 0xB05E,
+ 836: 0xB05F,
+ 837: 0xB060,
+ 838: 0xB061,
+ 839: 0xB062,
+ 840: 0xB063,
+ 841: 0xB064,
+ 842: 0xB065,
+ 843: 0xB066,
+ 844: 0xB067,
+ 845: 0xB068,
+ 846: 0xB069,
+ 847: 0xB06A,
+ 848: 0xB06B,
+ 849: 0xB06C,
+ 850: 0xB06D,
+ 851: 0xB06E,
+ 852: 0xB06F,
+ 853: 0xB070,
+ 854: 0xB071,
+ 855: 0xB072,
+ 856: 0xB073,
+ 857: 0xB074,
+ 858: 0xB075,
+ 859: 0xB076,
+ 860: 0xB077,
+ 861: 0xB078,
+ 862: 0xB079,
+ 863: 0xB07A,
+ 864: 0xB07B,
+ 865: 0xB07E,
+ 866: 0xB07F,
+ 867: 0xB081,
+ 868: 0xB082,
+ 869: 0xB083,
+ 870: 0xB085,
+ 871: 0xB086,
+ 872: 0xB087,
+ 873: 0xB088,
+ 874: 0xB089,
+ 875: 0xB08A,
+ 876: 0xB08B,
+ 877: 0xB08E,
+ 878: 0xB090,
+ 879: 0xB092,
+ 880: 0xB093,
+ 881: 0xB094,
+ 882: 0xB095,
+ 883: 0xB096,
+ 884: 0xB097,
+ 885: 0xB09B,
+ 886: 0xB09D,
+ 887: 0xB09E,
+ 888: 0xB0A3,
+ 889: 0xB0A4,
+ 890: 0xB0A5,
+ 891: 0xB0A6,
+ 892: 0xB0A7,
+ 893: 0xB0AA,
+ 894: 0xB0B0,
+ 895: 0xB0B2,
+ 896: 0xB0B6,
+ 897: 0xB0B7,
+ 898: 0xB0B9,
+ 899: 0xB0BA,
+ 900: 0xB0BB,
+ 901: 0xB0BD,
+ 902: 0xB0BE,
+ 903: 0xB0BF,
+ 904: 0xB0C0,
+ 905: 0xB0C1,
+ 906: 0xB0C2,
+ 907: 0xB0C3,
+ 908: 0xB0C6,
+ 909: 0xB0CA,
+ 910: 0xB0CB,
+ 911: 0xB0CC,
+ 912: 0xB0CD,
+ 913: 0xB0CE,
+ 914: 0xB0CF,
+ 915: 0xB0D2,
+ 916: 0xB0D3,
+ 917: 0xB0D5,
+ 918: 0xB0D6,
+ 919: 0xB0D7,
+ 920: 0xB0D9,
+ 921: 0xB0DA,
+ 922: 0xB0DB,
+ 923: 0xB0DC,
+ 924: 0xB0DD,
+ 925: 0xB0DE,
+ 926: 0xB0DF,
+ 927: 0xB0E1,
+ 928: 0xB0E2,
+ 929: 0xB0E3,
+ 930: 0xB0E4,
+ 931: 0xB0E6,
+ 932: 0xB0E7,
+ 933: 0xB0E8,
+ 934: 0xB0E9,
+ 935: 0xB0EA,
+ 936: 0xB0EB,
+ 937: 0xB0EC,
+ 938: 0xB0ED,
+ 939: 0xB0EE,
+ 940: 0xB0EF,
+ 941: 0xB0F0,
+ 942: 0xB0F1,
+ 943: 0xB0F2,
+ 944: 0xB0F3,
+ 945: 0xB0F4,
+ 946: 0xB0F5,
+ 947: 0xB0F6,
+ 948: 0xB0F7,
+ 949: 0xB0F8,
+ 950: 0xB0F9,
+ 951: 0xB0FA,
+ 952: 0xB0FB,
+ 953: 0xB0FC,
+ 954: 0xB0FD,
+ 955: 0xB0FE,
+ 956: 0xB0FF,
+ 957: 0xB100,
+ 958: 0xB101,
+ 959: 0xB102,
+ 960: 0xB103,
+ 961: 0xB104,
+ 962: 0xB105,
+ 963: 0xB106,
+ 964: 0xB107,
+ 965: 0xB10A,
+ 966: 0xB10D,
+ 967: 0xB10E,
+ 968: 0xB10F,
+ 969: 0xB111,
+ 970: 0xB114,
+ 971: 0xB115,
+ 972: 0xB116,
+ 973: 0xB117,
+ 974: 0xB11A,
+ 975: 0xB11E,
+ 976: 0xB11F,
+ 977: 0xB120,
+ 978: 0xB121,
+ 979: 0xB122,
+ 980: 0xB126,
+ 981: 0xB127,
+ 982: 0xB129,
+ 983: 0xB12A,
+ 984: 0xB12B,
+ 985: 0xB12D,
+ 986: 0xB12E,
+ 987: 0xB12F,
+ 988: 0xB130,
+ 989: 0xB131,
+ 990: 0xB132,
+ 991: 0xB133,
+ 992: 0xB136,
+ 993: 0xB13A,
+ 994: 0xB13B,
+ 995: 0xB13C,
+ 996: 0xB13D,
+ 997: 0xB13E,
+ 998: 0xB13F,
+ 999: 0xB142,
+ 1000: 0xB143,
+ 1001: 0xB145,
+ 1002: 0xB146,
+ 1003: 0xB147,
+ 1004: 0xB149,
+ 1005: 0xB14A,
+ 1006: 0xB14B,
+ 1007: 0xB14C,
+ 1008: 0xB14D,
+ 1009: 0xB14E,
+ 1010: 0xB14F,
+ 1011: 0xB152,
+ 1012: 0xB153,
+ 1013: 0xB156,
+ 1014: 0xB157,
+ 1015: 0xB159,
+ 1016: 0xB15A,
+ 1017: 0xB15B,
+ 1018: 0xB15D,
+ 1019: 0xB15E,
+ 1020: 0xB15F,
+ 1021: 0xB161,
+ 1022: 0xB162,
+ 1023: 0xB163,
+ 1024: 0xB164,
+ 1025: 0xB165,
+ 1026: 0xB166,
+ 1027: 0xB167,
+ 1028: 0xB168,
+ 1029: 0xB169,
+ 1030: 0xB16A,
+ 1031: 0xB16B,
+ 1032: 0xB16C,
+ 1033: 0xB16D,
+ 1034: 0xB16E,
+ 1035: 0xB16F,
+ 1036: 0xB170,
+ 1037: 0xB171,
+ 1038: 0xB172,
+ 1039: 0xB173,
+ 1040: 0xB174,
+ 1041: 0xB175,
+ 1042: 0xB176,
+ 1043: 0xB177,
+ 1044: 0xB17A,
+ 1045: 0xB17B,
+ 1046: 0xB17D,
+ 1047: 0xB17E,
+ 1048: 0xB17F,
+ 1049: 0xB181,
+ 1050: 0xB183,
+ 1051: 0xB184,
+ 1052: 0xB185,
+ 1053: 0xB186,
+ 1054: 0xB187,
+ 1055: 0xB18A,
+ 1056: 0xB18C,
+ 1057: 0xB18E,
+ 1058: 0xB18F,
+ 1059: 0xB190,
+ 1060: 0xB191,
+ 1061: 0xB195,
+ 1062: 0xB196,
+ 1063: 0xB197,
+ 1064: 0xB199,
+ 1065: 0xB19A,
+ 1066: 0xB19B,
+ 1067: 0xB19D,
+ 1068: 0xB19E,
+ 1069: 0xB19F,
+ 1070: 0xB1A0,
+ 1071: 0xB1A1,
+ 1072: 0xB1A2,
+ 1073: 0xB1A3,
+ 1074: 0xB1A4,
+ 1075: 0xB1A5,
+ 1076: 0xB1A6,
+ 1077: 0xB1A7,
+ 1078: 0xB1A9,
+ 1079: 0xB1AA,
+ 1080: 0xB1AB,
+ 1081: 0xB1AC,
+ 1082: 0xB1AD,
+ 1083: 0xB1AE,
+ 1084: 0xB1AF,
+ 1085: 0xB1B0,
+ 1086: 0xB1B1,
+ 1087: 0xB1B2,
+ 1088: 0xB1B3,
+ 1089: 0xB1B4,
+ 1090: 0xB1B5,
+ 1091: 0xB1B6,
+ 1092: 0xB1B7,
+ 1093: 0xB1B8,
+ 1094: 0xB1B9,
+ 1095: 0xB1BA,
+ 1096: 0xB1BB,
+ 1097: 0xB1BC,
+ 1098: 0xB1BD,
+ 1099: 0xB1BE,
+ 1100: 0xB1BF,
+ 1101: 0xB1C0,
+ 1102: 0xB1C1,
+ 1103: 0xB1C2,
+ 1104: 0xB1C3,
+ 1105: 0xB1C4,
+ 1106: 0xB1C5,
+ 1107: 0xB1C6,
+ 1108: 0xB1C7,
+ 1109: 0xB1C8,
+ 1110: 0xB1C9,
+ 1111: 0xB1CA,
+ 1112: 0xB1CB,
+ 1113: 0xB1CD,
+ 1114: 0xB1CE,
+ 1115: 0xB1CF,
+ 1116: 0xB1D1,
+ 1117: 0xB1D2,
+ 1118: 0xB1D3,
+ 1119: 0xB1D5,
+ 1120: 0xB1D6,
+ 1121: 0xB1D7,
+ 1122: 0xB1D8,
+ 1123: 0xB1D9,
+ 1124: 0xB1DA,
+ 1125: 0xB1DB,
+ 1126: 0xB1DE,
+ 1127: 0xB1E0,
+ 1128: 0xB1E1,
+ 1129: 0xB1E2,
+ 1130: 0xB1E3,
+ 1131: 0xB1E4,
+ 1132: 0xB1E5,
+ 1133: 0xB1E6,
+ 1134: 0xB1E7,
+ 1135: 0xB1EA,
+ 1136: 0xB1EB,
+ 1137: 0xB1ED,
+ 1138: 0xB1EE,
+ 1139: 0xB1EF,
+ 1140: 0xB1F1,
+ 1141: 0xB1F2,
+ 1142: 0xB1F3,
+ 1143: 0xB1F4,
+ 1144: 0xB1F5,
+ 1145: 0xB1F6,
+ 1146: 0xB1F7,
+ 1147: 0xB1F8,
+ 1148: 0xB1FA,
+ 1149: 0xB1FC,
+ 1150: 0xB1FE,
+ 1151: 0xB1FF,
+ 1152: 0xB200,
+ 1153: 0xB201,
+ 1154: 0xB202,
+ 1155: 0xB203,
+ 1156: 0xB206,
+ 1157: 0xB207,
+ 1158: 0xB209,
+ 1159: 0xB20A,
+ 1160: 0xB20D,
+ 1161: 0xB20E,
+ 1162: 0xB20F,
+ 1163: 0xB210,
+ 1164: 0xB211,
+ 1165: 0xB212,
+ 1166: 0xB213,
+ 1167: 0xB216,
+ 1168: 0xB218,
+ 1169: 0xB21A,
+ 1170: 0xB21B,
+ 1171: 0xB21C,
+ 1172: 0xB21D,
+ 1173: 0xB21E,
+ 1174: 0xB21F,
+ 1175: 0xB221,
+ 1176: 0xB222,
+ 1177: 0xB223,
+ 1178: 0xB224,
+ 1179: 0xB225,
+ 1180: 0xB226,
+ 1181: 0xB227,
+ 1182: 0xB228,
+ 1183: 0xB229,
+ 1184: 0xB22A,
+ 1185: 0xB22B,
+ 1186: 0xB22C,
+ 1187: 0xB22D,
+ 1188: 0xB22E,
+ 1189: 0xB22F,
+ 1190: 0xB230,
+ 1191: 0xB231,
+ 1192: 0xB232,
+ 1193: 0xB233,
+ 1194: 0xB235,
+ 1195: 0xB236,
+ 1196: 0xB237,
+ 1197: 0xB238,
+ 1198: 0xB239,
+ 1199: 0xB23A,
+ 1200: 0xB23B,
+ 1201: 0xB23D,
+ 1202: 0xB23E,
+ 1203: 0xB23F,
+ 1204: 0xB240,
+ 1205: 0xB241,
+ 1206: 0xB242,
+ 1207: 0xB243,
+ 1208: 0xB244,
+ 1209: 0xB245,
+ 1210: 0xB246,
+ 1211: 0xB247,
+ 1212: 0xB248,
+ 1213: 0xB249,
+ 1214: 0xB24A,
+ 1215: 0xB24B,
+ 1216: 0xB24C,
+ 1217: 0xB24D,
+ 1218: 0xB24E,
+ 1219: 0xB24F,
+ 1220: 0xB250,
+ 1221: 0xB251,
+ 1222: 0xB252,
+ 1223: 0xB253,
+ 1224: 0xB254,
+ 1225: 0xB255,
+ 1226: 0xB256,
+ 1227: 0xB257,
+ 1228: 0xB259,
+ 1229: 0xB25A,
+ 1230: 0xB25B,
+ 1231: 0xB25D,
+ 1232: 0xB25E,
+ 1233: 0xB25F,
+ 1234: 0xB261,
+ 1235: 0xB262,
+ 1236: 0xB263,
+ 1237: 0xB264,
+ 1238: 0xB265,
+ 1239: 0xB266,
+ 1240: 0xB267,
+ 1241: 0xB26A,
+ 1242: 0xB26B,
+ 1243: 0xB26C,
+ 1244: 0xB26D,
+ 1245: 0xB26E,
+ 1246: 0xB26F,
+ 1247: 0xB270,
+ 1248: 0xB271,
+ 1249: 0xB272,
+ 1250: 0xB273,
+ 1251: 0xB276,
+ 1252: 0xB277,
+ 1253: 0xB278,
+ 1254: 0xB279,
+ 1255: 0xB27A,
+ 1256: 0xB27B,
+ 1257: 0xB27D,
+ 1258: 0xB27E,
+ 1259: 0xB27F,
+ 1260: 0xB280,
+ 1261: 0xB281,
+ 1262: 0xB282,
+ 1263: 0xB283,
+ 1264: 0xB286,
+ 1265: 0xB287,
+ 1266: 0xB288,
+ 1267: 0xB28A,
+ 1268: 0xB28B,
+ 1269: 0xB28C,
+ 1270: 0xB28D,
+ 1271: 0xB28E,
+ 1272: 0xB28F,
+ 1273: 0xB292,
+ 1274: 0xB293,
+ 1275: 0xB295,
+ 1276: 0xB296,
+ 1277: 0xB297,
+ 1278: 0xB29B,
+ 1279: 0xB29C,
+ 1280: 0xB29D,
+ 1281: 0xB29E,
+ 1282: 0xB29F,
+ 1283: 0xB2A2,
+ 1284: 0xB2A4,
+ 1285: 0xB2A7,
+ 1286: 0xB2A8,
+ 1287: 0xB2A9,
+ 1288: 0xB2AB,
+ 1289: 0xB2AD,
+ 1290: 0xB2AE,
+ 1291: 0xB2AF,
+ 1292: 0xB2B1,
+ 1293: 0xB2B2,
+ 1294: 0xB2B3,
+ 1295: 0xB2B5,
+ 1296: 0xB2B6,
+ 1297: 0xB2B7,
+ 1298: 0xB2B8,
+ 1299: 0xB2B9,
+ 1300: 0xB2BA,
+ 1301: 0xB2BB,
+ 1302: 0xB2BC,
+ 1303: 0xB2BD,
+ 1304: 0xB2BE,
+ 1305: 0xB2BF,
+ 1306: 0xB2C0,
+ 1307: 0xB2C1,
+ 1308: 0xB2C2,
+ 1309: 0xB2C3,
+ 1310: 0xB2C4,
+ 1311: 0xB2C5,
+ 1312: 0xB2C6,
+ 1313: 0xB2C7,
+ 1314: 0xB2CA,
+ 1315: 0xB2CB,
+ 1316: 0xB2CD,
+ 1317: 0xB2CE,
+ 1318: 0xB2CF,
+ 1319: 0xB2D1,
+ 1320: 0xB2D3,
+ 1321: 0xB2D4,
+ 1322: 0xB2D5,
+ 1323: 0xB2D6,
+ 1324: 0xB2D7,
+ 1325: 0xB2DA,
+ 1326: 0xB2DC,
+ 1327: 0xB2DE,
+ 1328: 0xB2DF,
+ 1329: 0xB2E0,
+ 1330: 0xB2E1,
+ 1331: 0xB2E3,
+ 1332: 0xB2E7,
+ 1333: 0xB2E9,
+ 1334: 0xB2EA,
+ 1335: 0xB2F0,
+ 1336: 0xB2F1,
+ 1337: 0xB2F2,
+ 1338: 0xB2F6,
+ 1339: 0xB2FC,
+ 1340: 0xB2FD,
+ 1341: 0xB2FE,
+ 1342: 0xB302,
+ 1343: 0xB303,
+ 1344: 0xB305,
+ 1345: 0xB306,
+ 1346: 0xB307,
+ 1347: 0xB309,
+ 1348: 0xB30A,
+ 1349: 0xB30B,
+ 1350: 0xB30C,
+ 1351: 0xB30D,
+ 1352: 0xB30E,
+ 1353: 0xB30F,
+ 1354: 0xB312,
+ 1355: 0xB316,
+ 1356: 0xB317,
+ 1357: 0xB318,
+ 1358: 0xB319,
+ 1359: 0xB31A,
+ 1360: 0xB31B,
+ 1361: 0xB31D,
+ 1362: 0xB31E,
+ 1363: 0xB31F,
+ 1364: 0xB320,
+ 1365: 0xB321,
+ 1366: 0xB322,
+ 1367: 0xB323,
+ 1368: 0xB324,
+ 1369: 0xB325,
+ 1370: 0xB326,
+ 1371: 0xB327,
+ 1372: 0xB328,
+ 1373: 0xB329,
+ 1374: 0xB32A,
+ 1375: 0xB32B,
+ 1376: 0xB32C,
+ 1377: 0xB32D,
+ 1378: 0xB32E,
+ 1379: 0xB32F,
+ 1380: 0xB330,
+ 1381: 0xB331,
+ 1382: 0xB332,
+ 1383: 0xB333,
+ 1384: 0xB334,
+ 1385: 0xB335,
+ 1386: 0xB336,
+ 1387: 0xB337,
+ 1388: 0xB338,
+ 1389: 0xB339,
+ 1390: 0xB33A,
+ 1391: 0xB33B,
+ 1392: 0xB33C,
+ 1393: 0xB33D,
+ 1394: 0xB33E,
+ 1395: 0xB33F,
+ 1396: 0xB340,
+ 1397: 0xB341,
+ 1398: 0xB342,
+ 1399: 0xB343,
+ 1400: 0xB344,
+ 1401: 0xB345,
+ 1402: 0xB346,
+ 1403: 0xB347,
+ 1404: 0xB348,
+ 1405: 0xB349,
+ 1406: 0xB34A,
+ 1407: 0xB34B,
+ 1408: 0xB34C,
+ 1409: 0xB34D,
+ 1410: 0xB34E,
+ 1411: 0xB34F,
+ 1412: 0xB350,
+ 1413: 0xB351,
+ 1414: 0xB352,
+ 1415: 0xB353,
+ 1416: 0xB357,
+ 1417: 0xB359,
+ 1418: 0xB35A,
+ 1419: 0xB35D,
+ 1420: 0xB360,
+ 1421: 0xB361,
+ 1422: 0xB362,
+ 1423: 0xB363,
+ 1424: 0xB366,
+ 1425: 0xB368,
+ 1426: 0xB36A,
+ 1427: 0xB36C,
+ 1428: 0xB36D,
+ 1429: 0xB36F,
+ 1430: 0xB372,
+ 1431: 0xB373,
+ 1432: 0xB375,
+ 1433: 0xB376,
+ 1434: 0xB377,
+ 1435: 0xB379,
+ 1436: 0xB37A,
+ 1437: 0xB37B,
+ 1438: 0xB37C,
+ 1439: 0xB37D,
+ 1440: 0xB37E,
+ 1441: 0xB37F,
+ 1442: 0xB382,
+ 1443: 0xB386,
+ 1444: 0xB387,
+ 1445: 0xB388,
+ 1446: 0xB389,
+ 1447: 0xB38A,
+ 1448: 0xB38B,
+ 1449: 0xB38D,
+ 1450: 0xB38E,
+ 1451: 0xB38F,
+ 1452: 0xB391,
+ 1453: 0xB392,
+ 1454: 0xB393,
+ 1455: 0xB395,
+ 1456: 0xB396,
+ 1457: 0xB397,
+ 1458: 0xB398,
+ 1459: 0xB399,
+ 1460: 0xB39A,
+ 1461: 0xB39B,
+ 1462: 0xB39C,
+ 1463: 0xB39D,
+ 1464: 0xB39E,
+ 1465: 0xB39F,
+ 1466: 0xB3A2,
+ 1467: 0xB3A3,
+ 1468: 0xB3A4,
+ 1469: 0xB3A5,
+ 1470: 0xB3A6,
+ 1471: 0xB3A7,
+ 1472: 0xB3A9,
+ 1473: 0xB3AA,
+ 1474: 0xB3AB,
+ 1475: 0xB3AD,
+ 1476: 0xB3AE,
+ 1477: 0xB3AF,
+ 1478: 0xB3B0,
+ 1479: 0xB3B1,
+ 1480: 0xB3B2,
+ 1481: 0xB3B3,
+ 1482: 0xB3B4,
+ 1483: 0xB3B5,
+ 1484: 0xB3B6,
+ 1485: 0xB3B7,
+ 1486: 0xB3B8,
+ 1487: 0xB3B9,
+ 1488: 0xB3BA,
+ 1489: 0xB3BB,
+ 1490: 0xB3BC,
+ 1491: 0xB3BD,
+ 1492: 0xB3BE,
+ 1493: 0xB3BF,
+ 1494: 0xB3C0,
+ 1495: 0xB3C1,
+ 1496: 0xB3C2,
+ 1497: 0xB3C3,
+ 1498: 0xB3C6,
+ 1499: 0xB3C7,
+ 1500: 0xB3C9,
+ 1501: 0xB3CA,
+ 1502: 0xB3CD,
+ 1503: 0xB3CF,
+ 1504: 0xB3D1,
+ 1505: 0xB3D2,
+ 1506: 0xB3D3,
+ 1507: 0xB3D6,
+ 1508: 0xB3D8,
+ 1509: 0xB3DA,
+ 1510: 0xB3DC,
+ 1511: 0xB3DE,
+ 1512: 0xB3DF,
+ 1513: 0xB3E1,
+ 1514: 0xB3E2,
+ 1515: 0xB3E3,
+ 1516: 0xB3E5,
+ 1517: 0xB3E6,
+ 1518: 0xB3E7,
+ 1519: 0xB3E9,
+ 1520: 0xB3EA,
+ 1521: 0xB3EB,
+ 1522: 0xB3EC,
+ 1523: 0xB3ED,
+ 1524: 0xB3EE,
+ 1525: 0xB3EF,
+ 1526: 0xB3F0,
+ 1527: 0xB3F1,
+ 1528: 0xB3F2,
+ 1529: 0xB3F3,
+ 1530: 0xB3F4,
+ 1531: 0xB3F5,
+ 1532: 0xB3F6,
+ 1533: 0xB3F7,
+ 1534: 0xB3F8,
+ 1535: 0xB3F9,
+ 1536: 0xB3FA,
+ 1537: 0xB3FB,
+ 1538: 0xB3FD,
+ 1539: 0xB3FE,
+ 1540: 0xB3FF,
+ 1541: 0xB400,
+ 1542: 0xB401,
+ 1543: 0xB402,
+ 1544: 0xB403,
+ 1545: 0xB404,
+ 1546: 0xB405,
+ 1547: 0xB406,
+ 1548: 0xB407,
+ 1549: 0xB408,
+ 1550: 0xB409,
+ 1551: 0xB40A,
+ 1552: 0xB40B,
+ 1553: 0xB40C,
+ 1554: 0xB40D,
+ 1555: 0xB40E,
+ 1556: 0xB40F,
+ 1557: 0xB411,
+ 1558: 0xB412,
+ 1559: 0xB413,
+ 1560: 0xB414,
+ 1561: 0xB415,
+ 1562: 0xB416,
+ 1563: 0xB417,
+ 1564: 0xB419,
+ 1565: 0xB41A,
+ 1566: 0xB41B,
+ 1567: 0xB41D,
+ 1568: 0xB41E,
+ 1569: 0xB41F,
+ 1570: 0xB421,
+ 1571: 0xB422,
+ 1572: 0xB423,
+ 1573: 0xB424,
+ 1574: 0xB425,
+ 1575: 0xB426,
+ 1576: 0xB427,
+ 1577: 0xB42A,
+ 1578: 0xB42C,
+ 1579: 0xB42D,
+ 1580: 0xB42E,
+ 1581: 0xB42F,
+ 1582: 0xB430,
+ 1583: 0xB431,
+ 1584: 0xB432,
+ 1585: 0xB433,
+ 1586: 0xB435,
+ 1587: 0xB436,
+ 1588: 0xB437,
+ 1589: 0xB438,
+ 1590: 0xB439,
+ 1591: 0xB43A,
+ 1592: 0xB43B,
+ 1593: 0xB43C,
+ 1594: 0xB43D,
+ 1595: 0xB43E,
+ 1596: 0xB43F,
+ 1597: 0xB440,
+ 1598: 0xB441,
+ 1599: 0xB442,
+ 1600: 0xB443,
+ 1601: 0xB444,
+ 1602: 0xB445,
+ 1603: 0xB446,
+ 1604: 0xB447,
+ 1605: 0xB448,
+ 1606: 0xB449,
+ 1607: 0xB44A,
+ 1608: 0xB44B,
+ 1609: 0xB44C,
+ 1610: 0xB44D,
+ 1611: 0xB44E,
+ 1612: 0xB44F,
+ 1613: 0xB452,
+ 1614: 0xB453,
+ 1615: 0xB455,
+ 1616: 0xB456,
+ 1617: 0xB457,
+ 1618: 0xB459,
+ 1619: 0xB45A,
+ 1620: 0xB45B,
+ 1621: 0xB45C,
+ 1622: 0xB45D,
+ 1623: 0xB45E,
+ 1624: 0xB45F,
+ 1625: 0xB462,
+ 1626: 0xB464,
+ 1627: 0xB466,
+ 1628: 0xB467,
+ 1629: 0xB468,
+ 1630: 0xB469,
+ 1631: 0xB46A,
+ 1632: 0xB46B,
+ 1633: 0xB46D,
+ 1634: 0xB46E,
+ 1635: 0xB46F,
+ 1636: 0xB470,
+ 1637: 0xB471,
+ 1638: 0xB472,
+ 1639: 0xB473,
+ 1640: 0xB474,
+ 1641: 0xB475,
+ 1642: 0xB476,
+ 1643: 0xB477,
+ 1644: 0xB478,
+ 1645: 0xB479,
+ 1646: 0xB47A,
+ 1647: 0xB47B,
+ 1648: 0xB47C,
+ 1649: 0xB47D,
+ 1650: 0xB47E,
+ 1651: 0xB47F,
+ 1652: 0xB481,
+ 1653: 0xB482,
+ 1654: 0xB483,
+ 1655: 0xB484,
+ 1656: 0xB485,
+ 1657: 0xB486,
+ 1658: 0xB487,
+ 1659: 0xB489,
+ 1660: 0xB48A,
+ 1661: 0xB48B,
+ 1662: 0xB48C,
+ 1663: 0xB48D,
+ 1664: 0xB48E,
+ 1665: 0xB48F,
+ 1666: 0xB490,
+ 1667: 0xB491,
+ 1668: 0xB492,
+ 1669: 0xB493,
+ 1670: 0xB494,
+ 1671: 0xB495,
+ 1672: 0xB496,
+ 1673: 0xB497,
+ 1674: 0xB498,
+ 1675: 0xB499,
+ 1676: 0xB49A,
+ 1677: 0xB49B,
+ 1678: 0xB49C,
+ 1679: 0xB49E,
+ 1680: 0xB49F,
+ 1681: 0xB4A0,
+ 1682: 0xB4A1,
+ 1683: 0xB4A2,
+ 1684: 0xB4A3,
+ 1685: 0xB4A5,
+ 1686: 0xB4A6,
+ 1687: 0xB4A7,
+ 1688: 0xB4A9,
+ 1689: 0xB4AA,
+ 1690: 0xB4AB,
+ 1691: 0xB4AD,
+ 1692: 0xB4AE,
+ 1693: 0xB4AF,
+ 1694: 0xB4B0,
+ 1695: 0xB4B1,
+ 1696: 0xB4B2,
+ 1697: 0xB4B3,
+ 1698: 0xB4B4,
+ 1699: 0xB4B6,
+ 1700: 0xB4B8,
+ 1701: 0xB4BA,
+ 1702: 0xB4BB,
+ 1703: 0xB4BC,
+ 1704: 0xB4BD,
+ 1705: 0xB4BE,
+ 1706: 0xB4BF,
+ 1707: 0xB4C1,
+ 1708: 0xB4C2,
+ 1709: 0xB4C3,
+ 1710: 0xB4C5,
+ 1711: 0xB4C6,
+ 1712: 0xB4C7,
+ 1713: 0xB4C9,
+ 1714: 0xB4CA,
+ 1715: 0xB4CB,
+ 1716: 0xB4CC,
+ 1717: 0xB4CD,
+ 1718: 0xB4CE,
+ 1719: 0xB4CF,
+ 1720: 0xB4D1,
+ 1721: 0xB4D2,
+ 1722: 0xB4D3,
+ 1723: 0xB4D4,
+ 1724: 0xB4D6,
+ 1725: 0xB4D7,
+ 1726: 0xB4D8,
+ 1727: 0xB4D9,
+ 1728: 0xB4DA,
+ 1729: 0xB4DB,
+ 1730: 0xB4DE,
+ 1731: 0xB4DF,
+ 1732: 0xB4E1,
+ 1733: 0xB4E2,
+ 1734: 0xB4E5,
+ 1735: 0xB4E7,
+ 1736: 0xB4E8,
+ 1737: 0xB4E9,
+ 1738: 0xB4EA,
+ 1739: 0xB4EB,
+ 1740: 0xB4EE,
+ 1741: 0xB4F0,
+ 1742: 0xB4F2,
+ 1743: 0xB4F3,
+ 1744: 0xB4F4,
+ 1745: 0xB4F5,
+ 1746: 0xB4F6,
+ 1747: 0xB4F7,
+ 1748: 0xB4F9,
+ 1749: 0xB4FA,
+ 1750: 0xB4FB,
+ 1751: 0xB4FC,
+ 1752: 0xB4FD,
+ 1753: 0xB4FE,
+ 1754: 0xB4FF,
+ 1755: 0xB500,
+ 1756: 0xB501,
+ 1757: 0xB502,
+ 1758: 0xB503,
+ 1759: 0xB504,
+ 1760: 0xB505,
+ 1761: 0xB506,
+ 1762: 0xB507,
+ 1763: 0xB508,
+ 1764: 0xB509,
+ 1765: 0xB50A,
+ 1766: 0xB50B,
+ 1767: 0xB50C,
+ 1768: 0xB50D,
+ 1769: 0xB50E,
+ 1770: 0xB50F,
+ 1771: 0xB510,
+ 1772: 0xB511,
+ 1773: 0xB512,
+ 1774: 0xB513,
+ 1775: 0xB516,
+ 1776: 0xB517,
+ 1777: 0xB519,
+ 1778: 0xB51A,
+ 1779: 0xB51D,
+ 1780: 0xB51E,
+ 1781: 0xB51F,
+ 1782: 0xB520,
+ 1783: 0xB521,
+ 1784: 0xB522,
+ 1785: 0xB523,
+ 1786: 0xB526,
+ 1787: 0xB52B,
+ 1788: 0xB52C,
+ 1789: 0xB52D,
+ 1790: 0xB52E,
+ 1791: 0xB52F,
+ 1792: 0xB532,
+ 1793: 0xB533,
+ 1794: 0xB535,
+ 1795: 0xB536,
+ 1796: 0xB537,
+ 1797: 0xB539,
+ 1798: 0xB53A,
+ 1799: 0xB53B,
+ 1800: 0xB53C,
+ 1801: 0xB53D,
+ 1802: 0xB53E,
+ 1803: 0xB53F,
+ 1804: 0xB542,
+ 1805: 0xB546,
+ 1806: 0xB547,
+ 1807: 0xB548,
+ 1808: 0xB549,
+ 1809: 0xB54A,
+ 1810: 0xB54E,
+ 1811: 0xB54F,
+ 1812: 0xB551,
+ 1813: 0xB552,
+ 1814: 0xB553,
+ 1815: 0xB555,
+ 1816: 0xB556,
+ 1817: 0xB557,
+ 1818: 0xB558,
+ 1819: 0xB559,
+ 1820: 0xB55A,
+ 1821: 0xB55B,
+ 1822: 0xB55E,
+ 1823: 0xB562,
+ 1824: 0xB563,
+ 1825: 0xB564,
+ 1826: 0xB565,
+ 1827: 0xB566,
+ 1828: 0xB567,
+ 1829: 0xB568,
+ 1830: 0xB569,
+ 1831: 0xB56A,
+ 1832: 0xB56B,
+ 1833: 0xB56C,
+ 1834: 0xB56D,
+ 1835: 0xB56E,
+ 1836: 0xB56F,
+ 1837: 0xB570,
+ 1838: 0xB571,
+ 1839: 0xB572,
+ 1840: 0xB573,
+ 1841: 0xB574,
+ 1842: 0xB575,
+ 1843: 0xB576,
+ 1844: 0xB577,
+ 1845: 0xB578,
+ 1846: 0xB579,
+ 1847: 0xB57A,
+ 1848: 0xB57B,
+ 1849: 0xB57C,
+ 1850: 0xB57D,
+ 1851: 0xB57E,
+ 1852: 0xB57F,
+ 1853: 0xB580,
+ 1854: 0xB581,
+ 1855: 0xB582,
+ 1856: 0xB583,
+ 1857: 0xB584,
+ 1858: 0xB585,
+ 1859: 0xB586,
+ 1860: 0xB587,
+ 1861: 0xB588,
+ 1862: 0xB589,
+ 1863: 0xB58A,
+ 1864: 0xB58B,
+ 1865: 0xB58C,
+ 1866: 0xB58D,
+ 1867: 0xB58E,
+ 1868: 0xB58F,
+ 1869: 0xB590,
+ 1870: 0xB591,
+ 1871: 0xB592,
+ 1872: 0xB593,
+ 1873: 0xB594,
+ 1874: 0xB595,
+ 1875: 0xB596,
+ 1876: 0xB597,
+ 1877: 0xB598,
+ 1878: 0xB599,
+ 1879: 0xB59A,
+ 1880: 0xB59B,
+ 1881: 0xB59C,
+ 1882: 0xB59D,
+ 1883: 0xB59E,
+ 1884: 0xB59F,
+ 1885: 0xB5A2,
+ 1886: 0xB5A3,
+ 1887: 0xB5A5,
+ 1888: 0xB5A6,
+ 1889: 0xB5A7,
+ 1890: 0xB5A9,
+ 1891: 0xB5AC,
+ 1892: 0xB5AD,
+ 1893: 0xB5AE,
+ 1894: 0xB5AF,
+ 1895: 0xB5B2,
+ 1896: 0xB5B6,
+ 1897: 0xB5B7,
+ 1898: 0xB5B8,
+ 1899: 0xB5B9,
+ 1900: 0xB5BA,
+ 1901: 0xB5BE,
+ 1902: 0xB5BF,
+ 1903: 0xB5C1,
+ 1904: 0xB5C2,
+ 1905: 0xB5C3,
+ 1906: 0xB5C5,
+ 1907: 0xB5C6,
+ 1908: 0xB5C7,
+ 1909: 0xB5C8,
+ 1910: 0xB5C9,
+ 1911: 0xB5CA,
+ 1912: 0xB5CB,
+ 1913: 0xB5CE,
+ 1914: 0xB5D2,
+ 1915: 0xB5D3,
+ 1916: 0xB5D4,
+ 1917: 0xB5D5,
+ 1918: 0xB5D6,
+ 1919: 0xB5D7,
+ 1920: 0xB5D9,
+ 1921: 0xB5DA,
+ 1922: 0xB5DB,
+ 1923: 0xB5DC,
+ 1924: 0xB5DD,
+ 1925: 0xB5DE,
+ 1926: 0xB5DF,
+ 1927: 0xB5E0,
+ 1928: 0xB5E1,
+ 1929: 0xB5E2,
+ 1930: 0xB5E3,
+ 1931: 0xB5E4,
+ 1932: 0xB5E5,
+ 1933: 0xB5E6,
+ 1934: 0xB5E7,
+ 1935: 0xB5E8,
+ 1936: 0xB5E9,
+ 1937: 0xB5EA,
+ 1938: 0xB5EB,
+ 1939: 0xB5ED,
+ 1940: 0xB5EE,
+ 1941: 0xB5EF,
+ 1942: 0xB5F0,
+ 1943: 0xB5F1,
+ 1944: 0xB5F2,
+ 1945: 0xB5F3,
+ 1946: 0xB5F4,
+ 1947: 0xB5F5,
+ 1948: 0xB5F6,
+ 1949: 0xB5F7,
+ 1950: 0xB5F8,
+ 1951: 0xB5F9,
+ 1952: 0xB5FA,
+ 1953: 0xB5FB,
+ 1954: 0xB5FC,
+ 1955: 0xB5FD,
+ 1956: 0xB5FE,
+ 1957: 0xB5FF,
+ 1958: 0xB600,
+ 1959: 0xB601,
+ 1960: 0xB602,
+ 1961: 0xB603,
+ 1962: 0xB604,
+ 1963: 0xB605,
+ 1964: 0xB606,
+ 1965: 0xB607,
+ 1966: 0xB608,
+ 1967: 0xB609,
+ 1968: 0xB60A,
+ 1969: 0xB60B,
+ 1970: 0xB60C,
+ 1971: 0xB60D,
+ 1972: 0xB60E,
+ 1973: 0xB60F,
+ 1974: 0xB612,
+ 1975: 0xB613,
+ 1976: 0xB615,
+ 1977: 0xB616,
+ 1978: 0xB617,
+ 1979: 0xB619,
+ 1980: 0xB61A,
+ 1981: 0xB61B,
+ 1982: 0xB61C,
+ 1983: 0xB61D,
+ 1984: 0xB61E,
+ 1985: 0xB61F,
+ 1986: 0xB620,
+ 1987: 0xB621,
+ 1988: 0xB622,
+ 1989: 0xB623,
+ 1990: 0xB624,
+ 1991: 0xB626,
+ 1992: 0xB627,
+ 1993: 0xB628,
+ 1994: 0xB629,
+ 1995: 0xB62A,
+ 1996: 0xB62B,
+ 1997: 0xB62D,
+ 1998: 0xB62E,
+ 1999: 0xB62F,
+ 2000: 0xB630,
+ 2001: 0xB631,
+ 2002: 0xB632,
+ 2003: 0xB633,
+ 2004: 0xB635,
+ 2005: 0xB636,
+ 2006: 0xB637,
+ 2007: 0xB638,
+ 2008: 0xB639,
+ 2009: 0xB63A,
+ 2010: 0xB63B,
+ 2011: 0xB63C,
+ 2012: 0xB63D,
+ 2013: 0xB63E,
+ 2014: 0xB63F,
+ 2015: 0xB640,
+ 2016: 0xB641,
+ 2017: 0xB642,
+ 2018: 0xB643,
+ 2019: 0xB644,
+ 2020: 0xB645,
+ 2021: 0xB646,
+ 2022: 0xB647,
+ 2023: 0xB649,
+ 2024: 0xB64A,
+ 2025: 0xB64B,
+ 2026: 0xB64C,
+ 2027: 0xB64D,
+ 2028: 0xB64E,
+ 2029: 0xB64F,
+ 2030: 0xB650,
+ 2031: 0xB651,
+ 2032: 0xB652,
+ 2033: 0xB653,
+ 2034: 0xB654,
+ 2035: 0xB655,
+ 2036: 0xB656,
+ 2037: 0xB657,
+ 2038: 0xB658,
+ 2039: 0xB659,
+ 2040: 0xB65A,
+ 2041: 0xB65B,
+ 2042: 0xB65C,
+ 2043: 0xB65D,
+ 2044: 0xB65E,
+ 2045: 0xB65F,
+ 2046: 0xB660,
+ 2047: 0xB661,
+ 2048: 0xB662,
+ 2049: 0xB663,
+ 2050: 0xB665,
+ 2051: 0xB666,
+ 2052: 0xB667,
+ 2053: 0xB669,
+ 2054: 0xB66A,
+ 2055: 0xB66B,
+ 2056: 0xB66C,
+ 2057: 0xB66D,
+ 2058: 0xB66E,
+ 2059: 0xB66F,
+ 2060: 0xB670,
+ 2061: 0xB671,
+ 2062: 0xB672,
+ 2063: 0xB673,
+ 2064: 0xB674,
+ 2065: 0xB675,
+ 2066: 0xB676,
+ 2067: 0xB677,
+ 2068: 0xB678,
+ 2069: 0xB679,
+ 2070: 0xB67A,
+ 2071: 0xB67B,
+ 2072: 0xB67C,
+ 2073: 0xB67D,
+ 2074: 0xB67E,
+ 2075: 0xB67F,
+ 2076: 0xB680,
+ 2077: 0xB681,
+ 2078: 0xB682,
+ 2079: 0xB683,
+ 2080: 0xB684,
+ 2081: 0xB685,
+ 2082: 0xB686,
+ 2083: 0xB687,
+ 2084: 0xB688,
+ 2085: 0xB689,
+ 2086: 0xB68A,
+ 2087: 0xB68B,
+ 2088: 0xB68C,
+ 2089: 0xB68D,
+ 2090: 0xB68E,
+ 2091: 0xB68F,
+ 2092: 0xB690,
+ 2093: 0xB691,
+ 2094: 0xB692,
+ 2095: 0xB693,
+ 2096: 0xB694,
+ 2097: 0xB695,
+ 2098: 0xB696,
+ 2099: 0xB697,
+ 2100: 0xB698,
+ 2101: 0xB699,
+ 2102: 0xB69A,
+ 2103: 0xB69B,
+ 2104: 0xB69E,
+ 2105: 0xB69F,
+ 2106: 0xB6A1,
+ 2107: 0xB6A2,
+ 2108: 0xB6A3,
+ 2109: 0xB6A5,
+ 2110: 0xB6A6,
+ 2111: 0xB6A7,
+ 2112: 0xB6A8,
+ 2113: 0xB6A9,
+ 2114: 0xB6AA,
+ 2115: 0xB6AD,
+ 2116: 0xB6AE,
+ 2117: 0xB6AF,
+ 2118: 0xB6B0,
+ 2119: 0xB6B2,
+ 2120: 0xB6B3,
+ 2121: 0xB6B4,
+ 2122: 0xB6B5,
+ 2123: 0xB6B6,
+ 2124: 0xB6B7,
+ 2125: 0xB6B8,
+ 2126: 0xB6B9,
+ 2127: 0xB6BA,
+ 2128: 0xB6BB,
+ 2129: 0xB6BC,
+ 2130: 0xB6BD,
+ 2131: 0xB6BE,
+ 2132: 0xB6BF,
+ 2133: 0xB6C0,
+ 2134: 0xB6C1,
+ 2135: 0xB6C2,
+ 2136: 0xB6C3,
+ 2137: 0xB6C4,
+ 2138: 0xB6C5,
+ 2139: 0xB6C6,
+ 2140: 0xB6C7,
+ 2141: 0xB6C8,
+ 2142: 0xB6C9,
+ 2143: 0xB6CA,
+ 2144: 0xB6CB,
+ 2145: 0xB6CC,
+ 2146: 0xB6CD,
+ 2147: 0xB6CE,
+ 2148: 0xB6CF,
+ 2149: 0xB6D0,
+ 2150: 0xB6D1,
+ 2151: 0xB6D2,
+ 2152: 0xB6D3,
+ 2153: 0xB6D5,
+ 2154: 0xB6D6,
+ 2155: 0xB6D7,
+ 2156: 0xB6D8,
+ 2157: 0xB6D9,
+ 2158: 0xB6DA,
+ 2159: 0xB6DB,
+ 2160: 0xB6DC,
+ 2161: 0xB6DD,
+ 2162: 0xB6DE,
+ 2163: 0xB6DF,
+ 2164: 0xB6E0,
+ 2165: 0xB6E1,
+ 2166: 0xB6E2,
+ 2167: 0xB6E3,
+ 2168: 0xB6E4,
+ 2169: 0xB6E5,
+ 2170: 0xB6E6,
+ 2171: 0xB6E7,
+ 2172: 0xB6E8,
+ 2173: 0xB6E9,
+ 2174: 0xB6EA,
+ 2175: 0xB6EB,
+ 2176: 0xB6EC,
+ 2177: 0xB6ED,
+ 2178: 0xB6EE,
+ 2179: 0xB6EF,
+ 2180: 0xB6F1,
+ 2181: 0xB6F2,
+ 2182: 0xB6F3,
+ 2183: 0xB6F5,
+ 2184: 0xB6F6,
+ 2185: 0xB6F7,
+ 2186: 0xB6F9,
+ 2187: 0xB6FA,
+ 2188: 0xB6FB,
+ 2189: 0xB6FC,
+ 2190: 0xB6FD,
+ 2191: 0xB6FE,
+ 2192: 0xB6FF,
+ 2193: 0xB702,
+ 2194: 0xB703,
+ 2195: 0xB704,
+ 2196: 0xB706,
+ 2197: 0xB707,
+ 2198: 0xB708,
+ 2199: 0xB709,
+ 2200: 0xB70A,
+ 2201: 0xB70B,
+ 2202: 0xB70C,
+ 2203: 0xB70D,
+ 2204: 0xB70E,
+ 2205: 0xB70F,
+ 2206: 0xB710,
+ 2207: 0xB711,
+ 2208: 0xB712,
+ 2209: 0xB713,
+ 2210: 0xB714,
+ 2211: 0xB715,
+ 2212: 0xB716,
+ 2213: 0xB717,
+ 2214: 0xB718,
+ 2215: 0xB719,
+ 2216: 0xB71A,
+ 2217: 0xB71B,
+ 2218: 0xB71C,
+ 2219: 0xB71D,
+ 2220: 0xB71E,
+ 2221: 0xB71F,
+ 2222: 0xB720,
+ 2223: 0xB721,
+ 2224: 0xB722,
+ 2225: 0xB723,
+ 2226: 0xB724,
+ 2227: 0xB725,
+ 2228: 0xB726,
+ 2229: 0xB727,
+ 2230: 0xB72A,
+ 2231: 0xB72B,
+ 2232: 0xB72D,
+ 2233: 0xB72E,
+ 2234: 0xB731,
+ 2235: 0xB732,
+ 2236: 0xB733,
+ 2237: 0xB734,
+ 2238: 0xB735,
+ 2239: 0xB736,
+ 2240: 0xB737,
+ 2241: 0xB73A,
+ 2242: 0xB73C,
+ 2243: 0xB73D,
+ 2244: 0xB73E,
+ 2245: 0xB73F,
+ 2246: 0xB740,
+ 2247: 0xB741,
+ 2248: 0xB742,
+ 2249: 0xB743,
+ 2250: 0xB745,
+ 2251: 0xB746,
+ 2252: 0xB747,
+ 2253: 0xB749,
+ 2254: 0xB74A,
+ 2255: 0xB74B,
+ 2256: 0xB74D,
+ 2257: 0xB74E,
+ 2258: 0xB74F,
+ 2259: 0xB750,
+ 2260: 0xB751,
+ 2261: 0xB752,
+ 2262: 0xB753,
+ 2263: 0xB756,
+ 2264: 0xB757,
+ 2265: 0xB758,
+ 2266: 0xB759,
+ 2267: 0xB75A,
+ 2268: 0xB75B,
+ 2269: 0xB75C,
+ 2270: 0xB75D,
+ 2271: 0xB75E,
+ 2272: 0xB75F,
+ 2273: 0xB761,
+ 2274: 0xB762,
+ 2275: 0xB763,
+ 2276: 0xB765,
+ 2277: 0xB766,
+ 2278: 0xB767,
+ 2279: 0xB769,
+ 2280: 0xB76A,
+ 2281: 0xB76B,
+ 2282: 0xB76C,
+ 2283: 0xB76D,
+ 2284: 0xB76E,
+ 2285: 0xB76F,
+ 2286: 0xB772,
+ 2287: 0xB774,
+ 2288: 0xB776,
+ 2289: 0xB777,
+ 2290: 0xB778,
+ 2291: 0xB779,
+ 2292: 0xB77A,
+ 2293: 0xB77B,
+ 2294: 0xB77E,
+ 2295: 0xB77F,
+ 2296: 0xB781,
+ 2297: 0xB782,
+ 2298: 0xB783,
+ 2299: 0xB785,
+ 2300: 0xB786,
+ 2301: 0xB787,
+ 2302: 0xB788,
+ 2303: 0xB789,
+ 2304: 0xB78A,
+ 2305: 0xB78B,
+ 2306: 0xB78E,
+ 2307: 0xB793,
+ 2308: 0xB794,
+ 2309: 0xB795,
+ 2310: 0xB79A,
+ 2311: 0xB79B,
+ 2312: 0xB79D,
+ 2313: 0xB79E,
+ 2314: 0xB79F,
+ 2315: 0xB7A1,
+ 2316: 0xB7A2,
+ 2317: 0xB7A3,
+ 2318: 0xB7A4,
+ 2319: 0xB7A5,
+ 2320: 0xB7A6,
+ 2321: 0xB7A7,
+ 2322: 0xB7AA,
+ 2323: 0xB7AE,
+ 2324: 0xB7AF,
+ 2325: 0xB7B0,
+ 2326: 0xB7B1,
+ 2327: 0xB7B2,
+ 2328: 0xB7B3,
+ 2329: 0xB7B6,
+ 2330: 0xB7B7,
+ 2331: 0xB7B9,
+ 2332: 0xB7BA,
+ 2333: 0xB7BB,
+ 2334: 0xB7BC,
+ 2335: 0xB7BD,
+ 2336: 0xB7BE,
+ 2337: 0xB7BF,
+ 2338: 0xB7C0,
+ 2339: 0xB7C1,
+ 2340: 0xB7C2,
+ 2341: 0xB7C3,
+ 2342: 0xB7C4,
+ 2343: 0xB7C5,
+ 2344: 0xB7C6,
+ 2345: 0xB7C8,
+ 2346: 0xB7CA,
+ 2347: 0xB7CB,
+ 2348: 0xB7CC,
+ 2349: 0xB7CD,
+ 2350: 0xB7CE,
+ 2351: 0xB7CF,
+ 2352: 0xB7D0,
+ 2353: 0xB7D1,
+ 2354: 0xB7D2,
+ 2355: 0xB7D3,
+ 2356: 0xB7D4,
+ 2357: 0xB7D5,
+ 2358: 0xB7D6,
+ 2359: 0xB7D7,
+ 2360: 0xB7D8,
+ 2361: 0xB7D9,
+ 2362: 0xB7DA,
+ 2363: 0xB7DB,
+ 2364: 0xB7DC,
+ 2365: 0xB7DD,
+ 2366: 0xB7DE,
+ 2367: 0xB7DF,
+ 2368: 0xB7E0,
+ 2369: 0xB7E1,
+ 2370: 0xB7E2,
+ 2371: 0xB7E3,
+ 2372: 0xB7E4,
+ 2373: 0xB7E5,
+ 2374: 0xB7E6,
+ 2375: 0xB7E7,
+ 2376: 0xB7E8,
+ 2377: 0xB7E9,
+ 2378: 0xB7EA,
+ 2379: 0xB7EB,
+ 2380: 0xB7EE,
+ 2381: 0xB7EF,
+ 2382: 0xB7F1,
+ 2383: 0xB7F2,
+ 2384: 0xB7F3,
+ 2385: 0xB7F5,
+ 2386: 0xB7F6,
+ 2387: 0xB7F7,
+ 2388: 0xB7F8,
+ 2389: 0xB7F9,
+ 2390: 0xB7FA,
+ 2391: 0xB7FB,
+ 2392: 0xB7FE,
+ 2393: 0xB802,
+ 2394: 0xB803,
+ 2395: 0xB804,
+ 2396: 0xB805,
+ 2397: 0xB806,
+ 2398: 0xB80A,
+ 2399: 0xB80B,
+ 2400: 0xB80D,
+ 2401: 0xB80E,
+ 2402: 0xB80F,
+ 2403: 0xB811,
+ 2404: 0xB812,
+ 2405: 0xB813,
+ 2406: 0xB814,
+ 2407: 0xB815,
+ 2408: 0xB816,
+ 2409: 0xB817,
+ 2410: 0xB81A,
+ 2411: 0xB81C,
+ 2412: 0xB81E,
+ 2413: 0xB81F,
+ 2414: 0xB820,
+ 2415: 0xB821,
+ 2416: 0xB822,
+ 2417: 0xB823,
+ 2418: 0xB826,
+ 2419: 0xB827,
+ 2420: 0xB829,
+ 2421: 0xB82A,
+ 2422: 0xB82B,
+ 2423: 0xB82D,
+ 2424: 0xB82E,
+ 2425: 0xB82F,
+ 2426: 0xB830,
+ 2427: 0xB831,
+ 2428: 0xB832,
+ 2429: 0xB833,
+ 2430: 0xB836,
+ 2431: 0xB83A,
+ 2432: 0xB83B,
+ 2433: 0xB83C,
+ 2434: 0xB83D,
+ 2435: 0xB83E,
+ 2436: 0xB83F,
+ 2437: 0xB841,
+ 2438: 0xB842,
+ 2439: 0xB843,
+ 2440: 0xB845,
+ 2441: 0xB846,
+ 2442: 0xB847,
+ 2443: 0xB848,
+ 2444: 0xB849,
+ 2445: 0xB84A,
+ 2446: 0xB84B,
+ 2447: 0xB84C,
+ 2448: 0xB84D,
+ 2449: 0xB84E,
+ 2450: 0xB84F,
+ 2451: 0xB850,
+ 2452: 0xB852,
+ 2453: 0xB854,
+ 2454: 0xB855,
+ 2455: 0xB856,
+ 2456: 0xB857,
+ 2457: 0xB858,
+ 2458: 0xB859,
+ 2459: 0xB85A,
+ 2460: 0xB85B,
+ 2461: 0xB85E,
+ 2462: 0xB85F,
+ 2463: 0xB861,
+ 2464: 0xB862,
+ 2465: 0xB863,
+ 2466: 0xB865,
+ 2467: 0xB866,
+ 2468: 0xB867,
+ 2469: 0xB868,
+ 2470: 0xB869,
+ 2471: 0xB86A,
+ 2472: 0xB86B,
+ 2473: 0xB86E,
+ 2474: 0xB870,
+ 2475: 0xB872,
+ 2476: 0xB873,
+ 2477: 0xB874,
+ 2478: 0xB875,
+ 2479: 0xB876,
+ 2480: 0xB877,
+ 2481: 0xB879,
+ 2482: 0xB87A,
+ 2483: 0xB87B,
+ 2484: 0xB87D,
+ 2485: 0xB87E,
+ 2486: 0xB87F,
+ 2487: 0xB880,
+ 2488: 0xB881,
+ 2489: 0xB882,
+ 2490: 0xB883,
+ 2491: 0xB884,
+ 2492: 0xB885,
+ 2493: 0xB886,
+ 2494: 0xB887,
+ 2495: 0xB888,
+ 2496: 0xB889,
+ 2497: 0xB88A,
+ 2498: 0xB88B,
+ 2499: 0xB88C,
+ 2500: 0xB88E,
+ 2501: 0xB88F,
+ 2502: 0xB890,
+ 2503: 0xB891,
+ 2504: 0xB892,
+ 2505: 0xB893,
+ 2506: 0xB894,
+ 2507: 0xB895,
+ 2508: 0xB896,
+ 2509: 0xB897,
+ 2510: 0xB898,
+ 2511: 0xB899,
+ 2512: 0xB89A,
+ 2513: 0xB89B,
+ 2514: 0xB89C,
+ 2515: 0xB89D,
+ 2516: 0xB89E,
+ 2517: 0xB89F,
+ 2518: 0xB8A0,
+ 2519: 0xB8A1,
+ 2520: 0xB8A2,
+ 2521: 0xB8A3,
+ 2522: 0xB8A4,
+ 2523: 0xB8A5,
+ 2524: 0xB8A6,
+ 2525: 0xB8A7,
+ 2526: 0xB8A9,
+ 2527: 0xB8AA,
+ 2528: 0xB8AB,
+ 2529: 0xB8AC,
+ 2530: 0xB8AD,
+ 2531: 0xB8AE,
+ 2532: 0xB8AF,
+ 2533: 0xB8B1,
+ 2534: 0xB8B2,
+ 2535: 0xB8B3,
+ 2536: 0xB8B5,
+ 2537: 0xB8B6,
+ 2538: 0xB8B7,
+ 2539: 0xB8B9,
+ 2540: 0xB8BA,
+ 2541: 0xB8BB,
+ 2542: 0xB8BC,
+ 2543: 0xB8BD,
+ 2544: 0xB8BE,
+ 2545: 0xB8BF,
+ 2546: 0xB8C2,
+ 2547: 0xB8C4,
+ 2548: 0xB8C6,
+ 2549: 0xB8C7,
+ 2550: 0xB8C8,
+ 2551: 0xB8C9,
+ 2552: 0xB8CA,
+ 2553: 0xB8CB,
+ 2554: 0xB8CD,
+ 2555: 0xB8CE,
+ 2556: 0xB8CF,
+ 2557: 0xB8D1,
+ 2558: 0xB8D2,
+ 2559: 0xB8D3,
+ 2560: 0xB8D5,
+ 2561: 0xB8D6,
+ 2562: 0xB8D7,
+ 2563: 0xB8D8,
+ 2564: 0xB8D9,
+ 2565: 0xB8DA,
+ 2566: 0xB8DB,
+ 2567: 0xB8DC,
+ 2568: 0xB8DE,
+ 2569: 0xB8E0,
+ 2570: 0xB8E2,
+ 2571: 0xB8E3,
+ 2572: 0xB8E4,
+ 2573: 0xB8E5,
+ 2574: 0xB8E6,
+ 2575: 0xB8E7,
+ 2576: 0xB8EA,
+ 2577: 0xB8EB,
+ 2578: 0xB8ED,
+ 2579: 0xB8EE,
+ 2580: 0xB8EF,
+ 2581: 0xB8F1,
+ 2582: 0xB8F2,
+ 2583: 0xB8F3,
+ 2584: 0xB8F4,
+ 2585: 0xB8F5,
+ 2586: 0xB8F6,
+ 2587: 0xB8F7,
+ 2588: 0xB8FA,
+ 2589: 0xB8FC,
+ 2590: 0xB8FE,
+ 2591: 0xB8FF,
+ 2592: 0xB900,
+ 2593: 0xB901,
+ 2594: 0xB902,
+ 2595: 0xB903,
+ 2596: 0xB905,
+ 2597: 0xB906,
+ 2598: 0xB907,
+ 2599: 0xB908,
+ 2600: 0xB909,
+ 2601: 0xB90A,
+ 2602: 0xB90B,
+ 2603: 0xB90C,
+ 2604: 0xB90D,
+ 2605: 0xB90E,
+ 2606: 0xB90F,
+ 2607: 0xB910,
+ 2608: 0xB911,
+ 2609: 0xB912,
+ 2610: 0xB913,
+ 2611: 0xB914,
+ 2612: 0xB915,
+ 2613: 0xB916,
+ 2614: 0xB917,
+ 2615: 0xB919,
+ 2616: 0xB91A,
+ 2617: 0xB91B,
+ 2618: 0xB91C,
+ 2619: 0xB91D,
+ 2620: 0xB91E,
+ 2621: 0xB91F,
+ 2622: 0xB921,
+ 2623: 0xB922,
+ 2624: 0xB923,
+ 2625: 0xB924,
+ 2626: 0xB925,
+ 2627: 0xB926,
+ 2628: 0xB927,
+ 2629: 0xB928,
+ 2630: 0xB929,
+ 2631: 0xB92A,
+ 2632: 0xB92B,
+ 2633: 0xB92C,
+ 2634: 0xB92D,
+ 2635: 0xB92E,
+ 2636: 0xB92F,
+ 2637: 0xB930,
+ 2638: 0xB931,
+ 2639: 0xB932,
+ 2640: 0xB933,
+ 2641: 0xB934,
+ 2642: 0xB935,
+ 2643: 0xB936,
+ 2644: 0xB937,
+ 2645: 0xB938,
+ 2646: 0xB939,
+ 2647: 0xB93A,
+ 2648: 0xB93B,
+ 2649: 0xB93E,
+ 2650: 0xB93F,
+ 2651: 0xB941,
+ 2652: 0xB942,
+ 2653: 0xB943,
+ 2654: 0xB945,
+ 2655: 0xB946,
+ 2656: 0xB947,
+ 2657: 0xB948,
+ 2658: 0xB949,
+ 2659: 0xB94A,
+ 2660: 0xB94B,
+ 2661: 0xB94D,
+ 2662: 0xB94E,
+ 2663: 0xB950,
+ 2664: 0xB952,
+ 2665: 0xB953,
+ 2666: 0xB954,
+ 2667: 0xB955,
+ 2668: 0xB956,
+ 2669: 0xB957,
+ 2670: 0xB95A,
+ 2671: 0xB95B,
+ 2672: 0xB95D,
+ 2673: 0xB95E,
+ 2674: 0xB95F,
+ 2675: 0xB961,
+ 2676: 0xB962,
+ 2677: 0xB963,
+ 2678: 0xB964,
+ 2679: 0xB965,
+ 2680: 0xB966,
+ 2681: 0xB967,
+ 2682: 0xB96A,
+ 2683: 0xB96C,
+ 2684: 0xB96E,
+ 2685: 0xB96F,
+ 2686: 0xB970,
+ 2687: 0xB971,
+ 2688: 0xB972,
+ 2689: 0xB973,
+ 2690: 0xB976,
+ 2691: 0xB977,
+ 2692: 0xB979,
+ 2693: 0xB97A,
+ 2694: 0xB97B,
+ 2695: 0xB97D,
+ 2696: 0xB97E,
+ 2697: 0xB97F,
+ 2698: 0xB980,
+ 2699: 0xB981,
+ 2700: 0xB982,
+ 2701: 0xB983,
+ 2702: 0xB986,
+ 2703: 0xB988,
+ 2704: 0xB98B,
+ 2705: 0xB98C,
+ 2706: 0xB98F,
+ 2707: 0xB990,
+ 2708: 0xB991,
+ 2709: 0xB992,
+ 2710: 0xB993,
+ 2711: 0xB994,
+ 2712: 0xB995,
+ 2713: 0xB996,
+ 2714: 0xB997,
+ 2715: 0xB998,
+ 2716: 0xB999,
+ 2717: 0xB99A,
+ 2718: 0xB99B,
+ 2719: 0xB99C,
+ 2720: 0xB99D,
+ 2721: 0xB99E,
+ 2722: 0xB99F,
+ 2723: 0xB9A0,
+ 2724: 0xB9A1,
+ 2725: 0xB9A2,
+ 2726: 0xB9A3,
+ 2727: 0xB9A4,
+ 2728: 0xB9A5,
+ 2729: 0xB9A6,
+ 2730: 0xB9A7,
+ 2731: 0xB9A8,
+ 2732: 0xB9A9,
+ 2733: 0xB9AA,
+ 2734: 0xB9AB,
+ 2735: 0xB9AE,
+ 2736: 0xB9AF,
+ 2737: 0xB9B1,
+ 2738: 0xB9B2,
+ 2739: 0xB9B3,
+ 2740: 0xB9B5,
+ 2741: 0xB9B6,
+ 2742: 0xB9B7,
+ 2743: 0xB9B8,
+ 2744: 0xB9B9,
+ 2745: 0xB9BA,
+ 2746: 0xB9BB,
+ 2747: 0xB9BE,
+ 2748: 0xB9C0,
+ 2749: 0xB9C2,
+ 2750: 0xB9C3,
+ 2751: 0xB9C4,
+ 2752: 0xB9C5,
+ 2753: 0xB9C6,
+ 2754: 0xB9C7,
+ 2755: 0xB9CA,
+ 2756: 0xB9CB,
+ 2757: 0xB9CD,
+ 2758: 0xB9D3,
+ 2759: 0xB9D4,
+ 2760: 0xB9D5,
+ 2761: 0xB9D6,
+ 2762: 0xB9D7,
+ 2763: 0xB9DA,
+ 2764: 0xB9DC,
+ 2765: 0xB9DF,
+ 2766: 0xB9E0,
+ 2767: 0xB9E2,
+ 2768: 0xB9E6,
+ 2769: 0xB9E7,
+ 2770: 0xB9E9,
+ 2771: 0xB9EA,
+ 2772: 0xB9EB,
+ 2773: 0xB9ED,
+ 2774: 0xB9EE,
+ 2775: 0xB9EF,
+ 2776: 0xB9F0,
+ 2777: 0xB9F1,
+ 2778: 0xB9F2,
+ 2779: 0xB9F3,
+ 2780: 0xB9F6,
+ 2781: 0xB9FB,
+ 2782: 0xB9FC,
+ 2783: 0xB9FD,
+ 2784: 0xB9FE,
+ 2785: 0xB9FF,
+ 2786: 0xBA02,
+ 2787: 0xBA03,
+ 2788: 0xBA04,
+ 2789: 0xBA05,
+ 2790: 0xBA06,
+ 2791: 0xBA07,
+ 2792: 0xBA09,
+ 2793: 0xBA0A,
+ 2794: 0xBA0B,
+ 2795: 0xBA0C,
+ 2796: 0xBA0D,
+ 2797: 0xBA0E,
+ 2798: 0xBA0F,
+ 2799: 0xBA10,
+ 2800: 0xBA11,
+ 2801: 0xBA12,
+ 2802: 0xBA13,
+ 2803: 0xBA14,
+ 2804: 0xBA16,
+ 2805: 0xBA17,
+ 2806: 0xBA18,
+ 2807: 0xBA19,
+ 2808: 0xBA1A,
+ 2809: 0xBA1B,
+ 2810: 0xBA1C,
+ 2811: 0xBA1D,
+ 2812: 0xBA1E,
+ 2813: 0xBA1F,
+ 2814: 0xBA20,
+ 2815: 0xBA21,
+ 2816: 0xBA22,
+ 2817: 0xBA23,
+ 2818: 0xBA24,
+ 2819: 0xBA25,
+ 2820: 0xBA26,
+ 2821: 0xBA27,
+ 2822: 0xBA28,
+ 2823: 0xBA29,
+ 2824: 0xBA2A,
+ 2825: 0xBA2B,
+ 2826: 0xBA2C,
+ 2827: 0xBA2D,
+ 2828: 0xBA2E,
+ 2829: 0xBA2F,
+ 2830: 0xBA30,
+ 2831: 0xBA31,
+ 2832: 0xBA32,
+ 2833: 0xBA33,
+ 2834: 0xBA34,
+ 2835: 0xBA35,
+ 2836: 0xBA36,
+ 2837: 0xBA37,
+ 2838: 0xBA3A,
+ 2839: 0xBA3B,
+ 2840: 0xBA3D,
+ 2841: 0xBA3E,
+ 2842: 0xBA3F,
+ 2843: 0xBA41,
+ 2844: 0xBA43,
+ 2845: 0xBA44,
+ 2846: 0xBA45,
+ 2847: 0xBA46,
+ 2848: 0xBA47,
+ 2849: 0xBA4A,
+ 2850: 0xBA4C,
+ 2851: 0xBA4F,
+ 2852: 0xBA50,
+ 2853: 0xBA51,
+ 2854: 0xBA52,
+ 2855: 0xBA56,
+ 2856: 0xBA57,
+ 2857: 0xBA59,
+ 2858: 0xBA5A,
+ 2859: 0xBA5B,
+ 2860: 0xBA5D,
+ 2861: 0xBA5E,
+ 2862: 0xBA5F,
+ 2863: 0xBA60,
+ 2864: 0xBA61,
+ 2865: 0xBA62,
+ 2866: 0xBA63,
+ 2867: 0xBA66,
+ 2868: 0xBA6A,
+ 2869: 0xBA6B,
+ 2870: 0xBA6C,
+ 2871: 0xBA6D,
+ 2872: 0xBA6E,
+ 2873: 0xBA6F,
+ 2874: 0xBA72,
+ 2875: 0xBA73,
+ 2876: 0xBA75,
+ 2877: 0xBA76,
+ 2878: 0xBA77,
+ 2879: 0xBA79,
+ 2880: 0xBA7A,
+ 2881: 0xBA7B,
+ 2882: 0xBA7C,
+ 2883: 0xBA7D,
+ 2884: 0xBA7E,
+ 2885: 0xBA7F,
+ 2886: 0xBA80,
+ 2887: 0xBA81,
+ 2888: 0xBA82,
+ 2889: 0xBA86,
+ 2890: 0xBA88,
+ 2891: 0xBA89,
+ 2892: 0xBA8A,
+ 2893: 0xBA8B,
+ 2894: 0xBA8D,
+ 2895: 0xBA8E,
+ 2896: 0xBA8F,
+ 2897: 0xBA90,
+ 2898: 0xBA91,
+ 2899: 0xBA92,
+ 2900: 0xBA93,
+ 2901: 0xBA94,
+ 2902: 0xBA95,
+ 2903: 0xBA96,
+ 2904: 0xBA97,
+ 2905: 0xBA98,
+ 2906: 0xBA99,
+ 2907: 0xBA9A,
+ 2908: 0xBA9B,
+ 2909: 0xBA9C,
+ 2910: 0xBA9D,
+ 2911: 0xBA9E,
+ 2912: 0xBA9F,
+ 2913: 0xBAA0,
+ 2914: 0xBAA1,
+ 2915: 0xBAA2,
+ 2916: 0xBAA3,
+ 2917: 0xBAA4,
+ 2918: 0xBAA5,
+ 2919: 0xBAA6,
+ 2920: 0xBAA7,
+ 2921: 0xBAAA,
+ 2922: 0xBAAD,
+ 2923: 0xBAAE,
+ 2924: 0xBAAF,
+ 2925: 0xBAB1,
+ 2926: 0xBAB3,
+ 2927: 0xBAB4,
+ 2928: 0xBAB5,
+ 2929: 0xBAB6,
+ 2930: 0xBAB7,
+ 2931: 0xBABA,
+ 2932: 0xBABC,
+ 2933: 0xBABE,
+ 2934: 0xBABF,
+ 2935: 0xBAC0,
+ 2936: 0xBAC1,
+ 2937: 0xBAC2,
+ 2938: 0xBAC3,
+ 2939: 0xBAC5,
+ 2940: 0xBAC6,
+ 2941: 0xBAC7,
+ 2942: 0xBAC9,
+ 2943: 0xBACA,
+ 2944: 0xBACB,
+ 2945: 0xBACC,
+ 2946: 0xBACD,
+ 2947: 0xBACE,
+ 2948: 0xBACF,
+ 2949: 0xBAD0,
+ 2950: 0xBAD1,
+ 2951: 0xBAD2,
+ 2952: 0xBAD3,
+ 2953: 0xBAD4,
+ 2954: 0xBAD5,
+ 2955: 0xBAD6,
+ 2956: 0xBAD7,
+ 2957: 0xBADA,
+ 2958: 0xBADB,
+ 2959: 0xBADC,
+ 2960: 0xBADD,
+ 2961: 0xBADE,
+ 2962: 0xBADF,
+ 2963: 0xBAE0,
+ 2964: 0xBAE1,
+ 2965: 0xBAE2,
+ 2966: 0xBAE3,
+ 2967: 0xBAE4,
+ 2968: 0xBAE5,
+ 2969: 0xBAE6,
+ 2970: 0xBAE7,
+ 2971: 0xBAE8,
+ 2972: 0xBAE9,
+ 2973: 0xBAEA,
+ 2974: 0xBAEB,
+ 2975: 0xBAEC,
+ 2976: 0xBAED,
+ 2977: 0xBAEE,
+ 2978: 0xBAEF,
+ 2979: 0xBAF0,
+ 2980: 0xBAF1,
+ 2981: 0xBAF2,
+ 2982: 0xBAF3,
+ 2983: 0xBAF4,
+ 2984: 0xBAF5,
+ 2985: 0xBAF6,
+ 2986: 0xBAF7,
+ 2987: 0xBAF8,
+ 2988: 0xBAF9,
+ 2989: 0xBAFA,
+ 2990: 0xBAFB,
+ 2991: 0xBAFD,
+ 2992: 0xBAFE,
+ 2993: 0xBAFF,
+ 2994: 0xBB01,
+ 2995: 0xBB02,
+ 2996: 0xBB03,
+ 2997: 0xBB05,
+ 2998: 0xBB06,
+ 2999: 0xBB07,
+ 3000: 0xBB08,
+ 3001: 0xBB09,
+ 3002: 0xBB0A,
+ 3003: 0xBB0B,
+ 3004: 0xBB0C,
+ 3005: 0xBB0E,
+ 3006: 0xBB10,
+ 3007: 0xBB12,
+ 3008: 0xBB13,
+ 3009: 0xBB14,
+ 3010: 0xBB15,
+ 3011: 0xBB16,
+ 3012: 0xBB17,
+ 3013: 0xBB19,
+ 3014: 0xBB1A,
+ 3015: 0xBB1B,
+ 3016: 0xBB1D,
+ 3017: 0xBB1E,
+ 3018: 0xBB1F,
+ 3019: 0xBB21,
+ 3020: 0xBB22,
+ 3021: 0xBB23,
+ 3022: 0xBB24,
+ 3023: 0xBB25,
+ 3024: 0xBB26,
+ 3025: 0xBB27,
+ 3026: 0xBB28,
+ 3027: 0xBB2A,
+ 3028: 0xBB2C,
+ 3029: 0xBB2D,
+ 3030: 0xBB2E,
+ 3031: 0xBB2F,
+ 3032: 0xBB30,
+ 3033: 0xBB31,
+ 3034: 0xBB32,
+ 3035: 0xBB33,
+ 3036: 0xBB37,
+ 3037: 0xBB39,
+ 3038: 0xBB3A,
+ 3039: 0xBB3F,
+ 3040: 0xBB40,
+ 3041: 0xBB41,
+ 3042: 0xBB42,
+ 3043: 0xBB43,
+ 3044: 0xBB46,
+ 3045: 0xBB48,
+ 3046: 0xBB4A,
+ 3047: 0xBB4B,
+ 3048: 0xBB4C,
+ 3049: 0xBB4E,
+ 3050: 0xBB51,
+ 3051: 0xBB52,
+ 3052: 0xBB53,
+ 3053: 0xBB55,
+ 3054: 0xBB56,
+ 3055: 0xBB57,
+ 3056: 0xBB59,
+ 3057: 0xBB5A,
+ 3058: 0xBB5B,
+ 3059: 0xBB5C,
+ 3060: 0xBB5D,
+ 3061: 0xBB5E,
+ 3062: 0xBB5F,
+ 3063: 0xBB60,
+ 3064: 0xBB62,
+ 3065: 0xBB64,
+ 3066: 0xBB65,
+ 3067: 0xBB66,
+ 3068: 0xBB67,
+ 3069: 0xBB68,
+ 3070: 0xBB69,
+ 3071: 0xBB6A,
+ 3072: 0xBB6B,
+ 3073: 0xBB6D,
+ 3074: 0xBB6E,
+ 3075: 0xBB6F,
+ 3076: 0xBB70,
+ 3077: 0xBB71,
+ 3078: 0xBB72,
+ 3079: 0xBB73,
+ 3080: 0xBB74,
+ 3081: 0xBB75,
+ 3082: 0xBB76,
+ 3083: 0xBB77,
+ 3084: 0xBB78,
+ 3085: 0xBB79,
+ 3086: 0xBB7A,
+ 3087: 0xBB7B,
+ 3088: 0xBB7C,
+ 3089: 0xBB7D,
+ 3090: 0xBB7E,
+ 3091: 0xBB7F,
+ 3092: 0xBB80,
+ 3093: 0xBB81,
+ 3094: 0xBB82,
+ 3095: 0xBB83,
+ 3096: 0xBB84,
+ 3097: 0xBB85,
+ 3098: 0xBB86,
+ 3099: 0xBB87,
+ 3100: 0xBB89,
+ 3101: 0xBB8A,
+ 3102: 0xBB8B,
+ 3103: 0xBB8D,
+ 3104: 0xBB8E,
+ 3105: 0xBB8F,
+ 3106: 0xBB91,
+ 3107: 0xBB92,
+ 3108: 0xBB93,
+ 3109: 0xBB94,
+ 3110: 0xBB95,
+ 3111: 0xBB96,
+ 3112: 0xBB97,
+ 3113: 0xBB98,
+ 3114: 0xBB99,
+ 3115: 0xBB9A,
+ 3116: 0xBB9B,
+ 3117: 0xBB9C,
+ 3118: 0xBB9D,
+ 3119: 0xBB9E,
+ 3120: 0xBB9F,
+ 3121: 0xBBA0,
+ 3122: 0xBBA1,
+ 3123: 0xBBA2,
+ 3124: 0xBBA3,
+ 3125: 0xBBA5,
+ 3126: 0xBBA6,
+ 3127: 0xBBA7,
+ 3128: 0xBBA9,
+ 3129: 0xBBAA,
+ 3130: 0xBBAB,
+ 3131: 0xBBAD,
+ 3132: 0xBBAE,
+ 3133: 0xBBAF,
+ 3134: 0xBBB0,
+ 3135: 0xBBB1,
+ 3136: 0xBBB2,
+ 3137: 0xBBB3,
+ 3138: 0xBBB5,
+ 3139: 0xBBB6,
+ 3140: 0xBBB8,
+ 3141: 0xBBB9,
+ 3142: 0xBBBA,
+ 3143: 0xBBBB,
+ 3144: 0xBBBC,
+ 3145: 0xBBBD,
+ 3146: 0xBBBE,
+ 3147: 0xBBBF,
+ 3148: 0xBBC1,
+ 3149: 0xBBC2,
+ 3150: 0xBBC3,
+ 3151: 0xBBC5,
+ 3152: 0xBBC6,
+ 3153: 0xBBC7,
+ 3154: 0xBBC9,
+ 3155: 0xBBCA,
+ 3156: 0xBBCB,
+ 3157: 0xBBCC,
+ 3158: 0xBBCD,
+ 3159: 0xBBCE,
+ 3160: 0xBBCF,
+ 3161: 0xBBD1,
+ 3162: 0xBBD2,
+ 3163: 0xBBD4,
+ 3164: 0xBBD5,
+ 3165: 0xBBD6,
+ 3166: 0xBBD7,
+ 3167: 0xBBD8,
+ 3168: 0xBBD9,
+ 3169: 0xBBDA,
+ 3170: 0xBBDB,
+ 3171: 0xBBDC,
+ 3172: 0xBBDD,
+ 3173: 0xBBDE,
+ 3174: 0xBBDF,
+ 3175: 0xBBE0,
+ 3176: 0xBBE1,
+ 3177: 0xBBE2,
+ 3178: 0xBBE3,
+ 3179: 0xBBE4,
+ 3180: 0xBBE5,
+ 3181: 0xBBE6,
+ 3182: 0xBBE7,
+ 3183: 0xBBE8,
+ 3184: 0xBBE9,
+ 3185: 0xBBEA,
+ 3186: 0xBBEB,
+ 3187: 0xBBEC,
+ 3188: 0xBBED,
+ 3189: 0xBBEE,
+ 3190: 0xBBEF,
+ 3191: 0xBBF0,
+ 3192: 0xBBF1,
+ 3193: 0xBBF2,
+ 3194: 0xBBF3,
+ 3195: 0xBBF4,
+ 3196: 0xBBF5,
+ 3197: 0xBBF6,
+ 3198: 0xBBF7,
+ 3199: 0xBBFA,
+ 3200: 0xBBFB,
+ 3201: 0xBBFD,
+ 3202: 0xBBFE,
+ 3203: 0xBC01,
+ 3204: 0xBC03,
+ 3205: 0xBC04,
+ 3206: 0xBC05,
+ 3207: 0xBC06,
+ 3208: 0xBC07,
+ 3209: 0xBC0A,
+ 3210: 0xBC0E,
+ 3211: 0xBC10,
+ 3212: 0xBC12,
+ 3213: 0xBC13,
+ 3214: 0xBC19,
+ 3215: 0xBC1A,
+ 3216: 0xBC20,
+ 3217: 0xBC21,
+ 3218: 0xBC22,
+ 3219: 0xBC23,
+ 3220: 0xBC26,
+ 3221: 0xBC28,
+ 3222: 0xBC2A,
+ 3223: 0xBC2B,
+ 3224: 0xBC2C,
+ 3225: 0xBC2E,
+ 3226: 0xBC2F,
+ 3227: 0xBC32,
+ 3228: 0xBC33,
+ 3229: 0xBC35,
+ 3230: 0xBC36,
+ 3231: 0xBC37,
+ 3232: 0xBC39,
+ 3233: 0xBC3A,
+ 3234: 0xBC3B,
+ 3235: 0xBC3C,
+ 3236: 0xBC3D,
+ 3237: 0xBC3E,
+ 3238: 0xBC3F,
+ 3239: 0xBC42,
+ 3240: 0xBC46,
+ 3241: 0xBC47,
+ 3242: 0xBC48,
+ 3243: 0xBC4A,
+ 3244: 0xBC4B,
+ 3245: 0xBC4E,
+ 3246: 0xBC4F,
+ 3247: 0xBC51,
+ 3248: 0xBC52,
+ 3249: 0xBC53,
+ 3250: 0xBC54,
+ 3251: 0xBC55,
+ 3252: 0xBC56,
+ 3253: 0xBC57,
+ 3254: 0xBC58,
+ 3255: 0xBC59,
+ 3256: 0xBC5A,
+ 3257: 0xBC5B,
+ 3258: 0xBC5C,
+ 3259: 0xBC5E,
+ 3260: 0xBC5F,
+ 3261: 0xBC60,
+ 3262: 0xBC61,
+ 3263: 0xBC62,
+ 3264: 0xBC63,
+ 3265: 0xBC64,
+ 3266: 0xBC65,
+ 3267: 0xBC66,
+ 3268: 0xBC67,
+ 3269: 0xBC68,
+ 3270: 0xBC69,
+ 3271: 0xBC6A,
+ 3272: 0xBC6B,
+ 3273: 0xBC6C,
+ 3274: 0xBC6D,
+ 3275: 0xBC6E,
+ 3276: 0xBC6F,
+ 3277: 0xBC70,
+ 3278: 0xBC71,
+ 3279: 0xBC72,
+ 3280: 0xBC73,
+ 3281: 0xBC74,
+ 3282: 0xBC75,
+ 3283: 0xBC76,
+ 3284: 0xBC77,
+ 3285: 0xBC78,
+ 3286: 0xBC79,
+ 3287: 0xBC7A,
+ 3288: 0xBC7B,
+ 3289: 0xBC7C,
+ 3290: 0xBC7D,
+ 3291: 0xBC7E,
+ 3292: 0xBC7F,
+ 3293: 0xBC80,
+ 3294: 0xBC81,
+ 3295: 0xBC82,
+ 3296: 0xBC83,
+ 3297: 0xBC86,
+ 3298: 0xBC87,
+ 3299: 0xBC89,
+ 3300: 0xBC8A,
+ 3301: 0xBC8D,
+ 3302: 0xBC8F,
+ 3303: 0xBC90,
+ 3304: 0xBC91,
+ 3305: 0xBC92,
+ 3306: 0xBC93,
+ 3307: 0xBC96,
+ 3308: 0xBC98,
+ 3309: 0xBC9B,
+ 3310: 0xBC9C,
+ 3311: 0xBC9D,
+ 3312: 0xBC9E,
+ 3313: 0xBC9F,
+ 3314: 0xBCA2,
+ 3315: 0xBCA3,
+ 3316: 0xBCA5,
+ 3317: 0xBCA6,
+ 3318: 0xBCA9,
+ 3319: 0xBCAA,
+ 3320: 0xBCAB,
+ 3321: 0xBCAC,
+ 3322: 0xBCAD,
+ 3323: 0xBCAE,
+ 3324: 0xBCAF,
+ 3325: 0xBCB2,
+ 3326: 0xBCB6,
+ 3327: 0xBCB7,
+ 3328: 0xBCB8,
+ 3329: 0xBCB9,
+ 3330: 0xBCBA,
+ 3331: 0xBCBB,
+ 3332: 0xBCBE,
+ 3333: 0xBCBF,
+ 3334: 0xBCC1,
+ 3335: 0xBCC2,
+ 3336: 0xBCC3,
+ 3337: 0xBCC5,
+ 3338: 0xBCC6,
+ 3339: 0xBCC7,
+ 3340: 0xBCC8,
+ 3341: 0xBCC9,
+ 3342: 0xBCCA,
+ 3343: 0xBCCB,
+ 3344: 0xBCCC,
+ 3345: 0xBCCE,
+ 3346: 0xBCD2,
+ 3347: 0xBCD3,
+ 3348: 0xBCD4,
+ 3349: 0xBCD6,
+ 3350: 0xBCD7,
+ 3351: 0xBCD9,
+ 3352: 0xBCDA,
+ 3353: 0xBCDB,
+ 3354: 0xBCDD,
+ 3355: 0xBCDE,
+ 3356: 0xBCDF,
+ 3357: 0xBCE0,
+ 3358: 0xBCE1,
+ 3359: 0xBCE2,
+ 3360: 0xBCE3,
+ 3361: 0xBCE4,
+ 3362: 0xBCE5,
+ 3363: 0xBCE6,
+ 3364: 0xBCE7,
+ 3365: 0xBCE8,
+ 3366: 0xBCE9,
+ 3367: 0xBCEA,
+ 3368: 0xBCEB,
+ 3369: 0xBCEC,
+ 3370: 0xBCED,
+ 3371: 0xBCEE,
+ 3372: 0xBCEF,
+ 3373: 0xBCF0,
+ 3374: 0xBCF1,
+ 3375: 0xBCF2,
+ 3376: 0xBCF3,
+ 3377: 0xBCF7,
+ 3378: 0xBCF9,
+ 3379: 0xBCFA,
+ 3380: 0xBCFB,
+ 3381: 0xBCFD,
+ 3382: 0xBCFE,
+ 3383: 0xBCFF,
+ 3384: 0xBD00,
+ 3385: 0xBD01,
+ 3386: 0xBD02,
+ 3387: 0xBD03,
+ 3388: 0xBD06,
+ 3389: 0xBD08,
+ 3390: 0xBD0A,
+ 3391: 0xBD0B,
+ 3392: 0xBD0C,
+ 3393: 0xBD0D,
+ 3394: 0xBD0E,
+ 3395: 0xBD0F,
+ 3396: 0xBD11,
+ 3397: 0xBD12,
+ 3398: 0xBD13,
+ 3399: 0xBD15,
+ 3400: 0xBD16,
+ 3401: 0xBD17,
+ 3402: 0xBD18,
+ 3403: 0xBD19,
+ 3404: 0xBD1A,
+ 3405: 0xBD1B,
+ 3406: 0xBD1C,
+ 3407: 0xBD1D,
+ 3408: 0xBD1E,
+ 3409: 0xBD1F,
+ 3410: 0xBD20,
+ 3411: 0xBD21,
+ 3412: 0xBD22,
+ 3413: 0xBD23,
+ 3414: 0xBD25,
+ 3415: 0xBD26,
+ 3416: 0xBD27,
+ 3417: 0xBD28,
+ 3418: 0xBD29,
+ 3419: 0xBD2A,
+ 3420: 0xBD2B,
+ 3421: 0xBD2D,
+ 3422: 0xBD2E,
+ 3423: 0xBD2F,
+ 3424: 0xBD30,
+ 3425: 0xBD31,
+ 3426: 0xBD32,
+ 3427: 0xBD33,
+ 3428: 0xBD34,
+ 3429: 0xBD35,
+ 3430: 0xBD36,
+ 3431: 0xBD37,
+ 3432: 0xBD38,
+ 3433: 0xBD39,
+ 3434: 0xBD3A,
+ 3435: 0xBD3B,
+ 3436: 0xBD3C,
+ 3437: 0xBD3D,
+ 3438: 0xBD3E,
+ 3439: 0xBD3F,
+ 3440: 0xBD41,
+ 3441: 0xBD42,
+ 3442: 0xBD43,
+ 3443: 0xBD44,
+ 3444: 0xBD45,
+ 3445: 0xBD46,
+ 3446: 0xBD47,
+ 3447: 0xBD4A,
+ 3448: 0xBD4B,
+ 3449: 0xBD4D,
+ 3450: 0xBD4E,
+ 3451: 0xBD4F,
+ 3452: 0xBD51,
+ 3453: 0xBD52,
+ 3454: 0xBD53,
+ 3455: 0xBD54,
+ 3456: 0xBD55,
+ 3457: 0xBD56,
+ 3458: 0xBD57,
+ 3459: 0xBD5A,
+ 3460: 0xBD5B,
+ 3461: 0xBD5C,
+ 3462: 0xBD5D,
+ 3463: 0xBD5E,
+ 3464: 0xBD5F,
+ 3465: 0xBD60,
+ 3466: 0xBD61,
+ 3467: 0xBD62,
+ 3468: 0xBD63,
+ 3469: 0xBD65,
+ 3470: 0xBD66,
+ 3471: 0xBD67,
+ 3472: 0xBD69,
+ 3473: 0xBD6A,
+ 3474: 0xBD6B,
+ 3475: 0xBD6C,
+ 3476: 0xBD6D,
+ 3477: 0xBD6E,
+ 3478: 0xBD6F,
+ 3479: 0xBD70,
+ 3480: 0xBD71,
+ 3481: 0xBD72,
+ 3482: 0xBD73,
+ 3483: 0xBD74,
+ 3484: 0xBD75,
+ 3485: 0xBD76,
+ 3486: 0xBD77,
+ 3487: 0xBD78,
+ 3488: 0xBD79,
+ 3489: 0xBD7A,
+ 3490: 0xBD7B,
+ 3491: 0xBD7C,
+ 3492: 0xBD7D,
+ 3493: 0xBD7E,
+ 3494: 0xBD7F,
+ 3495: 0xBD82,
+ 3496: 0xBD83,
+ 3497: 0xBD85,
+ 3498: 0xBD86,
+ 3499: 0xBD8B,
+ 3500: 0xBD8C,
+ 3501: 0xBD8D,
+ 3502: 0xBD8E,
+ 3503: 0xBD8F,
+ 3504: 0xBD92,
+ 3505: 0xBD94,
+ 3506: 0xBD96,
+ 3507: 0xBD97,
+ 3508: 0xBD98,
+ 3509: 0xBD9B,
+ 3510: 0xBD9D,
+ 3511: 0xBD9E,
+ 3512: 0xBD9F,
+ 3513: 0xBDA0,
+ 3514: 0xBDA1,
+ 3515: 0xBDA2,
+ 3516: 0xBDA3,
+ 3517: 0xBDA5,
+ 3518: 0xBDA6,
+ 3519: 0xBDA7,
+ 3520: 0xBDA8,
+ 3521: 0xBDA9,
+ 3522: 0xBDAA,
+ 3523: 0xBDAB,
+ 3524: 0xBDAC,
+ 3525: 0xBDAD,
+ 3526: 0xBDAE,
+ 3527: 0xBDAF,
+ 3528: 0xBDB1,
+ 3529: 0xBDB2,
+ 3530: 0xBDB3,
+ 3531: 0xBDB4,
+ 3532: 0xBDB5,
+ 3533: 0xBDB6,
+ 3534: 0xBDB7,
+ 3535: 0xBDB9,
+ 3536: 0xBDBA,
+ 3537: 0xBDBB,
+ 3538: 0xBDBC,
+ 3539: 0xBDBD,
+ 3540: 0xBDBE,
+ 3541: 0xBDBF,
+ 3542: 0xBDC0,
+ 3543: 0xBDC1,
+ 3544: 0xBDC2,
+ 3545: 0xBDC3,
+ 3546: 0xBDC4,
+ 3547: 0xBDC5,
+ 3548: 0xBDC6,
+ 3549: 0xBDC7,
+ 3550: 0xBDC8,
+ 3551: 0xBDC9,
+ 3552: 0xBDCA,
+ 3553: 0xBDCB,
+ 3554: 0xBDCC,
+ 3555: 0xBDCD,
+ 3556: 0xBDCE,
+ 3557: 0xBDCF,
+ 3558: 0xBDD0,
+ 3559: 0xBDD1,
+ 3560: 0xBDD2,
+ 3561: 0xBDD3,
+ 3562: 0xBDD6,
+ 3563: 0xBDD7,
+ 3564: 0xBDD9,
+ 3565: 0xBDDA,
+ 3566: 0xBDDB,
+ 3567: 0xBDDD,
+ 3568: 0xBDDE,
+ 3569: 0xBDDF,
+ 3570: 0xBDE0,
+ 3571: 0xBDE1,
+ 3572: 0xBDE2,
+ 3573: 0xBDE3,
+ 3574: 0xBDE4,
+ 3575: 0xBDE5,
+ 3576: 0xBDE6,
+ 3577: 0xBDE7,
+ 3578: 0xBDE8,
+ 3579: 0xBDEA,
+ 3580: 0xBDEB,
+ 3581: 0xBDEC,
+ 3582: 0xBDED,
+ 3583: 0xBDEE,
+ 3584: 0xBDEF,
+ 3585: 0xBDF1,
+ 3586: 0xBDF2,
+ 3587: 0xBDF3,
+ 3588: 0xBDF5,
+ 3589: 0xBDF6,
+ 3590: 0xBDF7,
+ 3591: 0xBDF9,
+ 3592: 0xBDFA,
+ 3593: 0xBDFB,
+ 3594: 0xBDFC,
+ 3595: 0xBDFD,
+ 3596: 0xBDFE,
+ 3597: 0xBDFF,
+ 3598: 0xBE01,
+ 3599: 0xBE02,
+ 3600: 0xBE04,
+ 3601: 0xBE06,
+ 3602: 0xBE07,
+ 3603: 0xBE08,
+ 3604: 0xBE09,
+ 3605: 0xBE0A,
+ 3606: 0xBE0B,
+ 3607: 0xBE0E,
+ 3608: 0xBE0F,
+ 3609: 0xBE11,
+ 3610: 0xBE12,
+ 3611: 0xBE13,
+ 3612: 0xBE15,
+ 3613: 0xBE16,
+ 3614: 0xBE17,
+ 3615: 0xBE18,
+ 3616: 0xBE19,
+ 3617: 0xBE1A,
+ 3618: 0xBE1B,
+ 3619: 0xBE1E,
+ 3620: 0xBE20,
+ 3621: 0xBE21,
+ 3622: 0xBE22,
+ 3623: 0xBE23,
+ 3624: 0xBE24,
+ 3625: 0xBE25,
+ 3626: 0xBE26,
+ 3627: 0xBE27,
+ 3628: 0xBE28,
+ 3629: 0xBE29,
+ 3630: 0xBE2A,
+ 3631: 0xBE2B,
+ 3632: 0xBE2C,
+ 3633: 0xBE2D,
+ 3634: 0xBE2E,
+ 3635: 0xBE2F,
+ 3636: 0xBE30,
+ 3637: 0xBE31,
+ 3638: 0xBE32,
+ 3639: 0xBE33,
+ 3640: 0xBE34,
+ 3641: 0xBE35,
+ 3642: 0xBE36,
+ 3643: 0xBE37,
+ 3644: 0xBE38,
+ 3645: 0xBE39,
+ 3646: 0xBE3A,
+ 3647: 0xBE3B,
+ 3648: 0xBE3C,
+ 3649: 0xBE3D,
+ 3650: 0xBE3E,
+ 3651: 0xBE3F,
+ 3652: 0xBE40,
+ 3653: 0xBE41,
+ 3654: 0xBE42,
+ 3655: 0xBE43,
+ 3656: 0xBE46,
+ 3657: 0xBE47,
+ 3658: 0xBE49,
+ 3659: 0xBE4A,
+ 3660: 0xBE4B,
+ 3661: 0xBE4D,
+ 3662: 0xBE4F,
+ 3663: 0xBE50,
+ 3664: 0xBE51,
+ 3665: 0xBE52,
+ 3666: 0xBE53,
+ 3667: 0xBE56,
+ 3668: 0xBE58,
+ 3669: 0xBE5C,
+ 3670: 0xBE5D,
+ 3671: 0xBE5E,
+ 3672: 0xBE5F,
+ 3673: 0xBE62,
+ 3674: 0xBE63,
+ 3675: 0xBE65,
+ 3676: 0xBE66,
+ 3677: 0xBE67,
+ 3678: 0xBE69,
+ 3679: 0xBE6B,
+ 3680: 0xBE6C,
+ 3681: 0xBE6D,
+ 3682: 0xBE6E,
+ 3683: 0xBE6F,
+ 3684: 0xBE72,
+ 3685: 0xBE76,
+ 3686: 0xBE77,
+ 3687: 0xBE78,
+ 3688: 0xBE79,
+ 3689: 0xBE7A,
+ 3690: 0xBE7E,
+ 3691: 0xBE7F,
+ 3692: 0xBE81,
+ 3693: 0xBE82,
+ 3694: 0xBE83,
+ 3695: 0xBE85,
+ 3696: 0xBE86,
+ 3697: 0xBE87,
+ 3698: 0xBE88,
+ 3699: 0xBE89,
+ 3700: 0xBE8A,
+ 3701: 0xBE8B,
+ 3702: 0xBE8E,
+ 3703: 0xBE92,
+ 3704: 0xBE93,
+ 3705: 0xBE94,
+ 3706: 0xBE95,
+ 3707: 0xBE96,
+ 3708: 0xBE97,
+ 3709: 0xBE9A,
+ 3710: 0xBE9B,
+ 3711: 0xBE9C,
+ 3712: 0xBE9D,
+ 3713: 0xBE9E,
+ 3714: 0xBE9F,
+ 3715: 0xBEA0,
+ 3716: 0xBEA1,
+ 3717: 0xBEA2,
+ 3718: 0xBEA3,
+ 3719: 0xBEA4,
+ 3720: 0xBEA5,
+ 3721: 0xBEA6,
+ 3722: 0xBEA7,
+ 3723: 0xBEA9,
+ 3724: 0xBEAA,
+ 3725: 0xBEAB,
+ 3726: 0xBEAC,
+ 3727: 0xBEAD,
+ 3728: 0xBEAE,
+ 3729: 0xBEAF,
+ 3730: 0xBEB0,
+ 3731: 0xBEB1,
+ 3732: 0xBEB2,
+ 3733: 0xBEB3,
+ 3734: 0xBEB4,
+ 3735: 0xBEB5,
+ 3736: 0xBEB6,
+ 3737: 0xBEB7,
+ 3738: 0xBEB8,
+ 3739: 0xBEB9,
+ 3740: 0xBEBA,
+ 3741: 0xBEBB,
+ 3742: 0xBEBC,
+ 3743: 0xBEBD,
+ 3744: 0xBEBE,
+ 3745: 0xBEBF,
+ 3746: 0xBEC0,
+ 3747: 0xBEC1,
+ 3748: 0xBEC2,
+ 3749: 0xBEC3,
+ 3750: 0xBEC4,
+ 3751: 0xBEC5,
+ 3752: 0xBEC6,
+ 3753: 0xBEC7,
+ 3754: 0xBEC8,
+ 3755: 0xBEC9,
+ 3756: 0xBECA,
+ 3757: 0xBECB,
+ 3758: 0xBECC,
+ 3759: 0xBECD,
+ 3760: 0xBECE,
+ 3761: 0xBECF,
+ 3762: 0xBED2,
+ 3763: 0xBED3,
+ 3764: 0xBED5,
+ 3765: 0xBED6,
+ 3766: 0xBED9,
+ 3767: 0xBEDA,
+ 3768: 0xBEDB,
+ 3769: 0xBEDC,
+ 3770: 0xBEDD,
+ 3771: 0xBEDE,
+ 3772: 0xBEDF,
+ 3773: 0xBEE1,
+ 3774: 0xBEE2,
+ 3775: 0xBEE6,
+ 3776: 0xBEE7,
+ 3777: 0xBEE8,
+ 3778: 0xBEE9,
+ 3779: 0xBEEA,
+ 3780: 0xBEEB,
+ 3781: 0xBEED,
+ 3782: 0xBEEE,
+ 3783: 0xBEEF,
+ 3784: 0xBEF0,
+ 3785: 0xBEF1,
+ 3786: 0xBEF2,
+ 3787: 0xBEF3,
+ 3788: 0xBEF4,
+ 3789: 0xBEF5,
+ 3790: 0xBEF6,
+ 3791: 0xBEF7,
+ 3792: 0xBEF8,
+ 3793: 0xBEF9,
+ 3794: 0xBEFA,
+ 3795: 0xBEFB,
+ 3796: 0xBEFC,
+ 3797: 0xBEFD,
+ 3798: 0xBEFE,
+ 3799: 0xBEFF,
+ 3800: 0xBF00,
+ 3801: 0xBF02,
+ 3802: 0xBF03,
+ 3803: 0xBF04,
+ 3804: 0xBF05,
+ 3805: 0xBF06,
+ 3806: 0xBF07,
+ 3807: 0xBF0A,
+ 3808: 0xBF0B,
+ 3809: 0xBF0C,
+ 3810: 0xBF0D,
+ 3811: 0xBF0E,
+ 3812: 0xBF0F,
+ 3813: 0xBF10,
+ 3814: 0xBF11,
+ 3815: 0xBF12,
+ 3816: 0xBF13,
+ 3817: 0xBF14,
+ 3818: 0xBF15,
+ 3819: 0xBF16,
+ 3820: 0xBF17,
+ 3821: 0xBF1A,
+ 3822: 0xBF1E,
+ 3823: 0xBF1F,
+ 3824: 0xBF20,
+ 3825: 0xBF21,
+ 3826: 0xBF22,
+ 3827: 0xBF23,
+ 3828: 0xBF24,
+ 3829: 0xBF25,
+ 3830: 0xBF26,
+ 3831: 0xBF27,
+ 3832: 0xBF28,
+ 3833: 0xBF29,
+ 3834: 0xBF2A,
+ 3835: 0xBF2B,
+ 3836: 0xBF2C,
+ 3837: 0xBF2D,
+ 3838: 0xBF2E,
+ 3839: 0xBF2F,
+ 3840: 0xBF30,
+ 3841: 0xBF31,
+ 3842: 0xBF32,
+ 3843: 0xBF33,
+ 3844: 0xBF34,
+ 3845: 0xBF35,
+ 3846: 0xBF36,
+ 3847: 0xBF37,
+ 3848: 0xBF38,
+ 3849: 0xBF39,
+ 3850: 0xBF3A,
+ 3851: 0xBF3B,
+ 3852: 0xBF3C,
+ 3853: 0xBF3D,
+ 3854: 0xBF3E,
+ 3855: 0xBF3F,
+ 3856: 0xBF42,
+ 3857: 0xBF43,
+ 3858: 0xBF45,
+ 3859: 0xBF46,
+ 3860: 0xBF47,
+ 3861: 0xBF49,
+ 3862: 0xBF4A,
+ 3863: 0xBF4B,
+ 3864: 0xBF4C,
+ 3865: 0xBF4D,
+ 3866: 0xBF4E,
+ 3867: 0xBF4F,
+ 3868: 0xBF52,
+ 3869: 0xBF53,
+ 3870: 0xBF54,
+ 3871: 0xBF56,
+ 3872: 0xBF57,
+ 3873: 0xBF58,
+ 3874: 0xBF59,
+ 3875: 0xBF5A,
+ 3876: 0xBF5B,
+ 3877: 0xBF5C,
+ 3878: 0xBF5D,
+ 3879: 0xBF5E,
+ 3880: 0xBF5F,
+ 3881: 0xBF60,
+ 3882: 0xBF61,
+ 3883: 0xBF62,
+ 3884: 0xBF63,
+ 3885: 0xBF64,
+ 3886: 0xBF65,
+ 3887: 0xBF66,
+ 3888: 0xBF67,
+ 3889: 0xBF68,
+ 3890: 0xBF69,
+ 3891: 0xBF6A,
+ 3892: 0xBF6B,
+ 3893: 0xBF6C,
+ 3894: 0xBF6D,
+ 3895: 0xBF6E,
+ 3896: 0xBF6F,
+ 3897: 0xBF70,
+ 3898: 0xBF71,
+ 3899: 0xBF72,
+ 3900: 0xBF73,
+ 3901: 0xBF74,
+ 3902: 0xBF75,
+ 3903: 0xBF76,
+ 3904: 0xBF77,
+ 3905: 0xBF78,
+ 3906: 0xBF79,
+ 3907: 0xBF7A,
+ 3908: 0xBF7B,
+ 3909: 0xBF7C,
+ 3910: 0xBF7D,
+ 3911: 0xBF7E,
+ 3912: 0xBF7F,
+ 3913: 0xBF80,
+ 3914: 0xBF81,
+ 3915: 0xBF82,
+ 3916: 0xBF83,
+ 3917: 0xBF84,
+ 3918: 0xBF85,
+ 3919: 0xBF86,
+ 3920: 0xBF87,
+ 3921: 0xBF88,
+ 3922: 0xBF89,
+ 3923: 0xBF8A,
+ 3924: 0xBF8B,
+ 3925: 0xBF8C,
+ 3926: 0xBF8D,
+ 3927: 0xBF8E,
+ 3928: 0xBF8F,
+ 3929: 0xBF90,
+ 3930: 0xBF91,
+ 3931: 0xBF92,
+ 3932: 0xBF93,
+ 3933: 0xBF95,
+ 3934: 0xBF96,
+ 3935: 0xBF97,
+ 3936: 0xBF98,
+ 3937: 0xBF99,
+ 3938: 0xBF9A,
+ 3939: 0xBF9B,
+ 3940: 0xBF9C,
+ 3941: 0xBF9D,
+ 3942: 0xBF9E,
+ 3943: 0xBF9F,
+ 3944: 0xBFA0,
+ 3945: 0xBFA1,
+ 3946: 0xBFA2,
+ 3947: 0xBFA3,
+ 3948: 0xBFA4,
+ 3949: 0xBFA5,
+ 3950: 0xBFA6,
+ 3951: 0xBFA7,
+ 3952: 0xBFA8,
+ 3953: 0xBFA9,
+ 3954: 0xBFAA,
+ 3955: 0xBFAB,
+ 3956: 0xBFAC,
+ 3957: 0xBFAD,
+ 3958: 0xBFAE,
+ 3959: 0xBFAF,
+ 3960: 0xBFB1,
+ 3961: 0xBFB2,
+ 3962: 0xBFB3,
+ 3963: 0xBFB4,
+ 3964: 0xBFB5,
+ 3965: 0xBFB6,
+ 3966: 0xBFB7,
+ 3967: 0xBFB8,
+ 3968: 0xBFB9,
+ 3969: 0xBFBA,
+ 3970: 0xBFBB,
+ 3971: 0xBFBC,
+ 3972: 0xBFBD,
+ 3973: 0xBFBE,
+ 3974: 0xBFBF,
+ 3975: 0xBFC0,
+ 3976: 0xBFC1,
+ 3977: 0xBFC2,
+ 3978: 0xBFC3,
+ 3979: 0xBFC4,
+ 3980: 0xBFC6,
+ 3981: 0xBFC7,
+ 3982: 0xBFC8,
+ 3983: 0xBFC9,
+ 3984: 0xBFCA,
+ 3985: 0xBFCB,
+ 3986: 0xBFCE,
+ 3987: 0xBFCF,
+ 3988: 0xBFD1,
+ 3989: 0xBFD2,
+ 3990: 0xBFD3,
+ 3991: 0xBFD5,
+ 3992: 0xBFD6,
+ 3993: 0xBFD7,
+ 3994: 0xBFD8,
+ 3995: 0xBFD9,
+ 3996: 0xBFDA,
+ 3997: 0xBFDB,
+ 3998: 0xBFDD,
+ 3999: 0xBFDE,
+ 4000: 0xBFE0,
+ 4001: 0xBFE2,
+ 4002: 0xBFE3,
+ 4003: 0xBFE4,
+ 4004: 0xBFE5,
+ 4005: 0xBFE6,
+ 4006: 0xBFE7,
+ 4007: 0xBFE8,
+ 4008: 0xBFE9,
+ 4009: 0xBFEA,
+ 4010: 0xBFEB,
+ 4011: 0xBFEC,
+ 4012: 0xBFED,
+ 4013: 0xBFEE,
+ 4014: 0xBFEF,
+ 4015: 0xBFF0,
+ 4016: 0xBFF1,
+ 4017: 0xBFF2,
+ 4018: 0xBFF3,
+ 4019: 0xBFF4,
+ 4020: 0xBFF5,
+ 4021: 0xBFF6,
+ 4022: 0xBFF7,
+ 4023: 0xBFF8,
+ 4024: 0xBFF9,
+ 4025: 0xBFFA,
+ 4026: 0xBFFB,
+ 4027: 0xBFFC,
+ 4028: 0xBFFD,
+ 4029: 0xBFFE,
+ 4030: 0xBFFF,
+ 4031: 0xC000,
+ 4032: 0xC001,
+ 4033: 0xC002,
+ 4034: 0xC003,
+ 4035: 0xC004,
+ 4036: 0xC005,
+ 4037: 0xC006,
+ 4038: 0xC007,
+ 4039: 0xC008,
+ 4040: 0xC009,
+ 4041: 0xC00A,
+ 4042: 0xC00B,
+ 4043: 0xC00C,
+ 4044: 0xC00D,
+ 4045: 0xC00E,
+ 4046: 0xC00F,
+ 4047: 0xC010,
+ 4048: 0xC011,
+ 4049: 0xC012,
+ 4050: 0xC013,
+ 4051: 0xC014,
+ 4052: 0xC015,
+ 4053: 0xC016,
+ 4054: 0xC017,
+ 4055: 0xC018,
+ 4056: 0xC019,
+ 4057: 0xC01A,
+ 4058: 0xC01B,
+ 4059: 0xC01C,
+ 4060: 0xC01D,
+ 4061: 0xC01E,
+ 4062: 0xC01F,
+ 4063: 0xC020,
+ 4064: 0xC021,
+ 4065: 0xC022,
+ 4066: 0xC023,
+ 4067: 0xC024,
+ 4068: 0xC025,
+ 4069: 0xC026,
+ 4070: 0xC027,
+ 4071: 0xC028,
+ 4072: 0xC029,
+ 4073: 0xC02A,
+ 4074: 0xC02B,
+ 4075: 0xC02C,
+ 4076: 0xC02D,
+ 4077: 0xC02E,
+ 4078: 0xC02F,
+ 4079: 0xC030,
+ 4080: 0xC031,
+ 4081: 0xC032,
+ 4082: 0xC033,
+ 4083: 0xC034,
+ 4084: 0xC035,
+ 4085: 0xC036,
+ 4086: 0xC037,
+ 4087: 0xC038,
+ 4088: 0xC039,
+ 4089: 0xC03A,
+ 4090: 0xC03B,
+ 4091: 0xC03D,
+ 4092: 0xC03E,
+ 4093: 0xC03F,
+ 4094: 0xC040,
+ 4095: 0xC041,
+ 4096: 0xC042,
+ 4097: 0xC043,
+ 4098: 0xC044,
+ 4099: 0xC045,
+ 4100: 0xC046,
+ 4101: 0xC047,
+ 4102: 0xC048,
+ 4103: 0xC049,
+ 4104: 0xC04A,
+ 4105: 0xC04B,
+ 4106: 0xC04C,
+ 4107: 0xC04D,
+ 4108: 0xC04E,
+ 4109: 0xC04F,
+ 4110: 0xC050,
+ 4111: 0xC052,
+ 4112: 0xC053,
+ 4113: 0xC054,
+ 4114: 0xC055,
+ 4115: 0xC056,
+ 4116: 0xC057,
+ 4117: 0xC059,
+ 4118: 0xC05A,
+ 4119: 0xC05B,
+ 4120: 0xC05D,
+ 4121: 0xC05E,
+ 4122: 0xC05F,
+ 4123: 0xC061,
+ 4124: 0xC062,
+ 4125: 0xC063,
+ 4126: 0xC064,
+ 4127: 0xC065,
+ 4128: 0xC066,
+ 4129: 0xC067,
+ 4130: 0xC06A,
+ 4131: 0xC06B,
+ 4132: 0xC06C,
+ 4133: 0xC06D,
+ 4134: 0xC06E,
+ 4135: 0xC06F,
+ 4136: 0xC070,
+ 4137: 0xC071,
+ 4138: 0xC072,
+ 4139: 0xC073,
+ 4140: 0xC074,
+ 4141: 0xC075,
+ 4142: 0xC076,
+ 4143: 0xC077,
+ 4144: 0xC078,
+ 4145: 0xC079,
+ 4146: 0xC07A,
+ 4147: 0xC07B,
+ 4148: 0xC07C,
+ 4149: 0xC07D,
+ 4150: 0xC07E,
+ 4151: 0xC07F,
+ 4152: 0xC080,
+ 4153: 0xC081,
+ 4154: 0xC082,
+ 4155: 0xC083,
+ 4156: 0xC084,
+ 4157: 0xC085,
+ 4158: 0xC086,
+ 4159: 0xC087,
+ 4160: 0xC088,
+ 4161: 0xC089,
+ 4162: 0xC08A,
+ 4163: 0xC08B,
+ 4164: 0xC08C,
+ 4165: 0xC08D,
+ 4166: 0xC08E,
+ 4167: 0xC08F,
+ 4168: 0xC092,
+ 4169: 0xC093,
+ 4170: 0xC095,
+ 4171: 0xC096,
+ 4172: 0xC097,
+ 4173: 0xC099,
+ 4174: 0xC09A,
+ 4175: 0xC09B,
+ 4176: 0xC09C,
+ 4177: 0xC09D,
+ 4178: 0xC09E,
+ 4179: 0xC09F,
+ 4180: 0xC0A2,
+ 4181: 0xC0A4,
+ 4182: 0xC0A6,
+ 4183: 0xC0A7,
+ 4184: 0xC0A8,
+ 4185: 0xC0A9,
+ 4186: 0xC0AA,
+ 4187: 0xC0AB,
+ 4188: 0xC0AE,
+ 4189: 0xC0B1,
+ 4190: 0xC0B2,
+ 4191: 0xC0B7,
+ 4192: 0xC0B8,
+ 4193: 0xC0B9,
+ 4194: 0xC0BA,
+ 4195: 0xC0BB,
+ 4196: 0xC0BE,
+ 4197: 0xC0C2,
+ 4198: 0xC0C3,
+ 4199: 0xC0C4,
+ 4200: 0xC0C6,
+ 4201: 0xC0C7,
+ 4202: 0xC0CA,
+ 4203: 0xC0CB,
+ 4204: 0xC0CD,
+ 4205: 0xC0CE,
+ 4206: 0xC0CF,
+ 4207: 0xC0D1,
+ 4208: 0xC0D2,
+ 4209: 0xC0D3,
+ 4210: 0xC0D4,
+ 4211: 0xC0D5,
+ 4212: 0xC0D6,
+ 4213: 0xC0D7,
+ 4214: 0xC0DA,
+ 4215: 0xC0DE,
+ 4216: 0xC0DF,
+ 4217: 0xC0E0,
+ 4218: 0xC0E1,
+ 4219: 0xC0E2,
+ 4220: 0xC0E3,
+ 4221: 0xC0E6,
+ 4222: 0xC0E7,
+ 4223: 0xC0E9,
+ 4224: 0xC0EA,
+ 4225: 0xC0EB,
+ 4226: 0xC0ED,
+ 4227: 0xC0EE,
+ 4228: 0xC0EF,
+ 4229: 0xC0F0,
+ 4230: 0xC0F1,
+ 4231: 0xC0F2,
+ 4232: 0xC0F3,
+ 4233: 0xC0F6,
+ 4234: 0xC0F8,
+ 4235: 0xC0FA,
+ 4236: 0xC0FB,
+ 4237: 0xC0FC,
+ 4238: 0xC0FD,
+ 4239: 0xC0FE,
+ 4240: 0xC0FF,
+ 4241: 0xC101,
+ 4242: 0xC102,
+ 4243: 0xC103,
+ 4244: 0xC105,
+ 4245: 0xC106,
+ 4246: 0xC107,
+ 4247: 0xC109,
+ 4248: 0xC10A,
+ 4249: 0xC10B,
+ 4250: 0xC10C,
+ 4251: 0xC10D,
+ 4252: 0xC10E,
+ 4253: 0xC10F,
+ 4254: 0xC111,
+ 4255: 0xC112,
+ 4256: 0xC113,
+ 4257: 0xC114,
+ 4258: 0xC116,
+ 4259: 0xC117,
+ 4260: 0xC118,
+ 4261: 0xC119,
+ 4262: 0xC11A,
+ 4263: 0xC11B,
+ 4264: 0xC121,
+ 4265: 0xC122,
+ 4266: 0xC125,
+ 4267: 0xC128,
+ 4268: 0xC129,
+ 4269: 0xC12A,
+ 4270: 0xC12B,
+ 4271: 0xC12E,
+ 4272: 0xC132,
+ 4273: 0xC133,
+ 4274: 0xC134,
+ 4275: 0xC135,
+ 4276: 0xC137,
+ 4277: 0xC13A,
+ 4278: 0xC13B,
+ 4279: 0xC13D,
+ 4280: 0xC13E,
+ 4281: 0xC13F,
+ 4282: 0xC141,
+ 4283: 0xC142,
+ 4284: 0xC143,
+ 4285: 0xC144,
+ 4286: 0xC145,
+ 4287: 0xC146,
+ 4288: 0xC147,
+ 4289: 0xC14A,
+ 4290: 0xC14E,
+ 4291: 0xC14F,
+ 4292: 0xC150,
+ 4293: 0xC151,
+ 4294: 0xC152,
+ 4295: 0xC153,
+ 4296: 0xC156,
+ 4297: 0xC157,
+ 4298: 0xC159,
+ 4299: 0xC15A,
+ 4300: 0xC15B,
+ 4301: 0xC15D,
+ 4302: 0xC15E,
+ 4303: 0xC15F,
+ 4304: 0xC160,
+ 4305: 0xC161,
+ 4306: 0xC162,
+ 4307: 0xC163,
+ 4308: 0xC166,
+ 4309: 0xC16A,
+ 4310: 0xC16B,
+ 4311: 0xC16C,
+ 4312: 0xC16D,
+ 4313: 0xC16E,
+ 4314: 0xC16F,
+ 4315: 0xC171,
+ 4316: 0xC172,
+ 4317: 0xC173,
+ 4318: 0xC175,
+ 4319: 0xC176,
+ 4320: 0xC177,
+ 4321: 0xC179,
+ 4322: 0xC17A,
+ 4323: 0xC17B,
+ 4324: 0xC17C,
+ 4325: 0xC17D,
+ 4326: 0xC17E,
+ 4327: 0xC17F,
+ 4328: 0xC180,
+ 4329: 0xC181,
+ 4330: 0xC182,
+ 4331: 0xC183,
+ 4332: 0xC184,
+ 4333: 0xC186,
+ 4334: 0xC187,
+ 4335: 0xC188,
+ 4336: 0xC189,
+ 4337: 0xC18A,
+ 4338: 0xC18B,
+ 4339: 0xC18F,
+ 4340: 0xC191,
+ 4341: 0xC192,
+ 4342: 0xC193,
+ 4343: 0xC195,
+ 4344: 0xC197,
+ 4345: 0xC198,
+ 4346: 0xC199,
+ 4347: 0xC19A,
+ 4348: 0xC19B,
+ 4349: 0xC19E,
+ 4350: 0xC1A0,
+ 4351: 0xC1A2,
+ 4352: 0xC1A3,
+ 4353: 0xC1A4,
+ 4354: 0xC1A6,
+ 4355: 0xC1A7,
+ 4356: 0xC1AA,
+ 4357: 0xC1AB,
+ 4358: 0xC1AD,
+ 4359: 0xC1AE,
+ 4360: 0xC1AF,
+ 4361: 0xC1B1,
+ 4362: 0xC1B2,
+ 4363: 0xC1B3,
+ 4364: 0xC1B4,
+ 4365: 0xC1B5,
+ 4366: 0xC1B6,
+ 4367: 0xC1B7,
+ 4368: 0xC1B8,
+ 4369: 0xC1B9,
+ 4370: 0xC1BA,
+ 4371: 0xC1BB,
+ 4372: 0xC1BC,
+ 4373: 0xC1BE,
+ 4374: 0xC1BF,
+ 4375: 0xC1C0,
+ 4376: 0xC1C1,
+ 4377: 0xC1C2,
+ 4378: 0xC1C3,
+ 4379: 0xC1C5,
+ 4380: 0xC1C6,
+ 4381: 0xC1C7,
+ 4382: 0xC1C9,
+ 4383: 0xC1CA,
+ 4384: 0xC1CB,
+ 4385: 0xC1CD,
+ 4386: 0xC1CE,
+ 4387: 0xC1CF,
+ 4388: 0xC1D0,
+ 4389: 0xC1D1,
+ 4390: 0xC1D2,
+ 4391: 0xC1D3,
+ 4392: 0xC1D5,
+ 4393: 0xC1D6,
+ 4394: 0xC1D9,
+ 4395: 0xC1DA,
+ 4396: 0xC1DB,
+ 4397: 0xC1DC,
+ 4398: 0xC1DD,
+ 4399: 0xC1DE,
+ 4400: 0xC1DF,
+ 4401: 0xC1E1,
+ 4402: 0xC1E2,
+ 4403: 0xC1E3,
+ 4404: 0xC1E5,
+ 4405: 0xC1E6,
+ 4406: 0xC1E7,
+ 4407: 0xC1E9,
+ 4408: 0xC1EA,
+ 4409: 0xC1EB,
+ 4410: 0xC1EC,
+ 4411: 0xC1ED,
+ 4412: 0xC1EE,
+ 4413: 0xC1EF,
+ 4414: 0xC1F2,
+ 4415: 0xC1F4,
+ 4416: 0xC1F5,
+ 4417: 0xC1F6,
+ 4418: 0xC1F7,
+ 4419: 0xC1F8,
+ 4420: 0xC1F9,
+ 4421: 0xC1FA,
+ 4422: 0xC1FB,
+ 4423: 0xC1FE,
+ 4424: 0xC1FF,
+ 4425: 0xC201,
+ 4426: 0xC202,
+ 4427: 0xC203,
+ 4428: 0xC205,
+ 4429: 0xC206,
+ 4430: 0xC207,
+ 4431: 0xC208,
+ 4432: 0xC209,
+ 4433: 0xC20A,
+ 4434: 0xC20B,
+ 4435: 0xC20E,
+ 4436: 0xC210,
+ 4437: 0xC212,
+ 4438: 0xC213,
+ 4439: 0xC214,
+ 4440: 0xC215,
+ 4441: 0xC216,
+ 4442: 0xC217,
+ 4443: 0xC21A,
+ 4444: 0xC21B,
+ 4445: 0xC21D,
+ 4446: 0xC21E,
+ 4447: 0xC221,
+ 4448: 0xC222,
+ 4449: 0xC223,
+ 4450: 0xC224,
+ 4451: 0xC225,
+ 4452: 0xC226,
+ 4453: 0xC227,
+ 4454: 0xC22A,
+ 4455: 0xC22C,
+ 4456: 0xC22E,
+ 4457: 0xC230,
+ 4458: 0xC233,
+ 4459: 0xC235,
+ 4460: 0xC236,
+ 4461: 0xC237,
+ 4462: 0xC238,
+ 4463: 0xC239,
+ 4464: 0xC23A,
+ 4465: 0xC23B,
+ 4466: 0xC23C,
+ 4467: 0xC23D,
+ 4468: 0xC23E,
+ 4469: 0xC23F,
+ 4470: 0xC240,
+ 4471: 0xC241,
+ 4472: 0xC242,
+ 4473: 0xC243,
+ 4474: 0xC244,
+ 4475: 0xC245,
+ 4476: 0xC246,
+ 4477: 0xC247,
+ 4478: 0xC249,
+ 4479: 0xC24A,
+ 4480: 0xC24B,
+ 4481: 0xC24C,
+ 4482: 0xC24D,
+ 4483: 0xC24E,
+ 4484: 0xC24F,
+ 4485: 0xC252,
+ 4486: 0xC253,
+ 4487: 0xC255,
+ 4488: 0xC256,
+ 4489: 0xC257,
+ 4490: 0xC259,
+ 4491: 0xC25A,
+ 4492: 0xC25B,
+ 4493: 0xC25C,
+ 4494: 0xC25D,
+ 4495: 0xC25E,
+ 4496: 0xC25F,
+ 4497: 0xC261,
+ 4498: 0xC262,
+ 4499: 0xC263,
+ 4500: 0xC264,
+ 4501: 0xC266,
+ 4502: 0xC267,
+ 4503: 0xC268,
+ 4504: 0xC269,
+ 4505: 0xC26A,
+ 4506: 0xC26B,
+ 4507: 0xC26E,
+ 4508: 0xC26F,
+ 4509: 0xC271,
+ 4510: 0xC272,
+ 4511: 0xC273,
+ 4512: 0xC275,
+ 4513: 0xC276,
+ 4514: 0xC277,
+ 4515: 0xC278,
+ 4516: 0xC279,
+ 4517: 0xC27A,
+ 4518: 0xC27B,
+ 4519: 0xC27E,
+ 4520: 0xC280,
+ 4521: 0xC282,
+ 4522: 0xC283,
+ 4523: 0xC284,
+ 4524: 0xC285,
+ 4525: 0xC286,
+ 4526: 0xC287,
+ 4527: 0xC28A,
+ 4528: 0xC28B,
+ 4529: 0xC28C,
+ 4530: 0xC28D,
+ 4531: 0xC28E,
+ 4532: 0xC28F,
+ 4533: 0xC291,
+ 4534: 0xC292,
+ 4535: 0xC293,
+ 4536: 0xC294,
+ 4537: 0xC295,
+ 4538: 0xC296,
+ 4539: 0xC297,
+ 4540: 0xC299,
+ 4541: 0xC29A,
+ 4542: 0xC29C,
+ 4543: 0xC29E,
+ 4544: 0xC29F,
+ 4545: 0xC2A0,
+ 4546: 0xC2A1,
+ 4547: 0xC2A2,
+ 4548: 0xC2A3,
+ 4549: 0xC2A6,
+ 4550: 0xC2A7,
+ 4551: 0xC2A9,
+ 4552: 0xC2AA,
+ 4553: 0xC2AB,
+ 4554: 0xC2AE,
+ 4555: 0xC2AF,
+ 4556: 0xC2B0,
+ 4557: 0xC2B1,
+ 4558: 0xC2B2,
+ 4559: 0xC2B3,
+ 4560: 0xC2B6,
+ 4561: 0xC2B8,
+ 4562: 0xC2BA,
+ 4563: 0xC2BB,
+ 4564: 0xC2BC,
+ 4565: 0xC2BD,
+ 4566: 0xC2BE,
+ 4567: 0xC2BF,
+ 4568: 0xC2C0,
+ 4569: 0xC2C1,
+ 4570: 0xC2C2,
+ 4571: 0xC2C3,
+ 4572: 0xC2C4,
+ 4573: 0xC2C5,
+ 4574: 0xC2C6,
+ 4575: 0xC2C7,
+ 4576: 0xC2C8,
+ 4577: 0xC2C9,
+ 4578: 0xC2CA,
+ 4579: 0xC2CB,
+ 4580: 0xC2CC,
+ 4581: 0xC2CD,
+ 4582: 0xC2CE,
+ 4583: 0xC2CF,
+ 4584: 0xC2D0,
+ 4585: 0xC2D1,
+ 4586: 0xC2D2,
+ 4587: 0xC2D3,
+ 4588: 0xC2D4,
+ 4589: 0xC2D5,
+ 4590: 0xC2D6,
+ 4591: 0xC2D7,
+ 4592: 0xC2D8,
+ 4593: 0xC2D9,
+ 4594: 0xC2DA,
+ 4595: 0xC2DB,
+ 4596: 0xC2DE,
+ 4597: 0xC2DF,
+ 4598: 0xC2E1,
+ 4599: 0xC2E2,
+ 4600: 0xC2E5,
+ 4601: 0xC2E6,
+ 4602: 0xC2E7,
+ 4603: 0xC2E8,
+ 4604: 0xC2E9,
+ 4605: 0xC2EA,
+ 4606: 0xC2EE,
+ 4607: 0xC2F0,
+ 4608: 0xC2F2,
+ 4609: 0xC2F3,
+ 4610: 0xC2F4,
+ 4611: 0xC2F5,
+ 4612: 0xC2F7,
+ 4613: 0xC2FA,
+ 4614: 0xC2FD,
+ 4615: 0xC2FE,
+ 4616: 0xC2FF,
+ 4617: 0xC301,
+ 4618: 0xC302,
+ 4619: 0xC303,
+ 4620: 0xC304,
+ 4621: 0xC305,
+ 4622: 0xC306,
+ 4623: 0xC307,
+ 4624: 0xC30A,
+ 4625: 0xC30B,
+ 4626: 0xC30E,
+ 4627: 0xC30F,
+ 4628: 0xC310,
+ 4629: 0xC311,
+ 4630: 0xC312,
+ 4631: 0xC316,
+ 4632: 0xC317,
+ 4633: 0xC319,
+ 4634: 0xC31A,
+ 4635: 0xC31B,
+ 4636: 0xC31D,
+ 4637: 0xC31E,
+ 4638: 0xC31F,
+ 4639: 0xC320,
+ 4640: 0xC321,
+ 4641: 0xC322,
+ 4642: 0xC323,
+ 4643: 0xC326,
+ 4644: 0xC327,
+ 4645: 0xC32A,
+ 4646: 0xC32B,
+ 4647: 0xC32C,
+ 4648: 0xC32D,
+ 4649: 0xC32E,
+ 4650: 0xC32F,
+ 4651: 0xC330,
+ 4652: 0xC331,
+ 4653: 0xC332,
+ 4654: 0xC333,
+ 4655: 0xC334,
+ 4656: 0xC335,
+ 4657: 0xC336,
+ 4658: 0xC337,
+ 4659: 0xC338,
+ 4660: 0xC339,
+ 4661: 0xC33A,
+ 4662: 0xC33B,
+ 4663: 0xC33C,
+ 4664: 0xC33D,
+ 4665: 0xC33E,
+ 4666: 0xC33F,
+ 4667: 0xC340,
+ 4668: 0xC341,
+ 4669: 0xC342,
+ 4670: 0xC343,
+ 4671: 0xC344,
+ 4672: 0xC346,
+ 4673: 0xC347,
+ 4674: 0xC348,
+ 4675: 0xC349,
+ 4676: 0xC34A,
+ 4677: 0xC34B,
+ 4678: 0xC34C,
+ 4679: 0xC34D,
+ 4680: 0xC34E,
+ 4681: 0xC34F,
+ 4682: 0xC350,
+ 4683: 0xC351,
+ 4684: 0xC352,
+ 4685: 0xC353,
+ 4686: 0xC354,
+ 4687: 0xC355,
+ 4688: 0xC356,
+ 4689: 0xC357,
+ 4690: 0xC358,
+ 4691: 0xC359,
+ 4692: 0xC35A,
+ 4693: 0xC35B,
+ 4694: 0xC35C,
+ 4695: 0xC35D,
+ 4696: 0xC35E,
+ 4697: 0xC35F,
+ 4698: 0xC360,
+ 4699: 0xC361,
+ 4700: 0xC362,
+ 4701: 0xC363,
+ 4702: 0xC364,
+ 4703: 0xC365,
+ 4704: 0xC366,
+ 4705: 0xC367,
+ 4706: 0xC36A,
+ 4707: 0xC36B,
+ 4708: 0xC36D,
+ 4709: 0xC36E,
+ 4710: 0xC36F,
+ 4711: 0xC371,
+ 4712: 0xC373,
+ 4713: 0xC374,
+ 4714: 0xC375,
+ 4715: 0xC376,
+ 4716: 0xC377,
+ 4717: 0xC37A,
+ 4718: 0xC37B,
+ 4719: 0xC37E,
+ 4720: 0xC37F,
+ 4721: 0xC380,
+ 4722: 0xC381,
+ 4723: 0xC382,
+ 4724: 0xC383,
+ 4725: 0xC385,
+ 4726: 0xC386,
+ 4727: 0xC387,
+ 4728: 0xC389,
+ 4729: 0xC38A,
+ 4730: 0xC38B,
+ 4731: 0xC38D,
+ 4732: 0xC38E,
+ 4733: 0xC38F,
+ 4734: 0xC390,
+ 4735: 0xC391,
+ 4736: 0xC392,
+ 4737: 0xC393,
+ 4738: 0xC394,
+ 4739: 0xC395,
+ 4740: 0xC396,
+ 4741: 0xC397,
+ 4742: 0xC398,
+ 4743: 0xC399,
+ 4744: 0xC39A,
+ 4745: 0xC39B,
+ 4746: 0xC39C,
+ 4747: 0xC39D,
+ 4748: 0xC39E,
+ 4749: 0xC39F,
+ 4750: 0xC3A0,
+ 4751: 0xC3A1,
+ 4752: 0xC3A2,
+ 4753: 0xC3A3,
+ 4754: 0xC3A4,
+ 4755: 0xC3A5,
+ 4756: 0xC3A6,
+ 4757: 0xC3A7,
+ 4758: 0xC3A8,
+ 4759: 0xC3A9,
+ 4760: 0xC3AA,
+ 4761: 0xC3AB,
+ 4762: 0xC3AC,
+ 4763: 0xC3AD,
+ 4764: 0xC3AE,
+ 4765: 0xC3AF,
+ 4766: 0xC3B0,
+ 4767: 0xC3B1,
+ 4768: 0xC3B2,
+ 4769: 0xC3B3,
+ 4770: 0xC3B4,
+ 4771: 0xC3B5,
+ 4772: 0xC3B6,
+ 4773: 0xC3B7,
+ 4774: 0xC3B8,
+ 4775: 0xC3B9,
+ 4776: 0xC3BA,
+ 4777: 0xC3BB,
+ 4778: 0xC3BC,
+ 4779: 0xC3BD,
+ 4780: 0xC3BE,
+ 4781: 0xC3BF,
+ 4782: 0xC3C1,
+ 4783: 0xC3C2,
+ 4784: 0xC3C3,
+ 4785: 0xC3C4,
+ 4786: 0xC3C5,
+ 4787: 0xC3C6,
+ 4788: 0xC3C7,
+ 4789: 0xC3C8,
+ 4790: 0xC3C9,
+ 4791: 0xC3CA,
+ 4792: 0xC3CB,
+ 4793: 0xC3CC,
+ 4794: 0xC3CD,
+ 4795: 0xC3CE,
+ 4796: 0xC3CF,
+ 4797: 0xC3D0,
+ 4798: 0xC3D1,
+ 4799: 0xC3D2,
+ 4800: 0xC3D3,
+ 4801: 0xC3D4,
+ 4802: 0xC3D5,
+ 4803: 0xC3D6,
+ 4804: 0xC3D7,
+ 4805: 0xC3DA,
+ 4806: 0xC3DB,
+ 4807: 0xC3DD,
+ 4808: 0xC3DE,
+ 4809: 0xC3E1,
+ 4810: 0xC3E3,
+ 4811: 0xC3E4,
+ 4812: 0xC3E5,
+ 4813: 0xC3E6,
+ 4814: 0xC3E7,
+ 4815: 0xC3EA,
+ 4816: 0xC3EB,
+ 4817: 0xC3EC,
+ 4818: 0xC3EE,
+ 4819: 0xC3EF,
+ 4820: 0xC3F0,
+ 4821: 0xC3F1,
+ 4822: 0xC3F2,
+ 4823: 0xC3F3,
+ 4824: 0xC3F6,
+ 4825: 0xC3F7,
+ 4826: 0xC3F9,
+ 4827: 0xC3FA,
+ 4828: 0xC3FB,
+ 4829: 0xC3FC,
+ 4830: 0xC3FD,
+ 4831: 0xC3FE,
+ 4832: 0xC3FF,
+ 4833: 0xC400,
+ 4834: 0xC401,
+ 4835: 0xC402,
+ 4836: 0xC403,
+ 4837: 0xC404,
+ 4838: 0xC405,
+ 4839: 0xC406,
+ 4840: 0xC407,
+ 4841: 0xC409,
+ 4842: 0xC40A,
+ 4843: 0xC40B,
+ 4844: 0xC40C,
+ 4845: 0xC40D,
+ 4846: 0xC40E,
+ 4847: 0xC40F,
+ 4848: 0xC411,
+ 4849: 0xC412,
+ 4850: 0xC413,
+ 4851: 0xC414,
+ 4852: 0xC415,
+ 4853: 0xC416,
+ 4854: 0xC417,
+ 4855: 0xC418,
+ 4856: 0xC419,
+ 4857: 0xC41A,
+ 4858: 0xC41B,
+ 4859: 0xC41C,
+ 4860: 0xC41D,
+ 4861: 0xC41E,
+ 4862: 0xC41F,
+ 4863: 0xC420,
+ 4864: 0xC421,
+ 4865: 0xC422,
+ 4866: 0xC423,
+ 4867: 0xC425,
+ 4868: 0xC426,
+ 4869: 0xC427,
+ 4870: 0xC428,
+ 4871: 0xC429,
+ 4872: 0xC42A,
+ 4873: 0xC42B,
+ 4874: 0xC42D,
+ 4875: 0xC42E,
+ 4876: 0xC42F,
+ 4877: 0xC431,
+ 4878: 0xC432,
+ 4879: 0xC433,
+ 4880: 0xC435,
+ 4881: 0xC436,
+ 4882: 0xC437,
+ 4883: 0xC438,
+ 4884: 0xC439,
+ 4885: 0xC43A,
+ 4886: 0xC43B,
+ 4887: 0xC43E,
+ 4888: 0xC43F,
+ 4889: 0xC440,
+ 4890: 0xC441,
+ 4891: 0xC442,
+ 4892: 0xC443,
+ 4893: 0xC444,
+ 4894: 0xC445,
+ 4895: 0xC446,
+ 4896: 0xC447,
+ 4897: 0xC449,
+ 4898: 0xC44A,
+ 4899: 0xC44B,
+ 4900: 0xC44C,
+ 4901: 0xC44D,
+ 4902: 0xC44E,
+ 4903: 0xC44F,
+ 4904: 0xC450,
+ 4905: 0xC451,
+ 4906: 0xC452,
+ 4907: 0xC453,
+ 4908: 0xC454,
+ 4909: 0xC455,
+ 4910: 0xC456,
+ 4911: 0xC457,
+ 4912: 0xC458,
+ 4913: 0xC459,
+ 4914: 0xC45A,
+ 4915: 0xC45B,
+ 4916: 0xC45C,
+ 4917: 0xC45D,
+ 4918: 0xC45E,
+ 4919: 0xC45F,
+ 4920: 0xC460,
+ 4921: 0xC461,
+ 4922: 0xC462,
+ 4923: 0xC463,
+ 4924: 0xC466,
+ 4925: 0xC467,
+ 4926: 0xC469,
+ 4927: 0xC46A,
+ 4928: 0xC46B,
+ 4929: 0xC46D,
+ 4930: 0xC46E,
+ 4931: 0xC46F,
+ 4932: 0xC470,
+ 4933: 0xC471,
+ 4934: 0xC472,
+ 4935: 0xC473,
+ 4936: 0xC476,
+ 4937: 0xC477,
+ 4938: 0xC478,
+ 4939: 0xC47A,
+ 4940: 0xC47B,
+ 4941: 0xC47C,
+ 4942: 0xC47D,
+ 4943: 0xC47E,
+ 4944: 0xC47F,
+ 4945: 0xC481,
+ 4946: 0xC482,
+ 4947: 0xC483,
+ 4948: 0xC484,
+ 4949: 0xC485,
+ 4950: 0xC486,
+ 4951: 0xC487,
+ 4952: 0xC488,
+ 4953: 0xC489,
+ 4954: 0xC48A,
+ 4955: 0xC48B,
+ 4956: 0xC48C,
+ 4957: 0xC48D,
+ 4958: 0xC48E,
+ 4959: 0xC48F,
+ 4960: 0xC490,
+ 4961: 0xC491,
+ 4962: 0xC492,
+ 4963: 0xC493,
+ 4964: 0xC495,
+ 4965: 0xC496,
+ 4966: 0xC497,
+ 4967: 0xC498,
+ 4968: 0xC499,
+ 4969: 0xC49A,
+ 4970: 0xC49B,
+ 4971: 0xC49D,
+ 4972: 0xC49E,
+ 4973: 0xC49F,
+ 4974: 0xC4A0,
+ 4975: 0xC4A1,
+ 4976: 0xC4A2,
+ 4977: 0xC4A3,
+ 4978: 0xC4A4,
+ 4979: 0xC4A5,
+ 4980: 0xC4A6,
+ 4981: 0xC4A7,
+ 4982: 0xC4A8,
+ 4983: 0xC4A9,
+ 4984: 0xC4AA,
+ 4985: 0xC4AB,
+ 4986: 0xC4AC,
+ 4987: 0xC4AD,
+ 4988: 0xC4AE,
+ 4989: 0xC4AF,
+ 4990: 0xC4B0,
+ 4991: 0xC4B1,
+ 4992: 0xC4B2,
+ 4993: 0xC4B3,
+ 4994: 0xC4B4,
+ 4995: 0xC4B5,
+ 4996: 0xC4B6,
+ 4997: 0xC4B7,
+ 4998: 0xC4B9,
+ 4999: 0xC4BA,
+ 5000: 0xC4BB,
+ 5001: 0xC4BD,
+ 5002: 0xC4BE,
+ 5003: 0xC4BF,
+ 5004: 0xC4C0,
+ 5005: 0xC4C1,
+ 5006: 0xC4C2,
+ 5007: 0xC4C3,
+ 5008: 0xC4C4,
+ 5009: 0xC4C5,
+ 5010: 0xC4C6,
+ 5011: 0xC4C7,
+ 5012: 0xC4C8,
+ 5013: 0xC4C9,
+ 5014: 0xC4CA,
+ 5015: 0xC4CB,
+ 5016: 0xC4CC,
+ 5017: 0xC4CD,
+ 5018: 0xC4CE,
+ 5019: 0xC4CF,
+ 5020: 0xC4D0,
+ 5021: 0xC4D1,
+ 5022: 0xC4D2,
+ 5023: 0xC4D3,
+ 5024: 0xC4D4,
+ 5025: 0xC4D5,
+ 5026: 0xC4D6,
+ 5027: 0xC4D7,
+ 5028: 0xC4D8,
+ 5029: 0xC4D9,
+ 5030: 0xC4DA,
+ 5031: 0xC4DB,
+ 5032: 0xC4DC,
+ 5033: 0xC4DD,
+ 5034: 0xC4DE,
+ 5035: 0xC4DF,
+ 5036: 0xC4E0,
+ 5037: 0xC4E1,
+ 5038: 0xC4E2,
+ 5039: 0xC4E3,
+ 5040: 0xC4E4,
+ 5041: 0xC4E5,
+ 5042: 0xC4E6,
+ 5043: 0xC4E7,
+ 5044: 0xC4E8,
+ 5045: 0xC4EA,
+ 5046: 0xC4EB,
+ 5047: 0xC4EC,
+ 5048: 0xC4ED,
+ 5049: 0xC4EE,
+ 5050: 0xC4EF,
+ 5051: 0xC4F2,
+ 5052: 0xC4F3,
+ 5053: 0xC4F5,
+ 5054: 0xC4F6,
+ 5055: 0xC4F7,
+ 5056: 0xC4F9,
+ 5057: 0xC4FB,
+ 5058: 0xC4FC,
+ 5059: 0xC4FD,
+ 5060: 0xC4FE,
+ 5061: 0xC502,
+ 5062: 0xC503,
+ 5063: 0xC504,
+ 5064: 0xC505,
+ 5065: 0xC506,
+ 5066: 0xC507,
+ 5067: 0xC508,
+ 5068: 0xC509,
+ 5069: 0xC50A,
+ 5070: 0xC50B,
+ 5071: 0xC50D,
+ 5072: 0xC50E,
+ 5073: 0xC50F,
+ 5074: 0xC511,
+ 5075: 0xC512,
+ 5076: 0xC513,
+ 5077: 0xC515,
+ 5078: 0xC516,
+ 5079: 0xC517,
+ 5080: 0xC518,
+ 5081: 0xC519,
+ 5082: 0xC51A,
+ 5083: 0xC51B,
+ 5084: 0xC51D,
+ 5085: 0xC51E,
+ 5086: 0xC51F,
+ 5087: 0xC520,
+ 5088: 0xC521,
+ 5089: 0xC522,
+ 5090: 0xC523,
+ 5091: 0xC524,
+ 5092: 0xC525,
+ 5093: 0xC526,
+ 5094: 0xC527,
+ 5095: 0xC52A,
+ 5096: 0xC52B,
+ 5097: 0xC52D,
+ 5098: 0xC52E,
+ 5099: 0xC52F,
+ 5100: 0xC531,
+ 5101: 0xC532,
+ 5102: 0xC533,
+ 5103: 0xC534,
+ 5104: 0xC535,
+ 5105: 0xC536,
+ 5106: 0xC537,
+ 5107: 0xC53A,
+ 5108: 0xC53C,
+ 5109: 0xC53E,
+ 5110: 0xC53F,
+ 5111: 0xC540,
+ 5112: 0xC541,
+ 5113: 0xC542,
+ 5114: 0xC543,
+ 5115: 0xC546,
+ 5116: 0xC547,
+ 5117: 0xC54B,
+ 5118: 0xC54F,
+ 5119: 0xC550,
+ 5120: 0xC551,
+ 5121: 0xC552,
+ 5122: 0xC556,
+ 5123: 0xC55A,
+ 5124: 0xC55B,
+ 5125: 0xC55C,
+ 5126: 0xC55F,
+ 5127: 0xC562,
+ 5128: 0xC563,
+ 5129: 0xC565,
+ 5130: 0xC566,
+ 5131: 0xC567,
+ 5132: 0xC569,
+ 5133: 0xC56A,
+ 5134: 0xC56B,
+ 5135: 0xC56C,
+ 5136: 0xC56D,
+ 5137: 0xC56E,
+ 5138: 0xC56F,
+ 5139: 0xC572,
+ 5140: 0xC576,
+ 5141: 0xC577,
+ 5142: 0xC578,
+ 5143: 0xC579,
+ 5144: 0xC57A,
+ 5145: 0xC57B,
+ 5146: 0xC57E,
+ 5147: 0xC57F,
+ 5148: 0xC581,
+ 5149: 0xC582,
+ 5150: 0xC583,
+ 5151: 0xC585,
+ 5152: 0xC586,
+ 5153: 0xC588,
+ 5154: 0xC589,
+ 5155: 0xC58A,
+ 5156: 0xC58B,
+ 5157: 0xC58E,
+ 5158: 0xC590,
+ 5159: 0xC592,
+ 5160: 0xC593,
+ 5161: 0xC594,
+ 5162: 0xC596,
+ 5163: 0xC599,
+ 5164: 0xC59A,
+ 5165: 0xC59B,
+ 5166: 0xC59D,
+ 5167: 0xC59E,
+ 5168: 0xC59F,
+ 5169: 0xC5A1,
+ 5170: 0xC5A2,
+ 5171: 0xC5A3,
+ 5172: 0xC5A4,
+ 5173: 0xC5A5,
+ 5174: 0xC5A6,
+ 5175: 0xC5A7,
+ 5176: 0xC5A8,
+ 5177: 0xC5AA,
+ 5178: 0xC5AB,
+ 5179: 0xC5AC,
+ 5180: 0xC5AD,
+ 5181: 0xC5AE,
+ 5182: 0xC5AF,
+ 5183: 0xC5B0,
+ 5184: 0xC5B1,
+ 5185: 0xC5B2,
+ 5186: 0xC5B3,
+ 5187: 0xC5B6,
+ 5188: 0xC5B7,
+ 5189: 0xC5BA,
+ 5190: 0xC5BF,
+ 5191: 0xC5C0,
+ 5192: 0xC5C1,
+ 5193: 0xC5C2,
+ 5194: 0xC5C3,
+ 5195: 0xC5CB,
+ 5196: 0xC5CD,
+ 5197: 0xC5CF,
+ 5198: 0xC5D2,
+ 5199: 0xC5D3,
+ 5200: 0xC5D5,
+ 5201: 0xC5D6,
+ 5202: 0xC5D7,
+ 5203: 0xC5D9,
+ 5204: 0xC5DA,
+ 5205: 0xC5DB,
+ 5206: 0xC5DC,
+ 5207: 0xC5DD,
+ 5208: 0xC5DE,
+ 5209: 0xC5DF,
+ 5210: 0xC5E2,
+ 5211: 0xC5E4,
+ 5212: 0xC5E6,
+ 5213: 0xC5E7,
+ 5214: 0xC5E8,
+ 5215: 0xC5E9,
+ 5216: 0xC5EA,
+ 5217: 0xC5EB,
+ 5218: 0xC5EF,
+ 5219: 0xC5F1,
+ 5220: 0xC5F2,
+ 5221: 0xC5F3,
+ 5222: 0xC5F5,
+ 5223: 0xC5F8,
+ 5224: 0xC5F9,
+ 5225: 0xC5FA,
+ 5226: 0xC5FB,
+ 5227: 0xC602,
+ 5228: 0xC603,
+ 5229: 0xC604,
+ 5230: 0xC609,
+ 5231: 0xC60A,
+ 5232: 0xC60B,
+ 5233: 0xC60D,
+ 5234: 0xC60E,
+ 5235: 0xC60F,
+ 5236: 0xC611,
+ 5237: 0xC612,
+ 5238: 0xC613,
+ 5239: 0xC614,
+ 5240: 0xC615,
+ 5241: 0xC616,
+ 5242: 0xC617,
+ 5243: 0xC61A,
+ 5244: 0xC61D,
+ 5245: 0xC61E,
+ 5246: 0xC61F,
+ 5247: 0xC620,
+ 5248: 0xC621,
+ 5249: 0xC622,
+ 5250: 0xC623,
+ 5251: 0xC626,
+ 5252: 0xC627,
+ 5253: 0xC629,
+ 5254: 0xC62A,
+ 5255: 0xC62B,
+ 5256: 0xC62F,
+ 5257: 0xC631,
+ 5258: 0xC632,
+ 5259: 0xC636,
+ 5260: 0xC638,
+ 5261: 0xC63A,
+ 5262: 0xC63C,
+ 5263: 0xC63D,
+ 5264: 0xC63E,
+ 5265: 0xC63F,
+ 5266: 0xC642,
+ 5267: 0xC643,
+ 5268: 0xC645,
+ 5269: 0xC646,
+ 5270: 0xC647,
+ 5271: 0xC649,
+ 5272: 0xC64A,
+ 5273: 0xC64B,
+ 5274: 0xC64C,
+ 5275: 0xC64D,
+ 5276: 0xC64E,
+ 5277: 0xC64F,
+ 5278: 0xC652,
+ 5279: 0xC656,
+ 5280: 0xC657,
+ 5281: 0xC658,
+ 5282: 0xC659,
+ 5283: 0xC65A,
+ 5284: 0xC65B,
+ 5285: 0xC65E,
+ 5286: 0xC65F,
+ 5287: 0xC661,
+ 5288: 0xC662,
+ 5289: 0xC663,
+ 5290: 0xC664,
+ 5291: 0xC665,
+ 5292: 0xC666,
+ 5293: 0xC667,
+ 5294: 0xC668,
+ 5295: 0xC669,
+ 5296: 0xC66A,
+ 5297: 0xC66B,
+ 5298: 0xC66D,
+ 5299: 0xC66E,
+ 5300: 0xC670,
+ 5301: 0xC672,
+ 5302: 0xC673,
+ 5303: 0xC674,
+ 5304: 0xC675,
+ 5305: 0xC676,
+ 5306: 0xC677,
+ 5307: 0xC67A,
+ 5308: 0xC67B,
+ 5309: 0xC67D,
+ 5310: 0xC67E,
+ 5311: 0xC67F,
+ 5312: 0xC681,
+ 5313: 0xC682,
+ 5314: 0xC683,
+ 5315: 0xC684,
+ 5316: 0xC685,
+ 5317: 0xC686,
+ 5318: 0xC687,
+ 5319: 0xC68A,
+ 5320: 0xC68C,
+ 5321: 0xC68E,
+ 5322: 0xC68F,
+ 5323: 0xC690,
+ 5324: 0xC691,
+ 5325: 0xC692,
+ 5326: 0xC693,
+ 5327: 0xC696,
+ 5328: 0xC697,
+ 5329: 0xC699,
+ 5330: 0xC69A,
+ 5331: 0xC69B,
+ 5332: 0xC69D,
+ 5333: 0xC69E,
+ 5334: 0xC69F,
+ 5335: 0xC6A0,
+ 5336: 0xC6A1,
+ 5337: 0xC6A2,
+ 5338: 0xC6A3,
+ 5339: 0xC6A6,
+ 5340: 0xC6A8,
+ 5341: 0xC6AA,
+ 5342: 0xC6AB,
+ 5343: 0xC6AC,
+ 5344: 0xC6AD,
+ 5345: 0xC6AE,
+ 5346: 0xC6AF,
+ 5347: 0xC6B2,
+ 5348: 0xC6B3,
+ 5349: 0xC6B5,
+ 5350: 0xC6B6,
+ 5351: 0xC6B7,
+ 5352: 0xC6BB,
+ 5353: 0xC6BC,
+ 5354: 0xC6BD,
+ 5355: 0xC6BE,
+ 5356: 0xC6BF,
+ 5357: 0xC6C2,
+ 5358: 0xC6C4,
+ 5359: 0xC6C6,
+ 5360: 0xC6C7,
+ 5361: 0xC6C8,
+ 5362: 0xC6C9,
+ 5363: 0xC6CA,
+ 5364: 0xC6CB,
+ 5365: 0xC6CE,
+ 5366: 0xC6CF,
+ 5367: 0xC6D1,
+ 5368: 0xC6D2,
+ 5369: 0xC6D3,
+ 5370: 0xC6D5,
+ 5371: 0xC6D6,
+ 5372: 0xC6D7,
+ 5373: 0xC6D8,
+ 5374: 0xC6D9,
+ 5375: 0xC6DA,
+ 5376: 0xC6DB,
+ 5377: 0xC6DE,
+ 5378: 0xC6DF,
+ 5379: 0xC6E2,
+ 5380: 0xC6E3,
+ 5381: 0xC6E4,
+ 5382: 0xC6E5,
+ 5383: 0xC6E6,
+ 5384: 0xC6E7,
+ 5385: 0xC6EA,
+ 5386: 0xC6EB,
+ 5387: 0xC6ED,
+ 5388: 0xC6EE,
+ 5389: 0xC6EF,
+ 5390: 0xC6F1,
+ 5391: 0xC6F2,
+ 5392: 0xC6F3,
+ 5393: 0xC6F4,
+ 5394: 0xC6F5,
+ 5395: 0xC6F6,
+ 5396: 0xC6F7,
+ 5397: 0xC6FA,
+ 5398: 0xC6FB,
+ 5399: 0xC6FC,
+ 5400: 0xC6FE,
+ 5401: 0xC6FF,
+ 5402: 0xC700,
+ 5403: 0xC701,
+ 5404: 0xC702,
+ 5405: 0xC703,
+ 5406: 0xC706,
+ 5407: 0xC707,
+ 5408: 0xC709,
+ 5409: 0xC70A,
+ 5410: 0xC70B,
+ 5411: 0xC70D,
+ 5412: 0xC70E,
+ 5413: 0xC70F,
+ 5414: 0xC710,
+ 5415: 0xC711,
+ 5416: 0xC712,
+ 5417: 0xC713,
+ 5418: 0xC716,
+ 5419: 0xC718,
+ 5420: 0xC71A,
+ 5421: 0xC71B,
+ 5422: 0xC71C,
+ 5423: 0xC71D,
+ 5424: 0xC71E,
+ 5425: 0xC71F,
+ 5426: 0xC722,
+ 5427: 0xC723,
+ 5428: 0xC725,
+ 5429: 0xC726,
+ 5430: 0xC727,
+ 5431: 0xC729,
+ 5432: 0xC72A,
+ 5433: 0xC72B,
+ 5434: 0xC72C,
+ 5435: 0xC72D,
+ 5436: 0xC72E,
+ 5437: 0xC72F,
+ 5438: 0xC732,
+ 5439: 0xC734,
+ 5440: 0xC736,
+ 5441: 0xC738,
+ 5442: 0xC739,
+ 5443: 0xC73A,
+ 5444: 0xC73B,
+ 5445: 0xC73E,
+ 5446: 0xC73F,
+ 5447: 0xC741,
+ 5448: 0xC742,
+ 5449: 0xC743,
+ 5450: 0xC745,
+ 5451: 0xC746,
+ 5452: 0xC747,
+ 5453: 0xC748,
+ 5454: 0xC749,
+ 5455: 0xC74B,
+ 5456: 0xC74E,
+ 5457: 0xC750,
+ 5458: 0xC759,
+ 5459: 0xC75A,
+ 5460: 0xC75B,
+ 5461: 0xC75D,
+ 5462: 0xC75E,
+ 5463: 0xC75F,
+ 5464: 0xC761,
+ 5465: 0xC762,
+ 5466: 0xC763,
+ 5467: 0xC764,
+ 5468: 0xC765,
+ 5469: 0xC766,
+ 5470: 0xC767,
+ 5471: 0xC769,
+ 5472: 0xC76A,
+ 5473: 0xC76C,
+ 5474: 0xC76D,
+ 5475: 0xC76E,
+ 5476: 0xC76F,
+ 5477: 0xC770,
+ 5478: 0xC771,
+ 5479: 0xC772,
+ 5480: 0xC773,
+ 5481: 0xC776,
+ 5482: 0xC777,
+ 5483: 0xC779,
+ 5484: 0xC77A,
+ 5485: 0xC77B,
+ 5486: 0xC77F,
+ 5487: 0xC780,
+ 5488: 0xC781,
+ 5489: 0xC782,
+ 5490: 0xC786,
+ 5491: 0xC78B,
+ 5492: 0xC78C,
+ 5493: 0xC78D,
+ 5494: 0xC78F,
+ 5495: 0xC792,
+ 5496: 0xC793,
+ 5497: 0xC795,
+ 5498: 0xC799,
+ 5499: 0xC79B,
+ 5500: 0xC79C,
+ 5501: 0xC79D,
+ 5502: 0xC79E,
+ 5503: 0xC79F,
+ 5504: 0xC7A2,
+ 5505: 0xC7A7,
+ 5506: 0xC7A8,
+ 5507: 0xC7A9,
+ 5508: 0xC7AA,
+ 5509: 0xC7AB,
+ 5510: 0xC7AE,
+ 5511: 0xC7AF,
+ 5512: 0xC7B1,
+ 5513: 0xC7B2,
+ 5514: 0xC7B3,
+ 5515: 0xC7B5,
+ 5516: 0xC7B6,
+ 5517: 0xC7B7,
+ 5518: 0xC7B8,
+ 5519: 0xC7B9,
+ 5520: 0xC7BA,
+ 5521: 0xC7BB,
+ 5522: 0xC7BE,
+ 5523: 0xC7C2,
+ 5524: 0xC7C3,
+ 5525: 0xC7C4,
+ 5526: 0xC7C5,
+ 5527: 0xC7C6,
+ 5528: 0xC7C7,
+ 5529: 0xC7CA,
+ 5530: 0xC7CB,
+ 5531: 0xC7CD,
+ 5532: 0xC7CF,
+ 5533: 0xC7D1,
+ 5534: 0xC7D2,
+ 5535: 0xC7D3,
+ 5536: 0xC7D4,
+ 5537: 0xC7D5,
+ 5538: 0xC7D6,
+ 5539: 0xC7D7,
+ 5540: 0xC7D9,
+ 5541: 0xC7DA,
+ 5542: 0xC7DB,
+ 5543: 0xC7DC,
+ 5544: 0xC7DE,
+ 5545: 0xC7DF,
+ 5546: 0xC7E0,
+ 5547: 0xC7E1,
+ 5548: 0xC7E2,
+ 5549: 0xC7E3,
+ 5550: 0xC7E5,
+ 5551: 0xC7E6,
+ 5552: 0xC7E7,
+ 5553: 0xC7E9,
+ 5554: 0xC7EA,
+ 5555: 0xC7EB,
+ 5556: 0xC7ED,
+ 5557: 0xC7EE,
+ 5558: 0xC7EF,
+ 5559: 0xC7F0,
+ 5560: 0xC7F1,
+ 5561: 0xC7F2,
+ 5562: 0xC7F3,
+ 5563: 0xC7F4,
+ 5564: 0xC7F5,
+ 5565: 0xC7F6,
+ 5566: 0xC7F7,
+ 5567: 0xC7F8,
+ 5568: 0xC7F9,
+ 5569: 0xC7FA,
+ 5570: 0xC7FB,
+ 5571: 0xC7FC,
+ 5572: 0xC7FD,
+ 5573: 0xC7FE,
+ 5574: 0xC7FF,
+ 5575: 0xC802,
+ 5576: 0xC803,
+ 5577: 0xC805,
+ 5578: 0xC806,
+ 5579: 0xC807,
+ 5580: 0xC809,
+ 5581: 0xC80B,
+ 5582: 0xC80C,
+ 5583: 0xC80D,
+ 5584: 0xC80E,
+ 5585: 0xC80F,
+ 5586: 0xC812,
+ 5587: 0xC814,
+ 5588: 0xC817,
+ 5589: 0xC818,
+ 5590: 0xC819,
+ 5591: 0xC81A,
+ 5592: 0xC81B,
+ 5593: 0xC81E,
+ 5594: 0xC81F,
+ 5595: 0xC821,
+ 5596: 0xC822,
+ 5597: 0xC823,
+ 5598: 0xC825,
+ 5599: 0xC826,
+ 5600: 0xC827,
+ 5601: 0xC828,
+ 5602: 0xC829,
+ 5603: 0xC82A,
+ 5604: 0xC82B,
+ 5605: 0xC82E,
+ 5606: 0xC830,
+ 5607: 0xC832,
+ 5608: 0xC833,
+ 5609: 0xC834,
+ 5610: 0xC835,
+ 5611: 0xC836,
+ 5612: 0xC837,
+ 5613: 0xC839,
+ 5614: 0xC83A,
+ 5615: 0xC83B,
+ 5616: 0xC83D,
+ 5617: 0xC83E,
+ 5618: 0xC83F,
+ 5619: 0xC841,
+ 5620: 0xC842,
+ 5621: 0xC843,
+ 5622: 0xC844,
+ 5623: 0xC845,
+ 5624: 0xC846,
+ 5625: 0xC847,
+ 5626: 0xC84A,
+ 5627: 0xC84B,
+ 5628: 0xC84E,
+ 5629: 0xC84F,
+ 5630: 0xC850,
+ 5631: 0xC851,
+ 5632: 0xC852,
+ 5633: 0xC853,
+ 5634: 0xC855,
+ 5635: 0xC856,
+ 5636: 0xC857,
+ 5637: 0xC858,
+ 5638: 0xC859,
+ 5639: 0xC85A,
+ 5640: 0xC85B,
+ 5641: 0xC85C,
+ 5642: 0xC85D,
+ 5643: 0xC85E,
+ 5644: 0xC85F,
+ 5645: 0xC860,
+ 5646: 0xC861,
+ 5647: 0xC862,
+ 5648: 0xC863,
+ 5649: 0xC864,
+ 5650: 0xC865,
+ 5651: 0xC866,
+ 5652: 0xC867,
+ 5653: 0xC868,
+ 5654: 0xC869,
+ 5655: 0xC86A,
+ 5656: 0xC86B,
+ 5657: 0xC86C,
+ 5658: 0xC86D,
+ 5659: 0xC86E,
+ 5660: 0xC86F,
+ 5661: 0xC872,
+ 5662: 0xC873,
+ 5663: 0xC875,
+ 5664: 0xC876,
+ 5665: 0xC877,
+ 5666: 0xC879,
+ 5667: 0xC87B,
+ 5668: 0xC87C,
+ 5669: 0xC87D,
+ 5670: 0xC87E,
+ 5671: 0xC87F,
+ 5672: 0xC882,
+ 5673: 0xC884,
+ 5674: 0xC888,
+ 5675: 0xC889,
+ 5676: 0xC88A,
+ 5677: 0xC88E,
+ 5678: 0xC88F,
+ 5679: 0xC890,
+ 5680: 0xC891,
+ 5681: 0xC892,
+ 5682: 0xC893,
+ 5683: 0xC895,
+ 5684: 0xC896,
+ 5685: 0xC897,
+ 5686: 0xC898,
+ 5687: 0xC899,
+ 5688: 0xC89A,
+ 5689: 0xC89B,
+ 5690: 0xC89C,
+ 5691: 0xC89E,
+ 5692: 0xC8A0,
+ 5693: 0xC8A2,
+ 5694: 0xC8A3,
+ 5695: 0xC8A4,
+ 5696: 0xC8A5,
+ 5697: 0xC8A6,
+ 5698: 0xC8A7,
+ 5699: 0xC8A9,
+ 5700: 0xC8AA,
+ 5701: 0xC8AB,
+ 5702: 0xC8AC,
+ 5703: 0xC8AD,
+ 5704: 0xC8AE,
+ 5705: 0xC8AF,
+ 5706: 0xC8B0,
+ 5707: 0xC8B1,
+ 5708: 0xC8B2,
+ 5709: 0xC8B3,
+ 5710: 0xC8B4,
+ 5711: 0xC8B5,
+ 5712: 0xC8B6,
+ 5713: 0xC8B7,
+ 5714: 0xC8B8,
+ 5715: 0xC8B9,
+ 5716: 0xC8BA,
+ 5717: 0xC8BB,
+ 5718: 0xC8BE,
+ 5719: 0xC8BF,
+ 5720: 0xC8C0,
+ 5721: 0xC8C1,
+ 5722: 0xC8C2,
+ 5723: 0xC8C3,
+ 5724: 0xC8C5,
+ 5725: 0xC8C6,
+ 5726: 0xC8C7,
+ 5727: 0xC8C9,
+ 5728: 0xC8CA,
+ 5729: 0xC8CB,
+ 5730: 0xC8CD,
+ 5731: 0xC8CE,
+ 5732: 0xC8CF,
+ 5733: 0xC8D0,
+ 5734: 0xC8D1,
+ 5735: 0xC8D2,
+ 5736: 0xC8D3,
+ 5737: 0xC8D6,
+ 5738: 0xC8D8,
+ 5739: 0xC8DA,
+ 5740: 0xC8DB,
+ 5741: 0xC8DC,
+ 5742: 0xC8DD,
+ 5743: 0xC8DE,
+ 5744: 0xC8DF,
+ 5745: 0xC8E2,
+ 5746: 0xC8E3,
+ 5747: 0xC8E5,
+ 5748: 0xC8E6,
+ 5749: 0xC8E7,
+ 5750: 0xC8E8,
+ 5751: 0xC8E9,
+ 5752: 0xC8EA,
+ 5753: 0xC8EB,
+ 5754: 0xC8EC,
+ 5755: 0xC8ED,
+ 5756: 0xC8EE,
+ 5757: 0xC8EF,
+ 5758: 0xC8F0,
+ 5759: 0xC8F1,
+ 5760: 0xC8F2,
+ 5761: 0xC8F3,
+ 5762: 0xC8F4,
+ 5763: 0xC8F6,
+ 5764: 0xC8F7,
+ 5765: 0xC8F8,
+ 5766: 0xC8F9,
+ 5767: 0xC8FA,
+ 5768: 0xC8FB,
+ 5769: 0xC8FE,
+ 5770: 0xC8FF,
+ 5771: 0xC901,
+ 5772: 0xC902,
+ 5773: 0xC903,
+ 5774: 0xC907,
+ 5775: 0xC908,
+ 5776: 0xC909,
+ 5777: 0xC90A,
+ 5778: 0xC90B,
+ 5779: 0xC90E,
+ 5780: 0x3000,
+ 5781: 0x3001,
+ 5782: 0x3002,
+ 5783: 0x00B7,
+ 5784: 0x2025,
+ 5785: 0x2026,
+ 5786: 0x00A8,
+ 5787: 0x3003,
+ 5788: 0x00AD,
+ 5789: 0x2015,
+ 5790: 0x2225,
+ 5791: 0xFF3C,
+ 5792: 0x223C,
+ 5793: 0x2018,
+ 5794: 0x2019,
+ 5795: 0x201C,
+ 5796: 0x201D,
+ 5797: 0x3014,
+ 5798: 0x3015,
+ 5799: 0x3008,
+ 5800: 0x3009,
+ 5801: 0x300A,
+ 5802: 0x300B,
+ 5803: 0x300C,
+ 5804: 0x300D,
+ 5805: 0x300E,
+ 5806: 0x300F,
+ 5807: 0x3010,
+ 5808: 0x3011,
+ 5809: 0x00B1,
+ 5810: 0x00D7,
+ 5811: 0x00F7,
+ 5812: 0x2260,
+ 5813: 0x2264,
+ 5814: 0x2265,
+ 5815: 0x221E,
+ 5816: 0x2234,
+ 5817: 0x00B0,
+ 5818: 0x2032,
+ 5819: 0x2033,
+ 5820: 0x2103,
+ 5821: 0x212B,
+ 5822: 0xFFE0,
+ 5823: 0xFFE1,
+ 5824: 0xFFE5,
+ 5825: 0x2642,
+ 5826: 0x2640,
+ 5827: 0x2220,
+ 5828: 0x22A5,
+ 5829: 0x2312,
+ 5830: 0x2202,
+ 5831: 0x2207,
+ 5832: 0x2261,
+ 5833: 0x2252,
+ 5834: 0x00A7,
+ 5835: 0x203B,
+ 5836: 0x2606,
+ 5837: 0x2605,
+ 5838: 0x25CB,
+ 5839: 0x25CF,
+ 5840: 0x25CE,
+ 5841: 0x25C7,
+ 5842: 0x25C6,
+ 5843: 0x25A1,
+ 5844: 0x25A0,
+ 5845: 0x25B3,
+ 5846: 0x25B2,
+ 5847: 0x25BD,
+ 5848: 0x25BC,
+ 5849: 0x2192,
+ 5850: 0x2190,
+ 5851: 0x2191,
+ 5852: 0x2193,
+ 5853: 0x2194,
+ 5854: 0x3013,
+ 5855: 0x226A,
+ 5856: 0x226B,
+ 5857: 0x221A,
+ 5858: 0x223D,
+ 5859: 0x221D,
+ 5860: 0x2235,
+ 5861: 0x222B,
+ 5862: 0x222C,
+ 5863: 0x2208,
+ 5864: 0x220B,
+ 5865: 0x2286,
+ 5866: 0x2287,
+ 5867: 0x2282,
+ 5868: 0x2283,
+ 5869: 0x222A,
+ 5870: 0x2229,
+ 5871: 0x2227,
+ 5872: 0x2228,
+ 5873: 0xFFE2,
+ 5874: 0xC910,
+ 5875: 0xC912,
+ 5876: 0xC913,
+ 5877: 0xC914,
+ 5878: 0xC915,
+ 5879: 0xC916,
+ 5880: 0xC917,
+ 5881: 0xC919,
+ 5882: 0xC91A,
+ 5883: 0xC91B,
+ 5884: 0xC91C,
+ 5885: 0xC91D,
+ 5886: 0xC91E,
+ 5887: 0xC91F,
+ 5888: 0xC920,
+ 5889: 0xC921,
+ 5890: 0xC922,
+ 5891: 0xC923,
+ 5892: 0xC924,
+ 5893: 0xC925,
+ 5894: 0xC926,
+ 5895: 0xC927,
+ 5896: 0xC928,
+ 5897: 0xC929,
+ 5898: 0xC92A,
+ 5899: 0xC92B,
+ 5900: 0xC92D,
+ 5901: 0xC92E,
+ 5902: 0xC92F,
+ 5903: 0xC930,
+ 5904: 0xC931,
+ 5905: 0xC932,
+ 5906: 0xC933,
+ 5907: 0xC935,
+ 5908: 0xC936,
+ 5909: 0xC937,
+ 5910: 0xC938,
+ 5911: 0xC939,
+ 5912: 0xC93A,
+ 5913: 0xC93B,
+ 5914: 0xC93C,
+ 5915: 0xC93D,
+ 5916: 0xC93E,
+ 5917: 0xC93F,
+ 5918: 0xC940,
+ 5919: 0xC941,
+ 5920: 0xC942,
+ 5921: 0xC943,
+ 5922: 0xC944,
+ 5923: 0xC945,
+ 5924: 0xC946,
+ 5925: 0xC947,
+ 5926: 0xC948,
+ 5927: 0xC949,
+ 5928: 0xC94A,
+ 5929: 0xC94B,
+ 5930: 0xC94C,
+ 5931: 0xC94D,
+ 5932: 0xC94E,
+ 5933: 0xC94F,
+ 5934: 0xC952,
+ 5935: 0xC953,
+ 5936: 0xC955,
+ 5937: 0xC956,
+ 5938: 0xC957,
+ 5939: 0xC959,
+ 5940: 0xC95A,
+ 5941: 0xC95B,
+ 5942: 0xC95C,
+ 5943: 0xC95D,
+ 5944: 0xC95E,
+ 5945: 0xC95F,
+ 5946: 0xC962,
+ 5947: 0xC964,
+ 5948: 0xC965,
+ 5949: 0xC966,
+ 5950: 0xC967,
+ 5951: 0xC968,
+ 5952: 0xC969,
+ 5953: 0xC96A,
+ 5954: 0xC96B,
+ 5955: 0xC96D,
+ 5956: 0xC96E,
+ 5957: 0xC96F,
+ 5958: 0x21D2,
+ 5959: 0x21D4,
+ 5960: 0x2200,
+ 5961: 0x2203,
+ 5962: 0x00B4,
+ 5963: 0xFF5E,
+ 5964: 0x02C7,
+ 5965: 0x02D8,
+ 5966: 0x02DD,
+ 5967: 0x02DA,
+ 5968: 0x02D9,
+ 5969: 0x00B8,
+ 5970: 0x02DB,
+ 5971: 0x00A1,
+ 5972: 0x00BF,
+ 5973: 0x02D0,
+ 5974: 0x222E,
+ 5975: 0x2211,
+ 5976: 0x220F,
+ 5977: 0x00A4,
+ 5978: 0x2109,
+ 5979: 0x2030,
+ 5980: 0x25C1,
+ 5981: 0x25C0,
+ 5982: 0x25B7,
+ 5983: 0x25B6,
+ 5984: 0x2664,
+ 5985: 0x2660,
+ 5986: 0x2661,
+ 5987: 0x2665,
+ 5988: 0x2667,
+ 5989: 0x2663,
+ 5990: 0x2299,
+ 5991: 0x25C8,
+ 5992: 0x25A3,
+ 5993: 0x25D0,
+ 5994: 0x25D1,
+ 5995: 0x2592,
+ 5996: 0x25A4,
+ 5997: 0x25A5,
+ 5998: 0x25A8,
+ 5999: 0x25A7,
+ 6000: 0x25A6,
+ 6001: 0x25A9,
+ 6002: 0x2668,
+ 6003: 0x260F,
+ 6004: 0x260E,
+ 6005: 0x261C,
+ 6006: 0x261E,
+ 6007: 0x00B6,
+ 6008: 0x2020,
+ 6009: 0x2021,
+ 6010: 0x2195,
+ 6011: 0x2197,
+ 6012: 0x2199,
+ 6013: 0x2196,
+ 6014: 0x2198,
+ 6015: 0x266D,
+ 6016: 0x2669,
+ 6017: 0x266A,
+ 6018: 0x266C,
+ 6019: 0x327F,
+ 6020: 0x321C,
+ 6021: 0x2116,
+ 6022: 0x33C7,
+ 6023: 0x2122,
+ 6024: 0x33C2,
+ 6025: 0x33D8,
+ 6026: 0x2121,
+ 6027: 0x20AC,
+ 6028: 0x00AE,
+ 6052: 0xC971,
+ 6053: 0xC972,
+ 6054: 0xC973,
+ 6055: 0xC975,
+ 6056: 0xC976,
+ 6057: 0xC977,
+ 6058: 0xC978,
+ 6059: 0xC979,
+ 6060: 0xC97A,
+ 6061: 0xC97B,
+ 6062: 0xC97D,
+ 6063: 0xC97E,
+ 6064: 0xC97F,
+ 6065: 0xC980,
+ 6066: 0xC981,
+ 6067: 0xC982,
+ 6068: 0xC983,
+ 6069: 0xC984,
+ 6070: 0xC985,
+ 6071: 0xC986,
+ 6072: 0xC987,
+ 6073: 0xC98A,
+ 6074: 0xC98B,
+ 6075: 0xC98D,
+ 6076: 0xC98E,
+ 6077: 0xC98F,
+ 6078: 0xC991,
+ 6079: 0xC992,
+ 6080: 0xC993,
+ 6081: 0xC994,
+ 6082: 0xC995,
+ 6083: 0xC996,
+ 6084: 0xC997,
+ 6085: 0xC99A,
+ 6086: 0xC99C,
+ 6087: 0xC99E,
+ 6088: 0xC99F,
+ 6089: 0xC9A0,
+ 6090: 0xC9A1,
+ 6091: 0xC9A2,
+ 6092: 0xC9A3,
+ 6093: 0xC9A4,
+ 6094: 0xC9A5,
+ 6095: 0xC9A6,
+ 6096: 0xC9A7,
+ 6097: 0xC9A8,
+ 6098: 0xC9A9,
+ 6099: 0xC9AA,
+ 6100: 0xC9AB,
+ 6101: 0xC9AC,
+ 6102: 0xC9AD,
+ 6103: 0xC9AE,
+ 6104: 0xC9AF,
+ 6105: 0xC9B0,
+ 6106: 0xC9B1,
+ 6107: 0xC9B2,
+ 6108: 0xC9B3,
+ 6109: 0xC9B4,
+ 6110: 0xC9B5,
+ 6111: 0xC9B6,
+ 6112: 0xC9B7,
+ 6113: 0xC9B8,
+ 6114: 0xC9B9,
+ 6115: 0xC9BA,
+ 6116: 0xC9BB,
+ 6117: 0xC9BC,
+ 6118: 0xC9BD,
+ 6119: 0xC9BE,
+ 6120: 0xC9BF,
+ 6121: 0xC9C2,
+ 6122: 0xC9C3,
+ 6123: 0xC9C5,
+ 6124: 0xC9C6,
+ 6125: 0xC9C9,
+ 6126: 0xC9CB,
+ 6127: 0xC9CC,
+ 6128: 0xC9CD,
+ 6129: 0xC9CE,
+ 6130: 0xC9CF,
+ 6131: 0xC9D2,
+ 6132: 0xC9D4,
+ 6133: 0xC9D7,
+ 6134: 0xC9D8,
+ 6135: 0xC9DB,
+ 6136: 0xFF01,
+ 6137: 0xFF02,
+ 6138: 0xFF03,
+ 6139: 0xFF04,
+ 6140: 0xFF05,
+ 6141: 0xFF06,
+ 6142: 0xFF07,
+ 6143: 0xFF08,
+ 6144: 0xFF09,
+ 6145: 0xFF0A,
+ 6146: 0xFF0B,
+ 6147: 0xFF0C,
+ 6148: 0xFF0D,
+ 6149: 0xFF0E,
+ 6150: 0xFF0F,
+ 6151: 0xFF10,
+ 6152: 0xFF11,
+ 6153: 0xFF12,
+ 6154: 0xFF13,
+ 6155: 0xFF14,
+ 6156: 0xFF15,
+ 6157: 0xFF16,
+ 6158: 0xFF17,
+ 6159: 0xFF18,
+ 6160: 0xFF19,
+ 6161: 0xFF1A,
+ 6162: 0xFF1B,
+ 6163: 0xFF1C,
+ 6164: 0xFF1D,
+ 6165: 0xFF1E,
+ 6166: 0xFF1F,
+ 6167: 0xFF20,
+ 6168: 0xFF21,
+ 6169: 0xFF22,
+ 6170: 0xFF23,
+ 6171: 0xFF24,
+ 6172: 0xFF25,
+ 6173: 0xFF26,
+ 6174: 0xFF27,
+ 6175: 0xFF28,
+ 6176: 0xFF29,
+ 6177: 0xFF2A,
+ 6178: 0xFF2B,
+ 6179: 0xFF2C,
+ 6180: 0xFF2D,
+ 6181: 0xFF2E,
+ 6182: 0xFF2F,
+ 6183: 0xFF30,
+ 6184: 0xFF31,
+ 6185: 0xFF32,
+ 6186: 0xFF33,
+ 6187: 0xFF34,
+ 6188: 0xFF35,
+ 6189: 0xFF36,
+ 6190: 0xFF37,
+ 6191: 0xFF38,
+ 6192: 0xFF39,
+ 6193: 0xFF3A,
+ 6194: 0xFF3B,
+ 6195: 0xFFE6,
+ 6196: 0xFF3D,
+ 6197: 0xFF3E,
+ 6198: 0xFF3F,
+ 6199: 0xFF40,
+ 6200: 0xFF41,
+ 6201: 0xFF42,
+ 6202: 0xFF43,
+ 6203: 0xFF44,
+ 6204: 0xFF45,
+ 6205: 0xFF46,
+ 6206: 0xFF47,
+ 6207: 0xFF48,
+ 6208: 0xFF49,
+ 6209: 0xFF4A,
+ 6210: 0xFF4B,
+ 6211: 0xFF4C,
+ 6212: 0xFF4D,
+ 6213: 0xFF4E,
+ 6214: 0xFF4F,
+ 6215: 0xFF50,
+ 6216: 0xFF51,
+ 6217: 0xFF52,
+ 6218: 0xFF53,
+ 6219: 0xFF54,
+ 6220: 0xFF55,
+ 6221: 0xFF56,
+ 6222: 0xFF57,
+ 6223: 0xFF58,
+ 6224: 0xFF59,
+ 6225: 0xFF5A,
+ 6226: 0xFF5B,
+ 6227: 0xFF5C,
+ 6228: 0xFF5D,
+ 6229: 0xFFE3,
+ 6230: 0xC9DE,
+ 6231: 0xC9DF,
+ 6232: 0xC9E1,
+ 6233: 0xC9E3,
+ 6234: 0xC9E5,
+ 6235: 0xC9E6,
+ 6236: 0xC9E8,
+ 6237: 0xC9E9,
+ 6238: 0xC9EA,
+ 6239: 0xC9EB,
+ 6240: 0xC9EE,
+ 6241: 0xC9F2,
+ 6242: 0xC9F3,
+ 6243: 0xC9F4,
+ 6244: 0xC9F5,
+ 6245: 0xC9F6,
+ 6246: 0xC9F7,
+ 6247: 0xC9FA,
+ 6248: 0xC9FB,
+ 6249: 0xC9FD,
+ 6250: 0xC9FE,
+ 6251: 0xC9FF,
+ 6252: 0xCA01,
+ 6253: 0xCA02,
+ 6254: 0xCA03,
+ 6255: 0xCA04,
+ 6256: 0xCA05,
+ 6257: 0xCA06,
+ 6258: 0xCA07,
+ 6259: 0xCA0A,
+ 6260: 0xCA0E,
+ 6261: 0xCA0F,
+ 6262: 0xCA10,
+ 6263: 0xCA11,
+ 6264: 0xCA12,
+ 6265: 0xCA13,
+ 6266: 0xCA15,
+ 6267: 0xCA16,
+ 6268: 0xCA17,
+ 6269: 0xCA19,
+ 6270: 0xCA1A,
+ 6271: 0xCA1B,
+ 6272: 0xCA1C,
+ 6273: 0xCA1D,
+ 6274: 0xCA1E,
+ 6275: 0xCA1F,
+ 6276: 0xCA20,
+ 6277: 0xCA21,
+ 6278: 0xCA22,
+ 6279: 0xCA23,
+ 6280: 0xCA24,
+ 6281: 0xCA25,
+ 6282: 0xCA26,
+ 6283: 0xCA27,
+ 6284: 0xCA28,
+ 6285: 0xCA2A,
+ 6286: 0xCA2B,
+ 6287: 0xCA2C,
+ 6288: 0xCA2D,
+ 6289: 0xCA2E,
+ 6290: 0xCA2F,
+ 6291: 0xCA30,
+ 6292: 0xCA31,
+ 6293: 0xCA32,
+ 6294: 0xCA33,
+ 6295: 0xCA34,
+ 6296: 0xCA35,
+ 6297: 0xCA36,
+ 6298: 0xCA37,
+ 6299: 0xCA38,
+ 6300: 0xCA39,
+ 6301: 0xCA3A,
+ 6302: 0xCA3B,
+ 6303: 0xCA3C,
+ 6304: 0xCA3D,
+ 6305: 0xCA3E,
+ 6306: 0xCA3F,
+ 6307: 0xCA40,
+ 6308: 0xCA41,
+ 6309: 0xCA42,
+ 6310: 0xCA43,
+ 6311: 0xCA44,
+ 6312: 0xCA45,
+ 6313: 0xCA46,
+ 6314: 0x3131,
+ 6315: 0x3132,
+ 6316: 0x3133,
+ 6317: 0x3134,
+ 6318: 0x3135,
+ 6319: 0x3136,
+ 6320: 0x3137,
+ 6321: 0x3138,
+ 6322: 0x3139,
+ 6323: 0x313A,
+ 6324: 0x313B,
+ 6325: 0x313C,
+ 6326: 0x313D,
+ 6327: 0x313E,
+ 6328: 0x313F,
+ 6329: 0x3140,
+ 6330: 0x3141,
+ 6331: 0x3142,
+ 6332: 0x3143,
+ 6333: 0x3144,
+ 6334: 0x3145,
+ 6335: 0x3146,
+ 6336: 0x3147,
+ 6337: 0x3148,
+ 6338: 0x3149,
+ 6339: 0x314A,
+ 6340: 0x314B,
+ 6341: 0x314C,
+ 6342: 0x314D,
+ 6343: 0x314E,
+ 6344: 0x314F,
+ 6345: 0x3150,
+ 6346: 0x3151,
+ 6347: 0x3152,
+ 6348: 0x3153,
+ 6349: 0x3154,
+ 6350: 0x3155,
+ 6351: 0x3156,
+ 6352: 0x3157,
+ 6353: 0x3158,
+ 6354: 0x3159,
+ 6355: 0x315A,
+ 6356: 0x315B,
+ 6357: 0x315C,
+ 6358: 0x315D,
+ 6359: 0x315E,
+ 6360: 0x315F,
+ 6361: 0x3160,
+ 6362: 0x3161,
+ 6363: 0x3162,
+ 6364: 0x3163,
+ 6365: 0x3164,
+ 6366: 0x3165,
+ 6367: 0x3166,
+ 6368: 0x3167,
+ 6369: 0x3168,
+ 6370: 0x3169,
+ 6371: 0x316A,
+ 6372: 0x316B,
+ 6373: 0x316C,
+ 6374: 0x316D,
+ 6375: 0x316E,
+ 6376: 0x316F,
+ 6377: 0x3170,
+ 6378: 0x3171,
+ 6379: 0x3172,
+ 6380: 0x3173,
+ 6381: 0x3174,
+ 6382: 0x3175,
+ 6383: 0x3176,
+ 6384: 0x3177,
+ 6385: 0x3178,
+ 6386: 0x3179,
+ 6387: 0x317A,
+ 6388: 0x317B,
+ 6389: 0x317C,
+ 6390: 0x317D,
+ 6391: 0x317E,
+ 6392: 0x317F,
+ 6393: 0x3180,
+ 6394: 0x3181,
+ 6395: 0x3182,
+ 6396: 0x3183,
+ 6397: 0x3184,
+ 6398: 0x3185,
+ 6399: 0x3186,
+ 6400: 0x3187,
+ 6401: 0x3188,
+ 6402: 0x3189,
+ 6403: 0x318A,
+ 6404: 0x318B,
+ 6405: 0x318C,
+ 6406: 0x318D,
+ 6407: 0x318E,
+ 6408: 0xCA47,
+ 6409: 0xCA48,
+ 6410: 0xCA49,
+ 6411: 0xCA4A,
+ 6412: 0xCA4B,
+ 6413: 0xCA4E,
+ 6414: 0xCA4F,
+ 6415: 0xCA51,
+ 6416: 0xCA52,
+ 6417: 0xCA53,
+ 6418: 0xCA55,
+ 6419: 0xCA56,
+ 6420: 0xCA57,
+ 6421: 0xCA58,
+ 6422: 0xCA59,
+ 6423: 0xCA5A,
+ 6424: 0xCA5B,
+ 6425: 0xCA5E,
+ 6426: 0xCA62,
+ 6427: 0xCA63,
+ 6428: 0xCA64,
+ 6429: 0xCA65,
+ 6430: 0xCA66,
+ 6431: 0xCA67,
+ 6432: 0xCA69,
+ 6433: 0xCA6A,
+ 6434: 0xCA6B,
+ 6435: 0xCA6C,
+ 6436: 0xCA6D,
+ 6437: 0xCA6E,
+ 6438: 0xCA6F,
+ 6439: 0xCA70,
+ 6440: 0xCA71,
+ 6441: 0xCA72,
+ 6442: 0xCA73,
+ 6443: 0xCA74,
+ 6444: 0xCA75,
+ 6445: 0xCA76,
+ 6446: 0xCA77,
+ 6447: 0xCA78,
+ 6448: 0xCA79,
+ 6449: 0xCA7A,
+ 6450: 0xCA7B,
+ 6451: 0xCA7C,
+ 6452: 0xCA7E,
+ 6453: 0xCA7F,
+ 6454: 0xCA80,
+ 6455: 0xCA81,
+ 6456: 0xCA82,
+ 6457: 0xCA83,
+ 6458: 0xCA85,
+ 6459: 0xCA86,
+ 6460: 0xCA87,
+ 6461: 0xCA88,
+ 6462: 0xCA89,
+ 6463: 0xCA8A,
+ 6464: 0xCA8B,
+ 6465: 0xCA8C,
+ 6466: 0xCA8D,
+ 6467: 0xCA8E,
+ 6468: 0xCA8F,
+ 6469: 0xCA90,
+ 6470: 0xCA91,
+ 6471: 0xCA92,
+ 6472: 0xCA93,
+ 6473: 0xCA94,
+ 6474: 0xCA95,
+ 6475: 0xCA96,
+ 6476: 0xCA97,
+ 6477: 0xCA99,
+ 6478: 0xCA9A,
+ 6479: 0xCA9B,
+ 6480: 0xCA9C,
+ 6481: 0xCA9D,
+ 6482: 0xCA9E,
+ 6483: 0xCA9F,
+ 6484: 0xCAA0,
+ 6485: 0xCAA1,
+ 6486: 0xCAA2,
+ 6487: 0xCAA3,
+ 6488: 0xCAA4,
+ 6489: 0xCAA5,
+ 6490: 0xCAA6,
+ 6491: 0xCAA7,
+ 6492: 0x2170,
+ 6493: 0x2171,
+ 6494: 0x2172,
+ 6495: 0x2173,
+ 6496: 0x2174,
+ 6497: 0x2175,
+ 6498: 0x2176,
+ 6499: 0x2177,
+ 6500: 0x2178,
+ 6501: 0x2179,
+ 6507: 0x2160,
+ 6508: 0x2161,
+ 6509: 0x2162,
+ 6510: 0x2163,
+ 6511: 0x2164,
+ 6512: 0x2165,
+ 6513: 0x2166,
+ 6514: 0x2167,
+ 6515: 0x2168,
+ 6516: 0x2169,
+ 6524: 0x0391,
+ 6525: 0x0392,
+ 6526: 0x0393,
+ 6527: 0x0394,
+ 6528: 0x0395,
+ 6529: 0x0396,
+ 6530: 0x0397,
+ 6531: 0x0398,
+ 6532: 0x0399,
+ 6533: 0x039A,
+ 6534: 0x039B,
+ 6535: 0x039C,
+ 6536: 0x039D,
+ 6537: 0x039E,
+ 6538: 0x039F,
+ 6539: 0x03A0,
+ 6540: 0x03A1,
+ 6541: 0x03A3,
+ 6542: 0x03A4,
+ 6543: 0x03A5,
+ 6544: 0x03A6,
+ 6545: 0x03A7,
+ 6546: 0x03A8,
+ 6547: 0x03A9,
+ 6556: 0x03B1,
+ 6557: 0x03B2,
+ 6558: 0x03B3,
+ 6559: 0x03B4,
+ 6560: 0x03B5,
+ 6561: 0x03B6,
+ 6562: 0x03B7,
+ 6563: 0x03B8,
+ 6564: 0x03B9,
+ 6565: 0x03BA,
+ 6566: 0x03BB,
+ 6567: 0x03BC,
+ 6568: 0x03BD,
+ 6569: 0x03BE,
+ 6570: 0x03BF,
+ 6571: 0x03C0,
+ 6572: 0x03C1,
+ 6573: 0x03C3,
+ 6574: 0x03C4,
+ 6575: 0x03C5,
+ 6576: 0x03C6,
+ 6577: 0x03C7,
+ 6578: 0x03C8,
+ 6579: 0x03C9,
+ 6586: 0xCAA8,
+ 6587: 0xCAA9,
+ 6588: 0xCAAA,
+ 6589: 0xCAAB,
+ 6590: 0xCAAC,
+ 6591: 0xCAAD,
+ 6592: 0xCAAE,
+ 6593: 0xCAAF,
+ 6594: 0xCAB0,
+ 6595: 0xCAB1,
+ 6596: 0xCAB2,
+ 6597: 0xCAB3,
+ 6598: 0xCAB4,
+ 6599: 0xCAB5,
+ 6600: 0xCAB6,
+ 6601: 0xCAB7,
+ 6602: 0xCAB8,
+ 6603: 0xCAB9,
+ 6604: 0xCABA,
+ 6605: 0xCABB,
+ 6606: 0xCABE,
+ 6607: 0xCABF,
+ 6608: 0xCAC1,
+ 6609: 0xCAC2,
+ 6610: 0xCAC3,
+ 6611: 0xCAC5,
+ 6612: 0xCAC6,
+ 6613: 0xCAC7,
+ 6614: 0xCAC8,
+ 6615: 0xCAC9,
+ 6616: 0xCACA,
+ 6617: 0xCACB,
+ 6618: 0xCACE,
+ 6619: 0xCAD0,
+ 6620: 0xCAD2,
+ 6621: 0xCAD4,
+ 6622: 0xCAD5,
+ 6623: 0xCAD6,
+ 6624: 0xCAD7,
+ 6625: 0xCADA,
+ 6626: 0xCADB,
+ 6627: 0xCADC,
+ 6628: 0xCADD,
+ 6629: 0xCADE,
+ 6630: 0xCADF,
+ 6631: 0xCAE1,
+ 6632: 0xCAE2,
+ 6633: 0xCAE3,
+ 6634: 0xCAE4,
+ 6635: 0xCAE5,
+ 6636: 0xCAE6,
+ 6637: 0xCAE7,
+ 6638: 0xCAE8,
+ 6639: 0xCAE9,
+ 6640: 0xCAEA,
+ 6641: 0xCAEB,
+ 6642: 0xCAED,
+ 6643: 0xCAEE,
+ 6644: 0xCAEF,
+ 6645: 0xCAF0,
+ 6646: 0xCAF1,
+ 6647: 0xCAF2,
+ 6648: 0xCAF3,
+ 6649: 0xCAF5,
+ 6650: 0xCAF6,
+ 6651: 0xCAF7,
+ 6652: 0xCAF8,
+ 6653: 0xCAF9,
+ 6654: 0xCAFA,
+ 6655: 0xCAFB,
+ 6656: 0xCAFC,
+ 6657: 0xCAFD,
+ 6658: 0xCAFE,
+ 6659: 0xCAFF,
+ 6660: 0xCB00,
+ 6661: 0xCB01,
+ 6662: 0xCB02,
+ 6663: 0xCB03,
+ 6664: 0xCB04,
+ 6665: 0xCB05,
+ 6666: 0xCB06,
+ 6667: 0xCB07,
+ 6668: 0xCB09,
+ 6669: 0xCB0A,
+ 6670: 0x2500,
+ 6671: 0x2502,
+ 6672: 0x250C,
+ 6673: 0x2510,
+ 6674: 0x2518,
+ 6675: 0x2514,
+ 6676: 0x251C,
+ 6677: 0x252C,
+ 6678: 0x2524,
+ 6679: 0x2534,
+ 6680: 0x253C,
+ 6681: 0x2501,
+ 6682: 0x2503,
+ 6683: 0x250F,
+ 6684: 0x2513,
+ 6685: 0x251B,
+ 6686: 0x2517,
+ 6687: 0x2523,
+ 6688: 0x2533,
+ 6689: 0x252B,
+ 6690: 0x253B,
+ 6691: 0x254B,
+ 6692: 0x2520,
+ 6693: 0x252F,
+ 6694: 0x2528,
+ 6695: 0x2537,
+ 6696: 0x253F,
+ 6697: 0x251D,
+ 6698: 0x2530,
+ 6699: 0x2525,
+ 6700: 0x2538,
+ 6701: 0x2542,
+ 6702: 0x2512,
+ 6703: 0x2511,
+ 6704: 0x251A,
+ 6705: 0x2519,
+ 6706: 0x2516,
+ 6707: 0x2515,
+ 6708: 0x250E,
+ 6709: 0x250D,
+ 6710: 0x251E,
+ 6711: 0x251F,
+ 6712: 0x2521,
+ 6713: 0x2522,
+ 6714: 0x2526,
+ 6715: 0x2527,
+ 6716: 0x2529,
+ 6717: 0x252A,
+ 6718: 0x252D,
+ 6719: 0x252E,
+ 6720: 0x2531,
+ 6721: 0x2532,
+ 6722: 0x2535,
+ 6723: 0x2536,
+ 6724: 0x2539,
+ 6725: 0x253A,
+ 6726: 0x253D,
+ 6727: 0x253E,
+ 6728: 0x2540,
+ 6729: 0x2541,
+ 6730: 0x2543,
+ 6731: 0x2544,
+ 6732: 0x2545,
+ 6733: 0x2546,
+ 6734: 0x2547,
+ 6735: 0x2548,
+ 6736: 0x2549,
+ 6737: 0x254A,
+ 6764: 0xCB0B,
+ 6765: 0xCB0C,
+ 6766: 0xCB0D,
+ 6767: 0xCB0E,
+ 6768: 0xCB0F,
+ 6769: 0xCB11,
+ 6770: 0xCB12,
+ 6771: 0xCB13,
+ 6772: 0xCB15,
+ 6773: 0xCB16,
+ 6774: 0xCB17,
+ 6775: 0xCB19,
+ 6776: 0xCB1A,
+ 6777: 0xCB1B,
+ 6778: 0xCB1C,
+ 6779: 0xCB1D,
+ 6780: 0xCB1E,
+ 6781: 0xCB1F,
+ 6782: 0xCB22,
+ 6783: 0xCB23,
+ 6784: 0xCB24,
+ 6785: 0xCB25,
+ 6786: 0xCB26,
+ 6787: 0xCB27,
+ 6788: 0xCB28,
+ 6789: 0xCB29,
+ 6790: 0xCB2A,
+ 6791: 0xCB2B,
+ 6792: 0xCB2C,
+ 6793: 0xCB2D,
+ 6794: 0xCB2E,
+ 6795: 0xCB2F,
+ 6796: 0xCB30,
+ 6797: 0xCB31,
+ 6798: 0xCB32,
+ 6799: 0xCB33,
+ 6800: 0xCB34,
+ 6801: 0xCB35,
+ 6802: 0xCB36,
+ 6803: 0xCB37,
+ 6804: 0xCB38,
+ 6805: 0xCB39,
+ 6806: 0xCB3A,
+ 6807: 0xCB3B,
+ 6808: 0xCB3C,
+ 6809: 0xCB3D,
+ 6810: 0xCB3E,
+ 6811: 0xCB3F,
+ 6812: 0xCB40,
+ 6813: 0xCB42,
+ 6814: 0xCB43,
+ 6815: 0xCB44,
+ 6816: 0xCB45,
+ 6817: 0xCB46,
+ 6818: 0xCB47,
+ 6819: 0xCB4A,
+ 6820: 0xCB4B,
+ 6821: 0xCB4D,
+ 6822: 0xCB4E,
+ 6823: 0xCB4F,
+ 6824: 0xCB51,
+ 6825: 0xCB52,
+ 6826: 0xCB53,
+ 6827: 0xCB54,
+ 6828: 0xCB55,
+ 6829: 0xCB56,
+ 6830: 0xCB57,
+ 6831: 0xCB5A,
+ 6832: 0xCB5B,
+ 6833: 0xCB5C,
+ 6834: 0xCB5E,
+ 6835: 0xCB5F,
+ 6836: 0xCB60,
+ 6837: 0xCB61,
+ 6838: 0xCB62,
+ 6839: 0xCB63,
+ 6840: 0xCB65,
+ 6841: 0xCB66,
+ 6842: 0xCB67,
+ 6843: 0xCB68,
+ 6844: 0xCB69,
+ 6845: 0xCB6A,
+ 6846: 0xCB6B,
+ 6847: 0xCB6C,
+ 6848: 0x3395,
+ 6849: 0x3396,
+ 6850: 0x3397,
+ 6851: 0x2113,
+ 6852: 0x3398,
+ 6853: 0x33C4,
+ 6854: 0x33A3,
+ 6855: 0x33A4,
+ 6856: 0x33A5,
+ 6857: 0x33A6,
+ 6858: 0x3399,
+ 6859: 0x339A,
+ 6860: 0x339B,
+ 6861: 0x339C,
+ 6862: 0x339D,
+ 6863: 0x339E,
+ 6864: 0x339F,
+ 6865: 0x33A0,
+ 6866: 0x33A1,
+ 6867: 0x33A2,
+ 6868: 0x33CA,
+ 6869: 0x338D,
+ 6870: 0x338E,
+ 6871: 0x338F,
+ 6872: 0x33CF,
+ 6873: 0x3388,
+ 6874: 0x3389,
+ 6875: 0x33C8,
+ 6876: 0x33A7,
+ 6877: 0x33A8,
+ 6878: 0x33B0,
+ 6879: 0x33B1,
+ 6880: 0x33B2,
+ 6881: 0x33B3,
+ 6882: 0x33B4,
+ 6883: 0x33B5,
+ 6884: 0x33B6,
+ 6885: 0x33B7,
+ 6886: 0x33B8,
+ 6887: 0x33B9,
+ 6888: 0x3380,
+ 6889: 0x3381,
+ 6890: 0x3382,
+ 6891: 0x3383,
+ 6892: 0x3384,
+ 6893: 0x33BA,
+ 6894: 0x33BB,
+ 6895: 0x33BC,
+ 6896: 0x33BD,
+ 6897: 0x33BE,
+ 6898: 0x33BF,
+ 6899: 0x3390,
+ 6900: 0x3391,
+ 6901: 0x3392,
+ 6902: 0x3393,
+ 6903: 0x3394,
+ 6904: 0x2126,
+ 6905: 0x33C0,
+ 6906: 0x33C1,
+ 6907: 0x338A,
+ 6908: 0x338B,
+ 6909: 0x338C,
+ 6910: 0x33D6,
+ 6911: 0x33C5,
+ 6912: 0x33AD,
+ 6913: 0x33AE,
+ 6914: 0x33AF,
+ 6915: 0x33DB,
+ 6916: 0x33A9,
+ 6917: 0x33AA,
+ 6918: 0x33AB,
+ 6919: 0x33AC,
+ 6920: 0x33DD,
+ 6921: 0x33D0,
+ 6922: 0x33D3,
+ 6923: 0x33C3,
+ 6924: 0x33C9,
+ 6925: 0x33DC,
+ 6926: 0x33C6,
+ 6942: 0xCB6D,
+ 6943: 0xCB6E,
+ 6944: 0xCB6F,
+ 6945: 0xCB70,
+ 6946: 0xCB71,
+ 6947: 0xCB72,
+ 6948: 0xCB73,
+ 6949: 0xCB74,
+ 6950: 0xCB75,
+ 6951: 0xCB76,
+ 6952: 0xCB77,
+ 6953: 0xCB7A,
+ 6954: 0xCB7B,
+ 6955: 0xCB7C,
+ 6956: 0xCB7D,
+ 6957: 0xCB7E,
+ 6958: 0xCB7F,
+ 6959: 0xCB80,
+ 6960: 0xCB81,
+ 6961: 0xCB82,
+ 6962: 0xCB83,
+ 6963: 0xCB84,
+ 6964: 0xCB85,
+ 6965: 0xCB86,
+ 6966: 0xCB87,
+ 6967: 0xCB88,
+ 6968: 0xCB89,
+ 6969: 0xCB8A,
+ 6970: 0xCB8B,
+ 6971: 0xCB8C,
+ 6972: 0xCB8D,
+ 6973: 0xCB8E,
+ 6974: 0xCB8F,
+ 6975: 0xCB90,
+ 6976: 0xCB91,
+ 6977: 0xCB92,
+ 6978: 0xCB93,
+ 6979: 0xCB94,
+ 6980: 0xCB95,
+ 6981: 0xCB96,
+ 6982: 0xCB97,
+ 6983: 0xCB98,
+ 6984: 0xCB99,
+ 6985: 0xCB9A,
+ 6986: 0xCB9B,
+ 6987: 0xCB9D,
+ 6988: 0xCB9E,
+ 6989: 0xCB9F,
+ 6990: 0xCBA0,
+ 6991: 0xCBA1,
+ 6992: 0xCBA2,
+ 6993: 0xCBA3,
+ 6994: 0xCBA4,
+ 6995: 0xCBA5,
+ 6996: 0xCBA6,
+ 6997: 0xCBA7,
+ 6998: 0xCBA8,
+ 6999: 0xCBA9,
+ 7000: 0xCBAA,
+ 7001: 0xCBAB,
+ 7002: 0xCBAC,
+ 7003: 0xCBAD,
+ 7004: 0xCBAE,
+ 7005: 0xCBAF,
+ 7006: 0xCBB0,
+ 7007: 0xCBB1,
+ 7008: 0xCBB2,
+ 7009: 0xCBB3,
+ 7010: 0xCBB4,
+ 7011: 0xCBB5,
+ 7012: 0xCBB6,
+ 7013: 0xCBB7,
+ 7014: 0xCBB9,
+ 7015: 0xCBBA,
+ 7016: 0xCBBB,
+ 7017: 0xCBBC,
+ 7018: 0xCBBD,
+ 7019: 0xCBBE,
+ 7020: 0xCBBF,
+ 7021: 0xCBC0,
+ 7022: 0xCBC1,
+ 7023: 0xCBC2,
+ 7024: 0xCBC3,
+ 7025: 0xCBC4,
+ 7026: 0x00C6,
+ 7027: 0x00D0,
+ 7028: 0x00AA,
+ 7029: 0x0126,
+ 7031: 0x0132,
+ 7033: 0x013F,
+ 7034: 0x0141,
+ 7035: 0x00D8,
+ 7036: 0x0152,
+ 7037: 0x00BA,
+ 7038: 0x00DE,
+ 7039: 0x0166,
+ 7040: 0x014A,
+ 7042: 0x3260,
+ 7043: 0x3261,
+ 7044: 0x3262,
+ 7045: 0x3263,
+ 7046: 0x3264,
+ 7047: 0x3265,
+ 7048: 0x3266,
+ 7049: 0x3267,
+ 7050: 0x3268,
+ 7051: 0x3269,
+ 7052: 0x326A,
+ 7053: 0x326B,
+ 7054: 0x326C,
+ 7055: 0x326D,
+ 7056: 0x326E,
+ 7057: 0x326F,
+ 7058: 0x3270,
+ 7059: 0x3271,
+ 7060: 0x3272,
+ 7061: 0x3273,
+ 7062: 0x3274,
+ 7063: 0x3275,
+ 7064: 0x3276,
+ 7065: 0x3277,
+ 7066: 0x3278,
+ 7067: 0x3279,
+ 7068: 0x327A,
+ 7069: 0x327B,
+ 7070: 0x24D0,
+ 7071: 0x24D1,
+ 7072: 0x24D2,
+ 7073: 0x24D3,
+ 7074: 0x24D4,
+ 7075: 0x24D5,
+ 7076: 0x24D6,
+ 7077: 0x24D7,
+ 7078: 0x24D8,
+ 7079: 0x24D9,
+ 7080: 0x24DA,
+ 7081: 0x24DB,
+ 7082: 0x24DC,
+ 7083: 0x24DD,
+ 7084: 0x24DE,
+ 7085: 0x24DF,
+ 7086: 0x24E0,
+ 7087: 0x24E1,
+ 7088: 0x24E2,
+ 7089: 0x24E3,
+ 7090: 0x24E4,
+ 7091: 0x24E5,
+ 7092: 0x24E6,
+ 7093: 0x24E7,
+ 7094: 0x24E8,
+ 7095: 0x24E9,
+ 7096: 0x2460,
+ 7097: 0x2461,
+ 7098: 0x2462,
+ 7099: 0x2463,
+ 7100: 0x2464,
+ 7101: 0x2465,
+ 7102: 0x2466,
+ 7103: 0x2467,
+ 7104: 0x2468,
+ 7105: 0x2469,
+ 7106: 0x246A,
+ 7107: 0x246B,
+ 7108: 0x246C,
+ 7109: 0x246D,
+ 7110: 0x246E,
+ 7111: 0x00BD,
+ 7112: 0x2153,
+ 7113: 0x2154,
+ 7114: 0x00BC,
+ 7115: 0x00BE,
+ 7116: 0x215B,
+ 7117: 0x215C,
+ 7118: 0x215D,
+ 7119: 0x215E,
+ 7120: 0xCBC5,
+ 7121: 0xCBC6,
+ 7122: 0xCBC7,
+ 7123: 0xCBC8,
+ 7124: 0xCBC9,
+ 7125: 0xCBCA,
+ 7126: 0xCBCB,
+ 7127: 0xCBCC,
+ 7128: 0xCBCD,
+ 7129: 0xCBCE,
+ 7130: 0xCBCF,
+ 7131: 0xCBD0,
+ 7132: 0xCBD1,
+ 7133: 0xCBD2,
+ 7134: 0xCBD3,
+ 7135: 0xCBD5,
+ 7136: 0xCBD6,
+ 7137: 0xCBD7,
+ 7138: 0xCBD8,
+ 7139: 0xCBD9,
+ 7140: 0xCBDA,
+ 7141: 0xCBDB,
+ 7142: 0xCBDC,
+ 7143: 0xCBDD,
+ 7144: 0xCBDE,
+ 7145: 0xCBDF,
+ 7146: 0xCBE0,
+ 7147: 0xCBE1,
+ 7148: 0xCBE2,
+ 7149: 0xCBE3,
+ 7150: 0xCBE5,
+ 7151: 0xCBE6,
+ 7152: 0xCBE8,
+ 7153: 0xCBEA,
+ 7154: 0xCBEB,
+ 7155: 0xCBEC,
+ 7156: 0xCBED,
+ 7157: 0xCBEE,
+ 7158: 0xCBEF,
+ 7159: 0xCBF0,
+ 7160: 0xCBF1,
+ 7161: 0xCBF2,
+ 7162: 0xCBF3,
+ 7163: 0xCBF4,
+ 7164: 0xCBF5,
+ 7165: 0xCBF6,
+ 7166: 0xCBF7,
+ 7167: 0xCBF8,
+ 7168: 0xCBF9,
+ 7169: 0xCBFA,
+ 7170: 0xCBFB,
+ 7171: 0xCBFC,
+ 7172: 0xCBFD,
+ 7173: 0xCBFE,
+ 7174: 0xCBFF,
+ 7175: 0xCC00,
+ 7176: 0xCC01,
+ 7177: 0xCC02,
+ 7178: 0xCC03,
+ 7179: 0xCC04,
+ 7180: 0xCC05,
+ 7181: 0xCC06,
+ 7182: 0xCC07,
+ 7183: 0xCC08,
+ 7184: 0xCC09,
+ 7185: 0xCC0A,
+ 7186: 0xCC0B,
+ 7187: 0xCC0E,
+ 7188: 0xCC0F,
+ 7189: 0xCC11,
+ 7190: 0xCC12,
+ 7191: 0xCC13,
+ 7192: 0xCC15,
+ 7193: 0xCC16,
+ 7194: 0xCC17,
+ 7195: 0xCC18,
+ 7196: 0xCC19,
+ 7197: 0xCC1A,
+ 7198: 0xCC1B,
+ 7199: 0xCC1E,
+ 7200: 0xCC1F,
+ 7201: 0xCC20,
+ 7202: 0xCC23,
+ 7203: 0xCC24,
+ 7204: 0x00E6,
+ 7205: 0x0111,
+ 7206: 0x00F0,
+ 7207: 0x0127,
+ 7208: 0x0131,
+ 7209: 0x0133,
+ 7210: 0x0138,
+ 7211: 0x0140,
+ 7212: 0x0142,
+ 7213: 0x00F8,
+ 7214: 0x0153,
+ 7215: 0x00DF,
+ 7216: 0x00FE,
+ 7217: 0x0167,
+ 7218: 0x014B,
+ 7219: 0x0149,
+ 7220: 0x3200,
+ 7221: 0x3201,
+ 7222: 0x3202,
+ 7223: 0x3203,
+ 7224: 0x3204,
+ 7225: 0x3205,
+ 7226: 0x3206,
+ 7227: 0x3207,
+ 7228: 0x3208,
+ 7229: 0x3209,
+ 7230: 0x320A,
+ 7231: 0x320B,
+ 7232: 0x320C,
+ 7233: 0x320D,
+ 7234: 0x320E,
+ 7235: 0x320F,
+ 7236: 0x3210,
+ 7237: 0x3211,
+ 7238: 0x3212,
+ 7239: 0x3213,
+ 7240: 0x3214,
+ 7241: 0x3215,
+ 7242: 0x3216,
+ 7243: 0x3217,
+ 7244: 0x3218,
+ 7245: 0x3219,
+ 7246: 0x321A,
+ 7247: 0x321B,
+ 7248: 0x249C,
+ 7249: 0x249D,
+ 7250: 0x249E,
+ 7251: 0x249F,
+ 7252: 0x24A0,
+ 7253: 0x24A1,
+ 7254: 0x24A2,
+ 7255: 0x24A3,
+ 7256: 0x24A4,
+ 7257: 0x24A5,
+ 7258: 0x24A6,
+ 7259: 0x24A7,
+ 7260: 0x24A8,
+ 7261: 0x24A9,
+ 7262: 0x24AA,
+ 7263: 0x24AB,
+ 7264: 0x24AC,
+ 7265: 0x24AD,
+ 7266: 0x24AE,
+ 7267: 0x24AF,
+ 7268: 0x24B0,
+ 7269: 0x24B1,
+ 7270: 0x24B2,
+ 7271: 0x24B3,
+ 7272: 0x24B4,
+ 7273: 0x24B5,
+ 7274: 0x2474,
+ 7275: 0x2475,
+ 7276: 0x2476,
+ 7277: 0x2477,
+ 7278: 0x2478,
+ 7279: 0x2479,
+ 7280: 0x247A,
+ 7281: 0x247B,
+ 7282: 0x247C,
+ 7283: 0x247D,
+ 7284: 0x247E,
+ 7285: 0x247F,
+ 7286: 0x2480,
+ 7287: 0x2481,
+ 7288: 0x2482,
+ 7289: 0x00B9,
+ 7290: 0x00B2,
+ 7291: 0x00B3,
+ 7292: 0x2074,
+ 7293: 0x207F,
+ 7294: 0x2081,
+ 7295: 0x2082,
+ 7296: 0x2083,
+ 7297: 0x2084,
+ 7298: 0xCC25,
+ 7299: 0xCC26,
+ 7300: 0xCC2A,
+ 7301: 0xCC2B,
+ 7302: 0xCC2D,
+ 7303: 0xCC2F,
+ 7304: 0xCC31,
+ 7305: 0xCC32,
+ 7306: 0xCC33,
+ 7307: 0xCC34,
+ 7308: 0xCC35,
+ 7309: 0xCC36,
+ 7310: 0xCC37,
+ 7311: 0xCC3A,
+ 7312: 0xCC3F,
+ 7313: 0xCC40,
+ 7314: 0xCC41,
+ 7315: 0xCC42,
+ 7316: 0xCC43,
+ 7317: 0xCC46,
+ 7318: 0xCC47,
+ 7319: 0xCC49,
+ 7320: 0xCC4A,
+ 7321: 0xCC4B,
+ 7322: 0xCC4D,
+ 7323: 0xCC4E,
+ 7324: 0xCC4F,
+ 7325: 0xCC50,
+ 7326: 0xCC51,
+ 7327: 0xCC52,
+ 7328: 0xCC53,
+ 7329: 0xCC56,
+ 7330: 0xCC5A,
+ 7331: 0xCC5B,
+ 7332: 0xCC5C,
+ 7333: 0xCC5D,
+ 7334: 0xCC5E,
+ 7335: 0xCC5F,
+ 7336: 0xCC61,
+ 7337: 0xCC62,
+ 7338: 0xCC63,
+ 7339: 0xCC65,
+ 7340: 0xCC67,
+ 7341: 0xCC69,
+ 7342: 0xCC6A,
+ 7343: 0xCC6B,
+ 7344: 0xCC6C,
+ 7345: 0xCC6D,
+ 7346: 0xCC6E,
+ 7347: 0xCC6F,
+ 7348: 0xCC71,
+ 7349: 0xCC72,
+ 7350: 0xCC73,
+ 7351: 0xCC74,
+ 7352: 0xCC76,
+ 7353: 0xCC77,
+ 7354: 0xCC78,
+ 7355: 0xCC79,
+ 7356: 0xCC7A,
+ 7357: 0xCC7B,
+ 7358: 0xCC7C,
+ 7359: 0xCC7D,
+ 7360: 0xCC7E,
+ 7361: 0xCC7F,
+ 7362: 0xCC80,
+ 7363: 0xCC81,
+ 7364: 0xCC82,
+ 7365: 0xCC83,
+ 7366: 0xCC84,
+ 7367: 0xCC85,
+ 7368: 0xCC86,
+ 7369: 0xCC87,
+ 7370: 0xCC88,
+ 7371: 0xCC89,
+ 7372: 0xCC8A,
+ 7373: 0xCC8B,
+ 7374: 0xCC8C,
+ 7375: 0xCC8D,
+ 7376: 0xCC8E,
+ 7377: 0xCC8F,
+ 7378: 0xCC90,
+ 7379: 0xCC91,
+ 7380: 0xCC92,
+ 7381: 0xCC93,
+ 7382: 0x3041,
+ 7383: 0x3042,
+ 7384: 0x3043,
+ 7385: 0x3044,
+ 7386: 0x3045,
+ 7387: 0x3046,
+ 7388: 0x3047,
+ 7389: 0x3048,
+ 7390: 0x3049,
+ 7391: 0x304A,
+ 7392: 0x304B,
+ 7393: 0x304C,
+ 7394: 0x304D,
+ 7395: 0x304E,
+ 7396: 0x304F,
+ 7397: 0x3050,
+ 7398: 0x3051,
+ 7399: 0x3052,
+ 7400: 0x3053,
+ 7401: 0x3054,
+ 7402: 0x3055,
+ 7403: 0x3056,
+ 7404: 0x3057,
+ 7405: 0x3058,
+ 7406: 0x3059,
+ 7407: 0x305A,
+ 7408: 0x305B,
+ 7409: 0x305C,
+ 7410: 0x305D,
+ 7411: 0x305E,
+ 7412: 0x305F,
+ 7413: 0x3060,
+ 7414: 0x3061,
+ 7415: 0x3062,
+ 7416: 0x3063,
+ 7417: 0x3064,
+ 7418: 0x3065,
+ 7419: 0x3066,
+ 7420: 0x3067,
+ 7421: 0x3068,
+ 7422: 0x3069,
+ 7423: 0x306A,
+ 7424: 0x306B,
+ 7425: 0x306C,
+ 7426: 0x306D,
+ 7427: 0x306E,
+ 7428: 0x306F,
+ 7429: 0x3070,
+ 7430: 0x3071,
+ 7431: 0x3072,
+ 7432: 0x3073,
+ 7433: 0x3074,
+ 7434: 0x3075,
+ 7435: 0x3076,
+ 7436: 0x3077,
+ 7437: 0x3078,
+ 7438: 0x3079,
+ 7439: 0x307A,
+ 7440: 0x307B,
+ 7441: 0x307C,
+ 7442: 0x307D,
+ 7443: 0x307E,
+ 7444: 0x307F,
+ 7445: 0x3080,
+ 7446: 0x3081,
+ 7447: 0x3082,
+ 7448: 0x3083,
+ 7449: 0x3084,
+ 7450: 0x3085,
+ 7451: 0x3086,
+ 7452: 0x3087,
+ 7453: 0x3088,
+ 7454: 0x3089,
+ 7455: 0x308A,
+ 7456: 0x308B,
+ 7457: 0x308C,
+ 7458: 0x308D,
+ 7459: 0x308E,
+ 7460: 0x308F,
+ 7461: 0x3090,
+ 7462: 0x3091,
+ 7463: 0x3092,
+ 7464: 0x3093,
+ 7476: 0xCC94,
+ 7477: 0xCC95,
+ 7478: 0xCC96,
+ 7479: 0xCC97,
+ 7480: 0xCC9A,
+ 7481: 0xCC9B,
+ 7482: 0xCC9D,
+ 7483: 0xCC9E,
+ 7484: 0xCC9F,
+ 7485: 0xCCA1,
+ 7486: 0xCCA2,
+ 7487: 0xCCA3,
+ 7488: 0xCCA4,
+ 7489: 0xCCA5,
+ 7490: 0xCCA6,
+ 7491: 0xCCA7,
+ 7492: 0xCCAA,
+ 7493: 0xCCAE,
+ 7494: 0xCCAF,
+ 7495: 0xCCB0,
+ 7496: 0xCCB1,
+ 7497: 0xCCB2,
+ 7498: 0xCCB3,
+ 7499: 0xCCB6,
+ 7500: 0xCCB7,
+ 7501: 0xCCB9,
+ 7502: 0xCCBA,
+ 7503: 0xCCBB,
+ 7504: 0xCCBD,
+ 7505: 0xCCBE,
+ 7506: 0xCCBF,
+ 7507: 0xCCC0,
+ 7508: 0xCCC1,
+ 7509: 0xCCC2,
+ 7510: 0xCCC3,
+ 7511: 0xCCC6,
+ 7512: 0xCCC8,
+ 7513: 0xCCCA,
+ 7514: 0xCCCB,
+ 7515: 0xCCCC,
+ 7516: 0xCCCD,
+ 7517: 0xCCCE,
+ 7518: 0xCCCF,
+ 7519: 0xCCD1,
+ 7520: 0xCCD2,
+ 7521: 0xCCD3,
+ 7522: 0xCCD5,
+ 7523: 0xCCD6,
+ 7524: 0xCCD7,
+ 7525: 0xCCD8,
+ 7526: 0xCCD9,
+ 7527: 0xCCDA,
+ 7528: 0xCCDB,
+ 7529: 0xCCDC,
+ 7530: 0xCCDD,
+ 7531: 0xCCDE,
+ 7532: 0xCCDF,
+ 7533: 0xCCE0,
+ 7534: 0xCCE1,
+ 7535: 0xCCE2,
+ 7536: 0xCCE3,
+ 7537: 0xCCE5,
+ 7538: 0xCCE6,
+ 7539: 0xCCE7,
+ 7540: 0xCCE8,
+ 7541: 0xCCE9,
+ 7542: 0xCCEA,
+ 7543: 0xCCEB,
+ 7544: 0xCCED,
+ 7545: 0xCCEE,
+ 7546: 0xCCEF,
+ 7547: 0xCCF1,
+ 7548: 0xCCF2,
+ 7549: 0xCCF3,
+ 7550: 0xCCF4,
+ 7551: 0xCCF5,
+ 7552: 0xCCF6,
+ 7553: 0xCCF7,
+ 7554: 0xCCF8,
+ 7555: 0xCCF9,
+ 7556: 0xCCFA,
+ 7557: 0xCCFB,
+ 7558: 0xCCFC,
+ 7559: 0xCCFD,
+ 7560: 0x30A1,
+ 7561: 0x30A2,
+ 7562: 0x30A3,
+ 7563: 0x30A4,
+ 7564: 0x30A5,
+ 7565: 0x30A6,
+ 7566: 0x30A7,
+ 7567: 0x30A8,
+ 7568: 0x30A9,
+ 7569: 0x30AA,
+ 7570: 0x30AB,
+ 7571: 0x30AC,
+ 7572: 0x30AD,
+ 7573: 0x30AE,
+ 7574: 0x30AF,
+ 7575: 0x30B0,
+ 7576: 0x30B1,
+ 7577: 0x30B2,
+ 7578: 0x30B3,
+ 7579: 0x30B4,
+ 7580: 0x30B5,
+ 7581: 0x30B6,
+ 7582: 0x30B7,
+ 7583: 0x30B8,
+ 7584: 0x30B9,
+ 7585: 0x30BA,
+ 7586: 0x30BB,
+ 7587: 0x30BC,
+ 7588: 0x30BD,
+ 7589: 0x30BE,
+ 7590: 0x30BF,
+ 7591: 0x30C0,
+ 7592: 0x30C1,
+ 7593: 0x30C2,
+ 7594: 0x30C3,
+ 7595: 0x30C4,
+ 7596: 0x30C5,
+ 7597: 0x30C6,
+ 7598: 0x30C7,
+ 7599: 0x30C8,
+ 7600: 0x30C9,
+ 7601: 0x30CA,
+ 7602: 0x30CB,
+ 7603: 0x30CC,
+ 7604: 0x30CD,
+ 7605: 0x30CE,
+ 7606: 0x30CF,
+ 7607: 0x30D0,
+ 7608: 0x30D1,
+ 7609: 0x30D2,
+ 7610: 0x30D3,
+ 7611: 0x30D4,
+ 7612: 0x30D5,
+ 7613: 0x30D6,
+ 7614: 0x30D7,
+ 7615: 0x30D8,
+ 7616: 0x30D9,
+ 7617: 0x30DA,
+ 7618: 0x30DB,
+ 7619: 0x30DC,
+ 7620: 0x30DD,
+ 7621: 0x30DE,
+ 7622: 0x30DF,
+ 7623: 0x30E0,
+ 7624: 0x30E1,
+ 7625: 0x30E2,
+ 7626: 0x30E3,
+ 7627: 0x30E4,
+ 7628: 0x30E5,
+ 7629: 0x30E6,
+ 7630: 0x30E7,
+ 7631: 0x30E8,
+ 7632: 0x30E9,
+ 7633: 0x30EA,
+ 7634: 0x30EB,
+ 7635: 0x30EC,
+ 7636: 0x30ED,
+ 7637: 0x30EE,
+ 7638: 0x30EF,
+ 7639: 0x30F0,
+ 7640: 0x30F1,
+ 7641: 0x30F2,
+ 7642: 0x30F3,
+ 7643: 0x30F4,
+ 7644: 0x30F5,
+ 7645: 0x30F6,
+ 7654: 0xCCFE,
+ 7655: 0xCCFF,
+ 7656: 0xCD00,
+ 7657: 0xCD02,
+ 7658: 0xCD03,
+ 7659: 0xCD04,
+ 7660: 0xCD05,
+ 7661: 0xCD06,
+ 7662: 0xCD07,
+ 7663: 0xCD0A,
+ 7664: 0xCD0B,
+ 7665: 0xCD0D,
+ 7666: 0xCD0E,
+ 7667: 0xCD0F,
+ 7668: 0xCD11,
+ 7669: 0xCD12,
+ 7670: 0xCD13,
+ 7671: 0xCD14,
+ 7672: 0xCD15,
+ 7673: 0xCD16,
+ 7674: 0xCD17,
+ 7675: 0xCD1A,
+ 7676: 0xCD1C,
+ 7677: 0xCD1E,
+ 7678: 0xCD1F,
+ 7679: 0xCD20,
+ 7680: 0xCD21,
+ 7681: 0xCD22,
+ 7682: 0xCD23,
+ 7683: 0xCD25,
+ 7684: 0xCD26,
+ 7685: 0xCD27,
+ 7686: 0xCD29,
+ 7687: 0xCD2A,
+ 7688: 0xCD2B,
+ 7689: 0xCD2D,
+ 7690: 0xCD2E,
+ 7691: 0xCD2F,
+ 7692: 0xCD30,
+ 7693: 0xCD31,
+ 7694: 0xCD32,
+ 7695: 0xCD33,
+ 7696: 0xCD34,
+ 7697: 0xCD35,
+ 7698: 0xCD36,
+ 7699: 0xCD37,
+ 7700: 0xCD38,
+ 7701: 0xCD3A,
+ 7702: 0xCD3B,
+ 7703: 0xCD3C,
+ 7704: 0xCD3D,
+ 7705: 0xCD3E,
+ 7706: 0xCD3F,
+ 7707: 0xCD40,
+ 7708: 0xCD41,
+ 7709: 0xCD42,
+ 7710: 0xCD43,
+ 7711: 0xCD44,
+ 7712: 0xCD45,
+ 7713: 0xCD46,
+ 7714: 0xCD47,
+ 7715: 0xCD48,
+ 7716: 0xCD49,
+ 7717: 0xCD4A,
+ 7718: 0xCD4B,
+ 7719: 0xCD4C,
+ 7720: 0xCD4D,
+ 7721: 0xCD4E,
+ 7722: 0xCD4F,
+ 7723: 0xCD50,
+ 7724: 0xCD51,
+ 7725: 0xCD52,
+ 7726: 0xCD53,
+ 7727: 0xCD54,
+ 7728: 0xCD55,
+ 7729: 0xCD56,
+ 7730: 0xCD57,
+ 7731: 0xCD58,
+ 7732: 0xCD59,
+ 7733: 0xCD5A,
+ 7734: 0xCD5B,
+ 7735: 0xCD5D,
+ 7736: 0xCD5E,
+ 7737: 0xCD5F,
+ 7738: 0x0410,
+ 7739: 0x0411,
+ 7740: 0x0412,
+ 7741: 0x0413,
+ 7742: 0x0414,
+ 7743: 0x0415,
+ 7744: 0x0401,
+ 7745: 0x0416,
+ 7746: 0x0417,
+ 7747: 0x0418,
+ 7748: 0x0419,
+ 7749: 0x041A,
+ 7750: 0x041B,
+ 7751: 0x041C,
+ 7752: 0x041D,
+ 7753: 0x041E,
+ 7754: 0x041F,
+ 7755: 0x0420,
+ 7756: 0x0421,
+ 7757: 0x0422,
+ 7758: 0x0423,
+ 7759: 0x0424,
+ 7760: 0x0425,
+ 7761: 0x0426,
+ 7762: 0x0427,
+ 7763: 0x0428,
+ 7764: 0x0429,
+ 7765: 0x042A,
+ 7766: 0x042B,
+ 7767: 0x042C,
+ 7768: 0x042D,
+ 7769: 0x042E,
+ 7770: 0x042F,
+ 7786: 0x0430,
+ 7787: 0x0431,
+ 7788: 0x0432,
+ 7789: 0x0433,
+ 7790: 0x0434,
+ 7791: 0x0435,
+ 7792: 0x0451,
+ 7793: 0x0436,
+ 7794: 0x0437,
+ 7795: 0x0438,
+ 7796: 0x0439,
+ 7797: 0x043A,
+ 7798: 0x043B,
+ 7799: 0x043C,
+ 7800: 0x043D,
+ 7801: 0x043E,
+ 7802: 0x043F,
+ 7803: 0x0440,
+ 7804: 0x0441,
+ 7805: 0x0442,
+ 7806: 0x0443,
+ 7807: 0x0444,
+ 7808: 0x0445,
+ 7809: 0x0446,
+ 7810: 0x0447,
+ 7811: 0x0448,
+ 7812: 0x0449,
+ 7813: 0x044A,
+ 7814: 0x044B,
+ 7815: 0x044C,
+ 7816: 0x044D,
+ 7817: 0x044E,
+ 7818: 0x044F,
+ 7832: 0xCD61,
+ 7833: 0xCD62,
+ 7834: 0xCD63,
+ 7835: 0xCD65,
+ 7836: 0xCD66,
+ 7837: 0xCD67,
+ 7838: 0xCD68,
+ 7839: 0xCD69,
+ 7840: 0xCD6A,
+ 7841: 0xCD6B,
+ 7842: 0xCD6E,
+ 7843: 0xCD70,
+ 7844: 0xCD72,
+ 7845: 0xCD73,
+ 7846: 0xCD74,
+ 7847: 0xCD75,
+ 7848: 0xCD76,
+ 7849: 0xCD77,
+ 7850: 0xCD79,
+ 7851: 0xCD7A,
+ 7852: 0xCD7B,
+ 7853: 0xCD7C,
+ 7854: 0xCD7D,
+ 7855: 0xCD7E,
+ 7856: 0xCD7F,
+ 7857: 0xCD80,
+ 7858: 0xCD81,
+ 7859: 0xCD82,
+ 7860: 0xCD83,
+ 7861: 0xCD84,
+ 7862: 0xCD85,
+ 7863: 0xCD86,
+ 7864: 0xCD87,
+ 7865: 0xCD89,
+ 7866: 0xCD8A,
+ 7867: 0xCD8B,
+ 7868: 0xCD8C,
+ 7869: 0xCD8D,
+ 7870: 0xCD8E,
+ 7871: 0xCD8F,
+ 7872: 0xCD90,
+ 7873: 0xCD91,
+ 7874: 0xCD92,
+ 7875: 0xCD93,
+ 7876: 0xCD96,
+ 7877: 0xCD97,
+ 7878: 0xCD99,
+ 7879: 0xCD9A,
+ 7880: 0xCD9B,
+ 7881: 0xCD9D,
+ 7882: 0xCD9E,
+ 7883: 0xCD9F,
+ 7884: 0xCDA0,
+ 7885: 0xCDA1,
+ 7886: 0xCDA2,
+ 7887: 0xCDA3,
+ 7888: 0xCDA6,
+ 7889: 0xCDA8,
+ 7890: 0xCDAA,
+ 7891: 0xCDAB,
+ 7892: 0xCDAC,
+ 7893: 0xCDAD,
+ 7894: 0xCDAE,
+ 7895: 0xCDAF,
+ 7896: 0xCDB1,
+ 7897: 0xCDB2,
+ 7898: 0xCDB3,
+ 7899: 0xCDB4,
+ 7900: 0xCDB5,
+ 7901: 0xCDB6,
+ 7902: 0xCDB7,
+ 7903: 0xCDB8,
+ 7904: 0xCDB9,
+ 7905: 0xCDBA,
+ 7906: 0xCDBB,
+ 7907: 0xCDBC,
+ 7908: 0xCDBD,
+ 7909: 0xCDBE,
+ 7910: 0xCDBF,
+ 7911: 0xCDC0,
+ 7912: 0xCDC1,
+ 7913: 0xCDC2,
+ 7914: 0xCDC3,
+ 7915: 0xCDC5,
+ 8010: 0xCDC6,
+ 8011: 0xCDC7,
+ 8012: 0xCDC8,
+ 8013: 0xCDC9,
+ 8014: 0xCDCA,
+ 8015: 0xCDCB,
+ 8016: 0xCDCD,
+ 8017: 0xCDCE,
+ 8018: 0xCDCF,
+ 8019: 0xCDD1,
+ 8020: 0xCDD2,
+ 8021: 0xCDD3,
+ 8022: 0xCDD4,
+ 8023: 0xCDD5,
+ 8024: 0xCDD6,
+ 8025: 0xCDD7,
+ 8026: 0xCDD8,
+ 8027: 0xCDD9,
+ 8028: 0xCDDA,
+ 8029: 0xCDDB,
+ 8030: 0xCDDC,
+ 8031: 0xCDDD,
+ 8032: 0xCDDE,
+ 8033: 0xCDDF,
+ 8034: 0xCDE0,
+ 8035: 0xCDE1,
+ 8036: 0xCDE2,
+ 8037: 0xCDE3,
+ 8038: 0xCDE4,
+ 8039: 0xCDE5,
+ 8040: 0xCDE6,
+ 8041: 0xCDE7,
+ 8042: 0xCDE9,
+ 8043: 0xCDEA,
+ 8044: 0xCDEB,
+ 8045: 0xCDED,
+ 8046: 0xCDEE,
+ 8047: 0xCDEF,
+ 8048: 0xCDF1,
+ 8049: 0xCDF2,
+ 8050: 0xCDF3,
+ 8051: 0xCDF4,
+ 8052: 0xCDF5,
+ 8053: 0xCDF6,
+ 8054: 0xCDF7,
+ 8055: 0xCDFA,
+ 8056: 0xCDFC,
+ 8057: 0xCDFE,
+ 8058: 0xCDFF,
+ 8059: 0xCE00,
+ 8060: 0xCE01,
+ 8061: 0xCE02,
+ 8062: 0xCE03,
+ 8063: 0xCE05,
+ 8064: 0xCE06,
+ 8065: 0xCE07,
+ 8066: 0xCE09,
+ 8067: 0xCE0A,
+ 8068: 0xCE0B,
+ 8069: 0xCE0D,
+ 8070: 0xCE0E,
+ 8071: 0xCE0F,
+ 8072: 0xCE10,
+ 8073: 0xCE11,
+ 8074: 0xCE12,
+ 8075: 0xCE13,
+ 8076: 0xCE15,
+ 8077: 0xCE16,
+ 8078: 0xCE17,
+ 8079: 0xCE18,
+ 8080: 0xCE1A,
+ 8081: 0xCE1B,
+ 8082: 0xCE1C,
+ 8083: 0xCE1D,
+ 8084: 0xCE1E,
+ 8085: 0xCE1F,
+ 8086: 0xCE22,
+ 8087: 0xCE23,
+ 8088: 0xCE25,
+ 8089: 0xCE26,
+ 8090: 0xCE27,
+ 8091: 0xCE29,
+ 8092: 0xCE2A,
+ 8093: 0xCE2B,
+ 8188: 0xCE2C,
+ 8189: 0xCE2D,
+ 8190: 0xCE2E,
+ 8191: 0xCE2F,
+ 8192: 0xCE32,
+ 8193: 0xCE34,
+ 8194: 0xCE36,
+ 8195: 0xCE37,
+ 8196: 0xCE38,
+ 8197: 0xCE39,
+ 8198: 0xCE3A,
+ 8199: 0xCE3B,
+ 8200: 0xCE3C,
+ 8201: 0xCE3D,
+ 8202: 0xCE3E,
+ 8203: 0xCE3F,
+ 8204: 0xCE40,
+ 8205: 0xCE41,
+ 8206: 0xCE42,
+ 8207: 0xCE43,
+ 8208: 0xCE44,
+ 8209: 0xCE45,
+ 8210: 0xCE46,
+ 8211: 0xCE47,
+ 8212: 0xCE48,
+ 8213: 0xCE49,
+ 8214: 0xCE4A,
+ 8215: 0xCE4B,
+ 8216: 0xCE4C,
+ 8217: 0xCE4D,
+ 8218: 0xCE4E,
+ 8219: 0xCE4F,
+ 8220: 0xCE50,
+ 8221: 0xCE51,
+ 8222: 0xCE52,
+ 8223: 0xCE53,
+ 8224: 0xCE54,
+ 8225: 0xCE55,
+ 8226: 0xCE56,
+ 8227: 0xCE57,
+ 8228: 0xCE5A,
+ 8229: 0xCE5B,
+ 8230: 0xCE5D,
+ 8231: 0xCE5E,
+ 8232: 0xCE62,
+ 8233: 0xCE63,
+ 8234: 0xCE64,
+ 8235: 0xCE65,
+ 8236: 0xCE66,
+ 8237: 0xCE67,
+ 8238: 0xCE6A,
+ 8239: 0xCE6C,
+ 8240: 0xCE6E,
+ 8241: 0xCE6F,
+ 8242: 0xCE70,
+ 8243: 0xCE71,
+ 8244: 0xCE72,
+ 8245: 0xCE73,
+ 8246: 0xCE76,
+ 8247: 0xCE77,
+ 8248: 0xCE79,
+ 8249: 0xCE7A,
+ 8250: 0xCE7B,
+ 8251: 0xCE7D,
+ 8252: 0xCE7E,
+ 8253: 0xCE7F,
+ 8254: 0xCE80,
+ 8255: 0xCE81,
+ 8256: 0xCE82,
+ 8257: 0xCE83,
+ 8258: 0xCE86,
+ 8259: 0xCE88,
+ 8260: 0xCE8A,
+ 8261: 0xCE8B,
+ 8262: 0xCE8C,
+ 8263: 0xCE8D,
+ 8264: 0xCE8E,
+ 8265: 0xCE8F,
+ 8266: 0xCE92,
+ 8267: 0xCE93,
+ 8268: 0xCE95,
+ 8269: 0xCE96,
+ 8270: 0xCE97,
+ 8271: 0xCE99,
+ 8366: 0xCE9A,
+ 8367: 0xCE9B,
+ 8368: 0xCE9C,
+ 8369: 0xCE9D,
+ 8370: 0xCE9E,
+ 8371: 0xCE9F,
+ 8372: 0xCEA2,
+ 8373: 0xCEA6,
+ 8374: 0xCEA7,
+ 8375: 0xCEA8,
+ 8376: 0xCEA9,
+ 8377: 0xCEAA,
+ 8378: 0xCEAB,
+ 8379: 0xCEAE,
+ 8380: 0xCEAF,
+ 8381: 0xCEB0,
+ 8382: 0xCEB1,
+ 8383: 0xCEB2,
+ 8384: 0xCEB3,
+ 8385: 0xCEB4,
+ 8386: 0xCEB5,
+ 8387: 0xCEB6,
+ 8388: 0xCEB7,
+ 8389: 0xCEB8,
+ 8390: 0xCEB9,
+ 8391: 0xCEBA,
+ 8392: 0xCEBB,
+ 8393: 0xCEBC,
+ 8394: 0xCEBD,
+ 8395: 0xCEBE,
+ 8396: 0xCEBF,
+ 8397: 0xCEC0,
+ 8398: 0xCEC2,
+ 8399: 0xCEC3,
+ 8400: 0xCEC4,
+ 8401: 0xCEC5,
+ 8402: 0xCEC6,
+ 8403: 0xCEC7,
+ 8404: 0xCEC8,
+ 8405: 0xCEC9,
+ 8406: 0xCECA,
+ 8407: 0xCECB,
+ 8408: 0xCECC,
+ 8409: 0xCECD,
+ 8410: 0xCECE,
+ 8411: 0xCECF,
+ 8412: 0xCED0,
+ 8413: 0xCED1,
+ 8414: 0xCED2,
+ 8415: 0xCED3,
+ 8416: 0xCED4,
+ 8417: 0xCED5,
+ 8418: 0xCED6,
+ 8419: 0xCED7,
+ 8420: 0xCED8,
+ 8421: 0xCED9,
+ 8422: 0xCEDA,
+ 8423: 0xCEDB,
+ 8424: 0xCEDC,
+ 8425: 0xCEDD,
+ 8426: 0xCEDE,
+ 8427: 0xCEDF,
+ 8428: 0xCEE0,
+ 8429: 0xCEE1,
+ 8430: 0xCEE2,
+ 8431: 0xCEE3,
+ 8432: 0xCEE6,
+ 8433: 0xCEE7,
+ 8434: 0xCEE9,
+ 8435: 0xCEEA,
+ 8436: 0xCEED,
+ 8437: 0xCEEE,
+ 8438: 0xCEEF,
+ 8439: 0xCEF0,
+ 8440: 0xCEF1,
+ 8441: 0xCEF2,
+ 8442: 0xCEF3,
+ 8443: 0xCEF6,
+ 8444: 0xCEFA,
+ 8445: 0xCEFB,
+ 8446: 0xCEFC,
+ 8447: 0xCEFD,
+ 8448: 0xCEFE,
+ 8449: 0xCEFF,
+ 8450: 0xAC00,
+ 8451: 0xAC01,
+ 8452: 0xAC04,
+ 8453: 0xAC07,
+ 8454: 0xAC08,
+ 8455: 0xAC09,
+ 8456: 0xAC0A,
+ 8457: 0xAC10,
+ 8458: 0xAC11,
+ 8459: 0xAC12,
+ 8460: 0xAC13,
+ 8461: 0xAC14,
+ 8462: 0xAC15,
+ 8463: 0xAC16,
+ 8464: 0xAC17,
+ 8465: 0xAC19,
+ 8466: 0xAC1A,
+ 8467: 0xAC1B,
+ 8468: 0xAC1C,
+ 8469: 0xAC1D,
+ 8470: 0xAC20,
+ 8471: 0xAC24,
+ 8472: 0xAC2C,
+ 8473: 0xAC2D,
+ 8474: 0xAC2F,
+ 8475: 0xAC30,
+ 8476: 0xAC31,
+ 8477: 0xAC38,
+ 8478: 0xAC39,
+ 8479: 0xAC3C,
+ 8480: 0xAC40,
+ 8481: 0xAC4B,
+ 8482: 0xAC4D,
+ 8483: 0xAC54,
+ 8484: 0xAC58,
+ 8485: 0xAC5C,
+ 8486: 0xAC70,
+ 8487: 0xAC71,
+ 8488: 0xAC74,
+ 8489: 0xAC77,
+ 8490: 0xAC78,
+ 8491: 0xAC7A,
+ 8492: 0xAC80,
+ 8493: 0xAC81,
+ 8494: 0xAC83,
+ 8495: 0xAC84,
+ 8496: 0xAC85,
+ 8497: 0xAC86,
+ 8498: 0xAC89,
+ 8499: 0xAC8A,
+ 8500: 0xAC8B,
+ 8501: 0xAC8C,
+ 8502: 0xAC90,
+ 8503: 0xAC94,
+ 8504: 0xAC9C,
+ 8505: 0xAC9D,
+ 8506: 0xAC9F,
+ 8507: 0xACA0,
+ 8508: 0xACA1,
+ 8509: 0xACA8,
+ 8510: 0xACA9,
+ 8511: 0xACAA,
+ 8512: 0xACAC,
+ 8513: 0xACAF,
+ 8514: 0xACB0,
+ 8515: 0xACB8,
+ 8516: 0xACB9,
+ 8517: 0xACBB,
+ 8518: 0xACBC,
+ 8519: 0xACBD,
+ 8520: 0xACC1,
+ 8521: 0xACC4,
+ 8522: 0xACC8,
+ 8523: 0xACCC,
+ 8524: 0xACD5,
+ 8525: 0xACD7,
+ 8526: 0xACE0,
+ 8527: 0xACE1,
+ 8528: 0xACE4,
+ 8529: 0xACE7,
+ 8530: 0xACE8,
+ 8531: 0xACEA,
+ 8532: 0xACEC,
+ 8533: 0xACEF,
+ 8534: 0xACF0,
+ 8535: 0xACF1,
+ 8536: 0xACF3,
+ 8537: 0xACF5,
+ 8538: 0xACF6,
+ 8539: 0xACFC,
+ 8540: 0xACFD,
+ 8541: 0xAD00,
+ 8542: 0xAD04,
+ 8543: 0xAD06,
+ 8544: 0xCF02,
+ 8545: 0xCF03,
+ 8546: 0xCF05,
+ 8547: 0xCF06,
+ 8548: 0xCF07,
+ 8549: 0xCF09,
+ 8550: 0xCF0A,
+ 8551: 0xCF0B,
+ 8552: 0xCF0C,
+ 8553: 0xCF0D,
+ 8554: 0xCF0E,
+ 8555: 0xCF0F,
+ 8556: 0xCF12,
+ 8557: 0xCF14,
+ 8558: 0xCF16,
+ 8559: 0xCF17,
+ 8560: 0xCF18,
+ 8561: 0xCF19,
+ 8562: 0xCF1A,
+ 8563: 0xCF1B,
+ 8564: 0xCF1D,
+ 8565: 0xCF1E,
+ 8566: 0xCF1F,
+ 8567: 0xCF21,
+ 8568: 0xCF22,
+ 8569: 0xCF23,
+ 8570: 0xCF25,
+ 8571: 0xCF26,
+ 8572: 0xCF27,
+ 8573: 0xCF28,
+ 8574: 0xCF29,
+ 8575: 0xCF2A,
+ 8576: 0xCF2B,
+ 8577: 0xCF2E,
+ 8578: 0xCF32,
+ 8579: 0xCF33,
+ 8580: 0xCF34,
+ 8581: 0xCF35,
+ 8582: 0xCF36,
+ 8583: 0xCF37,
+ 8584: 0xCF39,
+ 8585: 0xCF3A,
+ 8586: 0xCF3B,
+ 8587: 0xCF3C,
+ 8588: 0xCF3D,
+ 8589: 0xCF3E,
+ 8590: 0xCF3F,
+ 8591: 0xCF40,
+ 8592: 0xCF41,
+ 8593: 0xCF42,
+ 8594: 0xCF43,
+ 8595: 0xCF44,
+ 8596: 0xCF45,
+ 8597: 0xCF46,
+ 8598: 0xCF47,
+ 8599: 0xCF48,
+ 8600: 0xCF49,
+ 8601: 0xCF4A,
+ 8602: 0xCF4B,
+ 8603: 0xCF4C,
+ 8604: 0xCF4D,
+ 8605: 0xCF4E,
+ 8606: 0xCF4F,
+ 8607: 0xCF50,
+ 8608: 0xCF51,
+ 8609: 0xCF52,
+ 8610: 0xCF53,
+ 8611: 0xCF56,
+ 8612: 0xCF57,
+ 8613: 0xCF59,
+ 8614: 0xCF5A,
+ 8615: 0xCF5B,
+ 8616: 0xCF5D,
+ 8617: 0xCF5E,
+ 8618: 0xCF5F,
+ 8619: 0xCF60,
+ 8620: 0xCF61,
+ 8621: 0xCF62,
+ 8622: 0xCF63,
+ 8623: 0xCF66,
+ 8624: 0xCF68,
+ 8625: 0xCF6A,
+ 8626: 0xCF6B,
+ 8627: 0xCF6C,
+ 8628: 0xAD0C,
+ 8629: 0xAD0D,
+ 8630: 0xAD0F,
+ 8631: 0xAD11,
+ 8632: 0xAD18,
+ 8633: 0xAD1C,
+ 8634: 0xAD20,
+ 8635: 0xAD29,
+ 8636: 0xAD2C,
+ 8637: 0xAD2D,
+ 8638: 0xAD34,
+ 8639: 0xAD35,
+ 8640: 0xAD38,
+ 8641: 0xAD3C,
+ 8642: 0xAD44,
+ 8643: 0xAD45,
+ 8644: 0xAD47,
+ 8645: 0xAD49,
+ 8646: 0xAD50,
+ 8647: 0xAD54,
+ 8648: 0xAD58,
+ 8649: 0xAD61,
+ 8650: 0xAD63,
+ 8651: 0xAD6C,
+ 8652: 0xAD6D,
+ 8653: 0xAD70,
+ 8654: 0xAD73,
+ 8655: 0xAD74,
+ 8656: 0xAD75,
+ 8657: 0xAD76,
+ 8658: 0xAD7B,
+ 8659: 0xAD7C,
+ 8660: 0xAD7D,
+ 8661: 0xAD7F,
+ 8662: 0xAD81,
+ 8663: 0xAD82,
+ 8664: 0xAD88,
+ 8665: 0xAD89,
+ 8666: 0xAD8C,
+ 8667: 0xAD90,
+ 8668: 0xAD9C,
+ 8669: 0xAD9D,
+ 8670: 0xADA4,
+ 8671: 0xADB7,
+ 8672: 0xADC0,
+ 8673: 0xADC1,
+ 8674: 0xADC4,
+ 8675: 0xADC8,
+ 8676: 0xADD0,
+ 8677: 0xADD1,
+ 8678: 0xADD3,
+ 8679: 0xADDC,
+ 8680: 0xADE0,
+ 8681: 0xADE4,
+ 8682: 0xADF8,
+ 8683: 0xADF9,
+ 8684: 0xADFC,
+ 8685: 0xADFF,
+ 8686: 0xAE00,
+ 8687: 0xAE01,
+ 8688: 0xAE08,
+ 8689: 0xAE09,
+ 8690: 0xAE0B,
+ 8691: 0xAE0D,
+ 8692: 0xAE14,
+ 8693: 0xAE30,
+ 8694: 0xAE31,
+ 8695: 0xAE34,
+ 8696: 0xAE37,
+ 8697: 0xAE38,
+ 8698: 0xAE3A,
+ 8699: 0xAE40,
+ 8700: 0xAE41,
+ 8701: 0xAE43,
+ 8702: 0xAE45,
+ 8703: 0xAE46,
+ 8704: 0xAE4A,
+ 8705: 0xAE4C,
+ 8706: 0xAE4D,
+ 8707: 0xAE4E,
+ 8708: 0xAE50,
+ 8709: 0xAE54,
+ 8710: 0xAE56,
+ 8711: 0xAE5C,
+ 8712: 0xAE5D,
+ 8713: 0xAE5F,
+ 8714: 0xAE60,
+ 8715: 0xAE61,
+ 8716: 0xAE65,
+ 8717: 0xAE68,
+ 8718: 0xAE69,
+ 8719: 0xAE6C,
+ 8720: 0xAE70,
+ 8721: 0xAE78,
+ 8722: 0xCF6D,
+ 8723: 0xCF6E,
+ 8724: 0xCF6F,
+ 8725: 0xCF72,
+ 8726: 0xCF73,
+ 8727: 0xCF75,
+ 8728: 0xCF76,
+ 8729: 0xCF77,
+ 8730: 0xCF79,
+ 8731: 0xCF7A,
+ 8732: 0xCF7B,
+ 8733: 0xCF7C,
+ 8734: 0xCF7D,
+ 8735: 0xCF7E,
+ 8736: 0xCF7F,
+ 8737: 0xCF81,
+ 8738: 0xCF82,
+ 8739: 0xCF83,
+ 8740: 0xCF84,
+ 8741: 0xCF86,
+ 8742: 0xCF87,
+ 8743: 0xCF88,
+ 8744: 0xCF89,
+ 8745: 0xCF8A,
+ 8746: 0xCF8B,
+ 8747: 0xCF8D,
+ 8748: 0xCF8E,
+ 8749: 0xCF8F,
+ 8750: 0xCF90,
+ 8751: 0xCF91,
+ 8752: 0xCF92,
+ 8753: 0xCF93,
+ 8754: 0xCF94,
+ 8755: 0xCF95,
+ 8756: 0xCF96,
+ 8757: 0xCF97,
+ 8758: 0xCF98,
+ 8759: 0xCF99,
+ 8760: 0xCF9A,
+ 8761: 0xCF9B,
+ 8762: 0xCF9C,
+ 8763: 0xCF9D,
+ 8764: 0xCF9E,
+ 8765: 0xCF9F,
+ 8766: 0xCFA0,
+ 8767: 0xCFA2,
+ 8768: 0xCFA3,
+ 8769: 0xCFA4,
+ 8770: 0xCFA5,
+ 8771: 0xCFA6,
+ 8772: 0xCFA7,
+ 8773: 0xCFA9,
+ 8774: 0xCFAA,
+ 8775: 0xCFAB,
+ 8776: 0xCFAC,
+ 8777: 0xCFAD,
+ 8778: 0xCFAE,
+ 8779: 0xCFAF,
+ 8780: 0xCFB1,
+ 8781: 0xCFB2,
+ 8782: 0xCFB3,
+ 8783: 0xCFB4,
+ 8784: 0xCFB5,
+ 8785: 0xCFB6,
+ 8786: 0xCFB7,
+ 8787: 0xCFB8,
+ 8788: 0xCFB9,
+ 8789: 0xCFBA,
+ 8790: 0xCFBB,
+ 8791: 0xCFBC,
+ 8792: 0xCFBD,
+ 8793: 0xCFBE,
+ 8794: 0xCFBF,
+ 8795: 0xCFC0,
+ 8796: 0xCFC1,
+ 8797: 0xCFC2,
+ 8798: 0xCFC3,
+ 8799: 0xCFC5,
+ 8800: 0xCFC6,
+ 8801: 0xCFC7,
+ 8802: 0xCFC8,
+ 8803: 0xCFC9,
+ 8804: 0xCFCA,
+ 8805: 0xCFCB,
+ 8806: 0xAE79,
+ 8807: 0xAE7B,
+ 8808: 0xAE7C,
+ 8809: 0xAE7D,
+ 8810: 0xAE84,
+ 8811: 0xAE85,
+ 8812: 0xAE8C,
+ 8813: 0xAEBC,
+ 8814: 0xAEBD,
+ 8815: 0xAEBE,
+ 8816: 0xAEC0,
+ 8817: 0xAEC4,
+ 8818: 0xAECC,
+ 8819: 0xAECD,
+ 8820: 0xAECF,
+ 8821: 0xAED0,
+ 8822: 0xAED1,
+ 8823: 0xAED8,
+ 8824: 0xAED9,
+ 8825: 0xAEDC,
+ 8826: 0xAEE8,
+ 8827: 0xAEEB,
+ 8828: 0xAEED,
+ 8829: 0xAEF4,
+ 8830: 0xAEF8,
+ 8831: 0xAEFC,
+ 8832: 0xAF07,
+ 8833: 0xAF08,
+ 8834: 0xAF0D,
+ 8835: 0xAF10,
+ 8836: 0xAF2C,
+ 8837: 0xAF2D,
+ 8838: 0xAF30,
+ 8839: 0xAF32,
+ 8840: 0xAF34,
+ 8841: 0xAF3C,
+ 8842: 0xAF3D,
+ 8843: 0xAF3F,
+ 8844: 0xAF41,
+ 8845: 0xAF42,
+ 8846: 0xAF43,
+ 8847: 0xAF48,
+ 8848: 0xAF49,
+ 8849: 0xAF50,
+ 8850: 0xAF5C,
+ 8851: 0xAF5D,
+ 8852: 0xAF64,
+ 8853: 0xAF65,
+ 8854: 0xAF79,
+ 8855: 0xAF80,
+ 8856: 0xAF84,
+ 8857: 0xAF88,
+ 8858: 0xAF90,
+ 8859: 0xAF91,
+ 8860: 0xAF95,
+ 8861: 0xAF9C,
+ 8862: 0xAFB8,
+ 8863: 0xAFB9,
+ 8864: 0xAFBC,
+ 8865: 0xAFC0,
+ 8866: 0xAFC7,
+ 8867: 0xAFC8,
+ 8868: 0xAFC9,
+ 8869: 0xAFCB,
+ 8870: 0xAFCD,
+ 8871: 0xAFCE,
+ 8872: 0xAFD4,
+ 8873: 0xAFDC,
+ 8874: 0xAFE8,
+ 8875: 0xAFE9,
+ 8876: 0xAFF0,
+ 8877: 0xAFF1,
+ 8878: 0xAFF4,
+ 8879: 0xAFF8,
+ 8880: 0xB000,
+ 8881: 0xB001,
+ 8882: 0xB004,
+ 8883: 0xB00C,
+ 8884: 0xB010,
+ 8885: 0xB014,
+ 8886: 0xB01C,
+ 8887: 0xB01D,
+ 8888: 0xB028,
+ 8889: 0xB044,
+ 8890: 0xB045,
+ 8891: 0xB048,
+ 8892: 0xB04A,
+ 8893: 0xB04C,
+ 8894: 0xB04E,
+ 8895: 0xB053,
+ 8896: 0xB054,
+ 8897: 0xB055,
+ 8898: 0xB057,
+ 8899: 0xB059,
+ 8900: 0xCFCC,
+ 8901: 0xCFCD,
+ 8902: 0xCFCE,
+ 8903: 0xCFCF,
+ 8904: 0xCFD0,
+ 8905: 0xCFD1,
+ 8906: 0xCFD2,
+ 8907: 0xCFD3,
+ 8908: 0xCFD4,
+ 8909: 0xCFD5,
+ 8910: 0xCFD6,
+ 8911: 0xCFD7,
+ 8912: 0xCFD8,
+ 8913: 0xCFD9,
+ 8914: 0xCFDA,
+ 8915: 0xCFDB,
+ 8916: 0xCFDC,
+ 8917: 0xCFDD,
+ 8918: 0xCFDE,
+ 8919: 0xCFDF,
+ 8920: 0xCFE2,
+ 8921: 0xCFE3,
+ 8922: 0xCFE5,
+ 8923: 0xCFE6,
+ 8924: 0xCFE7,
+ 8925: 0xCFE9,
+ 8926: 0xCFEA,
+ 8927: 0xCFEB,
+ 8928: 0xCFEC,
+ 8929: 0xCFED,
+ 8930: 0xCFEE,
+ 8931: 0xCFEF,
+ 8932: 0xCFF2,
+ 8933: 0xCFF4,
+ 8934: 0xCFF6,
+ 8935: 0xCFF7,
+ 8936: 0xCFF8,
+ 8937: 0xCFF9,
+ 8938: 0xCFFA,
+ 8939: 0xCFFB,
+ 8940: 0xCFFD,
+ 8941: 0xCFFE,
+ 8942: 0xCFFF,
+ 8943: 0xD001,
+ 8944: 0xD002,
+ 8945: 0xD003,
+ 8946: 0xD005,
+ 8947: 0xD006,
+ 8948: 0xD007,
+ 8949: 0xD008,
+ 8950: 0xD009,
+ 8951: 0xD00A,
+ 8952: 0xD00B,
+ 8953: 0xD00C,
+ 8954: 0xD00D,
+ 8955: 0xD00E,
+ 8956: 0xD00F,
+ 8957: 0xD010,
+ 8958: 0xD012,
+ 8959: 0xD013,
+ 8960: 0xD014,
+ 8961: 0xD015,
+ 8962: 0xD016,
+ 8963: 0xD017,
+ 8964: 0xD019,
+ 8965: 0xD01A,
+ 8966: 0xD01B,
+ 8967: 0xD01C,
+ 8968: 0xD01D,
+ 8969: 0xD01E,
+ 8970: 0xD01F,
+ 8971: 0xD020,
+ 8972: 0xD021,
+ 8973: 0xD022,
+ 8974: 0xD023,
+ 8975: 0xD024,
+ 8976: 0xD025,
+ 8977: 0xD026,
+ 8978: 0xD027,
+ 8979: 0xD028,
+ 8980: 0xD029,
+ 8981: 0xD02A,
+ 8982: 0xD02B,
+ 8983: 0xD02C,
+ 8984: 0xB05D,
+ 8985: 0xB07C,
+ 8986: 0xB07D,
+ 8987: 0xB080,
+ 8988: 0xB084,
+ 8989: 0xB08C,
+ 8990: 0xB08D,
+ 8991: 0xB08F,
+ 8992: 0xB091,
+ 8993: 0xB098,
+ 8994: 0xB099,
+ 8995: 0xB09A,
+ 8996: 0xB09C,
+ 8997: 0xB09F,
+ 8998: 0xB0A0,
+ 8999: 0xB0A1,
+ 9000: 0xB0A2,
+ 9001: 0xB0A8,
+ 9002: 0xB0A9,
+ 9003: 0xB0AB,
+ 9004: 0xB0AC,
+ 9005: 0xB0AD,
+ 9006: 0xB0AE,
+ 9007: 0xB0AF,
+ 9008: 0xB0B1,
+ 9009: 0xB0B3,
+ 9010: 0xB0B4,
+ 9011: 0xB0B5,
+ 9012: 0xB0B8,
+ 9013: 0xB0BC,
+ 9014: 0xB0C4,
+ 9015: 0xB0C5,
+ 9016: 0xB0C7,
+ 9017: 0xB0C8,
+ 9018: 0xB0C9,
+ 9019: 0xB0D0,
+ 9020: 0xB0D1,
+ 9021: 0xB0D4,
+ 9022: 0xB0D8,
+ 9023: 0xB0E0,
+ 9024: 0xB0E5,
+ 9025: 0xB108,
+ 9026: 0xB109,
+ 9027: 0xB10B,
+ 9028: 0xB10C,
+ 9029: 0xB110,
+ 9030: 0xB112,
+ 9031: 0xB113,
+ 9032: 0xB118,
+ 9033: 0xB119,
+ 9034: 0xB11B,
+ 9035: 0xB11C,
+ 9036: 0xB11D,
+ 9037: 0xB123,
+ 9038: 0xB124,
+ 9039: 0xB125,
+ 9040: 0xB128,
+ 9041: 0xB12C,
+ 9042: 0xB134,
+ 9043: 0xB135,
+ 9044: 0xB137,
+ 9045: 0xB138,
+ 9046: 0xB139,
+ 9047: 0xB140,
+ 9048: 0xB141,
+ 9049: 0xB144,
+ 9050: 0xB148,
+ 9051: 0xB150,
+ 9052: 0xB151,
+ 9053: 0xB154,
+ 9054: 0xB155,
+ 9055: 0xB158,
+ 9056: 0xB15C,
+ 9057: 0xB160,
+ 9058: 0xB178,
+ 9059: 0xB179,
+ 9060: 0xB17C,
+ 9061: 0xB180,
+ 9062: 0xB182,
+ 9063: 0xB188,
+ 9064: 0xB189,
+ 9065: 0xB18B,
+ 9066: 0xB18D,
+ 9067: 0xB192,
+ 9068: 0xB193,
+ 9069: 0xB194,
+ 9070: 0xB198,
+ 9071: 0xB19C,
+ 9072: 0xB1A8,
+ 9073: 0xB1CC,
+ 9074: 0xB1D0,
+ 9075: 0xB1D4,
+ 9076: 0xB1DC,
+ 9077: 0xB1DD,
+ 9078: 0xD02E,
+ 9079: 0xD02F,
+ 9080: 0xD030,
+ 9081: 0xD031,
+ 9082: 0xD032,
+ 9083: 0xD033,
+ 9084: 0xD036,
+ 9085: 0xD037,
+ 9086: 0xD039,
+ 9087: 0xD03A,
+ 9088: 0xD03B,
+ 9089: 0xD03D,
+ 9090: 0xD03E,
+ 9091: 0xD03F,
+ 9092: 0xD040,
+ 9093: 0xD041,
+ 9094: 0xD042,
+ 9095: 0xD043,
+ 9096: 0xD046,
+ 9097: 0xD048,
+ 9098: 0xD04A,
+ 9099: 0xD04B,
+ 9100: 0xD04C,
+ 9101: 0xD04D,
+ 9102: 0xD04E,
+ 9103: 0xD04F,
+ 9104: 0xD051,
+ 9105: 0xD052,
+ 9106: 0xD053,
+ 9107: 0xD055,
+ 9108: 0xD056,
+ 9109: 0xD057,
+ 9110: 0xD059,
+ 9111: 0xD05A,
+ 9112: 0xD05B,
+ 9113: 0xD05C,
+ 9114: 0xD05D,
+ 9115: 0xD05E,
+ 9116: 0xD05F,
+ 9117: 0xD061,
+ 9118: 0xD062,
+ 9119: 0xD063,
+ 9120: 0xD064,
+ 9121: 0xD065,
+ 9122: 0xD066,
+ 9123: 0xD067,
+ 9124: 0xD068,
+ 9125: 0xD069,
+ 9126: 0xD06A,
+ 9127: 0xD06B,
+ 9128: 0xD06E,
+ 9129: 0xD06F,
+ 9130: 0xD071,
+ 9131: 0xD072,
+ 9132: 0xD073,
+ 9133: 0xD075,
+ 9134: 0xD076,
+ 9135: 0xD077,
+ 9136: 0xD078,
+ 9137: 0xD079,
+ 9138: 0xD07A,
+ 9139: 0xD07B,
+ 9140: 0xD07E,
+ 9141: 0xD07F,
+ 9142: 0xD080,
+ 9143: 0xD082,
+ 9144: 0xD083,
+ 9145: 0xD084,
+ 9146: 0xD085,
+ 9147: 0xD086,
+ 9148: 0xD087,
+ 9149: 0xD088,
+ 9150: 0xD089,
+ 9151: 0xD08A,
+ 9152: 0xD08B,
+ 9153: 0xD08C,
+ 9154: 0xD08D,
+ 9155: 0xD08E,
+ 9156: 0xD08F,
+ 9157: 0xD090,
+ 9158: 0xD091,
+ 9159: 0xD092,
+ 9160: 0xD093,
+ 9161: 0xD094,
+ 9162: 0xB1DF,
+ 9163: 0xB1E8,
+ 9164: 0xB1E9,
+ 9165: 0xB1EC,
+ 9166: 0xB1F0,
+ 9167: 0xB1F9,
+ 9168: 0xB1FB,
+ 9169: 0xB1FD,
+ 9170: 0xB204,
+ 9171: 0xB205,
+ 9172: 0xB208,
+ 9173: 0xB20B,
+ 9174: 0xB20C,
+ 9175: 0xB214,
+ 9176: 0xB215,
+ 9177: 0xB217,
+ 9178: 0xB219,
+ 9179: 0xB220,
+ 9180: 0xB234,
+ 9181: 0xB23C,
+ 9182: 0xB258,
+ 9183: 0xB25C,
+ 9184: 0xB260,
+ 9185: 0xB268,
+ 9186: 0xB269,
+ 9187: 0xB274,
+ 9188: 0xB275,
+ 9189: 0xB27C,
+ 9190: 0xB284,
+ 9191: 0xB285,
+ 9192: 0xB289,
+ 9193: 0xB290,
+ 9194: 0xB291,
+ 9195: 0xB294,
+ 9196: 0xB298,
+ 9197: 0xB299,
+ 9198: 0xB29A,
+ 9199: 0xB2A0,
+ 9200: 0xB2A1,
+ 9201: 0xB2A3,
+ 9202: 0xB2A5,
+ 9203: 0xB2A6,
+ 9204: 0xB2AA,
+ 9205: 0xB2AC,
+ 9206: 0xB2B0,
+ 9207: 0xB2B4,
+ 9208: 0xB2C8,
+ 9209: 0xB2C9,
+ 9210: 0xB2CC,
+ 9211: 0xB2D0,
+ 9212: 0xB2D2,
+ 9213: 0xB2D8,
+ 9214: 0xB2D9,
+ 9215: 0xB2DB,
+ 9216: 0xB2DD,
+ 9217: 0xB2E2,
+ 9218: 0xB2E4,
+ 9219: 0xB2E5,
+ 9220: 0xB2E6,
+ 9221: 0xB2E8,
+ 9222: 0xB2EB,
+ 9223: 0xB2EC,
+ 9224: 0xB2ED,
+ 9225: 0xB2EE,
+ 9226: 0xB2EF,
+ 9227: 0xB2F3,
+ 9228: 0xB2F4,
+ 9229: 0xB2F5,
+ 9230: 0xB2F7,
+ 9231: 0xB2F8,
+ 9232: 0xB2F9,
+ 9233: 0xB2FA,
+ 9234: 0xB2FB,
+ 9235: 0xB2FF,
+ 9236: 0xB300,
+ 9237: 0xB301,
+ 9238: 0xB304,
+ 9239: 0xB308,
+ 9240: 0xB310,
+ 9241: 0xB311,
+ 9242: 0xB313,
+ 9243: 0xB314,
+ 9244: 0xB315,
+ 9245: 0xB31C,
+ 9246: 0xB354,
+ 9247: 0xB355,
+ 9248: 0xB356,
+ 9249: 0xB358,
+ 9250: 0xB35B,
+ 9251: 0xB35C,
+ 9252: 0xB35E,
+ 9253: 0xB35F,
+ 9254: 0xB364,
+ 9255: 0xB365,
+ 9256: 0xD095,
+ 9257: 0xD096,
+ 9258: 0xD097,
+ 9259: 0xD098,
+ 9260: 0xD099,
+ 9261: 0xD09A,
+ 9262: 0xD09B,
+ 9263: 0xD09C,
+ 9264: 0xD09D,
+ 9265: 0xD09E,
+ 9266: 0xD09F,
+ 9267: 0xD0A0,
+ 9268: 0xD0A1,
+ 9269: 0xD0A2,
+ 9270: 0xD0A3,
+ 9271: 0xD0A6,
+ 9272: 0xD0A7,
+ 9273: 0xD0A9,
+ 9274: 0xD0AA,
+ 9275: 0xD0AB,
+ 9276: 0xD0AD,
+ 9277: 0xD0AE,
+ 9278: 0xD0AF,
+ 9279: 0xD0B0,
+ 9280: 0xD0B1,
+ 9281: 0xD0B2,
+ 9282: 0xD0B3,
+ 9283: 0xD0B6,
+ 9284: 0xD0B8,
+ 9285: 0xD0BA,
+ 9286: 0xD0BB,
+ 9287: 0xD0BC,
+ 9288: 0xD0BD,
+ 9289: 0xD0BE,
+ 9290: 0xD0BF,
+ 9291: 0xD0C2,
+ 9292: 0xD0C3,
+ 9293: 0xD0C5,
+ 9294: 0xD0C6,
+ 9295: 0xD0C7,
+ 9296: 0xD0CA,
+ 9297: 0xD0CB,
+ 9298: 0xD0CC,
+ 9299: 0xD0CD,
+ 9300: 0xD0CE,
+ 9301: 0xD0CF,
+ 9302: 0xD0D2,
+ 9303: 0xD0D6,
+ 9304: 0xD0D7,
+ 9305: 0xD0D8,
+ 9306: 0xD0D9,
+ 9307: 0xD0DA,
+ 9308: 0xD0DB,
+ 9309: 0xD0DE,
+ 9310: 0xD0DF,
+ 9311: 0xD0E1,
+ 9312: 0xD0E2,
+ 9313: 0xD0E3,
+ 9314: 0xD0E5,
+ 9315: 0xD0E6,
+ 9316: 0xD0E7,
+ 9317: 0xD0E8,
+ 9318: 0xD0E9,
+ 9319: 0xD0EA,
+ 9320: 0xD0EB,
+ 9321: 0xD0EE,
+ 9322: 0xD0F2,
+ 9323: 0xD0F3,
+ 9324: 0xD0F4,
+ 9325: 0xD0F5,
+ 9326: 0xD0F6,
+ 9327: 0xD0F7,
+ 9328: 0xD0F9,
+ 9329: 0xD0FA,
+ 9330: 0xD0FB,
+ 9331: 0xD0FC,
+ 9332: 0xD0FD,
+ 9333: 0xD0FE,
+ 9334: 0xD0FF,
+ 9335: 0xD100,
+ 9336: 0xD101,
+ 9337: 0xD102,
+ 9338: 0xD103,
+ 9339: 0xD104,
+ 9340: 0xB367,
+ 9341: 0xB369,
+ 9342: 0xB36B,
+ 9343: 0xB36E,
+ 9344: 0xB370,
+ 9345: 0xB371,
+ 9346: 0xB374,
+ 9347: 0xB378,
+ 9348: 0xB380,
+ 9349: 0xB381,
+ 9350: 0xB383,
+ 9351: 0xB384,
+ 9352: 0xB385,
+ 9353: 0xB38C,
+ 9354: 0xB390,
+ 9355: 0xB394,
+ 9356: 0xB3A0,
+ 9357: 0xB3A1,
+ 9358: 0xB3A8,
+ 9359: 0xB3AC,
+ 9360: 0xB3C4,
+ 9361: 0xB3C5,
+ 9362: 0xB3C8,
+ 9363: 0xB3CB,
+ 9364: 0xB3CC,
+ 9365: 0xB3CE,
+ 9366: 0xB3D0,
+ 9367: 0xB3D4,
+ 9368: 0xB3D5,
+ 9369: 0xB3D7,
+ 9370: 0xB3D9,
+ 9371: 0xB3DB,
+ 9372: 0xB3DD,
+ 9373: 0xB3E0,
+ 9374: 0xB3E4,
+ 9375: 0xB3E8,
+ 9376: 0xB3FC,
+ 9377: 0xB410,
+ 9378: 0xB418,
+ 9379: 0xB41C,
+ 9380: 0xB420,
+ 9381: 0xB428,
+ 9382: 0xB429,
+ 9383: 0xB42B,
+ 9384: 0xB434,
+ 9385: 0xB450,
+ 9386: 0xB451,
+ 9387: 0xB454,
+ 9388: 0xB458,
+ 9389: 0xB460,
+ 9390: 0xB461,
+ 9391: 0xB463,
+ 9392: 0xB465,
+ 9393: 0xB46C,
+ 9394: 0xB480,
+ 9395: 0xB488,
+ 9396: 0xB49D,
+ 9397: 0xB4A4,
+ 9398: 0xB4A8,
+ 9399: 0xB4AC,
+ 9400: 0xB4B5,
+ 9401: 0xB4B7,
+ 9402: 0xB4B9,
+ 9403: 0xB4C0,
+ 9404: 0xB4C4,
+ 9405: 0xB4C8,
+ 9406: 0xB4D0,
+ 9407: 0xB4D5,
+ 9408: 0xB4DC,
+ 9409: 0xB4DD,
+ 9410: 0xB4E0,
+ 9411: 0xB4E3,
+ 9412: 0xB4E4,
+ 9413: 0xB4E6,
+ 9414: 0xB4EC,
+ 9415: 0xB4ED,
+ 9416: 0xB4EF,
+ 9417: 0xB4F1,
+ 9418: 0xB4F8,
+ 9419: 0xB514,
+ 9420: 0xB515,
+ 9421: 0xB518,
+ 9422: 0xB51B,
+ 9423: 0xB51C,
+ 9424: 0xB524,
+ 9425: 0xB525,
+ 9426: 0xB527,
+ 9427: 0xB528,
+ 9428: 0xB529,
+ 9429: 0xB52A,
+ 9430: 0xB530,
+ 9431: 0xB531,
+ 9432: 0xB534,
+ 9433: 0xB538,
+ 9434: 0xD105,
+ 9435: 0xD106,
+ 9436: 0xD107,
+ 9437: 0xD108,
+ 9438: 0xD109,
+ 9439: 0xD10A,
+ 9440: 0xD10B,
+ 9441: 0xD10C,
+ 9442: 0xD10E,
+ 9443: 0xD10F,
+ 9444: 0xD110,
+ 9445: 0xD111,
+ 9446: 0xD112,
+ 9447: 0xD113,
+ 9448: 0xD114,
+ 9449: 0xD115,
+ 9450: 0xD116,
+ 9451: 0xD117,
+ 9452: 0xD118,
+ 9453: 0xD119,
+ 9454: 0xD11A,
+ 9455: 0xD11B,
+ 9456: 0xD11C,
+ 9457: 0xD11D,
+ 9458: 0xD11E,
+ 9459: 0xD11F,
+ 9460: 0xD120,
+ 9461: 0xD121,
+ 9462: 0xD122,
+ 9463: 0xD123,
+ 9464: 0xD124,
+ 9465: 0xD125,
+ 9466: 0xD126,
+ 9467: 0xD127,
+ 9468: 0xD128,
+ 9469: 0xD129,
+ 9470: 0xD12A,
+ 9471: 0xD12B,
+ 9472: 0xD12C,
+ 9473: 0xD12D,
+ 9474: 0xD12E,
+ 9475: 0xD12F,
+ 9476: 0xD132,
+ 9477: 0xD133,
+ 9478: 0xD135,
+ 9479: 0xD136,
+ 9480: 0xD137,
+ 9481: 0xD139,
+ 9482: 0xD13B,
+ 9483: 0xD13C,
+ 9484: 0xD13D,
+ 9485: 0xD13E,
+ 9486: 0xD13F,
+ 9487: 0xD142,
+ 9488: 0xD146,
+ 9489: 0xD147,
+ 9490: 0xD148,
+ 9491: 0xD149,
+ 9492: 0xD14A,
+ 9493: 0xD14B,
+ 9494: 0xD14E,
+ 9495: 0xD14F,
+ 9496: 0xD151,
+ 9497: 0xD152,
+ 9498: 0xD153,
+ 9499: 0xD155,
+ 9500: 0xD156,
+ 9501: 0xD157,
+ 9502: 0xD158,
+ 9503: 0xD159,
+ 9504: 0xD15A,
+ 9505: 0xD15B,
+ 9506: 0xD15E,
+ 9507: 0xD160,
+ 9508: 0xD162,
+ 9509: 0xD163,
+ 9510: 0xD164,
+ 9511: 0xD165,
+ 9512: 0xD166,
+ 9513: 0xD167,
+ 9514: 0xD169,
+ 9515: 0xD16A,
+ 9516: 0xD16B,
+ 9517: 0xD16D,
+ 9518: 0xB540,
+ 9519: 0xB541,
+ 9520: 0xB543,
+ 9521: 0xB544,
+ 9522: 0xB545,
+ 9523: 0xB54B,
+ 9524: 0xB54C,
+ 9525: 0xB54D,
+ 9526: 0xB550,
+ 9527: 0xB554,
+ 9528: 0xB55C,
+ 9529: 0xB55D,
+ 9530: 0xB55F,
+ 9531: 0xB560,
+ 9532: 0xB561,
+ 9533: 0xB5A0,
+ 9534: 0xB5A1,
+ 9535: 0xB5A4,
+ 9536: 0xB5A8,
+ 9537: 0xB5AA,
+ 9538: 0xB5AB,
+ 9539: 0xB5B0,
+ 9540: 0xB5B1,
+ 9541: 0xB5B3,
+ 9542: 0xB5B4,
+ 9543: 0xB5B5,
+ 9544: 0xB5BB,
+ 9545: 0xB5BC,
+ 9546: 0xB5BD,
+ 9547: 0xB5C0,
+ 9548: 0xB5C4,
+ 9549: 0xB5CC,
+ 9550: 0xB5CD,
+ 9551: 0xB5CF,
+ 9552: 0xB5D0,
+ 9553: 0xB5D1,
+ 9554: 0xB5D8,
+ 9555: 0xB5EC,
+ 9556: 0xB610,
+ 9557: 0xB611,
+ 9558: 0xB614,
+ 9559: 0xB618,
+ 9560: 0xB625,
+ 9561: 0xB62C,
+ 9562: 0xB634,
+ 9563: 0xB648,
+ 9564: 0xB664,
+ 9565: 0xB668,
+ 9566: 0xB69C,
+ 9567: 0xB69D,
+ 9568: 0xB6A0,
+ 9569: 0xB6A4,
+ 9570: 0xB6AB,
+ 9571: 0xB6AC,
+ 9572: 0xB6B1,
+ 9573: 0xB6D4,
+ 9574: 0xB6F0,
+ 9575: 0xB6F4,
+ 9576: 0xB6F8,
+ 9577: 0xB700,
+ 9578: 0xB701,
+ 9579: 0xB705,
+ 9580: 0xB728,
+ 9581: 0xB729,
+ 9582: 0xB72C,
+ 9583: 0xB72F,
+ 9584: 0xB730,
+ 9585: 0xB738,
+ 9586: 0xB739,
+ 9587: 0xB73B,
+ 9588: 0xB744,
+ 9589: 0xB748,
+ 9590: 0xB74C,
+ 9591: 0xB754,
+ 9592: 0xB755,
+ 9593: 0xB760,
+ 9594: 0xB764,
+ 9595: 0xB768,
+ 9596: 0xB770,
+ 9597: 0xB771,
+ 9598: 0xB773,
+ 9599: 0xB775,
+ 9600: 0xB77C,
+ 9601: 0xB77D,
+ 9602: 0xB780,
+ 9603: 0xB784,
+ 9604: 0xB78C,
+ 9605: 0xB78D,
+ 9606: 0xB78F,
+ 9607: 0xB790,
+ 9608: 0xB791,
+ 9609: 0xB792,
+ 9610: 0xB796,
+ 9611: 0xB797,
+ 9612: 0xD16E,
+ 9613: 0xD16F,
+ 9614: 0xD170,
+ 9615: 0xD171,
+ 9616: 0xD172,
+ 9617: 0xD173,
+ 9618: 0xD174,
+ 9619: 0xD175,
+ 9620: 0xD176,
+ 9621: 0xD177,
+ 9622: 0xD178,
+ 9623: 0xD179,
+ 9624: 0xD17A,
+ 9625: 0xD17B,
+ 9626: 0xD17D,
+ 9627: 0xD17E,
+ 9628: 0xD17F,
+ 9629: 0xD180,
+ 9630: 0xD181,
+ 9631: 0xD182,
+ 9632: 0xD183,
+ 9633: 0xD185,
+ 9634: 0xD186,
+ 9635: 0xD187,
+ 9636: 0xD189,
+ 9637: 0xD18A,
+ 9638: 0xD18B,
+ 9639: 0xD18C,
+ 9640: 0xD18D,
+ 9641: 0xD18E,
+ 9642: 0xD18F,
+ 9643: 0xD190,
+ 9644: 0xD191,
+ 9645: 0xD192,
+ 9646: 0xD193,
+ 9647: 0xD194,
+ 9648: 0xD195,
+ 9649: 0xD196,
+ 9650: 0xD197,
+ 9651: 0xD198,
+ 9652: 0xD199,
+ 9653: 0xD19A,
+ 9654: 0xD19B,
+ 9655: 0xD19C,
+ 9656: 0xD19D,
+ 9657: 0xD19E,
+ 9658: 0xD19F,
+ 9659: 0xD1A2,
+ 9660: 0xD1A3,
+ 9661: 0xD1A5,
+ 9662: 0xD1A6,
+ 9663: 0xD1A7,
+ 9664: 0xD1A9,
+ 9665: 0xD1AA,
+ 9666: 0xD1AB,
+ 9667: 0xD1AC,
+ 9668: 0xD1AD,
+ 9669: 0xD1AE,
+ 9670: 0xD1AF,
+ 9671: 0xD1B2,
+ 9672: 0xD1B4,
+ 9673: 0xD1B6,
+ 9674: 0xD1B7,
+ 9675: 0xD1B8,
+ 9676: 0xD1B9,
+ 9677: 0xD1BB,
+ 9678: 0xD1BD,
+ 9679: 0xD1BE,
+ 9680: 0xD1BF,
+ 9681: 0xD1C1,
+ 9682: 0xD1C2,
+ 9683: 0xD1C3,
+ 9684: 0xD1C4,
+ 9685: 0xD1C5,
+ 9686: 0xD1C6,
+ 9687: 0xD1C7,
+ 9688: 0xD1C8,
+ 9689: 0xD1C9,
+ 9690: 0xD1CA,
+ 9691: 0xD1CB,
+ 9692: 0xD1CC,
+ 9693: 0xD1CD,
+ 9694: 0xD1CE,
+ 9695: 0xD1CF,
+ 9696: 0xB798,
+ 9697: 0xB799,
+ 9698: 0xB79C,
+ 9699: 0xB7A0,
+ 9700: 0xB7A8,
+ 9701: 0xB7A9,
+ 9702: 0xB7AB,
+ 9703: 0xB7AC,
+ 9704: 0xB7AD,
+ 9705: 0xB7B4,
+ 9706: 0xB7B5,
+ 9707: 0xB7B8,
+ 9708: 0xB7C7,
+ 9709: 0xB7C9,
+ 9710: 0xB7EC,
+ 9711: 0xB7ED,
+ 9712: 0xB7F0,
+ 9713: 0xB7F4,
+ 9714: 0xB7FC,
+ 9715: 0xB7FD,
+ 9716: 0xB7FF,
+ 9717: 0xB800,
+ 9718: 0xB801,
+ 9719: 0xB807,
+ 9720: 0xB808,
+ 9721: 0xB809,
+ 9722: 0xB80C,
+ 9723: 0xB810,
+ 9724: 0xB818,
+ 9725: 0xB819,
+ 9726: 0xB81B,
+ 9727: 0xB81D,
+ 9728: 0xB824,
+ 9729: 0xB825,
+ 9730: 0xB828,
+ 9731: 0xB82C,
+ 9732: 0xB834,
+ 9733: 0xB835,
+ 9734: 0xB837,
+ 9735: 0xB838,
+ 9736: 0xB839,
+ 9737: 0xB840,
+ 9738: 0xB844,
+ 9739: 0xB851,
+ 9740: 0xB853,
+ 9741: 0xB85C,
+ 9742: 0xB85D,
+ 9743: 0xB860,
+ 9744: 0xB864,
+ 9745: 0xB86C,
+ 9746: 0xB86D,
+ 9747: 0xB86F,
+ 9748: 0xB871,
+ 9749: 0xB878,
+ 9750: 0xB87C,
+ 9751: 0xB88D,
+ 9752: 0xB8A8,
+ 9753: 0xB8B0,
+ 9754: 0xB8B4,
+ 9755: 0xB8B8,
+ 9756: 0xB8C0,
+ 9757: 0xB8C1,
+ 9758: 0xB8C3,
+ 9759: 0xB8C5,
+ 9760: 0xB8CC,
+ 9761: 0xB8D0,
+ 9762: 0xB8D4,
+ 9763: 0xB8DD,
+ 9764: 0xB8DF,
+ 9765: 0xB8E1,
+ 9766: 0xB8E8,
+ 9767: 0xB8E9,
+ 9768: 0xB8EC,
+ 9769: 0xB8F0,
+ 9770: 0xB8F8,
+ 9771: 0xB8F9,
+ 9772: 0xB8FB,
+ 9773: 0xB8FD,
+ 9774: 0xB904,
+ 9775: 0xB918,
+ 9776: 0xB920,
+ 9777: 0xB93C,
+ 9778: 0xB93D,
+ 9779: 0xB940,
+ 9780: 0xB944,
+ 9781: 0xB94C,
+ 9782: 0xB94F,
+ 9783: 0xB951,
+ 9784: 0xB958,
+ 9785: 0xB959,
+ 9786: 0xB95C,
+ 9787: 0xB960,
+ 9788: 0xB968,
+ 9789: 0xB969,
+ 9790: 0xD1D0,
+ 9791: 0xD1D1,
+ 9792: 0xD1D2,
+ 9793: 0xD1D3,
+ 9794: 0xD1D4,
+ 9795: 0xD1D5,
+ 9796: 0xD1D6,
+ 9797: 0xD1D7,
+ 9798: 0xD1D9,
+ 9799: 0xD1DA,
+ 9800: 0xD1DB,
+ 9801: 0xD1DC,
+ 9802: 0xD1DD,
+ 9803: 0xD1DE,
+ 9804: 0xD1DF,
+ 9805: 0xD1E0,
+ 9806: 0xD1E1,
+ 9807: 0xD1E2,
+ 9808: 0xD1E3,
+ 9809: 0xD1E4,
+ 9810: 0xD1E5,
+ 9811: 0xD1E6,
+ 9812: 0xD1E7,
+ 9813: 0xD1E8,
+ 9814: 0xD1E9,
+ 9815: 0xD1EA,
+ 9816: 0xD1EB,
+ 9817: 0xD1EC,
+ 9818: 0xD1ED,
+ 9819: 0xD1EE,
+ 9820: 0xD1EF,
+ 9821: 0xD1F0,
+ 9822: 0xD1F1,
+ 9823: 0xD1F2,
+ 9824: 0xD1F3,
+ 9825: 0xD1F5,
+ 9826: 0xD1F6,
+ 9827: 0xD1F7,
+ 9828: 0xD1F9,
+ 9829: 0xD1FA,
+ 9830: 0xD1FB,
+ 9831: 0xD1FC,
+ 9832: 0xD1FD,
+ 9833: 0xD1FE,
+ 9834: 0xD1FF,
+ 9835: 0xD200,
+ 9836: 0xD201,
+ 9837: 0xD202,
+ 9838: 0xD203,
+ 9839: 0xD204,
+ 9840: 0xD205,
+ 9841: 0xD206,
+ 9842: 0xD208,
+ 9843: 0xD20A,
+ 9844: 0xD20B,
+ 9845: 0xD20C,
+ 9846: 0xD20D,
+ 9847: 0xD20E,
+ 9848: 0xD20F,
+ 9849: 0xD211,
+ 9850: 0xD212,
+ 9851: 0xD213,
+ 9852: 0xD214,
+ 9853: 0xD215,
+ 9854: 0xD216,
+ 9855: 0xD217,
+ 9856: 0xD218,
+ 9857: 0xD219,
+ 9858: 0xD21A,
+ 9859: 0xD21B,
+ 9860: 0xD21C,
+ 9861: 0xD21D,
+ 9862: 0xD21E,
+ 9863: 0xD21F,
+ 9864: 0xD220,
+ 9865: 0xD221,
+ 9866: 0xD222,
+ 9867: 0xD223,
+ 9868: 0xD224,
+ 9869: 0xD225,
+ 9870: 0xD226,
+ 9871: 0xD227,
+ 9872: 0xD228,
+ 9873: 0xD229,
+ 9874: 0xB96B,
+ 9875: 0xB96D,
+ 9876: 0xB974,
+ 9877: 0xB975,
+ 9878: 0xB978,
+ 9879: 0xB97C,
+ 9880: 0xB984,
+ 9881: 0xB985,
+ 9882: 0xB987,
+ 9883: 0xB989,
+ 9884: 0xB98A,
+ 9885: 0xB98D,
+ 9886: 0xB98E,
+ 9887: 0xB9AC,
+ 9888: 0xB9AD,
+ 9889: 0xB9B0,
+ 9890: 0xB9B4,
+ 9891: 0xB9BC,
+ 9892: 0xB9BD,
+ 9893: 0xB9BF,
+ 9894: 0xB9C1,
+ 9895: 0xB9C8,
+ 9896: 0xB9C9,
+ 9897: 0xB9CC,
+ 9898: 0xB9CE,
+ 9899: 0xB9CF,
+ 9900: 0xB9D0,
+ 9901: 0xB9D1,
+ 9902: 0xB9D2,
+ 9903: 0xB9D8,
+ 9904: 0xB9D9,
+ 9905: 0xB9DB,
+ 9906: 0xB9DD,
+ 9907: 0xB9DE,
+ 9908: 0xB9E1,
+ 9909: 0xB9E3,
+ 9910: 0xB9E4,
+ 9911: 0xB9E5,
+ 9912: 0xB9E8,
+ 9913: 0xB9EC,
+ 9914: 0xB9F4,
+ 9915: 0xB9F5,
+ 9916: 0xB9F7,
+ 9917: 0xB9F8,
+ 9918: 0xB9F9,
+ 9919: 0xB9FA,
+ 9920: 0xBA00,
+ 9921: 0xBA01,
+ 9922: 0xBA08,
+ 9923: 0xBA15,
+ 9924: 0xBA38,
+ 9925: 0xBA39,
+ 9926: 0xBA3C,
+ 9927: 0xBA40,
+ 9928: 0xBA42,
+ 9929: 0xBA48,
+ 9930: 0xBA49,
+ 9931: 0xBA4B,
+ 9932: 0xBA4D,
+ 9933: 0xBA4E,
+ 9934: 0xBA53,
+ 9935: 0xBA54,
+ 9936: 0xBA55,
+ 9937: 0xBA58,
+ 9938: 0xBA5C,
+ 9939: 0xBA64,
+ 9940: 0xBA65,
+ 9941: 0xBA67,
+ 9942: 0xBA68,
+ 9943: 0xBA69,
+ 9944: 0xBA70,
+ 9945: 0xBA71,
+ 9946: 0xBA74,
+ 9947: 0xBA78,
+ 9948: 0xBA83,
+ 9949: 0xBA84,
+ 9950: 0xBA85,
+ 9951: 0xBA87,
+ 9952: 0xBA8C,
+ 9953: 0xBAA8,
+ 9954: 0xBAA9,
+ 9955: 0xBAAB,
+ 9956: 0xBAAC,
+ 9957: 0xBAB0,
+ 9958: 0xBAB2,
+ 9959: 0xBAB8,
+ 9960: 0xBAB9,
+ 9961: 0xBABB,
+ 9962: 0xBABD,
+ 9963: 0xBAC4,
+ 9964: 0xBAC8,
+ 9965: 0xBAD8,
+ 9966: 0xBAD9,
+ 9967: 0xBAFC,
+ 9968: 0xD22A,
+ 9969: 0xD22B,
+ 9970: 0xD22E,
+ 9971: 0xD22F,
+ 9972: 0xD231,
+ 9973: 0xD232,
+ 9974: 0xD233,
+ 9975: 0xD235,
+ 9976: 0xD236,
+ 9977: 0xD237,
+ 9978: 0xD238,
+ 9979: 0xD239,
+ 9980: 0xD23A,
+ 9981: 0xD23B,
+ 9982: 0xD23E,
+ 9983: 0xD240,
+ 9984: 0xD242,
+ 9985: 0xD243,
+ 9986: 0xD244,
+ 9987: 0xD245,
+ 9988: 0xD246,
+ 9989: 0xD247,
+ 9990: 0xD249,
+ 9991: 0xD24A,
+ 9992: 0xD24B,
+ 9993: 0xD24C,
+ 9994: 0xD24D,
+ 9995: 0xD24E,
+ 9996: 0xD24F,
+ 9997: 0xD250,
+ 9998: 0xD251,
+ 9999: 0xD252,
+ 10000: 0xD253,
+ 10001: 0xD254,
+ 10002: 0xD255,
+ 10003: 0xD256,
+ 10004: 0xD257,
+ 10005: 0xD258,
+ 10006: 0xD259,
+ 10007: 0xD25A,
+ 10008: 0xD25B,
+ 10009: 0xD25D,
+ 10010: 0xD25E,
+ 10011: 0xD25F,
+ 10012: 0xD260,
+ 10013: 0xD261,
+ 10014: 0xD262,
+ 10015: 0xD263,
+ 10016: 0xD265,
+ 10017: 0xD266,
+ 10018: 0xD267,
+ 10019: 0xD268,
+ 10020: 0xD269,
+ 10021: 0xD26A,
+ 10022: 0xD26B,
+ 10023: 0xD26C,
+ 10024: 0xD26D,
+ 10025: 0xD26E,
+ 10026: 0xD26F,
+ 10027: 0xD270,
+ 10028: 0xD271,
+ 10029: 0xD272,
+ 10030: 0xD273,
+ 10031: 0xD274,
+ 10032: 0xD275,
+ 10033: 0xD276,
+ 10034: 0xD277,
+ 10035: 0xD278,
+ 10036: 0xD279,
+ 10037: 0xD27A,
+ 10038: 0xD27B,
+ 10039: 0xD27C,
+ 10040: 0xD27D,
+ 10041: 0xD27E,
+ 10042: 0xD27F,
+ 10043: 0xD282,
+ 10044: 0xD283,
+ 10045: 0xD285,
+ 10046: 0xD286,
+ 10047: 0xD287,
+ 10048: 0xD289,
+ 10049: 0xD28A,
+ 10050: 0xD28B,
+ 10051: 0xD28C,
+ 10052: 0xBB00,
+ 10053: 0xBB04,
+ 10054: 0xBB0D,
+ 10055: 0xBB0F,
+ 10056: 0xBB11,
+ 10057: 0xBB18,
+ 10058: 0xBB1C,
+ 10059: 0xBB20,
+ 10060: 0xBB29,
+ 10061: 0xBB2B,
+ 10062: 0xBB34,
+ 10063: 0xBB35,
+ 10064: 0xBB36,
+ 10065: 0xBB38,
+ 10066: 0xBB3B,
+ 10067: 0xBB3C,
+ 10068: 0xBB3D,
+ 10069: 0xBB3E,
+ 10070: 0xBB44,
+ 10071: 0xBB45,
+ 10072: 0xBB47,
+ 10073: 0xBB49,
+ 10074: 0xBB4D,
+ 10075: 0xBB4F,
+ 10076: 0xBB50,
+ 10077: 0xBB54,
+ 10078: 0xBB58,
+ 10079: 0xBB61,
+ 10080: 0xBB63,
+ 10081: 0xBB6C,
+ 10082: 0xBB88,
+ 10083: 0xBB8C,
+ 10084: 0xBB90,
+ 10085: 0xBBA4,
+ 10086: 0xBBA8,
+ 10087: 0xBBAC,
+ 10088: 0xBBB4,
+ 10089: 0xBBB7,
+ 10090: 0xBBC0,
+ 10091: 0xBBC4,
+ 10092: 0xBBC8,
+ 10093: 0xBBD0,
+ 10094: 0xBBD3,
+ 10095: 0xBBF8,
+ 10096: 0xBBF9,
+ 10097: 0xBBFC,
+ 10098: 0xBBFF,
+ 10099: 0xBC00,
+ 10100: 0xBC02,
+ 10101: 0xBC08,
+ 10102: 0xBC09,
+ 10103: 0xBC0B,
+ 10104: 0xBC0C,
+ 10105: 0xBC0D,
+ 10106: 0xBC0F,
+ 10107: 0xBC11,
+ 10108: 0xBC14,
+ 10109: 0xBC15,
+ 10110: 0xBC16,
+ 10111: 0xBC17,
+ 10112: 0xBC18,
+ 10113: 0xBC1B,
+ 10114: 0xBC1C,
+ 10115: 0xBC1D,
+ 10116: 0xBC1E,
+ 10117: 0xBC1F,
+ 10118: 0xBC24,
+ 10119: 0xBC25,
+ 10120: 0xBC27,
+ 10121: 0xBC29,
+ 10122: 0xBC2D,
+ 10123: 0xBC30,
+ 10124: 0xBC31,
+ 10125: 0xBC34,
+ 10126: 0xBC38,
+ 10127: 0xBC40,
+ 10128: 0xBC41,
+ 10129: 0xBC43,
+ 10130: 0xBC44,
+ 10131: 0xBC45,
+ 10132: 0xBC49,
+ 10133: 0xBC4C,
+ 10134: 0xBC4D,
+ 10135: 0xBC50,
+ 10136: 0xBC5D,
+ 10137: 0xBC84,
+ 10138: 0xBC85,
+ 10139: 0xBC88,
+ 10140: 0xBC8B,
+ 10141: 0xBC8C,
+ 10142: 0xBC8E,
+ 10143: 0xBC94,
+ 10144: 0xBC95,
+ 10145: 0xBC97,
+ 10146: 0xD28D,
+ 10147: 0xD28E,
+ 10148: 0xD28F,
+ 10149: 0xD292,
+ 10150: 0xD293,
+ 10151: 0xD294,
+ 10152: 0xD296,
+ 10153: 0xD297,
+ 10154: 0xD298,
+ 10155: 0xD299,
+ 10156: 0xD29A,
+ 10157: 0xD29B,
+ 10158: 0xD29D,
+ 10159: 0xD29E,
+ 10160: 0xD29F,
+ 10161: 0xD2A1,
+ 10162: 0xD2A2,
+ 10163: 0xD2A3,
+ 10164: 0xD2A5,
+ 10165: 0xD2A6,
+ 10166: 0xD2A7,
+ 10167: 0xD2A8,
+ 10168: 0xD2A9,
+ 10169: 0xD2AA,
+ 10170: 0xD2AB,
+ 10171: 0xD2AD,
+ 10172: 0xD2AE,
+ 10173: 0xD2AF,
+ 10174: 0xD2B0,
+ 10175: 0xD2B2,
+ 10176: 0xD2B3,
+ 10177: 0xD2B4,
+ 10178: 0xD2B5,
+ 10179: 0xD2B6,
+ 10180: 0xD2B7,
+ 10181: 0xD2BA,
+ 10182: 0xD2BB,
+ 10183: 0xD2BD,
+ 10184: 0xD2BE,
+ 10185: 0xD2C1,
+ 10186: 0xD2C3,
+ 10187: 0xD2C4,
+ 10188: 0xD2C5,
+ 10189: 0xD2C6,
+ 10190: 0xD2C7,
+ 10191: 0xD2CA,
+ 10192: 0xD2CC,
+ 10193: 0xD2CD,
+ 10194: 0xD2CE,
+ 10195: 0xD2CF,
+ 10196: 0xD2D0,
+ 10197: 0xD2D1,
+ 10198: 0xD2D2,
+ 10199: 0xD2D3,
+ 10200: 0xD2D5,
+ 10201: 0xD2D6,
+ 10202: 0xD2D7,
+ 10203: 0xD2D9,
+ 10204: 0xD2DA,
+ 10205: 0xD2DB,
+ 10206: 0xD2DD,
+ 10207: 0xD2DE,
+ 10208: 0xD2DF,
+ 10209: 0xD2E0,
+ 10210: 0xD2E1,
+ 10211: 0xD2E2,
+ 10212: 0xD2E3,
+ 10213: 0xD2E6,
+ 10214: 0xD2E7,
+ 10215: 0xD2E8,
+ 10216: 0xD2E9,
+ 10217: 0xD2EA,
+ 10218: 0xD2EB,
+ 10219: 0xD2EC,
+ 10220: 0xD2ED,
+ 10221: 0xD2EE,
+ 10222: 0xD2EF,
+ 10223: 0xD2F2,
+ 10224: 0xD2F3,
+ 10225: 0xD2F5,
+ 10226: 0xD2F6,
+ 10227: 0xD2F7,
+ 10228: 0xD2F9,
+ 10229: 0xD2FA,
+ 10230: 0xBC99,
+ 10231: 0xBC9A,
+ 10232: 0xBCA0,
+ 10233: 0xBCA1,
+ 10234: 0xBCA4,
+ 10235: 0xBCA7,
+ 10236: 0xBCA8,
+ 10237: 0xBCB0,
+ 10238: 0xBCB1,
+ 10239: 0xBCB3,
+ 10240: 0xBCB4,
+ 10241: 0xBCB5,
+ 10242: 0xBCBC,
+ 10243: 0xBCBD,
+ 10244: 0xBCC0,
+ 10245: 0xBCC4,
+ 10246: 0xBCCD,
+ 10247: 0xBCCF,
+ 10248: 0xBCD0,
+ 10249: 0xBCD1,
+ 10250: 0xBCD5,
+ 10251: 0xBCD8,
+ 10252: 0xBCDC,
+ 10253: 0xBCF4,
+ 10254: 0xBCF5,
+ 10255: 0xBCF6,
+ 10256: 0xBCF8,
+ 10257: 0xBCFC,
+ 10258: 0xBD04,
+ 10259: 0xBD05,
+ 10260: 0xBD07,
+ 10261: 0xBD09,
+ 10262: 0xBD10,
+ 10263: 0xBD14,
+ 10264: 0xBD24,
+ 10265: 0xBD2C,
+ 10266: 0xBD40,
+ 10267: 0xBD48,
+ 10268: 0xBD49,
+ 10269: 0xBD4C,
+ 10270: 0xBD50,
+ 10271: 0xBD58,
+ 10272: 0xBD59,
+ 10273: 0xBD64,
+ 10274: 0xBD68,
+ 10275: 0xBD80,
+ 10276: 0xBD81,
+ 10277: 0xBD84,
+ 10278: 0xBD87,
+ 10279: 0xBD88,
+ 10280: 0xBD89,
+ 10281: 0xBD8A,
+ 10282: 0xBD90,
+ 10283: 0xBD91,
+ 10284: 0xBD93,
+ 10285: 0xBD95,
+ 10286: 0xBD99,
+ 10287: 0xBD9A,
+ 10288: 0xBD9C,
+ 10289: 0xBDA4,
+ 10290: 0xBDB0,
+ 10291: 0xBDB8,
+ 10292: 0xBDD4,
+ 10293: 0xBDD5,
+ 10294: 0xBDD8,
+ 10295: 0xBDDC,
+ 10296: 0xBDE9,
+ 10297: 0xBDF0,
+ 10298: 0xBDF4,
+ 10299: 0xBDF8,
+ 10300: 0xBE00,
+ 10301: 0xBE03,
+ 10302: 0xBE05,
+ 10303: 0xBE0C,
+ 10304: 0xBE0D,
+ 10305: 0xBE10,
+ 10306: 0xBE14,
+ 10307: 0xBE1C,
+ 10308: 0xBE1D,
+ 10309: 0xBE1F,
+ 10310: 0xBE44,
+ 10311: 0xBE45,
+ 10312: 0xBE48,
+ 10313: 0xBE4C,
+ 10314: 0xBE4E,
+ 10315: 0xBE54,
+ 10316: 0xBE55,
+ 10317: 0xBE57,
+ 10318: 0xBE59,
+ 10319: 0xBE5A,
+ 10320: 0xBE5B,
+ 10321: 0xBE60,
+ 10322: 0xBE61,
+ 10323: 0xBE64,
+ 10324: 0xD2FB,
+ 10325: 0xD2FC,
+ 10326: 0xD2FD,
+ 10327: 0xD2FE,
+ 10328: 0xD2FF,
+ 10329: 0xD302,
+ 10330: 0xD304,
+ 10331: 0xD306,
+ 10332: 0xD307,
+ 10333: 0xD308,
+ 10334: 0xD309,
+ 10335: 0xD30A,
+ 10336: 0xD30B,
+ 10337: 0xD30F,
+ 10338: 0xD311,
+ 10339: 0xD312,
+ 10340: 0xD313,
+ 10341: 0xD315,
+ 10342: 0xD317,
+ 10343: 0xD318,
+ 10344: 0xD319,
+ 10345: 0xD31A,
+ 10346: 0xD31B,
+ 10347: 0xD31E,
+ 10348: 0xD322,
+ 10349: 0xD323,
+ 10350: 0xD324,
+ 10351: 0xD326,
+ 10352: 0xD327,
+ 10353: 0xD32A,
+ 10354: 0xD32B,
+ 10355: 0xD32D,
+ 10356: 0xD32E,
+ 10357: 0xD32F,
+ 10358: 0xD331,
+ 10359: 0xD332,
+ 10360: 0xD333,
+ 10361: 0xD334,
+ 10362: 0xD335,
+ 10363: 0xD336,
+ 10364: 0xD337,
+ 10365: 0xD33A,
+ 10366: 0xD33E,
+ 10367: 0xD33F,
+ 10368: 0xD340,
+ 10369: 0xD341,
+ 10370: 0xD342,
+ 10371: 0xD343,
+ 10372: 0xD346,
+ 10373: 0xD347,
+ 10374: 0xD348,
+ 10375: 0xD349,
+ 10376: 0xD34A,
+ 10377: 0xD34B,
+ 10378: 0xD34C,
+ 10379: 0xD34D,
+ 10380: 0xD34E,
+ 10381: 0xD34F,
+ 10382: 0xD350,
+ 10383: 0xD351,
+ 10384: 0xD352,
+ 10385: 0xD353,
+ 10386: 0xD354,
+ 10387: 0xD355,
+ 10388: 0xD356,
+ 10389: 0xD357,
+ 10390: 0xD358,
+ 10391: 0xD359,
+ 10392: 0xD35A,
+ 10393: 0xD35B,
+ 10394: 0xD35C,
+ 10395: 0xD35D,
+ 10396: 0xD35E,
+ 10397: 0xD35F,
+ 10398: 0xD360,
+ 10399: 0xD361,
+ 10400: 0xD362,
+ 10401: 0xD363,
+ 10402: 0xD364,
+ 10403: 0xD365,
+ 10404: 0xD366,
+ 10405: 0xD367,
+ 10406: 0xD368,
+ 10407: 0xD369,
+ 10408: 0xBE68,
+ 10409: 0xBE6A,
+ 10410: 0xBE70,
+ 10411: 0xBE71,
+ 10412: 0xBE73,
+ 10413: 0xBE74,
+ 10414: 0xBE75,
+ 10415: 0xBE7B,
+ 10416: 0xBE7C,
+ 10417: 0xBE7D,
+ 10418: 0xBE80,
+ 10419: 0xBE84,
+ 10420: 0xBE8C,
+ 10421: 0xBE8D,
+ 10422: 0xBE8F,
+ 10423: 0xBE90,
+ 10424: 0xBE91,
+ 10425: 0xBE98,
+ 10426: 0xBE99,
+ 10427: 0xBEA8,
+ 10428: 0xBED0,
+ 10429: 0xBED1,
+ 10430: 0xBED4,
+ 10431: 0xBED7,
+ 10432: 0xBED8,
+ 10433: 0xBEE0,
+ 10434: 0xBEE3,
+ 10435: 0xBEE4,
+ 10436: 0xBEE5,
+ 10437: 0xBEEC,
+ 10438: 0xBF01,
+ 10439: 0xBF08,
+ 10440: 0xBF09,
+ 10441: 0xBF18,
+ 10442: 0xBF19,
+ 10443: 0xBF1B,
+ 10444: 0xBF1C,
+ 10445: 0xBF1D,
+ 10446: 0xBF40,
+ 10447: 0xBF41,
+ 10448: 0xBF44,
+ 10449: 0xBF48,
+ 10450: 0xBF50,
+ 10451: 0xBF51,
+ 10452: 0xBF55,
+ 10453: 0xBF94,
+ 10454: 0xBFB0,
+ 10455: 0xBFC5,
+ 10456: 0xBFCC,
+ 10457: 0xBFCD,
+ 10458: 0xBFD0,
+ 10459: 0xBFD4,
+ 10460: 0xBFDC,
+ 10461: 0xBFDF,
+ 10462: 0xBFE1,
+ 10463: 0xC03C,
+ 10464: 0xC051,
+ 10465: 0xC058,
+ 10466: 0xC05C,
+ 10467: 0xC060,
+ 10468: 0xC068,
+ 10469: 0xC069,
+ 10470: 0xC090,
+ 10471: 0xC091,
+ 10472: 0xC094,
+ 10473: 0xC098,
+ 10474: 0xC0A0,
+ 10475: 0xC0A1,
+ 10476: 0xC0A3,
+ 10477: 0xC0A5,
+ 10478: 0xC0AC,
+ 10479: 0xC0AD,
+ 10480: 0xC0AF,
+ 10481: 0xC0B0,
+ 10482: 0xC0B3,
+ 10483: 0xC0B4,
+ 10484: 0xC0B5,
+ 10485: 0xC0B6,
+ 10486: 0xC0BC,
+ 10487: 0xC0BD,
+ 10488: 0xC0BF,
+ 10489: 0xC0C0,
+ 10490: 0xC0C1,
+ 10491: 0xC0C5,
+ 10492: 0xC0C8,
+ 10493: 0xC0C9,
+ 10494: 0xC0CC,
+ 10495: 0xC0D0,
+ 10496: 0xC0D8,
+ 10497: 0xC0D9,
+ 10498: 0xC0DB,
+ 10499: 0xC0DC,
+ 10500: 0xC0DD,
+ 10501: 0xC0E4,
+ 10502: 0xD36A,
+ 10503: 0xD36B,
+ 10504: 0xD36C,
+ 10505: 0xD36D,
+ 10506: 0xD36E,
+ 10507: 0xD36F,
+ 10508: 0xD370,
+ 10509: 0xD371,
+ 10510: 0xD372,
+ 10511: 0xD373,
+ 10512: 0xD374,
+ 10513: 0xD375,
+ 10514: 0xD376,
+ 10515: 0xD377,
+ 10516: 0xD378,
+ 10517: 0xD379,
+ 10518: 0xD37A,
+ 10519: 0xD37B,
+ 10520: 0xD37E,
+ 10521: 0xD37F,
+ 10522: 0xD381,
+ 10523: 0xD382,
+ 10524: 0xD383,
+ 10525: 0xD385,
+ 10526: 0xD386,
+ 10527: 0xD387,
+ 10528: 0xD388,
+ 10529: 0xD389,
+ 10530: 0xD38A,
+ 10531: 0xD38B,
+ 10532: 0xD38E,
+ 10533: 0xD392,
+ 10534: 0xD393,
+ 10535: 0xD394,
+ 10536: 0xD395,
+ 10537: 0xD396,
+ 10538: 0xD397,
+ 10539: 0xD39A,
+ 10540: 0xD39B,
+ 10541: 0xD39D,
+ 10542: 0xD39E,
+ 10543: 0xD39F,
+ 10544: 0xD3A1,
+ 10545: 0xD3A2,
+ 10546: 0xD3A3,
+ 10547: 0xD3A4,
+ 10548: 0xD3A5,
+ 10549: 0xD3A6,
+ 10550: 0xD3A7,
+ 10551: 0xD3AA,
+ 10552: 0xD3AC,
+ 10553: 0xD3AE,
+ 10554: 0xD3AF,
+ 10555: 0xD3B0,
+ 10556: 0xD3B1,
+ 10557: 0xD3B2,
+ 10558: 0xD3B3,
+ 10559: 0xD3B5,
+ 10560: 0xD3B6,
+ 10561: 0xD3B7,
+ 10562: 0xD3B9,
+ 10563: 0xD3BA,
+ 10564: 0xD3BB,
+ 10565: 0xD3BD,
+ 10566: 0xD3BE,
+ 10567: 0xD3BF,
+ 10568: 0xD3C0,
+ 10569: 0xD3C1,
+ 10570: 0xD3C2,
+ 10571: 0xD3C3,
+ 10572: 0xD3C6,
+ 10573: 0xD3C7,
+ 10574: 0xD3CA,
+ 10575: 0xD3CB,
+ 10576: 0xD3CC,
+ 10577: 0xD3CD,
+ 10578: 0xD3CE,
+ 10579: 0xD3CF,
+ 10580: 0xD3D1,
+ 10581: 0xD3D2,
+ 10582: 0xD3D3,
+ 10583: 0xD3D4,
+ 10584: 0xD3D5,
+ 10585: 0xD3D6,
+ 10586: 0xC0E5,
+ 10587: 0xC0E8,
+ 10588: 0xC0EC,
+ 10589: 0xC0F4,
+ 10590: 0xC0F5,
+ 10591: 0xC0F7,
+ 10592: 0xC0F9,
+ 10593: 0xC100,
+ 10594: 0xC104,
+ 10595: 0xC108,
+ 10596: 0xC110,
+ 10597: 0xC115,
+ 10598: 0xC11C,
+ 10599: 0xC11D,
+ 10600: 0xC11E,
+ 10601: 0xC11F,
+ 10602: 0xC120,
+ 10603: 0xC123,
+ 10604: 0xC124,
+ 10605: 0xC126,
+ 10606: 0xC127,
+ 10607: 0xC12C,
+ 10608: 0xC12D,
+ 10609: 0xC12F,
+ 10610: 0xC130,
+ 10611: 0xC131,
+ 10612: 0xC136,
+ 10613: 0xC138,
+ 10614: 0xC139,
+ 10615: 0xC13C,
+ 10616: 0xC140,
+ 10617: 0xC148,
+ 10618: 0xC149,
+ 10619: 0xC14B,
+ 10620: 0xC14C,
+ 10621: 0xC14D,
+ 10622: 0xC154,
+ 10623: 0xC155,
+ 10624: 0xC158,
+ 10625: 0xC15C,
+ 10626: 0xC164,
+ 10627: 0xC165,
+ 10628: 0xC167,
+ 10629: 0xC168,
+ 10630: 0xC169,
+ 10631: 0xC170,
+ 10632: 0xC174,
+ 10633: 0xC178,
+ 10634: 0xC185,
+ 10635: 0xC18C,
+ 10636: 0xC18D,
+ 10637: 0xC18E,
+ 10638: 0xC190,
+ 10639: 0xC194,
+ 10640: 0xC196,
+ 10641: 0xC19C,
+ 10642: 0xC19D,
+ 10643: 0xC19F,
+ 10644: 0xC1A1,
+ 10645: 0xC1A5,
+ 10646: 0xC1A8,
+ 10647: 0xC1A9,
+ 10648: 0xC1AC,
+ 10649: 0xC1B0,
+ 10650: 0xC1BD,
+ 10651: 0xC1C4,
+ 10652: 0xC1C8,
+ 10653: 0xC1CC,
+ 10654: 0xC1D4,
+ 10655: 0xC1D7,
+ 10656: 0xC1D8,
+ 10657: 0xC1E0,
+ 10658: 0xC1E4,
+ 10659: 0xC1E8,
+ 10660: 0xC1F0,
+ 10661: 0xC1F1,
+ 10662: 0xC1F3,
+ 10663: 0xC1FC,
+ 10664: 0xC1FD,
+ 10665: 0xC200,
+ 10666: 0xC204,
+ 10667: 0xC20C,
+ 10668: 0xC20D,
+ 10669: 0xC20F,
+ 10670: 0xC211,
+ 10671: 0xC218,
+ 10672: 0xC219,
+ 10673: 0xC21C,
+ 10674: 0xC21F,
+ 10675: 0xC220,
+ 10676: 0xC228,
+ 10677: 0xC229,
+ 10678: 0xC22B,
+ 10679: 0xC22D,
+ 10680: 0xD3D7,
+ 10681: 0xD3D9,
+ 10682: 0xD3DA,
+ 10683: 0xD3DB,
+ 10684: 0xD3DC,
+ 10685: 0xD3DD,
+ 10686: 0xD3DE,
+ 10687: 0xD3DF,
+ 10688: 0xD3E0,
+ 10689: 0xD3E2,
+ 10690: 0xD3E4,
+ 10691: 0xD3E5,
+ 10692: 0xD3E6,
+ 10693: 0xD3E7,
+ 10694: 0xD3E8,
+ 10695: 0xD3E9,
+ 10696: 0xD3EA,
+ 10697: 0xD3EB,
+ 10698: 0xD3EE,
+ 10699: 0xD3EF,
+ 10700: 0xD3F1,
+ 10701: 0xD3F2,
+ 10702: 0xD3F3,
+ 10703: 0xD3F5,
+ 10704: 0xD3F6,
+ 10705: 0xD3F7,
+ 10706: 0xD3F8,
+ 10707: 0xD3F9,
+ 10708: 0xD3FA,
+ 10709: 0xD3FB,
+ 10710: 0xD3FE,
+ 10711: 0xD400,
+ 10712: 0xD402,
+ 10713: 0xD403,
+ 10714: 0xD404,
+ 10715: 0xD405,
+ 10716: 0xD406,
+ 10717: 0xD407,
+ 10718: 0xD409,
+ 10719: 0xD40A,
+ 10720: 0xD40B,
+ 10721: 0xD40C,
+ 10722: 0xD40D,
+ 10723: 0xD40E,
+ 10724: 0xD40F,
+ 10725: 0xD410,
+ 10726: 0xD411,
+ 10727: 0xD412,
+ 10728: 0xD413,
+ 10729: 0xD414,
+ 10730: 0xD415,
+ 10731: 0xD416,
+ 10732: 0xD417,
+ 10733: 0xD418,
+ 10734: 0xD419,
+ 10735: 0xD41A,
+ 10736: 0xD41B,
+ 10737: 0xD41C,
+ 10738: 0xD41E,
+ 10739: 0xD41F,
+ 10740: 0xD420,
+ 10741: 0xD421,
+ 10742: 0xD422,
+ 10743: 0xD423,
+ 10744: 0xD424,
+ 10745: 0xD425,
+ 10746: 0xD426,
+ 10747: 0xD427,
+ 10748: 0xD428,
+ 10749: 0xD429,
+ 10750: 0xD42A,
+ 10751: 0xD42B,
+ 10752: 0xD42C,
+ 10753: 0xD42D,
+ 10754: 0xD42E,
+ 10755: 0xD42F,
+ 10756: 0xD430,
+ 10757: 0xD431,
+ 10758: 0xD432,
+ 10759: 0xD433,
+ 10760: 0xD434,
+ 10761: 0xD435,
+ 10762: 0xD436,
+ 10763: 0xD437,
+ 10764: 0xC22F,
+ 10765: 0xC231,
+ 10766: 0xC232,
+ 10767: 0xC234,
+ 10768: 0xC248,
+ 10769: 0xC250,
+ 10770: 0xC251,
+ 10771: 0xC254,
+ 10772: 0xC258,
+ 10773: 0xC260,
+ 10774: 0xC265,
+ 10775: 0xC26C,
+ 10776: 0xC26D,
+ 10777: 0xC270,
+ 10778: 0xC274,
+ 10779: 0xC27C,
+ 10780: 0xC27D,
+ 10781: 0xC27F,
+ 10782: 0xC281,
+ 10783: 0xC288,
+ 10784: 0xC289,
+ 10785: 0xC290,
+ 10786: 0xC298,
+ 10787: 0xC29B,
+ 10788: 0xC29D,
+ 10789: 0xC2A4,
+ 10790: 0xC2A5,
+ 10791: 0xC2A8,
+ 10792: 0xC2AC,
+ 10793: 0xC2AD,
+ 10794: 0xC2B4,
+ 10795: 0xC2B5,
+ 10796: 0xC2B7,
+ 10797: 0xC2B9,
+ 10798: 0xC2DC,
+ 10799: 0xC2DD,
+ 10800: 0xC2E0,
+ 10801: 0xC2E3,
+ 10802: 0xC2E4,
+ 10803: 0xC2EB,
+ 10804: 0xC2EC,
+ 10805: 0xC2ED,
+ 10806: 0xC2EF,
+ 10807: 0xC2F1,
+ 10808: 0xC2F6,
+ 10809: 0xC2F8,
+ 10810: 0xC2F9,
+ 10811: 0xC2FB,
+ 10812: 0xC2FC,
+ 10813: 0xC300,
+ 10814: 0xC308,
+ 10815: 0xC309,
+ 10816: 0xC30C,
+ 10817: 0xC30D,
+ 10818: 0xC313,
+ 10819: 0xC314,
+ 10820: 0xC315,
+ 10821: 0xC318,
+ 10822: 0xC31C,
+ 10823: 0xC324,
+ 10824: 0xC325,
+ 10825: 0xC328,
+ 10826: 0xC329,
+ 10827: 0xC345,
+ 10828: 0xC368,
+ 10829: 0xC369,
+ 10830: 0xC36C,
+ 10831: 0xC370,
+ 10832: 0xC372,
+ 10833: 0xC378,
+ 10834: 0xC379,
+ 10835: 0xC37C,
+ 10836: 0xC37D,
+ 10837: 0xC384,
+ 10838: 0xC388,
+ 10839: 0xC38C,
+ 10840: 0xC3C0,
+ 10841: 0xC3D8,
+ 10842: 0xC3D9,
+ 10843: 0xC3DC,
+ 10844: 0xC3DF,
+ 10845: 0xC3E0,
+ 10846: 0xC3E2,
+ 10847: 0xC3E8,
+ 10848: 0xC3E9,
+ 10849: 0xC3ED,
+ 10850: 0xC3F4,
+ 10851: 0xC3F5,
+ 10852: 0xC3F8,
+ 10853: 0xC408,
+ 10854: 0xC410,
+ 10855: 0xC424,
+ 10856: 0xC42C,
+ 10857: 0xC430,
+ 10858: 0xD438,
+ 10859: 0xD439,
+ 10860: 0xD43A,
+ 10861: 0xD43B,
+ 10862: 0xD43C,
+ 10863: 0xD43D,
+ 10864: 0xD43E,
+ 10865: 0xD43F,
+ 10866: 0xD441,
+ 10867: 0xD442,
+ 10868: 0xD443,
+ 10869: 0xD445,
+ 10870: 0xD446,
+ 10871: 0xD447,
+ 10872: 0xD448,
+ 10873: 0xD449,
+ 10874: 0xD44A,
+ 10875: 0xD44B,
+ 10876: 0xD44C,
+ 10877: 0xD44D,
+ 10878: 0xD44E,
+ 10879: 0xD44F,
+ 10880: 0xD450,
+ 10881: 0xD451,
+ 10882: 0xD452,
+ 10883: 0xD453,
+ 10884: 0xD454,
+ 10885: 0xD455,
+ 10886: 0xD456,
+ 10887: 0xD457,
+ 10888: 0xD458,
+ 10889: 0xD459,
+ 10890: 0xD45A,
+ 10891: 0xD45B,
+ 10892: 0xD45D,
+ 10893: 0xD45E,
+ 10894: 0xD45F,
+ 10895: 0xD461,
+ 10896: 0xD462,
+ 10897: 0xD463,
+ 10898: 0xD465,
+ 10899: 0xD466,
+ 10900: 0xD467,
+ 10901: 0xD468,
+ 10902: 0xD469,
+ 10903: 0xD46A,
+ 10904: 0xD46B,
+ 10905: 0xD46C,
+ 10906: 0xD46E,
+ 10907: 0xD470,
+ 10908: 0xD471,
+ 10909: 0xD472,
+ 10910: 0xD473,
+ 10911: 0xD474,
+ 10912: 0xD475,
+ 10913: 0xD476,
+ 10914: 0xD477,
+ 10915: 0xD47A,
+ 10916: 0xD47B,
+ 10917: 0xD47D,
+ 10918: 0xD47E,
+ 10919: 0xD481,
+ 10920: 0xD483,
+ 10921: 0xD484,
+ 10922: 0xD485,
+ 10923: 0xD486,
+ 10924: 0xD487,
+ 10925: 0xD48A,
+ 10926: 0xD48C,
+ 10927: 0xD48E,
+ 10928: 0xD48F,
+ 10929: 0xD490,
+ 10930: 0xD491,
+ 10931: 0xD492,
+ 10932: 0xD493,
+ 10933: 0xD495,
+ 10934: 0xD496,
+ 10935: 0xD497,
+ 10936: 0xD498,
+ 10937: 0xD499,
+ 10938: 0xD49A,
+ 10939: 0xD49B,
+ 10940: 0xD49C,
+ 10941: 0xD49D,
+ 10942: 0xC434,
+ 10943: 0xC43C,
+ 10944: 0xC43D,
+ 10945: 0xC448,
+ 10946: 0xC464,
+ 10947: 0xC465,
+ 10948: 0xC468,
+ 10949: 0xC46C,
+ 10950: 0xC474,
+ 10951: 0xC475,
+ 10952: 0xC479,
+ 10953: 0xC480,
+ 10954: 0xC494,
+ 10955: 0xC49C,
+ 10956: 0xC4B8,
+ 10957: 0xC4BC,
+ 10958: 0xC4E9,
+ 10959: 0xC4F0,
+ 10960: 0xC4F1,
+ 10961: 0xC4F4,
+ 10962: 0xC4F8,
+ 10963: 0xC4FA,
+ 10964: 0xC4FF,
+ 10965: 0xC500,
+ 10966: 0xC501,
+ 10967: 0xC50C,
+ 10968: 0xC510,
+ 10969: 0xC514,
+ 10970: 0xC51C,
+ 10971: 0xC528,
+ 10972: 0xC529,
+ 10973: 0xC52C,
+ 10974: 0xC530,
+ 10975: 0xC538,
+ 10976: 0xC539,
+ 10977: 0xC53B,
+ 10978: 0xC53D,
+ 10979: 0xC544,
+ 10980: 0xC545,
+ 10981: 0xC548,
+ 10982: 0xC549,
+ 10983: 0xC54A,
+ 10984: 0xC54C,
+ 10985: 0xC54D,
+ 10986: 0xC54E,
+ 10987: 0xC553,
+ 10988: 0xC554,
+ 10989: 0xC555,
+ 10990: 0xC557,
+ 10991: 0xC558,
+ 10992: 0xC559,
+ 10993: 0xC55D,
+ 10994: 0xC55E,
+ 10995: 0xC560,
+ 10996: 0xC561,
+ 10997: 0xC564,
+ 10998: 0xC568,
+ 10999: 0xC570,
+ 11000: 0xC571,
+ 11001: 0xC573,
+ 11002: 0xC574,
+ 11003: 0xC575,
+ 11004: 0xC57C,
+ 11005: 0xC57D,
+ 11006: 0xC580,
+ 11007: 0xC584,
+ 11008: 0xC587,
+ 11009: 0xC58C,
+ 11010: 0xC58D,
+ 11011: 0xC58F,
+ 11012: 0xC591,
+ 11013: 0xC595,
+ 11014: 0xC597,
+ 11015: 0xC598,
+ 11016: 0xC59C,
+ 11017: 0xC5A0,
+ 11018: 0xC5A9,
+ 11019: 0xC5B4,
+ 11020: 0xC5B5,
+ 11021: 0xC5B8,
+ 11022: 0xC5B9,
+ 11023: 0xC5BB,
+ 11024: 0xC5BC,
+ 11025: 0xC5BD,
+ 11026: 0xC5BE,
+ 11027: 0xC5C4,
+ 11028: 0xC5C5,
+ 11029: 0xC5C6,
+ 11030: 0xC5C7,
+ 11031: 0xC5C8,
+ 11032: 0xC5C9,
+ 11033: 0xC5CA,
+ 11034: 0xC5CC,
+ 11035: 0xC5CE,
+ 11036: 0xD49E,
+ 11037: 0xD49F,
+ 11038: 0xD4A0,
+ 11039: 0xD4A1,
+ 11040: 0xD4A2,
+ 11041: 0xD4A3,
+ 11042: 0xD4A4,
+ 11043: 0xD4A5,
+ 11044: 0xD4A6,
+ 11045: 0xD4A7,
+ 11046: 0xD4A8,
+ 11047: 0xD4AA,
+ 11048: 0xD4AB,
+ 11049: 0xD4AC,
+ 11050: 0xD4AD,
+ 11051: 0xD4AE,
+ 11052: 0xD4AF,
+ 11053: 0xD4B0,
+ 11054: 0xD4B1,
+ 11055: 0xD4B2,
+ 11056: 0xD4B3,
+ 11057: 0xD4B4,
+ 11058: 0xD4B5,
+ 11059: 0xD4B6,
+ 11060: 0xD4B7,
+ 11061: 0xD4B8,
+ 11062: 0xD4B9,
+ 11063: 0xD4BA,
+ 11064: 0xD4BB,
+ 11065: 0xD4BC,
+ 11066: 0xD4BD,
+ 11067: 0xD4BE,
+ 11068: 0xD4BF,
+ 11069: 0xD4C0,
+ 11070: 0xD4C1,
+ 11071: 0xD4C2,
+ 11072: 0xD4C3,
+ 11073: 0xD4C4,
+ 11074: 0xD4C5,
+ 11075: 0xD4C6,
+ 11076: 0xD4C7,
+ 11077: 0xD4C8,
+ 11078: 0xD4C9,
+ 11079: 0xD4CA,
+ 11080: 0xD4CB,
+ 11081: 0xD4CD,
+ 11082: 0xD4CE,
+ 11083: 0xD4CF,
+ 11084: 0xD4D1,
+ 11085: 0xD4D2,
+ 11086: 0xD4D3,
+ 11087: 0xD4D5,
+ 11088: 0xD4D6,
+ 11089: 0xD4D7,
+ 11090: 0xD4D8,
+ 11091: 0xD4D9,
+ 11092: 0xD4DA,
+ 11093: 0xD4DB,
+ 11094: 0xD4DD,
+ 11095: 0xD4DE,
+ 11096: 0xD4E0,
+ 11097: 0xD4E1,
+ 11098: 0xD4E2,
+ 11099: 0xD4E3,
+ 11100: 0xD4E4,
+ 11101: 0xD4E5,
+ 11102: 0xD4E6,
+ 11103: 0xD4E7,
+ 11104: 0xD4E9,
+ 11105: 0xD4EA,
+ 11106: 0xD4EB,
+ 11107: 0xD4ED,
+ 11108: 0xD4EE,
+ 11109: 0xD4EF,
+ 11110: 0xD4F1,
+ 11111: 0xD4F2,
+ 11112: 0xD4F3,
+ 11113: 0xD4F4,
+ 11114: 0xD4F5,
+ 11115: 0xD4F6,
+ 11116: 0xD4F7,
+ 11117: 0xD4F9,
+ 11118: 0xD4FA,
+ 11119: 0xD4FC,
+ 11120: 0xC5D0,
+ 11121: 0xC5D1,
+ 11122: 0xC5D4,
+ 11123: 0xC5D8,
+ 11124: 0xC5E0,
+ 11125: 0xC5E1,
+ 11126: 0xC5E3,
+ 11127: 0xC5E5,
+ 11128: 0xC5EC,
+ 11129: 0xC5ED,
+ 11130: 0xC5EE,
+ 11131: 0xC5F0,
+ 11132: 0xC5F4,
+ 11133: 0xC5F6,
+ 11134: 0xC5F7,
+ 11135: 0xC5FC,
+ 11136: 0xC5FD,
+ 11137: 0xC5FE,
+ 11138: 0xC5FF,
+ 11139: 0xC600,
+ 11140: 0xC601,
+ 11141: 0xC605,
+ 11142: 0xC606,
+ 11143: 0xC607,
+ 11144: 0xC608,
+ 11145: 0xC60C,
+ 11146: 0xC610,
+ 11147: 0xC618,
+ 11148: 0xC619,
+ 11149: 0xC61B,
+ 11150: 0xC61C,
+ 11151: 0xC624,
+ 11152: 0xC625,
+ 11153: 0xC628,
+ 11154: 0xC62C,
+ 11155: 0xC62D,
+ 11156: 0xC62E,
+ 11157: 0xC630,
+ 11158: 0xC633,
+ 11159: 0xC634,
+ 11160: 0xC635,
+ 11161: 0xC637,
+ 11162: 0xC639,
+ 11163: 0xC63B,
+ 11164: 0xC640,
+ 11165: 0xC641,
+ 11166: 0xC644,
+ 11167: 0xC648,
+ 11168: 0xC650,
+ 11169: 0xC651,
+ 11170: 0xC653,
+ 11171: 0xC654,
+ 11172: 0xC655,
+ 11173: 0xC65C,
+ 11174: 0xC65D,
+ 11175: 0xC660,
+ 11176: 0xC66C,
+ 11177: 0xC66F,
+ 11178: 0xC671,
+ 11179: 0xC678,
+ 11180: 0xC679,
+ 11181: 0xC67C,
+ 11182: 0xC680,
+ 11183: 0xC688,
+ 11184: 0xC689,
+ 11185: 0xC68B,
+ 11186: 0xC68D,
+ 11187: 0xC694,
+ 11188: 0xC695,
+ 11189: 0xC698,
+ 11190: 0xC69C,
+ 11191: 0xC6A4,
+ 11192: 0xC6A5,
+ 11193: 0xC6A7,
+ 11194: 0xC6A9,
+ 11195: 0xC6B0,
+ 11196: 0xC6B1,
+ 11197: 0xC6B4,
+ 11198: 0xC6B8,
+ 11199: 0xC6B9,
+ 11200: 0xC6BA,
+ 11201: 0xC6C0,
+ 11202: 0xC6C1,
+ 11203: 0xC6C3,
+ 11204: 0xC6C5,
+ 11205: 0xC6CC,
+ 11206: 0xC6CD,
+ 11207: 0xC6D0,
+ 11208: 0xC6D4,
+ 11209: 0xC6DC,
+ 11210: 0xC6DD,
+ 11211: 0xC6E0,
+ 11212: 0xC6E1,
+ 11213: 0xC6E8,
+ 11214: 0xD4FE,
+ 11215: 0xD4FF,
+ 11216: 0xD500,
+ 11217: 0xD501,
+ 11218: 0xD502,
+ 11219: 0xD503,
+ 11220: 0xD505,
+ 11221: 0xD506,
+ 11222: 0xD507,
+ 11223: 0xD509,
+ 11224: 0xD50A,
+ 11225: 0xD50B,
+ 11226: 0xD50D,
+ 11227: 0xD50E,
+ 11228: 0xD50F,
+ 11229: 0xD510,
+ 11230: 0xD511,
+ 11231: 0xD512,
+ 11232: 0xD513,
+ 11233: 0xD516,
+ 11234: 0xD518,
+ 11235: 0xD519,
+ 11236: 0xD51A,
+ 11237: 0xD51B,
+ 11238: 0xD51C,
+ 11239: 0xD51D,
+ 11240: 0xD51E,
+ 11241: 0xD51F,
+ 11242: 0xD520,
+ 11243: 0xD521,
+ 11244: 0xD522,
+ 11245: 0xD523,
+ 11246: 0xD524,
+ 11247: 0xD525,
+ 11248: 0xD526,
+ 11249: 0xD527,
+ 11250: 0xD528,
+ 11251: 0xD529,
+ 11252: 0xD52A,
+ 11253: 0xD52B,
+ 11254: 0xD52C,
+ 11255: 0xD52D,
+ 11256: 0xD52E,
+ 11257: 0xD52F,
+ 11258: 0xD530,
+ 11259: 0xD531,
+ 11260: 0xD532,
+ 11261: 0xD533,
+ 11262: 0xD534,
+ 11263: 0xD535,
+ 11264: 0xD536,
+ 11265: 0xD537,
+ 11266: 0xD538,
+ 11267: 0xD539,
+ 11268: 0xD53A,
+ 11269: 0xD53B,
+ 11270: 0xD53E,
+ 11271: 0xD53F,
+ 11272: 0xD541,
+ 11273: 0xD542,
+ 11274: 0xD543,
+ 11275: 0xD545,
+ 11276: 0xD546,
+ 11277: 0xD547,
+ 11278: 0xD548,
+ 11279: 0xD549,
+ 11280: 0xD54A,
+ 11281: 0xD54B,
+ 11282: 0xD54E,
+ 11283: 0xD550,
+ 11284: 0xD552,
+ 11285: 0xD553,
+ 11286: 0xD554,
+ 11287: 0xD555,
+ 11288: 0xD556,
+ 11289: 0xD557,
+ 11290: 0xD55A,
+ 11291: 0xD55B,
+ 11292: 0xD55D,
+ 11293: 0xD55E,
+ 11294: 0xD55F,
+ 11295: 0xD561,
+ 11296: 0xD562,
+ 11297: 0xD563,
+ 11298: 0xC6E9,
+ 11299: 0xC6EC,
+ 11300: 0xC6F0,
+ 11301: 0xC6F8,
+ 11302: 0xC6F9,
+ 11303: 0xC6FD,
+ 11304: 0xC704,
+ 11305: 0xC705,
+ 11306: 0xC708,
+ 11307: 0xC70C,
+ 11308: 0xC714,
+ 11309: 0xC715,
+ 11310: 0xC717,
+ 11311: 0xC719,
+ 11312: 0xC720,
+ 11313: 0xC721,
+ 11314: 0xC724,
+ 11315: 0xC728,
+ 11316: 0xC730,
+ 11317: 0xC731,
+ 11318: 0xC733,
+ 11319: 0xC735,
+ 11320: 0xC737,
+ 11321: 0xC73C,
+ 11322: 0xC73D,
+ 11323: 0xC740,
+ 11324: 0xC744,
+ 11325: 0xC74A,
+ 11326: 0xC74C,
+ 11327: 0xC74D,
+ 11328: 0xC74F,
+ 11329: 0xC751,
+ 11330: 0xC752,
+ 11331: 0xC753,
+ 11332: 0xC754,
+ 11333: 0xC755,
+ 11334: 0xC756,
+ 11335: 0xC757,
+ 11336: 0xC758,
+ 11337: 0xC75C,
+ 11338: 0xC760,
+ 11339: 0xC768,
+ 11340: 0xC76B,
+ 11341: 0xC774,
+ 11342: 0xC775,
+ 11343: 0xC778,
+ 11344: 0xC77C,
+ 11345: 0xC77D,
+ 11346: 0xC77E,
+ 11347: 0xC783,
+ 11348: 0xC784,
+ 11349: 0xC785,
+ 11350: 0xC787,
+ 11351: 0xC788,
+ 11352: 0xC789,
+ 11353: 0xC78A,
+ 11354: 0xC78E,
+ 11355: 0xC790,
+ 11356: 0xC791,
+ 11357: 0xC794,
+ 11358: 0xC796,
+ 11359: 0xC797,
+ 11360: 0xC798,
+ 11361: 0xC79A,
+ 11362: 0xC7A0,
+ 11363: 0xC7A1,
+ 11364: 0xC7A3,
+ 11365: 0xC7A4,
+ 11366: 0xC7A5,
+ 11367: 0xC7A6,
+ 11368: 0xC7AC,
+ 11369: 0xC7AD,
+ 11370: 0xC7B0,
+ 11371: 0xC7B4,
+ 11372: 0xC7BC,
+ 11373: 0xC7BD,
+ 11374: 0xC7BF,
+ 11375: 0xC7C0,
+ 11376: 0xC7C1,
+ 11377: 0xC7C8,
+ 11378: 0xC7C9,
+ 11379: 0xC7CC,
+ 11380: 0xC7CE,
+ 11381: 0xC7D0,
+ 11382: 0xC7D8,
+ 11383: 0xC7DD,
+ 11384: 0xC7E4,
+ 11385: 0xC7E8,
+ 11386: 0xC7EC,
+ 11387: 0xC800,
+ 11388: 0xC801,
+ 11389: 0xC804,
+ 11390: 0xC808,
+ 11391: 0xC80A,
+ 11392: 0xD564,
+ 11393: 0xD566,
+ 11394: 0xD567,
+ 11395: 0xD56A,
+ 11396: 0xD56C,
+ 11397: 0xD56E,
+ 11398: 0xD56F,
+ 11399: 0xD570,
+ 11400: 0xD571,
+ 11401: 0xD572,
+ 11402: 0xD573,
+ 11403: 0xD576,
+ 11404: 0xD577,
+ 11405: 0xD579,
+ 11406: 0xD57A,
+ 11407: 0xD57B,
+ 11408: 0xD57D,
+ 11409: 0xD57E,
+ 11410: 0xD57F,
+ 11411: 0xD580,
+ 11412: 0xD581,
+ 11413: 0xD582,
+ 11414: 0xD583,
+ 11415: 0xD586,
+ 11416: 0xD58A,
+ 11417: 0xD58B,
+ 11418: 0xD58C,
+ 11419: 0xD58D,
+ 11420: 0xD58E,
+ 11421: 0xD58F,
+ 11422: 0xD591,
+ 11423: 0xD592,
+ 11424: 0xD593,
+ 11425: 0xD594,
+ 11426: 0xD595,
+ 11427: 0xD596,
+ 11428: 0xD597,
+ 11429: 0xD598,
+ 11430: 0xD599,
+ 11431: 0xD59A,
+ 11432: 0xD59B,
+ 11433: 0xD59C,
+ 11434: 0xD59D,
+ 11435: 0xD59E,
+ 11436: 0xD59F,
+ 11437: 0xD5A0,
+ 11438: 0xD5A1,
+ 11439: 0xD5A2,
+ 11440: 0xD5A3,
+ 11441: 0xD5A4,
+ 11442: 0xD5A6,
+ 11443: 0xD5A7,
+ 11444: 0xD5A8,
+ 11445: 0xD5A9,
+ 11446: 0xD5AA,
+ 11447: 0xD5AB,
+ 11448: 0xD5AC,
+ 11449: 0xD5AD,
+ 11450: 0xD5AE,
+ 11451: 0xD5AF,
+ 11452: 0xD5B0,
+ 11453: 0xD5B1,
+ 11454: 0xD5B2,
+ 11455: 0xD5B3,
+ 11456: 0xD5B4,
+ 11457: 0xD5B5,
+ 11458: 0xD5B6,
+ 11459: 0xD5B7,
+ 11460: 0xD5B8,
+ 11461: 0xD5B9,
+ 11462: 0xD5BA,
+ 11463: 0xD5BB,
+ 11464: 0xD5BC,
+ 11465: 0xD5BD,
+ 11466: 0xD5BE,
+ 11467: 0xD5BF,
+ 11468: 0xD5C0,
+ 11469: 0xD5C1,
+ 11470: 0xD5C2,
+ 11471: 0xD5C3,
+ 11472: 0xD5C4,
+ 11473: 0xD5C5,
+ 11474: 0xD5C6,
+ 11475: 0xD5C7,
+ 11476: 0xC810,
+ 11477: 0xC811,
+ 11478: 0xC813,
+ 11479: 0xC815,
+ 11480: 0xC816,
+ 11481: 0xC81C,
+ 11482: 0xC81D,
+ 11483: 0xC820,
+ 11484: 0xC824,
+ 11485: 0xC82C,
+ 11486: 0xC82D,
+ 11487: 0xC82F,
+ 11488: 0xC831,
+ 11489: 0xC838,
+ 11490: 0xC83C,
+ 11491: 0xC840,
+ 11492: 0xC848,
+ 11493: 0xC849,
+ 11494: 0xC84C,
+ 11495: 0xC84D,
+ 11496: 0xC854,
+ 11497: 0xC870,
+ 11498: 0xC871,
+ 11499: 0xC874,
+ 11500: 0xC878,
+ 11501: 0xC87A,
+ 11502: 0xC880,
+ 11503: 0xC881,
+ 11504: 0xC883,
+ 11505: 0xC885,
+ 11506: 0xC886,
+ 11507: 0xC887,
+ 11508: 0xC88B,
+ 11509: 0xC88C,
+ 11510: 0xC88D,
+ 11511: 0xC894,
+ 11512: 0xC89D,
+ 11513: 0xC89F,
+ 11514: 0xC8A1,
+ 11515: 0xC8A8,
+ 11516: 0xC8BC,
+ 11517: 0xC8BD,
+ 11518: 0xC8C4,
+ 11519: 0xC8C8,
+ 11520: 0xC8CC,
+ 11521: 0xC8D4,
+ 11522: 0xC8D5,
+ 11523: 0xC8D7,
+ 11524: 0xC8D9,
+ 11525: 0xC8E0,
+ 11526: 0xC8E1,
+ 11527: 0xC8E4,
+ 11528: 0xC8F5,
+ 11529: 0xC8FC,
+ 11530: 0xC8FD,
+ 11531: 0xC900,
+ 11532: 0xC904,
+ 11533: 0xC905,
+ 11534: 0xC906,
+ 11535: 0xC90C,
+ 11536: 0xC90D,
+ 11537: 0xC90F,
+ 11538: 0xC911,
+ 11539: 0xC918,
+ 11540: 0xC92C,
+ 11541: 0xC934,
+ 11542: 0xC950,
+ 11543: 0xC951,
+ 11544: 0xC954,
+ 11545: 0xC958,
+ 11546: 0xC960,
+ 11547: 0xC961,
+ 11548: 0xC963,
+ 11549: 0xC96C,
+ 11550: 0xC970,
+ 11551: 0xC974,
+ 11552: 0xC97C,
+ 11553: 0xC988,
+ 11554: 0xC989,
+ 11555: 0xC98C,
+ 11556: 0xC990,
+ 11557: 0xC998,
+ 11558: 0xC999,
+ 11559: 0xC99B,
+ 11560: 0xC99D,
+ 11561: 0xC9C0,
+ 11562: 0xC9C1,
+ 11563: 0xC9C4,
+ 11564: 0xC9C7,
+ 11565: 0xC9C8,
+ 11566: 0xC9CA,
+ 11567: 0xC9D0,
+ 11568: 0xC9D1,
+ 11569: 0xC9D3,
+ 11570: 0xD5CA,
+ 11571: 0xD5CB,
+ 11572: 0xD5CD,
+ 11573: 0xD5CE,
+ 11574: 0xD5CF,
+ 11575: 0xD5D1,
+ 11576: 0xD5D3,
+ 11577: 0xD5D4,
+ 11578: 0xD5D5,
+ 11579: 0xD5D6,
+ 11580: 0xD5D7,
+ 11581: 0xD5DA,
+ 11582: 0xD5DC,
+ 11583: 0xD5DE,
+ 11584: 0xD5DF,
+ 11585: 0xD5E0,
+ 11586: 0xD5E1,
+ 11587: 0xD5E2,
+ 11588: 0xD5E3,
+ 11589: 0xD5E6,
+ 11590: 0xD5E7,
+ 11591: 0xD5E9,
+ 11592: 0xD5EA,
+ 11593: 0xD5EB,
+ 11594: 0xD5ED,
+ 11595: 0xD5EE,
+ 11596: 0xD5EF,
+ 11597: 0xD5F0,
+ 11598: 0xD5F1,
+ 11599: 0xD5F2,
+ 11600: 0xD5F3,
+ 11601: 0xD5F6,
+ 11602: 0xD5F8,
+ 11603: 0xD5FA,
+ 11604: 0xD5FB,
+ 11605: 0xD5FC,
+ 11606: 0xD5FD,
+ 11607: 0xD5FE,
+ 11608: 0xD5FF,
+ 11609: 0xD602,
+ 11610: 0xD603,
+ 11611: 0xD605,
+ 11612: 0xD606,
+ 11613: 0xD607,
+ 11614: 0xD609,
+ 11615: 0xD60A,
+ 11616: 0xD60B,
+ 11617: 0xD60C,
+ 11618: 0xD60D,
+ 11619: 0xD60E,
+ 11620: 0xD60F,
+ 11621: 0xD612,
+ 11622: 0xD616,
+ 11623: 0xD617,
+ 11624: 0xD618,
+ 11625: 0xD619,
+ 11626: 0xD61A,
+ 11627: 0xD61B,
+ 11628: 0xD61D,
+ 11629: 0xD61E,
+ 11630: 0xD61F,
+ 11631: 0xD621,
+ 11632: 0xD622,
+ 11633: 0xD623,
+ 11634: 0xD625,
+ 11635: 0xD626,
+ 11636: 0xD627,
+ 11637: 0xD628,
+ 11638: 0xD629,
+ 11639: 0xD62A,
+ 11640: 0xD62B,
+ 11641: 0xD62C,
+ 11642: 0xD62E,
+ 11643: 0xD62F,
+ 11644: 0xD630,
+ 11645: 0xD631,
+ 11646: 0xD632,
+ 11647: 0xD633,
+ 11648: 0xD634,
+ 11649: 0xD635,
+ 11650: 0xD636,
+ 11651: 0xD637,
+ 11652: 0xD63A,
+ 11653: 0xD63B,
+ 11654: 0xC9D5,
+ 11655: 0xC9D6,
+ 11656: 0xC9D9,
+ 11657: 0xC9DA,
+ 11658: 0xC9DC,
+ 11659: 0xC9DD,
+ 11660: 0xC9E0,
+ 11661: 0xC9E2,
+ 11662: 0xC9E4,
+ 11663: 0xC9E7,
+ 11664: 0xC9EC,
+ 11665: 0xC9ED,
+ 11666: 0xC9EF,
+ 11667: 0xC9F0,
+ 11668: 0xC9F1,
+ 11669: 0xC9F8,
+ 11670: 0xC9F9,
+ 11671: 0xC9FC,
+ 11672: 0xCA00,
+ 11673: 0xCA08,
+ 11674: 0xCA09,
+ 11675: 0xCA0B,
+ 11676: 0xCA0C,
+ 11677: 0xCA0D,
+ 11678: 0xCA14,
+ 11679: 0xCA18,
+ 11680: 0xCA29,
+ 11681: 0xCA4C,
+ 11682: 0xCA4D,
+ 11683: 0xCA50,
+ 11684: 0xCA54,
+ 11685: 0xCA5C,
+ 11686: 0xCA5D,
+ 11687: 0xCA5F,
+ 11688: 0xCA60,
+ 11689: 0xCA61,
+ 11690: 0xCA68,
+ 11691: 0xCA7D,
+ 11692: 0xCA84,
+ 11693: 0xCA98,
+ 11694: 0xCABC,
+ 11695: 0xCABD,
+ 11696: 0xCAC0,
+ 11697: 0xCAC4,
+ 11698: 0xCACC,
+ 11699: 0xCACD,
+ 11700: 0xCACF,
+ 11701: 0xCAD1,
+ 11702: 0xCAD3,
+ 11703: 0xCAD8,
+ 11704: 0xCAD9,
+ 11705: 0xCAE0,
+ 11706: 0xCAEC,
+ 11707: 0xCAF4,
+ 11708: 0xCB08,
+ 11709: 0xCB10,
+ 11710: 0xCB14,
+ 11711: 0xCB18,
+ 11712: 0xCB20,
+ 11713: 0xCB21,
+ 11714: 0xCB41,
+ 11715: 0xCB48,
+ 11716: 0xCB49,
+ 11717: 0xCB4C,
+ 11718: 0xCB50,
+ 11719: 0xCB58,
+ 11720: 0xCB59,
+ 11721: 0xCB5D,
+ 11722: 0xCB64,
+ 11723: 0xCB78,
+ 11724: 0xCB79,
+ 11725: 0xCB9C,
+ 11726: 0xCBB8,
+ 11727: 0xCBD4,
+ 11728: 0xCBE4,
+ 11729: 0xCBE7,
+ 11730: 0xCBE9,
+ 11731: 0xCC0C,
+ 11732: 0xCC0D,
+ 11733: 0xCC10,
+ 11734: 0xCC14,
+ 11735: 0xCC1C,
+ 11736: 0xCC1D,
+ 11737: 0xCC21,
+ 11738: 0xCC22,
+ 11739: 0xCC27,
+ 11740: 0xCC28,
+ 11741: 0xCC29,
+ 11742: 0xCC2C,
+ 11743: 0xCC2E,
+ 11744: 0xCC30,
+ 11745: 0xCC38,
+ 11746: 0xCC39,
+ 11747: 0xCC3B,
+ 11748: 0xD63D,
+ 11749: 0xD63E,
+ 11750: 0xD63F,
+ 11751: 0xD641,
+ 11752: 0xD642,
+ 11753: 0xD643,
+ 11754: 0xD644,
+ 11755: 0xD646,
+ 11756: 0xD647,
+ 11757: 0xD64A,
+ 11758: 0xD64C,
+ 11759: 0xD64E,
+ 11760: 0xD64F,
+ 11761: 0xD650,
+ 11762: 0xD652,
+ 11763: 0xD653,
+ 11764: 0xD656,
+ 11765: 0xD657,
+ 11766: 0xD659,
+ 11767: 0xD65A,
+ 11768: 0xD65B,
+ 11769: 0xD65D,
+ 11770: 0xD65E,
+ 11771: 0xD65F,
+ 11772: 0xD660,
+ 11773: 0xD661,
+ 11774: 0xD662,
+ 11775: 0xD663,
+ 11776: 0xD664,
+ 11777: 0xD665,
+ 11778: 0xD666,
+ 11779: 0xD668,
+ 11780: 0xD66A,
+ 11781: 0xD66B,
+ 11782: 0xD66C,
+ 11783: 0xD66D,
+ 11784: 0xD66E,
+ 11785: 0xD66F,
+ 11786: 0xD672,
+ 11787: 0xD673,
+ 11788: 0xD675,
+ 11789: 0xD676,
+ 11790: 0xD677,
+ 11791: 0xD678,
+ 11792: 0xD679,
+ 11793: 0xD67A,
+ 11794: 0xD67B,
+ 11795: 0xD67C,
+ 11796: 0xD67D,
+ 11797: 0xD67E,
+ 11798: 0xD67F,
+ 11799: 0xD680,
+ 11800: 0xD681,
+ 11801: 0xD682,
+ 11802: 0xD684,
+ 11803: 0xD686,
+ 11804: 0xD687,
+ 11805: 0xD688,
+ 11806: 0xD689,
+ 11807: 0xD68A,
+ 11808: 0xD68B,
+ 11809: 0xD68E,
+ 11810: 0xD68F,
+ 11811: 0xD691,
+ 11812: 0xD692,
+ 11813: 0xD693,
+ 11814: 0xD695,
+ 11815: 0xD696,
+ 11816: 0xD697,
+ 11817: 0xD698,
+ 11818: 0xD699,
+ 11819: 0xD69A,
+ 11820: 0xD69B,
+ 11821: 0xD69C,
+ 11822: 0xD69E,
+ 11823: 0xD6A0,
+ 11824: 0xD6A2,
+ 11825: 0xD6A3,
+ 11826: 0xD6A4,
+ 11827: 0xD6A5,
+ 11828: 0xD6A6,
+ 11829: 0xD6A7,
+ 11830: 0xD6A9,
+ 11831: 0xD6AA,
+ 11832: 0xCC3C,
+ 11833: 0xCC3D,
+ 11834: 0xCC3E,
+ 11835: 0xCC44,
+ 11836: 0xCC45,
+ 11837: 0xCC48,
+ 11838: 0xCC4C,
+ 11839: 0xCC54,
+ 11840: 0xCC55,
+ 11841: 0xCC57,
+ 11842: 0xCC58,
+ 11843: 0xCC59,
+ 11844: 0xCC60,
+ 11845: 0xCC64,
+ 11846: 0xCC66,
+ 11847: 0xCC68,
+ 11848: 0xCC70,
+ 11849: 0xCC75,
+ 11850: 0xCC98,
+ 11851: 0xCC99,
+ 11852: 0xCC9C,
+ 11853: 0xCCA0,
+ 11854: 0xCCA8,
+ 11855: 0xCCA9,
+ 11856: 0xCCAB,
+ 11857: 0xCCAC,
+ 11858: 0xCCAD,
+ 11859: 0xCCB4,
+ 11860: 0xCCB5,
+ 11861: 0xCCB8,
+ 11862: 0xCCBC,
+ 11863: 0xCCC4,
+ 11864: 0xCCC5,
+ 11865: 0xCCC7,
+ 11866: 0xCCC9,
+ 11867: 0xCCD0,
+ 11868: 0xCCD4,
+ 11869: 0xCCE4,
+ 11870: 0xCCEC,
+ 11871: 0xCCF0,
+ 11872: 0xCD01,
+ 11873: 0xCD08,
+ 11874: 0xCD09,
+ 11875: 0xCD0C,
+ 11876: 0xCD10,
+ 11877: 0xCD18,
+ 11878: 0xCD19,
+ 11879: 0xCD1B,
+ 11880: 0xCD1D,
+ 11881: 0xCD24,
+ 11882: 0xCD28,
+ 11883: 0xCD2C,
+ 11884: 0xCD39,
+ 11885: 0xCD5C,
+ 11886: 0xCD60,
+ 11887: 0xCD64,
+ 11888: 0xCD6C,
+ 11889: 0xCD6D,
+ 11890: 0xCD6F,
+ 11891: 0xCD71,
+ 11892: 0xCD78,
+ 11893: 0xCD88,
+ 11894: 0xCD94,
+ 11895: 0xCD95,
+ 11896: 0xCD98,
+ 11897: 0xCD9C,
+ 11898: 0xCDA4,
+ 11899: 0xCDA5,
+ 11900: 0xCDA7,
+ 11901: 0xCDA9,
+ 11902: 0xCDB0,
+ 11903: 0xCDC4,
+ 11904: 0xCDCC,
+ 11905: 0xCDD0,
+ 11906: 0xCDE8,
+ 11907: 0xCDEC,
+ 11908: 0xCDF0,
+ 11909: 0xCDF8,
+ 11910: 0xCDF9,
+ 11911: 0xCDFB,
+ 11912: 0xCDFD,
+ 11913: 0xCE04,
+ 11914: 0xCE08,
+ 11915: 0xCE0C,
+ 11916: 0xCE14,
+ 11917: 0xCE19,
+ 11918: 0xCE20,
+ 11919: 0xCE21,
+ 11920: 0xCE24,
+ 11921: 0xCE28,
+ 11922: 0xCE30,
+ 11923: 0xCE31,
+ 11924: 0xCE33,
+ 11925: 0xCE35,
+ 11926: 0xD6AB,
+ 11927: 0xD6AD,
+ 11928: 0xD6AE,
+ 11929: 0xD6AF,
+ 11930: 0xD6B1,
+ 11931: 0xD6B2,
+ 11932: 0xD6B3,
+ 11933: 0xD6B4,
+ 11934: 0xD6B5,
+ 11935: 0xD6B6,
+ 11936: 0xD6B7,
+ 11937: 0xD6B8,
+ 11938: 0xD6BA,
+ 11939: 0xD6BC,
+ 11940: 0xD6BD,
+ 11941: 0xD6BE,
+ 11942: 0xD6BF,
+ 11943: 0xD6C0,
+ 11944: 0xD6C1,
+ 11945: 0xD6C2,
+ 11946: 0xD6C3,
+ 11947: 0xD6C6,
+ 11948: 0xD6C7,
+ 11949: 0xD6C9,
+ 11950: 0xD6CA,
+ 11951: 0xD6CB,
+ 11952: 0xD6CD,
+ 11953: 0xD6CE,
+ 11954: 0xD6CF,
+ 11955: 0xD6D0,
+ 11956: 0xD6D2,
+ 11957: 0xD6D3,
+ 11958: 0xD6D5,
+ 11959: 0xD6D6,
+ 11960: 0xD6D8,
+ 11961: 0xD6DA,
+ 11962: 0xD6DB,
+ 11963: 0xD6DC,
+ 11964: 0xD6DD,
+ 11965: 0xD6DE,
+ 11966: 0xD6DF,
+ 11967: 0xD6E1,
+ 11968: 0xD6E2,
+ 11969: 0xD6E3,
+ 11970: 0xD6E5,
+ 11971: 0xD6E6,
+ 11972: 0xD6E7,
+ 11973: 0xD6E9,
+ 11974: 0xD6EA,
+ 11975: 0xD6EB,
+ 11976: 0xD6EC,
+ 11977: 0xD6ED,
+ 11978: 0xD6EE,
+ 11979: 0xD6EF,
+ 11980: 0xD6F1,
+ 11981: 0xD6F2,
+ 11982: 0xD6F3,
+ 11983: 0xD6F4,
+ 11984: 0xD6F6,
+ 11985: 0xD6F7,
+ 11986: 0xD6F8,
+ 11987: 0xD6F9,
+ 11988: 0xD6FA,
+ 11989: 0xD6FB,
+ 11990: 0xD6FE,
+ 11991: 0xD6FF,
+ 11992: 0xD701,
+ 11993: 0xD702,
+ 11994: 0xD703,
+ 11995: 0xD705,
+ 11996: 0xD706,
+ 11997: 0xD707,
+ 11998: 0xD708,
+ 11999: 0xD709,
+ 12000: 0xD70A,
+ 12001: 0xD70B,
+ 12002: 0xD70C,
+ 12003: 0xD70D,
+ 12004: 0xD70E,
+ 12005: 0xD70F,
+ 12006: 0xD710,
+ 12007: 0xD712,
+ 12008: 0xD713,
+ 12009: 0xD714,
+ 12010: 0xCE58,
+ 12011: 0xCE59,
+ 12012: 0xCE5C,
+ 12013: 0xCE5F,
+ 12014: 0xCE60,
+ 12015: 0xCE61,
+ 12016: 0xCE68,
+ 12017: 0xCE69,
+ 12018: 0xCE6B,
+ 12019: 0xCE6D,
+ 12020: 0xCE74,
+ 12021: 0xCE75,
+ 12022: 0xCE78,
+ 12023: 0xCE7C,
+ 12024: 0xCE84,
+ 12025: 0xCE85,
+ 12026: 0xCE87,
+ 12027: 0xCE89,
+ 12028: 0xCE90,
+ 12029: 0xCE91,
+ 12030: 0xCE94,
+ 12031: 0xCE98,
+ 12032: 0xCEA0,
+ 12033: 0xCEA1,
+ 12034: 0xCEA3,
+ 12035: 0xCEA4,
+ 12036: 0xCEA5,
+ 12037: 0xCEAC,
+ 12038: 0xCEAD,
+ 12039: 0xCEC1,
+ 12040: 0xCEE4,
+ 12041: 0xCEE5,
+ 12042: 0xCEE8,
+ 12043: 0xCEEB,
+ 12044: 0xCEEC,
+ 12045: 0xCEF4,
+ 12046: 0xCEF5,
+ 12047: 0xCEF7,
+ 12048: 0xCEF8,
+ 12049: 0xCEF9,
+ 12050: 0xCF00,
+ 12051: 0xCF01,
+ 12052: 0xCF04,
+ 12053: 0xCF08,
+ 12054: 0xCF10,
+ 12055: 0xCF11,
+ 12056: 0xCF13,
+ 12057: 0xCF15,
+ 12058: 0xCF1C,
+ 12059: 0xCF20,
+ 12060: 0xCF24,
+ 12061: 0xCF2C,
+ 12062: 0xCF2D,
+ 12063: 0xCF2F,
+ 12064: 0xCF30,
+ 12065: 0xCF31,
+ 12066: 0xCF38,
+ 12067: 0xCF54,
+ 12068: 0xCF55,
+ 12069: 0xCF58,
+ 12070: 0xCF5C,
+ 12071: 0xCF64,
+ 12072: 0xCF65,
+ 12073: 0xCF67,
+ 12074: 0xCF69,
+ 12075: 0xCF70,
+ 12076: 0xCF71,
+ 12077: 0xCF74,
+ 12078: 0xCF78,
+ 12079: 0xCF80,
+ 12080: 0xCF85,
+ 12081: 0xCF8C,
+ 12082: 0xCFA1,
+ 12083: 0xCFA8,
+ 12084: 0xCFB0,
+ 12085: 0xCFC4,
+ 12086: 0xCFE0,
+ 12087: 0xCFE1,
+ 12088: 0xCFE4,
+ 12089: 0xCFE8,
+ 12090: 0xCFF0,
+ 12091: 0xCFF1,
+ 12092: 0xCFF3,
+ 12093: 0xCFF5,
+ 12094: 0xCFFC,
+ 12095: 0xD000,
+ 12096: 0xD004,
+ 12097: 0xD011,
+ 12098: 0xD018,
+ 12099: 0xD02D,
+ 12100: 0xD034,
+ 12101: 0xD035,
+ 12102: 0xD038,
+ 12103: 0xD03C,
+ 12104: 0xD715,
+ 12105: 0xD716,
+ 12106: 0xD717,
+ 12107: 0xD71A,
+ 12108: 0xD71B,
+ 12109: 0xD71D,
+ 12110: 0xD71E,
+ 12111: 0xD71F,
+ 12112: 0xD721,
+ 12113: 0xD722,
+ 12114: 0xD723,
+ 12115: 0xD724,
+ 12116: 0xD725,
+ 12117: 0xD726,
+ 12118: 0xD727,
+ 12119: 0xD72A,
+ 12120: 0xD72C,
+ 12121: 0xD72E,
+ 12122: 0xD72F,
+ 12123: 0xD730,
+ 12124: 0xD731,
+ 12125: 0xD732,
+ 12126: 0xD733,
+ 12127: 0xD736,
+ 12128: 0xD737,
+ 12129: 0xD739,
+ 12130: 0xD73A,
+ 12131: 0xD73B,
+ 12132: 0xD73D,
+ 12133: 0xD73E,
+ 12134: 0xD73F,
+ 12135: 0xD740,
+ 12136: 0xD741,
+ 12137: 0xD742,
+ 12138: 0xD743,
+ 12139: 0xD745,
+ 12140: 0xD746,
+ 12141: 0xD748,
+ 12142: 0xD74A,
+ 12143: 0xD74B,
+ 12144: 0xD74C,
+ 12145: 0xD74D,
+ 12146: 0xD74E,
+ 12147: 0xD74F,
+ 12148: 0xD752,
+ 12149: 0xD753,
+ 12150: 0xD755,
+ 12151: 0xD75A,
+ 12152: 0xD75B,
+ 12153: 0xD75C,
+ 12154: 0xD75D,
+ 12155: 0xD75E,
+ 12156: 0xD75F,
+ 12157: 0xD762,
+ 12158: 0xD764,
+ 12159: 0xD766,
+ 12160: 0xD767,
+ 12161: 0xD768,
+ 12162: 0xD76A,
+ 12163: 0xD76B,
+ 12164: 0xD76D,
+ 12165: 0xD76E,
+ 12166: 0xD76F,
+ 12167: 0xD771,
+ 12168: 0xD772,
+ 12169: 0xD773,
+ 12170: 0xD775,
+ 12171: 0xD776,
+ 12172: 0xD777,
+ 12173: 0xD778,
+ 12174: 0xD779,
+ 12175: 0xD77A,
+ 12176: 0xD77B,
+ 12177: 0xD77E,
+ 12178: 0xD77F,
+ 12179: 0xD780,
+ 12180: 0xD782,
+ 12181: 0xD783,
+ 12182: 0xD784,
+ 12183: 0xD785,
+ 12184: 0xD786,
+ 12185: 0xD787,
+ 12186: 0xD78A,
+ 12187: 0xD78B,
+ 12188: 0xD044,
+ 12189: 0xD045,
+ 12190: 0xD047,
+ 12191: 0xD049,
+ 12192: 0xD050,
+ 12193: 0xD054,
+ 12194: 0xD058,
+ 12195: 0xD060,
+ 12196: 0xD06C,
+ 12197: 0xD06D,
+ 12198: 0xD070,
+ 12199: 0xD074,
+ 12200: 0xD07C,
+ 12201: 0xD07D,
+ 12202: 0xD081,
+ 12203: 0xD0A4,
+ 12204: 0xD0A5,
+ 12205: 0xD0A8,
+ 12206: 0xD0AC,
+ 12207: 0xD0B4,
+ 12208: 0xD0B5,
+ 12209: 0xD0B7,
+ 12210: 0xD0B9,
+ 12211: 0xD0C0,
+ 12212: 0xD0C1,
+ 12213: 0xD0C4,
+ 12214: 0xD0C8,
+ 12215: 0xD0C9,
+ 12216: 0xD0D0,
+ 12217: 0xD0D1,
+ 12218: 0xD0D3,
+ 12219: 0xD0D4,
+ 12220: 0xD0D5,
+ 12221: 0xD0DC,
+ 12222: 0xD0DD,
+ 12223: 0xD0E0,
+ 12224: 0xD0E4,
+ 12225: 0xD0EC,
+ 12226: 0xD0ED,
+ 12227: 0xD0EF,
+ 12228: 0xD0F0,
+ 12229: 0xD0F1,
+ 12230: 0xD0F8,
+ 12231: 0xD10D,
+ 12232: 0xD130,
+ 12233: 0xD131,
+ 12234: 0xD134,
+ 12235: 0xD138,
+ 12236: 0xD13A,
+ 12237: 0xD140,
+ 12238: 0xD141,
+ 12239: 0xD143,
+ 12240: 0xD144,
+ 12241: 0xD145,
+ 12242: 0xD14C,
+ 12243: 0xD14D,
+ 12244: 0xD150,
+ 12245: 0xD154,
+ 12246: 0xD15C,
+ 12247: 0xD15D,
+ 12248: 0xD15F,
+ 12249: 0xD161,
+ 12250: 0xD168,
+ 12251: 0xD16C,
+ 12252: 0xD17C,
+ 12253: 0xD184,
+ 12254: 0xD188,
+ 12255: 0xD1A0,
+ 12256: 0xD1A1,
+ 12257: 0xD1A4,
+ 12258: 0xD1A8,
+ 12259: 0xD1B0,
+ 12260: 0xD1B1,
+ 12261: 0xD1B3,
+ 12262: 0xD1B5,
+ 12263: 0xD1BA,
+ 12264: 0xD1BC,
+ 12265: 0xD1C0,
+ 12266: 0xD1D8,
+ 12267: 0xD1F4,
+ 12268: 0xD1F8,
+ 12269: 0xD207,
+ 12270: 0xD209,
+ 12271: 0xD210,
+ 12272: 0xD22C,
+ 12273: 0xD22D,
+ 12274: 0xD230,
+ 12275: 0xD234,
+ 12276: 0xD23C,
+ 12277: 0xD23D,
+ 12278: 0xD23F,
+ 12279: 0xD241,
+ 12280: 0xD248,
+ 12281: 0xD25C,
+ 12282: 0xD78D,
+ 12283: 0xD78E,
+ 12284: 0xD78F,
+ 12285: 0xD791,
+ 12286: 0xD792,
+ 12287: 0xD793,
+ 12288: 0xD794,
+ 12289: 0xD795,
+ 12290: 0xD796,
+ 12291: 0xD797,
+ 12292: 0xD79A,
+ 12293: 0xD79C,
+ 12294: 0xD79E,
+ 12295: 0xD79F,
+ 12296: 0xD7A0,
+ 12297: 0xD7A1,
+ 12298: 0xD7A2,
+ 12299: 0xD7A3,
+ 12366: 0xD264,
+ 12367: 0xD280,
+ 12368: 0xD281,
+ 12369: 0xD284,
+ 12370: 0xD288,
+ 12371: 0xD290,
+ 12372: 0xD291,
+ 12373: 0xD295,
+ 12374: 0xD29C,
+ 12375: 0xD2A0,
+ 12376: 0xD2A4,
+ 12377: 0xD2AC,
+ 12378: 0xD2B1,
+ 12379: 0xD2B8,
+ 12380: 0xD2B9,
+ 12381: 0xD2BC,
+ 12382: 0xD2BF,
+ 12383: 0xD2C0,
+ 12384: 0xD2C2,
+ 12385: 0xD2C8,
+ 12386: 0xD2C9,
+ 12387: 0xD2CB,
+ 12388: 0xD2D4,
+ 12389: 0xD2D8,
+ 12390: 0xD2DC,
+ 12391: 0xD2E4,
+ 12392: 0xD2E5,
+ 12393: 0xD2F0,
+ 12394: 0xD2F1,
+ 12395: 0xD2F4,
+ 12396: 0xD2F8,
+ 12397: 0xD300,
+ 12398: 0xD301,
+ 12399: 0xD303,
+ 12400: 0xD305,
+ 12401: 0xD30C,
+ 12402: 0xD30D,
+ 12403: 0xD30E,
+ 12404: 0xD310,
+ 12405: 0xD314,
+ 12406: 0xD316,
+ 12407: 0xD31C,
+ 12408: 0xD31D,
+ 12409: 0xD31F,
+ 12410: 0xD320,
+ 12411: 0xD321,
+ 12412: 0xD325,
+ 12413: 0xD328,
+ 12414: 0xD329,
+ 12415: 0xD32C,
+ 12416: 0xD330,
+ 12417: 0xD338,
+ 12418: 0xD339,
+ 12419: 0xD33B,
+ 12420: 0xD33C,
+ 12421: 0xD33D,
+ 12422: 0xD344,
+ 12423: 0xD345,
+ 12424: 0xD37C,
+ 12425: 0xD37D,
+ 12426: 0xD380,
+ 12427: 0xD384,
+ 12428: 0xD38C,
+ 12429: 0xD38D,
+ 12430: 0xD38F,
+ 12431: 0xD390,
+ 12432: 0xD391,
+ 12433: 0xD398,
+ 12434: 0xD399,
+ 12435: 0xD39C,
+ 12436: 0xD3A0,
+ 12437: 0xD3A8,
+ 12438: 0xD3A9,
+ 12439: 0xD3AB,
+ 12440: 0xD3AD,
+ 12441: 0xD3B4,
+ 12442: 0xD3B8,
+ 12443: 0xD3BC,
+ 12444: 0xD3C4,
+ 12445: 0xD3C5,
+ 12446: 0xD3C8,
+ 12447: 0xD3C9,
+ 12448: 0xD3D0,
+ 12449: 0xD3D8,
+ 12450: 0xD3E1,
+ 12451: 0xD3E3,
+ 12452: 0xD3EC,
+ 12453: 0xD3ED,
+ 12454: 0xD3F0,
+ 12455: 0xD3F4,
+ 12456: 0xD3FC,
+ 12457: 0xD3FD,
+ 12458: 0xD3FF,
+ 12459: 0xD401,
+ 12460: 0xD408,
+ 12461: 0xD41D,
+ 12462: 0xD440,
+ 12463: 0xD444,
+ 12464: 0xD45C,
+ 12465: 0xD460,
+ 12466: 0xD464,
+ 12467: 0xD46D,
+ 12468: 0xD46F,
+ 12469: 0xD478,
+ 12470: 0xD479,
+ 12471: 0xD47C,
+ 12472: 0xD47F,
+ 12473: 0xD480,
+ 12474: 0xD482,
+ 12475: 0xD488,
+ 12476: 0xD489,
+ 12477: 0xD48B,
+ 12478: 0xD48D,
+ 12479: 0xD494,
+ 12480: 0xD4A9,
+ 12481: 0xD4CC,
+ 12482: 0xD4D0,
+ 12483: 0xD4D4,
+ 12484: 0xD4DC,
+ 12485: 0xD4DF,
+ 12486: 0xD4E8,
+ 12487: 0xD4EC,
+ 12488: 0xD4F0,
+ 12489: 0xD4F8,
+ 12490: 0xD4FB,
+ 12491: 0xD4FD,
+ 12492: 0xD504,
+ 12493: 0xD508,
+ 12494: 0xD50C,
+ 12495: 0xD514,
+ 12496: 0xD515,
+ 12497: 0xD517,
+ 12498: 0xD53C,
+ 12499: 0xD53D,
+ 12500: 0xD540,
+ 12501: 0xD544,
+ 12502: 0xD54C,
+ 12503: 0xD54D,
+ 12504: 0xD54F,
+ 12505: 0xD551,
+ 12506: 0xD558,
+ 12507: 0xD559,
+ 12508: 0xD55C,
+ 12509: 0xD560,
+ 12510: 0xD565,
+ 12511: 0xD568,
+ 12512: 0xD569,
+ 12513: 0xD56B,
+ 12514: 0xD56D,
+ 12515: 0xD574,
+ 12516: 0xD575,
+ 12517: 0xD578,
+ 12518: 0xD57C,
+ 12519: 0xD584,
+ 12520: 0xD585,
+ 12521: 0xD587,
+ 12522: 0xD588,
+ 12523: 0xD589,
+ 12524: 0xD590,
+ 12525: 0xD5A5,
+ 12526: 0xD5C8,
+ 12527: 0xD5C9,
+ 12528: 0xD5CC,
+ 12529: 0xD5D0,
+ 12530: 0xD5D2,
+ 12531: 0xD5D8,
+ 12532: 0xD5D9,
+ 12533: 0xD5DB,
+ 12534: 0xD5DD,
+ 12535: 0xD5E4,
+ 12536: 0xD5E5,
+ 12537: 0xD5E8,
+ 12538: 0xD5EC,
+ 12539: 0xD5F4,
+ 12540: 0xD5F5,
+ 12541: 0xD5F7,
+ 12542: 0xD5F9,
+ 12543: 0xD600,
+ 12544: 0xD601,
+ 12545: 0xD604,
+ 12546: 0xD608,
+ 12547: 0xD610,
+ 12548: 0xD611,
+ 12549: 0xD613,
+ 12550: 0xD614,
+ 12551: 0xD615,
+ 12552: 0xD61C,
+ 12553: 0xD620,
+ 12554: 0xD624,
+ 12555: 0xD62D,
+ 12556: 0xD638,
+ 12557: 0xD639,
+ 12558: 0xD63C,
+ 12559: 0xD640,
+ 12560: 0xD645,
+ 12561: 0xD648,
+ 12562: 0xD649,
+ 12563: 0xD64B,
+ 12564: 0xD64D,
+ 12565: 0xD651,
+ 12566: 0xD654,
+ 12567: 0xD655,
+ 12568: 0xD658,
+ 12569: 0xD65C,
+ 12570: 0xD667,
+ 12571: 0xD669,
+ 12572: 0xD670,
+ 12573: 0xD671,
+ 12574: 0xD674,
+ 12575: 0xD683,
+ 12576: 0xD685,
+ 12577: 0xD68C,
+ 12578: 0xD68D,
+ 12579: 0xD690,
+ 12580: 0xD694,
+ 12581: 0xD69D,
+ 12582: 0xD69F,
+ 12583: 0xD6A1,
+ 12584: 0xD6A8,
+ 12585: 0xD6AC,
+ 12586: 0xD6B0,
+ 12587: 0xD6B9,
+ 12588: 0xD6BB,
+ 12589: 0xD6C4,
+ 12590: 0xD6C5,
+ 12591: 0xD6C8,
+ 12592: 0xD6CC,
+ 12593: 0xD6D1,
+ 12594: 0xD6D4,
+ 12595: 0xD6D7,
+ 12596: 0xD6D9,
+ 12597: 0xD6E0,
+ 12598: 0xD6E4,
+ 12599: 0xD6E8,
+ 12600: 0xD6F0,
+ 12601: 0xD6F5,
+ 12602: 0xD6FC,
+ 12603: 0xD6FD,
+ 12604: 0xD700,
+ 12605: 0xD704,
+ 12606: 0xD711,
+ 12607: 0xD718,
+ 12608: 0xD719,
+ 12609: 0xD71C,
+ 12610: 0xD720,
+ 12611: 0xD728,
+ 12612: 0xD729,
+ 12613: 0xD72B,
+ 12614: 0xD72D,
+ 12615: 0xD734,
+ 12616: 0xD735,
+ 12617: 0xD738,
+ 12618: 0xD73C,
+ 12619: 0xD744,
+ 12620: 0xD747,
+ 12621: 0xD749,
+ 12622: 0xD750,
+ 12623: 0xD751,
+ 12624: 0xD754,
+ 12625: 0xD756,
+ 12626: 0xD757,
+ 12627: 0xD758,
+ 12628: 0xD759,
+ 12629: 0xD760,
+ 12630: 0xD761,
+ 12631: 0xD763,
+ 12632: 0xD765,
+ 12633: 0xD769,
+ 12634: 0xD76C,
+ 12635: 0xD770,
+ 12636: 0xD774,
+ 12637: 0xD77C,
+ 12638: 0xD77D,
+ 12639: 0xD781,
+ 12640: 0xD788,
+ 12641: 0xD789,
+ 12642: 0xD78C,
+ 12643: 0xD790,
+ 12644: 0xD798,
+ 12645: 0xD799,
+ 12646: 0xD79B,
+ 12647: 0xD79D,
+ 12742: 0x4F3D,
+ 12743: 0x4F73,
+ 12744: 0x5047,
+ 12745: 0x50F9,
+ 12746: 0x52A0,
+ 12747: 0x53EF,
+ 12748: 0x5475,
+ 12749: 0x54E5,
+ 12750: 0x5609,
+ 12751: 0x5AC1,
+ 12752: 0x5BB6,
+ 12753: 0x6687,
+ 12754: 0x67B6,
+ 12755: 0x67B7,
+ 12756: 0x67EF,
+ 12757: 0x6B4C,
+ 12758: 0x73C2,
+ 12759: 0x75C2,
+ 12760: 0x7A3C,
+ 12761: 0x82DB,
+ 12762: 0x8304,
+ 12763: 0x8857,
+ 12764: 0x8888,
+ 12765: 0x8A36,
+ 12766: 0x8CC8,
+ 12767: 0x8DCF,
+ 12768: 0x8EFB,
+ 12769: 0x8FE6,
+ 12770: 0x99D5,
+ 12771: 0x523B,
+ 12772: 0x5374,
+ 12773: 0x5404,
+ 12774: 0x606A,
+ 12775: 0x6164,
+ 12776: 0x6BBC,
+ 12777: 0x73CF,
+ 12778: 0x811A,
+ 12779: 0x89BA,
+ 12780: 0x89D2,
+ 12781: 0x95A3,
+ 12782: 0x4F83,
+ 12783: 0x520A,
+ 12784: 0x58BE,
+ 12785: 0x5978,
+ 12786: 0x59E6,
+ 12787: 0x5E72,
+ 12788: 0x5E79,
+ 12789: 0x61C7,
+ 12790: 0x63C0,
+ 12791: 0x6746,
+ 12792: 0x67EC,
+ 12793: 0x687F,
+ 12794: 0x6F97,
+ 12795: 0x764E,
+ 12796: 0x770B,
+ 12797: 0x78F5,
+ 12798: 0x7A08,
+ 12799: 0x7AFF,
+ 12800: 0x7C21,
+ 12801: 0x809D,
+ 12802: 0x826E,
+ 12803: 0x8271,
+ 12804: 0x8AEB,
+ 12805: 0x9593,
+ 12806: 0x4E6B,
+ 12807: 0x559D,
+ 12808: 0x66F7,
+ 12809: 0x6E34,
+ 12810: 0x78A3,
+ 12811: 0x7AED,
+ 12812: 0x845B,
+ 12813: 0x8910,
+ 12814: 0x874E,
+ 12815: 0x97A8,
+ 12816: 0x52D8,
+ 12817: 0x574E,
+ 12818: 0x582A,
+ 12819: 0x5D4C,
+ 12820: 0x611F,
+ 12821: 0x61BE,
+ 12822: 0x6221,
+ 12823: 0x6562,
+ 12824: 0x67D1,
+ 12825: 0x6A44,
+ 12826: 0x6E1B,
+ 12827: 0x7518,
+ 12828: 0x75B3,
+ 12829: 0x76E3,
+ 12830: 0x77B0,
+ 12831: 0x7D3A,
+ 12832: 0x90AF,
+ 12833: 0x9451,
+ 12834: 0x9452,
+ 12835: 0x9F95,
+ 12836: 0x5323,
+ 12837: 0x5CAC,
+ 12838: 0x7532,
+ 12839: 0x80DB,
+ 12840: 0x9240,
+ 12841: 0x9598,
+ 12842: 0x525B,
+ 12843: 0x5808,
+ 12844: 0x59DC,
+ 12845: 0x5CA1,
+ 12846: 0x5D17,
+ 12847: 0x5EB7,
+ 12848: 0x5F3A,
+ 12849: 0x5F4A,
+ 12850: 0x6177,
+ 12851: 0x6C5F,
+ 12852: 0x757A,
+ 12853: 0x7586,
+ 12854: 0x7CE0,
+ 12855: 0x7D73,
+ 12856: 0x7DB1,
+ 12857: 0x7F8C,
+ 12858: 0x8154,
+ 12859: 0x8221,
+ 12860: 0x8591,
+ 12861: 0x8941,
+ 12862: 0x8B1B,
+ 12863: 0x92FC,
+ 12864: 0x964D,
+ 12865: 0x9C47,
+ 12866: 0x4ECB,
+ 12867: 0x4EF7,
+ 12868: 0x500B,
+ 12869: 0x51F1,
+ 12870: 0x584F,
+ 12871: 0x6137,
+ 12872: 0x613E,
+ 12873: 0x6168,
+ 12874: 0x6539,
+ 12875: 0x69EA,
+ 12876: 0x6F11,
+ 12877: 0x75A5,
+ 12878: 0x7686,
+ 12879: 0x76D6,
+ 12880: 0x7B87,
+ 12881: 0x82A5,
+ 12882: 0x84CB,
+ 12883: 0xF900,
+ 12884: 0x93A7,
+ 12885: 0x958B,
+ 12886: 0x5580,
+ 12887: 0x5BA2,
+ 12888: 0x5751,
+ 12889: 0xF901,
+ 12890: 0x7CB3,
+ 12891: 0x7FB9,
+ 12892: 0x91B5,
+ 12893: 0x5028,
+ 12894: 0x53BB,
+ 12895: 0x5C45,
+ 12896: 0x5DE8,
+ 12897: 0x62D2,
+ 12898: 0x636E,
+ 12899: 0x64DA,
+ 12900: 0x64E7,
+ 12901: 0x6E20,
+ 12902: 0x70AC,
+ 12903: 0x795B,
+ 12904: 0x8DDD,
+ 12905: 0x8E1E,
+ 12906: 0xF902,
+ 12907: 0x907D,
+ 12908: 0x9245,
+ 12909: 0x92F8,
+ 12910: 0x4E7E,
+ 12911: 0x4EF6,
+ 12912: 0x5065,
+ 12913: 0x5DFE,
+ 12914: 0x5EFA,
+ 12915: 0x6106,
+ 12916: 0x6957,
+ 12917: 0x8171,
+ 12918: 0x8654,
+ 12919: 0x8E47,
+ 12920: 0x9375,
+ 12921: 0x9A2B,
+ 12922: 0x4E5E,
+ 12923: 0x5091,
+ 12924: 0x6770,
+ 12925: 0x6840,
+ 12926: 0x5109,
+ 12927: 0x528D,
+ 12928: 0x5292,
+ 12929: 0x6AA2,
+ 12930: 0x77BC,
+ 12931: 0x9210,
+ 12932: 0x9ED4,
+ 12933: 0x52AB,
+ 12934: 0x602F,
+ 12935: 0x8FF2,
+ 12936: 0x5048,
+ 12937: 0x61A9,
+ 12938: 0x63ED,
+ 12939: 0x64CA,
+ 12940: 0x683C,
+ 12941: 0x6A84,
+ 12942: 0x6FC0,
+ 12943: 0x8188,
+ 12944: 0x89A1,
+ 12945: 0x9694,
+ 12946: 0x5805,
+ 12947: 0x727D,
+ 12948: 0x72AC,
+ 12949: 0x7504,
+ 12950: 0x7D79,
+ 12951: 0x7E6D,
+ 12952: 0x80A9,
+ 12953: 0x898B,
+ 12954: 0x8B74,
+ 12955: 0x9063,
+ 12956: 0x9D51,
+ 12957: 0x6289,
+ 12958: 0x6C7A,
+ 12959: 0x6F54,
+ 12960: 0x7D50,
+ 12961: 0x7F3A,
+ 12962: 0x8A23,
+ 12963: 0x517C,
+ 12964: 0x614A,
+ 12965: 0x7B9D,
+ 12966: 0x8B19,
+ 12967: 0x9257,
+ 12968: 0x938C,
+ 12969: 0x4EAC,
+ 12970: 0x4FD3,
+ 12971: 0x501E,
+ 12972: 0x50BE,
+ 12973: 0x5106,
+ 12974: 0x52C1,
+ 12975: 0x52CD,
+ 12976: 0x537F,
+ 12977: 0x5770,
+ 12978: 0x5883,
+ 12979: 0x5E9A,
+ 12980: 0x5F91,
+ 12981: 0x6176,
+ 12982: 0x61AC,
+ 12983: 0x64CE,
+ 12984: 0x656C,
+ 12985: 0x666F,
+ 12986: 0x66BB,
+ 12987: 0x66F4,
+ 12988: 0x6897,
+ 12989: 0x6D87,
+ 12990: 0x7085,
+ 12991: 0x70F1,
+ 12992: 0x749F,
+ 12993: 0x74A5,
+ 12994: 0x74CA,
+ 12995: 0x75D9,
+ 12996: 0x786C,
+ 12997: 0x78EC,
+ 12998: 0x7ADF,
+ 12999: 0x7AF6,
+ 13000: 0x7D45,
+ 13001: 0x7D93,
+ 13002: 0x8015,
+ 13003: 0x803F,
+ 13004: 0x811B,
+ 13005: 0x8396,
+ 13006: 0x8B66,
+ 13007: 0x8F15,
+ 13008: 0x9015,
+ 13009: 0x93E1,
+ 13010: 0x9803,
+ 13011: 0x9838,
+ 13012: 0x9A5A,
+ 13013: 0x9BE8,
+ 13014: 0x4FC2,
+ 13015: 0x5553,
+ 13016: 0x583A,
+ 13017: 0x5951,
+ 13018: 0x5B63,
+ 13019: 0x5C46,
+ 13020: 0x60B8,
+ 13021: 0x6212,
+ 13022: 0x6842,
+ 13023: 0x68B0,
+ 13024: 0x68E8,
+ 13025: 0x6EAA,
+ 13026: 0x754C,
+ 13027: 0x7678,
+ 13028: 0x78CE,
+ 13029: 0x7A3D,
+ 13030: 0x7CFB,
+ 13031: 0x7E6B,
+ 13032: 0x7E7C,
+ 13033: 0x8A08,
+ 13034: 0x8AA1,
+ 13035: 0x8C3F,
+ 13036: 0x968E,
+ 13037: 0x9DC4,
+ 13038: 0x53E4,
+ 13039: 0x53E9,
+ 13040: 0x544A,
+ 13041: 0x5471,
+ 13042: 0x56FA,
+ 13043: 0x59D1,
+ 13044: 0x5B64,
+ 13045: 0x5C3B,
+ 13046: 0x5EAB,
+ 13047: 0x62F7,
+ 13048: 0x6537,
+ 13049: 0x6545,
+ 13050: 0x6572,
+ 13051: 0x66A0,
+ 13052: 0x67AF,
+ 13053: 0x69C1,
+ 13054: 0x6CBD,
+ 13055: 0x75FC,
+ 13056: 0x7690,
+ 13057: 0x777E,
+ 13058: 0x7A3F,
+ 13059: 0x7F94,
+ 13060: 0x8003,
+ 13061: 0x80A1,
+ 13062: 0x818F,
+ 13063: 0x82E6,
+ 13064: 0x82FD,
+ 13065: 0x83F0,
+ 13066: 0x85C1,
+ 13067: 0x8831,
+ 13068: 0x88B4,
+ 13069: 0x8AA5,
+ 13070: 0xF903,
+ 13071: 0x8F9C,
+ 13072: 0x932E,
+ 13073: 0x96C7,
+ 13074: 0x9867,
+ 13075: 0x9AD8,
+ 13076: 0x9F13,
+ 13077: 0x54ED,
+ 13078: 0x659B,
+ 13079: 0x66F2,
+ 13080: 0x688F,
+ 13081: 0x7A40,
+ 13082: 0x8C37,
+ 13083: 0x9D60,
+ 13084: 0x56F0,
+ 13085: 0x5764,
+ 13086: 0x5D11,
+ 13087: 0x6606,
+ 13088: 0x68B1,
+ 13089: 0x68CD,
+ 13090: 0x6EFE,
+ 13091: 0x7428,
+ 13092: 0x889E,
+ 13093: 0x9BE4,
+ 13094: 0x6C68,
+ 13095: 0xF904,
+ 13096: 0x9AA8,
+ 13097: 0x4F9B,
+ 13098: 0x516C,
+ 13099: 0x5171,
+ 13100: 0x529F,
+ 13101: 0x5B54,
+ 13102: 0x5DE5,
+ 13103: 0x6050,
+ 13104: 0x606D,
+ 13105: 0x62F1,
+ 13106: 0x63A7,
+ 13107: 0x653B,
+ 13108: 0x73D9,
+ 13109: 0x7A7A,
+ 13110: 0x86A3,
+ 13111: 0x8CA2,
+ 13112: 0x978F,
+ 13113: 0x4E32,
+ 13114: 0x5BE1,
+ 13115: 0x6208,
+ 13116: 0x679C,
+ 13117: 0x74DC,
+ 13118: 0x79D1,
+ 13119: 0x83D3,
+ 13120: 0x8A87,
+ 13121: 0x8AB2,
+ 13122: 0x8DE8,
+ 13123: 0x904E,
+ 13124: 0x934B,
+ 13125: 0x9846,
+ 13126: 0x5ED3,
+ 13127: 0x69E8,
+ 13128: 0x85FF,
+ 13129: 0x90ED,
+ 13130: 0xF905,
+ 13131: 0x51A0,
+ 13132: 0x5B98,
+ 13133: 0x5BEC,
+ 13134: 0x6163,
+ 13135: 0x68FA,
+ 13136: 0x6B3E,
+ 13137: 0x704C,
+ 13138: 0x742F,
+ 13139: 0x74D8,
+ 13140: 0x7BA1,
+ 13141: 0x7F50,
+ 13142: 0x83C5,
+ 13143: 0x89C0,
+ 13144: 0x8CAB,
+ 13145: 0x95DC,
+ 13146: 0x9928,
+ 13147: 0x522E,
+ 13148: 0x605D,
+ 13149: 0x62EC,
+ 13150: 0x9002,
+ 13151: 0x4F8A,
+ 13152: 0x5149,
+ 13153: 0x5321,
+ 13154: 0x58D9,
+ 13155: 0x5EE3,
+ 13156: 0x66E0,
+ 13157: 0x6D38,
+ 13158: 0x709A,
+ 13159: 0x72C2,
+ 13160: 0x73D6,
+ 13161: 0x7B50,
+ 13162: 0x80F1,
+ 13163: 0x945B,
+ 13164: 0x5366,
+ 13165: 0x639B,
+ 13166: 0x7F6B,
+ 13167: 0x4E56,
+ 13168: 0x5080,
+ 13169: 0x584A,
+ 13170: 0x58DE,
+ 13171: 0x602A,
+ 13172: 0x6127,
+ 13173: 0x62D0,
+ 13174: 0x69D0,
+ 13175: 0x9B41,
+ 13176: 0x5B8F,
+ 13177: 0x7D18,
+ 13178: 0x80B1,
+ 13179: 0x8F5F,
+ 13180: 0x4EA4,
+ 13181: 0x50D1,
+ 13182: 0x54AC,
+ 13183: 0x55AC,
+ 13184: 0x5B0C,
+ 13185: 0x5DA0,
+ 13186: 0x5DE7,
+ 13187: 0x652A,
+ 13188: 0x654E,
+ 13189: 0x6821,
+ 13190: 0x6A4B,
+ 13191: 0x72E1,
+ 13192: 0x768E,
+ 13193: 0x77EF,
+ 13194: 0x7D5E,
+ 13195: 0x7FF9,
+ 13196: 0x81A0,
+ 13197: 0x854E,
+ 13198: 0x86DF,
+ 13199: 0x8F03,
+ 13200: 0x8F4E,
+ 13201: 0x90CA,
+ 13202: 0x9903,
+ 13203: 0x9A55,
+ 13204: 0x9BAB,
+ 13205: 0x4E18,
+ 13206: 0x4E45,
+ 13207: 0x4E5D,
+ 13208: 0x4EC7,
+ 13209: 0x4FF1,
+ 13210: 0x5177,
+ 13211: 0x52FE,
+ 13212: 0x5340,
+ 13213: 0x53E3,
+ 13214: 0x53E5,
+ 13215: 0x548E,
+ 13216: 0x5614,
+ 13217: 0x5775,
+ 13218: 0x57A2,
+ 13219: 0x5BC7,
+ 13220: 0x5D87,
+ 13221: 0x5ED0,
+ 13222: 0x61FC,
+ 13223: 0x62D8,
+ 13224: 0x6551,
+ 13225: 0x67B8,
+ 13226: 0x67E9,
+ 13227: 0x69CB,
+ 13228: 0x6B50,
+ 13229: 0x6BC6,
+ 13230: 0x6BEC,
+ 13231: 0x6C42,
+ 13232: 0x6E9D,
+ 13233: 0x7078,
+ 13234: 0x72D7,
+ 13235: 0x7396,
+ 13236: 0x7403,
+ 13237: 0x77BF,
+ 13238: 0x77E9,
+ 13239: 0x7A76,
+ 13240: 0x7D7F,
+ 13241: 0x8009,
+ 13242: 0x81FC,
+ 13243: 0x8205,
+ 13244: 0x820A,
+ 13245: 0x82DF,
+ 13246: 0x8862,
+ 13247: 0x8B33,
+ 13248: 0x8CFC,
+ 13249: 0x8EC0,
+ 13250: 0x9011,
+ 13251: 0x90B1,
+ 13252: 0x9264,
+ 13253: 0x92B6,
+ 13254: 0x99D2,
+ 13255: 0x9A45,
+ 13256: 0x9CE9,
+ 13257: 0x9DD7,
+ 13258: 0x9F9C,
+ 13259: 0x570B,
+ 13260: 0x5C40,
+ 13261: 0x83CA,
+ 13262: 0x97A0,
+ 13263: 0x97AB,
+ 13264: 0x9EB4,
+ 13265: 0x541B,
+ 13266: 0x7A98,
+ 13267: 0x7FA4,
+ 13268: 0x88D9,
+ 13269: 0x8ECD,
+ 13270: 0x90E1,
+ 13271: 0x5800,
+ 13272: 0x5C48,
+ 13273: 0x6398,
+ 13274: 0x7A9F,
+ 13275: 0x5BAE,
+ 13276: 0x5F13,
+ 13277: 0x7A79,
+ 13278: 0x7AAE,
+ 13279: 0x828E,
+ 13280: 0x8EAC,
+ 13281: 0x5026,
+ 13282: 0x5238,
+ 13283: 0x52F8,
+ 13284: 0x5377,
+ 13285: 0x5708,
+ 13286: 0x62F3,
+ 13287: 0x6372,
+ 13288: 0x6B0A,
+ 13289: 0x6DC3,
+ 13290: 0x7737,
+ 13291: 0x53A5,
+ 13292: 0x7357,
+ 13293: 0x8568,
+ 13294: 0x8E76,
+ 13295: 0x95D5,
+ 13296: 0x673A,
+ 13297: 0x6AC3,
+ 13298: 0x6F70,
+ 13299: 0x8A6D,
+ 13300: 0x8ECC,
+ 13301: 0x994B,
+ 13302: 0xF906,
+ 13303: 0x6677,
+ 13304: 0x6B78,
+ 13305: 0x8CB4,
+ 13306: 0x9B3C,
+ 13307: 0xF907,
+ 13308: 0x53EB,
+ 13309: 0x572D,
+ 13310: 0x594E,
+ 13311: 0x63C6,
+ 13312: 0x69FB,
+ 13313: 0x73EA,
+ 13314: 0x7845,
+ 13315: 0x7ABA,
+ 13316: 0x7AC5,
+ 13317: 0x7CFE,
+ 13318: 0x8475,
+ 13319: 0x898F,
+ 13320: 0x8D73,
+ 13321: 0x9035,
+ 13322: 0x95A8,
+ 13323: 0x52FB,
+ 13324: 0x5747,
+ 13325: 0x7547,
+ 13326: 0x7B60,
+ 13327: 0x83CC,
+ 13328: 0x921E,
+ 13329: 0xF908,
+ 13330: 0x6A58,
+ 13331: 0x514B,
+ 13332: 0x524B,
+ 13333: 0x5287,
+ 13334: 0x621F,
+ 13335: 0x68D8,
+ 13336: 0x6975,
+ 13337: 0x9699,
+ 13338: 0x50C5,
+ 13339: 0x52A4,
+ 13340: 0x52E4,
+ 13341: 0x61C3,
+ 13342: 0x65A4,
+ 13343: 0x6839,
+ 13344: 0x69FF,
+ 13345: 0x747E,
+ 13346: 0x7B4B,
+ 13347: 0x82B9,
+ 13348: 0x83EB,
+ 13349: 0x89B2,
+ 13350: 0x8B39,
+ 13351: 0x8FD1,
+ 13352: 0x9949,
+ 13353: 0xF909,
+ 13354: 0x4ECA,
+ 13355: 0x5997,
+ 13356: 0x64D2,
+ 13357: 0x6611,
+ 13358: 0x6A8E,
+ 13359: 0x7434,
+ 13360: 0x7981,
+ 13361: 0x79BD,
+ 13362: 0x82A9,
+ 13363: 0x887E,
+ 13364: 0x887F,
+ 13365: 0x895F,
+ 13366: 0xF90A,
+ 13367: 0x9326,
+ 13368: 0x4F0B,
+ 13369: 0x53CA,
+ 13370: 0x6025,
+ 13371: 0x6271,
+ 13372: 0x6C72,
+ 13373: 0x7D1A,
+ 13374: 0x7D66,
+ 13375: 0x4E98,
+ 13376: 0x5162,
+ 13377: 0x77DC,
+ 13378: 0x80AF,
+ 13379: 0x4F01,
+ 13380: 0x4F0E,
+ 13381: 0x5176,
+ 13382: 0x5180,
+ 13383: 0x55DC,
+ 13384: 0x5668,
+ 13385: 0x573B,
+ 13386: 0x57FA,
+ 13387: 0x57FC,
+ 13388: 0x5914,
+ 13389: 0x5947,
+ 13390: 0x5993,
+ 13391: 0x5BC4,
+ 13392: 0x5C90,
+ 13393: 0x5D0E,
+ 13394: 0x5DF1,
+ 13395: 0x5E7E,
+ 13396: 0x5FCC,
+ 13397: 0x6280,
+ 13398: 0x65D7,
+ 13399: 0x65E3,
+ 13400: 0x671E,
+ 13401: 0x671F,
+ 13402: 0x675E,
+ 13403: 0x68CB,
+ 13404: 0x68C4,
+ 13405: 0x6A5F,
+ 13406: 0x6B3A,
+ 13407: 0x6C23,
+ 13408: 0x6C7D,
+ 13409: 0x6C82,
+ 13410: 0x6DC7,
+ 13411: 0x7398,
+ 13412: 0x7426,
+ 13413: 0x742A,
+ 13414: 0x7482,
+ 13415: 0x74A3,
+ 13416: 0x7578,
+ 13417: 0x757F,
+ 13418: 0x7881,
+ 13419: 0x78EF,
+ 13420: 0x7941,
+ 13421: 0x7947,
+ 13422: 0x7948,
+ 13423: 0x797A,
+ 13424: 0x7B95,
+ 13425: 0x7D00,
+ 13426: 0x7DBA,
+ 13427: 0x7F88,
+ 13428: 0x8006,
+ 13429: 0x802D,
+ 13430: 0x808C,
+ 13431: 0x8A18,
+ 13432: 0x8B4F,
+ 13433: 0x8C48,
+ 13434: 0x8D77,
+ 13435: 0x9321,
+ 13436: 0x9324,
+ 13437: 0x98E2,
+ 13438: 0x9951,
+ 13439: 0x9A0E,
+ 13440: 0x9A0F,
+ 13441: 0x9A65,
+ 13442: 0x9E92,
+ 13443: 0x7DCA,
+ 13444: 0x4F76,
+ 13445: 0x5409,
+ 13446: 0x62EE,
+ 13447: 0x6854,
+ 13448: 0x91D1,
+ 13449: 0x55AB,
+ 13450: 0x513A,
+ 13451: 0xF90B,
+ 13452: 0xF90C,
+ 13453: 0x5A1C,
+ 13454: 0x61E6,
+ 13455: 0xF90D,
+ 13456: 0x62CF,
+ 13457: 0x62FF,
+ 13458: 0xF90E,
+ 13459: 0xF90F,
+ 13460: 0xF910,
+ 13461: 0xF911,
+ 13462: 0xF912,
+ 13463: 0xF913,
+ 13464: 0x90A3,
+ 13465: 0xF914,
+ 13466: 0xF915,
+ 13467: 0xF916,
+ 13468: 0xF917,
+ 13469: 0xF918,
+ 13470: 0x8AFE,
+ 13471: 0xF919,
+ 13472: 0xF91A,
+ 13473: 0xF91B,
+ 13474: 0xF91C,
+ 13475: 0x6696,
+ 13476: 0xF91D,
+ 13477: 0x7156,
+ 13478: 0xF91E,
+ 13479: 0xF91F,
+ 13480: 0x96E3,
+ 13481: 0xF920,
+ 13482: 0x634F,
+ 13483: 0x637A,
+ 13484: 0x5357,
+ 13485: 0xF921,
+ 13486: 0x678F,
+ 13487: 0x6960,
+ 13488: 0x6E73,
+ 13489: 0xF922,
+ 13490: 0x7537,
+ 13491: 0xF923,
+ 13492: 0xF924,
+ 13493: 0xF925,
+ 13494: 0x7D0D,
+ 13495: 0xF926,
+ 13496: 0xF927,
+ 13497: 0x8872,
+ 13498: 0x56CA,
+ 13499: 0x5A18,
+ 13500: 0xF928,
+ 13501: 0xF929,
+ 13502: 0xF92A,
+ 13503: 0xF92B,
+ 13504: 0xF92C,
+ 13505: 0x4E43,
+ 13506: 0xF92D,
+ 13507: 0x5167,
+ 13508: 0x5948,
+ 13509: 0x67F0,
+ 13510: 0x8010,
+ 13511: 0xF92E,
+ 13512: 0x5973,
+ 13513: 0x5E74,
+ 13514: 0x649A,
+ 13515: 0x79CA,
+ 13516: 0x5FF5,
+ 13517: 0x606C,
+ 13518: 0x62C8,
+ 13519: 0x637B,
+ 13520: 0x5BE7,
+ 13521: 0x5BD7,
+ 13522: 0x52AA,
+ 13523: 0xF92F,
+ 13524: 0x5974,
+ 13525: 0x5F29,
+ 13526: 0x6012,
+ 13527: 0xF930,
+ 13528: 0xF931,
+ 13529: 0xF932,
+ 13530: 0x7459,
+ 13531: 0xF933,
+ 13532: 0xF934,
+ 13533: 0xF935,
+ 13534: 0xF936,
+ 13535: 0xF937,
+ 13536: 0xF938,
+ 13537: 0x99D1,
+ 13538: 0xF939,
+ 13539: 0xF93A,
+ 13540: 0xF93B,
+ 13541: 0xF93C,
+ 13542: 0xF93D,
+ 13543: 0xF93E,
+ 13544: 0xF93F,
+ 13545: 0xF940,
+ 13546: 0xF941,
+ 13547: 0xF942,
+ 13548: 0xF943,
+ 13549: 0x6FC3,
+ 13550: 0xF944,
+ 13551: 0xF945,
+ 13552: 0x81BF,
+ 13553: 0x8FB2,
+ 13554: 0x60F1,
+ 13555: 0xF946,
+ 13556: 0xF947,
+ 13557: 0x8166,
+ 13558: 0xF948,
+ 13559: 0xF949,
+ 13560: 0x5C3F,
+ 13561: 0xF94A,
+ 13562: 0xF94B,
+ 13563: 0xF94C,
+ 13564: 0xF94D,
+ 13565: 0xF94E,
+ 13566: 0xF94F,
+ 13567: 0xF950,
+ 13568: 0xF951,
+ 13569: 0x5AE9,
+ 13570: 0x8A25,
+ 13571: 0x677B,
+ 13572: 0x7D10,
+ 13573: 0xF952,
+ 13574: 0xF953,
+ 13575: 0xF954,
+ 13576: 0xF955,
+ 13577: 0xF956,
+ 13578: 0xF957,
+ 13579: 0x80FD,
+ 13580: 0xF958,
+ 13581: 0xF959,
+ 13582: 0x5C3C,
+ 13583: 0x6CE5,
+ 13584: 0x533F,
+ 13585: 0x6EBA,
+ 13586: 0x591A,
+ 13587: 0x8336,
+ 13588: 0x4E39,
+ 13589: 0x4EB6,
+ 13590: 0x4F46,
+ 13591: 0x55AE,
+ 13592: 0x5718,
+ 13593: 0x58C7,
+ 13594: 0x5F56,
+ 13595: 0x65B7,
+ 13596: 0x65E6,
+ 13597: 0x6A80,
+ 13598: 0x6BB5,
+ 13599: 0x6E4D,
+ 13600: 0x77ED,
+ 13601: 0x7AEF,
+ 13602: 0x7C1E,
+ 13603: 0x7DDE,
+ 13604: 0x86CB,
+ 13605: 0x8892,
+ 13606: 0x9132,
+ 13607: 0x935B,
+ 13608: 0x64BB,
+ 13609: 0x6FBE,
+ 13610: 0x737A,
+ 13611: 0x75B8,
+ 13612: 0x9054,
+ 13613: 0x5556,
+ 13614: 0x574D,
+ 13615: 0x61BA,
+ 13616: 0x64D4,
+ 13617: 0x66C7,
+ 13618: 0x6DE1,
+ 13619: 0x6E5B,
+ 13620: 0x6F6D,
+ 13621: 0x6FB9,
+ 13622: 0x75F0,
+ 13623: 0x8043,
+ 13624: 0x81BD,
+ 13625: 0x8541,
+ 13626: 0x8983,
+ 13627: 0x8AC7,
+ 13628: 0x8B5A,
+ 13629: 0x931F,
+ 13630: 0x6C93,
+ 13631: 0x7553,
+ 13632: 0x7B54,
+ 13633: 0x8E0F,
+ 13634: 0x905D,
+ 13635: 0x5510,
+ 13636: 0x5802,
+ 13637: 0x5858,
+ 13638: 0x5E62,
+ 13639: 0x6207,
+ 13640: 0x649E,
+ 13641: 0x68E0,
+ 13642: 0x7576,
+ 13643: 0x7CD6,
+ 13644: 0x87B3,
+ 13645: 0x9EE8,
+ 13646: 0x4EE3,
+ 13647: 0x5788,
+ 13648: 0x576E,
+ 13649: 0x5927,
+ 13650: 0x5C0D,
+ 13651: 0x5CB1,
+ 13652: 0x5E36,
+ 13653: 0x5F85,
+ 13654: 0x6234,
+ 13655: 0x64E1,
+ 13656: 0x73B3,
+ 13657: 0x81FA,
+ 13658: 0x888B,
+ 13659: 0x8CB8,
+ 13660: 0x968A,
+ 13661: 0x9EDB,
+ 13662: 0x5B85,
+ 13663: 0x5FB7,
+ 13664: 0x60B3,
+ 13665: 0x5012,
+ 13666: 0x5200,
+ 13667: 0x5230,
+ 13668: 0x5716,
+ 13669: 0x5835,
+ 13670: 0x5857,
+ 13671: 0x5C0E,
+ 13672: 0x5C60,
+ 13673: 0x5CF6,
+ 13674: 0x5D8B,
+ 13675: 0x5EA6,
+ 13676: 0x5F92,
+ 13677: 0x60BC,
+ 13678: 0x6311,
+ 13679: 0x6389,
+ 13680: 0x6417,
+ 13681: 0x6843,
+ 13682: 0x68F9,
+ 13683: 0x6AC2,
+ 13684: 0x6DD8,
+ 13685: 0x6E21,
+ 13686: 0x6ED4,
+ 13687: 0x6FE4,
+ 13688: 0x71FE,
+ 13689: 0x76DC,
+ 13690: 0x7779,
+ 13691: 0x79B1,
+ 13692: 0x7A3B,
+ 13693: 0x8404,
+ 13694: 0x89A9,
+ 13695: 0x8CED,
+ 13696: 0x8DF3,
+ 13697: 0x8E48,
+ 13698: 0x9003,
+ 13699: 0x9014,
+ 13700: 0x9053,
+ 13701: 0x90FD,
+ 13702: 0x934D,
+ 13703: 0x9676,
+ 13704: 0x97DC,
+ 13705: 0x6BD2,
+ 13706: 0x7006,
+ 13707: 0x7258,
+ 13708: 0x72A2,
+ 13709: 0x7368,
+ 13710: 0x7763,
+ 13711: 0x79BF,
+ 13712: 0x7BE4,
+ 13713: 0x7E9B,
+ 13714: 0x8B80,
+ 13715: 0x58A9,
+ 13716: 0x60C7,
+ 13717: 0x6566,
+ 13718: 0x65FD,
+ 13719: 0x66BE,
+ 13720: 0x6C8C,
+ 13721: 0x711E,
+ 13722: 0x71C9,
+ 13723: 0x8C5A,
+ 13724: 0x9813,
+ 13725: 0x4E6D,
+ 13726: 0x7A81,
+ 13727: 0x4EDD,
+ 13728: 0x51AC,
+ 13729: 0x51CD,
+ 13730: 0x52D5,
+ 13731: 0x540C,
+ 13732: 0x61A7,
+ 13733: 0x6771,
+ 13734: 0x6850,
+ 13735: 0x68DF,
+ 13736: 0x6D1E,
+ 13737: 0x6F7C,
+ 13738: 0x75BC,
+ 13739: 0x77B3,
+ 13740: 0x7AE5,
+ 13741: 0x80F4,
+ 13742: 0x8463,
+ 13743: 0x9285,
+ 13744: 0x515C,
+ 13745: 0x6597,
+ 13746: 0x675C,
+ 13747: 0x6793,
+ 13748: 0x75D8,
+ 13749: 0x7AC7,
+ 13750: 0x8373,
+ 13751: 0xF95A,
+ 13752: 0x8C46,
+ 13753: 0x9017,
+ 13754: 0x982D,
+ 13755: 0x5C6F,
+ 13756: 0x81C0,
+ 13757: 0x829A,
+ 13758: 0x9041,
+ 13759: 0x906F,
+ 13760: 0x920D,
+ 13761: 0x5F97,
+ 13762: 0x5D9D,
+ 13763: 0x6A59,
+ 13764: 0x71C8,
+ 13765: 0x767B,
+ 13766: 0x7B49,
+ 13767: 0x85E4,
+ 13768: 0x8B04,
+ 13769: 0x9127,
+ 13770: 0x9A30,
+ 13771: 0x5587,
+ 13772: 0x61F6,
+ 13773: 0xF95B,
+ 13774: 0x7669,
+ 13775: 0x7F85,
+ 13776: 0x863F,
+ 13777: 0x87BA,
+ 13778: 0x88F8,
+ 13779: 0x908F,
+ 13780: 0xF95C,
+ 13781: 0x6D1B,
+ 13782: 0x70D9,
+ 13783: 0x73DE,
+ 13784: 0x7D61,
+ 13785: 0x843D,
+ 13786: 0xF95D,
+ 13787: 0x916A,
+ 13788: 0x99F1,
+ 13789: 0xF95E,
+ 13790: 0x4E82,
+ 13791: 0x5375,
+ 13792: 0x6B04,
+ 13793: 0x6B12,
+ 13794: 0x703E,
+ 13795: 0x721B,
+ 13796: 0x862D,
+ 13797: 0x9E1E,
+ 13798: 0x524C,
+ 13799: 0x8FA3,
+ 13800: 0x5D50,
+ 13801: 0x64E5,
+ 13802: 0x652C,
+ 13803: 0x6B16,
+ 13804: 0x6FEB,
+ 13805: 0x7C43,
+ 13806: 0x7E9C,
+ 13807: 0x85CD,
+ 13808: 0x8964,
+ 13809: 0x89BD,
+ 13810: 0x62C9,
+ 13811: 0x81D8,
+ 13812: 0x881F,
+ 13813: 0x5ECA,
+ 13814: 0x6717,
+ 13815: 0x6D6A,
+ 13816: 0x72FC,
+ 13817: 0x7405,
+ 13818: 0x746F,
+ 13819: 0x8782,
+ 13820: 0x90DE,
+ 13821: 0x4F86,
+ 13822: 0x5D0D,
+ 13823: 0x5FA0,
+ 13824: 0x840A,
+ 13825: 0x51B7,
+ 13826: 0x63A0,
+ 13827: 0x7565,
+ 13828: 0x4EAE,
+ 13829: 0x5006,
+ 13830: 0x5169,
+ 13831: 0x51C9,
+ 13832: 0x6881,
+ 13833: 0x6A11,
+ 13834: 0x7CAE,
+ 13835: 0x7CB1,
+ 13836: 0x7CE7,
+ 13837: 0x826F,
+ 13838: 0x8AD2,
+ 13839: 0x8F1B,
+ 13840: 0x91CF,
+ 13841: 0x4FB6,
+ 13842: 0x5137,
+ 13843: 0x52F5,
+ 13844: 0x5442,
+ 13845: 0x5EEC,
+ 13846: 0x616E,
+ 13847: 0x623E,
+ 13848: 0x65C5,
+ 13849: 0x6ADA,
+ 13850: 0x6FFE,
+ 13851: 0x792A,
+ 13852: 0x85DC,
+ 13853: 0x8823,
+ 13854: 0x95AD,
+ 13855: 0x9A62,
+ 13856: 0x9A6A,
+ 13857: 0x9E97,
+ 13858: 0x9ECE,
+ 13859: 0x529B,
+ 13860: 0x66C6,
+ 13861: 0x6B77,
+ 13862: 0x701D,
+ 13863: 0x792B,
+ 13864: 0x8F62,
+ 13865: 0x9742,
+ 13866: 0x6190,
+ 13867: 0x6200,
+ 13868: 0x6523,
+ 13869: 0x6F23,
+ 13870: 0x7149,
+ 13871: 0x7489,
+ 13872: 0x7DF4,
+ 13873: 0x806F,
+ 13874: 0x84EE,
+ 13875: 0x8F26,
+ 13876: 0x9023,
+ 13877: 0x934A,
+ 13878: 0x51BD,
+ 13879: 0x5217,
+ 13880: 0x52A3,
+ 13881: 0x6D0C,
+ 13882: 0x70C8,
+ 13883: 0x88C2,
+ 13884: 0x5EC9,
+ 13885: 0x6582,
+ 13886: 0x6BAE,
+ 13887: 0x6FC2,
+ 13888: 0x7C3E,
+ 13889: 0x7375,
+ 13890: 0x4EE4,
+ 13891: 0x4F36,
+ 13892: 0x56F9,
+ 13893: 0xF95F,
+ 13894: 0x5CBA,
+ 13895: 0x5DBA,
+ 13896: 0x601C,
+ 13897: 0x73B2,
+ 13898: 0x7B2D,
+ 13899: 0x7F9A,
+ 13900: 0x7FCE,
+ 13901: 0x8046,
+ 13902: 0x901E,
+ 13903: 0x9234,
+ 13904: 0x96F6,
+ 13905: 0x9748,
+ 13906: 0x9818,
+ 13907: 0x9F61,
+ 13908: 0x4F8B,
+ 13909: 0x6FA7,
+ 13910: 0x79AE,
+ 13911: 0x91B4,
+ 13912: 0x96B7,
+ 13913: 0x52DE,
+ 13914: 0xF960,
+ 13915: 0x6488,
+ 13916: 0x64C4,
+ 13917: 0x6AD3,
+ 13918: 0x6F5E,
+ 13919: 0x7018,
+ 13920: 0x7210,
+ 13921: 0x76E7,
+ 13922: 0x8001,
+ 13923: 0x8606,
+ 13924: 0x865C,
+ 13925: 0x8DEF,
+ 13926: 0x8F05,
+ 13927: 0x9732,
+ 13928: 0x9B6F,
+ 13929: 0x9DFA,
+ 13930: 0x9E75,
+ 13931: 0x788C,
+ 13932: 0x797F,
+ 13933: 0x7DA0,
+ 13934: 0x83C9,
+ 13935: 0x9304,
+ 13936: 0x9E7F,
+ 13937: 0x9E93,
+ 13938: 0x8AD6,
+ 13939: 0x58DF,
+ 13940: 0x5F04,
+ 13941: 0x6727,
+ 13942: 0x7027,
+ 13943: 0x74CF,
+ 13944: 0x7C60,
+ 13945: 0x807E,
+ 13946: 0x5121,
+ 13947: 0x7028,
+ 13948: 0x7262,
+ 13949: 0x78CA,
+ 13950: 0x8CC2,
+ 13951: 0x8CDA,
+ 13952: 0x8CF4,
+ 13953: 0x96F7,
+ 13954: 0x4E86,
+ 13955: 0x50DA,
+ 13956: 0x5BEE,
+ 13957: 0x5ED6,
+ 13958: 0x6599,
+ 13959: 0x71CE,
+ 13960: 0x7642,
+ 13961: 0x77AD,
+ 13962: 0x804A,
+ 13963: 0x84FC,
+ 13964: 0x907C,
+ 13965: 0x9B27,
+ 13966: 0x9F8D,
+ 13967: 0x58D8,
+ 13968: 0x5A41,
+ 13969: 0x5C62,
+ 13970: 0x6A13,
+ 13971: 0x6DDA,
+ 13972: 0x6F0F,
+ 13973: 0x763B,
+ 13974: 0x7D2F,
+ 13975: 0x7E37,
+ 13976: 0x851E,
+ 13977: 0x8938,
+ 13978: 0x93E4,
+ 13979: 0x964B,
+ 13980: 0x5289,
+ 13981: 0x65D2,
+ 13982: 0x67F3,
+ 13983: 0x69B4,
+ 13984: 0x6D41,
+ 13985: 0x6E9C,
+ 13986: 0x700F,
+ 13987: 0x7409,
+ 13988: 0x7460,
+ 13989: 0x7559,
+ 13990: 0x7624,
+ 13991: 0x786B,
+ 13992: 0x8B2C,
+ 13993: 0x985E,
+ 13994: 0x516D,
+ 13995: 0x622E,
+ 13996: 0x9678,
+ 13997: 0x4F96,
+ 13998: 0x502B,
+ 13999: 0x5D19,
+ 14000: 0x6DEA,
+ 14001: 0x7DB8,
+ 14002: 0x8F2A,
+ 14003: 0x5F8B,
+ 14004: 0x6144,
+ 14005: 0x6817,
+ 14006: 0xF961,
+ 14007: 0x9686,
+ 14008: 0x52D2,
+ 14009: 0x808B,
+ 14010: 0x51DC,
+ 14011: 0x51CC,
+ 14012: 0x695E,
+ 14013: 0x7A1C,
+ 14014: 0x7DBE,
+ 14015: 0x83F1,
+ 14016: 0x9675,
+ 14017: 0x4FDA,
+ 14018: 0x5229,
+ 14019: 0x5398,
+ 14020: 0x540F,
+ 14021: 0x550E,
+ 14022: 0x5C65,
+ 14023: 0x60A7,
+ 14024: 0x674E,
+ 14025: 0x68A8,
+ 14026: 0x6D6C,
+ 14027: 0x7281,
+ 14028: 0x72F8,
+ 14029: 0x7406,
+ 14030: 0x7483,
+ 14031: 0xF962,
+ 14032: 0x75E2,
+ 14033: 0x7C6C,
+ 14034: 0x7F79,
+ 14035: 0x7FB8,
+ 14036: 0x8389,
+ 14037: 0x88CF,
+ 14038: 0x88E1,
+ 14039: 0x91CC,
+ 14040: 0x91D0,
+ 14041: 0x96E2,
+ 14042: 0x9BC9,
+ 14043: 0x541D,
+ 14044: 0x6F7E,
+ 14045: 0x71D0,
+ 14046: 0x7498,
+ 14047: 0x85FA,
+ 14048: 0x8EAA,
+ 14049: 0x96A3,
+ 14050: 0x9C57,
+ 14051: 0x9E9F,
+ 14052: 0x6797,
+ 14053: 0x6DCB,
+ 14054: 0x7433,
+ 14055: 0x81E8,
+ 14056: 0x9716,
+ 14057: 0x782C,
+ 14058: 0x7ACB,
+ 14059: 0x7B20,
+ 14060: 0x7C92,
+ 14061: 0x6469,
+ 14062: 0x746A,
+ 14063: 0x75F2,
+ 14064: 0x78BC,
+ 14065: 0x78E8,
+ 14066: 0x99AC,
+ 14067: 0x9B54,
+ 14068: 0x9EBB,
+ 14069: 0x5BDE,
+ 14070: 0x5E55,
+ 14071: 0x6F20,
+ 14072: 0x819C,
+ 14073: 0x83AB,
+ 14074: 0x9088,
+ 14075: 0x4E07,
+ 14076: 0x534D,
+ 14077: 0x5A29,
+ 14078: 0x5DD2,
+ 14079: 0x5F4E,
+ 14080: 0x6162,
+ 14081: 0x633D,
+ 14082: 0x6669,
+ 14083: 0x66FC,
+ 14084: 0x6EFF,
+ 14085: 0x6F2B,
+ 14086: 0x7063,
+ 14087: 0x779E,
+ 14088: 0x842C,
+ 14089: 0x8513,
+ 14090: 0x883B,
+ 14091: 0x8F13,
+ 14092: 0x9945,
+ 14093: 0x9C3B,
+ 14094: 0x551C,
+ 14095: 0x62B9,
+ 14096: 0x672B,
+ 14097: 0x6CAB,
+ 14098: 0x8309,
+ 14099: 0x896A,
+ 14100: 0x977A,
+ 14101: 0x4EA1,
+ 14102: 0x5984,
+ 14103: 0x5FD8,
+ 14104: 0x5FD9,
+ 14105: 0x671B,
+ 14106: 0x7DB2,
+ 14107: 0x7F54,
+ 14108: 0x8292,
+ 14109: 0x832B,
+ 14110: 0x83BD,
+ 14111: 0x8F1E,
+ 14112: 0x9099,
+ 14113: 0x57CB,
+ 14114: 0x59B9,
+ 14115: 0x5A92,
+ 14116: 0x5BD0,
+ 14117: 0x6627,
+ 14118: 0x679A,
+ 14119: 0x6885,
+ 14120: 0x6BCF,
+ 14121: 0x7164,
+ 14122: 0x7F75,
+ 14123: 0x8CB7,
+ 14124: 0x8CE3,
+ 14125: 0x9081,
+ 14126: 0x9B45,
+ 14127: 0x8108,
+ 14128: 0x8C8A,
+ 14129: 0x964C,
+ 14130: 0x9A40,
+ 14131: 0x9EA5,
+ 14132: 0x5B5F,
+ 14133: 0x6C13,
+ 14134: 0x731B,
+ 14135: 0x76F2,
+ 14136: 0x76DF,
+ 14137: 0x840C,
+ 14138: 0x51AA,
+ 14139: 0x8993,
+ 14140: 0x514D,
+ 14141: 0x5195,
+ 14142: 0x52C9,
+ 14143: 0x68C9,
+ 14144: 0x6C94,
+ 14145: 0x7704,
+ 14146: 0x7720,
+ 14147: 0x7DBF,
+ 14148: 0x7DEC,
+ 14149: 0x9762,
+ 14150: 0x9EB5,
+ 14151: 0x6EC5,
+ 14152: 0x8511,
+ 14153: 0x51A5,
+ 14154: 0x540D,
+ 14155: 0x547D,
+ 14156: 0x660E,
+ 14157: 0x669D,
+ 14158: 0x6927,
+ 14159: 0x6E9F,
+ 14160: 0x76BF,
+ 14161: 0x7791,
+ 14162: 0x8317,
+ 14163: 0x84C2,
+ 14164: 0x879F,
+ 14165: 0x9169,
+ 14166: 0x9298,
+ 14167: 0x9CF4,
+ 14168: 0x8882,
+ 14169: 0x4FAE,
+ 14170: 0x5192,
+ 14171: 0x52DF,
+ 14172: 0x59C6,
+ 14173: 0x5E3D,
+ 14174: 0x6155,
+ 14175: 0x6478,
+ 14176: 0x6479,
+ 14177: 0x66AE,
+ 14178: 0x67D0,
+ 14179: 0x6A21,
+ 14180: 0x6BCD,
+ 14181: 0x6BDB,
+ 14182: 0x725F,
+ 14183: 0x7261,
+ 14184: 0x7441,
+ 14185: 0x7738,
+ 14186: 0x77DB,
+ 14187: 0x8017,
+ 14188: 0x82BC,
+ 14189: 0x8305,
+ 14190: 0x8B00,
+ 14191: 0x8B28,
+ 14192: 0x8C8C,
+ 14193: 0x6728,
+ 14194: 0x6C90,
+ 14195: 0x7267,
+ 14196: 0x76EE,
+ 14197: 0x7766,
+ 14198: 0x7A46,
+ 14199: 0x9DA9,
+ 14200: 0x6B7F,
+ 14201: 0x6C92,
+ 14202: 0x5922,
+ 14203: 0x6726,
+ 14204: 0x8499,
+ 14205: 0x536F,
+ 14206: 0x5893,
+ 14207: 0x5999,
+ 14208: 0x5EDF,
+ 14209: 0x63CF,
+ 14210: 0x6634,
+ 14211: 0x6773,
+ 14212: 0x6E3A,
+ 14213: 0x732B,
+ 14214: 0x7AD7,
+ 14215: 0x82D7,
+ 14216: 0x9328,
+ 14217: 0x52D9,
+ 14218: 0x5DEB,
+ 14219: 0x61AE,
+ 14220: 0x61CB,
+ 14221: 0x620A,
+ 14222: 0x62C7,
+ 14223: 0x64AB,
+ 14224: 0x65E0,
+ 14225: 0x6959,
+ 14226: 0x6B66,
+ 14227: 0x6BCB,
+ 14228: 0x7121,
+ 14229: 0x73F7,
+ 14230: 0x755D,
+ 14231: 0x7E46,
+ 14232: 0x821E,
+ 14233: 0x8302,
+ 14234: 0x856A,
+ 14235: 0x8AA3,
+ 14236: 0x8CBF,
+ 14237: 0x9727,
+ 14238: 0x9D61,
+ 14239: 0x58A8,
+ 14240: 0x9ED8,
+ 14241: 0x5011,
+ 14242: 0x520E,
+ 14243: 0x543B,
+ 14244: 0x554F,
+ 14245: 0x6587,
+ 14246: 0x6C76,
+ 14247: 0x7D0A,
+ 14248: 0x7D0B,
+ 14249: 0x805E,
+ 14250: 0x868A,
+ 14251: 0x9580,
+ 14252: 0x96EF,
+ 14253: 0x52FF,
+ 14254: 0x6C95,
+ 14255: 0x7269,
+ 14256: 0x5473,
+ 14257: 0x5A9A,
+ 14258: 0x5C3E,
+ 14259: 0x5D4B,
+ 14260: 0x5F4C,
+ 14261: 0x5FAE,
+ 14262: 0x672A,
+ 14263: 0x68B6,
+ 14264: 0x6963,
+ 14265: 0x6E3C,
+ 14266: 0x6E44,
+ 14267: 0x7709,
+ 14268: 0x7C73,
+ 14269: 0x7F8E,
+ 14270: 0x8587,
+ 14271: 0x8B0E,
+ 14272: 0x8FF7,
+ 14273: 0x9761,
+ 14274: 0x9EF4,
+ 14275: 0x5CB7,
+ 14276: 0x60B6,
+ 14277: 0x610D,
+ 14278: 0x61AB,
+ 14279: 0x654F,
+ 14280: 0x65FB,
+ 14281: 0x65FC,
+ 14282: 0x6C11,
+ 14283: 0x6CEF,
+ 14284: 0x739F,
+ 14285: 0x73C9,
+ 14286: 0x7DE1,
+ 14287: 0x9594,
+ 14288: 0x5BC6,
+ 14289: 0x871C,
+ 14290: 0x8B10,
+ 14291: 0x525D,
+ 14292: 0x535A,
+ 14293: 0x62CD,
+ 14294: 0x640F,
+ 14295: 0x64B2,
+ 14296: 0x6734,
+ 14297: 0x6A38,
+ 14298: 0x6CCA,
+ 14299: 0x73C0,
+ 14300: 0x749E,
+ 14301: 0x7B94,
+ 14302: 0x7C95,
+ 14303: 0x7E1B,
+ 14304: 0x818A,
+ 14305: 0x8236,
+ 14306: 0x8584,
+ 14307: 0x8FEB,
+ 14308: 0x96F9,
+ 14309: 0x99C1,
+ 14310: 0x4F34,
+ 14311: 0x534A,
+ 14312: 0x53CD,
+ 14313: 0x53DB,
+ 14314: 0x62CC,
+ 14315: 0x642C,
+ 14316: 0x6500,
+ 14317: 0x6591,
+ 14318: 0x69C3,
+ 14319: 0x6CEE,
+ 14320: 0x6F58,
+ 14321: 0x73ED,
+ 14322: 0x7554,
+ 14323: 0x7622,
+ 14324: 0x76E4,
+ 14325: 0x76FC,
+ 14326: 0x78D0,
+ 14327: 0x78FB,
+ 14328: 0x792C,
+ 14329: 0x7D46,
+ 14330: 0x822C,
+ 14331: 0x87E0,
+ 14332: 0x8FD4,
+ 14333: 0x9812,
+ 14334: 0x98EF,
+ 14335: 0x52C3,
+ 14336: 0x62D4,
+ 14337: 0x64A5,
+ 14338: 0x6E24,
+ 14339: 0x6F51,
+ 14340: 0x767C,
+ 14341: 0x8DCB,
+ 14342: 0x91B1,
+ 14343: 0x9262,
+ 14344: 0x9AEE,
+ 14345: 0x9B43,
+ 14346: 0x5023,
+ 14347: 0x508D,
+ 14348: 0x574A,
+ 14349: 0x59A8,
+ 14350: 0x5C28,
+ 14351: 0x5E47,
+ 14352: 0x5F77,
+ 14353: 0x623F,
+ 14354: 0x653E,
+ 14355: 0x65B9,
+ 14356: 0x65C1,
+ 14357: 0x6609,
+ 14358: 0x678B,
+ 14359: 0x699C,
+ 14360: 0x6EC2,
+ 14361: 0x78C5,
+ 14362: 0x7D21,
+ 14363: 0x80AA,
+ 14364: 0x8180,
+ 14365: 0x822B,
+ 14366: 0x82B3,
+ 14367: 0x84A1,
+ 14368: 0x868C,
+ 14369: 0x8A2A,
+ 14370: 0x8B17,
+ 14371: 0x90A6,
+ 14372: 0x9632,
+ 14373: 0x9F90,
+ 14374: 0x500D,
+ 14375: 0x4FF3,
+ 14376: 0xF963,
+ 14377: 0x57F9,
+ 14378: 0x5F98,
+ 14379: 0x62DC,
+ 14380: 0x6392,
+ 14381: 0x676F,
+ 14382: 0x6E43,
+ 14383: 0x7119,
+ 14384: 0x76C3,
+ 14385: 0x80CC,
+ 14386: 0x80DA,
+ 14387: 0x88F4,
+ 14388: 0x88F5,
+ 14389: 0x8919,
+ 14390: 0x8CE0,
+ 14391: 0x8F29,
+ 14392: 0x914D,
+ 14393: 0x966A,
+ 14394: 0x4F2F,
+ 14395: 0x4F70,
+ 14396: 0x5E1B,
+ 14397: 0x67CF,
+ 14398: 0x6822,
+ 14399: 0x767D,
+ 14400: 0x767E,
+ 14401: 0x9B44,
+ 14402: 0x5E61,
+ 14403: 0x6A0A,
+ 14404: 0x7169,
+ 14405: 0x71D4,
+ 14406: 0x756A,
+ 14407: 0xF964,
+ 14408: 0x7E41,
+ 14409: 0x8543,
+ 14410: 0x85E9,
+ 14411: 0x98DC,
+ 14412: 0x4F10,
+ 14413: 0x7B4F,
+ 14414: 0x7F70,
+ 14415: 0x95A5,
+ 14416: 0x51E1,
+ 14417: 0x5E06,
+ 14418: 0x68B5,
+ 14419: 0x6C3E,
+ 14420: 0x6C4E,
+ 14421: 0x6CDB,
+ 14422: 0x72AF,
+ 14423: 0x7BC4,
+ 14424: 0x8303,
+ 14425: 0x6CD5,
+ 14426: 0x743A,
+ 14427: 0x50FB,
+ 14428: 0x5288,
+ 14429: 0x58C1,
+ 14430: 0x64D8,
+ 14431: 0x6A97,
+ 14432: 0x74A7,
+ 14433: 0x7656,
+ 14434: 0x78A7,
+ 14435: 0x8617,
+ 14436: 0x95E2,
+ 14437: 0x9739,
+ 14438: 0xF965,
+ 14439: 0x535E,
+ 14440: 0x5F01,
+ 14441: 0x8B8A,
+ 14442: 0x8FA8,
+ 14443: 0x8FAF,
+ 14444: 0x908A,
+ 14445: 0x5225,
+ 14446: 0x77A5,
+ 14447: 0x9C49,
+ 14448: 0x9F08,
+ 14449: 0x4E19,
+ 14450: 0x5002,
+ 14451: 0x5175,
+ 14452: 0x5C5B,
+ 14453: 0x5E77,
+ 14454: 0x661E,
+ 14455: 0x663A,
+ 14456: 0x67C4,
+ 14457: 0x68C5,
+ 14458: 0x70B3,
+ 14459: 0x7501,
+ 14460: 0x75C5,
+ 14461: 0x79C9,
+ 14462: 0x7ADD,
+ 14463: 0x8F27,
+ 14464: 0x9920,
+ 14465: 0x9A08,
+ 14466: 0x4FDD,
+ 14467: 0x5821,
+ 14468: 0x5831,
+ 14469: 0x5BF6,
+ 14470: 0x666E,
+ 14471: 0x6B65,
+ 14472: 0x6D11,
+ 14473: 0x6E7A,
+ 14474: 0x6F7D,
+ 14475: 0x73E4,
+ 14476: 0x752B,
+ 14477: 0x83E9,
+ 14478: 0x88DC,
+ 14479: 0x8913,
+ 14480: 0x8B5C,
+ 14481: 0x8F14,
+ 14482: 0x4F0F,
+ 14483: 0x50D5,
+ 14484: 0x5310,
+ 14485: 0x535C,
+ 14486: 0x5B93,
+ 14487: 0x5FA9,
+ 14488: 0x670D,
+ 14489: 0x798F,
+ 14490: 0x8179,
+ 14491: 0x832F,
+ 14492: 0x8514,
+ 14493: 0x8907,
+ 14494: 0x8986,
+ 14495: 0x8F39,
+ 14496: 0x8F3B,
+ 14497: 0x99A5,
+ 14498: 0x9C12,
+ 14499: 0x672C,
+ 14500: 0x4E76,
+ 14501: 0x4FF8,
+ 14502: 0x5949,
+ 14503: 0x5C01,
+ 14504: 0x5CEF,
+ 14505: 0x5CF0,
+ 14506: 0x6367,
+ 14507: 0x68D2,
+ 14508: 0x70FD,
+ 14509: 0x71A2,
+ 14510: 0x742B,
+ 14511: 0x7E2B,
+ 14512: 0x84EC,
+ 14513: 0x8702,
+ 14514: 0x9022,
+ 14515: 0x92D2,
+ 14516: 0x9CF3,
+ 14517: 0x4E0D,
+ 14518: 0x4ED8,
+ 14519: 0x4FEF,
+ 14520: 0x5085,
+ 14521: 0x5256,
+ 14522: 0x526F,
+ 14523: 0x5426,
+ 14524: 0x5490,
+ 14525: 0x57E0,
+ 14526: 0x592B,
+ 14527: 0x5A66,
+ 14528: 0x5B5A,
+ 14529: 0x5B75,
+ 14530: 0x5BCC,
+ 14531: 0x5E9C,
+ 14532: 0xF966,
+ 14533: 0x6276,
+ 14534: 0x6577,
+ 14535: 0x65A7,
+ 14536: 0x6D6E,
+ 14537: 0x6EA5,
+ 14538: 0x7236,
+ 14539: 0x7B26,
+ 14540: 0x7C3F,
+ 14541: 0x7F36,
+ 14542: 0x8150,
+ 14543: 0x8151,
+ 14544: 0x819A,
+ 14545: 0x8240,
+ 14546: 0x8299,
+ 14547: 0x83A9,
+ 14548: 0x8A03,
+ 14549: 0x8CA0,
+ 14550: 0x8CE6,
+ 14551: 0x8CFB,
+ 14552: 0x8D74,
+ 14553: 0x8DBA,
+ 14554: 0x90E8,
+ 14555: 0x91DC,
+ 14556: 0x961C,
+ 14557: 0x9644,
+ 14558: 0x99D9,
+ 14559: 0x9CE7,
+ 14560: 0x5317,
+ 14561: 0x5206,
+ 14562: 0x5429,
+ 14563: 0x5674,
+ 14564: 0x58B3,
+ 14565: 0x5954,
+ 14566: 0x596E,
+ 14567: 0x5FFF,
+ 14568: 0x61A4,
+ 14569: 0x626E,
+ 14570: 0x6610,
+ 14571: 0x6C7E,
+ 14572: 0x711A,
+ 14573: 0x76C6,
+ 14574: 0x7C89,
+ 14575: 0x7CDE,
+ 14576: 0x7D1B,
+ 14577: 0x82AC,
+ 14578: 0x8CC1,
+ 14579: 0x96F0,
+ 14580: 0xF967,
+ 14581: 0x4F5B,
+ 14582: 0x5F17,
+ 14583: 0x5F7F,
+ 14584: 0x62C2,
+ 14585: 0x5D29,
+ 14586: 0x670B,
+ 14587: 0x68DA,
+ 14588: 0x787C,
+ 14589: 0x7E43,
+ 14590: 0x9D6C,
+ 14591: 0x4E15,
+ 14592: 0x5099,
+ 14593: 0x5315,
+ 14594: 0x532A,
+ 14595: 0x5351,
+ 14596: 0x5983,
+ 14597: 0x5A62,
+ 14598: 0x5E87,
+ 14599: 0x60B2,
+ 14600: 0x618A,
+ 14601: 0x6249,
+ 14602: 0x6279,
+ 14603: 0x6590,
+ 14604: 0x6787,
+ 14605: 0x69A7,
+ 14606: 0x6BD4,
+ 14607: 0x6BD6,
+ 14608: 0x6BD7,
+ 14609: 0x6BD8,
+ 14610: 0x6CB8,
+ 14611: 0xF968,
+ 14612: 0x7435,
+ 14613: 0x75FA,
+ 14614: 0x7812,
+ 14615: 0x7891,
+ 14616: 0x79D5,
+ 14617: 0x79D8,
+ 14618: 0x7C83,
+ 14619: 0x7DCB,
+ 14620: 0x7FE1,
+ 14621: 0x80A5,
+ 14622: 0x813E,
+ 14623: 0x81C2,
+ 14624: 0x83F2,
+ 14625: 0x871A,
+ 14626: 0x88E8,
+ 14627: 0x8AB9,
+ 14628: 0x8B6C,
+ 14629: 0x8CBB,
+ 14630: 0x9119,
+ 14631: 0x975E,
+ 14632: 0x98DB,
+ 14633: 0x9F3B,
+ 14634: 0x56AC,
+ 14635: 0x5B2A,
+ 14636: 0x5F6C,
+ 14637: 0x658C,
+ 14638: 0x6AB3,
+ 14639: 0x6BAF,
+ 14640: 0x6D5C,
+ 14641: 0x6FF1,
+ 14642: 0x7015,
+ 14643: 0x725D,
+ 14644: 0x73AD,
+ 14645: 0x8CA7,
+ 14646: 0x8CD3,
+ 14647: 0x983B,
+ 14648: 0x6191,
+ 14649: 0x6C37,
+ 14650: 0x8058,
+ 14651: 0x9A01,
+ 14652: 0x4E4D,
+ 14653: 0x4E8B,
+ 14654: 0x4E9B,
+ 14655: 0x4ED5,
+ 14656: 0x4F3A,
+ 14657: 0x4F3C,
+ 14658: 0x4F7F,
+ 14659: 0x4FDF,
+ 14660: 0x50FF,
+ 14661: 0x53F2,
+ 14662: 0x53F8,
+ 14663: 0x5506,
+ 14664: 0x55E3,
+ 14665: 0x56DB,
+ 14666: 0x58EB,
+ 14667: 0x5962,
+ 14668: 0x5A11,
+ 14669: 0x5BEB,
+ 14670: 0x5BFA,
+ 14671: 0x5C04,
+ 14672: 0x5DF3,
+ 14673: 0x5E2B,
+ 14674: 0x5F99,
+ 14675: 0x601D,
+ 14676: 0x6368,
+ 14677: 0x659C,
+ 14678: 0x65AF,
+ 14679: 0x67F6,
+ 14680: 0x67FB,
+ 14681: 0x68AD,
+ 14682: 0x6B7B,
+ 14683: 0x6C99,
+ 14684: 0x6CD7,
+ 14685: 0x6E23,
+ 14686: 0x7009,
+ 14687: 0x7345,
+ 14688: 0x7802,
+ 14689: 0x793E,
+ 14690: 0x7940,
+ 14691: 0x7960,
+ 14692: 0x79C1,
+ 14693: 0x7BE9,
+ 14694: 0x7D17,
+ 14695: 0x7D72,
+ 14696: 0x8086,
+ 14697: 0x820D,
+ 14698: 0x838E,
+ 14699: 0x84D1,
+ 14700: 0x86C7,
+ 14701: 0x88DF,
+ 14702: 0x8A50,
+ 14703: 0x8A5E,
+ 14704: 0x8B1D,
+ 14705: 0x8CDC,
+ 14706: 0x8D66,
+ 14707: 0x8FAD,
+ 14708: 0x90AA,
+ 14709: 0x98FC,
+ 14710: 0x99DF,
+ 14711: 0x9E9D,
+ 14712: 0x524A,
+ 14713: 0xF969,
+ 14714: 0x6714,
+ 14715: 0xF96A,
+ 14716: 0x5098,
+ 14717: 0x522A,
+ 14718: 0x5C71,
+ 14719: 0x6563,
+ 14720: 0x6C55,
+ 14721: 0x73CA,
+ 14722: 0x7523,
+ 14723: 0x759D,
+ 14724: 0x7B97,
+ 14725: 0x849C,
+ 14726: 0x9178,
+ 14727: 0x9730,
+ 14728: 0x4E77,
+ 14729: 0x6492,
+ 14730: 0x6BBA,
+ 14731: 0x715E,
+ 14732: 0x85A9,
+ 14733: 0x4E09,
+ 14734: 0xF96B,
+ 14735: 0x6749,
+ 14736: 0x68EE,
+ 14737: 0x6E17,
+ 14738: 0x829F,
+ 14739: 0x8518,
+ 14740: 0x886B,
+ 14741: 0x63F7,
+ 14742: 0x6F81,
+ 14743: 0x9212,
+ 14744: 0x98AF,
+ 14745: 0x4E0A,
+ 14746: 0x50B7,
+ 14747: 0x50CF,
+ 14748: 0x511F,
+ 14749: 0x5546,
+ 14750: 0x55AA,
+ 14751: 0x5617,
+ 14752: 0x5B40,
+ 14753: 0x5C19,
+ 14754: 0x5CE0,
+ 14755: 0x5E38,
+ 14756: 0x5E8A,
+ 14757: 0x5EA0,
+ 14758: 0x5EC2,
+ 14759: 0x60F3,
+ 14760: 0x6851,
+ 14761: 0x6A61,
+ 14762: 0x6E58,
+ 14763: 0x723D,
+ 14764: 0x7240,
+ 14765: 0x72C0,
+ 14766: 0x76F8,
+ 14767: 0x7965,
+ 14768: 0x7BB1,
+ 14769: 0x7FD4,
+ 14770: 0x88F3,
+ 14771: 0x89F4,
+ 14772: 0x8A73,
+ 14773: 0x8C61,
+ 14774: 0x8CDE,
+ 14775: 0x971C,
+ 14776: 0x585E,
+ 14777: 0x74BD,
+ 14778: 0x8CFD,
+ 14779: 0x55C7,
+ 14780: 0xF96C,
+ 14781: 0x7A61,
+ 14782: 0x7D22,
+ 14783: 0x8272,
+ 14784: 0x7272,
+ 14785: 0x751F,
+ 14786: 0x7525,
+ 14787: 0xF96D,
+ 14788: 0x7B19,
+ 14789: 0x5885,
+ 14790: 0x58FB,
+ 14791: 0x5DBC,
+ 14792: 0x5E8F,
+ 14793: 0x5EB6,
+ 14794: 0x5F90,
+ 14795: 0x6055,
+ 14796: 0x6292,
+ 14797: 0x637F,
+ 14798: 0x654D,
+ 14799: 0x6691,
+ 14800: 0x66D9,
+ 14801: 0x66F8,
+ 14802: 0x6816,
+ 14803: 0x68F2,
+ 14804: 0x7280,
+ 14805: 0x745E,
+ 14806: 0x7B6E,
+ 14807: 0x7D6E,
+ 14808: 0x7DD6,
+ 14809: 0x7F72,
+ 14810: 0x80E5,
+ 14811: 0x8212,
+ 14812: 0x85AF,
+ 14813: 0x897F,
+ 14814: 0x8A93,
+ 14815: 0x901D,
+ 14816: 0x92E4,
+ 14817: 0x9ECD,
+ 14818: 0x9F20,
+ 14819: 0x5915,
+ 14820: 0x596D,
+ 14821: 0x5E2D,
+ 14822: 0x60DC,
+ 14823: 0x6614,
+ 14824: 0x6673,
+ 14825: 0x6790,
+ 14826: 0x6C50,
+ 14827: 0x6DC5,
+ 14828: 0x6F5F,
+ 14829: 0x77F3,
+ 14830: 0x78A9,
+ 14831: 0x84C6,
+ 14832: 0x91CB,
+ 14833: 0x932B,
+ 14834: 0x4ED9,
+ 14835: 0x50CA,
+ 14836: 0x5148,
+ 14837: 0x5584,
+ 14838: 0x5B0B,
+ 14839: 0x5BA3,
+ 14840: 0x6247,
+ 14841: 0x657E,
+ 14842: 0x65CB,
+ 14843: 0x6E32,
+ 14844: 0x717D,
+ 14845: 0x7401,
+ 14846: 0x7444,
+ 14847: 0x7487,
+ 14848: 0x74BF,
+ 14849: 0x766C,
+ 14850: 0x79AA,
+ 14851: 0x7DDA,
+ 14852: 0x7E55,
+ 14853: 0x7FA8,
+ 14854: 0x817A,
+ 14855: 0x81B3,
+ 14856: 0x8239,
+ 14857: 0x861A,
+ 14858: 0x87EC,
+ 14859: 0x8A75,
+ 14860: 0x8DE3,
+ 14861: 0x9078,
+ 14862: 0x9291,
+ 14863: 0x9425,
+ 14864: 0x994D,
+ 14865: 0x9BAE,
+ 14866: 0x5368,
+ 14867: 0x5C51,
+ 14868: 0x6954,
+ 14869: 0x6CC4,
+ 14870: 0x6D29,
+ 14871: 0x6E2B,
+ 14872: 0x820C,
+ 14873: 0x859B,
+ 14874: 0x893B,
+ 14875: 0x8A2D,
+ 14876: 0x8AAA,
+ 14877: 0x96EA,
+ 14878: 0x9F67,
+ 14879: 0x5261,
+ 14880: 0x66B9,
+ 14881: 0x6BB2,
+ 14882: 0x7E96,
+ 14883: 0x87FE,
+ 14884: 0x8D0D,
+ 14885: 0x9583,
+ 14886: 0x965D,
+ 14887: 0x651D,
+ 14888: 0x6D89,
+ 14889: 0x71EE,
+ 14890: 0xF96E,
+ 14891: 0x57CE,
+ 14892: 0x59D3,
+ 14893: 0x5BAC,
+ 14894: 0x6027,
+ 14895: 0x60FA,
+ 14896: 0x6210,
+ 14897: 0x661F,
+ 14898: 0x665F,
+ 14899: 0x7329,
+ 14900: 0x73F9,
+ 14901: 0x76DB,
+ 14902: 0x7701,
+ 14903: 0x7B6C,
+ 14904: 0x8056,
+ 14905: 0x8072,
+ 14906: 0x8165,
+ 14907: 0x8AA0,
+ 14908: 0x9192,
+ 14909: 0x4E16,
+ 14910: 0x52E2,
+ 14911: 0x6B72,
+ 14912: 0x6D17,
+ 14913: 0x7A05,
+ 14914: 0x7B39,
+ 14915: 0x7D30,
+ 14916: 0xF96F,
+ 14917: 0x8CB0,
+ 14918: 0x53EC,
+ 14919: 0x562F,
+ 14920: 0x5851,
+ 14921: 0x5BB5,
+ 14922: 0x5C0F,
+ 14923: 0x5C11,
+ 14924: 0x5DE2,
+ 14925: 0x6240,
+ 14926: 0x6383,
+ 14927: 0x6414,
+ 14928: 0x662D,
+ 14929: 0x68B3,
+ 14930: 0x6CBC,
+ 14931: 0x6D88,
+ 14932: 0x6EAF,
+ 14933: 0x701F,
+ 14934: 0x70A4,
+ 14935: 0x71D2,
+ 14936: 0x7526,
+ 14937: 0x758F,
+ 14938: 0x758E,
+ 14939: 0x7619,
+ 14940: 0x7B11,
+ 14941: 0x7BE0,
+ 14942: 0x7C2B,
+ 14943: 0x7D20,
+ 14944: 0x7D39,
+ 14945: 0x852C,
+ 14946: 0x856D,
+ 14947: 0x8607,
+ 14948: 0x8A34,
+ 14949: 0x900D,
+ 14950: 0x9061,
+ 14951: 0x90B5,
+ 14952: 0x92B7,
+ 14953: 0x97F6,
+ 14954: 0x9A37,
+ 14955: 0x4FD7,
+ 14956: 0x5C6C,
+ 14957: 0x675F,
+ 14958: 0x6D91,
+ 14959: 0x7C9F,
+ 14960: 0x7E8C,
+ 14961: 0x8B16,
+ 14962: 0x8D16,
+ 14963: 0x901F,
+ 14964: 0x5B6B,
+ 14965: 0x5DFD,
+ 14966: 0x640D,
+ 14967: 0x84C0,
+ 14968: 0x905C,
+ 14969: 0x98E1,
+ 14970: 0x7387,
+ 14971: 0x5B8B,
+ 14972: 0x609A,
+ 14973: 0x677E,
+ 14974: 0x6DDE,
+ 14975: 0x8A1F,
+ 14976: 0x8AA6,
+ 14977: 0x9001,
+ 14978: 0x980C,
+ 14979: 0x5237,
+ 14980: 0xF970,
+ 14981: 0x7051,
+ 14982: 0x788E,
+ 14983: 0x9396,
+ 14984: 0x8870,
+ 14985: 0x91D7,
+ 14986: 0x4FEE,
+ 14987: 0x53D7,
+ 14988: 0x55FD,
+ 14989: 0x56DA,
+ 14990: 0x5782,
+ 14991: 0x58FD,
+ 14992: 0x5AC2,
+ 14993: 0x5B88,
+ 14994: 0x5CAB,
+ 14995: 0x5CC0,
+ 14996: 0x5E25,
+ 14997: 0x6101,
+ 14998: 0x620D,
+ 14999: 0x624B,
+ 15000: 0x6388,
+ 15001: 0x641C,
+ 15002: 0x6536,
+ 15003: 0x6578,
+ 15004: 0x6A39,
+ 15005: 0x6B8A,
+ 15006: 0x6C34,
+ 15007: 0x6D19,
+ 15008: 0x6F31,
+ 15009: 0x71E7,
+ 15010: 0x72E9,
+ 15011: 0x7378,
+ 15012: 0x7407,
+ 15013: 0x74B2,
+ 15014: 0x7626,
+ 15015: 0x7761,
+ 15016: 0x79C0,
+ 15017: 0x7A57,
+ 15018: 0x7AEA,
+ 15019: 0x7CB9,
+ 15020: 0x7D8F,
+ 15021: 0x7DAC,
+ 15022: 0x7E61,
+ 15023: 0x7F9E,
+ 15024: 0x8129,
+ 15025: 0x8331,
+ 15026: 0x8490,
+ 15027: 0x84DA,
+ 15028: 0x85EA,
+ 15029: 0x8896,
+ 15030: 0x8AB0,
+ 15031: 0x8B90,
+ 15032: 0x8F38,
+ 15033: 0x9042,
+ 15034: 0x9083,
+ 15035: 0x916C,
+ 15036: 0x9296,
+ 15037: 0x92B9,
+ 15038: 0x968B,
+ 15039: 0x96A7,
+ 15040: 0x96A8,
+ 15041: 0x96D6,
+ 15042: 0x9700,
+ 15043: 0x9808,
+ 15044: 0x9996,
+ 15045: 0x9AD3,
+ 15046: 0x9B1A,
+ 15047: 0x53D4,
+ 15048: 0x587E,
+ 15049: 0x5919,
+ 15050: 0x5B70,
+ 15051: 0x5BBF,
+ 15052: 0x6DD1,
+ 15053: 0x6F5A,
+ 15054: 0x719F,
+ 15055: 0x7421,
+ 15056: 0x74B9,
+ 15057: 0x8085,
+ 15058: 0x83FD,
+ 15059: 0x5DE1,
+ 15060: 0x5F87,
+ 15061: 0x5FAA,
+ 15062: 0x6042,
+ 15063: 0x65EC,
+ 15064: 0x6812,
+ 15065: 0x696F,
+ 15066: 0x6A53,
+ 15067: 0x6B89,
+ 15068: 0x6D35,
+ 15069: 0x6DF3,
+ 15070: 0x73E3,
+ 15071: 0x76FE,
+ 15072: 0x77AC,
+ 15073: 0x7B4D,
+ 15074: 0x7D14,
+ 15075: 0x8123,
+ 15076: 0x821C,
+ 15077: 0x8340,
+ 15078: 0x84F4,
+ 15079: 0x8563,
+ 15080: 0x8A62,
+ 15081: 0x8AC4,
+ 15082: 0x9187,
+ 15083: 0x931E,
+ 15084: 0x9806,
+ 15085: 0x99B4,
+ 15086: 0x620C,
+ 15087: 0x8853,
+ 15088: 0x8FF0,
+ 15089: 0x9265,
+ 15090: 0x5D07,
+ 15091: 0x5D27,
+ 15092: 0x5D69,
+ 15093: 0x745F,
+ 15094: 0x819D,
+ 15095: 0x8768,
+ 15096: 0x6FD5,
+ 15097: 0x62FE,
+ 15098: 0x7FD2,
+ 15099: 0x8936,
+ 15100: 0x8972,
+ 15101: 0x4E1E,
+ 15102: 0x4E58,
+ 15103: 0x50E7,
+ 15104: 0x52DD,
+ 15105: 0x5347,
+ 15106: 0x627F,
+ 15107: 0x6607,
+ 15108: 0x7E69,
+ 15109: 0x8805,
+ 15110: 0x965E,
+ 15111: 0x4F8D,
+ 15112: 0x5319,
+ 15113: 0x5636,
+ 15114: 0x59CB,
+ 15115: 0x5AA4,
+ 15116: 0x5C38,
+ 15117: 0x5C4E,
+ 15118: 0x5C4D,
+ 15119: 0x5E02,
+ 15120: 0x5F11,
+ 15121: 0x6043,
+ 15122: 0x65BD,
+ 15123: 0x662F,
+ 15124: 0x6642,
+ 15125: 0x67BE,
+ 15126: 0x67F4,
+ 15127: 0x731C,
+ 15128: 0x77E2,
+ 15129: 0x793A,
+ 15130: 0x7FC5,
+ 15131: 0x8494,
+ 15132: 0x84CD,
+ 15133: 0x8996,
+ 15134: 0x8A66,
+ 15135: 0x8A69,
+ 15136: 0x8AE1,
+ 15137: 0x8C55,
+ 15138: 0x8C7A,
+ 15139: 0x57F4,
+ 15140: 0x5BD4,
+ 15141: 0x5F0F,
+ 15142: 0x606F,
+ 15143: 0x62ED,
+ 15144: 0x690D,
+ 15145: 0x6B96,
+ 15146: 0x6E5C,
+ 15147: 0x7184,
+ 15148: 0x7BD2,
+ 15149: 0x8755,
+ 15150: 0x8B58,
+ 15151: 0x8EFE,
+ 15152: 0x98DF,
+ 15153: 0x98FE,
+ 15154: 0x4F38,
+ 15155: 0x4F81,
+ 15156: 0x4FE1,
+ 15157: 0x547B,
+ 15158: 0x5A20,
+ 15159: 0x5BB8,
+ 15160: 0x613C,
+ 15161: 0x65B0,
+ 15162: 0x6668,
+ 15163: 0x71FC,
+ 15164: 0x7533,
+ 15165: 0x795E,
+ 15166: 0x7D33,
+ 15167: 0x814E,
+ 15168: 0x81E3,
+ 15169: 0x8398,
+ 15170: 0x85AA,
+ 15171: 0x85CE,
+ 15172: 0x8703,
+ 15173: 0x8A0A,
+ 15174: 0x8EAB,
+ 15175: 0x8F9B,
+ 15176: 0xF971,
+ 15177: 0x8FC5,
+ 15178: 0x5931,
+ 15179: 0x5BA4,
+ 15180: 0x5BE6,
+ 15181: 0x6089,
+ 15182: 0x5BE9,
+ 15183: 0x5C0B,
+ 15184: 0x5FC3,
+ 15185: 0x6C81,
+ 15186: 0xF972,
+ 15187: 0x6DF1,
+ 15188: 0x700B,
+ 15189: 0x751A,
+ 15190: 0x82AF,
+ 15191: 0x8AF6,
+ 15192: 0x4EC0,
+ 15193: 0x5341,
+ 15194: 0xF973,
+ 15195: 0x96D9,
+ 15196: 0x6C0F,
+ 15197: 0x4E9E,
+ 15198: 0x4FC4,
+ 15199: 0x5152,
+ 15200: 0x555E,
+ 15201: 0x5A25,
+ 15202: 0x5CE8,
+ 15203: 0x6211,
+ 15204: 0x7259,
+ 15205: 0x82BD,
+ 15206: 0x83AA,
+ 15207: 0x86FE,
+ 15208: 0x8859,
+ 15209: 0x8A1D,
+ 15210: 0x963F,
+ 15211: 0x96C5,
+ 15212: 0x9913,
+ 15213: 0x9D09,
+ 15214: 0x9D5D,
+ 15215: 0x580A,
+ 15216: 0x5CB3,
+ 15217: 0x5DBD,
+ 15218: 0x5E44,
+ 15219: 0x60E1,
+ 15220: 0x6115,
+ 15221: 0x63E1,
+ 15222: 0x6A02,
+ 15223: 0x6E25,
+ 15224: 0x9102,
+ 15225: 0x9354,
+ 15226: 0x984E,
+ 15227: 0x9C10,
+ 15228: 0x9F77,
+ 15229: 0x5B89,
+ 15230: 0x5CB8,
+ 15231: 0x6309,
+ 15232: 0x664F,
+ 15233: 0x6848,
+ 15234: 0x773C,
+ 15235: 0x96C1,
+ 15236: 0x978D,
+ 15237: 0x9854,
+ 15238: 0x9B9F,
+ 15239: 0x65A1,
+ 15240: 0x8B01,
+ 15241: 0x8ECB,
+ 15242: 0x95BC,
+ 15243: 0x5535,
+ 15244: 0x5CA9,
+ 15245: 0x5DD6,
+ 15246: 0x5EB5,
+ 15247: 0x6697,
+ 15248: 0x764C,
+ 15249: 0x83F4,
+ 15250: 0x95C7,
+ 15251: 0x58D3,
+ 15252: 0x62BC,
+ 15253: 0x72CE,
+ 15254: 0x9D28,
+ 15255: 0x4EF0,
+ 15256: 0x592E,
+ 15257: 0x600F,
+ 15258: 0x663B,
+ 15259: 0x6B83,
+ 15260: 0x79E7,
+ 15261: 0x9D26,
+ 15262: 0x5393,
+ 15263: 0x54C0,
+ 15264: 0x57C3,
+ 15265: 0x5D16,
+ 15266: 0x611B,
+ 15267: 0x66D6,
+ 15268: 0x6DAF,
+ 15269: 0x788D,
+ 15270: 0x827E,
+ 15271: 0x9698,
+ 15272: 0x9744,
+ 15273: 0x5384,
+ 15274: 0x627C,
+ 15275: 0x6396,
+ 15276: 0x6DB2,
+ 15277: 0x7E0A,
+ 15278: 0x814B,
+ 15279: 0x984D,
+ 15280: 0x6AFB,
+ 15281: 0x7F4C,
+ 15282: 0x9DAF,
+ 15283: 0x9E1A,
+ 15284: 0x4E5F,
+ 15285: 0x503B,
+ 15286: 0x51B6,
+ 15287: 0x591C,
+ 15288: 0x60F9,
+ 15289: 0x63F6,
+ 15290: 0x6930,
+ 15291: 0x723A,
+ 15292: 0x8036,
+ 15293: 0xF974,
+ 15294: 0x91CE,
+ 15295: 0x5F31,
+ 15296: 0xF975,
+ 15297: 0xF976,
+ 15298: 0x7D04,
+ 15299: 0x82E5,
+ 15300: 0x846F,
+ 15301: 0x84BB,
+ 15302: 0x85E5,
+ 15303: 0x8E8D,
+ 15304: 0xF977,
+ 15305: 0x4F6F,
+ 15306: 0xF978,
+ 15307: 0xF979,
+ 15308: 0x58E4,
+ 15309: 0x5B43,
+ 15310: 0x6059,
+ 15311: 0x63DA,
+ 15312: 0x6518,
+ 15313: 0x656D,
+ 15314: 0x6698,
+ 15315: 0xF97A,
+ 15316: 0x694A,
+ 15317: 0x6A23,
+ 15318: 0x6D0B,
+ 15319: 0x7001,
+ 15320: 0x716C,
+ 15321: 0x75D2,
+ 15322: 0x760D,
+ 15323: 0x79B3,
+ 15324: 0x7A70,
+ 15325: 0xF97B,
+ 15326: 0x7F8A,
+ 15327: 0xF97C,
+ 15328: 0x8944,
+ 15329: 0xF97D,
+ 15330: 0x8B93,
+ 15331: 0x91C0,
+ 15332: 0x967D,
+ 15333: 0xF97E,
+ 15334: 0x990A,
+ 15335: 0x5704,
+ 15336: 0x5FA1,
+ 15337: 0x65BC,
+ 15338: 0x6F01,
+ 15339: 0x7600,
+ 15340: 0x79A6,
+ 15341: 0x8A9E,
+ 15342: 0x99AD,
+ 15343: 0x9B5A,
+ 15344: 0x9F6C,
+ 15345: 0x5104,
+ 15346: 0x61B6,
+ 15347: 0x6291,
+ 15348: 0x6A8D,
+ 15349: 0x81C6,
+ 15350: 0x5043,
+ 15351: 0x5830,
+ 15352: 0x5F66,
+ 15353: 0x7109,
+ 15354: 0x8A00,
+ 15355: 0x8AFA,
+ 15356: 0x5B7C,
+ 15357: 0x8616,
+ 15358: 0x4FFA,
+ 15359: 0x513C,
+ 15360: 0x56B4,
+ 15361: 0x5944,
+ 15362: 0x63A9,
+ 15363: 0x6DF9,
+ 15364: 0x5DAA,
+ 15365: 0x696D,
+ 15366: 0x5186,
+ 15367: 0x4E88,
+ 15368: 0x4F59,
+ 15369: 0xF97F,
+ 15370: 0xF980,
+ 15371: 0xF981,
+ 15372: 0x5982,
+ 15373: 0xF982,
+ 15374: 0xF983,
+ 15375: 0x6B5F,
+ 15376: 0x6C5D,
+ 15377: 0xF984,
+ 15378: 0x74B5,
+ 15379: 0x7916,
+ 15380: 0xF985,
+ 15381: 0x8207,
+ 15382: 0x8245,
+ 15383: 0x8339,
+ 15384: 0x8F3F,
+ 15385: 0x8F5D,
+ 15386: 0xF986,
+ 15387: 0x9918,
+ 15388: 0xF987,
+ 15389: 0xF988,
+ 15390: 0xF989,
+ 15391: 0x4EA6,
+ 15392: 0xF98A,
+ 15393: 0x57DF,
+ 15394: 0x5F79,
+ 15395: 0x6613,
+ 15396: 0xF98B,
+ 15397: 0xF98C,
+ 15398: 0x75AB,
+ 15399: 0x7E79,
+ 15400: 0x8B6F,
+ 15401: 0xF98D,
+ 15402: 0x9006,
+ 15403: 0x9A5B,
+ 15404: 0x56A5,
+ 15405: 0x5827,
+ 15406: 0x59F8,
+ 15407: 0x5A1F,
+ 15408: 0x5BB4,
+ 15409: 0xF98E,
+ 15410: 0x5EF6,
+ 15411: 0xF98F,
+ 15412: 0xF990,
+ 15413: 0x6350,
+ 15414: 0x633B,
+ 15415: 0xF991,
+ 15416: 0x693D,
+ 15417: 0x6C87,
+ 15418: 0x6CBF,
+ 15419: 0x6D8E,
+ 15420: 0x6D93,
+ 15421: 0x6DF5,
+ 15422: 0x6F14,
+ 15423: 0xF992,
+ 15424: 0x70DF,
+ 15425: 0x7136,
+ 15426: 0x7159,
+ 15427: 0xF993,
+ 15428: 0x71C3,
+ 15429: 0x71D5,
+ 15430: 0xF994,
+ 15431: 0x784F,
+ 15432: 0x786F,
+ 15433: 0xF995,
+ 15434: 0x7B75,
+ 15435: 0x7DE3,
+ 15436: 0xF996,
+ 15437: 0x7E2F,
+ 15438: 0xF997,
+ 15439: 0x884D,
+ 15440: 0x8EDF,
+ 15441: 0xF998,
+ 15442: 0xF999,
+ 15443: 0xF99A,
+ 15444: 0x925B,
+ 15445: 0xF99B,
+ 15446: 0x9CF6,
+ 15447: 0xF99C,
+ 15448: 0xF99D,
+ 15449: 0xF99E,
+ 15450: 0x6085,
+ 15451: 0x6D85,
+ 15452: 0xF99F,
+ 15453: 0x71B1,
+ 15454: 0xF9A0,
+ 15455: 0xF9A1,
+ 15456: 0x95B1,
+ 15457: 0x53AD,
+ 15458: 0xF9A2,
+ 15459: 0xF9A3,
+ 15460: 0xF9A4,
+ 15461: 0x67D3,
+ 15462: 0xF9A5,
+ 15463: 0x708E,
+ 15464: 0x7130,
+ 15465: 0x7430,
+ 15466: 0x8276,
+ 15467: 0x82D2,
+ 15468: 0xF9A6,
+ 15469: 0x95BB,
+ 15470: 0x9AE5,
+ 15471: 0x9E7D,
+ 15472: 0x66C4,
+ 15473: 0xF9A7,
+ 15474: 0x71C1,
+ 15475: 0x8449,
+ 15476: 0xF9A8,
+ 15477: 0xF9A9,
+ 15478: 0x584B,
+ 15479: 0xF9AA,
+ 15480: 0xF9AB,
+ 15481: 0x5DB8,
+ 15482: 0x5F71,
+ 15483: 0xF9AC,
+ 15484: 0x6620,
+ 15485: 0x668E,
+ 15486: 0x6979,
+ 15487: 0x69AE,
+ 15488: 0x6C38,
+ 15489: 0x6CF3,
+ 15490: 0x6E36,
+ 15491: 0x6F41,
+ 15492: 0x6FDA,
+ 15493: 0x701B,
+ 15494: 0x702F,
+ 15495: 0x7150,
+ 15496: 0x71DF,
+ 15497: 0x7370,
+ 15498: 0xF9AD,
+ 15499: 0x745B,
+ 15500: 0xF9AE,
+ 15501: 0x74D4,
+ 15502: 0x76C8,
+ 15503: 0x7A4E,
+ 15504: 0x7E93,
+ 15505: 0xF9AF,
+ 15506: 0xF9B0,
+ 15507: 0x82F1,
+ 15508: 0x8A60,
+ 15509: 0x8FCE,
+ 15510: 0xF9B1,
+ 15511: 0x9348,
+ 15512: 0xF9B2,
+ 15513: 0x9719,
+ 15514: 0xF9B3,
+ 15515: 0xF9B4,
+ 15516: 0x4E42,
+ 15517: 0x502A,
+ 15518: 0xF9B5,
+ 15519: 0x5208,
+ 15520: 0x53E1,
+ 15521: 0x66F3,
+ 15522: 0x6C6D,
+ 15523: 0x6FCA,
+ 15524: 0x730A,
+ 15525: 0x777F,
+ 15526: 0x7A62,
+ 15527: 0x82AE,
+ 15528: 0x85DD,
+ 15529: 0x8602,
+ 15530: 0xF9B6,
+ 15531: 0x88D4,
+ 15532: 0x8A63,
+ 15533: 0x8B7D,
+ 15534: 0x8C6B,
+ 15535: 0xF9B7,
+ 15536: 0x92B3,
+ 15537: 0xF9B8,
+ 15538: 0x9713,
+ 15539: 0x9810,
+ 15540: 0x4E94,
+ 15541: 0x4F0D,
+ 15542: 0x4FC9,
+ 15543: 0x50B2,
+ 15544: 0x5348,
+ 15545: 0x543E,
+ 15546: 0x5433,
+ 15547: 0x55DA,
+ 15548: 0x5862,
+ 15549: 0x58BA,
+ 15550: 0x5967,
+ 15551: 0x5A1B,
+ 15552: 0x5BE4,
+ 15553: 0x609F,
+ 15554: 0xF9B9,
+ 15555: 0x61CA,
+ 15556: 0x6556,
+ 15557: 0x65FF,
+ 15558: 0x6664,
+ 15559: 0x68A7,
+ 15560: 0x6C5A,
+ 15561: 0x6FB3,
+ 15562: 0x70CF,
+ 15563: 0x71AC,
+ 15564: 0x7352,
+ 15565: 0x7B7D,
+ 15566: 0x8708,
+ 15567: 0x8AA4,
+ 15568: 0x9C32,
+ 15569: 0x9F07,
+ 15570: 0x5C4B,
+ 15571: 0x6C83,
+ 15572: 0x7344,
+ 15573: 0x7389,
+ 15574: 0x923A,
+ 15575: 0x6EAB,
+ 15576: 0x7465,
+ 15577: 0x761F,
+ 15578: 0x7A69,
+ 15579: 0x7E15,
+ 15580: 0x860A,
+ 15581: 0x5140,
+ 15582: 0x58C5,
+ 15583: 0x64C1,
+ 15584: 0x74EE,
+ 15585: 0x7515,
+ 15586: 0x7670,
+ 15587: 0x7FC1,
+ 15588: 0x9095,
+ 15589: 0x96CD,
+ 15590: 0x9954,
+ 15591: 0x6E26,
+ 15592: 0x74E6,
+ 15593: 0x7AA9,
+ 15594: 0x7AAA,
+ 15595: 0x81E5,
+ 15596: 0x86D9,
+ 15597: 0x8778,
+ 15598: 0x8A1B,
+ 15599: 0x5A49,
+ 15600: 0x5B8C,
+ 15601: 0x5B9B,
+ 15602: 0x68A1,
+ 15603: 0x6900,
+ 15604: 0x6D63,
+ 15605: 0x73A9,
+ 15606: 0x7413,
+ 15607: 0x742C,
+ 15608: 0x7897,
+ 15609: 0x7DE9,
+ 15610: 0x7FEB,
+ 15611: 0x8118,
+ 15612: 0x8155,
+ 15613: 0x839E,
+ 15614: 0x8C4C,
+ 15615: 0x962E,
+ 15616: 0x9811,
+ 15617: 0x66F0,
+ 15618: 0x5F80,
+ 15619: 0x65FA,
+ 15620: 0x6789,
+ 15621: 0x6C6A,
+ 15622: 0x738B,
+ 15623: 0x502D,
+ 15624: 0x5A03,
+ 15625: 0x6B6A,
+ 15626: 0x77EE,
+ 15627: 0x5916,
+ 15628: 0x5D6C,
+ 15629: 0x5DCD,
+ 15630: 0x7325,
+ 15631: 0x754F,
+ 15632: 0xF9BA,
+ 15633: 0xF9BB,
+ 15634: 0x50E5,
+ 15635: 0x51F9,
+ 15636: 0x582F,
+ 15637: 0x592D,
+ 15638: 0x5996,
+ 15639: 0x59DA,
+ 15640: 0x5BE5,
+ 15641: 0xF9BC,
+ 15642: 0xF9BD,
+ 15643: 0x5DA2,
+ 15644: 0x62D7,
+ 15645: 0x6416,
+ 15646: 0x6493,
+ 15647: 0x64FE,
+ 15648: 0xF9BE,
+ 15649: 0x66DC,
+ 15650: 0xF9BF,
+ 15651: 0x6A48,
+ 15652: 0xF9C0,
+ 15653: 0x71FF,
+ 15654: 0x7464,
+ 15655: 0xF9C1,
+ 15656: 0x7A88,
+ 15657: 0x7AAF,
+ 15658: 0x7E47,
+ 15659: 0x7E5E,
+ 15660: 0x8000,
+ 15661: 0x8170,
+ 15662: 0xF9C2,
+ 15663: 0x87EF,
+ 15664: 0x8981,
+ 15665: 0x8B20,
+ 15666: 0x9059,
+ 15667: 0xF9C3,
+ 15668: 0x9080,
+ 15669: 0x9952,
+ 15670: 0x617E,
+ 15671: 0x6B32,
+ 15672: 0x6D74,
+ 15673: 0x7E1F,
+ 15674: 0x8925,
+ 15675: 0x8FB1,
+ 15676: 0x4FD1,
+ 15677: 0x50AD,
+ 15678: 0x5197,
+ 15679: 0x52C7,
+ 15680: 0x57C7,
+ 15681: 0x5889,
+ 15682: 0x5BB9,
+ 15683: 0x5EB8,
+ 15684: 0x6142,
+ 15685: 0x6995,
+ 15686: 0x6D8C,
+ 15687: 0x6E67,
+ 15688: 0x6EB6,
+ 15689: 0x7194,
+ 15690: 0x7462,
+ 15691: 0x7528,
+ 15692: 0x752C,
+ 15693: 0x8073,
+ 15694: 0x8338,
+ 15695: 0x84C9,
+ 15696: 0x8E0A,
+ 15697: 0x9394,
+ 15698: 0x93DE,
+ 15699: 0xF9C4,
+ 15700: 0x4E8E,
+ 15701: 0x4F51,
+ 15702: 0x5076,
+ 15703: 0x512A,
+ 15704: 0x53C8,
+ 15705: 0x53CB,
+ 15706: 0x53F3,
+ 15707: 0x5B87,
+ 15708: 0x5BD3,
+ 15709: 0x5C24,
+ 15710: 0x611A,
+ 15711: 0x6182,
+ 15712: 0x65F4,
+ 15713: 0x725B,
+ 15714: 0x7397,
+ 15715: 0x7440,
+ 15716: 0x76C2,
+ 15717: 0x7950,
+ 15718: 0x7991,
+ 15719: 0x79B9,
+ 15720: 0x7D06,
+ 15721: 0x7FBD,
+ 15722: 0x828B,
+ 15723: 0x85D5,
+ 15724: 0x865E,
+ 15725: 0x8FC2,
+ 15726: 0x9047,
+ 15727: 0x90F5,
+ 15728: 0x91EA,
+ 15729: 0x9685,
+ 15730: 0x96E8,
+ 15731: 0x96E9,
+ 15732: 0x52D6,
+ 15733: 0x5F67,
+ 15734: 0x65ED,
+ 15735: 0x6631,
+ 15736: 0x682F,
+ 15737: 0x715C,
+ 15738: 0x7A36,
+ 15739: 0x90C1,
+ 15740: 0x980A,
+ 15741: 0x4E91,
+ 15742: 0xF9C5,
+ 15743: 0x6A52,
+ 15744: 0x6B9E,
+ 15745: 0x6F90,
+ 15746: 0x7189,
+ 15747: 0x8018,
+ 15748: 0x82B8,
+ 15749: 0x8553,
+ 15750: 0x904B,
+ 15751: 0x9695,
+ 15752: 0x96F2,
+ 15753: 0x97FB,
+ 15754: 0x851A,
+ 15755: 0x9B31,
+ 15756: 0x4E90,
+ 15757: 0x718A,
+ 15758: 0x96C4,
+ 15759: 0x5143,
+ 15760: 0x539F,
+ 15761: 0x54E1,
+ 15762: 0x5713,
+ 15763: 0x5712,
+ 15764: 0x57A3,
+ 15765: 0x5A9B,
+ 15766: 0x5AC4,
+ 15767: 0x5BC3,
+ 15768: 0x6028,
+ 15769: 0x613F,
+ 15770: 0x63F4,
+ 15771: 0x6C85,
+ 15772: 0x6D39,
+ 15773: 0x6E72,
+ 15774: 0x6E90,
+ 15775: 0x7230,
+ 15776: 0x733F,
+ 15777: 0x7457,
+ 15778: 0x82D1,
+ 15779: 0x8881,
+ 15780: 0x8F45,
+ 15781: 0x9060,
+ 15782: 0xF9C6,
+ 15783: 0x9662,
+ 15784: 0x9858,
+ 15785: 0x9D1B,
+ 15786: 0x6708,
+ 15787: 0x8D8A,
+ 15788: 0x925E,
+ 15789: 0x4F4D,
+ 15790: 0x5049,
+ 15791: 0x50DE,
+ 15792: 0x5371,
+ 15793: 0x570D,
+ 15794: 0x59D4,
+ 15795: 0x5A01,
+ 15796: 0x5C09,
+ 15797: 0x6170,
+ 15798: 0x6690,
+ 15799: 0x6E2D,
+ 15800: 0x7232,
+ 15801: 0x744B,
+ 15802: 0x7DEF,
+ 15803: 0x80C3,
+ 15804: 0x840E,
+ 15805: 0x8466,
+ 15806: 0x853F,
+ 15807: 0x875F,
+ 15808: 0x885B,
+ 15809: 0x8918,
+ 15810: 0x8B02,
+ 15811: 0x9055,
+ 15812: 0x97CB,
+ 15813: 0x9B4F,
+ 15814: 0x4E73,
+ 15815: 0x4F91,
+ 15816: 0x5112,
+ 15817: 0x516A,
+ 15818: 0xF9C7,
+ 15819: 0x552F,
+ 15820: 0x55A9,
+ 15821: 0x5B7A,
+ 15822: 0x5BA5,
+ 15823: 0x5E7C,
+ 15824: 0x5E7D,
+ 15825: 0x5EBE,
+ 15826: 0x60A0,
+ 15827: 0x60DF,
+ 15828: 0x6108,
+ 15829: 0x6109,
+ 15830: 0x63C4,
+ 15831: 0x6538,
+ 15832: 0x6709,
+ 15833: 0xF9C8,
+ 15834: 0x67D4,
+ 15835: 0x67DA,
+ 15836: 0xF9C9,
+ 15837: 0x6961,
+ 15838: 0x6962,
+ 15839: 0x6CB9,
+ 15840: 0x6D27,
+ 15841: 0xF9CA,
+ 15842: 0x6E38,
+ 15843: 0xF9CB,
+ 15844: 0x6FE1,
+ 15845: 0x7336,
+ 15846: 0x7337,
+ 15847: 0xF9CC,
+ 15848: 0x745C,
+ 15849: 0x7531,
+ 15850: 0xF9CD,
+ 15851: 0x7652,
+ 15852: 0xF9CE,
+ 15853: 0xF9CF,
+ 15854: 0x7DAD,
+ 15855: 0x81FE,
+ 15856: 0x8438,
+ 15857: 0x88D5,
+ 15858: 0x8A98,
+ 15859: 0x8ADB,
+ 15860: 0x8AED,
+ 15861: 0x8E30,
+ 15862: 0x8E42,
+ 15863: 0x904A,
+ 15864: 0x903E,
+ 15865: 0x907A,
+ 15866: 0x9149,
+ 15867: 0x91C9,
+ 15868: 0x936E,
+ 15869: 0xF9D0,
+ 15870: 0xF9D1,
+ 15871: 0x5809,
+ 15872: 0xF9D2,
+ 15873: 0x6BD3,
+ 15874: 0x8089,
+ 15875: 0x80B2,
+ 15876: 0xF9D3,
+ 15877: 0xF9D4,
+ 15878: 0x5141,
+ 15879: 0x596B,
+ 15880: 0x5C39,
+ 15881: 0xF9D5,
+ 15882: 0xF9D6,
+ 15883: 0x6F64,
+ 15884: 0x73A7,
+ 15885: 0x80E4,
+ 15886: 0x8D07,
+ 15887: 0xF9D7,
+ 15888: 0x9217,
+ 15889: 0x958F,
+ 15890: 0xF9D8,
+ 15891: 0xF9D9,
+ 15892: 0xF9DA,
+ 15893: 0xF9DB,
+ 15894: 0x807F,
+ 15895: 0x620E,
+ 15896: 0x701C,
+ 15897: 0x7D68,
+ 15898: 0x878D,
+ 15899: 0xF9DC,
+ 15900: 0x57A0,
+ 15901: 0x6069,
+ 15902: 0x6147,
+ 15903: 0x6BB7,
+ 15904: 0x8ABE,
+ 15905: 0x9280,
+ 15906: 0x96B1,
+ 15907: 0x4E59,
+ 15908: 0x541F,
+ 15909: 0x6DEB,
+ 15910: 0x852D,
+ 15911: 0x9670,
+ 15912: 0x97F3,
+ 15913: 0x98EE,
+ 15914: 0x63D6,
+ 15915: 0x6CE3,
+ 15916: 0x9091,
+ 15917: 0x51DD,
+ 15918: 0x61C9,
+ 15919: 0x81BA,
+ 15920: 0x9DF9,
+ 15921: 0x4F9D,
+ 15922: 0x501A,
+ 15923: 0x5100,
+ 15924: 0x5B9C,
+ 15925: 0x610F,
+ 15926: 0x61FF,
+ 15927: 0x64EC,
+ 15928: 0x6905,
+ 15929: 0x6BC5,
+ 15930: 0x7591,
+ 15931: 0x77E3,
+ 15932: 0x7FA9,
+ 15933: 0x8264,
+ 15934: 0x858F,
+ 15935: 0x87FB,
+ 15936: 0x8863,
+ 15937: 0x8ABC,
+ 15938: 0x8B70,
+ 15939: 0x91AB,
+ 15940: 0x4E8C,
+ 15941: 0x4EE5,
+ 15942: 0x4F0A,
+ 15943: 0xF9DD,
+ 15944: 0xF9DE,
+ 15945: 0x5937,
+ 15946: 0x59E8,
+ 15947: 0xF9DF,
+ 15948: 0x5DF2,
+ 15949: 0x5F1B,
+ 15950: 0x5F5B,
+ 15951: 0x6021,
+ 15952: 0xF9E0,
+ 15953: 0xF9E1,
+ 15954: 0xF9E2,
+ 15955: 0xF9E3,
+ 15956: 0x723E,
+ 15957: 0x73E5,
+ 15958: 0xF9E4,
+ 15959: 0x7570,
+ 15960: 0x75CD,
+ 15961: 0xF9E5,
+ 15962: 0x79FB,
+ 15963: 0xF9E6,
+ 15964: 0x800C,
+ 15965: 0x8033,
+ 15966: 0x8084,
+ 15967: 0x82E1,
+ 15968: 0x8351,
+ 15969: 0xF9E7,
+ 15970: 0xF9E8,
+ 15971: 0x8CBD,
+ 15972: 0x8CB3,
+ 15973: 0x9087,
+ 15974: 0xF9E9,
+ 15975: 0xF9EA,
+ 15976: 0x98F4,
+ 15977: 0x990C,
+ 15978: 0xF9EB,
+ 15979: 0xF9EC,
+ 15980: 0x7037,
+ 15981: 0x76CA,
+ 15982: 0x7FCA,
+ 15983: 0x7FCC,
+ 15984: 0x7FFC,
+ 15985: 0x8B1A,
+ 15986: 0x4EBA,
+ 15987: 0x4EC1,
+ 15988: 0x5203,
+ 15989: 0x5370,
+ 15990: 0xF9ED,
+ 15991: 0x54BD,
+ 15992: 0x56E0,
+ 15993: 0x59FB,
+ 15994: 0x5BC5,
+ 15995: 0x5F15,
+ 15996: 0x5FCD,
+ 15997: 0x6E6E,
+ 15998: 0xF9EE,
+ 15999: 0xF9EF,
+ 16000: 0x7D6A,
+ 16001: 0x8335,
+ 16002: 0xF9F0,
+ 16003: 0x8693,
+ 16004: 0x8A8D,
+ 16005: 0xF9F1,
+ 16006: 0x976D,
+ 16007: 0x9777,
+ 16008: 0xF9F2,
+ 16009: 0xF9F3,
+ 16010: 0x4E00,
+ 16011: 0x4F5A,
+ 16012: 0x4F7E,
+ 16013: 0x58F9,
+ 16014: 0x65E5,
+ 16015: 0x6EA2,
+ 16016: 0x9038,
+ 16017: 0x93B0,
+ 16018: 0x99B9,
+ 16019: 0x4EFB,
+ 16020: 0x58EC,
+ 16021: 0x598A,
+ 16022: 0x59D9,
+ 16023: 0x6041,
+ 16024: 0xF9F4,
+ 16025: 0xF9F5,
+ 16026: 0x7A14,
+ 16027: 0xF9F6,
+ 16028: 0x834F,
+ 16029: 0x8CC3,
+ 16030: 0x5165,
+ 16031: 0x5344,
+ 16032: 0xF9F7,
+ 16033: 0xF9F8,
+ 16034: 0xF9F9,
+ 16035: 0x4ECD,
+ 16036: 0x5269,
+ 16037: 0x5B55,
+ 16038: 0x82BF,
+ 16039: 0x4ED4,
+ 16040: 0x523A,
+ 16041: 0x54A8,
+ 16042: 0x59C9,
+ 16043: 0x59FF,
+ 16044: 0x5B50,
+ 16045: 0x5B57,
+ 16046: 0x5B5C,
+ 16047: 0x6063,
+ 16048: 0x6148,
+ 16049: 0x6ECB,
+ 16050: 0x7099,
+ 16051: 0x716E,
+ 16052: 0x7386,
+ 16053: 0x74F7,
+ 16054: 0x75B5,
+ 16055: 0x78C1,
+ 16056: 0x7D2B,
+ 16057: 0x8005,
+ 16058: 0x81EA,
+ 16059: 0x8328,
+ 16060: 0x8517,
+ 16061: 0x85C9,
+ 16062: 0x8AEE,
+ 16063: 0x8CC7,
+ 16064: 0x96CC,
+ 16065: 0x4F5C,
+ 16066: 0x52FA,
+ 16067: 0x56BC,
+ 16068: 0x65AB,
+ 16069: 0x6628,
+ 16070: 0x707C,
+ 16071: 0x70B8,
+ 16072: 0x7235,
+ 16073: 0x7DBD,
+ 16074: 0x828D,
+ 16075: 0x914C,
+ 16076: 0x96C0,
+ 16077: 0x9D72,
+ 16078: 0x5B71,
+ 16079: 0x68E7,
+ 16080: 0x6B98,
+ 16081: 0x6F7A,
+ 16082: 0x76DE,
+ 16083: 0x5C91,
+ 16084: 0x66AB,
+ 16085: 0x6F5B,
+ 16086: 0x7BB4,
+ 16087: 0x7C2A,
+ 16088: 0x8836,
+ 16089: 0x96DC,
+ 16090: 0x4E08,
+ 16091: 0x4ED7,
+ 16092: 0x5320,
+ 16093: 0x5834,
+ 16094: 0x58BB,
+ 16095: 0x58EF,
+ 16096: 0x596C,
+ 16097: 0x5C07,
+ 16098: 0x5E33,
+ 16099: 0x5E84,
+ 16100: 0x5F35,
+ 16101: 0x638C,
+ 16102: 0x66B2,
+ 16103: 0x6756,
+ 16104: 0x6A1F,
+ 16105: 0x6AA3,
+ 16106: 0x6B0C,
+ 16107: 0x6F3F,
+ 16108: 0x7246,
+ 16109: 0xF9FA,
+ 16110: 0x7350,
+ 16111: 0x748B,
+ 16112: 0x7AE0,
+ 16113: 0x7CA7,
+ 16114: 0x8178,
+ 16115: 0x81DF,
+ 16116: 0x81E7,
+ 16117: 0x838A,
+ 16118: 0x846C,
+ 16119: 0x8523,
+ 16120: 0x8594,
+ 16121: 0x85CF,
+ 16122: 0x88DD,
+ 16123: 0x8D13,
+ 16124: 0x91AC,
+ 16125: 0x9577,
+ 16126: 0x969C,
+ 16127: 0x518D,
+ 16128: 0x54C9,
+ 16129: 0x5728,
+ 16130: 0x5BB0,
+ 16131: 0x624D,
+ 16132: 0x6750,
+ 16133: 0x683D,
+ 16134: 0x6893,
+ 16135: 0x6E3D,
+ 16136: 0x6ED3,
+ 16137: 0x707D,
+ 16138: 0x7E21,
+ 16139: 0x88C1,
+ 16140: 0x8CA1,
+ 16141: 0x8F09,
+ 16142: 0x9F4B,
+ 16143: 0x9F4E,
+ 16144: 0x722D,
+ 16145: 0x7B8F,
+ 16146: 0x8ACD,
+ 16147: 0x931A,
+ 16148: 0x4F47,
+ 16149: 0x4F4E,
+ 16150: 0x5132,
+ 16151: 0x5480,
+ 16152: 0x59D0,
+ 16153: 0x5E95,
+ 16154: 0x62B5,
+ 16155: 0x6775,
+ 16156: 0x696E,
+ 16157: 0x6A17,
+ 16158: 0x6CAE,
+ 16159: 0x6E1A,
+ 16160: 0x72D9,
+ 16161: 0x732A,
+ 16162: 0x75BD,
+ 16163: 0x7BB8,
+ 16164: 0x7D35,
+ 16165: 0x82E7,
+ 16166: 0x83F9,
+ 16167: 0x8457,
+ 16168: 0x85F7,
+ 16169: 0x8A5B,
+ 16170: 0x8CAF,
+ 16171: 0x8E87,
+ 16172: 0x9019,
+ 16173: 0x90B8,
+ 16174: 0x96CE,
+ 16175: 0x9F5F,
+ 16176: 0x52E3,
+ 16177: 0x540A,
+ 16178: 0x5AE1,
+ 16179: 0x5BC2,
+ 16180: 0x6458,
+ 16181: 0x6575,
+ 16182: 0x6EF4,
+ 16183: 0x72C4,
+ 16184: 0xF9FB,
+ 16185: 0x7684,
+ 16186: 0x7A4D,
+ 16187: 0x7B1B,
+ 16188: 0x7C4D,
+ 16189: 0x7E3E,
+ 16190: 0x7FDF,
+ 16191: 0x837B,
+ 16192: 0x8B2B,
+ 16193: 0x8CCA,
+ 16194: 0x8D64,
+ 16195: 0x8DE1,
+ 16196: 0x8E5F,
+ 16197: 0x8FEA,
+ 16198: 0x8FF9,
+ 16199: 0x9069,
+ 16200: 0x93D1,
+ 16201: 0x4F43,
+ 16202: 0x4F7A,
+ 16203: 0x50B3,
+ 16204: 0x5168,
+ 16205: 0x5178,
+ 16206: 0x524D,
+ 16207: 0x526A,
+ 16208: 0x5861,
+ 16209: 0x587C,
+ 16210: 0x5960,
+ 16211: 0x5C08,
+ 16212: 0x5C55,
+ 16213: 0x5EDB,
+ 16214: 0x609B,
+ 16215: 0x6230,
+ 16216: 0x6813,
+ 16217: 0x6BBF,
+ 16218: 0x6C08,
+ 16219: 0x6FB1,
+ 16220: 0x714E,
+ 16221: 0x7420,
+ 16222: 0x7530,
+ 16223: 0x7538,
+ 16224: 0x7551,
+ 16225: 0x7672,
+ 16226: 0x7B4C,
+ 16227: 0x7B8B,
+ 16228: 0x7BAD,
+ 16229: 0x7BC6,
+ 16230: 0x7E8F,
+ 16231: 0x8A6E,
+ 16232: 0x8F3E,
+ 16233: 0x8F49,
+ 16234: 0x923F,
+ 16235: 0x9293,
+ 16236: 0x9322,
+ 16237: 0x942B,
+ 16238: 0x96FB,
+ 16239: 0x985A,
+ 16240: 0x986B,
+ 16241: 0x991E,
+ 16242: 0x5207,
+ 16243: 0x622A,
+ 16244: 0x6298,
+ 16245: 0x6D59,
+ 16246: 0x7664,
+ 16247: 0x7ACA,
+ 16248: 0x7BC0,
+ 16249: 0x7D76,
+ 16250: 0x5360,
+ 16251: 0x5CBE,
+ 16252: 0x5E97,
+ 16253: 0x6F38,
+ 16254: 0x70B9,
+ 16255: 0x7C98,
+ 16256: 0x9711,
+ 16257: 0x9B8E,
+ 16258: 0x9EDE,
+ 16259: 0x63A5,
+ 16260: 0x647A,
+ 16261: 0x8776,
+ 16262: 0x4E01,
+ 16263: 0x4E95,
+ 16264: 0x4EAD,
+ 16265: 0x505C,
+ 16266: 0x5075,
+ 16267: 0x5448,
+ 16268: 0x59C3,
+ 16269: 0x5B9A,
+ 16270: 0x5E40,
+ 16271: 0x5EAD,
+ 16272: 0x5EF7,
+ 16273: 0x5F81,
+ 16274: 0x60C5,
+ 16275: 0x633A,
+ 16276: 0x653F,
+ 16277: 0x6574,
+ 16278: 0x65CC,
+ 16279: 0x6676,
+ 16280: 0x6678,
+ 16281: 0x67FE,
+ 16282: 0x6968,
+ 16283: 0x6A89,
+ 16284: 0x6B63,
+ 16285: 0x6C40,
+ 16286: 0x6DC0,
+ 16287: 0x6DE8,
+ 16288: 0x6E1F,
+ 16289: 0x6E5E,
+ 16290: 0x701E,
+ 16291: 0x70A1,
+ 16292: 0x738E,
+ 16293: 0x73FD,
+ 16294: 0x753A,
+ 16295: 0x775B,
+ 16296: 0x7887,
+ 16297: 0x798E,
+ 16298: 0x7A0B,
+ 16299: 0x7A7D,
+ 16300: 0x7CBE,
+ 16301: 0x7D8E,
+ 16302: 0x8247,
+ 16303: 0x8A02,
+ 16304: 0x8AEA,
+ 16305: 0x8C9E,
+ 16306: 0x912D,
+ 16307: 0x914A,
+ 16308: 0x91D8,
+ 16309: 0x9266,
+ 16310: 0x92CC,
+ 16311: 0x9320,
+ 16312: 0x9706,
+ 16313: 0x9756,
+ 16314: 0x975C,
+ 16315: 0x9802,
+ 16316: 0x9F0E,
+ 16317: 0x5236,
+ 16318: 0x5291,
+ 16319: 0x557C,
+ 16320: 0x5824,
+ 16321: 0x5E1D,
+ 16322: 0x5F1F,
+ 16323: 0x608C,
+ 16324: 0x63D0,
+ 16325: 0x68AF,
+ 16326: 0x6FDF,
+ 16327: 0x796D,
+ 16328: 0x7B2C,
+ 16329: 0x81CD,
+ 16330: 0x85BA,
+ 16331: 0x88FD,
+ 16332: 0x8AF8,
+ 16333: 0x8E44,
+ 16334: 0x918D,
+ 16335: 0x9664,
+ 16336: 0x969B,
+ 16337: 0x973D,
+ 16338: 0x984C,
+ 16339: 0x9F4A,
+ 16340: 0x4FCE,
+ 16341: 0x5146,
+ 16342: 0x51CB,
+ 16343: 0x52A9,
+ 16344: 0x5632,
+ 16345: 0x5F14,
+ 16346: 0x5F6B,
+ 16347: 0x63AA,
+ 16348: 0x64CD,
+ 16349: 0x65E9,
+ 16350: 0x6641,
+ 16351: 0x66FA,
+ 16352: 0x66F9,
+ 16353: 0x671D,
+ 16354: 0x689D,
+ 16355: 0x68D7,
+ 16356: 0x69FD,
+ 16357: 0x6F15,
+ 16358: 0x6F6E,
+ 16359: 0x7167,
+ 16360: 0x71E5,
+ 16361: 0x722A,
+ 16362: 0x74AA,
+ 16363: 0x773A,
+ 16364: 0x7956,
+ 16365: 0x795A,
+ 16366: 0x79DF,
+ 16367: 0x7A20,
+ 16368: 0x7A95,
+ 16369: 0x7C97,
+ 16370: 0x7CDF,
+ 16371: 0x7D44,
+ 16372: 0x7E70,
+ 16373: 0x8087,
+ 16374: 0x85FB,
+ 16375: 0x86A4,
+ 16376: 0x8A54,
+ 16377: 0x8ABF,
+ 16378: 0x8D99,
+ 16379: 0x8E81,
+ 16380: 0x9020,
+ 16381: 0x906D,
+ 16382: 0x91E3,
+ 16383: 0x963B,
+ 16384: 0x96D5,
+ 16385: 0x9CE5,
+ 16386: 0x65CF,
+ 16387: 0x7C07,
+ 16388: 0x8DB3,
+ 16389: 0x93C3,
+ 16390: 0x5B58,
+ 16391: 0x5C0A,
+ 16392: 0x5352,
+ 16393: 0x62D9,
+ 16394: 0x731D,
+ 16395: 0x5027,
+ 16396: 0x5B97,
+ 16397: 0x5F9E,
+ 16398: 0x60B0,
+ 16399: 0x616B,
+ 16400: 0x68D5,
+ 16401: 0x6DD9,
+ 16402: 0x742E,
+ 16403: 0x7A2E,
+ 16404: 0x7D42,
+ 16405: 0x7D9C,
+ 16406: 0x7E31,
+ 16407: 0x816B,
+ 16408: 0x8E2A,
+ 16409: 0x8E35,
+ 16410: 0x937E,
+ 16411: 0x9418,
+ 16412: 0x4F50,
+ 16413: 0x5750,
+ 16414: 0x5DE6,
+ 16415: 0x5EA7,
+ 16416: 0x632B,
+ 16417: 0x7F6A,
+ 16418: 0x4E3B,
+ 16419: 0x4F4F,
+ 16420: 0x4F8F,
+ 16421: 0x505A,
+ 16422: 0x59DD,
+ 16423: 0x80C4,
+ 16424: 0x546A,
+ 16425: 0x5468,
+ 16426: 0x55FE,
+ 16427: 0x594F,
+ 16428: 0x5B99,
+ 16429: 0x5DDE,
+ 16430: 0x5EDA,
+ 16431: 0x665D,
+ 16432: 0x6731,
+ 16433: 0x67F1,
+ 16434: 0x682A,
+ 16435: 0x6CE8,
+ 16436: 0x6D32,
+ 16437: 0x6E4A,
+ 16438: 0x6F8D,
+ 16439: 0x70B7,
+ 16440: 0x73E0,
+ 16441: 0x7587,
+ 16442: 0x7C4C,
+ 16443: 0x7D02,
+ 16444: 0x7D2C,
+ 16445: 0x7DA2,
+ 16446: 0x821F,
+ 16447: 0x86DB,
+ 16448: 0x8A3B,
+ 16449: 0x8A85,
+ 16450: 0x8D70,
+ 16451: 0x8E8A,
+ 16452: 0x8F33,
+ 16453: 0x9031,
+ 16454: 0x914E,
+ 16455: 0x9152,
+ 16456: 0x9444,
+ 16457: 0x99D0,
+ 16458: 0x7AF9,
+ 16459: 0x7CA5,
+ 16460: 0x4FCA,
+ 16461: 0x5101,
+ 16462: 0x51C6,
+ 16463: 0x57C8,
+ 16464: 0x5BEF,
+ 16465: 0x5CFB,
+ 16466: 0x6659,
+ 16467: 0x6A3D,
+ 16468: 0x6D5A,
+ 16469: 0x6E96,
+ 16470: 0x6FEC,
+ 16471: 0x710C,
+ 16472: 0x756F,
+ 16473: 0x7AE3,
+ 16474: 0x8822,
+ 16475: 0x9021,
+ 16476: 0x9075,
+ 16477: 0x96CB,
+ 16478: 0x99FF,
+ 16479: 0x8301,
+ 16480: 0x4E2D,
+ 16481: 0x4EF2,
+ 16482: 0x8846,
+ 16483: 0x91CD,
+ 16484: 0x537D,
+ 16485: 0x6ADB,
+ 16486: 0x696B,
+ 16487: 0x6C41,
+ 16488: 0x847A,
+ 16489: 0x589E,
+ 16490: 0x618E,
+ 16491: 0x66FE,
+ 16492: 0x62EF,
+ 16493: 0x70DD,
+ 16494: 0x7511,
+ 16495: 0x75C7,
+ 16496: 0x7E52,
+ 16497: 0x84B8,
+ 16498: 0x8B49,
+ 16499: 0x8D08,
+ 16500: 0x4E4B,
+ 16501: 0x53EA,
+ 16502: 0x54AB,
+ 16503: 0x5730,
+ 16504: 0x5740,
+ 16505: 0x5FD7,
+ 16506: 0x6301,
+ 16507: 0x6307,
+ 16508: 0x646F,
+ 16509: 0x652F,
+ 16510: 0x65E8,
+ 16511: 0x667A,
+ 16512: 0x679D,
+ 16513: 0x67B3,
+ 16514: 0x6B62,
+ 16515: 0x6C60,
+ 16516: 0x6C9A,
+ 16517: 0x6F2C,
+ 16518: 0x77E5,
+ 16519: 0x7825,
+ 16520: 0x7949,
+ 16521: 0x7957,
+ 16522: 0x7D19,
+ 16523: 0x80A2,
+ 16524: 0x8102,
+ 16525: 0x81F3,
+ 16526: 0x829D,
+ 16527: 0x82B7,
+ 16528: 0x8718,
+ 16529: 0x8A8C,
+ 16530: 0xF9FC,
+ 16531: 0x8D04,
+ 16532: 0x8DBE,
+ 16533: 0x9072,
+ 16534: 0x76F4,
+ 16535: 0x7A19,
+ 16536: 0x7A37,
+ 16537: 0x7E54,
+ 16538: 0x8077,
+ 16539: 0x5507,
+ 16540: 0x55D4,
+ 16541: 0x5875,
+ 16542: 0x632F,
+ 16543: 0x6422,
+ 16544: 0x6649,
+ 16545: 0x664B,
+ 16546: 0x686D,
+ 16547: 0x699B,
+ 16548: 0x6B84,
+ 16549: 0x6D25,
+ 16550: 0x6EB1,
+ 16551: 0x73CD,
+ 16552: 0x7468,
+ 16553: 0x74A1,
+ 16554: 0x755B,
+ 16555: 0x75B9,
+ 16556: 0x76E1,
+ 16557: 0x771E,
+ 16558: 0x778B,
+ 16559: 0x79E6,
+ 16560: 0x7E09,
+ 16561: 0x7E1D,
+ 16562: 0x81FB,
+ 16563: 0x852F,
+ 16564: 0x8897,
+ 16565: 0x8A3A,
+ 16566: 0x8CD1,
+ 16567: 0x8EEB,
+ 16568: 0x8FB0,
+ 16569: 0x9032,
+ 16570: 0x93AD,
+ 16571: 0x9663,
+ 16572: 0x9673,
+ 16573: 0x9707,
+ 16574: 0x4F84,
+ 16575: 0x53F1,
+ 16576: 0x59EA,
+ 16577: 0x5AC9,
+ 16578: 0x5E19,
+ 16579: 0x684E,
+ 16580: 0x74C6,
+ 16581: 0x75BE,
+ 16582: 0x79E9,
+ 16583: 0x7A92,
+ 16584: 0x81A3,
+ 16585: 0x86ED,
+ 16586: 0x8CEA,
+ 16587: 0x8DCC,
+ 16588: 0x8FED,
+ 16589: 0x659F,
+ 16590: 0x6715,
+ 16591: 0xF9FD,
+ 16592: 0x57F7,
+ 16593: 0x6F57,
+ 16594: 0x7DDD,
+ 16595: 0x8F2F,
+ 16596: 0x93F6,
+ 16597: 0x96C6,
+ 16598: 0x5FB5,
+ 16599: 0x61F2,
+ 16600: 0x6F84,
+ 16601: 0x4E14,
+ 16602: 0x4F98,
+ 16603: 0x501F,
+ 16604: 0x53C9,
+ 16605: 0x55DF,
+ 16606: 0x5D6F,
+ 16607: 0x5DEE,
+ 16608: 0x6B21,
+ 16609: 0x6B64,
+ 16610: 0x78CB,
+ 16611: 0x7B9A,
+ 16612: 0xF9FE,
+ 16613: 0x8E49,
+ 16614: 0x8ECA,
+ 16615: 0x906E,
+ 16616: 0x6349,
+ 16617: 0x643E,
+ 16618: 0x7740,
+ 16619: 0x7A84,
+ 16620: 0x932F,
+ 16621: 0x947F,
+ 16622: 0x9F6A,
+ 16623: 0x64B0,
+ 16624: 0x6FAF,
+ 16625: 0x71E6,
+ 16626: 0x74A8,
+ 16627: 0x74DA,
+ 16628: 0x7AC4,
+ 16629: 0x7C12,
+ 16630: 0x7E82,
+ 16631: 0x7CB2,
+ 16632: 0x7E98,
+ 16633: 0x8B9A,
+ 16634: 0x8D0A,
+ 16635: 0x947D,
+ 16636: 0x9910,
+ 16637: 0x994C,
+ 16638: 0x5239,
+ 16639: 0x5BDF,
+ 16640: 0x64E6,
+ 16641: 0x672D,
+ 16642: 0x7D2E,
+ 16643: 0x50ED,
+ 16644: 0x53C3,
+ 16645: 0x5879,
+ 16646: 0x6158,
+ 16647: 0x6159,
+ 16648: 0x61FA,
+ 16649: 0x65AC,
+ 16650: 0x7AD9,
+ 16651: 0x8B92,
+ 16652: 0x8B96,
+ 16653: 0x5009,
+ 16654: 0x5021,
+ 16655: 0x5275,
+ 16656: 0x5531,
+ 16657: 0x5A3C,
+ 16658: 0x5EE0,
+ 16659: 0x5F70,
+ 16660: 0x6134,
+ 16661: 0x655E,
+ 16662: 0x660C,
+ 16663: 0x6636,
+ 16664: 0x66A2,
+ 16665: 0x69CD,
+ 16666: 0x6EC4,
+ 16667: 0x6F32,
+ 16668: 0x7316,
+ 16669: 0x7621,
+ 16670: 0x7A93,
+ 16671: 0x8139,
+ 16672: 0x8259,
+ 16673: 0x83D6,
+ 16674: 0x84BC,
+ 16675: 0x50B5,
+ 16676: 0x57F0,
+ 16677: 0x5BC0,
+ 16678: 0x5BE8,
+ 16679: 0x5F69,
+ 16680: 0x63A1,
+ 16681: 0x7826,
+ 16682: 0x7DB5,
+ 16683: 0x83DC,
+ 16684: 0x8521,
+ 16685: 0x91C7,
+ 16686: 0x91F5,
+ 16687: 0x518A,
+ 16688: 0x67F5,
+ 16689: 0x7B56,
+ 16690: 0x8CAC,
+ 16691: 0x51C4,
+ 16692: 0x59BB,
+ 16693: 0x60BD,
+ 16694: 0x8655,
+ 16695: 0x501C,
+ 16696: 0xF9FF,
+ 16697: 0x5254,
+ 16698: 0x5C3A,
+ 16699: 0x617D,
+ 16700: 0x621A,
+ 16701: 0x62D3,
+ 16702: 0x64F2,
+ 16703: 0x65A5,
+ 16704: 0x6ECC,
+ 16705: 0x7620,
+ 16706: 0x810A,
+ 16707: 0x8E60,
+ 16708: 0x965F,
+ 16709: 0x96BB,
+ 16710: 0x4EDF,
+ 16711: 0x5343,
+ 16712: 0x5598,
+ 16713: 0x5929,
+ 16714: 0x5DDD,
+ 16715: 0x64C5,
+ 16716: 0x6CC9,
+ 16717: 0x6DFA,
+ 16718: 0x7394,
+ 16719: 0x7A7F,
+ 16720: 0x821B,
+ 16721: 0x85A6,
+ 16722: 0x8CE4,
+ 16723: 0x8E10,
+ 16724: 0x9077,
+ 16725: 0x91E7,
+ 16726: 0x95E1,
+ 16727: 0x9621,
+ 16728: 0x97C6,
+ 16729: 0x51F8,
+ 16730: 0x54F2,
+ 16731: 0x5586,
+ 16732: 0x5FB9,
+ 16733: 0x64A4,
+ 16734: 0x6F88,
+ 16735: 0x7DB4,
+ 16736: 0x8F1F,
+ 16737: 0x8F4D,
+ 16738: 0x9435,
+ 16739: 0x50C9,
+ 16740: 0x5C16,
+ 16741: 0x6CBE,
+ 16742: 0x6DFB,
+ 16743: 0x751B,
+ 16744: 0x77BB,
+ 16745: 0x7C3D,
+ 16746: 0x7C64,
+ 16747: 0x8A79,
+ 16748: 0x8AC2,
+ 16749: 0x581E,
+ 16750: 0x59BE,
+ 16751: 0x5E16,
+ 16752: 0x6377,
+ 16753: 0x7252,
+ 16754: 0x758A,
+ 16755: 0x776B,
+ 16756: 0x8ADC,
+ 16757: 0x8CBC,
+ 16758: 0x8F12,
+ 16759: 0x5EF3,
+ 16760: 0x6674,
+ 16761: 0x6DF8,
+ 16762: 0x807D,
+ 16763: 0x83C1,
+ 16764: 0x8ACB,
+ 16765: 0x9751,
+ 16766: 0x9BD6,
+ 16767: 0xFA00,
+ 16768: 0x5243,
+ 16769: 0x66FF,
+ 16770: 0x6D95,
+ 16771: 0x6EEF,
+ 16772: 0x7DE0,
+ 16773: 0x8AE6,
+ 16774: 0x902E,
+ 16775: 0x905E,
+ 16776: 0x9AD4,
+ 16777: 0x521D,
+ 16778: 0x527F,
+ 16779: 0x54E8,
+ 16780: 0x6194,
+ 16781: 0x6284,
+ 16782: 0x62DB,
+ 16783: 0x68A2,
+ 16784: 0x6912,
+ 16785: 0x695A,
+ 16786: 0x6A35,
+ 16787: 0x7092,
+ 16788: 0x7126,
+ 16789: 0x785D,
+ 16790: 0x7901,
+ 16791: 0x790E,
+ 16792: 0x79D2,
+ 16793: 0x7A0D,
+ 16794: 0x8096,
+ 16795: 0x8278,
+ 16796: 0x82D5,
+ 16797: 0x8349,
+ 16798: 0x8549,
+ 16799: 0x8C82,
+ 16800: 0x8D85,
+ 16801: 0x9162,
+ 16802: 0x918B,
+ 16803: 0x91AE,
+ 16804: 0x4FC3,
+ 16805: 0x56D1,
+ 16806: 0x71ED,
+ 16807: 0x77D7,
+ 16808: 0x8700,
+ 16809: 0x89F8,
+ 16810: 0x5BF8,
+ 16811: 0x5FD6,
+ 16812: 0x6751,
+ 16813: 0x90A8,
+ 16814: 0x53E2,
+ 16815: 0x585A,
+ 16816: 0x5BF5,
+ 16817: 0x60A4,
+ 16818: 0x6181,
+ 16819: 0x6460,
+ 16820: 0x7E3D,
+ 16821: 0x8070,
+ 16822: 0x8525,
+ 16823: 0x9283,
+ 16824: 0x64AE,
+ 16825: 0x50AC,
+ 16826: 0x5D14,
+ 16827: 0x6700,
+ 16828: 0x589C,
+ 16829: 0x62BD,
+ 16830: 0x63A8,
+ 16831: 0x690E,
+ 16832: 0x6978,
+ 16833: 0x6A1E,
+ 16834: 0x6E6B,
+ 16835: 0x76BA,
+ 16836: 0x79CB,
+ 16837: 0x82BB,
+ 16838: 0x8429,
+ 16839: 0x8ACF,
+ 16840: 0x8DA8,
+ 16841: 0x8FFD,
+ 16842: 0x9112,
+ 16843: 0x914B,
+ 16844: 0x919C,
+ 16845: 0x9310,
+ 16846: 0x9318,
+ 16847: 0x939A,
+ 16848: 0x96DB,
+ 16849: 0x9A36,
+ 16850: 0x9C0D,
+ 16851: 0x4E11,
+ 16852: 0x755C,
+ 16853: 0x795D,
+ 16854: 0x7AFA,
+ 16855: 0x7B51,
+ 16856: 0x7BC9,
+ 16857: 0x7E2E,
+ 16858: 0x84C4,
+ 16859: 0x8E59,
+ 16860: 0x8E74,
+ 16861: 0x8EF8,
+ 16862: 0x9010,
+ 16863: 0x6625,
+ 16864: 0x693F,
+ 16865: 0x7443,
+ 16866: 0x51FA,
+ 16867: 0x672E,
+ 16868: 0x9EDC,
+ 16869: 0x5145,
+ 16870: 0x5FE0,
+ 16871: 0x6C96,
+ 16872: 0x87F2,
+ 16873: 0x885D,
+ 16874: 0x8877,
+ 16875: 0x60B4,
+ 16876: 0x81B5,
+ 16877: 0x8403,
+ 16878: 0x8D05,
+ 16879: 0x53D6,
+ 16880: 0x5439,
+ 16881: 0x5634,
+ 16882: 0x5A36,
+ 16883: 0x5C31,
+ 16884: 0x708A,
+ 16885: 0x7FE0,
+ 16886: 0x805A,
+ 16887: 0x8106,
+ 16888: 0x81ED,
+ 16889: 0x8DA3,
+ 16890: 0x9189,
+ 16891: 0x9A5F,
+ 16892: 0x9DF2,
+ 16893: 0x5074,
+ 16894: 0x4EC4,
+ 16895: 0x53A0,
+ 16896: 0x60FB,
+ 16897: 0x6E2C,
+ 16898: 0x5C64,
+ 16899: 0x4F88,
+ 16900: 0x5024,
+ 16901: 0x55E4,
+ 16902: 0x5CD9,
+ 16903: 0x5E5F,
+ 16904: 0x6065,
+ 16905: 0x6894,
+ 16906: 0x6CBB,
+ 16907: 0x6DC4,
+ 16908: 0x71BE,
+ 16909: 0x75D4,
+ 16910: 0x75F4,
+ 16911: 0x7661,
+ 16912: 0x7A1A,
+ 16913: 0x7A49,
+ 16914: 0x7DC7,
+ 16915: 0x7DFB,
+ 16916: 0x7F6E,
+ 16917: 0x81F4,
+ 16918: 0x86A9,
+ 16919: 0x8F1C,
+ 16920: 0x96C9,
+ 16921: 0x99B3,
+ 16922: 0x9F52,
+ 16923: 0x5247,
+ 16924: 0x52C5,
+ 16925: 0x98ED,
+ 16926: 0x89AA,
+ 16927: 0x4E03,
+ 16928: 0x67D2,
+ 16929: 0x6F06,
+ 16930: 0x4FB5,
+ 16931: 0x5BE2,
+ 16932: 0x6795,
+ 16933: 0x6C88,
+ 16934: 0x6D78,
+ 16935: 0x741B,
+ 16936: 0x7827,
+ 16937: 0x91DD,
+ 16938: 0x937C,
+ 16939: 0x87C4,
+ 16940: 0x79E4,
+ 16941: 0x7A31,
+ 16942: 0x5FEB,
+ 16943: 0x4ED6,
+ 16944: 0x54A4,
+ 16945: 0x553E,
+ 16946: 0x58AE,
+ 16947: 0x59A5,
+ 16948: 0x60F0,
+ 16949: 0x6253,
+ 16950: 0x62D6,
+ 16951: 0x6736,
+ 16952: 0x6955,
+ 16953: 0x8235,
+ 16954: 0x9640,
+ 16955: 0x99B1,
+ 16956: 0x99DD,
+ 16957: 0x502C,
+ 16958: 0x5353,
+ 16959: 0x5544,
+ 16960: 0x577C,
+ 16961: 0xFA01,
+ 16962: 0x6258,
+ 16963: 0xFA02,
+ 16964: 0x64E2,
+ 16965: 0x666B,
+ 16966: 0x67DD,
+ 16967: 0x6FC1,
+ 16968: 0x6FEF,
+ 16969: 0x7422,
+ 16970: 0x7438,
+ 16971: 0x8A17,
+ 16972: 0x9438,
+ 16973: 0x5451,
+ 16974: 0x5606,
+ 16975: 0x5766,
+ 16976: 0x5F48,
+ 16977: 0x619A,
+ 16978: 0x6B4E,
+ 16979: 0x7058,
+ 16980: 0x70AD,
+ 16981: 0x7DBB,
+ 16982: 0x8A95,
+ 16983: 0x596A,
+ 16984: 0x812B,
+ 16985: 0x63A2,
+ 16986: 0x7708,
+ 16987: 0x803D,
+ 16988: 0x8CAA,
+ 16989: 0x5854,
+ 16990: 0x642D,
+ 16991: 0x69BB,
+ 16992: 0x5B95,
+ 16993: 0x5E11,
+ 16994: 0x6E6F,
+ 16995: 0xFA03,
+ 16996: 0x8569,
+ 16997: 0x514C,
+ 16998: 0x53F0,
+ 16999: 0x592A,
+ 17000: 0x6020,
+ 17001: 0x614B,
+ 17002: 0x6B86,
+ 17003: 0x6C70,
+ 17004: 0x6CF0,
+ 17005: 0x7B1E,
+ 17006: 0x80CE,
+ 17007: 0x82D4,
+ 17008: 0x8DC6,
+ 17009: 0x90B0,
+ 17010: 0x98B1,
+ 17011: 0xFA04,
+ 17012: 0x64C7,
+ 17013: 0x6FA4,
+ 17014: 0x6491,
+ 17015: 0x6504,
+ 17016: 0x514E,
+ 17017: 0x5410,
+ 17018: 0x571F,
+ 17019: 0x8A0E,
+ 17020: 0x615F,
+ 17021: 0x6876,
+ 17022: 0xFA05,
+ 17023: 0x75DB,
+ 17024: 0x7B52,
+ 17025: 0x7D71,
+ 17026: 0x901A,
+ 17027: 0x5806,
+ 17028: 0x69CC,
+ 17029: 0x817F,
+ 17030: 0x892A,
+ 17031: 0x9000,
+ 17032: 0x9839,
+ 17033: 0x5078,
+ 17034: 0x5957,
+ 17035: 0x59AC,
+ 17036: 0x6295,
+ 17037: 0x900F,
+ 17038: 0x9B2A,
+ 17039: 0x615D,
+ 17040: 0x7279,
+ 17041: 0x95D6,
+ 17042: 0x5761,
+ 17043: 0x5A46,
+ 17044: 0x5DF4,
+ 17045: 0x628A,
+ 17046: 0x64AD,
+ 17047: 0x64FA,
+ 17048: 0x6777,
+ 17049: 0x6CE2,
+ 17050: 0x6D3E,
+ 17051: 0x722C,
+ 17052: 0x7436,
+ 17053: 0x7834,
+ 17054: 0x7F77,
+ 17055: 0x82AD,
+ 17056: 0x8DDB,
+ 17057: 0x9817,
+ 17058: 0x5224,
+ 17059: 0x5742,
+ 17060: 0x677F,
+ 17061: 0x7248,
+ 17062: 0x74E3,
+ 17063: 0x8CA9,
+ 17064: 0x8FA6,
+ 17065: 0x9211,
+ 17066: 0x962A,
+ 17067: 0x516B,
+ 17068: 0x53ED,
+ 17069: 0x634C,
+ 17070: 0x4F69,
+ 17071: 0x5504,
+ 17072: 0x6096,
+ 17073: 0x6557,
+ 17074: 0x6C9B,
+ 17075: 0x6D7F,
+ 17076: 0x724C,
+ 17077: 0x72FD,
+ 17078: 0x7A17,
+ 17079: 0x8987,
+ 17080: 0x8C9D,
+ 17081: 0x5F6D,
+ 17082: 0x6F8E,
+ 17083: 0x70F9,
+ 17084: 0x81A8,
+ 17085: 0x610E,
+ 17086: 0x4FBF,
+ 17087: 0x504F,
+ 17088: 0x6241,
+ 17089: 0x7247,
+ 17090: 0x7BC7,
+ 17091: 0x7DE8,
+ 17092: 0x7FE9,
+ 17093: 0x904D,
+ 17094: 0x97AD,
+ 17095: 0x9A19,
+ 17096: 0x8CB6,
+ 17097: 0x576A,
+ 17098: 0x5E73,
+ 17099: 0x67B0,
+ 17100: 0x840D,
+ 17101: 0x8A55,
+ 17102: 0x5420,
+ 17103: 0x5B16,
+ 17104: 0x5E63,
+ 17105: 0x5EE2,
+ 17106: 0x5F0A,
+ 17107: 0x6583,
+ 17108: 0x80BA,
+ 17109: 0x853D,
+ 17110: 0x9589,
+ 17111: 0x965B,
+ 17112: 0x4F48,
+ 17113: 0x5305,
+ 17114: 0x530D,
+ 17115: 0x530F,
+ 17116: 0x5486,
+ 17117: 0x54FA,
+ 17118: 0x5703,
+ 17119: 0x5E03,
+ 17120: 0x6016,
+ 17121: 0x629B,
+ 17122: 0x62B1,
+ 17123: 0x6355,
+ 17124: 0xFA06,
+ 17125: 0x6CE1,
+ 17126: 0x6D66,
+ 17127: 0x75B1,
+ 17128: 0x7832,
+ 17129: 0x80DE,
+ 17130: 0x812F,
+ 17131: 0x82DE,
+ 17132: 0x8461,
+ 17133: 0x84B2,
+ 17134: 0x888D,
+ 17135: 0x8912,
+ 17136: 0x900B,
+ 17137: 0x92EA,
+ 17138: 0x98FD,
+ 17139: 0x9B91,
+ 17140: 0x5E45,
+ 17141: 0x66B4,
+ 17142: 0x66DD,
+ 17143: 0x7011,
+ 17144: 0x7206,
+ 17145: 0xFA07,
+ 17146: 0x4FF5,
+ 17147: 0x527D,
+ 17148: 0x5F6A,
+ 17149: 0x6153,
+ 17150: 0x6753,
+ 17151: 0x6A19,
+ 17152: 0x6F02,
+ 17153: 0x74E2,
+ 17154: 0x7968,
+ 17155: 0x8868,
+ 17156: 0x8C79,
+ 17157: 0x98C7,
+ 17158: 0x98C4,
+ 17159: 0x9A43,
+ 17160: 0x54C1,
+ 17161: 0x7A1F,
+ 17162: 0x6953,
+ 17163: 0x8AF7,
+ 17164: 0x8C4A,
+ 17165: 0x98A8,
+ 17166: 0x99AE,
+ 17167: 0x5F7C,
+ 17168: 0x62AB,
+ 17169: 0x75B2,
+ 17170: 0x76AE,
+ 17171: 0x88AB,
+ 17172: 0x907F,
+ 17173: 0x9642,
+ 17174: 0x5339,
+ 17175: 0x5F3C,
+ 17176: 0x5FC5,
+ 17177: 0x6CCC,
+ 17178: 0x73CC,
+ 17179: 0x7562,
+ 17180: 0x758B,
+ 17181: 0x7B46,
+ 17182: 0x82FE,
+ 17183: 0x999D,
+ 17184: 0x4E4F,
+ 17185: 0x903C,
+ 17186: 0x4E0B,
+ 17187: 0x4F55,
+ 17188: 0x53A6,
+ 17189: 0x590F,
+ 17190: 0x5EC8,
+ 17191: 0x6630,
+ 17192: 0x6CB3,
+ 17193: 0x7455,
+ 17194: 0x8377,
+ 17195: 0x8766,
+ 17196: 0x8CC0,
+ 17197: 0x9050,
+ 17198: 0x971E,
+ 17199: 0x9C15,
+ 17200: 0x58D1,
+ 17201: 0x5B78,
+ 17202: 0x8650,
+ 17203: 0x8B14,
+ 17204: 0x9DB4,
+ 17205: 0x5BD2,
+ 17206: 0x6068,
+ 17207: 0x608D,
+ 17208: 0x65F1,
+ 17209: 0x6C57,
+ 17210: 0x6F22,
+ 17211: 0x6FA3,
+ 17212: 0x701A,
+ 17213: 0x7F55,
+ 17214: 0x7FF0,
+ 17215: 0x9591,
+ 17216: 0x9592,
+ 17217: 0x9650,
+ 17218: 0x97D3,
+ 17219: 0x5272,
+ 17220: 0x8F44,
+ 17221: 0x51FD,
+ 17222: 0x542B,
+ 17223: 0x54B8,
+ 17224: 0x5563,
+ 17225: 0x558A,
+ 17226: 0x6ABB,
+ 17227: 0x6DB5,
+ 17228: 0x7DD8,
+ 17229: 0x8266,
+ 17230: 0x929C,
+ 17231: 0x9677,
+ 17232: 0x9E79,
+ 17233: 0x5408,
+ 17234: 0x54C8,
+ 17235: 0x76D2,
+ 17236: 0x86E4,
+ 17237: 0x95A4,
+ 17238: 0x95D4,
+ 17239: 0x965C,
+ 17240: 0x4EA2,
+ 17241: 0x4F09,
+ 17242: 0x59EE,
+ 17243: 0x5AE6,
+ 17244: 0x5DF7,
+ 17245: 0x6052,
+ 17246: 0x6297,
+ 17247: 0x676D,
+ 17248: 0x6841,
+ 17249: 0x6C86,
+ 17250: 0x6E2F,
+ 17251: 0x7F38,
+ 17252: 0x809B,
+ 17253: 0x822A,
+ 17254: 0xFA08,
+ 17255: 0xFA09,
+ 17256: 0x9805,
+ 17257: 0x4EA5,
+ 17258: 0x5055,
+ 17259: 0x54B3,
+ 17260: 0x5793,
+ 17261: 0x595A,
+ 17262: 0x5B69,
+ 17263: 0x5BB3,
+ 17264: 0x61C8,
+ 17265: 0x6977,
+ 17266: 0x6D77,
+ 17267: 0x7023,
+ 17268: 0x87F9,
+ 17269: 0x89E3,
+ 17270: 0x8A72,
+ 17271: 0x8AE7,
+ 17272: 0x9082,
+ 17273: 0x99ED,
+ 17274: 0x9AB8,
+ 17275: 0x52BE,
+ 17276: 0x6838,
+ 17277: 0x5016,
+ 17278: 0x5E78,
+ 17279: 0x674F,
+ 17280: 0x8347,
+ 17281: 0x884C,
+ 17282: 0x4EAB,
+ 17283: 0x5411,
+ 17284: 0x56AE,
+ 17285: 0x73E6,
+ 17286: 0x9115,
+ 17287: 0x97FF,
+ 17288: 0x9909,
+ 17289: 0x9957,
+ 17290: 0x9999,
+ 17291: 0x5653,
+ 17292: 0x589F,
+ 17293: 0x865B,
+ 17294: 0x8A31,
+ 17295: 0x61B2,
+ 17296: 0x6AF6,
+ 17297: 0x737B,
+ 17298: 0x8ED2,
+ 17299: 0x6B47,
+ 17300: 0x96AA,
+ 17301: 0x9A57,
+ 17302: 0x5955,
+ 17303: 0x7200,
+ 17304: 0x8D6B,
+ 17305: 0x9769,
+ 17306: 0x4FD4,
+ 17307: 0x5CF4,
+ 17308: 0x5F26,
+ 17309: 0x61F8,
+ 17310: 0x665B,
+ 17311: 0x6CEB,
+ 17312: 0x70AB,
+ 17313: 0x7384,
+ 17314: 0x73B9,
+ 17315: 0x73FE,
+ 17316: 0x7729,
+ 17317: 0x774D,
+ 17318: 0x7D43,
+ 17319: 0x7D62,
+ 17320: 0x7E23,
+ 17321: 0x8237,
+ 17322: 0x8852,
+ 17323: 0xFA0A,
+ 17324: 0x8CE2,
+ 17325: 0x9249,
+ 17326: 0x986F,
+ 17327: 0x5B51,
+ 17328: 0x7A74,
+ 17329: 0x8840,
+ 17330: 0x9801,
+ 17331: 0x5ACC,
+ 17332: 0x4FE0,
+ 17333: 0x5354,
+ 17334: 0x593E,
+ 17335: 0x5CFD,
+ 17336: 0x633E,
+ 17337: 0x6D79,
+ 17338: 0x72F9,
+ 17339: 0x8105,
+ 17340: 0x8107,
+ 17341: 0x83A2,
+ 17342: 0x92CF,
+ 17343: 0x9830,
+ 17344: 0x4EA8,
+ 17345: 0x5144,
+ 17346: 0x5211,
+ 17347: 0x578B,
+ 17348: 0x5F62,
+ 17349: 0x6CC2,
+ 17350: 0x6ECE,
+ 17351: 0x7005,
+ 17352: 0x7050,
+ 17353: 0x70AF,
+ 17354: 0x7192,
+ 17355: 0x73E9,
+ 17356: 0x7469,
+ 17357: 0x834A,
+ 17358: 0x87A2,
+ 17359: 0x8861,
+ 17360: 0x9008,
+ 17361: 0x90A2,
+ 17362: 0x93A3,
+ 17363: 0x99A8,
+ 17364: 0x516E,
+ 17365: 0x5F57,
+ 17366: 0x60E0,
+ 17367: 0x6167,
+ 17368: 0x66B3,
+ 17369: 0x8559,
+ 17370: 0x8E4A,
+ 17371: 0x91AF,
+ 17372: 0x978B,
+ 17373: 0x4E4E,
+ 17374: 0x4E92,
+ 17375: 0x547C,
+ 17376: 0x58D5,
+ 17377: 0x58FA,
+ 17378: 0x597D,
+ 17379: 0x5CB5,
+ 17380: 0x5F27,
+ 17381: 0x6236,
+ 17382: 0x6248,
+ 17383: 0x660A,
+ 17384: 0x6667,
+ 17385: 0x6BEB,
+ 17386: 0x6D69,
+ 17387: 0x6DCF,
+ 17388: 0x6E56,
+ 17389: 0x6EF8,
+ 17390: 0x6F94,
+ 17391: 0x6FE0,
+ 17392: 0x6FE9,
+ 17393: 0x705D,
+ 17394: 0x72D0,
+ 17395: 0x7425,
+ 17396: 0x745A,
+ 17397: 0x74E0,
+ 17398: 0x7693,
+ 17399: 0x795C,
+ 17400: 0x7CCA,
+ 17401: 0x7E1E,
+ 17402: 0x80E1,
+ 17403: 0x82A6,
+ 17404: 0x846B,
+ 17405: 0x84BF,
+ 17406: 0x864E,
+ 17407: 0x865F,
+ 17408: 0x8774,
+ 17409: 0x8B77,
+ 17410: 0x8C6A,
+ 17411: 0x93AC,
+ 17412: 0x9800,
+ 17413: 0x9865,
+ 17414: 0x60D1,
+ 17415: 0x6216,
+ 17416: 0x9177,
+ 17417: 0x5A5A,
+ 17418: 0x660F,
+ 17419: 0x6DF7,
+ 17420: 0x6E3E,
+ 17421: 0x743F,
+ 17422: 0x9B42,
+ 17423: 0x5FFD,
+ 17424: 0x60DA,
+ 17425: 0x7B0F,
+ 17426: 0x54C4,
+ 17427: 0x5F18,
+ 17428: 0x6C5E,
+ 17429: 0x6CD3,
+ 17430: 0x6D2A,
+ 17431: 0x70D8,
+ 17432: 0x7D05,
+ 17433: 0x8679,
+ 17434: 0x8A0C,
+ 17435: 0x9D3B,
+ 17436: 0x5316,
+ 17437: 0x548C,
+ 17438: 0x5B05,
+ 17439: 0x6A3A,
+ 17440: 0x706B,
+ 17441: 0x7575,
+ 17442: 0x798D,
+ 17443: 0x79BE,
+ 17444: 0x82B1,
+ 17445: 0x83EF,
+ 17446: 0x8A71,
+ 17447: 0x8B41,
+ 17448: 0x8CA8,
+ 17449: 0x9774,
+ 17450: 0xFA0B,
+ 17451: 0x64F4,
+ 17452: 0x652B,
+ 17453: 0x78BA,
+ 17454: 0x78BB,
+ 17455: 0x7A6B,
+ 17456: 0x4E38,
+ 17457: 0x559A,
+ 17458: 0x5950,
+ 17459: 0x5BA6,
+ 17460: 0x5E7B,
+ 17461: 0x60A3,
+ 17462: 0x63DB,
+ 17463: 0x6B61,
+ 17464: 0x6665,
+ 17465: 0x6853,
+ 17466: 0x6E19,
+ 17467: 0x7165,
+ 17468: 0x74B0,
+ 17469: 0x7D08,
+ 17470: 0x9084,
+ 17471: 0x9A69,
+ 17472: 0x9C25,
+ 17473: 0x6D3B,
+ 17474: 0x6ED1,
+ 17475: 0x733E,
+ 17476: 0x8C41,
+ 17477: 0x95CA,
+ 17478: 0x51F0,
+ 17479: 0x5E4C,
+ 17480: 0x5FA8,
+ 17481: 0x604D,
+ 17482: 0x60F6,
+ 17483: 0x6130,
+ 17484: 0x614C,
+ 17485: 0x6643,
+ 17486: 0x6644,
+ 17487: 0x69A5,
+ 17488: 0x6CC1,
+ 17489: 0x6E5F,
+ 17490: 0x6EC9,
+ 17491: 0x6F62,
+ 17492: 0x714C,
+ 17493: 0x749C,
+ 17494: 0x7687,
+ 17495: 0x7BC1,
+ 17496: 0x7C27,
+ 17497: 0x8352,
+ 17498: 0x8757,
+ 17499: 0x9051,
+ 17500: 0x968D,
+ 17501: 0x9EC3,
+ 17502: 0x532F,
+ 17503: 0x56DE,
+ 17504: 0x5EFB,
+ 17505: 0x5F8A,
+ 17506: 0x6062,
+ 17507: 0x6094,
+ 17508: 0x61F7,
+ 17509: 0x6666,
+ 17510: 0x6703,
+ 17511: 0x6A9C,
+ 17512: 0x6DEE,
+ 17513: 0x6FAE,
+ 17514: 0x7070,
+ 17515: 0x736A,
+ 17516: 0x7E6A,
+ 17517: 0x81BE,
+ 17518: 0x8334,
+ 17519: 0x86D4,
+ 17520: 0x8AA8,
+ 17521: 0x8CC4,
+ 17522: 0x5283,
+ 17523: 0x7372,
+ 17524: 0x5B96,
+ 17525: 0x6A6B,
+ 17526: 0x9404,
+ 17527: 0x54EE,
+ 17528: 0x5686,
+ 17529: 0x5B5D,
+ 17530: 0x6548,
+ 17531: 0x6585,
+ 17532: 0x66C9,
+ 17533: 0x689F,
+ 17534: 0x6D8D,
+ 17535: 0x6DC6,
+ 17536: 0x723B,
+ 17537: 0x80B4,
+ 17538: 0x9175,
+ 17539: 0x9A4D,
+ 17540: 0x4FAF,
+ 17541: 0x5019,
+ 17542: 0x539A,
+ 17543: 0x540E,
+ 17544: 0x543C,
+ 17545: 0x5589,
+ 17546: 0x55C5,
+ 17547: 0x5E3F,
+ 17548: 0x5F8C,
+ 17549: 0x673D,
+ 17550: 0x7166,
+ 17551: 0x73DD,
+ 17552: 0x9005,
+ 17553: 0x52DB,
+ 17554: 0x52F3,
+ 17555: 0x5864,
+ 17556: 0x58CE,
+ 17557: 0x7104,
+ 17558: 0x718F,
+ 17559: 0x71FB,
+ 17560: 0x85B0,
+ 17561: 0x8A13,
+ 17562: 0x6688,
+ 17563: 0x85A8,
+ 17564: 0x55A7,
+ 17565: 0x6684,
+ 17566: 0x714A,
+ 17567: 0x8431,
+ 17568: 0x5349,
+ 17569: 0x5599,
+ 17570: 0x6BC1,
+ 17571: 0x5F59,
+ 17572: 0x5FBD,
+ 17573: 0x63EE,
+ 17574: 0x6689,
+ 17575: 0x7147,
+ 17576: 0x8AF1,
+ 17577: 0x8F1D,
+ 17578: 0x9EBE,
+ 17579: 0x4F11,
+ 17580: 0x643A,
+ 17581: 0x70CB,
+ 17582: 0x7566,
+ 17583: 0x8667,
+ 17584: 0x6064,
+ 17585: 0x8B4E,
+ 17586: 0x9DF8,
+ 17587: 0x5147,
+ 17588: 0x51F6,
+ 17589: 0x5308,
+ 17590: 0x6D36,
+ 17591: 0x80F8,
+ 17592: 0x9ED1,
+ 17593: 0x6615,
+ 17594: 0x6B23,
+ 17595: 0x7098,
+ 17596: 0x75D5,
+ 17597: 0x5403,
+ 17598: 0x5C79,
+ 17599: 0x7D07,
+ 17600: 0x8A16,
+ 17601: 0x6B20,
+ 17602: 0x6B3D,
+ 17603: 0x6B46,
+ 17604: 0x5438,
+ 17605: 0x6070,
+ 17606: 0x6D3D,
+ 17607: 0x7FD5,
+ 17608: 0x8208,
+ 17609: 0x50D6,
+ 17610: 0x51DE,
+ 17611: 0x559C,
+ 17612: 0x566B,
+ 17613: 0x56CD,
+ 17614: 0x59EC,
+ 17615: 0x5B09,
+ 17616: 0x5E0C,
+ 17617: 0x6199,
+ 17618: 0x6198,
+ 17619: 0x6231,
+ 17620: 0x665E,
+ 17621: 0x66E6,
+ 17622: 0x7199,
+ 17623: 0x71B9,
+ 17624: 0x71BA,
+ 17625: 0x72A7,
+ 17626: 0x79A7,
+ 17627: 0x7A00,
+ 17628: 0x7FB2,
+ 17629: 0x8A70,
+}
+
+const numEncodeTables = 7
+
+// encodeX are the encoding tables from Unicode to EUC-KR code,
+// sorted by decreasing length.
+// encode0: 20893 entries for runes in [19968, 40861).
+// encode1: 11172 entries for runes in [44032, 55204).
+// encode2: 1625 entries for runes in [ 8213, 9838).
+// encode3: 990 entries for runes in [12288, 13278).
+// encode4: 945 entries for runes in [ 161, 1106).
+// encode5: 268 entries for runes in [63744, 64012).
+// encode6: 230 entries for runes in [65281, 65511).
+
+const encode0Low, encode0High = 19968, 40861
+
+var encode0 = [...]uint16{
+ 19968 - 19968: 0xECE9,
+ 19969 - 19968: 0xEFCB,
+ 19971 - 19968: 0xF6D2,
+ 19975 - 19968: 0xD8B2,
+ 19976 - 19968: 0xEDDB,
+ 19977 - 19968: 0xDFB2,
+ 19978 - 19968: 0xDFBE,
+ 19979 - 19968: 0xF9BB,
+ 19981 - 19968: 0xDCF4,
+ 19985 - 19968: 0xF5E4,
+ 19988 - 19968: 0xF3A6,
+ 19989 - 19968: 0xDDE0,
+ 19990 - 19968: 0xE1A6,
+ 19992 - 19968: 0xCEF8,
+ 19993 - 19968: 0xDCB0,
+ 19998 - 19968: 0xE3AA,
+ 20013 - 19968: 0xF1E9,
+ 20018 - 19968: 0xCDFA,
+ 20024 - 19968: 0xFCAF,
+ 20025 - 19968: 0xD3A1,
+ 20027 - 19968: 0xF1AB,
+ 20034 - 19968: 0xE7D1,
+ 20035 - 19968: 0xD2AC,
+ 20037 - 19968: 0xCEF9,
+ 20043 - 19968: 0xF1FD,
+ 20045 - 19968: 0xDEBF,
+ 20046 - 19968: 0xFBBA,
+ 20047 - 19968: 0xF9B9,
+ 20054 - 19968: 0xCED2,
+ 20056 - 19968: 0xE3AB,
+ 20057 - 19968: 0xEBE0,
+ 20061 - 19968: 0xCEFA,
+ 20062 - 19968: 0xCBF7,
+ 20063 - 19968: 0xE5A5,
+ 20075 - 19968: 0xCAE1,
+ 20077 - 19968: 0xD4CC,
+ 20083 - 19968: 0xEAE1,
+ 20086 - 19968: 0xDCE3,
+ 20087 - 19968: 0xDFAD,
+ 20094 - 19968: 0xCBEB,
+ 20098 - 19968: 0xD5AF,
+ 20102 - 19968: 0xD6F5,
+ 20104 - 19968: 0xE5F8,
+ 20107 - 19968: 0xDEC0,
+ 20108 - 19968: 0xECA3,
+ 20110 - 19968: 0xE9CD,
+ 20112 - 19968: 0xEAA7,
+ 20113 - 19968: 0xE9F6,
+ 20114 - 19968: 0xFBBB,
+ 20116 - 19968: 0xE7E9,
+ 20117 - 19968: 0xEFCC,
+ 20120 - 19968: 0xD0E6,
+ 20123 - 19968: 0xDEC1,
+ 20126 - 19968: 0xE4AC,
+ 20129 - 19968: 0xD8CC,
+ 20130 - 19968: 0xF9F1,
+ 20132 - 19968: 0xCEDF,
+ 20133 - 19968: 0xFAA4,
+ 20134 - 19968: 0xE6B2,
+ 20136 - 19968: 0xFAFB,
+ 20139 - 19968: 0xFABD,
+ 20140 - 19968: 0xCCC8,
+ 20141 - 19968: 0xEFCD,
+ 20142 - 19968: 0xD5D5,
+ 20150 - 19968: 0xD3A2,
+ 20154 - 19968: 0xECD1,
+ 20160 - 19968: 0xE4A7,
+ 20161 - 19968: 0xECD2,
+ 20164 - 19968: 0xF6B1,
+ 20167 - 19968: 0xCEFB,
+ 20170 - 19968: 0xD0D1,
+ 20171 - 19968: 0xCBBF,
+ 20173 - 19968: 0xEDA4,
+ 20180 - 19968: 0xEDA8,
+ 20181 - 19968: 0xDEC2,
+ 20182 - 19968: 0xF6E2,
+ 20183 - 19968: 0xEDDC,
+ 20184 - 19968: 0xDCF5,
+ 20185 - 19968: 0xE0B9,
+ 20189 - 19968: 0xD4CE,
+ 20191 - 19968: 0xF4B5,
+ 20195 - 19968: 0xD3DB,
+ 20196 - 19968: 0xD6B5,
+ 20197 - 19968: 0xECA4,
+ 20208 - 19968: 0xE4E6,
+ 20210 - 19968: 0xF1EA,
+ 20214 - 19968: 0xCBEC,
+ 20215 - 19968: 0xCBC0,
+ 20219 - 19968: 0xECF2,
+ 20225 - 19968: 0xD0EA,
+ 20233 - 19968: 0xF9F2,
+ 20234 - 19968: 0xECA5,
+ 20235 - 19968: 0xD0DF,
+ 20237 - 19968: 0xE7EA,
+ 20238 - 19968: 0xD0EB,
+ 20239 - 19968: 0xDCD1,
+ 20240 - 19968: 0xDBE9,
+ 20241 - 19968: 0xFDCC,
+ 20271 - 19968: 0xDBD7,
+ 20276 - 19968: 0xDAE1,
+ 20278 - 19968: 0xD6B6,
+ 20280 - 19968: 0xE3DF,
+ 20282 - 19968: 0xDEC3,
+ 20284 - 19968: 0xDEC4,
+ 20285 - 19968: 0xCAA1,
+ 20291 - 19968: 0xEEEC,
+ 20294 - 19968: 0xD3A3,
+ 20295 - 19968: 0xEEB7,
+ 20296 - 19968: 0xF8CF,
+ 20301 - 19968: 0xEAC8,
+ 20302 - 19968: 0xEEB8,
+ 20303 - 19968: 0xF1AC,
+ 20304 - 19968: 0xF1A5,
+ 20305 - 19968: 0xE9CE,
+ 20309 - 19968: 0xF9BC,
+ 20313 - 19968: 0xE5F9,
+ 20314 - 19968: 0xECEA,
+ 20315 - 19968: 0xDDD6,
+ 20316 - 19968: 0xEDC2,
+ 20329 - 19968: 0xF8A5,
+ 20335 - 19968: 0xE5BA,
+ 20336 - 19968: 0xDBD8,
+ 20339 - 19968: 0xCAA2,
+ 20342 - 19968: 0xD1CD,
+ 20346 - 19968: 0xEEED,
+ 20350 - 19968: 0xECEB,
+ 20351 - 19968: 0xDEC5,
+ 20353 - 19968: 0xE3E0,
+ 20355 - 19968: 0xCAC9,
+ 20356 - 19968: 0xF2E9,
+ 20358 - 19968: 0xD5CE,
+ 20360 - 19968: 0xF6B6,
+ 20362 - 19968: 0xCEC2,
+ 20363 - 19968: 0xD6C7,
+ 20365 - 19968: 0xE3B4,
+ 20367 - 19968: 0xF1AD,
+ 20369 - 19968: 0xEAE2,
+ 20374 - 19968: 0xD7C2,
+ 20376 - 19968: 0xF3A7,
+ 20379 - 19968: 0xCDEA,
+ 20381 - 19968: 0xEBEE,
+ 20398 - 19968: 0xD9B2,
+ 20399 - 19968: 0xFDA5,
+ 20405 - 19968: 0xF6D5,
+ 20406 - 19968: 0xD5E2,
+ 20415 - 19968: 0xF8B5,
+ 20418 - 19968: 0xCCF5,
+ 20419 - 19968: 0xF5B5,
+ 20420 - 19968: 0xE4AD,
+ 20425 - 19968: 0xE7EB,
+ 20426 - 19968: 0xF1D5,
+ 20430 - 19968: 0xF0BB,
+ 20433 - 19968: 0xE9B5,
+ 20435 - 19968: 0xCCC9,
+ 20436 - 19968: 0xFAD5,
+ 20439 - 19968: 0xE1D4,
+ 20442 - 19968: 0xD7D6,
+ 20445 - 19968: 0xDCC1,
+ 20447 - 19968: 0xDEC6,
+ 20448 - 19968: 0xFAEF,
+ 20449 - 19968: 0xE3E1,
+ 20462 - 19968: 0xE1F3,
+ 20463 - 19968: 0xDCF6,
+ 20465 - 19968: 0xCEFC,
+ 20467 - 19968: 0xDBC4,
+ 20469 - 19968: 0xF8F1,
+ 20472 - 19968: 0xDCE4,
+ 20474 - 19968: 0xE5EF,
+ 20482 - 19968: 0xDCB1,
+ 20486 - 19968: 0xD5D6,
+ 20489 - 19968: 0xF3DA,
+ 20491 - 19968: 0xCBC1,
+ 20493 - 19968: 0xDBC3,
+ 20497 - 19968: 0xD9FA,
+ 20498 - 19968: 0xD3EE,
+ 20502 - 19968: 0xFAB8,
+ 20505 - 19968: 0xFDA6,
+ 20506 - 19968: 0xEBEF,
+ 20508 - 19968: 0xF4A6,
+ 20510 - 19968: 0xCCCA,
+ 20511 - 19968: 0xF3A8,
+ 20513 - 19968: 0xF3DB,
+ 20515 - 19968: 0xDBA7,
+ 20516 - 19968: 0xF6B7,
+ 20518 - 19968: 0xCFE6,
+ 20519 - 19968: 0xF0F2,
+ 20520 - 19968: 0xCBDA,
+ 20522 - 19968: 0xE7D2,
+ 20523 - 19968: 0xD7C3,
+ 20524 - 19968: 0xF6F0,
+ 20525 - 19968: 0xE8DE,
+ 20539 - 19968: 0xE5A6,
+ 20547 - 19968: 0xE5E7,
+ 20551 - 19968: 0xCAA3,
+ 20552 - 19968: 0xCCA7,
+ 20553 - 19968: 0xEAC9,
+ 20559 - 19968: 0xF8B6,
+ 20565 - 19968: 0xFAA5,
+ 20570 - 19968: 0xF1AE,
+ 20572 - 19968: 0xEFCE,
+ 20581 - 19968: 0xCBED,
+ 20596 - 19968: 0xF6B0,
+ 20597 - 19968: 0xEFCF,
+ 20598 - 19968: 0xE9CF,
+ 20600 - 19968: 0xF7DE,
+ 20608 - 19968: 0xCED3,
+ 20613 - 19968: 0xDCF7,
+ 20621 - 19968: 0xDBA8,
+ 20625 - 19968: 0xCBF8,
+ 20632 - 19968: 0xDFA1,
+ 20633 - 19968: 0xDDE1,
+ 20652 - 19968: 0xF5CA,
+ 20653 - 19968: 0xE9B6,
+ 20658 - 19968: 0xE7EC,
+ 20659 - 19968: 0xEEEE,
+ 20661 - 19968: 0xF3F0,
+ 20663 - 19968: 0xDFBF,
+ 20670 - 19968: 0xCCCB,
+ 20677 - 19968: 0xD0C1,
+ 20681 - 19968: 0xF4D2,
+ 20682 - 19968: 0xE0BA,
+ 20687 - 19968: 0xDFC0,
+ 20689 - 19968: 0xCEE0,
+ 20693 - 19968: 0xDCD2,
+ 20694 - 19968: 0xFDEA,
+ 20698 - 19968: 0xD6F6,
+ 20702 - 19968: 0xEACA,
+ 20709 - 19968: 0xE8E9,
+ 20711 - 19968: 0xE3AC,
+ 20717 - 19968: 0xF3D0,
+ 20729 - 19968: 0xCAA4,
+ 20731 - 19968: 0xDBF8,
+ 20735 - 19968: 0xDEC7,
+ 20736 - 19968: 0xEBF0,
+ 20737 - 19968: 0xF1D6,
+ 20740 - 19968: 0xE5E2,
+ 20742 - 19968: 0xCCCC,
+ 20745 - 19968: 0xCBFB,
+ 20754 - 19968: 0xEAE3,
+ 20767 - 19968: 0xDFC1,
+ 20769 - 19968: 0xD6ED,
+ 20778 - 19968: 0xE9D0,
+ 20786 - 19968: 0xEEB9,
+ 20791 - 19968: 0xD5E3,
+ 20794 - 19968: 0xD1D3,
+ 20796 - 19968: 0xE5F0,
+ 20800 - 19968: 0xE8B4,
+ 20801 - 19968: 0xEBC3,
+ 20803 - 19968: 0xEAAA,
+ 20804 - 19968: 0xFAFC,
+ 20805 - 19968: 0xF5F6,
+ 20806 - 19968: 0xF0BC,
+ 20807 - 19968: 0xFDD4,
+ 20808 - 19968: 0xE0BB,
+ 20809 - 19968: 0xCEC3,
+ 20811 - 19968: 0xD0BA,
+ 20812 - 19968: 0xF7BA,
+ 20813 - 19968: 0xD8F3,
+ 20814 - 19968: 0xF7CD,
+ 20818 - 19968: 0xE4AE,
+ 20828 - 19968: 0xD4DF,
+ 20834 - 19968: 0xD0E7,
+ 20837 - 19968: 0xECFD,
+ 20839 - 19968: 0xD2AE,
+ 20840 - 19968: 0xEEEF,
+ 20841 - 19968: 0xD5D7,
+ 20842 - 19968: 0xEAE4,
+ 20843 - 19968: 0xF8A2,
+ 20844 - 19968: 0xCDEB,
+ 20845 - 19968: 0xD7BF,
+ 20846 - 19968: 0xFBB1,
+ 20849 - 19968: 0xCDEC,
+ 20853 - 19968: 0xDCB2,
+ 20854 - 19968: 0xD0EC,
+ 20855 - 19968: 0xCEFD,
+ 20856 - 19968: 0xEEF0,
+ 20860 - 19968: 0xCCC2,
+ 20864 - 19968: 0xD0ED,
+ 20870 - 19968: 0xE5F7,
+ 20874 - 19968: 0xF3FC,
+ 20877 - 19968: 0xEEA2,
+ 20882 - 19968: 0xD9B3,
+ 20885 - 19968: 0xD8F4,
+ 20887 - 19968: 0xE9B7,
+ 20896 - 19968: 0xCEAE,
+ 20901 - 19968: 0xD9A2,
+ 20906 - 19968: 0xD8F1,
+ 20908 - 19968: 0xD4CF,
+ 20918 - 19968: 0xE5A7,
+ 20919 - 19968: 0xD5D2,
+ 20925 - 19968: 0xD6A9,
+ 20932 - 19968: 0xF4A2,
+ 20934 - 19968: 0xF1D7,
+ 20937 - 19968: 0xD5D8,
+ 20939 - 19968: 0xF0BD,
+ 20940 - 19968: 0xD7D0,
+ 20941 - 19968: 0xD4D0,
+ 20956 - 19968: 0xD7CF,
+ 20957 - 19968: 0xEBEA,
+ 20958 - 19968: 0xFDEB,
+ 20961 - 19968: 0xDBED,
+ 20976 - 19968: 0xFCC5,
+ 20977 - 19968: 0xCBC2,
+ 20982 - 19968: 0xFDD5,
+ 20984 - 19968: 0xF4C8,
+ 20985 - 19968: 0xE8EA,
+ 20986 - 19968: 0xF5F3,
+ 20989 - 19968: 0xF9DE,
+ 20992 - 19968: 0xD3EF,
+ 20995 - 19968: 0xECD3,
+ 20998 - 19968: 0xDDC2,
+ 20999 - 19968: 0xEFB7,
+ 21000 - 19968: 0xE7D4,
+ 21002 - 19968: 0xCACA,
+ 21006 - 19968: 0xD9FB,
+ 21009 - 19968: 0xFAFD,
+ 21015 - 19968: 0xD6AA,
+ 21021 - 19968: 0xF4F8,
+ 21028 - 19968: 0xF7F7,
+ 21029 - 19968: 0xDCAC,
+ 21033 - 19968: 0xD7D7,
+ 21034 - 19968: 0xDFA2,
+ 21038 - 19968: 0xCEBE,
+ 21040 - 19968: 0xD3F0,
+ 21046 - 19968: 0xF0A4,
+ 21047 - 19968: 0xE1EC,
+ 21048 - 19968: 0xCFE7,
+ 21049 - 19968: 0xF3CB,
+ 21050 - 19968: 0xEDA9,
+ 21051 - 19968: 0xCABE,
+ 21059 - 19968: 0xF4EF,
+ 21063 - 19968: 0xF6CE,
+ 21066 - 19968: 0xDEFB,
+ 21067 - 19968: 0xD0BB,
+ 21068 - 19968: 0xD5B7,
+ 21069 - 19968: 0xEEF1,
+ 21076 - 19968: 0xF4A8,
+ 21078 - 19968: 0xDCF8,
+ 21083 - 19968: 0xCBA7,
+ 21085 - 19968: 0xDACE,
+ 21089 - 19968: 0xE0E6,
+ 21097 - 19968: 0xEDA5,
+ 21098 - 19968: 0xEEF2,
+ 21103 - 19968: 0xDCF9,
+ 21106 - 19968: 0xF9DC,
+ 21109 - 19968: 0xF3DC,
+ 21117 - 19968: 0xF8F2,
+ 21119 - 19968: 0xF4F9,
+ 21123 - 19968: 0xFCF1,
+ 21127 - 19968: 0xD0BC,
+ 21128 - 19968: 0xDBF9,
+ 21129 - 19968: 0xD7B1,
+ 21133 - 19968: 0xCBFC,
+ 21137 - 19968: 0xF0A5,
+ 21138 - 19968: 0xCBFD,
+ 21147 - 19968: 0xD5F4,
+ 21151 - 19968: 0xCDED,
+ 21152 - 19968: 0xCAA5,
+ 21155 - 19968: 0xD6AB,
+ 21156 - 19968: 0xD0C2,
+ 21161 - 19968: 0xF0BE,
+ 21162 - 19968: 0xD2BD,
+ 21163 - 19968: 0xCCA4,
+ 21182 - 19968: 0xFAB6,
+ 21185 - 19968: 0xCCCD,
+ 21187 - 19968: 0xDAFA,
+ 21189 - 19968: 0xF6CF,
+ 21191 - 19968: 0xE9B8,
+ 21193 - 19968: 0xD8F5,
+ 21197 - 19968: 0xCCCE,
+ 21202 - 19968: 0xD7CD,
+ 21205 - 19968: 0xD4D1,
+ 21206 - 19968: 0xE9ED,
+ 21208 - 19968: 0xCAEB,
+ 21209 - 19968: 0xD9E2,
+ 21211 - 19968: 0xFDB2,
+ 21213 - 19968: 0xE3AD,
+ 21214 - 19968: 0xD6CC,
+ 21215 - 19968: 0xD9B4,
+ 21218 - 19968: 0xE1A7,
+ 21219 - 19968: 0xEED3,
+ 21220 - 19968: 0xD0C3,
+ 21235 - 19968: 0xFDB3,
+ 21237 - 19968: 0xD5E4,
+ 21240 - 19968: 0xCFE8,
+ 21242 - 19968: 0xEDC3,
+ 21243 - 19968: 0xD0B2,
+ 21246 - 19968: 0xCEFE,
+ 21247 - 19968: 0xDAA8,
+ 21253 - 19968: 0xF8D0,
+ 21256 - 19968: 0xFDD6,
+ 21261 - 19968: 0xF8D1,
+ 21263 - 19968: 0xF8D2,
+ 21264 - 19968: 0xDCD3,
+ 21269 - 19968: 0xDDE2,
+ 21270 - 19968: 0xFBF9,
+ 21271 - 19968: 0xDDC1,
+ 21273 - 19968: 0xE3B5,
+ 21280 - 19968: 0xEDDD,
+ 21281 - 19968: 0xCEC4,
+ 21283 - 19968: 0xCBA1,
+ 21290 - 19968: 0xDDE3,
+ 21295 - 19968: 0xFCDD,
+ 21305 - 19968: 0xF9AF,
+ 21311 - 19968: 0xD2FB,
+ 21312 - 19968: 0xCFA1,
+ 21313 - 19968: 0xE4A8,
+ 21315 - 19968: 0xF4B6,
+ 21316 - 19968: 0xECFE,
+ 21319 - 19968: 0xE3AE,
+ 21320 - 19968: 0xE7ED,
+ 21321 - 19968: 0xFDC1,
+ 21322 - 19968: 0xDAE2,
+ 21325 - 19968: 0xD8B3,
+ 21329 - 19968: 0xDDE4,
+ 21330 - 19968: 0xF0EF,
+ 21331 - 19968: 0xF6F1,
+ 21332 - 19968: 0xFAF0,
+ 21335 - 19968: 0xD1F5,
+ 21338 - 19968: 0xDACF,
+ 21340 - 19968: 0xDCD4,
+ 21342 - 19968: 0xDCA6,
+ 21344 - 19968: 0xEFBF,
+ 21350 - 19968: 0xCECF,
+ 21352 - 19968: 0xE0D9,
+ 21359 - 19968: 0xD9D6,
+ 21360 - 19968: 0xECD4,
+ 21361 - 19968: 0xEACB,
+ 21364 - 19968: 0xCABF,
+ 21365 - 19968: 0xD5B0,
+ 21367 - 19968: 0xCFE9,
+ 21373 - 19968: 0xF1ED,
+ 21375 - 19968: 0xCCCF,
+ 21380 - 19968: 0xE4F8,
+ 21395 - 19968: 0xE4ED,
+ 21400 - 19968: 0xD7D8,
+ 21402 - 19968: 0xFDA7,
+ 21407 - 19968: 0xEAAB,
+ 21408 - 19968: 0xF6B2,
+ 21413 - 19968: 0xCFF0,
+ 21414 - 19968: 0xF9BD,
+ 21421 - 19968: 0xE6F4,
+ 21435 - 19968: 0xCBDB,
+ 21443 - 19968: 0xF3D1,
+ 21448 - 19968: 0xE9D1,
+ 21449 - 19968: 0xF3A9,
+ 21450 - 19968: 0xD0E0,
+ 21451 - 19968: 0xE9D2,
+ 21453 - 19968: 0xDAE3,
+ 21460 - 19968: 0xE2D2,
+ 21462 - 19968: 0xF6A2,
+ 21463 - 19968: 0xE1F4,
+ 21467 - 19968: 0xDAE4,
+ 21473 - 19968: 0xE7D5,
+ 21474 - 19968: 0xF5BF,
+ 21475 - 19968: 0xCFA2,
+ 21476 - 19968: 0xCDAF,
+ 21477 - 19968: 0xCFA3,
+ 21481 - 19968: 0xCDB0,
+ 21482 - 19968: 0xF1FE,
+ 21483 - 19968: 0xD0A3,
+ 21484 - 19968: 0xE1AF,
+ 21485 - 19968: 0xF8A3,
+ 21487 - 19968: 0xCAA6,
+ 21488 - 19968: 0xF7BB,
+ 21489 - 19968: 0xF2EA,
+ 21490 - 19968: 0xDEC8,
+ 21491 - 19968: 0xE9D3,
+ 21496 - 19968: 0xDEC9,
+ 21507 - 19968: 0xFDDE,
+ 21508 - 19968: 0xCAC0,
+ 21512 - 19968: 0xF9EA,
+ 21513 - 19968: 0xD1CE,
+ 21514 - 19968: 0xEED4,
+ 21516 - 19968: 0xD4D2,
+ 21517 - 19968: 0xD9A3,
+ 21518 - 19968: 0xFDA8,
+ 21519 - 19968: 0xD7D9,
+ 21520 - 19968: 0xF7CE,
+ 21521 - 19968: 0xFABE,
+ 21531 - 19968: 0xCFD6,
+ 21533 - 19968: 0xD7F0,
+ 21535 - 19968: 0xEBE1,
+ 21536 - 19968: 0xF8C5,
+ 21542 - 19968: 0xDCFA,
+ 21545 - 19968: 0xDDC3,
+ 21547 - 19968: 0xF9DF,
+ 21555 - 19968: 0xE7EF,
+ 21560 - 19968: 0xFDE5,
+ 21561 - 19968: 0xF6A3,
+ 21563 - 19968: 0xD9FC,
+ 21564 - 19968: 0xFDA9,
+ 21566 - 19968: 0xE7EE,
+ 21570 - 19968: 0xD5E5,
+ 21576 - 19968: 0xEFD0,
+ 21578 - 19968: 0xCDB1,
+ 21585 - 19968: 0xF7A2,
+ 21608 - 19968: 0xF1B2,
+ 21610 - 19968: 0xF1B1,
+ 21617 - 19968: 0xCDB2,
+ 21619 - 19968: 0xDAAB,
+ 21621 - 19968: 0xCAA7,
+ 21627 - 19968: 0xE3E2,
+ 21628 - 19968: 0xFBBC,
+ 21629 - 19968: 0xD9A4,
+ 21632 - 19968: 0xEEBA,
+ 21638 - 19968: 0xF8D3,
+ 21644 - 19968: 0xFBFA,
+ 21646 - 19968: 0xCFA4,
+ 21648 - 19968: 0xDCFB,
+ 21668 - 19968: 0xF6E3,
+ 21672 - 19968: 0xEDAA,
+ 21675 - 19968: 0xF2A1,
+ 21676 - 19968: 0xCEE1,
+ 21683 - 19968: 0xFAA6,
+ 21688 - 19968: 0xF9E0,
+ 21693 - 19968: 0xECD6,
+ 21696 - 19968: 0xE4EE,
+ 21697 - 19968: 0xF9A1,
+ 21700 - 19968: 0xFBEF,
+ 21704 - 19968: 0xF9EB,
+ 21705 - 19968: 0xEEA3,
+ 21729 - 19968: 0xEAAC,
+ 21733 - 19968: 0xCAA8,
+ 21736 - 19968: 0xF4FA,
+ 21741 - 19968: 0xCDD6,
+ 21742 - 19968: 0xFCF6,
+ 21746 - 19968: 0xF4C9,
+ 21754 - 19968: 0xF8D4,
+ 21764 - 19968: 0xF8A6,
+ 21766 - 19968: 0xDECA,
+ 21767 - 19968: 0xF2C6,
+ 21774 - 19968: 0xD7DA,
+ 21776 - 19968: 0xD3D0,
+ 21788 - 19968: 0xD8C5,
+ 21807 - 19968: 0xEAE6,
+ 21809 - 19968: 0xF3DD,
+ 21813 - 19968: 0xE4DA,
+ 21822 - 19968: 0xF6E4,
+ 21828 - 19968: 0xF6F2,
+ 21830 - 19968: 0xDFC2,
+ 21839 - 19968: 0xD9FD,
+ 21843 - 19968: 0xCCF6,
+ 21846 - 19968: 0xD3BA,
+ 21854 - 19968: 0xE4AF,
+ 21859 - 19968: 0xF9E1,
+ 21884 - 19968: 0xF0A6,
+ 21888 - 19968: 0xCBD3,
+ 21892 - 19968: 0xE0BC,
+ 21894 - 19968: 0xF4CA,
+ 21895 - 19968: 0xD4FA,
+ 21897 - 19968: 0xFDAA,
+ 21898 - 19968: 0xF9E2,
+ 21912 - 19968: 0xF4B7,
+ 21913 - 19968: 0xFDC2,
+ 21914 - 19968: 0xFCB0,
+ 21916 - 19968: 0xFDEC,
+ 21917 - 19968: 0xCAE2,
+ 21927 - 19968: 0xFDBD,
+ 21929 - 19968: 0xEAE7,
+ 21930 - 19968: 0xDFC3,
+ 21931 - 19968: 0xD1D2,
+ 21932 - 19968: 0xCEE2,
+ 21934 - 19968: 0xD3A4,
+ 21957 - 19968: 0xFDAB,
+ 21959 - 19968: 0xDFE0,
+ 21972 - 19968: 0xF2C7,
+ 21978 - 19968: 0xE7F0,
+ 21980 - 19968: 0xD0EE,
+ 21983 - 19968: 0xF3AA,
+ 21987 - 19968: 0xDECB,
+ 21988 - 19968: 0xF6B8,
+ 22013 - 19968: 0xE1F5,
+ 22014 - 19968: 0xF1B3,
+ 22022 - 19968: 0xF7A3,
+ 22025 - 19968: 0xCAA9,
+ 22036 - 19968: 0xCFA5,
+ 22039 - 19968: 0xDFC4,
+ 22063 - 19968: 0xE1B0,
+ 22066 - 19968: 0xF0BF,
+ 22068 - 19968: 0xF6A4,
+ 22070 - 19968: 0xE3B6,
+ 22099 - 19968: 0xFAC6,
+ 22120 - 19968: 0xD0EF,
+ 22123 - 19968: 0xFDED,
+ 22132 - 19968: 0xDDC4,
+ 22150 - 19968: 0xFCF7,
+ 22181 - 19968: 0xE6BF,
+ 22188 - 19968: 0xDEAD,
+ 22190 - 19968: 0xFABF,
+ 22196 - 19968: 0xE5F1,
+ 22204 - 19968: 0xEDC4,
+ 22218 - 19968: 0xD2A5,
+ 22221 - 19968: 0xFDEE,
+ 22225 - 19968: 0xF5B6,
+ 22234 - 19968: 0xE1F6,
+ 22235 - 19968: 0xDECC,
+ 22238 - 19968: 0xFCDE,
+ 22240 - 19968: 0xECD7,
+ 22256 - 19968: 0xCDDD,
+ 22265 - 19968: 0xD6B7,
+ 22266 - 19968: 0xCDB3,
+ 22275 - 19968: 0xF8D5,
+ 22276 - 19968: 0xE5D8,
+ 22280 - 19968: 0xCFEA,
+ 22283 - 19968: 0xCFD0,
+ 22285 - 19968: 0xEACC,
+ 22290 - 19968: 0xEAAE,
+ 22291 - 19968: 0xEAAD,
+ 22294 - 19968: 0xD3F1,
+ 22296 - 19968: 0xD3A5,
+ 22303 - 19968: 0xF7CF,
+ 22312 - 19968: 0xEEA4,
+ 22317 - 19968: 0xD0A4,
+ 22320 - 19968: 0xF2A2,
+ 22331 - 19968: 0xD0F0,
+ 22336 - 19968: 0xF2A3,
+ 22338 - 19968: 0xF7F8,
+ 22343 - 19968: 0xD0B3,
+ 22346 - 19968: 0xDBA9,
+ 22349 - 19968: 0xD3BB,
+ 22350 - 19968: 0xCAEC,
+ 22352 - 19968: 0xF1A6,
+ 22353 - 19968: 0xCBD5,
+ 22369 - 19968: 0xF7E7,
+ 22372 - 19968: 0xCDDE,
+ 22374 - 19968: 0xF7A4,
+ 22378 - 19968: 0xF8C0,
+ 22382 - 19968: 0xD3DD,
+ 22384 - 19968: 0xCCD0,
+ 22389 - 19968: 0xCFA6,
+ 22396 - 19968: 0xF6F3,
+ 22402 - 19968: 0xE1F7,
+ 22408 - 19968: 0xD3DC,
+ 22411 - 19968: 0xFAFE,
+ 22419 - 19968: 0xFAA7,
+ 22432 - 19968: 0xEBD9,
+ 22434 - 19968: 0xCFA7,
+ 22435 - 19968: 0xEAAF,
+ 22467 - 19968: 0xE4EF,
+ 22471 - 19968: 0xE9B9,
+ 22472 - 19968: 0xF1D8,
+ 22475 - 19968: 0xD8D8,
+ 22478 - 19968: 0xE0F2,
+ 22495 - 19968: 0xE6B4,
+ 22496 - 19968: 0xDCFC,
+ 22512 - 19968: 0xF3F1,
+ 22516 - 19968: 0xE3D0,
+ 22519 - 19968: 0xF2FB,
+ 22521 - 19968: 0xDBC6,
+ 22522 - 19968: 0xD0F1,
+ 22524 - 19968: 0xD0F2,
+ 22528 - 19968: 0xCFDC,
+ 22530 - 19968: 0xD3D1,
+ 22533 - 19968: 0xCCB1,
+ 22534 - 19968: 0xF7D8,
+ 22536 - 19968: 0xCBA8,
+ 22537 - 19968: 0xEBBC,
+ 22538 - 19968: 0xE4BE,
+ 22558 - 19968: 0xF4DC,
+ 22561 - 19968: 0xDCC2,
+ 22564 - 19968: 0xF0A7,
+ 22567 - 19968: 0xE6C0,
+ 22570 - 19968: 0xCAED,
+ 22575 - 19968: 0xE8EB,
+ 22576 - 19968: 0xE5E8,
+ 22577 - 19968: 0xDCC3,
+ 22580 - 19968: 0xEDDE,
+ 22581 - 19968: 0xD3F2,
+ 22586 - 19968: 0xCCF7,
+ 22602 - 19968: 0xCED4,
+ 22603 - 19968: 0xE7AB,
+ 22607 - 19968: 0xCBC3,
+ 22609 - 19968: 0xE1B1,
+ 22612 - 19968: 0xF7B2,
+ 22615 - 19968: 0xD3F3,
+ 22616 - 19968: 0xD3D2,
+ 22618 - 19968: 0xF5C0,
+ 22622 - 19968: 0xDFDD,
+ 22625 - 19968: 0xEEF3,
+ 22626 - 19968: 0xE7F1,
+ 22628 - 19968: 0xFDB4,
+ 22645 - 19968: 0xF2C8,
+ 22649 - 19968: 0xF3D2,
+ 22652 - 19968: 0xEEF4,
+ 22654 - 19968: 0xE2D3,
+ 22659 - 19968: 0xCCD1,
+ 22661 - 19968: 0xDFEA,
+ 22665 - 19968: 0xE9BA,
+ 22675 - 19968: 0xD9D7,
+ 22684 - 19968: 0xF5CD,
+ 22686 - 19968: 0xF1F2,
+ 22687 - 19968: 0xFAC7,
+ 22696 - 19968: 0xD9F8,
+ 22697 - 19968: 0xD4C2,
+ 22702 - 19968: 0xF6E5,
+ 22707 - 19968: 0xDDC5,
+ 22714 - 19968: 0xE7F2,
+ 22715 - 19968: 0xEDDF,
+ 22718 - 19968: 0xCACB,
+ 22721 - 19968: 0xDBFA,
+ 22725 - 19968: 0xE8B5,
+ 22727 - 19968: 0xD3A6,
+ 22734 - 19968: 0xFDB5,
+ 22737 - 19968: 0xF9C9,
+ 22739 - 19968: 0xE4E2,
+ 22741 - 19968: 0xFBBD,
+ 22744 - 19968: 0xD7A4,
+ 22745 - 19968: 0xCEC5,
+ 22750 - 19968: 0xCED5,
+ 22751 - 19968: 0xD6E6,
+ 22756 - 19968: 0xE5BD,
+ 22763 - 19968: 0xDECD,
+ 22764 - 19968: 0xECF3,
+ 22767 - 19968: 0xEDE0,
+ 22777 - 19968: 0xECEC,
+ 22778 - 19968: 0xFBBE,
+ 22779 - 19968: 0xDFEB,
+ 22781 - 19968: 0xE1F8,
+ 22799 - 19968: 0xF9BE,
+ 22804 - 19968: 0xD0F3,
+ 22805 - 19968: 0xE0AA,
+ 22806 - 19968: 0xE8E2,
+ 22809 - 19968: 0xE2D4,
+ 22810 - 19968: 0xD2FD,
+ 22812 - 19968: 0xE5A8,
+ 22818 - 19968: 0xD9D3,
+ 22823 - 19968: 0xD3DE,
+ 22825 - 19968: 0xF4B8,
+ 22826 - 19968: 0xF7BC,
+ 22827 - 19968: 0xDCFD,
+ 22829 - 19968: 0xE8EC,
+ 22830 - 19968: 0xE4E7,
+ 22833 - 19968: 0xE3F7,
+ 22839 - 19968: 0xECA8,
+ 22846 - 19968: 0xFAF1,
+ 22852 - 19968: 0xE5F2,
+ 22855 - 19968: 0xD0F4,
+ 22856 - 19968: 0xD2AF,
+ 22857 - 19968: 0xDCE5,
+ 22862 - 19968: 0xD0A5,
+ 22863 - 19968: 0xF1B4,
+ 22864 - 19968: 0xFCB1,
+ 22865 - 19968: 0xCCF8,
+ 22868 - 19968: 0xDDC6,
+ 22869 - 19968: 0xFAD1,
+ 22871 - 19968: 0xF7DF,
+ 22874 - 19968: 0xFAA8,
+ 22880 - 19968: 0xEEF5,
+ 22882 - 19968: 0xDECE,
+ 22887 - 19968: 0xE7F3,
+ 22890 - 19968: 0xF7AC,
+ 22891 - 19968: 0xEBC4,
+ 22892 - 19968: 0xEDE1,
+ 22893 - 19968: 0xE0AB,
+ 22894 - 19968: 0xDDC7,
+ 22899 - 19968: 0xD2B3,
+ 22900 - 19968: 0xD2BF,
+ 22904 - 19968: 0xCACC,
+ 22909 - 19968: 0xFBBF,
+ 22914 - 19968: 0xE5FD,
+ 22915 - 19968: 0xDDE5,
+ 22916 - 19968: 0xD8CD,
+ 22922 - 19968: 0xECF4,
+ 22931 - 19968: 0xD0F5,
+ 22934 - 19968: 0xE8ED,
+ 22935 - 19968: 0xD0D2,
+ 22937 - 19968: 0xD9D8,
+ 22949 - 19968: 0xF6E6,
+ 22952 - 19968: 0xDBAA,
+ 22956 - 19968: 0xF7E0,
+ 22969 - 19968: 0xD8D9,
+ 22971 - 19968: 0xF4A3,
+ 22974 - 19968: 0xF4DD,
+ 22979 - 19968: 0xEFD1,
+ 22982 - 19968: 0xD9B5,
+ 22985 - 19968: 0xEDAB,
+ 22987 - 19968: 0xE3B7,
+ 22992 - 19968: 0xEEBB,
+ 22993 - 19968: 0xCDB4,
+ 22995 - 19968: 0xE0F3,
+ 22996 - 19968: 0xEACD,
+ 23001 - 19968: 0xECF5,
+ 23002 - 19968: 0xE8EE,
+ 23004 - 19968: 0xCBA9,
+ 23005 - 19968: 0xF1AF,
+ 23014 - 19968: 0xCACD,
+ 23016 - 19968: 0xECA9,
+ 23018 - 19968: 0xF2EB,
+ 23020 - 19968: 0xFDEF,
+ 23022 - 19968: 0xF9F3,
+ 23032 - 19968: 0xE6C1,
+ 23035 - 19968: 0xECD8,
+ 23039 - 19968: 0xEDAC,
+ 23041 - 19968: 0xEACE,
+ 23043 - 19968: 0xE8DF,
+ 23057 - 19968: 0xDECF,
+ 23064 - 19968: 0xD2A6,
+ 23067 - 19968: 0xE7F4,
+ 23068 - 19968: 0xD1D6,
+ 23071 - 19968: 0xE6C2,
+ 23072 - 19968: 0xE3E3,
+ 23077 - 19968: 0xE4B0,
+ 23081 - 19968: 0xD8B4,
+ 23094 - 19968: 0xF6A5,
+ 23100 - 19968: 0xF3DE,
+ 23105 - 19968: 0xD7A5,
+ 23110 - 19968: 0xF7E8,
+ 23113 - 19968: 0xE8C6,
+ 23130 - 19968: 0xFBE6,
+ 23138 - 19968: 0xDDE6,
+ 23142 - 19968: 0xDCFE,
+ 23186 - 19968: 0xD8DA,
+ 23194 - 19968: 0xDAAC,
+ 23195 - 19968: 0xEAB0,
+ 23204 - 19968: 0xE3B8,
+ 23233 - 19968: 0xCAAA,
+ 23234 - 19968: 0xE1F9,
+ 23236 - 19968: 0xEAB1,
+ 23241 - 19968: 0xF2EC,
+ 23244 - 19968: 0xFAEE,
+ 23265 - 19968: 0xEED5,
+ 23270 - 19968: 0xF9F4,
+ 23273 - 19968: 0xD2EC,
+ 23301 - 19968: 0xFBFB,
+ 23305 - 19968: 0xFDF0,
+ 23307 - 19968: 0xE0BD,
+ 23308 - 19968: 0xCEE3,
+ 23318 - 19968: 0xF8C6,
+ 23338 - 19968: 0xDEAE,
+ 23360 - 19968: 0xDFC5,
+ 23363 - 19968: 0xE5BE,
+ 23376 - 19968: 0xEDAD,
+ 23377 - 19968: 0xFAEA,
+ 23380 - 19968: 0xCDEE,
+ 23381 - 19968: 0xEDA6,
+ 23383 - 19968: 0xEDAE,
+ 23384 - 19968: 0xF0ED,
+ 23386 - 19968: 0xDDA1,
+ 23388 - 19968: 0xEDAF,
+ 23389 - 19968: 0xFCF8,
+ 23391 - 19968: 0xD8EB,
+ 23395 - 19968: 0xCCF9,
+ 23396 - 19968: 0xCDB5,
+ 23401 - 19968: 0xFAA9,
+ 23403 - 19968: 0xE1DD,
+ 23408 - 19968: 0xE2D5,
+ 23409 - 19968: 0xEDCF,
+ 23413 - 19968: 0xDDA2,
+ 23416 - 19968: 0xF9CA,
+ 23418 - 19968: 0xEAE8,
+ 23420 - 19968: 0xE5ED,
+ 23429 - 19968: 0xD3EB,
+ 23431 - 19968: 0xE9D4,
+ 23432 - 19968: 0xE1FA,
+ 23433 - 19968: 0xE4CC,
+ 23435 - 19968: 0xE1E4,
+ 23436 - 19968: 0xE8C7,
+ 23439 - 19968: 0xCEDB,
+ 23443 - 19968: 0xDCD5,
+ 23445 - 19968: 0xF7B5,
+ 23446 - 19968: 0xFCF3,
+ 23447 - 19968: 0xF0F3,
+ 23448 - 19968: 0xCEAF,
+ 23449 - 19968: 0xF1B5,
+ 23450 - 19968: 0xEFD2,
+ 23451 - 19968: 0xE8C8,
+ 23452 - 19968: 0xEBF1,
+ 23458 - 19968: 0xCBD4,
+ 23459 - 19968: 0xE0BE,
+ 23460 - 19968: 0xE3F8,
+ 23461 - 19968: 0xEAE9,
+ 23462 - 19968: 0xFCB2,
+ 23468 - 19968: 0xE0F4,
+ 23470 - 19968: 0xCFE0,
+ 23472 - 19968: 0xEEA5,
+ 23475 - 19968: 0xFAAA,
+ 23476 - 19968: 0xE6C3,
+ 23477 - 19968: 0xE1B2,
+ 23478 - 19968: 0xCAAB,
+ 23480 - 19968: 0xE3E4,
+ 23481 - 19968: 0xE9BB,
+ 23487 - 19968: 0xE2D6,
+ 23488 - 19968: 0xF3F2,
+ 23490 - 19968: 0xEED6,
+ 23491 - 19968: 0xEAB2,
+ 23492 - 19968: 0xD0F6,
+ 23493 - 19968: 0xECD9,
+ 23494 - 19968: 0xDACB,
+ 23495 - 19968: 0xCFA8,
+ 23500 - 19968: 0xDDA3,
+ 23504 - 19968: 0xD8DB,
+ 23506 - 19968: 0xF9CE,
+ 23507 - 19968: 0xE9D5,
+ 23508 - 19968: 0xE3D1,
+ 23511 - 19968: 0xD2BC,
+ 23518 - 19968: 0xD8AC,
+ 23519 - 19968: 0xF3CC,
+ 23521 - 19968: 0xCDFB,
+ 23522 - 19968: 0xF6D6,
+ 23524 - 19968: 0xE7F5,
+ 23525 - 19968: 0xE8EF,
+ 23526 - 19968: 0xE3F9,
+ 23527 - 19968: 0xD2BB,
+ 23528 - 19968: 0xF3F3,
+ 23529 - 19968: 0xE3FB,
+ 23531 - 19968: 0xDED0,
+ 23532 - 19968: 0xCEB0,
+ 23534 - 19968: 0xD6F7,
+ 23535 - 19968: 0xF1D9,
+ 23541 - 19968: 0xF5C1,
+ 23542 - 19968: 0xDCC4,
+ 23544 - 19968: 0xF5BB,
+ 23546 - 19968: 0xDED1,
+ 23553 - 19968: 0xDCE6,
+ 23556 - 19968: 0xDED2,
+ 23559 - 19968: 0xEDE2,
+ 23560 - 19968: 0xEEF6,
+ 23561 - 19968: 0xEACF,
+ 23562 - 19968: 0xF0EE,
+ 23563 - 19968: 0xE3FC,
+ 23565 - 19968: 0xD3DF,
+ 23566 - 19968: 0xD3F4,
+ 23567 - 19968: 0xE1B3,
+ 23569 - 19968: 0xE1B4,
+ 23574 - 19968: 0xF4D3,
+ 23577 - 19968: 0xDFC6,
+ 23588 - 19968: 0xE9D6,
+ 23592 - 19968: 0xDBAB,
+ 23601 - 19968: 0xF6A6,
+ 23608 - 19968: 0xE3B9,
+ 23609 - 19968: 0xEBC5,
+ 23610 - 19968: 0xF4A9,
+ 23611 - 19968: 0xCDB6,
+ 23612 - 19968: 0xD2F9,
+ 23614 - 19968: 0xDAAD,
+ 23615 - 19968: 0xD2E3,
+ 23616 - 19968: 0xCFD1,
+ 23621 - 19968: 0xCBDC,
+ 23622 - 19968: 0xCCFA,
+ 23624 - 19968: 0xCFDD,
+ 23627 - 19968: 0xE8A9,
+ 23629 - 19968: 0xE3BB,
+ 23630 - 19968: 0xE3BA,
+ 23633 - 19968: 0xE0DA,
+ 23637 - 19968: 0xEEF7,
+ 23643 - 19968: 0xDCB3,
+ 23648 - 19968: 0xD3F5,
+ 23650 - 19968: 0xD7A6,
+ 23652 - 19968: 0xF6B5,
+ 23653 - 19968: 0xD7DB,
+ 23660 - 19968: 0xE1D5,
+ 23663 - 19968: 0xD4EA,
+ 23665 - 19968: 0xDFA3,
+ 23673 - 19968: 0xFDDF,
+ 23696 - 19968: 0xD0F7,
+ 23697 - 19968: 0xEDD4,
+ 23713 - 19968: 0xCBAA,
+ 23721 - 19968: 0xE4DB,
+ 23723 - 19968: 0xE1FB,
+ 23724 - 19968: 0xCBA2,
+ 23729 - 19968: 0xD3E0,
+ 23731 - 19968: 0xE4BF,
+ 23733 - 19968: 0xFBC0,
+ 23735 - 19968: 0xDABE,
+ 23736 - 19968: 0xE4CD,
+ 23738 - 19968: 0xD6B9,
+ 23742 - 19968: 0xEFC0,
+ 23744 - 19968: 0xE1FC,
+ 23769 - 19968: 0xF6B9,
+ 23776 - 19968: 0xDFC7,
+ 23784 - 19968: 0xE4B1,
+ 23791 - 19968: 0xDCE7,
+ 23792 - 19968: 0xDCE8,
+ 23796 - 19968: 0xFAD6,
+ 23798 - 19968: 0xD3F6,
+ 23803 - 19968: 0xF1DA,
+ 23805 - 19968: 0xFAF2,
+ 23815 - 19968: 0xE2FD,
+ 23821 - 19968: 0xD5CF,
+ 23822 - 19968: 0xD0F8,
+ 23825 - 19968: 0xCDDF,
+ 23828 - 19968: 0xF5CB,
+ 23830 - 19968: 0xE4F0,
+ 23831 - 19968: 0xCBAB,
+ 23833 - 19968: 0xD7C4,
+ 23847 - 19968: 0xE2FE,
+ 23849 - 19968: 0xDDDA,
+ 23883 - 19968: 0xDAAE,
+ 23884 - 19968: 0xCAEE,
+ 23888 - 19968: 0xD5B9,
+ 23913 - 19968: 0xE3A1,
+ 23916 - 19968: 0xE8E3,
+ 23919 - 19968: 0xF3AB,
+ 23943 - 19968: 0xCFA9,
+ 23947 - 19968: 0xD3F7,
+ 23965 - 19968: 0xD4F1,
+ 23968 - 19968: 0xCEE4,
+ 23970 - 19968: 0xE8F2,
+ 23978 - 19968: 0xE5F5,
+ 23992 - 19968: 0xE7AE,
+ 23994 - 19968: 0xD6BA,
+ 23996 - 19968: 0xDFEC,
+ 23997 - 19968: 0xE4C0,
+ 24013 - 19968: 0xE8E4,
+ 24018 - 19968: 0xD8B5,
+ 24022 - 19968: 0xE4DC,
+ 24029 - 19968: 0xF4B9,
+ 24030 - 19968: 0xF1B6,
+ 24033 - 19968: 0xE2DE,
+ 24034 - 19968: 0xE1B5,
+ 24037 - 19968: 0xCDEF,
+ 24038 - 19968: 0xF1A7,
+ 24039 - 19968: 0xCEE5,
+ 24040 - 19968: 0xCBDD,
+ 24043 - 19968: 0xD9E3,
+ 24046 - 19968: 0xF3AC,
+ 24049 - 19968: 0xD0F9,
+ 24050 - 19968: 0xECAB,
+ 24051 - 19968: 0xDED3,
+ 24052 - 19968: 0xF7E9,
+ 24055 - 19968: 0xF9F5,
+ 24061 - 19968: 0xE1DE,
+ 24062 - 19968: 0xCBEE,
+ 24066 - 19968: 0xE3BC,
+ 24067 - 19968: 0xF8D6,
+ 24070 - 19968: 0xDBEE,
+ 24076 - 19968: 0xFDF1,
+ 24081 - 19968: 0xF7B6,
+ 24086 - 19968: 0xF4DE,
+ 24089 - 19968: 0xF2ED,
+ 24091 - 19968: 0xDBD9,
+ 24093 - 19968: 0xF0A8,
+ 24101 - 19968: 0xE1FD,
+ 24107 - 19968: 0xDED4,
+ 24109 - 19968: 0xE0AC,
+ 24115 - 19968: 0xEDE3,
+ 24118 - 19968: 0xD3E1,
+ 24120 - 19968: 0xDFC8,
+ 24125 - 19968: 0xD9B6,
+ 24127 - 19968: 0xFDAC,
+ 24128 - 19968: 0xEFD3,
+ 24132 - 19968: 0xE4C1,
+ 24133 - 19968: 0xF8EB,
+ 24135 - 19968: 0xDBAC,
+ 24140 - 19968: 0xFCC6,
+ 24149 - 19968: 0xD8AD,
+ 24159 - 19968: 0xF6BA,
+ 24161 - 19968: 0xDBDF,
+ 24162 - 19968: 0xD3D3,
+ 24163 - 19968: 0xF8C7,
+ 24178 - 19968: 0xCACE,
+ 24179 - 19968: 0xF8C1,
+ 24180 - 19968: 0xD2B4,
+ 24183 - 19968: 0xDCB4,
+ 24184 - 19968: 0xFAB9,
+ 24185 - 19968: 0xCACF,
+ 24187 - 19968: 0xFCB3,
+ 24188 - 19968: 0xEAEA,
+ 24189 - 19968: 0xEAEB,
+ 24190 - 19968: 0xD0FA,
+ 24196 - 19968: 0xEDE4,
+ 24199 - 19968: 0xDDE7,
+ 24202 - 19968: 0xDFC9,
+ 24207 - 19968: 0xDFED,
+ 24213 - 19968: 0xEEBC,
+ 24215 - 19968: 0xEFC1,
+ 24218 - 19968: 0xCCD2,
+ 24220 - 19968: 0xDDA4,
+ 24224 - 19968: 0xDFCA,
+ 24230 - 19968: 0xD3F8,
+ 24231 - 19968: 0xF1A8,
+ 24235 - 19968: 0xCDB7,
+ 24237 - 19968: 0xEFD4,
+ 24245 - 19968: 0xE4DD,
+ 24246 - 19968: 0xDFEE,
+ 24247 - 19968: 0xCBAC,
+ 24248 - 19968: 0xE9BC,
+ 24254 - 19968: 0xEAEC,
+ 24258 - 19968: 0xDFCB,
+ 24264 - 19968: 0xF9BF,
+ 24265 - 19968: 0xD6AF,
+ 24266 - 19968: 0xD5C6,
+ 24272 - 19968: 0xCFAA,
+ 24275 - 19968: 0xCEA9,
+ 24278 - 19968: 0xD6F8,
+ 24282 - 19968: 0xF1B7,
+ 24283 - 19968: 0xEEF8,
+ 24287 - 19968: 0xD9D9,
+ 24288 - 19968: 0xF3DF,
+ 24290 - 19968: 0xF8C8,
+ 24291 - 19968: 0xCEC6,
+ 24300 - 19968: 0xD5E6,
+ 24307 - 19968: 0xF4E6,
+ 24310 - 19968: 0xE6C5,
+ 24311 - 19968: 0xEFD5,
+ 24314 - 19968: 0xCBEF,
+ 24315 - 19968: 0xFCDF,
+ 24321 - 19968: 0xDCA7,
+ 24324 - 19968: 0xD6E7,
+ 24330 - 19968: 0xF8C9,
+ 24335 - 19968: 0xE3D2,
+ 24337 - 19968: 0xE3BD,
+ 24339 - 19968: 0xCFE1,
+ 24340 - 19968: 0xF0C0,
+ 24341 - 19968: 0xECDA,
+ 24343 - 19968: 0xDDD7,
+ 24344 - 19968: 0xFBF0,
+ 24347 - 19968: 0xECAC,
+ 24351 - 19968: 0xF0A9,
+ 24358 - 19968: 0xFAD7,
+ 24359 - 19968: 0xFBC1,
+ 24361 - 19968: 0xD2C0,
+ 24369 - 19968: 0xE5B0,
+ 24373 - 19968: 0xEDE5,
+ 24378 - 19968: 0xCBAD,
+ 24380 - 19968: 0xF9B0,
+ 24392 - 19968: 0xF7A5,
+ 24394 - 19968: 0xCBAE,
+ 24396 - 19968: 0xDAAF,
+ 24398 - 19968: 0xD8B6,
+ 24406 - 19968: 0xD3A7,
+ 24407 - 19968: 0xFBB2,
+ 24409 - 19968: 0xFDC4,
+ 24411 - 19968: 0xECAD,
+ 24418 - 19968: 0xFBA1,
+ 24422 - 19968: 0xE5E9,
+ 24423 - 19968: 0xE9EE,
+ 24425 - 19968: 0xF3F4,
+ 24426 - 19968: 0xF8F3,
+ 24427 - 19968: 0xF0C1,
+ 24428 - 19968: 0xDEAF,
+ 24429 - 19968: 0xF8B0,
+ 24432 - 19968: 0xF3E0,
+ 24433 - 19968: 0xE7AF,
+ 24439 - 19968: 0xDBAD,
+ 24441 - 19968: 0xE6B5,
+ 24444 - 19968: 0xF9A8,
+ 24447 - 19968: 0xDDD8,
+ 24448 - 19968: 0xE8D9,
+ 24449 - 19968: 0xEFD6,
+ 24453 - 19968: 0xD3E2,
+ 24455 - 19968: 0xE2DF,
+ 24458 - 19968: 0xFCE0,
+ 24459 - 19968: 0xD7C8,
+ 24460 - 19968: 0xFDAD,
+ 24464 - 19968: 0xDFEF,
+ 24465 - 19968: 0xCCD3,
+ 24466 - 19968: 0xD3F9,
+ 24471 - 19968: 0xD4F0,
+ 24472 - 19968: 0xDBC7,
+ 24473 - 19968: 0xDED5,
+ 24478 - 19968: 0xF0F4,
+ 24480 - 19968: 0xD5D0,
+ 24481 - 19968: 0xE5D9,
+ 24488 - 19968: 0xFCC7,
+ 24489 - 19968: 0xDCD6,
+ 24490 - 19968: 0xE2E0,
+ 24494 - 19968: 0xDAB0,
+ 24501 - 19968: 0xF3A3,
+ 24503 - 19968: 0xD3EC,
+ 24505 - 19968: 0xF4CB,
+ 24509 - 19968: 0xFDC5,
+ 24515 - 19968: 0xE3FD,
+ 24517 - 19968: 0xF9B1,
+ 24524 - 19968: 0xD0FB,
+ 24525 - 19968: 0xECDB,
+ 24534 - 19968: 0xF5BC,
+ 24535 - 19968: 0xF2A4,
+ 24536 - 19968: 0xD8CE,
+ 24537 - 19968: 0xD8CF,
+ 24544 - 19968: 0xF5F7,
+ 24555 - 19968: 0xF6E1,
+ 24565 - 19968: 0xD2B7,
+ 24573 - 19968: 0xFBEC,
+ 24575 - 19968: 0xDDC8,
+ 24591 - 19968: 0xE4E8,
+ 24594 - 19968: 0xD2C1,
+ 24598 - 19968: 0xF8D7,
+ 24604 - 19968: 0xD6BB,
+ 24605 - 19968: 0xDED6,
+ 24608 - 19968: 0xF7BD,
+ 24609 - 19968: 0xECAE,
+ 24613 - 19968: 0xD0E1,
+ 24615 - 19968: 0xE0F5,
+ 24616 - 19968: 0xEAB3,
+ 24618 - 19968: 0xCED6,
+ 24623 - 19968: 0xCCA5,
+ 24641 - 19968: 0xECF6,
+ 24642 - 19968: 0xE2E1,
+ 24643 - 19968: 0xE3BE,
+ 24653 - 19968: 0xFCC8,
+ 24656 - 19968: 0xCDF0,
+ 24658 - 19968: 0xF9F6,
+ 24661 - 19968: 0xDFF0,
+ 24665 - 19968: 0xE5BF,
+ 24669 - 19968: 0xCEBF,
+ 24674 - 19968: 0xFCE1,
+ 24675 - 19968: 0xEDB0,
+ 24676 - 19968: 0xFDD1,
+ 24677 - 19968: 0xF6BB,
+ 24680 - 19968: 0xF9CF,
+ 24681 - 19968: 0xEBDA,
+ 24682 - 19968: 0xCAC1,
+ 24684 - 19968: 0xD2B8,
+ 24685 - 19968: 0xCDF1,
+ 24687 - 19968: 0xE3D3,
+ 24688 - 19968: 0xFDE6,
+ 24709 - 19968: 0xE6ED,
+ 24713 - 19968: 0xE3FA,
+ 24716 - 19968: 0xF0AA,
+ 24717 - 19968: 0xF9D0,
+ 24724 - 19968: 0xFCE2,
+ 24726 - 19968: 0xF8A7,
+ 24730 - 19968: 0xE1E5,
+ 24731 - 19968: 0xEEF9,
+ 24735 - 19968: 0xE7F6,
+ 24736 - 19968: 0xEAED,
+ 24739 - 19968: 0xFCB4,
+ 24740 - 19968: 0xF5C2,
+ 24743 - 19968: 0xD7DC,
+ 24752 - 19968: 0xF0F5,
+ 24754 - 19968: 0xDDE8,
+ 24755 - 19968: 0xD3ED,
+ 24756 - 19968: 0xF5FC,
+ 24758 - 19968: 0xDABF,
+ 24760 - 19968: 0xCCFB,
+ 24764 - 19968: 0xD3FA,
+ 24765 - 19968: 0xF4A4,
+ 24773 - 19968: 0xEFD7,
+ 24775 - 19968: 0xD4C3,
+ 24785 - 19968: 0xFBE3,
+ 24794 - 19968: 0xFBED,
+ 24796 - 19968: 0xE0AD,
+ 24799 - 19968: 0xEAEE,
+ 24800 - 19968: 0xFBB3,
+ 24801 - 19968: 0xE4C2,
+ 24816 - 19968: 0xF6E7,
+ 24817 - 19968: 0xD2DD,
+ 24819 - 19968: 0xDFCC,
+ 24822 - 19968: 0xFCC9,
+ 24825 - 19968: 0xE5A9,
+ 24826 - 19968: 0xE0F6,
+ 24827 - 19968: 0xF6B3,
+ 24833 - 19968: 0xE1FE,
+ 24838 - 19968: 0xCBF0,
+ 24840 - 19968: 0xEAEF,
+ 24841 - 19968: 0xEAF0,
+ 24845 - 19968: 0xDAC0,
+ 24846 - 19968: 0xF8B4,
+ 24847 - 19968: 0xEBF2,
+ 24853 - 19968: 0xE4C3,
+ 24858 - 19968: 0xE9D7,
+ 24859 - 19968: 0xE4F1,
+ 24863 - 19968: 0xCAEF,
+ 24871 - 19968: 0xCED7,
+ 24880 - 19968: 0xFCCA,
+ 24884 - 19968: 0xF3E1,
+ 24887 - 19968: 0xCBC4,
+ 24892 - 19968: 0xE3E5,
+ 24894 - 19968: 0xCBC5,
+ 24895 - 19968: 0xEAB4,
+ 24898 - 19968: 0xE9BD,
+ 24900 - 19968: 0xD7C9,
+ 24903 - 19968: 0xEBDB,
+ 24904 - 19968: 0xEDB1,
+ 24906 - 19968: 0xCCC3,
+ 24907 - 19968: 0xF7BE,
+ 24908 - 19968: 0xFCCB,
+ 24915 - 19968: 0xF8F4,
+ 24917 - 19968: 0xD9B7,
+ 24920 - 19968: 0xF3D3,
+ 24921 - 19968: 0xF3D4,
+ 24925 - 19968: 0xF7E4,
+ 24927 - 19968: 0xF7D1,
+ 24930 - 19968: 0xD8B7,
+ 24931 - 19968: 0xCEB1,
+ 24932 - 19968: 0xCAC2,
+ 24935 - 19968: 0xFBB4,
+ 24936 - 19968: 0xCBC6,
+ 24939 - 19968: 0xF0F6,
+ 24942 - 19968: 0xD5E7,
+ 24944 - 19968: 0xEAD0,
+ 24950 - 19968: 0xCCD4,
+ 24951 - 19968: 0xCBAF,
+ 24957 - 19968: 0xF4AA,
+ 24958 - 19968: 0xE9AF,
+ 24961 - 19968: 0xF5C3,
+ 24962 - 19968: 0xE9D8,
+ 24970 - 19968: 0xDDE9,
+ 24974 - 19968: 0xF1F3,
+ 24976 - 19968: 0xD5FB,
+ 24977 - 19968: 0xDEBB,
+ 24980 - 19968: 0xF4FB,
+ 24984 - 19968: 0xFDF3,
+ 24985 - 19968: 0xFDF2,
+ 24986 - 19968: 0xF7A6,
+ 24996 - 19968: 0xDDC9,
+ 24999 - 19968: 0xD4D3,
+ 25001 - 19968: 0xCCA8,
+ 25003 - 19968: 0xDAC1,
+ 25004 - 19968: 0xCCD5,
+ 25006 - 19968: 0xD9E4,
+ 25010 - 19968: 0xFACA,
+ 25014 - 19968: 0xE5E3,
+ 25018 - 19968: 0xD3BC,
+ 25022 - 19968: 0xCAF0,
+ 25027 - 19968: 0xD0C4,
+ 25031 - 19968: 0xCAD0,
+ 25032 - 19968: 0xFAAB,
+ 25033 - 19968: 0xEBEB,
+ 25034 - 19968: 0xE7F8,
+ 25035 - 19968: 0xD9E5,
+ 25062 - 19968: 0xD1D7,
+ 25074 - 19968: 0xF3A4,
+ 25078 - 19968: 0xD4FB,
+ 25079 - 19968: 0xFCE3,
+ 25080 - 19968: 0xFAD8,
+ 25082 - 19968: 0xF3D5,
+ 25084 - 19968: 0xCFAB,
+ 25087 - 19968: 0xEBF3,
+ 25088 - 19968: 0xD5FC,
+ 25095 - 19968: 0xD3D4,
+ 25096 - 19968: 0xCDFC,
+ 25098 - 19968: 0xD9E6,
+ 25100 - 19968: 0xE2F9,
+ 25101 - 19968: 0xE2A1,
+ 25102 - 19968: 0xEBD4,
+ 25104 - 19968: 0xE0F7,
+ 25105 - 19968: 0xE4B2,
+ 25106 - 19968: 0xCCFC,
+ 25110 - 19968: 0xFBE4,
+ 25114 - 19968: 0xF4AB,
+ 25119 - 19968: 0xD0BD,
+ 25121 - 19968: 0xCAF1,
+ 25130 - 19968: 0xEFB8,
+ 25134 - 19968: 0xD7C0,
+ 25136 - 19968: 0xEEFA,
+ 25137 - 19968: 0xFDF4,
+ 25140 - 19968: 0xD3E3,
+ 25142 - 19968: 0xFBC2,
+ 25150 - 19968: 0xD5E8,
+ 25151 - 19968: 0xDBAE,
+ 25152 - 19968: 0xE1B6,
+ 25153 - 19968: 0xF8B7,
+ 25159 - 19968: 0xE0BF,
+ 25160 - 19968: 0xFBC3,
+ 25161 - 19968: 0xDDEA,
+ 25163 - 19968: 0xE2A2,
+ 25165 - 19968: 0xEEA6,
+ 25171 - 19968: 0xF6E8,
+ 25176 - 19968: 0xF6F5,
+ 25198 - 19968: 0xDDCA,
+ 25201 - 19968: 0xD0E2,
+ 25206 - 19968: 0xDDA6,
+ 25209 - 19968: 0xDDEB,
+ 25212 - 19968: 0xE4F9,
+ 25215 - 19968: 0xE3AF,
+ 25216 - 19968: 0xD0FC,
+ 25220 - 19968: 0xF4FC,
+ 25225 - 19968: 0xCCBC,
+ 25226 - 19968: 0xF7EA,
+ 25233 - 19968: 0xE5E4,
+ 25234 - 19968: 0xDFF1,
+ 25237 - 19968: 0xF7E1,
+ 25239 - 19968: 0xF9F7,
+ 25240 - 19968: 0xEFB9,
+ 25243 - 19968: 0xF8D8,
+ 25259 - 19968: 0xF9A9,
+ 25265 - 19968: 0xF8D9,
+ 25269 - 19968: 0xEEBD,
+ 25273 - 19968: 0xD8C6,
+ 25276 - 19968: 0xE4E3,
+ 25277 - 19968: 0xF5CE,
+ 25282 - 19968: 0xDDD9,
+ 25287 - 19968: 0xD9E7,
+ 25288 - 19968: 0xD2B9,
+ 25289 - 19968: 0xD5C3,
+ 25292 - 19968: 0xDAE5,
+ 25293 - 19968: 0xDAD0,
+ 25295 - 19968: 0xD1D9,
+ 25296 - 19968: 0xCED8,
+ 25298 - 19968: 0xCBDE,
+ 25299 - 19968: 0xF4AC,
+ 25300 - 19968: 0xDAFB,
+ 25302 - 19968: 0xF6E9,
+ 25303 - 19968: 0xE8F3,
+ 25304 - 19968: 0xCFAC,
+ 25305 - 19968: 0xF0F0,
+ 25307 - 19968: 0xF4FD,
+ 25308 - 19968: 0xDBC8,
+ 25324 - 19968: 0xCEC0,
+ 25325 - 19968: 0xE3D4,
+ 25326 - 19968: 0xD1CF,
+ 25327 - 19968: 0xF1F5,
+ 25329 - 19968: 0xCDF2,
+ 25331 - 19968: 0xCFEB,
+ 25335 - 19968: 0xCDB8,
+ 25342 - 19968: 0xE3A6,
+ 25343 - 19968: 0xD1DA,
+ 25345 - 19968: 0xF2A5,
+ 25351 - 19968: 0xF2A6,
+ 25353 - 19968: 0xE4CE,
+ 25361 - 19968: 0xD3FB,
+ 25387 - 19968: 0xF1A9,
+ 25391 - 19968: 0xF2C9,
+ 25402 - 19968: 0xEFD8,
+ 25403 - 19968: 0xE6C9,
+ 25405 - 19968: 0xD8B8,
+ 25406 - 19968: 0xFAF3,
+ 25417 - 19968: 0xF3B5,
+ 25420 - 19968: 0xF8A4,
+ 25423 - 19968: 0xD1F3,
+ 25424 - 19968: 0xE6C8,
+ 25429 - 19968: 0xF8DA,
+ 25447 - 19968: 0xDCE9,
+ 25448 - 19968: 0xDED7,
+ 25454 - 19968: 0xCBDF,
+ 25458 - 19968: 0xCFEC,
+ 25463 - 19968: 0xF4DF,
+ 25466 - 19968: 0xD1F4,
+ 25467 - 19968: 0xD2BA,
+ 25471 - 19968: 0xDFF2,
+ 25475 - 19968: 0xE1B7,
+ 25480 - 19968: 0xE2A3,
+ 25481 - 19968: 0xD3FC,
+ 25484 - 19968: 0xEDE6,
+ 25490 - 19968: 0xDBC9,
+ 25494 - 19968: 0xE4FA,
+ 25496 - 19968: 0xCFDE,
+ 25499 - 19968: 0xCED0,
+ 25504 - 19968: 0xD5D3,
+ 25505 - 19968: 0xF3F5,
+ 25506 - 19968: 0xF7AE,
+ 25509 - 19968: 0xEFC8,
+ 25511 - 19968: 0xCDF3,
+ 25512 - 19968: 0xF5CF,
+ 25513 - 19968: 0xE5F3,
+ 25514 - 19968: 0xF0C2,
+ 25536 - 19968: 0xCAD1,
+ 25540 - 19968: 0xEAF1,
+ 25542 - 19968: 0xD0A6,
+ 25551 - 19968: 0xD9DA,
+ 25552 - 19968: 0xF0AB,
+ 25558 - 19968: 0xEBE7,
+ 25562 - 19968: 0xE5C0,
+ 25563 - 19968: 0xFCB5,
+ 25569 - 19968: 0xE4C4,
+ 25581 - 19968: 0xCCA9,
+ 25582 - 19968: 0xFDC6,
+ 25588 - 19968: 0xEAB5,
+ 25590 - 19968: 0xE5AA,
+ 25591 - 19968: 0xDFBA,
+ 25613 - 19968: 0xE1DF,
+ 25615 - 19968: 0xDAD1,
+ 25620 - 19968: 0xE1B8,
+ 25622 - 19968: 0xE8F4,
+ 25623 - 19968: 0xD3FD,
+ 25628 - 19968: 0xE2A4,
+ 25634 - 19968: 0xF2CA,
+ 25644 - 19968: 0xDAE6,
+ 25645 - 19968: 0xF7B3,
+ 25658 - 19968: 0xFDCD,
+ 25662 - 19968: 0xF3B6,
+ 25688 - 19968: 0xEED7,
+ 25696 - 19968: 0xF5C4,
+ 25705 - 19968: 0xD8A4,
+ 25711 - 19968: 0xF2A7,
+ 25720 - 19968: 0xD9B8,
+ 25721 - 19968: 0xD9B9,
+ 25722 - 19968: 0xEFC9,
+ 25736 - 19968: 0xD6CE,
+ 25745 - 19968: 0xF7CB,
+ 25746 - 19968: 0xDFAE,
+ 25747 - 19968: 0xE8F5,
+ 25754 - 19968: 0xD2B5,
+ 25758 - 19968: 0xD3D5,
+ 25764 - 19968: 0xF4CC,
+ 25765 - 19968: 0xDAFC,
+ 25771 - 19968: 0xD9E8,
+ 25773 - 19968: 0xF7EB,
+ 25774 - 19968: 0xF5C9,
+ 25776 - 19968: 0xF3BC,
+ 25778 - 19968: 0xDAD2,
+ 25787 - 19968: 0xD3B5,
+ 25793 - 19968: 0xE8B6,
+ 25796 - 19968: 0xD6CF,
+ 25797 - 19968: 0xF4BA,
+ 25799 - 19968: 0xF7C9,
+ 25802 - 19968: 0xCCAA,
+ 25805 - 19968: 0xF0C3,
+ 25806 - 19968: 0xCCD6,
+ 25810 - 19968: 0xD0D3,
+ 25812 - 19968: 0xD3BD,
+ 25816 - 19968: 0xDBFB,
+ 25818 - 19968: 0xCBE0,
+ 25825 - 19968: 0xD3E4,
+ 25826 - 19968: 0xF6F7,
+ 25829 - 19968: 0xD5BA,
+ 25830 - 19968: 0xF3CD,
+ 25831 - 19968: 0xCBE1,
+ 25836 - 19968: 0xEBF4,
+ 25842 - 19968: 0xF4AD,
+ 25844 - 19968: 0xFCAA,
+ 25850 - 19968: 0xF7EC,
+ 25854 - 19968: 0xE8F6,
+ 25856 - 19968: 0xDAE7,
+ 25860 - 19968: 0xF7CC,
+ 25880 - 19968: 0xE5C1,
+ 25885 - 19968: 0xE0EE,
+ 25891 - 19968: 0xD5FD,
+ 25898 - 19968: 0xCEE6,
+ 25899 - 19968: 0xFCAB,
+ 25900 - 19968: 0xD5BB,
+ 25903 - 19968: 0xF2A8,
+ 25910 - 19968: 0xE2A5,
+ 25911 - 19968: 0xCDB9,
+ 25912 - 19968: 0xEAF2,
+ 25913 - 19968: 0xCBC7,
+ 25915 - 19968: 0xCDF4,
+ 25918 - 19968: 0xDBAF,
+ 25919 - 19968: 0xEFD9,
+ 25925 - 19968: 0xCDBA,
+ 25928 - 19968: 0xFCF9,
+ 25933 - 19968: 0xDFF3,
+ 25934 - 19968: 0xCEE7,
+ 25935 - 19968: 0xDAC2,
+ 25937 - 19968: 0xCFAD,
+ 25942 - 19968: 0xE7F9,
+ 25943 - 19968: 0xF8A8,
+ 25950 - 19968: 0xF3E2,
+ 25954 - 19968: 0xCAF2,
+ 25955 - 19968: 0xDFA4,
+ 25958 - 19968: 0xD4C4,
+ 25964 - 19968: 0xCCD7,
+ 25965 - 19968: 0xE5C2,
+ 25970 - 19968: 0xCDBB,
+ 25972 - 19968: 0xEFDA,
+ 25973 - 19968: 0xEED8,
+ 25975 - 19968: 0xDDA7,
+ 25976 - 19968: 0xE2A6,
+ 25982 - 19968: 0xE0C0,
+ 25986 - 19968: 0xD6B0,
+ 25987 - 19968: 0xF8CA,
+ 25989 - 19968: 0xFCFA,
+ 25991 - 19968: 0xD9FE,
+ 25996 - 19968: 0xDEB0,
+ 26000 - 19968: 0xDDEC,
+ 26001 - 19968: 0xDAE8,
+ 26007 - 19968: 0xD4E0,
+ 26009 - 19968: 0xD6F9,
+ 26011 - 19968: 0xCDD7,
+ 26012 - 19968: 0xDED8,
+ 26015 - 19968: 0xF2F8,
+ 26017 - 19968: 0xE4D6,
+ 26020 - 19968: 0xD0C5,
+ 26021 - 19968: 0xF4AE,
+ 26023 - 19968: 0xDDA8,
+ 26027 - 19968: 0xEDC5,
+ 26028 - 19968: 0xF3D6,
+ 26031 - 19968: 0xDED9,
+ 26032 - 19968: 0xE3E6,
+ 26039 - 19968: 0xD3A8,
+ 26041 - 19968: 0xDBB0,
+ 26044 - 19968: 0xE5DA,
+ 26045 - 19968: 0xE3BF,
+ 26049 - 19968: 0xDBB1,
+ 26053 - 19968: 0xD5E9,
+ 26059 - 19968: 0xE0C1,
+ 26060 - 19968: 0xEFDB,
+ 26063 - 19968: 0xF0E9,
+ 26066 - 19968: 0xD7B2,
+ 26071 - 19968: 0xD0FD,
+ 26080 - 19968: 0xD9E9,
+ 26083 - 19968: 0xD0FE,
+ 26085 - 19968: 0xECED,
+ 26086 - 19968: 0xD3A9,
+ 26088 - 19968: 0xF2A9,
+ 26089 - 19968: 0xF0C4,
+ 26092 - 19968: 0xE2E2,
+ 26093 - 19968: 0xE9EF,
+ 26097 - 19968: 0xF9D1,
+ 26100 - 19968: 0xE9D9,
+ 26106 - 19968: 0xE8DA,
+ 26107 - 19968: 0xDAC3,
+ 26108 - 19968: 0xDAC4,
+ 26109 - 19968: 0xD4C5,
+ 26111 - 19968: 0xE7FA,
+ 26118 - 19968: 0xCDE0,
+ 26119 - 19968: 0xE3B0,
+ 26121 - 19968: 0xDBB2,
+ 26122 - 19968: 0xFBC4,
+ 26124 - 19968: 0xF3E3,
+ 26126 - 19968: 0xD9A5,
+ 26127 - 19968: 0xFBE7,
+ 26128 - 19968: 0xDDCB,
+ 26129 - 19968: 0xD0D4,
+ 26131 - 19968: 0xE6B6,
+ 26132 - 19968: 0xE0AE,
+ 26133 - 19968: 0xFDDA,
+ 26142 - 19968: 0xDCB5,
+ 26143 - 19968: 0xE0F8,
+ 26144 - 19968: 0xE7B1,
+ 26149 - 19968: 0xF5F0,
+ 26151 - 19968: 0xD8DC,
+ 26152 - 19968: 0xEDC6,
+ 26157 - 19968: 0xE1B9,
+ 26159 - 19968: 0xE3C0,
+ 26160 - 19968: 0xF9C0,
+ 26161 - 19968: 0xE9F0,
+ 26164 - 19968: 0xD9DB,
+ 26166 - 19968: 0xF3E4,
+ 26170 - 19968: 0xDCB6,
+ 26171 - 19968: 0xE4E9,
+ 26177 - 19968: 0xF0C5,
+ 26178 - 19968: 0xE3C1,
+ 26179 - 19968: 0xFCCC,
+ 26180 - 19968: 0xFCCD,
+ 26185 - 19968: 0xF2CB,
+ 26187 - 19968: 0xF2CC,
+ 26191 - 19968: 0xE4CF,
+ 26201 - 19968: 0xF1DB,
+ 26203 - 19968: 0xFAD9,
+ 26205 - 19968: 0xF1B8,
+ 26206 - 19968: 0xFDF5,
+ 26207 - 19968: 0xE0F9,
+ 26212 - 19968: 0xE7FB,
+ 26213 - 19968: 0xFCB7,
+ 26214 - 19968: 0xFCE4,
+ 26215 - 19968: 0xFBC5,
+ 26216 - 19968: 0xE3E7,
+ 26217 - 19968: 0xD8B9,
+ 26219 - 19968: 0xF6F8,
+ 26222 - 19968: 0xDCC5,
+ 26223 - 19968: 0xCCD8,
+ 26227 - 19968: 0xE0AF,
+ 26228 - 19968: 0xF4E7,
+ 26230 - 19968: 0xEFDC,
+ 26231 - 19968: 0xCFFC,
+ 26232 - 19968: 0xEFDD,
+ 26234 - 19968: 0xF2AA,
+ 26244 - 19968: 0xFDBE,
+ 26247 - 19968: 0xCAAC,
+ 26248 - 19968: 0xFDBB,
+ 26249 - 19968: 0xFDC7,
+ 26254 - 19968: 0xE7B2,
+ 26256 - 19968: 0xEAD1,
+ 26257 - 19968: 0xDFF4,
+ 26262 - 19968: 0xD1EC,
+ 26263 - 19968: 0xE4DE,
+ 26264 - 19968: 0xE5C3,
+ 26269 - 19968: 0xD9A6,
+ 26272 - 19968: 0xCDBC,
+ 26274 - 19968: 0xF3E5,
+ 26283 - 19968: 0xEDD5,
+ 26286 - 19968: 0xD9BA,
+ 26290 - 19968: 0xEDE7,
+ 26291 - 19968: 0xFBB5,
+ 26292 - 19968: 0xF8EC,
+ 26297 - 19968: 0xE0E7,
+ 26299 - 19968: 0xCCD9,
+ 26302 - 19968: 0xD4C6,
+ 26308 - 19968: 0xE7A5,
+ 26310 - 19968: 0xD5F5,
+ 26311 - 19968: 0xD3BE,
+ 26313 - 19968: 0xFCFB,
+ 26326 - 19968: 0xE4F2,
+ 26329 - 19968: 0xDFF5,
+ 26332 - 19968: 0xE8F8,
+ 26333 - 19968: 0xF8ED,
+ 26336 - 19968: 0xCEC7,
+ 26342 - 19968: 0xFDF6,
+ 26352 - 19968: 0xE8D8,
+ 26354 - 19968: 0xCDD8,
+ 26355 - 19968: 0xE7D6,
+ 26356 - 19968: 0xCCDA,
+ 26359 - 19968: 0xCAE3,
+ 26360 - 19968: 0xDFF6,
+ 26361 - 19968: 0xF0C7,
+ 26362 - 19968: 0xF0C6,
+ 26364 - 19968: 0xD8BA,
+ 26366 - 19968: 0xF1F4,
+ 26367 - 19968: 0xF4F0,
+ 26368 - 19968: 0xF5CC,
+ 26371 - 19968: 0xFCE5,
+ 26376 - 19968: 0xEAC5,
+ 26377 - 19968: 0xEAF3,
+ 26379 - 19968: 0xDDDB,
+ 26381 - 19968: 0xDCD7,
+ 26388 - 19968: 0xDEFD,
+ 26389 - 19968: 0xF2F9,
+ 26391 - 19968: 0xD5C7,
+ 26395 - 19968: 0xD8D0,
+ 26397 - 19968: 0xF0C8,
+ 26398 - 19968: 0xD1A1,
+ 26399 - 19968: 0xD1A2,
+ 26406 - 19968: 0xD9D4,
+ 26407 - 19968: 0xD6E8,
+ 26408 - 19968: 0xD9CA,
+ 26410 - 19968: 0xDAB1,
+ 26411 - 19968: 0xD8C7,
+ 26412 - 19968: 0xDCE2,
+ 26413 - 19968: 0xF3CE,
+ 26414 - 19968: 0xF5F4,
+ 26417 - 19968: 0xF1B9,
+ 26420 - 19968: 0xDAD3,
+ 26422 - 19968: 0xF6EA,
+ 26426 - 19968: 0xCFF5,
+ 26429 - 19968: 0xFDAE,
+ 26438 - 19968: 0xCAD2,
+ 26441 - 19968: 0xDFB4,
+ 26446 - 19968: 0xD7DD,
+ 26447 - 19968: 0xFABA,
+ 26448 - 19968: 0xEEA7,
+ 26449 - 19968: 0xF5BD,
+ 26451 - 19968: 0xF8F5,
+ 26454 - 19968: 0xEDE8,
+ 26460 - 19968: 0xD4E1,
+ 26462 - 19968: 0xD1A3,
+ 26463 - 19968: 0xE1D6,
+ 26477 - 19968: 0xF9F8,
+ 26479 - 19968: 0xDBCA,
+ 26480 - 19968: 0xCBF9,
+ 26481 - 19968: 0xD4D4,
+ 26483 - 19968: 0xD9DC,
+ 26485 - 19968: 0xEEBE,
+ 26487 - 19968: 0xF7ED,
+ 26491 - 19968: 0xD2EE,
+ 26494 - 19968: 0xE1E6,
+ 26495 - 19968: 0xF7F9,
+ 26503 - 19968: 0xDDED,
+ 26505 - 19968: 0xE8DB,
+ 26507 - 19968: 0xDBB3,
+ 26511 - 19968: 0xD1F7,
+ 26512 - 19968: 0xE0B0,
+ 26515 - 19968: 0xD4E2,
+ 26517 - 19968: 0xF6D7,
+ 26519 - 19968: 0xD7F9,
+ 26522 - 19968: 0xD8DD,
+ 26524 - 19968: 0xCDFD,
+ 26525 - 19968: 0xF2AB,
+ 26543 - 19968: 0xCDBD,
+ 26544 - 19968: 0xF8C2,
+ 26547 - 19968: 0xF2AC,
+ 26550 - 19968: 0xCAAD,
+ 26551 - 19968: 0xCAAE,
+ 26552 - 19968: 0xCFAE,
+ 26558 - 19968: 0xE3C2,
+ 26564 - 19968: 0xDCB7,
+ 26575 - 19968: 0xDBDA,
+ 26576 - 19968: 0xD9BB,
+ 26577 - 19968: 0xCAF3,
+ 26578 - 19968: 0xF6D3,
+ 26579 - 19968: 0xE6F8,
+ 26580 - 19968: 0xEAF5,
+ 26586 - 19968: 0xEAF6,
+ 26589 - 19968: 0xF6F9,
+ 26601 - 19968: 0xCFAF,
+ 26604 - 19968: 0xCAD3,
+ 26607 - 19968: 0xCAAF,
+ 26608 - 19968: 0xD2B0,
+ 26609 - 19968: 0xF1BA,
+ 26611 - 19968: 0xD7B3,
+ 26612 - 19968: 0xE3C3,
+ 26613 - 19968: 0xF3FD,
+ 26614 - 19968: 0xDEDA,
+ 26619 - 19968: 0xDEDB,
+ 26622 - 19968: 0xEFDE,
+ 26642 - 19968: 0xE2E3,
+ 26643 - 19968: 0xEEFB,
+ 26646 - 19968: 0xDFF7,
+ 26647 - 19968: 0xD7CA,
+ 26657 - 19968: 0xCEE8,
+ 26658 - 19968: 0xDBDB,
+ 26666 - 19968: 0xF1BB,
+ 26671 - 19968: 0xE9F1,
+ 26680 - 19968: 0xFAB7,
+ 26681 - 19968: 0xD0C6,
+ 26684 - 19968: 0xCCAB,
+ 26685 - 19968: 0xEEA8,
+ 26688 - 19968: 0xCBFA,
+ 26689 - 19968: 0xF9F9,
+ 26690 - 19968: 0xCCFD,
+ 26691 - 19968: 0xD3FE,
+ 26696 - 19968: 0xE4D0,
+ 26702 - 19968: 0xF2EE,
+ 26704 - 19968: 0xD4D5,
+ 26705 - 19968: 0xDFCD,
+ 26707 - 19968: 0xFCB8,
+ 26708 - 19968: 0xD1D0,
+ 26733 - 19968: 0xF2CD,
+ 26742 - 19968: 0xF7D2,
+ 26751 - 19968: 0xCAD4,
+ 26753 - 19968: 0xD5D9,
+ 26757 - 19968: 0xD8DE,
+ 26767 - 19968: 0xCDD9,
+ 26771 - 19968: 0xEEA9,
+ 26772 - 19968: 0xF6BC,
+ 26775 - 19968: 0xCCDB,
+ 26781 - 19968: 0xF0C9,
+ 26783 - 19968: 0xFCFC,
+ 26785 - 19968: 0xE8C9,
+ 26786 - 19968: 0xF4FE,
+ 26791 - 19968: 0xE7FC,
+ 26792 - 19968: 0xD7DE,
+ 26797 - 19968: 0xDEDC,
+ 26799 - 19968: 0xF0AC,
+ 26800 - 19968: 0xCCFE,
+ 26801 - 19968: 0xCDE1,
+ 26803 - 19968: 0xE1BA,
+ 26805 - 19968: 0xDBEF,
+ 26806 - 19968: 0xDAB2,
+ 26820 - 19968: 0xD1A5,
+ 26821 - 19968: 0xDCB8,
+ 26825 - 19968: 0xD8F6,
+ 26827 - 19968: 0xD1A4,
+ 26829 - 19968: 0xCDE2,
+ 26834 - 19968: 0xDCEA,
+ 26837 - 19968: 0xF0F7,
+ 26839 - 19968: 0xF0CA,
+ 26840 - 19968: 0xD0BE,
+ 26842 - 19968: 0xDDDC,
+ 26847 - 19968: 0xD4D6,
+ 26848 - 19968: 0xD3D6,
+ 26855 - 19968: 0xEDD0,
+ 26856 - 19968: 0xCDA1,
+ 26862 - 19968: 0xDFB5,
+ 26866 - 19968: 0xDFF8,
+ 26873 - 19968: 0xD4A1,
+ 26874 - 19968: 0xCEB2,
+ 26880 - 19968: 0xE8CA,
+ 26885 - 19968: 0xEBF5,
+ 26893 - 19968: 0xE3D5,
+ 26894 - 19968: 0xF5D0,
+ 26898 - 19968: 0xF5A1,
+ 26919 - 19968: 0xD9A7,
+ 26928 - 19968: 0xE5AB,
+ 26941 - 19968: 0xE6CB,
+ 26943 - 19968: 0xF5F1,
+ 26954 - 19968: 0xE5C5,
+ 26963 - 19968: 0xF9A3,
+ 26964 - 19968: 0xE0DB,
+ 26965 - 19968: 0xF6EB,
+ 26967 - 19968: 0xCBF1,
+ 26969 - 19968: 0xD9EA,
+ 26970 - 19968: 0xF5A2,
+ 26974 - 19968: 0xD7D1,
+ 26976 - 19968: 0xD1F8,
+ 26977 - 19968: 0xEAF8,
+ 26978 - 19968: 0xEAF9,
+ 26979 - 19968: 0xDAB3,
+ 26984 - 19968: 0xEFDF,
+ 26987 - 19968: 0xF1EF,
+ 26989 - 19968: 0xE5F6,
+ 26990 - 19968: 0xEEBF,
+ 26991 - 19968: 0xE2E4,
+ 26997 - 19968: 0xD0BF,
+ 26999 - 19968: 0xFAAC,
+ 27000 - 19968: 0xF5D1,
+ 27001 - 19968: 0xE7B3,
+ 27029 - 19968: 0xE9BE,
+ 27035 - 19968: 0xF2CE,
+ 27036 - 19968: 0xDBB4,
+ 27045 - 19968: 0xFCCE,
+ 27047 - 19968: 0xDDEE,
+ 27054 - 19968: 0xE7B4,
+ 27060 - 19968: 0xD7B4,
+ 27067 - 19968: 0xF7B4,
+ 27073 - 19968: 0xCDBE,
+ 27075 - 19968: 0xDAE9,
+ 27083 - 19968: 0xCFB0,
+ 27084 - 19968: 0xF7D9,
+ 27085 - 19968: 0xF3E6,
+ 27088 - 19968: 0xCED9,
+ 27112 - 19968: 0xCEAA,
+ 27114 - 19968: 0xCBC8,
+ 27131 - 19968: 0xD0A7,
+ 27133 - 19968: 0xF0CB,
+ 27135 - 19968: 0xD0C7,
+ 27138 - 19968: 0xE4C5,
+ 27146 - 19968: 0xDBE0,
+ 27153 - 19968: 0xD5DA,
+ 27155 - 19968: 0xD7A7,
+ 27159 - 19968: 0xEEC0,
+ 27161 - 19968: 0xF8F6,
+ 27166 - 19968: 0xF5D2,
+ 27167 - 19968: 0xEDE9,
+ 27169 - 19968: 0xD9BC,
+ 27171 - 19968: 0xE5C6,
+ 27189 - 19968: 0xF5A3,
+ 27192 - 19968: 0xDAD4,
+ 27193 - 19968: 0xE2A7,
+ 27194 - 19968: 0xFBFC,
+ 27197 - 19968: 0xF1DC,
+ 27204 - 19968: 0xCAF4,
+ 27208 - 19968: 0xE8FA,
+ 27211 - 19968: 0xCEE9,
+ 27218 - 19968: 0xE9F8,
+ 27219 - 19968: 0xE2E5,
+ 27224 - 19968: 0xD0B9,
+ 27225 - 19968: 0xD4F2,
+ 27231 - 19968: 0xD1A6,
+ 27233 - 19968: 0xDFCE,
+ 27243 - 19968: 0xFCF4,
+ 27264 - 19968: 0xD3AA,
+ 27268 - 19968: 0xCCAC,
+ 27273 - 19968: 0xEFE0,
+ 27277 - 19968: 0xE5E5,
+ 27278 - 19968: 0xD0D5,
+ 27287 - 19968: 0xDBFC,
+ 27292 - 19968: 0xFCE6,
+ 27298 - 19968: 0xCBFE,
+ 27299 - 19968: 0xEDEA,
+ 27315 - 19968: 0xDEB1,
+ 27323 - 19968: 0xF9E3,
+ 27330 - 19968: 0xD4A2,
+ 27331 - 19968: 0xCFF6,
+ 27347 - 19968: 0xD6D0,
+ 27354 - 19968: 0xD5EA,
+ 27355 - 19968: 0xF1EE,
+ 27382 - 19968: 0xFACB,
+ 27387 - 19968: 0xE5A1,
+ 27396 - 19968: 0xD5B1,
+ 27402 - 19968: 0xCFED,
+ 27404 - 19968: 0xEDEB,
+ 27410 - 19968: 0xD5B2,
+ 27414 - 19968: 0xD5BC,
+ 27424 - 19968: 0xFDE2,
+ 27425 - 19968: 0xF3AD,
+ 27427 - 19968: 0xFDDB,
+ 27442 - 19968: 0xE9B0,
+ 27450 - 19968: 0xD1A7,
+ 27453 - 19968: 0xFDE3,
+ 27454 - 19968: 0xCEB3,
+ 27462 - 19968: 0xFDE4,
+ 27463 - 19968: 0xFACE,
+ 27468 - 19968: 0xCAB0,
+ 27470 - 19968: 0xF7A7,
+ 27472 - 19968: 0xCFB1,
+ 27487 - 19968: 0xE6A2,
+ 27489 - 19968: 0xFCB6,
+ 27490 - 19968: 0xF2AD,
+ 27491 - 19968: 0xEFE1,
+ 27492 - 19968: 0xF3AE,
+ 27493 - 19968: 0xDCC6,
+ 27494 - 19968: 0xD9EB,
+ 27498 - 19968: 0xE8E0,
+ 27506 - 19968: 0xE1A8,
+ 27511 - 19968: 0xD5F6,
+ 27512 - 19968: 0xCFFD,
+ 27515 - 19968: 0xDEDD,
+ 27519 - 19968: 0xD9D1,
+ 27523 - 19968: 0xE4EA,
+ 27524 - 19968: 0xF2CF,
+ 27526 - 19968: 0xF7BF,
+ 27529 - 19968: 0xE2E6,
+ 27530 - 19968: 0xE2A8,
+ 27542 - 19968: 0xE3D6,
+ 27544 - 19968: 0xEDD1,
+ 27550 - 19968: 0xE9F9,
+ 27566 - 19968: 0xD6B1,
+ 27567 - 19968: 0xDEB2,
+ 27570 - 19968: 0xE0E8,
+ 27573 - 19968: 0xD3AB,
+ 27575 - 19968: 0xEBDC,
+ 27578 - 19968: 0xDFAF,
+ 27580 - 19968: 0xCAC3,
+ 27583 - 19968: 0xEEFC,
+ 27585 - 19968: 0xFDC3,
+ 27589 - 19968: 0xEBF6,
+ 27590 - 19968: 0xCFB2,
+ 27595 - 19968: 0xD9EC,
+ 27597 - 19968: 0xD9BD,
+ 27599 - 19968: 0xD8DF,
+ 27602 - 19968: 0xD4B8,
+ 27603 - 19968: 0xEBBE,
+ 27604 - 19968: 0xDDEF,
+ 27606 - 19968: 0xDDF0,
+ 27607 - 19968: 0xDDF1,
+ 27608 - 19968: 0xDDF2,
+ 27611 - 19968: 0xD9BE,
+ 27627 - 19968: 0xFBC6,
+ 27628 - 19968: 0xCFB3,
+ 27656 - 19968: 0xEEFD,
+ 27663 - 19968: 0xE4AB,
+ 27665 - 19968: 0xDAC5,
+ 27667 - 19968: 0xD8EC,
+ 27683 - 19968: 0xD1A8,
+ 27700 - 19968: 0xE2A9,
+ 27703 - 19968: 0xDEBC,
+ 27704 - 19968: 0xE7B5,
+ 27710 - 19968: 0xDBF0,
+ 27712 - 19968: 0xEFE2,
+ 27713 - 19968: 0xF1F0,
+ 27714 - 19968: 0xCFB4,
+ 27726 - 19968: 0xDBF1,
+ 27728 - 19968: 0xE0B1,
+ 27733 - 19968: 0xDFA5,
+ 27735 - 19968: 0xF9D2,
+ 27738 - 19968: 0xE7FD,
+ 27741 - 19968: 0xE6A3,
+ 27742 - 19968: 0xFBF1,
+ 27743 - 19968: 0xCBB0,
+ 27744 - 19968: 0xF2AE,
+ 27752 - 19968: 0xCDE7,
+ 27754 - 19968: 0xE8DC,
+ 27757 - 19968: 0xE7D7,
+ 27760 - 19968: 0xF7C0,
+ 27762 - 19968: 0xD0E3,
+ 27766 - 19968: 0xDAA1,
+ 27770 - 19968: 0xCCBD,
+ 27773 - 19968: 0xD1A9,
+ 27774 - 19968: 0xDDCC,
+ 27777 - 19968: 0xE3FE,
+ 27778 - 19968: 0xD1AA,
+ 27779 - 19968: 0xE8AA,
+ 27781 - 19968: 0xEAB6,
+ 27782 - 19968: 0xF9FA,
+ 27783 - 19968: 0xE6CC,
+ 27784 - 19968: 0xF6D8,
+ 27788 - 19968: 0xD4C7,
+ 27792 - 19968: 0xD9CB,
+ 27794 - 19968: 0xD9D2,
+ 27795 - 19968: 0xD3CB,
+ 27796 - 19968: 0xD8F7,
+ 27797 - 19968: 0xDAA9,
+ 27798 - 19968: 0xF5F8,
+ 27801 - 19968: 0xDEDE,
+ 27802 - 19968: 0xF2AF,
+ 27803 - 19968: 0xF8A9,
+ 27819 - 19968: 0xD8C8,
+ 27822 - 19968: 0xEEC1,
+ 27827 - 19968: 0xF9C1,
+ 27832 - 19968: 0xDDF3,
+ 27833 - 19968: 0xEAFA,
+ 27835 - 19968: 0xF6BD,
+ 27836 - 19968: 0xE1BB,
+ 27837 - 19968: 0xCDBF,
+ 27838 - 19968: 0xF4D4,
+ 27839 - 19968: 0xE6CD,
+ 27841 - 19968: 0xFCCF,
+ 27842 - 19968: 0xFBA2,
+ 27844 - 19968: 0xE0DC,
+ 27849 - 19968: 0xF4BB,
+ 27850 - 19968: 0xDAD5,
+ 27852 - 19968: 0xF9B2,
+ 27859 - 19968: 0xFBF2,
+ 27861 - 19968: 0xDBF6,
+ 27863 - 19968: 0xDEDF,
+ 27867 - 19968: 0xDBF2,
+ 27873 - 19968: 0xF8DC,
+ 27874 - 19968: 0xF7EE,
+ 27875 - 19968: 0xEBE8,
+ 27877 - 19968: 0xD2FA,
+ 27880 - 19968: 0xF1BC,
+ 27883 - 19968: 0xFADA,
+ 27886 - 19968: 0xDAEA,
+ 27887 - 19968: 0xDAC6,
+ 27888 - 19968: 0xF7C1,
+ 27891 - 19968: 0xE7B6,
+ 27915 - 19968: 0xE5C7,
+ 27916 - 19968: 0xD6AC,
+ 27921 - 19968: 0xDCC7,
+ 27927 - 19968: 0xE1A9,
+ 27929 - 19968: 0xE2AA,
+ 27931 - 19968: 0xD5A6,
+ 27934 - 19968: 0xD4D7,
+ 27941 - 19968: 0xF2D0,
+ 27943 - 19968: 0xEAFB,
+ 27945 - 19968: 0xE0DD,
+ 27946 - 19968: 0xFBF3,
+ 27954 - 19968: 0xF1BD,
+ 27957 - 19968: 0xE2E7,
+ 27958 - 19968: 0xFDD7,
+ 27960 - 19968: 0xCEC8,
+ 27961 - 19968: 0xEAB7,
+ 27963 - 19968: 0xFCC0,
+ 27965 - 19968: 0xFDE7,
+ 27966 - 19968: 0xF7EF,
+ 27969 - 19968: 0xD7B5,
+ 27993 - 19968: 0xEFBA,
+ 27994 - 19968: 0xF1DD,
+ 27996 - 19968: 0xDEB3,
+ 28003 - 19968: 0xE8CB,
+ 28006 - 19968: 0xF8DD,
+ 28009 - 19968: 0xFBC7,
+ 28010 - 19968: 0xD5C8,
+ 28012 - 19968: 0xD7DF,
+ 28014 - 19968: 0xDDA9,
+ 28020 - 19968: 0xE9B1,
+ 28023 - 19968: 0xFAAD,
+ 28024 - 19968: 0xF6D9,
+ 28025 - 19968: 0xFAF4,
+ 28031 - 19968: 0xF8AA,
+ 28037 - 19968: 0xE6EE,
+ 28039 - 19968: 0xCCDC,
+ 28040 - 19968: 0xE1BC,
+ 28041 - 19968: 0xE0EF,
+ 28044 - 19968: 0xE9BF,
+ 28045 - 19968: 0xFCFD,
+ 28046 - 19968: 0xE6CE,
+ 28049 - 19968: 0xE1D7,
+ 28051 - 19968: 0xE6CF,
+ 28053 - 19968: 0xF4F1,
+ 28079 - 19968: 0xE4F3,
+ 28082 - 19968: 0xE4FB,
+ 28085 - 19968: 0xF9E4,
+ 28096 - 19968: 0xEFE3,
+ 28099 - 19968: 0xCFEE,
+ 28100 - 19968: 0xF6BE,
+ 28101 - 19968: 0xE0B2,
+ 28102 - 19968: 0xFCFE,
+ 28103 - 19968: 0xD1AB,
+ 28107 - 19968: 0xD7FA,
+ 28111 - 19968: 0xFBC8,
+ 28113 - 19968: 0xE2D7,
+ 28120 - 19968: 0xD4A3,
+ 28121 - 19968: 0xF0F8,
+ 28122 - 19968: 0xD7A8,
+ 28126 - 19968: 0xE1E7,
+ 28129 - 19968: 0xD3BF,
+ 28136 - 19968: 0xEFE4,
+ 28138 - 19968: 0xD7C5,
+ 28139 - 19968: 0xEBE2,
+ 28142 - 19968: 0xFCE7,
+ 28145 - 19968: 0xE4A2,
+ 28147 - 19968: 0xE2E8,
+ 28149 - 19968: 0xE6D0,
+ 28151 - 19968: 0xFBE8,
+ 28152 - 19968: 0xF4E8,
+ 28153 - 19968: 0xE5F4,
+ 28154 - 19968: 0xF4BC,
+ 28155 - 19968: 0xF4D5,
+ 28183 - 19968: 0xDFB6,
+ 28185 - 19968: 0xFCB9,
+ 28186 - 19968: 0xEEC2,
+ 28187 - 19968: 0xCAF5,
+ 28191 - 19968: 0xEFE5,
+ 28192 - 19968: 0xCBE2,
+ 28193 - 19968: 0xD4A4,
+ 28195 - 19968: 0xDEE0,
+ 28196 - 19968: 0xDAFD,
+ 28197 - 19968: 0xE4C6,
+ 28198 - 19968: 0xE8BE,
+ 28203 - 19968: 0xE0DE,
+ 28204 - 19968: 0xF6B4,
+ 28205 - 19968: 0xEAD2,
+ 28207 - 19968: 0xF9FB,
+ 28210 - 19968: 0xE0C2,
+ 28212 - 19968: 0xCAE4,
+ 28214 - 19968: 0xE7B7,
+ 28216 - 19968: 0xEAFD,
+ 28218 - 19968: 0xD9DD,
+ 28220 - 19968: 0xDAB4,
+ 28221 - 19968: 0xEEAA,
+ 28222 - 19968: 0xFBE9,
+ 28227 - 19968: 0xDBCB,
+ 28228 - 19968: 0xDAB5,
+ 28234 - 19968: 0xF1BE,
+ 28237 - 19968: 0xD3AC,
+ 28246 - 19968: 0xFBC9,
+ 28248 - 19968: 0xDFCF,
+ 28251 - 19968: 0xD3C0,
+ 28252 - 19968: 0xE3D7,
+ 28254 - 19968: 0xEFE6,
+ 28255 - 19968: 0xFCD0,
+ 28263 - 19968: 0xE9C0,
+ 28267 - 19968: 0xF5D3,
+ 28270 - 19968: 0xECDC,
+ 28271 - 19968: 0xF7B7,
+ 28274 - 19968: 0xEAB8,
+ 28275 - 19968: 0xD1F9,
+ 28282 - 19968: 0xDCC8,
+ 28304 - 19968: 0xEAB9,
+ 28310 - 19968: 0xF1DE,
+ 28316 - 19968: 0xD7B6,
+ 28317 - 19968: 0xCFB5,
+ 28319 - 19968: 0xD9A8,
+ 28322 - 19968: 0xECEE,
+ 28325 - 19968: 0xDDAA,
+ 28330 - 19968: 0xCDA2,
+ 28331 - 19968: 0xE8AE,
+ 28335 - 19968: 0xE1BD,
+ 28337 - 19968: 0xF2D1,
+ 28342 - 19968: 0xE9C1,
+ 28346 - 19968: 0xD2FC,
+ 28354 - 19968: 0xDBB5,
+ 28356 - 19968: 0xF3E7,
+ 28357 - 19968: 0xD8FE,
+ 28361 - 19968: 0xFCD1,
+ 28363 - 19968: 0xEDB2,
+ 28364 - 19968: 0xF4AF,
+ 28366 - 19968: 0xFBA3,
+ 28369 - 19968: 0xFCC1,
+ 28371 - 19968: 0xEEAB,
+ 28372 - 19968: 0xD4A5,
+ 28399 - 19968: 0xF4F2,
+ 28404 - 19968: 0xEED9,
+ 28408 - 19968: 0xFBCA,
+ 28414 - 19968: 0xCDE3,
+ 28415 - 19968: 0xD8BB,
+ 28417 - 19968: 0xE5DB,
+ 28418 - 19968: 0xF8F7,
+ 28422 - 19968: 0xF6D4,
+ 28431 - 19968: 0xD7A9,
+ 28433 - 19968: 0xCBC9,
+ 28436 - 19968: 0xE6D1,
+ 28437 - 19968: 0xF0CC,
+ 28448 - 19968: 0xD8AE,
+ 28450 - 19968: 0xF9D3,
+ 28451 - 19968: 0xD5FE,
+ 28459 - 19968: 0xD8BC,
+ 28460 - 19968: 0xF2B0,
+ 28465 - 19968: 0xE2AB,
+ 28466 - 19968: 0xF3E8,
+ 28472 - 19968: 0xEFC2,
+ 28479 - 19968: 0xEDEC,
+ 28481 - 19968: 0xE7B8,
+ 28497 - 19968: 0xDAFE,
+ 28500 - 19968: 0xCCBE,
+ 28503 - 19968: 0xF2FC,
+ 28504 - 19968: 0xDAEB,
+ 28506 - 19968: 0xE2D8,
+ 28507 - 19968: 0xEDD6,
+ 28510 - 19968: 0xD6D1,
+ 28511 - 19968: 0xE0B3,
+ 28514 - 19968: 0xFCD2,
+ 28516 - 19968: 0xEBC8,
+ 28525 - 19968: 0xD3C1,
+ 28526 - 19968: 0xF0CD,
+ 28528 - 19968: 0xCFF7,
+ 28538 - 19968: 0xEDD2,
+ 28540 - 19968: 0xD4D8,
+ 28541 - 19968: 0xDCC9,
+ 28542 - 19968: 0xD7F1,
+ 28545 - 19968: 0xDFBB,
+ 28548 - 19968: 0xF3A5,
+ 28552 - 19968: 0xF4CD,
+ 28557 - 19968: 0xF1BF,
+ 28558 - 19968: 0xF8B1,
+ 28560 - 19968: 0xE9FA,
+ 28564 - 19968: 0xFBCB,
+ 28567 - 19968: 0xCAD5,
+ 28579 - 19968: 0xF9D4,
+ 28580 - 19968: 0xF7CA,
+ 28583 - 19968: 0xD6C8,
+ 28590 - 19968: 0xFCE8,
+ 28591 - 19968: 0xF3BD,
+ 28593 - 19968: 0xEEFE,
+ 28595 - 19968: 0xE7FE,
+ 28601 - 19968: 0xD3C2,
+ 28606 - 19968: 0xD3B6,
+ 28608 - 19968: 0xCCAD,
+ 28609 - 19968: 0xF6FA,
+ 28610 - 19968: 0xD6B2,
+ 28611 - 19968: 0xD2D8,
+ 28618 - 19968: 0xE7D8,
+ 28629 - 19968: 0xE3A5,
+ 28634 - 19968: 0xE7B9,
+ 28639 - 19968: 0xF0AD,
+ 28640 - 19968: 0xFBCC,
+ 28641 - 19968: 0xEBA1,
+ 28644 - 19968: 0xD4A6,
+ 28649 - 19968: 0xFBCD,
+ 28651 - 19968: 0xD5BD,
+ 28652 - 19968: 0xF1DF,
+ 28655 - 19968: 0xF6FB,
+ 28657 - 19968: 0xDEB4,
+ 28670 - 19968: 0xD5EB,
+ 28673 - 19968: 0xE5C8,
+ 28677 - 19968: 0xFBA4,
+ 28678 - 19968: 0xD4B9,
+ 28681 - 19968: 0xDEE1,
+ 28683 - 19968: 0xE4A3,
+ 28687 - 19968: 0xD7B7,
+ 28689 - 19968: 0xF8EE,
+ 28693 - 19968: 0xDEB5,
+ 28696 - 19968: 0xD6D2,
+ 28698 - 19968: 0xF9D5,
+ 28699 - 19968: 0xE7BA,
+ 28700 - 19968: 0xEBD5,
+ 28701 - 19968: 0xD5F7,
+ 28702 - 19968: 0xEFE7,
+ 28703 - 19968: 0xE1BE,
+ 28707 - 19968: 0xFAAE,
+ 28711 - 19968: 0xD6E9,
+ 28712 - 19968: 0xD6EE,
+ 28719 - 19968: 0xE7BB,
+ 28727 - 19968: 0xECCB,
+ 28734 - 19968: 0xD5B3,
+ 28748 - 19968: 0xCEB4,
+ 28752 - 19968: 0xFBA5,
+ 28753 - 19968: 0xE1EE,
+ 28760 - 19968: 0xF7A8,
+ 28765 - 19968: 0xFBCE,
+ 28771 - 19968: 0xD8BD,
+ 28779 - 19968: 0xFBFD,
+ 28784 - 19968: 0xFCE9,
+ 28792 - 19968: 0xCFB6,
+ 28796 - 19968: 0xEDC7,
+ 28797 - 19968: 0xEEAC,
+ 28805 - 19968: 0xCCDD,
+ 28810 - 19968: 0xF6A7,
+ 28814 - 19968: 0xE6FA,
+ 28818 - 19968: 0xF5A4,
+ 28824 - 19968: 0xFDDC,
+ 28825 - 19968: 0xEDB3,
+ 28826 - 19968: 0xCEC9,
+ 28833 - 19968: 0xEFE8,
+ 28836 - 19968: 0xE1BF,
+ 28843 - 19968: 0xFADB,
+ 28844 - 19968: 0xCBE3,
+ 28845 - 19968: 0xF7A9,
+ 28847 - 19968: 0xFBA6,
+ 28851 - 19968: 0xDCB9,
+ 28855 - 19968: 0xF1C0,
+ 28856 - 19968: 0xEDC8,
+ 28857 - 19968: 0xEFC3,
+ 28872 - 19968: 0xD6AD,
+ 28875 - 19968: 0xFDCE,
+ 28879 - 19968: 0xE8A1,
+ 28888 - 19968: 0xFBF4,
+ 28889 - 19968: 0xD5A7,
+ 28893 - 19968: 0xF1F6,
+ 28895 - 19968: 0xE6D3,
+ 28913 - 19968: 0xCCDE,
+ 28921 - 19968: 0xF8B2,
+ 28925 - 19968: 0xDCEB,
+ 28932 - 19968: 0xFDB6,
+ 28937 - 19968: 0xE5EA,
+ 28940 - 19968: 0xF1E0,
+ 28953 - 19968: 0xDBCC,
+ 28954 - 19968: 0xDDCD,
+ 28958 - 19968: 0xD4C8,
+ 28961 - 19968: 0xD9ED,
+ 28966 - 19968: 0xF5A5,
+ 28976 - 19968: 0xE6FB,
+ 28982 - 19968: 0xE6D4,
+ 28999 - 19968: 0xFDC8,
+ 29001 - 19968: 0xD6A1,
+ 29002 - 19968: 0xFDBF,
+ 29004 - 19968: 0xFCD3,
+ 29006 - 19968: 0xEFA1,
+ 29008 - 19968: 0xE7BC,
+ 29014 - 19968: 0xD1EE,
+ 29017 - 19968: 0xE6D5,
+ 29020 - 19968: 0xE9F2,
+ 29022 - 19968: 0xDFB0,
+ 29028 - 19968: 0xD8E0,
+ 29029 - 19968: 0xFCBA,
+ 29030 - 19968: 0xFDAF,
+ 29031 - 19968: 0xF0CE,
+ 29033 - 19968: 0xDBE1,
+ 29036 - 19968: 0xE5C9,
+ 29038 - 19968: 0xEDB4,
+ 29053 - 19968: 0xE0C3,
+ 29060 - 19968: 0xE3D8,
+ 29065 - 19968: 0xE9FB,
+ 29066 - 19968: 0xEAA8,
+ 29071 - 19968: 0xFDB7,
+ 29074 - 19968: 0xFBA7,
+ 29076 - 19968: 0xE9C2,
+ 29081 - 19968: 0xFDF7,
+ 29087 - 19968: 0xE2D9,
+ 29090 - 19968: 0xDCEC,
+ 29100 - 19968: 0xE8A2,
+ 29105 - 19968: 0xE6F0,
+ 29113 - 19968: 0xFDF8,
+ 29114 - 19968: 0xFDF9,
+ 29118 - 19968: 0xF6BF,
+ 29121 - 19968: 0xE7A7,
+ 29123 - 19968: 0xE6D7,
+ 29128 - 19968: 0xD4F3,
+ 29129 - 19968: 0xD4C9,
+ 29134 - 19968: 0xD6FA,
+ 29136 - 19968: 0xD7F2,
+ 29138 - 19968: 0xE1C0,
+ 29140 - 19968: 0xDBE2,
+ 29141 - 19968: 0xE6D8,
+ 29151 - 19968: 0xE7BD,
+ 29157 - 19968: 0xF0CF,
+ 29158 - 19968: 0xF3BE,
+ 29159 - 19968: 0xE2AC,
+ 29165 - 19968: 0xF5B7,
+ 29166 - 19968: 0xE0F0,
+ 29179 - 19968: 0xFDB8,
+ 29180 - 19968: 0xE3E8,
+ 29182 - 19968: 0xD4A7,
+ 29183 - 19968: 0xE8FC,
+ 29184 - 19968: 0xFAD2,
+ 29190 - 19968: 0xF8EF,
+ 29200 - 19968: 0xD6D3,
+ 29211 - 19968: 0xD5B4,
+ 29226 - 19968: 0xF0D0,
+ 29228 - 19968: 0xF7F0,
+ 29229 - 19968: 0xEEB3,
+ 29232 - 19968: 0xEABA,
+ 29234 - 19968: 0xEAD3,
+ 29237 - 19968: 0xEDC9,
+ 29238 - 19968: 0xDDAB,
+ 29242 - 19968: 0xE5AC,
+ 29243 - 19968: 0xFDA1,
+ 29245 - 19968: 0xDFD0,
+ 29246 - 19968: 0xECB3,
+ 29248 - 19968: 0xDFD1,
+ 29254 - 19968: 0xEDED,
+ 29255 - 19968: 0xF8B8,
+ 29256 - 19968: 0xF7FA,
+ 29260 - 19968: 0xF8AB,
+ 29266 - 19968: 0xF4E0,
+ 29272 - 19968: 0xD4BA,
+ 29273 - 19968: 0xE4B3,
+ 29275 - 19968: 0xE9DA,
+ 29277 - 19968: 0xDEB6,
+ 29279 - 19968: 0xD9BF,
+ 29281 - 19968: 0xD9C0,
+ 29282 - 19968: 0xD6EF,
+ 29287 - 19968: 0xD9CC,
+ 29289 - 19968: 0xDAAA,
+ 29298 - 19968: 0xDFE5,
+ 29305 - 19968: 0xF7E5,
+ 29309 - 19968: 0xCCB2,
+ 29312 - 19968: 0xDFF9,
+ 29313 - 19968: 0xD7E0,
+ 29346 - 19968: 0xD4BB,
+ 29351 - 19968: 0xFDFA,
+ 29356 - 19968: 0xCCB3,
+ 29359 - 19968: 0xDBF3,
+ 29376 - 19968: 0xDFD2,
+ 29378 - 19968: 0xCECA,
+ 29380 - 19968: 0xEEDA,
+ 29390 - 19968: 0xE4E4,
+ 29392 - 19968: 0xFBCF,
+ 29399 - 19968: 0xCFB7,
+ 29401 - 19968: 0xEEC3,
+ 29409 - 19968: 0xCEEA,
+ 29417 - 19968: 0xE2AD,
+ 29432 - 19968: 0xD7E1,
+ 29433 - 19968: 0xFAF5,
+ 29436 - 19968: 0xD5C9,
+ 29437 - 19968: 0xF8AC,
+ 29450 - 19968: 0xE7D9,
+ 29462 - 19968: 0xF3E9,
+ 29467 - 19968: 0xD8ED,
+ 29468 - 19968: 0xE3C4,
+ 29469 - 19968: 0xF0F1,
+ 29477 - 19968: 0xE8E5,
+ 29481 - 19968: 0xE0FA,
+ 29482 - 19968: 0xEEC4,
+ 29483 - 19968: 0xD9DE,
+ 29494 - 19968: 0xEBA2,
+ 29495 - 19968: 0xEBA3,
+ 29502 - 19968: 0xFCC2,
+ 29503 - 19968: 0xEABB,
+ 29508 - 19968: 0xE8AB,
+ 29509 - 19968: 0xDEE2,
+ 29520 - 19968: 0xEDEF,
+ 29522 - 19968: 0xE8A3,
+ 29527 - 19968: 0xCFF1,
+ 29544 - 19968: 0xD4BC,
+ 29546 - 19968: 0xFCEA,
+ 29552 - 19968: 0xE7BE,
+ 29554 - 19968: 0xFCF2,
+ 29557 - 19968: 0xD6B4,
+ 29560 - 19968: 0xE2AE,
+ 29562 - 19968: 0xD3B7,
+ 29563 - 19968: 0xFACC,
+ 29572 - 19968: 0xFADC,
+ 29574 - 19968: 0xEDB5,
+ 29575 - 19968: 0xE1E3,
+ 29577 - 19968: 0xE8AC,
+ 29579 - 19968: 0xE8DD,
+ 29582 - 19968: 0xEFE9,
+ 29588 - 19968: 0xF4BD,
+ 29590 - 19968: 0xCFB8,
+ 29591 - 19968: 0xE9DB,
+ 29592 - 19968: 0xD1AC,
+ 29599 - 19968: 0xDAC7,
+ 29607 - 19968: 0xEBC9,
+ 29609 - 19968: 0xE8CC,
+ 29613 - 19968: 0xDEB7,
+ 29618 - 19968: 0xD6BC,
+ 29619 - 19968: 0xD3E5,
+ 29625 - 19968: 0xFADD,
+ 29632 - 19968: 0xDAD6,
+ 29634 - 19968: 0xCAB1,
+ 29641 - 19968: 0xDAC8,
+ 29642 - 19968: 0xDFA6,
+ 29644 - 19968: 0xF9B3,
+ 29645 - 19968: 0xF2D2,
+ 29647 - 19968: 0xCAC4,
+ 29654 - 19968: 0xCECB,
+ 29657 - 19968: 0xCDF5,
+ 29661 - 19968: 0xFDB0,
+ 29662 - 19968: 0xD5A8,
+ 29664 - 19968: 0xF1C1,
+ 29667 - 19968: 0xE2E9,
+ 29668 - 19968: 0xDCCA,
+ 29669 - 19968: 0xECB4,
+ 29670 - 19968: 0xFAC0,
+ 29673 - 19968: 0xFBA8,
+ 29674 - 19968: 0xD0A8,
+ 29677 - 19968: 0xDAEC,
+ 29687 - 19968: 0xD9EE,
+ 29689 - 19968: 0xE0FB,
+ 29693 - 19968: 0xEFEA,
+ 29694 - 19968: 0xFADE,
+ 29697 - 19968: 0xE0C4,
+ 29699 - 19968: 0xCFB9,
+ 29701 - 19968: 0xD5CA,
+ 29702 - 19968: 0xD7E2,
+ 29703 - 19968: 0xE2AF,
+ 29705 - 19968: 0xD7B8,
+ 29715 - 19968: 0xE8CD,
+ 29723 - 19968: 0xF6DA,
+ 29728 - 19968: 0xEFA2,
+ 29729 - 19968: 0xE2DA,
+ 29730 - 19968: 0xF6FC,
+ 29733 - 19968: 0xFBD0,
+ 29734 - 19968: 0xD1AD,
+ 29736 - 19968: 0xCDE4,
+ 29738 - 19968: 0xD1AE,
+ 29739 - 19968: 0xDCED,
+ 29740 - 19968: 0xE8CE,
+ 29742 - 19968: 0xF0F9,
+ 29743 - 19968: 0xCEB5,
+ 29744 - 19968: 0xE6FC,
+ 29747 - 19968: 0xD7FB,
+ 29748 - 19968: 0xD0D6,
+ 29749 - 19968: 0xDDF5,
+ 29750 - 19968: 0xF7F1,
+ 29752 - 19968: 0xF6FD,
+ 29754 - 19968: 0xDBF7,
+ 29759 - 19968: 0xFBEA,
+ 29760 - 19968: 0xE9DC,
+ 29761 - 19968: 0xD9C1,
+ 29763 - 19968: 0xF5F2,
+ 29764 - 19968: 0xE0C5,
+ 29771 - 19968: 0xEAD4,
+ 29781 - 19968: 0xF9C2,
+ 29783 - 19968: 0xEABC,
+ 29785 - 19968: 0xD2C5,
+ 29786 - 19968: 0xFBD1,
+ 29787 - 19968: 0xE7C0,
+ 29788 - 19968: 0xEBA5,
+ 29790 - 19968: 0xDFFA,
+ 29791 - 19968: 0xE3A2,
+ 29792 - 19968: 0xD7B9,
+ 29794 - 19968: 0xE9C3,
+ 29796 - 19968: 0xE8FD,
+ 29797 - 19968: 0xE8AF,
+ 29800 - 19968: 0xF2D3,
+ 29801 - 19968: 0xFBA9,
+ 29802 - 19968: 0xD8A5,
+ 29807 - 19968: 0xD5CB,
+ 29822 - 19968: 0xD0C8,
+ 29826 - 19968: 0xD1AF,
+ 29827 - 19968: 0xD7E3,
+ 29831 - 19968: 0xE0C6,
+ 29833 - 19968: 0xD6A2,
+ 29835 - 19968: 0xEDF0,
+ 29848 - 19968: 0xD7F3,
+ 29852 - 19968: 0xFCD4,
+ 29854 - 19968: 0xDAD7,
+ 29855 - 19968: 0xCCDF,
+ 29857 - 19968: 0xF2D4,
+ 29859 - 19968: 0xD1B0,
+ 29861 - 19968: 0xCCE0,
+ 29863 - 19968: 0xDBFD,
+ 29864 - 19968: 0xF3BF,
+ 29866 - 19968: 0xF0D1,
+ 29872 - 19968: 0xFCBB,
+ 29874 - 19968: 0xE2B0,
+ 29877 - 19968: 0xE6A5,
+ 29881 - 19968: 0xE2DB,
+ 29885 - 19968: 0xDFDE,
+ 29887 - 19968: 0xE0C7,
+ 29894 - 19968: 0xF2EF,
+ 29898 - 19968: 0xCCE1,
+ 29903 - 19968: 0xD6EA,
+ 29908 - 19968: 0xE7C2,
+ 29912 - 19968: 0xCEB6,
+ 29914 - 19968: 0xF3C0,
+ 29916 - 19968: 0xCDFE,
+ 29920 - 19968: 0xFBD2,
+ 29922 - 19968: 0xF8F8,
+ 29923 - 19968: 0xF7FB,
+ 29926 - 19968: 0xE8BF,
+ 29934 - 19968: 0xE8B7,
+ 29943 - 19968: 0xEDB6,
+ 29953 - 19968: 0xDCBA,
+ 29956 - 19968: 0xCCB4,
+ 29969 - 19968: 0xF1F7,
+ 29973 - 19968: 0xE8B8,
+ 29976 - 19968: 0xCAF6,
+ 29978 - 19968: 0xE4A4,
+ 29979 - 19968: 0xF4D6,
+ 29983 - 19968: 0xDFE6,
+ 29987 - 19968: 0xDFA7,
+ 29989 - 19968: 0xDFE7,
+ 29990 - 19968: 0xE1C1,
+ 29992 - 19968: 0xE9C4,
+ 29995 - 19968: 0xDCCB,
+ 29996 - 19968: 0xE9C5,
+ 30000 - 19968: 0xEFA3,
+ 30001 - 19968: 0xEBA6,
+ 30002 - 19968: 0xCBA3,
+ 30003 - 19968: 0xE3E9,
+ 30007 - 19968: 0xD1FB,
+ 30008 - 19968: 0xEFA4,
+ 30010 - 19968: 0xEFEB,
+ 30023 - 19968: 0xD0B4,
+ 30028 - 19968: 0xCDA3,
+ 30031 - 19968: 0xE8E6,
+ 30033 - 19968: 0xEFA5,
+ 30035 - 19968: 0xD3CC,
+ 30036 - 19968: 0xDAED,
+ 30041 - 19968: 0xD7BA,
+ 30043 - 19968: 0xF2D5,
+ 30044 - 19968: 0xF5E5,
+ 30045 - 19968: 0xD9EF,
+ 30050 - 19968: 0xF9B4,
+ 30053 - 19968: 0xD5D4,
+ 30054 - 19968: 0xFDCF,
+ 30058 - 19968: 0xDBE3,
+ 30063 - 19968: 0xF1E1,
+ 30064 - 19968: 0xECB6,
+ 30069 - 19968: 0xFBFE,
+ 30070 - 19968: 0xD3D7,
+ 30072 - 19968: 0xD1B1,
+ 30074 - 19968: 0xCBB1,
+ 30079 - 19968: 0xD1B2,
+ 30086 - 19968: 0xCBB2,
+ 30087 - 19968: 0xF1C2,
+ 30090 - 19968: 0xF4E1,
+ 30091 - 19968: 0xF9B5,
+ 30094 - 19968: 0xE1C3,
+ 30095 - 19968: 0xE1C2,
+ 30097 - 19968: 0xEBF7,
+ 30109 - 19968: 0xDFA8,
+ 30117 - 19968: 0xCBCA,
+ 30123 - 19968: 0xE6B9,
+ 30129 - 19968: 0xF8DE,
+ 30130 - 19968: 0xF9AA,
+ 30131 - 19968: 0xCAF7,
+ 30133 - 19968: 0xEDB7,
+ 30136 - 19968: 0xD3B8,
+ 30137 - 19968: 0xF2D6,
+ 30140 - 19968: 0xD4D9,
+ 30141 - 19968: 0xEEC5,
+ 30142 - 19968: 0xF2F0,
+ 30146 - 19968: 0xCAB2,
+ 30149 - 19968: 0xDCBB,
+ 30151 - 19968: 0xF1F8,
+ 30157 - 19968: 0xECB7,
+ 30162 - 19968: 0xE5CA,
+ 30164 - 19968: 0xF6C0,
+ 30165 - 19968: 0xFDDD,
+ 30168 - 19968: 0xD4E3,
+ 30169 - 19968: 0xCCE2,
+ 30171 - 19968: 0xF7D4,
+ 30178 - 19968: 0xD7E5,
+ 30192 - 19968: 0xD3C3,
+ 30194 - 19968: 0xD8A6,
+ 30196 - 19968: 0xF6C1,
+ 30202 - 19968: 0xDDF6,
+ 30204 - 19968: 0xCDC0,
+ 30208 - 19968: 0xE5DC,
+ 30221 - 19968: 0xE5CB,
+ 30233 - 19968: 0xE1C4,
+ 30239 - 19968: 0xE8B0,
+ 30240 - 19968: 0xF4B0,
+ 30241 - 19968: 0xF3EA,
+ 30242 - 19968: 0xDAEE,
+ 30244 - 19968: 0xD7BB,
+ 30246 - 19968: 0xE2B1,
+ 30267 - 19968: 0xD7AA,
+ 30274 - 19968: 0xD6FB,
+ 30284 - 19968: 0xE4DF,
+ 30286 - 19968: 0xCAD6,
+ 30290 - 19968: 0xEBA8,
+ 30294 - 19968: 0xDBFE,
+ 30305 - 19968: 0xF6C2,
+ 30308 - 19968: 0xEFBB,
+ 30313 - 19968: 0xD4FD,
+ 30316 - 19968: 0xE0C8,
+ 30320 - 19968: 0xE8B9,
+ 30322 - 19968: 0xEFA6,
+ 30328 - 19968: 0xCDA4,
+ 30331 - 19968: 0xD4F4,
+ 30332 - 19968: 0xDBA1,
+ 30333 - 19968: 0xDBDC,
+ 30334 - 19968: 0xDBDD,
+ 30340 - 19968: 0xEEDC,
+ 30342 - 19968: 0xCBCB,
+ 30343 - 19968: 0xFCD5,
+ 30350 - 19968: 0xCEEB,
+ 30352 - 19968: 0xCDC1,
+ 30355 - 19968: 0xFBD3,
+ 30382 - 19968: 0xF9AB,
+ 30394 - 19968: 0xF5D4,
+ 30399 - 19968: 0xD9A9,
+ 30402 - 19968: 0xE9DD,
+ 30403 - 19968: 0xDBCD,
+ 30406 - 19968: 0xDDCE,
+ 30408 - 19968: 0xE7C3,
+ 30410 - 19968: 0xECCC,
+ 30418 - 19968: 0xF9EC,
+ 30422 - 19968: 0xCBCC,
+ 30427 - 19968: 0xE0FC,
+ 30428 - 19968: 0xD4A8,
+ 30430 - 19968: 0xEDD3,
+ 30431 - 19968: 0xD8EF,
+ 30433 - 19968: 0xF2D7,
+ 30435 - 19968: 0xCAF8,
+ 30436 - 19968: 0xDAEF,
+ 30439 - 19968: 0xD6D4,
+ 30446 - 19968: 0xD9CD,
+ 30450 - 19968: 0xD8EE,
+ 30452 - 19968: 0xF2C1,
+ 30456 - 19968: 0xDFD3,
+ 30460 - 19968: 0xDAF0,
+ 30462 - 19968: 0xE2EA,
+ 30465 - 19968: 0xE0FD,
+ 30468 - 19968: 0xD8F8,
+ 30472 - 19968: 0xF7AF,
+ 30473 - 19968: 0xDAB6,
+ 30475 - 19968: 0xCAD7,
+ 30494 - 19968: 0xF2D8,
+ 30496 - 19968: 0xD8F9,
+ 30505 - 19968: 0xFADF,
+ 30519 - 19968: 0xCFEF,
+ 30520 - 19968: 0xD9C2,
+ 30522 - 19968: 0xF0D2,
+ 30524 - 19968: 0xE4D1,
+ 30528 - 19968: 0xF3B7,
+ 30541 - 19968: 0xFAE0,
+ 30555 - 19968: 0xEFEC,
+ 30561 - 19968: 0xE2B2,
+ 30563 - 19968: 0xD4BD,
+ 30566 - 19968: 0xD9CE,
+ 30571 - 19968: 0xF4E2,
+ 30585 - 19968: 0xD4A9,
+ 30590 - 19968: 0xCDC2,
+ 30591 - 19968: 0xE7DA,
+ 30603 - 19968: 0xF2D9,
+ 30609 - 19968: 0xD9AA,
+ 30622 - 19968: 0xD8BE,
+ 30629 - 19968: 0xDCAD,
+ 30636 - 19968: 0xE2EB,
+ 30637 - 19968: 0xD6FC,
+ 30640 - 19968: 0xCAF9,
+ 30643 - 19968: 0xD4DA,
+ 30651 - 19968: 0xF4D7,
+ 30652 - 19968: 0xCCA1,
+ 30655 - 19968: 0xCFBA,
+ 30679 - 19968: 0xF5B8,
+ 30683 - 19968: 0xD9C3,
+ 30684 - 19968: 0xD0E8,
+ 30690 - 19968: 0xE3C5,
+ 30691 - 19968: 0xEBF8,
+ 30693 - 19968: 0xF2B1,
+ 30697 - 19968: 0xCFBB,
+ 30701 - 19968: 0xD3AD,
+ 30702 - 19968: 0xE8E1,
+ 30703 - 19968: 0xCEEC,
+ 30707 - 19968: 0xE0B4,
+ 30722 - 19968: 0xDEE3,
+ 30738 - 19968: 0xDDF7,
+ 30757 - 19968: 0xF2B2,
+ 30758 - 19968: 0xF3F6,
+ 30759 - 19968: 0xF6DB,
+ 30764 - 19968: 0xD7FE,
+ 30770 - 19968: 0xF8DF,
+ 30772 - 19968: 0xF7F2,
+ 30789 - 19968: 0xD0A9,
+ 30799 - 19968: 0xE6DA,
+ 30813 - 19968: 0xF5A6,
+ 30827 - 19968: 0xD7BC,
+ 30828 - 19968: 0xCCE3,
+ 30831 - 19968: 0xE6DB,
+ 30844 - 19968: 0xDDDD,
+ 30849 - 19968: 0xD1B3,
+ 30855 - 19968: 0xEFED,
+ 30860 - 19968: 0xD6DE,
+ 30861 - 19968: 0xE4F4,
+ 30862 - 19968: 0xE1EF,
+ 30865 - 19968: 0xDDF8,
+ 30871 - 19968: 0xE8CF,
+ 30883 - 19968: 0xCAE5,
+ 30887 - 19968: 0xDCA1,
+ 30889 - 19968: 0xE0B5,
+ 30906 - 19968: 0xFCAC,
+ 30907 - 19968: 0xFCAD,
+ 30908 - 19968: 0xD8A7,
+ 30913 - 19968: 0xEDB8,
+ 30917 - 19968: 0xDBB6,
+ 30922 - 19968: 0xD6F0,
+ 30923 - 19968: 0xF3AF,
+ 30926 - 19968: 0xCDA5,
+ 30928 - 19968: 0xDAF1,
+ 30952 - 19968: 0xD8A8,
+ 30956 - 19968: 0xCCE4,
+ 30959 - 19968: 0xD1B4,
+ 30965 - 19968: 0xCAD8,
+ 30971 - 19968: 0xDAF2,
+ 30977 - 19968: 0xF5A7,
+ 30990 - 19968: 0xF5A8,
+ 30998 - 19968: 0xE6A6,
+ 31018 - 19968: 0xD5EC,
+ 31019 - 19968: 0xD5F8,
+ 31020 - 19968: 0xDAF3,
+ 31034 - 19968: 0xE3C6,
+ 31038 - 19968: 0xDEE4,
+ 31040 - 19968: 0xDEE5,
+ 31041 - 19968: 0xD1B5,
+ 31047 - 19968: 0xD1B6,
+ 31048 - 19968: 0xD1B7,
+ 31049 - 19968: 0xF2B3,
+ 31056 - 19968: 0xE9DE,
+ 31062 - 19968: 0xF0D3,
+ 31063 - 19968: 0xF2B4,
+ 31066 - 19968: 0xF0D4,
+ 31067 - 19968: 0xCBE4,
+ 31068 - 19968: 0xFBD4,
+ 31069 - 19968: 0xF5E6,
+ 31070 - 19968: 0xE3EA,
+ 31072 - 19968: 0xDEE6,
+ 31077 - 19968: 0xDFD4,
+ 31080 - 19968: 0xF8F9,
+ 31085 - 19968: 0xF0AE,
+ 31098 - 19968: 0xD1B8,
+ 31103 - 19968: 0xD6DF,
+ 31105 - 19968: 0xD0D7,
+ 31117 - 19968: 0xFCA1,
+ 31118 - 19968: 0xEFEE,
+ 31119 - 19968: 0xDCD8,
+ 31121 - 19968: 0xE9DF,
+ 31142 - 19968: 0xE5DD,
+ 31143 - 19968: 0xFDFB,
+ 31146 - 19968: 0xE0C9,
+ 31150 - 19968: 0xD6C9,
+ 31153 - 19968: 0xD4AA,
+ 31155 - 19968: 0xE5CC,
+ 31161 - 19968: 0xE9E0,
+ 31165 - 19968: 0xD0D8,
+ 31166 - 19968: 0xFCA2,
+ 31167 - 19968: 0xD4BE,
+ 31168 - 19968: 0xE2B3,
+ 31169 - 19968: 0xDEE7,
+ 31177 - 19968: 0xDCBC,
+ 31178 - 19968: 0xD2B6,
+ 31179 - 19968: 0xF5D5,
+ 31185 - 19968: 0xCEA1,
+ 31186 - 19968: 0xF5A9,
+ 31189 - 19968: 0xDDF9,
+ 31192 - 19968: 0xDDFA,
+ 31199 - 19968: 0xF0D5,
+ 31204 - 19968: 0xF6DF,
+ 31206 - 19968: 0xF2DA,
+ 31207 - 19968: 0xE4EB,
+ 31209 - 19968: 0xF2F1,
+ 31227 - 19968: 0xECB9,
+ 31232 - 19968: 0xFDFC,
+ 31237 - 19968: 0xE1AA,
+ 31240 - 19968: 0xCAD9,
+ 31243 - 19968: 0xEFEF,
+ 31245 - 19968: 0xF5AA,
+ 31252 - 19968: 0xECF9,
+ 31255 - 19968: 0xF8AD,
+ 31257 - 19968: 0xF2C2,
+ 31258 - 19968: 0xF6C3,
+ 31260 - 19968: 0xD7D2,
+ 31263 - 19968: 0xF9A2,
+ 31264 - 19968: 0xF0D6,
+ 31278 - 19968: 0xF0FA,
+ 31281 - 19968: 0xF6E0,
+ 31286 - 19968: 0xE9F3,
+ 31287 - 19968: 0xF2C3,
+ 31291 - 19968: 0xD4AB,
+ 31292 - 19968: 0xCAB3,
+ 31293 - 19968: 0xCDA6,
+ 31295 - 19968: 0xCDC3,
+ 31296 - 19968: 0xCDDA,
+ 31302 - 19968: 0xD9CF,
+ 31305 - 19968: 0xF6C4,
+ 31309 - 19968: 0xEEDD,
+ 31310 - 19968: 0xE7C4,
+ 31319 - 19968: 0xE2B4,
+ 31329 - 19968: 0xDFE2,
+ 31330 - 19968: 0xE7DB,
+ 31337 - 19968: 0xE8B1,
+ 31339 - 19968: 0xFCAE,
+ 31344 - 19968: 0xE5CD,
+ 31348 - 19968: 0xFAEB,
+ 31350 - 19968: 0xCFBC,
+ 31353 - 19968: 0xCFE2,
+ 31354 - 19968: 0xCDF6,
+ 31357 - 19968: 0xEFF0,
+ 31359 - 19968: 0xF4BE,
+ 31361 - 19968: 0xD4CD,
+ 31364 - 19968: 0xF3B8,
+ 31368 - 19968: 0xE9A1,
+ 31378 - 19968: 0xF2F2,
+ 31379 - 19968: 0xF3EB,
+ 31381 - 19968: 0xF0D7,
+ 31384 - 19968: 0xCFD7,
+ 31391 - 19968: 0xCFDF,
+ 31401 - 19968: 0xE8C0,
+ 31402 - 19968: 0xE8C1,
+ 31406 - 19968: 0xCFE3,
+ 31407 - 19968: 0xE9A2,
+ 31418 - 19968: 0xD0AA,
+ 31428 - 19968: 0xF3C1,
+ 31429 - 19968: 0xD0AB,
+ 31431 - 19968: 0xD4E4,
+ 31434 - 19968: 0xEFBC,
+ 31435 - 19968: 0xD8A1,
+ 31447 - 19968: 0xD9DF,
+ 31449 - 19968: 0xF3D7,
+ 31453 - 19968: 0xDCBD,
+ 31455 - 19968: 0xCCE5,
+ 31456 - 19968: 0xEDF1,
+ 31459 - 19968: 0xF1E2,
+ 31461 - 19968: 0xD4DB,
+ 31466 - 19968: 0xE2B5,
+ 31469 - 19968: 0xCAE6,
+ 31471 - 19968: 0xD3AE,
+ 31478 - 19968: 0xCCE6,
+ 31481 - 19968: 0xF1D3,
+ 31482 - 19968: 0xF5E7,
+ 31487 - 19968: 0xCADA,
+ 31503 - 19968: 0xFBEE,
+ 31505 - 19968: 0xE1C5,
+ 31513 - 19968: 0xDFE9,
+ 31515 - 19968: 0xEEDE,
+ 31518 - 19968: 0xF7C2,
+ 31520 - 19968: 0xD8A2,
+ 31526 - 19968: 0xDDAC,
+ 31532 - 19968: 0xF0AF,
+ 31533 - 19968: 0xD6BD,
+ 31545 - 19968: 0xE1AB,
+ 31558 - 19968: 0xF9B6,
+ 31561 - 19968: 0xD4F5,
+ 31563 - 19968: 0xD0C9,
+ 31564 - 19968: 0xEFA7,
+ 31565 - 19968: 0xE2EC,
+ 31567 - 19968: 0xDBEA,
+ 31568 - 19968: 0xCECC,
+ 31569 - 19968: 0xF5E8,
+ 31570 - 19968: 0xF7D5,
+ 31572 - 19968: 0xD3CD,
+ 31574 - 19968: 0xF3FE,
+ 31584 - 19968: 0xD0B5,
+ 31596 - 19968: 0xE0FE,
+ 31598 - 19968: 0xDFFB,
+ 31605 - 19968: 0xE6DD,
+ 31613 - 19968: 0xE8A4,
+ 31623 - 19968: 0xCBCD,
+ 31627 - 19968: 0xEFA8,
+ 31631 - 19968: 0xEEB4,
+ 31636 - 19968: 0xDAD8,
+ 31637 - 19968: 0xD1B9,
+ 31639 - 19968: 0xDFA9,
+ 31642 - 19968: 0xF3B0,
+ 31645 - 19968: 0xCCC4,
+ 31649 - 19968: 0xCEB7,
+ 31661 - 19968: 0xEFA9,
+ 31665 - 19968: 0xDFD5,
+ 31668 - 19968: 0xEDD7,
+ 31672 - 19968: 0xEEC6,
+ 31680 - 19968: 0xEFBD,
+ 31681 - 19968: 0xFCD6,
+ 31684 - 19968: 0xDBF4,
+ 31686 - 19968: 0xEFAA,
+ 31687 - 19968: 0xF8B9,
+ 31689 - 19968: 0xF5E9,
+ 31698 - 19968: 0xE3D9,
+ 31712 - 19968: 0xE1C6,
+ 31716 - 19968: 0xD4BF,
+ 31721 - 19968: 0xDEE8,
+ 31751 - 19968: 0xF0EA,
+ 31762 - 19968: 0xF3C2,
+ 31774 - 19968: 0xD3AF,
+ 31777 - 19968: 0xCADB,
+ 31783 - 19968: 0xFCD7,
+ 31786 - 19968: 0xEDD8,
+ 31787 - 19968: 0xE1C7,
+ 31805 - 19968: 0xF4D8,
+ 31806 - 19968: 0xD6B3,
+ 31807 - 19968: 0xDDAD,
+ 31811 - 19968: 0xD5BE,
+ 31820 - 19968: 0xF1C3,
+ 31821 - 19968: 0xEEDF,
+ 31840 - 19968: 0xD6EB,
+ 31844 - 19968: 0xF4D9,
+ 31852 - 19968: 0xD7E6,
+ 31859 - 19968: 0xDAB7,
+ 31875 - 19968: 0xDDFB,
+ 31881 - 19968: 0xDDCF,
+ 31890 - 19968: 0xD8A3,
+ 31893 - 19968: 0xDAD9,
+ 31895 - 19968: 0xF0D8,
+ 31896 - 19968: 0xEFC4,
+ 31903 - 19968: 0xE1D8,
+ 31909 - 19968: 0xF1D4,
+ 31911 - 19968: 0xEDF2,
+ 31918 - 19968: 0xD5DB,
+ 31921 - 19968: 0xD5DC,
+ 31922 - 19968: 0xF3C4,
+ 31923 - 19968: 0xCBD7,
+ 31929 - 19968: 0xE2B6,
+ 31934 - 19968: 0xEFF1,
+ 31946 - 19968: 0xFBD5,
+ 31958 - 19968: 0xD3D8,
+ 31966 - 19968: 0xDDD0,
+ 31967 - 19968: 0xF0D9,
+ 31968 - 19968: 0xCBB3,
+ 31975 - 19968: 0xD5DD,
+ 31995 - 19968: 0xCDA7,
+ 31998 - 19968: 0xD0AC,
+ 32000 - 19968: 0xD1BA,
+ 32002 - 19968: 0xF1C4,
+ 32004 - 19968: 0xE5B3,
+ 32005 - 19968: 0xFBF5,
+ 32006 - 19968: 0xE9E1,
+ 32007 - 19968: 0xFDE0,
+ 32008 - 19968: 0xFCBC,
+ 32010 - 19968: 0xDAA2,
+ 32011 - 19968: 0xDAA3,
+ 32013 - 19968: 0xD2A1,
+ 32016 - 19968: 0xD2EF,
+ 32020 - 19968: 0xE2ED,
+ 32023 - 19968: 0xDEE9,
+ 32024 - 19968: 0xCEDC,
+ 32025 - 19968: 0xF2B5,
+ 32026 - 19968: 0xD0E4,
+ 32027 - 19968: 0xDDD1,
+ 32032 - 19968: 0xE1C8,
+ 32033 - 19968: 0xDBB7,
+ 32034 - 19968: 0xDFE3,
+ 32043 - 19968: 0xEDB9,
+ 32044 - 19968: 0xF1C5,
+ 32046 - 19968: 0xF3CF,
+ 32047 - 19968: 0xD7AB,
+ 32048 - 19968: 0xE1AC,
+ 32051 - 19968: 0xE3EB,
+ 32053 - 19968: 0xEEC7,
+ 32057 - 19968: 0xE1C9,
+ 32058 - 19968: 0xCAFA,
+ 32066 - 19968: 0xF0FB,
+ 32067 - 19968: 0xFAE1,
+ 32068 - 19968: 0xF0DA,
+ 32069 - 19968: 0xCCE7,
+ 32070 - 19968: 0xDAF4,
+ 32080 - 19968: 0xCCBF,
+ 32094 - 19968: 0xCEED,
+ 32097 - 19968: 0xD5A9,
+ 32098 - 19968: 0xFAE2,
+ 32102 - 19968: 0xD0E5,
+ 32104 - 19968: 0xEBD6,
+ 32106 - 19968: 0xECDF,
+ 32110 - 19968: 0xDFFC,
+ 32113 - 19968: 0xF7D6,
+ 32114 - 19968: 0xDEEA,
+ 32115 - 19968: 0xCBB4,
+ 32118 - 19968: 0xEFBE,
+ 32121 - 19968: 0xCCB5,
+ 32127 - 19968: 0xCFBD,
+ 32142 - 19968: 0xEFF2,
+ 32143 - 19968: 0xE2B7,
+ 32147 - 19968: 0xCCE8,
+ 32156 - 19968: 0xF0FC,
+ 32160 - 19968: 0xD6E0,
+ 32162 - 19968: 0xF1C6,
+ 32172 - 19968: 0xE2B8,
+ 32173 - 19968: 0xEBAB,
+ 32177 - 19968: 0xCBB5,
+ 32178 - 19968: 0xD8D1,
+ 32180 - 19968: 0xF4CE,
+ 32181 - 19968: 0xF3F7,
+ 32184 - 19968: 0xD7C6,
+ 32186 - 19968: 0xD1BB,
+ 32187 - 19968: 0xF7AA,
+ 32189 - 19968: 0xEDCA,
+ 32190 - 19968: 0xD7D3,
+ 32191 - 19968: 0xD8FA,
+ 32199 - 19968: 0xF6C5,
+ 32202 - 19968: 0xD1CC,
+ 32203 - 19968: 0xDDFC,
+ 32214 - 19968: 0xDFFD,
+ 32216 - 19968: 0xF9E5,
+ 32218 - 19968: 0xE0CA,
+ 32221 - 19968: 0xF2FD,
+ 32222 - 19968: 0xD3B0,
+ 32224 - 19968: 0xF4F3,
+ 32225 - 19968: 0xDAC9,
+ 32227 - 19968: 0xE6DE,
+ 32232 - 19968: 0xF8BA,
+ 32233 - 19968: 0xE8D0,
+ 32236 - 19968: 0xD8FB,
+ 32239 - 19968: 0xEAD5,
+ 32244 - 19968: 0xD6A3,
+ 32251 - 19968: 0xF6C6,
+ 32265 - 19968: 0xF2DB,
+ 32266 - 19968: 0xE4FC,
+ 32277 - 19968: 0xE8B2,
+ 32283 - 19968: 0xDADA,
+ 32285 - 19968: 0xF2DC,
+ 32286 - 19968: 0xFBD6,
+ 32287 - 19968: 0xE9B2,
+ 32289 - 19968: 0xEEAD,
+ 32291 - 19968: 0xFAE3,
+ 32299 - 19968: 0xDCEE,
+ 32302 - 19968: 0xF5EA,
+ 32303 - 19968: 0xE6E0,
+ 32305 - 19968: 0xF0FD,
+ 32311 - 19968: 0xD7AC,
+ 32317 - 19968: 0xF5C5,
+ 32318 - 19968: 0xEEE0,
+ 32321 - 19968: 0xDBE5,
+ 32323 - 19968: 0xDDDE,
+ 32326 - 19968: 0xD9F0,
+ 32327 - 19968: 0xE9A3,
+ 32338 - 19968: 0xF1F9,
+ 32340 - 19968: 0xF2C4,
+ 32341 - 19968: 0xE0CB,
+ 32350 - 19968: 0xE9A4,
+ 32353 - 19968: 0xE2B9,
+ 32361 - 19968: 0xE3B1,
+ 32362 - 19968: 0xFCEB,
+ 32363 - 19968: 0xCDA8,
+ 32365 - 19968: 0xCCB6,
+ 32368 - 19968: 0xF0DB,
+ 32377 - 19968: 0xE6BA,
+ 32380 - 19968: 0xCDA9,
+ 32386 - 19968: 0xF3C3,
+ 32396 - 19968: 0xE1D9,
+ 32399 - 19968: 0xEFAB,
+ 32403 - 19968: 0xE7C5,
+ 32406 - 19968: 0xE0E9,
+ 32408 - 19968: 0xF3C5,
+ 32411 - 19968: 0xD4C0,
+ 32412 - 19968: 0xD5BF,
+ 32566 - 19968: 0xDDAE,
+ 32568 - 19968: 0xF9FC,
+ 32570 - 19968: 0xCCC0,
+ 32588 - 19968: 0xE5A2,
+ 32592 - 19968: 0xCEB8,
+ 32596 - 19968: 0xD8D2,
+ 32597 - 19968: 0xF9D6,
+ 32618 - 19968: 0xF1AA,
+ 32619 - 19968: 0xCED1,
+ 32622 - 19968: 0xF6C7,
+ 32624 - 19968: 0xDBEB,
+ 32626 - 19968: 0xDFFE,
+ 32629 - 19968: 0xD8E1,
+ 32631 - 19968: 0xF7F3,
+ 32633 - 19968: 0xD7E7,
+ 32645 - 19968: 0xD4FE,
+ 32648 - 19968: 0xD1BC,
+ 32650 - 19968: 0xE5CF,
+ 32652 - 19968: 0xCBB6,
+ 32654 - 19968: 0xDAB8,
+ 32660 - 19968: 0xCDC4,
+ 32666 - 19968: 0xD6BE,
+ 32670 - 19968: 0xE2BA,
+ 32676 - 19968: 0xCFD8,
+ 32680 - 19968: 0xE0CC,
+ 32681 - 19968: 0xEBF9,
+ 32690 - 19968: 0xFDFD,
+ 32696 - 19968: 0xD7E8,
+ 32697 - 19968: 0xCBD8,
+ 32701 - 19968: 0xE9E2,
+ 32705 - 19968: 0xE8BA,
+ 32709 - 19968: 0xE3C7,
+ 32714 - 19968: 0xECCD,
+ 32716 - 19968: 0xECCE,
+ 32718 - 19968: 0xD6BF,
+ 32722 - 19968: 0xE3A7,
+ 32724 - 19968: 0xDFD6,
+ 32725 - 19968: 0xFDE8,
+ 32735 - 19968: 0xEEE1,
+ 32736 - 19968: 0xF6A8,
+ 32737 - 19968: 0xDDFD,
+ 32745 - 19968: 0xF8BB,
+ 32747 - 19968: 0xE8D1,
+ 32752 - 19968: 0xF9D7,
+ 32761 - 19968: 0xCEEE,
+ 32764 - 19968: 0xECCF,
+ 32768 - 19968: 0xE9A5,
+ 32769 - 19968: 0xD6D5,
+ 32771 - 19968: 0xCDC5,
+ 32773 - 19968: 0xEDBA,
+ 32774 - 19968: 0xD1BD,
+ 32777 - 19968: 0xCFBE,
+ 32780 - 19968: 0xECBB,
+ 32784 - 19968: 0xD2B1,
+ 32789 - 19968: 0xCCE9,
+ 32791 - 19968: 0xD9C4,
+ 32792 - 19968: 0xE9FC,
+ 32813 - 19968: 0xD1BE,
+ 32819 - 19968: 0xECBC,
+ 32822 - 19968: 0xE5AD,
+ 32829 - 19968: 0xF7B0,
+ 32831 - 19968: 0xCCEA,
+ 32835 - 19968: 0xD3C4,
+ 32838 - 19968: 0xD6C0,
+ 32842 - 19968: 0xD6FD,
+ 32854 - 19968: 0xE1A1,
+ 32856 - 19968: 0xDEBD,
+ 32858 - 19968: 0xF6A9,
+ 32862 - 19968: 0xDAA4,
+ 32879 - 19968: 0xD6A4,
+ 32880 - 19968: 0xF5C6,
+ 32882 - 19968: 0xE1A2,
+ 32883 - 19968: 0xE9C6,
+ 32887 - 19968: 0xF2C5,
+ 32893 - 19968: 0xF4E9,
+ 32894 - 19968: 0xD6EC,
+ 32895 - 19968: 0xEBD3,
+ 32900 - 19968: 0xECBD,
+ 32901 - 19968: 0xE2DC,
+ 32902 - 19968: 0xDEEB,
+ 32903 - 19968: 0xF0DC,
+ 32905 - 19968: 0xEBBF,
+ 32907 - 19968: 0xD7CE,
+ 32908 - 19968: 0xD1BF,
+ 32918 - 19968: 0xF5AB,
+ 32923 - 19968: 0xF9FD,
+ 32925 - 19968: 0xCADC,
+ 32929 - 19968: 0xCDC6,
+ 32930 - 19968: 0xF2B6,
+ 32933 - 19968: 0xDDFE,
+ 32937 - 19968: 0xCCB7,
+ 32938 - 19968: 0xDBB8,
+ 32943 - 19968: 0xD0E9,
+ 32945 - 19968: 0xCEDD,
+ 32946 - 19968: 0xEBC0,
+ 32948 - 19968: 0xFDA2,
+ 32954 - 19968: 0xF8CB,
+ 32963 - 19968: 0xEAD6,
+ 32964 - 19968: 0xF1B0,
+ 32972 - 19968: 0xDBCE,
+ 32974 - 19968: 0xF7C3,
+ 32986 - 19968: 0xDBCF,
+ 32987 - 19968: 0xCBA4,
+ 32990 - 19968: 0xF8E0,
+ 32993 - 19968: 0xFBD7,
+ 32996 - 19968: 0xEBCA,
+ 32997 - 19968: 0xE0A1,
+ 33009 - 19968: 0xCECD,
+ 33012 - 19968: 0xD4DC,
+ 33016 - 19968: 0xFDD8,
+ 33021 - 19968: 0xD2F6,
+ 33026 - 19968: 0xF2B7,
+ 33029 - 19968: 0xFAF6,
+ 33030 - 19968: 0xF6AA,
+ 33031 - 19968: 0xFAF7,
+ 33032 - 19968: 0xD8E6,
+ 33034 - 19968: 0xF4B1,
+ 33048 - 19968: 0xE8D2,
+ 33050 - 19968: 0xCAC5,
+ 33051 - 19968: 0xCCEB,
+ 33059 - 19968: 0xE2EE,
+ 33065 - 19968: 0xE2BB,
+ 33067 - 19968: 0xF7AD,
+ 33071 - 19968: 0xF8E1,
+ 33081 - 19968: 0xF3EC,
+ 33086 - 19968: 0xDEA1,
+ 33099 - 19968: 0xE4FD,
+ 33102 - 19968: 0xE3EC,
+ 33104 - 19968: 0xDDAF,
+ 33105 - 19968: 0xDDB0,
+ 33108 - 19968: 0xCBB7,
+ 33109 - 19968: 0xE8D3,
+ 33125 - 19968: 0xE1A3,
+ 33126 - 19968: 0xD2E0,
+ 33131 - 19968: 0xF0FE,
+ 33136 - 19968: 0xE9A6,
+ 33137 - 19968: 0xCBF2,
+ 33144 - 19968: 0xEDF3,
+ 33145 - 19968: 0xDCD9,
+ 33146 - 19968: 0xE0CD,
+ 33151 - 19968: 0xF7DA,
+ 33152 - 19968: 0xDBB9,
+ 33160 - 19968: 0xCCAE,
+ 33162 - 19968: 0xDADB,
+ 33167 - 19968: 0xCDC7,
+ 33178 - 19968: 0xDDB1,
+ 33180 - 19968: 0xD8AF,
+ 33181 - 19968: 0xE3A3,
+ 33184 - 19968: 0xCEEF,
+ 33187 - 19968: 0xF2F3,
+ 33192 - 19968: 0xF8B3,
+ 33203 - 19968: 0xE0CE,
+ 33205 - 19968: 0xF5FD,
+ 33210 - 19968: 0xEBEC,
+ 33213 - 19968: 0xD3C5,
+ 33214 - 19968: 0xFCEC,
+ 33215 - 19968: 0xD2DB,
+ 33216 - 19968: 0xD4EB,
+ 33218 - 19968: 0xDEA2,
+ 33222 - 19968: 0xE5E6,
+ 33229 - 19968: 0xF0B0,
+ 33240 - 19968: 0xD5C4,
+ 33247 - 19968: 0xEDF4,
+ 33251 - 19968: 0xE3ED,
+ 33253 - 19968: 0xE8C2,
+ 33255 - 19968: 0xEDF5,
+ 33256 - 19968: 0xD7FC,
+ 33258 - 19968: 0xEDBB,
+ 33261 - 19968: 0xF6AB,
+ 33267 - 19968: 0xF2B8,
+ 33268 - 19968: 0xF6C8,
+ 33274 - 19968: 0xD3E6,
+ 33275 - 19968: 0xF2DD,
+ 33276 - 19968: 0xCFBF,
+ 33278 - 19968: 0xEBAC,
+ 33285 - 19968: 0xCFC0,
+ 33287 - 19968: 0xE6A8,
+ 33288 - 19968: 0xFDE9,
+ 33290 - 19968: 0xCFC1,
+ 33292 - 19968: 0xE0DF,
+ 33293 - 19968: 0xDEEC,
+ 33298 - 19968: 0xE0A2,
+ 33307 - 19968: 0xF4BF,
+ 33308 - 19968: 0xE2EF,
+ 33310 - 19968: 0xD9F1,
+ 33311 - 19968: 0xF1C7,
+ 33313 - 19968: 0xCBB8,
+ 33322 - 19968: 0xF9FE,
+ 33323 - 19968: 0xDBBA,
+ 33324 - 19968: 0xDAF5,
+ 33333 - 19968: 0xF6EC,
+ 33334 - 19968: 0xDADC,
+ 33335 - 19968: 0xFAE4,
+ 33337 - 19968: 0xE0CF,
+ 33344 - 19968: 0xDDB2,
+ 33349 - 19968: 0xE6A9,
+ 33351 - 19968: 0xEFF3,
+ 33369 - 19968: 0xF3ED,
+ 33380 - 19968: 0xEBFA,
+ 33382 - 19968: 0xF9E6,
+ 33390 - 19968: 0xCADD,
+ 33391 - 19968: 0xD5DE,
+ 33393 - 19968: 0xCADE,
+ 33394 - 19968: 0xDFE4,
+ 33398 - 19968: 0xE6FD,
+ 33400 - 19968: 0xF5AC,
+ 33406 - 19968: 0xE4F5,
+ 33419 - 19968: 0xE9E3,
+ 33421 - 19968: 0xEDCB,
+ 33422 - 19968: 0xCFE4,
+ 33426 - 19968: 0xD8D3,
+ 33433 - 19968: 0xDDB3,
+ 33434 - 19968: 0xD4EC,
+ 33437 - 19968: 0xF2B9,
+ 33439 - 19968: 0xDFB7,
+ 33445 - 19968: 0xCBCE,
+ 33446 - 19968: 0xFBD8,
+ 33449 - 19968: 0xD0D9,
+ 33452 - 19968: 0xDDD2,
+ 33453 - 19968: 0xF7F4,
+ 33454 - 19968: 0xE7DC,
+ 33455 - 19968: 0xE4A5,
+ 33457 - 19968: 0xFCA3,
+ 33459 - 19968: 0xDBBB,
+ 33463 - 19968: 0xF2BA,
+ 33464 - 19968: 0xE9FD,
+ 33465 - 19968: 0xD0CA,
+ 33467 - 19968: 0xF5D6,
+ 33468 - 19968: 0xD9C5,
+ 33469 - 19968: 0xE4B4,
+ 33471 - 19968: 0xEDA7,
+ 33489 - 19968: 0xEABD,
+ 33490 - 19968: 0xE6FE,
+ 33492 - 19968: 0xF7C4,
+ 33493 - 19968: 0xF5AD,
+ 33495 - 19968: 0xD9E0,
+ 33499 - 19968: 0xCAB4,
+ 33502 - 19968: 0xF8E2,
+ 33503 - 19968: 0xCFC2,
+ 33505 - 19968: 0xECBE,
+ 33509 - 19968: 0xE5B4,
+ 33510 - 19968: 0xCDC8,
+ 33511 - 19968: 0xEEC8,
+ 33521 - 19968: 0xE7C8,
+ 33533 - 19968: 0xCDC9,
+ 33534 - 19968: 0xF9B7,
+ 33537 - 19968: 0xF1E8,
+ 33538 - 19968: 0xD9F2,
+ 33539 - 19968: 0xDBF5,
+ 33540 - 19968: 0xCAB5,
+ 33541 - 19968: 0xD9C6,
+ 33545 - 19968: 0xD8C9,
+ 33559 - 19968: 0xD9AB,
+ 33576 - 19968: 0xEDBC,
+ 33579 - 19968: 0xD8D4,
+ 33583 - 19968: 0xDCDA,
+ 33585 - 19968: 0xE2BC,
+ 33588 - 19968: 0xFCED,
+ 33589 - 19968: 0xECE0,
+ 33590 - 19968: 0xD2FE,
+ 33592 - 19968: 0xE9C7,
+ 33593 - 19968: 0xE6AA,
+ 33600 - 19968: 0xE2F0,
+ 33607 - 19968: 0xFABB,
+ 33609 - 19968: 0xF5AE,
+ 33610 - 19968: 0xFBAA,
+ 33615 - 19968: 0xECFB,
+ 33617 - 19968: 0xECBF,
+ 33618 - 19968: 0xFCD8,
+ 33651 - 19968: 0xD4E5,
+ 33655 - 19968: 0xF9C3,
+ 33659 - 19968: 0xEEE2,
+ 33673 - 19968: 0xD7E9,
+ 33674 - 19968: 0xEDF6,
+ 33678 - 19968: 0xDEED,
+ 33686 - 19968: 0xCCEC,
+ 33688 - 19968: 0xE3EE,
+ 33694 - 19968: 0xE8D4,
+ 33698 - 19968: 0xFAF8,
+ 33705 - 19968: 0xDDB4,
+ 33706 - 19968: 0xE4B5,
+ 33707 - 19968: 0xD8B0,
+ 33725 - 19968: 0xD8D5,
+ 33729 - 19968: 0xF4EA,
+ 33733 - 19968: 0xCEB9,
+ 33737 - 19968: 0xD6E1,
+ 33738 - 19968: 0xCFD2,
+ 33740 - 19968: 0xD0B6,
+ 33747 - 19968: 0xCEA2,
+ 33750 - 19968: 0xF3EE,
+ 33756 - 19968: 0xF3F8,
+ 33769 - 19968: 0xDCCC,
+ 33771 - 19968: 0xD0CB,
+ 33775 - 19968: 0xFCA4,
+ 33776 - 19968: 0xCDCA,
+ 33777 - 19968: 0xD7D4,
+ 33778 - 19968: 0xDEA3,
+ 33780 - 19968: 0xE4E0,
+ 33785 - 19968: 0xEEC9,
+ 33789 - 19968: 0xE2DD,
+ 33795 - 19968: 0xF5FE,
+ 33796 - 19968: 0xD4AC,
+ 33802 - 19968: 0xD5D1,
+ 33804 - 19968: 0xD8F0,
+ 33805 - 19968: 0xF8C3,
+ 33806 - 19968: 0xEAD7,
+ 33833 - 19968: 0xF5D7,
+ 33836 - 19968: 0xD8BF,
+ 33841 - 19968: 0xFDC0,
+ 33848 - 19968: 0xEBAD,
+ 33853 - 19968: 0xD5AA,
+ 33865 - 19968: 0xE7A8,
+ 33879 - 19968: 0xEECA,
+ 33883 - 19968: 0xCAE7,
+ 33889 - 19968: 0xF8E3,
+ 33891 - 19968: 0xD4DD,
+ 33894 - 19968: 0xEAD8,
+ 33899 - 19968: 0xFBD9,
+ 33900 - 19968: 0xEDF7,
+ 33903 - 19968: 0xE5B5,
+ 33909 - 19968: 0xD0AD,
+ 33914 - 19968: 0xF1F1,
+ 33936 - 19968: 0xE2BD,
+ 33940 - 19968: 0xE3C8,
+ 33945 - 19968: 0xD9D5,
+ 33948 - 19968: 0xDFAA,
+ 33953 - 19968: 0xDBBC,
+ 33970 - 19968: 0xF8E4,
+ 33976 - 19968: 0xF1FA,
+ 33979 - 19968: 0xE5B6,
+ 33980 - 19968: 0xF3EF,
+ 33983 - 19968: 0xFBDA,
+ 33984 - 19968: 0xE1E0,
+ 33986 - 19968: 0xD9AC,
+ 33988 - 19968: 0xF5EB,
+ 33990 - 19968: 0xE0B6,
+ 33993 - 19968: 0xE9C8,
+ 33995 - 19968: 0xCBCF,
+ 33997 - 19968: 0xE3C9,
+ 34001 - 19968: 0xDEEE,
+ 34010 - 19968: 0xE2BE,
+ 34028 - 19968: 0xDCEF,
+ 34030 - 19968: 0xD6A5,
+ 34036 - 19968: 0xE2F1,
+ 34044 - 19968: 0xD6FE,
+ 34065 - 19968: 0xD9A1,
+ 34067 - 19968: 0xD8C0,
+ 34068 - 19968: 0xDCDB,
+ 34071 - 19968: 0xEDBD,
+ 34072 - 19968: 0xDFB8,
+ 34074 - 19968: 0xEAA5,
+ 34078 - 19968: 0xD7AD,
+ 34081 - 19968: 0xF3F9,
+ 34083 - 19968: 0xEDF8,
+ 34085 - 19968: 0xF5C7,
+ 34092 - 19968: 0xE1CA,
+ 34093 - 19968: 0xEBE3,
+ 34095 - 19968: 0xF2DE,
+ 34109 - 19968: 0xF8CC,
+ 34111 - 19968: 0xEAD9,
+ 34113 - 19968: 0xD3C6,
+ 34115 - 19968: 0xDBE6,
+ 34121 - 19968: 0xF5AF,
+ 34126 - 19968: 0xCEF0,
+ 34131 - 19968: 0xE9FE,
+ 34137 - 19968: 0xFBB6,
+ 34147 - 19968: 0xE2F2,
+ 34152 - 19968: 0xCFF2,
+ 34153 - 19968: 0xF7B9,
+ 34154 - 19968: 0xD9F3,
+ 34157 - 19968: 0xE1CB,
+ 34180 - 19968: 0xDADD,
+ 34183 - 19968: 0xDAB9,
+ 34191 - 19968: 0xEBFB,
+ 34193 - 19968: 0xCBB9,
+ 34196 - 19968: 0xEDF9,
+ 34203 - 19968: 0xE0E0,
+ 34214 - 19968: 0xF4C0,
+ 34216 - 19968: 0xFDBC,
+ 34217 - 19968: 0xDFB1,
+ 34218 - 19968: 0xE3EF,
+ 34223 - 19968: 0xE0A3,
+ 34224 - 19968: 0xFDB9,
+ 34234 - 19968: 0xF0B1,
+ 34241 - 19968: 0xCDCB,
+ 34249 - 19968: 0xEDBE,
+ 34253 - 19968: 0xD5C0,
+ 34254 - 19968: 0xE3F0,
+ 34255 - 19968: 0xEDFA,
+ 34261 - 19968: 0xE9E4,
+ 34268 - 19968: 0xD5ED,
+ 34269 - 19968: 0xE7DD,
+ 34276 - 19968: 0xD4F6,
+ 34277 - 19968: 0xE5B7,
+ 34281 - 19968: 0xDBE7,
+ 34282 - 19968: 0xE2BF,
+ 34295 - 19968: 0xEECB,
+ 34298 - 19968: 0xD7F4,
+ 34299 - 19968: 0xF0DD,
+ 34303 - 19968: 0xCEAB,
+ 34306 - 19968: 0xE7DE,
+ 34310 - 19968: 0xD6D6,
+ 34311 - 19968: 0xE1CC,
+ 34314 - 19968: 0xE8B3,
+ 34326 - 19968: 0xE5EE,
+ 34327 - 19968: 0xDCA2,
+ 34330 - 19968: 0xE0D0,
+ 34349 - 19968: 0xD5B5,
+ 34367 - 19968: 0xD5A1,
+ 34382 - 19968: 0xFBDB,
+ 34384 - 19968: 0xF9CB,
+ 34388 - 19968: 0xCBF3,
+ 34389 - 19968: 0xF4A5,
+ 34395 - 19968: 0xFAC8,
+ 34396 - 19968: 0xD6D7,
+ 34398 - 19968: 0xE9E5,
+ 34399 - 19968: 0xFBDC,
+ 34407 - 19968: 0xFDD0,
+ 34425 - 19968: 0xFBF6,
+ 34442 - 19968: 0xDAA5,
+ 34444 - 19968: 0xDBBD,
+ 34451 - 19968: 0xECE2,
+ 34467 - 19968: 0xCDF7,
+ 34468 - 19968: 0xF0DE,
+ 34473 - 19968: 0xF6C9,
+ 34503 - 19968: 0xDEEF,
+ 34507 - 19968: 0xD3B1,
+ 34516 - 19968: 0xFCEE,
+ 34521 - 19968: 0xE8C3,
+ 34523 - 19968: 0xF1C8,
+ 34527 - 19968: 0xCEF1,
+ 34532 - 19968: 0xF9ED,
+ 34541 - 19968: 0xF2F4,
+ 34558 - 19968: 0xE4B6,
+ 34560 - 19968: 0xF5B9,
+ 34562 - 19968: 0xDCF0,
+ 34563 - 19968: 0xE3F1,
+ 34568 - 19968: 0xE8A5,
+ 34584 - 19968: 0xF2BB,
+ 34586 - 19968: 0xDEA4,
+ 34588 - 19968: 0xDACC,
+ 34638 - 19968: 0xCAE9,
+ 34645 - 19968: 0xE3DA,
+ 34647 - 19968: 0xFCD9,
+ 34655 - 19968: 0xEADA,
+ 34662 - 19968: 0xF9C4,
+ 34664 - 19968: 0xE3A4,
+ 34676 - 19968: 0xFBDD,
+ 34678 - 19968: 0xEFCA,
+ 34680 - 19968: 0xE8C4,
+ 34690 - 19968: 0xD5CC,
+ 34701 - 19968: 0xEBD7,
+ 34719 - 19968: 0xD9AD,
+ 34722 - 19968: 0xFBAB,
+ 34739 - 19968: 0xD3D9,
+ 34746 - 19968: 0xD5A2,
+ 34756 - 19968: 0xF6DE,
+ 34784 - 19968: 0xDAF6,
+ 34796 - 19968: 0xE0D1,
+ 34799 - 19968: 0xE9A8,
+ 34802 - 19968: 0xF5F9,
+ 34809 - 19968: 0xFAAF,
+ 34811 - 19968: 0xEBFC,
+ 34814 - 19968: 0xE0EA,
+ 34821 - 19968: 0xE3B2,
+ 34847 - 19968: 0xD5C5,
+ 34850 - 19968: 0xF1E3,
+ 34851 - 19968: 0xD5EE,
+ 34865 - 19968: 0xCDCC,
+ 34870 - 19968: 0xEDD9,
+ 34875 - 19968: 0xD8C1,
+ 34880 - 19968: 0xFAEC,
+ 34886 - 19968: 0xF1EB,
+ 34892 - 19968: 0xFABC,
+ 34893 - 19968: 0xE6E2,
+ 34898 - 19968: 0xFAE5,
+ 34899 - 19968: 0xE2FA,
+ 34903 - 19968: 0xCAB6,
+ 34905 - 19968: 0xE4B7,
+ 34907 - 19968: 0xEADB,
+ 34909 - 19968: 0xF5FA,
+ 34913 - 19968: 0xFBAC,
+ 34914 - 19968: 0xCFC3,
+ 34915 - 19968: 0xEBFD,
+ 34920 - 19968: 0xF8FA,
+ 34923 - 19968: 0xDFB9,
+ 34928 - 19968: 0xE1F1,
+ 34930 - 19968: 0xD2A4,
+ 34935 - 19968: 0xF5FB,
+ 34942 - 19968: 0xD0DA,
+ 34943 - 19968: 0xD0DB,
+ 34945 - 19968: 0xEABE,
+ 34946 - 19968: 0xD9B1,
+ 34952 - 19968: 0xCAB7,
+ 34955 - 19968: 0xD3E7,
+ 34957 - 19968: 0xF8E5,
+ 34962 - 19968: 0xD3B2,
+ 34966 - 19968: 0xE2C0,
+ 34967 - 19968: 0xF2DF,
+ 34974 - 19968: 0xCDE5,
+ 34987 - 19968: 0xF9AC,
+ 34996 - 19968: 0xCDCD,
+ 35009 - 19968: 0xEEAE,
+ 35010 - 19968: 0xD6AE,
+ 35023 - 19968: 0xD7EA,
+ 35028 - 19968: 0xE7E0,
+ 35029 - 19968: 0xEBAE,
+ 35033 - 19968: 0xCFD9,
+ 35036 - 19968: 0xDCCD,
+ 35037 - 19968: 0xEDFB,
+ 35039 - 19968: 0xDEF0,
+ 35041 - 19968: 0xD7EB,
+ 35048 - 19968: 0xDEA5,
+ 35059 - 19968: 0xDFD7,
+ 35060 - 19968: 0xDBD0,
+ 35061 - 19968: 0xDBD1,
+ 35064 - 19968: 0xD5A3,
+ 35069 - 19968: 0xF0B2,
+ 35079 - 19968: 0xDCDC,
+ 35088 - 19968: 0xCAE8,
+ 35090 - 19968: 0xF8E6,
+ 35091 - 19968: 0xDCCE,
+ 35096 - 19968: 0xEADC,
+ 35097 - 19968: 0xDBD2,
+ 35109 - 19968: 0xE9B3,
+ 35114 - 19968: 0xF7DB,
+ 35126 - 19968: 0xE3A8,
+ 35128 - 19968: 0xD7AE,
+ 35131 - 19968: 0xE0E1,
+ 35137 - 19968: 0xCBBA,
+ 35140 - 19968: 0xE5D1,
+ 35167 - 19968: 0xD0DC,
+ 35172 - 19968: 0xD5C1,
+ 35178 - 19968: 0xD8CA,
+ 35186 - 19968: 0xE3A9,
+ 35199 - 19968: 0xE0A4,
+ 35201 - 19968: 0xE9A9,
+ 35203 - 19968: 0xD3C7,
+ 35206 - 19968: 0xDCDD,
+ 35207 - 19968: 0xF8AE,
+ 35211 - 19968: 0xCCB8,
+ 35215 - 19968: 0xD0AE,
+ 35219 - 19968: 0xD8F2,
+ 35222 - 19968: 0xE3CA,
+ 35233 - 19968: 0xCCAF,
+ 35241 - 19968: 0xD4AD,
+ 35242 - 19968: 0xF6D1,
+ 35250 - 19968: 0xD0CC,
+ 35258 - 19968: 0xCAC6,
+ 35261 - 19968: 0xD5C2,
+ 35264 - 19968: 0xCEBA,
+ 35282 - 19968: 0xCAC7,
+ 35299 - 19968: 0xFAB0,
+ 35316 - 19968: 0xDFD8,
+ 35320 - 19968: 0xF5BA,
+ 35328 - 19968: 0xE5EB,
+ 35330 - 19968: 0xEFF4,
+ 35331 - 19968: 0xDDB5,
+ 35336 - 19968: 0xCDAA,
+ 35338 - 19968: 0xE3F2,
+ 35340 - 19968: 0xFBF7,
+ 35342 - 19968: 0xF7D0,
+ 35347 - 19968: 0xFDBA,
+ 35350 - 19968: 0xFDE1,
+ 35351 - 19968: 0xF6FE,
+ 35352 - 19968: 0xD1C0,
+ 35355 - 19968: 0xE8C5,
+ 35357 - 19968: 0xE4B8,
+ 35359 - 19968: 0xE1E8,
+ 35363 - 19968: 0xCCC1,
+ 35365 - 19968: 0xD2ED,
+ 35370 - 19968: 0xDBBE,
+ 35373 - 19968: 0xE0E2,
+ 35377 - 19968: 0xFAC9,
+ 35380 - 19968: 0xE1CD,
+ 35382 - 19968: 0xCAB8,
+ 35386 - 19968: 0xF2E0,
+ 35387 - 19968: 0xF1C9,
+ 35408 - 19968: 0xDEF1,
+ 35412 - 19968: 0xF0DF,
+ 35413 - 19968: 0xF8C4,
+ 35419 - 19968: 0xEECC,
+ 35422 - 19968: 0xDEF2,
+ 35424 - 19968: 0xE7C9,
+ 35426 - 19968: 0xE2F3,
+ 35427 - 19968: 0xE7E1,
+ 35430 - 19968: 0xE3CB,
+ 35433 - 19968: 0xE3CC,
+ 35437 - 19968: 0xCFF8,
+ 35438 - 19968: 0xEFAC,
+ 35440 - 19968: 0xFDFE,
+ 35441 - 19968: 0xFCA5,
+ 35442 - 19968: 0xFAB1,
+ 35443 - 19968: 0xDFD9,
+ 35445 - 19968: 0xE0D2,
+ 35449 - 19968: 0xF4DA,
+ 35461 - 19968: 0xF1CA,
+ 35463 - 19968: 0xCEA3,
+ 35468 - 19968: 0xF2BC,
+ 35469 - 19968: 0xECE3,
+ 35475 - 19968: 0xE0A5,
+ 35477 - 19968: 0xF7AB,
+ 35480 - 19968: 0xEBAF,
+ 35486 - 19968: 0xE5DE,
+ 35488 - 19968: 0xE1A4,
+ 35489 - 19968: 0xCDAB,
+ 35491 - 19968: 0xD9F4,
+ 35492 - 19968: 0xE8A6,
+ 35493 - 19968: 0xCDCE,
+ 35494 - 19968: 0xE1E9,
+ 35496 - 19968: 0xFCEF,
+ 35498 - 19968: 0xE0E3,
+ 35504 - 19968: 0xE2C1,
+ 35506 - 19968: 0xCEA4,
+ 35513 - 19968: 0xDEA6,
+ 35516 - 19968: 0xEBFE,
+ 35518 - 19968: 0xEBDD,
+ 35519 - 19968: 0xF0E0,
+ 35522 - 19968: 0xF4DB,
+ 35524 - 19968: 0xE2F4,
+ 35527 - 19968: 0xD3C8,
+ 35531 - 19968: 0xF4EB,
+ 35533 - 19968: 0xEEB5,
+ 35535 - 19968: 0xF5D8,
+ 35538 - 19968: 0xD5DF,
+ 35542 - 19968: 0xD6E5,
+ 35547 - 19968: 0xEBB0,
+ 35548 - 19968: 0xF4E3,
+ 35553 - 19968: 0xE3CD,
+ 35558 - 19968: 0xF4F4,
+ 35559 - 19968: 0xFAB2,
+ 35562 - 19968: 0xEFF5,
+ 35563 - 19968: 0xCADF,
+ 35565 - 19968: 0xEBB1,
+ 35566 - 19968: 0xEDBF,
+ 35569 - 19968: 0xFDC9,
+ 35574 - 19968: 0xE4A6,
+ 35575 - 19968: 0xF9A4,
+ 35576 - 19968: 0xF0B3,
+ 35578 - 19968: 0xE5EC,
+ 35582 - 19968: 0xD1E7,
+ 35584 - 19968: 0xD9C7,
+ 35585 - 19968: 0xE4D7,
+ 35586 - 19968: 0xEADD,
+ 35588 - 19968: 0xD4F7,
+ 35598 - 19968: 0xDABA,
+ 35600 - 19968: 0xDACD,
+ 35604 - 19968: 0xF9CC,
+ 35606 - 19968: 0xE1DA,
+ 35607 - 19968: 0xDBBF,
+ 35609 - 19968: 0xCCC5,
+ 35610 - 19968: 0xECD0,
+ 35611 - 19968: 0xCBBB,
+ 35613 - 19968: 0xDEF3,
+ 35616 - 19968: 0xE9AA,
+ 35624 - 19968: 0xD9C8,
+ 35627 - 19968: 0xEEE3,
+ 35628 - 19968: 0xD7BD,
+ 35635 - 19968: 0xCFC4,
+ 35641 - 19968: 0xD0CD,
+ 35649 - 19968: 0xFCA6,
+ 35657 - 19968: 0xF1FB,
+ 35662 - 19968: 0xFDD2,
+ 35663 - 19968: 0xD1C1,
+ 35672 - 19968: 0xE3DB,
+ 35674 - 19968: 0xD3C9,
+ 35676 - 19968: 0xDCCF,
+ 35686 - 19968: 0xCCED,
+ 35692 - 19968: 0xDEA7,
+ 35695 - 19968: 0xE6BB,
+ 35696 - 19968: 0xECA1,
+ 35700 - 19968: 0xCCB9,
+ 35703 - 19968: 0xFBDE,
+ 35709 - 19968: 0xE7E2,
+ 35712 - 19968: 0xD4C1,
+ 35722 - 19968: 0xDCA8,
+ 35728 - 19968: 0xE2C2,
+ 35730 - 19968: 0xF3D8,
+ 35731 - 19968: 0xE5D3,
+ 35734 - 19968: 0xF3D9,
+ 35738 - 19968: 0xF3C6,
+ 35895 - 19968: 0xCDDB,
+ 35903 - 19968: 0xCDAC,
+ 35905 - 19968: 0xFCC3,
+ 35910 - 19968: 0xD4E7,
+ 35912 - 19968: 0xD1C2,
+ 35914 - 19968: 0xF9A5,
+ 35916 - 19968: 0xE8D5,
+ 35925 - 19968: 0xE3CE,
+ 35930 - 19968: 0xD4CA,
+ 35937 - 19968: 0xDFDA,
+ 35946 - 19968: 0xFBDF,
+ 35947 - 19968: 0xE7E3,
+ 35961 - 19968: 0xF8FB,
+ 35962 - 19968: 0xE3CF,
+ 35970 - 19968: 0xF5B0,
+ 35978 - 19968: 0xD8E7,
+ 35980 - 19968: 0xD9C9,
+ 35997 - 19968: 0xF8AF,
+ 35998 - 19968: 0xEFF6,
+ 36000 - 19968: 0xDDB6,
+ 36001 - 19968: 0xEEAF,
+ 36002 - 19968: 0xCDF8,
+ 36007 - 19968: 0xDEB8,
+ 36008 - 19968: 0xFCA7,
+ 36009 - 19968: 0xF7FC,
+ 36010 - 19968: 0xF7B1,
+ 36011 - 19968: 0xCEBB,
+ 36012 - 19968: 0xF4A1,
+ 36015 - 19968: 0xEECD,
+ 36016 - 19968: 0xE1AE,
+ 36019 - 19968: 0xECC3,
+ 36020 - 19968: 0xCFFE,
+ 36022 - 19968: 0xF8BF,
+ 36023 - 19968: 0xD8E2,
+ 36024 - 19968: 0xD3E8,
+ 36027 - 19968: 0xDEA8,
+ 36028 - 19968: 0xF4E4,
+ 36029 - 19968: 0xECC2,
+ 36031 - 19968: 0xD9F5,
+ 36032 - 19968: 0xF9C5,
+ 36033 - 19968: 0xDDD3,
+ 36034 - 19968: 0xD6F1,
+ 36035 - 19968: 0xECFC,
+ 36036 - 19968: 0xFCF0,
+ 36039 - 19968: 0xEDC0,
+ 36040 - 19968: 0xCAB9,
+ 36042 - 19968: 0xEEE4,
+ 36049 - 19968: 0xF2E1,
+ 36051 - 19968: 0xDEB9,
+ 36058 - 19968: 0xD6F2,
+ 36060 - 19968: 0xDEF4,
+ 36062 - 19968: 0xDFDB,
+ 36064 - 19968: 0xDBD3,
+ 36066 - 19968: 0xFAE7,
+ 36067 - 19968: 0xD8E3,
+ 36068 - 19968: 0xF4C1,
+ 36070 - 19968: 0xDDB7,
+ 36074 - 19968: 0xF2F5,
+ 36077 - 19968: 0xD4AE,
+ 36084 - 19968: 0xD6F3,
+ 36091 - 19968: 0xDDB8,
+ 36092 - 19968: 0xCFC5,
+ 36093 - 19968: 0xDFDF,
+ 36100 - 19968: 0xF2BE,
+ 36101 - 19968: 0xF6A1,
+ 36103 - 19968: 0xEBCB,
+ 36104 - 19968: 0xF1FC,
+ 36106 - 19968: 0xF3C7,
+ 36109 - 19968: 0xE0EB,
+ 36115 - 19968: 0xEDFC,
+ 36118 - 19968: 0xE1DB,
+ 36196 - 19968: 0xEEE5,
+ 36198 - 19968: 0xDEF5,
+ 36203 - 19968: 0xFAD3,
+ 36208 - 19968: 0xF1CB,
+ 36211 - 19968: 0xD0AF,
+ 36212 - 19968: 0xDDB9,
+ 36215 - 19968: 0xD1C3,
+ 36229 - 19968: 0xF5B1,
+ 36234 - 19968: 0xEAC6,
+ 36249 - 19968: 0xF0E1,
+ 36259 - 19968: 0xF6AC,
+ 36264 - 19968: 0xF5D9,
+ 36275 - 19968: 0xF0EB,
+ 36282 - 19968: 0xDDBA,
+ 36286 - 19968: 0xF2BF,
+ 36294 - 19968: 0xF7C5,
+ 36299 - 19968: 0xDBA2,
+ 36300 - 19968: 0xF2F6,
+ 36303 - 19968: 0xCABA,
+ 36315 - 19968: 0xF7F5,
+ 36317 - 19968: 0xCBE5,
+ 36321 - 19968: 0xEEE6,
+ 36323 - 19968: 0xE0D3,
+ 36328 - 19968: 0xCEA5,
+ 36335 - 19968: 0xD6D8,
+ 36339 - 19968: 0xD4AF,
+ 36362 - 19968: 0xE9C9,
+ 36367 - 19968: 0xD3CE,
+ 36368 - 19968: 0xF4C2,
+ 36382 - 19968: 0xCBE6,
+ 36394 - 19968: 0xF1A1,
+ 36400 - 19968: 0xEBB2,
+ 36405 - 19968: 0xF1A2,
+ 36418 - 19968: 0xEBB3,
+ 36420 - 19968: 0xF0B4,
+ 36423 - 19968: 0xCBF4,
+ 36424 - 19968: 0xD4B0,
+ 36425 - 19968: 0xF3B2,
+ 36426 - 19968: 0xFBB7,
+ 36441 - 19968: 0xF5EC,
+ 36447 - 19968: 0xEEE7,
+ 36448 - 19968: 0xF4B2,
+ 36468 - 19968: 0xF5ED,
+ 36470 - 19968: 0xCFF3,
+ 36481 - 19968: 0xF0E2,
+ 36487 - 19968: 0xEECE,
+ 36490 - 19968: 0xF1CC,
+ 36493 - 19968: 0xE5B8,
+ 36522 - 19968: 0xD7F5,
+ 36523 - 19968: 0xE3F3,
+ 36524 - 19968: 0xCFE5,
+ 36544 - 19968: 0xCFC6,
+ 36554 - 19968: 0xF3B3,
+ 36555 - 19968: 0xE4D8,
+ 36556 - 19968: 0xCFF9,
+ 36557 - 19968: 0xCFDA,
+ 36562 - 19968: 0xFACD,
+ 36575 - 19968: 0xE6E3,
+ 36587 - 19968: 0xF2E2,
+ 36600 - 19968: 0xF5EE,
+ 36603 - 19968: 0xCABB,
+ 36606 - 19968: 0xE3DC,
+ 36611 - 19968: 0xCEF2,
+ 36613 - 19968: 0xD6D9,
+ 36617 - 19968: 0xEEB0,
+ 36626 - 19968: 0xF4E5,
+ 36627 - 19968: 0xD8C2,
+ 36628 - 19968: 0xDCD0,
+ 36629 - 19968: 0xCCEE,
+ 36635 - 19968: 0xD5E0,
+ 36636 - 19968: 0xF6CA,
+ 36637 - 19968: 0xFDCA,
+ 36638 - 19968: 0xD8D6,
+ 36639 - 19968: 0xF4CF,
+ 36646 - 19968: 0xD6A6,
+ 36647 - 19968: 0xDCBE,
+ 36649 - 19968: 0xDBD4,
+ 36650 - 19968: 0xD7C7,
+ 36655 - 19968: 0xF2FE,
+ 36659 - 19968: 0xF1CD,
+ 36664 - 19968: 0xE2C3,
+ 36665 - 19968: 0xDCDE,
+ 36667 - 19968: 0xDCDF,
+ 36670 - 19968: 0xEFAD,
+ 36671 - 19968: 0xE6AB,
+ 36676 - 19968: 0xF9DD,
+ 36677 - 19968: 0xEABF,
+ 36681 - 19968: 0xEFAE,
+ 36685 - 19968: 0xF4D0,
+ 36686 - 19968: 0xCEF3,
+ 36701 - 19968: 0xE6AC,
+ 36703 - 19968: 0xCEDE,
+ 36706 - 19968: 0xD5F9,
+ 36763 - 19968: 0xE3F4,
+ 36764 - 19968: 0xCDD0,
+ 36771 - 19968: 0xD5B8,
+ 36774 - 19968: 0xF7FD,
+ 36776 - 19968: 0xDCA9,
+ 36781 - 19968: 0xDEF6,
+ 36783 - 19968: 0xDCAA,
+ 36784 - 19968: 0xF2E3,
+ 36785 - 19968: 0xE9B4,
+ 36786 - 19968: 0xD2DC,
+ 36802 - 19968: 0xE9E6,
+ 36805 - 19968: 0xE3F6,
+ 36814 - 19968: 0xE7CA,
+ 36817 - 19968: 0xD0CE,
+ 36820 - 19968: 0xDAF7,
+ 36838 - 19968: 0xCABC,
+ 36842 - 19968: 0xEEE8,
+ 36843 - 19968: 0xDADE,
+ 36845 - 19968: 0xF2F7,
+ 36848 - 19968: 0xE2FB,
+ 36850 - 19968: 0xCCA6,
+ 36855 - 19968: 0xDABB,
+ 36857 - 19968: 0xEEE9,
+ 36861 - 19968: 0xF5DA,
+ 36864 - 19968: 0xF7DC,
+ 36865 - 19968: 0xE1EA,
+ 36866 - 19968: 0xCEC1,
+ 36867 - 19968: 0xD4B1,
+ 36869 - 19968: 0xFDB1,
+ 36870 - 19968: 0xE6BD,
+ 36872 - 19968: 0xFBAD,
+ 36875 - 19968: 0xF8E7,
+ 36877 - 19968: 0xE1CE,
+ 36879 - 19968: 0xF7E2,
+ 36880 - 19968: 0xF5EF,
+ 36881 - 19968: 0xCFC7,
+ 36884 - 19968: 0xD4B2,
+ 36885 - 19968: 0xCCEF,
+ 36887 - 19968: 0xD4E8,
+ 36889 - 19968: 0xEECF,
+ 36890 - 19968: 0xF7D7,
+ 36893 - 19968: 0xE0A6,
+ 36894 - 19968: 0xD6C1,
+ 36895 - 19968: 0xE1DC,
+ 36896 - 19968: 0xF0E3,
+ 36897 - 19968: 0xF1E4,
+ 36898 - 19968: 0xDCF1,
+ 36899 - 19968: 0xD6A7,
+ 36910 - 19968: 0xF4F5,
+ 36913 - 19968: 0xF1CE,
+ 36914 - 19968: 0xF2E4,
+ 36917 - 19968: 0xD0B0,
+ 36920 - 19968: 0xECEF,
+ 36924 - 19968: 0xF9BA,
+ 36926 - 19968: 0xEBB5,
+ 36929 - 19968: 0xD4ED,
+ 36930 - 19968: 0xE2C4,
+ 36935 - 19968: 0xE9E7,
+ 36938 - 19968: 0xEBB4,
+ 36939 - 19968: 0xEAA1,
+ 36941 - 19968: 0xF8BC,
+ 36942 - 19968: 0xCEA6,
+ 36944 - 19968: 0xF9C6,
+ 36945 - 19968: 0xFCDA,
+ 36947 - 19968: 0xD4B3,
+ 36948 - 19968: 0xD3B9,
+ 36949 - 19968: 0xEADE,
+ 36953 - 19968: 0xE9AB,
+ 36956 - 19968: 0xE1E1,
+ 36957 - 19968: 0xD3CF,
+ 36958 - 19968: 0xF4F6,
+ 36960 - 19968: 0xEAC0,
+ 36961 - 19968: 0xE1CF,
+ 36963 - 19968: 0xCCBA,
+ 36969 - 19968: 0xEEEA,
+ 36973 - 19968: 0xF0E4,
+ 36974 - 19968: 0xF3B4,
+ 36975 - 19968: 0xD4EE,
+ 36978 - 19968: 0xF2C0,
+ 36981 - 19968: 0xF1E5,
+ 36983 - 19968: 0xF4C3,
+ 36984 - 19968: 0xE0D4,
+ 36986 - 19968: 0xEBB6,
+ 36988 - 19968: 0xD7A1,
+ 36989 - 19968: 0xCBE8,
+ 36991 - 19968: 0xF9AD,
+ 36992 - 19968: 0xE9AD,
+ 36993 - 19968: 0xD8E4,
+ 36994 - 19968: 0xFAB3,
+ 36995 - 19968: 0xE2C5,
+ 36996 - 19968: 0xFCBD,
+ 36999 - 19968: 0xECC4,
+ 37000 - 19968: 0xD8B1,
+ 37002 - 19968: 0xDCAB,
+ 37007 - 19968: 0xD5A4,
+ 37009 - 19968: 0xEBE9,
+ 37013 - 19968: 0xE8BB,
+ 37017 - 19968: 0xD8D7,
+ 37026 - 19968: 0xFBAE,
+ 37027 - 19968: 0xD1E1,
+ 37030 - 19968: 0xDBC0,
+ 37032 - 19968: 0xF5BE,
+ 37034 - 19968: 0xDEF7,
+ 37039 - 19968: 0xCAFB,
+ 37040 - 19968: 0xF7C6,
+ 37041 - 19968: 0xCFC8,
+ 37045 - 19968: 0xE1D0,
+ 37048 - 19968: 0xEED0,
+ 37057 - 19968: 0xE9F4,
+ 37066 - 19968: 0xCEF4,
+ 37086 - 19968: 0xD5CD,
+ 37089 - 19968: 0xCFDB,
+ 37096 - 19968: 0xDDBB,
+ 37101 - 19968: 0xCEAC,
+ 37109 - 19968: 0xE9E8,
+ 37117 - 19968: 0xD4B4,
+ 37122 - 19968: 0xE4C7,
+ 37138 - 19968: 0xF5DB,
+ 37141 - 19968: 0xFAC1,
+ 37145 - 19968: 0xDEA9,
+ 37159 - 19968: 0xD4F8,
+ 37165 - 19968: 0xEFF7,
+ 37170 - 19968: 0xD3B3,
+ 37193 - 19968: 0xEBB7,
+ 37194 - 19968: 0xEFF8,
+ 37195 - 19968: 0xF5DC,
+ 37196 - 19968: 0xEDCC,
+ 37197 - 19968: 0xDBD5,
+ 37198 - 19968: 0xF1CF,
+ 37202 - 19968: 0xF1D0,
+ 37218 - 19968: 0xF5B2,
+ 37225 - 19968: 0xD9AE,
+ 37226 - 19968: 0xD5AC,
+ 37228 - 19968: 0xE2C6,
+ 37237 - 19968: 0xFDA3,
+ 37239 - 19968: 0xFBE5,
+ 37240 - 19968: 0xDFAB,
+ 37255 - 19968: 0xE2F5,
+ 37257 - 19968: 0xF6AD,
+ 37259 - 19968: 0xF5B3,
+ 37261 - 19968: 0xF0B5,
+ 37266 - 19968: 0xE1A5,
+ 37276 - 19968: 0xF5DD,
+ 37291 - 19968: 0xECA2,
+ 37292 - 19968: 0xEDFD,
+ 37294 - 19968: 0xF5B4,
+ 37295 - 19968: 0xFBB8,
+ 37297 - 19968: 0xDBA3,
+ 37300 - 19968: 0xD6CA,
+ 37301 - 19968: 0xCBD9,
+ 37312 - 19968: 0xE5D4,
+ 37319 - 19968: 0xF3FA,
+ 37321 - 19968: 0xEBB8,
+ 37323 - 19968: 0xE0B7,
+ 37324 - 19968: 0xD7EC,
+ 37325 - 19968: 0xF1EC,
+ 37326 - 19968: 0xE5AF,
+ 37327 - 19968: 0xD5E1,
+ 37328 - 19968: 0xD7ED,
+ 37329 - 19968: 0xD1D1,
+ 37335 - 19968: 0xE1F2,
+ 37336 - 19968: 0xEFF9,
+ 37340 - 19968: 0xDDBC,
+ 37341 - 19968: 0xF6DC,
+ 37347 - 19968: 0xF0E5,
+ 37351 - 19968: 0xF4C4,
+ 37354 - 19968: 0xE9E9,
+ 37365 - 19968: 0xF3FB,
+ 37389 - 19968: 0xD4EF,
+ 37392 - 19968: 0xCCA2,
+ 37393 - 19968: 0xF7FE,
+ 37394 - 19968: 0xDFBC,
+ 37399 - 19968: 0xEBCD,
+ 37406 - 19968: 0xD0B7,
+ 37428 - 19968: 0xD6C2,
+ 37434 - 19968: 0xE8AD,
+ 37439 - 19968: 0xEFAF,
+ 37440 - 19968: 0xCBA5,
+ 37445 - 19968: 0xCBE9,
+ 37449 - 19968: 0xFAE8,
+ 37463 - 19968: 0xCCC6,
+ 37467 - 19968: 0xE6E7,
+ 37470 - 19968: 0xEAC7,
+ 37474 - 19968: 0xDBA4,
+ 37476 - 19968: 0xCFC9,
+ 37477 - 19968: 0xE2FC,
+ 37478 - 19968: 0xEFFA,
+ 37504 - 19968: 0xEBDE,
+ 37507 - 19968: 0xF5C8,
+ 37509 - 19968: 0xD4DE,
+ 37521 - 19968: 0xE0D5,
+ 37523 - 19968: 0xEFB0,
+ 37526 - 19968: 0xE2C7,
+ 37528 - 19968: 0xD9AF,
+ 37532 - 19968: 0xF9E7,
+ 37555 - 19968: 0xE7E5,
+ 37558 - 19968: 0xCFCA,
+ 37559 - 19968: 0xE1D1,
+ 37561 - 19968: 0xE2C8,
+ 37580 - 19968: 0xEFFB,
+ 37583 - 19968: 0xFAF9,
+ 37586 - 19968: 0xDCF2,
+ 37604 - 19968: 0xE0A7,
+ 37610 - 19968: 0xF8E8,
+ 37624 - 19968: 0xCBEA,
+ 37628 - 19968: 0xCBBC,
+ 37636 - 19968: 0xD6E2,
+ 37648 - 19968: 0xF5DE,
+ 37656 - 19968: 0xF5DF,
+ 37658 - 19968: 0xEEB6,
+ 37662 - 19968: 0xE2F6,
+ 37663 - 19968: 0xD3CA,
+ 37664 - 19968: 0xEFFC,
+ 37665 - 19968: 0xD1C4,
+ 37666 - 19968: 0xEFB1,
+ 37668 - 19968: 0xD1C5,
+ 37670 - 19968: 0xD0DE,
+ 37672 - 19968: 0xD9E1,
+ 37675 - 19968: 0xE0B8,
+ 37678 - 19968: 0xCDD1,
+ 37679 - 19968: 0xF3B9,
+ 37704 - 19968: 0xE7CC,
+ 37706 - 19968: 0xD6A8,
+ 37707 - 19968: 0xCEA7,
+ 37709 - 19968: 0xD4B5,
+ 37716 - 19968: 0xE4C8,
+ 37723 - 19968: 0xD3B4,
+ 37742 - 19968: 0xEBB9,
+ 37749 - 19968: 0xCBF5,
+ 37756 - 19968: 0xF6DD,
+ 37758 - 19968: 0xF1A3,
+ 37772 - 19968: 0xCCC7,
+ 37780 - 19968: 0xE9CA,
+ 37782 - 19968: 0xE1F0,
+ 37786 - 19968: 0xF5E0,
+ 37795 - 19968: 0xFBAF,
+ 37799 - 19968: 0xCBD1,
+ 37804 - 19968: 0xFBE0,
+ 37805 - 19968: 0xF2E5,
+ 37808 - 19968: 0xECF0,
+ 37827 - 19968: 0xF0EC,
+ 37841 - 19968: 0xEEEB,
+ 37854 - 19968: 0xE9CB,
+ 37857 - 19968: 0xCCF0,
+ 37860 - 19968: 0xD7AF,
+ 37878 - 19968: 0xF3A1,
+ 37892 - 19968: 0xFCF5,
+ 37912 - 19968: 0xF1A4,
+ 37925 - 19968: 0xE0D6,
+ 37931 - 19968: 0xEFB2,
+ 37941 - 19968: 0xF4D1,
+ 37944 - 19968: 0xF7A1,
+ 37956 - 19968: 0xF1D1,
+ 37969 - 19968: 0xCAFC,
+ 37970 - 19968: 0xCAFD,
+ 37979 - 19968: 0xCECE,
+ 38013 - 19968: 0xF3C8,
+ 38015 - 19968: 0xF3BA,
+ 38263 - 19968: 0xEDFE,
+ 38272 - 19968: 0xDAA6,
+ 38275 - 19968: 0xE0EC,
+ 38281 - 19968: 0xF8CD,
+ 38283 - 19968: 0xCBD2,
+ 38287 - 19968: 0xEBCE,
+ 38289 - 19968: 0xF9D8,
+ 38290 - 19968: 0xF9D9,
+ 38291 - 19968: 0xCAE0,
+ 38292 - 19968: 0xDACA,
+ 38296 - 19968: 0xCBA6,
+ 38307 - 19968: 0xCAC8,
+ 38308 - 19968: 0xF9EE,
+ 38309 - 19968: 0xDBEC,
+ 38312 - 19968: 0xD0B1,
+ 38317 - 19968: 0xD5EF,
+ 38321 - 19968: 0xE6F3,
+ 38331 - 19968: 0xE7A2,
+ 38332 - 19968: 0xE4D9,
+ 38343 - 19968: 0xE4E1,
+ 38346 - 19968: 0xFCC4,
+ 38356 - 19968: 0xF9EF,
+ 38357 - 19968: 0xCFF4,
+ 38358 - 19968: 0xF7E6,
+ 38364 - 19968: 0xCEBC,
+ 38369 - 19968: 0xF4C5,
+ 38370 - 19968: 0xDCA3,
+ 38428 - 19968: 0xDDBD,
+ 38433 - 19968: 0xF4C6,
+ 38442 - 19968: 0xF8A1,
+ 38446 - 19968: 0xE8D6,
+ 38450 - 19968: 0xDBC1,
+ 38459 - 19968: 0xF0E6,
+ 38463 - 19968: 0xE4B9,
+ 38464 - 19968: 0xF6ED,
+ 38466 - 19968: 0xF9AE,
+ 38468 - 19968: 0xDDBE,
+ 38475 - 19968: 0xD7B0,
+ 38476 - 19968: 0xD8E8,
+ 38477 - 19968: 0xCBBD,
+ 38480 - 19968: 0xF9DA,
+ 38491 - 19968: 0xF8CE,
+ 38492 - 19968: 0xF9F0,
+ 38493 - 19968: 0xE0ED,
+ 38494 - 19968: 0xE3B3,
+ 38495 - 19968: 0xF4B3,
+ 38498 - 19968: 0xEAC2,
+ 38499 - 19968: 0xF2E6,
+ 38500 - 19968: 0xF0B6,
+ 38506 - 19968: 0xDBD6,
+ 38512 - 19968: 0xEBE4,
+ 38515 - 19968: 0xF2E7,
+ 38517 - 19968: 0xD7D5,
+ 38518 - 19968: 0xD4B6,
+ 38519 - 19968: 0xF9E8,
+ 38520 - 19968: 0xD7C1,
+ 38525 - 19968: 0xE5D5,
+ 38533 - 19968: 0xE9EA,
+ 38534 - 19968: 0xD7CC,
+ 38538 - 19968: 0xD3E9,
+ 38539 - 19968: 0xE2C9,
+ 38541 - 19968: 0xFCDB,
+ 38542 - 19968: 0xCDAD,
+ 38548 - 19968: 0xCCB0,
+ 38549 - 19968: 0xEAA2,
+ 38552 - 19968: 0xE4F6,
+ 38553 - 19968: 0xD0C0,
+ 38555 - 19968: 0xF0B7,
+ 38556 - 19968: 0xEEA1,
+ 38563 - 19968: 0xD7F6,
+ 38567 - 19968: 0xE2CA,
+ 38568 - 19968: 0xE2CB,
+ 38570 - 19968: 0xFACF,
+ 38577 - 19968: 0xEBDF,
+ 38583 - 19968: 0xD6CB,
+ 38587 - 19968: 0xF4B4,
+ 38592 - 19968: 0xEDCD,
+ 38593 - 19968: 0xE4D2,
+ 38596 - 19968: 0xEAA9,
+ 38597 - 19968: 0xE4BA,
+ 38598 - 19968: 0xF3A2,
+ 38599 - 19968: 0xCDD2,
+ 38601 - 19968: 0xF6CB,
+ 38603 - 19968: 0xF1E6,
+ 38604 - 19968: 0xEDC1,
+ 38605 - 19968: 0xE8BC,
+ 38606 - 19968: 0xEED1,
+ 38613 - 19968: 0xF0E7,
+ 38614 - 19968: 0xE2CC,
+ 38617 - 19968: 0xE4AA,
+ 38619 - 19968: 0xF5E1,
+ 38620 - 19968: 0xEDDA,
+ 38626 - 19968: 0xD7EE,
+ 38627 - 19968: 0xD1F1,
+ 38632 - 19968: 0xE9EB,
+ 38633 - 19968: 0xE9EC,
+ 38634 - 19968: 0xE0E4,
+ 38639 - 19968: 0xDAA7,
+ 38640 - 19968: 0xDDD4,
+ 38642 - 19968: 0xEAA3,
+ 38646 - 19968: 0xD6C3,
+ 38647 - 19968: 0xD6F4,
+ 38649 - 19968: 0xDADF,
+ 38651 - 19968: 0xEFB3,
+ 38656 - 19968: 0xE2CD,
+ 38662 - 19968: 0xEFFD,
+ 38663 - 19968: 0xF2E8,
+ 38673 - 19968: 0xEFC5,
+ 38675 - 19968: 0xE7E7,
+ 38678 - 19968: 0xD7FD,
+ 38681 - 19968: 0xE7CE,
+ 38684 - 19968: 0xDFDC,
+ 38686 - 19968: 0xF9C7,
+ 38695 - 19968: 0xD9F6,
+ 38704 - 19968: 0xDFAC,
+ 38706 - 19968: 0xD6DA,
+ 38713 - 19968: 0xDCA4,
+ 38717 - 19968: 0xF0B8,
+ 38722 - 19968: 0xD5FA,
+ 38724 - 19968: 0xE4F7,
+ 38728 - 19968: 0xD6C4,
+ 38737 - 19968: 0xF4EC,
+ 38742 - 19968: 0xEFFE,
+ 38748 - 19968: 0xF0A1,
+ 38750 - 19968: 0xDEAA,
+ 38753 - 19968: 0xDABC,
+ 38754 - 19968: 0xD8FC,
+ 38761 - 19968: 0xFAD4,
+ 38765 - 19968: 0xECE5,
+ 38772 - 19968: 0xFCA8,
+ 38775 - 19968: 0xECE6,
+ 38778 - 19968: 0xD8CB,
+ 38795 - 19968: 0xFBB9,
+ 38797 - 19968: 0xE4D3,
+ 38799 - 19968: 0xCDF9,
+ 38816 - 19968: 0xCFD3,
+ 38824 - 19968: 0xCAEA,
+ 38827 - 19968: 0xCFD4,
+ 38829 - 19968: 0xF8BD,
+ 38854 - 19968: 0xF4C7,
+ 38859 - 19968: 0xEADF,
+ 38867 - 19968: 0xF9DB,
+ 38876 - 19968: 0xD4B7,
+ 38899 - 19968: 0xEBE5,
+ 38902 - 19968: 0xE1D2,
+ 38907 - 19968: 0xEAA4,
+ 38911 - 19968: 0xFAC2,
+ 38912 - 19968: 0xFBE1,
+ 38913 - 19968: 0xFAED,
+ 38914 - 19968: 0xF0A2,
+ 38915 - 19968: 0xCCF1,
+ 38917 - 19968: 0xFAA3,
+ 38918 - 19968: 0xE2F7,
+ 38920 - 19968: 0xE2CE,
+ 38922 - 19968: 0xE9F5,
+ 38924 - 19968: 0xE1EB,
+ 38928 - 19968: 0xE7E8,
+ 38929 - 19968: 0xE8D7,
+ 38930 - 19968: 0xDAF8,
+ 38931 - 19968: 0xD4CB,
+ 38935 - 19968: 0xF7F6,
+ 38936 - 19968: 0xD6C5,
+ 38957 - 19968: 0xD4E9,
+ 38960 - 19968: 0xFAFA,
+ 38968 - 19968: 0xCCF2,
+ 38969 - 19968: 0xF7DD,
+ 38971 - 19968: 0xDEBA,
+ 38982 - 19968: 0xCEA8,
+ 38988 - 19968: 0xF0B9,
+ 38989 - 19968: 0xE4FE,
+ 38990 - 19968: 0xE4C9,
+ 38996 - 19968: 0xE4D4,
+ 39000 - 19968: 0xEAC3,
+ 39002 - 19968: 0xEFB4,
+ 39006 - 19968: 0xD7BE,
+ 39013 - 19968: 0xFBE2,
+ 39015 - 19968: 0xCDD3,
+ 39019 - 19968: 0xEFB5,
+ 39023 - 19968: 0xFAE9,
+ 39080 - 19968: 0xF9A6,
+ 39087 - 19968: 0xDFBD,
+ 39089 - 19968: 0xF7C7,
+ 39108 - 19968: 0xF8FD,
+ 39111 - 19968: 0xF8FC,
+ 39131 - 19968: 0xDEAB,
+ 39132 - 19968: 0xDBE8,
+ 39135 - 19968: 0xE3DD,
+ 39137 - 19968: 0xE1E2,
+ 39138 - 19968: 0xD1C6,
+ 39149 - 19968: 0xF6D0,
+ 39150 - 19968: 0xEBE6,
+ 39151 - 19968: 0xDAF9,
+ 39156 - 19968: 0xECC7,
+ 39164 - 19968: 0xDEF8,
+ 39165 - 19968: 0xF8E9,
+ 39166 - 19968: 0xE3DE,
+ 39171 - 19968: 0xCEF5,
+ 39177 - 19968: 0xFAC3,
+ 39178 - 19968: 0xE5D7,
+ 39180 - 19968: 0xECC8,
+ 39184 - 19968: 0xF3C9,
+ 39187 - 19968: 0xE4BB,
+ 39192 - 19968: 0xE6AE,
+ 39198 - 19968: 0xEFB6,
+ 39200 - 19968: 0xDCBF,
+ 39208 - 19968: 0xCEBD,
+ 39237 - 19968: 0xD8C3,
+ 39241 - 19968: 0xD0CF,
+ 39243 - 19968: 0xCFFA,
+ 39244 - 19968: 0xF3CA,
+ 39245 - 19968: 0xE0D7,
+ 39249 - 19968: 0xD1C7,
+ 39250 - 19968: 0xE9AE,
+ 39252 - 19968: 0xE8BD,
+ 39255 - 19968: 0xFAC4,
+ 39318 - 19968: 0xE2CF,
+ 39321 - 19968: 0xFAC5,
+ 39325 - 19968: 0xF9B8,
+ 39333 - 19968: 0xDCE0,
+ 39336 - 19968: 0xFBB0,
+ 39340 - 19968: 0xD8A9,
+ 39341 - 19968: 0xE5DF,
+ 39342 - 19968: 0xF9A7,
+ 39345 - 19968: 0xF6EE,
+ 39347 - 19968: 0xF6CC,
+ 39348 - 19968: 0xE2F8,
+ 39353 - 19968: 0xECF1,
+ 39361 - 19968: 0xDAE0,
+ 39376 - 19968: 0xF1D2,
+ 39377 - 19968: 0xD2CC,
+ 39378 - 19968: 0xCFCB,
+ 39381 - 19968: 0xCABD,
+ 39385 - 19968: 0xDDBF,
+ 39389 - 19968: 0xF6EF,
+ 39391 - 19968: 0xDEF9,
+ 39405 - 19968: 0xFAB4,
+ 39409 - 19968: 0xD5AD,
+ 39423 - 19968: 0xF1E7,
+ 39425 - 19968: 0xDEBE,
+ 39432 - 19968: 0xDCC0,
+ 39438 - 19968: 0xD1C8,
+ 39439 - 19968: 0xD1C9,
+ 39449 - 19968: 0xF8BE,
+ 39467 - 19968: 0xCBF6,
+ 39472 - 19968: 0xD4F9,
+ 39478 - 19968: 0xF5E2,
+ 39479 - 19968: 0xE1D3,
+ 39488 - 19968: 0xD8E9,
+ 39491 - 19968: 0xF8FE,
+ 39493 - 19968: 0xCFCC,
+ 39501 - 19968: 0xFDA4,
+ 39509 - 19968: 0xCEF6,
+ 39511 - 19968: 0xFAD0,
+ 39514 - 19968: 0xCCF3,
+ 39515 - 19968: 0xE6BE,
+ 39519 - 19968: 0xF6AE,
+ 39522 - 19968: 0xD5F0,
+ 39525 - 19968: 0xD1CA,
+ 39529 - 19968: 0xFCBE,
+ 39530 - 19968: 0xD5F1,
+ 39592 - 19968: 0xCDE9,
+ 39608 - 19968: 0xFAB5,
+ 39635 - 19968: 0xE2D0,
+ 39636 - 19968: 0xF4F7,
+ 39640 - 19968: 0xCDD4,
+ 39653 - 19968: 0xE7A3,
+ 39662 - 19968: 0xDBA5,
+ 39706 - 19968: 0xE2D1,
+ 39719 - 19968: 0xD7A2,
+ 39722 - 19968: 0xF7E3,
+ 39729 - 19968: 0xEAA6,
+ 39740 - 19968: 0xD0A1,
+ 39745 - 19968: 0xCEDA,
+ 39746 - 19968: 0xFBEB,
+ 39747 - 19968: 0xDBA6,
+ 39748 - 19968: 0xDBDE,
+ 39749 - 19968: 0xD8E5,
+ 39759 - 19968: 0xEAE0,
+ 39764 - 19968: 0xD8AA,
+ 39770 - 19968: 0xE5E0,
+ 39791 - 19968: 0xD6DB,
+ 39822 - 19968: 0xEFC6,
+ 39825 - 19968: 0xF8EA,
+ 39839 - 19968: 0xE4D5,
+ 39851 - 19968: 0xCEF7,
+ 39854 - 19968: 0xE0D8,
+ 39881 - 19968: 0xD7EF,
+ 39894 - 19968: 0xF4ED,
+ 39908 - 19968: 0xCDE6,
+ 39912 - 19968: 0xCCF4,
+ 39949 - 19968: 0xF5E3,
+ 39952 - 19968: 0xE4CA,
+ 39954 - 19968: 0xDCE1,
+ 39957 - 19968: 0xF9C8,
+ 39973 - 19968: 0xFCBF,
+ 39986 - 19968: 0xE8A7,
+ 39995 - 19968: 0xD8C4,
+ 40007 - 19968: 0xCBBE,
+ 40009 - 19968: 0xDCAE,
+ 40023 - 19968: 0xD7F7,
+ 40165 - 19968: 0xF0E8,
+ 40167 - 19968: 0xDDC0,
+ 40169 - 19968: 0xCFCD,
+ 40179 - 19968: 0xDCF3,
+ 40180 - 19968: 0xD9B0,
+ 40182 - 19968: 0xE6E9,
+ 40201 - 19968: 0xE4BC,
+ 40219 - 19968: 0xEAC4,
+ 40230 - 19968: 0xE4EC,
+ 40232 - 19968: 0xE4E5,
+ 40251 - 19968: 0xFBF8,
+ 40273 - 19968: 0xCCBB,
+ 40285 - 19968: 0xE4BD,
+ 40288 - 19968: 0xCDDC,
+ 40289 - 19968: 0xD9F7,
+ 40300 - 19968: 0xDDDF,
+ 40306 - 19968: 0xEDCE,
+ 40361 - 19968: 0xD9D0,
+ 40367 - 19968: 0xE5A3,
+ 40372 - 19968: 0xF9CD,
+ 40388 - 19968: 0xCDAE,
+ 40407 - 19968: 0xCFCE,
+ 40434 - 19968: 0xF6AF,
+ 40440 - 19968: 0xFDD3,
+ 40441 - 19968: 0xEBED,
+ 40442 - 19968: 0xD6DC,
+ 40474 - 19968: 0xE5A4,
+ 40478 - 19968: 0xD5B6,
+ 40565 - 19968: 0xD6DD,
+ 40569 - 19968: 0xF9E9,
+ 40573 - 19968: 0xE7A4,
+ 40575 - 19968: 0xD6E3,
+ 40594 - 19968: 0xD1CB,
+ 40595 - 19968: 0xD6E4,
+ 40599 - 19968: 0xD5F2,
+ 40605 - 19968: 0xDEFA,
+ 40607 - 19968: 0xD7F8,
+ 40613 - 19968: 0xD8EA,
+ 40628 - 19968: 0xCFD5,
+ 40629 - 19968: 0xD8FD,
+ 40635 - 19968: 0xD8AB,
+ 40638 - 19968: 0xFDCB,
+ 40643 - 19968: 0xFCDC,
+ 40653 - 19968: 0xE0A8,
+ 40654 - 19968: 0xD5F3,
+ 40657 - 19968: 0xFDD9,
+ 40660 - 19968: 0xCCA3,
+ 40664 - 19968: 0xD9F9,
+ 40667 - 19968: 0xD3EA,
+ 40668 - 19968: 0xF5F5,
+ 40670 - 19968: 0xEFC7,
+ 40680 - 19968: 0xD3DA,
+ 40692 - 19968: 0xDABD,
+ 40711 - 19968: 0xE8A8,
+ 40712 - 19968: 0xDCAF,
+ 40718 - 19968: 0xF0A3,
+ 40723 - 19968: 0xCDD5,
+ 40736 - 19968: 0xE0A9,
+ 40763 - 19968: 0xDEAC,
+ 40778 - 19968: 0xF0BA,
+ 40779 - 19968: 0xEEB1,
+ 40782 - 19968: 0xEEB2,
+ 40786 - 19968: 0xF6CD,
+ 40799 - 19968: 0xEED2,
+ 40801 - 19968: 0xD6C6,
+ 40807 - 19968: 0xE0E5,
+ 40810 - 19968: 0xF3BB,
+ 40812 - 19968: 0xE5E1,
+ 40823 - 19968: 0xE4CB,
+ 40845 - 19968: 0xD7A3,
+ 40848 - 19968: 0xDBC2,
+ 40853 - 19968: 0xCAFE,
+ 40860 - 19968: 0xCFCF,
+}
+
+const encode1Low, encode1High = 44032, 55204
+
+var encode1 = [...]uint16{
+ 44032 - 44032: 0xB0A1,
+ 44033 - 44032: 0xB0A2,
+ 44034 - 44032: 0x8141,
+ 44035 - 44032: 0x8142,
+ 44036 - 44032: 0xB0A3,
+ 44037 - 44032: 0x8143,
+ 44038 - 44032: 0x8144,
+ 44039 - 44032: 0xB0A4,
+ 44040 - 44032: 0xB0A5,
+ 44041 - 44032: 0xB0A6,
+ 44042 - 44032: 0xB0A7,
+ 44043 - 44032: 0x8145,
+ 44044 - 44032: 0x8146,
+ 44045 - 44032: 0x8147,
+ 44046 - 44032: 0x8148,
+ 44047 - 44032: 0x8149,
+ 44048 - 44032: 0xB0A8,
+ 44049 - 44032: 0xB0A9,
+ 44050 - 44032: 0xB0AA,
+ 44051 - 44032: 0xB0AB,
+ 44052 - 44032: 0xB0AC,
+ 44053 - 44032: 0xB0AD,
+ 44054 - 44032: 0xB0AE,
+ 44055 - 44032: 0xB0AF,
+ 44056 - 44032: 0x814A,
+ 44057 - 44032: 0xB0B0,
+ 44058 - 44032: 0xB0B1,
+ 44059 - 44032: 0xB0B2,
+ 44060 - 44032: 0xB0B3,
+ 44061 - 44032: 0xB0B4,
+ 44062 - 44032: 0x814B,
+ 44063 - 44032: 0x814C,
+ 44064 - 44032: 0xB0B5,
+ 44065 - 44032: 0x814D,
+ 44066 - 44032: 0x814E,
+ 44067 - 44032: 0x814F,
+ 44068 - 44032: 0xB0B6,
+ 44069 - 44032: 0x8150,
+ 44070 - 44032: 0x8151,
+ 44071 - 44032: 0x8152,
+ 44072 - 44032: 0x8153,
+ 44073 - 44032: 0x8154,
+ 44074 - 44032: 0x8155,
+ 44075 - 44032: 0x8156,
+ 44076 - 44032: 0xB0B7,
+ 44077 - 44032: 0xB0B8,
+ 44078 - 44032: 0x8157,
+ 44079 - 44032: 0xB0B9,
+ 44080 - 44032: 0xB0BA,
+ 44081 - 44032: 0xB0BB,
+ 44082 - 44032: 0x8158,
+ 44083 - 44032: 0x8159,
+ 44084 - 44032: 0x815A,
+ 44085 - 44032: 0x8161,
+ 44086 - 44032: 0x8162,
+ 44087 - 44032: 0x8163,
+ 44088 - 44032: 0xB0BC,
+ 44089 - 44032: 0xB0BD,
+ 44090 - 44032: 0x8164,
+ 44091 - 44032: 0x8165,
+ 44092 - 44032: 0xB0BE,
+ 44093 - 44032: 0x8166,
+ 44094 - 44032: 0x8167,
+ 44095 - 44032: 0x8168,
+ 44096 - 44032: 0xB0BF,
+ 44097 - 44032: 0x8169,
+ 44098 - 44032: 0x816A,
+ 44099 - 44032: 0x816B,
+ 44100 - 44032: 0x816C,
+ 44101 - 44032: 0x816D,
+ 44102 - 44032: 0x816E,
+ 44103 - 44032: 0x816F,
+ 44104 - 44032: 0x8170,
+ 44105 - 44032: 0x8171,
+ 44106 - 44032: 0x8172,
+ 44107 - 44032: 0xB0C0,
+ 44108 - 44032: 0x8173,
+ 44109 - 44032: 0xB0C1,
+ 44110 - 44032: 0x8174,
+ 44111 - 44032: 0x8175,
+ 44112 - 44032: 0x8176,
+ 44113 - 44032: 0x8177,
+ 44114 - 44032: 0x8178,
+ 44115 - 44032: 0x8179,
+ 44116 - 44032: 0xB0C2,
+ 44117 - 44032: 0x817A,
+ 44118 - 44032: 0x8181,
+ 44119 - 44032: 0x8182,
+ 44120 - 44032: 0xB0C3,
+ 44121 - 44032: 0x8183,
+ 44122 - 44032: 0x8184,
+ 44123 - 44032: 0x8185,
+ 44124 - 44032: 0xB0C4,
+ 44125 - 44032: 0x8186,
+ 44126 - 44032: 0x8187,
+ 44127 - 44032: 0x8188,
+ 44128 - 44032: 0x8189,
+ 44129 - 44032: 0x818A,
+ 44130 - 44032: 0x818B,
+ 44131 - 44032: 0x818C,
+ 44132 - 44032: 0x818D,
+ 44133 - 44032: 0x818E,
+ 44134 - 44032: 0x818F,
+ 44135 - 44032: 0x8190,
+ 44136 - 44032: 0x8191,
+ 44137 - 44032: 0x8192,
+ 44138 - 44032: 0x8193,
+ 44139 - 44032: 0x8194,
+ 44140 - 44032: 0x8195,
+ 44141 - 44032: 0x8196,
+ 44142 - 44032: 0x8197,
+ 44143 - 44032: 0x8198,
+ 44144 - 44032: 0xB0C5,
+ 44145 - 44032: 0xB0C6,
+ 44146 - 44032: 0x8199,
+ 44147 - 44032: 0x819A,
+ 44148 - 44032: 0xB0C7,
+ 44149 - 44032: 0x819B,
+ 44150 - 44032: 0x819C,
+ 44151 - 44032: 0xB0C8,
+ 44152 - 44032: 0xB0C9,
+ 44153 - 44032: 0x819D,
+ 44154 - 44032: 0xB0CA,
+ 44155 - 44032: 0x819E,
+ 44156 - 44032: 0x819F,
+ 44157 - 44032: 0x81A0,
+ 44158 - 44032: 0x81A1,
+ 44159 - 44032: 0x81A2,
+ 44160 - 44032: 0xB0CB,
+ 44161 - 44032: 0xB0CC,
+ 44162 - 44032: 0x81A3,
+ 44163 - 44032: 0xB0CD,
+ 44164 - 44032: 0xB0CE,
+ 44165 - 44032: 0xB0CF,
+ 44166 - 44032: 0xB0D0,
+ 44167 - 44032: 0x81A4,
+ 44168 - 44032: 0x81A5,
+ 44169 - 44032: 0xB0D1,
+ 44170 - 44032: 0xB0D2,
+ 44171 - 44032: 0xB0D3,
+ 44172 - 44032: 0xB0D4,
+ 44173 - 44032: 0x81A6,
+ 44174 - 44032: 0x81A7,
+ 44175 - 44032: 0x81A8,
+ 44176 - 44032: 0xB0D5,
+ 44177 - 44032: 0x81A9,
+ 44178 - 44032: 0x81AA,
+ 44179 - 44032: 0x81AB,
+ 44180 - 44032: 0xB0D6,
+ 44181 - 44032: 0x81AC,
+ 44182 - 44032: 0x81AD,
+ 44183 - 44032: 0x81AE,
+ 44184 - 44032: 0x81AF,
+ 44185 - 44032: 0x81B0,
+ 44186 - 44032: 0x81B1,
+ 44187 - 44032: 0x81B2,
+ 44188 - 44032: 0xB0D7,
+ 44189 - 44032: 0xB0D8,
+ 44190 - 44032: 0x81B3,
+ 44191 - 44032: 0xB0D9,
+ 44192 - 44032: 0xB0DA,
+ 44193 - 44032: 0xB0DB,
+ 44194 - 44032: 0x81B4,
+ 44195 - 44032: 0x81B5,
+ 44196 - 44032: 0x81B6,
+ 44197 - 44032: 0x81B7,
+ 44198 - 44032: 0x81B8,
+ 44199 - 44032: 0x81B9,
+ 44200 - 44032: 0xB0DC,
+ 44201 - 44032: 0xB0DD,
+ 44202 - 44032: 0xB0DE,
+ 44203 - 44032: 0x81BA,
+ 44204 - 44032: 0xB0DF,
+ 44205 - 44032: 0x81BB,
+ 44206 - 44032: 0x81BC,
+ 44207 - 44032: 0xB0E0,
+ 44208 - 44032: 0xB0E1,
+ 44209 - 44032: 0x81BD,
+ 44210 - 44032: 0x81BE,
+ 44211 - 44032: 0x81BF,
+ 44212 - 44032: 0x81C0,
+ 44213 - 44032: 0x81C1,
+ 44214 - 44032: 0x81C2,
+ 44215 - 44032: 0x81C3,
+ 44216 - 44032: 0xB0E2,
+ 44217 - 44032: 0xB0E3,
+ 44218 - 44032: 0x81C4,
+ 44219 - 44032: 0xB0E4,
+ 44220 - 44032: 0xB0E5,
+ 44221 - 44032: 0xB0E6,
+ 44222 - 44032: 0x81C5,
+ 44223 - 44032: 0x81C6,
+ 44224 - 44032: 0x81C7,
+ 44225 - 44032: 0xB0E7,
+ 44226 - 44032: 0x81C8,
+ 44227 - 44032: 0x81C9,
+ 44228 - 44032: 0xB0E8,
+ 44229 - 44032: 0x81CA,
+ 44230 - 44032: 0x81CB,
+ 44231 - 44032: 0x81CC,
+ 44232 - 44032: 0xB0E9,
+ 44233 - 44032: 0x81CD,
+ 44234 - 44032: 0x81CE,
+ 44235 - 44032: 0x81CF,
+ 44236 - 44032: 0xB0EA,
+ 44237 - 44032: 0x81D0,
+ 44238 - 44032: 0x81D1,
+ 44239 - 44032: 0x81D2,
+ 44240 - 44032: 0x81D3,
+ 44241 - 44032: 0x81D4,
+ 44242 - 44032: 0x81D5,
+ 44243 - 44032: 0x81D6,
+ 44244 - 44032: 0x81D7,
+ 44245 - 44032: 0xB0EB,
+ 44246 - 44032: 0x81D8,
+ 44247 - 44032: 0xB0EC,
+ 44248 - 44032: 0x81D9,
+ 44249 - 44032: 0x81DA,
+ 44250 - 44032: 0x81DB,
+ 44251 - 44032: 0x81DC,
+ 44252 - 44032: 0x81DD,
+ 44253 - 44032: 0x81DE,
+ 44254 - 44032: 0x81DF,
+ 44255 - 44032: 0x81E0,
+ 44256 - 44032: 0xB0ED,
+ 44257 - 44032: 0xB0EE,
+ 44258 - 44032: 0x81E1,
+ 44259 - 44032: 0x81E2,
+ 44260 - 44032: 0xB0EF,
+ 44261 - 44032: 0x81E3,
+ 44262 - 44032: 0x81E4,
+ 44263 - 44032: 0xB0F0,
+ 44264 - 44032: 0xB0F1,
+ 44265 - 44032: 0x81E5,
+ 44266 - 44032: 0xB0F2,
+ 44267 - 44032: 0x81E6,
+ 44268 - 44032: 0xB0F3,
+ 44269 - 44032: 0x81E7,
+ 44270 - 44032: 0x81E8,
+ 44271 - 44032: 0xB0F4,
+ 44272 - 44032: 0xB0F5,
+ 44273 - 44032: 0xB0F6,
+ 44274 - 44032: 0x81E9,
+ 44275 - 44032: 0xB0F7,
+ 44276 - 44032: 0x81EA,
+ 44277 - 44032: 0xB0F8,
+ 44278 - 44032: 0xB0F9,
+ 44279 - 44032: 0x81EB,
+ 44280 - 44032: 0x81EC,
+ 44281 - 44032: 0x81ED,
+ 44282 - 44032: 0x81EE,
+ 44283 - 44032: 0x81EF,
+ 44284 - 44032: 0xB0FA,
+ 44285 - 44032: 0xB0FB,
+ 44286 - 44032: 0x81F0,
+ 44287 - 44032: 0x81F1,
+ 44288 - 44032: 0xB0FC,
+ 44289 - 44032: 0x81F2,
+ 44290 - 44032: 0x81F3,
+ 44291 - 44032: 0x81F4,
+ 44292 - 44032: 0xB0FD,
+ 44293 - 44032: 0x81F5,
+ 44294 - 44032: 0xB0FE,
+ 44295 - 44032: 0x81F6,
+ 44296 - 44032: 0x81F7,
+ 44297 - 44032: 0x81F8,
+ 44298 - 44032: 0x81F9,
+ 44299 - 44032: 0x81FA,
+ 44300 - 44032: 0xB1A1,
+ 44301 - 44032: 0xB1A2,
+ 44302 - 44032: 0x81FB,
+ 44303 - 44032: 0xB1A3,
+ 44304 - 44032: 0x81FC,
+ 44305 - 44032: 0xB1A4,
+ 44306 - 44032: 0x81FD,
+ 44307 - 44032: 0x81FE,
+ 44308 - 44032: 0x8241,
+ 44309 - 44032: 0x8242,
+ 44310 - 44032: 0x8243,
+ 44311 - 44032: 0x8244,
+ 44312 - 44032: 0xB1A5,
+ 44313 - 44032: 0x8245,
+ 44314 - 44032: 0x8246,
+ 44315 - 44032: 0x8247,
+ 44316 - 44032: 0xB1A6,
+ 44317 - 44032: 0x8248,
+ 44318 - 44032: 0x8249,
+ 44319 - 44032: 0x824A,
+ 44320 - 44032: 0xB1A7,
+ 44321 - 44032: 0x824B,
+ 44322 - 44032: 0x824C,
+ 44323 - 44032: 0x824D,
+ 44324 - 44032: 0x824E,
+ 44325 - 44032: 0x824F,
+ 44326 - 44032: 0x8250,
+ 44327 - 44032: 0x8251,
+ 44328 - 44032: 0x8252,
+ 44329 - 44032: 0xB1A8,
+ 44330 - 44032: 0x8253,
+ 44331 - 44032: 0x8254,
+ 44332 - 44032: 0xB1A9,
+ 44333 - 44032: 0xB1AA,
+ 44334 - 44032: 0x8255,
+ 44335 - 44032: 0x8256,
+ 44336 - 44032: 0x8257,
+ 44337 - 44032: 0x8258,
+ 44338 - 44032: 0x8259,
+ 44339 - 44032: 0x825A,
+ 44340 - 44032: 0xB1AB,
+ 44341 - 44032: 0xB1AC,
+ 44342 - 44032: 0x8261,
+ 44343 - 44032: 0x8262,
+ 44344 - 44032: 0xB1AD,
+ 44345 - 44032: 0x8263,
+ 44346 - 44032: 0x8264,
+ 44347 - 44032: 0x8265,
+ 44348 - 44032: 0xB1AE,
+ 44349 - 44032: 0x8266,
+ 44350 - 44032: 0x8267,
+ 44351 - 44032: 0x8268,
+ 44352 - 44032: 0x8269,
+ 44353 - 44032: 0x826A,
+ 44354 - 44032: 0x826B,
+ 44355 - 44032: 0x826C,
+ 44356 - 44032: 0xB1AF,
+ 44357 - 44032: 0xB1B0,
+ 44358 - 44032: 0x826D,
+ 44359 - 44032: 0xB1B1,
+ 44360 - 44032: 0x826E,
+ 44361 - 44032: 0xB1B2,
+ 44362 - 44032: 0x826F,
+ 44363 - 44032: 0x8270,
+ 44364 - 44032: 0x8271,
+ 44365 - 44032: 0x8272,
+ 44366 - 44032: 0x8273,
+ 44367 - 44032: 0x8274,
+ 44368 - 44032: 0xB1B3,
+ 44369 - 44032: 0x8275,
+ 44370 - 44032: 0x8276,
+ 44371 - 44032: 0x8277,
+ 44372 - 44032: 0xB1B4,
+ 44373 - 44032: 0x8278,
+ 44374 - 44032: 0x8279,
+ 44375 - 44032: 0x827A,
+ 44376 - 44032: 0xB1B5,
+ 44377 - 44032: 0x8281,
+ 44378 - 44032: 0x8282,
+ 44379 - 44032: 0x8283,
+ 44380 - 44032: 0x8284,
+ 44381 - 44032: 0x8285,
+ 44382 - 44032: 0x8286,
+ 44383 - 44032: 0x8287,
+ 44384 - 44032: 0x8288,
+ 44385 - 44032: 0xB1B6,
+ 44386 - 44032: 0x8289,
+ 44387 - 44032: 0xB1B7,
+ 44388 - 44032: 0x828A,
+ 44389 - 44032: 0x828B,
+ 44390 - 44032: 0x828C,
+ 44391 - 44032: 0x828D,
+ 44392 - 44032: 0x828E,
+ 44393 - 44032: 0x828F,
+ 44394 - 44032: 0x8290,
+ 44395 - 44032: 0x8291,
+ 44396 - 44032: 0xB1B8,
+ 44397 - 44032: 0xB1B9,
+ 44398 - 44032: 0x8292,
+ 44399 - 44032: 0x8293,
+ 44400 - 44032: 0xB1BA,
+ 44401 - 44032: 0x8294,
+ 44402 - 44032: 0x8295,
+ 44403 - 44032: 0xB1BB,
+ 44404 - 44032: 0xB1BC,
+ 44405 - 44032: 0xB1BD,
+ 44406 - 44032: 0xB1BE,
+ 44407 - 44032: 0x8296,
+ 44408 - 44032: 0x8297,
+ 44409 - 44032: 0x8298,
+ 44410 - 44032: 0x8299,
+ 44411 - 44032: 0xB1BF,
+ 44412 - 44032: 0xB1C0,
+ 44413 - 44032: 0xB1C1,
+ 44414 - 44032: 0x829A,
+ 44415 - 44032: 0xB1C2,
+ 44416 - 44032: 0x829B,
+ 44417 - 44032: 0xB1C3,
+ 44418 - 44032: 0xB1C4,
+ 44419 - 44032: 0x829C,
+ 44420 - 44032: 0x829D,
+ 44421 - 44032: 0x829E,
+ 44422 - 44032: 0x829F,
+ 44423 - 44032: 0x82A0,
+ 44424 - 44032: 0xB1C5,
+ 44425 - 44032: 0xB1C6,
+ 44426 - 44032: 0x82A1,
+ 44427 - 44032: 0x82A2,
+ 44428 - 44032: 0xB1C7,
+ 44429 - 44032: 0x82A3,
+ 44430 - 44032: 0x82A4,
+ 44431 - 44032: 0x82A5,
+ 44432 - 44032: 0xB1C8,
+ 44433 - 44032: 0x82A6,
+ 44434 - 44032: 0x82A7,
+ 44435 - 44032: 0x82A8,
+ 44436 - 44032: 0x82A9,
+ 44437 - 44032: 0x82AA,
+ 44438 - 44032: 0x82AB,
+ 44439 - 44032: 0x82AC,
+ 44440 - 44032: 0x82AD,
+ 44441 - 44032: 0x82AE,
+ 44442 - 44032: 0x82AF,
+ 44443 - 44032: 0x82B0,
+ 44444 - 44032: 0xB1C9,
+ 44445 - 44032: 0xB1CA,
+ 44446 - 44032: 0x82B1,
+ 44447 - 44032: 0x82B2,
+ 44448 - 44032: 0x82B3,
+ 44449 - 44032: 0x82B4,
+ 44450 - 44032: 0x82B5,
+ 44451 - 44032: 0x82B6,
+ 44452 - 44032: 0xB1CB,
+ 44453 - 44032: 0x82B7,
+ 44454 - 44032: 0x82B8,
+ 44455 - 44032: 0x82B9,
+ 44456 - 44032: 0x82BA,
+ 44457 - 44032: 0x82BB,
+ 44458 - 44032: 0x82BC,
+ 44459 - 44032: 0x82BD,
+ 44460 - 44032: 0x82BE,
+ 44461 - 44032: 0x82BF,
+ 44462 - 44032: 0x82C0,
+ 44463 - 44032: 0x82C1,
+ 44464 - 44032: 0x82C2,
+ 44465 - 44032: 0x82C3,
+ 44466 - 44032: 0x82C4,
+ 44467 - 44032: 0x82C5,
+ 44468 - 44032: 0x82C6,
+ 44469 - 44032: 0x82C7,
+ 44470 - 44032: 0x82C8,
+ 44471 - 44032: 0xB1CC,
+ 44472 - 44032: 0x82C9,
+ 44473 - 44032: 0x82CA,
+ 44474 - 44032: 0x82CB,
+ 44475 - 44032: 0x82CC,
+ 44476 - 44032: 0x82CD,
+ 44477 - 44032: 0x82CE,
+ 44478 - 44032: 0x82CF,
+ 44479 - 44032: 0x82D0,
+ 44480 - 44032: 0xB1CD,
+ 44481 - 44032: 0xB1CE,
+ 44482 - 44032: 0x82D1,
+ 44483 - 44032: 0x82D2,
+ 44484 - 44032: 0xB1CF,
+ 44485 - 44032: 0x82D3,
+ 44486 - 44032: 0x82D4,
+ 44487 - 44032: 0x82D5,
+ 44488 - 44032: 0xB1D0,
+ 44489 - 44032: 0x82D6,
+ 44490 - 44032: 0x82D7,
+ 44491 - 44032: 0x82D8,
+ 44492 - 44032: 0x82D9,
+ 44493 - 44032: 0x82DA,
+ 44494 - 44032: 0x82DB,
+ 44495 - 44032: 0x82DC,
+ 44496 - 44032: 0xB1D1,
+ 44497 - 44032: 0xB1D2,
+ 44498 - 44032: 0x82DD,
+ 44499 - 44032: 0xB1D3,
+ 44500 - 44032: 0x82DE,
+ 44501 - 44032: 0x82DF,
+ 44502 - 44032: 0x82E0,
+ 44503 - 44032: 0x82E1,
+ 44504 - 44032: 0x82E2,
+ 44505 - 44032: 0x82E3,
+ 44506 - 44032: 0x82E4,
+ 44507 - 44032: 0x82E5,
+ 44508 - 44032: 0xB1D4,
+ 44509 - 44032: 0x82E6,
+ 44510 - 44032: 0x82E7,
+ 44511 - 44032: 0x82E8,
+ 44512 - 44032: 0xB1D5,
+ 44513 - 44032: 0x82E9,
+ 44514 - 44032: 0x82EA,
+ 44515 - 44032: 0x82EB,
+ 44516 - 44032: 0xB1D6,
+ 44517 - 44032: 0x82EC,
+ 44518 - 44032: 0x82ED,
+ 44519 - 44032: 0x82EE,
+ 44520 - 44032: 0x82EF,
+ 44521 - 44032: 0x82F0,
+ 44522 - 44032: 0x82F1,
+ 44523 - 44032: 0x82F2,
+ 44524 - 44032: 0x82F3,
+ 44525 - 44032: 0x82F4,
+ 44526 - 44032: 0x82F5,
+ 44527 - 44032: 0x82F6,
+ 44528 - 44032: 0x82F7,
+ 44529 - 44032: 0x82F8,
+ 44530 - 44032: 0x82F9,
+ 44531 - 44032: 0x82FA,
+ 44532 - 44032: 0x82FB,
+ 44533 - 44032: 0x82FC,
+ 44534 - 44032: 0x82FD,
+ 44535 - 44032: 0x82FE,
+ 44536 - 44032: 0xB1D7,
+ 44537 - 44032: 0xB1D8,
+ 44538 - 44032: 0x8341,
+ 44539 - 44032: 0x8342,
+ 44540 - 44032: 0xB1D9,
+ 44541 - 44032: 0x8343,
+ 44542 - 44032: 0x8344,
+ 44543 - 44032: 0xB1DA,
+ 44544 - 44032: 0xB1DB,
+ 44545 - 44032: 0xB1DC,
+ 44546 - 44032: 0x8345,
+ 44547 - 44032: 0x8346,
+ 44548 - 44032: 0x8347,
+ 44549 - 44032: 0x8348,
+ 44550 - 44032: 0x8349,
+ 44551 - 44032: 0x834A,
+ 44552 - 44032: 0xB1DD,
+ 44553 - 44032: 0xB1DE,
+ 44554 - 44032: 0x834B,
+ 44555 - 44032: 0xB1DF,
+ 44556 - 44032: 0x834C,
+ 44557 - 44032: 0xB1E0,
+ 44558 - 44032: 0x834D,
+ 44559 - 44032: 0x834E,
+ 44560 - 44032: 0x834F,
+ 44561 - 44032: 0x8350,
+ 44562 - 44032: 0x8351,
+ 44563 - 44032: 0x8352,
+ 44564 - 44032: 0xB1E1,
+ 44565 - 44032: 0x8353,
+ 44566 - 44032: 0x8354,
+ 44567 - 44032: 0x8355,
+ 44568 - 44032: 0x8356,
+ 44569 - 44032: 0x8357,
+ 44570 - 44032: 0x8358,
+ 44571 - 44032: 0x8359,
+ 44572 - 44032: 0x835A,
+ 44573 - 44032: 0x8361,
+ 44574 - 44032: 0x8362,
+ 44575 - 44032: 0x8363,
+ 44576 - 44032: 0x8364,
+ 44577 - 44032: 0x8365,
+ 44578 - 44032: 0x8366,
+ 44579 - 44032: 0x8367,
+ 44580 - 44032: 0x8368,
+ 44581 - 44032: 0x8369,
+ 44582 - 44032: 0x836A,
+ 44583 - 44032: 0x836B,
+ 44584 - 44032: 0x836C,
+ 44585 - 44032: 0x836D,
+ 44586 - 44032: 0x836E,
+ 44587 - 44032: 0x836F,
+ 44588 - 44032: 0x8370,
+ 44589 - 44032: 0x8371,
+ 44590 - 44032: 0x8372,
+ 44591 - 44032: 0x8373,
+ 44592 - 44032: 0xB1E2,
+ 44593 - 44032: 0xB1E3,
+ 44594 - 44032: 0x8374,
+ 44595 - 44032: 0x8375,
+ 44596 - 44032: 0xB1E4,
+ 44597 - 44032: 0x8376,
+ 44598 - 44032: 0x8377,
+ 44599 - 44032: 0xB1E5,
+ 44600 - 44032: 0xB1E6,
+ 44601 - 44032: 0x8378,
+ 44602 - 44032: 0xB1E7,
+ 44603 - 44032: 0x8379,
+ 44604 - 44032: 0x837A,
+ 44605 - 44032: 0x8381,
+ 44606 - 44032: 0x8382,
+ 44607 - 44032: 0x8383,
+ 44608 - 44032: 0xB1E8,
+ 44609 - 44032: 0xB1E9,
+ 44610 - 44032: 0x8384,
+ 44611 - 44032: 0xB1EA,
+ 44612 - 44032: 0x8385,
+ 44613 - 44032: 0xB1EB,
+ 44614 - 44032: 0xB1EC,
+ 44615 - 44032: 0x8386,
+ 44616 - 44032: 0x8387,
+ 44617 - 44032: 0x8388,
+ 44618 - 44032: 0xB1ED,
+ 44619 - 44032: 0x8389,
+ 44620 - 44032: 0xB1EE,
+ 44621 - 44032: 0xB1EF,
+ 44622 - 44032: 0xB1F0,
+ 44623 - 44032: 0x838A,
+ 44624 - 44032: 0xB1F1,
+ 44625 - 44032: 0x838B,
+ 44626 - 44032: 0x838C,
+ 44627 - 44032: 0x838D,
+ 44628 - 44032: 0xB1F2,
+ 44629 - 44032: 0x838E,
+ 44630 - 44032: 0xB1F3,
+ 44631 - 44032: 0x838F,
+ 44632 - 44032: 0x8390,
+ 44633 - 44032: 0x8391,
+ 44634 - 44032: 0x8392,
+ 44635 - 44032: 0x8393,
+ 44636 - 44032: 0xB1F4,
+ 44637 - 44032: 0xB1F5,
+ 44638 - 44032: 0x8394,
+ 44639 - 44032: 0xB1F6,
+ 44640 - 44032: 0xB1F7,
+ 44641 - 44032: 0xB1F8,
+ 44642 - 44032: 0x8395,
+ 44643 - 44032: 0x8396,
+ 44644 - 44032: 0x8397,
+ 44645 - 44032: 0xB1F9,
+ 44646 - 44032: 0x8398,
+ 44647 - 44032: 0x8399,
+ 44648 - 44032: 0xB1FA,
+ 44649 - 44032: 0xB1FB,
+ 44650 - 44032: 0x839A,
+ 44651 - 44032: 0x839B,
+ 44652 - 44032: 0xB1FC,
+ 44653 - 44032: 0x839C,
+ 44654 - 44032: 0x839D,
+ 44655 - 44032: 0x839E,
+ 44656 - 44032: 0xB1FD,
+ 44657 - 44032: 0x839F,
+ 44658 - 44032: 0x83A0,
+ 44659 - 44032: 0x83A1,
+ 44660 - 44032: 0x83A2,
+ 44661 - 44032: 0x83A3,
+ 44662 - 44032: 0x83A4,
+ 44663 - 44032: 0x83A5,
+ 44664 - 44032: 0xB1FE,
+ 44665 - 44032: 0xB2A1,
+ 44666 - 44032: 0x83A6,
+ 44667 - 44032: 0xB2A2,
+ 44668 - 44032: 0xB2A3,
+ 44669 - 44032: 0xB2A4,
+ 44670 - 44032: 0x83A7,
+ 44671 - 44032: 0x83A8,
+ 44672 - 44032: 0x83A9,
+ 44673 - 44032: 0x83AA,
+ 44674 - 44032: 0x83AB,
+ 44675 - 44032: 0x83AC,
+ 44676 - 44032: 0xB2A5,
+ 44677 - 44032: 0xB2A6,
+ 44678 - 44032: 0x83AD,
+ 44679 - 44032: 0x83AE,
+ 44680 - 44032: 0x83AF,
+ 44681 - 44032: 0x83B0,
+ 44682 - 44032: 0x83B1,
+ 44683 - 44032: 0x83B2,
+ 44684 - 44032: 0xB2A7,
+ 44685 - 44032: 0x83B3,
+ 44686 - 44032: 0x83B4,
+ 44687 - 44032: 0x83B5,
+ 44688 - 44032: 0x83B6,
+ 44689 - 44032: 0x83B7,
+ 44690 - 44032: 0x83B8,
+ 44691 - 44032: 0x83B9,
+ 44692 - 44032: 0x83BA,
+ 44693 - 44032: 0x83BB,
+ 44694 - 44032: 0x83BC,
+ 44695 - 44032: 0x83BD,
+ 44696 - 44032: 0x83BE,
+ 44697 - 44032: 0x83BF,
+ 44698 - 44032: 0x83C0,
+ 44699 - 44032: 0x83C1,
+ 44700 - 44032: 0x83C2,
+ 44701 - 44032: 0x83C3,
+ 44702 - 44032: 0x83C4,
+ 44703 - 44032: 0x83C5,
+ 44704 - 44032: 0x83C6,
+ 44705 - 44032: 0x83C7,
+ 44706 - 44032: 0x83C8,
+ 44707 - 44032: 0x83C9,
+ 44708 - 44032: 0x83CA,
+ 44709 - 44032: 0x83CB,
+ 44710 - 44032: 0x83CC,
+ 44711 - 44032: 0x83CD,
+ 44712 - 44032: 0x83CE,
+ 44713 - 44032: 0x83CF,
+ 44714 - 44032: 0x83D0,
+ 44715 - 44032: 0x83D1,
+ 44716 - 44032: 0x83D2,
+ 44717 - 44032: 0x83D3,
+ 44718 - 44032: 0x83D4,
+ 44719 - 44032: 0x83D5,
+ 44720 - 44032: 0x83D6,
+ 44721 - 44032: 0x83D7,
+ 44722 - 44032: 0x83D8,
+ 44723 - 44032: 0x83D9,
+ 44724 - 44032: 0x83DA,
+ 44725 - 44032: 0x83DB,
+ 44726 - 44032: 0x83DC,
+ 44727 - 44032: 0x83DD,
+ 44728 - 44032: 0x83DE,
+ 44729 - 44032: 0x83DF,
+ 44730 - 44032: 0x83E0,
+ 44731 - 44032: 0x83E1,
+ 44732 - 44032: 0xB2A8,
+ 44733 - 44032: 0xB2A9,
+ 44734 - 44032: 0xB2AA,
+ 44735 - 44032: 0x83E2,
+ 44736 - 44032: 0xB2AB,
+ 44737 - 44032: 0x83E3,
+ 44738 - 44032: 0x83E4,
+ 44739 - 44032: 0x83E5,
+ 44740 - 44032: 0xB2AC,
+ 44741 - 44032: 0x83E6,
+ 44742 - 44032: 0x83E7,
+ 44743 - 44032: 0x83E8,
+ 44744 - 44032: 0x83E9,
+ 44745 - 44032: 0x83EA,
+ 44746 - 44032: 0x83EB,
+ 44747 - 44032: 0x83EC,
+ 44748 - 44032: 0xB2AD,
+ 44749 - 44032: 0xB2AE,
+ 44750 - 44032: 0x83ED,
+ 44751 - 44032: 0xB2AF,
+ 44752 - 44032: 0xB2B0,
+ 44753 - 44032: 0xB2B1,
+ 44754 - 44032: 0x83EE,
+ 44755 - 44032: 0x83EF,
+ 44756 - 44032: 0x83F0,
+ 44757 - 44032: 0x83F1,
+ 44758 - 44032: 0x83F2,
+ 44759 - 44032: 0x83F3,
+ 44760 - 44032: 0xB2B2,
+ 44761 - 44032: 0xB2B3,
+ 44762 - 44032: 0x83F4,
+ 44763 - 44032: 0x83F5,
+ 44764 - 44032: 0xB2B4,
+ 44765 - 44032: 0x83F6,
+ 44766 - 44032: 0x83F7,
+ 44767 - 44032: 0x83F8,
+ 44768 - 44032: 0x83F9,
+ 44769 - 44032: 0x83FA,
+ 44770 - 44032: 0x83FB,
+ 44771 - 44032: 0x83FC,
+ 44772 - 44032: 0x83FD,
+ 44773 - 44032: 0x83FE,
+ 44774 - 44032: 0x8441,
+ 44775 - 44032: 0x8442,
+ 44776 - 44032: 0xB2B5,
+ 44777 - 44032: 0x8443,
+ 44778 - 44032: 0x8444,
+ 44779 - 44032: 0xB2B6,
+ 44780 - 44032: 0x8445,
+ 44781 - 44032: 0xB2B7,
+ 44782 - 44032: 0x8446,
+ 44783 - 44032: 0x8447,
+ 44784 - 44032: 0x8448,
+ 44785 - 44032: 0x8449,
+ 44786 - 44032: 0x844A,
+ 44787 - 44032: 0x844B,
+ 44788 - 44032: 0xB2B8,
+ 44789 - 44032: 0x844C,
+ 44790 - 44032: 0x844D,
+ 44791 - 44032: 0x844E,
+ 44792 - 44032: 0xB2B9,
+ 44793 - 44032: 0x844F,
+ 44794 - 44032: 0x8450,
+ 44795 - 44032: 0x8451,
+ 44796 - 44032: 0xB2BA,
+ 44797 - 44032: 0x8452,
+ 44798 - 44032: 0x8453,
+ 44799 - 44032: 0x8454,
+ 44800 - 44032: 0x8455,
+ 44801 - 44032: 0x8456,
+ 44802 - 44032: 0x8457,
+ 44803 - 44032: 0x8458,
+ 44804 - 44032: 0x8459,
+ 44805 - 44032: 0x845A,
+ 44806 - 44032: 0x8461,
+ 44807 - 44032: 0xB2BB,
+ 44808 - 44032: 0xB2BC,
+ 44809 - 44032: 0x8462,
+ 44810 - 44032: 0x8463,
+ 44811 - 44032: 0x8464,
+ 44812 - 44032: 0x8465,
+ 44813 - 44032: 0xB2BD,
+ 44814 - 44032: 0x8466,
+ 44815 - 44032: 0x8467,
+ 44816 - 44032: 0xB2BE,
+ 44817 - 44032: 0x8468,
+ 44818 - 44032: 0x8469,
+ 44819 - 44032: 0x846A,
+ 44820 - 44032: 0x846B,
+ 44821 - 44032: 0x846C,
+ 44822 - 44032: 0x846D,
+ 44823 - 44032: 0x846E,
+ 44824 - 44032: 0x846F,
+ 44825 - 44032: 0x8470,
+ 44826 - 44032: 0x8471,
+ 44827 - 44032: 0x8472,
+ 44828 - 44032: 0x8473,
+ 44829 - 44032: 0x8474,
+ 44830 - 44032: 0x8475,
+ 44831 - 44032: 0x8476,
+ 44832 - 44032: 0x8477,
+ 44833 - 44032: 0x8478,
+ 44834 - 44032: 0x8479,
+ 44835 - 44032: 0x847A,
+ 44836 - 44032: 0x8481,
+ 44837 - 44032: 0x8482,
+ 44838 - 44032: 0x8483,
+ 44839 - 44032: 0x8484,
+ 44840 - 44032: 0x8485,
+ 44841 - 44032: 0x8486,
+ 44842 - 44032: 0x8487,
+ 44843 - 44032: 0x8488,
+ 44844 - 44032: 0xB2BF,
+ 44845 - 44032: 0xB2C0,
+ 44846 - 44032: 0x8489,
+ 44847 - 44032: 0x848A,
+ 44848 - 44032: 0xB2C1,
+ 44849 - 44032: 0x848B,
+ 44850 - 44032: 0xB2C2,
+ 44851 - 44032: 0x848C,
+ 44852 - 44032: 0xB2C3,
+ 44853 - 44032: 0x848D,
+ 44854 - 44032: 0x848E,
+ 44855 - 44032: 0x848F,
+ 44856 - 44032: 0x8490,
+ 44857 - 44032: 0x8491,
+ 44858 - 44032: 0x8492,
+ 44859 - 44032: 0x8493,
+ 44860 - 44032: 0xB2C4,
+ 44861 - 44032: 0xB2C5,
+ 44862 - 44032: 0x8494,
+ 44863 - 44032: 0xB2C6,
+ 44864 - 44032: 0x8495,
+ 44865 - 44032: 0xB2C7,
+ 44866 - 44032: 0xB2C8,
+ 44867 - 44032: 0xB2C9,
+ 44868 - 44032: 0x8496,
+ 44869 - 44032: 0x8497,
+ 44870 - 44032: 0x8498,
+ 44871 - 44032: 0x8499,
+ 44872 - 44032: 0xB2CA,
+ 44873 - 44032: 0xB2CB,
+ 44874 - 44032: 0x849A,
+ 44875 - 44032: 0x849B,
+ 44876 - 44032: 0x849C,
+ 44877 - 44032: 0x849D,
+ 44878 - 44032: 0x849E,
+ 44879 - 44032: 0x849F,
+ 44880 - 44032: 0xB2CC,
+ 44881 - 44032: 0x84A0,
+ 44882 - 44032: 0x84A1,
+ 44883 - 44032: 0x84A2,
+ 44884 - 44032: 0x84A3,
+ 44885 - 44032: 0x84A4,
+ 44886 - 44032: 0x84A5,
+ 44887 - 44032: 0x84A6,
+ 44888 - 44032: 0x84A7,
+ 44889 - 44032: 0x84A8,
+ 44890 - 44032: 0x84A9,
+ 44891 - 44032: 0x84AA,
+ 44892 - 44032: 0xB2CD,
+ 44893 - 44032: 0xB2CE,
+ 44894 - 44032: 0x84AB,
+ 44895 - 44032: 0x84AC,
+ 44896 - 44032: 0x84AD,
+ 44897 - 44032: 0x84AE,
+ 44898 - 44032: 0x84AF,
+ 44899 - 44032: 0x84B0,
+ 44900 - 44032: 0xB2CF,
+ 44901 - 44032: 0xB2D0,
+ 44902 - 44032: 0x84B1,
+ 44903 - 44032: 0x84B2,
+ 44904 - 44032: 0x84B3,
+ 44905 - 44032: 0x84B4,
+ 44906 - 44032: 0x84B5,
+ 44907 - 44032: 0x84B6,
+ 44908 - 44032: 0x84B7,
+ 44909 - 44032: 0x84B8,
+ 44910 - 44032: 0x84B9,
+ 44911 - 44032: 0x84BA,
+ 44912 - 44032: 0x84BB,
+ 44913 - 44032: 0x84BC,
+ 44914 - 44032: 0x84BD,
+ 44915 - 44032: 0x84BE,
+ 44916 - 44032: 0x84BF,
+ 44917 - 44032: 0x84C0,
+ 44918 - 44032: 0x84C1,
+ 44919 - 44032: 0x84C2,
+ 44920 - 44032: 0x84C3,
+ 44921 - 44032: 0xB2D1,
+ 44922 - 44032: 0x84C4,
+ 44923 - 44032: 0x84C5,
+ 44924 - 44032: 0x84C6,
+ 44925 - 44032: 0x84C7,
+ 44926 - 44032: 0x84C8,
+ 44927 - 44032: 0x84C9,
+ 44928 - 44032: 0xB2D2,
+ 44929 - 44032: 0x84CA,
+ 44930 - 44032: 0x84CB,
+ 44931 - 44032: 0x84CC,
+ 44932 - 44032: 0xB2D3,
+ 44933 - 44032: 0x84CD,
+ 44934 - 44032: 0x84CE,
+ 44935 - 44032: 0x84CF,
+ 44936 - 44032: 0xB2D4,
+ 44937 - 44032: 0x84D0,
+ 44938 - 44032: 0x84D1,
+ 44939 - 44032: 0x84D2,
+ 44940 - 44032: 0x84D3,
+ 44941 - 44032: 0x84D4,
+ 44942 - 44032: 0x84D5,
+ 44943 - 44032: 0x84D6,
+ 44944 - 44032: 0xB2D5,
+ 44945 - 44032: 0xB2D6,
+ 44946 - 44032: 0x84D7,
+ 44947 - 44032: 0x84D8,
+ 44948 - 44032: 0x84D9,
+ 44949 - 44032: 0xB2D7,
+ 44950 - 44032: 0x84DA,
+ 44951 - 44032: 0x84DB,
+ 44952 - 44032: 0x84DC,
+ 44953 - 44032: 0x84DD,
+ 44954 - 44032: 0x84DE,
+ 44955 - 44032: 0x84DF,
+ 44956 - 44032: 0xB2D8,
+ 44957 - 44032: 0x84E0,
+ 44958 - 44032: 0x84E1,
+ 44959 - 44032: 0x84E2,
+ 44960 - 44032: 0x84E3,
+ 44961 - 44032: 0x84E4,
+ 44962 - 44032: 0x84E5,
+ 44963 - 44032: 0x84E6,
+ 44964 - 44032: 0x84E7,
+ 44965 - 44032: 0x84E8,
+ 44966 - 44032: 0x84E9,
+ 44967 - 44032: 0x84EA,
+ 44968 - 44032: 0x84EB,
+ 44969 - 44032: 0x84EC,
+ 44970 - 44032: 0x84ED,
+ 44971 - 44032: 0x84EE,
+ 44972 - 44032: 0x84EF,
+ 44973 - 44032: 0x84F0,
+ 44974 - 44032: 0x84F1,
+ 44975 - 44032: 0x84F2,
+ 44976 - 44032: 0x84F3,
+ 44977 - 44032: 0x84F4,
+ 44978 - 44032: 0x84F5,
+ 44979 - 44032: 0x84F6,
+ 44980 - 44032: 0x84F7,
+ 44981 - 44032: 0x84F8,
+ 44982 - 44032: 0x84F9,
+ 44983 - 44032: 0x84FA,
+ 44984 - 44032: 0xB2D9,
+ 44985 - 44032: 0xB2DA,
+ 44986 - 44032: 0x84FB,
+ 44987 - 44032: 0x84FC,
+ 44988 - 44032: 0xB2DB,
+ 44989 - 44032: 0x84FD,
+ 44990 - 44032: 0x84FE,
+ 44991 - 44032: 0x8541,
+ 44992 - 44032: 0xB2DC,
+ 44993 - 44032: 0x8542,
+ 44994 - 44032: 0x8543,
+ 44995 - 44032: 0x8544,
+ 44996 - 44032: 0x8545,
+ 44997 - 44032: 0x8546,
+ 44998 - 44032: 0x8547,
+ 44999 - 44032: 0xB2DD,
+ 45000 - 44032: 0xB2DE,
+ 45001 - 44032: 0xB2DF,
+ 45002 - 44032: 0x8548,
+ 45003 - 44032: 0xB2E0,
+ 45004 - 44032: 0x8549,
+ 45005 - 44032: 0xB2E1,
+ 45006 - 44032: 0xB2E2,
+ 45007 - 44032: 0x854A,
+ 45008 - 44032: 0x854B,
+ 45009 - 44032: 0x854C,
+ 45010 - 44032: 0x854D,
+ 45011 - 44032: 0x854E,
+ 45012 - 44032: 0xB2E3,
+ 45013 - 44032: 0x854F,
+ 45014 - 44032: 0x8550,
+ 45015 - 44032: 0x8551,
+ 45016 - 44032: 0x8552,
+ 45017 - 44032: 0x8553,
+ 45018 - 44032: 0x8554,
+ 45019 - 44032: 0x8555,
+ 45020 - 44032: 0xB2E4,
+ 45021 - 44032: 0x8556,
+ 45022 - 44032: 0x8557,
+ 45023 - 44032: 0x8558,
+ 45024 - 44032: 0x8559,
+ 45025 - 44032: 0x855A,
+ 45026 - 44032: 0x8561,
+ 45027 - 44032: 0x8562,
+ 45028 - 44032: 0x8563,
+ 45029 - 44032: 0x8564,
+ 45030 - 44032: 0x8565,
+ 45031 - 44032: 0x8566,
+ 45032 - 44032: 0xB2E5,
+ 45033 - 44032: 0xB2E6,
+ 45034 - 44032: 0x8567,
+ 45035 - 44032: 0x8568,
+ 45036 - 44032: 0x8569,
+ 45037 - 44032: 0x856A,
+ 45038 - 44032: 0x856B,
+ 45039 - 44032: 0x856C,
+ 45040 - 44032: 0xB2E7,
+ 45041 - 44032: 0xB2E8,
+ 45042 - 44032: 0x856D,
+ 45043 - 44032: 0x856E,
+ 45044 - 44032: 0xB2E9,
+ 45045 - 44032: 0x856F,
+ 45046 - 44032: 0x8570,
+ 45047 - 44032: 0x8571,
+ 45048 - 44032: 0xB2EA,
+ 45049 - 44032: 0x8572,
+ 45050 - 44032: 0x8573,
+ 45051 - 44032: 0x8574,
+ 45052 - 44032: 0x8575,
+ 45053 - 44032: 0x8576,
+ 45054 - 44032: 0x8577,
+ 45055 - 44032: 0x8578,
+ 45056 - 44032: 0xB2EB,
+ 45057 - 44032: 0xB2EC,
+ 45058 - 44032: 0x8579,
+ 45059 - 44032: 0x857A,
+ 45060 - 44032: 0xB2ED,
+ 45061 - 44032: 0x8581,
+ 45062 - 44032: 0x8582,
+ 45063 - 44032: 0x8583,
+ 45064 - 44032: 0x8584,
+ 45065 - 44032: 0x8585,
+ 45066 - 44032: 0x8586,
+ 45067 - 44032: 0x8587,
+ 45068 - 44032: 0xB2EE,
+ 45069 - 44032: 0x8588,
+ 45070 - 44032: 0x8589,
+ 45071 - 44032: 0x858A,
+ 45072 - 44032: 0xB2EF,
+ 45073 - 44032: 0x858B,
+ 45074 - 44032: 0x858C,
+ 45075 - 44032: 0x858D,
+ 45076 - 44032: 0xB2F0,
+ 45077 - 44032: 0x858E,
+ 45078 - 44032: 0x858F,
+ 45079 - 44032: 0x8590,
+ 45080 - 44032: 0x8591,
+ 45081 - 44032: 0x8592,
+ 45082 - 44032: 0x8593,
+ 45083 - 44032: 0x8594,
+ 45084 - 44032: 0xB2F1,
+ 45085 - 44032: 0xB2F2,
+ 45086 - 44032: 0x8595,
+ 45087 - 44032: 0x8596,
+ 45088 - 44032: 0x8597,
+ 45089 - 44032: 0x8598,
+ 45090 - 44032: 0x8599,
+ 45091 - 44032: 0x859A,
+ 45092 - 44032: 0x859B,
+ 45093 - 44032: 0x859C,
+ 45094 - 44032: 0x859D,
+ 45095 - 44032: 0x859E,
+ 45096 - 44032: 0xB2F3,
+ 45097 - 44032: 0x859F,
+ 45098 - 44032: 0x85A0,
+ 45099 - 44032: 0x85A1,
+ 45100 - 44032: 0x85A2,
+ 45101 - 44032: 0x85A3,
+ 45102 - 44032: 0x85A4,
+ 45103 - 44032: 0x85A5,
+ 45104 - 44032: 0x85A6,
+ 45105 - 44032: 0x85A7,
+ 45106 - 44032: 0x85A8,
+ 45107 - 44032: 0x85A9,
+ 45108 - 44032: 0x85AA,
+ 45109 - 44032: 0x85AB,
+ 45110 - 44032: 0x85AC,
+ 45111 - 44032: 0x85AD,
+ 45112 - 44032: 0x85AE,
+ 45113 - 44032: 0x85AF,
+ 45114 - 44032: 0x85B0,
+ 45115 - 44032: 0x85B1,
+ 45116 - 44032: 0x85B2,
+ 45117 - 44032: 0x85B3,
+ 45118 - 44032: 0x85B4,
+ 45119 - 44032: 0x85B5,
+ 45120 - 44032: 0x85B6,
+ 45121 - 44032: 0x85B7,
+ 45122 - 44032: 0x85B8,
+ 45123 - 44032: 0x85B9,
+ 45124 - 44032: 0xB2F4,
+ 45125 - 44032: 0xB2F5,
+ 45126 - 44032: 0x85BA,
+ 45127 - 44032: 0x85BB,
+ 45128 - 44032: 0xB2F6,
+ 45129 - 44032: 0x85BC,
+ 45130 - 44032: 0xB2F7,
+ 45131 - 44032: 0x85BD,
+ 45132 - 44032: 0xB2F8,
+ 45133 - 44032: 0x85BE,
+ 45134 - 44032: 0xB2F9,
+ 45135 - 44032: 0x85BF,
+ 45136 - 44032: 0x85C0,
+ 45137 - 44032: 0x85C1,
+ 45138 - 44032: 0x85C2,
+ 45139 - 44032: 0xB2FA,
+ 45140 - 44032: 0xB2FB,
+ 45141 - 44032: 0xB2FC,
+ 45142 - 44032: 0x85C3,
+ 45143 - 44032: 0xB2FD,
+ 45144 - 44032: 0x85C4,
+ 45145 - 44032: 0xB2FE,
+ 45146 - 44032: 0x85C5,
+ 45147 - 44032: 0x85C6,
+ 45148 - 44032: 0x85C7,
+ 45149 - 44032: 0xB3A1,
+ 45150 - 44032: 0x85C8,
+ 45151 - 44032: 0x85C9,
+ 45152 - 44032: 0x85CA,
+ 45153 - 44032: 0x85CB,
+ 45154 - 44032: 0x85CC,
+ 45155 - 44032: 0x85CD,
+ 45156 - 44032: 0x85CE,
+ 45157 - 44032: 0x85CF,
+ 45158 - 44032: 0x85D0,
+ 45159 - 44032: 0x85D1,
+ 45160 - 44032: 0x85D2,
+ 45161 - 44032: 0x85D3,
+ 45162 - 44032: 0x85D4,
+ 45163 - 44032: 0x85D5,
+ 45164 - 44032: 0x85D6,
+ 45165 - 44032: 0x85D7,
+ 45166 - 44032: 0x85D8,
+ 45167 - 44032: 0x85D9,
+ 45168 - 44032: 0x85DA,
+ 45169 - 44032: 0x85DB,
+ 45170 - 44032: 0x85DC,
+ 45171 - 44032: 0x85DD,
+ 45172 - 44032: 0x85DE,
+ 45173 - 44032: 0x85DF,
+ 45174 - 44032: 0x85E0,
+ 45175 - 44032: 0x85E1,
+ 45176 - 44032: 0x85E2,
+ 45177 - 44032: 0x85E3,
+ 45178 - 44032: 0x85E4,
+ 45179 - 44032: 0x85E5,
+ 45180 - 44032: 0xB3A2,
+ 45181 - 44032: 0xB3A3,
+ 45182 - 44032: 0x85E6,
+ 45183 - 44032: 0x85E7,
+ 45184 - 44032: 0xB3A4,
+ 45185 - 44032: 0x85E8,
+ 45186 - 44032: 0x85E9,
+ 45187 - 44032: 0x85EA,
+ 45188 - 44032: 0xB3A5,
+ 45189 - 44032: 0x85EB,
+ 45190 - 44032: 0x85EC,
+ 45191 - 44032: 0x85ED,
+ 45192 - 44032: 0x85EE,
+ 45193 - 44032: 0x85EF,
+ 45194 - 44032: 0x85F0,
+ 45195 - 44032: 0x85F1,
+ 45196 - 44032: 0xB3A6,
+ 45197 - 44032: 0xB3A7,
+ 45198 - 44032: 0x85F2,
+ 45199 - 44032: 0xB3A8,
+ 45200 - 44032: 0x85F3,
+ 45201 - 44032: 0xB3A9,
+ 45202 - 44032: 0x85F4,
+ 45203 - 44032: 0x85F5,
+ 45204 - 44032: 0x85F6,
+ 45205 - 44032: 0x85F7,
+ 45206 - 44032: 0x85F8,
+ 45207 - 44032: 0x85F9,
+ 45208 - 44032: 0xB3AA,
+ 45209 - 44032: 0xB3AB,
+ 45210 - 44032: 0xB3AC,
+ 45211 - 44032: 0x85FA,
+ 45212 - 44032: 0xB3AD,
+ 45213 - 44032: 0x85FB,
+ 45214 - 44032: 0x85FC,
+ 45215 - 44032: 0xB3AE,
+ 45216 - 44032: 0xB3AF,
+ 45217 - 44032: 0xB3B0,
+ 45218 - 44032: 0xB3B1,
+ 45219 - 44032: 0x85FD,
+ 45220 - 44032: 0x85FE,
+ 45221 - 44032: 0x8641,
+ 45222 - 44032: 0x8642,
+ 45223 - 44032: 0x8643,
+ 45224 - 44032: 0xB3B2,
+ 45225 - 44032: 0xB3B3,
+ 45226 - 44032: 0x8644,
+ 45227 - 44032: 0xB3B4,
+ 45228 - 44032: 0xB3B5,
+ 45229 - 44032: 0xB3B6,
+ 45230 - 44032: 0xB3B7,
+ 45231 - 44032: 0xB3B8,
+ 45232 - 44032: 0x8645,
+ 45233 - 44032: 0xB3B9,
+ 45234 - 44032: 0x8646,
+ 45235 - 44032: 0xB3BA,
+ 45236 - 44032: 0xB3BB,
+ 45237 - 44032: 0xB3BC,
+ 45238 - 44032: 0x8647,
+ 45239 - 44032: 0x8648,
+ 45240 - 44032: 0xB3BD,
+ 45241 - 44032: 0x8649,
+ 45242 - 44032: 0x864A,
+ 45243 - 44032: 0x864B,
+ 45244 - 44032: 0xB3BE,
+ 45245 - 44032: 0x864C,
+ 45246 - 44032: 0x864D,
+ 45247 - 44032: 0x864E,
+ 45248 - 44032: 0x864F,
+ 45249 - 44032: 0x8650,
+ 45250 - 44032: 0x8651,
+ 45251 - 44032: 0x8652,
+ 45252 - 44032: 0xB3BF,
+ 45253 - 44032: 0xB3C0,
+ 45254 - 44032: 0x8653,
+ 45255 - 44032: 0xB3C1,
+ 45256 - 44032: 0xB3C2,
+ 45257 - 44032: 0xB3C3,
+ 45258 - 44032: 0x8654,
+ 45259 - 44032: 0x8655,
+ 45260 - 44032: 0x8656,
+ 45261 - 44032: 0x8657,
+ 45262 - 44032: 0x8658,
+ 45263 - 44032: 0x8659,
+ 45264 - 44032: 0xB3C4,
+ 45265 - 44032: 0xB3C5,
+ 45266 - 44032: 0x865A,
+ 45267 - 44032: 0x8661,
+ 45268 - 44032: 0xB3C6,
+ 45269 - 44032: 0x8662,
+ 45270 - 44032: 0x8663,
+ 45271 - 44032: 0x8664,
+ 45272 - 44032: 0xB3C7,
+ 45273 - 44032: 0x8665,
+ 45274 - 44032: 0x8666,
+ 45275 - 44032: 0x8667,
+ 45276 - 44032: 0x8668,
+ 45277 - 44032: 0x8669,
+ 45278 - 44032: 0x866A,
+ 45279 - 44032: 0x866B,
+ 45280 - 44032: 0xB3C8,
+ 45281 - 44032: 0x866C,
+ 45282 - 44032: 0x866D,
+ 45283 - 44032: 0x866E,
+ 45284 - 44032: 0x866F,
+ 45285 - 44032: 0xB3C9,
+ 45286 - 44032: 0x8670,
+ 45287 - 44032: 0x8671,
+ 45288 - 44032: 0x8672,
+ 45289 - 44032: 0x8673,
+ 45290 - 44032: 0x8674,
+ 45291 - 44032: 0x8675,
+ 45292 - 44032: 0x8676,
+ 45293 - 44032: 0x8677,
+ 45294 - 44032: 0x8678,
+ 45295 - 44032: 0x8679,
+ 45296 - 44032: 0x867A,
+ 45297 - 44032: 0x8681,
+ 45298 - 44032: 0x8682,
+ 45299 - 44032: 0x8683,
+ 45300 - 44032: 0x8684,
+ 45301 - 44032: 0x8685,
+ 45302 - 44032: 0x8686,
+ 45303 - 44032: 0x8687,
+ 45304 - 44032: 0x8688,
+ 45305 - 44032: 0x8689,
+ 45306 - 44032: 0x868A,
+ 45307 - 44032: 0x868B,
+ 45308 - 44032: 0x868C,
+ 45309 - 44032: 0x868D,
+ 45310 - 44032: 0x868E,
+ 45311 - 44032: 0x868F,
+ 45312 - 44032: 0x8690,
+ 45313 - 44032: 0x8691,
+ 45314 - 44032: 0x8692,
+ 45315 - 44032: 0x8693,
+ 45316 - 44032: 0x8694,
+ 45317 - 44032: 0x8695,
+ 45318 - 44032: 0x8696,
+ 45319 - 44032: 0x8697,
+ 45320 - 44032: 0xB3CA,
+ 45321 - 44032: 0xB3CB,
+ 45322 - 44032: 0x8698,
+ 45323 - 44032: 0xB3CC,
+ 45324 - 44032: 0xB3CD,
+ 45325 - 44032: 0x8699,
+ 45326 - 44032: 0x869A,
+ 45327 - 44032: 0x869B,
+ 45328 - 44032: 0xB3CE,
+ 45329 - 44032: 0x869C,
+ 45330 - 44032: 0xB3CF,
+ 45331 - 44032: 0xB3D0,
+ 45332 - 44032: 0x869D,
+ 45333 - 44032: 0x869E,
+ 45334 - 44032: 0x869F,
+ 45335 - 44032: 0x86A0,
+ 45336 - 44032: 0xB3D1,
+ 45337 - 44032: 0xB3D2,
+ 45338 - 44032: 0x86A1,
+ 45339 - 44032: 0xB3D3,
+ 45340 - 44032: 0xB3D4,
+ 45341 - 44032: 0xB3D5,
+ 45342 - 44032: 0x86A2,
+ 45343 - 44032: 0x86A3,
+ 45344 - 44032: 0x86A4,
+ 45345 - 44032: 0x86A5,
+ 45346 - 44032: 0x86A6,
+ 45347 - 44032: 0xB3D6,
+ 45348 - 44032: 0xB3D7,
+ 45349 - 44032: 0xB3D8,
+ 45350 - 44032: 0x86A7,
+ 45351 - 44032: 0x86A8,
+ 45352 - 44032: 0xB3D9,
+ 45353 - 44032: 0x86A9,
+ 45354 - 44032: 0x86AA,
+ 45355 - 44032: 0x86AB,
+ 45356 - 44032: 0xB3DA,
+ 45357 - 44032: 0x86AC,
+ 45358 - 44032: 0x86AD,
+ 45359 - 44032: 0x86AE,
+ 45360 - 44032: 0x86AF,
+ 45361 - 44032: 0x86B0,
+ 45362 - 44032: 0x86B1,
+ 45363 - 44032: 0x86B2,
+ 45364 - 44032: 0xB3DB,
+ 45365 - 44032: 0xB3DC,
+ 45366 - 44032: 0x86B3,
+ 45367 - 44032: 0xB3DD,
+ 45368 - 44032: 0xB3DE,
+ 45369 - 44032: 0xB3DF,
+ 45370 - 44032: 0x86B4,
+ 45371 - 44032: 0x86B5,
+ 45372 - 44032: 0x86B6,
+ 45373 - 44032: 0x86B7,
+ 45374 - 44032: 0x86B8,
+ 45375 - 44032: 0x86B9,
+ 45376 - 44032: 0xB3E0,
+ 45377 - 44032: 0xB3E1,
+ 45378 - 44032: 0x86BA,
+ 45379 - 44032: 0x86BB,
+ 45380 - 44032: 0xB3E2,
+ 45381 - 44032: 0x86BC,
+ 45382 - 44032: 0x86BD,
+ 45383 - 44032: 0x86BE,
+ 45384 - 44032: 0xB3E3,
+ 45385 - 44032: 0x86BF,
+ 45386 - 44032: 0x86C0,
+ 45387 - 44032: 0x86C1,
+ 45388 - 44032: 0x86C2,
+ 45389 - 44032: 0x86C3,
+ 45390 - 44032: 0x86C4,
+ 45391 - 44032: 0x86C5,
+ 45392 - 44032: 0xB3E4,
+ 45393 - 44032: 0xB3E5,
+ 45394 - 44032: 0x86C6,
+ 45395 - 44032: 0x86C7,
+ 45396 - 44032: 0xB3E6,
+ 45397 - 44032: 0xB3E7,
+ 45398 - 44032: 0x86C8,
+ 45399 - 44032: 0x86C9,
+ 45400 - 44032: 0xB3E8,
+ 45401 - 44032: 0x86CA,
+ 45402 - 44032: 0x86CB,
+ 45403 - 44032: 0x86CC,
+ 45404 - 44032: 0xB3E9,
+ 45405 - 44032: 0x86CD,
+ 45406 - 44032: 0x86CE,
+ 45407 - 44032: 0x86CF,
+ 45408 - 44032: 0xB3EA,
+ 45409 - 44032: 0x86D0,
+ 45410 - 44032: 0x86D1,
+ 45411 - 44032: 0x86D2,
+ 45412 - 44032: 0x86D3,
+ 45413 - 44032: 0x86D4,
+ 45414 - 44032: 0x86D5,
+ 45415 - 44032: 0x86D6,
+ 45416 - 44032: 0x86D7,
+ 45417 - 44032: 0x86D8,
+ 45418 - 44032: 0x86D9,
+ 45419 - 44032: 0x86DA,
+ 45420 - 44032: 0x86DB,
+ 45421 - 44032: 0x86DC,
+ 45422 - 44032: 0x86DD,
+ 45423 - 44032: 0x86DE,
+ 45424 - 44032: 0x86DF,
+ 45425 - 44032: 0x86E0,
+ 45426 - 44032: 0x86E1,
+ 45427 - 44032: 0x86E2,
+ 45428 - 44032: 0x86E3,
+ 45429 - 44032: 0x86E4,
+ 45430 - 44032: 0x86E5,
+ 45431 - 44032: 0x86E6,
+ 45432 - 44032: 0xB3EB,
+ 45433 - 44032: 0xB3EC,
+ 45434 - 44032: 0x86E7,
+ 45435 - 44032: 0x86E8,
+ 45436 - 44032: 0xB3ED,
+ 45437 - 44032: 0x86E9,
+ 45438 - 44032: 0x86EA,
+ 45439 - 44032: 0x86EB,
+ 45440 - 44032: 0xB3EE,
+ 45441 - 44032: 0x86EC,
+ 45442 - 44032: 0xB3EF,
+ 45443 - 44032: 0x86ED,
+ 45444 - 44032: 0x86EE,
+ 45445 - 44032: 0x86EF,
+ 45446 - 44032: 0x86F0,
+ 45447 - 44032: 0x86F1,
+ 45448 - 44032: 0xB3F0,
+ 45449 - 44032: 0xB3F1,
+ 45450 - 44032: 0x86F2,
+ 45451 - 44032: 0xB3F2,
+ 45452 - 44032: 0x86F3,
+ 45453 - 44032: 0xB3F3,
+ 45454 - 44032: 0x86F4,
+ 45455 - 44032: 0x86F5,
+ 45456 - 44032: 0x86F6,
+ 45457 - 44032: 0x86F7,
+ 45458 - 44032: 0xB3F4,
+ 45459 - 44032: 0xB3F5,
+ 45460 - 44032: 0xB3F6,
+ 45461 - 44032: 0x86F8,
+ 45462 - 44032: 0x86F9,
+ 45463 - 44032: 0x86FA,
+ 45464 - 44032: 0xB3F7,
+ 45465 - 44032: 0x86FB,
+ 45466 - 44032: 0x86FC,
+ 45467 - 44032: 0x86FD,
+ 45468 - 44032: 0xB3F8,
+ 45469 - 44032: 0x86FE,
+ 45470 - 44032: 0x8741,
+ 45471 - 44032: 0x8742,
+ 45472 - 44032: 0x8743,
+ 45473 - 44032: 0x8744,
+ 45474 - 44032: 0x8745,
+ 45475 - 44032: 0x8746,
+ 45476 - 44032: 0x8747,
+ 45477 - 44032: 0x8748,
+ 45478 - 44032: 0x8749,
+ 45479 - 44032: 0x874A,
+ 45480 - 44032: 0xB3F9,
+ 45481 - 44032: 0x874B,
+ 45482 - 44032: 0x874C,
+ 45483 - 44032: 0x874D,
+ 45484 - 44032: 0x874E,
+ 45485 - 44032: 0x874F,
+ 45486 - 44032: 0x8750,
+ 45487 - 44032: 0x8751,
+ 45488 - 44032: 0x8752,
+ 45489 - 44032: 0x8753,
+ 45490 - 44032: 0x8754,
+ 45491 - 44032: 0x8755,
+ 45492 - 44032: 0x8756,
+ 45493 - 44032: 0x8757,
+ 45494 - 44032: 0x8758,
+ 45495 - 44032: 0x8759,
+ 45496 - 44032: 0x875A,
+ 45497 - 44032: 0x8761,
+ 45498 - 44032: 0x8762,
+ 45499 - 44032: 0x8763,
+ 45500 - 44032: 0x8764,
+ 45501 - 44032: 0x8765,
+ 45502 - 44032: 0x8766,
+ 45503 - 44032: 0x8767,
+ 45504 - 44032: 0x8768,
+ 45505 - 44032: 0x8769,
+ 45506 - 44032: 0x876A,
+ 45507 - 44032: 0x876B,
+ 45508 - 44032: 0x876C,
+ 45509 - 44032: 0x876D,
+ 45510 - 44032: 0x876E,
+ 45511 - 44032: 0x876F,
+ 45512 - 44032: 0x8770,
+ 45513 - 44032: 0x8771,
+ 45514 - 44032: 0x8772,
+ 45515 - 44032: 0x8773,
+ 45516 - 44032: 0xB3FA,
+ 45517 - 44032: 0x8774,
+ 45518 - 44032: 0x8775,
+ 45519 - 44032: 0x8776,
+ 45520 - 44032: 0xB3FB,
+ 45521 - 44032: 0x8777,
+ 45522 - 44032: 0x8778,
+ 45523 - 44032: 0x8779,
+ 45524 - 44032: 0xB3FC,
+ 45525 - 44032: 0x877A,
+ 45526 - 44032: 0x8781,
+ 45527 - 44032: 0x8782,
+ 45528 - 44032: 0x8783,
+ 45529 - 44032: 0x8784,
+ 45530 - 44032: 0x8785,
+ 45531 - 44032: 0x8786,
+ 45532 - 44032: 0xB3FD,
+ 45533 - 44032: 0xB3FE,
+ 45534 - 44032: 0x8787,
+ 45535 - 44032: 0xB4A1,
+ 45536 - 44032: 0x8788,
+ 45537 - 44032: 0x8789,
+ 45538 - 44032: 0x878A,
+ 45539 - 44032: 0x878B,
+ 45540 - 44032: 0x878C,
+ 45541 - 44032: 0x878D,
+ 45542 - 44032: 0x878E,
+ 45543 - 44032: 0x878F,
+ 45544 - 44032: 0xB4A2,
+ 45545 - 44032: 0xB4A3,
+ 45546 - 44032: 0x8790,
+ 45547 - 44032: 0x8791,
+ 45548 - 44032: 0xB4A4,
+ 45549 - 44032: 0x8792,
+ 45550 - 44032: 0x8793,
+ 45551 - 44032: 0x8794,
+ 45552 - 44032: 0xB4A5,
+ 45553 - 44032: 0x8795,
+ 45554 - 44032: 0x8796,
+ 45555 - 44032: 0x8797,
+ 45556 - 44032: 0x8798,
+ 45557 - 44032: 0x8799,
+ 45558 - 44032: 0x879A,
+ 45559 - 44032: 0x879B,
+ 45560 - 44032: 0x879C,
+ 45561 - 44032: 0xB4A6,
+ 45562 - 44032: 0x879D,
+ 45563 - 44032: 0xB4A7,
+ 45564 - 44032: 0x879E,
+ 45565 - 44032: 0xB4A8,
+ 45566 - 44032: 0x879F,
+ 45567 - 44032: 0x87A0,
+ 45568 - 44032: 0x87A1,
+ 45569 - 44032: 0x87A2,
+ 45570 - 44032: 0x87A3,
+ 45571 - 44032: 0x87A4,
+ 45572 - 44032: 0xB4A9,
+ 45573 - 44032: 0xB4AA,
+ 45574 - 44032: 0x87A5,
+ 45575 - 44032: 0x87A6,
+ 45576 - 44032: 0xB4AB,
+ 45577 - 44032: 0x87A7,
+ 45578 - 44032: 0x87A8,
+ 45579 - 44032: 0xB4AC,
+ 45580 - 44032: 0xB4AD,
+ 45581 - 44032: 0x87A9,
+ 45582 - 44032: 0x87AA,
+ 45583 - 44032: 0x87AB,
+ 45584 - 44032: 0x87AC,
+ 45585 - 44032: 0x87AD,
+ 45586 - 44032: 0x87AE,
+ 45587 - 44032: 0x87AF,
+ 45588 - 44032: 0xB4AE,
+ 45589 - 44032: 0xB4AF,
+ 45590 - 44032: 0x87B0,
+ 45591 - 44032: 0xB4B0,
+ 45592 - 44032: 0x87B1,
+ 45593 - 44032: 0xB4B1,
+ 45594 - 44032: 0x87B2,
+ 45595 - 44032: 0x87B3,
+ 45596 - 44032: 0x87B4,
+ 45597 - 44032: 0x87B5,
+ 45598 - 44032: 0x87B6,
+ 45599 - 44032: 0x87B7,
+ 45600 - 44032: 0xB4B2,
+ 45601 - 44032: 0x87B8,
+ 45602 - 44032: 0x87B9,
+ 45603 - 44032: 0x87BA,
+ 45604 - 44032: 0x87BB,
+ 45605 - 44032: 0x87BC,
+ 45606 - 44032: 0x87BD,
+ 45607 - 44032: 0x87BE,
+ 45608 - 44032: 0x87BF,
+ 45609 - 44032: 0x87C0,
+ 45610 - 44032: 0x87C1,
+ 45611 - 44032: 0x87C2,
+ 45612 - 44032: 0x87C3,
+ 45613 - 44032: 0x87C4,
+ 45614 - 44032: 0x87C5,
+ 45615 - 44032: 0x87C6,
+ 45616 - 44032: 0x87C7,
+ 45617 - 44032: 0x87C8,
+ 45618 - 44032: 0x87C9,
+ 45619 - 44032: 0x87CA,
+ 45620 - 44032: 0xB4B3,
+ 45621 - 44032: 0x87CB,
+ 45622 - 44032: 0x87CC,
+ 45623 - 44032: 0x87CD,
+ 45624 - 44032: 0x87CE,
+ 45625 - 44032: 0x87CF,
+ 45626 - 44032: 0x87D0,
+ 45627 - 44032: 0x87D1,
+ 45628 - 44032: 0xB4B4,
+ 45629 - 44032: 0x87D2,
+ 45630 - 44032: 0x87D3,
+ 45631 - 44032: 0x87D4,
+ 45632 - 44032: 0x87D5,
+ 45633 - 44032: 0x87D6,
+ 45634 - 44032: 0x87D7,
+ 45635 - 44032: 0x87D8,
+ 45636 - 44032: 0x87D9,
+ 45637 - 44032: 0x87DA,
+ 45638 - 44032: 0x87DB,
+ 45639 - 44032: 0x87DC,
+ 45640 - 44032: 0x87DD,
+ 45641 - 44032: 0x87DE,
+ 45642 - 44032: 0x87DF,
+ 45643 - 44032: 0x87E0,
+ 45644 - 44032: 0x87E1,
+ 45645 - 44032: 0x87E2,
+ 45646 - 44032: 0x87E3,
+ 45647 - 44032: 0x87E4,
+ 45648 - 44032: 0x87E5,
+ 45649 - 44032: 0x87E6,
+ 45650 - 44032: 0x87E7,
+ 45651 - 44032: 0x87E8,
+ 45652 - 44032: 0x87E9,
+ 45653 - 44032: 0x87EA,
+ 45654 - 44032: 0x87EB,
+ 45655 - 44032: 0x87EC,
+ 45656 - 44032: 0xB4B5,
+ 45657 - 44032: 0x87ED,
+ 45658 - 44032: 0x87EE,
+ 45659 - 44032: 0x87EF,
+ 45660 - 44032: 0xB4B6,
+ 45661 - 44032: 0x87F0,
+ 45662 - 44032: 0x87F1,
+ 45663 - 44032: 0x87F2,
+ 45664 - 44032: 0xB4B7,
+ 45665 - 44032: 0x87F3,
+ 45666 - 44032: 0x87F4,
+ 45667 - 44032: 0x87F5,
+ 45668 - 44032: 0x87F6,
+ 45669 - 44032: 0x87F7,
+ 45670 - 44032: 0x87F8,
+ 45671 - 44032: 0x87F9,
+ 45672 - 44032: 0xB4B8,
+ 45673 - 44032: 0xB4B9,
+ 45674 - 44032: 0x87FA,
+ 45675 - 44032: 0x87FB,
+ 45676 - 44032: 0x87FC,
+ 45677 - 44032: 0x87FD,
+ 45678 - 44032: 0x87FE,
+ 45679 - 44032: 0x8841,
+ 45680 - 44032: 0x8842,
+ 45681 - 44032: 0x8843,
+ 45682 - 44032: 0x8844,
+ 45683 - 44032: 0x8845,
+ 45684 - 44032: 0xB4BA,
+ 45685 - 44032: 0xB4BB,
+ 45686 - 44032: 0x8846,
+ 45687 - 44032: 0x8847,
+ 45688 - 44032: 0x8848,
+ 45689 - 44032: 0x8849,
+ 45690 - 44032: 0x884A,
+ 45691 - 44032: 0x884B,
+ 45692 - 44032: 0xB4BC,
+ 45693 - 44032: 0x884C,
+ 45694 - 44032: 0x884D,
+ 45695 - 44032: 0x884E,
+ 45696 - 44032: 0x884F,
+ 45697 - 44032: 0x8850,
+ 45698 - 44032: 0x8851,
+ 45699 - 44032: 0x8852,
+ 45700 - 44032: 0xB4BD,
+ 45701 - 44032: 0xB4BE,
+ 45702 - 44032: 0x8853,
+ 45703 - 44032: 0x8854,
+ 45704 - 44032: 0x8855,
+ 45705 - 44032: 0xB4BF,
+ 45706 - 44032: 0x8856,
+ 45707 - 44032: 0x8857,
+ 45708 - 44032: 0x8858,
+ 45709 - 44032: 0x8859,
+ 45710 - 44032: 0x885A,
+ 45711 - 44032: 0x8861,
+ 45712 - 44032: 0xB4C0,
+ 45713 - 44032: 0xB4C1,
+ 45714 - 44032: 0x8862,
+ 45715 - 44032: 0x8863,
+ 45716 - 44032: 0xB4C2,
+ 45717 - 44032: 0x8864,
+ 45718 - 44032: 0x8865,
+ 45719 - 44032: 0x8866,
+ 45720 - 44032: 0xB4C3,
+ 45721 - 44032: 0xB4C4,
+ 45722 - 44032: 0xB4C5,
+ 45723 - 44032: 0x8867,
+ 45724 - 44032: 0x8868,
+ 45725 - 44032: 0x8869,
+ 45726 - 44032: 0x886A,
+ 45727 - 44032: 0x886B,
+ 45728 - 44032: 0xB4C6,
+ 45729 - 44032: 0xB4C7,
+ 45730 - 44032: 0x886C,
+ 45731 - 44032: 0xB4C8,
+ 45732 - 44032: 0x886D,
+ 45733 - 44032: 0xB4C9,
+ 45734 - 44032: 0xB4CA,
+ 45735 - 44032: 0x886E,
+ 45736 - 44032: 0x886F,
+ 45737 - 44032: 0x8870,
+ 45738 - 44032: 0xB4CB,
+ 45739 - 44032: 0x8871,
+ 45740 - 44032: 0xB4CC,
+ 45741 - 44032: 0x8872,
+ 45742 - 44032: 0x8873,
+ 45743 - 44032: 0x8874,
+ 45744 - 44032: 0xB4CD,
+ 45745 - 44032: 0x8875,
+ 45746 - 44032: 0x8876,
+ 45747 - 44032: 0x8877,
+ 45748 - 44032: 0xB4CE,
+ 45749 - 44032: 0x8878,
+ 45750 - 44032: 0x8879,
+ 45751 - 44032: 0x887A,
+ 45752 - 44032: 0x8881,
+ 45753 - 44032: 0x8882,
+ 45754 - 44032: 0x8883,
+ 45755 - 44032: 0x8884,
+ 45756 - 44032: 0x8885,
+ 45757 - 44032: 0x8886,
+ 45758 - 44032: 0x8887,
+ 45759 - 44032: 0x8888,
+ 45760 - 44032: 0x8889,
+ 45761 - 44032: 0x888A,
+ 45762 - 44032: 0x888B,
+ 45763 - 44032: 0x888C,
+ 45764 - 44032: 0x888D,
+ 45765 - 44032: 0x888E,
+ 45766 - 44032: 0x888F,
+ 45767 - 44032: 0x8890,
+ 45768 - 44032: 0xB4CF,
+ 45769 - 44032: 0xB4D0,
+ 45770 - 44032: 0x8891,
+ 45771 - 44032: 0x8892,
+ 45772 - 44032: 0xB4D1,
+ 45773 - 44032: 0x8893,
+ 45774 - 44032: 0x8894,
+ 45775 - 44032: 0x8895,
+ 45776 - 44032: 0xB4D2,
+ 45777 - 44032: 0x8896,
+ 45778 - 44032: 0xB4D3,
+ 45779 - 44032: 0x8897,
+ 45780 - 44032: 0x8898,
+ 45781 - 44032: 0x8899,
+ 45782 - 44032: 0x889A,
+ 45783 - 44032: 0x889B,
+ 45784 - 44032: 0xB4D4,
+ 45785 - 44032: 0xB4D5,
+ 45786 - 44032: 0x889C,
+ 45787 - 44032: 0xB4D6,
+ 45788 - 44032: 0x889D,
+ 45789 - 44032: 0xB4D7,
+ 45790 - 44032: 0x889E,
+ 45791 - 44032: 0x889F,
+ 45792 - 44032: 0x88A0,
+ 45793 - 44032: 0x88A1,
+ 45794 - 44032: 0xB4D8,
+ 45795 - 44032: 0x88A2,
+ 45796 - 44032: 0xB4D9,
+ 45797 - 44032: 0xB4DA,
+ 45798 - 44032: 0xB4DB,
+ 45799 - 44032: 0x88A3,
+ 45800 - 44032: 0xB4DC,
+ 45801 - 44032: 0x88A4,
+ 45802 - 44032: 0x88A5,
+ 45803 - 44032: 0xB4DD,
+ 45804 - 44032: 0xB4DE,
+ 45805 - 44032: 0xB4DF,
+ 45806 - 44032: 0xB4E0,
+ 45807 - 44032: 0xB4E1,
+ 45808 - 44032: 0x88A6,
+ 45809 - 44032: 0x88A7,
+ 45810 - 44032: 0x88A8,
+ 45811 - 44032: 0xB4E2,
+ 45812 - 44032: 0xB4E3,
+ 45813 - 44032: 0xB4E4,
+ 45814 - 44032: 0x88A9,
+ 45815 - 44032: 0xB4E5,
+ 45816 - 44032: 0xB4E6,
+ 45817 - 44032: 0xB4E7,
+ 45818 - 44032: 0xB4E8,
+ 45819 - 44032: 0xB4E9,
+ 45820 - 44032: 0x88AA,
+ 45821 - 44032: 0x88AB,
+ 45822 - 44032: 0x88AC,
+ 45823 - 44032: 0xB4EA,
+ 45824 - 44032: 0xB4EB,
+ 45825 - 44032: 0xB4EC,
+ 45826 - 44032: 0x88AD,
+ 45827 - 44032: 0x88AE,
+ 45828 - 44032: 0xB4ED,
+ 45829 - 44032: 0x88AF,
+ 45830 - 44032: 0x88B0,
+ 45831 - 44032: 0x88B1,
+ 45832 - 44032: 0xB4EE,
+ 45833 - 44032: 0x88B2,
+ 45834 - 44032: 0x88B3,
+ 45835 - 44032: 0x88B4,
+ 45836 - 44032: 0x88B5,
+ 45837 - 44032: 0x88B6,
+ 45838 - 44032: 0x88B7,
+ 45839 - 44032: 0x88B8,
+ 45840 - 44032: 0xB4EF,
+ 45841 - 44032: 0xB4F0,
+ 45842 - 44032: 0x88B9,
+ 45843 - 44032: 0xB4F1,
+ 45844 - 44032: 0xB4F2,
+ 45845 - 44032: 0xB4F3,
+ 45846 - 44032: 0x88BA,
+ 45847 - 44032: 0x88BB,
+ 45848 - 44032: 0x88BC,
+ 45849 - 44032: 0x88BD,
+ 45850 - 44032: 0x88BE,
+ 45851 - 44032: 0x88BF,
+ 45852 - 44032: 0xB4F4,
+ 45853 - 44032: 0x88C0,
+ 45854 - 44032: 0x88C1,
+ 45855 - 44032: 0x88C2,
+ 45856 - 44032: 0x88C3,
+ 45857 - 44032: 0x88C4,
+ 45858 - 44032: 0x88C5,
+ 45859 - 44032: 0x88C6,
+ 45860 - 44032: 0x88C7,
+ 45861 - 44032: 0x88C8,
+ 45862 - 44032: 0x88C9,
+ 45863 - 44032: 0x88CA,
+ 45864 - 44032: 0x88CB,
+ 45865 - 44032: 0x88CC,
+ 45866 - 44032: 0x88CD,
+ 45867 - 44032: 0x88CE,
+ 45868 - 44032: 0x88CF,
+ 45869 - 44032: 0x88D0,
+ 45870 - 44032: 0x88D1,
+ 45871 - 44032: 0x88D2,
+ 45872 - 44032: 0x88D3,
+ 45873 - 44032: 0x88D4,
+ 45874 - 44032: 0x88D5,
+ 45875 - 44032: 0x88D6,
+ 45876 - 44032: 0x88D7,
+ 45877 - 44032: 0x88D8,
+ 45878 - 44032: 0x88D9,
+ 45879 - 44032: 0x88DA,
+ 45880 - 44032: 0x88DB,
+ 45881 - 44032: 0x88DC,
+ 45882 - 44032: 0x88DD,
+ 45883 - 44032: 0x88DE,
+ 45884 - 44032: 0x88DF,
+ 45885 - 44032: 0x88E0,
+ 45886 - 44032: 0x88E1,
+ 45887 - 44032: 0x88E2,
+ 45888 - 44032: 0x88E3,
+ 45889 - 44032: 0x88E4,
+ 45890 - 44032: 0x88E5,
+ 45891 - 44032: 0x88E6,
+ 45892 - 44032: 0x88E7,
+ 45893 - 44032: 0x88E8,
+ 45894 - 44032: 0x88E9,
+ 45895 - 44032: 0x88EA,
+ 45896 - 44032: 0x88EB,
+ 45897 - 44032: 0x88EC,
+ 45898 - 44032: 0x88ED,
+ 45899 - 44032: 0x88EE,
+ 45900 - 44032: 0x88EF,
+ 45901 - 44032: 0x88F0,
+ 45902 - 44032: 0x88F1,
+ 45903 - 44032: 0x88F2,
+ 45904 - 44032: 0x88F3,
+ 45905 - 44032: 0x88F4,
+ 45906 - 44032: 0x88F5,
+ 45907 - 44032: 0x88F6,
+ 45908 - 44032: 0xB4F5,
+ 45909 - 44032: 0xB4F6,
+ 45910 - 44032: 0xB4F7,
+ 45911 - 44032: 0x88F7,
+ 45912 - 44032: 0xB4F8,
+ 45913 - 44032: 0x88F8,
+ 45914 - 44032: 0x88F9,
+ 45915 - 44032: 0xB4F9,
+ 45916 - 44032: 0xB4FA,
+ 45917 - 44032: 0x88FA,
+ 45918 - 44032: 0xB4FB,
+ 45919 - 44032: 0xB4FC,
+ 45920 - 44032: 0x88FB,
+ 45921 - 44032: 0x88FC,
+ 45922 - 44032: 0x88FD,
+ 45923 - 44032: 0x88FE,
+ 45924 - 44032: 0xB4FD,
+ 45925 - 44032: 0xB4FE,
+ 45926 - 44032: 0x8941,
+ 45927 - 44032: 0xB5A1,
+ 45928 - 44032: 0x8942,
+ 45929 - 44032: 0xB5A2,
+ 45930 - 44032: 0x8943,
+ 45931 - 44032: 0xB5A3,
+ 45932 - 44032: 0x8944,
+ 45933 - 44032: 0x8945,
+ 45934 - 44032: 0xB5A4,
+ 45935 - 44032: 0x8946,
+ 45936 - 44032: 0xB5A5,
+ 45937 - 44032: 0xB5A6,
+ 45938 - 44032: 0x8947,
+ 45939 - 44032: 0x8948,
+ 45940 - 44032: 0xB5A7,
+ 45941 - 44032: 0x8949,
+ 45942 - 44032: 0x894A,
+ 45943 - 44032: 0x894B,
+ 45944 - 44032: 0xB5A8,
+ 45945 - 44032: 0x894C,
+ 45946 - 44032: 0x894D,
+ 45947 - 44032: 0x894E,
+ 45948 - 44032: 0x894F,
+ 45949 - 44032: 0x8950,
+ 45950 - 44032: 0x8951,
+ 45951 - 44032: 0x8952,
+ 45952 - 44032: 0xB5A9,
+ 45953 - 44032: 0xB5AA,
+ 45954 - 44032: 0x8953,
+ 45955 - 44032: 0xB5AB,
+ 45956 - 44032: 0xB5AC,
+ 45957 - 44032: 0xB5AD,
+ 45958 - 44032: 0x8954,
+ 45959 - 44032: 0x8955,
+ 45960 - 44032: 0x8956,
+ 45961 - 44032: 0x8957,
+ 45962 - 44032: 0x8958,
+ 45963 - 44032: 0x8959,
+ 45964 - 44032: 0xB5AE,
+ 45965 - 44032: 0x895A,
+ 45966 - 44032: 0x8961,
+ 45967 - 44032: 0x8962,
+ 45968 - 44032: 0xB5AF,
+ 45969 - 44032: 0x8963,
+ 45970 - 44032: 0x8964,
+ 45971 - 44032: 0x8965,
+ 45972 - 44032: 0xB5B0,
+ 45973 - 44032: 0x8966,
+ 45974 - 44032: 0x8967,
+ 45975 - 44032: 0x8968,
+ 45976 - 44032: 0x8969,
+ 45977 - 44032: 0x896A,
+ 45978 - 44032: 0x896B,
+ 45979 - 44032: 0x896C,
+ 45980 - 44032: 0x896D,
+ 45981 - 44032: 0x896E,
+ 45982 - 44032: 0x896F,
+ 45983 - 44032: 0x8970,
+ 45984 - 44032: 0xB5B1,
+ 45985 - 44032: 0xB5B2,
+ 45986 - 44032: 0x8971,
+ 45987 - 44032: 0x8972,
+ 45988 - 44032: 0x8973,
+ 45989 - 44032: 0x8974,
+ 45990 - 44032: 0x8975,
+ 45991 - 44032: 0x8976,
+ 45992 - 44032: 0xB5B3,
+ 45993 - 44032: 0x8977,
+ 45994 - 44032: 0x8978,
+ 45995 - 44032: 0x8979,
+ 45996 - 44032: 0xB5B4,
+ 45997 - 44032: 0x897A,
+ 45998 - 44032: 0x8981,
+ 45999 - 44032: 0x8982,
+ 46000 - 44032: 0x8983,
+ 46001 - 44032: 0x8984,
+ 46002 - 44032: 0x8985,
+ 46003 - 44032: 0x8986,
+ 46004 - 44032: 0x8987,
+ 46005 - 44032: 0x8988,
+ 46006 - 44032: 0x8989,
+ 46007 - 44032: 0x898A,
+ 46008 - 44032: 0x898B,
+ 46009 - 44032: 0x898C,
+ 46010 - 44032: 0x898D,
+ 46011 - 44032: 0x898E,
+ 46012 - 44032: 0x898F,
+ 46013 - 44032: 0x8990,
+ 46014 - 44032: 0x8991,
+ 46015 - 44032: 0x8992,
+ 46016 - 44032: 0x8993,
+ 46017 - 44032: 0x8994,
+ 46018 - 44032: 0x8995,
+ 46019 - 44032: 0x8996,
+ 46020 - 44032: 0xB5B5,
+ 46021 - 44032: 0xB5B6,
+ 46022 - 44032: 0x8997,
+ 46023 - 44032: 0x8998,
+ 46024 - 44032: 0xB5B7,
+ 46025 - 44032: 0x8999,
+ 46026 - 44032: 0x899A,
+ 46027 - 44032: 0xB5B8,
+ 46028 - 44032: 0xB5B9,
+ 46029 - 44032: 0x899B,
+ 46030 - 44032: 0xB5BA,
+ 46031 - 44032: 0x899C,
+ 46032 - 44032: 0xB5BB,
+ 46033 - 44032: 0x899D,
+ 46034 - 44032: 0x899E,
+ 46035 - 44032: 0x899F,
+ 46036 - 44032: 0xB5BC,
+ 46037 - 44032: 0xB5BD,
+ 46038 - 44032: 0x89A0,
+ 46039 - 44032: 0xB5BE,
+ 46040 - 44032: 0x89A1,
+ 46041 - 44032: 0xB5BF,
+ 46042 - 44032: 0x89A2,
+ 46043 - 44032: 0xB5C0,
+ 46044 - 44032: 0x89A3,
+ 46045 - 44032: 0xB5C1,
+ 46046 - 44032: 0x89A4,
+ 46047 - 44032: 0x89A5,
+ 46048 - 44032: 0xB5C2,
+ 46049 - 44032: 0x89A6,
+ 46050 - 44032: 0x89A7,
+ 46051 - 44032: 0x89A8,
+ 46052 - 44032: 0xB5C3,
+ 46053 - 44032: 0x89A9,
+ 46054 - 44032: 0x89AA,
+ 46055 - 44032: 0x89AB,
+ 46056 - 44032: 0xB5C4,
+ 46057 - 44032: 0x89AC,
+ 46058 - 44032: 0x89AD,
+ 46059 - 44032: 0x89AE,
+ 46060 - 44032: 0x89AF,
+ 46061 - 44032: 0x89B0,
+ 46062 - 44032: 0x89B1,
+ 46063 - 44032: 0x89B2,
+ 46064 - 44032: 0x89B3,
+ 46065 - 44032: 0x89B4,
+ 46066 - 44032: 0x89B5,
+ 46067 - 44032: 0x89B6,
+ 46068 - 44032: 0x89B7,
+ 46069 - 44032: 0x89B8,
+ 46070 - 44032: 0x89B9,
+ 46071 - 44032: 0x89BA,
+ 46072 - 44032: 0x89BB,
+ 46073 - 44032: 0x89BC,
+ 46074 - 44032: 0x89BD,
+ 46075 - 44032: 0x89BE,
+ 46076 - 44032: 0xB5C5,
+ 46077 - 44032: 0x89BF,
+ 46078 - 44032: 0x89C0,
+ 46079 - 44032: 0x89C1,
+ 46080 - 44032: 0x89C2,
+ 46081 - 44032: 0x89C3,
+ 46082 - 44032: 0x89C4,
+ 46083 - 44032: 0x89C5,
+ 46084 - 44032: 0x89C6,
+ 46085 - 44032: 0x89C7,
+ 46086 - 44032: 0x89C8,
+ 46087 - 44032: 0x89C9,
+ 46088 - 44032: 0x89CA,
+ 46089 - 44032: 0x89CB,
+ 46090 - 44032: 0x89CC,
+ 46091 - 44032: 0x89CD,
+ 46092 - 44032: 0x89CE,
+ 46093 - 44032: 0x89CF,
+ 46094 - 44032: 0x89D0,
+ 46095 - 44032: 0x89D1,
+ 46096 - 44032: 0xB5C6,
+ 46097 - 44032: 0x89D2,
+ 46098 - 44032: 0x89D3,
+ 46099 - 44032: 0x89D4,
+ 46100 - 44032: 0x89D5,
+ 46101 - 44032: 0x89D6,
+ 46102 - 44032: 0x89D7,
+ 46103 - 44032: 0x89D8,
+ 46104 - 44032: 0xB5C7,
+ 46105 - 44032: 0x89D9,
+ 46106 - 44032: 0x89DA,
+ 46107 - 44032: 0x89DB,
+ 46108 - 44032: 0xB5C8,
+ 46109 - 44032: 0x89DC,
+ 46110 - 44032: 0x89DD,
+ 46111 - 44032: 0x89DE,
+ 46112 - 44032: 0xB5C9,
+ 46113 - 44032: 0x89DF,
+ 46114 - 44032: 0x89E0,
+ 46115 - 44032: 0x89E1,
+ 46116 - 44032: 0x89E2,
+ 46117 - 44032: 0x89E3,
+ 46118 - 44032: 0x89E4,
+ 46119 - 44032: 0x89E5,
+ 46120 - 44032: 0xB5CA,
+ 46121 - 44032: 0xB5CB,
+ 46122 - 44032: 0x89E6,
+ 46123 - 44032: 0xB5CC,
+ 46124 - 44032: 0x89E7,
+ 46125 - 44032: 0x89E8,
+ 46126 - 44032: 0x89E9,
+ 46127 - 44032: 0x89EA,
+ 46128 - 44032: 0x89EB,
+ 46129 - 44032: 0x89EC,
+ 46130 - 44032: 0x89ED,
+ 46131 - 44032: 0x89EE,
+ 46132 - 44032: 0xB5CD,
+ 46133 - 44032: 0x89EF,
+ 46134 - 44032: 0x89F0,
+ 46135 - 44032: 0x89F1,
+ 46136 - 44032: 0x89F2,
+ 46137 - 44032: 0x89F3,
+ 46138 - 44032: 0x89F4,
+ 46139 - 44032: 0x89F5,
+ 46140 - 44032: 0x89F6,
+ 46141 - 44032: 0x89F7,
+ 46142 - 44032: 0x89F8,
+ 46143 - 44032: 0x89F9,
+ 46144 - 44032: 0x89FA,
+ 46145 - 44032: 0x89FB,
+ 46146 - 44032: 0x89FC,
+ 46147 - 44032: 0x89FD,
+ 46148 - 44032: 0x89FE,
+ 46149 - 44032: 0x8A41,
+ 46150 - 44032: 0x8A42,
+ 46151 - 44032: 0x8A43,
+ 46152 - 44032: 0x8A44,
+ 46153 - 44032: 0x8A45,
+ 46154 - 44032: 0x8A46,
+ 46155 - 44032: 0x8A47,
+ 46156 - 44032: 0x8A48,
+ 46157 - 44032: 0x8A49,
+ 46158 - 44032: 0x8A4A,
+ 46159 - 44032: 0x8A4B,
+ 46160 - 44032: 0xB5CE,
+ 46161 - 44032: 0xB5CF,
+ 46162 - 44032: 0x8A4C,
+ 46163 - 44032: 0x8A4D,
+ 46164 - 44032: 0xB5D0,
+ 46165 - 44032: 0x8A4E,
+ 46166 - 44032: 0x8A4F,
+ 46167 - 44032: 0x8A50,
+ 46168 - 44032: 0xB5D1,
+ 46169 - 44032: 0x8A51,
+ 46170 - 44032: 0x8A52,
+ 46171 - 44032: 0x8A53,
+ 46172 - 44032: 0x8A54,
+ 46173 - 44032: 0x8A55,
+ 46174 - 44032: 0x8A56,
+ 46175 - 44032: 0x8A57,
+ 46176 - 44032: 0xB5D2,
+ 46177 - 44032: 0xB5D3,
+ 46178 - 44032: 0x8A58,
+ 46179 - 44032: 0xB5D4,
+ 46180 - 44032: 0x8A59,
+ 46181 - 44032: 0xB5D5,
+ 46182 - 44032: 0x8A5A,
+ 46183 - 44032: 0x8A61,
+ 46184 - 44032: 0x8A62,
+ 46185 - 44032: 0x8A63,
+ 46186 - 44032: 0x8A64,
+ 46187 - 44032: 0x8A65,
+ 46188 - 44032: 0xB5D6,
+ 46189 - 44032: 0x8A66,
+ 46190 - 44032: 0x8A67,
+ 46191 - 44032: 0x8A68,
+ 46192 - 44032: 0x8A69,
+ 46193 - 44032: 0x8A6A,
+ 46194 - 44032: 0x8A6B,
+ 46195 - 44032: 0x8A6C,
+ 46196 - 44032: 0x8A6D,
+ 46197 - 44032: 0x8A6E,
+ 46198 - 44032: 0x8A6F,
+ 46199 - 44032: 0x8A70,
+ 46200 - 44032: 0x8A71,
+ 46201 - 44032: 0x8A72,
+ 46202 - 44032: 0x8A73,
+ 46203 - 44032: 0x8A74,
+ 46204 - 44032: 0x8A75,
+ 46205 - 44032: 0x8A76,
+ 46206 - 44032: 0x8A77,
+ 46207 - 44032: 0x8A78,
+ 46208 - 44032: 0xB5D7,
+ 46209 - 44032: 0x8A79,
+ 46210 - 44032: 0x8A7A,
+ 46211 - 44032: 0x8A81,
+ 46212 - 44032: 0x8A82,
+ 46213 - 44032: 0x8A83,
+ 46214 - 44032: 0x8A84,
+ 46215 - 44032: 0x8A85,
+ 46216 - 44032: 0xB5D8,
+ 46217 - 44032: 0x8A86,
+ 46218 - 44032: 0x8A87,
+ 46219 - 44032: 0x8A88,
+ 46220 - 44032: 0x8A89,
+ 46221 - 44032: 0x8A8A,
+ 46222 - 44032: 0x8A8B,
+ 46223 - 44032: 0x8A8C,
+ 46224 - 44032: 0x8A8D,
+ 46225 - 44032: 0x8A8E,
+ 46226 - 44032: 0x8A8F,
+ 46227 - 44032: 0x8A90,
+ 46228 - 44032: 0x8A91,
+ 46229 - 44032: 0x8A92,
+ 46230 - 44032: 0x8A93,
+ 46231 - 44032: 0x8A94,
+ 46232 - 44032: 0x8A95,
+ 46233 - 44032: 0x8A96,
+ 46234 - 44032: 0x8A97,
+ 46235 - 44032: 0x8A98,
+ 46236 - 44032: 0x8A99,
+ 46237 - 44032: 0xB5D9,
+ 46238 - 44032: 0x8A9A,
+ 46239 - 44032: 0x8A9B,
+ 46240 - 44032: 0x8A9C,
+ 46241 - 44032: 0x8A9D,
+ 46242 - 44032: 0x8A9E,
+ 46243 - 44032: 0x8A9F,
+ 46244 - 44032: 0xB5DA,
+ 46245 - 44032: 0x8AA0,
+ 46246 - 44032: 0x8AA1,
+ 46247 - 44032: 0x8AA2,
+ 46248 - 44032: 0xB5DB,
+ 46249 - 44032: 0x8AA3,
+ 46250 - 44032: 0x8AA4,
+ 46251 - 44032: 0x8AA5,
+ 46252 - 44032: 0xB5DC,
+ 46253 - 44032: 0x8AA6,
+ 46254 - 44032: 0x8AA7,
+ 46255 - 44032: 0x8AA8,
+ 46256 - 44032: 0x8AA9,
+ 46257 - 44032: 0x8AAA,
+ 46258 - 44032: 0x8AAB,
+ 46259 - 44032: 0x8AAC,
+ 46260 - 44032: 0x8AAD,
+ 46261 - 44032: 0xB5DD,
+ 46262 - 44032: 0x8AAE,
+ 46263 - 44032: 0xB5DE,
+ 46264 - 44032: 0x8AAF,
+ 46265 - 44032: 0xB5DF,
+ 46266 - 44032: 0x8AB0,
+ 46267 - 44032: 0x8AB1,
+ 46268 - 44032: 0x8AB2,
+ 46269 - 44032: 0x8AB3,
+ 46270 - 44032: 0x8AB4,
+ 46271 - 44032: 0x8AB5,
+ 46272 - 44032: 0xB5E0,
+ 46273 - 44032: 0x8AB6,
+ 46274 - 44032: 0x8AB7,
+ 46275 - 44032: 0x8AB8,
+ 46276 - 44032: 0xB5E1,
+ 46277 - 44032: 0x8AB9,
+ 46278 - 44032: 0x8ABA,
+ 46279 - 44032: 0x8ABB,
+ 46280 - 44032: 0xB5E2,
+ 46281 - 44032: 0x8ABC,
+ 46282 - 44032: 0x8ABD,
+ 46283 - 44032: 0x8ABE,
+ 46284 - 44032: 0x8ABF,
+ 46285 - 44032: 0x8AC0,
+ 46286 - 44032: 0x8AC1,
+ 46287 - 44032: 0x8AC2,
+ 46288 - 44032: 0xB5E3,
+ 46289 - 44032: 0x8AC3,
+ 46290 - 44032: 0x8AC4,
+ 46291 - 44032: 0x8AC5,
+ 46292 - 44032: 0x8AC6,
+ 46293 - 44032: 0xB5E4,
+ 46294 - 44032: 0x8AC7,
+ 46295 - 44032: 0x8AC8,
+ 46296 - 44032: 0x8AC9,
+ 46297 - 44032: 0x8ACA,
+ 46298 - 44032: 0x8ACB,
+ 46299 - 44032: 0x8ACC,
+ 46300 - 44032: 0xB5E5,
+ 46301 - 44032: 0xB5E6,
+ 46302 - 44032: 0x8ACD,
+ 46303 - 44032: 0x8ACE,
+ 46304 - 44032: 0xB5E7,
+ 46305 - 44032: 0x8ACF,
+ 46306 - 44032: 0x8AD0,
+ 46307 - 44032: 0xB5E8,
+ 46308 - 44032: 0xB5E9,
+ 46309 - 44032: 0x8AD1,
+ 46310 - 44032: 0xB5EA,
+ 46311 - 44032: 0x8AD2,
+ 46312 - 44032: 0x8AD3,
+ 46313 - 44032: 0x8AD4,
+ 46314 - 44032: 0x8AD5,
+ 46315 - 44032: 0x8AD6,
+ 46316 - 44032: 0xB5EB,
+ 46317 - 44032: 0xB5EC,
+ 46318 - 44032: 0x8AD7,
+ 46319 - 44032: 0xB5ED,
+ 46320 - 44032: 0x8AD8,
+ 46321 - 44032: 0xB5EE,
+ 46322 - 44032: 0x8AD9,
+ 46323 - 44032: 0x8ADA,
+ 46324 - 44032: 0x8ADB,
+ 46325 - 44032: 0x8ADC,
+ 46326 - 44032: 0x8ADD,
+ 46327 - 44032: 0x8ADE,
+ 46328 - 44032: 0xB5EF,
+ 46329 - 44032: 0x8ADF,
+ 46330 - 44032: 0x8AE0,
+ 46331 - 44032: 0x8AE1,
+ 46332 - 44032: 0x8AE2,
+ 46333 - 44032: 0x8AE3,
+ 46334 - 44032: 0x8AE4,
+ 46335 - 44032: 0x8AE5,
+ 46336 - 44032: 0x8AE6,
+ 46337 - 44032: 0x8AE7,
+ 46338 - 44032: 0x8AE8,
+ 46339 - 44032: 0x8AE9,
+ 46340 - 44032: 0x8AEA,
+ 46341 - 44032: 0x8AEB,
+ 46342 - 44032: 0x8AEC,
+ 46343 - 44032: 0x8AED,
+ 46344 - 44032: 0x8AEE,
+ 46345 - 44032: 0x8AEF,
+ 46346 - 44032: 0x8AF0,
+ 46347 - 44032: 0x8AF1,
+ 46348 - 44032: 0x8AF2,
+ 46349 - 44032: 0x8AF3,
+ 46350 - 44032: 0x8AF4,
+ 46351 - 44032: 0x8AF5,
+ 46352 - 44032: 0x8AF6,
+ 46353 - 44032: 0x8AF7,
+ 46354 - 44032: 0x8AF8,
+ 46355 - 44032: 0x8AF9,
+ 46356 - 44032: 0xB5F0,
+ 46357 - 44032: 0xB5F1,
+ 46358 - 44032: 0x8AFA,
+ 46359 - 44032: 0x8AFB,
+ 46360 - 44032: 0xB5F2,
+ 46361 - 44032: 0x8AFC,
+ 46362 - 44032: 0x8AFD,
+ 46363 - 44032: 0xB5F3,
+ 46364 - 44032: 0xB5F4,
+ 46365 - 44032: 0x8AFE,
+ 46366 - 44032: 0x8B41,
+ 46367 - 44032: 0x8B42,
+ 46368 - 44032: 0x8B43,
+ 46369 - 44032: 0x8B44,
+ 46370 - 44032: 0x8B45,
+ 46371 - 44032: 0x8B46,
+ 46372 - 44032: 0xB5F5,
+ 46373 - 44032: 0xB5F6,
+ 46374 - 44032: 0x8B47,
+ 46375 - 44032: 0xB5F7,
+ 46376 - 44032: 0xB5F8,
+ 46377 - 44032: 0xB5F9,
+ 46378 - 44032: 0xB5FA,
+ 46379 - 44032: 0x8B48,
+ 46380 - 44032: 0x8B49,
+ 46381 - 44032: 0x8B4A,
+ 46382 - 44032: 0x8B4B,
+ 46383 - 44032: 0x8B4C,
+ 46384 - 44032: 0xB5FB,
+ 46385 - 44032: 0xB5FC,
+ 46386 - 44032: 0x8B4D,
+ 46387 - 44032: 0x8B4E,
+ 46388 - 44032: 0xB5FD,
+ 46389 - 44032: 0x8B4F,
+ 46390 - 44032: 0x8B50,
+ 46391 - 44032: 0x8B51,
+ 46392 - 44032: 0xB5FE,
+ 46393 - 44032: 0x8B52,
+ 46394 - 44032: 0x8B53,
+ 46395 - 44032: 0x8B54,
+ 46396 - 44032: 0x8B55,
+ 46397 - 44032: 0x8B56,
+ 46398 - 44032: 0x8B57,
+ 46399 - 44032: 0x8B58,
+ 46400 - 44032: 0xB6A1,
+ 46401 - 44032: 0xB6A2,
+ 46402 - 44032: 0x8B59,
+ 46403 - 44032: 0xB6A3,
+ 46404 - 44032: 0xB6A4,
+ 46405 - 44032: 0xB6A5,
+ 46406 - 44032: 0x8B5A,
+ 46407 - 44032: 0x8B61,
+ 46408 - 44032: 0x8B62,
+ 46409 - 44032: 0x8B63,
+ 46410 - 44032: 0x8B64,
+ 46411 - 44032: 0xB6A6,
+ 46412 - 44032: 0xB6A7,
+ 46413 - 44032: 0xB6A8,
+ 46414 - 44032: 0x8B65,
+ 46415 - 44032: 0x8B66,
+ 46416 - 44032: 0xB6A9,
+ 46417 - 44032: 0x8B67,
+ 46418 - 44032: 0x8B68,
+ 46419 - 44032: 0x8B69,
+ 46420 - 44032: 0xB6AA,
+ 46421 - 44032: 0x8B6A,
+ 46422 - 44032: 0x8B6B,
+ 46423 - 44032: 0x8B6C,
+ 46424 - 44032: 0x8B6D,
+ 46425 - 44032: 0x8B6E,
+ 46426 - 44032: 0x8B6F,
+ 46427 - 44032: 0x8B70,
+ 46428 - 44032: 0xB6AB,
+ 46429 - 44032: 0xB6AC,
+ 46430 - 44032: 0x8B71,
+ 46431 - 44032: 0xB6AD,
+ 46432 - 44032: 0xB6AE,
+ 46433 - 44032: 0xB6AF,
+ 46434 - 44032: 0x8B72,
+ 46435 - 44032: 0x8B73,
+ 46436 - 44032: 0x8B74,
+ 46437 - 44032: 0x8B75,
+ 46438 - 44032: 0x8B76,
+ 46439 - 44032: 0x8B77,
+ 46440 - 44032: 0x8B78,
+ 46441 - 44032: 0x8B79,
+ 46442 - 44032: 0x8B7A,
+ 46443 - 44032: 0x8B81,
+ 46444 - 44032: 0x8B82,
+ 46445 - 44032: 0x8B83,
+ 46446 - 44032: 0x8B84,
+ 46447 - 44032: 0x8B85,
+ 46448 - 44032: 0x8B86,
+ 46449 - 44032: 0x8B87,
+ 46450 - 44032: 0x8B88,
+ 46451 - 44032: 0x8B89,
+ 46452 - 44032: 0x8B8A,
+ 46453 - 44032: 0x8B8B,
+ 46454 - 44032: 0x8B8C,
+ 46455 - 44032: 0x8B8D,
+ 46456 - 44032: 0x8B8E,
+ 46457 - 44032: 0x8B8F,
+ 46458 - 44032: 0x8B90,
+ 46459 - 44032: 0x8B91,
+ 46460 - 44032: 0x8B92,
+ 46461 - 44032: 0x8B93,
+ 46462 - 44032: 0x8B94,
+ 46463 - 44032: 0x8B95,
+ 46464 - 44032: 0x8B96,
+ 46465 - 44032: 0x8B97,
+ 46466 - 44032: 0x8B98,
+ 46467 - 44032: 0x8B99,
+ 46468 - 44032: 0x8B9A,
+ 46469 - 44032: 0x8B9B,
+ 46470 - 44032: 0x8B9C,
+ 46471 - 44032: 0x8B9D,
+ 46472 - 44032: 0x8B9E,
+ 46473 - 44032: 0x8B9F,
+ 46474 - 44032: 0x8BA0,
+ 46475 - 44032: 0x8BA1,
+ 46476 - 44032: 0x8BA2,
+ 46477 - 44032: 0x8BA3,
+ 46478 - 44032: 0x8BA4,
+ 46479 - 44032: 0x8BA5,
+ 46480 - 44032: 0x8BA6,
+ 46481 - 44032: 0x8BA7,
+ 46482 - 44032: 0x8BA8,
+ 46483 - 44032: 0x8BA9,
+ 46484 - 44032: 0x8BAA,
+ 46485 - 44032: 0x8BAB,
+ 46486 - 44032: 0x8BAC,
+ 46487 - 44032: 0x8BAD,
+ 46488 - 44032: 0x8BAE,
+ 46489 - 44032: 0x8BAF,
+ 46490 - 44032: 0x8BB0,
+ 46491 - 44032: 0x8BB1,
+ 46492 - 44032: 0x8BB2,
+ 46493 - 44032: 0x8BB3,
+ 46494 - 44032: 0x8BB4,
+ 46495 - 44032: 0x8BB5,
+ 46496 - 44032: 0xB6B0,
+ 46497 - 44032: 0xB6B1,
+ 46498 - 44032: 0x8BB6,
+ 46499 - 44032: 0x8BB7,
+ 46500 - 44032: 0xB6B2,
+ 46501 - 44032: 0x8BB8,
+ 46502 - 44032: 0x8BB9,
+ 46503 - 44032: 0x8BBA,
+ 46504 - 44032: 0xB6B3,
+ 46505 - 44032: 0x8BBB,
+ 46506 - 44032: 0xB6B4,
+ 46507 - 44032: 0xB6B5,
+ 46508 - 44032: 0x8BBC,
+ 46509 - 44032: 0x8BBD,
+ 46510 - 44032: 0x8BBE,
+ 46511 - 44032: 0x8BBF,
+ 46512 - 44032: 0xB6B6,
+ 46513 - 44032: 0xB6B7,
+ 46514 - 44032: 0x8BC0,
+ 46515 - 44032: 0xB6B8,
+ 46516 - 44032: 0xB6B9,
+ 46517 - 44032: 0xB6BA,
+ 46518 - 44032: 0x8BC1,
+ 46519 - 44032: 0x8BC2,
+ 46520 - 44032: 0x8BC3,
+ 46521 - 44032: 0x8BC4,
+ 46522 - 44032: 0x8BC5,
+ 46523 - 44032: 0xB6BB,
+ 46524 - 44032: 0xB6BC,
+ 46525 - 44032: 0xB6BD,
+ 46526 - 44032: 0x8BC6,
+ 46527 - 44032: 0x8BC7,
+ 46528 - 44032: 0xB6BE,
+ 46529 - 44032: 0x8BC8,
+ 46530 - 44032: 0x8BC9,
+ 46531 - 44032: 0x8BCA,
+ 46532 - 44032: 0xB6BF,
+ 46533 - 44032: 0x8BCB,
+ 46534 - 44032: 0x8BCC,
+ 46535 - 44032: 0x8BCD,
+ 46536 - 44032: 0x8BCE,
+ 46537 - 44032: 0x8BCF,
+ 46538 - 44032: 0x8BD0,
+ 46539 - 44032: 0x8BD1,
+ 46540 - 44032: 0xB6C0,
+ 46541 - 44032: 0xB6C1,
+ 46542 - 44032: 0x8BD2,
+ 46543 - 44032: 0xB6C2,
+ 46544 - 44032: 0xB6C3,
+ 46545 - 44032: 0xB6C4,
+ 46546 - 44032: 0x8BD3,
+ 46547 - 44032: 0x8BD4,
+ 46548 - 44032: 0x8BD5,
+ 46549 - 44032: 0x8BD6,
+ 46550 - 44032: 0x8BD7,
+ 46551 - 44032: 0x8BD8,
+ 46552 - 44032: 0xB6C5,
+ 46553 - 44032: 0x8BD9,
+ 46554 - 44032: 0x8BDA,
+ 46555 - 44032: 0x8BDB,
+ 46556 - 44032: 0x8BDC,
+ 46557 - 44032: 0x8BDD,
+ 46558 - 44032: 0x8BDE,
+ 46559 - 44032: 0x8BDF,
+ 46560 - 44032: 0x8BE0,
+ 46561 - 44032: 0x8BE1,
+ 46562 - 44032: 0x8BE2,
+ 46563 - 44032: 0x8BE3,
+ 46564 - 44032: 0x8BE4,
+ 46565 - 44032: 0x8BE5,
+ 46566 - 44032: 0x8BE6,
+ 46567 - 44032: 0x8BE7,
+ 46568 - 44032: 0x8BE8,
+ 46569 - 44032: 0x8BE9,
+ 46570 - 44032: 0x8BEA,
+ 46571 - 44032: 0x8BEB,
+ 46572 - 44032: 0xB6C6,
+ 46573 - 44032: 0x8BEC,
+ 46574 - 44032: 0x8BED,
+ 46575 - 44032: 0x8BEE,
+ 46576 - 44032: 0x8BEF,
+ 46577 - 44032: 0x8BF0,
+ 46578 - 44032: 0x8BF1,
+ 46579 - 44032: 0x8BF2,
+ 46580 - 44032: 0x8BF3,
+ 46581 - 44032: 0x8BF4,
+ 46582 - 44032: 0x8BF5,
+ 46583 - 44032: 0x8BF6,
+ 46584 - 44032: 0x8BF7,
+ 46585 - 44032: 0x8BF8,
+ 46586 - 44032: 0x8BF9,
+ 46587 - 44032: 0x8BFA,
+ 46588 - 44032: 0x8BFB,
+ 46589 - 44032: 0x8BFC,
+ 46590 - 44032: 0x8BFD,
+ 46591 - 44032: 0x8BFE,
+ 46592 - 44032: 0x8C41,
+ 46593 - 44032: 0x8C42,
+ 46594 - 44032: 0x8C43,
+ 46595 - 44032: 0x8C44,
+ 46596 - 44032: 0x8C45,
+ 46597 - 44032: 0x8C46,
+ 46598 - 44032: 0x8C47,
+ 46599 - 44032: 0x8C48,
+ 46600 - 44032: 0x8C49,
+ 46601 - 44032: 0x8C4A,
+ 46602 - 44032: 0x8C4B,
+ 46603 - 44032: 0x8C4C,
+ 46604 - 44032: 0x8C4D,
+ 46605 - 44032: 0x8C4E,
+ 46606 - 44032: 0x8C4F,
+ 46607 - 44032: 0x8C50,
+ 46608 - 44032: 0xB6C7,
+ 46609 - 44032: 0xB6C8,
+ 46610 - 44032: 0x8C51,
+ 46611 - 44032: 0x8C52,
+ 46612 - 44032: 0xB6C9,
+ 46613 - 44032: 0x8C53,
+ 46614 - 44032: 0x8C54,
+ 46615 - 44032: 0x8C55,
+ 46616 - 44032: 0xB6CA,
+ 46617 - 44032: 0x8C56,
+ 46618 - 44032: 0x8C57,
+ 46619 - 44032: 0x8C58,
+ 46620 - 44032: 0x8C59,
+ 46621 - 44032: 0x8C5A,
+ 46622 - 44032: 0x8C61,
+ 46623 - 44032: 0x8C62,
+ 46624 - 44032: 0x8C63,
+ 46625 - 44032: 0x8C64,
+ 46626 - 44032: 0x8C65,
+ 46627 - 44032: 0x8C66,
+ 46628 - 44032: 0x8C67,
+ 46629 - 44032: 0xB6CB,
+ 46630 - 44032: 0x8C68,
+ 46631 - 44032: 0x8C69,
+ 46632 - 44032: 0x8C6A,
+ 46633 - 44032: 0x8C6B,
+ 46634 - 44032: 0x8C6C,
+ 46635 - 44032: 0x8C6D,
+ 46636 - 44032: 0xB6CC,
+ 46637 - 44032: 0x8C6E,
+ 46638 - 44032: 0x8C6F,
+ 46639 - 44032: 0x8C70,
+ 46640 - 44032: 0x8C71,
+ 46641 - 44032: 0x8C72,
+ 46642 - 44032: 0x8C73,
+ 46643 - 44032: 0x8C74,
+ 46644 - 44032: 0xB6CD,
+ 46645 - 44032: 0x8C75,
+ 46646 - 44032: 0x8C76,
+ 46647 - 44032: 0x8C77,
+ 46648 - 44032: 0x8C78,
+ 46649 - 44032: 0x8C79,
+ 46650 - 44032: 0x8C7A,
+ 46651 - 44032: 0x8C81,
+ 46652 - 44032: 0x8C82,
+ 46653 - 44032: 0x8C83,
+ 46654 - 44032: 0x8C84,
+ 46655 - 44032: 0x8C85,
+ 46656 - 44032: 0x8C86,
+ 46657 - 44032: 0x8C87,
+ 46658 - 44032: 0x8C88,
+ 46659 - 44032: 0x8C89,
+ 46660 - 44032: 0x8C8A,
+ 46661 - 44032: 0x8C8B,
+ 46662 - 44032: 0x8C8C,
+ 46663 - 44032: 0x8C8D,
+ 46664 - 44032: 0xB6CE,
+ 46665 - 44032: 0x8C8E,
+ 46666 - 44032: 0x8C8F,
+ 46667 - 44032: 0x8C90,
+ 46668 - 44032: 0x8C91,
+ 46669 - 44032: 0x8C92,
+ 46670 - 44032: 0x8C93,
+ 46671 - 44032: 0x8C94,
+ 46672 - 44032: 0x8C95,
+ 46673 - 44032: 0x8C96,
+ 46674 - 44032: 0x8C97,
+ 46675 - 44032: 0x8C98,
+ 46676 - 44032: 0x8C99,
+ 46677 - 44032: 0x8C9A,
+ 46678 - 44032: 0x8C9B,
+ 46679 - 44032: 0x8C9C,
+ 46680 - 44032: 0x8C9D,
+ 46681 - 44032: 0x8C9E,
+ 46682 - 44032: 0x8C9F,
+ 46683 - 44032: 0x8CA0,
+ 46684 - 44032: 0x8CA1,
+ 46685 - 44032: 0x8CA2,
+ 46686 - 44032: 0x8CA3,
+ 46687 - 44032: 0x8CA4,
+ 46688 - 44032: 0x8CA5,
+ 46689 - 44032: 0x8CA6,
+ 46690 - 44032: 0x8CA7,
+ 46691 - 44032: 0x8CA8,
+ 46692 - 44032: 0xB6CF,
+ 46693 - 44032: 0x8CA9,
+ 46694 - 44032: 0x8CAA,
+ 46695 - 44032: 0x8CAB,
+ 46696 - 44032: 0xB6D0,
+ 46697 - 44032: 0x8CAC,
+ 46698 - 44032: 0x8CAD,
+ 46699 - 44032: 0x8CAE,
+ 46700 - 44032: 0x8CAF,
+ 46701 - 44032: 0x8CB0,
+ 46702 - 44032: 0x8CB1,
+ 46703 - 44032: 0x8CB2,
+ 46704 - 44032: 0x8CB3,
+ 46705 - 44032: 0x8CB4,
+ 46706 - 44032: 0x8CB5,
+ 46707 - 44032: 0x8CB6,
+ 46708 - 44032: 0x8CB7,
+ 46709 - 44032: 0x8CB8,
+ 46710 - 44032: 0x8CB9,
+ 46711 - 44032: 0x8CBA,
+ 46712 - 44032: 0x8CBB,
+ 46713 - 44032: 0x8CBC,
+ 46714 - 44032: 0x8CBD,
+ 46715 - 44032: 0x8CBE,
+ 46716 - 44032: 0x8CBF,
+ 46717 - 44032: 0x8CC0,
+ 46718 - 44032: 0x8CC1,
+ 46719 - 44032: 0x8CC2,
+ 46720 - 44032: 0x8CC3,
+ 46721 - 44032: 0x8CC4,
+ 46722 - 44032: 0x8CC5,
+ 46723 - 44032: 0x8CC6,
+ 46724 - 44032: 0x8CC7,
+ 46725 - 44032: 0x8CC8,
+ 46726 - 44032: 0x8CC9,
+ 46727 - 44032: 0x8CCA,
+ 46728 - 44032: 0x8CCB,
+ 46729 - 44032: 0x8CCC,
+ 46730 - 44032: 0x8CCD,
+ 46731 - 44032: 0x8CCE,
+ 46732 - 44032: 0x8CCF,
+ 46733 - 44032: 0x8CD0,
+ 46734 - 44032: 0x8CD1,
+ 46735 - 44032: 0x8CD2,
+ 46736 - 44032: 0x8CD3,
+ 46737 - 44032: 0x8CD4,
+ 46738 - 44032: 0x8CD5,
+ 46739 - 44032: 0x8CD6,
+ 46740 - 44032: 0x8CD7,
+ 46741 - 44032: 0x8CD8,
+ 46742 - 44032: 0x8CD9,
+ 46743 - 44032: 0x8CDA,
+ 46744 - 44032: 0x8CDB,
+ 46745 - 44032: 0x8CDC,
+ 46746 - 44032: 0x8CDD,
+ 46747 - 44032: 0x8CDE,
+ 46748 - 44032: 0xB6D1,
+ 46749 - 44032: 0xB6D2,
+ 46750 - 44032: 0x8CDF,
+ 46751 - 44032: 0x8CE0,
+ 46752 - 44032: 0xB6D3,
+ 46753 - 44032: 0x8CE1,
+ 46754 - 44032: 0x8CE2,
+ 46755 - 44032: 0x8CE3,
+ 46756 - 44032: 0xB6D4,
+ 46757 - 44032: 0x8CE4,
+ 46758 - 44032: 0x8CE5,
+ 46759 - 44032: 0x8CE6,
+ 46760 - 44032: 0x8CE7,
+ 46761 - 44032: 0x8CE8,
+ 46762 - 44032: 0x8CE9,
+ 46763 - 44032: 0xB6D5,
+ 46764 - 44032: 0xB6D6,
+ 46765 - 44032: 0x8CEA,
+ 46766 - 44032: 0x8CEB,
+ 46767 - 44032: 0x8CEC,
+ 46768 - 44032: 0x8CED,
+ 46769 - 44032: 0xB6D7,
+ 46770 - 44032: 0x8CEE,
+ 46771 - 44032: 0x8CEF,
+ 46772 - 44032: 0x8CF0,
+ 46773 - 44032: 0x8CF1,
+ 46774 - 44032: 0x8CF2,
+ 46775 - 44032: 0x8CF3,
+ 46776 - 44032: 0x8CF4,
+ 46777 - 44032: 0x8CF5,
+ 46778 - 44032: 0x8CF6,
+ 46779 - 44032: 0x8CF7,
+ 46780 - 44032: 0x8CF8,
+ 46781 - 44032: 0x8CF9,
+ 46782 - 44032: 0x8CFA,
+ 46783 - 44032: 0x8CFB,
+ 46784 - 44032: 0x8CFC,
+ 46785 - 44032: 0x8CFD,
+ 46786 - 44032: 0x8CFE,
+ 46787 - 44032: 0x8D41,
+ 46788 - 44032: 0x8D42,
+ 46789 - 44032: 0x8D43,
+ 46790 - 44032: 0x8D44,
+ 46791 - 44032: 0x8D45,
+ 46792 - 44032: 0x8D46,
+ 46793 - 44032: 0x8D47,
+ 46794 - 44032: 0x8D48,
+ 46795 - 44032: 0x8D49,
+ 46796 - 44032: 0x8D4A,
+ 46797 - 44032: 0x8D4B,
+ 46798 - 44032: 0x8D4C,
+ 46799 - 44032: 0x8D4D,
+ 46800 - 44032: 0x8D4E,
+ 46801 - 44032: 0x8D4F,
+ 46802 - 44032: 0x8D50,
+ 46803 - 44032: 0x8D51,
+ 46804 - 44032: 0xB6D8,
+ 46805 - 44032: 0x8D52,
+ 46806 - 44032: 0x8D53,
+ 46807 - 44032: 0x8D54,
+ 46808 - 44032: 0x8D55,
+ 46809 - 44032: 0x8D56,
+ 46810 - 44032: 0x8D57,
+ 46811 - 44032: 0x8D58,
+ 46812 - 44032: 0x8D59,
+ 46813 - 44032: 0x8D5A,
+ 46814 - 44032: 0x8D61,
+ 46815 - 44032: 0x8D62,
+ 46816 - 44032: 0x8D63,
+ 46817 - 44032: 0x8D64,
+ 46818 - 44032: 0x8D65,
+ 46819 - 44032: 0x8D66,
+ 46820 - 44032: 0x8D67,
+ 46821 - 44032: 0x8D68,
+ 46822 - 44032: 0x8D69,
+ 46823 - 44032: 0x8D6A,
+ 46824 - 44032: 0x8D6B,
+ 46825 - 44032: 0x8D6C,
+ 46826 - 44032: 0x8D6D,
+ 46827 - 44032: 0x8D6E,
+ 46828 - 44032: 0x8D6F,
+ 46829 - 44032: 0x8D70,
+ 46830 - 44032: 0x8D71,
+ 46831 - 44032: 0x8D72,
+ 46832 - 44032: 0xB6D9,
+ 46833 - 44032: 0x8D73,
+ 46834 - 44032: 0x8D74,
+ 46835 - 44032: 0x8D75,
+ 46836 - 44032: 0xB6DA,
+ 46837 - 44032: 0x8D76,
+ 46838 - 44032: 0x8D77,
+ 46839 - 44032: 0x8D78,
+ 46840 - 44032: 0xB6DB,
+ 46841 - 44032: 0x8D79,
+ 46842 - 44032: 0x8D7A,
+ 46843 - 44032: 0x8D81,
+ 46844 - 44032: 0x8D82,
+ 46845 - 44032: 0x8D83,
+ 46846 - 44032: 0x8D84,
+ 46847 - 44032: 0x8D85,
+ 46848 - 44032: 0xB6DC,
+ 46849 - 44032: 0xB6DD,
+ 46850 - 44032: 0x8D86,
+ 46851 - 44032: 0x8D87,
+ 46852 - 44032: 0x8D88,
+ 46853 - 44032: 0xB6DE,
+ 46854 - 44032: 0x8D89,
+ 46855 - 44032: 0x8D8A,
+ 46856 - 44032: 0x8D8B,
+ 46857 - 44032: 0x8D8C,
+ 46858 - 44032: 0x8D8D,
+ 46859 - 44032: 0x8D8E,
+ 46860 - 44032: 0x8D8F,
+ 46861 - 44032: 0x8D90,
+ 46862 - 44032: 0x8D91,
+ 46863 - 44032: 0x8D92,
+ 46864 - 44032: 0x8D93,
+ 46865 - 44032: 0x8D94,
+ 46866 - 44032: 0x8D95,
+ 46867 - 44032: 0x8D96,
+ 46868 - 44032: 0x8D97,
+ 46869 - 44032: 0x8D98,
+ 46870 - 44032: 0x8D99,
+ 46871 - 44032: 0x8D9A,
+ 46872 - 44032: 0x8D9B,
+ 46873 - 44032: 0x8D9C,
+ 46874 - 44032: 0x8D9D,
+ 46875 - 44032: 0x8D9E,
+ 46876 - 44032: 0x8D9F,
+ 46877 - 44032: 0x8DA0,
+ 46878 - 44032: 0x8DA1,
+ 46879 - 44032: 0x8DA2,
+ 46880 - 44032: 0x8DA3,
+ 46881 - 44032: 0x8DA4,
+ 46882 - 44032: 0x8DA5,
+ 46883 - 44032: 0x8DA6,
+ 46884 - 44032: 0x8DA7,
+ 46885 - 44032: 0x8DA8,
+ 46886 - 44032: 0x8DA9,
+ 46887 - 44032: 0x8DAA,
+ 46888 - 44032: 0xB6DF,
+ 46889 - 44032: 0xB6E0,
+ 46890 - 44032: 0x8DAB,
+ 46891 - 44032: 0x8DAC,
+ 46892 - 44032: 0xB6E1,
+ 46893 - 44032: 0x8DAD,
+ 46894 - 44032: 0x8DAE,
+ 46895 - 44032: 0xB6E2,
+ 46896 - 44032: 0xB6E3,
+ 46897 - 44032: 0x8DAF,
+ 46898 - 44032: 0x8DB0,
+ 46899 - 44032: 0x8DB1,
+ 46900 - 44032: 0x8DB2,
+ 46901 - 44032: 0x8DB3,
+ 46902 - 44032: 0x8DB4,
+ 46903 - 44032: 0x8DB5,
+ 46904 - 44032: 0xB6E4,
+ 46905 - 44032: 0xB6E5,
+ 46906 - 44032: 0x8DB6,
+ 46907 - 44032: 0xB6E6,
+ 46908 - 44032: 0x8DB7,
+ 46909 - 44032: 0x8DB8,
+ 46910 - 44032: 0x8DB9,
+ 46911 - 44032: 0x8DBA,
+ 46912 - 44032: 0x8DBB,
+ 46913 - 44032: 0x8DBC,
+ 46914 - 44032: 0x8DBD,
+ 46915 - 44032: 0x8DBE,
+ 46916 - 44032: 0xB6E7,
+ 46917 - 44032: 0x8DBF,
+ 46918 - 44032: 0x8DC0,
+ 46919 - 44032: 0x8DC1,
+ 46920 - 44032: 0xB6E8,
+ 46921 - 44032: 0x8DC2,
+ 46922 - 44032: 0x8DC3,
+ 46923 - 44032: 0x8DC4,
+ 46924 - 44032: 0xB6E9,
+ 46925 - 44032: 0x8DC5,
+ 46926 - 44032: 0x8DC6,
+ 46927 - 44032: 0x8DC7,
+ 46928 - 44032: 0x8DC8,
+ 46929 - 44032: 0x8DC9,
+ 46930 - 44032: 0x8DCA,
+ 46931 - 44032: 0x8DCB,
+ 46932 - 44032: 0xB6EA,
+ 46933 - 44032: 0xB6EB,
+ 46934 - 44032: 0x8DCC,
+ 46935 - 44032: 0x8DCD,
+ 46936 - 44032: 0x8DCE,
+ 46937 - 44032: 0x8DCF,
+ 46938 - 44032: 0x8DD0,
+ 46939 - 44032: 0x8DD1,
+ 46940 - 44032: 0x8DD2,
+ 46941 - 44032: 0x8DD3,
+ 46942 - 44032: 0x8DD4,
+ 46943 - 44032: 0x8DD5,
+ 46944 - 44032: 0xB6EC,
+ 46945 - 44032: 0x8DD6,
+ 46946 - 44032: 0x8DD7,
+ 46947 - 44032: 0x8DD8,
+ 46948 - 44032: 0xB6ED,
+ 46949 - 44032: 0x8DD9,
+ 46950 - 44032: 0x8DDA,
+ 46951 - 44032: 0x8DDB,
+ 46952 - 44032: 0xB6EE,
+ 46953 - 44032: 0x8DDC,
+ 46954 - 44032: 0x8DDD,
+ 46955 - 44032: 0x8DDE,
+ 46956 - 44032: 0x8DDF,
+ 46957 - 44032: 0x8DE0,
+ 46958 - 44032: 0x8DE1,
+ 46959 - 44032: 0x8DE2,
+ 46960 - 44032: 0xB6EF,
+ 46961 - 44032: 0xB6F0,
+ 46962 - 44032: 0x8DE3,
+ 46963 - 44032: 0xB6F1,
+ 46964 - 44032: 0x8DE4,
+ 46965 - 44032: 0xB6F2,
+ 46966 - 44032: 0x8DE5,
+ 46967 - 44032: 0x8DE6,
+ 46968 - 44032: 0x8DE7,
+ 46969 - 44032: 0x8DE8,
+ 46970 - 44032: 0x8DE9,
+ 46971 - 44032: 0x8DEA,
+ 46972 - 44032: 0xB6F3,
+ 46973 - 44032: 0xB6F4,
+ 46974 - 44032: 0x8DEB,
+ 46975 - 44032: 0x8DEC,
+ 46976 - 44032: 0xB6F5,
+ 46977 - 44032: 0x8DED,
+ 46978 - 44032: 0x8DEE,
+ 46979 - 44032: 0x8DEF,
+ 46980 - 44032: 0xB6F6,
+ 46981 - 44032: 0x8DF0,
+ 46982 - 44032: 0x8DF1,
+ 46983 - 44032: 0x8DF2,
+ 46984 - 44032: 0x8DF3,
+ 46985 - 44032: 0x8DF4,
+ 46986 - 44032: 0x8DF5,
+ 46987 - 44032: 0x8DF6,
+ 46988 - 44032: 0xB6F7,
+ 46989 - 44032: 0xB6F8,
+ 46990 - 44032: 0x8DF7,
+ 46991 - 44032: 0xB6F9,
+ 46992 - 44032: 0xB6FA,
+ 46993 - 44032: 0xB6FB,
+ 46994 - 44032: 0xB6FC,
+ 46995 - 44032: 0x8DF8,
+ 46996 - 44032: 0x8DF9,
+ 46997 - 44032: 0x8DFA,
+ 46998 - 44032: 0xB6FD,
+ 46999 - 44032: 0xB6FE,
+ 47000 - 44032: 0xB7A1,
+ 47001 - 44032: 0xB7A2,
+ 47002 - 44032: 0x8DFB,
+ 47003 - 44032: 0x8DFC,
+ 47004 - 44032: 0xB7A3,
+ 47005 - 44032: 0x8DFD,
+ 47006 - 44032: 0x8DFE,
+ 47007 - 44032: 0x8E41,
+ 47008 - 44032: 0xB7A4,
+ 47009 - 44032: 0x8E42,
+ 47010 - 44032: 0x8E43,
+ 47011 - 44032: 0x8E44,
+ 47012 - 44032: 0x8E45,
+ 47013 - 44032: 0x8E46,
+ 47014 - 44032: 0x8E47,
+ 47015 - 44032: 0x8E48,
+ 47016 - 44032: 0xB7A5,
+ 47017 - 44032: 0xB7A6,
+ 47018 - 44032: 0x8E49,
+ 47019 - 44032: 0xB7A7,
+ 47020 - 44032: 0xB7A8,
+ 47021 - 44032: 0xB7A9,
+ 47022 - 44032: 0x8E4A,
+ 47023 - 44032: 0x8E4B,
+ 47024 - 44032: 0x8E4C,
+ 47025 - 44032: 0x8E4D,
+ 47026 - 44032: 0x8E4E,
+ 47027 - 44032: 0x8E4F,
+ 47028 - 44032: 0xB7AA,
+ 47029 - 44032: 0xB7AB,
+ 47030 - 44032: 0x8E50,
+ 47031 - 44032: 0x8E51,
+ 47032 - 44032: 0xB7AC,
+ 47033 - 44032: 0x8E52,
+ 47034 - 44032: 0x8E53,
+ 47035 - 44032: 0x8E54,
+ 47036 - 44032: 0x8E55,
+ 47037 - 44032: 0x8E56,
+ 47038 - 44032: 0x8E57,
+ 47039 - 44032: 0x8E58,
+ 47040 - 44032: 0x8E59,
+ 47041 - 44032: 0x8E5A,
+ 47042 - 44032: 0x8E61,
+ 47043 - 44032: 0x8E62,
+ 47044 - 44032: 0x8E63,
+ 47045 - 44032: 0x8E64,
+ 47046 - 44032: 0x8E65,
+ 47047 - 44032: 0xB7AD,
+ 47048 - 44032: 0x8E66,
+ 47049 - 44032: 0xB7AE,
+ 47050 - 44032: 0x8E67,
+ 47051 - 44032: 0x8E68,
+ 47052 - 44032: 0x8E69,
+ 47053 - 44032: 0x8E6A,
+ 47054 - 44032: 0x8E6B,
+ 47055 - 44032: 0x8E6C,
+ 47056 - 44032: 0x8E6D,
+ 47057 - 44032: 0x8E6E,
+ 47058 - 44032: 0x8E6F,
+ 47059 - 44032: 0x8E70,
+ 47060 - 44032: 0x8E71,
+ 47061 - 44032: 0x8E72,
+ 47062 - 44032: 0x8E73,
+ 47063 - 44032: 0x8E74,
+ 47064 - 44032: 0x8E75,
+ 47065 - 44032: 0x8E76,
+ 47066 - 44032: 0x8E77,
+ 47067 - 44032: 0x8E78,
+ 47068 - 44032: 0x8E79,
+ 47069 - 44032: 0x8E7A,
+ 47070 - 44032: 0x8E81,
+ 47071 - 44032: 0x8E82,
+ 47072 - 44032: 0x8E83,
+ 47073 - 44032: 0x8E84,
+ 47074 - 44032: 0x8E85,
+ 47075 - 44032: 0x8E86,
+ 47076 - 44032: 0x8E87,
+ 47077 - 44032: 0x8E88,
+ 47078 - 44032: 0x8E89,
+ 47079 - 44032: 0x8E8A,
+ 47080 - 44032: 0x8E8B,
+ 47081 - 44032: 0x8E8C,
+ 47082 - 44032: 0x8E8D,
+ 47083 - 44032: 0x8E8E,
+ 47084 - 44032: 0xB7AF,
+ 47085 - 44032: 0xB7B0,
+ 47086 - 44032: 0x8E8F,
+ 47087 - 44032: 0x8E90,
+ 47088 - 44032: 0xB7B1,
+ 47089 - 44032: 0x8E91,
+ 47090 - 44032: 0x8E92,
+ 47091 - 44032: 0x8E93,
+ 47092 - 44032: 0xB7B2,
+ 47093 - 44032: 0x8E94,
+ 47094 - 44032: 0x8E95,
+ 47095 - 44032: 0x8E96,
+ 47096 - 44032: 0x8E97,
+ 47097 - 44032: 0x8E98,
+ 47098 - 44032: 0x8E99,
+ 47099 - 44032: 0x8E9A,
+ 47100 - 44032: 0xB7B3,
+ 47101 - 44032: 0xB7B4,
+ 47102 - 44032: 0x8E9B,
+ 47103 - 44032: 0xB7B5,
+ 47104 - 44032: 0xB7B6,
+ 47105 - 44032: 0xB7B7,
+ 47106 - 44032: 0x8E9C,
+ 47107 - 44032: 0x8E9D,
+ 47108 - 44032: 0x8E9E,
+ 47109 - 44032: 0x8E9F,
+ 47110 - 44032: 0x8EA0,
+ 47111 - 44032: 0xB7B8,
+ 47112 - 44032: 0xB7B9,
+ 47113 - 44032: 0xB7BA,
+ 47114 - 44032: 0x8EA1,
+ 47115 - 44032: 0x8EA2,
+ 47116 - 44032: 0xB7BB,
+ 47117 - 44032: 0x8EA3,
+ 47118 - 44032: 0x8EA4,
+ 47119 - 44032: 0x8EA5,
+ 47120 - 44032: 0xB7BC,
+ 47121 - 44032: 0x8EA6,
+ 47122 - 44032: 0x8EA7,
+ 47123 - 44032: 0x8EA8,
+ 47124 - 44032: 0x8EA9,
+ 47125 - 44032: 0x8EAA,
+ 47126 - 44032: 0x8EAB,
+ 47127 - 44032: 0x8EAC,
+ 47128 - 44032: 0xB7BD,
+ 47129 - 44032: 0xB7BE,
+ 47130 - 44032: 0x8EAD,
+ 47131 - 44032: 0xB7BF,
+ 47132 - 44032: 0x8EAE,
+ 47133 - 44032: 0xB7C0,
+ 47134 - 44032: 0x8EAF,
+ 47135 - 44032: 0x8EB0,
+ 47136 - 44032: 0x8EB1,
+ 47137 - 44032: 0x8EB2,
+ 47138 - 44032: 0x8EB3,
+ 47139 - 44032: 0x8EB4,
+ 47140 - 44032: 0xB7C1,
+ 47141 - 44032: 0xB7C2,
+ 47142 - 44032: 0x8EB5,
+ 47143 - 44032: 0x8EB6,
+ 47144 - 44032: 0xB7C3,
+ 47145 - 44032: 0x8EB7,
+ 47146 - 44032: 0x8EB8,
+ 47147 - 44032: 0x8EB9,
+ 47148 - 44032: 0xB7C4,
+ 47149 - 44032: 0x8EBA,
+ 47150 - 44032: 0x8EBB,
+ 47151 - 44032: 0x8EBC,
+ 47152 - 44032: 0x8EBD,
+ 47153 - 44032: 0x8EBE,
+ 47154 - 44032: 0x8EBF,
+ 47155 - 44032: 0x8EC0,
+ 47156 - 44032: 0xB7C5,
+ 47157 - 44032: 0xB7C6,
+ 47158 - 44032: 0x8EC1,
+ 47159 - 44032: 0xB7C7,
+ 47160 - 44032: 0xB7C8,
+ 47161 - 44032: 0xB7C9,
+ 47162 - 44032: 0x8EC2,
+ 47163 - 44032: 0x8EC3,
+ 47164 - 44032: 0x8EC4,
+ 47165 - 44032: 0x8EC5,
+ 47166 - 44032: 0x8EC6,
+ 47167 - 44032: 0x8EC7,
+ 47168 - 44032: 0xB7CA,
+ 47169 - 44032: 0x8EC8,
+ 47170 - 44032: 0x8EC9,
+ 47171 - 44032: 0x8ECA,
+ 47172 - 44032: 0xB7CB,
+ 47173 - 44032: 0x8ECB,
+ 47174 - 44032: 0x8ECC,
+ 47175 - 44032: 0x8ECD,
+ 47176 - 44032: 0x8ECE,
+ 47177 - 44032: 0x8ECF,
+ 47178 - 44032: 0x8ED0,
+ 47179 - 44032: 0x8ED1,
+ 47180 - 44032: 0x8ED2,
+ 47181 - 44032: 0x8ED3,
+ 47182 - 44032: 0x8ED4,
+ 47183 - 44032: 0x8ED5,
+ 47184 - 44032: 0x8ED6,
+ 47185 - 44032: 0xB7CC,
+ 47186 - 44032: 0x8ED7,
+ 47187 - 44032: 0xB7CD,
+ 47188 - 44032: 0x8ED8,
+ 47189 - 44032: 0x8ED9,
+ 47190 - 44032: 0x8EDA,
+ 47191 - 44032: 0x8EDB,
+ 47192 - 44032: 0x8EDC,
+ 47193 - 44032: 0x8EDD,
+ 47194 - 44032: 0x8EDE,
+ 47195 - 44032: 0x8EDF,
+ 47196 - 44032: 0xB7CE,
+ 47197 - 44032: 0xB7CF,
+ 47198 - 44032: 0x8EE0,
+ 47199 - 44032: 0x8EE1,
+ 47200 - 44032: 0xB7D0,
+ 47201 - 44032: 0x8EE2,
+ 47202 - 44032: 0x8EE3,
+ 47203 - 44032: 0x8EE4,
+ 47204 - 44032: 0xB7D1,
+ 47205 - 44032: 0x8EE5,
+ 47206 - 44032: 0x8EE6,
+ 47207 - 44032: 0x8EE7,
+ 47208 - 44032: 0x8EE8,
+ 47209 - 44032: 0x8EE9,
+ 47210 - 44032: 0x8EEA,
+ 47211 - 44032: 0x8EEB,
+ 47212 - 44032: 0xB7D2,
+ 47213 - 44032: 0xB7D3,
+ 47214 - 44032: 0x8EEC,
+ 47215 - 44032: 0xB7D4,
+ 47216 - 44032: 0x8EED,
+ 47217 - 44032: 0xB7D5,
+ 47218 - 44032: 0x8EEE,
+ 47219 - 44032: 0x8EEF,
+ 47220 - 44032: 0x8EF0,
+ 47221 - 44032: 0x8EF1,
+ 47222 - 44032: 0x8EF2,
+ 47223 - 44032: 0x8EF3,
+ 47224 - 44032: 0xB7D6,
+ 47225 - 44032: 0x8EF4,
+ 47226 - 44032: 0x8EF5,
+ 47227 - 44032: 0x8EF6,
+ 47228 - 44032: 0xB7D7,
+ 47229 - 44032: 0x8EF7,
+ 47230 - 44032: 0x8EF8,
+ 47231 - 44032: 0x8EF9,
+ 47232 - 44032: 0x8EFA,
+ 47233 - 44032: 0x8EFB,
+ 47234 - 44032: 0x8EFC,
+ 47235 - 44032: 0x8EFD,
+ 47236 - 44032: 0x8EFE,
+ 47237 - 44032: 0x8F41,
+ 47238 - 44032: 0x8F42,
+ 47239 - 44032: 0x8F43,
+ 47240 - 44032: 0x8F44,
+ 47241 - 44032: 0x8F45,
+ 47242 - 44032: 0x8F46,
+ 47243 - 44032: 0x8F47,
+ 47244 - 44032: 0x8F48,
+ 47245 - 44032: 0xB7D8,
+ 47246 - 44032: 0x8F49,
+ 47247 - 44032: 0x8F4A,
+ 47248 - 44032: 0x8F4B,
+ 47249 - 44032: 0x8F4C,
+ 47250 - 44032: 0x8F4D,
+ 47251 - 44032: 0x8F4E,
+ 47252 - 44032: 0x8F4F,
+ 47253 - 44032: 0x8F50,
+ 47254 - 44032: 0x8F51,
+ 47255 - 44032: 0x8F52,
+ 47256 - 44032: 0x8F53,
+ 47257 - 44032: 0x8F54,
+ 47258 - 44032: 0x8F55,
+ 47259 - 44032: 0x8F56,
+ 47260 - 44032: 0x8F57,
+ 47261 - 44032: 0x8F58,
+ 47262 - 44032: 0x8F59,
+ 47263 - 44032: 0x8F5A,
+ 47264 - 44032: 0x8F61,
+ 47265 - 44032: 0x8F62,
+ 47266 - 44032: 0x8F63,
+ 47267 - 44032: 0x8F64,
+ 47268 - 44032: 0x8F65,
+ 47269 - 44032: 0x8F66,
+ 47270 - 44032: 0x8F67,
+ 47271 - 44032: 0x8F68,
+ 47272 - 44032: 0xB7D9,
+ 47273 - 44032: 0x8F69,
+ 47274 - 44032: 0x8F6A,
+ 47275 - 44032: 0x8F6B,
+ 47276 - 44032: 0x8F6C,
+ 47277 - 44032: 0x8F6D,
+ 47278 - 44032: 0x8F6E,
+ 47279 - 44032: 0x8F6F,
+ 47280 - 44032: 0xB7DA,
+ 47281 - 44032: 0x8F70,
+ 47282 - 44032: 0x8F71,
+ 47283 - 44032: 0x8F72,
+ 47284 - 44032: 0xB7DB,
+ 47285 - 44032: 0x8F73,
+ 47286 - 44032: 0x8F74,
+ 47287 - 44032: 0x8F75,
+ 47288 - 44032: 0xB7DC,
+ 47289 - 44032: 0x8F76,
+ 47290 - 44032: 0x8F77,
+ 47291 - 44032: 0x8F78,
+ 47292 - 44032: 0x8F79,
+ 47293 - 44032: 0x8F7A,
+ 47294 - 44032: 0x8F81,
+ 47295 - 44032: 0x8F82,
+ 47296 - 44032: 0xB7DD,
+ 47297 - 44032: 0xB7DE,
+ 47298 - 44032: 0x8F83,
+ 47299 - 44032: 0xB7DF,
+ 47300 - 44032: 0x8F84,
+ 47301 - 44032: 0xB7E0,
+ 47302 - 44032: 0x8F85,
+ 47303 - 44032: 0x8F86,
+ 47304 - 44032: 0x8F87,
+ 47305 - 44032: 0x8F88,
+ 47306 - 44032: 0x8F89,
+ 47307 - 44032: 0x8F8A,
+ 47308 - 44032: 0xB7E1,
+ 47309 - 44032: 0x8F8B,
+ 47310 - 44032: 0x8F8C,
+ 47311 - 44032: 0x8F8D,
+ 47312 - 44032: 0xB7E2,
+ 47313 - 44032: 0x8F8E,
+ 47314 - 44032: 0x8F8F,
+ 47315 - 44032: 0x8F90,
+ 47316 - 44032: 0xB7E3,
+ 47317 - 44032: 0x8F91,
+ 47318 - 44032: 0x8F92,
+ 47319 - 44032: 0x8F93,
+ 47320 - 44032: 0x8F94,
+ 47321 - 44032: 0x8F95,
+ 47322 - 44032: 0x8F96,
+ 47323 - 44032: 0x8F97,
+ 47324 - 44032: 0x8F98,
+ 47325 - 44032: 0xB7E4,
+ 47326 - 44032: 0x8F99,
+ 47327 - 44032: 0xB7E5,
+ 47328 - 44032: 0x8F9A,
+ 47329 - 44032: 0xB7E6,
+ 47330 - 44032: 0x8F9B,
+ 47331 - 44032: 0x8F9C,
+ 47332 - 44032: 0x8F9D,
+ 47333 - 44032: 0x8F9E,
+ 47334 - 44032: 0x8F9F,
+ 47335 - 44032: 0x8FA0,
+ 47336 - 44032: 0xB7E7,
+ 47337 - 44032: 0xB7E8,
+ 47338 - 44032: 0x8FA1,
+ 47339 - 44032: 0x8FA2,
+ 47340 - 44032: 0xB7E9,
+ 47341 - 44032: 0x8FA3,
+ 47342 - 44032: 0x8FA4,
+ 47343 - 44032: 0x8FA5,
+ 47344 - 44032: 0xB7EA,
+ 47345 - 44032: 0x8FA6,
+ 47346 - 44032: 0x8FA7,
+ 47347 - 44032: 0x8FA8,
+ 47348 - 44032: 0x8FA9,
+ 47349 - 44032: 0x8FAA,
+ 47350 - 44032: 0x8FAB,
+ 47351 - 44032: 0x8FAC,
+ 47352 - 44032: 0xB7EB,
+ 47353 - 44032: 0xB7EC,
+ 47354 - 44032: 0x8FAD,
+ 47355 - 44032: 0xB7ED,
+ 47356 - 44032: 0x8FAE,
+ 47357 - 44032: 0xB7EE,
+ 47358 - 44032: 0x8FAF,
+ 47359 - 44032: 0x8FB0,
+ 47360 - 44032: 0x8FB1,
+ 47361 - 44032: 0x8FB2,
+ 47362 - 44032: 0x8FB3,
+ 47363 - 44032: 0x8FB4,
+ 47364 - 44032: 0xB7EF,
+ 47365 - 44032: 0x8FB5,
+ 47366 - 44032: 0x8FB6,
+ 47367 - 44032: 0x8FB7,
+ 47368 - 44032: 0x8FB8,
+ 47369 - 44032: 0x8FB9,
+ 47370 - 44032: 0x8FBA,
+ 47371 - 44032: 0x8FBB,
+ 47372 - 44032: 0x8FBC,
+ 47373 - 44032: 0x8FBD,
+ 47374 - 44032: 0x8FBE,
+ 47375 - 44032: 0x8FBF,
+ 47376 - 44032: 0x8FC0,
+ 47377 - 44032: 0x8FC1,
+ 47378 - 44032: 0x8FC2,
+ 47379 - 44032: 0x8FC3,
+ 47380 - 44032: 0x8FC4,
+ 47381 - 44032: 0x8FC5,
+ 47382 - 44032: 0x8FC6,
+ 47383 - 44032: 0x8FC7,
+ 47384 - 44032: 0xB7F0,
+ 47385 - 44032: 0x8FC8,
+ 47386 - 44032: 0x8FC9,
+ 47387 - 44032: 0x8FCA,
+ 47388 - 44032: 0x8FCB,
+ 47389 - 44032: 0x8FCC,
+ 47390 - 44032: 0x8FCD,
+ 47391 - 44032: 0x8FCE,
+ 47392 - 44032: 0xB7F1,
+ 47393 - 44032: 0x8FCF,
+ 47394 - 44032: 0x8FD0,
+ 47395 - 44032: 0x8FD1,
+ 47396 - 44032: 0x8FD2,
+ 47397 - 44032: 0x8FD3,
+ 47398 - 44032: 0x8FD4,
+ 47399 - 44032: 0x8FD5,
+ 47400 - 44032: 0x8FD6,
+ 47401 - 44032: 0x8FD7,
+ 47402 - 44032: 0x8FD8,
+ 47403 - 44032: 0x8FD9,
+ 47404 - 44032: 0x8FDA,
+ 47405 - 44032: 0x8FDB,
+ 47406 - 44032: 0x8FDC,
+ 47407 - 44032: 0x8FDD,
+ 47408 - 44032: 0x8FDE,
+ 47409 - 44032: 0x8FDF,
+ 47410 - 44032: 0x8FE0,
+ 47411 - 44032: 0x8FE1,
+ 47412 - 44032: 0x8FE2,
+ 47413 - 44032: 0x8FE3,
+ 47414 - 44032: 0x8FE4,
+ 47415 - 44032: 0x8FE5,
+ 47416 - 44032: 0x8FE6,
+ 47417 - 44032: 0x8FE7,
+ 47418 - 44032: 0x8FE8,
+ 47419 - 44032: 0x8FE9,
+ 47420 - 44032: 0xB7F2,
+ 47421 - 44032: 0xB7F3,
+ 47422 - 44032: 0x8FEA,
+ 47423 - 44032: 0x8FEB,
+ 47424 - 44032: 0xB7F4,
+ 47425 - 44032: 0x8FEC,
+ 47426 - 44032: 0x8FED,
+ 47427 - 44032: 0x8FEE,
+ 47428 - 44032: 0xB7F5,
+ 47429 - 44032: 0x8FEF,
+ 47430 - 44032: 0x8FF0,
+ 47431 - 44032: 0x8FF1,
+ 47432 - 44032: 0x8FF2,
+ 47433 - 44032: 0x8FF3,
+ 47434 - 44032: 0x8FF4,
+ 47435 - 44032: 0x8FF5,
+ 47436 - 44032: 0xB7F6,
+ 47437 - 44032: 0x8FF6,
+ 47438 - 44032: 0x8FF7,
+ 47439 - 44032: 0xB7F7,
+ 47440 - 44032: 0x8FF8,
+ 47441 - 44032: 0xB7F8,
+ 47442 - 44032: 0x8FF9,
+ 47443 - 44032: 0x8FFA,
+ 47444 - 44032: 0x8FFB,
+ 47445 - 44032: 0x8FFC,
+ 47446 - 44032: 0x8FFD,
+ 47447 - 44032: 0x8FFE,
+ 47448 - 44032: 0xB7F9,
+ 47449 - 44032: 0xB7FA,
+ 47450 - 44032: 0x9041,
+ 47451 - 44032: 0x9042,
+ 47452 - 44032: 0xB7FB,
+ 47453 - 44032: 0x9043,
+ 47454 - 44032: 0x9044,
+ 47455 - 44032: 0x9045,
+ 47456 - 44032: 0xB7FC,
+ 47457 - 44032: 0x9046,
+ 47458 - 44032: 0x9047,
+ 47459 - 44032: 0x9048,
+ 47460 - 44032: 0x9049,
+ 47461 - 44032: 0x904A,
+ 47462 - 44032: 0x904B,
+ 47463 - 44032: 0x904C,
+ 47464 - 44032: 0xB7FD,
+ 47465 - 44032: 0xB7FE,
+ 47466 - 44032: 0x904D,
+ 47467 - 44032: 0xB8A1,
+ 47468 - 44032: 0x904E,
+ 47469 - 44032: 0xB8A2,
+ 47470 - 44032: 0x904F,
+ 47471 - 44032: 0x9050,
+ 47472 - 44032: 0x9051,
+ 47473 - 44032: 0x9052,
+ 47474 - 44032: 0x9053,
+ 47475 - 44032: 0x9054,
+ 47476 - 44032: 0xB8A3,
+ 47477 - 44032: 0xB8A4,
+ 47478 - 44032: 0x9055,
+ 47479 - 44032: 0x9056,
+ 47480 - 44032: 0xB8A5,
+ 47481 - 44032: 0x9057,
+ 47482 - 44032: 0x9058,
+ 47483 - 44032: 0x9059,
+ 47484 - 44032: 0xB8A6,
+ 47485 - 44032: 0x905A,
+ 47486 - 44032: 0x9061,
+ 47487 - 44032: 0x9062,
+ 47488 - 44032: 0x9063,
+ 47489 - 44032: 0x9064,
+ 47490 - 44032: 0x9065,
+ 47491 - 44032: 0x9066,
+ 47492 - 44032: 0xB8A7,
+ 47493 - 44032: 0xB8A8,
+ 47494 - 44032: 0x9067,
+ 47495 - 44032: 0xB8A9,
+ 47496 - 44032: 0x9068,
+ 47497 - 44032: 0xB8AA,
+ 47498 - 44032: 0xB8AB,
+ 47499 - 44032: 0x9069,
+ 47500 - 44032: 0x906A,
+ 47501 - 44032: 0xB8AC,
+ 47502 - 44032: 0xB8AD,
+ 47503 - 44032: 0x906B,
+ 47504 - 44032: 0x906C,
+ 47505 - 44032: 0x906D,
+ 47506 - 44032: 0x906E,
+ 47507 - 44032: 0x906F,
+ 47508 - 44032: 0x9070,
+ 47509 - 44032: 0x9071,
+ 47510 - 44032: 0x9072,
+ 47511 - 44032: 0x9073,
+ 47512 - 44032: 0x9074,
+ 47513 - 44032: 0x9075,
+ 47514 - 44032: 0x9076,
+ 47515 - 44032: 0x9077,
+ 47516 - 44032: 0x9078,
+ 47517 - 44032: 0x9079,
+ 47518 - 44032: 0x907A,
+ 47519 - 44032: 0x9081,
+ 47520 - 44032: 0x9082,
+ 47521 - 44032: 0x9083,
+ 47522 - 44032: 0x9084,
+ 47523 - 44032: 0x9085,
+ 47524 - 44032: 0x9086,
+ 47525 - 44032: 0x9087,
+ 47526 - 44032: 0x9088,
+ 47527 - 44032: 0x9089,
+ 47528 - 44032: 0x908A,
+ 47529 - 44032: 0x908B,
+ 47530 - 44032: 0x908C,
+ 47531 - 44032: 0x908D,
+ 47532 - 44032: 0xB8AE,
+ 47533 - 44032: 0xB8AF,
+ 47534 - 44032: 0x908E,
+ 47535 - 44032: 0x908F,
+ 47536 - 44032: 0xB8B0,
+ 47537 - 44032: 0x9090,
+ 47538 - 44032: 0x9091,
+ 47539 - 44032: 0x9092,
+ 47540 - 44032: 0xB8B1,
+ 47541 - 44032: 0x9093,
+ 47542 - 44032: 0x9094,
+ 47543 - 44032: 0x9095,
+ 47544 - 44032: 0x9096,
+ 47545 - 44032: 0x9097,
+ 47546 - 44032: 0x9098,
+ 47547 - 44032: 0x9099,
+ 47548 - 44032: 0xB8B2,
+ 47549 - 44032: 0xB8B3,
+ 47550 - 44032: 0x909A,
+ 47551 - 44032: 0xB8B4,
+ 47552 - 44032: 0x909B,
+ 47553 - 44032: 0xB8B5,
+ 47554 - 44032: 0x909C,
+ 47555 - 44032: 0x909D,
+ 47556 - 44032: 0x909E,
+ 47557 - 44032: 0x909F,
+ 47558 - 44032: 0x90A0,
+ 47559 - 44032: 0x90A1,
+ 47560 - 44032: 0xB8B6,
+ 47561 - 44032: 0xB8B7,
+ 47562 - 44032: 0x90A2,
+ 47563 - 44032: 0x90A3,
+ 47564 - 44032: 0xB8B8,
+ 47565 - 44032: 0x90A4,
+ 47566 - 44032: 0xB8B9,
+ 47567 - 44032: 0xB8BA,
+ 47568 - 44032: 0xB8BB,
+ 47569 - 44032: 0xB8BC,
+ 47570 - 44032: 0xB8BD,
+ 47571 - 44032: 0x90A5,
+ 47572 - 44032: 0x90A6,
+ 47573 - 44032: 0x90A7,
+ 47574 - 44032: 0x90A8,
+ 47575 - 44032: 0x90A9,
+ 47576 - 44032: 0xB8BE,
+ 47577 - 44032: 0xB8BF,
+ 47578 - 44032: 0x90AA,
+ 47579 - 44032: 0xB8C0,
+ 47580 - 44032: 0x90AB,
+ 47581 - 44032: 0xB8C1,
+ 47582 - 44032: 0xB8C2,
+ 47583 - 44032: 0x90AC,
+ 47584 - 44032: 0x90AD,
+ 47585 - 44032: 0xB8C3,
+ 47586 - 44032: 0x90AE,
+ 47587 - 44032: 0xB8C4,
+ 47588 - 44032: 0xB8C5,
+ 47589 - 44032: 0xB8C6,
+ 47590 - 44032: 0x90AF,
+ 47591 - 44032: 0x90B0,
+ 47592 - 44032: 0xB8C7,
+ 47593 - 44032: 0x90B1,
+ 47594 - 44032: 0x90B2,
+ 47595 - 44032: 0x90B3,
+ 47596 - 44032: 0xB8C8,
+ 47597 - 44032: 0x90B4,
+ 47598 - 44032: 0x90B5,
+ 47599 - 44032: 0x90B6,
+ 47600 - 44032: 0x90B7,
+ 47601 - 44032: 0x90B8,
+ 47602 - 44032: 0x90B9,
+ 47603 - 44032: 0x90BA,
+ 47604 - 44032: 0xB8C9,
+ 47605 - 44032: 0xB8CA,
+ 47606 - 44032: 0x90BB,
+ 47607 - 44032: 0xB8CB,
+ 47608 - 44032: 0xB8CC,
+ 47609 - 44032: 0xB8CD,
+ 47610 - 44032: 0xB8CE,
+ 47611 - 44032: 0x90BC,
+ 47612 - 44032: 0x90BD,
+ 47613 - 44032: 0x90BE,
+ 47614 - 44032: 0x90BF,
+ 47615 - 44032: 0x90C0,
+ 47616 - 44032: 0xB8CF,
+ 47617 - 44032: 0xB8D0,
+ 47618 - 44032: 0x90C1,
+ 47619 - 44032: 0x90C2,
+ 47620 - 44032: 0x90C3,
+ 47621 - 44032: 0x90C4,
+ 47622 - 44032: 0x90C5,
+ 47623 - 44032: 0x90C6,
+ 47624 - 44032: 0xB8D1,
+ 47625 - 44032: 0x90C7,
+ 47626 - 44032: 0x90C8,
+ 47627 - 44032: 0x90C9,
+ 47628 - 44032: 0x90CA,
+ 47629 - 44032: 0x90CB,
+ 47630 - 44032: 0x90CC,
+ 47631 - 44032: 0x90CD,
+ 47632 - 44032: 0x90CE,
+ 47633 - 44032: 0x90CF,
+ 47634 - 44032: 0x90D0,
+ 47635 - 44032: 0x90D1,
+ 47636 - 44032: 0x90D2,
+ 47637 - 44032: 0xB8D2,
+ 47638 - 44032: 0x90D3,
+ 47639 - 44032: 0x90D4,
+ 47640 - 44032: 0x90D5,
+ 47641 - 44032: 0x90D6,
+ 47642 - 44032: 0x90D7,
+ 47643 - 44032: 0x90D8,
+ 47644 - 44032: 0x90D9,
+ 47645 - 44032: 0x90DA,
+ 47646 - 44032: 0x90DB,
+ 47647 - 44032: 0x90DC,
+ 47648 - 44032: 0x90DD,
+ 47649 - 44032: 0x90DE,
+ 47650 - 44032: 0x90DF,
+ 47651 - 44032: 0x90E0,
+ 47652 - 44032: 0x90E1,
+ 47653 - 44032: 0x90E2,
+ 47654 - 44032: 0x90E3,
+ 47655 - 44032: 0x90E4,
+ 47656 - 44032: 0x90E5,
+ 47657 - 44032: 0x90E6,
+ 47658 - 44032: 0x90E7,
+ 47659 - 44032: 0x90E8,
+ 47660 - 44032: 0x90E9,
+ 47661 - 44032: 0x90EA,
+ 47662 - 44032: 0x90EB,
+ 47663 - 44032: 0x90EC,
+ 47664 - 44032: 0x90ED,
+ 47665 - 44032: 0x90EE,
+ 47666 - 44032: 0x90EF,
+ 47667 - 44032: 0x90F0,
+ 47668 - 44032: 0x90F1,
+ 47669 - 44032: 0x90F2,
+ 47670 - 44032: 0x90F3,
+ 47671 - 44032: 0x90F4,
+ 47672 - 44032: 0xB8D3,
+ 47673 - 44032: 0xB8D4,
+ 47674 - 44032: 0x90F5,
+ 47675 - 44032: 0x90F6,
+ 47676 - 44032: 0xB8D5,
+ 47677 - 44032: 0x90F7,
+ 47678 - 44032: 0x90F8,
+ 47679 - 44032: 0x90F9,
+ 47680 - 44032: 0xB8D6,
+ 47681 - 44032: 0x90FA,
+ 47682 - 44032: 0xB8D7,
+ 47683 - 44032: 0x90FB,
+ 47684 - 44032: 0x90FC,
+ 47685 - 44032: 0x90FD,
+ 47686 - 44032: 0x90FE,
+ 47687 - 44032: 0x9141,
+ 47688 - 44032: 0xB8D8,
+ 47689 - 44032: 0xB8D9,
+ 47690 - 44032: 0x9142,
+ 47691 - 44032: 0xB8DA,
+ 47692 - 44032: 0x9143,
+ 47693 - 44032: 0xB8DB,
+ 47694 - 44032: 0xB8DC,
+ 47695 - 44032: 0x9144,
+ 47696 - 44032: 0x9145,
+ 47697 - 44032: 0x9146,
+ 47698 - 44032: 0x9147,
+ 47699 - 44032: 0xB8DD,
+ 47700 - 44032: 0xB8DE,
+ 47701 - 44032: 0xB8DF,
+ 47702 - 44032: 0x9148,
+ 47703 - 44032: 0x9149,
+ 47704 - 44032: 0xB8E0,
+ 47705 - 44032: 0x914A,
+ 47706 - 44032: 0x914B,
+ 47707 - 44032: 0x914C,
+ 47708 - 44032: 0xB8E1,
+ 47709 - 44032: 0x914D,
+ 47710 - 44032: 0x914E,
+ 47711 - 44032: 0x914F,
+ 47712 - 44032: 0x9150,
+ 47713 - 44032: 0x9151,
+ 47714 - 44032: 0x9152,
+ 47715 - 44032: 0x9153,
+ 47716 - 44032: 0xB8E2,
+ 47717 - 44032: 0xB8E3,
+ 47718 - 44032: 0x9154,
+ 47719 - 44032: 0xB8E4,
+ 47720 - 44032: 0xB8E5,
+ 47721 - 44032: 0xB8E6,
+ 47722 - 44032: 0x9155,
+ 47723 - 44032: 0x9156,
+ 47724 - 44032: 0x9157,
+ 47725 - 44032: 0x9158,
+ 47726 - 44032: 0x9159,
+ 47727 - 44032: 0x915A,
+ 47728 - 44032: 0xB8E7,
+ 47729 - 44032: 0xB8E8,
+ 47730 - 44032: 0x9161,
+ 47731 - 44032: 0x9162,
+ 47732 - 44032: 0xB8E9,
+ 47733 - 44032: 0x9163,
+ 47734 - 44032: 0x9164,
+ 47735 - 44032: 0x9165,
+ 47736 - 44032: 0xB8EA,
+ 47737 - 44032: 0x9166,
+ 47738 - 44032: 0x9167,
+ 47739 - 44032: 0x9168,
+ 47740 - 44032: 0x9169,
+ 47741 - 44032: 0x916A,
+ 47742 - 44032: 0x916B,
+ 47743 - 44032: 0x916C,
+ 47744 - 44032: 0x916D,
+ 47745 - 44032: 0x916E,
+ 47746 - 44032: 0x916F,
+ 47747 - 44032: 0xB8EB,
+ 47748 - 44032: 0xB8EC,
+ 47749 - 44032: 0xB8ED,
+ 47750 - 44032: 0x9170,
+ 47751 - 44032: 0xB8EE,
+ 47752 - 44032: 0x9171,
+ 47753 - 44032: 0x9172,
+ 47754 - 44032: 0x9173,
+ 47755 - 44032: 0x9174,
+ 47756 - 44032: 0xB8EF,
+ 47757 - 44032: 0x9175,
+ 47758 - 44032: 0x9176,
+ 47759 - 44032: 0x9177,
+ 47760 - 44032: 0x9178,
+ 47761 - 44032: 0x9179,
+ 47762 - 44032: 0x917A,
+ 47763 - 44032: 0x9181,
+ 47764 - 44032: 0x9182,
+ 47765 - 44032: 0x9183,
+ 47766 - 44032: 0x9184,
+ 47767 - 44032: 0x9185,
+ 47768 - 44032: 0x9186,
+ 47769 - 44032: 0x9187,
+ 47770 - 44032: 0x9188,
+ 47771 - 44032: 0x9189,
+ 47772 - 44032: 0x918A,
+ 47773 - 44032: 0x918B,
+ 47774 - 44032: 0x918C,
+ 47775 - 44032: 0x918D,
+ 47776 - 44032: 0x918E,
+ 47777 - 44032: 0x918F,
+ 47778 - 44032: 0x9190,
+ 47779 - 44032: 0x9191,
+ 47780 - 44032: 0x9192,
+ 47781 - 44032: 0x9193,
+ 47782 - 44032: 0x9194,
+ 47783 - 44032: 0x9195,
+ 47784 - 44032: 0xB8F0,
+ 47785 - 44032: 0xB8F1,
+ 47786 - 44032: 0x9196,
+ 47787 - 44032: 0xB8F2,
+ 47788 - 44032: 0xB8F3,
+ 47789 - 44032: 0x9197,
+ 47790 - 44032: 0x9198,
+ 47791 - 44032: 0x9199,
+ 47792 - 44032: 0xB8F4,
+ 47793 - 44032: 0x919A,
+ 47794 - 44032: 0xB8F5,
+ 47795 - 44032: 0x919B,
+ 47796 - 44032: 0x919C,
+ 47797 - 44032: 0x919D,
+ 47798 - 44032: 0x919E,
+ 47799 - 44032: 0x919F,
+ 47800 - 44032: 0xB8F6,
+ 47801 - 44032: 0xB8F7,
+ 47802 - 44032: 0x91A0,
+ 47803 - 44032: 0xB8F8,
+ 47804 - 44032: 0x91A1,
+ 47805 - 44032: 0xB8F9,
+ 47806 - 44032: 0x91A2,
+ 47807 - 44032: 0x91A3,
+ 47808 - 44032: 0x91A4,
+ 47809 - 44032: 0x91A5,
+ 47810 - 44032: 0x91A6,
+ 47811 - 44032: 0x91A7,
+ 47812 - 44032: 0xB8FA,
+ 47813 - 44032: 0x91A8,
+ 47814 - 44032: 0x91A9,
+ 47815 - 44032: 0x91AA,
+ 47816 - 44032: 0xB8FB,
+ 47817 - 44032: 0x91AB,
+ 47818 - 44032: 0x91AC,
+ 47819 - 44032: 0x91AD,
+ 47820 - 44032: 0x91AE,
+ 47821 - 44032: 0x91AF,
+ 47822 - 44032: 0x91B0,
+ 47823 - 44032: 0x91B1,
+ 47824 - 44032: 0x91B2,
+ 47825 - 44032: 0x91B3,
+ 47826 - 44032: 0x91B4,
+ 47827 - 44032: 0x91B5,
+ 47828 - 44032: 0x91B6,
+ 47829 - 44032: 0x91B7,
+ 47830 - 44032: 0x91B8,
+ 47831 - 44032: 0x91B9,
+ 47832 - 44032: 0xB8FC,
+ 47833 - 44032: 0xB8FD,
+ 47834 - 44032: 0x91BA,
+ 47835 - 44032: 0x91BB,
+ 47836 - 44032: 0x91BC,
+ 47837 - 44032: 0x91BD,
+ 47838 - 44032: 0x91BE,
+ 47839 - 44032: 0x91BF,
+ 47840 - 44032: 0x91C0,
+ 47841 - 44032: 0x91C1,
+ 47842 - 44032: 0x91C2,
+ 47843 - 44032: 0x91C3,
+ 47844 - 44032: 0x91C4,
+ 47845 - 44032: 0x91C5,
+ 47846 - 44032: 0x91C6,
+ 47847 - 44032: 0x91C7,
+ 47848 - 44032: 0x91C8,
+ 47849 - 44032: 0x91C9,
+ 47850 - 44032: 0x91CA,
+ 47851 - 44032: 0x91CB,
+ 47852 - 44032: 0x91CC,
+ 47853 - 44032: 0x91CD,
+ 47854 - 44032: 0x91CE,
+ 47855 - 44032: 0x91CF,
+ 47856 - 44032: 0x91D0,
+ 47857 - 44032: 0x91D1,
+ 47858 - 44032: 0x91D2,
+ 47859 - 44032: 0x91D3,
+ 47860 - 44032: 0x91D4,
+ 47861 - 44032: 0x91D5,
+ 47862 - 44032: 0x91D6,
+ 47863 - 44032: 0x91D7,
+ 47864 - 44032: 0x91D8,
+ 47865 - 44032: 0x91D9,
+ 47866 - 44032: 0x91DA,
+ 47867 - 44032: 0x91DB,
+ 47868 - 44032: 0xB8FE,
+ 47869 - 44032: 0x91DC,
+ 47870 - 44032: 0x91DD,
+ 47871 - 44032: 0x91DE,
+ 47872 - 44032: 0xB9A1,
+ 47873 - 44032: 0x91DF,
+ 47874 - 44032: 0x91E0,
+ 47875 - 44032: 0x91E1,
+ 47876 - 44032: 0xB9A2,
+ 47877 - 44032: 0x91E2,
+ 47878 - 44032: 0x91E3,
+ 47879 - 44032: 0x91E4,
+ 47880 - 44032: 0x91E5,
+ 47881 - 44032: 0x91E6,
+ 47882 - 44032: 0x91E7,
+ 47883 - 44032: 0x91E8,
+ 47884 - 44032: 0x91E9,
+ 47885 - 44032: 0xB9A3,
+ 47886 - 44032: 0x91EA,
+ 47887 - 44032: 0xB9A4,
+ 47888 - 44032: 0x91EB,
+ 47889 - 44032: 0xB9A5,
+ 47890 - 44032: 0x91EC,
+ 47891 - 44032: 0x91ED,
+ 47892 - 44032: 0x91EE,
+ 47893 - 44032: 0x91EF,
+ 47894 - 44032: 0x91F0,
+ 47895 - 44032: 0x91F1,
+ 47896 - 44032: 0xB9A6,
+ 47897 - 44032: 0x91F2,
+ 47898 - 44032: 0x91F3,
+ 47899 - 44032: 0x91F4,
+ 47900 - 44032: 0xB9A7,
+ 47901 - 44032: 0x91F5,
+ 47902 - 44032: 0x91F6,
+ 47903 - 44032: 0x91F7,
+ 47904 - 44032: 0xB9A8,
+ 47905 - 44032: 0x91F8,
+ 47906 - 44032: 0x91F9,
+ 47907 - 44032: 0x91FA,
+ 47908 - 44032: 0x91FB,
+ 47909 - 44032: 0x91FC,
+ 47910 - 44032: 0x91FD,
+ 47911 - 44032: 0x91FE,
+ 47912 - 44032: 0x9241,
+ 47913 - 44032: 0xB9A9,
+ 47914 - 44032: 0x9242,
+ 47915 - 44032: 0xB9AA,
+ 47916 - 44032: 0x9243,
+ 47917 - 44032: 0x9244,
+ 47918 - 44032: 0x9245,
+ 47919 - 44032: 0x9246,
+ 47920 - 44032: 0x9247,
+ 47921 - 44032: 0x9248,
+ 47922 - 44032: 0x9249,
+ 47923 - 44032: 0x924A,
+ 47924 - 44032: 0xB9AB,
+ 47925 - 44032: 0xB9AC,
+ 47926 - 44032: 0xB9AD,
+ 47927 - 44032: 0x924B,
+ 47928 - 44032: 0xB9AE,
+ 47929 - 44032: 0x924C,
+ 47930 - 44032: 0x924D,
+ 47931 - 44032: 0xB9AF,
+ 47932 - 44032: 0xB9B0,
+ 47933 - 44032: 0xB9B1,
+ 47934 - 44032: 0xB9B2,
+ 47935 - 44032: 0x924E,
+ 47936 - 44032: 0x924F,
+ 47937 - 44032: 0x9250,
+ 47938 - 44032: 0x9251,
+ 47939 - 44032: 0x9252,
+ 47940 - 44032: 0xB9B3,
+ 47941 - 44032: 0xB9B4,
+ 47942 - 44032: 0x9253,
+ 47943 - 44032: 0xB9B5,
+ 47944 - 44032: 0x9254,
+ 47945 - 44032: 0xB9B6,
+ 47946 - 44032: 0x9255,
+ 47947 - 44032: 0x9256,
+ 47948 - 44032: 0x9257,
+ 47949 - 44032: 0xB9B7,
+ 47950 - 44032: 0x9258,
+ 47951 - 44032: 0xB9B8,
+ 47952 - 44032: 0xB9B9,
+ 47953 - 44032: 0x9259,
+ 47954 - 44032: 0x925A,
+ 47955 - 44032: 0x9261,
+ 47956 - 44032: 0xB9BA,
+ 47957 - 44032: 0x9262,
+ 47958 - 44032: 0x9263,
+ 47959 - 44032: 0x9264,
+ 47960 - 44032: 0xB9BB,
+ 47961 - 44032: 0x9265,
+ 47962 - 44032: 0x9266,
+ 47963 - 44032: 0x9267,
+ 47964 - 44032: 0x9268,
+ 47965 - 44032: 0x9269,
+ 47966 - 44032: 0x926A,
+ 47967 - 44032: 0x926B,
+ 47968 - 44032: 0x926C,
+ 47969 - 44032: 0xB9BC,
+ 47970 - 44032: 0x926D,
+ 47971 - 44032: 0xB9BD,
+ 47972 - 44032: 0x926E,
+ 47973 - 44032: 0x926F,
+ 47974 - 44032: 0x9270,
+ 47975 - 44032: 0x9271,
+ 47976 - 44032: 0x9272,
+ 47977 - 44032: 0x9273,
+ 47978 - 44032: 0x9274,
+ 47979 - 44032: 0x9275,
+ 47980 - 44032: 0xB9BE,
+ 47981 - 44032: 0x9276,
+ 47982 - 44032: 0x9277,
+ 47983 - 44032: 0x9278,
+ 47984 - 44032: 0x9279,
+ 47985 - 44032: 0x927A,
+ 47986 - 44032: 0x9281,
+ 47987 - 44032: 0x9282,
+ 47988 - 44032: 0x9283,
+ 47989 - 44032: 0x9284,
+ 47990 - 44032: 0x9285,
+ 47991 - 44032: 0x9286,
+ 47992 - 44032: 0x9287,
+ 47993 - 44032: 0x9288,
+ 47994 - 44032: 0x9289,
+ 47995 - 44032: 0x928A,
+ 47996 - 44032: 0x928B,
+ 47997 - 44032: 0x928C,
+ 47998 - 44032: 0x928D,
+ 47999 - 44032: 0x928E,
+ 48000 - 44032: 0x928F,
+ 48001 - 44032: 0x9290,
+ 48002 - 44032: 0x9291,
+ 48003 - 44032: 0x9292,
+ 48004 - 44032: 0x9293,
+ 48005 - 44032: 0x9294,
+ 48006 - 44032: 0x9295,
+ 48007 - 44032: 0x9296,
+ 48008 - 44032: 0xB9BF,
+ 48009 - 44032: 0x9297,
+ 48010 - 44032: 0x9298,
+ 48011 - 44032: 0x9299,
+ 48012 - 44032: 0xB9C0,
+ 48013 - 44032: 0x929A,
+ 48014 - 44032: 0x929B,
+ 48015 - 44032: 0x929C,
+ 48016 - 44032: 0xB9C1,
+ 48017 - 44032: 0x929D,
+ 48018 - 44032: 0x929E,
+ 48019 - 44032: 0x929F,
+ 48020 - 44032: 0x92A0,
+ 48021 - 44032: 0x92A1,
+ 48022 - 44032: 0x92A2,
+ 48023 - 44032: 0x92A3,
+ 48024 - 44032: 0x92A4,
+ 48025 - 44032: 0x92A5,
+ 48026 - 44032: 0x92A6,
+ 48027 - 44032: 0x92A7,
+ 48028 - 44032: 0x92A8,
+ 48029 - 44032: 0x92A9,
+ 48030 - 44032: 0x92AA,
+ 48031 - 44032: 0x92AB,
+ 48032 - 44032: 0x92AC,
+ 48033 - 44032: 0x92AD,
+ 48034 - 44032: 0x92AE,
+ 48035 - 44032: 0x92AF,
+ 48036 - 44032: 0xB9C2,
+ 48037 - 44032: 0x92B0,
+ 48038 - 44032: 0x92B1,
+ 48039 - 44032: 0x92B2,
+ 48040 - 44032: 0xB9C3,
+ 48041 - 44032: 0x92B3,
+ 48042 - 44032: 0x92B4,
+ 48043 - 44032: 0x92B5,
+ 48044 - 44032: 0xB9C4,
+ 48045 - 44032: 0x92B6,
+ 48046 - 44032: 0x92B7,
+ 48047 - 44032: 0x92B8,
+ 48048 - 44032: 0x92B9,
+ 48049 - 44032: 0x92BA,
+ 48050 - 44032: 0x92BB,
+ 48051 - 44032: 0x92BC,
+ 48052 - 44032: 0xB9C5,
+ 48053 - 44032: 0x92BD,
+ 48054 - 44032: 0x92BE,
+ 48055 - 44032: 0xB9C6,
+ 48056 - 44032: 0x92BF,
+ 48057 - 44032: 0x92C0,
+ 48058 - 44032: 0x92C1,
+ 48059 - 44032: 0x92C2,
+ 48060 - 44032: 0x92C3,
+ 48061 - 44032: 0x92C4,
+ 48062 - 44032: 0x92C5,
+ 48063 - 44032: 0x92C6,
+ 48064 - 44032: 0xB9C7,
+ 48065 - 44032: 0x92C7,
+ 48066 - 44032: 0x92C8,
+ 48067 - 44032: 0x92C9,
+ 48068 - 44032: 0xB9C8,
+ 48069 - 44032: 0x92CA,
+ 48070 - 44032: 0x92CB,
+ 48071 - 44032: 0x92CC,
+ 48072 - 44032: 0xB9C9,
+ 48073 - 44032: 0x92CD,
+ 48074 - 44032: 0x92CE,
+ 48075 - 44032: 0x92CF,
+ 48076 - 44032: 0x92D0,
+ 48077 - 44032: 0x92D1,
+ 48078 - 44032: 0x92D2,
+ 48079 - 44032: 0x92D3,
+ 48080 - 44032: 0xB9CA,
+ 48081 - 44032: 0x92D4,
+ 48082 - 44032: 0x92D5,
+ 48083 - 44032: 0xB9CB,
+ 48084 - 44032: 0x92D6,
+ 48085 - 44032: 0x92D7,
+ 48086 - 44032: 0x92D8,
+ 48087 - 44032: 0x92D9,
+ 48088 - 44032: 0x92DA,
+ 48089 - 44032: 0x92DB,
+ 48090 - 44032: 0x92DC,
+ 48091 - 44032: 0x92DD,
+ 48092 - 44032: 0x92DE,
+ 48093 - 44032: 0x92DF,
+ 48094 - 44032: 0x92E0,
+ 48095 - 44032: 0x92E1,
+ 48096 - 44032: 0x92E2,
+ 48097 - 44032: 0x92E3,
+ 48098 - 44032: 0x92E4,
+ 48099 - 44032: 0x92E5,
+ 48100 - 44032: 0x92E6,
+ 48101 - 44032: 0x92E7,
+ 48102 - 44032: 0x92E8,
+ 48103 - 44032: 0x92E9,
+ 48104 - 44032: 0x92EA,
+ 48105 - 44032: 0x92EB,
+ 48106 - 44032: 0x92EC,
+ 48107 - 44032: 0x92ED,
+ 48108 - 44032: 0x92EE,
+ 48109 - 44032: 0x92EF,
+ 48110 - 44032: 0x92F0,
+ 48111 - 44032: 0x92F1,
+ 48112 - 44032: 0x92F2,
+ 48113 - 44032: 0x92F3,
+ 48114 - 44032: 0x92F4,
+ 48115 - 44032: 0x92F5,
+ 48116 - 44032: 0x92F6,
+ 48117 - 44032: 0x92F7,
+ 48118 - 44032: 0x92F8,
+ 48119 - 44032: 0x92F9,
+ 48120 - 44032: 0xB9CC,
+ 48121 - 44032: 0xB9CD,
+ 48122 - 44032: 0x92FA,
+ 48123 - 44032: 0x92FB,
+ 48124 - 44032: 0xB9CE,
+ 48125 - 44032: 0x92FC,
+ 48126 - 44032: 0x92FD,
+ 48127 - 44032: 0xB9CF,
+ 48128 - 44032: 0xB9D0,
+ 48129 - 44032: 0x92FE,
+ 48130 - 44032: 0xB9D1,
+ 48131 - 44032: 0x9341,
+ 48132 - 44032: 0x9342,
+ 48133 - 44032: 0x9343,
+ 48134 - 44032: 0x9344,
+ 48135 - 44032: 0x9345,
+ 48136 - 44032: 0xB9D2,
+ 48137 - 44032: 0xB9D3,
+ 48138 - 44032: 0x9346,
+ 48139 - 44032: 0xB9D4,
+ 48140 - 44032: 0xB9D5,
+ 48141 - 44032: 0xB9D6,
+ 48142 - 44032: 0x9347,
+ 48143 - 44032: 0xB9D7,
+ 48144 - 44032: 0x9348,
+ 48145 - 44032: 0xB9D8,
+ 48146 - 44032: 0x9349,
+ 48147 - 44032: 0x934A,
+ 48148 - 44032: 0xB9D9,
+ 48149 - 44032: 0xB9DA,
+ 48150 - 44032: 0xB9DB,
+ 48151 - 44032: 0xB9DC,
+ 48152 - 44032: 0xB9DD,
+ 48153 - 44032: 0x934B,
+ 48154 - 44032: 0x934C,
+ 48155 - 44032: 0xB9DE,
+ 48156 - 44032: 0xB9DF,
+ 48157 - 44032: 0xB9E0,
+ 48158 - 44032: 0xB9E1,
+ 48159 - 44032: 0xB9E2,
+ 48160 - 44032: 0x934D,
+ 48161 - 44032: 0x934E,
+ 48162 - 44032: 0x934F,
+ 48163 - 44032: 0x9350,
+ 48164 - 44032: 0xB9E3,
+ 48165 - 44032: 0xB9E4,
+ 48166 - 44032: 0x9351,
+ 48167 - 44032: 0xB9E5,
+ 48168 - 44032: 0x9352,
+ 48169 - 44032: 0xB9E6,
+ 48170 - 44032: 0x9353,
+ 48171 - 44032: 0x9354,
+ 48172 - 44032: 0x9355,
+ 48173 - 44032: 0xB9E7,
+ 48174 - 44032: 0x9356,
+ 48175 - 44032: 0x9357,
+ 48176 - 44032: 0xB9E8,
+ 48177 - 44032: 0xB9E9,
+ 48178 - 44032: 0x9358,
+ 48179 - 44032: 0x9359,
+ 48180 - 44032: 0xB9EA,
+ 48181 - 44032: 0x935A,
+ 48182 - 44032: 0x9361,
+ 48183 - 44032: 0x9362,
+ 48184 - 44032: 0xB9EB,
+ 48185 - 44032: 0x9363,
+ 48186 - 44032: 0x9364,
+ 48187 - 44032: 0x9365,
+ 48188 - 44032: 0x9366,
+ 48189 - 44032: 0x9367,
+ 48190 - 44032: 0x9368,
+ 48191 - 44032: 0x9369,
+ 48192 - 44032: 0xB9EC,
+ 48193 - 44032: 0xB9ED,
+ 48194 - 44032: 0x936A,
+ 48195 - 44032: 0xB9EE,
+ 48196 - 44032: 0xB9EF,
+ 48197 - 44032: 0xB9F0,
+ 48198 - 44032: 0x936B,
+ 48199 - 44032: 0x936C,
+ 48200 - 44032: 0x936D,
+ 48201 - 44032: 0xB9F1,
+ 48202 - 44032: 0x936E,
+ 48203 - 44032: 0x936F,
+ 48204 - 44032: 0xB9F2,
+ 48205 - 44032: 0xB9F3,
+ 48206 - 44032: 0x9370,
+ 48207 - 44032: 0x9371,
+ 48208 - 44032: 0xB9F4,
+ 48209 - 44032: 0x9372,
+ 48210 - 44032: 0x9373,
+ 48211 - 44032: 0x9374,
+ 48212 - 44032: 0x9375,
+ 48213 - 44032: 0x9376,
+ 48214 - 44032: 0x9377,
+ 48215 - 44032: 0x9378,
+ 48216 - 44032: 0x9379,
+ 48217 - 44032: 0x937A,
+ 48218 - 44032: 0x9381,
+ 48219 - 44032: 0x9382,
+ 48220 - 44032: 0x9383,
+ 48221 - 44032: 0xB9F5,
+ 48222 - 44032: 0x9384,
+ 48223 - 44032: 0x9385,
+ 48224 - 44032: 0x9386,
+ 48225 - 44032: 0x9387,
+ 48226 - 44032: 0x9388,
+ 48227 - 44032: 0x9389,
+ 48228 - 44032: 0x938A,
+ 48229 - 44032: 0x938B,
+ 48230 - 44032: 0x938C,
+ 48231 - 44032: 0x938D,
+ 48232 - 44032: 0x938E,
+ 48233 - 44032: 0x938F,
+ 48234 - 44032: 0x9390,
+ 48235 - 44032: 0x9391,
+ 48236 - 44032: 0x9392,
+ 48237 - 44032: 0x9393,
+ 48238 - 44032: 0x9394,
+ 48239 - 44032: 0x9395,
+ 48240 - 44032: 0x9396,
+ 48241 - 44032: 0x9397,
+ 48242 - 44032: 0x9398,
+ 48243 - 44032: 0x9399,
+ 48244 - 44032: 0x939A,
+ 48245 - 44032: 0x939B,
+ 48246 - 44032: 0x939C,
+ 48247 - 44032: 0x939D,
+ 48248 - 44032: 0x939E,
+ 48249 - 44032: 0x939F,
+ 48250 - 44032: 0x93A0,
+ 48251 - 44032: 0x93A1,
+ 48252 - 44032: 0x93A2,
+ 48253 - 44032: 0x93A3,
+ 48254 - 44032: 0x93A4,
+ 48255 - 44032: 0x93A5,
+ 48256 - 44032: 0x93A6,
+ 48257 - 44032: 0x93A7,
+ 48258 - 44032: 0x93A8,
+ 48259 - 44032: 0x93A9,
+ 48260 - 44032: 0xB9F6,
+ 48261 - 44032: 0xB9F7,
+ 48262 - 44032: 0x93AA,
+ 48263 - 44032: 0x93AB,
+ 48264 - 44032: 0xB9F8,
+ 48265 - 44032: 0x93AC,
+ 48266 - 44032: 0x93AD,
+ 48267 - 44032: 0xB9F9,
+ 48268 - 44032: 0xB9FA,
+ 48269 - 44032: 0x93AE,
+ 48270 - 44032: 0xB9FB,
+ 48271 - 44032: 0x93AF,
+ 48272 - 44032: 0x93B0,
+ 48273 - 44032: 0x93B1,
+ 48274 - 44032: 0x93B2,
+ 48275 - 44032: 0x93B3,
+ 48276 - 44032: 0xB9FC,
+ 48277 - 44032: 0xB9FD,
+ 48278 - 44032: 0x93B4,
+ 48279 - 44032: 0xB9FE,
+ 48280 - 44032: 0x93B5,
+ 48281 - 44032: 0xBAA1,
+ 48282 - 44032: 0xBAA2,
+ 48283 - 44032: 0x93B6,
+ 48284 - 44032: 0x93B7,
+ 48285 - 44032: 0x93B8,
+ 48286 - 44032: 0x93B9,
+ 48287 - 44032: 0x93BA,
+ 48288 - 44032: 0xBAA3,
+ 48289 - 44032: 0xBAA4,
+ 48290 - 44032: 0x93BB,
+ 48291 - 44032: 0x93BC,
+ 48292 - 44032: 0xBAA5,
+ 48293 - 44032: 0x93BD,
+ 48294 - 44032: 0x93BE,
+ 48295 - 44032: 0xBAA6,
+ 48296 - 44032: 0xBAA7,
+ 48297 - 44032: 0x93BF,
+ 48298 - 44032: 0x93C0,
+ 48299 - 44032: 0x93C1,
+ 48300 - 44032: 0x93C2,
+ 48301 - 44032: 0x93C3,
+ 48302 - 44032: 0x93C4,
+ 48303 - 44032: 0x93C5,
+ 48304 - 44032: 0xBAA8,
+ 48305 - 44032: 0xBAA9,
+ 48306 - 44032: 0x93C6,
+ 48307 - 44032: 0xBAAA,
+ 48308 - 44032: 0xBAAB,
+ 48309 - 44032: 0xBAAC,
+ 48310 - 44032: 0x93C7,
+ 48311 - 44032: 0x93C8,
+ 48312 - 44032: 0x93C9,
+ 48313 - 44032: 0x93CA,
+ 48314 - 44032: 0x93CB,
+ 48315 - 44032: 0x93CC,
+ 48316 - 44032: 0xBAAD,
+ 48317 - 44032: 0xBAAE,
+ 48318 - 44032: 0x93CD,
+ 48319 - 44032: 0x93CE,
+ 48320 - 44032: 0xBAAF,
+ 48321 - 44032: 0x93CF,
+ 48322 - 44032: 0x93D0,
+ 48323 - 44032: 0x93D1,
+ 48324 - 44032: 0xBAB0,
+ 48325 - 44032: 0x93D2,
+ 48326 - 44032: 0x93D3,
+ 48327 - 44032: 0x93D4,
+ 48328 - 44032: 0x93D5,
+ 48329 - 44032: 0x93D6,
+ 48330 - 44032: 0x93D7,
+ 48331 - 44032: 0x93D8,
+ 48332 - 44032: 0x93D9,
+ 48333 - 44032: 0xBAB1,
+ 48334 - 44032: 0x93DA,
+ 48335 - 44032: 0xBAB2,
+ 48336 - 44032: 0xBAB3,
+ 48337 - 44032: 0xBAB4,
+ 48338 - 44032: 0x93DB,
+ 48339 - 44032: 0x93DC,
+ 48340 - 44032: 0x93DD,
+ 48341 - 44032: 0xBAB5,
+ 48342 - 44032: 0x93DE,
+ 48343 - 44032: 0x93DF,
+ 48344 - 44032: 0xBAB6,
+ 48345 - 44032: 0x93E0,
+ 48346 - 44032: 0x93E1,
+ 48347 - 44032: 0x93E2,
+ 48348 - 44032: 0xBAB7,
+ 48349 - 44032: 0x93E3,
+ 48350 - 44032: 0x93E4,
+ 48351 - 44032: 0x93E5,
+ 48352 - 44032: 0x93E6,
+ 48353 - 44032: 0x93E7,
+ 48354 - 44032: 0x93E8,
+ 48355 - 44032: 0x93E9,
+ 48356 - 44032: 0x93EA,
+ 48357 - 44032: 0x93EB,
+ 48358 - 44032: 0x93EC,
+ 48359 - 44032: 0x93ED,
+ 48360 - 44032: 0x93EE,
+ 48361 - 44032: 0x93EF,
+ 48362 - 44032: 0x93F0,
+ 48363 - 44032: 0x93F1,
+ 48364 - 44032: 0x93F2,
+ 48365 - 44032: 0x93F3,
+ 48366 - 44032: 0x93F4,
+ 48367 - 44032: 0x93F5,
+ 48368 - 44032: 0x93F6,
+ 48369 - 44032: 0x93F7,
+ 48370 - 44032: 0x93F8,
+ 48371 - 44032: 0x93F9,
+ 48372 - 44032: 0xBAB8,
+ 48373 - 44032: 0xBAB9,
+ 48374 - 44032: 0xBABA,
+ 48375 - 44032: 0x93FA,
+ 48376 - 44032: 0xBABB,
+ 48377 - 44032: 0x93FB,
+ 48378 - 44032: 0x93FC,
+ 48379 - 44032: 0x93FD,
+ 48380 - 44032: 0xBABC,
+ 48381 - 44032: 0x93FE,
+ 48382 - 44032: 0x9441,
+ 48383 - 44032: 0x9442,
+ 48384 - 44032: 0x9443,
+ 48385 - 44032: 0x9444,
+ 48386 - 44032: 0x9445,
+ 48387 - 44032: 0x9446,
+ 48388 - 44032: 0xBABD,
+ 48389 - 44032: 0xBABE,
+ 48390 - 44032: 0x9447,
+ 48391 - 44032: 0xBABF,
+ 48392 - 44032: 0x9448,
+ 48393 - 44032: 0xBAC0,
+ 48394 - 44032: 0x9449,
+ 48395 - 44032: 0x944A,
+ 48396 - 44032: 0x944B,
+ 48397 - 44032: 0x944C,
+ 48398 - 44032: 0x944D,
+ 48399 - 44032: 0x944E,
+ 48400 - 44032: 0xBAC1,
+ 48401 - 44032: 0x944F,
+ 48402 - 44032: 0x9450,
+ 48403 - 44032: 0x9451,
+ 48404 - 44032: 0xBAC2,
+ 48405 - 44032: 0x9452,
+ 48406 - 44032: 0x9453,
+ 48407 - 44032: 0x9454,
+ 48408 - 44032: 0x9455,
+ 48409 - 44032: 0x9456,
+ 48410 - 44032: 0x9457,
+ 48411 - 44032: 0x9458,
+ 48412 - 44032: 0x9459,
+ 48413 - 44032: 0x945A,
+ 48414 - 44032: 0x9461,
+ 48415 - 44032: 0x9462,
+ 48416 - 44032: 0x9463,
+ 48417 - 44032: 0x9464,
+ 48418 - 44032: 0x9465,
+ 48419 - 44032: 0x9466,
+ 48420 - 44032: 0xBAC3,
+ 48421 - 44032: 0x9467,
+ 48422 - 44032: 0x9468,
+ 48423 - 44032: 0x9469,
+ 48424 - 44032: 0x946A,
+ 48425 - 44032: 0x946B,
+ 48426 - 44032: 0x946C,
+ 48427 - 44032: 0x946D,
+ 48428 - 44032: 0xBAC4,
+ 48429 - 44032: 0x946E,
+ 48430 - 44032: 0x946F,
+ 48431 - 44032: 0x9470,
+ 48432 - 44032: 0x9471,
+ 48433 - 44032: 0x9472,
+ 48434 - 44032: 0x9473,
+ 48435 - 44032: 0x9474,
+ 48436 - 44032: 0x9475,
+ 48437 - 44032: 0x9476,
+ 48438 - 44032: 0x9477,
+ 48439 - 44032: 0x9478,
+ 48440 - 44032: 0x9479,
+ 48441 - 44032: 0x947A,
+ 48442 - 44032: 0x9481,
+ 48443 - 44032: 0x9482,
+ 48444 - 44032: 0x9483,
+ 48445 - 44032: 0x9484,
+ 48446 - 44032: 0x9485,
+ 48447 - 44032: 0x9486,
+ 48448 - 44032: 0xBAC5,
+ 48449 - 44032: 0x9487,
+ 48450 - 44032: 0x9488,
+ 48451 - 44032: 0x9489,
+ 48452 - 44032: 0x948A,
+ 48453 - 44032: 0x948B,
+ 48454 - 44032: 0x948C,
+ 48455 - 44032: 0x948D,
+ 48456 - 44032: 0xBAC6,
+ 48457 - 44032: 0xBAC7,
+ 48458 - 44032: 0x948E,
+ 48459 - 44032: 0x948F,
+ 48460 - 44032: 0xBAC8,
+ 48461 - 44032: 0x9490,
+ 48462 - 44032: 0x9491,
+ 48463 - 44032: 0x9492,
+ 48464 - 44032: 0xBAC9,
+ 48465 - 44032: 0x9493,
+ 48466 - 44032: 0x9494,
+ 48467 - 44032: 0x9495,
+ 48468 - 44032: 0x9496,
+ 48469 - 44032: 0x9497,
+ 48470 - 44032: 0x9498,
+ 48471 - 44032: 0x9499,
+ 48472 - 44032: 0xBACA,
+ 48473 - 44032: 0xBACB,
+ 48474 - 44032: 0x949A,
+ 48475 - 44032: 0x949B,
+ 48476 - 44032: 0x949C,
+ 48477 - 44032: 0x949D,
+ 48478 - 44032: 0x949E,
+ 48479 - 44032: 0x949F,
+ 48480 - 44032: 0x94A0,
+ 48481 - 44032: 0x94A1,
+ 48482 - 44032: 0x94A2,
+ 48483 - 44032: 0x94A3,
+ 48484 - 44032: 0xBACC,
+ 48485 - 44032: 0x94A4,
+ 48486 - 44032: 0x94A5,
+ 48487 - 44032: 0x94A6,
+ 48488 - 44032: 0xBACD,
+ 48489 - 44032: 0x94A7,
+ 48490 - 44032: 0x94A8,
+ 48491 - 44032: 0x94A9,
+ 48492 - 44032: 0x94AA,
+ 48493 - 44032: 0x94AB,
+ 48494 - 44032: 0x94AC,
+ 48495 - 44032: 0x94AD,
+ 48496 - 44032: 0x94AE,
+ 48497 - 44032: 0x94AF,
+ 48498 - 44032: 0x94B0,
+ 48499 - 44032: 0x94B1,
+ 48500 - 44032: 0x94B2,
+ 48501 - 44032: 0x94B3,
+ 48502 - 44032: 0x94B4,
+ 48503 - 44032: 0x94B5,
+ 48504 - 44032: 0x94B6,
+ 48505 - 44032: 0x94B7,
+ 48506 - 44032: 0x94B8,
+ 48507 - 44032: 0x94B9,
+ 48508 - 44032: 0x94BA,
+ 48509 - 44032: 0x94BB,
+ 48510 - 44032: 0x94BC,
+ 48511 - 44032: 0x94BD,
+ 48512 - 44032: 0xBACE,
+ 48513 - 44032: 0xBACF,
+ 48514 - 44032: 0x94BE,
+ 48515 - 44032: 0x94BF,
+ 48516 - 44032: 0xBAD0,
+ 48517 - 44032: 0x94C0,
+ 48518 - 44032: 0x94C1,
+ 48519 - 44032: 0xBAD1,
+ 48520 - 44032: 0xBAD2,
+ 48521 - 44032: 0xBAD3,
+ 48522 - 44032: 0xBAD4,
+ 48523 - 44032: 0x94C2,
+ 48524 - 44032: 0x94C3,
+ 48525 - 44032: 0x94C4,
+ 48526 - 44032: 0x94C5,
+ 48527 - 44032: 0x94C6,
+ 48528 - 44032: 0xBAD5,
+ 48529 - 44032: 0xBAD6,
+ 48530 - 44032: 0x94C7,
+ 48531 - 44032: 0xBAD7,
+ 48532 - 44032: 0x94C8,
+ 48533 - 44032: 0xBAD8,
+ 48534 - 44032: 0x94C9,
+ 48535 - 44032: 0x94CA,
+ 48536 - 44032: 0x94CB,
+ 48537 - 44032: 0xBAD9,
+ 48538 - 44032: 0xBADA,
+ 48539 - 44032: 0x94CC,
+ 48540 - 44032: 0xBADB,
+ 48541 - 44032: 0x94CD,
+ 48542 - 44032: 0x94CE,
+ 48543 - 44032: 0x94CF,
+ 48544 - 44032: 0x94D0,
+ 48545 - 44032: 0x94D1,
+ 48546 - 44032: 0x94D2,
+ 48547 - 44032: 0x94D3,
+ 48548 - 44032: 0xBADC,
+ 48549 - 44032: 0x94D4,
+ 48550 - 44032: 0x94D5,
+ 48551 - 44032: 0x94D6,
+ 48552 - 44032: 0x94D7,
+ 48553 - 44032: 0x94D8,
+ 48554 - 44032: 0x94D9,
+ 48555 - 44032: 0x94DA,
+ 48556 - 44032: 0x94DB,
+ 48557 - 44032: 0x94DC,
+ 48558 - 44032: 0x94DD,
+ 48559 - 44032: 0x94DE,
+ 48560 - 44032: 0xBADD,
+ 48561 - 44032: 0x94DF,
+ 48562 - 44032: 0x94E0,
+ 48563 - 44032: 0x94E1,
+ 48564 - 44032: 0x94E2,
+ 48565 - 44032: 0x94E3,
+ 48566 - 44032: 0x94E4,
+ 48567 - 44032: 0x94E5,
+ 48568 - 44032: 0xBADE,
+ 48569 - 44032: 0x94E6,
+ 48570 - 44032: 0x94E7,
+ 48571 - 44032: 0x94E8,
+ 48572 - 44032: 0x94E9,
+ 48573 - 44032: 0x94EA,
+ 48574 - 44032: 0x94EB,
+ 48575 - 44032: 0x94EC,
+ 48576 - 44032: 0x94ED,
+ 48577 - 44032: 0x94EE,
+ 48578 - 44032: 0x94EF,
+ 48579 - 44032: 0x94F0,
+ 48580 - 44032: 0x94F1,
+ 48581 - 44032: 0x94F2,
+ 48582 - 44032: 0x94F3,
+ 48583 - 44032: 0x94F4,
+ 48584 - 44032: 0x94F5,
+ 48585 - 44032: 0x94F6,
+ 48586 - 44032: 0x94F7,
+ 48587 - 44032: 0x94F8,
+ 48588 - 44032: 0x94F9,
+ 48589 - 44032: 0x94FA,
+ 48590 - 44032: 0x94FB,
+ 48591 - 44032: 0x94FC,
+ 48592 - 44032: 0x94FD,
+ 48593 - 44032: 0x94FE,
+ 48594 - 44032: 0x9541,
+ 48595 - 44032: 0x9542,
+ 48596 - 44032: 0xBADF,
+ 48597 - 44032: 0xBAE0,
+ 48598 - 44032: 0x9543,
+ 48599 - 44032: 0x9544,
+ 48600 - 44032: 0xBAE1,
+ 48601 - 44032: 0x9545,
+ 48602 - 44032: 0x9546,
+ 48603 - 44032: 0x9547,
+ 48604 - 44032: 0xBAE2,
+ 48605 - 44032: 0x9548,
+ 48606 - 44032: 0x9549,
+ 48607 - 44032: 0x954A,
+ 48608 - 44032: 0x954B,
+ 48609 - 44032: 0x954C,
+ 48610 - 44032: 0x954D,
+ 48611 - 44032: 0x954E,
+ 48612 - 44032: 0x954F,
+ 48613 - 44032: 0x9550,
+ 48614 - 44032: 0x9551,
+ 48615 - 44032: 0x9552,
+ 48616 - 44032: 0x9553,
+ 48617 - 44032: 0xBAE3,
+ 48618 - 44032: 0x9554,
+ 48619 - 44032: 0x9555,
+ 48620 - 44032: 0x9556,
+ 48621 - 44032: 0x9557,
+ 48622 - 44032: 0x9558,
+ 48623 - 44032: 0x9559,
+ 48624 - 44032: 0xBAE4,
+ 48625 - 44032: 0x955A,
+ 48626 - 44032: 0x9561,
+ 48627 - 44032: 0x9562,
+ 48628 - 44032: 0xBAE5,
+ 48629 - 44032: 0x9563,
+ 48630 - 44032: 0x9564,
+ 48631 - 44032: 0x9565,
+ 48632 - 44032: 0xBAE6,
+ 48633 - 44032: 0x9566,
+ 48634 - 44032: 0x9567,
+ 48635 - 44032: 0x9568,
+ 48636 - 44032: 0x9569,
+ 48637 - 44032: 0x956A,
+ 48638 - 44032: 0x956B,
+ 48639 - 44032: 0x956C,
+ 48640 - 44032: 0xBAE7,
+ 48641 - 44032: 0x956D,
+ 48642 - 44032: 0x956E,
+ 48643 - 44032: 0xBAE8,
+ 48644 - 44032: 0x956F,
+ 48645 - 44032: 0xBAE9,
+ 48646 - 44032: 0x9570,
+ 48647 - 44032: 0x9571,
+ 48648 - 44032: 0x9572,
+ 48649 - 44032: 0x9573,
+ 48650 - 44032: 0x9574,
+ 48651 - 44032: 0x9575,
+ 48652 - 44032: 0xBAEA,
+ 48653 - 44032: 0xBAEB,
+ 48654 - 44032: 0x9576,
+ 48655 - 44032: 0x9577,
+ 48656 - 44032: 0xBAEC,
+ 48657 - 44032: 0x9578,
+ 48658 - 44032: 0x9579,
+ 48659 - 44032: 0x957A,
+ 48660 - 44032: 0xBAED,
+ 48661 - 44032: 0x9581,
+ 48662 - 44032: 0x9582,
+ 48663 - 44032: 0x9583,
+ 48664 - 44032: 0x9584,
+ 48665 - 44032: 0x9585,
+ 48666 - 44032: 0x9586,
+ 48667 - 44032: 0x9587,
+ 48668 - 44032: 0xBAEE,
+ 48669 - 44032: 0xBAEF,
+ 48670 - 44032: 0x9588,
+ 48671 - 44032: 0xBAF0,
+ 48672 - 44032: 0x9589,
+ 48673 - 44032: 0x958A,
+ 48674 - 44032: 0x958B,
+ 48675 - 44032: 0x958C,
+ 48676 - 44032: 0x958D,
+ 48677 - 44032: 0x958E,
+ 48678 - 44032: 0x958F,
+ 48679 - 44032: 0x9590,
+ 48680 - 44032: 0x9591,
+ 48681 - 44032: 0x9592,
+ 48682 - 44032: 0x9593,
+ 48683 - 44032: 0x9594,
+ 48684 - 44032: 0x9595,
+ 48685 - 44032: 0x9596,
+ 48686 - 44032: 0x9597,
+ 48687 - 44032: 0x9598,
+ 48688 - 44032: 0x9599,
+ 48689 - 44032: 0x959A,
+ 48690 - 44032: 0x959B,
+ 48691 - 44032: 0x959C,
+ 48692 - 44032: 0x959D,
+ 48693 - 44032: 0x959E,
+ 48694 - 44032: 0x959F,
+ 48695 - 44032: 0x95A0,
+ 48696 - 44032: 0x95A1,
+ 48697 - 44032: 0x95A2,
+ 48698 - 44032: 0x95A3,
+ 48699 - 44032: 0x95A4,
+ 48700 - 44032: 0x95A5,
+ 48701 - 44032: 0x95A6,
+ 48702 - 44032: 0x95A7,
+ 48703 - 44032: 0x95A8,
+ 48704 - 44032: 0x95A9,
+ 48705 - 44032: 0x95AA,
+ 48706 - 44032: 0x95AB,
+ 48707 - 44032: 0x95AC,
+ 48708 - 44032: 0xBAF1,
+ 48709 - 44032: 0xBAF2,
+ 48710 - 44032: 0x95AD,
+ 48711 - 44032: 0x95AE,
+ 48712 - 44032: 0xBAF3,
+ 48713 - 44032: 0x95AF,
+ 48714 - 44032: 0x95B0,
+ 48715 - 44032: 0x95B1,
+ 48716 - 44032: 0xBAF4,
+ 48717 - 44032: 0x95B2,
+ 48718 - 44032: 0xBAF5,
+ 48719 - 44032: 0x95B3,
+ 48720 - 44032: 0x95B4,
+ 48721 - 44032: 0x95B5,
+ 48722 - 44032: 0x95B6,
+ 48723 - 44032: 0x95B7,
+ 48724 - 44032: 0xBAF6,
+ 48725 - 44032: 0xBAF7,
+ 48726 - 44032: 0x95B8,
+ 48727 - 44032: 0xBAF8,
+ 48728 - 44032: 0x95B9,
+ 48729 - 44032: 0xBAF9,
+ 48730 - 44032: 0xBAFA,
+ 48731 - 44032: 0xBAFB,
+ 48732 - 44032: 0x95BA,
+ 48733 - 44032: 0x95BB,
+ 48734 - 44032: 0x95BC,
+ 48735 - 44032: 0x95BD,
+ 48736 - 44032: 0xBAFC,
+ 48737 - 44032: 0xBAFD,
+ 48738 - 44032: 0x95BE,
+ 48739 - 44032: 0x95BF,
+ 48740 - 44032: 0xBAFE,
+ 48741 - 44032: 0x95C0,
+ 48742 - 44032: 0x95C1,
+ 48743 - 44032: 0x95C2,
+ 48744 - 44032: 0xBBA1,
+ 48745 - 44032: 0x95C3,
+ 48746 - 44032: 0xBBA2,
+ 48747 - 44032: 0x95C4,
+ 48748 - 44032: 0x95C5,
+ 48749 - 44032: 0x95C6,
+ 48750 - 44032: 0x95C7,
+ 48751 - 44032: 0x95C8,
+ 48752 - 44032: 0xBBA3,
+ 48753 - 44032: 0xBBA4,
+ 48754 - 44032: 0x95C9,
+ 48755 - 44032: 0xBBA5,
+ 48756 - 44032: 0xBBA6,
+ 48757 - 44032: 0xBBA7,
+ 48758 - 44032: 0x95CA,
+ 48759 - 44032: 0x95CB,
+ 48760 - 44032: 0x95CC,
+ 48761 - 44032: 0x95CD,
+ 48762 - 44032: 0x95CE,
+ 48763 - 44032: 0xBBA8,
+ 48764 - 44032: 0xBBA9,
+ 48765 - 44032: 0xBBAA,
+ 48766 - 44032: 0x95CF,
+ 48767 - 44032: 0x95D0,
+ 48768 - 44032: 0xBBAB,
+ 48769 - 44032: 0x95D1,
+ 48770 - 44032: 0x95D2,
+ 48771 - 44032: 0x95D3,
+ 48772 - 44032: 0xBBAC,
+ 48773 - 44032: 0x95D4,
+ 48774 - 44032: 0x95D5,
+ 48775 - 44032: 0x95D6,
+ 48776 - 44032: 0x95D7,
+ 48777 - 44032: 0x95D8,
+ 48778 - 44032: 0x95D9,
+ 48779 - 44032: 0x95DA,
+ 48780 - 44032: 0xBBAD,
+ 48781 - 44032: 0xBBAE,
+ 48782 - 44032: 0x95DB,
+ 48783 - 44032: 0xBBAF,
+ 48784 - 44032: 0xBBB0,
+ 48785 - 44032: 0xBBB1,
+ 48786 - 44032: 0x95DC,
+ 48787 - 44032: 0x95DD,
+ 48788 - 44032: 0x95DE,
+ 48789 - 44032: 0x95DF,
+ 48790 - 44032: 0x95E0,
+ 48791 - 44032: 0x95E1,
+ 48792 - 44032: 0xBBB2,
+ 48793 - 44032: 0xBBB3,
+ 48794 - 44032: 0x95E2,
+ 48795 - 44032: 0x95E3,
+ 48796 - 44032: 0x95E4,
+ 48797 - 44032: 0x95E5,
+ 48798 - 44032: 0x95E6,
+ 48799 - 44032: 0x95E7,
+ 48800 - 44032: 0x95E8,
+ 48801 - 44032: 0x95E9,
+ 48802 - 44032: 0x95EA,
+ 48803 - 44032: 0x95EB,
+ 48804 - 44032: 0x95EC,
+ 48805 - 44032: 0x95ED,
+ 48806 - 44032: 0x95EE,
+ 48807 - 44032: 0x95EF,
+ 48808 - 44032: 0xBBB4,
+ 48809 - 44032: 0x95F0,
+ 48810 - 44032: 0x95F1,
+ 48811 - 44032: 0x95F2,
+ 48812 - 44032: 0x95F3,
+ 48813 - 44032: 0x95F4,
+ 48814 - 44032: 0x95F5,
+ 48815 - 44032: 0x95F6,
+ 48816 - 44032: 0x95F7,
+ 48817 - 44032: 0x95F8,
+ 48818 - 44032: 0x95F9,
+ 48819 - 44032: 0x95FA,
+ 48820 - 44032: 0x95FB,
+ 48821 - 44032: 0x95FC,
+ 48822 - 44032: 0x95FD,
+ 48823 - 44032: 0x95FE,
+ 48824 - 44032: 0x9641,
+ 48825 - 44032: 0x9642,
+ 48826 - 44032: 0x9643,
+ 48827 - 44032: 0x9644,
+ 48828 - 44032: 0x9645,
+ 48829 - 44032: 0x9646,
+ 48830 - 44032: 0x9647,
+ 48831 - 44032: 0x9648,
+ 48832 - 44032: 0x9649,
+ 48833 - 44032: 0x964A,
+ 48834 - 44032: 0x964B,
+ 48835 - 44032: 0x964C,
+ 48836 - 44032: 0x964D,
+ 48837 - 44032: 0x964E,
+ 48838 - 44032: 0x964F,
+ 48839 - 44032: 0x9650,
+ 48840 - 44032: 0x9651,
+ 48841 - 44032: 0x9652,
+ 48842 - 44032: 0x9653,
+ 48843 - 44032: 0x9654,
+ 48844 - 44032: 0x9655,
+ 48845 - 44032: 0x9656,
+ 48846 - 44032: 0x9657,
+ 48847 - 44032: 0x9658,
+ 48848 - 44032: 0xBBB5,
+ 48849 - 44032: 0xBBB6,
+ 48850 - 44032: 0x9659,
+ 48851 - 44032: 0x965A,
+ 48852 - 44032: 0xBBB7,
+ 48853 - 44032: 0x9661,
+ 48854 - 44032: 0x9662,
+ 48855 - 44032: 0xBBB8,
+ 48856 - 44032: 0xBBB9,
+ 48857 - 44032: 0x9663,
+ 48858 - 44032: 0x9664,
+ 48859 - 44032: 0x9665,
+ 48860 - 44032: 0x9666,
+ 48861 - 44032: 0x9667,
+ 48862 - 44032: 0x9668,
+ 48863 - 44032: 0x9669,
+ 48864 - 44032: 0xBBBA,
+ 48865 - 44032: 0x966A,
+ 48866 - 44032: 0x966B,
+ 48867 - 44032: 0xBBBB,
+ 48868 - 44032: 0xBBBC,
+ 48869 - 44032: 0xBBBD,
+ 48870 - 44032: 0x966C,
+ 48871 - 44032: 0x966D,
+ 48872 - 44032: 0x966E,
+ 48873 - 44032: 0x966F,
+ 48874 - 44032: 0x9670,
+ 48875 - 44032: 0x9671,
+ 48876 - 44032: 0xBBBE,
+ 48877 - 44032: 0x9672,
+ 48878 - 44032: 0x9673,
+ 48879 - 44032: 0x9674,
+ 48880 - 44032: 0x9675,
+ 48881 - 44032: 0x9676,
+ 48882 - 44032: 0x9677,
+ 48883 - 44032: 0x9678,
+ 48884 - 44032: 0x9679,
+ 48885 - 44032: 0x967A,
+ 48886 - 44032: 0x9681,
+ 48887 - 44032: 0x9682,
+ 48888 - 44032: 0x9683,
+ 48889 - 44032: 0x9684,
+ 48890 - 44032: 0x9685,
+ 48891 - 44032: 0x9686,
+ 48892 - 44032: 0x9687,
+ 48893 - 44032: 0x9688,
+ 48894 - 44032: 0x9689,
+ 48895 - 44032: 0x968A,
+ 48896 - 44032: 0x968B,
+ 48897 - 44032: 0xBBBF,
+ 48898 - 44032: 0x968C,
+ 48899 - 44032: 0x968D,
+ 48900 - 44032: 0x968E,
+ 48901 - 44032: 0x968F,
+ 48902 - 44032: 0x9690,
+ 48903 - 44032: 0x9691,
+ 48904 - 44032: 0xBBC0,
+ 48905 - 44032: 0xBBC1,
+ 48906 - 44032: 0x9692,
+ 48907 - 44032: 0x9693,
+ 48908 - 44032: 0x9694,
+ 48909 - 44032: 0x9695,
+ 48910 - 44032: 0x9696,
+ 48911 - 44032: 0x9697,
+ 48912 - 44032: 0x9698,
+ 48913 - 44032: 0x9699,
+ 48914 - 44032: 0x969A,
+ 48915 - 44032: 0x969B,
+ 48916 - 44032: 0x969C,
+ 48917 - 44032: 0x969D,
+ 48918 - 44032: 0x969E,
+ 48919 - 44032: 0x969F,
+ 48920 - 44032: 0xBBC2,
+ 48921 - 44032: 0xBBC3,
+ 48922 - 44032: 0x96A0,
+ 48923 - 44032: 0xBBC4,
+ 48924 - 44032: 0xBBC5,
+ 48925 - 44032: 0xBBC6,
+ 48926 - 44032: 0x96A1,
+ 48927 - 44032: 0x96A2,
+ 48928 - 44032: 0x96A3,
+ 48929 - 44032: 0x96A4,
+ 48930 - 44032: 0x96A5,
+ 48931 - 44032: 0x96A6,
+ 48932 - 44032: 0x96A7,
+ 48933 - 44032: 0x96A8,
+ 48934 - 44032: 0x96A9,
+ 48935 - 44032: 0x96AA,
+ 48936 - 44032: 0x96AB,
+ 48937 - 44032: 0x96AC,
+ 48938 - 44032: 0x96AD,
+ 48939 - 44032: 0x96AE,
+ 48940 - 44032: 0x96AF,
+ 48941 - 44032: 0x96B0,
+ 48942 - 44032: 0x96B1,
+ 48943 - 44032: 0x96B2,
+ 48944 - 44032: 0x96B3,
+ 48945 - 44032: 0x96B4,
+ 48946 - 44032: 0x96B5,
+ 48947 - 44032: 0x96B6,
+ 48948 - 44032: 0x96B7,
+ 48949 - 44032: 0x96B8,
+ 48950 - 44032: 0x96B9,
+ 48951 - 44032: 0x96BA,
+ 48952 - 44032: 0x96BB,
+ 48953 - 44032: 0x96BC,
+ 48954 - 44032: 0x96BD,
+ 48955 - 44032: 0x96BE,
+ 48956 - 44032: 0x96BF,
+ 48957 - 44032: 0x96C0,
+ 48958 - 44032: 0x96C1,
+ 48959 - 44032: 0x96C2,
+ 48960 - 44032: 0xBBC7,
+ 48961 - 44032: 0xBBC8,
+ 48962 - 44032: 0x96C3,
+ 48963 - 44032: 0x96C4,
+ 48964 - 44032: 0xBBC9,
+ 48965 - 44032: 0x96C5,
+ 48966 - 44032: 0x96C6,
+ 48967 - 44032: 0x96C7,
+ 48968 - 44032: 0xBBCA,
+ 48969 - 44032: 0x96C8,
+ 48970 - 44032: 0x96C9,
+ 48971 - 44032: 0x96CA,
+ 48972 - 44032: 0x96CB,
+ 48973 - 44032: 0x96CC,
+ 48974 - 44032: 0x96CD,
+ 48975 - 44032: 0x96CE,
+ 48976 - 44032: 0xBBCB,
+ 48977 - 44032: 0xBBCC,
+ 48978 - 44032: 0x96CF,
+ 48979 - 44032: 0x96D0,
+ 48980 - 44032: 0x96D1,
+ 48981 - 44032: 0xBBCD,
+ 48982 - 44032: 0x96D2,
+ 48983 - 44032: 0x96D3,
+ 48984 - 44032: 0x96D4,
+ 48985 - 44032: 0x96D5,
+ 48986 - 44032: 0x96D6,
+ 48987 - 44032: 0x96D7,
+ 48988 - 44032: 0x96D8,
+ 48989 - 44032: 0x96D9,
+ 48990 - 44032: 0x96DA,
+ 48991 - 44032: 0x96DB,
+ 48992 - 44032: 0x96DC,
+ 48993 - 44032: 0x96DD,
+ 48994 - 44032: 0x96DE,
+ 48995 - 44032: 0x96DF,
+ 48996 - 44032: 0x96E0,
+ 48997 - 44032: 0x96E1,
+ 48998 - 44032: 0x96E2,
+ 48999 - 44032: 0x96E3,
+ 49000 - 44032: 0x96E4,
+ 49001 - 44032: 0x96E5,
+ 49002 - 44032: 0x96E6,
+ 49003 - 44032: 0x96E7,
+ 49004 - 44032: 0x96E8,
+ 49005 - 44032: 0x96E9,
+ 49006 - 44032: 0x96EA,
+ 49007 - 44032: 0x96EB,
+ 49008 - 44032: 0x96EC,
+ 49009 - 44032: 0x96ED,
+ 49010 - 44032: 0x96EE,
+ 49011 - 44032: 0x96EF,
+ 49012 - 44032: 0x96F0,
+ 49013 - 44032: 0x96F1,
+ 49014 - 44032: 0x96F2,
+ 49015 - 44032: 0x96F3,
+ 49016 - 44032: 0x96F4,
+ 49017 - 44032: 0x96F5,
+ 49018 - 44032: 0x96F6,
+ 49019 - 44032: 0x96F7,
+ 49020 - 44032: 0x96F8,
+ 49021 - 44032: 0x96F9,
+ 49022 - 44032: 0x96FA,
+ 49023 - 44032: 0x96FB,
+ 49024 - 44032: 0x96FC,
+ 49025 - 44032: 0x96FD,
+ 49026 - 44032: 0x96FE,
+ 49027 - 44032: 0x9741,
+ 49028 - 44032: 0x9742,
+ 49029 - 44032: 0x9743,
+ 49030 - 44032: 0x9744,
+ 49031 - 44032: 0x9745,
+ 49032 - 44032: 0x9746,
+ 49033 - 44032: 0x9747,
+ 49034 - 44032: 0x9748,
+ 49035 - 44032: 0x9749,
+ 49036 - 44032: 0x974A,
+ 49037 - 44032: 0x974B,
+ 49038 - 44032: 0x974C,
+ 49039 - 44032: 0x974D,
+ 49040 - 44032: 0x974E,
+ 49041 - 44032: 0x974F,
+ 49042 - 44032: 0x9750,
+ 49043 - 44032: 0x9751,
+ 49044 - 44032: 0xBBCE,
+ 49045 - 44032: 0x9752,
+ 49046 - 44032: 0x9753,
+ 49047 - 44032: 0x9754,
+ 49048 - 44032: 0x9755,
+ 49049 - 44032: 0x9756,
+ 49050 - 44032: 0x9757,
+ 49051 - 44032: 0x9758,
+ 49052 - 44032: 0x9759,
+ 49053 - 44032: 0x975A,
+ 49054 - 44032: 0x9761,
+ 49055 - 44032: 0x9762,
+ 49056 - 44032: 0x9763,
+ 49057 - 44032: 0x9764,
+ 49058 - 44032: 0x9765,
+ 49059 - 44032: 0x9766,
+ 49060 - 44032: 0x9767,
+ 49061 - 44032: 0x9768,
+ 49062 - 44032: 0x9769,
+ 49063 - 44032: 0x976A,
+ 49064 - 44032: 0x976B,
+ 49065 - 44032: 0x976C,
+ 49066 - 44032: 0x976D,
+ 49067 - 44032: 0x976E,
+ 49068 - 44032: 0x976F,
+ 49069 - 44032: 0x9770,
+ 49070 - 44032: 0x9771,
+ 49071 - 44032: 0x9772,
+ 49072 - 44032: 0xBBCF,
+ 49073 - 44032: 0x9773,
+ 49074 - 44032: 0x9774,
+ 49075 - 44032: 0x9775,
+ 49076 - 44032: 0x9776,
+ 49077 - 44032: 0x9777,
+ 49078 - 44032: 0x9778,
+ 49079 - 44032: 0x9779,
+ 49080 - 44032: 0x977A,
+ 49081 - 44032: 0x9781,
+ 49082 - 44032: 0x9782,
+ 49083 - 44032: 0x9783,
+ 49084 - 44032: 0x9784,
+ 49085 - 44032: 0x9785,
+ 49086 - 44032: 0x9786,
+ 49087 - 44032: 0x9787,
+ 49088 - 44032: 0x9788,
+ 49089 - 44032: 0x9789,
+ 49090 - 44032: 0x978A,
+ 49091 - 44032: 0x978B,
+ 49092 - 44032: 0x978C,
+ 49093 - 44032: 0xBBD0,
+ 49094 - 44032: 0x978D,
+ 49095 - 44032: 0x978E,
+ 49096 - 44032: 0x978F,
+ 49097 - 44032: 0x9790,
+ 49098 - 44032: 0x9791,
+ 49099 - 44032: 0x9792,
+ 49100 - 44032: 0xBBD1,
+ 49101 - 44032: 0xBBD2,
+ 49102 - 44032: 0x9793,
+ 49103 - 44032: 0x9794,
+ 49104 - 44032: 0xBBD3,
+ 49105 - 44032: 0x9795,
+ 49106 - 44032: 0x9796,
+ 49107 - 44032: 0x9797,
+ 49108 - 44032: 0xBBD4,
+ 49109 - 44032: 0x9798,
+ 49110 - 44032: 0x9799,
+ 49111 - 44032: 0x979A,
+ 49112 - 44032: 0x979B,
+ 49113 - 44032: 0x979C,
+ 49114 - 44032: 0x979D,
+ 49115 - 44032: 0x979E,
+ 49116 - 44032: 0xBBD5,
+ 49117 - 44032: 0x979F,
+ 49118 - 44032: 0x97A0,
+ 49119 - 44032: 0xBBD6,
+ 49120 - 44032: 0x97A1,
+ 49121 - 44032: 0xBBD7,
+ 49122 - 44032: 0x97A2,
+ 49123 - 44032: 0x97A3,
+ 49124 - 44032: 0x97A4,
+ 49125 - 44032: 0x97A5,
+ 49126 - 44032: 0x97A6,
+ 49127 - 44032: 0x97A7,
+ 49128 - 44032: 0x97A8,
+ 49129 - 44032: 0x97A9,
+ 49130 - 44032: 0x97AA,
+ 49131 - 44032: 0x97AB,
+ 49132 - 44032: 0x97AC,
+ 49133 - 44032: 0x97AD,
+ 49134 - 44032: 0x97AE,
+ 49135 - 44032: 0x97AF,
+ 49136 - 44032: 0x97B0,
+ 49137 - 44032: 0x97B1,
+ 49138 - 44032: 0x97B2,
+ 49139 - 44032: 0x97B3,
+ 49140 - 44032: 0x97B4,
+ 49141 - 44032: 0x97B5,
+ 49142 - 44032: 0x97B6,
+ 49143 - 44032: 0x97B7,
+ 49144 - 44032: 0x97B8,
+ 49145 - 44032: 0x97B9,
+ 49146 - 44032: 0x97BA,
+ 49147 - 44032: 0x97BB,
+ 49148 - 44032: 0x97BC,
+ 49149 - 44032: 0x97BD,
+ 49150 - 44032: 0x97BE,
+ 49151 - 44032: 0x97BF,
+ 49152 - 44032: 0x97C0,
+ 49153 - 44032: 0x97C1,
+ 49154 - 44032: 0x97C2,
+ 49155 - 44032: 0x97C3,
+ 49156 - 44032: 0x97C4,
+ 49157 - 44032: 0x97C5,
+ 49158 - 44032: 0x97C6,
+ 49159 - 44032: 0x97C7,
+ 49160 - 44032: 0x97C8,
+ 49161 - 44032: 0x97C9,
+ 49162 - 44032: 0x97CA,
+ 49163 - 44032: 0x97CB,
+ 49164 - 44032: 0x97CC,
+ 49165 - 44032: 0x97CD,
+ 49166 - 44032: 0x97CE,
+ 49167 - 44032: 0x97CF,
+ 49168 - 44032: 0x97D0,
+ 49169 - 44032: 0x97D1,
+ 49170 - 44032: 0x97D2,
+ 49171 - 44032: 0x97D3,
+ 49172 - 44032: 0x97D4,
+ 49173 - 44032: 0x97D5,
+ 49174 - 44032: 0x97D6,
+ 49175 - 44032: 0x97D7,
+ 49176 - 44032: 0x97D8,
+ 49177 - 44032: 0x97D9,
+ 49178 - 44032: 0x97DA,
+ 49179 - 44032: 0x97DB,
+ 49180 - 44032: 0x97DC,
+ 49181 - 44032: 0x97DD,
+ 49182 - 44032: 0x97DE,
+ 49183 - 44032: 0x97DF,
+ 49184 - 44032: 0x97E0,
+ 49185 - 44032: 0x97E1,
+ 49186 - 44032: 0x97E2,
+ 49187 - 44032: 0x97E3,
+ 49188 - 44032: 0x97E4,
+ 49189 - 44032: 0x97E5,
+ 49190 - 44032: 0x97E6,
+ 49191 - 44032: 0x97E7,
+ 49192 - 44032: 0x97E8,
+ 49193 - 44032: 0x97E9,
+ 49194 - 44032: 0x97EA,
+ 49195 - 44032: 0x97EB,
+ 49196 - 44032: 0x97EC,
+ 49197 - 44032: 0x97ED,
+ 49198 - 44032: 0x97EE,
+ 49199 - 44032: 0x97EF,
+ 49200 - 44032: 0x97F0,
+ 49201 - 44032: 0x97F1,
+ 49202 - 44032: 0x97F2,
+ 49203 - 44032: 0x97F3,
+ 49204 - 44032: 0x97F4,
+ 49205 - 44032: 0x97F5,
+ 49206 - 44032: 0x97F6,
+ 49207 - 44032: 0x97F7,
+ 49208 - 44032: 0x97F8,
+ 49209 - 44032: 0x97F9,
+ 49210 - 44032: 0x97FA,
+ 49211 - 44032: 0x97FB,
+ 49212 - 44032: 0xBBD8,
+ 49213 - 44032: 0x97FC,
+ 49214 - 44032: 0x97FD,
+ 49215 - 44032: 0x97FE,
+ 49216 - 44032: 0x9841,
+ 49217 - 44032: 0x9842,
+ 49218 - 44032: 0x9843,
+ 49219 - 44032: 0x9844,
+ 49220 - 44032: 0x9845,
+ 49221 - 44032: 0x9846,
+ 49222 - 44032: 0x9847,
+ 49223 - 44032: 0x9848,
+ 49224 - 44032: 0x9849,
+ 49225 - 44032: 0x984A,
+ 49226 - 44032: 0x984B,
+ 49227 - 44032: 0x984C,
+ 49228 - 44032: 0x984D,
+ 49229 - 44032: 0x984E,
+ 49230 - 44032: 0x984F,
+ 49231 - 44032: 0x9850,
+ 49232 - 44032: 0x9851,
+ 49233 - 44032: 0xBBD9,
+ 49234 - 44032: 0x9852,
+ 49235 - 44032: 0x9853,
+ 49236 - 44032: 0x9854,
+ 49237 - 44032: 0x9855,
+ 49238 - 44032: 0x9856,
+ 49239 - 44032: 0x9857,
+ 49240 - 44032: 0xBBDA,
+ 49241 - 44032: 0x9858,
+ 49242 - 44032: 0x9859,
+ 49243 - 44032: 0x985A,
+ 49244 - 44032: 0xBBDB,
+ 49245 - 44032: 0x9861,
+ 49246 - 44032: 0x9862,
+ 49247 - 44032: 0x9863,
+ 49248 - 44032: 0xBBDC,
+ 49249 - 44032: 0x9864,
+ 49250 - 44032: 0x9865,
+ 49251 - 44032: 0x9866,
+ 49252 - 44032: 0x9867,
+ 49253 - 44032: 0x9868,
+ 49254 - 44032: 0x9869,
+ 49255 - 44032: 0x986A,
+ 49256 - 44032: 0xBBDD,
+ 49257 - 44032: 0xBBDE,
+ 49258 - 44032: 0x986B,
+ 49259 - 44032: 0x986C,
+ 49260 - 44032: 0x986D,
+ 49261 - 44032: 0x986E,
+ 49262 - 44032: 0x986F,
+ 49263 - 44032: 0x9870,
+ 49264 - 44032: 0x9871,
+ 49265 - 44032: 0x9872,
+ 49266 - 44032: 0x9873,
+ 49267 - 44032: 0x9874,
+ 49268 - 44032: 0x9875,
+ 49269 - 44032: 0x9876,
+ 49270 - 44032: 0x9877,
+ 49271 - 44032: 0x9878,
+ 49272 - 44032: 0x9879,
+ 49273 - 44032: 0x987A,
+ 49274 - 44032: 0x9881,
+ 49275 - 44032: 0x9882,
+ 49276 - 44032: 0x9883,
+ 49277 - 44032: 0x9884,
+ 49278 - 44032: 0x9885,
+ 49279 - 44032: 0x9886,
+ 49280 - 44032: 0x9887,
+ 49281 - 44032: 0x9888,
+ 49282 - 44032: 0x9889,
+ 49283 - 44032: 0x988A,
+ 49284 - 44032: 0x988B,
+ 49285 - 44032: 0x988C,
+ 49286 - 44032: 0x988D,
+ 49287 - 44032: 0x988E,
+ 49288 - 44032: 0x988F,
+ 49289 - 44032: 0x9890,
+ 49290 - 44032: 0x9891,
+ 49291 - 44032: 0x9892,
+ 49292 - 44032: 0x9893,
+ 49293 - 44032: 0x9894,
+ 49294 - 44032: 0x9895,
+ 49295 - 44032: 0x9896,
+ 49296 - 44032: 0xBBDF,
+ 49297 - 44032: 0xBBE0,
+ 49298 - 44032: 0x9897,
+ 49299 - 44032: 0x9898,
+ 49300 - 44032: 0xBBE1,
+ 49301 - 44032: 0x9899,
+ 49302 - 44032: 0x989A,
+ 49303 - 44032: 0x989B,
+ 49304 - 44032: 0xBBE2,
+ 49305 - 44032: 0x989C,
+ 49306 - 44032: 0x989D,
+ 49307 - 44032: 0x989E,
+ 49308 - 44032: 0x989F,
+ 49309 - 44032: 0x98A0,
+ 49310 - 44032: 0x98A1,
+ 49311 - 44032: 0x98A2,
+ 49312 - 44032: 0xBBE3,
+ 49313 - 44032: 0xBBE4,
+ 49314 - 44032: 0x98A3,
+ 49315 - 44032: 0xBBE5,
+ 49316 - 44032: 0x98A4,
+ 49317 - 44032: 0xBBE6,
+ 49318 - 44032: 0x98A5,
+ 49319 - 44032: 0x98A6,
+ 49320 - 44032: 0x98A7,
+ 49321 - 44032: 0x98A8,
+ 49322 - 44032: 0x98A9,
+ 49323 - 44032: 0x98AA,
+ 49324 - 44032: 0xBBE7,
+ 49325 - 44032: 0xBBE8,
+ 49326 - 44032: 0x98AB,
+ 49327 - 44032: 0xBBE9,
+ 49328 - 44032: 0xBBEA,
+ 49329 - 44032: 0x98AC,
+ 49330 - 44032: 0x98AD,
+ 49331 - 44032: 0xBBEB,
+ 49332 - 44032: 0xBBEC,
+ 49333 - 44032: 0xBBED,
+ 49334 - 44032: 0xBBEE,
+ 49335 - 44032: 0x98AE,
+ 49336 - 44032: 0x98AF,
+ 49337 - 44032: 0x98B0,
+ 49338 - 44032: 0x98B1,
+ 49339 - 44032: 0x98B2,
+ 49340 - 44032: 0xBBEF,
+ 49341 - 44032: 0xBBF0,
+ 49342 - 44032: 0x98B3,
+ 49343 - 44032: 0xBBF1,
+ 49344 - 44032: 0xBBF2,
+ 49345 - 44032: 0xBBF3,
+ 49346 - 44032: 0x98B4,
+ 49347 - 44032: 0x98B5,
+ 49348 - 44032: 0x98B6,
+ 49349 - 44032: 0xBBF4,
+ 49350 - 44032: 0x98B7,
+ 49351 - 44032: 0x98B8,
+ 49352 - 44032: 0xBBF5,
+ 49353 - 44032: 0xBBF6,
+ 49354 - 44032: 0x98B9,
+ 49355 - 44032: 0x98BA,
+ 49356 - 44032: 0xBBF7,
+ 49357 - 44032: 0x98BB,
+ 49358 - 44032: 0x98BC,
+ 49359 - 44032: 0x98BD,
+ 49360 - 44032: 0xBBF8,
+ 49361 - 44032: 0x98BE,
+ 49362 - 44032: 0x98BF,
+ 49363 - 44032: 0x98C0,
+ 49364 - 44032: 0x98C1,
+ 49365 - 44032: 0x98C2,
+ 49366 - 44032: 0x98C3,
+ 49367 - 44032: 0x98C4,
+ 49368 - 44032: 0xBBF9,
+ 49369 - 44032: 0xBBFA,
+ 49370 - 44032: 0x98C5,
+ 49371 - 44032: 0xBBFB,
+ 49372 - 44032: 0xBBFC,
+ 49373 - 44032: 0xBBFD,
+ 49374 - 44032: 0x98C6,
+ 49375 - 44032: 0x98C7,
+ 49376 - 44032: 0x98C8,
+ 49377 - 44032: 0x98C9,
+ 49378 - 44032: 0x98CA,
+ 49379 - 44032: 0x98CB,
+ 49380 - 44032: 0xBBFE,
+ 49381 - 44032: 0xBCA1,
+ 49382 - 44032: 0x98CC,
+ 49383 - 44032: 0x98CD,
+ 49384 - 44032: 0xBCA2,
+ 49385 - 44032: 0x98CE,
+ 49386 - 44032: 0x98CF,
+ 49387 - 44032: 0x98D0,
+ 49388 - 44032: 0xBCA3,
+ 49389 - 44032: 0x98D1,
+ 49390 - 44032: 0x98D2,
+ 49391 - 44032: 0x98D3,
+ 49392 - 44032: 0x98D4,
+ 49393 - 44032: 0x98D5,
+ 49394 - 44032: 0x98D6,
+ 49395 - 44032: 0x98D7,
+ 49396 - 44032: 0xBCA4,
+ 49397 - 44032: 0xBCA5,
+ 49398 - 44032: 0x98D8,
+ 49399 - 44032: 0xBCA6,
+ 49400 - 44032: 0x98D9,
+ 49401 - 44032: 0xBCA7,
+ 49402 - 44032: 0x98DA,
+ 49403 - 44032: 0x98DB,
+ 49404 - 44032: 0x98DC,
+ 49405 - 44032: 0x98DD,
+ 49406 - 44032: 0x98DE,
+ 49407 - 44032: 0x98DF,
+ 49408 - 44032: 0xBCA8,
+ 49409 - 44032: 0x98E0,
+ 49410 - 44032: 0x98E1,
+ 49411 - 44032: 0x98E2,
+ 49412 - 44032: 0xBCA9,
+ 49413 - 44032: 0x98E3,
+ 49414 - 44032: 0x98E4,
+ 49415 - 44032: 0x98E5,
+ 49416 - 44032: 0xBCAA,
+ 49417 - 44032: 0x98E6,
+ 49418 - 44032: 0x98E7,
+ 49419 - 44032: 0x98E8,
+ 49420 - 44032: 0x98E9,
+ 49421 - 44032: 0x98EA,
+ 49422 - 44032: 0x98EB,
+ 49423 - 44032: 0x98EC,
+ 49424 - 44032: 0xBCAB,
+ 49425 - 44032: 0x98ED,
+ 49426 - 44032: 0x98EE,
+ 49427 - 44032: 0x98EF,
+ 49428 - 44032: 0x98F0,
+ 49429 - 44032: 0xBCAC,
+ 49430 - 44032: 0x98F1,
+ 49431 - 44032: 0x98F2,
+ 49432 - 44032: 0x98F3,
+ 49433 - 44032: 0x98F4,
+ 49434 - 44032: 0x98F5,
+ 49435 - 44032: 0x98F6,
+ 49436 - 44032: 0xBCAD,
+ 49437 - 44032: 0xBCAE,
+ 49438 - 44032: 0xBCAF,
+ 49439 - 44032: 0xBCB0,
+ 49440 - 44032: 0xBCB1,
+ 49441 - 44032: 0x98F7,
+ 49442 - 44032: 0x98F8,
+ 49443 - 44032: 0xBCB2,
+ 49444 - 44032: 0xBCB3,
+ 49445 - 44032: 0x98F9,
+ 49446 - 44032: 0xBCB4,
+ 49447 - 44032: 0xBCB5,
+ 49448 - 44032: 0x98FA,
+ 49449 - 44032: 0x98FB,
+ 49450 - 44032: 0x98FC,
+ 49451 - 44032: 0x98FD,
+ 49452 - 44032: 0xBCB6,
+ 49453 - 44032: 0xBCB7,
+ 49454 - 44032: 0x98FE,
+ 49455 - 44032: 0xBCB8,
+ 49456 - 44032: 0xBCB9,
+ 49457 - 44032: 0xBCBA,
+ 49458 - 44032: 0x9941,
+ 49459 - 44032: 0x9942,
+ 49460 - 44032: 0x9943,
+ 49461 - 44032: 0x9944,
+ 49462 - 44032: 0xBCBB,
+ 49463 - 44032: 0x9945,
+ 49464 - 44032: 0xBCBC,
+ 49465 - 44032: 0xBCBD,
+ 49466 - 44032: 0x9946,
+ 49467 - 44032: 0x9947,
+ 49468 - 44032: 0xBCBE,
+ 49469 - 44032: 0x9948,
+ 49470 - 44032: 0x9949,
+ 49471 - 44032: 0x994A,
+ 49472 - 44032: 0xBCBF,
+ 49473 - 44032: 0x994B,
+ 49474 - 44032: 0x994C,
+ 49475 - 44032: 0x994D,
+ 49476 - 44032: 0x994E,
+ 49477 - 44032: 0x994F,
+ 49478 - 44032: 0x9950,
+ 49479 - 44032: 0x9951,
+ 49480 - 44032: 0xBCC0,
+ 49481 - 44032: 0xBCC1,
+ 49482 - 44032: 0x9952,
+ 49483 - 44032: 0xBCC2,
+ 49484 - 44032: 0xBCC3,
+ 49485 - 44032: 0xBCC4,
+ 49486 - 44032: 0x9953,
+ 49487 - 44032: 0x9954,
+ 49488 - 44032: 0x9955,
+ 49489 - 44032: 0x9956,
+ 49490 - 44032: 0x9957,
+ 49491 - 44032: 0x9958,
+ 49492 - 44032: 0xBCC5,
+ 49493 - 44032: 0xBCC6,
+ 49494 - 44032: 0x9959,
+ 49495 - 44032: 0x995A,
+ 49496 - 44032: 0xBCC7,
+ 49497 - 44032: 0x9961,
+ 49498 - 44032: 0x9962,
+ 49499 - 44032: 0x9963,
+ 49500 - 44032: 0xBCC8,
+ 49501 - 44032: 0x9964,
+ 49502 - 44032: 0x9965,
+ 49503 - 44032: 0x9966,
+ 49504 - 44032: 0x9967,
+ 49505 - 44032: 0x9968,
+ 49506 - 44032: 0x9969,
+ 49507 - 44032: 0x996A,
+ 49508 - 44032: 0xBCC9,
+ 49509 - 44032: 0xBCCA,
+ 49510 - 44032: 0x996B,
+ 49511 - 44032: 0xBCCB,
+ 49512 - 44032: 0xBCCC,
+ 49513 - 44032: 0xBCCD,
+ 49514 - 44032: 0x996C,
+ 49515 - 44032: 0x996D,
+ 49516 - 44032: 0x996E,
+ 49517 - 44032: 0x996F,
+ 49518 - 44032: 0x9970,
+ 49519 - 44032: 0x9971,
+ 49520 - 44032: 0xBCCE,
+ 49521 - 44032: 0x9972,
+ 49522 - 44032: 0x9973,
+ 49523 - 44032: 0x9974,
+ 49524 - 44032: 0xBCCF,
+ 49525 - 44032: 0x9975,
+ 49526 - 44032: 0x9976,
+ 49527 - 44032: 0x9977,
+ 49528 - 44032: 0xBCD0,
+ 49529 - 44032: 0x9978,
+ 49530 - 44032: 0x9979,
+ 49531 - 44032: 0x997A,
+ 49532 - 44032: 0x9981,
+ 49533 - 44032: 0x9982,
+ 49534 - 44032: 0x9983,
+ 49535 - 44032: 0x9984,
+ 49536 - 44032: 0x9985,
+ 49537 - 44032: 0x9986,
+ 49538 - 44032: 0x9987,
+ 49539 - 44032: 0x9988,
+ 49540 - 44032: 0x9989,
+ 49541 - 44032: 0xBCD1,
+ 49542 - 44032: 0x998A,
+ 49543 - 44032: 0x998B,
+ 49544 - 44032: 0x998C,
+ 49545 - 44032: 0x998D,
+ 49546 - 44032: 0x998E,
+ 49547 - 44032: 0x998F,
+ 49548 - 44032: 0xBCD2,
+ 49549 - 44032: 0xBCD3,
+ 49550 - 44032: 0xBCD4,
+ 49551 - 44032: 0x9990,
+ 49552 - 44032: 0xBCD5,
+ 49553 - 44032: 0x9991,
+ 49554 - 44032: 0x9992,
+ 49555 - 44032: 0x9993,
+ 49556 - 44032: 0xBCD6,
+ 49557 - 44032: 0x9994,
+ 49558 - 44032: 0xBCD7,
+ 49559 - 44032: 0x9995,
+ 49560 - 44032: 0x9996,
+ 49561 - 44032: 0x9997,
+ 49562 - 44032: 0x9998,
+ 49563 - 44032: 0x9999,
+ 49564 - 44032: 0xBCD8,
+ 49565 - 44032: 0xBCD9,
+ 49566 - 44032: 0x999A,
+ 49567 - 44032: 0xBCDA,
+ 49568 - 44032: 0x999B,
+ 49569 - 44032: 0xBCDB,
+ 49570 - 44032: 0x999C,
+ 49571 - 44032: 0x999D,
+ 49572 - 44032: 0x999E,
+ 49573 - 44032: 0xBCDC,
+ 49574 - 44032: 0x999F,
+ 49575 - 44032: 0x99A0,
+ 49576 - 44032: 0xBCDD,
+ 49577 - 44032: 0xBCDE,
+ 49578 - 44032: 0x99A1,
+ 49579 - 44032: 0x99A2,
+ 49580 - 44032: 0xBCDF,
+ 49581 - 44032: 0x99A3,
+ 49582 - 44032: 0x99A4,
+ 49583 - 44032: 0x99A5,
+ 49584 - 44032: 0xBCE0,
+ 49585 - 44032: 0x99A6,
+ 49586 - 44032: 0x99A7,
+ 49587 - 44032: 0x99A8,
+ 49588 - 44032: 0x99A9,
+ 49589 - 44032: 0x99AA,
+ 49590 - 44032: 0x99AB,
+ 49591 - 44032: 0x99AC,
+ 49592 - 44032: 0x99AD,
+ 49593 - 44032: 0x99AE,
+ 49594 - 44032: 0x99AF,
+ 49595 - 44032: 0x99B0,
+ 49596 - 44032: 0x99B1,
+ 49597 - 44032: 0xBCE1,
+ 49598 - 44032: 0x99B2,
+ 49599 - 44032: 0x99B3,
+ 49600 - 44032: 0x99B4,
+ 49601 - 44032: 0x99B5,
+ 49602 - 44032: 0x99B6,
+ 49603 - 44032: 0x99B7,
+ 49604 - 44032: 0xBCE2,
+ 49605 - 44032: 0x99B8,
+ 49606 - 44032: 0x99B9,
+ 49607 - 44032: 0x99BA,
+ 49608 - 44032: 0xBCE3,
+ 49609 - 44032: 0x99BB,
+ 49610 - 44032: 0x99BC,
+ 49611 - 44032: 0x99BD,
+ 49612 - 44032: 0xBCE4,
+ 49613 - 44032: 0x99BE,
+ 49614 - 44032: 0x99BF,
+ 49615 - 44032: 0x99C0,
+ 49616 - 44032: 0x99C1,
+ 49617 - 44032: 0x99C2,
+ 49618 - 44032: 0x99C3,
+ 49619 - 44032: 0x99C4,
+ 49620 - 44032: 0xBCE5,
+ 49621 - 44032: 0x99C5,
+ 49622 - 44032: 0x99C6,
+ 49623 - 44032: 0xBCE6,
+ 49624 - 44032: 0xBCE7,
+ 49625 - 44032: 0x99C7,
+ 49626 - 44032: 0x99C8,
+ 49627 - 44032: 0x99C9,
+ 49628 - 44032: 0x99CA,
+ 49629 - 44032: 0x99CB,
+ 49630 - 44032: 0x99CC,
+ 49631 - 44032: 0x99CD,
+ 49632 - 44032: 0xBCE8,
+ 49633 - 44032: 0x99CE,
+ 49634 - 44032: 0x99CF,
+ 49635 - 44032: 0x99D0,
+ 49636 - 44032: 0xBCE9,
+ 49637 - 44032: 0x99D1,
+ 49638 - 44032: 0x99D2,
+ 49639 - 44032: 0x99D3,
+ 49640 - 44032: 0xBCEA,
+ 49641 - 44032: 0x99D4,
+ 49642 - 44032: 0x99D5,
+ 49643 - 44032: 0x99D6,
+ 49644 - 44032: 0x99D7,
+ 49645 - 44032: 0x99D8,
+ 49646 - 44032: 0x99D9,
+ 49647 - 44032: 0x99DA,
+ 49648 - 44032: 0xBCEB,
+ 49649 - 44032: 0xBCEC,
+ 49650 - 44032: 0x99DB,
+ 49651 - 44032: 0xBCED,
+ 49652 - 44032: 0x99DC,
+ 49653 - 44032: 0x99DD,
+ 49654 - 44032: 0x99DE,
+ 49655 - 44032: 0x99DF,
+ 49656 - 44032: 0x99E0,
+ 49657 - 44032: 0x99E1,
+ 49658 - 44032: 0x99E2,
+ 49659 - 44032: 0x99E3,
+ 49660 - 44032: 0xBCEE,
+ 49661 - 44032: 0xBCEF,
+ 49662 - 44032: 0x99E4,
+ 49663 - 44032: 0x99E5,
+ 49664 - 44032: 0xBCF0,
+ 49665 - 44032: 0x99E6,
+ 49666 - 44032: 0x99E7,
+ 49667 - 44032: 0x99E8,
+ 49668 - 44032: 0xBCF1,
+ 49669 - 44032: 0x99E9,
+ 49670 - 44032: 0x99EA,
+ 49671 - 44032: 0x99EB,
+ 49672 - 44032: 0x99EC,
+ 49673 - 44032: 0x99ED,
+ 49674 - 44032: 0x99EE,
+ 49675 - 44032: 0x99EF,
+ 49676 - 44032: 0xBCF2,
+ 49677 - 44032: 0xBCF3,
+ 49678 - 44032: 0x99F0,
+ 49679 - 44032: 0xBCF4,
+ 49680 - 44032: 0x99F1,
+ 49681 - 44032: 0xBCF5,
+ 49682 - 44032: 0x99F2,
+ 49683 - 44032: 0x99F3,
+ 49684 - 44032: 0x99F4,
+ 49685 - 44032: 0x99F5,
+ 49686 - 44032: 0x99F6,
+ 49687 - 44032: 0x99F7,
+ 49688 - 44032: 0xBCF6,
+ 49689 - 44032: 0xBCF7,
+ 49690 - 44032: 0x99F8,
+ 49691 - 44032: 0x99F9,
+ 49692 - 44032: 0xBCF8,
+ 49693 - 44032: 0x99FA,
+ 49694 - 44032: 0x99FB,
+ 49695 - 44032: 0xBCF9,
+ 49696 - 44032: 0xBCFA,
+ 49697 - 44032: 0x99FC,
+ 49698 - 44032: 0x99FD,
+ 49699 - 44032: 0x99FE,
+ 49700 - 44032: 0x9A41,
+ 49701 - 44032: 0x9A42,
+ 49702 - 44032: 0x9A43,
+ 49703 - 44032: 0x9A44,
+ 49704 - 44032: 0xBCFB,
+ 49705 - 44032: 0xBCFC,
+ 49706 - 44032: 0x9A45,
+ 49707 - 44032: 0xBCFD,
+ 49708 - 44032: 0x9A46,
+ 49709 - 44032: 0xBCFE,
+ 49710 - 44032: 0x9A47,
+ 49711 - 44032: 0xBDA1,
+ 49712 - 44032: 0x9A48,
+ 49713 - 44032: 0xBDA2,
+ 49714 - 44032: 0xBDA3,
+ 49715 - 44032: 0x9A49,
+ 49716 - 44032: 0xBDA4,
+ 49717 - 44032: 0x9A4A,
+ 49718 - 44032: 0x9A4B,
+ 49719 - 44032: 0x9A4C,
+ 49720 - 44032: 0x9A4D,
+ 49721 - 44032: 0x9A4E,
+ 49722 - 44032: 0x9A4F,
+ 49723 - 44032: 0x9A50,
+ 49724 - 44032: 0x9A51,
+ 49725 - 44032: 0x9A52,
+ 49726 - 44032: 0x9A53,
+ 49727 - 44032: 0x9A54,
+ 49728 - 44032: 0x9A55,
+ 49729 - 44032: 0x9A56,
+ 49730 - 44032: 0x9A57,
+ 49731 - 44032: 0x9A58,
+ 49732 - 44032: 0x9A59,
+ 49733 - 44032: 0x9A5A,
+ 49734 - 44032: 0x9A61,
+ 49735 - 44032: 0x9A62,
+ 49736 - 44032: 0xBDA5,
+ 49737 - 44032: 0x9A63,
+ 49738 - 44032: 0x9A64,
+ 49739 - 44032: 0x9A65,
+ 49740 - 44032: 0x9A66,
+ 49741 - 44032: 0x9A67,
+ 49742 - 44032: 0x9A68,
+ 49743 - 44032: 0x9A69,
+ 49744 - 44032: 0xBDA6,
+ 49745 - 44032: 0xBDA7,
+ 49746 - 44032: 0x9A6A,
+ 49747 - 44032: 0x9A6B,
+ 49748 - 44032: 0xBDA8,
+ 49749 - 44032: 0x9A6C,
+ 49750 - 44032: 0x9A6D,
+ 49751 - 44032: 0x9A6E,
+ 49752 - 44032: 0xBDA9,
+ 49753 - 44032: 0x9A6F,
+ 49754 - 44032: 0x9A70,
+ 49755 - 44032: 0x9A71,
+ 49756 - 44032: 0x9A72,
+ 49757 - 44032: 0x9A73,
+ 49758 - 44032: 0x9A74,
+ 49759 - 44032: 0x9A75,
+ 49760 - 44032: 0xBDAA,
+ 49761 - 44032: 0x9A76,
+ 49762 - 44032: 0x9A77,
+ 49763 - 44032: 0x9A78,
+ 49764 - 44032: 0x9A79,
+ 49765 - 44032: 0xBDAB,
+ 49766 - 44032: 0x9A7A,
+ 49767 - 44032: 0x9A81,
+ 49768 - 44032: 0x9A82,
+ 49769 - 44032: 0x9A83,
+ 49770 - 44032: 0x9A84,
+ 49771 - 44032: 0x9A85,
+ 49772 - 44032: 0xBDAC,
+ 49773 - 44032: 0xBDAD,
+ 49774 - 44032: 0x9A86,
+ 49775 - 44032: 0x9A87,
+ 49776 - 44032: 0xBDAE,
+ 49777 - 44032: 0x9A88,
+ 49778 - 44032: 0x9A89,
+ 49779 - 44032: 0x9A8A,
+ 49780 - 44032: 0xBDAF,
+ 49781 - 44032: 0x9A8B,
+ 49782 - 44032: 0x9A8C,
+ 49783 - 44032: 0x9A8D,
+ 49784 - 44032: 0x9A8E,
+ 49785 - 44032: 0x9A8F,
+ 49786 - 44032: 0x9A90,
+ 49787 - 44032: 0x9A91,
+ 49788 - 44032: 0xBDB0,
+ 49789 - 44032: 0xBDB1,
+ 49790 - 44032: 0x9A92,
+ 49791 - 44032: 0xBDB2,
+ 49792 - 44032: 0x9A93,
+ 49793 - 44032: 0xBDB3,
+ 49794 - 44032: 0x9A94,
+ 49795 - 44032: 0x9A95,
+ 49796 - 44032: 0x9A96,
+ 49797 - 44032: 0x9A97,
+ 49798 - 44032: 0x9A98,
+ 49799 - 44032: 0x9A99,
+ 49800 - 44032: 0xBDB4,
+ 49801 - 44032: 0xBDB5,
+ 49802 - 44032: 0x9A9A,
+ 49803 - 44032: 0x9A9B,
+ 49804 - 44032: 0x9A9C,
+ 49805 - 44032: 0x9A9D,
+ 49806 - 44032: 0x9A9E,
+ 49807 - 44032: 0x9A9F,
+ 49808 - 44032: 0xBDB6,
+ 49809 - 44032: 0x9AA0,
+ 49810 - 44032: 0x9AA1,
+ 49811 - 44032: 0x9AA2,
+ 49812 - 44032: 0x9AA3,
+ 49813 - 44032: 0x9AA4,
+ 49814 - 44032: 0x9AA5,
+ 49815 - 44032: 0x9AA6,
+ 49816 - 44032: 0xBDB7,
+ 49817 - 44032: 0x9AA7,
+ 49818 - 44032: 0x9AA8,
+ 49819 - 44032: 0xBDB8,
+ 49820 - 44032: 0x9AA9,
+ 49821 - 44032: 0xBDB9,
+ 49822 - 44032: 0x9AAA,
+ 49823 - 44032: 0x9AAB,
+ 49824 - 44032: 0x9AAC,
+ 49825 - 44032: 0x9AAD,
+ 49826 - 44032: 0x9AAE,
+ 49827 - 44032: 0x9AAF,
+ 49828 - 44032: 0xBDBA,
+ 49829 - 44032: 0xBDBB,
+ 49830 - 44032: 0x9AB0,
+ 49831 - 44032: 0x9AB1,
+ 49832 - 44032: 0xBDBC,
+ 49833 - 44032: 0x9AB2,
+ 49834 - 44032: 0x9AB3,
+ 49835 - 44032: 0x9AB4,
+ 49836 - 44032: 0xBDBD,
+ 49837 - 44032: 0xBDBE,
+ 49838 - 44032: 0x9AB5,
+ 49839 - 44032: 0x9AB6,
+ 49840 - 44032: 0x9AB7,
+ 49841 - 44032: 0x9AB8,
+ 49842 - 44032: 0x9AB9,
+ 49843 - 44032: 0x9ABA,
+ 49844 - 44032: 0xBDBF,
+ 49845 - 44032: 0xBDC0,
+ 49846 - 44032: 0x9ABB,
+ 49847 - 44032: 0xBDC1,
+ 49848 - 44032: 0x9ABC,
+ 49849 - 44032: 0xBDC2,
+ 49850 - 44032: 0x9ABD,
+ 49851 - 44032: 0x9ABE,
+ 49852 - 44032: 0x9ABF,
+ 49853 - 44032: 0x9AC0,
+ 49854 - 44032: 0x9AC1,
+ 49855 - 44032: 0x9AC2,
+ 49856 - 44032: 0x9AC3,
+ 49857 - 44032: 0x9AC4,
+ 49858 - 44032: 0x9AC5,
+ 49859 - 44032: 0x9AC6,
+ 49860 - 44032: 0x9AC7,
+ 49861 - 44032: 0x9AC8,
+ 49862 - 44032: 0x9AC9,
+ 49863 - 44032: 0x9ACA,
+ 49864 - 44032: 0x9ACB,
+ 49865 - 44032: 0x9ACC,
+ 49866 - 44032: 0x9ACD,
+ 49867 - 44032: 0x9ACE,
+ 49868 - 44032: 0x9ACF,
+ 49869 - 44032: 0x9AD0,
+ 49870 - 44032: 0x9AD1,
+ 49871 - 44032: 0x9AD2,
+ 49872 - 44032: 0x9AD3,
+ 49873 - 44032: 0x9AD4,
+ 49874 - 44032: 0x9AD5,
+ 49875 - 44032: 0x9AD6,
+ 49876 - 44032: 0x9AD7,
+ 49877 - 44032: 0x9AD8,
+ 49878 - 44032: 0x9AD9,
+ 49879 - 44032: 0x9ADA,
+ 49880 - 44032: 0x9ADB,
+ 49881 - 44032: 0x9ADC,
+ 49882 - 44032: 0x9ADD,
+ 49883 - 44032: 0x9ADE,
+ 49884 - 44032: 0xBDC3,
+ 49885 - 44032: 0xBDC4,
+ 49886 - 44032: 0x9ADF,
+ 49887 - 44032: 0x9AE0,
+ 49888 - 44032: 0xBDC5,
+ 49889 - 44032: 0x9AE1,
+ 49890 - 44032: 0x9AE2,
+ 49891 - 44032: 0xBDC6,
+ 49892 - 44032: 0xBDC7,
+ 49893 - 44032: 0x9AE3,
+ 49894 - 44032: 0x9AE4,
+ 49895 - 44032: 0x9AE5,
+ 49896 - 44032: 0x9AE6,
+ 49897 - 44032: 0x9AE7,
+ 49898 - 44032: 0x9AE8,
+ 49899 - 44032: 0xBDC8,
+ 49900 - 44032: 0xBDC9,
+ 49901 - 44032: 0xBDCA,
+ 49902 - 44032: 0x9AE9,
+ 49903 - 44032: 0xBDCB,
+ 49904 - 44032: 0x9AEA,
+ 49905 - 44032: 0xBDCC,
+ 49906 - 44032: 0x9AEB,
+ 49907 - 44032: 0x9AEC,
+ 49908 - 44032: 0x9AED,
+ 49909 - 44032: 0x9AEE,
+ 49910 - 44032: 0xBDCD,
+ 49911 - 44032: 0x9AEF,
+ 49912 - 44032: 0xBDCE,
+ 49913 - 44032: 0xBDCF,
+ 49914 - 44032: 0x9AF0,
+ 49915 - 44032: 0xBDD0,
+ 49916 - 44032: 0xBDD1,
+ 49917 - 44032: 0x9AF1,
+ 49918 - 44032: 0x9AF2,
+ 49919 - 44032: 0x9AF3,
+ 49920 - 44032: 0xBDD2,
+ 49921 - 44032: 0x9AF4,
+ 49922 - 44032: 0x9AF5,
+ 49923 - 44032: 0x9AF6,
+ 49924 - 44032: 0x9AF7,
+ 49925 - 44032: 0x9AF8,
+ 49926 - 44032: 0x9AF9,
+ 49927 - 44032: 0x9AFA,
+ 49928 - 44032: 0xBDD3,
+ 49929 - 44032: 0xBDD4,
+ 49930 - 44032: 0x9AFB,
+ 49931 - 44032: 0x9AFC,
+ 49932 - 44032: 0xBDD5,
+ 49933 - 44032: 0xBDD6,
+ 49934 - 44032: 0x9AFD,
+ 49935 - 44032: 0x9AFE,
+ 49936 - 44032: 0x9B41,
+ 49937 - 44032: 0x9B42,
+ 49938 - 44032: 0x9B43,
+ 49939 - 44032: 0xBDD7,
+ 49940 - 44032: 0xBDD8,
+ 49941 - 44032: 0xBDD9,
+ 49942 - 44032: 0x9B44,
+ 49943 - 44032: 0x9B45,
+ 49944 - 44032: 0xBDDA,
+ 49945 - 44032: 0x9B46,
+ 49946 - 44032: 0x9B47,
+ 49947 - 44032: 0x9B48,
+ 49948 - 44032: 0xBDDB,
+ 49949 - 44032: 0x9B49,
+ 49950 - 44032: 0x9B4A,
+ 49951 - 44032: 0x9B4B,
+ 49952 - 44032: 0x9B4C,
+ 49953 - 44032: 0x9B4D,
+ 49954 - 44032: 0x9B4E,
+ 49955 - 44032: 0x9B4F,
+ 49956 - 44032: 0xBDDC,
+ 49957 - 44032: 0xBDDD,
+ 49958 - 44032: 0x9B50,
+ 49959 - 44032: 0x9B51,
+ 49960 - 44032: 0xBDDE,
+ 49961 - 44032: 0xBDDF,
+ 49962 - 44032: 0x9B52,
+ 49963 - 44032: 0x9B53,
+ 49964 - 44032: 0x9B54,
+ 49965 - 44032: 0x9B55,
+ 49966 - 44032: 0x9B56,
+ 49967 - 44032: 0x9B57,
+ 49968 - 44032: 0x9B58,
+ 49969 - 44032: 0x9B59,
+ 49970 - 44032: 0x9B5A,
+ 49971 - 44032: 0x9B61,
+ 49972 - 44032: 0x9B62,
+ 49973 - 44032: 0x9B63,
+ 49974 - 44032: 0x9B64,
+ 49975 - 44032: 0x9B65,
+ 49976 - 44032: 0x9B66,
+ 49977 - 44032: 0x9B67,
+ 49978 - 44032: 0x9B68,
+ 49979 - 44032: 0x9B69,
+ 49980 - 44032: 0x9B6A,
+ 49981 - 44032: 0x9B6B,
+ 49982 - 44032: 0x9B6C,
+ 49983 - 44032: 0x9B6D,
+ 49984 - 44032: 0x9B6E,
+ 49985 - 44032: 0x9B6F,
+ 49986 - 44032: 0x9B70,
+ 49987 - 44032: 0x9B71,
+ 49988 - 44032: 0x9B72,
+ 49989 - 44032: 0xBDE0,
+ 49990 - 44032: 0x9B73,
+ 49991 - 44032: 0x9B74,
+ 49992 - 44032: 0x9B75,
+ 49993 - 44032: 0x9B76,
+ 49994 - 44032: 0x9B77,
+ 49995 - 44032: 0x9B78,
+ 49996 - 44032: 0x9B79,
+ 49997 - 44032: 0x9B7A,
+ 49998 - 44032: 0x9B81,
+ 49999 - 44032: 0x9B82,
+ 50000 - 44032: 0x9B83,
+ 50001 - 44032: 0x9B84,
+ 50002 - 44032: 0x9B85,
+ 50003 - 44032: 0x9B86,
+ 50004 - 44032: 0x9B87,
+ 50005 - 44032: 0x9B88,
+ 50006 - 44032: 0x9B89,
+ 50007 - 44032: 0x9B8A,
+ 50008 - 44032: 0x9B8B,
+ 50009 - 44032: 0x9B8C,
+ 50010 - 44032: 0x9B8D,
+ 50011 - 44032: 0x9B8E,
+ 50012 - 44032: 0x9B8F,
+ 50013 - 44032: 0x9B90,
+ 50014 - 44032: 0x9B91,
+ 50015 - 44032: 0x9B92,
+ 50016 - 44032: 0x9B93,
+ 50017 - 44032: 0x9B94,
+ 50018 - 44032: 0x9B95,
+ 50019 - 44032: 0x9B96,
+ 50020 - 44032: 0x9B97,
+ 50021 - 44032: 0x9B98,
+ 50022 - 44032: 0x9B99,
+ 50023 - 44032: 0x9B9A,
+ 50024 - 44032: 0xBDE1,
+ 50025 - 44032: 0xBDE2,
+ 50026 - 44032: 0x9B9B,
+ 50027 - 44032: 0x9B9C,
+ 50028 - 44032: 0xBDE3,
+ 50029 - 44032: 0x9B9D,
+ 50030 - 44032: 0x9B9E,
+ 50031 - 44032: 0x9B9F,
+ 50032 - 44032: 0xBDE4,
+ 50033 - 44032: 0x9BA0,
+ 50034 - 44032: 0xBDE5,
+ 50035 - 44032: 0x9BA1,
+ 50036 - 44032: 0x9BA2,
+ 50037 - 44032: 0x9BA3,
+ 50038 - 44032: 0x9BA4,
+ 50039 - 44032: 0x9BA5,
+ 50040 - 44032: 0xBDE6,
+ 50041 - 44032: 0xBDE7,
+ 50042 - 44032: 0x9BA6,
+ 50043 - 44032: 0x9BA7,
+ 50044 - 44032: 0xBDE8,
+ 50045 - 44032: 0xBDE9,
+ 50046 - 44032: 0x9BA8,
+ 50047 - 44032: 0x9BA9,
+ 50048 - 44032: 0x9BAA,
+ 50049 - 44032: 0x9BAB,
+ 50050 - 44032: 0x9BAC,
+ 50051 - 44032: 0x9BAD,
+ 50052 - 44032: 0xBDEA,
+ 50053 - 44032: 0x9BAE,
+ 50054 - 44032: 0x9BAF,
+ 50055 - 44032: 0x9BB0,
+ 50056 - 44032: 0xBDEB,
+ 50057 - 44032: 0x9BB1,
+ 50058 - 44032: 0x9BB2,
+ 50059 - 44032: 0x9BB3,
+ 50060 - 44032: 0xBDEC,
+ 50061 - 44032: 0x9BB4,
+ 50062 - 44032: 0x9BB5,
+ 50063 - 44032: 0x9BB6,
+ 50064 - 44032: 0x9BB7,
+ 50065 - 44032: 0x9BB8,
+ 50066 - 44032: 0x9BB9,
+ 50067 - 44032: 0x9BBA,
+ 50068 - 44032: 0x9BBB,
+ 50069 - 44032: 0x9BBC,
+ 50070 - 44032: 0x9BBD,
+ 50071 - 44032: 0x9BBE,
+ 50072 - 44032: 0x9BBF,
+ 50073 - 44032: 0x9BC0,
+ 50074 - 44032: 0x9BC1,
+ 50075 - 44032: 0x9BC2,
+ 50076 - 44032: 0x9BC3,
+ 50077 - 44032: 0x9BC4,
+ 50078 - 44032: 0x9BC5,
+ 50079 - 44032: 0x9BC6,
+ 50080 - 44032: 0x9BC7,
+ 50081 - 44032: 0x9BC8,
+ 50082 - 44032: 0x9BC9,
+ 50083 - 44032: 0x9BCA,
+ 50084 - 44032: 0x9BCB,
+ 50085 - 44032: 0x9BCC,
+ 50086 - 44032: 0x9BCD,
+ 50087 - 44032: 0x9BCE,
+ 50088 - 44032: 0x9BCF,
+ 50089 - 44032: 0x9BD0,
+ 50090 - 44032: 0x9BD1,
+ 50091 - 44032: 0x9BD2,
+ 50092 - 44032: 0x9BD3,
+ 50093 - 44032: 0x9BD4,
+ 50094 - 44032: 0x9BD5,
+ 50095 - 44032: 0x9BD6,
+ 50096 - 44032: 0x9BD7,
+ 50097 - 44032: 0x9BD8,
+ 50098 - 44032: 0x9BD9,
+ 50099 - 44032: 0x9BDA,
+ 50100 - 44032: 0x9BDB,
+ 50101 - 44032: 0x9BDC,
+ 50102 - 44032: 0x9BDD,
+ 50103 - 44032: 0x9BDE,
+ 50104 - 44032: 0x9BDF,
+ 50105 - 44032: 0x9BE0,
+ 50106 - 44032: 0x9BE1,
+ 50107 - 44032: 0x9BE2,
+ 50108 - 44032: 0x9BE3,
+ 50109 - 44032: 0x9BE4,
+ 50110 - 44032: 0x9BE5,
+ 50111 - 44032: 0x9BE6,
+ 50112 - 44032: 0xBDED,
+ 50113 - 44032: 0x9BE7,
+ 50114 - 44032: 0x9BE8,
+ 50115 - 44032: 0x9BE9,
+ 50116 - 44032: 0x9BEA,
+ 50117 - 44032: 0x9BEB,
+ 50118 - 44032: 0x9BEC,
+ 50119 - 44032: 0x9BED,
+ 50120 - 44032: 0x9BEE,
+ 50121 - 44032: 0x9BEF,
+ 50122 - 44032: 0x9BF0,
+ 50123 - 44032: 0x9BF1,
+ 50124 - 44032: 0x9BF2,
+ 50125 - 44032: 0x9BF3,
+ 50126 - 44032: 0x9BF4,
+ 50127 - 44032: 0x9BF5,
+ 50128 - 44032: 0x9BF6,
+ 50129 - 44032: 0x9BF7,
+ 50130 - 44032: 0x9BF8,
+ 50131 - 44032: 0x9BF9,
+ 50132 - 44032: 0x9BFA,
+ 50133 - 44032: 0x9BFB,
+ 50134 - 44032: 0x9BFC,
+ 50135 - 44032: 0x9BFD,
+ 50136 - 44032: 0xBDEE,
+ 50137 - 44032: 0xBDEF,
+ 50138 - 44032: 0x9BFE,
+ 50139 - 44032: 0x9C41,
+ 50140 - 44032: 0xBDF0,
+ 50141 - 44032: 0x9C42,
+ 50142 - 44032: 0x9C43,
+ 50143 - 44032: 0xBDF1,
+ 50144 - 44032: 0xBDF2,
+ 50145 - 44032: 0x9C44,
+ 50146 - 44032: 0xBDF3,
+ 50147 - 44032: 0x9C45,
+ 50148 - 44032: 0x9C46,
+ 50149 - 44032: 0x9C47,
+ 50150 - 44032: 0x9C48,
+ 50151 - 44032: 0x9C49,
+ 50152 - 44032: 0xBDF4,
+ 50153 - 44032: 0xBDF5,
+ 50154 - 44032: 0x9C4A,
+ 50155 - 44032: 0x9C4B,
+ 50156 - 44032: 0x9C4C,
+ 50157 - 44032: 0xBDF6,
+ 50158 - 44032: 0x9C4D,
+ 50159 - 44032: 0x9C4E,
+ 50160 - 44032: 0x9C4F,
+ 50161 - 44032: 0x9C50,
+ 50162 - 44032: 0x9C51,
+ 50163 - 44032: 0x9C52,
+ 50164 - 44032: 0xBDF7,
+ 50165 - 44032: 0xBDF8,
+ 50166 - 44032: 0x9C53,
+ 50167 - 44032: 0x9C54,
+ 50168 - 44032: 0xBDF9,
+ 50169 - 44032: 0x9C55,
+ 50170 - 44032: 0x9C56,
+ 50171 - 44032: 0x9C57,
+ 50172 - 44032: 0x9C58,
+ 50173 - 44032: 0x9C59,
+ 50174 - 44032: 0x9C5A,
+ 50175 - 44032: 0x9C61,
+ 50176 - 44032: 0x9C62,
+ 50177 - 44032: 0x9C63,
+ 50178 - 44032: 0x9C64,
+ 50179 - 44032: 0x9C65,
+ 50180 - 44032: 0x9C66,
+ 50181 - 44032: 0x9C67,
+ 50182 - 44032: 0x9C68,
+ 50183 - 44032: 0x9C69,
+ 50184 - 44032: 0xBDFA,
+ 50185 - 44032: 0x9C6A,
+ 50186 - 44032: 0x9C6B,
+ 50187 - 44032: 0x9C6C,
+ 50188 - 44032: 0x9C6D,
+ 50189 - 44032: 0x9C6E,
+ 50190 - 44032: 0x9C6F,
+ 50191 - 44032: 0x9C70,
+ 50192 - 44032: 0xBDFB,
+ 50193 - 44032: 0x9C71,
+ 50194 - 44032: 0x9C72,
+ 50195 - 44032: 0x9C73,
+ 50196 - 44032: 0x9C74,
+ 50197 - 44032: 0x9C75,
+ 50198 - 44032: 0x9C76,
+ 50199 - 44032: 0x9C77,
+ 50200 - 44032: 0x9C78,
+ 50201 - 44032: 0x9C79,
+ 50202 - 44032: 0x9C7A,
+ 50203 - 44032: 0x9C81,
+ 50204 - 44032: 0x9C82,
+ 50205 - 44032: 0x9C83,
+ 50206 - 44032: 0x9C84,
+ 50207 - 44032: 0x9C85,
+ 50208 - 44032: 0x9C86,
+ 50209 - 44032: 0x9C87,
+ 50210 - 44032: 0x9C88,
+ 50211 - 44032: 0x9C89,
+ 50212 - 44032: 0xBDFC,
+ 50213 - 44032: 0x9C8A,
+ 50214 - 44032: 0x9C8B,
+ 50215 - 44032: 0x9C8C,
+ 50216 - 44032: 0x9C8D,
+ 50217 - 44032: 0x9C8E,
+ 50218 - 44032: 0x9C8F,
+ 50219 - 44032: 0x9C90,
+ 50220 - 44032: 0xBDFD,
+ 50221 - 44032: 0x9C91,
+ 50222 - 44032: 0x9C92,
+ 50223 - 44032: 0x9C93,
+ 50224 - 44032: 0xBDFE,
+ 50225 - 44032: 0x9C94,
+ 50226 - 44032: 0x9C95,
+ 50227 - 44032: 0x9C96,
+ 50228 - 44032: 0xBEA1,
+ 50229 - 44032: 0x9C97,
+ 50230 - 44032: 0x9C98,
+ 50231 - 44032: 0x9C99,
+ 50232 - 44032: 0x9C9A,
+ 50233 - 44032: 0x9C9B,
+ 50234 - 44032: 0x9C9C,
+ 50235 - 44032: 0x9C9D,
+ 50236 - 44032: 0xBEA2,
+ 50237 - 44032: 0xBEA3,
+ 50238 - 44032: 0x9C9E,
+ 50239 - 44032: 0x9C9F,
+ 50240 - 44032: 0x9CA0,
+ 50241 - 44032: 0x9CA1,
+ 50242 - 44032: 0x9CA2,
+ 50243 - 44032: 0x9CA3,
+ 50244 - 44032: 0x9CA4,
+ 50245 - 44032: 0x9CA5,
+ 50246 - 44032: 0x9CA6,
+ 50247 - 44032: 0x9CA7,
+ 50248 - 44032: 0xBEA4,
+ 50249 - 44032: 0x9CA8,
+ 50250 - 44032: 0x9CA9,
+ 50251 - 44032: 0x9CAA,
+ 50252 - 44032: 0x9CAB,
+ 50253 - 44032: 0x9CAC,
+ 50254 - 44032: 0x9CAD,
+ 50255 - 44032: 0x9CAE,
+ 50256 - 44032: 0x9CAF,
+ 50257 - 44032: 0x9CB0,
+ 50258 - 44032: 0x9CB1,
+ 50259 - 44032: 0x9CB2,
+ 50260 - 44032: 0x9CB3,
+ 50261 - 44032: 0x9CB4,
+ 50262 - 44032: 0x9CB5,
+ 50263 - 44032: 0x9CB6,
+ 50264 - 44032: 0x9CB7,
+ 50265 - 44032: 0x9CB8,
+ 50266 - 44032: 0x9CB9,
+ 50267 - 44032: 0x9CBA,
+ 50268 - 44032: 0x9CBB,
+ 50269 - 44032: 0x9CBC,
+ 50270 - 44032: 0x9CBD,
+ 50271 - 44032: 0x9CBE,
+ 50272 - 44032: 0x9CBF,
+ 50273 - 44032: 0x9CC0,
+ 50274 - 44032: 0x9CC1,
+ 50275 - 44032: 0x9CC2,
+ 50276 - 44032: 0xBEA5,
+ 50277 - 44032: 0xBEA6,
+ 50278 - 44032: 0x9CC3,
+ 50279 - 44032: 0x9CC4,
+ 50280 - 44032: 0xBEA7,
+ 50281 - 44032: 0x9CC5,
+ 50282 - 44032: 0x9CC6,
+ 50283 - 44032: 0x9CC7,
+ 50284 - 44032: 0xBEA8,
+ 50285 - 44032: 0x9CC8,
+ 50286 - 44032: 0x9CC9,
+ 50287 - 44032: 0x9CCA,
+ 50288 - 44032: 0x9CCB,
+ 50289 - 44032: 0x9CCC,
+ 50290 - 44032: 0x9CCD,
+ 50291 - 44032: 0x9CCE,
+ 50292 - 44032: 0xBEA9,
+ 50293 - 44032: 0xBEAA,
+ 50294 - 44032: 0x9CCF,
+ 50295 - 44032: 0x9CD0,
+ 50296 - 44032: 0x9CD1,
+ 50297 - 44032: 0xBEAB,
+ 50298 - 44032: 0x9CD2,
+ 50299 - 44032: 0x9CD3,
+ 50300 - 44032: 0x9CD4,
+ 50301 - 44032: 0x9CD5,
+ 50302 - 44032: 0x9CD6,
+ 50303 - 44032: 0x9CD7,
+ 50304 - 44032: 0xBEAC,
+ 50305 - 44032: 0x9CD8,
+ 50306 - 44032: 0x9CD9,
+ 50307 - 44032: 0x9CDA,
+ 50308 - 44032: 0x9CDB,
+ 50309 - 44032: 0x9CDC,
+ 50310 - 44032: 0x9CDD,
+ 50311 - 44032: 0x9CDE,
+ 50312 - 44032: 0x9CDF,
+ 50313 - 44032: 0x9CE0,
+ 50314 - 44032: 0x9CE1,
+ 50315 - 44032: 0x9CE2,
+ 50316 - 44032: 0x9CE3,
+ 50317 - 44032: 0x9CE4,
+ 50318 - 44032: 0x9CE5,
+ 50319 - 44032: 0x9CE6,
+ 50320 - 44032: 0x9CE7,
+ 50321 - 44032: 0x9CE8,
+ 50322 - 44032: 0x9CE9,
+ 50323 - 44032: 0x9CEA,
+ 50324 - 44032: 0xBEAD,
+ 50325 - 44032: 0x9CEB,
+ 50326 - 44032: 0x9CEC,
+ 50327 - 44032: 0x9CED,
+ 50328 - 44032: 0x9CEE,
+ 50329 - 44032: 0x9CEF,
+ 50330 - 44032: 0x9CF0,
+ 50331 - 44032: 0x9CF1,
+ 50332 - 44032: 0xBEAE,
+ 50333 - 44032: 0x9CF2,
+ 50334 - 44032: 0x9CF3,
+ 50335 - 44032: 0x9CF4,
+ 50336 - 44032: 0x9CF5,
+ 50337 - 44032: 0x9CF6,
+ 50338 - 44032: 0x9CF7,
+ 50339 - 44032: 0x9CF8,
+ 50340 - 44032: 0x9CF9,
+ 50341 - 44032: 0x9CFA,
+ 50342 - 44032: 0x9CFB,
+ 50343 - 44032: 0x9CFC,
+ 50344 - 44032: 0x9CFD,
+ 50345 - 44032: 0x9CFE,
+ 50346 - 44032: 0x9D41,
+ 50347 - 44032: 0x9D42,
+ 50348 - 44032: 0x9D43,
+ 50349 - 44032: 0x9D44,
+ 50350 - 44032: 0x9D45,
+ 50351 - 44032: 0x9D46,
+ 50352 - 44032: 0x9D47,
+ 50353 - 44032: 0x9D48,
+ 50354 - 44032: 0x9D49,
+ 50355 - 44032: 0x9D4A,
+ 50356 - 44032: 0x9D4B,
+ 50357 - 44032: 0x9D4C,
+ 50358 - 44032: 0x9D4D,
+ 50359 - 44032: 0x9D4E,
+ 50360 - 44032: 0xBEAF,
+ 50361 - 44032: 0x9D4F,
+ 50362 - 44032: 0x9D50,
+ 50363 - 44032: 0x9D51,
+ 50364 - 44032: 0xBEB0,
+ 50365 - 44032: 0x9D52,
+ 50366 - 44032: 0x9D53,
+ 50367 - 44032: 0x9D54,
+ 50368 - 44032: 0x9D55,
+ 50369 - 44032: 0x9D56,
+ 50370 - 44032: 0x9D57,
+ 50371 - 44032: 0x9D58,
+ 50372 - 44032: 0x9D59,
+ 50373 - 44032: 0x9D5A,
+ 50374 - 44032: 0x9D61,
+ 50375 - 44032: 0x9D62,
+ 50376 - 44032: 0x9D63,
+ 50377 - 44032: 0x9D64,
+ 50378 - 44032: 0x9D65,
+ 50379 - 44032: 0x9D66,
+ 50380 - 44032: 0x9D67,
+ 50381 - 44032: 0x9D68,
+ 50382 - 44032: 0x9D69,
+ 50383 - 44032: 0x9D6A,
+ 50384 - 44032: 0x9D6B,
+ 50385 - 44032: 0x9D6C,
+ 50386 - 44032: 0x9D6D,
+ 50387 - 44032: 0x9D6E,
+ 50388 - 44032: 0x9D6F,
+ 50389 - 44032: 0x9D70,
+ 50390 - 44032: 0x9D71,
+ 50391 - 44032: 0x9D72,
+ 50392 - 44032: 0x9D73,
+ 50393 - 44032: 0x9D74,
+ 50394 - 44032: 0x9D75,
+ 50395 - 44032: 0x9D76,
+ 50396 - 44032: 0x9D77,
+ 50397 - 44032: 0x9D78,
+ 50398 - 44032: 0x9D79,
+ 50399 - 44032: 0x9D7A,
+ 50400 - 44032: 0x9D81,
+ 50401 - 44032: 0x9D82,
+ 50402 - 44032: 0x9D83,
+ 50403 - 44032: 0x9D84,
+ 50404 - 44032: 0x9D85,
+ 50405 - 44032: 0x9D86,
+ 50406 - 44032: 0x9D87,
+ 50407 - 44032: 0x9D88,
+ 50408 - 44032: 0x9D89,
+ 50409 - 44032: 0xBEB1,
+ 50410 - 44032: 0x9D8A,
+ 50411 - 44032: 0x9D8B,
+ 50412 - 44032: 0x9D8C,
+ 50413 - 44032: 0x9D8D,
+ 50414 - 44032: 0x9D8E,
+ 50415 - 44032: 0x9D8F,
+ 50416 - 44032: 0xBEB2,
+ 50417 - 44032: 0xBEB3,
+ 50418 - 44032: 0x9D90,
+ 50419 - 44032: 0x9D91,
+ 50420 - 44032: 0xBEB4,
+ 50421 - 44032: 0x9D92,
+ 50422 - 44032: 0x9D93,
+ 50423 - 44032: 0x9D94,
+ 50424 - 44032: 0xBEB5,
+ 50425 - 44032: 0x9D95,
+ 50426 - 44032: 0xBEB6,
+ 50427 - 44032: 0x9D96,
+ 50428 - 44032: 0x9D97,
+ 50429 - 44032: 0x9D98,
+ 50430 - 44032: 0x9D99,
+ 50431 - 44032: 0xBEB7,
+ 50432 - 44032: 0xBEB8,
+ 50433 - 44032: 0xBEB9,
+ 50434 - 44032: 0x9D9A,
+ 50435 - 44032: 0x9D9B,
+ 50436 - 44032: 0x9D9C,
+ 50437 - 44032: 0x9D9D,
+ 50438 - 44032: 0x9D9E,
+ 50439 - 44032: 0x9D9F,
+ 50440 - 44032: 0x9DA0,
+ 50441 - 44032: 0x9DA1,
+ 50442 - 44032: 0x9DA2,
+ 50443 - 44032: 0x9DA3,
+ 50444 - 44032: 0xBEBA,
+ 50445 - 44032: 0x9DA4,
+ 50446 - 44032: 0x9DA5,
+ 50447 - 44032: 0x9DA6,
+ 50448 - 44032: 0xBEBB,
+ 50449 - 44032: 0x9DA7,
+ 50450 - 44032: 0x9DA8,
+ 50451 - 44032: 0x9DA9,
+ 50452 - 44032: 0xBEBC,
+ 50453 - 44032: 0x9DAA,
+ 50454 - 44032: 0x9DAB,
+ 50455 - 44032: 0x9DAC,
+ 50456 - 44032: 0x9DAD,
+ 50457 - 44032: 0x9DAE,
+ 50458 - 44032: 0x9DAF,
+ 50459 - 44032: 0x9DB0,
+ 50460 - 44032: 0xBEBD,
+ 50461 - 44032: 0x9DB1,
+ 50462 - 44032: 0x9DB2,
+ 50463 - 44032: 0x9DB3,
+ 50464 - 44032: 0x9DB4,
+ 50465 - 44032: 0x9DB5,
+ 50466 - 44032: 0x9DB6,
+ 50467 - 44032: 0x9DB7,
+ 50468 - 44032: 0x9DB8,
+ 50469 - 44032: 0x9DB9,
+ 50470 - 44032: 0x9DBA,
+ 50471 - 44032: 0x9DBB,
+ 50472 - 44032: 0xBEBE,
+ 50473 - 44032: 0xBEBF,
+ 50474 - 44032: 0x9DBC,
+ 50475 - 44032: 0x9DBD,
+ 50476 - 44032: 0xBEC0,
+ 50477 - 44032: 0x9DBE,
+ 50478 - 44032: 0x9DBF,
+ 50479 - 44032: 0x9DC0,
+ 50480 - 44032: 0xBEC1,
+ 50481 - 44032: 0x9DC1,
+ 50482 - 44032: 0x9DC2,
+ 50483 - 44032: 0x9DC3,
+ 50484 - 44032: 0x9DC4,
+ 50485 - 44032: 0x9DC5,
+ 50486 - 44032: 0x9DC6,
+ 50487 - 44032: 0x9DC7,
+ 50488 - 44032: 0xBEC2,
+ 50489 - 44032: 0xBEC3,
+ 50490 - 44032: 0x9DC8,
+ 50491 - 44032: 0xBEC4,
+ 50492 - 44032: 0x9DC9,
+ 50493 - 44032: 0xBEC5,
+ 50494 - 44032: 0x9DCA,
+ 50495 - 44032: 0x9DCB,
+ 50496 - 44032: 0x9DCC,
+ 50497 - 44032: 0x9DCD,
+ 50498 - 44032: 0x9DCE,
+ 50499 - 44032: 0x9DCF,
+ 50500 - 44032: 0xBEC6,
+ 50501 - 44032: 0xBEC7,
+ 50502 - 44032: 0x9DD0,
+ 50503 - 44032: 0x9DD1,
+ 50504 - 44032: 0xBEC8,
+ 50505 - 44032: 0xBEC9,
+ 50506 - 44032: 0xBECA,
+ 50507 - 44032: 0x9DD2,
+ 50508 - 44032: 0xBECB,
+ 50509 - 44032: 0xBECC,
+ 50510 - 44032: 0xBECD,
+ 50511 - 44032: 0x9DD3,
+ 50512 - 44032: 0x9DD4,
+ 50513 - 44032: 0x9DD5,
+ 50514 - 44032: 0x9DD6,
+ 50515 - 44032: 0xBECE,
+ 50516 - 44032: 0xBECF,
+ 50517 - 44032: 0xBED0,
+ 50518 - 44032: 0x9DD7,
+ 50519 - 44032: 0xBED1,
+ 50520 - 44032: 0xBED2,
+ 50521 - 44032: 0xBED3,
+ 50522 - 44032: 0x9DD8,
+ 50523 - 44032: 0x9DD9,
+ 50524 - 44032: 0x9DDA,
+ 50525 - 44032: 0xBED4,
+ 50526 - 44032: 0xBED5,
+ 50527 - 44032: 0x9DDB,
+ 50528 - 44032: 0xBED6,
+ 50529 - 44032: 0xBED7,
+ 50530 - 44032: 0x9DDC,
+ 50531 - 44032: 0x9DDD,
+ 50532 - 44032: 0xBED8,
+ 50533 - 44032: 0x9DDE,
+ 50534 - 44032: 0x9DDF,
+ 50535 - 44032: 0x9DE0,
+ 50536 - 44032: 0xBED9,
+ 50537 - 44032: 0x9DE1,
+ 50538 - 44032: 0x9DE2,
+ 50539 - 44032: 0x9DE3,
+ 50540 - 44032: 0x9DE4,
+ 50541 - 44032: 0x9DE5,
+ 50542 - 44032: 0x9DE6,
+ 50543 - 44032: 0x9DE7,
+ 50544 - 44032: 0xBEDA,
+ 50545 - 44032: 0xBEDB,
+ 50546 - 44032: 0x9DE8,
+ 50547 - 44032: 0xBEDC,
+ 50548 - 44032: 0xBEDD,
+ 50549 - 44032: 0xBEDE,
+ 50550 - 44032: 0x9DE9,
+ 50551 - 44032: 0x9DEA,
+ 50552 - 44032: 0x9DEB,
+ 50553 - 44032: 0x9DEC,
+ 50554 - 44032: 0x9DED,
+ 50555 - 44032: 0x9DEE,
+ 50556 - 44032: 0xBEDF,
+ 50557 - 44032: 0xBEE0,
+ 50558 - 44032: 0x9DEF,
+ 50559 - 44032: 0x9DF0,
+ 50560 - 44032: 0xBEE1,
+ 50561 - 44032: 0x9DF1,
+ 50562 - 44032: 0x9DF2,
+ 50563 - 44032: 0x9DF3,
+ 50564 - 44032: 0xBEE2,
+ 50565 - 44032: 0x9DF4,
+ 50566 - 44032: 0x9DF5,
+ 50567 - 44032: 0xBEE3,
+ 50568 - 44032: 0x9DF6,
+ 50569 - 44032: 0x9DF7,
+ 50570 - 44032: 0x9DF8,
+ 50571 - 44032: 0x9DF9,
+ 50572 - 44032: 0xBEE4,
+ 50573 - 44032: 0xBEE5,
+ 50574 - 44032: 0x9DFA,
+ 50575 - 44032: 0xBEE6,
+ 50576 - 44032: 0x9DFB,
+ 50577 - 44032: 0xBEE7,
+ 50578 - 44032: 0x9DFC,
+ 50579 - 44032: 0x9DFD,
+ 50580 - 44032: 0x9DFE,
+ 50581 - 44032: 0xBEE8,
+ 50582 - 44032: 0x9E41,
+ 50583 - 44032: 0xBEE9,
+ 50584 - 44032: 0xBEEA,
+ 50585 - 44032: 0x9E42,
+ 50586 - 44032: 0x9E43,
+ 50587 - 44032: 0x9E44,
+ 50588 - 44032: 0xBEEB,
+ 50589 - 44032: 0x9E45,
+ 50590 - 44032: 0x9E46,
+ 50591 - 44032: 0x9E47,
+ 50592 - 44032: 0xBEEC,
+ 50593 - 44032: 0x9E48,
+ 50594 - 44032: 0x9E49,
+ 50595 - 44032: 0x9E4A,
+ 50596 - 44032: 0x9E4B,
+ 50597 - 44032: 0x9E4C,
+ 50598 - 44032: 0x9E4D,
+ 50599 - 44032: 0x9E4E,
+ 50600 - 44032: 0x9E4F,
+ 50601 - 44032: 0xBEED,
+ 50602 - 44032: 0x9E50,
+ 50603 - 44032: 0x9E51,
+ 50604 - 44032: 0x9E52,
+ 50605 - 44032: 0x9E53,
+ 50606 - 44032: 0x9E54,
+ 50607 - 44032: 0x9E55,
+ 50608 - 44032: 0x9E56,
+ 50609 - 44032: 0x9E57,
+ 50610 - 44032: 0x9E58,
+ 50611 - 44032: 0x9E59,
+ 50612 - 44032: 0xBEEE,
+ 50613 - 44032: 0xBEEF,
+ 50614 - 44032: 0x9E5A,
+ 50615 - 44032: 0x9E61,
+ 50616 - 44032: 0xBEF0,
+ 50617 - 44032: 0xBEF1,
+ 50618 - 44032: 0x9E62,
+ 50619 - 44032: 0xBEF2,
+ 50620 - 44032: 0xBEF3,
+ 50621 - 44032: 0xBEF4,
+ 50622 - 44032: 0xBEF5,
+ 50623 - 44032: 0x9E63,
+ 50624 - 44032: 0x9E64,
+ 50625 - 44032: 0x9E65,
+ 50626 - 44032: 0x9E66,
+ 50627 - 44032: 0x9E67,
+ 50628 - 44032: 0xBEF6,
+ 50629 - 44032: 0xBEF7,
+ 50630 - 44032: 0xBEF8,
+ 50631 - 44032: 0xBEF9,
+ 50632 - 44032: 0xBEFA,
+ 50633 - 44032: 0xBEFB,
+ 50634 - 44032: 0xBEFC,
+ 50635 - 44032: 0x9E68,
+ 50636 - 44032: 0xBEFD,
+ 50637 - 44032: 0x9E69,
+ 50638 - 44032: 0xBEFE,
+ 50639 - 44032: 0x9E6A,
+ 50640 - 44032: 0xBFA1,
+ 50641 - 44032: 0xBFA2,
+ 50642 - 44032: 0x9E6B,
+ 50643 - 44032: 0x9E6C,
+ 50644 - 44032: 0xBFA3,
+ 50645 - 44032: 0x9E6D,
+ 50646 - 44032: 0x9E6E,
+ 50647 - 44032: 0x9E6F,
+ 50648 - 44032: 0xBFA4,
+ 50649 - 44032: 0x9E70,
+ 50650 - 44032: 0x9E71,
+ 50651 - 44032: 0x9E72,
+ 50652 - 44032: 0x9E73,
+ 50653 - 44032: 0x9E74,
+ 50654 - 44032: 0x9E75,
+ 50655 - 44032: 0x9E76,
+ 50656 - 44032: 0xBFA5,
+ 50657 - 44032: 0xBFA6,
+ 50658 - 44032: 0x9E77,
+ 50659 - 44032: 0xBFA7,
+ 50660 - 44032: 0x9E78,
+ 50661 - 44032: 0xBFA8,
+ 50662 - 44032: 0x9E79,
+ 50663 - 44032: 0x9E7A,
+ 50664 - 44032: 0x9E81,
+ 50665 - 44032: 0x9E82,
+ 50666 - 44032: 0x9E83,
+ 50667 - 44032: 0x9E84,
+ 50668 - 44032: 0xBFA9,
+ 50669 - 44032: 0xBFAA,
+ 50670 - 44032: 0xBFAB,
+ 50671 - 44032: 0x9E85,
+ 50672 - 44032: 0xBFAC,
+ 50673 - 44032: 0x9E86,
+ 50674 - 44032: 0x9E87,
+ 50675 - 44032: 0x9E88,
+ 50676 - 44032: 0xBFAD,
+ 50677 - 44032: 0x9E89,
+ 50678 - 44032: 0xBFAE,
+ 50679 - 44032: 0xBFAF,
+ 50680 - 44032: 0x9E8A,
+ 50681 - 44032: 0x9E8B,
+ 50682 - 44032: 0x9E8C,
+ 50683 - 44032: 0x9E8D,
+ 50684 - 44032: 0xBFB0,
+ 50685 - 44032: 0xBFB1,
+ 50686 - 44032: 0xBFB2,
+ 50687 - 44032: 0xBFB3,
+ 50688 - 44032: 0xBFB4,
+ 50689 - 44032: 0xBFB5,
+ 50690 - 44032: 0x9E8E,
+ 50691 - 44032: 0x9E8F,
+ 50692 - 44032: 0x9E90,
+ 50693 - 44032: 0xBFB6,
+ 50694 - 44032: 0xBFB7,
+ 50695 - 44032: 0xBFB8,
+ 50696 - 44032: 0xBFB9,
+ 50697 - 44032: 0x9E91,
+ 50698 - 44032: 0x9E92,
+ 50699 - 44032: 0x9E93,
+ 50700 - 44032: 0xBFBA,
+ 50701 - 44032: 0x9E94,
+ 50702 - 44032: 0x9E95,
+ 50703 - 44032: 0x9E96,
+ 50704 - 44032: 0xBFBB,
+ 50705 - 44032: 0x9E97,
+ 50706 - 44032: 0x9E98,
+ 50707 - 44032: 0x9E99,
+ 50708 - 44032: 0x9E9A,
+ 50709 - 44032: 0x9E9B,
+ 50710 - 44032: 0x9E9C,
+ 50711 - 44032: 0x9E9D,
+ 50712 - 44032: 0xBFBC,
+ 50713 - 44032: 0xBFBD,
+ 50714 - 44032: 0x9E9E,
+ 50715 - 44032: 0xBFBE,
+ 50716 - 44032: 0xBFBF,
+ 50717 - 44032: 0x9E9F,
+ 50718 - 44032: 0x9EA0,
+ 50719 - 44032: 0x9EA1,
+ 50720 - 44032: 0x9EA2,
+ 50721 - 44032: 0x9EA3,
+ 50722 - 44032: 0x9EA4,
+ 50723 - 44032: 0x9EA5,
+ 50724 - 44032: 0xBFC0,
+ 50725 - 44032: 0xBFC1,
+ 50726 - 44032: 0x9EA6,
+ 50727 - 44032: 0x9EA7,
+ 50728 - 44032: 0xBFC2,
+ 50729 - 44032: 0x9EA8,
+ 50730 - 44032: 0x9EA9,
+ 50731 - 44032: 0x9EAA,
+ 50732 - 44032: 0xBFC3,
+ 50733 - 44032: 0xBFC4,
+ 50734 - 44032: 0xBFC5,
+ 50735 - 44032: 0x9EAB,
+ 50736 - 44032: 0xBFC6,
+ 50737 - 44032: 0x9EAC,
+ 50738 - 44032: 0x9EAD,
+ 50739 - 44032: 0xBFC7,
+ 50740 - 44032: 0xBFC8,
+ 50741 - 44032: 0xBFC9,
+ 50742 - 44032: 0x9EAE,
+ 50743 - 44032: 0xBFCA,
+ 50744 - 44032: 0x9EAF,
+ 50745 - 44032: 0xBFCB,
+ 50746 - 44032: 0x9EB0,
+ 50747 - 44032: 0xBFCC,
+ 50748 - 44032: 0x9EB1,
+ 50749 - 44032: 0x9EB2,
+ 50750 - 44032: 0x9EB3,
+ 50751 - 44032: 0x9EB4,
+ 50752 - 44032: 0xBFCD,
+ 50753 - 44032: 0xBFCE,
+ 50754 - 44032: 0x9EB5,
+ 50755 - 44032: 0x9EB6,
+ 50756 - 44032: 0xBFCF,
+ 50757 - 44032: 0x9EB7,
+ 50758 - 44032: 0x9EB8,
+ 50759 - 44032: 0x9EB9,
+ 50760 - 44032: 0xBFD0,
+ 50761 - 44032: 0x9EBA,
+ 50762 - 44032: 0x9EBB,
+ 50763 - 44032: 0x9EBC,
+ 50764 - 44032: 0x9EBD,
+ 50765 - 44032: 0x9EBE,
+ 50766 - 44032: 0x9EBF,
+ 50767 - 44032: 0x9EC0,
+ 50768 - 44032: 0xBFD1,
+ 50769 - 44032: 0xBFD2,
+ 50770 - 44032: 0x9EC1,
+ 50771 - 44032: 0xBFD3,
+ 50772 - 44032: 0xBFD4,
+ 50773 - 44032: 0xBFD5,
+ 50774 - 44032: 0x9EC2,
+ 50775 - 44032: 0x9EC3,
+ 50776 - 44032: 0x9EC4,
+ 50777 - 44032: 0x9EC5,
+ 50778 - 44032: 0x9EC6,
+ 50779 - 44032: 0x9EC7,
+ 50780 - 44032: 0xBFD6,
+ 50781 - 44032: 0xBFD7,
+ 50782 - 44032: 0x9EC8,
+ 50783 - 44032: 0x9EC9,
+ 50784 - 44032: 0xBFD8,
+ 50785 - 44032: 0x9ECA,
+ 50786 - 44032: 0x9ECB,
+ 50787 - 44032: 0x9ECC,
+ 50788 - 44032: 0x9ECD,
+ 50789 - 44032: 0x9ECE,
+ 50790 - 44032: 0x9ECF,
+ 50791 - 44032: 0x9ED0,
+ 50792 - 44032: 0x9ED1,
+ 50793 - 44032: 0x9ED2,
+ 50794 - 44032: 0x9ED3,
+ 50795 - 44032: 0x9ED4,
+ 50796 - 44032: 0xBFD9,
+ 50797 - 44032: 0x9ED5,
+ 50798 - 44032: 0x9ED6,
+ 50799 - 44032: 0xBFDA,
+ 50800 - 44032: 0x9ED7,
+ 50801 - 44032: 0xBFDB,
+ 50802 - 44032: 0x9ED8,
+ 50803 - 44032: 0x9ED9,
+ 50804 - 44032: 0x9EDA,
+ 50805 - 44032: 0x9EDB,
+ 50806 - 44032: 0x9EDC,
+ 50807 - 44032: 0x9EDD,
+ 50808 - 44032: 0xBFDC,
+ 50809 - 44032: 0xBFDD,
+ 50810 - 44032: 0x9EDE,
+ 50811 - 44032: 0x9EDF,
+ 50812 - 44032: 0xBFDE,
+ 50813 - 44032: 0x9EE0,
+ 50814 - 44032: 0x9EE1,
+ 50815 - 44032: 0x9EE2,
+ 50816 - 44032: 0xBFDF,
+ 50817 - 44032: 0x9EE3,
+ 50818 - 44032: 0x9EE4,
+ 50819 - 44032: 0x9EE5,
+ 50820 - 44032: 0x9EE6,
+ 50821 - 44032: 0x9EE7,
+ 50822 - 44032: 0x9EE8,
+ 50823 - 44032: 0x9EE9,
+ 50824 - 44032: 0xBFE0,
+ 50825 - 44032: 0xBFE1,
+ 50826 - 44032: 0x9EEA,
+ 50827 - 44032: 0xBFE2,
+ 50828 - 44032: 0x9EEB,
+ 50829 - 44032: 0xBFE3,
+ 50830 - 44032: 0x9EEC,
+ 50831 - 44032: 0x9EED,
+ 50832 - 44032: 0x9EEE,
+ 50833 - 44032: 0x9EEF,
+ 50834 - 44032: 0x9EF0,
+ 50835 - 44032: 0x9EF1,
+ 50836 - 44032: 0xBFE4,
+ 50837 - 44032: 0xBFE5,
+ 50838 - 44032: 0x9EF2,
+ 50839 - 44032: 0x9EF3,
+ 50840 - 44032: 0xBFE6,
+ 50841 - 44032: 0x9EF4,
+ 50842 - 44032: 0x9EF5,
+ 50843 - 44032: 0x9EF6,
+ 50844 - 44032: 0xBFE7,
+ 50845 - 44032: 0x9EF7,
+ 50846 - 44032: 0x9EF8,
+ 50847 - 44032: 0x9EF9,
+ 50848 - 44032: 0x9EFA,
+ 50849 - 44032: 0x9EFB,
+ 50850 - 44032: 0x9EFC,
+ 50851 - 44032: 0x9EFD,
+ 50852 - 44032: 0xBFE8,
+ 50853 - 44032: 0xBFE9,
+ 50854 - 44032: 0x9EFE,
+ 50855 - 44032: 0xBFEA,
+ 50856 - 44032: 0x9F41,
+ 50857 - 44032: 0xBFEB,
+ 50858 - 44032: 0x9F42,
+ 50859 - 44032: 0x9F43,
+ 50860 - 44032: 0x9F44,
+ 50861 - 44032: 0x9F45,
+ 50862 - 44032: 0x9F46,
+ 50863 - 44032: 0x9F47,
+ 50864 - 44032: 0xBFEC,
+ 50865 - 44032: 0xBFED,
+ 50866 - 44032: 0x9F48,
+ 50867 - 44032: 0x9F49,
+ 50868 - 44032: 0xBFEE,
+ 50869 - 44032: 0x9F4A,
+ 50870 - 44032: 0x9F4B,
+ 50871 - 44032: 0x9F4C,
+ 50872 - 44032: 0xBFEF,
+ 50873 - 44032: 0xBFF0,
+ 50874 - 44032: 0xBFF1,
+ 50875 - 44032: 0x9F4D,
+ 50876 - 44032: 0x9F4E,
+ 50877 - 44032: 0x9F4F,
+ 50878 - 44032: 0x9F50,
+ 50879 - 44032: 0x9F51,
+ 50880 - 44032: 0xBFF2,
+ 50881 - 44032: 0xBFF3,
+ 50882 - 44032: 0x9F52,
+ 50883 - 44032: 0xBFF4,
+ 50884 - 44032: 0x9F53,
+ 50885 - 44032: 0xBFF5,
+ 50886 - 44032: 0x9F54,
+ 50887 - 44032: 0x9F55,
+ 50888 - 44032: 0x9F56,
+ 50889 - 44032: 0x9F57,
+ 50890 - 44032: 0x9F58,
+ 50891 - 44032: 0x9F59,
+ 50892 - 44032: 0xBFF6,
+ 50893 - 44032: 0xBFF7,
+ 50894 - 44032: 0x9F5A,
+ 50895 - 44032: 0x9F61,
+ 50896 - 44032: 0xBFF8,
+ 50897 - 44032: 0x9F62,
+ 50898 - 44032: 0x9F63,
+ 50899 - 44032: 0x9F64,
+ 50900 - 44032: 0xBFF9,
+ 50901 - 44032: 0x9F65,
+ 50902 - 44032: 0x9F66,
+ 50903 - 44032: 0x9F67,
+ 50904 - 44032: 0x9F68,
+ 50905 - 44032: 0x9F69,
+ 50906 - 44032: 0x9F6A,
+ 50907 - 44032: 0x9F6B,
+ 50908 - 44032: 0xBFFA,
+ 50909 - 44032: 0xBFFB,
+ 50910 - 44032: 0x9F6C,
+ 50911 - 44032: 0x9F6D,
+ 50912 - 44032: 0xBFFC,
+ 50913 - 44032: 0xBFFD,
+ 50914 - 44032: 0x9F6E,
+ 50915 - 44032: 0x9F6F,
+ 50916 - 44032: 0x9F70,
+ 50917 - 44032: 0x9F71,
+ 50918 - 44032: 0x9F72,
+ 50919 - 44032: 0x9F73,
+ 50920 - 44032: 0xBFFE,
+ 50921 - 44032: 0xC0A1,
+ 50922 - 44032: 0x9F74,
+ 50923 - 44032: 0x9F75,
+ 50924 - 44032: 0xC0A2,
+ 50925 - 44032: 0x9F76,
+ 50926 - 44032: 0x9F77,
+ 50927 - 44032: 0x9F78,
+ 50928 - 44032: 0xC0A3,
+ 50929 - 44032: 0x9F79,
+ 50930 - 44032: 0x9F7A,
+ 50931 - 44032: 0x9F81,
+ 50932 - 44032: 0x9F82,
+ 50933 - 44032: 0x9F83,
+ 50934 - 44032: 0x9F84,
+ 50935 - 44032: 0x9F85,
+ 50936 - 44032: 0xC0A4,
+ 50937 - 44032: 0xC0A5,
+ 50938 - 44032: 0x9F86,
+ 50939 - 44032: 0x9F87,
+ 50940 - 44032: 0x9F88,
+ 50941 - 44032: 0xC0A6,
+ 50942 - 44032: 0x9F89,
+ 50943 - 44032: 0x9F8A,
+ 50944 - 44032: 0x9F8B,
+ 50945 - 44032: 0x9F8C,
+ 50946 - 44032: 0x9F8D,
+ 50947 - 44032: 0x9F8E,
+ 50948 - 44032: 0xC0A7,
+ 50949 - 44032: 0xC0A8,
+ 50950 - 44032: 0x9F8F,
+ 50951 - 44032: 0x9F90,
+ 50952 - 44032: 0xC0A9,
+ 50953 - 44032: 0x9F91,
+ 50954 - 44032: 0x9F92,
+ 50955 - 44032: 0x9F93,
+ 50956 - 44032: 0xC0AA,
+ 50957 - 44032: 0x9F94,
+ 50958 - 44032: 0x9F95,
+ 50959 - 44032: 0x9F96,
+ 50960 - 44032: 0x9F97,
+ 50961 - 44032: 0x9F98,
+ 50962 - 44032: 0x9F99,
+ 50963 - 44032: 0x9F9A,
+ 50964 - 44032: 0xC0AB,
+ 50965 - 44032: 0xC0AC,
+ 50966 - 44032: 0x9F9B,
+ 50967 - 44032: 0xC0AD,
+ 50968 - 44032: 0x9F9C,
+ 50969 - 44032: 0xC0AE,
+ 50970 - 44032: 0x9F9D,
+ 50971 - 44032: 0x9F9E,
+ 50972 - 44032: 0x9F9F,
+ 50973 - 44032: 0x9FA0,
+ 50974 - 44032: 0x9FA1,
+ 50975 - 44032: 0x9FA2,
+ 50976 - 44032: 0xC0AF,
+ 50977 - 44032: 0xC0B0,
+ 50978 - 44032: 0x9FA3,
+ 50979 - 44032: 0x9FA4,
+ 50980 - 44032: 0xC0B1,
+ 50981 - 44032: 0x9FA5,
+ 50982 - 44032: 0x9FA6,
+ 50983 - 44032: 0x9FA7,
+ 50984 - 44032: 0xC0B2,
+ 50985 - 44032: 0x9FA8,
+ 50986 - 44032: 0x9FA9,
+ 50987 - 44032: 0x9FAA,
+ 50988 - 44032: 0x9FAB,
+ 50989 - 44032: 0x9FAC,
+ 50990 - 44032: 0x9FAD,
+ 50991 - 44032: 0x9FAE,
+ 50992 - 44032: 0xC0B3,
+ 50993 - 44032: 0xC0B4,
+ 50994 - 44032: 0x9FAF,
+ 50995 - 44032: 0xC0B5,
+ 50996 - 44032: 0x9FB0,
+ 50997 - 44032: 0xC0B6,
+ 50998 - 44032: 0x9FB1,
+ 50999 - 44032: 0xC0B7,
+ 51000 - 44032: 0x9FB2,
+ 51001 - 44032: 0x9FB3,
+ 51002 - 44032: 0x9FB4,
+ 51003 - 44032: 0x9FB5,
+ 51004 - 44032: 0xC0B8,
+ 51005 - 44032: 0xC0B9,
+ 51006 - 44032: 0x9FB6,
+ 51007 - 44032: 0x9FB7,
+ 51008 - 44032: 0xC0BA,
+ 51009 - 44032: 0x9FB8,
+ 51010 - 44032: 0x9FB9,
+ 51011 - 44032: 0x9FBA,
+ 51012 - 44032: 0xC0BB,
+ 51013 - 44032: 0x9FBB,
+ 51014 - 44032: 0x9FBC,
+ 51015 - 44032: 0x9FBD,
+ 51016 - 44032: 0x9FBE,
+ 51017 - 44032: 0x9FBF,
+ 51018 - 44032: 0xC0BC,
+ 51019 - 44032: 0x9FC0,
+ 51020 - 44032: 0xC0BD,
+ 51021 - 44032: 0xC0BE,
+ 51022 - 44032: 0x9FC1,
+ 51023 - 44032: 0xC0BF,
+ 51024 - 44032: 0x9FC2,
+ 51025 - 44032: 0xC0C0,
+ 51026 - 44032: 0xC0C1,
+ 51027 - 44032: 0xC0C2,
+ 51028 - 44032: 0xC0C3,
+ 51029 - 44032: 0xC0C4,
+ 51030 - 44032: 0xC0C5,
+ 51031 - 44032: 0xC0C6,
+ 51032 - 44032: 0xC0C7,
+ 51033 - 44032: 0x9FC3,
+ 51034 - 44032: 0x9FC4,
+ 51035 - 44032: 0x9FC5,
+ 51036 - 44032: 0xC0C8,
+ 51037 - 44032: 0x9FC6,
+ 51038 - 44032: 0x9FC7,
+ 51039 - 44032: 0x9FC8,
+ 51040 - 44032: 0xC0C9,
+ 51041 - 44032: 0x9FC9,
+ 51042 - 44032: 0x9FCA,
+ 51043 - 44032: 0x9FCB,
+ 51044 - 44032: 0x9FCC,
+ 51045 - 44032: 0x9FCD,
+ 51046 - 44032: 0x9FCE,
+ 51047 - 44032: 0x9FCF,
+ 51048 - 44032: 0xC0CA,
+ 51049 - 44032: 0x9FD0,
+ 51050 - 44032: 0x9FD1,
+ 51051 - 44032: 0xC0CB,
+ 51052 - 44032: 0x9FD2,
+ 51053 - 44032: 0x9FD3,
+ 51054 - 44032: 0x9FD4,
+ 51055 - 44032: 0x9FD5,
+ 51056 - 44032: 0x9FD6,
+ 51057 - 44032: 0x9FD7,
+ 51058 - 44032: 0x9FD8,
+ 51059 - 44032: 0x9FD9,
+ 51060 - 44032: 0xC0CC,
+ 51061 - 44032: 0xC0CD,
+ 51062 - 44032: 0x9FDA,
+ 51063 - 44032: 0x9FDB,
+ 51064 - 44032: 0xC0CE,
+ 51065 - 44032: 0x9FDC,
+ 51066 - 44032: 0x9FDD,
+ 51067 - 44032: 0x9FDE,
+ 51068 - 44032: 0xC0CF,
+ 51069 - 44032: 0xC0D0,
+ 51070 - 44032: 0xC0D1,
+ 51071 - 44032: 0x9FDF,
+ 51072 - 44032: 0x9FE0,
+ 51073 - 44032: 0x9FE1,
+ 51074 - 44032: 0x9FE2,
+ 51075 - 44032: 0xC0D2,
+ 51076 - 44032: 0xC0D3,
+ 51077 - 44032: 0xC0D4,
+ 51078 - 44032: 0x9FE3,
+ 51079 - 44032: 0xC0D5,
+ 51080 - 44032: 0xC0D6,
+ 51081 - 44032: 0xC0D7,
+ 51082 - 44032: 0xC0D8,
+ 51083 - 44032: 0x9FE4,
+ 51084 - 44032: 0x9FE5,
+ 51085 - 44032: 0x9FE6,
+ 51086 - 44032: 0xC0D9,
+ 51087 - 44032: 0x9FE7,
+ 51088 - 44032: 0xC0DA,
+ 51089 - 44032: 0xC0DB,
+ 51090 - 44032: 0x9FE8,
+ 51091 - 44032: 0x9FE9,
+ 51092 - 44032: 0xC0DC,
+ 51093 - 44032: 0x9FEA,
+ 51094 - 44032: 0xC0DD,
+ 51095 - 44032: 0xC0DE,
+ 51096 - 44032: 0xC0DF,
+ 51097 - 44032: 0x9FEB,
+ 51098 - 44032: 0xC0E0,
+ 51099 - 44032: 0x9FEC,
+ 51100 - 44032: 0x9FED,
+ 51101 - 44032: 0x9FEE,
+ 51102 - 44032: 0x9FEF,
+ 51103 - 44032: 0x9FF0,
+ 51104 - 44032: 0xC0E1,
+ 51105 - 44032: 0xC0E2,
+ 51106 - 44032: 0x9FF1,
+ 51107 - 44032: 0xC0E3,
+ 51108 - 44032: 0xC0E4,
+ 51109 - 44032: 0xC0E5,
+ 51110 - 44032: 0xC0E6,
+ 51111 - 44032: 0x9FF2,
+ 51112 - 44032: 0x9FF3,
+ 51113 - 44032: 0x9FF4,
+ 51114 - 44032: 0x9FF5,
+ 51115 - 44032: 0x9FF6,
+ 51116 - 44032: 0xC0E7,
+ 51117 - 44032: 0xC0E8,
+ 51118 - 44032: 0x9FF7,
+ 51119 - 44032: 0x9FF8,
+ 51120 - 44032: 0xC0E9,
+ 51121 - 44032: 0x9FF9,
+ 51122 - 44032: 0x9FFA,
+ 51123 - 44032: 0x9FFB,
+ 51124 - 44032: 0xC0EA,
+ 51125 - 44032: 0x9FFC,
+ 51126 - 44032: 0x9FFD,
+ 51127 - 44032: 0x9FFE,
+ 51128 - 44032: 0xA041,
+ 51129 - 44032: 0xA042,
+ 51130 - 44032: 0xA043,
+ 51131 - 44032: 0xA044,
+ 51132 - 44032: 0xC0EB,
+ 51133 - 44032: 0xC0EC,
+ 51134 - 44032: 0xA045,
+ 51135 - 44032: 0xC0ED,
+ 51136 - 44032: 0xC0EE,
+ 51137 - 44032: 0xC0EF,
+ 51138 - 44032: 0xA046,
+ 51139 - 44032: 0xA047,
+ 51140 - 44032: 0xA048,
+ 51141 - 44032: 0xA049,
+ 51142 - 44032: 0xA04A,
+ 51143 - 44032: 0xA04B,
+ 51144 - 44032: 0xC0F0,
+ 51145 - 44032: 0xC0F1,
+ 51146 - 44032: 0xA04C,
+ 51147 - 44032: 0xA04D,
+ 51148 - 44032: 0xC0F2,
+ 51149 - 44032: 0xA04E,
+ 51150 - 44032: 0xC0F3,
+ 51151 - 44032: 0xA04F,
+ 51152 - 44032: 0xC0F4,
+ 51153 - 44032: 0xA050,
+ 51154 - 44032: 0xA051,
+ 51155 - 44032: 0xA052,
+ 51156 - 44032: 0xA053,
+ 51157 - 44032: 0xA054,
+ 51158 - 44032: 0xA055,
+ 51159 - 44032: 0xA056,
+ 51160 - 44032: 0xC0F5,
+ 51161 - 44032: 0xA057,
+ 51162 - 44032: 0xA058,
+ 51163 - 44032: 0xA059,
+ 51164 - 44032: 0xA05A,
+ 51165 - 44032: 0xC0F6,
+ 51166 - 44032: 0xA061,
+ 51167 - 44032: 0xA062,
+ 51168 - 44032: 0xA063,
+ 51169 - 44032: 0xA064,
+ 51170 - 44032: 0xA065,
+ 51171 - 44032: 0xA066,
+ 51172 - 44032: 0xC0F7,
+ 51173 - 44032: 0xA067,
+ 51174 - 44032: 0xA068,
+ 51175 - 44032: 0xA069,
+ 51176 - 44032: 0xC0F8,
+ 51177 - 44032: 0xA06A,
+ 51178 - 44032: 0xA06B,
+ 51179 - 44032: 0xA06C,
+ 51180 - 44032: 0xC0F9,
+ 51181 - 44032: 0xA06D,
+ 51182 - 44032: 0xA06E,
+ 51183 - 44032: 0xA06F,
+ 51184 - 44032: 0xA070,
+ 51185 - 44032: 0xA071,
+ 51186 - 44032: 0xA072,
+ 51187 - 44032: 0xA073,
+ 51188 - 44032: 0xA074,
+ 51189 - 44032: 0xA075,
+ 51190 - 44032: 0xA076,
+ 51191 - 44032: 0xA077,
+ 51192 - 44032: 0xA078,
+ 51193 - 44032: 0xA079,
+ 51194 - 44032: 0xA07A,
+ 51195 - 44032: 0xA081,
+ 51196 - 44032: 0xA082,
+ 51197 - 44032: 0xA083,
+ 51198 - 44032: 0xA084,
+ 51199 - 44032: 0xA085,
+ 51200 - 44032: 0xC0FA,
+ 51201 - 44032: 0xC0FB,
+ 51202 - 44032: 0xA086,
+ 51203 - 44032: 0xA087,
+ 51204 - 44032: 0xC0FC,
+ 51205 - 44032: 0xA088,
+ 51206 - 44032: 0xA089,
+ 51207 - 44032: 0xA08A,
+ 51208 - 44032: 0xC0FD,
+ 51209 - 44032: 0xA08B,
+ 51210 - 44032: 0xC0FE,
+ 51211 - 44032: 0xA08C,
+ 51212 - 44032: 0xA08D,
+ 51213 - 44032: 0xA08E,
+ 51214 - 44032: 0xA08F,
+ 51215 - 44032: 0xA090,
+ 51216 - 44032: 0xC1A1,
+ 51217 - 44032: 0xC1A2,
+ 51218 - 44032: 0xA091,
+ 51219 - 44032: 0xC1A3,
+ 51220 - 44032: 0xA092,
+ 51221 - 44032: 0xC1A4,
+ 51222 - 44032: 0xC1A5,
+ 51223 - 44032: 0xA093,
+ 51224 - 44032: 0xA094,
+ 51225 - 44032: 0xA095,
+ 51226 - 44032: 0xA096,
+ 51227 - 44032: 0xA097,
+ 51228 - 44032: 0xC1A6,
+ 51229 - 44032: 0xC1A7,
+ 51230 - 44032: 0xA098,
+ 51231 - 44032: 0xA099,
+ 51232 - 44032: 0xC1A8,
+ 51233 - 44032: 0xA09A,
+ 51234 - 44032: 0xA09B,
+ 51235 - 44032: 0xA09C,
+ 51236 - 44032: 0xC1A9,
+ 51237 - 44032: 0xA09D,
+ 51238 - 44032: 0xA09E,
+ 51239 - 44032: 0xA09F,
+ 51240 - 44032: 0xA0A0,
+ 51241 - 44032: 0xA0A1,
+ 51242 - 44032: 0xA0A2,
+ 51243 - 44032: 0xA0A3,
+ 51244 - 44032: 0xC1AA,
+ 51245 - 44032: 0xC1AB,
+ 51246 - 44032: 0xA0A4,
+ 51247 - 44032: 0xC1AC,
+ 51248 - 44032: 0xA0A5,
+ 51249 - 44032: 0xC1AD,
+ 51250 - 44032: 0xA0A6,
+ 51251 - 44032: 0xA0A7,
+ 51252 - 44032: 0xA0A8,
+ 51253 - 44032: 0xA0A9,
+ 51254 - 44032: 0xA0AA,
+ 51255 - 44032: 0xA0AB,
+ 51256 - 44032: 0xC1AE,
+ 51257 - 44032: 0xA0AC,
+ 51258 - 44032: 0xA0AD,
+ 51259 - 44032: 0xA0AE,
+ 51260 - 44032: 0xC1AF,
+ 51261 - 44032: 0xA0AF,
+ 51262 - 44032: 0xA0B0,
+ 51263 - 44032: 0xA0B1,
+ 51264 - 44032: 0xC1B0,
+ 51265 - 44032: 0xA0B2,
+ 51266 - 44032: 0xA0B3,
+ 51267 - 44032: 0xA0B4,
+ 51268 - 44032: 0xA0B5,
+ 51269 - 44032: 0xA0B6,
+ 51270 - 44032: 0xA0B7,
+ 51271 - 44032: 0xA0B8,
+ 51272 - 44032: 0xC1B1,
+ 51273 - 44032: 0xC1B2,
+ 51274 - 44032: 0xA0B9,
+ 51275 - 44032: 0xA0BA,
+ 51276 - 44032: 0xC1B3,
+ 51277 - 44032: 0xC1B4,
+ 51278 - 44032: 0xA0BB,
+ 51279 - 44032: 0xA0BC,
+ 51280 - 44032: 0xA0BD,
+ 51281 - 44032: 0xA0BE,
+ 51282 - 44032: 0xA0BF,
+ 51283 - 44032: 0xA0C0,
+ 51284 - 44032: 0xC1B5,
+ 51285 - 44032: 0xA0C1,
+ 51286 - 44032: 0xA0C2,
+ 51287 - 44032: 0xA0C3,
+ 51288 - 44032: 0xA0C4,
+ 51289 - 44032: 0xA0C5,
+ 51290 - 44032: 0xA0C6,
+ 51291 - 44032: 0xA0C7,
+ 51292 - 44032: 0xA0C8,
+ 51293 - 44032: 0xA0C9,
+ 51294 - 44032: 0xA0CA,
+ 51295 - 44032: 0xA0CB,
+ 51296 - 44032: 0xA0CC,
+ 51297 - 44032: 0xA0CD,
+ 51298 - 44032: 0xA0CE,
+ 51299 - 44032: 0xA0CF,
+ 51300 - 44032: 0xA0D0,
+ 51301 - 44032: 0xA0D1,
+ 51302 - 44032: 0xA0D2,
+ 51303 - 44032: 0xA0D3,
+ 51304 - 44032: 0xA0D4,
+ 51305 - 44032: 0xA0D5,
+ 51306 - 44032: 0xA0D6,
+ 51307 - 44032: 0xA0D7,
+ 51308 - 44032: 0xA0D8,
+ 51309 - 44032: 0xA0D9,
+ 51310 - 44032: 0xA0DA,
+ 51311 - 44032: 0xA0DB,
+ 51312 - 44032: 0xC1B6,
+ 51313 - 44032: 0xC1B7,
+ 51314 - 44032: 0xA0DC,
+ 51315 - 44032: 0xA0DD,
+ 51316 - 44032: 0xC1B8,
+ 51317 - 44032: 0xA0DE,
+ 51318 - 44032: 0xA0DF,
+ 51319 - 44032: 0xA0E0,
+ 51320 - 44032: 0xC1B9,
+ 51321 - 44032: 0xA0E1,
+ 51322 - 44032: 0xC1BA,
+ 51323 - 44032: 0xA0E2,
+ 51324 - 44032: 0xA0E3,
+ 51325 - 44032: 0xA0E4,
+ 51326 - 44032: 0xA0E5,
+ 51327 - 44032: 0xA0E6,
+ 51328 - 44032: 0xC1BB,
+ 51329 - 44032: 0xC1BC,
+ 51330 - 44032: 0xA0E7,
+ 51331 - 44032: 0xC1BD,
+ 51332 - 44032: 0xA0E8,
+ 51333 - 44032: 0xC1BE,
+ 51334 - 44032: 0xC1BF,
+ 51335 - 44032: 0xC1C0,
+ 51336 - 44032: 0xA0E9,
+ 51337 - 44032: 0xA0EA,
+ 51338 - 44032: 0xA0EB,
+ 51339 - 44032: 0xC1C1,
+ 51340 - 44032: 0xC1C2,
+ 51341 - 44032: 0xC1C3,
+ 51342 - 44032: 0xA0EC,
+ 51343 - 44032: 0xA0ED,
+ 51344 - 44032: 0xA0EE,
+ 51345 - 44032: 0xA0EF,
+ 51346 - 44032: 0xA0F0,
+ 51347 - 44032: 0xA0F1,
+ 51348 - 44032: 0xC1C4,
+ 51349 - 44032: 0xA0F2,
+ 51350 - 44032: 0xA0F3,
+ 51351 - 44032: 0xA0F4,
+ 51352 - 44032: 0xA0F5,
+ 51353 - 44032: 0xA0F6,
+ 51354 - 44032: 0xA0F7,
+ 51355 - 44032: 0xA0F8,
+ 51356 - 44032: 0xA0F9,
+ 51357 - 44032: 0xC1C5,
+ 51358 - 44032: 0xA0FA,
+ 51359 - 44032: 0xC1C6,
+ 51360 - 44032: 0xA0FB,
+ 51361 - 44032: 0xC1C7,
+ 51362 - 44032: 0xA0FC,
+ 51363 - 44032: 0xA0FD,
+ 51364 - 44032: 0xA0FE,
+ 51365 - 44032: 0xA141,
+ 51366 - 44032: 0xA142,
+ 51367 - 44032: 0xA143,
+ 51368 - 44032: 0xC1C8,
+ 51369 - 44032: 0xA144,
+ 51370 - 44032: 0xA145,
+ 51371 - 44032: 0xA146,
+ 51372 - 44032: 0xA147,
+ 51373 - 44032: 0xA148,
+ 51374 - 44032: 0xA149,
+ 51375 - 44032: 0xA14A,
+ 51376 - 44032: 0xA14B,
+ 51377 - 44032: 0xA14C,
+ 51378 - 44032: 0xA14D,
+ 51379 - 44032: 0xA14E,
+ 51380 - 44032: 0xA14F,
+ 51381 - 44032: 0xA150,
+ 51382 - 44032: 0xA151,
+ 51383 - 44032: 0xA152,
+ 51384 - 44032: 0xA153,
+ 51385 - 44032: 0xA154,
+ 51386 - 44032: 0xA155,
+ 51387 - 44032: 0xA156,
+ 51388 - 44032: 0xC1C9,
+ 51389 - 44032: 0xC1CA,
+ 51390 - 44032: 0xA157,
+ 51391 - 44032: 0xA158,
+ 51392 - 44032: 0xA159,
+ 51393 - 44032: 0xA15A,
+ 51394 - 44032: 0xA161,
+ 51395 - 44032: 0xA162,
+ 51396 - 44032: 0xC1CB,
+ 51397 - 44032: 0xA163,
+ 51398 - 44032: 0xA164,
+ 51399 - 44032: 0xA165,
+ 51400 - 44032: 0xC1CC,
+ 51401 - 44032: 0xA166,
+ 51402 - 44032: 0xA167,
+ 51403 - 44032: 0xA168,
+ 51404 - 44032: 0xC1CD,
+ 51405 - 44032: 0xA169,
+ 51406 - 44032: 0xA16A,
+ 51407 - 44032: 0xA16B,
+ 51408 - 44032: 0xA16C,
+ 51409 - 44032: 0xA16D,
+ 51410 - 44032: 0xA16E,
+ 51411 - 44032: 0xA16F,
+ 51412 - 44032: 0xC1CE,
+ 51413 - 44032: 0xC1CF,
+ 51414 - 44032: 0xA170,
+ 51415 - 44032: 0xC1D0,
+ 51416 - 44032: 0xA171,
+ 51417 - 44032: 0xC1D1,
+ 51418 - 44032: 0xA172,
+ 51419 - 44032: 0xA173,
+ 51420 - 44032: 0xA174,
+ 51421 - 44032: 0xA175,
+ 51422 - 44032: 0xA176,
+ 51423 - 44032: 0xA177,
+ 51424 - 44032: 0xC1D2,
+ 51425 - 44032: 0xC1D3,
+ 51426 - 44032: 0xA178,
+ 51427 - 44032: 0xA179,
+ 51428 - 44032: 0xC1D4,
+ 51429 - 44032: 0xA17A,
+ 51430 - 44032: 0xA181,
+ 51431 - 44032: 0xA182,
+ 51432 - 44032: 0xA183,
+ 51433 - 44032: 0xA184,
+ 51434 - 44032: 0xA185,
+ 51435 - 44032: 0xA186,
+ 51436 - 44032: 0xA187,
+ 51437 - 44032: 0xA188,
+ 51438 - 44032: 0xA189,
+ 51439 - 44032: 0xA18A,
+ 51440 - 44032: 0xA18B,
+ 51441 - 44032: 0xA18C,
+ 51442 - 44032: 0xA18D,
+ 51443 - 44032: 0xA18E,
+ 51444 - 44032: 0xA18F,
+ 51445 - 44032: 0xC1D5,
+ 51446 - 44032: 0xA190,
+ 51447 - 44032: 0xA191,
+ 51448 - 44032: 0xA192,
+ 51449 - 44032: 0xA193,
+ 51450 - 44032: 0xA194,
+ 51451 - 44032: 0xA195,
+ 51452 - 44032: 0xC1D6,
+ 51453 - 44032: 0xC1D7,
+ 51454 - 44032: 0xA196,
+ 51455 - 44032: 0xA197,
+ 51456 - 44032: 0xC1D8,
+ 51457 - 44032: 0xA198,
+ 51458 - 44032: 0xA199,
+ 51459 - 44032: 0xA19A,
+ 51460 - 44032: 0xC1D9,
+ 51461 - 44032: 0xC1DA,
+ 51462 - 44032: 0xC1DB,
+ 51463 - 44032: 0xA19B,
+ 51464 - 44032: 0xA19C,
+ 51465 - 44032: 0xA19D,
+ 51466 - 44032: 0xA19E,
+ 51467 - 44032: 0xA19F,
+ 51468 - 44032: 0xC1DC,
+ 51469 - 44032: 0xC1DD,
+ 51470 - 44032: 0xA1A0,
+ 51471 - 44032: 0xC1DE,
+ 51472 - 44032: 0xA241,
+ 51473 - 44032: 0xC1DF,
+ 51474 - 44032: 0xA242,
+ 51475 - 44032: 0xA243,
+ 51476 - 44032: 0xA244,
+ 51477 - 44032: 0xA245,
+ 51478 - 44032: 0xA246,
+ 51479 - 44032: 0xA247,
+ 51480 - 44032: 0xC1E0,
+ 51481 - 44032: 0xA248,
+ 51482 - 44032: 0xA249,
+ 51483 - 44032: 0xA24A,
+ 51484 - 44032: 0xA24B,
+ 51485 - 44032: 0xA24C,
+ 51486 - 44032: 0xA24D,
+ 51487 - 44032: 0xA24E,
+ 51488 - 44032: 0xA24F,
+ 51489 - 44032: 0xA250,
+ 51490 - 44032: 0xA251,
+ 51491 - 44032: 0xA252,
+ 51492 - 44032: 0xA253,
+ 51493 - 44032: 0xA254,
+ 51494 - 44032: 0xA255,
+ 51495 - 44032: 0xA256,
+ 51496 - 44032: 0xA257,
+ 51497 - 44032: 0xA258,
+ 51498 - 44032: 0xA259,
+ 51499 - 44032: 0xA25A,
+ 51500 - 44032: 0xC1E1,
+ 51501 - 44032: 0xA261,
+ 51502 - 44032: 0xA262,
+ 51503 - 44032: 0xA263,
+ 51504 - 44032: 0xA264,
+ 51505 - 44032: 0xA265,
+ 51506 - 44032: 0xA266,
+ 51507 - 44032: 0xA267,
+ 51508 - 44032: 0xC1E2,
+ 51509 - 44032: 0xA268,
+ 51510 - 44032: 0xA269,
+ 51511 - 44032: 0xA26A,
+ 51512 - 44032: 0xA26B,
+ 51513 - 44032: 0xA26C,
+ 51514 - 44032: 0xA26D,
+ 51515 - 44032: 0xA26E,
+ 51516 - 44032: 0xA26F,
+ 51517 - 44032: 0xA270,
+ 51518 - 44032: 0xA271,
+ 51519 - 44032: 0xA272,
+ 51520 - 44032: 0xA273,
+ 51521 - 44032: 0xA274,
+ 51522 - 44032: 0xA275,
+ 51523 - 44032: 0xA276,
+ 51524 - 44032: 0xA277,
+ 51525 - 44032: 0xA278,
+ 51526 - 44032: 0xA279,
+ 51527 - 44032: 0xA27A,
+ 51528 - 44032: 0xA281,
+ 51529 - 44032: 0xA282,
+ 51530 - 44032: 0xA283,
+ 51531 - 44032: 0xA284,
+ 51532 - 44032: 0xA285,
+ 51533 - 44032: 0xA286,
+ 51534 - 44032: 0xA287,
+ 51535 - 44032: 0xA288,
+ 51536 - 44032: 0xC1E3,
+ 51537 - 44032: 0xC1E4,
+ 51538 - 44032: 0xA289,
+ 51539 - 44032: 0xA28A,
+ 51540 - 44032: 0xC1E5,
+ 51541 - 44032: 0xA28B,
+ 51542 - 44032: 0xA28C,
+ 51543 - 44032: 0xA28D,
+ 51544 - 44032: 0xC1E6,
+ 51545 - 44032: 0xA28E,
+ 51546 - 44032: 0xA28F,
+ 51547 - 44032: 0xA290,
+ 51548 - 44032: 0xA291,
+ 51549 - 44032: 0xA292,
+ 51550 - 44032: 0xA293,
+ 51551 - 44032: 0xA294,
+ 51552 - 44032: 0xC1E7,
+ 51553 - 44032: 0xC1E8,
+ 51554 - 44032: 0xA295,
+ 51555 - 44032: 0xC1E9,
+ 51556 - 44032: 0xA296,
+ 51557 - 44032: 0xA297,
+ 51558 - 44032: 0xA298,
+ 51559 - 44032: 0xA299,
+ 51560 - 44032: 0xA29A,
+ 51561 - 44032: 0xA29B,
+ 51562 - 44032: 0xA29C,
+ 51563 - 44032: 0xA29D,
+ 51564 - 44032: 0xC1EA,
+ 51565 - 44032: 0xA29E,
+ 51566 - 44032: 0xA29F,
+ 51567 - 44032: 0xA2A0,
+ 51568 - 44032: 0xC1EB,
+ 51569 - 44032: 0xA341,
+ 51570 - 44032: 0xA342,
+ 51571 - 44032: 0xA343,
+ 51572 - 44032: 0xC1EC,
+ 51573 - 44032: 0xA344,
+ 51574 - 44032: 0xA345,
+ 51575 - 44032: 0xA346,
+ 51576 - 44032: 0xA347,
+ 51577 - 44032: 0xA348,
+ 51578 - 44032: 0xA349,
+ 51579 - 44032: 0xA34A,
+ 51580 - 44032: 0xC1ED,
+ 51581 - 44032: 0xA34B,
+ 51582 - 44032: 0xA34C,
+ 51583 - 44032: 0xA34D,
+ 51584 - 44032: 0xA34E,
+ 51585 - 44032: 0xA34F,
+ 51586 - 44032: 0xA350,
+ 51587 - 44032: 0xA351,
+ 51588 - 44032: 0xA352,
+ 51589 - 44032: 0xA353,
+ 51590 - 44032: 0xA354,
+ 51591 - 44032: 0xA355,
+ 51592 - 44032: 0xC1EE,
+ 51593 - 44032: 0xC1EF,
+ 51594 - 44032: 0xA356,
+ 51595 - 44032: 0xA357,
+ 51596 - 44032: 0xC1F0,
+ 51597 - 44032: 0xA358,
+ 51598 - 44032: 0xA359,
+ 51599 - 44032: 0xA35A,
+ 51600 - 44032: 0xC1F1,
+ 51601 - 44032: 0xA361,
+ 51602 - 44032: 0xA362,
+ 51603 - 44032: 0xA363,
+ 51604 - 44032: 0xA364,
+ 51605 - 44032: 0xA365,
+ 51606 - 44032: 0xA366,
+ 51607 - 44032: 0xA367,
+ 51608 - 44032: 0xC1F2,
+ 51609 - 44032: 0xC1F3,
+ 51610 - 44032: 0xA368,
+ 51611 - 44032: 0xC1F4,
+ 51612 - 44032: 0xA369,
+ 51613 - 44032: 0xC1F5,
+ 51614 - 44032: 0xA36A,
+ 51615 - 44032: 0xA36B,
+ 51616 - 44032: 0xA36C,
+ 51617 - 44032: 0xA36D,
+ 51618 - 44032: 0xA36E,
+ 51619 - 44032: 0xA36F,
+ 51620 - 44032: 0xA370,
+ 51621 - 44032: 0xA371,
+ 51622 - 44032: 0xA372,
+ 51623 - 44032: 0xA373,
+ 51624 - 44032: 0xA374,
+ 51625 - 44032: 0xA375,
+ 51626 - 44032: 0xA376,
+ 51627 - 44032: 0xA377,
+ 51628 - 44032: 0xA378,
+ 51629 - 44032: 0xA379,
+ 51630 - 44032: 0xA37A,
+ 51631 - 44032: 0xA381,
+ 51632 - 44032: 0xA382,
+ 51633 - 44032: 0xA383,
+ 51634 - 44032: 0xA384,
+ 51635 - 44032: 0xA385,
+ 51636 - 44032: 0xA386,
+ 51637 - 44032: 0xA387,
+ 51638 - 44032: 0xA388,
+ 51639 - 44032: 0xA389,
+ 51640 - 44032: 0xA38A,
+ 51641 - 44032: 0xA38B,
+ 51642 - 44032: 0xA38C,
+ 51643 - 44032: 0xA38D,
+ 51644 - 44032: 0xA38E,
+ 51645 - 44032: 0xA38F,
+ 51646 - 44032: 0xA390,
+ 51647 - 44032: 0xA391,
+ 51648 - 44032: 0xC1F6,
+ 51649 - 44032: 0xC1F7,
+ 51650 - 44032: 0xA392,
+ 51651 - 44032: 0xA393,
+ 51652 - 44032: 0xC1F8,
+ 51653 - 44032: 0xA394,
+ 51654 - 44032: 0xA395,
+ 51655 - 44032: 0xC1F9,
+ 51656 - 44032: 0xC1FA,
+ 51657 - 44032: 0xA396,
+ 51658 - 44032: 0xC1FB,
+ 51659 - 44032: 0xA397,
+ 51660 - 44032: 0xA398,
+ 51661 - 44032: 0xA399,
+ 51662 - 44032: 0xA39A,
+ 51663 - 44032: 0xA39B,
+ 51664 - 44032: 0xC1FC,
+ 51665 - 44032: 0xC1FD,
+ 51666 - 44032: 0xA39C,
+ 51667 - 44032: 0xC1FE,
+ 51668 - 44032: 0xA39D,
+ 51669 - 44032: 0xC2A1,
+ 51670 - 44032: 0xC2A2,
+ 51671 - 44032: 0xA39E,
+ 51672 - 44032: 0xA39F,
+ 51673 - 44032: 0xC2A3,
+ 51674 - 44032: 0xC2A4,
+ 51675 - 44032: 0xA3A0,
+ 51676 - 44032: 0xC2A5,
+ 51677 - 44032: 0xC2A6,
+ 51678 - 44032: 0xA441,
+ 51679 - 44032: 0xA442,
+ 51680 - 44032: 0xC2A7,
+ 51681 - 44032: 0xA443,
+ 51682 - 44032: 0xC2A8,
+ 51683 - 44032: 0xA444,
+ 51684 - 44032: 0xC2A9,
+ 51685 - 44032: 0xA445,
+ 51686 - 44032: 0xA446,
+ 51687 - 44032: 0xC2AA,
+ 51688 - 44032: 0xA447,
+ 51689 - 44032: 0xA448,
+ 51690 - 44032: 0xA449,
+ 51691 - 44032: 0xA44A,
+ 51692 - 44032: 0xC2AB,
+ 51693 - 44032: 0xC2AC,
+ 51694 - 44032: 0xA44B,
+ 51695 - 44032: 0xC2AD,
+ 51696 - 44032: 0xC2AE,
+ 51697 - 44032: 0xC2AF,
+ 51698 - 44032: 0xA44C,
+ 51699 - 44032: 0xA44D,
+ 51700 - 44032: 0xA44E,
+ 51701 - 44032: 0xA44F,
+ 51702 - 44032: 0xA450,
+ 51703 - 44032: 0xA451,
+ 51704 - 44032: 0xC2B0,
+ 51705 - 44032: 0xC2B1,
+ 51706 - 44032: 0xA452,
+ 51707 - 44032: 0xA453,
+ 51708 - 44032: 0xC2B2,
+ 51709 - 44032: 0xA454,
+ 51710 - 44032: 0xA455,
+ 51711 - 44032: 0xA456,
+ 51712 - 44032: 0xC2B3,
+ 51713 - 44032: 0xA457,
+ 51714 - 44032: 0xA458,
+ 51715 - 44032: 0xA459,
+ 51716 - 44032: 0xA45A,
+ 51717 - 44032: 0xA461,
+ 51718 - 44032: 0xA462,
+ 51719 - 44032: 0xA463,
+ 51720 - 44032: 0xC2B4,
+ 51721 - 44032: 0xC2B5,
+ 51722 - 44032: 0xA464,
+ 51723 - 44032: 0xC2B6,
+ 51724 - 44032: 0xC2B7,
+ 51725 - 44032: 0xC2B8,
+ 51726 - 44032: 0xA465,
+ 51727 - 44032: 0xA466,
+ 51728 - 44032: 0xA467,
+ 51729 - 44032: 0xA468,
+ 51730 - 44032: 0xA469,
+ 51731 - 44032: 0xA46A,
+ 51732 - 44032: 0xC2B9,
+ 51733 - 44032: 0xA46B,
+ 51734 - 44032: 0xA46C,
+ 51735 - 44032: 0xA46D,
+ 51736 - 44032: 0xC2BA,
+ 51737 - 44032: 0xA46E,
+ 51738 - 44032: 0xA46F,
+ 51739 - 44032: 0xA470,
+ 51740 - 44032: 0xA471,
+ 51741 - 44032: 0xA472,
+ 51742 - 44032: 0xA473,
+ 51743 - 44032: 0xA474,
+ 51744 - 44032: 0xA475,
+ 51745 - 44032: 0xA476,
+ 51746 - 44032: 0xA477,
+ 51747 - 44032: 0xA478,
+ 51748 - 44032: 0xA479,
+ 51749 - 44032: 0xA47A,
+ 51750 - 44032: 0xA481,
+ 51751 - 44032: 0xA482,
+ 51752 - 44032: 0xA483,
+ 51753 - 44032: 0xC2BB,
+ 51754 - 44032: 0xA484,
+ 51755 - 44032: 0xA485,
+ 51756 - 44032: 0xA486,
+ 51757 - 44032: 0xA487,
+ 51758 - 44032: 0xA488,
+ 51759 - 44032: 0xA489,
+ 51760 - 44032: 0xA48A,
+ 51761 - 44032: 0xA48B,
+ 51762 - 44032: 0xA48C,
+ 51763 - 44032: 0xA48D,
+ 51764 - 44032: 0xA48E,
+ 51765 - 44032: 0xA48F,
+ 51766 - 44032: 0xA490,
+ 51767 - 44032: 0xA491,
+ 51768 - 44032: 0xA492,
+ 51769 - 44032: 0xA493,
+ 51770 - 44032: 0xA494,
+ 51771 - 44032: 0xA495,
+ 51772 - 44032: 0xA496,
+ 51773 - 44032: 0xA497,
+ 51774 - 44032: 0xA498,
+ 51775 - 44032: 0xA499,
+ 51776 - 44032: 0xA49A,
+ 51777 - 44032: 0xA49B,
+ 51778 - 44032: 0xA49C,
+ 51779 - 44032: 0xA49D,
+ 51780 - 44032: 0xA49E,
+ 51781 - 44032: 0xA49F,
+ 51782 - 44032: 0xA4A0,
+ 51783 - 44032: 0xA541,
+ 51784 - 44032: 0xA542,
+ 51785 - 44032: 0xA543,
+ 51786 - 44032: 0xA544,
+ 51787 - 44032: 0xA545,
+ 51788 - 44032: 0xC2BC,
+ 51789 - 44032: 0xC2BD,
+ 51790 - 44032: 0xA546,
+ 51791 - 44032: 0xA547,
+ 51792 - 44032: 0xC2BE,
+ 51793 - 44032: 0xA548,
+ 51794 - 44032: 0xA549,
+ 51795 - 44032: 0xA54A,
+ 51796 - 44032: 0xC2BF,
+ 51797 - 44032: 0xA54B,
+ 51798 - 44032: 0xA54C,
+ 51799 - 44032: 0xA54D,
+ 51800 - 44032: 0xA54E,
+ 51801 - 44032: 0xA54F,
+ 51802 - 44032: 0xA550,
+ 51803 - 44032: 0xA551,
+ 51804 - 44032: 0xC2C0,
+ 51805 - 44032: 0xC2C1,
+ 51806 - 44032: 0xA552,
+ 51807 - 44032: 0xC2C2,
+ 51808 - 44032: 0xC2C3,
+ 51809 - 44032: 0xC2C4,
+ 51810 - 44032: 0xA553,
+ 51811 - 44032: 0xA554,
+ 51812 - 44032: 0xA555,
+ 51813 - 44032: 0xA556,
+ 51814 - 44032: 0xA557,
+ 51815 - 44032: 0xA558,
+ 51816 - 44032: 0xC2C5,
+ 51817 - 44032: 0xA559,
+ 51818 - 44032: 0xA55A,
+ 51819 - 44032: 0xA561,
+ 51820 - 44032: 0xA562,
+ 51821 - 44032: 0xA563,
+ 51822 - 44032: 0xA564,
+ 51823 - 44032: 0xA565,
+ 51824 - 44032: 0xA566,
+ 51825 - 44032: 0xA567,
+ 51826 - 44032: 0xA568,
+ 51827 - 44032: 0xA569,
+ 51828 - 44032: 0xA56A,
+ 51829 - 44032: 0xA56B,
+ 51830 - 44032: 0xA56C,
+ 51831 - 44032: 0xA56D,
+ 51832 - 44032: 0xA56E,
+ 51833 - 44032: 0xA56F,
+ 51834 - 44032: 0xA570,
+ 51835 - 44032: 0xA571,
+ 51836 - 44032: 0xA572,
+ 51837 - 44032: 0xC2C6,
+ 51838 - 44032: 0xA573,
+ 51839 - 44032: 0xA574,
+ 51840 - 44032: 0xA575,
+ 51841 - 44032: 0xA576,
+ 51842 - 44032: 0xA577,
+ 51843 - 44032: 0xA578,
+ 51844 - 44032: 0xC2C7,
+ 51845 - 44032: 0xA579,
+ 51846 - 44032: 0xA57A,
+ 51847 - 44032: 0xA581,
+ 51848 - 44032: 0xA582,
+ 51849 - 44032: 0xA583,
+ 51850 - 44032: 0xA584,
+ 51851 - 44032: 0xA585,
+ 51852 - 44032: 0xA586,
+ 51853 - 44032: 0xA587,
+ 51854 - 44032: 0xA588,
+ 51855 - 44032: 0xA589,
+ 51856 - 44032: 0xA58A,
+ 51857 - 44032: 0xA58B,
+ 51858 - 44032: 0xA58C,
+ 51859 - 44032: 0xA58D,
+ 51860 - 44032: 0xA58E,
+ 51861 - 44032: 0xA58F,
+ 51862 - 44032: 0xA590,
+ 51863 - 44032: 0xA591,
+ 51864 - 44032: 0xC2C8,
+ 51865 - 44032: 0xA592,
+ 51866 - 44032: 0xA593,
+ 51867 - 44032: 0xA594,
+ 51868 - 44032: 0xA595,
+ 51869 - 44032: 0xA596,
+ 51870 - 44032: 0xA597,
+ 51871 - 44032: 0xA598,
+ 51872 - 44032: 0xA599,
+ 51873 - 44032: 0xA59A,
+ 51874 - 44032: 0xA59B,
+ 51875 - 44032: 0xA59C,
+ 51876 - 44032: 0xA59D,
+ 51877 - 44032: 0xA59E,
+ 51878 - 44032: 0xA59F,
+ 51879 - 44032: 0xA5A0,
+ 51880 - 44032: 0xA641,
+ 51881 - 44032: 0xA642,
+ 51882 - 44032: 0xA643,
+ 51883 - 44032: 0xA644,
+ 51884 - 44032: 0xA645,
+ 51885 - 44032: 0xA646,
+ 51886 - 44032: 0xA647,
+ 51887 - 44032: 0xA648,
+ 51888 - 44032: 0xA649,
+ 51889 - 44032: 0xA64A,
+ 51890 - 44032: 0xA64B,
+ 51891 - 44032: 0xA64C,
+ 51892 - 44032: 0xA64D,
+ 51893 - 44032: 0xA64E,
+ 51894 - 44032: 0xA64F,
+ 51895 - 44032: 0xA650,
+ 51896 - 44032: 0xA651,
+ 51897 - 44032: 0xA652,
+ 51898 - 44032: 0xA653,
+ 51899 - 44032: 0xA654,
+ 51900 - 44032: 0xC2C9,
+ 51901 - 44032: 0xC2CA,
+ 51902 - 44032: 0xA655,
+ 51903 - 44032: 0xA656,
+ 51904 - 44032: 0xC2CB,
+ 51905 - 44032: 0xA657,
+ 51906 - 44032: 0xA658,
+ 51907 - 44032: 0xA659,
+ 51908 - 44032: 0xC2CC,
+ 51909 - 44032: 0xA65A,
+ 51910 - 44032: 0xA661,
+ 51911 - 44032: 0xA662,
+ 51912 - 44032: 0xA663,
+ 51913 - 44032: 0xA664,
+ 51914 - 44032: 0xA665,
+ 51915 - 44032: 0xA666,
+ 51916 - 44032: 0xC2CD,
+ 51917 - 44032: 0xC2CE,
+ 51918 - 44032: 0xA667,
+ 51919 - 44032: 0xC2CF,
+ 51920 - 44032: 0xA668,
+ 51921 - 44032: 0xC2D0,
+ 51922 - 44032: 0xA669,
+ 51923 - 44032: 0xC2D1,
+ 51924 - 44032: 0xA66A,
+ 51925 - 44032: 0xA66B,
+ 51926 - 44032: 0xA66C,
+ 51927 - 44032: 0xA66D,
+ 51928 - 44032: 0xC2D2,
+ 51929 - 44032: 0xC2D3,
+ 51930 - 44032: 0xA66E,
+ 51931 - 44032: 0xA66F,
+ 51932 - 44032: 0xA670,
+ 51933 - 44032: 0xA671,
+ 51934 - 44032: 0xA672,
+ 51935 - 44032: 0xA673,
+ 51936 - 44032: 0xC2D4,
+ 51937 - 44032: 0xA674,
+ 51938 - 44032: 0xA675,
+ 51939 - 44032: 0xA676,
+ 51940 - 44032: 0xA677,
+ 51941 - 44032: 0xA678,
+ 51942 - 44032: 0xA679,
+ 51943 - 44032: 0xA67A,
+ 51944 - 44032: 0xA681,
+ 51945 - 44032: 0xA682,
+ 51946 - 44032: 0xA683,
+ 51947 - 44032: 0xA684,
+ 51948 - 44032: 0xC2D5,
+ 51949 - 44032: 0xA685,
+ 51950 - 44032: 0xA686,
+ 51951 - 44032: 0xA687,
+ 51952 - 44032: 0xA688,
+ 51953 - 44032: 0xA689,
+ 51954 - 44032: 0xA68A,
+ 51955 - 44032: 0xA68B,
+ 51956 - 44032: 0xC2D6,
+ 51957 - 44032: 0xA68C,
+ 51958 - 44032: 0xA68D,
+ 51959 - 44032: 0xA68E,
+ 51960 - 44032: 0xA68F,
+ 51961 - 44032: 0xA690,
+ 51962 - 44032: 0xA691,
+ 51963 - 44032: 0xA692,
+ 51964 - 44032: 0xA693,
+ 51965 - 44032: 0xA694,
+ 51966 - 44032: 0xA695,
+ 51967 - 44032: 0xA696,
+ 51968 - 44032: 0xA697,
+ 51969 - 44032: 0xA698,
+ 51970 - 44032: 0xA699,
+ 51971 - 44032: 0xA69A,
+ 51972 - 44032: 0xA69B,
+ 51973 - 44032: 0xA69C,
+ 51974 - 44032: 0xA69D,
+ 51975 - 44032: 0xA69E,
+ 51976 - 44032: 0xC2D7,
+ 51977 - 44032: 0xA69F,
+ 51978 - 44032: 0xA6A0,
+ 51979 - 44032: 0xA741,
+ 51980 - 44032: 0xA742,
+ 51981 - 44032: 0xA743,
+ 51982 - 44032: 0xA744,
+ 51983 - 44032: 0xA745,
+ 51984 - 44032: 0xC2D8,
+ 51985 - 44032: 0xA746,
+ 51986 - 44032: 0xA747,
+ 51987 - 44032: 0xA748,
+ 51988 - 44032: 0xC2D9,
+ 51989 - 44032: 0xA749,
+ 51990 - 44032: 0xA74A,
+ 51991 - 44032: 0xA74B,
+ 51992 - 44032: 0xC2DA,
+ 51993 - 44032: 0xA74C,
+ 51994 - 44032: 0xA74D,
+ 51995 - 44032: 0xA74E,
+ 51996 - 44032: 0xA74F,
+ 51997 - 44032: 0xA750,
+ 51998 - 44032: 0xA751,
+ 51999 - 44032: 0xA752,
+ 52000 - 44032: 0xC2DB,
+ 52001 - 44032: 0xC2DC,
+ 52002 - 44032: 0xA753,
+ 52003 - 44032: 0xA754,
+ 52004 - 44032: 0xA755,
+ 52005 - 44032: 0xA756,
+ 52006 - 44032: 0xA757,
+ 52007 - 44032: 0xA758,
+ 52008 - 44032: 0xA759,
+ 52009 - 44032: 0xA75A,
+ 52010 - 44032: 0xA761,
+ 52011 - 44032: 0xA762,
+ 52012 - 44032: 0xA763,
+ 52013 - 44032: 0xA764,
+ 52014 - 44032: 0xA765,
+ 52015 - 44032: 0xA766,
+ 52016 - 44032: 0xA767,
+ 52017 - 44032: 0xA768,
+ 52018 - 44032: 0xA769,
+ 52019 - 44032: 0xA76A,
+ 52020 - 44032: 0xA76B,
+ 52021 - 44032: 0xA76C,
+ 52022 - 44032: 0xA76D,
+ 52023 - 44032: 0xA76E,
+ 52024 - 44032: 0xA76F,
+ 52025 - 44032: 0xA770,
+ 52026 - 44032: 0xA771,
+ 52027 - 44032: 0xA772,
+ 52028 - 44032: 0xA773,
+ 52029 - 44032: 0xA774,
+ 52030 - 44032: 0xA775,
+ 52031 - 44032: 0xA776,
+ 52032 - 44032: 0xA777,
+ 52033 - 44032: 0xC2DD,
+ 52034 - 44032: 0xA778,
+ 52035 - 44032: 0xA779,
+ 52036 - 44032: 0xA77A,
+ 52037 - 44032: 0xA781,
+ 52038 - 44032: 0xA782,
+ 52039 - 44032: 0xA783,
+ 52040 - 44032: 0xC2DE,
+ 52041 - 44032: 0xC2DF,
+ 52042 - 44032: 0xA784,
+ 52043 - 44032: 0xA785,
+ 52044 - 44032: 0xC2E0,
+ 52045 - 44032: 0xA786,
+ 52046 - 44032: 0xA787,
+ 52047 - 44032: 0xA788,
+ 52048 - 44032: 0xC2E1,
+ 52049 - 44032: 0xA789,
+ 52050 - 44032: 0xA78A,
+ 52051 - 44032: 0xA78B,
+ 52052 - 44032: 0xA78C,
+ 52053 - 44032: 0xA78D,
+ 52054 - 44032: 0xA78E,
+ 52055 - 44032: 0xA78F,
+ 52056 - 44032: 0xC2E2,
+ 52057 - 44032: 0xC2E3,
+ 52058 - 44032: 0xA790,
+ 52059 - 44032: 0xA791,
+ 52060 - 44032: 0xA792,
+ 52061 - 44032: 0xC2E4,
+ 52062 - 44032: 0xA793,
+ 52063 - 44032: 0xA794,
+ 52064 - 44032: 0xA795,
+ 52065 - 44032: 0xA796,
+ 52066 - 44032: 0xA797,
+ 52067 - 44032: 0xA798,
+ 52068 - 44032: 0xC2E5,
+ 52069 - 44032: 0xA799,
+ 52070 - 44032: 0xA79A,
+ 52071 - 44032: 0xA79B,
+ 52072 - 44032: 0xA79C,
+ 52073 - 44032: 0xA79D,
+ 52074 - 44032: 0xA79E,
+ 52075 - 44032: 0xA79F,
+ 52076 - 44032: 0xA7A0,
+ 52077 - 44032: 0xA841,
+ 52078 - 44032: 0xA842,
+ 52079 - 44032: 0xA843,
+ 52080 - 44032: 0xA844,
+ 52081 - 44032: 0xA845,
+ 52082 - 44032: 0xA846,
+ 52083 - 44032: 0xA847,
+ 52084 - 44032: 0xA848,
+ 52085 - 44032: 0xA849,
+ 52086 - 44032: 0xA84A,
+ 52087 - 44032: 0xA84B,
+ 52088 - 44032: 0xC2E6,
+ 52089 - 44032: 0xC2E7,
+ 52090 - 44032: 0xA84C,
+ 52091 - 44032: 0xA84D,
+ 52092 - 44032: 0xA84E,
+ 52093 - 44032: 0xA84F,
+ 52094 - 44032: 0xA850,
+ 52095 - 44032: 0xA851,
+ 52096 - 44032: 0xA852,
+ 52097 - 44032: 0xA853,
+ 52098 - 44032: 0xA854,
+ 52099 - 44032: 0xA855,
+ 52100 - 44032: 0xA856,
+ 52101 - 44032: 0xA857,
+ 52102 - 44032: 0xA858,
+ 52103 - 44032: 0xA859,
+ 52104 - 44032: 0xA85A,
+ 52105 - 44032: 0xA861,
+ 52106 - 44032: 0xA862,
+ 52107 - 44032: 0xA863,
+ 52108 - 44032: 0xA864,
+ 52109 - 44032: 0xA865,
+ 52110 - 44032: 0xA866,
+ 52111 - 44032: 0xA867,
+ 52112 - 44032: 0xA868,
+ 52113 - 44032: 0xA869,
+ 52114 - 44032: 0xA86A,
+ 52115 - 44032: 0xA86B,
+ 52116 - 44032: 0xA86C,
+ 52117 - 44032: 0xA86D,
+ 52118 - 44032: 0xA86E,
+ 52119 - 44032: 0xA86F,
+ 52120 - 44032: 0xA870,
+ 52121 - 44032: 0xA871,
+ 52122 - 44032: 0xA872,
+ 52123 - 44032: 0xA873,
+ 52124 - 44032: 0xC2E8,
+ 52125 - 44032: 0xA874,
+ 52126 - 44032: 0xA875,
+ 52127 - 44032: 0xA876,
+ 52128 - 44032: 0xA877,
+ 52129 - 44032: 0xA878,
+ 52130 - 44032: 0xA879,
+ 52131 - 44032: 0xA87A,
+ 52132 - 44032: 0xA881,
+ 52133 - 44032: 0xA882,
+ 52134 - 44032: 0xA883,
+ 52135 - 44032: 0xA884,
+ 52136 - 44032: 0xA885,
+ 52137 - 44032: 0xA886,
+ 52138 - 44032: 0xA887,
+ 52139 - 44032: 0xA888,
+ 52140 - 44032: 0xA889,
+ 52141 - 44032: 0xA88A,
+ 52142 - 44032: 0xA88B,
+ 52143 - 44032: 0xA88C,
+ 52144 - 44032: 0xA88D,
+ 52145 - 44032: 0xA88E,
+ 52146 - 44032: 0xA88F,
+ 52147 - 44032: 0xA890,
+ 52148 - 44032: 0xA891,
+ 52149 - 44032: 0xA892,
+ 52150 - 44032: 0xA893,
+ 52151 - 44032: 0xA894,
+ 52152 - 44032: 0xC2E9,
+ 52153 - 44032: 0xA895,
+ 52154 - 44032: 0xA896,
+ 52155 - 44032: 0xA897,
+ 52156 - 44032: 0xA898,
+ 52157 - 44032: 0xA899,
+ 52158 - 44032: 0xA89A,
+ 52159 - 44032: 0xA89B,
+ 52160 - 44032: 0xA89C,
+ 52161 - 44032: 0xA89D,
+ 52162 - 44032: 0xA89E,
+ 52163 - 44032: 0xA89F,
+ 52164 - 44032: 0xA8A0,
+ 52165 - 44032: 0xA941,
+ 52166 - 44032: 0xA942,
+ 52167 - 44032: 0xA943,
+ 52168 - 44032: 0xA944,
+ 52169 - 44032: 0xA945,
+ 52170 - 44032: 0xA946,
+ 52171 - 44032: 0xA947,
+ 52172 - 44032: 0xA948,
+ 52173 - 44032: 0xA949,
+ 52174 - 44032: 0xA94A,
+ 52175 - 44032: 0xA94B,
+ 52176 - 44032: 0xA94C,
+ 52177 - 44032: 0xA94D,
+ 52178 - 44032: 0xA94E,
+ 52179 - 44032: 0xA94F,
+ 52180 - 44032: 0xC2EA,
+ 52181 - 44032: 0xA950,
+ 52182 - 44032: 0xA951,
+ 52183 - 44032: 0xA952,
+ 52184 - 44032: 0xA953,
+ 52185 - 44032: 0xA954,
+ 52186 - 44032: 0xA955,
+ 52187 - 44032: 0xA956,
+ 52188 - 44032: 0xA957,
+ 52189 - 44032: 0xA958,
+ 52190 - 44032: 0xA959,
+ 52191 - 44032: 0xA95A,
+ 52192 - 44032: 0xA961,
+ 52193 - 44032: 0xA962,
+ 52194 - 44032: 0xA963,
+ 52195 - 44032: 0xA964,
+ 52196 - 44032: 0xC2EB,
+ 52197 - 44032: 0xA965,
+ 52198 - 44032: 0xA966,
+ 52199 - 44032: 0xC2EC,
+ 52200 - 44032: 0xA967,
+ 52201 - 44032: 0xC2ED,
+ 52202 - 44032: 0xA968,
+ 52203 - 44032: 0xA969,
+ 52204 - 44032: 0xA96A,
+ 52205 - 44032: 0xA96B,
+ 52206 - 44032: 0xA96C,
+ 52207 - 44032: 0xA96D,
+ 52208 - 44032: 0xA96E,
+ 52209 - 44032: 0xA96F,
+ 52210 - 44032: 0xA970,
+ 52211 - 44032: 0xA971,
+ 52212 - 44032: 0xA972,
+ 52213 - 44032: 0xA973,
+ 52214 - 44032: 0xA974,
+ 52215 - 44032: 0xA975,
+ 52216 - 44032: 0xA976,
+ 52217 - 44032: 0xA977,
+ 52218 - 44032: 0xA978,
+ 52219 - 44032: 0xA979,
+ 52220 - 44032: 0xA97A,
+ 52221 - 44032: 0xA981,
+ 52222 - 44032: 0xA982,
+ 52223 - 44032: 0xA983,
+ 52224 - 44032: 0xA984,
+ 52225 - 44032: 0xA985,
+ 52226 - 44032: 0xA986,
+ 52227 - 44032: 0xA987,
+ 52228 - 44032: 0xA988,
+ 52229 - 44032: 0xA989,
+ 52230 - 44032: 0xA98A,
+ 52231 - 44032: 0xA98B,
+ 52232 - 44032: 0xA98C,
+ 52233 - 44032: 0xA98D,
+ 52234 - 44032: 0xA98E,
+ 52235 - 44032: 0xA98F,
+ 52236 - 44032: 0xC2EE,
+ 52237 - 44032: 0xC2EF,
+ 52238 - 44032: 0xA990,
+ 52239 - 44032: 0xA991,
+ 52240 - 44032: 0xC2F0,
+ 52241 - 44032: 0xA992,
+ 52242 - 44032: 0xA993,
+ 52243 - 44032: 0xA994,
+ 52244 - 44032: 0xC2F1,
+ 52245 - 44032: 0xA995,
+ 52246 - 44032: 0xA996,
+ 52247 - 44032: 0xA997,
+ 52248 - 44032: 0xA998,
+ 52249 - 44032: 0xA999,
+ 52250 - 44032: 0xA99A,
+ 52251 - 44032: 0xA99B,
+ 52252 - 44032: 0xC2F2,
+ 52253 - 44032: 0xC2F3,
+ 52254 - 44032: 0xA99C,
+ 52255 - 44032: 0xA99D,
+ 52256 - 44032: 0xA99E,
+ 52257 - 44032: 0xC2F4,
+ 52258 - 44032: 0xC2F5,
+ 52259 - 44032: 0xA99F,
+ 52260 - 44032: 0xA9A0,
+ 52261 - 44032: 0xAA41,
+ 52262 - 44032: 0xAA42,
+ 52263 - 44032: 0xC2F6,
+ 52264 - 44032: 0xC2F7,
+ 52265 - 44032: 0xC2F8,
+ 52266 - 44032: 0xAA43,
+ 52267 - 44032: 0xAA44,
+ 52268 - 44032: 0xC2F9,
+ 52269 - 44032: 0xAA45,
+ 52270 - 44032: 0xC2FA,
+ 52271 - 44032: 0xAA46,
+ 52272 - 44032: 0xC2FB,
+ 52273 - 44032: 0xAA47,
+ 52274 - 44032: 0xAA48,
+ 52275 - 44032: 0xAA49,
+ 52276 - 44032: 0xAA4A,
+ 52277 - 44032: 0xAA4B,
+ 52278 - 44032: 0xAA4C,
+ 52279 - 44032: 0xAA4D,
+ 52280 - 44032: 0xC2FC,
+ 52281 - 44032: 0xC2FD,
+ 52282 - 44032: 0xAA4E,
+ 52283 - 44032: 0xC2FE,
+ 52284 - 44032: 0xC3A1,
+ 52285 - 44032: 0xC3A2,
+ 52286 - 44032: 0xC3A3,
+ 52287 - 44032: 0xAA4F,
+ 52288 - 44032: 0xAA50,
+ 52289 - 44032: 0xAA51,
+ 52290 - 44032: 0xAA52,
+ 52291 - 44032: 0xAA53,
+ 52292 - 44032: 0xC3A4,
+ 52293 - 44032: 0xC3A5,
+ 52294 - 44032: 0xAA54,
+ 52295 - 44032: 0xAA55,
+ 52296 - 44032: 0xC3A6,
+ 52297 - 44032: 0xAA56,
+ 52298 - 44032: 0xAA57,
+ 52299 - 44032: 0xAA58,
+ 52300 - 44032: 0xC3A7,
+ 52301 - 44032: 0xAA59,
+ 52302 - 44032: 0xAA5A,
+ 52303 - 44032: 0xAA61,
+ 52304 - 44032: 0xAA62,
+ 52305 - 44032: 0xAA63,
+ 52306 - 44032: 0xAA64,
+ 52307 - 44032: 0xAA65,
+ 52308 - 44032: 0xC3A8,
+ 52309 - 44032: 0xC3A9,
+ 52310 - 44032: 0xAA66,
+ 52311 - 44032: 0xC3AA,
+ 52312 - 44032: 0xC3AB,
+ 52313 - 44032: 0xC3AC,
+ 52314 - 44032: 0xAA67,
+ 52315 - 44032: 0xAA68,
+ 52316 - 44032: 0xAA69,
+ 52317 - 44032: 0xAA6A,
+ 52318 - 44032: 0xAA6B,
+ 52319 - 44032: 0xAA6C,
+ 52320 - 44032: 0xC3AD,
+ 52321 - 44032: 0xAA6D,
+ 52322 - 44032: 0xAA6E,
+ 52323 - 44032: 0xAA6F,
+ 52324 - 44032: 0xC3AE,
+ 52325 - 44032: 0xAA70,
+ 52326 - 44032: 0xC3AF,
+ 52327 - 44032: 0xAA71,
+ 52328 - 44032: 0xC3B0,
+ 52329 - 44032: 0xAA72,
+ 52330 - 44032: 0xAA73,
+ 52331 - 44032: 0xAA74,
+ 52332 - 44032: 0xAA75,
+ 52333 - 44032: 0xAA76,
+ 52334 - 44032: 0xAA77,
+ 52335 - 44032: 0xAA78,
+ 52336 - 44032: 0xC3B1,
+ 52337 - 44032: 0xAA79,
+ 52338 - 44032: 0xAA7A,
+ 52339 - 44032: 0xAA81,
+ 52340 - 44032: 0xAA82,
+ 52341 - 44032: 0xC3B2,
+ 52342 - 44032: 0xAA83,
+ 52343 - 44032: 0xAA84,
+ 52344 - 44032: 0xAA85,
+ 52345 - 44032: 0xAA86,
+ 52346 - 44032: 0xAA87,
+ 52347 - 44032: 0xAA88,
+ 52348 - 44032: 0xAA89,
+ 52349 - 44032: 0xAA8A,
+ 52350 - 44032: 0xAA8B,
+ 52351 - 44032: 0xAA8C,
+ 52352 - 44032: 0xAA8D,
+ 52353 - 44032: 0xAA8E,
+ 52354 - 44032: 0xAA8F,
+ 52355 - 44032: 0xAA90,
+ 52356 - 44032: 0xAA91,
+ 52357 - 44032: 0xAA92,
+ 52358 - 44032: 0xAA93,
+ 52359 - 44032: 0xAA94,
+ 52360 - 44032: 0xAA95,
+ 52361 - 44032: 0xAA96,
+ 52362 - 44032: 0xAA97,
+ 52363 - 44032: 0xAA98,
+ 52364 - 44032: 0xAA99,
+ 52365 - 44032: 0xAA9A,
+ 52366 - 44032: 0xAA9B,
+ 52367 - 44032: 0xAA9C,
+ 52368 - 44032: 0xAA9D,
+ 52369 - 44032: 0xAA9E,
+ 52370 - 44032: 0xAA9F,
+ 52371 - 44032: 0xAAA0,
+ 52372 - 44032: 0xAB41,
+ 52373 - 44032: 0xAB42,
+ 52374 - 44032: 0xAB43,
+ 52375 - 44032: 0xAB44,
+ 52376 - 44032: 0xC3B3,
+ 52377 - 44032: 0xC3B4,
+ 52378 - 44032: 0xAB45,
+ 52379 - 44032: 0xAB46,
+ 52380 - 44032: 0xC3B5,
+ 52381 - 44032: 0xAB47,
+ 52382 - 44032: 0xAB48,
+ 52383 - 44032: 0xAB49,
+ 52384 - 44032: 0xC3B6,
+ 52385 - 44032: 0xAB4A,
+ 52386 - 44032: 0xAB4B,
+ 52387 - 44032: 0xAB4C,
+ 52388 - 44032: 0xAB4D,
+ 52389 - 44032: 0xAB4E,
+ 52390 - 44032: 0xAB4F,
+ 52391 - 44032: 0xAB50,
+ 52392 - 44032: 0xC3B7,
+ 52393 - 44032: 0xC3B8,
+ 52394 - 44032: 0xAB51,
+ 52395 - 44032: 0xC3B9,
+ 52396 - 44032: 0xC3BA,
+ 52397 - 44032: 0xC3BB,
+ 52398 - 44032: 0xAB52,
+ 52399 - 44032: 0xAB53,
+ 52400 - 44032: 0xAB54,
+ 52401 - 44032: 0xAB55,
+ 52402 - 44032: 0xAB56,
+ 52403 - 44032: 0xAB57,
+ 52404 - 44032: 0xC3BC,
+ 52405 - 44032: 0xC3BD,
+ 52406 - 44032: 0xAB58,
+ 52407 - 44032: 0xAB59,
+ 52408 - 44032: 0xC3BE,
+ 52409 - 44032: 0xAB5A,
+ 52410 - 44032: 0xAB61,
+ 52411 - 44032: 0xAB62,
+ 52412 - 44032: 0xC3BF,
+ 52413 - 44032: 0xAB63,
+ 52414 - 44032: 0xAB64,
+ 52415 - 44032: 0xAB65,
+ 52416 - 44032: 0xAB66,
+ 52417 - 44032: 0xAB67,
+ 52418 - 44032: 0xAB68,
+ 52419 - 44032: 0xAB69,
+ 52420 - 44032: 0xC3C0,
+ 52421 - 44032: 0xC3C1,
+ 52422 - 44032: 0xAB6A,
+ 52423 - 44032: 0xC3C2,
+ 52424 - 44032: 0xAB6B,
+ 52425 - 44032: 0xC3C3,
+ 52426 - 44032: 0xAB6C,
+ 52427 - 44032: 0xAB6D,
+ 52428 - 44032: 0xAB6E,
+ 52429 - 44032: 0xAB6F,
+ 52430 - 44032: 0xAB70,
+ 52431 - 44032: 0xAB71,
+ 52432 - 44032: 0xC3C4,
+ 52433 - 44032: 0xAB72,
+ 52434 - 44032: 0xAB73,
+ 52435 - 44032: 0xAB74,
+ 52436 - 44032: 0xC3C5,
+ 52437 - 44032: 0xAB75,
+ 52438 - 44032: 0xAB76,
+ 52439 - 44032: 0xAB77,
+ 52440 - 44032: 0xAB78,
+ 52441 - 44032: 0xAB79,
+ 52442 - 44032: 0xAB7A,
+ 52443 - 44032: 0xAB81,
+ 52444 - 44032: 0xAB82,
+ 52445 - 44032: 0xAB83,
+ 52446 - 44032: 0xAB84,
+ 52447 - 44032: 0xAB85,
+ 52448 - 44032: 0xAB86,
+ 52449 - 44032: 0xAB87,
+ 52450 - 44032: 0xAB88,
+ 52451 - 44032: 0xAB89,
+ 52452 - 44032: 0xC3C6,
+ 52453 - 44032: 0xAB8A,
+ 52454 - 44032: 0xAB8B,
+ 52455 - 44032: 0xAB8C,
+ 52456 - 44032: 0xAB8D,
+ 52457 - 44032: 0xAB8E,
+ 52458 - 44032: 0xAB8F,
+ 52459 - 44032: 0xAB90,
+ 52460 - 44032: 0xC3C7,
+ 52461 - 44032: 0xAB91,
+ 52462 - 44032: 0xAB92,
+ 52463 - 44032: 0xAB93,
+ 52464 - 44032: 0xC3C8,
+ 52465 - 44032: 0xAB94,
+ 52466 - 44032: 0xAB95,
+ 52467 - 44032: 0xAB96,
+ 52468 - 44032: 0xAB97,
+ 52469 - 44032: 0xAB98,
+ 52470 - 44032: 0xAB99,
+ 52471 - 44032: 0xAB9A,
+ 52472 - 44032: 0xAB9B,
+ 52473 - 44032: 0xAB9C,
+ 52474 - 44032: 0xAB9D,
+ 52475 - 44032: 0xAB9E,
+ 52476 - 44032: 0xAB9F,
+ 52477 - 44032: 0xABA0,
+ 52478 - 44032: 0xAC41,
+ 52479 - 44032: 0xAC42,
+ 52480 - 44032: 0xAC43,
+ 52481 - 44032: 0xC3C9,
+ 52482 - 44032: 0xAC44,
+ 52483 - 44032: 0xAC45,
+ 52484 - 44032: 0xAC46,
+ 52485 - 44032: 0xAC47,
+ 52486 - 44032: 0xAC48,
+ 52487 - 44032: 0xAC49,
+ 52488 - 44032: 0xC3CA,
+ 52489 - 44032: 0xC3CB,
+ 52490 - 44032: 0xAC4A,
+ 52491 - 44032: 0xAC4B,
+ 52492 - 44032: 0xC3CC,
+ 52493 - 44032: 0xAC4C,
+ 52494 - 44032: 0xAC4D,
+ 52495 - 44032: 0xAC4E,
+ 52496 - 44032: 0xC3CD,
+ 52497 - 44032: 0xAC4F,
+ 52498 - 44032: 0xAC50,
+ 52499 - 44032: 0xAC51,
+ 52500 - 44032: 0xAC52,
+ 52501 - 44032: 0xAC53,
+ 52502 - 44032: 0xAC54,
+ 52503 - 44032: 0xAC55,
+ 52504 - 44032: 0xC3CE,
+ 52505 - 44032: 0xC3CF,
+ 52506 - 44032: 0xAC56,
+ 52507 - 44032: 0xC3D0,
+ 52508 - 44032: 0xAC57,
+ 52509 - 44032: 0xC3D1,
+ 52510 - 44032: 0xAC58,
+ 52511 - 44032: 0xAC59,
+ 52512 - 44032: 0xAC5A,
+ 52513 - 44032: 0xAC61,
+ 52514 - 44032: 0xAC62,
+ 52515 - 44032: 0xAC63,
+ 52516 - 44032: 0xC3D2,
+ 52517 - 44032: 0xAC64,
+ 52518 - 44032: 0xAC65,
+ 52519 - 44032: 0xAC66,
+ 52520 - 44032: 0xC3D3,
+ 52521 - 44032: 0xAC67,
+ 52522 - 44032: 0xAC68,
+ 52523 - 44032: 0xAC69,
+ 52524 - 44032: 0xC3D4,
+ 52525 - 44032: 0xAC6A,
+ 52526 - 44032: 0xAC6B,
+ 52527 - 44032: 0xAC6C,
+ 52528 - 44032: 0xAC6D,
+ 52529 - 44032: 0xAC6E,
+ 52530 - 44032: 0xAC6F,
+ 52531 - 44032: 0xAC70,
+ 52532 - 44032: 0xAC71,
+ 52533 - 44032: 0xAC72,
+ 52534 - 44032: 0xAC73,
+ 52535 - 44032: 0xAC74,
+ 52536 - 44032: 0xAC75,
+ 52537 - 44032: 0xC3D5,
+ 52538 - 44032: 0xAC76,
+ 52539 - 44032: 0xAC77,
+ 52540 - 44032: 0xAC78,
+ 52541 - 44032: 0xAC79,
+ 52542 - 44032: 0xAC7A,
+ 52543 - 44032: 0xAC81,
+ 52544 - 44032: 0xAC82,
+ 52545 - 44032: 0xAC83,
+ 52546 - 44032: 0xAC84,
+ 52547 - 44032: 0xAC85,
+ 52548 - 44032: 0xAC86,
+ 52549 - 44032: 0xAC87,
+ 52550 - 44032: 0xAC88,
+ 52551 - 44032: 0xAC89,
+ 52552 - 44032: 0xAC8A,
+ 52553 - 44032: 0xAC8B,
+ 52554 - 44032: 0xAC8C,
+ 52555 - 44032: 0xAC8D,
+ 52556 - 44032: 0xAC8E,
+ 52557 - 44032: 0xAC8F,
+ 52558 - 44032: 0xAC90,
+ 52559 - 44032: 0xAC91,
+ 52560 - 44032: 0xAC92,
+ 52561 - 44032: 0xAC93,
+ 52562 - 44032: 0xAC94,
+ 52563 - 44032: 0xAC95,
+ 52564 - 44032: 0xAC96,
+ 52565 - 44032: 0xAC97,
+ 52566 - 44032: 0xAC98,
+ 52567 - 44032: 0xAC99,
+ 52568 - 44032: 0xAC9A,
+ 52569 - 44032: 0xAC9B,
+ 52570 - 44032: 0xAC9C,
+ 52571 - 44032: 0xAC9D,
+ 52572 - 44032: 0xC3D6,
+ 52573 - 44032: 0xAC9E,
+ 52574 - 44032: 0xAC9F,
+ 52575 - 44032: 0xACA0,
+ 52576 - 44032: 0xC3D7,
+ 52577 - 44032: 0xAD41,
+ 52578 - 44032: 0xAD42,
+ 52579 - 44032: 0xAD43,
+ 52580 - 44032: 0xC3D8,
+ 52581 - 44032: 0xAD44,
+ 52582 - 44032: 0xAD45,
+ 52583 - 44032: 0xAD46,
+ 52584 - 44032: 0xAD47,
+ 52585 - 44032: 0xAD48,
+ 52586 - 44032: 0xAD49,
+ 52587 - 44032: 0xAD4A,
+ 52588 - 44032: 0xC3D9,
+ 52589 - 44032: 0xC3DA,
+ 52590 - 44032: 0xAD4B,
+ 52591 - 44032: 0xC3DB,
+ 52592 - 44032: 0xAD4C,
+ 52593 - 44032: 0xC3DC,
+ 52594 - 44032: 0xAD4D,
+ 52595 - 44032: 0xAD4E,
+ 52596 - 44032: 0xAD4F,
+ 52597 - 44032: 0xAD50,
+ 52598 - 44032: 0xAD51,
+ 52599 - 44032: 0xAD52,
+ 52600 - 44032: 0xC3DD,
+ 52601 - 44032: 0xAD53,
+ 52602 - 44032: 0xAD54,
+ 52603 - 44032: 0xAD55,
+ 52604 - 44032: 0xAD56,
+ 52605 - 44032: 0xAD57,
+ 52606 - 44032: 0xAD58,
+ 52607 - 44032: 0xAD59,
+ 52608 - 44032: 0xAD5A,
+ 52609 - 44032: 0xAD61,
+ 52610 - 44032: 0xAD62,
+ 52611 - 44032: 0xAD63,
+ 52612 - 44032: 0xAD64,
+ 52613 - 44032: 0xAD65,
+ 52614 - 44032: 0xAD66,
+ 52615 - 44032: 0xAD67,
+ 52616 - 44032: 0xC3DE,
+ 52617 - 44032: 0xAD68,
+ 52618 - 44032: 0xAD69,
+ 52619 - 44032: 0xAD6A,
+ 52620 - 44032: 0xAD6B,
+ 52621 - 44032: 0xAD6C,
+ 52622 - 44032: 0xAD6D,
+ 52623 - 44032: 0xAD6E,
+ 52624 - 44032: 0xAD6F,
+ 52625 - 44032: 0xAD70,
+ 52626 - 44032: 0xAD71,
+ 52627 - 44032: 0xAD72,
+ 52628 - 44032: 0xC3DF,
+ 52629 - 44032: 0xC3E0,
+ 52630 - 44032: 0xAD73,
+ 52631 - 44032: 0xAD74,
+ 52632 - 44032: 0xC3E1,
+ 52633 - 44032: 0xAD75,
+ 52634 - 44032: 0xAD76,
+ 52635 - 44032: 0xAD77,
+ 52636 - 44032: 0xC3E2,
+ 52637 - 44032: 0xAD78,
+ 52638 - 44032: 0xAD79,
+ 52639 - 44032: 0xAD7A,
+ 52640 - 44032: 0xAD81,
+ 52641 - 44032: 0xAD82,
+ 52642 - 44032: 0xAD83,
+ 52643 - 44032: 0xAD84,
+ 52644 - 44032: 0xC3E3,
+ 52645 - 44032: 0xC3E4,
+ 52646 - 44032: 0xAD85,
+ 52647 - 44032: 0xC3E5,
+ 52648 - 44032: 0xAD86,
+ 52649 - 44032: 0xC3E6,
+ 52650 - 44032: 0xAD87,
+ 52651 - 44032: 0xAD88,
+ 52652 - 44032: 0xAD89,
+ 52653 - 44032: 0xAD8A,
+ 52654 - 44032: 0xAD8B,
+ 52655 - 44032: 0xAD8C,
+ 52656 - 44032: 0xC3E7,
+ 52657 - 44032: 0xAD8D,
+ 52658 - 44032: 0xAD8E,
+ 52659 - 44032: 0xAD8F,
+ 52660 - 44032: 0xAD90,
+ 52661 - 44032: 0xAD91,
+ 52662 - 44032: 0xAD92,
+ 52663 - 44032: 0xAD93,
+ 52664 - 44032: 0xAD94,
+ 52665 - 44032: 0xAD95,
+ 52666 - 44032: 0xAD96,
+ 52667 - 44032: 0xAD97,
+ 52668 - 44032: 0xAD98,
+ 52669 - 44032: 0xAD99,
+ 52670 - 44032: 0xAD9A,
+ 52671 - 44032: 0xAD9B,
+ 52672 - 44032: 0xAD9C,
+ 52673 - 44032: 0xAD9D,
+ 52674 - 44032: 0xAD9E,
+ 52675 - 44032: 0xAD9F,
+ 52676 - 44032: 0xC3E8,
+ 52677 - 44032: 0xADA0,
+ 52678 - 44032: 0xAE41,
+ 52679 - 44032: 0xAE42,
+ 52680 - 44032: 0xAE43,
+ 52681 - 44032: 0xAE44,
+ 52682 - 44032: 0xAE45,
+ 52683 - 44032: 0xAE46,
+ 52684 - 44032: 0xC3E9,
+ 52685 - 44032: 0xAE47,
+ 52686 - 44032: 0xAE48,
+ 52687 - 44032: 0xAE49,
+ 52688 - 44032: 0xC3EA,
+ 52689 - 44032: 0xAE4A,
+ 52690 - 44032: 0xAE4B,
+ 52691 - 44032: 0xAE4C,
+ 52692 - 44032: 0xAE4D,
+ 52693 - 44032: 0xAE4E,
+ 52694 - 44032: 0xAE4F,
+ 52695 - 44032: 0xAE50,
+ 52696 - 44032: 0xAE51,
+ 52697 - 44032: 0xAE52,
+ 52698 - 44032: 0xAE53,
+ 52699 - 44032: 0xAE54,
+ 52700 - 44032: 0xAE55,
+ 52701 - 44032: 0xAE56,
+ 52702 - 44032: 0xAE57,
+ 52703 - 44032: 0xAE58,
+ 52704 - 44032: 0xAE59,
+ 52705 - 44032: 0xAE5A,
+ 52706 - 44032: 0xAE61,
+ 52707 - 44032: 0xAE62,
+ 52708 - 44032: 0xAE63,
+ 52709 - 44032: 0xAE64,
+ 52710 - 44032: 0xAE65,
+ 52711 - 44032: 0xAE66,
+ 52712 - 44032: 0xC3EB,
+ 52713 - 44032: 0xAE67,
+ 52714 - 44032: 0xAE68,
+ 52715 - 44032: 0xAE69,
+ 52716 - 44032: 0xC3EC,
+ 52717 - 44032: 0xAE6A,
+ 52718 - 44032: 0xAE6B,
+ 52719 - 44032: 0xAE6C,
+ 52720 - 44032: 0xC3ED,
+ 52721 - 44032: 0xAE6D,
+ 52722 - 44032: 0xAE6E,
+ 52723 - 44032: 0xAE6F,
+ 52724 - 44032: 0xAE70,
+ 52725 - 44032: 0xAE71,
+ 52726 - 44032: 0xAE72,
+ 52727 - 44032: 0xAE73,
+ 52728 - 44032: 0xC3EE,
+ 52729 - 44032: 0xC3EF,
+ 52730 - 44032: 0xAE74,
+ 52731 - 44032: 0xC3F0,
+ 52732 - 44032: 0xAE75,
+ 52733 - 44032: 0xC3F1,
+ 52734 - 44032: 0xAE76,
+ 52735 - 44032: 0xAE77,
+ 52736 - 44032: 0xAE78,
+ 52737 - 44032: 0xAE79,
+ 52738 - 44032: 0xAE7A,
+ 52739 - 44032: 0xAE81,
+ 52740 - 44032: 0xC3F2,
+ 52741 - 44032: 0xAE82,
+ 52742 - 44032: 0xAE83,
+ 52743 - 44032: 0xAE84,
+ 52744 - 44032: 0xC3F3,
+ 52745 - 44032: 0xAE85,
+ 52746 - 44032: 0xAE86,
+ 52747 - 44032: 0xAE87,
+ 52748 - 44032: 0xC3F4,
+ 52749 - 44032: 0xAE88,
+ 52750 - 44032: 0xAE89,
+ 52751 - 44032: 0xAE8A,
+ 52752 - 44032: 0xAE8B,
+ 52753 - 44032: 0xAE8C,
+ 52754 - 44032: 0xAE8D,
+ 52755 - 44032: 0xAE8E,
+ 52756 - 44032: 0xC3F5,
+ 52757 - 44032: 0xAE8F,
+ 52758 - 44032: 0xAE90,
+ 52759 - 44032: 0xAE91,
+ 52760 - 44032: 0xAE92,
+ 52761 - 44032: 0xC3F6,
+ 52762 - 44032: 0xAE93,
+ 52763 - 44032: 0xAE94,
+ 52764 - 44032: 0xAE95,
+ 52765 - 44032: 0xAE96,
+ 52766 - 44032: 0xAE97,
+ 52767 - 44032: 0xAE98,
+ 52768 - 44032: 0xC3F7,
+ 52769 - 44032: 0xC3F8,
+ 52770 - 44032: 0xAE99,
+ 52771 - 44032: 0xAE9A,
+ 52772 - 44032: 0xC3F9,
+ 52773 - 44032: 0xAE9B,
+ 52774 - 44032: 0xAE9C,
+ 52775 - 44032: 0xAE9D,
+ 52776 - 44032: 0xC3FA,
+ 52777 - 44032: 0xAE9E,
+ 52778 - 44032: 0xAE9F,
+ 52779 - 44032: 0xAEA0,
+ 52780 - 44032: 0xAF41,
+ 52781 - 44032: 0xAF42,
+ 52782 - 44032: 0xAF43,
+ 52783 - 44032: 0xAF44,
+ 52784 - 44032: 0xC3FB,
+ 52785 - 44032: 0xC3FC,
+ 52786 - 44032: 0xAF45,
+ 52787 - 44032: 0xC3FD,
+ 52788 - 44032: 0xAF46,
+ 52789 - 44032: 0xC3FE,
+ 52790 - 44032: 0xAF47,
+ 52791 - 44032: 0xAF48,
+ 52792 - 44032: 0xAF49,
+ 52793 - 44032: 0xAF4A,
+ 52794 - 44032: 0xAF4B,
+ 52795 - 44032: 0xAF4C,
+ 52796 - 44032: 0xAF4D,
+ 52797 - 44032: 0xAF4E,
+ 52798 - 44032: 0xAF4F,
+ 52799 - 44032: 0xAF50,
+ 52800 - 44032: 0xAF51,
+ 52801 - 44032: 0xAF52,
+ 52802 - 44032: 0xAF53,
+ 52803 - 44032: 0xAF54,
+ 52804 - 44032: 0xAF55,
+ 52805 - 44032: 0xAF56,
+ 52806 - 44032: 0xAF57,
+ 52807 - 44032: 0xAF58,
+ 52808 - 44032: 0xAF59,
+ 52809 - 44032: 0xAF5A,
+ 52810 - 44032: 0xAF61,
+ 52811 - 44032: 0xAF62,
+ 52812 - 44032: 0xAF63,
+ 52813 - 44032: 0xAF64,
+ 52814 - 44032: 0xAF65,
+ 52815 - 44032: 0xAF66,
+ 52816 - 44032: 0xAF67,
+ 52817 - 44032: 0xAF68,
+ 52818 - 44032: 0xAF69,
+ 52819 - 44032: 0xAF6A,
+ 52820 - 44032: 0xAF6B,
+ 52821 - 44032: 0xAF6C,
+ 52822 - 44032: 0xAF6D,
+ 52823 - 44032: 0xAF6E,
+ 52824 - 44032: 0xC4A1,
+ 52825 - 44032: 0xC4A2,
+ 52826 - 44032: 0xAF6F,
+ 52827 - 44032: 0xAF70,
+ 52828 - 44032: 0xC4A3,
+ 52829 - 44032: 0xAF71,
+ 52830 - 44032: 0xAF72,
+ 52831 - 44032: 0xC4A4,
+ 52832 - 44032: 0xC4A5,
+ 52833 - 44032: 0xC4A6,
+ 52834 - 44032: 0xAF73,
+ 52835 - 44032: 0xAF74,
+ 52836 - 44032: 0xAF75,
+ 52837 - 44032: 0xAF76,
+ 52838 - 44032: 0xAF77,
+ 52839 - 44032: 0xAF78,
+ 52840 - 44032: 0xC4A7,
+ 52841 - 44032: 0xC4A8,
+ 52842 - 44032: 0xAF79,
+ 52843 - 44032: 0xC4A9,
+ 52844 - 44032: 0xAF7A,
+ 52845 - 44032: 0xC4AA,
+ 52846 - 44032: 0xAF81,
+ 52847 - 44032: 0xAF82,
+ 52848 - 44032: 0xAF83,
+ 52849 - 44032: 0xAF84,
+ 52850 - 44032: 0xAF85,
+ 52851 - 44032: 0xAF86,
+ 52852 - 44032: 0xC4AB,
+ 52853 - 44032: 0xC4AC,
+ 52854 - 44032: 0xAF87,
+ 52855 - 44032: 0xAF88,
+ 52856 - 44032: 0xC4AD,
+ 52857 - 44032: 0xAF89,
+ 52858 - 44032: 0xAF8A,
+ 52859 - 44032: 0xAF8B,
+ 52860 - 44032: 0xC4AE,
+ 52861 - 44032: 0xAF8C,
+ 52862 - 44032: 0xAF8D,
+ 52863 - 44032: 0xAF8E,
+ 52864 - 44032: 0xAF8F,
+ 52865 - 44032: 0xAF90,
+ 52866 - 44032: 0xAF91,
+ 52867 - 44032: 0xAF92,
+ 52868 - 44032: 0xC4AF,
+ 52869 - 44032: 0xC4B0,
+ 52870 - 44032: 0xAF93,
+ 52871 - 44032: 0xC4B1,
+ 52872 - 44032: 0xAF94,
+ 52873 - 44032: 0xC4B2,
+ 52874 - 44032: 0xAF95,
+ 52875 - 44032: 0xAF96,
+ 52876 - 44032: 0xAF97,
+ 52877 - 44032: 0xAF98,
+ 52878 - 44032: 0xAF99,
+ 52879 - 44032: 0xAF9A,
+ 52880 - 44032: 0xC4B3,
+ 52881 - 44032: 0xC4B4,
+ 52882 - 44032: 0xAF9B,
+ 52883 - 44032: 0xAF9C,
+ 52884 - 44032: 0xC4B5,
+ 52885 - 44032: 0xAF9D,
+ 52886 - 44032: 0xAF9E,
+ 52887 - 44032: 0xAF9F,
+ 52888 - 44032: 0xC4B6,
+ 52889 - 44032: 0xAFA0,
+ 52890 - 44032: 0xB041,
+ 52891 - 44032: 0xB042,
+ 52892 - 44032: 0xB043,
+ 52893 - 44032: 0xB044,
+ 52894 - 44032: 0xB045,
+ 52895 - 44032: 0xB046,
+ 52896 - 44032: 0xC4B7,
+ 52897 - 44032: 0xC4B8,
+ 52898 - 44032: 0xB047,
+ 52899 - 44032: 0xC4B9,
+ 52900 - 44032: 0xC4BA,
+ 52901 - 44032: 0xC4BB,
+ 52902 - 44032: 0xB048,
+ 52903 - 44032: 0xB049,
+ 52904 - 44032: 0xB04A,
+ 52905 - 44032: 0xB04B,
+ 52906 - 44032: 0xB04C,
+ 52907 - 44032: 0xB04D,
+ 52908 - 44032: 0xC4BC,
+ 52909 - 44032: 0xC4BD,
+ 52910 - 44032: 0xB04E,
+ 52911 - 44032: 0xB04F,
+ 52912 - 44032: 0xB050,
+ 52913 - 44032: 0xB051,
+ 52914 - 44032: 0xB052,
+ 52915 - 44032: 0xB053,
+ 52916 - 44032: 0xB054,
+ 52917 - 44032: 0xB055,
+ 52918 - 44032: 0xB056,
+ 52919 - 44032: 0xB057,
+ 52920 - 44032: 0xB058,
+ 52921 - 44032: 0xB059,
+ 52922 - 44032: 0xB05A,
+ 52923 - 44032: 0xB061,
+ 52924 - 44032: 0xB062,
+ 52925 - 44032: 0xB063,
+ 52926 - 44032: 0xB064,
+ 52927 - 44032: 0xB065,
+ 52928 - 44032: 0xB066,
+ 52929 - 44032: 0xC4BE,
+ 52930 - 44032: 0xB067,
+ 52931 - 44032: 0xB068,
+ 52932 - 44032: 0xB069,
+ 52933 - 44032: 0xB06A,
+ 52934 - 44032: 0xB06B,
+ 52935 - 44032: 0xB06C,
+ 52936 - 44032: 0xB06D,
+ 52937 - 44032: 0xB06E,
+ 52938 - 44032: 0xB06F,
+ 52939 - 44032: 0xB070,
+ 52940 - 44032: 0xB071,
+ 52941 - 44032: 0xB072,
+ 52942 - 44032: 0xB073,
+ 52943 - 44032: 0xB074,
+ 52944 - 44032: 0xB075,
+ 52945 - 44032: 0xB076,
+ 52946 - 44032: 0xB077,
+ 52947 - 44032: 0xB078,
+ 52948 - 44032: 0xB079,
+ 52949 - 44032: 0xB07A,
+ 52950 - 44032: 0xB081,
+ 52951 - 44032: 0xB082,
+ 52952 - 44032: 0xB083,
+ 52953 - 44032: 0xB084,
+ 52954 - 44032: 0xB085,
+ 52955 - 44032: 0xB086,
+ 52956 - 44032: 0xB087,
+ 52957 - 44032: 0xB088,
+ 52958 - 44032: 0xB089,
+ 52959 - 44032: 0xB08A,
+ 52960 - 44032: 0xB08B,
+ 52961 - 44032: 0xB08C,
+ 52962 - 44032: 0xB08D,
+ 52963 - 44032: 0xB08E,
+ 52964 - 44032: 0xC4BF,
+ 52965 - 44032: 0xC4C0,
+ 52966 - 44032: 0xB08F,
+ 52967 - 44032: 0xB090,
+ 52968 - 44032: 0xC4C1,
+ 52969 - 44032: 0xB091,
+ 52970 - 44032: 0xB092,
+ 52971 - 44032: 0xC4C2,
+ 52972 - 44032: 0xC4C3,
+ 52973 - 44032: 0xB093,
+ 52974 - 44032: 0xB094,
+ 52975 - 44032: 0xB095,
+ 52976 - 44032: 0xB096,
+ 52977 - 44032: 0xB097,
+ 52978 - 44032: 0xB098,
+ 52979 - 44032: 0xB099,
+ 52980 - 44032: 0xC4C4,
+ 52981 - 44032: 0xC4C5,
+ 52982 - 44032: 0xB09A,
+ 52983 - 44032: 0xC4C6,
+ 52984 - 44032: 0xC4C7,
+ 52985 - 44032: 0xC4C8,
+ 52986 - 44032: 0xB09B,
+ 52987 - 44032: 0xB09C,
+ 52988 - 44032: 0xB09D,
+ 52989 - 44032: 0xB09E,
+ 52990 - 44032: 0xB09F,
+ 52991 - 44032: 0xB0A0,
+ 52992 - 44032: 0xC4C9,
+ 52993 - 44032: 0xC4CA,
+ 52994 - 44032: 0xB141,
+ 52995 - 44032: 0xB142,
+ 52996 - 44032: 0xC4CB,
+ 52997 - 44032: 0xB143,
+ 52998 - 44032: 0xB144,
+ 52999 - 44032: 0xB145,
+ 53000 - 44032: 0xC4CC,
+ 53001 - 44032: 0xB146,
+ 53002 - 44032: 0xB147,
+ 53003 - 44032: 0xB148,
+ 53004 - 44032: 0xB149,
+ 53005 - 44032: 0xB14A,
+ 53006 - 44032: 0xB14B,
+ 53007 - 44032: 0xB14C,
+ 53008 - 44032: 0xC4CD,
+ 53009 - 44032: 0xC4CE,
+ 53010 - 44032: 0xB14D,
+ 53011 - 44032: 0xC4CF,
+ 53012 - 44032: 0xB14E,
+ 53013 - 44032: 0xC4D0,
+ 53014 - 44032: 0xB14F,
+ 53015 - 44032: 0xB150,
+ 53016 - 44032: 0xB151,
+ 53017 - 44032: 0xB152,
+ 53018 - 44032: 0xB153,
+ 53019 - 44032: 0xB154,
+ 53020 - 44032: 0xC4D1,
+ 53021 - 44032: 0xB155,
+ 53022 - 44032: 0xB156,
+ 53023 - 44032: 0xB157,
+ 53024 - 44032: 0xC4D2,
+ 53025 - 44032: 0xB158,
+ 53026 - 44032: 0xB159,
+ 53027 - 44032: 0xB15A,
+ 53028 - 44032: 0xC4D3,
+ 53029 - 44032: 0xB161,
+ 53030 - 44032: 0xB162,
+ 53031 - 44032: 0xB163,
+ 53032 - 44032: 0xB164,
+ 53033 - 44032: 0xB165,
+ 53034 - 44032: 0xB166,
+ 53035 - 44032: 0xB167,
+ 53036 - 44032: 0xC4D4,
+ 53037 - 44032: 0xC4D5,
+ 53038 - 44032: 0xB168,
+ 53039 - 44032: 0xC4D6,
+ 53040 - 44032: 0xC4D7,
+ 53041 - 44032: 0xC4D8,
+ 53042 - 44032: 0xB169,
+ 53043 - 44032: 0xB16A,
+ 53044 - 44032: 0xB16B,
+ 53045 - 44032: 0xB16C,
+ 53046 - 44032: 0xB16D,
+ 53047 - 44032: 0xB16E,
+ 53048 - 44032: 0xC4D9,
+ 53049 - 44032: 0xB16F,
+ 53050 - 44032: 0xB170,
+ 53051 - 44032: 0xB171,
+ 53052 - 44032: 0xB172,
+ 53053 - 44032: 0xB173,
+ 53054 - 44032: 0xB174,
+ 53055 - 44032: 0xB175,
+ 53056 - 44032: 0xB176,
+ 53057 - 44032: 0xB177,
+ 53058 - 44032: 0xB178,
+ 53059 - 44032: 0xB179,
+ 53060 - 44032: 0xB17A,
+ 53061 - 44032: 0xB181,
+ 53062 - 44032: 0xB182,
+ 53063 - 44032: 0xB183,
+ 53064 - 44032: 0xB184,
+ 53065 - 44032: 0xB185,
+ 53066 - 44032: 0xB186,
+ 53067 - 44032: 0xB187,
+ 53068 - 44032: 0xB188,
+ 53069 - 44032: 0xB189,
+ 53070 - 44032: 0xB18A,
+ 53071 - 44032: 0xB18B,
+ 53072 - 44032: 0xB18C,
+ 53073 - 44032: 0xB18D,
+ 53074 - 44032: 0xB18E,
+ 53075 - 44032: 0xB18F,
+ 53076 - 44032: 0xC4DA,
+ 53077 - 44032: 0xC4DB,
+ 53078 - 44032: 0xB190,
+ 53079 - 44032: 0xB191,
+ 53080 - 44032: 0xC4DC,
+ 53081 - 44032: 0xB192,
+ 53082 - 44032: 0xB193,
+ 53083 - 44032: 0xB194,
+ 53084 - 44032: 0xC4DD,
+ 53085 - 44032: 0xB195,
+ 53086 - 44032: 0xB196,
+ 53087 - 44032: 0xB197,
+ 53088 - 44032: 0xB198,
+ 53089 - 44032: 0xB199,
+ 53090 - 44032: 0xB19A,
+ 53091 - 44032: 0xB19B,
+ 53092 - 44032: 0xC4DE,
+ 53093 - 44032: 0xC4DF,
+ 53094 - 44032: 0xB19C,
+ 53095 - 44032: 0xC4E0,
+ 53096 - 44032: 0xB19D,
+ 53097 - 44032: 0xC4E1,
+ 53098 - 44032: 0xB19E,
+ 53099 - 44032: 0xB19F,
+ 53100 - 44032: 0xB1A0,
+ 53101 - 44032: 0xB241,
+ 53102 - 44032: 0xB242,
+ 53103 - 44032: 0xB243,
+ 53104 - 44032: 0xC4E2,
+ 53105 - 44032: 0xC4E3,
+ 53106 - 44032: 0xB244,
+ 53107 - 44032: 0xB245,
+ 53108 - 44032: 0xC4E4,
+ 53109 - 44032: 0xB246,
+ 53110 - 44032: 0xB247,
+ 53111 - 44032: 0xB248,
+ 53112 - 44032: 0xC4E5,
+ 53113 - 44032: 0xB249,
+ 53114 - 44032: 0xB24A,
+ 53115 - 44032: 0xB24B,
+ 53116 - 44032: 0xB24C,
+ 53117 - 44032: 0xB24D,
+ 53118 - 44032: 0xB24E,
+ 53119 - 44032: 0xB24F,
+ 53120 - 44032: 0xC4E6,
+ 53121 - 44032: 0xB250,
+ 53122 - 44032: 0xB251,
+ 53123 - 44032: 0xB252,
+ 53124 - 44032: 0xB253,
+ 53125 - 44032: 0xC4E7,
+ 53126 - 44032: 0xB254,
+ 53127 - 44032: 0xB255,
+ 53128 - 44032: 0xB256,
+ 53129 - 44032: 0xB257,
+ 53130 - 44032: 0xB258,
+ 53131 - 44032: 0xB259,
+ 53132 - 44032: 0xC4E8,
+ 53133 - 44032: 0xB25A,
+ 53134 - 44032: 0xB261,
+ 53135 - 44032: 0xB262,
+ 53136 - 44032: 0xB263,
+ 53137 - 44032: 0xB264,
+ 53138 - 44032: 0xB265,
+ 53139 - 44032: 0xB266,
+ 53140 - 44032: 0xB267,
+ 53141 - 44032: 0xB268,
+ 53142 - 44032: 0xB269,
+ 53143 - 44032: 0xB26A,
+ 53144 - 44032: 0xB26B,
+ 53145 - 44032: 0xB26C,
+ 53146 - 44032: 0xB26D,
+ 53147 - 44032: 0xB26E,
+ 53148 - 44032: 0xB26F,
+ 53149 - 44032: 0xB270,
+ 53150 - 44032: 0xB271,
+ 53151 - 44032: 0xB272,
+ 53152 - 44032: 0xB273,
+ 53153 - 44032: 0xC4E9,
+ 53154 - 44032: 0xB274,
+ 53155 - 44032: 0xB275,
+ 53156 - 44032: 0xB276,
+ 53157 - 44032: 0xB277,
+ 53158 - 44032: 0xB278,
+ 53159 - 44032: 0xB279,
+ 53160 - 44032: 0xC4EA,
+ 53161 - 44032: 0xB27A,
+ 53162 - 44032: 0xB281,
+ 53163 - 44032: 0xB282,
+ 53164 - 44032: 0xB283,
+ 53165 - 44032: 0xB284,
+ 53166 - 44032: 0xB285,
+ 53167 - 44032: 0xB286,
+ 53168 - 44032: 0xC4EB,
+ 53169 - 44032: 0xB287,
+ 53170 - 44032: 0xB288,
+ 53171 - 44032: 0xB289,
+ 53172 - 44032: 0xB28A,
+ 53173 - 44032: 0xB28B,
+ 53174 - 44032: 0xB28C,
+ 53175 - 44032: 0xB28D,
+ 53176 - 44032: 0xB28E,
+ 53177 - 44032: 0xB28F,
+ 53178 - 44032: 0xB290,
+ 53179 - 44032: 0xB291,
+ 53180 - 44032: 0xB292,
+ 53181 - 44032: 0xB293,
+ 53182 - 44032: 0xB294,
+ 53183 - 44032: 0xB295,
+ 53184 - 44032: 0xB296,
+ 53185 - 44032: 0xB297,
+ 53186 - 44032: 0xB298,
+ 53187 - 44032: 0xB299,
+ 53188 - 44032: 0xC4EC,
+ 53189 - 44032: 0xB29A,
+ 53190 - 44032: 0xB29B,
+ 53191 - 44032: 0xB29C,
+ 53192 - 44032: 0xB29D,
+ 53193 - 44032: 0xB29E,
+ 53194 - 44032: 0xB29F,
+ 53195 - 44032: 0xB2A0,
+ 53196 - 44032: 0xB341,
+ 53197 - 44032: 0xB342,
+ 53198 - 44032: 0xB343,
+ 53199 - 44032: 0xB344,
+ 53200 - 44032: 0xB345,
+ 53201 - 44032: 0xB346,
+ 53202 - 44032: 0xB347,
+ 53203 - 44032: 0xB348,
+ 53204 - 44032: 0xB349,
+ 53205 - 44032: 0xB34A,
+ 53206 - 44032: 0xB34B,
+ 53207 - 44032: 0xB34C,
+ 53208 - 44032: 0xB34D,
+ 53209 - 44032: 0xB34E,
+ 53210 - 44032: 0xB34F,
+ 53211 - 44032: 0xB350,
+ 53212 - 44032: 0xB351,
+ 53213 - 44032: 0xB352,
+ 53214 - 44032: 0xB353,
+ 53215 - 44032: 0xB354,
+ 53216 - 44032: 0xC4ED,
+ 53217 - 44032: 0xC4EE,
+ 53218 - 44032: 0xB355,
+ 53219 - 44032: 0xB356,
+ 53220 - 44032: 0xC4EF,
+ 53221 - 44032: 0xB357,
+ 53222 - 44032: 0xB358,
+ 53223 - 44032: 0xB359,
+ 53224 - 44032: 0xC4F0,
+ 53225 - 44032: 0xB35A,
+ 53226 - 44032: 0xB361,
+ 53227 - 44032: 0xB362,
+ 53228 - 44032: 0xB363,
+ 53229 - 44032: 0xB364,
+ 53230 - 44032: 0xB365,
+ 53231 - 44032: 0xB366,
+ 53232 - 44032: 0xC4F1,
+ 53233 - 44032: 0xC4F2,
+ 53234 - 44032: 0xB367,
+ 53235 - 44032: 0xC4F3,
+ 53236 - 44032: 0xB368,
+ 53237 - 44032: 0xC4F4,
+ 53238 - 44032: 0xB369,
+ 53239 - 44032: 0xB36A,
+ 53240 - 44032: 0xB36B,
+ 53241 - 44032: 0xB36C,
+ 53242 - 44032: 0xB36D,
+ 53243 - 44032: 0xB36E,
+ 53244 - 44032: 0xC4F5,
+ 53245 - 44032: 0xB36F,
+ 53246 - 44032: 0xB370,
+ 53247 - 44032: 0xB371,
+ 53248 - 44032: 0xC4F6,
+ 53249 - 44032: 0xB372,
+ 53250 - 44032: 0xB373,
+ 53251 - 44032: 0xB374,
+ 53252 - 44032: 0xC4F7,
+ 53253 - 44032: 0xB375,
+ 53254 - 44032: 0xB376,
+ 53255 - 44032: 0xB377,
+ 53256 - 44032: 0xB378,
+ 53257 - 44032: 0xB379,
+ 53258 - 44032: 0xB37A,
+ 53259 - 44032: 0xB381,
+ 53260 - 44032: 0xB382,
+ 53261 - 44032: 0xB383,
+ 53262 - 44032: 0xB384,
+ 53263 - 44032: 0xB385,
+ 53264 - 44032: 0xB386,
+ 53265 - 44032: 0xC4F8,
+ 53266 - 44032: 0xB387,
+ 53267 - 44032: 0xB388,
+ 53268 - 44032: 0xB389,
+ 53269 - 44032: 0xB38A,
+ 53270 - 44032: 0xB38B,
+ 53271 - 44032: 0xB38C,
+ 53272 - 44032: 0xC4F9,
+ 53273 - 44032: 0xB38D,
+ 53274 - 44032: 0xB38E,
+ 53275 - 44032: 0xB38F,
+ 53276 - 44032: 0xB390,
+ 53277 - 44032: 0xB391,
+ 53278 - 44032: 0xB392,
+ 53279 - 44032: 0xB393,
+ 53280 - 44032: 0xB394,
+ 53281 - 44032: 0xB395,
+ 53282 - 44032: 0xB396,
+ 53283 - 44032: 0xB397,
+ 53284 - 44032: 0xB398,
+ 53285 - 44032: 0xB399,
+ 53286 - 44032: 0xB39A,
+ 53287 - 44032: 0xB39B,
+ 53288 - 44032: 0xB39C,
+ 53289 - 44032: 0xB39D,
+ 53290 - 44032: 0xB39E,
+ 53291 - 44032: 0xB39F,
+ 53292 - 44032: 0xB3A0,
+ 53293 - 44032: 0xC4FA,
+ 53294 - 44032: 0xB441,
+ 53295 - 44032: 0xB442,
+ 53296 - 44032: 0xB443,
+ 53297 - 44032: 0xB444,
+ 53298 - 44032: 0xB445,
+ 53299 - 44032: 0xB446,
+ 53300 - 44032: 0xC4FB,
+ 53301 - 44032: 0xC4FC,
+ 53302 - 44032: 0xB447,
+ 53303 - 44032: 0xB448,
+ 53304 - 44032: 0xC4FD,
+ 53305 - 44032: 0xB449,
+ 53306 - 44032: 0xB44A,
+ 53307 - 44032: 0xB44B,
+ 53308 - 44032: 0xC4FE,
+ 53309 - 44032: 0xB44C,
+ 53310 - 44032: 0xB44D,
+ 53311 - 44032: 0xB44E,
+ 53312 - 44032: 0xB44F,
+ 53313 - 44032: 0xB450,
+ 53314 - 44032: 0xB451,
+ 53315 - 44032: 0xB452,
+ 53316 - 44032: 0xC5A1,
+ 53317 - 44032: 0xC5A2,
+ 53318 - 44032: 0xB453,
+ 53319 - 44032: 0xC5A3,
+ 53320 - 44032: 0xB454,
+ 53321 - 44032: 0xC5A4,
+ 53322 - 44032: 0xB455,
+ 53323 - 44032: 0xB456,
+ 53324 - 44032: 0xB457,
+ 53325 - 44032: 0xB458,
+ 53326 - 44032: 0xB459,
+ 53327 - 44032: 0xB45A,
+ 53328 - 44032: 0xC5A5,
+ 53329 - 44032: 0xB461,
+ 53330 - 44032: 0xB462,
+ 53331 - 44032: 0xB463,
+ 53332 - 44032: 0xC5A6,
+ 53333 - 44032: 0xB464,
+ 53334 - 44032: 0xB465,
+ 53335 - 44032: 0xB466,
+ 53336 - 44032: 0xC5A7,
+ 53337 - 44032: 0xB467,
+ 53338 - 44032: 0xB468,
+ 53339 - 44032: 0xB469,
+ 53340 - 44032: 0xB46A,
+ 53341 - 44032: 0xB46B,
+ 53342 - 44032: 0xB46C,
+ 53343 - 44032: 0xB46D,
+ 53344 - 44032: 0xC5A8,
+ 53345 - 44032: 0xB46E,
+ 53346 - 44032: 0xB46F,
+ 53347 - 44032: 0xB470,
+ 53348 - 44032: 0xB471,
+ 53349 - 44032: 0xB472,
+ 53350 - 44032: 0xB473,
+ 53351 - 44032: 0xB474,
+ 53352 - 44032: 0xB475,
+ 53353 - 44032: 0xB476,
+ 53354 - 44032: 0xB477,
+ 53355 - 44032: 0xB478,
+ 53356 - 44032: 0xC5A9,
+ 53357 - 44032: 0xC5AA,
+ 53358 - 44032: 0xB479,
+ 53359 - 44032: 0xB47A,
+ 53360 - 44032: 0xC5AB,
+ 53361 - 44032: 0xB481,
+ 53362 - 44032: 0xB482,
+ 53363 - 44032: 0xB483,
+ 53364 - 44032: 0xC5AC,
+ 53365 - 44032: 0xB484,
+ 53366 - 44032: 0xB485,
+ 53367 - 44032: 0xB486,
+ 53368 - 44032: 0xB487,
+ 53369 - 44032: 0xB488,
+ 53370 - 44032: 0xB489,
+ 53371 - 44032: 0xB48A,
+ 53372 - 44032: 0xC5AD,
+ 53373 - 44032: 0xC5AE,
+ 53374 - 44032: 0xB48B,
+ 53375 - 44032: 0xB48C,
+ 53376 - 44032: 0xB48D,
+ 53377 - 44032: 0xC5AF,
+ 53378 - 44032: 0xB48E,
+ 53379 - 44032: 0xB48F,
+ 53380 - 44032: 0xB490,
+ 53381 - 44032: 0xB491,
+ 53382 - 44032: 0xB492,
+ 53383 - 44032: 0xB493,
+ 53384 - 44032: 0xB494,
+ 53385 - 44032: 0xB495,
+ 53386 - 44032: 0xB496,
+ 53387 - 44032: 0xB497,
+ 53388 - 44032: 0xB498,
+ 53389 - 44032: 0xB499,
+ 53390 - 44032: 0xB49A,
+ 53391 - 44032: 0xB49B,
+ 53392 - 44032: 0xB49C,
+ 53393 - 44032: 0xB49D,
+ 53394 - 44032: 0xB49E,
+ 53395 - 44032: 0xB49F,
+ 53396 - 44032: 0xB4A0,
+ 53397 - 44032: 0xB541,
+ 53398 - 44032: 0xB542,
+ 53399 - 44032: 0xB543,
+ 53400 - 44032: 0xB544,
+ 53401 - 44032: 0xB545,
+ 53402 - 44032: 0xB546,
+ 53403 - 44032: 0xB547,
+ 53404 - 44032: 0xB548,
+ 53405 - 44032: 0xB549,
+ 53406 - 44032: 0xB54A,
+ 53407 - 44032: 0xB54B,
+ 53408 - 44032: 0xB54C,
+ 53409 - 44032: 0xB54D,
+ 53410 - 44032: 0xB54E,
+ 53411 - 44032: 0xB54F,
+ 53412 - 44032: 0xC5B0,
+ 53413 - 44032: 0xC5B1,
+ 53414 - 44032: 0xB550,
+ 53415 - 44032: 0xB551,
+ 53416 - 44032: 0xC5B2,
+ 53417 - 44032: 0xB552,
+ 53418 - 44032: 0xB553,
+ 53419 - 44032: 0xB554,
+ 53420 - 44032: 0xC5B3,
+ 53421 - 44032: 0xB555,
+ 53422 - 44032: 0xB556,
+ 53423 - 44032: 0xB557,
+ 53424 - 44032: 0xB558,
+ 53425 - 44032: 0xB559,
+ 53426 - 44032: 0xB55A,
+ 53427 - 44032: 0xB561,
+ 53428 - 44032: 0xC5B4,
+ 53429 - 44032: 0xC5B5,
+ 53430 - 44032: 0xB562,
+ 53431 - 44032: 0xC5B6,
+ 53432 - 44032: 0xB563,
+ 53433 - 44032: 0xC5B7,
+ 53434 - 44032: 0xB564,
+ 53435 - 44032: 0xB565,
+ 53436 - 44032: 0xB566,
+ 53437 - 44032: 0xB567,
+ 53438 - 44032: 0xB568,
+ 53439 - 44032: 0xB569,
+ 53440 - 44032: 0xC5B8,
+ 53441 - 44032: 0xC5B9,
+ 53442 - 44032: 0xB56A,
+ 53443 - 44032: 0xB56B,
+ 53444 - 44032: 0xC5BA,
+ 53445 - 44032: 0xB56C,
+ 53446 - 44032: 0xB56D,
+ 53447 - 44032: 0xB56E,
+ 53448 - 44032: 0xC5BB,
+ 53449 - 44032: 0xC5BC,
+ 53450 - 44032: 0xB56F,
+ 53451 - 44032: 0xB570,
+ 53452 - 44032: 0xB571,
+ 53453 - 44032: 0xB572,
+ 53454 - 44032: 0xB573,
+ 53455 - 44032: 0xB574,
+ 53456 - 44032: 0xC5BD,
+ 53457 - 44032: 0xC5BE,
+ 53458 - 44032: 0xB575,
+ 53459 - 44032: 0xC5BF,
+ 53460 - 44032: 0xC5C0,
+ 53461 - 44032: 0xC5C1,
+ 53462 - 44032: 0xB576,
+ 53463 - 44032: 0xB577,
+ 53464 - 44032: 0xB578,
+ 53465 - 44032: 0xB579,
+ 53466 - 44032: 0xB57A,
+ 53467 - 44032: 0xB581,
+ 53468 - 44032: 0xC5C2,
+ 53469 - 44032: 0xC5C3,
+ 53470 - 44032: 0xB582,
+ 53471 - 44032: 0xB583,
+ 53472 - 44032: 0xC5C4,
+ 53473 - 44032: 0xB584,
+ 53474 - 44032: 0xB585,
+ 53475 - 44032: 0xB586,
+ 53476 - 44032: 0xC5C5,
+ 53477 - 44032: 0xB587,
+ 53478 - 44032: 0xB588,
+ 53479 - 44032: 0xB589,
+ 53480 - 44032: 0xB58A,
+ 53481 - 44032: 0xB58B,
+ 53482 - 44032: 0xB58C,
+ 53483 - 44032: 0xB58D,
+ 53484 - 44032: 0xC5C6,
+ 53485 - 44032: 0xC5C7,
+ 53486 - 44032: 0xB58E,
+ 53487 - 44032: 0xC5C8,
+ 53488 - 44032: 0xC5C9,
+ 53489 - 44032: 0xC5CA,
+ 53490 - 44032: 0xB58F,
+ 53491 - 44032: 0xB590,
+ 53492 - 44032: 0xB591,
+ 53493 - 44032: 0xB592,
+ 53494 - 44032: 0xB593,
+ 53495 - 44032: 0xB594,
+ 53496 - 44032: 0xC5CB,
+ 53497 - 44032: 0xB595,
+ 53498 - 44032: 0xB596,
+ 53499 - 44032: 0xB597,
+ 53500 - 44032: 0xB598,
+ 53501 - 44032: 0xB599,
+ 53502 - 44032: 0xB59A,
+ 53503 - 44032: 0xB59B,
+ 53504 - 44032: 0xB59C,
+ 53505 - 44032: 0xB59D,
+ 53506 - 44032: 0xB59E,
+ 53507 - 44032: 0xB59F,
+ 53508 - 44032: 0xB5A0,
+ 53509 - 44032: 0xB641,
+ 53510 - 44032: 0xB642,
+ 53511 - 44032: 0xB643,
+ 53512 - 44032: 0xB644,
+ 53513 - 44032: 0xB645,
+ 53514 - 44032: 0xB646,
+ 53515 - 44032: 0xB647,
+ 53516 - 44032: 0xB648,
+ 53517 - 44032: 0xC5CC,
+ 53518 - 44032: 0xB649,
+ 53519 - 44032: 0xB64A,
+ 53520 - 44032: 0xB64B,
+ 53521 - 44032: 0xB64C,
+ 53522 - 44032: 0xB64D,
+ 53523 - 44032: 0xB64E,
+ 53524 - 44032: 0xB64F,
+ 53525 - 44032: 0xB650,
+ 53526 - 44032: 0xB651,
+ 53527 - 44032: 0xB652,
+ 53528 - 44032: 0xB653,
+ 53529 - 44032: 0xB654,
+ 53530 - 44032: 0xB655,
+ 53531 - 44032: 0xB656,
+ 53532 - 44032: 0xB657,
+ 53533 - 44032: 0xB658,
+ 53534 - 44032: 0xB659,
+ 53535 - 44032: 0xB65A,
+ 53536 - 44032: 0xB661,
+ 53537 - 44032: 0xB662,
+ 53538 - 44032: 0xB663,
+ 53539 - 44032: 0xB664,
+ 53540 - 44032: 0xB665,
+ 53541 - 44032: 0xB666,
+ 53542 - 44032: 0xB667,
+ 53543 - 44032: 0xB668,
+ 53544 - 44032: 0xB669,
+ 53545 - 44032: 0xB66A,
+ 53546 - 44032: 0xB66B,
+ 53547 - 44032: 0xB66C,
+ 53548 - 44032: 0xB66D,
+ 53549 - 44032: 0xB66E,
+ 53550 - 44032: 0xB66F,
+ 53551 - 44032: 0xB670,
+ 53552 - 44032: 0xC5CD,
+ 53553 - 44032: 0xC5CE,
+ 53554 - 44032: 0xB671,
+ 53555 - 44032: 0xB672,
+ 53556 - 44032: 0xC5CF,
+ 53557 - 44032: 0xB673,
+ 53558 - 44032: 0xB674,
+ 53559 - 44032: 0xB675,
+ 53560 - 44032: 0xC5D0,
+ 53561 - 44032: 0xB676,
+ 53562 - 44032: 0xC5D1,
+ 53563 - 44032: 0xB677,
+ 53564 - 44032: 0xB678,
+ 53565 - 44032: 0xB679,
+ 53566 - 44032: 0xB67A,
+ 53567 - 44032: 0xB681,
+ 53568 - 44032: 0xC5D2,
+ 53569 - 44032: 0xC5D3,
+ 53570 - 44032: 0xB682,
+ 53571 - 44032: 0xC5D4,
+ 53572 - 44032: 0xC5D5,
+ 53573 - 44032: 0xC5D6,
+ 53574 - 44032: 0xB683,
+ 53575 - 44032: 0xB684,
+ 53576 - 44032: 0xB685,
+ 53577 - 44032: 0xB686,
+ 53578 - 44032: 0xB687,
+ 53579 - 44032: 0xB688,
+ 53580 - 44032: 0xC5D7,
+ 53581 - 44032: 0xC5D8,
+ 53582 - 44032: 0xB689,
+ 53583 - 44032: 0xB68A,
+ 53584 - 44032: 0xC5D9,
+ 53585 - 44032: 0xB68B,
+ 53586 - 44032: 0xB68C,
+ 53587 - 44032: 0xB68D,
+ 53588 - 44032: 0xC5DA,
+ 53589 - 44032: 0xB68E,
+ 53590 - 44032: 0xB68F,
+ 53591 - 44032: 0xB690,
+ 53592 - 44032: 0xB691,
+ 53593 - 44032: 0xB692,
+ 53594 - 44032: 0xB693,
+ 53595 - 44032: 0xB694,
+ 53596 - 44032: 0xC5DB,
+ 53597 - 44032: 0xC5DC,
+ 53598 - 44032: 0xB695,
+ 53599 - 44032: 0xC5DD,
+ 53600 - 44032: 0xB696,
+ 53601 - 44032: 0xC5DE,
+ 53602 - 44032: 0xB697,
+ 53603 - 44032: 0xB698,
+ 53604 - 44032: 0xB699,
+ 53605 - 44032: 0xB69A,
+ 53606 - 44032: 0xB69B,
+ 53607 - 44032: 0xB69C,
+ 53608 - 44032: 0xC5DF,
+ 53609 - 44032: 0xB69D,
+ 53610 - 44032: 0xB69E,
+ 53611 - 44032: 0xB69F,
+ 53612 - 44032: 0xC5E0,
+ 53613 - 44032: 0xB6A0,
+ 53614 - 44032: 0xB741,
+ 53615 - 44032: 0xB742,
+ 53616 - 44032: 0xB743,
+ 53617 - 44032: 0xB744,
+ 53618 - 44032: 0xB745,
+ 53619 - 44032: 0xB746,
+ 53620 - 44032: 0xB747,
+ 53621 - 44032: 0xB748,
+ 53622 - 44032: 0xB749,
+ 53623 - 44032: 0xB74A,
+ 53624 - 44032: 0xB74B,
+ 53625 - 44032: 0xB74C,
+ 53626 - 44032: 0xB74D,
+ 53627 - 44032: 0xB74E,
+ 53628 - 44032: 0xC5E1,
+ 53629 - 44032: 0xB74F,
+ 53630 - 44032: 0xB750,
+ 53631 - 44032: 0xB751,
+ 53632 - 44032: 0xB752,
+ 53633 - 44032: 0xB753,
+ 53634 - 44032: 0xB754,
+ 53635 - 44032: 0xB755,
+ 53636 - 44032: 0xC5E2,
+ 53637 - 44032: 0xB756,
+ 53638 - 44032: 0xB757,
+ 53639 - 44032: 0xB758,
+ 53640 - 44032: 0xC5E3,
+ 53641 - 44032: 0xB759,
+ 53642 - 44032: 0xB75A,
+ 53643 - 44032: 0xB761,
+ 53644 - 44032: 0xB762,
+ 53645 - 44032: 0xB763,
+ 53646 - 44032: 0xB764,
+ 53647 - 44032: 0xB765,
+ 53648 - 44032: 0xB766,
+ 53649 - 44032: 0xB767,
+ 53650 - 44032: 0xB768,
+ 53651 - 44032: 0xB769,
+ 53652 - 44032: 0xB76A,
+ 53653 - 44032: 0xB76B,
+ 53654 - 44032: 0xB76C,
+ 53655 - 44032: 0xB76D,
+ 53656 - 44032: 0xB76E,
+ 53657 - 44032: 0xB76F,
+ 53658 - 44032: 0xB770,
+ 53659 - 44032: 0xB771,
+ 53660 - 44032: 0xB772,
+ 53661 - 44032: 0xB773,
+ 53662 - 44032: 0xB774,
+ 53663 - 44032: 0xB775,
+ 53664 - 44032: 0xC5E4,
+ 53665 - 44032: 0xC5E5,
+ 53666 - 44032: 0xB776,
+ 53667 - 44032: 0xB777,
+ 53668 - 44032: 0xC5E6,
+ 53669 - 44032: 0xB778,
+ 53670 - 44032: 0xB779,
+ 53671 - 44032: 0xB77A,
+ 53672 - 44032: 0xC5E7,
+ 53673 - 44032: 0xB781,
+ 53674 - 44032: 0xB782,
+ 53675 - 44032: 0xB783,
+ 53676 - 44032: 0xB784,
+ 53677 - 44032: 0xB785,
+ 53678 - 44032: 0xB786,
+ 53679 - 44032: 0xB787,
+ 53680 - 44032: 0xC5E8,
+ 53681 - 44032: 0xC5E9,
+ 53682 - 44032: 0xB788,
+ 53683 - 44032: 0xC5EA,
+ 53684 - 44032: 0xB789,
+ 53685 - 44032: 0xC5EB,
+ 53686 - 44032: 0xB78A,
+ 53687 - 44032: 0xB78B,
+ 53688 - 44032: 0xB78C,
+ 53689 - 44032: 0xB78D,
+ 53690 - 44032: 0xC5EC,
+ 53691 - 44032: 0xB78E,
+ 53692 - 44032: 0xC5ED,
+ 53693 - 44032: 0xB78F,
+ 53694 - 44032: 0xB790,
+ 53695 - 44032: 0xB791,
+ 53696 - 44032: 0xC5EE,
+ 53697 - 44032: 0xB792,
+ 53698 - 44032: 0xB793,
+ 53699 - 44032: 0xB794,
+ 53700 - 44032: 0xB795,
+ 53701 - 44032: 0xB796,
+ 53702 - 44032: 0xB797,
+ 53703 - 44032: 0xB798,
+ 53704 - 44032: 0xB799,
+ 53705 - 44032: 0xB79A,
+ 53706 - 44032: 0xB79B,
+ 53707 - 44032: 0xB79C,
+ 53708 - 44032: 0xB79D,
+ 53709 - 44032: 0xB79E,
+ 53710 - 44032: 0xB79F,
+ 53711 - 44032: 0xB7A0,
+ 53712 - 44032: 0xB841,
+ 53713 - 44032: 0xB842,
+ 53714 - 44032: 0xB843,
+ 53715 - 44032: 0xB844,
+ 53716 - 44032: 0xB845,
+ 53717 - 44032: 0xB846,
+ 53718 - 44032: 0xB847,
+ 53719 - 44032: 0xB848,
+ 53720 - 44032: 0xC5EF,
+ 53721 - 44032: 0xB849,
+ 53722 - 44032: 0xB84A,
+ 53723 - 44032: 0xB84B,
+ 53724 - 44032: 0xB84C,
+ 53725 - 44032: 0xB84D,
+ 53726 - 44032: 0xB84E,
+ 53727 - 44032: 0xB84F,
+ 53728 - 44032: 0xB850,
+ 53729 - 44032: 0xB851,
+ 53730 - 44032: 0xB852,
+ 53731 - 44032: 0xB853,
+ 53732 - 44032: 0xB854,
+ 53733 - 44032: 0xB855,
+ 53734 - 44032: 0xB856,
+ 53735 - 44032: 0xB857,
+ 53736 - 44032: 0xB858,
+ 53737 - 44032: 0xB859,
+ 53738 - 44032: 0xB85A,
+ 53739 - 44032: 0xB861,
+ 53740 - 44032: 0xB862,
+ 53741 - 44032: 0xB863,
+ 53742 - 44032: 0xB864,
+ 53743 - 44032: 0xB865,
+ 53744 - 44032: 0xB866,
+ 53745 - 44032: 0xB867,
+ 53746 - 44032: 0xB868,
+ 53747 - 44032: 0xB869,
+ 53748 - 44032: 0xC5F0,
+ 53749 - 44032: 0xB86A,
+ 53750 - 44032: 0xB86B,
+ 53751 - 44032: 0xB86C,
+ 53752 - 44032: 0xC5F1,
+ 53753 - 44032: 0xB86D,
+ 53754 - 44032: 0xB86E,
+ 53755 - 44032: 0xB86F,
+ 53756 - 44032: 0xB870,
+ 53757 - 44032: 0xB871,
+ 53758 - 44032: 0xB872,
+ 53759 - 44032: 0xB873,
+ 53760 - 44032: 0xB874,
+ 53761 - 44032: 0xB875,
+ 53762 - 44032: 0xB876,
+ 53763 - 44032: 0xB877,
+ 53764 - 44032: 0xB878,
+ 53765 - 44032: 0xB879,
+ 53766 - 44032: 0xB87A,
+ 53767 - 44032: 0xC5F2,
+ 53768 - 44032: 0xB881,
+ 53769 - 44032: 0xC5F3,
+ 53770 - 44032: 0xB882,
+ 53771 - 44032: 0xB883,
+ 53772 - 44032: 0xB884,
+ 53773 - 44032: 0xB885,
+ 53774 - 44032: 0xB886,
+ 53775 - 44032: 0xB887,
+ 53776 - 44032: 0xC5F4,
+ 53777 - 44032: 0xB888,
+ 53778 - 44032: 0xB889,
+ 53779 - 44032: 0xB88A,
+ 53780 - 44032: 0xB88B,
+ 53781 - 44032: 0xB88C,
+ 53782 - 44032: 0xB88D,
+ 53783 - 44032: 0xB88E,
+ 53784 - 44032: 0xB88F,
+ 53785 - 44032: 0xB890,
+ 53786 - 44032: 0xB891,
+ 53787 - 44032: 0xB892,
+ 53788 - 44032: 0xB893,
+ 53789 - 44032: 0xB894,
+ 53790 - 44032: 0xB895,
+ 53791 - 44032: 0xB896,
+ 53792 - 44032: 0xB897,
+ 53793 - 44032: 0xB898,
+ 53794 - 44032: 0xB899,
+ 53795 - 44032: 0xB89A,
+ 53796 - 44032: 0xB89B,
+ 53797 - 44032: 0xB89C,
+ 53798 - 44032: 0xB89D,
+ 53799 - 44032: 0xB89E,
+ 53800 - 44032: 0xB89F,
+ 53801 - 44032: 0xB8A0,
+ 53802 - 44032: 0xB941,
+ 53803 - 44032: 0xB942,
+ 53804 - 44032: 0xC5F5,
+ 53805 - 44032: 0xC5F6,
+ 53806 - 44032: 0xB943,
+ 53807 - 44032: 0xB944,
+ 53808 - 44032: 0xC5F7,
+ 53809 - 44032: 0xB945,
+ 53810 - 44032: 0xB946,
+ 53811 - 44032: 0xB947,
+ 53812 - 44032: 0xC5F8,
+ 53813 - 44032: 0xB948,
+ 53814 - 44032: 0xB949,
+ 53815 - 44032: 0xB94A,
+ 53816 - 44032: 0xB94B,
+ 53817 - 44032: 0xB94C,
+ 53818 - 44032: 0xB94D,
+ 53819 - 44032: 0xB94E,
+ 53820 - 44032: 0xC5F9,
+ 53821 - 44032: 0xC5FA,
+ 53822 - 44032: 0xB94F,
+ 53823 - 44032: 0xC5FB,
+ 53824 - 44032: 0xB950,
+ 53825 - 44032: 0xC5FC,
+ 53826 - 44032: 0xB951,
+ 53827 - 44032: 0xB952,
+ 53828 - 44032: 0xB953,
+ 53829 - 44032: 0xB954,
+ 53830 - 44032: 0xB955,
+ 53831 - 44032: 0xB956,
+ 53832 - 44032: 0xC5FD,
+ 53833 - 44032: 0xB957,
+ 53834 - 44032: 0xB958,
+ 53835 - 44032: 0xB959,
+ 53836 - 44032: 0xB95A,
+ 53837 - 44032: 0xB961,
+ 53838 - 44032: 0xB962,
+ 53839 - 44032: 0xB963,
+ 53840 - 44032: 0xB964,
+ 53841 - 44032: 0xB965,
+ 53842 - 44032: 0xB966,
+ 53843 - 44032: 0xB967,
+ 53844 - 44032: 0xB968,
+ 53845 - 44032: 0xB969,
+ 53846 - 44032: 0xB96A,
+ 53847 - 44032: 0xB96B,
+ 53848 - 44032: 0xB96C,
+ 53849 - 44032: 0xB96D,
+ 53850 - 44032: 0xB96E,
+ 53851 - 44032: 0xB96F,
+ 53852 - 44032: 0xC5FE,
+ 53853 - 44032: 0xB970,
+ 53854 - 44032: 0xB971,
+ 53855 - 44032: 0xB972,
+ 53856 - 44032: 0xB973,
+ 53857 - 44032: 0xB974,
+ 53858 - 44032: 0xB975,
+ 53859 - 44032: 0xB976,
+ 53860 - 44032: 0xC6A1,
+ 53861 - 44032: 0xB977,
+ 53862 - 44032: 0xB978,
+ 53863 - 44032: 0xB979,
+ 53864 - 44032: 0xB97A,
+ 53865 - 44032: 0xB981,
+ 53866 - 44032: 0xB982,
+ 53867 - 44032: 0xB983,
+ 53868 - 44032: 0xB984,
+ 53869 - 44032: 0xB985,
+ 53870 - 44032: 0xB986,
+ 53871 - 44032: 0xB987,
+ 53872 - 44032: 0xB988,
+ 53873 - 44032: 0xB989,
+ 53874 - 44032: 0xB98A,
+ 53875 - 44032: 0xB98B,
+ 53876 - 44032: 0xB98C,
+ 53877 - 44032: 0xB98D,
+ 53878 - 44032: 0xB98E,
+ 53879 - 44032: 0xB98F,
+ 53880 - 44032: 0xB990,
+ 53881 - 44032: 0xB991,
+ 53882 - 44032: 0xB992,
+ 53883 - 44032: 0xB993,
+ 53884 - 44032: 0xB994,
+ 53885 - 44032: 0xB995,
+ 53886 - 44032: 0xB996,
+ 53887 - 44032: 0xB997,
+ 53888 - 44032: 0xC6A2,
+ 53889 - 44032: 0xC6A3,
+ 53890 - 44032: 0xB998,
+ 53891 - 44032: 0xB999,
+ 53892 - 44032: 0xC6A4,
+ 53893 - 44032: 0xB99A,
+ 53894 - 44032: 0xB99B,
+ 53895 - 44032: 0xB99C,
+ 53896 - 44032: 0xC6A5,
+ 53897 - 44032: 0xB99D,
+ 53898 - 44032: 0xB99E,
+ 53899 - 44032: 0xB99F,
+ 53900 - 44032: 0xB9A0,
+ 53901 - 44032: 0xBA41,
+ 53902 - 44032: 0xBA42,
+ 53903 - 44032: 0xBA43,
+ 53904 - 44032: 0xC6A6,
+ 53905 - 44032: 0xC6A7,
+ 53906 - 44032: 0xBA44,
+ 53907 - 44032: 0xBA45,
+ 53908 - 44032: 0xBA46,
+ 53909 - 44032: 0xC6A8,
+ 53910 - 44032: 0xBA47,
+ 53911 - 44032: 0xBA48,
+ 53912 - 44032: 0xBA49,
+ 53913 - 44032: 0xBA4A,
+ 53914 - 44032: 0xBA4B,
+ 53915 - 44032: 0xBA4C,
+ 53916 - 44032: 0xC6A9,
+ 53917 - 44032: 0xBA4D,
+ 53918 - 44032: 0xBA4E,
+ 53919 - 44032: 0xBA4F,
+ 53920 - 44032: 0xC6AA,
+ 53921 - 44032: 0xBA50,
+ 53922 - 44032: 0xBA51,
+ 53923 - 44032: 0xBA52,
+ 53924 - 44032: 0xC6AB,
+ 53925 - 44032: 0xBA53,
+ 53926 - 44032: 0xBA54,
+ 53927 - 44032: 0xBA55,
+ 53928 - 44032: 0xBA56,
+ 53929 - 44032: 0xBA57,
+ 53930 - 44032: 0xBA58,
+ 53931 - 44032: 0xBA59,
+ 53932 - 44032: 0xC6AC,
+ 53933 - 44032: 0xBA5A,
+ 53934 - 44032: 0xBA61,
+ 53935 - 44032: 0xBA62,
+ 53936 - 44032: 0xBA63,
+ 53937 - 44032: 0xC6AD,
+ 53938 - 44032: 0xBA64,
+ 53939 - 44032: 0xBA65,
+ 53940 - 44032: 0xBA66,
+ 53941 - 44032: 0xBA67,
+ 53942 - 44032: 0xBA68,
+ 53943 - 44032: 0xBA69,
+ 53944 - 44032: 0xC6AE,
+ 53945 - 44032: 0xC6AF,
+ 53946 - 44032: 0xBA6A,
+ 53947 - 44032: 0xBA6B,
+ 53948 - 44032: 0xC6B0,
+ 53949 - 44032: 0xBA6C,
+ 53950 - 44032: 0xBA6D,
+ 53951 - 44032: 0xC6B1,
+ 53952 - 44032: 0xC6B2,
+ 53953 - 44032: 0xBA6E,
+ 53954 - 44032: 0xC6B3,
+ 53955 - 44032: 0xBA6F,
+ 53956 - 44032: 0xBA70,
+ 53957 - 44032: 0xBA71,
+ 53958 - 44032: 0xBA72,
+ 53959 - 44032: 0xBA73,
+ 53960 - 44032: 0xC6B4,
+ 53961 - 44032: 0xC6B5,
+ 53962 - 44032: 0xBA74,
+ 53963 - 44032: 0xC6B6,
+ 53964 - 44032: 0xBA75,
+ 53965 - 44032: 0xBA76,
+ 53966 - 44032: 0xBA77,
+ 53967 - 44032: 0xBA78,
+ 53968 - 44032: 0xBA79,
+ 53969 - 44032: 0xBA7A,
+ 53970 - 44032: 0xBA81,
+ 53971 - 44032: 0xBA82,
+ 53972 - 44032: 0xC6B7,
+ 53973 - 44032: 0xBA83,
+ 53974 - 44032: 0xBA84,
+ 53975 - 44032: 0xBA85,
+ 53976 - 44032: 0xC6B8,
+ 53977 - 44032: 0xBA86,
+ 53978 - 44032: 0xBA87,
+ 53979 - 44032: 0xBA88,
+ 53980 - 44032: 0xC6B9,
+ 53981 - 44032: 0xBA89,
+ 53982 - 44032: 0xBA8A,
+ 53983 - 44032: 0xBA8B,
+ 53984 - 44032: 0xBA8C,
+ 53985 - 44032: 0xBA8D,
+ 53986 - 44032: 0xBA8E,
+ 53987 - 44032: 0xBA8F,
+ 53988 - 44032: 0xC6BA,
+ 53989 - 44032: 0xC6BB,
+ 53990 - 44032: 0xBA90,
+ 53991 - 44032: 0xBA91,
+ 53992 - 44032: 0xBA92,
+ 53993 - 44032: 0xBA93,
+ 53994 - 44032: 0xBA94,
+ 53995 - 44032: 0xBA95,
+ 53996 - 44032: 0xBA96,
+ 53997 - 44032: 0xBA97,
+ 53998 - 44032: 0xBA98,
+ 53999 - 44032: 0xBA99,
+ 54000 - 44032: 0xC6BC,
+ 54001 - 44032: 0xC6BD,
+ 54002 - 44032: 0xBA9A,
+ 54003 - 44032: 0xBA9B,
+ 54004 - 44032: 0xC6BE,
+ 54005 - 44032: 0xBA9C,
+ 54006 - 44032: 0xBA9D,
+ 54007 - 44032: 0xBA9E,
+ 54008 - 44032: 0xC6BF,
+ 54009 - 44032: 0xBA9F,
+ 54010 - 44032: 0xBAA0,
+ 54011 - 44032: 0xBB41,
+ 54012 - 44032: 0xBB42,
+ 54013 - 44032: 0xBB43,
+ 54014 - 44032: 0xBB44,
+ 54015 - 44032: 0xBB45,
+ 54016 - 44032: 0xC6C0,
+ 54017 - 44032: 0xC6C1,
+ 54018 - 44032: 0xBB46,
+ 54019 - 44032: 0xC6C2,
+ 54020 - 44032: 0xBB47,
+ 54021 - 44032: 0xC6C3,
+ 54022 - 44032: 0xBB48,
+ 54023 - 44032: 0xBB49,
+ 54024 - 44032: 0xBB4A,
+ 54025 - 44032: 0xBB4B,
+ 54026 - 44032: 0xBB4C,
+ 54027 - 44032: 0xBB4D,
+ 54028 - 44032: 0xC6C4,
+ 54029 - 44032: 0xC6C5,
+ 54030 - 44032: 0xC6C6,
+ 54031 - 44032: 0xBB4E,
+ 54032 - 44032: 0xC6C7,
+ 54033 - 44032: 0xBB4F,
+ 54034 - 44032: 0xBB50,
+ 54035 - 44032: 0xBB51,
+ 54036 - 44032: 0xC6C8,
+ 54037 - 44032: 0xBB52,
+ 54038 - 44032: 0xC6C9,
+ 54039 - 44032: 0xBB53,
+ 54040 - 44032: 0xBB54,
+ 54041 - 44032: 0xBB55,
+ 54042 - 44032: 0xBB56,
+ 54043 - 44032: 0xBB57,
+ 54044 - 44032: 0xC6CA,
+ 54045 - 44032: 0xC6CB,
+ 54046 - 44032: 0xBB58,
+ 54047 - 44032: 0xC6CC,
+ 54048 - 44032: 0xC6CD,
+ 54049 - 44032: 0xC6CE,
+ 54050 - 44032: 0xBB59,
+ 54051 - 44032: 0xBB5A,
+ 54052 - 44032: 0xBB61,
+ 54053 - 44032: 0xC6CF,
+ 54054 - 44032: 0xBB62,
+ 54055 - 44032: 0xBB63,
+ 54056 - 44032: 0xC6D0,
+ 54057 - 44032: 0xC6D1,
+ 54058 - 44032: 0xBB64,
+ 54059 - 44032: 0xBB65,
+ 54060 - 44032: 0xC6D2,
+ 54061 - 44032: 0xBB66,
+ 54062 - 44032: 0xBB67,
+ 54063 - 44032: 0xBB68,
+ 54064 - 44032: 0xC6D3,
+ 54065 - 44032: 0xBB69,
+ 54066 - 44032: 0xBB6A,
+ 54067 - 44032: 0xBB6B,
+ 54068 - 44032: 0xBB6C,
+ 54069 - 44032: 0xBB6D,
+ 54070 - 44032: 0xBB6E,
+ 54071 - 44032: 0xBB6F,
+ 54072 - 44032: 0xC6D4,
+ 54073 - 44032: 0xC6D5,
+ 54074 - 44032: 0xBB70,
+ 54075 - 44032: 0xC6D6,
+ 54076 - 44032: 0xC6D7,
+ 54077 - 44032: 0xC6D8,
+ 54078 - 44032: 0xBB71,
+ 54079 - 44032: 0xBB72,
+ 54080 - 44032: 0xBB73,
+ 54081 - 44032: 0xBB74,
+ 54082 - 44032: 0xBB75,
+ 54083 - 44032: 0xBB76,
+ 54084 - 44032: 0xC6D9,
+ 54085 - 44032: 0xC6DA,
+ 54086 - 44032: 0xBB77,
+ 54087 - 44032: 0xBB78,
+ 54088 - 44032: 0xBB79,
+ 54089 - 44032: 0xBB7A,
+ 54090 - 44032: 0xBB81,
+ 54091 - 44032: 0xBB82,
+ 54092 - 44032: 0xBB83,
+ 54093 - 44032: 0xBB84,
+ 54094 - 44032: 0xBB85,
+ 54095 - 44032: 0xBB86,
+ 54096 - 44032: 0xBB87,
+ 54097 - 44032: 0xBB88,
+ 54098 - 44032: 0xBB89,
+ 54099 - 44032: 0xBB8A,
+ 54100 - 44032: 0xBB8B,
+ 54101 - 44032: 0xBB8C,
+ 54102 - 44032: 0xBB8D,
+ 54103 - 44032: 0xBB8E,
+ 54104 - 44032: 0xBB8F,
+ 54105 - 44032: 0xBB90,
+ 54106 - 44032: 0xBB91,
+ 54107 - 44032: 0xBB92,
+ 54108 - 44032: 0xBB93,
+ 54109 - 44032: 0xBB94,
+ 54110 - 44032: 0xBB95,
+ 54111 - 44032: 0xBB96,
+ 54112 - 44032: 0xBB97,
+ 54113 - 44032: 0xBB98,
+ 54114 - 44032: 0xBB99,
+ 54115 - 44032: 0xBB9A,
+ 54116 - 44032: 0xBB9B,
+ 54117 - 44032: 0xBB9C,
+ 54118 - 44032: 0xBB9D,
+ 54119 - 44032: 0xBB9E,
+ 54120 - 44032: 0xBB9F,
+ 54121 - 44032: 0xBBA0,
+ 54122 - 44032: 0xBC41,
+ 54123 - 44032: 0xBC42,
+ 54124 - 44032: 0xBC43,
+ 54125 - 44032: 0xBC44,
+ 54126 - 44032: 0xBC45,
+ 54127 - 44032: 0xBC46,
+ 54128 - 44032: 0xBC47,
+ 54129 - 44032: 0xBC48,
+ 54130 - 44032: 0xBC49,
+ 54131 - 44032: 0xBC4A,
+ 54132 - 44032: 0xBC4B,
+ 54133 - 44032: 0xBC4C,
+ 54134 - 44032: 0xBC4D,
+ 54135 - 44032: 0xBC4E,
+ 54136 - 44032: 0xBC4F,
+ 54137 - 44032: 0xBC50,
+ 54138 - 44032: 0xBC51,
+ 54139 - 44032: 0xBC52,
+ 54140 - 44032: 0xC6DB,
+ 54141 - 44032: 0xC6DC,
+ 54142 - 44032: 0xBC53,
+ 54143 - 44032: 0xBC54,
+ 54144 - 44032: 0xC6DD,
+ 54145 - 44032: 0xBC55,
+ 54146 - 44032: 0xBC56,
+ 54147 - 44032: 0xBC57,
+ 54148 - 44032: 0xC6DE,
+ 54149 - 44032: 0xBC58,
+ 54150 - 44032: 0xBC59,
+ 54151 - 44032: 0xBC5A,
+ 54152 - 44032: 0xBC61,
+ 54153 - 44032: 0xBC62,
+ 54154 - 44032: 0xBC63,
+ 54155 - 44032: 0xBC64,
+ 54156 - 44032: 0xC6DF,
+ 54157 - 44032: 0xC6E0,
+ 54158 - 44032: 0xBC65,
+ 54159 - 44032: 0xC6E1,
+ 54160 - 44032: 0xC6E2,
+ 54161 - 44032: 0xC6E3,
+ 54162 - 44032: 0xBC66,
+ 54163 - 44032: 0xBC67,
+ 54164 - 44032: 0xBC68,
+ 54165 - 44032: 0xBC69,
+ 54166 - 44032: 0xBC6A,
+ 54167 - 44032: 0xBC6B,
+ 54168 - 44032: 0xC6E4,
+ 54169 - 44032: 0xC6E5,
+ 54170 - 44032: 0xBC6C,
+ 54171 - 44032: 0xBC6D,
+ 54172 - 44032: 0xC6E6,
+ 54173 - 44032: 0xBC6E,
+ 54174 - 44032: 0xBC6F,
+ 54175 - 44032: 0xBC70,
+ 54176 - 44032: 0xC6E7,
+ 54177 - 44032: 0xBC71,
+ 54178 - 44032: 0xBC72,
+ 54179 - 44032: 0xBC73,
+ 54180 - 44032: 0xBC74,
+ 54181 - 44032: 0xBC75,
+ 54182 - 44032: 0xBC76,
+ 54183 - 44032: 0xBC77,
+ 54184 - 44032: 0xC6E8,
+ 54185 - 44032: 0xC6E9,
+ 54186 - 44032: 0xBC78,
+ 54187 - 44032: 0xC6EA,
+ 54188 - 44032: 0xBC79,
+ 54189 - 44032: 0xC6EB,
+ 54190 - 44032: 0xBC7A,
+ 54191 - 44032: 0xBC81,
+ 54192 - 44032: 0xBC82,
+ 54193 - 44032: 0xBC83,
+ 54194 - 44032: 0xBC84,
+ 54195 - 44032: 0xBC85,
+ 54196 - 44032: 0xC6EC,
+ 54197 - 44032: 0xBC86,
+ 54198 - 44032: 0xBC87,
+ 54199 - 44032: 0xBC88,
+ 54200 - 44032: 0xC6ED,
+ 54201 - 44032: 0xBC89,
+ 54202 - 44032: 0xBC8A,
+ 54203 - 44032: 0xBC8B,
+ 54204 - 44032: 0xC6EE,
+ 54205 - 44032: 0xBC8C,
+ 54206 - 44032: 0xBC8D,
+ 54207 - 44032: 0xBC8E,
+ 54208 - 44032: 0xBC8F,
+ 54209 - 44032: 0xBC90,
+ 54210 - 44032: 0xBC91,
+ 54211 - 44032: 0xBC92,
+ 54212 - 44032: 0xC6EF,
+ 54213 - 44032: 0xC6F0,
+ 54214 - 44032: 0xBC93,
+ 54215 - 44032: 0xBC94,
+ 54216 - 44032: 0xC6F1,
+ 54217 - 44032: 0xC6F2,
+ 54218 - 44032: 0xBC95,
+ 54219 - 44032: 0xBC96,
+ 54220 - 44032: 0xBC97,
+ 54221 - 44032: 0xBC98,
+ 54222 - 44032: 0xBC99,
+ 54223 - 44032: 0xBC9A,
+ 54224 - 44032: 0xC6F3,
+ 54225 - 44032: 0xBC9B,
+ 54226 - 44032: 0xBC9C,
+ 54227 - 44032: 0xBC9D,
+ 54228 - 44032: 0xBC9E,
+ 54229 - 44032: 0xBC9F,
+ 54230 - 44032: 0xBCA0,
+ 54231 - 44032: 0xBD41,
+ 54232 - 44032: 0xC6F4,
+ 54233 - 44032: 0xBD42,
+ 54234 - 44032: 0xBD43,
+ 54235 - 44032: 0xBD44,
+ 54236 - 44032: 0xBD45,
+ 54237 - 44032: 0xBD46,
+ 54238 - 44032: 0xBD47,
+ 54239 - 44032: 0xBD48,
+ 54240 - 44032: 0xBD49,
+ 54241 - 44032: 0xC6F5,
+ 54242 - 44032: 0xBD4A,
+ 54243 - 44032: 0xC6F6,
+ 54244 - 44032: 0xBD4B,
+ 54245 - 44032: 0xBD4C,
+ 54246 - 44032: 0xBD4D,
+ 54247 - 44032: 0xBD4E,
+ 54248 - 44032: 0xBD4F,
+ 54249 - 44032: 0xBD50,
+ 54250 - 44032: 0xBD51,
+ 54251 - 44032: 0xBD52,
+ 54252 - 44032: 0xC6F7,
+ 54253 - 44032: 0xC6F8,
+ 54254 - 44032: 0xBD53,
+ 54255 - 44032: 0xBD54,
+ 54256 - 44032: 0xC6F9,
+ 54257 - 44032: 0xBD55,
+ 54258 - 44032: 0xBD56,
+ 54259 - 44032: 0xBD57,
+ 54260 - 44032: 0xC6FA,
+ 54261 - 44032: 0xBD58,
+ 54262 - 44032: 0xBD59,
+ 54263 - 44032: 0xBD5A,
+ 54264 - 44032: 0xBD61,
+ 54265 - 44032: 0xBD62,
+ 54266 - 44032: 0xBD63,
+ 54267 - 44032: 0xBD64,
+ 54268 - 44032: 0xC6FB,
+ 54269 - 44032: 0xC6FC,
+ 54270 - 44032: 0xBD65,
+ 54271 - 44032: 0xC6FD,
+ 54272 - 44032: 0xBD66,
+ 54273 - 44032: 0xC6FE,
+ 54274 - 44032: 0xBD67,
+ 54275 - 44032: 0xBD68,
+ 54276 - 44032: 0xBD69,
+ 54277 - 44032: 0xBD6A,
+ 54278 - 44032: 0xBD6B,
+ 54279 - 44032: 0xBD6C,
+ 54280 - 44032: 0xC7A1,
+ 54281 - 44032: 0xBD6D,
+ 54282 - 44032: 0xBD6E,
+ 54283 - 44032: 0xBD6F,
+ 54284 - 44032: 0xBD70,
+ 54285 - 44032: 0xBD71,
+ 54286 - 44032: 0xBD72,
+ 54287 - 44032: 0xBD73,
+ 54288 - 44032: 0xBD74,
+ 54289 - 44032: 0xBD75,
+ 54290 - 44032: 0xBD76,
+ 54291 - 44032: 0xBD77,
+ 54292 - 44032: 0xBD78,
+ 54293 - 44032: 0xBD79,
+ 54294 - 44032: 0xBD7A,
+ 54295 - 44032: 0xBD81,
+ 54296 - 44032: 0xBD82,
+ 54297 - 44032: 0xBD83,
+ 54298 - 44032: 0xBD84,
+ 54299 - 44032: 0xBD85,
+ 54300 - 44032: 0xBD86,
+ 54301 - 44032: 0xC7A2,
+ 54302 - 44032: 0xBD87,
+ 54303 - 44032: 0xBD88,
+ 54304 - 44032: 0xBD89,
+ 54305 - 44032: 0xBD8A,
+ 54306 - 44032: 0xBD8B,
+ 54307 - 44032: 0xBD8C,
+ 54308 - 44032: 0xBD8D,
+ 54309 - 44032: 0xBD8E,
+ 54310 - 44032: 0xBD8F,
+ 54311 - 44032: 0xBD90,
+ 54312 - 44032: 0xBD91,
+ 54313 - 44032: 0xBD92,
+ 54314 - 44032: 0xBD93,
+ 54315 - 44032: 0xBD94,
+ 54316 - 44032: 0xBD95,
+ 54317 - 44032: 0xBD96,
+ 54318 - 44032: 0xBD97,
+ 54319 - 44032: 0xBD98,
+ 54320 - 44032: 0xBD99,
+ 54321 - 44032: 0xBD9A,
+ 54322 - 44032: 0xBD9B,
+ 54323 - 44032: 0xBD9C,
+ 54324 - 44032: 0xBD9D,
+ 54325 - 44032: 0xBD9E,
+ 54326 - 44032: 0xBD9F,
+ 54327 - 44032: 0xBDA0,
+ 54328 - 44032: 0xBE41,
+ 54329 - 44032: 0xBE42,
+ 54330 - 44032: 0xBE43,
+ 54331 - 44032: 0xBE44,
+ 54332 - 44032: 0xBE45,
+ 54333 - 44032: 0xBE46,
+ 54334 - 44032: 0xBE47,
+ 54335 - 44032: 0xBE48,
+ 54336 - 44032: 0xC7A3,
+ 54337 - 44032: 0xBE49,
+ 54338 - 44032: 0xBE4A,
+ 54339 - 44032: 0xBE4B,
+ 54340 - 44032: 0xC7A4,
+ 54341 - 44032: 0xBE4C,
+ 54342 - 44032: 0xBE4D,
+ 54343 - 44032: 0xBE4E,
+ 54344 - 44032: 0xBE4F,
+ 54345 - 44032: 0xBE50,
+ 54346 - 44032: 0xBE51,
+ 54347 - 44032: 0xBE52,
+ 54348 - 44032: 0xBE53,
+ 54349 - 44032: 0xBE54,
+ 54350 - 44032: 0xBE55,
+ 54351 - 44032: 0xBE56,
+ 54352 - 44032: 0xBE57,
+ 54353 - 44032: 0xBE58,
+ 54354 - 44032: 0xBE59,
+ 54355 - 44032: 0xBE5A,
+ 54356 - 44032: 0xBE61,
+ 54357 - 44032: 0xBE62,
+ 54358 - 44032: 0xBE63,
+ 54359 - 44032: 0xBE64,
+ 54360 - 44032: 0xBE65,
+ 54361 - 44032: 0xBE66,
+ 54362 - 44032: 0xBE67,
+ 54363 - 44032: 0xBE68,
+ 54364 - 44032: 0xC7A5,
+ 54365 - 44032: 0xBE69,
+ 54366 - 44032: 0xBE6A,
+ 54367 - 44032: 0xBE6B,
+ 54368 - 44032: 0xC7A6,
+ 54369 - 44032: 0xBE6C,
+ 54370 - 44032: 0xBE6D,
+ 54371 - 44032: 0xBE6E,
+ 54372 - 44032: 0xC7A7,
+ 54373 - 44032: 0xBE6F,
+ 54374 - 44032: 0xBE70,
+ 54375 - 44032: 0xBE71,
+ 54376 - 44032: 0xBE72,
+ 54377 - 44032: 0xBE73,
+ 54378 - 44032: 0xBE74,
+ 54379 - 44032: 0xBE75,
+ 54380 - 44032: 0xBE76,
+ 54381 - 44032: 0xC7A8,
+ 54382 - 44032: 0xBE77,
+ 54383 - 44032: 0xC7A9,
+ 54384 - 44032: 0xBE78,
+ 54385 - 44032: 0xBE79,
+ 54386 - 44032: 0xBE7A,
+ 54387 - 44032: 0xBE81,
+ 54388 - 44032: 0xBE82,
+ 54389 - 44032: 0xBE83,
+ 54390 - 44032: 0xBE84,
+ 54391 - 44032: 0xBE85,
+ 54392 - 44032: 0xC7AA,
+ 54393 - 44032: 0xC7AB,
+ 54394 - 44032: 0xBE86,
+ 54395 - 44032: 0xBE87,
+ 54396 - 44032: 0xC7AC,
+ 54397 - 44032: 0xBE88,
+ 54398 - 44032: 0xBE89,
+ 54399 - 44032: 0xC7AD,
+ 54400 - 44032: 0xC7AE,
+ 54401 - 44032: 0xBE8A,
+ 54402 - 44032: 0xC7AF,
+ 54403 - 44032: 0xBE8B,
+ 54404 - 44032: 0xBE8C,
+ 54405 - 44032: 0xBE8D,
+ 54406 - 44032: 0xBE8E,
+ 54407 - 44032: 0xBE8F,
+ 54408 - 44032: 0xC7B0,
+ 54409 - 44032: 0xC7B1,
+ 54410 - 44032: 0xBE90,
+ 54411 - 44032: 0xC7B2,
+ 54412 - 44032: 0xBE91,
+ 54413 - 44032: 0xC7B3,
+ 54414 - 44032: 0xBE92,
+ 54415 - 44032: 0xBE93,
+ 54416 - 44032: 0xBE94,
+ 54417 - 44032: 0xBE95,
+ 54418 - 44032: 0xBE96,
+ 54419 - 44032: 0xBE97,
+ 54420 - 44032: 0xC7B4,
+ 54421 - 44032: 0xBE98,
+ 54422 - 44032: 0xBE99,
+ 54423 - 44032: 0xBE9A,
+ 54424 - 44032: 0xBE9B,
+ 54425 - 44032: 0xBE9C,
+ 54426 - 44032: 0xBE9D,
+ 54427 - 44032: 0xBE9E,
+ 54428 - 44032: 0xBE9F,
+ 54429 - 44032: 0xBEA0,
+ 54430 - 44032: 0xBF41,
+ 54431 - 44032: 0xBF42,
+ 54432 - 44032: 0xBF43,
+ 54433 - 44032: 0xBF44,
+ 54434 - 44032: 0xBF45,
+ 54435 - 44032: 0xBF46,
+ 54436 - 44032: 0xBF47,
+ 54437 - 44032: 0xBF48,
+ 54438 - 44032: 0xBF49,
+ 54439 - 44032: 0xBF4A,
+ 54440 - 44032: 0xBF4B,
+ 54441 - 44032: 0xC7B5,
+ 54442 - 44032: 0xBF4C,
+ 54443 - 44032: 0xBF4D,
+ 54444 - 44032: 0xBF4E,
+ 54445 - 44032: 0xBF4F,
+ 54446 - 44032: 0xBF50,
+ 54447 - 44032: 0xBF51,
+ 54448 - 44032: 0xBF52,
+ 54449 - 44032: 0xBF53,
+ 54450 - 44032: 0xBF54,
+ 54451 - 44032: 0xBF55,
+ 54452 - 44032: 0xBF56,
+ 54453 - 44032: 0xBF57,
+ 54454 - 44032: 0xBF58,
+ 54455 - 44032: 0xBF59,
+ 54456 - 44032: 0xBF5A,
+ 54457 - 44032: 0xBF61,
+ 54458 - 44032: 0xBF62,
+ 54459 - 44032: 0xBF63,
+ 54460 - 44032: 0xBF64,
+ 54461 - 44032: 0xBF65,
+ 54462 - 44032: 0xBF66,
+ 54463 - 44032: 0xBF67,
+ 54464 - 44032: 0xBF68,
+ 54465 - 44032: 0xBF69,
+ 54466 - 44032: 0xBF6A,
+ 54467 - 44032: 0xBF6B,
+ 54468 - 44032: 0xBF6C,
+ 54469 - 44032: 0xBF6D,
+ 54470 - 44032: 0xBF6E,
+ 54471 - 44032: 0xBF6F,
+ 54472 - 44032: 0xBF70,
+ 54473 - 44032: 0xBF71,
+ 54474 - 44032: 0xBF72,
+ 54475 - 44032: 0xBF73,
+ 54476 - 44032: 0xC7B6,
+ 54477 - 44032: 0xBF74,
+ 54478 - 44032: 0xBF75,
+ 54479 - 44032: 0xBF76,
+ 54480 - 44032: 0xC7B7,
+ 54481 - 44032: 0xBF77,
+ 54482 - 44032: 0xBF78,
+ 54483 - 44032: 0xBF79,
+ 54484 - 44032: 0xC7B8,
+ 54485 - 44032: 0xBF7A,
+ 54486 - 44032: 0xBF81,
+ 54487 - 44032: 0xBF82,
+ 54488 - 44032: 0xBF83,
+ 54489 - 44032: 0xBF84,
+ 54490 - 44032: 0xBF85,
+ 54491 - 44032: 0xBF86,
+ 54492 - 44032: 0xC7B9,
+ 54493 - 44032: 0xBF87,
+ 54494 - 44032: 0xBF88,
+ 54495 - 44032: 0xC7BA,
+ 54496 - 44032: 0xBF89,
+ 54497 - 44032: 0xBF8A,
+ 54498 - 44032: 0xBF8B,
+ 54499 - 44032: 0xBF8C,
+ 54500 - 44032: 0xBF8D,
+ 54501 - 44032: 0xBF8E,
+ 54502 - 44032: 0xBF8F,
+ 54503 - 44032: 0xBF90,
+ 54504 - 44032: 0xC7BB,
+ 54505 - 44032: 0xBF91,
+ 54506 - 44032: 0xBF92,
+ 54507 - 44032: 0xBF93,
+ 54508 - 44032: 0xC7BC,
+ 54509 - 44032: 0xBF94,
+ 54510 - 44032: 0xBF95,
+ 54511 - 44032: 0xBF96,
+ 54512 - 44032: 0xC7BD,
+ 54513 - 44032: 0xBF97,
+ 54514 - 44032: 0xBF98,
+ 54515 - 44032: 0xBF99,
+ 54516 - 44032: 0xBF9A,
+ 54517 - 44032: 0xBF9B,
+ 54518 - 44032: 0xBF9C,
+ 54519 - 44032: 0xBF9D,
+ 54520 - 44032: 0xC7BE,
+ 54521 - 44032: 0xBF9E,
+ 54522 - 44032: 0xBF9F,
+ 54523 - 44032: 0xC7BF,
+ 54524 - 44032: 0xBFA0,
+ 54525 - 44032: 0xC7C0,
+ 54526 - 44032: 0xC041,
+ 54527 - 44032: 0xC042,
+ 54528 - 44032: 0xC043,
+ 54529 - 44032: 0xC044,
+ 54530 - 44032: 0xC045,
+ 54531 - 44032: 0xC046,
+ 54532 - 44032: 0xC7C1,
+ 54533 - 44032: 0xC047,
+ 54534 - 44032: 0xC048,
+ 54535 - 44032: 0xC049,
+ 54536 - 44032: 0xC7C2,
+ 54537 - 44032: 0xC04A,
+ 54538 - 44032: 0xC04B,
+ 54539 - 44032: 0xC04C,
+ 54540 - 44032: 0xC7C3,
+ 54541 - 44032: 0xC04D,
+ 54542 - 44032: 0xC04E,
+ 54543 - 44032: 0xC04F,
+ 54544 - 44032: 0xC050,
+ 54545 - 44032: 0xC051,
+ 54546 - 44032: 0xC052,
+ 54547 - 44032: 0xC053,
+ 54548 - 44032: 0xC7C4,
+ 54549 - 44032: 0xC7C5,
+ 54550 - 44032: 0xC054,
+ 54551 - 44032: 0xC7C6,
+ 54552 - 44032: 0xC055,
+ 54553 - 44032: 0xC056,
+ 54554 - 44032: 0xC057,
+ 54555 - 44032: 0xC058,
+ 54556 - 44032: 0xC059,
+ 54557 - 44032: 0xC05A,
+ 54558 - 44032: 0xC061,
+ 54559 - 44032: 0xC062,
+ 54560 - 44032: 0xC063,
+ 54561 - 44032: 0xC064,
+ 54562 - 44032: 0xC065,
+ 54563 - 44032: 0xC066,
+ 54564 - 44032: 0xC067,
+ 54565 - 44032: 0xC068,
+ 54566 - 44032: 0xC069,
+ 54567 - 44032: 0xC06A,
+ 54568 - 44032: 0xC06B,
+ 54569 - 44032: 0xC06C,
+ 54570 - 44032: 0xC06D,
+ 54571 - 44032: 0xC06E,
+ 54572 - 44032: 0xC06F,
+ 54573 - 44032: 0xC070,
+ 54574 - 44032: 0xC071,
+ 54575 - 44032: 0xC072,
+ 54576 - 44032: 0xC073,
+ 54577 - 44032: 0xC074,
+ 54578 - 44032: 0xC075,
+ 54579 - 44032: 0xC076,
+ 54580 - 44032: 0xC077,
+ 54581 - 44032: 0xC078,
+ 54582 - 44032: 0xC079,
+ 54583 - 44032: 0xC07A,
+ 54584 - 44032: 0xC081,
+ 54585 - 44032: 0xC082,
+ 54586 - 44032: 0xC083,
+ 54587 - 44032: 0xC084,
+ 54588 - 44032: 0xC7C7,
+ 54589 - 44032: 0xC7C8,
+ 54590 - 44032: 0xC085,
+ 54591 - 44032: 0xC086,
+ 54592 - 44032: 0xC7C9,
+ 54593 - 44032: 0xC087,
+ 54594 - 44032: 0xC088,
+ 54595 - 44032: 0xC089,
+ 54596 - 44032: 0xC7CA,
+ 54597 - 44032: 0xC08A,
+ 54598 - 44032: 0xC08B,
+ 54599 - 44032: 0xC08C,
+ 54600 - 44032: 0xC08D,
+ 54601 - 44032: 0xC08E,
+ 54602 - 44032: 0xC08F,
+ 54603 - 44032: 0xC090,
+ 54604 - 44032: 0xC7CB,
+ 54605 - 44032: 0xC7CC,
+ 54606 - 44032: 0xC091,
+ 54607 - 44032: 0xC7CD,
+ 54608 - 44032: 0xC092,
+ 54609 - 44032: 0xC7CE,
+ 54610 - 44032: 0xC093,
+ 54611 - 44032: 0xC094,
+ 54612 - 44032: 0xC095,
+ 54613 - 44032: 0xC096,
+ 54614 - 44032: 0xC097,
+ 54615 - 44032: 0xC098,
+ 54616 - 44032: 0xC7CF,
+ 54617 - 44032: 0xC7D0,
+ 54618 - 44032: 0xC099,
+ 54619 - 44032: 0xC09A,
+ 54620 - 44032: 0xC7D1,
+ 54621 - 44032: 0xC09B,
+ 54622 - 44032: 0xC09C,
+ 54623 - 44032: 0xC09D,
+ 54624 - 44032: 0xC7D2,
+ 54625 - 44032: 0xC09E,
+ 54626 - 44032: 0xC09F,
+ 54627 - 44032: 0xC0A0,
+ 54628 - 44032: 0xC141,
+ 54629 - 44032: 0xC7D3,
+ 54630 - 44032: 0xC142,
+ 54631 - 44032: 0xC143,
+ 54632 - 44032: 0xC7D4,
+ 54633 - 44032: 0xC7D5,
+ 54634 - 44032: 0xC144,
+ 54635 - 44032: 0xC7D6,
+ 54636 - 44032: 0xC145,
+ 54637 - 44032: 0xC7D7,
+ 54638 - 44032: 0xC146,
+ 54639 - 44032: 0xC147,
+ 54640 - 44032: 0xC148,
+ 54641 - 44032: 0xC149,
+ 54642 - 44032: 0xC14A,
+ 54643 - 44032: 0xC14B,
+ 54644 - 44032: 0xC7D8,
+ 54645 - 44032: 0xC7D9,
+ 54646 - 44032: 0xC14C,
+ 54647 - 44032: 0xC14D,
+ 54648 - 44032: 0xC7DA,
+ 54649 - 44032: 0xC14E,
+ 54650 - 44032: 0xC14F,
+ 54651 - 44032: 0xC150,
+ 54652 - 44032: 0xC7DB,
+ 54653 - 44032: 0xC151,
+ 54654 - 44032: 0xC152,
+ 54655 - 44032: 0xC153,
+ 54656 - 44032: 0xC154,
+ 54657 - 44032: 0xC155,
+ 54658 - 44032: 0xC156,
+ 54659 - 44032: 0xC157,
+ 54660 - 44032: 0xC7DC,
+ 54661 - 44032: 0xC7DD,
+ 54662 - 44032: 0xC158,
+ 54663 - 44032: 0xC7DE,
+ 54664 - 44032: 0xC7DF,
+ 54665 - 44032: 0xC7E0,
+ 54666 - 44032: 0xC159,
+ 54667 - 44032: 0xC15A,
+ 54668 - 44032: 0xC161,
+ 54669 - 44032: 0xC162,
+ 54670 - 44032: 0xC163,
+ 54671 - 44032: 0xC164,
+ 54672 - 44032: 0xC7E1,
+ 54673 - 44032: 0xC165,
+ 54674 - 44032: 0xC166,
+ 54675 - 44032: 0xC167,
+ 54676 - 44032: 0xC168,
+ 54677 - 44032: 0xC169,
+ 54678 - 44032: 0xC16A,
+ 54679 - 44032: 0xC16B,
+ 54680 - 44032: 0xC16C,
+ 54681 - 44032: 0xC16D,
+ 54682 - 44032: 0xC16E,
+ 54683 - 44032: 0xC16F,
+ 54684 - 44032: 0xC170,
+ 54685 - 44032: 0xC171,
+ 54686 - 44032: 0xC172,
+ 54687 - 44032: 0xC173,
+ 54688 - 44032: 0xC174,
+ 54689 - 44032: 0xC175,
+ 54690 - 44032: 0xC176,
+ 54691 - 44032: 0xC177,
+ 54692 - 44032: 0xC178,
+ 54693 - 44032: 0xC7E2,
+ 54694 - 44032: 0xC179,
+ 54695 - 44032: 0xC17A,
+ 54696 - 44032: 0xC181,
+ 54697 - 44032: 0xC182,
+ 54698 - 44032: 0xC183,
+ 54699 - 44032: 0xC184,
+ 54700 - 44032: 0xC185,
+ 54701 - 44032: 0xC186,
+ 54702 - 44032: 0xC187,
+ 54703 - 44032: 0xC188,
+ 54704 - 44032: 0xC189,
+ 54705 - 44032: 0xC18A,
+ 54706 - 44032: 0xC18B,
+ 54707 - 44032: 0xC18C,
+ 54708 - 44032: 0xC18D,
+ 54709 - 44032: 0xC18E,
+ 54710 - 44032: 0xC18F,
+ 54711 - 44032: 0xC190,
+ 54712 - 44032: 0xC191,
+ 54713 - 44032: 0xC192,
+ 54714 - 44032: 0xC193,
+ 54715 - 44032: 0xC194,
+ 54716 - 44032: 0xC195,
+ 54717 - 44032: 0xC196,
+ 54718 - 44032: 0xC197,
+ 54719 - 44032: 0xC198,
+ 54720 - 44032: 0xC199,
+ 54721 - 44032: 0xC19A,
+ 54722 - 44032: 0xC19B,
+ 54723 - 44032: 0xC19C,
+ 54724 - 44032: 0xC19D,
+ 54725 - 44032: 0xC19E,
+ 54726 - 44032: 0xC19F,
+ 54727 - 44032: 0xC1A0,
+ 54728 - 44032: 0xC7E3,
+ 54729 - 44032: 0xC7E4,
+ 54730 - 44032: 0xC241,
+ 54731 - 44032: 0xC242,
+ 54732 - 44032: 0xC7E5,
+ 54733 - 44032: 0xC243,
+ 54734 - 44032: 0xC244,
+ 54735 - 44032: 0xC245,
+ 54736 - 44032: 0xC7E6,
+ 54737 - 44032: 0xC246,
+ 54738 - 44032: 0xC7E7,
+ 54739 - 44032: 0xC247,
+ 54740 - 44032: 0xC248,
+ 54741 - 44032: 0xC249,
+ 54742 - 44032: 0xC24A,
+ 54743 - 44032: 0xC24B,
+ 54744 - 44032: 0xC7E8,
+ 54745 - 44032: 0xC7E9,
+ 54746 - 44032: 0xC24C,
+ 54747 - 44032: 0xC7EA,
+ 54748 - 44032: 0xC24D,
+ 54749 - 44032: 0xC7EB,
+ 54750 - 44032: 0xC24E,
+ 54751 - 44032: 0xC24F,
+ 54752 - 44032: 0xC250,
+ 54753 - 44032: 0xC251,
+ 54754 - 44032: 0xC252,
+ 54755 - 44032: 0xC253,
+ 54756 - 44032: 0xC7EC,
+ 54757 - 44032: 0xC7ED,
+ 54758 - 44032: 0xC254,
+ 54759 - 44032: 0xC255,
+ 54760 - 44032: 0xC7EE,
+ 54761 - 44032: 0xC256,
+ 54762 - 44032: 0xC257,
+ 54763 - 44032: 0xC258,
+ 54764 - 44032: 0xC7EF,
+ 54765 - 44032: 0xC259,
+ 54766 - 44032: 0xC25A,
+ 54767 - 44032: 0xC261,
+ 54768 - 44032: 0xC262,
+ 54769 - 44032: 0xC263,
+ 54770 - 44032: 0xC264,
+ 54771 - 44032: 0xC265,
+ 54772 - 44032: 0xC7F0,
+ 54773 - 44032: 0xC7F1,
+ 54774 - 44032: 0xC266,
+ 54775 - 44032: 0xC7F2,
+ 54776 - 44032: 0xC267,
+ 54777 - 44032: 0xC7F3,
+ 54778 - 44032: 0xC268,
+ 54779 - 44032: 0xC269,
+ 54780 - 44032: 0xC26A,
+ 54781 - 44032: 0xC26B,
+ 54782 - 44032: 0xC26C,
+ 54783 - 44032: 0xC26D,
+ 54784 - 44032: 0xC7F4,
+ 54785 - 44032: 0xC7F5,
+ 54786 - 44032: 0xC26E,
+ 54787 - 44032: 0xC26F,
+ 54788 - 44032: 0xC7F6,
+ 54789 - 44032: 0xC270,
+ 54790 - 44032: 0xC271,
+ 54791 - 44032: 0xC272,
+ 54792 - 44032: 0xC7F7,
+ 54793 - 44032: 0xC273,
+ 54794 - 44032: 0xC274,
+ 54795 - 44032: 0xC275,
+ 54796 - 44032: 0xC276,
+ 54797 - 44032: 0xC277,
+ 54798 - 44032: 0xC278,
+ 54799 - 44032: 0xC279,
+ 54800 - 44032: 0xC7F8,
+ 54801 - 44032: 0xC7F9,
+ 54802 - 44032: 0xC27A,
+ 54803 - 44032: 0xC7FA,
+ 54804 - 44032: 0xC7FB,
+ 54805 - 44032: 0xC7FC,
+ 54806 - 44032: 0xC281,
+ 54807 - 44032: 0xC282,
+ 54808 - 44032: 0xC283,
+ 54809 - 44032: 0xC284,
+ 54810 - 44032: 0xC285,
+ 54811 - 44032: 0xC286,
+ 54812 - 44032: 0xC7FD,
+ 54813 - 44032: 0xC287,
+ 54814 - 44032: 0xC288,
+ 54815 - 44032: 0xC289,
+ 54816 - 44032: 0xC7FE,
+ 54817 - 44032: 0xC28A,
+ 54818 - 44032: 0xC28B,
+ 54819 - 44032: 0xC28C,
+ 54820 - 44032: 0xC8A1,
+ 54821 - 44032: 0xC28D,
+ 54822 - 44032: 0xC28E,
+ 54823 - 44032: 0xC28F,
+ 54824 - 44032: 0xC290,
+ 54825 - 44032: 0xC291,
+ 54826 - 44032: 0xC292,
+ 54827 - 44032: 0xC293,
+ 54828 - 44032: 0xC294,
+ 54829 - 44032: 0xC8A2,
+ 54830 - 44032: 0xC295,
+ 54831 - 44032: 0xC296,
+ 54832 - 44032: 0xC297,
+ 54833 - 44032: 0xC298,
+ 54834 - 44032: 0xC299,
+ 54835 - 44032: 0xC29A,
+ 54836 - 44032: 0xC29B,
+ 54837 - 44032: 0xC29C,
+ 54838 - 44032: 0xC29D,
+ 54839 - 44032: 0xC29E,
+ 54840 - 44032: 0xC8A3,
+ 54841 - 44032: 0xC8A4,
+ 54842 - 44032: 0xC29F,
+ 54843 - 44032: 0xC2A0,
+ 54844 - 44032: 0xC8A5,
+ 54845 - 44032: 0xC341,
+ 54846 - 44032: 0xC342,
+ 54847 - 44032: 0xC343,
+ 54848 - 44032: 0xC8A6,
+ 54849 - 44032: 0xC344,
+ 54850 - 44032: 0xC345,
+ 54851 - 44032: 0xC346,
+ 54852 - 44032: 0xC347,
+ 54853 - 44032: 0xC8A7,
+ 54854 - 44032: 0xC348,
+ 54855 - 44032: 0xC349,
+ 54856 - 44032: 0xC8A8,
+ 54857 - 44032: 0xC8A9,
+ 54858 - 44032: 0xC34A,
+ 54859 - 44032: 0xC8AA,
+ 54860 - 44032: 0xC34B,
+ 54861 - 44032: 0xC8AB,
+ 54862 - 44032: 0xC34C,
+ 54863 - 44032: 0xC34D,
+ 54864 - 44032: 0xC34E,
+ 54865 - 44032: 0xC8AC,
+ 54866 - 44032: 0xC34F,
+ 54867 - 44032: 0xC350,
+ 54868 - 44032: 0xC8AD,
+ 54869 - 44032: 0xC8AE,
+ 54870 - 44032: 0xC351,
+ 54871 - 44032: 0xC352,
+ 54872 - 44032: 0xC8AF,
+ 54873 - 44032: 0xC353,
+ 54874 - 44032: 0xC354,
+ 54875 - 44032: 0xC355,
+ 54876 - 44032: 0xC8B0,
+ 54877 - 44032: 0xC356,
+ 54878 - 44032: 0xC357,
+ 54879 - 44032: 0xC358,
+ 54880 - 44032: 0xC359,
+ 54881 - 44032: 0xC35A,
+ 54882 - 44032: 0xC361,
+ 54883 - 44032: 0xC362,
+ 54884 - 44032: 0xC363,
+ 54885 - 44032: 0xC364,
+ 54886 - 44032: 0xC365,
+ 54887 - 44032: 0xC8B1,
+ 54888 - 44032: 0xC366,
+ 54889 - 44032: 0xC8B2,
+ 54890 - 44032: 0xC367,
+ 54891 - 44032: 0xC368,
+ 54892 - 44032: 0xC369,
+ 54893 - 44032: 0xC36A,
+ 54894 - 44032: 0xC36B,
+ 54895 - 44032: 0xC36C,
+ 54896 - 44032: 0xC8B3,
+ 54897 - 44032: 0xC8B4,
+ 54898 - 44032: 0xC36D,
+ 54899 - 44032: 0xC36E,
+ 54900 - 44032: 0xC8B5,
+ 54901 - 44032: 0xC36F,
+ 54902 - 44032: 0xC370,
+ 54903 - 44032: 0xC371,
+ 54904 - 44032: 0xC372,
+ 54905 - 44032: 0xC373,
+ 54906 - 44032: 0xC374,
+ 54907 - 44032: 0xC375,
+ 54908 - 44032: 0xC376,
+ 54909 - 44032: 0xC377,
+ 54910 - 44032: 0xC378,
+ 54911 - 44032: 0xC379,
+ 54912 - 44032: 0xC37A,
+ 54913 - 44032: 0xC381,
+ 54914 - 44032: 0xC382,
+ 54915 - 44032: 0xC8B6,
+ 54916 - 44032: 0xC383,
+ 54917 - 44032: 0xC8B7,
+ 54918 - 44032: 0xC384,
+ 54919 - 44032: 0xC385,
+ 54920 - 44032: 0xC386,
+ 54921 - 44032: 0xC387,
+ 54922 - 44032: 0xC388,
+ 54923 - 44032: 0xC389,
+ 54924 - 44032: 0xC8B8,
+ 54925 - 44032: 0xC8B9,
+ 54926 - 44032: 0xC38A,
+ 54927 - 44032: 0xC38B,
+ 54928 - 44032: 0xC8BA,
+ 54929 - 44032: 0xC38C,
+ 54930 - 44032: 0xC38D,
+ 54931 - 44032: 0xC38E,
+ 54932 - 44032: 0xC8BB,
+ 54933 - 44032: 0xC38F,
+ 54934 - 44032: 0xC390,
+ 54935 - 44032: 0xC391,
+ 54936 - 44032: 0xC392,
+ 54937 - 44032: 0xC393,
+ 54938 - 44032: 0xC394,
+ 54939 - 44032: 0xC395,
+ 54940 - 44032: 0xC396,
+ 54941 - 44032: 0xC8BC,
+ 54942 - 44032: 0xC397,
+ 54943 - 44032: 0xC8BD,
+ 54944 - 44032: 0xC398,
+ 54945 - 44032: 0xC8BE,
+ 54946 - 44032: 0xC399,
+ 54947 - 44032: 0xC39A,
+ 54948 - 44032: 0xC39B,
+ 54949 - 44032: 0xC39C,
+ 54950 - 44032: 0xC39D,
+ 54951 - 44032: 0xC39E,
+ 54952 - 44032: 0xC8BF,
+ 54953 - 44032: 0xC39F,
+ 54954 - 44032: 0xC3A0,
+ 54955 - 44032: 0xC441,
+ 54956 - 44032: 0xC8C0,
+ 54957 - 44032: 0xC442,
+ 54958 - 44032: 0xC443,
+ 54959 - 44032: 0xC444,
+ 54960 - 44032: 0xC8C1,
+ 54961 - 44032: 0xC445,
+ 54962 - 44032: 0xC446,
+ 54963 - 44032: 0xC447,
+ 54964 - 44032: 0xC448,
+ 54965 - 44032: 0xC449,
+ 54966 - 44032: 0xC44A,
+ 54967 - 44032: 0xC44B,
+ 54968 - 44032: 0xC44C,
+ 54969 - 44032: 0xC8C2,
+ 54970 - 44032: 0xC44D,
+ 54971 - 44032: 0xC8C3,
+ 54972 - 44032: 0xC44E,
+ 54973 - 44032: 0xC44F,
+ 54974 - 44032: 0xC450,
+ 54975 - 44032: 0xC451,
+ 54976 - 44032: 0xC452,
+ 54977 - 44032: 0xC453,
+ 54978 - 44032: 0xC454,
+ 54979 - 44032: 0xC455,
+ 54980 - 44032: 0xC8C4,
+ 54981 - 44032: 0xC8C5,
+ 54982 - 44032: 0xC456,
+ 54983 - 44032: 0xC457,
+ 54984 - 44032: 0xC8C6,
+ 54985 - 44032: 0xC458,
+ 54986 - 44032: 0xC459,
+ 54987 - 44032: 0xC45A,
+ 54988 - 44032: 0xC8C7,
+ 54989 - 44032: 0xC461,
+ 54990 - 44032: 0xC462,
+ 54991 - 44032: 0xC463,
+ 54992 - 44032: 0xC464,
+ 54993 - 44032: 0xC8C8,
+ 54994 - 44032: 0xC465,
+ 54995 - 44032: 0xC466,
+ 54996 - 44032: 0xC8C9,
+ 54997 - 44032: 0xC467,
+ 54998 - 44032: 0xC468,
+ 54999 - 44032: 0xC8CA,
+ 55000 - 44032: 0xC469,
+ 55001 - 44032: 0xC8CB,
+ 55002 - 44032: 0xC46A,
+ 55003 - 44032: 0xC46B,
+ 55004 - 44032: 0xC46C,
+ 55005 - 44032: 0xC46D,
+ 55006 - 44032: 0xC46E,
+ 55007 - 44032: 0xC46F,
+ 55008 - 44032: 0xC8CC,
+ 55009 - 44032: 0xC470,
+ 55010 - 44032: 0xC471,
+ 55011 - 44032: 0xC472,
+ 55012 - 44032: 0xC8CD,
+ 55013 - 44032: 0xC473,
+ 55014 - 44032: 0xC474,
+ 55015 - 44032: 0xC475,
+ 55016 - 44032: 0xC8CE,
+ 55017 - 44032: 0xC476,
+ 55018 - 44032: 0xC477,
+ 55019 - 44032: 0xC478,
+ 55020 - 44032: 0xC479,
+ 55021 - 44032: 0xC47A,
+ 55022 - 44032: 0xC481,
+ 55023 - 44032: 0xC482,
+ 55024 - 44032: 0xC8CF,
+ 55025 - 44032: 0xC483,
+ 55026 - 44032: 0xC484,
+ 55027 - 44032: 0xC485,
+ 55028 - 44032: 0xC486,
+ 55029 - 44032: 0xC8D0,
+ 55030 - 44032: 0xC487,
+ 55031 - 44032: 0xC488,
+ 55032 - 44032: 0xC489,
+ 55033 - 44032: 0xC48A,
+ 55034 - 44032: 0xC48B,
+ 55035 - 44032: 0xC48C,
+ 55036 - 44032: 0xC8D1,
+ 55037 - 44032: 0xC8D2,
+ 55038 - 44032: 0xC48D,
+ 55039 - 44032: 0xC48E,
+ 55040 - 44032: 0xC8D3,
+ 55041 - 44032: 0xC48F,
+ 55042 - 44032: 0xC490,
+ 55043 - 44032: 0xC491,
+ 55044 - 44032: 0xC8D4,
+ 55045 - 44032: 0xC492,
+ 55046 - 44032: 0xC493,
+ 55047 - 44032: 0xC494,
+ 55048 - 44032: 0xC495,
+ 55049 - 44032: 0xC496,
+ 55050 - 44032: 0xC497,
+ 55051 - 44032: 0xC498,
+ 55052 - 44032: 0xC499,
+ 55053 - 44032: 0xC49A,
+ 55054 - 44032: 0xC49B,
+ 55055 - 44032: 0xC49C,
+ 55056 - 44032: 0xC49D,
+ 55057 - 44032: 0xC8D5,
+ 55058 - 44032: 0xC49E,
+ 55059 - 44032: 0xC49F,
+ 55060 - 44032: 0xC4A0,
+ 55061 - 44032: 0xC541,
+ 55062 - 44032: 0xC542,
+ 55063 - 44032: 0xC543,
+ 55064 - 44032: 0xC8D6,
+ 55065 - 44032: 0xC8D7,
+ 55066 - 44032: 0xC544,
+ 55067 - 44032: 0xC545,
+ 55068 - 44032: 0xC8D8,
+ 55069 - 44032: 0xC546,
+ 55070 - 44032: 0xC547,
+ 55071 - 44032: 0xC548,
+ 55072 - 44032: 0xC8D9,
+ 55073 - 44032: 0xC549,
+ 55074 - 44032: 0xC54A,
+ 55075 - 44032: 0xC54B,
+ 55076 - 44032: 0xC54C,
+ 55077 - 44032: 0xC54D,
+ 55078 - 44032: 0xC54E,
+ 55079 - 44032: 0xC54F,
+ 55080 - 44032: 0xC8DA,
+ 55081 - 44032: 0xC8DB,
+ 55082 - 44032: 0xC550,
+ 55083 - 44032: 0xC8DC,
+ 55084 - 44032: 0xC551,
+ 55085 - 44032: 0xC8DD,
+ 55086 - 44032: 0xC552,
+ 55087 - 44032: 0xC553,
+ 55088 - 44032: 0xC554,
+ 55089 - 44032: 0xC555,
+ 55090 - 44032: 0xC556,
+ 55091 - 44032: 0xC557,
+ 55092 - 44032: 0xC8DE,
+ 55093 - 44032: 0xC8DF,
+ 55094 - 44032: 0xC558,
+ 55095 - 44032: 0xC559,
+ 55096 - 44032: 0xC8E0,
+ 55097 - 44032: 0xC55A,
+ 55098 - 44032: 0xC561,
+ 55099 - 44032: 0xC562,
+ 55100 - 44032: 0xC8E1,
+ 55101 - 44032: 0xC563,
+ 55102 - 44032: 0xC564,
+ 55103 - 44032: 0xC565,
+ 55104 - 44032: 0xC566,
+ 55105 - 44032: 0xC567,
+ 55106 - 44032: 0xC568,
+ 55107 - 44032: 0xC569,
+ 55108 - 44032: 0xC8E2,
+ 55109 - 44032: 0xC56A,
+ 55110 - 44032: 0xC56B,
+ 55111 - 44032: 0xC8E3,
+ 55112 - 44032: 0xC56C,
+ 55113 - 44032: 0xC8E4,
+ 55114 - 44032: 0xC56D,
+ 55115 - 44032: 0xC56E,
+ 55116 - 44032: 0xC56F,
+ 55117 - 44032: 0xC570,
+ 55118 - 44032: 0xC571,
+ 55119 - 44032: 0xC572,
+ 55120 - 44032: 0xC8E5,
+ 55121 - 44032: 0xC8E6,
+ 55122 - 44032: 0xC573,
+ 55123 - 44032: 0xC574,
+ 55124 - 44032: 0xC8E7,
+ 55125 - 44032: 0xC575,
+ 55126 - 44032: 0xC8E8,
+ 55127 - 44032: 0xC8E9,
+ 55128 - 44032: 0xC8EA,
+ 55129 - 44032: 0xC8EB,
+ 55130 - 44032: 0xC576,
+ 55131 - 44032: 0xC577,
+ 55132 - 44032: 0xC578,
+ 55133 - 44032: 0xC579,
+ 55134 - 44032: 0xC57A,
+ 55135 - 44032: 0xC581,
+ 55136 - 44032: 0xC8EC,
+ 55137 - 44032: 0xC8ED,
+ 55138 - 44032: 0xC582,
+ 55139 - 44032: 0xC8EE,
+ 55140 - 44032: 0xC583,
+ 55141 - 44032: 0xC8EF,
+ 55142 - 44032: 0xC584,
+ 55143 - 44032: 0xC585,
+ 55144 - 44032: 0xC586,
+ 55145 - 44032: 0xC8F0,
+ 55146 - 44032: 0xC587,
+ 55147 - 44032: 0xC588,
+ 55148 - 44032: 0xC8F1,
+ 55149 - 44032: 0xC589,
+ 55150 - 44032: 0xC58A,
+ 55151 - 44032: 0xC58B,
+ 55152 - 44032: 0xC8F2,
+ 55153 - 44032: 0xC58C,
+ 55154 - 44032: 0xC58D,
+ 55155 - 44032: 0xC58E,
+ 55156 - 44032: 0xC8F3,
+ 55157 - 44032: 0xC58F,
+ 55158 - 44032: 0xC590,
+ 55159 - 44032: 0xC591,
+ 55160 - 44032: 0xC592,
+ 55161 - 44032: 0xC593,
+ 55162 - 44032: 0xC594,
+ 55163 - 44032: 0xC595,
+ 55164 - 44032: 0xC8F4,
+ 55165 - 44032: 0xC8F5,
+ 55166 - 44032: 0xC596,
+ 55167 - 44032: 0xC597,
+ 55168 - 44032: 0xC598,
+ 55169 - 44032: 0xC8F6,
+ 55170 - 44032: 0xC599,
+ 55171 - 44032: 0xC59A,
+ 55172 - 44032: 0xC59B,
+ 55173 - 44032: 0xC59C,
+ 55174 - 44032: 0xC59D,
+ 55175 - 44032: 0xC59E,
+ 55176 - 44032: 0xC8F7,
+ 55177 - 44032: 0xC8F8,
+ 55178 - 44032: 0xC59F,
+ 55179 - 44032: 0xC5A0,
+ 55180 - 44032: 0xC8F9,
+ 55181 - 44032: 0xC641,
+ 55182 - 44032: 0xC642,
+ 55183 - 44032: 0xC643,
+ 55184 - 44032: 0xC8FA,
+ 55185 - 44032: 0xC644,
+ 55186 - 44032: 0xC645,
+ 55187 - 44032: 0xC646,
+ 55188 - 44032: 0xC647,
+ 55189 - 44032: 0xC648,
+ 55190 - 44032: 0xC649,
+ 55191 - 44032: 0xC64A,
+ 55192 - 44032: 0xC8FB,
+ 55193 - 44032: 0xC8FC,
+ 55194 - 44032: 0xC64B,
+ 55195 - 44032: 0xC8FD,
+ 55196 - 44032: 0xC64C,
+ 55197 - 44032: 0xC8FE,
+ 55198 - 44032: 0xC64D,
+ 55199 - 44032: 0xC64E,
+ 55200 - 44032: 0xC64F,
+ 55201 - 44032: 0xC650,
+ 55202 - 44032: 0xC651,
+ 55203 - 44032: 0xC652,
+}
+
+const encode2Low, encode2High = 8213, 9838
+
+var encode2 = [...]uint16{
+ 8213 - 8213: 0xA1AA,
+ 8216 - 8213: 0xA1AE,
+ 8217 - 8213: 0xA1AF,
+ 8220 - 8213: 0xA1B0,
+ 8221 - 8213: 0xA1B1,
+ 8224 - 8213: 0xA2D3,
+ 8225 - 8213: 0xA2D4,
+ 8229 - 8213: 0xA1A5,
+ 8230 - 8213: 0xA1A6,
+ 8240 - 8213: 0xA2B6,
+ 8242 - 8213: 0xA1C7,
+ 8243 - 8213: 0xA1C8,
+ 8251 - 8213: 0xA1D8,
+ 8308 - 8213: 0xA9F9,
+ 8319 - 8213: 0xA9FA,
+ 8321 - 8213: 0xA9FB,
+ 8322 - 8213: 0xA9FC,
+ 8323 - 8213: 0xA9FD,
+ 8324 - 8213: 0xA9FE,
+ 8364 - 8213: 0xA2E6,
+ 8451 - 8213: 0xA1C9,
+ 8457 - 8213: 0xA2B5,
+ 8467 - 8213: 0xA7A4,
+ 8470 - 8213: 0xA2E0,
+ 8481 - 8213: 0xA2E5,
+ 8482 - 8213: 0xA2E2,
+ 8486 - 8213: 0xA7D9,
+ 8491 - 8213: 0xA1CA,
+ 8531 - 8213: 0xA8F7,
+ 8532 - 8213: 0xA8F8,
+ 8539 - 8213: 0xA8FB,
+ 8540 - 8213: 0xA8FC,
+ 8541 - 8213: 0xA8FD,
+ 8542 - 8213: 0xA8FE,
+ 8544 - 8213: 0xA5B0,
+ 8545 - 8213: 0xA5B1,
+ 8546 - 8213: 0xA5B2,
+ 8547 - 8213: 0xA5B3,
+ 8548 - 8213: 0xA5B4,
+ 8549 - 8213: 0xA5B5,
+ 8550 - 8213: 0xA5B6,
+ 8551 - 8213: 0xA5B7,
+ 8552 - 8213: 0xA5B8,
+ 8553 - 8213: 0xA5B9,
+ 8560 - 8213: 0xA5A1,
+ 8561 - 8213: 0xA5A2,
+ 8562 - 8213: 0xA5A3,
+ 8563 - 8213: 0xA5A4,
+ 8564 - 8213: 0xA5A5,
+ 8565 - 8213: 0xA5A6,
+ 8566 - 8213: 0xA5A7,
+ 8567 - 8213: 0xA5A8,
+ 8568 - 8213: 0xA5A9,
+ 8569 - 8213: 0xA5AA,
+ 8592 - 8213: 0xA1E7,
+ 8593 - 8213: 0xA1E8,
+ 8594 - 8213: 0xA1E6,
+ 8595 - 8213: 0xA1E9,
+ 8596 - 8213: 0xA1EA,
+ 8597 - 8213: 0xA2D5,
+ 8598 - 8213: 0xA2D8,
+ 8599 - 8213: 0xA2D6,
+ 8600 - 8213: 0xA2D9,
+ 8601 - 8213: 0xA2D7,
+ 8658 - 8213: 0xA2A1,
+ 8660 - 8213: 0xA2A2,
+ 8704 - 8213: 0xA2A3,
+ 8706 - 8213: 0xA1D3,
+ 8707 - 8213: 0xA2A4,
+ 8711 - 8213: 0xA1D4,
+ 8712 - 8213: 0xA1F4,
+ 8715 - 8213: 0xA1F5,
+ 8719 - 8213: 0xA2B3,
+ 8721 - 8213: 0xA2B2,
+ 8730 - 8213: 0xA1EE,
+ 8733 - 8213: 0xA1F0,
+ 8734 - 8213: 0xA1C4,
+ 8736 - 8213: 0xA1D0,
+ 8741 - 8213: 0xA1AB,
+ 8743 - 8213: 0xA1FC,
+ 8744 - 8213: 0xA1FD,
+ 8745 - 8213: 0xA1FB,
+ 8746 - 8213: 0xA1FA,
+ 8747 - 8213: 0xA1F2,
+ 8748 - 8213: 0xA1F3,
+ 8750 - 8213: 0xA2B1,
+ 8756 - 8213: 0xA1C5,
+ 8757 - 8213: 0xA1F1,
+ 8764 - 8213: 0xA1AD,
+ 8765 - 8213: 0xA1EF,
+ 8786 - 8213: 0xA1D6,
+ 8800 - 8213: 0xA1C1,
+ 8801 - 8213: 0xA1D5,
+ 8804 - 8213: 0xA1C2,
+ 8805 - 8213: 0xA1C3,
+ 8810 - 8213: 0xA1EC,
+ 8811 - 8213: 0xA1ED,
+ 8834 - 8213: 0xA1F8,
+ 8835 - 8213: 0xA1F9,
+ 8838 - 8213: 0xA1F6,
+ 8839 - 8213: 0xA1F7,
+ 8857 - 8213: 0xA2C1,
+ 8869 - 8213: 0xA1D1,
+ 8978 - 8213: 0xA1D2,
+ 9312 - 8213: 0xA8E7,
+ 9313 - 8213: 0xA8E8,
+ 9314 - 8213: 0xA8E9,
+ 9315 - 8213: 0xA8EA,
+ 9316 - 8213: 0xA8EB,
+ 9317 - 8213: 0xA8EC,
+ 9318 - 8213: 0xA8ED,
+ 9319 - 8213: 0xA8EE,
+ 9320 - 8213: 0xA8EF,
+ 9321 - 8213: 0xA8F0,
+ 9322 - 8213: 0xA8F1,
+ 9323 - 8213: 0xA8F2,
+ 9324 - 8213: 0xA8F3,
+ 9325 - 8213: 0xA8F4,
+ 9326 - 8213: 0xA8F5,
+ 9332 - 8213: 0xA9E7,
+ 9333 - 8213: 0xA9E8,
+ 9334 - 8213: 0xA9E9,
+ 9335 - 8213: 0xA9EA,
+ 9336 - 8213: 0xA9EB,
+ 9337 - 8213: 0xA9EC,
+ 9338 - 8213: 0xA9ED,
+ 9339 - 8213: 0xA9EE,
+ 9340 - 8213: 0xA9EF,
+ 9341 - 8213: 0xA9F0,
+ 9342 - 8213: 0xA9F1,
+ 9343 - 8213: 0xA9F2,
+ 9344 - 8213: 0xA9F3,
+ 9345 - 8213: 0xA9F4,
+ 9346 - 8213: 0xA9F5,
+ 9372 - 8213: 0xA9CD,
+ 9373 - 8213: 0xA9CE,
+ 9374 - 8213: 0xA9CF,
+ 9375 - 8213: 0xA9D0,
+ 9376 - 8213: 0xA9D1,
+ 9377 - 8213: 0xA9D2,
+ 9378 - 8213: 0xA9D3,
+ 9379 - 8213: 0xA9D4,
+ 9380 - 8213: 0xA9D5,
+ 9381 - 8213: 0xA9D6,
+ 9382 - 8213: 0xA9D7,
+ 9383 - 8213: 0xA9D8,
+ 9384 - 8213: 0xA9D9,
+ 9385 - 8213: 0xA9DA,
+ 9386 - 8213: 0xA9DB,
+ 9387 - 8213: 0xA9DC,
+ 9388 - 8213: 0xA9DD,
+ 9389 - 8213: 0xA9DE,
+ 9390 - 8213: 0xA9DF,
+ 9391 - 8213: 0xA9E0,
+ 9392 - 8213: 0xA9E1,
+ 9393 - 8213: 0xA9E2,
+ 9394 - 8213: 0xA9E3,
+ 9395 - 8213: 0xA9E4,
+ 9396 - 8213: 0xA9E5,
+ 9397 - 8213: 0xA9E6,
+ 9424 - 8213: 0xA8CD,
+ 9425 - 8213: 0xA8CE,
+ 9426 - 8213: 0xA8CF,
+ 9427 - 8213: 0xA8D0,
+ 9428 - 8213: 0xA8D1,
+ 9429 - 8213: 0xA8D2,
+ 9430 - 8213: 0xA8D3,
+ 9431 - 8213: 0xA8D4,
+ 9432 - 8213: 0xA8D5,
+ 9433 - 8213: 0xA8D6,
+ 9434 - 8213: 0xA8D7,
+ 9435 - 8213: 0xA8D8,
+ 9436 - 8213: 0xA8D9,
+ 9437 - 8213: 0xA8DA,
+ 9438 - 8213: 0xA8DB,
+ 9439 - 8213: 0xA8DC,
+ 9440 - 8213: 0xA8DD,
+ 9441 - 8213: 0xA8DE,
+ 9442 - 8213: 0xA8DF,
+ 9443 - 8213: 0xA8E0,
+ 9444 - 8213: 0xA8E1,
+ 9445 - 8213: 0xA8E2,
+ 9446 - 8213: 0xA8E3,
+ 9447 - 8213: 0xA8E4,
+ 9448 - 8213: 0xA8E5,
+ 9449 - 8213: 0xA8E6,
+ 9472 - 8213: 0xA6A1,
+ 9473 - 8213: 0xA6AC,
+ 9474 - 8213: 0xA6A2,
+ 9475 - 8213: 0xA6AD,
+ 9484 - 8213: 0xA6A3,
+ 9485 - 8213: 0xA6C8,
+ 9486 - 8213: 0xA6C7,
+ 9487 - 8213: 0xA6AE,
+ 9488 - 8213: 0xA6A4,
+ 9489 - 8213: 0xA6C2,
+ 9490 - 8213: 0xA6C1,
+ 9491 - 8213: 0xA6AF,
+ 9492 - 8213: 0xA6A6,
+ 9493 - 8213: 0xA6C6,
+ 9494 - 8213: 0xA6C5,
+ 9495 - 8213: 0xA6B1,
+ 9496 - 8213: 0xA6A5,
+ 9497 - 8213: 0xA6C4,
+ 9498 - 8213: 0xA6C3,
+ 9499 - 8213: 0xA6B0,
+ 9500 - 8213: 0xA6A7,
+ 9501 - 8213: 0xA6BC,
+ 9502 - 8213: 0xA6C9,
+ 9503 - 8213: 0xA6CA,
+ 9504 - 8213: 0xA6B7,
+ 9505 - 8213: 0xA6CB,
+ 9506 - 8213: 0xA6CC,
+ 9507 - 8213: 0xA6B2,
+ 9508 - 8213: 0xA6A9,
+ 9509 - 8213: 0xA6BE,
+ 9510 - 8213: 0xA6CD,
+ 9511 - 8213: 0xA6CE,
+ 9512 - 8213: 0xA6B9,
+ 9513 - 8213: 0xA6CF,
+ 9514 - 8213: 0xA6D0,
+ 9515 - 8213: 0xA6B4,
+ 9516 - 8213: 0xA6A8,
+ 9517 - 8213: 0xA6D1,
+ 9518 - 8213: 0xA6D2,
+ 9519 - 8213: 0xA6B8,
+ 9520 - 8213: 0xA6BD,
+ 9521 - 8213: 0xA6D3,
+ 9522 - 8213: 0xA6D4,
+ 9523 - 8213: 0xA6B3,
+ 9524 - 8213: 0xA6AA,
+ 9525 - 8213: 0xA6D5,
+ 9526 - 8213: 0xA6D6,
+ 9527 - 8213: 0xA6BA,
+ 9528 - 8213: 0xA6BF,
+ 9529 - 8213: 0xA6D7,
+ 9530 - 8213: 0xA6D8,
+ 9531 - 8213: 0xA6B5,
+ 9532 - 8213: 0xA6AB,
+ 9533 - 8213: 0xA6D9,
+ 9534 - 8213: 0xA6DA,
+ 9535 - 8213: 0xA6BB,
+ 9536 - 8213: 0xA6DB,
+ 9537 - 8213: 0xA6DC,
+ 9538 - 8213: 0xA6C0,
+ 9539 - 8213: 0xA6DD,
+ 9540 - 8213: 0xA6DE,
+ 9541 - 8213: 0xA6DF,
+ 9542 - 8213: 0xA6E0,
+ 9543 - 8213: 0xA6E1,
+ 9544 - 8213: 0xA6E2,
+ 9545 - 8213: 0xA6E3,
+ 9546 - 8213: 0xA6E4,
+ 9547 - 8213: 0xA6B6,
+ 9618 - 8213: 0xA2C6,
+ 9632 - 8213: 0xA1E1,
+ 9633 - 8213: 0xA1E0,
+ 9635 - 8213: 0xA2C3,
+ 9636 - 8213: 0xA2C7,
+ 9637 - 8213: 0xA2C8,
+ 9638 - 8213: 0xA2CB,
+ 9639 - 8213: 0xA2CA,
+ 9640 - 8213: 0xA2C9,
+ 9641 - 8213: 0xA2CC,
+ 9650 - 8213: 0xA1E3,
+ 9651 - 8213: 0xA1E2,
+ 9654 - 8213: 0xA2BA,
+ 9655 - 8213: 0xA2B9,
+ 9660 - 8213: 0xA1E5,
+ 9661 - 8213: 0xA1E4,
+ 9664 - 8213: 0xA2B8,
+ 9665 - 8213: 0xA2B7,
+ 9670 - 8213: 0xA1DF,
+ 9671 - 8213: 0xA1DE,
+ 9672 - 8213: 0xA2C2,
+ 9675 - 8213: 0xA1DB,
+ 9678 - 8213: 0xA1DD,
+ 9679 - 8213: 0xA1DC,
+ 9680 - 8213: 0xA2C4,
+ 9681 - 8213: 0xA2C5,
+ 9733 - 8213: 0xA1DA,
+ 9734 - 8213: 0xA1D9,
+ 9742 - 8213: 0xA2CF,
+ 9743 - 8213: 0xA2CE,
+ 9756 - 8213: 0xA2D0,
+ 9758 - 8213: 0xA2D1,
+ 9792 - 8213: 0xA1CF,
+ 9794 - 8213: 0xA1CE,
+ 9824 - 8213: 0xA2BC,
+ 9825 - 8213: 0xA2BD,
+ 9827 - 8213: 0xA2C0,
+ 9828 - 8213: 0xA2BB,
+ 9829 - 8213: 0xA2BE,
+ 9831 - 8213: 0xA2BF,
+ 9832 - 8213: 0xA2CD,
+ 9833 - 8213: 0xA2DB,
+ 9834 - 8213: 0xA2DC,
+ 9836 - 8213: 0xA2DD,
+ 9837 - 8213: 0xA2DA,
+}
+
+const encode3Low, encode3High = 12288, 13278
+
+var encode3 = [...]uint16{
+ 12288 - 12288: 0xA1A1,
+ 12289 - 12288: 0xA1A2,
+ 12290 - 12288: 0xA1A3,
+ 12291 - 12288: 0xA1A8,
+ 12296 - 12288: 0xA1B4,
+ 12297 - 12288: 0xA1B5,
+ 12298 - 12288: 0xA1B6,
+ 12299 - 12288: 0xA1B7,
+ 12300 - 12288: 0xA1B8,
+ 12301 - 12288: 0xA1B9,
+ 12302 - 12288: 0xA1BA,
+ 12303 - 12288: 0xA1BB,
+ 12304 - 12288: 0xA1BC,
+ 12305 - 12288: 0xA1BD,
+ 12307 - 12288: 0xA1EB,
+ 12308 - 12288: 0xA1B2,
+ 12309 - 12288: 0xA1B3,
+ 12353 - 12288: 0xAAA1,
+ 12354 - 12288: 0xAAA2,
+ 12355 - 12288: 0xAAA3,
+ 12356 - 12288: 0xAAA4,
+ 12357 - 12288: 0xAAA5,
+ 12358 - 12288: 0xAAA6,
+ 12359 - 12288: 0xAAA7,
+ 12360 - 12288: 0xAAA8,
+ 12361 - 12288: 0xAAA9,
+ 12362 - 12288: 0xAAAA,
+ 12363 - 12288: 0xAAAB,
+ 12364 - 12288: 0xAAAC,
+ 12365 - 12288: 0xAAAD,
+ 12366 - 12288: 0xAAAE,
+ 12367 - 12288: 0xAAAF,
+ 12368 - 12288: 0xAAB0,
+ 12369 - 12288: 0xAAB1,
+ 12370 - 12288: 0xAAB2,
+ 12371 - 12288: 0xAAB3,
+ 12372 - 12288: 0xAAB4,
+ 12373 - 12288: 0xAAB5,
+ 12374 - 12288: 0xAAB6,
+ 12375 - 12288: 0xAAB7,
+ 12376 - 12288: 0xAAB8,
+ 12377 - 12288: 0xAAB9,
+ 12378 - 12288: 0xAABA,
+ 12379 - 12288: 0xAABB,
+ 12380 - 12288: 0xAABC,
+ 12381 - 12288: 0xAABD,
+ 12382 - 12288: 0xAABE,
+ 12383 - 12288: 0xAABF,
+ 12384 - 12288: 0xAAC0,
+ 12385 - 12288: 0xAAC1,
+ 12386 - 12288: 0xAAC2,
+ 12387 - 12288: 0xAAC3,
+ 12388 - 12288: 0xAAC4,
+ 12389 - 12288: 0xAAC5,
+ 12390 - 12288: 0xAAC6,
+ 12391 - 12288: 0xAAC7,
+ 12392 - 12288: 0xAAC8,
+ 12393 - 12288: 0xAAC9,
+ 12394 - 12288: 0xAACA,
+ 12395 - 12288: 0xAACB,
+ 12396 - 12288: 0xAACC,
+ 12397 - 12288: 0xAACD,
+ 12398 - 12288: 0xAACE,
+ 12399 - 12288: 0xAACF,
+ 12400 - 12288: 0xAAD0,
+ 12401 - 12288: 0xAAD1,
+ 12402 - 12288: 0xAAD2,
+ 12403 - 12288: 0xAAD3,
+ 12404 - 12288: 0xAAD4,
+ 12405 - 12288: 0xAAD5,
+ 12406 - 12288: 0xAAD6,
+ 12407 - 12288: 0xAAD7,
+ 12408 - 12288: 0xAAD8,
+ 12409 - 12288: 0xAAD9,
+ 12410 - 12288: 0xAADA,
+ 12411 - 12288: 0xAADB,
+ 12412 - 12288: 0xAADC,
+ 12413 - 12288: 0xAADD,
+ 12414 - 12288: 0xAADE,
+ 12415 - 12288: 0xAADF,
+ 12416 - 12288: 0xAAE0,
+ 12417 - 12288: 0xAAE1,
+ 12418 - 12288: 0xAAE2,
+ 12419 - 12288: 0xAAE3,
+ 12420 - 12288: 0xAAE4,
+ 12421 - 12288: 0xAAE5,
+ 12422 - 12288: 0xAAE6,
+ 12423 - 12288: 0xAAE7,
+ 12424 - 12288: 0xAAE8,
+ 12425 - 12288: 0xAAE9,
+ 12426 - 12288: 0xAAEA,
+ 12427 - 12288: 0xAAEB,
+ 12428 - 12288: 0xAAEC,
+ 12429 - 12288: 0xAAED,
+ 12430 - 12288: 0xAAEE,
+ 12431 - 12288: 0xAAEF,
+ 12432 - 12288: 0xAAF0,
+ 12433 - 12288: 0xAAF1,
+ 12434 - 12288: 0xAAF2,
+ 12435 - 12288: 0xAAF3,
+ 12449 - 12288: 0xABA1,
+ 12450 - 12288: 0xABA2,
+ 12451 - 12288: 0xABA3,
+ 12452 - 12288: 0xABA4,
+ 12453 - 12288: 0xABA5,
+ 12454 - 12288: 0xABA6,
+ 12455 - 12288: 0xABA7,
+ 12456 - 12288: 0xABA8,
+ 12457 - 12288: 0xABA9,
+ 12458 - 12288: 0xABAA,
+ 12459 - 12288: 0xABAB,
+ 12460 - 12288: 0xABAC,
+ 12461 - 12288: 0xABAD,
+ 12462 - 12288: 0xABAE,
+ 12463 - 12288: 0xABAF,
+ 12464 - 12288: 0xABB0,
+ 12465 - 12288: 0xABB1,
+ 12466 - 12288: 0xABB2,
+ 12467 - 12288: 0xABB3,
+ 12468 - 12288: 0xABB4,
+ 12469 - 12288: 0xABB5,
+ 12470 - 12288: 0xABB6,
+ 12471 - 12288: 0xABB7,
+ 12472 - 12288: 0xABB8,
+ 12473 - 12288: 0xABB9,
+ 12474 - 12288: 0xABBA,
+ 12475 - 12288: 0xABBB,
+ 12476 - 12288: 0xABBC,
+ 12477 - 12288: 0xABBD,
+ 12478 - 12288: 0xABBE,
+ 12479 - 12288: 0xABBF,
+ 12480 - 12288: 0xABC0,
+ 12481 - 12288: 0xABC1,
+ 12482 - 12288: 0xABC2,
+ 12483 - 12288: 0xABC3,
+ 12484 - 12288: 0xABC4,
+ 12485 - 12288: 0xABC5,
+ 12486 - 12288: 0xABC6,
+ 12487 - 12288: 0xABC7,
+ 12488 - 12288: 0xABC8,
+ 12489 - 12288: 0xABC9,
+ 12490 - 12288: 0xABCA,
+ 12491 - 12288: 0xABCB,
+ 12492 - 12288: 0xABCC,
+ 12493 - 12288: 0xABCD,
+ 12494 - 12288: 0xABCE,
+ 12495 - 12288: 0xABCF,
+ 12496 - 12288: 0xABD0,
+ 12497 - 12288: 0xABD1,
+ 12498 - 12288: 0xABD2,
+ 12499 - 12288: 0xABD3,
+ 12500 - 12288: 0xABD4,
+ 12501 - 12288: 0xABD5,
+ 12502 - 12288: 0xABD6,
+ 12503 - 12288: 0xABD7,
+ 12504 - 12288: 0xABD8,
+ 12505 - 12288: 0xABD9,
+ 12506 - 12288: 0xABDA,
+ 12507 - 12288: 0xABDB,
+ 12508 - 12288: 0xABDC,
+ 12509 - 12288: 0xABDD,
+ 12510 - 12288: 0xABDE,
+ 12511 - 12288: 0xABDF,
+ 12512 - 12288: 0xABE0,
+ 12513 - 12288: 0xABE1,
+ 12514 - 12288: 0xABE2,
+ 12515 - 12288: 0xABE3,
+ 12516 - 12288: 0xABE4,
+ 12517 - 12288: 0xABE5,
+ 12518 - 12288: 0xABE6,
+ 12519 - 12288: 0xABE7,
+ 12520 - 12288: 0xABE8,
+ 12521 - 12288: 0xABE9,
+ 12522 - 12288: 0xABEA,
+ 12523 - 12288: 0xABEB,
+ 12524 - 12288: 0xABEC,
+ 12525 - 12288: 0xABED,
+ 12526 - 12288: 0xABEE,
+ 12527 - 12288: 0xABEF,
+ 12528 - 12288: 0xABF0,
+ 12529 - 12288: 0xABF1,
+ 12530 - 12288: 0xABF2,
+ 12531 - 12288: 0xABF3,
+ 12532 - 12288: 0xABF4,
+ 12533 - 12288: 0xABF5,
+ 12534 - 12288: 0xABF6,
+ 12593 - 12288: 0xA4A1,
+ 12594 - 12288: 0xA4A2,
+ 12595 - 12288: 0xA4A3,
+ 12596 - 12288: 0xA4A4,
+ 12597 - 12288: 0xA4A5,
+ 12598 - 12288: 0xA4A6,
+ 12599 - 12288: 0xA4A7,
+ 12600 - 12288: 0xA4A8,
+ 12601 - 12288: 0xA4A9,
+ 12602 - 12288: 0xA4AA,
+ 12603 - 12288: 0xA4AB,
+ 12604 - 12288: 0xA4AC,
+ 12605 - 12288: 0xA4AD,
+ 12606 - 12288: 0xA4AE,
+ 12607 - 12288: 0xA4AF,
+ 12608 - 12288: 0xA4B0,
+ 12609 - 12288: 0xA4B1,
+ 12610 - 12288: 0xA4B2,
+ 12611 - 12288: 0xA4B3,
+ 12612 - 12288: 0xA4B4,
+ 12613 - 12288: 0xA4B5,
+ 12614 - 12288: 0xA4B6,
+ 12615 - 12288: 0xA4B7,
+ 12616 - 12288: 0xA4B8,
+ 12617 - 12288: 0xA4B9,
+ 12618 - 12288: 0xA4BA,
+ 12619 - 12288: 0xA4BB,
+ 12620 - 12288: 0xA4BC,
+ 12621 - 12288: 0xA4BD,
+ 12622 - 12288: 0xA4BE,
+ 12623 - 12288: 0xA4BF,
+ 12624 - 12288: 0xA4C0,
+ 12625 - 12288: 0xA4C1,
+ 12626 - 12288: 0xA4C2,
+ 12627 - 12288: 0xA4C3,
+ 12628 - 12288: 0xA4C4,
+ 12629 - 12288: 0xA4C5,
+ 12630 - 12288: 0xA4C6,
+ 12631 - 12288: 0xA4C7,
+ 12632 - 12288: 0xA4C8,
+ 12633 - 12288: 0xA4C9,
+ 12634 - 12288: 0xA4CA,
+ 12635 - 12288: 0xA4CB,
+ 12636 - 12288: 0xA4CC,
+ 12637 - 12288: 0xA4CD,
+ 12638 - 12288: 0xA4CE,
+ 12639 - 12288: 0xA4CF,
+ 12640 - 12288: 0xA4D0,
+ 12641 - 12288: 0xA4D1,
+ 12642 - 12288: 0xA4D2,
+ 12643 - 12288: 0xA4D3,
+ 12644 - 12288: 0xA4D4,
+ 12645 - 12288: 0xA4D5,
+ 12646 - 12288: 0xA4D6,
+ 12647 - 12288: 0xA4D7,
+ 12648 - 12288: 0xA4D8,
+ 12649 - 12288: 0xA4D9,
+ 12650 - 12288: 0xA4DA,
+ 12651 - 12288: 0xA4DB,
+ 12652 - 12288: 0xA4DC,
+ 12653 - 12288: 0xA4DD,
+ 12654 - 12288: 0xA4DE,
+ 12655 - 12288: 0xA4DF,
+ 12656 - 12288: 0xA4E0,
+ 12657 - 12288: 0xA4E1,
+ 12658 - 12288: 0xA4E2,
+ 12659 - 12288: 0xA4E3,
+ 12660 - 12288: 0xA4E4,
+ 12661 - 12288: 0xA4E5,
+ 12662 - 12288: 0xA4E6,
+ 12663 - 12288: 0xA4E7,
+ 12664 - 12288: 0xA4E8,
+ 12665 - 12288: 0xA4E9,
+ 12666 - 12288: 0xA4EA,
+ 12667 - 12288: 0xA4EB,
+ 12668 - 12288: 0xA4EC,
+ 12669 - 12288: 0xA4ED,
+ 12670 - 12288: 0xA4EE,
+ 12671 - 12288: 0xA4EF,
+ 12672 - 12288: 0xA4F0,
+ 12673 - 12288: 0xA4F1,
+ 12674 - 12288: 0xA4F2,
+ 12675 - 12288: 0xA4F3,
+ 12676 - 12288: 0xA4F4,
+ 12677 - 12288: 0xA4F5,
+ 12678 - 12288: 0xA4F6,
+ 12679 - 12288: 0xA4F7,
+ 12680 - 12288: 0xA4F8,
+ 12681 - 12288: 0xA4F9,
+ 12682 - 12288: 0xA4FA,
+ 12683 - 12288: 0xA4FB,
+ 12684 - 12288: 0xA4FC,
+ 12685 - 12288: 0xA4FD,
+ 12686 - 12288: 0xA4FE,
+ 12800 - 12288: 0xA9B1,
+ 12801 - 12288: 0xA9B2,
+ 12802 - 12288: 0xA9B3,
+ 12803 - 12288: 0xA9B4,
+ 12804 - 12288: 0xA9B5,
+ 12805 - 12288: 0xA9B6,
+ 12806 - 12288: 0xA9B7,
+ 12807 - 12288: 0xA9B8,
+ 12808 - 12288: 0xA9B9,
+ 12809 - 12288: 0xA9BA,
+ 12810 - 12288: 0xA9BB,
+ 12811 - 12288: 0xA9BC,
+ 12812 - 12288: 0xA9BD,
+ 12813 - 12288: 0xA9BE,
+ 12814 - 12288: 0xA9BF,
+ 12815 - 12288: 0xA9C0,
+ 12816 - 12288: 0xA9C1,
+ 12817 - 12288: 0xA9C2,
+ 12818 - 12288: 0xA9C3,
+ 12819 - 12288: 0xA9C4,
+ 12820 - 12288: 0xA9C5,
+ 12821 - 12288: 0xA9C6,
+ 12822 - 12288: 0xA9C7,
+ 12823 - 12288: 0xA9C8,
+ 12824 - 12288: 0xA9C9,
+ 12825 - 12288: 0xA9CA,
+ 12826 - 12288: 0xA9CB,
+ 12827 - 12288: 0xA9CC,
+ 12828 - 12288: 0xA2DF,
+ 12896 - 12288: 0xA8B1,
+ 12897 - 12288: 0xA8B2,
+ 12898 - 12288: 0xA8B3,
+ 12899 - 12288: 0xA8B4,
+ 12900 - 12288: 0xA8B5,
+ 12901 - 12288: 0xA8B6,
+ 12902 - 12288: 0xA8B7,
+ 12903 - 12288: 0xA8B8,
+ 12904 - 12288: 0xA8B9,
+ 12905 - 12288: 0xA8BA,
+ 12906 - 12288: 0xA8BB,
+ 12907 - 12288: 0xA8BC,
+ 12908 - 12288: 0xA8BD,
+ 12909 - 12288: 0xA8BE,
+ 12910 - 12288: 0xA8BF,
+ 12911 - 12288: 0xA8C0,
+ 12912 - 12288: 0xA8C1,
+ 12913 - 12288: 0xA8C2,
+ 12914 - 12288: 0xA8C3,
+ 12915 - 12288: 0xA8C4,
+ 12916 - 12288: 0xA8C5,
+ 12917 - 12288: 0xA8C6,
+ 12918 - 12288: 0xA8C7,
+ 12919 - 12288: 0xA8C8,
+ 12920 - 12288: 0xA8C9,
+ 12921 - 12288: 0xA8CA,
+ 12922 - 12288: 0xA8CB,
+ 12923 - 12288: 0xA8CC,
+ 12927 - 12288: 0xA2DE,
+ 13184 - 12288: 0xA7C9,
+ 13185 - 12288: 0xA7CA,
+ 13186 - 12288: 0xA7CB,
+ 13187 - 12288: 0xA7CC,
+ 13188 - 12288: 0xA7CD,
+ 13192 - 12288: 0xA7BA,
+ 13193 - 12288: 0xA7BB,
+ 13194 - 12288: 0xA7DC,
+ 13195 - 12288: 0xA7DD,
+ 13196 - 12288: 0xA7DE,
+ 13197 - 12288: 0xA7B6,
+ 13198 - 12288: 0xA7B7,
+ 13199 - 12288: 0xA7B8,
+ 13200 - 12288: 0xA7D4,
+ 13201 - 12288: 0xA7D5,
+ 13202 - 12288: 0xA7D6,
+ 13203 - 12288: 0xA7D7,
+ 13204 - 12288: 0xA7D8,
+ 13205 - 12288: 0xA7A1,
+ 13206 - 12288: 0xA7A2,
+ 13207 - 12288: 0xA7A3,
+ 13208 - 12288: 0xA7A5,
+ 13209 - 12288: 0xA7AB,
+ 13210 - 12288: 0xA7AC,
+ 13211 - 12288: 0xA7AD,
+ 13212 - 12288: 0xA7AE,
+ 13213 - 12288: 0xA7AF,
+ 13214 - 12288: 0xA7B0,
+ 13215 - 12288: 0xA7B1,
+ 13216 - 12288: 0xA7B2,
+ 13217 - 12288: 0xA7B3,
+ 13218 - 12288: 0xA7B4,
+ 13219 - 12288: 0xA7A7,
+ 13220 - 12288: 0xA7A8,
+ 13221 - 12288: 0xA7A9,
+ 13222 - 12288: 0xA7AA,
+ 13223 - 12288: 0xA7BD,
+ 13224 - 12288: 0xA7BE,
+ 13225 - 12288: 0xA7E5,
+ 13226 - 12288: 0xA7E6,
+ 13227 - 12288: 0xA7E7,
+ 13228 - 12288: 0xA7E8,
+ 13229 - 12288: 0xA7E1,
+ 13230 - 12288: 0xA7E2,
+ 13231 - 12288: 0xA7E3,
+ 13232 - 12288: 0xA7BF,
+ 13233 - 12288: 0xA7C0,
+ 13234 - 12288: 0xA7C1,
+ 13235 - 12288: 0xA7C2,
+ 13236 - 12288: 0xA7C3,
+ 13237 - 12288: 0xA7C4,
+ 13238 - 12288: 0xA7C5,
+ 13239 - 12288: 0xA7C6,
+ 13240 - 12288: 0xA7C7,
+ 13241 - 12288: 0xA7C8,
+ 13242 - 12288: 0xA7CE,
+ 13243 - 12288: 0xA7CF,
+ 13244 - 12288: 0xA7D0,
+ 13245 - 12288: 0xA7D1,
+ 13246 - 12288: 0xA7D2,
+ 13247 - 12288: 0xA7D3,
+ 13248 - 12288: 0xA7DA,
+ 13249 - 12288: 0xA7DB,
+ 13250 - 12288: 0xA2E3,
+ 13251 - 12288: 0xA7EC,
+ 13252 - 12288: 0xA7A6,
+ 13253 - 12288: 0xA7E0,
+ 13254 - 12288: 0xA7EF,
+ 13255 - 12288: 0xA2E1,
+ 13256 - 12288: 0xA7BC,
+ 13257 - 12288: 0xA7ED,
+ 13258 - 12288: 0xA7B5,
+ 13263 - 12288: 0xA7B9,
+ 13264 - 12288: 0xA7EA,
+ 13267 - 12288: 0xA7EB,
+ 13270 - 12288: 0xA7DF,
+ 13272 - 12288: 0xA2E4,
+ 13275 - 12288: 0xA7E4,
+ 13276 - 12288: 0xA7EE,
+ 13277 - 12288: 0xA7E9,
+}
+
+const encode4Low, encode4High = 161, 1106
+
+var encode4 = [...]uint16{
+ 161 - 161: 0xA2AE,
+ 164 - 161: 0xA2B4,
+ 167 - 161: 0xA1D7,
+ 168 - 161: 0xA1A7,
+ 170 - 161: 0xA8A3,
+ 173 - 161: 0xA1A9,
+ 174 - 161: 0xA2E7,
+ 176 - 161: 0xA1C6,
+ 177 - 161: 0xA1BE,
+ 178 - 161: 0xA9F7,
+ 179 - 161: 0xA9F8,
+ 180 - 161: 0xA2A5,
+ 182 - 161: 0xA2D2,
+ 183 - 161: 0xA1A4,
+ 184 - 161: 0xA2AC,
+ 185 - 161: 0xA9F6,
+ 186 - 161: 0xA8AC,
+ 188 - 161: 0xA8F9,
+ 189 - 161: 0xA8F6,
+ 190 - 161: 0xA8FA,
+ 191 - 161: 0xA2AF,
+ 198 - 161: 0xA8A1,
+ 208 - 161: 0xA8A2,
+ 215 - 161: 0xA1BF,
+ 216 - 161: 0xA8AA,
+ 222 - 161: 0xA8AD,
+ 223 - 161: 0xA9AC,
+ 230 - 161: 0xA9A1,
+ 240 - 161: 0xA9A3,
+ 247 - 161: 0xA1C0,
+ 248 - 161: 0xA9AA,
+ 254 - 161: 0xA9AD,
+ 273 - 161: 0xA9A2,
+ 294 - 161: 0xA8A4,
+ 295 - 161: 0xA9A4,
+ 305 - 161: 0xA9A5,
+ 306 - 161: 0xA8A6,
+ 307 - 161: 0xA9A6,
+ 312 - 161: 0xA9A7,
+ 319 - 161: 0xA8A8,
+ 320 - 161: 0xA9A8,
+ 321 - 161: 0xA8A9,
+ 322 - 161: 0xA9A9,
+ 329 - 161: 0xA9B0,
+ 330 - 161: 0xA8AF,
+ 331 - 161: 0xA9AF,
+ 338 - 161: 0xA8AB,
+ 339 - 161: 0xA9AB,
+ 358 - 161: 0xA8AE,
+ 359 - 161: 0xA9AE,
+ 711 - 161: 0xA2A7,
+ 720 - 161: 0xA2B0,
+ 728 - 161: 0xA2A8,
+ 729 - 161: 0xA2AB,
+ 730 - 161: 0xA2AA,
+ 731 - 161: 0xA2AD,
+ 733 - 161: 0xA2A9,
+ 913 - 161: 0xA5C1,
+ 914 - 161: 0xA5C2,
+ 915 - 161: 0xA5C3,
+ 916 - 161: 0xA5C4,
+ 917 - 161: 0xA5C5,
+ 918 - 161: 0xA5C6,
+ 919 - 161: 0xA5C7,
+ 920 - 161: 0xA5C8,
+ 921 - 161: 0xA5C9,
+ 922 - 161: 0xA5CA,
+ 923 - 161: 0xA5CB,
+ 924 - 161: 0xA5CC,
+ 925 - 161: 0xA5CD,
+ 926 - 161: 0xA5CE,
+ 927 - 161: 0xA5CF,
+ 928 - 161: 0xA5D0,
+ 929 - 161: 0xA5D1,
+ 931 - 161: 0xA5D2,
+ 932 - 161: 0xA5D3,
+ 933 - 161: 0xA5D4,
+ 934 - 161: 0xA5D5,
+ 935 - 161: 0xA5D6,
+ 936 - 161: 0xA5D7,
+ 937 - 161: 0xA5D8,
+ 945 - 161: 0xA5E1,
+ 946 - 161: 0xA5E2,
+ 947 - 161: 0xA5E3,
+ 948 - 161: 0xA5E4,
+ 949 - 161: 0xA5E5,
+ 950 - 161: 0xA5E6,
+ 951 - 161: 0xA5E7,
+ 952 - 161: 0xA5E8,
+ 953 - 161: 0xA5E9,
+ 954 - 161: 0xA5EA,
+ 955 - 161: 0xA5EB,
+ 956 - 161: 0xA5EC,
+ 957 - 161: 0xA5ED,
+ 958 - 161: 0xA5EE,
+ 959 - 161: 0xA5EF,
+ 960 - 161: 0xA5F0,
+ 961 - 161: 0xA5F1,
+ 963 - 161: 0xA5F2,
+ 964 - 161: 0xA5F3,
+ 965 - 161: 0xA5F4,
+ 966 - 161: 0xA5F5,
+ 967 - 161: 0xA5F6,
+ 968 - 161: 0xA5F7,
+ 969 - 161: 0xA5F8,
+ 1025 - 161: 0xACA7,
+ 1040 - 161: 0xACA1,
+ 1041 - 161: 0xACA2,
+ 1042 - 161: 0xACA3,
+ 1043 - 161: 0xACA4,
+ 1044 - 161: 0xACA5,
+ 1045 - 161: 0xACA6,
+ 1046 - 161: 0xACA8,
+ 1047 - 161: 0xACA9,
+ 1048 - 161: 0xACAA,
+ 1049 - 161: 0xACAB,
+ 1050 - 161: 0xACAC,
+ 1051 - 161: 0xACAD,
+ 1052 - 161: 0xACAE,
+ 1053 - 161: 0xACAF,
+ 1054 - 161: 0xACB0,
+ 1055 - 161: 0xACB1,
+ 1056 - 161: 0xACB2,
+ 1057 - 161: 0xACB3,
+ 1058 - 161: 0xACB4,
+ 1059 - 161: 0xACB5,
+ 1060 - 161: 0xACB6,
+ 1061 - 161: 0xACB7,
+ 1062 - 161: 0xACB8,
+ 1063 - 161: 0xACB9,
+ 1064 - 161: 0xACBA,
+ 1065 - 161: 0xACBB,
+ 1066 - 161: 0xACBC,
+ 1067 - 161: 0xACBD,
+ 1068 - 161: 0xACBE,
+ 1069 - 161: 0xACBF,
+ 1070 - 161: 0xACC0,
+ 1071 - 161: 0xACC1,
+ 1072 - 161: 0xACD1,
+ 1073 - 161: 0xACD2,
+ 1074 - 161: 0xACD3,
+ 1075 - 161: 0xACD4,
+ 1076 - 161: 0xACD5,
+ 1077 - 161: 0xACD6,
+ 1078 - 161: 0xACD8,
+ 1079 - 161: 0xACD9,
+ 1080 - 161: 0xACDA,
+ 1081 - 161: 0xACDB,
+ 1082 - 161: 0xACDC,
+ 1083 - 161: 0xACDD,
+ 1084 - 161: 0xACDE,
+ 1085 - 161: 0xACDF,
+ 1086 - 161: 0xACE0,
+ 1087 - 161: 0xACE1,
+ 1088 - 161: 0xACE2,
+ 1089 - 161: 0xACE3,
+ 1090 - 161: 0xACE4,
+ 1091 - 161: 0xACE5,
+ 1092 - 161: 0xACE6,
+ 1093 - 161: 0xACE7,
+ 1094 - 161: 0xACE8,
+ 1095 - 161: 0xACE9,
+ 1096 - 161: 0xACEA,
+ 1097 - 161: 0xACEB,
+ 1098 - 161: 0xACEC,
+ 1099 - 161: 0xACED,
+ 1100 - 161: 0xACEE,
+ 1101 - 161: 0xACEF,
+ 1102 - 161: 0xACF0,
+ 1103 - 161: 0xACF1,
+ 1105 - 161: 0xACD7,
+}
+
+const encode5Low, encode5High = 63744, 64012
+
+var encode5 = [...]uint16{
+ 63744 - 63744: 0xCBD0,
+ 63745 - 63744: 0xCBD6,
+ 63746 - 63744: 0xCBE7,
+ 63747 - 63744: 0xCDCF,
+ 63748 - 63744: 0xCDE8,
+ 63749 - 63744: 0xCEAD,
+ 63750 - 63744: 0xCFFB,
+ 63751 - 63744: 0xD0A2,
+ 63752 - 63744: 0xD0B8,
+ 63753 - 63744: 0xD0D0,
+ 63754 - 63744: 0xD0DD,
+ 63755 - 63744: 0xD1D4,
+ 63756 - 63744: 0xD1D5,
+ 63757 - 63744: 0xD1D8,
+ 63758 - 63744: 0xD1DB,
+ 63759 - 63744: 0xD1DC,
+ 63760 - 63744: 0xD1DD,
+ 63761 - 63744: 0xD1DE,
+ 63762 - 63744: 0xD1DF,
+ 63763 - 63744: 0xD1E0,
+ 63764 - 63744: 0xD1E2,
+ 63765 - 63744: 0xD1E3,
+ 63766 - 63744: 0xD1E4,
+ 63767 - 63744: 0xD1E5,
+ 63768 - 63744: 0xD1E6,
+ 63769 - 63744: 0xD1E8,
+ 63770 - 63744: 0xD1E9,
+ 63771 - 63744: 0xD1EA,
+ 63772 - 63744: 0xD1EB,
+ 63773 - 63744: 0xD1ED,
+ 63774 - 63744: 0xD1EF,
+ 63775 - 63744: 0xD1F0,
+ 63776 - 63744: 0xD1F2,
+ 63777 - 63744: 0xD1F6,
+ 63778 - 63744: 0xD1FA,
+ 63779 - 63744: 0xD1FC,
+ 63780 - 63744: 0xD1FD,
+ 63781 - 63744: 0xD1FE,
+ 63782 - 63744: 0xD2A2,
+ 63783 - 63744: 0xD2A3,
+ 63784 - 63744: 0xD2A7,
+ 63785 - 63744: 0xD2A8,
+ 63786 - 63744: 0xD2A9,
+ 63787 - 63744: 0xD2AA,
+ 63788 - 63744: 0xD2AB,
+ 63789 - 63744: 0xD2AD,
+ 63790 - 63744: 0xD2B2,
+ 63791 - 63744: 0xD2BE,
+ 63792 - 63744: 0xD2C2,
+ 63793 - 63744: 0xD2C3,
+ 63794 - 63744: 0xD2C4,
+ 63795 - 63744: 0xD2C6,
+ 63796 - 63744: 0xD2C7,
+ 63797 - 63744: 0xD2C8,
+ 63798 - 63744: 0xD2C9,
+ 63799 - 63744: 0xD2CA,
+ 63800 - 63744: 0xD2CB,
+ 63801 - 63744: 0xD2CD,
+ 63802 - 63744: 0xD2CE,
+ 63803 - 63744: 0xD2CF,
+ 63804 - 63744: 0xD2D0,
+ 63805 - 63744: 0xD2D1,
+ 63806 - 63744: 0xD2D2,
+ 63807 - 63744: 0xD2D3,
+ 63808 - 63744: 0xD2D4,
+ 63809 - 63744: 0xD2D5,
+ 63810 - 63744: 0xD2D6,
+ 63811 - 63744: 0xD2D7,
+ 63812 - 63744: 0xD2D9,
+ 63813 - 63744: 0xD2DA,
+ 63814 - 63744: 0xD2DE,
+ 63815 - 63744: 0xD2DF,
+ 63816 - 63744: 0xD2E1,
+ 63817 - 63744: 0xD2E2,
+ 63818 - 63744: 0xD2E4,
+ 63819 - 63744: 0xD2E5,
+ 63820 - 63744: 0xD2E6,
+ 63821 - 63744: 0xD2E7,
+ 63822 - 63744: 0xD2E8,
+ 63823 - 63744: 0xD2E9,
+ 63824 - 63744: 0xD2EA,
+ 63825 - 63744: 0xD2EB,
+ 63826 - 63744: 0xD2F0,
+ 63827 - 63744: 0xD2F1,
+ 63828 - 63744: 0xD2F2,
+ 63829 - 63744: 0xD2F3,
+ 63830 - 63744: 0xD2F4,
+ 63831 - 63744: 0xD2F5,
+ 63832 - 63744: 0xD2F7,
+ 63833 - 63744: 0xD2F8,
+ 63834 - 63744: 0xD4E6,
+ 63835 - 63744: 0xD4FC,
+ 63836 - 63744: 0xD5A5,
+ 63837 - 63744: 0xD5AB,
+ 63838 - 63744: 0xD5AE,
+ 63839 - 63744: 0xD6B8,
+ 63840 - 63744: 0xD6CD,
+ 63841 - 63744: 0xD7CB,
+ 63842 - 63744: 0xD7E4,
+ 63843 - 63744: 0xDBC5,
+ 63844 - 63744: 0xDBE4,
+ 63845 - 63744: 0xDCA5,
+ 63846 - 63744: 0xDDA5,
+ 63847 - 63744: 0xDDD5,
+ 63848 - 63744: 0xDDF4,
+ 63849 - 63744: 0xDEFC,
+ 63850 - 63744: 0xDEFE,
+ 63851 - 63744: 0xDFB3,
+ 63852 - 63744: 0xDFE1,
+ 63853 - 63744: 0xDFE8,
+ 63854 - 63744: 0xE0F1,
+ 63855 - 63744: 0xE1AD,
+ 63856 - 63744: 0xE1ED,
+ 63857 - 63744: 0xE3F5,
+ 63858 - 63744: 0xE4A1,
+ 63859 - 63744: 0xE4A9,
+ 63860 - 63744: 0xE5AE,
+ 63861 - 63744: 0xE5B1,
+ 63862 - 63744: 0xE5B2,
+ 63863 - 63744: 0xE5B9,
+ 63864 - 63744: 0xE5BB,
+ 63865 - 63744: 0xE5BC,
+ 63866 - 63744: 0xE5C4,
+ 63867 - 63744: 0xE5CE,
+ 63868 - 63744: 0xE5D0,
+ 63869 - 63744: 0xE5D2,
+ 63870 - 63744: 0xE5D6,
+ 63871 - 63744: 0xE5FA,
+ 63872 - 63744: 0xE5FB,
+ 63873 - 63744: 0xE5FC,
+ 63874 - 63744: 0xE5FE,
+ 63875 - 63744: 0xE6A1,
+ 63876 - 63744: 0xE6A4,
+ 63877 - 63744: 0xE6A7,
+ 63878 - 63744: 0xE6AD,
+ 63879 - 63744: 0xE6AF,
+ 63880 - 63744: 0xE6B0,
+ 63881 - 63744: 0xE6B1,
+ 63882 - 63744: 0xE6B3,
+ 63883 - 63744: 0xE6B7,
+ 63884 - 63744: 0xE6B8,
+ 63885 - 63744: 0xE6BC,
+ 63886 - 63744: 0xE6C4,
+ 63887 - 63744: 0xE6C6,
+ 63888 - 63744: 0xE6C7,
+ 63889 - 63744: 0xE6CA,
+ 63890 - 63744: 0xE6D2,
+ 63891 - 63744: 0xE6D6,
+ 63892 - 63744: 0xE6D9,
+ 63893 - 63744: 0xE6DC,
+ 63894 - 63744: 0xE6DF,
+ 63895 - 63744: 0xE6E1,
+ 63896 - 63744: 0xE6E4,
+ 63897 - 63744: 0xE6E5,
+ 63898 - 63744: 0xE6E6,
+ 63899 - 63744: 0xE6E8,
+ 63900 - 63744: 0xE6EA,
+ 63901 - 63744: 0xE6EB,
+ 63902 - 63744: 0xE6EC,
+ 63903 - 63744: 0xE6EF,
+ 63904 - 63744: 0xE6F1,
+ 63905 - 63744: 0xE6F2,
+ 63906 - 63744: 0xE6F5,
+ 63907 - 63744: 0xE6F6,
+ 63908 - 63744: 0xE6F7,
+ 63909 - 63744: 0xE6F9,
+ 63910 - 63744: 0xE7A1,
+ 63911 - 63744: 0xE7A6,
+ 63912 - 63744: 0xE7A9,
+ 63913 - 63744: 0xE7AA,
+ 63914 - 63744: 0xE7AC,
+ 63915 - 63744: 0xE7AD,
+ 63916 - 63744: 0xE7B0,
+ 63917 - 63744: 0xE7BF,
+ 63918 - 63744: 0xE7C1,
+ 63919 - 63744: 0xE7C6,
+ 63920 - 63744: 0xE7C7,
+ 63921 - 63744: 0xE7CB,
+ 63922 - 63744: 0xE7CD,
+ 63923 - 63744: 0xE7CF,
+ 63924 - 63744: 0xE7D0,
+ 63925 - 63744: 0xE7D3,
+ 63926 - 63744: 0xE7DF,
+ 63927 - 63744: 0xE7E4,
+ 63928 - 63744: 0xE7E6,
+ 63929 - 63744: 0xE7F7,
+ 63930 - 63744: 0xE8E7,
+ 63931 - 63744: 0xE8E8,
+ 63932 - 63744: 0xE8F0,
+ 63933 - 63744: 0xE8F1,
+ 63934 - 63744: 0xE8F7,
+ 63935 - 63744: 0xE8F9,
+ 63936 - 63744: 0xE8FB,
+ 63937 - 63744: 0xE8FE,
+ 63938 - 63744: 0xE9A7,
+ 63939 - 63744: 0xE9AC,
+ 63940 - 63744: 0xE9CC,
+ 63941 - 63744: 0xE9F7,
+ 63942 - 63744: 0xEAC1,
+ 63943 - 63744: 0xEAE5,
+ 63944 - 63744: 0xEAF4,
+ 63945 - 63744: 0xEAF7,
+ 63946 - 63744: 0xEAFC,
+ 63947 - 63744: 0xEAFE,
+ 63948 - 63744: 0xEBA4,
+ 63949 - 63744: 0xEBA7,
+ 63950 - 63744: 0xEBA9,
+ 63951 - 63744: 0xEBAA,
+ 63952 - 63744: 0xEBBA,
+ 63953 - 63744: 0xEBBB,
+ 63954 - 63744: 0xEBBD,
+ 63955 - 63744: 0xEBC1,
+ 63956 - 63744: 0xEBC2,
+ 63957 - 63744: 0xEBC6,
+ 63958 - 63744: 0xEBC7,
+ 63959 - 63744: 0xEBCC,
+ 63960 - 63744: 0xEBCF,
+ 63961 - 63744: 0xEBD0,
+ 63962 - 63744: 0xEBD1,
+ 63963 - 63744: 0xEBD2,
+ 63964 - 63744: 0xEBD8,
+ 63965 - 63744: 0xECA6,
+ 63966 - 63744: 0xECA7,
+ 63967 - 63744: 0xECAA,
+ 63968 - 63744: 0xECAF,
+ 63969 - 63744: 0xECB0,
+ 63970 - 63744: 0xECB1,
+ 63971 - 63744: 0xECB2,
+ 63972 - 63744: 0xECB5,
+ 63973 - 63744: 0xECB8,
+ 63974 - 63744: 0xECBA,
+ 63975 - 63744: 0xECC0,
+ 63976 - 63744: 0xECC1,
+ 63977 - 63744: 0xECC5,
+ 63978 - 63744: 0xECC6,
+ 63979 - 63744: 0xECC9,
+ 63980 - 63744: 0xECCA,
+ 63981 - 63744: 0xECD5,
+ 63982 - 63744: 0xECDD,
+ 63983 - 63744: 0xECDE,
+ 63984 - 63744: 0xECE1,
+ 63985 - 63744: 0xECE4,
+ 63986 - 63744: 0xECE7,
+ 63987 - 63744: 0xECE8,
+ 63988 - 63744: 0xECF7,
+ 63989 - 63744: 0xECF8,
+ 63990 - 63744: 0xECFA,
+ 63991 - 63744: 0xEDA1,
+ 63992 - 63744: 0xEDA2,
+ 63993 - 63744: 0xEDA3,
+ 63994 - 63744: 0xEDEE,
+ 63995 - 63744: 0xEEDB,
+ 63996 - 63744: 0xF2BD,
+ 63997 - 63744: 0xF2FA,
+ 63998 - 63744: 0xF3B1,
+ 63999 - 63744: 0xF4A7,
+ 64000 - 63744: 0xF4EE,
+ 64001 - 63744: 0xF6F4,
+ 64002 - 63744: 0xF6F6,
+ 64003 - 63744: 0xF7B8,
+ 64004 - 63744: 0xF7C8,
+ 64005 - 63744: 0xF7D3,
+ 64006 - 63744: 0xF8DB,
+ 64007 - 63744: 0xF8F0,
+ 64008 - 63744: 0xFAA1,
+ 64009 - 63744: 0xFAA2,
+ 64010 - 63744: 0xFAE6,
+ 64011 - 63744: 0xFCA9,
+}
+
+const encode6Low, encode6High = 65281, 65511
+
+var encode6 = [...]uint16{
+ 65281 - 65281: 0xA3A1,
+ 65282 - 65281: 0xA3A2,
+ 65283 - 65281: 0xA3A3,
+ 65284 - 65281: 0xA3A4,
+ 65285 - 65281: 0xA3A5,
+ 65286 - 65281: 0xA3A6,
+ 65287 - 65281: 0xA3A7,
+ 65288 - 65281: 0xA3A8,
+ 65289 - 65281: 0xA3A9,
+ 65290 - 65281: 0xA3AA,
+ 65291 - 65281: 0xA3AB,
+ 65292 - 65281: 0xA3AC,
+ 65293 - 65281: 0xA3AD,
+ 65294 - 65281: 0xA3AE,
+ 65295 - 65281: 0xA3AF,
+ 65296 - 65281: 0xA3B0,
+ 65297 - 65281: 0xA3B1,
+ 65298 - 65281: 0xA3B2,
+ 65299 - 65281: 0xA3B3,
+ 65300 - 65281: 0xA3B4,
+ 65301 - 65281: 0xA3B5,
+ 65302 - 65281: 0xA3B6,
+ 65303 - 65281: 0xA3B7,
+ 65304 - 65281: 0xA3B8,
+ 65305 - 65281: 0xA3B9,
+ 65306 - 65281: 0xA3BA,
+ 65307 - 65281: 0xA3BB,
+ 65308 - 65281: 0xA3BC,
+ 65309 - 65281: 0xA3BD,
+ 65310 - 65281: 0xA3BE,
+ 65311 - 65281: 0xA3BF,
+ 65312 - 65281: 0xA3C0,
+ 65313 - 65281: 0xA3C1,
+ 65314 - 65281: 0xA3C2,
+ 65315 - 65281: 0xA3C3,
+ 65316 - 65281: 0xA3C4,
+ 65317 - 65281: 0xA3C5,
+ 65318 - 65281: 0xA3C6,
+ 65319 - 65281: 0xA3C7,
+ 65320 - 65281: 0xA3C8,
+ 65321 - 65281: 0xA3C9,
+ 65322 - 65281: 0xA3CA,
+ 65323 - 65281: 0xA3CB,
+ 65324 - 65281: 0xA3CC,
+ 65325 - 65281: 0xA3CD,
+ 65326 - 65281: 0xA3CE,
+ 65327 - 65281: 0xA3CF,
+ 65328 - 65281: 0xA3D0,
+ 65329 - 65281: 0xA3D1,
+ 65330 - 65281: 0xA3D2,
+ 65331 - 65281: 0xA3D3,
+ 65332 - 65281: 0xA3D4,
+ 65333 - 65281: 0xA3D5,
+ 65334 - 65281: 0xA3D6,
+ 65335 - 65281: 0xA3D7,
+ 65336 - 65281: 0xA3D8,
+ 65337 - 65281: 0xA3D9,
+ 65338 - 65281: 0xA3DA,
+ 65339 - 65281: 0xA3DB,
+ 65340 - 65281: 0xA1AC,
+ 65341 - 65281: 0xA3DD,
+ 65342 - 65281: 0xA3DE,
+ 65343 - 65281: 0xA3DF,
+ 65344 - 65281: 0xA3E0,
+ 65345 - 65281: 0xA3E1,
+ 65346 - 65281: 0xA3E2,
+ 65347 - 65281: 0xA3E3,
+ 65348 - 65281: 0xA3E4,
+ 65349 - 65281: 0xA3E5,
+ 65350 - 65281: 0xA3E6,
+ 65351 - 65281: 0xA3E7,
+ 65352 - 65281: 0xA3E8,
+ 65353 - 65281: 0xA3E9,
+ 65354 - 65281: 0xA3EA,
+ 65355 - 65281: 0xA3EB,
+ 65356 - 65281: 0xA3EC,
+ 65357 - 65281: 0xA3ED,
+ 65358 - 65281: 0xA3EE,
+ 65359 - 65281: 0xA3EF,
+ 65360 - 65281: 0xA3F0,
+ 65361 - 65281: 0xA3F1,
+ 65362 - 65281: 0xA3F2,
+ 65363 - 65281: 0xA3F3,
+ 65364 - 65281: 0xA3F4,
+ 65365 - 65281: 0xA3F5,
+ 65366 - 65281: 0xA3F6,
+ 65367 - 65281: 0xA3F7,
+ 65368 - 65281: 0xA3F8,
+ 65369 - 65281: 0xA3F9,
+ 65370 - 65281: 0xA3FA,
+ 65371 - 65281: 0xA3FB,
+ 65372 - 65281: 0xA3FC,
+ 65373 - 65281: 0xA3FD,
+ 65374 - 65281: 0xA2A6,
+ 65504 - 65281: 0xA1CB,
+ 65505 - 65281: 0xA1CC,
+ 65506 - 65281: 0xA1FE,
+ 65507 - 65281: 0xA3FE,
+ 65509 - 65281: 0xA1CD,
+ 65510 - 65281: 0xA3DC,
+}
diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go
new file mode 100644
index 000000000..5ecc526cf
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go
@@ -0,0 +1,12 @@
+// 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 simplifiedchinese
+
+import (
+ "golang.org/x/text/encoding"
+)
+
+// All is a list of all defined encodings in this package.
+var All = []encoding.Encoding{GB18030, GBK, HZGB2312}
diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go
new file mode 100644
index 000000000..b89c45b03
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go
@@ -0,0 +1,269 @@
+// 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 simplifiedchinese
+
+import (
+ "unicode/utf8"
+
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/internal"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/transform"
+)
+
+var (
+ // GB18030 is the GB18030 encoding.
+ GB18030 encoding.Encoding = &gbk18030
+ // GBK is the GBK encoding. It encodes an extension of the GB2312 character set
+ // and is also known as Code Page 936.
+ GBK encoding.Encoding = &gbk
+)
+
+var gbk = internal.Encoding{
+ &internal.SimpleEncoding{
+ gbkDecoder{gb18030: false},
+ gbkEncoder{gb18030: false},
+ },
+ "GBK",
+ identifier.GBK,
+}
+
+var gbk18030 = internal.Encoding{
+ &internal.SimpleEncoding{
+ gbkDecoder{gb18030: true},
+ gbkEncoder{gb18030: true},
+ },
+ "GB18030",
+ identifier.GB18030,
+}
+
+type gbkDecoder struct {
+ transform.NopResetter
+ gb18030 bool
+}
+
+func (d gbkDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+loop:
+ for ; nSrc < len(src); nSrc += size {
+ switch c0 := src[nSrc]; {
+ case c0 < utf8.RuneSelf:
+ r, size = rune(c0), 1
+
+ // Microsoft's Code Page 936 extends GBK 1.0 to encode the euro sign U+20AC
+ // as 0x80. The HTML5 specification at http://encoding.spec.whatwg.org/#gbk
+ // says to treat "gbk" as Code Page 936.
+ case c0 == 0x80:
+ r, size = '€', 1
+
+ case c0 < 0xff:
+ if nSrc+1 >= len(src) {
+ if !atEOF {
+ err = transform.ErrShortSrc
+ break loop
+ }
+ r, size = utf8.RuneError, 1
+ goto write
+ }
+ c1 := src[nSrc+1]
+ switch {
+ case 0x40 <= c1 && c1 < 0x7f:
+ c1 -= 0x40
+ case 0x80 <= c1 && c1 < 0xff:
+ c1 -= 0x41
+ case d.gb18030 && 0x30 <= c1 && c1 < 0x40:
+ if nSrc+3 >= len(src) {
+ if !atEOF {
+ err = transform.ErrShortSrc
+ break loop
+ }
+ // The second byte here is always ASCII, so we can set size
+ // to 1 in all cases.
+ r, size = utf8.RuneError, 1
+ goto write
+ }
+ c2 := src[nSrc+2]
+ if c2 < 0x81 || 0xff <= c2 {
+ r, size = utf8.RuneError, 1
+ goto write
+ }
+ c3 := src[nSrc+3]
+ if c3 < 0x30 || 0x3a <= c3 {
+ r, size = utf8.RuneError, 1
+ goto write
+ }
+ size = 4
+ r = ((rune(c0-0x81)*10+rune(c1-0x30))*126+rune(c2-0x81))*10 + rune(c3-0x30)
+ if r < 39420 {
+ i, j := 0, len(gb18030)
+ for i < j {
+ h := i + (j-i)/2
+ if r >= rune(gb18030[h][0]) {
+ i = h + 1
+ } else {
+ j = h
+ }
+ }
+ dec := &gb18030[i-1]
+ r += rune(dec[1]) - rune(dec[0])
+ goto write
+ }
+ r -= 189000
+ if 0 <= r && r < 0x100000 {
+ r += 0x10000
+ } else {
+ r, size = utf8.RuneError, 1
+ }
+ goto write
+ default:
+ r, size = utf8.RuneError, 1
+ goto write
+ }
+ r, size = '\ufffd', 2
+ if i := int(c0-0x81)*190 + int(c1); i < len(decode) {
+ r = rune(decode[i])
+ if r == 0 {
+ r = '\ufffd'
+ }
+ }
+
+ default:
+ r, size = utf8.RuneError, 1
+ }
+
+ write:
+ if nDst+utf8.RuneLen(r) > len(dst) {
+ err = transform.ErrShortDst
+ break loop
+ }
+ nDst += utf8.EncodeRune(dst[nDst:], r)
+ }
+ return nDst, nSrc, err
+}
+
+type gbkEncoder struct {
+ transform.NopResetter
+ gb18030 bool
+}
+
+func (e gbkEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, r2, size := rune(0), rune(0), 0
+ for ; nSrc < len(src); nSrc += size {
+ r = rune(src[nSrc])
+
+ // Decode a 1-byte rune.
+ if r < utf8.RuneSelf {
+ size = 1
+
+ } else {
+ // Decode a multi-byte rune.
+ r, size = utf8.DecodeRune(src[nSrc:])
+ if size == 1 {
+ // All valid runes of size 1 (those below utf8.RuneSelf) were
+ // handled above. We have invalid UTF-8 or we haven't seen the
+ // full character yet.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+ }
+
+ // func init checks that the switch covers all tables.
+ switch {
+ case encode0Low <= r && r < encode0High:
+ if r2 = rune(encode0[r-encode0Low]); r2 != 0 {
+ goto write2
+ }
+ case encode1Low <= r && r < encode1High:
+ // Microsoft's Code Page 936 extends GBK 1.0 to encode the euro sign U+20AC
+ // as 0x80. The HTML5 specification at http://encoding.spec.whatwg.org/#gbk
+ // says to treat "gbk" as Code Page 936.
+ if r == '€' {
+ r = 0x80
+ goto write1
+ }
+ if r2 = rune(encode1[r-encode1Low]); r2 != 0 {
+ goto write2
+ }
+ case encode2Low <= r && r < encode2High:
+ if r2 = rune(encode2[r-encode2Low]); r2 != 0 {
+ goto write2
+ }
+ case encode3Low <= r && r < encode3High:
+ if r2 = rune(encode3[r-encode3Low]); r2 != 0 {
+ goto write2
+ }
+ case encode4Low <= r && r < encode4High:
+ if r2 = rune(encode4[r-encode4Low]); r2 != 0 {
+ goto write2
+ }
+ }
+
+ if e.gb18030 {
+ if r < 0x10000 {
+ i, j := 0, len(gb18030)
+ for i < j {
+ h := i + (j-i)/2
+ if r >= rune(gb18030[h][1]) {
+ i = h + 1
+ } else {
+ j = h
+ }
+ }
+ dec := &gb18030[i-1]
+ r += rune(dec[0]) - rune(dec[1])
+ goto write4
+ } else if r < 0x110000 {
+ r += 189000 - 0x10000
+ goto write4
+ }
+ }
+ err = internal.ErrASCIIReplacement
+ break
+ }
+
+ write1:
+ if nDst >= len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst] = uint8(r)
+ nDst++
+ continue
+
+ write2:
+ if nDst+2 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+0] = uint8(r2 >> 8)
+ dst[nDst+1] = uint8(r2)
+ nDst += 2
+ continue
+
+ write4:
+ if nDst+4 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+3] = uint8(r%10 + 0x30)
+ r /= 10
+ dst[nDst+2] = uint8(r%126 + 0x81)
+ r /= 126
+ dst[nDst+1] = uint8(r%10 + 0x30)
+ r /= 10
+ dst[nDst+0] = uint8(r + 0x81)
+ nDst += 4
+ continue
+ }
+ return nDst, nSrc, err
+}
+
+func init() {
+ // Check that the hard-coded encode switch covers all tables.
+ if numEncodeTables != 5 {
+ panic("bad numEncodeTables")
+ }
+}
diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go
new file mode 100644
index 000000000..eb3157f0b
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go
@@ -0,0 +1,245 @@
+// 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 simplifiedchinese
+
+import (
+ "unicode/utf8"
+
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/internal"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/transform"
+)
+
+// HZGB2312 is the HZ-GB2312 encoding.
+var HZGB2312 encoding.Encoding = &hzGB2312
+
+var hzGB2312 = internal.Encoding{
+ internal.FuncEncoding{hzGB2312NewDecoder, hzGB2312NewEncoder},
+ "HZ-GB2312",
+ identifier.HZGB2312,
+}
+
+func hzGB2312NewDecoder() transform.Transformer {
+ return new(hzGB2312Decoder)
+}
+
+func hzGB2312NewEncoder() transform.Transformer {
+ return new(hzGB2312Encoder)
+}
+
+const (
+ asciiState = iota
+ gbState
+)
+
+type hzGB2312Decoder int
+
+func (d *hzGB2312Decoder) Reset() {
+ *d = asciiState
+}
+
+func (d *hzGB2312Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+loop:
+ for ; nSrc < len(src); nSrc += size {
+ c0 := src[nSrc]
+ if c0 >= utf8.RuneSelf {
+ r, size = utf8.RuneError, 1
+ goto write
+ }
+
+ if c0 == '~' {
+ if nSrc+1 >= len(src) {
+ if !atEOF {
+ err = transform.ErrShortSrc
+ break loop
+ }
+ r = utf8.RuneError
+ goto write
+ }
+ size = 2
+ switch src[nSrc+1] {
+ case '{':
+ *d = gbState
+ continue
+ case '}':
+ *d = asciiState
+ continue
+ case '~':
+ if nDst >= len(dst) {
+ err = transform.ErrShortDst
+ break loop
+ }
+ dst[nDst] = '~'
+ nDst++
+ continue
+ case '\n':
+ continue
+ default:
+ r = utf8.RuneError
+ goto write
+ }
+ }
+
+ if *d == asciiState {
+ r, size = rune(c0), 1
+ } else {
+ if nSrc+1 >= len(src) {
+ if !atEOF {
+ err = transform.ErrShortSrc
+ break loop
+ }
+ r, size = utf8.RuneError, 1
+ goto write
+ }
+ size = 2
+ c1 := src[nSrc+1]
+ if c0 < 0x21 || 0x7e <= c0 || c1 < 0x21 || 0x7f <= c1 {
+ // error
+ } else if i := int(c0-0x01)*190 + int(c1+0x3f); i < len(decode) {
+ r = rune(decode[i])
+ if r != 0 {
+ goto write
+ }
+ }
+ if c1 > utf8.RuneSelf {
+ // Be consistent and always treat non-ASCII as a single error.
+ size = 1
+ }
+ r = utf8.RuneError
+ }
+
+ write:
+ if nDst+utf8.RuneLen(r) > len(dst) {
+ err = transform.ErrShortDst
+ break loop
+ }
+ nDst += utf8.EncodeRune(dst[nDst:], r)
+ }
+ return nDst, nSrc, err
+}
+
+type hzGB2312Encoder int
+
+func (d *hzGB2312Encoder) Reset() {
+ *d = asciiState
+}
+
+func (e *hzGB2312Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+ for ; nSrc < len(src); nSrc += size {
+ r = rune(src[nSrc])
+
+ // Decode a 1-byte rune.
+ if r < utf8.RuneSelf {
+ size = 1
+ if r == '~' {
+ if nDst+2 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+0] = '~'
+ dst[nDst+1] = '~'
+ nDst += 2
+ continue
+ } else if *e != asciiState {
+ if nDst+3 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ *e = asciiState
+ dst[nDst+0] = '~'
+ dst[nDst+1] = '}'
+ nDst += 2
+ } else if nDst >= len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst] = uint8(r)
+ nDst += 1
+ continue
+
+ }
+
+ // Decode a multi-byte rune.
+ r, size = utf8.DecodeRune(src[nSrc:])
+ if size == 1 {
+ // All valid runes of size 1 (those below utf8.RuneSelf) were
+ // handled above. We have invalid UTF-8 or we haven't seen the
+ // full character yet.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+ }
+
+ // func init checks that the switch covers all tables.
+ switch {
+ case encode0Low <= r && r < encode0High:
+ if r = rune(encode0[r-encode0Low]); r != 0 {
+ goto writeGB
+ }
+ case encode1Low <= r && r < encode1High:
+ if r = rune(encode1[r-encode1Low]); r != 0 {
+ goto writeGB
+ }
+ case encode2Low <= r && r < encode2High:
+ if r = rune(encode2[r-encode2Low]); r != 0 {
+ goto writeGB
+ }
+ case encode3Low <= r && r < encode3High:
+ if r = rune(encode3[r-encode3Low]); r != 0 {
+ goto writeGB
+ }
+ case encode4Low <= r && r < encode4High:
+ if r = rune(encode4[r-encode4Low]); r != 0 {
+ goto writeGB
+ }
+ }
+
+ terminateInASCIIState:
+ // Switch back to ASCII state in case of error so that an ASCII
+ // replacement character can be written in the correct state.
+ if *e != asciiState {
+ if nDst+2 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+0] = '~'
+ dst[nDst+1] = '}'
+ nDst += 2
+ }
+ err = internal.ErrASCIIReplacement
+ break
+
+ writeGB:
+ c0 := uint8(r>>8) - 0x80
+ c1 := uint8(r) - 0x80
+ if c0 < 0x21 || 0x7e <= c0 || c1 < 0x21 || 0x7f <= c1 {
+ goto terminateInASCIIState
+ }
+ if *e == asciiState {
+ if nDst+4 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ *e = gbState
+ dst[nDst+0] = '~'
+ dst[nDst+1] = '{'
+ nDst += 2
+ } else if nDst+2 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+0] = c0
+ dst[nDst+1] = c1
+ nDst += 2
+ continue
+ }
+ // TODO: should one always terminate in ASCII state to make it safe to
+ // concatenate two HZ-GB2312-encoded strings?
+ return nDst, nSrc, err
+}
diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go
new file mode 100644
index 000000000..415f52a11
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go
@@ -0,0 +1,43999 @@
+// generated by go run maketables.go; DO NOT EDIT
+
+// Package simplifiedchinese provides Simplified Chinese encodings such as GBK.
+package simplifiedchinese // import "golang.org/x/text/encoding/simplifiedchinese"
+
+// gb18030 is the table from http://encoding.spec.whatwg.org/index-gb18030.txt
+var gb18030 = [...][2]uint16{
+ {0x0000, 0x0080},
+ {0x0024, 0x00a5},
+ {0x0026, 0x00a9},
+ {0x002d, 0x00b2},
+ {0x0032, 0x00b8},
+ {0x0051, 0x00d8},
+ {0x0059, 0x00e2},
+ {0x005f, 0x00eb},
+ {0x0060, 0x00ee},
+ {0x0064, 0x00f4},
+ {0x0067, 0x00f8},
+ {0x0068, 0x00fb},
+ {0x0069, 0x00fd},
+ {0x006d, 0x0102},
+ {0x007e, 0x0114},
+ {0x0085, 0x011c},
+ {0x0094, 0x012c},
+ {0x00ac, 0x0145},
+ {0x00af, 0x0149},
+ {0x00b3, 0x014e},
+ {0x00d0, 0x016c},
+ {0x0132, 0x01cf},
+ {0x0133, 0x01d1},
+ {0x0134, 0x01d3},
+ {0x0135, 0x01d5},
+ {0x0136, 0x01d7},
+ {0x0137, 0x01d9},
+ {0x0138, 0x01db},
+ {0x0139, 0x01dd},
+ {0x0155, 0x01fa},
+ {0x01ac, 0x0252},
+ {0x01bb, 0x0262},
+ {0x0220, 0x02c8},
+ {0x0221, 0x02cc},
+ {0x022e, 0x02da},
+ {0x02e5, 0x03a2},
+ {0x02e6, 0x03aa},
+ {0x02ed, 0x03c2},
+ {0x02ee, 0x03ca},
+ {0x0325, 0x0402},
+ {0x0333, 0x0450},
+ {0x0334, 0x0452},
+ {0x1ef2, 0x2011},
+ {0x1ef4, 0x2017},
+ {0x1ef5, 0x201a},
+ {0x1ef7, 0x201e},
+ {0x1efe, 0x2027},
+ {0x1f07, 0x2031},
+ {0x1f08, 0x2034},
+ {0x1f09, 0x2036},
+ {0x1f0e, 0x203c},
+ {0x1f7e, 0x20ad},
+ {0x1fd4, 0x2104},
+ {0x1fd5, 0x2106},
+ {0x1fd8, 0x210a},
+ {0x1fe4, 0x2117},
+ {0x1fee, 0x2122},
+ {0x202c, 0x216c},
+ {0x2030, 0x217a},
+ {0x2046, 0x2194},
+ {0x2048, 0x219a},
+ {0x20b6, 0x2209},
+ {0x20bc, 0x2210},
+ {0x20bd, 0x2212},
+ {0x20c0, 0x2216},
+ {0x20c4, 0x221b},
+ {0x20c6, 0x2221},
+ {0x20c8, 0x2224},
+ {0x20c9, 0x2226},
+ {0x20ca, 0x222c},
+ {0x20cc, 0x222f},
+ {0x20d1, 0x2238},
+ {0x20d6, 0x223e},
+ {0x20e0, 0x2249},
+ {0x20e3, 0x224d},
+ {0x20e8, 0x2253},
+ {0x20f5, 0x2262},
+ {0x20f7, 0x2268},
+ {0x20fd, 0x2270},
+ {0x2122, 0x2296},
+ {0x2125, 0x229a},
+ {0x2130, 0x22a6},
+ {0x2149, 0x22c0},
+ {0x219b, 0x2313},
+ {0x22e8, 0x246a},
+ {0x22f2, 0x249c},
+ {0x2356, 0x254c},
+ {0x235a, 0x2574},
+ {0x2367, 0x2590},
+ {0x236a, 0x2596},
+ {0x2374, 0x25a2},
+ {0x2384, 0x25b4},
+ {0x238c, 0x25be},
+ {0x2394, 0x25c8},
+ {0x2397, 0x25cc},
+ {0x2399, 0x25d0},
+ {0x23ab, 0x25e6},
+ {0x23ca, 0x2607},
+ {0x23cc, 0x260a},
+ {0x2402, 0x2641},
+ {0x2403, 0x2643},
+ {0x2c41, 0x2e82},
+ {0x2c43, 0x2e85},
+ {0x2c46, 0x2e89},
+ {0x2c48, 0x2e8d},
+ {0x2c52, 0x2e98},
+ {0x2c61, 0x2ea8},
+ {0x2c63, 0x2eab},
+ {0x2c66, 0x2eaf},
+ {0x2c6a, 0x2eb4},
+ {0x2c6c, 0x2eb8},
+ {0x2c6f, 0x2ebc},
+ {0x2c7d, 0x2ecb},
+ {0x2da2, 0x2ffc},
+ {0x2da6, 0x3004},
+ {0x2da7, 0x3018},
+ {0x2dac, 0x301f},
+ {0x2dae, 0x302a},
+ {0x2dc2, 0x303f},
+ {0x2dc4, 0x3094},
+ {0x2dcb, 0x309f},
+ {0x2dcd, 0x30f7},
+ {0x2dd2, 0x30ff},
+ {0x2dd8, 0x312a},
+ {0x2ece, 0x322a},
+ {0x2ed5, 0x3232},
+ {0x2f46, 0x32a4},
+ {0x3030, 0x3390},
+ {0x303c, 0x339f},
+ {0x303e, 0x33a2},
+ {0x3060, 0x33c5},
+ {0x3069, 0x33cf},
+ {0x306b, 0x33d3},
+ {0x306d, 0x33d6},
+ {0x30de, 0x3448},
+ {0x3109, 0x3474},
+ {0x3233, 0x359f},
+ {0x32a2, 0x360f},
+ {0x32ad, 0x361b},
+ {0x35aa, 0x3919},
+ {0x35ff, 0x396f},
+ {0x365f, 0x39d1},
+ {0x366d, 0x39e0},
+ {0x3700, 0x3a74},
+ {0x37da, 0x3b4f},
+ {0x38f9, 0x3c6f},
+ {0x396a, 0x3ce1},
+ {0x3cdf, 0x4057},
+ {0x3de7, 0x4160},
+ {0x3fbe, 0x4338},
+ {0x4032, 0x43ad},
+ {0x4036, 0x43b2},
+ {0x4061, 0x43de},
+ {0x4159, 0x44d7},
+ {0x42ce, 0x464d},
+ {0x42e2, 0x4662},
+ {0x43a3, 0x4724},
+ {0x43a8, 0x472a},
+ {0x43fa, 0x477d},
+ {0x440a, 0x478e},
+ {0x45c3, 0x4948},
+ {0x45f5, 0x497b},
+ {0x45f7, 0x497e},
+ {0x45fb, 0x4984},
+ {0x45fc, 0x4987},
+ {0x4610, 0x499c},
+ {0x4613, 0x49a0},
+ {0x4629, 0x49b8},
+ {0x48e8, 0x4c78},
+ {0x490f, 0x4ca4},
+ {0x497e, 0x4d1a},
+ {0x4a12, 0x4daf},
+ {0x4a63, 0x9fa6},
+ {0x82bd, 0xe76c},
+ {0x82be, 0xe7c8},
+ {0x82bf, 0xe7e7},
+ {0x82cc, 0xe815},
+ {0x82cd, 0xe819},
+ {0x82d2, 0xe81f},
+ {0x82d9, 0xe827},
+ {0x82dd, 0xe82d},
+ {0x82e1, 0xe833},
+ {0x82e9, 0xe83c},
+ {0x82f0, 0xe844},
+ {0x8300, 0xe856},
+ {0x830e, 0xe865},
+ {0x93d5, 0xf92d},
+ {0x9421, 0xf97a},
+ {0x943c, 0xf996},
+ {0x948d, 0xf9e8},
+ {0x9496, 0xf9f2},
+ {0x94b0, 0xfa10},
+ {0x94b1, 0xfa12},
+ {0x94b2, 0xfa15},
+ {0x94b5, 0xfa19},
+ {0x94bb, 0xfa22},
+ {0x94bc, 0xfa25},
+ {0x94be, 0xfa2a},
+ {0x98c4, 0xfe32},
+ {0x98c5, 0xfe45},
+ {0x98c9, 0xfe53},
+ {0x98ca, 0xfe58},
+ {0x98cb, 0xfe67},
+ {0x98cc, 0xfe6c},
+ {0x9961, 0xff5f},
+ {0x99e2, 0xffe6},
+}
+
+// decode is the decoding table from GBK code to Unicode.
+// It is defined at http://encoding.spec.whatwg.org/index-gbk.txt
+var decode = [...]uint16{
+ 0: 0x4E02,
+ 1: 0x4E04,
+ 2: 0x4E05,
+ 3: 0x4E06,
+ 4: 0x4E0F,
+ 5: 0x4E12,
+ 6: 0x4E17,
+ 7: 0x4E1F,
+ 8: 0x4E20,
+ 9: 0x4E21,
+ 10: 0x4E23,
+ 11: 0x4E26,
+ 12: 0x4E29,
+ 13: 0x4E2E,
+ 14: 0x4E2F,
+ 15: 0x4E31,
+ 16: 0x4E33,
+ 17: 0x4E35,
+ 18: 0x4E37,
+ 19: 0x4E3C,
+ 20: 0x4E40,
+ 21: 0x4E41,
+ 22: 0x4E42,
+ 23: 0x4E44,
+ 24: 0x4E46,
+ 25: 0x4E4A,
+ 26: 0x4E51,
+ 27: 0x4E55,
+ 28: 0x4E57,
+ 29: 0x4E5A,
+ 30: 0x4E5B,
+ 31: 0x4E62,
+ 32: 0x4E63,
+ 33: 0x4E64,
+ 34: 0x4E65,
+ 35: 0x4E67,
+ 36: 0x4E68,
+ 37: 0x4E6A,
+ 38: 0x4E6B,
+ 39: 0x4E6C,
+ 40: 0x4E6D,
+ 41: 0x4E6E,
+ 42: 0x4E6F,
+ 43: 0x4E72,
+ 44: 0x4E74,
+ 45: 0x4E75,
+ 46: 0x4E76,
+ 47: 0x4E77,
+ 48: 0x4E78,
+ 49: 0x4E79,
+ 50: 0x4E7A,
+ 51: 0x4E7B,
+ 52: 0x4E7C,
+ 53: 0x4E7D,
+ 54: 0x4E7F,
+ 55: 0x4E80,
+ 56: 0x4E81,
+ 57: 0x4E82,
+ 58: 0x4E83,
+ 59: 0x4E84,
+ 60: 0x4E85,
+ 61: 0x4E87,
+ 62: 0x4E8A,
+ 63: 0x4E90,
+ 64: 0x4E96,
+ 65: 0x4E97,
+ 66: 0x4E99,
+ 67: 0x4E9C,
+ 68: 0x4E9D,
+ 69: 0x4E9E,
+ 70: 0x4EA3,
+ 71: 0x4EAA,
+ 72: 0x4EAF,
+ 73: 0x4EB0,
+ 74: 0x4EB1,
+ 75: 0x4EB4,
+ 76: 0x4EB6,
+ 77: 0x4EB7,
+ 78: 0x4EB8,
+ 79: 0x4EB9,
+ 80: 0x4EBC,
+ 81: 0x4EBD,
+ 82: 0x4EBE,
+ 83: 0x4EC8,
+ 84: 0x4ECC,
+ 85: 0x4ECF,
+ 86: 0x4ED0,
+ 87: 0x4ED2,
+ 88: 0x4EDA,
+ 89: 0x4EDB,
+ 90: 0x4EDC,
+ 91: 0x4EE0,
+ 92: 0x4EE2,
+ 93: 0x4EE6,
+ 94: 0x4EE7,
+ 95: 0x4EE9,
+ 96: 0x4EED,
+ 97: 0x4EEE,
+ 98: 0x4EEF,
+ 99: 0x4EF1,
+ 100: 0x4EF4,
+ 101: 0x4EF8,
+ 102: 0x4EF9,
+ 103: 0x4EFA,
+ 104: 0x4EFC,
+ 105: 0x4EFE,
+ 106: 0x4F00,
+ 107: 0x4F02,
+ 108: 0x4F03,
+ 109: 0x4F04,
+ 110: 0x4F05,
+ 111: 0x4F06,
+ 112: 0x4F07,
+ 113: 0x4F08,
+ 114: 0x4F0B,
+ 115: 0x4F0C,
+ 116: 0x4F12,
+ 117: 0x4F13,
+ 118: 0x4F14,
+ 119: 0x4F15,
+ 120: 0x4F16,
+ 121: 0x4F1C,
+ 122: 0x4F1D,
+ 123: 0x4F21,
+ 124: 0x4F23,
+ 125: 0x4F28,
+ 126: 0x4F29,
+ 127: 0x4F2C,
+ 128: 0x4F2D,
+ 129: 0x4F2E,
+ 130: 0x4F31,
+ 131: 0x4F33,
+ 132: 0x4F35,
+ 133: 0x4F37,
+ 134: 0x4F39,
+ 135: 0x4F3B,
+ 136: 0x4F3E,
+ 137: 0x4F3F,
+ 138: 0x4F40,
+ 139: 0x4F41,
+ 140: 0x4F42,
+ 141: 0x4F44,
+ 142: 0x4F45,
+ 143: 0x4F47,
+ 144: 0x4F48,
+ 145: 0x4F49,
+ 146: 0x4F4A,
+ 147: 0x4F4B,
+ 148: 0x4F4C,
+ 149: 0x4F52,
+ 150: 0x4F54,
+ 151: 0x4F56,
+ 152: 0x4F61,
+ 153: 0x4F62,
+ 154: 0x4F66,
+ 155: 0x4F68,
+ 156: 0x4F6A,
+ 157: 0x4F6B,
+ 158: 0x4F6D,
+ 159: 0x4F6E,
+ 160: 0x4F71,
+ 161: 0x4F72,
+ 162: 0x4F75,
+ 163: 0x4F77,
+ 164: 0x4F78,
+ 165: 0x4F79,
+ 166: 0x4F7A,
+ 167: 0x4F7D,
+ 168: 0x4F80,
+ 169: 0x4F81,
+ 170: 0x4F82,
+ 171: 0x4F85,
+ 172: 0x4F86,
+ 173: 0x4F87,
+ 174: 0x4F8A,
+ 175: 0x4F8C,
+ 176: 0x4F8E,
+ 177: 0x4F90,
+ 178: 0x4F92,
+ 179: 0x4F93,
+ 180: 0x4F95,
+ 181: 0x4F96,
+ 182: 0x4F98,
+ 183: 0x4F99,
+ 184: 0x4F9A,
+ 185: 0x4F9C,
+ 186: 0x4F9E,
+ 187: 0x4F9F,
+ 188: 0x4FA1,
+ 189: 0x4FA2,
+ 190: 0x4FA4,
+ 191: 0x4FAB,
+ 192: 0x4FAD,
+ 193: 0x4FB0,
+ 194: 0x4FB1,
+ 195: 0x4FB2,
+ 196: 0x4FB3,
+ 197: 0x4FB4,
+ 198: 0x4FB6,
+ 199: 0x4FB7,
+ 200: 0x4FB8,
+ 201: 0x4FB9,
+ 202: 0x4FBA,
+ 203: 0x4FBB,
+ 204: 0x4FBC,
+ 205: 0x4FBD,
+ 206: 0x4FBE,
+ 207: 0x4FC0,
+ 208: 0x4FC1,
+ 209: 0x4FC2,
+ 210: 0x4FC6,
+ 211: 0x4FC7,
+ 212: 0x4FC8,
+ 213: 0x4FC9,
+ 214: 0x4FCB,
+ 215: 0x4FCC,
+ 216: 0x4FCD,
+ 217: 0x4FD2,
+ 218: 0x4FD3,
+ 219: 0x4FD4,
+ 220: 0x4FD5,
+ 221: 0x4FD6,
+ 222: 0x4FD9,
+ 223: 0x4FDB,
+ 224: 0x4FE0,
+ 225: 0x4FE2,
+ 226: 0x4FE4,
+ 227: 0x4FE5,
+ 228: 0x4FE7,
+ 229: 0x4FEB,
+ 230: 0x4FEC,
+ 231: 0x4FF0,
+ 232: 0x4FF2,
+ 233: 0x4FF4,
+ 234: 0x4FF5,
+ 235: 0x4FF6,
+ 236: 0x4FF7,
+ 237: 0x4FF9,
+ 238: 0x4FFB,
+ 239: 0x4FFC,
+ 240: 0x4FFD,
+ 241: 0x4FFF,
+ 242: 0x5000,
+ 243: 0x5001,
+ 244: 0x5002,
+ 245: 0x5003,
+ 246: 0x5004,
+ 247: 0x5005,
+ 248: 0x5006,
+ 249: 0x5007,
+ 250: 0x5008,
+ 251: 0x5009,
+ 252: 0x500A,
+ 253: 0x500B,
+ 254: 0x500E,
+ 255: 0x5010,
+ 256: 0x5011,
+ 257: 0x5013,
+ 258: 0x5015,
+ 259: 0x5016,
+ 260: 0x5017,
+ 261: 0x501B,
+ 262: 0x501D,
+ 263: 0x501E,
+ 264: 0x5020,
+ 265: 0x5022,
+ 266: 0x5023,
+ 267: 0x5024,
+ 268: 0x5027,
+ 269: 0x502B,
+ 270: 0x502F,
+ 271: 0x5030,
+ 272: 0x5031,
+ 273: 0x5032,
+ 274: 0x5033,
+ 275: 0x5034,
+ 276: 0x5035,
+ 277: 0x5036,
+ 278: 0x5037,
+ 279: 0x5038,
+ 280: 0x5039,
+ 281: 0x503B,
+ 282: 0x503D,
+ 283: 0x503F,
+ 284: 0x5040,
+ 285: 0x5041,
+ 286: 0x5042,
+ 287: 0x5044,
+ 288: 0x5045,
+ 289: 0x5046,
+ 290: 0x5049,
+ 291: 0x504A,
+ 292: 0x504B,
+ 293: 0x504D,
+ 294: 0x5050,
+ 295: 0x5051,
+ 296: 0x5052,
+ 297: 0x5053,
+ 298: 0x5054,
+ 299: 0x5056,
+ 300: 0x5057,
+ 301: 0x5058,
+ 302: 0x5059,
+ 303: 0x505B,
+ 304: 0x505D,
+ 305: 0x505E,
+ 306: 0x505F,
+ 307: 0x5060,
+ 308: 0x5061,
+ 309: 0x5062,
+ 310: 0x5063,
+ 311: 0x5064,
+ 312: 0x5066,
+ 313: 0x5067,
+ 314: 0x5068,
+ 315: 0x5069,
+ 316: 0x506A,
+ 317: 0x506B,
+ 318: 0x506D,
+ 319: 0x506E,
+ 320: 0x506F,
+ 321: 0x5070,
+ 322: 0x5071,
+ 323: 0x5072,
+ 324: 0x5073,
+ 325: 0x5074,
+ 326: 0x5075,
+ 327: 0x5078,
+ 328: 0x5079,
+ 329: 0x507A,
+ 330: 0x507C,
+ 331: 0x507D,
+ 332: 0x5081,
+ 333: 0x5082,
+ 334: 0x5083,
+ 335: 0x5084,
+ 336: 0x5086,
+ 337: 0x5087,
+ 338: 0x5089,
+ 339: 0x508A,
+ 340: 0x508B,
+ 341: 0x508C,
+ 342: 0x508E,
+ 343: 0x508F,
+ 344: 0x5090,
+ 345: 0x5091,
+ 346: 0x5092,
+ 347: 0x5093,
+ 348: 0x5094,
+ 349: 0x5095,
+ 350: 0x5096,
+ 351: 0x5097,
+ 352: 0x5098,
+ 353: 0x5099,
+ 354: 0x509A,
+ 355: 0x509B,
+ 356: 0x509C,
+ 357: 0x509D,
+ 358: 0x509E,
+ 359: 0x509F,
+ 360: 0x50A0,
+ 361: 0x50A1,
+ 362: 0x50A2,
+ 363: 0x50A4,
+ 364: 0x50A6,
+ 365: 0x50AA,
+ 366: 0x50AB,
+ 367: 0x50AD,
+ 368: 0x50AE,
+ 369: 0x50AF,
+ 370: 0x50B0,
+ 371: 0x50B1,
+ 372: 0x50B3,
+ 373: 0x50B4,
+ 374: 0x50B5,
+ 375: 0x50B6,
+ 376: 0x50B7,
+ 377: 0x50B8,
+ 378: 0x50B9,
+ 379: 0x50BC,
+ 380: 0x50BD,
+ 381: 0x50BE,
+ 382: 0x50BF,
+ 383: 0x50C0,
+ 384: 0x50C1,
+ 385: 0x50C2,
+ 386: 0x50C3,
+ 387: 0x50C4,
+ 388: 0x50C5,
+ 389: 0x50C6,
+ 390: 0x50C7,
+ 391: 0x50C8,
+ 392: 0x50C9,
+ 393: 0x50CA,
+ 394: 0x50CB,
+ 395: 0x50CC,
+ 396: 0x50CD,
+ 397: 0x50CE,
+ 398: 0x50D0,
+ 399: 0x50D1,
+ 400: 0x50D2,
+ 401: 0x50D3,
+ 402: 0x50D4,
+ 403: 0x50D5,
+ 404: 0x50D7,
+ 405: 0x50D8,
+ 406: 0x50D9,
+ 407: 0x50DB,
+ 408: 0x50DC,
+ 409: 0x50DD,
+ 410: 0x50DE,
+ 411: 0x50DF,
+ 412: 0x50E0,
+ 413: 0x50E1,
+ 414: 0x50E2,
+ 415: 0x50E3,
+ 416: 0x50E4,
+ 417: 0x50E5,
+ 418: 0x50E8,
+ 419: 0x50E9,
+ 420: 0x50EA,
+ 421: 0x50EB,
+ 422: 0x50EF,
+ 423: 0x50F0,
+ 424: 0x50F1,
+ 425: 0x50F2,
+ 426: 0x50F4,
+ 427: 0x50F6,
+ 428: 0x50F7,
+ 429: 0x50F8,
+ 430: 0x50F9,
+ 431: 0x50FA,
+ 432: 0x50FC,
+ 433: 0x50FD,
+ 434: 0x50FE,
+ 435: 0x50FF,
+ 436: 0x5100,
+ 437: 0x5101,
+ 438: 0x5102,
+ 439: 0x5103,
+ 440: 0x5104,
+ 441: 0x5105,
+ 442: 0x5108,
+ 443: 0x5109,
+ 444: 0x510A,
+ 445: 0x510C,
+ 446: 0x510D,
+ 447: 0x510E,
+ 448: 0x510F,
+ 449: 0x5110,
+ 450: 0x5111,
+ 451: 0x5113,
+ 452: 0x5114,
+ 453: 0x5115,
+ 454: 0x5116,
+ 455: 0x5117,
+ 456: 0x5118,
+ 457: 0x5119,
+ 458: 0x511A,
+ 459: 0x511B,
+ 460: 0x511C,
+ 461: 0x511D,
+ 462: 0x511E,
+ 463: 0x511F,
+ 464: 0x5120,
+ 465: 0x5122,
+ 466: 0x5123,
+ 467: 0x5124,
+ 468: 0x5125,
+ 469: 0x5126,
+ 470: 0x5127,
+ 471: 0x5128,
+ 472: 0x5129,
+ 473: 0x512A,
+ 474: 0x512B,
+ 475: 0x512C,
+ 476: 0x512D,
+ 477: 0x512E,
+ 478: 0x512F,
+ 479: 0x5130,
+ 480: 0x5131,
+ 481: 0x5132,
+ 482: 0x5133,
+ 483: 0x5134,
+ 484: 0x5135,
+ 485: 0x5136,
+ 486: 0x5137,
+ 487: 0x5138,
+ 488: 0x5139,
+ 489: 0x513A,
+ 490: 0x513B,
+ 491: 0x513C,
+ 492: 0x513D,
+ 493: 0x513E,
+ 494: 0x5142,
+ 495: 0x5147,
+ 496: 0x514A,
+ 497: 0x514C,
+ 498: 0x514E,
+ 499: 0x514F,
+ 500: 0x5150,
+ 501: 0x5152,
+ 502: 0x5153,
+ 503: 0x5157,
+ 504: 0x5158,
+ 505: 0x5159,
+ 506: 0x515B,
+ 507: 0x515D,
+ 508: 0x515E,
+ 509: 0x515F,
+ 510: 0x5160,
+ 511: 0x5161,
+ 512: 0x5163,
+ 513: 0x5164,
+ 514: 0x5166,
+ 515: 0x5167,
+ 516: 0x5169,
+ 517: 0x516A,
+ 518: 0x516F,
+ 519: 0x5172,
+ 520: 0x517A,
+ 521: 0x517E,
+ 522: 0x517F,
+ 523: 0x5183,
+ 524: 0x5184,
+ 525: 0x5186,
+ 526: 0x5187,
+ 527: 0x518A,
+ 528: 0x518B,
+ 529: 0x518E,
+ 530: 0x518F,
+ 531: 0x5190,
+ 532: 0x5191,
+ 533: 0x5193,
+ 534: 0x5194,
+ 535: 0x5198,
+ 536: 0x519A,
+ 537: 0x519D,
+ 538: 0x519E,
+ 539: 0x519F,
+ 540: 0x51A1,
+ 541: 0x51A3,
+ 542: 0x51A6,
+ 543: 0x51A7,
+ 544: 0x51A8,
+ 545: 0x51A9,
+ 546: 0x51AA,
+ 547: 0x51AD,
+ 548: 0x51AE,
+ 549: 0x51B4,
+ 550: 0x51B8,
+ 551: 0x51B9,
+ 552: 0x51BA,
+ 553: 0x51BE,
+ 554: 0x51BF,
+ 555: 0x51C1,
+ 556: 0x51C2,
+ 557: 0x51C3,
+ 558: 0x51C5,
+ 559: 0x51C8,
+ 560: 0x51CA,
+ 561: 0x51CD,
+ 562: 0x51CE,
+ 563: 0x51D0,
+ 564: 0x51D2,
+ 565: 0x51D3,
+ 566: 0x51D4,
+ 567: 0x51D5,
+ 568: 0x51D6,
+ 569: 0x51D7,
+ 570: 0x51D8,
+ 571: 0x51D9,
+ 572: 0x51DA,
+ 573: 0x51DC,
+ 574: 0x51DE,
+ 575: 0x51DF,
+ 576: 0x51E2,
+ 577: 0x51E3,
+ 578: 0x51E5,
+ 579: 0x51E6,
+ 580: 0x51E7,
+ 581: 0x51E8,
+ 582: 0x51E9,
+ 583: 0x51EA,
+ 584: 0x51EC,
+ 585: 0x51EE,
+ 586: 0x51F1,
+ 587: 0x51F2,
+ 588: 0x51F4,
+ 589: 0x51F7,
+ 590: 0x51FE,
+ 591: 0x5204,
+ 592: 0x5205,
+ 593: 0x5209,
+ 594: 0x520B,
+ 595: 0x520C,
+ 596: 0x520F,
+ 597: 0x5210,
+ 598: 0x5213,
+ 599: 0x5214,
+ 600: 0x5215,
+ 601: 0x521C,
+ 602: 0x521E,
+ 603: 0x521F,
+ 604: 0x5221,
+ 605: 0x5222,
+ 606: 0x5223,
+ 607: 0x5225,
+ 608: 0x5226,
+ 609: 0x5227,
+ 610: 0x522A,
+ 611: 0x522C,
+ 612: 0x522F,
+ 613: 0x5231,
+ 614: 0x5232,
+ 615: 0x5234,
+ 616: 0x5235,
+ 617: 0x523C,
+ 618: 0x523E,
+ 619: 0x5244,
+ 620: 0x5245,
+ 621: 0x5246,
+ 622: 0x5247,
+ 623: 0x5248,
+ 624: 0x5249,
+ 625: 0x524B,
+ 626: 0x524E,
+ 627: 0x524F,
+ 628: 0x5252,
+ 629: 0x5253,
+ 630: 0x5255,
+ 631: 0x5257,
+ 632: 0x5258,
+ 633: 0x5259,
+ 634: 0x525A,
+ 635: 0x525B,
+ 636: 0x525D,
+ 637: 0x525F,
+ 638: 0x5260,
+ 639: 0x5262,
+ 640: 0x5263,
+ 641: 0x5264,
+ 642: 0x5266,
+ 643: 0x5268,
+ 644: 0x526B,
+ 645: 0x526C,
+ 646: 0x526D,
+ 647: 0x526E,
+ 648: 0x5270,
+ 649: 0x5271,
+ 650: 0x5273,
+ 651: 0x5274,
+ 652: 0x5275,
+ 653: 0x5276,
+ 654: 0x5277,
+ 655: 0x5278,
+ 656: 0x5279,
+ 657: 0x527A,
+ 658: 0x527B,
+ 659: 0x527C,
+ 660: 0x527E,
+ 661: 0x5280,
+ 662: 0x5283,
+ 663: 0x5284,
+ 664: 0x5285,
+ 665: 0x5286,
+ 666: 0x5287,
+ 667: 0x5289,
+ 668: 0x528A,
+ 669: 0x528B,
+ 670: 0x528C,
+ 671: 0x528D,
+ 672: 0x528E,
+ 673: 0x528F,
+ 674: 0x5291,
+ 675: 0x5292,
+ 676: 0x5294,
+ 677: 0x5295,
+ 678: 0x5296,
+ 679: 0x5297,
+ 680: 0x5298,
+ 681: 0x5299,
+ 682: 0x529A,
+ 683: 0x529C,
+ 684: 0x52A4,
+ 685: 0x52A5,
+ 686: 0x52A6,
+ 687: 0x52A7,
+ 688: 0x52AE,
+ 689: 0x52AF,
+ 690: 0x52B0,
+ 691: 0x52B4,
+ 692: 0x52B5,
+ 693: 0x52B6,
+ 694: 0x52B7,
+ 695: 0x52B8,
+ 696: 0x52B9,
+ 697: 0x52BA,
+ 698: 0x52BB,
+ 699: 0x52BC,
+ 700: 0x52BD,
+ 701: 0x52C0,
+ 702: 0x52C1,
+ 703: 0x52C2,
+ 704: 0x52C4,
+ 705: 0x52C5,
+ 706: 0x52C6,
+ 707: 0x52C8,
+ 708: 0x52CA,
+ 709: 0x52CC,
+ 710: 0x52CD,
+ 711: 0x52CE,
+ 712: 0x52CF,
+ 713: 0x52D1,
+ 714: 0x52D3,
+ 715: 0x52D4,
+ 716: 0x52D5,
+ 717: 0x52D7,
+ 718: 0x52D9,
+ 719: 0x52DA,
+ 720: 0x52DB,
+ 721: 0x52DC,
+ 722: 0x52DD,
+ 723: 0x52DE,
+ 724: 0x52E0,
+ 725: 0x52E1,
+ 726: 0x52E2,
+ 727: 0x52E3,
+ 728: 0x52E5,
+ 729: 0x52E6,
+ 730: 0x52E7,
+ 731: 0x52E8,
+ 732: 0x52E9,
+ 733: 0x52EA,
+ 734: 0x52EB,
+ 735: 0x52EC,
+ 736: 0x52ED,
+ 737: 0x52EE,
+ 738: 0x52EF,
+ 739: 0x52F1,
+ 740: 0x52F2,
+ 741: 0x52F3,
+ 742: 0x52F4,
+ 743: 0x52F5,
+ 744: 0x52F6,
+ 745: 0x52F7,
+ 746: 0x52F8,
+ 747: 0x52FB,
+ 748: 0x52FC,
+ 749: 0x52FD,
+ 750: 0x5301,
+ 751: 0x5302,
+ 752: 0x5303,
+ 753: 0x5304,
+ 754: 0x5307,
+ 755: 0x5309,
+ 756: 0x530A,
+ 757: 0x530B,
+ 758: 0x530C,
+ 759: 0x530E,
+ 760: 0x5311,
+ 761: 0x5312,
+ 762: 0x5313,
+ 763: 0x5314,
+ 764: 0x5318,
+ 765: 0x531B,
+ 766: 0x531C,
+ 767: 0x531E,
+ 768: 0x531F,
+ 769: 0x5322,
+ 770: 0x5324,
+ 771: 0x5325,
+ 772: 0x5327,
+ 773: 0x5328,
+ 774: 0x5329,
+ 775: 0x532B,
+ 776: 0x532C,
+ 777: 0x532D,
+ 778: 0x532F,
+ 779: 0x5330,
+ 780: 0x5331,
+ 781: 0x5332,
+ 782: 0x5333,
+ 783: 0x5334,
+ 784: 0x5335,
+ 785: 0x5336,
+ 786: 0x5337,
+ 787: 0x5338,
+ 788: 0x533C,
+ 789: 0x533D,
+ 790: 0x5340,
+ 791: 0x5342,
+ 792: 0x5344,
+ 793: 0x5346,
+ 794: 0x534B,
+ 795: 0x534C,
+ 796: 0x534D,
+ 797: 0x5350,
+ 798: 0x5354,
+ 799: 0x5358,
+ 800: 0x5359,
+ 801: 0x535B,
+ 802: 0x535D,
+ 803: 0x5365,
+ 804: 0x5368,
+ 805: 0x536A,
+ 806: 0x536C,
+ 807: 0x536D,
+ 808: 0x5372,
+ 809: 0x5376,
+ 810: 0x5379,
+ 811: 0x537B,
+ 812: 0x537C,
+ 813: 0x537D,
+ 814: 0x537E,
+ 815: 0x5380,
+ 816: 0x5381,
+ 817: 0x5383,
+ 818: 0x5387,
+ 819: 0x5388,
+ 820: 0x538A,
+ 821: 0x538E,
+ 822: 0x538F,
+ 823: 0x5390,
+ 824: 0x5391,
+ 825: 0x5392,
+ 826: 0x5393,
+ 827: 0x5394,
+ 828: 0x5396,
+ 829: 0x5397,
+ 830: 0x5399,
+ 831: 0x539B,
+ 832: 0x539C,
+ 833: 0x539E,
+ 834: 0x53A0,
+ 835: 0x53A1,
+ 836: 0x53A4,
+ 837: 0x53A7,
+ 838: 0x53AA,
+ 839: 0x53AB,
+ 840: 0x53AC,
+ 841: 0x53AD,
+ 842: 0x53AF,
+ 843: 0x53B0,
+ 844: 0x53B1,
+ 845: 0x53B2,
+ 846: 0x53B3,
+ 847: 0x53B4,
+ 848: 0x53B5,
+ 849: 0x53B7,
+ 850: 0x53B8,
+ 851: 0x53B9,
+ 852: 0x53BA,
+ 853: 0x53BC,
+ 854: 0x53BD,
+ 855: 0x53BE,
+ 856: 0x53C0,
+ 857: 0x53C3,
+ 858: 0x53C4,
+ 859: 0x53C5,
+ 860: 0x53C6,
+ 861: 0x53C7,
+ 862: 0x53CE,
+ 863: 0x53CF,
+ 864: 0x53D0,
+ 865: 0x53D2,
+ 866: 0x53D3,
+ 867: 0x53D5,
+ 868: 0x53DA,
+ 869: 0x53DC,
+ 870: 0x53DD,
+ 871: 0x53DE,
+ 872: 0x53E1,
+ 873: 0x53E2,
+ 874: 0x53E7,
+ 875: 0x53F4,
+ 876: 0x53FA,
+ 877: 0x53FE,
+ 878: 0x53FF,
+ 879: 0x5400,
+ 880: 0x5402,
+ 881: 0x5405,
+ 882: 0x5407,
+ 883: 0x540B,
+ 884: 0x5414,
+ 885: 0x5418,
+ 886: 0x5419,
+ 887: 0x541A,
+ 888: 0x541C,
+ 889: 0x5422,
+ 890: 0x5424,
+ 891: 0x5425,
+ 892: 0x542A,
+ 893: 0x5430,
+ 894: 0x5433,
+ 895: 0x5436,
+ 896: 0x5437,
+ 897: 0x543A,
+ 898: 0x543D,
+ 899: 0x543F,
+ 900: 0x5441,
+ 901: 0x5442,
+ 902: 0x5444,
+ 903: 0x5445,
+ 904: 0x5447,
+ 905: 0x5449,
+ 906: 0x544C,
+ 907: 0x544D,
+ 908: 0x544E,
+ 909: 0x544F,
+ 910: 0x5451,
+ 911: 0x545A,
+ 912: 0x545D,
+ 913: 0x545E,
+ 914: 0x545F,
+ 915: 0x5460,
+ 916: 0x5461,
+ 917: 0x5463,
+ 918: 0x5465,
+ 919: 0x5467,
+ 920: 0x5469,
+ 921: 0x546A,
+ 922: 0x546B,
+ 923: 0x546C,
+ 924: 0x546D,
+ 925: 0x546E,
+ 926: 0x546F,
+ 927: 0x5470,
+ 928: 0x5474,
+ 929: 0x5479,
+ 930: 0x547A,
+ 931: 0x547E,
+ 932: 0x547F,
+ 933: 0x5481,
+ 934: 0x5483,
+ 935: 0x5485,
+ 936: 0x5487,
+ 937: 0x5488,
+ 938: 0x5489,
+ 939: 0x548A,
+ 940: 0x548D,
+ 941: 0x5491,
+ 942: 0x5493,
+ 943: 0x5497,
+ 944: 0x5498,
+ 945: 0x549C,
+ 946: 0x549E,
+ 947: 0x549F,
+ 948: 0x54A0,
+ 949: 0x54A1,
+ 950: 0x54A2,
+ 951: 0x54A5,
+ 952: 0x54AE,
+ 953: 0x54B0,
+ 954: 0x54B2,
+ 955: 0x54B5,
+ 956: 0x54B6,
+ 957: 0x54B7,
+ 958: 0x54B9,
+ 959: 0x54BA,
+ 960: 0x54BC,
+ 961: 0x54BE,
+ 962: 0x54C3,
+ 963: 0x54C5,
+ 964: 0x54CA,
+ 965: 0x54CB,
+ 966: 0x54D6,
+ 967: 0x54D8,
+ 968: 0x54DB,
+ 969: 0x54E0,
+ 970: 0x54E1,
+ 971: 0x54E2,
+ 972: 0x54E3,
+ 973: 0x54E4,
+ 974: 0x54EB,
+ 975: 0x54EC,
+ 976: 0x54EF,
+ 977: 0x54F0,
+ 978: 0x54F1,
+ 979: 0x54F4,
+ 980: 0x54F5,
+ 981: 0x54F6,
+ 982: 0x54F7,
+ 983: 0x54F8,
+ 984: 0x54F9,
+ 985: 0x54FB,
+ 986: 0x54FE,
+ 987: 0x5500,
+ 988: 0x5502,
+ 989: 0x5503,
+ 990: 0x5504,
+ 991: 0x5505,
+ 992: 0x5508,
+ 993: 0x550A,
+ 994: 0x550B,
+ 995: 0x550C,
+ 996: 0x550D,
+ 997: 0x550E,
+ 998: 0x5512,
+ 999: 0x5513,
+ 1000: 0x5515,
+ 1001: 0x5516,
+ 1002: 0x5517,
+ 1003: 0x5518,
+ 1004: 0x5519,
+ 1005: 0x551A,
+ 1006: 0x551C,
+ 1007: 0x551D,
+ 1008: 0x551E,
+ 1009: 0x551F,
+ 1010: 0x5521,
+ 1011: 0x5525,
+ 1012: 0x5526,
+ 1013: 0x5528,
+ 1014: 0x5529,
+ 1015: 0x552B,
+ 1016: 0x552D,
+ 1017: 0x5532,
+ 1018: 0x5534,
+ 1019: 0x5535,
+ 1020: 0x5536,
+ 1021: 0x5538,
+ 1022: 0x5539,
+ 1023: 0x553A,
+ 1024: 0x553B,
+ 1025: 0x553D,
+ 1026: 0x5540,
+ 1027: 0x5542,
+ 1028: 0x5545,
+ 1029: 0x5547,
+ 1030: 0x5548,
+ 1031: 0x554B,
+ 1032: 0x554C,
+ 1033: 0x554D,
+ 1034: 0x554E,
+ 1035: 0x554F,
+ 1036: 0x5551,
+ 1037: 0x5552,
+ 1038: 0x5553,
+ 1039: 0x5554,
+ 1040: 0x5557,
+ 1041: 0x5558,
+ 1042: 0x5559,
+ 1043: 0x555A,
+ 1044: 0x555B,
+ 1045: 0x555D,
+ 1046: 0x555E,
+ 1047: 0x555F,
+ 1048: 0x5560,
+ 1049: 0x5562,
+ 1050: 0x5563,
+ 1051: 0x5568,
+ 1052: 0x5569,
+ 1053: 0x556B,
+ 1054: 0x556F,
+ 1055: 0x5570,
+ 1056: 0x5571,
+ 1057: 0x5572,
+ 1058: 0x5573,
+ 1059: 0x5574,
+ 1060: 0x5579,
+ 1061: 0x557A,
+ 1062: 0x557D,
+ 1063: 0x557F,
+ 1064: 0x5585,
+ 1065: 0x5586,
+ 1066: 0x558C,
+ 1067: 0x558D,
+ 1068: 0x558E,
+ 1069: 0x5590,
+ 1070: 0x5592,
+ 1071: 0x5593,
+ 1072: 0x5595,
+ 1073: 0x5596,
+ 1074: 0x5597,
+ 1075: 0x559A,
+ 1076: 0x559B,
+ 1077: 0x559E,
+ 1078: 0x55A0,
+ 1079: 0x55A1,
+ 1080: 0x55A2,
+ 1081: 0x55A3,
+ 1082: 0x55A4,
+ 1083: 0x55A5,
+ 1084: 0x55A6,
+ 1085: 0x55A8,
+ 1086: 0x55A9,
+ 1087: 0x55AA,
+ 1088: 0x55AB,
+ 1089: 0x55AC,
+ 1090: 0x55AD,
+ 1091: 0x55AE,
+ 1092: 0x55AF,
+ 1093: 0x55B0,
+ 1094: 0x55B2,
+ 1095: 0x55B4,
+ 1096: 0x55B6,
+ 1097: 0x55B8,
+ 1098: 0x55BA,
+ 1099: 0x55BC,
+ 1100: 0x55BF,
+ 1101: 0x55C0,
+ 1102: 0x55C1,
+ 1103: 0x55C2,
+ 1104: 0x55C3,
+ 1105: 0x55C6,
+ 1106: 0x55C7,
+ 1107: 0x55C8,
+ 1108: 0x55CA,
+ 1109: 0x55CB,
+ 1110: 0x55CE,
+ 1111: 0x55CF,
+ 1112: 0x55D0,
+ 1113: 0x55D5,
+ 1114: 0x55D7,
+ 1115: 0x55D8,
+ 1116: 0x55D9,
+ 1117: 0x55DA,
+ 1118: 0x55DB,
+ 1119: 0x55DE,
+ 1120: 0x55E0,
+ 1121: 0x55E2,
+ 1122: 0x55E7,
+ 1123: 0x55E9,
+ 1124: 0x55ED,
+ 1125: 0x55EE,
+ 1126: 0x55F0,
+ 1127: 0x55F1,
+ 1128: 0x55F4,
+ 1129: 0x55F6,
+ 1130: 0x55F8,
+ 1131: 0x55F9,
+ 1132: 0x55FA,
+ 1133: 0x55FB,
+ 1134: 0x55FC,
+ 1135: 0x55FF,
+ 1136: 0x5602,
+ 1137: 0x5603,
+ 1138: 0x5604,
+ 1139: 0x5605,
+ 1140: 0x5606,
+ 1141: 0x5607,
+ 1142: 0x560A,
+ 1143: 0x560B,
+ 1144: 0x560D,
+ 1145: 0x5610,
+ 1146: 0x5611,
+ 1147: 0x5612,
+ 1148: 0x5613,
+ 1149: 0x5614,
+ 1150: 0x5615,
+ 1151: 0x5616,
+ 1152: 0x5617,
+ 1153: 0x5619,
+ 1154: 0x561A,
+ 1155: 0x561C,
+ 1156: 0x561D,
+ 1157: 0x5620,
+ 1158: 0x5621,
+ 1159: 0x5622,
+ 1160: 0x5625,
+ 1161: 0x5626,
+ 1162: 0x5628,
+ 1163: 0x5629,
+ 1164: 0x562A,
+ 1165: 0x562B,
+ 1166: 0x562E,
+ 1167: 0x562F,
+ 1168: 0x5630,
+ 1169: 0x5633,
+ 1170: 0x5635,
+ 1171: 0x5637,
+ 1172: 0x5638,
+ 1173: 0x563A,
+ 1174: 0x563C,
+ 1175: 0x563D,
+ 1176: 0x563E,
+ 1177: 0x5640,
+ 1178: 0x5641,
+ 1179: 0x5642,
+ 1180: 0x5643,
+ 1181: 0x5644,
+ 1182: 0x5645,
+ 1183: 0x5646,
+ 1184: 0x5647,
+ 1185: 0x5648,
+ 1186: 0x5649,
+ 1187: 0x564A,
+ 1188: 0x564B,
+ 1189: 0x564F,
+ 1190: 0x5650,
+ 1191: 0x5651,
+ 1192: 0x5652,
+ 1193: 0x5653,
+ 1194: 0x5655,
+ 1195: 0x5656,
+ 1196: 0x565A,
+ 1197: 0x565B,
+ 1198: 0x565D,
+ 1199: 0x565E,
+ 1200: 0x565F,
+ 1201: 0x5660,
+ 1202: 0x5661,
+ 1203: 0x5663,
+ 1204: 0x5665,
+ 1205: 0x5666,
+ 1206: 0x5667,
+ 1207: 0x566D,
+ 1208: 0x566E,
+ 1209: 0x566F,
+ 1210: 0x5670,
+ 1211: 0x5672,
+ 1212: 0x5673,
+ 1213: 0x5674,
+ 1214: 0x5675,
+ 1215: 0x5677,
+ 1216: 0x5678,
+ 1217: 0x5679,
+ 1218: 0x567A,
+ 1219: 0x567D,
+ 1220: 0x567E,
+ 1221: 0x567F,
+ 1222: 0x5680,
+ 1223: 0x5681,
+ 1224: 0x5682,
+ 1225: 0x5683,
+ 1226: 0x5684,
+ 1227: 0x5687,
+ 1228: 0x5688,
+ 1229: 0x5689,
+ 1230: 0x568A,
+ 1231: 0x568B,
+ 1232: 0x568C,
+ 1233: 0x568D,
+ 1234: 0x5690,
+ 1235: 0x5691,
+ 1236: 0x5692,
+ 1237: 0x5694,
+ 1238: 0x5695,
+ 1239: 0x5696,
+ 1240: 0x5697,
+ 1241: 0x5698,
+ 1242: 0x5699,
+ 1243: 0x569A,
+ 1244: 0x569B,
+ 1245: 0x569C,
+ 1246: 0x569D,
+ 1247: 0x569E,
+ 1248: 0x569F,
+ 1249: 0x56A0,
+ 1250: 0x56A1,
+ 1251: 0x56A2,
+ 1252: 0x56A4,
+ 1253: 0x56A5,
+ 1254: 0x56A6,
+ 1255: 0x56A7,
+ 1256: 0x56A8,
+ 1257: 0x56A9,
+ 1258: 0x56AA,
+ 1259: 0x56AB,
+ 1260: 0x56AC,
+ 1261: 0x56AD,
+ 1262: 0x56AE,
+ 1263: 0x56B0,
+ 1264: 0x56B1,
+ 1265: 0x56B2,
+ 1266: 0x56B3,
+ 1267: 0x56B4,
+ 1268: 0x56B5,
+ 1269: 0x56B6,
+ 1270: 0x56B8,
+ 1271: 0x56B9,
+ 1272: 0x56BA,
+ 1273: 0x56BB,
+ 1274: 0x56BD,
+ 1275: 0x56BE,
+ 1276: 0x56BF,
+ 1277: 0x56C0,
+ 1278: 0x56C1,
+ 1279: 0x56C2,
+ 1280: 0x56C3,
+ 1281: 0x56C4,
+ 1282: 0x56C5,
+ 1283: 0x56C6,
+ 1284: 0x56C7,
+ 1285: 0x56C8,
+ 1286: 0x56C9,
+ 1287: 0x56CB,
+ 1288: 0x56CC,
+ 1289: 0x56CD,
+ 1290: 0x56CE,
+ 1291: 0x56CF,
+ 1292: 0x56D0,
+ 1293: 0x56D1,
+ 1294: 0x56D2,
+ 1295: 0x56D3,
+ 1296: 0x56D5,
+ 1297: 0x56D6,
+ 1298: 0x56D8,
+ 1299: 0x56D9,
+ 1300: 0x56DC,
+ 1301: 0x56E3,
+ 1302: 0x56E5,
+ 1303: 0x56E6,
+ 1304: 0x56E7,
+ 1305: 0x56E8,
+ 1306: 0x56E9,
+ 1307: 0x56EA,
+ 1308: 0x56EC,
+ 1309: 0x56EE,
+ 1310: 0x56EF,
+ 1311: 0x56F2,
+ 1312: 0x56F3,
+ 1313: 0x56F6,
+ 1314: 0x56F7,
+ 1315: 0x56F8,
+ 1316: 0x56FB,
+ 1317: 0x56FC,
+ 1318: 0x5700,
+ 1319: 0x5701,
+ 1320: 0x5702,
+ 1321: 0x5705,
+ 1322: 0x5707,
+ 1323: 0x570B,
+ 1324: 0x570C,
+ 1325: 0x570D,
+ 1326: 0x570E,
+ 1327: 0x570F,
+ 1328: 0x5710,
+ 1329: 0x5711,
+ 1330: 0x5712,
+ 1331: 0x5713,
+ 1332: 0x5714,
+ 1333: 0x5715,
+ 1334: 0x5716,
+ 1335: 0x5717,
+ 1336: 0x5718,
+ 1337: 0x5719,
+ 1338: 0x571A,
+ 1339: 0x571B,
+ 1340: 0x571D,
+ 1341: 0x571E,
+ 1342: 0x5720,
+ 1343: 0x5721,
+ 1344: 0x5722,
+ 1345: 0x5724,
+ 1346: 0x5725,
+ 1347: 0x5726,
+ 1348: 0x5727,
+ 1349: 0x572B,
+ 1350: 0x5731,
+ 1351: 0x5732,
+ 1352: 0x5734,
+ 1353: 0x5735,
+ 1354: 0x5736,
+ 1355: 0x5737,
+ 1356: 0x5738,
+ 1357: 0x573C,
+ 1358: 0x573D,
+ 1359: 0x573F,
+ 1360: 0x5741,
+ 1361: 0x5743,
+ 1362: 0x5744,
+ 1363: 0x5745,
+ 1364: 0x5746,
+ 1365: 0x5748,
+ 1366: 0x5749,
+ 1367: 0x574B,
+ 1368: 0x5752,
+ 1369: 0x5753,
+ 1370: 0x5754,
+ 1371: 0x5755,
+ 1372: 0x5756,
+ 1373: 0x5758,
+ 1374: 0x5759,
+ 1375: 0x5762,
+ 1376: 0x5763,
+ 1377: 0x5765,
+ 1378: 0x5767,
+ 1379: 0x576C,
+ 1380: 0x576E,
+ 1381: 0x5770,
+ 1382: 0x5771,
+ 1383: 0x5772,
+ 1384: 0x5774,
+ 1385: 0x5775,
+ 1386: 0x5778,
+ 1387: 0x5779,
+ 1388: 0x577A,
+ 1389: 0x577D,
+ 1390: 0x577E,
+ 1391: 0x577F,
+ 1392: 0x5780,
+ 1393: 0x5781,
+ 1394: 0x5787,
+ 1395: 0x5788,
+ 1396: 0x5789,
+ 1397: 0x578A,
+ 1398: 0x578D,
+ 1399: 0x578E,
+ 1400: 0x578F,
+ 1401: 0x5790,
+ 1402: 0x5791,
+ 1403: 0x5794,
+ 1404: 0x5795,
+ 1405: 0x5796,
+ 1406: 0x5797,
+ 1407: 0x5798,
+ 1408: 0x5799,
+ 1409: 0x579A,
+ 1410: 0x579C,
+ 1411: 0x579D,
+ 1412: 0x579E,
+ 1413: 0x579F,
+ 1414: 0x57A5,
+ 1415: 0x57A8,
+ 1416: 0x57AA,
+ 1417: 0x57AC,
+ 1418: 0x57AF,
+ 1419: 0x57B0,
+ 1420: 0x57B1,
+ 1421: 0x57B3,
+ 1422: 0x57B5,
+ 1423: 0x57B6,
+ 1424: 0x57B7,
+ 1425: 0x57B9,
+ 1426: 0x57BA,
+ 1427: 0x57BB,
+ 1428: 0x57BC,
+ 1429: 0x57BD,
+ 1430: 0x57BE,
+ 1431: 0x57BF,
+ 1432: 0x57C0,
+ 1433: 0x57C1,
+ 1434: 0x57C4,
+ 1435: 0x57C5,
+ 1436: 0x57C6,
+ 1437: 0x57C7,
+ 1438: 0x57C8,
+ 1439: 0x57C9,
+ 1440: 0x57CA,
+ 1441: 0x57CC,
+ 1442: 0x57CD,
+ 1443: 0x57D0,
+ 1444: 0x57D1,
+ 1445: 0x57D3,
+ 1446: 0x57D6,
+ 1447: 0x57D7,
+ 1448: 0x57DB,
+ 1449: 0x57DC,
+ 1450: 0x57DE,
+ 1451: 0x57E1,
+ 1452: 0x57E2,
+ 1453: 0x57E3,
+ 1454: 0x57E5,
+ 1455: 0x57E6,
+ 1456: 0x57E7,
+ 1457: 0x57E8,
+ 1458: 0x57E9,
+ 1459: 0x57EA,
+ 1460: 0x57EB,
+ 1461: 0x57EC,
+ 1462: 0x57EE,
+ 1463: 0x57F0,
+ 1464: 0x57F1,
+ 1465: 0x57F2,
+ 1466: 0x57F3,
+ 1467: 0x57F5,
+ 1468: 0x57F6,
+ 1469: 0x57F7,
+ 1470: 0x57FB,
+ 1471: 0x57FC,
+ 1472: 0x57FE,
+ 1473: 0x57FF,
+ 1474: 0x5801,
+ 1475: 0x5803,
+ 1476: 0x5804,
+ 1477: 0x5805,
+ 1478: 0x5808,
+ 1479: 0x5809,
+ 1480: 0x580A,
+ 1481: 0x580C,
+ 1482: 0x580E,
+ 1483: 0x580F,
+ 1484: 0x5810,
+ 1485: 0x5812,
+ 1486: 0x5813,
+ 1487: 0x5814,
+ 1488: 0x5816,
+ 1489: 0x5817,
+ 1490: 0x5818,
+ 1491: 0x581A,
+ 1492: 0x581B,
+ 1493: 0x581C,
+ 1494: 0x581D,
+ 1495: 0x581F,
+ 1496: 0x5822,
+ 1497: 0x5823,
+ 1498: 0x5825,
+ 1499: 0x5826,
+ 1500: 0x5827,
+ 1501: 0x5828,
+ 1502: 0x5829,
+ 1503: 0x582B,
+ 1504: 0x582C,
+ 1505: 0x582D,
+ 1506: 0x582E,
+ 1507: 0x582F,
+ 1508: 0x5831,
+ 1509: 0x5832,
+ 1510: 0x5833,
+ 1511: 0x5834,
+ 1512: 0x5836,
+ 1513: 0x5837,
+ 1514: 0x5838,
+ 1515: 0x5839,
+ 1516: 0x583A,
+ 1517: 0x583B,
+ 1518: 0x583C,
+ 1519: 0x583D,
+ 1520: 0x583E,
+ 1521: 0x583F,
+ 1522: 0x5840,
+ 1523: 0x5841,
+ 1524: 0x5842,
+ 1525: 0x5843,
+ 1526: 0x5845,
+ 1527: 0x5846,
+ 1528: 0x5847,
+ 1529: 0x5848,
+ 1530: 0x5849,
+ 1531: 0x584A,
+ 1532: 0x584B,
+ 1533: 0x584E,
+ 1534: 0x584F,
+ 1535: 0x5850,
+ 1536: 0x5852,
+ 1537: 0x5853,
+ 1538: 0x5855,
+ 1539: 0x5856,
+ 1540: 0x5857,
+ 1541: 0x5859,
+ 1542: 0x585A,
+ 1543: 0x585B,
+ 1544: 0x585C,
+ 1545: 0x585D,
+ 1546: 0x585F,
+ 1547: 0x5860,
+ 1548: 0x5861,
+ 1549: 0x5862,
+ 1550: 0x5863,
+ 1551: 0x5864,
+ 1552: 0x5866,
+ 1553: 0x5867,
+ 1554: 0x5868,
+ 1555: 0x5869,
+ 1556: 0x586A,
+ 1557: 0x586D,
+ 1558: 0x586E,
+ 1559: 0x586F,
+ 1560: 0x5870,
+ 1561: 0x5871,
+ 1562: 0x5872,
+ 1563: 0x5873,
+ 1564: 0x5874,
+ 1565: 0x5875,
+ 1566: 0x5876,
+ 1567: 0x5877,
+ 1568: 0x5878,
+ 1569: 0x5879,
+ 1570: 0x587A,
+ 1571: 0x587B,
+ 1572: 0x587C,
+ 1573: 0x587D,
+ 1574: 0x587F,
+ 1575: 0x5882,
+ 1576: 0x5884,
+ 1577: 0x5886,
+ 1578: 0x5887,
+ 1579: 0x5888,
+ 1580: 0x588A,
+ 1581: 0x588B,
+ 1582: 0x588C,
+ 1583: 0x588D,
+ 1584: 0x588E,
+ 1585: 0x588F,
+ 1586: 0x5890,
+ 1587: 0x5891,
+ 1588: 0x5894,
+ 1589: 0x5895,
+ 1590: 0x5896,
+ 1591: 0x5897,
+ 1592: 0x5898,
+ 1593: 0x589B,
+ 1594: 0x589C,
+ 1595: 0x589D,
+ 1596: 0x58A0,
+ 1597: 0x58A1,
+ 1598: 0x58A2,
+ 1599: 0x58A3,
+ 1600: 0x58A4,
+ 1601: 0x58A5,
+ 1602: 0x58A6,
+ 1603: 0x58A7,
+ 1604: 0x58AA,
+ 1605: 0x58AB,
+ 1606: 0x58AC,
+ 1607: 0x58AD,
+ 1608: 0x58AE,
+ 1609: 0x58AF,
+ 1610: 0x58B0,
+ 1611: 0x58B1,
+ 1612: 0x58B2,
+ 1613: 0x58B3,
+ 1614: 0x58B4,
+ 1615: 0x58B5,
+ 1616: 0x58B6,
+ 1617: 0x58B7,
+ 1618: 0x58B8,
+ 1619: 0x58B9,
+ 1620: 0x58BA,
+ 1621: 0x58BB,
+ 1622: 0x58BD,
+ 1623: 0x58BE,
+ 1624: 0x58BF,
+ 1625: 0x58C0,
+ 1626: 0x58C2,
+ 1627: 0x58C3,
+ 1628: 0x58C4,
+ 1629: 0x58C6,
+ 1630: 0x58C7,
+ 1631: 0x58C8,
+ 1632: 0x58C9,
+ 1633: 0x58CA,
+ 1634: 0x58CB,
+ 1635: 0x58CC,
+ 1636: 0x58CD,
+ 1637: 0x58CE,
+ 1638: 0x58CF,
+ 1639: 0x58D0,
+ 1640: 0x58D2,
+ 1641: 0x58D3,
+ 1642: 0x58D4,
+ 1643: 0x58D6,
+ 1644: 0x58D7,
+ 1645: 0x58D8,
+ 1646: 0x58D9,
+ 1647: 0x58DA,
+ 1648: 0x58DB,
+ 1649: 0x58DC,
+ 1650: 0x58DD,
+ 1651: 0x58DE,
+ 1652: 0x58DF,
+ 1653: 0x58E0,
+ 1654: 0x58E1,
+ 1655: 0x58E2,
+ 1656: 0x58E3,
+ 1657: 0x58E5,
+ 1658: 0x58E6,
+ 1659: 0x58E7,
+ 1660: 0x58E8,
+ 1661: 0x58E9,
+ 1662: 0x58EA,
+ 1663: 0x58ED,
+ 1664: 0x58EF,
+ 1665: 0x58F1,
+ 1666: 0x58F2,
+ 1667: 0x58F4,
+ 1668: 0x58F5,
+ 1669: 0x58F7,
+ 1670: 0x58F8,
+ 1671: 0x58FA,
+ 1672: 0x58FB,
+ 1673: 0x58FC,
+ 1674: 0x58FD,
+ 1675: 0x58FE,
+ 1676: 0x58FF,
+ 1677: 0x5900,
+ 1678: 0x5901,
+ 1679: 0x5903,
+ 1680: 0x5905,
+ 1681: 0x5906,
+ 1682: 0x5908,
+ 1683: 0x5909,
+ 1684: 0x590A,
+ 1685: 0x590B,
+ 1686: 0x590C,
+ 1687: 0x590E,
+ 1688: 0x5910,
+ 1689: 0x5911,
+ 1690: 0x5912,
+ 1691: 0x5913,
+ 1692: 0x5917,
+ 1693: 0x5918,
+ 1694: 0x591B,
+ 1695: 0x591D,
+ 1696: 0x591E,
+ 1697: 0x5920,
+ 1698: 0x5921,
+ 1699: 0x5922,
+ 1700: 0x5923,
+ 1701: 0x5926,
+ 1702: 0x5928,
+ 1703: 0x592C,
+ 1704: 0x5930,
+ 1705: 0x5932,
+ 1706: 0x5933,
+ 1707: 0x5935,
+ 1708: 0x5936,
+ 1709: 0x593B,
+ 1710: 0x593D,
+ 1711: 0x593E,
+ 1712: 0x593F,
+ 1713: 0x5940,
+ 1714: 0x5943,
+ 1715: 0x5945,
+ 1716: 0x5946,
+ 1717: 0x594A,
+ 1718: 0x594C,
+ 1719: 0x594D,
+ 1720: 0x5950,
+ 1721: 0x5952,
+ 1722: 0x5953,
+ 1723: 0x5959,
+ 1724: 0x595B,
+ 1725: 0x595C,
+ 1726: 0x595D,
+ 1727: 0x595E,
+ 1728: 0x595F,
+ 1729: 0x5961,
+ 1730: 0x5963,
+ 1731: 0x5964,
+ 1732: 0x5966,
+ 1733: 0x5967,
+ 1734: 0x5968,
+ 1735: 0x5969,
+ 1736: 0x596A,
+ 1737: 0x596B,
+ 1738: 0x596C,
+ 1739: 0x596D,
+ 1740: 0x596E,
+ 1741: 0x596F,
+ 1742: 0x5970,
+ 1743: 0x5971,
+ 1744: 0x5972,
+ 1745: 0x5975,
+ 1746: 0x5977,
+ 1747: 0x597A,
+ 1748: 0x597B,
+ 1749: 0x597C,
+ 1750: 0x597E,
+ 1751: 0x597F,
+ 1752: 0x5980,
+ 1753: 0x5985,
+ 1754: 0x5989,
+ 1755: 0x598B,
+ 1756: 0x598C,
+ 1757: 0x598E,
+ 1758: 0x598F,
+ 1759: 0x5990,
+ 1760: 0x5991,
+ 1761: 0x5994,
+ 1762: 0x5995,
+ 1763: 0x5998,
+ 1764: 0x599A,
+ 1765: 0x599B,
+ 1766: 0x599C,
+ 1767: 0x599D,
+ 1768: 0x599F,
+ 1769: 0x59A0,
+ 1770: 0x59A1,
+ 1771: 0x59A2,
+ 1772: 0x59A6,
+ 1773: 0x59A7,
+ 1774: 0x59AC,
+ 1775: 0x59AD,
+ 1776: 0x59B0,
+ 1777: 0x59B1,
+ 1778: 0x59B3,
+ 1779: 0x59B4,
+ 1780: 0x59B5,
+ 1781: 0x59B6,
+ 1782: 0x59B7,
+ 1783: 0x59B8,
+ 1784: 0x59BA,
+ 1785: 0x59BC,
+ 1786: 0x59BD,
+ 1787: 0x59BF,
+ 1788: 0x59C0,
+ 1789: 0x59C1,
+ 1790: 0x59C2,
+ 1791: 0x59C3,
+ 1792: 0x59C4,
+ 1793: 0x59C5,
+ 1794: 0x59C7,
+ 1795: 0x59C8,
+ 1796: 0x59C9,
+ 1797: 0x59CC,
+ 1798: 0x59CD,
+ 1799: 0x59CE,
+ 1800: 0x59CF,
+ 1801: 0x59D5,
+ 1802: 0x59D6,
+ 1803: 0x59D9,
+ 1804: 0x59DB,
+ 1805: 0x59DE,
+ 1806: 0x59DF,
+ 1807: 0x59E0,
+ 1808: 0x59E1,
+ 1809: 0x59E2,
+ 1810: 0x59E4,
+ 1811: 0x59E6,
+ 1812: 0x59E7,
+ 1813: 0x59E9,
+ 1814: 0x59EA,
+ 1815: 0x59EB,
+ 1816: 0x59ED,
+ 1817: 0x59EE,
+ 1818: 0x59EF,
+ 1819: 0x59F0,
+ 1820: 0x59F1,
+ 1821: 0x59F2,
+ 1822: 0x59F3,
+ 1823: 0x59F4,
+ 1824: 0x59F5,
+ 1825: 0x59F6,
+ 1826: 0x59F7,
+ 1827: 0x59F8,
+ 1828: 0x59FA,
+ 1829: 0x59FC,
+ 1830: 0x59FD,
+ 1831: 0x59FE,
+ 1832: 0x5A00,
+ 1833: 0x5A02,
+ 1834: 0x5A0A,
+ 1835: 0x5A0B,
+ 1836: 0x5A0D,
+ 1837: 0x5A0E,
+ 1838: 0x5A0F,
+ 1839: 0x5A10,
+ 1840: 0x5A12,
+ 1841: 0x5A14,
+ 1842: 0x5A15,
+ 1843: 0x5A16,
+ 1844: 0x5A17,
+ 1845: 0x5A19,
+ 1846: 0x5A1A,
+ 1847: 0x5A1B,
+ 1848: 0x5A1D,
+ 1849: 0x5A1E,
+ 1850: 0x5A21,
+ 1851: 0x5A22,
+ 1852: 0x5A24,
+ 1853: 0x5A26,
+ 1854: 0x5A27,
+ 1855: 0x5A28,
+ 1856: 0x5A2A,
+ 1857: 0x5A2B,
+ 1858: 0x5A2C,
+ 1859: 0x5A2D,
+ 1860: 0x5A2E,
+ 1861: 0x5A2F,
+ 1862: 0x5A30,
+ 1863: 0x5A33,
+ 1864: 0x5A35,
+ 1865: 0x5A37,
+ 1866: 0x5A38,
+ 1867: 0x5A39,
+ 1868: 0x5A3A,
+ 1869: 0x5A3B,
+ 1870: 0x5A3D,
+ 1871: 0x5A3E,
+ 1872: 0x5A3F,
+ 1873: 0x5A41,
+ 1874: 0x5A42,
+ 1875: 0x5A43,
+ 1876: 0x5A44,
+ 1877: 0x5A45,
+ 1878: 0x5A47,
+ 1879: 0x5A48,
+ 1880: 0x5A4B,
+ 1881: 0x5A4C,
+ 1882: 0x5A4D,
+ 1883: 0x5A4E,
+ 1884: 0x5A4F,
+ 1885: 0x5A50,
+ 1886: 0x5A51,
+ 1887: 0x5A52,
+ 1888: 0x5A53,
+ 1889: 0x5A54,
+ 1890: 0x5A56,
+ 1891: 0x5A57,
+ 1892: 0x5A58,
+ 1893: 0x5A59,
+ 1894: 0x5A5B,
+ 1895: 0x5A5C,
+ 1896: 0x5A5D,
+ 1897: 0x5A5E,
+ 1898: 0x5A5F,
+ 1899: 0x5A60,
+ 1900: 0x5A61,
+ 1901: 0x5A63,
+ 1902: 0x5A64,
+ 1903: 0x5A65,
+ 1904: 0x5A66,
+ 1905: 0x5A68,
+ 1906: 0x5A69,
+ 1907: 0x5A6B,
+ 1908: 0x5A6C,
+ 1909: 0x5A6D,
+ 1910: 0x5A6E,
+ 1911: 0x5A6F,
+ 1912: 0x5A70,
+ 1913: 0x5A71,
+ 1914: 0x5A72,
+ 1915: 0x5A73,
+ 1916: 0x5A78,
+ 1917: 0x5A79,
+ 1918: 0x5A7B,
+ 1919: 0x5A7C,
+ 1920: 0x5A7D,
+ 1921: 0x5A7E,
+ 1922: 0x5A80,
+ 1923: 0x5A81,
+ 1924: 0x5A82,
+ 1925: 0x5A83,
+ 1926: 0x5A84,
+ 1927: 0x5A85,
+ 1928: 0x5A86,
+ 1929: 0x5A87,
+ 1930: 0x5A88,
+ 1931: 0x5A89,
+ 1932: 0x5A8A,
+ 1933: 0x5A8B,
+ 1934: 0x5A8C,
+ 1935: 0x5A8D,
+ 1936: 0x5A8E,
+ 1937: 0x5A8F,
+ 1938: 0x5A90,
+ 1939: 0x5A91,
+ 1940: 0x5A93,
+ 1941: 0x5A94,
+ 1942: 0x5A95,
+ 1943: 0x5A96,
+ 1944: 0x5A97,
+ 1945: 0x5A98,
+ 1946: 0x5A99,
+ 1947: 0x5A9C,
+ 1948: 0x5A9D,
+ 1949: 0x5A9E,
+ 1950: 0x5A9F,
+ 1951: 0x5AA0,
+ 1952: 0x5AA1,
+ 1953: 0x5AA2,
+ 1954: 0x5AA3,
+ 1955: 0x5AA4,
+ 1956: 0x5AA5,
+ 1957: 0x5AA6,
+ 1958: 0x5AA7,
+ 1959: 0x5AA8,
+ 1960: 0x5AA9,
+ 1961: 0x5AAB,
+ 1962: 0x5AAC,
+ 1963: 0x5AAD,
+ 1964: 0x5AAE,
+ 1965: 0x5AAF,
+ 1966: 0x5AB0,
+ 1967: 0x5AB1,
+ 1968: 0x5AB4,
+ 1969: 0x5AB6,
+ 1970: 0x5AB7,
+ 1971: 0x5AB9,
+ 1972: 0x5ABA,
+ 1973: 0x5ABB,
+ 1974: 0x5ABC,
+ 1975: 0x5ABD,
+ 1976: 0x5ABF,
+ 1977: 0x5AC0,
+ 1978: 0x5AC3,
+ 1979: 0x5AC4,
+ 1980: 0x5AC5,
+ 1981: 0x5AC6,
+ 1982: 0x5AC7,
+ 1983: 0x5AC8,
+ 1984: 0x5ACA,
+ 1985: 0x5ACB,
+ 1986: 0x5ACD,
+ 1987: 0x5ACE,
+ 1988: 0x5ACF,
+ 1989: 0x5AD0,
+ 1990: 0x5AD1,
+ 1991: 0x5AD3,
+ 1992: 0x5AD5,
+ 1993: 0x5AD7,
+ 1994: 0x5AD9,
+ 1995: 0x5ADA,
+ 1996: 0x5ADB,
+ 1997: 0x5ADD,
+ 1998: 0x5ADE,
+ 1999: 0x5ADF,
+ 2000: 0x5AE2,
+ 2001: 0x5AE4,
+ 2002: 0x5AE5,
+ 2003: 0x5AE7,
+ 2004: 0x5AE8,
+ 2005: 0x5AEA,
+ 2006: 0x5AEC,
+ 2007: 0x5AED,
+ 2008: 0x5AEE,
+ 2009: 0x5AEF,
+ 2010: 0x5AF0,
+ 2011: 0x5AF2,
+ 2012: 0x5AF3,
+ 2013: 0x5AF4,
+ 2014: 0x5AF5,
+ 2015: 0x5AF6,
+ 2016: 0x5AF7,
+ 2017: 0x5AF8,
+ 2018: 0x5AF9,
+ 2019: 0x5AFA,
+ 2020: 0x5AFB,
+ 2021: 0x5AFC,
+ 2022: 0x5AFD,
+ 2023: 0x5AFE,
+ 2024: 0x5AFF,
+ 2025: 0x5B00,
+ 2026: 0x5B01,
+ 2027: 0x5B02,
+ 2028: 0x5B03,
+ 2029: 0x5B04,
+ 2030: 0x5B05,
+ 2031: 0x5B06,
+ 2032: 0x5B07,
+ 2033: 0x5B08,
+ 2034: 0x5B0A,
+ 2035: 0x5B0B,
+ 2036: 0x5B0C,
+ 2037: 0x5B0D,
+ 2038: 0x5B0E,
+ 2039: 0x5B0F,
+ 2040: 0x5B10,
+ 2041: 0x5B11,
+ 2042: 0x5B12,
+ 2043: 0x5B13,
+ 2044: 0x5B14,
+ 2045: 0x5B15,
+ 2046: 0x5B18,
+ 2047: 0x5B19,
+ 2048: 0x5B1A,
+ 2049: 0x5B1B,
+ 2050: 0x5B1C,
+ 2051: 0x5B1D,
+ 2052: 0x5B1E,
+ 2053: 0x5B1F,
+ 2054: 0x5B20,
+ 2055: 0x5B21,
+ 2056: 0x5B22,
+ 2057: 0x5B23,
+ 2058: 0x5B24,
+ 2059: 0x5B25,
+ 2060: 0x5B26,
+ 2061: 0x5B27,
+ 2062: 0x5B28,
+ 2063: 0x5B29,
+ 2064: 0x5B2A,
+ 2065: 0x5B2B,
+ 2066: 0x5B2C,
+ 2067: 0x5B2D,
+ 2068: 0x5B2E,
+ 2069: 0x5B2F,
+ 2070: 0x5B30,
+ 2071: 0x5B31,
+ 2072: 0x5B33,
+ 2073: 0x5B35,
+ 2074: 0x5B36,
+ 2075: 0x5B38,
+ 2076: 0x5B39,
+ 2077: 0x5B3A,
+ 2078: 0x5B3B,
+ 2079: 0x5B3C,
+ 2080: 0x5B3D,
+ 2081: 0x5B3E,
+ 2082: 0x5B3F,
+ 2083: 0x5B41,
+ 2084: 0x5B42,
+ 2085: 0x5B43,
+ 2086: 0x5B44,
+ 2087: 0x5B45,
+ 2088: 0x5B46,
+ 2089: 0x5B47,
+ 2090: 0x5B48,
+ 2091: 0x5B49,
+ 2092: 0x5B4A,
+ 2093: 0x5B4B,
+ 2094: 0x5B4C,
+ 2095: 0x5B4D,
+ 2096: 0x5B4E,
+ 2097: 0x5B4F,
+ 2098: 0x5B52,
+ 2099: 0x5B56,
+ 2100: 0x5B5E,
+ 2101: 0x5B60,
+ 2102: 0x5B61,
+ 2103: 0x5B67,
+ 2104: 0x5B68,
+ 2105: 0x5B6B,
+ 2106: 0x5B6D,
+ 2107: 0x5B6E,
+ 2108: 0x5B6F,
+ 2109: 0x5B72,
+ 2110: 0x5B74,
+ 2111: 0x5B76,
+ 2112: 0x5B77,
+ 2113: 0x5B78,
+ 2114: 0x5B79,
+ 2115: 0x5B7B,
+ 2116: 0x5B7C,
+ 2117: 0x5B7E,
+ 2118: 0x5B7F,
+ 2119: 0x5B82,
+ 2120: 0x5B86,
+ 2121: 0x5B8A,
+ 2122: 0x5B8D,
+ 2123: 0x5B8E,
+ 2124: 0x5B90,
+ 2125: 0x5B91,
+ 2126: 0x5B92,
+ 2127: 0x5B94,
+ 2128: 0x5B96,
+ 2129: 0x5B9F,
+ 2130: 0x5BA7,
+ 2131: 0x5BA8,
+ 2132: 0x5BA9,
+ 2133: 0x5BAC,
+ 2134: 0x5BAD,
+ 2135: 0x5BAE,
+ 2136: 0x5BAF,
+ 2137: 0x5BB1,
+ 2138: 0x5BB2,
+ 2139: 0x5BB7,
+ 2140: 0x5BBA,
+ 2141: 0x5BBB,
+ 2142: 0x5BBC,
+ 2143: 0x5BC0,
+ 2144: 0x5BC1,
+ 2145: 0x5BC3,
+ 2146: 0x5BC8,
+ 2147: 0x5BC9,
+ 2148: 0x5BCA,
+ 2149: 0x5BCB,
+ 2150: 0x5BCD,
+ 2151: 0x5BCE,
+ 2152: 0x5BCF,
+ 2153: 0x5BD1,
+ 2154: 0x5BD4,
+ 2155: 0x5BD5,
+ 2156: 0x5BD6,
+ 2157: 0x5BD7,
+ 2158: 0x5BD8,
+ 2159: 0x5BD9,
+ 2160: 0x5BDA,
+ 2161: 0x5BDB,
+ 2162: 0x5BDC,
+ 2163: 0x5BE0,
+ 2164: 0x5BE2,
+ 2165: 0x5BE3,
+ 2166: 0x5BE6,
+ 2167: 0x5BE7,
+ 2168: 0x5BE9,
+ 2169: 0x5BEA,
+ 2170: 0x5BEB,
+ 2171: 0x5BEC,
+ 2172: 0x5BED,
+ 2173: 0x5BEF,
+ 2174: 0x5BF1,
+ 2175: 0x5BF2,
+ 2176: 0x5BF3,
+ 2177: 0x5BF4,
+ 2178: 0x5BF5,
+ 2179: 0x5BF6,
+ 2180: 0x5BF7,
+ 2181: 0x5BFD,
+ 2182: 0x5BFE,
+ 2183: 0x5C00,
+ 2184: 0x5C02,
+ 2185: 0x5C03,
+ 2186: 0x5C05,
+ 2187: 0x5C07,
+ 2188: 0x5C08,
+ 2189: 0x5C0B,
+ 2190: 0x5C0C,
+ 2191: 0x5C0D,
+ 2192: 0x5C0E,
+ 2193: 0x5C10,
+ 2194: 0x5C12,
+ 2195: 0x5C13,
+ 2196: 0x5C17,
+ 2197: 0x5C19,
+ 2198: 0x5C1B,
+ 2199: 0x5C1E,
+ 2200: 0x5C1F,
+ 2201: 0x5C20,
+ 2202: 0x5C21,
+ 2203: 0x5C23,
+ 2204: 0x5C26,
+ 2205: 0x5C28,
+ 2206: 0x5C29,
+ 2207: 0x5C2A,
+ 2208: 0x5C2B,
+ 2209: 0x5C2D,
+ 2210: 0x5C2E,
+ 2211: 0x5C2F,
+ 2212: 0x5C30,
+ 2213: 0x5C32,
+ 2214: 0x5C33,
+ 2215: 0x5C35,
+ 2216: 0x5C36,
+ 2217: 0x5C37,
+ 2218: 0x5C43,
+ 2219: 0x5C44,
+ 2220: 0x5C46,
+ 2221: 0x5C47,
+ 2222: 0x5C4C,
+ 2223: 0x5C4D,
+ 2224: 0x5C52,
+ 2225: 0x5C53,
+ 2226: 0x5C54,
+ 2227: 0x5C56,
+ 2228: 0x5C57,
+ 2229: 0x5C58,
+ 2230: 0x5C5A,
+ 2231: 0x5C5B,
+ 2232: 0x5C5C,
+ 2233: 0x5C5D,
+ 2234: 0x5C5F,
+ 2235: 0x5C62,
+ 2236: 0x5C64,
+ 2237: 0x5C67,
+ 2238: 0x5C68,
+ 2239: 0x5C69,
+ 2240: 0x5C6A,
+ 2241: 0x5C6B,
+ 2242: 0x5C6C,
+ 2243: 0x5C6D,
+ 2244: 0x5C70,
+ 2245: 0x5C72,
+ 2246: 0x5C73,
+ 2247: 0x5C74,
+ 2248: 0x5C75,
+ 2249: 0x5C76,
+ 2250: 0x5C77,
+ 2251: 0x5C78,
+ 2252: 0x5C7B,
+ 2253: 0x5C7C,
+ 2254: 0x5C7D,
+ 2255: 0x5C7E,
+ 2256: 0x5C80,
+ 2257: 0x5C83,
+ 2258: 0x5C84,
+ 2259: 0x5C85,
+ 2260: 0x5C86,
+ 2261: 0x5C87,
+ 2262: 0x5C89,
+ 2263: 0x5C8A,
+ 2264: 0x5C8B,
+ 2265: 0x5C8E,
+ 2266: 0x5C8F,
+ 2267: 0x5C92,
+ 2268: 0x5C93,
+ 2269: 0x5C95,
+ 2270: 0x5C9D,
+ 2271: 0x5C9E,
+ 2272: 0x5C9F,
+ 2273: 0x5CA0,
+ 2274: 0x5CA1,
+ 2275: 0x5CA4,
+ 2276: 0x5CA5,
+ 2277: 0x5CA6,
+ 2278: 0x5CA7,
+ 2279: 0x5CA8,
+ 2280: 0x5CAA,
+ 2281: 0x5CAE,
+ 2282: 0x5CAF,
+ 2283: 0x5CB0,
+ 2284: 0x5CB2,
+ 2285: 0x5CB4,
+ 2286: 0x5CB6,
+ 2287: 0x5CB9,
+ 2288: 0x5CBA,
+ 2289: 0x5CBB,
+ 2290: 0x5CBC,
+ 2291: 0x5CBE,
+ 2292: 0x5CC0,
+ 2293: 0x5CC2,
+ 2294: 0x5CC3,
+ 2295: 0x5CC5,
+ 2296: 0x5CC6,
+ 2297: 0x5CC7,
+ 2298: 0x5CC8,
+ 2299: 0x5CC9,
+ 2300: 0x5CCA,
+ 2301: 0x5CCC,
+ 2302: 0x5CCD,
+ 2303: 0x5CCE,
+ 2304: 0x5CCF,
+ 2305: 0x5CD0,
+ 2306: 0x5CD1,
+ 2307: 0x5CD3,
+ 2308: 0x5CD4,
+ 2309: 0x5CD5,
+ 2310: 0x5CD6,
+ 2311: 0x5CD7,
+ 2312: 0x5CD8,
+ 2313: 0x5CDA,
+ 2314: 0x5CDB,
+ 2315: 0x5CDC,
+ 2316: 0x5CDD,
+ 2317: 0x5CDE,
+ 2318: 0x5CDF,
+ 2319: 0x5CE0,
+ 2320: 0x5CE2,
+ 2321: 0x5CE3,
+ 2322: 0x5CE7,
+ 2323: 0x5CE9,
+ 2324: 0x5CEB,
+ 2325: 0x5CEC,
+ 2326: 0x5CEE,
+ 2327: 0x5CEF,
+ 2328: 0x5CF1,
+ 2329: 0x5CF2,
+ 2330: 0x5CF3,
+ 2331: 0x5CF4,
+ 2332: 0x5CF5,
+ 2333: 0x5CF6,
+ 2334: 0x5CF7,
+ 2335: 0x5CF8,
+ 2336: 0x5CF9,
+ 2337: 0x5CFA,
+ 2338: 0x5CFC,
+ 2339: 0x5CFD,
+ 2340: 0x5CFE,
+ 2341: 0x5CFF,
+ 2342: 0x5D00,
+ 2343: 0x5D01,
+ 2344: 0x5D04,
+ 2345: 0x5D05,
+ 2346: 0x5D08,
+ 2347: 0x5D09,
+ 2348: 0x5D0A,
+ 2349: 0x5D0B,
+ 2350: 0x5D0C,
+ 2351: 0x5D0D,
+ 2352: 0x5D0F,
+ 2353: 0x5D10,
+ 2354: 0x5D11,
+ 2355: 0x5D12,
+ 2356: 0x5D13,
+ 2357: 0x5D15,
+ 2358: 0x5D17,
+ 2359: 0x5D18,
+ 2360: 0x5D19,
+ 2361: 0x5D1A,
+ 2362: 0x5D1C,
+ 2363: 0x5D1D,
+ 2364: 0x5D1F,
+ 2365: 0x5D20,
+ 2366: 0x5D21,
+ 2367: 0x5D22,
+ 2368: 0x5D23,
+ 2369: 0x5D25,
+ 2370: 0x5D28,
+ 2371: 0x5D2A,
+ 2372: 0x5D2B,
+ 2373: 0x5D2C,
+ 2374: 0x5D2F,
+ 2375: 0x5D30,
+ 2376: 0x5D31,
+ 2377: 0x5D32,
+ 2378: 0x5D33,
+ 2379: 0x5D35,
+ 2380: 0x5D36,
+ 2381: 0x5D37,
+ 2382: 0x5D38,
+ 2383: 0x5D39,
+ 2384: 0x5D3A,
+ 2385: 0x5D3B,
+ 2386: 0x5D3C,
+ 2387: 0x5D3F,
+ 2388: 0x5D40,
+ 2389: 0x5D41,
+ 2390: 0x5D42,
+ 2391: 0x5D43,
+ 2392: 0x5D44,
+ 2393: 0x5D45,
+ 2394: 0x5D46,
+ 2395: 0x5D48,
+ 2396: 0x5D49,
+ 2397: 0x5D4D,
+ 2398: 0x5D4E,
+ 2399: 0x5D4F,
+ 2400: 0x5D50,
+ 2401: 0x5D51,
+ 2402: 0x5D52,
+ 2403: 0x5D53,
+ 2404: 0x5D54,
+ 2405: 0x5D55,
+ 2406: 0x5D56,
+ 2407: 0x5D57,
+ 2408: 0x5D59,
+ 2409: 0x5D5A,
+ 2410: 0x5D5C,
+ 2411: 0x5D5E,
+ 2412: 0x5D5F,
+ 2413: 0x5D60,
+ 2414: 0x5D61,
+ 2415: 0x5D62,
+ 2416: 0x5D63,
+ 2417: 0x5D64,
+ 2418: 0x5D65,
+ 2419: 0x5D66,
+ 2420: 0x5D67,
+ 2421: 0x5D68,
+ 2422: 0x5D6A,
+ 2423: 0x5D6D,
+ 2424: 0x5D6E,
+ 2425: 0x5D70,
+ 2426: 0x5D71,
+ 2427: 0x5D72,
+ 2428: 0x5D73,
+ 2429: 0x5D75,
+ 2430: 0x5D76,
+ 2431: 0x5D77,
+ 2432: 0x5D78,
+ 2433: 0x5D79,
+ 2434: 0x5D7A,
+ 2435: 0x5D7B,
+ 2436: 0x5D7C,
+ 2437: 0x5D7D,
+ 2438: 0x5D7E,
+ 2439: 0x5D7F,
+ 2440: 0x5D80,
+ 2441: 0x5D81,
+ 2442: 0x5D83,
+ 2443: 0x5D84,
+ 2444: 0x5D85,
+ 2445: 0x5D86,
+ 2446: 0x5D87,
+ 2447: 0x5D88,
+ 2448: 0x5D89,
+ 2449: 0x5D8A,
+ 2450: 0x5D8B,
+ 2451: 0x5D8C,
+ 2452: 0x5D8D,
+ 2453: 0x5D8E,
+ 2454: 0x5D8F,
+ 2455: 0x5D90,
+ 2456: 0x5D91,
+ 2457: 0x5D92,
+ 2458: 0x5D93,
+ 2459: 0x5D94,
+ 2460: 0x5D95,
+ 2461: 0x5D96,
+ 2462: 0x5D97,
+ 2463: 0x5D98,
+ 2464: 0x5D9A,
+ 2465: 0x5D9B,
+ 2466: 0x5D9C,
+ 2467: 0x5D9E,
+ 2468: 0x5D9F,
+ 2469: 0x5DA0,
+ 2470: 0x5DA1,
+ 2471: 0x5DA2,
+ 2472: 0x5DA3,
+ 2473: 0x5DA4,
+ 2474: 0x5DA5,
+ 2475: 0x5DA6,
+ 2476: 0x5DA7,
+ 2477: 0x5DA8,
+ 2478: 0x5DA9,
+ 2479: 0x5DAA,
+ 2480: 0x5DAB,
+ 2481: 0x5DAC,
+ 2482: 0x5DAD,
+ 2483: 0x5DAE,
+ 2484: 0x5DAF,
+ 2485: 0x5DB0,
+ 2486: 0x5DB1,
+ 2487: 0x5DB2,
+ 2488: 0x5DB3,
+ 2489: 0x5DB4,
+ 2490: 0x5DB5,
+ 2491: 0x5DB6,
+ 2492: 0x5DB8,
+ 2493: 0x5DB9,
+ 2494: 0x5DBA,
+ 2495: 0x5DBB,
+ 2496: 0x5DBC,
+ 2497: 0x5DBD,
+ 2498: 0x5DBE,
+ 2499: 0x5DBF,
+ 2500: 0x5DC0,
+ 2501: 0x5DC1,
+ 2502: 0x5DC2,
+ 2503: 0x5DC3,
+ 2504: 0x5DC4,
+ 2505: 0x5DC6,
+ 2506: 0x5DC7,
+ 2507: 0x5DC8,
+ 2508: 0x5DC9,
+ 2509: 0x5DCA,
+ 2510: 0x5DCB,
+ 2511: 0x5DCC,
+ 2512: 0x5DCE,
+ 2513: 0x5DCF,
+ 2514: 0x5DD0,
+ 2515: 0x5DD1,
+ 2516: 0x5DD2,
+ 2517: 0x5DD3,
+ 2518: 0x5DD4,
+ 2519: 0x5DD5,
+ 2520: 0x5DD6,
+ 2521: 0x5DD7,
+ 2522: 0x5DD8,
+ 2523: 0x5DD9,
+ 2524: 0x5DDA,
+ 2525: 0x5DDC,
+ 2526: 0x5DDF,
+ 2527: 0x5DE0,
+ 2528: 0x5DE3,
+ 2529: 0x5DE4,
+ 2530: 0x5DEA,
+ 2531: 0x5DEC,
+ 2532: 0x5DED,
+ 2533: 0x5DF0,
+ 2534: 0x5DF5,
+ 2535: 0x5DF6,
+ 2536: 0x5DF8,
+ 2537: 0x5DF9,
+ 2538: 0x5DFA,
+ 2539: 0x5DFB,
+ 2540: 0x5DFC,
+ 2541: 0x5DFF,
+ 2542: 0x5E00,
+ 2543: 0x5E04,
+ 2544: 0x5E07,
+ 2545: 0x5E09,
+ 2546: 0x5E0A,
+ 2547: 0x5E0B,
+ 2548: 0x5E0D,
+ 2549: 0x5E0E,
+ 2550: 0x5E12,
+ 2551: 0x5E13,
+ 2552: 0x5E17,
+ 2553: 0x5E1E,
+ 2554: 0x5E1F,
+ 2555: 0x5E20,
+ 2556: 0x5E21,
+ 2557: 0x5E22,
+ 2558: 0x5E23,
+ 2559: 0x5E24,
+ 2560: 0x5E25,
+ 2561: 0x5E28,
+ 2562: 0x5E29,
+ 2563: 0x5E2A,
+ 2564: 0x5E2B,
+ 2565: 0x5E2C,
+ 2566: 0x5E2F,
+ 2567: 0x5E30,
+ 2568: 0x5E32,
+ 2569: 0x5E33,
+ 2570: 0x5E34,
+ 2571: 0x5E35,
+ 2572: 0x5E36,
+ 2573: 0x5E39,
+ 2574: 0x5E3A,
+ 2575: 0x5E3E,
+ 2576: 0x5E3F,
+ 2577: 0x5E40,
+ 2578: 0x5E41,
+ 2579: 0x5E43,
+ 2580: 0x5E46,
+ 2581: 0x5E47,
+ 2582: 0x5E48,
+ 2583: 0x5E49,
+ 2584: 0x5E4A,
+ 2585: 0x5E4B,
+ 2586: 0x5E4D,
+ 2587: 0x5E4E,
+ 2588: 0x5E4F,
+ 2589: 0x5E50,
+ 2590: 0x5E51,
+ 2591: 0x5E52,
+ 2592: 0x5E53,
+ 2593: 0x5E56,
+ 2594: 0x5E57,
+ 2595: 0x5E58,
+ 2596: 0x5E59,
+ 2597: 0x5E5A,
+ 2598: 0x5E5C,
+ 2599: 0x5E5D,
+ 2600: 0x5E5F,
+ 2601: 0x5E60,
+ 2602: 0x5E63,
+ 2603: 0x5E64,
+ 2604: 0x5E65,
+ 2605: 0x5E66,
+ 2606: 0x5E67,
+ 2607: 0x5E68,
+ 2608: 0x5E69,
+ 2609: 0x5E6A,
+ 2610: 0x5E6B,
+ 2611: 0x5E6C,
+ 2612: 0x5E6D,
+ 2613: 0x5E6E,
+ 2614: 0x5E6F,
+ 2615: 0x5E70,
+ 2616: 0x5E71,
+ 2617: 0x5E75,
+ 2618: 0x5E77,
+ 2619: 0x5E79,
+ 2620: 0x5E7E,
+ 2621: 0x5E81,
+ 2622: 0x5E82,
+ 2623: 0x5E83,
+ 2624: 0x5E85,
+ 2625: 0x5E88,
+ 2626: 0x5E89,
+ 2627: 0x5E8C,
+ 2628: 0x5E8D,
+ 2629: 0x5E8E,
+ 2630: 0x5E92,
+ 2631: 0x5E98,
+ 2632: 0x5E9B,
+ 2633: 0x5E9D,
+ 2634: 0x5EA1,
+ 2635: 0x5EA2,
+ 2636: 0x5EA3,
+ 2637: 0x5EA4,
+ 2638: 0x5EA8,
+ 2639: 0x5EA9,
+ 2640: 0x5EAA,
+ 2641: 0x5EAB,
+ 2642: 0x5EAC,
+ 2643: 0x5EAE,
+ 2644: 0x5EAF,
+ 2645: 0x5EB0,
+ 2646: 0x5EB1,
+ 2647: 0x5EB2,
+ 2648: 0x5EB4,
+ 2649: 0x5EBA,
+ 2650: 0x5EBB,
+ 2651: 0x5EBC,
+ 2652: 0x5EBD,
+ 2653: 0x5EBF,
+ 2654: 0x5EC0,
+ 2655: 0x5EC1,
+ 2656: 0x5EC2,
+ 2657: 0x5EC3,
+ 2658: 0x5EC4,
+ 2659: 0x5EC5,
+ 2660: 0x5EC6,
+ 2661: 0x5EC7,
+ 2662: 0x5EC8,
+ 2663: 0x5ECB,
+ 2664: 0x5ECC,
+ 2665: 0x5ECD,
+ 2666: 0x5ECE,
+ 2667: 0x5ECF,
+ 2668: 0x5ED0,
+ 2669: 0x5ED4,
+ 2670: 0x5ED5,
+ 2671: 0x5ED7,
+ 2672: 0x5ED8,
+ 2673: 0x5ED9,
+ 2674: 0x5EDA,
+ 2675: 0x5EDC,
+ 2676: 0x5EDD,
+ 2677: 0x5EDE,
+ 2678: 0x5EDF,
+ 2679: 0x5EE0,
+ 2680: 0x5EE1,
+ 2681: 0x5EE2,
+ 2682: 0x5EE3,
+ 2683: 0x5EE4,
+ 2684: 0x5EE5,
+ 2685: 0x5EE6,
+ 2686: 0x5EE7,
+ 2687: 0x5EE9,
+ 2688: 0x5EEB,
+ 2689: 0x5EEC,
+ 2690: 0x5EED,
+ 2691: 0x5EEE,
+ 2692: 0x5EEF,
+ 2693: 0x5EF0,
+ 2694: 0x5EF1,
+ 2695: 0x5EF2,
+ 2696: 0x5EF3,
+ 2697: 0x5EF5,
+ 2698: 0x5EF8,
+ 2699: 0x5EF9,
+ 2700: 0x5EFB,
+ 2701: 0x5EFC,
+ 2702: 0x5EFD,
+ 2703: 0x5F05,
+ 2704: 0x5F06,
+ 2705: 0x5F07,
+ 2706: 0x5F09,
+ 2707: 0x5F0C,
+ 2708: 0x5F0D,
+ 2709: 0x5F0E,
+ 2710: 0x5F10,
+ 2711: 0x5F12,
+ 2712: 0x5F14,
+ 2713: 0x5F16,
+ 2714: 0x5F19,
+ 2715: 0x5F1A,
+ 2716: 0x5F1C,
+ 2717: 0x5F1D,
+ 2718: 0x5F1E,
+ 2719: 0x5F21,
+ 2720: 0x5F22,
+ 2721: 0x5F23,
+ 2722: 0x5F24,
+ 2723: 0x5F28,
+ 2724: 0x5F2B,
+ 2725: 0x5F2C,
+ 2726: 0x5F2E,
+ 2727: 0x5F30,
+ 2728: 0x5F32,
+ 2729: 0x5F33,
+ 2730: 0x5F34,
+ 2731: 0x5F35,
+ 2732: 0x5F36,
+ 2733: 0x5F37,
+ 2734: 0x5F38,
+ 2735: 0x5F3B,
+ 2736: 0x5F3D,
+ 2737: 0x5F3E,
+ 2738: 0x5F3F,
+ 2739: 0x5F41,
+ 2740: 0x5F42,
+ 2741: 0x5F43,
+ 2742: 0x5F44,
+ 2743: 0x5F45,
+ 2744: 0x5F46,
+ 2745: 0x5F47,
+ 2746: 0x5F48,
+ 2747: 0x5F49,
+ 2748: 0x5F4A,
+ 2749: 0x5F4B,
+ 2750: 0x5F4C,
+ 2751: 0x5F4D,
+ 2752: 0x5F4E,
+ 2753: 0x5F4F,
+ 2754: 0x5F51,
+ 2755: 0x5F54,
+ 2756: 0x5F59,
+ 2757: 0x5F5A,
+ 2758: 0x5F5B,
+ 2759: 0x5F5C,
+ 2760: 0x5F5E,
+ 2761: 0x5F5F,
+ 2762: 0x5F60,
+ 2763: 0x5F63,
+ 2764: 0x5F65,
+ 2765: 0x5F67,
+ 2766: 0x5F68,
+ 2767: 0x5F6B,
+ 2768: 0x5F6E,
+ 2769: 0x5F6F,
+ 2770: 0x5F72,
+ 2771: 0x5F74,
+ 2772: 0x5F75,
+ 2773: 0x5F76,
+ 2774: 0x5F78,
+ 2775: 0x5F7A,
+ 2776: 0x5F7D,
+ 2777: 0x5F7E,
+ 2778: 0x5F7F,
+ 2779: 0x5F83,
+ 2780: 0x5F86,
+ 2781: 0x5F8D,
+ 2782: 0x5F8E,
+ 2783: 0x5F8F,
+ 2784: 0x5F91,
+ 2785: 0x5F93,
+ 2786: 0x5F94,
+ 2787: 0x5F96,
+ 2788: 0x5F9A,
+ 2789: 0x5F9B,
+ 2790: 0x5F9D,
+ 2791: 0x5F9E,
+ 2792: 0x5F9F,
+ 2793: 0x5FA0,
+ 2794: 0x5FA2,
+ 2795: 0x5FA3,
+ 2796: 0x5FA4,
+ 2797: 0x5FA5,
+ 2798: 0x5FA6,
+ 2799: 0x5FA7,
+ 2800: 0x5FA9,
+ 2801: 0x5FAB,
+ 2802: 0x5FAC,
+ 2803: 0x5FAF,
+ 2804: 0x5FB0,
+ 2805: 0x5FB1,
+ 2806: 0x5FB2,
+ 2807: 0x5FB3,
+ 2808: 0x5FB4,
+ 2809: 0x5FB6,
+ 2810: 0x5FB8,
+ 2811: 0x5FB9,
+ 2812: 0x5FBA,
+ 2813: 0x5FBB,
+ 2814: 0x5FBE,
+ 2815: 0x5FBF,
+ 2816: 0x5FC0,
+ 2817: 0x5FC1,
+ 2818: 0x5FC2,
+ 2819: 0x5FC7,
+ 2820: 0x5FC8,
+ 2821: 0x5FCA,
+ 2822: 0x5FCB,
+ 2823: 0x5FCE,
+ 2824: 0x5FD3,
+ 2825: 0x5FD4,
+ 2826: 0x5FD5,
+ 2827: 0x5FDA,
+ 2828: 0x5FDB,
+ 2829: 0x5FDC,
+ 2830: 0x5FDE,
+ 2831: 0x5FDF,
+ 2832: 0x5FE2,
+ 2833: 0x5FE3,
+ 2834: 0x5FE5,
+ 2835: 0x5FE6,
+ 2836: 0x5FE8,
+ 2837: 0x5FE9,
+ 2838: 0x5FEC,
+ 2839: 0x5FEF,
+ 2840: 0x5FF0,
+ 2841: 0x5FF2,
+ 2842: 0x5FF3,
+ 2843: 0x5FF4,
+ 2844: 0x5FF6,
+ 2845: 0x5FF7,
+ 2846: 0x5FF9,
+ 2847: 0x5FFA,
+ 2848: 0x5FFC,
+ 2849: 0x6007,
+ 2850: 0x6008,
+ 2851: 0x6009,
+ 2852: 0x600B,
+ 2853: 0x600C,
+ 2854: 0x6010,
+ 2855: 0x6011,
+ 2856: 0x6013,
+ 2857: 0x6017,
+ 2858: 0x6018,
+ 2859: 0x601A,
+ 2860: 0x601E,
+ 2861: 0x601F,
+ 2862: 0x6022,
+ 2863: 0x6023,
+ 2864: 0x6024,
+ 2865: 0x602C,
+ 2866: 0x602D,
+ 2867: 0x602E,
+ 2868: 0x6030,
+ 2869: 0x6031,
+ 2870: 0x6032,
+ 2871: 0x6033,
+ 2872: 0x6034,
+ 2873: 0x6036,
+ 2874: 0x6037,
+ 2875: 0x6038,
+ 2876: 0x6039,
+ 2877: 0x603A,
+ 2878: 0x603D,
+ 2879: 0x603E,
+ 2880: 0x6040,
+ 2881: 0x6044,
+ 2882: 0x6045,
+ 2883: 0x6046,
+ 2884: 0x6047,
+ 2885: 0x6048,
+ 2886: 0x6049,
+ 2887: 0x604A,
+ 2888: 0x604C,
+ 2889: 0x604E,
+ 2890: 0x604F,
+ 2891: 0x6051,
+ 2892: 0x6053,
+ 2893: 0x6054,
+ 2894: 0x6056,
+ 2895: 0x6057,
+ 2896: 0x6058,
+ 2897: 0x605B,
+ 2898: 0x605C,
+ 2899: 0x605E,
+ 2900: 0x605F,
+ 2901: 0x6060,
+ 2902: 0x6061,
+ 2903: 0x6065,
+ 2904: 0x6066,
+ 2905: 0x606E,
+ 2906: 0x6071,
+ 2907: 0x6072,
+ 2908: 0x6074,
+ 2909: 0x6075,
+ 2910: 0x6077,
+ 2911: 0x607E,
+ 2912: 0x6080,
+ 2913: 0x6081,
+ 2914: 0x6082,
+ 2915: 0x6085,
+ 2916: 0x6086,
+ 2917: 0x6087,
+ 2918: 0x6088,
+ 2919: 0x608A,
+ 2920: 0x608B,
+ 2921: 0x608E,
+ 2922: 0x608F,
+ 2923: 0x6090,
+ 2924: 0x6091,
+ 2925: 0x6093,
+ 2926: 0x6095,
+ 2927: 0x6097,
+ 2928: 0x6098,
+ 2929: 0x6099,
+ 2930: 0x609C,
+ 2931: 0x609E,
+ 2932: 0x60A1,
+ 2933: 0x60A2,
+ 2934: 0x60A4,
+ 2935: 0x60A5,
+ 2936: 0x60A7,
+ 2937: 0x60A9,
+ 2938: 0x60AA,
+ 2939: 0x60AE,
+ 2940: 0x60B0,
+ 2941: 0x60B3,
+ 2942: 0x60B5,
+ 2943: 0x60B6,
+ 2944: 0x60B7,
+ 2945: 0x60B9,
+ 2946: 0x60BA,
+ 2947: 0x60BD,
+ 2948: 0x60BE,
+ 2949: 0x60BF,
+ 2950: 0x60C0,
+ 2951: 0x60C1,
+ 2952: 0x60C2,
+ 2953: 0x60C3,
+ 2954: 0x60C4,
+ 2955: 0x60C7,
+ 2956: 0x60C8,
+ 2957: 0x60C9,
+ 2958: 0x60CC,
+ 2959: 0x60CD,
+ 2960: 0x60CE,
+ 2961: 0x60CF,
+ 2962: 0x60D0,
+ 2963: 0x60D2,
+ 2964: 0x60D3,
+ 2965: 0x60D4,
+ 2966: 0x60D6,
+ 2967: 0x60D7,
+ 2968: 0x60D9,
+ 2969: 0x60DB,
+ 2970: 0x60DE,
+ 2971: 0x60E1,
+ 2972: 0x60E2,
+ 2973: 0x60E3,
+ 2974: 0x60E4,
+ 2975: 0x60E5,
+ 2976: 0x60EA,
+ 2977: 0x60F1,
+ 2978: 0x60F2,
+ 2979: 0x60F5,
+ 2980: 0x60F7,
+ 2981: 0x60F8,
+ 2982: 0x60FB,
+ 2983: 0x60FC,
+ 2984: 0x60FD,
+ 2985: 0x60FE,
+ 2986: 0x60FF,
+ 2987: 0x6102,
+ 2988: 0x6103,
+ 2989: 0x6104,
+ 2990: 0x6105,
+ 2991: 0x6107,
+ 2992: 0x610A,
+ 2993: 0x610B,
+ 2994: 0x610C,
+ 2995: 0x6110,
+ 2996: 0x6111,
+ 2997: 0x6112,
+ 2998: 0x6113,
+ 2999: 0x6114,
+ 3000: 0x6116,
+ 3001: 0x6117,
+ 3002: 0x6118,
+ 3003: 0x6119,
+ 3004: 0x611B,
+ 3005: 0x611C,
+ 3006: 0x611D,
+ 3007: 0x611E,
+ 3008: 0x6121,
+ 3009: 0x6122,
+ 3010: 0x6125,
+ 3011: 0x6128,
+ 3012: 0x6129,
+ 3013: 0x612A,
+ 3014: 0x612C,
+ 3015: 0x612D,
+ 3016: 0x612E,
+ 3017: 0x612F,
+ 3018: 0x6130,
+ 3019: 0x6131,
+ 3020: 0x6132,
+ 3021: 0x6133,
+ 3022: 0x6134,
+ 3023: 0x6135,
+ 3024: 0x6136,
+ 3025: 0x6137,
+ 3026: 0x6138,
+ 3027: 0x6139,
+ 3028: 0x613A,
+ 3029: 0x613B,
+ 3030: 0x613C,
+ 3031: 0x613D,
+ 3032: 0x613E,
+ 3033: 0x6140,
+ 3034: 0x6141,
+ 3035: 0x6142,
+ 3036: 0x6143,
+ 3037: 0x6144,
+ 3038: 0x6145,
+ 3039: 0x6146,
+ 3040: 0x6147,
+ 3041: 0x6149,
+ 3042: 0x614B,
+ 3043: 0x614D,
+ 3044: 0x614F,
+ 3045: 0x6150,
+ 3046: 0x6152,
+ 3047: 0x6153,
+ 3048: 0x6154,
+ 3049: 0x6156,
+ 3050: 0x6157,
+ 3051: 0x6158,
+ 3052: 0x6159,
+ 3053: 0x615A,
+ 3054: 0x615B,
+ 3055: 0x615C,
+ 3056: 0x615E,
+ 3057: 0x615F,
+ 3058: 0x6160,
+ 3059: 0x6161,
+ 3060: 0x6163,
+ 3061: 0x6164,
+ 3062: 0x6165,
+ 3063: 0x6166,
+ 3064: 0x6169,
+ 3065: 0x616A,
+ 3066: 0x616B,
+ 3067: 0x616C,
+ 3068: 0x616D,
+ 3069: 0x616E,
+ 3070: 0x616F,
+ 3071: 0x6171,
+ 3072: 0x6172,
+ 3073: 0x6173,
+ 3074: 0x6174,
+ 3075: 0x6176,
+ 3076: 0x6178,
+ 3077: 0x6179,
+ 3078: 0x617A,
+ 3079: 0x617B,
+ 3080: 0x617C,
+ 3081: 0x617D,
+ 3082: 0x617E,
+ 3083: 0x617F,
+ 3084: 0x6180,
+ 3085: 0x6181,
+ 3086: 0x6182,
+ 3087: 0x6183,
+ 3088: 0x6184,
+ 3089: 0x6185,
+ 3090: 0x6186,
+ 3091: 0x6187,
+ 3092: 0x6188,
+ 3093: 0x6189,
+ 3094: 0x618A,
+ 3095: 0x618C,
+ 3096: 0x618D,
+ 3097: 0x618F,
+ 3098: 0x6190,
+ 3099: 0x6191,
+ 3100: 0x6192,
+ 3101: 0x6193,
+ 3102: 0x6195,
+ 3103: 0x6196,
+ 3104: 0x6197,
+ 3105: 0x6198,
+ 3106: 0x6199,
+ 3107: 0x619A,
+ 3108: 0x619B,
+ 3109: 0x619C,
+ 3110: 0x619E,
+ 3111: 0x619F,
+ 3112: 0x61A0,
+ 3113: 0x61A1,
+ 3114: 0x61A2,
+ 3115: 0x61A3,
+ 3116: 0x61A4,
+ 3117: 0x61A5,
+ 3118: 0x61A6,
+ 3119: 0x61AA,
+ 3120: 0x61AB,
+ 3121: 0x61AD,
+ 3122: 0x61AE,
+ 3123: 0x61AF,
+ 3124: 0x61B0,
+ 3125: 0x61B1,
+ 3126: 0x61B2,
+ 3127: 0x61B3,
+ 3128: 0x61B4,
+ 3129: 0x61B5,
+ 3130: 0x61B6,
+ 3131: 0x61B8,
+ 3132: 0x61B9,
+ 3133: 0x61BA,
+ 3134: 0x61BB,
+ 3135: 0x61BC,
+ 3136: 0x61BD,
+ 3137: 0x61BF,
+ 3138: 0x61C0,
+ 3139: 0x61C1,
+ 3140: 0x61C3,
+ 3141: 0x61C4,
+ 3142: 0x61C5,
+ 3143: 0x61C6,
+ 3144: 0x61C7,
+ 3145: 0x61C9,
+ 3146: 0x61CC,
+ 3147: 0x61CD,
+ 3148: 0x61CE,
+ 3149: 0x61CF,
+ 3150: 0x61D0,
+ 3151: 0x61D3,
+ 3152: 0x61D5,
+ 3153: 0x61D6,
+ 3154: 0x61D7,
+ 3155: 0x61D8,
+ 3156: 0x61D9,
+ 3157: 0x61DA,
+ 3158: 0x61DB,
+ 3159: 0x61DC,
+ 3160: 0x61DD,
+ 3161: 0x61DE,
+ 3162: 0x61DF,
+ 3163: 0x61E0,
+ 3164: 0x61E1,
+ 3165: 0x61E2,
+ 3166: 0x61E3,
+ 3167: 0x61E4,
+ 3168: 0x61E5,
+ 3169: 0x61E7,
+ 3170: 0x61E8,
+ 3171: 0x61E9,
+ 3172: 0x61EA,
+ 3173: 0x61EB,
+ 3174: 0x61EC,
+ 3175: 0x61ED,
+ 3176: 0x61EE,
+ 3177: 0x61EF,
+ 3178: 0x61F0,
+ 3179: 0x61F1,
+ 3180: 0x61F2,
+ 3181: 0x61F3,
+ 3182: 0x61F4,
+ 3183: 0x61F6,
+ 3184: 0x61F7,
+ 3185: 0x61F8,
+ 3186: 0x61F9,
+ 3187: 0x61FA,
+ 3188: 0x61FB,
+ 3189: 0x61FC,
+ 3190: 0x61FD,
+ 3191: 0x61FE,
+ 3192: 0x6200,
+ 3193: 0x6201,
+ 3194: 0x6202,
+ 3195: 0x6203,
+ 3196: 0x6204,
+ 3197: 0x6205,
+ 3198: 0x6207,
+ 3199: 0x6209,
+ 3200: 0x6213,
+ 3201: 0x6214,
+ 3202: 0x6219,
+ 3203: 0x621C,
+ 3204: 0x621D,
+ 3205: 0x621E,
+ 3206: 0x6220,
+ 3207: 0x6223,
+ 3208: 0x6226,
+ 3209: 0x6227,
+ 3210: 0x6228,
+ 3211: 0x6229,
+ 3212: 0x622B,
+ 3213: 0x622D,
+ 3214: 0x622F,
+ 3215: 0x6230,
+ 3216: 0x6231,
+ 3217: 0x6232,
+ 3218: 0x6235,
+ 3219: 0x6236,
+ 3220: 0x6238,
+ 3221: 0x6239,
+ 3222: 0x623A,
+ 3223: 0x623B,
+ 3224: 0x623C,
+ 3225: 0x6242,
+ 3226: 0x6244,
+ 3227: 0x6245,
+ 3228: 0x6246,
+ 3229: 0x624A,
+ 3230: 0x624F,
+ 3231: 0x6250,
+ 3232: 0x6255,
+ 3233: 0x6256,
+ 3234: 0x6257,
+ 3235: 0x6259,
+ 3236: 0x625A,
+ 3237: 0x625C,
+ 3238: 0x625D,
+ 3239: 0x625E,
+ 3240: 0x625F,
+ 3241: 0x6260,
+ 3242: 0x6261,
+ 3243: 0x6262,
+ 3244: 0x6264,
+ 3245: 0x6265,
+ 3246: 0x6268,
+ 3247: 0x6271,
+ 3248: 0x6272,
+ 3249: 0x6274,
+ 3250: 0x6275,
+ 3251: 0x6277,
+ 3252: 0x6278,
+ 3253: 0x627A,
+ 3254: 0x627B,
+ 3255: 0x627D,
+ 3256: 0x6281,
+ 3257: 0x6282,
+ 3258: 0x6283,
+ 3259: 0x6285,
+ 3260: 0x6286,
+ 3261: 0x6287,
+ 3262: 0x6288,
+ 3263: 0x628B,
+ 3264: 0x628C,
+ 3265: 0x628D,
+ 3266: 0x628E,
+ 3267: 0x628F,
+ 3268: 0x6290,
+ 3269: 0x6294,
+ 3270: 0x6299,
+ 3271: 0x629C,
+ 3272: 0x629D,
+ 3273: 0x629E,
+ 3274: 0x62A3,
+ 3275: 0x62A6,
+ 3276: 0x62A7,
+ 3277: 0x62A9,
+ 3278: 0x62AA,
+ 3279: 0x62AD,
+ 3280: 0x62AE,
+ 3281: 0x62AF,
+ 3282: 0x62B0,
+ 3283: 0x62B2,
+ 3284: 0x62B3,
+ 3285: 0x62B4,
+ 3286: 0x62B6,
+ 3287: 0x62B7,
+ 3288: 0x62B8,
+ 3289: 0x62BA,
+ 3290: 0x62BE,
+ 3291: 0x62C0,
+ 3292: 0x62C1,
+ 3293: 0x62C3,
+ 3294: 0x62CB,
+ 3295: 0x62CF,
+ 3296: 0x62D1,
+ 3297: 0x62D5,
+ 3298: 0x62DD,
+ 3299: 0x62DE,
+ 3300: 0x62E0,
+ 3301: 0x62E1,
+ 3302: 0x62E4,
+ 3303: 0x62EA,
+ 3304: 0x62EB,
+ 3305: 0x62F0,
+ 3306: 0x62F2,
+ 3307: 0x62F5,
+ 3308: 0x62F8,
+ 3309: 0x62F9,
+ 3310: 0x62FA,
+ 3311: 0x62FB,
+ 3312: 0x6300,
+ 3313: 0x6303,
+ 3314: 0x6304,
+ 3315: 0x6305,
+ 3316: 0x6306,
+ 3317: 0x630A,
+ 3318: 0x630B,
+ 3319: 0x630C,
+ 3320: 0x630D,
+ 3321: 0x630F,
+ 3322: 0x6310,
+ 3323: 0x6312,
+ 3324: 0x6313,
+ 3325: 0x6314,
+ 3326: 0x6315,
+ 3327: 0x6317,
+ 3328: 0x6318,
+ 3329: 0x6319,
+ 3330: 0x631C,
+ 3331: 0x6326,
+ 3332: 0x6327,
+ 3333: 0x6329,
+ 3334: 0x632C,
+ 3335: 0x632D,
+ 3336: 0x632E,
+ 3337: 0x6330,
+ 3338: 0x6331,
+ 3339: 0x6333,
+ 3340: 0x6334,
+ 3341: 0x6335,
+ 3342: 0x6336,
+ 3343: 0x6337,
+ 3344: 0x6338,
+ 3345: 0x633B,
+ 3346: 0x633C,
+ 3347: 0x633E,
+ 3348: 0x633F,
+ 3349: 0x6340,
+ 3350: 0x6341,
+ 3351: 0x6344,
+ 3352: 0x6347,
+ 3353: 0x6348,
+ 3354: 0x634A,
+ 3355: 0x6351,
+ 3356: 0x6352,
+ 3357: 0x6353,
+ 3358: 0x6354,
+ 3359: 0x6356,
+ 3360: 0x6357,
+ 3361: 0x6358,
+ 3362: 0x6359,
+ 3363: 0x635A,
+ 3364: 0x635B,
+ 3365: 0x635C,
+ 3366: 0x635D,
+ 3367: 0x6360,
+ 3368: 0x6364,
+ 3369: 0x6365,
+ 3370: 0x6366,
+ 3371: 0x6368,
+ 3372: 0x636A,
+ 3373: 0x636B,
+ 3374: 0x636C,
+ 3375: 0x636F,
+ 3376: 0x6370,
+ 3377: 0x6372,
+ 3378: 0x6373,
+ 3379: 0x6374,
+ 3380: 0x6375,
+ 3381: 0x6378,
+ 3382: 0x6379,
+ 3383: 0x637C,
+ 3384: 0x637D,
+ 3385: 0x637E,
+ 3386: 0x637F,
+ 3387: 0x6381,
+ 3388: 0x6383,
+ 3389: 0x6384,
+ 3390: 0x6385,
+ 3391: 0x6386,
+ 3392: 0x638B,
+ 3393: 0x638D,
+ 3394: 0x6391,
+ 3395: 0x6393,
+ 3396: 0x6394,
+ 3397: 0x6395,
+ 3398: 0x6397,
+ 3399: 0x6399,
+ 3400: 0x639A,
+ 3401: 0x639B,
+ 3402: 0x639C,
+ 3403: 0x639D,
+ 3404: 0x639E,
+ 3405: 0x639F,
+ 3406: 0x63A1,
+ 3407: 0x63A4,
+ 3408: 0x63A6,
+ 3409: 0x63AB,
+ 3410: 0x63AF,
+ 3411: 0x63B1,
+ 3412: 0x63B2,
+ 3413: 0x63B5,
+ 3414: 0x63B6,
+ 3415: 0x63B9,
+ 3416: 0x63BB,
+ 3417: 0x63BD,
+ 3418: 0x63BF,
+ 3419: 0x63C0,
+ 3420: 0x63C1,
+ 3421: 0x63C2,
+ 3422: 0x63C3,
+ 3423: 0x63C5,
+ 3424: 0x63C7,
+ 3425: 0x63C8,
+ 3426: 0x63CA,
+ 3427: 0x63CB,
+ 3428: 0x63CC,
+ 3429: 0x63D1,
+ 3430: 0x63D3,
+ 3431: 0x63D4,
+ 3432: 0x63D5,
+ 3433: 0x63D7,
+ 3434: 0x63D8,
+ 3435: 0x63D9,
+ 3436: 0x63DA,
+ 3437: 0x63DB,
+ 3438: 0x63DC,
+ 3439: 0x63DD,
+ 3440: 0x63DF,
+ 3441: 0x63E2,
+ 3442: 0x63E4,
+ 3443: 0x63E5,
+ 3444: 0x63E6,
+ 3445: 0x63E7,
+ 3446: 0x63E8,
+ 3447: 0x63EB,
+ 3448: 0x63EC,
+ 3449: 0x63EE,
+ 3450: 0x63EF,
+ 3451: 0x63F0,
+ 3452: 0x63F1,
+ 3453: 0x63F3,
+ 3454: 0x63F5,
+ 3455: 0x63F7,
+ 3456: 0x63F9,
+ 3457: 0x63FA,
+ 3458: 0x63FB,
+ 3459: 0x63FC,
+ 3460: 0x63FE,
+ 3461: 0x6403,
+ 3462: 0x6404,
+ 3463: 0x6406,
+ 3464: 0x6407,
+ 3465: 0x6408,
+ 3466: 0x6409,
+ 3467: 0x640A,
+ 3468: 0x640D,
+ 3469: 0x640E,
+ 3470: 0x6411,
+ 3471: 0x6412,
+ 3472: 0x6415,
+ 3473: 0x6416,
+ 3474: 0x6417,
+ 3475: 0x6418,
+ 3476: 0x6419,
+ 3477: 0x641A,
+ 3478: 0x641D,
+ 3479: 0x641F,
+ 3480: 0x6422,
+ 3481: 0x6423,
+ 3482: 0x6424,
+ 3483: 0x6425,
+ 3484: 0x6427,
+ 3485: 0x6428,
+ 3486: 0x6429,
+ 3487: 0x642B,
+ 3488: 0x642E,
+ 3489: 0x642F,
+ 3490: 0x6430,
+ 3491: 0x6431,
+ 3492: 0x6432,
+ 3493: 0x6433,
+ 3494: 0x6435,
+ 3495: 0x6436,
+ 3496: 0x6437,
+ 3497: 0x6438,
+ 3498: 0x6439,
+ 3499: 0x643B,
+ 3500: 0x643C,
+ 3501: 0x643E,
+ 3502: 0x6440,
+ 3503: 0x6442,
+ 3504: 0x6443,
+ 3505: 0x6449,
+ 3506: 0x644B,
+ 3507: 0x644C,
+ 3508: 0x644D,
+ 3509: 0x644E,
+ 3510: 0x644F,
+ 3511: 0x6450,
+ 3512: 0x6451,
+ 3513: 0x6453,
+ 3514: 0x6455,
+ 3515: 0x6456,
+ 3516: 0x6457,
+ 3517: 0x6459,
+ 3518: 0x645A,
+ 3519: 0x645B,
+ 3520: 0x645C,
+ 3521: 0x645D,
+ 3522: 0x645F,
+ 3523: 0x6460,
+ 3524: 0x6461,
+ 3525: 0x6462,
+ 3526: 0x6463,
+ 3527: 0x6464,
+ 3528: 0x6465,
+ 3529: 0x6466,
+ 3530: 0x6468,
+ 3531: 0x646A,
+ 3532: 0x646B,
+ 3533: 0x646C,
+ 3534: 0x646E,
+ 3535: 0x646F,
+ 3536: 0x6470,
+ 3537: 0x6471,
+ 3538: 0x6472,
+ 3539: 0x6473,
+ 3540: 0x6474,
+ 3541: 0x6475,
+ 3542: 0x6476,
+ 3543: 0x6477,
+ 3544: 0x647B,
+ 3545: 0x647C,
+ 3546: 0x647D,
+ 3547: 0x647E,
+ 3548: 0x647F,
+ 3549: 0x6480,
+ 3550: 0x6481,
+ 3551: 0x6483,
+ 3552: 0x6486,
+ 3553: 0x6488,
+ 3554: 0x6489,
+ 3555: 0x648A,
+ 3556: 0x648B,
+ 3557: 0x648C,
+ 3558: 0x648D,
+ 3559: 0x648E,
+ 3560: 0x648F,
+ 3561: 0x6490,
+ 3562: 0x6493,
+ 3563: 0x6494,
+ 3564: 0x6497,
+ 3565: 0x6498,
+ 3566: 0x649A,
+ 3567: 0x649B,
+ 3568: 0x649C,
+ 3569: 0x649D,
+ 3570: 0x649F,
+ 3571: 0x64A0,
+ 3572: 0x64A1,
+ 3573: 0x64A2,
+ 3574: 0x64A3,
+ 3575: 0x64A5,
+ 3576: 0x64A6,
+ 3577: 0x64A7,
+ 3578: 0x64A8,
+ 3579: 0x64AA,
+ 3580: 0x64AB,
+ 3581: 0x64AF,
+ 3582: 0x64B1,
+ 3583: 0x64B2,
+ 3584: 0x64B3,
+ 3585: 0x64B4,
+ 3586: 0x64B6,
+ 3587: 0x64B9,
+ 3588: 0x64BB,
+ 3589: 0x64BD,
+ 3590: 0x64BE,
+ 3591: 0x64BF,
+ 3592: 0x64C1,
+ 3593: 0x64C3,
+ 3594: 0x64C4,
+ 3595: 0x64C6,
+ 3596: 0x64C7,
+ 3597: 0x64C8,
+ 3598: 0x64C9,
+ 3599: 0x64CA,
+ 3600: 0x64CB,
+ 3601: 0x64CC,
+ 3602: 0x64CF,
+ 3603: 0x64D1,
+ 3604: 0x64D3,
+ 3605: 0x64D4,
+ 3606: 0x64D5,
+ 3607: 0x64D6,
+ 3608: 0x64D9,
+ 3609: 0x64DA,
+ 3610: 0x64DB,
+ 3611: 0x64DC,
+ 3612: 0x64DD,
+ 3613: 0x64DF,
+ 3614: 0x64E0,
+ 3615: 0x64E1,
+ 3616: 0x64E3,
+ 3617: 0x64E5,
+ 3618: 0x64E7,
+ 3619: 0x64E8,
+ 3620: 0x64E9,
+ 3621: 0x64EA,
+ 3622: 0x64EB,
+ 3623: 0x64EC,
+ 3624: 0x64ED,
+ 3625: 0x64EE,
+ 3626: 0x64EF,
+ 3627: 0x64F0,
+ 3628: 0x64F1,
+ 3629: 0x64F2,
+ 3630: 0x64F3,
+ 3631: 0x64F4,
+ 3632: 0x64F5,
+ 3633: 0x64F6,
+ 3634: 0x64F7,
+ 3635: 0x64F8,
+ 3636: 0x64F9,
+ 3637: 0x64FA,
+ 3638: 0x64FB,
+ 3639: 0x64FC,
+ 3640: 0x64FD,
+ 3641: 0x64FE,
+ 3642: 0x64FF,
+ 3643: 0x6501,
+ 3644: 0x6502,
+ 3645: 0x6503,
+ 3646: 0x6504,
+ 3647: 0x6505,
+ 3648: 0x6506,
+ 3649: 0x6507,
+ 3650: 0x6508,
+ 3651: 0x650A,
+ 3652: 0x650B,
+ 3653: 0x650C,
+ 3654: 0x650D,
+ 3655: 0x650E,
+ 3656: 0x650F,
+ 3657: 0x6510,
+ 3658: 0x6511,
+ 3659: 0x6513,
+ 3660: 0x6514,
+ 3661: 0x6515,
+ 3662: 0x6516,
+ 3663: 0x6517,
+ 3664: 0x6519,
+ 3665: 0x651A,
+ 3666: 0x651B,
+ 3667: 0x651C,
+ 3668: 0x651D,
+ 3669: 0x651E,
+ 3670: 0x651F,
+ 3671: 0x6520,
+ 3672: 0x6521,
+ 3673: 0x6522,
+ 3674: 0x6523,
+ 3675: 0x6524,
+ 3676: 0x6526,
+ 3677: 0x6527,
+ 3678: 0x6528,
+ 3679: 0x6529,
+ 3680: 0x652A,
+ 3681: 0x652C,
+ 3682: 0x652D,
+ 3683: 0x6530,
+ 3684: 0x6531,
+ 3685: 0x6532,
+ 3686: 0x6533,
+ 3687: 0x6537,
+ 3688: 0x653A,
+ 3689: 0x653C,
+ 3690: 0x653D,
+ 3691: 0x6540,
+ 3692: 0x6541,
+ 3693: 0x6542,
+ 3694: 0x6543,
+ 3695: 0x6544,
+ 3696: 0x6546,
+ 3697: 0x6547,
+ 3698: 0x654A,
+ 3699: 0x654B,
+ 3700: 0x654D,
+ 3701: 0x654E,
+ 3702: 0x6550,
+ 3703: 0x6552,
+ 3704: 0x6553,
+ 3705: 0x6554,
+ 3706: 0x6557,
+ 3707: 0x6558,
+ 3708: 0x655A,
+ 3709: 0x655C,
+ 3710: 0x655F,
+ 3711: 0x6560,
+ 3712: 0x6561,
+ 3713: 0x6564,
+ 3714: 0x6565,
+ 3715: 0x6567,
+ 3716: 0x6568,
+ 3717: 0x6569,
+ 3718: 0x656A,
+ 3719: 0x656D,
+ 3720: 0x656E,
+ 3721: 0x656F,
+ 3722: 0x6571,
+ 3723: 0x6573,
+ 3724: 0x6575,
+ 3725: 0x6576,
+ 3726: 0x6578,
+ 3727: 0x6579,
+ 3728: 0x657A,
+ 3729: 0x657B,
+ 3730: 0x657C,
+ 3731: 0x657D,
+ 3732: 0x657E,
+ 3733: 0x657F,
+ 3734: 0x6580,
+ 3735: 0x6581,
+ 3736: 0x6582,
+ 3737: 0x6583,
+ 3738: 0x6584,
+ 3739: 0x6585,
+ 3740: 0x6586,
+ 3741: 0x6588,
+ 3742: 0x6589,
+ 3743: 0x658A,
+ 3744: 0x658D,
+ 3745: 0x658E,
+ 3746: 0x658F,
+ 3747: 0x6592,
+ 3748: 0x6594,
+ 3749: 0x6595,
+ 3750: 0x6596,
+ 3751: 0x6598,
+ 3752: 0x659A,
+ 3753: 0x659D,
+ 3754: 0x659E,
+ 3755: 0x65A0,
+ 3756: 0x65A2,
+ 3757: 0x65A3,
+ 3758: 0x65A6,
+ 3759: 0x65A8,
+ 3760: 0x65AA,
+ 3761: 0x65AC,
+ 3762: 0x65AE,
+ 3763: 0x65B1,
+ 3764: 0x65B2,
+ 3765: 0x65B3,
+ 3766: 0x65B4,
+ 3767: 0x65B5,
+ 3768: 0x65B6,
+ 3769: 0x65B7,
+ 3770: 0x65B8,
+ 3771: 0x65BA,
+ 3772: 0x65BB,
+ 3773: 0x65BE,
+ 3774: 0x65BF,
+ 3775: 0x65C0,
+ 3776: 0x65C2,
+ 3777: 0x65C7,
+ 3778: 0x65C8,
+ 3779: 0x65C9,
+ 3780: 0x65CA,
+ 3781: 0x65CD,
+ 3782: 0x65D0,
+ 3783: 0x65D1,
+ 3784: 0x65D3,
+ 3785: 0x65D4,
+ 3786: 0x65D5,
+ 3787: 0x65D8,
+ 3788: 0x65D9,
+ 3789: 0x65DA,
+ 3790: 0x65DB,
+ 3791: 0x65DC,
+ 3792: 0x65DD,
+ 3793: 0x65DE,
+ 3794: 0x65DF,
+ 3795: 0x65E1,
+ 3796: 0x65E3,
+ 3797: 0x65E4,
+ 3798: 0x65EA,
+ 3799: 0x65EB,
+ 3800: 0x65F2,
+ 3801: 0x65F3,
+ 3802: 0x65F4,
+ 3803: 0x65F5,
+ 3804: 0x65F8,
+ 3805: 0x65F9,
+ 3806: 0x65FB,
+ 3807: 0x65FC,
+ 3808: 0x65FD,
+ 3809: 0x65FE,
+ 3810: 0x65FF,
+ 3811: 0x6601,
+ 3812: 0x6604,
+ 3813: 0x6605,
+ 3814: 0x6607,
+ 3815: 0x6608,
+ 3816: 0x6609,
+ 3817: 0x660B,
+ 3818: 0x660D,
+ 3819: 0x6610,
+ 3820: 0x6611,
+ 3821: 0x6612,
+ 3822: 0x6616,
+ 3823: 0x6617,
+ 3824: 0x6618,
+ 3825: 0x661A,
+ 3826: 0x661B,
+ 3827: 0x661C,
+ 3828: 0x661E,
+ 3829: 0x6621,
+ 3830: 0x6622,
+ 3831: 0x6623,
+ 3832: 0x6624,
+ 3833: 0x6626,
+ 3834: 0x6629,
+ 3835: 0x662A,
+ 3836: 0x662B,
+ 3837: 0x662C,
+ 3838: 0x662E,
+ 3839: 0x6630,
+ 3840: 0x6632,
+ 3841: 0x6633,
+ 3842: 0x6637,
+ 3843: 0x6638,
+ 3844: 0x6639,
+ 3845: 0x663A,
+ 3846: 0x663B,
+ 3847: 0x663D,
+ 3848: 0x663F,
+ 3849: 0x6640,
+ 3850: 0x6642,
+ 3851: 0x6644,
+ 3852: 0x6645,
+ 3853: 0x6646,
+ 3854: 0x6647,
+ 3855: 0x6648,
+ 3856: 0x6649,
+ 3857: 0x664A,
+ 3858: 0x664D,
+ 3859: 0x664E,
+ 3860: 0x6650,
+ 3861: 0x6651,
+ 3862: 0x6658,
+ 3863: 0x6659,
+ 3864: 0x665B,
+ 3865: 0x665C,
+ 3866: 0x665D,
+ 3867: 0x665E,
+ 3868: 0x6660,
+ 3869: 0x6662,
+ 3870: 0x6663,
+ 3871: 0x6665,
+ 3872: 0x6667,
+ 3873: 0x6669,
+ 3874: 0x666A,
+ 3875: 0x666B,
+ 3876: 0x666C,
+ 3877: 0x666D,
+ 3878: 0x6671,
+ 3879: 0x6672,
+ 3880: 0x6673,
+ 3881: 0x6675,
+ 3882: 0x6678,
+ 3883: 0x6679,
+ 3884: 0x667B,
+ 3885: 0x667C,
+ 3886: 0x667D,
+ 3887: 0x667F,
+ 3888: 0x6680,
+ 3889: 0x6681,
+ 3890: 0x6683,
+ 3891: 0x6685,
+ 3892: 0x6686,
+ 3893: 0x6688,
+ 3894: 0x6689,
+ 3895: 0x668A,
+ 3896: 0x668B,
+ 3897: 0x668D,
+ 3898: 0x668E,
+ 3899: 0x668F,
+ 3900: 0x6690,
+ 3901: 0x6692,
+ 3902: 0x6693,
+ 3903: 0x6694,
+ 3904: 0x6695,
+ 3905: 0x6698,
+ 3906: 0x6699,
+ 3907: 0x669A,
+ 3908: 0x669B,
+ 3909: 0x669C,
+ 3910: 0x669E,
+ 3911: 0x669F,
+ 3912: 0x66A0,
+ 3913: 0x66A1,
+ 3914: 0x66A2,
+ 3915: 0x66A3,
+ 3916: 0x66A4,
+ 3917: 0x66A5,
+ 3918: 0x66A6,
+ 3919: 0x66A9,
+ 3920: 0x66AA,
+ 3921: 0x66AB,
+ 3922: 0x66AC,
+ 3923: 0x66AD,
+ 3924: 0x66AF,
+ 3925: 0x66B0,
+ 3926: 0x66B1,
+ 3927: 0x66B2,
+ 3928: 0x66B3,
+ 3929: 0x66B5,
+ 3930: 0x66B6,
+ 3931: 0x66B7,
+ 3932: 0x66B8,
+ 3933: 0x66BA,
+ 3934: 0x66BB,
+ 3935: 0x66BC,
+ 3936: 0x66BD,
+ 3937: 0x66BF,
+ 3938: 0x66C0,
+ 3939: 0x66C1,
+ 3940: 0x66C2,
+ 3941: 0x66C3,
+ 3942: 0x66C4,
+ 3943: 0x66C5,
+ 3944: 0x66C6,
+ 3945: 0x66C7,
+ 3946: 0x66C8,
+ 3947: 0x66C9,
+ 3948: 0x66CA,
+ 3949: 0x66CB,
+ 3950: 0x66CC,
+ 3951: 0x66CD,
+ 3952: 0x66CE,
+ 3953: 0x66CF,
+ 3954: 0x66D0,
+ 3955: 0x66D1,
+ 3956: 0x66D2,
+ 3957: 0x66D3,
+ 3958: 0x66D4,
+ 3959: 0x66D5,
+ 3960: 0x66D6,
+ 3961: 0x66D7,
+ 3962: 0x66D8,
+ 3963: 0x66DA,
+ 3964: 0x66DE,
+ 3965: 0x66DF,
+ 3966: 0x66E0,
+ 3967: 0x66E1,
+ 3968: 0x66E2,
+ 3969: 0x66E3,
+ 3970: 0x66E4,
+ 3971: 0x66E5,
+ 3972: 0x66E7,
+ 3973: 0x66E8,
+ 3974: 0x66EA,
+ 3975: 0x66EB,
+ 3976: 0x66EC,
+ 3977: 0x66ED,
+ 3978: 0x66EE,
+ 3979: 0x66EF,
+ 3980: 0x66F1,
+ 3981: 0x66F5,
+ 3982: 0x66F6,
+ 3983: 0x66F8,
+ 3984: 0x66FA,
+ 3985: 0x66FB,
+ 3986: 0x66FD,
+ 3987: 0x6701,
+ 3988: 0x6702,
+ 3989: 0x6703,
+ 3990: 0x6704,
+ 3991: 0x6705,
+ 3992: 0x6706,
+ 3993: 0x6707,
+ 3994: 0x670C,
+ 3995: 0x670E,
+ 3996: 0x670F,
+ 3997: 0x6711,
+ 3998: 0x6712,
+ 3999: 0x6713,
+ 4000: 0x6716,
+ 4001: 0x6718,
+ 4002: 0x6719,
+ 4003: 0x671A,
+ 4004: 0x671C,
+ 4005: 0x671E,
+ 4006: 0x6720,
+ 4007: 0x6721,
+ 4008: 0x6722,
+ 4009: 0x6723,
+ 4010: 0x6724,
+ 4011: 0x6725,
+ 4012: 0x6727,
+ 4013: 0x6729,
+ 4014: 0x672E,
+ 4015: 0x6730,
+ 4016: 0x6732,
+ 4017: 0x6733,
+ 4018: 0x6736,
+ 4019: 0x6737,
+ 4020: 0x6738,
+ 4021: 0x6739,
+ 4022: 0x673B,
+ 4023: 0x673C,
+ 4024: 0x673E,
+ 4025: 0x673F,
+ 4026: 0x6741,
+ 4027: 0x6744,
+ 4028: 0x6745,
+ 4029: 0x6747,
+ 4030: 0x674A,
+ 4031: 0x674B,
+ 4032: 0x674D,
+ 4033: 0x6752,
+ 4034: 0x6754,
+ 4035: 0x6755,
+ 4036: 0x6757,
+ 4037: 0x6758,
+ 4038: 0x6759,
+ 4039: 0x675A,
+ 4040: 0x675B,
+ 4041: 0x675D,
+ 4042: 0x6762,
+ 4043: 0x6763,
+ 4044: 0x6764,
+ 4045: 0x6766,
+ 4046: 0x6767,
+ 4047: 0x676B,
+ 4048: 0x676C,
+ 4049: 0x676E,
+ 4050: 0x6771,
+ 4051: 0x6774,
+ 4052: 0x6776,
+ 4053: 0x6778,
+ 4054: 0x6779,
+ 4055: 0x677A,
+ 4056: 0x677B,
+ 4057: 0x677D,
+ 4058: 0x6780,
+ 4059: 0x6782,
+ 4060: 0x6783,
+ 4061: 0x6785,
+ 4062: 0x6786,
+ 4063: 0x6788,
+ 4064: 0x678A,
+ 4065: 0x678C,
+ 4066: 0x678D,
+ 4067: 0x678E,
+ 4068: 0x678F,
+ 4069: 0x6791,
+ 4070: 0x6792,
+ 4071: 0x6793,
+ 4072: 0x6794,
+ 4073: 0x6796,
+ 4074: 0x6799,
+ 4075: 0x679B,
+ 4076: 0x679F,
+ 4077: 0x67A0,
+ 4078: 0x67A1,
+ 4079: 0x67A4,
+ 4080: 0x67A6,
+ 4081: 0x67A9,
+ 4082: 0x67AC,
+ 4083: 0x67AE,
+ 4084: 0x67B1,
+ 4085: 0x67B2,
+ 4086: 0x67B4,
+ 4087: 0x67B9,
+ 4088: 0x67BA,
+ 4089: 0x67BB,
+ 4090: 0x67BC,
+ 4091: 0x67BD,
+ 4092: 0x67BE,
+ 4093: 0x67BF,
+ 4094: 0x67C0,
+ 4095: 0x67C2,
+ 4096: 0x67C5,
+ 4097: 0x67C6,
+ 4098: 0x67C7,
+ 4099: 0x67C8,
+ 4100: 0x67C9,
+ 4101: 0x67CA,
+ 4102: 0x67CB,
+ 4103: 0x67CC,
+ 4104: 0x67CD,
+ 4105: 0x67CE,
+ 4106: 0x67D5,
+ 4107: 0x67D6,
+ 4108: 0x67D7,
+ 4109: 0x67DB,
+ 4110: 0x67DF,
+ 4111: 0x67E1,
+ 4112: 0x67E3,
+ 4113: 0x67E4,
+ 4114: 0x67E6,
+ 4115: 0x67E7,
+ 4116: 0x67E8,
+ 4117: 0x67EA,
+ 4118: 0x67EB,
+ 4119: 0x67ED,
+ 4120: 0x67EE,
+ 4121: 0x67F2,
+ 4122: 0x67F5,
+ 4123: 0x67F6,
+ 4124: 0x67F7,
+ 4125: 0x67F8,
+ 4126: 0x67F9,
+ 4127: 0x67FA,
+ 4128: 0x67FB,
+ 4129: 0x67FC,
+ 4130: 0x67FE,
+ 4131: 0x6801,
+ 4132: 0x6802,
+ 4133: 0x6803,
+ 4134: 0x6804,
+ 4135: 0x6806,
+ 4136: 0x680D,
+ 4137: 0x6810,
+ 4138: 0x6812,
+ 4139: 0x6814,
+ 4140: 0x6815,
+ 4141: 0x6818,
+ 4142: 0x6819,
+ 4143: 0x681A,
+ 4144: 0x681B,
+ 4145: 0x681C,
+ 4146: 0x681E,
+ 4147: 0x681F,
+ 4148: 0x6820,
+ 4149: 0x6822,
+ 4150: 0x6823,
+ 4151: 0x6824,
+ 4152: 0x6825,
+ 4153: 0x6826,
+ 4154: 0x6827,
+ 4155: 0x6828,
+ 4156: 0x682B,
+ 4157: 0x682C,
+ 4158: 0x682D,
+ 4159: 0x682E,
+ 4160: 0x682F,
+ 4161: 0x6830,
+ 4162: 0x6831,
+ 4163: 0x6834,
+ 4164: 0x6835,
+ 4165: 0x6836,
+ 4166: 0x683A,
+ 4167: 0x683B,
+ 4168: 0x683F,
+ 4169: 0x6847,
+ 4170: 0x684B,
+ 4171: 0x684D,
+ 4172: 0x684F,
+ 4173: 0x6852,
+ 4174: 0x6856,
+ 4175: 0x6857,
+ 4176: 0x6858,
+ 4177: 0x6859,
+ 4178: 0x685A,
+ 4179: 0x685B,
+ 4180: 0x685C,
+ 4181: 0x685D,
+ 4182: 0x685E,
+ 4183: 0x685F,
+ 4184: 0x686A,
+ 4185: 0x686C,
+ 4186: 0x686D,
+ 4187: 0x686E,
+ 4188: 0x686F,
+ 4189: 0x6870,
+ 4190: 0x6871,
+ 4191: 0x6872,
+ 4192: 0x6873,
+ 4193: 0x6875,
+ 4194: 0x6878,
+ 4195: 0x6879,
+ 4196: 0x687A,
+ 4197: 0x687B,
+ 4198: 0x687C,
+ 4199: 0x687D,
+ 4200: 0x687E,
+ 4201: 0x687F,
+ 4202: 0x6880,
+ 4203: 0x6882,
+ 4204: 0x6884,
+ 4205: 0x6887,
+ 4206: 0x6888,
+ 4207: 0x6889,
+ 4208: 0x688A,
+ 4209: 0x688B,
+ 4210: 0x688C,
+ 4211: 0x688D,
+ 4212: 0x688E,
+ 4213: 0x6890,
+ 4214: 0x6891,
+ 4215: 0x6892,
+ 4216: 0x6894,
+ 4217: 0x6895,
+ 4218: 0x6896,
+ 4219: 0x6898,
+ 4220: 0x6899,
+ 4221: 0x689A,
+ 4222: 0x689B,
+ 4223: 0x689C,
+ 4224: 0x689D,
+ 4225: 0x689E,
+ 4226: 0x689F,
+ 4227: 0x68A0,
+ 4228: 0x68A1,
+ 4229: 0x68A3,
+ 4230: 0x68A4,
+ 4231: 0x68A5,
+ 4232: 0x68A9,
+ 4233: 0x68AA,
+ 4234: 0x68AB,
+ 4235: 0x68AC,
+ 4236: 0x68AE,
+ 4237: 0x68B1,
+ 4238: 0x68B2,
+ 4239: 0x68B4,
+ 4240: 0x68B6,
+ 4241: 0x68B7,
+ 4242: 0x68B8,
+ 4243: 0x68B9,
+ 4244: 0x68BA,
+ 4245: 0x68BB,
+ 4246: 0x68BC,
+ 4247: 0x68BD,
+ 4248: 0x68BE,
+ 4249: 0x68BF,
+ 4250: 0x68C1,
+ 4251: 0x68C3,
+ 4252: 0x68C4,
+ 4253: 0x68C5,
+ 4254: 0x68C6,
+ 4255: 0x68C7,
+ 4256: 0x68C8,
+ 4257: 0x68CA,
+ 4258: 0x68CC,
+ 4259: 0x68CE,
+ 4260: 0x68CF,
+ 4261: 0x68D0,
+ 4262: 0x68D1,
+ 4263: 0x68D3,
+ 4264: 0x68D4,
+ 4265: 0x68D6,
+ 4266: 0x68D7,
+ 4267: 0x68D9,
+ 4268: 0x68DB,
+ 4269: 0x68DC,
+ 4270: 0x68DD,
+ 4271: 0x68DE,
+ 4272: 0x68DF,
+ 4273: 0x68E1,
+ 4274: 0x68E2,
+ 4275: 0x68E4,
+ 4276: 0x68E5,
+ 4277: 0x68E6,
+ 4278: 0x68E7,
+ 4279: 0x68E8,
+ 4280: 0x68E9,
+ 4281: 0x68EA,
+ 4282: 0x68EB,
+ 4283: 0x68EC,
+ 4284: 0x68ED,
+ 4285: 0x68EF,
+ 4286: 0x68F2,
+ 4287: 0x68F3,
+ 4288: 0x68F4,
+ 4289: 0x68F6,
+ 4290: 0x68F7,
+ 4291: 0x68F8,
+ 4292: 0x68FB,
+ 4293: 0x68FD,
+ 4294: 0x68FE,
+ 4295: 0x68FF,
+ 4296: 0x6900,
+ 4297: 0x6902,
+ 4298: 0x6903,
+ 4299: 0x6904,
+ 4300: 0x6906,
+ 4301: 0x6907,
+ 4302: 0x6908,
+ 4303: 0x6909,
+ 4304: 0x690A,
+ 4305: 0x690C,
+ 4306: 0x690F,
+ 4307: 0x6911,
+ 4308: 0x6913,
+ 4309: 0x6914,
+ 4310: 0x6915,
+ 4311: 0x6916,
+ 4312: 0x6917,
+ 4313: 0x6918,
+ 4314: 0x6919,
+ 4315: 0x691A,
+ 4316: 0x691B,
+ 4317: 0x691C,
+ 4318: 0x691D,
+ 4319: 0x691E,
+ 4320: 0x6921,
+ 4321: 0x6922,
+ 4322: 0x6923,
+ 4323: 0x6925,
+ 4324: 0x6926,
+ 4325: 0x6927,
+ 4326: 0x6928,
+ 4327: 0x6929,
+ 4328: 0x692A,
+ 4329: 0x692B,
+ 4330: 0x692C,
+ 4331: 0x692E,
+ 4332: 0x692F,
+ 4333: 0x6931,
+ 4334: 0x6932,
+ 4335: 0x6933,
+ 4336: 0x6935,
+ 4337: 0x6936,
+ 4338: 0x6937,
+ 4339: 0x6938,
+ 4340: 0x693A,
+ 4341: 0x693B,
+ 4342: 0x693C,
+ 4343: 0x693E,
+ 4344: 0x6940,
+ 4345: 0x6941,
+ 4346: 0x6943,
+ 4347: 0x6944,
+ 4348: 0x6945,
+ 4349: 0x6946,
+ 4350: 0x6947,
+ 4351: 0x6948,
+ 4352: 0x6949,
+ 4353: 0x694A,
+ 4354: 0x694B,
+ 4355: 0x694C,
+ 4356: 0x694D,
+ 4357: 0x694E,
+ 4358: 0x694F,
+ 4359: 0x6950,
+ 4360: 0x6951,
+ 4361: 0x6952,
+ 4362: 0x6953,
+ 4363: 0x6955,
+ 4364: 0x6956,
+ 4365: 0x6958,
+ 4366: 0x6959,
+ 4367: 0x695B,
+ 4368: 0x695C,
+ 4369: 0x695F,
+ 4370: 0x6961,
+ 4371: 0x6962,
+ 4372: 0x6964,
+ 4373: 0x6965,
+ 4374: 0x6967,
+ 4375: 0x6968,
+ 4376: 0x6969,
+ 4377: 0x696A,
+ 4378: 0x696C,
+ 4379: 0x696D,
+ 4380: 0x696F,
+ 4381: 0x6970,
+ 4382: 0x6972,
+ 4383: 0x6973,
+ 4384: 0x6974,
+ 4385: 0x6975,
+ 4386: 0x6976,
+ 4387: 0x697A,
+ 4388: 0x697B,
+ 4389: 0x697D,
+ 4390: 0x697E,
+ 4391: 0x697F,
+ 4392: 0x6981,
+ 4393: 0x6983,
+ 4394: 0x6985,
+ 4395: 0x698A,
+ 4396: 0x698B,
+ 4397: 0x698C,
+ 4398: 0x698E,
+ 4399: 0x698F,
+ 4400: 0x6990,
+ 4401: 0x6991,
+ 4402: 0x6992,
+ 4403: 0x6993,
+ 4404: 0x6996,
+ 4405: 0x6997,
+ 4406: 0x6999,
+ 4407: 0x699A,
+ 4408: 0x699D,
+ 4409: 0x699E,
+ 4410: 0x699F,
+ 4411: 0x69A0,
+ 4412: 0x69A1,
+ 4413: 0x69A2,
+ 4414: 0x69A3,
+ 4415: 0x69A4,
+ 4416: 0x69A5,
+ 4417: 0x69A6,
+ 4418: 0x69A9,
+ 4419: 0x69AA,
+ 4420: 0x69AC,
+ 4421: 0x69AE,
+ 4422: 0x69AF,
+ 4423: 0x69B0,
+ 4424: 0x69B2,
+ 4425: 0x69B3,
+ 4426: 0x69B5,
+ 4427: 0x69B6,
+ 4428: 0x69B8,
+ 4429: 0x69B9,
+ 4430: 0x69BA,
+ 4431: 0x69BC,
+ 4432: 0x69BD,
+ 4433: 0x69BE,
+ 4434: 0x69BF,
+ 4435: 0x69C0,
+ 4436: 0x69C2,
+ 4437: 0x69C3,
+ 4438: 0x69C4,
+ 4439: 0x69C5,
+ 4440: 0x69C6,
+ 4441: 0x69C7,
+ 4442: 0x69C8,
+ 4443: 0x69C9,
+ 4444: 0x69CB,
+ 4445: 0x69CD,
+ 4446: 0x69CF,
+ 4447: 0x69D1,
+ 4448: 0x69D2,
+ 4449: 0x69D3,
+ 4450: 0x69D5,
+ 4451: 0x69D6,
+ 4452: 0x69D7,
+ 4453: 0x69D8,
+ 4454: 0x69D9,
+ 4455: 0x69DA,
+ 4456: 0x69DC,
+ 4457: 0x69DD,
+ 4458: 0x69DE,
+ 4459: 0x69E1,
+ 4460: 0x69E2,
+ 4461: 0x69E3,
+ 4462: 0x69E4,
+ 4463: 0x69E5,
+ 4464: 0x69E6,
+ 4465: 0x69E7,
+ 4466: 0x69E8,
+ 4467: 0x69E9,
+ 4468: 0x69EA,
+ 4469: 0x69EB,
+ 4470: 0x69EC,
+ 4471: 0x69EE,
+ 4472: 0x69EF,
+ 4473: 0x69F0,
+ 4474: 0x69F1,
+ 4475: 0x69F3,
+ 4476: 0x69F4,
+ 4477: 0x69F5,
+ 4478: 0x69F6,
+ 4479: 0x69F7,
+ 4480: 0x69F8,
+ 4481: 0x69F9,
+ 4482: 0x69FA,
+ 4483: 0x69FB,
+ 4484: 0x69FC,
+ 4485: 0x69FE,
+ 4486: 0x6A00,
+ 4487: 0x6A01,
+ 4488: 0x6A02,
+ 4489: 0x6A03,
+ 4490: 0x6A04,
+ 4491: 0x6A05,
+ 4492: 0x6A06,
+ 4493: 0x6A07,
+ 4494: 0x6A08,
+ 4495: 0x6A09,
+ 4496: 0x6A0B,
+ 4497: 0x6A0C,
+ 4498: 0x6A0D,
+ 4499: 0x6A0E,
+ 4500: 0x6A0F,
+ 4501: 0x6A10,
+ 4502: 0x6A11,
+ 4503: 0x6A12,
+ 4504: 0x6A13,
+ 4505: 0x6A14,
+ 4506: 0x6A15,
+ 4507: 0x6A16,
+ 4508: 0x6A19,
+ 4509: 0x6A1A,
+ 4510: 0x6A1B,
+ 4511: 0x6A1C,
+ 4512: 0x6A1D,
+ 4513: 0x6A1E,
+ 4514: 0x6A20,
+ 4515: 0x6A22,
+ 4516: 0x6A23,
+ 4517: 0x6A24,
+ 4518: 0x6A25,
+ 4519: 0x6A26,
+ 4520: 0x6A27,
+ 4521: 0x6A29,
+ 4522: 0x6A2B,
+ 4523: 0x6A2C,
+ 4524: 0x6A2D,
+ 4525: 0x6A2E,
+ 4526: 0x6A30,
+ 4527: 0x6A32,
+ 4528: 0x6A33,
+ 4529: 0x6A34,
+ 4530: 0x6A36,
+ 4531: 0x6A37,
+ 4532: 0x6A38,
+ 4533: 0x6A39,
+ 4534: 0x6A3A,
+ 4535: 0x6A3B,
+ 4536: 0x6A3C,
+ 4537: 0x6A3F,
+ 4538: 0x6A40,
+ 4539: 0x6A41,
+ 4540: 0x6A42,
+ 4541: 0x6A43,
+ 4542: 0x6A45,
+ 4543: 0x6A46,
+ 4544: 0x6A48,
+ 4545: 0x6A49,
+ 4546: 0x6A4A,
+ 4547: 0x6A4B,
+ 4548: 0x6A4C,
+ 4549: 0x6A4D,
+ 4550: 0x6A4E,
+ 4551: 0x6A4F,
+ 4552: 0x6A51,
+ 4553: 0x6A52,
+ 4554: 0x6A53,
+ 4555: 0x6A54,
+ 4556: 0x6A55,
+ 4557: 0x6A56,
+ 4558: 0x6A57,
+ 4559: 0x6A5A,
+ 4560: 0x6A5C,
+ 4561: 0x6A5D,
+ 4562: 0x6A5E,
+ 4563: 0x6A5F,
+ 4564: 0x6A60,
+ 4565: 0x6A62,
+ 4566: 0x6A63,
+ 4567: 0x6A64,
+ 4568: 0x6A66,
+ 4569: 0x6A67,
+ 4570: 0x6A68,
+ 4571: 0x6A69,
+ 4572: 0x6A6A,
+ 4573: 0x6A6B,
+ 4574: 0x6A6C,
+ 4575: 0x6A6D,
+ 4576: 0x6A6E,
+ 4577: 0x6A6F,
+ 4578: 0x6A70,
+ 4579: 0x6A72,
+ 4580: 0x6A73,
+ 4581: 0x6A74,
+ 4582: 0x6A75,
+ 4583: 0x6A76,
+ 4584: 0x6A77,
+ 4585: 0x6A78,
+ 4586: 0x6A7A,
+ 4587: 0x6A7B,
+ 4588: 0x6A7D,
+ 4589: 0x6A7E,
+ 4590: 0x6A7F,
+ 4591: 0x6A81,
+ 4592: 0x6A82,
+ 4593: 0x6A83,
+ 4594: 0x6A85,
+ 4595: 0x6A86,
+ 4596: 0x6A87,
+ 4597: 0x6A88,
+ 4598: 0x6A89,
+ 4599: 0x6A8A,
+ 4600: 0x6A8B,
+ 4601: 0x6A8C,
+ 4602: 0x6A8D,
+ 4603: 0x6A8F,
+ 4604: 0x6A92,
+ 4605: 0x6A93,
+ 4606: 0x6A94,
+ 4607: 0x6A95,
+ 4608: 0x6A96,
+ 4609: 0x6A98,
+ 4610: 0x6A99,
+ 4611: 0x6A9A,
+ 4612: 0x6A9B,
+ 4613: 0x6A9C,
+ 4614: 0x6A9D,
+ 4615: 0x6A9E,
+ 4616: 0x6A9F,
+ 4617: 0x6AA1,
+ 4618: 0x6AA2,
+ 4619: 0x6AA3,
+ 4620: 0x6AA4,
+ 4621: 0x6AA5,
+ 4622: 0x6AA6,
+ 4623: 0x6AA7,
+ 4624: 0x6AA8,
+ 4625: 0x6AAA,
+ 4626: 0x6AAD,
+ 4627: 0x6AAE,
+ 4628: 0x6AAF,
+ 4629: 0x6AB0,
+ 4630: 0x6AB1,
+ 4631: 0x6AB2,
+ 4632: 0x6AB3,
+ 4633: 0x6AB4,
+ 4634: 0x6AB5,
+ 4635: 0x6AB6,
+ 4636: 0x6AB7,
+ 4637: 0x6AB8,
+ 4638: 0x6AB9,
+ 4639: 0x6ABA,
+ 4640: 0x6ABB,
+ 4641: 0x6ABC,
+ 4642: 0x6ABD,
+ 4643: 0x6ABE,
+ 4644: 0x6ABF,
+ 4645: 0x6AC0,
+ 4646: 0x6AC1,
+ 4647: 0x6AC2,
+ 4648: 0x6AC3,
+ 4649: 0x6AC4,
+ 4650: 0x6AC5,
+ 4651: 0x6AC6,
+ 4652: 0x6AC7,
+ 4653: 0x6AC8,
+ 4654: 0x6AC9,
+ 4655: 0x6ACA,
+ 4656: 0x6ACB,
+ 4657: 0x6ACC,
+ 4658: 0x6ACD,
+ 4659: 0x6ACE,
+ 4660: 0x6ACF,
+ 4661: 0x6AD0,
+ 4662: 0x6AD1,
+ 4663: 0x6AD2,
+ 4664: 0x6AD3,
+ 4665: 0x6AD4,
+ 4666: 0x6AD5,
+ 4667: 0x6AD6,
+ 4668: 0x6AD7,
+ 4669: 0x6AD8,
+ 4670: 0x6AD9,
+ 4671: 0x6ADA,
+ 4672: 0x6ADB,
+ 4673: 0x6ADC,
+ 4674: 0x6ADD,
+ 4675: 0x6ADE,
+ 4676: 0x6ADF,
+ 4677: 0x6AE0,
+ 4678: 0x6AE1,
+ 4679: 0x6AE2,
+ 4680: 0x6AE3,
+ 4681: 0x6AE4,
+ 4682: 0x6AE5,
+ 4683: 0x6AE6,
+ 4684: 0x6AE7,
+ 4685: 0x6AE8,
+ 4686: 0x6AE9,
+ 4687: 0x6AEA,
+ 4688: 0x6AEB,
+ 4689: 0x6AEC,
+ 4690: 0x6AED,
+ 4691: 0x6AEE,
+ 4692: 0x6AEF,
+ 4693: 0x6AF0,
+ 4694: 0x6AF1,
+ 4695: 0x6AF2,
+ 4696: 0x6AF3,
+ 4697: 0x6AF4,
+ 4698: 0x6AF5,
+ 4699: 0x6AF6,
+ 4700: 0x6AF7,
+ 4701: 0x6AF8,
+ 4702: 0x6AF9,
+ 4703: 0x6AFA,
+ 4704: 0x6AFB,
+ 4705: 0x6AFC,
+ 4706: 0x6AFD,
+ 4707: 0x6AFE,
+ 4708: 0x6AFF,
+ 4709: 0x6B00,
+ 4710: 0x6B01,
+ 4711: 0x6B02,
+ 4712: 0x6B03,
+ 4713: 0x6B04,
+ 4714: 0x6B05,
+ 4715: 0x6B06,
+ 4716: 0x6B07,
+ 4717: 0x6B08,
+ 4718: 0x6B09,
+ 4719: 0x6B0A,
+ 4720: 0x6B0B,
+ 4721: 0x6B0C,
+ 4722: 0x6B0D,
+ 4723: 0x6B0E,
+ 4724: 0x6B0F,
+ 4725: 0x6B10,
+ 4726: 0x6B11,
+ 4727: 0x6B12,
+ 4728: 0x6B13,
+ 4729: 0x6B14,
+ 4730: 0x6B15,
+ 4731: 0x6B16,
+ 4732: 0x6B17,
+ 4733: 0x6B18,
+ 4734: 0x6B19,
+ 4735: 0x6B1A,
+ 4736: 0x6B1B,
+ 4737: 0x6B1C,
+ 4738: 0x6B1D,
+ 4739: 0x6B1E,
+ 4740: 0x6B1F,
+ 4741: 0x6B25,
+ 4742: 0x6B26,
+ 4743: 0x6B28,
+ 4744: 0x6B29,
+ 4745: 0x6B2A,
+ 4746: 0x6B2B,
+ 4747: 0x6B2C,
+ 4748: 0x6B2D,
+ 4749: 0x6B2E,
+ 4750: 0x6B2F,
+ 4751: 0x6B30,
+ 4752: 0x6B31,
+ 4753: 0x6B33,
+ 4754: 0x6B34,
+ 4755: 0x6B35,
+ 4756: 0x6B36,
+ 4757: 0x6B38,
+ 4758: 0x6B3B,
+ 4759: 0x6B3C,
+ 4760: 0x6B3D,
+ 4761: 0x6B3F,
+ 4762: 0x6B40,
+ 4763: 0x6B41,
+ 4764: 0x6B42,
+ 4765: 0x6B44,
+ 4766: 0x6B45,
+ 4767: 0x6B48,
+ 4768: 0x6B4A,
+ 4769: 0x6B4B,
+ 4770: 0x6B4D,
+ 4771: 0x6B4E,
+ 4772: 0x6B4F,
+ 4773: 0x6B50,
+ 4774: 0x6B51,
+ 4775: 0x6B52,
+ 4776: 0x6B53,
+ 4777: 0x6B54,
+ 4778: 0x6B55,
+ 4779: 0x6B56,
+ 4780: 0x6B57,
+ 4781: 0x6B58,
+ 4782: 0x6B5A,
+ 4783: 0x6B5B,
+ 4784: 0x6B5C,
+ 4785: 0x6B5D,
+ 4786: 0x6B5E,
+ 4787: 0x6B5F,
+ 4788: 0x6B60,
+ 4789: 0x6B61,
+ 4790: 0x6B68,
+ 4791: 0x6B69,
+ 4792: 0x6B6B,
+ 4793: 0x6B6C,
+ 4794: 0x6B6D,
+ 4795: 0x6B6E,
+ 4796: 0x6B6F,
+ 4797: 0x6B70,
+ 4798: 0x6B71,
+ 4799: 0x6B72,
+ 4800: 0x6B73,
+ 4801: 0x6B74,
+ 4802: 0x6B75,
+ 4803: 0x6B76,
+ 4804: 0x6B77,
+ 4805: 0x6B78,
+ 4806: 0x6B7A,
+ 4807: 0x6B7D,
+ 4808: 0x6B7E,
+ 4809: 0x6B7F,
+ 4810: 0x6B80,
+ 4811: 0x6B85,
+ 4812: 0x6B88,
+ 4813: 0x6B8C,
+ 4814: 0x6B8E,
+ 4815: 0x6B8F,
+ 4816: 0x6B90,
+ 4817: 0x6B91,
+ 4818: 0x6B94,
+ 4819: 0x6B95,
+ 4820: 0x6B97,
+ 4821: 0x6B98,
+ 4822: 0x6B99,
+ 4823: 0x6B9C,
+ 4824: 0x6B9D,
+ 4825: 0x6B9E,
+ 4826: 0x6B9F,
+ 4827: 0x6BA0,
+ 4828: 0x6BA2,
+ 4829: 0x6BA3,
+ 4830: 0x6BA4,
+ 4831: 0x6BA5,
+ 4832: 0x6BA6,
+ 4833: 0x6BA7,
+ 4834: 0x6BA8,
+ 4835: 0x6BA9,
+ 4836: 0x6BAB,
+ 4837: 0x6BAC,
+ 4838: 0x6BAD,
+ 4839: 0x6BAE,
+ 4840: 0x6BAF,
+ 4841: 0x6BB0,
+ 4842: 0x6BB1,
+ 4843: 0x6BB2,
+ 4844: 0x6BB6,
+ 4845: 0x6BB8,
+ 4846: 0x6BB9,
+ 4847: 0x6BBA,
+ 4848: 0x6BBB,
+ 4849: 0x6BBC,
+ 4850: 0x6BBD,
+ 4851: 0x6BBE,
+ 4852: 0x6BC0,
+ 4853: 0x6BC3,
+ 4854: 0x6BC4,
+ 4855: 0x6BC6,
+ 4856: 0x6BC7,
+ 4857: 0x6BC8,
+ 4858: 0x6BC9,
+ 4859: 0x6BCA,
+ 4860: 0x6BCC,
+ 4861: 0x6BCE,
+ 4862: 0x6BD0,
+ 4863: 0x6BD1,
+ 4864: 0x6BD8,
+ 4865: 0x6BDA,
+ 4866: 0x6BDC,
+ 4867: 0x6BDD,
+ 4868: 0x6BDE,
+ 4869: 0x6BDF,
+ 4870: 0x6BE0,
+ 4871: 0x6BE2,
+ 4872: 0x6BE3,
+ 4873: 0x6BE4,
+ 4874: 0x6BE5,
+ 4875: 0x6BE6,
+ 4876: 0x6BE7,
+ 4877: 0x6BE8,
+ 4878: 0x6BE9,
+ 4879: 0x6BEC,
+ 4880: 0x6BED,
+ 4881: 0x6BEE,
+ 4882: 0x6BF0,
+ 4883: 0x6BF1,
+ 4884: 0x6BF2,
+ 4885: 0x6BF4,
+ 4886: 0x6BF6,
+ 4887: 0x6BF7,
+ 4888: 0x6BF8,
+ 4889: 0x6BFA,
+ 4890: 0x6BFB,
+ 4891: 0x6BFC,
+ 4892: 0x6BFE,
+ 4893: 0x6BFF,
+ 4894: 0x6C00,
+ 4895: 0x6C01,
+ 4896: 0x6C02,
+ 4897: 0x6C03,
+ 4898: 0x6C04,
+ 4899: 0x6C08,
+ 4900: 0x6C09,
+ 4901: 0x6C0A,
+ 4902: 0x6C0B,
+ 4903: 0x6C0C,
+ 4904: 0x6C0E,
+ 4905: 0x6C12,
+ 4906: 0x6C17,
+ 4907: 0x6C1C,
+ 4908: 0x6C1D,
+ 4909: 0x6C1E,
+ 4910: 0x6C20,
+ 4911: 0x6C23,
+ 4912: 0x6C25,
+ 4913: 0x6C2B,
+ 4914: 0x6C2C,
+ 4915: 0x6C2D,
+ 4916: 0x6C31,
+ 4917: 0x6C33,
+ 4918: 0x6C36,
+ 4919: 0x6C37,
+ 4920: 0x6C39,
+ 4921: 0x6C3A,
+ 4922: 0x6C3B,
+ 4923: 0x6C3C,
+ 4924: 0x6C3E,
+ 4925: 0x6C3F,
+ 4926: 0x6C43,
+ 4927: 0x6C44,
+ 4928: 0x6C45,
+ 4929: 0x6C48,
+ 4930: 0x6C4B,
+ 4931: 0x6C4C,
+ 4932: 0x6C4D,
+ 4933: 0x6C4E,
+ 4934: 0x6C4F,
+ 4935: 0x6C51,
+ 4936: 0x6C52,
+ 4937: 0x6C53,
+ 4938: 0x6C56,
+ 4939: 0x6C58,
+ 4940: 0x6C59,
+ 4941: 0x6C5A,
+ 4942: 0x6C62,
+ 4943: 0x6C63,
+ 4944: 0x6C65,
+ 4945: 0x6C66,
+ 4946: 0x6C67,
+ 4947: 0x6C6B,
+ 4948: 0x6C6C,
+ 4949: 0x6C6D,
+ 4950: 0x6C6E,
+ 4951: 0x6C6F,
+ 4952: 0x6C71,
+ 4953: 0x6C73,
+ 4954: 0x6C75,
+ 4955: 0x6C77,
+ 4956: 0x6C78,
+ 4957: 0x6C7A,
+ 4958: 0x6C7B,
+ 4959: 0x6C7C,
+ 4960: 0x6C7F,
+ 4961: 0x6C80,
+ 4962: 0x6C84,
+ 4963: 0x6C87,
+ 4964: 0x6C8A,
+ 4965: 0x6C8B,
+ 4966: 0x6C8D,
+ 4967: 0x6C8E,
+ 4968: 0x6C91,
+ 4969: 0x6C92,
+ 4970: 0x6C95,
+ 4971: 0x6C96,
+ 4972: 0x6C97,
+ 4973: 0x6C98,
+ 4974: 0x6C9A,
+ 4975: 0x6C9C,
+ 4976: 0x6C9D,
+ 4977: 0x6C9E,
+ 4978: 0x6CA0,
+ 4979: 0x6CA2,
+ 4980: 0x6CA8,
+ 4981: 0x6CAC,
+ 4982: 0x6CAF,
+ 4983: 0x6CB0,
+ 4984: 0x6CB4,
+ 4985: 0x6CB5,
+ 4986: 0x6CB6,
+ 4987: 0x6CB7,
+ 4988: 0x6CBA,
+ 4989: 0x6CC0,
+ 4990: 0x6CC1,
+ 4991: 0x6CC2,
+ 4992: 0x6CC3,
+ 4993: 0x6CC6,
+ 4994: 0x6CC7,
+ 4995: 0x6CC8,
+ 4996: 0x6CCB,
+ 4997: 0x6CCD,
+ 4998: 0x6CCE,
+ 4999: 0x6CCF,
+ 5000: 0x6CD1,
+ 5001: 0x6CD2,
+ 5002: 0x6CD8,
+ 5003: 0x6CD9,
+ 5004: 0x6CDA,
+ 5005: 0x6CDC,
+ 5006: 0x6CDD,
+ 5007: 0x6CDF,
+ 5008: 0x6CE4,
+ 5009: 0x6CE6,
+ 5010: 0x6CE7,
+ 5011: 0x6CE9,
+ 5012: 0x6CEC,
+ 5013: 0x6CED,
+ 5014: 0x6CF2,
+ 5015: 0x6CF4,
+ 5016: 0x6CF9,
+ 5017: 0x6CFF,
+ 5018: 0x6D00,
+ 5019: 0x6D02,
+ 5020: 0x6D03,
+ 5021: 0x6D05,
+ 5022: 0x6D06,
+ 5023: 0x6D08,
+ 5024: 0x6D09,
+ 5025: 0x6D0A,
+ 5026: 0x6D0D,
+ 5027: 0x6D0F,
+ 5028: 0x6D10,
+ 5029: 0x6D11,
+ 5030: 0x6D13,
+ 5031: 0x6D14,
+ 5032: 0x6D15,
+ 5033: 0x6D16,
+ 5034: 0x6D18,
+ 5035: 0x6D1C,
+ 5036: 0x6D1D,
+ 5037: 0x6D1F,
+ 5038: 0x6D20,
+ 5039: 0x6D21,
+ 5040: 0x6D22,
+ 5041: 0x6D23,
+ 5042: 0x6D24,
+ 5043: 0x6D26,
+ 5044: 0x6D28,
+ 5045: 0x6D29,
+ 5046: 0x6D2C,
+ 5047: 0x6D2D,
+ 5048: 0x6D2F,
+ 5049: 0x6D30,
+ 5050: 0x6D34,
+ 5051: 0x6D36,
+ 5052: 0x6D37,
+ 5053: 0x6D38,
+ 5054: 0x6D3A,
+ 5055: 0x6D3F,
+ 5056: 0x6D40,
+ 5057: 0x6D42,
+ 5058: 0x6D44,
+ 5059: 0x6D49,
+ 5060: 0x6D4C,
+ 5061: 0x6D50,
+ 5062: 0x6D55,
+ 5063: 0x6D56,
+ 5064: 0x6D57,
+ 5065: 0x6D58,
+ 5066: 0x6D5B,
+ 5067: 0x6D5D,
+ 5068: 0x6D5F,
+ 5069: 0x6D61,
+ 5070: 0x6D62,
+ 5071: 0x6D64,
+ 5072: 0x6D65,
+ 5073: 0x6D67,
+ 5074: 0x6D68,
+ 5075: 0x6D6B,
+ 5076: 0x6D6C,
+ 5077: 0x6D6D,
+ 5078: 0x6D70,
+ 5079: 0x6D71,
+ 5080: 0x6D72,
+ 5081: 0x6D73,
+ 5082: 0x6D75,
+ 5083: 0x6D76,
+ 5084: 0x6D79,
+ 5085: 0x6D7A,
+ 5086: 0x6D7B,
+ 5087: 0x6D7D,
+ 5088: 0x6D7E,
+ 5089: 0x6D7F,
+ 5090: 0x6D80,
+ 5091: 0x6D81,
+ 5092: 0x6D83,
+ 5093: 0x6D84,
+ 5094: 0x6D86,
+ 5095: 0x6D87,
+ 5096: 0x6D8A,
+ 5097: 0x6D8B,
+ 5098: 0x6D8D,
+ 5099: 0x6D8F,
+ 5100: 0x6D90,
+ 5101: 0x6D92,
+ 5102: 0x6D96,
+ 5103: 0x6D97,
+ 5104: 0x6D98,
+ 5105: 0x6D99,
+ 5106: 0x6D9A,
+ 5107: 0x6D9C,
+ 5108: 0x6DA2,
+ 5109: 0x6DA5,
+ 5110: 0x6DAC,
+ 5111: 0x6DAD,
+ 5112: 0x6DB0,
+ 5113: 0x6DB1,
+ 5114: 0x6DB3,
+ 5115: 0x6DB4,
+ 5116: 0x6DB6,
+ 5117: 0x6DB7,
+ 5118: 0x6DB9,
+ 5119: 0x6DBA,
+ 5120: 0x6DBB,
+ 5121: 0x6DBC,
+ 5122: 0x6DBD,
+ 5123: 0x6DBE,
+ 5124: 0x6DC1,
+ 5125: 0x6DC2,
+ 5126: 0x6DC3,
+ 5127: 0x6DC8,
+ 5128: 0x6DC9,
+ 5129: 0x6DCA,
+ 5130: 0x6DCD,
+ 5131: 0x6DCE,
+ 5132: 0x6DCF,
+ 5133: 0x6DD0,
+ 5134: 0x6DD2,
+ 5135: 0x6DD3,
+ 5136: 0x6DD4,
+ 5137: 0x6DD5,
+ 5138: 0x6DD7,
+ 5139: 0x6DDA,
+ 5140: 0x6DDB,
+ 5141: 0x6DDC,
+ 5142: 0x6DDF,
+ 5143: 0x6DE2,
+ 5144: 0x6DE3,
+ 5145: 0x6DE5,
+ 5146: 0x6DE7,
+ 5147: 0x6DE8,
+ 5148: 0x6DE9,
+ 5149: 0x6DEA,
+ 5150: 0x6DED,
+ 5151: 0x6DEF,
+ 5152: 0x6DF0,
+ 5153: 0x6DF2,
+ 5154: 0x6DF4,
+ 5155: 0x6DF5,
+ 5156: 0x6DF6,
+ 5157: 0x6DF8,
+ 5158: 0x6DFA,
+ 5159: 0x6DFD,
+ 5160: 0x6DFE,
+ 5161: 0x6DFF,
+ 5162: 0x6E00,
+ 5163: 0x6E01,
+ 5164: 0x6E02,
+ 5165: 0x6E03,
+ 5166: 0x6E04,
+ 5167: 0x6E06,
+ 5168: 0x6E07,
+ 5169: 0x6E08,
+ 5170: 0x6E09,
+ 5171: 0x6E0B,
+ 5172: 0x6E0F,
+ 5173: 0x6E12,
+ 5174: 0x6E13,
+ 5175: 0x6E15,
+ 5176: 0x6E18,
+ 5177: 0x6E19,
+ 5178: 0x6E1B,
+ 5179: 0x6E1C,
+ 5180: 0x6E1E,
+ 5181: 0x6E1F,
+ 5182: 0x6E22,
+ 5183: 0x6E26,
+ 5184: 0x6E27,
+ 5185: 0x6E28,
+ 5186: 0x6E2A,
+ 5187: 0x6E2C,
+ 5188: 0x6E2E,
+ 5189: 0x6E30,
+ 5190: 0x6E31,
+ 5191: 0x6E33,
+ 5192: 0x6E35,
+ 5193: 0x6E36,
+ 5194: 0x6E37,
+ 5195: 0x6E39,
+ 5196: 0x6E3B,
+ 5197: 0x6E3C,
+ 5198: 0x6E3D,
+ 5199: 0x6E3E,
+ 5200: 0x6E3F,
+ 5201: 0x6E40,
+ 5202: 0x6E41,
+ 5203: 0x6E42,
+ 5204: 0x6E45,
+ 5205: 0x6E46,
+ 5206: 0x6E47,
+ 5207: 0x6E48,
+ 5208: 0x6E49,
+ 5209: 0x6E4A,
+ 5210: 0x6E4B,
+ 5211: 0x6E4C,
+ 5212: 0x6E4F,
+ 5213: 0x6E50,
+ 5214: 0x6E51,
+ 5215: 0x6E52,
+ 5216: 0x6E55,
+ 5217: 0x6E57,
+ 5218: 0x6E59,
+ 5219: 0x6E5A,
+ 5220: 0x6E5C,
+ 5221: 0x6E5D,
+ 5222: 0x6E5E,
+ 5223: 0x6E60,
+ 5224: 0x6E61,
+ 5225: 0x6E62,
+ 5226: 0x6E63,
+ 5227: 0x6E64,
+ 5228: 0x6E65,
+ 5229: 0x6E66,
+ 5230: 0x6E67,
+ 5231: 0x6E68,
+ 5232: 0x6E69,
+ 5233: 0x6E6A,
+ 5234: 0x6E6C,
+ 5235: 0x6E6D,
+ 5236: 0x6E6F,
+ 5237: 0x6E70,
+ 5238: 0x6E71,
+ 5239: 0x6E72,
+ 5240: 0x6E73,
+ 5241: 0x6E74,
+ 5242: 0x6E75,
+ 5243: 0x6E76,
+ 5244: 0x6E77,
+ 5245: 0x6E78,
+ 5246: 0x6E79,
+ 5247: 0x6E7A,
+ 5248: 0x6E7B,
+ 5249: 0x6E7C,
+ 5250: 0x6E7D,
+ 5251: 0x6E80,
+ 5252: 0x6E81,
+ 5253: 0x6E82,
+ 5254: 0x6E84,
+ 5255: 0x6E87,
+ 5256: 0x6E88,
+ 5257: 0x6E8A,
+ 5258: 0x6E8B,
+ 5259: 0x6E8C,
+ 5260: 0x6E8D,
+ 5261: 0x6E8E,
+ 5262: 0x6E91,
+ 5263: 0x6E92,
+ 5264: 0x6E93,
+ 5265: 0x6E94,
+ 5266: 0x6E95,
+ 5267: 0x6E96,
+ 5268: 0x6E97,
+ 5269: 0x6E99,
+ 5270: 0x6E9A,
+ 5271: 0x6E9B,
+ 5272: 0x6E9D,
+ 5273: 0x6E9E,
+ 5274: 0x6EA0,
+ 5275: 0x6EA1,
+ 5276: 0x6EA3,
+ 5277: 0x6EA4,
+ 5278: 0x6EA6,
+ 5279: 0x6EA8,
+ 5280: 0x6EA9,
+ 5281: 0x6EAB,
+ 5282: 0x6EAC,
+ 5283: 0x6EAD,
+ 5284: 0x6EAE,
+ 5285: 0x6EB0,
+ 5286: 0x6EB3,
+ 5287: 0x6EB5,
+ 5288: 0x6EB8,
+ 5289: 0x6EB9,
+ 5290: 0x6EBC,
+ 5291: 0x6EBE,
+ 5292: 0x6EBF,
+ 5293: 0x6EC0,
+ 5294: 0x6EC3,
+ 5295: 0x6EC4,
+ 5296: 0x6EC5,
+ 5297: 0x6EC6,
+ 5298: 0x6EC8,
+ 5299: 0x6EC9,
+ 5300: 0x6ECA,
+ 5301: 0x6ECC,
+ 5302: 0x6ECD,
+ 5303: 0x6ECE,
+ 5304: 0x6ED0,
+ 5305: 0x6ED2,
+ 5306: 0x6ED6,
+ 5307: 0x6ED8,
+ 5308: 0x6ED9,
+ 5309: 0x6EDB,
+ 5310: 0x6EDC,
+ 5311: 0x6EDD,
+ 5312: 0x6EE3,
+ 5313: 0x6EE7,
+ 5314: 0x6EEA,
+ 5315: 0x6EEB,
+ 5316: 0x6EEC,
+ 5317: 0x6EED,
+ 5318: 0x6EEE,
+ 5319: 0x6EEF,
+ 5320: 0x6EF0,
+ 5321: 0x6EF1,
+ 5322: 0x6EF2,
+ 5323: 0x6EF3,
+ 5324: 0x6EF5,
+ 5325: 0x6EF6,
+ 5326: 0x6EF7,
+ 5327: 0x6EF8,
+ 5328: 0x6EFA,
+ 5329: 0x6EFB,
+ 5330: 0x6EFC,
+ 5331: 0x6EFD,
+ 5332: 0x6EFE,
+ 5333: 0x6EFF,
+ 5334: 0x6F00,
+ 5335: 0x6F01,
+ 5336: 0x6F03,
+ 5337: 0x6F04,
+ 5338: 0x6F05,
+ 5339: 0x6F07,
+ 5340: 0x6F08,
+ 5341: 0x6F0A,
+ 5342: 0x6F0B,
+ 5343: 0x6F0C,
+ 5344: 0x6F0D,
+ 5345: 0x6F0E,
+ 5346: 0x6F10,
+ 5347: 0x6F11,
+ 5348: 0x6F12,
+ 5349: 0x6F16,
+ 5350: 0x6F17,
+ 5351: 0x6F18,
+ 5352: 0x6F19,
+ 5353: 0x6F1A,
+ 5354: 0x6F1B,
+ 5355: 0x6F1C,
+ 5356: 0x6F1D,
+ 5357: 0x6F1E,
+ 5358: 0x6F1F,
+ 5359: 0x6F21,
+ 5360: 0x6F22,
+ 5361: 0x6F23,
+ 5362: 0x6F25,
+ 5363: 0x6F26,
+ 5364: 0x6F27,
+ 5365: 0x6F28,
+ 5366: 0x6F2C,
+ 5367: 0x6F2E,
+ 5368: 0x6F30,
+ 5369: 0x6F32,
+ 5370: 0x6F34,
+ 5371: 0x6F35,
+ 5372: 0x6F37,
+ 5373: 0x6F38,
+ 5374: 0x6F39,
+ 5375: 0x6F3A,
+ 5376: 0x6F3B,
+ 5377: 0x6F3C,
+ 5378: 0x6F3D,
+ 5379: 0x6F3F,
+ 5380: 0x6F40,
+ 5381: 0x6F41,
+ 5382: 0x6F42,
+ 5383: 0x6F43,
+ 5384: 0x6F44,
+ 5385: 0x6F45,
+ 5386: 0x6F48,
+ 5387: 0x6F49,
+ 5388: 0x6F4A,
+ 5389: 0x6F4C,
+ 5390: 0x6F4E,
+ 5391: 0x6F4F,
+ 5392: 0x6F50,
+ 5393: 0x6F51,
+ 5394: 0x6F52,
+ 5395: 0x6F53,
+ 5396: 0x6F54,
+ 5397: 0x6F55,
+ 5398: 0x6F56,
+ 5399: 0x6F57,
+ 5400: 0x6F59,
+ 5401: 0x6F5A,
+ 5402: 0x6F5B,
+ 5403: 0x6F5D,
+ 5404: 0x6F5F,
+ 5405: 0x6F60,
+ 5406: 0x6F61,
+ 5407: 0x6F63,
+ 5408: 0x6F64,
+ 5409: 0x6F65,
+ 5410: 0x6F67,
+ 5411: 0x6F68,
+ 5412: 0x6F69,
+ 5413: 0x6F6A,
+ 5414: 0x6F6B,
+ 5415: 0x6F6C,
+ 5416: 0x6F6F,
+ 5417: 0x6F70,
+ 5418: 0x6F71,
+ 5419: 0x6F73,
+ 5420: 0x6F75,
+ 5421: 0x6F76,
+ 5422: 0x6F77,
+ 5423: 0x6F79,
+ 5424: 0x6F7B,
+ 5425: 0x6F7D,
+ 5426: 0x6F7E,
+ 5427: 0x6F7F,
+ 5428: 0x6F80,
+ 5429: 0x6F81,
+ 5430: 0x6F82,
+ 5431: 0x6F83,
+ 5432: 0x6F85,
+ 5433: 0x6F86,
+ 5434: 0x6F87,
+ 5435: 0x6F8A,
+ 5436: 0x6F8B,
+ 5437: 0x6F8F,
+ 5438: 0x6F90,
+ 5439: 0x6F91,
+ 5440: 0x6F92,
+ 5441: 0x6F93,
+ 5442: 0x6F94,
+ 5443: 0x6F95,
+ 5444: 0x6F96,
+ 5445: 0x6F97,
+ 5446: 0x6F98,
+ 5447: 0x6F99,
+ 5448: 0x6F9A,
+ 5449: 0x6F9B,
+ 5450: 0x6F9D,
+ 5451: 0x6F9E,
+ 5452: 0x6F9F,
+ 5453: 0x6FA0,
+ 5454: 0x6FA2,
+ 5455: 0x6FA3,
+ 5456: 0x6FA4,
+ 5457: 0x6FA5,
+ 5458: 0x6FA6,
+ 5459: 0x6FA8,
+ 5460: 0x6FA9,
+ 5461: 0x6FAA,
+ 5462: 0x6FAB,
+ 5463: 0x6FAC,
+ 5464: 0x6FAD,
+ 5465: 0x6FAE,
+ 5466: 0x6FAF,
+ 5467: 0x6FB0,
+ 5468: 0x6FB1,
+ 5469: 0x6FB2,
+ 5470: 0x6FB4,
+ 5471: 0x6FB5,
+ 5472: 0x6FB7,
+ 5473: 0x6FB8,
+ 5474: 0x6FBA,
+ 5475: 0x6FBB,
+ 5476: 0x6FBC,
+ 5477: 0x6FBD,
+ 5478: 0x6FBE,
+ 5479: 0x6FBF,
+ 5480: 0x6FC1,
+ 5481: 0x6FC3,
+ 5482: 0x6FC4,
+ 5483: 0x6FC5,
+ 5484: 0x6FC6,
+ 5485: 0x6FC7,
+ 5486: 0x6FC8,
+ 5487: 0x6FCA,
+ 5488: 0x6FCB,
+ 5489: 0x6FCC,
+ 5490: 0x6FCD,
+ 5491: 0x6FCE,
+ 5492: 0x6FCF,
+ 5493: 0x6FD0,
+ 5494: 0x6FD3,
+ 5495: 0x6FD4,
+ 5496: 0x6FD5,
+ 5497: 0x6FD6,
+ 5498: 0x6FD7,
+ 5499: 0x6FD8,
+ 5500: 0x6FD9,
+ 5501: 0x6FDA,
+ 5502: 0x6FDB,
+ 5503: 0x6FDC,
+ 5504: 0x6FDD,
+ 5505: 0x6FDF,
+ 5506: 0x6FE2,
+ 5507: 0x6FE3,
+ 5508: 0x6FE4,
+ 5509: 0x6FE5,
+ 5510: 0x6FE6,
+ 5511: 0x6FE7,
+ 5512: 0x6FE8,
+ 5513: 0x6FE9,
+ 5514: 0x6FEA,
+ 5515: 0x6FEB,
+ 5516: 0x6FEC,
+ 5517: 0x6FED,
+ 5518: 0x6FF0,
+ 5519: 0x6FF1,
+ 5520: 0x6FF2,
+ 5521: 0x6FF3,
+ 5522: 0x6FF4,
+ 5523: 0x6FF5,
+ 5524: 0x6FF6,
+ 5525: 0x6FF7,
+ 5526: 0x6FF8,
+ 5527: 0x6FF9,
+ 5528: 0x6FFA,
+ 5529: 0x6FFB,
+ 5530: 0x6FFC,
+ 5531: 0x6FFD,
+ 5532: 0x6FFE,
+ 5533: 0x6FFF,
+ 5534: 0x7000,
+ 5535: 0x7001,
+ 5536: 0x7002,
+ 5537: 0x7003,
+ 5538: 0x7004,
+ 5539: 0x7005,
+ 5540: 0x7006,
+ 5541: 0x7007,
+ 5542: 0x7008,
+ 5543: 0x7009,
+ 5544: 0x700A,
+ 5545: 0x700B,
+ 5546: 0x700C,
+ 5547: 0x700D,
+ 5548: 0x700E,
+ 5549: 0x700F,
+ 5550: 0x7010,
+ 5551: 0x7012,
+ 5552: 0x7013,
+ 5553: 0x7014,
+ 5554: 0x7015,
+ 5555: 0x7016,
+ 5556: 0x7017,
+ 5557: 0x7018,
+ 5558: 0x7019,
+ 5559: 0x701C,
+ 5560: 0x701D,
+ 5561: 0x701E,
+ 5562: 0x701F,
+ 5563: 0x7020,
+ 5564: 0x7021,
+ 5565: 0x7022,
+ 5566: 0x7024,
+ 5567: 0x7025,
+ 5568: 0x7026,
+ 5569: 0x7027,
+ 5570: 0x7028,
+ 5571: 0x7029,
+ 5572: 0x702A,
+ 5573: 0x702B,
+ 5574: 0x702C,
+ 5575: 0x702D,
+ 5576: 0x702E,
+ 5577: 0x702F,
+ 5578: 0x7030,
+ 5579: 0x7031,
+ 5580: 0x7032,
+ 5581: 0x7033,
+ 5582: 0x7034,
+ 5583: 0x7036,
+ 5584: 0x7037,
+ 5585: 0x7038,
+ 5586: 0x703A,
+ 5587: 0x703B,
+ 5588: 0x703C,
+ 5589: 0x703D,
+ 5590: 0x703E,
+ 5591: 0x703F,
+ 5592: 0x7040,
+ 5593: 0x7041,
+ 5594: 0x7042,
+ 5595: 0x7043,
+ 5596: 0x7044,
+ 5597: 0x7045,
+ 5598: 0x7046,
+ 5599: 0x7047,
+ 5600: 0x7048,
+ 5601: 0x7049,
+ 5602: 0x704A,
+ 5603: 0x704B,
+ 5604: 0x704D,
+ 5605: 0x704E,
+ 5606: 0x7050,
+ 5607: 0x7051,
+ 5608: 0x7052,
+ 5609: 0x7053,
+ 5610: 0x7054,
+ 5611: 0x7055,
+ 5612: 0x7056,
+ 5613: 0x7057,
+ 5614: 0x7058,
+ 5615: 0x7059,
+ 5616: 0x705A,
+ 5617: 0x705B,
+ 5618: 0x705C,
+ 5619: 0x705D,
+ 5620: 0x705F,
+ 5621: 0x7060,
+ 5622: 0x7061,
+ 5623: 0x7062,
+ 5624: 0x7063,
+ 5625: 0x7064,
+ 5626: 0x7065,
+ 5627: 0x7066,
+ 5628: 0x7067,
+ 5629: 0x7068,
+ 5630: 0x7069,
+ 5631: 0x706A,
+ 5632: 0x706E,
+ 5633: 0x7071,
+ 5634: 0x7072,
+ 5635: 0x7073,
+ 5636: 0x7074,
+ 5637: 0x7077,
+ 5638: 0x7079,
+ 5639: 0x707A,
+ 5640: 0x707B,
+ 5641: 0x707D,
+ 5642: 0x7081,
+ 5643: 0x7082,
+ 5644: 0x7083,
+ 5645: 0x7084,
+ 5646: 0x7086,
+ 5647: 0x7087,
+ 5648: 0x7088,
+ 5649: 0x708B,
+ 5650: 0x708C,
+ 5651: 0x708D,
+ 5652: 0x708F,
+ 5653: 0x7090,
+ 5654: 0x7091,
+ 5655: 0x7093,
+ 5656: 0x7097,
+ 5657: 0x7098,
+ 5658: 0x709A,
+ 5659: 0x709B,
+ 5660: 0x709E,
+ 5661: 0x709F,
+ 5662: 0x70A0,
+ 5663: 0x70A1,
+ 5664: 0x70A2,
+ 5665: 0x70A3,
+ 5666: 0x70A4,
+ 5667: 0x70A5,
+ 5668: 0x70A6,
+ 5669: 0x70A7,
+ 5670: 0x70A8,
+ 5671: 0x70A9,
+ 5672: 0x70AA,
+ 5673: 0x70B0,
+ 5674: 0x70B2,
+ 5675: 0x70B4,
+ 5676: 0x70B5,
+ 5677: 0x70B6,
+ 5678: 0x70BA,
+ 5679: 0x70BE,
+ 5680: 0x70BF,
+ 5681: 0x70C4,
+ 5682: 0x70C5,
+ 5683: 0x70C6,
+ 5684: 0x70C7,
+ 5685: 0x70C9,
+ 5686: 0x70CB,
+ 5687: 0x70CC,
+ 5688: 0x70CD,
+ 5689: 0x70CE,
+ 5690: 0x70CF,
+ 5691: 0x70D0,
+ 5692: 0x70D1,
+ 5693: 0x70D2,
+ 5694: 0x70D3,
+ 5695: 0x70D4,
+ 5696: 0x70D5,
+ 5697: 0x70D6,
+ 5698: 0x70D7,
+ 5699: 0x70DA,
+ 5700: 0x70DC,
+ 5701: 0x70DD,
+ 5702: 0x70DE,
+ 5703: 0x70E0,
+ 5704: 0x70E1,
+ 5705: 0x70E2,
+ 5706: 0x70E3,
+ 5707: 0x70E5,
+ 5708: 0x70EA,
+ 5709: 0x70EE,
+ 5710: 0x70F0,
+ 5711: 0x70F1,
+ 5712: 0x70F2,
+ 5713: 0x70F3,
+ 5714: 0x70F4,
+ 5715: 0x70F5,
+ 5716: 0x70F6,
+ 5717: 0x70F8,
+ 5718: 0x70FA,
+ 5719: 0x70FB,
+ 5720: 0x70FC,
+ 5721: 0x70FE,
+ 5722: 0x70FF,
+ 5723: 0x7100,
+ 5724: 0x7101,
+ 5725: 0x7102,
+ 5726: 0x7103,
+ 5727: 0x7104,
+ 5728: 0x7105,
+ 5729: 0x7106,
+ 5730: 0x7107,
+ 5731: 0x7108,
+ 5732: 0x710B,
+ 5733: 0x710C,
+ 5734: 0x710D,
+ 5735: 0x710E,
+ 5736: 0x710F,
+ 5737: 0x7111,
+ 5738: 0x7112,
+ 5739: 0x7114,
+ 5740: 0x7117,
+ 5741: 0x711B,
+ 5742: 0x711C,
+ 5743: 0x711D,
+ 5744: 0x711E,
+ 5745: 0x711F,
+ 5746: 0x7120,
+ 5747: 0x7121,
+ 5748: 0x7122,
+ 5749: 0x7123,
+ 5750: 0x7124,
+ 5751: 0x7125,
+ 5752: 0x7127,
+ 5753: 0x7128,
+ 5754: 0x7129,
+ 5755: 0x712A,
+ 5756: 0x712B,
+ 5757: 0x712C,
+ 5758: 0x712D,
+ 5759: 0x712E,
+ 5760: 0x7132,
+ 5761: 0x7133,
+ 5762: 0x7134,
+ 5763: 0x7135,
+ 5764: 0x7137,
+ 5765: 0x7138,
+ 5766: 0x7139,
+ 5767: 0x713A,
+ 5768: 0x713B,
+ 5769: 0x713C,
+ 5770: 0x713D,
+ 5771: 0x713E,
+ 5772: 0x713F,
+ 5773: 0x7140,
+ 5774: 0x7141,
+ 5775: 0x7142,
+ 5776: 0x7143,
+ 5777: 0x7144,
+ 5778: 0x7146,
+ 5779: 0x7147,
+ 5780: 0x7148,
+ 5781: 0x7149,
+ 5782: 0x714B,
+ 5783: 0x714D,
+ 5784: 0x714F,
+ 5785: 0x7150,
+ 5786: 0x7151,
+ 5787: 0x7152,
+ 5788: 0x7153,
+ 5789: 0x7154,
+ 5790: 0x7155,
+ 5791: 0x7156,
+ 5792: 0x7157,
+ 5793: 0x7158,
+ 5794: 0x7159,
+ 5795: 0x715A,
+ 5796: 0x715B,
+ 5797: 0x715D,
+ 5798: 0x715F,
+ 5799: 0x7160,
+ 5800: 0x7161,
+ 5801: 0x7162,
+ 5802: 0x7163,
+ 5803: 0x7165,
+ 5804: 0x7169,
+ 5805: 0x716A,
+ 5806: 0x716B,
+ 5807: 0x716C,
+ 5808: 0x716D,
+ 5809: 0x716F,
+ 5810: 0x7170,
+ 5811: 0x7171,
+ 5812: 0x7174,
+ 5813: 0x7175,
+ 5814: 0x7176,
+ 5815: 0x7177,
+ 5816: 0x7179,
+ 5817: 0x717B,
+ 5818: 0x717C,
+ 5819: 0x717E,
+ 5820: 0x717F,
+ 5821: 0x7180,
+ 5822: 0x7181,
+ 5823: 0x7182,
+ 5824: 0x7183,
+ 5825: 0x7185,
+ 5826: 0x7186,
+ 5827: 0x7187,
+ 5828: 0x7188,
+ 5829: 0x7189,
+ 5830: 0x718B,
+ 5831: 0x718C,
+ 5832: 0x718D,
+ 5833: 0x718E,
+ 5834: 0x7190,
+ 5835: 0x7191,
+ 5836: 0x7192,
+ 5837: 0x7193,
+ 5838: 0x7195,
+ 5839: 0x7196,
+ 5840: 0x7197,
+ 5841: 0x719A,
+ 5842: 0x719B,
+ 5843: 0x719C,
+ 5844: 0x719D,
+ 5845: 0x719E,
+ 5846: 0x71A1,
+ 5847: 0x71A2,
+ 5848: 0x71A3,
+ 5849: 0x71A4,
+ 5850: 0x71A5,
+ 5851: 0x71A6,
+ 5852: 0x71A7,
+ 5853: 0x71A9,
+ 5854: 0x71AA,
+ 5855: 0x71AB,
+ 5856: 0x71AD,
+ 5857: 0x71AE,
+ 5858: 0x71AF,
+ 5859: 0x71B0,
+ 5860: 0x71B1,
+ 5861: 0x71B2,
+ 5862: 0x71B4,
+ 5863: 0x71B6,
+ 5864: 0x71B7,
+ 5865: 0x71B8,
+ 5866: 0x71BA,
+ 5867: 0x71BB,
+ 5868: 0x71BC,
+ 5869: 0x71BD,
+ 5870: 0x71BE,
+ 5871: 0x71BF,
+ 5872: 0x71C0,
+ 5873: 0x71C1,
+ 5874: 0x71C2,
+ 5875: 0x71C4,
+ 5876: 0x71C5,
+ 5877: 0x71C6,
+ 5878: 0x71C7,
+ 5879: 0x71C8,
+ 5880: 0x71C9,
+ 5881: 0x71CA,
+ 5882: 0x71CB,
+ 5883: 0x71CC,
+ 5884: 0x71CD,
+ 5885: 0x71CF,
+ 5886: 0x71D0,
+ 5887: 0x71D1,
+ 5888: 0x71D2,
+ 5889: 0x71D3,
+ 5890: 0x71D6,
+ 5891: 0x71D7,
+ 5892: 0x71D8,
+ 5893: 0x71D9,
+ 5894: 0x71DA,
+ 5895: 0x71DB,
+ 5896: 0x71DC,
+ 5897: 0x71DD,
+ 5898: 0x71DE,
+ 5899: 0x71DF,
+ 5900: 0x71E1,
+ 5901: 0x71E2,
+ 5902: 0x71E3,
+ 5903: 0x71E4,
+ 5904: 0x71E6,
+ 5905: 0x71E8,
+ 5906: 0x71E9,
+ 5907: 0x71EA,
+ 5908: 0x71EB,
+ 5909: 0x71EC,
+ 5910: 0x71ED,
+ 5911: 0x71EF,
+ 5912: 0x71F0,
+ 5913: 0x71F1,
+ 5914: 0x71F2,
+ 5915: 0x71F3,
+ 5916: 0x71F4,
+ 5917: 0x71F5,
+ 5918: 0x71F6,
+ 5919: 0x71F7,
+ 5920: 0x71F8,
+ 5921: 0x71FA,
+ 5922: 0x71FB,
+ 5923: 0x71FC,
+ 5924: 0x71FD,
+ 5925: 0x71FE,
+ 5926: 0x71FF,
+ 5927: 0x7200,
+ 5928: 0x7201,
+ 5929: 0x7202,
+ 5930: 0x7203,
+ 5931: 0x7204,
+ 5932: 0x7205,
+ 5933: 0x7207,
+ 5934: 0x7208,
+ 5935: 0x7209,
+ 5936: 0x720A,
+ 5937: 0x720B,
+ 5938: 0x720C,
+ 5939: 0x720D,
+ 5940: 0x720E,
+ 5941: 0x720F,
+ 5942: 0x7210,
+ 5943: 0x7211,
+ 5944: 0x7212,
+ 5945: 0x7213,
+ 5946: 0x7214,
+ 5947: 0x7215,
+ 5948: 0x7216,
+ 5949: 0x7217,
+ 5950: 0x7218,
+ 5951: 0x7219,
+ 5952: 0x721A,
+ 5953: 0x721B,
+ 5954: 0x721C,
+ 5955: 0x721E,
+ 5956: 0x721F,
+ 5957: 0x7220,
+ 5958: 0x7221,
+ 5959: 0x7222,
+ 5960: 0x7223,
+ 5961: 0x7224,
+ 5962: 0x7225,
+ 5963: 0x7226,
+ 5964: 0x7227,
+ 5965: 0x7229,
+ 5966: 0x722B,
+ 5967: 0x722D,
+ 5968: 0x722E,
+ 5969: 0x722F,
+ 5970: 0x7232,
+ 5971: 0x7233,
+ 5972: 0x7234,
+ 5973: 0x723A,
+ 5974: 0x723C,
+ 5975: 0x723E,
+ 5976: 0x7240,
+ 5977: 0x7241,
+ 5978: 0x7242,
+ 5979: 0x7243,
+ 5980: 0x7244,
+ 5981: 0x7245,
+ 5982: 0x7246,
+ 5983: 0x7249,
+ 5984: 0x724A,
+ 5985: 0x724B,
+ 5986: 0x724E,
+ 5987: 0x724F,
+ 5988: 0x7250,
+ 5989: 0x7251,
+ 5990: 0x7253,
+ 5991: 0x7254,
+ 5992: 0x7255,
+ 5993: 0x7257,
+ 5994: 0x7258,
+ 5995: 0x725A,
+ 5996: 0x725C,
+ 5997: 0x725E,
+ 5998: 0x7260,
+ 5999: 0x7263,
+ 6000: 0x7264,
+ 6001: 0x7265,
+ 6002: 0x7268,
+ 6003: 0x726A,
+ 6004: 0x726B,
+ 6005: 0x726C,
+ 6006: 0x726D,
+ 6007: 0x7270,
+ 6008: 0x7271,
+ 6009: 0x7273,
+ 6010: 0x7274,
+ 6011: 0x7276,
+ 6012: 0x7277,
+ 6013: 0x7278,
+ 6014: 0x727B,
+ 6015: 0x727C,
+ 6016: 0x727D,
+ 6017: 0x7282,
+ 6018: 0x7283,
+ 6019: 0x7285,
+ 6020: 0x7286,
+ 6021: 0x7287,
+ 6022: 0x7288,
+ 6023: 0x7289,
+ 6024: 0x728C,
+ 6025: 0x728E,
+ 6026: 0x7290,
+ 6027: 0x7291,
+ 6028: 0x7293,
+ 6029: 0x7294,
+ 6030: 0x7295,
+ 6031: 0x7296,
+ 6032: 0x7297,
+ 6033: 0x7298,
+ 6034: 0x7299,
+ 6035: 0x729A,
+ 6036: 0x729B,
+ 6037: 0x729C,
+ 6038: 0x729D,
+ 6039: 0x729E,
+ 6040: 0x72A0,
+ 6041: 0x72A1,
+ 6042: 0x72A2,
+ 6043: 0x72A3,
+ 6044: 0x72A4,
+ 6045: 0x72A5,
+ 6046: 0x72A6,
+ 6047: 0x72A7,
+ 6048: 0x72A8,
+ 6049: 0x72A9,
+ 6050: 0x72AA,
+ 6051: 0x72AB,
+ 6052: 0x72AE,
+ 6053: 0x72B1,
+ 6054: 0x72B2,
+ 6055: 0x72B3,
+ 6056: 0x72B5,
+ 6057: 0x72BA,
+ 6058: 0x72BB,
+ 6059: 0x72BC,
+ 6060: 0x72BD,
+ 6061: 0x72BE,
+ 6062: 0x72BF,
+ 6063: 0x72C0,
+ 6064: 0x72C5,
+ 6065: 0x72C6,
+ 6066: 0x72C7,
+ 6067: 0x72C9,
+ 6068: 0x72CA,
+ 6069: 0x72CB,
+ 6070: 0x72CC,
+ 6071: 0x72CF,
+ 6072: 0x72D1,
+ 6073: 0x72D3,
+ 6074: 0x72D4,
+ 6075: 0x72D5,
+ 6076: 0x72D6,
+ 6077: 0x72D8,
+ 6078: 0x72DA,
+ 6079: 0x72DB,
+ 6176: 0x3000,
+ 6177: 0x3001,
+ 6178: 0x3002,
+ 6179: 0x00B7,
+ 6180: 0x02C9,
+ 6181: 0x02C7,
+ 6182: 0x00A8,
+ 6183: 0x3003,
+ 6184: 0x3005,
+ 6185: 0x2014,
+ 6186: 0xFF5E,
+ 6187: 0x2016,
+ 6188: 0x2026,
+ 6189: 0x2018,
+ 6190: 0x2019,
+ 6191: 0x201C,
+ 6192: 0x201D,
+ 6193: 0x3014,
+ 6194: 0x3015,
+ 6195: 0x3008,
+ 6196: 0x3009,
+ 6197: 0x300A,
+ 6198: 0x300B,
+ 6199: 0x300C,
+ 6200: 0x300D,
+ 6201: 0x300E,
+ 6202: 0x300F,
+ 6203: 0x3016,
+ 6204: 0x3017,
+ 6205: 0x3010,
+ 6206: 0x3011,
+ 6207: 0x00B1,
+ 6208: 0x00D7,
+ 6209: 0x00F7,
+ 6210: 0x2236,
+ 6211: 0x2227,
+ 6212: 0x2228,
+ 6213: 0x2211,
+ 6214: 0x220F,
+ 6215: 0x222A,
+ 6216: 0x2229,
+ 6217: 0x2208,
+ 6218: 0x2237,
+ 6219: 0x221A,
+ 6220: 0x22A5,
+ 6221: 0x2225,
+ 6222: 0x2220,
+ 6223: 0x2312,
+ 6224: 0x2299,
+ 6225: 0x222B,
+ 6226: 0x222E,
+ 6227: 0x2261,
+ 6228: 0x224C,
+ 6229: 0x2248,
+ 6230: 0x223D,
+ 6231: 0x221D,
+ 6232: 0x2260,
+ 6233: 0x226E,
+ 6234: 0x226F,
+ 6235: 0x2264,
+ 6236: 0x2265,
+ 6237: 0x221E,
+ 6238: 0x2235,
+ 6239: 0x2234,
+ 6240: 0x2642,
+ 6241: 0x2640,
+ 6242: 0x00B0,
+ 6243: 0x2032,
+ 6244: 0x2033,
+ 6245: 0x2103,
+ 6246: 0xFF04,
+ 6247: 0x00A4,
+ 6248: 0xFFE0,
+ 6249: 0xFFE1,
+ 6250: 0x2030,
+ 6251: 0x00A7,
+ 6252: 0x2116,
+ 6253: 0x2606,
+ 6254: 0x2605,
+ 6255: 0x25CB,
+ 6256: 0x25CF,
+ 6257: 0x25CE,
+ 6258: 0x25C7,
+ 6259: 0x25C6,
+ 6260: 0x25A1,
+ 6261: 0x25A0,
+ 6262: 0x25B3,
+ 6263: 0x25B2,
+ 6264: 0x203B,
+ 6265: 0x2192,
+ 6266: 0x2190,
+ 6267: 0x2191,
+ 6268: 0x2193,
+ 6269: 0x3013,
+ 6366: 0x2170,
+ 6367: 0x2171,
+ 6368: 0x2172,
+ 6369: 0x2173,
+ 6370: 0x2174,
+ 6371: 0x2175,
+ 6372: 0x2176,
+ 6373: 0x2177,
+ 6374: 0x2178,
+ 6375: 0x2179,
+ 6382: 0x2488,
+ 6383: 0x2489,
+ 6384: 0x248A,
+ 6385: 0x248B,
+ 6386: 0x248C,
+ 6387: 0x248D,
+ 6388: 0x248E,
+ 6389: 0x248F,
+ 6390: 0x2490,
+ 6391: 0x2491,
+ 6392: 0x2492,
+ 6393: 0x2493,
+ 6394: 0x2494,
+ 6395: 0x2495,
+ 6396: 0x2496,
+ 6397: 0x2497,
+ 6398: 0x2498,
+ 6399: 0x2499,
+ 6400: 0x249A,
+ 6401: 0x249B,
+ 6402: 0x2474,
+ 6403: 0x2475,
+ 6404: 0x2476,
+ 6405: 0x2477,
+ 6406: 0x2478,
+ 6407: 0x2479,
+ 6408: 0x247A,
+ 6409: 0x247B,
+ 6410: 0x247C,
+ 6411: 0x247D,
+ 6412: 0x247E,
+ 6413: 0x247F,
+ 6414: 0x2480,
+ 6415: 0x2481,
+ 6416: 0x2482,
+ 6417: 0x2483,
+ 6418: 0x2484,
+ 6419: 0x2485,
+ 6420: 0x2486,
+ 6421: 0x2487,
+ 6422: 0x2460,
+ 6423: 0x2461,
+ 6424: 0x2462,
+ 6425: 0x2463,
+ 6426: 0x2464,
+ 6427: 0x2465,
+ 6428: 0x2466,
+ 6429: 0x2467,
+ 6430: 0x2468,
+ 6431: 0x2469,
+ 6432: 0x20AC,
+ 6434: 0x3220,
+ 6435: 0x3221,
+ 6436: 0x3222,
+ 6437: 0x3223,
+ 6438: 0x3224,
+ 6439: 0x3225,
+ 6440: 0x3226,
+ 6441: 0x3227,
+ 6442: 0x3228,
+ 6443: 0x3229,
+ 6446: 0x2160,
+ 6447: 0x2161,
+ 6448: 0x2162,
+ 6449: 0x2163,
+ 6450: 0x2164,
+ 6451: 0x2165,
+ 6452: 0x2166,
+ 6453: 0x2167,
+ 6454: 0x2168,
+ 6455: 0x2169,
+ 6456: 0x216A,
+ 6457: 0x216B,
+ 6555: 0x3000,
+ 6556: 0xFF01,
+ 6557: 0xFF02,
+ 6558: 0xFF03,
+ 6559: 0xFFE5,
+ 6560: 0xFF05,
+ 6561: 0xFF06,
+ 6562: 0xFF07,
+ 6563: 0xFF08,
+ 6564: 0xFF09,
+ 6565: 0xFF0A,
+ 6566: 0xFF0B,
+ 6567: 0xFF0C,
+ 6568: 0xFF0D,
+ 6569: 0xFF0E,
+ 6570: 0xFF0F,
+ 6571: 0xFF10,
+ 6572: 0xFF11,
+ 6573: 0xFF12,
+ 6574: 0xFF13,
+ 6575: 0xFF14,
+ 6576: 0xFF15,
+ 6577: 0xFF16,
+ 6578: 0xFF17,
+ 6579: 0xFF18,
+ 6580: 0xFF19,
+ 6581: 0xFF1A,
+ 6582: 0xFF1B,
+ 6583: 0xFF1C,
+ 6584: 0xFF1D,
+ 6585: 0xFF1E,
+ 6586: 0xFF1F,
+ 6587: 0xFF20,
+ 6588: 0xFF21,
+ 6589: 0xFF22,
+ 6590: 0xFF23,
+ 6591: 0xFF24,
+ 6592: 0xFF25,
+ 6593: 0xFF26,
+ 6594: 0xFF27,
+ 6595: 0xFF28,
+ 6596: 0xFF29,
+ 6597: 0xFF2A,
+ 6598: 0xFF2B,
+ 6599: 0xFF2C,
+ 6600: 0xFF2D,
+ 6601: 0xFF2E,
+ 6602: 0xFF2F,
+ 6603: 0xFF30,
+ 6604: 0xFF31,
+ 6605: 0xFF32,
+ 6606: 0xFF33,
+ 6607: 0xFF34,
+ 6608: 0xFF35,
+ 6609: 0xFF36,
+ 6610: 0xFF37,
+ 6611: 0xFF38,
+ 6612: 0xFF39,
+ 6613: 0xFF3A,
+ 6614: 0xFF3B,
+ 6615: 0xFF3C,
+ 6616: 0xFF3D,
+ 6617: 0xFF3E,
+ 6618: 0xFF3F,
+ 6619: 0xFF40,
+ 6620: 0xFF41,
+ 6621: 0xFF42,
+ 6622: 0xFF43,
+ 6623: 0xFF44,
+ 6624: 0xFF45,
+ 6625: 0xFF46,
+ 6626: 0xFF47,
+ 6627: 0xFF48,
+ 6628: 0xFF49,
+ 6629: 0xFF4A,
+ 6630: 0xFF4B,
+ 6631: 0xFF4C,
+ 6632: 0xFF4D,
+ 6633: 0xFF4E,
+ 6634: 0xFF4F,
+ 6635: 0xFF50,
+ 6636: 0xFF51,
+ 6637: 0xFF52,
+ 6638: 0xFF53,
+ 6639: 0xFF54,
+ 6640: 0xFF55,
+ 6641: 0xFF56,
+ 6642: 0xFF57,
+ 6643: 0xFF58,
+ 6644: 0xFF59,
+ 6645: 0xFF5A,
+ 6646: 0xFF5B,
+ 6647: 0xFF5C,
+ 6648: 0xFF5D,
+ 6649: 0xFFE3,
+ 6746: 0x3041,
+ 6747: 0x3042,
+ 6748: 0x3043,
+ 6749: 0x3044,
+ 6750: 0x3045,
+ 6751: 0x3046,
+ 6752: 0x3047,
+ 6753: 0x3048,
+ 6754: 0x3049,
+ 6755: 0x304A,
+ 6756: 0x304B,
+ 6757: 0x304C,
+ 6758: 0x304D,
+ 6759: 0x304E,
+ 6760: 0x304F,
+ 6761: 0x3050,
+ 6762: 0x3051,
+ 6763: 0x3052,
+ 6764: 0x3053,
+ 6765: 0x3054,
+ 6766: 0x3055,
+ 6767: 0x3056,
+ 6768: 0x3057,
+ 6769: 0x3058,
+ 6770: 0x3059,
+ 6771: 0x305A,
+ 6772: 0x305B,
+ 6773: 0x305C,
+ 6774: 0x305D,
+ 6775: 0x305E,
+ 6776: 0x305F,
+ 6777: 0x3060,
+ 6778: 0x3061,
+ 6779: 0x3062,
+ 6780: 0x3063,
+ 6781: 0x3064,
+ 6782: 0x3065,
+ 6783: 0x3066,
+ 6784: 0x3067,
+ 6785: 0x3068,
+ 6786: 0x3069,
+ 6787: 0x306A,
+ 6788: 0x306B,
+ 6789: 0x306C,
+ 6790: 0x306D,
+ 6791: 0x306E,
+ 6792: 0x306F,
+ 6793: 0x3070,
+ 6794: 0x3071,
+ 6795: 0x3072,
+ 6796: 0x3073,
+ 6797: 0x3074,
+ 6798: 0x3075,
+ 6799: 0x3076,
+ 6800: 0x3077,
+ 6801: 0x3078,
+ 6802: 0x3079,
+ 6803: 0x307A,
+ 6804: 0x307B,
+ 6805: 0x307C,
+ 6806: 0x307D,
+ 6807: 0x307E,
+ 6808: 0x307F,
+ 6809: 0x3080,
+ 6810: 0x3081,
+ 6811: 0x3082,
+ 6812: 0x3083,
+ 6813: 0x3084,
+ 6814: 0x3085,
+ 6815: 0x3086,
+ 6816: 0x3087,
+ 6817: 0x3088,
+ 6818: 0x3089,
+ 6819: 0x308A,
+ 6820: 0x308B,
+ 6821: 0x308C,
+ 6822: 0x308D,
+ 6823: 0x308E,
+ 6824: 0x308F,
+ 6825: 0x3090,
+ 6826: 0x3091,
+ 6827: 0x3092,
+ 6828: 0x3093,
+ 6936: 0x30A1,
+ 6937: 0x30A2,
+ 6938: 0x30A3,
+ 6939: 0x30A4,
+ 6940: 0x30A5,
+ 6941: 0x30A6,
+ 6942: 0x30A7,
+ 6943: 0x30A8,
+ 6944: 0x30A9,
+ 6945: 0x30AA,
+ 6946: 0x30AB,
+ 6947: 0x30AC,
+ 6948: 0x30AD,
+ 6949: 0x30AE,
+ 6950: 0x30AF,
+ 6951: 0x30B0,
+ 6952: 0x30B1,
+ 6953: 0x30B2,
+ 6954: 0x30B3,
+ 6955: 0x30B4,
+ 6956: 0x30B5,
+ 6957: 0x30B6,
+ 6958: 0x30B7,
+ 6959: 0x30B8,
+ 6960: 0x30B9,
+ 6961: 0x30BA,
+ 6962: 0x30BB,
+ 6963: 0x30BC,
+ 6964: 0x30BD,
+ 6965: 0x30BE,
+ 6966: 0x30BF,
+ 6967: 0x30C0,
+ 6968: 0x30C1,
+ 6969: 0x30C2,
+ 6970: 0x30C3,
+ 6971: 0x30C4,
+ 6972: 0x30C5,
+ 6973: 0x30C6,
+ 6974: 0x30C7,
+ 6975: 0x30C8,
+ 6976: 0x30C9,
+ 6977: 0x30CA,
+ 6978: 0x30CB,
+ 6979: 0x30CC,
+ 6980: 0x30CD,
+ 6981: 0x30CE,
+ 6982: 0x30CF,
+ 6983: 0x30D0,
+ 6984: 0x30D1,
+ 6985: 0x30D2,
+ 6986: 0x30D3,
+ 6987: 0x30D4,
+ 6988: 0x30D5,
+ 6989: 0x30D6,
+ 6990: 0x30D7,
+ 6991: 0x30D8,
+ 6992: 0x30D9,
+ 6993: 0x30DA,
+ 6994: 0x30DB,
+ 6995: 0x30DC,
+ 6996: 0x30DD,
+ 6997: 0x30DE,
+ 6998: 0x30DF,
+ 6999: 0x30E0,
+ 7000: 0x30E1,
+ 7001: 0x30E2,
+ 7002: 0x30E3,
+ 7003: 0x30E4,
+ 7004: 0x30E5,
+ 7005: 0x30E6,
+ 7006: 0x30E7,
+ 7007: 0x30E8,
+ 7008: 0x30E9,
+ 7009: 0x30EA,
+ 7010: 0x30EB,
+ 7011: 0x30EC,
+ 7012: 0x30ED,
+ 7013: 0x30EE,
+ 7014: 0x30EF,
+ 7015: 0x30F0,
+ 7016: 0x30F1,
+ 7017: 0x30F2,
+ 7018: 0x30F3,
+ 7019: 0x30F4,
+ 7020: 0x30F5,
+ 7021: 0x30F6,
+ 7126: 0x0391,
+ 7127: 0x0392,
+ 7128: 0x0393,
+ 7129: 0x0394,
+ 7130: 0x0395,
+ 7131: 0x0396,
+ 7132: 0x0397,
+ 7133: 0x0398,
+ 7134: 0x0399,
+ 7135: 0x039A,
+ 7136: 0x039B,
+ 7137: 0x039C,
+ 7138: 0x039D,
+ 7139: 0x039E,
+ 7140: 0x039F,
+ 7141: 0x03A0,
+ 7142: 0x03A1,
+ 7143: 0x03A3,
+ 7144: 0x03A4,
+ 7145: 0x03A5,
+ 7146: 0x03A6,
+ 7147: 0x03A7,
+ 7148: 0x03A8,
+ 7149: 0x03A9,
+ 7158: 0x03B1,
+ 7159: 0x03B2,
+ 7160: 0x03B3,
+ 7161: 0x03B4,
+ 7162: 0x03B5,
+ 7163: 0x03B6,
+ 7164: 0x03B7,
+ 7165: 0x03B8,
+ 7166: 0x03B9,
+ 7167: 0x03BA,
+ 7168: 0x03BB,
+ 7169: 0x03BC,
+ 7170: 0x03BD,
+ 7171: 0x03BE,
+ 7172: 0x03BF,
+ 7173: 0x03C0,
+ 7174: 0x03C1,
+ 7175: 0x03C3,
+ 7176: 0x03C4,
+ 7177: 0x03C5,
+ 7178: 0x03C6,
+ 7179: 0x03C7,
+ 7180: 0x03C8,
+ 7181: 0x03C9,
+ 7189: 0xFE35,
+ 7190: 0xFE36,
+ 7191: 0xFE39,
+ 7192: 0xFE3A,
+ 7193: 0xFE3F,
+ 7194: 0xFE40,
+ 7195: 0xFE3D,
+ 7196: 0xFE3E,
+ 7197: 0xFE41,
+ 7198: 0xFE42,
+ 7199: 0xFE43,
+ 7200: 0xFE44,
+ 7203: 0xFE3B,
+ 7204: 0xFE3C,
+ 7205: 0xFE37,
+ 7206: 0xFE38,
+ 7207: 0xFE31,
+ 7209: 0xFE33,
+ 7210: 0xFE34,
+ 7316: 0x0410,
+ 7317: 0x0411,
+ 7318: 0x0412,
+ 7319: 0x0413,
+ 7320: 0x0414,
+ 7321: 0x0415,
+ 7322: 0x0401,
+ 7323: 0x0416,
+ 7324: 0x0417,
+ 7325: 0x0418,
+ 7326: 0x0419,
+ 7327: 0x041A,
+ 7328: 0x041B,
+ 7329: 0x041C,
+ 7330: 0x041D,
+ 7331: 0x041E,
+ 7332: 0x041F,
+ 7333: 0x0420,
+ 7334: 0x0421,
+ 7335: 0x0422,
+ 7336: 0x0423,
+ 7337: 0x0424,
+ 7338: 0x0425,
+ 7339: 0x0426,
+ 7340: 0x0427,
+ 7341: 0x0428,
+ 7342: 0x0429,
+ 7343: 0x042A,
+ 7344: 0x042B,
+ 7345: 0x042C,
+ 7346: 0x042D,
+ 7347: 0x042E,
+ 7348: 0x042F,
+ 7364: 0x0430,
+ 7365: 0x0431,
+ 7366: 0x0432,
+ 7367: 0x0433,
+ 7368: 0x0434,
+ 7369: 0x0435,
+ 7370: 0x0451,
+ 7371: 0x0436,
+ 7372: 0x0437,
+ 7373: 0x0438,
+ 7374: 0x0439,
+ 7375: 0x043A,
+ 7376: 0x043B,
+ 7377: 0x043C,
+ 7378: 0x043D,
+ 7379: 0x043E,
+ 7380: 0x043F,
+ 7381: 0x0440,
+ 7382: 0x0441,
+ 7383: 0x0442,
+ 7384: 0x0443,
+ 7385: 0x0444,
+ 7386: 0x0445,
+ 7387: 0x0446,
+ 7388: 0x0447,
+ 7389: 0x0448,
+ 7390: 0x0449,
+ 7391: 0x044A,
+ 7392: 0x044B,
+ 7393: 0x044C,
+ 7394: 0x044D,
+ 7395: 0x044E,
+ 7396: 0x044F,
+ 7410: 0x02CA,
+ 7411: 0x02CB,
+ 7412: 0x02D9,
+ 7413: 0x2013,
+ 7414: 0x2015,
+ 7415: 0x2025,
+ 7416: 0x2035,
+ 7417: 0x2105,
+ 7418: 0x2109,
+ 7419: 0x2196,
+ 7420: 0x2197,
+ 7421: 0x2198,
+ 7422: 0x2199,
+ 7423: 0x2215,
+ 7424: 0x221F,
+ 7425: 0x2223,
+ 7426: 0x2252,
+ 7427: 0x2266,
+ 7428: 0x2267,
+ 7429: 0x22BF,
+ 7430: 0x2550,
+ 7431: 0x2551,
+ 7432: 0x2552,
+ 7433: 0x2553,
+ 7434: 0x2554,
+ 7435: 0x2555,
+ 7436: 0x2556,
+ 7437: 0x2557,
+ 7438: 0x2558,
+ 7439: 0x2559,
+ 7440: 0x255A,
+ 7441: 0x255B,
+ 7442: 0x255C,
+ 7443: 0x255D,
+ 7444: 0x255E,
+ 7445: 0x255F,
+ 7446: 0x2560,
+ 7447: 0x2561,
+ 7448: 0x2562,
+ 7449: 0x2563,
+ 7450: 0x2564,
+ 7451: 0x2565,
+ 7452: 0x2566,
+ 7453: 0x2567,
+ 7454: 0x2568,
+ 7455: 0x2569,
+ 7456: 0x256A,
+ 7457: 0x256B,
+ 7458: 0x256C,
+ 7459: 0x256D,
+ 7460: 0x256E,
+ 7461: 0x256F,
+ 7462: 0x2570,
+ 7463: 0x2571,
+ 7464: 0x2572,
+ 7465: 0x2573,
+ 7466: 0x2581,
+ 7467: 0x2582,
+ 7468: 0x2583,
+ 7469: 0x2584,
+ 7470: 0x2585,
+ 7471: 0x2586,
+ 7472: 0x2587,
+ 7473: 0x2588,
+ 7474: 0x2589,
+ 7475: 0x258A,
+ 7476: 0x258B,
+ 7477: 0x258C,
+ 7478: 0x258D,
+ 7479: 0x258E,
+ 7480: 0x258F,
+ 7481: 0x2593,
+ 7482: 0x2594,
+ 7483: 0x2595,
+ 7484: 0x25BC,
+ 7485: 0x25BD,
+ 7486: 0x25E2,
+ 7487: 0x25E3,
+ 7488: 0x25E4,
+ 7489: 0x25E5,
+ 7490: 0x2609,
+ 7491: 0x2295,
+ 7492: 0x3012,
+ 7493: 0x301D,
+ 7494: 0x301E,
+ 7506: 0x0101,
+ 7507: 0x00E1,
+ 7508: 0x01CE,
+ 7509: 0x00E0,
+ 7510: 0x0113,
+ 7511: 0x00E9,
+ 7512: 0x011B,
+ 7513: 0x00E8,
+ 7514: 0x012B,
+ 7515: 0x00ED,
+ 7516: 0x01D0,
+ 7517: 0x00EC,
+ 7518: 0x014D,
+ 7519: 0x00F3,
+ 7520: 0x01D2,
+ 7521: 0x00F2,
+ 7522: 0x016B,
+ 7523: 0x00FA,
+ 7524: 0x01D4,
+ 7525: 0x00F9,
+ 7526: 0x01D6,
+ 7527: 0x01D8,
+ 7528: 0x01DA,
+ 7529: 0x01DC,
+ 7530: 0x00FC,
+ 7531: 0x00EA,
+ 7532: 0x0251,
+ 7534: 0x0144,
+ 7535: 0x0148,
+ 7536: 0x01F9,
+ 7537: 0x0261,
+ 7542: 0x3105,
+ 7543: 0x3106,
+ 7544: 0x3107,
+ 7545: 0x3108,
+ 7546: 0x3109,
+ 7547: 0x310A,
+ 7548: 0x310B,
+ 7549: 0x310C,
+ 7550: 0x310D,
+ 7551: 0x310E,
+ 7552: 0x310F,
+ 7553: 0x3110,
+ 7554: 0x3111,
+ 7555: 0x3112,
+ 7556: 0x3113,
+ 7557: 0x3114,
+ 7558: 0x3115,
+ 7559: 0x3116,
+ 7560: 0x3117,
+ 7561: 0x3118,
+ 7562: 0x3119,
+ 7563: 0x311A,
+ 7564: 0x311B,
+ 7565: 0x311C,
+ 7566: 0x311D,
+ 7567: 0x311E,
+ 7568: 0x311F,
+ 7569: 0x3120,
+ 7570: 0x3121,
+ 7571: 0x3122,
+ 7572: 0x3123,
+ 7573: 0x3124,
+ 7574: 0x3125,
+ 7575: 0x3126,
+ 7576: 0x3127,
+ 7577: 0x3128,
+ 7578: 0x3129,
+ 7600: 0x3021,
+ 7601: 0x3022,
+ 7602: 0x3023,
+ 7603: 0x3024,
+ 7604: 0x3025,
+ 7605: 0x3026,
+ 7606: 0x3027,
+ 7607: 0x3028,
+ 7608: 0x3029,
+ 7609: 0x32A3,
+ 7610: 0x338E,
+ 7611: 0x338F,
+ 7612: 0x339C,
+ 7613: 0x339D,
+ 7614: 0x339E,
+ 7615: 0x33A1,
+ 7616: 0x33C4,
+ 7617: 0x33CE,
+ 7618: 0x33D1,
+ 7619: 0x33D2,
+ 7620: 0x33D5,
+ 7621: 0xFE30,
+ 7622: 0xFFE2,
+ 7623: 0xFFE4,
+ 7625: 0x2121,
+ 7626: 0x3231,
+ 7628: 0x2010,
+ 7632: 0x30FC,
+ 7633: 0x309B,
+ 7634: 0x309C,
+ 7635: 0x30FD,
+ 7636: 0x30FE,
+ 7637: 0x3006,
+ 7638: 0x309D,
+ 7639: 0x309E,
+ 7640: 0xFE49,
+ 7641: 0xFE4A,
+ 7642: 0xFE4B,
+ 7643: 0xFE4C,
+ 7644: 0xFE4D,
+ 7645: 0xFE4E,
+ 7646: 0xFE4F,
+ 7647: 0xFE50,
+ 7648: 0xFE51,
+ 7649: 0xFE52,
+ 7650: 0xFE54,
+ 7651: 0xFE55,
+ 7652: 0xFE56,
+ 7653: 0xFE57,
+ 7654: 0xFE59,
+ 7655: 0xFE5A,
+ 7656: 0xFE5B,
+ 7657: 0xFE5C,
+ 7658: 0xFE5D,
+ 7659: 0xFE5E,
+ 7660: 0xFE5F,
+ 7661: 0xFE60,
+ 7662: 0xFE61,
+ 7663: 0xFE62,
+ 7664: 0xFE63,
+ 7665: 0xFE64,
+ 7666: 0xFE65,
+ 7667: 0xFE66,
+ 7668: 0xFE68,
+ 7669: 0xFE69,
+ 7670: 0xFE6A,
+ 7671: 0xFE6B,
+ 7672: 0x303E,
+ 7673: 0x2FF0,
+ 7674: 0x2FF1,
+ 7675: 0x2FF2,
+ 7676: 0x2FF3,
+ 7677: 0x2FF4,
+ 7678: 0x2FF5,
+ 7679: 0x2FF6,
+ 7680: 0x2FF7,
+ 7681: 0x2FF8,
+ 7682: 0x2FF9,
+ 7683: 0x2FFA,
+ 7684: 0x2FFB,
+ 7685: 0x3007,
+ 7699: 0x2500,
+ 7700: 0x2501,
+ 7701: 0x2502,
+ 7702: 0x2503,
+ 7703: 0x2504,
+ 7704: 0x2505,
+ 7705: 0x2506,
+ 7706: 0x2507,
+ 7707: 0x2508,
+ 7708: 0x2509,
+ 7709: 0x250A,
+ 7710: 0x250B,
+ 7711: 0x250C,
+ 7712: 0x250D,
+ 7713: 0x250E,
+ 7714: 0x250F,
+ 7715: 0x2510,
+ 7716: 0x2511,
+ 7717: 0x2512,
+ 7718: 0x2513,
+ 7719: 0x2514,
+ 7720: 0x2515,
+ 7721: 0x2516,
+ 7722: 0x2517,
+ 7723: 0x2518,
+ 7724: 0x2519,
+ 7725: 0x251A,
+ 7726: 0x251B,
+ 7727: 0x251C,
+ 7728: 0x251D,
+ 7729: 0x251E,
+ 7730: 0x251F,
+ 7731: 0x2520,
+ 7732: 0x2521,
+ 7733: 0x2522,
+ 7734: 0x2523,
+ 7735: 0x2524,
+ 7736: 0x2525,
+ 7737: 0x2526,
+ 7738: 0x2527,
+ 7739: 0x2528,
+ 7740: 0x2529,
+ 7741: 0x252A,
+ 7742: 0x252B,
+ 7743: 0x252C,
+ 7744: 0x252D,
+ 7745: 0x252E,
+ 7746: 0x252F,
+ 7747: 0x2530,
+ 7748: 0x2531,
+ 7749: 0x2532,
+ 7750: 0x2533,
+ 7751: 0x2534,
+ 7752: 0x2535,
+ 7753: 0x2536,
+ 7754: 0x2537,
+ 7755: 0x2538,
+ 7756: 0x2539,
+ 7757: 0x253A,
+ 7758: 0x253B,
+ 7759: 0x253C,
+ 7760: 0x253D,
+ 7761: 0x253E,
+ 7762: 0x253F,
+ 7763: 0x2540,
+ 7764: 0x2541,
+ 7765: 0x2542,
+ 7766: 0x2543,
+ 7767: 0x2544,
+ 7768: 0x2545,
+ 7769: 0x2546,
+ 7770: 0x2547,
+ 7771: 0x2548,
+ 7772: 0x2549,
+ 7773: 0x254A,
+ 7774: 0x254B,
+ 7790: 0x72DC,
+ 7791: 0x72DD,
+ 7792: 0x72DF,
+ 7793: 0x72E2,
+ 7794: 0x72E3,
+ 7795: 0x72E4,
+ 7796: 0x72E5,
+ 7797: 0x72E6,
+ 7798: 0x72E7,
+ 7799: 0x72EA,
+ 7800: 0x72EB,
+ 7801: 0x72F5,
+ 7802: 0x72F6,
+ 7803: 0x72F9,
+ 7804: 0x72FD,
+ 7805: 0x72FE,
+ 7806: 0x72FF,
+ 7807: 0x7300,
+ 7808: 0x7302,
+ 7809: 0x7304,
+ 7810: 0x7305,
+ 7811: 0x7306,
+ 7812: 0x7307,
+ 7813: 0x7308,
+ 7814: 0x7309,
+ 7815: 0x730B,
+ 7816: 0x730C,
+ 7817: 0x730D,
+ 7818: 0x730F,
+ 7819: 0x7310,
+ 7820: 0x7311,
+ 7821: 0x7312,
+ 7822: 0x7314,
+ 7823: 0x7318,
+ 7824: 0x7319,
+ 7825: 0x731A,
+ 7826: 0x731F,
+ 7827: 0x7320,
+ 7828: 0x7323,
+ 7829: 0x7324,
+ 7830: 0x7326,
+ 7831: 0x7327,
+ 7832: 0x7328,
+ 7833: 0x732D,
+ 7834: 0x732F,
+ 7835: 0x7330,
+ 7836: 0x7332,
+ 7837: 0x7333,
+ 7838: 0x7335,
+ 7839: 0x7336,
+ 7840: 0x733A,
+ 7841: 0x733B,
+ 7842: 0x733C,
+ 7843: 0x733D,
+ 7844: 0x7340,
+ 7845: 0x7341,
+ 7846: 0x7342,
+ 7847: 0x7343,
+ 7848: 0x7344,
+ 7849: 0x7345,
+ 7850: 0x7346,
+ 7851: 0x7347,
+ 7852: 0x7348,
+ 7853: 0x7349,
+ 7854: 0x734A,
+ 7855: 0x734B,
+ 7856: 0x734C,
+ 7857: 0x734E,
+ 7858: 0x734F,
+ 7859: 0x7351,
+ 7860: 0x7353,
+ 7861: 0x7354,
+ 7862: 0x7355,
+ 7863: 0x7356,
+ 7864: 0x7358,
+ 7865: 0x7359,
+ 7866: 0x735A,
+ 7867: 0x735B,
+ 7868: 0x735C,
+ 7869: 0x735D,
+ 7870: 0x735E,
+ 7871: 0x735F,
+ 7872: 0x7361,
+ 7873: 0x7362,
+ 7874: 0x7363,
+ 7875: 0x7364,
+ 7876: 0x7365,
+ 7877: 0x7366,
+ 7878: 0x7367,
+ 7879: 0x7368,
+ 7880: 0x7369,
+ 7881: 0x736A,
+ 7882: 0x736B,
+ 7883: 0x736E,
+ 7884: 0x7370,
+ 7885: 0x7371,
+ 7980: 0x7372,
+ 7981: 0x7373,
+ 7982: 0x7374,
+ 7983: 0x7375,
+ 7984: 0x7376,
+ 7985: 0x7377,
+ 7986: 0x7378,
+ 7987: 0x7379,
+ 7988: 0x737A,
+ 7989: 0x737B,
+ 7990: 0x737C,
+ 7991: 0x737D,
+ 7992: 0x737F,
+ 7993: 0x7380,
+ 7994: 0x7381,
+ 7995: 0x7382,
+ 7996: 0x7383,
+ 7997: 0x7385,
+ 7998: 0x7386,
+ 7999: 0x7388,
+ 8000: 0x738A,
+ 8001: 0x738C,
+ 8002: 0x738D,
+ 8003: 0x738F,
+ 8004: 0x7390,
+ 8005: 0x7392,
+ 8006: 0x7393,
+ 8007: 0x7394,
+ 8008: 0x7395,
+ 8009: 0x7397,
+ 8010: 0x7398,
+ 8011: 0x7399,
+ 8012: 0x739A,
+ 8013: 0x739C,
+ 8014: 0x739D,
+ 8015: 0x739E,
+ 8016: 0x73A0,
+ 8017: 0x73A1,
+ 8018: 0x73A3,
+ 8019: 0x73A4,
+ 8020: 0x73A5,
+ 8021: 0x73A6,
+ 8022: 0x73A7,
+ 8023: 0x73A8,
+ 8024: 0x73AA,
+ 8025: 0x73AC,
+ 8026: 0x73AD,
+ 8027: 0x73B1,
+ 8028: 0x73B4,
+ 8029: 0x73B5,
+ 8030: 0x73B6,
+ 8031: 0x73B8,
+ 8032: 0x73B9,
+ 8033: 0x73BC,
+ 8034: 0x73BD,
+ 8035: 0x73BE,
+ 8036: 0x73BF,
+ 8037: 0x73C1,
+ 8038: 0x73C3,
+ 8039: 0x73C4,
+ 8040: 0x73C5,
+ 8041: 0x73C6,
+ 8042: 0x73C7,
+ 8043: 0x73CB,
+ 8044: 0x73CC,
+ 8045: 0x73CE,
+ 8046: 0x73D2,
+ 8047: 0x73D3,
+ 8048: 0x73D4,
+ 8049: 0x73D5,
+ 8050: 0x73D6,
+ 8051: 0x73D7,
+ 8052: 0x73D8,
+ 8053: 0x73DA,
+ 8054: 0x73DB,
+ 8055: 0x73DC,
+ 8056: 0x73DD,
+ 8057: 0x73DF,
+ 8058: 0x73E1,
+ 8059: 0x73E2,
+ 8060: 0x73E3,
+ 8061: 0x73E4,
+ 8062: 0x73E6,
+ 8063: 0x73E8,
+ 8064: 0x73EA,
+ 8065: 0x73EB,
+ 8066: 0x73EC,
+ 8067: 0x73EE,
+ 8068: 0x73EF,
+ 8069: 0x73F0,
+ 8070: 0x73F1,
+ 8071: 0x73F3,
+ 8072: 0x73F4,
+ 8073: 0x73F5,
+ 8074: 0x73F6,
+ 8075: 0x73F7,
+ 8170: 0x73F8,
+ 8171: 0x73F9,
+ 8172: 0x73FA,
+ 8173: 0x73FB,
+ 8174: 0x73FC,
+ 8175: 0x73FD,
+ 8176: 0x73FE,
+ 8177: 0x73FF,
+ 8178: 0x7400,
+ 8179: 0x7401,
+ 8180: 0x7402,
+ 8181: 0x7404,
+ 8182: 0x7407,
+ 8183: 0x7408,
+ 8184: 0x740B,
+ 8185: 0x740C,
+ 8186: 0x740D,
+ 8187: 0x740E,
+ 8188: 0x7411,
+ 8189: 0x7412,
+ 8190: 0x7413,
+ 8191: 0x7414,
+ 8192: 0x7415,
+ 8193: 0x7416,
+ 8194: 0x7417,
+ 8195: 0x7418,
+ 8196: 0x7419,
+ 8197: 0x741C,
+ 8198: 0x741D,
+ 8199: 0x741E,
+ 8200: 0x741F,
+ 8201: 0x7420,
+ 8202: 0x7421,
+ 8203: 0x7423,
+ 8204: 0x7424,
+ 8205: 0x7427,
+ 8206: 0x7429,
+ 8207: 0x742B,
+ 8208: 0x742D,
+ 8209: 0x742F,
+ 8210: 0x7431,
+ 8211: 0x7432,
+ 8212: 0x7437,
+ 8213: 0x7438,
+ 8214: 0x7439,
+ 8215: 0x743A,
+ 8216: 0x743B,
+ 8217: 0x743D,
+ 8218: 0x743E,
+ 8219: 0x743F,
+ 8220: 0x7440,
+ 8221: 0x7442,
+ 8222: 0x7443,
+ 8223: 0x7444,
+ 8224: 0x7445,
+ 8225: 0x7446,
+ 8226: 0x7447,
+ 8227: 0x7448,
+ 8228: 0x7449,
+ 8229: 0x744A,
+ 8230: 0x744B,
+ 8231: 0x744C,
+ 8232: 0x744D,
+ 8233: 0x744E,
+ 8234: 0x744F,
+ 8235: 0x7450,
+ 8236: 0x7451,
+ 8237: 0x7452,
+ 8238: 0x7453,
+ 8239: 0x7454,
+ 8240: 0x7456,
+ 8241: 0x7458,
+ 8242: 0x745D,
+ 8243: 0x7460,
+ 8244: 0x7461,
+ 8245: 0x7462,
+ 8246: 0x7463,
+ 8247: 0x7464,
+ 8248: 0x7465,
+ 8249: 0x7466,
+ 8250: 0x7467,
+ 8251: 0x7468,
+ 8252: 0x7469,
+ 8253: 0x746A,
+ 8254: 0x746B,
+ 8255: 0x746C,
+ 8256: 0x746E,
+ 8257: 0x746F,
+ 8258: 0x7471,
+ 8259: 0x7472,
+ 8260: 0x7473,
+ 8261: 0x7474,
+ 8262: 0x7475,
+ 8263: 0x7478,
+ 8264: 0x7479,
+ 8265: 0x747A,
+ 8360: 0x747B,
+ 8361: 0x747C,
+ 8362: 0x747D,
+ 8363: 0x747F,
+ 8364: 0x7482,
+ 8365: 0x7484,
+ 8366: 0x7485,
+ 8367: 0x7486,
+ 8368: 0x7488,
+ 8369: 0x7489,
+ 8370: 0x748A,
+ 8371: 0x748C,
+ 8372: 0x748D,
+ 8373: 0x748F,
+ 8374: 0x7491,
+ 8375: 0x7492,
+ 8376: 0x7493,
+ 8377: 0x7494,
+ 8378: 0x7495,
+ 8379: 0x7496,
+ 8380: 0x7497,
+ 8381: 0x7498,
+ 8382: 0x7499,
+ 8383: 0x749A,
+ 8384: 0x749B,
+ 8385: 0x749D,
+ 8386: 0x749F,
+ 8387: 0x74A0,
+ 8388: 0x74A1,
+ 8389: 0x74A2,
+ 8390: 0x74A3,
+ 8391: 0x74A4,
+ 8392: 0x74A5,
+ 8393: 0x74A6,
+ 8394: 0x74AA,
+ 8395: 0x74AB,
+ 8396: 0x74AC,
+ 8397: 0x74AD,
+ 8398: 0x74AE,
+ 8399: 0x74AF,
+ 8400: 0x74B0,
+ 8401: 0x74B1,
+ 8402: 0x74B2,
+ 8403: 0x74B3,
+ 8404: 0x74B4,
+ 8405: 0x74B5,
+ 8406: 0x74B6,
+ 8407: 0x74B7,
+ 8408: 0x74B8,
+ 8409: 0x74B9,
+ 8410: 0x74BB,
+ 8411: 0x74BC,
+ 8412: 0x74BD,
+ 8413: 0x74BE,
+ 8414: 0x74BF,
+ 8415: 0x74C0,
+ 8416: 0x74C1,
+ 8417: 0x74C2,
+ 8418: 0x74C3,
+ 8419: 0x74C4,
+ 8420: 0x74C5,
+ 8421: 0x74C6,
+ 8422: 0x74C7,
+ 8423: 0x74C8,
+ 8424: 0x74C9,
+ 8425: 0x74CA,
+ 8426: 0x74CB,
+ 8427: 0x74CC,
+ 8428: 0x74CD,
+ 8429: 0x74CE,
+ 8430: 0x74CF,
+ 8431: 0x74D0,
+ 8432: 0x74D1,
+ 8433: 0x74D3,
+ 8434: 0x74D4,
+ 8435: 0x74D5,
+ 8436: 0x74D6,
+ 8437: 0x74D7,
+ 8438: 0x74D8,
+ 8439: 0x74D9,
+ 8440: 0x74DA,
+ 8441: 0x74DB,
+ 8442: 0x74DD,
+ 8443: 0x74DF,
+ 8444: 0x74E1,
+ 8445: 0x74E5,
+ 8446: 0x74E7,
+ 8447: 0x74E8,
+ 8448: 0x74E9,
+ 8449: 0x74EA,
+ 8450: 0x74EB,
+ 8451: 0x74EC,
+ 8452: 0x74ED,
+ 8453: 0x74F0,
+ 8454: 0x74F1,
+ 8455: 0x74F2,
+ 8550: 0x74F3,
+ 8551: 0x74F5,
+ 8552: 0x74F8,
+ 8553: 0x74F9,
+ 8554: 0x74FA,
+ 8555: 0x74FB,
+ 8556: 0x74FC,
+ 8557: 0x74FD,
+ 8558: 0x74FE,
+ 8559: 0x7500,
+ 8560: 0x7501,
+ 8561: 0x7502,
+ 8562: 0x7503,
+ 8563: 0x7505,
+ 8564: 0x7506,
+ 8565: 0x7507,
+ 8566: 0x7508,
+ 8567: 0x7509,
+ 8568: 0x750A,
+ 8569: 0x750B,
+ 8570: 0x750C,
+ 8571: 0x750E,
+ 8572: 0x7510,
+ 8573: 0x7512,
+ 8574: 0x7514,
+ 8575: 0x7515,
+ 8576: 0x7516,
+ 8577: 0x7517,
+ 8578: 0x751B,
+ 8579: 0x751D,
+ 8580: 0x751E,
+ 8581: 0x7520,
+ 8582: 0x7521,
+ 8583: 0x7522,
+ 8584: 0x7523,
+ 8585: 0x7524,
+ 8586: 0x7526,
+ 8587: 0x7527,
+ 8588: 0x752A,
+ 8589: 0x752E,
+ 8590: 0x7534,
+ 8591: 0x7536,
+ 8592: 0x7539,
+ 8593: 0x753C,
+ 8594: 0x753D,
+ 8595: 0x753F,
+ 8596: 0x7541,
+ 8597: 0x7542,
+ 8598: 0x7543,
+ 8599: 0x7544,
+ 8600: 0x7546,
+ 8601: 0x7547,
+ 8602: 0x7549,
+ 8603: 0x754A,
+ 8604: 0x754D,
+ 8605: 0x7550,
+ 8606: 0x7551,
+ 8607: 0x7552,
+ 8608: 0x7553,
+ 8609: 0x7555,
+ 8610: 0x7556,
+ 8611: 0x7557,
+ 8612: 0x7558,
+ 8613: 0x755D,
+ 8614: 0x755E,
+ 8615: 0x755F,
+ 8616: 0x7560,
+ 8617: 0x7561,
+ 8618: 0x7562,
+ 8619: 0x7563,
+ 8620: 0x7564,
+ 8621: 0x7567,
+ 8622: 0x7568,
+ 8623: 0x7569,
+ 8624: 0x756B,
+ 8625: 0x756C,
+ 8626: 0x756D,
+ 8627: 0x756E,
+ 8628: 0x756F,
+ 8629: 0x7570,
+ 8630: 0x7571,
+ 8631: 0x7573,
+ 8632: 0x7575,
+ 8633: 0x7576,
+ 8634: 0x7577,
+ 8635: 0x757A,
+ 8636: 0x757B,
+ 8637: 0x757C,
+ 8638: 0x757D,
+ 8639: 0x757E,
+ 8640: 0x7580,
+ 8641: 0x7581,
+ 8642: 0x7582,
+ 8643: 0x7584,
+ 8644: 0x7585,
+ 8645: 0x7587,
+ 8740: 0x7588,
+ 8741: 0x7589,
+ 8742: 0x758A,
+ 8743: 0x758C,
+ 8744: 0x758D,
+ 8745: 0x758E,
+ 8746: 0x7590,
+ 8747: 0x7593,
+ 8748: 0x7595,
+ 8749: 0x7598,
+ 8750: 0x759B,
+ 8751: 0x759C,
+ 8752: 0x759E,
+ 8753: 0x75A2,
+ 8754: 0x75A6,
+ 8755: 0x75A7,
+ 8756: 0x75A8,
+ 8757: 0x75A9,
+ 8758: 0x75AA,
+ 8759: 0x75AD,
+ 8760: 0x75B6,
+ 8761: 0x75B7,
+ 8762: 0x75BA,
+ 8763: 0x75BB,
+ 8764: 0x75BF,
+ 8765: 0x75C0,
+ 8766: 0x75C1,
+ 8767: 0x75C6,
+ 8768: 0x75CB,
+ 8769: 0x75CC,
+ 8770: 0x75CE,
+ 8771: 0x75CF,
+ 8772: 0x75D0,
+ 8773: 0x75D1,
+ 8774: 0x75D3,
+ 8775: 0x75D7,
+ 8776: 0x75D9,
+ 8777: 0x75DA,
+ 8778: 0x75DC,
+ 8779: 0x75DD,
+ 8780: 0x75DF,
+ 8781: 0x75E0,
+ 8782: 0x75E1,
+ 8783: 0x75E5,
+ 8784: 0x75E9,
+ 8785: 0x75EC,
+ 8786: 0x75ED,
+ 8787: 0x75EE,
+ 8788: 0x75EF,
+ 8789: 0x75F2,
+ 8790: 0x75F3,
+ 8791: 0x75F5,
+ 8792: 0x75F6,
+ 8793: 0x75F7,
+ 8794: 0x75F8,
+ 8795: 0x75FA,
+ 8796: 0x75FB,
+ 8797: 0x75FD,
+ 8798: 0x75FE,
+ 8799: 0x7602,
+ 8800: 0x7604,
+ 8801: 0x7606,
+ 8802: 0x7607,
+ 8803: 0x7608,
+ 8804: 0x7609,
+ 8805: 0x760B,
+ 8806: 0x760D,
+ 8807: 0x760E,
+ 8808: 0x760F,
+ 8809: 0x7611,
+ 8810: 0x7612,
+ 8811: 0x7613,
+ 8812: 0x7614,
+ 8813: 0x7616,
+ 8814: 0x761A,
+ 8815: 0x761C,
+ 8816: 0x761D,
+ 8817: 0x761E,
+ 8818: 0x7621,
+ 8819: 0x7623,
+ 8820: 0x7627,
+ 8821: 0x7628,
+ 8822: 0x762C,
+ 8823: 0x762E,
+ 8824: 0x762F,
+ 8825: 0x7631,
+ 8826: 0x7632,
+ 8827: 0x7636,
+ 8828: 0x7637,
+ 8829: 0x7639,
+ 8830: 0x763A,
+ 8831: 0x763B,
+ 8832: 0x763D,
+ 8833: 0x7641,
+ 8834: 0x7642,
+ 8835: 0x7644,
+ 8930: 0x7645,
+ 8931: 0x7646,
+ 8932: 0x7647,
+ 8933: 0x7648,
+ 8934: 0x7649,
+ 8935: 0x764A,
+ 8936: 0x764B,
+ 8937: 0x764E,
+ 8938: 0x764F,
+ 8939: 0x7650,
+ 8940: 0x7651,
+ 8941: 0x7652,
+ 8942: 0x7653,
+ 8943: 0x7655,
+ 8944: 0x7657,
+ 8945: 0x7658,
+ 8946: 0x7659,
+ 8947: 0x765A,
+ 8948: 0x765B,
+ 8949: 0x765D,
+ 8950: 0x765F,
+ 8951: 0x7660,
+ 8952: 0x7661,
+ 8953: 0x7662,
+ 8954: 0x7664,
+ 8955: 0x7665,
+ 8956: 0x7666,
+ 8957: 0x7667,
+ 8958: 0x7668,
+ 8959: 0x7669,
+ 8960: 0x766A,
+ 8961: 0x766C,
+ 8962: 0x766D,
+ 8963: 0x766E,
+ 8964: 0x7670,
+ 8965: 0x7671,
+ 8966: 0x7672,
+ 8967: 0x7673,
+ 8968: 0x7674,
+ 8969: 0x7675,
+ 8970: 0x7676,
+ 8971: 0x7677,
+ 8972: 0x7679,
+ 8973: 0x767A,
+ 8974: 0x767C,
+ 8975: 0x767F,
+ 8976: 0x7680,
+ 8977: 0x7681,
+ 8978: 0x7683,
+ 8979: 0x7685,
+ 8980: 0x7689,
+ 8981: 0x768A,
+ 8982: 0x768C,
+ 8983: 0x768D,
+ 8984: 0x768F,
+ 8985: 0x7690,
+ 8986: 0x7692,
+ 8987: 0x7694,
+ 8988: 0x7695,
+ 8989: 0x7697,
+ 8990: 0x7698,
+ 8991: 0x769A,
+ 8992: 0x769B,
+ 8993: 0x769C,
+ 8994: 0x769D,
+ 8995: 0x769E,
+ 8996: 0x769F,
+ 8997: 0x76A0,
+ 8998: 0x76A1,
+ 8999: 0x76A2,
+ 9000: 0x76A3,
+ 9001: 0x76A5,
+ 9002: 0x76A6,
+ 9003: 0x76A7,
+ 9004: 0x76A8,
+ 9005: 0x76A9,
+ 9006: 0x76AA,
+ 9007: 0x76AB,
+ 9008: 0x76AC,
+ 9009: 0x76AD,
+ 9010: 0x76AF,
+ 9011: 0x76B0,
+ 9012: 0x76B3,
+ 9013: 0x76B5,
+ 9014: 0x76B6,
+ 9015: 0x76B7,
+ 9016: 0x76B8,
+ 9017: 0x76B9,
+ 9018: 0x76BA,
+ 9019: 0x76BB,
+ 9020: 0x76BC,
+ 9021: 0x76BD,
+ 9022: 0x76BE,
+ 9023: 0x76C0,
+ 9024: 0x76C1,
+ 9025: 0x76C3,
+ 9026: 0x554A,
+ 9027: 0x963F,
+ 9028: 0x57C3,
+ 9029: 0x6328,
+ 9030: 0x54CE,
+ 9031: 0x5509,
+ 9032: 0x54C0,
+ 9033: 0x7691,
+ 9034: 0x764C,
+ 9035: 0x853C,
+ 9036: 0x77EE,
+ 9037: 0x827E,
+ 9038: 0x788D,
+ 9039: 0x7231,
+ 9040: 0x9698,
+ 9041: 0x978D,
+ 9042: 0x6C28,
+ 9043: 0x5B89,
+ 9044: 0x4FFA,
+ 9045: 0x6309,
+ 9046: 0x6697,
+ 9047: 0x5CB8,
+ 9048: 0x80FA,
+ 9049: 0x6848,
+ 9050: 0x80AE,
+ 9051: 0x6602,
+ 9052: 0x76CE,
+ 9053: 0x51F9,
+ 9054: 0x6556,
+ 9055: 0x71AC,
+ 9056: 0x7FF1,
+ 9057: 0x8884,
+ 9058: 0x50B2,
+ 9059: 0x5965,
+ 9060: 0x61CA,
+ 9061: 0x6FB3,
+ 9062: 0x82AD,
+ 9063: 0x634C,
+ 9064: 0x6252,
+ 9065: 0x53ED,
+ 9066: 0x5427,
+ 9067: 0x7B06,
+ 9068: 0x516B,
+ 9069: 0x75A4,
+ 9070: 0x5DF4,
+ 9071: 0x62D4,
+ 9072: 0x8DCB,
+ 9073: 0x9776,
+ 9074: 0x628A,
+ 9075: 0x8019,
+ 9076: 0x575D,
+ 9077: 0x9738,
+ 9078: 0x7F62,
+ 9079: 0x7238,
+ 9080: 0x767D,
+ 9081: 0x67CF,
+ 9082: 0x767E,
+ 9083: 0x6446,
+ 9084: 0x4F70,
+ 9085: 0x8D25,
+ 9086: 0x62DC,
+ 9087: 0x7A17,
+ 9088: 0x6591,
+ 9089: 0x73ED,
+ 9090: 0x642C,
+ 9091: 0x6273,
+ 9092: 0x822C,
+ 9093: 0x9881,
+ 9094: 0x677F,
+ 9095: 0x7248,
+ 9096: 0x626E,
+ 9097: 0x62CC,
+ 9098: 0x4F34,
+ 9099: 0x74E3,
+ 9100: 0x534A,
+ 9101: 0x529E,
+ 9102: 0x7ECA,
+ 9103: 0x90A6,
+ 9104: 0x5E2E,
+ 9105: 0x6886,
+ 9106: 0x699C,
+ 9107: 0x8180,
+ 9108: 0x7ED1,
+ 9109: 0x68D2,
+ 9110: 0x78C5,
+ 9111: 0x868C,
+ 9112: 0x9551,
+ 9113: 0x508D,
+ 9114: 0x8C24,
+ 9115: 0x82DE,
+ 9116: 0x80DE,
+ 9117: 0x5305,
+ 9118: 0x8912,
+ 9119: 0x5265,
+ 9120: 0x76C4,
+ 9121: 0x76C7,
+ 9122: 0x76C9,
+ 9123: 0x76CB,
+ 9124: 0x76CC,
+ 9125: 0x76D3,
+ 9126: 0x76D5,
+ 9127: 0x76D9,
+ 9128: 0x76DA,
+ 9129: 0x76DC,
+ 9130: 0x76DD,
+ 9131: 0x76DE,
+ 9132: 0x76E0,
+ 9133: 0x76E1,
+ 9134: 0x76E2,
+ 9135: 0x76E3,
+ 9136: 0x76E4,
+ 9137: 0x76E6,
+ 9138: 0x76E7,
+ 9139: 0x76E8,
+ 9140: 0x76E9,
+ 9141: 0x76EA,
+ 9142: 0x76EB,
+ 9143: 0x76EC,
+ 9144: 0x76ED,
+ 9145: 0x76F0,
+ 9146: 0x76F3,
+ 9147: 0x76F5,
+ 9148: 0x76F6,
+ 9149: 0x76F7,
+ 9150: 0x76FA,
+ 9151: 0x76FB,
+ 9152: 0x76FD,
+ 9153: 0x76FF,
+ 9154: 0x7700,
+ 9155: 0x7702,
+ 9156: 0x7703,
+ 9157: 0x7705,
+ 9158: 0x7706,
+ 9159: 0x770A,
+ 9160: 0x770C,
+ 9161: 0x770E,
+ 9162: 0x770F,
+ 9163: 0x7710,
+ 9164: 0x7711,
+ 9165: 0x7712,
+ 9166: 0x7713,
+ 9167: 0x7714,
+ 9168: 0x7715,
+ 9169: 0x7716,
+ 9170: 0x7717,
+ 9171: 0x7718,
+ 9172: 0x771B,
+ 9173: 0x771C,
+ 9174: 0x771D,
+ 9175: 0x771E,
+ 9176: 0x7721,
+ 9177: 0x7723,
+ 9178: 0x7724,
+ 9179: 0x7725,
+ 9180: 0x7727,
+ 9181: 0x772A,
+ 9182: 0x772B,
+ 9183: 0x772C,
+ 9184: 0x772E,
+ 9185: 0x7730,
+ 9186: 0x7731,
+ 9187: 0x7732,
+ 9188: 0x7733,
+ 9189: 0x7734,
+ 9190: 0x7739,
+ 9191: 0x773B,
+ 9192: 0x773D,
+ 9193: 0x773E,
+ 9194: 0x773F,
+ 9195: 0x7742,
+ 9196: 0x7744,
+ 9197: 0x7745,
+ 9198: 0x7746,
+ 9199: 0x7748,
+ 9200: 0x7749,
+ 9201: 0x774A,
+ 9202: 0x774B,
+ 9203: 0x774C,
+ 9204: 0x774D,
+ 9205: 0x774E,
+ 9206: 0x774F,
+ 9207: 0x7752,
+ 9208: 0x7753,
+ 9209: 0x7754,
+ 9210: 0x7755,
+ 9211: 0x7756,
+ 9212: 0x7757,
+ 9213: 0x7758,
+ 9214: 0x7759,
+ 9215: 0x775C,
+ 9216: 0x8584,
+ 9217: 0x96F9,
+ 9218: 0x4FDD,
+ 9219: 0x5821,
+ 9220: 0x9971,
+ 9221: 0x5B9D,
+ 9222: 0x62B1,
+ 9223: 0x62A5,
+ 9224: 0x66B4,
+ 9225: 0x8C79,
+ 9226: 0x9C8D,
+ 9227: 0x7206,
+ 9228: 0x676F,
+ 9229: 0x7891,
+ 9230: 0x60B2,
+ 9231: 0x5351,
+ 9232: 0x5317,
+ 9233: 0x8F88,
+ 9234: 0x80CC,
+ 9235: 0x8D1D,
+ 9236: 0x94A1,
+ 9237: 0x500D,
+ 9238: 0x72C8,
+ 9239: 0x5907,
+ 9240: 0x60EB,
+ 9241: 0x7119,
+ 9242: 0x88AB,
+ 9243: 0x5954,
+ 9244: 0x82EF,
+ 9245: 0x672C,
+ 9246: 0x7B28,
+ 9247: 0x5D29,
+ 9248: 0x7EF7,
+ 9249: 0x752D,
+ 9250: 0x6CF5,
+ 9251: 0x8E66,
+ 9252: 0x8FF8,
+ 9253: 0x903C,
+ 9254: 0x9F3B,
+ 9255: 0x6BD4,
+ 9256: 0x9119,
+ 9257: 0x7B14,
+ 9258: 0x5F7C,
+ 9259: 0x78A7,
+ 9260: 0x84D6,
+ 9261: 0x853D,
+ 9262: 0x6BD5,
+ 9263: 0x6BD9,
+ 9264: 0x6BD6,
+ 9265: 0x5E01,
+ 9266: 0x5E87,
+ 9267: 0x75F9,
+ 9268: 0x95ED,
+ 9269: 0x655D,
+ 9270: 0x5F0A,
+ 9271: 0x5FC5,
+ 9272: 0x8F9F,
+ 9273: 0x58C1,
+ 9274: 0x81C2,
+ 9275: 0x907F,
+ 9276: 0x965B,
+ 9277: 0x97AD,
+ 9278: 0x8FB9,
+ 9279: 0x7F16,
+ 9280: 0x8D2C,
+ 9281: 0x6241,
+ 9282: 0x4FBF,
+ 9283: 0x53D8,
+ 9284: 0x535E,
+ 9285: 0x8FA8,
+ 9286: 0x8FA9,
+ 9287: 0x8FAB,
+ 9288: 0x904D,
+ 9289: 0x6807,
+ 9290: 0x5F6A,
+ 9291: 0x8198,
+ 9292: 0x8868,
+ 9293: 0x9CD6,
+ 9294: 0x618B,
+ 9295: 0x522B,
+ 9296: 0x762A,
+ 9297: 0x5F6C,
+ 9298: 0x658C,
+ 9299: 0x6FD2,
+ 9300: 0x6EE8,
+ 9301: 0x5BBE,
+ 9302: 0x6448,
+ 9303: 0x5175,
+ 9304: 0x51B0,
+ 9305: 0x67C4,
+ 9306: 0x4E19,
+ 9307: 0x79C9,
+ 9308: 0x997C,
+ 9309: 0x70B3,
+ 9310: 0x775D,
+ 9311: 0x775E,
+ 9312: 0x775F,
+ 9313: 0x7760,
+ 9314: 0x7764,
+ 9315: 0x7767,
+ 9316: 0x7769,
+ 9317: 0x776A,
+ 9318: 0x776D,
+ 9319: 0x776E,
+ 9320: 0x776F,
+ 9321: 0x7770,
+ 9322: 0x7771,
+ 9323: 0x7772,
+ 9324: 0x7773,
+ 9325: 0x7774,
+ 9326: 0x7775,
+ 9327: 0x7776,
+ 9328: 0x7777,
+ 9329: 0x7778,
+ 9330: 0x777A,
+ 9331: 0x777B,
+ 9332: 0x777C,
+ 9333: 0x7781,
+ 9334: 0x7782,
+ 9335: 0x7783,
+ 9336: 0x7786,
+ 9337: 0x7787,
+ 9338: 0x7788,
+ 9339: 0x7789,
+ 9340: 0x778A,
+ 9341: 0x778B,
+ 9342: 0x778F,
+ 9343: 0x7790,
+ 9344: 0x7793,
+ 9345: 0x7794,
+ 9346: 0x7795,
+ 9347: 0x7796,
+ 9348: 0x7797,
+ 9349: 0x7798,
+ 9350: 0x7799,
+ 9351: 0x779A,
+ 9352: 0x779B,
+ 9353: 0x779C,
+ 9354: 0x779D,
+ 9355: 0x779E,
+ 9356: 0x77A1,
+ 9357: 0x77A3,
+ 9358: 0x77A4,
+ 9359: 0x77A6,
+ 9360: 0x77A8,
+ 9361: 0x77AB,
+ 9362: 0x77AD,
+ 9363: 0x77AE,
+ 9364: 0x77AF,
+ 9365: 0x77B1,
+ 9366: 0x77B2,
+ 9367: 0x77B4,
+ 9368: 0x77B6,
+ 9369: 0x77B7,
+ 9370: 0x77B8,
+ 9371: 0x77B9,
+ 9372: 0x77BA,
+ 9373: 0x77BC,
+ 9374: 0x77BE,
+ 9375: 0x77C0,
+ 9376: 0x77C1,
+ 9377: 0x77C2,
+ 9378: 0x77C3,
+ 9379: 0x77C4,
+ 9380: 0x77C5,
+ 9381: 0x77C6,
+ 9382: 0x77C7,
+ 9383: 0x77C8,
+ 9384: 0x77C9,
+ 9385: 0x77CA,
+ 9386: 0x77CB,
+ 9387: 0x77CC,
+ 9388: 0x77CE,
+ 9389: 0x77CF,
+ 9390: 0x77D0,
+ 9391: 0x77D1,
+ 9392: 0x77D2,
+ 9393: 0x77D3,
+ 9394: 0x77D4,
+ 9395: 0x77D5,
+ 9396: 0x77D6,
+ 9397: 0x77D8,
+ 9398: 0x77D9,
+ 9399: 0x77DA,
+ 9400: 0x77DD,
+ 9401: 0x77DE,
+ 9402: 0x77DF,
+ 9403: 0x77E0,
+ 9404: 0x77E1,
+ 9405: 0x77E4,
+ 9406: 0x75C5,
+ 9407: 0x5E76,
+ 9408: 0x73BB,
+ 9409: 0x83E0,
+ 9410: 0x64AD,
+ 9411: 0x62E8,
+ 9412: 0x94B5,
+ 9413: 0x6CE2,
+ 9414: 0x535A,
+ 9415: 0x52C3,
+ 9416: 0x640F,
+ 9417: 0x94C2,
+ 9418: 0x7B94,
+ 9419: 0x4F2F,
+ 9420: 0x5E1B,
+ 9421: 0x8236,
+ 9422: 0x8116,
+ 9423: 0x818A,
+ 9424: 0x6E24,
+ 9425: 0x6CCA,
+ 9426: 0x9A73,
+ 9427: 0x6355,
+ 9428: 0x535C,
+ 9429: 0x54FA,
+ 9430: 0x8865,
+ 9431: 0x57E0,
+ 9432: 0x4E0D,
+ 9433: 0x5E03,
+ 9434: 0x6B65,
+ 9435: 0x7C3F,
+ 9436: 0x90E8,
+ 9437: 0x6016,
+ 9438: 0x64E6,
+ 9439: 0x731C,
+ 9440: 0x88C1,
+ 9441: 0x6750,
+ 9442: 0x624D,
+ 9443: 0x8D22,
+ 9444: 0x776C,
+ 9445: 0x8E29,
+ 9446: 0x91C7,
+ 9447: 0x5F69,
+ 9448: 0x83DC,
+ 9449: 0x8521,
+ 9450: 0x9910,
+ 9451: 0x53C2,
+ 9452: 0x8695,
+ 9453: 0x6B8B,
+ 9454: 0x60ED,
+ 9455: 0x60E8,
+ 9456: 0x707F,
+ 9457: 0x82CD,
+ 9458: 0x8231,
+ 9459: 0x4ED3,
+ 9460: 0x6CA7,
+ 9461: 0x85CF,
+ 9462: 0x64CD,
+ 9463: 0x7CD9,
+ 9464: 0x69FD,
+ 9465: 0x66F9,
+ 9466: 0x8349,
+ 9467: 0x5395,
+ 9468: 0x7B56,
+ 9469: 0x4FA7,
+ 9470: 0x518C,
+ 9471: 0x6D4B,
+ 9472: 0x5C42,
+ 9473: 0x8E6D,
+ 9474: 0x63D2,
+ 9475: 0x53C9,
+ 9476: 0x832C,
+ 9477: 0x8336,
+ 9478: 0x67E5,
+ 9479: 0x78B4,
+ 9480: 0x643D,
+ 9481: 0x5BDF,
+ 9482: 0x5C94,
+ 9483: 0x5DEE,
+ 9484: 0x8BE7,
+ 9485: 0x62C6,
+ 9486: 0x67F4,
+ 9487: 0x8C7A,
+ 9488: 0x6400,
+ 9489: 0x63BA,
+ 9490: 0x8749,
+ 9491: 0x998B,
+ 9492: 0x8C17,
+ 9493: 0x7F20,
+ 9494: 0x94F2,
+ 9495: 0x4EA7,
+ 9496: 0x9610,
+ 9497: 0x98A4,
+ 9498: 0x660C,
+ 9499: 0x7316,
+ 9500: 0x77E6,
+ 9501: 0x77E8,
+ 9502: 0x77EA,
+ 9503: 0x77EF,
+ 9504: 0x77F0,
+ 9505: 0x77F1,
+ 9506: 0x77F2,
+ 9507: 0x77F4,
+ 9508: 0x77F5,
+ 9509: 0x77F7,
+ 9510: 0x77F9,
+ 9511: 0x77FA,
+ 9512: 0x77FB,
+ 9513: 0x77FC,
+ 9514: 0x7803,
+ 9515: 0x7804,
+ 9516: 0x7805,
+ 9517: 0x7806,
+ 9518: 0x7807,
+ 9519: 0x7808,
+ 9520: 0x780A,
+ 9521: 0x780B,
+ 9522: 0x780E,
+ 9523: 0x780F,
+ 9524: 0x7810,
+ 9525: 0x7813,
+ 9526: 0x7815,
+ 9527: 0x7819,
+ 9528: 0x781B,
+ 9529: 0x781E,
+ 9530: 0x7820,
+ 9531: 0x7821,
+ 9532: 0x7822,
+ 9533: 0x7824,
+ 9534: 0x7828,
+ 9535: 0x782A,
+ 9536: 0x782B,
+ 9537: 0x782E,
+ 9538: 0x782F,
+ 9539: 0x7831,
+ 9540: 0x7832,
+ 9541: 0x7833,
+ 9542: 0x7835,
+ 9543: 0x7836,
+ 9544: 0x783D,
+ 9545: 0x783F,
+ 9546: 0x7841,
+ 9547: 0x7842,
+ 9548: 0x7843,
+ 9549: 0x7844,
+ 9550: 0x7846,
+ 9551: 0x7848,
+ 9552: 0x7849,
+ 9553: 0x784A,
+ 9554: 0x784B,
+ 9555: 0x784D,
+ 9556: 0x784F,
+ 9557: 0x7851,
+ 9558: 0x7853,
+ 9559: 0x7854,
+ 9560: 0x7858,
+ 9561: 0x7859,
+ 9562: 0x785A,
+ 9563: 0x785B,
+ 9564: 0x785C,
+ 9565: 0x785E,
+ 9566: 0x785F,
+ 9567: 0x7860,
+ 9568: 0x7861,
+ 9569: 0x7862,
+ 9570: 0x7863,
+ 9571: 0x7864,
+ 9572: 0x7865,
+ 9573: 0x7866,
+ 9574: 0x7867,
+ 9575: 0x7868,
+ 9576: 0x7869,
+ 9577: 0x786F,
+ 9578: 0x7870,
+ 9579: 0x7871,
+ 9580: 0x7872,
+ 9581: 0x7873,
+ 9582: 0x7874,
+ 9583: 0x7875,
+ 9584: 0x7876,
+ 9585: 0x7878,
+ 9586: 0x7879,
+ 9587: 0x787A,
+ 9588: 0x787B,
+ 9589: 0x787D,
+ 9590: 0x787E,
+ 9591: 0x787F,
+ 9592: 0x7880,
+ 9593: 0x7881,
+ 9594: 0x7882,
+ 9595: 0x7883,
+ 9596: 0x573A,
+ 9597: 0x5C1D,
+ 9598: 0x5E38,
+ 9599: 0x957F,
+ 9600: 0x507F,
+ 9601: 0x80A0,
+ 9602: 0x5382,
+ 9603: 0x655E,
+ 9604: 0x7545,
+ 9605: 0x5531,
+ 9606: 0x5021,
+ 9607: 0x8D85,
+ 9608: 0x6284,
+ 9609: 0x949E,
+ 9610: 0x671D,
+ 9611: 0x5632,
+ 9612: 0x6F6E,
+ 9613: 0x5DE2,
+ 9614: 0x5435,
+ 9615: 0x7092,
+ 9616: 0x8F66,
+ 9617: 0x626F,
+ 9618: 0x64A4,
+ 9619: 0x63A3,
+ 9620: 0x5F7B,
+ 9621: 0x6F88,
+ 9622: 0x90F4,
+ 9623: 0x81E3,
+ 9624: 0x8FB0,
+ 9625: 0x5C18,
+ 9626: 0x6668,
+ 9627: 0x5FF1,
+ 9628: 0x6C89,
+ 9629: 0x9648,
+ 9630: 0x8D81,
+ 9631: 0x886C,
+ 9632: 0x6491,
+ 9633: 0x79F0,
+ 9634: 0x57CE,
+ 9635: 0x6A59,
+ 9636: 0x6210,
+ 9637: 0x5448,
+ 9638: 0x4E58,
+ 9639: 0x7A0B,
+ 9640: 0x60E9,
+ 9641: 0x6F84,
+ 9642: 0x8BDA,
+ 9643: 0x627F,
+ 9644: 0x901E,
+ 9645: 0x9A8B,
+ 9646: 0x79E4,
+ 9647: 0x5403,
+ 9648: 0x75F4,
+ 9649: 0x6301,
+ 9650: 0x5319,
+ 9651: 0x6C60,
+ 9652: 0x8FDF,
+ 9653: 0x5F1B,
+ 9654: 0x9A70,
+ 9655: 0x803B,
+ 9656: 0x9F7F,
+ 9657: 0x4F88,
+ 9658: 0x5C3A,
+ 9659: 0x8D64,
+ 9660: 0x7FC5,
+ 9661: 0x65A5,
+ 9662: 0x70BD,
+ 9663: 0x5145,
+ 9664: 0x51B2,
+ 9665: 0x866B,
+ 9666: 0x5D07,
+ 9667: 0x5BA0,
+ 9668: 0x62BD,
+ 9669: 0x916C,
+ 9670: 0x7574,
+ 9671: 0x8E0C,
+ 9672: 0x7A20,
+ 9673: 0x6101,
+ 9674: 0x7B79,
+ 9675: 0x4EC7,
+ 9676: 0x7EF8,
+ 9677: 0x7785,
+ 9678: 0x4E11,
+ 9679: 0x81ED,
+ 9680: 0x521D,
+ 9681: 0x51FA,
+ 9682: 0x6A71,
+ 9683: 0x53A8,
+ 9684: 0x8E87,
+ 9685: 0x9504,
+ 9686: 0x96CF,
+ 9687: 0x6EC1,
+ 9688: 0x9664,
+ 9689: 0x695A,
+ 9690: 0x7884,
+ 9691: 0x7885,
+ 9692: 0x7886,
+ 9693: 0x7888,
+ 9694: 0x788A,
+ 9695: 0x788B,
+ 9696: 0x788F,
+ 9697: 0x7890,
+ 9698: 0x7892,
+ 9699: 0x7894,
+ 9700: 0x7895,
+ 9701: 0x7896,
+ 9702: 0x7899,
+ 9703: 0x789D,
+ 9704: 0x789E,
+ 9705: 0x78A0,
+ 9706: 0x78A2,
+ 9707: 0x78A4,
+ 9708: 0x78A6,
+ 9709: 0x78A8,
+ 9710: 0x78A9,
+ 9711: 0x78AA,
+ 9712: 0x78AB,
+ 9713: 0x78AC,
+ 9714: 0x78AD,
+ 9715: 0x78AE,
+ 9716: 0x78AF,
+ 9717: 0x78B5,
+ 9718: 0x78B6,
+ 9719: 0x78B7,
+ 9720: 0x78B8,
+ 9721: 0x78BA,
+ 9722: 0x78BB,
+ 9723: 0x78BC,
+ 9724: 0x78BD,
+ 9725: 0x78BF,
+ 9726: 0x78C0,
+ 9727: 0x78C2,
+ 9728: 0x78C3,
+ 9729: 0x78C4,
+ 9730: 0x78C6,
+ 9731: 0x78C7,
+ 9732: 0x78C8,
+ 9733: 0x78CC,
+ 9734: 0x78CD,
+ 9735: 0x78CE,
+ 9736: 0x78CF,
+ 9737: 0x78D1,
+ 9738: 0x78D2,
+ 9739: 0x78D3,
+ 9740: 0x78D6,
+ 9741: 0x78D7,
+ 9742: 0x78D8,
+ 9743: 0x78DA,
+ 9744: 0x78DB,
+ 9745: 0x78DC,
+ 9746: 0x78DD,
+ 9747: 0x78DE,
+ 9748: 0x78DF,
+ 9749: 0x78E0,
+ 9750: 0x78E1,
+ 9751: 0x78E2,
+ 9752: 0x78E3,
+ 9753: 0x78E4,
+ 9754: 0x78E5,
+ 9755: 0x78E6,
+ 9756: 0x78E7,
+ 9757: 0x78E9,
+ 9758: 0x78EA,
+ 9759: 0x78EB,
+ 9760: 0x78ED,
+ 9761: 0x78EE,
+ 9762: 0x78EF,
+ 9763: 0x78F0,
+ 9764: 0x78F1,
+ 9765: 0x78F3,
+ 9766: 0x78F5,
+ 9767: 0x78F6,
+ 9768: 0x78F8,
+ 9769: 0x78F9,
+ 9770: 0x78FB,
+ 9771: 0x78FC,
+ 9772: 0x78FD,
+ 9773: 0x78FE,
+ 9774: 0x78FF,
+ 9775: 0x7900,
+ 9776: 0x7902,
+ 9777: 0x7903,
+ 9778: 0x7904,
+ 9779: 0x7906,
+ 9780: 0x7907,
+ 9781: 0x7908,
+ 9782: 0x7909,
+ 9783: 0x790A,
+ 9784: 0x790B,
+ 9785: 0x790C,
+ 9786: 0x7840,
+ 9787: 0x50A8,
+ 9788: 0x77D7,
+ 9789: 0x6410,
+ 9790: 0x89E6,
+ 9791: 0x5904,
+ 9792: 0x63E3,
+ 9793: 0x5DDD,
+ 9794: 0x7A7F,
+ 9795: 0x693D,
+ 9796: 0x4F20,
+ 9797: 0x8239,
+ 9798: 0x5598,
+ 9799: 0x4E32,
+ 9800: 0x75AE,
+ 9801: 0x7A97,
+ 9802: 0x5E62,
+ 9803: 0x5E8A,
+ 9804: 0x95EF,
+ 9805: 0x521B,
+ 9806: 0x5439,
+ 9807: 0x708A,
+ 9808: 0x6376,
+ 9809: 0x9524,
+ 9810: 0x5782,
+ 9811: 0x6625,
+ 9812: 0x693F,
+ 9813: 0x9187,
+ 9814: 0x5507,
+ 9815: 0x6DF3,
+ 9816: 0x7EAF,
+ 9817: 0x8822,
+ 9818: 0x6233,
+ 9819: 0x7EF0,
+ 9820: 0x75B5,
+ 9821: 0x8328,
+ 9822: 0x78C1,
+ 9823: 0x96CC,
+ 9824: 0x8F9E,
+ 9825: 0x6148,
+ 9826: 0x74F7,
+ 9827: 0x8BCD,
+ 9828: 0x6B64,
+ 9829: 0x523A,
+ 9830: 0x8D50,
+ 9831: 0x6B21,
+ 9832: 0x806A,
+ 9833: 0x8471,
+ 9834: 0x56F1,
+ 9835: 0x5306,
+ 9836: 0x4ECE,
+ 9837: 0x4E1B,
+ 9838: 0x51D1,
+ 9839: 0x7C97,
+ 9840: 0x918B,
+ 9841: 0x7C07,
+ 9842: 0x4FC3,
+ 9843: 0x8E7F,
+ 9844: 0x7BE1,
+ 9845: 0x7A9C,
+ 9846: 0x6467,
+ 9847: 0x5D14,
+ 9848: 0x50AC,
+ 9849: 0x8106,
+ 9850: 0x7601,
+ 9851: 0x7CB9,
+ 9852: 0x6DEC,
+ 9853: 0x7FE0,
+ 9854: 0x6751,
+ 9855: 0x5B58,
+ 9856: 0x5BF8,
+ 9857: 0x78CB,
+ 9858: 0x64AE,
+ 9859: 0x6413,
+ 9860: 0x63AA,
+ 9861: 0x632B,
+ 9862: 0x9519,
+ 9863: 0x642D,
+ 9864: 0x8FBE,
+ 9865: 0x7B54,
+ 9866: 0x7629,
+ 9867: 0x6253,
+ 9868: 0x5927,
+ 9869: 0x5446,
+ 9870: 0x6B79,
+ 9871: 0x50A3,
+ 9872: 0x6234,
+ 9873: 0x5E26,
+ 9874: 0x6B86,
+ 9875: 0x4EE3,
+ 9876: 0x8D37,
+ 9877: 0x888B,
+ 9878: 0x5F85,
+ 9879: 0x902E,
+ 9880: 0x790D,
+ 9881: 0x790E,
+ 9882: 0x790F,
+ 9883: 0x7910,
+ 9884: 0x7911,
+ 9885: 0x7912,
+ 9886: 0x7914,
+ 9887: 0x7915,
+ 9888: 0x7916,
+ 9889: 0x7917,
+ 9890: 0x7918,
+ 9891: 0x7919,
+ 9892: 0x791A,
+ 9893: 0x791B,
+ 9894: 0x791C,
+ 9895: 0x791D,
+ 9896: 0x791F,
+ 9897: 0x7920,
+ 9898: 0x7921,
+ 9899: 0x7922,
+ 9900: 0x7923,
+ 9901: 0x7925,
+ 9902: 0x7926,
+ 9903: 0x7927,
+ 9904: 0x7928,
+ 9905: 0x7929,
+ 9906: 0x792A,
+ 9907: 0x792B,
+ 9908: 0x792C,
+ 9909: 0x792D,
+ 9910: 0x792E,
+ 9911: 0x792F,
+ 9912: 0x7930,
+ 9913: 0x7931,
+ 9914: 0x7932,
+ 9915: 0x7933,
+ 9916: 0x7935,
+ 9917: 0x7936,
+ 9918: 0x7937,
+ 9919: 0x7938,
+ 9920: 0x7939,
+ 9921: 0x793D,
+ 9922: 0x793F,
+ 9923: 0x7942,
+ 9924: 0x7943,
+ 9925: 0x7944,
+ 9926: 0x7945,
+ 9927: 0x7947,
+ 9928: 0x794A,
+ 9929: 0x794B,
+ 9930: 0x794C,
+ 9931: 0x794D,
+ 9932: 0x794E,
+ 9933: 0x794F,
+ 9934: 0x7950,
+ 9935: 0x7951,
+ 9936: 0x7952,
+ 9937: 0x7954,
+ 9938: 0x7955,
+ 9939: 0x7958,
+ 9940: 0x7959,
+ 9941: 0x7961,
+ 9942: 0x7963,
+ 9943: 0x7964,
+ 9944: 0x7966,
+ 9945: 0x7969,
+ 9946: 0x796A,
+ 9947: 0x796B,
+ 9948: 0x796C,
+ 9949: 0x796E,
+ 9950: 0x7970,
+ 9951: 0x7971,
+ 9952: 0x7972,
+ 9953: 0x7973,
+ 9954: 0x7974,
+ 9955: 0x7975,
+ 9956: 0x7976,
+ 9957: 0x7979,
+ 9958: 0x797B,
+ 9959: 0x797C,
+ 9960: 0x797D,
+ 9961: 0x797E,
+ 9962: 0x797F,
+ 9963: 0x7982,
+ 9964: 0x7983,
+ 9965: 0x7986,
+ 9966: 0x7987,
+ 9967: 0x7988,
+ 9968: 0x7989,
+ 9969: 0x798B,
+ 9970: 0x798C,
+ 9971: 0x798D,
+ 9972: 0x798E,
+ 9973: 0x7990,
+ 9974: 0x7991,
+ 9975: 0x7992,
+ 9976: 0x6020,
+ 9977: 0x803D,
+ 9978: 0x62C5,
+ 9979: 0x4E39,
+ 9980: 0x5355,
+ 9981: 0x90F8,
+ 9982: 0x63B8,
+ 9983: 0x80C6,
+ 9984: 0x65E6,
+ 9985: 0x6C2E,
+ 9986: 0x4F46,
+ 9987: 0x60EE,
+ 9988: 0x6DE1,
+ 9989: 0x8BDE,
+ 9990: 0x5F39,
+ 9991: 0x86CB,
+ 9992: 0x5F53,
+ 9993: 0x6321,
+ 9994: 0x515A,
+ 9995: 0x8361,
+ 9996: 0x6863,
+ 9997: 0x5200,
+ 9998: 0x6363,
+ 9999: 0x8E48,
+ 10000: 0x5012,
+ 10001: 0x5C9B,
+ 10002: 0x7977,
+ 10003: 0x5BFC,
+ 10004: 0x5230,
+ 10005: 0x7A3B,
+ 10006: 0x60BC,
+ 10007: 0x9053,
+ 10008: 0x76D7,
+ 10009: 0x5FB7,
+ 10010: 0x5F97,
+ 10011: 0x7684,
+ 10012: 0x8E6C,
+ 10013: 0x706F,
+ 10014: 0x767B,
+ 10015: 0x7B49,
+ 10016: 0x77AA,
+ 10017: 0x51F3,
+ 10018: 0x9093,
+ 10019: 0x5824,
+ 10020: 0x4F4E,
+ 10021: 0x6EF4,
+ 10022: 0x8FEA,
+ 10023: 0x654C,
+ 10024: 0x7B1B,
+ 10025: 0x72C4,
+ 10026: 0x6DA4,
+ 10027: 0x7FDF,
+ 10028: 0x5AE1,
+ 10029: 0x62B5,
+ 10030: 0x5E95,
+ 10031: 0x5730,
+ 10032: 0x8482,
+ 10033: 0x7B2C,
+ 10034: 0x5E1D,
+ 10035: 0x5F1F,
+ 10036: 0x9012,
+ 10037: 0x7F14,
+ 10038: 0x98A0,
+ 10039: 0x6382,
+ 10040: 0x6EC7,
+ 10041: 0x7898,
+ 10042: 0x70B9,
+ 10043: 0x5178,
+ 10044: 0x975B,
+ 10045: 0x57AB,
+ 10046: 0x7535,
+ 10047: 0x4F43,
+ 10048: 0x7538,
+ 10049: 0x5E97,
+ 10050: 0x60E6,
+ 10051: 0x5960,
+ 10052: 0x6DC0,
+ 10053: 0x6BBF,
+ 10054: 0x7889,
+ 10055: 0x53FC,
+ 10056: 0x96D5,
+ 10057: 0x51CB,
+ 10058: 0x5201,
+ 10059: 0x6389,
+ 10060: 0x540A,
+ 10061: 0x9493,
+ 10062: 0x8C03,
+ 10063: 0x8DCC,
+ 10064: 0x7239,
+ 10065: 0x789F,
+ 10066: 0x8776,
+ 10067: 0x8FED,
+ 10068: 0x8C0D,
+ 10069: 0x53E0,
+ 10070: 0x7993,
+ 10071: 0x7994,
+ 10072: 0x7995,
+ 10073: 0x7996,
+ 10074: 0x7997,
+ 10075: 0x7998,
+ 10076: 0x7999,
+ 10077: 0x799B,
+ 10078: 0x799C,
+ 10079: 0x799D,
+ 10080: 0x799E,
+ 10081: 0x799F,
+ 10082: 0x79A0,
+ 10083: 0x79A1,
+ 10084: 0x79A2,
+ 10085: 0x79A3,
+ 10086: 0x79A4,
+ 10087: 0x79A5,
+ 10088: 0x79A6,
+ 10089: 0x79A8,
+ 10090: 0x79A9,
+ 10091: 0x79AA,
+ 10092: 0x79AB,
+ 10093: 0x79AC,
+ 10094: 0x79AD,
+ 10095: 0x79AE,
+ 10096: 0x79AF,
+ 10097: 0x79B0,
+ 10098: 0x79B1,
+ 10099: 0x79B2,
+ 10100: 0x79B4,
+ 10101: 0x79B5,
+ 10102: 0x79B6,
+ 10103: 0x79B7,
+ 10104: 0x79B8,
+ 10105: 0x79BC,
+ 10106: 0x79BF,
+ 10107: 0x79C2,
+ 10108: 0x79C4,
+ 10109: 0x79C5,
+ 10110: 0x79C7,
+ 10111: 0x79C8,
+ 10112: 0x79CA,
+ 10113: 0x79CC,
+ 10114: 0x79CE,
+ 10115: 0x79CF,
+ 10116: 0x79D0,
+ 10117: 0x79D3,
+ 10118: 0x79D4,
+ 10119: 0x79D6,
+ 10120: 0x79D7,
+ 10121: 0x79D9,
+ 10122: 0x79DA,
+ 10123: 0x79DB,
+ 10124: 0x79DC,
+ 10125: 0x79DD,
+ 10126: 0x79DE,
+ 10127: 0x79E0,
+ 10128: 0x79E1,
+ 10129: 0x79E2,
+ 10130: 0x79E5,
+ 10131: 0x79E8,
+ 10132: 0x79EA,
+ 10133: 0x79EC,
+ 10134: 0x79EE,
+ 10135: 0x79F1,
+ 10136: 0x79F2,
+ 10137: 0x79F3,
+ 10138: 0x79F4,
+ 10139: 0x79F5,
+ 10140: 0x79F6,
+ 10141: 0x79F7,
+ 10142: 0x79F9,
+ 10143: 0x79FA,
+ 10144: 0x79FC,
+ 10145: 0x79FE,
+ 10146: 0x79FF,
+ 10147: 0x7A01,
+ 10148: 0x7A04,
+ 10149: 0x7A05,
+ 10150: 0x7A07,
+ 10151: 0x7A08,
+ 10152: 0x7A09,
+ 10153: 0x7A0A,
+ 10154: 0x7A0C,
+ 10155: 0x7A0F,
+ 10156: 0x7A10,
+ 10157: 0x7A11,
+ 10158: 0x7A12,
+ 10159: 0x7A13,
+ 10160: 0x7A15,
+ 10161: 0x7A16,
+ 10162: 0x7A18,
+ 10163: 0x7A19,
+ 10164: 0x7A1B,
+ 10165: 0x7A1C,
+ 10166: 0x4E01,
+ 10167: 0x76EF,
+ 10168: 0x53EE,
+ 10169: 0x9489,
+ 10170: 0x9876,
+ 10171: 0x9F0E,
+ 10172: 0x952D,
+ 10173: 0x5B9A,
+ 10174: 0x8BA2,
+ 10175: 0x4E22,
+ 10176: 0x4E1C,
+ 10177: 0x51AC,
+ 10178: 0x8463,
+ 10179: 0x61C2,
+ 10180: 0x52A8,
+ 10181: 0x680B,
+ 10182: 0x4F97,
+ 10183: 0x606B,
+ 10184: 0x51BB,
+ 10185: 0x6D1E,
+ 10186: 0x515C,
+ 10187: 0x6296,
+ 10188: 0x6597,
+ 10189: 0x9661,
+ 10190: 0x8C46,
+ 10191: 0x9017,
+ 10192: 0x75D8,
+ 10193: 0x90FD,
+ 10194: 0x7763,
+ 10195: 0x6BD2,
+ 10196: 0x728A,
+ 10197: 0x72EC,
+ 10198: 0x8BFB,
+ 10199: 0x5835,
+ 10200: 0x7779,
+ 10201: 0x8D4C,
+ 10202: 0x675C,
+ 10203: 0x9540,
+ 10204: 0x809A,
+ 10205: 0x5EA6,
+ 10206: 0x6E21,
+ 10207: 0x5992,
+ 10208: 0x7AEF,
+ 10209: 0x77ED,
+ 10210: 0x953B,
+ 10211: 0x6BB5,
+ 10212: 0x65AD,
+ 10213: 0x7F0E,
+ 10214: 0x5806,
+ 10215: 0x5151,
+ 10216: 0x961F,
+ 10217: 0x5BF9,
+ 10218: 0x58A9,
+ 10219: 0x5428,
+ 10220: 0x8E72,
+ 10221: 0x6566,
+ 10222: 0x987F,
+ 10223: 0x56E4,
+ 10224: 0x949D,
+ 10225: 0x76FE,
+ 10226: 0x9041,
+ 10227: 0x6387,
+ 10228: 0x54C6,
+ 10229: 0x591A,
+ 10230: 0x593A,
+ 10231: 0x579B,
+ 10232: 0x8EB2,
+ 10233: 0x6735,
+ 10234: 0x8DFA,
+ 10235: 0x8235,
+ 10236: 0x5241,
+ 10237: 0x60F0,
+ 10238: 0x5815,
+ 10239: 0x86FE,
+ 10240: 0x5CE8,
+ 10241: 0x9E45,
+ 10242: 0x4FC4,
+ 10243: 0x989D,
+ 10244: 0x8BB9,
+ 10245: 0x5A25,
+ 10246: 0x6076,
+ 10247: 0x5384,
+ 10248: 0x627C,
+ 10249: 0x904F,
+ 10250: 0x9102,
+ 10251: 0x997F,
+ 10252: 0x6069,
+ 10253: 0x800C,
+ 10254: 0x513F,
+ 10255: 0x8033,
+ 10256: 0x5C14,
+ 10257: 0x9975,
+ 10258: 0x6D31,
+ 10259: 0x4E8C,
+ 10260: 0x7A1D,
+ 10261: 0x7A1F,
+ 10262: 0x7A21,
+ 10263: 0x7A22,
+ 10264: 0x7A24,
+ 10265: 0x7A25,
+ 10266: 0x7A26,
+ 10267: 0x7A27,
+ 10268: 0x7A28,
+ 10269: 0x7A29,
+ 10270: 0x7A2A,
+ 10271: 0x7A2B,
+ 10272: 0x7A2C,
+ 10273: 0x7A2D,
+ 10274: 0x7A2E,
+ 10275: 0x7A2F,
+ 10276: 0x7A30,
+ 10277: 0x7A31,
+ 10278: 0x7A32,
+ 10279: 0x7A34,
+ 10280: 0x7A35,
+ 10281: 0x7A36,
+ 10282: 0x7A38,
+ 10283: 0x7A3A,
+ 10284: 0x7A3E,
+ 10285: 0x7A40,
+ 10286: 0x7A41,
+ 10287: 0x7A42,
+ 10288: 0x7A43,
+ 10289: 0x7A44,
+ 10290: 0x7A45,
+ 10291: 0x7A47,
+ 10292: 0x7A48,
+ 10293: 0x7A49,
+ 10294: 0x7A4A,
+ 10295: 0x7A4B,
+ 10296: 0x7A4C,
+ 10297: 0x7A4D,
+ 10298: 0x7A4E,
+ 10299: 0x7A4F,
+ 10300: 0x7A50,
+ 10301: 0x7A52,
+ 10302: 0x7A53,
+ 10303: 0x7A54,
+ 10304: 0x7A55,
+ 10305: 0x7A56,
+ 10306: 0x7A58,
+ 10307: 0x7A59,
+ 10308: 0x7A5A,
+ 10309: 0x7A5B,
+ 10310: 0x7A5C,
+ 10311: 0x7A5D,
+ 10312: 0x7A5E,
+ 10313: 0x7A5F,
+ 10314: 0x7A60,
+ 10315: 0x7A61,
+ 10316: 0x7A62,
+ 10317: 0x7A63,
+ 10318: 0x7A64,
+ 10319: 0x7A65,
+ 10320: 0x7A66,
+ 10321: 0x7A67,
+ 10322: 0x7A68,
+ 10323: 0x7A69,
+ 10324: 0x7A6A,
+ 10325: 0x7A6B,
+ 10326: 0x7A6C,
+ 10327: 0x7A6D,
+ 10328: 0x7A6E,
+ 10329: 0x7A6F,
+ 10330: 0x7A71,
+ 10331: 0x7A72,
+ 10332: 0x7A73,
+ 10333: 0x7A75,
+ 10334: 0x7A7B,
+ 10335: 0x7A7C,
+ 10336: 0x7A7D,
+ 10337: 0x7A7E,
+ 10338: 0x7A82,
+ 10339: 0x7A85,
+ 10340: 0x7A87,
+ 10341: 0x7A89,
+ 10342: 0x7A8A,
+ 10343: 0x7A8B,
+ 10344: 0x7A8C,
+ 10345: 0x7A8E,
+ 10346: 0x7A8F,
+ 10347: 0x7A90,
+ 10348: 0x7A93,
+ 10349: 0x7A94,
+ 10350: 0x7A99,
+ 10351: 0x7A9A,
+ 10352: 0x7A9B,
+ 10353: 0x7A9E,
+ 10354: 0x7AA1,
+ 10355: 0x7AA2,
+ 10356: 0x8D30,
+ 10357: 0x53D1,
+ 10358: 0x7F5A,
+ 10359: 0x7B4F,
+ 10360: 0x4F10,
+ 10361: 0x4E4F,
+ 10362: 0x9600,
+ 10363: 0x6CD5,
+ 10364: 0x73D0,
+ 10365: 0x85E9,
+ 10366: 0x5E06,
+ 10367: 0x756A,
+ 10368: 0x7FFB,
+ 10369: 0x6A0A,
+ 10370: 0x77FE,
+ 10371: 0x9492,
+ 10372: 0x7E41,
+ 10373: 0x51E1,
+ 10374: 0x70E6,
+ 10375: 0x53CD,
+ 10376: 0x8FD4,
+ 10377: 0x8303,
+ 10378: 0x8D29,
+ 10379: 0x72AF,
+ 10380: 0x996D,
+ 10381: 0x6CDB,
+ 10382: 0x574A,
+ 10383: 0x82B3,
+ 10384: 0x65B9,
+ 10385: 0x80AA,
+ 10386: 0x623F,
+ 10387: 0x9632,
+ 10388: 0x59A8,
+ 10389: 0x4EFF,
+ 10390: 0x8BBF,
+ 10391: 0x7EBA,
+ 10392: 0x653E,
+ 10393: 0x83F2,
+ 10394: 0x975E,
+ 10395: 0x5561,
+ 10396: 0x98DE,
+ 10397: 0x80A5,
+ 10398: 0x532A,
+ 10399: 0x8BFD,
+ 10400: 0x5420,
+ 10401: 0x80BA,
+ 10402: 0x5E9F,
+ 10403: 0x6CB8,
+ 10404: 0x8D39,
+ 10405: 0x82AC,
+ 10406: 0x915A,
+ 10407: 0x5429,
+ 10408: 0x6C1B,
+ 10409: 0x5206,
+ 10410: 0x7EB7,
+ 10411: 0x575F,
+ 10412: 0x711A,
+ 10413: 0x6C7E,
+ 10414: 0x7C89,
+ 10415: 0x594B,
+ 10416: 0x4EFD,
+ 10417: 0x5FFF,
+ 10418: 0x6124,
+ 10419: 0x7CAA,
+ 10420: 0x4E30,
+ 10421: 0x5C01,
+ 10422: 0x67AB,
+ 10423: 0x8702,
+ 10424: 0x5CF0,
+ 10425: 0x950B,
+ 10426: 0x98CE,
+ 10427: 0x75AF,
+ 10428: 0x70FD,
+ 10429: 0x9022,
+ 10430: 0x51AF,
+ 10431: 0x7F1D,
+ 10432: 0x8BBD,
+ 10433: 0x5949,
+ 10434: 0x51E4,
+ 10435: 0x4F5B,
+ 10436: 0x5426,
+ 10437: 0x592B,
+ 10438: 0x6577,
+ 10439: 0x80A4,
+ 10440: 0x5B75,
+ 10441: 0x6276,
+ 10442: 0x62C2,
+ 10443: 0x8F90,
+ 10444: 0x5E45,
+ 10445: 0x6C1F,
+ 10446: 0x7B26,
+ 10447: 0x4F0F,
+ 10448: 0x4FD8,
+ 10449: 0x670D,
+ 10450: 0x7AA3,
+ 10451: 0x7AA4,
+ 10452: 0x7AA7,
+ 10453: 0x7AA9,
+ 10454: 0x7AAA,
+ 10455: 0x7AAB,
+ 10456: 0x7AAE,
+ 10457: 0x7AAF,
+ 10458: 0x7AB0,
+ 10459: 0x7AB1,
+ 10460: 0x7AB2,
+ 10461: 0x7AB4,
+ 10462: 0x7AB5,
+ 10463: 0x7AB6,
+ 10464: 0x7AB7,
+ 10465: 0x7AB8,
+ 10466: 0x7AB9,
+ 10467: 0x7ABA,
+ 10468: 0x7ABB,
+ 10469: 0x7ABC,
+ 10470: 0x7ABD,
+ 10471: 0x7ABE,
+ 10472: 0x7AC0,
+ 10473: 0x7AC1,
+ 10474: 0x7AC2,
+ 10475: 0x7AC3,
+ 10476: 0x7AC4,
+ 10477: 0x7AC5,
+ 10478: 0x7AC6,
+ 10479: 0x7AC7,
+ 10480: 0x7AC8,
+ 10481: 0x7AC9,
+ 10482: 0x7ACA,
+ 10483: 0x7ACC,
+ 10484: 0x7ACD,
+ 10485: 0x7ACE,
+ 10486: 0x7ACF,
+ 10487: 0x7AD0,
+ 10488: 0x7AD1,
+ 10489: 0x7AD2,
+ 10490: 0x7AD3,
+ 10491: 0x7AD4,
+ 10492: 0x7AD5,
+ 10493: 0x7AD7,
+ 10494: 0x7AD8,
+ 10495: 0x7ADA,
+ 10496: 0x7ADB,
+ 10497: 0x7ADC,
+ 10498: 0x7ADD,
+ 10499: 0x7AE1,
+ 10500: 0x7AE2,
+ 10501: 0x7AE4,
+ 10502: 0x7AE7,
+ 10503: 0x7AE8,
+ 10504: 0x7AE9,
+ 10505: 0x7AEA,
+ 10506: 0x7AEB,
+ 10507: 0x7AEC,
+ 10508: 0x7AEE,
+ 10509: 0x7AF0,
+ 10510: 0x7AF1,
+ 10511: 0x7AF2,
+ 10512: 0x7AF3,
+ 10513: 0x7AF4,
+ 10514: 0x7AF5,
+ 10515: 0x7AF6,
+ 10516: 0x7AF7,
+ 10517: 0x7AF8,
+ 10518: 0x7AFB,
+ 10519: 0x7AFC,
+ 10520: 0x7AFE,
+ 10521: 0x7B00,
+ 10522: 0x7B01,
+ 10523: 0x7B02,
+ 10524: 0x7B05,
+ 10525: 0x7B07,
+ 10526: 0x7B09,
+ 10527: 0x7B0C,
+ 10528: 0x7B0D,
+ 10529: 0x7B0E,
+ 10530: 0x7B10,
+ 10531: 0x7B12,
+ 10532: 0x7B13,
+ 10533: 0x7B16,
+ 10534: 0x7B17,
+ 10535: 0x7B18,
+ 10536: 0x7B1A,
+ 10537: 0x7B1C,
+ 10538: 0x7B1D,
+ 10539: 0x7B1F,
+ 10540: 0x7B21,
+ 10541: 0x7B22,
+ 10542: 0x7B23,
+ 10543: 0x7B27,
+ 10544: 0x7B29,
+ 10545: 0x7B2D,
+ 10546: 0x6D6E,
+ 10547: 0x6DAA,
+ 10548: 0x798F,
+ 10549: 0x88B1,
+ 10550: 0x5F17,
+ 10551: 0x752B,
+ 10552: 0x629A,
+ 10553: 0x8F85,
+ 10554: 0x4FEF,
+ 10555: 0x91DC,
+ 10556: 0x65A7,
+ 10557: 0x812F,
+ 10558: 0x8151,
+ 10559: 0x5E9C,
+ 10560: 0x8150,
+ 10561: 0x8D74,
+ 10562: 0x526F,
+ 10563: 0x8986,
+ 10564: 0x8D4B,
+ 10565: 0x590D,
+ 10566: 0x5085,
+ 10567: 0x4ED8,
+ 10568: 0x961C,
+ 10569: 0x7236,
+ 10570: 0x8179,
+ 10571: 0x8D1F,
+ 10572: 0x5BCC,
+ 10573: 0x8BA3,
+ 10574: 0x9644,
+ 10575: 0x5987,
+ 10576: 0x7F1A,
+ 10577: 0x5490,
+ 10578: 0x5676,
+ 10579: 0x560E,
+ 10580: 0x8BE5,
+ 10581: 0x6539,
+ 10582: 0x6982,
+ 10583: 0x9499,
+ 10584: 0x76D6,
+ 10585: 0x6E89,
+ 10586: 0x5E72,
+ 10587: 0x7518,
+ 10588: 0x6746,
+ 10589: 0x67D1,
+ 10590: 0x7AFF,
+ 10591: 0x809D,
+ 10592: 0x8D76,
+ 10593: 0x611F,
+ 10594: 0x79C6,
+ 10595: 0x6562,
+ 10596: 0x8D63,
+ 10597: 0x5188,
+ 10598: 0x521A,
+ 10599: 0x94A2,
+ 10600: 0x7F38,
+ 10601: 0x809B,
+ 10602: 0x7EB2,
+ 10603: 0x5C97,
+ 10604: 0x6E2F,
+ 10605: 0x6760,
+ 10606: 0x7BD9,
+ 10607: 0x768B,
+ 10608: 0x9AD8,
+ 10609: 0x818F,
+ 10610: 0x7F94,
+ 10611: 0x7CD5,
+ 10612: 0x641E,
+ 10613: 0x9550,
+ 10614: 0x7A3F,
+ 10615: 0x544A,
+ 10616: 0x54E5,
+ 10617: 0x6B4C,
+ 10618: 0x6401,
+ 10619: 0x6208,
+ 10620: 0x9E3D,
+ 10621: 0x80F3,
+ 10622: 0x7599,
+ 10623: 0x5272,
+ 10624: 0x9769,
+ 10625: 0x845B,
+ 10626: 0x683C,
+ 10627: 0x86E4,
+ 10628: 0x9601,
+ 10629: 0x9694,
+ 10630: 0x94EC,
+ 10631: 0x4E2A,
+ 10632: 0x5404,
+ 10633: 0x7ED9,
+ 10634: 0x6839,
+ 10635: 0x8DDF,
+ 10636: 0x8015,
+ 10637: 0x66F4,
+ 10638: 0x5E9A,
+ 10639: 0x7FB9,
+ 10640: 0x7B2F,
+ 10641: 0x7B30,
+ 10642: 0x7B32,
+ 10643: 0x7B34,
+ 10644: 0x7B35,
+ 10645: 0x7B36,
+ 10646: 0x7B37,
+ 10647: 0x7B39,
+ 10648: 0x7B3B,
+ 10649: 0x7B3D,
+ 10650: 0x7B3F,
+ 10651: 0x7B40,
+ 10652: 0x7B41,
+ 10653: 0x7B42,
+ 10654: 0x7B43,
+ 10655: 0x7B44,
+ 10656: 0x7B46,
+ 10657: 0x7B48,
+ 10658: 0x7B4A,
+ 10659: 0x7B4D,
+ 10660: 0x7B4E,
+ 10661: 0x7B53,
+ 10662: 0x7B55,
+ 10663: 0x7B57,
+ 10664: 0x7B59,
+ 10665: 0x7B5C,
+ 10666: 0x7B5E,
+ 10667: 0x7B5F,
+ 10668: 0x7B61,
+ 10669: 0x7B63,
+ 10670: 0x7B64,
+ 10671: 0x7B65,
+ 10672: 0x7B66,
+ 10673: 0x7B67,
+ 10674: 0x7B68,
+ 10675: 0x7B69,
+ 10676: 0x7B6A,
+ 10677: 0x7B6B,
+ 10678: 0x7B6C,
+ 10679: 0x7B6D,
+ 10680: 0x7B6F,
+ 10681: 0x7B70,
+ 10682: 0x7B73,
+ 10683: 0x7B74,
+ 10684: 0x7B76,
+ 10685: 0x7B78,
+ 10686: 0x7B7A,
+ 10687: 0x7B7C,
+ 10688: 0x7B7D,
+ 10689: 0x7B7F,
+ 10690: 0x7B81,
+ 10691: 0x7B82,
+ 10692: 0x7B83,
+ 10693: 0x7B84,
+ 10694: 0x7B86,
+ 10695: 0x7B87,
+ 10696: 0x7B88,
+ 10697: 0x7B89,
+ 10698: 0x7B8A,
+ 10699: 0x7B8B,
+ 10700: 0x7B8C,
+ 10701: 0x7B8E,
+ 10702: 0x7B8F,
+ 10703: 0x7B91,
+ 10704: 0x7B92,
+ 10705: 0x7B93,
+ 10706: 0x7B96,
+ 10707: 0x7B98,
+ 10708: 0x7B99,
+ 10709: 0x7B9A,
+ 10710: 0x7B9B,
+ 10711: 0x7B9E,
+ 10712: 0x7B9F,
+ 10713: 0x7BA0,
+ 10714: 0x7BA3,
+ 10715: 0x7BA4,
+ 10716: 0x7BA5,
+ 10717: 0x7BAE,
+ 10718: 0x7BAF,
+ 10719: 0x7BB0,
+ 10720: 0x7BB2,
+ 10721: 0x7BB3,
+ 10722: 0x7BB5,
+ 10723: 0x7BB6,
+ 10724: 0x7BB7,
+ 10725: 0x7BB9,
+ 10726: 0x7BBA,
+ 10727: 0x7BBB,
+ 10728: 0x7BBC,
+ 10729: 0x7BBD,
+ 10730: 0x7BBE,
+ 10731: 0x7BBF,
+ 10732: 0x7BC0,
+ 10733: 0x7BC2,
+ 10734: 0x7BC3,
+ 10735: 0x7BC4,
+ 10736: 0x57C2,
+ 10737: 0x803F,
+ 10738: 0x6897,
+ 10739: 0x5DE5,
+ 10740: 0x653B,
+ 10741: 0x529F,
+ 10742: 0x606D,
+ 10743: 0x9F9A,
+ 10744: 0x4F9B,
+ 10745: 0x8EAC,
+ 10746: 0x516C,
+ 10747: 0x5BAB,
+ 10748: 0x5F13,
+ 10749: 0x5DE9,
+ 10750: 0x6C5E,
+ 10751: 0x62F1,
+ 10752: 0x8D21,
+ 10753: 0x5171,
+ 10754: 0x94A9,
+ 10755: 0x52FE,
+ 10756: 0x6C9F,
+ 10757: 0x82DF,
+ 10758: 0x72D7,
+ 10759: 0x57A2,
+ 10760: 0x6784,
+ 10761: 0x8D2D,
+ 10762: 0x591F,
+ 10763: 0x8F9C,
+ 10764: 0x83C7,
+ 10765: 0x5495,
+ 10766: 0x7B8D,
+ 10767: 0x4F30,
+ 10768: 0x6CBD,
+ 10769: 0x5B64,
+ 10770: 0x59D1,
+ 10771: 0x9F13,
+ 10772: 0x53E4,
+ 10773: 0x86CA,
+ 10774: 0x9AA8,
+ 10775: 0x8C37,
+ 10776: 0x80A1,
+ 10777: 0x6545,
+ 10778: 0x987E,
+ 10779: 0x56FA,
+ 10780: 0x96C7,
+ 10781: 0x522E,
+ 10782: 0x74DC,
+ 10783: 0x5250,
+ 10784: 0x5BE1,
+ 10785: 0x6302,
+ 10786: 0x8902,
+ 10787: 0x4E56,
+ 10788: 0x62D0,
+ 10789: 0x602A,
+ 10790: 0x68FA,
+ 10791: 0x5173,
+ 10792: 0x5B98,
+ 10793: 0x51A0,
+ 10794: 0x89C2,
+ 10795: 0x7BA1,
+ 10796: 0x9986,
+ 10797: 0x7F50,
+ 10798: 0x60EF,
+ 10799: 0x704C,
+ 10800: 0x8D2F,
+ 10801: 0x5149,
+ 10802: 0x5E7F,
+ 10803: 0x901B,
+ 10804: 0x7470,
+ 10805: 0x89C4,
+ 10806: 0x572D,
+ 10807: 0x7845,
+ 10808: 0x5F52,
+ 10809: 0x9F9F,
+ 10810: 0x95FA,
+ 10811: 0x8F68,
+ 10812: 0x9B3C,
+ 10813: 0x8BE1,
+ 10814: 0x7678,
+ 10815: 0x6842,
+ 10816: 0x67DC,
+ 10817: 0x8DEA,
+ 10818: 0x8D35,
+ 10819: 0x523D,
+ 10820: 0x8F8A,
+ 10821: 0x6EDA,
+ 10822: 0x68CD,
+ 10823: 0x9505,
+ 10824: 0x90ED,
+ 10825: 0x56FD,
+ 10826: 0x679C,
+ 10827: 0x88F9,
+ 10828: 0x8FC7,
+ 10829: 0x54C8,
+ 10830: 0x7BC5,
+ 10831: 0x7BC8,
+ 10832: 0x7BC9,
+ 10833: 0x7BCA,
+ 10834: 0x7BCB,
+ 10835: 0x7BCD,
+ 10836: 0x7BCE,
+ 10837: 0x7BCF,
+ 10838: 0x7BD0,
+ 10839: 0x7BD2,
+ 10840: 0x7BD4,
+ 10841: 0x7BD5,
+ 10842: 0x7BD6,
+ 10843: 0x7BD7,
+ 10844: 0x7BD8,
+ 10845: 0x7BDB,
+ 10846: 0x7BDC,
+ 10847: 0x7BDE,
+ 10848: 0x7BDF,
+ 10849: 0x7BE0,
+ 10850: 0x7BE2,
+ 10851: 0x7BE3,
+ 10852: 0x7BE4,
+ 10853: 0x7BE7,
+ 10854: 0x7BE8,
+ 10855: 0x7BE9,
+ 10856: 0x7BEB,
+ 10857: 0x7BEC,
+ 10858: 0x7BED,
+ 10859: 0x7BEF,
+ 10860: 0x7BF0,
+ 10861: 0x7BF2,
+ 10862: 0x7BF3,
+ 10863: 0x7BF4,
+ 10864: 0x7BF5,
+ 10865: 0x7BF6,
+ 10866: 0x7BF8,
+ 10867: 0x7BF9,
+ 10868: 0x7BFA,
+ 10869: 0x7BFB,
+ 10870: 0x7BFD,
+ 10871: 0x7BFF,
+ 10872: 0x7C00,
+ 10873: 0x7C01,
+ 10874: 0x7C02,
+ 10875: 0x7C03,
+ 10876: 0x7C04,
+ 10877: 0x7C05,
+ 10878: 0x7C06,
+ 10879: 0x7C08,
+ 10880: 0x7C09,
+ 10881: 0x7C0A,
+ 10882: 0x7C0D,
+ 10883: 0x7C0E,
+ 10884: 0x7C10,
+ 10885: 0x7C11,
+ 10886: 0x7C12,
+ 10887: 0x7C13,
+ 10888: 0x7C14,
+ 10889: 0x7C15,
+ 10890: 0x7C17,
+ 10891: 0x7C18,
+ 10892: 0x7C19,
+ 10893: 0x7C1A,
+ 10894: 0x7C1B,
+ 10895: 0x7C1C,
+ 10896: 0x7C1D,
+ 10897: 0x7C1E,
+ 10898: 0x7C20,
+ 10899: 0x7C21,
+ 10900: 0x7C22,
+ 10901: 0x7C23,
+ 10902: 0x7C24,
+ 10903: 0x7C25,
+ 10904: 0x7C28,
+ 10905: 0x7C29,
+ 10906: 0x7C2B,
+ 10907: 0x7C2C,
+ 10908: 0x7C2D,
+ 10909: 0x7C2E,
+ 10910: 0x7C2F,
+ 10911: 0x7C30,
+ 10912: 0x7C31,
+ 10913: 0x7C32,
+ 10914: 0x7C33,
+ 10915: 0x7C34,
+ 10916: 0x7C35,
+ 10917: 0x7C36,
+ 10918: 0x7C37,
+ 10919: 0x7C39,
+ 10920: 0x7C3A,
+ 10921: 0x7C3B,
+ 10922: 0x7C3C,
+ 10923: 0x7C3D,
+ 10924: 0x7C3E,
+ 10925: 0x7C42,
+ 10926: 0x9AB8,
+ 10927: 0x5B69,
+ 10928: 0x6D77,
+ 10929: 0x6C26,
+ 10930: 0x4EA5,
+ 10931: 0x5BB3,
+ 10932: 0x9A87,
+ 10933: 0x9163,
+ 10934: 0x61A8,
+ 10935: 0x90AF,
+ 10936: 0x97E9,
+ 10937: 0x542B,
+ 10938: 0x6DB5,
+ 10939: 0x5BD2,
+ 10940: 0x51FD,
+ 10941: 0x558A,
+ 10942: 0x7F55,
+ 10943: 0x7FF0,
+ 10944: 0x64BC,
+ 10945: 0x634D,
+ 10946: 0x65F1,
+ 10947: 0x61BE,
+ 10948: 0x608D,
+ 10949: 0x710A,
+ 10950: 0x6C57,
+ 10951: 0x6C49,
+ 10952: 0x592F,
+ 10953: 0x676D,
+ 10954: 0x822A,
+ 10955: 0x58D5,
+ 10956: 0x568E,
+ 10957: 0x8C6A,
+ 10958: 0x6BEB,
+ 10959: 0x90DD,
+ 10960: 0x597D,
+ 10961: 0x8017,
+ 10962: 0x53F7,
+ 10963: 0x6D69,
+ 10964: 0x5475,
+ 10965: 0x559D,
+ 10966: 0x8377,
+ 10967: 0x83CF,
+ 10968: 0x6838,
+ 10969: 0x79BE,
+ 10970: 0x548C,
+ 10971: 0x4F55,
+ 10972: 0x5408,
+ 10973: 0x76D2,
+ 10974: 0x8C89,
+ 10975: 0x9602,
+ 10976: 0x6CB3,
+ 10977: 0x6DB8,
+ 10978: 0x8D6B,
+ 10979: 0x8910,
+ 10980: 0x9E64,
+ 10981: 0x8D3A,
+ 10982: 0x563F,
+ 10983: 0x9ED1,
+ 10984: 0x75D5,
+ 10985: 0x5F88,
+ 10986: 0x72E0,
+ 10987: 0x6068,
+ 10988: 0x54FC,
+ 10989: 0x4EA8,
+ 10990: 0x6A2A,
+ 10991: 0x8861,
+ 10992: 0x6052,
+ 10993: 0x8F70,
+ 10994: 0x54C4,
+ 10995: 0x70D8,
+ 10996: 0x8679,
+ 10997: 0x9E3F,
+ 10998: 0x6D2A,
+ 10999: 0x5B8F,
+ 11000: 0x5F18,
+ 11001: 0x7EA2,
+ 11002: 0x5589,
+ 11003: 0x4FAF,
+ 11004: 0x7334,
+ 11005: 0x543C,
+ 11006: 0x539A,
+ 11007: 0x5019,
+ 11008: 0x540E,
+ 11009: 0x547C,
+ 11010: 0x4E4E,
+ 11011: 0x5FFD,
+ 11012: 0x745A,
+ 11013: 0x58F6,
+ 11014: 0x846B,
+ 11015: 0x80E1,
+ 11016: 0x8774,
+ 11017: 0x72D0,
+ 11018: 0x7CCA,
+ 11019: 0x6E56,
+ 11020: 0x7C43,
+ 11021: 0x7C44,
+ 11022: 0x7C45,
+ 11023: 0x7C46,
+ 11024: 0x7C47,
+ 11025: 0x7C48,
+ 11026: 0x7C49,
+ 11027: 0x7C4A,
+ 11028: 0x7C4B,
+ 11029: 0x7C4C,
+ 11030: 0x7C4E,
+ 11031: 0x7C4F,
+ 11032: 0x7C50,
+ 11033: 0x7C51,
+ 11034: 0x7C52,
+ 11035: 0x7C53,
+ 11036: 0x7C54,
+ 11037: 0x7C55,
+ 11038: 0x7C56,
+ 11039: 0x7C57,
+ 11040: 0x7C58,
+ 11041: 0x7C59,
+ 11042: 0x7C5A,
+ 11043: 0x7C5B,
+ 11044: 0x7C5C,
+ 11045: 0x7C5D,
+ 11046: 0x7C5E,
+ 11047: 0x7C5F,
+ 11048: 0x7C60,
+ 11049: 0x7C61,
+ 11050: 0x7C62,
+ 11051: 0x7C63,
+ 11052: 0x7C64,
+ 11053: 0x7C65,
+ 11054: 0x7C66,
+ 11055: 0x7C67,
+ 11056: 0x7C68,
+ 11057: 0x7C69,
+ 11058: 0x7C6A,
+ 11059: 0x7C6B,
+ 11060: 0x7C6C,
+ 11061: 0x7C6D,
+ 11062: 0x7C6E,
+ 11063: 0x7C6F,
+ 11064: 0x7C70,
+ 11065: 0x7C71,
+ 11066: 0x7C72,
+ 11067: 0x7C75,
+ 11068: 0x7C76,
+ 11069: 0x7C77,
+ 11070: 0x7C78,
+ 11071: 0x7C79,
+ 11072: 0x7C7A,
+ 11073: 0x7C7E,
+ 11074: 0x7C7F,
+ 11075: 0x7C80,
+ 11076: 0x7C81,
+ 11077: 0x7C82,
+ 11078: 0x7C83,
+ 11079: 0x7C84,
+ 11080: 0x7C85,
+ 11081: 0x7C86,
+ 11082: 0x7C87,
+ 11083: 0x7C88,
+ 11084: 0x7C8A,
+ 11085: 0x7C8B,
+ 11086: 0x7C8C,
+ 11087: 0x7C8D,
+ 11088: 0x7C8E,
+ 11089: 0x7C8F,
+ 11090: 0x7C90,
+ 11091: 0x7C93,
+ 11092: 0x7C94,
+ 11093: 0x7C96,
+ 11094: 0x7C99,
+ 11095: 0x7C9A,
+ 11096: 0x7C9B,
+ 11097: 0x7CA0,
+ 11098: 0x7CA1,
+ 11099: 0x7CA3,
+ 11100: 0x7CA6,
+ 11101: 0x7CA7,
+ 11102: 0x7CA8,
+ 11103: 0x7CA9,
+ 11104: 0x7CAB,
+ 11105: 0x7CAC,
+ 11106: 0x7CAD,
+ 11107: 0x7CAF,
+ 11108: 0x7CB0,
+ 11109: 0x7CB4,
+ 11110: 0x7CB5,
+ 11111: 0x7CB6,
+ 11112: 0x7CB7,
+ 11113: 0x7CB8,
+ 11114: 0x7CBA,
+ 11115: 0x7CBB,
+ 11116: 0x5F27,
+ 11117: 0x864E,
+ 11118: 0x552C,
+ 11119: 0x62A4,
+ 11120: 0x4E92,
+ 11121: 0x6CAA,
+ 11122: 0x6237,
+ 11123: 0x82B1,
+ 11124: 0x54D7,
+ 11125: 0x534E,
+ 11126: 0x733E,
+ 11127: 0x6ED1,
+ 11128: 0x753B,
+ 11129: 0x5212,
+ 11130: 0x5316,
+ 11131: 0x8BDD,
+ 11132: 0x69D0,
+ 11133: 0x5F8A,
+ 11134: 0x6000,
+ 11135: 0x6DEE,
+ 11136: 0x574F,
+ 11137: 0x6B22,
+ 11138: 0x73AF,
+ 11139: 0x6853,
+ 11140: 0x8FD8,
+ 11141: 0x7F13,
+ 11142: 0x6362,
+ 11143: 0x60A3,
+ 11144: 0x5524,
+ 11145: 0x75EA,
+ 11146: 0x8C62,
+ 11147: 0x7115,
+ 11148: 0x6DA3,
+ 11149: 0x5BA6,
+ 11150: 0x5E7B,
+ 11151: 0x8352,
+ 11152: 0x614C,
+ 11153: 0x9EC4,
+ 11154: 0x78FA,
+ 11155: 0x8757,
+ 11156: 0x7C27,
+ 11157: 0x7687,
+ 11158: 0x51F0,
+ 11159: 0x60F6,
+ 11160: 0x714C,
+ 11161: 0x6643,
+ 11162: 0x5E4C,
+ 11163: 0x604D,
+ 11164: 0x8C0E,
+ 11165: 0x7070,
+ 11166: 0x6325,
+ 11167: 0x8F89,
+ 11168: 0x5FBD,
+ 11169: 0x6062,
+ 11170: 0x86D4,
+ 11171: 0x56DE,
+ 11172: 0x6BC1,
+ 11173: 0x6094,
+ 11174: 0x6167,
+ 11175: 0x5349,
+ 11176: 0x60E0,
+ 11177: 0x6666,
+ 11178: 0x8D3F,
+ 11179: 0x79FD,
+ 11180: 0x4F1A,
+ 11181: 0x70E9,
+ 11182: 0x6C47,
+ 11183: 0x8BB3,
+ 11184: 0x8BF2,
+ 11185: 0x7ED8,
+ 11186: 0x8364,
+ 11187: 0x660F,
+ 11188: 0x5A5A,
+ 11189: 0x9B42,
+ 11190: 0x6D51,
+ 11191: 0x6DF7,
+ 11192: 0x8C41,
+ 11193: 0x6D3B,
+ 11194: 0x4F19,
+ 11195: 0x706B,
+ 11196: 0x83B7,
+ 11197: 0x6216,
+ 11198: 0x60D1,
+ 11199: 0x970D,
+ 11200: 0x8D27,
+ 11201: 0x7978,
+ 11202: 0x51FB,
+ 11203: 0x573E,
+ 11204: 0x57FA,
+ 11205: 0x673A,
+ 11206: 0x7578,
+ 11207: 0x7A3D,
+ 11208: 0x79EF,
+ 11209: 0x7B95,
+ 11210: 0x7CBF,
+ 11211: 0x7CC0,
+ 11212: 0x7CC2,
+ 11213: 0x7CC3,
+ 11214: 0x7CC4,
+ 11215: 0x7CC6,
+ 11216: 0x7CC9,
+ 11217: 0x7CCB,
+ 11218: 0x7CCE,
+ 11219: 0x7CCF,
+ 11220: 0x7CD0,
+ 11221: 0x7CD1,
+ 11222: 0x7CD2,
+ 11223: 0x7CD3,
+ 11224: 0x7CD4,
+ 11225: 0x7CD8,
+ 11226: 0x7CDA,
+ 11227: 0x7CDB,
+ 11228: 0x7CDD,
+ 11229: 0x7CDE,
+ 11230: 0x7CE1,
+ 11231: 0x7CE2,
+ 11232: 0x7CE3,
+ 11233: 0x7CE4,
+ 11234: 0x7CE5,
+ 11235: 0x7CE6,
+ 11236: 0x7CE7,
+ 11237: 0x7CE9,
+ 11238: 0x7CEA,
+ 11239: 0x7CEB,
+ 11240: 0x7CEC,
+ 11241: 0x7CED,
+ 11242: 0x7CEE,
+ 11243: 0x7CF0,
+ 11244: 0x7CF1,
+ 11245: 0x7CF2,
+ 11246: 0x7CF3,
+ 11247: 0x7CF4,
+ 11248: 0x7CF5,
+ 11249: 0x7CF6,
+ 11250: 0x7CF7,
+ 11251: 0x7CF9,
+ 11252: 0x7CFA,
+ 11253: 0x7CFC,
+ 11254: 0x7CFD,
+ 11255: 0x7CFE,
+ 11256: 0x7CFF,
+ 11257: 0x7D00,
+ 11258: 0x7D01,
+ 11259: 0x7D02,
+ 11260: 0x7D03,
+ 11261: 0x7D04,
+ 11262: 0x7D05,
+ 11263: 0x7D06,
+ 11264: 0x7D07,
+ 11265: 0x7D08,
+ 11266: 0x7D09,
+ 11267: 0x7D0B,
+ 11268: 0x7D0C,
+ 11269: 0x7D0D,
+ 11270: 0x7D0E,
+ 11271: 0x7D0F,
+ 11272: 0x7D10,
+ 11273: 0x7D11,
+ 11274: 0x7D12,
+ 11275: 0x7D13,
+ 11276: 0x7D14,
+ 11277: 0x7D15,
+ 11278: 0x7D16,
+ 11279: 0x7D17,
+ 11280: 0x7D18,
+ 11281: 0x7D19,
+ 11282: 0x7D1A,
+ 11283: 0x7D1B,
+ 11284: 0x7D1C,
+ 11285: 0x7D1D,
+ 11286: 0x7D1E,
+ 11287: 0x7D1F,
+ 11288: 0x7D21,
+ 11289: 0x7D23,
+ 11290: 0x7D24,
+ 11291: 0x7D25,
+ 11292: 0x7D26,
+ 11293: 0x7D28,
+ 11294: 0x7D29,
+ 11295: 0x7D2A,
+ 11296: 0x7D2C,
+ 11297: 0x7D2D,
+ 11298: 0x7D2E,
+ 11299: 0x7D30,
+ 11300: 0x7D31,
+ 11301: 0x7D32,
+ 11302: 0x7D33,
+ 11303: 0x7D34,
+ 11304: 0x7D35,
+ 11305: 0x7D36,
+ 11306: 0x808C,
+ 11307: 0x9965,
+ 11308: 0x8FF9,
+ 11309: 0x6FC0,
+ 11310: 0x8BA5,
+ 11311: 0x9E21,
+ 11312: 0x59EC,
+ 11313: 0x7EE9,
+ 11314: 0x7F09,
+ 11315: 0x5409,
+ 11316: 0x6781,
+ 11317: 0x68D8,
+ 11318: 0x8F91,
+ 11319: 0x7C4D,
+ 11320: 0x96C6,
+ 11321: 0x53CA,
+ 11322: 0x6025,
+ 11323: 0x75BE,
+ 11324: 0x6C72,
+ 11325: 0x5373,
+ 11326: 0x5AC9,
+ 11327: 0x7EA7,
+ 11328: 0x6324,
+ 11329: 0x51E0,
+ 11330: 0x810A,
+ 11331: 0x5DF1,
+ 11332: 0x84DF,
+ 11333: 0x6280,
+ 11334: 0x5180,
+ 11335: 0x5B63,
+ 11336: 0x4F0E,
+ 11337: 0x796D,
+ 11338: 0x5242,
+ 11339: 0x60B8,
+ 11340: 0x6D4E,
+ 11341: 0x5BC4,
+ 11342: 0x5BC2,
+ 11343: 0x8BA1,
+ 11344: 0x8BB0,
+ 11345: 0x65E2,
+ 11346: 0x5FCC,
+ 11347: 0x9645,
+ 11348: 0x5993,
+ 11349: 0x7EE7,
+ 11350: 0x7EAA,
+ 11351: 0x5609,
+ 11352: 0x67B7,
+ 11353: 0x5939,
+ 11354: 0x4F73,
+ 11355: 0x5BB6,
+ 11356: 0x52A0,
+ 11357: 0x835A,
+ 11358: 0x988A,
+ 11359: 0x8D3E,
+ 11360: 0x7532,
+ 11361: 0x94BE,
+ 11362: 0x5047,
+ 11363: 0x7A3C,
+ 11364: 0x4EF7,
+ 11365: 0x67B6,
+ 11366: 0x9A7E,
+ 11367: 0x5AC1,
+ 11368: 0x6B7C,
+ 11369: 0x76D1,
+ 11370: 0x575A,
+ 11371: 0x5C16,
+ 11372: 0x7B3A,
+ 11373: 0x95F4,
+ 11374: 0x714E,
+ 11375: 0x517C,
+ 11376: 0x80A9,
+ 11377: 0x8270,
+ 11378: 0x5978,
+ 11379: 0x7F04,
+ 11380: 0x8327,
+ 11381: 0x68C0,
+ 11382: 0x67EC,
+ 11383: 0x78B1,
+ 11384: 0x7877,
+ 11385: 0x62E3,
+ 11386: 0x6361,
+ 11387: 0x7B80,
+ 11388: 0x4FED,
+ 11389: 0x526A,
+ 11390: 0x51CF,
+ 11391: 0x8350,
+ 11392: 0x69DB,
+ 11393: 0x9274,
+ 11394: 0x8DF5,
+ 11395: 0x8D31,
+ 11396: 0x89C1,
+ 11397: 0x952E,
+ 11398: 0x7BAD,
+ 11399: 0x4EF6,
+ 11400: 0x7D37,
+ 11401: 0x7D38,
+ 11402: 0x7D39,
+ 11403: 0x7D3A,
+ 11404: 0x7D3B,
+ 11405: 0x7D3C,
+ 11406: 0x7D3D,
+ 11407: 0x7D3E,
+ 11408: 0x7D3F,
+ 11409: 0x7D40,
+ 11410: 0x7D41,
+ 11411: 0x7D42,
+ 11412: 0x7D43,
+ 11413: 0x7D44,
+ 11414: 0x7D45,
+ 11415: 0x7D46,
+ 11416: 0x7D47,
+ 11417: 0x7D48,
+ 11418: 0x7D49,
+ 11419: 0x7D4A,
+ 11420: 0x7D4B,
+ 11421: 0x7D4C,
+ 11422: 0x7D4D,
+ 11423: 0x7D4E,
+ 11424: 0x7D4F,
+ 11425: 0x7D50,
+ 11426: 0x7D51,
+ 11427: 0x7D52,
+ 11428: 0x7D53,
+ 11429: 0x7D54,
+ 11430: 0x7D55,
+ 11431: 0x7D56,
+ 11432: 0x7D57,
+ 11433: 0x7D58,
+ 11434: 0x7D59,
+ 11435: 0x7D5A,
+ 11436: 0x7D5B,
+ 11437: 0x7D5C,
+ 11438: 0x7D5D,
+ 11439: 0x7D5E,
+ 11440: 0x7D5F,
+ 11441: 0x7D60,
+ 11442: 0x7D61,
+ 11443: 0x7D62,
+ 11444: 0x7D63,
+ 11445: 0x7D64,
+ 11446: 0x7D65,
+ 11447: 0x7D66,
+ 11448: 0x7D67,
+ 11449: 0x7D68,
+ 11450: 0x7D69,
+ 11451: 0x7D6A,
+ 11452: 0x7D6B,
+ 11453: 0x7D6C,
+ 11454: 0x7D6D,
+ 11455: 0x7D6F,
+ 11456: 0x7D70,
+ 11457: 0x7D71,
+ 11458: 0x7D72,
+ 11459: 0x7D73,
+ 11460: 0x7D74,
+ 11461: 0x7D75,
+ 11462: 0x7D76,
+ 11463: 0x7D78,
+ 11464: 0x7D79,
+ 11465: 0x7D7A,
+ 11466: 0x7D7B,
+ 11467: 0x7D7C,
+ 11468: 0x7D7D,
+ 11469: 0x7D7E,
+ 11470: 0x7D7F,
+ 11471: 0x7D80,
+ 11472: 0x7D81,
+ 11473: 0x7D82,
+ 11474: 0x7D83,
+ 11475: 0x7D84,
+ 11476: 0x7D85,
+ 11477: 0x7D86,
+ 11478: 0x7D87,
+ 11479: 0x7D88,
+ 11480: 0x7D89,
+ 11481: 0x7D8A,
+ 11482: 0x7D8B,
+ 11483: 0x7D8C,
+ 11484: 0x7D8D,
+ 11485: 0x7D8E,
+ 11486: 0x7D8F,
+ 11487: 0x7D90,
+ 11488: 0x7D91,
+ 11489: 0x7D92,
+ 11490: 0x7D93,
+ 11491: 0x7D94,
+ 11492: 0x7D95,
+ 11493: 0x7D96,
+ 11494: 0x7D97,
+ 11495: 0x7D98,
+ 11496: 0x5065,
+ 11497: 0x8230,
+ 11498: 0x5251,
+ 11499: 0x996F,
+ 11500: 0x6E10,
+ 11501: 0x6E85,
+ 11502: 0x6DA7,
+ 11503: 0x5EFA,
+ 11504: 0x50F5,
+ 11505: 0x59DC,
+ 11506: 0x5C06,
+ 11507: 0x6D46,
+ 11508: 0x6C5F,
+ 11509: 0x7586,
+ 11510: 0x848B,
+ 11511: 0x6868,
+ 11512: 0x5956,
+ 11513: 0x8BB2,
+ 11514: 0x5320,
+ 11515: 0x9171,
+ 11516: 0x964D,
+ 11517: 0x8549,
+ 11518: 0x6912,
+ 11519: 0x7901,
+ 11520: 0x7126,
+ 11521: 0x80F6,
+ 11522: 0x4EA4,
+ 11523: 0x90CA,
+ 11524: 0x6D47,
+ 11525: 0x9A84,
+ 11526: 0x5A07,
+ 11527: 0x56BC,
+ 11528: 0x6405,
+ 11529: 0x94F0,
+ 11530: 0x77EB,
+ 11531: 0x4FA5,
+ 11532: 0x811A,
+ 11533: 0x72E1,
+ 11534: 0x89D2,
+ 11535: 0x997A,
+ 11536: 0x7F34,
+ 11537: 0x7EDE,
+ 11538: 0x527F,
+ 11539: 0x6559,
+ 11540: 0x9175,
+ 11541: 0x8F7F,
+ 11542: 0x8F83,
+ 11543: 0x53EB,
+ 11544: 0x7A96,
+ 11545: 0x63ED,
+ 11546: 0x63A5,
+ 11547: 0x7686,
+ 11548: 0x79F8,
+ 11549: 0x8857,
+ 11550: 0x9636,
+ 11551: 0x622A,
+ 11552: 0x52AB,
+ 11553: 0x8282,
+ 11554: 0x6854,
+ 11555: 0x6770,
+ 11556: 0x6377,
+ 11557: 0x776B,
+ 11558: 0x7AED,
+ 11559: 0x6D01,
+ 11560: 0x7ED3,
+ 11561: 0x89E3,
+ 11562: 0x59D0,
+ 11563: 0x6212,
+ 11564: 0x85C9,
+ 11565: 0x82A5,
+ 11566: 0x754C,
+ 11567: 0x501F,
+ 11568: 0x4ECB,
+ 11569: 0x75A5,
+ 11570: 0x8BEB,
+ 11571: 0x5C4A,
+ 11572: 0x5DFE,
+ 11573: 0x7B4B,
+ 11574: 0x65A4,
+ 11575: 0x91D1,
+ 11576: 0x4ECA,
+ 11577: 0x6D25,
+ 11578: 0x895F,
+ 11579: 0x7D27,
+ 11580: 0x9526,
+ 11581: 0x4EC5,
+ 11582: 0x8C28,
+ 11583: 0x8FDB,
+ 11584: 0x9773,
+ 11585: 0x664B,
+ 11586: 0x7981,
+ 11587: 0x8FD1,
+ 11588: 0x70EC,
+ 11589: 0x6D78,
+ 11590: 0x7D99,
+ 11591: 0x7D9A,
+ 11592: 0x7D9B,
+ 11593: 0x7D9C,
+ 11594: 0x7D9D,
+ 11595: 0x7D9E,
+ 11596: 0x7D9F,
+ 11597: 0x7DA0,
+ 11598: 0x7DA1,
+ 11599: 0x7DA2,
+ 11600: 0x7DA3,
+ 11601: 0x7DA4,
+ 11602: 0x7DA5,
+ 11603: 0x7DA7,
+ 11604: 0x7DA8,
+ 11605: 0x7DA9,
+ 11606: 0x7DAA,
+ 11607: 0x7DAB,
+ 11608: 0x7DAC,
+ 11609: 0x7DAD,
+ 11610: 0x7DAF,
+ 11611: 0x7DB0,
+ 11612: 0x7DB1,
+ 11613: 0x7DB2,
+ 11614: 0x7DB3,
+ 11615: 0x7DB4,
+ 11616: 0x7DB5,
+ 11617: 0x7DB6,
+ 11618: 0x7DB7,
+ 11619: 0x7DB8,
+ 11620: 0x7DB9,
+ 11621: 0x7DBA,
+ 11622: 0x7DBB,
+ 11623: 0x7DBC,
+ 11624: 0x7DBD,
+ 11625: 0x7DBE,
+ 11626: 0x7DBF,
+ 11627: 0x7DC0,
+ 11628: 0x7DC1,
+ 11629: 0x7DC2,
+ 11630: 0x7DC3,
+ 11631: 0x7DC4,
+ 11632: 0x7DC5,
+ 11633: 0x7DC6,
+ 11634: 0x7DC7,
+ 11635: 0x7DC8,
+ 11636: 0x7DC9,
+ 11637: 0x7DCA,
+ 11638: 0x7DCB,
+ 11639: 0x7DCC,
+ 11640: 0x7DCD,
+ 11641: 0x7DCE,
+ 11642: 0x7DCF,
+ 11643: 0x7DD0,
+ 11644: 0x7DD1,
+ 11645: 0x7DD2,
+ 11646: 0x7DD3,
+ 11647: 0x7DD4,
+ 11648: 0x7DD5,
+ 11649: 0x7DD6,
+ 11650: 0x7DD7,
+ 11651: 0x7DD8,
+ 11652: 0x7DD9,
+ 11653: 0x7DDA,
+ 11654: 0x7DDB,
+ 11655: 0x7DDC,
+ 11656: 0x7DDD,
+ 11657: 0x7DDE,
+ 11658: 0x7DDF,
+ 11659: 0x7DE0,
+ 11660: 0x7DE1,
+ 11661: 0x7DE2,
+ 11662: 0x7DE3,
+ 11663: 0x7DE4,
+ 11664: 0x7DE5,
+ 11665: 0x7DE6,
+ 11666: 0x7DE7,
+ 11667: 0x7DE8,
+ 11668: 0x7DE9,
+ 11669: 0x7DEA,
+ 11670: 0x7DEB,
+ 11671: 0x7DEC,
+ 11672: 0x7DED,
+ 11673: 0x7DEE,
+ 11674: 0x7DEF,
+ 11675: 0x7DF0,
+ 11676: 0x7DF1,
+ 11677: 0x7DF2,
+ 11678: 0x7DF3,
+ 11679: 0x7DF4,
+ 11680: 0x7DF5,
+ 11681: 0x7DF6,
+ 11682: 0x7DF7,
+ 11683: 0x7DF8,
+ 11684: 0x7DF9,
+ 11685: 0x7DFA,
+ 11686: 0x5C3D,
+ 11687: 0x52B2,
+ 11688: 0x8346,
+ 11689: 0x5162,
+ 11690: 0x830E,
+ 11691: 0x775B,
+ 11692: 0x6676,
+ 11693: 0x9CB8,
+ 11694: 0x4EAC,
+ 11695: 0x60CA,
+ 11696: 0x7CBE,
+ 11697: 0x7CB3,
+ 11698: 0x7ECF,
+ 11699: 0x4E95,
+ 11700: 0x8B66,
+ 11701: 0x666F,
+ 11702: 0x9888,
+ 11703: 0x9759,
+ 11704: 0x5883,
+ 11705: 0x656C,
+ 11706: 0x955C,
+ 11707: 0x5F84,
+ 11708: 0x75C9,
+ 11709: 0x9756,
+ 11710: 0x7ADF,
+ 11711: 0x7ADE,
+ 11712: 0x51C0,
+ 11713: 0x70AF,
+ 11714: 0x7A98,
+ 11715: 0x63EA,
+ 11716: 0x7A76,
+ 11717: 0x7EA0,
+ 11718: 0x7396,
+ 11719: 0x97ED,
+ 11720: 0x4E45,
+ 11721: 0x7078,
+ 11722: 0x4E5D,
+ 11723: 0x9152,
+ 11724: 0x53A9,
+ 11725: 0x6551,
+ 11726: 0x65E7,
+ 11727: 0x81FC,
+ 11728: 0x8205,
+ 11729: 0x548E,
+ 11730: 0x5C31,
+ 11731: 0x759A,
+ 11732: 0x97A0,
+ 11733: 0x62D8,
+ 11734: 0x72D9,
+ 11735: 0x75BD,
+ 11736: 0x5C45,
+ 11737: 0x9A79,
+ 11738: 0x83CA,
+ 11739: 0x5C40,
+ 11740: 0x5480,
+ 11741: 0x77E9,
+ 11742: 0x4E3E,
+ 11743: 0x6CAE,
+ 11744: 0x805A,
+ 11745: 0x62D2,
+ 11746: 0x636E,
+ 11747: 0x5DE8,
+ 11748: 0x5177,
+ 11749: 0x8DDD,
+ 11750: 0x8E1E,
+ 11751: 0x952F,
+ 11752: 0x4FF1,
+ 11753: 0x53E5,
+ 11754: 0x60E7,
+ 11755: 0x70AC,
+ 11756: 0x5267,
+ 11757: 0x6350,
+ 11758: 0x9E43,
+ 11759: 0x5A1F,
+ 11760: 0x5026,
+ 11761: 0x7737,
+ 11762: 0x5377,
+ 11763: 0x7EE2,
+ 11764: 0x6485,
+ 11765: 0x652B,
+ 11766: 0x6289,
+ 11767: 0x6398,
+ 11768: 0x5014,
+ 11769: 0x7235,
+ 11770: 0x89C9,
+ 11771: 0x51B3,
+ 11772: 0x8BC0,
+ 11773: 0x7EDD,
+ 11774: 0x5747,
+ 11775: 0x83CC,
+ 11776: 0x94A7,
+ 11777: 0x519B,
+ 11778: 0x541B,
+ 11779: 0x5CFB,
+ 11780: 0x7DFB,
+ 11781: 0x7DFC,
+ 11782: 0x7DFD,
+ 11783: 0x7DFE,
+ 11784: 0x7DFF,
+ 11785: 0x7E00,
+ 11786: 0x7E01,
+ 11787: 0x7E02,
+ 11788: 0x7E03,
+ 11789: 0x7E04,
+ 11790: 0x7E05,
+ 11791: 0x7E06,
+ 11792: 0x7E07,
+ 11793: 0x7E08,
+ 11794: 0x7E09,
+ 11795: 0x7E0A,
+ 11796: 0x7E0B,
+ 11797: 0x7E0C,
+ 11798: 0x7E0D,
+ 11799: 0x7E0E,
+ 11800: 0x7E0F,
+ 11801: 0x7E10,
+ 11802: 0x7E11,
+ 11803: 0x7E12,
+ 11804: 0x7E13,
+ 11805: 0x7E14,
+ 11806: 0x7E15,
+ 11807: 0x7E16,
+ 11808: 0x7E17,
+ 11809: 0x7E18,
+ 11810: 0x7E19,
+ 11811: 0x7E1A,
+ 11812: 0x7E1B,
+ 11813: 0x7E1C,
+ 11814: 0x7E1D,
+ 11815: 0x7E1E,
+ 11816: 0x7E1F,
+ 11817: 0x7E20,
+ 11818: 0x7E21,
+ 11819: 0x7E22,
+ 11820: 0x7E23,
+ 11821: 0x7E24,
+ 11822: 0x7E25,
+ 11823: 0x7E26,
+ 11824: 0x7E27,
+ 11825: 0x7E28,
+ 11826: 0x7E29,
+ 11827: 0x7E2A,
+ 11828: 0x7E2B,
+ 11829: 0x7E2C,
+ 11830: 0x7E2D,
+ 11831: 0x7E2E,
+ 11832: 0x7E2F,
+ 11833: 0x7E30,
+ 11834: 0x7E31,
+ 11835: 0x7E32,
+ 11836: 0x7E33,
+ 11837: 0x7E34,
+ 11838: 0x7E35,
+ 11839: 0x7E36,
+ 11840: 0x7E37,
+ 11841: 0x7E38,
+ 11842: 0x7E39,
+ 11843: 0x7E3A,
+ 11844: 0x7E3C,
+ 11845: 0x7E3D,
+ 11846: 0x7E3E,
+ 11847: 0x7E3F,
+ 11848: 0x7E40,
+ 11849: 0x7E42,
+ 11850: 0x7E43,
+ 11851: 0x7E44,
+ 11852: 0x7E45,
+ 11853: 0x7E46,
+ 11854: 0x7E48,
+ 11855: 0x7E49,
+ 11856: 0x7E4A,
+ 11857: 0x7E4B,
+ 11858: 0x7E4C,
+ 11859: 0x7E4D,
+ 11860: 0x7E4E,
+ 11861: 0x7E4F,
+ 11862: 0x7E50,
+ 11863: 0x7E51,
+ 11864: 0x7E52,
+ 11865: 0x7E53,
+ 11866: 0x7E54,
+ 11867: 0x7E55,
+ 11868: 0x7E56,
+ 11869: 0x7E57,
+ 11870: 0x7E58,
+ 11871: 0x7E59,
+ 11872: 0x7E5A,
+ 11873: 0x7E5B,
+ 11874: 0x7E5C,
+ 11875: 0x7E5D,
+ 11876: 0x4FCA,
+ 11877: 0x7AE3,
+ 11878: 0x6D5A,
+ 11879: 0x90E1,
+ 11880: 0x9A8F,
+ 11881: 0x5580,
+ 11882: 0x5496,
+ 11883: 0x5361,
+ 11884: 0x54AF,
+ 11885: 0x5F00,
+ 11886: 0x63E9,
+ 11887: 0x6977,
+ 11888: 0x51EF,
+ 11889: 0x6168,
+ 11890: 0x520A,
+ 11891: 0x582A,
+ 11892: 0x52D8,
+ 11893: 0x574E,
+ 11894: 0x780D,
+ 11895: 0x770B,
+ 11896: 0x5EB7,
+ 11897: 0x6177,
+ 11898: 0x7CE0,
+ 11899: 0x625B,
+ 11900: 0x6297,
+ 11901: 0x4EA2,
+ 11902: 0x7095,
+ 11903: 0x8003,
+ 11904: 0x62F7,
+ 11905: 0x70E4,
+ 11906: 0x9760,
+ 11907: 0x5777,
+ 11908: 0x82DB,
+ 11909: 0x67EF,
+ 11910: 0x68F5,
+ 11911: 0x78D5,
+ 11912: 0x9897,
+ 11913: 0x79D1,
+ 11914: 0x58F3,
+ 11915: 0x54B3,
+ 11916: 0x53EF,
+ 11917: 0x6E34,
+ 11918: 0x514B,
+ 11919: 0x523B,
+ 11920: 0x5BA2,
+ 11921: 0x8BFE,
+ 11922: 0x80AF,
+ 11923: 0x5543,
+ 11924: 0x57A6,
+ 11925: 0x6073,
+ 11926: 0x5751,
+ 11927: 0x542D,
+ 11928: 0x7A7A,
+ 11929: 0x6050,
+ 11930: 0x5B54,
+ 11931: 0x63A7,
+ 11932: 0x62A0,
+ 11933: 0x53E3,
+ 11934: 0x6263,
+ 11935: 0x5BC7,
+ 11936: 0x67AF,
+ 11937: 0x54ED,
+ 11938: 0x7A9F,
+ 11939: 0x82E6,
+ 11940: 0x9177,
+ 11941: 0x5E93,
+ 11942: 0x88E4,
+ 11943: 0x5938,
+ 11944: 0x57AE,
+ 11945: 0x630E,
+ 11946: 0x8DE8,
+ 11947: 0x80EF,
+ 11948: 0x5757,
+ 11949: 0x7B77,
+ 11950: 0x4FA9,
+ 11951: 0x5FEB,
+ 11952: 0x5BBD,
+ 11953: 0x6B3E,
+ 11954: 0x5321,
+ 11955: 0x7B50,
+ 11956: 0x72C2,
+ 11957: 0x6846,
+ 11958: 0x77FF,
+ 11959: 0x7736,
+ 11960: 0x65F7,
+ 11961: 0x51B5,
+ 11962: 0x4E8F,
+ 11963: 0x76D4,
+ 11964: 0x5CBF,
+ 11965: 0x7AA5,
+ 11966: 0x8475,
+ 11967: 0x594E,
+ 11968: 0x9B41,
+ 11969: 0x5080,
+ 11970: 0x7E5E,
+ 11971: 0x7E5F,
+ 11972: 0x7E60,
+ 11973: 0x7E61,
+ 11974: 0x7E62,
+ 11975: 0x7E63,
+ 11976: 0x7E64,
+ 11977: 0x7E65,
+ 11978: 0x7E66,
+ 11979: 0x7E67,
+ 11980: 0x7E68,
+ 11981: 0x7E69,
+ 11982: 0x7E6A,
+ 11983: 0x7E6B,
+ 11984: 0x7E6C,
+ 11985: 0x7E6D,
+ 11986: 0x7E6E,
+ 11987: 0x7E6F,
+ 11988: 0x7E70,
+ 11989: 0x7E71,
+ 11990: 0x7E72,
+ 11991: 0x7E73,
+ 11992: 0x7E74,
+ 11993: 0x7E75,
+ 11994: 0x7E76,
+ 11995: 0x7E77,
+ 11996: 0x7E78,
+ 11997: 0x7E79,
+ 11998: 0x7E7A,
+ 11999: 0x7E7B,
+ 12000: 0x7E7C,
+ 12001: 0x7E7D,
+ 12002: 0x7E7E,
+ 12003: 0x7E7F,
+ 12004: 0x7E80,
+ 12005: 0x7E81,
+ 12006: 0x7E83,
+ 12007: 0x7E84,
+ 12008: 0x7E85,
+ 12009: 0x7E86,
+ 12010: 0x7E87,
+ 12011: 0x7E88,
+ 12012: 0x7E89,
+ 12013: 0x7E8A,
+ 12014: 0x7E8B,
+ 12015: 0x7E8C,
+ 12016: 0x7E8D,
+ 12017: 0x7E8E,
+ 12018: 0x7E8F,
+ 12019: 0x7E90,
+ 12020: 0x7E91,
+ 12021: 0x7E92,
+ 12022: 0x7E93,
+ 12023: 0x7E94,
+ 12024: 0x7E95,
+ 12025: 0x7E96,
+ 12026: 0x7E97,
+ 12027: 0x7E98,
+ 12028: 0x7E99,
+ 12029: 0x7E9A,
+ 12030: 0x7E9C,
+ 12031: 0x7E9D,
+ 12032: 0x7E9E,
+ 12033: 0x7EAE,
+ 12034: 0x7EB4,
+ 12035: 0x7EBB,
+ 12036: 0x7EBC,
+ 12037: 0x7ED6,
+ 12038: 0x7EE4,
+ 12039: 0x7EEC,
+ 12040: 0x7EF9,
+ 12041: 0x7F0A,
+ 12042: 0x7F10,
+ 12043: 0x7F1E,
+ 12044: 0x7F37,
+ 12045: 0x7F39,
+ 12046: 0x7F3B,
+ 12047: 0x7F3C,
+ 12048: 0x7F3D,
+ 12049: 0x7F3E,
+ 12050: 0x7F3F,
+ 12051: 0x7F40,
+ 12052: 0x7F41,
+ 12053: 0x7F43,
+ 12054: 0x7F46,
+ 12055: 0x7F47,
+ 12056: 0x7F48,
+ 12057: 0x7F49,
+ 12058: 0x7F4A,
+ 12059: 0x7F4B,
+ 12060: 0x7F4C,
+ 12061: 0x7F4D,
+ 12062: 0x7F4E,
+ 12063: 0x7F4F,
+ 12064: 0x7F52,
+ 12065: 0x7F53,
+ 12066: 0x9988,
+ 12067: 0x6127,
+ 12068: 0x6E83,
+ 12069: 0x5764,
+ 12070: 0x6606,
+ 12071: 0x6346,
+ 12072: 0x56F0,
+ 12073: 0x62EC,
+ 12074: 0x6269,
+ 12075: 0x5ED3,
+ 12076: 0x9614,
+ 12077: 0x5783,
+ 12078: 0x62C9,
+ 12079: 0x5587,
+ 12080: 0x8721,
+ 12081: 0x814A,
+ 12082: 0x8FA3,
+ 12083: 0x5566,
+ 12084: 0x83B1,
+ 12085: 0x6765,
+ 12086: 0x8D56,
+ 12087: 0x84DD,
+ 12088: 0x5A6A,
+ 12089: 0x680F,
+ 12090: 0x62E6,
+ 12091: 0x7BEE,
+ 12092: 0x9611,
+ 12093: 0x5170,
+ 12094: 0x6F9C,
+ 12095: 0x8C30,
+ 12096: 0x63FD,
+ 12097: 0x89C8,
+ 12098: 0x61D2,
+ 12099: 0x7F06,
+ 12100: 0x70C2,
+ 12101: 0x6EE5,
+ 12102: 0x7405,
+ 12103: 0x6994,
+ 12104: 0x72FC,
+ 12105: 0x5ECA,
+ 12106: 0x90CE,
+ 12107: 0x6717,
+ 12108: 0x6D6A,
+ 12109: 0x635E,
+ 12110: 0x52B3,
+ 12111: 0x7262,
+ 12112: 0x8001,
+ 12113: 0x4F6C,
+ 12114: 0x59E5,
+ 12115: 0x916A,
+ 12116: 0x70D9,
+ 12117: 0x6D9D,
+ 12118: 0x52D2,
+ 12119: 0x4E50,
+ 12120: 0x96F7,
+ 12121: 0x956D,
+ 12122: 0x857E,
+ 12123: 0x78CA,
+ 12124: 0x7D2F,
+ 12125: 0x5121,
+ 12126: 0x5792,
+ 12127: 0x64C2,
+ 12128: 0x808B,
+ 12129: 0x7C7B,
+ 12130: 0x6CEA,
+ 12131: 0x68F1,
+ 12132: 0x695E,
+ 12133: 0x51B7,
+ 12134: 0x5398,
+ 12135: 0x68A8,
+ 12136: 0x7281,
+ 12137: 0x9ECE,
+ 12138: 0x7BF1,
+ 12139: 0x72F8,
+ 12140: 0x79BB,
+ 12141: 0x6F13,
+ 12142: 0x7406,
+ 12143: 0x674E,
+ 12144: 0x91CC,
+ 12145: 0x9CA4,
+ 12146: 0x793C,
+ 12147: 0x8389,
+ 12148: 0x8354,
+ 12149: 0x540F,
+ 12150: 0x6817,
+ 12151: 0x4E3D,
+ 12152: 0x5389,
+ 12153: 0x52B1,
+ 12154: 0x783E,
+ 12155: 0x5386,
+ 12156: 0x5229,
+ 12157: 0x5088,
+ 12158: 0x4F8B,
+ 12159: 0x4FD0,
+ 12160: 0x7F56,
+ 12161: 0x7F59,
+ 12162: 0x7F5B,
+ 12163: 0x7F5C,
+ 12164: 0x7F5D,
+ 12165: 0x7F5E,
+ 12166: 0x7F60,
+ 12167: 0x7F63,
+ 12168: 0x7F64,
+ 12169: 0x7F65,
+ 12170: 0x7F66,
+ 12171: 0x7F67,
+ 12172: 0x7F6B,
+ 12173: 0x7F6C,
+ 12174: 0x7F6D,
+ 12175: 0x7F6F,
+ 12176: 0x7F70,
+ 12177: 0x7F73,
+ 12178: 0x7F75,
+ 12179: 0x7F76,
+ 12180: 0x7F77,
+ 12181: 0x7F78,
+ 12182: 0x7F7A,
+ 12183: 0x7F7B,
+ 12184: 0x7F7C,
+ 12185: 0x7F7D,
+ 12186: 0x7F7F,
+ 12187: 0x7F80,
+ 12188: 0x7F82,
+ 12189: 0x7F83,
+ 12190: 0x7F84,
+ 12191: 0x7F85,
+ 12192: 0x7F86,
+ 12193: 0x7F87,
+ 12194: 0x7F88,
+ 12195: 0x7F89,
+ 12196: 0x7F8B,
+ 12197: 0x7F8D,
+ 12198: 0x7F8F,
+ 12199: 0x7F90,
+ 12200: 0x7F91,
+ 12201: 0x7F92,
+ 12202: 0x7F93,
+ 12203: 0x7F95,
+ 12204: 0x7F96,
+ 12205: 0x7F97,
+ 12206: 0x7F98,
+ 12207: 0x7F99,
+ 12208: 0x7F9B,
+ 12209: 0x7F9C,
+ 12210: 0x7FA0,
+ 12211: 0x7FA2,
+ 12212: 0x7FA3,
+ 12213: 0x7FA5,
+ 12214: 0x7FA6,
+ 12215: 0x7FA8,
+ 12216: 0x7FA9,
+ 12217: 0x7FAA,
+ 12218: 0x7FAB,
+ 12219: 0x7FAC,
+ 12220: 0x7FAD,
+ 12221: 0x7FAE,
+ 12222: 0x7FB1,
+ 12223: 0x7FB3,
+ 12224: 0x7FB4,
+ 12225: 0x7FB5,
+ 12226: 0x7FB6,
+ 12227: 0x7FB7,
+ 12228: 0x7FBA,
+ 12229: 0x7FBB,
+ 12230: 0x7FBE,
+ 12231: 0x7FC0,
+ 12232: 0x7FC2,
+ 12233: 0x7FC3,
+ 12234: 0x7FC4,
+ 12235: 0x7FC6,
+ 12236: 0x7FC7,
+ 12237: 0x7FC8,
+ 12238: 0x7FC9,
+ 12239: 0x7FCB,
+ 12240: 0x7FCD,
+ 12241: 0x7FCF,
+ 12242: 0x7FD0,
+ 12243: 0x7FD1,
+ 12244: 0x7FD2,
+ 12245: 0x7FD3,
+ 12246: 0x7FD6,
+ 12247: 0x7FD7,
+ 12248: 0x7FD9,
+ 12249: 0x7FDA,
+ 12250: 0x7FDB,
+ 12251: 0x7FDC,
+ 12252: 0x7FDD,
+ 12253: 0x7FDE,
+ 12254: 0x7FE2,
+ 12255: 0x7FE3,
+ 12256: 0x75E2,
+ 12257: 0x7ACB,
+ 12258: 0x7C92,
+ 12259: 0x6CA5,
+ 12260: 0x96B6,
+ 12261: 0x529B,
+ 12262: 0x7483,
+ 12263: 0x54E9,
+ 12264: 0x4FE9,
+ 12265: 0x8054,
+ 12266: 0x83B2,
+ 12267: 0x8FDE,
+ 12268: 0x9570,
+ 12269: 0x5EC9,
+ 12270: 0x601C,
+ 12271: 0x6D9F,
+ 12272: 0x5E18,
+ 12273: 0x655B,
+ 12274: 0x8138,
+ 12275: 0x94FE,
+ 12276: 0x604B,
+ 12277: 0x70BC,
+ 12278: 0x7EC3,
+ 12279: 0x7CAE,
+ 12280: 0x51C9,
+ 12281: 0x6881,
+ 12282: 0x7CB1,
+ 12283: 0x826F,
+ 12284: 0x4E24,
+ 12285: 0x8F86,
+ 12286: 0x91CF,
+ 12287: 0x667E,
+ 12288: 0x4EAE,
+ 12289: 0x8C05,
+ 12290: 0x64A9,
+ 12291: 0x804A,
+ 12292: 0x50DA,
+ 12293: 0x7597,
+ 12294: 0x71CE,
+ 12295: 0x5BE5,
+ 12296: 0x8FBD,
+ 12297: 0x6F66,
+ 12298: 0x4E86,
+ 12299: 0x6482,
+ 12300: 0x9563,
+ 12301: 0x5ED6,
+ 12302: 0x6599,
+ 12303: 0x5217,
+ 12304: 0x88C2,
+ 12305: 0x70C8,
+ 12306: 0x52A3,
+ 12307: 0x730E,
+ 12308: 0x7433,
+ 12309: 0x6797,
+ 12310: 0x78F7,
+ 12311: 0x9716,
+ 12312: 0x4E34,
+ 12313: 0x90BB,
+ 12314: 0x9CDE,
+ 12315: 0x6DCB,
+ 12316: 0x51DB,
+ 12317: 0x8D41,
+ 12318: 0x541D,
+ 12319: 0x62CE,
+ 12320: 0x73B2,
+ 12321: 0x83F1,
+ 12322: 0x96F6,
+ 12323: 0x9F84,
+ 12324: 0x94C3,
+ 12325: 0x4F36,
+ 12326: 0x7F9A,
+ 12327: 0x51CC,
+ 12328: 0x7075,
+ 12329: 0x9675,
+ 12330: 0x5CAD,
+ 12331: 0x9886,
+ 12332: 0x53E6,
+ 12333: 0x4EE4,
+ 12334: 0x6E9C,
+ 12335: 0x7409,
+ 12336: 0x69B4,
+ 12337: 0x786B,
+ 12338: 0x998F,
+ 12339: 0x7559,
+ 12340: 0x5218,
+ 12341: 0x7624,
+ 12342: 0x6D41,
+ 12343: 0x67F3,
+ 12344: 0x516D,
+ 12345: 0x9F99,
+ 12346: 0x804B,
+ 12347: 0x5499,
+ 12348: 0x7B3C,
+ 12349: 0x7ABF,
+ 12350: 0x7FE4,
+ 12351: 0x7FE7,
+ 12352: 0x7FE8,
+ 12353: 0x7FEA,
+ 12354: 0x7FEB,
+ 12355: 0x7FEC,
+ 12356: 0x7FED,
+ 12357: 0x7FEF,
+ 12358: 0x7FF2,
+ 12359: 0x7FF4,
+ 12360: 0x7FF5,
+ 12361: 0x7FF6,
+ 12362: 0x7FF7,
+ 12363: 0x7FF8,
+ 12364: 0x7FF9,
+ 12365: 0x7FFA,
+ 12366: 0x7FFD,
+ 12367: 0x7FFE,
+ 12368: 0x7FFF,
+ 12369: 0x8002,
+ 12370: 0x8007,
+ 12371: 0x8008,
+ 12372: 0x8009,
+ 12373: 0x800A,
+ 12374: 0x800E,
+ 12375: 0x800F,
+ 12376: 0x8011,
+ 12377: 0x8013,
+ 12378: 0x801A,
+ 12379: 0x801B,
+ 12380: 0x801D,
+ 12381: 0x801E,
+ 12382: 0x801F,
+ 12383: 0x8021,
+ 12384: 0x8023,
+ 12385: 0x8024,
+ 12386: 0x802B,
+ 12387: 0x802C,
+ 12388: 0x802D,
+ 12389: 0x802E,
+ 12390: 0x802F,
+ 12391: 0x8030,
+ 12392: 0x8032,
+ 12393: 0x8034,
+ 12394: 0x8039,
+ 12395: 0x803A,
+ 12396: 0x803C,
+ 12397: 0x803E,
+ 12398: 0x8040,
+ 12399: 0x8041,
+ 12400: 0x8044,
+ 12401: 0x8045,
+ 12402: 0x8047,
+ 12403: 0x8048,
+ 12404: 0x8049,
+ 12405: 0x804E,
+ 12406: 0x804F,
+ 12407: 0x8050,
+ 12408: 0x8051,
+ 12409: 0x8053,
+ 12410: 0x8055,
+ 12411: 0x8056,
+ 12412: 0x8057,
+ 12413: 0x8059,
+ 12414: 0x805B,
+ 12415: 0x805C,
+ 12416: 0x805D,
+ 12417: 0x805E,
+ 12418: 0x805F,
+ 12419: 0x8060,
+ 12420: 0x8061,
+ 12421: 0x8062,
+ 12422: 0x8063,
+ 12423: 0x8064,
+ 12424: 0x8065,
+ 12425: 0x8066,
+ 12426: 0x8067,
+ 12427: 0x8068,
+ 12428: 0x806B,
+ 12429: 0x806C,
+ 12430: 0x806D,
+ 12431: 0x806E,
+ 12432: 0x806F,
+ 12433: 0x8070,
+ 12434: 0x8072,
+ 12435: 0x8073,
+ 12436: 0x8074,
+ 12437: 0x8075,
+ 12438: 0x8076,
+ 12439: 0x8077,
+ 12440: 0x8078,
+ 12441: 0x8079,
+ 12442: 0x807A,
+ 12443: 0x807B,
+ 12444: 0x807C,
+ 12445: 0x807D,
+ 12446: 0x9686,
+ 12447: 0x5784,
+ 12448: 0x62E2,
+ 12449: 0x9647,
+ 12450: 0x697C,
+ 12451: 0x5A04,
+ 12452: 0x6402,
+ 12453: 0x7BD3,
+ 12454: 0x6F0F,
+ 12455: 0x964B,
+ 12456: 0x82A6,
+ 12457: 0x5362,
+ 12458: 0x9885,
+ 12459: 0x5E90,
+ 12460: 0x7089,
+ 12461: 0x63B3,
+ 12462: 0x5364,
+ 12463: 0x864F,
+ 12464: 0x9C81,
+ 12465: 0x9E93,
+ 12466: 0x788C,
+ 12467: 0x9732,
+ 12468: 0x8DEF,
+ 12469: 0x8D42,
+ 12470: 0x9E7F,
+ 12471: 0x6F5E,
+ 12472: 0x7984,
+ 12473: 0x5F55,
+ 12474: 0x9646,
+ 12475: 0x622E,
+ 12476: 0x9A74,
+ 12477: 0x5415,
+ 12478: 0x94DD,
+ 12479: 0x4FA3,
+ 12480: 0x65C5,
+ 12481: 0x5C65,
+ 12482: 0x5C61,
+ 12483: 0x7F15,
+ 12484: 0x8651,
+ 12485: 0x6C2F,
+ 12486: 0x5F8B,
+ 12487: 0x7387,
+ 12488: 0x6EE4,
+ 12489: 0x7EFF,
+ 12490: 0x5CE6,
+ 12491: 0x631B,
+ 12492: 0x5B6A,
+ 12493: 0x6EE6,
+ 12494: 0x5375,
+ 12495: 0x4E71,
+ 12496: 0x63A0,
+ 12497: 0x7565,
+ 12498: 0x62A1,
+ 12499: 0x8F6E,
+ 12500: 0x4F26,
+ 12501: 0x4ED1,
+ 12502: 0x6CA6,
+ 12503: 0x7EB6,
+ 12504: 0x8BBA,
+ 12505: 0x841D,
+ 12506: 0x87BA,
+ 12507: 0x7F57,
+ 12508: 0x903B,
+ 12509: 0x9523,
+ 12510: 0x7BA9,
+ 12511: 0x9AA1,
+ 12512: 0x88F8,
+ 12513: 0x843D,
+ 12514: 0x6D1B,
+ 12515: 0x9A86,
+ 12516: 0x7EDC,
+ 12517: 0x5988,
+ 12518: 0x9EBB,
+ 12519: 0x739B,
+ 12520: 0x7801,
+ 12521: 0x8682,
+ 12522: 0x9A6C,
+ 12523: 0x9A82,
+ 12524: 0x561B,
+ 12525: 0x5417,
+ 12526: 0x57CB,
+ 12527: 0x4E70,
+ 12528: 0x9EA6,
+ 12529: 0x5356,
+ 12530: 0x8FC8,
+ 12531: 0x8109,
+ 12532: 0x7792,
+ 12533: 0x9992,
+ 12534: 0x86EE,
+ 12535: 0x6EE1,
+ 12536: 0x8513,
+ 12537: 0x66FC,
+ 12538: 0x6162,
+ 12539: 0x6F2B,
+ 12540: 0x807E,
+ 12541: 0x8081,
+ 12542: 0x8082,
+ 12543: 0x8085,
+ 12544: 0x8088,
+ 12545: 0x808A,
+ 12546: 0x808D,
+ 12547: 0x808E,
+ 12548: 0x808F,
+ 12549: 0x8090,
+ 12550: 0x8091,
+ 12551: 0x8092,
+ 12552: 0x8094,
+ 12553: 0x8095,
+ 12554: 0x8097,
+ 12555: 0x8099,
+ 12556: 0x809E,
+ 12557: 0x80A3,
+ 12558: 0x80A6,
+ 12559: 0x80A7,
+ 12560: 0x80A8,
+ 12561: 0x80AC,
+ 12562: 0x80B0,
+ 12563: 0x80B3,
+ 12564: 0x80B5,
+ 12565: 0x80B6,
+ 12566: 0x80B8,
+ 12567: 0x80B9,
+ 12568: 0x80BB,
+ 12569: 0x80C5,
+ 12570: 0x80C7,
+ 12571: 0x80C8,
+ 12572: 0x80C9,
+ 12573: 0x80CA,
+ 12574: 0x80CB,
+ 12575: 0x80CF,
+ 12576: 0x80D0,
+ 12577: 0x80D1,
+ 12578: 0x80D2,
+ 12579: 0x80D3,
+ 12580: 0x80D4,
+ 12581: 0x80D5,
+ 12582: 0x80D8,
+ 12583: 0x80DF,
+ 12584: 0x80E0,
+ 12585: 0x80E2,
+ 12586: 0x80E3,
+ 12587: 0x80E6,
+ 12588: 0x80EE,
+ 12589: 0x80F5,
+ 12590: 0x80F7,
+ 12591: 0x80F9,
+ 12592: 0x80FB,
+ 12593: 0x80FE,
+ 12594: 0x80FF,
+ 12595: 0x8100,
+ 12596: 0x8101,
+ 12597: 0x8103,
+ 12598: 0x8104,
+ 12599: 0x8105,
+ 12600: 0x8107,
+ 12601: 0x8108,
+ 12602: 0x810B,
+ 12603: 0x810C,
+ 12604: 0x8115,
+ 12605: 0x8117,
+ 12606: 0x8119,
+ 12607: 0x811B,
+ 12608: 0x811C,
+ 12609: 0x811D,
+ 12610: 0x811F,
+ 12611: 0x8120,
+ 12612: 0x8121,
+ 12613: 0x8122,
+ 12614: 0x8123,
+ 12615: 0x8124,
+ 12616: 0x8125,
+ 12617: 0x8126,
+ 12618: 0x8127,
+ 12619: 0x8128,
+ 12620: 0x8129,
+ 12621: 0x812A,
+ 12622: 0x812B,
+ 12623: 0x812D,
+ 12624: 0x812E,
+ 12625: 0x8130,
+ 12626: 0x8133,
+ 12627: 0x8134,
+ 12628: 0x8135,
+ 12629: 0x8137,
+ 12630: 0x8139,
+ 12631: 0x813A,
+ 12632: 0x813B,
+ 12633: 0x813C,
+ 12634: 0x813D,
+ 12635: 0x813F,
+ 12636: 0x8C29,
+ 12637: 0x8292,
+ 12638: 0x832B,
+ 12639: 0x76F2,
+ 12640: 0x6C13,
+ 12641: 0x5FD9,
+ 12642: 0x83BD,
+ 12643: 0x732B,
+ 12644: 0x8305,
+ 12645: 0x951A,
+ 12646: 0x6BDB,
+ 12647: 0x77DB,
+ 12648: 0x94C6,
+ 12649: 0x536F,
+ 12650: 0x8302,
+ 12651: 0x5192,
+ 12652: 0x5E3D,
+ 12653: 0x8C8C,
+ 12654: 0x8D38,
+ 12655: 0x4E48,
+ 12656: 0x73AB,
+ 12657: 0x679A,
+ 12658: 0x6885,
+ 12659: 0x9176,
+ 12660: 0x9709,
+ 12661: 0x7164,
+ 12662: 0x6CA1,
+ 12663: 0x7709,
+ 12664: 0x5A92,
+ 12665: 0x9541,
+ 12666: 0x6BCF,
+ 12667: 0x7F8E,
+ 12668: 0x6627,
+ 12669: 0x5BD0,
+ 12670: 0x59B9,
+ 12671: 0x5A9A,
+ 12672: 0x95E8,
+ 12673: 0x95F7,
+ 12674: 0x4EEC,
+ 12675: 0x840C,
+ 12676: 0x8499,
+ 12677: 0x6AAC,
+ 12678: 0x76DF,
+ 12679: 0x9530,
+ 12680: 0x731B,
+ 12681: 0x68A6,
+ 12682: 0x5B5F,
+ 12683: 0x772F,
+ 12684: 0x919A,
+ 12685: 0x9761,
+ 12686: 0x7CDC,
+ 12687: 0x8FF7,
+ 12688: 0x8C1C,
+ 12689: 0x5F25,
+ 12690: 0x7C73,
+ 12691: 0x79D8,
+ 12692: 0x89C5,
+ 12693: 0x6CCC,
+ 12694: 0x871C,
+ 12695: 0x5BC6,
+ 12696: 0x5E42,
+ 12697: 0x68C9,
+ 12698: 0x7720,
+ 12699: 0x7EF5,
+ 12700: 0x5195,
+ 12701: 0x514D,
+ 12702: 0x52C9,
+ 12703: 0x5A29,
+ 12704: 0x7F05,
+ 12705: 0x9762,
+ 12706: 0x82D7,
+ 12707: 0x63CF,
+ 12708: 0x7784,
+ 12709: 0x85D0,
+ 12710: 0x79D2,
+ 12711: 0x6E3A,
+ 12712: 0x5E99,
+ 12713: 0x5999,
+ 12714: 0x8511,
+ 12715: 0x706D,
+ 12716: 0x6C11,
+ 12717: 0x62BF,
+ 12718: 0x76BF,
+ 12719: 0x654F,
+ 12720: 0x60AF,
+ 12721: 0x95FD,
+ 12722: 0x660E,
+ 12723: 0x879F,
+ 12724: 0x9E23,
+ 12725: 0x94ED,
+ 12726: 0x540D,
+ 12727: 0x547D,
+ 12728: 0x8C2C,
+ 12729: 0x6478,
+ 12730: 0x8140,
+ 12731: 0x8141,
+ 12732: 0x8142,
+ 12733: 0x8143,
+ 12734: 0x8144,
+ 12735: 0x8145,
+ 12736: 0x8147,
+ 12737: 0x8149,
+ 12738: 0x814D,
+ 12739: 0x814E,
+ 12740: 0x814F,
+ 12741: 0x8152,
+ 12742: 0x8156,
+ 12743: 0x8157,
+ 12744: 0x8158,
+ 12745: 0x815B,
+ 12746: 0x815C,
+ 12747: 0x815D,
+ 12748: 0x815E,
+ 12749: 0x815F,
+ 12750: 0x8161,
+ 12751: 0x8162,
+ 12752: 0x8163,
+ 12753: 0x8164,
+ 12754: 0x8166,
+ 12755: 0x8168,
+ 12756: 0x816A,
+ 12757: 0x816B,
+ 12758: 0x816C,
+ 12759: 0x816F,
+ 12760: 0x8172,
+ 12761: 0x8173,
+ 12762: 0x8175,
+ 12763: 0x8176,
+ 12764: 0x8177,
+ 12765: 0x8178,
+ 12766: 0x8181,
+ 12767: 0x8183,
+ 12768: 0x8184,
+ 12769: 0x8185,
+ 12770: 0x8186,
+ 12771: 0x8187,
+ 12772: 0x8189,
+ 12773: 0x818B,
+ 12774: 0x818C,
+ 12775: 0x818D,
+ 12776: 0x818E,
+ 12777: 0x8190,
+ 12778: 0x8192,
+ 12779: 0x8193,
+ 12780: 0x8194,
+ 12781: 0x8195,
+ 12782: 0x8196,
+ 12783: 0x8197,
+ 12784: 0x8199,
+ 12785: 0x819A,
+ 12786: 0x819E,
+ 12787: 0x819F,
+ 12788: 0x81A0,
+ 12789: 0x81A1,
+ 12790: 0x81A2,
+ 12791: 0x81A4,
+ 12792: 0x81A5,
+ 12793: 0x81A7,
+ 12794: 0x81A9,
+ 12795: 0x81AB,
+ 12796: 0x81AC,
+ 12797: 0x81AD,
+ 12798: 0x81AE,
+ 12799: 0x81AF,
+ 12800: 0x81B0,
+ 12801: 0x81B1,
+ 12802: 0x81B2,
+ 12803: 0x81B4,
+ 12804: 0x81B5,
+ 12805: 0x81B6,
+ 12806: 0x81B7,
+ 12807: 0x81B8,
+ 12808: 0x81B9,
+ 12809: 0x81BC,
+ 12810: 0x81BD,
+ 12811: 0x81BE,
+ 12812: 0x81BF,
+ 12813: 0x81C4,
+ 12814: 0x81C5,
+ 12815: 0x81C7,
+ 12816: 0x81C8,
+ 12817: 0x81C9,
+ 12818: 0x81CB,
+ 12819: 0x81CD,
+ 12820: 0x81CE,
+ 12821: 0x81CF,
+ 12822: 0x81D0,
+ 12823: 0x81D1,
+ 12824: 0x81D2,
+ 12825: 0x81D3,
+ 12826: 0x6479,
+ 12827: 0x8611,
+ 12828: 0x6A21,
+ 12829: 0x819C,
+ 12830: 0x78E8,
+ 12831: 0x6469,
+ 12832: 0x9B54,
+ 12833: 0x62B9,
+ 12834: 0x672B,
+ 12835: 0x83AB,
+ 12836: 0x58A8,
+ 12837: 0x9ED8,
+ 12838: 0x6CAB,
+ 12839: 0x6F20,
+ 12840: 0x5BDE,
+ 12841: 0x964C,
+ 12842: 0x8C0B,
+ 12843: 0x725F,
+ 12844: 0x67D0,
+ 12845: 0x62C7,
+ 12846: 0x7261,
+ 12847: 0x4EA9,
+ 12848: 0x59C6,
+ 12849: 0x6BCD,
+ 12850: 0x5893,
+ 12851: 0x66AE,
+ 12852: 0x5E55,
+ 12853: 0x52DF,
+ 12854: 0x6155,
+ 12855: 0x6728,
+ 12856: 0x76EE,
+ 12857: 0x7766,
+ 12858: 0x7267,
+ 12859: 0x7A46,
+ 12860: 0x62FF,
+ 12861: 0x54EA,
+ 12862: 0x5450,
+ 12863: 0x94A0,
+ 12864: 0x90A3,
+ 12865: 0x5A1C,
+ 12866: 0x7EB3,
+ 12867: 0x6C16,
+ 12868: 0x4E43,
+ 12869: 0x5976,
+ 12870: 0x8010,
+ 12871: 0x5948,
+ 12872: 0x5357,
+ 12873: 0x7537,
+ 12874: 0x96BE,
+ 12875: 0x56CA,
+ 12876: 0x6320,
+ 12877: 0x8111,
+ 12878: 0x607C,
+ 12879: 0x95F9,
+ 12880: 0x6DD6,
+ 12881: 0x5462,
+ 12882: 0x9981,
+ 12883: 0x5185,
+ 12884: 0x5AE9,
+ 12885: 0x80FD,
+ 12886: 0x59AE,
+ 12887: 0x9713,
+ 12888: 0x502A,
+ 12889: 0x6CE5,
+ 12890: 0x5C3C,
+ 12891: 0x62DF,
+ 12892: 0x4F60,
+ 12893: 0x533F,
+ 12894: 0x817B,
+ 12895: 0x9006,
+ 12896: 0x6EBA,
+ 12897: 0x852B,
+ 12898: 0x62C8,
+ 12899: 0x5E74,
+ 12900: 0x78BE,
+ 12901: 0x64B5,
+ 12902: 0x637B,
+ 12903: 0x5FF5,
+ 12904: 0x5A18,
+ 12905: 0x917F,
+ 12906: 0x9E1F,
+ 12907: 0x5C3F,
+ 12908: 0x634F,
+ 12909: 0x8042,
+ 12910: 0x5B7D,
+ 12911: 0x556E,
+ 12912: 0x954A,
+ 12913: 0x954D,
+ 12914: 0x6D85,
+ 12915: 0x60A8,
+ 12916: 0x67E0,
+ 12917: 0x72DE,
+ 12918: 0x51DD,
+ 12919: 0x5B81,
+ 12920: 0x81D4,
+ 12921: 0x81D5,
+ 12922: 0x81D6,
+ 12923: 0x81D7,
+ 12924: 0x81D8,
+ 12925: 0x81D9,
+ 12926: 0x81DA,
+ 12927: 0x81DB,
+ 12928: 0x81DC,
+ 12929: 0x81DD,
+ 12930: 0x81DE,
+ 12931: 0x81DF,
+ 12932: 0x81E0,
+ 12933: 0x81E1,
+ 12934: 0x81E2,
+ 12935: 0x81E4,
+ 12936: 0x81E5,
+ 12937: 0x81E6,
+ 12938: 0x81E8,
+ 12939: 0x81E9,
+ 12940: 0x81EB,
+ 12941: 0x81EE,
+ 12942: 0x81EF,
+ 12943: 0x81F0,
+ 12944: 0x81F1,
+ 12945: 0x81F2,
+ 12946: 0x81F5,
+ 12947: 0x81F6,
+ 12948: 0x81F7,
+ 12949: 0x81F8,
+ 12950: 0x81F9,
+ 12951: 0x81FA,
+ 12952: 0x81FD,
+ 12953: 0x81FF,
+ 12954: 0x8203,
+ 12955: 0x8207,
+ 12956: 0x8208,
+ 12957: 0x8209,
+ 12958: 0x820A,
+ 12959: 0x820B,
+ 12960: 0x820E,
+ 12961: 0x820F,
+ 12962: 0x8211,
+ 12963: 0x8213,
+ 12964: 0x8215,
+ 12965: 0x8216,
+ 12966: 0x8217,
+ 12967: 0x8218,
+ 12968: 0x8219,
+ 12969: 0x821A,
+ 12970: 0x821D,
+ 12971: 0x8220,
+ 12972: 0x8224,
+ 12973: 0x8225,
+ 12974: 0x8226,
+ 12975: 0x8227,
+ 12976: 0x8229,
+ 12977: 0x822E,
+ 12978: 0x8232,
+ 12979: 0x823A,
+ 12980: 0x823C,
+ 12981: 0x823D,
+ 12982: 0x823F,
+ 12983: 0x8240,
+ 12984: 0x8241,
+ 12985: 0x8242,
+ 12986: 0x8243,
+ 12987: 0x8245,
+ 12988: 0x8246,
+ 12989: 0x8248,
+ 12990: 0x824A,
+ 12991: 0x824C,
+ 12992: 0x824D,
+ 12993: 0x824E,
+ 12994: 0x8250,
+ 12995: 0x8251,
+ 12996: 0x8252,
+ 12997: 0x8253,
+ 12998: 0x8254,
+ 12999: 0x8255,
+ 13000: 0x8256,
+ 13001: 0x8257,
+ 13002: 0x8259,
+ 13003: 0x825B,
+ 13004: 0x825C,
+ 13005: 0x825D,
+ 13006: 0x825E,
+ 13007: 0x8260,
+ 13008: 0x8261,
+ 13009: 0x8262,
+ 13010: 0x8263,
+ 13011: 0x8264,
+ 13012: 0x8265,
+ 13013: 0x8266,
+ 13014: 0x8267,
+ 13015: 0x8269,
+ 13016: 0x62E7,
+ 13017: 0x6CDE,
+ 13018: 0x725B,
+ 13019: 0x626D,
+ 13020: 0x94AE,
+ 13021: 0x7EBD,
+ 13022: 0x8113,
+ 13023: 0x6D53,
+ 13024: 0x519C,
+ 13025: 0x5F04,
+ 13026: 0x5974,
+ 13027: 0x52AA,
+ 13028: 0x6012,
+ 13029: 0x5973,
+ 13030: 0x6696,
+ 13031: 0x8650,
+ 13032: 0x759F,
+ 13033: 0x632A,
+ 13034: 0x61E6,
+ 13035: 0x7CEF,
+ 13036: 0x8BFA,
+ 13037: 0x54E6,
+ 13038: 0x6B27,
+ 13039: 0x9E25,
+ 13040: 0x6BB4,
+ 13041: 0x85D5,
+ 13042: 0x5455,
+ 13043: 0x5076,
+ 13044: 0x6CA4,
+ 13045: 0x556A,
+ 13046: 0x8DB4,
+ 13047: 0x722C,
+ 13048: 0x5E15,
+ 13049: 0x6015,
+ 13050: 0x7436,
+ 13051: 0x62CD,
+ 13052: 0x6392,
+ 13053: 0x724C,
+ 13054: 0x5F98,
+ 13055: 0x6E43,
+ 13056: 0x6D3E,
+ 13057: 0x6500,
+ 13058: 0x6F58,
+ 13059: 0x76D8,
+ 13060: 0x78D0,
+ 13061: 0x76FC,
+ 13062: 0x7554,
+ 13063: 0x5224,
+ 13064: 0x53DB,
+ 13065: 0x4E53,
+ 13066: 0x5E9E,
+ 13067: 0x65C1,
+ 13068: 0x802A,
+ 13069: 0x80D6,
+ 13070: 0x629B,
+ 13071: 0x5486,
+ 13072: 0x5228,
+ 13073: 0x70AE,
+ 13074: 0x888D,
+ 13075: 0x8DD1,
+ 13076: 0x6CE1,
+ 13077: 0x5478,
+ 13078: 0x80DA,
+ 13079: 0x57F9,
+ 13080: 0x88F4,
+ 13081: 0x8D54,
+ 13082: 0x966A,
+ 13083: 0x914D,
+ 13084: 0x4F69,
+ 13085: 0x6C9B,
+ 13086: 0x55B7,
+ 13087: 0x76C6,
+ 13088: 0x7830,
+ 13089: 0x62A8,
+ 13090: 0x70F9,
+ 13091: 0x6F8E,
+ 13092: 0x5F6D,
+ 13093: 0x84EC,
+ 13094: 0x68DA,
+ 13095: 0x787C,
+ 13096: 0x7BF7,
+ 13097: 0x81A8,
+ 13098: 0x670B,
+ 13099: 0x9E4F,
+ 13100: 0x6367,
+ 13101: 0x78B0,
+ 13102: 0x576F,
+ 13103: 0x7812,
+ 13104: 0x9739,
+ 13105: 0x6279,
+ 13106: 0x62AB,
+ 13107: 0x5288,
+ 13108: 0x7435,
+ 13109: 0x6BD7,
+ 13110: 0x826A,
+ 13111: 0x826B,
+ 13112: 0x826C,
+ 13113: 0x826D,
+ 13114: 0x8271,
+ 13115: 0x8275,
+ 13116: 0x8276,
+ 13117: 0x8277,
+ 13118: 0x8278,
+ 13119: 0x827B,
+ 13120: 0x827C,
+ 13121: 0x8280,
+ 13122: 0x8281,
+ 13123: 0x8283,
+ 13124: 0x8285,
+ 13125: 0x8286,
+ 13126: 0x8287,
+ 13127: 0x8289,
+ 13128: 0x828C,
+ 13129: 0x8290,
+ 13130: 0x8293,
+ 13131: 0x8294,
+ 13132: 0x8295,
+ 13133: 0x8296,
+ 13134: 0x829A,
+ 13135: 0x829B,
+ 13136: 0x829E,
+ 13137: 0x82A0,
+ 13138: 0x82A2,
+ 13139: 0x82A3,
+ 13140: 0x82A7,
+ 13141: 0x82B2,
+ 13142: 0x82B5,
+ 13143: 0x82B6,
+ 13144: 0x82BA,
+ 13145: 0x82BB,
+ 13146: 0x82BC,
+ 13147: 0x82BF,
+ 13148: 0x82C0,
+ 13149: 0x82C2,
+ 13150: 0x82C3,
+ 13151: 0x82C5,
+ 13152: 0x82C6,
+ 13153: 0x82C9,
+ 13154: 0x82D0,
+ 13155: 0x82D6,
+ 13156: 0x82D9,
+ 13157: 0x82DA,
+ 13158: 0x82DD,
+ 13159: 0x82E2,
+ 13160: 0x82E7,
+ 13161: 0x82E8,
+ 13162: 0x82E9,
+ 13163: 0x82EA,
+ 13164: 0x82EC,
+ 13165: 0x82ED,
+ 13166: 0x82EE,
+ 13167: 0x82F0,
+ 13168: 0x82F2,
+ 13169: 0x82F3,
+ 13170: 0x82F5,
+ 13171: 0x82F6,
+ 13172: 0x82F8,
+ 13173: 0x82FA,
+ 13174: 0x82FC,
+ 13175: 0x82FD,
+ 13176: 0x82FE,
+ 13177: 0x82FF,
+ 13178: 0x8300,
+ 13179: 0x830A,
+ 13180: 0x830B,
+ 13181: 0x830D,
+ 13182: 0x8310,
+ 13183: 0x8312,
+ 13184: 0x8313,
+ 13185: 0x8316,
+ 13186: 0x8318,
+ 13187: 0x8319,
+ 13188: 0x831D,
+ 13189: 0x831E,
+ 13190: 0x831F,
+ 13191: 0x8320,
+ 13192: 0x8321,
+ 13193: 0x8322,
+ 13194: 0x8323,
+ 13195: 0x8324,
+ 13196: 0x8325,
+ 13197: 0x8326,
+ 13198: 0x8329,
+ 13199: 0x832A,
+ 13200: 0x832E,
+ 13201: 0x8330,
+ 13202: 0x8332,
+ 13203: 0x8337,
+ 13204: 0x833B,
+ 13205: 0x833D,
+ 13206: 0x5564,
+ 13207: 0x813E,
+ 13208: 0x75B2,
+ 13209: 0x76AE,
+ 13210: 0x5339,
+ 13211: 0x75DE,
+ 13212: 0x50FB,
+ 13213: 0x5C41,
+ 13214: 0x8B6C,
+ 13215: 0x7BC7,
+ 13216: 0x504F,
+ 13217: 0x7247,
+ 13218: 0x9A97,
+ 13219: 0x98D8,
+ 13220: 0x6F02,
+ 13221: 0x74E2,
+ 13222: 0x7968,
+ 13223: 0x6487,
+ 13224: 0x77A5,
+ 13225: 0x62FC,
+ 13226: 0x9891,
+ 13227: 0x8D2B,
+ 13228: 0x54C1,
+ 13229: 0x8058,
+ 13230: 0x4E52,
+ 13231: 0x576A,
+ 13232: 0x82F9,
+ 13233: 0x840D,
+ 13234: 0x5E73,
+ 13235: 0x51ED,
+ 13236: 0x74F6,
+ 13237: 0x8BC4,
+ 13238: 0x5C4F,
+ 13239: 0x5761,
+ 13240: 0x6CFC,
+ 13241: 0x9887,
+ 13242: 0x5A46,
+ 13243: 0x7834,
+ 13244: 0x9B44,
+ 13245: 0x8FEB,
+ 13246: 0x7C95,
+ 13247: 0x5256,
+ 13248: 0x6251,
+ 13249: 0x94FA,
+ 13250: 0x4EC6,
+ 13251: 0x8386,
+ 13252: 0x8461,
+ 13253: 0x83E9,
+ 13254: 0x84B2,
+ 13255: 0x57D4,
+ 13256: 0x6734,
+ 13257: 0x5703,
+ 13258: 0x666E,
+ 13259: 0x6D66,
+ 13260: 0x8C31,
+ 13261: 0x66DD,
+ 13262: 0x7011,
+ 13263: 0x671F,
+ 13264: 0x6B3A,
+ 13265: 0x6816,
+ 13266: 0x621A,
+ 13267: 0x59BB,
+ 13268: 0x4E03,
+ 13269: 0x51C4,
+ 13270: 0x6F06,
+ 13271: 0x67D2,
+ 13272: 0x6C8F,
+ 13273: 0x5176,
+ 13274: 0x68CB,
+ 13275: 0x5947,
+ 13276: 0x6B67,
+ 13277: 0x7566,
+ 13278: 0x5D0E,
+ 13279: 0x8110,
+ 13280: 0x9F50,
+ 13281: 0x65D7,
+ 13282: 0x7948,
+ 13283: 0x7941,
+ 13284: 0x9A91,
+ 13285: 0x8D77,
+ 13286: 0x5C82,
+ 13287: 0x4E5E,
+ 13288: 0x4F01,
+ 13289: 0x542F,
+ 13290: 0x5951,
+ 13291: 0x780C,
+ 13292: 0x5668,
+ 13293: 0x6C14,
+ 13294: 0x8FC4,
+ 13295: 0x5F03,
+ 13296: 0x6C7D,
+ 13297: 0x6CE3,
+ 13298: 0x8BAB,
+ 13299: 0x6390,
+ 13300: 0x833E,
+ 13301: 0x833F,
+ 13302: 0x8341,
+ 13303: 0x8342,
+ 13304: 0x8344,
+ 13305: 0x8345,
+ 13306: 0x8348,
+ 13307: 0x834A,
+ 13308: 0x834B,
+ 13309: 0x834C,
+ 13310: 0x834D,
+ 13311: 0x834E,
+ 13312: 0x8353,
+ 13313: 0x8355,
+ 13314: 0x8356,
+ 13315: 0x8357,
+ 13316: 0x8358,
+ 13317: 0x8359,
+ 13318: 0x835D,
+ 13319: 0x8362,
+ 13320: 0x8370,
+ 13321: 0x8371,
+ 13322: 0x8372,
+ 13323: 0x8373,
+ 13324: 0x8374,
+ 13325: 0x8375,
+ 13326: 0x8376,
+ 13327: 0x8379,
+ 13328: 0x837A,
+ 13329: 0x837E,
+ 13330: 0x837F,
+ 13331: 0x8380,
+ 13332: 0x8381,
+ 13333: 0x8382,
+ 13334: 0x8383,
+ 13335: 0x8384,
+ 13336: 0x8387,
+ 13337: 0x8388,
+ 13338: 0x838A,
+ 13339: 0x838B,
+ 13340: 0x838C,
+ 13341: 0x838D,
+ 13342: 0x838F,
+ 13343: 0x8390,
+ 13344: 0x8391,
+ 13345: 0x8394,
+ 13346: 0x8395,
+ 13347: 0x8396,
+ 13348: 0x8397,
+ 13349: 0x8399,
+ 13350: 0x839A,
+ 13351: 0x839D,
+ 13352: 0x839F,
+ 13353: 0x83A1,
+ 13354: 0x83A2,
+ 13355: 0x83A3,
+ 13356: 0x83A4,
+ 13357: 0x83A5,
+ 13358: 0x83A6,
+ 13359: 0x83A7,
+ 13360: 0x83AC,
+ 13361: 0x83AD,
+ 13362: 0x83AE,
+ 13363: 0x83AF,
+ 13364: 0x83B5,
+ 13365: 0x83BB,
+ 13366: 0x83BE,
+ 13367: 0x83BF,
+ 13368: 0x83C2,
+ 13369: 0x83C3,
+ 13370: 0x83C4,
+ 13371: 0x83C6,
+ 13372: 0x83C8,
+ 13373: 0x83C9,
+ 13374: 0x83CB,
+ 13375: 0x83CD,
+ 13376: 0x83CE,
+ 13377: 0x83D0,
+ 13378: 0x83D1,
+ 13379: 0x83D2,
+ 13380: 0x83D3,
+ 13381: 0x83D5,
+ 13382: 0x83D7,
+ 13383: 0x83D9,
+ 13384: 0x83DA,
+ 13385: 0x83DB,
+ 13386: 0x83DE,
+ 13387: 0x83E2,
+ 13388: 0x83E3,
+ 13389: 0x83E4,
+ 13390: 0x83E6,
+ 13391: 0x83E7,
+ 13392: 0x83E8,
+ 13393: 0x83EB,
+ 13394: 0x83EC,
+ 13395: 0x83ED,
+ 13396: 0x6070,
+ 13397: 0x6D3D,
+ 13398: 0x7275,
+ 13399: 0x6266,
+ 13400: 0x948E,
+ 13401: 0x94C5,
+ 13402: 0x5343,
+ 13403: 0x8FC1,
+ 13404: 0x7B7E,
+ 13405: 0x4EDF,
+ 13406: 0x8C26,
+ 13407: 0x4E7E,
+ 13408: 0x9ED4,
+ 13409: 0x94B1,
+ 13410: 0x94B3,
+ 13411: 0x524D,
+ 13412: 0x6F5C,
+ 13413: 0x9063,
+ 13414: 0x6D45,
+ 13415: 0x8C34,
+ 13416: 0x5811,
+ 13417: 0x5D4C,
+ 13418: 0x6B20,
+ 13419: 0x6B49,
+ 13420: 0x67AA,
+ 13421: 0x545B,
+ 13422: 0x8154,
+ 13423: 0x7F8C,
+ 13424: 0x5899,
+ 13425: 0x8537,
+ 13426: 0x5F3A,
+ 13427: 0x62A2,
+ 13428: 0x6A47,
+ 13429: 0x9539,
+ 13430: 0x6572,
+ 13431: 0x6084,
+ 13432: 0x6865,
+ 13433: 0x77A7,
+ 13434: 0x4E54,
+ 13435: 0x4FA8,
+ 13436: 0x5DE7,
+ 13437: 0x9798,
+ 13438: 0x64AC,
+ 13439: 0x7FD8,
+ 13440: 0x5CED,
+ 13441: 0x4FCF,
+ 13442: 0x7A8D,
+ 13443: 0x5207,
+ 13444: 0x8304,
+ 13445: 0x4E14,
+ 13446: 0x602F,
+ 13447: 0x7A83,
+ 13448: 0x94A6,
+ 13449: 0x4FB5,
+ 13450: 0x4EB2,
+ 13451: 0x79E6,
+ 13452: 0x7434,
+ 13453: 0x52E4,
+ 13454: 0x82B9,
+ 13455: 0x64D2,
+ 13456: 0x79BD,
+ 13457: 0x5BDD,
+ 13458: 0x6C81,
+ 13459: 0x9752,
+ 13460: 0x8F7B,
+ 13461: 0x6C22,
+ 13462: 0x503E,
+ 13463: 0x537F,
+ 13464: 0x6E05,
+ 13465: 0x64CE,
+ 13466: 0x6674,
+ 13467: 0x6C30,
+ 13468: 0x60C5,
+ 13469: 0x9877,
+ 13470: 0x8BF7,
+ 13471: 0x5E86,
+ 13472: 0x743C,
+ 13473: 0x7A77,
+ 13474: 0x79CB,
+ 13475: 0x4E18,
+ 13476: 0x90B1,
+ 13477: 0x7403,
+ 13478: 0x6C42,
+ 13479: 0x56DA,
+ 13480: 0x914B,
+ 13481: 0x6CC5,
+ 13482: 0x8D8B,
+ 13483: 0x533A,
+ 13484: 0x86C6,
+ 13485: 0x66F2,
+ 13486: 0x8EAF,
+ 13487: 0x5C48,
+ 13488: 0x9A71,
+ 13489: 0x6E20,
+ 13490: 0x83EE,
+ 13491: 0x83EF,
+ 13492: 0x83F3,
+ 13493: 0x83F4,
+ 13494: 0x83F5,
+ 13495: 0x83F6,
+ 13496: 0x83F7,
+ 13497: 0x83FA,
+ 13498: 0x83FB,
+ 13499: 0x83FC,
+ 13500: 0x83FE,
+ 13501: 0x83FF,
+ 13502: 0x8400,
+ 13503: 0x8402,
+ 13504: 0x8405,
+ 13505: 0x8407,
+ 13506: 0x8408,
+ 13507: 0x8409,
+ 13508: 0x840A,
+ 13509: 0x8410,
+ 13510: 0x8412,
+ 13511: 0x8413,
+ 13512: 0x8414,
+ 13513: 0x8415,
+ 13514: 0x8416,
+ 13515: 0x8417,
+ 13516: 0x8419,
+ 13517: 0x841A,
+ 13518: 0x841B,
+ 13519: 0x841E,
+ 13520: 0x841F,
+ 13521: 0x8420,
+ 13522: 0x8421,
+ 13523: 0x8422,
+ 13524: 0x8423,
+ 13525: 0x8429,
+ 13526: 0x842A,
+ 13527: 0x842B,
+ 13528: 0x842C,
+ 13529: 0x842D,
+ 13530: 0x842E,
+ 13531: 0x842F,
+ 13532: 0x8430,
+ 13533: 0x8432,
+ 13534: 0x8433,
+ 13535: 0x8434,
+ 13536: 0x8435,
+ 13537: 0x8436,
+ 13538: 0x8437,
+ 13539: 0x8439,
+ 13540: 0x843A,
+ 13541: 0x843B,
+ 13542: 0x843E,
+ 13543: 0x843F,
+ 13544: 0x8440,
+ 13545: 0x8441,
+ 13546: 0x8442,
+ 13547: 0x8443,
+ 13548: 0x8444,
+ 13549: 0x8445,
+ 13550: 0x8447,
+ 13551: 0x8448,
+ 13552: 0x8449,
+ 13553: 0x844A,
+ 13554: 0x844B,
+ 13555: 0x844C,
+ 13556: 0x844D,
+ 13557: 0x844E,
+ 13558: 0x844F,
+ 13559: 0x8450,
+ 13560: 0x8452,
+ 13561: 0x8453,
+ 13562: 0x8454,
+ 13563: 0x8455,
+ 13564: 0x8456,
+ 13565: 0x8458,
+ 13566: 0x845D,
+ 13567: 0x845E,
+ 13568: 0x845F,
+ 13569: 0x8460,
+ 13570: 0x8462,
+ 13571: 0x8464,
+ 13572: 0x8465,
+ 13573: 0x8466,
+ 13574: 0x8467,
+ 13575: 0x8468,
+ 13576: 0x846A,
+ 13577: 0x846E,
+ 13578: 0x846F,
+ 13579: 0x8470,
+ 13580: 0x8472,
+ 13581: 0x8474,
+ 13582: 0x8477,
+ 13583: 0x8479,
+ 13584: 0x847B,
+ 13585: 0x847C,
+ 13586: 0x53D6,
+ 13587: 0x5A36,
+ 13588: 0x9F8B,
+ 13589: 0x8DA3,
+ 13590: 0x53BB,
+ 13591: 0x5708,
+ 13592: 0x98A7,
+ 13593: 0x6743,
+ 13594: 0x919B,
+ 13595: 0x6CC9,
+ 13596: 0x5168,
+ 13597: 0x75CA,
+ 13598: 0x62F3,
+ 13599: 0x72AC,
+ 13600: 0x5238,
+ 13601: 0x529D,
+ 13602: 0x7F3A,
+ 13603: 0x7094,
+ 13604: 0x7638,
+ 13605: 0x5374,
+ 13606: 0x9E4A,
+ 13607: 0x69B7,
+ 13608: 0x786E,
+ 13609: 0x96C0,
+ 13610: 0x88D9,
+ 13611: 0x7FA4,
+ 13612: 0x7136,
+ 13613: 0x71C3,
+ 13614: 0x5189,
+ 13615: 0x67D3,
+ 13616: 0x74E4,
+ 13617: 0x58E4,
+ 13618: 0x6518,
+ 13619: 0x56B7,
+ 13620: 0x8BA9,
+ 13621: 0x9976,
+ 13622: 0x6270,
+ 13623: 0x7ED5,
+ 13624: 0x60F9,
+ 13625: 0x70ED,
+ 13626: 0x58EC,
+ 13627: 0x4EC1,
+ 13628: 0x4EBA,
+ 13629: 0x5FCD,
+ 13630: 0x97E7,
+ 13631: 0x4EFB,
+ 13632: 0x8BA4,
+ 13633: 0x5203,
+ 13634: 0x598A,
+ 13635: 0x7EAB,
+ 13636: 0x6254,
+ 13637: 0x4ECD,
+ 13638: 0x65E5,
+ 13639: 0x620E,
+ 13640: 0x8338,
+ 13641: 0x84C9,
+ 13642: 0x8363,
+ 13643: 0x878D,
+ 13644: 0x7194,
+ 13645: 0x6EB6,
+ 13646: 0x5BB9,
+ 13647: 0x7ED2,
+ 13648: 0x5197,
+ 13649: 0x63C9,
+ 13650: 0x67D4,
+ 13651: 0x8089,
+ 13652: 0x8339,
+ 13653: 0x8815,
+ 13654: 0x5112,
+ 13655: 0x5B7A,
+ 13656: 0x5982,
+ 13657: 0x8FB1,
+ 13658: 0x4E73,
+ 13659: 0x6C5D,
+ 13660: 0x5165,
+ 13661: 0x8925,
+ 13662: 0x8F6F,
+ 13663: 0x962E,
+ 13664: 0x854A,
+ 13665: 0x745E,
+ 13666: 0x9510,
+ 13667: 0x95F0,
+ 13668: 0x6DA6,
+ 13669: 0x82E5,
+ 13670: 0x5F31,
+ 13671: 0x6492,
+ 13672: 0x6D12,
+ 13673: 0x8428,
+ 13674: 0x816E,
+ 13675: 0x9CC3,
+ 13676: 0x585E,
+ 13677: 0x8D5B,
+ 13678: 0x4E09,
+ 13679: 0x53C1,
+ 13680: 0x847D,
+ 13681: 0x847E,
+ 13682: 0x847F,
+ 13683: 0x8480,
+ 13684: 0x8481,
+ 13685: 0x8483,
+ 13686: 0x8484,
+ 13687: 0x8485,
+ 13688: 0x8486,
+ 13689: 0x848A,
+ 13690: 0x848D,
+ 13691: 0x848F,
+ 13692: 0x8490,
+ 13693: 0x8491,
+ 13694: 0x8492,
+ 13695: 0x8493,
+ 13696: 0x8494,
+ 13697: 0x8495,
+ 13698: 0x8496,
+ 13699: 0x8498,
+ 13700: 0x849A,
+ 13701: 0x849B,
+ 13702: 0x849D,
+ 13703: 0x849E,
+ 13704: 0x849F,
+ 13705: 0x84A0,
+ 13706: 0x84A2,
+ 13707: 0x84A3,
+ 13708: 0x84A4,
+ 13709: 0x84A5,
+ 13710: 0x84A6,
+ 13711: 0x84A7,
+ 13712: 0x84A8,
+ 13713: 0x84A9,
+ 13714: 0x84AA,
+ 13715: 0x84AB,
+ 13716: 0x84AC,
+ 13717: 0x84AD,
+ 13718: 0x84AE,
+ 13719: 0x84B0,
+ 13720: 0x84B1,
+ 13721: 0x84B3,
+ 13722: 0x84B5,
+ 13723: 0x84B6,
+ 13724: 0x84B7,
+ 13725: 0x84BB,
+ 13726: 0x84BC,
+ 13727: 0x84BE,
+ 13728: 0x84C0,
+ 13729: 0x84C2,
+ 13730: 0x84C3,
+ 13731: 0x84C5,
+ 13732: 0x84C6,
+ 13733: 0x84C7,
+ 13734: 0x84C8,
+ 13735: 0x84CB,
+ 13736: 0x84CC,
+ 13737: 0x84CE,
+ 13738: 0x84CF,
+ 13739: 0x84D2,
+ 13740: 0x84D4,
+ 13741: 0x84D5,
+ 13742: 0x84D7,
+ 13743: 0x84D8,
+ 13744: 0x84D9,
+ 13745: 0x84DA,
+ 13746: 0x84DB,
+ 13747: 0x84DC,
+ 13748: 0x84DE,
+ 13749: 0x84E1,
+ 13750: 0x84E2,
+ 13751: 0x84E4,
+ 13752: 0x84E7,
+ 13753: 0x84E8,
+ 13754: 0x84E9,
+ 13755: 0x84EA,
+ 13756: 0x84EB,
+ 13757: 0x84ED,
+ 13758: 0x84EE,
+ 13759: 0x84EF,
+ 13760: 0x84F1,
+ 13761: 0x84F2,
+ 13762: 0x84F3,
+ 13763: 0x84F4,
+ 13764: 0x84F5,
+ 13765: 0x84F6,
+ 13766: 0x84F7,
+ 13767: 0x84F8,
+ 13768: 0x84F9,
+ 13769: 0x84FA,
+ 13770: 0x84FB,
+ 13771: 0x84FD,
+ 13772: 0x84FE,
+ 13773: 0x8500,
+ 13774: 0x8501,
+ 13775: 0x8502,
+ 13776: 0x4F1E,
+ 13777: 0x6563,
+ 13778: 0x6851,
+ 13779: 0x55D3,
+ 13780: 0x4E27,
+ 13781: 0x6414,
+ 13782: 0x9A9A,
+ 13783: 0x626B,
+ 13784: 0x5AC2,
+ 13785: 0x745F,
+ 13786: 0x8272,
+ 13787: 0x6DA9,
+ 13788: 0x68EE,
+ 13789: 0x50E7,
+ 13790: 0x838E,
+ 13791: 0x7802,
+ 13792: 0x6740,
+ 13793: 0x5239,
+ 13794: 0x6C99,
+ 13795: 0x7EB1,
+ 13796: 0x50BB,
+ 13797: 0x5565,
+ 13798: 0x715E,
+ 13799: 0x7B5B,
+ 13800: 0x6652,
+ 13801: 0x73CA,
+ 13802: 0x82EB,
+ 13803: 0x6749,
+ 13804: 0x5C71,
+ 13805: 0x5220,
+ 13806: 0x717D,
+ 13807: 0x886B,
+ 13808: 0x95EA,
+ 13809: 0x9655,
+ 13810: 0x64C5,
+ 13811: 0x8D61,
+ 13812: 0x81B3,
+ 13813: 0x5584,
+ 13814: 0x6C55,
+ 13815: 0x6247,
+ 13816: 0x7F2E,
+ 13817: 0x5892,
+ 13818: 0x4F24,
+ 13819: 0x5546,
+ 13820: 0x8D4F,
+ 13821: 0x664C,
+ 13822: 0x4E0A,
+ 13823: 0x5C1A,
+ 13824: 0x88F3,
+ 13825: 0x68A2,
+ 13826: 0x634E,
+ 13827: 0x7A0D,
+ 13828: 0x70E7,
+ 13829: 0x828D,
+ 13830: 0x52FA,
+ 13831: 0x97F6,
+ 13832: 0x5C11,
+ 13833: 0x54E8,
+ 13834: 0x90B5,
+ 13835: 0x7ECD,
+ 13836: 0x5962,
+ 13837: 0x8D4A,
+ 13838: 0x86C7,
+ 13839: 0x820C,
+ 13840: 0x820D,
+ 13841: 0x8D66,
+ 13842: 0x6444,
+ 13843: 0x5C04,
+ 13844: 0x6151,
+ 13845: 0x6D89,
+ 13846: 0x793E,
+ 13847: 0x8BBE,
+ 13848: 0x7837,
+ 13849: 0x7533,
+ 13850: 0x547B,
+ 13851: 0x4F38,
+ 13852: 0x8EAB,
+ 13853: 0x6DF1,
+ 13854: 0x5A20,
+ 13855: 0x7EC5,
+ 13856: 0x795E,
+ 13857: 0x6C88,
+ 13858: 0x5BA1,
+ 13859: 0x5A76,
+ 13860: 0x751A,
+ 13861: 0x80BE,
+ 13862: 0x614E,
+ 13863: 0x6E17,
+ 13864: 0x58F0,
+ 13865: 0x751F,
+ 13866: 0x7525,
+ 13867: 0x7272,
+ 13868: 0x5347,
+ 13869: 0x7EF3,
+ 13870: 0x8503,
+ 13871: 0x8504,
+ 13872: 0x8505,
+ 13873: 0x8506,
+ 13874: 0x8507,
+ 13875: 0x8508,
+ 13876: 0x8509,
+ 13877: 0x850A,
+ 13878: 0x850B,
+ 13879: 0x850D,
+ 13880: 0x850E,
+ 13881: 0x850F,
+ 13882: 0x8510,
+ 13883: 0x8512,
+ 13884: 0x8514,
+ 13885: 0x8515,
+ 13886: 0x8516,
+ 13887: 0x8518,
+ 13888: 0x8519,
+ 13889: 0x851B,
+ 13890: 0x851C,
+ 13891: 0x851D,
+ 13892: 0x851E,
+ 13893: 0x8520,
+ 13894: 0x8522,
+ 13895: 0x8523,
+ 13896: 0x8524,
+ 13897: 0x8525,
+ 13898: 0x8526,
+ 13899: 0x8527,
+ 13900: 0x8528,
+ 13901: 0x8529,
+ 13902: 0x852A,
+ 13903: 0x852D,
+ 13904: 0x852E,
+ 13905: 0x852F,
+ 13906: 0x8530,
+ 13907: 0x8531,
+ 13908: 0x8532,
+ 13909: 0x8533,
+ 13910: 0x8534,
+ 13911: 0x8535,
+ 13912: 0x8536,
+ 13913: 0x853E,
+ 13914: 0x853F,
+ 13915: 0x8540,
+ 13916: 0x8541,
+ 13917: 0x8542,
+ 13918: 0x8544,
+ 13919: 0x8545,
+ 13920: 0x8546,
+ 13921: 0x8547,
+ 13922: 0x854B,
+ 13923: 0x854C,
+ 13924: 0x854D,
+ 13925: 0x854E,
+ 13926: 0x854F,
+ 13927: 0x8550,
+ 13928: 0x8551,
+ 13929: 0x8552,
+ 13930: 0x8553,
+ 13931: 0x8554,
+ 13932: 0x8555,
+ 13933: 0x8557,
+ 13934: 0x8558,
+ 13935: 0x855A,
+ 13936: 0x855B,
+ 13937: 0x855C,
+ 13938: 0x855D,
+ 13939: 0x855F,
+ 13940: 0x8560,
+ 13941: 0x8561,
+ 13942: 0x8562,
+ 13943: 0x8563,
+ 13944: 0x8565,
+ 13945: 0x8566,
+ 13946: 0x8567,
+ 13947: 0x8569,
+ 13948: 0x856A,
+ 13949: 0x856B,
+ 13950: 0x856C,
+ 13951: 0x856D,
+ 13952: 0x856E,
+ 13953: 0x856F,
+ 13954: 0x8570,
+ 13955: 0x8571,
+ 13956: 0x8573,
+ 13957: 0x8575,
+ 13958: 0x8576,
+ 13959: 0x8577,
+ 13960: 0x8578,
+ 13961: 0x857C,
+ 13962: 0x857D,
+ 13963: 0x857F,
+ 13964: 0x8580,
+ 13965: 0x8581,
+ 13966: 0x7701,
+ 13967: 0x76DB,
+ 13968: 0x5269,
+ 13969: 0x80DC,
+ 13970: 0x5723,
+ 13971: 0x5E08,
+ 13972: 0x5931,
+ 13973: 0x72EE,
+ 13974: 0x65BD,
+ 13975: 0x6E7F,
+ 13976: 0x8BD7,
+ 13977: 0x5C38,
+ 13978: 0x8671,
+ 13979: 0x5341,
+ 13980: 0x77F3,
+ 13981: 0x62FE,
+ 13982: 0x65F6,
+ 13983: 0x4EC0,
+ 13984: 0x98DF,
+ 13985: 0x8680,
+ 13986: 0x5B9E,
+ 13987: 0x8BC6,
+ 13988: 0x53F2,
+ 13989: 0x77E2,
+ 13990: 0x4F7F,
+ 13991: 0x5C4E,
+ 13992: 0x9A76,
+ 13993: 0x59CB,
+ 13994: 0x5F0F,
+ 13995: 0x793A,
+ 13996: 0x58EB,
+ 13997: 0x4E16,
+ 13998: 0x67FF,
+ 13999: 0x4E8B,
+ 14000: 0x62ED,
+ 14001: 0x8A93,
+ 14002: 0x901D,
+ 14003: 0x52BF,
+ 14004: 0x662F,
+ 14005: 0x55DC,
+ 14006: 0x566C,
+ 14007: 0x9002,
+ 14008: 0x4ED5,
+ 14009: 0x4F8D,
+ 14010: 0x91CA,
+ 14011: 0x9970,
+ 14012: 0x6C0F,
+ 14013: 0x5E02,
+ 14014: 0x6043,
+ 14015: 0x5BA4,
+ 14016: 0x89C6,
+ 14017: 0x8BD5,
+ 14018: 0x6536,
+ 14019: 0x624B,
+ 14020: 0x9996,
+ 14021: 0x5B88,
+ 14022: 0x5BFF,
+ 14023: 0x6388,
+ 14024: 0x552E,
+ 14025: 0x53D7,
+ 14026: 0x7626,
+ 14027: 0x517D,
+ 14028: 0x852C,
+ 14029: 0x67A2,
+ 14030: 0x68B3,
+ 14031: 0x6B8A,
+ 14032: 0x6292,
+ 14033: 0x8F93,
+ 14034: 0x53D4,
+ 14035: 0x8212,
+ 14036: 0x6DD1,
+ 14037: 0x758F,
+ 14038: 0x4E66,
+ 14039: 0x8D4E,
+ 14040: 0x5B70,
+ 14041: 0x719F,
+ 14042: 0x85AF,
+ 14043: 0x6691,
+ 14044: 0x66D9,
+ 14045: 0x7F72,
+ 14046: 0x8700,
+ 14047: 0x9ECD,
+ 14048: 0x9F20,
+ 14049: 0x5C5E,
+ 14050: 0x672F,
+ 14051: 0x8FF0,
+ 14052: 0x6811,
+ 14053: 0x675F,
+ 14054: 0x620D,
+ 14055: 0x7AD6,
+ 14056: 0x5885,
+ 14057: 0x5EB6,
+ 14058: 0x6570,
+ 14059: 0x6F31,
+ 14060: 0x8582,
+ 14061: 0x8583,
+ 14062: 0x8586,
+ 14063: 0x8588,
+ 14064: 0x8589,
+ 14065: 0x858A,
+ 14066: 0x858B,
+ 14067: 0x858C,
+ 14068: 0x858D,
+ 14069: 0x858E,
+ 14070: 0x8590,
+ 14071: 0x8591,
+ 14072: 0x8592,
+ 14073: 0x8593,
+ 14074: 0x8594,
+ 14075: 0x8595,
+ 14076: 0x8596,
+ 14077: 0x8597,
+ 14078: 0x8598,
+ 14079: 0x8599,
+ 14080: 0x859A,
+ 14081: 0x859D,
+ 14082: 0x859E,
+ 14083: 0x859F,
+ 14084: 0x85A0,
+ 14085: 0x85A1,
+ 14086: 0x85A2,
+ 14087: 0x85A3,
+ 14088: 0x85A5,
+ 14089: 0x85A6,
+ 14090: 0x85A7,
+ 14091: 0x85A9,
+ 14092: 0x85AB,
+ 14093: 0x85AC,
+ 14094: 0x85AD,
+ 14095: 0x85B1,
+ 14096: 0x85B2,
+ 14097: 0x85B3,
+ 14098: 0x85B4,
+ 14099: 0x85B5,
+ 14100: 0x85B6,
+ 14101: 0x85B8,
+ 14102: 0x85BA,
+ 14103: 0x85BB,
+ 14104: 0x85BC,
+ 14105: 0x85BD,
+ 14106: 0x85BE,
+ 14107: 0x85BF,
+ 14108: 0x85C0,
+ 14109: 0x85C2,
+ 14110: 0x85C3,
+ 14111: 0x85C4,
+ 14112: 0x85C5,
+ 14113: 0x85C6,
+ 14114: 0x85C7,
+ 14115: 0x85C8,
+ 14116: 0x85CA,
+ 14117: 0x85CB,
+ 14118: 0x85CC,
+ 14119: 0x85CD,
+ 14120: 0x85CE,
+ 14121: 0x85D1,
+ 14122: 0x85D2,
+ 14123: 0x85D4,
+ 14124: 0x85D6,
+ 14125: 0x85D7,
+ 14126: 0x85D8,
+ 14127: 0x85D9,
+ 14128: 0x85DA,
+ 14129: 0x85DB,
+ 14130: 0x85DD,
+ 14131: 0x85DE,
+ 14132: 0x85DF,
+ 14133: 0x85E0,
+ 14134: 0x85E1,
+ 14135: 0x85E2,
+ 14136: 0x85E3,
+ 14137: 0x85E5,
+ 14138: 0x85E6,
+ 14139: 0x85E7,
+ 14140: 0x85E8,
+ 14141: 0x85EA,
+ 14142: 0x85EB,
+ 14143: 0x85EC,
+ 14144: 0x85ED,
+ 14145: 0x85EE,
+ 14146: 0x85EF,
+ 14147: 0x85F0,
+ 14148: 0x85F1,
+ 14149: 0x85F2,
+ 14150: 0x85F3,
+ 14151: 0x85F4,
+ 14152: 0x85F5,
+ 14153: 0x85F6,
+ 14154: 0x85F7,
+ 14155: 0x85F8,
+ 14156: 0x6055,
+ 14157: 0x5237,
+ 14158: 0x800D,
+ 14159: 0x6454,
+ 14160: 0x8870,
+ 14161: 0x7529,
+ 14162: 0x5E05,
+ 14163: 0x6813,
+ 14164: 0x62F4,
+ 14165: 0x971C,
+ 14166: 0x53CC,
+ 14167: 0x723D,
+ 14168: 0x8C01,
+ 14169: 0x6C34,
+ 14170: 0x7761,
+ 14171: 0x7A0E,
+ 14172: 0x542E,
+ 14173: 0x77AC,
+ 14174: 0x987A,
+ 14175: 0x821C,
+ 14176: 0x8BF4,
+ 14177: 0x7855,
+ 14178: 0x6714,
+ 14179: 0x70C1,
+ 14180: 0x65AF,
+ 14181: 0x6495,
+ 14182: 0x5636,
+ 14183: 0x601D,
+ 14184: 0x79C1,
+ 14185: 0x53F8,
+ 14186: 0x4E1D,
+ 14187: 0x6B7B,
+ 14188: 0x8086,
+ 14189: 0x5BFA,
+ 14190: 0x55E3,
+ 14191: 0x56DB,
+ 14192: 0x4F3A,
+ 14193: 0x4F3C,
+ 14194: 0x9972,
+ 14195: 0x5DF3,
+ 14196: 0x677E,
+ 14197: 0x8038,
+ 14198: 0x6002,
+ 14199: 0x9882,
+ 14200: 0x9001,
+ 14201: 0x5B8B,
+ 14202: 0x8BBC,
+ 14203: 0x8BF5,
+ 14204: 0x641C,
+ 14205: 0x8258,
+ 14206: 0x64DE,
+ 14207: 0x55FD,
+ 14208: 0x82CF,
+ 14209: 0x9165,
+ 14210: 0x4FD7,
+ 14211: 0x7D20,
+ 14212: 0x901F,
+ 14213: 0x7C9F,
+ 14214: 0x50F3,
+ 14215: 0x5851,
+ 14216: 0x6EAF,
+ 14217: 0x5BBF,
+ 14218: 0x8BC9,
+ 14219: 0x8083,
+ 14220: 0x9178,
+ 14221: 0x849C,
+ 14222: 0x7B97,
+ 14223: 0x867D,
+ 14224: 0x968B,
+ 14225: 0x968F,
+ 14226: 0x7EE5,
+ 14227: 0x9AD3,
+ 14228: 0x788E,
+ 14229: 0x5C81,
+ 14230: 0x7A57,
+ 14231: 0x9042,
+ 14232: 0x96A7,
+ 14233: 0x795F,
+ 14234: 0x5B59,
+ 14235: 0x635F,
+ 14236: 0x7B0B,
+ 14237: 0x84D1,
+ 14238: 0x68AD,
+ 14239: 0x5506,
+ 14240: 0x7F29,
+ 14241: 0x7410,
+ 14242: 0x7D22,
+ 14243: 0x9501,
+ 14244: 0x6240,
+ 14245: 0x584C,
+ 14246: 0x4ED6,
+ 14247: 0x5B83,
+ 14248: 0x5979,
+ 14249: 0x5854,
+ 14250: 0x85F9,
+ 14251: 0x85FA,
+ 14252: 0x85FC,
+ 14253: 0x85FD,
+ 14254: 0x85FE,
+ 14255: 0x8600,
+ 14256: 0x8601,
+ 14257: 0x8602,
+ 14258: 0x8603,
+ 14259: 0x8604,
+ 14260: 0x8606,
+ 14261: 0x8607,
+ 14262: 0x8608,
+ 14263: 0x8609,
+ 14264: 0x860A,
+ 14265: 0x860B,
+ 14266: 0x860C,
+ 14267: 0x860D,
+ 14268: 0x860E,
+ 14269: 0x860F,
+ 14270: 0x8610,
+ 14271: 0x8612,
+ 14272: 0x8613,
+ 14273: 0x8614,
+ 14274: 0x8615,
+ 14275: 0x8617,
+ 14276: 0x8618,
+ 14277: 0x8619,
+ 14278: 0x861A,
+ 14279: 0x861B,
+ 14280: 0x861C,
+ 14281: 0x861D,
+ 14282: 0x861E,
+ 14283: 0x861F,
+ 14284: 0x8620,
+ 14285: 0x8621,
+ 14286: 0x8622,
+ 14287: 0x8623,
+ 14288: 0x8624,
+ 14289: 0x8625,
+ 14290: 0x8626,
+ 14291: 0x8628,
+ 14292: 0x862A,
+ 14293: 0x862B,
+ 14294: 0x862C,
+ 14295: 0x862D,
+ 14296: 0x862E,
+ 14297: 0x862F,
+ 14298: 0x8630,
+ 14299: 0x8631,
+ 14300: 0x8632,
+ 14301: 0x8633,
+ 14302: 0x8634,
+ 14303: 0x8635,
+ 14304: 0x8636,
+ 14305: 0x8637,
+ 14306: 0x8639,
+ 14307: 0x863A,
+ 14308: 0x863B,
+ 14309: 0x863D,
+ 14310: 0x863E,
+ 14311: 0x863F,
+ 14312: 0x8640,
+ 14313: 0x8641,
+ 14314: 0x8642,
+ 14315: 0x8643,
+ 14316: 0x8644,
+ 14317: 0x8645,
+ 14318: 0x8646,
+ 14319: 0x8647,
+ 14320: 0x8648,
+ 14321: 0x8649,
+ 14322: 0x864A,
+ 14323: 0x864B,
+ 14324: 0x864C,
+ 14325: 0x8652,
+ 14326: 0x8653,
+ 14327: 0x8655,
+ 14328: 0x8656,
+ 14329: 0x8657,
+ 14330: 0x8658,
+ 14331: 0x8659,
+ 14332: 0x865B,
+ 14333: 0x865C,
+ 14334: 0x865D,
+ 14335: 0x865F,
+ 14336: 0x8660,
+ 14337: 0x8661,
+ 14338: 0x8663,
+ 14339: 0x8664,
+ 14340: 0x8665,
+ 14341: 0x8666,
+ 14342: 0x8667,
+ 14343: 0x8668,
+ 14344: 0x8669,
+ 14345: 0x866A,
+ 14346: 0x736D,
+ 14347: 0x631E,
+ 14348: 0x8E4B,
+ 14349: 0x8E0F,
+ 14350: 0x80CE,
+ 14351: 0x82D4,
+ 14352: 0x62AC,
+ 14353: 0x53F0,
+ 14354: 0x6CF0,
+ 14355: 0x915E,
+ 14356: 0x592A,
+ 14357: 0x6001,
+ 14358: 0x6C70,
+ 14359: 0x574D,
+ 14360: 0x644A,
+ 14361: 0x8D2A,
+ 14362: 0x762B,
+ 14363: 0x6EE9,
+ 14364: 0x575B,
+ 14365: 0x6A80,
+ 14366: 0x75F0,
+ 14367: 0x6F6D,
+ 14368: 0x8C2D,
+ 14369: 0x8C08,
+ 14370: 0x5766,
+ 14371: 0x6BEF,
+ 14372: 0x8892,
+ 14373: 0x78B3,
+ 14374: 0x63A2,
+ 14375: 0x53F9,
+ 14376: 0x70AD,
+ 14377: 0x6C64,
+ 14378: 0x5858,
+ 14379: 0x642A,
+ 14380: 0x5802,
+ 14381: 0x68E0,
+ 14382: 0x819B,
+ 14383: 0x5510,
+ 14384: 0x7CD6,
+ 14385: 0x5018,
+ 14386: 0x8EBA,
+ 14387: 0x6DCC,
+ 14388: 0x8D9F,
+ 14389: 0x70EB,
+ 14390: 0x638F,
+ 14391: 0x6D9B,
+ 14392: 0x6ED4,
+ 14393: 0x7EE6,
+ 14394: 0x8404,
+ 14395: 0x6843,
+ 14396: 0x9003,
+ 14397: 0x6DD8,
+ 14398: 0x9676,
+ 14399: 0x8BA8,
+ 14400: 0x5957,
+ 14401: 0x7279,
+ 14402: 0x85E4,
+ 14403: 0x817E,
+ 14404: 0x75BC,
+ 14405: 0x8A8A,
+ 14406: 0x68AF,
+ 14407: 0x5254,
+ 14408: 0x8E22,
+ 14409: 0x9511,
+ 14410: 0x63D0,
+ 14411: 0x9898,
+ 14412: 0x8E44,
+ 14413: 0x557C,
+ 14414: 0x4F53,
+ 14415: 0x66FF,
+ 14416: 0x568F,
+ 14417: 0x60D5,
+ 14418: 0x6D95,
+ 14419: 0x5243,
+ 14420: 0x5C49,
+ 14421: 0x5929,
+ 14422: 0x6DFB,
+ 14423: 0x586B,
+ 14424: 0x7530,
+ 14425: 0x751C,
+ 14426: 0x606C,
+ 14427: 0x8214,
+ 14428: 0x8146,
+ 14429: 0x6311,
+ 14430: 0x6761,
+ 14431: 0x8FE2,
+ 14432: 0x773A,
+ 14433: 0x8DF3,
+ 14434: 0x8D34,
+ 14435: 0x94C1,
+ 14436: 0x5E16,
+ 14437: 0x5385,
+ 14438: 0x542C,
+ 14439: 0x70C3,
+ 14440: 0x866D,
+ 14441: 0x866F,
+ 14442: 0x8670,
+ 14443: 0x8672,
+ 14444: 0x8673,
+ 14445: 0x8674,
+ 14446: 0x8675,
+ 14447: 0x8676,
+ 14448: 0x8677,
+ 14449: 0x8678,
+ 14450: 0x8683,
+ 14451: 0x8684,
+ 14452: 0x8685,
+ 14453: 0x8686,
+ 14454: 0x8687,
+ 14455: 0x8688,
+ 14456: 0x8689,
+ 14457: 0x868E,
+ 14458: 0x868F,
+ 14459: 0x8690,
+ 14460: 0x8691,
+ 14461: 0x8692,
+ 14462: 0x8694,
+ 14463: 0x8696,
+ 14464: 0x8697,
+ 14465: 0x8698,
+ 14466: 0x8699,
+ 14467: 0x869A,
+ 14468: 0x869B,
+ 14469: 0x869E,
+ 14470: 0x869F,
+ 14471: 0x86A0,
+ 14472: 0x86A1,
+ 14473: 0x86A2,
+ 14474: 0x86A5,
+ 14475: 0x86A6,
+ 14476: 0x86AB,
+ 14477: 0x86AD,
+ 14478: 0x86AE,
+ 14479: 0x86B2,
+ 14480: 0x86B3,
+ 14481: 0x86B7,
+ 14482: 0x86B8,
+ 14483: 0x86B9,
+ 14484: 0x86BB,
+ 14485: 0x86BC,
+ 14486: 0x86BD,
+ 14487: 0x86BE,
+ 14488: 0x86BF,
+ 14489: 0x86C1,
+ 14490: 0x86C2,
+ 14491: 0x86C3,
+ 14492: 0x86C5,
+ 14493: 0x86C8,
+ 14494: 0x86CC,
+ 14495: 0x86CD,
+ 14496: 0x86D2,
+ 14497: 0x86D3,
+ 14498: 0x86D5,
+ 14499: 0x86D6,
+ 14500: 0x86D7,
+ 14501: 0x86DA,
+ 14502: 0x86DC,
+ 14503: 0x86DD,
+ 14504: 0x86E0,
+ 14505: 0x86E1,
+ 14506: 0x86E2,
+ 14507: 0x86E3,
+ 14508: 0x86E5,
+ 14509: 0x86E6,
+ 14510: 0x86E7,
+ 14511: 0x86E8,
+ 14512: 0x86EA,
+ 14513: 0x86EB,
+ 14514: 0x86EC,
+ 14515: 0x86EF,
+ 14516: 0x86F5,
+ 14517: 0x86F6,
+ 14518: 0x86F7,
+ 14519: 0x86FA,
+ 14520: 0x86FB,
+ 14521: 0x86FC,
+ 14522: 0x86FD,
+ 14523: 0x86FF,
+ 14524: 0x8701,
+ 14525: 0x8704,
+ 14526: 0x8705,
+ 14527: 0x8706,
+ 14528: 0x870B,
+ 14529: 0x870C,
+ 14530: 0x870E,
+ 14531: 0x870F,
+ 14532: 0x8710,
+ 14533: 0x8711,
+ 14534: 0x8714,
+ 14535: 0x8716,
+ 14536: 0x6C40,
+ 14537: 0x5EF7,
+ 14538: 0x505C,
+ 14539: 0x4EAD,
+ 14540: 0x5EAD,
+ 14541: 0x633A,
+ 14542: 0x8247,
+ 14543: 0x901A,
+ 14544: 0x6850,
+ 14545: 0x916E,
+ 14546: 0x77B3,
+ 14547: 0x540C,
+ 14548: 0x94DC,
+ 14549: 0x5F64,
+ 14550: 0x7AE5,
+ 14551: 0x6876,
+ 14552: 0x6345,
+ 14553: 0x7B52,
+ 14554: 0x7EDF,
+ 14555: 0x75DB,
+ 14556: 0x5077,
+ 14557: 0x6295,
+ 14558: 0x5934,
+ 14559: 0x900F,
+ 14560: 0x51F8,
+ 14561: 0x79C3,
+ 14562: 0x7A81,
+ 14563: 0x56FE,
+ 14564: 0x5F92,
+ 14565: 0x9014,
+ 14566: 0x6D82,
+ 14567: 0x5C60,
+ 14568: 0x571F,
+ 14569: 0x5410,
+ 14570: 0x5154,
+ 14571: 0x6E4D,
+ 14572: 0x56E2,
+ 14573: 0x63A8,
+ 14574: 0x9893,
+ 14575: 0x817F,
+ 14576: 0x8715,
+ 14577: 0x892A,
+ 14578: 0x9000,
+ 14579: 0x541E,
+ 14580: 0x5C6F,
+ 14581: 0x81C0,
+ 14582: 0x62D6,
+ 14583: 0x6258,
+ 14584: 0x8131,
+ 14585: 0x9E35,
+ 14586: 0x9640,
+ 14587: 0x9A6E,
+ 14588: 0x9A7C,
+ 14589: 0x692D,
+ 14590: 0x59A5,
+ 14591: 0x62D3,
+ 14592: 0x553E,
+ 14593: 0x6316,
+ 14594: 0x54C7,
+ 14595: 0x86D9,
+ 14596: 0x6D3C,
+ 14597: 0x5A03,
+ 14598: 0x74E6,
+ 14599: 0x889C,
+ 14600: 0x6B6A,
+ 14601: 0x5916,
+ 14602: 0x8C4C,
+ 14603: 0x5F2F,
+ 14604: 0x6E7E,
+ 14605: 0x73A9,
+ 14606: 0x987D,
+ 14607: 0x4E38,
+ 14608: 0x70F7,
+ 14609: 0x5B8C,
+ 14610: 0x7897,
+ 14611: 0x633D,
+ 14612: 0x665A,
+ 14613: 0x7696,
+ 14614: 0x60CB,
+ 14615: 0x5B9B,
+ 14616: 0x5A49,
+ 14617: 0x4E07,
+ 14618: 0x8155,
+ 14619: 0x6C6A,
+ 14620: 0x738B,
+ 14621: 0x4EA1,
+ 14622: 0x6789,
+ 14623: 0x7F51,
+ 14624: 0x5F80,
+ 14625: 0x65FA,
+ 14626: 0x671B,
+ 14627: 0x5FD8,
+ 14628: 0x5984,
+ 14629: 0x5A01,
+ 14630: 0x8719,
+ 14631: 0x871B,
+ 14632: 0x871D,
+ 14633: 0x871F,
+ 14634: 0x8720,
+ 14635: 0x8724,
+ 14636: 0x8726,
+ 14637: 0x8727,
+ 14638: 0x8728,
+ 14639: 0x872A,
+ 14640: 0x872B,
+ 14641: 0x872C,
+ 14642: 0x872D,
+ 14643: 0x872F,
+ 14644: 0x8730,
+ 14645: 0x8732,
+ 14646: 0x8733,
+ 14647: 0x8735,
+ 14648: 0x8736,
+ 14649: 0x8738,
+ 14650: 0x8739,
+ 14651: 0x873A,
+ 14652: 0x873C,
+ 14653: 0x873D,
+ 14654: 0x8740,
+ 14655: 0x8741,
+ 14656: 0x8742,
+ 14657: 0x8743,
+ 14658: 0x8744,
+ 14659: 0x8745,
+ 14660: 0x8746,
+ 14661: 0x874A,
+ 14662: 0x874B,
+ 14663: 0x874D,
+ 14664: 0x874F,
+ 14665: 0x8750,
+ 14666: 0x8751,
+ 14667: 0x8752,
+ 14668: 0x8754,
+ 14669: 0x8755,
+ 14670: 0x8756,
+ 14671: 0x8758,
+ 14672: 0x875A,
+ 14673: 0x875B,
+ 14674: 0x875C,
+ 14675: 0x875D,
+ 14676: 0x875E,
+ 14677: 0x875F,
+ 14678: 0x8761,
+ 14679: 0x8762,
+ 14680: 0x8766,
+ 14681: 0x8767,
+ 14682: 0x8768,
+ 14683: 0x8769,
+ 14684: 0x876A,
+ 14685: 0x876B,
+ 14686: 0x876C,
+ 14687: 0x876D,
+ 14688: 0x876F,
+ 14689: 0x8771,
+ 14690: 0x8772,
+ 14691: 0x8773,
+ 14692: 0x8775,
+ 14693: 0x8777,
+ 14694: 0x8778,
+ 14695: 0x8779,
+ 14696: 0x877A,
+ 14697: 0x877F,
+ 14698: 0x8780,
+ 14699: 0x8781,
+ 14700: 0x8784,
+ 14701: 0x8786,
+ 14702: 0x8787,
+ 14703: 0x8789,
+ 14704: 0x878A,
+ 14705: 0x878C,
+ 14706: 0x878E,
+ 14707: 0x878F,
+ 14708: 0x8790,
+ 14709: 0x8791,
+ 14710: 0x8792,
+ 14711: 0x8794,
+ 14712: 0x8795,
+ 14713: 0x8796,
+ 14714: 0x8798,
+ 14715: 0x8799,
+ 14716: 0x879A,
+ 14717: 0x879B,
+ 14718: 0x879C,
+ 14719: 0x879D,
+ 14720: 0x879E,
+ 14721: 0x87A0,
+ 14722: 0x87A1,
+ 14723: 0x87A2,
+ 14724: 0x87A3,
+ 14725: 0x87A4,
+ 14726: 0x5DCD,
+ 14727: 0x5FAE,
+ 14728: 0x5371,
+ 14729: 0x97E6,
+ 14730: 0x8FDD,
+ 14731: 0x6845,
+ 14732: 0x56F4,
+ 14733: 0x552F,
+ 14734: 0x60DF,
+ 14735: 0x4E3A,
+ 14736: 0x6F4D,
+ 14737: 0x7EF4,
+ 14738: 0x82C7,
+ 14739: 0x840E,
+ 14740: 0x59D4,
+ 14741: 0x4F1F,
+ 14742: 0x4F2A,
+ 14743: 0x5C3E,
+ 14744: 0x7EAC,
+ 14745: 0x672A,
+ 14746: 0x851A,
+ 14747: 0x5473,
+ 14748: 0x754F,
+ 14749: 0x80C3,
+ 14750: 0x5582,
+ 14751: 0x9B4F,
+ 14752: 0x4F4D,
+ 14753: 0x6E2D,
+ 14754: 0x8C13,
+ 14755: 0x5C09,
+ 14756: 0x6170,
+ 14757: 0x536B,
+ 14758: 0x761F,
+ 14759: 0x6E29,
+ 14760: 0x868A,
+ 14761: 0x6587,
+ 14762: 0x95FB,
+ 14763: 0x7EB9,
+ 14764: 0x543B,
+ 14765: 0x7A33,
+ 14766: 0x7D0A,
+ 14767: 0x95EE,
+ 14768: 0x55E1,
+ 14769: 0x7FC1,
+ 14770: 0x74EE,
+ 14771: 0x631D,
+ 14772: 0x8717,
+ 14773: 0x6DA1,
+ 14774: 0x7A9D,
+ 14775: 0x6211,
+ 14776: 0x65A1,
+ 14777: 0x5367,
+ 14778: 0x63E1,
+ 14779: 0x6C83,
+ 14780: 0x5DEB,
+ 14781: 0x545C,
+ 14782: 0x94A8,
+ 14783: 0x4E4C,
+ 14784: 0x6C61,
+ 14785: 0x8BEC,
+ 14786: 0x5C4B,
+ 14787: 0x65E0,
+ 14788: 0x829C,
+ 14789: 0x68A7,
+ 14790: 0x543E,
+ 14791: 0x5434,
+ 14792: 0x6BCB,
+ 14793: 0x6B66,
+ 14794: 0x4E94,
+ 14795: 0x6342,
+ 14796: 0x5348,
+ 14797: 0x821E,
+ 14798: 0x4F0D,
+ 14799: 0x4FAE,
+ 14800: 0x575E,
+ 14801: 0x620A,
+ 14802: 0x96FE,
+ 14803: 0x6664,
+ 14804: 0x7269,
+ 14805: 0x52FF,
+ 14806: 0x52A1,
+ 14807: 0x609F,
+ 14808: 0x8BEF,
+ 14809: 0x6614,
+ 14810: 0x7199,
+ 14811: 0x6790,
+ 14812: 0x897F,
+ 14813: 0x7852,
+ 14814: 0x77FD,
+ 14815: 0x6670,
+ 14816: 0x563B,
+ 14817: 0x5438,
+ 14818: 0x9521,
+ 14819: 0x727A,
+ 14820: 0x87A5,
+ 14821: 0x87A6,
+ 14822: 0x87A7,
+ 14823: 0x87A9,
+ 14824: 0x87AA,
+ 14825: 0x87AE,
+ 14826: 0x87B0,
+ 14827: 0x87B1,
+ 14828: 0x87B2,
+ 14829: 0x87B4,
+ 14830: 0x87B6,
+ 14831: 0x87B7,
+ 14832: 0x87B8,
+ 14833: 0x87B9,
+ 14834: 0x87BB,
+ 14835: 0x87BC,
+ 14836: 0x87BE,
+ 14837: 0x87BF,
+ 14838: 0x87C1,
+ 14839: 0x87C2,
+ 14840: 0x87C3,
+ 14841: 0x87C4,
+ 14842: 0x87C5,
+ 14843: 0x87C7,
+ 14844: 0x87C8,
+ 14845: 0x87C9,
+ 14846: 0x87CC,
+ 14847: 0x87CD,
+ 14848: 0x87CE,
+ 14849: 0x87CF,
+ 14850: 0x87D0,
+ 14851: 0x87D4,
+ 14852: 0x87D5,
+ 14853: 0x87D6,
+ 14854: 0x87D7,
+ 14855: 0x87D8,
+ 14856: 0x87D9,
+ 14857: 0x87DA,
+ 14858: 0x87DC,
+ 14859: 0x87DD,
+ 14860: 0x87DE,
+ 14861: 0x87DF,
+ 14862: 0x87E1,
+ 14863: 0x87E2,
+ 14864: 0x87E3,
+ 14865: 0x87E4,
+ 14866: 0x87E6,
+ 14867: 0x87E7,
+ 14868: 0x87E8,
+ 14869: 0x87E9,
+ 14870: 0x87EB,
+ 14871: 0x87EC,
+ 14872: 0x87ED,
+ 14873: 0x87EF,
+ 14874: 0x87F0,
+ 14875: 0x87F1,
+ 14876: 0x87F2,
+ 14877: 0x87F3,
+ 14878: 0x87F4,
+ 14879: 0x87F5,
+ 14880: 0x87F6,
+ 14881: 0x87F7,
+ 14882: 0x87F8,
+ 14883: 0x87FA,
+ 14884: 0x87FB,
+ 14885: 0x87FC,
+ 14886: 0x87FD,
+ 14887: 0x87FF,
+ 14888: 0x8800,
+ 14889: 0x8801,
+ 14890: 0x8802,
+ 14891: 0x8804,
+ 14892: 0x8805,
+ 14893: 0x8806,
+ 14894: 0x8807,
+ 14895: 0x8808,
+ 14896: 0x8809,
+ 14897: 0x880B,
+ 14898: 0x880C,
+ 14899: 0x880D,
+ 14900: 0x880E,
+ 14901: 0x880F,
+ 14902: 0x8810,
+ 14903: 0x8811,
+ 14904: 0x8812,
+ 14905: 0x8814,
+ 14906: 0x8817,
+ 14907: 0x8818,
+ 14908: 0x8819,
+ 14909: 0x881A,
+ 14910: 0x881C,
+ 14911: 0x881D,
+ 14912: 0x881E,
+ 14913: 0x881F,
+ 14914: 0x8820,
+ 14915: 0x8823,
+ 14916: 0x7A00,
+ 14917: 0x606F,
+ 14918: 0x5E0C,
+ 14919: 0x6089,
+ 14920: 0x819D,
+ 14921: 0x5915,
+ 14922: 0x60DC,
+ 14923: 0x7184,
+ 14924: 0x70EF,
+ 14925: 0x6EAA,
+ 14926: 0x6C50,
+ 14927: 0x7280,
+ 14928: 0x6A84,
+ 14929: 0x88AD,
+ 14930: 0x5E2D,
+ 14931: 0x4E60,
+ 14932: 0x5AB3,
+ 14933: 0x559C,
+ 14934: 0x94E3,
+ 14935: 0x6D17,
+ 14936: 0x7CFB,
+ 14937: 0x9699,
+ 14938: 0x620F,
+ 14939: 0x7EC6,
+ 14940: 0x778E,
+ 14941: 0x867E,
+ 14942: 0x5323,
+ 14943: 0x971E,
+ 14944: 0x8F96,
+ 14945: 0x6687,
+ 14946: 0x5CE1,
+ 14947: 0x4FA0,
+ 14948: 0x72ED,
+ 14949: 0x4E0B,
+ 14950: 0x53A6,
+ 14951: 0x590F,
+ 14952: 0x5413,
+ 14953: 0x6380,
+ 14954: 0x9528,
+ 14955: 0x5148,
+ 14956: 0x4ED9,
+ 14957: 0x9C9C,
+ 14958: 0x7EA4,
+ 14959: 0x54B8,
+ 14960: 0x8D24,
+ 14961: 0x8854,
+ 14962: 0x8237,
+ 14963: 0x95F2,
+ 14964: 0x6D8E,
+ 14965: 0x5F26,
+ 14966: 0x5ACC,
+ 14967: 0x663E,
+ 14968: 0x9669,
+ 14969: 0x73B0,
+ 14970: 0x732E,
+ 14971: 0x53BF,
+ 14972: 0x817A,
+ 14973: 0x9985,
+ 14974: 0x7FA1,
+ 14975: 0x5BAA,
+ 14976: 0x9677,
+ 14977: 0x9650,
+ 14978: 0x7EBF,
+ 14979: 0x76F8,
+ 14980: 0x53A2,
+ 14981: 0x9576,
+ 14982: 0x9999,
+ 14983: 0x7BB1,
+ 14984: 0x8944,
+ 14985: 0x6E58,
+ 14986: 0x4E61,
+ 14987: 0x7FD4,
+ 14988: 0x7965,
+ 14989: 0x8BE6,
+ 14990: 0x60F3,
+ 14991: 0x54CD,
+ 14992: 0x4EAB,
+ 14993: 0x9879,
+ 14994: 0x5DF7,
+ 14995: 0x6A61,
+ 14996: 0x50CF,
+ 14997: 0x5411,
+ 14998: 0x8C61,
+ 14999: 0x8427,
+ 15000: 0x785D,
+ 15001: 0x9704,
+ 15002: 0x524A,
+ 15003: 0x54EE,
+ 15004: 0x56A3,
+ 15005: 0x9500,
+ 15006: 0x6D88,
+ 15007: 0x5BB5,
+ 15008: 0x6DC6,
+ 15009: 0x6653,
+ 15010: 0x8824,
+ 15011: 0x8825,
+ 15012: 0x8826,
+ 15013: 0x8827,
+ 15014: 0x8828,
+ 15015: 0x8829,
+ 15016: 0x882A,
+ 15017: 0x882B,
+ 15018: 0x882C,
+ 15019: 0x882D,
+ 15020: 0x882E,
+ 15021: 0x882F,
+ 15022: 0x8830,
+ 15023: 0x8831,
+ 15024: 0x8833,
+ 15025: 0x8834,
+ 15026: 0x8835,
+ 15027: 0x8836,
+ 15028: 0x8837,
+ 15029: 0x8838,
+ 15030: 0x883A,
+ 15031: 0x883B,
+ 15032: 0x883D,
+ 15033: 0x883E,
+ 15034: 0x883F,
+ 15035: 0x8841,
+ 15036: 0x8842,
+ 15037: 0x8843,
+ 15038: 0x8846,
+ 15039: 0x8847,
+ 15040: 0x8848,
+ 15041: 0x8849,
+ 15042: 0x884A,
+ 15043: 0x884B,
+ 15044: 0x884E,
+ 15045: 0x884F,
+ 15046: 0x8850,
+ 15047: 0x8851,
+ 15048: 0x8852,
+ 15049: 0x8853,
+ 15050: 0x8855,
+ 15051: 0x8856,
+ 15052: 0x8858,
+ 15053: 0x885A,
+ 15054: 0x885B,
+ 15055: 0x885C,
+ 15056: 0x885D,
+ 15057: 0x885E,
+ 15058: 0x885F,
+ 15059: 0x8860,
+ 15060: 0x8866,
+ 15061: 0x8867,
+ 15062: 0x886A,
+ 15063: 0x886D,
+ 15064: 0x886F,
+ 15065: 0x8871,
+ 15066: 0x8873,
+ 15067: 0x8874,
+ 15068: 0x8875,
+ 15069: 0x8876,
+ 15070: 0x8878,
+ 15071: 0x8879,
+ 15072: 0x887A,
+ 15073: 0x887B,
+ 15074: 0x887C,
+ 15075: 0x8880,
+ 15076: 0x8883,
+ 15077: 0x8886,
+ 15078: 0x8887,
+ 15079: 0x8889,
+ 15080: 0x888A,
+ 15081: 0x888C,
+ 15082: 0x888E,
+ 15083: 0x888F,
+ 15084: 0x8890,
+ 15085: 0x8891,
+ 15086: 0x8893,
+ 15087: 0x8894,
+ 15088: 0x8895,
+ 15089: 0x8897,
+ 15090: 0x8898,
+ 15091: 0x8899,
+ 15092: 0x889A,
+ 15093: 0x889B,
+ 15094: 0x889D,
+ 15095: 0x889E,
+ 15096: 0x889F,
+ 15097: 0x88A0,
+ 15098: 0x88A1,
+ 15099: 0x88A3,
+ 15100: 0x88A5,
+ 15101: 0x88A6,
+ 15102: 0x88A7,
+ 15103: 0x88A8,
+ 15104: 0x88A9,
+ 15105: 0x88AA,
+ 15106: 0x5C0F,
+ 15107: 0x5B5D,
+ 15108: 0x6821,
+ 15109: 0x8096,
+ 15110: 0x5578,
+ 15111: 0x7B11,
+ 15112: 0x6548,
+ 15113: 0x6954,
+ 15114: 0x4E9B,
+ 15115: 0x6B47,
+ 15116: 0x874E,
+ 15117: 0x978B,
+ 15118: 0x534F,
+ 15119: 0x631F,
+ 15120: 0x643A,
+ 15121: 0x90AA,
+ 15122: 0x659C,
+ 15123: 0x80C1,
+ 15124: 0x8C10,
+ 15125: 0x5199,
+ 15126: 0x68B0,
+ 15127: 0x5378,
+ 15128: 0x87F9,
+ 15129: 0x61C8,
+ 15130: 0x6CC4,
+ 15131: 0x6CFB,
+ 15132: 0x8C22,
+ 15133: 0x5C51,
+ 15134: 0x85AA,
+ 15135: 0x82AF,
+ 15136: 0x950C,
+ 15137: 0x6B23,
+ 15138: 0x8F9B,
+ 15139: 0x65B0,
+ 15140: 0x5FFB,
+ 15141: 0x5FC3,
+ 15142: 0x4FE1,
+ 15143: 0x8845,
+ 15144: 0x661F,
+ 15145: 0x8165,
+ 15146: 0x7329,
+ 15147: 0x60FA,
+ 15148: 0x5174,
+ 15149: 0x5211,
+ 15150: 0x578B,
+ 15151: 0x5F62,
+ 15152: 0x90A2,
+ 15153: 0x884C,
+ 15154: 0x9192,
+ 15155: 0x5E78,
+ 15156: 0x674F,
+ 15157: 0x6027,
+ 15158: 0x59D3,
+ 15159: 0x5144,
+ 15160: 0x51F6,
+ 15161: 0x80F8,
+ 15162: 0x5308,
+ 15163: 0x6C79,
+ 15164: 0x96C4,
+ 15165: 0x718A,
+ 15166: 0x4F11,
+ 15167: 0x4FEE,
+ 15168: 0x7F9E,
+ 15169: 0x673D,
+ 15170: 0x55C5,
+ 15171: 0x9508,
+ 15172: 0x79C0,
+ 15173: 0x8896,
+ 15174: 0x7EE3,
+ 15175: 0x589F,
+ 15176: 0x620C,
+ 15177: 0x9700,
+ 15178: 0x865A,
+ 15179: 0x5618,
+ 15180: 0x987B,
+ 15181: 0x5F90,
+ 15182: 0x8BB8,
+ 15183: 0x84C4,
+ 15184: 0x9157,
+ 15185: 0x53D9,
+ 15186: 0x65ED,
+ 15187: 0x5E8F,
+ 15188: 0x755C,
+ 15189: 0x6064,
+ 15190: 0x7D6E,
+ 15191: 0x5A7F,
+ 15192: 0x7EEA,
+ 15193: 0x7EED,
+ 15194: 0x8F69,
+ 15195: 0x55A7,
+ 15196: 0x5BA3,
+ 15197: 0x60AC,
+ 15198: 0x65CB,
+ 15199: 0x7384,
+ 15200: 0x88AC,
+ 15201: 0x88AE,
+ 15202: 0x88AF,
+ 15203: 0x88B0,
+ 15204: 0x88B2,
+ 15205: 0x88B3,
+ 15206: 0x88B4,
+ 15207: 0x88B5,
+ 15208: 0x88B6,
+ 15209: 0x88B8,
+ 15210: 0x88B9,
+ 15211: 0x88BA,
+ 15212: 0x88BB,
+ 15213: 0x88BD,
+ 15214: 0x88BE,
+ 15215: 0x88BF,
+ 15216: 0x88C0,
+ 15217: 0x88C3,
+ 15218: 0x88C4,
+ 15219: 0x88C7,
+ 15220: 0x88C8,
+ 15221: 0x88CA,
+ 15222: 0x88CB,
+ 15223: 0x88CC,
+ 15224: 0x88CD,
+ 15225: 0x88CF,
+ 15226: 0x88D0,
+ 15227: 0x88D1,
+ 15228: 0x88D3,
+ 15229: 0x88D6,
+ 15230: 0x88D7,
+ 15231: 0x88DA,
+ 15232: 0x88DB,
+ 15233: 0x88DC,
+ 15234: 0x88DD,
+ 15235: 0x88DE,
+ 15236: 0x88E0,
+ 15237: 0x88E1,
+ 15238: 0x88E6,
+ 15239: 0x88E7,
+ 15240: 0x88E9,
+ 15241: 0x88EA,
+ 15242: 0x88EB,
+ 15243: 0x88EC,
+ 15244: 0x88ED,
+ 15245: 0x88EE,
+ 15246: 0x88EF,
+ 15247: 0x88F2,
+ 15248: 0x88F5,
+ 15249: 0x88F6,
+ 15250: 0x88F7,
+ 15251: 0x88FA,
+ 15252: 0x88FB,
+ 15253: 0x88FD,
+ 15254: 0x88FF,
+ 15255: 0x8900,
+ 15256: 0x8901,
+ 15257: 0x8903,
+ 15258: 0x8904,
+ 15259: 0x8905,
+ 15260: 0x8906,
+ 15261: 0x8907,
+ 15262: 0x8908,
+ 15263: 0x8909,
+ 15264: 0x890B,
+ 15265: 0x890C,
+ 15266: 0x890D,
+ 15267: 0x890E,
+ 15268: 0x890F,
+ 15269: 0x8911,
+ 15270: 0x8914,
+ 15271: 0x8915,
+ 15272: 0x8916,
+ 15273: 0x8917,
+ 15274: 0x8918,
+ 15275: 0x891C,
+ 15276: 0x891D,
+ 15277: 0x891E,
+ 15278: 0x891F,
+ 15279: 0x8920,
+ 15280: 0x8922,
+ 15281: 0x8923,
+ 15282: 0x8924,
+ 15283: 0x8926,
+ 15284: 0x8927,
+ 15285: 0x8928,
+ 15286: 0x8929,
+ 15287: 0x892C,
+ 15288: 0x892D,
+ 15289: 0x892E,
+ 15290: 0x892F,
+ 15291: 0x8931,
+ 15292: 0x8932,
+ 15293: 0x8933,
+ 15294: 0x8935,
+ 15295: 0x8937,
+ 15296: 0x9009,
+ 15297: 0x7663,
+ 15298: 0x7729,
+ 15299: 0x7EDA,
+ 15300: 0x9774,
+ 15301: 0x859B,
+ 15302: 0x5B66,
+ 15303: 0x7A74,
+ 15304: 0x96EA,
+ 15305: 0x8840,
+ 15306: 0x52CB,
+ 15307: 0x718F,
+ 15308: 0x5FAA,
+ 15309: 0x65EC,
+ 15310: 0x8BE2,
+ 15311: 0x5BFB,
+ 15312: 0x9A6F,
+ 15313: 0x5DE1,
+ 15314: 0x6B89,
+ 15315: 0x6C5B,
+ 15316: 0x8BAD,
+ 15317: 0x8BAF,
+ 15318: 0x900A,
+ 15319: 0x8FC5,
+ 15320: 0x538B,
+ 15321: 0x62BC,
+ 15322: 0x9E26,
+ 15323: 0x9E2D,
+ 15324: 0x5440,
+ 15325: 0x4E2B,
+ 15326: 0x82BD,
+ 15327: 0x7259,
+ 15328: 0x869C,
+ 15329: 0x5D16,
+ 15330: 0x8859,
+ 15331: 0x6DAF,
+ 15332: 0x96C5,
+ 15333: 0x54D1,
+ 15334: 0x4E9A,
+ 15335: 0x8BB6,
+ 15336: 0x7109,
+ 15337: 0x54BD,
+ 15338: 0x9609,
+ 15339: 0x70DF,
+ 15340: 0x6DF9,
+ 15341: 0x76D0,
+ 15342: 0x4E25,
+ 15343: 0x7814,
+ 15344: 0x8712,
+ 15345: 0x5CA9,
+ 15346: 0x5EF6,
+ 15347: 0x8A00,
+ 15348: 0x989C,
+ 15349: 0x960E,
+ 15350: 0x708E,
+ 15351: 0x6CBF,
+ 15352: 0x5944,
+ 15353: 0x63A9,
+ 15354: 0x773C,
+ 15355: 0x884D,
+ 15356: 0x6F14,
+ 15357: 0x8273,
+ 15358: 0x5830,
+ 15359: 0x71D5,
+ 15360: 0x538C,
+ 15361: 0x781A,
+ 15362: 0x96C1,
+ 15363: 0x5501,
+ 15364: 0x5F66,
+ 15365: 0x7130,
+ 15366: 0x5BB4,
+ 15367: 0x8C1A,
+ 15368: 0x9A8C,
+ 15369: 0x6B83,
+ 15370: 0x592E,
+ 15371: 0x9E2F,
+ 15372: 0x79E7,
+ 15373: 0x6768,
+ 15374: 0x626C,
+ 15375: 0x4F6F,
+ 15376: 0x75A1,
+ 15377: 0x7F8A,
+ 15378: 0x6D0B,
+ 15379: 0x9633,
+ 15380: 0x6C27,
+ 15381: 0x4EF0,
+ 15382: 0x75D2,
+ 15383: 0x517B,
+ 15384: 0x6837,
+ 15385: 0x6F3E,
+ 15386: 0x9080,
+ 15387: 0x8170,
+ 15388: 0x5996,
+ 15389: 0x7476,
+ 15390: 0x8938,
+ 15391: 0x8939,
+ 15392: 0x893A,
+ 15393: 0x893B,
+ 15394: 0x893C,
+ 15395: 0x893D,
+ 15396: 0x893E,
+ 15397: 0x893F,
+ 15398: 0x8940,
+ 15399: 0x8942,
+ 15400: 0x8943,
+ 15401: 0x8945,
+ 15402: 0x8946,
+ 15403: 0x8947,
+ 15404: 0x8948,
+ 15405: 0x8949,
+ 15406: 0x894A,
+ 15407: 0x894B,
+ 15408: 0x894C,
+ 15409: 0x894D,
+ 15410: 0x894E,
+ 15411: 0x894F,
+ 15412: 0x8950,
+ 15413: 0x8951,
+ 15414: 0x8952,
+ 15415: 0x8953,
+ 15416: 0x8954,
+ 15417: 0x8955,
+ 15418: 0x8956,
+ 15419: 0x8957,
+ 15420: 0x8958,
+ 15421: 0x8959,
+ 15422: 0x895A,
+ 15423: 0x895B,
+ 15424: 0x895C,
+ 15425: 0x895D,
+ 15426: 0x8960,
+ 15427: 0x8961,
+ 15428: 0x8962,
+ 15429: 0x8963,
+ 15430: 0x8964,
+ 15431: 0x8965,
+ 15432: 0x8967,
+ 15433: 0x8968,
+ 15434: 0x8969,
+ 15435: 0x896A,
+ 15436: 0x896B,
+ 15437: 0x896C,
+ 15438: 0x896D,
+ 15439: 0x896E,
+ 15440: 0x896F,
+ 15441: 0x8970,
+ 15442: 0x8971,
+ 15443: 0x8972,
+ 15444: 0x8973,
+ 15445: 0x8974,
+ 15446: 0x8975,
+ 15447: 0x8976,
+ 15448: 0x8977,
+ 15449: 0x8978,
+ 15450: 0x8979,
+ 15451: 0x897A,
+ 15452: 0x897C,
+ 15453: 0x897D,
+ 15454: 0x897E,
+ 15455: 0x8980,
+ 15456: 0x8982,
+ 15457: 0x8984,
+ 15458: 0x8985,
+ 15459: 0x8987,
+ 15460: 0x8988,
+ 15461: 0x8989,
+ 15462: 0x898A,
+ 15463: 0x898B,
+ 15464: 0x898C,
+ 15465: 0x898D,
+ 15466: 0x898E,
+ 15467: 0x898F,
+ 15468: 0x8990,
+ 15469: 0x8991,
+ 15470: 0x8992,
+ 15471: 0x8993,
+ 15472: 0x8994,
+ 15473: 0x8995,
+ 15474: 0x8996,
+ 15475: 0x8997,
+ 15476: 0x8998,
+ 15477: 0x8999,
+ 15478: 0x899A,
+ 15479: 0x899B,
+ 15480: 0x899C,
+ 15481: 0x899D,
+ 15482: 0x899E,
+ 15483: 0x899F,
+ 15484: 0x89A0,
+ 15485: 0x89A1,
+ 15486: 0x6447,
+ 15487: 0x5C27,
+ 15488: 0x9065,
+ 15489: 0x7A91,
+ 15490: 0x8C23,
+ 15491: 0x59DA,
+ 15492: 0x54AC,
+ 15493: 0x8200,
+ 15494: 0x836F,
+ 15495: 0x8981,
+ 15496: 0x8000,
+ 15497: 0x6930,
+ 15498: 0x564E,
+ 15499: 0x8036,
+ 15500: 0x7237,
+ 15501: 0x91CE,
+ 15502: 0x51B6,
+ 15503: 0x4E5F,
+ 15504: 0x9875,
+ 15505: 0x6396,
+ 15506: 0x4E1A,
+ 15507: 0x53F6,
+ 15508: 0x66F3,
+ 15509: 0x814B,
+ 15510: 0x591C,
+ 15511: 0x6DB2,
+ 15512: 0x4E00,
+ 15513: 0x58F9,
+ 15514: 0x533B,
+ 15515: 0x63D6,
+ 15516: 0x94F1,
+ 15517: 0x4F9D,
+ 15518: 0x4F0A,
+ 15519: 0x8863,
+ 15520: 0x9890,
+ 15521: 0x5937,
+ 15522: 0x9057,
+ 15523: 0x79FB,
+ 15524: 0x4EEA,
+ 15525: 0x80F0,
+ 15526: 0x7591,
+ 15527: 0x6C82,
+ 15528: 0x5B9C,
+ 15529: 0x59E8,
+ 15530: 0x5F5D,
+ 15531: 0x6905,
+ 15532: 0x8681,
+ 15533: 0x501A,
+ 15534: 0x5DF2,
+ 15535: 0x4E59,
+ 15536: 0x77E3,
+ 15537: 0x4EE5,
+ 15538: 0x827A,
+ 15539: 0x6291,
+ 15540: 0x6613,
+ 15541: 0x9091,
+ 15542: 0x5C79,
+ 15543: 0x4EBF,
+ 15544: 0x5F79,
+ 15545: 0x81C6,
+ 15546: 0x9038,
+ 15547: 0x8084,
+ 15548: 0x75AB,
+ 15549: 0x4EA6,
+ 15550: 0x88D4,
+ 15551: 0x610F,
+ 15552: 0x6BC5,
+ 15553: 0x5FC6,
+ 15554: 0x4E49,
+ 15555: 0x76CA,
+ 15556: 0x6EA2,
+ 15557: 0x8BE3,
+ 15558: 0x8BAE,
+ 15559: 0x8C0A,
+ 15560: 0x8BD1,
+ 15561: 0x5F02,
+ 15562: 0x7FFC,
+ 15563: 0x7FCC,
+ 15564: 0x7ECE,
+ 15565: 0x8335,
+ 15566: 0x836B,
+ 15567: 0x56E0,
+ 15568: 0x6BB7,
+ 15569: 0x97F3,
+ 15570: 0x9634,
+ 15571: 0x59FB,
+ 15572: 0x541F,
+ 15573: 0x94F6,
+ 15574: 0x6DEB,
+ 15575: 0x5BC5,
+ 15576: 0x996E,
+ 15577: 0x5C39,
+ 15578: 0x5F15,
+ 15579: 0x9690,
+ 15580: 0x89A2,
+ 15581: 0x89A3,
+ 15582: 0x89A4,
+ 15583: 0x89A5,
+ 15584: 0x89A6,
+ 15585: 0x89A7,
+ 15586: 0x89A8,
+ 15587: 0x89A9,
+ 15588: 0x89AA,
+ 15589: 0x89AB,
+ 15590: 0x89AC,
+ 15591: 0x89AD,
+ 15592: 0x89AE,
+ 15593: 0x89AF,
+ 15594: 0x89B0,
+ 15595: 0x89B1,
+ 15596: 0x89B2,
+ 15597: 0x89B3,
+ 15598: 0x89B4,
+ 15599: 0x89B5,
+ 15600: 0x89B6,
+ 15601: 0x89B7,
+ 15602: 0x89B8,
+ 15603: 0x89B9,
+ 15604: 0x89BA,
+ 15605: 0x89BB,
+ 15606: 0x89BC,
+ 15607: 0x89BD,
+ 15608: 0x89BE,
+ 15609: 0x89BF,
+ 15610: 0x89C0,
+ 15611: 0x89C3,
+ 15612: 0x89CD,
+ 15613: 0x89D3,
+ 15614: 0x89D4,
+ 15615: 0x89D5,
+ 15616: 0x89D7,
+ 15617: 0x89D8,
+ 15618: 0x89D9,
+ 15619: 0x89DB,
+ 15620: 0x89DD,
+ 15621: 0x89DF,
+ 15622: 0x89E0,
+ 15623: 0x89E1,
+ 15624: 0x89E2,
+ 15625: 0x89E4,
+ 15626: 0x89E7,
+ 15627: 0x89E8,
+ 15628: 0x89E9,
+ 15629: 0x89EA,
+ 15630: 0x89EC,
+ 15631: 0x89ED,
+ 15632: 0x89EE,
+ 15633: 0x89F0,
+ 15634: 0x89F1,
+ 15635: 0x89F2,
+ 15636: 0x89F4,
+ 15637: 0x89F5,
+ 15638: 0x89F6,
+ 15639: 0x89F7,
+ 15640: 0x89F8,
+ 15641: 0x89F9,
+ 15642: 0x89FA,
+ 15643: 0x89FB,
+ 15644: 0x89FC,
+ 15645: 0x89FD,
+ 15646: 0x89FE,
+ 15647: 0x89FF,
+ 15648: 0x8A01,
+ 15649: 0x8A02,
+ 15650: 0x8A03,
+ 15651: 0x8A04,
+ 15652: 0x8A05,
+ 15653: 0x8A06,
+ 15654: 0x8A08,
+ 15655: 0x8A09,
+ 15656: 0x8A0A,
+ 15657: 0x8A0B,
+ 15658: 0x8A0C,
+ 15659: 0x8A0D,
+ 15660: 0x8A0E,
+ 15661: 0x8A0F,
+ 15662: 0x8A10,
+ 15663: 0x8A11,
+ 15664: 0x8A12,
+ 15665: 0x8A13,
+ 15666: 0x8A14,
+ 15667: 0x8A15,
+ 15668: 0x8A16,
+ 15669: 0x8A17,
+ 15670: 0x8A18,
+ 15671: 0x8A19,
+ 15672: 0x8A1A,
+ 15673: 0x8A1B,
+ 15674: 0x8A1C,
+ 15675: 0x8A1D,
+ 15676: 0x5370,
+ 15677: 0x82F1,
+ 15678: 0x6A31,
+ 15679: 0x5A74,
+ 15680: 0x9E70,
+ 15681: 0x5E94,
+ 15682: 0x7F28,
+ 15683: 0x83B9,
+ 15684: 0x8424,
+ 15685: 0x8425,
+ 15686: 0x8367,
+ 15687: 0x8747,
+ 15688: 0x8FCE,
+ 15689: 0x8D62,
+ 15690: 0x76C8,
+ 15691: 0x5F71,
+ 15692: 0x9896,
+ 15693: 0x786C,
+ 15694: 0x6620,
+ 15695: 0x54DF,
+ 15696: 0x62E5,
+ 15697: 0x4F63,
+ 15698: 0x81C3,
+ 15699: 0x75C8,
+ 15700: 0x5EB8,
+ 15701: 0x96CD,
+ 15702: 0x8E0A,
+ 15703: 0x86F9,
+ 15704: 0x548F,
+ 15705: 0x6CF3,
+ 15706: 0x6D8C,
+ 15707: 0x6C38,
+ 15708: 0x607F,
+ 15709: 0x52C7,
+ 15710: 0x7528,
+ 15711: 0x5E7D,
+ 15712: 0x4F18,
+ 15713: 0x60A0,
+ 15714: 0x5FE7,
+ 15715: 0x5C24,
+ 15716: 0x7531,
+ 15717: 0x90AE,
+ 15718: 0x94C0,
+ 15719: 0x72B9,
+ 15720: 0x6CB9,
+ 15721: 0x6E38,
+ 15722: 0x9149,
+ 15723: 0x6709,
+ 15724: 0x53CB,
+ 15725: 0x53F3,
+ 15726: 0x4F51,
+ 15727: 0x91C9,
+ 15728: 0x8BF1,
+ 15729: 0x53C8,
+ 15730: 0x5E7C,
+ 15731: 0x8FC2,
+ 15732: 0x6DE4,
+ 15733: 0x4E8E,
+ 15734: 0x76C2,
+ 15735: 0x6986,
+ 15736: 0x865E,
+ 15737: 0x611A,
+ 15738: 0x8206,
+ 15739: 0x4F59,
+ 15740: 0x4FDE,
+ 15741: 0x903E,
+ 15742: 0x9C7C,
+ 15743: 0x6109,
+ 15744: 0x6E1D,
+ 15745: 0x6E14,
+ 15746: 0x9685,
+ 15747: 0x4E88,
+ 15748: 0x5A31,
+ 15749: 0x96E8,
+ 15750: 0x4E0E,
+ 15751: 0x5C7F,
+ 15752: 0x79B9,
+ 15753: 0x5B87,
+ 15754: 0x8BED,
+ 15755: 0x7FBD,
+ 15756: 0x7389,
+ 15757: 0x57DF,
+ 15758: 0x828B,
+ 15759: 0x90C1,
+ 15760: 0x5401,
+ 15761: 0x9047,
+ 15762: 0x55BB,
+ 15763: 0x5CEA,
+ 15764: 0x5FA1,
+ 15765: 0x6108,
+ 15766: 0x6B32,
+ 15767: 0x72F1,
+ 15768: 0x80B2,
+ 15769: 0x8A89,
+ 15770: 0x8A1E,
+ 15771: 0x8A1F,
+ 15772: 0x8A20,
+ 15773: 0x8A21,
+ 15774: 0x8A22,
+ 15775: 0x8A23,
+ 15776: 0x8A24,
+ 15777: 0x8A25,
+ 15778: 0x8A26,
+ 15779: 0x8A27,
+ 15780: 0x8A28,
+ 15781: 0x8A29,
+ 15782: 0x8A2A,
+ 15783: 0x8A2B,
+ 15784: 0x8A2C,
+ 15785: 0x8A2D,
+ 15786: 0x8A2E,
+ 15787: 0x8A2F,
+ 15788: 0x8A30,
+ 15789: 0x8A31,
+ 15790: 0x8A32,
+ 15791: 0x8A33,
+ 15792: 0x8A34,
+ 15793: 0x8A35,
+ 15794: 0x8A36,
+ 15795: 0x8A37,
+ 15796: 0x8A38,
+ 15797: 0x8A39,
+ 15798: 0x8A3A,
+ 15799: 0x8A3B,
+ 15800: 0x8A3C,
+ 15801: 0x8A3D,
+ 15802: 0x8A3F,
+ 15803: 0x8A40,
+ 15804: 0x8A41,
+ 15805: 0x8A42,
+ 15806: 0x8A43,
+ 15807: 0x8A44,
+ 15808: 0x8A45,
+ 15809: 0x8A46,
+ 15810: 0x8A47,
+ 15811: 0x8A49,
+ 15812: 0x8A4A,
+ 15813: 0x8A4B,
+ 15814: 0x8A4C,
+ 15815: 0x8A4D,
+ 15816: 0x8A4E,
+ 15817: 0x8A4F,
+ 15818: 0x8A50,
+ 15819: 0x8A51,
+ 15820: 0x8A52,
+ 15821: 0x8A53,
+ 15822: 0x8A54,
+ 15823: 0x8A55,
+ 15824: 0x8A56,
+ 15825: 0x8A57,
+ 15826: 0x8A58,
+ 15827: 0x8A59,
+ 15828: 0x8A5A,
+ 15829: 0x8A5B,
+ 15830: 0x8A5C,
+ 15831: 0x8A5D,
+ 15832: 0x8A5E,
+ 15833: 0x8A5F,
+ 15834: 0x8A60,
+ 15835: 0x8A61,
+ 15836: 0x8A62,
+ 15837: 0x8A63,
+ 15838: 0x8A64,
+ 15839: 0x8A65,
+ 15840: 0x8A66,
+ 15841: 0x8A67,
+ 15842: 0x8A68,
+ 15843: 0x8A69,
+ 15844: 0x8A6A,
+ 15845: 0x8A6B,
+ 15846: 0x8A6C,
+ 15847: 0x8A6D,
+ 15848: 0x8A6E,
+ 15849: 0x8A6F,
+ 15850: 0x8A70,
+ 15851: 0x8A71,
+ 15852: 0x8A72,
+ 15853: 0x8A73,
+ 15854: 0x8A74,
+ 15855: 0x8A75,
+ 15856: 0x8A76,
+ 15857: 0x8A77,
+ 15858: 0x8A78,
+ 15859: 0x8A7A,
+ 15860: 0x8A7B,
+ 15861: 0x8A7C,
+ 15862: 0x8A7D,
+ 15863: 0x8A7E,
+ 15864: 0x8A7F,
+ 15865: 0x8A80,
+ 15866: 0x6D74,
+ 15867: 0x5BD3,
+ 15868: 0x88D5,
+ 15869: 0x9884,
+ 15870: 0x8C6B,
+ 15871: 0x9A6D,
+ 15872: 0x9E33,
+ 15873: 0x6E0A,
+ 15874: 0x51A4,
+ 15875: 0x5143,
+ 15876: 0x57A3,
+ 15877: 0x8881,
+ 15878: 0x539F,
+ 15879: 0x63F4,
+ 15880: 0x8F95,
+ 15881: 0x56ED,
+ 15882: 0x5458,
+ 15883: 0x5706,
+ 15884: 0x733F,
+ 15885: 0x6E90,
+ 15886: 0x7F18,
+ 15887: 0x8FDC,
+ 15888: 0x82D1,
+ 15889: 0x613F,
+ 15890: 0x6028,
+ 15891: 0x9662,
+ 15892: 0x66F0,
+ 15893: 0x7EA6,
+ 15894: 0x8D8A,
+ 15895: 0x8DC3,
+ 15896: 0x94A5,
+ 15897: 0x5CB3,
+ 15898: 0x7CA4,
+ 15899: 0x6708,
+ 15900: 0x60A6,
+ 15901: 0x9605,
+ 15902: 0x8018,
+ 15903: 0x4E91,
+ 15904: 0x90E7,
+ 15905: 0x5300,
+ 15906: 0x9668,
+ 15907: 0x5141,
+ 15908: 0x8FD0,
+ 15909: 0x8574,
+ 15910: 0x915D,
+ 15911: 0x6655,
+ 15912: 0x97F5,
+ 15913: 0x5B55,
+ 15914: 0x531D,
+ 15915: 0x7838,
+ 15916: 0x6742,
+ 15917: 0x683D,
+ 15918: 0x54C9,
+ 15919: 0x707E,
+ 15920: 0x5BB0,
+ 15921: 0x8F7D,
+ 15922: 0x518D,
+ 15923: 0x5728,
+ 15924: 0x54B1,
+ 15925: 0x6512,
+ 15926: 0x6682,
+ 15927: 0x8D5E,
+ 15928: 0x8D43,
+ 15929: 0x810F,
+ 15930: 0x846C,
+ 15931: 0x906D,
+ 15932: 0x7CDF,
+ 15933: 0x51FF,
+ 15934: 0x85FB,
+ 15935: 0x67A3,
+ 15936: 0x65E9,
+ 15937: 0x6FA1,
+ 15938: 0x86A4,
+ 15939: 0x8E81,
+ 15940: 0x566A,
+ 15941: 0x9020,
+ 15942: 0x7682,
+ 15943: 0x7076,
+ 15944: 0x71E5,
+ 15945: 0x8D23,
+ 15946: 0x62E9,
+ 15947: 0x5219,
+ 15948: 0x6CFD,
+ 15949: 0x8D3C,
+ 15950: 0x600E,
+ 15951: 0x589E,
+ 15952: 0x618E,
+ 15953: 0x66FE,
+ 15954: 0x8D60,
+ 15955: 0x624E,
+ 15956: 0x55B3,
+ 15957: 0x6E23,
+ 15958: 0x672D,
+ 15959: 0x8F67,
+ 15960: 0x8A81,
+ 15961: 0x8A82,
+ 15962: 0x8A83,
+ 15963: 0x8A84,
+ 15964: 0x8A85,
+ 15965: 0x8A86,
+ 15966: 0x8A87,
+ 15967: 0x8A88,
+ 15968: 0x8A8B,
+ 15969: 0x8A8C,
+ 15970: 0x8A8D,
+ 15971: 0x8A8E,
+ 15972: 0x8A8F,
+ 15973: 0x8A90,
+ 15974: 0x8A91,
+ 15975: 0x8A92,
+ 15976: 0x8A94,
+ 15977: 0x8A95,
+ 15978: 0x8A96,
+ 15979: 0x8A97,
+ 15980: 0x8A98,
+ 15981: 0x8A99,
+ 15982: 0x8A9A,
+ 15983: 0x8A9B,
+ 15984: 0x8A9C,
+ 15985: 0x8A9D,
+ 15986: 0x8A9E,
+ 15987: 0x8A9F,
+ 15988: 0x8AA0,
+ 15989: 0x8AA1,
+ 15990: 0x8AA2,
+ 15991: 0x8AA3,
+ 15992: 0x8AA4,
+ 15993: 0x8AA5,
+ 15994: 0x8AA6,
+ 15995: 0x8AA7,
+ 15996: 0x8AA8,
+ 15997: 0x8AA9,
+ 15998: 0x8AAA,
+ 15999: 0x8AAB,
+ 16000: 0x8AAC,
+ 16001: 0x8AAD,
+ 16002: 0x8AAE,
+ 16003: 0x8AAF,
+ 16004: 0x8AB0,
+ 16005: 0x8AB1,
+ 16006: 0x8AB2,
+ 16007: 0x8AB3,
+ 16008: 0x8AB4,
+ 16009: 0x8AB5,
+ 16010: 0x8AB6,
+ 16011: 0x8AB7,
+ 16012: 0x8AB8,
+ 16013: 0x8AB9,
+ 16014: 0x8ABA,
+ 16015: 0x8ABB,
+ 16016: 0x8ABC,
+ 16017: 0x8ABD,
+ 16018: 0x8ABE,
+ 16019: 0x8ABF,
+ 16020: 0x8AC0,
+ 16021: 0x8AC1,
+ 16022: 0x8AC2,
+ 16023: 0x8AC3,
+ 16024: 0x8AC4,
+ 16025: 0x8AC5,
+ 16026: 0x8AC6,
+ 16027: 0x8AC7,
+ 16028: 0x8AC8,
+ 16029: 0x8AC9,
+ 16030: 0x8ACA,
+ 16031: 0x8ACB,
+ 16032: 0x8ACC,
+ 16033: 0x8ACD,
+ 16034: 0x8ACE,
+ 16035: 0x8ACF,
+ 16036: 0x8AD0,
+ 16037: 0x8AD1,
+ 16038: 0x8AD2,
+ 16039: 0x8AD3,
+ 16040: 0x8AD4,
+ 16041: 0x8AD5,
+ 16042: 0x8AD6,
+ 16043: 0x8AD7,
+ 16044: 0x8AD8,
+ 16045: 0x8AD9,
+ 16046: 0x8ADA,
+ 16047: 0x8ADB,
+ 16048: 0x8ADC,
+ 16049: 0x8ADD,
+ 16050: 0x8ADE,
+ 16051: 0x8ADF,
+ 16052: 0x8AE0,
+ 16053: 0x8AE1,
+ 16054: 0x8AE2,
+ 16055: 0x8AE3,
+ 16056: 0x94E1,
+ 16057: 0x95F8,
+ 16058: 0x7728,
+ 16059: 0x6805,
+ 16060: 0x69A8,
+ 16061: 0x548B,
+ 16062: 0x4E4D,
+ 16063: 0x70B8,
+ 16064: 0x8BC8,
+ 16065: 0x6458,
+ 16066: 0x658B,
+ 16067: 0x5B85,
+ 16068: 0x7A84,
+ 16069: 0x503A,
+ 16070: 0x5BE8,
+ 16071: 0x77BB,
+ 16072: 0x6BE1,
+ 16073: 0x8A79,
+ 16074: 0x7C98,
+ 16075: 0x6CBE,
+ 16076: 0x76CF,
+ 16077: 0x65A9,
+ 16078: 0x8F97,
+ 16079: 0x5D2D,
+ 16080: 0x5C55,
+ 16081: 0x8638,
+ 16082: 0x6808,
+ 16083: 0x5360,
+ 16084: 0x6218,
+ 16085: 0x7AD9,
+ 16086: 0x6E5B,
+ 16087: 0x7EFD,
+ 16088: 0x6A1F,
+ 16089: 0x7AE0,
+ 16090: 0x5F70,
+ 16091: 0x6F33,
+ 16092: 0x5F20,
+ 16093: 0x638C,
+ 16094: 0x6DA8,
+ 16095: 0x6756,
+ 16096: 0x4E08,
+ 16097: 0x5E10,
+ 16098: 0x8D26,
+ 16099: 0x4ED7,
+ 16100: 0x80C0,
+ 16101: 0x7634,
+ 16102: 0x969C,
+ 16103: 0x62DB,
+ 16104: 0x662D,
+ 16105: 0x627E,
+ 16106: 0x6CBC,
+ 16107: 0x8D75,
+ 16108: 0x7167,
+ 16109: 0x7F69,
+ 16110: 0x5146,
+ 16111: 0x8087,
+ 16112: 0x53EC,
+ 16113: 0x906E,
+ 16114: 0x6298,
+ 16115: 0x54F2,
+ 16116: 0x86F0,
+ 16117: 0x8F99,
+ 16118: 0x8005,
+ 16119: 0x9517,
+ 16120: 0x8517,
+ 16121: 0x8FD9,
+ 16122: 0x6D59,
+ 16123: 0x73CD,
+ 16124: 0x659F,
+ 16125: 0x771F,
+ 16126: 0x7504,
+ 16127: 0x7827,
+ 16128: 0x81FB,
+ 16129: 0x8D1E,
+ 16130: 0x9488,
+ 16131: 0x4FA6,
+ 16132: 0x6795,
+ 16133: 0x75B9,
+ 16134: 0x8BCA,
+ 16135: 0x9707,
+ 16136: 0x632F,
+ 16137: 0x9547,
+ 16138: 0x9635,
+ 16139: 0x84B8,
+ 16140: 0x6323,
+ 16141: 0x7741,
+ 16142: 0x5F81,
+ 16143: 0x72F0,
+ 16144: 0x4E89,
+ 16145: 0x6014,
+ 16146: 0x6574,
+ 16147: 0x62EF,
+ 16148: 0x6B63,
+ 16149: 0x653F,
+ 16150: 0x8AE4,
+ 16151: 0x8AE5,
+ 16152: 0x8AE6,
+ 16153: 0x8AE7,
+ 16154: 0x8AE8,
+ 16155: 0x8AE9,
+ 16156: 0x8AEA,
+ 16157: 0x8AEB,
+ 16158: 0x8AEC,
+ 16159: 0x8AED,
+ 16160: 0x8AEE,
+ 16161: 0x8AEF,
+ 16162: 0x8AF0,
+ 16163: 0x8AF1,
+ 16164: 0x8AF2,
+ 16165: 0x8AF3,
+ 16166: 0x8AF4,
+ 16167: 0x8AF5,
+ 16168: 0x8AF6,
+ 16169: 0x8AF7,
+ 16170: 0x8AF8,
+ 16171: 0x8AF9,
+ 16172: 0x8AFA,
+ 16173: 0x8AFB,
+ 16174: 0x8AFC,
+ 16175: 0x8AFD,
+ 16176: 0x8AFE,
+ 16177: 0x8AFF,
+ 16178: 0x8B00,
+ 16179: 0x8B01,
+ 16180: 0x8B02,
+ 16181: 0x8B03,
+ 16182: 0x8B04,
+ 16183: 0x8B05,
+ 16184: 0x8B06,
+ 16185: 0x8B08,
+ 16186: 0x8B09,
+ 16187: 0x8B0A,
+ 16188: 0x8B0B,
+ 16189: 0x8B0C,
+ 16190: 0x8B0D,
+ 16191: 0x8B0E,
+ 16192: 0x8B0F,
+ 16193: 0x8B10,
+ 16194: 0x8B11,
+ 16195: 0x8B12,
+ 16196: 0x8B13,
+ 16197: 0x8B14,
+ 16198: 0x8B15,
+ 16199: 0x8B16,
+ 16200: 0x8B17,
+ 16201: 0x8B18,
+ 16202: 0x8B19,
+ 16203: 0x8B1A,
+ 16204: 0x8B1B,
+ 16205: 0x8B1C,
+ 16206: 0x8B1D,
+ 16207: 0x8B1E,
+ 16208: 0x8B1F,
+ 16209: 0x8B20,
+ 16210: 0x8B21,
+ 16211: 0x8B22,
+ 16212: 0x8B23,
+ 16213: 0x8B24,
+ 16214: 0x8B25,
+ 16215: 0x8B27,
+ 16216: 0x8B28,
+ 16217: 0x8B29,
+ 16218: 0x8B2A,
+ 16219: 0x8B2B,
+ 16220: 0x8B2C,
+ 16221: 0x8B2D,
+ 16222: 0x8B2E,
+ 16223: 0x8B2F,
+ 16224: 0x8B30,
+ 16225: 0x8B31,
+ 16226: 0x8B32,
+ 16227: 0x8B33,
+ 16228: 0x8B34,
+ 16229: 0x8B35,
+ 16230: 0x8B36,
+ 16231: 0x8B37,
+ 16232: 0x8B38,
+ 16233: 0x8B39,
+ 16234: 0x8B3A,
+ 16235: 0x8B3B,
+ 16236: 0x8B3C,
+ 16237: 0x8B3D,
+ 16238: 0x8B3E,
+ 16239: 0x8B3F,
+ 16240: 0x8B40,
+ 16241: 0x8B41,
+ 16242: 0x8B42,
+ 16243: 0x8B43,
+ 16244: 0x8B44,
+ 16245: 0x8B45,
+ 16246: 0x5E27,
+ 16247: 0x75C7,
+ 16248: 0x90D1,
+ 16249: 0x8BC1,
+ 16250: 0x829D,
+ 16251: 0x679D,
+ 16252: 0x652F,
+ 16253: 0x5431,
+ 16254: 0x8718,
+ 16255: 0x77E5,
+ 16256: 0x80A2,
+ 16257: 0x8102,
+ 16258: 0x6C41,
+ 16259: 0x4E4B,
+ 16260: 0x7EC7,
+ 16261: 0x804C,
+ 16262: 0x76F4,
+ 16263: 0x690D,
+ 16264: 0x6B96,
+ 16265: 0x6267,
+ 16266: 0x503C,
+ 16267: 0x4F84,
+ 16268: 0x5740,
+ 16269: 0x6307,
+ 16270: 0x6B62,
+ 16271: 0x8DBE,
+ 16272: 0x53EA,
+ 16273: 0x65E8,
+ 16274: 0x7EB8,
+ 16275: 0x5FD7,
+ 16276: 0x631A,
+ 16277: 0x63B7,
+ 16278: 0x81F3,
+ 16279: 0x81F4,
+ 16280: 0x7F6E,
+ 16281: 0x5E1C,
+ 16282: 0x5CD9,
+ 16283: 0x5236,
+ 16284: 0x667A,
+ 16285: 0x79E9,
+ 16286: 0x7A1A,
+ 16287: 0x8D28,
+ 16288: 0x7099,
+ 16289: 0x75D4,
+ 16290: 0x6EDE,
+ 16291: 0x6CBB,
+ 16292: 0x7A92,
+ 16293: 0x4E2D,
+ 16294: 0x76C5,
+ 16295: 0x5FE0,
+ 16296: 0x949F,
+ 16297: 0x8877,
+ 16298: 0x7EC8,
+ 16299: 0x79CD,
+ 16300: 0x80BF,
+ 16301: 0x91CD,
+ 16302: 0x4EF2,
+ 16303: 0x4F17,
+ 16304: 0x821F,
+ 16305: 0x5468,
+ 16306: 0x5DDE,
+ 16307: 0x6D32,
+ 16308: 0x8BCC,
+ 16309: 0x7CA5,
+ 16310: 0x8F74,
+ 16311: 0x8098,
+ 16312: 0x5E1A,
+ 16313: 0x5492,
+ 16314: 0x76B1,
+ 16315: 0x5B99,
+ 16316: 0x663C,
+ 16317: 0x9AA4,
+ 16318: 0x73E0,
+ 16319: 0x682A,
+ 16320: 0x86DB,
+ 16321: 0x6731,
+ 16322: 0x732A,
+ 16323: 0x8BF8,
+ 16324: 0x8BDB,
+ 16325: 0x9010,
+ 16326: 0x7AF9,
+ 16327: 0x70DB,
+ 16328: 0x716E,
+ 16329: 0x62C4,
+ 16330: 0x77A9,
+ 16331: 0x5631,
+ 16332: 0x4E3B,
+ 16333: 0x8457,
+ 16334: 0x67F1,
+ 16335: 0x52A9,
+ 16336: 0x86C0,
+ 16337: 0x8D2E,
+ 16338: 0x94F8,
+ 16339: 0x7B51,
+ 16340: 0x8B46,
+ 16341: 0x8B47,
+ 16342: 0x8B48,
+ 16343: 0x8B49,
+ 16344: 0x8B4A,
+ 16345: 0x8B4B,
+ 16346: 0x8B4C,
+ 16347: 0x8B4D,
+ 16348: 0x8B4E,
+ 16349: 0x8B4F,
+ 16350: 0x8B50,
+ 16351: 0x8B51,
+ 16352: 0x8B52,
+ 16353: 0x8B53,
+ 16354: 0x8B54,
+ 16355: 0x8B55,
+ 16356: 0x8B56,
+ 16357: 0x8B57,
+ 16358: 0x8B58,
+ 16359: 0x8B59,
+ 16360: 0x8B5A,
+ 16361: 0x8B5B,
+ 16362: 0x8B5C,
+ 16363: 0x8B5D,
+ 16364: 0x8B5E,
+ 16365: 0x8B5F,
+ 16366: 0x8B60,
+ 16367: 0x8B61,
+ 16368: 0x8B62,
+ 16369: 0x8B63,
+ 16370: 0x8B64,
+ 16371: 0x8B65,
+ 16372: 0x8B67,
+ 16373: 0x8B68,
+ 16374: 0x8B69,
+ 16375: 0x8B6A,
+ 16376: 0x8B6B,
+ 16377: 0x8B6D,
+ 16378: 0x8B6E,
+ 16379: 0x8B6F,
+ 16380: 0x8B70,
+ 16381: 0x8B71,
+ 16382: 0x8B72,
+ 16383: 0x8B73,
+ 16384: 0x8B74,
+ 16385: 0x8B75,
+ 16386: 0x8B76,
+ 16387: 0x8B77,
+ 16388: 0x8B78,
+ 16389: 0x8B79,
+ 16390: 0x8B7A,
+ 16391: 0x8B7B,
+ 16392: 0x8B7C,
+ 16393: 0x8B7D,
+ 16394: 0x8B7E,
+ 16395: 0x8B7F,
+ 16396: 0x8B80,
+ 16397: 0x8B81,
+ 16398: 0x8B82,
+ 16399: 0x8B83,
+ 16400: 0x8B84,
+ 16401: 0x8B85,
+ 16402: 0x8B86,
+ 16403: 0x8B87,
+ 16404: 0x8B88,
+ 16405: 0x8B89,
+ 16406: 0x8B8A,
+ 16407: 0x8B8B,
+ 16408: 0x8B8C,
+ 16409: 0x8B8D,
+ 16410: 0x8B8E,
+ 16411: 0x8B8F,
+ 16412: 0x8B90,
+ 16413: 0x8B91,
+ 16414: 0x8B92,
+ 16415: 0x8B93,
+ 16416: 0x8B94,
+ 16417: 0x8B95,
+ 16418: 0x8B96,
+ 16419: 0x8B97,
+ 16420: 0x8B98,
+ 16421: 0x8B99,
+ 16422: 0x8B9A,
+ 16423: 0x8B9B,
+ 16424: 0x8B9C,
+ 16425: 0x8B9D,
+ 16426: 0x8B9E,
+ 16427: 0x8B9F,
+ 16428: 0x8BAC,
+ 16429: 0x8BB1,
+ 16430: 0x8BBB,
+ 16431: 0x8BC7,
+ 16432: 0x8BD0,
+ 16433: 0x8BEA,
+ 16434: 0x8C09,
+ 16435: 0x8C1E,
+ 16436: 0x4F4F,
+ 16437: 0x6CE8,
+ 16438: 0x795D,
+ 16439: 0x9A7B,
+ 16440: 0x6293,
+ 16441: 0x722A,
+ 16442: 0x62FD,
+ 16443: 0x4E13,
+ 16444: 0x7816,
+ 16445: 0x8F6C,
+ 16446: 0x64B0,
+ 16447: 0x8D5A,
+ 16448: 0x7BC6,
+ 16449: 0x6869,
+ 16450: 0x5E84,
+ 16451: 0x88C5,
+ 16452: 0x5986,
+ 16453: 0x649E,
+ 16454: 0x58EE,
+ 16455: 0x72B6,
+ 16456: 0x690E,
+ 16457: 0x9525,
+ 16458: 0x8FFD,
+ 16459: 0x8D58,
+ 16460: 0x5760,
+ 16461: 0x7F00,
+ 16462: 0x8C06,
+ 16463: 0x51C6,
+ 16464: 0x6349,
+ 16465: 0x62D9,
+ 16466: 0x5353,
+ 16467: 0x684C,
+ 16468: 0x7422,
+ 16469: 0x8301,
+ 16470: 0x914C,
+ 16471: 0x5544,
+ 16472: 0x7740,
+ 16473: 0x707C,
+ 16474: 0x6D4A,
+ 16475: 0x5179,
+ 16476: 0x54A8,
+ 16477: 0x8D44,
+ 16478: 0x59FF,
+ 16479: 0x6ECB,
+ 16480: 0x6DC4,
+ 16481: 0x5B5C,
+ 16482: 0x7D2B,
+ 16483: 0x4ED4,
+ 16484: 0x7C7D,
+ 16485: 0x6ED3,
+ 16486: 0x5B50,
+ 16487: 0x81EA,
+ 16488: 0x6E0D,
+ 16489: 0x5B57,
+ 16490: 0x9B03,
+ 16491: 0x68D5,
+ 16492: 0x8E2A,
+ 16493: 0x5B97,
+ 16494: 0x7EFC,
+ 16495: 0x603B,
+ 16496: 0x7EB5,
+ 16497: 0x90B9,
+ 16498: 0x8D70,
+ 16499: 0x594F,
+ 16500: 0x63CD,
+ 16501: 0x79DF,
+ 16502: 0x8DB3,
+ 16503: 0x5352,
+ 16504: 0x65CF,
+ 16505: 0x7956,
+ 16506: 0x8BC5,
+ 16507: 0x963B,
+ 16508: 0x7EC4,
+ 16509: 0x94BB,
+ 16510: 0x7E82,
+ 16511: 0x5634,
+ 16512: 0x9189,
+ 16513: 0x6700,
+ 16514: 0x7F6A,
+ 16515: 0x5C0A,
+ 16516: 0x9075,
+ 16517: 0x6628,
+ 16518: 0x5DE6,
+ 16519: 0x4F50,
+ 16520: 0x67DE,
+ 16521: 0x505A,
+ 16522: 0x4F5C,
+ 16523: 0x5750,
+ 16524: 0x5EA7,
+ 16530: 0x8C38,
+ 16531: 0x8C39,
+ 16532: 0x8C3A,
+ 16533: 0x8C3B,
+ 16534: 0x8C3C,
+ 16535: 0x8C3D,
+ 16536: 0x8C3E,
+ 16537: 0x8C3F,
+ 16538: 0x8C40,
+ 16539: 0x8C42,
+ 16540: 0x8C43,
+ 16541: 0x8C44,
+ 16542: 0x8C45,
+ 16543: 0x8C48,
+ 16544: 0x8C4A,
+ 16545: 0x8C4B,
+ 16546: 0x8C4D,
+ 16547: 0x8C4E,
+ 16548: 0x8C4F,
+ 16549: 0x8C50,
+ 16550: 0x8C51,
+ 16551: 0x8C52,
+ 16552: 0x8C53,
+ 16553: 0x8C54,
+ 16554: 0x8C56,
+ 16555: 0x8C57,
+ 16556: 0x8C58,
+ 16557: 0x8C59,
+ 16558: 0x8C5B,
+ 16559: 0x8C5C,
+ 16560: 0x8C5D,
+ 16561: 0x8C5E,
+ 16562: 0x8C5F,
+ 16563: 0x8C60,
+ 16564: 0x8C63,
+ 16565: 0x8C64,
+ 16566: 0x8C65,
+ 16567: 0x8C66,
+ 16568: 0x8C67,
+ 16569: 0x8C68,
+ 16570: 0x8C69,
+ 16571: 0x8C6C,
+ 16572: 0x8C6D,
+ 16573: 0x8C6E,
+ 16574: 0x8C6F,
+ 16575: 0x8C70,
+ 16576: 0x8C71,
+ 16577: 0x8C72,
+ 16578: 0x8C74,
+ 16579: 0x8C75,
+ 16580: 0x8C76,
+ 16581: 0x8C77,
+ 16582: 0x8C7B,
+ 16583: 0x8C7C,
+ 16584: 0x8C7D,
+ 16585: 0x8C7E,
+ 16586: 0x8C7F,
+ 16587: 0x8C80,
+ 16588: 0x8C81,
+ 16589: 0x8C83,
+ 16590: 0x8C84,
+ 16591: 0x8C86,
+ 16592: 0x8C87,
+ 16593: 0x8C88,
+ 16594: 0x8C8B,
+ 16595: 0x8C8D,
+ 16596: 0x8C8E,
+ 16597: 0x8C8F,
+ 16598: 0x8C90,
+ 16599: 0x8C91,
+ 16600: 0x8C92,
+ 16601: 0x8C93,
+ 16602: 0x8C95,
+ 16603: 0x8C96,
+ 16604: 0x8C97,
+ 16605: 0x8C99,
+ 16606: 0x8C9A,
+ 16607: 0x8C9B,
+ 16608: 0x8C9C,
+ 16609: 0x8C9D,
+ 16610: 0x8C9E,
+ 16611: 0x8C9F,
+ 16612: 0x8CA0,
+ 16613: 0x8CA1,
+ 16614: 0x8CA2,
+ 16615: 0x8CA3,
+ 16616: 0x8CA4,
+ 16617: 0x8CA5,
+ 16618: 0x8CA6,
+ 16619: 0x8CA7,
+ 16620: 0x8CA8,
+ 16621: 0x8CA9,
+ 16622: 0x8CAA,
+ 16623: 0x8CAB,
+ 16624: 0x8CAC,
+ 16625: 0x8CAD,
+ 16626: 0x4E8D,
+ 16627: 0x4E0C,
+ 16628: 0x5140,
+ 16629: 0x4E10,
+ 16630: 0x5EFF,
+ 16631: 0x5345,
+ 16632: 0x4E15,
+ 16633: 0x4E98,
+ 16634: 0x4E1E,
+ 16635: 0x9B32,
+ 16636: 0x5B6C,
+ 16637: 0x5669,
+ 16638: 0x4E28,
+ 16639: 0x79BA,
+ 16640: 0x4E3F,
+ 16641: 0x5315,
+ 16642: 0x4E47,
+ 16643: 0x592D,
+ 16644: 0x723B,
+ 16645: 0x536E,
+ 16646: 0x6C10,
+ 16647: 0x56DF,
+ 16648: 0x80E4,
+ 16649: 0x9997,
+ 16650: 0x6BD3,
+ 16651: 0x777E,
+ 16652: 0x9F17,
+ 16653: 0x4E36,
+ 16654: 0x4E9F,
+ 16655: 0x9F10,
+ 16656: 0x4E5C,
+ 16657: 0x4E69,
+ 16658: 0x4E93,
+ 16659: 0x8288,
+ 16660: 0x5B5B,
+ 16661: 0x556C,
+ 16662: 0x560F,
+ 16663: 0x4EC4,
+ 16664: 0x538D,
+ 16665: 0x539D,
+ 16666: 0x53A3,
+ 16667: 0x53A5,
+ 16668: 0x53AE,
+ 16669: 0x9765,
+ 16670: 0x8D5D,
+ 16671: 0x531A,
+ 16672: 0x53F5,
+ 16673: 0x5326,
+ 16674: 0x532E,
+ 16675: 0x533E,
+ 16676: 0x8D5C,
+ 16677: 0x5366,
+ 16678: 0x5363,
+ 16679: 0x5202,
+ 16680: 0x5208,
+ 16681: 0x520E,
+ 16682: 0x522D,
+ 16683: 0x5233,
+ 16684: 0x523F,
+ 16685: 0x5240,
+ 16686: 0x524C,
+ 16687: 0x525E,
+ 16688: 0x5261,
+ 16689: 0x525C,
+ 16690: 0x84AF,
+ 16691: 0x527D,
+ 16692: 0x5282,
+ 16693: 0x5281,
+ 16694: 0x5290,
+ 16695: 0x5293,
+ 16696: 0x5182,
+ 16697: 0x7F54,
+ 16698: 0x4EBB,
+ 16699: 0x4EC3,
+ 16700: 0x4EC9,
+ 16701: 0x4EC2,
+ 16702: 0x4EE8,
+ 16703: 0x4EE1,
+ 16704: 0x4EEB,
+ 16705: 0x4EDE,
+ 16706: 0x4F1B,
+ 16707: 0x4EF3,
+ 16708: 0x4F22,
+ 16709: 0x4F64,
+ 16710: 0x4EF5,
+ 16711: 0x4F25,
+ 16712: 0x4F27,
+ 16713: 0x4F09,
+ 16714: 0x4F2B,
+ 16715: 0x4F5E,
+ 16716: 0x4F67,
+ 16717: 0x6538,
+ 16718: 0x4F5A,
+ 16719: 0x4F5D,
+ 16720: 0x8CAE,
+ 16721: 0x8CAF,
+ 16722: 0x8CB0,
+ 16723: 0x8CB1,
+ 16724: 0x8CB2,
+ 16725: 0x8CB3,
+ 16726: 0x8CB4,
+ 16727: 0x8CB5,
+ 16728: 0x8CB6,
+ 16729: 0x8CB7,
+ 16730: 0x8CB8,
+ 16731: 0x8CB9,
+ 16732: 0x8CBA,
+ 16733: 0x8CBB,
+ 16734: 0x8CBC,
+ 16735: 0x8CBD,
+ 16736: 0x8CBE,
+ 16737: 0x8CBF,
+ 16738: 0x8CC0,
+ 16739: 0x8CC1,
+ 16740: 0x8CC2,
+ 16741: 0x8CC3,
+ 16742: 0x8CC4,
+ 16743: 0x8CC5,
+ 16744: 0x8CC6,
+ 16745: 0x8CC7,
+ 16746: 0x8CC8,
+ 16747: 0x8CC9,
+ 16748: 0x8CCA,
+ 16749: 0x8CCB,
+ 16750: 0x8CCC,
+ 16751: 0x8CCD,
+ 16752: 0x8CCE,
+ 16753: 0x8CCF,
+ 16754: 0x8CD0,
+ 16755: 0x8CD1,
+ 16756: 0x8CD2,
+ 16757: 0x8CD3,
+ 16758: 0x8CD4,
+ 16759: 0x8CD5,
+ 16760: 0x8CD6,
+ 16761: 0x8CD7,
+ 16762: 0x8CD8,
+ 16763: 0x8CD9,
+ 16764: 0x8CDA,
+ 16765: 0x8CDB,
+ 16766: 0x8CDC,
+ 16767: 0x8CDD,
+ 16768: 0x8CDE,
+ 16769: 0x8CDF,
+ 16770: 0x8CE0,
+ 16771: 0x8CE1,
+ 16772: 0x8CE2,
+ 16773: 0x8CE3,
+ 16774: 0x8CE4,
+ 16775: 0x8CE5,
+ 16776: 0x8CE6,
+ 16777: 0x8CE7,
+ 16778: 0x8CE8,
+ 16779: 0x8CE9,
+ 16780: 0x8CEA,
+ 16781: 0x8CEB,
+ 16782: 0x8CEC,
+ 16783: 0x8CED,
+ 16784: 0x8CEE,
+ 16785: 0x8CEF,
+ 16786: 0x8CF0,
+ 16787: 0x8CF1,
+ 16788: 0x8CF2,
+ 16789: 0x8CF3,
+ 16790: 0x8CF4,
+ 16791: 0x8CF5,
+ 16792: 0x8CF6,
+ 16793: 0x8CF7,
+ 16794: 0x8CF8,
+ 16795: 0x8CF9,
+ 16796: 0x8CFA,
+ 16797: 0x8CFB,
+ 16798: 0x8CFC,
+ 16799: 0x8CFD,
+ 16800: 0x8CFE,
+ 16801: 0x8CFF,
+ 16802: 0x8D00,
+ 16803: 0x8D01,
+ 16804: 0x8D02,
+ 16805: 0x8D03,
+ 16806: 0x8D04,
+ 16807: 0x8D05,
+ 16808: 0x8D06,
+ 16809: 0x8D07,
+ 16810: 0x8D08,
+ 16811: 0x8D09,
+ 16812: 0x8D0A,
+ 16813: 0x8D0B,
+ 16814: 0x8D0C,
+ 16815: 0x8D0D,
+ 16816: 0x4F5F,
+ 16817: 0x4F57,
+ 16818: 0x4F32,
+ 16819: 0x4F3D,
+ 16820: 0x4F76,
+ 16821: 0x4F74,
+ 16822: 0x4F91,
+ 16823: 0x4F89,
+ 16824: 0x4F83,
+ 16825: 0x4F8F,
+ 16826: 0x4F7E,
+ 16827: 0x4F7B,
+ 16828: 0x4FAA,
+ 16829: 0x4F7C,
+ 16830: 0x4FAC,
+ 16831: 0x4F94,
+ 16832: 0x4FE6,
+ 16833: 0x4FE8,
+ 16834: 0x4FEA,
+ 16835: 0x4FC5,
+ 16836: 0x4FDA,
+ 16837: 0x4FE3,
+ 16838: 0x4FDC,
+ 16839: 0x4FD1,
+ 16840: 0x4FDF,
+ 16841: 0x4FF8,
+ 16842: 0x5029,
+ 16843: 0x504C,
+ 16844: 0x4FF3,
+ 16845: 0x502C,
+ 16846: 0x500F,
+ 16847: 0x502E,
+ 16848: 0x502D,
+ 16849: 0x4FFE,
+ 16850: 0x501C,
+ 16851: 0x500C,
+ 16852: 0x5025,
+ 16853: 0x5028,
+ 16854: 0x507E,
+ 16855: 0x5043,
+ 16856: 0x5055,
+ 16857: 0x5048,
+ 16858: 0x504E,
+ 16859: 0x506C,
+ 16860: 0x507B,
+ 16861: 0x50A5,
+ 16862: 0x50A7,
+ 16863: 0x50A9,
+ 16864: 0x50BA,
+ 16865: 0x50D6,
+ 16866: 0x5106,
+ 16867: 0x50ED,
+ 16868: 0x50EC,
+ 16869: 0x50E6,
+ 16870: 0x50EE,
+ 16871: 0x5107,
+ 16872: 0x510B,
+ 16873: 0x4EDD,
+ 16874: 0x6C3D,
+ 16875: 0x4F58,
+ 16876: 0x4F65,
+ 16877: 0x4FCE,
+ 16878: 0x9FA0,
+ 16879: 0x6C46,
+ 16880: 0x7C74,
+ 16881: 0x516E,
+ 16882: 0x5DFD,
+ 16883: 0x9EC9,
+ 16884: 0x9998,
+ 16885: 0x5181,
+ 16886: 0x5914,
+ 16887: 0x52F9,
+ 16888: 0x530D,
+ 16889: 0x8A07,
+ 16890: 0x5310,
+ 16891: 0x51EB,
+ 16892: 0x5919,
+ 16893: 0x5155,
+ 16894: 0x4EA0,
+ 16895: 0x5156,
+ 16896: 0x4EB3,
+ 16897: 0x886E,
+ 16898: 0x88A4,
+ 16899: 0x4EB5,
+ 16900: 0x8114,
+ 16901: 0x88D2,
+ 16902: 0x7980,
+ 16903: 0x5B34,
+ 16904: 0x8803,
+ 16905: 0x7FB8,
+ 16906: 0x51AB,
+ 16907: 0x51B1,
+ 16908: 0x51BD,
+ 16909: 0x51BC,
+ 16910: 0x8D0E,
+ 16911: 0x8D0F,
+ 16912: 0x8D10,
+ 16913: 0x8D11,
+ 16914: 0x8D12,
+ 16915: 0x8D13,
+ 16916: 0x8D14,
+ 16917: 0x8D15,
+ 16918: 0x8D16,
+ 16919: 0x8D17,
+ 16920: 0x8D18,
+ 16921: 0x8D19,
+ 16922: 0x8D1A,
+ 16923: 0x8D1B,
+ 16924: 0x8D1C,
+ 16925: 0x8D20,
+ 16926: 0x8D51,
+ 16927: 0x8D52,
+ 16928: 0x8D57,
+ 16929: 0x8D5F,
+ 16930: 0x8D65,
+ 16931: 0x8D68,
+ 16932: 0x8D69,
+ 16933: 0x8D6A,
+ 16934: 0x8D6C,
+ 16935: 0x8D6E,
+ 16936: 0x8D6F,
+ 16937: 0x8D71,
+ 16938: 0x8D72,
+ 16939: 0x8D78,
+ 16940: 0x8D79,
+ 16941: 0x8D7A,
+ 16942: 0x8D7B,
+ 16943: 0x8D7C,
+ 16944: 0x8D7D,
+ 16945: 0x8D7E,
+ 16946: 0x8D7F,
+ 16947: 0x8D80,
+ 16948: 0x8D82,
+ 16949: 0x8D83,
+ 16950: 0x8D86,
+ 16951: 0x8D87,
+ 16952: 0x8D88,
+ 16953: 0x8D89,
+ 16954: 0x8D8C,
+ 16955: 0x8D8D,
+ 16956: 0x8D8E,
+ 16957: 0x8D8F,
+ 16958: 0x8D90,
+ 16959: 0x8D92,
+ 16960: 0x8D93,
+ 16961: 0x8D95,
+ 16962: 0x8D96,
+ 16963: 0x8D97,
+ 16964: 0x8D98,
+ 16965: 0x8D99,
+ 16966: 0x8D9A,
+ 16967: 0x8D9B,
+ 16968: 0x8D9C,
+ 16969: 0x8D9D,
+ 16970: 0x8D9E,
+ 16971: 0x8DA0,
+ 16972: 0x8DA1,
+ 16973: 0x8DA2,
+ 16974: 0x8DA4,
+ 16975: 0x8DA5,
+ 16976: 0x8DA6,
+ 16977: 0x8DA7,
+ 16978: 0x8DA8,
+ 16979: 0x8DA9,
+ 16980: 0x8DAA,
+ 16981: 0x8DAB,
+ 16982: 0x8DAC,
+ 16983: 0x8DAD,
+ 16984: 0x8DAE,
+ 16985: 0x8DAF,
+ 16986: 0x8DB0,
+ 16987: 0x8DB2,
+ 16988: 0x8DB6,
+ 16989: 0x8DB7,
+ 16990: 0x8DB9,
+ 16991: 0x8DBB,
+ 16992: 0x8DBD,
+ 16993: 0x8DC0,
+ 16994: 0x8DC1,
+ 16995: 0x8DC2,
+ 16996: 0x8DC5,
+ 16997: 0x8DC7,
+ 16998: 0x8DC8,
+ 16999: 0x8DC9,
+ 17000: 0x8DCA,
+ 17001: 0x8DCD,
+ 17002: 0x8DD0,
+ 17003: 0x8DD2,
+ 17004: 0x8DD3,
+ 17005: 0x8DD4,
+ 17006: 0x51C7,
+ 17007: 0x5196,
+ 17008: 0x51A2,
+ 17009: 0x51A5,
+ 17010: 0x8BA0,
+ 17011: 0x8BA6,
+ 17012: 0x8BA7,
+ 17013: 0x8BAA,
+ 17014: 0x8BB4,
+ 17015: 0x8BB5,
+ 17016: 0x8BB7,
+ 17017: 0x8BC2,
+ 17018: 0x8BC3,
+ 17019: 0x8BCB,
+ 17020: 0x8BCF,
+ 17021: 0x8BCE,
+ 17022: 0x8BD2,
+ 17023: 0x8BD3,
+ 17024: 0x8BD4,
+ 17025: 0x8BD6,
+ 17026: 0x8BD8,
+ 17027: 0x8BD9,
+ 17028: 0x8BDC,
+ 17029: 0x8BDF,
+ 17030: 0x8BE0,
+ 17031: 0x8BE4,
+ 17032: 0x8BE8,
+ 17033: 0x8BE9,
+ 17034: 0x8BEE,
+ 17035: 0x8BF0,
+ 17036: 0x8BF3,
+ 17037: 0x8BF6,
+ 17038: 0x8BF9,
+ 17039: 0x8BFC,
+ 17040: 0x8BFF,
+ 17041: 0x8C00,
+ 17042: 0x8C02,
+ 17043: 0x8C04,
+ 17044: 0x8C07,
+ 17045: 0x8C0C,
+ 17046: 0x8C0F,
+ 17047: 0x8C11,
+ 17048: 0x8C12,
+ 17049: 0x8C14,
+ 17050: 0x8C15,
+ 17051: 0x8C16,
+ 17052: 0x8C19,
+ 17053: 0x8C1B,
+ 17054: 0x8C18,
+ 17055: 0x8C1D,
+ 17056: 0x8C1F,
+ 17057: 0x8C20,
+ 17058: 0x8C21,
+ 17059: 0x8C25,
+ 17060: 0x8C27,
+ 17061: 0x8C2A,
+ 17062: 0x8C2B,
+ 17063: 0x8C2E,
+ 17064: 0x8C2F,
+ 17065: 0x8C32,
+ 17066: 0x8C33,
+ 17067: 0x8C35,
+ 17068: 0x8C36,
+ 17069: 0x5369,
+ 17070: 0x537A,
+ 17071: 0x961D,
+ 17072: 0x9622,
+ 17073: 0x9621,
+ 17074: 0x9631,
+ 17075: 0x962A,
+ 17076: 0x963D,
+ 17077: 0x963C,
+ 17078: 0x9642,
+ 17079: 0x9649,
+ 17080: 0x9654,
+ 17081: 0x965F,
+ 17082: 0x9667,
+ 17083: 0x966C,
+ 17084: 0x9672,
+ 17085: 0x9674,
+ 17086: 0x9688,
+ 17087: 0x968D,
+ 17088: 0x9697,
+ 17089: 0x96B0,
+ 17090: 0x9097,
+ 17091: 0x909B,
+ 17092: 0x909D,
+ 17093: 0x9099,
+ 17094: 0x90AC,
+ 17095: 0x90A1,
+ 17096: 0x90B4,
+ 17097: 0x90B3,
+ 17098: 0x90B6,
+ 17099: 0x90BA,
+ 17100: 0x8DD5,
+ 17101: 0x8DD8,
+ 17102: 0x8DD9,
+ 17103: 0x8DDC,
+ 17104: 0x8DE0,
+ 17105: 0x8DE1,
+ 17106: 0x8DE2,
+ 17107: 0x8DE5,
+ 17108: 0x8DE6,
+ 17109: 0x8DE7,
+ 17110: 0x8DE9,
+ 17111: 0x8DED,
+ 17112: 0x8DEE,
+ 17113: 0x8DF0,
+ 17114: 0x8DF1,
+ 17115: 0x8DF2,
+ 17116: 0x8DF4,
+ 17117: 0x8DF6,
+ 17118: 0x8DFC,
+ 17119: 0x8DFE,
+ 17120: 0x8DFF,
+ 17121: 0x8E00,
+ 17122: 0x8E01,
+ 17123: 0x8E02,
+ 17124: 0x8E03,
+ 17125: 0x8E04,
+ 17126: 0x8E06,
+ 17127: 0x8E07,
+ 17128: 0x8E08,
+ 17129: 0x8E0B,
+ 17130: 0x8E0D,
+ 17131: 0x8E0E,
+ 17132: 0x8E10,
+ 17133: 0x8E11,
+ 17134: 0x8E12,
+ 17135: 0x8E13,
+ 17136: 0x8E15,
+ 17137: 0x8E16,
+ 17138: 0x8E17,
+ 17139: 0x8E18,
+ 17140: 0x8E19,
+ 17141: 0x8E1A,
+ 17142: 0x8E1B,
+ 17143: 0x8E1C,
+ 17144: 0x8E20,
+ 17145: 0x8E21,
+ 17146: 0x8E24,
+ 17147: 0x8E25,
+ 17148: 0x8E26,
+ 17149: 0x8E27,
+ 17150: 0x8E28,
+ 17151: 0x8E2B,
+ 17152: 0x8E2D,
+ 17153: 0x8E30,
+ 17154: 0x8E32,
+ 17155: 0x8E33,
+ 17156: 0x8E34,
+ 17157: 0x8E36,
+ 17158: 0x8E37,
+ 17159: 0x8E38,
+ 17160: 0x8E3B,
+ 17161: 0x8E3C,
+ 17162: 0x8E3E,
+ 17163: 0x8E3F,
+ 17164: 0x8E43,
+ 17165: 0x8E45,
+ 17166: 0x8E46,
+ 17167: 0x8E4C,
+ 17168: 0x8E4D,
+ 17169: 0x8E4E,
+ 17170: 0x8E4F,
+ 17171: 0x8E50,
+ 17172: 0x8E53,
+ 17173: 0x8E54,
+ 17174: 0x8E55,
+ 17175: 0x8E56,
+ 17176: 0x8E57,
+ 17177: 0x8E58,
+ 17178: 0x8E5A,
+ 17179: 0x8E5B,
+ 17180: 0x8E5C,
+ 17181: 0x8E5D,
+ 17182: 0x8E5E,
+ 17183: 0x8E5F,
+ 17184: 0x8E60,
+ 17185: 0x8E61,
+ 17186: 0x8E62,
+ 17187: 0x8E63,
+ 17188: 0x8E64,
+ 17189: 0x8E65,
+ 17190: 0x8E67,
+ 17191: 0x8E68,
+ 17192: 0x8E6A,
+ 17193: 0x8E6B,
+ 17194: 0x8E6E,
+ 17195: 0x8E71,
+ 17196: 0x90B8,
+ 17197: 0x90B0,
+ 17198: 0x90CF,
+ 17199: 0x90C5,
+ 17200: 0x90BE,
+ 17201: 0x90D0,
+ 17202: 0x90C4,
+ 17203: 0x90C7,
+ 17204: 0x90D3,
+ 17205: 0x90E6,
+ 17206: 0x90E2,
+ 17207: 0x90DC,
+ 17208: 0x90D7,
+ 17209: 0x90DB,
+ 17210: 0x90EB,
+ 17211: 0x90EF,
+ 17212: 0x90FE,
+ 17213: 0x9104,
+ 17214: 0x9122,
+ 17215: 0x911E,
+ 17216: 0x9123,
+ 17217: 0x9131,
+ 17218: 0x912F,
+ 17219: 0x9139,
+ 17220: 0x9143,
+ 17221: 0x9146,
+ 17222: 0x520D,
+ 17223: 0x5942,
+ 17224: 0x52A2,
+ 17225: 0x52AC,
+ 17226: 0x52AD,
+ 17227: 0x52BE,
+ 17228: 0x54FF,
+ 17229: 0x52D0,
+ 17230: 0x52D6,
+ 17231: 0x52F0,
+ 17232: 0x53DF,
+ 17233: 0x71EE,
+ 17234: 0x77CD,
+ 17235: 0x5EF4,
+ 17236: 0x51F5,
+ 17237: 0x51FC,
+ 17238: 0x9B2F,
+ 17239: 0x53B6,
+ 17240: 0x5F01,
+ 17241: 0x755A,
+ 17242: 0x5DEF,
+ 17243: 0x574C,
+ 17244: 0x57A9,
+ 17245: 0x57A1,
+ 17246: 0x587E,
+ 17247: 0x58BC,
+ 17248: 0x58C5,
+ 17249: 0x58D1,
+ 17250: 0x5729,
+ 17251: 0x572C,
+ 17252: 0x572A,
+ 17253: 0x5733,
+ 17254: 0x5739,
+ 17255: 0x572E,
+ 17256: 0x572F,
+ 17257: 0x575C,
+ 17258: 0x573B,
+ 17259: 0x5742,
+ 17260: 0x5769,
+ 17261: 0x5785,
+ 17262: 0x576B,
+ 17263: 0x5786,
+ 17264: 0x577C,
+ 17265: 0x577B,
+ 17266: 0x5768,
+ 17267: 0x576D,
+ 17268: 0x5776,
+ 17269: 0x5773,
+ 17270: 0x57AD,
+ 17271: 0x57A4,
+ 17272: 0x578C,
+ 17273: 0x57B2,
+ 17274: 0x57CF,
+ 17275: 0x57A7,
+ 17276: 0x57B4,
+ 17277: 0x5793,
+ 17278: 0x57A0,
+ 17279: 0x57D5,
+ 17280: 0x57D8,
+ 17281: 0x57DA,
+ 17282: 0x57D9,
+ 17283: 0x57D2,
+ 17284: 0x57B8,
+ 17285: 0x57F4,
+ 17286: 0x57EF,
+ 17287: 0x57F8,
+ 17288: 0x57E4,
+ 17289: 0x57DD,
+ 17290: 0x8E73,
+ 17291: 0x8E75,
+ 17292: 0x8E77,
+ 17293: 0x8E78,
+ 17294: 0x8E79,
+ 17295: 0x8E7A,
+ 17296: 0x8E7B,
+ 17297: 0x8E7D,
+ 17298: 0x8E7E,
+ 17299: 0x8E80,
+ 17300: 0x8E82,
+ 17301: 0x8E83,
+ 17302: 0x8E84,
+ 17303: 0x8E86,
+ 17304: 0x8E88,
+ 17305: 0x8E89,
+ 17306: 0x8E8A,
+ 17307: 0x8E8B,
+ 17308: 0x8E8C,
+ 17309: 0x8E8D,
+ 17310: 0x8E8E,
+ 17311: 0x8E91,
+ 17312: 0x8E92,
+ 17313: 0x8E93,
+ 17314: 0x8E95,
+ 17315: 0x8E96,
+ 17316: 0x8E97,
+ 17317: 0x8E98,
+ 17318: 0x8E99,
+ 17319: 0x8E9A,
+ 17320: 0x8E9B,
+ 17321: 0x8E9D,
+ 17322: 0x8E9F,
+ 17323: 0x8EA0,
+ 17324: 0x8EA1,
+ 17325: 0x8EA2,
+ 17326: 0x8EA3,
+ 17327: 0x8EA4,
+ 17328: 0x8EA5,
+ 17329: 0x8EA6,
+ 17330: 0x8EA7,
+ 17331: 0x8EA8,
+ 17332: 0x8EA9,
+ 17333: 0x8EAA,
+ 17334: 0x8EAD,
+ 17335: 0x8EAE,
+ 17336: 0x8EB0,
+ 17337: 0x8EB1,
+ 17338: 0x8EB3,
+ 17339: 0x8EB4,
+ 17340: 0x8EB5,
+ 17341: 0x8EB6,
+ 17342: 0x8EB7,
+ 17343: 0x8EB8,
+ 17344: 0x8EB9,
+ 17345: 0x8EBB,
+ 17346: 0x8EBC,
+ 17347: 0x8EBD,
+ 17348: 0x8EBE,
+ 17349: 0x8EBF,
+ 17350: 0x8EC0,
+ 17351: 0x8EC1,
+ 17352: 0x8EC2,
+ 17353: 0x8EC3,
+ 17354: 0x8EC4,
+ 17355: 0x8EC5,
+ 17356: 0x8EC6,
+ 17357: 0x8EC7,
+ 17358: 0x8EC8,
+ 17359: 0x8EC9,
+ 17360: 0x8ECA,
+ 17361: 0x8ECB,
+ 17362: 0x8ECC,
+ 17363: 0x8ECD,
+ 17364: 0x8ECF,
+ 17365: 0x8ED0,
+ 17366: 0x8ED1,
+ 17367: 0x8ED2,
+ 17368: 0x8ED3,
+ 17369: 0x8ED4,
+ 17370: 0x8ED5,
+ 17371: 0x8ED6,
+ 17372: 0x8ED7,
+ 17373: 0x8ED8,
+ 17374: 0x8ED9,
+ 17375: 0x8EDA,
+ 17376: 0x8EDB,
+ 17377: 0x8EDC,
+ 17378: 0x8EDD,
+ 17379: 0x8EDE,
+ 17380: 0x8EDF,
+ 17381: 0x8EE0,
+ 17382: 0x8EE1,
+ 17383: 0x8EE2,
+ 17384: 0x8EE3,
+ 17385: 0x8EE4,
+ 17386: 0x580B,
+ 17387: 0x580D,
+ 17388: 0x57FD,
+ 17389: 0x57ED,
+ 17390: 0x5800,
+ 17391: 0x581E,
+ 17392: 0x5819,
+ 17393: 0x5844,
+ 17394: 0x5820,
+ 17395: 0x5865,
+ 17396: 0x586C,
+ 17397: 0x5881,
+ 17398: 0x5889,
+ 17399: 0x589A,
+ 17400: 0x5880,
+ 17401: 0x99A8,
+ 17402: 0x9F19,
+ 17403: 0x61FF,
+ 17404: 0x8279,
+ 17405: 0x827D,
+ 17406: 0x827F,
+ 17407: 0x828F,
+ 17408: 0x828A,
+ 17409: 0x82A8,
+ 17410: 0x8284,
+ 17411: 0x828E,
+ 17412: 0x8291,
+ 17413: 0x8297,
+ 17414: 0x8299,
+ 17415: 0x82AB,
+ 17416: 0x82B8,
+ 17417: 0x82BE,
+ 17418: 0x82B0,
+ 17419: 0x82C8,
+ 17420: 0x82CA,
+ 17421: 0x82E3,
+ 17422: 0x8298,
+ 17423: 0x82B7,
+ 17424: 0x82AE,
+ 17425: 0x82CB,
+ 17426: 0x82CC,
+ 17427: 0x82C1,
+ 17428: 0x82A9,
+ 17429: 0x82B4,
+ 17430: 0x82A1,
+ 17431: 0x82AA,
+ 17432: 0x829F,
+ 17433: 0x82C4,
+ 17434: 0x82CE,
+ 17435: 0x82A4,
+ 17436: 0x82E1,
+ 17437: 0x8309,
+ 17438: 0x82F7,
+ 17439: 0x82E4,
+ 17440: 0x830F,
+ 17441: 0x8307,
+ 17442: 0x82DC,
+ 17443: 0x82F4,
+ 17444: 0x82D2,
+ 17445: 0x82D8,
+ 17446: 0x830C,
+ 17447: 0x82FB,
+ 17448: 0x82D3,
+ 17449: 0x8311,
+ 17450: 0x831A,
+ 17451: 0x8306,
+ 17452: 0x8314,
+ 17453: 0x8315,
+ 17454: 0x82E0,
+ 17455: 0x82D5,
+ 17456: 0x831C,
+ 17457: 0x8351,
+ 17458: 0x835B,
+ 17459: 0x835C,
+ 17460: 0x8308,
+ 17461: 0x8392,
+ 17462: 0x833C,
+ 17463: 0x8334,
+ 17464: 0x8331,
+ 17465: 0x839B,
+ 17466: 0x835E,
+ 17467: 0x832F,
+ 17468: 0x834F,
+ 17469: 0x8347,
+ 17470: 0x8343,
+ 17471: 0x835F,
+ 17472: 0x8340,
+ 17473: 0x8317,
+ 17474: 0x8360,
+ 17475: 0x832D,
+ 17476: 0x833A,
+ 17477: 0x8333,
+ 17478: 0x8366,
+ 17479: 0x8365,
+ 17480: 0x8EE5,
+ 17481: 0x8EE6,
+ 17482: 0x8EE7,
+ 17483: 0x8EE8,
+ 17484: 0x8EE9,
+ 17485: 0x8EEA,
+ 17486: 0x8EEB,
+ 17487: 0x8EEC,
+ 17488: 0x8EED,
+ 17489: 0x8EEE,
+ 17490: 0x8EEF,
+ 17491: 0x8EF0,
+ 17492: 0x8EF1,
+ 17493: 0x8EF2,
+ 17494: 0x8EF3,
+ 17495: 0x8EF4,
+ 17496: 0x8EF5,
+ 17497: 0x8EF6,
+ 17498: 0x8EF7,
+ 17499: 0x8EF8,
+ 17500: 0x8EF9,
+ 17501: 0x8EFA,
+ 17502: 0x8EFB,
+ 17503: 0x8EFC,
+ 17504: 0x8EFD,
+ 17505: 0x8EFE,
+ 17506: 0x8EFF,
+ 17507: 0x8F00,
+ 17508: 0x8F01,
+ 17509: 0x8F02,
+ 17510: 0x8F03,
+ 17511: 0x8F04,
+ 17512: 0x8F05,
+ 17513: 0x8F06,
+ 17514: 0x8F07,
+ 17515: 0x8F08,
+ 17516: 0x8F09,
+ 17517: 0x8F0A,
+ 17518: 0x8F0B,
+ 17519: 0x8F0C,
+ 17520: 0x8F0D,
+ 17521: 0x8F0E,
+ 17522: 0x8F0F,
+ 17523: 0x8F10,
+ 17524: 0x8F11,
+ 17525: 0x8F12,
+ 17526: 0x8F13,
+ 17527: 0x8F14,
+ 17528: 0x8F15,
+ 17529: 0x8F16,
+ 17530: 0x8F17,
+ 17531: 0x8F18,
+ 17532: 0x8F19,
+ 17533: 0x8F1A,
+ 17534: 0x8F1B,
+ 17535: 0x8F1C,
+ 17536: 0x8F1D,
+ 17537: 0x8F1E,
+ 17538: 0x8F1F,
+ 17539: 0x8F20,
+ 17540: 0x8F21,
+ 17541: 0x8F22,
+ 17542: 0x8F23,
+ 17543: 0x8F24,
+ 17544: 0x8F25,
+ 17545: 0x8F26,
+ 17546: 0x8F27,
+ 17547: 0x8F28,
+ 17548: 0x8F29,
+ 17549: 0x8F2A,
+ 17550: 0x8F2B,
+ 17551: 0x8F2C,
+ 17552: 0x8F2D,
+ 17553: 0x8F2E,
+ 17554: 0x8F2F,
+ 17555: 0x8F30,
+ 17556: 0x8F31,
+ 17557: 0x8F32,
+ 17558: 0x8F33,
+ 17559: 0x8F34,
+ 17560: 0x8F35,
+ 17561: 0x8F36,
+ 17562: 0x8F37,
+ 17563: 0x8F38,
+ 17564: 0x8F39,
+ 17565: 0x8F3A,
+ 17566: 0x8F3B,
+ 17567: 0x8F3C,
+ 17568: 0x8F3D,
+ 17569: 0x8F3E,
+ 17570: 0x8F3F,
+ 17571: 0x8F40,
+ 17572: 0x8F41,
+ 17573: 0x8F42,
+ 17574: 0x8F43,
+ 17575: 0x8F44,
+ 17576: 0x8368,
+ 17577: 0x831B,
+ 17578: 0x8369,
+ 17579: 0x836C,
+ 17580: 0x836A,
+ 17581: 0x836D,
+ 17582: 0x836E,
+ 17583: 0x83B0,
+ 17584: 0x8378,
+ 17585: 0x83B3,
+ 17586: 0x83B4,
+ 17587: 0x83A0,
+ 17588: 0x83AA,
+ 17589: 0x8393,
+ 17590: 0x839C,
+ 17591: 0x8385,
+ 17592: 0x837C,
+ 17593: 0x83B6,
+ 17594: 0x83A9,
+ 17595: 0x837D,
+ 17596: 0x83B8,
+ 17597: 0x837B,
+ 17598: 0x8398,
+ 17599: 0x839E,
+ 17600: 0x83A8,
+ 17601: 0x83BA,
+ 17602: 0x83BC,
+ 17603: 0x83C1,
+ 17604: 0x8401,
+ 17605: 0x83E5,
+ 17606: 0x83D8,
+ 17607: 0x5807,
+ 17608: 0x8418,
+ 17609: 0x840B,
+ 17610: 0x83DD,
+ 17611: 0x83FD,
+ 17612: 0x83D6,
+ 17613: 0x841C,
+ 17614: 0x8438,
+ 17615: 0x8411,
+ 17616: 0x8406,
+ 17617: 0x83D4,
+ 17618: 0x83DF,
+ 17619: 0x840F,
+ 17620: 0x8403,
+ 17621: 0x83F8,
+ 17622: 0x83F9,
+ 17623: 0x83EA,
+ 17624: 0x83C5,
+ 17625: 0x83C0,
+ 17626: 0x8426,
+ 17627: 0x83F0,
+ 17628: 0x83E1,
+ 17629: 0x845C,
+ 17630: 0x8451,
+ 17631: 0x845A,
+ 17632: 0x8459,
+ 17633: 0x8473,
+ 17634: 0x8487,
+ 17635: 0x8488,
+ 17636: 0x847A,
+ 17637: 0x8489,
+ 17638: 0x8478,
+ 17639: 0x843C,
+ 17640: 0x8446,
+ 17641: 0x8469,
+ 17642: 0x8476,
+ 17643: 0x848C,
+ 17644: 0x848E,
+ 17645: 0x8431,
+ 17646: 0x846D,
+ 17647: 0x84C1,
+ 17648: 0x84CD,
+ 17649: 0x84D0,
+ 17650: 0x84E6,
+ 17651: 0x84BD,
+ 17652: 0x84D3,
+ 17653: 0x84CA,
+ 17654: 0x84BF,
+ 17655: 0x84BA,
+ 17656: 0x84E0,
+ 17657: 0x84A1,
+ 17658: 0x84B9,
+ 17659: 0x84B4,
+ 17660: 0x8497,
+ 17661: 0x84E5,
+ 17662: 0x84E3,
+ 17663: 0x850C,
+ 17664: 0x750D,
+ 17665: 0x8538,
+ 17666: 0x84F0,
+ 17667: 0x8539,
+ 17668: 0x851F,
+ 17669: 0x853A,
+ 17670: 0x8F45,
+ 17671: 0x8F46,
+ 17672: 0x8F47,
+ 17673: 0x8F48,
+ 17674: 0x8F49,
+ 17675: 0x8F4A,
+ 17676: 0x8F4B,
+ 17677: 0x8F4C,
+ 17678: 0x8F4D,
+ 17679: 0x8F4E,
+ 17680: 0x8F4F,
+ 17681: 0x8F50,
+ 17682: 0x8F51,
+ 17683: 0x8F52,
+ 17684: 0x8F53,
+ 17685: 0x8F54,
+ 17686: 0x8F55,
+ 17687: 0x8F56,
+ 17688: 0x8F57,
+ 17689: 0x8F58,
+ 17690: 0x8F59,
+ 17691: 0x8F5A,
+ 17692: 0x8F5B,
+ 17693: 0x8F5C,
+ 17694: 0x8F5D,
+ 17695: 0x8F5E,
+ 17696: 0x8F5F,
+ 17697: 0x8F60,
+ 17698: 0x8F61,
+ 17699: 0x8F62,
+ 17700: 0x8F63,
+ 17701: 0x8F64,
+ 17702: 0x8F65,
+ 17703: 0x8F6A,
+ 17704: 0x8F80,
+ 17705: 0x8F8C,
+ 17706: 0x8F92,
+ 17707: 0x8F9D,
+ 17708: 0x8FA0,
+ 17709: 0x8FA1,
+ 17710: 0x8FA2,
+ 17711: 0x8FA4,
+ 17712: 0x8FA5,
+ 17713: 0x8FA6,
+ 17714: 0x8FA7,
+ 17715: 0x8FAA,
+ 17716: 0x8FAC,
+ 17717: 0x8FAD,
+ 17718: 0x8FAE,
+ 17719: 0x8FAF,
+ 17720: 0x8FB2,
+ 17721: 0x8FB3,
+ 17722: 0x8FB4,
+ 17723: 0x8FB5,
+ 17724: 0x8FB7,
+ 17725: 0x8FB8,
+ 17726: 0x8FBA,
+ 17727: 0x8FBB,
+ 17728: 0x8FBC,
+ 17729: 0x8FBF,
+ 17730: 0x8FC0,
+ 17731: 0x8FC3,
+ 17732: 0x8FC6,
+ 17733: 0x8FC9,
+ 17734: 0x8FCA,
+ 17735: 0x8FCB,
+ 17736: 0x8FCC,
+ 17737: 0x8FCD,
+ 17738: 0x8FCF,
+ 17739: 0x8FD2,
+ 17740: 0x8FD6,
+ 17741: 0x8FD7,
+ 17742: 0x8FDA,
+ 17743: 0x8FE0,
+ 17744: 0x8FE1,
+ 17745: 0x8FE3,
+ 17746: 0x8FE7,
+ 17747: 0x8FEC,
+ 17748: 0x8FEF,
+ 17749: 0x8FF1,
+ 17750: 0x8FF2,
+ 17751: 0x8FF4,
+ 17752: 0x8FF5,
+ 17753: 0x8FF6,
+ 17754: 0x8FFA,
+ 17755: 0x8FFB,
+ 17756: 0x8FFC,
+ 17757: 0x8FFE,
+ 17758: 0x8FFF,
+ 17759: 0x9007,
+ 17760: 0x9008,
+ 17761: 0x900C,
+ 17762: 0x900E,
+ 17763: 0x9013,
+ 17764: 0x9015,
+ 17765: 0x9018,
+ 17766: 0x8556,
+ 17767: 0x853B,
+ 17768: 0x84FF,
+ 17769: 0x84FC,
+ 17770: 0x8559,
+ 17771: 0x8548,
+ 17772: 0x8568,
+ 17773: 0x8564,
+ 17774: 0x855E,
+ 17775: 0x857A,
+ 17776: 0x77A2,
+ 17777: 0x8543,
+ 17778: 0x8572,
+ 17779: 0x857B,
+ 17780: 0x85A4,
+ 17781: 0x85A8,
+ 17782: 0x8587,
+ 17783: 0x858F,
+ 17784: 0x8579,
+ 17785: 0x85AE,
+ 17786: 0x859C,
+ 17787: 0x8585,
+ 17788: 0x85B9,
+ 17789: 0x85B7,
+ 17790: 0x85B0,
+ 17791: 0x85D3,
+ 17792: 0x85C1,
+ 17793: 0x85DC,
+ 17794: 0x85FF,
+ 17795: 0x8627,
+ 17796: 0x8605,
+ 17797: 0x8629,
+ 17798: 0x8616,
+ 17799: 0x863C,
+ 17800: 0x5EFE,
+ 17801: 0x5F08,
+ 17802: 0x593C,
+ 17803: 0x5941,
+ 17804: 0x8037,
+ 17805: 0x5955,
+ 17806: 0x595A,
+ 17807: 0x5958,
+ 17808: 0x530F,
+ 17809: 0x5C22,
+ 17810: 0x5C25,
+ 17811: 0x5C2C,
+ 17812: 0x5C34,
+ 17813: 0x624C,
+ 17814: 0x626A,
+ 17815: 0x629F,
+ 17816: 0x62BB,
+ 17817: 0x62CA,
+ 17818: 0x62DA,
+ 17819: 0x62D7,
+ 17820: 0x62EE,
+ 17821: 0x6322,
+ 17822: 0x62F6,
+ 17823: 0x6339,
+ 17824: 0x634B,
+ 17825: 0x6343,
+ 17826: 0x63AD,
+ 17827: 0x63F6,
+ 17828: 0x6371,
+ 17829: 0x637A,
+ 17830: 0x638E,
+ 17831: 0x63B4,
+ 17832: 0x636D,
+ 17833: 0x63AC,
+ 17834: 0x638A,
+ 17835: 0x6369,
+ 17836: 0x63AE,
+ 17837: 0x63BC,
+ 17838: 0x63F2,
+ 17839: 0x63F8,
+ 17840: 0x63E0,
+ 17841: 0x63FF,
+ 17842: 0x63C4,
+ 17843: 0x63DE,
+ 17844: 0x63CE,
+ 17845: 0x6452,
+ 17846: 0x63C6,
+ 17847: 0x63BE,
+ 17848: 0x6445,
+ 17849: 0x6441,
+ 17850: 0x640B,
+ 17851: 0x641B,
+ 17852: 0x6420,
+ 17853: 0x640C,
+ 17854: 0x6426,
+ 17855: 0x6421,
+ 17856: 0x645E,
+ 17857: 0x6484,
+ 17858: 0x646D,
+ 17859: 0x6496,
+ 17860: 0x9019,
+ 17861: 0x901C,
+ 17862: 0x9023,
+ 17863: 0x9024,
+ 17864: 0x9025,
+ 17865: 0x9027,
+ 17866: 0x9028,
+ 17867: 0x9029,
+ 17868: 0x902A,
+ 17869: 0x902B,
+ 17870: 0x902C,
+ 17871: 0x9030,
+ 17872: 0x9031,
+ 17873: 0x9032,
+ 17874: 0x9033,
+ 17875: 0x9034,
+ 17876: 0x9037,
+ 17877: 0x9039,
+ 17878: 0x903A,
+ 17879: 0x903D,
+ 17880: 0x903F,
+ 17881: 0x9040,
+ 17882: 0x9043,
+ 17883: 0x9045,
+ 17884: 0x9046,
+ 17885: 0x9048,
+ 17886: 0x9049,
+ 17887: 0x904A,
+ 17888: 0x904B,
+ 17889: 0x904C,
+ 17890: 0x904E,
+ 17891: 0x9054,
+ 17892: 0x9055,
+ 17893: 0x9056,
+ 17894: 0x9059,
+ 17895: 0x905A,
+ 17896: 0x905C,
+ 17897: 0x905D,
+ 17898: 0x905E,
+ 17899: 0x905F,
+ 17900: 0x9060,
+ 17901: 0x9061,
+ 17902: 0x9064,
+ 17903: 0x9066,
+ 17904: 0x9067,
+ 17905: 0x9069,
+ 17906: 0x906A,
+ 17907: 0x906B,
+ 17908: 0x906C,
+ 17909: 0x906F,
+ 17910: 0x9070,
+ 17911: 0x9071,
+ 17912: 0x9072,
+ 17913: 0x9073,
+ 17914: 0x9076,
+ 17915: 0x9077,
+ 17916: 0x9078,
+ 17917: 0x9079,
+ 17918: 0x907A,
+ 17919: 0x907B,
+ 17920: 0x907C,
+ 17921: 0x907E,
+ 17922: 0x9081,
+ 17923: 0x9084,
+ 17924: 0x9085,
+ 17925: 0x9086,
+ 17926: 0x9087,
+ 17927: 0x9089,
+ 17928: 0x908A,
+ 17929: 0x908C,
+ 17930: 0x908D,
+ 17931: 0x908E,
+ 17932: 0x908F,
+ 17933: 0x9090,
+ 17934: 0x9092,
+ 17935: 0x9094,
+ 17936: 0x9096,
+ 17937: 0x9098,
+ 17938: 0x909A,
+ 17939: 0x909C,
+ 17940: 0x909E,
+ 17941: 0x909F,
+ 17942: 0x90A0,
+ 17943: 0x90A4,
+ 17944: 0x90A5,
+ 17945: 0x90A7,
+ 17946: 0x90A8,
+ 17947: 0x90A9,
+ 17948: 0x90AB,
+ 17949: 0x90AD,
+ 17950: 0x90B2,
+ 17951: 0x90B7,
+ 17952: 0x90BC,
+ 17953: 0x90BD,
+ 17954: 0x90BF,
+ 17955: 0x90C0,
+ 17956: 0x647A,
+ 17957: 0x64B7,
+ 17958: 0x64B8,
+ 17959: 0x6499,
+ 17960: 0x64BA,
+ 17961: 0x64C0,
+ 17962: 0x64D0,
+ 17963: 0x64D7,
+ 17964: 0x64E4,
+ 17965: 0x64E2,
+ 17966: 0x6509,
+ 17967: 0x6525,
+ 17968: 0x652E,
+ 17969: 0x5F0B,
+ 17970: 0x5FD2,
+ 17971: 0x7519,
+ 17972: 0x5F11,
+ 17973: 0x535F,
+ 17974: 0x53F1,
+ 17975: 0x53FD,
+ 17976: 0x53E9,
+ 17977: 0x53E8,
+ 17978: 0x53FB,
+ 17979: 0x5412,
+ 17980: 0x5416,
+ 17981: 0x5406,
+ 17982: 0x544B,
+ 17983: 0x5452,
+ 17984: 0x5453,
+ 17985: 0x5454,
+ 17986: 0x5456,
+ 17987: 0x5443,
+ 17988: 0x5421,
+ 17989: 0x5457,
+ 17990: 0x5459,
+ 17991: 0x5423,
+ 17992: 0x5432,
+ 17993: 0x5482,
+ 17994: 0x5494,
+ 17995: 0x5477,
+ 17996: 0x5471,
+ 17997: 0x5464,
+ 17998: 0x549A,
+ 17999: 0x549B,
+ 18000: 0x5484,
+ 18001: 0x5476,
+ 18002: 0x5466,
+ 18003: 0x549D,
+ 18004: 0x54D0,
+ 18005: 0x54AD,
+ 18006: 0x54C2,
+ 18007: 0x54B4,
+ 18008: 0x54D2,
+ 18009: 0x54A7,
+ 18010: 0x54A6,
+ 18011: 0x54D3,
+ 18012: 0x54D4,
+ 18013: 0x5472,
+ 18014: 0x54A3,
+ 18015: 0x54D5,
+ 18016: 0x54BB,
+ 18017: 0x54BF,
+ 18018: 0x54CC,
+ 18019: 0x54D9,
+ 18020: 0x54DA,
+ 18021: 0x54DC,
+ 18022: 0x54A9,
+ 18023: 0x54AA,
+ 18024: 0x54A4,
+ 18025: 0x54DD,
+ 18026: 0x54CF,
+ 18027: 0x54DE,
+ 18028: 0x551B,
+ 18029: 0x54E7,
+ 18030: 0x5520,
+ 18031: 0x54FD,
+ 18032: 0x5514,
+ 18033: 0x54F3,
+ 18034: 0x5522,
+ 18035: 0x5523,
+ 18036: 0x550F,
+ 18037: 0x5511,
+ 18038: 0x5527,
+ 18039: 0x552A,
+ 18040: 0x5567,
+ 18041: 0x558F,
+ 18042: 0x55B5,
+ 18043: 0x5549,
+ 18044: 0x556D,
+ 18045: 0x5541,
+ 18046: 0x5555,
+ 18047: 0x553F,
+ 18048: 0x5550,
+ 18049: 0x553C,
+ 18050: 0x90C2,
+ 18051: 0x90C3,
+ 18052: 0x90C6,
+ 18053: 0x90C8,
+ 18054: 0x90C9,
+ 18055: 0x90CB,
+ 18056: 0x90CC,
+ 18057: 0x90CD,
+ 18058: 0x90D2,
+ 18059: 0x90D4,
+ 18060: 0x90D5,
+ 18061: 0x90D6,
+ 18062: 0x90D8,
+ 18063: 0x90D9,
+ 18064: 0x90DA,
+ 18065: 0x90DE,
+ 18066: 0x90DF,
+ 18067: 0x90E0,
+ 18068: 0x90E3,
+ 18069: 0x90E4,
+ 18070: 0x90E5,
+ 18071: 0x90E9,
+ 18072: 0x90EA,
+ 18073: 0x90EC,
+ 18074: 0x90EE,
+ 18075: 0x90F0,
+ 18076: 0x90F1,
+ 18077: 0x90F2,
+ 18078: 0x90F3,
+ 18079: 0x90F5,
+ 18080: 0x90F6,
+ 18081: 0x90F7,
+ 18082: 0x90F9,
+ 18083: 0x90FA,
+ 18084: 0x90FB,
+ 18085: 0x90FC,
+ 18086: 0x90FF,
+ 18087: 0x9100,
+ 18088: 0x9101,
+ 18089: 0x9103,
+ 18090: 0x9105,
+ 18091: 0x9106,
+ 18092: 0x9107,
+ 18093: 0x9108,
+ 18094: 0x9109,
+ 18095: 0x910A,
+ 18096: 0x910B,
+ 18097: 0x910C,
+ 18098: 0x910D,
+ 18099: 0x910E,
+ 18100: 0x910F,
+ 18101: 0x9110,
+ 18102: 0x9111,
+ 18103: 0x9112,
+ 18104: 0x9113,
+ 18105: 0x9114,
+ 18106: 0x9115,
+ 18107: 0x9116,
+ 18108: 0x9117,
+ 18109: 0x9118,
+ 18110: 0x911A,
+ 18111: 0x911B,
+ 18112: 0x911C,
+ 18113: 0x911D,
+ 18114: 0x911F,
+ 18115: 0x9120,
+ 18116: 0x9121,
+ 18117: 0x9124,
+ 18118: 0x9125,
+ 18119: 0x9126,
+ 18120: 0x9127,
+ 18121: 0x9128,
+ 18122: 0x9129,
+ 18123: 0x912A,
+ 18124: 0x912B,
+ 18125: 0x912C,
+ 18126: 0x912D,
+ 18127: 0x912E,
+ 18128: 0x9130,
+ 18129: 0x9132,
+ 18130: 0x9133,
+ 18131: 0x9134,
+ 18132: 0x9135,
+ 18133: 0x9136,
+ 18134: 0x9137,
+ 18135: 0x9138,
+ 18136: 0x913A,
+ 18137: 0x913B,
+ 18138: 0x913C,
+ 18139: 0x913D,
+ 18140: 0x913E,
+ 18141: 0x913F,
+ 18142: 0x9140,
+ 18143: 0x9141,
+ 18144: 0x9142,
+ 18145: 0x9144,
+ 18146: 0x5537,
+ 18147: 0x5556,
+ 18148: 0x5575,
+ 18149: 0x5576,
+ 18150: 0x5577,
+ 18151: 0x5533,
+ 18152: 0x5530,
+ 18153: 0x555C,
+ 18154: 0x558B,
+ 18155: 0x55D2,
+ 18156: 0x5583,
+ 18157: 0x55B1,
+ 18158: 0x55B9,
+ 18159: 0x5588,
+ 18160: 0x5581,
+ 18161: 0x559F,
+ 18162: 0x557E,
+ 18163: 0x55D6,
+ 18164: 0x5591,
+ 18165: 0x557B,
+ 18166: 0x55DF,
+ 18167: 0x55BD,
+ 18168: 0x55BE,
+ 18169: 0x5594,
+ 18170: 0x5599,
+ 18171: 0x55EA,
+ 18172: 0x55F7,
+ 18173: 0x55C9,
+ 18174: 0x561F,
+ 18175: 0x55D1,
+ 18176: 0x55EB,
+ 18177: 0x55EC,
+ 18178: 0x55D4,
+ 18179: 0x55E6,
+ 18180: 0x55DD,
+ 18181: 0x55C4,
+ 18182: 0x55EF,
+ 18183: 0x55E5,
+ 18184: 0x55F2,
+ 18185: 0x55F3,
+ 18186: 0x55CC,
+ 18187: 0x55CD,
+ 18188: 0x55E8,
+ 18189: 0x55F5,
+ 18190: 0x55E4,
+ 18191: 0x8F94,
+ 18192: 0x561E,
+ 18193: 0x5608,
+ 18194: 0x560C,
+ 18195: 0x5601,
+ 18196: 0x5624,
+ 18197: 0x5623,
+ 18198: 0x55FE,
+ 18199: 0x5600,
+ 18200: 0x5627,
+ 18201: 0x562D,
+ 18202: 0x5658,
+ 18203: 0x5639,
+ 18204: 0x5657,
+ 18205: 0x562C,
+ 18206: 0x564D,
+ 18207: 0x5662,
+ 18208: 0x5659,
+ 18209: 0x565C,
+ 18210: 0x564C,
+ 18211: 0x5654,
+ 18212: 0x5686,
+ 18213: 0x5664,
+ 18214: 0x5671,
+ 18215: 0x566B,
+ 18216: 0x567B,
+ 18217: 0x567C,
+ 18218: 0x5685,
+ 18219: 0x5693,
+ 18220: 0x56AF,
+ 18221: 0x56D4,
+ 18222: 0x56D7,
+ 18223: 0x56DD,
+ 18224: 0x56E1,
+ 18225: 0x56F5,
+ 18226: 0x56EB,
+ 18227: 0x56F9,
+ 18228: 0x56FF,
+ 18229: 0x5704,
+ 18230: 0x570A,
+ 18231: 0x5709,
+ 18232: 0x571C,
+ 18233: 0x5E0F,
+ 18234: 0x5E19,
+ 18235: 0x5E14,
+ 18236: 0x5E11,
+ 18237: 0x5E31,
+ 18238: 0x5E3B,
+ 18239: 0x5E3C,
+ 18240: 0x9145,
+ 18241: 0x9147,
+ 18242: 0x9148,
+ 18243: 0x9151,
+ 18244: 0x9153,
+ 18245: 0x9154,
+ 18246: 0x9155,
+ 18247: 0x9156,
+ 18248: 0x9158,
+ 18249: 0x9159,
+ 18250: 0x915B,
+ 18251: 0x915C,
+ 18252: 0x915F,
+ 18253: 0x9160,
+ 18254: 0x9166,
+ 18255: 0x9167,
+ 18256: 0x9168,
+ 18257: 0x916B,
+ 18258: 0x916D,
+ 18259: 0x9173,
+ 18260: 0x917A,
+ 18261: 0x917B,
+ 18262: 0x917C,
+ 18263: 0x9180,
+ 18264: 0x9181,
+ 18265: 0x9182,
+ 18266: 0x9183,
+ 18267: 0x9184,
+ 18268: 0x9186,
+ 18269: 0x9188,
+ 18270: 0x918A,
+ 18271: 0x918E,
+ 18272: 0x918F,
+ 18273: 0x9193,
+ 18274: 0x9194,
+ 18275: 0x9195,
+ 18276: 0x9196,
+ 18277: 0x9197,
+ 18278: 0x9198,
+ 18279: 0x9199,
+ 18280: 0x919C,
+ 18281: 0x919D,
+ 18282: 0x919E,
+ 18283: 0x919F,
+ 18284: 0x91A0,
+ 18285: 0x91A1,
+ 18286: 0x91A4,
+ 18287: 0x91A5,
+ 18288: 0x91A6,
+ 18289: 0x91A7,
+ 18290: 0x91A8,
+ 18291: 0x91A9,
+ 18292: 0x91AB,
+ 18293: 0x91AC,
+ 18294: 0x91B0,
+ 18295: 0x91B1,
+ 18296: 0x91B2,
+ 18297: 0x91B3,
+ 18298: 0x91B6,
+ 18299: 0x91B7,
+ 18300: 0x91B8,
+ 18301: 0x91B9,
+ 18302: 0x91BB,
+ 18303: 0x91BC,
+ 18304: 0x91BD,
+ 18305: 0x91BE,
+ 18306: 0x91BF,
+ 18307: 0x91C0,
+ 18308: 0x91C1,
+ 18309: 0x91C2,
+ 18310: 0x91C3,
+ 18311: 0x91C4,
+ 18312: 0x91C5,
+ 18313: 0x91C6,
+ 18314: 0x91C8,
+ 18315: 0x91CB,
+ 18316: 0x91D0,
+ 18317: 0x91D2,
+ 18318: 0x91D3,
+ 18319: 0x91D4,
+ 18320: 0x91D5,
+ 18321: 0x91D6,
+ 18322: 0x91D7,
+ 18323: 0x91D8,
+ 18324: 0x91D9,
+ 18325: 0x91DA,
+ 18326: 0x91DB,
+ 18327: 0x91DD,
+ 18328: 0x91DE,
+ 18329: 0x91DF,
+ 18330: 0x91E0,
+ 18331: 0x91E1,
+ 18332: 0x91E2,
+ 18333: 0x91E3,
+ 18334: 0x91E4,
+ 18335: 0x91E5,
+ 18336: 0x5E37,
+ 18337: 0x5E44,
+ 18338: 0x5E54,
+ 18339: 0x5E5B,
+ 18340: 0x5E5E,
+ 18341: 0x5E61,
+ 18342: 0x5C8C,
+ 18343: 0x5C7A,
+ 18344: 0x5C8D,
+ 18345: 0x5C90,
+ 18346: 0x5C96,
+ 18347: 0x5C88,
+ 18348: 0x5C98,
+ 18349: 0x5C99,
+ 18350: 0x5C91,
+ 18351: 0x5C9A,
+ 18352: 0x5C9C,
+ 18353: 0x5CB5,
+ 18354: 0x5CA2,
+ 18355: 0x5CBD,
+ 18356: 0x5CAC,
+ 18357: 0x5CAB,
+ 18358: 0x5CB1,
+ 18359: 0x5CA3,
+ 18360: 0x5CC1,
+ 18361: 0x5CB7,
+ 18362: 0x5CC4,
+ 18363: 0x5CD2,
+ 18364: 0x5CE4,
+ 18365: 0x5CCB,
+ 18366: 0x5CE5,
+ 18367: 0x5D02,
+ 18368: 0x5D03,
+ 18369: 0x5D27,
+ 18370: 0x5D26,
+ 18371: 0x5D2E,
+ 18372: 0x5D24,
+ 18373: 0x5D1E,
+ 18374: 0x5D06,
+ 18375: 0x5D1B,
+ 18376: 0x5D58,
+ 18377: 0x5D3E,
+ 18378: 0x5D34,
+ 18379: 0x5D3D,
+ 18380: 0x5D6C,
+ 18381: 0x5D5B,
+ 18382: 0x5D6F,
+ 18383: 0x5D5D,
+ 18384: 0x5D6B,
+ 18385: 0x5D4B,
+ 18386: 0x5D4A,
+ 18387: 0x5D69,
+ 18388: 0x5D74,
+ 18389: 0x5D82,
+ 18390: 0x5D99,
+ 18391: 0x5D9D,
+ 18392: 0x8C73,
+ 18393: 0x5DB7,
+ 18394: 0x5DC5,
+ 18395: 0x5F73,
+ 18396: 0x5F77,
+ 18397: 0x5F82,
+ 18398: 0x5F87,
+ 18399: 0x5F89,
+ 18400: 0x5F8C,
+ 18401: 0x5F95,
+ 18402: 0x5F99,
+ 18403: 0x5F9C,
+ 18404: 0x5FA8,
+ 18405: 0x5FAD,
+ 18406: 0x5FB5,
+ 18407: 0x5FBC,
+ 18408: 0x8862,
+ 18409: 0x5F61,
+ 18410: 0x72AD,
+ 18411: 0x72B0,
+ 18412: 0x72B4,
+ 18413: 0x72B7,
+ 18414: 0x72B8,
+ 18415: 0x72C3,
+ 18416: 0x72C1,
+ 18417: 0x72CE,
+ 18418: 0x72CD,
+ 18419: 0x72D2,
+ 18420: 0x72E8,
+ 18421: 0x72EF,
+ 18422: 0x72E9,
+ 18423: 0x72F2,
+ 18424: 0x72F4,
+ 18425: 0x72F7,
+ 18426: 0x7301,
+ 18427: 0x72F3,
+ 18428: 0x7303,
+ 18429: 0x72FA,
+ 18430: 0x91E6,
+ 18431: 0x91E7,
+ 18432: 0x91E8,
+ 18433: 0x91E9,
+ 18434: 0x91EA,
+ 18435: 0x91EB,
+ 18436: 0x91EC,
+ 18437: 0x91ED,
+ 18438: 0x91EE,
+ 18439: 0x91EF,
+ 18440: 0x91F0,
+ 18441: 0x91F1,
+ 18442: 0x91F2,
+ 18443: 0x91F3,
+ 18444: 0x91F4,
+ 18445: 0x91F5,
+ 18446: 0x91F6,
+ 18447: 0x91F7,
+ 18448: 0x91F8,
+ 18449: 0x91F9,
+ 18450: 0x91FA,
+ 18451: 0x91FB,
+ 18452: 0x91FC,
+ 18453: 0x91FD,
+ 18454: 0x91FE,
+ 18455: 0x91FF,
+ 18456: 0x9200,
+ 18457: 0x9201,
+ 18458: 0x9202,
+ 18459: 0x9203,
+ 18460: 0x9204,
+ 18461: 0x9205,
+ 18462: 0x9206,
+ 18463: 0x9207,
+ 18464: 0x9208,
+ 18465: 0x9209,
+ 18466: 0x920A,
+ 18467: 0x920B,
+ 18468: 0x920C,
+ 18469: 0x920D,
+ 18470: 0x920E,
+ 18471: 0x920F,
+ 18472: 0x9210,
+ 18473: 0x9211,
+ 18474: 0x9212,
+ 18475: 0x9213,
+ 18476: 0x9214,
+ 18477: 0x9215,
+ 18478: 0x9216,
+ 18479: 0x9217,
+ 18480: 0x9218,
+ 18481: 0x9219,
+ 18482: 0x921A,
+ 18483: 0x921B,
+ 18484: 0x921C,
+ 18485: 0x921D,
+ 18486: 0x921E,
+ 18487: 0x921F,
+ 18488: 0x9220,
+ 18489: 0x9221,
+ 18490: 0x9222,
+ 18491: 0x9223,
+ 18492: 0x9224,
+ 18493: 0x9225,
+ 18494: 0x9226,
+ 18495: 0x9227,
+ 18496: 0x9228,
+ 18497: 0x9229,
+ 18498: 0x922A,
+ 18499: 0x922B,
+ 18500: 0x922C,
+ 18501: 0x922D,
+ 18502: 0x922E,
+ 18503: 0x922F,
+ 18504: 0x9230,
+ 18505: 0x9231,
+ 18506: 0x9232,
+ 18507: 0x9233,
+ 18508: 0x9234,
+ 18509: 0x9235,
+ 18510: 0x9236,
+ 18511: 0x9237,
+ 18512: 0x9238,
+ 18513: 0x9239,
+ 18514: 0x923A,
+ 18515: 0x923B,
+ 18516: 0x923C,
+ 18517: 0x923D,
+ 18518: 0x923E,
+ 18519: 0x923F,
+ 18520: 0x9240,
+ 18521: 0x9241,
+ 18522: 0x9242,
+ 18523: 0x9243,
+ 18524: 0x9244,
+ 18525: 0x9245,
+ 18526: 0x72FB,
+ 18527: 0x7317,
+ 18528: 0x7313,
+ 18529: 0x7321,
+ 18530: 0x730A,
+ 18531: 0x731E,
+ 18532: 0x731D,
+ 18533: 0x7315,
+ 18534: 0x7322,
+ 18535: 0x7339,
+ 18536: 0x7325,
+ 18537: 0x732C,
+ 18538: 0x7338,
+ 18539: 0x7331,
+ 18540: 0x7350,
+ 18541: 0x734D,
+ 18542: 0x7357,
+ 18543: 0x7360,
+ 18544: 0x736C,
+ 18545: 0x736F,
+ 18546: 0x737E,
+ 18547: 0x821B,
+ 18548: 0x5925,
+ 18549: 0x98E7,
+ 18550: 0x5924,
+ 18551: 0x5902,
+ 18552: 0x9963,
+ 18553: 0x9967,
+ 18554: 0x9968,
+ 18555: 0x9969,
+ 18556: 0x996A,
+ 18557: 0x996B,
+ 18558: 0x996C,
+ 18559: 0x9974,
+ 18560: 0x9977,
+ 18561: 0x997D,
+ 18562: 0x9980,
+ 18563: 0x9984,
+ 18564: 0x9987,
+ 18565: 0x998A,
+ 18566: 0x998D,
+ 18567: 0x9990,
+ 18568: 0x9991,
+ 18569: 0x9993,
+ 18570: 0x9994,
+ 18571: 0x9995,
+ 18572: 0x5E80,
+ 18573: 0x5E91,
+ 18574: 0x5E8B,
+ 18575: 0x5E96,
+ 18576: 0x5EA5,
+ 18577: 0x5EA0,
+ 18578: 0x5EB9,
+ 18579: 0x5EB5,
+ 18580: 0x5EBE,
+ 18581: 0x5EB3,
+ 18582: 0x8D53,
+ 18583: 0x5ED2,
+ 18584: 0x5ED1,
+ 18585: 0x5EDB,
+ 18586: 0x5EE8,
+ 18587: 0x5EEA,
+ 18588: 0x81BA,
+ 18589: 0x5FC4,
+ 18590: 0x5FC9,
+ 18591: 0x5FD6,
+ 18592: 0x5FCF,
+ 18593: 0x6003,
+ 18594: 0x5FEE,
+ 18595: 0x6004,
+ 18596: 0x5FE1,
+ 18597: 0x5FE4,
+ 18598: 0x5FFE,
+ 18599: 0x6005,
+ 18600: 0x6006,
+ 18601: 0x5FEA,
+ 18602: 0x5FED,
+ 18603: 0x5FF8,
+ 18604: 0x6019,
+ 18605: 0x6035,
+ 18606: 0x6026,
+ 18607: 0x601B,
+ 18608: 0x600F,
+ 18609: 0x600D,
+ 18610: 0x6029,
+ 18611: 0x602B,
+ 18612: 0x600A,
+ 18613: 0x603F,
+ 18614: 0x6021,
+ 18615: 0x6078,
+ 18616: 0x6079,
+ 18617: 0x607B,
+ 18618: 0x607A,
+ 18619: 0x6042,
+ 18620: 0x9246,
+ 18621: 0x9247,
+ 18622: 0x9248,
+ 18623: 0x9249,
+ 18624: 0x924A,
+ 18625: 0x924B,
+ 18626: 0x924C,
+ 18627: 0x924D,
+ 18628: 0x924E,
+ 18629: 0x924F,
+ 18630: 0x9250,
+ 18631: 0x9251,
+ 18632: 0x9252,
+ 18633: 0x9253,
+ 18634: 0x9254,
+ 18635: 0x9255,
+ 18636: 0x9256,
+ 18637: 0x9257,
+ 18638: 0x9258,
+ 18639: 0x9259,
+ 18640: 0x925A,
+ 18641: 0x925B,
+ 18642: 0x925C,
+ 18643: 0x925D,
+ 18644: 0x925E,
+ 18645: 0x925F,
+ 18646: 0x9260,
+ 18647: 0x9261,
+ 18648: 0x9262,
+ 18649: 0x9263,
+ 18650: 0x9264,
+ 18651: 0x9265,
+ 18652: 0x9266,
+ 18653: 0x9267,
+ 18654: 0x9268,
+ 18655: 0x9269,
+ 18656: 0x926A,
+ 18657: 0x926B,
+ 18658: 0x926C,
+ 18659: 0x926D,
+ 18660: 0x926E,
+ 18661: 0x926F,
+ 18662: 0x9270,
+ 18663: 0x9271,
+ 18664: 0x9272,
+ 18665: 0x9273,
+ 18666: 0x9275,
+ 18667: 0x9276,
+ 18668: 0x9277,
+ 18669: 0x9278,
+ 18670: 0x9279,
+ 18671: 0x927A,
+ 18672: 0x927B,
+ 18673: 0x927C,
+ 18674: 0x927D,
+ 18675: 0x927E,
+ 18676: 0x927F,
+ 18677: 0x9280,
+ 18678: 0x9281,
+ 18679: 0x9282,
+ 18680: 0x9283,
+ 18681: 0x9284,
+ 18682: 0x9285,
+ 18683: 0x9286,
+ 18684: 0x9287,
+ 18685: 0x9288,
+ 18686: 0x9289,
+ 18687: 0x928A,
+ 18688: 0x928B,
+ 18689: 0x928C,
+ 18690: 0x928D,
+ 18691: 0x928F,
+ 18692: 0x9290,
+ 18693: 0x9291,
+ 18694: 0x9292,
+ 18695: 0x9293,
+ 18696: 0x9294,
+ 18697: 0x9295,
+ 18698: 0x9296,
+ 18699: 0x9297,
+ 18700: 0x9298,
+ 18701: 0x9299,
+ 18702: 0x929A,
+ 18703: 0x929B,
+ 18704: 0x929C,
+ 18705: 0x929D,
+ 18706: 0x929E,
+ 18707: 0x929F,
+ 18708: 0x92A0,
+ 18709: 0x92A1,
+ 18710: 0x92A2,
+ 18711: 0x92A3,
+ 18712: 0x92A4,
+ 18713: 0x92A5,
+ 18714: 0x92A6,
+ 18715: 0x92A7,
+ 18716: 0x606A,
+ 18717: 0x607D,
+ 18718: 0x6096,
+ 18719: 0x609A,
+ 18720: 0x60AD,
+ 18721: 0x609D,
+ 18722: 0x6083,
+ 18723: 0x6092,
+ 18724: 0x608C,
+ 18725: 0x609B,
+ 18726: 0x60EC,
+ 18727: 0x60BB,
+ 18728: 0x60B1,
+ 18729: 0x60DD,
+ 18730: 0x60D8,
+ 18731: 0x60C6,
+ 18732: 0x60DA,
+ 18733: 0x60B4,
+ 18734: 0x6120,
+ 18735: 0x6126,
+ 18736: 0x6115,
+ 18737: 0x6123,
+ 18738: 0x60F4,
+ 18739: 0x6100,
+ 18740: 0x610E,
+ 18741: 0x612B,
+ 18742: 0x614A,
+ 18743: 0x6175,
+ 18744: 0x61AC,
+ 18745: 0x6194,
+ 18746: 0x61A7,
+ 18747: 0x61B7,
+ 18748: 0x61D4,
+ 18749: 0x61F5,
+ 18750: 0x5FDD,
+ 18751: 0x96B3,
+ 18752: 0x95E9,
+ 18753: 0x95EB,
+ 18754: 0x95F1,
+ 18755: 0x95F3,
+ 18756: 0x95F5,
+ 18757: 0x95F6,
+ 18758: 0x95FC,
+ 18759: 0x95FE,
+ 18760: 0x9603,
+ 18761: 0x9604,
+ 18762: 0x9606,
+ 18763: 0x9608,
+ 18764: 0x960A,
+ 18765: 0x960B,
+ 18766: 0x960C,
+ 18767: 0x960D,
+ 18768: 0x960F,
+ 18769: 0x9612,
+ 18770: 0x9615,
+ 18771: 0x9616,
+ 18772: 0x9617,
+ 18773: 0x9619,
+ 18774: 0x961A,
+ 18775: 0x4E2C,
+ 18776: 0x723F,
+ 18777: 0x6215,
+ 18778: 0x6C35,
+ 18779: 0x6C54,
+ 18780: 0x6C5C,
+ 18781: 0x6C4A,
+ 18782: 0x6CA3,
+ 18783: 0x6C85,
+ 18784: 0x6C90,
+ 18785: 0x6C94,
+ 18786: 0x6C8C,
+ 18787: 0x6C68,
+ 18788: 0x6C69,
+ 18789: 0x6C74,
+ 18790: 0x6C76,
+ 18791: 0x6C86,
+ 18792: 0x6CA9,
+ 18793: 0x6CD0,
+ 18794: 0x6CD4,
+ 18795: 0x6CAD,
+ 18796: 0x6CF7,
+ 18797: 0x6CF8,
+ 18798: 0x6CF1,
+ 18799: 0x6CD7,
+ 18800: 0x6CB2,
+ 18801: 0x6CE0,
+ 18802: 0x6CD6,
+ 18803: 0x6CFA,
+ 18804: 0x6CEB,
+ 18805: 0x6CEE,
+ 18806: 0x6CB1,
+ 18807: 0x6CD3,
+ 18808: 0x6CEF,
+ 18809: 0x6CFE,
+ 18810: 0x92A8,
+ 18811: 0x92A9,
+ 18812: 0x92AA,
+ 18813: 0x92AB,
+ 18814: 0x92AC,
+ 18815: 0x92AD,
+ 18816: 0x92AF,
+ 18817: 0x92B0,
+ 18818: 0x92B1,
+ 18819: 0x92B2,
+ 18820: 0x92B3,
+ 18821: 0x92B4,
+ 18822: 0x92B5,
+ 18823: 0x92B6,
+ 18824: 0x92B7,
+ 18825: 0x92B8,
+ 18826: 0x92B9,
+ 18827: 0x92BA,
+ 18828: 0x92BB,
+ 18829: 0x92BC,
+ 18830: 0x92BD,
+ 18831: 0x92BE,
+ 18832: 0x92BF,
+ 18833: 0x92C0,
+ 18834: 0x92C1,
+ 18835: 0x92C2,
+ 18836: 0x92C3,
+ 18837: 0x92C4,
+ 18838: 0x92C5,
+ 18839: 0x92C6,
+ 18840: 0x92C7,
+ 18841: 0x92C9,
+ 18842: 0x92CA,
+ 18843: 0x92CB,
+ 18844: 0x92CC,
+ 18845: 0x92CD,
+ 18846: 0x92CE,
+ 18847: 0x92CF,
+ 18848: 0x92D0,
+ 18849: 0x92D1,
+ 18850: 0x92D2,
+ 18851: 0x92D3,
+ 18852: 0x92D4,
+ 18853: 0x92D5,
+ 18854: 0x92D6,
+ 18855: 0x92D7,
+ 18856: 0x92D8,
+ 18857: 0x92D9,
+ 18858: 0x92DA,
+ 18859: 0x92DB,
+ 18860: 0x92DC,
+ 18861: 0x92DD,
+ 18862: 0x92DE,
+ 18863: 0x92DF,
+ 18864: 0x92E0,
+ 18865: 0x92E1,
+ 18866: 0x92E2,
+ 18867: 0x92E3,
+ 18868: 0x92E4,
+ 18869: 0x92E5,
+ 18870: 0x92E6,
+ 18871: 0x92E7,
+ 18872: 0x92E8,
+ 18873: 0x92E9,
+ 18874: 0x92EA,
+ 18875: 0x92EB,
+ 18876: 0x92EC,
+ 18877: 0x92ED,
+ 18878: 0x92EE,
+ 18879: 0x92EF,
+ 18880: 0x92F0,
+ 18881: 0x92F1,
+ 18882: 0x92F2,
+ 18883: 0x92F3,
+ 18884: 0x92F4,
+ 18885: 0x92F5,
+ 18886: 0x92F6,
+ 18887: 0x92F7,
+ 18888: 0x92F8,
+ 18889: 0x92F9,
+ 18890: 0x92FA,
+ 18891: 0x92FB,
+ 18892: 0x92FC,
+ 18893: 0x92FD,
+ 18894: 0x92FE,
+ 18895: 0x92FF,
+ 18896: 0x9300,
+ 18897: 0x9301,
+ 18898: 0x9302,
+ 18899: 0x9303,
+ 18900: 0x9304,
+ 18901: 0x9305,
+ 18902: 0x9306,
+ 18903: 0x9307,
+ 18904: 0x9308,
+ 18905: 0x9309,
+ 18906: 0x6D39,
+ 18907: 0x6D27,
+ 18908: 0x6D0C,
+ 18909: 0x6D43,
+ 18910: 0x6D48,
+ 18911: 0x6D07,
+ 18912: 0x6D04,
+ 18913: 0x6D19,
+ 18914: 0x6D0E,
+ 18915: 0x6D2B,
+ 18916: 0x6D4D,
+ 18917: 0x6D2E,
+ 18918: 0x6D35,
+ 18919: 0x6D1A,
+ 18920: 0x6D4F,
+ 18921: 0x6D52,
+ 18922: 0x6D54,
+ 18923: 0x6D33,
+ 18924: 0x6D91,
+ 18925: 0x6D6F,
+ 18926: 0x6D9E,
+ 18927: 0x6DA0,
+ 18928: 0x6D5E,
+ 18929: 0x6D93,
+ 18930: 0x6D94,
+ 18931: 0x6D5C,
+ 18932: 0x6D60,
+ 18933: 0x6D7C,
+ 18934: 0x6D63,
+ 18935: 0x6E1A,
+ 18936: 0x6DC7,
+ 18937: 0x6DC5,
+ 18938: 0x6DDE,
+ 18939: 0x6E0E,
+ 18940: 0x6DBF,
+ 18941: 0x6DE0,
+ 18942: 0x6E11,
+ 18943: 0x6DE6,
+ 18944: 0x6DDD,
+ 18945: 0x6DD9,
+ 18946: 0x6E16,
+ 18947: 0x6DAB,
+ 18948: 0x6E0C,
+ 18949: 0x6DAE,
+ 18950: 0x6E2B,
+ 18951: 0x6E6E,
+ 18952: 0x6E4E,
+ 18953: 0x6E6B,
+ 18954: 0x6EB2,
+ 18955: 0x6E5F,
+ 18956: 0x6E86,
+ 18957: 0x6E53,
+ 18958: 0x6E54,
+ 18959: 0x6E32,
+ 18960: 0x6E25,
+ 18961: 0x6E44,
+ 18962: 0x6EDF,
+ 18963: 0x6EB1,
+ 18964: 0x6E98,
+ 18965: 0x6EE0,
+ 18966: 0x6F2D,
+ 18967: 0x6EE2,
+ 18968: 0x6EA5,
+ 18969: 0x6EA7,
+ 18970: 0x6EBD,
+ 18971: 0x6EBB,
+ 18972: 0x6EB7,
+ 18973: 0x6ED7,
+ 18974: 0x6EB4,
+ 18975: 0x6ECF,
+ 18976: 0x6E8F,
+ 18977: 0x6EC2,
+ 18978: 0x6E9F,
+ 18979: 0x6F62,
+ 18980: 0x6F46,
+ 18981: 0x6F47,
+ 18982: 0x6F24,
+ 18983: 0x6F15,
+ 18984: 0x6EF9,
+ 18985: 0x6F2F,
+ 18986: 0x6F36,
+ 18987: 0x6F4B,
+ 18988: 0x6F74,
+ 18989: 0x6F2A,
+ 18990: 0x6F09,
+ 18991: 0x6F29,
+ 18992: 0x6F89,
+ 18993: 0x6F8D,
+ 18994: 0x6F8C,
+ 18995: 0x6F78,
+ 18996: 0x6F72,
+ 18997: 0x6F7C,
+ 18998: 0x6F7A,
+ 18999: 0x6FD1,
+ 19000: 0x930A,
+ 19001: 0x930B,
+ 19002: 0x930C,
+ 19003: 0x930D,
+ 19004: 0x930E,
+ 19005: 0x930F,
+ 19006: 0x9310,
+ 19007: 0x9311,
+ 19008: 0x9312,
+ 19009: 0x9313,
+ 19010: 0x9314,
+ 19011: 0x9315,
+ 19012: 0x9316,
+ 19013: 0x9317,
+ 19014: 0x9318,
+ 19015: 0x9319,
+ 19016: 0x931A,
+ 19017: 0x931B,
+ 19018: 0x931C,
+ 19019: 0x931D,
+ 19020: 0x931E,
+ 19021: 0x931F,
+ 19022: 0x9320,
+ 19023: 0x9321,
+ 19024: 0x9322,
+ 19025: 0x9323,
+ 19026: 0x9324,
+ 19027: 0x9325,
+ 19028: 0x9326,
+ 19029: 0x9327,
+ 19030: 0x9328,
+ 19031: 0x9329,
+ 19032: 0x932A,
+ 19033: 0x932B,
+ 19034: 0x932C,
+ 19035: 0x932D,
+ 19036: 0x932E,
+ 19037: 0x932F,
+ 19038: 0x9330,
+ 19039: 0x9331,
+ 19040: 0x9332,
+ 19041: 0x9333,
+ 19042: 0x9334,
+ 19043: 0x9335,
+ 19044: 0x9336,
+ 19045: 0x9337,
+ 19046: 0x9338,
+ 19047: 0x9339,
+ 19048: 0x933A,
+ 19049: 0x933B,
+ 19050: 0x933C,
+ 19051: 0x933D,
+ 19052: 0x933F,
+ 19053: 0x9340,
+ 19054: 0x9341,
+ 19055: 0x9342,
+ 19056: 0x9343,
+ 19057: 0x9344,
+ 19058: 0x9345,
+ 19059: 0x9346,
+ 19060: 0x9347,
+ 19061: 0x9348,
+ 19062: 0x9349,
+ 19063: 0x934A,
+ 19064: 0x934B,
+ 19065: 0x934C,
+ 19066: 0x934D,
+ 19067: 0x934E,
+ 19068: 0x934F,
+ 19069: 0x9350,
+ 19070: 0x9351,
+ 19071: 0x9352,
+ 19072: 0x9353,
+ 19073: 0x9354,
+ 19074: 0x9355,
+ 19075: 0x9356,
+ 19076: 0x9357,
+ 19077: 0x9358,
+ 19078: 0x9359,
+ 19079: 0x935A,
+ 19080: 0x935B,
+ 19081: 0x935C,
+ 19082: 0x935D,
+ 19083: 0x935E,
+ 19084: 0x935F,
+ 19085: 0x9360,
+ 19086: 0x9361,
+ 19087: 0x9362,
+ 19088: 0x9363,
+ 19089: 0x9364,
+ 19090: 0x9365,
+ 19091: 0x9366,
+ 19092: 0x9367,
+ 19093: 0x9368,
+ 19094: 0x9369,
+ 19095: 0x936B,
+ 19096: 0x6FC9,
+ 19097: 0x6FA7,
+ 19098: 0x6FB9,
+ 19099: 0x6FB6,
+ 19100: 0x6FC2,
+ 19101: 0x6FE1,
+ 19102: 0x6FEE,
+ 19103: 0x6FDE,
+ 19104: 0x6FE0,
+ 19105: 0x6FEF,
+ 19106: 0x701A,
+ 19107: 0x7023,
+ 19108: 0x701B,
+ 19109: 0x7039,
+ 19110: 0x7035,
+ 19111: 0x704F,
+ 19112: 0x705E,
+ 19113: 0x5B80,
+ 19114: 0x5B84,
+ 19115: 0x5B95,
+ 19116: 0x5B93,
+ 19117: 0x5BA5,
+ 19118: 0x5BB8,
+ 19119: 0x752F,
+ 19120: 0x9A9E,
+ 19121: 0x6434,
+ 19122: 0x5BE4,
+ 19123: 0x5BEE,
+ 19124: 0x8930,
+ 19125: 0x5BF0,
+ 19126: 0x8E47,
+ 19127: 0x8B07,
+ 19128: 0x8FB6,
+ 19129: 0x8FD3,
+ 19130: 0x8FD5,
+ 19131: 0x8FE5,
+ 19132: 0x8FEE,
+ 19133: 0x8FE4,
+ 19134: 0x8FE9,
+ 19135: 0x8FE6,
+ 19136: 0x8FF3,
+ 19137: 0x8FE8,
+ 19138: 0x9005,
+ 19139: 0x9004,
+ 19140: 0x900B,
+ 19141: 0x9026,
+ 19142: 0x9011,
+ 19143: 0x900D,
+ 19144: 0x9016,
+ 19145: 0x9021,
+ 19146: 0x9035,
+ 19147: 0x9036,
+ 19148: 0x902D,
+ 19149: 0x902F,
+ 19150: 0x9044,
+ 19151: 0x9051,
+ 19152: 0x9052,
+ 19153: 0x9050,
+ 19154: 0x9068,
+ 19155: 0x9058,
+ 19156: 0x9062,
+ 19157: 0x905B,
+ 19158: 0x66B9,
+ 19159: 0x9074,
+ 19160: 0x907D,
+ 19161: 0x9082,
+ 19162: 0x9088,
+ 19163: 0x9083,
+ 19164: 0x908B,
+ 19165: 0x5F50,
+ 19166: 0x5F57,
+ 19167: 0x5F56,
+ 19168: 0x5F58,
+ 19169: 0x5C3B,
+ 19170: 0x54AB,
+ 19171: 0x5C50,
+ 19172: 0x5C59,
+ 19173: 0x5B71,
+ 19174: 0x5C63,
+ 19175: 0x5C66,
+ 19176: 0x7FBC,
+ 19177: 0x5F2A,
+ 19178: 0x5F29,
+ 19179: 0x5F2D,
+ 19180: 0x8274,
+ 19181: 0x5F3C,
+ 19182: 0x9B3B,
+ 19183: 0x5C6E,
+ 19184: 0x5981,
+ 19185: 0x5983,
+ 19186: 0x598D,
+ 19187: 0x59A9,
+ 19188: 0x59AA,
+ 19189: 0x59A3,
+ 19190: 0x936C,
+ 19191: 0x936D,
+ 19192: 0x936E,
+ 19193: 0x936F,
+ 19194: 0x9370,
+ 19195: 0x9371,
+ 19196: 0x9372,
+ 19197: 0x9373,
+ 19198: 0x9374,
+ 19199: 0x9375,
+ 19200: 0x9376,
+ 19201: 0x9377,
+ 19202: 0x9378,
+ 19203: 0x9379,
+ 19204: 0x937A,
+ 19205: 0x937B,
+ 19206: 0x937C,
+ 19207: 0x937D,
+ 19208: 0x937E,
+ 19209: 0x937F,
+ 19210: 0x9380,
+ 19211: 0x9381,
+ 19212: 0x9382,
+ 19213: 0x9383,
+ 19214: 0x9384,
+ 19215: 0x9385,
+ 19216: 0x9386,
+ 19217: 0x9387,
+ 19218: 0x9388,
+ 19219: 0x9389,
+ 19220: 0x938A,
+ 19221: 0x938B,
+ 19222: 0x938C,
+ 19223: 0x938D,
+ 19224: 0x938E,
+ 19225: 0x9390,
+ 19226: 0x9391,
+ 19227: 0x9392,
+ 19228: 0x9393,
+ 19229: 0x9394,
+ 19230: 0x9395,
+ 19231: 0x9396,
+ 19232: 0x9397,
+ 19233: 0x9398,
+ 19234: 0x9399,
+ 19235: 0x939A,
+ 19236: 0x939B,
+ 19237: 0x939C,
+ 19238: 0x939D,
+ 19239: 0x939E,
+ 19240: 0x939F,
+ 19241: 0x93A0,
+ 19242: 0x93A1,
+ 19243: 0x93A2,
+ 19244: 0x93A3,
+ 19245: 0x93A4,
+ 19246: 0x93A5,
+ 19247: 0x93A6,
+ 19248: 0x93A7,
+ 19249: 0x93A8,
+ 19250: 0x93A9,
+ 19251: 0x93AA,
+ 19252: 0x93AB,
+ 19253: 0x93AC,
+ 19254: 0x93AD,
+ 19255: 0x93AE,
+ 19256: 0x93AF,
+ 19257: 0x93B0,
+ 19258: 0x93B1,
+ 19259: 0x93B2,
+ 19260: 0x93B3,
+ 19261: 0x93B4,
+ 19262: 0x93B5,
+ 19263: 0x93B6,
+ 19264: 0x93B7,
+ 19265: 0x93B8,
+ 19266: 0x93B9,
+ 19267: 0x93BA,
+ 19268: 0x93BB,
+ 19269: 0x93BC,
+ 19270: 0x93BD,
+ 19271: 0x93BE,
+ 19272: 0x93BF,
+ 19273: 0x93C0,
+ 19274: 0x93C1,
+ 19275: 0x93C2,
+ 19276: 0x93C3,
+ 19277: 0x93C4,
+ 19278: 0x93C5,
+ 19279: 0x93C6,
+ 19280: 0x93C7,
+ 19281: 0x93C8,
+ 19282: 0x93C9,
+ 19283: 0x93CB,
+ 19284: 0x93CC,
+ 19285: 0x93CD,
+ 19286: 0x5997,
+ 19287: 0x59CA,
+ 19288: 0x59AB,
+ 19289: 0x599E,
+ 19290: 0x59A4,
+ 19291: 0x59D2,
+ 19292: 0x59B2,
+ 19293: 0x59AF,
+ 19294: 0x59D7,
+ 19295: 0x59BE,
+ 19296: 0x5A05,
+ 19297: 0x5A06,
+ 19298: 0x59DD,
+ 19299: 0x5A08,
+ 19300: 0x59E3,
+ 19301: 0x59D8,
+ 19302: 0x59F9,
+ 19303: 0x5A0C,
+ 19304: 0x5A09,
+ 19305: 0x5A32,
+ 19306: 0x5A34,
+ 19307: 0x5A11,
+ 19308: 0x5A23,
+ 19309: 0x5A13,
+ 19310: 0x5A40,
+ 19311: 0x5A67,
+ 19312: 0x5A4A,
+ 19313: 0x5A55,
+ 19314: 0x5A3C,
+ 19315: 0x5A62,
+ 19316: 0x5A75,
+ 19317: 0x80EC,
+ 19318: 0x5AAA,
+ 19319: 0x5A9B,
+ 19320: 0x5A77,
+ 19321: 0x5A7A,
+ 19322: 0x5ABE,
+ 19323: 0x5AEB,
+ 19324: 0x5AB2,
+ 19325: 0x5AD2,
+ 19326: 0x5AD4,
+ 19327: 0x5AB8,
+ 19328: 0x5AE0,
+ 19329: 0x5AE3,
+ 19330: 0x5AF1,
+ 19331: 0x5AD6,
+ 19332: 0x5AE6,
+ 19333: 0x5AD8,
+ 19334: 0x5ADC,
+ 19335: 0x5B09,
+ 19336: 0x5B17,
+ 19337: 0x5B16,
+ 19338: 0x5B32,
+ 19339: 0x5B37,
+ 19340: 0x5B40,
+ 19341: 0x5C15,
+ 19342: 0x5C1C,
+ 19343: 0x5B5A,
+ 19344: 0x5B65,
+ 19345: 0x5B73,
+ 19346: 0x5B51,
+ 19347: 0x5B53,
+ 19348: 0x5B62,
+ 19349: 0x9A75,
+ 19350: 0x9A77,
+ 19351: 0x9A78,
+ 19352: 0x9A7A,
+ 19353: 0x9A7F,
+ 19354: 0x9A7D,
+ 19355: 0x9A80,
+ 19356: 0x9A81,
+ 19357: 0x9A85,
+ 19358: 0x9A88,
+ 19359: 0x9A8A,
+ 19360: 0x9A90,
+ 19361: 0x9A92,
+ 19362: 0x9A93,
+ 19363: 0x9A96,
+ 19364: 0x9A98,
+ 19365: 0x9A9B,
+ 19366: 0x9A9C,
+ 19367: 0x9A9D,
+ 19368: 0x9A9F,
+ 19369: 0x9AA0,
+ 19370: 0x9AA2,
+ 19371: 0x9AA3,
+ 19372: 0x9AA5,
+ 19373: 0x9AA7,
+ 19374: 0x7E9F,
+ 19375: 0x7EA1,
+ 19376: 0x7EA3,
+ 19377: 0x7EA5,
+ 19378: 0x7EA8,
+ 19379: 0x7EA9,
+ 19380: 0x93CE,
+ 19381: 0x93CF,
+ 19382: 0x93D0,
+ 19383: 0x93D1,
+ 19384: 0x93D2,
+ 19385: 0x93D3,
+ 19386: 0x93D4,
+ 19387: 0x93D5,
+ 19388: 0x93D7,
+ 19389: 0x93D8,
+ 19390: 0x93D9,
+ 19391: 0x93DA,
+ 19392: 0x93DB,
+ 19393: 0x93DC,
+ 19394: 0x93DD,
+ 19395: 0x93DE,
+ 19396: 0x93DF,
+ 19397: 0x93E0,
+ 19398: 0x93E1,
+ 19399: 0x93E2,
+ 19400: 0x93E3,
+ 19401: 0x93E4,
+ 19402: 0x93E5,
+ 19403: 0x93E6,
+ 19404: 0x93E7,
+ 19405: 0x93E8,
+ 19406: 0x93E9,
+ 19407: 0x93EA,
+ 19408: 0x93EB,
+ 19409: 0x93EC,
+ 19410: 0x93ED,
+ 19411: 0x93EE,
+ 19412: 0x93EF,
+ 19413: 0x93F0,
+ 19414: 0x93F1,
+ 19415: 0x93F2,
+ 19416: 0x93F3,
+ 19417: 0x93F4,
+ 19418: 0x93F5,
+ 19419: 0x93F6,
+ 19420: 0x93F7,
+ 19421: 0x93F8,
+ 19422: 0x93F9,
+ 19423: 0x93FA,
+ 19424: 0x93FB,
+ 19425: 0x93FC,
+ 19426: 0x93FD,
+ 19427: 0x93FE,
+ 19428: 0x93FF,
+ 19429: 0x9400,
+ 19430: 0x9401,
+ 19431: 0x9402,
+ 19432: 0x9403,
+ 19433: 0x9404,
+ 19434: 0x9405,
+ 19435: 0x9406,
+ 19436: 0x9407,
+ 19437: 0x9408,
+ 19438: 0x9409,
+ 19439: 0x940A,
+ 19440: 0x940B,
+ 19441: 0x940C,
+ 19442: 0x940D,
+ 19443: 0x940E,
+ 19444: 0x940F,
+ 19445: 0x9410,
+ 19446: 0x9411,
+ 19447: 0x9412,
+ 19448: 0x9413,
+ 19449: 0x9414,
+ 19450: 0x9415,
+ 19451: 0x9416,
+ 19452: 0x9417,
+ 19453: 0x9418,
+ 19454: 0x9419,
+ 19455: 0x941A,
+ 19456: 0x941B,
+ 19457: 0x941C,
+ 19458: 0x941D,
+ 19459: 0x941E,
+ 19460: 0x941F,
+ 19461: 0x9420,
+ 19462: 0x9421,
+ 19463: 0x9422,
+ 19464: 0x9423,
+ 19465: 0x9424,
+ 19466: 0x9425,
+ 19467: 0x9426,
+ 19468: 0x9427,
+ 19469: 0x9428,
+ 19470: 0x9429,
+ 19471: 0x942A,
+ 19472: 0x942B,
+ 19473: 0x942C,
+ 19474: 0x942D,
+ 19475: 0x942E,
+ 19476: 0x7EAD,
+ 19477: 0x7EB0,
+ 19478: 0x7EBE,
+ 19479: 0x7EC0,
+ 19480: 0x7EC1,
+ 19481: 0x7EC2,
+ 19482: 0x7EC9,
+ 19483: 0x7ECB,
+ 19484: 0x7ECC,
+ 19485: 0x7ED0,
+ 19486: 0x7ED4,
+ 19487: 0x7ED7,
+ 19488: 0x7EDB,
+ 19489: 0x7EE0,
+ 19490: 0x7EE1,
+ 19491: 0x7EE8,
+ 19492: 0x7EEB,
+ 19493: 0x7EEE,
+ 19494: 0x7EEF,
+ 19495: 0x7EF1,
+ 19496: 0x7EF2,
+ 19497: 0x7F0D,
+ 19498: 0x7EF6,
+ 19499: 0x7EFA,
+ 19500: 0x7EFB,
+ 19501: 0x7EFE,
+ 19502: 0x7F01,
+ 19503: 0x7F02,
+ 19504: 0x7F03,
+ 19505: 0x7F07,
+ 19506: 0x7F08,
+ 19507: 0x7F0B,
+ 19508: 0x7F0C,
+ 19509: 0x7F0F,
+ 19510: 0x7F11,
+ 19511: 0x7F12,
+ 19512: 0x7F17,
+ 19513: 0x7F19,
+ 19514: 0x7F1C,
+ 19515: 0x7F1B,
+ 19516: 0x7F1F,
+ 19517: 0x7F21,
+ 19518: 0x7F22,
+ 19519: 0x7F23,
+ 19520: 0x7F24,
+ 19521: 0x7F25,
+ 19522: 0x7F26,
+ 19523: 0x7F27,
+ 19524: 0x7F2A,
+ 19525: 0x7F2B,
+ 19526: 0x7F2C,
+ 19527: 0x7F2D,
+ 19528: 0x7F2F,
+ 19529: 0x7F30,
+ 19530: 0x7F31,
+ 19531: 0x7F32,
+ 19532: 0x7F33,
+ 19533: 0x7F35,
+ 19534: 0x5E7A,
+ 19535: 0x757F,
+ 19536: 0x5DDB,
+ 19537: 0x753E,
+ 19538: 0x9095,
+ 19539: 0x738E,
+ 19540: 0x7391,
+ 19541: 0x73AE,
+ 19542: 0x73A2,
+ 19543: 0x739F,
+ 19544: 0x73CF,
+ 19545: 0x73C2,
+ 19546: 0x73D1,
+ 19547: 0x73B7,
+ 19548: 0x73B3,
+ 19549: 0x73C0,
+ 19550: 0x73C9,
+ 19551: 0x73C8,
+ 19552: 0x73E5,
+ 19553: 0x73D9,
+ 19554: 0x987C,
+ 19555: 0x740A,
+ 19556: 0x73E9,
+ 19557: 0x73E7,
+ 19558: 0x73DE,
+ 19559: 0x73BA,
+ 19560: 0x73F2,
+ 19561: 0x740F,
+ 19562: 0x742A,
+ 19563: 0x745B,
+ 19564: 0x7426,
+ 19565: 0x7425,
+ 19566: 0x7428,
+ 19567: 0x7430,
+ 19568: 0x742E,
+ 19569: 0x742C,
+ 19570: 0x942F,
+ 19571: 0x9430,
+ 19572: 0x9431,
+ 19573: 0x9432,
+ 19574: 0x9433,
+ 19575: 0x9434,
+ 19576: 0x9435,
+ 19577: 0x9436,
+ 19578: 0x9437,
+ 19579: 0x9438,
+ 19580: 0x9439,
+ 19581: 0x943A,
+ 19582: 0x943B,
+ 19583: 0x943C,
+ 19584: 0x943D,
+ 19585: 0x943F,
+ 19586: 0x9440,
+ 19587: 0x9441,
+ 19588: 0x9442,
+ 19589: 0x9443,
+ 19590: 0x9444,
+ 19591: 0x9445,
+ 19592: 0x9446,
+ 19593: 0x9447,
+ 19594: 0x9448,
+ 19595: 0x9449,
+ 19596: 0x944A,
+ 19597: 0x944B,
+ 19598: 0x944C,
+ 19599: 0x944D,
+ 19600: 0x944E,
+ 19601: 0x944F,
+ 19602: 0x9450,
+ 19603: 0x9451,
+ 19604: 0x9452,
+ 19605: 0x9453,
+ 19606: 0x9454,
+ 19607: 0x9455,
+ 19608: 0x9456,
+ 19609: 0x9457,
+ 19610: 0x9458,
+ 19611: 0x9459,
+ 19612: 0x945A,
+ 19613: 0x945B,
+ 19614: 0x945C,
+ 19615: 0x945D,
+ 19616: 0x945E,
+ 19617: 0x945F,
+ 19618: 0x9460,
+ 19619: 0x9461,
+ 19620: 0x9462,
+ 19621: 0x9463,
+ 19622: 0x9464,
+ 19623: 0x9465,
+ 19624: 0x9466,
+ 19625: 0x9467,
+ 19626: 0x9468,
+ 19627: 0x9469,
+ 19628: 0x946A,
+ 19629: 0x946C,
+ 19630: 0x946D,
+ 19631: 0x946E,
+ 19632: 0x946F,
+ 19633: 0x9470,
+ 19634: 0x9471,
+ 19635: 0x9472,
+ 19636: 0x9473,
+ 19637: 0x9474,
+ 19638: 0x9475,
+ 19639: 0x9476,
+ 19640: 0x9477,
+ 19641: 0x9478,
+ 19642: 0x9479,
+ 19643: 0x947A,
+ 19644: 0x947B,
+ 19645: 0x947C,
+ 19646: 0x947D,
+ 19647: 0x947E,
+ 19648: 0x947F,
+ 19649: 0x9480,
+ 19650: 0x9481,
+ 19651: 0x9482,
+ 19652: 0x9483,
+ 19653: 0x9484,
+ 19654: 0x9491,
+ 19655: 0x9496,
+ 19656: 0x9498,
+ 19657: 0x94C7,
+ 19658: 0x94CF,
+ 19659: 0x94D3,
+ 19660: 0x94D4,
+ 19661: 0x94DA,
+ 19662: 0x94E6,
+ 19663: 0x94FB,
+ 19664: 0x951C,
+ 19665: 0x9520,
+ 19666: 0x741B,
+ 19667: 0x741A,
+ 19668: 0x7441,
+ 19669: 0x745C,
+ 19670: 0x7457,
+ 19671: 0x7455,
+ 19672: 0x7459,
+ 19673: 0x7477,
+ 19674: 0x746D,
+ 19675: 0x747E,
+ 19676: 0x749C,
+ 19677: 0x748E,
+ 19678: 0x7480,
+ 19679: 0x7481,
+ 19680: 0x7487,
+ 19681: 0x748B,
+ 19682: 0x749E,
+ 19683: 0x74A8,
+ 19684: 0x74A9,
+ 19685: 0x7490,
+ 19686: 0x74A7,
+ 19687: 0x74D2,
+ 19688: 0x74BA,
+ 19689: 0x97EA,
+ 19690: 0x97EB,
+ 19691: 0x97EC,
+ 19692: 0x674C,
+ 19693: 0x6753,
+ 19694: 0x675E,
+ 19695: 0x6748,
+ 19696: 0x6769,
+ 19697: 0x67A5,
+ 19698: 0x6787,
+ 19699: 0x676A,
+ 19700: 0x6773,
+ 19701: 0x6798,
+ 19702: 0x67A7,
+ 19703: 0x6775,
+ 19704: 0x67A8,
+ 19705: 0x679E,
+ 19706: 0x67AD,
+ 19707: 0x678B,
+ 19708: 0x6777,
+ 19709: 0x677C,
+ 19710: 0x67F0,
+ 19711: 0x6809,
+ 19712: 0x67D8,
+ 19713: 0x680A,
+ 19714: 0x67E9,
+ 19715: 0x67B0,
+ 19716: 0x680C,
+ 19717: 0x67D9,
+ 19718: 0x67B5,
+ 19719: 0x67DA,
+ 19720: 0x67B3,
+ 19721: 0x67DD,
+ 19722: 0x6800,
+ 19723: 0x67C3,
+ 19724: 0x67B8,
+ 19725: 0x67E2,
+ 19726: 0x680E,
+ 19727: 0x67C1,
+ 19728: 0x67FD,
+ 19729: 0x6832,
+ 19730: 0x6833,
+ 19731: 0x6860,
+ 19732: 0x6861,
+ 19733: 0x684E,
+ 19734: 0x6862,
+ 19735: 0x6844,
+ 19736: 0x6864,
+ 19737: 0x6883,
+ 19738: 0x681D,
+ 19739: 0x6855,
+ 19740: 0x6866,
+ 19741: 0x6841,
+ 19742: 0x6867,
+ 19743: 0x6840,
+ 19744: 0x683E,
+ 19745: 0x684A,
+ 19746: 0x6849,
+ 19747: 0x6829,
+ 19748: 0x68B5,
+ 19749: 0x688F,
+ 19750: 0x6874,
+ 19751: 0x6877,
+ 19752: 0x6893,
+ 19753: 0x686B,
+ 19754: 0x68C2,
+ 19755: 0x696E,
+ 19756: 0x68FC,
+ 19757: 0x691F,
+ 19758: 0x6920,
+ 19759: 0x68F9,
+ 19760: 0x9527,
+ 19761: 0x9533,
+ 19762: 0x953D,
+ 19763: 0x9543,
+ 19764: 0x9548,
+ 19765: 0x954B,
+ 19766: 0x9555,
+ 19767: 0x955A,
+ 19768: 0x9560,
+ 19769: 0x956E,
+ 19770: 0x9574,
+ 19771: 0x9575,
+ 19772: 0x9577,
+ 19773: 0x9578,
+ 19774: 0x9579,
+ 19775: 0x957A,
+ 19776: 0x957B,
+ 19777: 0x957C,
+ 19778: 0x957D,
+ 19779: 0x957E,
+ 19780: 0x9580,
+ 19781: 0x9581,
+ 19782: 0x9582,
+ 19783: 0x9583,
+ 19784: 0x9584,
+ 19785: 0x9585,
+ 19786: 0x9586,
+ 19787: 0x9587,
+ 19788: 0x9588,
+ 19789: 0x9589,
+ 19790: 0x958A,
+ 19791: 0x958B,
+ 19792: 0x958C,
+ 19793: 0x958D,
+ 19794: 0x958E,
+ 19795: 0x958F,
+ 19796: 0x9590,
+ 19797: 0x9591,
+ 19798: 0x9592,
+ 19799: 0x9593,
+ 19800: 0x9594,
+ 19801: 0x9595,
+ 19802: 0x9596,
+ 19803: 0x9597,
+ 19804: 0x9598,
+ 19805: 0x9599,
+ 19806: 0x959A,
+ 19807: 0x959B,
+ 19808: 0x959C,
+ 19809: 0x959D,
+ 19810: 0x959E,
+ 19811: 0x959F,
+ 19812: 0x95A0,
+ 19813: 0x95A1,
+ 19814: 0x95A2,
+ 19815: 0x95A3,
+ 19816: 0x95A4,
+ 19817: 0x95A5,
+ 19818: 0x95A6,
+ 19819: 0x95A7,
+ 19820: 0x95A8,
+ 19821: 0x95A9,
+ 19822: 0x95AA,
+ 19823: 0x95AB,
+ 19824: 0x95AC,
+ 19825: 0x95AD,
+ 19826: 0x95AE,
+ 19827: 0x95AF,
+ 19828: 0x95B0,
+ 19829: 0x95B1,
+ 19830: 0x95B2,
+ 19831: 0x95B3,
+ 19832: 0x95B4,
+ 19833: 0x95B5,
+ 19834: 0x95B6,
+ 19835: 0x95B7,
+ 19836: 0x95B8,
+ 19837: 0x95B9,
+ 19838: 0x95BA,
+ 19839: 0x95BB,
+ 19840: 0x95BC,
+ 19841: 0x95BD,
+ 19842: 0x95BE,
+ 19843: 0x95BF,
+ 19844: 0x95C0,
+ 19845: 0x95C1,
+ 19846: 0x95C2,
+ 19847: 0x95C3,
+ 19848: 0x95C4,
+ 19849: 0x95C5,
+ 19850: 0x95C6,
+ 19851: 0x95C7,
+ 19852: 0x95C8,
+ 19853: 0x95C9,
+ 19854: 0x95CA,
+ 19855: 0x95CB,
+ 19856: 0x6924,
+ 19857: 0x68F0,
+ 19858: 0x690B,
+ 19859: 0x6901,
+ 19860: 0x6957,
+ 19861: 0x68E3,
+ 19862: 0x6910,
+ 19863: 0x6971,
+ 19864: 0x6939,
+ 19865: 0x6960,
+ 19866: 0x6942,
+ 19867: 0x695D,
+ 19868: 0x6984,
+ 19869: 0x696B,
+ 19870: 0x6980,
+ 19871: 0x6998,
+ 19872: 0x6978,
+ 19873: 0x6934,
+ 19874: 0x69CC,
+ 19875: 0x6987,
+ 19876: 0x6988,
+ 19877: 0x69CE,
+ 19878: 0x6989,
+ 19879: 0x6966,
+ 19880: 0x6963,
+ 19881: 0x6979,
+ 19882: 0x699B,
+ 19883: 0x69A7,
+ 19884: 0x69BB,
+ 19885: 0x69AB,
+ 19886: 0x69AD,
+ 19887: 0x69D4,
+ 19888: 0x69B1,
+ 19889: 0x69C1,
+ 19890: 0x69CA,
+ 19891: 0x69DF,
+ 19892: 0x6995,
+ 19893: 0x69E0,
+ 19894: 0x698D,
+ 19895: 0x69FF,
+ 19896: 0x6A2F,
+ 19897: 0x69ED,
+ 19898: 0x6A17,
+ 19899: 0x6A18,
+ 19900: 0x6A65,
+ 19901: 0x69F2,
+ 19902: 0x6A44,
+ 19903: 0x6A3E,
+ 19904: 0x6AA0,
+ 19905: 0x6A50,
+ 19906: 0x6A5B,
+ 19907: 0x6A35,
+ 19908: 0x6A8E,
+ 19909: 0x6A79,
+ 19910: 0x6A3D,
+ 19911: 0x6A28,
+ 19912: 0x6A58,
+ 19913: 0x6A7C,
+ 19914: 0x6A91,
+ 19915: 0x6A90,
+ 19916: 0x6AA9,
+ 19917: 0x6A97,
+ 19918: 0x6AAB,
+ 19919: 0x7337,
+ 19920: 0x7352,
+ 19921: 0x6B81,
+ 19922: 0x6B82,
+ 19923: 0x6B87,
+ 19924: 0x6B84,
+ 19925: 0x6B92,
+ 19926: 0x6B93,
+ 19927: 0x6B8D,
+ 19928: 0x6B9A,
+ 19929: 0x6B9B,
+ 19930: 0x6BA1,
+ 19931: 0x6BAA,
+ 19932: 0x8F6B,
+ 19933: 0x8F6D,
+ 19934: 0x8F71,
+ 19935: 0x8F72,
+ 19936: 0x8F73,
+ 19937: 0x8F75,
+ 19938: 0x8F76,
+ 19939: 0x8F78,
+ 19940: 0x8F77,
+ 19941: 0x8F79,
+ 19942: 0x8F7A,
+ 19943: 0x8F7C,
+ 19944: 0x8F7E,
+ 19945: 0x8F81,
+ 19946: 0x8F82,
+ 19947: 0x8F84,
+ 19948: 0x8F87,
+ 19949: 0x8F8B,
+ 19950: 0x95CC,
+ 19951: 0x95CD,
+ 19952: 0x95CE,
+ 19953: 0x95CF,
+ 19954: 0x95D0,
+ 19955: 0x95D1,
+ 19956: 0x95D2,
+ 19957: 0x95D3,
+ 19958: 0x95D4,
+ 19959: 0x95D5,
+ 19960: 0x95D6,
+ 19961: 0x95D7,
+ 19962: 0x95D8,
+ 19963: 0x95D9,
+ 19964: 0x95DA,
+ 19965: 0x95DB,
+ 19966: 0x95DC,
+ 19967: 0x95DD,
+ 19968: 0x95DE,
+ 19969: 0x95DF,
+ 19970: 0x95E0,
+ 19971: 0x95E1,
+ 19972: 0x95E2,
+ 19973: 0x95E3,
+ 19974: 0x95E4,
+ 19975: 0x95E5,
+ 19976: 0x95E6,
+ 19977: 0x95E7,
+ 19978: 0x95EC,
+ 19979: 0x95FF,
+ 19980: 0x9607,
+ 19981: 0x9613,
+ 19982: 0x9618,
+ 19983: 0x961B,
+ 19984: 0x961E,
+ 19985: 0x9620,
+ 19986: 0x9623,
+ 19987: 0x9624,
+ 19988: 0x9625,
+ 19989: 0x9626,
+ 19990: 0x9627,
+ 19991: 0x9628,
+ 19992: 0x9629,
+ 19993: 0x962B,
+ 19994: 0x962C,
+ 19995: 0x962D,
+ 19996: 0x962F,
+ 19997: 0x9630,
+ 19998: 0x9637,
+ 19999: 0x9638,
+ 20000: 0x9639,
+ 20001: 0x963A,
+ 20002: 0x963E,
+ 20003: 0x9641,
+ 20004: 0x9643,
+ 20005: 0x964A,
+ 20006: 0x964E,
+ 20007: 0x964F,
+ 20008: 0x9651,
+ 20009: 0x9652,
+ 20010: 0x9653,
+ 20011: 0x9656,
+ 20012: 0x9657,
+ 20013: 0x9658,
+ 20014: 0x9659,
+ 20015: 0x965A,
+ 20016: 0x965C,
+ 20017: 0x965D,
+ 20018: 0x965E,
+ 20019: 0x9660,
+ 20020: 0x9663,
+ 20021: 0x9665,
+ 20022: 0x9666,
+ 20023: 0x966B,
+ 20024: 0x966D,
+ 20025: 0x966E,
+ 20026: 0x966F,
+ 20027: 0x9670,
+ 20028: 0x9671,
+ 20029: 0x9673,
+ 20030: 0x9678,
+ 20031: 0x9679,
+ 20032: 0x967A,
+ 20033: 0x967B,
+ 20034: 0x967C,
+ 20035: 0x967D,
+ 20036: 0x967E,
+ 20037: 0x967F,
+ 20038: 0x9680,
+ 20039: 0x9681,
+ 20040: 0x9682,
+ 20041: 0x9683,
+ 20042: 0x9684,
+ 20043: 0x9687,
+ 20044: 0x9689,
+ 20045: 0x968A,
+ 20046: 0x8F8D,
+ 20047: 0x8F8E,
+ 20048: 0x8F8F,
+ 20049: 0x8F98,
+ 20050: 0x8F9A,
+ 20051: 0x8ECE,
+ 20052: 0x620B,
+ 20053: 0x6217,
+ 20054: 0x621B,
+ 20055: 0x621F,
+ 20056: 0x6222,
+ 20057: 0x6221,
+ 20058: 0x6225,
+ 20059: 0x6224,
+ 20060: 0x622C,
+ 20061: 0x81E7,
+ 20062: 0x74EF,
+ 20063: 0x74F4,
+ 20064: 0x74FF,
+ 20065: 0x750F,
+ 20066: 0x7511,
+ 20067: 0x7513,
+ 20068: 0x6534,
+ 20069: 0x65EE,
+ 20070: 0x65EF,
+ 20071: 0x65F0,
+ 20072: 0x660A,
+ 20073: 0x6619,
+ 20074: 0x6772,
+ 20075: 0x6603,
+ 20076: 0x6615,
+ 20077: 0x6600,
+ 20078: 0x7085,
+ 20079: 0x66F7,
+ 20080: 0x661D,
+ 20081: 0x6634,
+ 20082: 0x6631,
+ 20083: 0x6636,
+ 20084: 0x6635,
+ 20085: 0x8006,
+ 20086: 0x665F,
+ 20087: 0x6654,
+ 20088: 0x6641,
+ 20089: 0x664F,
+ 20090: 0x6656,
+ 20091: 0x6661,
+ 20092: 0x6657,
+ 20093: 0x6677,
+ 20094: 0x6684,
+ 20095: 0x668C,
+ 20096: 0x66A7,
+ 20097: 0x669D,
+ 20098: 0x66BE,
+ 20099: 0x66DB,
+ 20100: 0x66DC,
+ 20101: 0x66E6,
+ 20102: 0x66E9,
+ 20103: 0x8D32,
+ 20104: 0x8D33,
+ 20105: 0x8D36,
+ 20106: 0x8D3B,
+ 20107: 0x8D3D,
+ 20108: 0x8D40,
+ 20109: 0x8D45,
+ 20110: 0x8D46,
+ 20111: 0x8D48,
+ 20112: 0x8D49,
+ 20113: 0x8D47,
+ 20114: 0x8D4D,
+ 20115: 0x8D55,
+ 20116: 0x8D59,
+ 20117: 0x89C7,
+ 20118: 0x89CA,
+ 20119: 0x89CB,
+ 20120: 0x89CC,
+ 20121: 0x89CE,
+ 20122: 0x89CF,
+ 20123: 0x89D0,
+ 20124: 0x89D1,
+ 20125: 0x726E,
+ 20126: 0x729F,
+ 20127: 0x725D,
+ 20128: 0x7266,
+ 20129: 0x726F,
+ 20130: 0x727E,
+ 20131: 0x727F,
+ 20132: 0x7284,
+ 20133: 0x728B,
+ 20134: 0x728D,
+ 20135: 0x728F,
+ 20136: 0x7292,
+ 20137: 0x6308,
+ 20138: 0x6332,
+ 20139: 0x63B0,
+ 20140: 0x968C,
+ 20141: 0x968E,
+ 20142: 0x9691,
+ 20143: 0x9692,
+ 20144: 0x9693,
+ 20145: 0x9695,
+ 20146: 0x9696,
+ 20147: 0x969A,
+ 20148: 0x969B,
+ 20149: 0x969D,
+ 20150: 0x969E,
+ 20151: 0x969F,
+ 20152: 0x96A0,
+ 20153: 0x96A1,
+ 20154: 0x96A2,
+ 20155: 0x96A3,
+ 20156: 0x96A4,
+ 20157: 0x96A5,
+ 20158: 0x96A6,
+ 20159: 0x96A8,
+ 20160: 0x96A9,
+ 20161: 0x96AA,
+ 20162: 0x96AB,
+ 20163: 0x96AC,
+ 20164: 0x96AD,
+ 20165: 0x96AE,
+ 20166: 0x96AF,
+ 20167: 0x96B1,
+ 20168: 0x96B2,
+ 20169: 0x96B4,
+ 20170: 0x96B5,
+ 20171: 0x96B7,
+ 20172: 0x96B8,
+ 20173: 0x96BA,
+ 20174: 0x96BB,
+ 20175: 0x96BF,
+ 20176: 0x96C2,
+ 20177: 0x96C3,
+ 20178: 0x96C8,
+ 20179: 0x96CA,
+ 20180: 0x96CB,
+ 20181: 0x96D0,
+ 20182: 0x96D1,
+ 20183: 0x96D3,
+ 20184: 0x96D4,
+ 20185: 0x96D6,
+ 20186: 0x96D7,
+ 20187: 0x96D8,
+ 20188: 0x96D9,
+ 20189: 0x96DA,
+ 20190: 0x96DB,
+ 20191: 0x96DC,
+ 20192: 0x96DD,
+ 20193: 0x96DE,
+ 20194: 0x96DF,
+ 20195: 0x96E1,
+ 20196: 0x96E2,
+ 20197: 0x96E3,
+ 20198: 0x96E4,
+ 20199: 0x96E5,
+ 20200: 0x96E6,
+ 20201: 0x96E7,
+ 20202: 0x96EB,
+ 20203: 0x96EC,
+ 20204: 0x96ED,
+ 20205: 0x96EE,
+ 20206: 0x96F0,
+ 20207: 0x96F1,
+ 20208: 0x96F2,
+ 20209: 0x96F4,
+ 20210: 0x96F5,
+ 20211: 0x96F8,
+ 20212: 0x96FA,
+ 20213: 0x96FB,
+ 20214: 0x96FC,
+ 20215: 0x96FD,
+ 20216: 0x96FF,
+ 20217: 0x9702,
+ 20218: 0x9703,
+ 20219: 0x9705,
+ 20220: 0x970A,
+ 20221: 0x970B,
+ 20222: 0x970C,
+ 20223: 0x9710,
+ 20224: 0x9711,
+ 20225: 0x9712,
+ 20226: 0x9714,
+ 20227: 0x9715,
+ 20228: 0x9717,
+ 20229: 0x9718,
+ 20230: 0x9719,
+ 20231: 0x971A,
+ 20232: 0x971B,
+ 20233: 0x971D,
+ 20234: 0x971F,
+ 20235: 0x9720,
+ 20236: 0x643F,
+ 20237: 0x64D8,
+ 20238: 0x8004,
+ 20239: 0x6BEA,
+ 20240: 0x6BF3,
+ 20241: 0x6BFD,
+ 20242: 0x6BF5,
+ 20243: 0x6BF9,
+ 20244: 0x6C05,
+ 20245: 0x6C07,
+ 20246: 0x6C06,
+ 20247: 0x6C0D,
+ 20248: 0x6C15,
+ 20249: 0x6C18,
+ 20250: 0x6C19,
+ 20251: 0x6C1A,
+ 20252: 0x6C21,
+ 20253: 0x6C29,
+ 20254: 0x6C24,
+ 20255: 0x6C2A,
+ 20256: 0x6C32,
+ 20257: 0x6535,
+ 20258: 0x6555,
+ 20259: 0x656B,
+ 20260: 0x724D,
+ 20261: 0x7252,
+ 20262: 0x7256,
+ 20263: 0x7230,
+ 20264: 0x8662,
+ 20265: 0x5216,
+ 20266: 0x809F,
+ 20267: 0x809C,
+ 20268: 0x8093,
+ 20269: 0x80BC,
+ 20270: 0x670A,
+ 20271: 0x80BD,
+ 20272: 0x80B1,
+ 20273: 0x80AB,
+ 20274: 0x80AD,
+ 20275: 0x80B4,
+ 20276: 0x80B7,
+ 20277: 0x80E7,
+ 20278: 0x80E8,
+ 20279: 0x80E9,
+ 20280: 0x80EA,
+ 20281: 0x80DB,
+ 20282: 0x80C2,
+ 20283: 0x80C4,
+ 20284: 0x80D9,
+ 20285: 0x80CD,
+ 20286: 0x80D7,
+ 20287: 0x6710,
+ 20288: 0x80DD,
+ 20289: 0x80EB,
+ 20290: 0x80F1,
+ 20291: 0x80F4,
+ 20292: 0x80ED,
+ 20293: 0x810D,
+ 20294: 0x810E,
+ 20295: 0x80F2,
+ 20296: 0x80FC,
+ 20297: 0x6715,
+ 20298: 0x8112,
+ 20299: 0x8C5A,
+ 20300: 0x8136,
+ 20301: 0x811E,
+ 20302: 0x812C,
+ 20303: 0x8118,
+ 20304: 0x8132,
+ 20305: 0x8148,
+ 20306: 0x814C,
+ 20307: 0x8153,
+ 20308: 0x8174,
+ 20309: 0x8159,
+ 20310: 0x815A,
+ 20311: 0x8171,
+ 20312: 0x8160,
+ 20313: 0x8169,
+ 20314: 0x817C,
+ 20315: 0x817D,
+ 20316: 0x816D,
+ 20317: 0x8167,
+ 20318: 0x584D,
+ 20319: 0x5AB5,
+ 20320: 0x8188,
+ 20321: 0x8182,
+ 20322: 0x8191,
+ 20323: 0x6ED5,
+ 20324: 0x81A3,
+ 20325: 0x81AA,
+ 20326: 0x81CC,
+ 20327: 0x6726,
+ 20328: 0x81CA,
+ 20329: 0x81BB,
+ 20330: 0x9721,
+ 20331: 0x9722,
+ 20332: 0x9723,
+ 20333: 0x9724,
+ 20334: 0x9725,
+ 20335: 0x9726,
+ 20336: 0x9727,
+ 20337: 0x9728,
+ 20338: 0x9729,
+ 20339: 0x972B,
+ 20340: 0x972C,
+ 20341: 0x972E,
+ 20342: 0x972F,
+ 20343: 0x9731,
+ 20344: 0x9733,
+ 20345: 0x9734,
+ 20346: 0x9735,
+ 20347: 0x9736,
+ 20348: 0x9737,
+ 20349: 0x973A,
+ 20350: 0x973B,
+ 20351: 0x973C,
+ 20352: 0x973D,
+ 20353: 0x973F,
+ 20354: 0x9740,
+ 20355: 0x9741,
+ 20356: 0x9742,
+ 20357: 0x9743,
+ 20358: 0x9744,
+ 20359: 0x9745,
+ 20360: 0x9746,
+ 20361: 0x9747,
+ 20362: 0x9748,
+ 20363: 0x9749,
+ 20364: 0x974A,
+ 20365: 0x974B,
+ 20366: 0x974C,
+ 20367: 0x974D,
+ 20368: 0x974E,
+ 20369: 0x974F,
+ 20370: 0x9750,
+ 20371: 0x9751,
+ 20372: 0x9754,
+ 20373: 0x9755,
+ 20374: 0x9757,
+ 20375: 0x9758,
+ 20376: 0x975A,
+ 20377: 0x975C,
+ 20378: 0x975D,
+ 20379: 0x975F,
+ 20380: 0x9763,
+ 20381: 0x9764,
+ 20382: 0x9766,
+ 20383: 0x9767,
+ 20384: 0x9768,
+ 20385: 0x976A,
+ 20386: 0x976B,
+ 20387: 0x976C,
+ 20388: 0x976D,
+ 20389: 0x976E,
+ 20390: 0x976F,
+ 20391: 0x9770,
+ 20392: 0x9771,
+ 20393: 0x9772,
+ 20394: 0x9775,
+ 20395: 0x9777,
+ 20396: 0x9778,
+ 20397: 0x9779,
+ 20398: 0x977A,
+ 20399: 0x977B,
+ 20400: 0x977D,
+ 20401: 0x977E,
+ 20402: 0x977F,
+ 20403: 0x9780,
+ 20404: 0x9781,
+ 20405: 0x9782,
+ 20406: 0x9783,
+ 20407: 0x9784,
+ 20408: 0x9786,
+ 20409: 0x9787,
+ 20410: 0x9788,
+ 20411: 0x9789,
+ 20412: 0x978A,
+ 20413: 0x978C,
+ 20414: 0x978E,
+ 20415: 0x978F,
+ 20416: 0x9790,
+ 20417: 0x9793,
+ 20418: 0x9795,
+ 20419: 0x9796,
+ 20420: 0x9797,
+ 20421: 0x9799,
+ 20422: 0x979A,
+ 20423: 0x979B,
+ 20424: 0x979C,
+ 20425: 0x979D,
+ 20426: 0x81C1,
+ 20427: 0x81A6,
+ 20428: 0x6B24,
+ 20429: 0x6B37,
+ 20430: 0x6B39,
+ 20431: 0x6B43,
+ 20432: 0x6B46,
+ 20433: 0x6B59,
+ 20434: 0x98D1,
+ 20435: 0x98D2,
+ 20436: 0x98D3,
+ 20437: 0x98D5,
+ 20438: 0x98D9,
+ 20439: 0x98DA,
+ 20440: 0x6BB3,
+ 20441: 0x5F40,
+ 20442: 0x6BC2,
+ 20443: 0x89F3,
+ 20444: 0x6590,
+ 20445: 0x9F51,
+ 20446: 0x6593,
+ 20447: 0x65BC,
+ 20448: 0x65C6,
+ 20449: 0x65C4,
+ 20450: 0x65C3,
+ 20451: 0x65CC,
+ 20452: 0x65CE,
+ 20453: 0x65D2,
+ 20454: 0x65D6,
+ 20455: 0x7080,
+ 20456: 0x709C,
+ 20457: 0x7096,
+ 20458: 0x709D,
+ 20459: 0x70BB,
+ 20460: 0x70C0,
+ 20461: 0x70B7,
+ 20462: 0x70AB,
+ 20463: 0x70B1,
+ 20464: 0x70E8,
+ 20465: 0x70CA,
+ 20466: 0x7110,
+ 20467: 0x7113,
+ 20468: 0x7116,
+ 20469: 0x712F,
+ 20470: 0x7131,
+ 20471: 0x7173,
+ 20472: 0x715C,
+ 20473: 0x7168,
+ 20474: 0x7145,
+ 20475: 0x7172,
+ 20476: 0x714A,
+ 20477: 0x7178,
+ 20478: 0x717A,
+ 20479: 0x7198,
+ 20480: 0x71B3,
+ 20481: 0x71B5,
+ 20482: 0x71A8,
+ 20483: 0x71A0,
+ 20484: 0x71E0,
+ 20485: 0x71D4,
+ 20486: 0x71E7,
+ 20487: 0x71F9,
+ 20488: 0x721D,
+ 20489: 0x7228,
+ 20490: 0x706C,
+ 20491: 0x7118,
+ 20492: 0x7166,
+ 20493: 0x71B9,
+ 20494: 0x623E,
+ 20495: 0x623D,
+ 20496: 0x6243,
+ 20497: 0x6248,
+ 20498: 0x6249,
+ 20499: 0x793B,
+ 20500: 0x7940,
+ 20501: 0x7946,
+ 20502: 0x7949,
+ 20503: 0x795B,
+ 20504: 0x795C,
+ 20505: 0x7953,
+ 20506: 0x795A,
+ 20507: 0x7962,
+ 20508: 0x7957,
+ 20509: 0x7960,
+ 20510: 0x796F,
+ 20511: 0x7967,
+ 20512: 0x797A,
+ 20513: 0x7985,
+ 20514: 0x798A,
+ 20515: 0x799A,
+ 20516: 0x79A7,
+ 20517: 0x79B3,
+ 20518: 0x5FD1,
+ 20519: 0x5FD0,
+ 20520: 0x979E,
+ 20521: 0x979F,
+ 20522: 0x97A1,
+ 20523: 0x97A2,
+ 20524: 0x97A4,
+ 20525: 0x97A5,
+ 20526: 0x97A6,
+ 20527: 0x97A7,
+ 20528: 0x97A8,
+ 20529: 0x97A9,
+ 20530: 0x97AA,
+ 20531: 0x97AC,
+ 20532: 0x97AE,
+ 20533: 0x97B0,
+ 20534: 0x97B1,
+ 20535: 0x97B3,
+ 20536: 0x97B5,
+ 20537: 0x97B6,
+ 20538: 0x97B7,
+ 20539: 0x97B8,
+ 20540: 0x97B9,
+ 20541: 0x97BA,
+ 20542: 0x97BB,
+ 20543: 0x97BC,
+ 20544: 0x97BD,
+ 20545: 0x97BE,
+ 20546: 0x97BF,
+ 20547: 0x97C0,
+ 20548: 0x97C1,
+ 20549: 0x97C2,
+ 20550: 0x97C3,
+ 20551: 0x97C4,
+ 20552: 0x97C5,
+ 20553: 0x97C6,
+ 20554: 0x97C7,
+ 20555: 0x97C8,
+ 20556: 0x97C9,
+ 20557: 0x97CA,
+ 20558: 0x97CB,
+ 20559: 0x97CC,
+ 20560: 0x97CD,
+ 20561: 0x97CE,
+ 20562: 0x97CF,
+ 20563: 0x97D0,
+ 20564: 0x97D1,
+ 20565: 0x97D2,
+ 20566: 0x97D3,
+ 20567: 0x97D4,
+ 20568: 0x97D5,
+ 20569: 0x97D6,
+ 20570: 0x97D7,
+ 20571: 0x97D8,
+ 20572: 0x97D9,
+ 20573: 0x97DA,
+ 20574: 0x97DB,
+ 20575: 0x97DC,
+ 20576: 0x97DD,
+ 20577: 0x97DE,
+ 20578: 0x97DF,
+ 20579: 0x97E0,
+ 20580: 0x97E1,
+ 20581: 0x97E2,
+ 20582: 0x97E3,
+ 20583: 0x97E4,
+ 20584: 0x97E5,
+ 20585: 0x97E8,
+ 20586: 0x97EE,
+ 20587: 0x97EF,
+ 20588: 0x97F0,
+ 20589: 0x97F1,
+ 20590: 0x97F2,
+ 20591: 0x97F4,
+ 20592: 0x97F7,
+ 20593: 0x97F8,
+ 20594: 0x97F9,
+ 20595: 0x97FA,
+ 20596: 0x97FB,
+ 20597: 0x97FC,
+ 20598: 0x97FD,
+ 20599: 0x97FE,
+ 20600: 0x97FF,
+ 20601: 0x9800,
+ 20602: 0x9801,
+ 20603: 0x9802,
+ 20604: 0x9803,
+ 20605: 0x9804,
+ 20606: 0x9805,
+ 20607: 0x9806,
+ 20608: 0x9807,
+ 20609: 0x9808,
+ 20610: 0x9809,
+ 20611: 0x980A,
+ 20612: 0x980B,
+ 20613: 0x980C,
+ 20614: 0x980D,
+ 20615: 0x980E,
+ 20616: 0x603C,
+ 20617: 0x605D,
+ 20618: 0x605A,
+ 20619: 0x6067,
+ 20620: 0x6041,
+ 20621: 0x6059,
+ 20622: 0x6063,
+ 20623: 0x60AB,
+ 20624: 0x6106,
+ 20625: 0x610D,
+ 20626: 0x615D,
+ 20627: 0x61A9,
+ 20628: 0x619D,
+ 20629: 0x61CB,
+ 20630: 0x61D1,
+ 20631: 0x6206,
+ 20632: 0x8080,
+ 20633: 0x807F,
+ 20634: 0x6C93,
+ 20635: 0x6CF6,
+ 20636: 0x6DFC,
+ 20637: 0x77F6,
+ 20638: 0x77F8,
+ 20639: 0x7800,
+ 20640: 0x7809,
+ 20641: 0x7817,
+ 20642: 0x7818,
+ 20643: 0x7811,
+ 20644: 0x65AB,
+ 20645: 0x782D,
+ 20646: 0x781C,
+ 20647: 0x781D,
+ 20648: 0x7839,
+ 20649: 0x783A,
+ 20650: 0x783B,
+ 20651: 0x781F,
+ 20652: 0x783C,
+ 20653: 0x7825,
+ 20654: 0x782C,
+ 20655: 0x7823,
+ 20656: 0x7829,
+ 20657: 0x784E,
+ 20658: 0x786D,
+ 20659: 0x7856,
+ 20660: 0x7857,
+ 20661: 0x7826,
+ 20662: 0x7850,
+ 20663: 0x7847,
+ 20664: 0x784C,
+ 20665: 0x786A,
+ 20666: 0x789B,
+ 20667: 0x7893,
+ 20668: 0x789A,
+ 20669: 0x7887,
+ 20670: 0x789C,
+ 20671: 0x78A1,
+ 20672: 0x78A3,
+ 20673: 0x78B2,
+ 20674: 0x78B9,
+ 20675: 0x78A5,
+ 20676: 0x78D4,
+ 20677: 0x78D9,
+ 20678: 0x78C9,
+ 20679: 0x78EC,
+ 20680: 0x78F2,
+ 20681: 0x7905,
+ 20682: 0x78F4,
+ 20683: 0x7913,
+ 20684: 0x7924,
+ 20685: 0x791E,
+ 20686: 0x7934,
+ 20687: 0x9F9B,
+ 20688: 0x9EF9,
+ 20689: 0x9EFB,
+ 20690: 0x9EFC,
+ 20691: 0x76F1,
+ 20692: 0x7704,
+ 20693: 0x770D,
+ 20694: 0x76F9,
+ 20695: 0x7707,
+ 20696: 0x7708,
+ 20697: 0x771A,
+ 20698: 0x7722,
+ 20699: 0x7719,
+ 20700: 0x772D,
+ 20701: 0x7726,
+ 20702: 0x7735,
+ 20703: 0x7738,
+ 20704: 0x7750,
+ 20705: 0x7751,
+ 20706: 0x7747,
+ 20707: 0x7743,
+ 20708: 0x775A,
+ 20709: 0x7768,
+ 20710: 0x980F,
+ 20711: 0x9810,
+ 20712: 0x9811,
+ 20713: 0x9812,
+ 20714: 0x9813,
+ 20715: 0x9814,
+ 20716: 0x9815,
+ 20717: 0x9816,
+ 20718: 0x9817,
+ 20719: 0x9818,
+ 20720: 0x9819,
+ 20721: 0x981A,
+ 20722: 0x981B,
+ 20723: 0x981C,
+ 20724: 0x981D,
+ 20725: 0x981E,
+ 20726: 0x981F,
+ 20727: 0x9820,
+ 20728: 0x9821,
+ 20729: 0x9822,
+ 20730: 0x9823,
+ 20731: 0x9824,
+ 20732: 0x9825,
+ 20733: 0x9826,
+ 20734: 0x9827,
+ 20735: 0x9828,
+ 20736: 0x9829,
+ 20737: 0x982A,
+ 20738: 0x982B,
+ 20739: 0x982C,
+ 20740: 0x982D,
+ 20741: 0x982E,
+ 20742: 0x982F,
+ 20743: 0x9830,
+ 20744: 0x9831,
+ 20745: 0x9832,
+ 20746: 0x9833,
+ 20747: 0x9834,
+ 20748: 0x9835,
+ 20749: 0x9836,
+ 20750: 0x9837,
+ 20751: 0x9838,
+ 20752: 0x9839,
+ 20753: 0x983A,
+ 20754: 0x983B,
+ 20755: 0x983C,
+ 20756: 0x983D,
+ 20757: 0x983E,
+ 20758: 0x983F,
+ 20759: 0x9840,
+ 20760: 0x9841,
+ 20761: 0x9842,
+ 20762: 0x9843,
+ 20763: 0x9844,
+ 20764: 0x9845,
+ 20765: 0x9846,
+ 20766: 0x9847,
+ 20767: 0x9848,
+ 20768: 0x9849,
+ 20769: 0x984A,
+ 20770: 0x984B,
+ 20771: 0x984C,
+ 20772: 0x984D,
+ 20773: 0x984E,
+ 20774: 0x984F,
+ 20775: 0x9850,
+ 20776: 0x9851,
+ 20777: 0x9852,
+ 20778: 0x9853,
+ 20779: 0x9854,
+ 20780: 0x9855,
+ 20781: 0x9856,
+ 20782: 0x9857,
+ 20783: 0x9858,
+ 20784: 0x9859,
+ 20785: 0x985A,
+ 20786: 0x985B,
+ 20787: 0x985C,
+ 20788: 0x985D,
+ 20789: 0x985E,
+ 20790: 0x985F,
+ 20791: 0x9860,
+ 20792: 0x9861,
+ 20793: 0x9862,
+ 20794: 0x9863,
+ 20795: 0x9864,
+ 20796: 0x9865,
+ 20797: 0x9866,
+ 20798: 0x9867,
+ 20799: 0x9868,
+ 20800: 0x9869,
+ 20801: 0x986A,
+ 20802: 0x986B,
+ 20803: 0x986C,
+ 20804: 0x986D,
+ 20805: 0x986E,
+ 20806: 0x7762,
+ 20807: 0x7765,
+ 20808: 0x777F,
+ 20809: 0x778D,
+ 20810: 0x777D,
+ 20811: 0x7780,
+ 20812: 0x778C,
+ 20813: 0x7791,
+ 20814: 0x779F,
+ 20815: 0x77A0,
+ 20816: 0x77B0,
+ 20817: 0x77B5,
+ 20818: 0x77BD,
+ 20819: 0x753A,
+ 20820: 0x7540,
+ 20821: 0x754E,
+ 20822: 0x754B,
+ 20823: 0x7548,
+ 20824: 0x755B,
+ 20825: 0x7572,
+ 20826: 0x7579,
+ 20827: 0x7583,
+ 20828: 0x7F58,
+ 20829: 0x7F61,
+ 20830: 0x7F5F,
+ 20831: 0x8A48,
+ 20832: 0x7F68,
+ 20833: 0x7F74,
+ 20834: 0x7F71,
+ 20835: 0x7F79,
+ 20836: 0x7F81,
+ 20837: 0x7F7E,
+ 20838: 0x76CD,
+ 20839: 0x76E5,
+ 20840: 0x8832,
+ 20841: 0x9485,
+ 20842: 0x9486,
+ 20843: 0x9487,
+ 20844: 0x948B,
+ 20845: 0x948A,
+ 20846: 0x948C,
+ 20847: 0x948D,
+ 20848: 0x948F,
+ 20849: 0x9490,
+ 20850: 0x9494,
+ 20851: 0x9497,
+ 20852: 0x9495,
+ 20853: 0x949A,
+ 20854: 0x949B,
+ 20855: 0x949C,
+ 20856: 0x94A3,
+ 20857: 0x94A4,
+ 20858: 0x94AB,
+ 20859: 0x94AA,
+ 20860: 0x94AD,
+ 20861: 0x94AC,
+ 20862: 0x94AF,
+ 20863: 0x94B0,
+ 20864: 0x94B2,
+ 20865: 0x94B4,
+ 20866: 0x94B6,
+ 20867: 0x94B7,
+ 20868: 0x94B8,
+ 20869: 0x94B9,
+ 20870: 0x94BA,
+ 20871: 0x94BC,
+ 20872: 0x94BD,
+ 20873: 0x94BF,
+ 20874: 0x94C4,
+ 20875: 0x94C8,
+ 20876: 0x94C9,
+ 20877: 0x94CA,
+ 20878: 0x94CB,
+ 20879: 0x94CC,
+ 20880: 0x94CD,
+ 20881: 0x94CE,
+ 20882: 0x94D0,
+ 20883: 0x94D1,
+ 20884: 0x94D2,
+ 20885: 0x94D5,
+ 20886: 0x94D6,
+ 20887: 0x94D7,
+ 20888: 0x94D9,
+ 20889: 0x94D8,
+ 20890: 0x94DB,
+ 20891: 0x94DE,
+ 20892: 0x94DF,
+ 20893: 0x94E0,
+ 20894: 0x94E2,
+ 20895: 0x94E4,
+ 20896: 0x94E5,
+ 20897: 0x94E7,
+ 20898: 0x94E8,
+ 20899: 0x94EA,
+ 20900: 0x986F,
+ 20901: 0x9870,
+ 20902: 0x9871,
+ 20903: 0x9872,
+ 20904: 0x9873,
+ 20905: 0x9874,
+ 20906: 0x988B,
+ 20907: 0x988E,
+ 20908: 0x9892,
+ 20909: 0x9895,
+ 20910: 0x9899,
+ 20911: 0x98A3,
+ 20912: 0x98A8,
+ 20913: 0x98A9,
+ 20914: 0x98AA,
+ 20915: 0x98AB,
+ 20916: 0x98AC,
+ 20917: 0x98AD,
+ 20918: 0x98AE,
+ 20919: 0x98AF,
+ 20920: 0x98B0,
+ 20921: 0x98B1,
+ 20922: 0x98B2,
+ 20923: 0x98B3,
+ 20924: 0x98B4,
+ 20925: 0x98B5,
+ 20926: 0x98B6,
+ 20927: 0x98B7,
+ 20928: 0x98B8,
+ 20929: 0x98B9,
+ 20930: 0x98BA,
+ 20931: 0x98BB,
+ 20932: 0x98BC,
+ 20933: 0x98BD,
+ 20934: 0x98BE,
+ 20935: 0x98BF,
+ 20936: 0x98C0,
+ 20937: 0x98C1,
+ 20938: 0x98C2,
+ 20939: 0x98C3,
+ 20940: 0x98C4,
+ 20941: 0x98C5,
+ 20942: 0x98C6,
+ 20943: 0x98C7,
+ 20944: 0x98C8,
+ 20945: 0x98C9,
+ 20946: 0x98CA,
+ 20947: 0x98CB,
+ 20948: 0x98CC,
+ 20949: 0x98CD,
+ 20950: 0x98CF,
+ 20951: 0x98D0,
+ 20952: 0x98D4,
+ 20953: 0x98D6,
+ 20954: 0x98D7,
+ 20955: 0x98DB,
+ 20956: 0x98DC,
+ 20957: 0x98DD,
+ 20958: 0x98E0,
+ 20959: 0x98E1,
+ 20960: 0x98E2,
+ 20961: 0x98E3,
+ 20962: 0x98E4,
+ 20963: 0x98E5,
+ 20964: 0x98E6,
+ 20965: 0x98E9,
+ 20966: 0x98EA,
+ 20967: 0x98EB,
+ 20968: 0x98EC,
+ 20969: 0x98ED,
+ 20970: 0x98EE,
+ 20971: 0x98EF,
+ 20972: 0x98F0,
+ 20973: 0x98F1,
+ 20974: 0x98F2,
+ 20975: 0x98F3,
+ 20976: 0x98F4,
+ 20977: 0x98F5,
+ 20978: 0x98F6,
+ 20979: 0x98F7,
+ 20980: 0x98F8,
+ 20981: 0x98F9,
+ 20982: 0x98FA,
+ 20983: 0x98FB,
+ 20984: 0x98FC,
+ 20985: 0x98FD,
+ 20986: 0x98FE,
+ 20987: 0x98FF,
+ 20988: 0x9900,
+ 20989: 0x9901,
+ 20990: 0x9902,
+ 20991: 0x9903,
+ 20992: 0x9904,
+ 20993: 0x9905,
+ 20994: 0x9906,
+ 20995: 0x9907,
+ 20996: 0x94E9,
+ 20997: 0x94EB,
+ 20998: 0x94EE,
+ 20999: 0x94EF,
+ 21000: 0x94F3,
+ 21001: 0x94F4,
+ 21002: 0x94F5,
+ 21003: 0x94F7,
+ 21004: 0x94F9,
+ 21005: 0x94FC,
+ 21006: 0x94FD,
+ 21007: 0x94FF,
+ 21008: 0x9503,
+ 21009: 0x9502,
+ 21010: 0x9506,
+ 21011: 0x9507,
+ 21012: 0x9509,
+ 21013: 0x950A,
+ 21014: 0x950D,
+ 21015: 0x950E,
+ 21016: 0x950F,
+ 21017: 0x9512,
+ 21018: 0x9513,
+ 21019: 0x9514,
+ 21020: 0x9515,
+ 21021: 0x9516,
+ 21022: 0x9518,
+ 21023: 0x951B,
+ 21024: 0x951D,
+ 21025: 0x951E,
+ 21026: 0x951F,
+ 21027: 0x9522,
+ 21028: 0x952A,
+ 21029: 0x952B,
+ 21030: 0x9529,
+ 21031: 0x952C,
+ 21032: 0x9531,
+ 21033: 0x9532,
+ 21034: 0x9534,
+ 21035: 0x9536,
+ 21036: 0x9537,
+ 21037: 0x9538,
+ 21038: 0x953C,
+ 21039: 0x953E,
+ 21040: 0x953F,
+ 21041: 0x9542,
+ 21042: 0x9535,
+ 21043: 0x9544,
+ 21044: 0x9545,
+ 21045: 0x9546,
+ 21046: 0x9549,
+ 21047: 0x954C,
+ 21048: 0x954E,
+ 21049: 0x954F,
+ 21050: 0x9552,
+ 21051: 0x9553,
+ 21052: 0x9554,
+ 21053: 0x9556,
+ 21054: 0x9557,
+ 21055: 0x9558,
+ 21056: 0x9559,
+ 21057: 0x955B,
+ 21058: 0x955E,
+ 21059: 0x955F,
+ 21060: 0x955D,
+ 21061: 0x9561,
+ 21062: 0x9562,
+ 21063: 0x9564,
+ 21064: 0x9565,
+ 21065: 0x9566,
+ 21066: 0x9567,
+ 21067: 0x9568,
+ 21068: 0x9569,
+ 21069: 0x956A,
+ 21070: 0x956B,
+ 21071: 0x956C,
+ 21072: 0x956F,
+ 21073: 0x9571,
+ 21074: 0x9572,
+ 21075: 0x9573,
+ 21076: 0x953A,
+ 21077: 0x77E7,
+ 21078: 0x77EC,
+ 21079: 0x96C9,
+ 21080: 0x79D5,
+ 21081: 0x79ED,
+ 21082: 0x79E3,
+ 21083: 0x79EB,
+ 21084: 0x7A06,
+ 21085: 0x5D47,
+ 21086: 0x7A03,
+ 21087: 0x7A02,
+ 21088: 0x7A1E,
+ 21089: 0x7A14,
+ 21090: 0x9908,
+ 21091: 0x9909,
+ 21092: 0x990A,
+ 21093: 0x990B,
+ 21094: 0x990C,
+ 21095: 0x990E,
+ 21096: 0x990F,
+ 21097: 0x9911,
+ 21098: 0x9912,
+ 21099: 0x9913,
+ 21100: 0x9914,
+ 21101: 0x9915,
+ 21102: 0x9916,
+ 21103: 0x9917,
+ 21104: 0x9918,
+ 21105: 0x9919,
+ 21106: 0x991A,
+ 21107: 0x991B,
+ 21108: 0x991C,
+ 21109: 0x991D,
+ 21110: 0x991E,
+ 21111: 0x991F,
+ 21112: 0x9920,
+ 21113: 0x9921,
+ 21114: 0x9922,
+ 21115: 0x9923,
+ 21116: 0x9924,
+ 21117: 0x9925,
+ 21118: 0x9926,
+ 21119: 0x9927,
+ 21120: 0x9928,
+ 21121: 0x9929,
+ 21122: 0x992A,
+ 21123: 0x992B,
+ 21124: 0x992C,
+ 21125: 0x992D,
+ 21126: 0x992F,
+ 21127: 0x9930,
+ 21128: 0x9931,
+ 21129: 0x9932,
+ 21130: 0x9933,
+ 21131: 0x9934,
+ 21132: 0x9935,
+ 21133: 0x9936,
+ 21134: 0x9937,
+ 21135: 0x9938,
+ 21136: 0x9939,
+ 21137: 0x993A,
+ 21138: 0x993B,
+ 21139: 0x993C,
+ 21140: 0x993D,
+ 21141: 0x993E,
+ 21142: 0x993F,
+ 21143: 0x9940,
+ 21144: 0x9941,
+ 21145: 0x9942,
+ 21146: 0x9943,
+ 21147: 0x9944,
+ 21148: 0x9945,
+ 21149: 0x9946,
+ 21150: 0x9947,
+ 21151: 0x9948,
+ 21152: 0x9949,
+ 21153: 0x994A,
+ 21154: 0x994B,
+ 21155: 0x994C,
+ 21156: 0x994D,
+ 21157: 0x994E,
+ 21158: 0x994F,
+ 21159: 0x9950,
+ 21160: 0x9951,
+ 21161: 0x9952,
+ 21162: 0x9953,
+ 21163: 0x9956,
+ 21164: 0x9957,
+ 21165: 0x9958,
+ 21166: 0x9959,
+ 21167: 0x995A,
+ 21168: 0x995B,
+ 21169: 0x995C,
+ 21170: 0x995D,
+ 21171: 0x995E,
+ 21172: 0x995F,
+ 21173: 0x9960,
+ 21174: 0x9961,
+ 21175: 0x9962,
+ 21176: 0x9964,
+ 21177: 0x9966,
+ 21178: 0x9973,
+ 21179: 0x9978,
+ 21180: 0x9979,
+ 21181: 0x997B,
+ 21182: 0x997E,
+ 21183: 0x9982,
+ 21184: 0x9983,
+ 21185: 0x9989,
+ 21186: 0x7A39,
+ 21187: 0x7A37,
+ 21188: 0x7A51,
+ 21189: 0x9ECF,
+ 21190: 0x99A5,
+ 21191: 0x7A70,
+ 21192: 0x7688,
+ 21193: 0x768E,
+ 21194: 0x7693,
+ 21195: 0x7699,
+ 21196: 0x76A4,
+ 21197: 0x74DE,
+ 21198: 0x74E0,
+ 21199: 0x752C,
+ 21200: 0x9E20,
+ 21201: 0x9E22,
+ 21202: 0x9E28,
+ 21203: 0x9E29,
+ 21204: 0x9E2A,
+ 21205: 0x9E2B,
+ 21206: 0x9E2C,
+ 21207: 0x9E32,
+ 21208: 0x9E31,
+ 21209: 0x9E36,
+ 21210: 0x9E38,
+ 21211: 0x9E37,
+ 21212: 0x9E39,
+ 21213: 0x9E3A,
+ 21214: 0x9E3E,
+ 21215: 0x9E41,
+ 21216: 0x9E42,
+ 21217: 0x9E44,
+ 21218: 0x9E46,
+ 21219: 0x9E47,
+ 21220: 0x9E48,
+ 21221: 0x9E49,
+ 21222: 0x9E4B,
+ 21223: 0x9E4C,
+ 21224: 0x9E4E,
+ 21225: 0x9E51,
+ 21226: 0x9E55,
+ 21227: 0x9E57,
+ 21228: 0x9E5A,
+ 21229: 0x9E5B,
+ 21230: 0x9E5C,
+ 21231: 0x9E5E,
+ 21232: 0x9E63,
+ 21233: 0x9E66,
+ 21234: 0x9E67,
+ 21235: 0x9E68,
+ 21236: 0x9E69,
+ 21237: 0x9E6A,
+ 21238: 0x9E6B,
+ 21239: 0x9E6C,
+ 21240: 0x9E71,
+ 21241: 0x9E6D,
+ 21242: 0x9E73,
+ 21243: 0x7592,
+ 21244: 0x7594,
+ 21245: 0x7596,
+ 21246: 0x75A0,
+ 21247: 0x759D,
+ 21248: 0x75AC,
+ 21249: 0x75A3,
+ 21250: 0x75B3,
+ 21251: 0x75B4,
+ 21252: 0x75B8,
+ 21253: 0x75C4,
+ 21254: 0x75B1,
+ 21255: 0x75B0,
+ 21256: 0x75C3,
+ 21257: 0x75C2,
+ 21258: 0x75D6,
+ 21259: 0x75CD,
+ 21260: 0x75E3,
+ 21261: 0x75E8,
+ 21262: 0x75E6,
+ 21263: 0x75E4,
+ 21264: 0x75EB,
+ 21265: 0x75E7,
+ 21266: 0x7603,
+ 21267: 0x75F1,
+ 21268: 0x75FC,
+ 21269: 0x75FF,
+ 21270: 0x7610,
+ 21271: 0x7600,
+ 21272: 0x7605,
+ 21273: 0x760C,
+ 21274: 0x7617,
+ 21275: 0x760A,
+ 21276: 0x7625,
+ 21277: 0x7618,
+ 21278: 0x7615,
+ 21279: 0x7619,
+ 21280: 0x998C,
+ 21281: 0x998E,
+ 21282: 0x999A,
+ 21283: 0x999B,
+ 21284: 0x999C,
+ 21285: 0x999D,
+ 21286: 0x999E,
+ 21287: 0x999F,
+ 21288: 0x99A0,
+ 21289: 0x99A1,
+ 21290: 0x99A2,
+ 21291: 0x99A3,
+ 21292: 0x99A4,
+ 21293: 0x99A6,
+ 21294: 0x99A7,
+ 21295: 0x99A9,
+ 21296: 0x99AA,
+ 21297: 0x99AB,
+ 21298: 0x99AC,
+ 21299: 0x99AD,
+ 21300: 0x99AE,
+ 21301: 0x99AF,
+ 21302: 0x99B0,
+ 21303: 0x99B1,
+ 21304: 0x99B2,
+ 21305: 0x99B3,
+ 21306: 0x99B4,
+ 21307: 0x99B5,
+ 21308: 0x99B6,
+ 21309: 0x99B7,
+ 21310: 0x99B8,
+ 21311: 0x99B9,
+ 21312: 0x99BA,
+ 21313: 0x99BB,
+ 21314: 0x99BC,
+ 21315: 0x99BD,
+ 21316: 0x99BE,
+ 21317: 0x99BF,
+ 21318: 0x99C0,
+ 21319: 0x99C1,
+ 21320: 0x99C2,
+ 21321: 0x99C3,
+ 21322: 0x99C4,
+ 21323: 0x99C5,
+ 21324: 0x99C6,
+ 21325: 0x99C7,
+ 21326: 0x99C8,
+ 21327: 0x99C9,
+ 21328: 0x99CA,
+ 21329: 0x99CB,
+ 21330: 0x99CC,
+ 21331: 0x99CD,
+ 21332: 0x99CE,
+ 21333: 0x99CF,
+ 21334: 0x99D0,
+ 21335: 0x99D1,
+ 21336: 0x99D2,
+ 21337: 0x99D3,
+ 21338: 0x99D4,
+ 21339: 0x99D5,
+ 21340: 0x99D6,
+ 21341: 0x99D7,
+ 21342: 0x99D8,
+ 21343: 0x99D9,
+ 21344: 0x99DA,
+ 21345: 0x99DB,
+ 21346: 0x99DC,
+ 21347: 0x99DD,
+ 21348: 0x99DE,
+ 21349: 0x99DF,
+ 21350: 0x99E0,
+ 21351: 0x99E1,
+ 21352: 0x99E2,
+ 21353: 0x99E3,
+ 21354: 0x99E4,
+ 21355: 0x99E5,
+ 21356: 0x99E6,
+ 21357: 0x99E7,
+ 21358: 0x99E8,
+ 21359: 0x99E9,
+ 21360: 0x99EA,
+ 21361: 0x99EB,
+ 21362: 0x99EC,
+ 21363: 0x99ED,
+ 21364: 0x99EE,
+ 21365: 0x99EF,
+ 21366: 0x99F0,
+ 21367: 0x99F1,
+ 21368: 0x99F2,
+ 21369: 0x99F3,
+ 21370: 0x99F4,
+ 21371: 0x99F5,
+ 21372: 0x99F6,
+ 21373: 0x99F7,
+ 21374: 0x99F8,
+ 21375: 0x99F9,
+ 21376: 0x761B,
+ 21377: 0x763C,
+ 21378: 0x7622,
+ 21379: 0x7620,
+ 21380: 0x7640,
+ 21381: 0x762D,
+ 21382: 0x7630,
+ 21383: 0x763F,
+ 21384: 0x7635,
+ 21385: 0x7643,
+ 21386: 0x763E,
+ 21387: 0x7633,
+ 21388: 0x764D,
+ 21389: 0x765E,
+ 21390: 0x7654,
+ 21391: 0x765C,
+ 21392: 0x7656,
+ 21393: 0x766B,
+ 21394: 0x766F,
+ 21395: 0x7FCA,
+ 21396: 0x7AE6,
+ 21397: 0x7A78,
+ 21398: 0x7A79,
+ 21399: 0x7A80,
+ 21400: 0x7A86,
+ 21401: 0x7A88,
+ 21402: 0x7A95,
+ 21403: 0x7AA6,
+ 21404: 0x7AA0,
+ 21405: 0x7AAC,
+ 21406: 0x7AA8,
+ 21407: 0x7AAD,
+ 21408: 0x7AB3,
+ 21409: 0x8864,
+ 21410: 0x8869,
+ 21411: 0x8872,
+ 21412: 0x887D,
+ 21413: 0x887F,
+ 21414: 0x8882,
+ 21415: 0x88A2,
+ 21416: 0x88C6,
+ 21417: 0x88B7,
+ 21418: 0x88BC,
+ 21419: 0x88C9,
+ 21420: 0x88E2,
+ 21421: 0x88CE,
+ 21422: 0x88E3,
+ 21423: 0x88E5,
+ 21424: 0x88F1,
+ 21425: 0x891A,
+ 21426: 0x88FC,
+ 21427: 0x88E8,
+ 21428: 0x88FE,
+ 21429: 0x88F0,
+ 21430: 0x8921,
+ 21431: 0x8919,
+ 21432: 0x8913,
+ 21433: 0x891B,
+ 21434: 0x890A,
+ 21435: 0x8934,
+ 21436: 0x892B,
+ 21437: 0x8936,
+ 21438: 0x8941,
+ 21439: 0x8966,
+ 21440: 0x897B,
+ 21441: 0x758B,
+ 21442: 0x80E5,
+ 21443: 0x76B2,
+ 21444: 0x76B4,
+ 21445: 0x77DC,
+ 21446: 0x8012,
+ 21447: 0x8014,
+ 21448: 0x8016,
+ 21449: 0x801C,
+ 21450: 0x8020,
+ 21451: 0x8022,
+ 21452: 0x8025,
+ 21453: 0x8026,
+ 21454: 0x8027,
+ 21455: 0x8029,
+ 21456: 0x8028,
+ 21457: 0x8031,
+ 21458: 0x800B,
+ 21459: 0x8035,
+ 21460: 0x8043,
+ 21461: 0x8046,
+ 21462: 0x804D,
+ 21463: 0x8052,
+ 21464: 0x8069,
+ 21465: 0x8071,
+ 21466: 0x8983,
+ 21467: 0x9878,
+ 21468: 0x9880,
+ 21469: 0x9883,
+ 21470: 0x99FA,
+ 21471: 0x99FB,
+ 21472: 0x99FC,
+ 21473: 0x99FD,
+ 21474: 0x99FE,
+ 21475: 0x99FF,
+ 21476: 0x9A00,
+ 21477: 0x9A01,
+ 21478: 0x9A02,
+ 21479: 0x9A03,
+ 21480: 0x9A04,
+ 21481: 0x9A05,
+ 21482: 0x9A06,
+ 21483: 0x9A07,
+ 21484: 0x9A08,
+ 21485: 0x9A09,
+ 21486: 0x9A0A,
+ 21487: 0x9A0B,
+ 21488: 0x9A0C,
+ 21489: 0x9A0D,
+ 21490: 0x9A0E,
+ 21491: 0x9A0F,
+ 21492: 0x9A10,
+ 21493: 0x9A11,
+ 21494: 0x9A12,
+ 21495: 0x9A13,
+ 21496: 0x9A14,
+ 21497: 0x9A15,
+ 21498: 0x9A16,
+ 21499: 0x9A17,
+ 21500: 0x9A18,
+ 21501: 0x9A19,
+ 21502: 0x9A1A,
+ 21503: 0x9A1B,
+ 21504: 0x9A1C,
+ 21505: 0x9A1D,
+ 21506: 0x9A1E,
+ 21507: 0x9A1F,
+ 21508: 0x9A20,
+ 21509: 0x9A21,
+ 21510: 0x9A22,
+ 21511: 0x9A23,
+ 21512: 0x9A24,
+ 21513: 0x9A25,
+ 21514: 0x9A26,
+ 21515: 0x9A27,
+ 21516: 0x9A28,
+ 21517: 0x9A29,
+ 21518: 0x9A2A,
+ 21519: 0x9A2B,
+ 21520: 0x9A2C,
+ 21521: 0x9A2D,
+ 21522: 0x9A2E,
+ 21523: 0x9A2F,
+ 21524: 0x9A30,
+ 21525: 0x9A31,
+ 21526: 0x9A32,
+ 21527: 0x9A33,
+ 21528: 0x9A34,
+ 21529: 0x9A35,
+ 21530: 0x9A36,
+ 21531: 0x9A37,
+ 21532: 0x9A38,
+ 21533: 0x9A39,
+ 21534: 0x9A3A,
+ 21535: 0x9A3B,
+ 21536: 0x9A3C,
+ 21537: 0x9A3D,
+ 21538: 0x9A3E,
+ 21539: 0x9A3F,
+ 21540: 0x9A40,
+ 21541: 0x9A41,
+ 21542: 0x9A42,
+ 21543: 0x9A43,
+ 21544: 0x9A44,
+ 21545: 0x9A45,
+ 21546: 0x9A46,
+ 21547: 0x9A47,
+ 21548: 0x9A48,
+ 21549: 0x9A49,
+ 21550: 0x9A4A,
+ 21551: 0x9A4B,
+ 21552: 0x9A4C,
+ 21553: 0x9A4D,
+ 21554: 0x9A4E,
+ 21555: 0x9A4F,
+ 21556: 0x9A50,
+ 21557: 0x9A51,
+ 21558: 0x9A52,
+ 21559: 0x9A53,
+ 21560: 0x9A54,
+ 21561: 0x9A55,
+ 21562: 0x9A56,
+ 21563: 0x9A57,
+ 21564: 0x9A58,
+ 21565: 0x9A59,
+ 21566: 0x9889,
+ 21567: 0x988C,
+ 21568: 0x988D,
+ 21569: 0x988F,
+ 21570: 0x9894,
+ 21571: 0x989A,
+ 21572: 0x989B,
+ 21573: 0x989E,
+ 21574: 0x989F,
+ 21575: 0x98A1,
+ 21576: 0x98A2,
+ 21577: 0x98A5,
+ 21578: 0x98A6,
+ 21579: 0x864D,
+ 21580: 0x8654,
+ 21581: 0x866C,
+ 21582: 0x866E,
+ 21583: 0x867F,
+ 21584: 0x867A,
+ 21585: 0x867C,
+ 21586: 0x867B,
+ 21587: 0x86A8,
+ 21588: 0x868D,
+ 21589: 0x868B,
+ 21590: 0x86AC,
+ 21591: 0x869D,
+ 21592: 0x86A7,
+ 21593: 0x86A3,
+ 21594: 0x86AA,
+ 21595: 0x8693,
+ 21596: 0x86A9,
+ 21597: 0x86B6,
+ 21598: 0x86C4,
+ 21599: 0x86B5,
+ 21600: 0x86CE,
+ 21601: 0x86B0,
+ 21602: 0x86BA,
+ 21603: 0x86B1,
+ 21604: 0x86AF,
+ 21605: 0x86C9,
+ 21606: 0x86CF,
+ 21607: 0x86B4,
+ 21608: 0x86E9,
+ 21609: 0x86F1,
+ 21610: 0x86F2,
+ 21611: 0x86ED,
+ 21612: 0x86F3,
+ 21613: 0x86D0,
+ 21614: 0x8713,
+ 21615: 0x86DE,
+ 21616: 0x86F4,
+ 21617: 0x86DF,
+ 21618: 0x86D8,
+ 21619: 0x86D1,
+ 21620: 0x8703,
+ 21621: 0x8707,
+ 21622: 0x86F8,
+ 21623: 0x8708,
+ 21624: 0x870A,
+ 21625: 0x870D,
+ 21626: 0x8709,
+ 21627: 0x8723,
+ 21628: 0x873B,
+ 21629: 0x871E,
+ 21630: 0x8725,
+ 21631: 0x872E,
+ 21632: 0x871A,
+ 21633: 0x873E,
+ 21634: 0x8748,
+ 21635: 0x8734,
+ 21636: 0x8731,
+ 21637: 0x8729,
+ 21638: 0x8737,
+ 21639: 0x873F,
+ 21640: 0x8782,
+ 21641: 0x8722,
+ 21642: 0x877D,
+ 21643: 0x877E,
+ 21644: 0x877B,
+ 21645: 0x8760,
+ 21646: 0x8770,
+ 21647: 0x874C,
+ 21648: 0x876E,
+ 21649: 0x878B,
+ 21650: 0x8753,
+ 21651: 0x8763,
+ 21652: 0x877C,
+ 21653: 0x8764,
+ 21654: 0x8759,
+ 21655: 0x8765,
+ 21656: 0x8793,
+ 21657: 0x87AF,
+ 21658: 0x87A8,
+ 21659: 0x87D2,
+ 21660: 0x9A5A,
+ 21661: 0x9A5B,
+ 21662: 0x9A5C,
+ 21663: 0x9A5D,
+ 21664: 0x9A5E,
+ 21665: 0x9A5F,
+ 21666: 0x9A60,
+ 21667: 0x9A61,
+ 21668: 0x9A62,
+ 21669: 0x9A63,
+ 21670: 0x9A64,
+ 21671: 0x9A65,
+ 21672: 0x9A66,
+ 21673: 0x9A67,
+ 21674: 0x9A68,
+ 21675: 0x9A69,
+ 21676: 0x9A6A,
+ 21677: 0x9A6B,
+ 21678: 0x9A72,
+ 21679: 0x9A83,
+ 21680: 0x9A89,
+ 21681: 0x9A8D,
+ 21682: 0x9A8E,
+ 21683: 0x9A94,
+ 21684: 0x9A95,
+ 21685: 0x9A99,
+ 21686: 0x9AA6,
+ 21687: 0x9AA9,
+ 21688: 0x9AAA,
+ 21689: 0x9AAB,
+ 21690: 0x9AAC,
+ 21691: 0x9AAD,
+ 21692: 0x9AAE,
+ 21693: 0x9AAF,
+ 21694: 0x9AB2,
+ 21695: 0x9AB3,
+ 21696: 0x9AB4,
+ 21697: 0x9AB5,
+ 21698: 0x9AB9,
+ 21699: 0x9ABB,
+ 21700: 0x9ABD,
+ 21701: 0x9ABE,
+ 21702: 0x9ABF,
+ 21703: 0x9AC3,
+ 21704: 0x9AC4,
+ 21705: 0x9AC6,
+ 21706: 0x9AC7,
+ 21707: 0x9AC8,
+ 21708: 0x9AC9,
+ 21709: 0x9ACA,
+ 21710: 0x9ACD,
+ 21711: 0x9ACE,
+ 21712: 0x9ACF,
+ 21713: 0x9AD0,
+ 21714: 0x9AD2,
+ 21715: 0x9AD4,
+ 21716: 0x9AD5,
+ 21717: 0x9AD6,
+ 21718: 0x9AD7,
+ 21719: 0x9AD9,
+ 21720: 0x9ADA,
+ 21721: 0x9ADB,
+ 21722: 0x9ADC,
+ 21723: 0x9ADD,
+ 21724: 0x9ADE,
+ 21725: 0x9AE0,
+ 21726: 0x9AE2,
+ 21727: 0x9AE3,
+ 21728: 0x9AE4,
+ 21729: 0x9AE5,
+ 21730: 0x9AE7,
+ 21731: 0x9AE8,
+ 21732: 0x9AE9,
+ 21733: 0x9AEA,
+ 21734: 0x9AEC,
+ 21735: 0x9AEE,
+ 21736: 0x9AF0,
+ 21737: 0x9AF1,
+ 21738: 0x9AF2,
+ 21739: 0x9AF3,
+ 21740: 0x9AF4,
+ 21741: 0x9AF5,
+ 21742: 0x9AF6,
+ 21743: 0x9AF7,
+ 21744: 0x9AF8,
+ 21745: 0x9AFA,
+ 21746: 0x9AFC,
+ 21747: 0x9AFD,
+ 21748: 0x9AFE,
+ 21749: 0x9AFF,
+ 21750: 0x9B00,
+ 21751: 0x9B01,
+ 21752: 0x9B02,
+ 21753: 0x9B04,
+ 21754: 0x9B05,
+ 21755: 0x9B06,
+ 21756: 0x87C6,
+ 21757: 0x8788,
+ 21758: 0x8785,
+ 21759: 0x87AD,
+ 21760: 0x8797,
+ 21761: 0x8783,
+ 21762: 0x87AB,
+ 21763: 0x87E5,
+ 21764: 0x87AC,
+ 21765: 0x87B5,
+ 21766: 0x87B3,
+ 21767: 0x87CB,
+ 21768: 0x87D3,
+ 21769: 0x87BD,
+ 21770: 0x87D1,
+ 21771: 0x87C0,
+ 21772: 0x87CA,
+ 21773: 0x87DB,
+ 21774: 0x87EA,
+ 21775: 0x87E0,
+ 21776: 0x87EE,
+ 21777: 0x8816,
+ 21778: 0x8813,
+ 21779: 0x87FE,
+ 21780: 0x880A,
+ 21781: 0x881B,
+ 21782: 0x8821,
+ 21783: 0x8839,
+ 21784: 0x883C,
+ 21785: 0x7F36,
+ 21786: 0x7F42,
+ 21787: 0x7F44,
+ 21788: 0x7F45,
+ 21789: 0x8210,
+ 21790: 0x7AFA,
+ 21791: 0x7AFD,
+ 21792: 0x7B08,
+ 21793: 0x7B03,
+ 21794: 0x7B04,
+ 21795: 0x7B15,
+ 21796: 0x7B0A,
+ 21797: 0x7B2B,
+ 21798: 0x7B0F,
+ 21799: 0x7B47,
+ 21800: 0x7B38,
+ 21801: 0x7B2A,
+ 21802: 0x7B19,
+ 21803: 0x7B2E,
+ 21804: 0x7B31,
+ 21805: 0x7B20,
+ 21806: 0x7B25,
+ 21807: 0x7B24,
+ 21808: 0x7B33,
+ 21809: 0x7B3E,
+ 21810: 0x7B1E,
+ 21811: 0x7B58,
+ 21812: 0x7B5A,
+ 21813: 0x7B45,
+ 21814: 0x7B75,
+ 21815: 0x7B4C,
+ 21816: 0x7B5D,
+ 21817: 0x7B60,
+ 21818: 0x7B6E,
+ 21819: 0x7B7B,
+ 21820: 0x7B62,
+ 21821: 0x7B72,
+ 21822: 0x7B71,
+ 21823: 0x7B90,
+ 21824: 0x7BA6,
+ 21825: 0x7BA7,
+ 21826: 0x7BB8,
+ 21827: 0x7BAC,
+ 21828: 0x7B9D,
+ 21829: 0x7BA8,
+ 21830: 0x7B85,
+ 21831: 0x7BAA,
+ 21832: 0x7B9C,
+ 21833: 0x7BA2,
+ 21834: 0x7BAB,
+ 21835: 0x7BB4,
+ 21836: 0x7BD1,
+ 21837: 0x7BC1,
+ 21838: 0x7BCC,
+ 21839: 0x7BDD,
+ 21840: 0x7BDA,
+ 21841: 0x7BE5,
+ 21842: 0x7BE6,
+ 21843: 0x7BEA,
+ 21844: 0x7C0C,
+ 21845: 0x7BFE,
+ 21846: 0x7BFC,
+ 21847: 0x7C0F,
+ 21848: 0x7C16,
+ 21849: 0x7C0B,
+ 21850: 0x9B07,
+ 21851: 0x9B09,
+ 21852: 0x9B0A,
+ 21853: 0x9B0B,
+ 21854: 0x9B0C,
+ 21855: 0x9B0D,
+ 21856: 0x9B0E,
+ 21857: 0x9B10,
+ 21858: 0x9B11,
+ 21859: 0x9B12,
+ 21860: 0x9B14,
+ 21861: 0x9B15,
+ 21862: 0x9B16,
+ 21863: 0x9B17,
+ 21864: 0x9B18,
+ 21865: 0x9B19,
+ 21866: 0x9B1A,
+ 21867: 0x9B1B,
+ 21868: 0x9B1C,
+ 21869: 0x9B1D,
+ 21870: 0x9B1E,
+ 21871: 0x9B20,
+ 21872: 0x9B21,
+ 21873: 0x9B22,
+ 21874: 0x9B24,
+ 21875: 0x9B25,
+ 21876: 0x9B26,
+ 21877: 0x9B27,
+ 21878: 0x9B28,
+ 21879: 0x9B29,
+ 21880: 0x9B2A,
+ 21881: 0x9B2B,
+ 21882: 0x9B2C,
+ 21883: 0x9B2D,
+ 21884: 0x9B2E,
+ 21885: 0x9B30,
+ 21886: 0x9B31,
+ 21887: 0x9B33,
+ 21888: 0x9B34,
+ 21889: 0x9B35,
+ 21890: 0x9B36,
+ 21891: 0x9B37,
+ 21892: 0x9B38,
+ 21893: 0x9B39,
+ 21894: 0x9B3A,
+ 21895: 0x9B3D,
+ 21896: 0x9B3E,
+ 21897: 0x9B3F,
+ 21898: 0x9B40,
+ 21899: 0x9B46,
+ 21900: 0x9B4A,
+ 21901: 0x9B4B,
+ 21902: 0x9B4C,
+ 21903: 0x9B4E,
+ 21904: 0x9B50,
+ 21905: 0x9B52,
+ 21906: 0x9B53,
+ 21907: 0x9B55,
+ 21908: 0x9B56,
+ 21909: 0x9B57,
+ 21910: 0x9B58,
+ 21911: 0x9B59,
+ 21912: 0x9B5A,
+ 21913: 0x9B5B,
+ 21914: 0x9B5C,
+ 21915: 0x9B5D,
+ 21916: 0x9B5E,
+ 21917: 0x9B5F,
+ 21918: 0x9B60,
+ 21919: 0x9B61,
+ 21920: 0x9B62,
+ 21921: 0x9B63,
+ 21922: 0x9B64,
+ 21923: 0x9B65,
+ 21924: 0x9B66,
+ 21925: 0x9B67,
+ 21926: 0x9B68,
+ 21927: 0x9B69,
+ 21928: 0x9B6A,
+ 21929: 0x9B6B,
+ 21930: 0x9B6C,
+ 21931: 0x9B6D,
+ 21932: 0x9B6E,
+ 21933: 0x9B6F,
+ 21934: 0x9B70,
+ 21935: 0x9B71,
+ 21936: 0x9B72,
+ 21937: 0x9B73,
+ 21938: 0x9B74,
+ 21939: 0x9B75,
+ 21940: 0x9B76,
+ 21941: 0x9B77,
+ 21942: 0x9B78,
+ 21943: 0x9B79,
+ 21944: 0x9B7A,
+ 21945: 0x9B7B,
+ 21946: 0x7C1F,
+ 21947: 0x7C2A,
+ 21948: 0x7C26,
+ 21949: 0x7C38,
+ 21950: 0x7C41,
+ 21951: 0x7C40,
+ 21952: 0x81FE,
+ 21953: 0x8201,
+ 21954: 0x8202,
+ 21955: 0x8204,
+ 21956: 0x81EC,
+ 21957: 0x8844,
+ 21958: 0x8221,
+ 21959: 0x8222,
+ 21960: 0x8223,
+ 21961: 0x822D,
+ 21962: 0x822F,
+ 21963: 0x8228,
+ 21964: 0x822B,
+ 21965: 0x8238,
+ 21966: 0x823B,
+ 21967: 0x8233,
+ 21968: 0x8234,
+ 21969: 0x823E,
+ 21970: 0x8244,
+ 21971: 0x8249,
+ 21972: 0x824B,
+ 21973: 0x824F,
+ 21974: 0x825A,
+ 21975: 0x825F,
+ 21976: 0x8268,
+ 21977: 0x887E,
+ 21978: 0x8885,
+ 21979: 0x8888,
+ 21980: 0x88D8,
+ 21981: 0x88DF,
+ 21982: 0x895E,
+ 21983: 0x7F9D,
+ 21984: 0x7F9F,
+ 21985: 0x7FA7,
+ 21986: 0x7FAF,
+ 21987: 0x7FB0,
+ 21988: 0x7FB2,
+ 21989: 0x7C7C,
+ 21990: 0x6549,
+ 21991: 0x7C91,
+ 21992: 0x7C9D,
+ 21993: 0x7C9C,
+ 21994: 0x7C9E,
+ 21995: 0x7CA2,
+ 21996: 0x7CB2,
+ 21997: 0x7CBC,
+ 21998: 0x7CBD,
+ 21999: 0x7CC1,
+ 22000: 0x7CC7,
+ 22001: 0x7CCC,
+ 22002: 0x7CCD,
+ 22003: 0x7CC8,
+ 22004: 0x7CC5,
+ 22005: 0x7CD7,
+ 22006: 0x7CE8,
+ 22007: 0x826E,
+ 22008: 0x66A8,
+ 22009: 0x7FBF,
+ 22010: 0x7FCE,
+ 22011: 0x7FD5,
+ 22012: 0x7FE5,
+ 22013: 0x7FE1,
+ 22014: 0x7FE6,
+ 22015: 0x7FE9,
+ 22016: 0x7FEE,
+ 22017: 0x7FF3,
+ 22018: 0x7CF8,
+ 22019: 0x7D77,
+ 22020: 0x7DA6,
+ 22021: 0x7DAE,
+ 22022: 0x7E47,
+ 22023: 0x7E9B,
+ 22024: 0x9EB8,
+ 22025: 0x9EB4,
+ 22026: 0x8D73,
+ 22027: 0x8D84,
+ 22028: 0x8D94,
+ 22029: 0x8D91,
+ 22030: 0x8DB1,
+ 22031: 0x8D67,
+ 22032: 0x8D6D,
+ 22033: 0x8C47,
+ 22034: 0x8C49,
+ 22035: 0x914A,
+ 22036: 0x9150,
+ 22037: 0x914E,
+ 22038: 0x914F,
+ 22039: 0x9164,
+ 22040: 0x9B7C,
+ 22041: 0x9B7D,
+ 22042: 0x9B7E,
+ 22043: 0x9B7F,
+ 22044: 0x9B80,
+ 22045: 0x9B81,
+ 22046: 0x9B82,
+ 22047: 0x9B83,
+ 22048: 0x9B84,
+ 22049: 0x9B85,
+ 22050: 0x9B86,
+ 22051: 0x9B87,
+ 22052: 0x9B88,
+ 22053: 0x9B89,
+ 22054: 0x9B8A,
+ 22055: 0x9B8B,
+ 22056: 0x9B8C,
+ 22057: 0x9B8D,
+ 22058: 0x9B8E,
+ 22059: 0x9B8F,
+ 22060: 0x9B90,
+ 22061: 0x9B91,
+ 22062: 0x9B92,
+ 22063: 0x9B93,
+ 22064: 0x9B94,
+ 22065: 0x9B95,
+ 22066: 0x9B96,
+ 22067: 0x9B97,
+ 22068: 0x9B98,
+ 22069: 0x9B99,
+ 22070: 0x9B9A,
+ 22071: 0x9B9B,
+ 22072: 0x9B9C,
+ 22073: 0x9B9D,
+ 22074: 0x9B9E,
+ 22075: 0x9B9F,
+ 22076: 0x9BA0,
+ 22077: 0x9BA1,
+ 22078: 0x9BA2,
+ 22079: 0x9BA3,
+ 22080: 0x9BA4,
+ 22081: 0x9BA5,
+ 22082: 0x9BA6,
+ 22083: 0x9BA7,
+ 22084: 0x9BA8,
+ 22085: 0x9BA9,
+ 22086: 0x9BAA,
+ 22087: 0x9BAB,
+ 22088: 0x9BAC,
+ 22089: 0x9BAD,
+ 22090: 0x9BAE,
+ 22091: 0x9BAF,
+ 22092: 0x9BB0,
+ 22093: 0x9BB1,
+ 22094: 0x9BB2,
+ 22095: 0x9BB3,
+ 22096: 0x9BB4,
+ 22097: 0x9BB5,
+ 22098: 0x9BB6,
+ 22099: 0x9BB7,
+ 22100: 0x9BB8,
+ 22101: 0x9BB9,
+ 22102: 0x9BBA,
+ 22103: 0x9BBB,
+ 22104: 0x9BBC,
+ 22105: 0x9BBD,
+ 22106: 0x9BBE,
+ 22107: 0x9BBF,
+ 22108: 0x9BC0,
+ 22109: 0x9BC1,
+ 22110: 0x9BC2,
+ 22111: 0x9BC3,
+ 22112: 0x9BC4,
+ 22113: 0x9BC5,
+ 22114: 0x9BC6,
+ 22115: 0x9BC7,
+ 22116: 0x9BC8,
+ 22117: 0x9BC9,
+ 22118: 0x9BCA,
+ 22119: 0x9BCB,
+ 22120: 0x9BCC,
+ 22121: 0x9BCD,
+ 22122: 0x9BCE,
+ 22123: 0x9BCF,
+ 22124: 0x9BD0,
+ 22125: 0x9BD1,
+ 22126: 0x9BD2,
+ 22127: 0x9BD3,
+ 22128: 0x9BD4,
+ 22129: 0x9BD5,
+ 22130: 0x9BD6,
+ 22131: 0x9BD7,
+ 22132: 0x9BD8,
+ 22133: 0x9BD9,
+ 22134: 0x9BDA,
+ 22135: 0x9BDB,
+ 22136: 0x9162,
+ 22137: 0x9161,
+ 22138: 0x9170,
+ 22139: 0x9169,
+ 22140: 0x916F,
+ 22141: 0x917D,
+ 22142: 0x917E,
+ 22143: 0x9172,
+ 22144: 0x9174,
+ 22145: 0x9179,
+ 22146: 0x918C,
+ 22147: 0x9185,
+ 22148: 0x9190,
+ 22149: 0x918D,
+ 22150: 0x9191,
+ 22151: 0x91A2,
+ 22152: 0x91A3,
+ 22153: 0x91AA,
+ 22154: 0x91AD,
+ 22155: 0x91AE,
+ 22156: 0x91AF,
+ 22157: 0x91B5,
+ 22158: 0x91B4,
+ 22159: 0x91BA,
+ 22160: 0x8C55,
+ 22161: 0x9E7E,
+ 22162: 0x8DB8,
+ 22163: 0x8DEB,
+ 22164: 0x8E05,
+ 22165: 0x8E59,
+ 22166: 0x8E69,
+ 22167: 0x8DB5,
+ 22168: 0x8DBF,
+ 22169: 0x8DBC,
+ 22170: 0x8DBA,
+ 22171: 0x8DC4,
+ 22172: 0x8DD6,
+ 22173: 0x8DD7,
+ 22174: 0x8DDA,
+ 22175: 0x8DDE,
+ 22176: 0x8DCE,
+ 22177: 0x8DCF,
+ 22178: 0x8DDB,
+ 22179: 0x8DC6,
+ 22180: 0x8DEC,
+ 22181: 0x8DF7,
+ 22182: 0x8DF8,
+ 22183: 0x8DE3,
+ 22184: 0x8DF9,
+ 22185: 0x8DFB,
+ 22186: 0x8DE4,
+ 22187: 0x8E09,
+ 22188: 0x8DFD,
+ 22189: 0x8E14,
+ 22190: 0x8E1D,
+ 22191: 0x8E1F,
+ 22192: 0x8E2C,
+ 22193: 0x8E2E,
+ 22194: 0x8E23,
+ 22195: 0x8E2F,
+ 22196: 0x8E3A,
+ 22197: 0x8E40,
+ 22198: 0x8E39,
+ 22199: 0x8E35,
+ 22200: 0x8E3D,
+ 22201: 0x8E31,
+ 22202: 0x8E49,
+ 22203: 0x8E41,
+ 22204: 0x8E42,
+ 22205: 0x8E51,
+ 22206: 0x8E52,
+ 22207: 0x8E4A,
+ 22208: 0x8E70,
+ 22209: 0x8E76,
+ 22210: 0x8E7C,
+ 22211: 0x8E6F,
+ 22212: 0x8E74,
+ 22213: 0x8E85,
+ 22214: 0x8E8F,
+ 22215: 0x8E94,
+ 22216: 0x8E90,
+ 22217: 0x8E9C,
+ 22218: 0x8E9E,
+ 22219: 0x8C78,
+ 22220: 0x8C82,
+ 22221: 0x8C8A,
+ 22222: 0x8C85,
+ 22223: 0x8C98,
+ 22224: 0x8C94,
+ 22225: 0x659B,
+ 22226: 0x89D6,
+ 22227: 0x89DE,
+ 22228: 0x89DA,
+ 22229: 0x89DC,
+ 22230: 0x9BDC,
+ 22231: 0x9BDD,
+ 22232: 0x9BDE,
+ 22233: 0x9BDF,
+ 22234: 0x9BE0,
+ 22235: 0x9BE1,
+ 22236: 0x9BE2,
+ 22237: 0x9BE3,
+ 22238: 0x9BE4,
+ 22239: 0x9BE5,
+ 22240: 0x9BE6,
+ 22241: 0x9BE7,
+ 22242: 0x9BE8,
+ 22243: 0x9BE9,
+ 22244: 0x9BEA,
+ 22245: 0x9BEB,
+ 22246: 0x9BEC,
+ 22247: 0x9BED,
+ 22248: 0x9BEE,
+ 22249: 0x9BEF,
+ 22250: 0x9BF0,
+ 22251: 0x9BF1,
+ 22252: 0x9BF2,
+ 22253: 0x9BF3,
+ 22254: 0x9BF4,
+ 22255: 0x9BF5,
+ 22256: 0x9BF6,
+ 22257: 0x9BF7,
+ 22258: 0x9BF8,
+ 22259: 0x9BF9,
+ 22260: 0x9BFA,
+ 22261: 0x9BFB,
+ 22262: 0x9BFC,
+ 22263: 0x9BFD,
+ 22264: 0x9BFE,
+ 22265: 0x9BFF,
+ 22266: 0x9C00,
+ 22267: 0x9C01,
+ 22268: 0x9C02,
+ 22269: 0x9C03,
+ 22270: 0x9C04,
+ 22271: 0x9C05,
+ 22272: 0x9C06,
+ 22273: 0x9C07,
+ 22274: 0x9C08,
+ 22275: 0x9C09,
+ 22276: 0x9C0A,
+ 22277: 0x9C0B,
+ 22278: 0x9C0C,
+ 22279: 0x9C0D,
+ 22280: 0x9C0E,
+ 22281: 0x9C0F,
+ 22282: 0x9C10,
+ 22283: 0x9C11,
+ 22284: 0x9C12,
+ 22285: 0x9C13,
+ 22286: 0x9C14,
+ 22287: 0x9C15,
+ 22288: 0x9C16,
+ 22289: 0x9C17,
+ 22290: 0x9C18,
+ 22291: 0x9C19,
+ 22292: 0x9C1A,
+ 22293: 0x9C1B,
+ 22294: 0x9C1C,
+ 22295: 0x9C1D,
+ 22296: 0x9C1E,
+ 22297: 0x9C1F,
+ 22298: 0x9C20,
+ 22299: 0x9C21,
+ 22300: 0x9C22,
+ 22301: 0x9C23,
+ 22302: 0x9C24,
+ 22303: 0x9C25,
+ 22304: 0x9C26,
+ 22305: 0x9C27,
+ 22306: 0x9C28,
+ 22307: 0x9C29,
+ 22308: 0x9C2A,
+ 22309: 0x9C2B,
+ 22310: 0x9C2C,
+ 22311: 0x9C2D,
+ 22312: 0x9C2E,
+ 22313: 0x9C2F,
+ 22314: 0x9C30,
+ 22315: 0x9C31,
+ 22316: 0x9C32,
+ 22317: 0x9C33,
+ 22318: 0x9C34,
+ 22319: 0x9C35,
+ 22320: 0x9C36,
+ 22321: 0x9C37,
+ 22322: 0x9C38,
+ 22323: 0x9C39,
+ 22324: 0x9C3A,
+ 22325: 0x9C3B,
+ 22326: 0x89E5,
+ 22327: 0x89EB,
+ 22328: 0x89EF,
+ 22329: 0x8A3E,
+ 22330: 0x8B26,
+ 22331: 0x9753,
+ 22332: 0x96E9,
+ 22333: 0x96F3,
+ 22334: 0x96EF,
+ 22335: 0x9706,
+ 22336: 0x9701,
+ 22337: 0x9708,
+ 22338: 0x970F,
+ 22339: 0x970E,
+ 22340: 0x972A,
+ 22341: 0x972D,
+ 22342: 0x9730,
+ 22343: 0x973E,
+ 22344: 0x9F80,
+ 22345: 0x9F83,
+ 22346: 0x9F85,
+ 22347: 0x9F86,
+ 22348: 0x9F87,
+ 22349: 0x9F88,
+ 22350: 0x9F89,
+ 22351: 0x9F8A,
+ 22352: 0x9F8C,
+ 22353: 0x9EFE,
+ 22354: 0x9F0B,
+ 22355: 0x9F0D,
+ 22356: 0x96B9,
+ 22357: 0x96BC,
+ 22358: 0x96BD,
+ 22359: 0x96CE,
+ 22360: 0x96D2,
+ 22361: 0x77BF,
+ 22362: 0x96E0,
+ 22363: 0x928E,
+ 22364: 0x92AE,
+ 22365: 0x92C8,
+ 22366: 0x933E,
+ 22367: 0x936A,
+ 22368: 0x93CA,
+ 22369: 0x938F,
+ 22370: 0x943E,
+ 22371: 0x946B,
+ 22372: 0x9C7F,
+ 22373: 0x9C82,
+ 22374: 0x9C85,
+ 22375: 0x9C86,
+ 22376: 0x9C87,
+ 22377: 0x9C88,
+ 22378: 0x7A23,
+ 22379: 0x9C8B,
+ 22380: 0x9C8E,
+ 22381: 0x9C90,
+ 22382: 0x9C91,
+ 22383: 0x9C92,
+ 22384: 0x9C94,
+ 22385: 0x9C95,
+ 22386: 0x9C9A,
+ 22387: 0x9C9B,
+ 22388: 0x9C9E,
+ 22389: 0x9C9F,
+ 22390: 0x9CA0,
+ 22391: 0x9CA1,
+ 22392: 0x9CA2,
+ 22393: 0x9CA3,
+ 22394: 0x9CA5,
+ 22395: 0x9CA6,
+ 22396: 0x9CA7,
+ 22397: 0x9CA8,
+ 22398: 0x9CA9,
+ 22399: 0x9CAB,
+ 22400: 0x9CAD,
+ 22401: 0x9CAE,
+ 22402: 0x9CB0,
+ 22403: 0x9CB1,
+ 22404: 0x9CB2,
+ 22405: 0x9CB3,
+ 22406: 0x9CB4,
+ 22407: 0x9CB5,
+ 22408: 0x9CB6,
+ 22409: 0x9CB7,
+ 22410: 0x9CBA,
+ 22411: 0x9CBB,
+ 22412: 0x9CBC,
+ 22413: 0x9CBD,
+ 22414: 0x9CC4,
+ 22415: 0x9CC5,
+ 22416: 0x9CC6,
+ 22417: 0x9CC7,
+ 22418: 0x9CCA,
+ 22419: 0x9CCB,
+ 22420: 0x9C3C,
+ 22421: 0x9C3D,
+ 22422: 0x9C3E,
+ 22423: 0x9C3F,
+ 22424: 0x9C40,
+ 22425: 0x9C41,
+ 22426: 0x9C42,
+ 22427: 0x9C43,
+ 22428: 0x9C44,
+ 22429: 0x9C45,
+ 22430: 0x9C46,
+ 22431: 0x9C47,
+ 22432: 0x9C48,
+ 22433: 0x9C49,
+ 22434: 0x9C4A,
+ 22435: 0x9C4B,
+ 22436: 0x9C4C,
+ 22437: 0x9C4D,
+ 22438: 0x9C4E,
+ 22439: 0x9C4F,
+ 22440: 0x9C50,
+ 22441: 0x9C51,
+ 22442: 0x9C52,
+ 22443: 0x9C53,
+ 22444: 0x9C54,
+ 22445: 0x9C55,
+ 22446: 0x9C56,
+ 22447: 0x9C57,
+ 22448: 0x9C58,
+ 22449: 0x9C59,
+ 22450: 0x9C5A,
+ 22451: 0x9C5B,
+ 22452: 0x9C5C,
+ 22453: 0x9C5D,
+ 22454: 0x9C5E,
+ 22455: 0x9C5F,
+ 22456: 0x9C60,
+ 22457: 0x9C61,
+ 22458: 0x9C62,
+ 22459: 0x9C63,
+ 22460: 0x9C64,
+ 22461: 0x9C65,
+ 22462: 0x9C66,
+ 22463: 0x9C67,
+ 22464: 0x9C68,
+ 22465: 0x9C69,
+ 22466: 0x9C6A,
+ 22467: 0x9C6B,
+ 22468: 0x9C6C,
+ 22469: 0x9C6D,
+ 22470: 0x9C6E,
+ 22471: 0x9C6F,
+ 22472: 0x9C70,
+ 22473: 0x9C71,
+ 22474: 0x9C72,
+ 22475: 0x9C73,
+ 22476: 0x9C74,
+ 22477: 0x9C75,
+ 22478: 0x9C76,
+ 22479: 0x9C77,
+ 22480: 0x9C78,
+ 22481: 0x9C79,
+ 22482: 0x9C7A,
+ 22483: 0x9C7B,
+ 22484: 0x9C7D,
+ 22485: 0x9C7E,
+ 22486: 0x9C80,
+ 22487: 0x9C83,
+ 22488: 0x9C84,
+ 22489: 0x9C89,
+ 22490: 0x9C8A,
+ 22491: 0x9C8C,
+ 22492: 0x9C8F,
+ 22493: 0x9C93,
+ 22494: 0x9C96,
+ 22495: 0x9C97,
+ 22496: 0x9C98,
+ 22497: 0x9C99,
+ 22498: 0x9C9D,
+ 22499: 0x9CAA,
+ 22500: 0x9CAC,
+ 22501: 0x9CAF,
+ 22502: 0x9CB9,
+ 22503: 0x9CBE,
+ 22504: 0x9CBF,
+ 22505: 0x9CC0,
+ 22506: 0x9CC1,
+ 22507: 0x9CC2,
+ 22508: 0x9CC8,
+ 22509: 0x9CC9,
+ 22510: 0x9CD1,
+ 22511: 0x9CD2,
+ 22512: 0x9CDA,
+ 22513: 0x9CDB,
+ 22514: 0x9CE0,
+ 22515: 0x9CE1,
+ 22516: 0x9CCC,
+ 22517: 0x9CCD,
+ 22518: 0x9CCE,
+ 22519: 0x9CCF,
+ 22520: 0x9CD0,
+ 22521: 0x9CD3,
+ 22522: 0x9CD4,
+ 22523: 0x9CD5,
+ 22524: 0x9CD7,
+ 22525: 0x9CD8,
+ 22526: 0x9CD9,
+ 22527: 0x9CDC,
+ 22528: 0x9CDD,
+ 22529: 0x9CDF,
+ 22530: 0x9CE2,
+ 22531: 0x977C,
+ 22532: 0x9785,
+ 22533: 0x9791,
+ 22534: 0x9792,
+ 22535: 0x9794,
+ 22536: 0x97AF,
+ 22537: 0x97AB,
+ 22538: 0x97A3,
+ 22539: 0x97B2,
+ 22540: 0x97B4,
+ 22541: 0x9AB1,
+ 22542: 0x9AB0,
+ 22543: 0x9AB7,
+ 22544: 0x9E58,
+ 22545: 0x9AB6,
+ 22546: 0x9ABA,
+ 22547: 0x9ABC,
+ 22548: 0x9AC1,
+ 22549: 0x9AC0,
+ 22550: 0x9AC5,
+ 22551: 0x9AC2,
+ 22552: 0x9ACB,
+ 22553: 0x9ACC,
+ 22554: 0x9AD1,
+ 22555: 0x9B45,
+ 22556: 0x9B43,
+ 22557: 0x9B47,
+ 22558: 0x9B49,
+ 22559: 0x9B48,
+ 22560: 0x9B4D,
+ 22561: 0x9B51,
+ 22562: 0x98E8,
+ 22563: 0x990D,
+ 22564: 0x992E,
+ 22565: 0x9955,
+ 22566: 0x9954,
+ 22567: 0x9ADF,
+ 22568: 0x9AE1,
+ 22569: 0x9AE6,
+ 22570: 0x9AEF,
+ 22571: 0x9AEB,
+ 22572: 0x9AFB,
+ 22573: 0x9AED,
+ 22574: 0x9AF9,
+ 22575: 0x9B08,
+ 22576: 0x9B0F,
+ 22577: 0x9B13,
+ 22578: 0x9B1F,
+ 22579: 0x9B23,
+ 22580: 0x9EBD,
+ 22581: 0x9EBE,
+ 22582: 0x7E3B,
+ 22583: 0x9E82,
+ 22584: 0x9E87,
+ 22585: 0x9E88,
+ 22586: 0x9E8B,
+ 22587: 0x9E92,
+ 22588: 0x93D6,
+ 22589: 0x9E9D,
+ 22590: 0x9E9F,
+ 22591: 0x9EDB,
+ 22592: 0x9EDC,
+ 22593: 0x9EDD,
+ 22594: 0x9EE0,
+ 22595: 0x9EDF,
+ 22596: 0x9EE2,
+ 22597: 0x9EE9,
+ 22598: 0x9EE7,
+ 22599: 0x9EE5,
+ 22600: 0x9EEA,
+ 22601: 0x9EEF,
+ 22602: 0x9F22,
+ 22603: 0x9F2C,
+ 22604: 0x9F2F,
+ 22605: 0x9F39,
+ 22606: 0x9F37,
+ 22607: 0x9F3D,
+ 22608: 0x9F3E,
+ 22609: 0x9F44,
+ 22610: 0x9CE3,
+ 22611: 0x9CE4,
+ 22612: 0x9CE5,
+ 22613: 0x9CE6,
+ 22614: 0x9CE7,
+ 22615: 0x9CE8,
+ 22616: 0x9CE9,
+ 22617: 0x9CEA,
+ 22618: 0x9CEB,
+ 22619: 0x9CEC,
+ 22620: 0x9CED,
+ 22621: 0x9CEE,
+ 22622: 0x9CEF,
+ 22623: 0x9CF0,
+ 22624: 0x9CF1,
+ 22625: 0x9CF2,
+ 22626: 0x9CF3,
+ 22627: 0x9CF4,
+ 22628: 0x9CF5,
+ 22629: 0x9CF6,
+ 22630: 0x9CF7,
+ 22631: 0x9CF8,
+ 22632: 0x9CF9,
+ 22633: 0x9CFA,
+ 22634: 0x9CFB,
+ 22635: 0x9CFC,
+ 22636: 0x9CFD,
+ 22637: 0x9CFE,
+ 22638: 0x9CFF,
+ 22639: 0x9D00,
+ 22640: 0x9D01,
+ 22641: 0x9D02,
+ 22642: 0x9D03,
+ 22643: 0x9D04,
+ 22644: 0x9D05,
+ 22645: 0x9D06,
+ 22646: 0x9D07,
+ 22647: 0x9D08,
+ 22648: 0x9D09,
+ 22649: 0x9D0A,
+ 22650: 0x9D0B,
+ 22651: 0x9D0C,
+ 22652: 0x9D0D,
+ 22653: 0x9D0E,
+ 22654: 0x9D0F,
+ 22655: 0x9D10,
+ 22656: 0x9D11,
+ 22657: 0x9D12,
+ 22658: 0x9D13,
+ 22659: 0x9D14,
+ 22660: 0x9D15,
+ 22661: 0x9D16,
+ 22662: 0x9D17,
+ 22663: 0x9D18,
+ 22664: 0x9D19,
+ 22665: 0x9D1A,
+ 22666: 0x9D1B,
+ 22667: 0x9D1C,
+ 22668: 0x9D1D,
+ 22669: 0x9D1E,
+ 22670: 0x9D1F,
+ 22671: 0x9D20,
+ 22672: 0x9D21,
+ 22673: 0x9D22,
+ 22674: 0x9D23,
+ 22675: 0x9D24,
+ 22676: 0x9D25,
+ 22677: 0x9D26,
+ 22678: 0x9D27,
+ 22679: 0x9D28,
+ 22680: 0x9D29,
+ 22681: 0x9D2A,
+ 22682: 0x9D2B,
+ 22683: 0x9D2C,
+ 22684: 0x9D2D,
+ 22685: 0x9D2E,
+ 22686: 0x9D2F,
+ 22687: 0x9D30,
+ 22688: 0x9D31,
+ 22689: 0x9D32,
+ 22690: 0x9D33,
+ 22691: 0x9D34,
+ 22692: 0x9D35,
+ 22693: 0x9D36,
+ 22694: 0x9D37,
+ 22695: 0x9D38,
+ 22696: 0x9D39,
+ 22697: 0x9D3A,
+ 22698: 0x9D3B,
+ 22699: 0x9D3C,
+ 22700: 0x9D3D,
+ 22701: 0x9D3E,
+ 22702: 0x9D3F,
+ 22703: 0x9D40,
+ 22704: 0x9D41,
+ 22705: 0x9D42,
+ 22800: 0x9D43,
+ 22801: 0x9D44,
+ 22802: 0x9D45,
+ 22803: 0x9D46,
+ 22804: 0x9D47,
+ 22805: 0x9D48,
+ 22806: 0x9D49,
+ 22807: 0x9D4A,
+ 22808: 0x9D4B,
+ 22809: 0x9D4C,
+ 22810: 0x9D4D,
+ 22811: 0x9D4E,
+ 22812: 0x9D4F,
+ 22813: 0x9D50,
+ 22814: 0x9D51,
+ 22815: 0x9D52,
+ 22816: 0x9D53,
+ 22817: 0x9D54,
+ 22818: 0x9D55,
+ 22819: 0x9D56,
+ 22820: 0x9D57,
+ 22821: 0x9D58,
+ 22822: 0x9D59,
+ 22823: 0x9D5A,
+ 22824: 0x9D5B,
+ 22825: 0x9D5C,
+ 22826: 0x9D5D,
+ 22827: 0x9D5E,
+ 22828: 0x9D5F,
+ 22829: 0x9D60,
+ 22830: 0x9D61,
+ 22831: 0x9D62,
+ 22832: 0x9D63,
+ 22833: 0x9D64,
+ 22834: 0x9D65,
+ 22835: 0x9D66,
+ 22836: 0x9D67,
+ 22837: 0x9D68,
+ 22838: 0x9D69,
+ 22839: 0x9D6A,
+ 22840: 0x9D6B,
+ 22841: 0x9D6C,
+ 22842: 0x9D6D,
+ 22843: 0x9D6E,
+ 22844: 0x9D6F,
+ 22845: 0x9D70,
+ 22846: 0x9D71,
+ 22847: 0x9D72,
+ 22848: 0x9D73,
+ 22849: 0x9D74,
+ 22850: 0x9D75,
+ 22851: 0x9D76,
+ 22852: 0x9D77,
+ 22853: 0x9D78,
+ 22854: 0x9D79,
+ 22855: 0x9D7A,
+ 22856: 0x9D7B,
+ 22857: 0x9D7C,
+ 22858: 0x9D7D,
+ 22859: 0x9D7E,
+ 22860: 0x9D7F,
+ 22861: 0x9D80,
+ 22862: 0x9D81,
+ 22863: 0x9D82,
+ 22864: 0x9D83,
+ 22865: 0x9D84,
+ 22866: 0x9D85,
+ 22867: 0x9D86,
+ 22868: 0x9D87,
+ 22869: 0x9D88,
+ 22870: 0x9D89,
+ 22871: 0x9D8A,
+ 22872: 0x9D8B,
+ 22873: 0x9D8C,
+ 22874: 0x9D8D,
+ 22875: 0x9D8E,
+ 22876: 0x9D8F,
+ 22877: 0x9D90,
+ 22878: 0x9D91,
+ 22879: 0x9D92,
+ 22880: 0x9D93,
+ 22881: 0x9D94,
+ 22882: 0x9D95,
+ 22883: 0x9D96,
+ 22884: 0x9D97,
+ 22885: 0x9D98,
+ 22886: 0x9D99,
+ 22887: 0x9D9A,
+ 22888: 0x9D9B,
+ 22889: 0x9D9C,
+ 22890: 0x9D9D,
+ 22891: 0x9D9E,
+ 22892: 0x9D9F,
+ 22893: 0x9DA0,
+ 22894: 0x9DA1,
+ 22895: 0x9DA2,
+ 22990: 0x9DA3,
+ 22991: 0x9DA4,
+ 22992: 0x9DA5,
+ 22993: 0x9DA6,
+ 22994: 0x9DA7,
+ 22995: 0x9DA8,
+ 22996: 0x9DA9,
+ 22997: 0x9DAA,
+ 22998: 0x9DAB,
+ 22999: 0x9DAC,
+ 23000: 0x9DAD,
+ 23001: 0x9DAE,
+ 23002: 0x9DAF,
+ 23003: 0x9DB0,
+ 23004: 0x9DB1,
+ 23005: 0x9DB2,
+ 23006: 0x9DB3,
+ 23007: 0x9DB4,
+ 23008: 0x9DB5,
+ 23009: 0x9DB6,
+ 23010: 0x9DB7,
+ 23011: 0x9DB8,
+ 23012: 0x9DB9,
+ 23013: 0x9DBA,
+ 23014: 0x9DBB,
+ 23015: 0x9DBC,
+ 23016: 0x9DBD,
+ 23017: 0x9DBE,
+ 23018: 0x9DBF,
+ 23019: 0x9DC0,
+ 23020: 0x9DC1,
+ 23021: 0x9DC2,
+ 23022: 0x9DC3,
+ 23023: 0x9DC4,
+ 23024: 0x9DC5,
+ 23025: 0x9DC6,
+ 23026: 0x9DC7,
+ 23027: 0x9DC8,
+ 23028: 0x9DC9,
+ 23029: 0x9DCA,
+ 23030: 0x9DCB,
+ 23031: 0x9DCC,
+ 23032: 0x9DCD,
+ 23033: 0x9DCE,
+ 23034: 0x9DCF,
+ 23035: 0x9DD0,
+ 23036: 0x9DD1,
+ 23037: 0x9DD2,
+ 23038: 0x9DD3,
+ 23039: 0x9DD4,
+ 23040: 0x9DD5,
+ 23041: 0x9DD6,
+ 23042: 0x9DD7,
+ 23043: 0x9DD8,
+ 23044: 0x9DD9,
+ 23045: 0x9DDA,
+ 23046: 0x9DDB,
+ 23047: 0x9DDC,
+ 23048: 0x9DDD,
+ 23049: 0x9DDE,
+ 23050: 0x9DDF,
+ 23051: 0x9DE0,
+ 23052: 0x9DE1,
+ 23053: 0x9DE2,
+ 23054: 0x9DE3,
+ 23055: 0x9DE4,
+ 23056: 0x9DE5,
+ 23057: 0x9DE6,
+ 23058: 0x9DE7,
+ 23059: 0x9DE8,
+ 23060: 0x9DE9,
+ 23061: 0x9DEA,
+ 23062: 0x9DEB,
+ 23063: 0x9DEC,
+ 23064: 0x9DED,
+ 23065: 0x9DEE,
+ 23066: 0x9DEF,
+ 23067: 0x9DF0,
+ 23068: 0x9DF1,
+ 23069: 0x9DF2,
+ 23070: 0x9DF3,
+ 23071: 0x9DF4,
+ 23072: 0x9DF5,
+ 23073: 0x9DF6,
+ 23074: 0x9DF7,
+ 23075: 0x9DF8,
+ 23076: 0x9DF9,
+ 23077: 0x9DFA,
+ 23078: 0x9DFB,
+ 23079: 0x9DFC,
+ 23080: 0x9DFD,
+ 23081: 0x9DFE,
+ 23082: 0x9DFF,
+ 23083: 0x9E00,
+ 23084: 0x9E01,
+ 23085: 0x9E02,
+ 23180: 0x9E03,
+ 23181: 0x9E04,
+ 23182: 0x9E05,
+ 23183: 0x9E06,
+ 23184: 0x9E07,
+ 23185: 0x9E08,
+ 23186: 0x9E09,
+ 23187: 0x9E0A,
+ 23188: 0x9E0B,
+ 23189: 0x9E0C,
+ 23190: 0x9E0D,
+ 23191: 0x9E0E,
+ 23192: 0x9E0F,
+ 23193: 0x9E10,
+ 23194: 0x9E11,
+ 23195: 0x9E12,
+ 23196: 0x9E13,
+ 23197: 0x9E14,
+ 23198: 0x9E15,
+ 23199: 0x9E16,
+ 23200: 0x9E17,
+ 23201: 0x9E18,
+ 23202: 0x9E19,
+ 23203: 0x9E1A,
+ 23204: 0x9E1B,
+ 23205: 0x9E1C,
+ 23206: 0x9E1D,
+ 23207: 0x9E1E,
+ 23208: 0x9E24,
+ 23209: 0x9E27,
+ 23210: 0x9E2E,
+ 23211: 0x9E30,
+ 23212: 0x9E34,
+ 23213: 0x9E3B,
+ 23214: 0x9E3C,
+ 23215: 0x9E40,
+ 23216: 0x9E4D,
+ 23217: 0x9E50,
+ 23218: 0x9E52,
+ 23219: 0x9E53,
+ 23220: 0x9E54,
+ 23221: 0x9E56,
+ 23222: 0x9E59,
+ 23223: 0x9E5D,
+ 23224: 0x9E5F,
+ 23225: 0x9E60,
+ 23226: 0x9E61,
+ 23227: 0x9E62,
+ 23228: 0x9E65,
+ 23229: 0x9E6E,
+ 23230: 0x9E6F,
+ 23231: 0x9E72,
+ 23232: 0x9E74,
+ 23233: 0x9E75,
+ 23234: 0x9E76,
+ 23235: 0x9E77,
+ 23236: 0x9E78,
+ 23237: 0x9E79,
+ 23238: 0x9E7A,
+ 23239: 0x9E7B,
+ 23240: 0x9E7C,
+ 23241: 0x9E7D,
+ 23242: 0x9E80,
+ 23243: 0x9E81,
+ 23244: 0x9E83,
+ 23245: 0x9E84,
+ 23246: 0x9E85,
+ 23247: 0x9E86,
+ 23248: 0x9E89,
+ 23249: 0x9E8A,
+ 23250: 0x9E8C,
+ 23251: 0x9E8D,
+ 23252: 0x9E8E,
+ 23253: 0x9E8F,
+ 23254: 0x9E90,
+ 23255: 0x9E91,
+ 23256: 0x9E94,
+ 23257: 0x9E95,
+ 23258: 0x9E96,
+ 23259: 0x9E97,
+ 23260: 0x9E98,
+ 23261: 0x9E99,
+ 23262: 0x9E9A,
+ 23263: 0x9E9B,
+ 23264: 0x9E9C,
+ 23265: 0x9E9E,
+ 23266: 0x9EA0,
+ 23267: 0x9EA1,
+ 23268: 0x9EA2,
+ 23269: 0x9EA3,
+ 23270: 0x9EA4,
+ 23271: 0x9EA5,
+ 23272: 0x9EA7,
+ 23273: 0x9EA8,
+ 23274: 0x9EA9,
+ 23275: 0x9EAA,
+ 23370: 0x9EAB,
+ 23371: 0x9EAC,
+ 23372: 0x9EAD,
+ 23373: 0x9EAE,
+ 23374: 0x9EAF,
+ 23375: 0x9EB0,
+ 23376: 0x9EB1,
+ 23377: 0x9EB2,
+ 23378: 0x9EB3,
+ 23379: 0x9EB5,
+ 23380: 0x9EB6,
+ 23381: 0x9EB7,
+ 23382: 0x9EB9,
+ 23383: 0x9EBA,
+ 23384: 0x9EBC,
+ 23385: 0x9EBF,
+ 23386: 0x9EC0,
+ 23387: 0x9EC1,
+ 23388: 0x9EC2,
+ 23389: 0x9EC3,
+ 23390: 0x9EC5,
+ 23391: 0x9EC6,
+ 23392: 0x9EC7,
+ 23393: 0x9EC8,
+ 23394: 0x9ECA,
+ 23395: 0x9ECB,
+ 23396: 0x9ECC,
+ 23397: 0x9ED0,
+ 23398: 0x9ED2,
+ 23399: 0x9ED3,
+ 23400: 0x9ED5,
+ 23401: 0x9ED6,
+ 23402: 0x9ED7,
+ 23403: 0x9ED9,
+ 23404: 0x9EDA,
+ 23405: 0x9EDE,
+ 23406: 0x9EE1,
+ 23407: 0x9EE3,
+ 23408: 0x9EE4,
+ 23409: 0x9EE6,
+ 23410: 0x9EE8,
+ 23411: 0x9EEB,
+ 23412: 0x9EEC,
+ 23413: 0x9EED,
+ 23414: 0x9EEE,
+ 23415: 0x9EF0,
+ 23416: 0x9EF1,
+ 23417: 0x9EF2,
+ 23418: 0x9EF3,
+ 23419: 0x9EF4,
+ 23420: 0x9EF5,
+ 23421: 0x9EF6,
+ 23422: 0x9EF7,
+ 23423: 0x9EF8,
+ 23424: 0x9EFA,
+ 23425: 0x9EFD,
+ 23426: 0x9EFF,
+ 23427: 0x9F00,
+ 23428: 0x9F01,
+ 23429: 0x9F02,
+ 23430: 0x9F03,
+ 23431: 0x9F04,
+ 23432: 0x9F05,
+ 23433: 0x9F06,
+ 23434: 0x9F07,
+ 23435: 0x9F08,
+ 23436: 0x9F09,
+ 23437: 0x9F0A,
+ 23438: 0x9F0C,
+ 23439: 0x9F0F,
+ 23440: 0x9F11,
+ 23441: 0x9F12,
+ 23442: 0x9F14,
+ 23443: 0x9F15,
+ 23444: 0x9F16,
+ 23445: 0x9F18,
+ 23446: 0x9F1A,
+ 23447: 0x9F1B,
+ 23448: 0x9F1C,
+ 23449: 0x9F1D,
+ 23450: 0x9F1E,
+ 23451: 0x9F1F,
+ 23452: 0x9F21,
+ 23453: 0x9F23,
+ 23454: 0x9F24,
+ 23455: 0x9F25,
+ 23456: 0x9F26,
+ 23457: 0x9F27,
+ 23458: 0x9F28,
+ 23459: 0x9F29,
+ 23460: 0x9F2A,
+ 23461: 0x9F2B,
+ 23462: 0x9F2D,
+ 23463: 0x9F2E,
+ 23464: 0x9F30,
+ 23465: 0x9F31,
+ 23560: 0x9F32,
+ 23561: 0x9F33,
+ 23562: 0x9F34,
+ 23563: 0x9F35,
+ 23564: 0x9F36,
+ 23565: 0x9F38,
+ 23566: 0x9F3A,
+ 23567: 0x9F3C,
+ 23568: 0x9F3F,
+ 23569: 0x9F40,
+ 23570: 0x9F41,
+ 23571: 0x9F42,
+ 23572: 0x9F43,
+ 23573: 0x9F45,
+ 23574: 0x9F46,
+ 23575: 0x9F47,
+ 23576: 0x9F48,
+ 23577: 0x9F49,
+ 23578: 0x9F4A,
+ 23579: 0x9F4B,
+ 23580: 0x9F4C,
+ 23581: 0x9F4D,
+ 23582: 0x9F4E,
+ 23583: 0x9F4F,
+ 23584: 0x9F52,
+ 23585: 0x9F53,
+ 23586: 0x9F54,
+ 23587: 0x9F55,
+ 23588: 0x9F56,
+ 23589: 0x9F57,
+ 23590: 0x9F58,
+ 23591: 0x9F59,
+ 23592: 0x9F5A,
+ 23593: 0x9F5B,
+ 23594: 0x9F5C,
+ 23595: 0x9F5D,
+ 23596: 0x9F5E,
+ 23597: 0x9F5F,
+ 23598: 0x9F60,
+ 23599: 0x9F61,
+ 23600: 0x9F62,
+ 23601: 0x9F63,
+ 23602: 0x9F64,
+ 23603: 0x9F65,
+ 23604: 0x9F66,
+ 23605: 0x9F67,
+ 23606: 0x9F68,
+ 23607: 0x9F69,
+ 23608: 0x9F6A,
+ 23609: 0x9F6B,
+ 23610: 0x9F6C,
+ 23611: 0x9F6D,
+ 23612: 0x9F6E,
+ 23613: 0x9F6F,
+ 23614: 0x9F70,
+ 23615: 0x9F71,
+ 23616: 0x9F72,
+ 23617: 0x9F73,
+ 23618: 0x9F74,
+ 23619: 0x9F75,
+ 23620: 0x9F76,
+ 23621: 0x9F77,
+ 23622: 0x9F78,
+ 23623: 0x9F79,
+ 23624: 0x9F7A,
+ 23625: 0x9F7B,
+ 23626: 0x9F7C,
+ 23627: 0x9F7D,
+ 23628: 0x9F7E,
+ 23629: 0x9F81,
+ 23630: 0x9F82,
+ 23631: 0x9F8D,
+ 23632: 0x9F8E,
+ 23633: 0x9F8F,
+ 23634: 0x9F90,
+ 23635: 0x9F91,
+ 23636: 0x9F92,
+ 23637: 0x9F93,
+ 23638: 0x9F94,
+ 23639: 0x9F95,
+ 23640: 0x9F96,
+ 23641: 0x9F97,
+ 23642: 0x9F98,
+ 23643: 0x9F9C,
+ 23644: 0x9F9D,
+ 23645: 0x9F9E,
+ 23646: 0x9FA1,
+ 23647: 0x9FA2,
+ 23648: 0x9FA3,
+ 23649: 0x9FA4,
+ 23650: 0x9FA5,
+ 23651: 0xF92C,
+ 23652: 0xF979,
+ 23653: 0xF995,
+ 23654: 0xF9E7,
+ 23655: 0xF9F1,
+ 23750: 0xFA0C,
+ 23751: 0xFA0D,
+ 23752: 0xFA0E,
+ 23753: 0xFA0F,
+ 23754: 0xFA11,
+ 23755: 0xFA13,
+ 23756: 0xFA14,
+ 23757: 0xFA18,
+ 23758: 0xFA1F,
+ 23759: 0xFA20,
+ 23760: 0xFA21,
+ 23761: 0xFA23,
+ 23762: 0xFA24,
+ 23763: 0xFA27,
+ 23764: 0xFA28,
+ 23765: 0xFA29,
+ 23766: 0x2E81,
+ 23770: 0x2E84,
+ 23771: 0x3473,
+ 23772: 0x3447,
+ 23773: 0x2E88,
+ 23774: 0x2E8B,
+ 23776: 0x359E,
+ 23777: 0x361A,
+ 23778: 0x360E,
+ 23779: 0x2E8C,
+ 23780: 0x2E97,
+ 23781: 0x396E,
+ 23782: 0x3918,
+ 23784: 0x39CF,
+ 23785: 0x39DF,
+ 23786: 0x3A73,
+ 23787: 0x39D0,
+ 23790: 0x3B4E,
+ 23791: 0x3C6E,
+ 23792: 0x3CE0,
+ 23793: 0x2EA7,
+ 23796: 0x2EAA,
+ 23797: 0x4056,
+ 23798: 0x415F,
+ 23799: 0x2EAE,
+ 23800: 0x4337,
+ 23801: 0x2EB3,
+ 23802: 0x2EB6,
+ 23803: 0x2EB7,
+ 23805: 0x43B1,
+ 23806: 0x43AC,
+ 23807: 0x2EBB,
+ 23808: 0x43DD,
+ 23809: 0x44D6,
+ 23810: 0x4661,
+ 23811: 0x464C,
+ 23813: 0x4723,
+ 23814: 0x4729,
+ 23815: 0x477C,
+ 23816: 0x478D,
+ 23817: 0x2ECA,
+ 23818: 0x4947,
+ 23819: 0x497A,
+ 23820: 0x497D,
+ 23821: 0x4982,
+ 23822: 0x4983,
+ 23823: 0x4985,
+ 23824: 0x4986,
+ 23825: 0x499F,
+ 23826: 0x499B,
+ 23827: 0x49B7,
+ 23828: 0x49B6,
+ 23831: 0x4CA3,
+ 23832: 0x4C9F,
+ 23833: 0x4CA0,
+ 23834: 0x4CA1,
+ 23835: 0x4C77,
+ 23836: 0x4CA2,
+ 23837: 0x4D13,
+ 23838: 0x4D14,
+ 23839: 0x4D15,
+ 23840: 0x4D16,
+ 23841: 0x4D17,
+ 23842: 0x4D18,
+ 23843: 0x4D19,
+ 23844: 0x4DAE,
+}
+
+const numEncodeTables = 5
+
+// encodeX are the encoding tables from Unicode to GBK code,
+// sorted by decreasing length.
+// encode0: 28965 entries for runes in [11905, 40870).
+// encode1: 1587 entries for runes in [ 8208, 9795).
+// encode2: 942 entries for runes in [ 164, 1106).
+// encode3: 438 entries for runes in [65072, 65510).
+// encode4: 254 entries for runes in [63788, 64042).
+
+const encode0Low, encode0High = 11905, 40870
+
+var encode0 = [...]uint16{
+ 11905 - 11905: 0xFE50,
+ 11908 - 11905: 0xFE54,
+ 11912 - 11905: 0xFE57,
+ 11915 - 11905: 0xFE58,
+ 11916 - 11905: 0xFE5D,
+ 11927 - 11905: 0xFE5E,
+ 11943 - 11905: 0xFE6B,
+ 11946 - 11905: 0xFE6E,
+ 11950 - 11905: 0xFE71,
+ 11955 - 11905: 0xFE73,
+ 11958 - 11905: 0xFE74,
+ 11959 - 11905: 0xFE75,
+ 11963 - 11905: 0xFE79,
+ 11978 - 11905: 0xFE84,
+ 12272 - 11905: 0xA98A,
+ 12273 - 11905: 0xA98B,
+ 12274 - 11905: 0xA98C,
+ 12275 - 11905: 0xA98D,
+ 12276 - 11905: 0xA98E,
+ 12277 - 11905: 0xA98F,
+ 12278 - 11905: 0xA990,
+ 12279 - 11905: 0xA991,
+ 12280 - 11905: 0xA992,
+ 12281 - 11905: 0xA993,
+ 12282 - 11905: 0xA994,
+ 12283 - 11905: 0xA995,
+ 12288 - 11905: 0xA1A1,
+ 12289 - 11905: 0xA1A2,
+ 12290 - 11905: 0xA1A3,
+ 12291 - 11905: 0xA1A8,
+ 12293 - 11905: 0xA1A9,
+ 12294 - 11905: 0xA965,
+ 12295 - 11905: 0xA996,
+ 12296 - 11905: 0xA1B4,
+ 12297 - 11905: 0xA1B5,
+ 12298 - 11905: 0xA1B6,
+ 12299 - 11905: 0xA1B7,
+ 12300 - 11905: 0xA1B8,
+ 12301 - 11905: 0xA1B9,
+ 12302 - 11905: 0xA1BA,
+ 12303 - 11905: 0xA1BB,
+ 12304 - 11905: 0xA1BE,
+ 12305 - 11905: 0xA1BF,
+ 12306 - 11905: 0xA893,
+ 12307 - 11905: 0xA1FE,
+ 12308 - 11905: 0xA1B2,
+ 12309 - 11905: 0xA1B3,
+ 12310 - 11905: 0xA1BC,
+ 12311 - 11905: 0xA1BD,
+ 12317 - 11905: 0xA894,
+ 12318 - 11905: 0xA895,
+ 12321 - 11905: 0xA940,
+ 12322 - 11905: 0xA941,
+ 12323 - 11905: 0xA942,
+ 12324 - 11905: 0xA943,
+ 12325 - 11905: 0xA944,
+ 12326 - 11905: 0xA945,
+ 12327 - 11905: 0xA946,
+ 12328 - 11905: 0xA947,
+ 12329 - 11905: 0xA948,
+ 12350 - 11905: 0xA989,
+ 12353 - 11905: 0xA4A1,
+ 12354 - 11905: 0xA4A2,
+ 12355 - 11905: 0xA4A3,
+ 12356 - 11905: 0xA4A4,
+ 12357 - 11905: 0xA4A5,
+ 12358 - 11905: 0xA4A6,
+ 12359 - 11905: 0xA4A7,
+ 12360 - 11905: 0xA4A8,
+ 12361 - 11905: 0xA4A9,
+ 12362 - 11905: 0xA4AA,
+ 12363 - 11905: 0xA4AB,
+ 12364 - 11905: 0xA4AC,
+ 12365 - 11905: 0xA4AD,
+ 12366 - 11905: 0xA4AE,
+ 12367 - 11905: 0xA4AF,
+ 12368 - 11905: 0xA4B0,
+ 12369 - 11905: 0xA4B1,
+ 12370 - 11905: 0xA4B2,
+ 12371 - 11905: 0xA4B3,
+ 12372 - 11905: 0xA4B4,
+ 12373 - 11905: 0xA4B5,
+ 12374 - 11905: 0xA4B6,
+ 12375 - 11905: 0xA4B7,
+ 12376 - 11905: 0xA4B8,
+ 12377 - 11905: 0xA4B9,
+ 12378 - 11905: 0xA4BA,
+ 12379 - 11905: 0xA4BB,
+ 12380 - 11905: 0xA4BC,
+ 12381 - 11905: 0xA4BD,
+ 12382 - 11905: 0xA4BE,
+ 12383 - 11905: 0xA4BF,
+ 12384 - 11905: 0xA4C0,
+ 12385 - 11905: 0xA4C1,
+ 12386 - 11905: 0xA4C2,
+ 12387 - 11905: 0xA4C3,
+ 12388 - 11905: 0xA4C4,
+ 12389 - 11905: 0xA4C5,
+ 12390 - 11905: 0xA4C6,
+ 12391 - 11905: 0xA4C7,
+ 12392 - 11905: 0xA4C8,
+ 12393 - 11905: 0xA4C9,
+ 12394 - 11905: 0xA4CA,
+ 12395 - 11905: 0xA4CB,
+ 12396 - 11905: 0xA4CC,
+ 12397 - 11905: 0xA4CD,
+ 12398 - 11905: 0xA4CE,
+ 12399 - 11905: 0xA4CF,
+ 12400 - 11905: 0xA4D0,
+ 12401 - 11905: 0xA4D1,
+ 12402 - 11905: 0xA4D2,
+ 12403 - 11905: 0xA4D3,
+ 12404 - 11905: 0xA4D4,
+ 12405 - 11905: 0xA4D5,
+ 12406 - 11905: 0xA4D6,
+ 12407 - 11905: 0xA4D7,
+ 12408 - 11905: 0xA4D8,
+ 12409 - 11905: 0xA4D9,
+ 12410 - 11905: 0xA4DA,
+ 12411 - 11905: 0xA4DB,
+ 12412 - 11905: 0xA4DC,
+ 12413 - 11905: 0xA4DD,
+ 12414 - 11905: 0xA4DE,
+ 12415 - 11905: 0xA4DF,
+ 12416 - 11905: 0xA4E0,
+ 12417 - 11905: 0xA4E1,
+ 12418 - 11905: 0xA4E2,
+ 12419 - 11905: 0xA4E3,
+ 12420 - 11905: 0xA4E4,
+ 12421 - 11905: 0xA4E5,
+ 12422 - 11905: 0xA4E6,
+ 12423 - 11905: 0xA4E7,
+ 12424 - 11905: 0xA4E8,
+ 12425 - 11905: 0xA4E9,
+ 12426 - 11905: 0xA4EA,
+ 12427 - 11905: 0xA4EB,
+ 12428 - 11905: 0xA4EC,
+ 12429 - 11905: 0xA4ED,
+ 12430 - 11905: 0xA4EE,
+ 12431 - 11905: 0xA4EF,
+ 12432 - 11905: 0xA4F0,
+ 12433 - 11905: 0xA4F1,
+ 12434 - 11905: 0xA4F2,
+ 12435 - 11905: 0xA4F3,
+ 12443 - 11905: 0xA961,
+ 12444 - 11905: 0xA962,
+ 12445 - 11905: 0xA966,
+ 12446 - 11905: 0xA967,
+ 12449 - 11905: 0xA5A1,
+ 12450 - 11905: 0xA5A2,
+ 12451 - 11905: 0xA5A3,
+ 12452 - 11905: 0xA5A4,
+ 12453 - 11905: 0xA5A5,
+ 12454 - 11905: 0xA5A6,
+ 12455 - 11905: 0xA5A7,
+ 12456 - 11905: 0xA5A8,
+ 12457 - 11905: 0xA5A9,
+ 12458 - 11905: 0xA5AA,
+ 12459 - 11905: 0xA5AB,
+ 12460 - 11905: 0xA5AC,
+ 12461 - 11905: 0xA5AD,
+ 12462 - 11905: 0xA5AE,
+ 12463 - 11905: 0xA5AF,
+ 12464 - 11905: 0xA5B0,
+ 12465 - 11905: 0xA5B1,
+ 12466 - 11905: 0xA5B2,
+ 12467 - 11905: 0xA5B3,
+ 12468 - 11905: 0xA5B4,
+ 12469 - 11905: 0xA5B5,
+ 12470 - 11905: 0xA5B6,
+ 12471 - 11905: 0xA5B7,
+ 12472 - 11905: 0xA5B8,
+ 12473 - 11905: 0xA5B9,
+ 12474 - 11905: 0xA5BA,
+ 12475 - 11905: 0xA5BB,
+ 12476 - 11905: 0xA5BC,
+ 12477 - 11905: 0xA5BD,
+ 12478 - 11905: 0xA5BE,
+ 12479 - 11905: 0xA5BF,
+ 12480 - 11905: 0xA5C0,
+ 12481 - 11905: 0xA5C1,
+ 12482 - 11905: 0xA5C2,
+ 12483 - 11905: 0xA5C3,
+ 12484 - 11905: 0xA5C4,
+ 12485 - 11905: 0xA5C5,
+ 12486 - 11905: 0xA5C6,
+ 12487 - 11905: 0xA5C7,
+ 12488 - 11905: 0xA5C8,
+ 12489 - 11905: 0xA5C9,
+ 12490 - 11905: 0xA5CA,
+ 12491 - 11905: 0xA5CB,
+ 12492 - 11905: 0xA5CC,
+ 12493 - 11905: 0xA5CD,
+ 12494 - 11905: 0xA5CE,
+ 12495 - 11905: 0xA5CF,
+ 12496 - 11905: 0xA5D0,
+ 12497 - 11905: 0xA5D1,
+ 12498 - 11905: 0xA5D2,
+ 12499 - 11905: 0xA5D3,
+ 12500 - 11905: 0xA5D4,
+ 12501 - 11905: 0xA5D5,
+ 12502 - 11905: 0xA5D6,
+ 12503 - 11905: 0xA5D7,
+ 12504 - 11905: 0xA5D8,
+ 12505 - 11905: 0xA5D9,
+ 12506 - 11905: 0xA5DA,
+ 12507 - 11905: 0xA5DB,
+ 12508 - 11905: 0xA5DC,
+ 12509 - 11905: 0xA5DD,
+ 12510 - 11905: 0xA5DE,
+ 12511 - 11905: 0xA5DF,
+ 12512 - 11905: 0xA5E0,
+ 12513 - 11905: 0xA5E1,
+ 12514 - 11905: 0xA5E2,
+ 12515 - 11905: 0xA5E3,
+ 12516 - 11905: 0xA5E4,
+ 12517 - 11905: 0xA5E5,
+ 12518 - 11905: 0xA5E6,
+ 12519 - 11905: 0xA5E7,
+ 12520 - 11905: 0xA5E8,
+ 12521 - 11905: 0xA5E9,
+ 12522 - 11905: 0xA5EA,
+ 12523 - 11905: 0xA5EB,
+ 12524 - 11905: 0xA5EC,
+ 12525 - 11905: 0xA5ED,
+ 12526 - 11905: 0xA5EE,
+ 12527 - 11905: 0xA5EF,
+ 12528 - 11905: 0xA5F0,
+ 12529 - 11905: 0xA5F1,
+ 12530 - 11905: 0xA5F2,
+ 12531 - 11905: 0xA5F3,
+ 12532 - 11905: 0xA5F4,
+ 12533 - 11905: 0xA5F5,
+ 12534 - 11905: 0xA5F6,
+ 12540 - 11905: 0xA960,
+ 12541 - 11905: 0xA963,
+ 12542 - 11905: 0xA964,
+ 12549 - 11905: 0xA8C5,
+ 12550 - 11905: 0xA8C6,
+ 12551 - 11905: 0xA8C7,
+ 12552 - 11905: 0xA8C8,
+ 12553 - 11905: 0xA8C9,
+ 12554 - 11905: 0xA8CA,
+ 12555 - 11905: 0xA8CB,
+ 12556 - 11905: 0xA8CC,
+ 12557 - 11905: 0xA8CD,
+ 12558 - 11905: 0xA8CE,
+ 12559 - 11905: 0xA8CF,
+ 12560 - 11905: 0xA8D0,
+ 12561 - 11905: 0xA8D1,
+ 12562 - 11905: 0xA8D2,
+ 12563 - 11905: 0xA8D3,
+ 12564 - 11905: 0xA8D4,
+ 12565 - 11905: 0xA8D5,
+ 12566 - 11905: 0xA8D6,
+ 12567 - 11905: 0xA8D7,
+ 12568 - 11905: 0xA8D8,
+ 12569 - 11905: 0xA8D9,
+ 12570 - 11905: 0xA8DA,
+ 12571 - 11905: 0xA8DB,
+ 12572 - 11905: 0xA8DC,
+ 12573 - 11905: 0xA8DD,
+ 12574 - 11905: 0xA8DE,
+ 12575 - 11905: 0xA8DF,
+ 12576 - 11905: 0xA8E0,
+ 12577 - 11905: 0xA8E1,
+ 12578 - 11905: 0xA8E2,
+ 12579 - 11905: 0xA8E3,
+ 12580 - 11905: 0xA8E4,
+ 12581 - 11905: 0xA8E5,
+ 12582 - 11905: 0xA8E6,
+ 12583 - 11905: 0xA8E7,
+ 12584 - 11905: 0xA8E8,
+ 12585 - 11905: 0xA8E9,
+ 12832 - 11905: 0xA2E5,
+ 12833 - 11905: 0xA2E6,
+ 12834 - 11905: 0xA2E7,
+ 12835 - 11905: 0xA2E8,
+ 12836 - 11905: 0xA2E9,
+ 12837 - 11905: 0xA2EA,
+ 12838 - 11905: 0xA2EB,
+ 12839 - 11905: 0xA2EC,
+ 12840 - 11905: 0xA2ED,
+ 12841 - 11905: 0xA2EE,
+ 12849 - 11905: 0xA95A,
+ 12963 - 11905: 0xA949,
+ 13198 - 11905: 0xA94A,
+ 13199 - 11905: 0xA94B,
+ 13212 - 11905: 0xA94C,
+ 13213 - 11905: 0xA94D,
+ 13214 - 11905: 0xA94E,
+ 13217 - 11905: 0xA94F,
+ 13252 - 11905: 0xA950,
+ 13262 - 11905: 0xA951,
+ 13265 - 11905: 0xA952,
+ 13266 - 11905: 0xA953,
+ 13269 - 11905: 0xA954,
+ 13383 - 11905: 0xFE56,
+ 13427 - 11905: 0xFE55,
+ 13726 - 11905: 0xFE5A,
+ 13838 - 11905: 0xFE5C,
+ 13850 - 11905: 0xFE5B,
+ 14616 - 11905: 0xFE60,
+ 14702 - 11905: 0xFE5F,
+ 14799 - 11905: 0xFE62,
+ 14800 - 11905: 0xFE65,
+ 14815 - 11905: 0xFE63,
+ 14963 - 11905: 0xFE64,
+ 15182 - 11905: 0xFE68,
+ 15470 - 11905: 0xFE69,
+ 15584 - 11905: 0xFE6A,
+ 16470 - 11905: 0xFE6F,
+ 16735 - 11905: 0xFE70,
+ 17207 - 11905: 0xFE72,
+ 17324 - 11905: 0xFE78,
+ 17329 - 11905: 0xFE77,
+ 17373 - 11905: 0xFE7A,
+ 17622 - 11905: 0xFE7B,
+ 17996 - 11905: 0xFE7D,
+ 18017 - 11905: 0xFE7C,
+ 18211 - 11905: 0xFE80,
+ 18217 - 11905: 0xFE81,
+ 18300 - 11905: 0xFE82,
+ 18317 - 11905: 0xFE83,
+ 18759 - 11905: 0xFE85,
+ 18810 - 11905: 0xFE86,
+ 18813 - 11905: 0xFE87,
+ 18818 - 11905: 0xFE88,
+ 18819 - 11905: 0xFE89,
+ 18821 - 11905: 0xFE8A,
+ 18822 - 11905: 0xFE8B,
+ 18843 - 11905: 0xFE8D,
+ 18847 - 11905: 0xFE8C,
+ 18870 - 11905: 0xFE8F,
+ 18871 - 11905: 0xFE8E,
+ 19575 - 11905: 0xFE96,
+ 19615 - 11905: 0xFE93,
+ 19616 - 11905: 0xFE94,
+ 19617 - 11905: 0xFE95,
+ 19618 - 11905: 0xFE97,
+ 19619 - 11905: 0xFE92,
+ 19731 - 11905: 0xFE98,
+ 19732 - 11905: 0xFE99,
+ 19733 - 11905: 0xFE9A,
+ 19734 - 11905: 0xFE9B,
+ 19735 - 11905: 0xFE9C,
+ 19736 - 11905: 0xFE9D,
+ 19737 - 11905: 0xFE9E,
+ 19886 - 11905: 0xFE9F,
+ 19968 - 11905: 0xD2BB,
+ 19969 - 11905: 0xB6A1,
+ 19970 - 11905: 0x8140,
+ 19971 - 11905: 0xC6DF,
+ 19972 - 11905: 0x8141,
+ 19973 - 11905: 0x8142,
+ 19974 - 11905: 0x8143,
+ 19975 - 11905: 0xCDF2,
+ 19976 - 11905: 0xD5C9,
+ 19977 - 11905: 0xC8FD,
+ 19978 - 11905: 0xC9CF,
+ 19979 - 11905: 0xCFC2,
+ 19980 - 11905: 0xD8A2,
+ 19981 - 11905: 0xB2BB,
+ 19982 - 11905: 0xD3EB,
+ 19983 - 11905: 0x8144,
+ 19984 - 11905: 0xD8A4,
+ 19985 - 11905: 0xB3F3,
+ 19986 - 11905: 0x8145,
+ 19987 - 11905: 0xD7A8,
+ 19988 - 11905: 0xC7D2,
+ 19989 - 11905: 0xD8A7,
+ 19990 - 11905: 0xCAC0,
+ 19991 - 11905: 0x8146,
+ 19992 - 11905: 0xC7F0,
+ 19993 - 11905: 0xB1FB,
+ 19994 - 11905: 0xD2B5,
+ 19995 - 11905: 0xB4D4,
+ 19996 - 11905: 0xB6AB,
+ 19997 - 11905: 0xCBBF,
+ 19998 - 11905: 0xD8A9,
+ 19999 - 11905: 0x8147,
+ 20000 - 11905: 0x8148,
+ 20001 - 11905: 0x8149,
+ 20002 - 11905: 0xB6AA,
+ 20003 - 11905: 0x814A,
+ 20004 - 11905: 0xC1BD,
+ 20005 - 11905: 0xD1CF,
+ 20006 - 11905: 0x814B,
+ 20007 - 11905: 0xC9A5,
+ 20008 - 11905: 0xD8AD,
+ 20009 - 11905: 0x814C,
+ 20010 - 11905: 0xB8F6,
+ 20011 - 11905: 0xD1BE,
+ 20012 - 11905: 0xE3DC,
+ 20013 - 11905: 0xD6D0,
+ 20014 - 11905: 0x814D,
+ 20015 - 11905: 0x814E,
+ 20016 - 11905: 0xB7E1,
+ 20017 - 11905: 0x814F,
+ 20018 - 11905: 0xB4AE,
+ 20019 - 11905: 0x8150,
+ 20020 - 11905: 0xC1D9,
+ 20021 - 11905: 0x8151,
+ 20022 - 11905: 0xD8BC,
+ 20023 - 11905: 0x8152,
+ 20024 - 11905: 0xCDE8,
+ 20025 - 11905: 0xB5A4,
+ 20026 - 11905: 0xCEAA,
+ 20027 - 11905: 0xD6F7,
+ 20028 - 11905: 0x8153,
+ 20029 - 11905: 0xC0F6,
+ 20030 - 11905: 0xBED9,
+ 20031 - 11905: 0xD8AF,
+ 20032 - 11905: 0x8154,
+ 20033 - 11905: 0x8155,
+ 20034 - 11905: 0x8156,
+ 20035 - 11905: 0xC4CB,
+ 20036 - 11905: 0x8157,
+ 20037 - 11905: 0xBEC3,
+ 20038 - 11905: 0x8158,
+ 20039 - 11905: 0xD8B1,
+ 20040 - 11905: 0xC3B4,
+ 20041 - 11905: 0xD2E5,
+ 20042 - 11905: 0x8159,
+ 20043 - 11905: 0xD6AE,
+ 20044 - 11905: 0xCEDA,
+ 20045 - 11905: 0xD5A7,
+ 20046 - 11905: 0xBAF5,
+ 20047 - 11905: 0xB7A6,
+ 20048 - 11905: 0xC0D6,
+ 20049 - 11905: 0x815A,
+ 20050 - 11905: 0xC6B9,
+ 20051 - 11905: 0xC5D2,
+ 20052 - 11905: 0xC7C7,
+ 20053 - 11905: 0x815B,
+ 20054 - 11905: 0xB9D4,
+ 20055 - 11905: 0x815C,
+ 20056 - 11905: 0xB3CB,
+ 20057 - 11905: 0xD2D2,
+ 20058 - 11905: 0x815D,
+ 20059 - 11905: 0x815E,
+ 20060 - 11905: 0xD8BF,
+ 20061 - 11905: 0xBEC5,
+ 20062 - 11905: 0xC6F2,
+ 20063 - 11905: 0xD2B2,
+ 20064 - 11905: 0xCFB0,
+ 20065 - 11905: 0xCFE7,
+ 20066 - 11905: 0x815F,
+ 20067 - 11905: 0x8160,
+ 20068 - 11905: 0x8161,
+ 20069 - 11905: 0x8162,
+ 20070 - 11905: 0xCAE9,
+ 20071 - 11905: 0x8163,
+ 20072 - 11905: 0x8164,
+ 20073 - 11905: 0xD8C0,
+ 20074 - 11905: 0x8165,
+ 20075 - 11905: 0x8166,
+ 20076 - 11905: 0x8167,
+ 20077 - 11905: 0x8168,
+ 20078 - 11905: 0x8169,
+ 20079 - 11905: 0x816A,
+ 20080 - 11905: 0xC2F2,
+ 20081 - 11905: 0xC2D2,
+ 20082 - 11905: 0x816B,
+ 20083 - 11905: 0xC8E9,
+ 20084 - 11905: 0x816C,
+ 20085 - 11905: 0x816D,
+ 20086 - 11905: 0x816E,
+ 20087 - 11905: 0x816F,
+ 20088 - 11905: 0x8170,
+ 20089 - 11905: 0x8171,
+ 20090 - 11905: 0x8172,
+ 20091 - 11905: 0x8173,
+ 20092 - 11905: 0x8174,
+ 20093 - 11905: 0x8175,
+ 20094 - 11905: 0xC7AC,
+ 20095 - 11905: 0x8176,
+ 20096 - 11905: 0x8177,
+ 20097 - 11905: 0x8178,
+ 20098 - 11905: 0x8179,
+ 20099 - 11905: 0x817A,
+ 20100 - 11905: 0x817B,
+ 20101 - 11905: 0x817C,
+ 20102 - 11905: 0xC1CB,
+ 20103 - 11905: 0x817D,
+ 20104 - 11905: 0xD3E8,
+ 20105 - 11905: 0xD5F9,
+ 20106 - 11905: 0x817E,
+ 20107 - 11905: 0xCAC2,
+ 20108 - 11905: 0xB6FE,
+ 20109 - 11905: 0xD8A1,
+ 20110 - 11905: 0xD3DA,
+ 20111 - 11905: 0xBFF7,
+ 20112 - 11905: 0x8180,
+ 20113 - 11905: 0xD4C6,
+ 20114 - 11905: 0xBBA5,
+ 20115 - 11905: 0xD8C1,
+ 20116 - 11905: 0xCEE5,
+ 20117 - 11905: 0xBEAE,
+ 20118 - 11905: 0x8181,
+ 20119 - 11905: 0x8182,
+ 20120 - 11905: 0xD8A8,
+ 20121 - 11905: 0x8183,
+ 20122 - 11905: 0xD1C7,
+ 20123 - 11905: 0xD0A9,
+ 20124 - 11905: 0x8184,
+ 20125 - 11905: 0x8185,
+ 20126 - 11905: 0x8186,
+ 20127 - 11905: 0xD8BD,
+ 20128 - 11905: 0xD9EF,
+ 20129 - 11905: 0xCDF6,
+ 20130 - 11905: 0xBFBA,
+ 20131 - 11905: 0x8187,
+ 20132 - 11905: 0xBDBB,
+ 20133 - 11905: 0xBAA5,
+ 20134 - 11905: 0xD2E0,
+ 20135 - 11905: 0xB2FA,
+ 20136 - 11905: 0xBAE0,
+ 20137 - 11905: 0xC4B6,
+ 20138 - 11905: 0x8188,
+ 20139 - 11905: 0xCFED,
+ 20140 - 11905: 0xBEA9,
+ 20141 - 11905: 0xCDA4,
+ 20142 - 11905: 0xC1C1,
+ 20143 - 11905: 0x8189,
+ 20144 - 11905: 0x818A,
+ 20145 - 11905: 0x818B,
+ 20146 - 11905: 0xC7D7,
+ 20147 - 11905: 0xD9F1,
+ 20148 - 11905: 0x818C,
+ 20149 - 11905: 0xD9F4,
+ 20150 - 11905: 0x818D,
+ 20151 - 11905: 0x818E,
+ 20152 - 11905: 0x818F,
+ 20153 - 11905: 0x8190,
+ 20154 - 11905: 0xC8CB,
+ 20155 - 11905: 0xD8E9,
+ 20156 - 11905: 0x8191,
+ 20157 - 11905: 0x8192,
+ 20158 - 11905: 0x8193,
+ 20159 - 11905: 0xD2DA,
+ 20160 - 11905: 0xCAB2,
+ 20161 - 11905: 0xC8CA,
+ 20162 - 11905: 0xD8EC,
+ 20163 - 11905: 0xD8EA,
+ 20164 - 11905: 0xD8C6,
+ 20165 - 11905: 0xBDF6,
+ 20166 - 11905: 0xC6CD,
+ 20167 - 11905: 0xB3F0,
+ 20168 - 11905: 0x8194,
+ 20169 - 11905: 0xD8EB,
+ 20170 - 11905: 0xBDF1,
+ 20171 - 11905: 0xBDE9,
+ 20172 - 11905: 0x8195,
+ 20173 - 11905: 0xC8D4,
+ 20174 - 11905: 0xB4D3,
+ 20175 - 11905: 0x8196,
+ 20176 - 11905: 0x8197,
+ 20177 - 11905: 0xC2D8,
+ 20178 - 11905: 0x8198,
+ 20179 - 11905: 0xB2D6,
+ 20180 - 11905: 0xD7D0,
+ 20181 - 11905: 0xCACB,
+ 20182 - 11905: 0xCBFB,
+ 20183 - 11905: 0xD5CC,
+ 20184 - 11905: 0xB8B6,
+ 20185 - 11905: 0xCFC9,
+ 20186 - 11905: 0x8199,
+ 20187 - 11905: 0x819A,
+ 20188 - 11905: 0x819B,
+ 20189 - 11905: 0xD9DA,
+ 20190 - 11905: 0xD8F0,
+ 20191 - 11905: 0xC7AA,
+ 20192 - 11905: 0x819C,
+ 20193 - 11905: 0xD8EE,
+ 20194 - 11905: 0x819D,
+ 20195 - 11905: 0xB4FA,
+ 20196 - 11905: 0xC1EE,
+ 20197 - 11905: 0xD2D4,
+ 20198 - 11905: 0x819E,
+ 20199 - 11905: 0x819F,
+ 20200 - 11905: 0xD8ED,
+ 20201 - 11905: 0x81A0,
+ 20202 - 11905: 0xD2C7,
+ 20203 - 11905: 0xD8EF,
+ 20204 - 11905: 0xC3C7,
+ 20205 - 11905: 0x81A1,
+ 20206 - 11905: 0x81A2,
+ 20207 - 11905: 0x81A3,
+ 20208 - 11905: 0xD1F6,
+ 20209 - 11905: 0x81A4,
+ 20210 - 11905: 0xD6D9,
+ 20211 - 11905: 0xD8F2,
+ 20212 - 11905: 0x81A5,
+ 20213 - 11905: 0xD8F5,
+ 20214 - 11905: 0xBCFE,
+ 20215 - 11905: 0xBCDB,
+ 20216 - 11905: 0x81A6,
+ 20217 - 11905: 0x81A7,
+ 20218 - 11905: 0x81A8,
+ 20219 - 11905: 0xC8CE,
+ 20220 - 11905: 0x81A9,
+ 20221 - 11905: 0xB7DD,
+ 20222 - 11905: 0x81AA,
+ 20223 - 11905: 0xB7C2,
+ 20224 - 11905: 0x81AB,
+ 20225 - 11905: 0xC6F3,
+ 20226 - 11905: 0x81AC,
+ 20227 - 11905: 0x81AD,
+ 20228 - 11905: 0x81AE,
+ 20229 - 11905: 0x81AF,
+ 20230 - 11905: 0x81B0,
+ 20231 - 11905: 0x81B1,
+ 20232 - 11905: 0x81B2,
+ 20233 - 11905: 0xD8F8,
+ 20234 - 11905: 0xD2C1,
+ 20235 - 11905: 0x81B3,
+ 20236 - 11905: 0x81B4,
+ 20237 - 11905: 0xCEE9,
+ 20238 - 11905: 0xBCBF,
+ 20239 - 11905: 0xB7FC,
+ 20240 - 11905: 0xB7A5,
+ 20241 - 11905: 0xD0DD,
+ 20242 - 11905: 0x81B5,
+ 20243 - 11905: 0x81B6,
+ 20244 - 11905: 0x81B7,
+ 20245 - 11905: 0x81B8,
+ 20246 - 11905: 0x81B9,
+ 20247 - 11905: 0xD6DA,
+ 20248 - 11905: 0xD3C5,
+ 20249 - 11905: 0xBBEF,
+ 20250 - 11905: 0xBBE1,
+ 20251 - 11905: 0xD8F1,
+ 20252 - 11905: 0x81BA,
+ 20253 - 11905: 0x81BB,
+ 20254 - 11905: 0xC9A1,
+ 20255 - 11905: 0xCEB0,
+ 20256 - 11905: 0xB4AB,
+ 20257 - 11905: 0x81BC,
+ 20258 - 11905: 0xD8F3,
+ 20259 - 11905: 0x81BD,
+ 20260 - 11905: 0xC9CB,
+ 20261 - 11905: 0xD8F6,
+ 20262 - 11905: 0xC2D7,
+ 20263 - 11905: 0xD8F7,
+ 20264 - 11905: 0x81BE,
+ 20265 - 11905: 0x81BF,
+ 20266 - 11905: 0xCEB1,
+ 20267 - 11905: 0xD8F9,
+ 20268 - 11905: 0x81C0,
+ 20269 - 11905: 0x81C1,
+ 20270 - 11905: 0x81C2,
+ 20271 - 11905: 0xB2AE,
+ 20272 - 11905: 0xB9C0,
+ 20273 - 11905: 0x81C3,
+ 20274 - 11905: 0xD9A3,
+ 20275 - 11905: 0x81C4,
+ 20276 - 11905: 0xB0E9,
+ 20277 - 11905: 0x81C5,
+ 20278 - 11905: 0xC1E6,
+ 20279 - 11905: 0x81C6,
+ 20280 - 11905: 0xC9EC,
+ 20281 - 11905: 0x81C7,
+ 20282 - 11905: 0xCBC5,
+ 20283 - 11905: 0x81C8,
+ 20284 - 11905: 0xCBC6,
+ 20285 - 11905: 0xD9A4,
+ 20286 - 11905: 0x81C9,
+ 20287 - 11905: 0x81CA,
+ 20288 - 11905: 0x81CB,
+ 20289 - 11905: 0x81CC,
+ 20290 - 11905: 0x81CD,
+ 20291 - 11905: 0xB5E8,
+ 20292 - 11905: 0x81CE,
+ 20293 - 11905: 0x81CF,
+ 20294 - 11905: 0xB5AB,
+ 20295 - 11905: 0x81D0,
+ 20296 - 11905: 0x81D1,
+ 20297 - 11905: 0x81D2,
+ 20298 - 11905: 0x81D3,
+ 20299 - 11905: 0x81D4,
+ 20300 - 11905: 0x81D5,
+ 20301 - 11905: 0xCEBB,
+ 20302 - 11905: 0xB5CD,
+ 20303 - 11905: 0xD7A1,
+ 20304 - 11905: 0xD7F4,
+ 20305 - 11905: 0xD3D3,
+ 20306 - 11905: 0x81D6,
+ 20307 - 11905: 0xCCE5,
+ 20308 - 11905: 0x81D7,
+ 20309 - 11905: 0xBACE,
+ 20310 - 11905: 0x81D8,
+ 20311 - 11905: 0xD9A2,
+ 20312 - 11905: 0xD9DC,
+ 20313 - 11905: 0xD3E0,
+ 20314 - 11905: 0xD8FD,
+ 20315 - 11905: 0xB7F0,
+ 20316 - 11905: 0xD7F7,
+ 20317 - 11905: 0xD8FE,
+ 20318 - 11905: 0xD8FA,
+ 20319 - 11905: 0xD9A1,
+ 20320 - 11905: 0xC4E3,
+ 20321 - 11905: 0x81D9,
+ 20322 - 11905: 0x81DA,
+ 20323 - 11905: 0xD3B6,
+ 20324 - 11905: 0xD8F4,
+ 20325 - 11905: 0xD9DD,
+ 20326 - 11905: 0x81DB,
+ 20327 - 11905: 0xD8FB,
+ 20328 - 11905: 0x81DC,
+ 20329 - 11905: 0xC5E5,
+ 20330 - 11905: 0x81DD,
+ 20331 - 11905: 0x81DE,
+ 20332 - 11905: 0xC0D0,
+ 20333 - 11905: 0x81DF,
+ 20334 - 11905: 0x81E0,
+ 20335 - 11905: 0xD1F0,
+ 20336 - 11905: 0xB0DB,
+ 20337 - 11905: 0x81E1,
+ 20338 - 11905: 0x81E2,
+ 20339 - 11905: 0xBCD1,
+ 20340 - 11905: 0xD9A6,
+ 20341 - 11905: 0x81E3,
+ 20342 - 11905: 0xD9A5,
+ 20343 - 11905: 0x81E4,
+ 20344 - 11905: 0x81E5,
+ 20345 - 11905: 0x81E6,
+ 20346 - 11905: 0x81E7,
+ 20347 - 11905: 0xD9AC,
+ 20348 - 11905: 0xD9AE,
+ 20349 - 11905: 0x81E8,
+ 20350 - 11905: 0xD9AB,
+ 20351 - 11905: 0xCAB9,
+ 20352 - 11905: 0x81E9,
+ 20353 - 11905: 0x81EA,
+ 20354 - 11905: 0x81EB,
+ 20355 - 11905: 0xD9A9,
+ 20356 - 11905: 0xD6B6,
+ 20357 - 11905: 0x81EC,
+ 20358 - 11905: 0x81ED,
+ 20359 - 11905: 0x81EE,
+ 20360 - 11905: 0xB3DE,
+ 20361 - 11905: 0xD9A8,
+ 20362 - 11905: 0x81EF,
+ 20363 - 11905: 0xC0FD,
+ 20364 - 11905: 0x81F0,
+ 20365 - 11905: 0xCACC,
+ 20366 - 11905: 0x81F1,
+ 20367 - 11905: 0xD9AA,
+ 20368 - 11905: 0x81F2,
+ 20369 - 11905: 0xD9A7,
+ 20370 - 11905: 0x81F3,
+ 20371 - 11905: 0x81F4,
+ 20372 - 11905: 0xD9B0,
+ 20373 - 11905: 0x81F5,
+ 20374 - 11905: 0x81F6,
+ 20375 - 11905: 0xB6B1,
+ 20376 - 11905: 0x81F7,
+ 20377 - 11905: 0x81F8,
+ 20378 - 11905: 0x81F9,
+ 20379 - 11905: 0xB9A9,
+ 20380 - 11905: 0x81FA,
+ 20381 - 11905: 0xD2C0,
+ 20382 - 11905: 0x81FB,
+ 20383 - 11905: 0x81FC,
+ 20384 - 11905: 0xCFC0,
+ 20385 - 11905: 0x81FD,
+ 20386 - 11905: 0x81FE,
+ 20387 - 11905: 0xC2C2,
+ 20388 - 11905: 0x8240,
+ 20389 - 11905: 0xBDC4,
+ 20390 - 11905: 0xD5EC,
+ 20391 - 11905: 0xB2E0,
+ 20392 - 11905: 0xC7C8,
+ 20393 - 11905: 0xBFEB,
+ 20394 - 11905: 0xD9AD,
+ 20395 - 11905: 0x8241,
+ 20396 - 11905: 0xD9AF,
+ 20397 - 11905: 0x8242,
+ 20398 - 11905: 0xCEEA,
+ 20399 - 11905: 0xBAEE,
+ 20400 - 11905: 0x8243,
+ 20401 - 11905: 0x8244,
+ 20402 - 11905: 0x8245,
+ 20403 - 11905: 0x8246,
+ 20404 - 11905: 0x8247,
+ 20405 - 11905: 0xC7D6,
+ 20406 - 11905: 0x8248,
+ 20407 - 11905: 0x8249,
+ 20408 - 11905: 0x824A,
+ 20409 - 11905: 0x824B,
+ 20410 - 11905: 0x824C,
+ 20411 - 11905: 0x824D,
+ 20412 - 11905: 0x824E,
+ 20413 - 11905: 0x824F,
+ 20414 - 11905: 0x8250,
+ 20415 - 11905: 0xB1E3,
+ 20416 - 11905: 0x8251,
+ 20417 - 11905: 0x8252,
+ 20418 - 11905: 0x8253,
+ 20419 - 11905: 0xB4D9,
+ 20420 - 11905: 0xB6ED,
+ 20421 - 11905: 0xD9B4,
+ 20422 - 11905: 0x8254,
+ 20423 - 11905: 0x8255,
+ 20424 - 11905: 0x8256,
+ 20425 - 11905: 0x8257,
+ 20426 - 11905: 0xBFA1,
+ 20427 - 11905: 0x8258,
+ 20428 - 11905: 0x8259,
+ 20429 - 11905: 0x825A,
+ 20430 - 11905: 0xD9DE,
+ 20431 - 11905: 0xC7CE,
+ 20432 - 11905: 0xC0FE,
+ 20433 - 11905: 0xD9B8,
+ 20434 - 11905: 0x825B,
+ 20435 - 11905: 0x825C,
+ 20436 - 11905: 0x825D,
+ 20437 - 11905: 0x825E,
+ 20438 - 11905: 0x825F,
+ 20439 - 11905: 0xCBD7,
+ 20440 - 11905: 0xB7FD,
+ 20441 - 11905: 0x8260,
+ 20442 - 11905: 0xD9B5,
+ 20443 - 11905: 0x8261,
+ 20444 - 11905: 0xD9B7,
+ 20445 - 11905: 0xB1A3,
+ 20446 - 11905: 0xD3E1,
+ 20447 - 11905: 0xD9B9,
+ 20448 - 11905: 0x8262,
+ 20449 - 11905: 0xD0C5,
+ 20450 - 11905: 0x8263,
+ 20451 - 11905: 0xD9B6,
+ 20452 - 11905: 0x8264,
+ 20453 - 11905: 0x8265,
+ 20454 - 11905: 0xD9B1,
+ 20455 - 11905: 0x8266,
+ 20456 - 11905: 0xD9B2,
+ 20457 - 11905: 0xC1A9,
+ 20458 - 11905: 0xD9B3,
+ 20459 - 11905: 0x8267,
+ 20460 - 11905: 0x8268,
+ 20461 - 11905: 0xBCF3,
+ 20462 - 11905: 0xD0DE,
+ 20463 - 11905: 0xB8A9,
+ 20464 - 11905: 0x8269,
+ 20465 - 11905: 0xBEE3,
+ 20466 - 11905: 0x826A,
+ 20467 - 11905: 0xD9BD,
+ 20468 - 11905: 0x826B,
+ 20469 - 11905: 0x826C,
+ 20470 - 11905: 0x826D,
+ 20471 - 11905: 0x826E,
+ 20472 - 11905: 0xD9BA,
+ 20473 - 11905: 0x826F,
+ 20474 - 11905: 0xB0B3,
+ 20475 - 11905: 0x8270,
+ 20476 - 11905: 0x8271,
+ 20477 - 11905: 0x8272,
+ 20478 - 11905: 0xD9C2,
+ 20479 - 11905: 0x8273,
+ 20480 - 11905: 0x8274,
+ 20481 - 11905: 0x8275,
+ 20482 - 11905: 0x8276,
+ 20483 - 11905: 0x8277,
+ 20484 - 11905: 0x8278,
+ 20485 - 11905: 0x8279,
+ 20486 - 11905: 0x827A,
+ 20487 - 11905: 0x827B,
+ 20488 - 11905: 0x827C,
+ 20489 - 11905: 0x827D,
+ 20490 - 11905: 0x827E,
+ 20491 - 11905: 0x8280,
+ 20492 - 11905: 0xD9C4,
+ 20493 - 11905: 0xB1B6,
+ 20494 - 11905: 0x8281,
+ 20495 - 11905: 0xD9BF,
+ 20496 - 11905: 0x8282,
+ 20497 - 11905: 0x8283,
+ 20498 - 11905: 0xB5B9,
+ 20499 - 11905: 0x8284,
+ 20500 - 11905: 0xBEF3,
+ 20501 - 11905: 0x8285,
+ 20502 - 11905: 0x8286,
+ 20503 - 11905: 0x8287,
+ 20504 - 11905: 0xCCC8,
+ 20505 - 11905: 0xBAF2,
+ 20506 - 11905: 0xD2D0,
+ 20507 - 11905: 0x8288,
+ 20508 - 11905: 0xD9C3,
+ 20509 - 11905: 0x8289,
+ 20510 - 11905: 0x828A,
+ 20511 - 11905: 0xBDE8,
+ 20512 - 11905: 0x828B,
+ 20513 - 11905: 0xB3AB,
+ 20514 - 11905: 0x828C,
+ 20515 - 11905: 0x828D,
+ 20516 - 11905: 0x828E,
+ 20517 - 11905: 0xD9C5,
+ 20518 - 11905: 0xBEEB,
+ 20519 - 11905: 0x828F,
+ 20520 - 11905: 0xD9C6,
+ 20521 - 11905: 0xD9BB,
+ 20522 - 11905: 0xC4DF,
+ 20523 - 11905: 0x8290,
+ 20524 - 11905: 0xD9BE,
+ 20525 - 11905: 0xD9C1,
+ 20526 - 11905: 0xD9C0,
+ 20527 - 11905: 0x8291,
+ 20528 - 11905: 0x8292,
+ 20529 - 11905: 0x8293,
+ 20530 - 11905: 0x8294,
+ 20531 - 11905: 0x8295,
+ 20532 - 11905: 0x8296,
+ 20533 - 11905: 0x8297,
+ 20534 - 11905: 0x8298,
+ 20535 - 11905: 0x8299,
+ 20536 - 11905: 0x829A,
+ 20537 - 11905: 0x829B,
+ 20538 - 11905: 0xD5AE,
+ 20539 - 11905: 0x829C,
+ 20540 - 11905: 0xD6B5,
+ 20541 - 11905: 0x829D,
+ 20542 - 11905: 0xC7E3,
+ 20543 - 11905: 0x829E,
+ 20544 - 11905: 0x829F,
+ 20545 - 11905: 0x82A0,
+ 20546 - 11905: 0x82A1,
+ 20547 - 11905: 0xD9C8,
+ 20548 - 11905: 0x82A2,
+ 20549 - 11905: 0x82A3,
+ 20550 - 11905: 0x82A4,
+ 20551 - 11905: 0xBCD9,
+ 20552 - 11905: 0xD9CA,
+ 20553 - 11905: 0x82A5,
+ 20554 - 11905: 0x82A6,
+ 20555 - 11905: 0x82A7,
+ 20556 - 11905: 0xD9BC,
+ 20557 - 11905: 0x82A8,
+ 20558 - 11905: 0xD9CB,
+ 20559 - 11905: 0xC6AB,
+ 20560 - 11905: 0x82A9,
+ 20561 - 11905: 0x82AA,
+ 20562 - 11905: 0x82AB,
+ 20563 - 11905: 0x82AC,
+ 20564 - 11905: 0x82AD,
+ 20565 - 11905: 0xD9C9,
+ 20566 - 11905: 0x82AE,
+ 20567 - 11905: 0x82AF,
+ 20568 - 11905: 0x82B0,
+ 20569 - 11905: 0x82B1,
+ 20570 - 11905: 0xD7F6,
+ 20571 - 11905: 0x82B2,
+ 20572 - 11905: 0xCDA3,
+ 20573 - 11905: 0x82B3,
+ 20574 - 11905: 0x82B4,
+ 20575 - 11905: 0x82B5,
+ 20576 - 11905: 0x82B6,
+ 20577 - 11905: 0x82B7,
+ 20578 - 11905: 0x82B8,
+ 20579 - 11905: 0x82B9,
+ 20580 - 11905: 0x82BA,
+ 20581 - 11905: 0xBDA1,
+ 20582 - 11905: 0x82BB,
+ 20583 - 11905: 0x82BC,
+ 20584 - 11905: 0x82BD,
+ 20585 - 11905: 0x82BE,
+ 20586 - 11905: 0x82BF,
+ 20587 - 11905: 0x82C0,
+ 20588 - 11905: 0xD9CC,
+ 20589 - 11905: 0x82C1,
+ 20590 - 11905: 0x82C2,
+ 20591 - 11905: 0x82C3,
+ 20592 - 11905: 0x82C4,
+ 20593 - 11905: 0x82C5,
+ 20594 - 11905: 0x82C6,
+ 20595 - 11905: 0x82C7,
+ 20596 - 11905: 0x82C8,
+ 20597 - 11905: 0x82C9,
+ 20598 - 11905: 0xC5BC,
+ 20599 - 11905: 0xCDB5,
+ 20600 - 11905: 0x82CA,
+ 20601 - 11905: 0x82CB,
+ 20602 - 11905: 0x82CC,
+ 20603 - 11905: 0xD9CD,
+ 20604 - 11905: 0x82CD,
+ 20605 - 11905: 0x82CE,
+ 20606 - 11905: 0xD9C7,
+ 20607 - 11905: 0xB3A5,
+ 20608 - 11905: 0xBFFE,
+ 20609 - 11905: 0x82CF,
+ 20610 - 11905: 0x82D0,
+ 20611 - 11905: 0x82D1,
+ 20612 - 11905: 0x82D2,
+ 20613 - 11905: 0xB8B5,
+ 20614 - 11905: 0x82D3,
+ 20615 - 11905: 0x82D4,
+ 20616 - 11905: 0xC0FC,
+ 20617 - 11905: 0x82D5,
+ 20618 - 11905: 0x82D6,
+ 20619 - 11905: 0x82D7,
+ 20620 - 11905: 0x82D8,
+ 20621 - 11905: 0xB0F8,
+ 20622 - 11905: 0x82D9,
+ 20623 - 11905: 0x82DA,
+ 20624 - 11905: 0x82DB,
+ 20625 - 11905: 0x82DC,
+ 20626 - 11905: 0x82DD,
+ 20627 - 11905: 0x82DE,
+ 20628 - 11905: 0x82DF,
+ 20629 - 11905: 0x82E0,
+ 20630 - 11905: 0x82E1,
+ 20631 - 11905: 0x82E2,
+ 20632 - 11905: 0x82E3,
+ 20633 - 11905: 0x82E4,
+ 20634 - 11905: 0x82E5,
+ 20635 - 11905: 0x82E6,
+ 20636 - 11905: 0x82E7,
+ 20637 - 11905: 0x82E8,
+ 20638 - 11905: 0x82E9,
+ 20639 - 11905: 0x82EA,
+ 20640 - 11905: 0x82EB,
+ 20641 - 11905: 0x82EC,
+ 20642 - 11905: 0x82ED,
+ 20643 - 11905: 0xB4F6,
+ 20644 - 11905: 0x82EE,
+ 20645 - 11905: 0xD9CE,
+ 20646 - 11905: 0x82EF,
+ 20647 - 11905: 0xD9CF,
+ 20648 - 11905: 0xB4A2,
+ 20649 - 11905: 0xD9D0,
+ 20650 - 11905: 0x82F0,
+ 20651 - 11905: 0x82F1,
+ 20652 - 11905: 0xB4DF,
+ 20653 - 11905: 0x82F2,
+ 20654 - 11905: 0x82F3,
+ 20655 - 11905: 0x82F4,
+ 20656 - 11905: 0x82F5,
+ 20657 - 11905: 0x82F6,
+ 20658 - 11905: 0xB0C1,
+ 20659 - 11905: 0x82F7,
+ 20660 - 11905: 0x82F8,
+ 20661 - 11905: 0x82F9,
+ 20662 - 11905: 0x82FA,
+ 20663 - 11905: 0x82FB,
+ 20664 - 11905: 0x82FC,
+ 20665 - 11905: 0x82FD,
+ 20666 - 11905: 0xD9D1,
+ 20667 - 11905: 0xC9B5,
+ 20668 - 11905: 0x82FE,
+ 20669 - 11905: 0x8340,
+ 20670 - 11905: 0x8341,
+ 20671 - 11905: 0x8342,
+ 20672 - 11905: 0x8343,
+ 20673 - 11905: 0x8344,
+ 20674 - 11905: 0x8345,
+ 20675 - 11905: 0x8346,
+ 20676 - 11905: 0x8347,
+ 20677 - 11905: 0x8348,
+ 20678 - 11905: 0x8349,
+ 20679 - 11905: 0x834A,
+ 20680 - 11905: 0x834B,
+ 20681 - 11905: 0x834C,
+ 20682 - 11905: 0x834D,
+ 20683 - 11905: 0x834E,
+ 20684 - 11905: 0x834F,
+ 20685 - 11905: 0x8350,
+ 20686 - 11905: 0x8351,
+ 20687 - 11905: 0xCFF1,
+ 20688 - 11905: 0x8352,
+ 20689 - 11905: 0x8353,
+ 20690 - 11905: 0x8354,
+ 20691 - 11905: 0x8355,
+ 20692 - 11905: 0x8356,
+ 20693 - 11905: 0x8357,
+ 20694 - 11905: 0xD9D2,
+ 20695 - 11905: 0x8358,
+ 20696 - 11905: 0x8359,
+ 20697 - 11905: 0x835A,
+ 20698 - 11905: 0xC1C5,
+ 20699 - 11905: 0x835B,
+ 20700 - 11905: 0x835C,
+ 20701 - 11905: 0x835D,
+ 20702 - 11905: 0x835E,
+ 20703 - 11905: 0x835F,
+ 20704 - 11905: 0x8360,
+ 20705 - 11905: 0x8361,
+ 20706 - 11905: 0x8362,
+ 20707 - 11905: 0x8363,
+ 20708 - 11905: 0x8364,
+ 20709 - 11905: 0x8365,
+ 20710 - 11905: 0xD9D6,
+ 20711 - 11905: 0xC9AE,
+ 20712 - 11905: 0x8366,
+ 20713 - 11905: 0x8367,
+ 20714 - 11905: 0x8368,
+ 20715 - 11905: 0x8369,
+ 20716 - 11905: 0xD9D5,
+ 20717 - 11905: 0xD9D4,
+ 20718 - 11905: 0xD9D7,
+ 20719 - 11905: 0x836A,
+ 20720 - 11905: 0x836B,
+ 20721 - 11905: 0x836C,
+ 20722 - 11905: 0x836D,
+ 20723 - 11905: 0xCBDB,
+ 20724 - 11905: 0x836E,
+ 20725 - 11905: 0xBDA9,
+ 20726 - 11905: 0x836F,
+ 20727 - 11905: 0x8370,
+ 20728 - 11905: 0x8371,
+ 20729 - 11905: 0x8372,
+ 20730 - 11905: 0x8373,
+ 20731 - 11905: 0xC6A7,
+ 20732 - 11905: 0x8374,
+ 20733 - 11905: 0x8375,
+ 20734 - 11905: 0x8376,
+ 20735 - 11905: 0x8377,
+ 20736 - 11905: 0x8378,
+ 20737 - 11905: 0x8379,
+ 20738 - 11905: 0x837A,
+ 20739 - 11905: 0x837B,
+ 20740 - 11905: 0x837C,
+ 20741 - 11905: 0x837D,
+ 20742 - 11905: 0xD9D3,
+ 20743 - 11905: 0xD9D8,
+ 20744 - 11905: 0x837E,
+ 20745 - 11905: 0x8380,
+ 20746 - 11905: 0x8381,
+ 20747 - 11905: 0xD9D9,
+ 20748 - 11905: 0x8382,
+ 20749 - 11905: 0x8383,
+ 20750 - 11905: 0x8384,
+ 20751 - 11905: 0x8385,
+ 20752 - 11905: 0x8386,
+ 20753 - 11905: 0x8387,
+ 20754 - 11905: 0xC8E5,
+ 20755 - 11905: 0x8388,
+ 20756 - 11905: 0x8389,
+ 20757 - 11905: 0x838A,
+ 20758 - 11905: 0x838B,
+ 20759 - 11905: 0x838C,
+ 20760 - 11905: 0x838D,
+ 20761 - 11905: 0x838E,
+ 20762 - 11905: 0x838F,
+ 20763 - 11905: 0x8390,
+ 20764 - 11905: 0x8391,
+ 20765 - 11905: 0x8392,
+ 20766 - 11905: 0x8393,
+ 20767 - 11905: 0x8394,
+ 20768 - 11905: 0x8395,
+ 20769 - 11905: 0xC0DC,
+ 20770 - 11905: 0x8396,
+ 20771 - 11905: 0x8397,
+ 20772 - 11905: 0x8398,
+ 20773 - 11905: 0x8399,
+ 20774 - 11905: 0x839A,
+ 20775 - 11905: 0x839B,
+ 20776 - 11905: 0x839C,
+ 20777 - 11905: 0x839D,
+ 20778 - 11905: 0x839E,
+ 20779 - 11905: 0x839F,
+ 20780 - 11905: 0x83A0,
+ 20781 - 11905: 0x83A1,
+ 20782 - 11905: 0x83A2,
+ 20783 - 11905: 0x83A3,
+ 20784 - 11905: 0x83A4,
+ 20785 - 11905: 0x83A5,
+ 20786 - 11905: 0x83A6,
+ 20787 - 11905: 0x83A7,
+ 20788 - 11905: 0x83A8,
+ 20789 - 11905: 0x83A9,
+ 20790 - 11905: 0x83AA,
+ 20791 - 11905: 0x83AB,
+ 20792 - 11905: 0x83AC,
+ 20793 - 11905: 0x83AD,
+ 20794 - 11905: 0x83AE,
+ 20795 - 11905: 0x83AF,
+ 20796 - 11905: 0x83B0,
+ 20797 - 11905: 0x83B1,
+ 20798 - 11905: 0x83B2,
+ 20799 - 11905: 0xB6F9,
+ 20800 - 11905: 0xD8A3,
+ 20801 - 11905: 0xD4CA,
+ 20802 - 11905: 0x83B3,
+ 20803 - 11905: 0xD4AA,
+ 20804 - 11905: 0xD0D6,
+ 20805 - 11905: 0xB3E4,
+ 20806 - 11905: 0xD5D7,
+ 20807 - 11905: 0x83B4,
+ 20808 - 11905: 0xCFC8,
+ 20809 - 11905: 0xB9E2,
+ 20810 - 11905: 0x83B5,
+ 20811 - 11905: 0xBFCB,
+ 20812 - 11905: 0x83B6,
+ 20813 - 11905: 0xC3E2,
+ 20814 - 11905: 0x83B7,
+ 20815 - 11905: 0x83B8,
+ 20816 - 11905: 0x83B9,
+ 20817 - 11905: 0xB6D2,
+ 20818 - 11905: 0x83BA,
+ 20819 - 11905: 0x83BB,
+ 20820 - 11905: 0xCDC3,
+ 20821 - 11905: 0xD9EE,
+ 20822 - 11905: 0xD9F0,
+ 20823 - 11905: 0x83BC,
+ 20824 - 11905: 0x83BD,
+ 20825 - 11905: 0x83BE,
+ 20826 - 11905: 0xB5B3,
+ 20827 - 11905: 0x83BF,
+ 20828 - 11905: 0xB6B5,
+ 20829 - 11905: 0x83C0,
+ 20830 - 11905: 0x83C1,
+ 20831 - 11905: 0x83C2,
+ 20832 - 11905: 0x83C3,
+ 20833 - 11905: 0x83C4,
+ 20834 - 11905: 0xBEA4,
+ 20835 - 11905: 0x83C5,
+ 20836 - 11905: 0x83C6,
+ 20837 - 11905: 0xC8EB,
+ 20838 - 11905: 0x83C7,
+ 20839 - 11905: 0x83C8,
+ 20840 - 11905: 0xC8AB,
+ 20841 - 11905: 0x83C9,
+ 20842 - 11905: 0x83CA,
+ 20843 - 11905: 0xB0CB,
+ 20844 - 11905: 0xB9AB,
+ 20845 - 11905: 0xC1F9,
+ 20846 - 11905: 0xD9E2,
+ 20847 - 11905: 0x83CB,
+ 20848 - 11905: 0xC0BC,
+ 20849 - 11905: 0xB9B2,
+ 20850 - 11905: 0x83CC,
+ 20851 - 11905: 0xB9D8,
+ 20852 - 11905: 0xD0CB,
+ 20853 - 11905: 0xB1F8,
+ 20854 - 11905: 0xC6E4,
+ 20855 - 11905: 0xBEDF,
+ 20856 - 11905: 0xB5E4,
+ 20857 - 11905: 0xD7C8,
+ 20858 - 11905: 0x83CD,
+ 20859 - 11905: 0xD1F8,
+ 20860 - 11905: 0xBCE6,
+ 20861 - 11905: 0xCADE,
+ 20862 - 11905: 0x83CE,
+ 20863 - 11905: 0x83CF,
+ 20864 - 11905: 0xBCBD,
+ 20865 - 11905: 0xD9E6,
+ 20866 - 11905: 0xD8E7,
+ 20867 - 11905: 0x83D0,
+ 20868 - 11905: 0x83D1,
+ 20869 - 11905: 0xC4DA,
+ 20870 - 11905: 0x83D2,
+ 20871 - 11905: 0x83D3,
+ 20872 - 11905: 0xB8D4,
+ 20873 - 11905: 0xC8BD,
+ 20874 - 11905: 0x83D4,
+ 20875 - 11905: 0x83D5,
+ 20876 - 11905: 0xB2E1,
+ 20877 - 11905: 0xD4D9,
+ 20878 - 11905: 0x83D6,
+ 20879 - 11905: 0x83D7,
+ 20880 - 11905: 0x83D8,
+ 20881 - 11905: 0x83D9,
+ 20882 - 11905: 0xC3B0,
+ 20883 - 11905: 0x83DA,
+ 20884 - 11905: 0x83DB,
+ 20885 - 11905: 0xC3E1,
+ 20886 - 11905: 0xDAA2,
+ 20887 - 11905: 0xC8DF,
+ 20888 - 11905: 0x83DC,
+ 20889 - 11905: 0xD0B4,
+ 20890 - 11905: 0x83DD,
+ 20891 - 11905: 0xBEFC,
+ 20892 - 11905: 0xC5A9,
+ 20893 - 11905: 0x83DE,
+ 20894 - 11905: 0x83DF,
+ 20895 - 11905: 0x83E0,
+ 20896 - 11905: 0xB9DA,
+ 20897 - 11905: 0x83E1,
+ 20898 - 11905: 0xDAA3,
+ 20899 - 11905: 0x83E2,
+ 20900 - 11905: 0xD4A9,
+ 20901 - 11905: 0xDAA4,
+ 20902 - 11905: 0x83E3,
+ 20903 - 11905: 0x83E4,
+ 20904 - 11905: 0x83E5,
+ 20905 - 11905: 0x83E6,
+ 20906 - 11905: 0x83E7,
+ 20907 - 11905: 0xD9FB,
+ 20908 - 11905: 0xB6AC,
+ 20909 - 11905: 0x83E8,
+ 20910 - 11905: 0x83E9,
+ 20911 - 11905: 0xB7EB,
+ 20912 - 11905: 0xB1F9,
+ 20913 - 11905: 0xD9FC,
+ 20914 - 11905: 0xB3E5,
+ 20915 - 11905: 0xBEF6,
+ 20916 - 11905: 0x83EA,
+ 20917 - 11905: 0xBFF6,
+ 20918 - 11905: 0xD2B1,
+ 20919 - 11905: 0xC0E4,
+ 20920 - 11905: 0x83EB,
+ 20921 - 11905: 0x83EC,
+ 20922 - 11905: 0x83ED,
+ 20923 - 11905: 0xB6B3,
+ 20924 - 11905: 0xD9FE,
+ 20925 - 11905: 0xD9FD,
+ 20926 - 11905: 0x83EE,
+ 20927 - 11905: 0x83EF,
+ 20928 - 11905: 0xBEBB,
+ 20929 - 11905: 0x83F0,
+ 20930 - 11905: 0x83F1,
+ 20931 - 11905: 0x83F2,
+ 20932 - 11905: 0xC6E0,
+ 20933 - 11905: 0x83F3,
+ 20934 - 11905: 0xD7BC,
+ 20935 - 11905: 0xDAA1,
+ 20936 - 11905: 0x83F4,
+ 20937 - 11905: 0xC1B9,
+ 20938 - 11905: 0x83F5,
+ 20939 - 11905: 0xB5F2,
+ 20940 - 11905: 0xC1E8,
+ 20941 - 11905: 0x83F6,
+ 20942 - 11905: 0x83F7,
+ 20943 - 11905: 0xBCF5,
+ 20944 - 11905: 0x83F8,
+ 20945 - 11905: 0xB4D5,
+ 20946 - 11905: 0x83F9,
+ 20947 - 11905: 0x83FA,
+ 20948 - 11905: 0x83FB,
+ 20949 - 11905: 0x83FC,
+ 20950 - 11905: 0x83FD,
+ 20951 - 11905: 0x83FE,
+ 20952 - 11905: 0x8440,
+ 20953 - 11905: 0x8441,
+ 20954 - 11905: 0x8442,
+ 20955 - 11905: 0xC1DD,
+ 20956 - 11905: 0x8443,
+ 20957 - 11905: 0xC4FD,
+ 20958 - 11905: 0x8444,
+ 20959 - 11905: 0x8445,
+ 20960 - 11905: 0xBCB8,
+ 20961 - 11905: 0xB7B2,
+ 20962 - 11905: 0x8446,
+ 20963 - 11905: 0x8447,
+ 20964 - 11905: 0xB7EF,
+ 20965 - 11905: 0x8448,
+ 20966 - 11905: 0x8449,
+ 20967 - 11905: 0x844A,
+ 20968 - 11905: 0x844B,
+ 20969 - 11905: 0x844C,
+ 20970 - 11905: 0x844D,
+ 20971 - 11905: 0xD9EC,
+ 20972 - 11905: 0x844E,
+ 20973 - 11905: 0xC6BE,
+ 20974 - 11905: 0x844F,
+ 20975 - 11905: 0xBFAD,
+ 20976 - 11905: 0xBBCB,
+ 20977 - 11905: 0x8450,
+ 20978 - 11905: 0x8451,
+ 20979 - 11905: 0xB5CA,
+ 20980 - 11905: 0x8452,
+ 20981 - 11905: 0xDBC9,
+ 20982 - 11905: 0xD0D7,
+ 20983 - 11905: 0x8453,
+ 20984 - 11905: 0xCDB9,
+ 20985 - 11905: 0xB0BC,
+ 20986 - 11905: 0xB3F6,
+ 20987 - 11905: 0xBBF7,
+ 20988 - 11905: 0xDBCA,
+ 20989 - 11905: 0xBAAF,
+ 20990 - 11905: 0x8454,
+ 20991 - 11905: 0xD4E4,
+ 20992 - 11905: 0xB5B6,
+ 20993 - 11905: 0xB5F3,
+ 20994 - 11905: 0xD8D6,
+ 20995 - 11905: 0xC8D0,
+ 20996 - 11905: 0x8455,
+ 20997 - 11905: 0x8456,
+ 20998 - 11905: 0xB7D6,
+ 20999 - 11905: 0xC7D0,
+ 21000 - 11905: 0xD8D7,
+ 21001 - 11905: 0x8457,
+ 21002 - 11905: 0xBFAF,
+ 21003 - 11905: 0x8458,
+ 21004 - 11905: 0x8459,
+ 21005 - 11905: 0xDBBB,
+ 21006 - 11905: 0xD8D8,
+ 21007 - 11905: 0x845A,
+ 21008 - 11905: 0x845B,
+ 21009 - 11905: 0xD0CC,
+ 21010 - 11905: 0xBBAE,
+ 21011 - 11905: 0x845C,
+ 21012 - 11905: 0x845D,
+ 21013 - 11905: 0x845E,
+ 21014 - 11905: 0xEBBE,
+ 21015 - 11905: 0xC1D0,
+ 21016 - 11905: 0xC1F5,
+ 21017 - 11905: 0xD4F2,
+ 21018 - 11905: 0xB8D5,
+ 21019 - 11905: 0xB4B4,
+ 21020 - 11905: 0x845F,
+ 21021 - 11905: 0xB3F5,
+ 21022 - 11905: 0x8460,
+ 21023 - 11905: 0x8461,
+ 21024 - 11905: 0xC9BE,
+ 21025 - 11905: 0x8462,
+ 21026 - 11905: 0x8463,
+ 21027 - 11905: 0x8464,
+ 21028 - 11905: 0xC5D0,
+ 21029 - 11905: 0x8465,
+ 21030 - 11905: 0x8466,
+ 21031 - 11905: 0x8467,
+ 21032 - 11905: 0xC5D9,
+ 21033 - 11905: 0xC0FB,
+ 21034 - 11905: 0x8468,
+ 21035 - 11905: 0xB1F0,
+ 21036 - 11905: 0x8469,
+ 21037 - 11905: 0xD8D9,
+ 21038 - 11905: 0xB9CE,
+ 21039 - 11905: 0x846A,
+ 21040 - 11905: 0xB5BD,
+ 21041 - 11905: 0x846B,
+ 21042 - 11905: 0x846C,
+ 21043 - 11905: 0xD8DA,
+ 21044 - 11905: 0x846D,
+ 21045 - 11905: 0x846E,
+ 21046 - 11905: 0xD6C6,
+ 21047 - 11905: 0xCBA2,
+ 21048 - 11905: 0xC8AF,
+ 21049 - 11905: 0xC9B2,
+ 21050 - 11905: 0xB4CC,
+ 21051 - 11905: 0xBFCC,
+ 21052 - 11905: 0x846F,
+ 21053 - 11905: 0xB9F4,
+ 21054 - 11905: 0x8470,
+ 21055 - 11905: 0xD8DB,
+ 21056 - 11905: 0xD8DC,
+ 21057 - 11905: 0xB6E7,
+ 21058 - 11905: 0xBCC1,
+ 21059 - 11905: 0xCCEA,
+ 21060 - 11905: 0x8471,
+ 21061 - 11905: 0x8472,
+ 21062 - 11905: 0x8473,
+ 21063 - 11905: 0x8474,
+ 21064 - 11905: 0x8475,
+ 21065 - 11905: 0x8476,
+ 21066 - 11905: 0xCFF7,
+ 21067 - 11905: 0x8477,
+ 21068 - 11905: 0xD8DD,
+ 21069 - 11905: 0xC7B0,
+ 21070 - 11905: 0x8478,
+ 21071 - 11905: 0x8479,
+ 21072 - 11905: 0xB9D0,
+ 21073 - 11905: 0xBDA3,
+ 21074 - 11905: 0x847A,
+ 21075 - 11905: 0x847B,
+ 21076 - 11905: 0xCCDE,
+ 21077 - 11905: 0x847C,
+ 21078 - 11905: 0xC6CA,
+ 21079 - 11905: 0x847D,
+ 21080 - 11905: 0x847E,
+ 21081 - 11905: 0x8480,
+ 21082 - 11905: 0x8481,
+ 21083 - 11905: 0x8482,
+ 21084 - 11905: 0xD8E0,
+ 21085 - 11905: 0x8483,
+ 21086 - 11905: 0xD8DE,
+ 21087 - 11905: 0x8484,
+ 21088 - 11905: 0x8485,
+ 21089 - 11905: 0xD8DF,
+ 21090 - 11905: 0x8486,
+ 21091 - 11905: 0x8487,
+ 21092 - 11905: 0x8488,
+ 21093 - 11905: 0xB0FE,
+ 21094 - 11905: 0x8489,
+ 21095 - 11905: 0xBEE7,
+ 21096 - 11905: 0x848A,
+ 21097 - 11905: 0xCAA3,
+ 21098 - 11905: 0xBCF4,
+ 21099 - 11905: 0x848B,
+ 21100 - 11905: 0x848C,
+ 21101 - 11905: 0x848D,
+ 21102 - 11905: 0x848E,
+ 21103 - 11905: 0xB8B1,
+ 21104 - 11905: 0x848F,
+ 21105 - 11905: 0x8490,
+ 21106 - 11905: 0xB8EE,
+ 21107 - 11905: 0x8491,
+ 21108 - 11905: 0x8492,
+ 21109 - 11905: 0x8493,
+ 21110 - 11905: 0x8494,
+ 21111 - 11905: 0x8495,
+ 21112 - 11905: 0x8496,
+ 21113 - 11905: 0x8497,
+ 21114 - 11905: 0x8498,
+ 21115 - 11905: 0x8499,
+ 21116 - 11905: 0x849A,
+ 21117 - 11905: 0xD8E2,
+ 21118 - 11905: 0x849B,
+ 21119 - 11905: 0xBDCB,
+ 21120 - 11905: 0x849C,
+ 21121 - 11905: 0xD8E4,
+ 21122 - 11905: 0xD8E3,
+ 21123 - 11905: 0x849D,
+ 21124 - 11905: 0x849E,
+ 21125 - 11905: 0x849F,
+ 21126 - 11905: 0x84A0,
+ 21127 - 11905: 0x84A1,
+ 21128 - 11905: 0xC5FC,
+ 21129 - 11905: 0x84A2,
+ 21130 - 11905: 0x84A3,
+ 21131 - 11905: 0x84A4,
+ 21132 - 11905: 0x84A5,
+ 21133 - 11905: 0x84A6,
+ 21134 - 11905: 0x84A7,
+ 21135 - 11905: 0x84A8,
+ 21136 - 11905: 0xD8E5,
+ 21137 - 11905: 0x84A9,
+ 21138 - 11905: 0x84AA,
+ 21139 - 11905: 0xD8E6,
+ 21140 - 11905: 0x84AB,
+ 21141 - 11905: 0x84AC,
+ 21142 - 11905: 0x84AD,
+ 21143 - 11905: 0x84AE,
+ 21144 - 11905: 0x84AF,
+ 21145 - 11905: 0x84B0,
+ 21146 - 11905: 0x84B1,
+ 21147 - 11905: 0xC1A6,
+ 21148 - 11905: 0x84B2,
+ 21149 - 11905: 0xC8B0,
+ 21150 - 11905: 0xB0EC,
+ 21151 - 11905: 0xB9A6,
+ 21152 - 11905: 0xBCD3,
+ 21153 - 11905: 0xCEF1,
+ 21154 - 11905: 0xDBBD,
+ 21155 - 11905: 0xC1D3,
+ 21156 - 11905: 0x84B3,
+ 21157 - 11905: 0x84B4,
+ 21158 - 11905: 0x84B5,
+ 21159 - 11905: 0x84B6,
+ 21160 - 11905: 0xB6AF,
+ 21161 - 11905: 0xD6FA,
+ 21162 - 11905: 0xC5AC,
+ 21163 - 11905: 0xBDD9,
+ 21164 - 11905: 0xDBBE,
+ 21165 - 11905: 0xDBBF,
+ 21166 - 11905: 0x84B7,
+ 21167 - 11905: 0x84B8,
+ 21168 - 11905: 0x84B9,
+ 21169 - 11905: 0xC0F8,
+ 21170 - 11905: 0xBEA2,
+ 21171 - 11905: 0xC0CD,
+ 21172 - 11905: 0x84BA,
+ 21173 - 11905: 0x84BB,
+ 21174 - 11905: 0x84BC,
+ 21175 - 11905: 0x84BD,
+ 21176 - 11905: 0x84BE,
+ 21177 - 11905: 0x84BF,
+ 21178 - 11905: 0x84C0,
+ 21179 - 11905: 0x84C1,
+ 21180 - 11905: 0x84C2,
+ 21181 - 11905: 0x84C3,
+ 21182 - 11905: 0xDBC0,
+ 21183 - 11905: 0xCAC6,
+ 21184 - 11905: 0x84C4,
+ 21185 - 11905: 0x84C5,
+ 21186 - 11905: 0x84C6,
+ 21187 - 11905: 0xB2AA,
+ 21188 - 11905: 0x84C7,
+ 21189 - 11905: 0x84C8,
+ 21190 - 11905: 0x84C9,
+ 21191 - 11905: 0xD3C2,
+ 21192 - 11905: 0x84CA,
+ 21193 - 11905: 0xC3E3,
+ 21194 - 11905: 0x84CB,
+ 21195 - 11905: 0xD1AB,
+ 21196 - 11905: 0x84CC,
+ 21197 - 11905: 0x84CD,
+ 21198 - 11905: 0x84CE,
+ 21199 - 11905: 0x84CF,
+ 21200 - 11905: 0xDBC2,
+ 21201 - 11905: 0x84D0,
+ 21202 - 11905: 0xC0D5,
+ 21203 - 11905: 0x84D1,
+ 21204 - 11905: 0x84D2,
+ 21205 - 11905: 0x84D3,
+ 21206 - 11905: 0xDBC3,
+ 21207 - 11905: 0x84D4,
+ 21208 - 11905: 0xBFB1,
+ 21209 - 11905: 0x84D5,
+ 21210 - 11905: 0x84D6,
+ 21211 - 11905: 0x84D7,
+ 21212 - 11905: 0x84D8,
+ 21213 - 11905: 0x84D9,
+ 21214 - 11905: 0x84DA,
+ 21215 - 11905: 0xC4BC,
+ 21216 - 11905: 0x84DB,
+ 21217 - 11905: 0x84DC,
+ 21218 - 11905: 0x84DD,
+ 21219 - 11905: 0x84DE,
+ 21220 - 11905: 0xC7DA,
+ 21221 - 11905: 0x84DF,
+ 21222 - 11905: 0x84E0,
+ 21223 - 11905: 0x84E1,
+ 21224 - 11905: 0x84E2,
+ 21225 - 11905: 0x84E3,
+ 21226 - 11905: 0x84E4,
+ 21227 - 11905: 0x84E5,
+ 21228 - 11905: 0x84E6,
+ 21229 - 11905: 0x84E7,
+ 21230 - 11905: 0x84E8,
+ 21231 - 11905: 0x84E9,
+ 21232 - 11905: 0xDBC4,
+ 21233 - 11905: 0x84EA,
+ 21234 - 11905: 0x84EB,
+ 21235 - 11905: 0x84EC,
+ 21236 - 11905: 0x84ED,
+ 21237 - 11905: 0x84EE,
+ 21238 - 11905: 0x84EF,
+ 21239 - 11905: 0x84F0,
+ 21240 - 11905: 0x84F1,
+ 21241 - 11905: 0xD9E8,
+ 21242 - 11905: 0xC9D7,
+ 21243 - 11905: 0x84F2,
+ 21244 - 11905: 0x84F3,
+ 21245 - 11905: 0x84F4,
+ 21246 - 11905: 0xB9B4,
+ 21247 - 11905: 0xCEF0,
+ 21248 - 11905: 0xD4C8,
+ 21249 - 11905: 0x84F5,
+ 21250 - 11905: 0x84F6,
+ 21251 - 11905: 0x84F7,
+ 21252 - 11905: 0x84F8,
+ 21253 - 11905: 0xB0FC,
+ 21254 - 11905: 0xB4D2,
+ 21255 - 11905: 0x84F9,
+ 21256 - 11905: 0xD0D9,
+ 21257 - 11905: 0x84FA,
+ 21258 - 11905: 0x84FB,
+ 21259 - 11905: 0x84FC,
+ 21260 - 11905: 0x84FD,
+ 21261 - 11905: 0xD9E9,
+ 21262 - 11905: 0x84FE,
+ 21263 - 11905: 0xDECB,
+ 21264 - 11905: 0xD9EB,
+ 21265 - 11905: 0x8540,
+ 21266 - 11905: 0x8541,
+ 21267 - 11905: 0x8542,
+ 21268 - 11905: 0x8543,
+ 21269 - 11905: 0xD8B0,
+ 21270 - 11905: 0xBBAF,
+ 21271 - 11905: 0xB1B1,
+ 21272 - 11905: 0x8544,
+ 21273 - 11905: 0xB3D7,
+ 21274 - 11905: 0xD8CE,
+ 21275 - 11905: 0x8545,
+ 21276 - 11905: 0x8546,
+ 21277 - 11905: 0xD4D1,
+ 21278 - 11905: 0x8547,
+ 21279 - 11905: 0x8548,
+ 21280 - 11905: 0xBDB3,
+ 21281 - 11905: 0xBFEF,
+ 21282 - 11905: 0x8549,
+ 21283 - 11905: 0xCFBB,
+ 21284 - 11905: 0x854A,
+ 21285 - 11905: 0x854B,
+ 21286 - 11905: 0xD8D0,
+ 21287 - 11905: 0x854C,
+ 21288 - 11905: 0x854D,
+ 21289 - 11905: 0x854E,
+ 21290 - 11905: 0xB7CB,
+ 21291 - 11905: 0x854F,
+ 21292 - 11905: 0x8550,
+ 21293 - 11905: 0x8551,
+ 21294 - 11905: 0xD8D1,
+ 21295 - 11905: 0x8552,
+ 21296 - 11905: 0x8553,
+ 21297 - 11905: 0x8554,
+ 21298 - 11905: 0x8555,
+ 21299 - 11905: 0x8556,
+ 21300 - 11905: 0x8557,
+ 21301 - 11905: 0x8558,
+ 21302 - 11905: 0x8559,
+ 21303 - 11905: 0x855A,
+ 21304 - 11905: 0x855B,
+ 21305 - 11905: 0xC6A5,
+ 21306 - 11905: 0xC7F8,
+ 21307 - 11905: 0xD2BD,
+ 21308 - 11905: 0x855C,
+ 21309 - 11905: 0x855D,
+ 21310 - 11905: 0xD8D2,
+ 21311 - 11905: 0xC4E4,
+ 21312 - 11905: 0x855E,
+ 21313 - 11905: 0xCAAE,
+ 21314 - 11905: 0x855F,
+ 21315 - 11905: 0xC7A7,
+ 21316 - 11905: 0x8560,
+ 21317 - 11905: 0xD8A6,
+ 21318 - 11905: 0x8561,
+ 21319 - 11905: 0xC9FD,
+ 21320 - 11905: 0xCEE7,
+ 21321 - 11905: 0xBBDC,
+ 21322 - 11905: 0xB0EB,
+ 21323 - 11905: 0x8562,
+ 21324 - 11905: 0x8563,
+ 21325 - 11905: 0x8564,
+ 21326 - 11905: 0xBBAA,
+ 21327 - 11905: 0xD0AD,
+ 21328 - 11905: 0x8565,
+ 21329 - 11905: 0xB1B0,
+ 21330 - 11905: 0xD7E4,
+ 21331 - 11905: 0xD7BF,
+ 21332 - 11905: 0x8566,
+ 21333 - 11905: 0xB5A5,
+ 21334 - 11905: 0xC2F4,
+ 21335 - 11905: 0xC4CF,
+ 21336 - 11905: 0x8567,
+ 21337 - 11905: 0x8568,
+ 21338 - 11905: 0xB2A9,
+ 21339 - 11905: 0x8569,
+ 21340 - 11905: 0xB2B7,
+ 21341 - 11905: 0x856A,
+ 21342 - 11905: 0xB1E5,
+ 21343 - 11905: 0xDFB2,
+ 21344 - 11905: 0xD5BC,
+ 21345 - 11905: 0xBFA8,
+ 21346 - 11905: 0xC2AC,
+ 21347 - 11905: 0xD8D5,
+ 21348 - 11905: 0xC2B1,
+ 21349 - 11905: 0x856B,
+ 21350 - 11905: 0xD8D4,
+ 21351 - 11905: 0xCED4,
+ 21352 - 11905: 0x856C,
+ 21353 - 11905: 0xDAE0,
+ 21354 - 11905: 0x856D,
+ 21355 - 11905: 0xCEC0,
+ 21356 - 11905: 0x856E,
+ 21357 - 11905: 0x856F,
+ 21358 - 11905: 0xD8B4,
+ 21359 - 11905: 0xC3AE,
+ 21360 - 11905: 0xD3A1,
+ 21361 - 11905: 0xCEA3,
+ 21362 - 11905: 0x8570,
+ 21363 - 11905: 0xBCB4,
+ 21364 - 11905: 0xC8B4,
+ 21365 - 11905: 0xC2D1,
+ 21366 - 11905: 0x8571,
+ 21367 - 11905: 0xBEED,
+ 21368 - 11905: 0xD0B6,
+ 21369 - 11905: 0x8572,
+ 21370 - 11905: 0xDAE1,
+ 21371 - 11905: 0x8573,
+ 21372 - 11905: 0x8574,
+ 21373 - 11905: 0x8575,
+ 21374 - 11905: 0x8576,
+ 21375 - 11905: 0xC7E4,
+ 21376 - 11905: 0x8577,
+ 21377 - 11905: 0x8578,
+ 21378 - 11905: 0xB3A7,
+ 21379 - 11905: 0x8579,
+ 21380 - 11905: 0xB6F2,
+ 21381 - 11905: 0xCCFC,
+ 21382 - 11905: 0xC0FA,
+ 21383 - 11905: 0x857A,
+ 21384 - 11905: 0x857B,
+ 21385 - 11905: 0xC0F7,
+ 21386 - 11905: 0x857C,
+ 21387 - 11905: 0xD1B9,
+ 21388 - 11905: 0xD1E1,
+ 21389 - 11905: 0xD8C7,
+ 21390 - 11905: 0x857D,
+ 21391 - 11905: 0x857E,
+ 21392 - 11905: 0x8580,
+ 21393 - 11905: 0x8581,
+ 21394 - 11905: 0x8582,
+ 21395 - 11905: 0x8583,
+ 21396 - 11905: 0x8584,
+ 21397 - 11905: 0xB2DE,
+ 21398 - 11905: 0x8585,
+ 21399 - 11905: 0x8586,
+ 21400 - 11905: 0xC0E5,
+ 21401 - 11905: 0x8587,
+ 21402 - 11905: 0xBAF1,
+ 21403 - 11905: 0x8588,
+ 21404 - 11905: 0x8589,
+ 21405 - 11905: 0xD8C8,
+ 21406 - 11905: 0x858A,
+ 21407 - 11905: 0xD4AD,
+ 21408 - 11905: 0x858B,
+ 21409 - 11905: 0x858C,
+ 21410 - 11905: 0xCFE1,
+ 21411 - 11905: 0xD8C9,
+ 21412 - 11905: 0x858D,
+ 21413 - 11905: 0xD8CA,
+ 21414 - 11905: 0xCFC3,
+ 21415 - 11905: 0x858E,
+ 21416 - 11905: 0xB3F8,
+ 21417 - 11905: 0xBEC7,
+ 21418 - 11905: 0x858F,
+ 21419 - 11905: 0x8590,
+ 21420 - 11905: 0x8591,
+ 21421 - 11905: 0x8592,
+ 21422 - 11905: 0xD8CB,
+ 21423 - 11905: 0x8593,
+ 21424 - 11905: 0x8594,
+ 21425 - 11905: 0x8595,
+ 21426 - 11905: 0x8596,
+ 21427 - 11905: 0x8597,
+ 21428 - 11905: 0x8598,
+ 21429 - 11905: 0x8599,
+ 21430 - 11905: 0xDBCC,
+ 21431 - 11905: 0x859A,
+ 21432 - 11905: 0x859B,
+ 21433 - 11905: 0x859C,
+ 21434 - 11905: 0x859D,
+ 21435 - 11905: 0xC8A5,
+ 21436 - 11905: 0x859E,
+ 21437 - 11905: 0x859F,
+ 21438 - 11905: 0x85A0,
+ 21439 - 11905: 0xCFD8,
+ 21440 - 11905: 0x85A1,
+ 21441 - 11905: 0xC8FE,
+ 21442 - 11905: 0xB2CE,
+ 21443 - 11905: 0x85A2,
+ 21444 - 11905: 0x85A3,
+ 21445 - 11905: 0x85A4,
+ 21446 - 11905: 0x85A5,
+ 21447 - 11905: 0x85A6,
+ 21448 - 11905: 0xD3D6,
+ 21449 - 11905: 0xB2E6,
+ 21450 - 11905: 0xBCB0,
+ 21451 - 11905: 0xD3D1,
+ 21452 - 11905: 0xCBAB,
+ 21453 - 11905: 0xB7B4,
+ 21454 - 11905: 0x85A7,
+ 21455 - 11905: 0x85A8,
+ 21456 - 11905: 0x85A9,
+ 21457 - 11905: 0xB7A2,
+ 21458 - 11905: 0x85AA,
+ 21459 - 11905: 0x85AB,
+ 21460 - 11905: 0xCAE5,
+ 21461 - 11905: 0x85AC,
+ 21462 - 11905: 0xC8A1,
+ 21463 - 11905: 0xCADC,
+ 21464 - 11905: 0xB1E4,
+ 21465 - 11905: 0xD0F0,
+ 21466 - 11905: 0x85AD,
+ 21467 - 11905: 0xC5D1,
+ 21468 - 11905: 0x85AE,
+ 21469 - 11905: 0x85AF,
+ 21470 - 11905: 0x85B0,
+ 21471 - 11905: 0xDBC5,
+ 21472 - 11905: 0xB5FE,
+ 21473 - 11905: 0x85B1,
+ 21474 - 11905: 0x85B2,
+ 21475 - 11905: 0xBFDA,
+ 21476 - 11905: 0xB9C5,
+ 21477 - 11905: 0xBEE4,
+ 21478 - 11905: 0xC1ED,
+ 21479 - 11905: 0x85B3,
+ 21480 - 11905: 0xDFB6,
+ 21481 - 11905: 0xDFB5,
+ 21482 - 11905: 0xD6BB,
+ 21483 - 11905: 0xBDD0,
+ 21484 - 11905: 0xD5D9,
+ 21485 - 11905: 0xB0C8,
+ 21486 - 11905: 0xB6A3,
+ 21487 - 11905: 0xBFC9,
+ 21488 - 11905: 0xCCA8,
+ 21489 - 11905: 0xDFB3,
+ 21490 - 11905: 0xCAB7,
+ 21491 - 11905: 0xD3D2,
+ 21492 - 11905: 0x85B4,
+ 21493 - 11905: 0xD8CF,
+ 21494 - 11905: 0xD2B6,
+ 21495 - 11905: 0xBAC5,
+ 21496 - 11905: 0xCBBE,
+ 21497 - 11905: 0xCCBE,
+ 21498 - 11905: 0x85B5,
+ 21499 - 11905: 0xDFB7,
+ 21500 - 11905: 0xB5F0,
+ 21501 - 11905: 0xDFB4,
+ 21502 - 11905: 0x85B6,
+ 21503 - 11905: 0x85B7,
+ 21504 - 11905: 0x85B8,
+ 21505 - 11905: 0xD3F5,
+ 21506 - 11905: 0x85B9,
+ 21507 - 11905: 0xB3D4,
+ 21508 - 11905: 0xB8F7,
+ 21509 - 11905: 0x85BA,
+ 21510 - 11905: 0xDFBA,
+ 21511 - 11905: 0x85BB,
+ 21512 - 11905: 0xBACF,
+ 21513 - 11905: 0xBCAA,
+ 21514 - 11905: 0xB5F5,
+ 21515 - 11905: 0x85BC,
+ 21516 - 11905: 0xCDAC,
+ 21517 - 11905: 0xC3FB,
+ 21518 - 11905: 0xBAF3,
+ 21519 - 11905: 0xC0F4,
+ 21520 - 11905: 0xCDC2,
+ 21521 - 11905: 0xCFF2,
+ 21522 - 11905: 0xDFB8,
+ 21523 - 11905: 0xCFC5,
+ 21524 - 11905: 0x85BD,
+ 21525 - 11905: 0xC2C0,
+ 21526 - 11905: 0xDFB9,
+ 21527 - 11905: 0xC2F0,
+ 21528 - 11905: 0x85BE,
+ 21529 - 11905: 0x85BF,
+ 21530 - 11905: 0x85C0,
+ 21531 - 11905: 0xBEFD,
+ 21532 - 11905: 0x85C1,
+ 21533 - 11905: 0xC1DF,
+ 21534 - 11905: 0xCDCC,
+ 21535 - 11905: 0xD2F7,
+ 21536 - 11905: 0xB7CD,
+ 21537 - 11905: 0xDFC1,
+ 21538 - 11905: 0x85C2,
+ 21539 - 11905: 0xDFC4,
+ 21540 - 11905: 0x85C3,
+ 21541 - 11905: 0x85C4,
+ 21542 - 11905: 0xB7F1,
+ 21543 - 11905: 0xB0C9,
+ 21544 - 11905: 0xB6D6,
+ 21545 - 11905: 0xB7D4,
+ 21546 - 11905: 0x85C5,
+ 21547 - 11905: 0xBAAC,
+ 21548 - 11905: 0xCCFD,
+ 21549 - 11905: 0xBFD4,
+ 21550 - 11905: 0xCBB1,
+ 21551 - 11905: 0xC6F4,
+ 21552 - 11905: 0x85C6,
+ 21553 - 11905: 0xD6A8,
+ 21554 - 11905: 0xDFC5,
+ 21555 - 11905: 0x85C7,
+ 21556 - 11905: 0xCEE2,
+ 21557 - 11905: 0xB3B3,
+ 21558 - 11905: 0x85C8,
+ 21559 - 11905: 0x85C9,
+ 21560 - 11905: 0xCEFC,
+ 21561 - 11905: 0xB4B5,
+ 21562 - 11905: 0x85CA,
+ 21563 - 11905: 0xCEC7,
+ 21564 - 11905: 0xBAF0,
+ 21565 - 11905: 0x85CB,
+ 21566 - 11905: 0xCEE1,
+ 21567 - 11905: 0x85CC,
+ 21568 - 11905: 0xD1BD,
+ 21569 - 11905: 0x85CD,
+ 21570 - 11905: 0x85CE,
+ 21571 - 11905: 0xDFC0,
+ 21572 - 11905: 0x85CF,
+ 21573 - 11905: 0x85D0,
+ 21574 - 11905: 0xB4F4,
+ 21575 - 11905: 0x85D1,
+ 21576 - 11905: 0xB3CA,
+ 21577 - 11905: 0x85D2,
+ 21578 - 11905: 0xB8E6,
+ 21579 - 11905: 0xDFBB,
+ 21580 - 11905: 0x85D3,
+ 21581 - 11905: 0x85D4,
+ 21582 - 11905: 0x85D5,
+ 21583 - 11905: 0x85D6,
+ 21584 - 11905: 0xC4C5,
+ 21585 - 11905: 0x85D7,
+ 21586 - 11905: 0xDFBC,
+ 21587 - 11905: 0xDFBD,
+ 21588 - 11905: 0xDFBE,
+ 21589 - 11905: 0xC5BB,
+ 21590 - 11905: 0xDFBF,
+ 21591 - 11905: 0xDFC2,
+ 21592 - 11905: 0xD4B1,
+ 21593 - 11905: 0xDFC3,
+ 21594 - 11905: 0x85D8,
+ 21595 - 11905: 0xC7BA,
+ 21596 - 11905: 0xCED8,
+ 21597 - 11905: 0x85D9,
+ 21598 - 11905: 0x85DA,
+ 21599 - 11905: 0x85DB,
+ 21600 - 11905: 0x85DC,
+ 21601 - 11905: 0x85DD,
+ 21602 - 11905: 0xC4D8,
+ 21603 - 11905: 0x85DE,
+ 21604 - 11905: 0xDFCA,
+ 21605 - 11905: 0x85DF,
+ 21606 - 11905: 0xDFCF,
+ 21607 - 11905: 0x85E0,
+ 21608 - 11905: 0xD6DC,
+ 21609 - 11905: 0x85E1,
+ 21610 - 11905: 0x85E2,
+ 21611 - 11905: 0x85E3,
+ 21612 - 11905: 0x85E4,
+ 21613 - 11905: 0x85E5,
+ 21614 - 11905: 0x85E6,
+ 21615 - 11905: 0x85E7,
+ 21616 - 11905: 0x85E8,
+ 21617 - 11905: 0xDFC9,
+ 21618 - 11905: 0xDFDA,
+ 21619 - 11905: 0xCEB6,
+ 21620 - 11905: 0x85E9,
+ 21621 - 11905: 0xBAC7,
+ 21622 - 11905: 0xDFCE,
+ 21623 - 11905: 0xDFC8,
+ 21624 - 11905: 0xC5DE,
+ 21625 - 11905: 0x85EA,
+ 21626 - 11905: 0x85EB,
+ 21627 - 11905: 0xC9EB,
+ 21628 - 11905: 0xBAF4,
+ 21629 - 11905: 0xC3FC,
+ 21630 - 11905: 0x85EC,
+ 21631 - 11905: 0x85ED,
+ 21632 - 11905: 0xBED7,
+ 21633 - 11905: 0x85EE,
+ 21634 - 11905: 0xDFC6,
+ 21635 - 11905: 0x85EF,
+ 21636 - 11905: 0xDFCD,
+ 21637 - 11905: 0x85F0,
+ 21638 - 11905: 0xC5D8,
+ 21639 - 11905: 0x85F1,
+ 21640 - 11905: 0x85F2,
+ 21641 - 11905: 0x85F3,
+ 21642 - 11905: 0x85F4,
+ 21643 - 11905: 0xD5A6,
+ 21644 - 11905: 0xBACD,
+ 21645 - 11905: 0x85F5,
+ 21646 - 11905: 0xBECC,
+ 21647 - 11905: 0xD3BD,
+ 21648 - 11905: 0xB8C0,
+ 21649 - 11905: 0x85F6,
+ 21650 - 11905: 0xD6E4,
+ 21651 - 11905: 0x85F7,
+ 21652 - 11905: 0xDFC7,
+ 21653 - 11905: 0xB9BE,
+ 21654 - 11905: 0xBFA7,
+ 21655 - 11905: 0x85F8,
+ 21656 - 11905: 0x85F9,
+ 21657 - 11905: 0xC1FC,
+ 21658 - 11905: 0xDFCB,
+ 21659 - 11905: 0xDFCC,
+ 21660 - 11905: 0x85FA,
+ 21661 - 11905: 0xDFD0,
+ 21662 - 11905: 0x85FB,
+ 21663 - 11905: 0x85FC,
+ 21664 - 11905: 0x85FD,
+ 21665 - 11905: 0x85FE,
+ 21666 - 11905: 0x8640,
+ 21667 - 11905: 0xDFDB,
+ 21668 - 11905: 0xDFE5,
+ 21669 - 11905: 0x8641,
+ 21670 - 11905: 0xDFD7,
+ 21671 - 11905: 0xDFD6,
+ 21672 - 11905: 0xD7C9,
+ 21673 - 11905: 0xDFE3,
+ 21674 - 11905: 0xDFE4,
+ 21675 - 11905: 0xE5EB,
+ 21676 - 11905: 0xD2A7,
+ 21677 - 11905: 0xDFD2,
+ 21678 - 11905: 0x8642,
+ 21679 - 11905: 0xBFA9,
+ 21680 - 11905: 0x8643,
+ 21681 - 11905: 0xD4DB,
+ 21682 - 11905: 0x8644,
+ 21683 - 11905: 0xBFC8,
+ 21684 - 11905: 0xDFD4,
+ 21685 - 11905: 0x8645,
+ 21686 - 11905: 0x8646,
+ 21687 - 11905: 0x8647,
+ 21688 - 11905: 0xCFCC,
+ 21689 - 11905: 0x8648,
+ 21690 - 11905: 0x8649,
+ 21691 - 11905: 0xDFDD,
+ 21692 - 11905: 0x864A,
+ 21693 - 11905: 0xD1CA,
+ 21694 - 11905: 0x864B,
+ 21695 - 11905: 0xDFDE,
+ 21696 - 11905: 0xB0A7,
+ 21697 - 11905: 0xC6B7,
+ 21698 - 11905: 0xDFD3,
+ 21699 - 11905: 0x864C,
+ 21700 - 11905: 0xBAE5,
+ 21701 - 11905: 0x864D,
+ 21702 - 11905: 0xB6DF,
+ 21703 - 11905: 0xCDDB,
+ 21704 - 11905: 0xB9FE,
+ 21705 - 11905: 0xD4D5,
+ 21706 - 11905: 0x864E,
+ 21707 - 11905: 0x864F,
+ 21708 - 11905: 0xDFDF,
+ 21709 - 11905: 0xCFEC,
+ 21710 - 11905: 0xB0A5,
+ 21711 - 11905: 0xDFE7,
+ 21712 - 11905: 0xDFD1,
+ 21713 - 11905: 0xD1C6,
+ 21714 - 11905: 0xDFD5,
+ 21715 - 11905: 0xDFD8,
+ 21716 - 11905: 0xDFD9,
+ 21717 - 11905: 0xDFDC,
+ 21718 - 11905: 0x8650,
+ 21719 - 11905: 0xBBA9,
+ 21720 - 11905: 0x8651,
+ 21721 - 11905: 0xDFE0,
+ 21722 - 11905: 0xDFE1,
+ 21723 - 11905: 0x8652,
+ 21724 - 11905: 0xDFE2,
+ 21725 - 11905: 0xDFE6,
+ 21726 - 11905: 0xDFE8,
+ 21727 - 11905: 0xD3B4,
+ 21728 - 11905: 0x8653,
+ 21729 - 11905: 0x8654,
+ 21730 - 11905: 0x8655,
+ 21731 - 11905: 0x8656,
+ 21732 - 11905: 0x8657,
+ 21733 - 11905: 0xB8E7,
+ 21734 - 11905: 0xC5B6,
+ 21735 - 11905: 0xDFEA,
+ 21736 - 11905: 0xC9DA,
+ 21737 - 11905: 0xC1A8,
+ 21738 - 11905: 0xC4C4,
+ 21739 - 11905: 0x8658,
+ 21740 - 11905: 0x8659,
+ 21741 - 11905: 0xBFDE,
+ 21742 - 11905: 0xCFF8,
+ 21743 - 11905: 0x865A,
+ 21744 - 11905: 0x865B,
+ 21745 - 11905: 0x865C,
+ 21746 - 11905: 0xD5DC,
+ 21747 - 11905: 0xDFEE,
+ 21748 - 11905: 0x865D,
+ 21749 - 11905: 0x865E,
+ 21750 - 11905: 0x865F,
+ 21751 - 11905: 0x8660,
+ 21752 - 11905: 0x8661,
+ 21753 - 11905: 0x8662,
+ 21754 - 11905: 0xB2B8,
+ 21755 - 11905: 0x8663,
+ 21756 - 11905: 0xBADF,
+ 21757 - 11905: 0xDFEC,
+ 21758 - 11905: 0x8664,
+ 21759 - 11905: 0xDBC1,
+ 21760 - 11905: 0x8665,
+ 21761 - 11905: 0xD1E4,
+ 21762 - 11905: 0x8666,
+ 21763 - 11905: 0x8667,
+ 21764 - 11905: 0x8668,
+ 21765 - 11905: 0x8669,
+ 21766 - 11905: 0xCBF4,
+ 21767 - 11905: 0xB4BD,
+ 21768 - 11905: 0x866A,
+ 21769 - 11905: 0xB0A6,
+ 21770 - 11905: 0x866B,
+ 21771 - 11905: 0x866C,
+ 21772 - 11905: 0x866D,
+ 21773 - 11905: 0x866E,
+ 21774 - 11905: 0x866F,
+ 21775 - 11905: 0xDFF1,
+ 21776 - 11905: 0xCCC6,
+ 21777 - 11905: 0xDFF2,
+ 21778 - 11905: 0x8670,
+ 21779 - 11905: 0x8671,
+ 21780 - 11905: 0xDFED,
+ 21781 - 11905: 0x8672,
+ 21782 - 11905: 0x8673,
+ 21783 - 11905: 0x8674,
+ 21784 - 11905: 0x8675,
+ 21785 - 11905: 0x8676,
+ 21786 - 11905: 0x8677,
+ 21787 - 11905: 0xDFE9,
+ 21788 - 11905: 0x8678,
+ 21789 - 11905: 0x8679,
+ 21790 - 11905: 0x867A,
+ 21791 - 11905: 0x867B,
+ 21792 - 11905: 0xDFEB,
+ 21793 - 11905: 0x867C,
+ 21794 - 11905: 0xDFEF,
+ 21795 - 11905: 0xDFF0,
+ 21796 - 11905: 0xBBBD,
+ 21797 - 11905: 0x867D,
+ 21798 - 11905: 0x867E,
+ 21799 - 11905: 0xDFF3,
+ 21800 - 11905: 0x8680,
+ 21801 - 11905: 0x8681,
+ 21802 - 11905: 0xDFF4,
+ 21803 - 11905: 0x8682,
+ 21804 - 11905: 0xBBA3,
+ 21805 - 11905: 0x8683,
+ 21806 - 11905: 0xCADB,
+ 21807 - 11905: 0xCEA8,
+ 21808 - 11905: 0xE0A7,
+ 21809 - 11905: 0xB3AA,
+ 21810 - 11905: 0x8684,
+ 21811 - 11905: 0xE0A6,
+ 21812 - 11905: 0x8685,
+ 21813 - 11905: 0x8686,
+ 21814 - 11905: 0x8687,
+ 21815 - 11905: 0xE0A1,
+ 21816 - 11905: 0x8688,
+ 21817 - 11905: 0x8689,
+ 21818 - 11905: 0x868A,
+ 21819 - 11905: 0x868B,
+ 21820 - 11905: 0xDFFE,
+ 21821 - 11905: 0x868C,
+ 21822 - 11905: 0xCDD9,
+ 21823 - 11905: 0xDFFC,
+ 21824 - 11905: 0x868D,
+ 21825 - 11905: 0xDFFA,
+ 21826 - 11905: 0x868E,
+ 21827 - 11905: 0xBFD0,
+ 21828 - 11905: 0xD7C4,
+ 21829 - 11905: 0x868F,
+ 21830 - 11905: 0xC9CC,
+ 21831 - 11905: 0x8690,
+ 21832 - 11905: 0x8691,
+ 21833 - 11905: 0xDFF8,
+ 21834 - 11905: 0xB0A1,
+ 21835 - 11905: 0x8692,
+ 21836 - 11905: 0x8693,
+ 21837 - 11905: 0x8694,
+ 21838 - 11905: 0x8695,
+ 21839 - 11905: 0x8696,
+ 21840 - 11905: 0xDFFD,
+ 21841 - 11905: 0x8697,
+ 21842 - 11905: 0x8698,
+ 21843 - 11905: 0x8699,
+ 21844 - 11905: 0x869A,
+ 21845 - 11905: 0xDFFB,
+ 21846 - 11905: 0xE0A2,
+ 21847 - 11905: 0x869B,
+ 21848 - 11905: 0x869C,
+ 21849 - 11905: 0x869D,
+ 21850 - 11905: 0x869E,
+ 21851 - 11905: 0x869F,
+ 21852 - 11905: 0xE0A8,
+ 21853 - 11905: 0x86A0,
+ 21854 - 11905: 0x86A1,
+ 21855 - 11905: 0x86A2,
+ 21856 - 11905: 0x86A3,
+ 21857 - 11905: 0xB7C8,
+ 21858 - 11905: 0x86A4,
+ 21859 - 11905: 0x86A5,
+ 21860 - 11905: 0xC6A1,
+ 21861 - 11905: 0xC9B6,
+ 21862 - 11905: 0xC0B2,
+ 21863 - 11905: 0xDFF5,
+ 21864 - 11905: 0x86A6,
+ 21865 - 11905: 0x86A7,
+ 21866 - 11905: 0xC5BE,
+ 21867 - 11905: 0x86A8,
+ 21868 - 11905: 0xD8C4,
+ 21869 - 11905: 0xDFF9,
+ 21870 - 11905: 0xC4F6,
+ 21871 - 11905: 0x86A9,
+ 21872 - 11905: 0x86AA,
+ 21873 - 11905: 0x86AB,
+ 21874 - 11905: 0x86AC,
+ 21875 - 11905: 0x86AD,
+ 21876 - 11905: 0x86AE,
+ 21877 - 11905: 0xE0A3,
+ 21878 - 11905: 0xE0A4,
+ 21879 - 11905: 0xE0A5,
+ 21880 - 11905: 0xD0A5,
+ 21881 - 11905: 0x86AF,
+ 21882 - 11905: 0x86B0,
+ 21883 - 11905: 0xE0B4,
+ 21884 - 11905: 0xCCE4,
+ 21885 - 11905: 0x86B1,
+ 21886 - 11905: 0xE0B1,
+ 21887 - 11905: 0x86B2,
+ 21888 - 11905: 0xBFA6,
+ 21889 - 11905: 0xE0AF,
+ 21890 - 11905: 0xCEB9,
+ 21891 - 11905: 0xE0AB,
+ 21892 - 11905: 0xC9C6,
+ 21893 - 11905: 0x86B3,
+ 21894 - 11905: 0x86B4,
+ 21895 - 11905: 0xC0AE,
+ 21896 - 11905: 0xE0AE,
+ 21897 - 11905: 0xBAED,
+ 21898 - 11905: 0xBAB0,
+ 21899 - 11905: 0xE0A9,
+ 21900 - 11905: 0x86B5,
+ 21901 - 11905: 0x86B6,
+ 21902 - 11905: 0x86B7,
+ 21903 - 11905: 0xDFF6,
+ 21904 - 11905: 0x86B8,
+ 21905 - 11905: 0xE0B3,
+ 21906 - 11905: 0x86B9,
+ 21907 - 11905: 0x86BA,
+ 21908 - 11905: 0xE0B8,
+ 21909 - 11905: 0x86BB,
+ 21910 - 11905: 0x86BC,
+ 21911 - 11905: 0x86BD,
+ 21912 - 11905: 0xB4AD,
+ 21913 - 11905: 0xE0B9,
+ 21914 - 11905: 0x86BE,
+ 21915 - 11905: 0x86BF,
+ 21916 - 11905: 0xCFB2,
+ 21917 - 11905: 0xBAC8,
+ 21918 - 11905: 0x86C0,
+ 21919 - 11905: 0xE0B0,
+ 21920 - 11905: 0x86C1,
+ 21921 - 11905: 0x86C2,
+ 21922 - 11905: 0x86C3,
+ 21923 - 11905: 0x86C4,
+ 21924 - 11905: 0x86C5,
+ 21925 - 11905: 0x86C6,
+ 21926 - 11905: 0x86C7,
+ 21927 - 11905: 0xD0FA,
+ 21928 - 11905: 0x86C8,
+ 21929 - 11905: 0x86C9,
+ 21930 - 11905: 0x86CA,
+ 21931 - 11905: 0x86CB,
+ 21932 - 11905: 0x86CC,
+ 21933 - 11905: 0x86CD,
+ 21934 - 11905: 0x86CE,
+ 21935 - 11905: 0x86CF,
+ 21936 - 11905: 0x86D0,
+ 21937 - 11905: 0xE0AC,
+ 21938 - 11905: 0x86D1,
+ 21939 - 11905: 0xD4FB,
+ 21940 - 11905: 0x86D2,
+ 21941 - 11905: 0xDFF7,
+ 21942 - 11905: 0x86D3,
+ 21943 - 11905: 0xC5E7,
+ 21944 - 11905: 0x86D4,
+ 21945 - 11905: 0xE0AD,
+ 21946 - 11905: 0x86D5,
+ 21947 - 11905: 0xD3F7,
+ 21948 - 11905: 0x86D6,
+ 21949 - 11905: 0xE0B6,
+ 21950 - 11905: 0xE0B7,
+ 21951 - 11905: 0x86D7,
+ 21952 - 11905: 0x86D8,
+ 21953 - 11905: 0x86D9,
+ 21954 - 11905: 0x86DA,
+ 21955 - 11905: 0x86DB,
+ 21956 - 11905: 0xE0C4,
+ 21957 - 11905: 0xD0E1,
+ 21958 - 11905: 0x86DC,
+ 21959 - 11905: 0x86DD,
+ 21960 - 11905: 0x86DE,
+ 21961 - 11905: 0xE0BC,
+ 21962 - 11905: 0x86DF,
+ 21963 - 11905: 0x86E0,
+ 21964 - 11905: 0xE0C9,
+ 21965 - 11905: 0xE0CA,
+ 21966 - 11905: 0x86E1,
+ 21967 - 11905: 0x86E2,
+ 21968 - 11905: 0x86E3,
+ 21969 - 11905: 0xE0BE,
+ 21970 - 11905: 0xE0AA,
+ 21971 - 11905: 0xC9A4,
+ 21972 - 11905: 0xE0C1,
+ 21973 - 11905: 0x86E4,
+ 21974 - 11905: 0xE0B2,
+ 21975 - 11905: 0x86E5,
+ 21976 - 11905: 0x86E6,
+ 21977 - 11905: 0x86E7,
+ 21978 - 11905: 0x86E8,
+ 21979 - 11905: 0x86E9,
+ 21980 - 11905: 0xCAC8,
+ 21981 - 11905: 0xE0C3,
+ 21982 - 11905: 0x86EA,
+ 21983 - 11905: 0xE0B5,
+ 21984 - 11905: 0x86EB,
+ 21985 - 11905: 0xCECB,
+ 21986 - 11905: 0x86EC,
+ 21987 - 11905: 0xCBC3,
+ 21988 - 11905: 0xE0CD,
+ 21989 - 11905: 0xE0C6,
+ 21990 - 11905: 0xE0C2,
+ 21991 - 11905: 0x86ED,
+ 21992 - 11905: 0xE0CB,
+ 21993 - 11905: 0x86EE,
+ 21994 - 11905: 0xE0BA,
+ 21995 - 11905: 0xE0BF,
+ 21996 - 11905: 0xE0C0,
+ 21997 - 11905: 0x86EF,
+ 21998 - 11905: 0x86F0,
+ 21999 - 11905: 0xE0C5,
+ 22000 - 11905: 0x86F1,
+ 22001 - 11905: 0x86F2,
+ 22002 - 11905: 0xE0C7,
+ 22003 - 11905: 0xE0C8,
+ 22004 - 11905: 0x86F3,
+ 22005 - 11905: 0xE0CC,
+ 22006 - 11905: 0x86F4,
+ 22007 - 11905: 0xE0BB,
+ 22008 - 11905: 0x86F5,
+ 22009 - 11905: 0x86F6,
+ 22010 - 11905: 0x86F7,
+ 22011 - 11905: 0x86F8,
+ 22012 - 11905: 0x86F9,
+ 22013 - 11905: 0xCBD4,
+ 22014 - 11905: 0xE0D5,
+ 22015 - 11905: 0x86FA,
+ 22016 - 11905: 0xE0D6,
+ 22017 - 11905: 0xE0D2,
+ 22018 - 11905: 0x86FB,
+ 22019 - 11905: 0x86FC,
+ 22020 - 11905: 0x86FD,
+ 22021 - 11905: 0x86FE,
+ 22022 - 11905: 0x8740,
+ 22023 - 11905: 0x8741,
+ 22024 - 11905: 0xE0D0,
+ 22025 - 11905: 0xBCCE,
+ 22026 - 11905: 0x8742,
+ 22027 - 11905: 0x8743,
+ 22028 - 11905: 0xE0D1,
+ 22029 - 11905: 0x8744,
+ 22030 - 11905: 0xB8C2,
+ 22031 - 11905: 0xD8C5,
+ 22032 - 11905: 0x8745,
+ 22033 - 11905: 0x8746,
+ 22034 - 11905: 0x8747,
+ 22035 - 11905: 0x8748,
+ 22036 - 11905: 0x8749,
+ 22037 - 11905: 0x874A,
+ 22038 - 11905: 0x874B,
+ 22039 - 11905: 0x874C,
+ 22040 - 11905: 0xD0EA,
+ 22041 - 11905: 0x874D,
+ 22042 - 11905: 0x874E,
+ 22043 - 11905: 0xC2EF,
+ 22044 - 11905: 0x874F,
+ 22045 - 11905: 0x8750,
+ 22046 - 11905: 0xE0CF,
+ 22047 - 11905: 0xE0BD,
+ 22048 - 11905: 0x8751,
+ 22049 - 11905: 0x8752,
+ 22050 - 11905: 0x8753,
+ 22051 - 11905: 0xE0D4,
+ 22052 - 11905: 0xE0D3,
+ 22053 - 11905: 0x8754,
+ 22054 - 11905: 0x8755,
+ 22055 - 11905: 0xE0D7,
+ 22056 - 11905: 0x8756,
+ 22057 - 11905: 0x8757,
+ 22058 - 11905: 0x8758,
+ 22059 - 11905: 0x8759,
+ 22060 - 11905: 0xE0DC,
+ 22061 - 11905: 0xE0D8,
+ 22062 - 11905: 0x875A,
+ 22063 - 11905: 0x875B,
+ 22064 - 11905: 0x875C,
+ 22065 - 11905: 0xD6F6,
+ 22066 - 11905: 0xB3B0,
+ 22067 - 11905: 0x875D,
+ 22068 - 11905: 0xD7EC,
+ 22069 - 11905: 0x875E,
+ 22070 - 11905: 0xCBBB,
+ 22071 - 11905: 0x875F,
+ 22072 - 11905: 0x8760,
+ 22073 - 11905: 0xE0DA,
+ 22074 - 11905: 0x8761,
+ 22075 - 11905: 0xCEFB,
+ 22076 - 11905: 0x8762,
+ 22077 - 11905: 0x8763,
+ 22078 - 11905: 0x8764,
+ 22079 - 11905: 0xBAD9,
+ 22080 - 11905: 0x8765,
+ 22081 - 11905: 0x8766,
+ 22082 - 11905: 0x8767,
+ 22083 - 11905: 0x8768,
+ 22084 - 11905: 0x8769,
+ 22085 - 11905: 0x876A,
+ 22086 - 11905: 0x876B,
+ 22087 - 11905: 0x876C,
+ 22088 - 11905: 0x876D,
+ 22089 - 11905: 0x876E,
+ 22090 - 11905: 0x876F,
+ 22091 - 11905: 0x8770,
+ 22092 - 11905: 0xE0E1,
+ 22093 - 11905: 0xE0DD,
+ 22094 - 11905: 0xD2AD,
+ 22095 - 11905: 0x8771,
+ 22096 - 11905: 0x8772,
+ 22097 - 11905: 0x8773,
+ 22098 - 11905: 0x8774,
+ 22099 - 11905: 0x8775,
+ 22100 - 11905: 0xE0E2,
+ 22101 - 11905: 0x8776,
+ 22102 - 11905: 0x8777,
+ 22103 - 11905: 0xE0DB,
+ 22104 - 11905: 0xE0D9,
+ 22105 - 11905: 0xE0DF,
+ 22106 - 11905: 0x8778,
+ 22107 - 11905: 0x8779,
+ 22108 - 11905: 0xE0E0,
+ 22109 - 11905: 0x877A,
+ 22110 - 11905: 0x877B,
+ 22111 - 11905: 0x877C,
+ 22112 - 11905: 0x877D,
+ 22113 - 11905: 0x877E,
+ 22114 - 11905: 0xE0DE,
+ 22115 - 11905: 0x8780,
+ 22116 - 11905: 0xE0E4,
+ 22117 - 11905: 0x8781,
+ 22118 - 11905: 0x8782,
+ 22119 - 11905: 0x8783,
+ 22120 - 11905: 0xC6F7,
+ 22121 - 11905: 0xD8AC,
+ 22122 - 11905: 0xD4EB,
+ 22123 - 11905: 0xE0E6,
+ 22124 - 11905: 0xCAC9,
+ 22125 - 11905: 0x8784,
+ 22126 - 11905: 0x8785,
+ 22127 - 11905: 0x8786,
+ 22128 - 11905: 0x8787,
+ 22129 - 11905: 0xE0E5,
+ 22130 - 11905: 0x8788,
+ 22131 - 11905: 0x8789,
+ 22132 - 11905: 0x878A,
+ 22133 - 11905: 0x878B,
+ 22134 - 11905: 0xB8C1,
+ 22135 - 11905: 0x878C,
+ 22136 - 11905: 0x878D,
+ 22137 - 11905: 0x878E,
+ 22138 - 11905: 0x878F,
+ 22139 - 11905: 0xE0E7,
+ 22140 - 11905: 0xE0E8,
+ 22141 - 11905: 0x8790,
+ 22142 - 11905: 0x8791,
+ 22143 - 11905: 0x8792,
+ 22144 - 11905: 0x8793,
+ 22145 - 11905: 0x8794,
+ 22146 - 11905: 0x8795,
+ 22147 - 11905: 0x8796,
+ 22148 - 11905: 0x8797,
+ 22149 - 11905: 0xE0E9,
+ 22150 - 11905: 0xE0E3,
+ 22151 - 11905: 0x8798,
+ 22152 - 11905: 0x8799,
+ 22153 - 11905: 0x879A,
+ 22154 - 11905: 0x879B,
+ 22155 - 11905: 0x879C,
+ 22156 - 11905: 0x879D,
+ 22157 - 11905: 0x879E,
+ 22158 - 11905: 0xBABF,
+ 22159 - 11905: 0xCCE7,
+ 22160 - 11905: 0x879F,
+ 22161 - 11905: 0x87A0,
+ 22162 - 11905: 0x87A1,
+ 22163 - 11905: 0xE0EA,
+ 22164 - 11905: 0x87A2,
+ 22165 - 11905: 0x87A3,
+ 22166 - 11905: 0x87A4,
+ 22167 - 11905: 0x87A5,
+ 22168 - 11905: 0x87A6,
+ 22169 - 11905: 0x87A7,
+ 22170 - 11905: 0x87A8,
+ 22171 - 11905: 0x87A9,
+ 22172 - 11905: 0x87AA,
+ 22173 - 11905: 0x87AB,
+ 22174 - 11905: 0x87AC,
+ 22175 - 11905: 0x87AD,
+ 22176 - 11905: 0x87AE,
+ 22177 - 11905: 0x87AF,
+ 22178 - 11905: 0x87B0,
+ 22179 - 11905: 0xCFF9,
+ 22180 - 11905: 0x87B1,
+ 22181 - 11905: 0x87B2,
+ 22182 - 11905: 0x87B3,
+ 22183 - 11905: 0x87B4,
+ 22184 - 11905: 0x87B5,
+ 22185 - 11905: 0x87B6,
+ 22186 - 11905: 0x87B7,
+ 22187 - 11905: 0x87B8,
+ 22188 - 11905: 0x87B9,
+ 22189 - 11905: 0x87BA,
+ 22190 - 11905: 0x87BB,
+ 22191 - 11905: 0xE0EB,
+ 22192 - 11905: 0x87BC,
+ 22193 - 11905: 0x87BD,
+ 22194 - 11905: 0x87BE,
+ 22195 - 11905: 0x87BF,
+ 22196 - 11905: 0x87C0,
+ 22197 - 11905: 0x87C1,
+ 22198 - 11905: 0x87C2,
+ 22199 - 11905: 0xC8C2,
+ 22200 - 11905: 0x87C3,
+ 22201 - 11905: 0x87C4,
+ 22202 - 11905: 0x87C5,
+ 22203 - 11905: 0x87C6,
+ 22204 - 11905: 0xBDC0,
+ 22205 - 11905: 0x87C7,
+ 22206 - 11905: 0x87C8,
+ 22207 - 11905: 0x87C9,
+ 22208 - 11905: 0x87CA,
+ 22209 - 11905: 0x87CB,
+ 22210 - 11905: 0x87CC,
+ 22211 - 11905: 0x87CD,
+ 22212 - 11905: 0x87CE,
+ 22213 - 11905: 0x87CF,
+ 22214 - 11905: 0x87D0,
+ 22215 - 11905: 0x87D1,
+ 22216 - 11905: 0x87D2,
+ 22217 - 11905: 0x87D3,
+ 22218 - 11905: 0xC4D2,
+ 22219 - 11905: 0x87D4,
+ 22220 - 11905: 0x87D5,
+ 22221 - 11905: 0x87D6,
+ 22222 - 11905: 0x87D7,
+ 22223 - 11905: 0x87D8,
+ 22224 - 11905: 0x87D9,
+ 22225 - 11905: 0x87DA,
+ 22226 - 11905: 0x87DB,
+ 22227 - 11905: 0x87DC,
+ 22228 - 11905: 0xE0EC,
+ 22229 - 11905: 0x87DD,
+ 22230 - 11905: 0x87DE,
+ 22231 - 11905: 0xE0ED,
+ 22232 - 11905: 0x87DF,
+ 22233 - 11905: 0x87E0,
+ 22234 - 11905: 0xC7F4,
+ 22235 - 11905: 0xCBC4,
+ 22236 - 11905: 0x87E1,
+ 22237 - 11905: 0xE0EE,
+ 22238 - 11905: 0xBBD8,
+ 22239 - 11905: 0xD8B6,
+ 22240 - 11905: 0xD2F2,
+ 22241 - 11905: 0xE0EF,
+ 22242 - 11905: 0xCDC5,
+ 22243 - 11905: 0x87E2,
+ 22244 - 11905: 0xB6DA,
+ 22245 - 11905: 0x87E3,
+ 22246 - 11905: 0x87E4,
+ 22247 - 11905: 0x87E5,
+ 22248 - 11905: 0x87E6,
+ 22249 - 11905: 0x87E7,
+ 22250 - 11905: 0x87E8,
+ 22251 - 11905: 0xE0F1,
+ 22252 - 11905: 0x87E9,
+ 22253 - 11905: 0xD4B0,
+ 22254 - 11905: 0x87EA,
+ 22255 - 11905: 0x87EB,
+ 22256 - 11905: 0xC0A7,
+ 22257 - 11905: 0xB4D1,
+ 22258 - 11905: 0x87EC,
+ 22259 - 11905: 0x87ED,
+ 22260 - 11905: 0xCEA7,
+ 22261 - 11905: 0xE0F0,
+ 22262 - 11905: 0x87EE,
+ 22263 - 11905: 0x87EF,
+ 22264 - 11905: 0x87F0,
+ 22265 - 11905: 0xE0F2,
+ 22266 - 11905: 0xB9CC,
+ 22267 - 11905: 0x87F1,
+ 22268 - 11905: 0x87F2,
+ 22269 - 11905: 0xB9FA,
+ 22270 - 11905: 0xCDBC,
+ 22271 - 11905: 0xE0F3,
+ 22272 - 11905: 0x87F3,
+ 22273 - 11905: 0x87F4,
+ 22274 - 11905: 0x87F5,
+ 22275 - 11905: 0xC6D4,
+ 22276 - 11905: 0xE0F4,
+ 22277 - 11905: 0x87F6,
+ 22278 - 11905: 0xD4B2,
+ 22279 - 11905: 0x87F7,
+ 22280 - 11905: 0xC8A6,
+ 22281 - 11905: 0xE0F6,
+ 22282 - 11905: 0xE0F5,
+ 22283 - 11905: 0x87F8,
+ 22284 - 11905: 0x87F9,
+ 22285 - 11905: 0x87FA,
+ 22286 - 11905: 0x87FB,
+ 22287 - 11905: 0x87FC,
+ 22288 - 11905: 0x87FD,
+ 22289 - 11905: 0x87FE,
+ 22290 - 11905: 0x8840,
+ 22291 - 11905: 0x8841,
+ 22292 - 11905: 0x8842,
+ 22293 - 11905: 0x8843,
+ 22294 - 11905: 0x8844,
+ 22295 - 11905: 0x8845,
+ 22296 - 11905: 0x8846,
+ 22297 - 11905: 0x8847,
+ 22298 - 11905: 0x8848,
+ 22299 - 11905: 0x8849,
+ 22300 - 11905: 0xE0F7,
+ 22301 - 11905: 0x884A,
+ 22302 - 11905: 0x884B,
+ 22303 - 11905: 0xCDC1,
+ 22304 - 11905: 0x884C,
+ 22305 - 11905: 0x884D,
+ 22306 - 11905: 0x884E,
+ 22307 - 11905: 0xCAA5,
+ 22308 - 11905: 0x884F,
+ 22309 - 11905: 0x8850,
+ 22310 - 11905: 0x8851,
+ 22311 - 11905: 0x8852,
+ 22312 - 11905: 0xD4DA,
+ 22313 - 11905: 0xDBD7,
+ 22314 - 11905: 0xDBD9,
+ 22315 - 11905: 0x8853,
+ 22316 - 11905: 0xDBD8,
+ 22317 - 11905: 0xB9E7,
+ 22318 - 11905: 0xDBDC,
+ 22319 - 11905: 0xDBDD,
+ 22320 - 11905: 0xB5D8,
+ 22321 - 11905: 0x8854,
+ 22322 - 11905: 0x8855,
+ 22323 - 11905: 0xDBDA,
+ 22324 - 11905: 0x8856,
+ 22325 - 11905: 0x8857,
+ 22326 - 11905: 0x8858,
+ 22327 - 11905: 0x8859,
+ 22328 - 11905: 0x885A,
+ 22329 - 11905: 0xDBDB,
+ 22330 - 11905: 0xB3A1,
+ 22331 - 11905: 0xDBDF,
+ 22332 - 11905: 0x885B,
+ 22333 - 11905: 0x885C,
+ 22334 - 11905: 0xBBF8,
+ 22335 - 11905: 0x885D,
+ 22336 - 11905: 0xD6B7,
+ 22337 - 11905: 0x885E,
+ 22338 - 11905: 0xDBE0,
+ 22339 - 11905: 0x885F,
+ 22340 - 11905: 0x8860,
+ 22341 - 11905: 0x8861,
+ 22342 - 11905: 0x8862,
+ 22343 - 11905: 0xBEF9,
+ 22344 - 11905: 0x8863,
+ 22345 - 11905: 0x8864,
+ 22346 - 11905: 0xB7BB,
+ 22347 - 11905: 0x8865,
+ 22348 - 11905: 0xDBD0,
+ 22349 - 11905: 0xCCAE,
+ 22350 - 11905: 0xBFB2,
+ 22351 - 11905: 0xBBB5,
+ 22352 - 11905: 0xD7F8,
+ 22353 - 11905: 0xBFD3,
+ 22354 - 11905: 0x8866,
+ 22355 - 11905: 0x8867,
+ 22356 - 11905: 0x8868,
+ 22357 - 11905: 0x8869,
+ 22358 - 11905: 0x886A,
+ 22359 - 11905: 0xBFE9,
+ 22360 - 11905: 0x886B,
+ 22361 - 11905: 0x886C,
+ 22362 - 11905: 0xBCE1,
+ 22363 - 11905: 0xCCB3,
+ 22364 - 11905: 0xDBDE,
+ 22365 - 11905: 0xB0D3,
+ 22366 - 11905: 0xCEEB,
+ 22367 - 11905: 0xB7D8,
+ 22368 - 11905: 0xD7B9,
+ 22369 - 11905: 0xC6C2,
+ 22370 - 11905: 0x886D,
+ 22371 - 11905: 0x886E,
+ 22372 - 11905: 0xC0A4,
+ 22373 - 11905: 0x886F,
+ 22374 - 11905: 0xCCB9,
+ 22375 - 11905: 0x8870,
+ 22376 - 11905: 0xDBE7,
+ 22377 - 11905: 0xDBE1,
+ 22378 - 11905: 0xC6BA,
+ 22379 - 11905: 0xDBE3,
+ 22380 - 11905: 0x8871,
+ 22381 - 11905: 0xDBE8,
+ 22382 - 11905: 0x8872,
+ 22383 - 11905: 0xC5F7,
+ 22384 - 11905: 0x8873,
+ 22385 - 11905: 0x8874,
+ 22386 - 11905: 0x8875,
+ 22387 - 11905: 0xDBEA,
+ 22388 - 11905: 0x8876,
+ 22389 - 11905: 0x8877,
+ 22390 - 11905: 0xDBE9,
+ 22391 - 11905: 0xBFC0,
+ 22392 - 11905: 0x8878,
+ 22393 - 11905: 0x8879,
+ 22394 - 11905: 0x887A,
+ 22395 - 11905: 0xDBE6,
+ 22396 - 11905: 0xDBE5,
+ 22397 - 11905: 0x887B,
+ 22398 - 11905: 0x887C,
+ 22399 - 11905: 0x887D,
+ 22400 - 11905: 0x887E,
+ 22401 - 11905: 0x8880,
+ 22402 - 11905: 0xB4B9,
+ 22403 - 11905: 0xC0AC,
+ 22404 - 11905: 0xC2A2,
+ 22405 - 11905: 0xDBE2,
+ 22406 - 11905: 0xDBE4,
+ 22407 - 11905: 0x8881,
+ 22408 - 11905: 0x8882,
+ 22409 - 11905: 0x8883,
+ 22410 - 11905: 0x8884,
+ 22411 - 11905: 0xD0CD,
+ 22412 - 11905: 0xDBED,
+ 22413 - 11905: 0x8885,
+ 22414 - 11905: 0x8886,
+ 22415 - 11905: 0x8887,
+ 22416 - 11905: 0x8888,
+ 22417 - 11905: 0x8889,
+ 22418 - 11905: 0xC0DD,
+ 22419 - 11905: 0xDBF2,
+ 22420 - 11905: 0x888A,
+ 22421 - 11905: 0x888B,
+ 22422 - 11905: 0x888C,
+ 22423 - 11905: 0x888D,
+ 22424 - 11905: 0x888E,
+ 22425 - 11905: 0x888F,
+ 22426 - 11905: 0x8890,
+ 22427 - 11905: 0xB6E2,
+ 22428 - 11905: 0x8891,
+ 22429 - 11905: 0x8892,
+ 22430 - 11905: 0x8893,
+ 22431 - 11905: 0x8894,
+ 22432 - 11905: 0xDBF3,
+ 22433 - 11905: 0xDBD2,
+ 22434 - 11905: 0xB9B8,
+ 22435 - 11905: 0xD4AB,
+ 22436 - 11905: 0xDBEC,
+ 22437 - 11905: 0x8895,
+ 22438 - 11905: 0xBFD1,
+ 22439 - 11905: 0xDBF0,
+ 22440 - 11905: 0x8896,
+ 22441 - 11905: 0xDBD1,
+ 22442 - 11905: 0x8897,
+ 22443 - 11905: 0xB5E6,
+ 22444 - 11905: 0x8898,
+ 22445 - 11905: 0xDBEB,
+ 22446 - 11905: 0xBFE5,
+ 22447 - 11905: 0x8899,
+ 22448 - 11905: 0x889A,
+ 22449 - 11905: 0x889B,
+ 22450 - 11905: 0xDBEE,
+ 22451 - 11905: 0x889C,
+ 22452 - 11905: 0xDBF1,
+ 22453 - 11905: 0x889D,
+ 22454 - 11905: 0x889E,
+ 22455 - 11905: 0x889F,
+ 22456 - 11905: 0xDBF9,
+ 22457 - 11905: 0x88A0,
+ 22458 - 11905: 0x88A1,
+ 22459 - 11905: 0x88A2,
+ 22460 - 11905: 0x88A3,
+ 22461 - 11905: 0x88A4,
+ 22462 - 11905: 0x88A5,
+ 22463 - 11905: 0x88A6,
+ 22464 - 11905: 0x88A7,
+ 22465 - 11905: 0x88A8,
+ 22466 - 11905: 0xB9A1,
+ 22467 - 11905: 0xB0A3,
+ 22468 - 11905: 0x88A9,
+ 22469 - 11905: 0x88AA,
+ 22470 - 11905: 0x88AB,
+ 22471 - 11905: 0x88AC,
+ 22472 - 11905: 0x88AD,
+ 22473 - 11905: 0x88AE,
+ 22474 - 11905: 0x88AF,
+ 22475 - 11905: 0xC2F1,
+ 22476 - 11905: 0x88B0,
+ 22477 - 11905: 0x88B1,
+ 22478 - 11905: 0xB3C7,
+ 22479 - 11905: 0xDBEF,
+ 22480 - 11905: 0x88B2,
+ 22481 - 11905: 0x88B3,
+ 22482 - 11905: 0xDBF8,
+ 22483 - 11905: 0x88B4,
+ 22484 - 11905: 0xC6D2,
+ 22485 - 11905: 0xDBF4,
+ 22486 - 11905: 0x88B5,
+ 22487 - 11905: 0x88B6,
+ 22488 - 11905: 0xDBF5,
+ 22489 - 11905: 0xDBF7,
+ 22490 - 11905: 0xDBF6,
+ 22491 - 11905: 0x88B7,
+ 22492 - 11905: 0x88B8,
+ 22493 - 11905: 0xDBFE,
+ 22494 - 11905: 0x88B9,
+ 22495 - 11905: 0xD3F2,
+ 22496 - 11905: 0xB2BA,
+ 22497 - 11905: 0x88BA,
+ 22498 - 11905: 0x88BB,
+ 22499 - 11905: 0x88BC,
+ 22500 - 11905: 0xDBFD,
+ 22501 - 11905: 0x88BD,
+ 22502 - 11905: 0x88BE,
+ 22503 - 11905: 0x88BF,
+ 22504 - 11905: 0x88C0,
+ 22505 - 11905: 0x88C1,
+ 22506 - 11905: 0x88C2,
+ 22507 - 11905: 0x88C3,
+ 22508 - 11905: 0x88C4,
+ 22509 - 11905: 0xDCA4,
+ 22510 - 11905: 0x88C5,
+ 22511 - 11905: 0xDBFB,
+ 22512 - 11905: 0x88C6,
+ 22513 - 11905: 0x88C7,
+ 22514 - 11905: 0x88C8,
+ 22515 - 11905: 0x88C9,
+ 22516 - 11905: 0xDBFA,
+ 22517 - 11905: 0x88CA,
+ 22518 - 11905: 0x88CB,
+ 22519 - 11905: 0x88CC,
+ 22520 - 11905: 0xDBFC,
+ 22521 - 11905: 0xC5E0,
+ 22522 - 11905: 0xBBF9,
+ 22523 - 11905: 0x88CD,
+ 22524 - 11905: 0x88CE,
+ 22525 - 11905: 0xDCA3,
+ 22526 - 11905: 0x88CF,
+ 22527 - 11905: 0x88D0,
+ 22528 - 11905: 0xDCA5,
+ 22529 - 11905: 0x88D1,
+ 22530 - 11905: 0xCCC3,
+ 22531 - 11905: 0x88D2,
+ 22532 - 11905: 0x88D3,
+ 22533 - 11905: 0x88D4,
+ 22534 - 11905: 0xB6D1,
+ 22535 - 11905: 0xDDC0,
+ 22536 - 11905: 0x88D5,
+ 22537 - 11905: 0x88D6,
+ 22538 - 11905: 0x88D7,
+ 22539 - 11905: 0xDCA1,
+ 22540 - 11905: 0x88D8,
+ 22541 - 11905: 0xDCA2,
+ 22542 - 11905: 0x88D9,
+ 22543 - 11905: 0x88DA,
+ 22544 - 11905: 0x88DB,
+ 22545 - 11905: 0xC7B5,
+ 22546 - 11905: 0x88DC,
+ 22547 - 11905: 0x88DD,
+ 22548 - 11905: 0x88DE,
+ 22549 - 11905: 0xB6E9,
+ 22550 - 11905: 0x88DF,
+ 22551 - 11905: 0x88E0,
+ 22552 - 11905: 0x88E1,
+ 22553 - 11905: 0xDCA7,
+ 22554 - 11905: 0x88E2,
+ 22555 - 11905: 0x88E3,
+ 22556 - 11905: 0x88E4,
+ 22557 - 11905: 0x88E5,
+ 22558 - 11905: 0xDCA6,
+ 22559 - 11905: 0x88E6,
+ 22560 - 11905: 0xDCA9,
+ 22561 - 11905: 0xB1A4,
+ 22562 - 11905: 0x88E7,
+ 22563 - 11905: 0x88E8,
+ 22564 - 11905: 0xB5CC,
+ 22565 - 11905: 0x88E9,
+ 22566 - 11905: 0x88EA,
+ 22567 - 11905: 0x88EB,
+ 22568 - 11905: 0x88EC,
+ 22569 - 11905: 0x88ED,
+ 22570 - 11905: 0xBFB0,
+ 22571 - 11905: 0x88EE,
+ 22572 - 11905: 0x88EF,
+ 22573 - 11905: 0x88F0,
+ 22574 - 11905: 0x88F1,
+ 22575 - 11905: 0x88F2,
+ 22576 - 11905: 0xD1DF,
+ 22577 - 11905: 0x88F3,
+ 22578 - 11905: 0x88F4,
+ 22579 - 11905: 0x88F5,
+ 22580 - 11905: 0x88F6,
+ 22581 - 11905: 0xB6C2,
+ 22582 - 11905: 0x88F7,
+ 22583 - 11905: 0x88F8,
+ 22584 - 11905: 0x88F9,
+ 22585 - 11905: 0x88FA,
+ 22586 - 11905: 0x88FB,
+ 22587 - 11905: 0x88FC,
+ 22588 - 11905: 0x88FD,
+ 22589 - 11905: 0x88FE,
+ 22590 - 11905: 0x8940,
+ 22591 - 11905: 0x8941,
+ 22592 - 11905: 0x8942,
+ 22593 - 11905: 0x8943,
+ 22594 - 11905: 0x8944,
+ 22595 - 11905: 0x8945,
+ 22596 - 11905: 0xDCA8,
+ 22597 - 11905: 0x8946,
+ 22598 - 11905: 0x8947,
+ 22599 - 11905: 0x8948,
+ 22600 - 11905: 0x8949,
+ 22601 - 11905: 0x894A,
+ 22602 - 11905: 0x894B,
+ 22603 - 11905: 0x894C,
+ 22604 - 11905: 0xCBFA,
+ 22605 - 11905: 0xEBF3,
+ 22606 - 11905: 0x894D,
+ 22607 - 11905: 0x894E,
+ 22608 - 11905: 0x894F,
+ 22609 - 11905: 0xCBDC,
+ 22610 - 11905: 0x8950,
+ 22611 - 11905: 0x8951,
+ 22612 - 11905: 0xCBFE,
+ 22613 - 11905: 0x8952,
+ 22614 - 11905: 0x8953,
+ 22615 - 11905: 0x8954,
+ 22616 - 11905: 0xCCC1,
+ 22617 - 11905: 0x8955,
+ 22618 - 11905: 0x8956,
+ 22619 - 11905: 0x8957,
+ 22620 - 11905: 0x8958,
+ 22621 - 11905: 0x8959,
+ 22622 - 11905: 0xC8FB,
+ 22623 - 11905: 0x895A,
+ 22624 - 11905: 0x895B,
+ 22625 - 11905: 0x895C,
+ 22626 - 11905: 0x895D,
+ 22627 - 11905: 0x895E,
+ 22628 - 11905: 0x895F,
+ 22629 - 11905: 0xDCAA,
+ 22630 - 11905: 0x8960,
+ 22631 - 11905: 0x8961,
+ 22632 - 11905: 0x8962,
+ 22633 - 11905: 0x8963,
+ 22634 - 11905: 0x8964,
+ 22635 - 11905: 0xCCEE,
+ 22636 - 11905: 0xDCAB,
+ 22637 - 11905: 0x8965,
+ 22638 - 11905: 0x8966,
+ 22639 - 11905: 0x8967,
+ 22640 - 11905: 0x8968,
+ 22641 - 11905: 0x8969,
+ 22642 - 11905: 0x896A,
+ 22643 - 11905: 0x896B,
+ 22644 - 11905: 0x896C,
+ 22645 - 11905: 0x896D,
+ 22646 - 11905: 0x896E,
+ 22647 - 11905: 0x896F,
+ 22648 - 11905: 0x8970,
+ 22649 - 11905: 0x8971,
+ 22650 - 11905: 0x8972,
+ 22651 - 11905: 0x8973,
+ 22652 - 11905: 0x8974,
+ 22653 - 11905: 0x8975,
+ 22654 - 11905: 0xDBD3,
+ 22655 - 11905: 0x8976,
+ 22656 - 11905: 0xDCAF,
+ 22657 - 11905: 0xDCAC,
+ 22658 - 11905: 0x8977,
+ 22659 - 11905: 0xBEB3,
+ 22660 - 11905: 0x8978,
+ 22661 - 11905: 0xCAFB,
+ 22662 - 11905: 0x8979,
+ 22663 - 11905: 0x897A,
+ 22664 - 11905: 0x897B,
+ 22665 - 11905: 0xDCAD,
+ 22666 - 11905: 0x897C,
+ 22667 - 11905: 0x897D,
+ 22668 - 11905: 0x897E,
+ 22669 - 11905: 0x8980,
+ 22670 - 11905: 0x8981,
+ 22671 - 11905: 0x8982,
+ 22672 - 11905: 0x8983,
+ 22673 - 11905: 0x8984,
+ 22674 - 11905: 0xC9CA,
+ 22675 - 11905: 0xC4B9,
+ 22676 - 11905: 0x8985,
+ 22677 - 11905: 0x8986,
+ 22678 - 11905: 0x8987,
+ 22679 - 11905: 0x8988,
+ 22680 - 11905: 0x8989,
+ 22681 - 11905: 0xC7BD,
+ 22682 - 11905: 0xDCAE,
+ 22683 - 11905: 0x898A,
+ 22684 - 11905: 0x898B,
+ 22685 - 11905: 0x898C,
+ 22686 - 11905: 0xD4F6,
+ 22687 - 11905: 0xD0E6,
+ 22688 - 11905: 0x898D,
+ 22689 - 11905: 0x898E,
+ 22690 - 11905: 0x898F,
+ 22691 - 11905: 0x8990,
+ 22692 - 11905: 0x8991,
+ 22693 - 11905: 0x8992,
+ 22694 - 11905: 0x8993,
+ 22695 - 11905: 0x8994,
+ 22696 - 11905: 0xC4AB,
+ 22697 - 11905: 0xB6D5,
+ 22698 - 11905: 0x8995,
+ 22699 - 11905: 0x8996,
+ 22700 - 11905: 0x8997,
+ 22701 - 11905: 0x8998,
+ 22702 - 11905: 0x8999,
+ 22703 - 11905: 0x899A,
+ 22704 - 11905: 0x899B,
+ 22705 - 11905: 0x899C,
+ 22706 - 11905: 0x899D,
+ 22707 - 11905: 0x899E,
+ 22708 - 11905: 0x899F,
+ 22709 - 11905: 0x89A0,
+ 22710 - 11905: 0x89A1,
+ 22711 - 11905: 0x89A2,
+ 22712 - 11905: 0x89A3,
+ 22713 - 11905: 0x89A4,
+ 22714 - 11905: 0x89A5,
+ 22715 - 11905: 0x89A6,
+ 22716 - 11905: 0xDBD4,
+ 22717 - 11905: 0x89A7,
+ 22718 - 11905: 0x89A8,
+ 22719 - 11905: 0x89A9,
+ 22720 - 11905: 0x89AA,
+ 22721 - 11905: 0xB1DA,
+ 22722 - 11905: 0x89AB,
+ 22723 - 11905: 0x89AC,
+ 22724 - 11905: 0x89AD,
+ 22725 - 11905: 0xDBD5,
+ 22726 - 11905: 0x89AE,
+ 22727 - 11905: 0x89AF,
+ 22728 - 11905: 0x89B0,
+ 22729 - 11905: 0x89B1,
+ 22730 - 11905: 0x89B2,
+ 22731 - 11905: 0x89B3,
+ 22732 - 11905: 0x89B4,
+ 22733 - 11905: 0x89B5,
+ 22734 - 11905: 0x89B6,
+ 22735 - 11905: 0x89B7,
+ 22736 - 11905: 0x89B8,
+ 22737 - 11905: 0xDBD6,
+ 22738 - 11905: 0x89B9,
+ 22739 - 11905: 0x89BA,
+ 22740 - 11905: 0x89BB,
+ 22741 - 11905: 0xBABE,
+ 22742 - 11905: 0x89BC,
+ 22743 - 11905: 0x89BD,
+ 22744 - 11905: 0x89BE,
+ 22745 - 11905: 0x89BF,
+ 22746 - 11905: 0x89C0,
+ 22747 - 11905: 0x89C1,
+ 22748 - 11905: 0x89C2,
+ 22749 - 11905: 0x89C3,
+ 22750 - 11905: 0x89C4,
+ 22751 - 11905: 0x89C5,
+ 22752 - 11905: 0x89C6,
+ 22753 - 11905: 0x89C7,
+ 22754 - 11905: 0x89C8,
+ 22755 - 11905: 0x89C9,
+ 22756 - 11905: 0xC8C0,
+ 22757 - 11905: 0x89CA,
+ 22758 - 11905: 0x89CB,
+ 22759 - 11905: 0x89CC,
+ 22760 - 11905: 0x89CD,
+ 22761 - 11905: 0x89CE,
+ 22762 - 11905: 0x89CF,
+ 22763 - 11905: 0xCABF,
+ 22764 - 11905: 0xC8C9,
+ 22765 - 11905: 0x89D0,
+ 22766 - 11905: 0xD7B3,
+ 22767 - 11905: 0x89D1,
+ 22768 - 11905: 0xC9F9,
+ 22769 - 11905: 0x89D2,
+ 22770 - 11905: 0x89D3,
+ 22771 - 11905: 0xBFC7,
+ 22772 - 11905: 0x89D4,
+ 22773 - 11905: 0x89D5,
+ 22774 - 11905: 0xBAF8,
+ 22775 - 11905: 0x89D6,
+ 22776 - 11905: 0x89D7,
+ 22777 - 11905: 0xD2BC,
+ 22778 - 11905: 0x89D8,
+ 22779 - 11905: 0x89D9,
+ 22780 - 11905: 0x89DA,
+ 22781 - 11905: 0x89DB,
+ 22782 - 11905: 0x89DC,
+ 22783 - 11905: 0x89DD,
+ 22784 - 11905: 0x89DE,
+ 22785 - 11905: 0x89DF,
+ 22786 - 11905: 0xE2BA,
+ 22787 - 11905: 0x89E0,
+ 22788 - 11905: 0xB4A6,
+ 22789 - 11905: 0x89E1,
+ 22790 - 11905: 0x89E2,
+ 22791 - 11905: 0xB1B8,
+ 22792 - 11905: 0x89E3,
+ 22793 - 11905: 0x89E4,
+ 22794 - 11905: 0x89E5,
+ 22795 - 11905: 0x89E6,
+ 22796 - 11905: 0x89E7,
+ 22797 - 11905: 0xB8B4,
+ 22798 - 11905: 0x89E8,
+ 22799 - 11905: 0xCFC4,
+ 22800 - 11905: 0x89E9,
+ 22801 - 11905: 0x89EA,
+ 22802 - 11905: 0x89EB,
+ 22803 - 11905: 0x89EC,
+ 22804 - 11905: 0xD9E7,
+ 22805 - 11905: 0xCFA6,
+ 22806 - 11905: 0xCDE2,
+ 22807 - 11905: 0x89ED,
+ 22808 - 11905: 0x89EE,
+ 22809 - 11905: 0xD9ED,
+ 22810 - 11905: 0xB6E0,
+ 22811 - 11905: 0x89EF,
+ 22812 - 11905: 0xD2B9,
+ 22813 - 11905: 0x89F0,
+ 22814 - 11905: 0x89F1,
+ 22815 - 11905: 0xB9BB,
+ 22816 - 11905: 0x89F2,
+ 22817 - 11905: 0x89F3,
+ 22818 - 11905: 0x89F4,
+ 22819 - 11905: 0x89F5,
+ 22820 - 11905: 0xE2B9,
+ 22821 - 11905: 0xE2B7,
+ 22822 - 11905: 0x89F6,
+ 22823 - 11905: 0xB4F3,
+ 22824 - 11905: 0x89F7,
+ 22825 - 11905: 0xCCEC,
+ 22826 - 11905: 0xCCAB,
+ 22827 - 11905: 0xB7F2,
+ 22828 - 11905: 0x89F8,
+ 22829 - 11905: 0xD8B2,
+ 22830 - 11905: 0xD1EB,
+ 22831 - 11905: 0xBABB,
+ 22832 - 11905: 0x89F9,
+ 22833 - 11905: 0xCAA7,
+ 22834 - 11905: 0x89FA,
+ 22835 - 11905: 0x89FB,
+ 22836 - 11905: 0xCDB7,
+ 22837 - 11905: 0x89FC,
+ 22838 - 11905: 0x89FD,
+ 22839 - 11905: 0xD2C4,
+ 22840 - 11905: 0xBFE4,
+ 22841 - 11905: 0xBCD0,
+ 22842 - 11905: 0xB6E1,
+ 22843 - 11905: 0x89FE,
+ 22844 - 11905: 0xDEC5,
+ 22845 - 11905: 0x8A40,
+ 22846 - 11905: 0x8A41,
+ 22847 - 11905: 0x8A42,
+ 22848 - 11905: 0x8A43,
+ 22849 - 11905: 0xDEC6,
+ 22850 - 11905: 0xDBBC,
+ 22851 - 11905: 0x8A44,
+ 22852 - 11905: 0xD1D9,
+ 22853 - 11905: 0x8A45,
+ 22854 - 11905: 0x8A46,
+ 22855 - 11905: 0xC6E6,
+ 22856 - 11905: 0xC4CE,
+ 22857 - 11905: 0xB7EE,
+ 22858 - 11905: 0x8A47,
+ 22859 - 11905: 0xB7DC,
+ 22860 - 11905: 0x8A48,
+ 22861 - 11905: 0x8A49,
+ 22862 - 11905: 0xBFFC,
+ 22863 - 11905: 0xD7E0,
+ 22864 - 11905: 0x8A4A,
+ 22865 - 11905: 0xC6F5,
+ 22866 - 11905: 0x8A4B,
+ 22867 - 11905: 0x8A4C,
+ 22868 - 11905: 0xB1BC,
+ 22869 - 11905: 0xDEC8,
+ 22870 - 11905: 0xBDB1,
+ 22871 - 11905: 0xCCD7,
+ 22872 - 11905: 0xDECA,
+ 22873 - 11905: 0x8A4D,
+ 22874 - 11905: 0xDEC9,
+ 22875 - 11905: 0x8A4E,
+ 22876 - 11905: 0x8A4F,
+ 22877 - 11905: 0x8A50,
+ 22878 - 11905: 0x8A51,
+ 22879 - 11905: 0x8A52,
+ 22880 - 11905: 0xB5EC,
+ 22881 - 11905: 0x8A53,
+ 22882 - 11905: 0xC9DD,
+ 22883 - 11905: 0x8A54,
+ 22884 - 11905: 0x8A55,
+ 22885 - 11905: 0xB0C2,
+ 22886 - 11905: 0x8A56,
+ 22887 - 11905: 0x8A57,
+ 22888 - 11905: 0x8A58,
+ 22889 - 11905: 0x8A59,
+ 22890 - 11905: 0x8A5A,
+ 22891 - 11905: 0x8A5B,
+ 22892 - 11905: 0x8A5C,
+ 22893 - 11905: 0x8A5D,
+ 22894 - 11905: 0x8A5E,
+ 22895 - 11905: 0x8A5F,
+ 22896 - 11905: 0x8A60,
+ 22897 - 11905: 0x8A61,
+ 22898 - 11905: 0x8A62,
+ 22899 - 11905: 0xC5AE,
+ 22900 - 11905: 0xC5AB,
+ 22901 - 11905: 0x8A63,
+ 22902 - 11905: 0xC4CC,
+ 22903 - 11905: 0x8A64,
+ 22904 - 11905: 0xBCE9,
+ 22905 - 11905: 0xCBFD,
+ 22906 - 11905: 0x8A65,
+ 22907 - 11905: 0x8A66,
+ 22908 - 11905: 0x8A67,
+ 22909 - 11905: 0xBAC3,
+ 22910 - 11905: 0x8A68,
+ 22911 - 11905: 0x8A69,
+ 22912 - 11905: 0x8A6A,
+ 22913 - 11905: 0xE5F9,
+ 22914 - 11905: 0xC8E7,
+ 22915 - 11905: 0xE5FA,
+ 22916 - 11905: 0xCDFD,
+ 22917 - 11905: 0x8A6B,
+ 22918 - 11905: 0xD7B1,
+ 22919 - 11905: 0xB8BE,
+ 22920 - 11905: 0xC2E8,
+ 22921 - 11905: 0x8A6C,
+ 22922 - 11905: 0xC8D1,
+ 22923 - 11905: 0x8A6D,
+ 22924 - 11905: 0x8A6E,
+ 22925 - 11905: 0xE5FB,
+ 22926 - 11905: 0x8A6F,
+ 22927 - 11905: 0x8A70,
+ 22928 - 11905: 0x8A71,
+ 22929 - 11905: 0x8A72,
+ 22930 - 11905: 0xB6CA,
+ 22931 - 11905: 0xBCCB,
+ 22932 - 11905: 0x8A73,
+ 22933 - 11905: 0x8A74,
+ 22934 - 11905: 0xD1FD,
+ 22935 - 11905: 0xE6A1,
+ 22936 - 11905: 0x8A75,
+ 22937 - 11905: 0xC3EE,
+ 22938 - 11905: 0x8A76,
+ 22939 - 11905: 0x8A77,
+ 22940 - 11905: 0x8A78,
+ 22941 - 11905: 0x8A79,
+ 22942 - 11905: 0xE6A4,
+ 22943 - 11905: 0x8A7A,
+ 22944 - 11905: 0x8A7B,
+ 22945 - 11905: 0x8A7C,
+ 22946 - 11905: 0x8A7D,
+ 22947 - 11905: 0xE5FE,
+ 22948 - 11905: 0xE6A5,
+ 22949 - 11905: 0xCDD7,
+ 22950 - 11905: 0x8A7E,
+ 22951 - 11905: 0x8A80,
+ 22952 - 11905: 0xB7C1,
+ 22953 - 11905: 0xE5FC,
+ 22954 - 11905: 0xE5FD,
+ 22955 - 11905: 0xE6A3,
+ 22956 - 11905: 0x8A81,
+ 22957 - 11905: 0x8A82,
+ 22958 - 11905: 0xC4DD,
+ 22959 - 11905: 0xE6A8,
+ 22960 - 11905: 0x8A83,
+ 22961 - 11905: 0x8A84,
+ 22962 - 11905: 0xE6A7,
+ 22963 - 11905: 0x8A85,
+ 22964 - 11905: 0x8A86,
+ 22965 - 11905: 0x8A87,
+ 22966 - 11905: 0x8A88,
+ 22967 - 11905: 0x8A89,
+ 22968 - 11905: 0x8A8A,
+ 22969 - 11905: 0xC3C3,
+ 22970 - 11905: 0x8A8B,
+ 22971 - 11905: 0xC6DE,
+ 22972 - 11905: 0x8A8C,
+ 22973 - 11905: 0x8A8D,
+ 22974 - 11905: 0xE6AA,
+ 22975 - 11905: 0x8A8E,
+ 22976 - 11905: 0x8A8F,
+ 22977 - 11905: 0x8A90,
+ 22978 - 11905: 0x8A91,
+ 22979 - 11905: 0x8A92,
+ 22980 - 11905: 0x8A93,
+ 22981 - 11905: 0x8A94,
+ 22982 - 11905: 0xC4B7,
+ 22983 - 11905: 0x8A95,
+ 22984 - 11905: 0x8A96,
+ 22985 - 11905: 0x8A97,
+ 22986 - 11905: 0xE6A2,
+ 22987 - 11905: 0xCABC,
+ 22988 - 11905: 0x8A98,
+ 22989 - 11905: 0x8A99,
+ 22990 - 11905: 0x8A9A,
+ 22991 - 11905: 0x8A9B,
+ 22992 - 11905: 0xBDE3,
+ 22993 - 11905: 0xB9C3,
+ 22994 - 11905: 0xE6A6,
+ 22995 - 11905: 0xD0D5,
+ 22996 - 11905: 0xCEAF,
+ 22997 - 11905: 0x8A9C,
+ 22998 - 11905: 0x8A9D,
+ 22999 - 11905: 0xE6A9,
+ 23000 - 11905: 0xE6B0,
+ 23001 - 11905: 0x8A9E,
+ 23002 - 11905: 0xD2A6,
+ 23003 - 11905: 0x8A9F,
+ 23004 - 11905: 0xBDAA,
+ 23005 - 11905: 0xE6AD,
+ 23006 - 11905: 0x8AA0,
+ 23007 - 11905: 0x8AA1,
+ 23008 - 11905: 0x8AA2,
+ 23009 - 11905: 0x8AA3,
+ 23010 - 11905: 0x8AA4,
+ 23011 - 11905: 0xE6AF,
+ 23012 - 11905: 0x8AA5,
+ 23013 - 11905: 0xC0D1,
+ 23014 - 11905: 0x8AA6,
+ 23015 - 11905: 0x8AA7,
+ 23016 - 11905: 0xD2CC,
+ 23017 - 11905: 0x8AA8,
+ 23018 - 11905: 0x8AA9,
+ 23019 - 11905: 0x8AAA,
+ 23020 - 11905: 0xBCA7,
+ 23021 - 11905: 0x8AAB,
+ 23022 - 11905: 0x8AAC,
+ 23023 - 11905: 0x8AAD,
+ 23024 - 11905: 0x8AAE,
+ 23025 - 11905: 0x8AAF,
+ 23026 - 11905: 0x8AB0,
+ 23027 - 11905: 0x8AB1,
+ 23028 - 11905: 0x8AB2,
+ 23029 - 11905: 0x8AB3,
+ 23030 - 11905: 0x8AB4,
+ 23031 - 11905: 0x8AB5,
+ 23032 - 11905: 0x8AB6,
+ 23033 - 11905: 0xE6B1,
+ 23034 - 11905: 0x8AB7,
+ 23035 - 11905: 0xD2F6,
+ 23036 - 11905: 0x8AB8,
+ 23037 - 11905: 0x8AB9,
+ 23038 - 11905: 0x8ABA,
+ 23039 - 11905: 0xD7CB,
+ 23040 - 11905: 0x8ABB,
+ 23041 - 11905: 0xCDFE,
+ 23042 - 11905: 0x8ABC,
+ 23043 - 11905: 0xCDDE,
+ 23044 - 11905: 0xC2A6,
+ 23045 - 11905: 0xE6AB,
+ 23046 - 11905: 0xE6AC,
+ 23047 - 11905: 0xBDBF,
+ 23048 - 11905: 0xE6AE,
+ 23049 - 11905: 0xE6B3,
+ 23050 - 11905: 0x8ABD,
+ 23051 - 11905: 0x8ABE,
+ 23052 - 11905: 0xE6B2,
+ 23053 - 11905: 0x8ABF,
+ 23054 - 11905: 0x8AC0,
+ 23055 - 11905: 0x8AC1,
+ 23056 - 11905: 0x8AC2,
+ 23057 - 11905: 0xE6B6,
+ 23058 - 11905: 0x8AC3,
+ 23059 - 11905: 0xE6B8,
+ 23060 - 11905: 0x8AC4,
+ 23061 - 11905: 0x8AC5,
+ 23062 - 11905: 0x8AC6,
+ 23063 - 11905: 0x8AC7,
+ 23064 - 11905: 0xC4EF,
+ 23065 - 11905: 0x8AC8,
+ 23066 - 11905: 0x8AC9,
+ 23067 - 11905: 0x8ACA,
+ 23068 - 11905: 0xC4C8,
+ 23069 - 11905: 0x8ACB,
+ 23070 - 11905: 0x8ACC,
+ 23071 - 11905: 0xBEEA,
+ 23072 - 11905: 0xC9EF,
+ 23073 - 11905: 0x8ACD,
+ 23074 - 11905: 0x8ACE,
+ 23075 - 11905: 0xE6B7,
+ 23076 - 11905: 0x8ACF,
+ 23077 - 11905: 0xB6F0,
+ 23078 - 11905: 0x8AD0,
+ 23079 - 11905: 0x8AD1,
+ 23080 - 11905: 0x8AD2,
+ 23081 - 11905: 0xC3E4,
+ 23082 - 11905: 0x8AD3,
+ 23083 - 11905: 0x8AD4,
+ 23084 - 11905: 0x8AD5,
+ 23085 - 11905: 0x8AD6,
+ 23086 - 11905: 0x8AD7,
+ 23087 - 11905: 0x8AD8,
+ 23088 - 11905: 0x8AD9,
+ 23089 - 11905: 0xD3E9,
+ 23090 - 11905: 0xE6B4,
+ 23091 - 11905: 0x8ADA,
+ 23092 - 11905: 0xE6B5,
+ 23093 - 11905: 0x8ADB,
+ 23094 - 11905: 0xC8A2,
+ 23095 - 11905: 0x8ADC,
+ 23096 - 11905: 0x8ADD,
+ 23097 - 11905: 0x8ADE,
+ 23098 - 11905: 0x8ADF,
+ 23099 - 11905: 0x8AE0,
+ 23100 - 11905: 0xE6BD,
+ 23101 - 11905: 0x8AE1,
+ 23102 - 11905: 0x8AE2,
+ 23103 - 11905: 0x8AE3,
+ 23104 - 11905: 0xE6B9,
+ 23105 - 11905: 0x8AE4,
+ 23106 - 11905: 0x8AE5,
+ 23107 - 11905: 0x8AE6,
+ 23108 - 11905: 0x8AE7,
+ 23109 - 11905: 0x8AE8,
+ 23110 - 11905: 0xC6C5,
+ 23111 - 11905: 0x8AE9,
+ 23112 - 11905: 0x8AEA,
+ 23113 - 11905: 0xCDF1,
+ 23114 - 11905: 0xE6BB,
+ 23115 - 11905: 0x8AEB,
+ 23116 - 11905: 0x8AEC,
+ 23117 - 11905: 0x8AED,
+ 23118 - 11905: 0x8AEE,
+ 23119 - 11905: 0x8AEF,
+ 23120 - 11905: 0x8AF0,
+ 23121 - 11905: 0x8AF1,
+ 23122 - 11905: 0x8AF2,
+ 23123 - 11905: 0x8AF3,
+ 23124 - 11905: 0x8AF4,
+ 23125 - 11905: 0xE6BC,
+ 23126 - 11905: 0x8AF5,
+ 23127 - 11905: 0x8AF6,
+ 23128 - 11905: 0x8AF7,
+ 23129 - 11905: 0x8AF8,
+ 23130 - 11905: 0xBBE9,
+ 23131 - 11905: 0x8AF9,
+ 23132 - 11905: 0x8AFA,
+ 23133 - 11905: 0x8AFB,
+ 23134 - 11905: 0x8AFC,
+ 23135 - 11905: 0x8AFD,
+ 23136 - 11905: 0x8AFE,
+ 23137 - 11905: 0x8B40,
+ 23138 - 11905: 0xE6BE,
+ 23139 - 11905: 0x8B41,
+ 23140 - 11905: 0x8B42,
+ 23141 - 11905: 0x8B43,
+ 23142 - 11905: 0x8B44,
+ 23143 - 11905: 0xE6BA,
+ 23144 - 11905: 0x8B45,
+ 23145 - 11905: 0x8B46,
+ 23146 - 11905: 0xC0B7,
+ 23147 - 11905: 0x8B47,
+ 23148 - 11905: 0x8B48,
+ 23149 - 11905: 0x8B49,
+ 23150 - 11905: 0x8B4A,
+ 23151 - 11905: 0x8B4B,
+ 23152 - 11905: 0x8B4C,
+ 23153 - 11905: 0x8B4D,
+ 23154 - 11905: 0x8B4E,
+ 23155 - 11905: 0x8B4F,
+ 23156 - 11905: 0xD3A4,
+ 23157 - 11905: 0xE6BF,
+ 23158 - 11905: 0xC9F4,
+ 23159 - 11905: 0xE6C3,
+ 23160 - 11905: 0x8B50,
+ 23161 - 11905: 0x8B51,
+ 23162 - 11905: 0xE6C4,
+ 23163 - 11905: 0x8B52,
+ 23164 - 11905: 0x8B53,
+ 23165 - 11905: 0x8B54,
+ 23166 - 11905: 0x8B55,
+ 23167 - 11905: 0xD0F6,
+ 23168 - 11905: 0x8B56,
+ 23169 - 11905: 0x8B57,
+ 23170 - 11905: 0x8B58,
+ 23171 - 11905: 0x8B59,
+ 23172 - 11905: 0x8B5A,
+ 23173 - 11905: 0x8B5B,
+ 23174 - 11905: 0x8B5C,
+ 23175 - 11905: 0x8B5D,
+ 23176 - 11905: 0x8B5E,
+ 23177 - 11905: 0x8B5F,
+ 23178 - 11905: 0x8B60,
+ 23179 - 11905: 0x8B61,
+ 23180 - 11905: 0x8B62,
+ 23181 - 11905: 0x8B63,
+ 23182 - 11905: 0x8B64,
+ 23183 - 11905: 0x8B65,
+ 23184 - 11905: 0x8B66,
+ 23185 - 11905: 0x8B67,
+ 23186 - 11905: 0xC3BD,
+ 23187 - 11905: 0x8B68,
+ 23188 - 11905: 0x8B69,
+ 23189 - 11905: 0x8B6A,
+ 23190 - 11905: 0x8B6B,
+ 23191 - 11905: 0x8B6C,
+ 23192 - 11905: 0x8B6D,
+ 23193 - 11905: 0x8B6E,
+ 23194 - 11905: 0xC3C4,
+ 23195 - 11905: 0xE6C2,
+ 23196 - 11905: 0x8B6F,
+ 23197 - 11905: 0x8B70,
+ 23198 - 11905: 0x8B71,
+ 23199 - 11905: 0x8B72,
+ 23200 - 11905: 0x8B73,
+ 23201 - 11905: 0x8B74,
+ 23202 - 11905: 0x8B75,
+ 23203 - 11905: 0x8B76,
+ 23204 - 11905: 0x8B77,
+ 23205 - 11905: 0x8B78,
+ 23206 - 11905: 0x8B79,
+ 23207 - 11905: 0x8B7A,
+ 23208 - 11905: 0x8B7B,
+ 23209 - 11905: 0x8B7C,
+ 23210 - 11905: 0xE6C1,
+ 23211 - 11905: 0x8B7D,
+ 23212 - 11905: 0x8B7E,
+ 23213 - 11905: 0x8B80,
+ 23214 - 11905: 0x8B81,
+ 23215 - 11905: 0x8B82,
+ 23216 - 11905: 0x8B83,
+ 23217 - 11905: 0x8B84,
+ 23218 - 11905: 0xE6C7,
+ 23219 - 11905: 0xCFB1,
+ 23220 - 11905: 0x8B85,
+ 23221 - 11905: 0xEBF4,
+ 23222 - 11905: 0x8B86,
+ 23223 - 11905: 0x8B87,
+ 23224 - 11905: 0xE6CA,
+ 23225 - 11905: 0x8B88,
+ 23226 - 11905: 0x8B89,
+ 23227 - 11905: 0x8B8A,
+ 23228 - 11905: 0x8B8B,
+ 23229 - 11905: 0x8B8C,
+ 23230 - 11905: 0xE6C5,
+ 23231 - 11905: 0x8B8D,
+ 23232 - 11905: 0x8B8E,
+ 23233 - 11905: 0xBCDE,
+ 23234 - 11905: 0xC9A9,
+ 23235 - 11905: 0x8B8F,
+ 23236 - 11905: 0x8B90,
+ 23237 - 11905: 0x8B91,
+ 23238 - 11905: 0x8B92,
+ 23239 - 11905: 0x8B93,
+ 23240 - 11905: 0x8B94,
+ 23241 - 11905: 0xBCB5,
+ 23242 - 11905: 0x8B95,
+ 23243 - 11905: 0x8B96,
+ 23244 - 11905: 0xCFD3,
+ 23245 - 11905: 0x8B97,
+ 23246 - 11905: 0x8B98,
+ 23247 - 11905: 0x8B99,
+ 23248 - 11905: 0x8B9A,
+ 23249 - 11905: 0x8B9B,
+ 23250 - 11905: 0xE6C8,
+ 23251 - 11905: 0x8B9C,
+ 23252 - 11905: 0xE6C9,
+ 23253 - 11905: 0x8B9D,
+ 23254 - 11905: 0xE6CE,
+ 23255 - 11905: 0x8B9E,
+ 23256 - 11905: 0xE6D0,
+ 23257 - 11905: 0x8B9F,
+ 23258 - 11905: 0x8BA0,
+ 23259 - 11905: 0x8BA1,
+ 23260 - 11905: 0xE6D1,
+ 23261 - 11905: 0x8BA2,
+ 23262 - 11905: 0x8BA3,
+ 23263 - 11905: 0x8BA4,
+ 23264 - 11905: 0xE6CB,
+ 23265 - 11905: 0xB5D5,
+ 23266 - 11905: 0x8BA5,
+ 23267 - 11905: 0xE6CC,
+ 23268 - 11905: 0x8BA6,
+ 23269 - 11905: 0x8BA7,
+ 23270 - 11905: 0xE6CF,
+ 23271 - 11905: 0x8BA8,
+ 23272 - 11905: 0x8BA9,
+ 23273 - 11905: 0xC4DB,
+ 23274 - 11905: 0x8BAA,
+ 23275 - 11905: 0xE6C6,
+ 23276 - 11905: 0x8BAB,
+ 23277 - 11905: 0x8BAC,
+ 23278 - 11905: 0x8BAD,
+ 23279 - 11905: 0x8BAE,
+ 23280 - 11905: 0x8BAF,
+ 23281 - 11905: 0xE6CD,
+ 23282 - 11905: 0x8BB0,
+ 23283 - 11905: 0x8BB1,
+ 23284 - 11905: 0x8BB2,
+ 23285 - 11905: 0x8BB3,
+ 23286 - 11905: 0x8BB4,
+ 23287 - 11905: 0x8BB5,
+ 23288 - 11905: 0x8BB6,
+ 23289 - 11905: 0x8BB7,
+ 23290 - 11905: 0x8BB8,
+ 23291 - 11905: 0x8BB9,
+ 23292 - 11905: 0x8BBA,
+ 23293 - 11905: 0x8BBB,
+ 23294 - 11905: 0x8BBC,
+ 23295 - 11905: 0x8BBD,
+ 23296 - 11905: 0x8BBE,
+ 23297 - 11905: 0x8BBF,
+ 23298 - 11905: 0x8BC0,
+ 23299 - 11905: 0x8BC1,
+ 23300 - 11905: 0x8BC2,
+ 23301 - 11905: 0x8BC3,
+ 23302 - 11905: 0x8BC4,
+ 23303 - 11905: 0x8BC5,
+ 23304 - 11905: 0x8BC6,
+ 23305 - 11905: 0xE6D2,
+ 23306 - 11905: 0x8BC7,
+ 23307 - 11905: 0x8BC8,
+ 23308 - 11905: 0x8BC9,
+ 23309 - 11905: 0x8BCA,
+ 23310 - 11905: 0x8BCB,
+ 23311 - 11905: 0x8BCC,
+ 23312 - 11905: 0x8BCD,
+ 23313 - 11905: 0x8BCE,
+ 23314 - 11905: 0x8BCF,
+ 23315 - 11905: 0x8BD0,
+ 23316 - 11905: 0x8BD1,
+ 23317 - 11905: 0x8BD2,
+ 23318 - 11905: 0xE6D4,
+ 23319 - 11905: 0xE6D3,
+ 23320 - 11905: 0x8BD3,
+ 23321 - 11905: 0x8BD4,
+ 23322 - 11905: 0x8BD5,
+ 23323 - 11905: 0x8BD6,
+ 23324 - 11905: 0x8BD7,
+ 23325 - 11905: 0x8BD8,
+ 23326 - 11905: 0x8BD9,
+ 23327 - 11905: 0x8BDA,
+ 23328 - 11905: 0x8BDB,
+ 23329 - 11905: 0x8BDC,
+ 23330 - 11905: 0x8BDD,
+ 23331 - 11905: 0x8BDE,
+ 23332 - 11905: 0x8BDF,
+ 23333 - 11905: 0x8BE0,
+ 23334 - 11905: 0x8BE1,
+ 23335 - 11905: 0x8BE2,
+ 23336 - 11905: 0x8BE3,
+ 23337 - 11905: 0x8BE4,
+ 23338 - 11905: 0x8BE5,
+ 23339 - 11905: 0x8BE6,
+ 23340 - 11905: 0x8BE7,
+ 23341 - 11905: 0x8BE8,
+ 23342 - 11905: 0x8BE9,
+ 23343 - 11905: 0x8BEA,
+ 23344 - 11905: 0x8BEB,
+ 23345 - 11905: 0x8BEC,
+ 23346 - 11905: 0xE6D5,
+ 23347 - 11905: 0x8BED,
+ 23348 - 11905: 0xD9F8,
+ 23349 - 11905: 0x8BEE,
+ 23350 - 11905: 0x8BEF,
+ 23351 - 11905: 0xE6D6,
+ 23352 - 11905: 0x8BF0,
+ 23353 - 11905: 0x8BF1,
+ 23354 - 11905: 0x8BF2,
+ 23355 - 11905: 0x8BF3,
+ 23356 - 11905: 0x8BF4,
+ 23357 - 11905: 0x8BF5,
+ 23358 - 11905: 0x8BF6,
+ 23359 - 11905: 0x8BF7,
+ 23360 - 11905: 0xE6D7,
+ 23361 - 11905: 0x8BF8,
+ 23362 - 11905: 0x8BF9,
+ 23363 - 11905: 0x8BFA,
+ 23364 - 11905: 0x8BFB,
+ 23365 - 11905: 0x8BFC,
+ 23366 - 11905: 0x8BFD,
+ 23367 - 11905: 0x8BFE,
+ 23368 - 11905: 0x8C40,
+ 23369 - 11905: 0x8C41,
+ 23370 - 11905: 0x8C42,
+ 23371 - 11905: 0x8C43,
+ 23372 - 11905: 0x8C44,
+ 23373 - 11905: 0x8C45,
+ 23374 - 11905: 0x8C46,
+ 23375 - 11905: 0x8C47,
+ 23376 - 11905: 0xD7D3,
+ 23377 - 11905: 0xE6DD,
+ 23378 - 11905: 0x8C48,
+ 23379 - 11905: 0xE6DE,
+ 23380 - 11905: 0xBFD7,
+ 23381 - 11905: 0xD4D0,
+ 23382 - 11905: 0x8C49,
+ 23383 - 11905: 0xD7D6,
+ 23384 - 11905: 0xB4E6,
+ 23385 - 11905: 0xCBEF,
+ 23386 - 11905: 0xE6DA,
+ 23387 - 11905: 0xD8C3,
+ 23388 - 11905: 0xD7CE,
+ 23389 - 11905: 0xD0A2,
+ 23390 - 11905: 0x8C4A,
+ 23391 - 11905: 0xC3CF,
+ 23392 - 11905: 0x8C4B,
+ 23393 - 11905: 0x8C4C,
+ 23394 - 11905: 0xE6DF,
+ 23395 - 11905: 0xBCBE,
+ 23396 - 11905: 0xB9C2,
+ 23397 - 11905: 0xE6DB,
+ 23398 - 11905: 0xD1A7,
+ 23399 - 11905: 0x8C4D,
+ 23400 - 11905: 0x8C4E,
+ 23401 - 11905: 0xBAA2,
+ 23402 - 11905: 0xC2CF,
+ 23403 - 11905: 0x8C4F,
+ 23404 - 11905: 0xD8AB,
+ 23405 - 11905: 0x8C50,
+ 23406 - 11905: 0x8C51,
+ 23407 - 11905: 0x8C52,
+ 23408 - 11905: 0xCAEB,
+ 23409 - 11905: 0xE5EE,
+ 23410 - 11905: 0x8C53,
+ 23411 - 11905: 0xE6DC,
+ 23412 - 11905: 0x8C54,
+ 23413 - 11905: 0xB7F5,
+ 23414 - 11905: 0x8C55,
+ 23415 - 11905: 0x8C56,
+ 23416 - 11905: 0x8C57,
+ 23417 - 11905: 0x8C58,
+ 23418 - 11905: 0xC8E6,
+ 23419 - 11905: 0x8C59,
+ 23420 - 11905: 0x8C5A,
+ 23421 - 11905: 0xC4F5,
+ 23422 - 11905: 0x8C5B,
+ 23423 - 11905: 0x8C5C,
+ 23424 - 11905: 0xE5B2,
+ 23425 - 11905: 0xC4FE,
+ 23426 - 11905: 0x8C5D,
+ 23427 - 11905: 0xCBFC,
+ 23428 - 11905: 0xE5B3,
+ 23429 - 11905: 0xD5AC,
+ 23430 - 11905: 0x8C5E,
+ 23431 - 11905: 0xD3EE,
+ 23432 - 11905: 0xCAD8,
+ 23433 - 11905: 0xB0B2,
+ 23434 - 11905: 0x8C5F,
+ 23435 - 11905: 0xCBCE,
+ 23436 - 11905: 0xCDEA,
+ 23437 - 11905: 0x8C60,
+ 23438 - 11905: 0x8C61,
+ 23439 - 11905: 0xBAEA,
+ 23440 - 11905: 0x8C62,
+ 23441 - 11905: 0x8C63,
+ 23442 - 11905: 0x8C64,
+ 23443 - 11905: 0xE5B5,
+ 23444 - 11905: 0x8C65,
+ 23445 - 11905: 0xE5B4,
+ 23446 - 11905: 0x8C66,
+ 23447 - 11905: 0xD7DA,
+ 23448 - 11905: 0xB9D9,
+ 23449 - 11905: 0xD6E6,
+ 23450 - 11905: 0xB6A8,
+ 23451 - 11905: 0xCDF0,
+ 23452 - 11905: 0xD2CB,
+ 23453 - 11905: 0xB1A6,
+ 23454 - 11905: 0xCAB5,
+ 23455 - 11905: 0x8C67,
+ 23456 - 11905: 0xB3E8,
+ 23457 - 11905: 0xC9F3,
+ 23458 - 11905: 0xBFCD,
+ 23459 - 11905: 0xD0FB,
+ 23460 - 11905: 0xCAD2,
+ 23461 - 11905: 0xE5B6,
+ 23462 - 11905: 0xBBC2,
+ 23463 - 11905: 0x8C68,
+ 23464 - 11905: 0x8C69,
+ 23465 - 11905: 0x8C6A,
+ 23466 - 11905: 0xCFDC,
+ 23467 - 11905: 0xB9AC,
+ 23468 - 11905: 0x8C6B,
+ 23469 - 11905: 0x8C6C,
+ 23470 - 11905: 0x8C6D,
+ 23471 - 11905: 0x8C6E,
+ 23472 - 11905: 0xD4D7,
+ 23473 - 11905: 0x8C6F,
+ 23474 - 11905: 0x8C70,
+ 23475 - 11905: 0xBAA6,
+ 23476 - 11905: 0xD1E7,
+ 23477 - 11905: 0xCFFC,
+ 23478 - 11905: 0xBCD2,
+ 23479 - 11905: 0x8C71,
+ 23480 - 11905: 0xE5B7,
+ 23481 - 11905: 0xC8DD,
+ 23482 - 11905: 0x8C72,
+ 23483 - 11905: 0x8C73,
+ 23484 - 11905: 0x8C74,
+ 23485 - 11905: 0xBFED,
+ 23486 - 11905: 0xB1F6,
+ 23487 - 11905: 0xCBDE,
+ 23488 - 11905: 0x8C75,
+ 23489 - 11905: 0x8C76,
+ 23490 - 11905: 0xBCC5,
+ 23491 - 11905: 0x8C77,
+ 23492 - 11905: 0xBCC4,
+ 23493 - 11905: 0xD2FA,
+ 23494 - 11905: 0xC3DC,
+ 23495 - 11905: 0xBFDC,
+ 23496 - 11905: 0x8C78,
+ 23497 - 11905: 0x8C79,
+ 23498 - 11905: 0x8C7A,
+ 23499 - 11905: 0x8C7B,
+ 23500 - 11905: 0xB8BB,
+ 23501 - 11905: 0x8C7C,
+ 23502 - 11905: 0x8C7D,
+ 23503 - 11905: 0x8C7E,
+ 23504 - 11905: 0xC3C2,
+ 23505 - 11905: 0x8C80,
+ 23506 - 11905: 0xBAAE,
+ 23507 - 11905: 0xD4A2,
+ 23508 - 11905: 0x8C81,
+ 23509 - 11905: 0x8C82,
+ 23510 - 11905: 0x8C83,
+ 23511 - 11905: 0x8C84,
+ 23512 - 11905: 0x8C85,
+ 23513 - 11905: 0x8C86,
+ 23514 - 11905: 0x8C87,
+ 23515 - 11905: 0x8C88,
+ 23516 - 11905: 0x8C89,
+ 23517 - 11905: 0xC7DE,
+ 23518 - 11905: 0xC4AF,
+ 23519 - 11905: 0xB2EC,
+ 23520 - 11905: 0x8C8A,
+ 23521 - 11905: 0xB9D1,
+ 23522 - 11905: 0x8C8B,
+ 23523 - 11905: 0x8C8C,
+ 23524 - 11905: 0xE5BB,
+ 23525 - 11905: 0xC1C8,
+ 23526 - 11905: 0x8C8D,
+ 23527 - 11905: 0x8C8E,
+ 23528 - 11905: 0xD5AF,
+ 23529 - 11905: 0x8C8F,
+ 23530 - 11905: 0x8C90,
+ 23531 - 11905: 0x8C91,
+ 23532 - 11905: 0x8C92,
+ 23533 - 11905: 0x8C93,
+ 23534 - 11905: 0xE5BC,
+ 23535 - 11905: 0x8C94,
+ 23536 - 11905: 0xE5BE,
+ 23537 - 11905: 0x8C95,
+ 23538 - 11905: 0x8C96,
+ 23539 - 11905: 0x8C97,
+ 23540 - 11905: 0x8C98,
+ 23541 - 11905: 0x8C99,
+ 23542 - 11905: 0x8C9A,
+ 23543 - 11905: 0x8C9B,
+ 23544 - 11905: 0xB4E7,
+ 23545 - 11905: 0xB6D4,
+ 23546 - 11905: 0xCBC2,
+ 23547 - 11905: 0xD1B0,
+ 23548 - 11905: 0xB5BC,
+ 23549 - 11905: 0x8C9C,
+ 23550 - 11905: 0x8C9D,
+ 23551 - 11905: 0xCAD9,
+ 23552 - 11905: 0x8C9E,
+ 23553 - 11905: 0xB7E2,
+ 23554 - 11905: 0x8C9F,
+ 23555 - 11905: 0x8CA0,
+ 23556 - 11905: 0xC9E4,
+ 23557 - 11905: 0x8CA1,
+ 23558 - 11905: 0xBDAB,
+ 23559 - 11905: 0x8CA2,
+ 23560 - 11905: 0x8CA3,
+ 23561 - 11905: 0xCEBE,
+ 23562 - 11905: 0xD7F0,
+ 23563 - 11905: 0x8CA4,
+ 23564 - 11905: 0x8CA5,
+ 23565 - 11905: 0x8CA6,
+ 23566 - 11905: 0x8CA7,
+ 23567 - 11905: 0xD0A1,
+ 23568 - 11905: 0x8CA8,
+ 23569 - 11905: 0xC9D9,
+ 23570 - 11905: 0x8CA9,
+ 23571 - 11905: 0x8CAA,
+ 23572 - 11905: 0xB6FB,
+ 23573 - 11905: 0xE6D8,
+ 23574 - 11905: 0xBCE2,
+ 23575 - 11905: 0x8CAB,
+ 23576 - 11905: 0xB3BE,
+ 23577 - 11905: 0x8CAC,
+ 23578 - 11905: 0xC9D0,
+ 23579 - 11905: 0x8CAD,
+ 23580 - 11905: 0xE6D9,
+ 23581 - 11905: 0xB3A2,
+ 23582 - 11905: 0x8CAE,
+ 23583 - 11905: 0x8CAF,
+ 23584 - 11905: 0x8CB0,
+ 23585 - 11905: 0x8CB1,
+ 23586 - 11905: 0xDECC,
+ 23587 - 11905: 0x8CB2,
+ 23588 - 11905: 0xD3C8,
+ 23589 - 11905: 0xDECD,
+ 23590 - 11905: 0x8CB3,
+ 23591 - 11905: 0xD2A2,
+ 23592 - 11905: 0x8CB4,
+ 23593 - 11905: 0x8CB5,
+ 23594 - 11905: 0x8CB6,
+ 23595 - 11905: 0x8CB7,
+ 23596 - 11905: 0xDECE,
+ 23597 - 11905: 0x8CB8,
+ 23598 - 11905: 0x8CB9,
+ 23599 - 11905: 0x8CBA,
+ 23600 - 11905: 0x8CBB,
+ 23601 - 11905: 0xBECD,
+ 23602 - 11905: 0x8CBC,
+ 23603 - 11905: 0x8CBD,
+ 23604 - 11905: 0xDECF,
+ 23605 - 11905: 0x8CBE,
+ 23606 - 11905: 0x8CBF,
+ 23607 - 11905: 0x8CC0,
+ 23608 - 11905: 0xCAAC,
+ 23609 - 11905: 0xD2FC,
+ 23610 - 11905: 0xB3DF,
+ 23611 - 11905: 0xE5EA,
+ 23612 - 11905: 0xC4E1,
+ 23613 - 11905: 0xBEA1,
+ 23614 - 11905: 0xCEB2,
+ 23615 - 11905: 0xC4F2,
+ 23616 - 11905: 0xBED6,
+ 23617 - 11905: 0xC6A8,
+ 23618 - 11905: 0xB2E3,
+ 23619 - 11905: 0x8CC1,
+ 23620 - 11905: 0x8CC2,
+ 23621 - 11905: 0xBED3,
+ 23622 - 11905: 0x8CC3,
+ 23623 - 11905: 0x8CC4,
+ 23624 - 11905: 0xC7FC,
+ 23625 - 11905: 0xCCEB,
+ 23626 - 11905: 0xBDEC,
+ 23627 - 11905: 0xCEDD,
+ 23628 - 11905: 0x8CC5,
+ 23629 - 11905: 0x8CC6,
+ 23630 - 11905: 0xCABA,
+ 23631 - 11905: 0xC6C1,
+ 23632 - 11905: 0xE5EC,
+ 23633 - 11905: 0xD0BC,
+ 23634 - 11905: 0x8CC7,
+ 23635 - 11905: 0x8CC8,
+ 23636 - 11905: 0x8CC9,
+ 23637 - 11905: 0xD5B9,
+ 23638 - 11905: 0x8CCA,
+ 23639 - 11905: 0x8CCB,
+ 23640 - 11905: 0x8CCC,
+ 23641 - 11905: 0xE5ED,
+ 23642 - 11905: 0x8CCD,
+ 23643 - 11905: 0x8CCE,
+ 23644 - 11905: 0x8CCF,
+ 23645 - 11905: 0x8CD0,
+ 23646 - 11905: 0xCAF4,
+ 23647 - 11905: 0x8CD1,
+ 23648 - 11905: 0xCDC0,
+ 23649 - 11905: 0xC2C5,
+ 23650 - 11905: 0x8CD2,
+ 23651 - 11905: 0xE5EF,
+ 23652 - 11905: 0x8CD3,
+ 23653 - 11905: 0xC2C4,
+ 23654 - 11905: 0xE5F0,
+ 23655 - 11905: 0x8CD4,
+ 23656 - 11905: 0x8CD5,
+ 23657 - 11905: 0x8CD6,
+ 23658 - 11905: 0x8CD7,
+ 23659 - 11905: 0x8CD8,
+ 23660 - 11905: 0x8CD9,
+ 23661 - 11905: 0x8CDA,
+ 23662 - 11905: 0xE5F8,
+ 23663 - 11905: 0xCDCD,
+ 23664 - 11905: 0x8CDB,
+ 23665 - 11905: 0xC9BD,
+ 23666 - 11905: 0x8CDC,
+ 23667 - 11905: 0x8CDD,
+ 23668 - 11905: 0x8CDE,
+ 23669 - 11905: 0x8CDF,
+ 23670 - 11905: 0x8CE0,
+ 23671 - 11905: 0x8CE1,
+ 23672 - 11905: 0x8CE2,
+ 23673 - 11905: 0xD2D9,
+ 23674 - 11905: 0xE1A8,
+ 23675 - 11905: 0x8CE3,
+ 23676 - 11905: 0x8CE4,
+ 23677 - 11905: 0x8CE5,
+ 23678 - 11905: 0x8CE6,
+ 23679 - 11905: 0xD3EC,
+ 23680 - 11905: 0x8CE7,
+ 23681 - 11905: 0xCBEA,
+ 23682 - 11905: 0xC6F1,
+ 23683 - 11905: 0x8CE8,
+ 23684 - 11905: 0x8CE9,
+ 23685 - 11905: 0x8CEA,
+ 23686 - 11905: 0x8CEB,
+ 23687 - 11905: 0x8CEC,
+ 23688 - 11905: 0xE1AC,
+ 23689 - 11905: 0x8CED,
+ 23690 - 11905: 0x8CEE,
+ 23691 - 11905: 0x8CEF,
+ 23692 - 11905: 0xE1A7,
+ 23693 - 11905: 0xE1A9,
+ 23694 - 11905: 0x8CF0,
+ 23695 - 11905: 0x8CF1,
+ 23696 - 11905: 0xE1AA,
+ 23697 - 11905: 0xE1AF,
+ 23698 - 11905: 0x8CF2,
+ 23699 - 11905: 0x8CF3,
+ 23700 - 11905: 0xB2ED,
+ 23701 - 11905: 0x8CF4,
+ 23702 - 11905: 0xE1AB,
+ 23703 - 11905: 0xB8DA,
+ 23704 - 11905: 0xE1AD,
+ 23705 - 11905: 0xE1AE,
+ 23706 - 11905: 0xE1B0,
+ 23707 - 11905: 0xB5BA,
+ 23708 - 11905: 0xE1B1,
+ 23709 - 11905: 0x8CF5,
+ 23710 - 11905: 0x8CF6,
+ 23711 - 11905: 0x8CF7,
+ 23712 - 11905: 0x8CF8,
+ 23713 - 11905: 0x8CF9,
+ 23714 - 11905: 0xE1B3,
+ 23715 - 11905: 0xE1B8,
+ 23716 - 11905: 0x8CFA,
+ 23717 - 11905: 0x8CFB,
+ 23718 - 11905: 0x8CFC,
+ 23719 - 11905: 0x8CFD,
+ 23720 - 11905: 0x8CFE,
+ 23721 - 11905: 0xD1D2,
+ 23722 - 11905: 0x8D40,
+ 23723 - 11905: 0xE1B6,
+ 23724 - 11905: 0xE1B5,
+ 23725 - 11905: 0xC1EB,
+ 23726 - 11905: 0x8D41,
+ 23727 - 11905: 0x8D42,
+ 23728 - 11905: 0x8D43,
+ 23729 - 11905: 0xE1B7,
+ 23730 - 11905: 0x8D44,
+ 23731 - 11905: 0xD4C0,
+ 23732 - 11905: 0x8D45,
+ 23733 - 11905: 0xE1B2,
+ 23734 - 11905: 0x8D46,
+ 23735 - 11905: 0xE1BA,
+ 23736 - 11905: 0xB0B6,
+ 23737 - 11905: 0x8D47,
+ 23738 - 11905: 0x8D48,
+ 23739 - 11905: 0x8D49,
+ 23740 - 11905: 0x8D4A,
+ 23741 - 11905: 0xE1B4,
+ 23742 - 11905: 0x8D4B,
+ 23743 - 11905: 0xBFF9,
+ 23744 - 11905: 0x8D4C,
+ 23745 - 11905: 0xE1B9,
+ 23746 - 11905: 0x8D4D,
+ 23747 - 11905: 0x8D4E,
+ 23748 - 11905: 0xE1BB,
+ 23749 - 11905: 0x8D4F,
+ 23750 - 11905: 0x8D50,
+ 23751 - 11905: 0x8D51,
+ 23752 - 11905: 0x8D52,
+ 23753 - 11905: 0x8D53,
+ 23754 - 11905: 0x8D54,
+ 23755 - 11905: 0xE1BE,
+ 23756 - 11905: 0x8D55,
+ 23757 - 11905: 0x8D56,
+ 23758 - 11905: 0x8D57,
+ 23759 - 11905: 0x8D58,
+ 23760 - 11905: 0x8D59,
+ 23761 - 11905: 0x8D5A,
+ 23762 - 11905: 0xE1BC,
+ 23763 - 11905: 0x8D5B,
+ 23764 - 11905: 0x8D5C,
+ 23765 - 11905: 0x8D5D,
+ 23766 - 11905: 0x8D5E,
+ 23767 - 11905: 0x8D5F,
+ 23768 - 11905: 0x8D60,
+ 23769 - 11905: 0xD6C5,
+ 23770 - 11905: 0x8D61,
+ 23771 - 11905: 0x8D62,
+ 23772 - 11905: 0x8D63,
+ 23773 - 11905: 0x8D64,
+ 23774 - 11905: 0x8D65,
+ 23775 - 11905: 0x8D66,
+ 23776 - 11905: 0x8D67,
+ 23777 - 11905: 0xCFBF,
+ 23778 - 11905: 0x8D68,
+ 23779 - 11905: 0x8D69,
+ 23780 - 11905: 0xE1BD,
+ 23781 - 11905: 0xE1BF,
+ 23782 - 11905: 0xC2CD,
+ 23783 - 11905: 0x8D6A,
+ 23784 - 11905: 0xB6EB,
+ 23785 - 11905: 0x8D6B,
+ 23786 - 11905: 0xD3F8,
+ 23787 - 11905: 0x8D6C,
+ 23788 - 11905: 0x8D6D,
+ 23789 - 11905: 0xC7CD,
+ 23790 - 11905: 0x8D6E,
+ 23791 - 11905: 0x8D6F,
+ 23792 - 11905: 0xB7E5,
+ 23793 - 11905: 0x8D70,
+ 23794 - 11905: 0x8D71,
+ 23795 - 11905: 0x8D72,
+ 23796 - 11905: 0x8D73,
+ 23797 - 11905: 0x8D74,
+ 23798 - 11905: 0x8D75,
+ 23799 - 11905: 0x8D76,
+ 23800 - 11905: 0x8D77,
+ 23801 - 11905: 0x8D78,
+ 23802 - 11905: 0x8D79,
+ 23803 - 11905: 0xBEFE,
+ 23804 - 11905: 0x8D7A,
+ 23805 - 11905: 0x8D7B,
+ 23806 - 11905: 0x8D7C,
+ 23807 - 11905: 0x8D7D,
+ 23808 - 11905: 0x8D7E,
+ 23809 - 11905: 0x8D80,
+ 23810 - 11905: 0xE1C0,
+ 23811 - 11905: 0xE1C1,
+ 23812 - 11905: 0x8D81,
+ 23813 - 11905: 0x8D82,
+ 23814 - 11905: 0xE1C7,
+ 23815 - 11905: 0xB3E7,
+ 23816 - 11905: 0x8D83,
+ 23817 - 11905: 0x8D84,
+ 23818 - 11905: 0x8D85,
+ 23819 - 11905: 0x8D86,
+ 23820 - 11905: 0x8D87,
+ 23821 - 11905: 0x8D88,
+ 23822 - 11905: 0xC6E9,
+ 23823 - 11905: 0x8D89,
+ 23824 - 11905: 0x8D8A,
+ 23825 - 11905: 0x8D8B,
+ 23826 - 11905: 0x8D8C,
+ 23827 - 11905: 0x8D8D,
+ 23828 - 11905: 0xB4DE,
+ 23829 - 11905: 0x8D8E,
+ 23830 - 11905: 0xD1C2,
+ 23831 - 11905: 0x8D8F,
+ 23832 - 11905: 0x8D90,
+ 23833 - 11905: 0x8D91,
+ 23834 - 11905: 0x8D92,
+ 23835 - 11905: 0xE1C8,
+ 23836 - 11905: 0x8D93,
+ 23837 - 11905: 0x8D94,
+ 23838 - 11905: 0xE1C6,
+ 23839 - 11905: 0x8D95,
+ 23840 - 11905: 0x8D96,
+ 23841 - 11905: 0x8D97,
+ 23842 - 11905: 0x8D98,
+ 23843 - 11905: 0x8D99,
+ 23844 - 11905: 0xE1C5,
+ 23845 - 11905: 0x8D9A,
+ 23846 - 11905: 0xE1C3,
+ 23847 - 11905: 0xE1C2,
+ 23848 - 11905: 0x8D9B,
+ 23849 - 11905: 0xB1C0,
+ 23850 - 11905: 0x8D9C,
+ 23851 - 11905: 0x8D9D,
+ 23852 - 11905: 0x8D9E,
+ 23853 - 11905: 0xD5B8,
+ 23854 - 11905: 0xE1C4,
+ 23855 - 11905: 0x8D9F,
+ 23856 - 11905: 0x8DA0,
+ 23857 - 11905: 0x8DA1,
+ 23858 - 11905: 0x8DA2,
+ 23859 - 11905: 0x8DA3,
+ 23860 - 11905: 0xE1CB,
+ 23861 - 11905: 0x8DA4,
+ 23862 - 11905: 0x8DA5,
+ 23863 - 11905: 0x8DA6,
+ 23864 - 11905: 0x8DA7,
+ 23865 - 11905: 0x8DA8,
+ 23866 - 11905: 0x8DA9,
+ 23867 - 11905: 0x8DAA,
+ 23868 - 11905: 0x8DAB,
+ 23869 - 11905: 0xE1CC,
+ 23870 - 11905: 0xE1CA,
+ 23871 - 11905: 0x8DAC,
+ 23872 - 11905: 0x8DAD,
+ 23873 - 11905: 0x8DAE,
+ 23874 - 11905: 0x8DAF,
+ 23875 - 11905: 0x8DB0,
+ 23876 - 11905: 0x8DB1,
+ 23877 - 11905: 0x8DB2,
+ 23878 - 11905: 0x8DB3,
+ 23879 - 11905: 0xEFFA,
+ 23880 - 11905: 0x8DB4,
+ 23881 - 11905: 0x8DB5,
+ 23882 - 11905: 0xE1D3,
+ 23883 - 11905: 0xE1D2,
+ 23884 - 11905: 0xC7B6,
+ 23885 - 11905: 0x8DB6,
+ 23886 - 11905: 0x8DB7,
+ 23887 - 11905: 0x8DB8,
+ 23888 - 11905: 0x8DB9,
+ 23889 - 11905: 0x8DBA,
+ 23890 - 11905: 0x8DBB,
+ 23891 - 11905: 0x8DBC,
+ 23892 - 11905: 0x8DBD,
+ 23893 - 11905: 0x8DBE,
+ 23894 - 11905: 0x8DBF,
+ 23895 - 11905: 0x8DC0,
+ 23896 - 11905: 0xE1C9,
+ 23897 - 11905: 0x8DC1,
+ 23898 - 11905: 0x8DC2,
+ 23899 - 11905: 0xE1CE,
+ 23900 - 11905: 0x8DC3,
+ 23901 - 11905: 0xE1D0,
+ 23902 - 11905: 0x8DC4,
+ 23903 - 11905: 0x8DC5,
+ 23904 - 11905: 0x8DC6,
+ 23905 - 11905: 0x8DC7,
+ 23906 - 11905: 0x8DC8,
+ 23907 - 11905: 0x8DC9,
+ 23908 - 11905: 0x8DCA,
+ 23909 - 11905: 0x8DCB,
+ 23910 - 11905: 0x8DCC,
+ 23911 - 11905: 0x8DCD,
+ 23912 - 11905: 0x8DCE,
+ 23913 - 11905: 0xE1D4,
+ 23914 - 11905: 0x8DCF,
+ 23915 - 11905: 0xE1D1,
+ 23916 - 11905: 0xE1CD,
+ 23917 - 11905: 0x8DD0,
+ 23918 - 11905: 0x8DD1,
+ 23919 - 11905: 0xE1CF,
+ 23920 - 11905: 0x8DD2,
+ 23921 - 11905: 0x8DD3,
+ 23922 - 11905: 0x8DD4,
+ 23923 - 11905: 0x8DD5,
+ 23924 - 11905: 0xE1D5,
+ 23925 - 11905: 0x8DD6,
+ 23926 - 11905: 0x8DD7,
+ 23927 - 11905: 0x8DD8,
+ 23928 - 11905: 0x8DD9,
+ 23929 - 11905: 0x8DDA,
+ 23930 - 11905: 0x8DDB,
+ 23931 - 11905: 0x8DDC,
+ 23932 - 11905: 0x8DDD,
+ 23933 - 11905: 0x8DDE,
+ 23934 - 11905: 0x8DDF,
+ 23935 - 11905: 0x8DE0,
+ 23936 - 11905: 0x8DE1,
+ 23937 - 11905: 0x8DE2,
+ 23938 - 11905: 0xE1D6,
+ 23939 - 11905: 0x8DE3,
+ 23940 - 11905: 0x8DE4,
+ 23941 - 11905: 0x8DE5,
+ 23942 - 11905: 0x8DE6,
+ 23943 - 11905: 0x8DE7,
+ 23944 - 11905: 0x8DE8,
+ 23945 - 11905: 0x8DE9,
+ 23946 - 11905: 0x8DEA,
+ 23947 - 11905: 0x8DEB,
+ 23948 - 11905: 0x8DEC,
+ 23949 - 11905: 0x8DED,
+ 23950 - 11905: 0x8DEE,
+ 23951 - 11905: 0x8DEF,
+ 23952 - 11905: 0x8DF0,
+ 23953 - 11905: 0x8DF1,
+ 23954 - 11905: 0x8DF2,
+ 23955 - 11905: 0x8DF3,
+ 23956 - 11905: 0x8DF4,
+ 23957 - 11905: 0x8DF5,
+ 23958 - 11905: 0x8DF6,
+ 23959 - 11905: 0x8DF7,
+ 23960 - 11905: 0x8DF8,
+ 23961 - 11905: 0xE1D7,
+ 23962 - 11905: 0x8DF9,
+ 23963 - 11905: 0x8DFA,
+ 23964 - 11905: 0x8DFB,
+ 23965 - 11905: 0xE1D8,
+ 23966 - 11905: 0x8DFC,
+ 23967 - 11905: 0x8DFD,
+ 23968 - 11905: 0x8DFE,
+ 23969 - 11905: 0x8E40,
+ 23970 - 11905: 0x8E41,
+ 23971 - 11905: 0x8E42,
+ 23972 - 11905: 0x8E43,
+ 23973 - 11905: 0x8E44,
+ 23974 - 11905: 0x8E45,
+ 23975 - 11905: 0x8E46,
+ 23976 - 11905: 0x8E47,
+ 23977 - 11905: 0x8E48,
+ 23978 - 11905: 0x8E49,
+ 23979 - 11905: 0x8E4A,
+ 23980 - 11905: 0x8E4B,
+ 23981 - 11905: 0x8E4C,
+ 23982 - 11905: 0x8E4D,
+ 23983 - 11905: 0x8E4E,
+ 23984 - 11905: 0x8E4F,
+ 23985 - 11905: 0x8E50,
+ 23986 - 11905: 0x8E51,
+ 23987 - 11905: 0x8E52,
+ 23988 - 11905: 0x8E53,
+ 23989 - 11905: 0x8E54,
+ 23990 - 11905: 0x8E55,
+ 23991 - 11905: 0xE1DA,
+ 23992 - 11905: 0x8E56,
+ 23993 - 11905: 0x8E57,
+ 23994 - 11905: 0x8E58,
+ 23995 - 11905: 0x8E59,
+ 23996 - 11905: 0x8E5A,
+ 23997 - 11905: 0x8E5B,
+ 23998 - 11905: 0x8E5C,
+ 23999 - 11905: 0x8E5D,
+ 24000 - 11905: 0x8E5E,
+ 24001 - 11905: 0x8E5F,
+ 24002 - 11905: 0x8E60,
+ 24003 - 11905: 0x8E61,
+ 24004 - 11905: 0x8E62,
+ 24005 - 11905: 0xE1DB,
+ 24006 - 11905: 0x8E63,
+ 24007 - 11905: 0x8E64,
+ 24008 - 11905: 0x8E65,
+ 24009 - 11905: 0x8E66,
+ 24010 - 11905: 0x8E67,
+ 24011 - 11905: 0x8E68,
+ 24012 - 11905: 0x8E69,
+ 24013 - 11905: 0xCEA1,
+ 24014 - 11905: 0x8E6A,
+ 24015 - 11905: 0x8E6B,
+ 24016 - 11905: 0x8E6C,
+ 24017 - 11905: 0x8E6D,
+ 24018 - 11905: 0x8E6E,
+ 24019 - 11905: 0x8E6F,
+ 24020 - 11905: 0x8E70,
+ 24021 - 11905: 0x8E71,
+ 24022 - 11905: 0x8E72,
+ 24023 - 11905: 0x8E73,
+ 24024 - 11905: 0x8E74,
+ 24025 - 11905: 0x8E75,
+ 24026 - 11905: 0x8E76,
+ 24027 - 11905: 0xE7DD,
+ 24028 - 11905: 0x8E77,
+ 24029 - 11905: 0xB4A8,
+ 24030 - 11905: 0xD6DD,
+ 24031 - 11905: 0x8E78,
+ 24032 - 11905: 0x8E79,
+ 24033 - 11905: 0xD1B2,
+ 24034 - 11905: 0xB3B2,
+ 24035 - 11905: 0x8E7A,
+ 24036 - 11905: 0x8E7B,
+ 24037 - 11905: 0xB9A4,
+ 24038 - 11905: 0xD7F3,
+ 24039 - 11905: 0xC7C9,
+ 24040 - 11905: 0xBEDE,
+ 24041 - 11905: 0xB9AE,
+ 24042 - 11905: 0x8E7C,
+ 24043 - 11905: 0xCED7,
+ 24044 - 11905: 0x8E7D,
+ 24045 - 11905: 0x8E7E,
+ 24046 - 11905: 0xB2EE,
+ 24047 - 11905: 0xDBCF,
+ 24048 - 11905: 0x8E80,
+ 24049 - 11905: 0xBCBA,
+ 24050 - 11905: 0xD2D1,
+ 24051 - 11905: 0xCBC8,
+ 24052 - 11905: 0xB0CD,
+ 24053 - 11905: 0x8E81,
+ 24054 - 11905: 0x8E82,
+ 24055 - 11905: 0xCFEF,
+ 24056 - 11905: 0x8E83,
+ 24057 - 11905: 0x8E84,
+ 24058 - 11905: 0x8E85,
+ 24059 - 11905: 0x8E86,
+ 24060 - 11905: 0x8E87,
+ 24061 - 11905: 0xD9E3,
+ 24062 - 11905: 0xBDED,
+ 24063 - 11905: 0x8E88,
+ 24064 - 11905: 0x8E89,
+ 24065 - 11905: 0xB1D2,
+ 24066 - 11905: 0xCAD0,
+ 24067 - 11905: 0xB2BC,
+ 24068 - 11905: 0x8E8A,
+ 24069 - 11905: 0xCBA7,
+ 24070 - 11905: 0xB7AB,
+ 24071 - 11905: 0x8E8B,
+ 24072 - 11905: 0xCAA6,
+ 24073 - 11905: 0x8E8C,
+ 24074 - 11905: 0x8E8D,
+ 24075 - 11905: 0x8E8E,
+ 24076 - 11905: 0xCFA3,
+ 24077 - 11905: 0x8E8F,
+ 24078 - 11905: 0x8E90,
+ 24079 - 11905: 0xE0F8,
+ 24080 - 11905: 0xD5CA,
+ 24081 - 11905: 0xE0FB,
+ 24082 - 11905: 0x8E91,
+ 24083 - 11905: 0x8E92,
+ 24084 - 11905: 0xE0FA,
+ 24085 - 11905: 0xC5C1,
+ 24086 - 11905: 0xCCFB,
+ 24087 - 11905: 0x8E93,
+ 24088 - 11905: 0xC1B1,
+ 24089 - 11905: 0xE0F9,
+ 24090 - 11905: 0xD6E3,
+ 24091 - 11905: 0xB2AF,
+ 24092 - 11905: 0xD6C4,
+ 24093 - 11905: 0xB5DB,
+ 24094 - 11905: 0x8E94,
+ 24095 - 11905: 0x8E95,
+ 24096 - 11905: 0x8E96,
+ 24097 - 11905: 0x8E97,
+ 24098 - 11905: 0x8E98,
+ 24099 - 11905: 0x8E99,
+ 24100 - 11905: 0x8E9A,
+ 24101 - 11905: 0x8E9B,
+ 24102 - 11905: 0xB4F8,
+ 24103 - 11905: 0xD6A1,
+ 24104 - 11905: 0x8E9C,
+ 24105 - 11905: 0x8E9D,
+ 24106 - 11905: 0x8E9E,
+ 24107 - 11905: 0x8E9F,
+ 24108 - 11905: 0x8EA0,
+ 24109 - 11905: 0xCFAF,
+ 24110 - 11905: 0xB0EF,
+ 24111 - 11905: 0x8EA1,
+ 24112 - 11905: 0x8EA2,
+ 24113 - 11905: 0xE0FC,
+ 24114 - 11905: 0x8EA3,
+ 24115 - 11905: 0x8EA4,
+ 24116 - 11905: 0x8EA5,
+ 24117 - 11905: 0x8EA6,
+ 24118 - 11905: 0x8EA7,
+ 24119 - 11905: 0xE1A1,
+ 24120 - 11905: 0xB3A3,
+ 24121 - 11905: 0x8EA8,
+ 24122 - 11905: 0x8EA9,
+ 24123 - 11905: 0xE0FD,
+ 24124 - 11905: 0xE0FE,
+ 24125 - 11905: 0xC3B1,
+ 24126 - 11905: 0x8EAA,
+ 24127 - 11905: 0x8EAB,
+ 24128 - 11905: 0x8EAC,
+ 24129 - 11905: 0x8EAD,
+ 24130 - 11905: 0xC3DD,
+ 24131 - 11905: 0x8EAE,
+ 24132 - 11905: 0xE1A2,
+ 24133 - 11905: 0xB7F9,
+ 24134 - 11905: 0x8EAF,
+ 24135 - 11905: 0x8EB0,
+ 24136 - 11905: 0x8EB1,
+ 24137 - 11905: 0x8EB2,
+ 24138 - 11905: 0x8EB3,
+ 24139 - 11905: 0x8EB4,
+ 24140 - 11905: 0xBBCF,
+ 24141 - 11905: 0x8EB5,
+ 24142 - 11905: 0x8EB6,
+ 24143 - 11905: 0x8EB7,
+ 24144 - 11905: 0x8EB8,
+ 24145 - 11905: 0x8EB9,
+ 24146 - 11905: 0x8EBA,
+ 24147 - 11905: 0x8EBB,
+ 24148 - 11905: 0xE1A3,
+ 24149 - 11905: 0xC4BB,
+ 24150 - 11905: 0x8EBC,
+ 24151 - 11905: 0x8EBD,
+ 24152 - 11905: 0x8EBE,
+ 24153 - 11905: 0x8EBF,
+ 24154 - 11905: 0x8EC0,
+ 24155 - 11905: 0xE1A4,
+ 24156 - 11905: 0x8EC1,
+ 24157 - 11905: 0x8EC2,
+ 24158 - 11905: 0xE1A5,
+ 24159 - 11905: 0x8EC3,
+ 24160 - 11905: 0x8EC4,
+ 24161 - 11905: 0xE1A6,
+ 24162 - 11905: 0xB4B1,
+ 24163 - 11905: 0x8EC5,
+ 24164 - 11905: 0x8EC6,
+ 24165 - 11905: 0x8EC7,
+ 24166 - 11905: 0x8EC8,
+ 24167 - 11905: 0x8EC9,
+ 24168 - 11905: 0x8ECA,
+ 24169 - 11905: 0x8ECB,
+ 24170 - 11905: 0x8ECC,
+ 24171 - 11905: 0x8ECD,
+ 24172 - 11905: 0x8ECE,
+ 24173 - 11905: 0x8ECF,
+ 24174 - 11905: 0x8ED0,
+ 24175 - 11905: 0x8ED1,
+ 24176 - 11905: 0x8ED2,
+ 24177 - 11905: 0x8ED3,
+ 24178 - 11905: 0xB8C9,
+ 24179 - 11905: 0xC6BD,
+ 24180 - 11905: 0xC4EA,
+ 24181 - 11905: 0x8ED4,
+ 24182 - 11905: 0xB2A2,
+ 24183 - 11905: 0x8ED5,
+ 24184 - 11905: 0xD0D2,
+ 24185 - 11905: 0x8ED6,
+ 24186 - 11905: 0xE7DB,
+ 24187 - 11905: 0xBBC3,
+ 24188 - 11905: 0xD3D7,
+ 24189 - 11905: 0xD3C4,
+ 24190 - 11905: 0x8ED7,
+ 24191 - 11905: 0xB9E3,
+ 24192 - 11905: 0xE2CF,
+ 24193 - 11905: 0x8ED8,
+ 24194 - 11905: 0x8ED9,
+ 24195 - 11905: 0x8EDA,
+ 24196 - 11905: 0xD7AF,
+ 24197 - 11905: 0x8EDB,
+ 24198 - 11905: 0xC7EC,
+ 24199 - 11905: 0xB1D3,
+ 24200 - 11905: 0x8EDC,
+ 24201 - 11905: 0x8EDD,
+ 24202 - 11905: 0xB4B2,
+ 24203 - 11905: 0xE2D1,
+ 24204 - 11905: 0x8EDE,
+ 24205 - 11905: 0x8EDF,
+ 24206 - 11905: 0x8EE0,
+ 24207 - 11905: 0xD0F2,
+ 24208 - 11905: 0xC2AE,
+ 24209 - 11905: 0xE2D0,
+ 24210 - 11905: 0x8EE1,
+ 24211 - 11905: 0xBFE2,
+ 24212 - 11905: 0xD3A6,
+ 24213 - 11905: 0xB5D7,
+ 24214 - 11905: 0xE2D2,
+ 24215 - 11905: 0xB5EA,
+ 24216 - 11905: 0x8EE2,
+ 24217 - 11905: 0xC3ED,
+ 24218 - 11905: 0xB8FD,
+ 24219 - 11905: 0x8EE3,
+ 24220 - 11905: 0xB8AE,
+ 24221 - 11905: 0x8EE4,
+ 24222 - 11905: 0xC5D3,
+ 24223 - 11905: 0xB7CF,
+ 24224 - 11905: 0xE2D4,
+ 24225 - 11905: 0x8EE5,
+ 24226 - 11905: 0x8EE6,
+ 24227 - 11905: 0x8EE7,
+ 24228 - 11905: 0x8EE8,
+ 24229 - 11905: 0xE2D3,
+ 24230 - 11905: 0xB6C8,
+ 24231 - 11905: 0xD7F9,
+ 24232 - 11905: 0x8EE9,
+ 24233 - 11905: 0x8EEA,
+ 24234 - 11905: 0x8EEB,
+ 24235 - 11905: 0x8EEC,
+ 24236 - 11905: 0x8EED,
+ 24237 - 11905: 0xCDA5,
+ 24238 - 11905: 0x8EEE,
+ 24239 - 11905: 0x8EEF,
+ 24240 - 11905: 0x8EF0,
+ 24241 - 11905: 0x8EF1,
+ 24242 - 11905: 0x8EF2,
+ 24243 - 11905: 0xE2D8,
+ 24244 - 11905: 0x8EF3,
+ 24245 - 11905: 0xE2D6,
+ 24246 - 11905: 0xCAFC,
+ 24247 - 11905: 0xBFB5,
+ 24248 - 11905: 0xD3B9,
+ 24249 - 11905: 0xE2D5,
+ 24250 - 11905: 0x8EF4,
+ 24251 - 11905: 0x8EF5,
+ 24252 - 11905: 0x8EF6,
+ 24253 - 11905: 0x8EF7,
+ 24254 - 11905: 0xE2D7,
+ 24255 - 11905: 0x8EF8,
+ 24256 - 11905: 0x8EF9,
+ 24257 - 11905: 0x8EFA,
+ 24258 - 11905: 0x8EFB,
+ 24259 - 11905: 0x8EFC,
+ 24260 - 11905: 0x8EFD,
+ 24261 - 11905: 0x8EFE,
+ 24262 - 11905: 0x8F40,
+ 24263 - 11905: 0x8F41,
+ 24264 - 11905: 0x8F42,
+ 24265 - 11905: 0xC1AE,
+ 24266 - 11905: 0xC0C8,
+ 24267 - 11905: 0x8F43,
+ 24268 - 11905: 0x8F44,
+ 24269 - 11905: 0x8F45,
+ 24270 - 11905: 0x8F46,
+ 24271 - 11905: 0x8F47,
+ 24272 - 11905: 0x8F48,
+ 24273 - 11905: 0xE2DB,
+ 24274 - 11905: 0xE2DA,
+ 24275 - 11905: 0xC0AA,
+ 24276 - 11905: 0x8F49,
+ 24277 - 11905: 0x8F4A,
+ 24278 - 11905: 0xC1CE,
+ 24279 - 11905: 0x8F4B,
+ 24280 - 11905: 0x8F4C,
+ 24281 - 11905: 0x8F4D,
+ 24282 - 11905: 0x8F4E,
+ 24283 - 11905: 0xE2DC,
+ 24284 - 11905: 0x8F4F,
+ 24285 - 11905: 0x8F50,
+ 24286 - 11905: 0x8F51,
+ 24287 - 11905: 0x8F52,
+ 24288 - 11905: 0x8F53,
+ 24289 - 11905: 0x8F54,
+ 24290 - 11905: 0x8F55,
+ 24291 - 11905: 0x8F56,
+ 24292 - 11905: 0x8F57,
+ 24293 - 11905: 0x8F58,
+ 24294 - 11905: 0x8F59,
+ 24295 - 11905: 0x8F5A,
+ 24296 - 11905: 0xE2DD,
+ 24297 - 11905: 0x8F5B,
+ 24298 - 11905: 0xE2DE,
+ 24299 - 11905: 0x8F5C,
+ 24300 - 11905: 0x8F5D,
+ 24301 - 11905: 0x8F5E,
+ 24302 - 11905: 0x8F5F,
+ 24303 - 11905: 0x8F60,
+ 24304 - 11905: 0x8F61,
+ 24305 - 11905: 0x8F62,
+ 24306 - 11905: 0x8F63,
+ 24307 - 11905: 0x8F64,
+ 24308 - 11905: 0xDBC8,
+ 24309 - 11905: 0x8F65,
+ 24310 - 11905: 0xD1D3,
+ 24311 - 11905: 0xCDA2,
+ 24312 - 11905: 0x8F66,
+ 24313 - 11905: 0x8F67,
+ 24314 - 11905: 0xBDA8,
+ 24315 - 11905: 0x8F68,
+ 24316 - 11905: 0x8F69,
+ 24317 - 11905: 0x8F6A,
+ 24318 - 11905: 0xDEC3,
+ 24319 - 11905: 0xD8A5,
+ 24320 - 11905: 0xBFAA,
+ 24321 - 11905: 0xDBCD,
+ 24322 - 11905: 0xD2EC,
+ 24323 - 11905: 0xC6FA,
+ 24324 - 11905: 0xC5AA,
+ 24325 - 11905: 0x8F6B,
+ 24326 - 11905: 0x8F6C,
+ 24327 - 11905: 0x8F6D,
+ 24328 - 11905: 0xDEC4,
+ 24329 - 11905: 0x8F6E,
+ 24330 - 11905: 0xB1D7,
+ 24331 - 11905: 0xDFAE,
+ 24332 - 11905: 0x8F6F,
+ 24333 - 11905: 0x8F70,
+ 24334 - 11905: 0x8F71,
+ 24335 - 11905: 0xCABD,
+ 24336 - 11905: 0x8F72,
+ 24337 - 11905: 0xDFB1,
+ 24338 - 11905: 0x8F73,
+ 24339 - 11905: 0xB9AD,
+ 24340 - 11905: 0x8F74,
+ 24341 - 11905: 0xD2FD,
+ 24342 - 11905: 0x8F75,
+ 24343 - 11905: 0xB8A5,
+ 24344 - 11905: 0xBAEB,
+ 24345 - 11905: 0x8F76,
+ 24346 - 11905: 0x8F77,
+ 24347 - 11905: 0xB3DA,
+ 24348 - 11905: 0x8F78,
+ 24349 - 11905: 0x8F79,
+ 24350 - 11905: 0x8F7A,
+ 24351 - 11905: 0xB5DC,
+ 24352 - 11905: 0xD5C5,
+ 24353 - 11905: 0x8F7B,
+ 24354 - 11905: 0x8F7C,
+ 24355 - 11905: 0x8F7D,
+ 24356 - 11905: 0x8F7E,
+ 24357 - 11905: 0xC3D6,
+ 24358 - 11905: 0xCFD2,
+ 24359 - 11905: 0xBBA1,
+ 24360 - 11905: 0x8F80,
+ 24361 - 11905: 0xE5F3,
+ 24362 - 11905: 0xE5F2,
+ 24363 - 11905: 0x8F81,
+ 24364 - 11905: 0x8F82,
+ 24365 - 11905: 0xE5F4,
+ 24366 - 11905: 0x8F83,
+ 24367 - 11905: 0xCDE4,
+ 24368 - 11905: 0x8F84,
+ 24369 - 11905: 0xC8F5,
+ 24370 - 11905: 0x8F85,
+ 24371 - 11905: 0x8F86,
+ 24372 - 11905: 0x8F87,
+ 24373 - 11905: 0x8F88,
+ 24374 - 11905: 0x8F89,
+ 24375 - 11905: 0x8F8A,
+ 24376 - 11905: 0x8F8B,
+ 24377 - 11905: 0xB5AF,
+ 24378 - 11905: 0xC7BF,
+ 24379 - 11905: 0x8F8C,
+ 24380 - 11905: 0xE5F6,
+ 24381 - 11905: 0x8F8D,
+ 24382 - 11905: 0x8F8E,
+ 24383 - 11905: 0x8F8F,
+ 24384 - 11905: 0xECB0,
+ 24385 - 11905: 0x8F90,
+ 24386 - 11905: 0x8F91,
+ 24387 - 11905: 0x8F92,
+ 24388 - 11905: 0x8F93,
+ 24389 - 11905: 0x8F94,
+ 24390 - 11905: 0x8F95,
+ 24391 - 11905: 0x8F96,
+ 24392 - 11905: 0x8F97,
+ 24393 - 11905: 0x8F98,
+ 24394 - 11905: 0x8F99,
+ 24395 - 11905: 0x8F9A,
+ 24396 - 11905: 0x8F9B,
+ 24397 - 11905: 0x8F9C,
+ 24398 - 11905: 0x8F9D,
+ 24399 - 11905: 0x8F9E,
+ 24400 - 11905: 0xE5E6,
+ 24401 - 11905: 0x8F9F,
+ 24402 - 11905: 0xB9E9,
+ 24403 - 11905: 0xB5B1,
+ 24404 - 11905: 0x8FA0,
+ 24405 - 11905: 0xC2BC,
+ 24406 - 11905: 0xE5E8,
+ 24407 - 11905: 0xE5E7,
+ 24408 - 11905: 0xE5E9,
+ 24409 - 11905: 0x8FA1,
+ 24410 - 11905: 0x8FA2,
+ 24411 - 11905: 0x8FA3,
+ 24412 - 11905: 0x8FA4,
+ 24413 - 11905: 0xD2CD,
+ 24414 - 11905: 0x8FA5,
+ 24415 - 11905: 0x8FA6,
+ 24416 - 11905: 0x8FA7,
+ 24417 - 11905: 0xE1EA,
+ 24418 - 11905: 0xD0CE,
+ 24419 - 11905: 0x8FA8,
+ 24420 - 11905: 0xCDAE,
+ 24421 - 11905: 0x8FA9,
+ 24422 - 11905: 0xD1E5,
+ 24423 - 11905: 0x8FAA,
+ 24424 - 11905: 0x8FAB,
+ 24425 - 11905: 0xB2CA,
+ 24426 - 11905: 0xB1EB,
+ 24427 - 11905: 0x8FAC,
+ 24428 - 11905: 0xB1F2,
+ 24429 - 11905: 0xC5ED,
+ 24430 - 11905: 0x8FAD,
+ 24431 - 11905: 0x8FAE,
+ 24432 - 11905: 0xD5C3,
+ 24433 - 11905: 0xD3B0,
+ 24434 - 11905: 0x8FAF,
+ 24435 - 11905: 0xE1DC,
+ 24436 - 11905: 0x8FB0,
+ 24437 - 11905: 0x8FB1,
+ 24438 - 11905: 0x8FB2,
+ 24439 - 11905: 0xE1DD,
+ 24440 - 11905: 0x8FB3,
+ 24441 - 11905: 0xD2DB,
+ 24442 - 11905: 0x8FB4,
+ 24443 - 11905: 0xB3B9,
+ 24444 - 11905: 0xB1CB,
+ 24445 - 11905: 0x8FB5,
+ 24446 - 11905: 0x8FB6,
+ 24447 - 11905: 0x8FB7,
+ 24448 - 11905: 0xCDF9,
+ 24449 - 11905: 0xD5F7,
+ 24450 - 11905: 0xE1DE,
+ 24451 - 11905: 0x8FB8,
+ 24452 - 11905: 0xBEB6,
+ 24453 - 11905: 0xB4FD,
+ 24454 - 11905: 0x8FB9,
+ 24455 - 11905: 0xE1DF,
+ 24456 - 11905: 0xBADC,
+ 24457 - 11905: 0xE1E0,
+ 24458 - 11905: 0xBBB2,
+ 24459 - 11905: 0xC2C9,
+ 24460 - 11905: 0xE1E1,
+ 24461 - 11905: 0x8FBA,
+ 24462 - 11905: 0x8FBB,
+ 24463 - 11905: 0x8FBC,
+ 24464 - 11905: 0xD0EC,
+ 24465 - 11905: 0x8FBD,
+ 24466 - 11905: 0xCDBD,
+ 24467 - 11905: 0x8FBE,
+ 24468 - 11905: 0x8FBF,
+ 24469 - 11905: 0xE1E2,
+ 24470 - 11905: 0x8FC0,
+ 24471 - 11905: 0xB5C3,
+ 24472 - 11905: 0xC5C7,
+ 24473 - 11905: 0xE1E3,
+ 24474 - 11905: 0x8FC1,
+ 24475 - 11905: 0x8FC2,
+ 24476 - 11905: 0xE1E4,
+ 24477 - 11905: 0x8FC3,
+ 24478 - 11905: 0x8FC4,
+ 24479 - 11905: 0x8FC5,
+ 24480 - 11905: 0x8FC6,
+ 24481 - 11905: 0xD3F9,
+ 24482 - 11905: 0x8FC7,
+ 24483 - 11905: 0x8FC8,
+ 24484 - 11905: 0x8FC9,
+ 24485 - 11905: 0x8FCA,
+ 24486 - 11905: 0x8FCB,
+ 24487 - 11905: 0x8FCC,
+ 24488 - 11905: 0xE1E5,
+ 24489 - 11905: 0x8FCD,
+ 24490 - 11905: 0xD1AD,
+ 24491 - 11905: 0x8FCE,
+ 24492 - 11905: 0x8FCF,
+ 24493 - 11905: 0xE1E6,
+ 24494 - 11905: 0xCEA2,
+ 24495 - 11905: 0x8FD0,
+ 24496 - 11905: 0x8FD1,
+ 24497 - 11905: 0x8FD2,
+ 24498 - 11905: 0x8FD3,
+ 24499 - 11905: 0x8FD4,
+ 24500 - 11905: 0x8FD5,
+ 24501 - 11905: 0xE1E7,
+ 24502 - 11905: 0x8FD6,
+ 24503 - 11905: 0xB5C2,
+ 24504 - 11905: 0x8FD7,
+ 24505 - 11905: 0x8FD8,
+ 24506 - 11905: 0x8FD9,
+ 24507 - 11905: 0x8FDA,
+ 24508 - 11905: 0xE1E8,
+ 24509 - 11905: 0xBBD5,
+ 24510 - 11905: 0x8FDB,
+ 24511 - 11905: 0x8FDC,
+ 24512 - 11905: 0x8FDD,
+ 24513 - 11905: 0x8FDE,
+ 24514 - 11905: 0x8FDF,
+ 24515 - 11905: 0xD0C4,
+ 24516 - 11905: 0xE2E0,
+ 24517 - 11905: 0xB1D8,
+ 24518 - 11905: 0xD2E4,
+ 24519 - 11905: 0x8FE0,
+ 24520 - 11905: 0x8FE1,
+ 24521 - 11905: 0xE2E1,
+ 24522 - 11905: 0x8FE2,
+ 24523 - 11905: 0x8FE3,
+ 24524 - 11905: 0xBCC9,
+ 24525 - 11905: 0xC8CC,
+ 24526 - 11905: 0x8FE4,
+ 24527 - 11905: 0xE2E3,
+ 24528 - 11905: 0xECFE,
+ 24529 - 11905: 0xECFD,
+ 24530 - 11905: 0xDFAF,
+ 24531 - 11905: 0x8FE5,
+ 24532 - 11905: 0x8FE6,
+ 24533 - 11905: 0x8FE7,
+ 24534 - 11905: 0xE2E2,
+ 24535 - 11905: 0xD6BE,
+ 24536 - 11905: 0xCDFC,
+ 24537 - 11905: 0xC3A6,
+ 24538 - 11905: 0x8FE8,
+ 24539 - 11905: 0x8FE9,
+ 24540 - 11905: 0x8FEA,
+ 24541 - 11905: 0xE3C3,
+ 24542 - 11905: 0x8FEB,
+ 24543 - 11905: 0x8FEC,
+ 24544 - 11905: 0xD6D2,
+ 24545 - 11905: 0xE2E7,
+ 24546 - 11905: 0x8FED,
+ 24547 - 11905: 0x8FEE,
+ 24548 - 11905: 0xE2E8,
+ 24549 - 11905: 0x8FEF,
+ 24550 - 11905: 0x8FF0,
+ 24551 - 11905: 0xD3C7,
+ 24552 - 11905: 0x8FF1,
+ 24553 - 11905: 0x8FF2,
+ 24554 - 11905: 0xE2EC,
+ 24555 - 11905: 0xBFEC,
+ 24556 - 11905: 0x8FF3,
+ 24557 - 11905: 0xE2ED,
+ 24558 - 11905: 0xE2E5,
+ 24559 - 11905: 0x8FF4,
+ 24560 - 11905: 0x8FF5,
+ 24561 - 11905: 0xB3C0,
+ 24562 - 11905: 0x8FF6,
+ 24563 - 11905: 0x8FF7,
+ 24564 - 11905: 0x8FF8,
+ 24565 - 11905: 0xC4EE,
+ 24566 - 11905: 0x8FF9,
+ 24567 - 11905: 0x8FFA,
+ 24568 - 11905: 0xE2EE,
+ 24569 - 11905: 0x8FFB,
+ 24570 - 11905: 0x8FFC,
+ 24571 - 11905: 0xD0C3,
+ 24572 - 11905: 0x8FFD,
+ 24573 - 11905: 0xBAF6,
+ 24574 - 11905: 0xE2E9,
+ 24575 - 11905: 0xB7DE,
+ 24576 - 11905: 0xBBB3,
+ 24577 - 11905: 0xCCAC,
+ 24578 - 11905: 0xCBCB,
+ 24579 - 11905: 0xE2E4,
+ 24580 - 11905: 0xE2E6,
+ 24581 - 11905: 0xE2EA,
+ 24582 - 11905: 0xE2EB,
+ 24583 - 11905: 0x8FFE,
+ 24584 - 11905: 0x9040,
+ 24585 - 11905: 0x9041,
+ 24586 - 11905: 0xE2F7,
+ 24587 - 11905: 0x9042,
+ 24588 - 11905: 0x9043,
+ 24589 - 11905: 0xE2F4,
+ 24590 - 11905: 0xD4F5,
+ 24591 - 11905: 0xE2F3,
+ 24592 - 11905: 0x9044,
+ 24593 - 11905: 0x9045,
+ 24594 - 11905: 0xC5AD,
+ 24595 - 11905: 0x9046,
+ 24596 - 11905: 0xD5FA,
+ 24597 - 11905: 0xC5C2,
+ 24598 - 11905: 0xB2C0,
+ 24599 - 11905: 0x9047,
+ 24600 - 11905: 0x9048,
+ 24601 - 11905: 0xE2EF,
+ 24602 - 11905: 0x9049,
+ 24603 - 11905: 0xE2F2,
+ 24604 - 11905: 0xC1AF,
+ 24605 - 11905: 0xCBBC,
+ 24606 - 11905: 0x904A,
+ 24607 - 11905: 0x904B,
+ 24608 - 11905: 0xB5A1,
+ 24609 - 11905: 0xE2F9,
+ 24610 - 11905: 0x904C,
+ 24611 - 11905: 0x904D,
+ 24612 - 11905: 0x904E,
+ 24613 - 11905: 0xBCB1,
+ 24614 - 11905: 0xE2F1,
+ 24615 - 11905: 0xD0D4,
+ 24616 - 11905: 0xD4B9,
+ 24617 - 11905: 0xE2F5,
+ 24618 - 11905: 0xB9D6,
+ 24619 - 11905: 0xE2F6,
+ 24620 - 11905: 0x904F,
+ 24621 - 11905: 0x9050,
+ 24622 - 11905: 0x9051,
+ 24623 - 11905: 0xC7D3,
+ 24624 - 11905: 0x9052,
+ 24625 - 11905: 0x9053,
+ 24626 - 11905: 0x9054,
+ 24627 - 11905: 0x9055,
+ 24628 - 11905: 0x9056,
+ 24629 - 11905: 0xE2F0,
+ 24630 - 11905: 0x9057,
+ 24631 - 11905: 0x9058,
+ 24632 - 11905: 0x9059,
+ 24633 - 11905: 0x905A,
+ 24634 - 11905: 0x905B,
+ 24635 - 11905: 0xD7DC,
+ 24636 - 11905: 0xEDA1,
+ 24637 - 11905: 0x905C,
+ 24638 - 11905: 0x905D,
+ 24639 - 11905: 0xE2F8,
+ 24640 - 11905: 0x905E,
+ 24641 - 11905: 0xEDA5,
+ 24642 - 11905: 0xE2FE,
+ 24643 - 11905: 0xCAD1,
+ 24644 - 11905: 0x905F,
+ 24645 - 11905: 0x9060,
+ 24646 - 11905: 0x9061,
+ 24647 - 11905: 0x9062,
+ 24648 - 11905: 0x9063,
+ 24649 - 11905: 0x9064,
+ 24650 - 11905: 0x9065,
+ 24651 - 11905: 0xC1B5,
+ 24652 - 11905: 0x9066,
+ 24653 - 11905: 0xBBD0,
+ 24654 - 11905: 0x9067,
+ 24655 - 11905: 0x9068,
+ 24656 - 11905: 0xBFD6,
+ 24657 - 11905: 0x9069,
+ 24658 - 11905: 0xBAE3,
+ 24659 - 11905: 0x906A,
+ 24660 - 11905: 0x906B,
+ 24661 - 11905: 0xCBA1,
+ 24662 - 11905: 0x906C,
+ 24663 - 11905: 0x906D,
+ 24664 - 11905: 0x906E,
+ 24665 - 11905: 0xEDA6,
+ 24666 - 11905: 0xEDA3,
+ 24667 - 11905: 0x906F,
+ 24668 - 11905: 0x9070,
+ 24669 - 11905: 0xEDA2,
+ 24670 - 11905: 0x9071,
+ 24671 - 11905: 0x9072,
+ 24672 - 11905: 0x9073,
+ 24673 - 11905: 0x9074,
+ 24674 - 11905: 0xBBD6,
+ 24675 - 11905: 0xEDA7,
+ 24676 - 11905: 0xD0F4,
+ 24677 - 11905: 0x9075,
+ 24678 - 11905: 0x9076,
+ 24679 - 11905: 0xEDA4,
+ 24680 - 11905: 0xBADE,
+ 24681 - 11905: 0xB6F7,
+ 24682 - 11905: 0xE3A1,
+ 24683 - 11905: 0xB6B2,
+ 24684 - 11905: 0xCCF1,
+ 24685 - 11905: 0xB9A7,
+ 24686 - 11905: 0x9077,
+ 24687 - 11905: 0xCFA2,
+ 24688 - 11905: 0xC7A1,
+ 24689 - 11905: 0x9078,
+ 24690 - 11905: 0x9079,
+ 24691 - 11905: 0xBFD2,
+ 24692 - 11905: 0x907A,
+ 24693 - 11905: 0x907B,
+ 24694 - 11905: 0xB6F1,
+ 24695 - 11905: 0x907C,
+ 24696 - 11905: 0xE2FA,
+ 24697 - 11905: 0xE2FB,
+ 24698 - 11905: 0xE2FD,
+ 24699 - 11905: 0xE2FC,
+ 24700 - 11905: 0xC4D5,
+ 24701 - 11905: 0xE3A2,
+ 24702 - 11905: 0x907D,
+ 24703 - 11905: 0xD3C1,
+ 24704 - 11905: 0x907E,
+ 24705 - 11905: 0x9080,
+ 24706 - 11905: 0x9081,
+ 24707 - 11905: 0xE3A7,
+ 24708 - 11905: 0xC7C4,
+ 24709 - 11905: 0x9082,
+ 24710 - 11905: 0x9083,
+ 24711 - 11905: 0x9084,
+ 24712 - 11905: 0x9085,
+ 24713 - 11905: 0xCFA4,
+ 24714 - 11905: 0x9086,
+ 24715 - 11905: 0x9087,
+ 24716 - 11905: 0xE3A9,
+ 24717 - 11905: 0xBAB7,
+ 24718 - 11905: 0x9088,
+ 24719 - 11905: 0x9089,
+ 24720 - 11905: 0x908A,
+ 24721 - 11905: 0x908B,
+ 24722 - 11905: 0xE3A8,
+ 24723 - 11905: 0x908C,
+ 24724 - 11905: 0xBBDA,
+ 24725 - 11905: 0x908D,
+ 24726 - 11905: 0xE3A3,
+ 24727 - 11905: 0x908E,
+ 24728 - 11905: 0x908F,
+ 24729 - 11905: 0x9090,
+ 24730 - 11905: 0xE3A4,
+ 24731 - 11905: 0xE3AA,
+ 24732 - 11905: 0x9091,
+ 24733 - 11905: 0xE3A6,
+ 24734 - 11905: 0x9092,
+ 24735 - 11905: 0xCEF2,
+ 24736 - 11905: 0xD3C6,
+ 24737 - 11905: 0x9093,
+ 24738 - 11905: 0x9094,
+ 24739 - 11905: 0xBBBC,
+ 24740 - 11905: 0x9095,
+ 24741 - 11905: 0x9096,
+ 24742 - 11905: 0xD4C3,
+ 24743 - 11905: 0x9097,
+ 24744 - 11905: 0xC4FA,
+ 24745 - 11905: 0x9098,
+ 24746 - 11905: 0x9099,
+ 24747 - 11905: 0xEDA8,
+ 24748 - 11905: 0xD0FC,
+ 24749 - 11905: 0xE3A5,
+ 24750 - 11905: 0x909A,
+ 24751 - 11905: 0xC3F5,
+ 24752 - 11905: 0x909B,
+ 24753 - 11905: 0xE3AD,
+ 24754 - 11905: 0xB1AF,
+ 24755 - 11905: 0x909C,
+ 24756 - 11905: 0xE3B2,
+ 24757 - 11905: 0x909D,
+ 24758 - 11905: 0x909E,
+ 24759 - 11905: 0x909F,
+ 24760 - 11905: 0xBCC2,
+ 24761 - 11905: 0x90A0,
+ 24762 - 11905: 0x90A1,
+ 24763 - 11905: 0xE3AC,
+ 24764 - 11905: 0xB5BF,
+ 24765 - 11905: 0x90A2,
+ 24766 - 11905: 0x90A3,
+ 24767 - 11905: 0x90A4,
+ 24768 - 11905: 0x90A5,
+ 24769 - 11905: 0x90A6,
+ 24770 - 11905: 0x90A7,
+ 24771 - 11905: 0x90A8,
+ 24772 - 11905: 0x90A9,
+ 24773 - 11905: 0xC7E9,
+ 24774 - 11905: 0xE3B0,
+ 24775 - 11905: 0x90AA,
+ 24776 - 11905: 0x90AB,
+ 24777 - 11905: 0x90AC,
+ 24778 - 11905: 0xBEAA,
+ 24779 - 11905: 0xCDEF,
+ 24780 - 11905: 0x90AD,
+ 24781 - 11905: 0x90AE,
+ 24782 - 11905: 0x90AF,
+ 24783 - 11905: 0x90B0,
+ 24784 - 11905: 0x90B1,
+ 24785 - 11905: 0xBBF3,
+ 24786 - 11905: 0x90B2,
+ 24787 - 11905: 0x90B3,
+ 24788 - 11905: 0x90B4,
+ 24789 - 11905: 0xCCE8,
+ 24790 - 11905: 0x90B5,
+ 24791 - 11905: 0x90B6,
+ 24792 - 11905: 0xE3AF,
+ 24793 - 11905: 0x90B7,
+ 24794 - 11905: 0xE3B1,
+ 24795 - 11905: 0x90B8,
+ 24796 - 11905: 0xCFA7,
+ 24797 - 11905: 0xE3AE,
+ 24798 - 11905: 0x90B9,
+ 24799 - 11905: 0xCEA9,
+ 24800 - 11905: 0xBBDD,
+ 24801 - 11905: 0x90BA,
+ 24802 - 11905: 0x90BB,
+ 24803 - 11905: 0x90BC,
+ 24804 - 11905: 0x90BD,
+ 24805 - 11905: 0x90BE,
+ 24806 - 11905: 0xB5EB,
+ 24807 - 11905: 0xBEE5,
+ 24808 - 11905: 0xB2D2,
+ 24809 - 11905: 0xB3CD,
+ 24810 - 11905: 0x90BF,
+ 24811 - 11905: 0xB1B9,
+ 24812 - 11905: 0xE3AB,
+ 24813 - 11905: 0xB2D1,
+ 24814 - 11905: 0xB5AC,
+ 24815 - 11905: 0xB9DF,
+ 24816 - 11905: 0xB6E8,
+ 24817 - 11905: 0x90C0,
+ 24818 - 11905: 0x90C1,
+ 24819 - 11905: 0xCFEB,
+ 24820 - 11905: 0xE3B7,
+ 24821 - 11905: 0x90C2,
+ 24822 - 11905: 0xBBCC,
+ 24823 - 11905: 0x90C3,
+ 24824 - 11905: 0x90C4,
+ 24825 - 11905: 0xC8C7,
+ 24826 - 11905: 0xD0CA,
+ 24827 - 11905: 0x90C5,
+ 24828 - 11905: 0x90C6,
+ 24829 - 11905: 0x90C7,
+ 24830 - 11905: 0x90C8,
+ 24831 - 11905: 0x90C9,
+ 24832 - 11905: 0xE3B8,
+ 24833 - 11905: 0xB3EE,
+ 24834 - 11905: 0x90CA,
+ 24835 - 11905: 0x90CB,
+ 24836 - 11905: 0x90CC,
+ 24837 - 11905: 0x90CD,
+ 24838 - 11905: 0xEDA9,
+ 24839 - 11905: 0x90CE,
+ 24840 - 11905: 0xD3FA,
+ 24841 - 11905: 0xD3E4,
+ 24842 - 11905: 0x90CF,
+ 24843 - 11905: 0x90D0,
+ 24844 - 11905: 0x90D1,
+ 24845 - 11905: 0xEDAA,
+ 24846 - 11905: 0xE3B9,
+ 24847 - 11905: 0xD2E2,
+ 24848 - 11905: 0x90D2,
+ 24849 - 11905: 0x90D3,
+ 24850 - 11905: 0x90D4,
+ 24851 - 11905: 0x90D5,
+ 24852 - 11905: 0x90D6,
+ 24853 - 11905: 0xE3B5,
+ 24854 - 11905: 0x90D7,
+ 24855 - 11905: 0x90D8,
+ 24856 - 11905: 0x90D9,
+ 24857 - 11905: 0x90DA,
+ 24858 - 11905: 0xD3DE,
+ 24859 - 11905: 0x90DB,
+ 24860 - 11905: 0x90DC,
+ 24861 - 11905: 0x90DD,
+ 24862 - 11905: 0x90DE,
+ 24863 - 11905: 0xB8D0,
+ 24864 - 11905: 0xE3B3,
+ 24865 - 11905: 0x90DF,
+ 24866 - 11905: 0x90E0,
+ 24867 - 11905: 0xE3B6,
+ 24868 - 11905: 0xB7DF,
+ 24869 - 11905: 0x90E1,
+ 24870 - 11905: 0xE3B4,
+ 24871 - 11905: 0xC0A2,
+ 24872 - 11905: 0x90E2,
+ 24873 - 11905: 0x90E3,
+ 24874 - 11905: 0x90E4,
+ 24875 - 11905: 0xE3BA,
+ 24876 - 11905: 0x90E5,
+ 24877 - 11905: 0x90E6,
+ 24878 - 11905: 0x90E7,
+ 24879 - 11905: 0x90E8,
+ 24880 - 11905: 0x90E9,
+ 24881 - 11905: 0x90EA,
+ 24882 - 11905: 0x90EB,
+ 24883 - 11905: 0x90EC,
+ 24884 - 11905: 0x90ED,
+ 24885 - 11905: 0x90EE,
+ 24886 - 11905: 0x90EF,
+ 24887 - 11905: 0x90F0,
+ 24888 - 11905: 0x90F1,
+ 24889 - 11905: 0x90F2,
+ 24890 - 11905: 0x90F3,
+ 24891 - 11905: 0x90F4,
+ 24892 - 11905: 0x90F5,
+ 24893 - 11905: 0x90F6,
+ 24894 - 11905: 0x90F7,
+ 24895 - 11905: 0xD4B8,
+ 24896 - 11905: 0x90F8,
+ 24897 - 11905: 0x90F9,
+ 24898 - 11905: 0x90FA,
+ 24899 - 11905: 0x90FB,
+ 24900 - 11905: 0x90FC,
+ 24901 - 11905: 0x90FD,
+ 24902 - 11905: 0x90FE,
+ 24903 - 11905: 0x9140,
+ 24904 - 11905: 0xB4C8,
+ 24905 - 11905: 0x9141,
+ 24906 - 11905: 0xE3BB,
+ 24907 - 11905: 0x9142,
+ 24908 - 11905: 0xBBC5,
+ 24909 - 11905: 0x9143,
+ 24910 - 11905: 0xC9F7,
+ 24911 - 11905: 0x9144,
+ 24912 - 11905: 0x9145,
+ 24913 - 11905: 0xC9E5,
+ 24914 - 11905: 0x9146,
+ 24915 - 11905: 0x9147,
+ 24916 - 11905: 0x9148,
+ 24917 - 11905: 0xC4BD,
+ 24918 - 11905: 0x9149,
+ 24919 - 11905: 0x914A,
+ 24920 - 11905: 0x914B,
+ 24921 - 11905: 0x914C,
+ 24922 - 11905: 0x914D,
+ 24923 - 11905: 0x914E,
+ 24924 - 11905: 0x914F,
+ 24925 - 11905: 0xEDAB,
+ 24926 - 11905: 0x9150,
+ 24927 - 11905: 0x9151,
+ 24928 - 11905: 0x9152,
+ 24929 - 11905: 0x9153,
+ 24930 - 11905: 0xC2FD,
+ 24931 - 11905: 0x9154,
+ 24932 - 11905: 0x9155,
+ 24933 - 11905: 0x9156,
+ 24934 - 11905: 0x9157,
+ 24935 - 11905: 0xBBDB,
+ 24936 - 11905: 0xBFAE,
+ 24937 - 11905: 0x9158,
+ 24938 - 11905: 0x9159,
+ 24939 - 11905: 0x915A,
+ 24940 - 11905: 0x915B,
+ 24941 - 11905: 0x915C,
+ 24942 - 11905: 0x915D,
+ 24943 - 11905: 0x915E,
+ 24944 - 11905: 0xCEBF,
+ 24945 - 11905: 0x915F,
+ 24946 - 11905: 0x9160,
+ 24947 - 11905: 0x9161,
+ 24948 - 11905: 0x9162,
+ 24949 - 11905: 0xE3BC,
+ 24950 - 11905: 0x9163,
+ 24951 - 11905: 0xBFB6,
+ 24952 - 11905: 0x9164,
+ 24953 - 11905: 0x9165,
+ 24954 - 11905: 0x9166,
+ 24955 - 11905: 0x9167,
+ 24956 - 11905: 0x9168,
+ 24957 - 11905: 0x9169,
+ 24958 - 11905: 0x916A,
+ 24959 - 11905: 0x916B,
+ 24960 - 11905: 0x916C,
+ 24961 - 11905: 0x916D,
+ 24962 - 11905: 0x916E,
+ 24963 - 11905: 0x916F,
+ 24964 - 11905: 0x9170,
+ 24965 - 11905: 0x9171,
+ 24966 - 11905: 0x9172,
+ 24967 - 11905: 0x9173,
+ 24968 - 11905: 0x9174,
+ 24969 - 11905: 0x9175,
+ 24970 - 11905: 0x9176,
+ 24971 - 11905: 0xB1EF,
+ 24972 - 11905: 0x9177,
+ 24973 - 11905: 0x9178,
+ 24974 - 11905: 0xD4F7,
+ 24975 - 11905: 0x9179,
+ 24976 - 11905: 0x917A,
+ 24977 - 11905: 0x917B,
+ 24978 - 11905: 0x917C,
+ 24979 - 11905: 0x917D,
+ 24980 - 11905: 0xE3BE,
+ 24981 - 11905: 0x917E,
+ 24982 - 11905: 0x9180,
+ 24983 - 11905: 0x9181,
+ 24984 - 11905: 0x9182,
+ 24985 - 11905: 0x9183,
+ 24986 - 11905: 0x9184,
+ 24987 - 11905: 0x9185,
+ 24988 - 11905: 0x9186,
+ 24989 - 11905: 0xEDAD,
+ 24990 - 11905: 0x9187,
+ 24991 - 11905: 0x9188,
+ 24992 - 11905: 0x9189,
+ 24993 - 11905: 0x918A,
+ 24994 - 11905: 0x918B,
+ 24995 - 11905: 0x918C,
+ 24996 - 11905: 0x918D,
+ 24997 - 11905: 0x918E,
+ 24998 - 11905: 0x918F,
+ 24999 - 11905: 0xE3BF,
+ 25000 - 11905: 0xBAA9,
+ 25001 - 11905: 0xEDAC,
+ 25002 - 11905: 0x9190,
+ 25003 - 11905: 0x9191,
+ 25004 - 11905: 0xE3BD,
+ 25005 - 11905: 0x9192,
+ 25006 - 11905: 0x9193,
+ 25007 - 11905: 0x9194,
+ 25008 - 11905: 0x9195,
+ 25009 - 11905: 0x9196,
+ 25010 - 11905: 0x9197,
+ 25011 - 11905: 0x9198,
+ 25012 - 11905: 0x9199,
+ 25013 - 11905: 0x919A,
+ 25014 - 11905: 0x919B,
+ 25015 - 11905: 0xE3C0,
+ 25016 - 11905: 0x919C,
+ 25017 - 11905: 0x919D,
+ 25018 - 11905: 0x919E,
+ 25019 - 11905: 0x919F,
+ 25020 - 11905: 0x91A0,
+ 25021 - 11905: 0x91A1,
+ 25022 - 11905: 0xBAB6,
+ 25023 - 11905: 0x91A2,
+ 25024 - 11905: 0x91A3,
+ 25025 - 11905: 0x91A4,
+ 25026 - 11905: 0xB6AE,
+ 25027 - 11905: 0x91A5,
+ 25028 - 11905: 0x91A6,
+ 25029 - 11905: 0x91A7,
+ 25030 - 11905: 0x91A8,
+ 25031 - 11905: 0x91A9,
+ 25032 - 11905: 0xD0B8,
+ 25033 - 11905: 0x91AA,
+ 25034 - 11905: 0xB0C3,
+ 25035 - 11905: 0xEDAE,
+ 25036 - 11905: 0x91AB,
+ 25037 - 11905: 0x91AC,
+ 25038 - 11905: 0x91AD,
+ 25039 - 11905: 0x91AE,
+ 25040 - 11905: 0x91AF,
+ 25041 - 11905: 0xEDAF,
+ 25042 - 11905: 0xC0C1,
+ 25043 - 11905: 0x91B0,
+ 25044 - 11905: 0xE3C1,
+ 25045 - 11905: 0x91B1,
+ 25046 - 11905: 0x91B2,
+ 25047 - 11905: 0x91B3,
+ 25048 - 11905: 0x91B4,
+ 25049 - 11905: 0x91B5,
+ 25050 - 11905: 0x91B6,
+ 25051 - 11905: 0x91B7,
+ 25052 - 11905: 0x91B8,
+ 25053 - 11905: 0x91B9,
+ 25054 - 11905: 0x91BA,
+ 25055 - 11905: 0x91BB,
+ 25056 - 11905: 0x91BC,
+ 25057 - 11905: 0x91BD,
+ 25058 - 11905: 0x91BE,
+ 25059 - 11905: 0x91BF,
+ 25060 - 11905: 0x91C0,
+ 25061 - 11905: 0x91C1,
+ 25062 - 11905: 0xC5B3,
+ 25063 - 11905: 0x91C2,
+ 25064 - 11905: 0x91C3,
+ 25065 - 11905: 0x91C4,
+ 25066 - 11905: 0x91C5,
+ 25067 - 11905: 0x91C6,
+ 25068 - 11905: 0x91C7,
+ 25069 - 11905: 0x91C8,
+ 25070 - 11905: 0x91C9,
+ 25071 - 11905: 0x91CA,
+ 25072 - 11905: 0x91CB,
+ 25073 - 11905: 0x91CC,
+ 25074 - 11905: 0x91CD,
+ 25075 - 11905: 0x91CE,
+ 25076 - 11905: 0x91CF,
+ 25077 - 11905: 0xE3C2,
+ 25078 - 11905: 0x91D0,
+ 25079 - 11905: 0x91D1,
+ 25080 - 11905: 0x91D2,
+ 25081 - 11905: 0x91D3,
+ 25082 - 11905: 0x91D4,
+ 25083 - 11905: 0x91D5,
+ 25084 - 11905: 0x91D6,
+ 25085 - 11905: 0x91D7,
+ 25086 - 11905: 0x91D8,
+ 25087 - 11905: 0xDCB2,
+ 25088 - 11905: 0x91D9,
+ 25089 - 11905: 0x91DA,
+ 25090 - 11905: 0x91DB,
+ 25091 - 11905: 0x91DC,
+ 25092 - 11905: 0x91DD,
+ 25093 - 11905: 0x91DE,
+ 25094 - 11905: 0xEDB0,
+ 25095 - 11905: 0x91DF,
+ 25096 - 11905: 0xB8EA,
+ 25097 - 11905: 0x91E0,
+ 25098 - 11905: 0xCEEC,
+ 25099 - 11905: 0xEAA7,
+ 25100 - 11905: 0xD0E7,
+ 25101 - 11905: 0xCAF9,
+ 25102 - 11905: 0xC8D6,
+ 25103 - 11905: 0xCFB7,
+ 25104 - 11905: 0xB3C9,
+ 25105 - 11905: 0xCED2,
+ 25106 - 11905: 0xBDE4,
+ 25107 - 11905: 0x91E1,
+ 25108 - 11905: 0x91E2,
+ 25109 - 11905: 0xE3DE,
+ 25110 - 11905: 0xBBF2,
+ 25111 - 11905: 0xEAA8,
+ 25112 - 11905: 0xD5BD,
+ 25113 - 11905: 0x91E3,
+ 25114 - 11905: 0xC6DD,
+ 25115 - 11905: 0xEAA9,
+ 25116 - 11905: 0x91E4,
+ 25117 - 11905: 0x91E5,
+ 25118 - 11905: 0x91E6,
+ 25119 - 11905: 0xEAAA,
+ 25120 - 11905: 0x91E7,
+ 25121 - 11905: 0xEAAC,
+ 25122 - 11905: 0xEAAB,
+ 25123 - 11905: 0x91E8,
+ 25124 - 11905: 0xEAAE,
+ 25125 - 11905: 0xEAAD,
+ 25126 - 11905: 0x91E9,
+ 25127 - 11905: 0x91EA,
+ 25128 - 11905: 0x91EB,
+ 25129 - 11905: 0x91EC,
+ 25130 - 11905: 0xBDD8,
+ 25131 - 11905: 0x91ED,
+ 25132 - 11905: 0xEAAF,
+ 25133 - 11905: 0x91EE,
+ 25134 - 11905: 0xC2BE,
+ 25135 - 11905: 0x91EF,
+ 25136 - 11905: 0x91F0,
+ 25137 - 11905: 0x91F1,
+ 25138 - 11905: 0x91F2,
+ 25139 - 11905: 0xB4C1,
+ 25140 - 11905: 0xB4F7,
+ 25141 - 11905: 0x91F3,
+ 25142 - 11905: 0x91F4,
+ 25143 - 11905: 0xBBA7,
+ 25144 - 11905: 0x91F5,
+ 25145 - 11905: 0x91F6,
+ 25146 - 11905: 0x91F7,
+ 25147 - 11905: 0x91F8,
+ 25148 - 11905: 0x91F9,
+ 25149 - 11905: 0xECE6,
+ 25150 - 11905: 0xECE5,
+ 25151 - 11905: 0xB7BF,
+ 25152 - 11905: 0xCBF9,
+ 25153 - 11905: 0xB1E2,
+ 25154 - 11905: 0x91FA,
+ 25155 - 11905: 0xECE7,
+ 25156 - 11905: 0x91FB,
+ 25157 - 11905: 0x91FC,
+ 25158 - 11905: 0x91FD,
+ 25159 - 11905: 0xC9C8,
+ 25160 - 11905: 0xECE8,
+ 25161 - 11905: 0xECE9,
+ 25162 - 11905: 0x91FE,
+ 25163 - 11905: 0xCAD6,
+ 25164 - 11905: 0xDED0,
+ 25165 - 11905: 0xB2C5,
+ 25166 - 11905: 0xD4FA,
+ 25167 - 11905: 0x9240,
+ 25168 - 11905: 0x9241,
+ 25169 - 11905: 0xC6CB,
+ 25170 - 11905: 0xB0C7,
+ 25171 - 11905: 0xB4F2,
+ 25172 - 11905: 0xC8D3,
+ 25173 - 11905: 0x9242,
+ 25174 - 11905: 0x9243,
+ 25175 - 11905: 0x9244,
+ 25176 - 11905: 0xCDD0,
+ 25177 - 11905: 0x9245,
+ 25178 - 11905: 0x9246,
+ 25179 - 11905: 0xBFB8,
+ 25180 - 11905: 0x9247,
+ 25181 - 11905: 0x9248,
+ 25182 - 11905: 0x9249,
+ 25183 - 11905: 0x924A,
+ 25184 - 11905: 0x924B,
+ 25185 - 11905: 0x924C,
+ 25186 - 11905: 0x924D,
+ 25187 - 11905: 0xBFDB,
+ 25188 - 11905: 0x924E,
+ 25189 - 11905: 0x924F,
+ 25190 - 11905: 0xC7A4,
+ 25191 - 11905: 0xD6B4,
+ 25192 - 11905: 0x9250,
+ 25193 - 11905: 0xC0A9,
+ 25194 - 11905: 0xDED1,
+ 25195 - 11905: 0xC9A8,
+ 25196 - 11905: 0xD1EF,
+ 25197 - 11905: 0xC5A4,
+ 25198 - 11905: 0xB0E7,
+ 25199 - 11905: 0xB3B6,
+ 25200 - 11905: 0xC8C5,
+ 25201 - 11905: 0x9251,
+ 25202 - 11905: 0x9252,
+ 25203 - 11905: 0xB0E2,
+ 25204 - 11905: 0x9253,
+ 25205 - 11905: 0x9254,
+ 25206 - 11905: 0xB7F6,
+ 25207 - 11905: 0x9255,
+ 25208 - 11905: 0x9256,
+ 25209 - 11905: 0xC5FA,
+ 25210 - 11905: 0x9257,
+ 25211 - 11905: 0x9258,
+ 25212 - 11905: 0xB6F3,
+ 25213 - 11905: 0x9259,
+ 25214 - 11905: 0xD5D2,
+ 25215 - 11905: 0xB3D0,
+ 25216 - 11905: 0xBCBC,
+ 25217 - 11905: 0x925A,
+ 25218 - 11905: 0x925B,
+ 25219 - 11905: 0x925C,
+ 25220 - 11905: 0xB3AD,
+ 25221 - 11905: 0x925D,
+ 25222 - 11905: 0x925E,
+ 25223 - 11905: 0x925F,
+ 25224 - 11905: 0x9260,
+ 25225 - 11905: 0xBEF1,
+ 25226 - 11905: 0xB0D1,
+ 25227 - 11905: 0x9261,
+ 25228 - 11905: 0x9262,
+ 25229 - 11905: 0x9263,
+ 25230 - 11905: 0x9264,
+ 25231 - 11905: 0x9265,
+ 25232 - 11905: 0x9266,
+ 25233 - 11905: 0xD2D6,
+ 25234 - 11905: 0xCAE3,
+ 25235 - 11905: 0xD7A5,
+ 25236 - 11905: 0x9267,
+ 25237 - 11905: 0xCDB6,
+ 25238 - 11905: 0xB6B6,
+ 25239 - 11905: 0xBFB9,
+ 25240 - 11905: 0xD5DB,
+ 25241 - 11905: 0x9268,
+ 25242 - 11905: 0xB8A7,
+ 25243 - 11905: 0xC5D7,
+ 25244 - 11905: 0x9269,
+ 25245 - 11905: 0x926A,
+ 25246 - 11905: 0x926B,
+ 25247 - 11905: 0xDED2,
+ 25248 - 11905: 0xBFD9,
+ 25249 - 11905: 0xC2D5,
+ 25250 - 11905: 0xC7C0,
+ 25251 - 11905: 0x926C,
+ 25252 - 11905: 0xBBA4,
+ 25253 - 11905: 0xB1A8,
+ 25254 - 11905: 0x926D,
+ 25255 - 11905: 0x926E,
+ 25256 - 11905: 0xC5EA,
+ 25257 - 11905: 0x926F,
+ 25258 - 11905: 0x9270,
+ 25259 - 11905: 0xC5FB,
+ 25260 - 11905: 0xCCA7,
+ 25261 - 11905: 0x9271,
+ 25262 - 11905: 0x9272,
+ 25263 - 11905: 0x9273,
+ 25264 - 11905: 0x9274,
+ 25265 - 11905: 0xB1A7,
+ 25266 - 11905: 0x9275,
+ 25267 - 11905: 0x9276,
+ 25268 - 11905: 0x9277,
+ 25269 - 11905: 0xB5D6,
+ 25270 - 11905: 0x9278,
+ 25271 - 11905: 0x9279,
+ 25272 - 11905: 0x927A,
+ 25273 - 11905: 0xC4A8,
+ 25274 - 11905: 0x927B,
+ 25275 - 11905: 0xDED3,
+ 25276 - 11905: 0xD1BA,
+ 25277 - 11905: 0xB3E9,
+ 25278 - 11905: 0x927C,
+ 25279 - 11905: 0xC3F2,
+ 25280 - 11905: 0x927D,
+ 25281 - 11905: 0x927E,
+ 25282 - 11905: 0xB7F7,
+ 25283 - 11905: 0x9280,
+ 25284 - 11905: 0xD6F4,
+ 25285 - 11905: 0xB5A3,
+ 25286 - 11905: 0xB2F0,
+ 25287 - 11905: 0xC4B4,
+ 25288 - 11905: 0xC4E9,
+ 25289 - 11905: 0xC0AD,
+ 25290 - 11905: 0xDED4,
+ 25291 - 11905: 0x9281,
+ 25292 - 11905: 0xB0E8,
+ 25293 - 11905: 0xC5C4,
+ 25294 - 11905: 0xC1E0,
+ 25295 - 11905: 0x9282,
+ 25296 - 11905: 0xB9D5,
+ 25297 - 11905: 0x9283,
+ 25298 - 11905: 0xBEDC,
+ 25299 - 11905: 0xCDD8,
+ 25300 - 11905: 0xB0CE,
+ 25301 - 11905: 0x9284,
+ 25302 - 11905: 0xCDCF,
+ 25303 - 11905: 0xDED6,
+ 25304 - 11905: 0xBED0,
+ 25305 - 11905: 0xD7BE,
+ 25306 - 11905: 0xDED5,
+ 25307 - 11905: 0xD5D0,
+ 25308 - 11905: 0xB0DD,
+ 25309 - 11905: 0x9285,
+ 25310 - 11905: 0x9286,
+ 25311 - 11905: 0xC4E2,
+ 25312 - 11905: 0x9287,
+ 25313 - 11905: 0x9288,
+ 25314 - 11905: 0xC2A3,
+ 25315 - 11905: 0xBCF0,
+ 25316 - 11905: 0x9289,
+ 25317 - 11905: 0xD3B5,
+ 25318 - 11905: 0xC0B9,
+ 25319 - 11905: 0xC5A1,
+ 25320 - 11905: 0xB2A6,
+ 25321 - 11905: 0xD4F1,
+ 25322 - 11905: 0x928A,
+ 25323 - 11905: 0x928B,
+ 25324 - 11905: 0xC0A8,
+ 25325 - 11905: 0xCAC3,
+ 25326 - 11905: 0xDED7,
+ 25327 - 11905: 0xD5FC,
+ 25328 - 11905: 0x928C,
+ 25329 - 11905: 0xB9B0,
+ 25330 - 11905: 0x928D,
+ 25331 - 11905: 0xC8AD,
+ 25332 - 11905: 0xCBA9,
+ 25333 - 11905: 0x928E,
+ 25334 - 11905: 0xDED9,
+ 25335 - 11905: 0xBFBD,
+ 25336 - 11905: 0x928F,
+ 25337 - 11905: 0x9290,
+ 25338 - 11905: 0x9291,
+ 25339 - 11905: 0x9292,
+ 25340 - 11905: 0xC6B4,
+ 25341 - 11905: 0xD7A7,
+ 25342 - 11905: 0xCAB0,
+ 25343 - 11905: 0xC4C3,
+ 25344 - 11905: 0x9293,
+ 25345 - 11905: 0xB3D6,
+ 25346 - 11905: 0xB9D2,
+ 25347 - 11905: 0x9294,
+ 25348 - 11905: 0x9295,
+ 25349 - 11905: 0x9296,
+ 25350 - 11905: 0x9297,
+ 25351 - 11905: 0xD6B8,
+ 25352 - 11905: 0xEAFC,
+ 25353 - 11905: 0xB0B4,
+ 25354 - 11905: 0x9298,
+ 25355 - 11905: 0x9299,
+ 25356 - 11905: 0x929A,
+ 25357 - 11905: 0x929B,
+ 25358 - 11905: 0xBFE6,
+ 25359 - 11905: 0x929C,
+ 25360 - 11905: 0x929D,
+ 25361 - 11905: 0xCCF4,
+ 25362 - 11905: 0x929E,
+ 25363 - 11905: 0x929F,
+ 25364 - 11905: 0x92A0,
+ 25365 - 11905: 0x92A1,
+ 25366 - 11905: 0xCDDA,
+ 25367 - 11905: 0x92A2,
+ 25368 - 11905: 0x92A3,
+ 25369 - 11905: 0x92A4,
+ 25370 - 11905: 0xD6BF,
+ 25371 - 11905: 0xC2CE,
+ 25372 - 11905: 0x92A5,
+ 25373 - 11905: 0xCECE,
+ 25374 - 11905: 0xCCA2,
+ 25375 - 11905: 0xD0AE,
+ 25376 - 11905: 0xC4D3,
+ 25377 - 11905: 0xB5B2,
+ 25378 - 11905: 0xDED8,
+ 25379 - 11905: 0xD5F5,
+ 25380 - 11905: 0xBCB7,
+ 25381 - 11905: 0xBBD3,
+ 25382 - 11905: 0x92A6,
+ 25383 - 11905: 0x92A7,
+ 25384 - 11905: 0xB0A4,
+ 25385 - 11905: 0x92A8,
+ 25386 - 11905: 0xC5B2,
+ 25387 - 11905: 0xB4EC,
+ 25388 - 11905: 0x92A9,
+ 25389 - 11905: 0x92AA,
+ 25390 - 11905: 0x92AB,
+ 25391 - 11905: 0xD5F1,
+ 25392 - 11905: 0x92AC,
+ 25393 - 11905: 0x92AD,
+ 25394 - 11905: 0xEAFD,
+ 25395 - 11905: 0x92AE,
+ 25396 - 11905: 0x92AF,
+ 25397 - 11905: 0x92B0,
+ 25398 - 11905: 0x92B1,
+ 25399 - 11905: 0x92B2,
+ 25400 - 11905: 0x92B3,
+ 25401 - 11905: 0xDEDA,
+ 25402 - 11905: 0xCDA6,
+ 25403 - 11905: 0x92B4,
+ 25404 - 11905: 0x92B5,
+ 25405 - 11905: 0xCDEC,
+ 25406 - 11905: 0x92B6,
+ 25407 - 11905: 0x92B7,
+ 25408 - 11905: 0x92B8,
+ 25409 - 11905: 0x92B9,
+ 25410 - 11905: 0xCEE6,
+ 25411 - 11905: 0xDEDC,
+ 25412 - 11905: 0x92BA,
+ 25413 - 11905: 0xCDB1,
+ 25414 - 11905: 0xC0A6,
+ 25415 - 11905: 0x92BB,
+ 25416 - 11905: 0x92BC,
+ 25417 - 11905: 0xD7BD,
+ 25418 - 11905: 0x92BD,
+ 25419 - 11905: 0xDEDB,
+ 25420 - 11905: 0xB0C6,
+ 25421 - 11905: 0xBAB4,
+ 25422 - 11905: 0xC9D3,
+ 25423 - 11905: 0xC4F3,
+ 25424 - 11905: 0xBEE8,
+ 25425 - 11905: 0x92BE,
+ 25426 - 11905: 0x92BF,
+ 25427 - 11905: 0x92C0,
+ 25428 - 11905: 0x92C1,
+ 25429 - 11905: 0xB2B6,
+ 25430 - 11905: 0x92C2,
+ 25431 - 11905: 0x92C3,
+ 25432 - 11905: 0x92C4,
+ 25433 - 11905: 0x92C5,
+ 25434 - 11905: 0x92C6,
+ 25435 - 11905: 0x92C7,
+ 25436 - 11905: 0x92C8,
+ 25437 - 11905: 0x92C9,
+ 25438 - 11905: 0xC0CC,
+ 25439 - 11905: 0xCBF0,
+ 25440 - 11905: 0x92CA,
+ 25441 - 11905: 0xBCF1,
+ 25442 - 11905: 0xBBBB,
+ 25443 - 11905: 0xB5B7,
+ 25444 - 11905: 0x92CB,
+ 25445 - 11905: 0x92CC,
+ 25446 - 11905: 0x92CD,
+ 25447 - 11905: 0xC5F5,
+ 25448 - 11905: 0x92CE,
+ 25449 - 11905: 0xDEE6,
+ 25450 - 11905: 0x92CF,
+ 25451 - 11905: 0x92D0,
+ 25452 - 11905: 0x92D1,
+ 25453 - 11905: 0xDEE3,
+ 25454 - 11905: 0xBEDD,
+ 25455 - 11905: 0x92D2,
+ 25456 - 11905: 0x92D3,
+ 25457 - 11905: 0xDEDF,
+ 25458 - 11905: 0x92D4,
+ 25459 - 11905: 0x92D5,
+ 25460 - 11905: 0x92D6,
+ 25461 - 11905: 0x92D7,
+ 25462 - 11905: 0xB4B7,
+ 25463 - 11905: 0xBDDD,
+ 25464 - 11905: 0x92D8,
+ 25465 - 11905: 0x92D9,
+ 25466 - 11905: 0xDEE0,
+ 25467 - 11905: 0xC4ED,
+ 25468 - 11905: 0x92DA,
+ 25469 - 11905: 0x92DB,
+ 25470 - 11905: 0x92DC,
+ 25471 - 11905: 0x92DD,
+ 25472 - 11905: 0xCFC6,
+ 25473 - 11905: 0x92DE,
+ 25474 - 11905: 0xB5E0,
+ 25475 - 11905: 0x92DF,
+ 25476 - 11905: 0x92E0,
+ 25477 - 11905: 0x92E1,
+ 25478 - 11905: 0x92E2,
+ 25479 - 11905: 0xB6DE,
+ 25480 - 11905: 0xCADA,
+ 25481 - 11905: 0xB5F4,
+ 25482 - 11905: 0xDEE5,
+ 25483 - 11905: 0x92E3,
+ 25484 - 11905: 0xD5C6,
+ 25485 - 11905: 0x92E4,
+ 25486 - 11905: 0xDEE1,
+ 25487 - 11905: 0xCCCD,
+ 25488 - 11905: 0xC6FE,
+ 25489 - 11905: 0x92E5,
+ 25490 - 11905: 0xC5C5,
+ 25491 - 11905: 0x92E6,
+ 25492 - 11905: 0x92E7,
+ 25493 - 11905: 0x92E8,
+ 25494 - 11905: 0xD2B4,
+ 25495 - 11905: 0x92E9,
+ 25496 - 11905: 0xBEF2,
+ 25497 - 11905: 0x92EA,
+ 25498 - 11905: 0x92EB,
+ 25499 - 11905: 0x92EC,
+ 25500 - 11905: 0x92ED,
+ 25501 - 11905: 0x92EE,
+ 25502 - 11905: 0x92EF,
+ 25503 - 11905: 0x92F0,
+ 25504 - 11905: 0xC2D3,
+ 25505 - 11905: 0x92F1,
+ 25506 - 11905: 0xCCBD,
+ 25507 - 11905: 0xB3B8,
+ 25508 - 11905: 0x92F2,
+ 25509 - 11905: 0xBDD3,
+ 25510 - 11905: 0x92F3,
+ 25511 - 11905: 0xBFD8,
+ 25512 - 11905: 0xCDC6,
+ 25513 - 11905: 0xD1DA,
+ 25514 - 11905: 0xB4EB,
+ 25515 - 11905: 0x92F4,
+ 25516 - 11905: 0xDEE4,
+ 25517 - 11905: 0xDEDD,
+ 25518 - 11905: 0xDEE7,
+ 25519 - 11905: 0x92F5,
+ 25520 - 11905: 0xEAFE,
+ 25521 - 11905: 0x92F6,
+ 25522 - 11905: 0x92F7,
+ 25523 - 11905: 0xC2B0,
+ 25524 - 11905: 0xDEE2,
+ 25525 - 11905: 0x92F8,
+ 25526 - 11905: 0x92F9,
+ 25527 - 11905: 0xD6C0,
+ 25528 - 11905: 0xB5A7,
+ 25529 - 11905: 0x92FA,
+ 25530 - 11905: 0xB2F4,
+ 25531 - 11905: 0x92FB,
+ 25532 - 11905: 0xDEE8,
+ 25533 - 11905: 0x92FC,
+ 25534 - 11905: 0xDEF2,
+ 25535 - 11905: 0x92FD,
+ 25536 - 11905: 0x92FE,
+ 25537 - 11905: 0x9340,
+ 25538 - 11905: 0x9341,
+ 25539 - 11905: 0x9342,
+ 25540 - 11905: 0xDEED,
+ 25541 - 11905: 0x9343,
+ 25542 - 11905: 0xDEF1,
+ 25543 - 11905: 0x9344,
+ 25544 - 11905: 0x9345,
+ 25545 - 11905: 0xC8E0,
+ 25546 - 11905: 0x9346,
+ 25547 - 11905: 0x9347,
+ 25548 - 11905: 0x9348,
+ 25549 - 11905: 0xD7E1,
+ 25550 - 11905: 0xDEEF,
+ 25551 - 11905: 0xC3E8,
+ 25552 - 11905: 0xCCE1,
+ 25553 - 11905: 0x9349,
+ 25554 - 11905: 0xB2E5,
+ 25555 - 11905: 0x934A,
+ 25556 - 11905: 0x934B,
+ 25557 - 11905: 0x934C,
+ 25558 - 11905: 0xD2BE,
+ 25559 - 11905: 0x934D,
+ 25560 - 11905: 0x934E,
+ 25561 - 11905: 0x934F,
+ 25562 - 11905: 0x9350,
+ 25563 - 11905: 0x9351,
+ 25564 - 11905: 0x9352,
+ 25565 - 11905: 0x9353,
+ 25566 - 11905: 0xDEEE,
+ 25567 - 11905: 0x9354,
+ 25568 - 11905: 0xDEEB,
+ 25569 - 11905: 0xCED5,
+ 25570 - 11905: 0x9355,
+ 25571 - 11905: 0xB4A7,
+ 25572 - 11905: 0x9356,
+ 25573 - 11905: 0x9357,
+ 25574 - 11905: 0x9358,
+ 25575 - 11905: 0x9359,
+ 25576 - 11905: 0x935A,
+ 25577 - 11905: 0xBFAB,
+ 25578 - 11905: 0xBEBE,
+ 25579 - 11905: 0x935B,
+ 25580 - 11905: 0x935C,
+ 25581 - 11905: 0xBDD2,
+ 25582 - 11905: 0x935D,
+ 25583 - 11905: 0x935E,
+ 25584 - 11905: 0x935F,
+ 25585 - 11905: 0x9360,
+ 25586 - 11905: 0xDEE9,
+ 25587 - 11905: 0x9361,
+ 25588 - 11905: 0xD4AE,
+ 25589 - 11905: 0x9362,
+ 25590 - 11905: 0xDEDE,
+ 25591 - 11905: 0x9363,
+ 25592 - 11905: 0xDEEA,
+ 25593 - 11905: 0x9364,
+ 25594 - 11905: 0x9365,
+ 25595 - 11905: 0x9366,
+ 25596 - 11905: 0x9367,
+ 25597 - 11905: 0xC0BF,
+ 25598 - 11905: 0x9368,
+ 25599 - 11905: 0xDEEC,
+ 25600 - 11905: 0xB2F3,
+ 25601 - 11905: 0xB8E9,
+ 25602 - 11905: 0xC2A7,
+ 25603 - 11905: 0x9369,
+ 25604 - 11905: 0x936A,
+ 25605 - 11905: 0xBDC1,
+ 25606 - 11905: 0x936B,
+ 25607 - 11905: 0x936C,
+ 25608 - 11905: 0x936D,
+ 25609 - 11905: 0x936E,
+ 25610 - 11905: 0x936F,
+ 25611 - 11905: 0xDEF5,
+ 25612 - 11905: 0xDEF8,
+ 25613 - 11905: 0x9370,
+ 25614 - 11905: 0x9371,
+ 25615 - 11905: 0xB2AB,
+ 25616 - 11905: 0xB4A4,
+ 25617 - 11905: 0x9372,
+ 25618 - 11905: 0x9373,
+ 25619 - 11905: 0xB4EA,
+ 25620 - 11905: 0xC9A6,
+ 25621 - 11905: 0x9374,
+ 25622 - 11905: 0x9375,
+ 25623 - 11905: 0x9376,
+ 25624 - 11905: 0x9377,
+ 25625 - 11905: 0x9378,
+ 25626 - 11905: 0x9379,
+ 25627 - 11905: 0xDEF6,
+ 25628 - 11905: 0xCBD1,
+ 25629 - 11905: 0x937A,
+ 25630 - 11905: 0xB8E3,
+ 25631 - 11905: 0x937B,
+ 25632 - 11905: 0xDEF7,
+ 25633 - 11905: 0xDEFA,
+ 25634 - 11905: 0x937C,
+ 25635 - 11905: 0x937D,
+ 25636 - 11905: 0x937E,
+ 25637 - 11905: 0x9380,
+ 25638 - 11905: 0xDEF9,
+ 25639 - 11905: 0x9381,
+ 25640 - 11905: 0x9382,
+ 25641 - 11905: 0x9383,
+ 25642 - 11905: 0xCCC2,
+ 25643 - 11905: 0x9384,
+ 25644 - 11905: 0xB0E1,
+ 25645 - 11905: 0xB4EE,
+ 25646 - 11905: 0x9385,
+ 25647 - 11905: 0x9386,
+ 25648 - 11905: 0x9387,
+ 25649 - 11905: 0x9388,
+ 25650 - 11905: 0x9389,
+ 25651 - 11905: 0x938A,
+ 25652 - 11905: 0xE5BA,
+ 25653 - 11905: 0x938B,
+ 25654 - 11905: 0x938C,
+ 25655 - 11905: 0x938D,
+ 25656 - 11905: 0x938E,
+ 25657 - 11905: 0x938F,
+ 25658 - 11905: 0xD0AF,
+ 25659 - 11905: 0x9390,
+ 25660 - 11905: 0x9391,
+ 25661 - 11905: 0xB2EB,
+ 25662 - 11905: 0x9392,
+ 25663 - 11905: 0xEBA1,
+ 25664 - 11905: 0x9393,
+ 25665 - 11905: 0xDEF4,
+ 25666 - 11905: 0x9394,
+ 25667 - 11905: 0x9395,
+ 25668 - 11905: 0xC9E3,
+ 25669 - 11905: 0xDEF3,
+ 25670 - 11905: 0xB0DA,
+ 25671 - 11905: 0xD2A1,
+ 25672 - 11905: 0xB1F7,
+ 25673 - 11905: 0x9396,
+ 25674 - 11905: 0xCCAF,
+ 25675 - 11905: 0x9397,
+ 25676 - 11905: 0x9398,
+ 25677 - 11905: 0x9399,
+ 25678 - 11905: 0x939A,
+ 25679 - 11905: 0x939B,
+ 25680 - 11905: 0x939C,
+ 25681 - 11905: 0x939D,
+ 25682 - 11905: 0xDEF0,
+ 25683 - 11905: 0x939E,
+ 25684 - 11905: 0xCBA4,
+ 25685 - 11905: 0x939F,
+ 25686 - 11905: 0x93A0,
+ 25687 - 11905: 0x93A1,
+ 25688 - 11905: 0xD5AA,
+ 25689 - 11905: 0x93A2,
+ 25690 - 11905: 0x93A3,
+ 25691 - 11905: 0x93A4,
+ 25692 - 11905: 0x93A5,
+ 25693 - 11905: 0x93A6,
+ 25694 - 11905: 0xDEFB,
+ 25695 - 11905: 0x93A7,
+ 25696 - 11905: 0x93A8,
+ 25697 - 11905: 0x93A9,
+ 25698 - 11905: 0x93AA,
+ 25699 - 11905: 0x93AB,
+ 25700 - 11905: 0x93AC,
+ 25701 - 11905: 0x93AD,
+ 25702 - 11905: 0x93AE,
+ 25703 - 11905: 0xB4DD,
+ 25704 - 11905: 0x93AF,
+ 25705 - 11905: 0xC4A6,
+ 25706 - 11905: 0x93B0,
+ 25707 - 11905: 0x93B1,
+ 25708 - 11905: 0x93B2,
+ 25709 - 11905: 0xDEFD,
+ 25710 - 11905: 0x93B3,
+ 25711 - 11905: 0x93B4,
+ 25712 - 11905: 0x93B5,
+ 25713 - 11905: 0x93B6,
+ 25714 - 11905: 0x93B7,
+ 25715 - 11905: 0x93B8,
+ 25716 - 11905: 0x93B9,
+ 25717 - 11905: 0x93BA,
+ 25718 - 11905: 0x93BB,
+ 25719 - 11905: 0x93BC,
+ 25720 - 11905: 0xC3FE,
+ 25721 - 11905: 0xC4A1,
+ 25722 - 11905: 0xDFA1,
+ 25723 - 11905: 0x93BD,
+ 25724 - 11905: 0x93BE,
+ 25725 - 11905: 0x93BF,
+ 25726 - 11905: 0x93C0,
+ 25727 - 11905: 0x93C1,
+ 25728 - 11905: 0x93C2,
+ 25729 - 11905: 0x93C3,
+ 25730 - 11905: 0xC1CC,
+ 25731 - 11905: 0x93C4,
+ 25732 - 11905: 0xDEFC,
+ 25733 - 11905: 0xBEEF,
+ 25734 - 11905: 0x93C5,
+ 25735 - 11905: 0xC6B2,
+ 25736 - 11905: 0x93C6,
+ 25737 - 11905: 0x93C7,
+ 25738 - 11905: 0x93C8,
+ 25739 - 11905: 0x93C9,
+ 25740 - 11905: 0x93CA,
+ 25741 - 11905: 0x93CB,
+ 25742 - 11905: 0x93CC,
+ 25743 - 11905: 0x93CD,
+ 25744 - 11905: 0x93CE,
+ 25745 - 11905: 0xB3C5,
+ 25746 - 11905: 0xC8F6,
+ 25747 - 11905: 0x93CF,
+ 25748 - 11905: 0x93D0,
+ 25749 - 11905: 0xCBBA,
+ 25750 - 11905: 0xDEFE,
+ 25751 - 11905: 0x93D1,
+ 25752 - 11905: 0x93D2,
+ 25753 - 11905: 0xDFA4,
+ 25754 - 11905: 0x93D3,
+ 25755 - 11905: 0x93D4,
+ 25756 - 11905: 0x93D5,
+ 25757 - 11905: 0x93D6,
+ 25758 - 11905: 0xD7B2,
+ 25759 - 11905: 0x93D7,
+ 25760 - 11905: 0x93D8,
+ 25761 - 11905: 0x93D9,
+ 25762 - 11905: 0x93DA,
+ 25763 - 11905: 0x93DB,
+ 25764 - 11905: 0xB3B7,
+ 25765 - 11905: 0x93DC,
+ 25766 - 11905: 0x93DD,
+ 25767 - 11905: 0x93DE,
+ 25768 - 11905: 0x93DF,
+ 25769 - 11905: 0xC1C3,
+ 25770 - 11905: 0x93E0,
+ 25771 - 11905: 0x93E1,
+ 25772 - 11905: 0xC7CB,
+ 25773 - 11905: 0xB2A5,
+ 25774 - 11905: 0xB4E9,
+ 25775 - 11905: 0x93E2,
+ 25776 - 11905: 0xD7AB,
+ 25777 - 11905: 0x93E3,
+ 25778 - 11905: 0x93E4,
+ 25779 - 11905: 0x93E5,
+ 25780 - 11905: 0x93E6,
+ 25781 - 11905: 0xC4EC,
+ 25782 - 11905: 0x93E7,
+ 25783 - 11905: 0xDFA2,
+ 25784 - 11905: 0xDFA3,
+ 25785 - 11905: 0x93E8,
+ 25786 - 11905: 0xDFA5,
+ 25787 - 11905: 0x93E9,
+ 25788 - 11905: 0xBAB3,
+ 25789 - 11905: 0x93EA,
+ 25790 - 11905: 0x93EB,
+ 25791 - 11905: 0x93EC,
+ 25792 - 11905: 0xDFA6,
+ 25793 - 11905: 0x93ED,
+ 25794 - 11905: 0xC0DE,
+ 25795 - 11905: 0x93EE,
+ 25796 - 11905: 0x93EF,
+ 25797 - 11905: 0xC9C3,
+ 25798 - 11905: 0x93F0,
+ 25799 - 11905: 0x93F1,
+ 25800 - 11905: 0x93F2,
+ 25801 - 11905: 0x93F3,
+ 25802 - 11905: 0x93F4,
+ 25803 - 11905: 0x93F5,
+ 25804 - 11905: 0x93F6,
+ 25805 - 11905: 0xB2D9,
+ 25806 - 11905: 0xC7E6,
+ 25807 - 11905: 0x93F7,
+ 25808 - 11905: 0xDFA7,
+ 25809 - 11905: 0x93F8,
+ 25810 - 11905: 0xC7DC,
+ 25811 - 11905: 0x93F9,
+ 25812 - 11905: 0x93FA,
+ 25813 - 11905: 0x93FB,
+ 25814 - 11905: 0x93FC,
+ 25815 - 11905: 0xDFA8,
+ 25816 - 11905: 0xEBA2,
+ 25817 - 11905: 0x93FD,
+ 25818 - 11905: 0x93FE,
+ 25819 - 11905: 0x9440,
+ 25820 - 11905: 0x9441,
+ 25821 - 11905: 0x9442,
+ 25822 - 11905: 0xCBD3,
+ 25823 - 11905: 0x9443,
+ 25824 - 11905: 0x9444,
+ 25825 - 11905: 0x9445,
+ 25826 - 11905: 0xDFAA,
+ 25827 - 11905: 0x9446,
+ 25828 - 11905: 0xDFA9,
+ 25829 - 11905: 0x9447,
+ 25830 - 11905: 0xB2C1,
+ 25831 - 11905: 0x9448,
+ 25832 - 11905: 0x9449,
+ 25833 - 11905: 0x944A,
+ 25834 - 11905: 0x944B,
+ 25835 - 11905: 0x944C,
+ 25836 - 11905: 0x944D,
+ 25837 - 11905: 0x944E,
+ 25838 - 11905: 0x944F,
+ 25839 - 11905: 0x9450,
+ 25840 - 11905: 0x9451,
+ 25841 - 11905: 0x9452,
+ 25842 - 11905: 0x9453,
+ 25843 - 11905: 0x9454,
+ 25844 - 11905: 0x9455,
+ 25845 - 11905: 0x9456,
+ 25846 - 11905: 0x9457,
+ 25847 - 11905: 0x9458,
+ 25848 - 11905: 0x9459,
+ 25849 - 11905: 0x945A,
+ 25850 - 11905: 0x945B,
+ 25851 - 11905: 0x945C,
+ 25852 - 11905: 0x945D,
+ 25853 - 11905: 0x945E,
+ 25854 - 11905: 0x945F,
+ 25855 - 11905: 0x9460,
+ 25856 - 11905: 0xC5CA,
+ 25857 - 11905: 0x9461,
+ 25858 - 11905: 0x9462,
+ 25859 - 11905: 0x9463,
+ 25860 - 11905: 0x9464,
+ 25861 - 11905: 0x9465,
+ 25862 - 11905: 0x9466,
+ 25863 - 11905: 0x9467,
+ 25864 - 11905: 0x9468,
+ 25865 - 11905: 0xDFAB,
+ 25866 - 11905: 0x9469,
+ 25867 - 11905: 0x946A,
+ 25868 - 11905: 0x946B,
+ 25869 - 11905: 0x946C,
+ 25870 - 11905: 0x946D,
+ 25871 - 11905: 0x946E,
+ 25872 - 11905: 0x946F,
+ 25873 - 11905: 0x9470,
+ 25874 - 11905: 0xD4DC,
+ 25875 - 11905: 0x9471,
+ 25876 - 11905: 0x9472,
+ 25877 - 11905: 0x9473,
+ 25878 - 11905: 0x9474,
+ 25879 - 11905: 0x9475,
+ 25880 - 11905: 0xC8C1,
+ 25881 - 11905: 0x9476,
+ 25882 - 11905: 0x9477,
+ 25883 - 11905: 0x9478,
+ 25884 - 11905: 0x9479,
+ 25885 - 11905: 0x947A,
+ 25886 - 11905: 0x947B,
+ 25887 - 11905: 0x947C,
+ 25888 - 11905: 0x947D,
+ 25889 - 11905: 0x947E,
+ 25890 - 11905: 0x9480,
+ 25891 - 11905: 0x9481,
+ 25892 - 11905: 0x9482,
+ 25893 - 11905: 0xDFAC,
+ 25894 - 11905: 0x9483,
+ 25895 - 11905: 0x9484,
+ 25896 - 11905: 0x9485,
+ 25897 - 11905: 0x9486,
+ 25898 - 11905: 0x9487,
+ 25899 - 11905: 0xBEF0,
+ 25900 - 11905: 0x9488,
+ 25901 - 11905: 0x9489,
+ 25902 - 11905: 0xDFAD,
+ 25903 - 11905: 0xD6A7,
+ 25904 - 11905: 0x948A,
+ 25905 - 11905: 0x948B,
+ 25906 - 11905: 0x948C,
+ 25907 - 11905: 0x948D,
+ 25908 - 11905: 0xEAB7,
+ 25909 - 11905: 0xEBB6,
+ 25910 - 11905: 0xCAD5,
+ 25911 - 11905: 0x948E,
+ 25912 - 11905: 0xD8FC,
+ 25913 - 11905: 0xB8C4,
+ 25914 - 11905: 0x948F,
+ 25915 - 11905: 0xB9A5,
+ 25916 - 11905: 0x9490,
+ 25917 - 11905: 0x9491,
+ 25918 - 11905: 0xB7C5,
+ 25919 - 11905: 0xD5FE,
+ 25920 - 11905: 0x9492,
+ 25921 - 11905: 0x9493,
+ 25922 - 11905: 0x9494,
+ 25923 - 11905: 0x9495,
+ 25924 - 11905: 0x9496,
+ 25925 - 11905: 0xB9CA,
+ 25926 - 11905: 0x9497,
+ 25927 - 11905: 0x9498,
+ 25928 - 11905: 0xD0A7,
+ 25929 - 11905: 0xF4CD,
+ 25930 - 11905: 0x9499,
+ 25931 - 11905: 0x949A,
+ 25932 - 11905: 0xB5D0,
+ 25933 - 11905: 0x949B,
+ 25934 - 11905: 0x949C,
+ 25935 - 11905: 0xC3F4,
+ 25936 - 11905: 0x949D,
+ 25937 - 11905: 0xBEC8,
+ 25938 - 11905: 0x949E,
+ 25939 - 11905: 0x949F,
+ 25940 - 11905: 0x94A0,
+ 25941 - 11905: 0xEBB7,
+ 25942 - 11905: 0xB0BD,
+ 25943 - 11905: 0x94A1,
+ 25944 - 11905: 0x94A2,
+ 25945 - 11905: 0xBDCC,
+ 25946 - 11905: 0x94A3,
+ 25947 - 11905: 0xC1B2,
+ 25948 - 11905: 0x94A4,
+ 25949 - 11905: 0xB1D6,
+ 25950 - 11905: 0xB3A8,
+ 25951 - 11905: 0x94A5,
+ 25952 - 11905: 0x94A6,
+ 25953 - 11905: 0x94A7,
+ 25954 - 11905: 0xB8D2,
+ 25955 - 11905: 0xC9A2,
+ 25956 - 11905: 0x94A8,
+ 25957 - 11905: 0x94A9,
+ 25958 - 11905: 0xB6D8,
+ 25959 - 11905: 0x94AA,
+ 25960 - 11905: 0x94AB,
+ 25961 - 11905: 0x94AC,
+ 25962 - 11905: 0x94AD,
+ 25963 - 11905: 0xEBB8,
+ 25964 - 11905: 0xBEB4,
+ 25965 - 11905: 0x94AE,
+ 25966 - 11905: 0x94AF,
+ 25967 - 11905: 0x94B0,
+ 25968 - 11905: 0xCAFD,
+ 25969 - 11905: 0x94B1,
+ 25970 - 11905: 0xC7C3,
+ 25971 - 11905: 0x94B2,
+ 25972 - 11905: 0xD5FB,
+ 25973 - 11905: 0x94B3,
+ 25974 - 11905: 0x94B4,
+ 25975 - 11905: 0xB7F3,
+ 25976 - 11905: 0x94B5,
+ 25977 - 11905: 0x94B6,
+ 25978 - 11905: 0x94B7,
+ 25979 - 11905: 0x94B8,
+ 25980 - 11905: 0x94B9,
+ 25981 - 11905: 0x94BA,
+ 25982 - 11905: 0x94BB,
+ 25983 - 11905: 0x94BC,
+ 25984 - 11905: 0x94BD,
+ 25985 - 11905: 0x94BE,
+ 25986 - 11905: 0x94BF,
+ 25987 - 11905: 0x94C0,
+ 25988 - 11905: 0x94C1,
+ 25989 - 11905: 0x94C2,
+ 25990 - 11905: 0x94C3,
+ 25991 - 11905: 0xCEC4,
+ 25992 - 11905: 0x94C4,
+ 25993 - 11905: 0x94C5,
+ 25994 - 11905: 0x94C6,
+ 25995 - 11905: 0xD5AB,
+ 25996 - 11905: 0xB1F3,
+ 25997 - 11905: 0x94C7,
+ 25998 - 11905: 0x94C8,
+ 25999 - 11905: 0x94C9,
+ 26000 - 11905: 0xECB3,
+ 26001 - 11905: 0xB0DF,
+ 26002 - 11905: 0x94CA,
+ 26003 - 11905: 0xECB5,
+ 26004 - 11905: 0x94CB,
+ 26005 - 11905: 0x94CC,
+ 26006 - 11905: 0x94CD,
+ 26007 - 11905: 0xB6B7,
+ 26008 - 11905: 0x94CE,
+ 26009 - 11905: 0xC1CF,
+ 26010 - 11905: 0x94CF,
+ 26011 - 11905: 0xF5FA,
+ 26012 - 11905: 0xD0B1,
+ 26013 - 11905: 0x94D0,
+ 26014 - 11905: 0x94D1,
+ 26015 - 11905: 0xD5E5,
+ 26016 - 11905: 0x94D2,
+ 26017 - 11905: 0xCED3,
+ 26018 - 11905: 0x94D3,
+ 26019 - 11905: 0x94D4,
+ 26020 - 11905: 0xBDEF,
+ 26021 - 11905: 0xB3E2,
+ 26022 - 11905: 0x94D5,
+ 26023 - 11905: 0xB8AB,
+ 26024 - 11905: 0x94D6,
+ 26025 - 11905: 0xD5B6,
+ 26026 - 11905: 0x94D7,
+ 26027 - 11905: 0xEDBD,
+ 26028 - 11905: 0x94D8,
+ 26029 - 11905: 0xB6CF,
+ 26030 - 11905: 0x94D9,
+ 26031 - 11905: 0xCBB9,
+ 26032 - 11905: 0xD0C2,
+ 26033 - 11905: 0x94DA,
+ 26034 - 11905: 0x94DB,
+ 26035 - 11905: 0x94DC,
+ 26036 - 11905: 0x94DD,
+ 26037 - 11905: 0x94DE,
+ 26038 - 11905: 0x94DF,
+ 26039 - 11905: 0x94E0,
+ 26040 - 11905: 0x94E1,
+ 26041 - 11905: 0xB7BD,
+ 26042 - 11905: 0x94E2,
+ 26043 - 11905: 0x94E3,
+ 26044 - 11905: 0xECB6,
+ 26045 - 11905: 0xCAA9,
+ 26046 - 11905: 0x94E4,
+ 26047 - 11905: 0x94E5,
+ 26048 - 11905: 0x94E6,
+ 26049 - 11905: 0xC5D4,
+ 26050 - 11905: 0x94E7,
+ 26051 - 11905: 0xECB9,
+ 26052 - 11905: 0xECB8,
+ 26053 - 11905: 0xC2C3,
+ 26054 - 11905: 0xECB7,
+ 26055 - 11905: 0x94E8,
+ 26056 - 11905: 0x94E9,
+ 26057 - 11905: 0x94EA,
+ 26058 - 11905: 0x94EB,
+ 26059 - 11905: 0xD0FD,
+ 26060 - 11905: 0xECBA,
+ 26061 - 11905: 0x94EC,
+ 26062 - 11905: 0xECBB,
+ 26063 - 11905: 0xD7E5,
+ 26064 - 11905: 0x94ED,
+ 26065 - 11905: 0x94EE,
+ 26066 - 11905: 0xECBC,
+ 26067 - 11905: 0x94EF,
+ 26068 - 11905: 0x94F0,
+ 26069 - 11905: 0x94F1,
+ 26070 - 11905: 0xECBD,
+ 26071 - 11905: 0xC6EC,
+ 26072 - 11905: 0x94F2,
+ 26073 - 11905: 0x94F3,
+ 26074 - 11905: 0x94F4,
+ 26075 - 11905: 0x94F5,
+ 26076 - 11905: 0x94F6,
+ 26077 - 11905: 0x94F7,
+ 26078 - 11905: 0x94F8,
+ 26079 - 11905: 0x94F9,
+ 26080 - 11905: 0xCEDE,
+ 26081 - 11905: 0x94FA,
+ 26082 - 11905: 0xBCC8,
+ 26083 - 11905: 0x94FB,
+ 26084 - 11905: 0x94FC,
+ 26085 - 11905: 0xC8D5,
+ 26086 - 11905: 0xB5A9,
+ 26087 - 11905: 0xBEC9,
+ 26088 - 11905: 0xD6BC,
+ 26089 - 11905: 0xD4E7,
+ 26090 - 11905: 0x94FD,
+ 26091 - 11905: 0x94FE,
+ 26092 - 11905: 0xD1AE,
+ 26093 - 11905: 0xD0F1,
+ 26094 - 11905: 0xEAB8,
+ 26095 - 11905: 0xEAB9,
+ 26096 - 11905: 0xEABA,
+ 26097 - 11905: 0xBAB5,
+ 26098 - 11905: 0x9540,
+ 26099 - 11905: 0x9541,
+ 26100 - 11905: 0x9542,
+ 26101 - 11905: 0x9543,
+ 26102 - 11905: 0xCAB1,
+ 26103 - 11905: 0xBFF5,
+ 26104 - 11905: 0x9544,
+ 26105 - 11905: 0x9545,
+ 26106 - 11905: 0xCDFA,
+ 26107 - 11905: 0x9546,
+ 26108 - 11905: 0x9547,
+ 26109 - 11905: 0x9548,
+ 26110 - 11905: 0x9549,
+ 26111 - 11905: 0x954A,
+ 26112 - 11905: 0xEAC0,
+ 26113 - 11905: 0x954B,
+ 26114 - 11905: 0xB0BA,
+ 26115 - 11905: 0xEABE,
+ 26116 - 11905: 0x954C,
+ 26117 - 11905: 0x954D,
+ 26118 - 11905: 0xC0A5,
+ 26119 - 11905: 0x954E,
+ 26120 - 11905: 0x954F,
+ 26121 - 11905: 0x9550,
+ 26122 - 11905: 0xEABB,
+ 26123 - 11905: 0x9551,
+ 26124 - 11905: 0xB2FD,
+ 26125 - 11905: 0x9552,
+ 26126 - 11905: 0xC3F7,
+ 26127 - 11905: 0xBBE8,
+ 26128 - 11905: 0x9553,
+ 26129 - 11905: 0x9554,
+ 26130 - 11905: 0x9555,
+ 26131 - 11905: 0xD2D7,
+ 26132 - 11905: 0xCEF4,
+ 26133 - 11905: 0xEABF,
+ 26134 - 11905: 0x9556,
+ 26135 - 11905: 0x9557,
+ 26136 - 11905: 0x9558,
+ 26137 - 11905: 0xEABC,
+ 26138 - 11905: 0x9559,
+ 26139 - 11905: 0x955A,
+ 26140 - 11905: 0x955B,
+ 26141 - 11905: 0xEAC3,
+ 26142 - 11905: 0x955C,
+ 26143 - 11905: 0xD0C7,
+ 26144 - 11905: 0xD3B3,
+ 26145 - 11905: 0x955D,
+ 26146 - 11905: 0x955E,
+ 26147 - 11905: 0x955F,
+ 26148 - 11905: 0x9560,
+ 26149 - 11905: 0xB4BA,
+ 26150 - 11905: 0x9561,
+ 26151 - 11905: 0xC3C1,
+ 26152 - 11905: 0xD7F2,
+ 26153 - 11905: 0x9562,
+ 26154 - 11905: 0x9563,
+ 26155 - 11905: 0x9564,
+ 26156 - 11905: 0x9565,
+ 26157 - 11905: 0xD5D1,
+ 26158 - 11905: 0x9566,
+ 26159 - 11905: 0xCAC7,
+ 26160 - 11905: 0x9567,
+ 26161 - 11905: 0xEAC5,
+ 26162 - 11905: 0x9568,
+ 26163 - 11905: 0x9569,
+ 26164 - 11905: 0xEAC4,
+ 26165 - 11905: 0xEAC7,
+ 26166 - 11905: 0xEAC6,
+ 26167 - 11905: 0x956A,
+ 26168 - 11905: 0x956B,
+ 26169 - 11905: 0x956C,
+ 26170 - 11905: 0x956D,
+ 26171 - 11905: 0x956E,
+ 26172 - 11905: 0xD6E7,
+ 26173 - 11905: 0x956F,
+ 26174 - 11905: 0xCFD4,
+ 26175 - 11905: 0x9570,
+ 26176 - 11905: 0x9571,
+ 26177 - 11905: 0xEACB,
+ 26178 - 11905: 0x9572,
+ 26179 - 11905: 0xBBCE,
+ 26180 - 11905: 0x9573,
+ 26181 - 11905: 0x9574,
+ 26182 - 11905: 0x9575,
+ 26183 - 11905: 0x9576,
+ 26184 - 11905: 0x9577,
+ 26185 - 11905: 0x9578,
+ 26186 - 11905: 0x9579,
+ 26187 - 11905: 0xBDFA,
+ 26188 - 11905: 0xC9CE,
+ 26189 - 11905: 0x957A,
+ 26190 - 11905: 0x957B,
+ 26191 - 11905: 0xEACC,
+ 26192 - 11905: 0x957C,
+ 26193 - 11905: 0x957D,
+ 26194 - 11905: 0xC9B9,
+ 26195 - 11905: 0xCFFE,
+ 26196 - 11905: 0xEACA,
+ 26197 - 11905: 0xD4CE,
+ 26198 - 11905: 0xEACD,
+ 26199 - 11905: 0xEACF,
+ 26200 - 11905: 0x957E,
+ 26201 - 11905: 0x9580,
+ 26202 - 11905: 0xCDED,
+ 26203 - 11905: 0x9581,
+ 26204 - 11905: 0x9582,
+ 26205 - 11905: 0x9583,
+ 26206 - 11905: 0x9584,
+ 26207 - 11905: 0xEAC9,
+ 26208 - 11905: 0x9585,
+ 26209 - 11905: 0xEACE,
+ 26210 - 11905: 0x9586,
+ 26211 - 11905: 0x9587,
+ 26212 - 11905: 0xCEEE,
+ 26213 - 11905: 0x9588,
+ 26214 - 11905: 0xBBDE,
+ 26215 - 11905: 0x9589,
+ 26216 - 11905: 0xB3BF,
+ 26217 - 11905: 0x958A,
+ 26218 - 11905: 0x958B,
+ 26219 - 11905: 0x958C,
+ 26220 - 11905: 0x958D,
+ 26221 - 11905: 0x958E,
+ 26222 - 11905: 0xC6D5,
+ 26223 - 11905: 0xBEB0,
+ 26224 - 11905: 0xCEFA,
+ 26225 - 11905: 0x958F,
+ 26226 - 11905: 0x9590,
+ 26227 - 11905: 0x9591,
+ 26228 - 11905: 0xC7E7,
+ 26229 - 11905: 0x9592,
+ 26230 - 11905: 0xBEA7,
+ 26231 - 11905: 0xEAD0,
+ 26232 - 11905: 0x9593,
+ 26233 - 11905: 0x9594,
+ 26234 - 11905: 0xD6C7,
+ 26235 - 11905: 0x9595,
+ 26236 - 11905: 0x9596,
+ 26237 - 11905: 0x9597,
+ 26238 - 11905: 0xC1C0,
+ 26239 - 11905: 0x9598,
+ 26240 - 11905: 0x9599,
+ 26241 - 11905: 0x959A,
+ 26242 - 11905: 0xD4DD,
+ 26243 - 11905: 0x959B,
+ 26244 - 11905: 0xEAD1,
+ 26245 - 11905: 0x959C,
+ 26246 - 11905: 0x959D,
+ 26247 - 11905: 0xCFBE,
+ 26248 - 11905: 0x959E,
+ 26249 - 11905: 0x959F,
+ 26250 - 11905: 0x95A0,
+ 26251 - 11905: 0x95A1,
+ 26252 - 11905: 0xEAD2,
+ 26253 - 11905: 0x95A2,
+ 26254 - 11905: 0x95A3,
+ 26255 - 11905: 0x95A4,
+ 26256 - 11905: 0x95A5,
+ 26257 - 11905: 0xCAEE,
+ 26258 - 11905: 0x95A6,
+ 26259 - 11905: 0x95A7,
+ 26260 - 11905: 0x95A8,
+ 26261 - 11905: 0x95A9,
+ 26262 - 11905: 0xC5AF,
+ 26263 - 11905: 0xB0B5,
+ 26264 - 11905: 0x95AA,
+ 26265 - 11905: 0x95AB,
+ 26266 - 11905: 0x95AC,
+ 26267 - 11905: 0x95AD,
+ 26268 - 11905: 0x95AE,
+ 26269 - 11905: 0xEAD4,
+ 26270 - 11905: 0x95AF,
+ 26271 - 11905: 0x95B0,
+ 26272 - 11905: 0x95B1,
+ 26273 - 11905: 0x95B2,
+ 26274 - 11905: 0x95B3,
+ 26275 - 11905: 0x95B4,
+ 26276 - 11905: 0x95B5,
+ 26277 - 11905: 0x95B6,
+ 26278 - 11905: 0x95B7,
+ 26279 - 11905: 0xEAD3,
+ 26280 - 11905: 0xF4DF,
+ 26281 - 11905: 0x95B8,
+ 26282 - 11905: 0x95B9,
+ 26283 - 11905: 0x95BA,
+ 26284 - 11905: 0x95BB,
+ 26285 - 11905: 0x95BC,
+ 26286 - 11905: 0xC4BA,
+ 26287 - 11905: 0x95BD,
+ 26288 - 11905: 0x95BE,
+ 26289 - 11905: 0x95BF,
+ 26290 - 11905: 0x95C0,
+ 26291 - 11905: 0x95C1,
+ 26292 - 11905: 0xB1A9,
+ 26293 - 11905: 0x95C2,
+ 26294 - 11905: 0x95C3,
+ 26295 - 11905: 0x95C4,
+ 26296 - 11905: 0x95C5,
+ 26297 - 11905: 0xE5DF,
+ 26298 - 11905: 0x95C6,
+ 26299 - 11905: 0x95C7,
+ 26300 - 11905: 0x95C8,
+ 26301 - 11905: 0x95C9,
+ 26302 - 11905: 0xEAD5,
+ 26303 - 11905: 0x95CA,
+ 26304 - 11905: 0x95CB,
+ 26305 - 11905: 0x95CC,
+ 26306 - 11905: 0x95CD,
+ 26307 - 11905: 0x95CE,
+ 26308 - 11905: 0x95CF,
+ 26309 - 11905: 0x95D0,
+ 26310 - 11905: 0x95D1,
+ 26311 - 11905: 0x95D2,
+ 26312 - 11905: 0x95D3,
+ 26313 - 11905: 0x95D4,
+ 26314 - 11905: 0x95D5,
+ 26315 - 11905: 0x95D6,
+ 26316 - 11905: 0x95D7,
+ 26317 - 11905: 0x95D8,
+ 26318 - 11905: 0x95D9,
+ 26319 - 11905: 0x95DA,
+ 26320 - 11905: 0x95DB,
+ 26321 - 11905: 0x95DC,
+ 26322 - 11905: 0x95DD,
+ 26323 - 11905: 0x95DE,
+ 26324 - 11905: 0x95DF,
+ 26325 - 11905: 0x95E0,
+ 26326 - 11905: 0x95E1,
+ 26327 - 11905: 0x95E2,
+ 26328 - 11905: 0x95E3,
+ 26329 - 11905: 0xCAEF,
+ 26330 - 11905: 0x95E4,
+ 26331 - 11905: 0xEAD6,
+ 26332 - 11905: 0xEAD7,
+ 26333 - 11905: 0xC6D8,
+ 26334 - 11905: 0x95E5,
+ 26335 - 11905: 0x95E6,
+ 26336 - 11905: 0x95E7,
+ 26337 - 11905: 0x95E8,
+ 26338 - 11905: 0x95E9,
+ 26339 - 11905: 0x95EA,
+ 26340 - 11905: 0x95EB,
+ 26341 - 11905: 0x95EC,
+ 26342 - 11905: 0xEAD8,
+ 26343 - 11905: 0x95ED,
+ 26344 - 11905: 0x95EE,
+ 26345 - 11905: 0xEAD9,
+ 26346 - 11905: 0x95EF,
+ 26347 - 11905: 0x95F0,
+ 26348 - 11905: 0x95F1,
+ 26349 - 11905: 0x95F2,
+ 26350 - 11905: 0x95F3,
+ 26351 - 11905: 0x95F4,
+ 26352 - 11905: 0xD4BB,
+ 26353 - 11905: 0x95F5,
+ 26354 - 11905: 0xC7FA,
+ 26355 - 11905: 0xD2B7,
+ 26356 - 11905: 0xB8FC,
+ 26357 - 11905: 0x95F6,
+ 26358 - 11905: 0x95F7,
+ 26359 - 11905: 0xEAC2,
+ 26360 - 11905: 0x95F8,
+ 26361 - 11905: 0xB2DC,
+ 26362 - 11905: 0x95F9,
+ 26363 - 11905: 0x95FA,
+ 26364 - 11905: 0xC2FC,
+ 26365 - 11905: 0x95FB,
+ 26366 - 11905: 0xD4F8,
+ 26367 - 11905: 0xCCE6,
+ 26368 - 11905: 0xD7EE,
+ 26369 - 11905: 0x95FC,
+ 26370 - 11905: 0x95FD,
+ 26371 - 11905: 0x95FE,
+ 26372 - 11905: 0x9640,
+ 26373 - 11905: 0x9641,
+ 26374 - 11905: 0x9642,
+ 26375 - 11905: 0x9643,
+ 26376 - 11905: 0xD4C2,
+ 26377 - 11905: 0xD3D0,
+ 26378 - 11905: 0xEBC3,
+ 26379 - 11905: 0xC5F3,
+ 26380 - 11905: 0x9644,
+ 26381 - 11905: 0xB7FE,
+ 26382 - 11905: 0x9645,
+ 26383 - 11905: 0x9646,
+ 26384 - 11905: 0xEBD4,
+ 26385 - 11905: 0x9647,
+ 26386 - 11905: 0x9648,
+ 26387 - 11905: 0x9649,
+ 26388 - 11905: 0xCBB7,
+ 26389 - 11905: 0xEBDE,
+ 26390 - 11905: 0x964A,
+ 26391 - 11905: 0xC0CA,
+ 26392 - 11905: 0x964B,
+ 26393 - 11905: 0x964C,
+ 26394 - 11905: 0x964D,
+ 26395 - 11905: 0xCDFB,
+ 26396 - 11905: 0x964E,
+ 26397 - 11905: 0xB3AF,
+ 26398 - 11905: 0x964F,
+ 26399 - 11905: 0xC6DA,
+ 26400 - 11905: 0x9650,
+ 26401 - 11905: 0x9651,
+ 26402 - 11905: 0x9652,
+ 26403 - 11905: 0x9653,
+ 26404 - 11905: 0x9654,
+ 26405 - 11905: 0x9655,
+ 26406 - 11905: 0xEBFC,
+ 26407 - 11905: 0x9656,
+ 26408 - 11905: 0xC4BE,
+ 26409 - 11905: 0x9657,
+ 26410 - 11905: 0xCEB4,
+ 26411 - 11905: 0xC4A9,
+ 26412 - 11905: 0xB1BE,
+ 26413 - 11905: 0xD4FD,
+ 26414 - 11905: 0x9658,
+ 26415 - 11905: 0xCAF5,
+ 26416 - 11905: 0x9659,
+ 26417 - 11905: 0xD6EC,
+ 26418 - 11905: 0x965A,
+ 26419 - 11905: 0x965B,
+ 26420 - 11905: 0xC6D3,
+ 26421 - 11905: 0xB6E4,
+ 26422 - 11905: 0x965C,
+ 26423 - 11905: 0x965D,
+ 26424 - 11905: 0x965E,
+ 26425 - 11905: 0x965F,
+ 26426 - 11905: 0xBBFA,
+ 26427 - 11905: 0x9660,
+ 26428 - 11905: 0x9661,
+ 26429 - 11905: 0xD0E0,
+ 26430 - 11905: 0x9662,
+ 26431 - 11905: 0x9663,
+ 26432 - 11905: 0xC9B1,
+ 26433 - 11905: 0x9664,
+ 26434 - 11905: 0xD4D3,
+ 26435 - 11905: 0xC8A8,
+ 26436 - 11905: 0x9665,
+ 26437 - 11905: 0x9666,
+ 26438 - 11905: 0xB8CB,
+ 26439 - 11905: 0x9667,
+ 26440 - 11905: 0xE8BE,
+ 26441 - 11905: 0xC9BC,
+ 26442 - 11905: 0x9668,
+ 26443 - 11905: 0x9669,
+ 26444 - 11905: 0xE8BB,
+ 26445 - 11905: 0x966A,
+ 26446 - 11905: 0xC0EE,
+ 26447 - 11905: 0xD0D3,
+ 26448 - 11905: 0xB2C4,
+ 26449 - 11905: 0xB4E5,
+ 26450 - 11905: 0x966B,
+ 26451 - 11905: 0xE8BC,
+ 26452 - 11905: 0x966C,
+ 26453 - 11905: 0x966D,
+ 26454 - 11905: 0xD5C8,
+ 26455 - 11905: 0x966E,
+ 26456 - 11905: 0x966F,
+ 26457 - 11905: 0x9670,
+ 26458 - 11905: 0x9671,
+ 26459 - 11905: 0x9672,
+ 26460 - 11905: 0xB6C5,
+ 26461 - 11905: 0x9673,
+ 26462 - 11905: 0xE8BD,
+ 26463 - 11905: 0xCAF8,
+ 26464 - 11905: 0xB8DC,
+ 26465 - 11905: 0xCCF5,
+ 26466 - 11905: 0x9674,
+ 26467 - 11905: 0x9675,
+ 26468 - 11905: 0x9676,
+ 26469 - 11905: 0xC0B4,
+ 26470 - 11905: 0x9677,
+ 26471 - 11905: 0x9678,
+ 26472 - 11905: 0xD1EE,
+ 26473 - 11905: 0xE8BF,
+ 26474 - 11905: 0xE8C2,
+ 26475 - 11905: 0x9679,
+ 26476 - 11905: 0x967A,
+ 26477 - 11905: 0xBABC,
+ 26478 - 11905: 0x967B,
+ 26479 - 11905: 0xB1AD,
+ 26480 - 11905: 0xBDDC,
+ 26481 - 11905: 0x967C,
+ 26482 - 11905: 0xEABD,
+ 26483 - 11905: 0xE8C3,
+ 26484 - 11905: 0x967D,
+ 26485 - 11905: 0xE8C6,
+ 26486 - 11905: 0x967E,
+ 26487 - 11905: 0xE8CB,
+ 26488 - 11905: 0x9680,
+ 26489 - 11905: 0x9681,
+ 26490 - 11905: 0x9682,
+ 26491 - 11905: 0x9683,
+ 26492 - 11905: 0xE8CC,
+ 26493 - 11905: 0x9684,
+ 26494 - 11905: 0xCBC9,
+ 26495 - 11905: 0xB0E5,
+ 26496 - 11905: 0x9685,
+ 26497 - 11905: 0xBCAB,
+ 26498 - 11905: 0x9686,
+ 26499 - 11905: 0x9687,
+ 26500 - 11905: 0xB9B9,
+ 26501 - 11905: 0x9688,
+ 26502 - 11905: 0x9689,
+ 26503 - 11905: 0xE8C1,
+ 26504 - 11905: 0x968A,
+ 26505 - 11905: 0xCDF7,
+ 26506 - 11905: 0x968B,
+ 26507 - 11905: 0xE8CA,
+ 26508 - 11905: 0x968C,
+ 26509 - 11905: 0x968D,
+ 26510 - 11905: 0x968E,
+ 26511 - 11905: 0x968F,
+ 26512 - 11905: 0xCEF6,
+ 26513 - 11905: 0x9690,
+ 26514 - 11905: 0x9691,
+ 26515 - 11905: 0x9692,
+ 26516 - 11905: 0x9693,
+ 26517 - 11905: 0xD5ED,
+ 26518 - 11905: 0x9694,
+ 26519 - 11905: 0xC1D6,
+ 26520 - 11905: 0xE8C4,
+ 26521 - 11905: 0x9695,
+ 26522 - 11905: 0xC3B6,
+ 26523 - 11905: 0x9696,
+ 26524 - 11905: 0xB9FB,
+ 26525 - 11905: 0xD6A6,
+ 26526 - 11905: 0xE8C8,
+ 26527 - 11905: 0x9697,
+ 26528 - 11905: 0x9698,
+ 26529 - 11905: 0x9699,
+ 26530 - 11905: 0xCAE0,
+ 26531 - 11905: 0xD4E6,
+ 26532 - 11905: 0x969A,
+ 26533 - 11905: 0xE8C0,
+ 26534 - 11905: 0x969B,
+ 26535 - 11905: 0xE8C5,
+ 26536 - 11905: 0xE8C7,
+ 26537 - 11905: 0x969C,
+ 26538 - 11905: 0xC7B9,
+ 26539 - 11905: 0xB7E3,
+ 26540 - 11905: 0x969D,
+ 26541 - 11905: 0xE8C9,
+ 26542 - 11905: 0x969E,
+ 26543 - 11905: 0xBFDD,
+ 26544 - 11905: 0xE8D2,
+ 26545 - 11905: 0x969F,
+ 26546 - 11905: 0x96A0,
+ 26547 - 11905: 0xE8D7,
+ 26548 - 11905: 0x96A1,
+ 26549 - 11905: 0xE8D5,
+ 26550 - 11905: 0xBCDC,
+ 26551 - 11905: 0xBCCF,
+ 26552 - 11905: 0xE8DB,
+ 26553 - 11905: 0x96A2,
+ 26554 - 11905: 0x96A3,
+ 26555 - 11905: 0x96A4,
+ 26556 - 11905: 0x96A5,
+ 26557 - 11905: 0x96A6,
+ 26558 - 11905: 0x96A7,
+ 26559 - 11905: 0x96A8,
+ 26560 - 11905: 0x96A9,
+ 26561 - 11905: 0xE8DE,
+ 26562 - 11905: 0x96AA,
+ 26563 - 11905: 0xE8DA,
+ 26564 - 11905: 0xB1FA,
+ 26565 - 11905: 0x96AB,
+ 26566 - 11905: 0x96AC,
+ 26567 - 11905: 0x96AD,
+ 26568 - 11905: 0x96AE,
+ 26569 - 11905: 0x96AF,
+ 26570 - 11905: 0x96B0,
+ 26571 - 11905: 0x96B1,
+ 26572 - 11905: 0x96B2,
+ 26573 - 11905: 0x96B3,
+ 26574 - 11905: 0x96B4,
+ 26575 - 11905: 0xB0D8,
+ 26576 - 11905: 0xC4B3,
+ 26577 - 11905: 0xB8CC,
+ 26578 - 11905: 0xC6E2,
+ 26579 - 11905: 0xC8BE,
+ 26580 - 11905: 0xC8E1,
+ 26581 - 11905: 0x96B5,
+ 26582 - 11905: 0x96B6,
+ 26583 - 11905: 0x96B7,
+ 26584 - 11905: 0xE8CF,
+ 26585 - 11905: 0xE8D4,
+ 26586 - 11905: 0xE8D6,
+ 26587 - 11905: 0x96B8,
+ 26588 - 11905: 0xB9F1,
+ 26589 - 11905: 0xE8D8,
+ 26590 - 11905: 0xD7F5,
+ 26591 - 11905: 0x96B9,
+ 26592 - 11905: 0xC4FB,
+ 26593 - 11905: 0x96BA,
+ 26594 - 11905: 0xE8DC,
+ 26595 - 11905: 0x96BB,
+ 26596 - 11905: 0x96BC,
+ 26597 - 11905: 0xB2E9,
+ 26598 - 11905: 0x96BD,
+ 26599 - 11905: 0x96BE,
+ 26600 - 11905: 0x96BF,
+ 26601 - 11905: 0xE8D1,
+ 26602 - 11905: 0x96C0,
+ 26603 - 11905: 0x96C1,
+ 26604 - 11905: 0xBCED,
+ 26605 - 11905: 0x96C2,
+ 26606 - 11905: 0x96C3,
+ 26607 - 11905: 0xBFC2,
+ 26608 - 11905: 0xE8CD,
+ 26609 - 11905: 0xD6F9,
+ 26610 - 11905: 0x96C4,
+ 26611 - 11905: 0xC1F8,
+ 26612 - 11905: 0xB2F1,
+ 26613 - 11905: 0x96C5,
+ 26614 - 11905: 0x96C6,
+ 26615 - 11905: 0x96C7,
+ 26616 - 11905: 0x96C8,
+ 26617 - 11905: 0x96C9,
+ 26618 - 11905: 0x96CA,
+ 26619 - 11905: 0x96CB,
+ 26620 - 11905: 0x96CC,
+ 26621 - 11905: 0xE8DF,
+ 26622 - 11905: 0x96CD,
+ 26623 - 11905: 0xCAC1,
+ 26624 - 11905: 0xE8D9,
+ 26625 - 11905: 0x96CE,
+ 26626 - 11905: 0x96CF,
+ 26627 - 11905: 0x96D0,
+ 26628 - 11905: 0x96D1,
+ 26629 - 11905: 0xD5A4,
+ 26630 - 11905: 0x96D2,
+ 26631 - 11905: 0xB1EA,
+ 26632 - 11905: 0xD5BB,
+ 26633 - 11905: 0xE8CE,
+ 26634 - 11905: 0xE8D0,
+ 26635 - 11905: 0xB6B0,
+ 26636 - 11905: 0xE8D3,
+ 26637 - 11905: 0x96D3,
+ 26638 - 11905: 0xE8DD,
+ 26639 - 11905: 0xC0B8,
+ 26640 - 11905: 0x96D4,
+ 26641 - 11905: 0xCAF7,
+ 26642 - 11905: 0x96D5,
+ 26643 - 11905: 0xCBA8,
+ 26644 - 11905: 0x96D6,
+ 26645 - 11905: 0x96D7,
+ 26646 - 11905: 0xC6DC,
+ 26647 - 11905: 0xC0F5,
+ 26648 - 11905: 0x96D8,
+ 26649 - 11905: 0x96D9,
+ 26650 - 11905: 0x96DA,
+ 26651 - 11905: 0x96DB,
+ 26652 - 11905: 0x96DC,
+ 26653 - 11905: 0xE8E9,
+ 26654 - 11905: 0x96DD,
+ 26655 - 11905: 0x96DE,
+ 26656 - 11905: 0x96DF,
+ 26657 - 11905: 0xD0A3,
+ 26658 - 11905: 0x96E0,
+ 26659 - 11905: 0x96E1,
+ 26660 - 11905: 0x96E2,
+ 26661 - 11905: 0x96E3,
+ 26662 - 11905: 0x96E4,
+ 26663 - 11905: 0x96E5,
+ 26664 - 11905: 0x96E6,
+ 26665 - 11905: 0xE8F2,
+ 26666 - 11905: 0xD6EA,
+ 26667 - 11905: 0x96E7,
+ 26668 - 11905: 0x96E8,
+ 26669 - 11905: 0x96E9,
+ 26670 - 11905: 0x96EA,
+ 26671 - 11905: 0x96EB,
+ 26672 - 11905: 0x96EC,
+ 26673 - 11905: 0x96ED,
+ 26674 - 11905: 0xE8E0,
+ 26675 - 11905: 0xE8E1,
+ 26676 - 11905: 0x96EE,
+ 26677 - 11905: 0x96EF,
+ 26678 - 11905: 0x96F0,
+ 26679 - 11905: 0xD1F9,
+ 26680 - 11905: 0xBACB,
+ 26681 - 11905: 0xB8F9,
+ 26682 - 11905: 0x96F1,
+ 26683 - 11905: 0x96F2,
+ 26684 - 11905: 0xB8F1,
+ 26685 - 11905: 0xD4D4,
+ 26686 - 11905: 0xE8EF,
+ 26687 - 11905: 0x96F3,
+ 26688 - 11905: 0xE8EE,
+ 26689 - 11905: 0xE8EC,
+ 26690 - 11905: 0xB9F0,
+ 26691 - 11905: 0xCCD2,
+ 26692 - 11905: 0xE8E6,
+ 26693 - 11905: 0xCEA6,
+ 26694 - 11905: 0xBFF2,
+ 26695 - 11905: 0x96F4,
+ 26696 - 11905: 0xB0B8,
+ 26697 - 11905: 0xE8F1,
+ 26698 - 11905: 0xE8F0,
+ 26699 - 11905: 0x96F5,
+ 26700 - 11905: 0xD7C0,
+ 26701 - 11905: 0x96F6,
+ 26702 - 11905: 0xE8E4,
+ 26703 - 11905: 0x96F7,
+ 26704 - 11905: 0xCDA9,
+ 26705 - 11905: 0xC9A3,
+ 26706 - 11905: 0x96F8,
+ 26707 - 11905: 0xBBB8,
+ 26708 - 11905: 0xBDDB,
+ 26709 - 11905: 0xE8EA,
+ 26710 - 11905: 0x96F9,
+ 26711 - 11905: 0x96FA,
+ 26712 - 11905: 0x96FB,
+ 26713 - 11905: 0x96FC,
+ 26714 - 11905: 0x96FD,
+ 26715 - 11905: 0x96FE,
+ 26716 - 11905: 0x9740,
+ 26717 - 11905: 0x9741,
+ 26718 - 11905: 0x9742,
+ 26719 - 11905: 0x9743,
+ 26720 - 11905: 0xE8E2,
+ 26721 - 11905: 0xE8E3,
+ 26722 - 11905: 0xE8E5,
+ 26723 - 11905: 0xB5B5,
+ 26724 - 11905: 0xE8E7,
+ 26725 - 11905: 0xC7C5,
+ 26726 - 11905: 0xE8EB,
+ 26727 - 11905: 0xE8ED,
+ 26728 - 11905: 0xBDB0,
+ 26729 - 11905: 0xD7AE,
+ 26730 - 11905: 0x9744,
+ 26731 - 11905: 0xE8F8,
+ 26732 - 11905: 0x9745,
+ 26733 - 11905: 0x9746,
+ 26734 - 11905: 0x9747,
+ 26735 - 11905: 0x9748,
+ 26736 - 11905: 0x9749,
+ 26737 - 11905: 0x974A,
+ 26738 - 11905: 0x974B,
+ 26739 - 11905: 0x974C,
+ 26740 - 11905: 0xE8F5,
+ 26741 - 11905: 0x974D,
+ 26742 - 11905: 0xCDB0,
+ 26743 - 11905: 0xE8F6,
+ 26744 - 11905: 0x974E,
+ 26745 - 11905: 0x974F,
+ 26746 - 11905: 0x9750,
+ 26747 - 11905: 0x9751,
+ 26748 - 11905: 0x9752,
+ 26749 - 11905: 0x9753,
+ 26750 - 11905: 0x9754,
+ 26751 - 11905: 0x9755,
+ 26752 - 11905: 0x9756,
+ 26753 - 11905: 0xC1BA,
+ 26754 - 11905: 0x9757,
+ 26755 - 11905: 0xE8E8,
+ 26756 - 11905: 0x9758,
+ 26757 - 11905: 0xC3B7,
+ 26758 - 11905: 0xB0F0,
+ 26759 - 11905: 0x9759,
+ 26760 - 11905: 0x975A,
+ 26761 - 11905: 0x975B,
+ 26762 - 11905: 0x975C,
+ 26763 - 11905: 0x975D,
+ 26764 - 11905: 0x975E,
+ 26765 - 11905: 0x975F,
+ 26766 - 11905: 0x9760,
+ 26767 - 11905: 0xE8F4,
+ 26768 - 11905: 0x9761,
+ 26769 - 11905: 0x9762,
+ 26770 - 11905: 0x9763,
+ 26771 - 11905: 0xE8F7,
+ 26772 - 11905: 0x9764,
+ 26773 - 11905: 0x9765,
+ 26774 - 11905: 0x9766,
+ 26775 - 11905: 0xB9A3,
+ 26776 - 11905: 0x9767,
+ 26777 - 11905: 0x9768,
+ 26778 - 11905: 0x9769,
+ 26779 - 11905: 0x976A,
+ 26780 - 11905: 0x976B,
+ 26781 - 11905: 0x976C,
+ 26782 - 11905: 0x976D,
+ 26783 - 11905: 0x976E,
+ 26784 - 11905: 0x976F,
+ 26785 - 11905: 0x9770,
+ 26786 - 11905: 0xC9D2,
+ 26787 - 11905: 0x9771,
+ 26788 - 11905: 0x9772,
+ 26789 - 11905: 0x9773,
+ 26790 - 11905: 0xC3CE,
+ 26791 - 11905: 0xCEE0,
+ 26792 - 11905: 0xC0E6,
+ 26793 - 11905: 0x9774,
+ 26794 - 11905: 0x9775,
+ 26795 - 11905: 0x9776,
+ 26796 - 11905: 0x9777,
+ 26797 - 11905: 0xCBF3,
+ 26798 - 11905: 0x9778,
+ 26799 - 11905: 0xCCDD,
+ 26800 - 11905: 0xD0B5,
+ 26801 - 11905: 0x9779,
+ 26802 - 11905: 0x977A,
+ 26803 - 11905: 0xCAE1,
+ 26804 - 11905: 0x977B,
+ 26805 - 11905: 0xE8F3,
+ 26806 - 11905: 0x977C,
+ 26807 - 11905: 0x977D,
+ 26808 - 11905: 0x977E,
+ 26809 - 11905: 0x9780,
+ 26810 - 11905: 0x9781,
+ 26811 - 11905: 0x9782,
+ 26812 - 11905: 0x9783,
+ 26813 - 11905: 0x9784,
+ 26814 - 11905: 0x9785,
+ 26815 - 11905: 0x9786,
+ 26816 - 11905: 0xBCEC,
+ 26817 - 11905: 0x9787,
+ 26818 - 11905: 0xE8F9,
+ 26819 - 11905: 0x9788,
+ 26820 - 11905: 0x9789,
+ 26821 - 11905: 0x978A,
+ 26822 - 11905: 0x978B,
+ 26823 - 11905: 0x978C,
+ 26824 - 11905: 0x978D,
+ 26825 - 11905: 0xC3DE,
+ 26826 - 11905: 0x978E,
+ 26827 - 11905: 0xC6E5,
+ 26828 - 11905: 0x978F,
+ 26829 - 11905: 0xB9F7,
+ 26830 - 11905: 0x9790,
+ 26831 - 11905: 0x9791,
+ 26832 - 11905: 0x9792,
+ 26833 - 11905: 0x9793,
+ 26834 - 11905: 0xB0F4,
+ 26835 - 11905: 0x9794,
+ 26836 - 11905: 0x9795,
+ 26837 - 11905: 0xD7D8,
+ 26838 - 11905: 0x9796,
+ 26839 - 11905: 0x9797,
+ 26840 - 11905: 0xBCAC,
+ 26841 - 11905: 0x9798,
+ 26842 - 11905: 0xC5EF,
+ 26843 - 11905: 0x9799,
+ 26844 - 11905: 0x979A,
+ 26845 - 11905: 0x979B,
+ 26846 - 11905: 0x979C,
+ 26847 - 11905: 0x979D,
+ 26848 - 11905: 0xCCC4,
+ 26849 - 11905: 0x979E,
+ 26850 - 11905: 0x979F,
+ 26851 - 11905: 0xE9A6,
+ 26852 - 11905: 0x97A0,
+ 26853 - 11905: 0x97A1,
+ 26854 - 11905: 0x97A2,
+ 26855 - 11905: 0x97A3,
+ 26856 - 11905: 0x97A4,
+ 26857 - 11905: 0x97A5,
+ 26858 - 11905: 0x97A6,
+ 26859 - 11905: 0x97A7,
+ 26860 - 11905: 0x97A8,
+ 26861 - 11905: 0x97A9,
+ 26862 - 11905: 0xC9AD,
+ 26863 - 11905: 0x97AA,
+ 26864 - 11905: 0xE9A2,
+ 26865 - 11905: 0xC0E2,
+ 26866 - 11905: 0x97AB,
+ 26867 - 11905: 0x97AC,
+ 26868 - 11905: 0x97AD,
+ 26869 - 11905: 0xBFC3,
+ 26870 - 11905: 0x97AE,
+ 26871 - 11905: 0x97AF,
+ 26872 - 11905: 0x97B0,
+ 26873 - 11905: 0xE8FE,
+ 26874 - 11905: 0xB9D7,
+ 26875 - 11905: 0x97B1,
+ 26876 - 11905: 0xE8FB,
+ 26877 - 11905: 0x97B2,
+ 26878 - 11905: 0x97B3,
+ 26879 - 11905: 0x97B4,
+ 26880 - 11905: 0x97B5,
+ 26881 - 11905: 0xE9A4,
+ 26882 - 11905: 0x97B6,
+ 26883 - 11905: 0x97B7,
+ 26884 - 11905: 0x97B8,
+ 26885 - 11905: 0xD2CE,
+ 26886 - 11905: 0x97B9,
+ 26887 - 11905: 0x97BA,
+ 26888 - 11905: 0x97BB,
+ 26889 - 11905: 0x97BC,
+ 26890 - 11905: 0x97BD,
+ 26891 - 11905: 0xE9A3,
+ 26892 - 11905: 0x97BE,
+ 26893 - 11905: 0xD6B2,
+ 26894 - 11905: 0xD7B5,
+ 26895 - 11905: 0x97BF,
+ 26896 - 11905: 0xE9A7,
+ 26897 - 11905: 0x97C0,
+ 26898 - 11905: 0xBDB7,
+ 26899 - 11905: 0x97C1,
+ 26900 - 11905: 0x97C2,
+ 26901 - 11905: 0x97C3,
+ 26902 - 11905: 0x97C4,
+ 26903 - 11905: 0x97C5,
+ 26904 - 11905: 0x97C6,
+ 26905 - 11905: 0x97C7,
+ 26906 - 11905: 0x97C8,
+ 26907 - 11905: 0x97C9,
+ 26908 - 11905: 0x97CA,
+ 26909 - 11905: 0x97CB,
+ 26910 - 11905: 0x97CC,
+ 26911 - 11905: 0xE8FC,
+ 26912 - 11905: 0xE8FD,
+ 26913 - 11905: 0x97CD,
+ 26914 - 11905: 0x97CE,
+ 26915 - 11905: 0x97CF,
+ 26916 - 11905: 0xE9A1,
+ 26917 - 11905: 0x97D0,
+ 26918 - 11905: 0x97D1,
+ 26919 - 11905: 0x97D2,
+ 26920 - 11905: 0x97D3,
+ 26921 - 11905: 0x97D4,
+ 26922 - 11905: 0x97D5,
+ 26923 - 11905: 0x97D6,
+ 26924 - 11905: 0x97D7,
+ 26925 - 11905: 0xCDD6,
+ 26926 - 11905: 0x97D8,
+ 26927 - 11905: 0x97D9,
+ 26928 - 11905: 0xD2AC,
+ 26929 - 11905: 0x97DA,
+ 26930 - 11905: 0x97DB,
+ 26931 - 11905: 0x97DC,
+ 26932 - 11905: 0xE9B2,
+ 26933 - 11905: 0x97DD,
+ 26934 - 11905: 0x97DE,
+ 26935 - 11905: 0x97DF,
+ 26936 - 11905: 0x97E0,
+ 26937 - 11905: 0xE9A9,
+ 26938 - 11905: 0x97E1,
+ 26939 - 11905: 0x97E2,
+ 26940 - 11905: 0x97E3,
+ 26941 - 11905: 0xB4AA,
+ 26942 - 11905: 0x97E4,
+ 26943 - 11905: 0xB4BB,
+ 26944 - 11905: 0x97E5,
+ 26945 - 11905: 0x97E6,
+ 26946 - 11905: 0xE9AB,
+ 26947 - 11905: 0x97E7,
+ 26948 - 11905: 0x97E8,
+ 26949 - 11905: 0x97E9,
+ 26950 - 11905: 0x97EA,
+ 26951 - 11905: 0x97EB,
+ 26952 - 11905: 0x97EC,
+ 26953 - 11905: 0x97ED,
+ 26954 - 11905: 0x97EE,
+ 26955 - 11905: 0x97EF,
+ 26956 - 11905: 0x97F0,
+ 26957 - 11905: 0x97F1,
+ 26958 - 11905: 0x97F2,
+ 26959 - 11905: 0x97F3,
+ 26960 - 11905: 0x97F4,
+ 26961 - 11905: 0x97F5,
+ 26962 - 11905: 0x97F6,
+ 26963 - 11905: 0x97F7,
+ 26964 - 11905: 0xD0A8,
+ 26965 - 11905: 0x97F8,
+ 26966 - 11905: 0x97F9,
+ 26967 - 11905: 0xE9A5,
+ 26968 - 11905: 0x97FA,
+ 26969 - 11905: 0x97FB,
+ 26970 - 11905: 0xB3FE,
+ 26971 - 11905: 0x97FC,
+ 26972 - 11905: 0x97FD,
+ 26973 - 11905: 0xE9AC,
+ 26974 - 11905: 0xC0E3,
+ 26975 - 11905: 0x97FE,
+ 26976 - 11905: 0xE9AA,
+ 26977 - 11905: 0x9840,
+ 26978 - 11905: 0x9841,
+ 26979 - 11905: 0xE9B9,
+ 26980 - 11905: 0x9842,
+ 26981 - 11905: 0x9843,
+ 26982 - 11905: 0xE9B8,
+ 26983 - 11905: 0x9844,
+ 26984 - 11905: 0x9845,
+ 26985 - 11905: 0x9846,
+ 26986 - 11905: 0x9847,
+ 26987 - 11905: 0xE9AE,
+ 26988 - 11905: 0x9848,
+ 26989 - 11905: 0x9849,
+ 26990 - 11905: 0xE8FA,
+ 26991 - 11905: 0x984A,
+ 26992 - 11905: 0x984B,
+ 26993 - 11905: 0xE9A8,
+ 26994 - 11905: 0x984C,
+ 26995 - 11905: 0x984D,
+ 26996 - 11905: 0x984E,
+ 26997 - 11905: 0x984F,
+ 26998 - 11905: 0x9850,
+ 26999 - 11905: 0xBFAC,
+ 27000 - 11905: 0xE9B1,
+ 27001 - 11905: 0xE9BA,
+ 27002 - 11905: 0x9851,
+ 27003 - 11905: 0x9852,
+ 27004 - 11905: 0xC2A5,
+ 27005 - 11905: 0x9853,
+ 27006 - 11905: 0x9854,
+ 27007 - 11905: 0x9855,
+ 27008 - 11905: 0xE9AF,
+ 27009 - 11905: 0x9856,
+ 27010 - 11905: 0xB8C5,
+ 27011 - 11905: 0x9857,
+ 27012 - 11905: 0xE9AD,
+ 27013 - 11905: 0x9858,
+ 27014 - 11905: 0xD3DC,
+ 27015 - 11905: 0xE9B4,
+ 27016 - 11905: 0xE9B5,
+ 27017 - 11905: 0xE9B7,
+ 27018 - 11905: 0x9859,
+ 27019 - 11905: 0x985A,
+ 27020 - 11905: 0x985B,
+ 27021 - 11905: 0xE9C7,
+ 27022 - 11905: 0x985C,
+ 27023 - 11905: 0x985D,
+ 27024 - 11905: 0x985E,
+ 27025 - 11905: 0x985F,
+ 27026 - 11905: 0x9860,
+ 27027 - 11905: 0x9861,
+ 27028 - 11905: 0xC0C6,
+ 27029 - 11905: 0xE9C5,
+ 27030 - 11905: 0x9862,
+ 27031 - 11905: 0x9863,
+ 27032 - 11905: 0xE9B0,
+ 27033 - 11905: 0x9864,
+ 27034 - 11905: 0x9865,
+ 27035 - 11905: 0xE9BB,
+ 27036 - 11905: 0xB0F1,
+ 27037 - 11905: 0x9866,
+ 27038 - 11905: 0x9867,
+ 27039 - 11905: 0x9868,
+ 27040 - 11905: 0x9869,
+ 27041 - 11905: 0x986A,
+ 27042 - 11905: 0x986B,
+ 27043 - 11905: 0x986C,
+ 27044 - 11905: 0x986D,
+ 27045 - 11905: 0x986E,
+ 27046 - 11905: 0x986F,
+ 27047 - 11905: 0xE9BC,
+ 27048 - 11905: 0xD5A5,
+ 27049 - 11905: 0x9870,
+ 27050 - 11905: 0x9871,
+ 27051 - 11905: 0xE9BE,
+ 27052 - 11905: 0x9872,
+ 27053 - 11905: 0xE9BF,
+ 27054 - 11905: 0x9873,
+ 27055 - 11905: 0x9874,
+ 27056 - 11905: 0x9875,
+ 27057 - 11905: 0xE9C1,
+ 27058 - 11905: 0x9876,
+ 27059 - 11905: 0x9877,
+ 27060 - 11905: 0xC1F1,
+ 27061 - 11905: 0x9878,
+ 27062 - 11905: 0x9879,
+ 27063 - 11905: 0xC8B6,
+ 27064 - 11905: 0x987A,
+ 27065 - 11905: 0x987B,
+ 27066 - 11905: 0x987C,
+ 27067 - 11905: 0xE9BD,
+ 27068 - 11905: 0x987D,
+ 27069 - 11905: 0x987E,
+ 27070 - 11905: 0x9880,
+ 27071 - 11905: 0x9881,
+ 27072 - 11905: 0x9882,
+ 27073 - 11905: 0xE9C2,
+ 27074 - 11905: 0x9883,
+ 27075 - 11905: 0x9884,
+ 27076 - 11905: 0x9885,
+ 27077 - 11905: 0x9886,
+ 27078 - 11905: 0x9887,
+ 27079 - 11905: 0x9888,
+ 27080 - 11905: 0x9889,
+ 27081 - 11905: 0x988A,
+ 27082 - 11905: 0xE9C3,
+ 27083 - 11905: 0x988B,
+ 27084 - 11905: 0xE9B3,
+ 27085 - 11905: 0x988C,
+ 27086 - 11905: 0xE9B6,
+ 27087 - 11905: 0x988D,
+ 27088 - 11905: 0xBBB1,
+ 27089 - 11905: 0x988E,
+ 27090 - 11905: 0x988F,
+ 27091 - 11905: 0x9890,
+ 27092 - 11905: 0xE9C0,
+ 27093 - 11905: 0x9891,
+ 27094 - 11905: 0x9892,
+ 27095 - 11905: 0x9893,
+ 27096 - 11905: 0x9894,
+ 27097 - 11905: 0x9895,
+ 27098 - 11905: 0x9896,
+ 27099 - 11905: 0xBCF7,
+ 27100 - 11905: 0x9897,
+ 27101 - 11905: 0x9898,
+ 27102 - 11905: 0x9899,
+ 27103 - 11905: 0xE9C4,
+ 27104 - 11905: 0xE9C6,
+ 27105 - 11905: 0x989A,
+ 27106 - 11905: 0x989B,
+ 27107 - 11905: 0x989C,
+ 27108 - 11905: 0x989D,
+ 27109 - 11905: 0x989E,
+ 27110 - 11905: 0x989F,
+ 27111 - 11905: 0x98A0,
+ 27112 - 11905: 0x98A1,
+ 27113 - 11905: 0x98A2,
+ 27114 - 11905: 0x98A3,
+ 27115 - 11905: 0x98A4,
+ 27116 - 11905: 0x98A5,
+ 27117 - 11905: 0xE9CA,
+ 27118 - 11905: 0x98A6,
+ 27119 - 11905: 0x98A7,
+ 27120 - 11905: 0x98A8,
+ 27121 - 11905: 0x98A9,
+ 27122 - 11905: 0xE9CE,
+ 27123 - 11905: 0x98AA,
+ 27124 - 11905: 0x98AB,
+ 27125 - 11905: 0x98AC,
+ 27126 - 11905: 0x98AD,
+ 27127 - 11905: 0x98AE,
+ 27128 - 11905: 0x98AF,
+ 27129 - 11905: 0x98B0,
+ 27130 - 11905: 0x98B1,
+ 27131 - 11905: 0x98B2,
+ 27132 - 11905: 0x98B3,
+ 27133 - 11905: 0xB2DB,
+ 27134 - 11905: 0x98B4,
+ 27135 - 11905: 0xE9C8,
+ 27136 - 11905: 0x98B5,
+ 27137 - 11905: 0x98B6,
+ 27138 - 11905: 0x98B7,
+ 27139 - 11905: 0x98B8,
+ 27140 - 11905: 0x98B9,
+ 27141 - 11905: 0x98BA,
+ 27142 - 11905: 0x98BB,
+ 27143 - 11905: 0x98BC,
+ 27144 - 11905: 0x98BD,
+ 27145 - 11905: 0x98BE,
+ 27146 - 11905: 0xB7AE,
+ 27147 - 11905: 0x98BF,
+ 27148 - 11905: 0x98C0,
+ 27149 - 11905: 0x98C1,
+ 27150 - 11905: 0x98C2,
+ 27151 - 11905: 0x98C3,
+ 27152 - 11905: 0x98C4,
+ 27153 - 11905: 0x98C5,
+ 27154 - 11905: 0x98C6,
+ 27155 - 11905: 0x98C7,
+ 27156 - 11905: 0x98C8,
+ 27157 - 11905: 0x98C9,
+ 27158 - 11905: 0x98CA,
+ 27159 - 11905: 0xE9CB,
+ 27160 - 11905: 0xE9CC,
+ 27161 - 11905: 0x98CB,
+ 27162 - 11905: 0x98CC,
+ 27163 - 11905: 0x98CD,
+ 27164 - 11905: 0x98CE,
+ 27165 - 11905: 0x98CF,
+ 27166 - 11905: 0x98D0,
+ 27167 - 11905: 0xD5C1,
+ 27168 - 11905: 0x98D1,
+ 27169 - 11905: 0xC4A3,
+ 27170 - 11905: 0x98D2,
+ 27171 - 11905: 0x98D3,
+ 27172 - 11905: 0x98D4,
+ 27173 - 11905: 0x98D5,
+ 27174 - 11905: 0x98D6,
+ 27175 - 11905: 0x98D7,
+ 27176 - 11905: 0xE9D8,
+ 27177 - 11905: 0x98D8,
+ 27178 - 11905: 0xBAE1,
+ 27179 - 11905: 0x98D9,
+ 27180 - 11905: 0x98DA,
+ 27181 - 11905: 0x98DB,
+ 27182 - 11905: 0x98DC,
+ 27183 - 11905: 0xE9C9,
+ 27184 - 11905: 0x98DD,
+ 27185 - 11905: 0xD3A3,
+ 27186 - 11905: 0x98DE,
+ 27187 - 11905: 0x98DF,
+ 27188 - 11905: 0x98E0,
+ 27189 - 11905: 0xE9D4,
+ 27190 - 11905: 0x98E1,
+ 27191 - 11905: 0x98E2,
+ 27192 - 11905: 0x98E3,
+ 27193 - 11905: 0x98E4,
+ 27194 - 11905: 0x98E5,
+ 27195 - 11905: 0x98E6,
+ 27196 - 11905: 0x98E7,
+ 27197 - 11905: 0xE9D7,
+ 27198 - 11905: 0xE9D0,
+ 27199 - 11905: 0x98E8,
+ 27200 - 11905: 0x98E9,
+ 27201 - 11905: 0x98EA,
+ 27202 - 11905: 0x98EB,
+ 27203 - 11905: 0x98EC,
+ 27204 - 11905: 0xE9CF,
+ 27205 - 11905: 0x98ED,
+ 27206 - 11905: 0x98EE,
+ 27207 - 11905: 0xC7C1,
+ 27208 - 11905: 0x98EF,
+ 27209 - 11905: 0x98F0,
+ 27210 - 11905: 0x98F1,
+ 27211 - 11905: 0x98F2,
+ 27212 - 11905: 0x98F3,
+ 27213 - 11905: 0x98F4,
+ 27214 - 11905: 0x98F5,
+ 27215 - 11905: 0x98F6,
+ 27216 - 11905: 0xE9D2,
+ 27217 - 11905: 0x98F7,
+ 27218 - 11905: 0x98F8,
+ 27219 - 11905: 0x98F9,
+ 27220 - 11905: 0x98FA,
+ 27221 - 11905: 0x98FB,
+ 27222 - 11905: 0x98FC,
+ 27223 - 11905: 0x98FD,
+ 27224 - 11905: 0xE9D9,
+ 27225 - 11905: 0xB3C8,
+ 27226 - 11905: 0x98FE,
+ 27227 - 11905: 0xE9D3,
+ 27228 - 11905: 0x9940,
+ 27229 - 11905: 0x9941,
+ 27230 - 11905: 0x9942,
+ 27231 - 11905: 0x9943,
+ 27232 - 11905: 0x9944,
+ 27233 - 11905: 0xCFF0,
+ 27234 - 11905: 0x9945,
+ 27235 - 11905: 0x9946,
+ 27236 - 11905: 0x9947,
+ 27237 - 11905: 0xE9CD,
+ 27238 - 11905: 0x9948,
+ 27239 - 11905: 0x9949,
+ 27240 - 11905: 0x994A,
+ 27241 - 11905: 0x994B,
+ 27242 - 11905: 0x994C,
+ 27243 - 11905: 0x994D,
+ 27244 - 11905: 0x994E,
+ 27245 - 11905: 0x994F,
+ 27246 - 11905: 0x9950,
+ 27247 - 11905: 0x9951,
+ 27248 - 11905: 0x9952,
+ 27249 - 11905: 0xB3F7,
+ 27250 - 11905: 0x9953,
+ 27251 - 11905: 0x9954,
+ 27252 - 11905: 0x9955,
+ 27253 - 11905: 0x9956,
+ 27254 - 11905: 0x9957,
+ 27255 - 11905: 0x9958,
+ 27256 - 11905: 0x9959,
+ 27257 - 11905: 0xE9D6,
+ 27258 - 11905: 0x995A,
+ 27259 - 11905: 0x995B,
+ 27260 - 11905: 0xE9DA,
+ 27261 - 11905: 0x995C,
+ 27262 - 11905: 0x995D,
+ 27263 - 11905: 0x995E,
+ 27264 - 11905: 0xCCB4,
+ 27265 - 11905: 0x995F,
+ 27266 - 11905: 0x9960,
+ 27267 - 11905: 0x9961,
+ 27268 - 11905: 0xCFAD,
+ 27269 - 11905: 0x9962,
+ 27270 - 11905: 0x9963,
+ 27271 - 11905: 0x9964,
+ 27272 - 11905: 0x9965,
+ 27273 - 11905: 0x9966,
+ 27274 - 11905: 0x9967,
+ 27275 - 11905: 0x9968,
+ 27276 - 11905: 0x9969,
+ 27277 - 11905: 0x996A,
+ 27278 - 11905: 0xE9D5,
+ 27279 - 11905: 0x996B,
+ 27280 - 11905: 0xE9DC,
+ 27281 - 11905: 0xE9DB,
+ 27282 - 11905: 0x996C,
+ 27283 - 11905: 0x996D,
+ 27284 - 11905: 0x996E,
+ 27285 - 11905: 0x996F,
+ 27286 - 11905: 0x9970,
+ 27287 - 11905: 0xE9DE,
+ 27288 - 11905: 0x9971,
+ 27289 - 11905: 0x9972,
+ 27290 - 11905: 0x9973,
+ 27291 - 11905: 0x9974,
+ 27292 - 11905: 0x9975,
+ 27293 - 11905: 0x9976,
+ 27294 - 11905: 0x9977,
+ 27295 - 11905: 0x9978,
+ 27296 - 11905: 0xE9D1,
+ 27297 - 11905: 0x9979,
+ 27298 - 11905: 0x997A,
+ 27299 - 11905: 0x997B,
+ 27300 - 11905: 0x997C,
+ 27301 - 11905: 0x997D,
+ 27302 - 11905: 0x997E,
+ 27303 - 11905: 0x9980,
+ 27304 - 11905: 0x9981,
+ 27305 - 11905: 0xE9DD,
+ 27306 - 11905: 0x9982,
+ 27307 - 11905: 0xE9DF,
+ 27308 - 11905: 0xC3CA,
+ 27309 - 11905: 0x9983,
+ 27310 - 11905: 0x9984,
+ 27311 - 11905: 0x9985,
+ 27312 - 11905: 0x9986,
+ 27313 - 11905: 0x9987,
+ 27314 - 11905: 0x9988,
+ 27315 - 11905: 0x9989,
+ 27316 - 11905: 0x998A,
+ 27317 - 11905: 0x998B,
+ 27318 - 11905: 0x998C,
+ 27319 - 11905: 0x998D,
+ 27320 - 11905: 0x998E,
+ 27321 - 11905: 0x998F,
+ 27322 - 11905: 0x9990,
+ 27323 - 11905: 0x9991,
+ 27324 - 11905: 0x9992,
+ 27325 - 11905: 0x9993,
+ 27326 - 11905: 0x9994,
+ 27327 - 11905: 0x9995,
+ 27328 - 11905: 0x9996,
+ 27329 - 11905: 0x9997,
+ 27330 - 11905: 0x9998,
+ 27331 - 11905: 0x9999,
+ 27332 - 11905: 0x999A,
+ 27333 - 11905: 0x999B,
+ 27334 - 11905: 0x999C,
+ 27335 - 11905: 0x999D,
+ 27336 - 11905: 0x999E,
+ 27337 - 11905: 0x999F,
+ 27338 - 11905: 0x99A0,
+ 27339 - 11905: 0x99A1,
+ 27340 - 11905: 0x99A2,
+ 27341 - 11905: 0x99A3,
+ 27342 - 11905: 0x99A4,
+ 27343 - 11905: 0x99A5,
+ 27344 - 11905: 0x99A6,
+ 27345 - 11905: 0x99A7,
+ 27346 - 11905: 0x99A8,
+ 27347 - 11905: 0x99A9,
+ 27348 - 11905: 0x99AA,
+ 27349 - 11905: 0x99AB,
+ 27350 - 11905: 0x99AC,
+ 27351 - 11905: 0x99AD,
+ 27352 - 11905: 0x99AE,
+ 27353 - 11905: 0x99AF,
+ 27354 - 11905: 0x99B0,
+ 27355 - 11905: 0x99B1,
+ 27356 - 11905: 0x99B2,
+ 27357 - 11905: 0x99B3,
+ 27358 - 11905: 0x99B4,
+ 27359 - 11905: 0x99B5,
+ 27360 - 11905: 0x99B6,
+ 27361 - 11905: 0x99B7,
+ 27362 - 11905: 0x99B8,
+ 27363 - 11905: 0x99B9,
+ 27364 - 11905: 0x99BA,
+ 27365 - 11905: 0x99BB,
+ 27366 - 11905: 0x99BC,
+ 27367 - 11905: 0x99BD,
+ 27368 - 11905: 0x99BE,
+ 27369 - 11905: 0x99BF,
+ 27370 - 11905: 0x99C0,
+ 27371 - 11905: 0x99C1,
+ 27372 - 11905: 0x99C2,
+ 27373 - 11905: 0x99C3,
+ 27374 - 11905: 0x99C4,
+ 27375 - 11905: 0x99C5,
+ 27376 - 11905: 0x99C6,
+ 27377 - 11905: 0x99C7,
+ 27378 - 11905: 0x99C8,
+ 27379 - 11905: 0x99C9,
+ 27380 - 11905: 0x99CA,
+ 27381 - 11905: 0x99CB,
+ 27382 - 11905: 0x99CC,
+ 27383 - 11905: 0x99CD,
+ 27384 - 11905: 0x99CE,
+ 27385 - 11905: 0x99CF,
+ 27386 - 11905: 0x99D0,
+ 27387 - 11905: 0x99D1,
+ 27388 - 11905: 0x99D2,
+ 27389 - 11905: 0x99D3,
+ 27390 - 11905: 0x99D4,
+ 27391 - 11905: 0x99D5,
+ 27392 - 11905: 0x99D6,
+ 27393 - 11905: 0x99D7,
+ 27394 - 11905: 0x99D8,
+ 27395 - 11905: 0x99D9,
+ 27396 - 11905: 0x99DA,
+ 27397 - 11905: 0x99DB,
+ 27398 - 11905: 0x99DC,
+ 27399 - 11905: 0x99DD,
+ 27400 - 11905: 0x99DE,
+ 27401 - 11905: 0x99DF,
+ 27402 - 11905: 0x99E0,
+ 27403 - 11905: 0x99E1,
+ 27404 - 11905: 0x99E2,
+ 27405 - 11905: 0x99E3,
+ 27406 - 11905: 0x99E4,
+ 27407 - 11905: 0x99E5,
+ 27408 - 11905: 0x99E6,
+ 27409 - 11905: 0x99E7,
+ 27410 - 11905: 0x99E8,
+ 27411 - 11905: 0x99E9,
+ 27412 - 11905: 0x99EA,
+ 27413 - 11905: 0x99EB,
+ 27414 - 11905: 0x99EC,
+ 27415 - 11905: 0x99ED,
+ 27416 - 11905: 0x99EE,
+ 27417 - 11905: 0x99EF,
+ 27418 - 11905: 0x99F0,
+ 27419 - 11905: 0x99F1,
+ 27420 - 11905: 0x99F2,
+ 27421 - 11905: 0x99F3,
+ 27422 - 11905: 0x99F4,
+ 27423 - 11905: 0x99F5,
+ 27424 - 11905: 0xC7B7,
+ 27425 - 11905: 0xB4CE,
+ 27426 - 11905: 0xBBB6,
+ 27427 - 11905: 0xD0C0,
+ 27428 - 11905: 0xECA3,
+ 27429 - 11905: 0x99F6,
+ 27430 - 11905: 0x99F7,
+ 27431 - 11905: 0xC5B7,
+ 27432 - 11905: 0x99F8,
+ 27433 - 11905: 0x99F9,
+ 27434 - 11905: 0x99FA,
+ 27435 - 11905: 0x99FB,
+ 27436 - 11905: 0x99FC,
+ 27437 - 11905: 0x99FD,
+ 27438 - 11905: 0x99FE,
+ 27439 - 11905: 0x9A40,
+ 27440 - 11905: 0x9A41,
+ 27441 - 11905: 0x9A42,
+ 27442 - 11905: 0xD3FB,
+ 27443 - 11905: 0x9A43,
+ 27444 - 11905: 0x9A44,
+ 27445 - 11905: 0x9A45,
+ 27446 - 11905: 0x9A46,
+ 27447 - 11905: 0xECA4,
+ 27448 - 11905: 0x9A47,
+ 27449 - 11905: 0xECA5,
+ 27450 - 11905: 0xC6DB,
+ 27451 - 11905: 0x9A48,
+ 27452 - 11905: 0x9A49,
+ 27453 - 11905: 0x9A4A,
+ 27454 - 11905: 0xBFEE,
+ 27455 - 11905: 0x9A4B,
+ 27456 - 11905: 0x9A4C,
+ 27457 - 11905: 0x9A4D,
+ 27458 - 11905: 0x9A4E,
+ 27459 - 11905: 0xECA6,
+ 27460 - 11905: 0x9A4F,
+ 27461 - 11905: 0x9A50,
+ 27462 - 11905: 0xECA7,
+ 27463 - 11905: 0xD0AA,
+ 27464 - 11905: 0x9A51,
+ 27465 - 11905: 0xC7B8,
+ 27466 - 11905: 0x9A52,
+ 27467 - 11905: 0x9A53,
+ 27468 - 11905: 0xB8E8,
+ 27469 - 11905: 0x9A54,
+ 27470 - 11905: 0x9A55,
+ 27471 - 11905: 0x9A56,
+ 27472 - 11905: 0x9A57,
+ 27473 - 11905: 0x9A58,
+ 27474 - 11905: 0x9A59,
+ 27475 - 11905: 0x9A5A,
+ 27476 - 11905: 0x9A5B,
+ 27477 - 11905: 0x9A5C,
+ 27478 - 11905: 0x9A5D,
+ 27479 - 11905: 0x9A5E,
+ 27480 - 11905: 0x9A5F,
+ 27481 - 11905: 0xECA8,
+ 27482 - 11905: 0x9A60,
+ 27483 - 11905: 0x9A61,
+ 27484 - 11905: 0x9A62,
+ 27485 - 11905: 0x9A63,
+ 27486 - 11905: 0x9A64,
+ 27487 - 11905: 0x9A65,
+ 27488 - 11905: 0x9A66,
+ 27489 - 11905: 0x9A67,
+ 27490 - 11905: 0xD6B9,
+ 27491 - 11905: 0xD5FD,
+ 27492 - 11905: 0xB4CB,
+ 27493 - 11905: 0xB2BD,
+ 27494 - 11905: 0xCEE4,
+ 27495 - 11905: 0xC6E7,
+ 27496 - 11905: 0x9A68,
+ 27497 - 11905: 0x9A69,
+ 27498 - 11905: 0xCDE1,
+ 27499 - 11905: 0x9A6A,
+ 27500 - 11905: 0x9A6B,
+ 27501 - 11905: 0x9A6C,
+ 27502 - 11905: 0x9A6D,
+ 27503 - 11905: 0x9A6E,
+ 27504 - 11905: 0x9A6F,
+ 27505 - 11905: 0x9A70,
+ 27506 - 11905: 0x9A71,
+ 27507 - 11905: 0x9A72,
+ 27508 - 11905: 0x9A73,
+ 27509 - 11905: 0x9A74,
+ 27510 - 11905: 0x9A75,
+ 27511 - 11905: 0x9A76,
+ 27512 - 11905: 0x9A77,
+ 27513 - 11905: 0xB4F5,
+ 27514 - 11905: 0x9A78,
+ 27515 - 11905: 0xCBC0,
+ 27516 - 11905: 0xBCDF,
+ 27517 - 11905: 0x9A79,
+ 27518 - 11905: 0x9A7A,
+ 27519 - 11905: 0x9A7B,
+ 27520 - 11905: 0x9A7C,
+ 27521 - 11905: 0xE9E2,
+ 27522 - 11905: 0xE9E3,
+ 27523 - 11905: 0xD1EA,
+ 27524 - 11905: 0xE9E5,
+ 27525 - 11905: 0x9A7D,
+ 27526 - 11905: 0xB4F9,
+ 27527 - 11905: 0xE9E4,
+ 27528 - 11905: 0x9A7E,
+ 27529 - 11905: 0xD1B3,
+ 27530 - 11905: 0xCAE2,
+ 27531 - 11905: 0xB2D0,
+ 27532 - 11905: 0x9A80,
+ 27533 - 11905: 0xE9E8,
+ 27534 - 11905: 0x9A81,
+ 27535 - 11905: 0x9A82,
+ 27536 - 11905: 0x9A83,
+ 27537 - 11905: 0x9A84,
+ 27538 - 11905: 0xE9E6,
+ 27539 - 11905: 0xE9E7,
+ 27540 - 11905: 0x9A85,
+ 27541 - 11905: 0x9A86,
+ 27542 - 11905: 0xD6B3,
+ 27543 - 11905: 0x9A87,
+ 27544 - 11905: 0x9A88,
+ 27545 - 11905: 0x9A89,
+ 27546 - 11905: 0xE9E9,
+ 27547 - 11905: 0xE9EA,
+ 27548 - 11905: 0x9A8A,
+ 27549 - 11905: 0x9A8B,
+ 27550 - 11905: 0x9A8C,
+ 27551 - 11905: 0x9A8D,
+ 27552 - 11905: 0x9A8E,
+ 27553 - 11905: 0xE9EB,
+ 27554 - 11905: 0x9A8F,
+ 27555 - 11905: 0x9A90,
+ 27556 - 11905: 0x9A91,
+ 27557 - 11905: 0x9A92,
+ 27558 - 11905: 0x9A93,
+ 27559 - 11905: 0x9A94,
+ 27560 - 11905: 0x9A95,
+ 27561 - 11905: 0x9A96,
+ 27562 - 11905: 0xE9EC,
+ 27563 - 11905: 0x9A97,
+ 27564 - 11905: 0x9A98,
+ 27565 - 11905: 0x9A99,
+ 27566 - 11905: 0x9A9A,
+ 27567 - 11905: 0x9A9B,
+ 27568 - 11905: 0x9A9C,
+ 27569 - 11905: 0x9A9D,
+ 27570 - 11905: 0x9A9E,
+ 27571 - 11905: 0xECAF,
+ 27572 - 11905: 0xC5B9,
+ 27573 - 11905: 0xB6CE,
+ 27574 - 11905: 0x9A9F,
+ 27575 - 11905: 0xD2F3,
+ 27576 - 11905: 0x9AA0,
+ 27577 - 11905: 0x9AA1,
+ 27578 - 11905: 0x9AA2,
+ 27579 - 11905: 0x9AA3,
+ 27580 - 11905: 0x9AA4,
+ 27581 - 11905: 0x9AA5,
+ 27582 - 11905: 0x9AA6,
+ 27583 - 11905: 0xB5EE,
+ 27584 - 11905: 0x9AA7,
+ 27585 - 11905: 0xBBD9,
+ 27586 - 11905: 0xECB1,
+ 27587 - 11905: 0x9AA8,
+ 27588 - 11905: 0x9AA9,
+ 27589 - 11905: 0xD2E3,
+ 27590 - 11905: 0x9AAA,
+ 27591 - 11905: 0x9AAB,
+ 27592 - 11905: 0x9AAC,
+ 27593 - 11905: 0x9AAD,
+ 27594 - 11905: 0x9AAE,
+ 27595 - 11905: 0xCEE3,
+ 27596 - 11905: 0x9AAF,
+ 27597 - 11905: 0xC4B8,
+ 27598 - 11905: 0x9AB0,
+ 27599 - 11905: 0xC3BF,
+ 27600 - 11905: 0x9AB1,
+ 27601 - 11905: 0x9AB2,
+ 27602 - 11905: 0xB6BE,
+ 27603 - 11905: 0xD8B9,
+ 27604 - 11905: 0xB1C8,
+ 27605 - 11905: 0xB1CF,
+ 27606 - 11905: 0xB1D1,
+ 27607 - 11905: 0xC5FE,
+ 27608 - 11905: 0x9AB3,
+ 27609 - 11905: 0xB1D0,
+ 27610 - 11905: 0x9AB4,
+ 27611 - 11905: 0xC3AB,
+ 27612 - 11905: 0x9AB5,
+ 27613 - 11905: 0x9AB6,
+ 27614 - 11905: 0x9AB7,
+ 27615 - 11905: 0x9AB8,
+ 27616 - 11905: 0x9AB9,
+ 27617 - 11905: 0xD5B1,
+ 27618 - 11905: 0x9ABA,
+ 27619 - 11905: 0x9ABB,
+ 27620 - 11905: 0x9ABC,
+ 27621 - 11905: 0x9ABD,
+ 27622 - 11905: 0x9ABE,
+ 27623 - 11905: 0x9ABF,
+ 27624 - 11905: 0x9AC0,
+ 27625 - 11905: 0x9AC1,
+ 27626 - 11905: 0xEBA4,
+ 27627 - 11905: 0xBAC1,
+ 27628 - 11905: 0x9AC2,
+ 27629 - 11905: 0x9AC3,
+ 27630 - 11905: 0x9AC4,
+ 27631 - 11905: 0xCCBA,
+ 27632 - 11905: 0x9AC5,
+ 27633 - 11905: 0x9AC6,
+ 27634 - 11905: 0x9AC7,
+ 27635 - 11905: 0xEBA5,
+ 27636 - 11905: 0x9AC8,
+ 27637 - 11905: 0xEBA7,
+ 27638 - 11905: 0x9AC9,
+ 27639 - 11905: 0x9ACA,
+ 27640 - 11905: 0x9ACB,
+ 27641 - 11905: 0xEBA8,
+ 27642 - 11905: 0x9ACC,
+ 27643 - 11905: 0x9ACD,
+ 27644 - 11905: 0x9ACE,
+ 27645 - 11905: 0xEBA6,
+ 27646 - 11905: 0x9ACF,
+ 27647 - 11905: 0x9AD0,
+ 27648 - 11905: 0x9AD1,
+ 27649 - 11905: 0x9AD2,
+ 27650 - 11905: 0x9AD3,
+ 27651 - 11905: 0x9AD4,
+ 27652 - 11905: 0x9AD5,
+ 27653 - 11905: 0xEBA9,
+ 27654 - 11905: 0xEBAB,
+ 27655 - 11905: 0xEBAA,
+ 27656 - 11905: 0x9AD6,
+ 27657 - 11905: 0x9AD7,
+ 27658 - 11905: 0x9AD8,
+ 27659 - 11905: 0x9AD9,
+ 27660 - 11905: 0x9ADA,
+ 27661 - 11905: 0xEBAC,
+ 27662 - 11905: 0x9ADB,
+ 27663 - 11905: 0xCACF,
+ 27664 - 11905: 0xD8B5,
+ 27665 - 11905: 0xC3F1,
+ 27666 - 11905: 0x9ADC,
+ 27667 - 11905: 0xC3A5,
+ 27668 - 11905: 0xC6F8,
+ 27669 - 11905: 0xEBAD,
+ 27670 - 11905: 0xC4CA,
+ 27671 - 11905: 0x9ADD,
+ 27672 - 11905: 0xEBAE,
+ 27673 - 11905: 0xEBAF,
+ 27674 - 11905: 0xEBB0,
+ 27675 - 11905: 0xB7D5,
+ 27676 - 11905: 0x9ADE,
+ 27677 - 11905: 0x9ADF,
+ 27678 - 11905: 0x9AE0,
+ 27679 - 11905: 0xB7FA,
+ 27680 - 11905: 0x9AE1,
+ 27681 - 11905: 0xEBB1,
+ 27682 - 11905: 0xC7E2,
+ 27683 - 11905: 0x9AE2,
+ 27684 - 11905: 0xEBB3,
+ 27685 - 11905: 0x9AE3,
+ 27686 - 11905: 0xBAA4,
+ 27687 - 11905: 0xD1F5,
+ 27688 - 11905: 0xB0B1,
+ 27689 - 11905: 0xEBB2,
+ 27690 - 11905: 0xEBB4,
+ 27691 - 11905: 0x9AE4,
+ 27692 - 11905: 0x9AE5,
+ 27693 - 11905: 0x9AE6,
+ 27694 - 11905: 0xB5AA,
+ 27695 - 11905: 0xC2C8,
+ 27696 - 11905: 0xC7E8,
+ 27697 - 11905: 0x9AE7,
+ 27698 - 11905: 0xEBB5,
+ 27699 - 11905: 0x9AE8,
+ 27700 - 11905: 0xCBAE,
+ 27701 - 11905: 0xE3DF,
+ 27702 - 11905: 0x9AE9,
+ 27703 - 11905: 0x9AEA,
+ 27704 - 11905: 0xD3C0,
+ 27705 - 11905: 0x9AEB,
+ 27706 - 11905: 0x9AEC,
+ 27707 - 11905: 0x9AED,
+ 27708 - 11905: 0x9AEE,
+ 27709 - 11905: 0xD9DB,
+ 27710 - 11905: 0x9AEF,
+ 27711 - 11905: 0x9AF0,
+ 27712 - 11905: 0xCDA1,
+ 27713 - 11905: 0xD6AD,
+ 27714 - 11905: 0xC7F3,
+ 27715 - 11905: 0x9AF1,
+ 27716 - 11905: 0x9AF2,
+ 27717 - 11905: 0x9AF3,
+ 27718 - 11905: 0xD9E0,
+ 27719 - 11905: 0xBBE3,
+ 27720 - 11905: 0x9AF4,
+ 27721 - 11905: 0xBABA,
+ 27722 - 11905: 0xE3E2,
+ 27723 - 11905: 0x9AF5,
+ 27724 - 11905: 0x9AF6,
+ 27725 - 11905: 0x9AF7,
+ 27726 - 11905: 0x9AF8,
+ 27727 - 11905: 0x9AF9,
+ 27728 - 11905: 0xCFAB,
+ 27729 - 11905: 0x9AFA,
+ 27730 - 11905: 0x9AFB,
+ 27731 - 11905: 0x9AFC,
+ 27732 - 11905: 0xE3E0,
+ 27733 - 11905: 0xC9C7,
+ 27734 - 11905: 0x9AFD,
+ 27735 - 11905: 0xBAB9,
+ 27736 - 11905: 0x9AFE,
+ 27737 - 11905: 0x9B40,
+ 27738 - 11905: 0x9B41,
+ 27739 - 11905: 0xD1B4,
+ 27740 - 11905: 0xE3E1,
+ 27741 - 11905: 0xC8EA,
+ 27742 - 11905: 0xB9AF,
+ 27743 - 11905: 0xBDAD,
+ 27744 - 11905: 0xB3D8,
+ 27745 - 11905: 0xCEDB,
+ 27746 - 11905: 0x9B42,
+ 27747 - 11905: 0x9B43,
+ 27748 - 11905: 0xCCC0,
+ 27749 - 11905: 0x9B44,
+ 27750 - 11905: 0x9B45,
+ 27751 - 11905: 0x9B46,
+ 27752 - 11905: 0xE3E8,
+ 27753 - 11905: 0xE3E9,
+ 27754 - 11905: 0xCDF4,
+ 27755 - 11905: 0x9B47,
+ 27756 - 11905: 0x9B48,
+ 27757 - 11905: 0x9B49,
+ 27758 - 11905: 0x9B4A,
+ 27759 - 11905: 0x9B4B,
+ 27760 - 11905: 0xCCAD,
+ 27761 - 11905: 0x9B4C,
+ 27762 - 11905: 0xBCB3,
+ 27763 - 11905: 0x9B4D,
+ 27764 - 11905: 0xE3EA,
+ 27765 - 11905: 0x9B4E,
+ 27766 - 11905: 0xE3EB,
+ 27767 - 11905: 0x9B4F,
+ 27768 - 11905: 0x9B50,
+ 27769 - 11905: 0xD0DA,
+ 27770 - 11905: 0x9B51,
+ 27771 - 11905: 0x9B52,
+ 27772 - 11905: 0x9B53,
+ 27773 - 11905: 0xC6FB,
+ 27774 - 11905: 0xB7DA,
+ 27775 - 11905: 0x9B54,
+ 27776 - 11905: 0x9B55,
+ 27777 - 11905: 0xC7DF,
+ 27778 - 11905: 0xD2CA,
+ 27779 - 11905: 0xCED6,
+ 27780 - 11905: 0x9B56,
+ 27781 - 11905: 0xE3E4,
+ 27782 - 11905: 0xE3EC,
+ 27783 - 11905: 0x9B57,
+ 27784 - 11905: 0xC9F2,
+ 27785 - 11905: 0xB3C1,
+ 27786 - 11905: 0x9B58,
+ 27787 - 11905: 0x9B59,
+ 27788 - 11905: 0xE3E7,
+ 27789 - 11905: 0x9B5A,
+ 27790 - 11905: 0x9B5B,
+ 27791 - 11905: 0xC6E3,
+ 27792 - 11905: 0xE3E5,
+ 27793 - 11905: 0x9B5C,
+ 27794 - 11905: 0x9B5D,
+ 27795 - 11905: 0xEDB3,
+ 27796 - 11905: 0xE3E6,
+ 27797 - 11905: 0x9B5E,
+ 27798 - 11905: 0x9B5F,
+ 27799 - 11905: 0x9B60,
+ 27800 - 11905: 0x9B61,
+ 27801 - 11905: 0xC9B3,
+ 27802 - 11905: 0x9B62,
+ 27803 - 11905: 0xC5E6,
+ 27804 - 11905: 0x9B63,
+ 27805 - 11905: 0x9B64,
+ 27806 - 11905: 0x9B65,
+ 27807 - 11905: 0xB9B5,
+ 27808 - 11905: 0x9B66,
+ 27809 - 11905: 0xC3BB,
+ 27810 - 11905: 0x9B67,
+ 27811 - 11905: 0xE3E3,
+ 27812 - 11905: 0xC5BD,
+ 27813 - 11905: 0xC1A4,
+ 27814 - 11905: 0xC2D9,
+ 27815 - 11905: 0xB2D7,
+ 27816 - 11905: 0x9B68,
+ 27817 - 11905: 0xE3ED,
+ 27818 - 11905: 0xBBA6,
+ 27819 - 11905: 0xC4AD,
+ 27820 - 11905: 0x9B69,
+ 27821 - 11905: 0xE3F0,
+ 27822 - 11905: 0xBEDA,
+ 27823 - 11905: 0x9B6A,
+ 27824 - 11905: 0x9B6B,
+ 27825 - 11905: 0xE3FB,
+ 27826 - 11905: 0xE3F5,
+ 27827 - 11905: 0xBAD3,
+ 27828 - 11905: 0x9B6C,
+ 27829 - 11905: 0x9B6D,
+ 27830 - 11905: 0x9B6E,
+ 27831 - 11905: 0x9B6F,
+ 27832 - 11905: 0xB7D0,
+ 27833 - 11905: 0xD3CD,
+ 27834 - 11905: 0x9B70,
+ 27835 - 11905: 0xD6CE,
+ 27836 - 11905: 0xD5D3,
+ 27837 - 11905: 0xB9C1,
+ 27838 - 11905: 0xD5B4,
+ 27839 - 11905: 0xD1D8,
+ 27840 - 11905: 0x9B71,
+ 27841 - 11905: 0x9B72,
+ 27842 - 11905: 0x9B73,
+ 27843 - 11905: 0x9B74,
+ 27844 - 11905: 0xD0B9,
+ 27845 - 11905: 0xC7F6,
+ 27846 - 11905: 0x9B75,
+ 27847 - 11905: 0x9B76,
+ 27848 - 11905: 0x9B77,
+ 27849 - 11905: 0xC8AA,
+ 27850 - 11905: 0xB2B4,
+ 27851 - 11905: 0x9B78,
+ 27852 - 11905: 0xC3DA,
+ 27853 - 11905: 0x9B79,
+ 27854 - 11905: 0x9B7A,
+ 27855 - 11905: 0x9B7B,
+ 27856 - 11905: 0xE3EE,
+ 27857 - 11905: 0x9B7C,
+ 27858 - 11905: 0x9B7D,
+ 27859 - 11905: 0xE3FC,
+ 27860 - 11905: 0xE3EF,
+ 27861 - 11905: 0xB7A8,
+ 27862 - 11905: 0xE3F7,
+ 27863 - 11905: 0xE3F4,
+ 27864 - 11905: 0x9B7E,
+ 27865 - 11905: 0x9B80,
+ 27866 - 11905: 0x9B81,
+ 27867 - 11905: 0xB7BA,
+ 27868 - 11905: 0x9B82,
+ 27869 - 11905: 0x9B83,
+ 27870 - 11905: 0xC5A2,
+ 27871 - 11905: 0x9B84,
+ 27872 - 11905: 0xE3F6,
+ 27873 - 11905: 0xC5DD,
+ 27874 - 11905: 0xB2A8,
+ 27875 - 11905: 0xC6FC,
+ 27876 - 11905: 0x9B85,
+ 27877 - 11905: 0xC4E0,
+ 27878 - 11905: 0x9B86,
+ 27879 - 11905: 0x9B87,
+ 27880 - 11905: 0xD7A2,
+ 27881 - 11905: 0x9B88,
+ 27882 - 11905: 0xC0E1,
+ 27883 - 11905: 0xE3F9,
+ 27884 - 11905: 0x9B89,
+ 27885 - 11905: 0x9B8A,
+ 27886 - 11905: 0xE3FA,
+ 27887 - 11905: 0xE3FD,
+ 27888 - 11905: 0xCCA9,
+ 27889 - 11905: 0xE3F3,
+ 27890 - 11905: 0x9B8B,
+ 27891 - 11905: 0xD3BE,
+ 27892 - 11905: 0x9B8C,
+ 27893 - 11905: 0xB1C3,
+ 27894 - 11905: 0xEDB4,
+ 27895 - 11905: 0xE3F1,
+ 27896 - 11905: 0xE3F2,
+ 27897 - 11905: 0x9B8D,
+ 27898 - 11905: 0xE3F8,
+ 27899 - 11905: 0xD0BA,
+ 27900 - 11905: 0xC6C3,
+ 27901 - 11905: 0xD4F3,
+ 27902 - 11905: 0xE3FE,
+ 27903 - 11905: 0x9B8E,
+ 27904 - 11905: 0x9B8F,
+ 27905 - 11905: 0xBDE0,
+ 27906 - 11905: 0x9B90,
+ 27907 - 11905: 0x9B91,
+ 27908 - 11905: 0xE4A7,
+ 27909 - 11905: 0x9B92,
+ 27910 - 11905: 0x9B93,
+ 27911 - 11905: 0xE4A6,
+ 27912 - 11905: 0x9B94,
+ 27913 - 11905: 0x9B95,
+ 27914 - 11905: 0x9B96,
+ 27915 - 11905: 0xD1F3,
+ 27916 - 11905: 0xE4A3,
+ 27917 - 11905: 0x9B97,
+ 27918 - 11905: 0xE4A9,
+ 27919 - 11905: 0x9B98,
+ 27920 - 11905: 0x9B99,
+ 27921 - 11905: 0x9B9A,
+ 27922 - 11905: 0xC8F7,
+ 27923 - 11905: 0x9B9B,
+ 27924 - 11905: 0x9B9C,
+ 27925 - 11905: 0x9B9D,
+ 27926 - 11905: 0x9B9E,
+ 27927 - 11905: 0xCFB4,
+ 27928 - 11905: 0x9B9F,
+ 27929 - 11905: 0xE4A8,
+ 27930 - 11905: 0xE4AE,
+ 27931 - 11905: 0xC2E5,
+ 27932 - 11905: 0x9BA0,
+ 27933 - 11905: 0x9BA1,
+ 27934 - 11905: 0xB6B4,
+ 27935 - 11905: 0x9BA2,
+ 27936 - 11905: 0x9BA3,
+ 27937 - 11905: 0x9BA4,
+ 27938 - 11905: 0x9BA5,
+ 27939 - 11905: 0x9BA6,
+ 27940 - 11905: 0x9BA7,
+ 27941 - 11905: 0xBDF2,
+ 27942 - 11905: 0x9BA8,
+ 27943 - 11905: 0xE4A2,
+ 27944 - 11905: 0x9BA9,
+ 27945 - 11905: 0x9BAA,
+ 27946 - 11905: 0xBAE9,
+ 27947 - 11905: 0xE4AA,
+ 27948 - 11905: 0x9BAB,
+ 27949 - 11905: 0x9BAC,
+ 27950 - 11905: 0xE4AC,
+ 27951 - 11905: 0x9BAD,
+ 27952 - 11905: 0x9BAE,
+ 27953 - 11905: 0xB6FD,
+ 27954 - 11905: 0xD6DE,
+ 27955 - 11905: 0xE4B2,
+ 27956 - 11905: 0x9BAF,
+ 27957 - 11905: 0xE4AD,
+ 27958 - 11905: 0x9BB0,
+ 27959 - 11905: 0x9BB1,
+ 27960 - 11905: 0x9BB2,
+ 27961 - 11905: 0xE4A1,
+ 27962 - 11905: 0x9BB3,
+ 27963 - 11905: 0xBBEE,
+ 27964 - 11905: 0xCDDD,
+ 27965 - 11905: 0xC7A2,
+ 27966 - 11905: 0xC5C9,
+ 27967 - 11905: 0x9BB4,
+ 27968 - 11905: 0x9BB5,
+ 27969 - 11905: 0xC1F7,
+ 27970 - 11905: 0x9BB6,
+ 27971 - 11905: 0xE4A4,
+ 27972 - 11905: 0x9BB7,
+ 27973 - 11905: 0xC7B3,
+ 27974 - 11905: 0xBDAC,
+ 27975 - 11905: 0xBDBD,
+ 27976 - 11905: 0xE4A5,
+ 27977 - 11905: 0x9BB8,
+ 27978 - 11905: 0xD7C7,
+ 27979 - 11905: 0xB2E2,
+ 27980 - 11905: 0x9BB9,
+ 27981 - 11905: 0xE4AB,
+ 27982 - 11905: 0xBCC3,
+ 27983 - 11905: 0xE4AF,
+ 27984 - 11905: 0x9BBA,
+ 27985 - 11905: 0xBBEB,
+ 27986 - 11905: 0xE4B0,
+ 27987 - 11905: 0xC5A8,
+ 27988 - 11905: 0xE4B1,
+ 27989 - 11905: 0x9BBB,
+ 27990 - 11905: 0x9BBC,
+ 27991 - 11905: 0x9BBD,
+ 27992 - 11905: 0x9BBE,
+ 27993 - 11905: 0xD5E3,
+ 27994 - 11905: 0xBFA3,
+ 27995 - 11905: 0x9BBF,
+ 27996 - 11905: 0xE4BA,
+ 27997 - 11905: 0x9BC0,
+ 27998 - 11905: 0xE4B7,
+ 27999 - 11905: 0x9BC1,
+ 28000 - 11905: 0xE4BB,
+ 28001 - 11905: 0x9BC2,
+ 28002 - 11905: 0x9BC3,
+ 28003 - 11905: 0xE4BD,
+ 28004 - 11905: 0x9BC4,
+ 28005 - 11905: 0x9BC5,
+ 28006 - 11905: 0xC6D6,
+ 28007 - 11905: 0x9BC6,
+ 28008 - 11905: 0x9BC7,
+ 28009 - 11905: 0xBAC6,
+ 28010 - 11905: 0xC0CB,
+ 28011 - 11905: 0x9BC8,
+ 28012 - 11905: 0x9BC9,
+ 28013 - 11905: 0x9BCA,
+ 28014 - 11905: 0xB8A1,
+ 28015 - 11905: 0xE4B4,
+ 28016 - 11905: 0x9BCB,
+ 28017 - 11905: 0x9BCC,
+ 28018 - 11905: 0x9BCD,
+ 28019 - 11905: 0x9BCE,
+ 28020 - 11905: 0xD4A1,
+ 28021 - 11905: 0x9BCF,
+ 28022 - 11905: 0x9BD0,
+ 28023 - 11905: 0xBAA3,
+ 28024 - 11905: 0xBDFE,
+ 28025 - 11905: 0x9BD1,
+ 28026 - 11905: 0x9BD2,
+ 28027 - 11905: 0x9BD3,
+ 28028 - 11905: 0xE4BC,
+ 28029 - 11905: 0x9BD4,
+ 28030 - 11905: 0x9BD5,
+ 28031 - 11905: 0x9BD6,
+ 28032 - 11905: 0x9BD7,
+ 28033 - 11905: 0x9BD8,
+ 28034 - 11905: 0xCDBF,
+ 28035 - 11905: 0x9BD9,
+ 28036 - 11905: 0x9BDA,
+ 28037 - 11905: 0xC4F9,
+ 28038 - 11905: 0x9BDB,
+ 28039 - 11905: 0x9BDC,
+ 28040 - 11905: 0xCFFB,
+ 28041 - 11905: 0xC9E6,
+ 28042 - 11905: 0x9BDD,
+ 28043 - 11905: 0x9BDE,
+ 28044 - 11905: 0xD3BF,
+ 28045 - 11905: 0x9BDF,
+ 28046 - 11905: 0xCFD1,
+ 28047 - 11905: 0x9BE0,
+ 28048 - 11905: 0x9BE1,
+ 28049 - 11905: 0xE4B3,
+ 28050 - 11905: 0x9BE2,
+ 28051 - 11905: 0xE4B8,
+ 28052 - 11905: 0xE4B9,
+ 28053 - 11905: 0xCCE9,
+ 28054 - 11905: 0x9BE3,
+ 28055 - 11905: 0x9BE4,
+ 28056 - 11905: 0x9BE5,
+ 28057 - 11905: 0x9BE6,
+ 28058 - 11905: 0x9BE7,
+ 28059 - 11905: 0xCCCE,
+ 28060 - 11905: 0x9BE8,
+ 28061 - 11905: 0xC0D4,
+ 28062 - 11905: 0xE4B5,
+ 28063 - 11905: 0xC1B0,
+ 28064 - 11905: 0xE4B6,
+ 28065 - 11905: 0xCED0,
+ 28066 - 11905: 0x9BE9,
+ 28067 - 11905: 0xBBC1,
+ 28068 - 11905: 0xB5D3,
+ 28069 - 11905: 0x9BEA,
+ 28070 - 11905: 0xC8F3,
+ 28071 - 11905: 0xBDA7,
+ 28072 - 11905: 0xD5C7,
+ 28073 - 11905: 0xC9AC,
+ 28074 - 11905: 0xB8A2,
+ 28075 - 11905: 0xE4CA,
+ 28076 - 11905: 0x9BEB,
+ 28077 - 11905: 0x9BEC,
+ 28078 - 11905: 0xE4CC,
+ 28079 - 11905: 0xD1C4,
+ 28080 - 11905: 0x9BED,
+ 28081 - 11905: 0x9BEE,
+ 28082 - 11905: 0xD2BA,
+ 28083 - 11905: 0x9BEF,
+ 28084 - 11905: 0x9BF0,
+ 28085 - 11905: 0xBAAD,
+ 28086 - 11905: 0x9BF1,
+ 28087 - 11905: 0x9BF2,
+ 28088 - 11905: 0xBAD4,
+ 28089 - 11905: 0x9BF3,
+ 28090 - 11905: 0x9BF4,
+ 28091 - 11905: 0x9BF5,
+ 28092 - 11905: 0x9BF6,
+ 28093 - 11905: 0x9BF7,
+ 28094 - 11905: 0x9BF8,
+ 28095 - 11905: 0xE4C3,
+ 28096 - 11905: 0xB5ED,
+ 28097 - 11905: 0x9BF9,
+ 28098 - 11905: 0x9BFA,
+ 28099 - 11905: 0x9BFB,
+ 28100 - 11905: 0xD7CD,
+ 28101 - 11905: 0xE4C0,
+ 28102 - 11905: 0xCFFD,
+ 28103 - 11905: 0xE4BF,
+ 28104 - 11905: 0x9BFC,
+ 28105 - 11905: 0x9BFD,
+ 28106 - 11905: 0x9BFE,
+ 28107 - 11905: 0xC1DC,
+ 28108 - 11905: 0xCCCA,
+ 28109 - 11905: 0x9C40,
+ 28110 - 11905: 0x9C41,
+ 28111 - 11905: 0x9C42,
+ 28112 - 11905: 0x9C43,
+ 28113 - 11905: 0xCAE7,
+ 28114 - 11905: 0x9C44,
+ 28115 - 11905: 0x9C45,
+ 28116 - 11905: 0x9C46,
+ 28117 - 11905: 0x9C47,
+ 28118 - 11905: 0xC4D7,
+ 28119 - 11905: 0x9C48,
+ 28120 - 11905: 0xCCD4,
+ 28121 - 11905: 0xE4C8,
+ 28122 - 11905: 0x9C49,
+ 28123 - 11905: 0x9C4A,
+ 28124 - 11905: 0x9C4B,
+ 28125 - 11905: 0xE4C7,
+ 28126 - 11905: 0xE4C1,
+ 28127 - 11905: 0x9C4C,
+ 28128 - 11905: 0xE4C4,
+ 28129 - 11905: 0xB5AD,
+ 28130 - 11905: 0x9C4D,
+ 28131 - 11905: 0x9C4E,
+ 28132 - 11905: 0xD3D9,
+ 28133 - 11905: 0x9C4F,
+ 28134 - 11905: 0xE4C6,
+ 28135 - 11905: 0x9C50,
+ 28136 - 11905: 0x9C51,
+ 28137 - 11905: 0x9C52,
+ 28138 - 11905: 0x9C53,
+ 28139 - 11905: 0xD2F9,
+ 28140 - 11905: 0xB4E3,
+ 28141 - 11905: 0x9C54,
+ 28142 - 11905: 0xBBB4,
+ 28143 - 11905: 0x9C55,
+ 28144 - 11905: 0x9C56,
+ 28145 - 11905: 0xC9EE,
+ 28146 - 11905: 0x9C57,
+ 28147 - 11905: 0xB4BE,
+ 28148 - 11905: 0x9C58,
+ 28149 - 11905: 0x9C59,
+ 28150 - 11905: 0x9C5A,
+ 28151 - 11905: 0xBBEC,
+ 28152 - 11905: 0x9C5B,
+ 28153 - 11905: 0xD1CD,
+ 28154 - 11905: 0x9C5C,
+ 28155 - 11905: 0xCCED,
+ 28156 - 11905: 0xEDB5,
+ 28157 - 11905: 0x9C5D,
+ 28158 - 11905: 0x9C5E,
+ 28159 - 11905: 0x9C5F,
+ 28160 - 11905: 0x9C60,
+ 28161 - 11905: 0x9C61,
+ 28162 - 11905: 0x9C62,
+ 28163 - 11905: 0x9C63,
+ 28164 - 11905: 0x9C64,
+ 28165 - 11905: 0xC7E5,
+ 28166 - 11905: 0x9C65,
+ 28167 - 11905: 0x9C66,
+ 28168 - 11905: 0x9C67,
+ 28169 - 11905: 0x9C68,
+ 28170 - 11905: 0xD4A8,
+ 28171 - 11905: 0x9C69,
+ 28172 - 11905: 0xE4CB,
+ 28173 - 11905: 0xD7D5,
+ 28174 - 11905: 0xE4C2,
+ 28175 - 11905: 0x9C6A,
+ 28176 - 11905: 0xBDA5,
+ 28177 - 11905: 0xE4C5,
+ 28178 - 11905: 0x9C6B,
+ 28179 - 11905: 0x9C6C,
+ 28180 - 11905: 0xD3E6,
+ 28181 - 11905: 0x9C6D,
+ 28182 - 11905: 0xE4C9,
+ 28183 - 11905: 0xC9F8,
+ 28184 - 11905: 0x9C6E,
+ 28185 - 11905: 0x9C6F,
+ 28186 - 11905: 0xE4BE,
+ 28187 - 11905: 0x9C70,
+ 28188 - 11905: 0x9C71,
+ 28189 - 11905: 0xD3E5,
+ 28190 - 11905: 0x9C72,
+ 28191 - 11905: 0x9C73,
+ 28192 - 11905: 0xC7FE,
+ 28193 - 11905: 0xB6C9,
+ 28194 - 11905: 0x9C74,
+ 28195 - 11905: 0xD4FC,
+ 28196 - 11905: 0xB2B3,
+ 28197 - 11905: 0xE4D7,
+ 28198 - 11905: 0x9C75,
+ 28199 - 11905: 0x9C76,
+ 28200 - 11905: 0x9C77,
+ 28201 - 11905: 0xCEC2,
+ 28202 - 11905: 0x9C78,
+ 28203 - 11905: 0xE4CD,
+ 28204 - 11905: 0x9C79,
+ 28205 - 11905: 0xCEBC,
+ 28206 - 11905: 0x9C7A,
+ 28207 - 11905: 0xB8DB,
+ 28208 - 11905: 0x9C7B,
+ 28209 - 11905: 0x9C7C,
+ 28210 - 11905: 0xE4D6,
+ 28211 - 11905: 0x9C7D,
+ 28212 - 11905: 0xBFCA,
+ 28213 - 11905: 0x9C7E,
+ 28214 - 11905: 0x9C80,
+ 28215 - 11905: 0x9C81,
+ 28216 - 11905: 0xD3CE,
+ 28217 - 11905: 0x9C82,
+ 28218 - 11905: 0xC3EC,
+ 28219 - 11905: 0x9C83,
+ 28220 - 11905: 0x9C84,
+ 28221 - 11905: 0x9C85,
+ 28222 - 11905: 0x9C86,
+ 28223 - 11905: 0x9C87,
+ 28224 - 11905: 0x9C88,
+ 28225 - 11905: 0x9C89,
+ 28226 - 11905: 0x9C8A,
+ 28227 - 11905: 0xC5C8,
+ 28228 - 11905: 0xE4D8,
+ 28229 - 11905: 0x9C8B,
+ 28230 - 11905: 0x9C8C,
+ 28231 - 11905: 0x9C8D,
+ 28232 - 11905: 0x9C8E,
+ 28233 - 11905: 0x9C8F,
+ 28234 - 11905: 0x9C90,
+ 28235 - 11905: 0x9C91,
+ 28236 - 11905: 0x9C92,
+ 28237 - 11905: 0xCDC4,
+ 28238 - 11905: 0xE4CF,
+ 28239 - 11905: 0x9C93,
+ 28240 - 11905: 0x9C94,
+ 28241 - 11905: 0x9C95,
+ 28242 - 11905: 0x9C96,
+ 28243 - 11905: 0xE4D4,
+ 28244 - 11905: 0xE4D5,
+ 28245 - 11905: 0x9C97,
+ 28246 - 11905: 0xBAFE,
+ 28247 - 11905: 0x9C98,
+ 28248 - 11905: 0xCFE6,
+ 28249 - 11905: 0x9C99,
+ 28250 - 11905: 0x9C9A,
+ 28251 - 11905: 0xD5BF,
+ 28252 - 11905: 0x9C9B,
+ 28253 - 11905: 0x9C9C,
+ 28254 - 11905: 0x9C9D,
+ 28255 - 11905: 0xE4D2,
+ 28256 - 11905: 0x9C9E,
+ 28257 - 11905: 0x9C9F,
+ 28258 - 11905: 0x9CA0,
+ 28259 - 11905: 0x9CA1,
+ 28260 - 11905: 0x9CA2,
+ 28261 - 11905: 0x9CA3,
+ 28262 - 11905: 0x9CA4,
+ 28263 - 11905: 0x9CA5,
+ 28264 - 11905: 0x9CA6,
+ 28265 - 11905: 0x9CA7,
+ 28266 - 11905: 0x9CA8,
+ 28267 - 11905: 0xE4D0,
+ 28268 - 11905: 0x9CA9,
+ 28269 - 11905: 0x9CAA,
+ 28270 - 11905: 0xE4CE,
+ 28271 - 11905: 0x9CAB,
+ 28272 - 11905: 0x9CAC,
+ 28273 - 11905: 0x9CAD,
+ 28274 - 11905: 0x9CAE,
+ 28275 - 11905: 0x9CAF,
+ 28276 - 11905: 0x9CB0,
+ 28277 - 11905: 0x9CB1,
+ 28278 - 11905: 0x9CB2,
+ 28279 - 11905: 0x9CB3,
+ 28280 - 11905: 0x9CB4,
+ 28281 - 11905: 0x9CB5,
+ 28282 - 11905: 0x9CB6,
+ 28283 - 11905: 0x9CB7,
+ 28284 - 11905: 0x9CB8,
+ 28285 - 11905: 0x9CB9,
+ 28286 - 11905: 0xCDE5,
+ 28287 - 11905: 0xCAAA,
+ 28288 - 11905: 0x9CBA,
+ 28289 - 11905: 0x9CBB,
+ 28290 - 11905: 0x9CBC,
+ 28291 - 11905: 0xC0A3,
+ 28292 - 11905: 0x9CBD,
+ 28293 - 11905: 0xBDA6,
+ 28294 - 11905: 0xE4D3,
+ 28295 - 11905: 0x9CBE,
+ 28296 - 11905: 0x9CBF,
+ 28297 - 11905: 0xB8C8,
+ 28298 - 11905: 0x9CC0,
+ 28299 - 11905: 0x9CC1,
+ 28300 - 11905: 0x9CC2,
+ 28301 - 11905: 0x9CC3,
+ 28302 - 11905: 0x9CC4,
+ 28303 - 11905: 0xE4E7,
+ 28304 - 11905: 0xD4B4,
+ 28305 - 11905: 0x9CC5,
+ 28306 - 11905: 0x9CC6,
+ 28307 - 11905: 0x9CC7,
+ 28308 - 11905: 0x9CC8,
+ 28309 - 11905: 0x9CC9,
+ 28310 - 11905: 0x9CCA,
+ 28311 - 11905: 0x9CCB,
+ 28312 - 11905: 0xE4DB,
+ 28313 - 11905: 0x9CCC,
+ 28314 - 11905: 0x9CCD,
+ 28315 - 11905: 0x9CCE,
+ 28316 - 11905: 0xC1EF,
+ 28317 - 11905: 0x9CCF,
+ 28318 - 11905: 0x9CD0,
+ 28319 - 11905: 0xE4E9,
+ 28320 - 11905: 0x9CD1,
+ 28321 - 11905: 0x9CD2,
+ 28322 - 11905: 0xD2E7,
+ 28323 - 11905: 0x9CD3,
+ 28324 - 11905: 0x9CD4,
+ 28325 - 11905: 0xE4DF,
+ 28326 - 11905: 0x9CD5,
+ 28327 - 11905: 0xE4E0,
+ 28328 - 11905: 0x9CD6,
+ 28329 - 11905: 0x9CD7,
+ 28330 - 11905: 0xCFAA,
+ 28331 - 11905: 0x9CD8,
+ 28332 - 11905: 0x9CD9,
+ 28333 - 11905: 0x9CDA,
+ 28334 - 11905: 0x9CDB,
+ 28335 - 11905: 0xCBDD,
+ 28336 - 11905: 0x9CDC,
+ 28337 - 11905: 0xE4DA,
+ 28338 - 11905: 0xE4D1,
+ 28339 - 11905: 0x9CDD,
+ 28340 - 11905: 0xE4E5,
+ 28341 - 11905: 0x9CDE,
+ 28342 - 11905: 0xC8DC,
+ 28343 - 11905: 0xE4E3,
+ 28344 - 11905: 0x9CDF,
+ 28345 - 11905: 0x9CE0,
+ 28346 - 11905: 0xC4E7,
+ 28347 - 11905: 0xE4E2,
+ 28348 - 11905: 0x9CE1,
+ 28349 - 11905: 0xE4E1,
+ 28350 - 11905: 0x9CE2,
+ 28351 - 11905: 0x9CE3,
+ 28352 - 11905: 0x9CE4,
+ 28353 - 11905: 0xB3FC,
+ 28354 - 11905: 0xE4E8,
+ 28355 - 11905: 0x9CE5,
+ 28356 - 11905: 0x9CE6,
+ 28357 - 11905: 0x9CE7,
+ 28358 - 11905: 0x9CE8,
+ 28359 - 11905: 0xB5E1,
+ 28360 - 11905: 0x9CE9,
+ 28361 - 11905: 0x9CEA,
+ 28362 - 11905: 0x9CEB,
+ 28363 - 11905: 0xD7CC,
+ 28364 - 11905: 0x9CEC,
+ 28365 - 11905: 0x9CED,
+ 28366 - 11905: 0x9CEE,
+ 28367 - 11905: 0xE4E6,
+ 28368 - 11905: 0x9CEF,
+ 28369 - 11905: 0xBBAC,
+ 28370 - 11905: 0x9CF0,
+ 28371 - 11905: 0xD7D2,
+ 28372 - 11905: 0xCCCF,
+ 28373 - 11905: 0xEBF8,
+ 28374 - 11905: 0x9CF1,
+ 28375 - 11905: 0xE4E4,
+ 28376 - 11905: 0x9CF2,
+ 28377 - 11905: 0x9CF3,
+ 28378 - 11905: 0xB9F6,
+ 28379 - 11905: 0x9CF4,
+ 28380 - 11905: 0x9CF5,
+ 28381 - 11905: 0x9CF6,
+ 28382 - 11905: 0xD6CD,
+ 28383 - 11905: 0xE4D9,
+ 28384 - 11905: 0xE4DC,
+ 28385 - 11905: 0xC2FA,
+ 28386 - 11905: 0xE4DE,
+ 28387 - 11905: 0x9CF7,
+ 28388 - 11905: 0xC2CB,
+ 28389 - 11905: 0xC0C4,
+ 28390 - 11905: 0xC2D0,
+ 28391 - 11905: 0x9CF8,
+ 28392 - 11905: 0xB1F5,
+ 28393 - 11905: 0xCCB2,
+ 28394 - 11905: 0x9CF9,
+ 28395 - 11905: 0x9CFA,
+ 28396 - 11905: 0x9CFB,
+ 28397 - 11905: 0x9CFC,
+ 28398 - 11905: 0x9CFD,
+ 28399 - 11905: 0x9CFE,
+ 28400 - 11905: 0x9D40,
+ 28401 - 11905: 0x9D41,
+ 28402 - 11905: 0x9D42,
+ 28403 - 11905: 0x9D43,
+ 28404 - 11905: 0xB5CE,
+ 28405 - 11905: 0x9D44,
+ 28406 - 11905: 0x9D45,
+ 28407 - 11905: 0x9D46,
+ 28408 - 11905: 0x9D47,
+ 28409 - 11905: 0xE4EF,
+ 28410 - 11905: 0x9D48,
+ 28411 - 11905: 0x9D49,
+ 28412 - 11905: 0x9D4A,
+ 28413 - 11905: 0x9D4B,
+ 28414 - 11905: 0x9D4C,
+ 28415 - 11905: 0x9D4D,
+ 28416 - 11905: 0x9D4E,
+ 28417 - 11905: 0x9D4F,
+ 28418 - 11905: 0xC6AF,
+ 28419 - 11905: 0x9D50,
+ 28420 - 11905: 0x9D51,
+ 28421 - 11905: 0x9D52,
+ 28422 - 11905: 0xC6E1,
+ 28423 - 11905: 0x9D53,
+ 28424 - 11905: 0x9D54,
+ 28425 - 11905: 0xE4F5,
+ 28426 - 11905: 0x9D55,
+ 28427 - 11905: 0x9D56,
+ 28428 - 11905: 0x9D57,
+ 28429 - 11905: 0x9D58,
+ 28430 - 11905: 0x9D59,
+ 28431 - 11905: 0xC2A9,
+ 28432 - 11905: 0x9D5A,
+ 28433 - 11905: 0x9D5B,
+ 28434 - 11905: 0x9D5C,
+ 28435 - 11905: 0xC0EC,
+ 28436 - 11905: 0xD1DD,
+ 28437 - 11905: 0xE4EE,
+ 28438 - 11905: 0x9D5D,
+ 28439 - 11905: 0x9D5E,
+ 28440 - 11905: 0x9D5F,
+ 28441 - 11905: 0x9D60,
+ 28442 - 11905: 0x9D61,
+ 28443 - 11905: 0x9D62,
+ 28444 - 11905: 0x9D63,
+ 28445 - 11905: 0x9D64,
+ 28446 - 11905: 0x9D65,
+ 28447 - 11905: 0x9D66,
+ 28448 - 11905: 0xC4AE,
+ 28449 - 11905: 0x9D67,
+ 28450 - 11905: 0x9D68,
+ 28451 - 11905: 0x9D69,
+ 28452 - 11905: 0xE4ED,
+ 28453 - 11905: 0x9D6A,
+ 28454 - 11905: 0x9D6B,
+ 28455 - 11905: 0x9D6C,
+ 28456 - 11905: 0x9D6D,
+ 28457 - 11905: 0xE4F6,
+ 28458 - 11905: 0xE4F4,
+ 28459 - 11905: 0xC2FE,
+ 28460 - 11905: 0x9D6E,
+ 28461 - 11905: 0xE4DD,
+ 28462 - 11905: 0x9D6F,
+ 28463 - 11905: 0xE4F0,
+ 28464 - 11905: 0x9D70,
+ 28465 - 11905: 0xCAFE,
+ 28466 - 11905: 0x9D71,
+ 28467 - 11905: 0xD5C4,
+ 28468 - 11905: 0x9D72,
+ 28469 - 11905: 0x9D73,
+ 28470 - 11905: 0xE4F1,
+ 28471 - 11905: 0x9D74,
+ 28472 - 11905: 0x9D75,
+ 28473 - 11905: 0x9D76,
+ 28474 - 11905: 0x9D77,
+ 28475 - 11905: 0x9D78,
+ 28476 - 11905: 0x9D79,
+ 28477 - 11905: 0x9D7A,
+ 28478 - 11905: 0xD1FA,
+ 28479 - 11905: 0x9D7B,
+ 28480 - 11905: 0x9D7C,
+ 28481 - 11905: 0x9D7D,
+ 28482 - 11905: 0x9D7E,
+ 28483 - 11905: 0x9D80,
+ 28484 - 11905: 0x9D81,
+ 28485 - 11905: 0x9D82,
+ 28486 - 11905: 0xE4EB,
+ 28487 - 11905: 0xE4EC,
+ 28488 - 11905: 0x9D83,
+ 28489 - 11905: 0x9D84,
+ 28490 - 11905: 0x9D85,
+ 28491 - 11905: 0xE4F2,
+ 28492 - 11905: 0x9D86,
+ 28493 - 11905: 0xCEAB,
+ 28494 - 11905: 0x9D87,
+ 28495 - 11905: 0x9D88,
+ 28496 - 11905: 0x9D89,
+ 28497 - 11905: 0x9D8A,
+ 28498 - 11905: 0x9D8B,
+ 28499 - 11905: 0x9D8C,
+ 28500 - 11905: 0x9D8D,
+ 28501 - 11905: 0x9D8E,
+ 28502 - 11905: 0x9D8F,
+ 28503 - 11905: 0x9D90,
+ 28504 - 11905: 0xC5CB,
+ 28505 - 11905: 0x9D91,
+ 28506 - 11905: 0x9D92,
+ 28507 - 11905: 0x9D93,
+ 28508 - 11905: 0xC7B1,
+ 28509 - 11905: 0x9D94,
+ 28510 - 11905: 0xC2BA,
+ 28511 - 11905: 0x9D95,
+ 28512 - 11905: 0x9D96,
+ 28513 - 11905: 0x9D97,
+ 28514 - 11905: 0xE4EA,
+ 28515 - 11905: 0x9D98,
+ 28516 - 11905: 0x9D99,
+ 28517 - 11905: 0x9D9A,
+ 28518 - 11905: 0xC1CA,
+ 28519 - 11905: 0x9D9B,
+ 28520 - 11905: 0x9D9C,
+ 28521 - 11905: 0x9D9D,
+ 28522 - 11905: 0x9D9E,
+ 28523 - 11905: 0x9D9F,
+ 28524 - 11905: 0x9DA0,
+ 28525 - 11905: 0xCCB6,
+ 28526 - 11905: 0xB3B1,
+ 28527 - 11905: 0x9DA1,
+ 28528 - 11905: 0x9DA2,
+ 28529 - 11905: 0x9DA3,
+ 28530 - 11905: 0xE4FB,
+ 28531 - 11905: 0x9DA4,
+ 28532 - 11905: 0xE4F3,
+ 28533 - 11905: 0x9DA5,
+ 28534 - 11905: 0x9DA6,
+ 28535 - 11905: 0x9DA7,
+ 28536 - 11905: 0xE4FA,
+ 28537 - 11905: 0x9DA8,
+ 28538 - 11905: 0xE4FD,
+ 28539 - 11905: 0x9DA9,
+ 28540 - 11905: 0xE4FC,
+ 28541 - 11905: 0x9DAA,
+ 28542 - 11905: 0x9DAB,
+ 28543 - 11905: 0x9DAC,
+ 28544 - 11905: 0x9DAD,
+ 28545 - 11905: 0x9DAE,
+ 28546 - 11905: 0x9DAF,
+ 28547 - 11905: 0x9DB0,
+ 28548 - 11905: 0xB3CE,
+ 28549 - 11905: 0x9DB1,
+ 28550 - 11905: 0x9DB2,
+ 28551 - 11905: 0x9DB3,
+ 28552 - 11905: 0xB3BA,
+ 28553 - 11905: 0xE4F7,
+ 28554 - 11905: 0x9DB4,
+ 28555 - 11905: 0x9DB5,
+ 28556 - 11905: 0xE4F9,
+ 28557 - 11905: 0xE4F8,
+ 28558 - 11905: 0xC5EC,
+ 28559 - 11905: 0x9DB6,
+ 28560 - 11905: 0x9DB7,
+ 28561 - 11905: 0x9DB8,
+ 28562 - 11905: 0x9DB9,
+ 28563 - 11905: 0x9DBA,
+ 28564 - 11905: 0x9DBB,
+ 28565 - 11905: 0x9DBC,
+ 28566 - 11905: 0x9DBD,
+ 28567 - 11905: 0x9DBE,
+ 28568 - 11905: 0x9DBF,
+ 28569 - 11905: 0x9DC0,
+ 28570 - 11905: 0x9DC1,
+ 28571 - 11905: 0x9DC2,
+ 28572 - 11905: 0xC0BD,
+ 28573 - 11905: 0x9DC3,
+ 28574 - 11905: 0x9DC4,
+ 28575 - 11905: 0x9DC5,
+ 28576 - 11905: 0x9DC6,
+ 28577 - 11905: 0xD4E8,
+ 28578 - 11905: 0x9DC7,
+ 28579 - 11905: 0x9DC8,
+ 28580 - 11905: 0x9DC9,
+ 28581 - 11905: 0x9DCA,
+ 28582 - 11905: 0x9DCB,
+ 28583 - 11905: 0xE5A2,
+ 28584 - 11905: 0x9DCC,
+ 28585 - 11905: 0x9DCD,
+ 28586 - 11905: 0x9DCE,
+ 28587 - 11905: 0x9DCF,
+ 28588 - 11905: 0x9DD0,
+ 28589 - 11905: 0x9DD1,
+ 28590 - 11905: 0x9DD2,
+ 28591 - 11905: 0x9DD3,
+ 28592 - 11905: 0x9DD4,
+ 28593 - 11905: 0x9DD5,
+ 28594 - 11905: 0x9DD6,
+ 28595 - 11905: 0xB0C4,
+ 28596 - 11905: 0x9DD7,
+ 28597 - 11905: 0x9DD8,
+ 28598 - 11905: 0xE5A4,
+ 28599 - 11905: 0x9DD9,
+ 28600 - 11905: 0x9DDA,
+ 28601 - 11905: 0xE5A3,
+ 28602 - 11905: 0x9DDB,
+ 28603 - 11905: 0x9DDC,
+ 28604 - 11905: 0x9DDD,
+ 28605 - 11905: 0x9DDE,
+ 28606 - 11905: 0x9DDF,
+ 28607 - 11905: 0x9DE0,
+ 28608 - 11905: 0xBCA4,
+ 28609 - 11905: 0x9DE1,
+ 28610 - 11905: 0xE5A5,
+ 28611 - 11905: 0x9DE2,
+ 28612 - 11905: 0x9DE3,
+ 28613 - 11905: 0x9DE4,
+ 28614 - 11905: 0x9DE5,
+ 28615 - 11905: 0x9DE6,
+ 28616 - 11905: 0x9DE7,
+ 28617 - 11905: 0xE5A1,
+ 28618 - 11905: 0x9DE8,
+ 28619 - 11905: 0x9DE9,
+ 28620 - 11905: 0x9DEA,
+ 28621 - 11905: 0x9DEB,
+ 28622 - 11905: 0x9DEC,
+ 28623 - 11905: 0x9DED,
+ 28624 - 11905: 0x9DEE,
+ 28625 - 11905: 0xE4FE,
+ 28626 - 11905: 0xB1F4,
+ 28627 - 11905: 0x9DEF,
+ 28628 - 11905: 0x9DF0,
+ 28629 - 11905: 0x9DF1,
+ 28630 - 11905: 0x9DF2,
+ 28631 - 11905: 0x9DF3,
+ 28632 - 11905: 0x9DF4,
+ 28633 - 11905: 0x9DF5,
+ 28634 - 11905: 0x9DF6,
+ 28635 - 11905: 0x9DF7,
+ 28636 - 11905: 0x9DF8,
+ 28637 - 11905: 0x9DF9,
+ 28638 - 11905: 0xE5A8,
+ 28639 - 11905: 0x9DFA,
+ 28640 - 11905: 0xE5A9,
+ 28641 - 11905: 0xE5A6,
+ 28642 - 11905: 0x9DFB,
+ 28643 - 11905: 0x9DFC,
+ 28644 - 11905: 0x9DFD,
+ 28645 - 11905: 0x9DFE,
+ 28646 - 11905: 0x9E40,
+ 28647 - 11905: 0x9E41,
+ 28648 - 11905: 0x9E42,
+ 28649 - 11905: 0x9E43,
+ 28650 - 11905: 0x9E44,
+ 28651 - 11905: 0x9E45,
+ 28652 - 11905: 0x9E46,
+ 28653 - 11905: 0x9E47,
+ 28654 - 11905: 0xE5A7,
+ 28655 - 11905: 0xE5AA,
+ 28656 - 11905: 0x9E48,
+ 28657 - 11905: 0x9E49,
+ 28658 - 11905: 0x9E4A,
+ 28659 - 11905: 0x9E4B,
+ 28660 - 11905: 0x9E4C,
+ 28661 - 11905: 0x9E4D,
+ 28662 - 11905: 0x9E4E,
+ 28663 - 11905: 0x9E4F,
+ 28664 - 11905: 0x9E50,
+ 28665 - 11905: 0x9E51,
+ 28666 - 11905: 0x9E52,
+ 28667 - 11905: 0x9E53,
+ 28668 - 11905: 0x9E54,
+ 28669 - 11905: 0x9E55,
+ 28670 - 11905: 0x9E56,
+ 28671 - 11905: 0x9E57,
+ 28672 - 11905: 0x9E58,
+ 28673 - 11905: 0x9E59,
+ 28674 - 11905: 0x9E5A,
+ 28675 - 11905: 0x9E5B,
+ 28676 - 11905: 0x9E5C,
+ 28677 - 11905: 0x9E5D,
+ 28678 - 11905: 0x9E5E,
+ 28679 - 11905: 0x9E5F,
+ 28680 - 11905: 0x9E60,
+ 28681 - 11905: 0x9E61,
+ 28682 - 11905: 0x9E62,
+ 28683 - 11905: 0x9E63,
+ 28684 - 11905: 0x9E64,
+ 28685 - 11905: 0x9E65,
+ 28686 - 11905: 0x9E66,
+ 28687 - 11905: 0x9E67,
+ 28688 - 11905: 0x9E68,
+ 28689 - 11905: 0xC6D9,
+ 28690 - 11905: 0x9E69,
+ 28691 - 11905: 0x9E6A,
+ 28692 - 11905: 0x9E6B,
+ 28693 - 11905: 0x9E6C,
+ 28694 - 11905: 0x9E6D,
+ 28695 - 11905: 0x9E6E,
+ 28696 - 11905: 0x9E6F,
+ 28697 - 11905: 0x9E70,
+ 28698 - 11905: 0xE5AB,
+ 28699 - 11905: 0xE5AD,
+ 28700 - 11905: 0x9E71,
+ 28701 - 11905: 0x9E72,
+ 28702 - 11905: 0x9E73,
+ 28703 - 11905: 0x9E74,
+ 28704 - 11905: 0x9E75,
+ 28705 - 11905: 0x9E76,
+ 28706 - 11905: 0x9E77,
+ 28707 - 11905: 0xE5AC,
+ 28708 - 11905: 0x9E78,
+ 28709 - 11905: 0x9E79,
+ 28710 - 11905: 0x9E7A,
+ 28711 - 11905: 0x9E7B,
+ 28712 - 11905: 0x9E7C,
+ 28713 - 11905: 0x9E7D,
+ 28714 - 11905: 0x9E7E,
+ 28715 - 11905: 0x9E80,
+ 28716 - 11905: 0x9E81,
+ 28717 - 11905: 0x9E82,
+ 28718 - 11905: 0x9E83,
+ 28719 - 11905: 0x9E84,
+ 28720 - 11905: 0x9E85,
+ 28721 - 11905: 0x9E86,
+ 28722 - 11905: 0x9E87,
+ 28723 - 11905: 0x9E88,
+ 28724 - 11905: 0x9E89,
+ 28725 - 11905: 0xE5AF,
+ 28726 - 11905: 0x9E8A,
+ 28727 - 11905: 0x9E8B,
+ 28728 - 11905: 0x9E8C,
+ 28729 - 11905: 0xE5AE,
+ 28730 - 11905: 0x9E8D,
+ 28731 - 11905: 0x9E8E,
+ 28732 - 11905: 0x9E8F,
+ 28733 - 11905: 0x9E90,
+ 28734 - 11905: 0x9E91,
+ 28735 - 11905: 0x9E92,
+ 28736 - 11905: 0x9E93,
+ 28737 - 11905: 0x9E94,
+ 28738 - 11905: 0x9E95,
+ 28739 - 11905: 0x9E96,
+ 28740 - 11905: 0x9E97,
+ 28741 - 11905: 0x9E98,
+ 28742 - 11905: 0x9E99,
+ 28743 - 11905: 0x9E9A,
+ 28744 - 11905: 0x9E9B,
+ 28745 - 11905: 0x9E9C,
+ 28746 - 11905: 0x9E9D,
+ 28747 - 11905: 0x9E9E,
+ 28748 - 11905: 0xB9E0,
+ 28749 - 11905: 0x9E9F,
+ 28750 - 11905: 0x9EA0,
+ 28751 - 11905: 0xE5B0,
+ 28752 - 11905: 0x9EA1,
+ 28753 - 11905: 0x9EA2,
+ 28754 - 11905: 0x9EA3,
+ 28755 - 11905: 0x9EA4,
+ 28756 - 11905: 0x9EA5,
+ 28757 - 11905: 0x9EA6,
+ 28758 - 11905: 0x9EA7,
+ 28759 - 11905: 0x9EA8,
+ 28760 - 11905: 0x9EA9,
+ 28761 - 11905: 0x9EAA,
+ 28762 - 11905: 0x9EAB,
+ 28763 - 11905: 0x9EAC,
+ 28764 - 11905: 0x9EAD,
+ 28765 - 11905: 0x9EAE,
+ 28766 - 11905: 0xE5B1,
+ 28767 - 11905: 0x9EAF,
+ 28768 - 11905: 0x9EB0,
+ 28769 - 11905: 0x9EB1,
+ 28770 - 11905: 0x9EB2,
+ 28771 - 11905: 0x9EB3,
+ 28772 - 11905: 0x9EB4,
+ 28773 - 11905: 0x9EB5,
+ 28774 - 11905: 0x9EB6,
+ 28775 - 11905: 0x9EB7,
+ 28776 - 11905: 0x9EB8,
+ 28777 - 11905: 0x9EB9,
+ 28778 - 11905: 0x9EBA,
+ 28779 - 11905: 0xBBF0,
+ 28780 - 11905: 0xECE1,
+ 28781 - 11905: 0xC3F0,
+ 28782 - 11905: 0x9EBB,
+ 28783 - 11905: 0xB5C6,
+ 28784 - 11905: 0xBBD2,
+ 28785 - 11905: 0x9EBC,
+ 28786 - 11905: 0x9EBD,
+ 28787 - 11905: 0x9EBE,
+ 28788 - 11905: 0x9EBF,
+ 28789 - 11905: 0xC1E9,
+ 28790 - 11905: 0xD4EE,
+ 28791 - 11905: 0x9EC0,
+ 28792 - 11905: 0xBEC4,
+ 28793 - 11905: 0x9EC1,
+ 28794 - 11905: 0x9EC2,
+ 28795 - 11905: 0x9EC3,
+ 28796 - 11905: 0xD7C6,
+ 28797 - 11905: 0x9EC4,
+ 28798 - 11905: 0xD4D6,
+ 28799 - 11905: 0xB2D3,
+ 28800 - 11905: 0xECBE,
+ 28801 - 11905: 0x9EC5,
+ 28802 - 11905: 0x9EC6,
+ 28803 - 11905: 0x9EC7,
+ 28804 - 11905: 0x9EC8,
+ 28805 - 11905: 0xEAC1,
+ 28806 - 11905: 0x9EC9,
+ 28807 - 11905: 0x9ECA,
+ 28808 - 11905: 0x9ECB,
+ 28809 - 11905: 0xC2AF,
+ 28810 - 11905: 0xB4B6,
+ 28811 - 11905: 0x9ECC,
+ 28812 - 11905: 0x9ECD,
+ 28813 - 11905: 0x9ECE,
+ 28814 - 11905: 0xD1D7,
+ 28815 - 11905: 0x9ECF,
+ 28816 - 11905: 0x9ED0,
+ 28817 - 11905: 0x9ED1,
+ 28818 - 11905: 0xB3B4,
+ 28819 - 11905: 0x9ED2,
+ 28820 - 11905: 0xC8B2,
+ 28821 - 11905: 0xBFBB,
+ 28822 - 11905: 0xECC0,
+ 28823 - 11905: 0x9ED3,
+ 28824 - 11905: 0x9ED4,
+ 28825 - 11905: 0xD6CB,
+ 28826 - 11905: 0x9ED5,
+ 28827 - 11905: 0x9ED6,
+ 28828 - 11905: 0xECBF,
+ 28829 - 11905: 0xECC1,
+ 28830 - 11905: 0x9ED7,
+ 28831 - 11905: 0x9ED8,
+ 28832 - 11905: 0x9ED9,
+ 28833 - 11905: 0x9EDA,
+ 28834 - 11905: 0x9EDB,
+ 28835 - 11905: 0x9EDC,
+ 28836 - 11905: 0x9EDD,
+ 28837 - 11905: 0x9EDE,
+ 28838 - 11905: 0x9EDF,
+ 28839 - 11905: 0x9EE0,
+ 28840 - 11905: 0x9EE1,
+ 28841 - 11905: 0x9EE2,
+ 28842 - 11905: 0x9EE3,
+ 28843 - 11905: 0xECC5,
+ 28844 - 11905: 0xBEE6,
+ 28845 - 11905: 0xCCBF,
+ 28846 - 11905: 0xC5DA,
+ 28847 - 11905: 0xBEBC,
+ 28848 - 11905: 0x9EE4,
+ 28849 - 11905: 0xECC6,
+ 28850 - 11905: 0x9EE5,
+ 28851 - 11905: 0xB1FE,
+ 28852 - 11905: 0x9EE6,
+ 28853 - 11905: 0x9EE7,
+ 28854 - 11905: 0x9EE8,
+ 28855 - 11905: 0xECC4,
+ 28856 - 11905: 0xD5A8,
+ 28857 - 11905: 0xB5E3,
+ 28858 - 11905: 0x9EE9,
+ 28859 - 11905: 0xECC2,
+ 28860 - 11905: 0xC1B6,
+ 28861 - 11905: 0xB3E3,
+ 28862 - 11905: 0x9EEA,
+ 28863 - 11905: 0x9EEB,
+ 28864 - 11905: 0xECC3,
+ 28865 - 11905: 0xCBB8,
+ 28866 - 11905: 0xC0C3,
+ 28867 - 11905: 0xCCFE,
+ 28868 - 11905: 0x9EEC,
+ 28869 - 11905: 0x9EED,
+ 28870 - 11905: 0x9EEE,
+ 28871 - 11905: 0x9EEF,
+ 28872 - 11905: 0xC1D2,
+ 28873 - 11905: 0x9EF0,
+ 28874 - 11905: 0xECC8,
+ 28875 - 11905: 0x9EF1,
+ 28876 - 11905: 0x9EF2,
+ 28877 - 11905: 0x9EF3,
+ 28878 - 11905: 0x9EF4,
+ 28879 - 11905: 0x9EF5,
+ 28880 - 11905: 0x9EF6,
+ 28881 - 11905: 0x9EF7,
+ 28882 - 11905: 0x9EF8,
+ 28883 - 11905: 0x9EF9,
+ 28884 - 11905: 0x9EFA,
+ 28885 - 11905: 0x9EFB,
+ 28886 - 11905: 0x9EFC,
+ 28887 - 11905: 0x9EFD,
+ 28888 - 11905: 0xBAE6,
+ 28889 - 11905: 0xC0D3,
+ 28890 - 11905: 0x9EFE,
+ 28891 - 11905: 0xD6F2,
+ 28892 - 11905: 0x9F40,
+ 28893 - 11905: 0x9F41,
+ 28894 - 11905: 0x9F42,
+ 28895 - 11905: 0xD1CC,
+ 28896 - 11905: 0x9F43,
+ 28897 - 11905: 0x9F44,
+ 28898 - 11905: 0x9F45,
+ 28899 - 11905: 0x9F46,
+ 28900 - 11905: 0xBFBE,
+ 28901 - 11905: 0x9F47,
+ 28902 - 11905: 0xB7B3,
+ 28903 - 11905: 0xC9D5,
+ 28904 - 11905: 0xECC7,
+ 28905 - 11905: 0xBBE2,
+ 28906 - 11905: 0x9F48,
+ 28907 - 11905: 0xCCCC,
+ 28908 - 11905: 0xBDFD,
+ 28909 - 11905: 0xC8C8,
+ 28910 - 11905: 0x9F49,
+ 28911 - 11905: 0xCFA9,
+ 28912 - 11905: 0x9F4A,
+ 28913 - 11905: 0x9F4B,
+ 28914 - 11905: 0x9F4C,
+ 28915 - 11905: 0x9F4D,
+ 28916 - 11905: 0x9F4E,
+ 28917 - 11905: 0x9F4F,
+ 28918 - 11905: 0x9F50,
+ 28919 - 11905: 0xCDE9,
+ 28920 - 11905: 0x9F51,
+ 28921 - 11905: 0xC5EB,
+ 28922 - 11905: 0x9F52,
+ 28923 - 11905: 0x9F53,
+ 28924 - 11905: 0x9F54,
+ 28925 - 11905: 0xB7E9,
+ 28926 - 11905: 0x9F55,
+ 28927 - 11905: 0x9F56,
+ 28928 - 11905: 0x9F57,
+ 28929 - 11905: 0x9F58,
+ 28930 - 11905: 0x9F59,
+ 28931 - 11905: 0x9F5A,
+ 28932 - 11905: 0x9F5B,
+ 28933 - 11905: 0x9F5C,
+ 28934 - 11905: 0x9F5D,
+ 28935 - 11905: 0x9F5E,
+ 28936 - 11905: 0x9F5F,
+ 28937 - 11905: 0xD1C9,
+ 28938 - 11905: 0xBAB8,
+ 28939 - 11905: 0x9F60,
+ 28940 - 11905: 0x9F61,
+ 28941 - 11905: 0x9F62,
+ 28942 - 11905: 0x9F63,
+ 28943 - 11905: 0x9F64,
+ 28944 - 11905: 0xECC9,
+ 28945 - 11905: 0x9F65,
+ 28946 - 11905: 0x9F66,
+ 28947 - 11905: 0xECCA,
+ 28948 - 11905: 0x9F67,
+ 28949 - 11905: 0xBBC0,
+ 28950 - 11905: 0xECCB,
+ 28951 - 11905: 0x9F68,
+ 28952 - 11905: 0xECE2,
+ 28953 - 11905: 0xB1BA,
+ 28954 - 11905: 0xB7D9,
+ 28955 - 11905: 0x9F69,
+ 28956 - 11905: 0x9F6A,
+ 28957 - 11905: 0x9F6B,
+ 28958 - 11905: 0x9F6C,
+ 28959 - 11905: 0x9F6D,
+ 28960 - 11905: 0x9F6E,
+ 28961 - 11905: 0x9F6F,
+ 28962 - 11905: 0x9F70,
+ 28963 - 11905: 0x9F71,
+ 28964 - 11905: 0x9F72,
+ 28965 - 11905: 0x9F73,
+ 28966 - 11905: 0xBDB9,
+ 28967 - 11905: 0x9F74,
+ 28968 - 11905: 0x9F75,
+ 28969 - 11905: 0x9F76,
+ 28970 - 11905: 0x9F77,
+ 28971 - 11905: 0x9F78,
+ 28972 - 11905: 0x9F79,
+ 28973 - 11905: 0x9F7A,
+ 28974 - 11905: 0x9F7B,
+ 28975 - 11905: 0xECCC,
+ 28976 - 11905: 0xD1E6,
+ 28977 - 11905: 0xECCD,
+ 28978 - 11905: 0x9F7C,
+ 28979 - 11905: 0x9F7D,
+ 28980 - 11905: 0x9F7E,
+ 28981 - 11905: 0x9F80,
+ 28982 - 11905: 0xC8BB,
+ 28983 - 11905: 0x9F81,
+ 28984 - 11905: 0x9F82,
+ 28985 - 11905: 0x9F83,
+ 28986 - 11905: 0x9F84,
+ 28987 - 11905: 0x9F85,
+ 28988 - 11905: 0x9F86,
+ 28989 - 11905: 0x9F87,
+ 28990 - 11905: 0x9F88,
+ 28991 - 11905: 0x9F89,
+ 28992 - 11905: 0x9F8A,
+ 28993 - 11905: 0x9F8B,
+ 28994 - 11905: 0x9F8C,
+ 28995 - 11905: 0x9F8D,
+ 28996 - 11905: 0x9F8E,
+ 28997 - 11905: 0xECD1,
+ 28998 - 11905: 0x9F8F,
+ 28999 - 11905: 0x9F90,
+ 29000 - 11905: 0x9F91,
+ 29001 - 11905: 0x9F92,
+ 29002 - 11905: 0xECD3,
+ 29003 - 11905: 0x9F93,
+ 29004 - 11905: 0xBBCD,
+ 29005 - 11905: 0x9F94,
+ 29006 - 11905: 0xBCE5,
+ 29007 - 11905: 0x9F95,
+ 29008 - 11905: 0x9F96,
+ 29009 - 11905: 0x9F97,
+ 29010 - 11905: 0x9F98,
+ 29011 - 11905: 0x9F99,
+ 29012 - 11905: 0x9F9A,
+ 29013 - 11905: 0x9F9B,
+ 29014 - 11905: 0x9F9C,
+ 29015 - 11905: 0x9F9D,
+ 29016 - 11905: 0x9F9E,
+ 29017 - 11905: 0x9F9F,
+ 29018 - 11905: 0x9FA0,
+ 29019 - 11905: 0x9FA1,
+ 29020 - 11905: 0xECCF,
+ 29021 - 11905: 0x9FA2,
+ 29022 - 11905: 0xC9B7,
+ 29023 - 11905: 0x9FA3,
+ 29024 - 11905: 0x9FA4,
+ 29025 - 11905: 0x9FA5,
+ 29026 - 11905: 0x9FA6,
+ 29027 - 11905: 0x9FA7,
+ 29028 - 11905: 0xC3BA,
+ 29029 - 11905: 0x9FA8,
+ 29030 - 11905: 0xECE3,
+ 29031 - 11905: 0xD5D5,
+ 29032 - 11905: 0xECD0,
+ 29033 - 11905: 0x9FA9,
+ 29034 - 11905: 0x9FAA,
+ 29035 - 11905: 0x9FAB,
+ 29036 - 11905: 0x9FAC,
+ 29037 - 11905: 0x9FAD,
+ 29038 - 11905: 0xD6F3,
+ 29039 - 11905: 0x9FAE,
+ 29040 - 11905: 0x9FAF,
+ 29041 - 11905: 0x9FB0,
+ 29042 - 11905: 0xECD2,
+ 29043 - 11905: 0xECCE,
+ 29044 - 11905: 0x9FB1,
+ 29045 - 11905: 0x9FB2,
+ 29046 - 11905: 0x9FB3,
+ 29047 - 11905: 0x9FB4,
+ 29048 - 11905: 0xECD4,
+ 29049 - 11905: 0x9FB5,
+ 29050 - 11905: 0xECD5,
+ 29051 - 11905: 0x9FB6,
+ 29052 - 11905: 0x9FB7,
+ 29053 - 11905: 0xC9BF,
+ 29054 - 11905: 0x9FB8,
+ 29055 - 11905: 0x9FB9,
+ 29056 - 11905: 0x9FBA,
+ 29057 - 11905: 0x9FBB,
+ 29058 - 11905: 0x9FBC,
+ 29059 - 11905: 0x9FBD,
+ 29060 - 11905: 0xCFA8,
+ 29061 - 11905: 0x9FBE,
+ 29062 - 11905: 0x9FBF,
+ 29063 - 11905: 0x9FC0,
+ 29064 - 11905: 0x9FC1,
+ 29065 - 11905: 0x9FC2,
+ 29066 - 11905: 0xD0DC,
+ 29067 - 11905: 0x9FC3,
+ 29068 - 11905: 0x9FC4,
+ 29069 - 11905: 0x9FC5,
+ 29070 - 11905: 0x9FC6,
+ 29071 - 11905: 0xD1AC,
+ 29072 - 11905: 0x9FC7,
+ 29073 - 11905: 0x9FC8,
+ 29074 - 11905: 0x9FC9,
+ 29075 - 11905: 0x9FCA,
+ 29076 - 11905: 0xC8DB,
+ 29077 - 11905: 0x9FCB,
+ 29078 - 11905: 0x9FCC,
+ 29079 - 11905: 0x9FCD,
+ 29080 - 11905: 0xECD6,
+ 29081 - 11905: 0xCEF5,
+ 29082 - 11905: 0x9FCE,
+ 29083 - 11905: 0x9FCF,
+ 29084 - 11905: 0x9FD0,
+ 29085 - 11905: 0x9FD1,
+ 29086 - 11905: 0x9FD2,
+ 29087 - 11905: 0xCAEC,
+ 29088 - 11905: 0xECDA,
+ 29089 - 11905: 0x9FD3,
+ 29090 - 11905: 0x9FD4,
+ 29091 - 11905: 0x9FD5,
+ 29092 - 11905: 0x9FD6,
+ 29093 - 11905: 0x9FD7,
+ 29094 - 11905: 0x9FD8,
+ 29095 - 11905: 0x9FD9,
+ 29096 - 11905: 0xECD9,
+ 29097 - 11905: 0x9FDA,
+ 29098 - 11905: 0x9FDB,
+ 29099 - 11905: 0x9FDC,
+ 29100 - 11905: 0xB0BE,
+ 29101 - 11905: 0x9FDD,
+ 29102 - 11905: 0x9FDE,
+ 29103 - 11905: 0x9FDF,
+ 29104 - 11905: 0x9FE0,
+ 29105 - 11905: 0x9FE1,
+ 29106 - 11905: 0x9FE2,
+ 29107 - 11905: 0xECD7,
+ 29108 - 11905: 0x9FE3,
+ 29109 - 11905: 0xECD8,
+ 29110 - 11905: 0x9FE4,
+ 29111 - 11905: 0x9FE5,
+ 29112 - 11905: 0x9FE6,
+ 29113 - 11905: 0xECE4,
+ 29114 - 11905: 0x9FE7,
+ 29115 - 11905: 0x9FE8,
+ 29116 - 11905: 0x9FE9,
+ 29117 - 11905: 0x9FEA,
+ 29118 - 11905: 0x9FEB,
+ 29119 - 11905: 0x9FEC,
+ 29120 - 11905: 0x9FED,
+ 29121 - 11905: 0x9FEE,
+ 29122 - 11905: 0x9FEF,
+ 29123 - 11905: 0xC8BC,
+ 29124 - 11905: 0x9FF0,
+ 29125 - 11905: 0x9FF1,
+ 29126 - 11905: 0x9FF2,
+ 29127 - 11905: 0x9FF3,
+ 29128 - 11905: 0x9FF4,
+ 29129 - 11905: 0x9FF5,
+ 29130 - 11905: 0x9FF6,
+ 29131 - 11905: 0x9FF7,
+ 29132 - 11905: 0x9FF8,
+ 29133 - 11905: 0x9FF9,
+ 29134 - 11905: 0xC1C7,
+ 29135 - 11905: 0x9FFA,
+ 29136 - 11905: 0x9FFB,
+ 29137 - 11905: 0x9FFC,
+ 29138 - 11905: 0x9FFD,
+ 29139 - 11905: 0x9FFE,
+ 29140 - 11905: 0xECDC,
+ 29141 - 11905: 0xD1E0,
+ 29142 - 11905: 0xA040,
+ 29143 - 11905: 0xA041,
+ 29144 - 11905: 0xA042,
+ 29145 - 11905: 0xA043,
+ 29146 - 11905: 0xA044,
+ 29147 - 11905: 0xA045,
+ 29148 - 11905: 0xA046,
+ 29149 - 11905: 0xA047,
+ 29150 - 11905: 0xA048,
+ 29151 - 11905: 0xA049,
+ 29152 - 11905: 0xECDB,
+ 29153 - 11905: 0xA04A,
+ 29154 - 11905: 0xA04B,
+ 29155 - 11905: 0xA04C,
+ 29156 - 11905: 0xA04D,
+ 29157 - 11905: 0xD4EF,
+ 29158 - 11905: 0xA04E,
+ 29159 - 11905: 0xECDD,
+ 29160 - 11905: 0xA04F,
+ 29161 - 11905: 0xA050,
+ 29162 - 11905: 0xA051,
+ 29163 - 11905: 0xA052,
+ 29164 - 11905: 0xA053,
+ 29165 - 11905: 0xA054,
+ 29166 - 11905: 0xDBC6,
+ 29167 - 11905: 0xA055,
+ 29168 - 11905: 0xA056,
+ 29169 - 11905: 0xA057,
+ 29170 - 11905: 0xA058,
+ 29171 - 11905: 0xA059,
+ 29172 - 11905: 0xA05A,
+ 29173 - 11905: 0xA05B,
+ 29174 - 11905: 0xA05C,
+ 29175 - 11905: 0xA05D,
+ 29176 - 11905: 0xA05E,
+ 29177 - 11905: 0xECDE,
+ 29178 - 11905: 0xA05F,
+ 29179 - 11905: 0xA060,
+ 29180 - 11905: 0xA061,
+ 29181 - 11905: 0xA062,
+ 29182 - 11905: 0xA063,
+ 29183 - 11905: 0xA064,
+ 29184 - 11905: 0xA065,
+ 29185 - 11905: 0xA066,
+ 29186 - 11905: 0xA067,
+ 29187 - 11905: 0xA068,
+ 29188 - 11905: 0xA069,
+ 29189 - 11905: 0xA06A,
+ 29190 - 11905: 0xB1AC,
+ 29191 - 11905: 0xA06B,
+ 29192 - 11905: 0xA06C,
+ 29193 - 11905: 0xA06D,
+ 29194 - 11905: 0xA06E,
+ 29195 - 11905: 0xA06F,
+ 29196 - 11905: 0xA070,
+ 29197 - 11905: 0xA071,
+ 29198 - 11905: 0xA072,
+ 29199 - 11905: 0xA073,
+ 29200 - 11905: 0xA074,
+ 29201 - 11905: 0xA075,
+ 29202 - 11905: 0xA076,
+ 29203 - 11905: 0xA077,
+ 29204 - 11905: 0xA078,
+ 29205 - 11905: 0xA079,
+ 29206 - 11905: 0xA07A,
+ 29207 - 11905: 0xA07B,
+ 29208 - 11905: 0xA07C,
+ 29209 - 11905: 0xA07D,
+ 29210 - 11905: 0xA07E,
+ 29211 - 11905: 0xA080,
+ 29212 - 11905: 0xA081,
+ 29213 - 11905: 0xECDF,
+ 29214 - 11905: 0xA082,
+ 29215 - 11905: 0xA083,
+ 29216 - 11905: 0xA084,
+ 29217 - 11905: 0xA085,
+ 29218 - 11905: 0xA086,
+ 29219 - 11905: 0xA087,
+ 29220 - 11905: 0xA088,
+ 29221 - 11905: 0xA089,
+ 29222 - 11905: 0xA08A,
+ 29223 - 11905: 0xA08B,
+ 29224 - 11905: 0xECE0,
+ 29225 - 11905: 0xA08C,
+ 29226 - 11905: 0xD7A6,
+ 29227 - 11905: 0xA08D,
+ 29228 - 11905: 0xC5C0,
+ 29229 - 11905: 0xA08E,
+ 29230 - 11905: 0xA08F,
+ 29231 - 11905: 0xA090,
+ 29232 - 11905: 0xEBBC,
+ 29233 - 11905: 0xB0AE,
+ 29234 - 11905: 0xA091,
+ 29235 - 11905: 0xA092,
+ 29236 - 11905: 0xA093,
+ 29237 - 11905: 0xBEF4,
+ 29238 - 11905: 0xB8B8,
+ 29239 - 11905: 0xD2AF,
+ 29240 - 11905: 0xB0D6,
+ 29241 - 11905: 0xB5F9,
+ 29242 - 11905: 0xA094,
+ 29243 - 11905: 0xD8B3,
+ 29244 - 11905: 0xA095,
+ 29245 - 11905: 0xCBAC,
+ 29246 - 11905: 0xA096,
+ 29247 - 11905: 0xE3DD,
+ 29248 - 11905: 0xA097,
+ 29249 - 11905: 0xA098,
+ 29250 - 11905: 0xA099,
+ 29251 - 11905: 0xA09A,
+ 29252 - 11905: 0xA09B,
+ 29253 - 11905: 0xA09C,
+ 29254 - 11905: 0xA09D,
+ 29255 - 11905: 0xC6AC,
+ 29256 - 11905: 0xB0E6,
+ 29257 - 11905: 0xA09E,
+ 29258 - 11905: 0xA09F,
+ 29259 - 11905: 0xA0A0,
+ 29260 - 11905: 0xC5C6,
+ 29261 - 11905: 0xEBB9,
+ 29262 - 11905: 0xA0A1,
+ 29263 - 11905: 0xA0A2,
+ 29264 - 11905: 0xA0A3,
+ 29265 - 11905: 0xA0A4,
+ 29266 - 11905: 0xEBBA,
+ 29267 - 11905: 0xA0A5,
+ 29268 - 11905: 0xA0A6,
+ 29269 - 11905: 0xA0A7,
+ 29270 - 11905: 0xEBBB,
+ 29271 - 11905: 0xA0A8,
+ 29272 - 11905: 0xA0A9,
+ 29273 - 11905: 0xD1C0,
+ 29274 - 11905: 0xA0AA,
+ 29275 - 11905: 0xC5A3,
+ 29276 - 11905: 0xA0AB,
+ 29277 - 11905: 0xEAF2,
+ 29278 - 11905: 0xA0AC,
+ 29279 - 11905: 0xC4B2,
+ 29280 - 11905: 0xA0AD,
+ 29281 - 11905: 0xC4B5,
+ 29282 - 11905: 0xC0CE,
+ 29283 - 11905: 0xA0AE,
+ 29284 - 11905: 0xA0AF,
+ 29285 - 11905: 0xA0B0,
+ 29286 - 11905: 0xEAF3,
+ 29287 - 11905: 0xC4C1,
+ 29288 - 11905: 0xA0B1,
+ 29289 - 11905: 0xCEEF,
+ 29290 - 11905: 0xA0B2,
+ 29291 - 11905: 0xA0B3,
+ 29292 - 11905: 0xA0B4,
+ 29293 - 11905: 0xA0B5,
+ 29294 - 11905: 0xEAF0,
+ 29295 - 11905: 0xEAF4,
+ 29296 - 11905: 0xA0B6,
+ 29297 - 11905: 0xA0B7,
+ 29298 - 11905: 0xC9FC,
+ 29299 - 11905: 0xA0B8,
+ 29300 - 11905: 0xA0B9,
+ 29301 - 11905: 0xC7A3,
+ 29302 - 11905: 0xA0BA,
+ 29303 - 11905: 0xA0BB,
+ 29304 - 11905: 0xA0BC,
+ 29305 - 11905: 0xCCD8,
+ 29306 - 11905: 0xCEFE,
+ 29307 - 11905: 0xA0BD,
+ 29308 - 11905: 0xA0BE,
+ 29309 - 11905: 0xA0BF,
+ 29310 - 11905: 0xEAF5,
+ 29311 - 11905: 0xEAF6,
+ 29312 - 11905: 0xCFAC,
+ 29313 - 11905: 0xC0E7,
+ 29314 - 11905: 0xA0C0,
+ 29315 - 11905: 0xA0C1,
+ 29316 - 11905: 0xEAF7,
+ 29317 - 11905: 0xA0C2,
+ 29318 - 11905: 0xA0C3,
+ 29319 - 11905: 0xA0C4,
+ 29320 - 11905: 0xA0C5,
+ 29321 - 11905: 0xA0C6,
+ 29322 - 11905: 0xB6BF,
+ 29323 - 11905: 0xEAF8,
+ 29324 - 11905: 0xA0C7,
+ 29325 - 11905: 0xEAF9,
+ 29326 - 11905: 0xA0C8,
+ 29327 - 11905: 0xEAFA,
+ 29328 - 11905: 0xA0C9,
+ 29329 - 11905: 0xA0CA,
+ 29330 - 11905: 0xEAFB,
+ 29331 - 11905: 0xA0CB,
+ 29332 - 11905: 0xA0CC,
+ 29333 - 11905: 0xA0CD,
+ 29334 - 11905: 0xA0CE,
+ 29335 - 11905: 0xA0CF,
+ 29336 - 11905: 0xA0D0,
+ 29337 - 11905: 0xA0D1,
+ 29338 - 11905: 0xA0D2,
+ 29339 - 11905: 0xA0D3,
+ 29340 - 11905: 0xA0D4,
+ 29341 - 11905: 0xA0D5,
+ 29342 - 11905: 0xA0D6,
+ 29343 - 11905: 0xEAF1,
+ 29344 - 11905: 0xA0D7,
+ 29345 - 11905: 0xA0D8,
+ 29346 - 11905: 0xA0D9,
+ 29347 - 11905: 0xA0DA,
+ 29348 - 11905: 0xA0DB,
+ 29349 - 11905: 0xA0DC,
+ 29350 - 11905: 0xA0DD,
+ 29351 - 11905: 0xA0DE,
+ 29352 - 11905: 0xA0DF,
+ 29353 - 11905: 0xA0E0,
+ 29354 - 11905: 0xA0E1,
+ 29355 - 11905: 0xA0E2,
+ 29356 - 11905: 0xC8AE,
+ 29357 - 11905: 0xE1EB,
+ 29358 - 11905: 0xA0E3,
+ 29359 - 11905: 0xB7B8,
+ 29360 - 11905: 0xE1EC,
+ 29361 - 11905: 0xA0E4,
+ 29362 - 11905: 0xA0E5,
+ 29363 - 11905: 0xA0E6,
+ 29364 - 11905: 0xE1ED,
+ 29365 - 11905: 0xA0E7,
+ 29366 - 11905: 0xD7B4,
+ 29367 - 11905: 0xE1EE,
+ 29368 - 11905: 0xE1EF,
+ 29369 - 11905: 0xD3CC,
+ 29370 - 11905: 0xA0E8,
+ 29371 - 11905: 0xA0E9,
+ 29372 - 11905: 0xA0EA,
+ 29373 - 11905: 0xA0EB,
+ 29374 - 11905: 0xA0EC,
+ 29375 - 11905: 0xA0ED,
+ 29376 - 11905: 0xA0EE,
+ 29377 - 11905: 0xE1F1,
+ 29378 - 11905: 0xBFF1,
+ 29379 - 11905: 0xE1F0,
+ 29380 - 11905: 0xB5D2,
+ 29381 - 11905: 0xA0EF,
+ 29382 - 11905: 0xA0F0,
+ 29383 - 11905: 0xA0F1,
+ 29384 - 11905: 0xB1B7,
+ 29385 - 11905: 0xA0F2,
+ 29386 - 11905: 0xA0F3,
+ 29387 - 11905: 0xA0F4,
+ 29388 - 11905: 0xA0F5,
+ 29389 - 11905: 0xE1F3,
+ 29390 - 11905: 0xE1F2,
+ 29391 - 11905: 0xA0F6,
+ 29392 - 11905: 0xBAFC,
+ 29393 - 11905: 0xA0F7,
+ 29394 - 11905: 0xE1F4,
+ 29395 - 11905: 0xA0F8,
+ 29396 - 11905: 0xA0F9,
+ 29397 - 11905: 0xA0FA,
+ 29398 - 11905: 0xA0FB,
+ 29399 - 11905: 0xB9B7,
+ 29400 - 11905: 0xA0FC,
+ 29401 - 11905: 0xBED1,
+ 29402 - 11905: 0xA0FD,
+ 29403 - 11905: 0xA0FE,
+ 29404 - 11905: 0xAA40,
+ 29405 - 11905: 0xAA41,
+ 29406 - 11905: 0xC4FC,
+ 29407 - 11905: 0xAA42,
+ 29408 - 11905: 0xBADD,
+ 29409 - 11905: 0xBDC6,
+ 29410 - 11905: 0xAA43,
+ 29411 - 11905: 0xAA44,
+ 29412 - 11905: 0xAA45,
+ 29413 - 11905: 0xAA46,
+ 29414 - 11905: 0xAA47,
+ 29415 - 11905: 0xAA48,
+ 29416 - 11905: 0xE1F5,
+ 29417 - 11905: 0xE1F7,
+ 29418 - 11905: 0xAA49,
+ 29419 - 11905: 0xAA4A,
+ 29420 - 11905: 0xB6C0,
+ 29421 - 11905: 0xCFC1,
+ 29422 - 11905: 0xCAA8,
+ 29423 - 11905: 0xE1F6,
+ 29424 - 11905: 0xD5F8,
+ 29425 - 11905: 0xD3FC,
+ 29426 - 11905: 0xE1F8,
+ 29427 - 11905: 0xE1FC,
+ 29428 - 11905: 0xE1F9,
+ 29429 - 11905: 0xAA4B,
+ 29430 - 11905: 0xAA4C,
+ 29431 - 11905: 0xE1FA,
+ 29432 - 11905: 0xC0EA,
+ 29433 - 11905: 0xAA4D,
+ 29434 - 11905: 0xE1FE,
+ 29435 - 11905: 0xE2A1,
+ 29436 - 11905: 0xC0C7,
+ 29437 - 11905: 0xAA4E,
+ 29438 - 11905: 0xAA4F,
+ 29439 - 11905: 0xAA50,
+ 29440 - 11905: 0xAA51,
+ 29441 - 11905: 0xE1FB,
+ 29442 - 11905: 0xAA52,
+ 29443 - 11905: 0xE1FD,
+ 29444 - 11905: 0xAA53,
+ 29445 - 11905: 0xAA54,
+ 29446 - 11905: 0xAA55,
+ 29447 - 11905: 0xAA56,
+ 29448 - 11905: 0xAA57,
+ 29449 - 11905: 0xAA58,
+ 29450 - 11905: 0xE2A5,
+ 29451 - 11905: 0xAA59,
+ 29452 - 11905: 0xAA5A,
+ 29453 - 11905: 0xAA5B,
+ 29454 - 11905: 0xC1D4,
+ 29455 - 11905: 0xAA5C,
+ 29456 - 11905: 0xAA5D,
+ 29457 - 11905: 0xAA5E,
+ 29458 - 11905: 0xAA5F,
+ 29459 - 11905: 0xE2A3,
+ 29460 - 11905: 0xAA60,
+ 29461 - 11905: 0xE2A8,
+ 29462 - 11905: 0xB2FE,
+ 29463 - 11905: 0xE2A2,
+ 29464 - 11905: 0xAA61,
+ 29465 - 11905: 0xAA62,
+ 29466 - 11905: 0xAA63,
+ 29467 - 11905: 0xC3CD,
+ 29468 - 11905: 0xB2C2,
+ 29469 - 11905: 0xE2A7,
+ 29470 - 11905: 0xE2A6,
+ 29471 - 11905: 0xAA64,
+ 29472 - 11905: 0xAA65,
+ 29473 - 11905: 0xE2A4,
+ 29474 - 11905: 0xE2A9,
+ 29475 - 11905: 0xAA66,
+ 29476 - 11905: 0xAA67,
+ 29477 - 11905: 0xE2AB,
+ 29478 - 11905: 0xAA68,
+ 29479 - 11905: 0xAA69,
+ 29480 - 11905: 0xAA6A,
+ 29481 - 11905: 0xD0C9,
+ 29482 - 11905: 0xD6ED,
+ 29483 - 11905: 0xC3A8,
+ 29484 - 11905: 0xE2AC,
+ 29485 - 11905: 0xAA6B,
+ 29486 - 11905: 0xCFD7,
+ 29487 - 11905: 0xAA6C,
+ 29488 - 11905: 0xAA6D,
+ 29489 - 11905: 0xE2AE,
+ 29490 - 11905: 0xAA6E,
+ 29491 - 11905: 0xAA6F,
+ 29492 - 11905: 0xBAEF,
+ 29493 - 11905: 0xAA70,
+ 29494 - 11905: 0xAA71,
+ 29495 - 11905: 0xE9E0,
+ 29496 - 11905: 0xE2AD,
+ 29497 - 11905: 0xE2AA,
+ 29498 - 11905: 0xAA72,
+ 29499 - 11905: 0xAA73,
+ 29500 - 11905: 0xAA74,
+ 29501 - 11905: 0xAA75,
+ 29502 - 11905: 0xBBAB,
+ 29503 - 11905: 0xD4B3,
+ 29504 - 11905: 0xAA76,
+ 29505 - 11905: 0xAA77,
+ 29506 - 11905: 0xAA78,
+ 29507 - 11905: 0xAA79,
+ 29508 - 11905: 0xAA7A,
+ 29509 - 11905: 0xAA7B,
+ 29510 - 11905: 0xAA7C,
+ 29511 - 11905: 0xAA7D,
+ 29512 - 11905: 0xAA7E,
+ 29513 - 11905: 0xAA80,
+ 29514 - 11905: 0xAA81,
+ 29515 - 11905: 0xAA82,
+ 29516 - 11905: 0xAA83,
+ 29517 - 11905: 0xE2B0,
+ 29518 - 11905: 0xAA84,
+ 29519 - 11905: 0xAA85,
+ 29520 - 11905: 0xE2AF,
+ 29521 - 11905: 0xAA86,
+ 29522 - 11905: 0xE9E1,
+ 29523 - 11905: 0xAA87,
+ 29524 - 11905: 0xAA88,
+ 29525 - 11905: 0xAA89,
+ 29526 - 11905: 0xAA8A,
+ 29527 - 11905: 0xE2B1,
+ 29528 - 11905: 0xAA8B,
+ 29529 - 11905: 0xAA8C,
+ 29530 - 11905: 0xAA8D,
+ 29531 - 11905: 0xAA8E,
+ 29532 - 11905: 0xAA8F,
+ 29533 - 11905: 0xAA90,
+ 29534 - 11905: 0xAA91,
+ 29535 - 11905: 0xAA92,
+ 29536 - 11905: 0xE2B2,
+ 29537 - 11905: 0xAA93,
+ 29538 - 11905: 0xAA94,
+ 29539 - 11905: 0xAA95,
+ 29540 - 11905: 0xAA96,
+ 29541 - 11905: 0xAA97,
+ 29542 - 11905: 0xAA98,
+ 29543 - 11905: 0xAA99,
+ 29544 - 11905: 0xAA9A,
+ 29545 - 11905: 0xAA9B,
+ 29546 - 11905: 0xAA9C,
+ 29547 - 11905: 0xAA9D,
+ 29548 - 11905: 0xE2B3,
+ 29549 - 11905: 0xCCA1,
+ 29550 - 11905: 0xAA9E,
+ 29551 - 11905: 0xE2B4,
+ 29552 - 11905: 0xAA9F,
+ 29553 - 11905: 0xAAA0,
+ 29554 - 11905: 0xAB40,
+ 29555 - 11905: 0xAB41,
+ 29556 - 11905: 0xAB42,
+ 29557 - 11905: 0xAB43,
+ 29558 - 11905: 0xAB44,
+ 29559 - 11905: 0xAB45,
+ 29560 - 11905: 0xAB46,
+ 29561 - 11905: 0xAB47,
+ 29562 - 11905: 0xAB48,
+ 29563 - 11905: 0xAB49,
+ 29564 - 11905: 0xAB4A,
+ 29565 - 11905: 0xAB4B,
+ 29566 - 11905: 0xE2B5,
+ 29567 - 11905: 0xAB4C,
+ 29568 - 11905: 0xAB4D,
+ 29569 - 11905: 0xAB4E,
+ 29570 - 11905: 0xAB4F,
+ 29571 - 11905: 0xAB50,
+ 29572 - 11905: 0xD0FE,
+ 29573 - 11905: 0xAB51,
+ 29574 - 11905: 0xAB52,
+ 29575 - 11905: 0xC2CA,
+ 29576 - 11905: 0xAB53,
+ 29577 - 11905: 0xD3F1,
+ 29578 - 11905: 0xAB54,
+ 29579 - 11905: 0xCDF5,
+ 29580 - 11905: 0xAB55,
+ 29581 - 11905: 0xAB56,
+ 29582 - 11905: 0xE7E0,
+ 29583 - 11905: 0xAB57,
+ 29584 - 11905: 0xAB58,
+ 29585 - 11905: 0xE7E1,
+ 29586 - 11905: 0xAB59,
+ 29587 - 11905: 0xAB5A,
+ 29588 - 11905: 0xAB5B,
+ 29589 - 11905: 0xAB5C,
+ 29590 - 11905: 0xBEC1,
+ 29591 - 11905: 0xAB5D,
+ 29592 - 11905: 0xAB5E,
+ 29593 - 11905: 0xAB5F,
+ 29594 - 11905: 0xAB60,
+ 29595 - 11905: 0xC2EA,
+ 29596 - 11905: 0xAB61,
+ 29597 - 11905: 0xAB62,
+ 29598 - 11905: 0xAB63,
+ 29599 - 11905: 0xE7E4,
+ 29600 - 11905: 0xAB64,
+ 29601 - 11905: 0xAB65,
+ 29602 - 11905: 0xE7E3,
+ 29603 - 11905: 0xAB66,
+ 29604 - 11905: 0xAB67,
+ 29605 - 11905: 0xAB68,
+ 29606 - 11905: 0xAB69,
+ 29607 - 11905: 0xAB6A,
+ 29608 - 11905: 0xAB6B,
+ 29609 - 11905: 0xCDE6,
+ 29610 - 11905: 0xAB6C,
+ 29611 - 11905: 0xC3B5,
+ 29612 - 11905: 0xAB6D,
+ 29613 - 11905: 0xAB6E,
+ 29614 - 11905: 0xE7E2,
+ 29615 - 11905: 0xBBB7,
+ 29616 - 11905: 0xCFD6,
+ 29617 - 11905: 0xAB6F,
+ 29618 - 11905: 0xC1E1,
+ 29619 - 11905: 0xE7E9,
+ 29620 - 11905: 0xAB70,
+ 29621 - 11905: 0xAB71,
+ 29622 - 11905: 0xAB72,
+ 29623 - 11905: 0xE7E8,
+ 29624 - 11905: 0xAB73,
+ 29625 - 11905: 0xAB74,
+ 29626 - 11905: 0xE7F4,
+ 29627 - 11905: 0xB2A3,
+ 29628 - 11905: 0xAB75,
+ 29629 - 11905: 0xAB76,
+ 29630 - 11905: 0xAB77,
+ 29631 - 11905: 0xAB78,
+ 29632 - 11905: 0xE7EA,
+ 29633 - 11905: 0xAB79,
+ 29634 - 11905: 0xE7E6,
+ 29635 - 11905: 0xAB7A,
+ 29636 - 11905: 0xAB7B,
+ 29637 - 11905: 0xAB7C,
+ 29638 - 11905: 0xAB7D,
+ 29639 - 11905: 0xAB7E,
+ 29640 - 11905: 0xE7EC,
+ 29641 - 11905: 0xE7EB,
+ 29642 - 11905: 0xC9BA,
+ 29643 - 11905: 0xAB80,
+ 29644 - 11905: 0xAB81,
+ 29645 - 11905: 0xD5E4,
+ 29646 - 11905: 0xAB82,
+ 29647 - 11905: 0xE7E5,
+ 29648 - 11905: 0xB7A9,
+ 29649 - 11905: 0xE7E7,
+ 29650 - 11905: 0xAB83,
+ 29651 - 11905: 0xAB84,
+ 29652 - 11905: 0xAB85,
+ 29653 - 11905: 0xAB86,
+ 29654 - 11905: 0xAB87,
+ 29655 - 11905: 0xAB88,
+ 29656 - 11905: 0xAB89,
+ 29657 - 11905: 0xE7EE,
+ 29658 - 11905: 0xAB8A,
+ 29659 - 11905: 0xAB8B,
+ 29660 - 11905: 0xAB8C,
+ 29661 - 11905: 0xAB8D,
+ 29662 - 11905: 0xE7F3,
+ 29663 - 11905: 0xAB8E,
+ 29664 - 11905: 0xD6E9,
+ 29665 - 11905: 0xAB8F,
+ 29666 - 11905: 0xAB90,
+ 29667 - 11905: 0xAB91,
+ 29668 - 11905: 0xAB92,
+ 29669 - 11905: 0xE7ED,
+ 29670 - 11905: 0xAB93,
+ 29671 - 11905: 0xE7F2,
+ 29672 - 11905: 0xAB94,
+ 29673 - 11905: 0xE7F1,
+ 29674 - 11905: 0xAB95,
+ 29675 - 11905: 0xAB96,
+ 29676 - 11905: 0xAB97,
+ 29677 - 11905: 0xB0E0,
+ 29678 - 11905: 0xAB98,
+ 29679 - 11905: 0xAB99,
+ 29680 - 11905: 0xAB9A,
+ 29681 - 11905: 0xAB9B,
+ 29682 - 11905: 0xE7F5,
+ 29683 - 11905: 0xAB9C,
+ 29684 - 11905: 0xAB9D,
+ 29685 - 11905: 0xAB9E,
+ 29686 - 11905: 0xAB9F,
+ 29687 - 11905: 0xABA0,
+ 29688 - 11905: 0xAC40,
+ 29689 - 11905: 0xAC41,
+ 29690 - 11905: 0xAC42,
+ 29691 - 11905: 0xAC43,
+ 29692 - 11905: 0xAC44,
+ 29693 - 11905: 0xAC45,
+ 29694 - 11905: 0xAC46,
+ 29695 - 11905: 0xAC47,
+ 29696 - 11905: 0xAC48,
+ 29697 - 11905: 0xAC49,
+ 29698 - 11905: 0xAC4A,
+ 29699 - 11905: 0xC7F2,
+ 29700 - 11905: 0xAC4B,
+ 29701 - 11905: 0xC0C5,
+ 29702 - 11905: 0xC0ED,
+ 29703 - 11905: 0xAC4C,
+ 29704 - 11905: 0xAC4D,
+ 29705 - 11905: 0xC1F0,
+ 29706 - 11905: 0xE7F0,
+ 29707 - 11905: 0xAC4E,
+ 29708 - 11905: 0xAC4F,
+ 29709 - 11905: 0xAC50,
+ 29710 - 11905: 0xAC51,
+ 29711 - 11905: 0xE7F6,
+ 29712 - 11905: 0xCBF6,
+ 29713 - 11905: 0xAC52,
+ 29714 - 11905: 0xAC53,
+ 29715 - 11905: 0xAC54,
+ 29716 - 11905: 0xAC55,
+ 29717 - 11905: 0xAC56,
+ 29718 - 11905: 0xAC57,
+ 29719 - 11905: 0xAC58,
+ 29720 - 11905: 0xAC59,
+ 29721 - 11905: 0xAC5A,
+ 29722 - 11905: 0xE8A2,
+ 29723 - 11905: 0xE8A1,
+ 29724 - 11905: 0xAC5B,
+ 29725 - 11905: 0xAC5C,
+ 29726 - 11905: 0xAC5D,
+ 29727 - 11905: 0xAC5E,
+ 29728 - 11905: 0xAC5F,
+ 29729 - 11905: 0xAC60,
+ 29730 - 11905: 0xD7C1,
+ 29731 - 11905: 0xAC61,
+ 29732 - 11905: 0xAC62,
+ 29733 - 11905: 0xE7FA,
+ 29734 - 11905: 0xE7F9,
+ 29735 - 11905: 0xAC63,
+ 29736 - 11905: 0xE7FB,
+ 29737 - 11905: 0xAC64,
+ 29738 - 11905: 0xE7F7,
+ 29739 - 11905: 0xAC65,
+ 29740 - 11905: 0xE7FE,
+ 29741 - 11905: 0xAC66,
+ 29742 - 11905: 0xE7FD,
+ 29743 - 11905: 0xAC67,
+ 29744 - 11905: 0xE7FC,
+ 29745 - 11905: 0xAC68,
+ 29746 - 11905: 0xAC69,
+ 29747 - 11905: 0xC1D5,
+ 29748 - 11905: 0xC7D9,
+ 29749 - 11905: 0xC5FD,
+ 29750 - 11905: 0xC5C3,
+ 29751 - 11905: 0xAC6A,
+ 29752 - 11905: 0xAC6B,
+ 29753 - 11905: 0xAC6C,
+ 29754 - 11905: 0xAC6D,
+ 29755 - 11905: 0xAC6E,
+ 29756 - 11905: 0xC7ED,
+ 29757 - 11905: 0xAC6F,
+ 29758 - 11905: 0xAC70,
+ 29759 - 11905: 0xAC71,
+ 29760 - 11905: 0xAC72,
+ 29761 - 11905: 0xE8A3,
+ 29762 - 11905: 0xAC73,
+ 29763 - 11905: 0xAC74,
+ 29764 - 11905: 0xAC75,
+ 29765 - 11905: 0xAC76,
+ 29766 - 11905: 0xAC77,
+ 29767 - 11905: 0xAC78,
+ 29768 - 11905: 0xAC79,
+ 29769 - 11905: 0xAC7A,
+ 29770 - 11905: 0xAC7B,
+ 29771 - 11905: 0xAC7C,
+ 29772 - 11905: 0xAC7D,
+ 29773 - 11905: 0xAC7E,
+ 29774 - 11905: 0xAC80,
+ 29775 - 11905: 0xAC81,
+ 29776 - 11905: 0xAC82,
+ 29777 - 11905: 0xAC83,
+ 29778 - 11905: 0xAC84,
+ 29779 - 11905: 0xAC85,
+ 29780 - 11905: 0xAC86,
+ 29781 - 11905: 0xE8A6,
+ 29782 - 11905: 0xAC87,
+ 29783 - 11905: 0xE8A5,
+ 29784 - 11905: 0xAC88,
+ 29785 - 11905: 0xE8A7,
+ 29786 - 11905: 0xBAF7,
+ 29787 - 11905: 0xE7F8,
+ 29788 - 11905: 0xE8A4,
+ 29789 - 11905: 0xAC89,
+ 29790 - 11905: 0xC8F0,
+ 29791 - 11905: 0xC9AA,
+ 29792 - 11905: 0xAC8A,
+ 29793 - 11905: 0xAC8B,
+ 29794 - 11905: 0xAC8C,
+ 29795 - 11905: 0xAC8D,
+ 29796 - 11905: 0xAC8E,
+ 29797 - 11905: 0xAC8F,
+ 29798 - 11905: 0xAC90,
+ 29799 - 11905: 0xAC91,
+ 29800 - 11905: 0xAC92,
+ 29801 - 11905: 0xAC93,
+ 29802 - 11905: 0xAC94,
+ 29803 - 11905: 0xAC95,
+ 29804 - 11905: 0xAC96,
+ 29805 - 11905: 0xE8A9,
+ 29806 - 11905: 0xAC97,
+ 29807 - 11905: 0xAC98,
+ 29808 - 11905: 0xB9E5,
+ 29809 - 11905: 0xAC99,
+ 29810 - 11905: 0xAC9A,
+ 29811 - 11905: 0xAC9B,
+ 29812 - 11905: 0xAC9C,
+ 29813 - 11905: 0xAC9D,
+ 29814 - 11905: 0xD1FE,
+ 29815 - 11905: 0xE8A8,
+ 29816 - 11905: 0xAC9E,
+ 29817 - 11905: 0xAC9F,
+ 29818 - 11905: 0xACA0,
+ 29819 - 11905: 0xAD40,
+ 29820 - 11905: 0xAD41,
+ 29821 - 11905: 0xAD42,
+ 29822 - 11905: 0xE8AA,
+ 29823 - 11905: 0xAD43,
+ 29824 - 11905: 0xE8AD,
+ 29825 - 11905: 0xE8AE,
+ 29826 - 11905: 0xAD44,
+ 29827 - 11905: 0xC1A7,
+ 29828 - 11905: 0xAD45,
+ 29829 - 11905: 0xAD46,
+ 29830 - 11905: 0xAD47,
+ 29831 - 11905: 0xE8AF,
+ 29832 - 11905: 0xAD48,
+ 29833 - 11905: 0xAD49,
+ 29834 - 11905: 0xAD4A,
+ 29835 - 11905: 0xE8B0,
+ 29836 - 11905: 0xAD4B,
+ 29837 - 11905: 0xAD4C,
+ 29838 - 11905: 0xE8AC,
+ 29839 - 11905: 0xAD4D,
+ 29840 - 11905: 0xE8B4,
+ 29841 - 11905: 0xAD4E,
+ 29842 - 11905: 0xAD4F,
+ 29843 - 11905: 0xAD50,
+ 29844 - 11905: 0xAD51,
+ 29845 - 11905: 0xAD52,
+ 29846 - 11905: 0xAD53,
+ 29847 - 11905: 0xAD54,
+ 29848 - 11905: 0xAD55,
+ 29849 - 11905: 0xAD56,
+ 29850 - 11905: 0xAD57,
+ 29851 - 11905: 0xAD58,
+ 29852 - 11905: 0xE8AB,
+ 29853 - 11905: 0xAD59,
+ 29854 - 11905: 0xE8B1,
+ 29855 - 11905: 0xAD5A,
+ 29856 - 11905: 0xAD5B,
+ 29857 - 11905: 0xAD5C,
+ 29858 - 11905: 0xAD5D,
+ 29859 - 11905: 0xAD5E,
+ 29860 - 11905: 0xAD5F,
+ 29861 - 11905: 0xAD60,
+ 29862 - 11905: 0xAD61,
+ 29863 - 11905: 0xE8B5,
+ 29864 - 11905: 0xE8B2,
+ 29865 - 11905: 0xE8B3,
+ 29866 - 11905: 0xAD62,
+ 29867 - 11905: 0xAD63,
+ 29868 - 11905: 0xAD64,
+ 29869 - 11905: 0xAD65,
+ 29870 - 11905: 0xAD66,
+ 29871 - 11905: 0xAD67,
+ 29872 - 11905: 0xAD68,
+ 29873 - 11905: 0xAD69,
+ 29874 - 11905: 0xAD6A,
+ 29875 - 11905: 0xAD6B,
+ 29876 - 11905: 0xAD6C,
+ 29877 - 11905: 0xAD6D,
+ 29878 - 11905: 0xAD6E,
+ 29879 - 11905: 0xAD6F,
+ 29880 - 11905: 0xAD70,
+ 29881 - 11905: 0xAD71,
+ 29882 - 11905: 0xE8B7,
+ 29883 - 11905: 0xAD72,
+ 29884 - 11905: 0xAD73,
+ 29885 - 11905: 0xAD74,
+ 29886 - 11905: 0xAD75,
+ 29887 - 11905: 0xAD76,
+ 29888 - 11905: 0xAD77,
+ 29889 - 11905: 0xAD78,
+ 29890 - 11905: 0xAD79,
+ 29891 - 11905: 0xAD7A,
+ 29892 - 11905: 0xAD7B,
+ 29893 - 11905: 0xAD7C,
+ 29894 - 11905: 0xAD7D,
+ 29895 - 11905: 0xAD7E,
+ 29896 - 11905: 0xAD80,
+ 29897 - 11905: 0xAD81,
+ 29898 - 11905: 0xAD82,
+ 29899 - 11905: 0xAD83,
+ 29900 - 11905: 0xAD84,
+ 29901 - 11905: 0xAD85,
+ 29902 - 11905: 0xAD86,
+ 29903 - 11905: 0xAD87,
+ 29904 - 11905: 0xAD88,
+ 29905 - 11905: 0xAD89,
+ 29906 - 11905: 0xE8B6,
+ 29907 - 11905: 0xAD8A,
+ 29908 - 11905: 0xAD8B,
+ 29909 - 11905: 0xAD8C,
+ 29910 - 11905: 0xAD8D,
+ 29911 - 11905: 0xAD8E,
+ 29912 - 11905: 0xAD8F,
+ 29913 - 11905: 0xAD90,
+ 29914 - 11905: 0xAD91,
+ 29915 - 11905: 0xAD92,
+ 29916 - 11905: 0xB9CF,
+ 29917 - 11905: 0xAD93,
+ 29918 - 11905: 0xF0AC,
+ 29919 - 11905: 0xAD94,
+ 29920 - 11905: 0xF0AD,
+ 29921 - 11905: 0xAD95,
+ 29922 - 11905: 0xC6B0,
+ 29923 - 11905: 0xB0EA,
+ 29924 - 11905: 0xC8BF,
+ 29925 - 11905: 0xAD96,
+ 29926 - 11905: 0xCDDF,
+ 29927 - 11905: 0xAD97,
+ 29928 - 11905: 0xAD98,
+ 29929 - 11905: 0xAD99,
+ 29930 - 11905: 0xAD9A,
+ 29931 - 11905: 0xAD9B,
+ 29932 - 11905: 0xAD9C,
+ 29933 - 11905: 0xAD9D,
+ 29934 - 11905: 0xCECD,
+ 29935 - 11905: 0xEAB1,
+ 29936 - 11905: 0xAD9E,
+ 29937 - 11905: 0xAD9F,
+ 29938 - 11905: 0xADA0,
+ 29939 - 11905: 0xAE40,
+ 29940 - 11905: 0xEAB2,
+ 29941 - 11905: 0xAE41,
+ 29942 - 11905: 0xC6BF,
+ 29943 - 11905: 0xB4C9,
+ 29944 - 11905: 0xAE42,
+ 29945 - 11905: 0xAE43,
+ 29946 - 11905: 0xAE44,
+ 29947 - 11905: 0xAE45,
+ 29948 - 11905: 0xAE46,
+ 29949 - 11905: 0xAE47,
+ 29950 - 11905: 0xAE48,
+ 29951 - 11905: 0xEAB3,
+ 29952 - 11905: 0xAE49,
+ 29953 - 11905: 0xAE4A,
+ 29954 - 11905: 0xAE4B,
+ 29955 - 11905: 0xAE4C,
+ 29956 - 11905: 0xD5E7,
+ 29957 - 11905: 0xAE4D,
+ 29958 - 11905: 0xAE4E,
+ 29959 - 11905: 0xAE4F,
+ 29960 - 11905: 0xAE50,
+ 29961 - 11905: 0xAE51,
+ 29962 - 11905: 0xAE52,
+ 29963 - 11905: 0xAE53,
+ 29964 - 11905: 0xAE54,
+ 29965 - 11905: 0xDDF9,
+ 29966 - 11905: 0xAE55,
+ 29967 - 11905: 0xEAB4,
+ 29968 - 11905: 0xAE56,
+ 29969 - 11905: 0xEAB5,
+ 29970 - 11905: 0xAE57,
+ 29971 - 11905: 0xEAB6,
+ 29972 - 11905: 0xAE58,
+ 29973 - 11905: 0xAE59,
+ 29974 - 11905: 0xAE5A,
+ 29975 - 11905: 0xAE5B,
+ 29976 - 11905: 0xB8CA,
+ 29977 - 11905: 0xDFB0,
+ 29978 - 11905: 0xC9F5,
+ 29979 - 11905: 0xAE5C,
+ 29980 - 11905: 0xCCF0,
+ 29981 - 11905: 0xAE5D,
+ 29982 - 11905: 0xAE5E,
+ 29983 - 11905: 0xC9FA,
+ 29984 - 11905: 0xAE5F,
+ 29985 - 11905: 0xAE60,
+ 29986 - 11905: 0xAE61,
+ 29987 - 11905: 0xAE62,
+ 29988 - 11905: 0xAE63,
+ 29989 - 11905: 0xC9FB,
+ 29990 - 11905: 0xAE64,
+ 29991 - 11905: 0xAE65,
+ 29992 - 11905: 0xD3C3,
+ 29993 - 11905: 0xCBA6,
+ 29994 - 11905: 0xAE66,
+ 29995 - 11905: 0xB8A6,
+ 29996 - 11905: 0xF0AE,
+ 29997 - 11905: 0xB1C2,
+ 29998 - 11905: 0xAE67,
+ 29999 - 11905: 0xE5B8,
+ 30000 - 11905: 0xCCEF,
+ 30001 - 11905: 0xD3C9,
+ 30002 - 11905: 0xBCD7,
+ 30003 - 11905: 0xC9EA,
+ 30004 - 11905: 0xAE68,
+ 30005 - 11905: 0xB5E7,
+ 30006 - 11905: 0xAE69,
+ 30007 - 11905: 0xC4D0,
+ 30008 - 11905: 0xB5E9,
+ 30009 - 11905: 0xAE6A,
+ 30010 - 11905: 0xEEAE,
+ 30011 - 11905: 0xBBAD,
+ 30012 - 11905: 0xAE6B,
+ 30013 - 11905: 0xAE6C,
+ 30014 - 11905: 0xE7DE,
+ 30015 - 11905: 0xAE6D,
+ 30016 - 11905: 0xEEAF,
+ 30017 - 11905: 0xAE6E,
+ 30018 - 11905: 0xAE6F,
+ 30019 - 11905: 0xAE70,
+ 30020 - 11905: 0xAE71,
+ 30021 - 11905: 0xB3A9,
+ 30022 - 11905: 0xAE72,
+ 30023 - 11905: 0xAE73,
+ 30024 - 11905: 0xEEB2,
+ 30025 - 11905: 0xAE74,
+ 30026 - 11905: 0xAE75,
+ 30027 - 11905: 0xEEB1,
+ 30028 - 11905: 0xBDE7,
+ 30029 - 11905: 0xAE76,
+ 30030 - 11905: 0xEEB0,
+ 30031 - 11905: 0xCEB7,
+ 30032 - 11905: 0xAE77,
+ 30033 - 11905: 0xAE78,
+ 30034 - 11905: 0xAE79,
+ 30035 - 11905: 0xAE7A,
+ 30036 - 11905: 0xC5CF,
+ 30037 - 11905: 0xAE7B,
+ 30038 - 11905: 0xAE7C,
+ 30039 - 11905: 0xAE7D,
+ 30040 - 11905: 0xAE7E,
+ 30041 - 11905: 0xC1F4,
+ 30042 - 11905: 0xDBCE,
+ 30043 - 11905: 0xEEB3,
+ 30044 - 11905: 0xD0F3,
+ 30045 - 11905: 0xAE80,
+ 30046 - 11905: 0xAE81,
+ 30047 - 11905: 0xAE82,
+ 30048 - 11905: 0xAE83,
+ 30049 - 11905: 0xAE84,
+ 30050 - 11905: 0xAE85,
+ 30051 - 11905: 0xAE86,
+ 30052 - 11905: 0xAE87,
+ 30053 - 11905: 0xC2D4,
+ 30054 - 11905: 0xC6E8,
+ 30055 - 11905: 0xAE88,
+ 30056 - 11905: 0xAE89,
+ 30057 - 11905: 0xAE8A,
+ 30058 - 11905: 0xB7AC,
+ 30059 - 11905: 0xAE8B,
+ 30060 - 11905: 0xAE8C,
+ 30061 - 11905: 0xAE8D,
+ 30062 - 11905: 0xAE8E,
+ 30063 - 11905: 0xAE8F,
+ 30064 - 11905: 0xAE90,
+ 30065 - 11905: 0xAE91,
+ 30066 - 11905: 0xEEB4,
+ 30067 - 11905: 0xAE92,
+ 30068 - 11905: 0xB3EB,
+ 30069 - 11905: 0xAE93,
+ 30070 - 11905: 0xAE94,
+ 30071 - 11905: 0xAE95,
+ 30072 - 11905: 0xBBFB,
+ 30073 - 11905: 0xEEB5,
+ 30074 - 11905: 0xAE96,
+ 30075 - 11905: 0xAE97,
+ 30076 - 11905: 0xAE98,
+ 30077 - 11905: 0xAE99,
+ 30078 - 11905: 0xAE9A,
+ 30079 - 11905: 0xE7DC,
+ 30080 - 11905: 0xAE9B,
+ 30081 - 11905: 0xAE9C,
+ 30082 - 11905: 0xAE9D,
+ 30083 - 11905: 0xEEB6,
+ 30084 - 11905: 0xAE9E,
+ 30085 - 11905: 0xAE9F,
+ 30086 - 11905: 0xBDAE,
+ 30087 - 11905: 0xAEA0,
+ 30088 - 11905: 0xAF40,
+ 30089 - 11905: 0xAF41,
+ 30090 - 11905: 0xAF42,
+ 30091 - 11905: 0xF1E2,
+ 30092 - 11905: 0xAF43,
+ 30093 - 11905: 0xAF44,
+ 30094 - 11905: 0xAF45,
+ 30095 - 11905: 0xCAE8,
+ 30096 - 11905: 0xAF46,
+ 30097 - 11905: 0xD2C9,
+ 30098 - 11905: 0xF0DA,
+ 30099 - 11905: 0xAF47,
+ 30100 - 11905: 0xF0DB,
+ 30101 - 11905: 0xAF48,
+ 30102 - 11905: 0xF0DC,
+ 30103 - 11905: 0xC1C6,
+ 30104 - 11905: 0xAF49,
+ 30105 - 11905: 0xB8ED,
+ 30106 - 11905: 0xBECE,
+ 30107 - 11905: 0xAF4A,
+ 30108 - 11905: 0xAF4B,
+ 30109 - 11905: 0xF0DE,
+ 30110 - 11905: 0xAF4C,
+ 30111 - 11905: 0xC5B1,
+ 30112 - 11905: 0xF0DD,
+ 30113 - 11905: 0xD1F1,
+ 30114 - 11905: 0xAF4D,
+ 30115 - 11905: 0xF0E0,
+ 30116 - 11905: 0xB0CC,
+ 30117 - 11905: 0xBDEA,
+ 30118 - 11905: 0xAF4E,
+ 30119 - 11905: 0xAF4F,
+ 30120 - 11905: 0xAF50,
+ 30121 - 11905: 0xAF51,
+ 30122 - 11905: 0xAF52,
+ 30123 - 11905: 0xD2DF,
+ 30124 - 11905: 0xF0DF,
+ 30125 - 11905: 0xAF53,
+ 30126 - 11905: 0xB4AF,
+ 30127 - 11905: 0xB7E8,
+ 30128 - 11905: 0xF0E6,
+ 30129 - 11905: 0xF0E5,
+ 30130 - 11905: 0xC6A3,
+ 30131 - 11905: 0xF0E1,
+ 30132 - 11905: 0xF0E2,
+ 30133 - 11905: 0xB4C3,
+ 30134 - 11905: 0xAF54,
+ 30135 - 11905: 0xAF55,
+ 30136 - 11905: 0xF0E3,
+ 30137 - 11905: 0xD5EE,
+ 30138 - 11905: 0xAF56,
+ 30139 - 11905: 0xAF57,
+ 30140 - 11905: 0xCCDB,
+ 30141 - 11905: 0xBED2,
+ 30142 - 11905: 0xBCB2,
+ 30143 - 11905: 0xAF58,
+ 30144 - 11905: 0xAF59,
+ 30145 - 11905: 0xAF5A,
+ 30146 - 11905: 0xF0E8,
+ 30147 - 11905: 0xF0E7,
+ 30148 - 11905: 0xF0E4,
+ 30149 - 11905: 0xB2A1,
+ 30150 - 11905: 0xAF5B,
+ 30151 - 11905: 0xD6A2,
+ 30152 - 11905: 0xD3B8,
+ 30153 - 11905: 0xBEB7,
+ 30154 - 11905: 0xC8AC,
+ 30155 - 11905: 0xAF5C,
+ 30156 - 11905: 0xAF5D,
+ 30157 - 11905: 0xF0EA,
+ 30158 - 11905: 0xAF5E,
+ 30159 - 11905: 0xAF5F,
+ 30160 - 11905: 0xAF60,
+ 30161 - 11905: 0xAF61,
+ 30162 - 11905: 0xD1F7,
+ 30163 - 11905: 0xAF62,
+ 30164 - 11905: 0xD6CC,
+ 30165 - 11905: 0xBADB,
+ 30166 - 11905: 0xF0E9,
+ 30167 - 11905: 0xAF63,
+ 30168 - 11905: 0xB6BB,
+ 30169 - 11905: 0xAF64,
+ 30170 - 11905: 0xAF65,
+ 30171 - 11905: 0xCDB4,
+ 30172 - 11905: 0xAF66,
+ 30173 - 11905: 0xAF67,
+ 30174 - 11905: 0xC6A6,
+ 30175 - 11905: 0xAF68,
+ 30176 - 11905: 0xAF69,
+ 30177 - 11905: 0xAF6A,
+ 30178 - 11905: 0xC1A1,
+ 30179 - 11905: 0xF0EB,
+ 30180 - 11905: 0xF0EE,
+ 30181 - 11905: 0xAF6B,
+ 30182 - 11905: 0xF0ED,
+ 30183 - 11905: 0xF0F0,
+ 30184 - 11905: 0xF0EC,
+ 30185 - 11905: 0xAF6C,
+ 30186 - 11905: 0xBBBE,
+ 30187 - 11905: 0xF0EF,
+ 30188 - 11905: 0xAF6D,
+ 30189 - 11905: 0xAF6E,
+ 30190 - 11905: 0xAF6F,
+ 30191 - 11905: 0xAF70,
+ 30192 - 11905: 0xCCB5,
+ 30193 - 11905: 0xF0F2,
+ 30194 - 11905: 0xAF71,
+ 30195 - 11905: 0xAF72,
+ 30196 - 11905: 0xB3D5,
+ 30197 - 11905: 0xAF73,
+ 30198 - 11905: 0xAF74,
+ 30199 - 11905: 0xAF75,
+ 30200 - 11905: 0xAF76,
+ 30201 - 11905: 0xB1D4,
+ 30202 - 11905: 0xAF77,
+ 30203 - 11905: 0xAF78,
+ 30204 - 11905: 0xF0F3,
+ 30205 - 11905: 0xAF79,
+ 30206 - 11905: 0xAF7A,
+ 30207 - 11905: 0xF0F4,
+ 30208 - 11905: 0xF0F6,
+ 30209 - 11905: 0xB4E1,
+ 30210 - 11905: 0xAF7B,
+ 30211 - 11905: 0xF0F1,
+ 30212 - 11905: 0xAF7C,
+ 30213 - 11905: 0xF0F7,
+ 30214 - 11905: 0xAF7D,
+ 30215 - 11905: 0xAF7E,
+ 30216 - 11905: 0xAF80,
+ 30217 - 11905: 0xAF81,
+ 30218 - 11905: 0xF0FA,
+ 30219 - 11905: 0xAF82,
+ 30220 - 11905: 0xF0F8,
+ 30221 - 11905: 0xAF83,
+ 30222 - 11905: 0xAF84,
+ 30223 - 11905: 0xAF85,
+ 30224 - 11905: 0xF0F5,
+ 30225 - 11905: 0xAF86,
+ 30226 - 11905: 0xAF87,
+ 30227 - 11905: 0xAF88,
+ 30228 - 11905: 0xAF89,
+ 30229 - 11905: 0xF0FD,
+ 30230 - 11905: 0xAF8A,
+ 30231 - 11905: 0xF0F9,
+ 30232 - 11905: 0xF0FC,
+ 30233 - 11905: 0xF0FE,
+ 30234 - 11905: 0xAF8B,
+ 30235 - 11905: 0xF1A1,
+ 30236 - 11905: 0xAF8C,
+ 30237 - 11905: 0xAF8D,
+ 30238 - 11905: 0xAF8E,
+ 30239 - 11905: 0xCEC1,
+ 30240 - 11905: 0xF1A4,
+ 30241 - 11905: 0xAF8F,
+ 30242 - 11905: 0xF1A3,
+ 30243 - 11905: 0xAF90,
+ 30244 - 11905: 0xC1F6,
+ 30245 - 11905: 0xF0FB,
+ 30246 - 11905: 0xCADD,
+ 30247 - 11905: 0xAF91,
+ 30248 - 11905: 0xAF92,
+ 30249 - 11905: 0xB4F1,
+ 30250 - 11905: 0xB1F1,
+ 30251 - 11905: 0xCCB1,
+ 30252 - 11905: 0xAF93,
+ 30253 - 11905: 0xF1A6,
+ 30254 - 11905: 0xAF94,
+ 30255 - 11905: 0xAF95,
+ 30256 - 11905: 0xF1A7,
+ 30257 - 11905: 0xAF96,
+ 30258 - 11905: 0xAF97,
+ 30259 - 11905: 0xF1AC,
+ 30260 - 11905: 0xD5CE,
+ 30261 - 11905: 0xF1A9,
+ 30262 - 11905: 0xAF98,
+ 30263 - 11905: 0xAF99,
+ 30264 - 11905: 0xC8B3,
+ 30265 - 11905: 0xAF9A,
+ 30266 - 11905: 0xAF9B,
+ 30267 - 11905: 0xAF9C,
+ 30268 - 11905: 0xF1A2,
+ 30269 - 11905: 0xAF9D,
+ 30270 - 11905: 0xF1AB,
+ 30271 - 11905: 0xF1A8,
+ 30272 - 11905: 0xF1A5,
+ 30273 - 11905: 0xAF9E,
+ 30274 - 11905: 0xAF9F,
+ 30275 - 11905: 0xF1AA,
+ 30276 - 11905: 0xAFA0,
+ 30277 - 11905: 0xB040,
+ 30278 - 11905: 0xB041,
+ 30279 - 11905: 0xB042,
+ 30280 - 11905: 0xB043,
+ 30281 - 11905: 0xB044,
+ 30282 - 11905: 0xB045,
+ 30283 - 11905: 0xB046,
+ 30284 - 11905: 0xB0A9,
+ 30285 - 11905: 0xF1AD,
+ 30286 - 11905: 0xB047,
+ 30287 - 11905: 0xB048,
+ 30288 - 11905: 0xB049,
+ 30289 - 11905: 0xB04A,
+ 30290 - 11905: 0xB04B,
+ 30291 - 11905: 0xB04C,
+ 30292 - 11905: 0xF1AF,
+ 30293 - 11905: 0xB04D,
+ 30294 - 11905: 0xF1B1,
+ 30295 - 11905: 0xB04E,
+ 30296 - 11905: 0xB04F,
+ 30297 - 11905: 0xB050,
+ 30298 - 11905: 0xB051,
+ 30299 - 11905: 0xB052,
+ 30300 - 11905: 0xF1B0,
+ 30301 - 11905: 0xB053,
+ 30302 - 11905: 0xF1AE,
+ 30303 - 11905: 0xB054,
+ 30304 - 11905: 0xB055,
+ 30305 - 11905: 0xB056,
+ 30306 - 11905: 0xB057,
+ 30307 - 11905: 0xD1A2,
+ 30308 - 11905: 0xB058,
+ 30309 - 11905: 0xB059,
+ 30310 - 11905: 0xB05A,
+ 30311 - 11905: 0xB05B,
+ 30312 - 11905: 0xB05C,
+ 30313 - 11905: 0xB05D,
+ 30314 - 11905: 0xB05E,
+ 30315 - 11905: 0xF1B2,
+ 30316 - 11905: 0xB05F,
+ 30317 - 11905: 0xB060,
+ 30318 - 11905: 0xB061,
+ 30319 - 11905: 0xF1B3,
+ 30320 - 11905: 0xB062,
+ 30321 - 11905: 0xB063,
+ 30322 - 11905: 0xB064,
+ 30323 - 11905: 0xB065,
+ 30324 - 11905: 0xB066,
+ 30325 - 11905: 0xB067,
+ 30326 - 11905: 0xB068,
+ 30327 - 11905: 0xB069,
+ 30328 - 11905: 0xB9EF,
+ 30329 - 11905: 0xB06A,
+ 30330 - 11905: 0xB06B,
+ 30331 - 11905: 0xB5C7,
+ 30332 - 11905: 0xB06C,
+ 30333 - 11905: 0xB0D7,
+ 30334 - 11905: 0xB0D9,
+ 30335 - 11905: 0xB06D,
+ 30336 - 11905: 0xB06E,
+ 30337 - 11905: 0xB06F,
+ 30338 - 11905: 0xD4ED,
+ 30339 - 11905: 0xB070,
+ 30340 - 11905: 0xB5C4,
+ 30341 - 11905: 0xB071,
+ 30342 - 11905: 0xBDD4,
+ 30343 - 11905: 0xBBCA,
+ 30344 - 11905: 0xF0A7,
+ 30345 - 11905: 0xB072,
+ 30346 - 11905: 0xB073,
+ 30347 - 11905: 0xB8DE,
+ 30348 - 11905: 0xB074,
+ 30349 - 11905: 0xB075,
+ 30350 - 11905: 0xF0A8,
+ 30351 - 11905: 0xB076,
+ 30352 - 11905: 0xB077,
+ 30353 - 11905: 0xB0A8,
+ 30354 - 11905: 0xB078,
+ 30355 - 11905: 0xF0A9,
+ 30356 - 11905: 0xB079,
+ 30357 - 11905: 0xB07A,
+ 30358 - 11905: 0xCDEE,
+ 30359 - 11905: 0xB07B,
+ 30360 - 11905: 0xB07C,
+ 30361 - 11905: 0xF0AA,
+ 30362 - 11905: 0xB07D,
+ 30363 - 11905: 0xB07E,
+ 30364 - 11905: 0xB080,
+ 30365 - 11905: 0xB081,
+ 30366 - 11905: 0xB082,
+ 30367 - 11905: 0xB083,
+ 30368 - 11905: 0xB084,
+ 30369 - 11905: 0xB085,
+ 30370 - 11905: 0xB086,
+ 30371 - 11905: 0xB087,
+ 30372 - 11905: 0xF0AB,
+ 30373 - 11905: 0xB088,
+ 30374 - 11905: 0xB089,
+ 30375 - 11905: 0xB08A,
+ 30376 - 11905: 0xB08B,
+ 30377 - 11905: 0xB08C,
+ 30378 - 11905: 0xB08D,
+ 30379 - 11905: 0xB08E,
+ 30380 - 11905: 0xB08F,
+ 30381 - 11905: 0xB090,
+ 30382 - 11905: 0xC6A4,
+ 30383 - 11905: 0xB091,
+ 30384 - 11905: 0xB092,
+ 30385 - 11905: 0xD6E5,
+ 30386 - 11905: 0xF1E4,
+ 30387 - 11905: 0xB093,
+ 30388 - 11905: 0xF1E5,
+ 30389 - 11905: 0xB094,
+ 30390 - 11905: 0xB095,
+ 30391 - 11905: 0xB096,
+ 30392 - 11905: 0xB097,
+ 30393 - 11905: 0xB098,
+ 30394 - 11905: 0xB099,
+ 30395 - 11905: 0xB09A,
+ 30396 - 11905: 0xB09B,
+ 30397 - 11905: 0xB09C,
+ 30398 - 11905: 0xB09D,
+ 30399 - 11905: 0xC3F3,
+ 30400 - 11905: 0xB09E,
+ 30401 - 11905: 0xB09F,
+ 30402 - 11905: 0xD3DB,
+ 30403 - 11905: 0xB0A0,
+ 30404 - 11905: 0xB140,
+ 30405 - 11905: 0xD6D1,
+ 30406 - 11905: 0xC5E8,
+ 30407 - 11905: 0xB141,
+ 30408 - 11905: 0xD3AF,
+ 30409 - 11905: 0xB142,
+ 30410 - 11905: 0xD2E6,
+ 30411 - 11905: 0xB143,
+ 30412 - 11905: 0xB144,
+ 30413 - 11905: 0xEEC1,
+ 30414 - 11905: 0xB0BB,
+ 30415 - 11905: 0xD5B5,
+ 30416 - 11905: 0xD1CE,
+ 30417 - 11905: 0xBCE0,
+ 30418 - 11905: 0xBAD0,
+ 30419 - 11905: 0xB145,
+ 30420 - 11905: 0xBFF8,
+ 30421 - 11905: 0xB146,
+ 30422 - 11905: 0xB8C7,
+ 30423 - 11905: 0xB5C1,
+ 30424 - 11905: 0xC5CC,
+ 30425 - 11905: 0xB147,
+ 30426 - 11905: 0xB148,
+ 30427 - 11905: 0xCAA2,
+ 30428 - 11905: 0xB149,
+ 30429 - 11905: 0xB14A,
+ 30430 - 11905: 0xB14B,
+ 30431 - 11905: 0xC3CB,
+ 30432 - 11905: 0xB14C,
+ 30433 - 11905: 0xB14D,
+ 30434 - 11905: 0xB14E,
+ 30435 - 11905: 0xB14F,
+ 30436 - 11905: 0xB150,
+ 30437 - 11905: 0xEEC2,
+ 30438 - 11905: 0xB151,
+ 30439 - 11905: 0xB152,
+ 30440 - 11905: 0xB153,
+ 30441 - 11905: 0xB154,
+ 30442 - 11905: 0xB155,
+ 30443 - 11905: 0xB156,
+ 30444 - 11905: 0xB157,
+ 30445 - 11905: 0xB158,
+ 30446 - 11905: 0xC4BF,
+ 30447 - 11905: 0xB6A2,
+ 30448 - 11905: 0xB159,
+ 30449 - 11905: 0xEDEC,
+ 30450 - 11905: 0xC3A4,
+ 30451 - 11905: 0xB15A,
+ 30452 - 11905: 0xD6B1,
+ 30453 - 11905: 0xB15B,
+ 30454 - 11905: 0xB15C,
+ 30455 - 11905: 0xB15D,
+ 30456 - 11905: 0xCFE0,
+ 30457 - 11905: 0xEDEF,
+ 30458 - 11905: 0xB15E,
+ 30459 - 11905: 0xB15F,
+ 30460 - 11905: 0xC5CE,
+ 30461 - 11905: 0xB160,
+ 30462 - 11905: 0xB6DC,
+ 30463 - 11905: 0xB161,
+ 30464 - 11905: 0xB162,
+ 30465 - 11905: 0xCAA1,
+ 30466 - 11905: 0xB163,
+ 30467 - 11905: 0xB164,
+ 30468 - 11905: 0xEDED,
+ 30469 - 11905: 0xB165,
+ 30470 - 11905: 0xB166,
+ 30471 - 11905: 0xEDF0,
+ 30472 - 11905: 0xEDF1,
+ 30473 - 11905: 0xC3BC,
+ 30474 - 11905: 0xB167,
+ 30475 - 11905: 0xBFB4,
+ 30476 - 11905: 0xB168,
+ 30477 - 11905: 0xEDEE,
+ 30478 - 11905: 0xB169,
+ 30479 - 11905: 0xB16A,
+ 30480 - 11905: 0xB16B,
+ 30481 - 11905: 0xB16C,
+ 30482 - 11905: 0xB16D,
+ 30483 - 11905: 0xB16E,
+ 30484 - 11905: 0xB16F,
+ 30485 - 11905: 0xB170,
+ 30486 - 11905: 0xB171,
+ 30487 - 11905: 0xB172,
+ 30488 - 11905: 0xB173,
+ 30489 - 11905: 0xEDF4,
+ 30490 - 11905: 0xEDF2,
+ 30491 - 11905: 0xB174,
+ 30492 - 11905: 0xB175,
+ 30493 - 11905: 0xB176,
+ 30494 - 11905: 0xB177,
+ 30495 - 11905: 0xD5E6,
+ 30496 - 11905: 0xC3DF,
+ 30497 - 11905: 0xB178,
+ 30498 - 11905: 0xEDF3,
+ 30499 - 11905: 0xB179,
+ 30500 - 11905: 0xB17A,
+ 30501 - 11905: 0xB17B,
+ 30502 - 11905: 0xEDF6,
+ 30503 - 11905: 0xB17C,
+ 30504 - 11905: 0xD5A3,
+ 30505 - 11905: 0xD1A3,
+ 30506 - 11905: 0xB17D,
+ 30507 - 11905: 0xB17E,
+ 30508 - 11905: 0xB180,
+ 30509 - 11905: 0xEDF5,
+ 30510 - 11905: 0xB181,
+ 30511 - 11905: 0xC3D0,
+ 30512 - 11905: 0xB182,
+ 30513 - 11905: 0xB183,
+ 30514 - 11905: 0xB184,
+ 30515 - 11905: 0xB185,
+ 30516 - 11905: 0xB186,
+ 30517 - 11905: 0xEDF7,
+ 30518 - 11905: 0xBFF4,
+ 30519 - 11905: 0xBEEC,
+ 30520 - 11905: 0xEDF8,
+ 30521 - 11905: 0xB187,
+ 30522 - 11905: 0xCCF7,
+ 30523 - 11905: 0xB188,
+ 30524 - 11905: 0xD1DB,
+ 30525 - 11905: 0xB189,
+ 30526 - 11905: 0xB18A,
+ 30527 - 11905: 0xB18B,
+ 30528 - 11905: 0xD7C5,
+ 30529 - 11905: 0xD5F6,
+ 30530 - 11905: 0xB18C,
+ 30531 - 11905: 0xEDFC,
+ 30532 - 11905: 0xB18D,
+ 30533 - 11905: 0xB18E,
+ 30534 - 11905: 0xB18F,
+ 30535 - 11905: 0xEDFB,
+ 30536 - 11905: 0xB190,
+ 30537 - 11905: 0xB191,
+ 30538 - 11905: 0xB192,
+ 30539 - 11905: 0xB193,
+ 30540 - 11905: 0xB194,
+ 30541 - 11905: 0xB195,
+ 30542 - 11905: 0xB196,
+ 30543 - 11905: 0xB197,
+ 30544 - 11905: 0xEDF9,
+ 30545 - 11905: 0xEDFA,
+ 30546 - 11905: 0xB198,
+ 30547 - 11905: 0xB199,
+ 30548 - 11905: 0xB19A,
+ 30549 - 11905: 0xB19B,
+ 30550 - 11905: 0xB19C,
+ 30551 - 11905: 0xB19D,
+ 30552 - 11905: 0xB19E,
+ 30553 - 11905: 0xB19F,
+ 30554 - 11905: 0xEDFD,
+ 30555 - 11905: 0xBEA6,
+ 30556 - 11905: 0xB1A0,
+ 30557 - 11905: 0xB240,
+ 30558 - 11905: 0xB241,
+ 30559 - 11905: 0xB242,
+ 30560 - 11905: 0xB243,
+ 30561 - 11905: 0xCBAF,
+ 30562 - 11905: 0xEEA1,
+ 30563 - 11905: 0xB6BD,
+ 30564 - 11905: 0xB244,
+ 30565 - 11905: 0xEEA2,
+ 30566 - 11905: 0xC4C0,
+ 30567 - 11905: 0xB245,
+ 30568 - 11905: 0xEDFE,
+ 30569 - 11905: 0xB246,
+ 30570 - 11905: 0xB247,
+ 30571 - 11905: 0xBDDE,
+ 30572 - 11905: 0xB2C7,
+ 30573 - 11905: 0xB248,
+ 30574 - 11905: 0xB249,
+ 30575 - 11905: 0xB24A,
+ 30576 - 11905: 0xB24B,
+ 30577 - 11905: 0xB24C,
+ 30578 - 11905: 0xB24D,
+ 30579 - 11905: 0xB24E,
+ 30580 - 11905: 0xB24F,
+ 30581 - 11905: 0xB250,
+ 30582 - 11905: 0xB251,
+ 30583 - 11905: 0xB252,
+ 30584 - 11905: 0xB253,
+ 30585 - 11905: 0xB6C3,
+ 30586 - 11905: 0xB254,
+ 30587 - 11905: 0xB255,
+ 30588 - 11905: 0xB256,
+ 30589 - 11905: 0xEEA5,
+ 30590 - 11905: 0xD8BA,
+ 30591 - 11905: 0xEEA3,
+ 30592 - 11905: 0xEEA6,
+ 30593 - 11905: 0xB257,
+ 30594 - 11905: 0xB258,
+ 30595 - 11905: 0xB259,
+ 30596 - 11905: 0xC3E9,
+ 30597 - 11905: 0xB3F2,
+ 30598 - 11905: 0xB25A,
+ 30599 - 11905: 0xB25B,
+ 30600 - 11905: 0xB25C,
+ 30601 - 11905: 0xB25D,
+ 30602 - 11905: 0xB25E,
+ 30603 - 11905: 0xB25F,
+ 30604 - 11905: 0xEEA7,
+ 30605 - 11905: 0xEEA4,
+ 30606 - 11905: 0xCFB9,
+ 30607 - 11905: 0xB260,
+ 30608 - 11905: 0xB261,
+ 30609 - 11905: 0xEEA8,
+ 30610 - 11905: 0xC2F7,
+ 30611 - 11905: 0xB262,
+ 30612 - 11905: 0xB263,
+ 30613 - 11905: 0xB264,
+ 30614 - 11905: 0xB265,
+ 30615 - 11905: 0xB266,
+ 30616 - 11905: 0xB267,
+ 30617 - 11905: 0xB268,
+ 30618 - 11905: 0xB269,
+ 30619 - 11905: 0xB26A,
+ 30620 - 11905: 0xB26B,
+ 30621 - 11905: 0xB26C,
+ 30622 - 11905: 0xB26D,
+ 30623 - 11905: 0xEEA9,
+ 30624 - 11905: 0xEEAA,
+ 30625 - 11905: 0xB26E,
+ 30626 - 11905: 0xDEAB,
+ 30627 - 11905: 0xB26F,
+ 30628 - 11905: 0xB270,
+ 30629 - 11905: 0xC6B3,
+ 30630 - 11905: 0xB271,
+ 30631 - 11905: 0xC7C6,
+ 30632 - 11905: 0xB272,
+ 30633 - 11905: 0xD6F5,
+ 30634 - 11905: 0xB5C9,
+ 30635 - 11905: 0xB273,
+ 30636 - 11905: 0xCBB2,
+ 30637 - 11905: 0xB274,
+ 30638 - 11905: 0xB275,
+ 30639 - 11905: 0xB276,
+ 30640 - 11905: 0xEEAB,
+ 30641 - 11905: 0xB277,
+ 30642 - 11905: 0xB278,
+ 30643 - 11905: 0xCDAB,
+ 30644 - 11905: 0xB279,
+ 30645 - 11905: 0xEEAC,
+ 30646 - 11905: 0xB27A,
+ 30647 - 11905: 0xB27B,
+ 30648 - 11905: 0xB27C,
+ 30649 - 11905: 0xB27D,
+ 30650 - 11905: 0xB27E,
+ 30651 - 11905: 0xD5B0,
+ 30652 - 11905: 0xB280,
+ 30653 - 11905: 0xEEAD,
+ 30654 - 11905: 0xB281,
+ 30655 - 11905: 0xF6C4,
+ 30656 - 11905: 0xB282,
+ 30657 - 11905: 0xB283,
+ 30658 - 11905: 0xB284,
+ 30659 - 11905: 0xB285,
+ 30660 - 11905: 0xB286,
+ 30661 - 11905: 0xB287,
+ 30662 - 11905: 0xB288,
+ 30663 - 11905: 0xB289,
+ 30664 - 11905: 0xB28A,
+ 30665 - 11905: 0xB28B,
+ 30666 - 11905: 0xB28C,
+ 30667 - 11905: 0xB28D,
+ 30668 - 11905: 0xB28E,
+ 30669 - 11905: 0xDBC7,
+ 30670 - 11905: 0xB28F,
+ 30671 - 11905: 0xB290,
+ 30672 - 11905: 0xB291,
+ 30673 - 11905: 0xB292,
+ 30674 - 11905: 0xB293,
+ 30675 - 11905: 0xB294,
+ 30676 - 11905: 0xB295,
+ 30677 - 11905: 0xB296,
+ 30678 - 11905: 0xB297,
+ 30679 - 11905: 0xB4A3,
+ 30680 - 11905: 0xB298,
+ 30681 - 11905: 0xB299,
+ 30682 - 11905: 0xB29A,
+ 30683 - 11905: 0xC3AC,
+ 30684 - 11905: 0xF1E6,
+ 30685 - 11905: 0xB29B,
+ 30686 - 11905: 0xB29C,
+ 30687 - 11905: 0xB29D,
+ 30688 - 11905: 0xB29E,
+ 30689 - 11905: 0xB29F,
+ 30690 - 11905: 0xCAB8,
+ 30691 - 11905: 0xD2D3,
+ 30692 - 11905: 0xB2A0,
+ 30693 - 11905: 0xD6AA,
+ 30694 - 11905: 0xB340,
+ 30695 - 11905: 0xEFF2,
+ 30696 - 11905: 0xB341,
+ 30697 - 11905: 0xBED8,
+ 30698 - 11905: 0xB342,
+ 30699 - 11905: 0xBDC3,
+ 30700 - 11905: 0xEFF3,
+ 30701 - 11905: 0xB6CC,
+ 30702 - 11905: 0xB0AB,
+ 30703 - 11905: 0xB343,
+ 30704 - 11905: 0xB344,
+ 30705 - 11905: 0xB345,
+ 30706 - 11905: 0xB346,
+ 30707 - 11905: 0xCAAF,
+ 30708 - 11905: 0xB347,
+ 30709 - 11905: 0xB348,
+ 30710 - 11905: 0xEDB6,
+ 30711 - 11905: 0xB349,
+ 30712 - 11905: 0xEDB7,
+ 30713 - 11905: 0xB34A,
+ 30714 - 11905: 0xB34B,
+ 30715 - 11905: 0xB34C,
+ 30716 - 11905: 0xB34D,
+ 30717 - 11905: 0xCEF9,
+ 30718 - 11905: 0xB7AF,
+ 30719 - 11905: 0xBFF3,
+ 30720 - 11905: 0xEDB8,
+ 30721 - 11905: 0xC2EB,
+ 30722 - 11905: 0xC9B0,
+ 30723 - 11905: 0xB34E,
+ 30724 - 11905: 0xB34F,
+ 30725 - 11905: 0xB350,
+ 30726 - 11905: 0xB351,
+ 30727 - 11905: 0xB352,
+ 30728 - 11905: 0xB353,
+ 30729 - 11905: 0xEDB9,
+ 30730 - 11905: 0xB354,
+ 30731 - 11905: 0xB355,
+ 30732 - 11905: 0xC6F6,
+ 30733 - 11905: 0xBFB3,
+ 30734 - 11905: 0xB356,
+ 30735 - 11905: 0xB357,
+ 30736 - 11905: 0xB358,
+ 30737 - 11905: 0xEDBC,
+ 30738 - 11905: 0xC5F8,
+ 30739 - 11905: 0xB359,
+ 30740 - 11905: 0xD1D0,
+ 30741 - 11905: 0xB35A,
+ 30742 - 11905: 0xD7A9,
+ 30743 - 11905: 0xEDBA,
+ 30744 - 11905: 0xEDBB,
+ 30745 - 11905: 0xB35B,
+ 30746 - 11905: 0xD1E2,
+ 30747 - 11905: 0xB35C,
+ 30748 - 11905: 0xEDBF,
+ 30749 - 11905: 0xEDC0,
+ 30750 - 11905: 0xB35D,
+ 30751 - 11905: 0xEDC4,
+ 30752 - 11905: 0xB35E,
+ 30753 - 11905: 0xB35F,
+ 30754 - 11905: 0xB360,
+ 30755 - 11905: 0xEDC8,
+ 30756 - 11905: 0xB361,
+ 30757 - 11905: 0xEDC6,
+ 30758 - 11905: 0xEDCE,
+ 30759 - 11905: 0xD5E8,
+ 30760 - 11905: 0xB362,
+ 30761 - 11905: 0xEDC9,
+ 30762 - 11905: 0xB363,
+ 30763 - 11905: 0xB364,
+ 30764 - 11905: 0xEDC7,
+ 30765 - 11905: 0xEDBE,
+ 30766 - 11905: 0xB365,
+ 30767 - 11905: 0xB366,
+ 30768 - 11905: 0xC5E9,
+ 30769 - 11905: 0xB367,
+ 30770 - 11905: 0xB368,
+ 30771 - 11905: 0xB369,
+ 30772 - 11905: 0xC6C6,
+ 30773 - 11905: 0xB36A,
+ 30774 - 11905: 0xB36B,
+ 30775 - 11905: 0xC9E9,
+ 30776 - 11905: 0xD4D2,
+ 30777 - 11905: 0xEDC1,
+ 30778 - 11905: 0xEDC2,
+ 30779 - 11905: 0xEDC3,
+ 30780 - 11905: 0xEDC5,
+ 30781 - 11905: 0xB36C,
+ 30782 - 11905: 0xC0F9,
+ 30783 - 11905: 0xB36D,
+ 30784 - 11905: 0xB4A1,
+ 30785 - 11905: 0xB36E,
+ 30786 - 11905: 0xB36F,
+ 30787 - 11905: 0xB370,
+ 30788 - 11905: 0xB371,
+ 30789 - 11905: 0xB9E8,
+ 30790 - 11905: 0xB372,
+ 30791 - 11905: 0xEDD0,
+ 30792 - 11905: 0xB373,
+ 30793 - 11905: 0xB374,
+ 30794 - 11905: 0xB375,
+ 30795 - 11905: 0xB376,
+ 30796 - 11905: 0xEDD1,
+ 30797 - 11905: 0xB377,
+ 30798 - 11905: 0xEDCA,
+ 30799 - 11905: 0xB378,
+ 30800 - 11905: 0xEDCF,
+ 30801 - 11905: 0xB379,
+ 30802 - 11905: 0xCEF8,
+ 30803 - 11905: 0xB37A,
+ 30804 - 11905: 0xB37B,
+ 30805 - 11905: 0xCBB6,
+ 30806 - 11905: 0xEDCC,
+ 30807 - 11905: 0xEDCD,
+ 30808 - 11905: 0xB37C,
+ 30809 - 11905: 0xB37D,
+ 30810 - 11905: 0xB37E,
+ 30811 - 11905: 0xB380,
+ 30812 - 11905: 0xB381,
+ 30813 - 11905: 0xCFF5,
+ 30814 - 11905: 0xB382,
+ 30815 - 11905: 0xB383,
+ 30816 - 11905: 0xB384,
+ 30817 - 11905: 0xB385,
+ 30818 - 11905: 0xB386,
+ 30819 - 11905: 0xB387,
+ 30820 - 11905: 0xB388,
+ 30821 - 11905: 0xB389,
+ 30822 - 11905: 0xB38A,
+ 30823 - 11905: 0xB38B,
+ 30824 - 11905: 0xB38C,
+ 30825 - 11905: 0xB38D,
+ 30826 - 11905: 0xEDD2,
+ 30827 - 11905: 0xC1F2,
+ 30828 - 11905: 0xD3B2,
+ 30829 - 11905: 0xEDCB,
+ 30830 - 11905: 0xC8B7,
+ 30831 - 11905: 0xB38E,
+ 30832 - 11905: 0xB38F,
+ 30833 - 11905: 0xB390,
+ 30834 - 11905: 0xB391,
+ 30835 - 11905: 0xB392,
+ 30836 - 11905: 0xB393,
+ 30837 - 11905: 0xB394,
+ 30838 - 11905: 0xB395,
+ 30839 - 11905: 0xBCEF,
+ 30840 - 11905: 0xB396,
+ 30841 - 11905: 0xB397,
+ 30842 - 11905: 0xB398,
+ 30843 - 11905: 0xB399,
+ 30844 - 11905: 0xC5F0,
+ 30845 - 11905: 0xB39A,
+ 30846 - 11905: 0xB39B,
+ 30847 - 11905: 0xB39C,
+ 30848 - 11905: 0xB39D,
+ 30849 - 11905: 0xB39E,
+ 30850 - 11905: 0xB39F,
+ 30851 - 11905: 0xB3A0,
+ 30852 - 11905: 0xB440,
+ 30853 - 11905: 0xB441,
+ 30854 - 11905: 0xB442,
+ 30855 - 11905: 0xEDD6,
+ 30856 - 11905: 0xB443,
+ 30857 - 11905: 0xB5EF,
+ 30858 - 11905: 0xB444,
+ 30859 - 11905: 0xB445,
+ 30860 - 11905: 0xC2B5,
+ 30861 - 11905: 0xB0AD,
+ 30862 - 11905: 0xCBE9,
+ 30863 - 11905: 0xB446,
+ 30864 - 11905: 0xB447,
+ 30865 - 11905: 0xB1AE,
+ 30866 - 11905: 0xB448,
+ 30867 - 11905: 0xEDD4,
+ 30868 - 11905: 0xB449,
+ 30869 - 11905: 0xB44A,
+ 30870 - 11905: 0xB44B,
+ 30871 - 11905: 0xCDEB,
+ 30872 - 11905: 0xB5E2,
+ 30873 - 11905: 0xB44C,
+ 30874 - 11905: 0xEDD5,
+ 30875 - 11905: 0xEDD3,
+ 30876 - 11905: 0xEDD7,
+ 30877 - 11905: 0xB44D,
+ 30878 - 11905: 0xB44E,
+ 30879 - 11905: 0xB5FA,
+ 30880 - 11905: 0xB44F,
+ 30881 - 11905: 0xEDD8,
+ 30882 - 11905: 0xB450,
+ 30883 - 11905: 0xEDD9,
+ 30884 - 11905: 0xB451,
+ 30885 - 11905: 0xEDDC,
+ 30886 - 11905: 0xB452,
+ 30887 - 11905: 0xB1CC,
+ 30888 - 11905: 0xB453,
+ 30889 - 11905: 0xB454,
+ 30890 - 11905: 0xB455,
+ 30891 - 11905: 0xB456,
+ 30892 - 11905: 0xB457,
+ 30893 - 11905: 0xB458,
+ 30894 - 11905: 0xB459,
+ 30895 - 11905: 0xB45A,
+ 30896 - 11905: 0xC5F6,
+ 30897 - 11905: 0xBCEE,
+ 30898 - 11905: 0xEDDA,
+ 30899 - 11905: 0xCCBC,
+ 30900 - 11905: 0xB2EA,
+ 30901 - 11905: 0xB45B,
+ 30902 - 11905: 0xB45C,
+ 30903 - 11905: 0xB45D,
+ 30904 - 11905: 0xB45E,
+ 30905 - 11905: 0xEDDB,
+ 30906 - 11905: 0xB45F,
+ 30907 - 11905: 0xB460,
+ 30908 - 11905: 0xB461,
+ 30909 - 11905: 0xB462,
+ 30910 - 11905: 0xC4EB,
+ 30911 - 11905: 0xB463,
+ 30912 - 11905: 0xB464,
+ 30913 - 11905: 0xB4C5,
+ 30914 - 11905: 0xB465,
+ 30915 - 11905: 0xB466,
+ 30916 - 11905: 0xB467,
+ 30917 - 11905: 0xB0F5,
+ 30918 - 11905: 0xB468,
+ 30919 - 11905: 0xB469,
+ 30920 - 11905: 0xB46A,
+ 30921 - 11905: 0xEDDF,
+ 30922 - 11905: 0xC0DA,
+ 30923 - 11905: 0xB4E8,
+ 30924 - 11905: 0xB46B,
+ 30925 - 11905: 0xB46C,
+ 30926 - 11905: 0xB46D,
+ 30927 - 11905: 0xB46E,
+ 30928 - 11905: 0xC5CD,
+ 30929 - 11905: 0xB46F,
+ 30930 - 11905: 0xB470,
+ 30931 - 11905: 0xB471,
+ 30932 - 11905: 0xEDDD,
+ 30933 - 11905: 0xBFC4,
+ 30934 - 11905: 0xB472,
+ 30935 - 11905: 0xB473,
+ 30936 - 11905: 0xB474,
+ 30937 - 11905: 0xEDDE,
+ 30938 - 11905: 0xB475,
+ 30939 - 11905: 0xB476,
+ 30940 - 11905: 0xB477,
+ 30941 - 11905: 0xB478,
+ 30942 - 11905: 0xB479,
+ 30943 - 11905: 0xB47A,
+ 30944 - 11905: 0xB47B,
+ 30945 - 11905: 0xB47C,
+ 30946 - 11905: 0xB47D,
+ 30947 - 11905: 0xB47E,
+ 30948 - 11905: 0xB480,
+ 30949 - 11905: 0xB481,
+ 30950 - 11905: 0xB482,
+ 30951 - 11905: 0xB483,
+ 30952 - 11905: 0xC4A5,
+ 30953 - 11905: 0xB484,
+ 30954 - 11905: 0xB485,
+ 30955 - 11905: 0xB486,
+ 30956 - 11905: 0xEDE0,
+ 30957 - 11905: 0xB487,
+ 30958 - 11905: 0xB488,
+ 30959 - 11905: 0xB489,
+ 30960 - 11905: 0xB48A,
+ 30961 - 11905: 0xB48B,
+ 30962 - 11905: 0xEDE1,
+ 30963 - 11905: 0xB48C,
+ 30964 - 11905: 0xEDE3,
+ 30965 - 11905: 0xB48D,
+ 30966 - 11905: 0xB48E,
+ 30967 - 11905: 0xC1D7,
+ 30968 - 11905: 0xB48F,
+ 30969 - 11905: 0xB490,
+ 30970 - 11905: 0xBBC7,
+ 30971 - 11905: 0xB491,
+ 30972 - 11905: 0xB492,
+ 30973 - 11905: 0xB493,
+ 30974 - 11905: 0xB494,
+ 30975 - 11905: 0xB495,
+ 30976 - 11905: 0xB496,
+ 30977 - 11905: 0xBDB8,
+ 30978 - 11905: 0xB497,
+ 30979 - 11905: 0xB498,
+ 30980 - 11905: 0xB499,
+ 30981 - 11905: 0xEDE2,
+ 30982 - 11905: 0xB49A,
+ 30983 - 11905: 0xB49B,
+ 30984 - 11905: 0xB49C,
+ 30985 - 11905: 0xB49D,
+ 30986 - 11905: 0xB49E,
+ 30987 - 11905: 0xB49F,
+ 30988 - 11905: 0xB4A0,
+ 30989 - 11905: 0xB540,
+ 30990 - 11905: 0xB541,
+ 30991 - 11905: 0xB542,
+ 30992 - 11905: 0xB543,
+ 30993 - 11905: 0xB544,
+ 30994 - 11905: 0xB545,
+ 30995 - 11905: 0xEDE4,
+ 30996 - 11905: 0xB546,
+ 30997 - 11905: 0xB547,
+ 30998 - 11905: 0xB548,
+ 30999 - 11905: 0xB549,
+ 31000 - 11905: 0xB54A,
+ 31001 - 11905: 0xB54B,
+ 31002 - 11905: 0xB54C,
+ 31003 - 11905: 0xB54D,
+ 31004 - 11905: 0xB54E,
+ 31005 - 11905: 0xB54F,
+ 31006 - 11905: 0xEDE6,
+ 31007 - 11905: 0xB550,
+ 31008 - 11905: 0xB551,
+ 31009 - 11905: 0xB552,
+ 31010 - 11905: 0xB553,
+ 31011 - 11905: 0xB554,
+ 31012 - 11905: 0xEDE5,
+ 31013 - 11905: 0xB555,
+ 31014 - 11905: 0xB556,
+ 31015 - 11905: 0xB557,
+ 31016 - 11905: 0xB558,
+ 31017 - 11905: 0xB559,
+ 31018 - 11905: 0xB55A,
+ 31019 - 11905: 0xB55B,
+ 31020 - 11905: 0xB55C,
+ 31021 - 11905: 0xB55D,
+ 31022 - 11905: 0xB55E,
+ 31023 - 11905: 0xB55F,
+ 31024 - 11905: 0xB560,
+ 31025 - 11905: 0xB561,
+ 31026 - 11905: 0xB562,
+ 31027 - 11905: 0xB563,
+ 31028 - 11905: 0xEDE7,
+ 31029 - 11905: 0xB564,
+ 31030 - 11905: 0xB565,
+ 31031 - 11905: 0xB566,
+ 31032 - 11905: 0xB567,
+ 31033 - 11905: 0xB568,
+ 31034 - 11905: 0xCABE,
+ 31035 - 11905: 0xECEA,
+ 31036 - 11905: 0xC0F1,
+ 31037 - 11905: 0xB569,
+ 31038 - 11905: 0xC9E7,
+ 31039 - 11905: 0xB56A,
+ 31040 - 11905: 0xECEB,
+ 31041 - 11905: 0xC6EE,
+ 31042 - 11905: 0xB56B,
+ 31043 - 11905: 0xB56C,
+ 31044 - 11905: 0xB56D,
+ 31045 - 11905: 0xB56E,
+ 31046 - 11905: 0xECEC,
+ 31047 - 11905: 0xB56F,
+ 31048 - 11905: 0xC6ED,
+ 31049 - 11905: 0xECED,
+ 31050 - 11905: 0xB570,
+ 31051 - 11905: 0xB571,
+ 31052 - 11905: 0xB572,
+ 31053 - 11905: 0xB573,
+ 31054 - 11905: 0xB574,
+ 31055 - 11905: 0xB575,
+ 31056 - 11905: 0xB576,
+ 31057 - 11905: 0xB577,
+ 31058 - 11905: 0xB578,
+ 31059 - 11905: 0xECF0,
+ 31060 - 11905: 0xB579,
+ 31061 - 11905: 0xB57A,
+ 31062 - 11905: 0xD7E6,
+ 31063 - 11905: 0xECF3,
+ 31064 - 11905: 0xB57B,
+ 31065 - 11905: 0xB57C,
+ 31066 - 11905: 0xECF1,
+ 31067 - 11905: 0xECEE,
+ 31068 - 11905: 0xECEF,
+ 31069 - 11905: 0xD7A3,
+ 31070 - 11905: 0xC9F1,
+ 31071 - 11905: 0xCBEE,
+ 31072 - 11905: 0xECF4,
+ 31073 - 11905: 0xB57D,
+ 31074 - 11905: 0xECF2,
+ 31075 - 11905: 0xB57E,
+ 31076 - 11905: 0xB580,
+ 31077 - 11905: 0xCFE9,
+ 31078 - 11905: 0xB581,
+ 31079 - 11905: 0xECF6,
+ 31080 - 11905: 0xC6B1,
+ 31081 - 11905: 0xB582,
+ 31082 - 11905: 0xB583,
+ 31083 - 11905: 0xB584,
+ 31084 - 11905: 0xB585,
+ 31085 - 11905: 0xBCC0,
+ 31086 - 11905: 0xB586,
+ 31087 - 11905: 0xECF5,
+ 31088 - 11905: 0xB587,
+ 31089 - 11905: 0xB588,
+ 31090 - 11905: 0xB589,
+ 31091 - 11905: 0xB58A,
+ 31092 - 11905: 0xB58B,
+ 31093 - 11905: 0xB58C,
+ 31094 - 11905: 0xB58D,
+ 31095 - 11905: 0xB5BB,
+ 31096 - 11905: 0xBBF6,
+ 31097 - 11905: 0xB58E,
+ 31098 - 11905: 0xECF7,
+ 31099 - 11905: 0xB58F,
+ 31100 - 11905: 0xB590,
+ 31101 - 11905: 0xB591,
+ 31102 - 11905: 0xB592,
+ 31103 - 11905: 0xB593,
+ 31104 - 11905: 0xD9F7,
+ 31105 - 11905: 0xBDFB,
+ 31106 - 11905: 0xB594,
+ 31107 - 11905: 0xB595,
+ 31108 - 11905: 0xC2BB,
+ 31109 - 11905: 0xECF8,
+ 31110 - 11905: 0xB596,
+ 31111 - 11905: 0xB597,
+ 31112 - 11905: 0xB598,
+ 31113 - 11905: 0xB599,
+ 31114 - 11905: 0xECF9,
+ 31115 - 11905: 0xB59A,
+ 31116 - 11905: 0xB59B,
+ 31117 - 11905: 0xB59C,
+ 31118 - 11905: 0xB59D,
+ 31119 - 11905: 0xB8A3,
+ 31120 - 11905: 0xB59E,
+ 31121 - 11905: 0xB59F,
+ 31122 - 11905: 0xB5A0,
+ 31123 - 11905: 0xB640,
+ 31124 - 11905: 0xB641,
+ 31125 - 11905: 0xB642,
+ 31126 - 11905: 0xB643,
+ 31127 - 11905: 0xB644,
+ 31128 - 11905: 0xB645,
+ 31129 - 11905: 0xB646,
+ 31130 - 11905: 0xECFA,
+ 31131 - 11905: 0xB647,
+ 31132 - 11905: 0xB648,
+ 31133 - 11905: 0xB649,
+ 31134 - 11905: 0xB64A,
+ 31135 - 11905: 0xB64B,
+ 31136 - 11905: 0xB64C,
+ 31137 - 11905: 0xB64D,
+ 31138 - 11905: 0xB64E,
+ 31139 - 11905: 0xB64F,
+ 31140 - 11905: 0xB650,
+ 31141 - 11905: 0xB651,
+ 31142 - 11905: 0xB652,
+ 31143 - 11905: 0xECFB,
+ 31144 - 11905: 0xB653,
+ 31145 - 11905: 0xB654,
+ 31146 - 11905: 0xB655,
+ 31147 - 11905: 0xB656,
+ 31148 - 11905: 0xB657,
+ 31149 - 11905: 0xB658,
+ 31150 - 11905: 0xB659,
+ 31151 - 11905: 0xB65A,
+ 31152 - 11905: 0xB65B,
+ 31153 - 11905: 0xB65C,
+ 31154 - 11905: 0xB65D,
+ 31155 - 11905: 0xECFC,
+ 31156 - 11905: 0xB65E,
+ 31157 - 11905: 0xB65F,
+ 31158 - 11905: 0xB660,
+ 31159 - 11905: 0xB661,
+ 31160 - 11905: 0xB662,
+ 31161 - 11905: 0xD3ED,
+ 31162 - 11905: 0xD8AE,
+ 31163 - 11905: 0xC0EB,
+ 31164 - 11905: 0xB663,
+ 31165 - 11905: 0xC7DD,
+ 31166 - 11905: 0xBACC,
+ 31167 - 11905: 0xB664,
+ 31168 - 11905: 0xD0E3,
+ 31169 - 11905: 0xCBBD,
+ 31170 - 11905: 0xB665,
+ 31171 - 11905: 0xCDBA,
+ 31172 - 11905: 0xB666,
+ 31173 - 11905: 0xB667,
+ 31174 - 11905: 0xB8D1,
+ 31175 - 11905: 0xB668,
+ 31176 - 11905: 0xB669,
+ 31177 - 11905: 0xB1FC,
+ 31178 - 11905: 0xB66A,
+ 31179 - 11905: 0xC7EF,
+ 31180 - 11905: 0xB66B,
+ 31181 - 11905: 0xD6D6,
+ 31182 - 11905: 0xB66C,
+ 31183 - 11905: 0xB66D,
+ 31184 - 11905: 0xB66E,
+ 31185 - 11905: 0xBFC6,
+ 31186 - 11905: 0xC3EB,
+ 31187 - 11905: 0xB66F,
+ 31188 - 11905: 0xB670,
+ 31189 - 11905: 0xEFF5,
+ 31190 - 11905: 0xB671,
+ 31191 - 11905: 0xB672,
+ 31192 - 11905: 0xC3D8,
+ 31193 - 11905: 0xB673,
+ 31194 - 11905: 0xB674,
+ 31195 - 11905: 0xB675,
+ 31196 - 11905: 0xB676,
+ 31197 - 11905: 0xB677,
+ 31198 - 11905: 0xB678,
+ 31199 - 11905: 0xD7E2,
+ 31200 - 11905: 0xB679,
+ 31201 - 11905: 0xB67A,
+ 31202 - 11905: 0xB67B,
+ 31203 - 11905: 0xEFF7,
+ 31204 - 11905: 0xB3D3,
+ 31205 - 11905: 0xB67C,
+ 31206 - 11905: 0xC7D8,
+ 31207 - 11905: 0xD1ED,
+ 31208 - 11905: 0xB67D,
+ 31209 - 11905: 0xD6C8,
+ 31210 - 11905: 0xB67E,
+ 31211 - 11905: 0xEFF8,
+ 31212 - 11905: 0xB680,
+ 31213 - 11905: 0xEFF6,
+ 31214 - 11905: 0xB681,
+ 31215 - 11905: 0xBBFD,
+ 31216 - 11905: 0xB3C6,
+ 31217 - 11905: 0xB682,
+ 31218 - 11905: 0xB683,
+ 31219 - 11905: 0xB684,
+ 31220 - 11905: 0xB685,
+ 31221 - 11905: 0xB686,
+ 31222 - 11905: 0xB687,
+ 31223 - 11905: 0xB688,
+ 31224 - 11905: 0xBDD5,
+ 31225 - 11905: 0xB689,
+ 31226 - 11905: 0xB68A,
+ 31227 - 11905: 0xD2C6,
+ 31228 - 11905: 0xB68B,
+ 31229 - 11905: 0xBBE0,
+ 31230 - 11905: 0xB68C,
+ 31231 - 11905: 0xB68D,
+ 31232 - 11905: 0xCFA1,
+ 31233 - 11905: 0xB68E,
+ 31234 - 11905: 0xEFFC,
+ 31235 - 11905: 0xEFFB,
+ 31236 - 11905: 0xB68F,
+ 31237 - 11905: 0xB690,
+ 31238 - 11905: 0xEFF9,
+ 31239 - 11905: 0xB691,
+ 31240 - 11905: 0xB692,
+ 31241 - 11905: 0xB693,
+ 31242 - 11905: 0xB694,
+ 31243 - 11905: 0xB3CC,
+ 31244 - 11905: 0xB695,
+ 31245 - 11905: 0xC9D4,
+ 31246 - 11905: 0xCBB0,
+ 31247 - 11905: 0xB696,
+ 31248 - 11905: 0xB697,
+ 31249 - 11905: 0xB698,
+ 31250 - 11905: 0xB699,
+ 31251 - 11905: 0xB69A,
+ 31252 - 11905: 0xEFFE,
+ 31253 - 11905: 0xB69B,
+ 31254 - 11905: 0xB69C,
+ 31255 - 11905: 0xB0DE,
+ 31256 - 11905: 0xB69D,
+ 31257 - 11905: 0xB69E,
+ 31258 - 11905: 0xD6C9,
+ 31259 - 11905: 0xB69F,
+ 31260 - 11905: 0xB6A0,
+ 31261 - 11905: 0xB740,
+ 31262 - 11905: 0xEFFD,
+ 31263 - 11905: 0xB741,
+ 31264 - 11905: 0xB3ED,
+ 31265 - 11905: 0xB742,
+ 31266 - 11905: 0xB743,
+ 31267 - 11905: 0xF6D5,
+ 31268 - 11905: 0xB744,
+ 31269 - 11905: 0xB745,
+ 31270 - 11905: 0xB746,
+ 31271 - 11905: 0xB747,
+ 31272 - 11905: 0xB748,
+ 31273 - 11905: 0xB749,
+ 31274 - 11905: 0xB74A,
+ 31275 - 11905: 0xB74B,
+ 31276 - 11905: 0xB74C,
+ 31277 - 11905: 0xB74D,
+ 31278 - 11905: 0xB74E,
+ 31279 - 11905: 0xB74F,
+ 31280 - 11905: 0xB750,
+ 31281 - 11905: 0xB751,
+ 31282 - 11905: 0xB752,
+ 31283 - 11905: 0xCEC8,
+ 31284 - 11905: 0xB753,
+ 31285 - 11905: 0xB754,
+ 31286 - 11905: 0xB755,
+ 31287 - 11905: 0xF0A2,
+ 31288 - 11905: 0xB756,
+ 31289 - 11905: 0xF0A1,
+ 31290 - 11905: 0xB757,
+ 31291 - 11905: 0xB5BE,
+ 31292 - 11905: 0xBCDA,
+ 31293 - 11905: 0xBBFC,
+ 31294 - 11905: 0xB758,
+ 31295 - 11905: 0xB8E5,
+ 31296 - 11905: 0xB759,
+ 31297 - 11905: 0xB75A,
+ 31298 - 11905: 0xB75B,
+ 31299 - 11905: 0xB75C,
+ 31300 - 11905: 0xB75D,
+ 31301 - 11905: 0xB75E,
+ 31302 - 11905: 0xC4C2,
+ 31303 - 11905: 0xB75F,
+ 31304 - 11905: 0xB760,
+ 31305 - 11905: 0xB761,
+ 31306 - 11905: 0xB762,
+ 31307 - 11905: 0xB763,
+ 31308 - 11905: 0xB764,
+ 31309 - 11905: 0xB765,
+ 31310 - 11905: 0xB766,
+ 31311 - 11905: 0xB767,
+ 31312 - 11905: 0xB768,
+ 31313 - 11905: 0xF0A3,
+ 31314 - 11905: 0xB769,
+ 31315 - 11905: 0xB76A,
+ 31316 - 11905: 0xB76B,
+ 31317 - 11905: 0xB76C,
+ 31318 - 11905: 0xB76D,
+ 31319 - 11905: 0xCBEB,
+ 31320 - 11905: 0xB76E,
+ 31321 - 11905: 0xB76F,
+ 31322 - 11905: 0xB770,
+ 31323 - 11905: 0xB771,
+ 31324 - 11905: 0xB772,
+ 31325 - 11905: 0xB773,
+ 31326 - 11905: 0xB774,
+ 31327 - 11905: 0xB775,
+ 31328 - 11905: 0xB776,
+ 31329 - 11905: 0xB777,
+ 31330 - 11905: 0xB778,
+ 31331 - 11905: 0xB779,
+ 31332 - 11905: 0xB77A,
+ 31333 - 11905: 0xB77B,
+ 31334 - 11905: 0xB77C,
+ 31335 - 11905: 0xB77D,
+ 31336 - 11905: 0xB77E,
+ 31337 - 11905: 0xB780,
+ 31338 - 11905: 0xB781,
+ 31339 - 11905: 0xB782,
+ 31340 - 11905: 0xB783,
+ 31341 - 11905: 0xB784,
+ 31342 - 11905: 0xB785,
+ 31343 - 11905: 0xB786,
+ 31344 - 11905: 0xF0A6,
+ 31345 - 11905: 0xB787,
+ 31346 - 11905: 0xB788,
+ 31347 - 11905: 0xB789,
+ 31348 - 11905: 0xD1A8,
+ 31349 - 11905: 0xB78A,
+ 31350 - 11905: 0xBEBF,
+ 31351 - 11905: 0xC7EE,
+ 31352 - 11905: 0xF1B6,
+ 31353 - 11905: 0xF1B7,
+ 31354 - 11905: 0xBFD5,
+ 31355 - 11905: 0xB78B,
+ 31356 - 11905: 0xB78C,
+ 31357 - 11905: 0xB78D,
+ 31358 - 11905: 0xB78E,
+ 31359 - 11905: 0xB4A9,
+ 31360 - 11905: 0xF1B8,
+ 31361 - 11905: 0xCDBB,
+ 31362 - 11905: 0xB78F,
+ 31363 - 11905: 0xC7D4,
+ 31364 - 11905: 0xD5AD,
+ 31365 - 11905: 0xB790,
+ 31366 - 11905: 0xF1B9,
+ 31367 - 11905: 0xB791,
+ 31368 - 11905: 0xF1BA,
+ 31369 - 11905: 0xB792,
+ 31370 - 11905: 0xB793,
+ 31371 - 11905: 0xB794,
+ 31372 - 11905: 0xB795,
+ 31373 - 11905: 0xC7CF,
+ 31374 - 11905: 0xB796,
+ 31375 - 11905: 0xB797,
+ 31376 - 11905: 0xB798,
+ 31377 - 11905: 0xD2A4,
+ 31378 - 11905: 0xD6CF,
+ 31379 - 11905: 0xB799,
+ 31380 - 11905: 0xB79A,
+ 31381 - 11905: 0xF1BB,
+ 31382 - 11905: 0xBDD1,
+ 31383 - 11905: 0xB4B0,
+ 31384 - 11905: 0xBEBD,
+ 31385 - 11905: 0xB79B,
+ 31386 - 11905: 0xB79C,
+ 31387 - 11905: 0xB79D,
+ 31388 - 11905: 0xB4DC,
+ 31389 - 11905: 0xCED1,
+ 31390 - 11905: 0xB79E,
+ 31391 - 11905: 0xBFDF,
+ 31392 - 11905: 0xF1BD,
+ 31393 - 11905: 0xB79F,
+ 31394 - 11905: 0xB7A0,
+ 31395 - 11905: 0xB840,
+ 31396 - 11905: 0xB841,
+ 31397 - 11905: 0xBFFA,
+ 31398 - 11905: 0xF1BC,
+ 31399 - 11905: 0xB842,
+ 31400 - 11905: 0xF1BF,
+ 31401 - 11905: 0xB843,
+ 31402 - 11905: 0xB844,
+ 31403 - 11905: 0xB845,
+ 31404 - 11905: 0xF1BE,
+ 31405 - 11905: 0xF1C0,
+ 31406 - 11905: 0xB846,
+ 31407 - 11905: 0xB847,
+ 31408 - 11905: 0xB848,
+ 31409 - 11905: 0xB849,
+ 31410 - 11905: 0xB84A,
+ 31411 - 11905: 0xF1C1,
+ 31412 - 11905: 0xB84B,
+ 31413 - 11905: 0xB84C,
+ 31414 - 11905: 0xB84D,
+ 31415 - 11905: 0xB84E,
+ 31416 - 11905: 0xB84F,
+ 31417 - 11905: 0xB850,
+ 31418 - 11905: 0xB851,
+ 31419 - 11905: 0xB852,
+ 31420 - 11905: 0xB853,
+ 31421 - 11905: 0xB854,
+ 31422 - 11905: 0xB855,
+ 31423 - 11905: 0xC1FE,
+ 31424 - 11905: 0xB856,
+ 31425 - 11905: 0xB857,
+ 31426 - 11905: 0xB858,
+ 31427 - 11905: 0xB859,
+ 31428 - 11905: 0xB85A,
+ 31429 - 11905: 0xB85B,
+ 31430 - 11905: 0xB85C,
+ 31431 - 11905: 0xB85D,
+ 31432 - 11905: 0xB85E,
+ 31433 - 11905: 0xB85F,
+ 31434 - 11905: 0xB860,
+ 31435 - 11905: 0xC1A2,
+ 31436 - 11905: 0xB861,
+ 31437 - 11905: 0xB862,
+ 31438 - 11905: 0xB863,
+ 31439 - 11905: 0xB864,
+ 31440 - 11905: 0xB865,
+ 31441 - 11905: 0xB866,
+ 31442 - 11905: 0xB867,
+ 31443 - 11905: 0xB868,
+ 31444 - 11905: 0xB869,
+ 31445 - 11905: 0xB86A,
+ 31446 - 11905: 0xCAFA,
+ 31447 - 11905: 0xB86B,
+ 31448 - 11905: 0xB86C,
+ 31449 - 11905: 0xD5BE,
+ 31450 - 11905: 0xB86D,
+ 31451 - 11905: 0xB86E,
+ 31452 - 11905: 0xB86F,
+ 31453 - 11905: 0xB870,
+ 31454 - 11905: 0xBEBA,
+ 31455 - 11905: 0xBEB9,
+ 31456 - 11905: 0xD5C2,
+ 31457 - 11905: 0xB871,
+ 31458 - 11905: 0xB872,
+ 31459 - 11905: 0xBFA2,
+ 31460 - 11905: 0xB873,
+ 31461 - 11905: 0xCDAF,
+ 31462 - 11905: 0xF1B5,
+ 31463 - 11905: 0xB874,
+ 31464 - 11905: 0xB875,
+ 31465 - 11905: 0xB876,
+ 31466 - 11905: 0xB877,
+ 31467 - 11905: 0xB878,
+ 31468 - 11905: 0xB879,
+ 31469 - 11905: 0xBDDF,
+ 31470 - 11905: 0xB87A,
+ 31471 - 11905: 0xB6CB,
+ 31472 - 11905: 0xB87B,
+ 31473 - 11905: 0xB87C,
+ 31474 - 11905: 0xB87D,
+ 31475 - 11905: 0xB87E,
+ 31476 - 11905: 0xB880,
+ 31477 - 11905: 0xB881,
+ 31478 - 11905: 0xB882,
+ 31479 - 11905: 0xB883,
+ 31480 - 11905: 0xB884,
+ 31481 - 11905: 0xD6F1,
+ 31482 - 11905: 0xF3C3,
+ 31483 - 11905: 0xB885,
+ 31484 - 11905: 0xB886,
+ 31485 - 11905: 0xF3C4,
+ 31486 - 11905: 0xB887,
+ 31487 - 11905: 0xB8CD,
+ 31488 - 11905: 0xB888,
+ 31489 - 11905: 0xB889,
+ 31490 - 11905: 0xB88A,
+ 31491 - 11905: 0xF3C6,
+ 31492 - 11905: 0xF3C7,
+ 31493 - 11905: 0xB88B,
+ 31494 - 11905: 0xB0CA,
+ 31495 - 11905: 0xB88C,
+ 31496 - 11905: 0xF3C5,
+ 31497 - 11905: 0xB88D,
+ 31498 - 11905: 0xF3C9,
+ 31499 - 11905: 0xCBF1,
+ 31500 - 11905: 0xB88E,
+ 31501 - 11905: 0xB88F,
+ 31502 - 11905: 0xB890,
+ 31503 - 11905: 0xF3CB,
+ 31504 - 11905: 0xB891,
+ 31505 - 11905: 0xD0A6,
+ 31506 - 11905: 0xB892,
+ 31507 - 11905: 0xB893,
+ 31508 - 11905: 0xB1CA,
+ 31509 - 11905: 0xF3C8,
+ 31510 - 11905: 0xB894,
+ 31511 - 11905: 0xB895,
+ 31512 - 11905: 0xB896,
+ 31513 - 11905: 0xF3CF,
+ 31514 - 11905: 0xB897,
+ 31515 - 11905: 0xB5D1,
+ 31516 - 11905: 0xB898,
+ 31517 - 11905: 0xB899,
+ 31518 - 11905: 0xF3D7,
+ 31519 - 11905: 0xB89A,
+ 31520 - 11905: 0xF3D2,
+ 31521 - 11905: 0xB89B,
+ 31522 - 11905: 0xB89C,
+ 31523 - 11905: 0xB89D,
+ 31524 - 11905: 0xF3D4,
+ 31525 - 11905: 0xF3D3,
+ 31526 - 11905: 0xB7FB,
+ 31527 - 11905: 0xB89E,
+ 31528 - 11905: 0xB1BF,
+ 31529 - 11905: 0xB89F,
+ 31530 - 11905: 0xF3CE,
+ 31531 - 11905: 0xF3CA,
+ 31532 - 11905: 0xB5DA,
+ 31533 - 11905: 0xB8A0,
+ 31534 - 11905: 0xF3D0,
+ 31535 - 11905: 0xB940,
+ 31536 - 11905: 0xB941,
+ 31537 - 11905: 0xF3D1,
+ 31538 - 11905: 0xB942,
+ 31539 - 11905: 0xF3D5,
+ 31540 - 11905: 0xB943,
+ 31541 - 11905: 0xB944,
+ 31542 - 11905: 0xB945,
+ 31543 - 11905: 0xB946,
+ 31544 - 11905: 0xF3CD,
+ 31545 - 11905: 0xB947,
+ 31546 - 11905: 0xBCE3,
+ 31547 - 11905: 0xB948,
+ 31548 - 11905: 0xC1FD,
+ 31549 - 11905: 0xB949,
+ 31550 - 11905: 0xF3D6,
+ 31551 - 11905: 0xB94A,
+ 31552 - 11905: 0xB94B,
+ 31553 - 11905: 0xB94C,
+ 31554 - 11905: 0xB94D,
+ 31555 - 11905: 0xB94E,
+ 31556 - 11905: 0xB94F,
+ 31557 - 11905: 0xF3DA,
+ 31558 - 11905: 0xB950,
+ 31559 - 11905: 0xF3CC,
+ 31560 - 11905: 0xB951,
+ 31561 - 11905: 0xB5C8,
+ 31562 - 11905: 0xB952,
+ 31563 - 11905: 0xBDEE,
+ 31564 - 11905: 0xF3DC,
+ 31565 - 11905: 0xB953,
+ 31566 - 11905: 0xB954,
+ 31567 - 11905: 0xB7A4,
+ 31568 - 11905: 0xBFF0,
+ 31569 - 11905: 0xD6FE,
+ 31570 - 11905: 0xCDB2,
+ 31571 - 11905: 0xB955,
+ 31572 - 11905: 0xB4F0,
+ 31573 - 11905: 0xB956,
+ 31574 - 11905: 0xB2DF,
+ 31575 - 11905: 0xB957,
+ 31576 - 11905: 0xF3D8,
+ 31577 - 11905: 0xB958,
+ 31578 - 11905: 0xF3D9,
+ 31579 - 11905: 0xC9B8,
+ 31580 - 11905: 0xB959,
+ 31581 - 11905: 0xF3DD,
+ 31582 - 11905: 0xB95A,
+ 31583 - 11905: 0xB95B,
+ 31584 - 11905: 0xF3DE,
+ 31585 - 11905: 0xB95C,
+ 31586 - 11905: 0xF3E1,
+ 31587 - 11905: 0xB95D,
+ 31588 - 11905: 0xB95E,
+ 31589 - 11905: 0xB95F,
+ 31590 - 11905: 0xB960,
+ 31591 - 11905: 0xB961,
+ 31592 - 11905: 0xB962,
+ 31593 - 11905: 0xB963,
+ 31594 - 11905: 0xB964,
+ 31595 - 11905: 0xB965,
+ 31596 - 11905: 0xB966,
+ 31597 - 11905: 0xB967,
+ 31598 - 11905: 0xF3DF,
+ 31599 - 11905: 0xB968,
+ 31600 - 11905: 0xB969,
+ 31601 - 11905: 0xF3E3,
+ 31602 - 11905: 0xF3E2,
+ 31603 - 11905: 0xB96A,
+ 31604 - 11905: 0xB96B,
+ 31605 - 11905: 0xF3DB,
+ 31606 - 11905: 0xB96C,
+ 31607 - 11905: 0xBFEA,
+ 31608 - 11905: 0xB96D,
+ 31609 - 11905: 0xB3EF,
+ 31610 - 11905: 0xB96E,
+ 31611 - 11905: 0xF3E0,
+ 31612 - 11905: 0xB96F,
+ 31613 - 11905: 0xB970,
+ 31614 - 11905: 0xC7A9,
+ 31615 - 11905: 0xB971,
+ 31616 - 11905: 0xBCF2,
+ 31617 - 11905: 0xB972,
+ 31618 - 11905: 0xB973,
+ 31619 - 11905: 0xB974,
+ 31620 - 11905: 0xB975,
+ 31621 - 11905: 0xF3EB,
+ 31622 - 11905: 0xB976,
+ 31623 - 11905: 0xB977,
+ 31624 - 11905: 0xB978,
+ 31625 - 11905: 0xB979,
+ 31626 - 11905: 0xB97A,
+ 31627 - 11905: 0xB97B,
+ 31628 - 11905: 0xB97C,
+ 31629 - 11905: 0xB9BF,
+ 31630 - 11905: 0xB97D,
+ 31631 - 11905: 0xB97E,
+ 31632 - 11905: 0xF3E4,
+ 31633 - 11905: 0xB980,
+ 31634 - 11905: 0xB981,
+ 31635 - 11905: 0xB982,
+ 31636 - 11905: 0xB2AD,
+ 31637 - 11905: 0xBBFE,
+ 31638 - 11905: 0xB983,
+ 31639 - 11905: 0xCBE3,
+ 31640 - 11905: 0xB984,
+ 31641 - 11905: 0xB985,
+ 31642 - 11905: 0xB986,
+ 31643 - 11905: 0xB987,
+ 31644 - 11905: 0xF3ED,
+ 31645 - 11905: 0xF3E9,
+ 31646 - 11905: 0xB988,
+ 31647 - 11905: 0xB989,
+ 31648 - 11905: 0xB98A,
+ 31649 - 11905: 0xB9DC,
+ 31650 - 11905: 0xF3EE,
+ 31651 - 11905: 0xB98B,
+ 31652 - 11905: 0xB98C,
+ 31653 - 11905: 0xB98D,
+ 31654 - 11905: 0xF3E5,
+ 31655 - 11905: 0xF3E6,
+ 31656 - 11905: 0xF3EA,
+ 31657 - 11905: 0xC2E1,
+ 31658 - 11905: 0xF3EC,
+ 31659 - 11905: 0xF3EF,
+ 31660 - 11905: 0xF3E8,
+ 31661 - 11905: 0xBCFD,
+ 31662 - 11905: 0xB98E,
+ 31663 - 11905: 0xB98F,
+ 31664 - 11905: 0xB990,
+ 31665 - 11905: 0xCFE4,
+ 31666 - 11905: 0xB991,
+ 31667 - 11905: 0xB992,
+ 31668 - 11905: 0xF3F0,
+ 31669 - 11905: 0xB993,
+ 31670 - 11905: 0xB994,
+ 31671 - 11905: 0xB995,
+ 31672 - 11905: 0xF3E7,
+ 31673 - 11905: 0xB996,
+ 31674 - 11905: 0xB997,
+ 31675 - 11905: 0xB998,
+ 31676 - 11905: 0xB999,
+ 31677 - 11905: 0xB99A,
+ 31678 - 11905: 0xB99B,
+ 31679 - 11905: 0xB99C,
+ 31680 - 11905: 0xB99D,
+ 31681 - 11905: 0xF3F2,
+ 31682 - 11905: 0xB99E,
+ 31683 - 11905: 0xB99F,
+ 31684 - 11905: 0xB9A0,
+ 31685 - 11905: 0xBA40,
+ 31686 - 11905: 0xD7AD,
+ 31687 - 11905: 0xC6AA,
+ 31688 - 11905: 0xBA41,
+ 31689 - 11905: 0xBA42,
+ 31690 - 11905: 0xBA43,
+ 31691 - 11905: 0xBA44,
+ 31692 - 11905: 0xF3F3,
+ 31693 - 11905: 0xBA45,
+ 31694 - 11905: 0xBA46,
+ 31695 - 11905: 0xBA47,
+ 31696 - 11905: 0xBA48,
+ 31697 - 11905: 0xF3F1,
+ 31698 - 11905: 0xBA49,
+ 31699 - 11905: 0xC2A8,
+ 31700 - 11905: 0xBA4A,
+ 31701 - 11905: 0xBA4B,
+ 31702 - 11905: 0xBA4C,
+ 31703 - 11905: 0xBA4D,
+ 31704 - 11905: 0xBA4E,
+ 31705 - 11905: 0xB8DD,
+ 31706 - 11905: 0xF3F5,
+ 31707 - 11905: 0xBA4F,
+ 31708 - 11905: 0xBA50,
+ 31709 - 11905: 0xF3F4,
+ 31710 - 11905: 0xBA51,
+ 31711 - 11905: 0xBA52,
+ 31712 - 11905: 0xBA53,
+ 31713 - 11905: 0xB4DB,
+ 31714 - 11905: 0xBA54,
+ 31715 - 11905: 0xBA55,
+ 31716 - 11905: 0xBA56,
+ 31717 - 11905: 0xF3F6,
+ 31718 - 11905: 0xF3F7,
+ 31719 - 11905: 0xBA57,
+ 31720 - 11905: 0xBA58,
+ 31721 - 11905: 0xBA59,
+ 31722 - 11905: 0xF3F8,
+ 31723 - 11905: 0xBA5A,
+ 31724 - 11905: 0xBA5B,
+ 31725 - 11905: 0xBA5C,
+ 31726 - 11905: 0xC0BA,
+ 31727 - 11905: 0xBA5D,
+ 31728 - 11905: 0xBA5E,
+ 31729 - 11905: 0xC0E9,
+ 31730 - 11905: 0xBA5F,
+ 31731 - 11905: 0xBA60,
+ 31732 - 11905: 0xBA61,
+ 31733 - 11905: 0xBA62,
+ 31734 - 11905: 0xBA63,
+ 31735 - 11905: 0xC5F1,
+ 31736 - 11905: 0xBA64,
+ 31737 - 11905: 0xBA65,
+ 31738 - 11905: 0xBA66,
+ 31739 - 11905: 0xBA67,
+ 31740 - 11905: 0xF3FB,
+ 31741 - 11905: 0xBA68,
+ 31742 - 11905: 0xF3FA,
+ 31743 - 11905: 0xBA69,
+ 31744 - 11905: 0xBA6A,
+ 31745 - 11905: 0xBA6B,
+ 31746 - 11905: 0xBA6C,
+ 31747 - 11905: 0xBA6D,
+ 31748 - 11905: 0xBA6E,
+ 31749 - 11905: 0xBA6F,
+ 31750 - 11905: 0xBA70,
+ 31751 - 11905: 0xB4D8,
+ 31752 - 11905: 0xBA71,
+ 31753 - 11905: 0xBA72,
+ 31754 - 11905: 0xBA73,
+ 31755 - 11905: 0xF3FE,
+ 31756 - 11905: 0xF3F9,
+ 31757 - 11905: 0xBA74,
+ 31758 - 11905: 0xBA75,
+ 31759 - 11905: 0xF3FC,
+ 31760 - 11905: 0xBA76,
+ 31761 - 11905: 0xBA77,
+ 31762 - 11905: 0xBA78,
+ 31763 - 11905: 0xBA79,
+ 31764 - 11905: 0xBA7A,
+ 31765 - 11905: 0xBA7B,
+ 31766 - 11905: 0xF3FD,
+ 31767 - 11905: 0xBA7C,
+ 31768 - 11905: 0xBA7D,
+ 31769 - 11905: 0xBA7E,
+ 31770 - 11905: 0xBA80,
+ 31771 - 11905: 0xBA81,
+ 31772 - 11905: 0xBA82,
+ 31773 - 11905: 0xBA83,
+ 31774 - 11905: 0xBA84,
+ 31775 - 11905: 0xF4A1,
+ 31776 - 11905: 0xBA85,
+ 31777 - 11905: 0xBA86,
+ 31778 - 11905: 0xBA87,
+ 31779 - 11905: 0xBA88,
+ 31780 - 11905: 0xBA89,
+ 31781 - 11905: 0xBA8A,
+ 31782 - 11905: 0xF4A3,
+ 31783 - 11905: 0xBBC9,
+ 31784 - 11905: 0xBA8B,
+ 31785 - 11905: 0xBA8C,
+ 31786 - 11905: 0xF4A2,
+ 31787 - 11905: 0xBA8D,
+ 31788 - 11905: 0xBA8E,
+ 31789 - 11905: 0xBA8F,
+ 31790 - 11905: 0xBA90,
+ 31791 - 11905: 0xBA91,
+ 31792 - 11905: 0xBA92,
+ 31793 - 11905: 0xBA93,
+ 31794 - 11905: 0xBA94,
+ 31795 - 11905: 0xBA95,
+ 31796 - 11905: 0xBA96,
+ 31797 - 11905: 0xBA97,
+ 31798 - 11905: 0xBA98,
+ 31799 - 11905: 0xBA99,
+ 31800 - 11905: 0xF4A4,
+ 31801 - 11905: 0xBA9A,
+ 31802 - 11905: 0xBA9B,
+ 31803 - 11905: 0xBA9C,
+ 31804 - 11905: 0xBA9D,
+ 31805 - 11905: 0xBA9E,
+ 31806 - 11905: 0xBA9F,
+ 31807 - 11905: 0xB2BE,
+ 31808 - 11905: 0xF4A6,
+ 31809 - 11905: 0xF4A5,
+ 31810 - 11905: 0xBAA0,
+ 31811 - 11905: 0xBB40,
+ 31812 - 11905: 0xBB41,
+ 31813 - 11905: 0xBB42,
+ 31814 - 11905: 0xBB43,
+ 31815 - 11905: 0xBB44,
+ 31816 - 11905: 0xBB45,
+ 31817 - 11905: 0xBB46,
+ 31818 - 11905: 0xBB47,
+ 31819 - 11905: 0xBB48,
+ 31820 - 11905: 0xBB49,
+ 31821 - 11905: 0xBCAE,
+ 31822 - 11905: 0xBB4A,
+ 31823 - 11905: 0xBB4B,
+ 31824 - 11905: 0xBB4C,
+ 31825 - 11905: 0xBB4D,
+ 31826 - 11905: 0xBB4E,
+ 31827 - 11905: 0xBB4F,
+ 31828 - 11905: 0xBB50,
+ 31829 - 11905: 0xBB51,
+ 31830 - 11905: 0xBB52,
+ 31831 - 11905: 0xBB53,
+ 31832 - 11905: 0xBB54,
+ 31833 - 11905: 0xBB55,
+ 31834 - 11905: 0xBB56,
+ 31835 - 11905: 0xBB57,
+ 31836 - 11905: 0xBB58,
+ 31837 - 11905: 0xBB59,
+ 31838 - 11905: 0xBB5A,
+ 31839 - 11905: 0xBB5B,
+ 31840 - 11905: 0xBB5C,
+ 31841 - 11905: 0xBB5D,
+ 31842 - 11905: 0xBB5E,
+ 31843 - 11905: 0xBB5F,
+ 31844 - 11905: 0xBB60,
+ 31845 - 11905: 0xBB61,
+ 31846 - 11905: 0xBB62,
+ 31847 - 11905: 0xBB63,
+ 31848 - 11905: 0xBB64,
+ 31849 - 11905: 0xBB65,
+ 31850 - 11905: 0xBB66,
+ 31851 - 11905: 0xBB67,
+ 31852 - 11905: 0xBB68,
+ 31853 - 11905: 0xBB69,
+ 31854 - 11905: 0xBB6A,
+ 31855 - 11905: 0xBB6B,
+ 31856 - 11905: 0xBB6C,
+ 31857 - 11905: 0xBB6D,
+ 31858 - 11905: 0xBB6E,
+ 31859 - 11905: 0xC3D7,
+ 31860 - 11905: 0xD9E1,
+ 31861 - 11905: 0xBB6F,
+ 31862 - 11905: 0xBB70,
+ 31863 - 11905: 0xBB71,
+ 31864 - 11905: 0xBB72,
+ 31865 - 11905: 0xBB73,
+ 31866 - 11905: 0xBB74,
+ 31867 - 11905: 0xC0E0,
+ 31868 - 11905: 0xF4CC,
+ 31869 - 11905: 0xD7D1,
+ 31870 - 11905: 0xBB75,
+ 31871 - 11905: 0xBB76,
+ 31872 - 11905: 0xBB77,
+ 31873 - 11905: 0xBB78,
+ 31874 - 11905: 0xBB79,
+ 31875 - 11905: 0xBB7A,
+ 31876 - 11905: 0xBB7B,
+ 31877 - 11905: 0xBB7C,
+ 31878 - 11905: 0xBB7D,
+ 31879 - 11905: 0xBB7E,
+ 31880 - 11905: 0xBB80,
+ 31881 - 11905: 0xB7DB,
+ 31882 - 11905: 0xBB81,
+ 31883 - 11905: 0xBB82,
+ 31884 - 11905: 0xBB83,
+ 31885 - 11905: 0xBB84,
+ 31886 - 11905: 0xBB85,
+ 31887 - 11905: 0xBB86,
+ 31888 - 11905: 0xBB87,
+ 31889 - 11905: 0xF4CE,
+ 31890 - 11905: 0xC1A3,
+ 31891 - 11905: 0xBB88,
+ 31892 - 11905: 0xBB89,
+ 31893 - 11905: 0xC6C9,
+ 31894 - 11905: 0xBB8A,
+ 31895 - 11905: 0xB4D6,
+ 31896 - 11905: 0xD5B3,
+ 31897 - 11905: 0xBB8B,
+ 31898 - 11905: 0xBB8C,
+ 31899 - 11905: 0xBB8D,
+ 31900 - 11905: 0xF4D0,
+ 31901 - 11905: 0xF4CF,
+ 31902 - 11905: 0xF4D1,
+ 31903 - 11905: 0xCBDA,
+ 31904 - 11905: 0xBB8E,
+ 31905 - 11905: 0xBB8F,
+ 31906 - 11905: 0xF4D2,
+ 31907 - 11905: 0xBB90,
+ 31908 - 11905: 0xD4C1,
+ 31909 - 11905: 0xD6E0,
+ 31910 - 11905: 0xBB91,
+ 31911 - 11905: 0xBB92,
+ 31912 - 11905: 0xBB93,
+ 31913 - 11905: 0xBB94,
+ 31914 - 11905: 0xB7E0,
+ 31915 - 11905: 0xBB95,
+ 31916 - 11905: 0xBB96,
+ 31917 - 11905: 0xBB97,
+ 31918 - 11905: 0xC1B8,
+ 31919 - 11905: 0xBB98,
+ 31920 - 11905: 0xBB99,
+ 31921 - 11905: 0xC1BB,
+ 31922 - 11905: 0xF4D3,
+ 31923 - 11905: 0xBEAC,
+ 31924 - 11905: 0xBB9A,
+ 31925 - 11905: 0xBB9B,
+ 31926 - 11905: 0xBB9C,
+ 31927 - 11905: 0xBB9D,
+ 31928 - 11905: 0xBB9E,
+ 31929 - 11905: 0xB4E2,
+ 31930 - 11905: 0xBB9F,
+ 31931 - 11905: 0xBBA0,
+ 31932 - 11905: 0xF4D4,
+ 31933 - 11905: 0xF4D5,
+ 31934 - 11905: 0xBEAB,
+ 31935 - 11905: 0xBC40,
+ 31936 - 11905: 0xBC41,
+ 31937 - 11905: 0xF4D6,
+ 31938 - 11905: 0xBC42,
+ 31939 - 11905: 0xBC43,
+ 31940 - 11905: 0xBC44,
+ 31941 - 11905: 0xF4DB,
+ 31942 - 11905: 0xBC45,
+ 31943 - 11905: 0xF4D7,
+ 31944 - 11905: 0xF4DA,
+ 31945 - 11905: 0xBC46,
+ 31946 - 11905: 0xBAFD,
+ 31947 - 11905: 0xBC47,
+ 31948 - 11905: 0xF4D8,
+ 31949 - 11905: 0xF4D9,
+ 31950 - 11905: 0xBC48,
+ 31951 - 11905: 0xBC49,
+ 31952 - 11905: 0xBC4A,
+ 31953 - 11905: 0xBC4B,
+ 31954 - 11905: 0xBC4C,
+ 31955 - 11905: 0xBC4D,
+ 31956 - 11905: 0xBC4E,
+ 31957 - 11905: 0xB8E2,
+ 31958 - 11905: 0xCCC7,
+ 31959 - 11905: 0xF4DC,
+ 31960 - 11905: 0xBC4F,
+ 31961 - 11905: 0xB2DA,
+ 31962 - 11905: 0xBC50,
+ 31963 - 11905: 0xBC51,
+ 31964 - 11905: 0xC3D3,
+ 31965 - 11905: 0xBC52,
+ 31966 - 11905: 0xBC53,
+ 31967 - 11905: 0xD4E3,
+ 31968 - 11905: 0xBFB7,
+ 31969 - 11905: 0xBC54,
+ 31970 - 11905: 0xBC55,
+ 31971 - 11905: 0xBC56,
+ 31972 - 11905: 0xBC57,
+ 31973 - 11905: 0xBC58,
+ 31974 - 11905: 0xBC59,
+ 31975 - 11905: 0xBC5A,
+ 31976 - 11905: 0xF4DD,
+ 31977 - 11905: 0xBC5B,
+ 31978 - 11905: 0xBC5C,
+ 31979 - 11905: 0xBC5D,
+ 31980 - 11905: 0xBC5E,
+ 31981 - 11905: 0xBC5F,
+ 31982 - 11905: 0xBC60,
+ 31983 - 11905: 0xC5B4,
+ 31984 - 11905: 0xBC61,
+ 31985 - 11905: 0xBC62,
+ 31986 - 11905: 0xBC63,
+ 31987 - 11905: 0xBC64,
+ 31988 - 11905: 0xBC65,
+ 31989 - 11905: 0xBC66,
+ 31990 - 11905: 0xBC67,
+ 31991 - 11905: 0xBC68,
+ 31992 - 11905: 0xF4E9,
+ 31993 - 11905: 0xBC69,
+ 31994 - 11905: 0xBC6A,
+ 31995 - 11905: 0xCFB5,
+ 31996 - 11905: 0xBC6B,
+ 31997 - 11905: 0xBC6C,
+ 31998 - 11905: 0xBC6D,
+ 31999 - 11905: 0xBC6E,
+ 32000 - 11905: 0xBC6F,
+ 32001 - 11905: 0xBC70,
+ 32002 - 11905: 0xBC71,
+ 32003 - 11905: 0xBC72,
+ 32004 - 11905: 0xBC73,
+ 32005 - 11905: 0xBC74,
+ 32006 - 11905: 0xBC75,
+ 32007 - 11905: 0xBC76,
+ 32008 - 11905: 0xBC77,
+ 32009 - 11905: 0xBC78,
+ 32010 - 11905: 0xCEC9,
+ 32011 - 11905: 0xBC79,
+ 32012 - 11905: 0xBC7A,
+ 32013 - 11905: 0xBC7B,
+ 32014 - 11905: 0xBC7C,
+ 32015 - 11905: 0xBC7D,
+ 32016 - 11905: 0xBC7E,
+ 32017 - 11905: 0xBC80,
+ 32018 - 11905: 0xBC81,
+ 32019 - 11905: 0xBC82,
+ 32020 - 11905: 0xBC83,
+ 32021 - 11905: 0xBC84,
+ 32022 - 11905: 0xBC85,
+ 32023 - 11905: 0xBC86,
+ 32024 - 11905: 0xBC87,
+ 32025 - 11905: 0xBC88,
+ 32026 - 11905: 0xBC89,
+ 32027 - 11905: 0xBC8A,
+ 32028 - 11905: 0xBC8B,
+ 32029 - 11905: 0xBC8C,
+ 32030 - 11905: 0xBC8D,
+ 32031 - 11905: 0xBC8E,
+ 32032 - 11905: 0xCBD8,
+ 32033 - 11905: 0xBC8F,
+ 32034 - 11905: 0xCBF7,
+ 32035 - 11905: 0xBC90,
+ 32036 - 11905: 0xBC91,
+ 32037 - 11905: 0xBC92,
+ 32038 - 11905: 0xBC93,
+ 32039 - 11905: 0xBDF4,
+ 32040 - 11905: 0xBC94,
+ 32041 - 11905: 0xBC95,
+ 32042 - 11905: 0xBC96,
+ 32043 - 11905: 0xD7CF,
+ 32044 - 11905: 0xBC97,
+ 32045 - 11905: 0xBC98,
+ 32046 - 11905: 0xBC99,
+ 32047 - 11905: 0xC0DB,
+ 32048 - 11905: 0xBC9A,
+ 32049 - 11905: 0xBC9B,
+ 32050 - 11905: 0xBC9C,
+ 32051 - 11905: 0xBC9D,
+ 32052 - 11905: 0xBC9E,
+ 32053 - 11905: 0xBC9F,
+ 32054 - 11905: 0xBCA0,
+ 32055 - 11905: 0xBD40,
+ 32056 - 11905: 0xBD41,
+ 32057 - 11905: 0xBD42,
+ 32058 - 11905: 0xBD43,
+ 32059 - 11905: 0xBD44,
+ 32060 - 11905: 0xBD45,
+ 32061 - 11905: 0xBD46,
+ 32062 - 11905: 0xBD47,
+ 32063 - 11905: 0xBD48,
+ 32064 - 11905: 0xBD49,
+ 32065 - 11905: 0xBD4A,
+ 32066 - 11905: 0xBD4B,
+ 32067 - 11905: 0xBD4C,
+ 32068 - 11905: 0xBD4D,
+ 32069 - 11905: 0xBD4E,
+ 32070 - 11905: 0xBD4F,
+ 32071 - 11905: 0xBD50,
+ 32072 - 11905: 0xBD51,
+ 32073 - 11905: 0xBD52,
+ 32074 - 11905: 0xBD53,
+ 32075 - 11905: 0xBD54,
+ 32076 - 11905: 0xBD55,
+ 32077 - 11905: 0xBD56,
+ 32078 - 11905: 0xBD57,
+ 32079 - 11905: 0xBD58,
+ 32080 - 11905: 0xBD59,
+ 32081 - 11905: 0xBD5A,
+ 32082 - 11905: 0xBD5B,
+ 32083 - 11905: 0xBD5C,
+ 32084 - 11905: 0xBD5D,
+ 32085 - 11905: 0xBD5E,
+ 32086 - 11905: 0xBD5F,
+ 32087 - 11905: 0xBD60,
+ 32088 - 11905: 0xBD61,
+ 32089 - 11905: 0xBD62,
+ 32090 - 11905: 0xBD63,
+ 32091 - 11905: 0xBD64,
+ 32092 - 11905: 0xBD65,
+ 32093 - 11905: 0xBD66,
+ 32094 - 11905: 0xBD67,
+ 32095 - 11905: 0xBD68,
+ 32096 - 11905: 0xBD69,
+ 32097 - 11905: 0xBD6A,
+ 32098 - 11905: 0xBD6B,
+ 32099 - 11905: 0xBD6C,
+ 32100 - 11905: 0xBD6D,
+ 32101 - 11905: 0xBD6E,
+ 32102 - 11905: 0xBD6F,
+ 32103 - 11905: 0xBD70,
+ 32104 - 11905: 0xBD71,
+ 32105 - 11905: 0xBD72,
+ 32106 - 11905: 0xBD73,
+ 32107 - 11905: 0xBD74,
+ 32108 - 11905: 0xBD75,
+ 32109 - 11905: 0xBD76,
+ 32110 - 11905: 0xD0F5,
+ 32111 - 11905: 0xBD77,
+ 32112 - 11905: 0xBD78,
+ 32113 - 11905: 0xBD79,
+ 32114 - 11905: 0xBD7A,
+ 32115 - 11905: 0xBD7B,
+ 32116 - 11905: 0xBD7C,
+ 32117 - 11905: 0xBD7D,
+ 32118 - 11905: 0xBD7E,
+ 32119 - 11905: 0xF4EA,
+ 32120 - 11905: 0xBD80,
+ 32121 - 11905: 0xBD81,
+ 32122 - 11905: 0xBD82,
+ 32123 - 11905: 0xBD83,
+ 32124 - 11905: 0xBD84,
+ 32125 - 11905: 0xBD85,
+ 32126 - 11905: 0xBD86,
+ 32127 - 11905: 0xBD87,
+ 32128 - 11905: 0xBD88,
+ 32129 - 11905: 0xBD89,
+ 32130 - 11905: 0xBD8A,
+ 32131 - 11905: 0xBD8B,
+ 32132 - 11905: 0xBD8C,
+ 32133 - 11905: 0xBD8D,
+ 32134 - 11905: 0xBD8E,
+ 32135 - 11905: 0xBD8F,
+ 32136 - 11905: 0xBD90,
+ 32137 - 11905: 0xBD91,
+ 32138 - 11905: 0xBD92,
+ 32139 - 11905: 0xBD93,
+ 32140 - 11905: 0xBD94,
+ 32141 - 11905: 0xBD95,
+ 32142 - 11905: 0xBD96,
+ 32143 - 11905: 0xBD97,
+ 32144 - 11905: 0xBD98,
+ 32145 - 11905: 0xBD99,
+ 32146 - 11905: 0xBD9A,
+ 32147 - 11905: 0xBD9B,
+ 32148 - 11905: 0xBD9C,
+ 32149 - 11905: 0xBD9D,
+ 32150 - 11905: 0xBD9E,
+ 32151 - 11905: 0xBD9F,
+ 32152 - 11905: 0xBDA0,
+ 32153 - 11905: 0xBE40,
+ 32154 - 11905: 0xBE41,
+ 32155 - 11905: 0xBE42,
+ 32156 - 11905: 0xBE43,
+ 32157 - 11905: 0xBE44,
+ 32158 - 11905: 0xBE45,
+ 32159 - 11905: 0xBE46,
+ 32160 - 11905: 0xBE47,
+ 32161 - 11905: 0xBE48,
+ 32162 - 11905: 0xBE49,
+ 32163 - 11905: 0xBE4A,
+ 32164 - 11905: 0xBE4B,
+ 32165 - 11905: 0xBE4C,
+ 32166 - 11905: 0xF4EB,
+ 32167 - 11905: 0xBE4D,
+ 32168 - 11905: 0xBE4E,
+ 32169 - 11905: 0xBE4F,
+ 32170 - 11905: 0xBE50,
+ 32171 - 11905: 0xBE51,
+ 32172 - 11905: 0xBE52,
+ 32173 - 11905: 0xBE53,
+ 32174 - 11905: 0xF4EC,
+ 32175 - 11905: 0xBE54,
+ 32176 - 11905: 0xBE55,
+ 32177 - 11905: 0xBE56,
+ 32178 - 11905: 0xBE57,
+ 32179 - 11905: 0xBE58,
+ 32180 - 11905: 0xBE59,
+ 32181 - 11905: 0xBE5A,
+ 32182 - 11905: 0xBE5B,
+ 32183 - 11905: 0xBE5C,
+ 32184 - 11905: 0xBE5D,
+ 32185 - 11905: 0xBE5E,
+ 32186 - 11905: 0xBE5F,
+ 32187 - 11905: 0xBE60,
+ 32188 - 11905: 0xBE61,
+ 32189 - 11905: 0xBE62,
+ 32190 - 11905: 0xBE63,
+ 32191 - 11905: 0xBE64,
+ 32192 - 11905: 0xBE65,
+ 32193 - 11905: 0xBE66,
+ 32194 - 11905: 0xBE67,
+ 32195 - 11905: 0xBE68,
+ 32196 - 11905: 0xBE69,
+ 32197 - 11905: 0xBE6A,
+ 32198 - 11905: 0xBE6B,
+ 32199 - 11905: 0xBE6C,
+ 32200 - 11905: 0xBE6D,
+ 32201 - 11905: 0xBE6E,
+ 32202 - 11905: 0xBE6F,
+ 32203 - 11905: 0xBE70,
+ 32204 - 11905: 0xBE71,
+ 32205 - 11905: 0xBE72,
+ 32206 - 11905: 0xBE73,
+ 32207 - 11905: 0xBE74,
+ 32208 - 11905: 0xBE75,
+ 32209 - 11905: 0xBE76,
+ 32210 - 11905: 0xBE77,
+ 32211 - 11905: 0xBE78,
+ 32212 - 11905: 0xBE79,
+ 32213 - 11905: 0xBE7A,
+ 32214 - 11905: 0xBE7B,
+ 32215 - 11905: 0xBE7C,
+ 32216 - 11905: 0xBE7D,
+ 32217 - 11905: 0xBE7E,
+ 32218 - 11905: 0xBE80,
+ 32219 - 11905: 0xBE81,
+ 32220 - 11905: 0xBE82,
+ 32221 - 11905: 0xBE83,
+ 32222 - 11905: 0xBE84,
+ 32223 - 11905: 0xBE85,
+ 32224 - 11905: 0xBE86,
+ 32225 - 11905: 0xBE87,
+ 32226 - 11905: 0xBE88,
+ 32227 - 11905: 0xBE89,
+ 32228 - 11905: 0xBE8A,
+ 32229 - 11905: 0xBE8B,
+ 32230 - 11905: 0xBE8C,
+ 32231 - 11905: 0xBE8D,
+ 32232 - 11905: 0xBE8E,
+ 32233 - 11905: 0xBE8F,
+ 32234 - 11905: 0xBE90,
+ 32235 - 11905: 0xBE91,
+ 32236 - 11905: 0xBE92,
+ 32237 - 11905: 0xBE93,
+ 32238 - 11905: 0xBE94,
+ 32239 - 11905: 0xBE95,
+ 32240 - 11905: 0xBE96,
+ 32241 - 11905: 0xBE97,
+ 32242 - 11905: 0xBE98,
+ 32243 - 11905: 0xBE99,
+ 32244 - 11905: 0xBE9A,
+ 32245 - 11905: 0xBE9B,
+ 32246 - 11905: 0xBE9C,
+ 32247 - 11905: 0xBE9D,
+ 32248 - 11905: 0xBE9E,
+ 32249 - 11905: 0xBE9F,
+ 32250 - 11905: 0xBEA0,
+ 32251 - 11905: 0xBF40,
+ 32252 - 11905: 0xBF41,
+ 32253 - 11905: 0xBF42,
+ 32254 - 11905: 0xBF43,
+ 32255 - 11905: 0xBF44,
+ 32256 - 11905: 0xBF45,
+ 32257 - 11905: 0xBF46,
+ 32258 - 11905: 0xBF47,
+ 32259 - 11905: 0xBF48,
+ 32260 - 11905: 0xBF49,
+ 32261 - 11905: 0xBF4A,
+ 32262 - 11905: 0xBF4B,
+ 32263 - 11905: 0xBF4C,
+ 32264 - 11905: 0xBF4D,
+ 32265 - 11905: 0xBF4E,
+ 32266 - 11905: 0xBF4F,
+ 32267 - 11905: 0xBF50,
+ 32268 - 11905: 0xBF51,
+ 32269 - 11905: 0xBF52,
+ 32270 - 11905: 0xBF53,
+ 32271 - 11905: 0xBF54,
+ 32272 - 11905: 0xBF55,
+ 32273 - 11905: 0xBF56,
+ 32274 - 11905: 0xBF57,
+ 32275 - 11905: 0xBF58,
+ 32276 - 11905: 0xBF59,
+ 32277 - 11905: 0xBF5A,
+ 32278 - 11905: 0xBF5B,
+ 32279 - 11905: 0xBF5C,
+ 32280 - 11905: 0xBF5D,
+ 32281 - 11905: 0xBF5E,
+ 32282 - 11905: 0xBF5F,
+ 32283 - 11905: 0xBF60,
+ 32284 - 11905: 0xBF61,
+ 32285 - 11905: 0xBF62,
+ 32286 - 11905: 0xBF63,
+ 32287 - 11905: 0xBF64,
+ 32288 - 11905: 0xBF65,
+ 32289 - 11905: 0xBF66,
+ 32290 - 11905: 0xBF67,
+ 32291 - 11905: 0xBF68,
+ 32292 - 11905: 0xBF69,
+ 32293 - 11905: 0xBF6A,
+ 32294 - 11905: 0xBF6B,
+ 32295 - 11905: 0xBF6C,
+ 32296 - 11905: 0xBF6D,
+ 32297 - 11905: 0xBF6E,
+ 32298 - 11905: 0xBF6F,
+ 32299 - 11905: 0xBF70,
+ 32300 - 11905: 0xBF71,
+ 32301 - 11905: 0xBF72,
+ 32302 - 11905: 0xBF73,
+ 32303 - 11905: 0xBF74,
+ 32304 - 11905: 0xBF75,
+ 32305 - 11905: 0xBF76,
+ 32306 - 11905: 0xBF77,
+ 32307 - 11905: 0xBF78,
+ 32308 - 11905: 0xBF79,
+ 32309 - 11905: 0xBF7A,
+ 32310 - 11905: 0xBF7B,
+ 32311 - 11905: 0xBF7C,
+ 32312 - 11905: 0xBF7D,
+ 32313 - 11905: 0xBF7E,
+ 32314 - 11905: 0xBF80,
+ 32315 - 11905: 0xF7E3,
+ 32316 - 11905: 0xBF81,
+ 32317 - 11905: 0xBF82,
+ 32318 - 11905: 0xBF83,
+ 32319 - 11905: 0xBF84,
+ 32320 - 11905: 0xBF85,
+ 32321 - 11905: 0xB7B1,
+ 32322 - 11905: 0xBF86,
+ 32323 - 11905: 0xBF87,
+ 32324 - 11905: 0xBF88,
+ 32325 - 11905: 0xBF89,
+ 32326 - 11905: 0xBF8A,
+ 32327 - 11905: 0xF4ED,
+ 32328 - 11905: 0xBF8B,
+ 32329 - 11905: 0xBF8C,
+ 32330 - 11905: 0xBF8D,
+ 32331 - 11905: 0xBF8E,
+ 32332 - 11905: 0xBF8F,
+ 32333 - 11905: 0xBF90,
+ 32334 - 11905: 0xBF91,
+ 32335 - 11905: 0xBF92,
+ 32336 - 11905: 0xBF93,
+ 32337 - 11905: 0xBF94,
+ 32338 - 11905: 0xBF95,
+ 32339 - 11905: 0xBF96,
+ 32340 - 11905: 0xBF97,
+ 32341 - 11905: 0xBF98,
+ 32342 - 11905: 0xBF99,
+ 32343 - 11905: 0xBF9A,
+ 32344 - 11905: 0xBF9B,
+ 32345 - 11905: 0xBF9C,
+ 32346 - 11905: 0xBF9D,
+ 32347 - 11905: 0xBF9E,
+ 32348 - 11905: 0xBF9F,
+ 32349 - 11905: 0xBFA0,
+ 32350 - 11905: 0xC040,
+ 32351 - 11905: 0xC041,
+ 32352 - 11905: 0xC042,
+ 32353 - 11905: 0xC043,
+ 32354 - 11905: 0xC044,
+ 32355 - 11905: 0xC045,
+ 32356 - 11905: 0xC046,
+ 32357 - 11905: 0xC047,
+ 32358 - 11905: 0xC048,
+ 32359 - 11905: 0xC049,
+ 32360 - 11905: 0xC04A,
+ 32361 - 11905: 0xC04B,
+ 32362 - 11905: 0xC04C,
+ 32363 - 11905: 0xC04D,
+ 32364 - 11905: 0xC04E,
+ 32365 - 11905: 0xC04F,
+ 32366 - 11905: 0xC050,
+ 32367 - 11905: 0xC051,
+ 32368 - 11905: 0xC052,
+ 32369 - 11905: 0xC053,
+ 32370 - 11905: 0xC054,
+ 32371 - 11905: 0xC055,
+ 32372 - 11905: 0xC056,
+ 32373 - 11905: 0xC057,
+ 32374 - 11905: 0xC058,
+ 32375 - 11905: 0xC059,
+ 32376 - 11905: 0xC05A,
+ 32377 - 11905: 0xC05B,
+ 32378 - 11905: 0xC05C,
+ 32379 - 11905: 0xC05D,
+ 32380 - 11905: 0xC05E,
+ 32381 - 11905: 0xC05F,
+ 32382 - 11905: 0xC060,
+ 32383 - 11905: 0xC061,
+ 32384 - 11905: 0xC062,
+ 32385 - 11905: 0xC063,
+ 32386 - 11905: 0xD7EB,
+ 32387 - 11905: 0xC064,
+ 32388 - 11905: 0xC065,
+ 32389 - 11905: 0xC066,
+ 32390 - 11905: 0xC067,
+ 32391 - 11905: 0xC068,
+ 32392 - 11905: 0xC069,
+ 32393 - 11905: 0xC06A,
+ 32394 - 11905: 0xC06B,
+ 32395 - 11905: 0xC06C,
+ 32396 - 11905: 0xC06D,
+ 32397 - 11905: 0xC06E,
+ 32398 - 11905: 0xC06F,
+ 32399 - 11905: 0xC070,
+ 32400 - 11905: 0xC071,
+ 32401 - 11905: 0xC072,
+ 32402 - 11905: 0xC073,
+ 32403 - 11905: 0xC074,
+ 32404 - 11905: 0xC075,
+ 32405 - 11905: 0xC076,
+ 32406 - 11905: 0xC077,
+ 32407 - 11905: 0xC078,
+ 32408 - 11905: 0xC079,
+ 32409 - 11905: 0xC07A,
+ 32410 - 11905: 0xC07B,
+ 32411 - 11905: 0xF4EE,
+ 32412 - 11905: 0xC07C,
+ 32413 - 11905: 0xC07D,
+ 32414 - 11905: 0xC07E,
+ 32415 - 11905: 0xE6F9,
+ 32416 - 11905: 0xBEC0,
+ 32417 - 11905: 0xE6FA,
+ 32418 - 11905: 0xBAEC,
+ 32419 - 11905: 0xE6FB,
+ 32420 - 11905: 0xCFCB,
+ 32421 - 11905: 0xE6FC,
+ 32422 - 11905: 0xD4BC,
+ 32423 - 11905: 0xBCB6,
+ 32424 - 11905: 0xE6FD,
+ 32425 - 11905: 0xE6FE,
+ 32426 - 11905: 0xBCCD,
+ 32427 - 11905: 0xC8D2,
+ 32428 - 11905: 0xCEB3,
+ 32429 - 11905: 0xE7A1,
+ 32430 - 11905: 0xC080,
+ 32431 - 11905: 0xB4BF,
+ 32432 - 11905: 0xE7A2,
+ 32433 - 11905: 0xC9B4,
+ 32434 - 11905: 0xB8D9,
+ 32435 - 11905: 0xC4C9,
+ 32436 - 11905: 0xC081,
+ 32437 - 11905: 0xD7DD,
+ 32438 - 11905: 0xC2DA,
+ 32439 - 11905: 0xB7D7,
+ 32440 - 11905: 0xD6BD,
+ 32441 - 11905: 0xCEC6,
+ 32442 - 11905: 0xB7C4,
+ 32443 - 11905: 0xC082,
+ 32444 - 11905: 0xC083,
+ 32445 - 11905: 0xC5A6,
+ 32446 - 11905: 0xE7A3,
+ 32447 - 11905: 0xCFDF,
+ 32448 - 11905: 0xE7A4,
+ 32449 - 11905: 0xE7A5,
+ 32450 - 11905: 0xE7A6,
+ 32451 - 11905: 0xC1B7,
+ 32452 - 11905: 0xD7E9,
+ 32453 - 11905: 0xC9F0,
+ 32454 - 11905: 0xCFB8,
+ 32455 - 11905: 0xD6AF,
+ 32456 - 11905: 0xD6D5,
+ 32457 - 11905: 0xE7A7,
+ 32458 - 11905: 0xB0ED,
+ 32459 - 11905: 0xE7A8,
+ 32460 - 11905: 0xE7A9,
+ 32461 - 11905: 0xC9DC,
+ 32462 - 11905: 0xD2EF,
+ 32463 - 11905: 0xBEAD,
+ 32464 - 11905: 0xE7AA,
+ 32465 - 11905: 0xB0F3,
+ 32466 - 11905: 0xC8DE,
+ 32467 - 11905: 0xBDE1,
+ 32468 - 11905: 0xE7AB,
+ 32469 - 11905: 0xC8C6,
+ 32470 - 11905: 0xC084,
+ 32471 - 11905: 0xE7AC,
+ 32472 - 11905: 0xBBE6,
+ 32473 - 11905: 0xB8F8,
+ 32474 - 11905: 0xD1A4,
+ 32475 - 11905: 0xE7AD,
+ 32476 - 11905: 0xC2E7,
+ 32477 - 11905: 0xBEF8,
+ 32478 - 11905: 0xBDCA,
+ 32479 - 11905: 0xCDB3,
+ 32480 - 11905: 0xE7AE,
+ 32481 - 11905: 0xE7AF,
+ 32482 - 11905: 0xBEEE,
+ 32483 - 11905: 0xD0E5,
+ 32484 - 11905: 0xC085,
+ 32485 - 11905: 0xCBE7,
+ 32486 - 11905: 0xCCD0,
+ 32487 - 11905: 0xBCCC,
+ 32488 - 11905: 0xE7B0,
+ 32489 - 11905: 0xBCA8,
+ 32490 - 11905: 0xD0F7,
+ 32491 - 11905: 0xE7B1,
+ 32492 - 11905: 0xC086,
+ 32493 - 11905: 0xD0F8,
+ 32494 - 11905: 0xE7B2,
+ 32495 - 11905: 0xE7B3,
+ 32496 - 11905: 0xB4C2,
+ 32497 - 11905: 0xE7B4,
+ 32498 - 11905: 0xE7B5,
+ 32499 - 11905: 0xC9FE,
+ 32500 - 11905: 0xCEAC,
+ 32501 - 11905: 0xC3E0,
+ 32502 - 11905: 0xE7B7,
+ 32503 - 11905: 0xB1C1,
+ 32504 - 11905: 0xB3F1,
+ 32505 - 11905: 0xC087,
+ 32506 - 11905: 0xE7B8,
+ 32507 - 11905: 0xE7B9,
+ 32508 - 11905: 0xD7DB,
+ 32509 - 11905: 0xD5C0,
+ 32510 - 11905: 0xE7BA,
+ 32511 - 11905: 0xC2CC,
+ 32512 - 11905: 0xD7BA,
+ 32513 - 11905: 0xE7BB,
+ 32514 - 11905: 0xE7BC,
+ 32515 - 11905: 0xE7BD,
+ 32516 - 11905: 0xBCEA,
+ 32517 - 11905: 0xC3E5,
+ 32518 - 11905: 0xC0C2,
+ 32519 - 11905: 0xE7BE,
+ 32520 - 11905: 0xE7BF,
+ 32521 - 11905: 0xBCA9,
+ 32522 - 11905: 0xC088,
+ 32523 - 11905: 0xE7C0,
+ 32524 - 11905: 0xE7C1,
+ 32525 - 11905: 0xE7B6,
+ 32526 - 11905: 0xB6D0,
+ 32527 - 11905: 0xE7C2,
+ 32528 - 11905: 0xC089,
+ 32529 - 11905: 0xE7C3,
+ 32530 - 11905: 0xE7C4,
+ 32531 - 11905: 0xBBBA,
+ 32532 - 11905: 0xB5DE,
+ 32533 - 11905: 0xC2C6,
+ 32534 - 11905: 0xB1E0,
+ 32535 - 11905: 0xE7C5,
+ 32536 - 11905: 0xD4B5,
+ 32537 - 11905: 0xE7C6,
+ 32538 - 11905: 0xB8BF,
+ 32539 - 11905: 0xE7C8,
+ 32540 - 11905: 0xE7C7,
+ 32541 - 11905: 0xB7EC,
+ 32542 - 11905: 0xC08A,
+ 32543 - 11905: 0xE7C9,
+ 32544 - 11905: 0xB2F8,
+ 32545 - 11905: 0xE7CA,
+ 32546 - 11905: 0xE7CB,
+ 32547 - 11905: 0xE7CC,
+ 32548 - 11905: 0xE7CD,
+ 32549 - 11905: 0xE7CE,
+ 32550 - 11905: 0xE7CF,
+ 32551 - 11905: 0xE7D0,
+ 32552 - 11905: 0xD3A7,
+ 32553 - 11905: 0xCBF5,
+ 32554 - 11905: 0xE7D1,
+ 32555 - 11905: 0xE7D2,
+ 32556 - 11905: 0xE7D3,
+ 32557 - 11905: 0xE7D4,
+ 32558 - 11905: 0xC9C9,
+ 32559 - 11905: 0xE7D5,
+ 32560 - 11905: 0xE7D6,
+ 32561 - 11905: 0xE7D7,
+ 32562 - 11905: 0xE7D8,
+ 32563 - 11905: 0xE7D9,
+ 32564 - 11905: 0xBDC9,
+ 32565 - 11905: 0xE7DA,
+ 32566 - 11905: 0xF3BE,
+ 32567 - 11905: 0xC08B,
+ 32568 - 11905: 0xB8D7,
+ 32569 - 11905: 0xC08C,
+ 32570 - 11905: 0xC8B1,
+ 32571 - 11905: 0xC08D,
+ 32572 - 11905: 0xC08E,
+ 32573 - 11905: 0xC08F,
+ 32574 - 11905: 0xC090,
+ 32575 - 11905: 0xC091,
+ 32576 - 11905: 0xC092,
+ 32577 - 11905: 0xC093,
+ 32578 - 11905: 0xF3BF,
+ 32579 - 11905: 0xC094,
+ 32580 - 11905: 0xF3C0,
+ 32581 - 11905: 0xF3C1,
+ 32582 - 11905: 0xC095,
+ 32583 - 11905: 0xC096,
+ 32584 - 11905: 0xC097,
+ 32585 - 11905: 0xC098,
+ 32586 - 11905: 0xC099,
+ 32587 - 11905: 0xC09A,
+ 32588 - 11905: 0xC09B,
+ 32589 - 11905: 0xC09C,
+ 32590 - 11905: 0xC09D,
+ 32591 - 11905: 0xC09E,
+ 32592 - 11905: 0xB9DE,
+ 32593 - 11905: 0xCDF8,
+ 32594 - 11905: 0xC09F,
+ 32595 - 11905: 0xC0A0,
+ 32596 - 11905: 0xD8E8,
+ 32597 - 11905: 0xBAB1,
+ 32598 - 11905: 0xC140,
+ 32599 - 11905: 0xC2DE,
+ 32600 - 11905: 0xEEB7,
+ 32601 - 11905: 0xC141,
+ 32602 - 11905: 0xB7A3,
+ 32603 - 11905: 0xC142,
+ 32604 - 11905: 0xC143,
+ 32605 - 11905: 0xC144,
+ 32606 - 11905: 0xC145,
+ 32607 - 11905: 0xEEB9,
+ 32608 - 11905: 0xC146,
+ 32609 - 11905: 0xEEB8,
+ 32610 - 11905: 0xB0D5,
+ 32611 - 11905: 0xC147,
+ 32612 - 11905: 0xC148,
+ 32613 - 11905: 0xC149,
+ 32614 - 11905: 0xC14A,
+ 32615 - 11905: 0xC14B,
+ 32616 - 11905: 0xEEBB,
+ 32617 - 11905: 0xD5D6,
+ 32618 - 11905: 0xD7EF,
+ 32619 - 11905: 0xC14C,
+ 32620 - 11905: 0xC14D,
+ 32621 - 11905: 0xC14E,
+ 32622 - 11905: 0xD6C3,
+ 32623 - 11905: 0xC14F,
+ 32624 - 11905: 0xC150,
+ 32625 - 11905: 0xEEBD,
+ 32626 - 11905: 0xCAF0,
+ 32627 - 11905: 0xC151,
+ 32628 - 11905: 0xEEBC,
+ 32629 - 11905: 0xC152,
+ 32630 - 11905: 0xC153,
+ 32631 - 11905: 0xC154,
+ 32632 - 11905: 0xC155,
+ 32633 - 11905: 0xEEBE,
+ 32634 - 11905: 0xC156,
+ 32635 - 11905: 0xC157,
+ 32636 - 11905: 0xC158,
+ 32637 - 11905: 0xC159,
+ 32638 - 11905: 0xEEC0,
+ 32639 - 11905: 0xC15A,
+ 32640 - 11905: 0xC15B,
+ 32641 - 11905: 0xEEBF,
+ 32642 - 11905: 0xC15C,
+ 32643 - 11905: 0xC15D,
+ 32644 - 11905: 0xC15E,
+ 32645 - 11905: 0xC15F,
+ 32646 - 11905: 0xC160,
+ 32647 - 11905: 0xC161,
+ 32648 - 11905: 0xC162,
+ 32649 - 11905: 0xC163,
+ 32650 - 11905: 0xD1F2,
+ 32651 - 11905: 0xC164,
+ 32652 - 11905: 0xC7BC,
+ 32653 - 11905: 0xC165,
+ 32654 - 11905: 0xC3C0,
+ 32655 - 11905: 0xC166,
+ 32656 - 11905: 0xC167,
+ 32657 - 11905: 0xC168,
+ 32658 - 11905: 0xC169,
+ 32659 - 11905: 0xC16A,
+ 32660 - 11905: 0xB8E1,
+ 32661 - 11905: 0xC16B,
+ 32662 - 11905: 0xC16C,
+ 32663 - 11905: 0xC16D,
+ 32664 - 11905: 0xC16E,
+ 32665 - 11905: 0xC16F,
+ 32666 - 11905: 0xC1E7,
+ 32667 - 11905: 0xC170,
+ 32668 - 11905: 0xC171,
+ 32669 - 11905: 0xF4C6,
+ 32670 - 11905: 0xD0DF,
+ 32671 - 11905: 0xF4C7,
+ 32672 - 11905: 0xC172,
+ 32673 - 11905: 0xCFDB,
+ 32674 - 11905: 0xC173,
+ 32675 - 11905: 0xC174,
+ 32676 - 11905: 0xC8BA,
+ 32677 - 11905: 0xC175,
+ 32678 - 11905: 0xC176,
+ 32679 - 11905: 0xF4C8,
+ 32680 - 11905: 0xC177,
+ 32681 - 11905: 0xC178,
+ 32682 - 11905: 0xC179,
+ 32683 - 11905: 0xC17A,
+ 32684 - 11905: 0xC17B,
+ 32685 - 11905: 0xC17C,
+ 32686 - 11905: 0xC17D,
+ 32687 - 11905: 0xF4C9,
+ 32688 - 11905: 0xF4CA,
+ 32689 - 11905: 0xC17E,
+ 32690 - 11905: 0xF4CB,
+ 32691 - 11905: 0xC180,
+ 32692 - 11905: 0xC181,
+ 32693 - 11905: 0xC182,
+ 32694 - 11905: 0xC183,
+ 32695 - 11905: 0xC184,
+ 32696 - 11905: 0xD9FA,
+ 32697 - 11905: 0xB8FE,
+ 32698 - 11905: 0xC185,
+ 32699 - 11905: 0xC186,
+ 32700 - 11905: 0xE5F1,
+ 32701 - 11905: 0xD3F0,
+ 32702 - 11905: 0xC187,
+ 32703 - 11905: 0xF4E0,
+ 32704 - 11905: 0xC188,
+ 32705 - 11905: 0xCECC,
+ 32706 - 11905: 0xC189,
+ 32707 - 11905: 0xC18A,
+ 32708 - 11905: 0xC18B,
+ 32709 - 11905: 0xB3E1,
+ 32710 - 11905: 0xC18C,
+ 32711 - 11905: 0xC18D,
+ 32712 - 11905: 0xC18E,
+ 32713 - 11905: 0xC18F,
+ 32714 - 11905: 0xF1B4,
+ 32715 - 11905: 0xC190,
+ 32716 - 11905: 0xD2EE,
+ 32717 - 11905: 0xC191,
+ 32718 - 11905: 0xF4E1,
+ 32719 - 11905: 0xC192,
+ 32720 - 11905: 0xC193,
+ 32721 - 11905: 0xC194,
+ 32722 - 11905: 0xC195,
+ 32723 - 11905: 0xC196,
+ 32724 - 11905: 0xCFE8,
+ 32725 - 11905: 0xF4E2,
+ 32726 - 11905: 0xC197,
+ 32727 - 11905: 0xC198,
+ 32728 - 11905: 0xC7CC,
+ 32729 - 11905: 0xC199,
+ 32730 - 11905: 0xC19A,
+ 32731 - 11905: 0xC19B,
+ 32732 - 11905: 0xC19C,
+ 32733 - 11905: 0xC19D,
+ 32734 - 11905: 0xC19E,
+ 32735 - 11905: 0xB5D4,
+ 32736 - 11905: 0xB4E4,
+ 32737 - 11905: 0xF4E4,
+ 32738 - 11905: 0xC19F,
+ 32739 - 11905: 0xC1A0,
+ 32740 - 11905: 0xC240,
+ 32741 - 11905: 0xF4E3,
+ 32742 - 11905: 0xF4E5,
+ 32743 - 11905: 0xC241,
+ 32744 - 11905: 0xC242,
+ 32745 - 11905: 0xF4E6,
+ 32746 - 11905: 0xC243,
+ 32747 - 11905: 0xC244,
+ 32748 - 11905: 0xC245,
+ 32749 - 11905: 0xC246,
+ 32750 - 11905: 0xF4E7,
+ 32751 - 11905: 0xC247,
+ 32752 - 11905: 0xBAB2,
+ 32753 - 11905: 0xB0BF,
+ 32754 - 11905: 0xC248,
+ 32755 - 11905: 0xF4E8,
+ 32756 - 11905: 0xC249,
+ 32757 - 11905: 0xC24A,
+ 32758 - 11905: 0xC24B,
+ 32759 - 11905: 0xC24C,
+ 32760 - 11905: 0xC24D,
+ 32761 - 11905: 0xC24E,
+ 32762 - 11905: 0xC24F,
+ 32763 - 11905: 0xB7AD,
+ 32764 - 11905: 0xD2ED,
+ 32765 - 11905: 0xC250,
+ 32766 - 11905: 0xC251,
+ 32767 - 11905: 0xC252,
+ 32768 - 11905: 0xD2AB,
+ 32769 - 11905: 0xC0CF,
+ 32770 - 11905: 0xC253,
+ 32771 - 11905: 0xBFBC,
+ 32772 - 11905: 0xEBA3,
+ 32773 - 11905: 0xD5DF,
+ 32774 - 11905: 0xEAC8,
+ 32775 - 11905: 0xC254,
+ 32776 - 11905: 0xC255,
+ 32777 - 11905: 0xC256,
+ 32778 - 11905: 0xC257,
+ 32779 - 11905: 0xF1F3,
+ 32780 - 11905: 0xB6F8,
+ 32781 - 11905: 0xCBA3,
+ 32782 - 11905: 0xC258,
+ 32783 - 11905: 0xC259,
+ 32784 - 11905: 0xC4CD,
+ 32785 - 11905: 0xC25A,
+ 32786 - 11905: 0xF1E7,
+ 32787 - 11905: 0xC25B,
+ 32788 - 11905: 0xF1E8,
+ 32789 - 11905: 0xB8FB,
+ 32790 - 11905: 0xF1E9,
+ 32791 - 11905: 0xBAC4,
+ 32792 - 11905: 0xD4C5,
+ 32793 - 11905: 0xB0D2,
+ 32794 - 11905: 0xC25C,
+ 32795 - 11905: 0xC25D,
+ 32796 - 11905: 0xF1EA,
+ 32797 - 11905: 0xC25E,
+ 32798 - 11905: 0xC25F,
+ 32799 - 11905: 0xC260,
+ 32800 - 11905: 0xF1EB,
+ 32801 - 11905: 0xC261,
+ 32802 - 11905: 0xF1EC,
+ 32803 - 11905: 0xC262,
+ 32804 - 11905: 0xC263,
+ 32805 - 11905: 0xF1ED,
+ 32806 - 11905: 0xF1EE,
+ 32807 - 11905: 0xF1EF,
+ 32808 - 11905: 0xF1F1,
+ 32809 - 11905: 0xF1F0,
+ 32810 - 11905: 0xC5D5,
+ 32811 - 11905: 0xC264,
+ 32812 - 11905: 0xC265,
+ 32813 - 11905: 0xC266,
+ 32814 - 11905: 0xC267,
+ 32815 - 11905: 0xC268,
+ 32816 - 11905: 0xC269,
+ 32817 - 11905: 0xF1F2,
+ 32818 - 11905: 0xC26A,
+ 32819 - 11905: 0xB6FA,
+ 32820 - 11905: 0xC26B,
+ 32821 - 11905: 0xF1F4,
+ 32822 - 11905: 0xD2AE,
+ 32823 - 11905: 0xDEC7,
+ 32824 - 11905: 0xCBCA,
+ 32825 - 11905: 0xC26C,
+ 32826 - 11905: 0xC26D,
+ 32827 - 11905: 0xB3DC,
+ 32828 - 11905: 0xC26E,
+ 32829 - 11905: 0xB5A2,
+ 32830 - 11905: 0xC26F,
+ 32831 - 11905: 0xB9A2,
+ 32832 - 11905: 0xC270,
+ 32833 - 11905: 0xC271,
+ 32834 - 11905: 0xC4F4,
+ 32835 - 11905: 0xF1F5,
+ 32836 - 11905: 0xC272,
+ 32837 - 11905: 0xC273,
+ 32838 - 11905: 0xF1F6,
+ 32839 - 11905: 0xC274,
+ 32840 - 11905: 0xC275,
+ 32841 - 11905: 0xC276,
+ 32842 - 11905: 0xC1C4,
+ 32843 - 11905: 0xC1FB,
+ 32844 - 11905: 0xD6B0,
+ 32845 - 11905: 0xF1F7,
+ 32846 - 11905: 0xC277,
+ 32847 - 11905: 0xC278,
+ 32848 - 11905: 0xC279,
+ 32849 - 11905: 0xC27A,
+ 32850 - 11905: 0xF1F8,
+ 32851 - 11905: 0xC27B,
+ 32852 - 11905: 0xC1AA,
+ 32853 - 11905: 0xC27C,
+ 32854 - 11905: 0xC27D,
+ 32855 - 11905: 0xC27E,
+ 32856 - 11905: 0xC6B8,
+ 32857 - 11905: 0xC280,
+ 32858 - 11905: 0xBEDB,
+ 32859 - 11905: 0xC281,
+ 32860 - 11905: 0xC282,
+ 32861 - 11905: 0xC283,
+ 32862 - 11905: 0xC284,
+ 32863 - 11905: 0xC285,
+ 32864 - 11905: 0xC286,
+ 32865 - 11905: 0xC287,
+ 32866 - 11905: 0xC288,
+ 32867 - 11905: 0xC289,
+ 32868 - 11905: 0xC28A,
+ 32869 - 11905: 0xC28B,
+ 32870 - 11905: 0xC28C,
+ 32871 - 11905: 0xC28D,
+ 32872 - 11905: 0xC28E,
+ 32873 - 11905: 0xF1F9,
+ 32874 - 11905: 0xB4CF,
+ 32875 - 11905: 0xC28F,
+ 32876 - 11905: 0xC290,
+ 32877 - 11905: 0xC291,
+ 32878 - 11905: 0xC292,
+ 32879 - 11905: 0xC293,
+ 32880 - 11905: 0xC294,
+ 32881 - 11905: 0xF1FA,
+ 32882 - 11905: 0xC295,
+ 32883 - 11905: 0xC296,
+ 32884 - 11905: 0xC297,
+ 32885 - 11905: 0xC298,
+ 32886 - 11905: 0xC299,
+ 32887 - 11905: 0xC29A,
+ 32888 - 11905: 0xC29B,
+ 32889 - 11905: 0xC29C,
+ 32890 - 11905: 0xC29D,
+ 32891 - 11905: 0xC29E,
+ 32892 - 11905: 0xC29F,
+ 32893 - 11905: 0xC2A0,
+ 32894 - 11905: 0xC340,
+ 32895 - 11905: 0xEDB2,
+ 32896 - 11905: 0xEDB1,
+ 32897 - 11905: 0xC341,
+ 32898 - 11905: 0xC342,
+ 32899 - 11905: 0xCBE0,
+ 32900 - 11905: 0xD2DE,
+ 32901 - 11905: 0xC343,
+ 32902 - 11905: 0xCBC1,
+ 32903 - 11905: 0xD5D8,
+ 32904 - 11905: 0xC344,
+ 32905 - 11905: 0xC8E2,
+ 32906 - 11905: 0xC345,
+ 32907 - 11905: 0xC0DF,
+ 32908 - 11905: 0xBCA1,
+ 32909 - 11905: 0xC346,
+ 32910 - 11905: 0xC347,
+ 32911 - 11905: 0xC348,
+ 32912 - 11905: 0xC349,
+ 32913 - 11905: 0xC34A,
+ 32914 - 11905: 0xC34B,
+ 32915 - 11905: 0xEBC1,
+ 32916 - 11905: 0xC34C,
+ 32917 - 11905: 0xC34D,
+ 32918 - 11905: 0xD0A4,
+ 32919 - 11905: 0xC34E,
+ 32920 - 11905: 0xD6E2,
+ 32921 - 11905: 0xC34F,
+ 32922 - 11905: 0xB6C7,
+ 32923 - 11905: 0xB8D8,
+ 32924 - 11905: 0xEBC0,
+ 32925 - 11905: 0xB8CE,
+ 32926 - 11905: 0xC350,
+ 32927 - 11905: 0xEBBF,
+ 32928 - 11905: 0xB3A6,
+ 32929 - 11905: 0xB9C9,
+ 32930 - 11905: 0xD6AB,
+ 32931 - 11905: 0xC351,
+ 32932 - 11905: 0xB7F4,
+ 32933 - 11905: 0xB7CA,
+ 32934 - 11905: 0xC352,
+ 32935 - 11905: 0xC353,
+ 32936 - 11905: 0xC354,
+ 32937 - 11905: 0xBCE7,
+ 32938 - 11905: 0xB7BE,
+ 32939 - 11905: 0xEBC6,
+ 32940 - 11905: 0xC355,
+ 32941 - 11905: 0xEBC7,
+ 32942 - 11905: 0xB0B9,
+ 32943 - 11905: 0xBFCF,
+ 32944 - 11905: 0xC356,
+ 32945 - 11905: 0xEBC5,
+ 32946 - 11905: 0xD3FD,
+ 32947 - 11905: 0xC357,
+ 32948 - 11905: 0xEBC8,
+ 32949 - 11905: 0xC358,
+ 32950 - 11905: 0xC359,
+ 32951 - 11905: 0xEBC9,
+ 32952 - 11905: 0xC35A,
+ 32953 - 11905: 0xC35B,
+ 32954 - 11905: 0xB7CE,
+ 32955 - 11905: 0xC35C,
+ 32956 - 11905: 0xEBC2,
+ 32957 - 11905: 0xEBC4,
+ 32958 - 11905: 0xC9F6,
+ 32959 - 11905: 0xD6D7,
+ 32960 - 11905: 0xD5CD,
+ 32961 - 11905: 0xD0B2,
+ 32962 - 11905: 0xEBCF,
+ 32963 - 11905: 0xCEB8,
+ 32964 - 11905: 0xEBD0,
+ 32965 - 11905: 0xC35D,
+ 32966 - 11905: 0xB5A8,
+ 32967 - 11905: 0xC35E,
+ 32968 - 11905: 0xC35F,
+ 32969 - 11905: 0xC360,
+ 32970 - 11905: 0xC361,
+ 32971 - 11905: 0xC362,
+ 32972 - 11905: 0xB1B3,
+ 32973 - 11905: 0xEBD2,
+ 32974 - 11905: 0xCCA5,
+ 32975 - 11905: 0xC363,
+ 32976 - 11905: 0xC364,
+ 32977 - 11905: 0xC365,
+ 32978 - 11905: 0xC366,
+ 32979 - 11905: 0xC367,
+ 32980 - 11905: 0xC368,
+ 32981 - 11905: 0xC369,
+ 32982 - 11905: 0xC5D6,
+ 32983 - 11905: 0xEBD3,
+ 32984 - 11905: 0xC36A,
+ 32985 - 11905: 0xEBD1,
+ 32986 - 11905: 0xC5DF,
+ 32987 - 11905: 0xEBCE,
+ 32988 - 11905: 0xCAA4,
+ 32989 - 11905: 0xEBD5,
+ 32990 - 11905: 0xB0FB,
+ 32991 - 11905: 0xC36B,
+ 32992 - 11905: 0xC36C,
+ 32993 - 11905: 0xBAFA,
+ 32994 - 11905: 0xC36D,
+ 32995 - 11905: 0xC36E,
+ 32996 - 11905: 0xD8B7,
+ 32997 - 11905: 0xF1E3,
+ 32998 - 11905: 0xC36F,
+ 32999 - 11905: 0xEBCA,
+ 33000 - 11905: 0xEBCB,
+ 33001 - 11905: 0xEBCC,
+ 33002 - 11905: 0xEBCD,
+ 33003 - 11905: 0xEBD6,
+ 33004 - 11905: 0xE6C0,
+ 33005 - 11905: 0xEBD9,
+ 33006 - 11905: 0xC370,
+ 33007 - 11905: 0xBFE8,
+ 33008 - 11905: 0xD2C8,
+ 33009 - 11905: 0xEBD7,
+ 33010 - 11905: 0xEBDC,
+ 33011 - 11905: 0xB8EC,
+ 33012 - 11905: 0xEBD8,
+ 33013 - 11905: 0xC371,
+ 33014 - 11905: 0xBDBA,
+ 33015 - 11905: 0xC372,
+ 33016 - 11905: 0xD0D8,
+ 33017 - 11905: 0xC373,
+ 33018 - 11905: 0xB0B7,
+ 33019 - 11905: 0xC374,
+ 33020 - 11905: 0xEBDD,
+ 33021 - 11905: 0xC4DC,
+ 33022 - 11905: 0xC375,
+ 33023 - 11905: 0xC376,
+ 33024 - 11905: 0xC377,
+ 33025 - 11905: 0xC378,
+ 33026 - 11905: 0xD6AC,
+ 33027 - 11905: 0xC379,
+ 33028 - 11905: 0xC37A,
+ 33029 - 11905: 0xC37B,
+ 33030 - 11905: 0xB4E0,
+ 33031 - 11905: 0xC37C,
+ 33032 - 11905: 0xC37D,
+ 33033 - 11905: 0xC2F6,
+ 33034 - 11905: 0xBCB9,
+ 33035 - 11905: 0xC37E,
+ 33036 - 11905: 0xC380,
+ 33037 - 11905: 0xEBDA,
+ 33038 - 11905: 0xEBDB,
+ 33039 - 11905: 0xD4E0,
+ 33040 - 11905: 0xC6EA,
+ 33041 - 11905: 0xC4D4,
+ 33042 - 11905: 0xEBDF,
+ 33043 - 11905: 0xC5A7,
+ 33044 - 11905: 0xD9F5,
+ 33045 - 11905: 0xC381,
+ 33046 - 11905: 0xB2B1,
+ 33047 - 11905: 0xC382,
+ 33048 - 11905: 0xEBE4,
+ 33049 - 11905: 0xC383,
+ 33050 - 11905: 0xBDC5,
+ 33051 - 11905: 0xC384,
+ 33052 - 11905: 0xC385,
+ 33053 - 11905: 0xC386,
+ 33054 - 11905: 0xEBE2,
+ 33055 - 11905: 0xC387,
+ 33056 - 11905: 0xC388,
+ 33057 - 11905: 0xC389,
+ 33058 - 11905: 0xC38A,
+ 33059 - 11905: 0xC38B,
+ 33060 - 11905: 0xC38C,
+ 33061 - 11905: 0xC38D,
+ 33062 - 11905: 0xC38E,
+ 33063 - 11905: 0xC38F,
+ 33064 - 11905: 0xC390,
+ 33065 - 11905: 0xC391,
+ 33066 - 11905: 0xC392,
+ 33067 - 11905: 0xC393,
+ 33068 - 11905: 0xEBE3,
+ 33069 - 11905: 0xC394,
+ 33070 - 11905: 0xC395,
+ 33071 - 11905: 0xB8AC,
+ 33072 - 11905: 0xC396,
+ 33073 - 11905: 0xCDD1,
+ 33074 - 11905: 0xEBE5,
+ 33075 - 11905: 0xC397,
+ 33076 - 11905: 0xC398,
+ 33077 - 11905: 0xC399,
+ 33078 - 11905: 0xEBE1,
+ 33079 - 11905: 0xC39A,
+ 33080 - 11905: 0xC1B3,
+ 33081 - 11905: 0xC39B,
+ 33082 - 11905: 0xC39C,
+ 33083 - 11905: 0xC39D,
+ 33084 - 11905: 0xC39E,
+ 33085 - 11905: 0xC39F,
+ 33086 - 11905: 0xC6A2,
+ 33087 - 11905: 0xC3A0,
+ 33088 - 11905: 0xC440,
+ 33089 - 11905: 0xC441,
+ 33090 - 11905: 0xC442,
+ 33091 - 11905: 0xC443,
+ 33092 - 11905: 0xC444,
+ 33093 - 11905: 0xC445,
+ 33094 - 11905: 0xCCF3,
+ 33095 - 11905: 0xC446,
+ 33096 - 11905: 0xEBE6,
+ 33097 - 11905: 0xC447,
+ 33098 - 11905: 0xC0B0,
+ 33099 - 11905: 0xD2B8,
+ 33100 - 11905: 0xEBE7,
+ 33101 - 11905: 0xC448,
+ 33102 - 11905: 0xC449,
+ 33103 - 11905: 0xC44A,
+ 33104 - 11905: 0xB8AF,
+ 33105 - 11905: 0xB8AD,
+ 33106 - 11905: 0xC44B,
+ 33107 - 11905: 0xEBE8,
+ 33108 - 11905: 0xC7BB,
+ 33109 - 11905: 0xCDF3,
+ 33110 - 11905: 0xC44C,
+ 33111 - 11905: 0xC44D,
+ 33112 - 11905: 0xC44E,
+ 33113 - 11905: 0xEBEA,
+ 33114 - 11905: 0xEBEB,
+ 33115 - 11905: 0xC44F,
+ 33116 - 11905: 0xC450,
+ 33117 - 11905: 0xC451,
+ 33118 - 11905: 0xC452,
+ 33119 - 11905: 0xC453,
+ 33120 - 11905: 0xEBED,
+ 33121 - 11905: 0xC454,
+ 33122 - 11905: 0xC455,
+ 33123 - 11905: 0xC456,
+ 33124 - 11905: 0xC457,
+ 33125 - 11905: 0xD0C8,
+ 33126 - 11905: 0xC458,
+ 33127 - 11905: 0xEBF2,
+ 33128 - 11905: 0xC459,
+ 33129 - 11905: 0xEBEE,
+ 33130 - 11905: 0xC45A,
+ 33131 - 11905: 0xC45B,
+ 33132 - 11905: 0xC45C,
+ 33133 - 11905: 0xEBF1,
+ 33134 - 11905: 0xC8F9,
+ 33135 - 11905: 0xC45D,
+ 33136 - 11905: 0xD1FC,
+ 33137 - 11905: 0xEBEC,
+ 33138 - 11905: 0xC45E,
+ 33139 - 11905: 0xC45F,
+ 33140 - 11905: 0xEBE9,
+ 33141 - 11905: 0xC460,
+ 33142 - 11905: 0xC461,
+ 33143 - 11905: 0xC462,
+ 33144 - 11905: 0xC463,
+ 33145 - 11905: 0xB8B9,
+ 33146 - 11905: 0xCFD9,
+ 33147 - 11905: 0xC4E5,
+ 33148 - 11905: 0xEBEF,
+ 33149 - 11905: 0xEBF0,
+ 33150 - 11905: 0xCCDA,
+ 33151 - 11905: 0xCDC8,
+ 33152 - 11905: 0xB0F2,
+ 33153 - 11905: 0xC464,
+ 33154 - 11905: 0xEBF6,
+ 33155 - 11905: 0xC465,
+ 33156 - 11905: 0xC466,
+ 33157 - 11905: 0xC467,
+ 33158 - 11905: 0xC468,
+ 33159 - 11905: 0xC469,
+ 33160 - 11905: 0xEBF5,
+ 33161 - 11905: 0xC46A,
+ 33162 - 11905: 0xB2B2,
+ 33163 - 11905: 0xC46B,
+ 33164 - 11905: 0xC46C,
+ 33165 - 11905: 0xC46D,
+ 33166 - 11905: 0xC46E,
+ 33167 - 11905: 0xB8E0,
+ 33168 - 11905: 0xC46F,
+ 33169 - 11905: 0xEBF7,
+ 33170 - 11905: 0xC470,
+ 33171 - 11905: 0xC471,
+ 33172 - 11905: 0xC472,
+ 33173 - 11905: 0xC473,
+ 33174 - 11905: 0xC474,
+ 33175 - 11905: 0xC475,
+ 33176 - 11905: 0xB1EC,
+ 33177 - 11905: 0xC476,
+ 33178 - 11905: 0xC477,
+ 33179 - 11905: 0xCCC5,
+ 33180 - 11905: 0xC4A4,
+ 33181 - 11905: 0xCFA5,
+ 33182 - 11905: 0xC478,
+ 33183 - 11905: 0xC479,
+ 33184 - 11905: 0xC47A,
+ 33185 - 11905: 0xC47B,
+ 33186 - 11905: 0xC47C,
+ 33187 - 11905: 0xEBF9,
+ 33188 - 11905: 0xC47D,
+ 33189 - 11905: 0xC47E,
+ 33190 - 11905: 0xECA2,
+ 33191 - 11905: 0xC480,
+ 33192 - 11905: 0xC5F2,
+ 33193 - 11905: 0xC481,
+ 33194 - 11905: 0xEBFA,
+ 33195 - 11905: 0xC482,
+ 33196 - 11905: 0xC483,
+ 33197 - 11905: 0xC484,
+ 33198 - 11905: 0xC485,
+ 33199 - 11905: 0xC486,
+ 33200 - 11905: 0xC487,
+ 33201 - 11905: 0xC488,
+ 33202 - 11905: 0xC489,
+ 33203 - 11905: 0xC9C5,
+ 33204 - 11905: 0xC48A,
+ 33205 - 11905: 0xC48B,
+ 33206 - 11905: 0xC48C,
+ 33207 - 11905: 0xC48D,
+ 33208 - 11905: 0xC48E,
+ 33209 - 11905: 0xC48F,
+ 33210 - 11905: 0xE2DF,
+ 33211 - 11905: 0xEBFE,
+ 33212 - 11905: 0xC490,
+ 33213 - 11905: 0xC491,
+ 33214 - 11905: 0xC492,
+ 33215 - 11905: 0xC493,
+ 33216 - 11905: 0xCDCE,
+ 33217 - 11905: 0xECA1,
+ 33218 - 11905: 0xB1DB,
+ 33219 - 11905: 0xD3B7,
+ 33220 - 11905: 0xC494,
+ 33221 - 11905: 0xC495,
+ 33222 - 11905: 0xD2DC,
+ 33223 - 11905: 0xC496,
+ 33224 - 11905: 0xC497,
+ 33225 - 11905: 0xC498,
+ 33226 - 11905: 0xEBFD,
+ 33227 - 11905: 0xC499,
+ 33228 - 11905: 0xEBFB,
+ 33229 - 11905: 0xC49A,
+ 33230 - 11905: 0xC49B,
+ 33231 - 11905: 0xC49C,
+ 33232 - 11905: 0xC49D,
+ 33233 - 11905: 0xC49E,
+ 33234 - 11905: 0xC49F,
+ 33235 - 11905: 0xC4A0,
+ 33236 - 11905: 0xC540,
+ 33237 - 11905: 0xC541,
+ 33238 - 11905: 0xC542,
+ 33239 - 11905: 0xC543,
+ 33240 - 11905: 0xC544,
+ 33241 - 11905: 0xC545,
+ 33242 - 11905: 0xC546,
+ 33243 - 11905: 0xC547,
+ 33244 - 11905: 0xC548,
+ 33245 - 11905: 0xC549,
+ 33246 - 11905: 0xC54A,
+ 33247 - 11905: 0xC54B,
+ 33248 - 11905: 0xC54C,
+ 33249 - 11905: 0xC54D,
+ 33250 - 11905: 0xC54E,
+ 33251 - 11905: 0xB3BC,
+ 33252 - 11905: 0xC54F,
+ 33253 - 11905: 0xC550,
+ 33254 - 11905: 0xC551,
+ 33255 - 11905: 0xEAB0,
+ 33256 - 11905: 0xC552,
+ 33257 - 11905: 0xC553,
+ 33258 - 11905: 0xD7D4,
+ 33259 - 11905: 0xC554,
+ 33260 - 11905: 0xF4AB,
+ 33261 - 11905: 0xB3F4,
+ 33262 - 11905: 0xC555,
+ 33263 - 11905: 0xC556,
+ 33264 - 11905: 0xC557,
+ 33265 - 11905: 0xC558,
+ 33266 - 11905: 0xC559,
+ 33267 - 11905: 0xD6C1,
+ 33268 - 11905: 0xD6C2,
+ 33269 - 11905: 0xC55A,
+ 33270 - 11905: 0xC55B,
+ 33271 - 11905: 0xC55C,
+ 33272 - 11905: 0xC55D,
+ 33273 - 11905: 0xC55E,
+ 33274 - 11905: 0xC55F,
+ 33275 - 11905: 0xD5E9,
+ 33276 - 11905: 0xBECA,
+ 33277 - 11905: 0xC560,
+ 33278 - 11905: 0xF4A7,
+ 33279 - 11905: 0xC561,
+ 33280 - 11905: 0xD2A8,
+ 33281 - 11905: 0xF4A8,
+ 33282 - 11905: 0xF4A9,
+ 33283 - 11905: 0xC562,
+ 33284 - 11905: 0xF4AA,
+ 33285 - 11905: 0xBECB,
+ 33286 - 11905: 0xD3DF,
+ 33287 - 11905: 0xC563,
+ 33288 - 11905: 0xC564,
+ 33289 - 11905: 0xC565,
+ 33290 - 11905: 0xC566,
+ 33291 - 11905: 0xC567,
+ 33292 - 11905: 0xC9E0,
+ 33293 - 11905: 0xC9E1,
+ 33294 - 11905: 0xC568,
+ 33295 - 11905: 0xC569,
+ 33296 - 11905: 0xF3C2,
+ 33297 - 11905: 0xC56A,
+ 33298 - 11905: 0xCAE6,
+ 33299 - 11905: 0xC56B,
+ 33300 - 11905: 0xCCF2,
+ 33301 - 11905: 0xC56C,
+ 33302 - 11905: 0xC56D,
+ 33303 - 11905: 0xC56E,
+ 33304 - 11905: 0xC56F,
+ 33305 - 11905: 0xC570,
+ 33306 - 11905: 0xC571,
+ 33307 - 11905: 0xE2B6,
+ 33308 - 11905: 0xCBB4,
+ 33309 - 11905: 0xC572,
+ 33310 - 11905: 0xCEE8,
+ 33311 - 11905: 0xD6DB,
+ 33312 - 11905: 0xC573,
+ 33313 - 11905: 0xF4AD,
+ 33314 - 11905: 0xF4AE,
+ 33315 - 11905: 0xF4AF,
+ 33316 - 11905: 0xC574,
+ 33317 - 11905: 0xC575,
+ 33318 - 11905: 0xC576,
+ 33319 - 11905: 0xC577,
+ 33320 - 11905: 0xF4B2,
+ 33321 - 11905: 0xC578,
+ 33322 - 11905: 0xBABD,
+ 33323 - 11905: 0xF4B3,
+ 33324 - 11905: 0xB0E3,
+ 33325 - 11905: 0xF4B0,
+ 33326 - 11905: 0xC579,
+ 33327 - 11905: 0xF4B1,
+ 33328 - 11905: 0xBDA2,
+ 33329 - 11905: 0xB2D5,
+ 33330 - 11905: 0xC57A,
+ 33331 - 11905: 0xF4B6,
+ 33332 - 11905: 0xF4B7,
+ 33333 - 11905: 0xB6E6,
+ 33334 - 11905: 0xB2B0,
+ 33335 - 11905: 0xCFCF,
+ 33336 - 11905: 0xF4B4,
+ 33337 - 11905: 0xB4AC,
+ 33338 - 11905: 0xC57B,
+ 33339 - 11905: 0xF4B5,
+ 33340 - 11905: 0xC57C,
+ 33341 - 11905: 0xC57D,
+ 33342 - 11905: 0xF4B8,
+ 33343 - 11905: 0xC57E,
+ 33344 - 11905: 0xC580,
+ 33345 - 11905: 0xC581,
+ 33346 - 11905: 0xC582,
+ 33347 - 11905: 0xC583,
+ 33348 - 11905: 0xF4B9,
+ 33349 - 11905: 0xC584,
+ 33350 - 11905: 0xC585,
+ 33351 - 11905: 0xCDA7,
+ 33352 - 11905: 0xC586,
+ 33353 - 11905: 0xF4BA,
+ 33354 - 11905: 0xC587,
+ 33355 - 11905: 0xF4BB,
+ 33356 - 11905: 0xC588,
+ 33357 - 11905: 0xC589,
+ 33358 - 11905: 0xC58A,
+ 33359 - 11905: 0xF4BC,
+ 33360 - 11905: 0xC58B,
+ 33361 - 11905: 0xC58C,
+ 33362 - 11905: 0xC58D,
+ 33363 - 11905: 0xC58E,
+ 33364 - 11905: 0xC58F,
+ 33365 - 11905: 0xC590,
+ 33366 - 11905: 0xC591,
+ 33367 - 11905: 0xC592,
+ 33368 - 11905: 0xCBD2,
+ 33369 - 11905: 0xC593,
+ 33370 - 11905: 0xF4BD,
+ 33371 - 11905: 0xC594,
+ 33372 - 11905: 0xC595,
+ 33373 - 11905: 0xC596,
+ 33374 - 11905: 0xC597,
+ 33375 - 11905: 0xF4BE,
+ 33376 - 11905: 0xC598,
+ 33377 - 11905: 0xC599,
+ 33378 - 11905: 0xC59A,
+ 33379 - 11905: 0xC59B,
+ 33380 - 11905: 0xC59C,
+ 33381 - 11905: 0xC59D,
+ 33382 - 11905: 0xC59E,
+ 33383 - 11905: 0xC59F,
+ 33384 - 11905: 0xF4BF,
+ 33385 - 11905: 0xC5A0,
+ 33386 - 11905: 0xC640,
+ 33387 - 11905: 0xC641,
+ 33388 - 11905: 0xC642,
+ 33389 - 11905: 0xC643,
+ 33390 - 11905: 0xF4DE,
+ 33391 - 11905: 0xC1BC,
+ 33392 - 11905: 0xBCE8,
+ 33393 - 11905: 0xC644,
+ 33394 - 11905: 0xC9AB,
+ 33395 - 11905: 0xD1DE,
+ 33396 - 11905: 0xE5F5,
+ 33397 - 11905: 0xC645,
+ 33398 - 11905: 0xC646,
+ 33399 - 11905: 0xC647,
+ 33400 - 11905: 0xC648,
+ 33401 - 11905: 0xDCB3,
+ 33402 - 11905: 0xD2D5,
+ 33403 - 11905: 0xC649,
+ 33404 - 11905: 0xC64A,
+ 33405 - 11905: 0xDCB4,
+ 33406 - 11905: 0xB0AC,
+ 33407 - 11905: 0xDCB5,
+ 33408 - 11905: 0xC64B,
+ 33409 - 11905: 0xC64C,
+ 33410 - 11905: 0xBDDA,
+ 33411 - 11905: 0xC64D,
+ 33412 - 11905: 0xDCB9,
+ 33413 - 11905: 0xC64E,
+ 33414 - 11905: 0xC64F,
+ 33415 - 11905: 0xC650,
+ 33416 - 11905: 0xD8C2,
+ 33417 - 11905: 0xC651,
+ 33418 - 11905: 0xDCB7,
+ 33419 - 11905: 0xD3F3,
+ 33420 - 11905: 0xC652,
+ 33421 - 11905: 0xC9D6,
+ 33422 - 11905: 0xDCBA,
+ 33423 - 11905: 0xDCB6,
+ 33424 - 11905: 0xC653,
+ 33425 - 11905: 0xDCBB,
+ 33426 - 11905: 0xC3A2,
+ 33427 - 11905: 0xC654,
+ 33428 - 11905: 0xC655,
+ 33429 - 11905: 0xC656,
+ 33430 - 11905: 0xC657,
+ 33431 - 11905: 0xDCBC,
+ 33432 - 11905: 0xDCC5,
+ 33433 - 11905: 0xDCBD,
+ 33434 - 11905: 0xC658,
+ 33435 - 11905: 0xC659,
+ 33436 - 11905: 0xCEDF,
+ 33437 - 11905: 0xD6A5,
+ 33438 - 11905: 0xC65A,
+ 33439 - 11905: 0xDCCF,
+ 33440 - 11905: 0xC65B,
+ 33441 - 11905: 0xDCCD,
+ 33442 - 11905: 0xC65C,
+ 33443 - 11905: 0xC65D,
+ 33444 - 11905: 0xDCD2,
+ 33445 - 11905: 0xBDE6,
+ 33446 - 11905: 0xC2AB,
+ 33447 - 11905: 0xC65E,
+ 33448 - 11905: 0xDCB8,
+ 33449 - 11905: 0xDCCB,
+ 33450 - 11905: 0xDCCE,
+ 33451 - 11905: 0xDCBE,
+ 33452 - 11905: 0xB7D2,
+ 33453 - 11905: 0xB0C5,
+ 33454 - 11905: 0xDCC7,
+ 33455 - 11905: 0xD0BE,
+ 33456 - 11905: 0xDCC1,
+ 33457 - 11905: 0xBBA8,
+ 33458 - 11905: 0xC65F,
+ 33459 - 11905: 0xB7BC,
+ 33460 - 11905: 0xDCCC,
+ 33461 - 11905: 0xC660,
+ 33462 - 11905: 0xC661,
+ 33463 - 11905: 0xDCC6,
+ 33464 - 11905: 0xDCBF,
+ 33465 - 11905: 0xC7DB,
+ 33466 - 11905: 0xC662,
+ 33467 - 11905: 0xC663,
+ 33468 - 11905: 0xC664,
+ 33469 - 11905: 0xD1BF,
+ 33470 - 11905: 0xDCC0,
+ 33471 - 11905: 0xC665,
+ 33472 - 11905: 0xC666,
+ 33473 - 11905: 0xDCCA,
+ 33474 - 11905: 0xC667,
+ 33475 - 11905: 0xC668,
+ 33476 - 11905: 0xDCD0,
+ 33477 - 11905: 0xC669,
+ 33478 - 11905: 0xC66A,
+ 33479 - 11905: 0xCEAD,
+ 33480 - 11905: 0xDCC2,
+ 33481 - 11905: 0xC66B,
+ 33482 - 11905: 0xDCC3,
+ 33483 - 11905: 0xDCC8,
+ 33484 - 11905: 0xDCC9,
+ 33485 - 11905: 0xB2D4,
+ 33486 - 11905: 0xDCD1,
+ 33487 - 11905: 0xCBD5,
+ 33488 - 11905: 0xC66C,
+ 33489 - 11905: 0xD4B7,
+ 33490 - 11905: 0xDCDB,
+ 33491 - 11905: 0xDCDF,
+ 33492 - 11905: 0xCCA6,
+ 33493 - 11905: 0xDCE6,
+ 33494 - 11905: 0xC66D,
+ 33495 - 11905: 0xC3E7,
+ 33496 - 11905: 0xDCDC,
+ 33497 - 11905: 0xC66E,
+ 33498 - 11905: 0xC66F,
+ 33499 - 11905: 0xBFC1,
+ 33500 - 11905: 0xDCD9,
+ 33501 - 11905: 0xC670,
+ 33502 - 11905: 0xB0FA,
+ 33503 - 11905: 0xB9B6,
+ 33504 - 11905: 0xDCE5,
+ 33505 - 11905: 0xDCD3,
+ 33506 - 11905: 0xC671,
+ 33507 - 11905: 0xDCC4,
+ 33508 - 11905: 0xDCD6,
+ 33509 - 11905: 0xC8F4,
+ 33510 - 11905: 0xBFE0,
+ 33511 - 11905: 0xC672,
+ 33512 - 11905: 0xC673,
+ 33513 - 11905: 0xC674,
+ 33514 - 11905: 0xC675,
+ 33515 - 11905: 0xC9BB,
+ 33516 - 11905: 0xC676,
+ 33517 - 11905: 0xC677,
+ 33518 - 11905: 0xC678,
+ 33519 - 11905: 0xB1BD,
+ 33520 - 11905: 0xC679,
+ 33521 - 11905: 0xD3A2,
+ 33522 - 11905: 0xC67A,
+ 33523 - 11905: 0xC67B,
+ 33524 - 11905: 0xDCDA,
+ 33525 - 11905: 0xC67C,
+ 33526 - 11905: 0xC67D,
+ 33527 - 11905: 0xDCD5,
+ 33528 - 11905: 0xC67E,
+ 33529 - 11905: 0xC6BB,
+ 33530 - 11905: 0xC680,
+ 33531 - 11905: 0xDCDE,
+ 33532 - 11905: 0xC681,
+ 33533 - 11905: 0xC682,
+ 33534 - 11905: 0xC683,
+ 33535 - 11905: 0xC684,
+ 33536 - 11905: 0xC685,
+ 33537 - 11905: 0xD7C2,
+ 33538 - 11905: 0xC3AF,
+ 33539 - 11905: 0xB7B6,
+ 33540 - 11905: 0xC7D1,
+ 33541 - 11905: 0xC3A9,
+ 33542 - 11905: 0xDCE2,
+ 33543 - 11905: 0xDCD8,
+ 33544 - 11905: 0xDCEB,
+ 33545 - 11905: 0xDCD4,
+ 33546 - 11905: 0xC686,
+ 33547 - 11905: 0xC687,
+ 33548 - 11905: 0xDCDD,
+ 33549 - 11905: 0xC688,
+ 33550 - 11905: 0xBEA5,
+ 33551 - 11905: 0xDCD7,
+ 33552 - 11905: 0xC689,
+ 33553 - 11905: 0xDCE0,
+ 33554 - 11905: 0xC68A,
+ 33555 - 11905: 0xC68B,
+ 33556 - 11905: 0xDCE3,
+ 33557 - 11905: 0xDCE4,
+ 33558 - 11905: 0xC68C,
+ 33559 - 11905: 0xDCF8,
+ 33560 - 11905: 0xC68D,
+ 33561 - 11905: 0xC68E,
+ 33562 - 11905: 0xDCE1,
+ 33563 - 11905: 0xDDA2,
+ 33564 - 11905: 0xDCE7,
+ 33565 - 11905: 0xC68F,
+ 33566 - 11905: 0xC690,
+ 33567 - 11905: 0xC691,
+ 33568 - 11905: 0xC692,
+ 33569 - 11905: 0xC693,
+ 33570 - 11905: 0xC694,
+ 33571 - 11905: 0xC695,
+ 33572 - 11905: 0xC696,
+ 33573 - 11905: 0xC697,
+ 33574 - 11905: 0xC698,
+ 33575 - 11905: 0xBCEB,
+ 33576 - 11905: 0xB4C4,
+ 33577 - 11905: 0xC699,
+ 33578 - 11905: 0xC69A,
+ 33579 - 11905: 0xC3A3,
+ 33580 - 11905: 0xB2E7,
+ 33581 - 11905: 0xDCFA,
+ 33582 - 11905: 0xC69B,
+ 33583 - 11905: 0xDCF2,
+ 33584 - 11905: 0xC69C,
+ 33585 - 11905: 0xDCEF,
+ 33586 - 11905: 0xC69D,
+ 33587 - 11905: 0xDCFC,
+ 33588 - 11905: 0xDCEE,
+ 33589 - 11905: 0xD2F0,
+ 33590 - 11905: 0xB2E8,
+ 33591 - 11905: 0xC69E,
+ 33592 - 11905: 0xC8D7,
+ 33593 - 11905: 0xC8E3,
+ 33594 - 11905: 0xDCFB,
+ 33595 - 11905: 0xC69F,
+ 33596 - 11905: 0xDCED,
+ 33597 - 11905: 0xC6A0,
+ 33598 - 11905: 0xC740,
+ 33599 - 11905: 0xC741,
+ 33600 - 11905: 0xDCF7,
+ 33601 - 11905: 0xC742,
+ 33602 - 11905: 0xC743,
+ 33603 - 11905: 0xDCF5,
+ 33604 - 11905: 0xC744,
+ 33605 - 11905: 0xC745,
+ 33606 - 11905: 0xBEA3,
+ 33607 - 11905: 0xDCF4,
+ 33608 - 11905: 0xC746,
+ 33609 - 11905: 0xB2DD,
+ 33610 - 11905: 0xC747,
+ 33611 - 11905: 0xC748,
+ 33612 - 11905: 0xC749,
+ 33613 - 11905: 0xC74A,
+ 33614 - 11905: 0xC74B,
+ 33615 - 11905: 0xDCF3,
+ 33616 - 11905: 0xBCF6,
+ 33617 - 11905: 0xDCE8,
+ 33618 - 11905: 0xBBC4,
+ 33619 - 11905: 0xC74C,
+ 33620 - 11905: 0xC0F3,
+ 33621 - 11905: 0xC74D,
+ 33622 - 11905: 0xC74E,
+ 33623 - 11905: 0xC74F,
+ 33624 - 11905: 0xC750,
+ 33625 - 11905: 0xC751,
+ 33626 - 11905: 0xBCD4,
+ 33627 - 11905: 0xDCE9,
+ 33628 - 11905: 0xDCEA,
+ 33629 - 11905: 0xC752,
+ 33630 - 11905: 0xDCF1,
+ 33631 - 11905: 0xDCF6,
+ 33632 - 11905: 0xDCF9,
+ 33633 - 11905: 0xB5B4,
+ 33634 - 11905: 0xC753,
+ 33635 - 11905: 0xC8D9,
+ 33636 - 11905: 0xBBE7,
+ 33637 - 11905: 0xDCFE,
+ 33638 - 11905: 0xDCFD,
+ 33639 - 11905: 0xD3AB,
+ 33640 - 11905: 0xDDA1,
+ 33641 - 11905: 0xDDA3,
+ 33642 - 11905: 0xDDA5,
+ 33643 - 11905: 0xD2F1,
+ 33644 - 11905: 0xDDA4,
+ 33645 - 11905: 0xDDA6,
+ 33646 - 11905: 0xDDA7,
+ 33647 - 11905: 0xD2A9,
+ 33648 - 11905: 0xC754,
+ 33649 - 11905: 0xC755,
+ 33650 - 11905: 0xC756,
+ 33651 - 11905: 0xC757,
+ 33652 - 11905: 0xC758,
+ 33653 - 11905: 0xC759,
+ 33654 - 11905: 0xC75A,
+ 33655 - 11905: 0xBAC9,
+ 33656 - 11905: 0xDDA9,
+ 33657 - 11905: 0xC75B,
+ 33658 - 11905: 0xC75C,
+ 33659 - 11905: 0xDDB6,
+ 33660 - 11905: 0xDDB1,
+ 33661 - 11905: 0xDDB4,
+ 33662 - 11905: 0xC75D,
+ 33663 - 11905: 0xC75E,
+ 33664 - 11905: 0xC75F,
+ 33665 - 11905: 0xC760,
+ 33666 - 11905: 0xC761,
+ 33667 - 11905: 0xC762,
+ 33668 - 11905: 0xC763,
+ 33669 - 11905: 0xDDB0,
+ 33670 - 11905: 0xC6CE,
+ 33671 - 11905: 0xC764,
+ 33672 - 11905: 0xC765,
+ 33673 - 11905: 0xC0F2,
+ 33674 - 11905: 0xC766,
+ 33675 - 11905: 0xC767,
+ 33676 - 11905: 0xC768,
+ 33677 - 11905: 0xC769,
+ 33678 - 11905: 0xC9AF,
+ 33679 - 11905: 0xC76A,
+ 33680 - 11905: 0xC76B,
+ 33681 - 11905: 0xC76C,
+ 33682 - 11905: 0xDCEC,
+ 33683 - 11905: 0xDDAE,
+ 33684 - 11905: 0xC76D,
+ 33685 - 11905: 0xC76E,
+ 33686 - 11905: 0xC76F,
+ 33687 - 11905: 0xC770,
+ 33688 - 11905: 0xDDB7,
+ 33689 - 11905: 0xC771,
+ 33690 - 11905: 0xC772,
+ 33691 - 11905: 0xDCF0,
+ 33692 - 11905: 0xDDAF,
+ 33693 - 11905: 0xC773,
+ 33694 - 11905: 0xDDB8,
+ 33695 - 11905: 0xC774,
+ 33696 - 11905: 0xDDAC,
+ 33697 - 11905: 0xC775,
+ 33698 - 11905: 0xC776,
+ 33699 - 11905: 0xC777,
+ 33700 - 11905: 0xC778,
+ 33701 - 11905: 0xC779,
+ 33702 - 11905: 0xC77A,
+ 33703 - 11905: 0xC77B,
+ 33704 - 11905: 0xDDB9,
+ 33705 - 11905: 0xDDB3,
+ 33706 - 11905: 0xDDAD,
+ 33707 - 11905: 0xC4AA,
+ 33708 - 11905: 0xC77C,
+ 33709 - 11905: 0xC77D,
+ 33710 - 11905: 0xC77E,
+ 33711 - 11905: 0xC780,
+ 33712 - 11905: 0xDDA8,
+ 33713 - 11905: 0xC0B3,
+ 33714 - 11905: 0xC1AB,
+ 33715 - 11905: 0xDDAA,
+ 33716 - 11905: 0xDDAB,
+ 33717 - 11905: 0xC781,
+ 33718 - 11905: 0xDDB2,
+ 33719 - 11905: 0xBBF1,
+ 33720 - 11905: 0xDDB5,
+ 33721 - 11905: 0xD3A8,
+ 33722 - 11905: 0xDDBA,
+ 33723 - 11905: 0xC782,
+ 33724 - 11905: 0xDDBB,
+ 33725 - 11905: 0xC3A7,
+ 33726 - 11905: 0xC783,
+ 33727 - 11905: 0xC784,
+ 33728 - 11905: 0xDDD2,
+ 33729 - 11905: 0xDDBC,
+ 33730 - 11905: 0xC785,
+ 33731 - 11905: 0xC786,
+ 33732 - 11905: 0xC787,
+ 33733 - 11905: 0xDDD1,
+ 33734 - 11905: 0xC788,
+ 33735 - 11905: 0xB9BD,
+ 33736 - 11905: 0xC789,
+ 33737 - 11905: 0xC78A,
+ 33738 - 11905: 0xBED5,
+ 33739 - 11905: 0xC78B,
+ 33740 - 11905: 0xBEFA,
+ 33741 - 11905: 0xC78C,
+ 33742 - 11905: 0xC78D,
+ 33743 - 11905: 0xBACA,
+ 33744 - 11905: 0xC78E,
+ 33745 - 11905: 0xC78F,
+ 33746 - 11905: 0xC790,
+ 33747 - 11905: 0xC791,
+ 33748 - 11905: 0xDDCA,
+ 33749 - 11905: 0xC792,
+ 33750 - 11905: 0xDDC5,
+ 33751 - 11905: 0xC793,
+ 33752 - 11905: 0xDDBF,
+ 33753 - 11905: 0xC794,
+ 33754 - 11905: 0xC795,
+ 33755 - 11905: 0xC796,
+ 33756 - 11905: 0xB2CB,
+ 33757 - 11905: 0xDDC3,
+ 33758 - 11905: 0xC797,
+ 33759 - 11905: 0xDDCB,
+ 33760 - 11905: 0xB2A4,
+ 33761 - 11905: 0xDDD5,
+ 33762 - 11905: 0xC798,
+ 33763 - 11905: 0xC799,
+ 33764 - 11905: 0xC79A,
+ 33765 - 11905: 0xDDBE,
+ 33766 - 11905: 0xC79B,
+ 33767 - 11905: 0xC79C,
+ 33768 - 11905: 0xC79D,
+ 33769 - 11905: 0xC6D0,
+ 33770 - 11905: 0xDDD0,
+ 33771 - 11905: 0xC79E,
+ 33772 - 11905: 0xC79F,
+ 33773 - 11905: 0xC7A0,
+ 33774 - 11905: 0xC840,
+ 33775 - 11905: 0xC841,
+ 33776 - 11905: 0xDDD4,
+ 33777 - 11905: 0xC1E2,
+ 33778 - 11905: 0xB7C6,
+ 33779 - 11905: 0xC842,
+ 33780 - 11905: 0xC843,
+ 33781 - 11905: 0xC844,
+ 33782 - 11905: 0xC845,
+ 33783 - 11905: 0xC846,
+ 33784 - 11905: 0xDDCE,
+ 33785 - 11905: 0xDDCF,
+ 33786 - 11905: 0xC847,
+ 33787 - 11905: 0xC848,
+ 33788 - 11905: 0xC849,
+ 33789 - 11905: 0xDDC4,
+ 33790 - 11905: 0xC84A,
+ 33791 - 11905: 0xC84B,
+ 33792 - 11905: 0xC84C,
+ 33793 - 11905: 0xDDBD,
+ 33794 - 11905: 0xC84D,
+ 33795 - 11905: 0xDDCD,
+ 33796 - 11905: 0xCCD1,
+ 33797 - 11905: 0xC84E,
+ 33798 - 11905: 0xDDC9,
+ 33799 - 11905: 0xC84F,
+ 33800 - 11905: 0xC850,
+ 33801 - 11905: 0xC851,
+ 33802 - 11905: 0xC852,
+ 33803 - 11905: 0xDDC2,
+ 33804 - 11905: 0xC3C8,
+ 33805 - 11905: 0xC6BC,
+ 33806 - 11905: 0xCEAE,
+ 33807 - 11905: 0xDDCC,
+ 33808 - 11905: 0xC853,
+ 33809 - 11905: 0xDDC8,
+ 33810 - 11905: 0xC854,
+ 33811 - 11905: 0xC855,
+ 33812 - 11905: 0xC856,
+ 33813 - 11905: 0xC857,
+ 33814 - 11905: 0xC858,
+ 33815 - 11905: 0xC859,
+ 33816 - 11905: 0xDDC1,
+ 33817 - 11905: 0xC85A,
+ 33818 - 11905: 0xC85B,
+ 33819 - 11905: 0xC85C,
+ 33820 - 11905: 0xDDC6,
+ 33821 - 11905: 0xC2DC,
+ 33822 - 11905: 0xC85D,
+ 33823 - 11905: 0xC85E,
+ 33824 - 11905: 0xC85F,
+ 33825 - 11905: 0xC860,
+ 33826 - 11905: 0xC861,
+ 33827 - 11905: 0xC862,
+ 33828 - 11905: 0xD3A9,
+ 33829 - 11905: 0xD3AA,
+ 33830 - 11905: 0xDDD3,
+ 33831 - 11905: 0xCFF4,
+ 33832 - 11905: 0xC8F8,
+ 33833 - 11905: 0xC863,
+ 33834 - 11905: 0xC864,
+ 33835 - 11905: 0xC865,
+ 33836 - 11905: 0xC866,
+ 33837 - 11905: 0xC867,
+ 33838 - 11905: 0xC868,
+ 33839 - 11905: 0xC869,
+ 33840 - 11905: 0xC86A,
+ 33841 - 11905: 0xDDE6,
+ 33842 - 11905: 0xC86B,
+ 33843 - 11905: 0xC86C,
+ 33844 - 11905: 0xC86D,
+ 33845 - 11905: 0xC86E,
+ 33846 - 11905: 0xC86F,
+ 33847 - 11905: 0xC870,
+ 33848 - 11905: 0xDDC7,
+ 33849 - 11905: 0xC871,
+ 33850 - 11905: 0xC872,
+ 33851 - 11905: 0xC873,
+ 33852 - 11905: 0xDDE0,
+ 33853 - 11905: 0xC2E4,
+ 33854 - 11905: 0xC874,
+ 33855 - 11905: 0xC875,
+ 33856 - 11905: 0xC876,
+ 33857 - 11905: 0xC877,
+ 33858 - 11905: 0xC878,
+ 33859 - 11905: 0xC879,
+ 33860 - 11905: 0xC87A,
+ 33861 - 11905: 0xC87B,
+ 33862 - 11905: 0xDDE1,
+ 33863 - 11905: 0xC87C,
+ 33864 - 11905: 0xC87D,
+ 33865 - 11905: 0xC87E,
+ 33866 - 11905: 0xC880,
+ 33867 - 11905: 0xC881,
+ 33868 - 11905: 0xC882,
+ 33869 - 11905: 0xC883,
+ 33870 - 11905: 0xC884,
+ 33871 - 11905: 0xC885,
+ 33872 - 11905: 0xC886,
+ 33873 - 11905: 0xDDD7,
+ 33874 - 11905: 0xC887,
+ 33875 - 11905: 0xC888,
+ 33876 - 11905: 0xC889,
+ 33877 - 11905: 0xC88A,
+ 33878 - 11905: 0xC88B,
+ 33879 - 11905: 0xD6F8,
+ 33880 - 11905: 0xC88C,
+ 33881 - 11905: 0xDDD9,
+ 33882 - 11905: 0xDDD8,
+ 33883 - 11905: 0xB8F0,
+ 33884 - 11905: 0xDDD6,
+ 33885 - 11905: 0xC88D,
+ 33886 - 11905: 0xC88E,
+ 33887 - 11905: 0xC88F,
+ 33888 - 11905: 0xC890,
+ 33889 - 11905: 0xC6CF,
+ 33890 - 11905: 0xC891,
+ 33891 - 11905: 0xB6AD,
+ 33892 - 11905: 0xC892,
+ 33893 - 11905: 0xC893,
+ 33894 - 11905: 0xC894,
+ 33895 - 11905: 0xC895,
+ 33896 - 11905: 0xC896,
+ 33897 - 11905: 0xDDE2,
+ 33898 - 11905: 0xC897,
+ 33899 - 11905: 0xBAF9,
+ 33900 - 11905: 0xD4E1,
+ 33901 - 11905: 0xDDE7,
+ 33902 - 11905: 0xC898,
+ 33903 - 11905: 0xC899,
+ 33904 - 11905: 0xC89A,
+ 33905 - 11905: 0xB4D0,
+ 33906 - 11905: 0xC89B,
+ 33907 - 11905: 0xDDDA,
+ 33908 - 11905: 0xC89C,
+ 33909 - 11905: 0xBFFB,
+ 33910 - 11905: 0xDDE3,
+ 33911 - 11905: 0xC89D,
+ 33912 - 11905: 0xDDDF,
+ 33913 - 11905: 0xC89E,
+ 33914 - 11905: 0xDDDD,
+ 33915 - 11905: 0xC89F,
+ 33916 - 11905: 0xC8A0,
+ 33917 - 11905: 0xC940,
+ 33918 - 11905: 0xC941,
+ 33919 - 11905: 0xC942,
+ 33920 - 11905: 0xC943,
+ 33921 - 11905: 0xC944,
+ 33922 - 11905: 0xB5D9,
+ 33923 - 11905: 0xC945,
+ 33924 - 11905: 0xC946,
+ 33925 - 11905: 0xC947,
+ 33926 - 11905: 0xC948,
+ 33927 - 11905: 0xDDDB,
+ 33928 - 11905: 0xDDDC,
+ 33929 - 11905: 0xDDDE,
+ 33930 - 11905: 0xC949,
+ 33931 - 11905: 0xBDAF,
+ 33932 - 11905: 0xDDE4,
+ 33933 - 11905: 0xC94A,
+ 33934 - 11905: 0xDDE5,
+ 33935 - 11905: 0xC94B,
+ 33936 - 11905: 0xC94C,
+ 33937 - 11905: 0xC94D,
+ 33938 - 11905: 0xC94E,
+ 33939 - 11905: 0xC94F,
+ 33940 - 11905: 0xC950,
+ 33941 - 11905: 0xC951,
+ 33942 - 11905: 0xC952,
+ 33943 - 11905: 0xDDF5,
+ 33944 - 11905: 0xC953,
+ 33945 - 11905: 0xC3C9,
+ 33946 - 11905: 0xC954,
+ 33947 - 11905: 0xC955,
+ 33948 - 11905: 0xCBE2,
+ 33949 - 11905: 0xC956,
+ 33950 - 11905: 0xC957,
+ 33951 - 11905: 0xC958,
+ 33952 - 11905: 0xC959,
+ 33953 - 11905: 0xDDF2,
+ 33954 - 11905: 0xC95A,
+ 33955 - 11905: 0xC95B,
+ 33956 - 11905: 0xC95C,
+ 33957 - 11905: 0xC95D,
+ 33958 - 11905: 0xC95E,
+ 33959 - 11905: 0xC95F,
+ 33960 - 11905: 0xC960,
+ 33961 - 11905: 0xC961,
+ 33962 - 11905: 0xC962,
+ 33963 - 11905: 0xC963,
+ 33964 - 11905: 0xC964,
+ 33965 - 11905: 0xC965,
+ 33966 - 11905: 0xC966,
+ 33967 - 11905: 0xD8E1,
+ 33968 - 11905: 0xC967,
+ 33969 - 11905: 0xC968,
+ 33970 - 11905: 0xC6D1,
+ 33971 - 11905: 0xC969,
+ 33972 - 11905: 0xDDF4,
+ 33973 - 11905: 0xC96A,
+ 33974 - 11905: 0xC96B,
+ 33975 - 11905: 0xC96C,
+ 33976 - 11905: 0xD5F4,
+ 33977 - 11905: 0xDDF3,
+ 33978 - 11905: 0xDDF0,
+ 33979 - 11905: 0xC96D,
+ 33980 - 11905: 0xC96E,
+ 33981 - 11905: 0xDDEC,
+ 33982 - 11905: 0xC96F,
+ 33983 - 11905: 0xDDEF,
+ 33984 - 11905: 0xC970,
+ 33985 - 11905: 0xDDE8,
+ 33986 - 11905: 0xC971,
+ 33987 - 11905: 0xC972,
+ 33988 - 11905: 0xD0EE,
+ 33989 - 11905: 0xC973,
+ 33990 - 11905: 0xC974,
+ 33991 - 11905: 0xC975,
+ 33992 - 11905: 0xC976,
+ 33993 - 11905: 0xC8D8,
+ 33994 - 11905: 0xDDEE,
+ 33995 - 11905: 0xC977,
+ 33996 - 11905: 0xC978,
+ 33997 - 11905: 0xDDE9,
+ 33998 - 11905: 0xC979,
+ 33999 - 11905: 0xC97A,
+ 34000 - 11905: 0xDDEA,
+ 34001 - 11905: 0xCBF2,
+ 34002 - 11905: 0xC97B,
+ 34003 - 11905: 0xDDED,
+ 34004 - 11905: 0xC97C,
+ 34005 - 11905: 0xC97D,
+ 34006 - 11905: 0xB1CD,
+ 34007 - 11905: 0xC97E,
+ 34008 - 11905: 0xC980,
+ 34009 - 11905: 0xC981,
+ 34010 - 11905: 0xC982,
+ 34011 - 11905: 0xC983,
+ 34012 - 11905: 0xC984,
+ 34013 - 11905: 0xC0B6,
+ 34014 - 11905: 0xC985,
+ 34015 - 11905: 0xBCBB,
+ 34016 - 11905: 0xDDF1,
+ 34017 - 11905: 0xC986,
+ 34018 - 11905: 0xC987,
+ 34019 - 11905: 0xDDF7,
+ 34020 - 11905: 0xC988,
+ 34021 - 11905: 0xDDF6,
+ 34022 - 11905: 0xDDEB,
+ 34023 - 11905: 0xC989,
+ 34024 - 11905: 0xC98A,
+ 34025 - 11905: 0xC98B,
+ 34026 - 11905: 0xC98C,
+ 34027 - 11905: 0xC98D,
+ 34028 - 11905: 0xC5EE,
+ 34029 - 11905: 0xC98E,
+ 34030 - 11905: 0xC98F,
+ 34031 - 11905: 0xC990,
+ 34032 - 11905: 0xDDFB,
+ 34033 - 11905: 0xC991,
+ 34034 - 11905: 0xC992,
+ 34035 - 11905: 0xC993,
+ 34036 - 11905: 0xC994,
+ 34037 - 11905: 0xC995,
+ 34038 - 11905: 0xC996,
+ 34039 - 11905: 0xC997,
+ 34040 - 11905: 0xC998,
+ 34041 - 11905: 0xC999,
+ 34042 - 11905: 0xC99A,
+ 34043 - 11905: 0xC99B,
+ 34044 - 11905: 0xDEA4,
+ 34045 - 11905: 0xC99C,
+ 34046 - 11905: 0xC99D,
+ 34047 - 11905: 0xDEA3,
+ 34048 - 11905: 0xC99E,
+ 34049 - 11905: 0xC99F,
+ 34050 - 11905: 0xC9A0,
+ 34051 - 11905: 0xCA40,
+ 34052 - 11905: 0xCA41,
+ 34053 - 11905: 0xCA42,
+ 34054 - 11905: 0xCA43,
+ 34055 - 11905: 0xCA44,
+ 34056 - 11905: 0xCA45,
+ 34057 - 11905: 0xCA46,
+ 34058 - 11905: 0xCA47,
+ 34059 - 11905: 0xCA48,
+ 34060 - 11905: 0xDDF8,
+ 34061 - 11905: 0xCA49,
+ 34062 - 11905: 0xCA4A,
+ 34063 - 11905: 0xCA4B,
+ 34064 - 11905: 0xCA4C,
+ 34065 - 11905: 0xC3EF,
+ 34066 - 11905: 0xCA4D,
+ 34067 - 11905: 0xC2FB,
+ 34068 - 11905: 0xCA4E,
+ 34069 - 11905: 0xCA4F,
+ 34070 - 11905: 0xCA50,
+ 34071 - 11905: 0xD5E1,
+ 34072 - 11905: 0xCA51,
+ 34073 - 11905: 0xCA52,
+ 34074 - 11905: 0xCEB5,
+ 34075 - 11905: 0xCA53,
+ 34076 - 11905: 0xCA54,
+ 34077 - 11905: 0xCA55,
+ 34078 - 11905: 0xCA56,
+ 34079 - 11905: 0xDDFD,
+ 34080 - 11905: 0xCA57,
+ 34081 - 11905: 0xB2CC,
+ 34082 - 11905: 0xCA58,
+ 34083 - 11905: 0xCA59,
+ 34084 - 11905: 0xCA5A,
+ 34085 - 11905: 0xCA5B,
+ 34086 - 11905: 0xCA5C,
+ 34087 - 11905: 0xCA5D,
+ 34088 - 11905: 0xCA5E,
+ 34089 - 11905: 0xCA5F,
+ 34090 - 11905: 0xCA60,
+ 34091 - 11905: 0xC4E8,
+ 34092 - 11905: 0xCADF,
+ 34093 - 11905: 0xCA61,
+ 34094 - 11905: 0xCA62,
+ 34095 - 11905: 0xCA63,
+ 34096 - 11905: 0xCA64,
+ 34097 - 11905: 0xCA65,
+ 34098 - 11905: 0xCA66,
+ 34099 - 11905: 0xCA67,
+ 34100 - 11905: 0xCA68,
+ 34101 - 11905: 0xCA69,
+ 34102 - 11905: 0xCA6A,
+ 34103 - 11905: 0xC7BE,
+ 34104 - 11905: 0xDDFA,
+ 34105 - 11905: 0xDDFC,
+ 34106 - 11905: 0xDDFE,
+ 34107 - 11905: 0xDEA2,
+ 34108 - 11905: 0xB0AA,
+ 34109 - 11905: 0xB1CE,
+ 34110 - 11905: 0xCA6B,
+ 34111 - 11905: 0xCA6C,
+ 34112 - 11905: 0xCA6D,
+ 34113 - 11905: 0xCA6E,
+ 34114 - 11905: 0xCA6F,
+ 34115 - 11905: 0xDEAC,
+ 34116 - 11905: 0xCA70,
+ 34117 - 11905: 0xCA71,
+ 34118 - 11905: 0xCA72,
+ 34119 - 11905: 0xCA73,
+ 34120 - 11905: 0xDEA6,
+ 34121 - 11905: 0xBDB6,
+ 34122 - 11905: 0xC8EF,
+ 34123 - 11905: 0xCA74,
+ 34124 - 11905: 0xCA75,
+ 34125 - 11905: 0xCA76,
+ 34126 - 11905: 0xCA77,
+ 34127 - 11905: 0xCA78,
+ 34128 - 11905: 0xCA79,
+ 34129 - 11905: 0xCA7A,
+ 34130 - 11905: 0xCA7B,
+ 34131 - 11905: 0xCA7C,
+ 34132 - 11905: 0xCA7D,
+ 34133 - 11905: 0xCA7E,
+ 34134 - 11905: 0xDEA1,
+ 34135 - 11905: 0xCA80,
+ 34136 - 11905: 0xCA81,
+ 34137 - 11905: 0xDEA5,
+ 34138 - 11905: 0xCA82,
+ 34139 - 11905: 0xCA83,
+ 34140 - 11905: 0xCA84,
+ 34141 - 11905: 0xCA85,
+ 34142 - 11905: 0xDEA9,
+ 34143 - 11905: 0xCA86,
+ 34144 - 11905: 0xCA87,
+ 34145 - 11905: 0xCA88,
+ 34146 - 11905: 0xCA89,
+ 34147 - 11905: 0xCA8A,
+ 34148 - 11905: 0xDEA8,
+ 34149 - 11905: 0xCA8B,
+ 34150 - 11905: 0xCA8C,
+ 34151 - 11905: 0xCA8D,
+ 34152 - 11905: 0xDEA7,
+ 34153 - 11905: 0xCA8E,
+ 34154 - 11905: 0xCA8F,
+ 34155 - 11905: 0xCA90,
+ 34156 - 11905: 0xCA91,
+ 34157 - 11905: 0xCA92,
+ 34158 - 11905: 0xCA93,
+ 34159 - 11905: 0xCA94,
+ 34160 - 11905: 0xCA95,
+ 34161 - 11905: 0xCA96,
+ 34162 - 11905: 0xDEAD,
+ 34163 - 11905: 0xCA97,
+ 34164 - 11905: 0xD4CC,
+ 34165 - 11905: 0xCA98,
+ 34166 - 11905: 0xCA99,
+ 34167 - 11905: 0xCA9A,
+ 34168 - 11905: 0xCA9B,
+ 34169 - 11905: 0xDEB3,
+ 34170 - 11905: 0xDEAA,
+ 34171 - 11905: 0xDEAE,
+ 34172 - 11905: 0xCA9C,
+ 34173 - 11905: 0xCA9D,
+ 34174 - 11905: 0xC0D9,
+ 34175 - 11905: 0xCA9E,
+ 34176 - 11905: 0xCA9F,
+ 34177 - 11905: 0xCAA0,
+ 34178 - 11905: 0xCB40,
+ 34179 - 11905: 0xCB41,
+ 34180 - 11905: 0xB1A1,
+ 34181 - 11905: 0xDEB6,
+ 34182 - 11905: 0xCB42,
+ 34183 - 11905: 0xDEB1,
+ 34184 - 11905: 0xCB43,
+ 34185 - 11905: 0xCB44,
+ 34186 - 11905: 0xCB45,
+ 34187 - 11905: 0xCB46,
+ 34188 - 11905: 0xCB47,
+ 34189 - 11905: 0xCB48,
+ 34190 - 11905: 0xCB49,
+ 34191 - 11905: 0xDEB2,
+ 34192 - 11905: 0xCB4A,
+ 34193 - 11905: 0xCB4B,
+ 34194 - 11905: 0xCB4C,
+ 34195 - 11905: 0xCB4D,
+ 34196 - 11905: 0xCB4E,
+ 34197 - 11905: 0xCB4F,
+ 34198 - 11905: 0xCB50,
+ 34199 - 11905: 0xCB51,
+ 34200 - 11905: 0xCB52,
+ 34201 - 11905: 0xCB53,
+ 34202 - 11905: 0xCB54,
+ 34203 - 11905: 0xD1A6,
+ 34204 - 11905: 0xDEB5,
+ 34205 - 11905: 0xCB55,
+ 34206 - 11905: 0xCB56,
+ 34207 - 11905: 0xCB57,
+ 34208 - 11905: 0xCB58,
+ 34209 - 11905: 0xCB59,
+ 34210 - 11905: 0xCB5A,
+ 34211 - 11905: 0xCB5B,
+ 34212 - 11905: 0xDEAF,
+ 34213 - 11905: 0xCB5C,
+ 34214 - 11905: 0xCB5D,
+ 34215 - 11905: 0xCB5E,
+ 34216 - 11905: 0xDEB0,
+ 34217 - 11905: 0xCB5F,
+ 34218 - 11905: 0xD0BD,
+ 34219 - 11905: 0xCB60,
+ 34220 - 11905: 0xCB61,
+ 34221 - 11905: 0xCB62,
+ 34222 - 11905: 0xDEB4,
+ 34223 - 11905: 0xCAED,
+ 34224 - 11905: 0xDEB9,
+ 34225 - 11905: 0xCB63,
+ 34226 - 11905: 0xCB64,
+ 34227 - 11905: 0xCB65,
+ 34228 - 11905: 0xCB66,
+ 34229 - 11905: 0xCB67,
+ 34230 - 11905: 0xCB68,
+ 34231 - 11905: 0xDEB8,
+ 34232 - 11905: 0xCB69,
+ 34233 - 11905: 0xDEB7,
+ 34234 - 11905: 0xCB6A,
+ 34235 - 11905: 0xCB6B,
+ 34236 - 11905: 0xCB6C,
+ 34237 - 11905: 0xCB6D,
+ 34238 - 11905: 0xCB6E,
+ 34239 - 11905: 0xCB6F,
+ 34240 - 11905: 0xCB70,
+ 34241 - 11905: 0xDEBB,
+ 34242 - 11905: 0xCB71,
+ 34243 - 11905: 0xCB72,
+ 34244 - 11905: 0xCB73,
+ 34245 - 11905: 0xCB74,
+ 34246 - 11905: 0xCB75,
+ 34247 - 11905: 0xCB76,
+ 34248 - 11905: 0xCB77,
+ 34249 - 11905: 0xBDE5,
+ 34250 - 11905: 0xCB78,
+ 34251 - 11905: 0xCB79,
+ 34252 - 11905: 0xCB7A,
+ 34253 - 11905: 0xCB7B,
+ 34254 - 11905: 0xCB7C,
+ 34255 - 11905: 0xB2D8,
+ 34256 - 11905: 0xC3EA,
+ 34257 - 11905: 0xCB7D,
+ 34258 - 11905: 0xCB7E,
+ 34259 - 11905: 0xDEBA,
+ 34260 - 11905: 0xCB80,
+ 34261 - 11905: 0xC5BA,
+ 34262 - 11905: 0xCB81,
+ 34263 - 11905: 0xCB82,
+ 34264 - 11905: 0xCB83,
+ 34265 - 11905: 0xCB84,
+ 34266 - 11905: 0xCB85,
+ 34267 - 11905: 0xCB86,
+ 34268 - 11905: 0xDEBC,
+ 34269 - 11905: 0xCB87,
+ 34270 - 11905: 0xCB88,
+ 34271 - 11905: 0xCB89,
+ 34272 - 11905: 0xCB8A,
+ 34273 - 11905: 0xCB8B,
+ 34274 - 11905: 0xCB8C,
+ 34275 - 11905: 0xCB8D,
+ 34276 - 11905: 0xCCD9,
+ 34277 - 11905: 0xCB8E,
+ 34278 - 11905: 0xCB8F,
+ 34279 - 11905: 0xCB90,
+ 34280 - 11905: 0xCB91,
+ 34281 - 11905: 0xB7AA,
+ 34282 - 11905: 0xCB92,
+ 34283 - 11905: 0xCB93,
+ 34284 - 11905: 0xCB94,
+ 34285 - 11905: 0xCB95,
+ 34286 - 11905: 0xCB96,
+ 34287 - 11905: 0xCB97,
+ 34288 - 11905: 0xCB98,
+ 34289 - 11905: 0xCB99,
+ 34290 - 11905: 0xCB9A,
+ 34291 - 11905: 0xCB9B,
+ 34292 - 11905: 0xCB9C,
+ 34293 - 11905: 0xCB9D,
+ 34294 - 11905: 0xCB9E,
+ 34295 - 11905: 0xCB9F,
+ 34296 - 11905: 0xCBA0,
+ 34297 - 11905: 0xCC40,
+ 34298 - 11905: 0xCC41,
+ 34299 - 11905: 0xD4E5,
+ 34300 - 11905: 0xCC42,
+ 34301 - 11905: 0xCC43,
+ 34302 - 11905: 0xCC44,
+ 34303 - 11905: 0xDEBD,
+ 34304 - 11905: 0xCC45,
+ 34305 - 11905: 0xCC46,
+ 34306 - 11905: 0xCC47,
+ 34307 - 11905: 0xCC48,
+ 34308 - 11905: 0xCC49,
+ 34309 - 11905: 0xDEBF,
+ 34310 - 11905: 0xCC4A,
+ 34311 - 11905: 0xCC4B,
+ 34312 - 11905: 0xCC4C,
+ 34313 - 11905: 0xCC4D,
+ 34314 - 11905: 0xCC4E,
+ 34315 - 11905: 0xCC4F,
+ 34316 - 11905: 0xCC50,
+ 34317 - 11905: 0xCC51,
+ 34318 - 11905: 0xCC52,
+ 34319 - 11905: 0xCC53,
+ 34320 - 11905: 0xCC54,
+ 34321 - 11905: 0xC4A2,
+ 34322 - 11905: 0xCC55,
+ 34323 - 11905: 0xCC56,
+ 34324 - 11905: 0xCC57,
+ 34325 - 11905: 0xCC58,
+ 34326 - 11905: 0xDEC1,
+ 34327 - 11905: 0xCC59,
+ 34328 - 11905: 0xCC5A,
+ 34329 - 11905: 0xCC5B,
+ 34330 - 11905: 0xCC5C,
+ 34331 - 11905: 0xCC5D,
+ 34332 - 11905: 0xCC5E,
+ 34333 - 11905: 0xCC5F,
+ 34334 - 11905: 0xCC60,
+ 34335 - 11905: 0xCC61,
+ 34336 - 11905: 0xCC62,
+ 34337 - 11905: 0xCC63,
+ 34338 - 11905: 0xCC64,
+ 34339 - 11905: 0xCC65,
+ 34340 - 11905: 0xCC66,
+ 34341 - 11905: 0xCC67,
+ 34342 - 11905: 0xCC68,
+ 34343 - 11905: 0xDEBE,
+ 34344 - 11905: 0xCC69,
+ 34345 - 11905: 0xDEC0,
+ 34346 - 11905: 0xCC6A,
+ 34347 - 11905: 0xCC6B,
+ 34348 - 11905: 0xCC6C,
+ 34349 - 11905: 0xCC6D,
+ 34350 - 11905: 0xCC6E,
+ 34351 - 11905: 0xCC6F,
+ 34352 - 11905: 0xCC70,
+ 34353 - 11905: 0xCC71,
+ 34354 - 11905: 0xCC72,
+ 34355 - 11905: 0xCC73,
+ 34356 - 11905: 0xCC74,
+ 34357 - 11905: 0xCC75,
+ 34358 - 11905: 0xCC76,
+ 34359 - 11905: 0xCC77,
+ 34360 - 11905: 0xD5BA,
+ 34361 - 11905: 0xCC78,
+ 34362 - 11905: 0xCC79,
+ 34363 - 11905: 0xCC7A,
+ 34364 - 11905: 0xDEC2,
+ 34365 - 11905: 0xCC7B,
+ 34366 - 11905: 0xCC7C,
+ 34367 - 11905: 0xCC7D,
+ 34368 - 11905: 0xCC7E,
+ 34369 - 11905: 0xCC80,
+ 34370 - 11905: 0xCC81,
+ 34371 - 11905: 0xCC82,
+ 34372 - 11905: 0xCC83,
+ 34373 - 11905: 0xCC84,
+ 34374 - 11905: 0xCC85,
+ 34375 - 11905: 0xCC86,
+ 34376 - 11905: 0xCC87,
+ 34377 - 11905: 0xCC88,
+ 34378 - 11905: 0xCC89,
+ 34379 - 11905: 0xCC8A,
+ 34380 - 11905: 0xCC8B,
+ 34381 - 11905: 0xF2AE,
+ 34382 - 11905: 0xBBA2,
+ 34383 - 11905: 0xC2B2,
+ 34384 - 11905: 0xC5B0,
+ 34385 - 11905: 0xC2C7,
+ 34386 - 11905: 0xCC8C,
+ 34387 - 11905: 0xCC8D,
+ 34388 - 11905: 0xF2AF,
+ 34389 - 11905: 0xCC8E,
+ 34390 - 11905: 0xCC8F,
+ 34391 - 11905: 0xCC90,
+ 34392 - 11905: 0xCC91,
+ 34393 - 11905: 0xCC92,
+ 34394 - 11905: 0xD0E9,
+ 34395 - 11905: 0xCC93,
+ 34396 - 11905: 0xCC94,
+ 34397 - 11905: 0xCC95,
+ 34398 - 11905: 0xD3DD,
+ 34399 - 11905: 0xCC96,
+ 34400 - 11905: 0xCC97,
+ 34401 - 11905: 0xCC98,
+ 34402 - 11905: 0xEBBD,
+ 34403 - 11905: 0xCC99,
+ 34404 - 11905: 0xCC9A,
+ 34405 - 11905: 0xCC9B,
+ 34406 - 11905: 0xCC9C,
+ 34407 - 11905: 0xCC9D,
+ 34408 - 11905: 0xCC9E,
+ 34409 - 11905: 0xCC9F,
+ 34410 - 11905: 0xCCA0,
+ 34411 - 11905: 0xB3E6,
+ 34412 - 11905: 0xF2B0,
+ 34413 - 11905: 0xCD40,
+ 34414 - 11905: 0xF2B1,
+ 34415 - 11905: 0xCD41,
+ 34416 - 11905: 0xCD42,
+ 34417 - 11905: 0xCAAD,
+ 34418 - 11905: 0xCD43,
+ 34419 - 11905: 0xCD44,
+ 34420 - 11905: 0xCD45,
+ 34421 - 11905: 0xCD46,
+ 34422 - 11905: 0xCD47,
+ 34423 - 11905: 0xCD48,
+ 34424 - 11905: 0xCD49,
+ 34425 - 11905: 0xBAE7,
+ 34426 - 11905: 0xF2B3,
+ 34427 - 11905: 0xF2B5,
+ 34428 - 11905: 0xF2B4,
+ 34429 - 11905: 0xCBE4,
+ 34430 - 11905: 0xCFBA,
+ 34431 - 11905: 0xF2B2,
+ 34432 - 11905: 0xCAB4,
+ 34433 - 11905: 0xD2CF,
+ 34434 - 11905: 0xC2EC,
+ 34435 - 11905: 0xCD4A,
+ 34436 - 11905: 0xCD4B,
+ 34437 - 11905: 0xCD4C,
+ 34438 - 11905: 0xCD4D,
+ 34439 - 11905: 0xCD4E,
+ 34440 - 11905: 0xCD4F,
+ 34441 - 11905: 0xCD50,
+ 34442 - 11905: 0xCEC3,
+ 34443 - 11905: 0xF2B8,
+ 34444 - 11905: 0xB0F6,
+ 34445 - 11905: 0xF2B7,
+ 34446 - 11905: 0xCD51,
+ 34447 - 11905: 0xCD52,
+ 34448 - 11905: 0xCD53,
+ 34449 - 11905: 0xCD54,
+ 34450 - 11905: 0xCD55,
+ 34451 - 11905: 0xF2BE,
+ 34452 - 11905: 0xCD56,
+ 34453 - 11905: 0xB2CF,
+ 34454 - 11905: 0xCD57,
+ 34455 - 11905: 0xCD58,
+ 34456 - 11905: 0xCD59,
+ 34457 - 11905: 0xCD5A,
+ 34458 - 11905: 0xCD5B,
+ 34459 - 11905: 0xCD5C,
+ 34460 - 11905: 0xD1C1,
+ 34461 - 11905: 0xF2BA,
+ 34462 - 11905: 0xCD5D,
+ 34463 - 11905: 0xCD5E,
+ 34464 - 11905: 0xCD5F,
+ 34465 - 11905: 0xCD60,
+ 34466 - 11905: 0xCD61,
+ 34467 - 11905: 0xF2BC,
+ 34468 - 11905: 0xD4E9,
+ 34469 - 11905: 0xCD62,
+ 34470 - 11905: 0xCD63,
+ 34471 - 11905: 0xF2BB,
+ 34472 - 11905: 0xF2B6,
+ 34473 - 11905: 0xF2BF,
+ 34474 - 11905: 0xF2BD,
+ 34475 - 11905: 0xCD64,
+ 34476 - 11905: 0xF2B9,
+ 34477 - 11905: 0xCD65,
+ 34478 - 11905: 0xCD66,
+ 34479 - 11905: 0xF2C7,
+ 34480 - 11905: 0xF2C4,
+ 34481 - 11905: 0xF2C6,
+ 34482 - 11905: 0xCD67,
+ 34483 - 11905: 0xCD68,
+ 34484 - 11905: 0xF2CA,
+ 34485 - 11905: 0xF2C2,
+ 34486 - 11905: 0xF2C0,
+ 34487 - 11905: 0xCD69,
+ 34488 - 11905: 0xCD6A,
+ 34489 - 11905: 0xCD6B,
+ 34490 - 11905: 0xF2C5,
+ 34491 - 11905: 0xCD6C,
+ 34492 - 11905: 0xCD6D,
+ 34493 - 11905: 0xCD6E,
+ 34494 - 11905: 0xCD6F,
+ 34495 - 11905: 0xCD70,
+ 34496 - 11905: 0xD6FB,
+ 34497 - 11905: 0xCD71,
+ 34498 - 11905: 0xCD72,
+ 34499 - 11905: 0xCD73,
+ 34500 - 11905: 0xF2C1,
+ 34501 - 11905: 0xCD74,
+ 34502 - 11905: 0xC7F9,
+ 34503 - 11905: 0xC9DF,
+ 34504 - 11905: 0xCD75,
+ 34505 - 11905: 0xF2C8,
+ 34506 - 11905: 0xB9C6,
+ 34507 - 11905: 0xB5B0,
+ 34508 - 11905: 0xCD76,
+ 34509 - 11905: 0xCD77,
+ 34510 - 11905: 0xF2C3,
+ 34511 - 11905: 0xF2C9,
+ 34512 - 11905: 0xF2D0,
+ 34513 - 11905: 0xF2D6,
+ 34514 - 11905: 0xCD78,
+ 34515 - 11905: 0xCD79,
+ 34516 - 11905: 0xBBD7,
+ 34517 - 11905: 0xCD7A,
+ 34518 - 11905: 0xCD7B,
+ 34519 - 11905: 0xCD7C,
+ 34520 - 11905: 0xF2D5,
+ 34521 - 11905: 0xCDDC,
+ 34522 - 11905: 0xCD7D,
+ 34523 - 11905: 0xD6EB,
+ 34524 - 11905: 0xCD7E,
+ 34525 - 11905: 0xCD80,
+ 34526 - 11905: 0xF2D2,
+ 34527 - 11905: 0xF2D4,
+ 34528 - 11905: 0xCD81,
+ 34529 - 11905: 0xCD82,
+ 34530 - 11905: 0xCD83,
+ 34531 - 11905: 0xCD84,
+ 34532 - 11905: 0xB8F2,
+ 34533 - 11905: 0xCD85,
+ 34534 - 11905: 0xCD86,
+ 34535 - 11905: 0xCD87,
+ 34536 - 11905: 0xCD88,
+ 34537 - 11905: 0xF2CB,
+ 34538 - 11905: 0xCD89,
+ 34539 - 11905: 0xCD8A,
+ 34540 - 11905: 0xCD8B,
+ 34541 - 11905: 0xF2CE,
+ 34542 - 11905: 0xC2F9,
+ 34543 - 11905: 0xCD8C,
+ 34544 - 11905: 0xD5DD,
+ 34545 - 11905: 0xF2CC,
+ 34546 - 11905: 0xF2CD,
+ 34547 - 11905: 0xF2CF,
+ 34548 - 11905: 0xF2D3,
+ 34549 - 11905: 0xCD8D,
+ 34550 - 11905: 0xCD8E,
+ 34551 - 11905: 0xCD8F,
+ 34552 - 11905: 0xF2D9,
+ 34553 - 11905: 0xD3BC,
+ 34554 - 11905: 0xCD90,
+ 34555 - 11905: 0xCD91,
+ 34556 - 11905: 0xCD92,
+ 34557 - 11905: 0xCD93,
+ 34558 - 11905: 0xB6EA,
+ 34559 - 11905: 0xCD94,
+ 34560 - 11905: 0xCAF1,
+ 34561 - 11905: 0xCD95,
+ 34562 - 11905: 0xB7E4,
+ 34563 - 11905: 0xF2D7,
+ 34564 - 11905: 0xCD96,
+ 34565 - 11905: 0xCD97,
+ 34566 - 11905: 0xCD98,
+ 34567 - 11905: 0xF2D8,
+ 34568 - 11905: 0xF2DA,
+ 34569 - 11905: 0xF2DD,
+ 34570 - 11905: 0xF2DB,
+ 34571 - 11905: 0xCD99,
+ 34572 - 11905: 0xCD9A,
+ 34573 - 11905: 0xF2DC,
+ 34574 - 11905: 0xCD9B,
+ 34575 - 11905: 0xCD9C,
+ 34576 - 11905: 0xCD9D,
+ 34577 - 11905: 0xCD9E,
+ 34578 - 11905: 0xD1D1,
+ 34579 - 11905: 0xF2D1,
+ 34580 - 11905: 0xCD9F,
+ 34581 - 11905: 0xCDC9,
+ 34582 - 11905: 0xCDA0,
+ 34583 - 11905: 0xCECF,
+ 34584 - 11905: 0xD6A9,
+ 34585 - 11905: 0xCE40,
+ 34586 - 11905: 0xF2E3,
+ 34587 - 11905: 0xCE41,
+ 34588 - 11905: 0xC3DB,
+ 34589 - 11905: 0xCE42,
+ 34590 - 11905: 0xF2E0,
+ 34591 - 11905: 0xCE43,
+ 34592 - 11905: 0xCE44,
+ 34593 - 11905: 0xC0AF,
+ 34594 - 11905: 0xF2EC,
+ 34595 - 11905: 0xF2DE,
+ 34596 - 11905: 0xCE45,
+ 34597 - 11905: 0xF2E1,
+ 34598 - 11905: 0xCE46,
+ 34599 - 11905: 0xCE47,
+ 34600 - 11905: 0xCE48,
+ 34601 - 11905: 0xF2E8,
+ 34602 - 11905: 0xCE49,
+ 34603 - 11905: 0xCE4A,
+ 34604 - 11905: 0xCE4B,
+ 34605 - 11905: 0xCE4C,
+ 34606 - 11905: 0xF2E2,
+ 34607 - 11905: 0xCE4D,
+ 34608 - 11905: 0xCE4E,
+ 34609 - 11905: 0xF2E7,
+ 34610 - 11905: 0xCE4F,
+ 34611 - 11905: 0xCE50,
+ 34612 - 11905: 0xF2E6,
+ 34613 - 11905: 0xCE51,
+ 34614 - 11905: 0xCE52,
+ 34615 - 11905: 0xF2E9,
+ 34616 - 11905: 0xCE53,
+ 34617 - 11905: 0xCE54,
+ 34618 - 11905: 0xCE55,
+ 34619 - 11905: 0xF2DF,
+ 34620 - 11905: 0xCE56,
+ 34621 - 11905: 0xCE57,
+ 34622 - 11905: 0xF2E4,
+ 34623 - 11905: 0xF2EA,
+ 34624 - 11905: 0xCE58,
+ 34625 - 11905: 0xCE59,
+ 34626 - 11905: 0xCE5A,
+ 34627 - 11905: 0xCE5B,
+ 34628 - 11905: 0xCE5C,
+ 34629 - 11905: 0xCE5D,
+ 34630 - 11905: 0xCE5E,
+ 34631 - 11905: 0xD3AC,
+ 34632 - 11905: 0xF2E5,
+ 34633 - 11905: 0xB2F5,
+ 34634 - 11905: 0xCE5F,
+ 34635 - 11905: 0xCE60,
+ 34636 - 11905: 0xF2F2,
+ 34637 - 11905: 0xCE61,
+ 34638 - 11905: 0xD0AB,
+ 34639 - 11905: 0xCE62,
+ 34640 - 11905: 0xCE63,
+ 34641 - 11905: 0xCE64,
+ 34642 - 11905: 0xCE65,
+ 34643 - 11905: 0xF2F5,
+ 34644 - 11905: 0xCE66,
+ 34645 - 11905: 0xCE67,
+ 34646 - 11905: 0xCE68,
+ 34647 - 11905: 0xBBC8,
+ 34648 - 11905: 0xCE69,
+ 34649 - 11905: 0xF2F9,
+ 34650 - 11905: 0xCE6A,
+ 34651 - 11905: 0xCE6B,
+ 34652 - 11905: 0xCE6C,
+ 34653 - 11905: 0xCE6D,
+ 34654 - 11905: 0xCE6E,
+ 34655 - 11905: 0xCE6F,
+ 34656 - 11905: 0xF2F0,
+ 34657 - 11905: 0xCE70,
+ 34658 - 11905: 0xCE71,
+ 34659 - 11905: 0xF2F6,
+ 34660 - 11905: 0xF2F8,
+ 34661 - 11905: 0xF2FA,
+ 34662 - 11905: 0xCE72,
+ 34663 - 11905: 0xCE73,
+ 34664 - 11905: 0xCE74,
+ 34665 - 11905: 0xCE75,
+ 34666 - 11905: 0xCE76,
+ 34667 - 11905: 0xCE77,
+ 34668 - 11905: 0xCE78,
+ 34669 - 11905: 0xCE79,
+ 34670 - 11905: 0xF2F3,
+ 34671 - 11905: 0xCE7A,
+ 34672 - 11905: 0xF2F1,
+ 34673 - 11905: 0xCE7B,
+ 34674 - 11905: 0xCE7C,
+ 34675 - 11905: 0xCE7D,
+ 34676 - 11905: 0xBAFB,
+ 34677 - 11905: 0xCE7E,
+ 34678 - 11905: 0xB5FB,
+ 34679 - 11905: 0xCE80,
+ 34680 - 11905: 0xCE81,
+ 34681 - 11905: 0xCE82,
+ 34682 - 11905: 0xCE83,
+ 34683 - 11905: 0xF2EF,
+ 34684 - 11905: 0xF2F7,
+ 34685 - 11905: 0xF2ED,
+ 34686 - 11905: 0xF2EE,
+ 34687 - 11905: 0xCE84,
+ 34688 - 11905: 0xCE85,
+ 34689 - 11905: 0xCE86,
+ 34690 - 11905: 0xF2EB,
+ 34691 - 11905: 0xF3A6,
+ 34692 - 11905: 0xCE87,
+ 34693 - 11905: 0xF3A3,
+ 34694 - 11905: 0xCE88,
+ 34695 - 11905: 0xCE89,
+ 34696 - 11905: 0xF3A2,
+ 34697 - 11905: 0xCE8A,
+ 34698 - 11905: 0xCE8B,
+ 34699 - 11905: 0xF2F4,
+ 34700 - 11905: 0xCE8C,
+ 34701 - 11905: 0xC8DA,
+ 34702 - 11905: 0xCE8D,
+ 34703 - 11905: 0xCE8E,
+ 34704 - 11905: 0xCE8F,
+ 34705 - 11905: 0xCE90,
+ 34706 - 11905: 0xCE91,
+ 34707 - 11905: 0xF2FB,
+ 34708 - 11905: 0xCE92,
+ 34709 - 11905: 0xCE93,
+ 34710 - 11905: 0xCE94,
+ 34711 - 11905: 0xF3A5,
+ 34712 - 11905: 0xCE95,
+ 34713 - 11905: 0xCE96,
+ 34714 - 11905: 0xCE97,
+ 34715 - 11905: 0xCE98,
+ 34716 - 11905: 0xCE99,
+ 34717 - 11905: 0xCE9A,
+ 34718 - 11905: 0xCE9B,
+ 34719 - 11905: 0xC3F8,
+ 34720 - 11905: 0xCE9C,
+ 34721 - 11905: 0xCE9D,
+ 34722 - 11905: 0xCE9E,
+ 34723 - 11905: 0xCE9F,
+ 34724 - 11905: 0xCEA0,
+ 34725 - 11905: 0xCF40,
+ 34726 - 11905: 0xCF41,
+ 34727 - 11905: 0xCF42,
+ 34728 - 11905: 0xF2FD,
+ 34729 - 11905: 0xCF43,
+ 34730 - 11905: 0xCF44,
+ 34731 - 11905: 0xF3A7,
+ 34732 - 11905: 0xF3A9,
+ 34733 - 11905: 0xF3A4,
+ 34734 - 11905: 0xCF45,
+ 34735 - 11905: 0xF2FC,
+ 34736 - 11905: 0xCF46,
+ 34737 - 11905: 0xCF47,
+ 34738 - 11905: 0xCF48,
+ 34739 - 11905: 0xF3AB,
+ 34740 - 11905: 0xCF49,
+ 34741 - 11905: 0xF3AA,
+ 34742 - 11905: 0xCF4A,
+ 34743 - 11905: 0xCF4B,
+ 34744 - 11905: 0xCF4C,
+ 34745 - 11905: 0xCF4D,
+ 34746 - 11905: 0xC2DD,
+ 34747 - 11905: 0xCF4E,
+ 34748 - 11905: 0xCF4F,
+ 34749 - 11905: 0xF3AE,
+ 34750 - 11905: 0xCF50,
+ 34751 - 11905: 0xCF51,
+ 34752 - 11905: 0xF3B0,
+ 34753 - 11905: 0xCF52,
+ 34754 - 11905: 0xCF53,
+ 34755 - 11905: 0xCF54,
+ 34756 - 11905: 0xCF55,
+ 34757 - 11905: 0xCF56,
+ 34758 - 11905: 0xF3A1,
+ 34759 - 11905: 0xCF57,
+ 34760 - 11905: 0xCF58,
+ 34761 - 11905: 0xCF59,
+ 34762 - 11905: 0xF3B1,
+ 34763 - 11905: 0xF3AC,
+ 34764 - 11905: 0xCF5A,
+ 34765 - 11905: 0xCF5B,
+ 34766 - 11905: 0xCF5C,
+ 34767 - 11905: 0xCF5D,
+ 34768 - 11905: 0xCF5E,
+ 34769 - 11905: 0xF3AF,
+ 34770 - 11905: 0xF2FE,
+ 34771 - 11905: 0xF3AD,
+ 34772 - 11905: 0xCF5F,
+ 34773 - 11905: 0xCF60,
+ 34774 - 11905: 0xCF61,
+ 34775 - 11905: 0xCF62,
+ 34776 - 11905: 0xCF63,
+ 34777 - 11905: 0xCF64,
+ 34778 - 11905: 0xCF65,
+ 34779 - 11905: 0xF3B2,
+ 34780 - 11905: 0xCF66,
+ 34781 - 11905: 0xCF67,
+ 34782 - 11905: 0xCF68,
+ 34783 - 11905: 0xCF69,
+ 34784 - 11905: 0xF3B4,
+ 34785 - 11905: 0xCF6A,
+ 34786 - 11905: 0xCF6B,
+ 34787 - 11905: 0xCF6C,
+ 34788 - 11905: 0xCF6D,
+ 34789 - 11905: 0xF3A8,
+ 34790 - 11905: 0xCF6E,
+ 34791 - 11905: 0xCF6F,
+ 34792 - 11905: 0xCF70,
+ 34793 - 11905: 0xCF71,
+ 34794 - 11905: 0xF3B3,
+ 34795 - 11905: 0xCF72,
+ 34796 - 11905: 0xCF73,
+ 34797 - 11905: 0xCF74,
+ 34798 - 11905: 0xF3B5,
+ 34799 - 11905: 0xCF75,
+ 34800 - 11905: 0xCF76,
+ 34801 - 11905: 0xCF77,
+ 34802 - 11905: 0xCF78,
+ 34803 - 11905: 0xCF79,
+ 34804 - 11905: 0xCF7A,
+ 34805 - 11905: 0xCF7B,
+ 34806 - 11905: 0xCF7C,
+ 34807 - 11905: 0xCF7D,
+ 34808 - 11905: 0xCF7E,
+ 34809 - 11905: 0xD0B7,
+ 34810 - 11905: 0xCF80,
+ 34811 - 11905: 0xCF81,
+ 34812 - 11905: 0xCF82,
+ 34813 - 11905: 0xCF83,
+ 34814 - 11905: 0xF3B8,
+ 34815 - 11905: 0xCF84,
+ 34816 - 11905: 0xCF85,
+ 34817 - 11905: 0xCF86,
+ 34818 - 11905: 0xCF87,
+ 34819 - 11905: 0xD9F9,
+ 34820 - 11905: 0xCF88,
+ 34821 - 11905: 0xCF89,
+ 34822 - 11905: 0xCF8A,
+ 34823 - 11905: 0xCF8B,
+ 34824 - 11905: 0xCF8C,
+ 34825 - 11905: 0xCF8D,
+ 34826 - 11905: 0xF3B9,
+ 34827 - 11905: 0xCF8E,
+ 34828 - 11905: 0xCF8F,
+ 34829 - 11905: 0xCF90,
+ 34830 - 11905: 0xCF91,
+ 34831 - 11905: 0xCF92,
+ 34832 - 11905: 0xCF93,
+ 34833 - 11905: 0xCF94,
+ 34834 - 11905: 0xCF95,
+ 34835 - 11905: 0xF3B7,
+ 34836 - 11905: 0xCF96,
+ 34837 - 11905: 0xC8E4,
+ 34838 - 11905: 0xF3B6,
+ 34839 - 11905: 0xCF97,
+ 34840 - 11905: 0xCF98,
+ 34841 - 11905: 0xCF99,
+ 34842 - 11905: 0xCF9A,
+ 34843 - 11905: 0xF3BA,
+ 34844 - 11905: 0xCF9B,
+ 34845 - 11905: 0xCF9C,
+ 34846 - 11905: 0xCF9D,
+ 34847 - 11905: 0xCF9E,
+ 34848 - 11905: 0xCF9F,
+ 34849 - 11905: 0xF3BB,
+ 34850 - 11905: 0xB4C0,
+ 34851 - 11905: 0xCFA0,
+ 34852 - 11905: 0xD040,
+ 34853 - 11905: 0xD041,
+ 34854 - 11905: 0xD042,
+ 34855 - 11905: 0xD043,
+ 34856 - 11905: 0xD044,
+ 34857 - 11905: 0xD045,
+ 34858 - 11905: 0xD046,
+ 34859 - 11905: 0xD047,
+ 34860 - 11905: 0xD048,
+ 34861 - 11905: 0xD049,
+ 34862 - 11905: 0xD04A,
+ 34863 - 11905: 0xD04B,
+ 34864 - 11905: 0xD04C,
+ 34865 - 11905: 0xD04D,
+ 34866 - 11905: 0xEEC3,
+ 34867 - 11905: 0xD04E,
+ 34868 - 11905: 0xD04F,
+ 34869 - 11905: 0xD050,
+ 34870 - 11905: 0xD051,
+ 34871 - 11905: 0xD052,
+ 34872 - 11905: 0xD053,
+ 34873 - 11905: 0xF3BC,
+ 34874 - 11905: 0xD054,
+ 34875 - 11905: 0xD055,
+ 34876 - 11905: 0xF3BD,
+ 34877 - 11905: 0xD056,
+ 34878 - 11905: 0xD057,
+ 34879 - 11905: 0xD058,
+ 34880 - 11905: 0xD1AA,
+ 34881 - 11905: 0xD059,
+ 34882 - 11905: 0xD05A,
+ 34883 - 11905: 0xD05B,
+ 34884 - 11905: 0xF4AC,
+ 34885 - 11905: 0xD0C6,
+ 34886 - 11905: 0xD05C,
+ 34887 - 11905: 0xD05D,
+ 34888 - 11905: 0xD05E,
+ 34889 - 11905: 0xD05F,
+ 34890 - 11905: 0xD060,
+ 34891 - 11905: 0xD061,
+ 34892 - 11905: 0xD0D0,
+ 34893 - 11905: 0xD1DC,
+ 34894 - 11905: 0xD062,
+ 34895 - 11905: 0xD063,
+ 34896 - 11905: 0xD064,
+ 34897 - 11905: 0xD065,
+ 34898 - 11905: 0xD066,
+ 34899 - 11905: 0xD067,
+ 34900 - 11905: 0xCFCE,
+ 34901 - 11905: 0xD068,
+ 34902 - 11905: 0xD069,
+ 34903 - 11905: 0xBDD6,
+ 34904 - 11905: 0xD06A,
+ 34905 - 11905: 0xD1C3,
+ 34906 - 11905: 0xD06B,
+ 34907 - 11905: 0xD06C,
+ 34908 - 11905: 0xD06D,
+ 34909 - 11905: 0xD06E,
+ 34910 - 11905: 0xD06F,
+ 34911 - 11905: 0xD070,
+ 34912 - 11905: 0xD071,
+ 34913 - 11905: 0xBAE2,
+ 34914 - 11905: 0xE1E9,
+ 34915 - 11905: 0xD2C2,
+ 34916 - 11905: 0xF1C2,
+ 34917 - 11905: 0xB2B9,
+ 34918 - 11905: 0xD072,
+ 34919 - 11905: 0xD073,
+ 34920 - 11905: 0xB1ED,
+ 34921 - 11905: 0xF1C3,
+ 34922 - 11905: 0xD074,
+ 34923 - 11905: 0xC9C0,
+ 34924 - 11905: 0xB3C4,
+ 34925 - 11905: 0xD075,
+ 34926 - 11905: 0xD9F2,
+ 34927 - 11905: 0xD076,
+ 34928 - 11905: 0xCBA5,
+ 34929 - 11905: 0xD077,
+ 34930 - 11905: 0xF1C4,
+ 34931 - 11905: 0xD078,
+ 34932 - 11905: 0xD079,
+ 34933 - 11905: 0xD07A,
+ 34934 - 11905: 0xD07B,
+ 34935 - 11905: 0xD6D4,
+ 34936 - 11905: 0xD07C,
+ 34937 - 11905: 0xD07D,
+ 34938 - 11905: 0xD07E,
+ 34939 - 11905: 0xD080,
+ 34940 - 11905: 0xD081,
+ 34941 - 11905: 0xF1C5,
+ 34942 - 11905: 0xF4C0,
+ 34943 - 11905: 0xF1C6,
+ 34944 - 11905: 0xD082,
+ 34945 - 11905: 0xD4AC,
+ 34946 - 11905: 0xF1C7,
+ 34947 - 11905: 0xD083,
+ 34948 - 11905: 0xB0C0,
+ 34949 - 11905: 0xF4C1,
+ 34950 - 11905: 0xD084,
+ 34951 - 11905: 0xD085,
+ 34952 - 11905: 0xF4C2,
+ 34953 - 11905: 0xD086,
+ 34954 - 11905: 0xD087,
+ 34955 - 11905: 0xB4FC,
+ 34956 - 11905: 0xD088,
+ 34957 - 11905: 0xC5DB,
+ 34958 - 11905: 0xD089,
+ 34959 - 11905: 0xD08A,
+ 34960 - 11905: 0xD08B,
+ 34961 - 11905: 0xD08C,
+ 34962 - 11905: 0xCCBB,
+ 34963 - 11905: 0xD08D,
+ 34964 - 11905: 0xD08E,
+ 34965 - 11905: 0xD08F,
+ 34966 - 11905: 0xD0E4,
+ 34967 - 11905: 0xD090,
+ 34968 - 11905: 0xD091,
+ 34969 - 11905: 0xD092,
+ 34970 - 11905: 0xD093,
+ 34971 - 11905: 0xD094,
+ 34972 - 11905: 0xCDE0,
+ 34973 - 11905: 0xD095,
+ 34974 - 11905: 0xD096,
+ 34975 - 11905: 0xD097,
+ 34976 - 11905: 0xD098,
+ 34977 - 11905: 0xD099,
+ 34978 - 11905: 0xF1C8,
+ 34979 - 11905: 0xD09A,
+ 34980 - 11905: 0xD9F3,
+ 34981 - 11905: 0xD09B,
+ 34982 - 11905: 0xD09C,
+ 34983 - 11905: 0xD09D,
+ 34984 - 11905: 0xD09E,
+ 34985 - 11905: 0xD09F,
+ 34986 - 11905: 0xD0A0,
+ 34987 - 11905: 0xB1BB,
+ 34988 - 11905: 0xD140,
+ 34989 - 11905: 0xCFAE,
+ 34990 - 11905: 0xD141,
+ 34991 - 11905: 0xD142,
+ 34992 - 11905: 0xD143,
+ 34993 - 11905: 0xB8A4,
+ 34994 - 11905: 0xD144,
+ 34995 - 11905: 0xD145,
+ 34996 - 11905: 0xD146,
+ 34997 - 11905: 0xD147,
+ 34998 - 11905: 0xD148,
+ 34999 - 11905: 0xF1CA,
+ 35000 - 11905: 0xD149,
+ 35001 - 11905: 0xD14A,
+ 35002 - 11905: 0xD14B,
+ 35003 - 11905: 0xD14C,
+ 35004 - 11905: 0xF1CB,
+ 35005 - 11905: 0xD14D,
+ 35006 - 11905: 0xD14E,
+ 35007 - 11905: 0xD14F,
+ 35008 - 11905: 0xD150,
+ 35009 - 11905: 0xB2C3,
+ 35010 - 11905: 0xC1D1,
+ 35011 - 11905: 0xD151,
+ 35012 - 11905: 0xD152,
+ 35013 - 11905: 0xD7B0,
+ 35014 - 11905: 0xF1C9,
+ 35015 - 11905: 0xD153,
+ 35016 - 11905: 0xD154,
+ 35017 - 11905: 0xF1CC,
+ 35018 - 11905: 0xD155,
+ 35019 - 11905: 0xD156,
+ 35020 - 11905: 0xD157,
+ 35021 - 11905: 0xD158,
+ 35022 - 11905: 0xF1CE,
+ 35023 - 11905: 0xD159,
+ 35024 - 11905: 0xD15A,
+ 35025 - 11905: 0xD15B,
+ 35026 - 11905: 0xD9F6,
+ 35027 - 11905: 0xD15C,
+ 35028 - 11905: 0xD2E1,
+ 35029 - 11905: 0xD4A3,
+ 35030 - 11905: 0xD15D,
+ 35031 - 11905: 0xD15E,
+ 35032 - 11905: 0xF4C3,
+ 35033 - 11905: 0xC8B9,
+ 35034 - 11905: 0xD15F,
+ 35035 - 11905: 0xD160,
+ 35036 - 11905: 0xD161,
+ 35037 - 11905: 0xD162,
+ 35038 - 11905: 0xD163,
+ 35039 - 11905: 0xF4C4,
+ 35040 - 11905: 0xD164,
+ 35041 - 11905: 0xD165,
+ 35042 - 11905: 0xF1CD,
+ 35043 - 11905: 0xF1CF,
+ 35044 - 11905: 0xBFE3,
+ 35045 - 11905: 0xF1D0,
+ 35046 - 11905: 0xD166,
+ 35047 - 11905: 0xD167,
+ 35048 - 11905: 0xF1D4,
+ 35049 - 11905: 0xD168,
+ 35050 - 11905: 0xD169,
+ 35051 - 11905: 0xD16A,
+ 35052 - 11905: 0xD16B,
+ 35053 - 11905: 0xD16C,
+ 35054 - 11905: 0xD16D,
+ 35055 - 11905: 0xD16E,
+ 35056 - 11905: 0xF1D6,
+ 35057 - 11905: 0xF1D1,
+ 35058 - 11905: 0xD16F,
+ 35059 - 11905: 0xC9D1,
+ 35060 - 11905: 0xC5E1,
+ 35061 - 11905: 0xD170,
+ 35062 - 11905: 0xD171,
+ 35063 - 11905: 0xD172,
+ 35064 - 11905: 0xC2E3,
+ 35065 - 11905: 0xB9FC,
+ 35066 - 11905: 0xD173,
+ 35067 - 11905: 0xD174,
+ 35068 - 11905: 0xF1D3,
+ 35069 - 11905: 0xD175,
+ 35070 - 11905: 0xF1D5,
+ 35071 - 11905: 0xD176,
+ 35072 - 11905: 0xD177,
+ 35073 - 11905: 0xD178,
+ 35074 - 11905: 0xB9D3,
+ 35075 - 11905: 0xD179,
+ 35076 - 11905: 0xD17A,
+ 35077 - 11905: 0xD17B,
+ 35078 - 11905: 0xD17C,
+ 35079 - 11905: 0xD17D,
+ 35080 - 11905: 0xD17E,
+ 35081 - 11905: 0xD180,
+ 35082 - 11905: 0xF1DB,
+ 35083 - 11905: 0xD181,
+ 35084 - 11905: 0xD182,
+ 35085 - 11905: 0xD183,
+ 35086 - 11905: 0xD184,
+ 35087 - 11905: 0xD185,
+ 35088 - 11905: 0xBAD6,
+ 35089 - 11905: 0xD186,
+ 35090 - 11905: 0xB0FD,
+ 35091 - 11905: 0xF1D9,
+ 35092 - 11905: 0xD187,
+ 35093 - 11905: 0xD188,
+ 35094 - 11905: 0xD189,
+ 35095 - 11905: 0xD18A,
+ 35096 - 11905: 0xD18B,
+ 35097 - 11905: 0xF1D8,
+ 35098 - 11905: 0xF1D2,
+ 35099 - 11905: 0xF1DA,
+ 35100 - 11905: 0xD18C,
+ 35101 - 11905: 0xD18D,
+ 35102 - 11905: 0xD18E,
+ 35103 - 11905: 0xD18F,
+ 35104 - 11905: 0xD190,
+ 35105 - 11905: 0xF1D7,
+ 35106 - 11905: 0xD191,
+ 35107 - 11905: 0xD192,
+ 35108 - 11905: 0xD193,
+ 35109 - 11905: 0xC8EC,
+ 35110 - 11905: 0xD194,
+ 35111 - 11905: 0xD195,
+ 35112 - 11905: 0xD196,
+ 35113 - 11905: 0xD197,
+ 35114 - 11905: 0xCDCA,
+ 35115 - 11905: 0xF1DD,
+ 35116 - 11905: 0xD198,
+ 35117 - 11905: 0xD199,
+ 35118 - 11905: 0xD19A,
+ 35119 - 11905: 0xD19B,
+ 35120 - 11905: 0xE5BD,
+ 35121 - 11905: 0xD19C,
+ 35122 - 11905: 0xD19D,
+ 35123 - 11905: 0xD19E,
+ 35124 - 11905: 0xF1DC,
+ 35125 - 11905: 0xD19F,
+ 35126 - 11905: 0xF1DE,
+ 35127 - 11905: 0xD1A0,
+ 35128 - 11905: 0xD240,
+ 35129 - 11905: 0xD241,
+ 35130 - 11905: 0xD242,
+ 35131 - 11905: 0xD243,
+ 35132 - 11905: 0xD244,
+ 35133 - 11905: 0xD245,
+ 35134 - 11905: 0xD246,
+ 35135 - 11905: 0xD247,
+ 35136 - 11905: 0xD248,
+ 35137 - 11905: 0xF1DF,
+ 35138 - 11905: 0xD249,
+ 35139 - 11905: 0xD24A,
+ 35140 - 11905: 0xCFE5,
+ 35141 - 11905: 0xD24B,
+ 35142 - 11905: 0xD24C,
+ 35143 - 11905: 0xD24D,
+ 35144 - 11905: 0xD24E,
+ 35145 - 11905: 0xD24F,
+ 35146 - 11905: 0xD250,
+ 35147 - 11905: 0xD251,
+ 35148 - 11905: 0xD252,
+ 35149 - 11905: 0xD253,
+ 35150 - 11905: 0xD254,
+ 35151 - 11905: 0xD255,
+ 35152 - 11905: 0xD256,
+ 35153 - 11905: 0xD257,
+ 35154 - 11905: 0xD258,
+ 35155 - 11905: 0xD259,
+ 35156 - 11905: 0xD25A,
+ 35157 - 11905: 0xD25B,
+ 35158 - 11905: 0xD25C,
+ 35159 - 11905: 0xD25D,
+ 35160 - 11905: 0xD25E,
+ 35161 - 11905: 0xD25F,
+ 35162 - 11905: 0xD260,
+ 35163 - 11905: 0xD261,
+ 35164 - 11905: 0xD262,
+ 35165 - 11905: 0xD263,
+ 35166 - 11905: 0xF4C5,
+ 35167 - 11905: 0xBDF3,
+ 35168 - 11905: 0xD264,
+ 35169 - 11905: 0xD265,
+ 35170 - 11905: 0xD266,
+ 35171 - 11905: 0xD267,
+ 35172 - 11905: 0xD268,
+ 35173 - 11905: 0xD269,
+ 35174 - 11905: 0xF1E0,
+ 35175 - 11905: 0xD26A,
+ 35176 - 11905: 0xD26B,
+ 35177 - 11905: 0xD26C,
+ 35178 - 11905: 0xD26D,
+ 35179 - 11905: 0xD26E,
+ 35180 - 11905: 0xD26F,
+ 35181 - 11905: 0xD270,
+ 35182 - 11905: 0xD271,
+ 35183 - 11905: 0xD272,
+ 35184 - 11905: 0xD273,
+ 35185 - 11905: 0xD274,
+ 35186 - 11905: 0xD275,
+ 35187 - 11905: 0xD276,
+ 35188 - 11905: 0xD277,
+ 35189 - 11905: 0xD278,
+ 35190 - 11905: 0xD279,
+ 35191 - 11905: 0xD27A,
+ 35192 - 11905: 0xD27B,
+ 35193 - 11905: 0xD27C,
+ 35194 - 11905: 0xD27D,
+ 35195 - 11905: 0xF1E1,
+ 35196 - 11905: 0xD27E,
+ 35197 - 11905: 0xD280,
+ 35198 - 11905: 0xD281,
+ 35199 - 11905: 0xCEF7,
+ 35200 - 11905: 0xD282,
+ 35201 - 11905: 0xD2AA,
+ 35202 - 11905: 0xD283,
+ 35203 - 11905: 0xF1FB,
+ 35204 - 11905: 0xD284,
+ 35205 - 11905: 0xD285,
+ 35206 - 11905: 0xB8B2,
+ 35207 - 11905: 0xD286,
+ 35208 - 11905: 0xD287,
+ 35209 - 11905: 0xD288,
+ 35210 - 11905: 0xD289,
+ 35211 - 11905: 0xD28A,
+ 35212 - 11905: 0xD28B,
+ 35213 - 11905: 0xD28C,
+ 35214 - 11905: 0xD28D,
+ 35215 - 11905: 0xD28E,
+ 35216 - 11905: 0xD28F,
+ 35217 - 11905: 0xD290,
+ 35218 - 11905: 0xD291,
+ 35219 - 11905: 0xD292,
+ 35220 - 11905: 0xD293,
+ 35221 - 11905: 0xD294,
+ 35222 - 11905: 0xD295,
+ 35223 - 11905: 0xD296,
+ 35224 - 11905: 0xD297,
+ 35225 - 11905: 0xD298,
+ 35226 - 11905: 0xD299,
+ 35227 - 11905: 0xD29A,
+ 35228 - 11905: 0xD29B,
+ 35229 - 11905: 0xD29C,
+ 35230 - 11905: 0xD29D,
+ 35231 - 11905: 0xD29E,
+ 35232 - 11905: 0xD29F,
+ 35233 - 11905: 0xD2A0,
+ 35234 - 11905: 0xD340,
+ 35235 - 11905: 0xD341,
+ 35236 - 11905: 0xD342,
+ 35237 - 11905: 0xD343,
+ 35238 - 11905: 0xD344,
+ 35239 - 11905: 0xD345,
+ 35240 - 11905: 0xD346,
+ 35241 - 11905: 0xD347,
+ 35242 - 11905: 0xD348,
+ 35243 - 11905: 0xD349,
+ 35244 - 11905: 0xD34A,
+ 35245 - 11905: 0xD34B,
+ 35246 - 11905: 0xD34C,
+ 35247 - 11905: 0xD34D,
+ 35248 - 11905: 0xD34E,
+ 35249 - 11905: 0xD34F,
+ 35250 - 11905: 0xD350,
+ 35251 - 11905: 0xD351,
+ 35252 - 11905: 0xD352,
+ 35253 - 11905: 0xD353,
+ 35254 - 11905: 0xD354,
+ 35255 - 11905: 0xD355,
+ 35256 - 11905: 0xD356,
+ 35257 - 11905: 0xD357,
+ 35258 - 11905: 0xD358,
+ 35259 - 11905: 0xD359,
+ 35260 - 11905: 0xD35A,
+ 35261 - 11905: 0xD35B,
+ 35262 - 11905: 0xD35C,
+ 35263 - 11905: 0xD35D,
+ 35264 - 11905: 0xD35E,
+ 35265 - 11905: 0xBCFB,
+ 35266 - 11905: 0xB9DB,
+ 35267 - 11905: 0xD35F,
+ 35268 - 11905: 0xB9E6,
+ 35269 - 11905: 0xC3D9,
+ 35270 - 11905: 0xCAD3,
+ 35271 - 11905: 0xEAE8,
+ 35272 - 11905: 0xC0C0,
+ 35273 - 11905: 0xBEF5,
+ 35274 - 11905: 0xEAE9,
+ 35275 - 11905: 0xEAEA,
+ 35276 - 11905: 0xEAEB,
+ 35277 - 11905: 0xD360,
+ 35278 - 11905: 0xEAEC,
+ 35279 - 11905: 0xEAED,
+ 35280 - 11905: 0xEAEE,
+ 35281 - 11905: 0xEAEF,
+ 35282 - 11905: 0xBDC7,
+ 35283 - 11905: 0xD361,
+ 35284 - 11905: 0xD362,
+ 35285 - 11905: 0xD363,
+ 35286 - 11905: 0xF5FB,
+ 35287 - 11905: 0xD364,
+ 35288 - 11905: 0xD365,
+ 35289 - 11905: 0xD366,
+ 35290 - 11905: 0xF5FD,
+ 35291 - 11905: 0xD367,
+ 35292 - 11905: 0xF5FE,
+ 35293 - 11905: 0xD368,
+ 35294 - 11905: 0xF5FC,
+ 35295 - 11905: 0xD369,
+ 35296 - 11905: 0xD36A,
+ 35297 - 11905: 0xD36B,
+ 35298 - 11905: 0xD36C,
+ 35299 - 11905: 0xBDE2,
+ 35300 - 11905: 0xD36D,
+ 35301 - 11905: 0xF6A1,
+ 35302 - 11905: 0xB4A5,
+ 35303 - 11905: 0xD36E,
+ 35304 - 11905: 0xD36F,
+ 35305 - 11905: 0xD370,
+ 35306 - 11905: 0xD371,
+ 35307 - 11905: 0xF6A2,
+ 35308 - 11905: 0xD372,
+ 35309 - 11905: 0xD373,
+ 35310 - 11905: 0xD374,
+ 35311 - 11905: 0xF6A3,
+ 35312 - 11905: 0xD375,
+ 35313 - 11905: 0xD376,
+ 35314 - 11905: 0xD377,
+ 35315 - 11905: 0xECB2,
+ 35316 - 11905: 0xD378,
+ 35317 - 11905: 0xD379,
+ 35318 - 11905: 0xD37A,
+ 35319 - 11905: 0xD37B,
+ 35320 - 11905: 0xD37C,
+ 35321 - 11905: 0xD37D,
+ 35322 - 11905: 0xD37E,
+ 35323 - 11905: 0xD380,
+ 35324 - 11905: 0xD381,
+ 35325 - 11905: 0xD382,
+ 35326 - 11905: 0xD383,
+ 35327 - 11905: 0xD384,
+ 35328 - 11905: 0xD1D4,
+ 35329 - 11905: 0xD385,
+ 35330 - 11905: 0xD386,
+ 35331 - 11905: 0xD387,
+ 35332 - 11905: 0xD388,
+ 35333 - 11905: 0xD389,
+ 35334 - 11905: 0xD38A,
+ 35335 - 11905: 0xD9EA,
+ 35336 - 11905: 0xD38B,
+ 35337 - 11905: 0xD38C,
+ 35338 - 11905: 0xD38D,
+ 35339 - 11905: 0xD38E,
+ 35340 - 11905: 0xD38F,
+ 35341 - 11905: 0xD390,
+ 35342 - 11905: 0xD391,
+ 35343 - 11905: 0xD392,
+ 35344 - 11905: 0xD393,
+ 35345 - 11905: 0xD394,
+ 35346 - 11905: 0xD395,
+ 35347 - 11905: 0xD396,
+ 35348 - 11905: 0xD397,
+ 35349 - 11905: 0xD398,
+ 35350 - 11905: 0xD399,
+ 35351 - 11905: 0xD39A,
+ 35352 - 11905: 0xD39B,
+ 35353 - 11905: 0xD39C,
+ 35354 - 11905: 0xD39D,
+ 35355 - 11905: 0xD39E,
+ 35356 - 11905: 0xD39F,
+ 35357 - 11905: 0xD3A0,
+ 35358 - 11905: 0xD440,
+ 35359 - 11905: 0xD441,
+ 35360 - 11905: 0xD442,
+ 35361 - 11905: 0xD443,
+ 35362 - 11905: 0xD444,
+ 35363 - 11905: 0xD445,
+ 35364 - 11905: 0xD446,
+ 35365 - 11905: 0xD447,
+ 35366 - 11905: 0xD448,
+ 35367 - 11905: 0xD449,
+ 35368 - 11905: 0xD44A,
+ 35369 - 11905: 0xD44B,
+ 35370 - 11905: 0xD44C,
+ 35371 - 11905: 0xD44D,
+ 35372 - 11905: 0xD44E,
+ 35373 - 11905: 0xD44F,
+ 35374 - 11905: 0xD450,
+ 35375 - 11905: 0xD451,
+ 35376 - 11905: 0xD452,
+ 35377 - 11905: 0xD453,
+ 35378 - 11905: 0xD454,
+ 35379 - 11905: 0xD455,
+ 35380 - 11905: 0xD456,
+ 35381 - 11905: 0xD457,
+ 35382 - 11905: 0xD458,
+ 35383 - 11905: 0xD459,
+ 35384 - 11905: 0xD45A,
+ 35385 - 11905: 0xD45B,
+ 35386 - 11905: 0xD45C,
+ 35387 - 11905: 0xD45D,
+ 35388 - 11905: 0xD45E,
+ 35389 - 11905: 0xD45F,
+ 35390 - 11905: 0xF6A4,
+ 35391 - 11905: 0xD460,
+ 35392 - 11905: 0xD461,
+ 35393 - 11905: 0xD462,
+ 35394 - 11905: 0xD463,
+ 35395 - 11905: 0xD464,
+ 35396 - 11905: 0xD465,
+ 35397 - 11905: 0xD466,
+ 35398 - 11905: 0xD467,
+ 35399 - 11905: 0xD468,
+ 35400 - 11905: 0xEEBA,
+ 35401 - 11905: 0xD469,
+ 35402 - 11905: 0xD46A,
+ 35403 - 11905: 0xD46B,
+ 35404 - 11905: 0xD46C,
+ 35405 - 11905: 0xD46D,
+ 35406 - 11905: 0xD46E,
+ 35407 - 11905: 0xD46F,
+ 35408 - 11905: 0xD470,
+ 35409 - 11905: 0xD471,
+ 35410 - 11905: 0xD472,
+ 35411 - 11905: 0xD473,
+ 35412 - 11905: 0xD474,
+ 35413 - 11905: 0xD475,
+ 35414 - 11905: 0xD476,
+ 35415 - 11905: 0xD477,
+ 35416 - 11905: 0xD478,
+ 35417 - 11905: 0xD479,
+ 35418 - 11905: 0xD47A,
+ 35419 - 11905: 0xD47B,
+ 35420 - 11905: 0xD47C,
+ 35421 - 11905: 0xD47D,
+ 35422 - 11905: 0xD47E,
+ 35423 - 11905: 0xD480,
+ 35424 - 11905: 0xD481,
+ 35425 - 11905: 0xD482,
+ 35426 - 11905: 0xD483,
+ 35427 - 11905: 0xD484,
+ 35428 - 11905: 0xD485,
+ 35429 - 11905: 0xD486,
+ 35430 - 11905: 0xD487,
+ 35431 - 11905: 0xD488,
+ 35432 - 11905: 0xD489,
+ 35433 - 11905: 0xD48A,
+ 35434 - 11905: 0xD48B,
+ 35435 - 11905: 0xD48C,
+ 35436 - 11905: 0xD48D,
+ 35437 - 11905: 0xD48E,
+ 35438 - 11905: 0xD48F,
+ 35439 - 11905: 0xD490,
+ 35440 - 11905: 0xD491,
+ 35441 - 11905: 0xD492,
+ 35442 - 11905: 0xD493,
+ 35443 - 11905: 0xD494,
+ 35444 - 11905: 0xD495,
+ 35445 - 11905: 0xD496,
+ 35446 - 11905: 0xD497,
+ 35447 - 11905: 0xD498,
+ 35448 - 11905: 0xD499,
+ 35449 - 11905: 0xD5B2,
+ 35450 - 11905: 0xD49A,
+ 35451 - 11905: 0xD49B,
+ 35452 - 11905: 0xD49C,
+ 35453 - 11905: 0xD49D,
+ 35454 - 11905: 0xD49E,
+ 35455 - 11905: 0xD49F,
+ 35456 - 11905: 0xD4A0,
+ 35457 - 11905: 0xD540,
+ 35458 - 11905: 0xD541,
+ 35459 - 11905: 0xD542,
+ 35460 - 11905: 0xD543,
+ 35461 - 11905: 0xD544,
+ 35462 - 11905: 0xD545,
+ 35463 - 11905: 0xD546,
+ 35464 - 11905: 0xD547,
+ 35465 - 11905: 0xD3FE,
+ 35466 - 11905: 0xCCDC,
+ 35467 - 11905: 0xD548,
+ 35468 - 11905: 0xD549,
+ 35469 - 11905: 0xD54A,
+ 35470 - 11905: 0xD54B,
+ 35471 - 11905: 0xD54C,
+ 35472 - 11905: 0xD54D,
+ 35473 - 11905: 0xD54E,
+ 35474 - 11905: 0xD54F,
+ 35475 - 11905: 0xCAC4,
+ 35476 - 11905: 0xD550,
+ 35477 - 11905: 0xD551,
+ 35478 - 11905: 0xD552,
+ 35479 - 11905: 0xD553,
+ 35480 - 11905: 0xD554,
+ 35481 - 11905: 0xD555,
+ 35482 - 11905: 0xD556,
+ 35483 - 11905: 0xD557,
+ 35484 - 11905: 0xD558,
+ 35485 - 11905: 0xD559,
+ 35486 - 11905: 0xD55A,
+ 35487 - 11905: 0xD55B,
+ 35488 - 11905: 0xD55C,
+ 35489 - 11905: 0xD55D,
+ 35490 - 11905: 0xD55E,
+ 35491 - 11905: 0xD55F,
+ 35492 - 11905: 0xD560,
+ 35493 - 11905: 0xD561,
+ 35494 - 11905: 0xD562,
+ 35495 - 11905: 0xD563,
+ 35496 - 11905: 0xD564,
+ 35497 - 11905: 0xD565,
+ 35498 - 11905: 0xD566,
+ 35499 - 11905: 0xD567,
+ 35500 - 11905: 0xD568,
+ 35501 - 11905: 0xD569,
+ 35502 - 11905: 0xD56A,
+ 35503 - 11905: 0xD56B,
+ 35504 - 11905: 0xD56C,
+ 35505 - 11905: 0xD56D,
+ 35506 - 11905: 0xD56E,
+ 35507 - 11905: 0xD56F,
+ 35508 - 11905: 0xD570,
+ 35509 - 11905: 0xD571,
+ 35510 - 11905: 0xD572,
+ 35511 - 11905: 0xD573,
+ 35512 - 11905: 0xD574,
+ 35513 - 11905: 0xD575,
+ 35514 - 11905: 0xD576,
+ 35515 - 11905: 0xD577,
+ 35516 - 11905: 0xD578,
+ 35517 - 11905: 0xD579,
+ 35518 - 11905: 0xD57A,
+ 35519 - 11905: 0xD57B,
+ 35520 - 11905: 0xD57C,
+ 35521 - 11905: 0xD57D,
+ 35522 - 11905: 0xD57E,
+ 35523 - 11905: 0xD580,
+ 35524 - 11905: 0xD581,
+ 35525 - 11905: 0xD582,
+ 35526 - 11905: 0xD583,
+ 35527 - 11905: 0xD584,
+ 35528 - 11905: 0xD585,
+ 35529 - 11905: 0xD586,
+ 35530 - 11905: 0xD587,
+ 35531 - 11905: 0xD588,
+ 35532 - 11905: 0xD589,
+ 35533 - 11905: 0xD58A,
+ 35534 - 11905: 0xD58B,
+ 35535 - 11905: 0xD58C,
+ 35536 - 11905: 0xD58D,
+ 35537 - 11905: 0xD58E,
+ 35538 - 11905: 0xD58F,
+ 35539 - 11905: 0xD590,
+ 35540 - 11905: 0xD591,
+ 35541 - 11905: 0xD592,
+ 35542 - 11905: 0xD593,
+ 35543 - 11905: 0xD594,
+ 35544 - 11905: 0xD595,
+ 35545 - 11905: 0xD596,
+ 35546 - 11905: 0xD597,
+ 35547 - 11905: 0xD598,
+ 35548 - 11905: 0xD599,
+ 35549 - 11905: 0xD59A,
+ 35550 - 11905: 0xD59B,
+ 35551 - 11905: 0xD59C,
+ 35552 - 11905: 0xD59D,
+ 35553 - 11905: 0xD59E,
+ 35554 - 11905: 0xD59F,
+ 35555 - 11905: 0xD5A0,
+ 35556 - 11905: 0xD640,
+ 35557 - 11905: 0xD641,
+ 35558 - 11905: 0xD642,
+ 35559 - 11905: 0xD643,
+ 35560 - 11905: 0xD644,
+ 35561 - 11905: 0xD645,
+ 35562 - 11905: 0xD646,
+ 35563 - 11905: 0xD647,
+ 35564 - 11905: 0xD648,
+ 35565 - 11905: 0xD649,
+ 35566 - 11905: 0xD64A,
+ 35567 - 11905: 0xD64B,
+ 35568 - 11905: 0xD64C,
+ 35569 - 11905: 0xD64D,
+ 35570 - 11905: 0xD64E,
+ 35571 - 11905: 0xD64F,
+ 35572 - 11905: 0xD650,
+ 35573 - 11905: 0xD651,
+ 35574 - 11905: 0xD652,
+ 35575 - 11905: 0xD653,
+ 35576 - 11905: 0xD654,
+ 35577 - 11905: 0xD655,
+ 35578 - 11905: 0xD656,
+ 35579 - 11905: 0xD657,
+ 35580 - 11905: 0xD658,
+ 35581 - 11905: 0xD659,
+ 35582 - 11905: 0xD65A,
+ 35583 - 11905: 0xD65B,
+ 35584 - 11905: 0xD65C,
+ 35585 - 11905: 0xD65D,
+ 35586 - 11905: 0xD65E,
+ 35587 - 11905: 0xD65F,
+ 35588 - 11905: 0xD660,
+ 35589 - 11905: 0xD661,
+ 35590 - 11905: 0xD662,
+ 35591 - 11905: 0xE5C0,
+ 35592 - 11905: 0xD663,
+ 35593 - 11905: 0xD664,
+ 35594 - 11905: 0xD665,
+ 35595 - 11905: 0xD666,
+ 35596 - 11905: 0xD667,
+ 35597 - 11905: 0xD668,
+ 35598 - 11905: 0xD669,
+ 35599 - 11905: 0xD66A,
+ 35600 - 11905: 0xD66B,
+ 35601 - 11905: 0xD66C,
+ 35602 - 11905: 0xD66D,
+ 35603 - 11905: 0xD66E,
+ 35604 - 11905: 0xD66F,
+ 35605 - 11905: 0xD670,
+ 35606 - 11905: 0xD671,
+ 35607 - 11905: 0xD672,
+ 35608 - 11905: 0xD673,
+ 35609 - 11905: 0xD674,
+ 35610 - 11905: 0xD675,
+ 35611 - 11905: 0xD676,
+ 35612 - 11905: 0xD677,
+ 35613 - 11905: 0xD678,
+ 35614 - 11905: 0xD679,
+ 35615 - 11905: 0xD67A,
+ 35616 - 11905: 0xD67B,
+ 35617 - 11905: 0xD67C,
+ 35618 - 11905: 0xD67D,
+ 35619 - 11905: 0xD67E,
+ 35620 - 11905: 0xD680,
+ 35621 - 11905: 0xD681,
+ 35622 - 11905: 0xF6A5,
+ 35623 - 11905: 0xD682,
+ 35624 - 11905: 0xD683,
+ 35625 - 11905: 0xD684,
+ 35626 - 11905: 0xD685,
+ 35627 - 11905: 0xD686,
+ 35628 - 11905: 0xD687,
+ 35629 - 11905: 0xD688,
+ 35630 - 11905: 0xD689,
+ 35631 - 11905: 0xD68A,
+ 35632 - 11905: 0xD68B,
+ 35633 - 11905: 0xD68C,
+ 35634 - 11905: 0xD68D,
+ 35635 - 11905: 0xD68E,
+ 35636 - 11905: 0xD68F,
+ 35637 - 11905: 0xD690,
+ 35638 - 11905: 0xD691,
+ 35639 - 11905: 0xD692,
+ 35640 - 11905: 0xD693,
+ 35641 - 11905: 0xD694,
+ 35642 - 11905: 0xD695,
+ 35643 - 11905: 0xD696,
+ 35644 - 11905: 0xD697,
+ 35645 - 11905: 0xD698,
+ 35646 - 11905: 0xD699,
+ 35647 - 11905: 0xD69A,
+ 35648 - 11905: 0xD69B,
+ 35649 - 11905: 0xD69C,
+ 35650 - 11905: 0xD69D,
+ 35651 - 11905: 0xD69E,
+ 35652 - 11905: 0xD69F,
+ 35653 - 11905: 0xD6A0,
+ 35654 - 11905: 0xD740,
+ 35655 - 11905: 0xD741,
+ 35656 - 11905: 0xD742,
+ 35657 - 11905: 0xD743,
+ 35658 - 11905: 0xD744,
+ 35659 - 11905: 0xD745,
+ 35660 - 11905: 0xD746,
+ 35661 - 11905: 0xD747,
+ 35662 - 11905: 0xD748,
+ 35663 - 11905: 0xD749,
+ 35664 - 11905: 0xD74A,
+ 35665 - 11905: 0xD74B,
+ 35666 - 11905: 0xD74C,
+ 35667 - 11905: 0xD74D,
+ 35668 - 11905: 0xD74E,
+ 35669 - 11905: 0xD74F,
+ 35670 - 11905: 0xD750,
+ 35671 - 11905: 0xD751,
+ 35672 - 11905: 0xD752,
+ 35673 - 11905: 0xD753,
+ 35674 - 11905: 0xD754,
+ 35675 - 11905: 0xD755,
+ 35676 - 11905: 0xD756,
+ 35677 - 11905: 0xD757,
+ 35678 - 11905: 0xD758,
+ 35679 - 11905: 0xD759,
+ 35680 - 11905: 0xD75A,
+ 35681 - 11905: 0xD75B,
+ 35682 - 11905: 0xD75C,
+ 35683 - 11905: 0xD75D,
+ 35684 - 11905: 0xD75E,
+ 35685 - 11905: 0xD75F,
+ 35686 - 11905: 0xBEAF,
+ 35687 - 11905: 0xD760,
+ 35688 - 11905: 0xD761,
+ 35689 - 11905: 0xD762,
+ 35690 - 11905: 0xD763,
+ 35691 - 11905: 0xD764,
+ 35692 - 11905: 0xC6A9,
+ 35693 - 11905: 0xD765,
+ 35694 - 11905: 0xD766,
+ 35695 - 11905: 0xD767,
+ 35696 - 11905: 0xD768,
+ 35697 - 11905: 0xD769,
+ 35698 - 11905: 0xD76A,
+ 35699 - 11905: 0xD76B,
+ 35700 - 11905: 0xD76C,
+ 35701 - 11905: 0xD76D,
+ 35702 - 11905: 0xD76E,
+ 35703 - 11905: 0xD76F,
+ 35704 - 11905: 0xD770,
+ 35705 - 11905: 0xD771,
+ 35706 - 11905: 0xD772,
+ 35707 - 11905: 0xD773,
+ 35708 - 11905: 0xD774,
+ 35709 - 11905: 0xD775,
+ 35710 - 11905: 0xD776,
+ 35711 - 11905: 0xD777,
+ 35712 - 11905: 0xD778,
+ 35713 - 11905: 0xD779,
+ 35714 - 11905: 0xD77A,
+ 35715 - 11905: 0xD77B,
+ 35716 - 11905: 0xD77C,
+ 35717 - 11905: 0xD77D,
+ 35718 - 11905: 0xD77E,
+ 35719 - 11905: 0xD780,
+ 35720 - 11905: 0xD781,
+ 35721 - 11905: 0xD782,
+ 35722 - 11905: 0xD783,
+ 35723 - 11905: 0xD784,
+ 35724 - 11905: 0xD785,
+ 35725 - 11905: 0xD786,
+ 35726 - 11905: 0xD787,
+ 35727 - 11905: 0xD788,
+ 35728 - 11905: 0xD789,
+ 35729 - 11905: 0xD78A,
+ 35730 - 11905: 0xD78B,
+ 35731 - 11905: 0xD78C,
+ 35732 - 11905: 0xD78D,
+ 35733 - 11905: 0xD78E,
+ 35734 - 11905: 0xD78F,
+ 35735 - 11905: 0xD790,
+ 35736 - 11905: 0xD791,
+ 35737 - 11905: 0xD792,
+ 35738 - 11905: 0xD793,
+ 35739 - 11905: 0xD794,
+ 35740 - 11905: 0xD795,
+ 35741 - 11905: 0xD796,
+ 35742 - 11905: 0xD797,
+ 35743 - 11905: 0xD798,
+ 35744 - 11905: 0xDAA5,
+ 35745 - 11905: 0xBCC6,
+ 35746 - 11905: 0xB6A9,
+ 35747 - 11905: 0xB8BC,
+ 35748 - 11905: 0xC8CF,
+ 35749 - 11905: 0xBCA5,
+ 35750 - 11905: 0xDAA6,
+ 35751 - 11905: 0xDAA7,
+ 35752 - 11905: 0xCCD6,
+ 35753 - 11905: 0xC8C3,
+ 35754 - 11905: 0xDAA8,
+ 35755 - 11905: 0xC6FD,
+ 35756 - 11905: 0xD799,
+ 35757 - 11905: 0xD1B5,
+ 35758 - 11905: 0xD2E9,
+ 35759 - 11905: 0xD1B6,
+ 35760 - 11905: 0xBCC7,
+ 35761 - 11905: 0xD79A,
+ 35762 - 11905: 0xBDB2,
+ 35763 - 11905: 0xBBE4,
+ 35764 - 11905: 0xDAA9,
+ 35765 - 11905: 0xDAAA,
+ 35766 - 11905: 0xD1C8,
+ 35767 - 11905: 0xDAAB,
+ 35768 - 11905: 0xD0ED,
+ 35769 - 11905: 0xB6EF,
+ 35770 - 11905: 0xC2DB,
+ 35771 - 11905: 0xD79B,
+ 35772 - 11905: 0xCBCF,
+ 35773 - 11905: 0xB7ED,
+ 35774 - 11905: 0xC9E8,
+ 35775 - 11905: 0xB7C3,
+ 35776 - 11905: 0xBEF7,
+ 35777 - 11905: 0xD6A4,
+ 35778 - 11905: 0xDAAC,
+ 35779 - 11905: 0xDAAD,
+ 35780 - 11905: 0xC6C0,
+ 35781 - 11905: 0xD7E7,
+ 35782 - 11905: 0xCAB6,
+ 35783 - 11905: 0xD79C,
+ 35784 - 11905: 0xD5A9,
+ 35785 - 11905: 0xCBDF,
+ 35786 - 11905: 0xD5EF,
+ 35787 - 11905: 0xDAAE,
+ 35788 - 11905: 0xD6DF,
+ 35789 - 11905: 0xB4CA,
+ 35790 - 11905: 0xDAB0,
+ 35791 - 11905: 0xDAAF,
+ 35792 - 11905: 0xD79D,
+ 35793 - 11905: 0xD2EB,
+ 35794 - 11905: 0xDAB1,
+ 35795 - 11905: 0xDAB2,
+ 35796 - 11905: 0xDAB3,
+ 35797 - 11905: 0xCAD4,
+ 35798 - 11905: 0xDAB4,
+ 35799 - 11905: 0xCAAB,
+ 35800 - 11905: 0xDAB5,
+ 35801 - 11905: 0xDAB6,
+ 35802 - 11905: 0xB3CF,
+ 35803 - 11905: 0xD6EF,
+ 35804 - 11905: 0xDAB7,
+ 35805 - 11905: 0xBBB0,
+ 35806 - 11905: 0xB5AE,
+ 35807 - 11905: 0xDAB8,
+ 35808 - 11905: 0xDAB9,
+ 35809 - 11905: 0xB9EE,
+ 35810 - 11905: 0xD1AF,
+ 35811 - 11905: 0xD2E8,
+ 35812 - 11905: 0xDABA,
+ 35813 - 11905: 0xB8C3,
+ 35814 - 11905: 0xCFEA,
+ 35815 - 11905: 0xB2EF,
+ 35816 - 11905: 0xDABB,
+ 35817 - 11905: 0xDABC,
+ 35818 - 11905: 0xD79E,
+ 35819 - 11905: 0xBDEB,
+ 35820 - 11905: 0xCEDC,
+ 35821 - 11905: 0xD3EF,
+ 35822 - 11905: 0xDABD,
+ 35823 - 11905: 0xCEF3,
+ 35824 - 11905: 0xDABE,
+ 35825 - 11905: 0xD3D5,
+ 35826 - 11905: 0xBBE5,
+ 35827 - 11905: 0xDABF,
+ 35828 - 11905: 0xCBB5,
+ 35829 - 11905: 0xCBD0,
+ 35830 - 11905: 0xDAC0,
+ 35831 - 11905: 0xC7EB,
+ 35832 - 11905: 0xD6EE,
+ 35833 - 11905: 0xDAC1,
+ 35834 - 11905: 0xC5B5,
+ 35835 - 11905: 0xB6C1,
+ 35836 - 11905: 0xDAC2,
+ 35837 - 11905: 0xB7CC,
+ 35838 - 11905: 0xBFCE,
+ 35839 - 11905: 0xDAC3,
+ 35840 - 11905: 0xDAC4,
+ 35841 - 11905: 0xCBAD,
+ 35842 - 11905: 0xDAC5,
+ 35843 - 11905: 0xB5F7,
+ 35844 - 11905: 0xDAC6,
+ 35845 - 11905: 0xC1C2,
+ 35846 - 11905: 0xD7BB,
+ 35847 - 11905: 0xDAC7,
+ 35848 - 11905: 0xCCB8,
+ 35849 - 11905: 0xD79F,
+ 35850 - 11905: 0xD2EA,
+ 35851 - 11905: 0xC4B1,
+ 35852 - 11905: 0xDAC8,
+ 35853 - 11905: 0xB5FD,
+ 35854 - 11905: 0xBBD1,
+ 35855 - 11905: 0xDAC9,
+ 35856 - 11905: 0xD0B3,
+ 35857 - 11905: 0xDACA,
+ 35858 - 11905: 0xDACB,
+ 35859 - 11905: 0xCEBD,
+ 35860 - 11905: 0xDACC,
+ 35861 - 11905: 0xDACD,
+ 35862 - 11905: 0xDACE,
+ 35863 - 11905: 0xB2F7,
+ 35864 - 11905: 0xDAD1,
+ 35865 - 11905: 0xDACF,
+ 35866 - 11905: 0xD1E8,
+ 35867 - 11905: 0xDAD0,
+ 35868 - 11905: 0xC3D5,
+ 35869 - 11905: 0xDAD2,
+ 35870 - 11905: 0xD7A0,
+ 35871 - 11905: 0xDAD3,
+ 35872 - 11905: 0xDAD4,
+ 35873 - 11905: 0xDAD5,
+ 35874 - 11905: 0xD0BB,
+ 35875 - 11905: 0xD2A5,
+ 35876 - 11905: 0xB0F9,
+ 35877 - 11905: 0xDAD6,
+ 35878 - 11905: 0xC7AB,
+ 35879 - 11905: 0xDAD7,
+ 35880 - 11905: 0xBDF7,
+ 35881 - 11905: 0xC3A1,
+ 35882 - 11905: 0xDAD8,
+ 35883 - 11905: 0xDAD9,
+ 35884 - 11905: 0xC3FD,
+ 35885 - 11905: 0xCCB7,
+ 35886 - 11905: 0xDADA,
+ 35887 - 11905: 0xDADB,
+ 35888 - 11905: 0xC0BE,
+ 35889 - 11905: 0xC6D7,
+ 35890 - 11905: 0xDADC,
+ 35891 - 11905: 0xDADD,
+ 35892 - 11905: 0xC7B4,
+ 35893 - 11905: 0xDADE,
+ 35894 - 11905: 0xDADF,
+ 35895 - 11905: 0xB9C8,
+ 35896 - 11905: 0xD840,
+ 35897 - 11905: 0xD841,
+ 35898 - 11905: 0xD842,
+ 35899 - 11905: 0xD843,
+ 35900 - 11905: 0xD844,
+ 35901 - 11905: 0xD845,
+ 35902 - 11905: 0xD846,
+ 35903 - 11905: 0xD847,
+ 35904 - 11905: 0xD848,
+ 35905 - 11905: 0xBBED,
+ 35906 - 11905: 0xD849,
+ 35907 - 11905: 0xD84A,
+ 35908 - 11905: 0xD84B,
+ 35909 - 11905: 0xD84C,
+ 35910 - 11905: 0xB6B9,
+ 35911 - 11905: 0xF4F8,
+ 35912 - 11905: 0xD84D,
+ 35913 - 11905: 0xF4F9,
+ 35914 - 11905: 0xD84E,
+ 35915 - 11905: 0xD84F,
+ 35916 - 11905: 0xCDE3,
+ 35917 - 11905: 0xD850,
+ 35918 - 11905: 0xD851,
+ 35919 - 11905: 0xD852,
+ 35920 - 11905: 0xD853,
+ 35921 - 11905: 0xD854,
+ 35922 - 11905: 0xD855,
+ 35923 - 11905: 0xD856,
+ 35924 - 11905: 0xD857,
+ 35925 - 11905: 0xF5B9,
+ 35926 - 11905: 0xD858,
+ 35927 - 11905: 0xD859,
+ 35928 - 11905: 0xD85A,
+ 35929 - 11905: 0xD85B,
+ 35930 - 11905: 0xEBE0,
+ 35931 - 11905: 0xD85C,
+ 35932 - 11905: 0xD85D,
+ 35933 - 11905: 0xD85E,
+ 35934 - 11905: 0xD85F,
+ 35935 - 11905: 0xD860,
+ 35936 - 11905: 0xD861,
+ 35937 - 11905: 0xCFF3,
+ 35938 - 11905: 0xBBBF,
+ 35939 - 11905: 0xD862,
+ 35940 - 11905: 0xD863,
+ 35941 - 11905: 0xD864,
+ 35942 - 11905: 0xD865,
+ 35943 - 11905: 0xD866,
+ 35944 - 11905: 0xD867,
+ 35945 - 11905: 0xD868,
+ 35946 - 11905: 0xBAC0,
+ 35947 - 11905: 0xD4A5,
+ 35948 - 11905: 0xD869,
+ 35949 - 11905: 0xD86A,
+ 35950 - 11905: 0xD86B,
+ 35951 - 11905: 0xD86C,
+ 35952 - 11905: 0xD86D,
+ 35953 - 11905: 0xD86E,
+ 35954 - 11905: 0xD86F,
+ 35955 - 11905: 0xE1D9,
+ 35956 - 11905: 0xD870,
+ 35957 - 11905: 0xD871,
+ 35958 - 11905: 0xD872,
+ 35959 - 11905: 0xD873,
+ 35960 - 11905: 0xF5F4,
+ 35961 - 11905: 0xB1AA,
+ 35962 - 11905: 0xB2F2,
+ 35963 - 11905: 0xD874,
+ 35964 - 11905: 0xD875,
+ 35965 - 11905: 0xD876,
+ 35966 - 11905: 0xD877,
+ 35967 - 11905: 0xD878,
+ 35968 - 11905: 0xD879,
+ 35969 - 11905: 0xD87A,
+ 35970 - 11905: 0xF5F5,
+ 35971 - 11905: 0xD87B,
+ 35972 - 11905: 0xD87C,
+ 35973 - 11905: 0xF5F7,
+ 35974 - 11905: 0xD87D,
+ 35975 - 11905: 0xD87E,
+ 35976 - 11905: 0xD880,
+ 35977 - 11905: 0xBAD1,
+ 35978 - 11905: 0xF5F6,
+ 35979 - 11905: 0xD881,
+ 35980 - 11905: 0xC3B2,
+ 35981 - 11905: 0xD882,
+ 35982 - 11905: 0xD883,
+ 35983 - 11905: 0xD884,
+ 35984 - 11905: 0xD885,
+ 35985 - 11905: 0xD886,
+ 35986 - 11905: 0xD887,
+ 35987 - 11905: 0xD888,
+ 35988 - 11905: 0xF5F9,
+ 35989 - 11905: 0xD889,
+ 35990 - 11905: 0xD88A,
+ 35991 - 11905: 0xD88B,
+ 35992 - 11905: 0xF5F8,
+ 35993 - 11905: 0xD88C,
+ 35994 - 11905: 0xD88D,
+ 35995 - 11905: 0xD88E,
+ 35996 - 11905: 0xD88F,
+ 35997 - 11905: 0xD890,
+ 35998 - 11905: 0xD891,
+ 35999 - 11905: 0xD892,
+ 36000 - 11905: 0xD893,
+ 36001 - 11905: 0xD894,
+ 36002 - 11905: 0xD895,
+ 36003 - 11905: 0xD896,
+ 36004 - 11905: 0xD897,
+ 36005 - 11905: 0xD898,
+ 36006 - 11905: 0xD899,
+ 36007 - 11905: 0xD89A,
+ 36008 - 11905: 0xD89B,
+ 36009 - 11905: 0xD89C,
+ 36010 - 11905: 0xD89D,
+ 36011 - 11905: 0xD89E,
+ 36012 - 11905: 0xD89F,
+ 36013 - 11905: 0xD8A0,
+ 36014 - 11905: 0xD940,
+ 36015 - 11905: 0xD941,
+ 36016 - 11905: 0xD942,
+ 36017 - 11905: 0xD943,
+ 36018 - 11905: 0xD944,
+ 36019 - 11905: 0xD945,
+ 36020 - 11905: 0xD946,
+ 36021 - 11905: 0xD947,
+ 36022 - 11905: 0xD948,
+ 36023 - 11905: 0xD949,
+ 36024 - 11905: 0xD94A,
+ 36025 - 11905: 0xD94B,
+ 36026 - 11905: 0xD94C,
+ 36027 - 11905: 0xD94D,
+ 36028 - 11905: 0xD94E,
+ 36029 - 11905: 0xD94F,
+ 36030 - 11905: 0xD950,
+ 36031 - 11905: 0xD951,
+ 36032 - 11905: 0xD952,
+ 36033 - 11905: 0xD953,
+ 36034 - 11905: 0xD954,
+ 36035 - 11905: 0xD955,
+ 36036 - 11905: 0xD956,
+ 36037 - 11905: 0xD957,
+ 36038 - 11905: 0xD958,
+ 36039 - 11905: 0xD959,
+ 36040 - 11905: 0xD95A,
+ 36041 - 11905: 0xD95B,
+ 36042 - 11905: 0xD95C,
+ 36043 - 11905: 0xD95D,
+ 36044 - 11905: 0xD95E,
+ 36045 - 11905: 0xD95F,
+ 36046 - 11905: 0xD960,
+ 36047 - 11905: 0xD961,
+ 36048 - 11905: 0xD962,
+ 36049 - 11905: 0xD963,
+ 36050 - 11905: 0xD964,
+ 36051 - 11905: 0xD965,
+ 36052 - 11905: 0xD966,
+ 36053 - 11905: 0xD967,
+ 36054 - 11905: 0xD968,
+ 36055 - 11905: 0xD969,
+ 36056 - 11905: 0xD96A,
+ 36057 - 11905: 0xD96B,
+ 36058 - 11905: 0xD96C,
+ 36059 - 11905: 0xD96D,
+ 36060 - 11905: 0xD96E,
+ 36061 - 11905: 0xD96F,
+ 36062 - 11905: 0xD970,
+ 36063 - 11905: 0xD971,
+ 36064 - 11905: 0xD972,
+ 36065 - 11905: 0xD973,
+ 36066 - 11905: 0xD974,
+ 36067 - 11905: 0xD975,
+ 36068 - 11905: 0xD976,
+ 36069 - 11905: 0xD977,
+ 36070 - 11905: 0xD978,
+ 36071 - 11905: 0xD979,
+ 36072 - 11905: 0xD97A,
+ 36073 - 11905: 0xD97B,
+ 36074 - 11905: 0xD97C,
+ 36075 - 11905: 0xD97D,
+ 36076 - 11905: 0xD97E,
+ 36077 - 11905: 0xD980,
+ 36078 - 11905: 0xD981,
+ 36079 - 11905: 0xD982,
+ 36080 - 11905: 0xD983,
+ 36081 - 11905: 0xD984,
+ 36082 - 11905: 0xD985,
+ 36083 - 11905: 0xD986,
+ 36084 - 11905: 0xD987,
+ 36085 - 11905: 0xD988,
+ 36086 - 11905: 0xD989,
+ 36087 - 11905: 0xD98A,
+ 36088 - 11905: 0xD98B,
+ 36089 - 11905: 0xD98C,
+ 36090 - 11905: 0xD98D,
+ 36091 - 11905: 0xD98E,
+ 36092 - 11905: 0xD98F,
+ 36093 - 11905: 0xD990,
+ 36094 - 11905: 0xD991,
+ 36095 - 11905: 0xD992,
+ 36096 - 11905: 0xD993,
+ 36097 - 11905: 0xD994,
+ 36098 - 11905: 0xD995,
+ 36099 - 11905: 0xD996,
+ 36100 - 11905: 0xD997,
+ 36101 - 11905: 0xD998,
+ 36102 - 11905: 0xD999,
+ 36103 - 11905: 0xD99A,
+ 36104 - 11905: 0xD99B,
+ 36105 - 11905: 0xD99C,
+ 36106 - 11905: 0xD99D,
+ 36107 - 11905: 0xD99E,
+ 36108 - 11905: 0xD99F,
+ 36109 - 11905: 0xD9A0,
+ 36110 - 11905: 0xDA40,
+ 36111 - 11905: 0xDA41,
+ 36112 - 11905: 0xDA42,
+ 36113 - 11905: 0xDA43,
+ 36114 - 11905: 0xDA44,
+ 36115 - 11905: 0xDA45,
+ 36116 - 11905: 0xDA46,
+ 36117 - 11905: 0xDA47,
+ 36118 - 11905: 0xDA48,
+ 36119 - 11905: 0xDA49,
+ 36120 - 11905: 0xDA4A,
+ 36121 - 11905: 0xDA4B,
+ 36122 - 11905: 0xDA4C,
+ 36123 - 11905: 0xDA4D,
+ 36124 - 11905: 0xDA4E,
+ 36125 - 11905: 0xB1B4,
+ 36126 - 11905: 0xD5EA,
+ 36127 - 11905: 0xB8BA,
+ 36128 - 11905: 0xDA4F,
+ 36129 - 11905: 0xB9B1,
+ 36130 - 11905: 0xB2C6,
+ 36131 - 11905: 0xD4F0,
+ 36132 - 11905: 0xCFCD,
+ 36133 - 11905: 0xB0DC,
+ 36134 - 11905: 0xD5CB,
+ 36135 - 11905: 0xBBF5,
+ 36136 - 11905: 0xD6CA,
+ 36137 - 11905: 0xB7B7,
+ 36138 - 11905: 0xCCB0,
+ 36139 - 11905: 0xC6B6,
+ 36140 - 11905: 0xB1E1,
+ 36141 - 11905: 0xB9BA,
+ 36142 - 11905: 0xD6FC,
+ 36143 - 11905: 0xB9E1,
+ 36144 - 11905: 0xB7A1,
+ 36145 - 11905: 0xBCFA,
+ 36146 - 11905: 0xEADA,
+ 36147 - 11905: 0xEADB,
+ 36148 - 11905: 0xCCF9,
+ 36149 - 11905: 0xB9F3,
+ 36150 - 11905: 0xEADC,
+ 36151 - 11905: 0xB4FB,
+ 36152 - 11905: 0xC3B3,
+ 36153 - 11905: 0xB7D1,
+ 36154 - 11905: 0xBAD8,
+ 36155 - 11905: 0xEADD,
+ 36156 - 11905: 0xD4F4,
+ 36157 - 11905: 0xEADE,
+ 36158 - 11905: 0xBCD6,
+ 36159 - 11905: 0xBBDF,
+ 36160 - 11905: 0xEADF,
+ 36161 - 11905: 0xC1DE,
+ 36162 - 11905: 0xC2B8,
+ 36163 - 11905: 0xD4DF,
+ 36164 - 11905: 0xD7CA,
+ 36165 - 11905: 0xEAE0,
+ 36166 - 11905: 0xEAE1,
+ 36167 - 11905: 0xEAE4,
+ 36168 - 11905: 0xEAE2,
+ 36169 - 11905: 0xEAE3,
+ 36170 - 11905: 0xC9DE,
+ 36171 - 11905: 0xB8B3,
+ 36172 - 11905: 0xB6C4,
+ 36173 - 11905: 0xEAE5,
+ 36174 - 11905: 0xCAEA,
+ 36175 - 11905: 0xC9CD,
+ 36176 - 11905: 0xB4CD,
+ 36177 - 11905: 0xDA50,
+ 36178 - 11905: 0xDA51,
+ 36179 - 11905: 0xE2D9,
+ 36180 - 11905: 0xC5E2,
+ 36181 - 11905: 0xEAE6,
+ 36182 - 11905: 0xC0B5,
+ 36183 - 11905: 0xDA52,
+ 36184 - 11905: 0xD7B8,
+ 36185 - 11905: 0xEAE7,
+ 36186 - 11905: 0xD7AC,
+ 36187 - 11905: 0xC8FC,
+ 36188 - 11905: 0xD8D3,
+ 36189 - 11905: 0xD8CD,
+ 36190 - 11905: 0xD4DE,
+ 36191 - 11905: 0xDA53,
+ 36192 - 11905: 0xD4F9,
+ 36193 - 11905: 0xC9C4,
+ 36194 - 11905: 0xD3AE,
+ 36195 - 11905: 0xB8D3,
+ 36196 - 11905: 0xB3E0,
+ 36197 - 11905: 0xDA54,
+ 36198 - 11905: 0xC9E2,
+ 36199 - 11905: 0xF4F6,
+ 36200 - 11905: 0xDA55,
+ 36201 - 11905: 0xDA56,
+ 36202 - 11905: 0xDA57,
+ 36203 - 11905: 0xBAD5,
+ 36204 - 11905: 0xDA58,
+ 36205 - 11905: 0xF4F7,
+ 36206 - 11905: 0xDA59,
+ 36207 - 11905: 0xDA5A,
+ 36208 - 11905: 0xD7DF,
+ 36209 - 11905: 0xDA5B,
+ 36210 - 11905: 0xDA5C,
+ 36211 - 11905: 0xF4F1,
+ 36212 - 11905: 0xB8B0,
+ 36213 - 11905: 0xD5D4,
+ 36214 - 11905: 0xB8CF,
+ 36215 - 11905: 0xC6F0,
+ 36216 - 11905: 0xDA5D,
+ 36217 - 11905: 0xDA5E,
+ 36218 - 11905: 0xDA5F,
+ 36219 - 11905: 0xDA60,
+ 36220 - 11905: 0xDA61,
+ 36221 - 11905: 0xDA62,
+ 36222 - 11905: 0xDA63,
+ 36223 - 11905: 0xDA64,
+ 36224 - 11905: 0xDA65,
+ 36225 - 11905: 0xB3C3,
+ 36226 - 11905: 0xDA66,
+ 36227 - 11905: 0xDA67,
+ 36228 - 11905: 0xF4F2,
+ 36229 - 11905: 0xB3AC,
+ 36230 - 11905: 0xDA68,
+ 36231 - 11905: 0xDA69,
+ 36232 - 11905: 0xDA6A,
+ 36233 - 11905: 0xDA6B,
+ 36234 - 11905: 0xD4BD,
+ 36235 - 11905: 0xC7F7,
+ 36236 - 11905: 0xDA6C,
+ 36237 - 11905: 0xDA6D,
+ 36238 - 11905: 0xDA6E,
+ 36239 - 11905: 0xDA6F,
+ 36240 - 11905: 0xDA70,
+ 36241 - 11905: 0xF4F4,
+ 36242 - 11905: 0xDA71,
+ 36243 - 11905: 0xDA72,
+ 36244 - 11905: 0xF4F3,
+ 36245 - 11905: 0xDA73,
+ 36246 - 11905: 0xDA74,
+ 36247 - 11905: 0xDA75,
+ 36248 - 11905: 0xDA76,
+ 36249 - 11905: 0xDA77,
+ 36250 - 11905: 0xDA78,
+ 36251 - 11905: 0xDA79,
+ 36252 - 11905: 0xDA7A,
+ 36253 - 11905: 0xDA7B,
+ 36254 - 11905: 0xDA7C,
+ 36255 - 11905: 0xCCCB,
+ 36256 - 11905: 0xDA7D,
+ 36257 - 11905: 0xDA7E,
+ 36258 - 11905: 0xDA80,
+ 36259 - 11905: 0xC8A4,
+ 36260 - 11905: 0xDA81,
+ 36261 - 11905: 0xDA82,
+ 36262 - 11905: 0xDA83,
+ 36263 - 11905: 0xDA84,
+ 36264 - 11905: 0xDA85,
+ 36265 - 11905: 0xDA86,
+ 36266 - 11905: 0xDA87,
+ 36267 - 11905: 0xDA88,
+ 36268 - 11905: 0xDA89,
+ 36269 - 11905: 0xDA8A,
+ 36270 - 11905: 0xDA8B,
+ 36271 - 11905: 0xDA8C,
+ 36272 - 11905: 0xDA8D,
+ 36273 - 11905: 0xF4F5,
+ 36274 - 11905: 0xDA8E,
+ 36275 - 11905: 0xD7E3,
+ 36276 - 11905: 0xC5BF,
+ 36277 - 11905: 0xF5C0,
+ 36278 - 11905: 0xDA8F,
+ 36279 - 11905: 0xDA90,
+ 36280 - 11905: 0xF5BB,
+ 36281 - 11905: 0xDA91,
+ 36282 - 11905: 0xF5C3,
+ 36283 - 11905: 0xDA92,
+ 36284 - 11905: 0xF5C2,
+ 36285 - 11905: 0xDA93,
+ 36286 - 11905: 0xD6BA,
+ 36287 - 11905: 0xF5C1,
+ 36288 - 11905: 0xDA94,
+ 36289 - 11905: 0xDA95,
+ 36290 - 11905: 0xDA96,
+ 36291 - 11905: 0xD4BE,
+ 36292 - 11905: 0xF5C4,
+ 36293 - 11905: 0xDA97,
+ 36294 - 11905: 0xF5CC,
+ 36295 - 11905: 0xDA98,
+ 36296 - 11905: 0xDA99,
+ 36297 - 11905: 0xDA9A,
+ 36298 - 11905: 0xDA9B,
+ 36299 - 11905: 0xB0CF,
+ 36300 - 11905: 0xB5F8,
+ 36301 - 11905: 0xDA9C,
+ 36302 - 11905: 0xF5C9,
+ 36303 - 11905: 0xF5CA,
+ 36304 - 11905: 0xDA9D,
+ 36305 - 11905: 0xC5DC,
+ 36306 - 11905: 0xDA9E,
+ 36307 - 11905: 0xDA9F,
+ 36308 - 11905: 0xDAA0,
+ 36309 - 11905: 0xDB40,
+ 36310 - 11905: 0xF5C5,
+ 36311 - 11905: 0xF5C6,
+ 36312 - 11905: 0xDB41,
+ 36313 - 11905: 0xDB42,
+ 36314 - 11905: 0xF5C7,
+ 36315 - 11905: 0xF5CB,
+ 36316 - 11905: 0xDB43,
+ 36317 - 11905: 0xBEE0,
+ 36318 - 11905: 0xF5C8,
+ 36319 - 11905: 0xB8FA,
+ 36320 - 11905: 0xDB44,
+ 36321 - 11905: 0xDB45,
+ 36322 - 11905: 0xDB46,
+ 36323 - 11905: 0xF5D0,
+ 36324 - 11905: 0xF5D3,
+ 36325 - 11905: 0xDB47,
+ 36326 - 11905: 0xDB48,
+ 36327 - 11905: 0xDB49,
+ 36328 - 11905: 0xBFE7,
+ 36329 - 11905: 0xDB4A,
+ 36330 - 11905: 0xB9F2,
+ 36331 - 11905: 0xF5BC,
+ 36332 - 11905: 0xF5CD,
+ 36333 - 11905: 0xDB4B,
+ 36334 - 11905: 0xDB4C,
+ 36335 - 11905: 0xC2B7,
+ 36336 - 11905: 0xDB4D,
+ 36337 - 11905: 0xDB4E,
+ 36338 - 11905: 0xDB4F,
+ 36339 - 11905: 0xCCF8,
+ 36340 - 11905: 0xDB50,
+ 36341 - 11905: 0xBCF9,
+ 36342 - 11905: 0xDB51,
+ 36343 - 11905: 0xF5CE,
+ 36344 - 11905: 0xF5CF,
+ 36345 - 11905: 0xF5D1,
+ 36346 - 11905: 0xB6E5,
+ 36347 - 11905: 0xF5D2,
+ 36348 - 11905: 0xDB52,
+ 36349 - 11905: 0xF5D5,
+ 36350 - 11905: 0xDB53,
+ 36351 - 11905: 0xDB54,
+ 36352 - 11905: 0xDB55,
+ 36353 - 11905: 0xDB56,
+ 36354 - 11905: 0xDB57,
+ 36355 - 11905: 0xDB58,
+ 36356 - 11905: 0xDB59,
+ 36357 - 11905: 0xF5BD,
+ 36358 - 11905: 0xDB5A,
+ 36359 - 11905: 0xDB5B,
+ 36360 - 11905: 0xDB5C,
+ 36361 - 11905: 0xF5D4,
+ 36362 - 11905: 0xD3BB,
+ 36363 - 11905: 0xDB5D,
+ 36364 - 11905: 0xB3EC,
+ 36365 - 11905: 0xDB5E,
+ 36366 - 11905: 0xDB5F,
+ 36367 - 11905: 0xCCA4,
+ 36368 - 11905: 0xDB60,
+ 36369 - 11905: 0xDB61,
+ 36370 - 11905: 0xDB62,
+ 36371 - 11905: 0xDB63,
+ 36372 - 11905: 0xF5D6,
+ 36373 - 11905: 0xDB64,
+ 36374 - 11905: 0xDB65,
+ 36375 - 11905: 0xDB66,
+ 36376 - 11905: 0xDB67,
+ 36377 - 11905: 0xDB68,
+ 36378 - 11905: 0xDB69,
+ 36379 - 11905: 0xDB6A,
+ 36380 - 11905: 0xDB6B,
+ 36381 - 11905: 0xF5D7,
+ 36382 - 11905: 0xBEE1,
+ 36383 - 11905: 0xF5D8,
+ 36384 - 11905: 0xDB6C,
+ 36385 - 11905: 0xDB6D,
+ 36386 - 11905: 0xCCDF,
+ 36387 - 11905: 0xF5DB,
+ 36388 - 11905: 0xDB6E,
+ 36389 - 11905: 0xDB6F,
+ 36390 - 11905: 0xDB70,
+ 36391 - 11905: 0xDB71,
+ 36392 - 11905: 0xDB72,
+ 36393 - 11905: 0xB2C8,
+ 36394 - 11905: 0xD7D9,
+ 36395 - 11905: 0xDB73,
+ 36396 - 11905: 0xF5D9,
+ 36397 - 11905: 0xDB74,
+ 36398 - 11905: 0xF5DA,
+ 36399 - 11905: 0xF5DC,
+ 36400 - 11905: 0xDB75,
+ 36401 - 11905: 0xF5E2,
+ 36402 - 11905: 0xDB76,
+ 36403 - 11905: 0xDB77,
+ 36404 - 11905: 0xDB78,
+ 36405 - 11905: 0xF5E0,
+ 36406 - 11905: 0xDB79,
+ 36407 - 11905: 0xDB7A,
+ 36408 - 11905: 0xDB7B,
+ 36409 - 11905: 0xF5DF,
+ 36410 - 11905: 0xF5DD,
+ 36411 - 11905: 0xDB7C,
+ 36412 - 11905: 0xDB7D,
+ 36413 - 11905: 0xF5E1,
+ 36414 - 11905: 0xDB7E,
+ 36415 - 11905: 0xDB80,
+ 36416 - 11905: 0xF5DE,
+ 36417 - 11905: 0xF5E4,
+ 36418 - 11905: 0xF5E5,
+ 36419 - 11905: 0xDB81,
+ 36420 - 11905: 0xCCE3,
+ 36421 - 11905: 0xDB82,
+ 36422 - 11905: 0xDB83,
+ 36423 - 11905: 0xE5BF,
+ 36424 - 11905: 0xB5B8,
+ 36425 - 11905: 0xF5E3,
+ 36426 - 11905: 0xF5E8,
+ 36427 - 11905: 0xCCA3,
+ 36428 - 11905: 0xDB84,
+ 36429 - 11905: 0xDB85,
+ 36430 - 11905: 0xDB86,
+ 36431 - 11905: 0xDB87,
+ 36432 - 11905: 0xDB88,
+ 36433 - 11905: 0xF5E6,
+ 36434 - 11905: 0xF5E7,
+ 36435 - 11905: 0xDB89,
+ 36436 - 11905: 0xDB8A,
+ 36437 - 11905: 0xDB8B,
+ 36438 - 11905: 0xDB8C,
+ 36439 - 11905: 0xDB8D,
+ 36440 - 11905: 0xDB8E,
+ 36441 - 11905: 0xF5BE,
+ 36442 - 11905: 0xDB8F,
+ 36443 - 11905: 0xDB90,
+ 36444 - 11905: 0xDB91,
+ 36445 - 11905: 0xDB92,
+ 36446 - 11905: 0xDB93,
+ 36447 - 11905: 0xDB94,
+ 36448 - 11905: 0xDB95,
+ 36449 - 11905: 0xDB96,
+ 36450 - 11905: 0xDB97,
+ 36451 - 11905: 0xDB98,
+ 36452 - 11905: 0xDB99,
+ 36453 - 11905: 0xDB9A,
+ 36454 - 11905: 0xB1C4,
+ 36455 - 11905: 0xDB9B,
+ 36456 - 11905: 0xDB9C,
+ 36457 - 11905: 0xF5BF,
+ 36458 - 11905: 0xDB9D,
+ 36459 - 11905: 0xDB9E,
+ 36460 - 11905: 0xB5C5,
+ 36461 - 11905: 0xB2E4,
+ 36462 - 11905: 0xDB9F,
+ 36463 - 11905: 0xF5EC,
+ 36464 - 11905: 0xF5E9,
+ 36465 - 11905: 0xDBA0,
+ 36466 - 11905: 0xB6D7,
+ 36467 - 11905: 0xDC40,
+ 36468 - 11905: 0xF5ED,
+ 36469 - 11905: 0xDC41,
+ 36470 - 11905: 0xF5EA,
+ 36471 - 11905: 0xDC42,
+ 36472 - 11905: 0xDC43,
+ 36473 - 11905: 0xDC44,
+ 36474 - 11905: 0xDC45,
+ 36475 - 11905: 0xDC46,
+ 36476 - 11905: 0xF5EB,
+ 36477 - 11905: 0xDC47,
+ 36478 - 11905: 0xDC48,
+ 36479 - 11905: 0xB4DA,
+ 36480 - 11905: 0xDC49,
+ 36481 - 11905: 0xD4EA,
+ 36482 - 11905: 0xDC4A,
+ 36483 - 11905: 0xDC4B,
+ 36484 - 11905: 0xDC4C,
+ 36485 - 11905: 0xF5EE,
+ 36486 - 11905: 0xDC4D,
+ 36487 - 11905: 0xB3F9,
+ 36488 - 11905: 0xDC4E,
+ 36489 - 11905: 0xDC4F,
+ 36490 - 11905: 0xDC50,
+ 36491 - 11905: 0xDC51,
+ 36492 - 11905: 0xDC52,
+ 36493 - 11905: 0xDC53,
+ 36494 - 11905: 0xDC54,
+ 36495 - 11905: 0xF5EF,
+ 36496 - 11905: 0xF5F1,
+ 36497 - 11905: 0xDC55,
+ 36498 - 11905: 0xDC56,
+ 36499 - 11905: 0xDC57,
+ 36500 - 11905: 0xF5F0,
+ 36501 - 11905: 0xDC58,
+ 36502 - 11905: 0xDC59,
+ 36503 - 11905: 0xDC5A,
+ 36504 - 11905: 0xDC5B,
+ 36505 - 11905: 0xDC5C,
+ 36506 - 11905: 0xDC5D,
+ 36507 - 11905: 0xDC5E,
+ 36508 - 11905: 0xF5F2,
+ 36509 - 11905: 0xDC5F,
+ 36510 - 11905: 0xF5F3,
+ 36511 - 11905: 0xDC60,
+ 36512 - 11905: 0xDC61,
+ 36513 - 11905: 0xDC62,
+ 36514 - 11905: 0xDC63,
+ 36515 - 11905: 0xDC64,
+ 36516 - 11905: 0xDC65,
+ 36517 - 11905: 0xDC66,
+ 36518 - 11905: 0xDC67,
+ 36519 - 11905: 0xDC68,
+ 36520 - 11905: 0xDC69,
+ 36521 - 11905: 0xDC6A,
+ 36522 - 11905: 0xDC6B,
+ 36523 - 11905: 0xC9ED,
+ 36524 - 11905: 0xB9AA,
+ 36525 - 11905: 0xDC6C,
+ 36526 - 11905: 0xDC6D,
+ 36527 - 11905: 0xC7FB,
+ 36528 - 11905: 0xDC6E,
+ 36529 - 11905: 0xDC6F,
+ 36530 - 11905: 0xB6E3,
+ 36531 - 11905: 0xDC70,
+ 36532 - 11905: 0xDC71,
+ 36533 - 11905: 0xDC72,
+ 36534 - 11905: 0xDC73,
+ 36535 - 11905: 0xDC74,
+ 36536 - 11905: 0xDC75,
+ 36537 - 11905: 0xDC76,
+ 36538 - 11905: 0xCCC9,
+ 36539 - 11905: 0xDC77,
+ 36540 - 11905: 0xDC78,
+ 36541 - 11905: 0xDC79,
+ 36542 - 11905: 0xDC7A,
+ 36543 - 11905: 0xDC7B,
+ 36544 - 11905: 0xDC7C,
+ 36545 - 11905: 0xDC7D,
+ 36546 - 11905: 0xDC7E,
+ 36547 - 11905: 0xDC80,
+ 36548 - 11905: 0xDC81,
+ 36549 - 11905: 0xDC82,
+ 36550 - 11905: 0xDC83,
+ 36551 - 11905: 0xDC84,
+ 36552 - 11905: 0xDC85,
+ 36553 - 11905: 0xDC86,
+ 36554 - 11905: 0xDC87,
+ 36555 - 11905: 0xDC88,
+ 36556 - 11905: 0xDC89,
+ 36557 - 11905: 0xDC8A,
+ 36558 - 11905: 0xEAA6,
+ 36559 - 11905: 0xDC8B,
+ 36560 - 11905: 0xDC8C,
+ 36561 - 11905: 0xDC8D,
+ 36562 - 11905: 0xDC8E,
+ 36563 - 11905: 0xDC8F,
+ 36564 - 11905: 0xDC90,
+ 36565 - 11905: 0xDC91,
+ 36566 - 11905: 0xDC92,
+ 36567 - 11905: 0xDC93,
+ 36568 - 11905: 0xDC94,
+ 36569 - 11905: 0xDC95,
+ 36570 - 11905: 0xDC96,
+ 36571 - 11905: 0xDC97,
+ 36572 - 11905: 0xDC98,
+ 36573 - 11905: 0xDC99,
+ 36574 - 11905: 0xDC9A,
+ 36575 - 11905: 0xDC9B,
+ 36576 - 11905: 0xDC9C,
+ 36577 - 11905: 0xDC9D,
+ 36578 - 11905: 0xDC9E,
+ 36579 - 11905: 0xDC9F,
+ 36580 - 11905: 0xDCA0,
+ 36581 - 11905: 0xDD40,
+ 36582 - 11905: 0xDD41,
+ 36583 - 11905: 0xDD42,
+ 36584 - 11905: 0xDD43,
+ 36585 - 11905: 0xDD44,
+ 36586 - 11905: 0xDD45,
+ 36587 - 11905: 0xDD46,
+ 36588 - 11905: 0xDD47,
+ 36589 - 11905: 0xDD48,
+ 36590 - 11905: 0xDD49,
+ 36591 - 11905: 0xDD4A,
+ 36592 - 11905: 0xDD4B,
+ 36593 - 11905: 0xDD4C,
+ 36594 - 11905: 0xDD4D,
+ 36595 - 11905: 0xDD4E,
+ 36596 - 11905: 0xDD4F,
+ 36597 - 11905: 0xDD50,
+ 36598 - 11905: 0xDD51,
+ 36599 - 11905: 0xDD52,
+ 36600 - 11905: 0xDD53,
+ 36601 - 11905: 0xDD54,
+ 36602 - 11905: 0xDD55,
+ 36603 - 11905: 0xDD56,
+ 36604 - 11905: 0xDD57,
+ 36605 - 11905: 0xDD58,
+ 36606 - 11905: 0xDD59,
+ 36607 - 11905: 0xDD5A,
+ 36608 - 11905: 0xDD5B,
+ 36609 - 11905: 0xDD5C,
+ 36610 - 11905: 0xDD5D,
+ 36611 - 11905: 0xDD5E,
+ 36612 - 11905: 0xDD5F,
+ 36613 - 11905: 0xDD60,
+ 36614 - 11905: 0xDD61,
+ 36615 - 11905: 0xDD62,
+ 36616 - 11905: 0xDD63,
+ 36617 - 11905: 0xDD64,
+ 36618 - 11905: 0xDD65,
+ 36619 - 11905: 0xDD66,
+ 36620 - 11905: 0xDD67,
+ 36621 - 11905: 0xDD68,
+ 36622 - 11905: 0xDD69,
+ 36623 - 11905: 0xDD6A,
+ 36624 - 11905: 0xDD6B,
+ 36625 - 11905: 0xDD6C,
+ 36626 - 11905: 0xDD6D,
+ 36627 - 11905: 0xDD6E,
+ 36628 - 11905: 0xDD6F,
+ 36629 - 11905: 0xDD70,
+ 36630 - 11905: 0xDD71,
+ 36631 - 11905: 0xDD72,
+ 36632 - 11905: 0xDD73,
+ 36633 - 11905: 0xDD74,
+ 36634 - 11905: 0xDD75,
+ 36635 - 11905: 0xDD76,
+ 36636 - 11905: 0xDD77,
+ 36637 - 11905: 0xDD78,
+ 36638 - 11905: 0xDD79,
+ 36639 - 11905: 0xDD7A,
+ 36640 - 11905: 0xDD7B,
+ 36641 - 11905: 0xDD7C,
+ 36642 - 11905: 0xDD7D,
+ 36643 - 11905: 0xDD7E,
+ 36644 - 11905: 0xDD80,
+ 36645 - 11905: 0xDD81,
+ 36646 - 11905: 0xDD82,
+ 36647 - 11905: 0xDD83,
+ 36648 - 11905: 0xDD84,
+ 36649 - 11905: 0xDD85,
+ 36650 - 11905: 0xDD86,
+ 36651 - 11905: 0xDD87,
+ 36652 - 11905: 0xDD88,
+ 36653 - 11905: 0xDD89,
+ 36654 - 11905: 0xDD8A,
+ 36655 - 11905: 0xDD8B,
+ 36656 - 11905: 0xDD8C,
+ 36657 - 11905: 0xDD8D,
+ 36658 - 11905: 0xDD8E,
+ 36659 - 11905: 0xDD8F,
+ 36660 - 11905: 0xDD90,
+ 36661 - 11905: 0xDD91,
+ 36662 - 11905: 0xDD92,
+ 36663 - 11905: 0xDD93,
+ 36664 - 11905: 0xDD94,
+ 36665 - 11905: 0xDD95,
+ 36666 - 11905: 0xDD96,
+ 36667 - 11905: 0xDD97,
+ 36668 - 11905: 0xDD98,
+ 36669 - 11905: 0xDD99,
+ 36670 - 11905: 0xDD9A,
+ 36671 - 11905: 0xDD9B,
+ 36672 - 11905: 0xDD9C,
+ 36673 - 11905: 0xDD9D,
+ 36674 - 11905: 0xDD9E,
+ 36675 - 11905: 0xDD9F,
+ 36676 - 11905: 0xDDA0,
+ 36677 - 11905: 0xDE40,
+ 36678 - 11905: 0xDE41,
+ 36679 - 11905: 0xDE42,
+ 36680 - 11905: 0xDE43,
+ 36681 - 11905: 0xDE44,
+ 36682 - 11905: 0xDE45,
+ 36683 - 11905: 0xDE46,
+ 36684 - 11905: 0xDE47,
+ 36685 - 11905: 0xDE48,
+ 36686 - 11905: 0xDE49,
+ 36687 - 11905: 0xDE4A,
+ 36688 - 11905: 0xDE4B,
+ 36689 - 11905: 0xDE4C,
+ 36690 - 11905: 0xDE4D,
+ 36691 - 11905: 0xDE4E,
+ 36692 - 11905: 0xDE4F,
+ 36693 - 11905: 0xDE50,
+ 36694 - 11905: 0xDE51,
+ 36695 - 11905: 0xDE52,
+ 36696 - 11905: 0xDE53,
+ 36697 - 11905: 0xDE54,
+ 36698 - 11905: 0xDE55,
+ 36699 - 11905: 0xDE56,
+ 36700 - 11905: 0xDE57,
+ 36701 - 11905: 0xDE58,
+ 36702 - 11905: 0xDE59,
+ 36703 - 11905: 0xDE5A,
+ 36704 - 11905: 0xDE5B,
+ 36705 - 11905: 0xDE5C,
+ 36706 - 11905: 0xDE5D,
+ 36707 - 11905: 0xDE5E,
+ 36708 - 11905: 0xDE5F,
+ 36709 - 11905: 0xDE60,
+ 36710 - 11905: 0xB3B5,
+ 36711 - 11905: 0xD4FE,
+ 36712 - 11905: 0xB9EC,
+ 36713 - 11905: 0xD0F9,
+ 36714 - 11905: 0xDE61,
+ 36715 - 11905: 0xE9ED,
+ 36716 - 11905: 0xD7AA,
+ 36717 - 11905: 0xE9EE,
+ 36718 - 11905: 0xC2D6,
+ 36719 - 11905: 0xC8ED,
+ 36720 - 11905: 0xBAE4,
+ 36721 - 11905: 0xE9EF,
+ 36722 - 11905: 0xE9F0,
+ 36723 - 11905: 0xE9F1,
+ 36724 - 11905: 0xD6E1,
+ 36725 - 11905: 0xE9F2,
+ 36726 - 11905: 0xE9F3,
+ 36727 - 11905: 0xE9F5,
+ 36728 - 11905: 0xE9F4,
+ 36729 - 11905: 0xE9F6,
+ 36730 - 11905: 0xE9F7,
+ 36731 - 11905: 0xC7E1,
+ 36732 - 11905: 0xE9F8,
+ 36733 - 11905: 0xD4D8,
+ 36734 - 11905: 0xE9F9,
+ 36735 - 11905: 0xBDCE,
+ 36736 - 11905: 0xDE62,
+ 36737 - 11905: 0xE9FA,
+ 36738 - 11905: 0xE9FB,
+ 36739 - 11905: 0xBDCF,
+ 36740 - 11905: 0xE9FC,
+ 36741 - 11905: 0xB8A8,
+ 36742 - 11905: 0xC1BE,
+ 36743 - 11905: 0xE9FD,
+ 36744 - 11905: 0xB1B2,
+ 36745 - 11905: 0xBBD4,
+ 36746 - 11905: 0xB9F5,
+ 36747 - 11905: 0xE9FE,
+ 36748 - 11905: 0xDE63,
+ 36749 - 11905: 0xEAA1,
+ 36750 - 11905: 0xEAA2,
+ 36751 - 11905: 0xEAA3,
+ 36752 - 11905: 0xB7F8,
+ 36753 - 11905: 0xBCAD,
+ 36754 - 11905: 0xDE64,
+ 36755 - 11905: 0xCAE4,
+ 36756 - 11905: 0xE0CE,
+ 36757 - 11905: 0xD4AF,
+ 36758 - 11905: 0xCFBD,
+ 36759 - 11905: 0xD5B7,
+ 36760 - 11905: 0xEAA4,
+ 36761 - 11905: 0xD5DE,
+ 36762 - 11905: 0xEAA5,
+ 36763 - 11905: 0xD0C1,
+ 36764 - 11905: 0xB9BC,
+ 36765 - 11905: 0xDE65,
+ 36766 - 11905: 0xB4C7,
+ 36767 - 11905: 0xB1D9,
+ 36768 - 11905: 0xDE66,
+ 36769 - 11905: 0xDE67,
+ 36770 - 11905: 0xDE68,
+ 36771 - 11905: 0xC0B1,
+ 36772 - 11905: 0xDE69,
+ 36773 - 11905: 0xDE6A,
+ 36774 - 11905: 0xDE6B,
+ 36775 - 11905: 0xDE6C,
+ 36776 - 11905: 0xB1E6,
+ 36777 - 11905: 0xB1E7,
+ 36778 - 11905: 0xDE6D,
+ 36779 - 11905: 0xB1E8,
+ 36780 - 11905: 0xDE6E,
+ 36781 - 11905: 0xDE6F,
+ 36782 - 11905: 0xDE70,
+ 36783 - 11905: 0xDE71,
+ 36784 - 11905: 0xB3BD,
+ 36785 - 11905: 0xC8E8,
+ 36786 - 11905: 0xDE72,
+ 36787 - 11905: 0xDE73,
+ 36788 - 11905: 0xDE74,
+ 36789 - 11905: 0xDE75,
+ 36790 - 11905: 0xE5C1,
+ 36791 - 11905: 0xDE76,
+ 36792 - 11905: 0xDE77,
+ 36793 - 11905: 0xB1DF,
+ 36794 - 11905: 0xDE78,
+ 36795 - 11905: 0xDE79,
+ 36796 - 11905: 0xDE7A,
+ 36797 - 11905: 0xC1C9,
+ 36798 - 11905: 0xB4EF,
+ 36799 - 11905: 0xDE7B,
+ 36800 - 11905: 0xDE7C,
+ 36801 - 11905: 0xC7A8,
+ 36802 - 11905: 0xD3D8,
+ 36803 - 11905: 0xDE7D,
+ 36804 - 11905: 0xC6F9,
+ 36805 - 11905: 0xD1B8,
+ 36806 - 11905: 0xDE7E,
+ 36807 - 11905: 0xB9FD,
+ 36808 - 11905: 0xC2F5,
+ 36809 - 11905: 0xDE80,
+ 36810 - 11905: 0xDE81,
+ 36811 - 11905: 0xDE82,
+ 36812 - 11905: 0xDE83,
+ 36813 - 11905: 0xDE84,
+ 36814 - 11905: 0xD3AD,
+ 36815 - 11905: 0xDE85,
+ 36816 - 11905: 0xD4CB,
+ 36817 - 11905: 0xBDFC,
+ 36818 - 11905: 0xDE86,
+ 36819 - 11905: 0xE5C2,
+ 36820 - 11905: 0xB7B5,
+ 36821 - 11905: 0xE5C3,
+ 36822 - 11905: 0xDE87,
+ 36823 - 11905: 0xDE88,
+ 36824 - 11905: 0xBBB9,
+ 36825 - 11905: 0xD5E2,
+ 36826 - 11905: 0xDE89,
+ 36827 - 11905: 0xBDF8,
+ 36828 - 11905: 0xD4B6,
+ 36829 - 11905: 0xCEA5,
+ 36830 - 11905: 0xC1AC,
+ 36831 - 11905: 0xB3D9,
+ 36832 - 11905: 0xDE8A,
+ 36833 - 11905: 0xDE8B,
+ 36834 - 11905: 0xCCF6,
+ 36835 - 11905: 0xDE8C,
+ 36836 - 11905: 0xE5C6,
+ 36837 - 11905: 0xE5C4,
+ 36838 - 11905: 0xE5C8,
+ 36839 - 11905: 0xDE8D,
+ 36840 - 11905: 0xE5CA,
+ 36841 - 11905: 0xE5C7,
+ 36842 - 11905: 0xB5CF,
+ 36843 - 11905: 0xC6C8,
+ 36844 - 11905: 0xDE8E,
+ 36845 - 11905: 0xB5FC,
+ 36846 - 11905: 0xE5C5,
+ 36847 - 11905: 0xDE8F,
+ 36848 - 11905: 0xCAF6,
+ 36849 - 11905: 0xDE90,
+ 36850 - 11905: 0xDE91,
+ 36851 - 11905: 0xE5C9,
+ 36852 - 11905: 0xDE92,
+ 36853 - 11905: 0xDE93,
+ 36854 - 11905: 0xDE94,
+ 36855 - 11905: 0xC3D4,
+ 36856 - 11905: 0xB1C5,
+ 36857 - 11905: 0xBCA3,
+ 36858 - 11905: 0xDE95,
+ 36859 - 11905: 0xDE96,
+ 36860 - 11905: 0xDE97,
+ 36861 - 11905: 0xD7B7,
+ 36862 - 11905: 0xDE98,
+ 36863 - 11905: 0xDE99,
+ 36864 - 11905: 0xCDCB,
+ 36865 - 11905: 0xCBCD,
+ 36866 - 11905: 0xCACA,
+ 36867 - 11905: 0xCCD3,
+ 36868 - 11905: 0xE5CC,
+ 36869 - 11905: 0xE5CB,
+ 36870 - 11905: 0xC4E6,
+ 36871 - 11905: 0xDE9A,
+ 36872 - 11905: 0xDE9B,
+ 36873 - 11905: 0xD1A1,
+ 36874 - 11905: 0xD1B7,
+ 36875 - 11905: 0xE5CD,
+ 36876 - 11905: 0xDE9C,
+ 36877 - 11905: 0xE5D0,
+ 36878 - 11905: 0xDE9D,
+ 36879 - 11905: 0xCDB8,
+ 36880 - 11905: 0xD6F0,
+ 36881 - 11905: 0xE5CF,
+ 36882 - 11905: 0xB5DD,
+ 36883 - 11905: 0xDE9E,
+ 36884 - 11905: 0xCDBE,
+ 36885 - 11905: 0xDE9F,
+ 36886 - 11905: 0xE5D1,
+ 36887 - 11905: 0xB6BA,
+ 36888 - 11905: 0xDEA0,
+ 36889 - 11905: 0xDF40,
+ 36890 - 11905: 0xCDA8,
+ 36891 - 11905: 0xB9E4,
+ 36892 - 11905: 0xDF41,
+ 36893 - 11905: 0xCAC5,
+ 36894 - 11905: 0xB3D1,
+ 36895 - 11905: 0xCBD9,
+ 36896 - 11905: 0xD4EC,
+ 36897 - 11905: 0xE5D2,
+ 36898 - 11905: 0xB7EA,
+ 36899 - 11905: 0xDF42,
+ 36900 - 11905: 0xDF43,
+ 36901 - 11905: 0xDF44,
+ 36902 - 11905: 0xE5CE,
+ 36903 - 11905: 0xDF45,
+ 36904 - 11905: 0xDF46,
+ 36905 - 11905: 0xDF47,
+ 36906 - 11905: 0xDF48,
+ 36907 - 11905: 0xDF49,
+ 36908 - 11905: 0xDF4A,
+ 36909 - 11905: 0xE5D5,
+ 36910 - 11905: 0xB4FE,
+ 36911 - 11905: 0xE5D6,
+ 36912 - 11905: 0xDF4B,
+ 36913 - 11905: 0xDF4C,
+ 36914 - 11905: 0xDF4D,
+ 36915 - 11905: 0xDF4E,
+ 36916 - 11905: 0xDF4F,
+ 36917 - 11905: 0xE5D3,
+ 36918 - 11905: 0xE5D4,
+ 36919 - 11905: 0xDF50,
+ 36920 - 11905: 0xD2DD,
+ 36921 - 11905: 0xDF51,
+ 36922 - 11905: 0xDF52,
+ 36923 - 11905: 0xC2DF,
+ 36924 - 11905: 0xB1C6,
+ 36925 - 11905: 0xDF53,
+ 36926 - 11905: 0xD3E2,
+ 36927 - 11905: 0xDF54,
+ 36928 - 11905: 0xDF55,
+ 36929 - 11905: 0xB6DD,
+ 36930 - 11905: 0xCBEC,
+ 36931 - 11905: 0xDF56,
+ 36932 - 11905: 0xE5D7,
+ 36933 - 11905: 0xDF57,
+ 36934 - 11905: 0xDF58,
+ 36935 - 11905: 0xD3F6,
+ 36936 - 11905: 0xDF59,
+ 36937 - 11905: 0xDF5A,
+ 36938 - 11905: 0xDF5B,
+ 36939 - 11905: 0xDF5C,
+ 36940 - 11905: 0xDF5D,
+ 36941 - 11905: 0xB1E9,
+ 36942 - 11905: 0xDF5E,
+ 36943 - 11905: 0xB6F4,
+ 36944 - 11905: 0xE5DA,
+ 36945 - 11905: 0xE5D8,
+ 36946 - 11905: 0xE5D9,
+ 36947 - 11905: 0xB5C0,
+ 36948 - 11905: 0xDF5F,
+ 36949 - 11905: 0xDF60,
+ 36950 - 11905: 0xDF61,
+ 36951 - 11905: 0xD2C5,
+ 36952 - 11905: 0xE5DC,
+ 36953 - 11905: 0xDF62,
+ 36954 - 11905: 0xDF63,
+ 36955 - 11905: 0xE5DE,
+ 36956 - 11905: 0xDF64,
+ 36957 - 11905: 0xDF65,
+ 36958 - 11905: 0xDF66,
+ 36959 - 11905: 0xDF67,
+ 36960 - 11905: 0xDF68,
+ 36961 - 11905: 0xDF69,
+ 36962 - 11905: 0xE5DD,
+ 36963 - 11905: 0xC7B2,
+ 36964 - 11905: 0xDF6A,
+ 36965 - 11905: 0xD2A3,
+ 36966 - 11905: 0xDF6B,
+ 36967 - 11905: 0xDF6C,
+ 36968 - 11905: 0xE5DB,
+ 36969 - 11905: 0xDF6D,
+ 36970 - 11905: 0xDF6E,
+ 36971 - 11905: 0xDF6F,
+ 36972 - 11905: 0xDF70,
+ 36973 - 11905: 0xD4E2,
+ 36974 - 11905: 0xD5DA,
+ 36975 - 11905: 0xDF71,
+ 36976 - 11905: 0xDF72,
+ 36977 - 11905: 0xDF73,
+ 36978 - 11905: 0xDF74,
+ 36979 - 11905: 0xDF75,
+ 36980 - 11905: 0xE5E0,
+ 36981 - 11905: 0xD7F1,
+ 36982 - 11905: 0xDF76,
+ 36983 - 11905: 0xDF77,
+ 36984 - 11905: 0xDF78,
+ 36985 - 11905: 0xDF79,
+ 36986 - 11905: 0xDF7A,
+ 36987 - 11905: 0xDF7B,
+ 36988 - 11905: 0xDF7C,
+ 36989 - 11905: 0xE5E1,
+ 36990 - 11905: 0xDF7D,
+ 36991 - 11905: 0xB1DC,
+ 36992 - 11905: 0xD1FB,
+ 36993 - 11905: 0xDF7E,
+ 36994 - 11905: 0xE5E2,
+ 36995 - 11905: 0xE5E4,
+ 36996 - 11905: 0xDF80,
+ 36997 - 11905: 0xDF81,
+ 36998 - 11905: 0xDF82,
+ 36999 - 11905: 0xDF83,
+ 37000 - 11905: 0xE5E3,
+ 37001 - 11905: 0xDF84,
+ 37002 - 11905: 0xDF85,
+ 37003 - 11905: 0xE5E5,
+ 37004 - 11905: 0xDF86,
+ 37005 - 11905: 0xDF87,
+ 37006 - 11905: 0xDF88,
+ 37007 - 11905: 0xDF89,
+ 37008 - 11905: 0xDF8A,
+ 37009 - 11905: 0xD2D8,
+ 37010 - 11905: 0xDF8B,
+ 37011 - 11905: 0xB5CB,
+ 37012 - 11905: 0xDF8C,
+ 37013 - 11905: 0xE7DF,
+ 37014 - 11905: 0xDF8D,
+ 37015 - 11905: 0xDAF5,
+ 37016 - 11905: 0xDF8E,
+ 37017 - 11905: 0xDAF8,
+ 37018 - 11905: 0xDF8F,
+ 37019 - 11905: 0xDAF6,
+ 37020 - 11905: 0xDF90,
+ 37021 - 11905: 0xDAF7,
+ 37022 - 11905: 0xDF91,
+ 37023 - 11905: 0xDF92,
+ 37024 - 11905: 0xDF93,
+ 37025 - 11905: 0xDAFA,
+ 37026 - 11905: 0xD0CF,
+ 37027 - 11905: 0xC4C7,
+ 37028 - 11905: 0xDF94,
+ 37029 - 11905: 0xDF95,
+ 37030 - 11905: 0xB0EE,
+ 37031 - 11905: 0xDF96,
+ 37032 - 11905: 0xDF97,
+ 37033 - 11905: 0xDF98,
+ 37034 - 11905: 0xD0B0,
+ 37035 - 11905: 0xDF99,
+ 37036 - 11905: 0xDAF9,
+ 37037 - 11905: 0xDF9A,
+ 37038 - 11905: 0xD3CA,
+ 37039 - 11905: 0xBAAA,
+ 37040 - 11905: 0xDBA2,
+ 37041 - 11905: 0xC7F1,
+ 37042 - 11905: 0xDF9B,
+ 37043 - 11905: 0xDAFC,
+ 37044 - 11905: 0xDAFB,
+ 37045 - 11905: 0xC9DB,
+ 37046 - 11905: 0xDAFD,
+ 37047 - 11905: 0xDF9C,
+ 37048 - 11905: 0xDBA1,
+ 37049 - 11905: 0xD7DE,
+ 37050 - 11905: 0xDAFE,
+ 37051 - 11905: 0xC1DA,
+ 37052 - 11905: 0xDF9D,
+ 37053 - 11905: 0xDF9E,
+ 37054 - 11905: 0xDBA5,
+ 37055 - 11905: 0xDF9F,
+ 37056 - 11905: 0xDFA0,
+ 37057 - 11905: 0xD3F4,
+ 37058 - 11905: 0xE040,
+ 37059 - 11905: 0xE041,
+ 37060 - 11905: 0xDBA7,
+ 37061 - 11905: 0xDBA4,
+ 37062 - 11905: 0xE042,
+ 37063 - 11905: 0xDBA8,
+ 37064 - 11905: 0xE043,
+ 37065 - 11905: 0xE044,
+ 37066 - 11905: 0xBDBC,
+ 37067 - 11905: 0xE045,
+ 37068 - 11905: 0xE046,
+ 37069 - 11905: 0xE047,
+ 37070 - 11905: 0xC0C9,
+ 37071 - 11905: 0xDBA3,
+ 37072 - 11905: 0xDBA6,
+ 37073 - 11905: 0xD6A3,
+ 37074 - 11905: 0xE048,
+ 37075 - 11905: 0xDBA9,
+ 37076 - 11905: 0xE049,
+ 37077 - 11905: 0xE04A,
+ 37078 - 11905: 0xE04B,
+ 37079 - 11905: 0xDBAD,
+ 37080 - 11905: 0xE04C,
+ 37081 - 11905: 0xE04D,
+ 37082 - 11905: 0xE04E,
+ 37083 - 11905: 0xDBAE,
+ 37084 - 11905: 0xDBAC,
+ 37085 - 11905: 0xBAC2,
+ 37086 - 11905: 0xE04F,
+ 37087 - 11905: 0xE050,
+ 37088 - 11905: 0xE051,
+ 37089 - 11905: 0xBFA4,
+ 37090 - 11905: 0xDBAB,
+ 37091 - 11905: 0xE052,
+ 37092 - 11905: 0xE053,
+ 37093 - 11905: 0xE054,
+ 37094 - 11905: 0xDBAA,
+ 37095 - 11905: 0xD4C7,
+ 37096 - 11905: 0xB2BF,
+ 37097 - 11905: 0xE055,
+ 37098 - 11905: 0xE056,
+ 37099 - 11905: 0xDBAF,
+ 37100 - 11905: 0xE057,
+ 37101 - 11905: 0xB9F9,
+ 37102 - 11905: 0xE058,
+ 37103 - 11905: 0xDBB0,
+ 37104 - 11905: 0xE059,
+ 37105 - 11905: 0xE05A,
+ 37106 - 11905: 0xE05B,
+ 37107 - 11905: 0xE05C,
+ 37108 - 11905: 0xB3BB,
+ 37109 - 11905: 0xE05D,
+ 37110 - 11905: 0xE05E,
+ 37111 - 11905: 0xE05F,
+ 37112 - 11905: 0xB5A6,
+ 37113 - 11905: 0xE060,
+ 37114 - 11905: 0xE061,
+ 37115 - 11905: 0xE062,
+ 37116 - 11905: 0xE063,
+ 37117 - 11905: 0xB6BC,
+ 37118 - 11905: 0xDBB1,
+ 37119 - 11905: 0xE064,
+ 37120 - 11905: 0xE065,
+ 37121 - 11905: 0xE066,
+ 37122 - 11905: 0xB6F5,
+ 37123 - 11905: 0xE067,
+ 37124 - 11905: 0xDBB2,
+ 37125 - 11905: 0xE068,
+ 37126 - 11905: 0xE069,
+ 37127 - 11905: 0xE06A,
+ 37128 - 11905: 0xE06B,
+ 37129 - 11905: 0xE06C,
+ 37130 - 11905: 0xE06D,
+ 37131 - 11905: 0xE06E,
+ 37132 - 11905: 0xE06F,
+ 37133 - 11905: 0xE070,
+ 37134 - 11905: 0xE071,
+ 37135 - 11905: 0xE072,
+ 37136 - 11905: 0xE073,
+ 37137 - 11905: 0xE074,
+ 37138 - 11905: 0xE075,
+ 37139 - 11905: 0xE076,
+ 37140 - 11905: 0xE077,
+ 37141 - 11905: 0xE078,
+ 37142 - 11905: 0xE079,
+ 37143 - 11905: 0xE07A,
+ 37144 - 11905: 0xE07B,
+ 37145 - 11905: 0xB1C9,
+ 37146 - 11905: 0xE07C,
+ 37147 - 11905: 0xE07D,
+ 37148 - 11905: 0xE07E,
+ 37149 - 11905: 0xE080,
+ 37150 - 11905: 0xDBB4,
+ 37151 - 11905: 0xE081,
+ 37152 - 11905: 0xE082,
+ 37153 - 11905: 0xE083,
+ 37154 - 11905: 0xDBB3,
+ 37155 - 11905: 0xDBB5,
+ 37156 - 11905: 0xE084,
+ 37157 - 11905: 0xE085,
+ 37158 - 11905: 0xE086,
+ 37159 - 11905: 0xE087,
+ 37160 - 11905: 0xE088,
+ 37161 - 11905: 0xE089,
+ 37162 - 11905: 0xE08A,
+ 37163 - 11905: 0xE08B,
+ 37164 - 11905: 0xE08C,
+ 37165 - 11905: 0xE08D,
+ 37166 - 11905: 0xE08E,
+ 37167 - 11905: 0xDBB7,
+ 37168 - 11905: 0xE08F,
+ 37169 - 11905: 0xDBB6,
+ 37170 - 11905: 0xE090,
+ 37171 - 11905: 0xE091,
+ 37172 - 11905: 0xE092,
+ 37173 - 11905: 0xE093,
+ 37174 - 11905: 0xE094,
+ 37175 - 11905: 0xE095,
+ 37176 - 11905: 0xE096,
+ 37177 - 11905: 0xDBB8,
+ 37178 - 11905: 0xE097,
+ 37179 - 11905: 0xE098,
+ 37180 - 11905: 0xE099,
+ 37181 - 11905: 0xE09A,
+ 37182 - 11905: 0xE09B,
+ 37183 - 11905: 0xE09C,
+ 37184 - 11905: 0xE09D,
+ 37185 - 11905: 0xE09E,
+ 37186 - 11905: 0xE09F,
+ 37187 - 11905: 0xDBB9,
+ 37188 - 11905: 0xE0A0,
+ 37189 - 11905: 0xE140,
+ 37190 - 11905: 0xDBBA,
+ 37191 - 11905: 0xE141,
+ 37192 - 11905: 0xE142,
+ 37193 - 11905: 0xD3CF,
+ 37194 - 11905: 0xF4FA,
+ 37195 - 11905: 0xC7F5,
+ 37196 - 11905: 0xD7C3,
+ 37197 - 11905: 0xC5E4,
+ 37198 - 11905: 0xF4FC,
+ 37199 - 11905: 0xF4FD,
+ 37200 - 11905: 0xF4FB,
+ 37201 - 11905: 0xE143,
+ 37202 - 11905: 0xBEC6,
+ 37203 - 11905: 0xE144,
+ 37204 - 11905: 0xE145,
+ 37205 - 11905: 0xE146,
+ 37206 - 11905: 0xE147,
+ 37207 - 11905: 0xD0EF,
+ 37208 - 11905: 0xE148,
+ 37209 - 11905: 0xE149,
+ 37210 - 11905: 0xB7D3,
+ 37211 - 11905: 0xE14A,
+ 37212 - 11905: 0xE14B,
+ 37213 - 11905: 0xD4CD,
+ 37214 - 11905: 0xCCAA,
+ 37215 - 11905: 0xE14C,
+ 37216 - 11905: 0xE14D,
+ 37217 - 11905: 0xF5A2,
+ 37218 - 11905: 0xF5A1,
+ 37219 - 11905: 0xBAA8,
+ 37220 - 11905: 0xF4FE,
+ 37221 - 11905: 0xCBD6,
+ 37222 - 11905: 0xE14E,
+ 37223 - 11905: 0xE14F,
+ 37224 - 11905: 0xE150,
+ 37225 - 11905: 0xF5A4,
+ 37226 - 11905: 0xC0D2,
+ 37227 - 11905: 0xE151,
+ 37228 - 11905: 0xB3EA,
+ 37229 - 11905: 0xE152,
+ 37230 - 11905: 0xCDAA,
+ 37231 - 11905: 0xF5A5,
+ 37232 - 11905: 0xF5A3,
+ 37233 - 11905: 0xBDB4,
+ 37234 - 11905: 0xF5A8,
+ 37235 - 11905: 0xE153,
+ 37236 - 11905: 0xF5A9,
+ 37237 - 11905: 0xBDCD,
+ 37238 - 11905: 0xC3B8,
+ 37239 - 11905: 0xBFE1,
+ 37240 - 11905: 0xCBE1,
+ 37241 - 11905: 0xF5AA,
+ 37242 - 11905: 0xE154,
+ 37243 - 11905: 0xE155,
+ 37244 - 11905: 0xE156,
+ 37245 - 11905: 0xF5A6,
+ 37246 - 11905: 0xF5A7,
+ 37247 - 11905: 0xC4F0,
+ 37248 - 11905: 0xE157,
+ 37249 - 11905: 0xE158,
+ 37250 - 11905: 0xE159,
+ 37251 - 11905: 0xE15A,
+ 37252 - 11905: 0xE15B,
+ 37253 - 11905: 0xF5AC,
+ 37254 - 11905: 0xE15C,
+ 37255 - 11905: 0xB4BC,
+ 37256 - 11905: 0xE15D,
+ 37257 - 11905: 0xD7ED,
+ 37258 - 11905: 0xE15E,
+ 37259 - 11905: 0xB4D7,
+ 37260 - 11905: 0xF5AB,
+ 37261 - 11905: 0xF5AE,
+ 37262 - 11905: 0xE15F,
+ 37263 - 11905: 0xE160,
+ 37264 - 11905: 0xF5AD,
+ 37265 - 11905: 0xF5AF,
+ 37266 - 11905: 0xD0D1,
+ 37267 - 11905: 0xE161,
+ 37268 - 11905: 0xE162,
+ 37269 - 11905: 0xE163,
+ 37270 - 11905: 0xE164,
+ 37271 - 11905: 0xE165,
+ 37272 - 11905: 0xE166,
+ 37273 - 11905: 0xE167,
+ 37274 - 11905: 0xC3D1,
+ 37275 - 11905: 0xC8A9,
+ 37276 - 11905: 0xE168,
+ 37277 - 11905: 0xE169,
+ 37278 - 11905: 0xE16A,
+ 37279 - 11905: 0xE16B,
+ 37280 - 11905: 0xE16C,
+ 37281 - 11905: 0xE16D,
+ 37282 - 11905: 0xF5B0,
+ 37283 - 11905: 0xF5B1,
+ 37284 - 11905: 0xE16E,
+ 37285 - 11905: 0xE16F,
+ 37286 - 11905: 0xE170,
+ 37287 - 11905: 0xE171,
+ 37288 - 11905: 0xE172,
+ 37289 - 11905: 0xE173,
+ 37290 - 11905: 0xF5B2,
+ 37291 - 11905: 0xE174,
+ 37292 - 11905: 0xE175,
+ 37293 - 11905: 0xF5B3,
+ 37294 - 11905: 0xF5B4,
+ 37295 - 11905: 0xF5B5,
+ 37296 - 11905: 0xE176,
+ 37297 - 11905: 0xE177,
+ 37298 - 11905: 0xE178,
+ 37299 - 11905: 0xE179,
+ 37300 - 11905: 0xF5B7,
+ 37301 - 11905: 0xF5B6,
+ 37302 - 11905: 0xE17A,
+ 37303 - 11905: 0xE17B,
+ 37304 - 11905: 0xE17C,
+ 37305 - 11905: 0xE17D,
+ 37306 - 11905: 0xF5B8,
+ 37307 - 11905: 0xE17E,
+ 37308 - 11905: 0xE180,
+ 37309 - 11905: 0xE181,
+ 37310 - 11905: 0xE182,
+ 37311 - 11905: 0xE183,
+ 37312 - 11905: 0xE184,
+ 37313 - 11905: 0xE185,
+ 37314 - 11905: 0xE186,
+ 37315 - 11905: 0xE187,
+ 37316 - 11905: 0xE188,
+ 37317 - 11905: 0xE189,
+ 37318 - 11905: 0xE18A,
+ 37319 - 11905: 0xB2C9,
+ 37320 - 11905: 0xE18B,
+ 37321 - 11905: 0xD3D4,
+ 37322 - 11905: 0xCACD,
+ 37323 - 11905: 0xE18C,
+ 37324 - 11905: 0xC0EF,
+ 37325 - 11905: 0xD6D8,
+ 37326 - 11905: 0xD2B0,
+ 37327 - 11905: 0xC1BF,
+ 37328 - 11905: 0xE18D,
+ 37329 - 11905: 0xBDF0,
+ 37330 - 11905: 0xE18E,
+ 37331 - 11905: 0xE18F,
+ 37332 - 11905: 0xE190,
+ 37333 - 11905: 0xE191,
+ 37334 - 11905: 0xE192,
+ 37335 - 11905: 0xE193,
+ 37336 - 11905: 0xE194,
+ 37337 - 11905: 0xE195,
+ 37338 - 11905: 0xE196,
+ 37339 - 11905: 0xE197,
+ 37340 - 11905: 0xB8AA,
+ 37341 - 11905: 0xE198,
+ 37342 - 11905: 0xE199,
+ 37343 - 11905: 0xE19A,
+ 37344 - 11905: 0xE19B,
+ 37345 - 11905: 0xE19C,
+ 37346 - 11905: 0xE19D,
+ 37347 - 11905: 0xE19E,
+ 37348 - 11905: 0xE19F,
+ 37349 - 11905: 0xE1A0,
+ 37350 - 11905: 0xE240,
+ 37351 - 11905: 0xE241,
+ 37352 - 11905: 0xE242,
+ 37353 - 11905: 0xE243,
+ 37354 - 11905: 0xE244,
+ 37355 - 11905: 0xE245,
+ 37356 - 11905: 0xE246,
+ 37357 - 11905: 0xE247,
+ 37358 - 11905: 0xE248,
+ 37359 - 11905: 0xE249,
+ 37360 - 11905: 0xE24A,
+ 37361 - 11905: 0xE24B,
+ 37362 - 11905: 0xE24C,
+ 37363 - 11905: 0xE24D,
+ 37364 - 11905: 0xE24E,
+ 37365 - 11905: 0xE24F,
+ 37366 - 11905: 0xE250,
+ 37367 - 11905: 0xE251,
+ 37368 - 11905: 0xE252,
+ 37369 - 11905: 0xE253,
+ 37370 - 11905: 0xE254,
+ 37371 - 11905: 0xE255,
+ 37372 - 11905: 0xE256,
+ 37373 - 11905: 0xE257,
+ 37374 - 11905: 0xE258,
+ 37375 - 11905: 0xE259,
+ 37376 - 11905: 0xE25A,
+ 37377 - 11905: 0xE25B,
+ 37378 - 11905: 0xE25C,
+ 37379 - 11905: 0xE25D,
+ 37380 - 11905: 0xE25E,
+ 37381 - 11905: 0xE25F,
+ 37382 - 11905: 0xE260,
+ 37383 - 11905: 0xE261,
+ 37384 - 11905: 0xE262,
+ 37385 - 11905: 0xE263,
+ 37386 - 11905: 0xE264,
+ 37387 - 11905: 0xE265,
+ 37388 - 11905: 0xE266,
+ 37389 - 11905: 0xE267,
+ 37390 - 11905: 0xE268,
+ 37391 - 11905: 0xE269,
+ 37392 - 11905: 0xE26A,
+ 37393 - 11905: 0xE26B,
+ 37394 - 11905: 0xE26C,
+ 37395 - 11905: 0xE26D,
+ 37396 - 11905: 0xE26E,
+ 37397 - 11905: 0xE26F,
+ 37398 - 11905: 0xE270,
+ 37399 - 11905: 0xE271,
+ 37400 - 11905: 0xE272,
+ 37401 - 11905: 0xE273,
+ 37402 - 11905: 0xE274,
+ 37403 - 11905: 0xE275,
+ 37404 - 11905: 0xE276,
+ 37405 - 11905: 0xE277,
+ 37406 - 11905: 0xE278,
+ 37407 - 11905: 0xE279,
+ 37408 - 11905: 0xE27A,
+ 37409 - 11905: 0xE27B,
+ 37410 - 11905: 0xE27C,
+ 37411 - 11905: 0xE27D,
+ 37412 - 11905: 0xE27E,
+ 37413 - 11905: 0xE280,
+ 37414 - 11905: 0xE281,
+ 37415 - 11905: 0xE282,
+ 37416 - 11905: 0xE283,
+ 37417 - 11905: 0xE284,
+ 37418 - 11905: 0xE285,
+ 37419 - 11905: 0xE286,
+ 37420 - 11905: 0xE287,
+ 37421 - 11905: 0xE288,
+ 37422 - 11905: 0xE289,
+ 37423 - 11905: 0xE28A,
+ 37424 - 11905: 0xE28B,
+ 37425 - 11905: 0xE28C,
+ 37426 - 11905: 0xE28D,
+ 37427 - 11905: 0xE28E,
+ 37428 - 11905: 0xE28F,
+ 37429 - 11905: 0xE290,
+ 37430 - 11905: 0xE291,
+ 37431 - 11905: 0xE292,
+ 37432 - 11905: 0xE293,
+ 37433 - 11905: 0xE294,
+ 37434 - 11905: 0xE295,
+ 37435 - 11905: 0xE296,
+ 37436 - 11905: 0xE297,
+ 37437 - 11905: 0xE298,
+ 37438 - 11905: 0xE299,
+ 37439 - 11905: 0xE29A,
+ 37440 - 11905: 0xE29B,
+ 37441 - 11905: 0xE29C,
+ 37442 - 11905: 0xE29D,
+ 37443 - 11905: 0xE29E,
+ 37444 - 11905: 0xE29F,
+ 37445 - 11905: 0xE2A0,
+ 37446 - 11905: 0xE340,
+ 37447 - 11905: 0xE341,
+ 37448 - 11905: 0xE342,
+ 37449 - 11905: 0xE343,
+ 37450 - 11905: 0xE344,
+ 37451 - 11905: 0xE345,
+ 37452 - 11905: 0xE346,
+ 37453 - 11905: 0xE347,
+ 37454 - 11905: 0xE348,
+ 37455 - 11905: 0xE349,
+ 37456 - 11905: 0xE34A,
+ 37457 - 11905: 0xE34B,
+ 37458 - 11905: 0xE34C,
+ 37459 - 11905: 0xE34D,
+ 37460 - 11905: 0xE34E,
+ 37461 - 11905: 0xE34F,
+ 37462 - 11905: 0xE350,
+ 37463 - 11905: 0xE351,
+ 37464 - 11905: 0xE352,
+ 37465 - 11905: 0xE353,
+ 37466 - 11905: 0xE354,
+ 37467 - 11905: 0xE355,
+ 37468 - 11905: 0xE356,
+ 37469 - 11905: 0xE357,
+ 37470 - 11905: 0xE358,
+ 37471 - 11905: 0xE359,
+ 37472 - 11905: 0xE35A,
+ 37473 - 11905: 0xE35B,
+ 37474 - 11905: 0xE35C,
+ 37475 - 11905: 0xE35D,
+ 37476 - 11905: 0xE35E,
+ 37477 - 11905: 0xE35F,
+ 37478 - 11905: 0xE360,
+ 37479 - 11905: 0xE361,
+ 37480 - 11905: 0xE362,
+ 37481 - 11905: 0xE363,
+ 37482 - 11905: 0xE364,
+ 37483 - 11905: 0xE365,
+ 37484 - 11905: 0xE366,
+ 37485 - 11905: 0xE367,
+ 37486 - 11905: 0xE368,
+ 37487 - 11905: 0xE369,
+ 37488 - 11905: 0xE36A,
+ 37489 - 11905: 0xE36B,
+ 37490 - 11905: 0xE36C,
+ 37491 - 11905: 0xE36D,
+ 37492 - 11905: 0xBCF8,
+ 37493 - 11905: 0xE36E,
+ 37494 - 11905: 0xE36F,
+ 37495 - 11905: 0xE370,
+ 37496 - 11905: 0xE371,
+ 37497 - 11905: 0xE372,
+ 37498 - 11905: 0xE373,
+ 37499 - 11905: 0xE374,
+ 37500 - 11905: 0xE375,
+ 37501 - 11905: 0xE376,
+ 37502 - 11905: 0xE377,
+ 37503 - 11905: 0xE378,
+ 37504 - 11905: 0xE379,
+ 37505 - 11905: 0xE37A,
+ 37506 - 11905: 0xE37B,
+ 37507 - 11905: 0xE37C,
+ 37508 - 11905: 0xE37D,
+ 37509 - 11905: 0xE37E,
+ 37510 - 11905: 0xE380,
+ 37511 - 11905: 0xE381,
+ 37512 - 11905: 0xE382,
+ 37513 - 11905: 0xE383,
+ 37514 - 11905: 0xE384,
+ 37515 - 11905: 0xE385,
+ 37516 - 11905: 0xE386,
+ 37517 - 11905: 0xE387,
+ 37518 - 11905: 0xF6C6,
+ 37519 - 11905: 0xE388,
+ 37520 - 11905: 0xE389,
+ 37521 - 11905: 0xE38A,
+ 37522 - 11905: 0xE38B,
+ 37523 - 11905: 0xE38C,
+ 37524 - 11905: 0xE38D,
+ 37525 - 11905: 0xE38E,
+ 37526 - 11905: 0xE38F,
+ 37527 - 11905: 0xE390,
+ 37528 - 11905: 0xE391,
+ 37529 - 11905: 0xE392,
+ 37530 - 11905: 0xE393,
+ 37531 - 11905: 0xE394,
+ 37532 - 11905: 0xE395,
+ 37533 - 11905: 0xE396,
+ 37534 - 11905: 0xE397,
+ 37535 - 11905: 0xE398,
+ 37536 - 11905: 0xE399,
+ 37537 - 11905: 0xE39A,
+ 37538 - 11905: 0xE39B,
+ 37539 - 11905: 0xE39C,
+ 37540 - 11905: 0xE39D,
+ 37541 - 11905: 0xE39E,
+ 37542 - 11905: 0xE39F,
+ 37543 - 11905: 0xE3A0,
+ 37544 - 11905: 0xE440,
+ 37545 - 11905: 0xE441,
+ 37546 - 11905: 0xE442,
+ 37547 - 11905: 0xE443,
+ 37548 - 11905: 0xE444,
+ 37549 - 11905: 0xE445,
+ 37550 - 11905: 0xF6C7,
+ 37551 - 11905: 0xE446,
+ 37552 - 11905: 0xE447,
+ 37553 - 11905: 0xE448,
+ 37554 - 11905: 0xE449,
+ 37555 - 11905: 0xE44A,
+ 37556 - 11905: 0xE44B,
+ 37557 - 11905: 0xE44C,
+ 37558 - 11905: 0xE44D,
+ 37559 - 11905: 0xE44E,
+ 37560 - 11905: 0xE44F,
+ 37561 - 11905: 0xE450,
+ 37562 - 11905: 0xE451,
+ 37563 - 11905: 0xE452,
+ 37564 - 11905: 0xE453,
+ 37565 - 11905: 0xE454,
+ 37566 - 11905: 0xE455,
+ 37567 - 11905: 0xE456,
+ 37568 - 11905: 0xE457,
+ 37569 - 11905: 0xE458,
+ 37570 - 11905: 0xE459,
+ 37571 - 11905: 0xE45A,
+ 37572 - 11905: 0xE45B,
+ 37573 - 11905: 0xE45C,
+ 37574 - 11905: 0xE45D,
+ 37575 - 11905: 0xE45E,
+ 37576 - 11905: 0xF6C8,
+ 37577 - 11905: 0xE45F,
+ 37578 - 11905: 0xE460,
+ 37579 - 11905: 0xE461,
+ 37580 - 11905: 0xE462,
+ 37581 - 11905: 0xE463,
+ 37582 - 11905: 0xE464,
+ 37583 - 11905: 0xE465,
+ 37584 - 11905: 0xE466,
+ 37585 - 11905: 0xE467,
+ 37586 - 11905: 0xE468,
+ 37587 - 11905: 0xE469,
+ 37588 - 11905: 0xE46A,
+ 37589 - 11905: 0xE46B,
+ 37590 - 11905: 0xE46C,
+ 37591 - 11905: 0xE46D,
+ 37592 - 11905: 0xE46E,
+ 37593 - 11905: 0xE46F,
+ 37594 - 11905: 0xE470,
+ 37595 - 11905: 0xE471,
+ 37596 - 11905: 0xE472,
+ 37597 - 11905: 0xE473,
+ 37598 - 11905: 0xE474,
+ 37599 - 11905: 0xE475,
+ 37600 - 11905: 0xE476,
+ 37601 - 11905: 0xE477,
+ 37602 - 11905: 0xE478,
+ 37603 - 11905: 0xE479,
+ 37604 - 11905: 0xE47A,
+ 37605 - 11905: 0xE47B,
+ 37606 - 11905: 0xE47C,
+ 37607 - 11905: 0xE47D,
+ 37608 - 11905: 0xE47E,
+ 37609 - 11905: 0xE480,
+ 37610 - 11905: 0xE481,
+ 37611 - 11905: 0xE482,
+ 37612 - 11905: 0xE483,
+ 37613 - 11905: 0xE484,
+ 37614 - 11905: 0xE485,
+ 37615 - 11905: 0xE486,
+ 37616 - 11905: 0xE487,
+ 37617 - 11905: 0xE488,
+ 37618 - 11905: 0xE489,
+ 37619 - 11905: 0xE48A,
+ 37620 - 11905: 0xE48B,
+ 37621 - 11905: 0xE48C,
+ 37622 - 11905: 0xE48D,
+ 37623 - 11905: 0xE48E,
+ 37624 - 11905: 0xE48F,
+ 37625 - 11905: 0xE490,
+ 37626 - 11905: 0xE491,
+ 37627 - 11905: 0xE492,
+ 37628 - 11905: 0xE493,
+ 37629 - 11905: 0xE494,
+ 37630 - 11905: 0xE495,
+ 37631 - 11905: 0xE496,
+ 37632 - 11905: 0xE497,
+ 37633 - 11905: 0xE498,
+ 37634 - 11905: 0xE499,
+ 37635 - 11905: 0xE49A,
+ 37636 - 11905: 0xE49B,
+ 37637 - 11905: 0xE49C,
+ 37638 - 11905: 0xE49D,
+ 37639 - 11905: 0xE49E,
+ 37640 - 11905: 0xE49F,
+ 37641 - 11905: 0xE4A0,
+ 37642 - 11905: 0xE540,
+ 37643 - 11905: 0xE541,
+ 37644 - 11905: 0xE542,
+ 37645 - 11905: 0xE543,
+ 37646 - 11905: 0xE544,
+ 37647 - 11905: 0xE545,
+ 37648 - 11905: 0xE546,
+ 37649 - 11905: 0xE547,
+ 37650 - 11905: 0xE548,
+ 37651 - 11905: 0xE549,
+ 37652 - 11905: 0xE54A,
+ 37653 - 11905: 0xE54B,
+ 37654 - 11905: 0xE54C,
+ 37655 - 11905: 0xE54D,
+ 37656 - 11905: 0xE54E,
+ 37657 - 11905: 0xE54F,
+ 37658 - 11905: 0xE550,
+ 37659 - 11905: 0xE551,
+ 37660 - 11905: 0xE552,
+ 37661 - 11905: 0xE553,
+ 37662 - 11905: 0xE554,
+ 37663 - 11905: 0xE555,
+ 37664 - 11905: 0xE556,
+ 37665 - 11905: 0xE557,
+ 37666 - 11905: 0xE558,
+ 37667 - 11905: 0xE559,
+ 37668 - 11905: 0xE55A,
+ 37669 - 11905: 0xE55B,
+ 37670 - 11905: 0xE55C,
+ 37671 - 11905: 0xE55D,
+ 37672 - 11905: 0xE55E,
+ 37673 - 11905: 0xE55F,
+ 37674 - 11905: 0xE560,
+ 37675 - 11905: 0xE561,
+ 37676 - 11905: 0xE562,
+ 37677 - 11905: 0xE563,
+ 37678 - 11905: 0xE564,
+ 37679 - 11905: 0xE565,
+ 37680 - 11905: 0xE566,
+ 37681 - 11905: 0xE567,
+ 37682 - 11905: 0xE568,
+ 37683 - 11905: 0xE569,
+ 37684 - 11905: 0xE56A,
+ 37685 - 11905: 0xE56B,
+ 37686 - 11905: 0xE56C,
+ 37687 - 11905: 0xE56D,
+ 37688 - 11905: 0xE56E,
+ 37689 - 11905: 0xE56F,
+ 37690 - 11905: 0xE570,
+ 37691 - 11905: 0xE571,
+ 37692 - 11905: 0xE572,
+ 37693 - 11905: 0xE573,
+ 37694 - 11905: 0xF6C9,
+ 37695 - 11905: 0xE574,
+ 37696 - 11905: 0xE575,
+ 37697 - 11905: 0xE576,
+ 37698 - 11905: 0xE577,
+ 37699 - 11905: 0xE578,
+ 37700 - 11905: 0xE579,
+ 37701 - 11905: 0xE57A,
+ 37702 - 11905: 0xE57B,
+ 37703 - 11905: 0xE57C,
+ 37704 - 11905: 0xE57D,
+ 37705 - 11905: 0xE57E,
+ 37706 - 11905: 0xE580,
+ 37707 - 11905: 0xE581,
+ 37708 - 11905: 0xE582,
+ 37709 - 11905: 0xE583,
+ 37710 - 11905: 0xE584,
+ 37711 - 11905: 0xE585,
+ 37712 - 11905: 0xE586,
+ 37713 - 11905: 0xE587,
+ 37714 - 11905: 0xE588,
+ 37715 - 11905: 0xE589,
+ 37716 - 11905: 0xE58A,
+ 37717 - 11905: 0xE58B,
+ 37718 - 11905: 0xE58C,
+ 37719 - 11905: 0xE58D,
+ 37720 - 11905: 0xE58E,
+ 37721 - 11905: 0xE58F,
+ 37722 - 11905: 0xE590,
+ 37723 - 11905: 0xE591,
+ 37724 - 11905: 0xE592,
+ 37725 - 11905: 0xE593,
+ 37726 - 11905: 0xE594,
+ 37727 - 11905: 0xE595,
+ 37728 - 11905: 0xE596,
+ 37729 - 11905: 0xE597,
+ 37730 - 11905: 0xE598,
+ 37731 - 11905: 0xE599,
+ 37732 - 11905: 0xE59A,
+ 37733 - 11905: 0xE59B,
+ 37734 - 11905: 0xE59C,
+ 37735 - 11905: 0xE59D,
+ 37736 - 11905: 0xE59E,
+ 37737 - 11905: 0xE59F,
+ 37738 - 11905: 0xF6CA,
+ 37739 - 11905: 0xE5A0,
+ 37740 - 11905: 0xE640,
+ 37741 - 11905: 0xE641,
+ 37742 - 11905: 0xE642,
+ 37743 - 11905: 0xE643,
+ 37744 - 11905: 0xE644,
+ 37745 - 11905: 0xE645,
+ 37746 - 11905: 0xE646,
+ 37747 - 11905: 0xE647,
+ 37748 - 11905: 0xE648,
+ 37749 - 11905: 0xE649,
+ 37750 - 11905: 0xE64A,
+ 37751 - 11905: 0xE64B,
+ 37752 - 11905: 0xE64C,
+ 37753 - 11905: 0xE64D,
+ 37754 - 11905: 0xE64E,
+ 37755 - 11905: 0xE64F,
+ 37756 - 11905: 0xE650,
+ 37757 - 11905: 0xE651,
+ 37758 - 11905: 0xE652,
+ 37759 - 11905: 0xE653,
+ 37760 - 11905: 0xE654,
+ 37761 - 11905: 0xE655,
+ 37762 - 11905: 0xE656,
+ 37763 - 11905: 0xE657,
+ 37764 - 11905: 0xE658,
+ 37765 - 11905: 0xE659,
+ 37766 - 11905: 0xE65A,
+ 37767 - 11905: 0xE65B,
+ 37768 - 11905: 0xE65C,
+ 37769 - 11905: 0xE65D,
+ 37770 - 11905: 0xE65E,
+ 37771 - 11905: 0xE65F,
+ 37772 - 11905: 0xE660,
+ 37773 - 11905: 0xE661,
+ 37774 - 11905: 0xE662,
+ 37775 - 11905: 0xF6CC,
+ 37776 - 11905: 0xE663,
+ 37777 - 11905: 0xE664,
+ 37778 - 11905: 0xE665,
+ 37779 - 11905: 0xE666,
+ 37780 - 11905: 0xE667,
+ 37781 - 11905: 0xE668,
+ 37782 - 11905: 0xE669,
+ 37783 - 11905: 0xE66A,
+ 37784 - 11905: 0xE66B,
+ 37785 - 11905: 0xE66C,
+ 37786 - 11905: 0xE66D,
+ 37787 - 11905: 0xE66E,
+ 37788 - 11905: 0xE66F,
+ 37789 - 11905: 0xE670,
+ 37790 - 11905: 0xE671,
+ 37791 - 11905: 0xE672,
+ 37792 - 11905: 0xE673,
+ 37793 - 11905: 0xE674,
+ 37794 - 11905: 0xE675,
+ 37795 - 11905: 0xE676,
+ 37796 - 11905: 0xE677,
+ 37797 - 11905: 0xE678,
+ 37798 - 11905: 0xE679,
+ 37799 - 11905: 0xE67A,
+ 37800 - 11905: 0xE67B,
+ 37801 - 11905: 0xE67C,
+ 37802 - 11905: 0xE67D,
+ 37803 - 11905: 0xE67E,
+ 37804 - 11905: 0xE680,
+ 37805 - 11905: 0xE681,
+ 37806 - 11905: 0xE682,
+ 37807 - 11905: 0xE683,
+ 37808 - 11905: 0xE684,
+ 37809 - 11905: 0xE685,
+ 37810 - 11905: 0xE686,
+ 37811 - 11905: 0xE687,
+ 37812 - 11905: 0xE688,
+ 37813 - 11905: 0xE689,
+ 37814 - 11905: 0xE68A,
+ 37815 - 11905: 0xE68B,
+ 37816 - 11905: 0xE68C,
+ 37817 - 11905: 0xE68D,
+ 37818 - 11905: 0xE68E,
+ 37819 - 11905: 0xE68F,
+ 37820 - 11905: 0xE690,
+ 37821 - 11905: 0xE691,
+ 37822 - 11905: 0xE692,
+ 37823 - 11905: 0xE693,
+ 37824 - 11905: 0xE694,
+ 37825 - 11905: 0xE695,
+ 37826 - 11905: 0xE696,
+ 37827 - 11905: 0xE697,
+ 37828 - 11905: 0xE698,
+ 37829 - 11905: 0xE699,
+ 37830 - 11905: 0xE69A,
+ 37831 - 11905: 0xE69B,
+ 37832 - 11905: 0xE69C,
+ 37833 - 11905: 0xE69D,
+ 37834 - 11905: 0xF6CB,
+ 37835 - 11905: 0xE69E,
+ 37836 - 11905: 0xE69F,
+ 37837 - 11905: 0xE6A0,
+ 37838 - 11905: 0xE740,
+ 37839 - 11905: 0xE741,
+ 37840 - 11905: 0xE742,
+ 37841 - 11905: 0xE743,
+ 37842 - 11905: 0xE744,
+ 37843 - 11905: 0xE745,
+ 37844 - 11905: 0xE746,
+ 37845 - 11905: 0xE747,
+ 37846 - 11905: 0xF7E9,
+ 37847 - 11905: 0xE748,
+ 37848 - 11905: 0xE749,
+ 37849 - 11905: 0xE74A,
+ 37850 - 11905: 0xE74B,
+ 37851 - 11905: 0xE74C,
+ 37852 - 11905: 0xE74D,
+ 37853 - 11905: 0xE74E,
+ 37854 - 11905: 0xE74F,
+ 37855 - 11905: 0xE750,
+ 37856 - 11905: 0xE751,
+ 37857 - 11905: 0xE752,
+ 37858 - 11905: 0xE753,
+ 37859 - 11905: 0xE754,
+ 37860 - 11905: 0xE755,
+ 37861 - 11905: 0xE756,
+ 37862 - 11905: 0xE757,
+ 37863 - 11905: 0xE758,
+ 37864 - 11905: 0xE759,
+ 37865 - 11905: 0xE75A,
+ 37866 - 11905: 0xE75B,
+ 37867 - 11905: 0xE75C,
+ 37868 - 11905: 0xE75D,
+ 37869 - 11905: 0xE75E,
+ 37870 - 11905: 0xE75F,
+ 37871 - 11905: 0xE760,
+ 37872 - 11905: 0xE761,
+ 37873 - 11905: 0xE762,
+ 37874 - 11905: 0xE763,
+ 37875 - 11905: 0xE764,
+ 37876 - 11905: 0xE765,
+ 37877 - 11905: 0xE766,
+ 37878 - 11905: 0xE767,
+ 37879 - 11905: 0xE768,
+ 37880 - 11905: 0xE769,
+ 37881 - 11905: 0xE76A,
+ 37882 - 11905: 0xE76B,
+ 37883 - 11905: 0xE76C,
+ 37884 - 11905: 0xE76D,
+ 37885 - 11905: 0xE76E,
+ 37886 - 11905: 0xE76F,
+ 37887 - 11905: 0xE770,
+ 37888 - 11905: 0xE771,
+ 37889 - 11905: 0xE772,
+ 37890 - 11905: 0xE773,
+ 37891 - 11905: 0xE774,
+ 37892 - 11905: 0xE775,
+ 37893 - 11905: 0xE776,
+ 37894 - 11905: 0xE777,
+ 37895 - 11905: 0xE778,
+ 37896 - 11905: 0xE779,
+ 37897 - 11905: 0xE77A,
+ 37898 - 11905: 0xE77B,
+ 37899 - 11905: 0xE77C,
+ 37900 - 11905: 0xE77D,
+ 37901 - 11905: 0xE77E,
+ 37902 - 11905: 0xE780,
+ 37903 - 11905: 0xE781,
+ 37904 - 11905: 0xE782,
+ 37905 - 11905: 0xE783,
+ 37906 - 11905: 0xE784,
+ 37907 - 11905: 0xE785,
+ 37908 - 11905: 0xE786,
+ 37909 - 11905: 0xE787,
+ 37910 - 11905: 0xE788,
+ 37911 - 11905: 0xE789,
+ 37912 - 11905: 0xE78A,
+ 37913 - 11905: 0xE78B,
+ 37914 - 11905: 0xE78C,
+ 37915 - 11905: 0xE78D,
+ 37916 - 11905: 0xE78E,
+ 37917 - 11905: 0xE78F,
+ 37918 - 11905: 0xE790,
+ 37919 - 11905: 0xE791,
+ 37920 - 11905: 0xE792,
+ 37921 - 11905: 0xE793,
+ 37922 - 11905: 0xE794,
+ 37923 - 11905: 0xE795,
+ 37924 - 11905: 0xE796,
+ 37925 - 11905: 0xE797,
+ 37926 - 11905: 0xE798,
+ 37927 - 11905: 0xE799,
+ 37928 - 11905: 0xE79A,
+ 37929 - 11905: 0xE79B,
+ 37930 - 11905: 0xE79C,
+ 37931 - 11905: 0xE79D,
+ 37932 - 11905: 0xE79E,
+ 37933 - 11905: 0xE79F,
+ 37934 - 11905: 0xE7A0,
+ 37935 - 11905: 0xE840,
+ 37936 - 11905: 0xE841,
+ 37937 - 11905: 0xE842,
+ 37938 - 11905: 0xE843,
+ 37939 - 11905: 0xE844,
+ 37940 - 11905: 0xE845,
+ 37941 - 11905: 0xE846,
+ 37942 - 11905: 0xE847,
+ 37943 - 11905: 0xE848,
+ 37944 - 11905: 0xE849,
+ 37945 - 11905: 0xE84A,
+ 37946 - 11905: 0xE84B,
+ 37947 - 11905: 0xE84C,
+ 37948 - 11905: 0xE84D,
+ 37949 - 11905: 0xE84E,
+ 37950 - 11905: 0xF6CD,
+ 37951 - 11905: 0xE84F,
+ 37952 - 11905: 0xE850,
+ 37953 - 11905: 0xE851,
+ 37954 - 11905: 0xE852,
+ 37955 - 11905: 0xE853,
+ 37956 - 11905: 0xE854,
+ 37957 - 11905: 0xE855,
+ 37958 - 11905: 0xE856,
+ 37959 - 11905: 0xE857,
+ 37960 - 11905: 0xE858,
+ 37961 - 11905: 0xE859,
+ 37962 - 11905: 0xE85A,
+ 37963 - 11905: 0xE85B,
+ 37964 - 11905: 0xE85C,
+ 37965 - 11905: 0xE85D,
+ 37966 - 11905: 0xE85E,
+ 37967 - 11905: 0xE85F,
+ 37968 - 11905: 0xE860,
+ 37969 - 11905: 0xE861,
+ 37970 - 11905: 0xE862,
+ 37971 - 11905: 0xE863,
+ 37972 - 11905: 0xE864,
+ 37973 - 11905: 0xE865,
+ 37974 - 11905: 0xE866,
+ 37975 - 11905: 0xE867,
+ 37976 - 11905: 0xE868,
+ 37977 - 11905: 0xE869,
+ 37978 - 11905: 0xE86A,
+ 37979 - 11905: 0xE86B,
+ 37980 - 11905: 0xE86C,
+ 37981 - 11905: 0xE86D,
+ 37982 - 11905: 0xE86E,
+ 37983 - 11905: 0xE86F,
+ 37984 - 11905: 0xE870,
+ 37985 - 11905: 0xE871,
+ 37986 - 11905: 0xE872,
+ 37987 - 11905: 0xE873,
+ 37988 - 11905: 0xE874,
+ 37989 - 11905: 0xE875,
+ 37990 - 11905: 0xE876,
+ 37991 - 11905: 0xE877,
+ 37992 - 11905: 0xE878,
+ 37993 - 11905: 0xE879,
+ 37994 - 11905: 0xE87A,
+ 37995 - 11905: 0xF6CE,
+ 37996 - 11905: 0xE87B,
+ 37997 - 11905: 0xE87C,
+ 37998 - 11905: 0xE87D,
+ 37999 - 11905: 0xE87E,
+ 38000 - 11905: 0xE880,
+ 38001 - 11905: 0xE881,
+ 38002 - 11905: 0xE882,
+ 38003 - 11905: 0xE883,
+ 38004 - 11905: 0xE884,
+ 38005 - 11905: 0xE885,
+ 38006 - 11905: 0xE886,
+ 38007 - 11905: 0xE887,
+ 38008 - 11905: 0xE888,
+ 38009 - 11905: 0xE889,
+ 38010 - 11905: 0xE88A,
+ 38011 - 11905: 0xE88B,
+ 38012 - 11905: 0xE88C,
+ 38013 - 11905: 0xE88D,
+ 38014 - 11905: 0xE88E,
+ 38015 - 11905: 0xE88F,
+ 38016 - 11905: 0xE890,
+ 38017 - 11905: 0xE891,
+ 38018 - 11905: 0xE892,
+ 38019 - 11905: 0xE893,
+ 38020 - 11905: 0xE894,
+ 38021 - 11905: 0xEEC4,
+ 38022 - 11905: 0xEEC5,
+ 38023 - 11905: 0xEEC6,
+ 38024 - 11905: 0xD5EB,
+ 38025 - 11905: 0xB6A4,
+ 38026 - 11905: 0xEEC8,
+ 38027 - 11905: 0xEEC7,
+ 38028 - 11905: 0xEEC9,
+ 38029 - 11905: 0xEECA,
+ 38030 - 11905: 0xC7A5,
+ 38031 - 11905: 0xEECB,
+ 38032 - 11905: 0xEECC,
+ 38033 - 11905: 0xE895,
+ 38034 - 11905: 0xB7B0,
+ 38035 - 11905: 0xB5F6,
+ 38036 - 11905: 0xEECD,
+ 38037 - 11905: 0xEECF,
+ 38038 - 11905: 0xE896,
+ 38039 - 11905: 0xEECE,
+ 38040 - 11905: 0xE897,
+ 38041 - 11905: 0xB8C6,
+ 38042 - 11905: 0xEED0,
+ 38043 - 11905: 0xEED1,
+ 38044 - 11905: 0xEED2,
+ 38045 - 11905: 0xB6DB,
+ 38046 - 11905: 0xB3AE,
+ 38047 - 11905: 0xD6D3,
+ 38048 - 11905: 0xC4C6,
+ 38049 - 11905: 0xB1B5,
+ 38050 - 11905: 0xB8D6,
+ 38051 - 11905: 0xEED3,
+ 38052 - 11905: 0xEED4,
+ 38053 - 11905: 0xD4BF,
+ 38054 - 11905: 0xC7D5,
+ 38055 - 11905: 0xBEFB,
+ 38056 - 11905: 0xCED9,
+ 38057 - 11905: 0xB9B3,
+ 38058 - 11905: 0xEED6,
+ 38059 - 11905: 0xEED5,
+ 38060 - 11905: 0xEED8,
+ 38061 - 11905: 0xEED7,
+ 38062 - 11905: 0xC5A5,
+ 38063 - 11905: 0xEED9,
+ 38064 - 11905: 0xEEDA,
+ 38065 - 11905: 0xC7AE,
+ 38066 - 11905: 0xEEDB,
+ 38067 - 11905: 0xC7AF,
+ 38068 - 11905: 0xEEDC,
+ 38069 - 11905: 0xB2A7,
+ 38070 - 11905: 0xEEDD,
+ 38071 - 11905: 0xEEDE,
+ 38072 - 11905: 0xEEDF,
+ 38073 - 11905: 0xEEE0,
+ 38074 - 11905: 0xEEE1,
+ 38075 - 11905: 0xD7EA,
+ 38076 - 11905: 0xEEE2,
+ 38077 - 11905: 0xEEE3,
+ 38078 - 11905: 0xBCD8,
+ 38079 - 11905: 0xEEE4,
+ 38080 - 11905: 0xD3CB,
+ 38081 - 11905: 0xCCFA,
+ 38082 - 11905: 0xB2AC,
+ 38083 - 11905: 0xC1E5,
+ 38084 - 11905: 0xEEE5,
+ 38085 - 11905: 0xC7A6,
+ 38086 - 11905: 0xC3AD,
+ 38087 - 11905: 0xE898,
+ 38088 - 11905: 0xEEE6,
+ 38089 - 11905: 0xEEE7,
+ 38090 - 11905: 0xEEE8,
+ 38091 - 11905: 0xEEE9,
+ 38092 - 11905: 0xEEEA,
+ 38093 - 11905: 0xEEEB,
+ 38094 - 11905: 0xEEEC,
+ 38095 - 11905: 0xE899,
+ 38096 - 11905: 0xEEED,
+ 38097 - 11905: 0xEEEE,
+ 38098 - 11905: 0xEEEF,
+ 38099 - 11905: 0xE89A,
+ 38100 - 11905: 0xE89B,
+ 38101 - 11905: 0xEEF0,
+ 38102 - 11905: 0xEEF1,
+ 38103 - 11905: 0xEEF2,
+ 38104 - 11905: 0xEEF4,
+ 38105 - 11905: 0xEEF3,
+ 38106 - 11905: 0xE89C,
+ 38107 - 11905: 0xEEF5,
+ 38108 - 11905: 0xCDAD,
+ 38109 - 11905: 0xC2C1,
+ 38110 - 11905: 0xEEF6,
+ 38111 - 11905: 0xEEF7,
+ 38112 - 11905: 0xEEF8,
+ 38113 - 11905: 0xD5A1,
+ 38114 - 11905: 0xEEF9,
+ 38115 - 11905: 0xCFB3,
+ 38116 - 11905: 0xEEFA,
+ 38117 - 11905: 0xEEFB,
+ 38118 - 11905: 0xE89D,
+ 38119 - 11905: 0xEEFC,
+ 38120 - 11905: 0xEEFD,
+ 38121 - 11905: 0xEFA1,
+ 38122 - 11905: 0xEEFE,
+ 38123 - 11905: 0xEFA2,
+ 38124 - 11905: 0xB8F5,
+ 38125 - 11905: 0xC3FA,
+ 38126 - 11905: 0xEFA3,
+ 38127 - 11905: 0xEFA4,
+ 38128 - 11905: 0xBDC2,
+ 38129 - 11905: 0xD2BF,
+ 38130 - 11905: 0xB2F9,
+ 38131 - 11905: 0xEFA5,
+ 38132 - 11905: 0xEFA6,
+ 38133 - 11905: 0xEFA7,
+ 38134 - 11905: 0xD2F8,
+ 38135 - 11905: 0xEFA8,
+ 38136 - 11905: 0xD6FD,
+ 38137 - 11905: 0xEFA9,
+ 38138 - 11905: 0xC6CC,
+ 38139 - 11905: 0xE89E,
+ 38140 - 11905: 0xEFAA,
+ 38141 - 11905: 0xEFAB,
+ 38142 - 11905: 0xC1B4,
+ 38143 - 11905: 0xEFAC,
+ 38144 - 11905: 0xCFFA,
+ 38145 - 11905: 0xCBF8,
+ 38146 - 11905: 0xEFAE,
+ 38147 - 11905: 0xEFAD,
+ 38148 - 11905: 0xB3FA,
+ 38149 - 11905: 0xB9F8,
+ 38150 - 11905: 0xEFAF,
+ 38151 - 11905: 0xEFB0,
+ 38152 - 11905: 0xD0E2,
+ 38153 - 11905: 0xEFB1,
+ 38154 - 11905: 0xEFB2,
+ 38155 - 11905: 0xB7E6,
+ 38156 - 11905: 0xD0BF,
+ 38157 - 11905: 0xEFB3,
+ 38158 - 11905: 0xEFB4,
+ 38159 - 11905: 0xEFB5,
+ 38160 - 11905: 0xC8F1,
+ 38161 - 11905: 0xCCE0,
+ 38162 - 11905: 0xEFB6,
+ 38163 - 11905: 0xEFB7,
+ 38164 - 11905: 0xEFB8,
+ 38165 - 11905: 0xEFB9,
+ 38166 - 11905: 0xEFBA,
+ 38167 - 11905: 0xD5E0,
+ 38168 - 11905: 0xEFBB,
+ 38169 - 11905: 0xB4ED,
+ 38170 - 11905: 0xC3AA,
+ 38171 - 11905: 0xEFBC,
+ 38172 - 11905: 0xE89F,
+ 38173 - 11905: 0xEFBD,
+ 38174 - 11905: 0xEFBE,
+ 38175 - 11905: 0xEFBF,
+ 38176 - 11905: 0xE8A0,
+ 38177 - 11905: 0xCEFD,
+ 38178 - 11905: 0xEFC0,
+ 38179 - 11905: 0xC2E0,
+ 38180 - 11905: 0xB4B8,
+ 38181 - 11905: 0xD7B6,
+ 38182 - 11905: 0xBDF5,
+ 38183 - 11905: 0xE940,
+ 38184 - 11905: 0xCFC7,
+ 38185 - 11905: 0xEFC3,
+ 38186 - 11905: 0xEFC1,
+ 38187 - 11905: 0xEFC2,
+ 38188 - 11905: 0xEFC4,
+ 38189 - 11905: 0xB6A7,
+ 38190 - 11905: 0xBCFC,
+ 38191 - 11905: 0xBEE2,
+ 38192 - 11905: 0xC3CC,
+ 38193 - 11905: 0xEFC5,
+ 38194 - 11905: 0xEFC6,
+ 38195 - 11905: 0xE941,
+ 38196 - 11905: 0xEFC7,
+ 38197 - 11905: 0xEFCF,
+ 38198 - 11905: 0xEFC8,
+ 38199 - 11905: 0xEFC9,
+ 38200 - 11905: 0xEFCA,
+ 38201 - 11905: 0xC7C2,
+ 38202 - 11905: 0xEFF1,
+ 38203 - 11905: 0xB6CD,
+ 38204 - 11905: 0xEFCB,
+ 38205 - 11905: 0xE942,
+ 38206 - 11905: 0xEFCC,
+ 38207 - 11905: 0xEFCD,
+ 38208 - 11905: 0xB6C6,
+ 38209 - 11905: 0xC3BE,
+ 38210 - 11905: 0xEFCE,
+ 38211 - 11905: 0xE943,
+ 38212 - 11905: 0xEFD0,
+ 38213 - 11905: 0xEFD1,
+ 38214 - 11905: 0xEFD2,
+ 38215 - 11905: 0xD5F2,
+ 38216 - 11905: 0xE944,
+ 38217 - 11905: 0xEFD3,
+ 38218 - 11905: 0xC4F7,
+ 38219 - 11905: 0xE945,
+ 38220 - 11905: 0xEFD4,
+ 38221 - 11905: 0xC4F8,
+ 38222 - 11905: 0xEFD5,
+ 38223 - 11905: 0xEFD6,
+ 38224 - 11905: 0xB8E4,
+ 38225 - 11905: 0xB0F7,
+ 38226 - 11905: 0xEFD7,
+ 38227 - 11905: 0xEFD8,
+ 38228 - 11905: 0xEFD9,
+ 38229 - 11905: 0xE946,
+ 38230 - 11905: 0xEFDA,
+ 38231 - 11905: 0xEFDB,
+ 38232 - 11905: 0xEFDC,
+ 38233 - 11905: 0xEFDD,
+ 38234 - 11905: 0xE947,
+ 38235 - 11905: 0xEFDE,
+ 38236 - 11905: 0xBEB5,
+ 38237 - 11905: 0xEFE1,
+ 38238 - 11905: 0xEFDF,
+ 38239 - 11905: 0xEFE0,
+ 38240 - 11905: 0xE948,
+ 38241 - 11905: 0xEFE2,
+ 38242 - 11905: 0xEFE3,
+ 38243 - 11905: 0xC1CD,
+ 38244 - 11905: 0xEFE4,
+ 38245 - 11905: 0xEFE5,
+ 38246 - 11905: 0xEFE6,
+ 38247 - 11905: 0xEFE7,
+ 38248 - 11905: 0xEFE8,
+ 38249 - 11905: 0xEFE9,
+ 38250 - 11905: 0xEFEA,
+ 38251 - 11905: 0xEFEB,
+ 38252 - 11905: 0xEFEC,
+ 38253 - 11905: 0xC0D8,
+ 38254 - 11905: 0xE949,
+ 38255 - 11905: 0xEFED,
+ 38256 - 11905: 0xC1AD,
+ 38257 - 11905: 0xEFEE,
+ 38258 - 11905: 0xEFEF,
+ 38259 - 11905: 0xEFF0,
+ 38260 - 11905: 0xE94A,
+ 38261 - 11905: 0xE94B,
+ 38262 - 11905: 0xCFE2,
+ 38263 - 11905: 0xE94C,
+ 38264 - 11905: 0xE94D,
+ 38265 - 11905: 0xE94E,
+ 38266 - 11905: 0xE94F,
+ 38267 - 11905: 0xE950,
+ 38268 - 11905: 0xE951,
+ 38269 - 11905: 0xE952,
+ 38270 - 11905: 0xE953,
+ 38271 - 11905: 0xB3A4,
+ 38272 - 11905: 0xE954,
+ 38273 - 11905: 0xE955,
+ 38274 - 11905: 0xE956,
+ 38275 - 11905: 0xE957,
+ 38276 - 11905: 0xE958,
+ 38277 - 11905: 0xE959,
+ 38278 - 11905: 0xE95A,
+ 38279 - 11905: 0xE95B,
+ 38280 - 11905: 0xE95C,
+ 38281 - 11905: 0xE95D,
+ 38282 - 11905: 0xE95E,
+ 38283 - 11905: 0xE95F,
+ 38284 - 11905: 0xE960,
+ 38285 - 11905: 0xE961,
+ 38286 - 11905: 0xE962,
+ 38287 - 11905: 0xE963,
+ 38288 - 11905: 0xE964,
+ 38289 - 11905: 0xE965,
+ 38290 - 11905: 0xE966,
+ 38291 - 11905: 0xE967,
+ 38292 - 11905: 0xE968,
+ 38293 - 11905: 0xE969,
+ 38294 - 11905: 0xE96A,
+ 38295 - 11905: 0xE96B,
+ 38296 - 11905: 0xE96C,
+ 38297 - 11905: 0xE96D,
+ 38298 - 11905: 0xE96E,
+ 38299 - 11905: 0xE96F,
+ 38300 - 11905: 0xE970,
+ 38301 - 11905: 0xE971,
+ 38302 - 11905: 0xE972,
+ 38303 - 11905: 0xE973,
+ 38304 - 11905: 0xE974,
+ 38305 - 11905: 0xE975,
+ 38306 - 11905: 0xE976,
+ 38307 - 11905: 0xE977,
+ 38308 - 11905: 0xE978,
+ 38309 - 11905: 0xE979,
+ 38310 - 11905: 0xE97A,
+ 38311 - 11905: 0xE97B,
+ 38312 - 11905: 0xE97C,
+ 38313 - 11905: 0xE97D,
+ 38314 - 11905: 0xE97E,
+ 38315 - 11905: 0xE980,
+ 38316 - 11905: 0xE981,
+ 38317 - 11905: 0xE982,
+ 38318 - 11905: 0xE983,
+ 38319 - 11905: 0xE984,
+ 38320 - 11905: 0xE985,
+ 38321 - 11905: 0xE986,
+ 38322 - 11905: 0xE987,
+ 38323 - 11905: 0xE988,
+ 38324 - 11905: 0xE989,
+ 38325 - 11905: 0xE98A,
+ 38326 - 11905: 0xE98B,
+ 38327 - 11905: 0xE98C,
+ 38328 - 11905: 0xE98D,
+ 38329 - 11905: 0xE98E,
+ 38330 - 11905: 0xE98F,
+ 38331 - 11905: 0xE990,
+ 38332 - 11905: 0xE991,
+ 38333 - 11905: 0xE992,
+ 38334 - 11905: 0xE993,
+ 38335 - 11905: 0xE994,
+ 38336 - 11905: 0xE995,
+ 38337 - 11905: 0xE996,
+ 38338 - 11905: 0xE997,
+ 38339 - 11905: 0xE998,
+ 38340 - 11905: 0xE999,
+ 38341 - 11905: 0xE99A,
+ 38342 - 11905: 0xE99B,
+ 38343 - 11905: 0xE99C,
+ 38344 - 11905: 0xE99D,
+ 38345 - 11905: 0xE99E,
+ 38346 - 11905: 0xE99F,
+ 38347 - 11905: 0xE9A0,
+ 38348 - 11905: 0xEA40,
+ 38349 - 11905: 0xEA41,
+ 38350 - 11905: 0xEA42,
+ 38351 - 11905: 0xEA43,
+ 38352 - 11905: 0xEA44,
+ 38353 - 11905: 0xEA45,
+ 38354 - 11905: 0xEA46,
+ 38355 - 11905: 0xEA47,
+ 38356 - 11905: 0xEA48,
+ 38357 - 11905: 0xEA49,
+ 38358 - 11905: 0xEA4A,
+ 38359 - 11905: 0xEA4B,
+ 38360 - 11905: 0xEA4C,
+ 38361 - 11905: 0xEA4D,
+ 38362 - 11905: 0xEA4E,
+ 38363 - 11905: 0xEA4F,
+ 38364 - 11905: 0xEA50,
+ 38365 - 11905: 0xEA51,
+ 38366 - 11905: 0xEA52,
+ 38367 - 11905: 0xEA53,
+ 38368 - 11905: 0xEA54,
+ 38369 - 11905: 0xEA55,
+ 38370 - 11905: 0xEA56,
+ 38371 - 11905: 0xEA57,
+ 38372 - 11905: 0xEA58,
+ 38373 - 11905: 0xEA59,
+ 38374 - 11905: 0xEA5A,
+ 38375 - 11905: 0xEA5B,
+ 38376 - 11905: 0xC3C5,
+ 38377 - 11905: 0xE3C5,
+ 38378 - 11905: 0xC9C1,
+ 38379 - 11905: 0xE3C6,
+ 38380 - 11905: 0xEA5C,
+ 38381 - 11905: 0xB1D5,
+ 38382 - 11905: 0xCECA,
+ 38383 - 11905: 0xB4B3,
+ 38384 - 11905: 0xC8F2,
+ 38385 - 11905: 0xE3C7,
+ 38386 - 11905: 0xCFD0,
+ 38387 - 11905: 0xE3C8,
+ 38388 - 11905: 0xBCE4,
+ 38389 - 11905: 0xE3C9,
+ 38390 - 11905: 0xE3CA,
+ 38391 - 11905: 0xC3C6,
+ 38392 - 11905: 0xD5A2,
+ 38393 - 11905: 0xC4D6,
+ 38394 - 11905: 0xB9EB,
+ 38395 - 11905: 0xCEC5,
+ 38396 - 11905: 0xE3CB,
+ 38397 - 11905: 0xC3F6,
+ 38398 - 11905: 0xE3CC,
+ 38399 - 11905: 0xEA5D,
+ 38400 - 11905: 0xB7A7,
+ 38401 - 11905: 0xB8F3,
+ 38402 - 11905: 0xBAD2,
+ 38403 - 11905: 0xE3CD,
+ 38404 - 11905: 0xE3CE,
+ 38405 - 11905: 0xD4C4,
+ 38406 - 11905: 0xE3CF,
+ 38407 - 11905: 0xEA5E,
+ 38408 - 11905: 0xE3D0,
+ 38409 - 11905: 0xD1CB,
+ 38410 - 11905: 0xE3D1,
+ 38411 - 11905: 0xE3D2,
+ 38412 - 11905: 0xE3D3,
+ 38413 - 11905: 0xE3D4,
+ 38414 - 11905: 0xD1D6,
+ 38415 - 11905: 0xE3D5,
+ 38416 - 11905: 0xB2FB,
+ 38417 - 11905: 0xC0BB,
+ 38418 - 11905: 0xE3D6,
+ 38419 - 11905: 0xEA5F,
+ 38420 - 11905: 0xC0AB,
+ 38421 - 11905: 0xE3D7,
+ 38422 - 11905: 0xE3D8,
+ 38423 - 11905: 0xE3D9,
+ 38424 - 11905: 0xEA60,
+ 38425 - 11905: 0xE3DA,
+ 38426 - 11905: 0xE3DB,
+ 38427 - 11905: 0xEA61,
+ 38428 - 11905: 0xB8B7,
+ 38429 - 11905: 0xDAE2,
+ 38430 - 11905: 0xEA62,
+ 38431 - 11905: 0xB6D3,
+ 38432 - 11905: 0xEA63,
+ 38433 - 11905: 0xDAE4,
+ 38434 - 11905: 0xDAE3,
+ 38435 - 11905: 0xEA64,
+ 38436 - 11905: 0xEA65,
+ 38437 - 11905: 0xEA66,
+ 38438 - 11905: 0xEA67,
+ 38439 - 11905: 0xEA68,
+ 38440 - 11905: 0xEA69,
+ 38441 - 11905: 0xEA6A,
+ 38442 - 11905: 0xDAE6,
+ 38443 - 11905: 0xEA6B,
+ 38444 - 11905: 0xEA6C,
+ 38445 - 11905: 0xEA6D,
+ 38446 - 11905: 0xC8EE,
+ 38447 - 11905: 0xEA6E,
+ 38448 - 11905: 0xEA6F,
+ 38449 - 11905: 0xDAE5,
+ 38450 - 11905: 0xB7C0,
+ 38451 - 11905: 0xD1F4,
+ 38452 - 11905: 0xD2F5,
+ 38453 - 11905: 0xD5F3,
+ 38454 - 11905: 0xBDD7,
+ 38455 - 11905: 0xEA70,
+ 38456 - 11905: 0xEA71,
+ 38457 - 11905: 0xEA72,
+ 38458 - 11905: 0xEA73,
+ 38459 - 11905: 0xD7E8,
+ 38460 - 11905: 0xDAE8,
+ 38461 - 11905: 0xDAE7,
+ 38462 - 11905: 0xEA74,
+ 38463 - 11905: 0xB0A2,
+ 38464 - 11905: 0xCDD3,
+ 38465 - 11905: 0xEA75,
+ 38466 - 11905: 0xDAE9,
+ 38467 - 11905: 0xEA76,
+ 38468 - 11905: 0xB8BD,
+ 38469 - 11905: 0xBCCA,
+ 38470 - 11905: 0xC2BD,
+ 38471 - 11905: 0xC2A4,
+ 38472 - 11905: 0xB3C2,
+ 38473 - 11905: 0xDAEA,
+ 38474 - 11905: 0xEA77,
+ 38475 - 11905: 0xC2AA,
+ 38476 - 11905: 0xC4B0,
+ 38477 - 11905: 0xBDB5,
+ 38478 - 11905: 0xEA78,
+ 38479 - 11905: 0xEA79,
+ 38480 - 11905: 0xCFDE,
+ 38481 - 11905: 0xEA7A,
+ 38482 - 11905: 0xEA7B,
+ 38483 - 11905: 0xEA7C,
+ 38484 - 11905: 0xDAEB,
+ 38485 - 11905: 0xC9C2,
+ 38486 - 11905: 0xEA7D,
+ 38487 - 11905: 0xEA7E,
+ 38488 - 11905: 0xEA80,
+ 38489 - 11905: 0xEA81,
+ 38490 - 11905: 0xEA82,
+ 38491 - 11905: 0xB1DD,
+ 38492 - 11905: 0xEA83,
+ 38493 - 11905: 0xEA84,
+ 38494 - 11905: 0xEA85,
+ 38495 - 11905: 0xDAEC,
+ 38496 - 11905: 0xEA86,
+ 38497 - 11905: 0xB6B8,
+ 38498 - 11905: 0xD4BA,
+ 38499 - 11905: 0xEA87,
+ 38500 - 11905: 0xB3FD,
+ 38501 - 11905: 0xEA88,
+ 38502 - 11905: 0xEA89,
+ 38503 - 11905: 0xDAED,
+ 38504 - 11905: 0xD4C9,
+ 38505 - 11905: 0xCFD5,
+ 38506 - 11905: 0xC5E3,
+ 38507 - 11905: 0xEA8A,
+ 38508 - 11905: 0xDAEE,
+ 38509 - 11905: 0xEA8B,
+ 38510 - 11905: 0xEA8C,
+ 38511 - 11905: 0xEA8D,
+ 38512 - 11905: 0xEA8E,
+ 38513 - 11905: 0xEA8F,
+ 38514 - 11905: 0xDAEF,
+ 38515 - 11905: 0xEA90,
+ 38516 - 11905: 0xDAF0,
+ 38517 - 11905: 0xC1EA,
+ 38518 - 11905: 0xCCD5,
+ 38519 - 11905: 0xCFDD,
+ 38520 - 11905: 0xEA91,
+ 38521 - 11905: 0xEA92,
+ 38522 - 11905: 0xEA93,
+ 38523 - 11905: 0xEA94,
+ 38524 - 11905: 0xEA95,
+ 38525 - 11905: 0xEA96,
+ 38526 - 11905: 0xEA97,
+ 38527 - 11905: 0xEA98,
+ 38528 - 11905: 0xEA99,
+ 38529 - 11905: 0xEA9A,
+ 38530 - 11905: 0xEA9B,
+ 38531 - 11905: 0xEA9C,
+ 38532 - 11905: 0xEA9D,
+ 38533 - 11905: 0xD3E7,
+ 38534 - 11905: 0xC2A1,
+ 38535 - 11905: 0xEA9E,
+ 38536 - 11905: 0xDAF1,
+ 38537 - 11905: 0xEA9F,
+ 38538 - 11905: 0xEAA0,
+ 38539 - 11905: 0xCBE5,
+ 38540 - 11905: 0xEB40,
+ 38541 - 11905: 0xDAF2,
+ 38542 - 11905: 0xEB41,
+ 38543 - 11905: 0xCBE6,
+ 38544 - 11905: 0xD2FE,
+ 38545 - 11905: 0xEB42,
+ 38546 - 11905: 0xEB43,
+ 38547 - 11905: 0xEB44,
+ 38548 - 11905: 0xB8F4,
+ 38549 - 11905: 0xEB45,
+ 38550 - 11905: 0xEB46,
+ 38551 - 11905: 0xDAF3,
+ 38552 - 11905: 0xB0AF,
+ 38553 - 11905: 0xCFB6,
+ 38554 - 11905: 0xEB47,
+ 38555 - 11905: 0xEB48,
+ 38556 - 11905: 0xD5CF,
+ 38557 - 11905: 0xEB49,
+ 38558 - 11905: 0xEB4A,
+ 38559 - 11905: 0xEB4B,
+ 38560 - 11905: 0xEB4C,
+ 38561 - 11905: 0xEB4D,
+ 38562 - 11905: 0xEB4E,
+ 38563 - 11905: 0xEB4F,
+ 38564 - 11905: 0xEB50,
+ 38565 - 11905: 0xEB51,
+ 38566 - 11905: 0xEB52,
+ 38567 - 11905: 0xCBED,
+ 38568 - 11905: 0xEB53,
+ 38569 - 11905: 0xEB54,
+ 38570 - 11905: 0xEB55,
+ 38571 - 11905: 0xEB56,
+ 38572 - 11905: 0xEB57,
+ 38573 - 11905: 0xEB58,
+ 38574 - 11905: 0xEB59,
+ 38575 - 11905: 0xEB5A,
+ 38576 - 11905: 0xDAF4,
+ 38577 - 11905: 0xEB5B,
+ 38578 - 11905: 0xEB5C,
+ 38579 - 11905: 0xE3C4,
+ 38580 - 11905: 0xEB5D,
+ 38581 - 11905: 0xEB5E,
+ 38582 - 11905: 0xC1A5,
+ 38583 - 11905: 0xEB5F,
+ 38584 - 11905: 0xEB60,
+ 38585 - 11905: 0xF6BF,
+ 38586 - 11905: 0xEB61,
+ 38587 - 11905: 0xEB62,
+ 38588 - 11905: 0xF6C0,
+ 38589 - 11905: 0xF6C1,
+ 38590 - 11905: 0xC4D1,
+ 38591 - 11905: 0xEB63,
+ 38592 - 11905: 0xC8B8,
+ 38593 - 11905: 0xD1E3,
+ 38594 - 11905: 0xEB64,
+ 38595 - 11905: 0xEB65,
+ 38596 - 11905: 0xD0DB,
+ 38597 - 11905: 0xD1C5,
+ 38598 - 11905: 0xBCAF,
+ 38599 - 11905: 0xB9CD,
+ 38600 - 11905: 0xEB66,
+ 38601 - 11905: 0xEFF4,
+ 38602 - 11905: 0xEB67,
+ 38603 - 11905: 0xEB68,
+ 38604 - 11905: 0xB4C6,
+ 38605 - 11905: 0xD3BA,
+ 38606 - 11905: 0xF6C2,
+ 38607 - 11905: 0xB3FB,
+ 38608 - 11905: 0xEB69,
+ 38609 - 11905: 0xEB6A,
+ 38610 - 11905: 0xF6C3,
+ 38611 - 11905: 0xEB6B,
+ 38612 - 11905: 0xEB6C,
+ 38613 - 11905: 0xB5F1,
+ 38614 - 11905: 0xEB6D,
+ 38615 - 11905: 0xEB6E,
+ 38616 - 11905: 0xEB6F,
+ 38617 - 11905: 0xEB70,
+ 38618 - 11905: 0xEB71,
+ 38619 - 11905: 0xEB72,
+ 38620 - 11905: 0xEB73,
+ 38621 - 11905: 0xEB74,
+ 38622 - 11905: 0xEB75,
+ 38623 - 11905: 0xEB76,
+ 38624 - 11905: 0xF6C5,
+ 38625 - 11905: 0xEB77,
+ 38626 - 11905: 0xEB78,
+ 38627 - 11905: 0xEB79,
+ 38628 - 11905: 0xEB7A,
+ 38629 - 11905: 0xEB7B,
+ 38630 - 11905: 0xEB7C,
+ 38631 - 11905: 0xEB7D,
+ 38632 - 11905: 0xD3EA,
+ 38633 - 11905: 0xF6A7,
+ 38634 - 11905: 0xD1A9,
+ 38635 - 11905: 0xEB7E,
+ 38636 - 11905: 0xEB80,
+ 38637 - 11905: 0xEB81,
+ 38638 - 11905: 0xEB82,
+ 38639 - 11905: 0xF6A9,
+ 38640 - 11905: 0xEB83,
+ 38641 - 11905: 0xEB84,
+ 38642 - 11905: 0xEB85,
+ 38643 - 11905: 0xF6A8,
+ 38644 - 11905: 0xEB86,
+ 38645 - 11905: 0xEB87,
+ 38646 - 11905: 0xC1E3,
+ 38647 - 11905: 0xC0D7,
+ 38648 - 11905: 0xEB88,
+ 38649 - 11905: 0xB1A2,
+ 38650 - 11905: 0xEB89,
+ 38651 - 11905: 0xEB8A,
+ 38652 - 11905: 0xEB8B,
+ 38653 - 11905: 0xEB8C,
+ 38654 - 11905: 0xCEED,
+ 38655 - 11905: 0xEB8D,
+ 38656 - 11905: 0xD0E8,
+ 38657 - 11905: 0xF6AB,
+ 38658 - 11905: 0xEB8E,
+ 38659 - 11905: 0xEB8F,
+ 38660 - 11905: 0xCFF6,
+ 38661 - 11905: 0xEB90,
+ 38662 - 11905: 0xF6AA,
+ 38663 - 11905: 0xD5F0,
+ 38664 - 11905: 0xF6AC,
+ 38665 - 11905: 0xC3B9,
+ 38666 - 11905: 0xEB91,
+ 38667 - 11905: 0xEB92,
+ 38668 - 11905: 0xEB93,
+ 38669 - 11905: 0xBBF4,
+ 38670 - 11905: 0xF6AE,
+ 38671 - 11905: 0xF6AD,
+ 38672 - 11905: 0xEB94,
+ 38673 - 11905: 0xEB95,
+ 38674 - 11905: 0xEB96,
+ 38675 - 11905: 0xC4DE,
+ 38676 - 11905: 0xEB97,
+ 38677 - 11905: 0xEB98,
+ 38678 - 11905: 0xC1D8,
+ 38679 - 11905: 0xEB99,
+ 38680 - 11905: 0xEB9A,
+ 38681 - 11905: 0xEB9B,
+ 38682 - 11905: 0xEB9C,
+ 38683 - 11905: 0xEB9D,
+ 38684 - 11905: 0xCBAA,
+ 38685 - 11905: 0xEB9E,
+ 38686 - 11905: 0xCFBC,
+ 38687 - 11905: 0xEB9F,
+ 38688 - 11905: 0xEBA0,
+ 38689 - 11905: 0xEC40,
+ 38690 - 11905: 0xEC41,
+ 38691 - 11905: 0xEC42,
+ 38692 - 11905: 0xEC43,
+ 38693 - 11905: 0xEC44,
+ 38694 - 11905: 0xEC45,
+ 38695 - 11905: 0xEC46,
+ 38696 - 11905: 0xEC47,
+ 38697 - 11905: 0xEC48,
+ 38698 - 11905: 0xF6AF,
+ 38699 - 11905: 0xEC49,
+ 38700 - 11905: 0xEC4A,
+ 38701 - 11905: 0xF6B0,
+ 38702 - 11905: 0xEC4B,
+ 38703 - 11905: 0xEC4C,
+ 38704 - 11905: 0xF6B1,
+ 38705 - 11905: 0xEC4D,
+ 38706 - 11905: 0xC2B6,
+ 38707 - 11905: 0xEC4E,
+ 38708 - 11905: 0xEC4F,
+ 38709 - 11905: 0xEC50,
+ 38710 - 11905: 0xEC51,
+ 38711 - 11905: 0xEC52,
+ 38712 - 11905: 0xB0D4,
+ 38713 - 11905: 0xC5F9,
+ 38714 - 11905: 0xEC53,
+ 38715 - 11905: 0xEC54,
+ 38716 - 11905: 0xEC55,
+ 38717 - 11905: 0xEC56,
+ 38718 - 11905: 0xF6B2,
+ 38719 - 11905: 0xEC57,
+ 38720 - 11905: 0xEC58,
+ 38721 - 11905: 0xEC59,
+ 38722 - 11905: 0xEC5A,
+ 38723 - 11905: 0xEC5B,
+ 38724 - 11905: 0xEC5C,
+ 38725 - 11905: 0xEC5D,
+ 38726 - 11905: 0xEC5E,
+ 38727 - 11905: 0xEC5F,
+ 38728 - 11905: 0xEC60,
+ 38729 - 11905: 0xEC61,
+ 38730 - 11905: 0xEC62,
+ 38731 - 11905: 0xEC63,
+ 38732 - 11905: 0xEC64,
+ 38733 - 11905: 0xEC65,
+ 38734 - 11905: 0xEC66,
+ 38735 - 11905: 0xEC67,
+ 38736 - 11905: 0xEC68,
+ 38737 - 11905: 0xEC69,
+ 38738 - 11905: 0xC7E0,
+ 38739 - 11905: 0xF6A6,
+ 38740 - 11905: 0xEC6A,
+ 38741 - 11905: 0xEC6B,
+ 38742 - 11905: 0xBEB8,
+ 38743 - 11905: 0xEC6C,
+ 38744 - 11905: 0xEC6D,
+ 38745 - 11905: 0xBEB2,
+ 38746 - 11905: 0xEC6E,
+ 38747 - 11905: 0xB5E5,
+ 38748 - 11905: 0xEC6F,
+ 38749 - 11905: 0xEC70,
+ 38750 - 11905: 0xB7C7,
+ 38751 - 11905: 0xEC71,
+ 38752 - 11905: 0xBFBF,
+ 38753 - 11905: 0xC3D2,
+ 38754 - 11905: 0xC3E6,
+ 38755 - 11905: 0xEC72,
+ 38756 - 11905: 0xEC73,
+ 38757 - 11905: 0xD8CC,
+ 38758 - 11905: 0xEC74,
+ 38759 - 11905: 0xEC75,
+ 38760 - 11905: 0xEC76,
+ 38761 - 11905: 0xB8EF,
+ 38762 - 11905: 0xEC77,
+ 38763 - 11905: 0xEC78,
+ 38764 - 11905: 0xEC79,
+ 38765 - 11905: 0xEC7A,
+ 38766 - 11905: 0xEC7B,
+ 38767 - 11905: 0xEC7C,
+ 38768 - 11905: 0xEC7D,
+ 38769 - 11905: 0xEC7E,
+ 38770 - 11905: 0xEC80,
+ 38771 - 11905: 0xBDF9,
+ 38772 - 11905: 0xD1A5,
+ 38773 - 11905: 0xEC81,
+ 38774 - 11905: 0xB0D0,
+ 38775 - 11905: 0xEC82,
+ 38776 - 11905: 0xEC83,
+ 38777 - 11905: 0xEC84,
+ 38778 - 11905: 0xEC85,
+ 38779 - 11905: 0xEC86,
+ 38780 - 11905: 0xF7B0,
+ 38781 - 11905: 0xEC87,
+ 38782 - 11905: 0xEC88,
+ 38783 - 11905: 0xEC89,
+ 38784 - 11905: 0xEC8A,
+ 38785 - 11905: 0xEC8B,
+ 38786 - 11905: 0xEC8C,
+ 38787 - 11905: 0xEC8D,
+ 38788 - 11905: 0xEC8E,
+ 38789 - 11905: 0xF7B1,
+ 38790 - 11905: 0xEC8F,
+ 38791 - 11905: 0xEC90,
+ 38792 - 11905: 0xEC91,
+ 38793 - 11905: 0xEC92,
+ 38794 - 11905: 0xEC93,
+ 38795 - 11905: 0xD0AC,
+ 38796 - 11905: 0xEC94,
+ 38797 - 11905: 0xB0B0,
+ 38798 - 11905: 0xEC95,
+ 38799 - 11905: 0xEC96,
+ 38800 - 11905: 0xEC97,
+ 38801 - 11905: 0xF7B2,
+ 38802 - 11905: 0xF7B3,
+ 38803 - 11905: 0xEC98,
+ 38804 - 11905: 0xF7B4,
+ 38805 - 11905: 0xEC99,
+ 38806 - 11905: 0xEC9A,
+ 38807 - 11905: 0xEC9B,
+ 38808 - 11905: 0xC7CA,
+ 38809 - 11905: 0xEC9C,
+ 38810 - 11905: 0xEC9D,
+ 38811 - 11905: 0xEC9E,
+ 38812 - 11905: 0xEC9F,
+ 38813 - 11905: 0xECA0,
+ 38814 - 11905: 0xED40,
+ 38815 - 11905: 0xED41,
+ 38816 - 11905: 0xBECF,
+ 38817 - 11905: 0xED42,
+ 38818 - 11905: 0xED43,
+ 38819 - 11905: 0xF7B7,
+ 38820 - 11905: 0xED44,
+ 38821 - 11905: 0xED45,
+ 38822 - 11905: 0xED46,
+ 38823 - 11905: 0xED47,
+ 38824 - 11905: 0xED48,
+ 38825 - 11905: 0xED49,
+ 38826 - 11905: 0xED4A,
+ 38827 - 11905: 0xF7B6,
+ 38828 - 11905: 0xED4B,
+ 38829 - 11905: 0xB1DE,
+ 38830 - 11905: 0xED4C,
+ 38831 - 11905: 0xF7B5,
+ 38832 - 11905: 0xED4D,
+ 38833 - 11905: 0xED4E,
+ 38834 - 11905: 0xF7B8,
+ 38835 - 11905: 0xED4F,
+ 38836 - 11905: 0xF7B9,
+ 38837 - 11905: 0xED50,
+ 38838 - 11905: 0xED51,
+ 38839 - 11905: 0xED52,
+ 38840 - 11905: 0xED53,
+ 38841 - 11905: 0xED54,
+ 38842 - 11905: 0xED55,
+ 38843 - 11905: 0xED56,
+ 38844 - 11905: 0xED57,
+ 38845 - 11905: 0xED58,
+ 38846 - 11905: 0xED59,
+ 38847 - 11905: 0xED5A,
+ 38848 - 11905: 0xED5B,
+ 38849 - 11905: 0xED5C,
+ 38850 - 11905: 0xED5D,
+ 38851 - 11905: 0xED5E,
+ 38852 - 11905: 0xED5F,
+ 38853 - 11905: 0xED60,
+ 38854 - 11905: 0xED61,
+ 38855 - 11905: 0xED62,
+ 38856 - 11905: 0xED63,
+ 38857 - 11905: 0xED64,
+ 38858 - 11905: 0xED65,
+ 38859 - 11905: 0xED66,
+ 38860 - 11905: 0xED67,
+ 38861 - 11905: 0xED68,
+ 38862 - 11905: 0xED69,
+ 38863 - 11905: 0xED6A,
+ 38864 - 11905: 0xED6B,
+ 38865 - 11905: 0xED6C,
+ 38866 - 11905: 0xED6D,
+ 38867 - 11905: 0xED6E,
+ 38868 - 11905: 0xED6F,
+ 38869 - 11905: 0xED70,
+ 38870 - 11905: 0xED71,
+ 38871 - 11905: 0xED72,
+ 38872 - 11905: 0xED73,
+ 38873 - 11905: 0xED74,
+ 38874 - 11905: 0xED75,
+ 38875 - 11905: 0xED76,
+ 38876 - 11905: 0xED77,
+ 38877 - 11905: 0xED78,
+ 38878 - 11905: 0xED79,
+ 38879 - 11905: 0xED7A,
+ 38880 - 11905: 0xED7B,
+ 38881 - 11905: 0xED7C,
+ 38882 - 11905: 0xED7D,
+ 38883 - 11905: 0xED7E,
+ 38884 - 11905: 0xED80,
+ 38885 - 11905: 0xED81,
+ 38886 - 11905: 0xCEA4,
+ 38887 - 11905: 0xC8CD,
+ 38888 - 11905: 0xED82,
+ 38889 - 11905: 0xBAAB,
+ 38890 - 11905: 0xE8B8,
+ 38891 - 11905: 0xE8B9,
+ 38892 - 11905: 0xE8BA,
+ 38893 - 11905: 0xBEC2,
+ 38894 - 11905: 0xED83,
+ 38895 - 11905: 0xED84,
+ 38896 - 11905: 0xED85,
+ 38897 - 11905: 0xED86,
+ 38898 - 11905: 0xED87,
+ 38899 - 11905: 0xD2F4,
+ 38900 - 11905: 0xED88,
+ 38901 - 11905: 0xD4CF,
+ 38902 - 11905: 0xC9D8,
+ 38903 - 11905: 0xED89,
+ 38904 - 11905: 0xED8A,
+ 38905 - 11905: 0xED8B,
+ 38906 - 11905: 0xED8C,
+ 38907 - 11905: 0xED8D,
+ 38908 - 11905: 0xED8E,
+ 38909 - 11905: 0xED8F,
+ 38910 - 11905: 0xED90,
+ 38911 - 11905: 0xED91,
+ 38912 - 11905: 0xED92,
+ 38913 - 11905: 0xED93,
+ 38914 - 11905: 0xED94,
+ 38915 - 11905: 0xED95,
+ 38916 - 11905: 0xED96,
+ 38917 - 11905: 0xED97,
+ 38918 - 11905: 0xED98,
+ 38919 - 11905: 0xED99,
+ 38920 - 11905: 0xED9A,
+ 38921 - 11905: 0xED9B,
+ 38922 - 11905: 0xED9C,
+ 38923 - 11905: 0xED9D,
+ 38924 - 11905: 0xED9E,
+ 38925 - 11905: 0xED9F,
+ 38926 - 11905: 0xEDA0,
+ 38927 - 11905: 0xEE40,
+ 38928 - 11905: 0xEE41,
+ 38929 - 11905: 0xEE42,
+ 38930 - 11905: 0xEE43,
+ 38931 - 11905: 0xEE44,
+ 38932 - 11905: 0xEE45,
+ 38933 - 11905: 0xEE46,
+ 38934 - 11905: 0xEE47,
+ 38935 - 11905: 0xEE48,
+ 38936 - 11905: 0xEE49,
+ 38937 - 11905: 0xEE4A,
+ 38938 - 11905: 0xEE4B,
+ 38939 - 11905: 0xEE4C,
+ 38940 - 11905: 0xEE4D,
+ 38941 - 11905: 0xEE4E,
+ 38942 - 11905: 0xEE4F,
+ 38943 - 11905: 0xEE50,
+ 38944 - 11905: 0xEE51,
+ 38945 - 11905: 0xEE52,
+ 38946 - 11905: 0xEE53,
+ 38947 - 11905: 0xEE54,
+ 38948 - 11905: 0xEE55,
+ 38949 - 11905: 0xEE56,
+ 38950 - 11905: 0xEE57,
+ 38951 - 11905: 0xEE58,
+ 38952 - 11905: 0xEE59,
+ 38953 - 11905: 0xEE5A,
+ 38954 - 11905: 0xEE5B,
+ 38955 - 11905: 0xEE5C,
+ 38956 - 11905: 0xEE5D,
+ 38957 - 11905: 0xEE5E,
+ 38958 - 11905: 0xEE5F,
+ 38959 - 11905: 0xEE60,
+ 38960 - 11905: 0xEE61,
+ 38961 - 11905: 0xEE62,
+ 38962 - 11905: 0xEE63,
+ 38963 - 11905: 0xEE64,
+ 38964 - 11905: 0xEE65,
+ 38965 - 11905: 0xEE66,
+ 38966 - 11905: 0xEE67,
+ 38967 - 11905: 0xEE68,
+ 38968 - 11905: 0xEE69,
+ 38969 - 11905: 0xEE6A,
+ 38970 - 11905: 0xEE6B,
+ 38971 - 11905: 0xEE6C,
+ 38972 - 11905: 0xEE6D,
+ 38973 - 11905: 0xEE6E,
+ 38974 - 11905: 0xEE6F,
+ 38975 - 11905: 0xEE70,
+ 38976 - 11905: 0xEE71,
+ 38977 - 11905: 0xEE72,
+ 38978 - 11905: 0xEE73,
+ 38979 - 11905: 0xEE74,
+ 38980 - 11905: 0xEE75,
+ 38981 - 11905: 0xEE76,
+ 38982 - 11905: 0xEE77,
+ 38983 - 11905: 0xEE78,
+ 38984 - 11905: 0xEE79,
+ 38985 - 11905: 0xEE7A,
+ 38986 - 11905: 0xEE7B,
+ 38987 - 11905: 0xEE7C,
+ 38988 - 11905: 0xEE7D,
+ 38989 - 11905: 0xEE7E,
+ 38990 - 11905: 0xEE80,
+ 38991 - 11905: 0xEE81,
+ 38992 - 11905: 0xEE82,
+ 38993 - 11905: 0xEE83,
+ 38994 - 11905: 0xEE84,
+ 38995 - 11905: 0xEE85,
+ 38996 - 11905: 0xEE86,
+ 38997 - 11905: 0xEE87,
+ 38998 - 11905: 0xEE88,
+ 38999 - 11905: 0xEE89,
+ 39000 - 11905: 0xEE8A,
+ 39001 - 11905: 0xEE8B,
+ 39002 - 11905: 0xEE8C,
+ 39003 - 11905: 0xEE8D,
+ 39004 - 11905: 0xEE8E,
+ 39005 - 11905: 0xEE8F,
+ 39006 - 11905: 0xEE90,
+ 39007 - 11905: 0xEE91,
+ 39008 - 11905: 0xEE92,
+ 39009 - 11905: 0xEE93,
+ 39010 - 11905: 0xEE94,
+ 39011 - 11905: 0xEE95,
+ 39012 - 11905: 0xEE96,
+ 39013 - 11905: 0xEE97,
+ 39014 - 11905: 0xEE98,
+ 39015 - 11905: 0xEE99,
+ 39016 - 11905: 0xEE9A,
+ 39017 - 11905: 0xEE9B,
+ 39018 - 11905: 0xEE9C,
+ 39019 - 11905: 0xEE9D,
+ 39020 - 11905: 0xEE9E,
+ 39021 - 11905: 0xEE9F,
+ 39022 - 11905: 0xEEA0,
+ 39023 - 11905: 0xEF40,
+ 39024 - 11905: 0xEF41,
+ 39025 - 11905: 0xEF42,
+ 39026 - 11905: 0xEF43,
+ 39027 - 11905: 0xEF44,
+ 39028 - 11905: 0xEF45,
+ 39029 - 11905: 0xD2B3,
+ 39030 - 11905: 0xB6A5,
+ 39031 - 11905: 0xC7EA,
+ 39032 - 11905: 0xF1FC,
+ 39033 - 11905: 0xCFEE,
+ 39034 - 11905: 0xCBB3,
+ 39035 - 11905: 0xD0EB,
+ 39036 - 11905: 0xE7EF,
+ 39037 - 11905: 0xCDE7,
+ 39038 - 11905: 0xB9CB,
+ 39039 - 11905: 0xB6D9,
+ 39040 - 11905: 0xF1FD,
+ 39041 - 11905: 0xB0E4,
+ 39042 - 11905: 0xCBCC,
+ 39043 - 11905: 0xF1FE,
+ 39044 - 11905: 0xD4A4,
+ 39045 - 11905: 0xC2AD,
+ 39046 - 11905: 0xC1EC,
+ 39047 - 11905: 0xC6C4,
+ 39048 - 11905: 0xBEB1,
+ 39049 - 11905: 0xF2A1,
+ 39050 - 11905: 0xBCD5,
+ 39051 - 11905: 0xEF46,
+ 39052 - 11905: 0xF2A2,
+ 39053 - 11905: 0xF2A3,
+ 39054 - 11905: 0xEF47,
+ 39055 - 11905: 0xF2A4,
+ 39056 - 11905: 0xD2C3,
+ 39057 - 11905: 0xC6B5,
+ 39058 - 11905: 0xEF48,
+ 39059 - 11905: 0xCDC7,
+ 39060 - 11905: 0xF2A5,
+ 39061 - 11905: 0xEF49,
+ 39062 - 11905: 0xD3B1,
+ 39063 - 11905: 0xBFC5,
+ 39064 - 11905: 0xCCE2,
+ 39065 - 11905: 0xEF4A,
+ 39066 - 11905: 0xF2A6,
+ 39067 - 11905: 0xF2A7,
+ 39068 - 11905: 0xD1D5,
+ 39069 - 11905: 0xB6EE,
+ 39070 - 11905: 0xF2A8,
+ 39071 - 11905: 0xF2A9,
+ 39072 - 11905: 0xB5DF,
+ 39073 - 11905: 0xF2AA,
+ 39074 - 11905: 0xF2AB,
+ 39075 - 11905: 0xEF4B,
+ 39076 - 11905: 0xB2FC,
+ 39077 - 11905: 0xF2AC,
+ 39078 - 11905: 0xF2AD,
+ 39079 - 11905: 0xC8A7,
+ 39080 - 11905: 0xEF4C,
+ 39081 - 11905: 0xEF4D,
+ 39082 - 11905: 0xEF4E,
+ 39083 - 11905: 0xEF4F,
+ 39084 - 11905: 0xEF50,
+ 39085 - 11905: 0xEF51,
+ 39086 - 11905: 0xEF52,
+ 39087 - 11905: 0xEF53,
+ 39088 - 11905: 0xEF54,
+ 39089 - 11905: 0xEF55,
+ 39090 - 11905: 0xEF56,
+ 39091 - 11905: 0xEF57,
+ 39092 - 11905: 0xEF58,
+ 39093 - 11905: 0xEF59,
+ 39094 - 11905: 0xEF5A,
+ 39095 - 11905: 0xEF5B,
+ 39096 - 11905: 0xEF5C,
+ 39097 - 11905: 0xEF5D,
+ 39098 - 11905: 0xEF5E,
+ 39099 - 11905: 0xEF5F,
+ 39100 - 11905: 0xEF60,
+ 39101 - 11905: 0xEF61,
+ 39102 - 11905: 0xEF62,
+ 39103 - 11905: 0xEF63,
+ 39104 - 11905: 0xEF64,
+ 39105 - 11905: 0xEF65,
+ 39106 - 11905: 0xEF66,
+ 39107 - 11905: 0xEF67,
+ 39108 - 11905: 0xEF68,
+ 39109 - 11905: 0xEF69,
+ 39110 - 11905: 0xEF6A,
+ 39111 - 11905: 0xEF6B,
+ 39112 - 11905: 0xEF6C,
+ 39113 - 11905: 0xEF6D,
+ 39114 - 11905: 0xEF6E,
+ 39115 - 11905: 0xEF6F,
+ 39116 - 11905: 0xEF70,
+ 39117 - 11905: 0xEF71,
+ 39118 - 11905: 0xB7E7,
+ 39119 - 11905: 0xEF72,
+ 39120 - 11905: 0xEF73,
+ 39121 - 11905: 0xECA9,
+ 39122 - 11905: 0xECAA,
+ 39123 - 11905: 0xECAB,
+ 39124 - 11905: 0xEF74,
+ 39125 - 11905: 0xECAC,
+ 39126 - 11905: 0xEF75,
+ 39127 - 11905: 0xEF76,
+ 39128 - 11905: 0xC6AE,
+ 39129 - 11905: 0xECAD,
+ 39130 - 11905: 0xECAE,
+ 39131 - 11905: 0xEF77,
+ 39132 - 11905: 0xEF78,
+ 39133 - 11905: 0xEF79,
+ 39134 - 11905: 0xB7C9,
+ 39135 - 11905: 0xCAB3,
+ 39136 - 11905: 0xEF7A,
+ 39137 - 11905: 0xEF7B,
+ 39138 - 11905: 0xEF7C,
+ 39139 - 11905: 0xEF7D,
+ 39140 - 11905: 0xEF7E,
+ 39141 - 11905: 0xEF80,
+ 39142 - 11905: 0xEF81,
+ 39143 - 11905: 0xE2B8,
+ 39144 - 11905: 0xF7CF,
+ 39145 - 11905: 0xEF82,
+ 39146 - 11905: 0xEF83,
+ 39147 - 11905: 0xEF84,
+ 39148 - 11905: 0xEF85,
+ 39149 - 11905: 0xEF86,
+ 39150 - 11905: 0xEF87,
+ 39151 - 11905: 0xEF88,
+ 39152 - 11905: 0xEF89,
+ 39153 - 11905: 0xEF8A,
+ 39154 - 11905: 0xEF8B,
+ 39155 - 11905: 0xEF8C,
+ 39156 - 11905: 0xEF8D,
+ 39157 - 11905: 0xEF8E,
+ 39158 - 11905: 0xEF8F,
+ 39159 - 11905: 0xEF90,
+ 39160 - 11905: 0xEF91,
+ 39161 - 11905: 0xEF92,
+ 39162 - 11905: 0xEF93,
+ 39163 - 11905: 0xEF94,
+ 39164 - 11905: 0xEF95,
+ 39165 - 11905: 0xEF96,
+ 39166 - 11905: 0xEF97,
+ 39167 - 11905: 0xEF98,
+ 39168 - 11905: 0xEF99,
+ 39169 - 11905: 0xEF9A,
+ 39170 - 11905: 0xEF9B,
+ 39171 - 11905: 0xEF9C,
+ 39172 - 11905: 0xEF9D,
+ 39173 - 11905: 0xEF9E,
+ 39174 - 11905: 0xEF9F,
+ 39175 - 11905: 0xEFA0,
+ 39176 - 11905: 0xF040,
+ 39177 - 11905: 0xF041,
+ 39178 - 11905: 0xF042,
+ 39179 - 11905: 0xF043,
+ 39180 - 11905: 0xF044,
+ 39181 - 11905: 0xF7D0,
+ 39182 - 11905: 0xF045,
+ 39183 - 11905: 0xF046,
+ 39184 - 11905: 0xB2CD,
+ 39185 - 11905: 0xF047,
+ 39186 - 11905: 0xF048,
+ 39187 - 11905: 0xF049,
+ 39188 - 11905: 0xF04A,
+ 39189 - 11905: 0xF04B,
+ 39190 - 11905: 0xF04C,
+ 39191 - 11905: 0xF04D,
+ 39192 - 11905: 0xF04E,
+ 39193 - 11905: 0xF04F,
+ 39194 - 11905: 0xF050,
+ 39195 - 11905: 0xF051,
+ 39196 - 11905: 0xF052,
+ 39197 - 11905: 0xF053,
+ 39198 - 11905: 0xF054,
+ 39199 - 11905: 0xF055,
+ 39200 - 11905: 0xF056,
+ 39201 - 11905: 0xF057,
+ 39202 - 11905: 0xF058,
+ 39203 - 11905: 0xF059,
+ 39204 - 11905: 0xF05A,
+ 39205 - 11905: 0xF05B,
+ 39206 - 11905: 0xF05C,
+ 39207 - 11905: 0xF05D,
+ 39208 - 11905: 0xF05E,
+ 39209 - 11905: 0xF05F,
+ 39210 - 11905: 0xF060,
+ 39211 - 11905: 0xF061,
+ 39212 - 11905: 0xF062,
+ 39213 - 11905: 0xF063,
+ 39214 - 11905: 0xF7D1,
+ 39215 - 11905: 0xF064,
+ 39216 - 11905: 0xF065,
+ 39217 - 11905: 0xF066,
+ 39218 - 11905: 0xF067,
+ 39219 - 11905: 0xF068,
+ 39220 - 11905: 0xF069,
+ 39221 - 11905: 0xF06A,
+ 39222 - 11905: 0xF06B,
+ 39223 - 11905: 0xF06C,
+ 39224 - 11905: 0xF06D,
+ 39225 - 11905: 0xF06E,
+ 39226 - 11905: 0xF06F,
+ 39227 - 11905: 0xF070,
+ 39228 - 11905: 0xF071,
+ 39229 - 11905: 0xF072,
+ 39230 - 11905: 0xF073,
+ 39231 - 11905: 0xF074,
+ 39232 - 11905: 0xF075,
+ 39233 - 11905: 0xF076,
+ 39234 - 11905: 0xF077,
+ 39235 - 11905: 0xF078,
+ 39236 - 11905: 0xF079,
+ 39237 - 11905: 0xF07A,
+ 39238 - 11905: 0xF07B,
+ 39239 - 11905: 0xF07C,
+ 39240 - 11905: 0xF07D,
+ 39241 - 11905: 0xF07E,
+ 39242 - 11905: 0xF080,
+ 39243 - 11905: 0xF081,
+ 39244 - 11905: 0xF082,
+ 39245 - 11905: 0xF083,
+ 39246 - 11905: 0xF084,
+ 39247 - 11905: 0xF085,
+ 39248 - 11905: 0xF086,
+ 39249 - 11905: 0xF087,
+ 39250 - 11905: 0xF088,
+ 39251 - 11905: 0xF089,
+ 39252 - 11905: 0xF7D3,
+ 39253 - 11905: 0xF7D2,
+ 39254 - 11905: 0xF08A,
+ 39255 - 11905: 0xF08B,
+ 39256 - 11905: 0xF08C,
+ 39257 - 11905: 0xF08D,
+ 39258 - 11905: 0xF08E,
+ 39259 - 11905: 0xF08F,
+ 39260 - 11905: 0xF090,
+ 39261 - 11905: 0xF091,
+ 39262 - 11905: 0xF092,
+ 39263 - 11905: 0xF093,
+ 39264 - 11905: 0xF094,
+ 39265 - 11905: 0xF095,
+ 39266 - 11905: 0xF096,
+ 39267 - 11905: 0xE2BB,
+ 39268 - 11905: 0xF097,
+ 39269 - 11905: 0xBCA2,
+ 39270 - 11905: 0xF098,
+ 39271 - 11905: 0xE2BC,
+ 39272 - 11905: 0xE2BD,
+ 39273 - 11905: 0xE2BE,
+ 39274 - 11905: 0xE2BF,
+ 39275 - 11905: 0xE2C0,
+ 39276 - 11905: 0xE2C1,
+ 39277 - 11905: 0xB7B9,
+ 39278 - 11905: 0xD2FB,
+ 39279 - 11905: 0xBDA4,
+ 39280 - 11905: 0xCACE,
+ 39281 - 11905: 0xB1A5,
+ 39282 - 11905: 0xCBC7,
+ 39283 - 11905: 0xF099,
+ 39284 - 11905: 0xE2C2,
+ 39285 - 11905: 0xB6FC,
+ 39286 - 11905: 0xC8C4,
+ 39287 - 11905: 0xE2C3,
+ 39288 - 11905: 0xF09A,
+ 39289 - 11905: 0xF09B,
+ 39290 - 11905: 0xBDC8,
+ 39291 - 11905: 0xF09C,
+ 39292 - 11905: 0xB1FD,
+ 39293 - 11905: 0xE2C4,
+ 39294 - 11905: 0xF09D,
+ 39295 - 11905: 0xB6F6,
+ 39296 - 11905: 0xE2C5,
+ 39297 - 11905: 0xC4D9,
+ 39298 - 11905: 0xF09E,
+ 39299 - 11905: 0xF09F,
+ 39300 - 11905: 0xE2C6,
+ 39301 - 11905: 0xCFDA,
+ 39302 - 11905: 0xB9DD,
+ 39303 - 11905: 0xE2C7,
+ 39304 - 11905: 0xC0A1,
+ 39305 - 11905: 0xF0A0,
+ 39306 - 11905: 0xE2C8,
+ 39307 - 11905: 0xB2F6,
+ 39308 - 11905: 0xF140,
+ 39309 - 11905: 0xE2C9,
+ 39310 - 11905: 0xF141,
+ 39311 - 11905: 0xC1F3,
+ 39312 - 11905: 0xE2CA,
+ 39313 - 11905: 0xE2CB,
+ 39314 - 11905: 0xC2F8,
+ 39315 - 11905: 0xE2CC,
+ 39316 - 11905: 0xE2CD,
+ 39317 - 11905: 0xE2CE,
+ 39318 - 11905: 0xCAD7,
+ 39319 - 11905: 0xD8B8,
+ 39320 - 11905: 0xD9E5,
+ 39321 - 11905: 0xCFE3,
+ 39322 - 11905: 0xF142,
+ 39323 - 11905: 0xF143,
+ 39324 - 11905: 0xF144,
+ 39325 - 11905: 0xF145,
+ 39326 - 11905: 0xF146,
+ 39327 - 11905: 0xF147,
+ 39328 - 11905: 0xF148,
+ 39329 - 11905: 0xF149,
+ 39330 - 11905: 0xF14A,
+ 39331 - 11905: 0xF14B,
+ 39332 - 11905: 0xF14C,
+ 39333 - 11905: 0xF0A5,
+ 39334 - 11905: 0xF14D,
+ 39335 - 11905: 0xF14E,
+ 39336 - 11905: 0xDCB0,
+ 39337 - 11905: 0xF14F,
+ 39338 - 11905: 0xF150,
+ 39339 - 11905: 0xF151,
+ 39340 - 11905: 0xF152,
+ 39341 - 11905: 0xF153,
+ 39342 - 11905: 0xF154,
+ 39343 - 11905: 0xF155,
+ 39344 - 11905: 0xF156,
+ 39345 - 11905: 0xF157,
+ 39346 - 11905: 0xF158,
+ 39347 - 11905: 0xF159,
+ 39348 - 11905: 0xF15A,
+ 39349 - 11905: 0xF15B,
+ 39350 - 11905: 0xF15C,
+ 39351 - 11905: 0xF15D,
+ 39352 - 11905: 0xF15E,
+ 39353 - 11905: 0xF15F,
+ 39354 - 11905: 0xF160,
+ 39355 - 11905: 0xF161,
+ 39356 - 11905: 0xF162,
+ 39357 - 11905: 0xF163,
+ 39358 - 11905: 0xF164,
+ 39359 - 11905: 0xF165,
+ 39360 - 11905: 0xF166,
+ 39361 - 11905: 0xF167,
+ 39362 - 11905: 0xF168,
+ 39363 - 11905: 0xF169,
+ 39364 - 11905: 0xF16A,
+ 39365 - 11905: 0xF16B,
+ 39366 - 11905: 0xF16C,
+ 39367 - 11905: 0xF16D,
+ 39368 - 11905: 0xF16E,
+ 39369 - 11905: 0xF16F,
+ 39370 - 11905: 0xF170,
+ 39371 - 11905: 0xF171,
+ 39372 - 11905: 0xF172,
+ 39373 - 11905: 0xF173,
+ 39374 - 11905: 0xF174,
+ 39375 - 11905: 0xF175,
+ 39376 - 11905: 0xF176,
+ 39377 - 11905: 0xF177,
+ 39378 - 11905: 0xF178,
+ 39379 - 11905: 0xF179,
+ 39380 - 11905: 0xF17A,
+ 39381 - 11905: 0xF17B,
+ 39382 - 11905: 0xF17C,
+ 39383 - 11905: 0xF17D,
+ 39384 - 11905: 0xF17E,
+ 39385 - 11905: 0xF180,
+ 39386 - 11905: 0xF181,
+ 39387 - 11905: 0xF182,
+ 39388 - 11905: 0xF183,
+ 39389 - 11905: 0xF184,
+ 39390 - 11905: 0xF185,
+ 39391 - 11905: 0xF186,
+ 39392 - 11905: 0xF187,
+ 39393 - 11905: 0xF188,
+ 39394 - 11905: 0xF189,
+ 39395 - 11905: 0xF18A,
+ 39396 - 11905: 0xF18B,
+ 39397 - 11905: 0xF18C,
+ 39398 - 11905: 0xF18D,
+ 39399 - 11905: 0xF18E,
+ 39400 - 11905: 0xF18F,
+ 39401 - 11905: 0xF190,
+ 39402 - 11905: 0xF191,
+ 39403 - 11905: 0xF192,
+ 39404 - 11905: 0xF193,
+ 39405 - 11905: 0xF194,
+ 39406 - 11905: 0xF195,
+ 39407 - 11905: 0xF196,
+ 39408 - 11905: 0xF197,
+ 39409 - 11905: 0xF198,
+ 39410 - 11905: 0xF199,
+ 39411 - 11905: 0xF19A,
+ 39412 - 11905: 0xF19B,
+ 39413 - 11905: 0xF19C,
+ 39414 - 11905: 0xF19D,
+ 39415 - 11905: 0xF19E,
+ 39416 - 11905: 0xF19F,
+ 39417 - 11905: 0xF1A0,
+ 39418 - 11905: 0xF240,
+ 39419 - 11905: 0xF241,
+ 39420 - 11905: 0xF242,
+ 39421 - 11905: 0xF243,
+ 39422 - 11905: 0xF244,
+ 39423 - 11905: 0xF245,
+ 39424 - 11905: 0xF246,
+ 39425 - 11905: 0xF247,
+ 39426 - 11905: 0xF248,
+ 39427 - 11905: 0xF249,
+ 39428 - 11905: 0xF24A,
+ 39429 - 11905: 0xF24B,
+ 39430 - 11905: 0xF24C,
+ 39431 - 11905: 0xF24D,
+ 39432 - 11905: 0xF24E,
+ 39433 - 11905: 0xF24F,
+ 39434 - 11905: 0xF250,
+ 39435 - 11905: 0xF251,
+ 39436 - 11905: 0xF252,
+ 39437 - 11905: 0xF253,
+ 39438 - 11905: 0xF254,
+ 39439 - 11905: 0xF255,
+ 39440 - 11905: 0xF256,
+ 39441 - 11905: 0xF257,
+ 39442 - 11905: 0xF258,
+ 39443 - 11905: 0xF259,
+ 39444 - 11905: 0xF25A,
+ 39445 - 11905: 0xF25B,
+ 39446 - 11905: 0xF25C,
+ 39447 - 11905: 0xF25D,
+ 39448 - 11905: 0xF25E,
+ 39449 - 11905: 0xF25F,
+ 39450 - 11905: 0xF260,
+ 39451 - 11905: 0xF261,
+ 39452 - 11905: 0xF262,
+ 39453 - 11905: 0xF263,
+ 39454 - 11905: 0xF264,
+ 39455 - 11905: 0xF265,
+ 39456 - 11905: 0xF266,
+ 39457 - 11905: 0xF267,
+ 39458 - 11905: 0xF268,
+ 39459 - 11905: 0xF269,
+ 39460 - 11905: 0xF26A,
+ 39461 - 11905: 0xF26B,
+ 39462 - 11905: 0xF26C,
+ 39463 - 11905: 0xF26D,
+ 39464 - 11905: 0xF26E,
+ 39465 - 11905: 0xF26F,
+ 39466 - 11905: 0xF270,
+ 39467 - 11905: 0xF271,
+ 39468 - 11905: 0xF272,
+ 39469 - 11905: 0xF273,
+ 39470 - 11905: 0xF274,
+ 39471 - 11905: 0xF275,
+ 39472 - 11905: 0xF276,
+ 39473 - 11905: 0xF277,
+ 39474 - 11905: 0xF278,
+ 39475 - 11905: 0xF279,
+ 39476 - 11905: 0xF27A,
+ 39477 - 11905: 0xF27B,
+ 39478 - 11905: 0xF27C,
+ 39479 - 11905: 0xF27D,
+ 39480 - 11905: 0xF27E,
+ 39481 - 11905: 0xF280,
+ 39482 - 11905: 0xF281,
+ 39483 - 11905: 0xF282,
+ 39484 - 11905: 0xF283,
+ 39485 - 11905: 0xF284,
+ 39486 - 11905: 0xF285,
+ 39487 - 11905: 0xF286,
+ 39488 - 11905: 0xF287,
+ 39489 - 11905: 0xF288,
+ 39490 - 11905: 0xF289,
+ 39491 - 11905: 0xF28A,
+ 39492 - 11905: 0xF28B,
+ 39493 - 11905: 0xF28C,
+ 39494 - 11905: 0xF28D,
+ 39495 - 11905: 0xF28E,
+ 39496 - 11905: 0xF28F,
+ 39497 - 11905: 0xF290,
+ 39498 - 11905: 0xF291,
+ 39499 - 11905: 0xF292,
+ 39500 - 11905: 0xF293,
+ 39501 - 11905: 0xF294,
+ 39502 - 11905: 0xF295,
+ 39503 - 11905: 0xF296,
+ 39504 - 11905: 0xF297,
+ 39505 - 11905: 0xF298,
+ 39506 - 11905: 0xF299,
+ 39507 - 11905: 0xF29A,
+ 39508 - 11905: 0xF29B,
+ 39509 - 11905: 0xF29C,
+ 39510 - 11905: 0xF29D,
+ 39511 - 11905: 0xF29E,
+ 39512 - 11905: 0xF29F,
+ 39513 - 11905: 0xF2A0,
+ 39514 - 11905: 0xF340,
+ 39515 - 11905: 0xF341,
+ 39516 - 11905: 0xF342,
+ 39517 - 11905: 0xF343,
+ 39518 - 11905: 0xF344,
+ 39519 - 11905: 0xF345,
+ 39520 - 11905: 0xF346,
+ 39521 - 11905: 0xF347,
+ 39522 - 11905: 0xF348,
+ 39523 - 11905: 0xF349,
+ 39524 - 11905: 0xF34A,
+ 39525 - 11905: 0xF34B,
+ 39526 - 11905: 0xF34C,
+ 39527 - 11905: 0xF34D,
+ 39528 - 11905: 0xF34E,
+ 39529 - 11905: 0xF34F,
+ 39530 - 11905: 0xF350,
+ 39531 - 11905: 0xF351,
+ 39532 - 11905: 0xC2ED,
+ 39533 - 11905: 0xD4A6,
+ 39534 - 11905: 0xCDD4,
+ 39535 - 11905: 0xD1B1,
+ 39536 - 11905: 0xB3DB,
+ 39537 - 11905: 0xC7FD,
+ 39538 - 11905: 0xF352,
+ 39539 - 11905: 0xB2B5,
+ 39540 - 11905: 0xC2BF,
+ 39541 - 11905: 0xE6E0,
+ 39542 - 11905: 0xCABB,
+ 39543 - 11905: 0xE6E1,
+ 39544 - 11905: 0xE6E2,
+ 39545 - 11905: 0xBED4,
+ 39546 - 11905: 0xE6E3,
+ 39547 - 11905: 0xD7A4,
+ 39548 - 11905: 0xCDD5,
+ 39549 - 11905: 0xE6E5,
+ 39550 - 11905: 0xBCDD,
+ 39551 - 11905: 0xE6E4,
+ 39552 - 11905: 0xE6E6,
+ 39553 - 11905: 0xE6E7,
+ 39554 - 11905: 0xC2EE,
+ 39555 - 11905: 0xF353,
+ 39556 - 11905: 0xBDBE,
+ 39557 - 11905: 0xE6E8,
+ 39558 - 11905: 0xC2E6,
+ 39559 - 11905: 0xBAA7,
+ 39560 - 11905: 0xE6E9,
+ 39561 - 11905: 0xF354,
+ 39562 - 11905: 0xE6EA,
+ 39563 - 11905: 0xB3D2,
+ 39564 - 11905: 0xD1E9,
+ 39565 - 11905: 0xF355,
+ 39566 - 11905: 0xF356,
+ 39567 - 11905: 0xBFA5,
+ 39568 - 11905: 0xE6EB,
+ 39569 - 11905: 0xC6EF,
+ 39570 - 11905: 0xE6EC,
+ 39571 - 11905: 0xE6ED,
+ 39572 - 11905: 0xF357,
+ 39573 - 11905: 0xF358,
+ 39574 - 11905: 0xE6EE,
+ 39575 - 11905: 0xC6AD,
+ 39576 - 11905: 0xE6EF,
+ 39577 - 11905: 0xF359,
+ 39578 - 11905: 0xC9A7,
+ 39579 - 11905: 0xE6F0,
+ 39580 - 11905: 0xE6F1,
+ 39581 - 11905: 0xE6F2,
+ 39582 - 11905: 0xE5B9,
+ 39583 - 11905: 0xE6F3,
+ 39584 - 11905: 0xE6F4,
+ 39585 - 11905: 0xC2E2,
+ 39586 - 11905: 0xE6F5,
+ 39587 - 11905: 0xE6F6,
+ 39588 - 11905: 0xD6E8,
+ 39589 - 11905: 0xE6F7,
+ 39590 - 11905: 0xF35A,
+ 39591 - 11905: 0xE6F8,
+ 39592 - 11905: 0xB9C7,
+ 39593 - 11905: 0xF35B,
+ 39594 - 11905: 0xF35C,
+ 39595 - 11905: 0xF35D,
+ 39596 - 11905: 0xF35E,
+ 39597 - 11905: 0xF35F,
+ 39598 - 11905: 0xF360,
+ 39599 - 11905: 0xF361,
+ 39600 - 11905: 0xF7BB,
+ 39601 - 11905: 0xF7BA,
+ 39602 - 11905: 0xF362,
+ 39603 - 11905: 0xF363,
+ 39604 - 11905: 0xF364,
+ 39605 - 11905: 0xF365,
+ 39606 - 11905: 0xF7BE,
+ 39607 - 11905: 0xF7BC,
+ 39608 - 11905: 0xBAA1,
+ 39609 - 11905: 0xF366,
+ 39610 - 11905: 0xF7BF,
+ 39611 - 11905: 0xF367,
+ 39612 - 11905: 0xF7C0,
+ 39613 - 11905: 0xF368,
+ 39614 - 11905: 0xF369,
+ 39615 - 11905: 0xF36A,
+ 39616 - 11905: 0xF7C2,
+ 39617 - 11905: 0xF7C1,
+ 39618 - 11905: 0xF7C4,
+ 39619 - 11905: 0xF36B,
+ 39620 - 11905: 0xF36C,
+ 39621 - 11905: 0xF7C3,
+ 39622 - 11905: 0xF36D,
+ 39623 - 11905: 0xF36E,
+ 39624 - 11905: 0xF36F,
+ 39625 - 11905: 0xF370,
+ 39626 - 11905: 0xF371,
+ 39627 - 11905: 0xF7C5,
+ 39628 - 11905: 0xF7C6,
+ 39629 - 11905: 0xF372,
+ 39630 - 11905: 0xF373,
+ 39631 - 11905: 0xF374,
+ 39632 - 11905: 0xF375,
+ 39633 - 11905: 0xF7C7,
+ 39634 - 11905: 0xF376,
+ 39635 - 11905: 0xCBE8,
+ 39636 - 11905: 0xF377,
+ 39637 - 11905: 0xF378,
+ 39638 - 11905: 0xF379,
+ 39639 - 11905: 0xF37A,
+ 39640 - 11905: 0xB8DF,
+ 39641 - 11905: 0xF37B,
+ 39642 - 11905: 0xF37C,
+ 39643 - 11905: 0xF37D,
+ 39644 - 11905: 0xF37E,
+ 39645 - 11905: 0xF380,
+ 39646 - 11905: 0xF381,
+ 39647 - 11905: 0xF7D4,
+ 39648 - 11905: 0xF382,
+ 39649 - 11905: 0xF7D5,
+ 39650 - 11905: 0xF383,
+ 39651 - 11905: 0xF384,
+ 39652 - 11905: 0xF385,
+ 39653 - 11905: 0xF386,
+ 39654 - 11905: 0xF7D6,
+ 39655 - 11905: 0xF387,
+ 39656 - 11905: 0xF388,
+ 39657 - 11905: 0xF389,
+ 39658 - 11905: 0xF38A,
+ 39659 - 11905: 0xF7D8,
+ 39660 - 11905: 0xF38B,
+ 39661 - 11905: 0xF7DA,
+ 39662 - 11905: 0xF38C,
+ 39663 - 11905: 0xF7D7,
+ 39664 - 11905: 0xF38D,
+ 39665 - 11905: 0xF38E,
+ 39666 - 11905: 0xF38F,
+ 39667 - 11905: 0xF390,
+ 39668 - 11905: 0xF391,
+ 39669 - 11905: 0xF392,
+ 39670 - 11905: 0xF393,
+ 39671 - 11905: 0xF394,
+ 39672 - 11905: 0xF395,
+ 39673 - 11905: 0xF7DB,
+ 39674 - 11905: 0xF396,
+ 39675 - 11905: 0xF7D9,
+ 39676 - 11905: 0xF397,
+ 39677 - 11905: 0xF398,
+ 39678 - 11905: 0xF399,
+ 39679 - 11905: 0xF39A,
+ 39680 - 11905: 0xF39B,
+ 39681 - 11905: 0xF39C,
+ 39682 - 11905: 0xF39D,
+ 39683 - 11905: 0xD7D7,
+ 39684 - 11905: 0xF39E,
+ 39685 - 11905: 0xF39F,
+ 39686 - 11905: 0xF3A0,
+ 39687 - 11905: 0xF440,
+ 39688 - 11905: 0xF7DC,
+ 39689 - 11905: 0xF441,
+ 39690 - 11905: 0xF442,
+ 39691 - 11905: 0xF443,
+ 39692 - 11905: 0xF444,
+ 39693 - 11905: 0xF445,
+ 39694 - 11905: 0xF446,
+ 39695 - 11905: 0xF7DD,
+ 39696 - 11905: 0xF447,
+ 39697 - 11905: 0xF448,
+ 39698 - 11905: 0xF449,
+ 39699 - 11905: 0xF7DE,
+ 39700 - 11905: 0xF44A,
+ 39701 - 11905: 0xF44B,
+ 39702 - 11905: 0xF44C,
+ 39703 - 11905: 0xF44D,
+ 39704 - 11905: 0xF44E,
+ 39705 - 11905: 0xF44F,
+ 39706 - 11905: 0xF450,
+ 39707 - 11905: 0xF451,
+ 39708 - 11905: 0xF452,
+ 39709 - 11905: 0xF453,
+ 39710 - 11905: 0xF454,
+ 39711 - 11905: 0xF7DF,
+ 39712 - 11905: 0xF455,
+ 39713 - 11905: 0xF456,
+ 39714 - 11905: 0xF457,
+ 39715 - 11905: 0xF7E0,
+ 39716 - 11905: 0xF458,
+ 39717 - 11905: 0xF459,
+ 39718 - 11905: 0xF45A,
+ 39719 - 11905: 0xF45B,
+ 39720 - 11905: 0xF45C,
+ 39721 - 11905: 0xF45D,
+ 39722 - 11905: 0xF45E,
+ 39723 - 11905: 0xF45F,
+ 39724 - 11905: 0xF460,
+ 39725 - 11905: 0xF461,
+ 39726 - 11905: 0xF462,
+ 39727 - 11905: 0xDBCB,
+ 39728 - 11905: 0xF463,
+ 39729 - 11905: 0xF464,
+ 39730 - 11905: 0xD8AA,
+ 39731 - 11905: 0xF465,
+ 39732 - 11905: 0xF466,
+ 39733 - 11905: 0xF467,
+ 39734 - 11905: 0xF468,
+ 39735 - 11905: 0xF469,
+ 39736 - 11905: 0xF46A,
+ 39737 - 11905: 0xF46B,
+ 39738 - 11905: 0xF46C,
+ 39739 - 11905: 0xE5F7,
+ 39740 - 11905: 0xB9ED,
+ 39741 - 11905: 0xF46D,
+ 39742 - 11905: 0xF46E,
+ 39743 - 11905: 0xF46F,
+ 39744 - 11905: 0xF470,
+ 39745 - 11905: 0xBFFD,
+ 39746 - 11905: 0xBBEA,
+ 39747 - 11905: 0xF7C9,
+ 39748 - 11905: 0xC6C7,
+ 39749 - 11905: 0xF7C8,
+ 39750 - 11905: 0xF471,
+ 39751 - 11905: 0xF7CA,
+ 39752 - 11905: 0xF7CC,
+ 39753 - 11905: 0xF7CB,
+ 39754 - 11905: 0xF472,
+ 39755 - 11905: 0xF473,
+ 39756 - 11905: 0xF474,
+ 39757 - 11905: 0xF7CD,
+ 39758 - 11905: 0xF475,
+ 39759 - 11905: 0xCEBA,
+ 39760 - 11905: 0xF476,
+ 39761 - 11905: 0xF7CE,
+ 39762 - 11905: 0xF477,
+ 39763 - 11905: 0xF478,
+ 39764 - 11905: 0xC4A7,
+ 39765 - 11905: 0xF479,
+ 39766 - 11905: 0xF47A,
+ 39767 - 11905: 0xF47B,
+ 39768 - 11905: 0xF47C,
+ 39769 - 11905: 0xF47D,
+ 39770 - 11905: 0xF47E,
+ 39771 - 11905: 0xF480,
+ 39772 - 11905: 0xF481,
+ 39773 - 11905: 0xF482,
+ 39774 - 11905: 0xF483,
+ 39775 - 11905: 0xF484,
+ 39776 - 11905: 0xF485,
+ 39777 - 11905: 0xF486,
+ 39778 - 11905: 0xF487,
+ 39779 - 11905: 0xF488,
+ 39780 - 11905: 0xF489,
+ 39781 - 11905: 0xF48A,
+ 39782 - 11905: 0xF48B,
+ 39783 - 11905: 0xF48C,
+ 39784 - 11905: 0xF48D,
+ 39785 - 11905: 0xF48E,
+ 39786 - 11905: 0xF48F,
+ 39787 - 11905: 0xF490,
+ 39788 - 11905: 0xF491,
+ 39789 - 11905: 0xF492,
+ 39790 - 11905: 0xF493,
+ 39791 - 11905: 0xF494,
+ 39792 - 11905: 0xF495,
+ 39793 - 11905: 0xF496,
+ 39794 - 11905: 0xF497,
+ 39795 - 11905: 0xF498,
+ 39796 - 11905: 0xF499,
+ 39797 - 11905: 0xF49A,
+ 39798 - 11905: 0xF49B,
+ 39799 - 11905: 0xF49C,
+ 39800 - 11905: 0xF49D,
+ 39801 - 11905: 0xF49E,
+ 39802 - 11905: 0xF49F,
+ 39803 - 11905: 0xF4A0,
+ 39804 - 11905: 0xF540,
+ 39805 - 11905: 0xF541,
+ 39806 - 11905: 0xF542,
+ 39807 - 11905: 0xF543,
+ 39808 - 11905: 0xF544,
+ 39809 - 11905: 0xF545,
+ 39810 - 11905: 0xF546,
+ 39811 - 11905: 0xF547,
+ 39812 - 11905: 0xF548,
+ 39813 - 11905: 0xF549,
+ 39814 - 11905: 0xF54A,
+ 39815 - 11905: 0xF54B,
+ 39816 - 11905: 0xF54C,
+ 39817 - 11905: 0xF54D,
+ 39818 - 11905: 0xF54E,
+ 39819 - 11905: 0xF54F,
+ 39820 - 11905: 0xF550,
+ 39821 - 11905: 0xF551,
+ 39822 - 11905: 0xF552,
+ 39823 - 11905: 0xF553,
+ 39824 - 11905: 0xF554,
+ 39825 - 11905: 0xF555,
+ 39826 - 11905: 0xF556,
+ 39827 - 11905: 0xF557,
+ 39828 - 11905: 0xF558,
+ 39829 - 11905: 0xF559,
+ 39830 - 11905: 0xF55A,
+ 39831 - 11905: 0xF55B,
+ 39832 - 11905: 0xF55C,
+ 39833 - 11905: 0xF55D,
+ 39834 - 11905: 0xF55E,
+ 39835 - 11905: 0xF55F,
+ 39836 - 11905: 0xF560,
+ 39837 - 11905: 0xF561,
+ 39838 - 11905: 0xF562,
+ 39839 - 11905: 0xF563,
+ 39840 - 11905: 0xF564,
+ 39841 - 11905: 0xF565,
+ 39842 - 11905: 0xF566,
+ 39843 - 11905: 0xF567,
+ 39844 - 11905: 0xF568,
+ 39845 - 11905: 0xF569,
+ 39846 - 11905: 0xF56A,
+ 39847 - 11905: 0xF56B,
+ 39848 - 11905: 0xF56C,
+ 39849 - 11905: 0xF56D,
+ 39850 - 11905: 0xF56E,
+ 39851 - 11905: 0xF56F,
+ 39852 - 11905: 0xF570,
+ 39853 - 11905: 0xF571,
+ 39854 - 11905: 0xF572,
+ 39855 - 11905: 0xF573,
+ 39856 - 11905: 0xF574,
+ 39857 - 11905: 0xF575,
+ 39858 - 11905: 0xF576,
+ 39859 - 11905: 0xF577,
+ 39860 - 11905: 0xF578,
+ 39861 - 11905: 0xF579,
+ 39862 - 11905: 0xF57A,
+ 39863 - 11905: 0xF57B,
+ 39864 - 11905: 0xF57C,
+ 39865 - 11905: 0xF57D,
+ 39866 - 11905: 0xF57E,
+ 39867 - 11905: 0xF580,
+ 39868 - 11905: 0xF581,
+ 39869 - 11905: 0xF582,
+ 39870 - 11905: 0xF583,
+ 39871 - 11905: 0xF584,
+ 39872 - 11905: 0xF585,
+ 39873 - 11905: 0xF586,
+ 39874 - 11905: 0xF587,
+ 39875 - 11905: 0xF588,
+ 39876 - 11905: 0xF589,
+ 39877 - 11905: 0xF58A,
+ 39878 - 11905: 0xF58B,
+ 39879 - 11905: 0xF58C,
+ 39880 - 11905: 0xF58D,
+ 39881 - 11905: 0xF58E,
+ 39882 - 11905: 0xF58F,
+ 39883 - 11905: 0xF590,
+ 39884 - 11905: 0xF591,
+ 39885 - 11905: 0xF592,
+ 39886 - 11905: 0xF593,
+ 39887 - 11905: 0xF594,
+ 39888 - 11905: 0xF595,
+ 39889 - 11905: 0xF596,
+ 39890 - 11905: 0xF597,
+ 39891 - 11905: 0xF598,
+ 39892 - 11905: 0xF599,
+ 39893 - 11905: 0xF59A,
+ 39894 - 11905: 0xF59B,
+ 39895 - 11905: 0xF59C,
+ 39896 - 11905: 0xF59D,
+ 39897 - 11905: 0xF59E,
+ 39898 - 11905: 0xF59F,
+ 39899 - 11905: 0xF5A0,
+ 39900 - 11905: 0xF640,
+ 39901 - 11905: 0xF641,
+ 39902 - 11905: 0xF642,
+ 39903 - 11905: 0xF643,
+ 39904 - 11905: 0xF644,
+ 39905 - 11905: 0xF645,
+ 39906 - 11905: 0xF646,
+ 39907 - 11905: 0xF647,
+ 39908 - 11905: 0xF648,
+ 39909 - 11905: 0xF649,
+ 39910 - 11905: 0xF64A,
+ 39911 - 11905: 0xF64B,
+ 39912 - 11905: 0xF64C,
+ 39913 - 11905: 0xF64D,
+ 39914 - 11905: 0xF64E,
+ 39915 - 11905: 0xF64F,
+ 39916 - 11905: 0xF650,
+ 39917 - 11905: 0xF651,
+ 39918 - 11905: 0xF652,
+ 39919 - 11905: 0xF653,
+ 39920 - 11905: 0xF654,
+ 39921 - 11905: 0xF655,
+ 39922 - 11905: 0xF656,
+ 39923 - 11905: 0xF657,
+ 39924 - 11905: 0xF658,
+ 39925 - 11905: 0xF659,
+ 39926 - 11905: 0xF65A,
+ 39927 - 11905: 0xF65B,
+ 39928 - 11905: 0xF65C,
+ 39929 - 11905: 0xF65D,
+ 39930 - 11905: 0xF65E,
+ 39931 - 11905: 0xF65F,
+ 39932 - 11905: 0xF660,
+ 39933 - 11905: 0xF661,
+ 39934 - 11905: 0xF662,
+ 39935 - 11905: 0xF663,
+ 39936 - 11905: 0xF664,
+ 39937 - 11905: 0xF665,
+ 39938 - 11905: 0xF666,
+ 39939 - 11905: 0xF667,
+ 39940 - 11905: 0xF668,
+ 39941 - 11905: 0xF669,
+ 39942 - 11905: 0xF66A,
+ 39943 - 11905: 0xF66B,
+ 39944 - 11905: 0xF66C,
+ 39945 - 11905: 0xF66D,
+ 39946 - 11905: 0xF66E,
+ 39947 - 11905: 0xF66F,
+ 39948 - 11905: 0xF670,
+ 39949 - 11905: 0xF671,
+ 39950 - 11905: 0xF672,
+ 39951 - 11905: 0xF673,
+ 39952 - 11905: 0xF674,
+ 39953 - 11905: 0xF675,
+ 39954 - 11905: 0xF676,
+ 39955 - 11905: 0xF677,
+ 39956 - 11905: 0xF678,
+ 39957 - 11905: 0xF679,
+ 39958 - 11905: 0xF67A,
+ 39959 - 11905: 0xF67B,
+ 39960 - 11905: 0xF67C,
+ 39961 - 11905: 0xF67D,
+ 39962 - 11905: 0xF67E,
+ 39963 - 11905: 0xF680,
+ 39964 - 11905: 0xF681,
+ 39965 - 11905: 0xF682,
+ 39966 - 11905: 0xF683,
+ 39967 - 11905: 0xF684,
+ 39968 - 11905: 0xF685,
+ 39969 - 11905: 0xF686,
+ 39970 - 11905: 0xF687,
+ 39971 - 11905: 0xF688,
+ 39972 - 11905: 0xF689,
+ 39973 - 11905: 0xF68A,
+ 39974 - 11905: 0xF68B,
+ 39975 - 11905: 0xF68C,
+ 39976 - 11905: 0xF68D,
+ 39977 - 11905: 0xF68E,
+ 39978 - 11905: 0xF68F,
+ 39979 - 11905: 0xF690,
+ 39980 - 11905: 0xF691,
+ 39981 - 11905: 0xF692,
+ 39982 - 11905: 0xF693,
+ 39983 - 11905: 0xF694,
+ 39984 - 11905: 0xF695,
+ 39985 - 11905: 0xF696,
+ 39986 - 11905: 0xF697,
+ 39987 - 11905: 0xF698,
+ 39988 - 11905: 0xF699,
+ 39989 - 11905: 0xF69A,
+ 39990 - 11905: 0xF69B,
+ 39991 - 11905: 0xF69C,
+ 39992 - 11905: 0xF69D,
+ 39993 - 11905: 0xF69E,
+ 39994 - 11905: 0xF69F,
+ 39995 - 11905: 0xF6A0,
+ 39996 - 11905: 0xF740,
+ 39997 - 11905: 0xF741,
+ 39998 - 11905: 0xF742,
+ 39999 - 11905: 0xF743,
+ 40000 - 11905: 0xF744,
+ 40001 - 11905: 0xF745,
+ 40002 - 11905: 0xF746,
+ 40003 - 11905: 0xF747,
+ 40004 - 11905: 0xF748,
+ 40005 - 11905: 0xF749,
+ 40006 - 11905: 0xF74A,
+ 40007 - 11905: 0xF74B,
+ 40008 - 11905: 0xF74C,
+ 40009 - 11905: 0xF74D,
+ 40010 - 11905: 0xF74E,
+ 40011 - 11905: 0xF74F,
+ 40012 - 11905: 0xF750,
+ 40013 - 11905: 0xF751,
+ 40014 - 11905: 0xF752,
+ 40015 - 11905: 0xF753,
+ 40016 - 11905: 0xF754,
+ 40017 - 11905: 0xF755,
+ 40018 - 11905: 0xF756,
+ 40019 - 11905: 0xF757,
+ 40020 - 11905: 0xF758,
+ 40021 - 11905: 0xF759,
+ 40022 - 11905: 0xF75A,
+ 40023 - 11905: 0xF75B,
+ 40024 - 11905: 0xF75C,
+ 40025 - 11905: 0xF75D,
+ 40026 - 11905: 0xF75E,
+ 40027 - 11905: 0xF75F,
+ 40028 - 11905: 0xF760,
+ 40029 - 11905: 0xF761,
+ 40030 - 11905: 0xF762,
+ 40031 - 11905: 0xF763,
+ 40032 - 11905: 0xF764,
+ 40033 - 11905: 0xF765,
+ 40034 - 11905: 0xF766,
+ 40035 - 11905: 0xF767,
+ 40036 - 11905: 0xF768,
+ 40037 - 11905: 0xF769,
+ 40038 - 11905: 0xF76A,
+ 40039 - 11905: 0xF76B,
+ 40040 - 11905: 0xF76C,
+ 40041 - 11905: 0xF76D,
+ 40042 - 11905: 0xF76E,
+ 40043 - 11905: 0xF76F,
+ 40044 - 11905: 0xF770,
+ 40045 - 11905: 0xF771,
+ 40046 - 11905: 0xF772,
+ 40047 - 11905: 0xF773,
+ 40048 - 11905: 0xF774,
+ 40049 - 11905: 0xF775,
+ 40050 - 11905: 0xF776,
+ 40051 - 11905: 0xF777,
+ 40052 - 11905: 0xF778,
+ 40053 - 11905: 0xF779,
+ 40054 - 11905: 0xF77A,
+ 40055 - 11905: 0xF77B,
+ 40056 - 11905: 0xF77C,
+ 40057 - 11905: 0xF77D,
+ 40058 - 11905: 0xF77E,
+ 40059 - 11905: 0xF780,
+ 40060 - 11905: 0xD3E3,
+ 40061 - 11905: 0xF781,
+ 40062 - 11905: 0xF782,
+ 40063 - 11905: 0xF6CF,
+ 40064 - 11905: 0xF783,
+ 40065 - 11905: 0xC2B3,
+ 40066 - 11905: 0xF6D0,
+ 40067 - 11905: 0xF784,
+ 40068 - 11905: 0xF785,
+ 40069 - 11905: 0xF6D1,
+ 40070 - 11905: 0xF6D2,
+ 40071 - 11905: 0xF6D3,
+ 40072 - 11905: 0xF6D4,
+ 40073 - 11905: 0xF786,
+ 40074 - 11905: 0xF787,
+ 40075 - 11905: 0xF6D6,
+ 40076 - 11905: 0xF788,
+ 40077 - 11905: 0xB1AB,
+ 40078 - 11905: 0xF6D7,
+ 40079 - 11905: 0xF789,
+ 40080 - 11905: 0xF6D8,
+ 40081 - 11905: 0xF6D9,
+ 40082 - 11905: 0xF6DA,
+ 40083 - 11905: 0xF78A,
+ 40084 - 11905: 0xF6DB,
+ 40085 - 11905: 0xF6DC,
+ 40086 - 11905: 0xF78B,
+ 40087 - 11905: 0xF78C,
+ 40088 - 11905: 0xF78D,
+ 40089 - 11905: 0xF78E,
+ 40090 - 11905: 0xF6DD,
+ 40091 - 11905: 0xF6DE,
+ 40092 - 11905: 0xCFCA,
+ 40093 - 11905: 0xF78F,
+ 40094 - 11905: 0xF6DF,
+ 40095 - 11905: 0xF6E0,
+ 40096 - 11905: 0xF6E1,
+ 40097 - 11905: 0xF6E2,
+ 40098 - 11905: 0xF6E3,
+ 40099 - 11905: 0xF6E4,
+ 40100 - 11905: 0xC0F0,
+ 40101 - 11905: 0xF6E5,
+ 40102 - 11905: 0xF6E6,
+ 40103 - 11905: 0xF6E7,
+ 40104 - 11905: 0xF6E8,
+ 40105 - 11905: 0xF6E9,
+ 40106 - 11905: 0xF790,
+ 40107 - 11905: 0xF6EA,
+ 40108 - 11905: 0xF791,
+ 40109 - 11905: 0xF6EB,
+ 40110 - 11905: 0xF6EC,
+ 40111 - 11905: 0xF792,
+ 40112 - 11905: 0xF6ED,
+ 40113 - 11905: 0xF6EE,
+ 40114 - 11905: 0xF6EF,
+ 40115 - 11905: 0xF6F0,
+ 40116 - 11905: 0xF6F1,
+ 40117 - 11905: 0xF6F2,
+ 40118 - 11905: 0xF6F3,
+ 40119 - 11905: 0xF6F4,
+ 40120 - 11905: 0xBEA8,
+ 40121 - 11905: 0xF793,
+ 40122 - 11905: 0xF6F5,
+ 40123 - 11905: 0xF6F6,
+ 40124 - 11905: 0xF6F7,
+ 40125 - 11905: 0xF6F8,
+ 40126 - 11905: 0xF794,
+ 40127 - 11905: 0xF795,
+ 40128 - 11905: 0xF796,
+ 40129 - 11905: 0xF797,
+ 40130 - 11905: 0xF798,
+ 40131 - 11905: 0xC8FA,
+ 40132 - 11905: 0xF6F9,
+ 40133 - 11905: 0xF6FA,
+ 40134 - 11905: 0xF6FB,
+ 40135 - 11905: 0xF6FC,
+ 40136 - 11905: 0xF799,
+ 40137 - 11905: 0xF79A,
+ 40138 - 11905: 0xF6FD,
+ 40139 - 11905: 0xF6FE,
+ 40140 - 11905: 0xF7A1,
+ 40141 - 11905: 0xF7A2,
+ 40142 - 11905: 0xF7A3,
+ 40143 - 11905: 0xF7A4,
+ 40144 - 11905: 0xF7A5,
+ 40145 - 11905: 0xF79B,
+ 40146 - 11905: 0xF79C,
+ 40147 - 11905: 0xF7A6,
+ 40148 - 11905: 0xF7A7,
+ 40149 - 11905: 0xF7A8,
+ 40150 - 11905: 0xB1EE,
+ 40151 - 11905: 0xF7A9,
+ 40152 - 11905: 0xF7AA,
+ 40153 - 11905: 0xF7AB,
+ 40154 - 11905: 0xF79D,
+ 40155 - 11905: 0xF79E,
+ 40156 - 11905: 0xF7AC,
+ 40157 - 11905: 0xF7AD,
+ 40158 - 11905: 0xC1DB,
+ 40159 - 11905: 0xF7AE,
+ 40160 - 11905: 0xF79F,
+ 40161 - 11905: 0xF7A0,
+ 40162 - 11905: 0xF7AF,
+ 40163 - 11905: 0xF840,
+ 40164 - 11905: 0xF841,
+ 40165 - 11905: 0xF842,
+ 40166 - 11905: 0xF843,
+ 40167 - 11905: 0xF844,
+ 40168 - 11905: 0xF845,
+ 40169 - 11905: 0xF846,
+ 40170 - 11905: 0xF847,
+ 40171 - 11905: 0xF848,
+ 40172 - 11905: 0xF849,
+ 40173 - 11905: 0xF84A,
+ 40174 - 11905: 0xF84B,
+ 40175 - 11905: 0xF84C,
+ 40176 - 11905: 0xF84D,
+ 40177 - 11905: 0xF84E,
+ 40178 - 11905: 0xF84F,
+ 40179 - 11905: 0xF850,
+ 40180 - 11905: 0xF851,
+ 40181 - 11905: 0xF852,
+ 40182 - 11905: 0xF853,
+ 40183 - 11905: 0xF854,
+ 40184 - 11905: 0xF855,
+ 40185 - 11905: 0xF856,
+ 40186 - 11905: 0xF857,
+ 40187 - 11905: 0xF858,
+ 40188 - 11905: 0xF859,
+ 40189 - 11905: 0xF85A,
+ 40190 - 11905: 0xF85B,
+ 40191 - 11905: 0xF85C,
+ 40192 - 11905: 0xF85D,
+ 40193 - 11905: 0xF85E,
+ 40194 - 11905: 0xF85F,
+ 40195 - 11905: 0xF860,
+ 40196 - 11905: 0xF861,
+ 40197 - 11905: 0xF862,
+ 40198 - 11905: 0xF863,
+ 40199 - 11905: 0xF864,
+ 40200 - 11905: 0xF865,
+ 40201 - 11905: 0xF866,
+ 40202 - 11905: 0xF867,
+ 40203 - 11905: 0xF868,
+ 40204 - 11905: 0xF869,
+ 40205 - 11905: 0xF86A,
+ 40206 - 11905: 0xF86B,
+ 40207 - 11905: 0xF86C,
+ 40208 - 11905: 0xF86D,
+ 40209 - 11905: 0xF86E,
+ 40210 - 11905: 0xF86F,
+ 40211 - 11905: 0xF870,
+ 40212 - 11905: 0xF871,
+ 40213 - 11905: 0xF872,
+ 40214 - 11905: 0xF873,
+ 40215 - 11905: 0xF874,
+ 40216 - 11905: 0xF875,
+ 40217 - 11905: 0xF876,
+ 40218 - 11905: 0xF877,
+ 40219 - 11905: 0xF878,
+ 40220 - 11905: 0xF879,
+ 40221 - 11905: 0xF87A,
+ 40222 - 11905: 0xF87B,
+ 40223 - 11905: 0xF87C,
+ 40224 - 11905: 0xF87D,
+ 40225 - 11905: 0xF87E,
+ 40226 - 11905: 0xF880,
+ 40227 - 11905: 0xF881,
+ 40228 - 11905: 0xF882,
+ 40229 - 11905: 0xF883,
+ 40230 - 11905: 0xF884,
+ 40231 - 11905: 0xF885,
+ 40232 - 11905: 0xF886,
+ 40233 - 11905: 0xF887,
+ 40234 - 11905: 0xF888,
+ 40235 - 11905: 0xF889,
+ 40236 - 11905: 0xF88A,
+ 40237 - 11905: 0xF88B,
+ 40238 - 11905: 0xF88C,
+ 40239 - 11905: 0xF88D,
+ 40240 - 11905: 0xF88E,
+ 40241 - 11905: 0xF88F,
+ 40242 - 11905: 0xF890,
+ 40243 - 11905: 0xF891,
+ 40244 - 11905: 0xF892,
+ 40245 - 11905: 0xF893,
+ 40246 - 11905: 0xF894,
+ 40247 - 11905: 0xF895,
+ 40248 - 11905: 0xF896,
+ 40249 - 11905: 0xF897,
+ 40250 - 11905: 0xF898,
+ 40251 - 11905: 0xF899,
+ 40252 - 11905: 0xF89A,
+ 40253 - 11905: 0xF89B,
+ 40254 - 11905: 0xF89C,
+ 40255 - 11905: 0xF89D,
+ 40256 - 11905: 0xF89E,
+ 40257 - 11905: 0xF89F,
+ 40258 - 11905: 0xF8A0,
+ 40259 - 11905: 0xF940,
+ 40260 - 11905: 0xF941,
+ 40261 - 11905: 0xF942,
+ 40262 - 11905: 0xF943,
+ 40263 - 11905: 0xF944,
+ 40264 - 11905: 0xF945,
+ 40265 - 11905: 0xF946,
+ 40266 - 11905: 0xF947,
+ 40267 - 11905: 0xF948,
+ 40268 - 11905: 0xF949,
+ 40269 - 11905: 0xF94A,
+ 40270 - 11905: 0xF94B,
+ 40271 - 11905: 0xF94C,
+ 40272 - 11905: 0xF94D,
+ 40273 - 11905: 0xF94E,
+ 40274 - 11905: 0xF94F,
+ 40275 - 11905: 0xF950,
+ 40276 - 11905: 0xF951,
+ 40277 - 11905: 0xF952,
+ 40278 - 11905: 0xF953,
+ 40279 - 11905: 0xF954,
+ 40280 - 11905: 0xF955,
+ 40281 - 11905: 0xF956,
+ 40282 - 11905: 0xF957,
+ 40283 - 11905: 0xF958,
+ 40284 - 11905: 0xF959,
+ 40285 - 11905: 0xF95A,
+ 40286 - 11905: 0xF95B,
+ 40287 - 11905: 0xF95C,
+ 40288 - 11905: 0xF95D,
+ 40289 - 11905: 0xF95E,
+ 40290 - 11905: 0xF95F,
+ 40291 - 11905: 0xF960,
+ 40292 - 11905: 0xF961,
+ 40293 - 11905: 0xF962,
+ 40294 - 11905: 0xF963,
+ 40295 - 11905: 0xF964,
+ 40296 - 11905: 0xF965,
+ 40297 - 11905: 0xF966,
+ 40298 - 11905: 0xF967,
+ 40299 - 11905: 0xF968,
+ 40300 - 11905: 0xF969,
+ 40301 - 11905: 0xF96A,
+ 40302 - 11905: 0xF96B,
+ 40303 - 11905: 0xF96C,
+ 40304 - 11905: 0xF96D,
+ 40305 - 11905: 0xF96E,
+ 40306 - 11905: 0xF96F,
+ 40307 - 11905: 0xF970,
+ 40308 - 11905: 0xF971,
+ 40309 - 11905: 0xF972,
+ 40310 - 11905: 0xF973,
+ 40311 - 11905: 0xF974,
+ 40312 - 11905: 0xF975,
+ 40313 - 11905: 0xF976,
+ 40314 - 11905: 0xF977,
+ 40315 - 11905: 0xF978,
+ 40316 - 11905: 0xF979,
+ 40317 - 11905: 0xF97A,
+ 40318 - 11905: 0xF97B,
+ 40319 - 11905: 0xF97C,
+ 40320 - 11905: 0xF97D,
+ 40321 - 11905: 0xF97E,
+ 40322 - 11905: 0xF980,
+ 40323 - 11905: 0xF981,
+ 40324 - 11905: 0xF982,
+ 40325 - 11905: 0xF983,
+ 40326 - 11905: 0xF984,
+ 40327 - 11905: 0xF985,
+ 40328 - 11905: 0xF986,
+ 40329 - 11905: 0xF987,
+ 40330 - 11905: 0xF988,
+ 40331 - 11905: 0xF989,
+ 40332 - 11905: 0xF98A,
+ 40333 - 11905: 0xF98B,
+ 40334 - 11905: 0xF98C,
+ 40335 - 11905: 0xF98D,
+ 40336 - 11905: 0xF98E,
+ 40337 - 11905: 0xF98F,
+ 40338 - 11905: 0xF990,
+ 40339 - 11905: 0xF991,
+ 40340 - 11905: 0xF992,
+ 40341 - 11905: 0xF993,
+ 40342 - 11905: 0xF994,
+ 40343 - 11905: 0xF995,
+ 40344 - 11905: 0xF996,
+ 40345 - 11905: 0xF997,
+ 40346 - 11905: 0xF998,
+ 40347 - 11905: 0xF999,
+ 40348 - 11905: 0xF99A,
+ 40349 - 11905: 0xF99B,
+ 40350 - 11905: 0xF99C,
+ 40351 - 11905: 0xF99D,
+ 40352 - 11905: 0xF99E,
+ 40353 - 11905: 0xF99F,
+ 40354 - 11905: 0xF9A0,
+ 40355 - 11905: 0xFA40,
+ 40356 - 11905: 0xFA41,
+ 40357 - 11905: 0xFA42,
+ 40358 - 11905: 0xFA43,
+ 40359 - 11905: 0xFA44,
+ 40360 - 11905: 0xFA45,
+ 40361 - 11905: 0xFA46,
+ 40362 - 11905: 0xFA47,
+ 40363 - 11905: 0xFA48,
+ 40364 - 11905: 0xFA49,
+ 40365 - 11905: 0xFA4A,
+ 40366 - 11905: 0xFA4B,
+ 40367 - 11905: 0xFA4C,
+ 40368 - 11905: 0xFA4D,
+ 40369 - 11905: 0xFA4E,
+ 40370 - 11905: 0xFA4F,
+ 40371 - 11905: 0xFA50,
+ 40372 - 11905: 0xFA51,
+ 40373 - 11905: 0xFA52,
+ 40374 - 11905: 0xFA53,
+ 40375 - 11905: 0xFA54,
+ 40376 - 11905: 0xFA55,
+ 40377 - 11905: 0xFA56,
+ 40378 - 11905: 0xFA57,
+ 40379 - 11905: 0xFA58,
+ 40380 - 11905: 0xFA59,
+ 40381 - 11905: 0xFA5A,
+ 40382 - 11905: 0xFA5B,
+ 40383 - 11905: 0xFA5C,
+ 40384 - 11905: 0xFA5D,
+ 40385 - 11905: 0xFA5E,
+ 40386 - 11905: 0xFA5F,
+ 40387 - 11905: 0xFA60,
+ 40388 - 11905: 0xFA61,
+ 40389 - 11905: 0xFA62,
+ 40390 - 11905: 0xFA63,
+ 40391 - 11905: 0xFA64,
+ 40392 - 11905: 0xFA65,
+ 40393 - 11905: 0xFA66,
+ 40394 - 11905: 0xFA67,
+ 40395 - 11905: 0xFA68,
+ 40396 - 11905: 0xFA69,
+ 40397 - 11905: 0xFA6A,
+ 40398 - 11905: 0xFA6B,
+ 40399 - 11905: 0xFA6C,
+ 40400 - 11905: 0xFA6D,
+ 40401 - 11905: 0xFA6E,
+ 40402 - 11905: 0xFA6F,
+ 40403 - 11905: 0xFA70,
+ 40404 - 11905: 0xFA71,
+ 40405 - 11905: 0xFA72,
+ 40406 - 11905: 0xFA73,
+ 40407 - 11905: 0xFA74,
+ 40408 - 11905: 0xFA75,
+ 40409 - 11905: 0xFA76,
+ 40410 - 11905: 0xFA77,
+ 40411 - 11905: 0xFA78,
+ 40412 - 11905: 0xFA79,
+ 40413 - 11905: 0xFA7A,
+ 40414 - 11905: 0xFA7B,
+ 40415 - 11905: 0xFA7C,
+ 40416 - 11905: 0xFA7D,
+ 40417 - 11905: 0xFA7E,
+ 40418 - 11905: 0xFA80,
+ 40419 - 11905: 0xFA81,
+ 40420 - 11905: 0xFA82,
+ 40421 - 11905: 0xFA83,
+ 40422 - 11905: 0xFA84,
+ 40423 - 11905: 0xFA85,
+ 40424 - 11905: 0xFA86,
+ 40425 - 11905: 0xFA87,
+ 40426 - 11905: 0xFA88,
+ 40427 - 11905: 0xFA89,
+ 40428 - 11905: 0xFA8A,
+ 40429 - 11905: 0xFA8B,
+ 40430 - 11905: 0xFA8C,
+ 40431 - 11905: 0xFA8D,
+ 40432 - 11905: 0xFA8E,
+ 40433 - 11905: 0xFA8F,
+ 40434 - 11905: 0xFA90,
+ 40435 - 11905: 0xFA91,
+ 40436 - 11905: 0xFA92,
+ 40437 - 11905: 0xFA93,
+ 40438 - 11905: 0xFA94,
+ 40439 - 11905: 0xFA95,
+ 40440 - 11905: 0xFA96,
+ 40441 - 11905: 0xFA97,
+ 40442 - 11905: 0xFA98,
+ 40443 - 11905: 0xFA99,
+ 40444 - 11905: 0xFA9A,
+ 40445 - 11905: 0xFA9B,
+ 40446 - 11905: 0xFA9C,
+ 40447 - 11905: 0xFA9D,
+ 40448 - 11905: 0xFA9E,
+ 40449 - 11905: 0xFA9F,
+ 40450 - 11905: 0xFAA0,
+ 40451 - 11905: 0xFB40,
+ 40452 - 11905: 0xFB41,
+ 40453 - 11905: 0xFB42,
+ 40454 - 11905: 0xFB43,
+ 40455 - 11905: 0xFB44,
+ 40456 - 11905: 0xFB45,
+ 40457 - 11905: 0xFB46,
+ 40458 - 11905: 0xFB47,
+ 40459 - 11905: 0xFB48,
+ 40460 - 11905: 0xFB49,
+ 40461 - 11905: 0xFB4A,
+ 40462 - 11905: 0xFB4B,
+ 40463 - 11905: 0xFB4C,
+ 40464 - 11905: 0xFB4D,
+ 40465 - 11905: 0xFB4E,
+ 40466 - 11905: 0xFB4F,
+ 40467 - 11905: 0xFB50,
+ 40468 - 11905: 0xFB51,
+ 40469 - 11905: 0xFB52,
+ 40470 - 11905: 0xFB53,
+ 40471 - 11905: 0xFB54,
+ 40472 - 11905: 0xFB55,
+ 40473 - 11905: 0xFB56,
+ 40474 - 11905: 0xFB57,
+ 40475 - 11905: 0xFB58,
+ 40476 - 11905: 0xFB59,
+ 40477 - 11905: 0xFB5A,
+ 40478 - 11905: 0xFB5B,
+ 40479 - 11905: 0xC4F1,
+ 40480 - 11905: 0xF0AF,
+ 40481 - 11905: 0xBCA6,
+ 40482 - 11905: 0xF0B0,
+ 40483 - 11905: 0xC3F9,
+ 40484 - 11905: 0xFB5C,
+ 40485 - 11905: 0xC5B8,
+ 40486 - 11905: 0xD1BB,
+ 40487 - 11905: 0xFB5D,
+ 40488 - 11905: 0xF0B1,
+ 40489 - 11905: 0xF0B2,
+ 40490 - 11905: 0xF0B3,
+ 40491 - 11905: 0xF0B4,
+ 40492 - 11905: 0xF0B5,
+ 40493 - 11905: 0xD1BC,
+ 40494 - 11905: 0xFB5E,
+ 40495 - 11905: 0xD1EC,
+ 40496 - 11905: 0xFB5F,
+ 40497 - 11905: 0xF0B7,
+ 40498 - 11905: 0xF0B6,
+ 40499 - 11905: 0xD4A7,
+ 40500 - 11905: 0xFB60,
+ 40501 - 11905: 0xCDD2,
+ 40502 - 11905: 0xF0B8,
+ 40503 - 11905: 0xF0BA,
+ 40504 - 11905: 0xF0B9,
+ 40505 - 11905: 0xF0BB,
+ 40506 - 11905: 0xF0BC,
+ 40507 - 11905: 0xFB61,
+ 40508 - 11905: 0xFB62,
+ 40509 - 11905: 0xB8EB,
+ 40510 - 11905: 0xF0BD,
+ 40511 - 11905: 0xBAE8,
+ 40512 - 11905: 0xFB63,
+ 40513 - 11905: 0xF0BE,
+ 40514 - 11905: 0xF0BF,
+ 40515 - 11905: 0xBEE9,
+ 40516 - 11905: 0xF0C0,
+ 40517 - 11905: 0xB6EC,
+ 40518 - 11905: 0xF0C1,
+ 40519 - 11905: 0xF0C2,
+ 40520 - 11905: 0xF0C3,
+ 40521 - 11905: 0xF0C4,
+ 40522 - 11905: 0xC8B5,
+ 40523 - 11905: 0xF0C5,
+ 40524 - 11905: 0xF0C6,
+ 40525 - 11905: 0xFB64,
+ 40526 - 11905: 0xF0C7,
+ 40527 - 11905: 0xC5F4,
+ 40528 - 11905: 0xFB65,
+ 40529 - 11905: 0xF0C8,
+ 40530 - 11905: 0xFB66,
+ 40531 - 11905: 0xFB67,
+ 40532 - 11905: 0xFB68,
+ 40533 - 11905: 0xF0C9,
+ 40534 - 11905: 0xFB69,
+ 40535 - 11905: 0xF0CA,
+ 40536 - 11905: 0xF7BD,
+ 40537 - 11905: 0xFB6A,
+ 40538 - 11905: 0xF0CB,
+ 40539 - 11905: 0xF0CC,
+ 40540 - 11905: 0xF0CD,
+ 40541 - 11905: 0xFB6B,
+ 40542 - 11905: 0xF0CE,
+ 40543 - 11905: 0xFB6C,
+ 40544 - 11905: 0xFB6D,
+ 40545 - 11905: 0xFB6E,
+ 40546 - 11905: 0xFB6F,
+ 40547 - 11905: 0xF0CF,
+ 40548 - 11905: 0xBAD7,
+ 40549 - 11905: 0xFB70,
+ 40550 - 11905: 0xF0D0,
+ 40551 - 11905: 0xF0D1,
+ 40552 - 11905: 0xF0D2,
+ 40553 - 11905: 0xF0D3,
+ 40554 - 11905: 0xF0D4,
+ 40555 - 11905: 0xF0D5,
+ 40556 - 11905: 0xF0D6,
+ 40557 - 11905: 0xF0D8,
+ 40558 - 11905: 0xFB71,
+ 40559 - 11905: 0xFB72,
+ 40560 - 11905: 0xD3A5,
+ 40561 - 11905: 0xF0D7,
+ 40562 - 11905: 0xFB73,
+ 40563 - 11905: 0xF0D9,
+ 40564 - 11905: 0xFB74,
+ 40565 - 11905: 0xFB75,
+ 40566 - 11905: 0xFB76,
+ 40567 - 11905: 0xFB77,
+ 40568 - 11905: 0xFB78,
+ 40569 - 11905: 0xFB79,
+ 40570 - 11905: 0xFB7A,
+ 40571 - 11905: 0xFB7B,
+ 40572 - 11905: 0xFB7C,
+ 40573 - 11905: 0xFB7D,
+ 40574 - 11905: 0xF5BA,
+ 40575 - 11905: 0xC2B9,
+ 40576 - 11905: 0xFB7E,
+ 40577 - 11905: 0xFB80,
+ 40578 - 11905: 0xF7E4,
+ 40579 - 11905: 0xFB81,
+ 40580 - 11905: 0xFB82,
+ 40581 - 11905: 0xFB83,
+ 40582 - 11905: 0xFB84,
+ 40583 - 11905: 0xF7E5,
+ 40584 - 11905: 0xF7E6,
+ 40585 - 11905: 0xFB85,
+ 40586 - 11905: 0xFB86,
+ 40587 - 11905: 0xF7E7,
+ 40588 - 11905: 0xFB87,
+ 40589 - 11905: 0xFB88,
+ 40590 - 11905: 0xFB89,
+ 40591 - 11905: 0xFB8A,
+ 40592 - 11905: 0xFB8B,
+ 40593 - 11905: 0xFB8C,
+ 40594 - 11905: 0xF7E8,
+ 40595 - 11905: 0xC2B4,
+ 40596 - 11905: 0xFB8D,
+ 40597 - 11905: 0xFB8E,
+ 40598 - 11905: 0xFB8F,
+ 40599 - 11905: 0xFB90,
+ 40600 - 11905: 0xFB91,
+ 40601 - 11905: 0xFB92,
+ 40602 - 11905: 0xFB93,
+ 40603 - 11905: 0xFB94,
+ 40604 - 11905: 0xFB95,
+ 40605 - 11905: 0xF7EA,
+ 40606 - 11905: 0xFB96,
+ 40607 - 11905: 0xF7EB,
+ 40608 - 11905: 0xFB97,
+ 40609 - 11905: 0xFB98,
+ 40610 - 11905: 0xFB99,
+ 40611 - 11905: 0xFB9A,
+ 40612 - 11905: 0xFB9B,
+ 40613 - 11905: 0xFB9C,
+ 40614 - 11905: 0xC2F3,
+ 40615 - 11905: 0xFB9D,
+ 40616 - 11905: 0xFB9E,
+ 40617 - 11905: 0xFB9F,
+ 40618 - 11905: 0xFBA0,
+ 40619 - 11905: 0xFC40,
+ 40620 - 11905: 0xFC41,
+ 40621 - 11905: 0xFC42,
+ 40622 - 11905: 0xFC43,
+ 40623 - 11905: 0xFC44,
+ 40624 - 11905: 0xFC45,
+ 40625 - 11905: 0xFC46,
+ 40626 - 11905: 0xFC47,
+ 40627 - 11905: 0xFC48,
+ 40628 - 11905: 0xF4F0,
+ 40629 - 11905: 0xFC49,
+ 40630 - 11905: 0xFC4A,
+ 40631 - 11905: 0xFC4B,
+ 40632 - 11905: 0xF4EF,
+ 40633 - 11905: 0xFC4C,
+ 40634 - 11905: 0xFC4D,
+ 40635 - 11905: 0xC2E9,
+ 40636 - 11905: 0xFC4E,
+ 40637 - 11905: 0xF7E1,
+ 40638 - 11905: 0xF7E2,
+ 40639 - 11905: 0xFC4F,
+ 40640 - 11905: 0xFC50,
+ 40641 - 11905: 0xFC51,
+ 40642 - 11905: 0xFC52,
+ 40643 - 11905: 0xFC53,
+ 40644 - 11905: 0xBBC6,
+ 40645 - 11905: 0xFC54,
+ 40646 - 11905: 0xFC55,
+ 40647 - 11905: 0xFC56,
+ 40648 - 11905: 0xFC57,
+ 40649 - 11905: 0xD9E4,
+ 40650 - 11905: 0xFC58,
+ 40651 - 11905: 0xFC59,
+ 40652 - 11905: 0xFC5A,
+ 40653 - 11905: 0xCAF2,
+ 40654 - 11905: 0xC0E8,
+ 40655 - 11905: 0xF0A4,
+ 40656 - 11905: 0xFC5B,
+ 40657 - 11905: 0xBADA,
+ 40658 - 11905: 0xFC5C,
+ 40659 - 11905: 0xFC5D,
+ 40660 - 11905: 0xC7AD,
+ 40661 - 11905: 0xFC5E,
+ 40662 - 11905: 0xFC5F,
+ 40663 - 11905: 0xFC60,
+ 40664 - 11905: 0xC4AC,
+ 40665 - 11905: 0xFC61,
+ 40666 - 11905: 0xFC62,
+ 40667 - 11905: 0xF7EC,
+ 40668 - 11905: 0xF7ED,
+ 40669 - 11905: 0xF7EE,
+ 40670 - 11905: 0xFC63,
+ 40671 - 11905: 0xF7F0,
+ 40672 - 11905: 0xF7EF,
+ 40673 - 11905: 0xFC64,
+ 40674 - 11905: 0xF7F1,
+ 40675 - 11905: 0xFC65,
+ 40676 - 11905: 0xFC66,
+ 40677 - 11905: 0xF7F4,
+ 40678 - 11905: 0xFC67,
+ 40679 - 11905: 0xF7F3,
+ 40680 - 11905: 0xFC68,
+ 40681 - 11905: 0xF7F2,
+ 40682 - 11905: 0xF7F5,
+ 40683 - 11905: 0xFC69,
+ 40684 - 11905: 0xFC6A,
+ 40685 - 11905: 0xFC6B,
+ 40686 - 11905: 0xFC6C,
+ 40687 - 11905: 0xF7F6,
+ 40688 - 11905: 0xFC6D,
+ 40689 - 11905: 0xFC6E,
+ 40690 - 11905: 0xFC6F,
+ 40691 - 11905: 0xFC70,
+ 40692 - 11905: 0xFC71,
+ 40693 - 11905: 0xFC72,
+ 40694 - 11905: 0xFC73,
+ 40695 - 11905: 0xFC74,
+ 40696 - 11905: 0xFC75,
+ 40697 - 11905: 0xEDE9,
+ 40698 - 11905: 0xFC76,
+ 40699 - 11905: 0xEDEA,
+ 40700 - 11905: 0xEDEB,
+ 40701 - 11905: 0xFC77,
+ 40702 - 11905: 0xF6BC,
+ 40703 - 11905: 0xFC78,
+ 40704 - 11905: 0xFC79,
+ 40705 - 11905: 0xFC7A,
+ 40706 - 11905: 0xFC7B,
+ 40707 - 11905: 0xFC7C,
+ 40708 - 11905: 0xFC7D,
+ 40709 - 11905: 0xFC7E,
+ 40710 - 11905: 0xFC80,
+ 40711 - 11905: 0xFC81,
+ 40712 - 11905: 0xFC82,
+ 40713 - 11905: 0xFC83,
+ 40714 - 11905: 0xFC84,
+ 40715 - 11905: 0xF6BD,
+ 40716 - 11905: 0xFC85,
+ 40717 - 11905: 0xF6BE,
+ 40718 - 11905: 0xB6A6,
+ 40719 - 11905: 0xFC86,
+ 40720 - 11905: 0xD8BE,
+ 40721 - 11905: 0xFC87,
+ 40722 - 11905: 0xFC88,
+ 40723 - 11905: 0xB9C4,
+ 40724 - 11905: 0xFC89,
+ 40725 - 11905: 0xFC8A,
+ 40726 - 11905: 0xFC8B,
+ 40727 - 11905: 0xD8BB,
+ 40728 - 11905: 0xFC8C,
+ 40729 - 11905: 0xDCB1,
+ 40730 - 11905: 0xFC8D,
+ 40731 - 11905: 0xFC8E,
+ 40732 - 11905: 0xFC8F,
+ 40733 - 11905: 0xFC90,
+ 40734 - 11905: 0xFC91,
+ 40735 - 11905: 0xFC92,
+ 40736 - 11905: 0xCAF3,
+ 40737 - 11905: 0xFC93,
+ 40738 - 11905: 0xF7F7,
+ 40739 - 11905: 0xFC94,
+ 40740 - 11905: 0xFC95,
+ 40741 - 11905: 0xFC96,
+ 40742 - 11905: 0xFC97,
+ 40743 - 11905: 0xFC98,
+ 40744 - 11905: 0xFC99,
+ 40745 - 11905: 0xFC9A,
+ 40746 - 11905: 0xFC9B,
+ 40747 - 11905: 0xFC9C,
+ 40748 - 11905: 0xF7F8,
+ 40749 - 11905: 0xFC9D,
+ 40750 - 11905: 0xFC9E,
+ 40751 - 11905: 0xF7F9,
+ 40752 - 11905: 0xFC9F,
+ 40753 - 11905: 0xFCA0,
+ 40754 - 11905: 0xFD40,
+ 40755 - 11905: 0xFD41,
+ 40756 - 11905: 0xFD42,
+ 40757 - 11905: 0xFD43,
+ 40758 - 11905: 0xFD44,
+ 40759 - 11905: 0xF7FB,
+ 40760 - 11905: 0xFD45,
+ 40761 - 11905: 0xF7FA,
+ 40762 - 11905: 0xFD46,
+ 40763 - 11905: 0xB1C7,
+ 40764 - 11905: 0xFD47,
+ 40765 - 11905: 0xF7FC,
+ 40766 - 11905: 0xF7FD,
+ 40767 - 11905: 0xFD48,
+ 40768 - 11905: 0xFD49,
+ 40769 - 11905: 0xFD4A,
+ 40770 - 11905: 0xFD4B,
+ 40771 - 11905: 0xFD4C,
+ 40772 - 11905: 0xF7FE,
+ 40773 - 11905: 0xFD4D,
+ 40774 - 11905: 0xFD4E,
+ 40775 - 11905: 0xFD4F,
+ 40776 - 11905: 0xFD50,
+ 40777 - 11905: 0xFD51,
+ 40778 - 11905: 0xFD52,
+ 40779 - 11905: 0xFD53,
+ 40780 - 11905: 0xFD54,
+ 40781 - 11905: 0xFD55,
+ 40782 - 11905: 0xFD56,
+ 40783 - 11905: 0xFD57,
+ 40784 - 11905: 0xC6EB,
+ 40785 - 11905: 0xECB4,
+ 40786 - 11905: 0xFD58,
+ 40787 - 11905: 0xFD59,
+ 40788 - 11905: 0xFD5A,
+ 40789 - 11905: 0xFD5B,
+ 40790 - 11905: 0xFD5C,
+ 40791 - 11905: 0xFD5D,
+ 40792 - 11905: 0xFD5E,
+ 40793 - 11905: 0xFD5F,
+ 40794 - 11905: 0xFD60,
+ 40795 - 11905: 0xFD61,
+ 40796 - 11905: 0xFD62,
+ 40797 - 11905: 0xFD63,
+ 40798 - 11905: 0xFD64,
+ 40799 - 11905: 0xFD65,
+ 40800 - 11905: 0xFD66,
+ 40801 - 11905: 0xFD67,
+ 40802 - 11905: 0xFD68,
+ 40803 - 11905: 0xFD69,
+ 40804 - 11905: 0xFD6A,
+ 40805 - 11905: 0xFD6B,
+ 40806 - 11905: 0xFD6C,
+ 40807 - 11905: 0xFD6D,
+ 40808 - 11905: 0xFD6E,
+ 40809 - 11905: 0xFD6F,
+ 40810 - 11905: 0xFD70,
+ 40811 - 11905: 0xFD71,
+ 40812 - 11905: 0xFD72,
+ 40813 - 11905: 0xFD73,
+ 40814 - 11905: 0xFD74,
+ 40815 - 11905: 0xFD75,
+ 40816 - 11905: 0xFD76,
+ 40817 - 11905: 0xFD77,
+ 40818 - 11905: 0xFD78,
+ 40819 - 11905: 0xFD79,
+ 40820 - 11905: 0xFD7A,
+ 40821 - 11905: 0xFD7B,
+ 40822 - 11905: 0xFD7C,
+ 40823 - 11905: 0xFD7D,
+ 40824 - 11905: 0xFD7E,
+ 40825 - 11905: 0xFD80,
+ 40826 - 11905: 0xFD81,
+ 40827 - 11905: 0xFD82,
+ 40828 - 11905: 0xFD83,
+ 40829 - 11905: 0xFD84,
+ 40830 - 11905: 0xFD85,
+ 40831 - 11905: 0xB3DD,
+ 40832 - 11905: 0xF6B3,
+ 40833 - 11905: 0xFD86,
+ 40834 - 11905: 0xFD87,
+ 40835 - 11905: 0xF6B4,
+ 40836 - 11905: 0xC1E4,
+ 40837 - 11905: 0xF6B5,
+ 40838 - 11905: 0xF6B6,
+ 40839 - 11905: 0xF6B7,
+ 40840 - 11905: 0xF6B8,
+ 40841 - 11905: 0xF6B9,
+ 40842 - 11905: 0xF6BA,
+ 40843 - 11905: 0xC8A3,
+ 40844 - 11905: 0xF6BB,
+ 40845 - 11905: 0xFD88,
+ 40846 - 11905: 0xFD89,
+ 40847 - 11905: 0xFD8A,
+ 40848 - 11905: 0xFD8B,
+ 40849 - 11905: 0xFD8C,
+ 40850 - 11905: 0xFD8D,
+ 40851 - 11905: 0xFD8E,
+ 40852 - 11905: 0xFD8F,
+ 40853 - 11905: 0xFD90,
+ 40854 - 11905: 0xFD91,
+ 40855 - 11905: 0xFD92,
+ 40856 - 11905: 0xFD93,
+ 40857 - 11905: 0xC1FA,
+ 40858 - 11905: 0xB9A8,
+ 40859 - 11905: 0xEDE8,
+ 40860 - 11905: 0xFD94,
+ 40861 - 11905: 0xFD95,
+ 40862 - 11905: 0xFD96,
+ 40863 - 11905: 0xB9EA,
+ 40864 - 11905: 0xD9DF,
+ 40865 - 11905: 0xFD97,
+ 40866 - 11905: 0xFD98,
+ 40867 - 11905: 0xFD99,
+ 40868 - 11905: 0xFD9A,
+ 40869 - 11905: 0xFD9B,
+}
+
+const encode1Low, encode1High = 8208, 9795
+
+var encode1 = [...]uint16{
+ 8208 - 8208: 0xA95C,
+ 8211 - 8208: 0xA843,
+ 8212 - 8208: 0xA1AA,
+ 8213 - 8208: 0xA844,
+ 8214 - 8208: 0xA1AC,
+ 8216 - 8208: 0xA1AE,
+ 8217 - 8208: 0xA1AF,
+ 8220 - 8208: 0xA1B0,
+ 8221 - 8208: 0xA1B1,
+ 8229 - 8208: 0xA845,
+ 8230 - 8208: 0xA1AD,
+ 8240 - 8208: 0xA1EB,
+ 8242 - 8208: 0xA1E4,
+ 8243 - 8208: 0xA1E5,
+ 8245 - 8208: 0xA846,
+ 8251 - 8208: 0xA1F9,
+ 8364 - 8208: 0xA2E3,
+ 8451 - 8208: 0xA1E6,
+ 8453 - 8208: 0xA847,
+ 8457 - 8208: 0xA848,
+ 8470 - 8208: 0xA1ED,
+ 8481 - 8208: 0xA959,
+ 8544 - 8208: 0xA2F1,
+ 8545 - 8208: 0xA2F2,
+ 8546 - 8208: 0xA2F3,
+ 8547 - 8208: 0xA2F4,
+ 8548 - 8208: 0xA2F5,
+ 8549 - 8208: 0xA2F6,
+ 8550 - 8208: 0xA2F7,
+ 8551 - 8208: 0xA2F8,
+ 8552 - 8208: 0xA2F9,
+ 8553 - 8208: 0xA2FA,
+ 8554 - 8208: 0xA2FB,
+ 8555 - 8208: 0xA2FC,
+ 8560 - 8208: 0xA2A1,
+ 8561 - 8208: 0xA2A2,
+ 8562 - 8208: 0xA2A3,
+ 8563 - 8208: 0xA2A4,
+ 8564 - 8208: 0xA2A5,
+ 8565 - 8208: 0xA2A6,
+ 8566 - 8208: 0xA2A7,
+ 8567 - 8208: 0xA2A8,
+ 8568 - 8208: 0xA2A9,
+ 8569 - 8208: 0xA2AA,
+ 8592 - 8208: 0xA1FB,
+ 8593 - 8208: 0xA1FC,
+ 8594 - 8208: 0xA1FA,
+ 8595 - 8208: 0xA1FD,
+ 8598 - 8208: 0xA849,
+ 8599 - 8208: 0xA84A,
+ 8600 - 8208: 0xA84B,
+ 8601 - 8208: 0xA84C,
+ 8712 - 8208: 0xA1CA,
+ 8719 - 8208: 0xA1C7,
+ 8721 - 8208: 0xA1C6,
+ 8725 - 8208: 0xA84D,
+ 8730 - 8208: 0xA1CC,
+ 8733 - 8208: 0xA1D8,
+ 8734 - 8208: 0xA1DE,
+ 8735 - 8208: 0xA84E,
+ 8736 - 8208: 0xA1CF,
+ 8739 - 8208: 0xA84F,
+ 8741 - 8208: 0xA1CE,
+ 8743 - 8208: 0xA1C4,
+ 8744 - 8208: 0xA1C5,
+ 8745 - 8208: 0xA1C9,
+ 8746 - 8208: 0xA1C8,
+ 8747 - 8208: 0xA1D2,
+ 8750 - 8208: 0xA1D3,
+ 8756 - 8208: 0xA1E0,
+ 8757 - 8208: 0xA1DF,
+ 8758 - 8208: 0xA1C3,
+ 8759 - 8208: 0xA1CB,
+ 8765 - 8208: 0xA1D7,
+ 8776 - 8208: 0xA1D6,
+ 8780 - 8208: 0xA1D5,
+ 8786 - 8208: 0xA850,
+ 8800 - 8208: 0xA1D9,
+ 8801 - 8208: 0xA1D4,
+ 8804 - 8208: 0xA1DC,
+ 8805 - 8208: 0xA1DD,
+ 8806 - 8208: 0xA851,
+ 8807 - 8208: 0xA852,
+ 8814 - 8208: 0xA1DA,
+ 8815 - 8208: 0xA1DB,
+ 8853 - 8208: 0xA892,
+ 8857 - 8208: 0xA1D1,
+ 8869 - 8208: 0xA1CD,
+ 8895 - 8208: 0xA853,
+ 8978 - 8208: 0xA1D0,
+ 9312 - 8208: 0xA2D9,
+ 9313 - 8208: 0xA2DA,
+ 9314 - 8208: 0xA2DB,
+ 9315 - 8208: 0xA2DC,
+ 9316 - 8208: 0xA2DD,
+ 9317 - 8208: 0xA2DE,
+ 9318 - 8208: 0xA2DF,
+ 9319 - 8208: 0xA2E0,
+ 9320 - 8208: 0xA2E1,
+ 9321 - 8208: 0xA2E2,
+ 9332 - 8208: 0xA2C5,
+ 9333 - 8208: 0xA2C6,
+ 9334 - 8208: 0xA2C7,
+ 9335 - 8208: 0xA2C8,
+ 9336 - 8208: 0xA2C9,
+ 9337 - 8208: 0xA2CA,
+ 9338 - 8208: 0xA2CB,
+ 9339 - 8208: 0xA2CC,
+ 9340 - 8208: 0xA2CD,
+ 9341 - 8208: 0xA2CE,
+ 9342 - 8208: 0xA2CF,
+ 9343 - 8208: 0xA2D0,
+ 9344 - 8208: 0xA2D1,
+ 9345 - 8208: 0xA2D2,
+ 9346 - 8208: 0xA2D3,
+ 9347 - 8208: 0xA2D4,
+ 9348 - 8208: 0xA2D5,
+ 9349 - 8208: 0xA2D6,
+ 9350 - 8208: 0xA2D7,
+ 9351 - 8208: 0xA2D8,
+ 9352 - 8208: 0xA2B1,
+ 9353 - 8208: 0xA2B2,
+ 9354 - 8208: 0xA2B3,
+ 9355 - 8208: 0xA2B4,
+ 9356 - 8208: 0xA2B5,
+ 9357 - 8208: 0xA2B6,
+ 9358 - 8208: 0xA2B7,
+ 9359 - 8208: 0xA2B8,
+ 9360 - 8208: 0xA2B9,
+ 9361 - 8208: 0xA2BA,
+ 9362 - 8208: 0xA2BB,
+ 9363 - 8208: 0xA2BC,
+ 9364 - 8208: 0xA2BD,
+ 9365 - 8208: 0xA2BE,
+ 9366 - 8208: 0xA2BF,
+ 9367 - 8208: 0xA2C0,
+ 9368 - 8208: 0xA2C1,
+ 9369 - 8208: 0xA2C2,
+ 9370 - 8208: 0xA2C3,
+ 9371 - 8208: 0xA2C4,
+ 9472 - 8208: 0xA9A4,
+ 9473 - 8208: 0xA9A5,
+ 9474 - 8208: 0xA9A6,
+ 9475 - 8208: 0xA9A7,
+ 9476 - 8208: 0xA9A8,
+ 9477 - 8208: 0xA9A9,
+ 9478 - 8208: 0xA9AA,
+ 9479 - 8208: 0xA9AB,
+ 9480 - 8208: 0xA9AC,
+ 9481 - 8208: 0xA9AD,
+ 9482 - 8208: 0xA9AE,
+ 9483 - 8208: 0xA9AF,
+ 9484 - 8208: 0xA9B0,
+ 9485 - 8208: 0xA9B1,
+ 9486 - 8208: 0xA9B2,
+ 9487 - 8208: 0xA9B3,
+ 9488 - 8208: 0xA9B4,
+ 9489 - 8208: 0xA9B5,
+ 9490 - 8208: 0xA9B6,
+ 9491 - 8208: 0xA9B7,
+ 9492 - 8208: 0xA9B8,
+ 9493 - 8208: 0xA9B9,
+ 9494 - 8208: 0xA9BA,
+ 9495 - 8208: 0xA9BB,
+ 9496 - 8208: 0xA9BC,
+ 9497 - 8208: 0xA9BD,
+ 9498 - 8208: 0xA9BE,
+ 9499 - 8208: 0xA9BF,
+ 9500 - 8208: 0xA9C0,
+ 9501 - 8208: 0xA9C1,
+ 9502 - 8208: 0xA9C2,
+ 9503 - 8208: 0xA9C3,
+ 9504 - 8208: 0xA9C4,
+ 9505 - 8208: 0xA9C5,
+ 9506 - 8208: 0xA9C6,
+ 9507 - 8208: 0xA9C7,
+ 9508 - 8208: 0xA9C8,
+ 9509 - 8208: 0xA9C9,
+ 9510 - 8208: 0xA9CA,
+ 9511 - 8208: 0xA9CB,
+ 9512 - 8208: 0xA9CC,
+ 9513 - 8208: 0xA9CD,
+ 9514 - 8208: 0xA9CE,
+ 9515 - 8208: 0xA9CF,
+ 9516 - 8208: 0xA9D0,
+ 9517 - 8208: 0xA9D1,
+ 9518 - 8208: 0xA9D2,
+ 9519 - 8208: 0xA9D3,
+ 9520 - 8208: 0xA9D4,
+ 9521 - 8208: 0xA9D5,
+ 9522 - 8208: 0xA9D6,
+ 9523 - 8208: 0xA9D7,
+ 9524 - 8208: 0xA9D8,
+ 9525 - 8208: 0xA9D9,
+ 9526 - 8208: 0xA9DA,
+ 9527 - 8208: 0xA9DB,
+ 9528 - 8208: 0xA9DC,
+ 9529 - 8208: 0xA9DD,
+ 9530 - 8208: 0xA9DE,
+ 9531 - 8208: 0xA9DF,
+ 9532 - 8208: 0xA9E0,
+ 9533 - 8208: 0xA9E1,
+ 9534 - 8208: 0xA9E2,
+ 9535 - 8208: 0xA9E3,
+ 9536 - 8208: 0xA9E4,
+ 9537 - 8208: 0xA9E5,
+ 9538 - 8208: 0xA9E6,
+ 9539 - 8208: 0xA9E7,
+ 9540 - 8208: 0xA9E8,
+ 9541 - 8208: 0xA9E9,
+ 9542 - 8208: 0xA9EA,
+ 9543 - 8208: 0xA9EB,
+ 9544 - 8208: 0xA9EC,
+ 9545 - 8208: 0xA9ED,
+ 9546 - 8208: 0xA9EE,
+ 9547 - 8208: 0xA9EF,
+ 9552 - 8208: 0xA854,
+ 9553 - 8208: 0xA855,
+ 9554 - 8208: 0xA856,
+ 9555 - 8208: 0xA857,
+ 9556 - 8208: 0xA858,
+ 9557 - 8208: 0xA859,
+ 9558 - 8208: 0xA85A,
+ 9559 - 8208: 0xA85B,
+ 9560 - 8208: 0xA85C,
+ 9561 - 8208: 0xA85D,
+ 9562 - 8208: 0xA85E,
+ 9563 - 8208: 0xA85F,
+ 9564 - 8208: 0xA860,
+ 9565 - 8208: 0xA861,
+ 9566 - 8208: 0xA862,
+ 9567 - 8208: 0xA863,
+ 9568 - 8208: 0xA864,
+ 9569 - 8208: 0xA865,
+ 9570 - 8208: 0xA866,
+ 9571 - 8208: 0xA867,
+ 9572 - 8208: 0xA868,
+ 9573 - 8208: 0xA869,
+ 9574 - 8208: 0xA86A,
+ 9575 - 8208: 0xA86B,
+ 9576 - 8208: 0xA86C,
+ 9577 - 8208: 0xA86D,
+ 9578 - 8208: 0xA86E,
+ 9579 - 8208: 0xA86F,
+ 9580 - 8208: 0xA870,
+ 9581 - 8208: 0xA871,
+ 9582 - 8208: 0xA872,
+ 9583 - 8208: 0xA873,
+ 9584 - 8208: 0xA874,
+ 9585 - 8208: 0xA875,
+ 9586 - 8208: 0xA876,
+ 9587 - 8208: 0xA877,
+ 9601 - 8208: 0xA878,
+ 9602 - 8208: 0xA879,
+ 9603 - 8208: 0xA87A,
+ 9604 - 8208: 0xA87B,
+ 9605 - 8208: 0xA87C,
+ 9606 - 8208: 0xA87D,
+ 9607 - 8208: 0xA87E,
+ 9608 - 8208: 0xA880,
+ 9609 - 8208: 0xA881,
+ 9610 - 8208: 0xA882,
+ 9611 - 8208: 0xA883,
+ 9612 - 8208: 0xA884,
+ 9613 - 8208: 0xA885,
+ 9614 - 8208: 0xA886,
+ 9615 - 8208: 0xA887,
+ 9619 - 8208: 0xA888,
+ 9620 - 8208: 0xA889,
+ 9621 - 8208: 0xA88A,
+ 9632 - 8208: 0xA1F6,
+ 9633 - 8208: 0xA1F5,
+ 9650 - 8208: 0xA1F8,
+ 9651 - 8208: 0xA1F7,
+ 9660 - 8208: 0xA88B,
+ 9661 - 8208: 0xA88C,
+ 9670 - 8208: 0xA1F4,
+ 9671 - 8208: 0xA1F3,
+ 9675 - 8208: 0xA1F0,
+ 9678 - 8208: 0xA1F2,
+ 9679 - 8208: 0xA1F1,
+ 9698 - 8208: 0xA88D,
+ 9699 - 8208: 0xA88E,
+ 9700 - 8208: 0xA88F,
+ 9701 - 8208: 0xA890,
+ 9733 - 8208: 0xA1EF,
+ 9734 - 8208: 0xA1EE,
+ 9737 - 8208: 0xA891,
+ 9792 - 8208: 0xA1E2,
+ 9794 - 8208: 0xA1E1,
+}
+
+const encode2Low, encode2High = 164, 1106
+
+var encode2 = [...]uint16{
+ 164 - 164: 0xA1E8,
+ 167 - 164: 0xA1EC,
+ 168 - 164: 0xA1A7,
+ 176 - 164: 0xA1E3,
+ 177 - 164: 0xA1C0,
+ 183 - 164: 0xA1A4,
+ 215 - 164: 0xA1C1,
+ 224 - 164: 0xA8A4,
+ 225 - 164: 0xA8A2,
+ 232 - 164: 0xA8A8,
+ 233 - 164: 0xA8A6,
+ 234 - 164: 0xA8BA,
+ 236 - 164: 0xA8AC,
+ 237 - 164: 0xA8AA,
+ 242 - 164: 0xA8B0,
+ 243 - 164: 0xA8AE,
+ 247 - 164: 0xA1C2,
+ 249 - 164: 0xA8B4,
+ 250 - 164: 0xA8B2,
+ 252 - 164: 0xA8B9,
+ 257 - 164: 0xA8A1,
+ 275 - 164: 0xA8A5,
+ 283 - 164: 0xA8A7,
+ 299 - 164: 0xA8A9,
+ 324 - 164: 0xA8BD,
+ 328 - 164: 0xA8BE,
+ 333 - 164: 0xA8AD,
+ 363 - 164: 0xA8B1,
+ 462 - 164: 0xA8A3,
+ 464 - 164: 0xA8AB,
+ 466 - 164: 0xA8AF,
+ 468 - 164: 0xA8B3,
+ 470 - 164: 0xA8B5,
+ 472 - 164: 0xA8B6,
+ 474 - 164: 0xA8B7,
+ 476 - 164: 0xA8B8,
+ 505 - 164: 0xA8BF,
+ 593 - 164: 0xA8BB,
+ 609 - 164: 0xA8C0,
+ 711 - 164: 0xA1A6,
+ 713 - 164: 0xA1A5,
+ 714 - 164: 0xA840,
+ 715 - 164: 0xA841,
+ 729 - 164: 0xA842,
+ 913 - 164: 0xA6A1,
+ 914 - 164: 0xA6A2,
+ 915 - 164: 0xA6A3,
+ 916 - 164: 0xA6A4,
+ 917 - 164: 0xA6A5,
+ 918 - 164: 0xA6A6,
+ 919 - 164: 0xA6A7,
+ 920 - 164: 0xA6A8,
+ 921 - 164: 0xA6A9,
+ 922 - 164: 0xA6AA,
+ 923 - 164: 0xA6AB,
+ 924 - 164: 0xA6AC,
+ 925 - 164: 0xA6AD,
+ 926 - 164: 0xA6AE,
+ 927 - 164: 0xA6AF,
+ 928 - 164: 0xA6B0,
+ 929 - 164: 0xA6B1,
+ 931 - 164: 0xA6B2,
+ 932 - 164: 0xA6B3,
+ 933 - 164: 0xA6B4,
+ 934 - 164: 0xA6B5,
+ 935 - 164: 0xA6B6,
+ 936 - 164: 0xA6B7,
+ 937 - 164: 0xA6B8,
+ 945 - 164: 0xA6C1,
+ 946 - 164: 0xA6C2,
+ 947 - 164: 0xA6C3,
+ 948 - 164: 0xA6C4,
+ 949 - 164: 0xA6C5,
+ 950 - 164: 0xA6C6,
+ 951 - 164: 0xA6C7,
+ 952 - 164: 0xA6C8,
+ 953 - 164: 0xA6C9,
+ 954 - 164: 0xA6CA,
+ 955 - 164: 0xA6CB,
+ 956 - 164: 0xA6CC,
+ 957 - 164: 0xA6CD,
+ 958 - 164: 0xA6CE,
+ 959 - 164: 0xA6CF,
+ 960 - 164: 0xA6D0,
+ 961 - 164: 0xA6D1,
+ 963 - 164: 0xA6D2,
+ 964 - 164: 0xA6D3,
+ 965 - 164: 0xA6D4,
+ 966 - 164: 0xA6D5,
+ 967 - 164: 0xA6D6,
+ 968 - 164: 0xA6D7,
+ 969 - 164: 0xA6D8,
+ 1025 - 164: 0xA7A7,
+ 1040 - 164: 0xA7A1,
+ 1041 - 164: 0xA7A2,
+ 1042 - 164: 0xA7A3,
+ 1043 - 164: 0xA7A4,
+ 1044 - 164: 0xA7A5,
+ 1045 - 164: 0xA7A6,
+ 1046 - 164: 0xA7A8,
+ 1047 - 164: 0xA7A9,
+ 1048 - 164: 0xA7AA,
+ 1049 - 164: 0xA7AB,
+ 1050 - 164: 0xA7AC,
+ 1051 - 164: 0xA7AD,
+ 1052 - 164: 0xA7AE,
+ 1053 - 164: 0xA7AF,
+ 1054 - 164: 0xA7B0,
+ 1055 - 164: 0xA7B1,
+ 1056 - 164: 0xA7B2,
+ 1057 - 164: 0xA7B3,
+ 1058 - 164: 0xA7B4,
+ 1059 - 164: 0xA7B5,
+ 1060 - 164: 0xA7B6,
+ 1061 - 164: 0xA7B7,
+ 1062 - 164: 0xA7B8,
+ 1063 - 164: 0xA7B9,
+ 1064 - 164: 0xA7BA,
+ 1065 - 164: 0xA7BB,
+ 1066 - 164: 0xA7BC,
+ 1067 - 164: 0xA7BD,
+ 1068 - 164: 0xA7BE,
+ 1069 - 164: 0xA7BF,
+ 1070 - 164: 0xA7C0,
+ 1071 - 164: 0xA7C1,
+ 1072 - 164: 0xA7D1,
+ 1073 - 164: 0xA7D2,
+ 1074 - 164: 0xA7D3,
+ 1075 - 164: 0xA7D4,
+ 1076 - 164: 0xA7D5,
+ 1077 - 164: 0xA7D6,
+ 1078 - 164: 0xA7D8,
+ 1079 - 164: 0xA7D9,
+ 1080 - 164: 0xA7DA,
+ 1081 - 164: 0xA7DB,
+ 1082 - 164: 0xA7DC,
+ 1083 - 164: 0xA7DD,
+ 1084 - 164: 0xA7DE,
+ 1085 - 164: 0xA7DF,
+ 1086 - 164: 0xA7E0,
+ 1087 - 164: 0xA7E1,
+ 1088 - 164: 0xA7E2,
+ 1089 - 164: 0xA7E3,
+ 1090 - 164: 0xA7E4,
+ 1091 - 164: 0xA7E5,
+ 1092 - 164: 0xA7E6,
+ 1093 - 164: 0xA7E7,
+ 1094 - 164: 0xA7E8,
+ 1095 - 164: 0xA7E9,
+ 1096 - 164: 0xA7EA,
+ 1097 - 164: 0xA7EB,
+ 1098 - 164: 0xA7EC,
+ 1099 - 164: 0xA7ED,
+ 1100 - 164: 0xA7EE,
+ 1101 - 164: 0xA7EF,
+ 1102 - 164: 0xA7F0,
+ 1103 - 164: 0xA7F1,
+ 1105 - 164: 0xA7D7,
+}
+
+const encode3Low, encode3High = 65072, 65510
+
+var encode3 = [...]uint16{
+ 65072 - 65072: 0xA955,
+ 65073 - 65072: 0xA6F2,
+ 65075 - 65072: 0xA6F4,
+ 65076 - 65072: 0xA6F5,
+ 65077 - 65072: 0xA6E0,
+ 65078 - 65072: 0xA6E1,
+ 65079 - 65072: 0xA6F0,
+ 65080 - 65072: 0xA6F1,
+ 65081 - 65072: 0xA6E2,
+ 65082 - 65072: 0xA6E3,
+ 65083 - 65072: 0xA6EE,
+ 65084 - 65072: 0xA6EF,
+ 65085 - 65072: 0xA6E6,
+ 65086 - 65072: 0xA6E7,
+ 65087 - 65072: 0xA6E4,
+ 65088 - 65072: 0xA6E5,
+ 65089 - 65072: 0xA6E8,
+ 65090 - 65072: 0xA6E9,
+ 65091 - 65072: 0xA6EA,
+ 65092 - 65072: 0xA6EB,
+ 65097 - 65072: 0xA968,
+ 65098 - 65072: 0xA969,
+ 65099 - 65072: 0xA96A,
+ 65100 - 65072: 0xA96B,
+ 65101 - 65072: 0xA96C,
+ 65102 - 65072: 0xA96D,
+ 65103 - 65072: 0xA96E,
+ 65104 - 65072: 0xA96F,
+ 65105 - 65072: 0xA970,
+ 65106 - 65072: 0xA971,
+ 65108 - 65072: 0xA972,
+ 65109 - 65072: 0xA973,
+ 65110 - 65072: 0xA974,
+ 65111 - 65072: 0xA975,
+ 65113 - 65072: 0xA976,
+ 65114 - 65072: 0xA977,
+ 65115 - 65072: 0xA978,
+ 65116 - 65072: 0xA979,
+ 65117 - 65072: 0xA97A,
+ 65118 - 65072: 0xA97B,
+ 65119 - 65072: 0xA97C,
+ 65120 - 65072: 0xA97D,
+ 65121 - 65072: 0xA97E,
+ 65122 - 65072: 0xA980,
+ 65123 - 65072: 0xA981,
+ 65124 - 65072: 0xA982,
+ 65125 - 65072: 0xA983,
+ 65126 - 65072: 0xA984,
+ 65128 - 65072: 0xA985,
+ 65129 - 65072: 0xA986,
+ 65130 - 65072: 0xA987,
+ 65131 - 65072: 0xA988,
+ 65281 - 65072: 0xA3A1,
+ 65282 - 65072: 0xA3A2,
+ 65283 - 65072: 0xA3A3,
+ 65284 - 65072: 0xA1E7,
+ 65285 - 65072: 0xA3A5,
+ 65286 - 65072: 0xA3A6,
+ 65287 - 65072: 0xA3A7,
+ 65288 - 65072: 0xA3A8,
+ 65289 - 65072: 0xA3A9,
+ 65290 - 65072: 0xA3AA,
+ 65291 - 65072: 0xA3AB,
+ 65292 - 65072: 0xA3AC,
+ 65293 - 65072: 0xA3AD,
+ 65294 - 65072: 0xA3AE,
+ 65295 - 65072: 0xA3AF,
+ 65296 - 65072: 0xA3B0,
+ 65297 - 65072: 0xA3B1,
+ 65298 - 65072: 0xA3B2,
+ 65299 - 65072: 0xA3B3,
+ 65300 - 65072: 0xA3B4,
+ 65301 - 65072: 0xA3B5,
+ 65302 - 65072: 0xA3B6,
+ 65303 - 65072: 0xA3B7,
+ 65304 - 65072: 0xA3B8,
+ 65305 - 65072: 0xA3B9,
+ 65306 - 65072: 0xA3BA,
+ 65307 - 65072: 0xA3BB,
+ 65308 - 65072: 0xA3BC,
+ 65309 - 65072: 0xA3BD,
+ 65310 - 65072: 0xA3BE,
+ 65311 - 65072: 0xA3BF,
+ 65312 - 65072: 0xA3C0,
+ 65313 - 65072: 0xA3C1,
+ 65314 - 65072: 0xA3C2,
+ 65315 - 65072: 0xA3C3,
+ 65316 - 65072: 0xA3C4,
+ 65317 - 65072: 0xA3C5,
+ 65318 - 65072: 0xA3C6,
+ 65319 - 65072: 0xA3C7,
+ 65320 - 65072: 0xA3C8,
+ 65321 - 65072: 0xA3C9,
+ 65322 - 65072: 0xA3CA,
+ 65323 - 65072: 0xA3CB,
+ 65324 - 65072: 0xA3CC,
+ 65325 - 65072: 0xA3CD,
+ 65326 - 65072: 0xA3CE,
+ 65327 - 65072: 0xA3CF,
+ 65328 - 65072: 0xA3D0,
+ 65329 - 65072: 0xA3D1,
+ 65330 - 65072: 0xA3D2,
+ 65331 - 65072: 0xA3D3,
+ 65332 - 65072: 0xA3D4,
+ 65333 - 65072: 0xA3D5,
+ 65334 - 65072: 0xA3D6,
+ 65335 - 65072: 0xA3D7,
+ 65336 - 65072: 0xA3D8,
+ 65337 - 65072: 0xA3D9,
+ 65338 - 65072: 0xA3DA,
+ 65339 - 65072: 0xA3DB,
+ 65340 - 65072: 0xA3DC,
+ 65341 - 65072: 0xA3DD,
+ 65342 - 65072: 0xA3DE,
+ 65343 - 65072: 0xA3DF,
+ 65344 - 65072: 0xA3E0,
+ 65345 - 65072: 0xA3E1,
+ 65346 - 65072: 0xA3E2,
+ 65347 - 65072: 0xA3E3,
+ 65348 - 65072: 0xA3E4,
+ 65349 - 65072: 0xA3E5,
+ 65350 - 65072: 0xA3E6,
+ 65351 - 65072: 0xA3E7,
+ 65352 - 65072: 0xA3E8,
+ 65353 - 65072: 0xA3E9,
+ 65354 - 65072: 0xA3EA,
+ 65355 - 65072: 0xA3EB,
+ 65356 - 65072: 0xA3EC,
+ 65357 - 65072: 0xA3ED,
+ 65358 - 65072: 0xA3EE,
+ 65359 - 65072: 0xA3EF,
+ 65360 - 65072: 0xA3F0,
+ 65361 - 65072: 0xA3F1,
+ 65362 - 65072: 0xA3F2,
+ 65363 - 65072: 0xA3F3,
+ 65364 - 65072: 0xA3F4,
+ 65365 - 65072: 0xA3F5,
+ 65366 - 65072: 0xA3F6,
+ 65367 - 65072: 0xA3F7,
+ 65368 - 65072: 0xA3F8,
+ 65369 - 65072: 0xA3F9,
+ 65370 - 65072: 0xA3FA,
+ 65371 - 65072: 0xA3FB,
+ 65372 - 65072: 0xA3FC,
+ 65373 - 65072: 0xA3FD,
+ 65374 - 65072: 0xA1AB,
+ 65504 - 65072: 0xA1E9,
+ 65505 - 65072: 0xA1EA,
+ 65506 - 65072: 0xA956,
+ 65507 - 65072: 0xA3FE,
+ 65508 - 65072: 0xA957,
+ 65509 - 65072: 0xA3A4,
+}
+
+const encode4Low, encode4High = 63788, 64042
+
+var encode4 = [...]uint16{
+ 63788 - 63788: 0xFD9C,
+ 63865 - 63788: 0xFD9D,
+ 63893 - 63788: 0xFD9E,
+ 63975 - 63788: 0xFD9F,
+ 63985 - 63788: 0xFDA0,
+ 64012 - 63788: 0xFE40,
+ 64013 - 63788: 0xFE41,
+ 64014 - 63788: 0xFE42,
+ 64015 - 63788: 0xFE43,
+ 64017 - 63788: 0xFE44,
+ 64019 - 63788: 0xFE45,
+ 64020 - 63788: 0xFE46,
+ 64024 - 63788: 0xFE47,
+ 64031 - 63788: 0xFE48,
+ 64032 - 63788: 0xFE49,
+ 64033 - 63788: 0xFE4A,
+ 64035 - 63788: 0xFE4B,
+ 64036 - 63788: 0xFE4C,
+ 64039 - 63788: 0xFE4D,
+ 64040 - 63788: 0xFE4E,
+ 64041 - 63788: 0xFE4F,
+}
diff --git a/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go b/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go
new file mode 100644
index 000000000..1fcddde08
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go
@@ -0,0 +1,199 @@
+// 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 traditionalchinese
+
+import (
+ "unicode/utf8"
+
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/internal"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/transform"
+)
+
+// All is a list of all defined encodings in this package.
+var All = []encoding.Encoding{Big5}
+
+// Big5 is the Big5 encoding, also known as Code Page 950.
+var Big5 encoding.Encoding = &big5
+
+var big5 = internal.Encoding{
+ &internal.SimpleEncoding{big5Decoder{}, big5Encoder{}},
+ "Big5",
+ identifier.Big5,
+}
+
+type big5Decoder struct{ transform.NopResetter }
+
+func (big5Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size, s := rune(0), 0, ""
+loop:
+ for ; nSrc < len(src); nSrc += size {
+ switch c0 := src[nSrc]; {
+ case c0 < utf8.RuneSelf:
+ r, size = rune(c0), 1
+
+ case 0x81 <= c0 && c0 < 0xff:
+ if nSrc+1 >= len(src) {
+ if !atEOF {
+ err = transform.ErrShortSrc
+ break loop
+ }
+ r, size = utf8.RuneError, 1
+ goto write
+ }
+ c1 := src[nSrc+1]
+ switch {
+ case 0x40 <= c1 && c1 < 0x7f:
+ c1 -= 0x40
+ case 0xa1 <= c1 && c1 < 0xff:
+ c1 -= 0x62
+ case c1 < 0x40:
+ r, size = utf8.RuneError, 1
+ goto write
+ default:
+ r, size = utf8.RuneError, 2
+ goto write
+ }
+ r, size = '\ufffd', 2
+ if i := int(c0-0x81)*157 + int(c1); i < len(decode) {
+ if 1133 <= i && i < 1167 {
+ // The two-rune special cases for LATIN CAPITAL / SMALL E WITH CIRCUMFLEX
+ // AND MACRON / CARON are from http://encoding.spec.whatwg.org/#big5
+ switch i {
+ case 1133:
+ s = "\u00CA\u0304"
+ goto writeStr
+ case 1135:
+ s = "\u00CA\u030C"
+ goto writeStr
+ case 1164:
+ s = "\u00EA\u0304"
+ goto writeStr
+ case 1166:
+ s = "\u00EA\u030C"
+ goto writeStr
+ }
+ }
+ r = rune(decode[i])
+ if r == 0 {
+ r = '\ufffd'
+ }
+ }
+
+ default:
+ r, size = utf8.RuneError, 1
+ }
+
+ write:
+ if nDst+utf8.RuneLen(r) > len(dst) {
+ err = transform.ErrShortDst
+ break loop
+ }
+ nDst += utf8.EncodeRune(dst[nDst:], r)
+ continue loop
+
+ writeStr:
+ if nDst+len(s) > len(dst) {
+ err = transform.ErrShortDst
+ break loop
+ }
+ nDst += copy(dst[nDst:], s)
+ continue loop
+ }
+ return nDst, nSrc, err
+}
+
+type big5Encoder struct{ transform.NopResetter }
+
+func (big5Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ r, size := rune(0), 0
+ for ; nSrc < len(src); nSrc += size {
+ r = rune(src[nSrc])
+
+ // Decode a 1-byte rune.
+ if r < utf8.RuneSelf {
+ size = 1
+ if nDst >= len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst] = uint8(r)
+ nDst++
+ continue
+
+ } else {
+ // Decode a multi-byte rune.
+ r, size = utf8.DecodeRune(src[nSrc:])
+ if size == 1 {
+ // All valid runes of size 1 (those below utf8.RuneSelf) were
+ // handled above. We have invalid UTF-8 or we haven't seen the
+ // full character yet.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+ }
+ }
+
+ if r >= utf8.RuneSelf {
+ // func init checks that the switch covers all tables.
+ switch {
+ case encode0Low <= r && r < encode0High:
+ if r = rune(encode0[r-encode0Low]); r != 0 {
+ goto write2
+ }
+ case encode1Low <= r && r < encode1High:
+ if r = rune(encode1[r-encode1Low]); r != 0 {
+ goto write2
+ }
+ case encode2Low <= r && r < encode2High:
+ if r = rune(encode2[r-encode2Low]); r != 0 {
+ goto write2
+ }
+ case encode3Low <= r && r < encode3High:
+ if r = rune(encode3[r-encode3Low]); r != 0 {
+ goto write2
+ }
+ case encode4Low <= r && r < encode4High:
+ if r = rune(encode4[r-encode4Low]); r != 0 {
+ goto write2
+ }
+ case encode5Low <= r && r < encode5High:
+ if r = rune(encode5[r-encode5Low]); r != 0 {
+ goto write2
+ }
+ case encode6Low <= r && r < encode6High:
+ if r = rune(encode6[r-encode6Low]); r != 0 {
+ goto write2
+ }
+ case encode7Low <= r && r < encode7High:
+ if r = rune(encode7[r-encode7Low]); r != 0 {
+ goto write2
+ }
+ }
+ err = internal.ErrASCIIReplacement
+ break
+ }
+
+ write2:
+ if nDst+2 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+0] = uint8(r >> 8)
+ dst[nDst+1] = uint8(r)
+ nDst += 2
+ continue
+ }
+ return nDst, nSrc, err
+}
+
+func init() {
+ // Check that the hard-coded encode switch covers all tables.
+ if numEncodeTables != 8 {
+ panic("bad numEncodeTables")
+ }
+}
diff --git a/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go b/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go
new file mode 100644
index 000000000..d909e38e5
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go
@@ -0,0 +1,37142 @@
+// generated by go run maketables.go; DO NOT EDIT
+
+// Package traditionalchinese provides Traditional Chinese encodings such as Big5.
+package traditionalchinese // import "golang.org/x/text/encoding/traditionalchinese"
+
+// decode is the decoding table from Big5 code to Unicode.
+// It is defined at http://encoding.spec.whatwg.org/index-big5.txt
+var decode = [...]uint32{
+ 942: 0x000043F0,
+ 943: 0x00004C32,
+ 944: 0x00004603,
+ 945: 0x000045A6,
+ 946: 0x00004578,
+ 947: 0x00027267,
+ 948: 0x00004D77,
+ 949: 0x000045B3,
+ 950: 0x00027CB1,
+ 951: 0x00004CE2,
+ 952: 0x00027CC5,
+ 953: 0x00003B95,
+ 954: 0x00004736,
+ 955: 0x00004744,
+ 956: 0x00004C47,
+ 957: 0x00004C40,
+ 958: 0x000242BF,
+ 959: 0x00023617,
+ 960: 0x00027352,
+ 961: 0x00026E8B,
+ 962: 0x000270D2,
+ 963: 0x00004C57,
+ 964: 0x0002A351,
+ 965: 0x0000474F,
+ 966: 0x000045DA,
+ 967: 0x00004C85,
+ 968: 0x00027C6C,
+ 969: 0x00004D07,
+ 970: 0x00004AA4,
+ 971: 0x000046A1,
+ 972: 0x00026B23,
+ 973: 0x00007225,
+ 974: 0x00025A54,
+ 975: 0x00021A63,
+ 976: 0x00023E06,
+ 977: 0x00023F61,
+ 978: 0x0000664D,
+ 979: 0x000056FB,
+ 981: 0x00007D95,
+ 982: 0x0000591D,
+ 983: 0x00028BB9,
+ 984: 0x00003DF4,
+ 985: 0x00009734,
+ 986: 0x00027BEF,
+ 987: 0x00005BDB,
+ 988: 0x00021D5E,
+ 989: 0x00005AA4,
+ 990: 0x00003625,
+ 991: 0x00029EB0,
+ 992: 0x00005AD1,
+ 993: 0x00005BB7,
+ 994: 0x00005CFC,
+ 995: 0x0000676E,
+ 996: 0x00008593,
+ 997: 0x00029945,
+ 998: 0x00007461,
+ 999: 0x0000749D,
+ 1000: 0x00003875,
+ 1001: 0x00021D53,
+ 1002: 0x0002369E,
+ 1003: 0x00026021,
+ 1004: 0x00003EEC,
+ 1005: 0x000258DE,
+ 1006: 0x00003AF5,
+ 1007: 0x00007AFC,
+ 1008: 0x00009F97,
+ 1009: 0x00024161,
+ 1010: 0x0002890D,
+ 1011: 0x000231EA,
+ 1012: 0x00020A8A,
+ 1013: 0x0002325E,
+ 1014: 0x0000430A,
+ 1015: 0x00008484,
+ 1016: 0x00009F96,
+ 1017: 0x0000942F,
+ 1018: 0x00004930,
+ 1019: 0x00008613,
+ 1020: 0x00005896,
+ 1021: 0x0000974A,
+ 1022: 0x00009218,
+ 1023: 0x000079D0,
+ 1024: 0x00007A32,
+ 1025: 0x00006660,
+ 1026: 0x00006A29,
+ 1027: 0x0000889D,
+ 1028: 0x0000744C,
+ 1029: 0x00007BC5,
+ 1030: 0x00006782,
+ 1031: 0x00007A2C,
+ 1032: 0x0000524F,
+ 1033: 0x00009046,
+ 1034: 0x000034E6,
+ 1035: 0x000073C4,
+ 1036: 0x00025DB9,
+ 1037: 0x000074C6,
+ 1038: 0x00009FC7,
+ 1039: 0x000057B3,
+ 1040: 0x0000492F,
+ 1041: 0x0000544C,
+ 1042: 0x00004131,
+ 1043: 0x0002368E,
+ 1044: 0x00005818,
+ 1045: 0x00007A72,
+ 1046: 0x00027B65,
+ 1047: 0x00008B8F,
+ 1048: 0x000046AE,
+ 1049: 0x00026E88,
+ 1050: 0x00004181,
+ 1051: 0x00025D99,
+ 1052: 0x00007BAE,
+ 1053: 0x000224BC,
+ 1054: 0x00009FC8,
+ 1055: 0x000224C1,
+ 1056: 0x000224C9,
+ 1057: 0x000224CC,
+ 1058: 0x00009FC9,
+ 1059: 0x00008504,
+ 1060: 0x000235BB,
+ 1061: 0x000040B4,
+ 1062: 0x00009FCA,
+ 1063: 0x000044E1,
+ 1064: 0x0002ADFF,
+ 1065: 0x000062C1,
+ 1066: 0x0000706E,
+ 1067: 0x00009FCB,
+ 1099: 0x000031C0,
+ 1100: 0x000031C1,
+ 1101: 0x000031C2,
+ 1102: 0x000031C3,
+ 1103: 0x000031C4,
+ 1104: 0x0002010C,
+ 1105: 0x000031C5,
+ 1106: 0x000200D1,
+ 1107: 0x000200CD,
+ 1108: 0x000031C6,
+ 1109: 0x000031C7,
+ 1110: 0x000200CB,
+ 1111: 0x00021FE8,
+ 1112: 0x000031C8,
+ 1113: 0x000200CA,
+ 1114: 0x000031C9,
+ 1115: 0x000031CA,
+ 1116: 0x000031CB,
+ 1117: 0x000031CC,
+ 1118: 0x0002010E,
+ 1119: 0x000031CD,
+ 1120: 0x000031CE,
+ 1121: 0x00000100,
+ 1122: 0x000000C1,
+ 1123: 0x000001CD,
+ 1124: 0x000000C0,
+ 1125: 0x00000112,
+ 1126: 0x000000C9,
+ 1127: 0x0000011A,
+ 1128: 0x000000C8,
+ 1129: 0x0000014C,
+ 1130: 0x000000D3,
+ 1131: 0x000001D1,
+ 1132: 0x000000D2,
+ 1134: 0x00001EBE,
+ 1136: 0x00001EC0,
+ 1137: 0x000000CA,
+ 1138: 0x00000101,
+ 1139: 0x000000E1,
+ 1140: 0x000001CE,
+ 1141: 0x000000E0,
+ 1142: 0x00000251,
+ 1143: 0x00000113,
+ 1144: 0x000000E9,
+ 1145: 0x0000011B,
+ 1146: 0x000000E8,
+ 1147: 0x0000012B,
+ 1148: 0x000000ED,
+ 1149: 0x000001D0,
+ 1150: 0x000000EC,
+ 1151: 0x0000014D,
+ 1152: 0x000000F3,
+ 1153: 0x000001D2,
+ 1154: 0x000000F2,
+ 1155: 0x0000016B,
+ 1156: 0x000000FA,
+ 1157: 0x000001D4,
+ 1158: 0x000000F9,
+ 1159: 0x000001D6,
+ 1160: 0x000001D8,
+ 1161: 0x000001DA,
+ 1162: 0x000001DC,
+ 1163: 0x000000FC,
+ 1165: 0x00001EBF,
+ 1167: 0x00001EC1,
+ 1168: 0x000000EA,
+ 1169: 0x00000261,
+ 1170: 0x000023DA,
+ 1171: 0x000023DB,
+ 1256: 0x0002A3A9,
+ 1257: 0x00021145,
+ 1259: 0x0000650A,
+ 1262: 0x00004E3D,
+ 1263: 0x00006EDD,
+ 1264: 0x00009D4E,
+ 1265: 0x000091DF,
+ 1268: 0x00027735,
+ 1269: 0x00006491,
+ 1270: 0x00004F1A,
+ 1271: 0x00004F28,
+ 1272: 0x00004FA8,
+ 1273: 0x00005156,
+ 1274: 0x00005174,
+ 1275: 0x0000519C,
+ 1276: 0x000051E4,
+ 1277: 0x000052A1,
+ 1278: 0x000052A8,
+ 1279: 0x0000533B,
+ 1280: 0x0000534E,
+ 1281: 0x000053D1,
+ 1282: 0x000053D8,
+ 1283: 0x000056E2,
+ 1284: 0x000058F0,
+ 1285: 0x00005904,
+ 1286: 0x00005907,
+ 1287: 0x00005932,
+ 1288: 0x00005934,
+ 1289: 0x00005B66,
+ 1290: 0x00005B9E,
+ 1291: 0x00005B9F,
+ 1292: 0x00005C9A,
+ 1293: 0x00005E86,
+ 1294: 0x0000603B,
+ 1295: 0x00006589,
+ 1296: 0x000067FE,
+ 1297: 0x00006804,
+ 1298: 0x00006865,
+ 1299: 0x00006D4E,
+ 1300: 0x000070BC,
+ 1301: 0x00007535,
+ 1302: 0x00007EA4,
+ 1303: 0x00007EAC,
+ 1304: 0x00007EBA,
+ 1305: 0x00007EC7,
+ 1306: 0x00007ECF,
+ 1307: 0x00007EDF,
+ 1308: 0x00007F06,
+ 1309: 0x00007F37,
+ 1310: 0x0000827A,
+ 1311: 0x000082CF,
+ 1312: 0x0000836F,
+ 1313: 0x000089C6,
+ 1314: 0x00008BBE,
+ 1315: 0x00008BE2,
+ 1316: 0x00008F66,
+ 1317: 0x00008F67,
+ 1318: 0x00008F6E,
+ 1319: 0x00007411,
+ 1320: 0x00007CFC,
+ 1321: 0x00007DCD,
+ 1322: 0x00006946,
+ 1323: 0x00007AC9,
+ 1324: 0x00005227,
+ 1329: 0x0000918C,
+ 1330: 0x000078B8,
+ 1331: 0x0000915E,
+ 1332: 0x000080BC,
+ 1334: 0x00008D0B,
+ 1335: 0x000080F6,
+ 1336: 0x000209E7,
+ 1339: 0x0000809F,
+ 1340: 0x00009EC7,
+ 1341: 0x00004CCD,
+ 1342: 0x00009DC9,
+ 1343: 0x00009E0C,
+ 1344: 0x00004C3E,
+ 1345: 0x00029DF6,
+ 1346: 0x0002700E,
+ 1347: 0x00009E0A,
+ 1348: 0x0002A133,
+ 1349: 0x000035C1,
+ 1351: 0x00006E9A,
+ 1352: 0x0000823E,
+ 1353: 0x00007519,
+ 1355: 0x00004911,
+ 1356: 0x00009A6C,
+ 1357: 0x00009A8F,
+ 1358: 0x00009F99,
+ 1359: 0x00007987,
+ 1360: 0x0002846C,
+ 1361: 0x00021DCA,
+ 1362: 0x000205D0,
+ 1363: 0x00022AE6,
+ 1364: 0x00004E24,
+ 1365: 0x00004E81,
+ 1366: 0x00004E80,
+ 1367: 0x00004E87,
+ 1368: 0x00004EBF,
+ 1369: 0x00004EEB,
+ 1370: 0x00004F37,
+ 1371: 0x0000344C,
+ 1372: 0x00004FBD,
+ 1373: 0x00003E48,
+ 1374: 0x00005003,
+ 1375: 0x00005088,
+ 1376: 0x0000347D,
+ 1377: 0x00003493,
+ 1378: 0x000034A5,
+ 1379: 0x00005186,
+ 1380: 0x00005905,
+ 1381: 0x000051DB,
+ 1382: 0x000051FC,
+ 1383: 0x00005205,
+ 1384: 0x00004E89,
+ 1385: 0x00005279,
+ 1386: 0x00005290,
+ 1387: 0x00005327,
+ 1388: 0x000035C7,
+ 1389: 0x000053A9,
+ 1390: 0x00003551,
+ 1391: 0x000053B0,
+ 1392: 0x00003553,
+ 1393: 0x000053C2,
+ 1394: 0x00005423,
+ 1395: 0x0000356D,
+ 1396: 0x00003572,
+ 1397: 0x00003681,
+ 1398: 0x00005493,
+ 1399: 0x000054A3,
+ 1400: 0x000054B4,
+ 1401: 0x000054B9,
+ 1402: 0x000054D0,
+ 1403: 0x000054EF,
+ 1404: 0x00005518,
+ 1405: 0x00005523,
+ 1406: 0x00005528,
+ 1407: 0x00003598,
+ 1408: 0x0000553F,
+ 1409: 0x000035A5,
+ 1410: 0x000035BF,
+ 1411: 0x000055D7,
+ 1412: 0x000035C5,
+ 1413: 0x00027D84,
+ 1414: 0x00005525,
+ 1416: 0x00020C42,
+ 1417: 0x00020D15,
+ 1418: 0x0002512B,
+ 1419: 0x00005590,
+ 1420: 0x00022CC6,
+ 1421: 0x000039EC,
+ 1422: 0x00020341,
+ 1423: 0x00008E46,
+ 1424: 0x00024DB8,
+ 1425: 0x000294E5,
+ 1426: 0x00004053,
+ 1427: 0x000280BE,
+ 1428: 0x0000777A,
+ 1429: 0x00022C38,
+ 1430: 0x00003A34,
+ 1431: 0x000047D5,
+ 1432: 0x0002815D,
+ 1433: 0x000269F2,
+ 1434: 0x00024DEA,
+ 1435: 0x000064DD,
+ 1436: 0x00020D7C,
+ 1437: 0x00020FB4,
+ 1438: 0x00020CD5,
+ 1439: 0x000210F4,
+ 1440: 0x0000648D,
+ 1441: 0x00008E7E,
+ 1442: 0x00020E96,
+ 1443: 0x00020C0B,
+ 1444: 0x00020F64,
+ 1445: 0x00022CA9,
+ 1446: 0x00028256,
+ 1447: 0x000244D3,
+ 1449: 0x00020D46,
+ 1450: 0x00029A4D,
+ 1451: 0x000280E9,
+ 1452: 0x000047F4,
+ 1453: 0x00024EA7,
+ 1454: 0x00022CC2,
+ 1455: 0x00009AB2,
+ 1456: 0x00003A67,
+ 1457: 0x000295F4,
+ 1458: 0x00003FED,
+ 1459: 0x00003506,
+ 1460: 0x000252C7,
+ 1461: 0x000297D4,
+ 1462: 0x000278C8,
+ 1463: 0x00022D44,
+ 1464: 0x00009D6E,
+ 1465: 0x00009815,
+ 1467: 0x000043D9,
+ 1468: 0x000260A5,
+ 1469: 0x000064B4,
+ 1470: 0x000054E3,
+ 1471: 0x00022D4C,
+ 1472: 0x00022BCA,
+ 1473: 0x00021077,
+ 1474: 0x000039FB,
+ 1475: 0x0002106F,
+ 1476: 0x000266DA,
+ 1477: 0x00026716,
+ 1478: 0x000279A0,
+ 1479: 0x000064EA,
+ 1480: 0x00025052,
+ 1481: 0x00020C43,
+ 1482: 0x00008E68,
+ 1483: 0x000221A1,
+ 1484: 0x00028B4C,
+ 1485: 0x00020731,
+ 1487: 0x0000480B,
+ 1488: 0x000201A9,
+ 1489: 0x00003FFA,
+ 1490: 0x00005873,
+ 1491: 0x00022D8D,
+ 1493: 0x000245C8,
+ 1494: 0x000204FC,
+ 1495: 0x00026097,
+ 1496: 0x00020F4C,
+ 1497: 0x00020D96,
+ 1498: 0x00005579,
+ 1499: 0x000040BB,
+ 1500: 0x000043BA,
+ 1502: 0x00004AB4,
+ 1503: 0x00022A66,
+ 1504: 0x0002109D,
+ 1505: 0x000081AA,
+ 1506: 0x000098F5,
+ 1507: 0x00020D9C,
+ 1508: 0x00006379,
+ 1509: 0x000039FE,
+ 1510: 0x00022775,
+ 1511: 0x00008DC0,
+ 1512: 0x000056A1,
+ 1513: 0x0000647C,
+ 1514: 0x00003E43,
+ 1516: 0x0002A601,
+ 1517: 0x00020E09,
+ 1518: 0x00022ACF,
+ 1519: 0x00022CC9,
+ 1521: 0x000210C8,
+ 1522: 0x000239C2,
+ 1523: 0x00003992,
+ 1524: 0x00003A06,
+ 1525: 0x0002829B,
+ 1526: 0x00003578,
+ 1527: 0x00025E49,
+ 1528: 0x000220C7,
+ 1529: 0x00005652,
+ 1530: 0x00020F31,
+ 1531: 0x00022CB2,
+ 1532: 0x00029720,
+ 1533: 0x000034BC,
+ 1534: 0x00006C3D,
+ 1535: 0x00024E3B,
+ 1538: 0x00027574,
+ 1539: 0x00022E8B,
+ 1540: 0x00022208,
+ 1541: 0x0002A65B,
+ 1542: 0x00028CCD,
+ 1543: 0x00020E7A,
+ 1544: 0x00020C34,
+ 1545: 0x0002681C,
+ 1546: 0x00007F93,
+ 1547: 0x000210CF,
+ 1548: 0x00022803,
+ 1549: 0x00022939,
+ 1550: 0x000035FB,
+ 1551: 0x000251E3,
+ 1552: 0x00020E8C,
+ 1553: 0x00020F8D,
+ 1554: 0x00020EAA,
+ 1555: 0x00003F93,
+ 1556: 0x00020F30,
+ 1557: 0x00020D47,
+ 1558: 0x0002114F,
+ 1559: 0x00020E4C,
+ 1561: 0x00020EAB,
+ 1562: 0x00020BA9,
+ 1563: 0x00020D48,
+ 1564: 0x000210C0,
+ 1565: 0x0002113D,
+ 1566: 0x00003FF9,
+ 1567: 0x00022696,
+ 1568: 0x00006432,
+ 1569: 0x00020FAD,
+ 1570: 0x000233F4,
+ 1571: 0x00027639,
+ 1572: 0x00022BCE,
+ 1573: 0x00020D7E,
+ 1574: 0x00020D7F,
+ 1575: 0x00022C51,
+ 1576: 0x00022C55,
+ 1577: 0x00003A18,
+ 1578: 0x00020E98,
+ 1579: 0x000210C7,
+ 1580: 0x00020F2E,
+ 1581: 0x0002A632,
+ 1582: 0x00026B50,
+ 1583: 0x00028CD2,
+ 1584: 0x00028D99,
+ 1585: 0x00028CCA,
+ 1586: 0x000095AA,
+ 1587: 0x000054CC,
+ 1588: 0x000082C4,
+ 1589: 0x000055B9,
+ 1591: 0x00029EC3,
+ 1592: 0x00009C26,
+ 1593: 0x00009AB6,
+ 1594: 0x0002775E,
+ 1595: 0x00022DEE,
+ 1596: 0x00007140,
+ 1597: 0x0000816D,
+ 1598: 0x000080EC,
+ 1599: 0x00005C1C,
+ 1600: 0x00026572,
+ 1601: 0x00008134,
+ 1602: 0x00003797,
+ 1603: 0x0000535F,
+ 1604: 0x000280BD,
+ 1605: 0x000091B6,
+ 1606: 0x00020EFA,
+ 1607: 0x00020E0F,
+ 1608: 0x00020E77,
+ 1609: 0x00020EFB,
+ 1610: 0x000035DD,
+ 1611: 0x00024DEB,
+ 1612: 0x00003609,
+ 1613: 0x00020CD6,
+ 1614: 0x000056AF,
+ 1615: 0x000227B5,
+ 1616: 0x000210C9,
+ 1617: 0x00020E10,
+ 1618: 0x00020E78,
+ 1619: 0x00021078,
+ 1620: 0x00021148,
+ 1621: 0x00028207,
+ 1622: 0x00021455,
+ 1623: 0x00020E79,
+ 1624: 0x00024E50,
+ 1625: 0x00022DA4,
+ 1626: 0x00005A54,
+ 1627: 0x0002101D,
+ 1628: 0x0002101E,
+ 1629: 0x000210F5,
+ 1630: 0x000210F6,
+ 1631: 0x0000579C,
+ 1632: 0x00020E11,
+ 1633: 0x00027694,
+ 1634: 0x000282CD,
+ 1635: 0x00020FB5,
+ 1636: 0x00020E7B,
+ 1637: 0x0002517E,
+ 1638: 0x00003703,
+ 1639: 0x00020FB6,
+ 1640: 0x00021180,
+ 1641: 0x000252D8,
+ 1642: 0x0002A2BD,
+ 1643: 0x000249DA,
+ 1644: 0x0002183A,
+ 1645: 0x00024177,
+ 1646: 0x0002827C,
+ 1647: 0x00005899,
+ 1648: 0x00005268,
+ 1649: 0x0000361A,
+ 1650: 0x0002573D,
+ 1651: 0x00007BB2,
+ 1652: 0x00005B68,
+ 1653: 0x00004800,
+ 1654: 0x00004B2C,
+ 1655: 0x00009F27,
+ 1656: 0x000049E7,
+ 1657: 0x00009C1F,
+ 1658: 0x00009B8D,
+ 1659: 0x00025B74,
+ 1660: 0x0002313D,
+ 1661: 0x000055FB,
+ 1662: 0x000035F2,
+ 1663: 0x00005689,
+ 1664: 0x00004E28,
+ 1665: 0x00005902,
+ 1666: 0x00021BC1,
+ 1667: 0x0002F878,
+ 1668: 0x00009751,
+ 1669: 0x00020086,
+ 1670: 0x00004E5B,
+ 1671: 0x00004EBB,
+ 1672: 0x0000353E,
+ 1673: 0x00005C23,
+ 1674: 0x00005F51,
+ 1675: 0x00005FC4,
+ 1676: 0x000038FA,
+ 1677: 0x0000624C,
+ 1678: 0x00006535,
+ 1679: 0x00006B7A,
+ 1680: 0x00006C35,
+ 1681: 0x00006C3A,
+ 1682: 0x0000706C,
+ 1683: 0x0000722B,
+ 1684: 0x00004E2C,
+ 1685: 0x000072AD,
+ 1686: 0x000248E9,
+ 1687: 0x00007F52,
+ 1688: 0x0000793B,
+ 1689: 0x00007CF9,
+ 1690: 0x00007F53,
+ 1691: 0x0002626A,
+ 1692: 0x000034C1,
+ 1694: 0x0002634B,
+ 1695: 0x00008002,
+ 1696: 0x00008080,
+ 1697: 0x00026612,
+ 1698: 0x00026951,
+ 1699: 0x0000535D,
+ 1700: 0x00008864,
+ 1701: 0x000089C1,
+ 1702: 0x000278B2,
+ 1703: 0x00008BA0,
+ 1704: 0x00008D1D,
+ 1705: 0x00009485,
+ 1706: 0x00009578,
+ 1707: 0x0000957F,
+ 1708: 0x000095E8,
+ 1709: 0x00028E0F,
+ 1710: 0x000097E6,
+ 1711: 0x00009875,
+ 1712: 0x000098CE,
+ 1713: 0x000098DE,
+ 1714: 0x00009963,
+ 1715: 0x00029810,
+ 1716: 0x00009C7C,
+ 1717: 0x00009E1F,
+ 1718: 0x00009EC4,
+ 1719: 0x00006B6F,
+ 1720: 0x0000F907,
+ 1721: 0x00004E37,
+ 1722: 0x00020087,
+ 1723: 0x0000961D,
+ 1724: 0x00006237,
+ 1725: 0x000094A2,
+ 1727: 0x0000503B,
+ 1728: 0x00006DFE,
+ 1729: 0x00029C73,
+ 1730: 0x00009FA6,
+ 1731: 0x00003DC9,
+ 1732: 0x0000888F,
+ 1733: 0x0002414E,
+ 1734: 0x00007077,
+ 1735: 0x00005CF5,
+ 1736: 0x00004B20,
+ 1737: 0x000251CD,
+ 1738: 0x00003559,
+ 1739: 0x00025D30,
+ 1740: 0x00006122,
+ 1741: 0x00028A32,
+ 1742: 0x00008FA7,
+ 1743: 0x000091F6,
+ 1744: 0x00007191,
+ 1745: 0x00006719,
+ 1746: 0x000073BA,
+ 1747: 0x00023281,
+ 1748: 0x0002A107,
+ 1749: 0x00003C8B,
+ 1750: 0x00021980,
+ 1751: 0x00004B10,
+ 1752: 0x000078E4,
+ 1753: 0x00007402,
+ 1754: 0x000051AE,
+ 1755: 0x0002870F,
+ 1756: 0x00004009,
+ 1757: 0x00006A63,
+ 1758: 0x0002A2BA,
+ 1759: 0x00004223,
+ 1760: 0x0000860F,
+ 1761: 0x00020A6F,
+ 1762: 0x00007A2A,
+ 1763: 0x00029947,
+ 1764: 0x00028AEA,
+ 1765: 0x00009755,
+ 1766: 0x0000704D,
+ 1767: 0x00005324,
+ 1768: 0x0002207E,
+ 1769: 0x000093F4,
+ 1770: 0x000076D9,
+ 1771: 0x000289E3,
+ 1772: 0x00009FA7,
+ 1773: 0x000077DD,
+ 1774: 0x00004EA3,
+ 1775: 0x00004FF0,
+ 1776: 0x000050BC,
+ 1777: 0x00004E2F,
+ 1778: 0x00004F17,
+ 1779: 0x00009FA8,
+ 1780: 0x00005434,
+ 1781: 0x00007D8B,
+ 1782: 0x00005892,
+ 1783: 0x000058D0,
+ 1784: 0x00021DB6,
+ 1785: 0x00005E92,
+ 1786: 0x00005E99,
+ 1787: 0x00005FC2,
+ 1788: 0x00022712,
+ 1789: 0x0000658B,
+ 1790: 0x000233F9,
+ 1791: 0x00006919,
+ 1792: 0x00006A43,
+ 1793: 0x00023C63,
+ 1794: 0x00006CFF,
+ 1796: 0x00007200,
+ 1797: 0x00024505,
+ 1798: 0x0000738C,
+ 1799: 0x00003EDB,
+ 1800: 0x00024A13,
+ 1801: 0x00005B15,
+ 1802: 0x000074B9,
+ 1803: 0x00008B83,
+ 1804: 0x00025CA4,
+ 1805: 0x00025695,
+ 1806: 0x00007A93,
+ 1807: 0x00007BEC,
+ 1808: 0x00007CC3,
+ 1809: 0x00007E6C,
+ 1810: 0x000082F8,
+ 1811: 0x00008597,
+ 1812: 0x00009FA9,
+ 1813: 0x00008890,
+ 1814: 0x00009FAA,
+ 1815: 0x00008EB9,
+ 1816: 0x00009FAB,
+ 1817: 0x00008FCF,
+ 1818: 0x0000855F,
+ 1819: 0x000099E0,
+ 1820: 0x00009221,
+ 1821: 0x00009FAC,
+ 1822: 0x00028DB9,
+ 1823: 0x0002143F,
+ 1824: 0x00004071,
+ 1825: 0x000042A2,
+ 1826: 0x00005A1A,
+ 1830: 0x00009868,
+ 1831: 0x0000676B,
+ 1832: 0x00004276,
+ 1833: 0x0000573D,
+ 1835: 0x000085D6,
+ 1836: 0x0002497B,
+ 1837: 0x000082BF,
+ 1838: 0x0002710D,
+ 1839: 0x00004C81,
+ 1840: 0x00026D74,
+ 1841: 0x00005D7B,
+ 1842: 0x00026B15,
+ 1843: 0x00026FBE,
+ 1844: 0x00009FAD,
+ 1845: 0x00009FAE,
+ 1846: 0x00005B96,
+ 1847: 0x00009FAF,
+ 1848: 0x000066E7,
+ 1849: 0x00007E5B,
+ 1850: 0x00006E57,
+ 1851: 0x000079CA,
+ 1852: 0x00003D88,
+ 1853: 0x000044C3,
+ 1854: 0x00023256,
+ 1855: 0x00022796,
+ 1856: 0x0000439A,
+ 1857: 0x00004536,
+ 1859: 0x00005CD5,
+ 1860: 0x00023B1A,
+ 1861: 0x00008AF9,
+ 1862: 0x00005C78,
+ 1863: 0x00003D12,
+ 1864: 0x00023551,
+ 1865: 0x00005D78,
+ 1866: 0x00009FB2,
+ 1867: 0x00007157,
+ 1868: 0x00004558,
+ 1869: 0x000240EC,
+ 1870: 0x00021E23,
+ 1871: 0x00004C77,
+ 1872: 0x00003978,
+ 1873: 0x0000344A,
+ 1874: 0x000201A4,
+ 1875: 0x00026C41,
+ 1876: 0x00008ACC,
+ 1877: 0x00004FB4,
+ 1878: 0x00020239,
+ 1879: 0x000059BF,
+ 1880: 0x0000816C,
+ 1881: 0x00009856,
+ 1882: 0x000298FA,
+ 1883: 0x00005F3B,
+ 1884: 0x00020B9F,
+ 1886: 0x000221C1,
+ 1887: 0x0002896D,
+ 1888: 0x00004102,
+ 1889: 0x000046BB,
+ 1890: 0x00029079,
+ 1891: 0x00003F07,
+ 1892: 0x00009FB3,
+ 1893: 0x0002A1B5,
+ 1894: 0x000040F8,
+ 1895: 0x000037D6,
+ 1896: 0x000046F7,
+ 1897: 0x00026C46,
+ 1898: 0x0000417C,
+ 1899: 0x000286B2,
+ 1900: 0x000273FF,
+ 1901: 0x0000456D,
+ 1902: 0x000038D4,
+ 1903: 0x0002549A,
+ 1904: 0x00004561,
+ 1905: 0x0000451B,
+ 1906: 0x00004D89,
+ 1907: 0x00004C7B,
+ 1908: 0x00004D76,
+ 1909: 0x000045EA,
+ 1910: 0x00003FC8,
+ 1911: 0x00024B0F,
+ 1912: 0x00003661,
+ 1913: 0x000044DE,
+ 1914: 0x000044BD,
+ 1915: 0x000041ED,
+ 1916: 0x00005D3E,
+ 1917: 0x00005D48,
+ 1918: 0x00005D56,
+ 1919: 0x00003DFC,
+ 1920: 0x0000380F,
+ 1921: 0x00005DA4,
+ 1922: 0x00005DB9,
+ 1923: 0x00003820,
+ 1924: 0x00003838,
+ 1925: 0x00005E42,
+ 1926: 0x00005EBD,
+ 1927: 0x00005F25,
+ 1928: 0x00005F83,
+ 1929: 0x00003908,
+ 1930: 0x00003914,
+ 1931: 0x0000393F,
+ 1932: 0x0000394D,
+ 1933: 0x000060D7,
+ 1934: 0x0000613D,
+ 1935: 0x00005CE5,
+ 1936: 0x00003989,
+ 1937: 0x000061B7,
+ 1938: 0x000061B9,
+ 1939: 0x000061CF,
+ 1940: 0x000039B8,
+ 1941: 0x0000622C,
+ 1942: 0x00006290,
+ 1943: 0x000062E5,
+ 1944: 0x00006318,
+ 1945: 0x000039F8,
+ 1946: 0x000056B1,
+ 1947: 0x00003A03,
+ 1948: 0x000063E2,
+ 1949: 0x000063FB,
+ 1950: 0x00006407,
+ 1951: 0x0000645A,
+ 1952: 0x00003A4B,
+ 1953: 0x000064C0,
+ 1954: 0x00005D15,
+ 1955: 0x00005621,
+ 1956: 0x00009F9F,
+ 1957: 0x00003A97,
+ 1958: 0x00006586,
+ 1959: 0x00003ABD,
+ 1960: 0x000065FF,
+ 1961: 0x00006653,
+ 1962: 0x00003AF2,
+ 1963: 0x00006692,
+ 1964: 0x00003B22,
+ 1965: 0x00006716,
+ 1966: 0x00003B42,
+ 1967: 0x000067A4,
+ 1968: 0x00006800,
+ 1969: 0x00003B58,
+ 1970: 0x0000684A,
+ 1971: 0x00006884,
+ 1972: 0x00003B72,
+ 1973: 0x00003B71,
+ 1974: 0x00003B7B,
+ 1975: 0x00006909,
+ 1976: 0x00006943,
+ 1977: 0x0000725C,
+ 1978: 0x00006964,
+ 1979: 0x0000699F,
+ 1980: 0x00006985,
+ 1981: 0x00003BBC,
+ 1982: 0x000069D6,
+ 1983: 0x00003BDD,
+ 1984: 0x00006A65,
+ 1985: 0x00006A74,
+ 1986: 0x00006A71,
+ 1987: 0x00006A82,
+ 1988: 0x00003BEC,
+ 1989: 0x00006A99,
+ 1990: 0x00003BF2,
+ 1991: 0x00006AAB,
+ 1992: 0x00006AB5,
+ 1993: 0x00006AD4,
+ 1994: 0x00006AF6,
+ 1995: 0x00006B81,
+ 1996: 0x00006BC1,
+ 1997: 0x00006BEA,
+ 1998: 0x00006C75,
+ 1999: 0x00006CAA,
+ 2000: 0x00003CCB,
+ 2001: 0x00006D02,
+ 2002: 0x00006D06,
+ 2003: 0x00006D26,
+ 2004: 0x00006D81,
+ 2005: 0x00003CEF,
+ 2006: 0x00006DA4,
+ 2007: 0x00006DB1,
+ 2008: 0x00006E15,
+ 2009: 0x00006E18,
+ 2010: 0x00006E29,
+ 2011: 0x00006E86,
+ 2012: 0x000289C0,
+ 2013: 0x00006EBB,
+ 2014: 0x00006EE2,
+ 2015: 0x00006EDA,
+ 2016: 0x00009F7F,
+ 2017: 0x00006EE8,
+ 2018: 0x00006EE9,
+ 2019: 0x00006F24,
+ 2020: 0x00006F34,
+ 2021: 0x00003D46,
+ 2022: 0x00023F41,
+ 2023: 0x00006F81,
+ 2024: 0x00006FBE,
+ 2025: 0x00003D6A,
+ 2026: 0x00003D75,
+ 2027: 0x000071B7,
+ 2028: 0x00005C99,
+ 2029: 0x00003D8A,
+ 2030: 0x0000702C,
+ 2031: 0x00003D91,
+ 2032: 0x00007050,
+ 2033: 0x00007054,
+ 2034: 0x0000706F,
+ 2035: 0x0000707F,
+ 2036: 0x00007089,
+ 2037: 0x00020325,
+ 2038: 0x000043C1,
+ 2039: 0x000035F1,
+ 2040: 0x00020ED8,
+ 2041: 0x00023ED7,
+ 2042: 0x000057BE,
+ 2043: 0x00026ED3,
+ 2044: 0x0000713E,
+ 2045: 0x000257E0,
+ 2046: 0x0000364E,
+ 2047: 0x000069A2,
+ 2048: 0x00028BE9,
+ 2049: 0x00005B74,
+ 2050: 0x00007A49,
+ 2051: 0x000258E1,
+ 2052: 0x000294D9,
+ 2053: 0x00007A65,
+ 2054: 0x00007A7D,
+ 2055: 0x000259AC,
+ 2056: 0x00007ABB,
+ 2057: 0x00007AB0,
+ 2058: 0x00007AC2,
+ 2059: 0x00007AC3,
+ 2060: 0x000071D1,
+ 2061: 0x0002648D,
+ 2062: 0x000041CA,
+ 2063: 0x00007ADA,
+ 2064: 0x00007ADD,
+ 2065: 0x00007AEA,
+ 2066: 0x000041EF,
+ 2067: 0x000054B2,
+ 2068: 0x00025C01,
+ 2069: 0x00007B0B,
+ 2070: 0x00007B55,
+ 2071: 0x00007B29,
+ 2072: 0x0002530E,
+ 2073: 0x00025CFE,
+ 2074: 0x00007BA2,
+ 2075: 0x00007B6F,
+ 2076: 0x0000839C,
+ 2077: 0x00025BB4,
+ 2078: 0x00026C7F,
+ 2079: 0x00007BD0,
+ 2080: 0x00008421,
+ 2081: 0x00007B92,
+ 2082: 0x00007BB8,
+ 2083: 0x00025D20,
+ 2084: 0x00003DAD,
+ 2085: 0x00025C65,
+ 2086: 0x00008492,
+ 2087: 0x00007BFA,
+ 2088: 0x00007C06,
+ 2089: 0x00007C35,
+ 2090: 0x00025CC1,
+ 2091: 0x00007C44,
+ 2092: 0x00007C83,
+ 2093: 0x00024882,
+ 2094: 0x00007CA6,
+ 2095: 0x0000667D,
+ 2096: 0x00024578,
+ 2097: 0x00007CC9,
+ 2098: 0x00007CC7,
+ 2099: 0x00007CE6,
+ 2100: 0x00007C74,
+ 2101: 0x00007CF3,
+ 2102: 0x00007CF5,
+ 2103: 0x00007CCE,
+ 2104: 0x00007E67,
+ 2105: 0x0000451D,
+ 2106: 0x00026E44,
+ 2107: 0x00007D5D,
+ 2108: 0x00026ED6,
+ 2109: 0x0000748D,
+ 2110: 0x00007D89,
+ 2111: 0x00007DAB,
+ 2112: 0x00007135,
+ 2113: 0x00007DB3,
+ 2114: 0x00007DD2,
+ 2115: 0x00024057,
+ 2116: 0x00026029,
+ 2117: 0x00007DE4,
+ 2118: 0x00003D13,
+ 2119: 0x00007DF5,
+ 2120: 0x000217F9,
+ 2121: 0x00007DE5,
+ 2122: 0x0002836D,
+ 2123: 0x00007E1D,
+ 2124: 0x00026121,
+ 2125: 0x0002615A,
+ 2126: 0x00007E6E,
+ 2127: 0x00007E92,
+ 2128: 0x0000432B,
+ 2129: 0x0000946C,
+ 2130: 0x00007E27,
+ 2131: 0x00007F40,
+ 2132: 0x00007F41,
+ 2133: 0x00007F47,
+ 2134: 0x00007936,
+ 2135: 0x000262D0,
+ 2136: 0x000099E1,
+ 2137: 0x00007F97,
+ 2138: 0x00026351,
+ 2139: 0x00007FA3,
+ 2140: 0x00021661,
+ 2141: 0x00020068,
+ 2142: 0x0000455C,
+ 2143: 0x00023766,
+ 2144: 0x00004503,
+ 2145: 0x0002833A,
+ 2146: 0x00007FFA,
+ 2147: 0x00026489,
+ 2148: 0x00008005,
+ 2149: 0x00008008,
+ 2150: 0x0000801D,
+ 2151: 0x00008028,
+ 2152: 0x0000802F,
+ 2153: 0x0002A087,
+ 2154: 0x00026CC3,
+ 2155: 0x0000803B,
+ 2156: 0x0000803C,
+ 2157: 0x00008061,
+ 2158: 0x00022714,
+ 2159: 0x00004989,
+ 2160: 0x00026626,
+ 2161: 0x00023DE3,
+ 2162: 0x000266E8,
+ 2163: 0x00006725,
+ 2164: 0x000080A7,
+ 2165: 0x00028A48,
+ 2166: 0x00008107,
+ 2167: 0x0000811A,
+ 2168: 0x000058B0,
+ 2169: 0x000226F6,
+ 2170: 0x00006C7F,
+ 2171: 0x00026498,
+ 2172: 0x00024FB8,
+ 2173: 0x000064E7,
+ 2174: 0x0002148A,
+ 2175: 0x00008218,
+ 2176: 0x0002185E,
+ 2177: 0x00006A53,
+ 2178: 0x00024A65,
+ 2179: 0x00024A95,
+ 2180: 0x0000447A,
+ 2181: 0x00008229,
+ 2182: 0x00020B0D,
+ 2183: 0x00026A52,
+ 2184: 0x00023D7E,
+ 2185: 0x00004FF9,
+ 2186: 0x000214FD,
+ 2187: 0x000084E2,
+ 2188: 0x00008362,
+ 2189: 0x00026B0A,
+ 2190: 0x000249A7,
+ 2191: 0x00023530,
+ 2192: 0x00021773,
+ 2193: 0x00023DF8,
+ 2194: 0x000082AA,
+ 2195: 0x0000691B,
+ 2196: 0x0002F994,
+ 2197: 0x000041DB,
+ 2198: 0x0000854B,
+ 2199: 0x000082D0,
+ 2200: 0x0000831A,
+ 2201: 0x00020E16,
+ 2202: 0x000217B4,
+ 2203: 0x000036C1,
+ 2204: 0x0002317D,
+ 2205: 0x0002355A,
+ 2206: 0x0000827B,
+ 2207: 0x000082E2,
+ 2208: 0x00008318,
+ 2209: 0x00023E8B,
+ 2210: 0x00026DA3,
+ 2211: 0x00026B05,
+ 2212: 0x00026B97,
+ 2213: 0x000235CE,
+ 2214: 0x00003DBF,
+ 2215: 0x0000831D,
+ 2216: 0x000055EC,
+ 2217: 0x00008385,
+ 2218: 0x0000450B,
+ 2219: 0x00026DA5,
+ 2220: 0x000083AC,
+ 2221: 0x000083C1,
+ 2222: 0x000083D3,
+ 2223: 0x0000347E,
+ 2224: 0x00026ED4,
+ 2225: 0x00006A57,
+ 2226: 0x0000855A,
+ 2227: 0x00003496,
+ 2228: 0x00026E42,
+ 2229: 0x00022EEF,
+ 2230: 0x00008458,
+ 2231: 0x00025BE4,
+ 2232: 0x00008471,
+ 2233: 0x00003DD3,
+ 2234: 0x000044E4,
+ 2235: 0x00006AA7,
+ 2236: 0x0000844A,
+ 2237: 0x00023CB5,
+ 2238: 0x00007958,
+ 2239: 0x000084A8,
+ 2240: 0x00026B96,
+ 2241: 0x00026E77,
+ 2242: 0x00026E43,
+ 2243: 0x000084DE,
+ 2244: 0x0000840F,
+ 2245: 0x00008391,
+ 2246: 0x000044A0,
+ 2247: 0x00008493,
+ 2248: 0x000084E4,
+ 2249: 0x00025C91,
+ 2250: 0x00004240,
+ 2251: 0x00025CC0,
+ 2252: 0x00004543,
+ 2253: 0x00008534,
+ 2254: 0x00005AF2,
+ 2255: 0x00026E99,
+ 2256: 0x00004527,
+ 2257: 0x00008573,
+ 2258: 0x00004516,
+ 2259: 0x000067BF,
+ 2260: 0x00008616,
+ 2261: 0x00028625,
+ 2262: 0x0002863B,
+ 2263: 0x000085C1,
+ 2264: 0x00027088,
+ 2265: 0x00008602,
+ 2266: 0x00021582,
+ 2267: 0x000270CD,
+ 2268: 0x0002F9B2,
+ 2269: 0x0000456A,
+ 2270: 0x00008628,
+ 2271: 0x00003648,
+ 2272: 0x000218A2,
+ 2273: 0x000053F7,
+ 2274: 0x0002739A,
+ 2275: 0x0000867E,
+ 2276: 0x00008771,
+ 2277: 0x0002A0F8,
+ 2278: 0x000087EE,
+ 2279: 0x00022C27,
+ 2280: 0x000087B1,
+ 2281: 0x000087DA,
+ 2282: 0x0000880F,
+ 2283: 0x00005661,
+ 2284: 0x0000866C,
+ 2285: 0x00006856,
+ 2286: 0x0000460F,
+ 2287: 0x00008845,
+ 2288: 0x00008846,
+ 2289: 0x000275E0,
+ 2290: 0x00023DB9,
+ 2291: 0x000275E4,
+ 2292: 0x0000885E,
+ 2293: 0x0000889C,
+ 2294: 0x0000465B,
+ 2295: 0x000088B4,
+ 2296: 0x000088B5,
+ 2297: 0x000063C1,
+ 2298: 0x000088C5,
+ 2299: 0x00007777,
+ 2300: 0x0002770F,
+ 2301: 0x00008987,
+ 2302: 0x0000898A,
+ 2303: 0x000089A6,
+ 2304: 0x000089A9,
+ 2305: 0x000089A7,
+ 2306: 0x000089BC,
+ 2307: 0x00028A25,
+ 2308: 0x000089E7,
+ 2309: 0x00027924,
+ 2310: 0x00027ABD,
+ 2311: 0x00008A9C,
+ 2312: 0x00007793,
+ 2313: 0x000091FE,
+ 2314: 0x00008A90,
+ 2315: 0x00027A59,
+ 2316: 0x00007AE9,
+ 2317: 0x00027B3A,
+ 2318: 0x00023F8F,
+ 2319: 0x00004713,
+ 2320: 0x00027B38,
+ 2321: 0x0000717C,
+ 2322: 0x00008B0C,
+ 2323: 0x00008B1F,
+ 2324: 0x00025430,
+ 2325: 0x00025565,
+ 2326: 0x00008B3F,
+ 2327: 0x00008B4C,
+ 2328: 0x00008B4D,
+ 2329: 0x00008AA9,
+ 2330: 0x00024A7A,
+ 2331: 0x00008B90,
+ 2332: 0x00008B9B,
+ 2333: 0x00008AAF,
+ 2334: 0x000216DF,
+ 2335: 0x00004615,
+ 2336: 0x0000884F,
+ 2337: 0x00008C9B,
+ 2338: 0x00027D54,
+ 2339: 0x00027D8F,
+ 2340: 0x0002F9D4,
+ 2341: 0x00003725,
+ 2342: 0x00027D53,
+ 2343: 0x00008CD6,
+ 2344: 0x00027D98,
+ 2345: 0x00027DBD,
+ 2346: 0x00008D12,
+ 2347: 0x00008D03,
+ 2348: 0x00021910,
+ 2349: 0x00008CDB,
+ 2350: 0x0000705C,
+ 2351: 0x00008D11,
+ 2352: 0x00024CC9,
+ 2353: 0x00003ED0,
+ 2354: 0x00008D77,
+ 2355: 0x00008DA9,
+ 2356: 0x00028002,
+ 2357: 0x00021014,
+ 2358: 0x0002498A,
+ 2359: 0x00003B7C,
+ 2360: 0x000281BC,
+ 2361: 0x0002710C,
+ 2362: 0x00007AE7,
+ 2363: 0x00008EAD,
+ 2364: 0x00008EB6,
+ 2365: 0x00008EC3,
+ 2366: 0x000092D4,
+ 2367: 0x00008F19,
+ 2368: 0x00008F2D,
+ 2369: 0x00028365,
+ 2370: 0x00028412,
+ 2371: 0x00008FA5,
+ 2372: 0x00009303,
+ 2373: 0x0002A29F,
+ 2374: 0x00020A50,
+ 2375: 0x00008FB3,
+ 2376: 0x0000492A,
+ 2377: 0x000289DE,
+ 2378: 0x0002853D,
+ 2379: 0x00023DBB,
+ 2380: 0x00005EF8,
+ 2381: 0x00023262,
+ 2382: 0x00008FF9,
+ 2383: 0x0002A014,
+ 2384: 0x000286BC,
+ 2385: 0x00028501,
+ 2386: 0x00022325,
+ 2387: 0x00003980,
+ 2388: 0x00026ED7,
+ 2389: 0x00009037,
+ 2390: 0x0002853C,
+ 2391: 0x00027ABE,
+ 2392: 0x00009061,
+ 2393: 0x0002856C,
+ 2394: 0x0002860B,
+ 2395: 0x000090A8,
+ 2396: 0x00028713,
+ 2397: 0x000090C4,
+ 2398: 0x000286E6,
+ 2399: 0x000090AE,
+ 2400: 0x000090FD,
+ 2401: 0x00009167,
+ 2402: 0x00003AF0,
+ 2403: 0x000091A9,
+ 2404: 0x000091C4,
+ 2405: 0x00007CAC,
+ 2406: 0x00028933,
+ 2407: 0x00021E89,
+ 2408: 0x0000920E,
+ 2409: 0x00006C9F,
+ 2410: 0x00009241,
+ 2411: 0x00009262,
+ 2412: 0x000255B9,
+ 2413: 0x000092B9,
+ 2414: 0x00028AC6,
+ 2415: 0x00023C9B,
+ 2416: 0x00028B0C,
+ 2417: 0x000255DB,
+ 2418: 0x00020D31,
+ 2419: 0x0000932C,
+ 2420: 0x0000936B,
+ 2421: 0x00028AE1,
+ 2422: 0x00028BEB,
+ 2423: 0x0000708F,
+ 2424: 0x00005AC3,
+ 2425: 0x00028AE2,
+ 2426: 0x00028AE5,
+ 2427: 0x00004965,
+ 2428: 0x00009244,
+ 2429: 0x00028BEC,
+ 2430: 0x00028C39,
+ 2431: 0x00028BFF,
+ 2432: 0x00009373,
+ 2433: 0x0000945B,
+ 2434: 0x00008EBC,
+ 2435: 0x00009585,
+ 2436: 0x000095A6,
+ 2437: 0x00009426,
+ 2438: 0x000095A0,
+ 2439: 0x00006FF6,
+ 2440: 0x000042B9,
+ 2441: 0x0002267A,
+ 2442: 0x000286D8,
+ 2443: 0x0002127C,
+ 2444: 0x00023E2E,
+ 2445: 0x000049DF,
+ 2446: 0x00006C1C,
+ 2447: 0x0000967B,
+ 2448: 0x00009696,
+ 2449: 0x0000416C,
+ 2450: 0x000096A3,
+ 2451: 0x00026ED5,
+ 2452: 0x000061DA,
+ 2453: 0x000096B6,
+ 2454: 0x000078F5,
+ 2455: 0x00028AE0,
+ 2456: 0x000096BD,
+ 2457: 0x000053CC,
+ 2458: 0x000049A1,
+ 2459: 0x00026CB8,
+ 2460: 0x00020274,
+ 2461: 0x00026410,
+ 2462: 0x000290AF,
+ 2463: 0x000290E5,
+ 2464: 0x00024AD1,
+ 2465: 0x00021915,
+ 2466: 0x0002330A,
+ 2467: 0x00009731,
+ 2468: 0x00008642,
+ 2469: 0x00009736,
+ 2470: 0x00004A0F,
+ 2471: 0x0000453D,
+ 2472: 0x00004585,
+ 2473: 0x00024AE9,
+ 2474: 0x00007075,
+ 2475: 0x00005B41,
+ 2476: 0x0000971B,
+ 2477: 0x0000975C,
+ 2478: 0x000291D5,
+ 2479: 0x00009757,
+ 2480: 0x00005B4A,
+ 2481: 0x000291EB,
+ 2482: 0x0000975F,
+ 2483: 0x00009425,
+ 2484: 0x000050D0,
+ 2485: 0x000230B7,
+ 2486: 0x000230BC,
+ 2487: 0x00009789,
+ 2488: 0x0000979F,
+ 2489: 0x000097B1,
+ 2490: 0x000097BE,
+ 2491: 0x000097C0,
+ 2492: 0x000097D2,
+ 2493: 0x000097E0,
+ 2494: 0x0002546C,
+ 2495: 0x000097EE,
+ 2496: 0x0000741C,
+ 2497: 0x00029433,
+ 2498: 0x000097FF,
+ 2499: 0x000097F5,
+ 2500: 0x0002941D,
+ 2501: 0x0002797A,
+ 2502: 0x00004AD1,
+ 2503: 0x00009834,
+ 2504: 0x00009833,
+ 2505: 0x0000984B,
+ 2506: 0x00009866,
+ 2507: 0x00003B0E,
+ 2508: 0x00027175,
+ 2509: 0x00003D51,
+ 2510: 0x00020630,
+ 2511: 0x0002415C,
+ 2512: 0x00025706,
+ 2513: 0x000098CA,
+ 2514: 0x000098B7,
+ 2515: 0x000098C8,
+ 2516: 0x000098C7,
+ 2517: 0x00004AFF,
+ 2518: 0x00026D27,
+ 2519: 0x000216D3,
+ 2520: 0x000055B0,
+ 2521: 0x000098E1,
+ 2522: 0x000098E6,
+ 2523: 0x000098EC,
+ 2524: 0x00009378,
+ 2525: 0x00009939,
+ 2526: 0x00024A29,
+ 2527: 0x00004B72,
+ 2528: 0x00029857,
+ 2529: 0x00029905,
+ 2530: 0x000099F5,
+ 2531: 0x00009A0C,
+ 2532: 0x00009A3B,
+ 2533: 0x00009A10,
+ 2534: 0x00009A58,
+ 2535: 0x00025725,
+ 2536: 0x000036C4,
+ 2537: 0x000290B1,
+ 2538: 0x00029BD5,
+ 2539: 0x00009AE0,
+ 2540: 0x00009AE2,
+ 2541: 0x00029B05,
+ 2542: 0x00009AF4,
+ 2543: 0x00004C0E,
+ 2544: 0x00009B14,
+ 2545: 0x00009B2D,
+ 2546: 0x00028600,
+ 2547: 0x00005034,
+ 2548: 0x00009B34,
+ 2549: 0x000269A8,
+ 2550: 0x000038C3,
+ 2551: 0x0002307D,
+ 2552: 0x00009B50,
+ 2553: 0x00009B40,
+ 2554: 0x00029D3E,
+ 2555: 0x00005A45,
+ 2556: 0x00021863,
+ 2557: 0x00009B8E,
+ 2558: 0x0002424B,
+ 2559: 0x00009C02,
+ 2560: 0x00009BFF,
+ 2561: 0x00009C0C,
+ 2562: 0x00029E68,
+ 2563: 0x00009DD4,
+ 2564: 0x00029FB7,
+ 2565: 0x0002A192,
+ 2566: 0x0002A1AB,
+ 2567: 0x0002A0E1,
+ 2568: 0x0002A123,
+ 2569: 0x0002A1DF,
+ 2570: 0x00009D7E,
+ 2571: 0x00009D83,
+ 2572: 0x0002A134,
+ 2573: 0x00009E0E,
+ 2574: 0x00006888,
+ 2575: 0x00009DC4,
+ 2576: 0x0002215B,
+ 2577: 0x0002A193,
+ 2578: 0x0002A220,
+ 2579: 0x0002193B,
+ 2580: 0x0002A233,
+ 2581: 0x00009D39,
+ 2582: 0x0002A0B9,
+ 2583: 0x0002A2B4,
+ 2584: 0x00009E90,
+ 2585: 0x00009E95,
+ 2586: 0x00009E9E,
+ 2587: 0x00009EA2,
+ 2588: 0x00004D34,
+ 2589: 0x00009EAA,
+ 2590: 0x00009EAF,
+ 2591: 0x00024364,
+ 2592: 0x00009EC1,
+ 2593: 0x00003B60,
+ 2594: 0x000039E5,
+ 2595: 0x00003D1D,
+ 2596: 0x00004F32,
+ 2597: 0x000037BE,
+ 2598: 0x00028C2B,
+ 2599: 0x00009F02,
+ 2600: 0x00009F08,
+ 2601: 0x00004B96,
+ 2602: 0x00009424,
+ 2603: 0x00026DA2,
+ 2604: 0x00009F17,
+ 2605: 0x00009F16,
+ 2606: 0x00009F39,
+ 2607: 0x0000569F,
+ 2608: 0x0000568A,
+ 2609: 0x00009F45,
+ 2610: 0x000099B8,
+ 2611: 0x0002908B,
+ 2612: 0x000097F2,
+ 2613: 0x0000847F,
+ 2614: 0x00009F62,
+ 2615: 0x00009F69,
+ 2616: 0x00007ADC,
+ 2617: 0x00009F8E,
+ 2618: 0x00007216,
+ 2619: 0x00004BBE,
+ 2620: 0x00024975,
+ 2621: 0x000249BB,
+ 2622: 0x00007177,
+ 2623: 0x000249F8,
+ 2624: 0x00024348,
+ 2625: 0x00024A51,
+ 2626: 0x0000739E,
+ 2627: 0x00028BDA,
+ 2628: 0x000218FA,
+ 2629: 0x0000799F,
+ 2630: 0x0002897E,
+ 2631: 0x00028E36,
+ 2632: 0x00009369,
+ 2633: 0x000093F3,
+ 2634: 0x00028A44,
+ 2635: 0x000092EC,
+ 2636: 0x00009381,
+ 2637: 0x000093CB,
+ 2638: 0x0002896C,
+ 2639: 0x000244B9,
+ 2640: 0x00007217,
+ 2641: 0x00003EEB,
+ 2642: 0x00007772,
+ 2643: 0x00007A43,
+ 2644: 0x000070D0,
+ 2645: 0x00024473,
+ 2646: 0x000243F8,
+ 2647: 0x0000717E,
+ 2648: 0x000217EF,
+ 2649: 0x000070A3,
+ 2650: 0x000218BE,
+ 2651: 0x00023599,
+ 2652: 0x00003EC7,
+ 2653: 0x00021885,
+ 2654: 0x0002542F,
+ 2655: 0x000217F8,
+ 2656: 0x00003722,
+ 2657: 0x000216FB,
+ 2658: 0x00021839,
+ 2659: 0x000036E1,
+ 2660: 0x00021774,
+ 2661: 0x000218D1,
+ 2662: 0x00025F4B,
+ 2663: 0x00003723,
+ 2664: 0x000216C0,
+ 2665: 0x0000575B,
+ 2666: 0x00024A25,
+ 2667: 0x000213FE,
+ 2668: 0x000212A8,
+ 2669: 0x000213C6,
+ 2670: 0x000214B6,
+ 2671: 0x00008503,
+ 2672: 0x000236A6,
+ 2673: 0x00008503,
+ 2674: 0x00008455,
+ 2675: 0x00024994,
+ 2676: 0x00027165,
+ 2677: 0x00023E31,
+ 2678: 0x0002555C,
+ 2679: 0x00023EFB,
+ 2680: 0x00027052,
+ 2681: 0x000044F4,
+ 2682: 0x000236EE,
+ 2683: 0x0002999D,
+ 2684: 0x00026F26,
+ 2685: 0x000067F9,
+ 2686: 0x00003733,
+ 2687: 0x00003C15,
+ 2688: 0x00003DE7,
+ 2689: 0x0000586C,
+ 2690: 0x00021922,
+ 2691: 0x00006810,
+ 2692: 0x00004057,
+ 2693: 0x0002373F,
+ 2694: 0x000240E1,
+ 2695: 0x0002408B,
+ 2696: 0x0002410F,
+ 2697: 0x00026C21,
+ 2698: 0x000054CB,
+ 2699: 0x0000569E,
+ 2700: 0x000266B1,
+ 2701: 0x00005692,
+ 2702: 0x00020FDF,
+ 2703: 0x00020BA8,
+ 2704: 0x00020E0D,
+ 2705: 0x000093C6,
+ 2706: 0x00028B13,
+ 2707: 0x0000939C,
+ 2708: 0x00004EF8,
+ 2709: 0x0000512B,
+ 2710: 0x00003819,
+ 2711: 0x00024436,
+ 2712: 0x00004EBC,
+ 2713: 0x00020465,
+ 2714: 0x0002037F,
+ 2715: 0x00004F4B,
+ 2716: 0x00004F8A,
+ 2717: 0x00025651,
+ 2718: 0x00005A68,
+ 2719: 0x000201AB,
+ 2720: 0x000203CB,
+ 2721: 0x00003999,
+ 2722: 0x0002030A,
+ 2723: 0x00020414,
+ 2724: 0x00003435,
+ 2725: 0x00004F29,
+ 2726: 0x000202C0,
+ 2727: 0x00028EB3,
+ 2728: 0x00020275,
+ 2729: 0x00008ADA,
+ 2730: 0x0002020C,
+ 2731: 0x00004E98,
+ 2732: 0x000050CD,
+ 2733: 0x0000510D,
+ 2734: 0x00004FA2,
+ 2735: 0x00004F03,
+ 2736: 0x00024A0E,
+ 2737: 0x00023E8A,
+ 2738: 0x00004F42,
+ 2739: 0x0000502E,
+ 2740: 0x0000506C,
+ 2741: 0x00005081,
+ 2742: 0x00004FCC,
+ 2743: 0x00004FE5,
+ 2744: 0x00005058,
+ 2745: 0x000050FC,
+ 2746: 0x00005159,
+ 2747: 0x0000515B,
+ 2748: 0x0000515D,
+ 2749: 0x0000515E,
+ 2750: 0x00006E76,
+ 2751: 0x00023595,
+ 2752: 0x00023E39,
+ 2753: 0x00023EBF,
+ 2754: 0x00006D72,
+ 2755: 0x00021884,
+ 2756: 0x00023E89,
+ 2757: 0x000051A8,
+ 2758: 0x000051C3,
+ 2759: 0x000205E0,
+ 2760: 0x000044DD,
+ 2761: 0x000204A3,
+ 2762: 0x00020492,
+ 2763: 0x00020491,
+ 2764: 0x00008D7A,
+ 2765: 0x00028A9C,
+ 2766: 0x0002070E,
+ 2767: 0x00005259,
+ 2768: 0x000052A4,
+ 2769: 0x00020873,
+ 2770: 0x000052E1,
+ 2771: 0x0000936E,
+ 2772: 0x0000467A,
+ 2773: 0x0000718C,
+ 2774: 0x0002438C,
+ 2775: 0x00020C20,
+ 2776: 0x000249AC,
+ 2777: 0x000210E4,
+ 2778: 0x000069D1,
+ 2779: 0x00020E1D,
+ 2780: 0x00007479,
+ 2781: 0x00003EDE,
+ 2782: 0x00007499,
+ 2783: 0x00007414,
+ 2784: 0x00007456,
+ 2785: 0x00007398,
+ 2786: 0x00004B8E,
+ 2787: 0x00024ABC,
+ 2788: 0x0002408D,
+ 2789: 0x000053D0,
+ 2790: 0x00003584,
+ 2791: 0x0000720F,
+ 2792: 0x000240C9,
+ 2793: 0x000055B4,
+ 2794: 0x00020345,
+ 2795: 0x000054CD,
+ 2796: 0x00020BC6,
+ 2797: 0x0000571D,
+ 2798: 0x0000925D,
+ 2799: 0x000096F4,
+ 2800: 0x00009366,
+ 2801: 0x000057DD,
+ 2802: 0x0000578D,
+ 2803: 0x0000577F,
+ 2804: 0x0000363E,
+ 2805: 0x000058CB,
+ 2806: 0x00005A99,
+ 2807: 0x00028A46,
+ 2808: 0x000216FA,
+ 2809: 0x0002176F,
+ 2810: 0x00021710,
+ 2811: 0x00005A2C,
+ 2812: 0x000059B8,
+ 2813: 0x0000928F,
+ 2814: 0x00005A7E,
+ 2815: 0x00005ACF,
+ 2816: 0x00005A12,
+ 2817: 0x00025946,
+ 2818: 0x000219F3,
+ 2819: 0x00021861,
+ 2820: 0x00024295,
+ 2821: 0x000036F5,
+ 2822: 0x00006D05,
+ 2823: 0x00007443,
+ 2824: 0x00005A21,
+ 2825: 0x00025E83,
+ 2826: 0x00005A81,
+ 2827: 0x00028BD7,
+ 2828: 0x00020413,
+ 2829: 0x000093E0,
+ 2830: 0x0000748C,
+ 2831: 0x00021303,
+ 2832: 0x00007105,
+ 2833: 0x00004972,
+ 2834: 0x00009408,
+ 2835: 0x000289FB,
+ 2836: 0x000093BD,
+ 2837: 0x000037A0,
+ 2838: 0x00005C1E,
+ 2839: 0x00005C9E,
+ 2840: 0x00005E5E,
+ 2841: 0x00005E48,
+ 2842: 0x00021996,
+ 2843: 0x0002197C,
+ 2844: 0x00023AEE,
+ 2845: 0x00005ECD,
+ 2846: 0x00005B4F,
+ 2847: 0x00021903,
+ 2848: 0x00021904,
+ 2849: 0x00003701,
+ 2850: 0x000218A0,
+ 2851: 0x000036DD,
+ 2852: 0x000216FE,
+ 2853: 0x000036D3,
+ 2854: 0x0000812A,
+ 2855: 0x00028A47,
+ 2856: 0x00021DBA,
+ 2857: 0x00023472,
+ 2858: 0x000289A8,
+ 2859: 0x00005F0C,
+ 2860: 0x00005F0E,
+ 2861: 0x00021927,
+ 2862: 0x000217AB,
+ 2863: 0x00005A6B,
+ 2864: 0x0002173B,
+ 2865: 0x00005B44,
+ 2866: 0x00008614,
+ 2867: 0x000275FD,
+ 2868: 0x00008860,
+ 2869: 0x0000607E,
+ 2870: 0x00022860,
+ 2871: 0x0002262B,
+ 2872: 0x00005FDB,
+ 2873: 0x00003EB8,
+ 2874: 0x000225AF,
+ 2875: 0x000225BE,
+ 2876: 0x00029088,
+ 2877: 0x00026F73,
+ 2878: 0x000061C0,
+ 2879: 0x0002003E,
+ 2880: 0x00020046,
+ 2881: 0x0002261B,
+ 2882: 0x00006199,
+ 2883: 0x00006198,
+ 2884: 0x00006075,
+ 2885: 0x00022C9B,
+ 2886: 0x00022D07,
+ 2887: 0x000246D4,
+ 2888: 0x0002914D,
+ 2889: 0x00006471,
+ 2890: 0x00024665,
+ 2891: 0x00022B6A,
+ 2892: 0x00003A29,
+ 2893: 0x00022B22,
+ 2894: 0x00023450,
+ 2895: 0x000298EA,
+ 2896: 0x00022E78,
+ 2897: 0x00006337,
+ 2898: 0x0002A45B,
+ 2899: 0x000064B6,
+ 2900: 0x00006331,
+ 2901: 0x000063D1,
+ 2902: 0x000249E3,
+ 2903: 0x00022D67,
+ 2904: 0x000062A4,
+ 2905: 0x00022CA1,
+ 2906: 0x0000643B,
+ 2907: 0x0000656B,
+ 2908: 0x00006972,
+ 2909: 0x00003BF4,
+ 2910: 0x0002308E,
+ 2911: 0x000232AD,
+ 2912: 0x00024989,
+ 2913: 0x000232AB,
+ 2914: 0x0000550D,
+ 2915: 0x000232E0,
+ 2916: 0x000218D9,
+ 2917: 0x0002943F,
+ 2918: 0x000066CE,
+ 2919: 0x00023289,
+ 2920: 0x000231B3,
+ 2921: 0x00003AE0,
+ 2922: 0x00004190,
+ 2923: 0x00025584,
+ 2924: 0x00028B22,
+ 2925: 0x0002558F,
+ 2926: 0x000216FC,
+ 2927: 0x0002555B,
+ 2928: 0x00025425,
+ 2929: 0x000078EE,
+ 2930: 0x00023103,
+ 2931: 0x0002182A,
+ 2932: 0x00023234,
+ 2933: 0x00003464,
+ 2934: 0x0002320F,
+ 2935: 0x00023182,
+ 2936: 0x000242C9,
+ 2937: 0x0000668E,
+ 2938: 0x00026D24,
+ 2939: 0x0000666B,
+ 2940: 0x00004B93,
+ 2941: 0x00006630,
+ 2942: 0x00027870,
+ 2943: 0x00021DEB,
+ 2944: 0x00006663,
+ 2945: 0x000232D2,
+ 2946: 0x000232E1,
+ 2947: 0x0000661E,
+ 2948: 0x00025872,
+ 2949: 0x000038D1,
+ 2950: 0x0002383A,
+ 2951: 0x000237BC,
+ 2952: 0x00003B99,
+ 2953: 0x000237A2,
+ 2954: 0x000233FE,
+ 2955: 0x000074D0,
+ 2956: 0x00003B96,
+ 2957: 0x0000678F,
+ 2958: 0x0002462A,
+ 2959: 0x000068B6,
+ 2960: 0x0000681E,
+ 2961: 0x00003BC4,
+ 2962: 0x00006ABE,
+ 2963: 0x00003863,
+ 2964: 0x000237D5,
+ 2965: 0x00024487,
+ 2966: 0x00006A33,
+ 2967: 0x00006A52,
+ 2968: 0x00006AC9,
+ 2969: 0x00006B05,
+ 2970: 0x00021912,
+ 2971: 0x00006511,
+ 2972: 0x00006898,
+ 2973: 0x00006A4C,
+ 2974: 0x00003BD7,
+ 2975: 0x00006A7A,
+ 2976: 0x00006B57,
+ 2977: 0x00023FC0,
+ 2978: 0x00023C9A,
+ 2979: 0x000093A0,
+ 2980: 0x000092F2,
+ 2981: 0x00028BEA,
+ 2982: 0x00028ACB,
+ 2983: 0x00009289,
+ 2984: 0x0002801E,
+ 2985: 0x000289DC,
+ 2986: 0x00009467,
+ 2987: 0x00006DA5,
+ 2988: 0x00006F0B,
+ 2989: 0x000249EC,
+ 2990: 0x00006D67,
+ 2991: 0x00023F7F,
+ 2992: 0x00003D8F,
+ 2993: 0x00006E04,
+ 2994: 0x0002403C,
+ 2995: 0x00005A3D,
+ 2996: 0x00006E0A,
+ 2997: 0x00005847,
+ 2998: 0x00006D24,
+ 2999: 0x00007842,
+ 3000: 0x0000713B,
+ 3001: 0x0002431A,
+ 3002: 0x00024276,
+ 3003: 0x000070F1,
+ 3004: 0x00007250,
+ 3005: 0x00007287,
+ 3006: 0x00007294,
+ 3007: 0x0002478F,
+ 3008: 0x00024725,
+ 3009: 0x00005179,
+ 3010: 0x00024AA4,
+ 3011: 0x000205EB,
+ 3012: 0x0000747A,
+ 3013: 0x00023EF8,
+ 3014: 0x0002365F,
+ 3015: 0x00024A4A,
+ 3016: 0x00024917,
+ 3017: 0x00025FE1,
+ 3018: 0x00003F06,
+ 3019: 0x00003EB1,
+ 3020: 0x00024ADF,
+ 3021: 0x00028C23,
+ 3022: 0x00023F35,
+ 3023: 0x000060A7,
+ 3024: 0x00003EF3,
+ 3025: 0x000074CC,
+ 3026: 0x0000743C,
+ 3027: 0x00009387,
+ 3028: 0x00007437,
+ 3029: 0x0000449F,
+ 3030: 0x00026DEA,
+ 3031: 0x00004551,
+ 3032: 0x00007583,
+ 3033: 0x00003F63,
+ 3034: 0x00024CD9,
+ 3035: 0x00024D06,
+ 3036: 0x00003F58,
+ 3037: 0x00007555,
+ 3038: 0x00007673,
+ 3039: 0x0002A5C6,
+ 3040: 0x00003B19,
+ 3041: 0x00007468,
+ 3042: 0x00028ACC,
+ 3043: 0x000249AB,
+ 3044: 0x0002498E,
+ 3045: 0x00003AFB,
+ 3046: 0x00003DCD,
+ 3047: 0x00024A4E,
+ 3048: 0x00003EFF,
+ 3049: 0x000249C5,
+ 3050: 0x000248F3,
+ 3051: 0x000091FA,
+ 3052: 0x00005732,
+ 3053: 0x00009342,
+ 3054: 0x00028AE3,
+ 3055: 0x00021864,
+ 3056: 0x000050DF,
+ 3057: 0x00025221,
+ 3058: 0x000251E7,
+ 3059: 0x00007778,
+ 3060: 0x00023232,
+ 3061: 0x0000770E,
+ 3062: 0x0000770F,
+ 3063: 0x0000777B,
+ 3064: 0x00024697,
+ 3065: 0x00023781,
+ 3066: 0x00003A5E,
+ 3067: 0x000248F0,
+ 3068: 0x00007438,
+ 3069: 0x0000749B,
+ 3070: 0x00003EBF,
+ 3071: 0x00024ABA,
+ 3072: 0x00024AC7,
+ 3073: 0x000040C8,
+ 3074: 0x00024A96,
+ 3075: 0x000261AE,
+ 3076: 0x00009307,
+ 3077: 0x00025581,
+ 3078: 0x0000781E,
+ 3079: 0x0000788D,
+ 3080: 0x00007888,
+ 3081: 0x000078D2,
+ 3082: 0x000073D0,
+ 3083: 0x00007959,
+ 3084: 0x00027741,
+ 3085: 0x000256E3,
+ 3086: 0x0000410E,
+ 3087: 0x0000799B,
+ 3088: 0x00008496,
+ 3089: 0x000079A5,
+ 3090: 0x00006A2D,
+ 3091: 0x00023EFA,
+ 3092: 0x00007A3A,
+ 3093: 0x000079F4,
+ 3094: 0x0000416E,
+ 3095: 0x000216E6,
+ 3096: 0x00004132,
+ 3097: 0x00009235,
+ 3098: 0x000079F1,
+ 3099: 0x00020D4C,
+ 3100: 0x0002498C,
+ 3101: 0x00020299,
+ 3102: 0x00023DBA,
+ 3103: 0x0002176E,
+ 3104: 0x00003597,
+ 3105: 0x0000556B,
+ 3106: 0x00003570,
+ 3107: 0x000036AA,
+ 3108: 0x000201D4,
+ 3109: 0x00020C0D,
+ 3110: 0x00007AE2,
+ 3111: 0x00005A59,
+ 3112: 0x000226F5,
+ 3113: 0x00025AAF,
+ 3114: 0x00025A9C,
+ 3115: 0x00005A0D,
+ 3116: 0x0002025B,
+ 3117: 0x000078F0,
+ 3118: 0x00005A2A,
+ 3119: 0x00025BC6,
+ 3120: 0x00007AFE,
+ 3121: 0x000041F9,
+ 3122: 0x00007C5D,
+ 3123: 0x00007C6D,
+ 3124: 0x00004211,
+ 3125: 0x00025BB3,
+ 3126: 0x00025EBC,
+ 3127: 0x00025EA6,
+ 3128: 0x00007CCD,
+ 3129: 0x000249F9,
+ 3130: 0x000217B0,
+ 3131: 0x00007C8E,
+ 3132: 0x00007C7C,
+ 3133: 0x00007CAE,
+ 3134: 0x00006AB2,
+ 3135: 0x00007DDC,
+ 3136: 0x00007E07,
+ 3137: 0x00007DD3,
+ 3138: 0x00007F4E,
+ 3139: 0x00026261,
+ 3140: 0x0002615C,
+ 3141: 0x00027B48,
+ 3142: 0x00007D97,
+ 3143: 0x00025E82,
+ 3144: 0x0000426A,
+ 3145: 0x00026B75,
+ 3146: 0x00020916,
+ 3147: 0x000067D6,
+ 3148: 0x0002004E,
+ 3149: 0x000235CF,
+ 3150: 0x000057C4,
+ 3151: 0x00026412,
+ 3152: 0x000263F8,
+ 3153: 0x00024962,
+ 3154: 0x00007FDD,
+ 3155: 0x00007B27,
+ 3156: 0x0002082C,
+ 3157: 0x00025AE9,
+ 3158: 0x00025D43,
+ 3159: 0x00007B0C,
+ 3160: 0x00025E0E,
+ 3161: 0x000099E6,
+ 3162: 0x00008645,
+ 3163: 0x00009A63,
+ 3164: 0x00006A1C,
+ 3165: 0x0002343F,
+ 3166: 0x000039E2,
+ 3167: 0x000249F7,
+ 3168: 0x000265AD,
+ 3169: 0x00009A1F,
+ 3170: 0x000265A0,
+ 3171: 0x00008480,
+ 3172: 0x00027127,
+ 3173: 0x00026CD1,
+ 3174: 0x000044EA,
+ 3175: 0x00008137,
+ 3176: 0x00004402,
+ 3177: 0x000080C6,
+ 3178: 0x00008109,
+ 3179: 0x00008142,
+ 3180: 0x000267B4,
+ 3181: 0x000098C3,
+ 3182: 0x00026A42,
+ 3183: 0x00008262,
+ 3184: 0x00008265,
+ 3185: 0x00026A51,
+ 3186: 0x00008453,
+ 3187: 0x00026DA7,
+ 3188: 0x00008610,
+ 3189: 0x0002721B,
+ 3190: 0x00005A86,
+ 3191: 0x0000417F,
+ 3192: 0x00021840,
+ 3193: 0x00005B2B,
+ 3194: 0x000218A1,
+ 3195: 0x00005AE4,
+ 3196: 0x000218D8,
+ 3197: 0x000086A0,
+ 3198: 0x0002F9BC,
+ 3199: 0x00023D8F,
+ 3200: 0x0000882D,
+ 3201: 0x00027422,
+ 3202: 0x00005A02,
+ 3203: 0x0000886E,
+ 3204: 0x00004F45,
+ 3205: 0x00008887,
+ 3206: 0x000088BF,
+ 3207: 0x000088E6,
+ 3208: 0x00008965,
+ 3209: 0x0000894D,
+ 3210: 0x00025683,
+ 3211: 0x00008954,
+ 3212: 0x00027785,
+ 3213: 0x00027784,
+ 3214: 0x00028BF5,
+ 3215: 0x00028BD9,
+ 3216: 0x00028B9C,
+ 3217: 0x000289F9,
+ 3218: 0x00003EAD,
+ 3219: 0x000084A3,
+ 3220: 0x000046F5,
+ 3221: 0x000046CF,
+ 3222: 0x000037F2,
+ 3223: 0x00008A3D,
+ 3224: 0x00008A1C,
+ 3225: 0x00029448,
+ 3226: 0x00005F4D,
+ 3227: 0x0000922B,
+ 3228: 0x00024284,
+ 3229: 0x000065D4,
+ 3230: 0x00007129,
+ 3231: 0x000070C4,
+ 3232: 0x00021845,
+ 3233: 0x00009D6D,
+ 3234: 0x00008C9F,
+ 3235: 0x00008CE9,
+ 3236: 0x00027DDC,
+ 3237: 0x0000599A,
+ 3238: 0x000077C3,
+ 3239: 0x000059F0,
+ 3240: 0x0000436E,
+ 3241: 0x000036D4,
+ 3242: 0x00008E2A,
+ 3243: 0x00008EA7,
+ 3244: 0x00024C09,
+ 3245: 0x00008F30,
+ 3246: 0x00008F4A,
+ 3247: 0x000042F4,
+ 3248: 0x00006C58,
+ 3249: 0x00006FBB,
+ 3250: 0x00022321,
+ 3251: 0x0000489B,
+ 3252: 0x00006F79,
+ 3253: 0x00006E8B,
+ 3254: 0x000217DA,
+ 3255: 0x00009BE9,
+ 3256: 0x000036B5,
+ 3257: 0x0002492F,
+ 3258: 0x000090BB,
+ 3259: 0x00009097,
+ 3260: 0x00005571,
+ 3261: 0x00004906,
+ 3262: 0x000091BB,
+ 3263: 0x00009404,
+ 3264: 0x00028A4B,
+ 3265: 0x00004062,
+ 3266: 0x00028AFC,
+ 3267: 0x00009427,
+ 3268: 0x00028C1D,
+ 3269: 0x00028C3B,
+ 3270: 0x000084E5,
+ 3271: 0x00008A2B,
+ 3272: 0x00009599,
+ 3273: 0x000095A7,
+ 3274: 0x00009597,
+ 3275: 0x00009596,
+ 3276: 0x00028D34,
+ 3277: 0x00007445,
+ 3278: 0x00003EC2,
+ 3279: 0x000248FF,
+ 3280: 0x00024A42,
+ 3281: 0x000243EA,
+ 3282: 0x00003EE7,
+ 3283: 0x00023225,
+ 3284: 0x0000968F,
+ 3285: 0x00028EE7,
+ 3286: 0x00028E66,
+ 3287: 0x00028E65,
+ 3288: 0x00003ECC,
+ 3289: 0x000249ED,
+ 3290: 0x00024A78,
+ 3291: 0x00023FEE,
+ 3292: 0x00007412,
+ 3293: 0x0000746B,
+ 3294: 0x00003EFC,
+ 3295: 0x00009741,
+ 3296: 0x000290B0,
+ 3297: 0x00006847,
+ 3298: 0x00004A1D,
+ 3299: 0x00029093,
+ 3300: 0x000257DF,
+ 3301: 0x0000975D,
+ 3302: 0x00009368,
+ 3303: 0x00028989,
+ 3304: 0x00028C26,
+ 3305: 0x00028B2F,
+ 3306: 0x000263BE,
+ 3307: 0x000092BA,
+ 3308: 0x00005B11,
+ 3309: 0x00008B69,
+ 3310: 0x0000493C,
+ 3311: 0x000073F9,
+ 3312: 0x0002421B,
+ 3313: 0x0000979B,
+ 3314: 0x00009771,
+ 3315: 0x00009938,
+ 3316: 0x00020F26,
+ 3317: 0x00005DC1,
+ 3318: 0x00028BC5,
+ 3319: 0x00024AB2,
+ 3320: 0x0000981F,
+ 3321: 0x000294DA,
+ 3322: 0x000092F6,
+ 3323: 0x000295D7,
+ 3324: 0x000091E5,
+ 3325: 0x000044C0,
+ 3326: 0x00028B50,
+ 3327: 0x00024A67,
+ 3328: 0x00028B64,
+ 3329: 0x000098DC,
+ 3330: 0x00028A45,
+ 3331: 0x00003F00,
+ 3332: 0x0000922A,
+ 3333: 0x00004925,
+ 3334: 0x00008414,
+ 3335: 0x0000993B,
+ 3336: 0x0000994D,
+ 3337: 0x00027B06,
+ 3338: 0x00003DFD,
+ 3339: 0x0000999B,
+ 3340: 0x00004B6F,
+ 3341: 0x000099AA,
+ 3342: 0x00009A5C,
+ 3343: 0x00028B65,
+ 3344: 0x000258C8,
+ 3345: 0x00006A8F,
+ 3346: 0x00009A21,
+ 3347: 0x00005AFE,
+ 3348: 0x00009A2F,
+ 3349: 0x000298F1,
+ 3350: 0x00004B90,
+ 3351: 0x00029948,
+ 3352: 0x000099BC,
+ 3353: 0x00004BBD,
+ 3354: 0x00004B97,
+ 3355: 0x0000937D,
+ 3356: 0x00005872,
+ 3357: 0x00021302,
+ 3358: 0x00005822,
+ 3359: 0x000249B8,
+ 3360: 0x000214E8,
+ 3361: 0x00007844,
+ 3362: 0x0002271F,
+ 3363: 0x00023DB8,
+ 3364: 0x000068C5,
+ 3365: 0x00003D7D,
+ 3366: 0x00009458,
+ 3367: 0x00003927,
+ 3368: 0x00006150,
+ 3369: 0x00022781,
+ 3370: 0x0002296B,
+ 3371: 0x00006107,
+ 3372: 0x00009C4F,
+ 3373: 0x00009C53,
+ 3374: 0x00009C7B,
+ 3375: 0x00009C35,
+ 3376: 0x00009C10,
+ 3377: 0x00009B7F,
+ 3378: 0x00009BCF,
+ 3379: 0x00029E2D,
+ 3380: 0x00009B9F,
+ 3381: 0x0002A1F5,
+ 3382: 0x0002A0FE,
+ 3383: 0x00009D21,
+ 3384: 0x00004CAE,
+ 3385: 0x00024104,
+ 3386: 0x00009E18,
+ 3387: 0x00004CB0,
+ 3388: 0x00009D0C,
+ 3389: 0x0002A1B4,
+ 3390: 0x0002A0ED,
+ 3391: 0x0002A0F3,
+ 3392: 0x0002992F,
+ 3393: 0x00009DA5,
+ 3394: 0x000084BD,
+ 3395: 0x00026E12,
+ 3396: 0x00026FDF,
+ 3397: 0x00026B82,
+ 3398: 0x000085FC,
+ 3399: 0x00004533,
+ 3400: 0x00026DA4,
+ 3401: 0x00026E84,
+ 3402: 0x00026DF0,
+ 3403: 0x00008420,
+ 3404: 0x000085EE,
+ 3405: 0x00026E00,
+ 3406: 0x000237D7,
+ 3407: 0x00026064,
+ 3408: 0x000079E2,
+ 3409: 0x0002359C,
+ 3410: 0x00023640,
+ 3411: 0x0000492D,
+ 3412: 0x000249DE,
+ 3413: 0x00003D62,
+ 3414: 0x000093DB,
+ 3415: 0x000092BE,
+ 3416: 0x00009348,
+ 3417: 0x000202BF,
+ 3418: 0x000078B9,
+ 3419: 0x00009277,
+ 3420: 0x0000944D,
+ 3421: 0x00004FE4,
+ 3422: 0x00003440,
+ 3423: 0x00009064,
+ 3424: 0x0002555D,
+ 3425: 0x0000783D,
+ 3426: 0x00007854,
+ 3427: 0x000078B6,
+ 3428: 0x0000784B,
+ 3429: 0x00021757,
+ 3430: 0x000231C9,
+ 3431: 0x00024941,
+ 3432: 0x0000369A,
+ 3433: 0x00004F72,
+ 3434: 0x00006FDA,
+ 3435: 0x00006FD9,
+ 3436: 0x0000701E,
+ 3437: 0x0000701E,
+ 3438: 0x00005414,
+ 3439: 0x000241B5,
+ 3440: 0x000057BB,
+ 3441: 0x000058F3,
+ 3442: 0x0000578A,
+ 3443: 0x00009D16,
+ 3444: 0x000057D7,
+ 3445: 0x00007134,
+ 3446: 0x000034AF,
+ 3447: 0x000241AC,
+ 3448: 0x000071EB,
+ 3449: 0x00026C40,
+ 3450: 0x00024F97,
+ 3451: 0x00005B28,
+ 3452: 0x000217B5,
+ 3453: 0x00028A49,
+ 3454: 0x0000610C,
+ 3455: 0x00005ACE,
+ 3456: 0x00005A0B,
+ 3457: 0x000042BC,
+ 3458: 0x00024488,
+ 3459: 0x0000372C,
+ 3460: 0x00004B7B,
+ 3461: 0x000289FC,
+ 3462: 0x000093BB,
+ 3463: 0x000093B8,
+ 3464: 0x000218D6,
+ 3465: 0x00020F1D,
+ 3466: 0x00008472,
+ 3467: 0x00026CC0,
+ 3468: 0x00021413,
+ 3469: 0x000242FA,
+ 3470: 0x00022C26,
+ 3471: 0x000243C1,
+ 3472: 0x00005994,
+ 3473: 0x00023DB7,
+ 3474: 0x00026741,
+ 3475: 0x00007DA8,
+ 3476: 0x0002615B,
+ 3477: 0x000260A4,
+ 3478: 0x000249B9,
+ 3479: 0x0002498B,
+ 3480: 0x000289FA,
+ 3481: 0x000092E5,
+ 3482: 0x000073E2,
+ 3483: 0x00003EE9,
+ 3484: 0x000074B4,
+ 3485: 0x00028B63,
+ 3486: 0x0002189F,
+ 3487: 0x00003EE1,
+ 3488: 0x00024AB3,
+ 3489: 0x00006AD8,
+ 3490: 0x000073F3,
+ 3491: 0x000073FB,
+ 3492: 0x00003ED6,
+ 3493: 0x00024A3E,
+ 3494: 0x00024A94,
+ 3495: 0x000217D9,
+ 3496: 0x00024A66,
+ 3497: 0x000203A7,
+ 3498: 0x00021424,
+ 3499: 0x000249E5,
+ 3500: 0x00007448,
+ 3501: 0x00024916,
+ 3502: 0x000070A5,
+ 3503: 0x00024976,
+ 3504: 0x00009284,
+ 3505: 0x000073E6,
+ 3506: 0x0000935F,
+ 3507: 0x000204FE,
+ 3508: 0x00009331,
+ 3509: 0x00028ACE,
+ 3510: 0x00028A16,
+ 3511: 0x00009386,
+ 3512: 0x00028BE7,
+ 3513: 0x000255D5,
+ 3514: 0x00004935,
+ 3515: 0x00028A82,
+ 3516: 0x0000716B,
+ 3517: 0x00024943,
+ 3518: 0x00020CFF,
+ 3519: 0x000056A4,
+ 3520: 0x0002061A,
+ 3521: 0x00020BEB,
+ 3522: 0x00020CB8,
+ 3523: 0x00005502,
+ 3524: 0x000079C4,
+ 3525: 0x000217FA,
+ 3526: 0x00007DFE,
+ 3527: 0x000216C2,
+ 3528: 0x00024A50,
+ 3529: 0x00021852,
+ 3530: 0x0000452E,
+ 3531: 0x00009401,
+ 3532: 0x0000370A,
+ 3533: 0x00028AC0,
+ 3534: 0x000249AD,
+ 3535: 0x000059B0,
+ 3536: 0x000218BF,
+ 3537: 0x00021883,
+ 3538: 0x00027484,
+ 3539: 0x00005AA1,
+ 3540: 0x000036E2,
+ 3541: 0x00023D5B,
+ 3542: 0x000036B0,
+ 3543: 0x0000925F,
+ 3544: 0x00005A79,
+ 3545: 0x00028A81,
+ 3546: 0x00021862,
+ 3547: 0x00009374,
+ 3548: 0x00003CCD,
+ 3549: 0x00020AB4,
+ 3550: 0x00004A96,
+ 3551: 0x0000398A,
+ 3552: 0x000050F4,
+ 3553: 0x00003D69,
+ 3554: 0x00003D4C,
+ 3555: 0x0002139C,
+ 3556: 0x00007175,
+ 3557: 0x000042FB,
+ 3558: 0x00028218,
+ 3559: 0x00006E0F,
+ 3560: 0x000290E4,
+ 3561: 0x000044EB,
+ 3562: 0x00006D57,
+ 3563: 0x00027E4F,
+ 3564: 0x00007067,
+ 3565: 0x00006CAF,
+ 3566: 0x00003CD6,
+ 3567: 0x00023FED,
+ 3568: 0x00023E2D,
+ 3569: 0x00006E02,
+ 3570: 0x00006F0C,
+ 3571: 0x00003D6F,
+ 3572: 0x000203F5,
+ 3573: 0x00007551,
+ 3574: 0x000036BC,
+ 3575: 0x000034C8,
+ 3576: 0x00004680,
+ 3577: 0x00003EDA,
+ 3578: 0x00004871,
+ 3579: 0x000059C4,
+ 3580: 0x0000926E,
+ 3581: 0x0000493E,
+ 3582: 0x00008F41,
+ 3583: 0x00028C1C,
+ 3584: 0x00026BC0,
+ 3585: 0x00005812,
+ 3586: 0x000057C8,
+ 3587: 0x000036D6,
+ 3588: 0x00021452,
+ 3589: 0x000070FE,
+ 3590: 0x00024362,
+ 3591: 0x00024A71,
+ 3592: 0x00022FE3,
+ 3593: 0x000212B0,
+ 3594: 0x000223BD,
+ 3595: 0x000068B9,
+ 3596: 0x00006967,
+ 3597: 0x00021398,
+ 3598: 0x000234E5,
+ 3599: 0x00027BF4,
+ 3600: 0x000236DF,
+ 3601: 0x00028A83,
+ 3602: 0x000237D6,
+ 3603: 0x000233FA,
+ 3604: 0x00024C9F,
+ 3605: 0x00006A1A,
+ 3606: 0x000236AD,
+ 3607: 0x00026CB7,
+ 3608: 0x0000843E,
+ 3609: 0x000044DF,
+ 3610: 0x000044CE,
+ 3611: 0x00026D26,
+ 3612: 0x00026D51,
+ 3613: 0x00026C82,
+ 3614: 0x00026FDE,
+ 3615: 0x00006F17,
+ 3616: 0x00027109,
+ 3617: 0x0000833D,
+ 3618: 0x0002173A,
+ 3619: 0x000083ED,
+ 3620: 0x00026C80,
+ 3621: 0x00027053,
+ 3622: 0x000217DB,
+ 3623: 0x00005989,
+ 3624: 0x00005A82,
+ 3625: 0x000217B3,
+ 3626: 0x00005A61,
+ 3627: 0x00005A71,
+ 3628: 0x00021905,
+ 3629: 0x000241FC,
+ 3630: 0x0000372D,
+ 3631: 0x000059EF,
+ 3632: 0x0002173C,
+ 3633: 0x000036C7,
+ 3634: 0x0000718E,
+ 3635: 0x00009390,
+ 3636: 0x0000669A,
+ 3637: 0x000242A5,
+ 3638: 0x00005A6E,
+ 3639: 0x00005A2B,
+ 3640: 0x00024293,
+ 3641: 0x00006A2B,
+ 3642: 0x00023EF9,
+ 3643: 0x00027736,
+ 3644: 0x0002445B,
+ 3645: 0x000242CA,
+ 3646: 0x0000711D,
+ 3647: 0x00024259,
+ 3648: 0x000289E1,
+ 3649: 0x00004FB0,
+ 3650: 0x00026D28,
+ 3651: 0x00005CC2,
+ 3652: 0x000244CE,
+ 3653: 0x00027E4D,
+ 3654: 0x000243BD,
+ 3655: 0x00006A0C,
+ 3656: 0x00024256,
+ 3657: 0x00021304,
+ 3658: 0x000070A6,
+ 3659: 0x00007133,
+ 3660: 0x000243E9,
+ 3661: 0x00003DA5,
+ 3662: 0x00006CDF,
+ 3663: 0x0002F825,
+ 3664: 0x00024A4F,
+ 3665: 0x00007E65,
+ 3666: 0x000059EB,
+ 3667: 0x00005D2F,
+ 3668: 0x00003DF3,
+ 3669: 0x00005F5C,
+ 3670: 0x00024A5D,
+ 3671: 0x000217DF,
+ 3672: 0x00007DA4,
+ 3673: 0x00008426,
+ 3674: 0x00005485,
+ 3675: 0x00023AFA,
+ 3676: 0x00023300,
+ 3677: 0x00020214,
+ 3678: 0x0000577E,
+ 3679: 0x000208D5,
+ 3680: 0x00020619,
+ 3681: 0x00003FE5,
+ 3682: 0x00021F9E,
+ 3683: 0x0002A2B6,
+ 3684: 0x00007003,
+ 3685: 0x0002915B,
+ 3686: 0x00005D70,
+ 3687: 0x0000738F,
+ 3688: 0x00007CD3,
+ 3689: 0x00028A59,
+ 3690: 0x00029420,
+ 3691: 0x00004FC8,
+ 3692: 0x00007FE7,
+ 3693: 0x000072CD,
+ 3694: 0x00007310,
+ 3695: 0x00027AF4,
+ 3696: 0x00007338,
+ 3697: 0x00007339,
+ 3698: 0x000256F6,
+ 3699: 0x00007341,
+ 3700: 0x00007348,
+ 3701: 0x00003EA9,
+ 3702: 0x00027B18,
+ 3703: 0x0000906C,
+ 3704: 0x000071F5,
+ 3705: 0x000248F2,
+ 3706: 0x000073E1,
+ 3707: 0x000081F6,
+ 3708: 0x00003ECA,
+ 3709: 0x0000770C,
+ 3710: 0x00003ED1,
+ 3711: 0x00006CA2,
+ 3712: 0x000056FD,
+ 3713: 0x00007419,
+ 3714: 0x0000741E,
+ 3715: 0x0000741F,
+ 3716: 0x00003EE2,
+ 3717: 0x00003EF0,
+ 3718: 0x00003EF4,
+ 3719: 0x00003EFA,
+ 3720: 0x000074D3,
+ 3721: 0x00003F0E,
+ 3722: 0x00003F53,
+ 3723: 0x00007542,
+ 3724: 0x0000756D,
+ 3725: 0x00007572,
+ 3726: 0x0000758D,
+ 3727: 0x00003F7C,
+ 3728: 0x000075C8,
+ 3729: 0x000075DC,
+ 3730: 0x00003FC0,
+ 3731: 0x0000764D,
+ 3732: 0x00003FD7,
+ 3733: 0x00007674,
+ 3734: 0x00003FDC,
+ 3735: 0x0000767A,
+ 3736: 0x00024F5C,
+ 3737: 0x00007188,
+ 3738: 0x00005623,
+ 3739: 0x00008980,
+ 3740: 0x00005869,
+ 3741: 0x0000401D,
+ 3742: 0x00007743,
+ 3743: 0x00004039,
+ 3744: 0x00006761,
+ 3745: 0x00004045,
+ 3746: 0x000035DB,
+ 3747: 0x00007798,
+ 3748: 0x0000406A,
+ 3749: 0x0000406F,
+ 3750: 0x00005C5E,
+ 3751: 0x000077BE,
+ 3752: 0x000077CB,
+ 3753: 0x000058F2,
+ 3754: 0x00007818,
+ 3755: 0x000070B9,
+ 3756: 0x0000781C,
+ 3757: 0x000040A8,
+ 3758: 0x00007839,
+ 3759: 0x00007847,
+ 3760: 0x00007851,
+ 3761: 0x00007866,
+ 3762: 0x00008448,
+ 3763: 0x00025535,
+ 3764: 0x00007933,
+ 3765: 0x00006803,
+ 3766: 0x00007932,
+ 3767: 0x00004103,
+ 3768: 0x00004109,
+ 3769: 0x00007991,
+ 3770: 0x00007999,
+ 3771: 0x00008FBB,
+ 3772: 0x00007A06,
+ 3773: 0x00008FBC,
+ 3774: 0x00004167,
+ 3775: 0x00007A91,
+ 3776: 0x000041B2,
+ 3777: 0x00007ABC,
+ 3778: 0x00008279,
+ 3779: 0x000041C4,
+ 3780: 0x00007ACF,
+ 3781: 0x00007ADB,
+ 3782: 0x000041CF,
+ 3783: 0x00004E21,
+ 3784: 0x00007B62,
+ 3785: 0x00007B6C,
+ 3786: 0x00007B7B,
+ 3787: 0x00007C12,
+ 3788: 0x00007C1B,
+ 3789: 0x00004260,
+ 3790: 0x0000427A,
+ 3791: 0x00007C7B,
+ 3792: 0x00007C9C,
+ 3793: 0x0000428C,
+ 3794: 0x00007CB8,
+ 3795: 0x00004294,
+ 3796: 0x00007CED,
+ 3797: 0x00008F93,
+ 3798: 0x000070C0,
+ 3799: 0x00020CCF,
+ 3800: 0x00007DCF,
+ 3801: 0x00007DD4,
+ 3802: 0x00007DD0,
+ 3803: 0x00007DFD,
+ 3804: 0x00007FAE,
+ 3805: 0x00007FB4,
+ 3806: 0x0000729F,
+ 3807: 0x00004397,
+ 3808: 0x00008020,
+ 3809: 0x00008025,
+ 3810: 0x00007B39,
+ 3811: 0x0000802E,
+ 3812: 0x00008031,
+ 3813: 0x00008054,
+ 3814: 0x00003DCC,
+ 3815: 0x000057B4,
+ 3816: 0x000070A0,
+ 3817: 0x000080B7,
+ 3818: 0x000080E9,
+ 3819: 0x000043ED,
+ 3820: 0x0000810C,
+ 3821: 0x0000732A,
+ 3822: 0x0000810E,
+ 3823: 0x00008112,
+ 3824: 0x00007560,
+ 3825: 0x00008114,
+ 3826: 0x00004401,
+ 3827: 0x00003B39,
+ 3828: 0x00008156,
+ 3829: 0x00008159,
+ 3830: 0x0000815A,
+ 3831: 0x00004413,
+ 3832: 0x0000583A,
+ 3833: 0x0000817C,
+ 3834: 0x00008184,
+ 3835: 0x00004425,
+ 3836: 0x00008193,
+ 3837: 0x0000442D,
+ 3838: 0x000081A5,
+ 3839: 0x000057EF,
+ 3840: 0x000081C1,
+ 3841: 0x000081E4,
+ 3842: 0x00008254,
+ 3843: 0x0000448F,
+ 3844: 0x000082A6,
+ 3845: 0x00008276,
+ 3846: 0x000082CA,
+ 3847: 0x000082D8,
+ 3848: 0x000082FF,
+ 3849: 0x000044B0,
+ 3850: 0x00008357,
+ 3851: 0x00009669,
+ 3852: 0x0000698A,
+ 3853: 0x00008405,
+ 3854: 0x000070F5,
+ 3855: 0x00008464,
+ 3856: 0x000060E3,
+ 3857: 0x00008488,
+ 3858: 0x00004504,
+ 3859: 0x000084BE,
+ 3860: 0x000084E1,
+ 3861: 0x000084F8,
+ 3862: 0x00008510,
+ 3863: 0x00008538,
+ 3864: 0x00008552,
+ 3865: 0x0000453B,
+ 3866: 0x0000856F,
+ 3867: 0x00008570,
+ 3868: 0x000085E0,
+ 3869: 0x00004577,
+ 3870: 0x00008672,
+ 3871: 0x00008692,
+ 3872: 0x000086B2,
+ 3873: 0x000086EF,
+ 3874: 0x00009645,
+ 3875: 0x0000878B,
+ 3876: 0x00004606,
+ 3877: 0x00004617,
+ 3878: 0x000088AE,
+ 3879: 0x000088FF,
+ 3880: 0x00008924,
+ 3881: 0x00008947,
+ 3882: 0x00008991,
+ 3883: 0x00027967,
+ 3884: 0x00008A29,
+ 3885: 0x00008A38,
+ 3886: 0x00008A94,
+ 3887: 0x00008AB4,
+ 3888: 0x00008C51,
+ 3889: 0x00008CD4,
+ 3890: 0x00008CF2,
+ 3891: 0x00008D1C,
+ 3892: 0x00004798,
+ 3893: 0x0000585F,
+ 3894: 0x00008DC3,
+ 3895: 0x000047ED,
+ 3896: 0x00004EEE,
+ 3897: 0x00008E3A,
+ 3898: 0x000055D8,
+ 3899: 0x00005754,
+ 3900: 0x00008E71,
+ 3901: 0x000055F5,
+ 3902: 0x00008EB0,
+ 3903: 0x00004837,
+ 3904: 0x00008ECE,
+ 3905: 0x00008EE2,
+ 3906: 0x00008EE4,
+ 3907: 0x00008EED,
+ 3908: 0x00008EF2,
+ 3909: 0x00008FB7,
+ 3910: 0x00008FC1,
+ 3911: 0x00008FCA,
+ 3912: 0x00008FCC,
+ 3913: 0x00009033,
+ 3914: 0x000099C4,
+ 3915: 0x000048AD,
+ 3916: 0x000098E0,
+ 3917: 0x00009213,
+ 3918: 0x0000491E,
+ 3919: 0x00009228,
+ 3920: 0x00009258,
+ 3921: 0x0000926B,
+ 3922: 0x000092B1,
+ 3923: 0x000092AE,
+ 3924: 0x000092BF,
+ 3925: 0x000092E3,
+ 3926: 0x000092EB,
+ 3927: 0x000092F3,
+ 3928: 0x000092F4,
+ 3929: 0x000092FD,
+ 3930: 0x00009343,
+ 3931: 0x00009384,
+ 3932: 0x000093AD,
+ 3933: 0x00004945,
+ 3934: 0x00004951,
+ 3935: 0x00009EBF,
+ 3936: 0x00009417,
+ 3937: 0x00005301,
+ 3938: 0x0000941D,
+ 3939: 0x0000942D,
+ 3940: 0x0000943E,
+ 3941: 0x0000496A,
+ 3942: 0x00009454,
+ 3943: 0x00009479,
+ 3944: 0x0000952D,
+ 3945: 0x000095A2,
+ 3946: 0x000049A7,
+ 3947: 0x000095F4,
+ 3948: 0x00009633,
+ 3949: 0x000049E5,
+ 3950: 0x000067A0,
+ 3951: 0x00004A24,
+ 3952: 0x00009740,
+ 3953: 0x00004A35,
+ 3954: 0x000097B2,
+ 3955: 0x000097C2,
+ 3956: 0x00005654,
+ 3957: 0x00004AE4,
+ 3958: 0x000060E8,
+ 3959: 0x000098B9,
+ 3960: 0x00004B19,
+ 3961: 0x000098F1,
+ 3962: 0x00005844,
+ 3963: 0x0000990E,
+ 3964: 0x00009919,
+ 3965: 0x000051B4,
+ 3966: 0x0000991C,
+ 3967: 0x00009937,
+ 3968: 0x00009942,
+ 3969: 0x0000995D,
+ 3970: 0x00009962,
+ 3971: 0x00004B70,
+ 3972: 0x000099C5,
+ 3973: 0x00004B9D,
+ 3974: 0x00009A3C,
+ 3975: 0x00009B0F,
+ 3976: 0x00007A83,
+ 3977: 0x00009B69,
+ 3978: 0x00009B81,
+ 3979: 0x00009BDD,
+ 3980: 0x00009BF1,
+ 3981: 0x00009BF4,
+ 3982: 0x00004C6D,
+ 3983: 0x00009C20,
+ 3984: 0x0000376F,
+ 3985: 0x00021BC2,
+ 3986: 0x00009D49,
+ 3987: 0x00009C3A,
+ 3988: 0x00009EFE,
+ 3989: 0x00005650,
+ 3990: 0x00009D93,
+ 3991: 0x00009DBD,
+ 3992: 0x00009DC0,
+ 3993: 0x00009DFC,
+ 3994: 0x000094F6,
+ 3995: 0x00008FB6,
+ 3996: 0x00009E7B,
+ 3997: 0x00009EAC,
+ 3998: 0x00009EB1,
+ 3999: 0x00009EBD,
+ 4000: 0x00009EC6,
+ 4001: 0x000094DC,
+ 4002: 0x00009EE2,
+ 4003: 0x00009EF1,
+ 4004: 0x00009EF8,
+ 4005: 0x00007AC8,
+ 4006: 0x00009F44,
+ 4007: 0x00020094,
+ 4008: 0x000202B7,
+ 4009: 0x000203A0,
+ 4010: 0x0000691A,
+ 4011: 0x000094C3,
+ 4012: 0x000059AC,
+ 4013: 0x000204D7,
+ 4014: 0x00005840,
+ 4015: 0x000094C1,
+ 4016: 0x000037B9,
+ 4017: 0x000205D5,
+ 4018: 0x00020615,
+ 4019: 0x00020676,
+ 4020: 0x000216BA,
+ 4021: 0x00005757,
+ 4022: 0x00007173,
+ 4023: 0x00020AC2,
+ 4024: 0x00020ACD,
+ 4025: 0x00020BBF,
+ 4026: 0x0000546A,
+ 4027: 0x0002F83B,
+ 4028: 0x00020BCB,
+ 4029: 0x0000549E,
+ 4030: 0x00020BFB,
+ 4031: 0x00020C3B,
+ 4032: 0x00020C53,
+ 4033: 0x00020C65,
+ 4034: 0x00020C7C,
+ 4035: 0x000060E7,
+ 4036: 0x00020C8D,
+ 4037: 0x0000567A,
+ 4038: 0x00020CB5,
+ 4039: 0x00020CDD,
+ 4040: 0x00020CED,
+ 4041: 0x00020D6F,
+ 4042: 0x00020DB2,
+ 4043: 0x00020DC8,
+ 4044: 0x00006955,
+ 4045: 0x00009C2F,
+ 4046: 0x000087A5,
+ 4047: 0x00020E04,
+ 4048: 0x00020E0E,
+ 4049: 0x00020ED7,
+ 4050: 0x00020F90,
+ 4051: 0x00020F2D,
+ 4052: 0x00020E73,
+ 4053: 0x00005C20,
+ 4054: 0x00020FBC,
+ 4055: 0x00005E0B,
+ 4056: 0x0002105C,
+ 4057: 0x0002104F,
+ 4058: 0x00021076,
+ 4059: 0x0000671E,
+ 4060: 0x0002107B,
+ 4061: 0x00021088,
+ 4062: 0x00021096,
+ 4063: 0x00003647,
+ 4064: 0x000210BF,
+ 4065: 0x000210D3,
+ 4066: 0x0002112F,
+ 4067: 0x0002113B,
+ 4068: 0x00005364,
+ 4069: 0x000084AD,
+ 4070: 0x000212E3,
+ 4071: 0x00021375,
+ 4072: 0x00021336,
+ 4073: 0x00008B81,
+ 4074: 0x00021577,
+ 4075: 0x00021619,
+ 4076: 0x000217C3,
+ 4077: 0x000217C7,
+ 4078: 0x00004E78,
+ 4079: 0x000070BB,
+ 4080: 0x0002182D,
+ 4081: 0x0002196A,
+ 4082: 0x00021A2D,
+ 4083: 0x00021A45,
+ 4084: 0x00021C2A,
+ 4085: 0x00021C70,
+ 4086: 0x00021CAC,
+ 4087: 0x00021EC8,
+ 4088: 0x000062C3,
+ 4089: 0x00021ED5,
+ 4090: 0x00021F15,
+ 4091: 0x00007198,
+ 4092: 0x00006855,
+ 4093: 0x00022045,
+ 4094: 0x000069E9,
+ 4095: 0x000036C8,
+ 4096: 0x0002227C,
+ 4097: 0x000223D7,
+ 4098: 0x000223FA,
+ 4099: 0x0002272A,
+ 4100: 0x00022871,
+ 4101: 0x0002294F,
+ 4102: 0x000082FD,
+ 4103: 0x00022967,
+ 4104: 0x00022993,
+ 4105: 0x00022AD5,
+ 4106: 0x000089A5,
+ 4107: 0x00022AE8,
+ 4108: 0x00008FA0,
+ 4109: 0x00022B0E,
+ 4110: 0x000097B8,
+ 4111: 0x00022B3F,
+ 4112: 0x00009847,
+ 4113: 0x00009ABD,
+ 4114: 0x00022C4C,
+ 4116: 0x00022C88,
+ 4117: 0x00022CB7,
+ 4118: 0x00025BE8,
+ 4119: 0x00022D08,
+ 4120: 0x00022D12,
+ 4121: 0x00022DB7,
+ 4122: 0x00022D95,
+ 4123: 0x00022E42,
+ 4124: 0x00022F74,
+ 4125: 0x00022FCC,
+ 4126: 0x00023033,
+ 4127: 0x00023066,
+ 4128: 0x0002331F,
+ 4129: 0x000233DE,
+ 4130: 0x00005FB1,
+ 4131: 0x00006648,
+ 4132: 0x000066BF,
+ 4133: 0x00027A79,
+ 4134: 0x00023567,
+ 4135: 0x000235F3,
+ 4136: 0x00007201,
+ 4137: 0x000249BA,
+ 4138: 0x000077D7,
+ 4139: 0x0002361A,
+ 4140: 0x00023716,
+ 4141: 0x00007E87,
+ 4142: 0x00020346,
+ 4143: 0x000058B5,
+ 4144: 0x0000670E,
+ 4145: 0x00006918,
+ 4146: 0x00023AA7,
+ 4147: 0x00027657,
+ 4148: 0x00025FE2,
+ 4149: 0x00023E11,
+ 4150: 0x00023EB9,
+ 4151: 0x000275FE,
+ 4152: 0x0002209A,
+ 4153: 0x000048D0,
+ 4154: 0x00004AB8,
+ 4155: 0x00024119,
+ 4156: 0x00028A9A,
+ 4157: 0x000242EE,
+ 4158: 0x0002430D,
+ 4159: 0x0002403B,
+ 4160: 0x00024334,
+ 4161: 0x00024396,
+ 4162: 0x00024A45,
+ 4163: 0x000205CA,
+ 4164: 0x000051D2,
+ 4165: 0x00020611,
+ 4166: 0x0000599F,
+ 4167: 0x00021EA8,
+ 4168: 0x00003BBE,
+ 4169: 0x00023CFF,
+ 4170: 0x00024404,
+ 4171: 0x000244D6,
+ 4172: 0x00005788,
+ 4173: 0x00024674,
+ 4174: 0x0000399B,
+ 4175: 0x0002472F,
+ 4176: 0x000285E8,
+ 4177: 0x000299C9,
+ 4178: 0x00003762,
+ 4179: 0x000221C3,
+ 4180: 0x00008B5E,
+ 4181: 0x00028B4E,
+ 4182: 0x000099D6,
+ 4183: 0x00024812,
+ 4184: 0x000248FB,
+ 4185: 0x00024A15,
+ 4186: 0x00007209,
+ 4187: 0x00024AC0,
+ 4188: 0x00020C78,
+ 4189: 0x00005965,
+ 4190: 0x00024EA5,
+ 4191: 0x00024F86,
+ 4192: 0x00020779,
+ 4193: 0x00008EDA,
+ 4194: 0x0002502C,
+ 4195: 0x0000528F,
+ 4196: 0x0000573F,
+ 4197: 0x00007171,
+ 4198: 0x00025299,
+ 4199: 0x00025419,
+ 4200: 0x00023F4A,
+ 4201: 0x00024AA7,
+ 4202: 0x000055BC,
+ 4203: 0x00025446,
+ 4204: 0x0002546E,
+ 4205: 0x00026B52,
+ 4206: 0x000091D4,
+ 4207: 0x00003473,
+ 4208: 0x0002553F,
+ 4209: 0x00027632,
+ 4210: 0x0002555E,
+ 4211: 0x00004718,
+ 4212: 0x00025562,
+ 4213: 0x00025566,
+ 4214: 0x000257C7,
+ 4215: 0x0002493F,
+ 4216: 0x0002585D,
+ 4217: 0x00005066,
+ 4218: 0x000034FB,
+ 4219: 0x000233CC,
+ 4220: 0x000060DE,
+ 4221: 0x00025903,
+ 4222: 0x0000477C,
+ 4223: 0x00028948,
+ 4224: 0x00025AAE,
+ 4225: 0x00025B89,
+ 4226: 0x00025C06,
+ 4227: 0x00021D90,
+ 4228: 0x000057A1,
+ 4229: 0x00007151,
+ 4230: 0x00006FB6,
+ 4231: 0x00026102,
+ 4232: 0x00027C12,
+ 4233: 0x00009056,
+ 4234: 0x000261B2,
+ 4235: 0x00024F9A,
+ 4236: 0x00008B62,
+ 4237: 0x00026402,
+ 4238: 0x0002644A,
+ 4239: 0x00005D5B,
+ 4240: 0x00026BF7,
+ 4241: 0x00008F36,
+ 4242: 0x00026484,
+ 4243: 0x0002191C,
+ 4244: 0x00008AEA,
+ 4245: 0x000249F6,
+ 4246: 0x00026488,
+ 4247: 0x00023FEF,
+ 4248: 0x00026512,
+ 4249: 0x00004BC0,
+ 4250: 0x000265BF,
+ 4251: 0x000266B5,
+ 4252: 0x0002271B,
+ 4253: 0x00009465,
+ 4254: 0x000257E1,
+ 4255: 0x00006195,
+ 4256: 0x00005A27,
+ 4257: 0x0002F8CD,
+ 4258: 0x00004FBB,
+ 4259: 0x000056B9,
+ 4260: 0x00024521,
+ 4261: 0x000266FC,
+ 4262: 0x00004E6A,
+ 4263: 0x00024934,
+ 4264: 0x00009656,
+ 4265: 0x00006D8F,
+ 4266: 0x00026CBD,
+ 4267: 0x00003618,
+ 4268: 0x00008977,
+ 4269: 0x00026799,
+ 4270: 0x0002686E,
+ 4271: 0x00026411,
+ 4272: 0x0002685E,
+ 4273: 0x000071DF,
+ 4274: 0x000268C7,
+ 4275: 0x00007B42,
+ 4276: 0x000290C0,
+ 4277: 0x00020A11,
+ 4278: 0x00026926,
+ 4279: 0x00009104,
+ 4280: 0x00026939,
+ 4281: 0x00007A45,
+ 4282: 0x00009DF0,
+ 4283: 0x000269FA,
+ 4284: 0x00009A26,
+ 4285: 0x00026A2D,
+ 4286: 0x0000365F,
+ 4287: 0x00026469,
+ 4288: 0x00020021,
+ 4289: 0x00007983,
+ 4290: 0x00026A34,
+ 4291: 0x00026B5B,
+ 4292: 0x00005D2C,
+ 4293: 0x00023519,
+ 4294: 0x000083CF,
+ 4295: 0x00026B9D,
+ 4296: 0x000046D0,
+ 4297: 0x00026CA4,
+ 4298: 0x0000753B,
+ 4299: 0x00008865,
+ 4300: 0x00026DAE,
+ 4301: 0x000058B6,
+ 4302: 0x0000371C,
+ 4303: 0x0002258D,
+ 4304: 0x0002704B,
+ 4305: 0x000271CD,
+ 4306: 0x00003C54,
+ 4307: 0x00027280,
+ 4308: 0x00027285,
+ 4309: 0x00009281,
+ 4310: 0x0002217A,
+ 4311: 0x0002728B,
+ 4312: 0x00009330,
+ 4313: 0x000272E6,
+ 4314: 0x000249D0,
+ 4315: 0x00006C39,
+ 4316: 0x0000949F,
+ 4317: 0x00027450,
+ 4318: 0x00020EF8,
+ 4319: 0x00008827,
+ 4320: 0x000088F5,
+ 4321: 0x00022926,
+ 4322: 0x00028473,
+ 4323: 0x000217B1,
+ 4324: 0x00006EB8,
+ 4325: 0x00024A2A,
+ 4326: 0x00021820,
+ 4327: 0x000039A4,
+ 4328: 0x000036B9,
+ 4329: 0x00005C10,
+ 4330: 0x000079E3,
+ 4331: 0x0000453F,
+ 4332: 0x000066B6,
+ 4333: 0x00029CAD,
+ 4334: 0x000298A4,
+ 4335: 0x00008943,
+ 4336: 0x000277CC,
+ 4337: 0x00027858,
+ 4338: 0x000056D6,
+ 4339: 0x000040DF,
+ 4340: 0x0002160A,
+ 4341: 0x000039A1,
+ 4342: 0x0002372F,
+ 4343: 0x000280E8,
+ 4344: 0x000213C5,
+ 4345: 0x000071AD,
+ 4346: 0x00008366,
+ 4347: 0x000279DD,
+ 4348: 0x000291A8,
+ 4349: 0x00005A67,
+ 4350: 0x00004CB7,
+ 4351: 0x000270AF,
+ 4352: 0x000289AB,
+ 4353: 0x000279FD,
+ 4354: 0x00027A0A,
+ 4355: 0x00027B0B,
+ 4356: 0x00027D66,
+ 4357: 0x0002417A,
+ 4358: 0x00007B43,
+ 4359: 0x0000797E,
+ 4360: 0x00028009,
+ 4361: 0x00006FB5,
+ 4362: 0x0002A2DF,
+ 4363: 0x00006A03,
+ 4364: 0x00028318,
+ 4365: 0x000053A2,
+ 4366: 0x00026E07,
+ 4367: 0x000093BF,
+ 4368: 0x00006836,
+ 4369: 0x0000975D,
+ 4370: 0x0002816F,
+ 4371: 0x00028023,
+ 4372: 0x000269B5,
+ 4373: 0x000213ED,
+ 4374: 0x0002322F,
+ 4375: 0x00028048,
+ 4376: 0x00005D85,
+ 4377: 0x00028C30,
+ 4378: 0x00028083,
+ 4379: 0x00005715,
+ 4380: 0x00009823,
+ 4381: 0x00028949,
+ 4382: 0x00005DAB,
+ 4383: 0x00024988,
+ 4384: 0x000065BE,
+ 4385: 0x000069D5,
+ 4386: 0x000053D2,
+ 4387: 0x00024AA5,
+ 4388: 0x00023F81,
+ 4389: 0x00003C11,
+ 4390: 0x00006736,
+ 4391: 0x00028090,
+ 4392: 0x000280F4,
+ 4393: 0x0002812E,
+ 4394: 0x00021FA1,
+ 4395: 0x0002814F,
+ 4396: 0x00028189,
+ 4397: 0x000281AF,
+ 4398: 0x0002821A,
+ 4399: 0x00028306,
+ 4400: 0x0002832F,
+ 4401: 0x0002838A,
+ 4402: 0x000035CA,
+ 4403: 0x00028468,
+ 4404: 0x000286AA,
+ 4405: 0x000048FA,
+ 4406: 0x000063E6,
+ 4407: 0x00028956,
+ 4408: 0x00007808,
+ 4409: 0x00009255,
+ 4410: 0x000289B8,
+ 4411: 0x000043F2,
+ 4412: 0x000289E7,
+ 4413: 0x000043DF,
+ 4414: 0x000289E8,
+ 4415: 0x00028B46,
+ 4416: 0x00028BD4,
+ 4417: 0x000059F8,
+ 4418: 0x00028C09,
+ 4419: 0x00008F0B,
+ 4420: 0x00028FC5,
+ 4421: 0x000290EC,
+ 4422: 0x00007B51,
+ 4423: 0x00029110,
+ 4424: 0x0002913C,
+ 4425: 0x00003DF7,
+ 4426: 0x0002915E,
+ 4427: 0x00024ACA,
+ 4428: 0x00008FD0,
+ 4429: 0x0000728F,
+ 4430: 0x0000568B,
+ 4431: 0x000294E7,
+ 4432: 0x000295E9,
+ 4433: 0x000295B0,
+ 4434: 0x000295B8,
+ 4435: 0x00029732,
+ 4436: 0x000298D1,
+ 4437: 0x00029949,
+ 4438: 0x0002996A,
+ 4439: 0x000299C3,
+ 4440: 0x00029A28,
+ 4441: 0x00029B0E,
+ 4442: 0x00029D5A,
+ 4443: 0x00029D9B,
+ 4444: 0x00007E9F,
+ 4445: 0x00029EF8,
+ 4446: 0x00029F23,
+ 4447: 0x00004CA4,
+ 4448: 0x00009547,
+ 4449: 0x0002A293,
+ 4450: 0x000071A2,
+ 4451: 0x0002A2FF,
+ 4452: 0x00004D91,
+ 4453: 0x00009012,
+ 4454: 0x0002A5CB,
+ 4455: 0x00004D9C,
+ 4456: 0x00020C9C,
+ 4457: 0x00008FBE,
+ 4458: 0x000055C1,
+ 4459: 0x00008FBA,
+ 4460: 0x000224B0,
+ 4461: 0x00008FB9,
+ 4462: 0x00024A93,
+ 4463: 0x00004509,
+ 4464: 0x00007E7F,
+ 4465: 0x00006F56,
+ 4466: 0x00006AB1,
+ 4467: 0x00004EEA,
+ 4468: 0x000034E4,
+ 4469: 0x00028B2C,
+ 4470: 0x0002789D,
+ 4471: 0x0000373A,
+ 4472: 0x00008E80,
+ 4473: 0x000217F5,
+ 4474: 0x00028024,
+ 4475: 0x00028B6C,
+ 4476: 0x00028B99,
+ 4477: 0x00027A3E,
+ 4478: 0x000266AF,
+ 4479: 0x00003DEB,
+ 4480: 0x00027655,
+ 4481: 0x00023CB7,
+ 4482: 0x00025635,
+ 4483: 0x00025956,
+ 4484: 0x00004E9A,
+ 4485: 0x00025E81,
+ 4486: 0x00026258,
+ 4487: 0x000056BF,
+ 4488: 0x00020E6D,
+ 4489: 0x00008E0E,
+ 4490: 0x00005B6D,
+ 4491: 0x00023E88,
+ 4492: 0x00024C9E,
+ 4493: 0x000063DE,
+ 4494: 0x000062D0,
+ 4495: 0x000217F6,
+ 4496: 0x0002187B,
+ 4497: 0x00006530,
+ 4498: 0x0000562D,
+ 4499: 0x00025C4A,
+ 4500: 0x0000541A,
+ 4501: 0x00025311,
+ 4502: 0x00003DC6,
+ 4503: 0x00029D98,
+ 4504: 0x00004C7D,
+ 4505: 0x00005622,
+ 4506: 0x0000561E,
+ 4507: 0x00007F49,
+ 4508: 0x00025ED8,
+ 4509: 0x00005975,
+ 4510: 0x00023D40,
+ 4511: 0x00008770,
+ 4512: 0x00004E1C,
+ 4513: 0x00020FEA,
+ 4514: 0x00020D49,
+ 4515: 0x000236BA,
+ 4516: 0x00008117,
+ 4517: 0x00009D5E,
+ 4518: 0x00008D18,
+ 4519: 0x0000763B,
+ 4520: 0x00009C45,
+ 4521: 0x0000764E,
+ 4522: 0x000077B9,
+ 4523: 0x00009345,
+ 4524: 0x00005432,
+ 4525: 0x00008148,
+ 4526: 0x000082F7,
+ 4527: 0x00005625,
+ 4528: 0x00008132,
+ 4529: 0x00008418,
+ 4530: 0x000080BD,
+ 4531: 0x000055EA,
+ 4532: 0x00007962,
+ 4533: 0x00005643,
+ 4534: 0x00005416,
+ 4535: 0x00020E9D,
+ 4536: 0x000035CE,
+ 4537: 0x00005605,
+ 4538: 0x000055F1,
+ 4539: 0x000066F1,
+ 4540: 0x000282E2,
+ 4541: 0x0000362D,
+ 4542: 0x00007534,
+ 4543: 0x000055F0,
+ 4544: 0x000055BA,
+ 4545: 0x00005497,
+ 4546: 0x00005572,
+ 4547: 0x00020C41,
+ 4548: 0x00020C96,
+ 4549: 0x00005ED0,
+ 4550: 0x00025148,
+ 4551: 0x00020E76,
+ 4552: 0x00022C62,
+ 4553: 0x00020EA2,
+ 4554: 0x00009EAB,
+ 4555: 0x00007D5A,
+ 4556: 0x000055DE,
+ 4557: 0x00021075,
+ 4558: 0x0000629D,
+ 4559: 0x0000976D,
+ 4560: 0x00005494,
+ 4561: 0x00008CCD,
+ 4562: 0x000071F6,
+ 4563: 0x00009176,
+ 4564: 0x000063FC,
+ 4565: 0x000063B9,
+ 4566: 0x000063FE,
+ 4567: 0x00005569,
+ 4568: 0x00022B43,
+ 4569: 0x00009C72,
+ 4570: 0x00022EB3,
+ 4571: 0x0000519A,
+ 4572: 0x000034DF,
+ 4573: 0x00020DA7,
+ 4574: 0x000051A7,
+ 4575: 0x0000544D,
+ 4576: 0x0000551E,
+ 4577: 0x00005513,
+ 4578: 0x00007666,
+ 4579: 0x00008E2D,
+ 4580: 0x0002688A,
+ 4581: 0x000075B1,
+ 4582: 0x000080B6,
+ 4583: 0x00008804,
+ 4584: 0x00008786,
+ 4585: 0x000088C7,
+ 4586: 0x000081B6,
+ 4587: 0x0000841C,
+ 4588: 0x000210C1,
+ 4589: 0x000044EC,
+ 4590: 0x00007304,
+ 4591: 0x00024706,
+ 4592: 0x00005B90,
+ 4593: 0x0000830B,
+ 4594: 0x00026893,
+ 4595: 0x0000567B,
+ 4596: 0x000226F4,
+ 4597: 0x00027D2F,
+ 4598: 0x000241A3,
+ 4599: 0x00027D73,
+ 4600: 0x00026ED0,
+ 4601: 0x000272B6,
+ 4602: 0x00009170,
+ 4603: 0x000211D9,
+ 4604: 0x00009208,
+ 4605: 0x00023CFC,
+ 4606: 0x0002A6A9,
+ 4607: 0x00020EAC,
+ 4608: 0x00020EF9,
+ 4609: 0x00007266,
+ 4610: 0x00021CA2,
+ 4611: 0x0000474E,
+ 4612: 0x00024FC2,
+ 4613: 0x00027FF9,
+ 4614: 0x00020FEB,
+ 4615: 0x000040FA,
+ 4616: 0x00009C5D,
+ 4617: 0x0000651F,
+ 4618: 0x00022DA0,
+ 4619: 0x000048F3,
+ 4620: 0x000247E0,
+ 4621: 0x00029D7C,
+ 4622: 0x00020FEC,
+ 4623: 0x00020E0A,
+ 4624: 0x00006062,
+ 4625: 0x000275A3,
+ 4626: 0x00020FED,
+ 4628: 0x00026048,
+ 4629: 0x00021187,
+ 4630: 0x000071A3,
+ 4631: 0x00007E8E,
+ 4632: 0x00009D50,
+ 4633: 0x00004E1A,
+ 4634: 0x00004E04,
+ 4635: 0x00003577,
+ 4636: 0x00005B0D,
+ 4637: 0x00006CB2,
+ 4638: 0x00005367,
+ 4639: 0x000036AC,
+ 4640: 0x000039DC,
+ 4641: 0x0000537D,
+ 4642: 0x000036A5,
+ 4643: 0x00024618,
+ 4644: 0x0000589A,
+ 4645: 0x00024B6E,
+ 4646: 0x0000822D,
+ 4647: 0x0000544B,
+ 4648: 0x000057AA,
+ 4649: 0x00025A95,
+ 4650: 0x00020979,
+ 4652: 0x00003A52,
+ 4653: 0x00022465,
+ 4654: 0x00007374,
+ 4655: 0x00029EAC,
+ 4656: 0x00004D09,
+ 4657: 0x00009BED,
+ 4658: 0x00023CFE,
+ 4659: 0x00029F30,
+ 4660: 0x00004C5B,
+ 4661: 0x00024FA9,
+ 4662: 0x0002959E,
+ 4663: 0x00029FDE,
+ 4664: 0x0000845C,
+ 4665: 0x00023DB6,
+ 4666: 0x000272B2,
+ 4667: 0x000267B3,
+ 4668: 0x00023720,
+ 4669: 0x0000632E,
+ 4670: 0x00007D25,
+ 4671: 0x00023EF7,
+ 4672: 0x00023E2C,
+ 4673: 0x00003A2A,
+ 4674: 0x00009008,
+ 4675: 0x000052CC,
+ 4676: 0x00003E74,
+ 4677: 0x0000367A,
+ 4678: 0x000045E9,
+ 4679: 0x0002048E,
+ 4680: 0x00007640,
+ 4681: 0x00005AF0,
+ 4682: 0x00020EB6,
+ 4683: 0x0000787A,
+ 4684: 0x00027F2E,
+ 4685: 0x000058A7,
+ 4686: 0x000040BF,
+ 4687: 0x0000567C,
+ 4688: 0x00009B8B,
+ 4689: 0x00005D74,
+ 4690: 0x00007654,
+ 4691: 0x0002A434,
+ 4692: 0x00009E85,
+ 4693: 0x00004CE1,
+ 4694: 0x000075F9,
+ 4695: 0x000037FB,
+ 4696: 0x00006119,
+ 4697: 0x000230DA,
+ 4698: 0x000243F2,
+ 4700: 0x0000565D,
+ 4701: 0x000212A9,
+ 4702: 0x000057A7,
+ 4703: 0x00024963,
+ 4704: 0x00029E06,
+ 4705: 0x00005234,
+ 4706: 0x000270AE,
+ 4707: 0x000035AD,
+ 4708: 0x00006C4A,
+ 4709: 0x00009D7C,
+ 4710: 0x00007C56,
+ 4711: 0x00009B39,
+ 4712: 0x000057DE,
+ 4713: 0x0002176C,
+ 4714: 0x00005C53,
+ 4715: 0x000064D3,
+ 4716: 0x000294D0,
+ 4717: 0x00026335,
+ 4718: 0x00027164,
+ 4719: 0x000086AD,
+ 4720: 0x00020D28,
+ 4721: 0x00026D22,
+ 4722: 0x00024AE2,
+ 4723: 0x00020D71,
+ 4725: 0x000051FE,
+ 4726: 0x00021F0F,
+ 4727: 0x00005D8E,
+ 4728: 0x00009703,
+ 4729: 0x00021DD1,
+ 4730: 0x00009E81,
+ 4731: 0x0000904C,
+ 4732: 0x00007B1F,
+ 4733: 0x00009B02,
+ 4734: 0x00005CD1,
+ 4735: 0x00007BA3,
+ 4736: 0x00006268,
+ 4737: 0x00006335,
+ 4738: 0x00009AFF,
+ 4739: 0x00007BCF,
+ 4740: 0x00009B2A,
+ 4741: 0x00007C7E,
+ 4742: 0x00009B2E,
+ 4743: 0x00007C42,
+ 4744: 0x00007C86,
+ 4745: 0x00009C15,
+ 4746: 0x00007BFC,
+ 4747: 0x00009B09,
+ 4748: 0x00009F17,
+ 4749: 0x00009C1B,
+ 4750: 0x0002493E,
+ 4751: 0x00009F5A,
+ 4752: 0x00005573,
+ 4753: 0x00005BC3,
+ 4754: 0x00004FFD,
+ 4755: 0x00009E98,
+ 4756: 0x00004FF2,
+ 4757: 0x00005260,
+ 4758: 0x00003E06,
+ 4759: 0x000052D1,
+ 4760: 0x00005767,
+ 4761: 0x00005056,
+ 4762: 0x000059B7,
+ 4763: 0x00005E12,
+ 4764: 0x000097C8,
+ 4765: 0x00009DAB,
+ 4766: 0x00008F5C,
+ 4767: 0x00005469,
+ 4768: 0x000097B4,
+ 4769: 0x00009940,
+ 4770: 0x000097BA,
+ 4771: 0x0000532C,
+ 4772: 0x00006130,
+ 4773: 0x0000692C,
+ 4774: 0x000053DA,
+ 4775: 0x00009C0A,
+ 4776: 0x00009D02,
+ 4777: 0x00004C3B,
+ 4778: 0x00009641,
+ 4779: 0x00006980,
+ 4780: 0x000050A6,
+ 4781: 0x00007546,
+ 4782: 0x0002176D,
+ 4783: 0x000099DA,
+ 4784: 0x00005273,
+ 4786: 0x00009159,
+ 4787: 0x00009681,
+ 4788: 0x0000915C,
+ 4790: 0x00009151,
+ 4791: 0x00028E97,
+ 4792: 0x0000637F,
+ 4793: 0x00026D23,
+ 4794: 0x00006ACA,
+ 4795: 0x00005611,
+ 4796: 0x0000918E,
+ 4797: 0x0000757A,
+ 4798: 0x00006285,
+ 4799: 0x000203FC,
+ 4800: 0x0000734F,
+ 4801: 0x00007C70,
+ 4802: 0x00025C21,
+ 4803: 0x00023CFD,
+ 4805: 0x00024919,
+ 4806: 0x000076D6,
+ 4807: 0x00009B9D,
+ 4808: 0x00004E2A,
+ 4809: 0x00020CD4,
+ 4810: 0x000083BE,
+ 4811: 0x00008842,
+ 4813: 0x00005C4A,
+ 4814: 0x000069C0,
+ 4815: 0x000050ED,
+ 4816: 0x0000577A,
+ 4817: 0x0000521F,
+ 4818: 0x00005DF5,
+ 4819: 0x00004ECE,
+ 4820: 0x00006C31,
+ 4821: 0x000201F2,
+ 4822: 0x00004F39,
+ 4823: 0x0000549C,
+ 4824: 0x000054DA,
+ 4825: 0x0000529A,
+ 4826: 0x00008D82,
+ 4827: 0x000035FE,
+ 4828: 0x00005F0C,
+ 4829: 0x000035F3,
+ 4831: 0x00006B52,
+ 4832: 0x0000917C,
+ 4833: 0x00009FA5,
+ 4834: 0x00009B97,
+ 4835: 0x0000982E,
+ 4836: 0x000098B4,
+ 4837: 0x00009ABA,
+ 4838: 0x00009EA8,
+ 4839: 0x00009E84,
+ 4840: 0x0000717A,
+ 4841: 0x00007B14,
+ 4843: 0x00006BFA,
+ 4844: 0x00008818,
+ 4845: 0x00007F78,
+ 4847: 0x00005620,
+ 4848: 0x0002A64A,
+ 4849: 0x00008E77,
+ 4850: 0x00009F53,
+ 4852: 0x00008DD4,
+ 4853: 0x00008E4F,
+ 4854: 0x00009E1C,
+ 4855: 0x00008E01,
+ 4856: 0x00006282,
+ 4857: 0x0002837D,
+ 4858: 0x00008E28,
+ 4859: 0x00008E75,
+ 4860: 0x00007AD3,
+ 4861: 0x00024A77,
+ 4862: 0x00007A3E,
+ 4863: 0x000078D8,
+ 4864: 0x00006CEA,
+ 4865: 0x00008A67,
+ 4866: 0x00007607,
+ 4867: 0x00028A5A,
+ 4868: 0x00009F26,
+ 4869: 0x00006CCE,
+ 4870: 0x000087D6,
+ 4871: 0x000075C3,
+ 4872: 0x0002A2B2,
+ 4873: 0x00007853,
+ 4874: 0x0002F840,
+ 4875: 0x00008D0C,
+ 4876: 0x000072E2,
+ 4877: 0x00007371,
+ 4878: 0x00008B2D,
+ 4879: 0x00007302,
+ 4880: 0x000074F1,
+ 4881: 0x00008CEB,
+ 4882: 0x00024ABB,
+ 4883: 0x0000862F,
+ 4884: 0x00005FBA,
+ 4885: 0x000088A0,
+ 4886: 0x000044B7,
+ 4888: 0x0002183B,
+ 4889: 0x00026E05,
+ 4891: 0x00008A7E,
+ 4892: 0x0002251B,
+ 4894: 0x000060FD,
+ 4895: 0x00007667,
+ 4896: 0x00009AD7,
+ 4897: 0x00009D44,
+ 4898: 0x0000936E,
+ 4899: 0x00009B8F,
+ 4900: 0x000087F5,
+ 4902: 0x0000880F,
+ 4903: 0x00008CF7,
+ 4904: 0x0000732C,
+ 4905: 0x00009721,
+ 4906: 0x00009BB0,
+ 4907: 0x000035D6,
+ 4908: 0x000072B2,
+ 4909: 0x00004C07,
+ 4910: 0x00007C51,
+ 4911: 0x0000994A,
+ 4912: 0x00026159,
+ 4913: 0x00006159,
+ 4914: 0x00004C04,
+ 4915: 0x00009E96,
+ 4916: 0x0000617D,
+ 4918: 0x0000575F,
+ 4919: 0x0000616F,
+ 4920: 0x000062A6,
+ 4921: 0x00006239,
+ 4922: 0x000062CE,
+ 4923: 0x00003A5C,
+ 4924: 0x000061E2,
+ 4925: 0x000053AA,
+ 4926: 0x000233F5,
+ 4927: 0x00006364,
+ 4928: 0x00006802,
+ 4929: 0x000035D2,
+ 4930: 0x00005D57,
+ 4931: 0x00028BC2,
+ 4932: 0x00008FDA,
+ 4933: 0x00028E39,
+ 4935: 0x000050D9,
+ 4936: 0x00021D46,
+ 4937: 0x00007906,
+ 4938: 0x00005332,
+ 4939: 0x00009638,
+ 4940: 0x00020F3B,
+ 4941: 0x00004065,
+ 4943: 0x000077FE,
+ 4945: 0x00007CC2,
+ 4946: 0x00025F1A,
+ 4947: 0x00007CDA,
+ 4948: 0x00007A2D,
+ 4949: 0x00008066,
+ 4950: 0x00008063,
+ 4951: 0x00007D4D,
+ 4952: 0x00007505,
+ 4953: 0x000074F2,
+ 4954: 0x00008994,
+ 4955: 0x0000821A,
+ 4956: 0x0000670C,
+ 4957: 0x00008062,
+ 4958: 0x00027486,
+ 4959: 0x0000805B,
+ 4960: 0x000074F0,
+ 4961: 0x00008103,
+ 4962: 0x00007724,
+ 4963: 0x00008989,
+ 4964: 0x000267CC,
+ 4965: 0x00007553,
+ 4966: 0x00026ED1,
+ 4967: 0x000087A9,
+ 4968: 0x000087CE,
+ 4969: 0x000081C8,
+ 4970: 0x0000878C,
+ 4971: 0x00008A49,
+ 4972: 0x00008CAD,
+ 4973: 0x00008B43,
+ 4974: 0x0000772B,
+ 4975: 0x000074F8,
+ 4976: 0x000084DA,
+ 4977: 0x00003635,
+ 4978: 0x000069B2,
+ 4979: 0x00008DA6,
+ 4981: 0x000089A9,
+ 4982: 0x00007468,
+ 4983: 0x00006DB9,
+ 4984: 0x000087C1,
+ 4985: 0x00024011,
+ 4986: 0x000074E7,
+ 4987: 0x00003DDB,
+ 4988: 0x00007176,
+ 4989: 0x000060A4,
+ 4990: 0x0000619C,
+ 4991: 0x00003CD1,
+ 4992: 0x00007162,
+ 4993: 0x00006077,
+ 4995: 0x00007F71,
+ 4996: 0x00028B2D,
+ 4997: 0x00007250,
+ 4998: 0x000060E9,
+ 4999: 0x00004B7E,
+ 5000: 0x00005220,
+ 5001: 0x00003C18,
+ 5002: 0x00023CC7,
+ 5003: 0x00025ED7,
+ 5004: 0x00027656,
+ 5005: 0x00025531,
+ 5006: 0x00021944,
+ 5007: 0x000212FE,
+ 5008: 0x00029903,
+ 5009: 0x00026DDC,
+ 5010: 0x000270AD,
+ 5011: 0x00005CC1,
+ 5012: 0x000261AD,
+ 5013: 0x00028A0F,
+ 5014: 0x00023677,
+ 5015: 0x000200EE,
+ 5016: 0x00026846,
+ 5017: 0x00024F0E,
+ 5018: 0x00004562,
+ 5019: 0x00005B1F,
+ 5020: 0x0002634C,
+ 5021: 0x00009F50,
+ 5022: 0x00009EA6,
+ 5023: 0x0002626B,
+ 5024: 0x00003000,
+ 5025: 0x0000FF0C,
+ 5026: 0x00003001,
+ 5027: 0x00003002,
+ 5028: 0x0000FF0E,
+ 5029: 0x00002027,
+ 5030: 0x0000FF1B,
+ 5031: 0x0000FF1A,
+ 5032: 0x0000FF1F,
+ 5033: 0x0000FF01,
+ 5034: 0x0000FE30,
+ 5035: 0x00002026,
+ 5036: 0x00002025,
+ 5037: 0x0000FE50,
+ 5038: 0x0000FE51,
+ 5039: 0x0000FE52,
+ 5040: 0x000000B7,
+ 5041: 0x0000FE54,
+ 5042: 0x0000FE55,
+ 5043: 0x0000FE56,
+ 5044: 0x0000FE57,
+ 5045: 0x0000FF5C,
+ 5046: 0x00002013,
+ 5047: 0x0000FE31,
+ 5048: 0x00002014,
+ 5049: 0x0000FE33,
+ 5050: 0x00002574,
+ 5051: 0x0000FE34,
+ 5052: 0x0000FE4F,
+ 5053: 0x0000FF08,
+ 5054: 0x0000FF09,
+ 5055: 0x0000FE35,
+ 5056: 0x0000FE36,
+ 5057: 0x0000FF5B,
+ 5058: 0x0000FF5D,
+ 5059: 0x0000FE37,
+ 5060: 0x0000FE38,
+ 5061: 0x00003014,
+ 5062: 0x00003015,
+ 5063: 0x0000FE39,
+ 5064: 0x0000FE3A,
+ 5065: 0x00003010,
+ 5066: 0x00003011,
+ 5067: 0x0000FE3B,
+ 5068: 0x0000FE3C,
+ 5069: 0x0000300A,
+ 5070: 0x0000300B,
+ 5071: 0x0000FE3D,
+ 5072: 0x0000FE3E,
+ 5073: 0x00003008,
+ 5074: 0x00003009,
+ 5075: 0x0000FE3F,
+ 5076: 0x0000FE40,
+ 5077: 0x0000300C,
+ 5078: 0x0000300D,
+ 5079: 0x0000FE41,
+ 5080: 0x0000FE42,
+ 5081: 0x0000300E,
+ 5082: 0x0000300F,
+ 5083: 0x0000FE43,
+ 5084: 0x0000FE44,
+ 5085: 0x0000FE59,
+ 5086: 0x0000FE5A,
+ 5087: 0x0000FE5B,
+ 5088: 0x0000FE5C,
+ 5089: 0x0000FE5D,
+ 5090: 0x0000FE5E,
+ 5091: 0x00002018,
+ 5092: 0x00002019,
+ 5093: 0x0000201C,
+ 5094: 0x0000201D,
+ 5095: 0x0000301D,
+ 5096: 0x0000301E,
+ 5097: 0x00002035,
+ 5098: 0x00002032,
+ 5099: 0x0000FF03,
+ 5100: 0x0000FF06,
+ 5101: 0x0000FF0A,
+ 5102: 0x0000203B,
+ 5103: 0x000000A7,
+ 5104: 0x00003003,
+ 5105: 0x000025CB,
+ 5106: 0x000025CF,
+ 5107: 0x000025B3,
+ 5108: 0x000025B2,
+ 5109: 0x000025CE,
+ 5110: 0x00002606,
+ 5111: 0x00002605,
+ 5112: 0x000025C7,
+ 5113: 0x000025C6,
+ 5114: 0x000025A1,
+ 5115: 0x000025A0,
+ 5116: 0x000025BD,
+ 5117: 0x000025BC,
+ 5118: 0x000032A3,
+ 5119: 0x00002105,
+ 5120: 0x000000AF,
+ 5121: 0x0000FFE3,
+ 5122: 0x0000FF3F,
+ 5123: 0x000002CD,
+ 5124: 0x0000FE49,
+ 5125: 0x0000FE4A,
+ 5126: 0x0000FE4D,
+ 5127: 0x0000FE4E,
+ 5128: 0x0000FE4B,
+ 5129: 0x0000FE4C,
+ 5130: 0x0000FE5F,
+ 5131: 0x0000FE60,
+ 5132: 0x0000FE61,
+ 5133: 0x0000FF0B,
+ 5134: 0x0000FF0D,
+ 5135: 0x000000D7,
+ 5136: 0x000000F7,
+ 5137: 0x000000B1,
+ 5138: 0x0000221A,
+ 5139: 0x0000FF1C,
+ 5140: 0x0000FF1E,
+ 5141: 0x0000FF1D,
+ 5142: 0x00002266,
+ 5143: 0x00002267,
+ 5144: 0x00002260,
+ 5145: 0x0000221E,
+ 5146: 0x00002252,
+ 5147: 0x00002261,
+ 5148: 0x0000FE62,
+ 5149: 0x0000FE63,
+ 5150: 0x0000FE64,
+ 5151: 0x0000FE65,
+ 5152: 0x0000FE66,
+ 5153: 0x0000FF5E,
+ 5154: 0x00002229,
+ 5155: 0x0000222A,
+ 5156: 0x000022A5,
+ 5157: 0x00002220,
+ 5158: 0x0000221F,
+ 5159: 0x000022BF,
+ 5160: 0x000033D2,
+ 5161: 0x000033D1,
+ 5162: 0x0000222B,
+ 5163: 0x0000222E,
+ 5164: 0x00002235,
+ 5165: 0x00002234,
+ 5166: 0x00002640,
+ 5167: 0x00002642,
+ 5168: 0x00002295,
+ 5169: 0x00002299,
+ 5170: 0x00002191,
+ 5171: 0x00002193,
+ 5172: 0x00002190,
+ 5173: 0x00002192,
+ 5174: 0x00002196,
+ 5175: 0x00002197,
+ 5176: 0x00002199,
+ 5177: 0x00002198,
+ 5178: 0x00002225,
+ 5179: 0x00002223,
+ 5180: 0x0000FF0F,
+ 5181: 0x0000FF3C,
+ 5182: 0x00002215,
+ 5183: 0x0000FE68,
+ 5184: 0x0000FF04,
+ 5185: 0x0000FFE5,
+ 5186: 0x00003012,
+ 5187: 0x0000FFE0,
+ 5188: 0x0000FFE1,
+ 5189: 0x0000FF05,
+ 5190: 0x0000FF20,
+ 5191: 0x00002103,
+ 5192: 0x00002109,
+ 5193: 0x0000FE69,
+ 5194: 0x0000FE6A,
+ 5195: 0x0000FE6B,
+ 5196: 0x000033D5,
+ 5197: 0x0000339C,
+ 5198: 0x0000339D,
+ 5199: 0x0000339E,
+ 5200: 0x000033CE,
+ 5201: 0x000033A1,
+ 5202: 0x0000338E,
+ 5203: 0x0000338F,
+ 5204: 0x000033C4,
+ 5205: 0x000000B0,
+ 5206: 0x00005159,
+ 5207: 0x0000515B,
+ 5208: 0x0000515E,
+ 5209: 0x0000515D,
+ 5210: 0x00005161,
+ 5211: 0x00005163,
+ 5212: 0x000055E7,
+ 5213: 0x000074E9,
+ 5214: 0x00007CCE,
+ 5215: 0x00002581,
+ 5216: 0x00002582,
+ 5217: 0x00002583,
+ 5218: 0x00002584,
+ 5219: 0x00002585,
+ 5220: 0x00002586,
+ 5221: 0x00002587,
+ 5222: 0x00002588,
+ 5223: 0x0000258F,
+ 5224: 0x0000258E,
+ 5225: 0x0000258D,
+ 5226: 0x0000258C,
+ 5227: 0x0000258B,
+ 5228: 0x0000258A,
+ 5229: 0x00002589,
+ 5230: 0x0000253C,
+ 5231: 0x00002534,
+ 5232: 0x0000252C,
+ 5233: 0x00002524,
+ 5234: 0x0000251C,
+ 5235: 0x00002594,
+ 5236: 0x00002500,
+ 5237: 0x00002502,
+ 5238: 0x00002595,
+ 5239: 0x0000250C,
+ 5240: 0x00002510,
+ 5241: 0x00002514,
+ 5242: 0x00002518,
+ 5243: 0x0000256D,
+ 5244: 0x0000256E,
+ 5245: 0x00002570,
+ 5246: 0x0000256F,
+ 5247: 0x00002550,
+ 5248: 0x0000255E,
+ 5249: 0x0000256A,
+ 5250: 0x00002561,
+ 5251: 0x000025E2,
+ 5252: 0x000025E3,
+ 5253: 0x000025E5,
+ 5254: 0x000025E4,
+ 5255: 0x00002571,
+ 5256: 0x00002572,
+ 5257: 0x00002573,
+ 5258: 0x0000FF10,
+ 5259: 0x0000FF11,
+ 5260: 0x0000FF12,
+ 5261: 0x0000FF13,
+ 5262: 0x0000FF14,
+ 5263: 0x0000FF15,
+ 5264: 0x0000FF16,
+ 5265: 0x0000FF17,
+ 5266: 0x0000FF18,
+ 5267: 0x0000FF19,
+ 5268: 0x00002160,
+ 5269: 0x00002161,
+ 5270: 0x00002162,
+ 5271: 0x00002163,
+ 5272: 0x00002164,
+ 5273: 0x00002165,
+ 5274: 0x00002166,
+ 5275: 0x00002167,
+ 5276: 0x00002168,
+ 5277: 0x00002169,
+ 5278: 0x00003021,
+ 5279: 0x00003022,
+ 5280: 0x00003023,
+ 5281: 0x00003024,
+ 5282: 0x00003025,
+ 5283: 0x00003026,
+ 5284: 0x00003027,
+ 5285: 0x00003028,
+ 5286: 0x00003029,
+ 5287: 0x00005341,
+ 5288: 0x00005344,
+ 5289: 0x00005345,
+ 5290: 0x0000FF21,
+ 5291: 0x0000FF22,
+ 5292: 0x0000FF23,
+ 5293: 0x0000FF24,
+ 5294: 0x0000FF25,
+ 5295: 0x0000FF26,
+ 5296: 0x0000FF27,
+ 5297: 0x0000FF28,
+ 5298: 0x0000FF29,
+ 5299: 0x0000FF2A,
+ 5300: 0x0000FF2B,
+ 5301: 0x0000FF2C,
+ 5302: 0x0000FF2D,
+ 5303: 0x0000FF2E,
+ 5304: 0x0000FF2F,
+ 5305: 0x0000FF30,
+ 5306: 0x0000FF31,
+ 5307: 0x0000FF32,
+ 5308: 0x0000FF33,
+ 5309: 0x0000FF34,
+ 5310: 0x0000FF35,
+ 5311: 0x0000FF36,
+ 5312: 0x0000FF37,
+ 5313: 0x0000FF38,
+ 5314: 0x0000FF39,
+ 5315: 0x0000FF3A,
+ 5316: 0x0000FF41,
+ 5317: 0x0000FF42,
+ 5318: 0x0000FF43,
+ 5319: 0x0000FF44,
+ 5320: 0x0000FF45,
+ 5321: 0x0000FF46,
+ 5322: 0x0000FF47,
+ 5323: 0x0000FF48,
+ 5324: 0x0000FF49,
+ 5325: 0x0000FF4A,
+ 5326: 0x0000FF4B,
+ 5327: 0x0000FF4C,
+ 5328: 0x0000FF4D,
+ 5329: 0x0000FF4E,
+ 5330: 0x0000FF4F,
+ 5331: 0x0000FF50,
+ 5332: 0x0000FF51,
+ 5333: 0x0000FF52,
+ 5334: 0x0000FF53,
+ 5335: 0x0000FF54,
+ 5336: 0x0000FF55,
+ 5337: 0x0000FF56,
+ 5338: 0x0000FF57,
+ 5339: 0x0000FF58,
+ 5340: 0x0000FF59,
+ 5341: 0x0000FF5A,
+ 5342: 0x00000391,
+ 5343: 0x00000392,
+ 5344: 0x00000393,
+ 5345: 0x00000394,
+ 5346: 0x00000395,
+ 5347: 0x00000396,
+ 5348: 0x00000397,
+ 5349: 0x00000398,
+ 5350: 0x00000399,
+ 5351: 0x0000039A,
+ 5352: 0x0000039B,
+ 5353: 0x0000039C,
+ 5354: 0x0000039D,
+ 5355: 0x0000039E,
+ 5356: 0x0000039F,
+ 5357: 0x000003A0,
+ 5358: 0x000003A1,
+ 5359: 0x000003A3,
+ 5360: 0x000003A4,
+ 5361: 0x000003A5,
+ 5362: 0x000003A6,
+ 5363: 0x000003A7,
+ 5364: 0x000003A8,
+ 5365: 0x000003A9,
+ 5366: 0x000003B1,
+ 5367: 0x000003B2,
+ 5368: 0x000003B3,
+ 5369: 0x000003B4,
+ 5370: 0x000003B5,
+ 5371: 0x000003B6,
+ 5372: 0x000003B7,
+ 5373: 0x000003B8,
+ 5374: 0x000003B9,
+ 5375: 0x000003BA,
+ 5376: 0x000003BB,
+ 5377: 0x000003BC,
+ 5378: 0x000003BD,
+ 5379: 0x000003BE,
+ 5380: 0x000003BF,
+ 5381: 0x000003C0,
+ 5382: 0x000003C1,
+ 5383: 0x000003C3,
+ 5384: 0x000003C4,
+ 5385: 0x000003C5,
+ 5386: 0x000003C6,
+ 5387: 0x000003C7,
+ 5388: 0x000003C8,
+ 5389: 0x000003C9,
+ 5390: 0x00003105,
+ 5391: 0x00003106,
+ 5392: 0x00003107,
+ 5393: 0x00003108,
+ 5394: 0x00003109,
+ 5395: 0x0000310A,
+ 5396: 0x0000310B,
+ 5397: 0x0000310C,
+ 5398: 0x0000310D,
+ 5399: 0x0000310E,
+ 5400: 0x0000310F,
+ 5401: 0x00003110,
+ 5402: 0x00003111,
+ 5403: 0x00003112,
+ 5404: 0x00003113,
+ 5405: 0x00003114,
+ 5406: 0x00003115,
+ 5407: 0x00003116,
+ 5408: 0x00003117,
+ 5409: 0x00003118,
+ 5410: 0x00003119,
+ 5411: 0x0000311A,
+ 5412: 0x0000311B,
+ 5413: 0x0000311C,
+ 5414: 0x0000311D,
+ 5415: 0x0000311E,
+ 5416: 0x0000311F,
+ 5417: 0x00003120,
+ 5418: 0x00003121,
+ 5419: 0x00003122,
+ 5420: 0x00003123,
+ 5421: 0x00003124,
+ 5422: 0x00003125,
+ 5423: 0x00003126,
+ 5424: 0x00003127,
+ 5425: 0x00003128,
+ 5426: 0x00003129,
+ 5427: 0x000002D9,
+ 5428: 0x000002C9,
+ 5429: 0x000002CA,
+ 5430: 0x000002C7,
+ 5431: 0x000002CB,
+ 5432: 0x00002400,
+ 5433: 0x00002401,
+ 5434: 0x00002402,
+ 5435: 0x00002403,
+ 5436: 0x00002404,
+ 5437: 0x00002405,
+ 5438: 0x00002406,
+ 5439: 0x00002407,
+ 5440: 0x00002408,
+ 5441: 0x00002409,
+ 5442: 0x0000240A,
+ 5443: 0x0000240B,
+ 5444: 0x0000240C,
+ 5445: 0x0000240D,
+ 5446: 0x0000240E,
+ 5447: 0x0000240F,
+ 5448: 0x00002410,
+ 5449: 0x00002411,
+ 5450: 0x00002412,
+ 5451: 0x00002413,
+ 5452: 0x00002414,
+ 5453: 0x00002415,
+ 5454: 0x00002416,
+ 5455: 0x00002417,
+ 5456: 0x00002418,
+ 5457: 0x00002419,
+ 5458: 0x0000241A,
+ 5459: 0x0000241B,
+ 5460: 0x0000241C,
+ 5461: 0x0000241D,
+ 5462: 0x0000241E,
+ 5463: 0x0000241F,
+ 5464: 0x00002421,
+ 5465: 0x000020AC,
+ 5495: 0x00004E00,
+ 5496: 0x00004E59,
+ 5497: 0x00004E01,
+ 5498: 0x00004E03,
+ 5499: 0x00004E43,
+ 5500: 0x00004E5D,
+ 5501: 0x00004E86,
+ 5502: 0x00004E8C,
+ 5503: 0x00004EBA,
+ 5504: 0x0000513F,
+ 5505: 0x00005165,
+ 5506: 0x0000516B,
+ 5507: 0x000051E0,
+ 5508: 0x00005200,
+ 5509: 0x00005201,
+ 5510: 0x0000529B,
+ 5511: 0x00005315,
+ 5512: 0x00005341,
+ 5513: 0x0000535C,
+ 5514: 0x000053C8,
+ 5515: 0x00004E09,
+ 5516: 0x00004E0B,
+ 5517: 0x00004E08,
+ 5518: 0x00004E0A,
+ 5519: 0x00004E2B,
+ 5520: 0x00004E38,
+ 5521: 0x000051E1,
+ 5522: 0x00004E45,
+ 5523: 0x00004E48,
+ 5524: 0x00004E5F,
+ 5525: 0x00004E5E,
+ 5526: 0x00004E8E,
+ 5527: 0x00004EA1,
+ 5528: 0x00005140,
+ 5529: 0x00005203,
+ 5530: 0x000052FA,
+ 5531: 0x00005343,
+ 5532: 0x000053C9,
+ 5533: 0x000053E3,
+ 5534: 0x0000571F,
+ 5535: 0x000058EB,
+ 5536: 0x00005915,
+ 5537: 0x00005927,
+ 5538: 0x00005973,
+ 5539: 0x00005B50,
+ 5540: 0x00005B51,
+ 5541: 0x00005B53,
+ 5542: 0x00005BF8,
+ 5543: 0x00005C0F,
+ 5544: 0x00005C22,
+ 5545: 0x00005C38,
+ 5546: 0x00005C71,
+ 5547: 0x00005DDD,
+ 5548: 0x00005DE5,
+ 5549: 0x00005DF1,
+ 5550: 0x00005DF2,
+ 5551: 0x00005DF3,
+ 5552: 0x00005DFE,
+ 5553: 0x00005E72,
+ 5554: 0x00005EFE,
+ 5555: 0x00005F0B,
+ 5556: 0x00005F13,
+ 5557: 0x0000624D,
+ 5558: 0x00004E11,
+ 5559: 0x00004E10,
+ 5560: 0x00004E0D,
+ 5561: 0x00004E2D,
+ 5562: 0x00004E30,
+ 5563: 0x00004E39,
+ 5564: 0x00004E4B,
+ 5565: 0x00005C39,
+ 5566: 0x00004E88,
+ 5567: 0x00004E91,
+ 5568: 0x00004E95,
+ 5569: 0x00004E92,
+ 5570: 0x00004E94,
+ 5571: 0x00004EA2,
+ 5572: 0x00004EC1,
+ 5573: 0x00004EC0,
+ 5574: 0x00004EC3,
+ 5575: 0x00004EC6,
+ 5576: 0x00004EC7,
+ 5577: 0x00004ECD,
+ 5578: 0x00004ECA,
+ 5579: 0x00004ECB,
+ 5580: 0x00004EC4,
+ 5581: 0x00005143,
+ 5582: 0x00005141,
+ 5583: 0x00005167,
+ 5584: 0x0000516D,
+ 5585: 0x0000516E,
+ 5586: 0x0000516C,
+ 5587: 0x00005197,
+ 5588: 0x000051F6,
+ 5589: 0x00005206,
+ 5590: 0x00005207,
+ 5591: 0x00005208,
+ 5592: 0x000052FB,
+ 5593: 0x000052FE,
+ 5594: 0x000052FF,
+ 5595: 0x00005316,
+ 5596: 0x00005339,
+ 5597: 0x00005348,
+ 5598: 0x00005347,
+ 5599: 0x00005345,
+ 5600: 0x0000535E,
+ 5601: 0x00005384,
+ 5602: 0x000053CB,
+ 5603: 0x000053CA,
+ 5604: 0x000053CD,
+ 5605: 0x000058EC,
+ 5606: 0x00005929,
+ 5607: 0x0000592B,
+ 5608: 0x0000592A,
+ 5609: 0x0000592D,
+ 5610: 0x00005B54,
+ 5611: 0x00005C11,
+ 5612: 0x00005C24,
+ 5613: 0x00005C3A,
+ 5614: 0x00005C6F,
+ 5615: 0x00005DF4,
+ 5616: 0x00005E7B,
+ 5617: 0x00005EFF,
+ 5618: 0x00005F14,
+ 5619: 0x00005F15,
+ 5620: 0x00005FC3,
+ 5621: 0x00006208,
+ 5622: 0x00006236,
+ 5623: 0x0000624B,
+ 5624: 0x0000624E,
+ 5625: 0x0000652F,
+ 5626: 0x00006587,
+ 5627: 0x00006597,
+ 5628: 0x000065A4,
+ 5629: 0x000065B9,
+ 5630: 0x000065E5,
+ 5631: 0x000066F0,
+ 5632: 0x00006708,
+ 5633: 0x00006728,
+ 5634: 0x00006B20,
+ 5635: 0x00006B62,
+ 5636: 0x00006B79,
+ 5637: 0x00006BCB,
+ 5638: 0x00006BD4,
+ 5639: 0x00006BDB,
+ 5640: 0x00006C0F,
+ 5641: 0x00006C34,
+ 5642: 0x0000706B,
+ 5643: 0x0000722A,
+ 5644: 0x00007236,
+ 5645: 0x0000723B,
+ 5646: 0x00007247,
+ 5647: 0x00007259,
+ 5648: 0x0000725B,
+ 5649: 0x000072AC,
+ 5650: 0x0000738B,
+ 5651: 0x00004E19,
+ 5652: 0x00004E16,
+ 5653: 0x00004E15,
+ 5654: 0x00004E14,
+ 5655: 0x00004E18,
+ 5656: 0x00004E3B,
+ 5657: 0x00004E4D,
+ 5658: 0x00004E4F,
+ 5659: 0x00004E4E,
+ 5660: 0x00004EE5,
+ 5661: 0x00004ED8,
+ 5662: 0x00004ED4,
+ 5663: 0x00004ED5,
+ 5664: 0x00004ED6,
+ 5665: 0x00004ED7,
+ 5666: 0x00004EE3,
+ 5667: 0x00004EE4,
+ 5668: 0x00004ED9,
+ 5669: 0x00004EDE,
+ 5670: 0x00005145,
+ 5671: 0x00005144,
+ 5672: 0x00005189,
+ 5673: 0x0000518A,
+ 5674: 0x000051AC,
+ 5675: 0x000051F9,
+ 5676: 0x000051FA,
+ 5677: 0x000051F8,
+ 5678: 0x0000520A,
+ 5679: 0x000052A0,
+ 5680: 0x0000529F,
+ 5681: 0x00005305,
+ 5682: 0x00005306,
+ 5683: 0x00005317,
+ 5684: 0x0000531D,
+ 5685: 0x00004EDF,
+ 5686: 0x0000534A,
+ 5687: 0x00005349,
+ 5688: 0x00005361,
+ 5689: 0x00005360,
+ 5690: 0x0000536F,
+ 5691: 0x0000536E,
+ 5692: 0x000053BB,
+ 5693: 0x000053EF,
+ 5694: 0x000053E4,
+ 5695: 0x000053F3,
+ 5696: 0x000053EC,
+ 5697: 0x000053EE,
+ 5698: 0x000053E9,
+ 5699: 0x000053E8,
+ 5700: 0x000053FC,
+ 5701: 0x000053F8,
+ 5702: 0x000053F5,
+ 5703: 0x000053EB,
+ 5704: 0x000053E6,
+ 5705: 0x000053EA,
+ 5706: 0x000053F2,
+ 5707: 0x000053F1,
+ 5708: 0x000053F0,
+ 5709: 0x000053E5,
+ 5710: 0x000053ED,
+ 5711: 0x000053FB,
+ 5712: 0x000056DB,
+ 5713: 0x000056DA,
+ 5714: 0x00005916,
+ 5715: 0x0000592E,
+ 5716: 0x00005931,
+ 5717: 0x00005974,
+ 5718: 0x00005976,
+ 5719: 0x00005B55,
+ 5720: 0x00005B83,
+ 5721: 0x00005C3C,
+ 5722: 0x00005DE8,
+ 5723: 0x00005DE7,
+ 5724: 0x00005DE6,
+ 5725: 0x00005E02,
+ 5726: 0x00005E03,
+ 5727: 0x00005E73,
+ 5728: 0x00005E7C,
+ 5729: 0x00005F01,
+ 5730: 0x00005F18,
+ 5731: 0x00005F17,
+ 5732: 0x00005FC5,
+ 5733: 0x0000620A,
+ 5734: 0x00006253,
+ 5735: 0x00006254,
+ 5736: 0x00006252,
+ 5737: 0x00006251,
+ 5738: 0x000065A5,
+ 5739: 0x000065E6,
+ 5740: 0x0000672E,
+ 5741: 0x0000672C,
+ 5742: 0x0000672A,
+ 5743: 0x0000672B,
+ 5744: 0x0000672D,
+ 5745: 0x00006B63,
+ 5746: 0x00006BCD,
+ 5747: 0x00006C11,
+ 5748: 0x00006C10,
+ 5749: 0x00006C38,
+ 5750: 0x00006C41,
+ 5751: 0x00006C40,
+ 5752: 0x00006C3E,
+ 5753: 0x000072AF,
+ 5754: 0x00007384,
+ 5755: 0x00007389,
+ 5756: 0x000074DC,
+ 5757: 0x000074E6,
+ 5758: 0x00007518,
+ 5759: 0x0000751F,
+ 5760: 0x00007528,
+ 5761: 0x00007529,
+ 5762: 0x00007530,
+ 5763: 0x00007531,
+ 5764: 0x00007532,
+ 5765: 0x00007533,
+ 5766: 0x0000758B,
+ 5767: 0x0000767D,
+ 5768: 0x000076AE,
+ 5769: 0x000076BF,
+ 5770: 0x000076EE,
+ 5771: 0x000077DB,
+ 5772: 0x000077E2,
+ 5773: 0x000077F3,
+ 5774: 0x0000793A,
+ 5775: 0x000079BE,
+ 5776: 0x00007A74,
+ 5777: 0x00007ACB,
+ 5778: 0x00004E1E,
+ 5779: 0x00004E1F,
+ 5780: 0x00004E52,
+ 5781: 0x00004E53,
+ 5782: 0x00004E69,
+ 5783: 0x00004E99,
+ 5784: 0x00004EA4,
+ 5785: 0x00004EA6,
+ 5786: 0x00004EA5,
+ 5787: 0x00004EFF,
+ 5788: 0x00004F09,
+ 5789: 0x00004F19,
+ 5790: 0x00004F0A,
+ 5791: 0x00004F15,
+ 5792: 0x00004F0D,
+ 5793: 0x00004F10,
+ 5794: 0x00004F11,
+ 5795: 0x00004F0F,
+ 5796: 0x00004EF2,
+ 5797: 0x00004EF6,
+ 5798: 0x00004EFB,
+ 5799: 0x00004EF0,
+ 5800: 0x00004EF3,
+ 5801: 0x00004EFD,
+ 5802: 0x00004F01,
+ 5803: 0x00004F0B,
+ 5804: 0x00005149,
+ 5805: 0x00005147,
+ 5806: 0x00005146,
+ 5807: 0x00005148,
+ 5808: 0x00005168,
+ 5809: 0x00005171,
+ 5810: 0x0000518D,
+ 5811: 0x000051B0,
+ 5812: 0x00005217,
+ 5813: 0x00005211,
+ 5814: 0x00005212,
+ 5815: 0x0000520E,
+ 5816: 0x00005216,
+ 5817: 0x000052A3,
+ 5818: 0x00005308,
+ 5819: 0x00005321,
+ 5820: 0x00005320,
+ 5821: 0x00005370,
+ 5822: 0x00005371,
+ 5823: 0x00005409,
+ 5824: 0x0000540F,
+ 5825: 0x0000540C,
+ 5826: 0x0000540A,
+ 5827: 0x00005410,
+ 5828: 0x00005401,
+ 5829: 0x0000540B,
+ 5830: 0x00005404,
+ 5831: 0x00005411,
+ 5832: 0x0000540D,
+ 5833: 0x00005408,
+ 5834: 0x00005403,
+ 5835: 0x0000540E,
+ 5836: 0x00005406,
+ 5837: 0x00005412,
+ 5838: 0x000056E0,
+ 5839: 0x000056DE,
+ 5840: 0x000056DD,
+ 5841: 0x00005733,
+ 5842: 0x00005730,
+ 5843: 0x00005728,
+ 5844: 0x0000572D,
+ 5845: 0x0000572C,
+ 5846: 0x0000572F,
+ 5847: 0x00005729,
+ 5848: 0x00005919,
+ 5849: 0x0000591A,
+ 5850: 0x00005937,
+ 5851: 0x00005938,
+ 5852: 0x00005984,
+ 5853: 0x00005978,
+ 5854: 0x00005983,
+ 5855: 0x0000597D,
+ 5856: 0x00005979,
+ 5857: 0x00005982,
+ 5858: 0x00005981,
+ 5859: 0x00005B57,
+ 5860: 0x00005B58,
+ 5861: 0x00005B87,
+ 5862: 0x00005B88,
+ 5863: 0x00005B85,
+ 5864: 0x00005B89,
+ 5865: 0x00005BFA,
+ 5866: 0x00005C16,
+ 5867: 0x00005C79,
+ 5868: 0x00005DDE,
+ 5869: 0x00005E06,
+ 5870: 0x00005E76,
+ 5871: 0x00005E74,
+ 5872: 0x00005F0F,
+ 5873: 0x00005F1B,
+ 5874: 0x00005FD9,
+ 5875: 0x00005FD6,
+ 5876: 0x0000620E,
+ 5877: 0x0000620C,
+ 5878: 0x0000620D,
+ 5879: 0x00006210,
+ 5880: 0x00006263,
+ 5881: 0x0000625B,
+ 5882: 0x00006258,
+ 5883: 0x00006536,
+ 5884: 0x000065E9,
+ 5885: 0x000065E8,
+ 5886: 0x000065EC,
+ 5887: 0x000065ED,
+ 5888: 0x000066F2,
+ 5889: 0x000066F3,
+ 5890: 0x00006709,
+ 5891: 0x0000673D,
+ 5892: 0x00006734,
+ 5893: 0x00006731,
+ 5894: 0x00006735,
+ 5895: 0x00006B21,
+ 5896: 0x00006B64,
+ 5897: 0x00006B7B,
+ 5898: 0x00006C16,
+ 5899: 0x00006C5D,
+ 5900: 0x00006C57,
+ 5901: 0x00006C59,
+ 5902: 0x00006C5F,
+ 5903: 0x00006C60,
+ 5904: 0x00006C50,
+ 5905: 0x00006C55,
+ 5906: 0x00006C61,
+ 5907: 0x00006C5B,
+ 5908: 0x00006C4D,
+ 5909: 0x00006C4E,
+ 5910: 0x00007070,
+ 5911: 0x0000725F,
+ 5912: 0x0000725D,
+ 5913: 0x0000767E,
+ 5914: 0x00007AF9,
+ 5915: 0x00007C73,
+ 5916: 0x00007CF8,
+ 5917: 0x00007F36,
+ 5918: 0x00007F8A,
+ 5919: 0x00007FBD,
+ 5920: 0x00008001,
+ 5921: 0x00008003,
+ 5922: 0x0000800C,
+ 5923: 0x00008012,
+ 5924: 0x00008033,
+ 5925: 0x0000807F,
+ 5926: 0x00008089,
+ 5927: 0x0000808B,
+ 5928: 0x0000808C,
+ 5929: 0x000081E3,
+ 5930: 0x000081EA,
+ 5931: 0x000081F3,
+ 5932: 0x000081FC,
+ 5933: 0x0000820C,
+ 5934: 0x0000821B,
+ 5935: 0x0000821F,
+ 5936: 0x0000826E,
+ 5937: 0x00008272,
+ 5938: 0x0000827E,
+ 5939: 0x0000866B,
+ 5940: 0x00008840,
+ 5941: 0x0000884C,
+ 5942: 0x00008863,
+ 5943: 0x0000897F,
+ 5944: 0x00009621,
+ 5945: 0x00004E32,
+ 5946: 0x00004EA8,
+ 5947: 0x00004F4D,
+ 5948: 0x00004F4F,
+ 5949: 0x00004F47,
+ 5950: 0x00004F57,
+ 5951: 0x00004F5E,
+ 5952: 0x00004F34,
+ 5953: 0x00004F5B,
+ 5954: 0x00004F55,
+ 5955: 0x00004F30,
+ 5956: 0x00004F50,
+ 5957: 0x00004F51,
+ 5958: 0x00004F3D,
+ 5959: 0x00004F3A,
+ 5960: 0x00004F38,
+ 5961: 0x00004F43,
+ 5962: 0x00004F54,
+ 5963: 0x00004F3C,
+ 5964: 0x00004F46,
+ 5965: 0x00004F63,
+ 5966: 0x00004F5C,
+ 5967: 0x00004F60,
+ 5968: 0x00004F2F,
+ 5969: 0x00004F4E,
+ 5970: 0x00004F36,
+ 5971: 0x00004F59,
+ 5972: 0x00004F5D,
+ 5973: 0x00004F48,
+ 5974: 0x00004F5A,
+ 5975: 0x0000514C,
+ 5976: 0x0000514B,
+ 5977: 0x0000514D,
+ 5978: 0x00005175,
+ 5979: 0x000051B6,
+ 5980: 0x000051B7,
+ 5981: 0x00005225,
+ 5982: 0x00005224,
+ 5983: 0x00005229,
+ 5984: 0x0000522A,
+ 5985: 0x00005228,
+ 5986: 0x000052AB,
+ 5987: 0x000052A9,
+ 5988: 0x000052AA,
+ 5989: 0x000052AC,
+ 5990: 0x00005323,
+ 5991: 0x00005373,
+ 5992: 0x00005375,
+ 5993: 0x0000541D,
+ 5994: 0x0000542D,
+ 5995: 0x0000541E,
+ 5996: 0x0000543E,
+ 5997: 0x00005426,
+ 5998: 0x0000544E,
+ 5999: 0x00005427,
+ 6000: 0x00005446,
+ 6001: 0x00005443,
+ 6002: 0x00005433,
+ 6003: 0x00005448,
+ 6004: 0x00005442,
+ 6005: 0x0000541B,
+ 6006: 0x00005429,
+ 6007: 0x0000544A,
+ 6008: 0x00005439,
+ 6009: 0x0000543B,
+ 6010: 0x00005438,
+ 6011: 0x0000542E,
+ 6012: 0x00005435,
+ 6013: 0x00005436,
+ 6014: 0x00005420,
+ 6015: 0x0000543C,
+ 6016: 0x00005440,
+ 6017: 0x00005431,
+ 6018: 0x0000542B,
+ 6019: 0x0000541F,
+ 6020: 0x0000542C,
+ 6021: 0x000056EA,
+ 6022: 0x000056F0,
+ 6023: 0x000056E4,
+ 6024: 0x000056EB,
+ 6025: 0x0000574A,
+ 6026: 0x00005751,
+ 6027: 0x00005740,
+ 6028: 0x0000574D,
+ 6029: 0x00005747,
+ 6030: 0x0000574E,
+ 6031: 0x0000573E,
+ 6032: 0x00005750,
+ 6033: 0x0000574F,
+ 6034: 0x0000573B,
+ 6035: 0x000058EF,
+ 6036: 0x0000593E,
+ 6037: 0x0000599D,
+ 6038: 0x00005992,
+ 6039: 0x000059A8,
+ 6040: 0x0000599E,
+ 6041: 0x000059A3,
+ 6042: 0x00005999,
+ 6043: 0x00005996,
+ 6044: 0x0000598D,
+ 6045: 0x000059A4,
+ 6046: 0x00005993,
+ 6047: 0x0000598A,
+ 6048: 0x000059A5,
+ 6049: 0x00005B5D,
+ 6050: 0x00005B5C,
+ 6051: 0x00005B5A,
+ 6052: 0x00005B5B,
+ 6053: 0x00005B8C,
+ 6054: 0x00005B8B,
+ 6055: 0x00005B8F,
+ 6056: 0x00005C2C,
+ 6057: 0x00005C40,
+ 6058: 0x00005C41,
+ 6059: 0x00005C3F,
+ 6060: 0x00005C3E,
+ 6061: 0x00005C90,
+ 6062: 0x00005C91,
+ 6063: 0x00005C94,
+ 6064: 0x00005C8C,
+ 6065: 0x00005DEB,
+ 6066: 0x00005E0C,
+ 6067: 0x00005E8F,
+ 6068: 0x00005E87,
+ 6069: 0x00005E8A,
+ 6070: 0x00005EF7,
+ 6071: 0x00005F04,
+ 6072: 0x00005F1F,
+ 6073: 0x00005F64,
+ 6074: 0x00005F62,
+ 6075: 0x00005F77,
+ 6076: 0x00005F79,
+ 6077: 0x00005FD8,
+ 6078: 0x00005FCC,
+ 6079: 0x00005FD7,
+ 6080: 0x00005FCD,
+ 6081: 0x00005FF1,
+ 6082: 0x00005FEB,
+ 6083: 0x00005FF8,
+ 6084: 0x00005FEA,
+ 6085: 0x00006212,
+ 6086: 0x00006211,
+ 6087: 0x00006284,
+ 6088: 0x00006297,
+ 6089: 0x00006296,
+ 6090: 0x00006280,
+ 6091: 0x00006276,
+ 6092: 0x00006289,
+ 6093: 0x0000626D,
+ 6094: 0x0000628A,
+ 6095: 0x0000627C,
+ 6096: 0x0000627E,
+ 6097: 0x00006279,
+ 6098: 0x00006273,
+ 6099: 0x00006292,
+ 6100: 0x0000626F,
+ 6101: 0x00006298,
+ 6102: 0x0000626E,
+ 6103: 0x00006295,
+ 6104: 0x00006293,
+ 6105: 0x00006291,
+ 6106: 0x00006286,
+ 6107: 0x00006539,
+ 6108: 0x0000653B,
+ 6109: 0x00006538,
+ 6110: 0x000065F1,
+ 6111: 0x000066F4,
+ 6112: 0x0000675F,
+ 6113: 0x0000674E,
+ 6114: 0x0000674F,
+ 6115: 0x00006750,
+ 6116: 0x00006751,
+ 6117: 0x0000675C,
+ 6118: 0x00006756,
+ 6119: 0x0000675E,
+ 6120: 0x00006749,
+ 6121: 0x00006746,
+ 6122: 0x00006760,
+ 6123: 0x00006753,
+ 6124: 0x00006757,
+ 6125: 0x00006B65,
+ 6126: 0x00006BCF,
+ 6127: 0x00006C42,
+ 6128: 0x00006C5E,
+ 6129: 0x00006C99,
+ 6130: 0x00006C81,
+ 6131: 0x00006C88,
+ 6132: 0x00006C89,
+ 6133: 0x00006C85,
+ 6134: 0x00006C9B,
+ 6135: 0x00006C6A,
+ 6136: 0x00006C7A,
+ 6137: 0x00006C90,
+ 6138: 0x00006C70,
+ 6139: 0x00006C8C,
+ 6140: 0x00006C68,
+ 6141: 0x00006C96,
+ 6142: 0x00006C92,
+ 6143: 0x00006C7D,
+ 6144: 0x00006C83,
+ 6145: 0x00006C72,
+ 6146: 0x00006C7E,
+ 6147: 0x00006C74,
+ 6148: 0x00006C86,
+ 6149: 0x00006C76,
+ 6150: 0x00006C8D,
+ 6151: 0x00006C94,
+ 6152: 0x00006C98,
+ 6153: 0x00006C82,
+ 6154: 0x00007076,
+ 6155: 0x0000707C,
+ 6156: 0x0000707D,
+ 6157: 0x00007078,
+ 6158: 0x00007262,
+ 6159: 0x00007261,
+ 6160: 0x00007260,
+ 6161: 0x000072C4,
+ 6162: 0x000072C2,
+ 6163: 0x00007396,
+ 6164: 0x0000752C,
+ 6165: 0x0000752B,
+ 6166: 0x00007537,
+ 6167: 0x00007538,
+ 6168: 0x00007682,
+ 6169: 0x000076EF,
+ 6170: 0x000077E3,
+ 6171: 0x000079C1,
+ 6172: 0x000079C0,
+ 6173: 0x000079BF,
+ 6174: 0x00007A76,
+ 6175: 0x00007CFB,
+ 6176: 0x00007F55,
+ 6177: 0x00008096,
+ 6178: 0x00008093,
+ 6179: 0x0000809D,
+ 6180: 0x00008098,
+ 6181: 0x0000809B,
+ 6182: 0x0000809A,
+ 6183: 0x000080B2,
+ 6184: 0x0000826F,
+ 6185: 0x00008292,
+ 6186: 0x0000828B,
+ 6187: 0x0000828D,
+ 6188: 0x0000898B,
+ 6189: 0x000089D2,
+ 6190: 0x00008A00,
+ 6191: 0x00008C37,
+ 6192: 0x00008C46,
+ 6193: 0x00008C55,
+ 6194: 0x00008C9D,
+ 6195: 0x00008D64,
+ 6196: 0x00008D70,
+ 6197: 0x00008DB3,
+ 6198: 0x00008EAB,
+ 6199: 0x00008ECA,
+ 6200: 0x00008F9B,
+ 6201: 0x00008FB0,
+ 6202: 0x00008FC2,
+ 6203: 0x00008FC6,
+ 6204: 0x00008FC5,
+ 6205: 0x00008FC4,
+ 6206: 0x00005DE1,
+ 6207: 0x00009091,
+ 6208: 0x000090A2,
+ 6209: 0x000090AA,
+ 6210: 0x000090A6,
+ 6211: 0x000090A3,
+ 6212: 0x00009149,
+ 6213: 0x000091C6,
+ 6214: 0x000091CC,
+ 6215: 0x00009632,
+ 6216: 0x0000962E,
+ 6217: 0x00009631,
+ 6218: 0x0000962A,
+ 6219: 0x0000962C,
+ 6220: 0x00004E26,
+ 6221: 0x00004E56,
+ 6222: 0x00004E73,
+ 6223: 0x00004E8B,
+ 6224: 0x00004E9B,
+ 6225: 0x00004E9E,
+ 6226: 0x00004EAB,
+ 6227: 0x00004EAC,
+ 6228: 0x00004F6F,
+ 6229: 0x00004F9D,
+ 6230: 0x00004F8D,
+ 6231: 0x00004F73,
+ 6232: 0x00004F7F,
+ 6233: 0x00004F6C,
+ 6234: 0x00004F9B,
+ 6235: 0x00004F8B,
+ 6236: 0x00004F86,
+ 6237: 0x00004F83,
+ 6238: 0x00004F70,
+ 6239: 0x00004F75,
+ 6240: 0x00004F88,
+ 6241: 0x00004F69,
+ 6242: 0x00004F7B,
+ 6243: 0x00004F96,
+ 6244: 0x00004F7E,
+ 6245: 0x00004F8F,
+ 6246: 0x00004F91,
+ 6247: 0x00004F7A,
+ 6248: 0x00005154,
+ 6249: 0x00005152,
+ 6250: 0x00005155,
+ 6251: 0x00005169,
+ 6252: 0x00005177,
+ 6253: 0x00005176,
+ 6254: 0x00005178,
+ 6255: 0x000051BD,
+ 6256: 0x000051FD,
+ 6257: 0x0000523B,
+ 6258: 0x00005238,
+ 6259: 0x00005237,
+ 6260: 0x0000523A,
+ 6261: 0x00005230,
+ 6262: 0x0000522E,
+ 6263: 0x00005236,
+ 6264: 0x00005241,
+ 6265: 0x000052BE,
+ 6266: 0x000052BB,
+ 6267: 0x00005352,
+ 6268: 0x00005354,
+ 6269: 0x00005353,
+ 6270: 0x00005351,
+ 6271: 0x00005366,
+ 6272: 0x00005377,
+ 6273: 0x00005378,
+ 6274: 0x00005379,
+ 6275: 0x000053D6,
+ 6276: 0x000053D4,
+ 6277: 0x000053D7,
+ 6278: 0x00005473,
+ 6279: 0x00005475,
+ 6280: 0x00005496,
+ 6281: 0x00005478,
+ 6282: 0x00005495,
+ 6283: 0x00005480,
+ 6284: 0x0000547B,
+ 6285: 0x00005477,
+ 6286: 0x00005484,
+ 6287: 0x00005492,
+ 6288: 0x00005486,
+ 6289: 0x0000547C,
+ 6290: 0x00005490,
+ 6291: 0x00005471,
+ 6292: 0x00005476,
+ 6293: 0x0000548C,
+ 6294: 0x0000549A,
+ 6295: 0x00005462,
+ 6296: 0x00005468,
+ 6297: 0x0000548B,
+ 6298: 0x0000547D,
+ 6299: 0x0000548E,
+ 6300: 0x000056FA,
+ 6301: 0x00005783,
+ 6302: 0x00005777,
+ 6303: 0x0000576A,
+ 6304: 0x00005769,
+ 6305: 0x00005761,
+ 6306: 0x00005766,
+ 6307: 0x00005764,
+ 6308: 0x0000577C,
+ 6309: 0x0000591C,
+ 6310: 0x00005949,
+ 6311: 0x00005947,
+ 6312: 0x00005948,
+ 6313: 0x00005944,
+ 6314: 0x00005954,
+ 6315: 0x000059BE,
+ 6316: 0x000059BB,
+ 6317: 0x000059D4,
+ 6318: 0x000059B9,
+ 6319: 0x000059AE,
+ 6320: 0x000059D1,
+ 6321: 0x000059C6,
+ 6322: 0x000059D0,
+ 6323: 0x000059CD,
+ 6324: 0x000059CB,
+ 6325: 0x000059D3,
+ 6326: 0x000059CA,
+ 6327: 0x000059AF,
+ 6328: 0x000059B3,
+ 6329: 0x000059D2,
+ 6330: 0x000059C5,
+ 6331: 0x00005B5F,
+ 6332: 0x00005B64,
+ 6333: 0x00005B63,
+ 6334: 0x00005B97,
+ 6335: 0x00005B9A,
+ 6336: 0x00005B98,
+ 6337: 0x00005B9C,
+ 6338: 0x00005B99,
+ 6339: 0x00005B9B,
+ 6340: 0x00005C1A,
+ 6341: 0x00005C48,
+ 6342: 0x00005C45,
+ 6343: 0x00005C46,
+ 6344: 0x00005CB7,
+ 6345: 0x00005CA1,
+ 6346: 0x00005CB8,
+ 6347: 0x00005CA9,
+ 6348: 0x00005CAB,
+ 6349: 0x00005CB1,
+ 6350: 0x00005CB3,
+ 6351: 0x00005E18,
+ 6352: 0x00005E1A,
+ 6353: 0x00005E16,
+ 6354: 0x00005E15,
+ 6355: 0x00005E1B,
+ 6356: 0x00005E11,
+ 6357: 0x00005E78,
+ 6358: 0x00005E9A,
+ 6359: 0x00005E97,
+ 6360: 0x00005E9C,
+ 6361: 0x00005E95,
+ 6362: 0x00005E96,
+ 6363: 0x00005EF6,
+ 6364: 0x00005F26,
+ 6365: 0x00005F27,
+ 6366: 0x00005F29,
+ 6367: 0x00005F80,
+ 6368: 0x00005F81,
+ 6369: 0x00005F7F,
+ 6370: 0x00005F7C,
+ 6371: 0x00005FDD,
+ 6372: 0x00005FE0,
+ 6373: 0x00005FFD,
+ 6374: 0x00005FF5,
+ 6375: 0x00005FFF,
+ 6376: 0x0000600F,
+ 6377: 0x00006014,
+ 6378: 0x0000602F,
+ 6379: 0x00006035,
+ 6380: 0x00006016,
+ 6381: 0x0000602A,
+ 6382: 0x00006015,
+ 6383: 0x00006021,
+ 6384: 0x00006027,
+ 6385: 0x00006029,
+ 6386: 0x0000602B,
+ 6387: 0x0000601B,
+ 6388: 0x00006216,
+ 6389: 0x00006215,
+ 6390: 0x0000623F,
+ 6391: 0x0000623E,
+ 6392: 0x00006240,
+ 6393: 0x0000627F,
+ 6394: 0x000062C9,
+ 6395: 0x000062CC,
+ 6396: 0x000062C4,
+ 6397: 0x000062BF,
+ 6398: 0x000062C2,
+ 6399: 0x000062B9,
+ 6400: 0x000062D2,
+ 6401: 0x000062DB,
+ 6402: 0x000062AB,
+ 6403: 0x000062D3,
+ 6404: 0x000062D4,
+ 6405: 0x000062CB,
+ 6406: 0x000062C8,
+ 6407: 0x000062A8,
+ 6408: 0x000062BD,
+ 6409: 0x000062BC,
+ 6410: 0x000062D0,
+ 6411: 0x000062D9,
+ 6412: 0x000062C7,
+ 6413: 0x000062CD,
+ 6414: 0x000062B5,
+ 6415: 0x000062DA,
+ 6416: 0x000062B1,
+ 6417: 0x000062D8,
+ 6418: 0x000062D6,
+ 6419: 0x000062D7,
+ 6420: 0x000062C6,
+ 6421: 0x000062AC,
+ 6422: 0x000062CE,
+ 6423: 0x0000653E,
+ 6424: 0x000065A7,
+ 6425: 0x000065BC,
+ 6426: 0x000065FA,
+ 6427: 0x00006614,
+ 6428: 0x00006613,
+ 6429: 0x0000660C,
+ 6430: 0x00006606,
+ 6431: 0x00006602,
+ 6432: 0x0000660E,
+ 6433: 0x00006600,
+ 6434: 0x0000660F,
+ 6435: 0x00006615,
+ 6436: 0x0000660A,
+ 6437: 0x00006607,
+ 6438: 0x0000670D,
+ 6439: 0x0000670B,
+ 6440: 0x0000676D,
+ 6441: 0x0000678B,
+ 6442: 0x00006795,
+ 6443: 0x00006771,
+ 6444: 0x0000679C,
+ 6445: 0x00006773,
+ 6446: 0x00006777,
+ 6447: 0x00006787,
+ 6448: 0x0000679D,
+ 6449: 0x00006797,
+ 6450: 0x0000676F,
+ 6451: 0x00006770,
+ 6452: 0x0000677F,
+ 6453: 0x00006789,
+ 6454: 0x0000677E,
+ 6455: 0x00006790,
+ 6456: 0x00006775,
+ 6457: 0x0000679A,
+ 6458: 0x00006793,
+ 6459: 0x0000677C,
+ 6460: 0x0000676A,
+ 6461: 0x00006772,
+ 6462: 0x00006B23,
+ 6463: 0x00006B66,
+ 6464: 0x00006B67,
+ 6465: 0x00006B7F,
+ 6466: 0x00006C13,
+ 6467: 0x00006C1B,
+ 6468: 0x00006CE3,
+ 6469: 0x00006CE8,
+ 6470: 0x00006CF3,
+ 6471: 0x00006CB1,
+ 6472: 0x00006CCC,
+ 6473: 0x00006CE5,
+ 6474: 0x00006CB3,
+ 6475: 0x00006CBD,
+ 6476: 0x00006CBE,
+ 6477: 0x00006CBC,
+ 6478: 0x00006CE2,
+ 6479: 0x00006CAB,
+ 6480: 0x00006CD5,
+ 6481: 0x00006CD3,
+ 6482: 0x00006CB8,
+ 6483: 0x00006CC4,
+ 6484: 0x00006CB9,
+ 6485: 0x00006CC1,
+ 6486: 0x00006CAE,
+ 6487: 0x00006CD7,
+ 6488: 0x00006CC5,
+ 6489: 0x00006CF1,
+ 6490: 0x00006CBF,
+ 6491: 0x00006CBB,
+ 6492: 0x00006CE1,
+ 6493: 0x00006CDB,
+ 6494: 0x00006CCA,
+ 6495: 0x00006CAC,
+ 6496: 0x00006CEF,
+ 6497: 0x00006CDC,
+ 6498: 0x00006CD6,
+ 6499: 0x00006CE0,
+ 6500: 0x00007095,
+ 6501: 0x0000708E,
+ 6502: 0x00007092,
+ 6503: 0x0000708A,
+ 6504: 0x00007099,
+ 6505: 0x0000722C,
+ 6506: 0x0000722D,
+ 6507: 0x00007238,
+ 6508: 0x00007248,
+ 6509: 0x00007267,
+ 6510: 0x00007269,
+ 6511: 0x000072C0,
+ 6512: 0x000072CE,
+ 6513: 0x000072D9,
+ 6514: 0x000072D7,
+ 6515: 0x000072D0,
+ 6516: 0x000073A9,
+ 6517: 0x000073A8,
+ 6518: 0x0000739F,
+ 6519: 0x000073AB,
+ 6520: 0x000073A5,
+ 6521: 0x0000753D,
+ 6522: 0x0000759D,
+ 6523: 0x00007599,
+ 6524: 0x0000759A,
+ 6525: 0x00007684,
+ 6526: 0x000076C2,
+ 6527: 0x000076F2,
+ 6528: 0x000076F4,
+ 6529: 0x000077E5,
+ 6530: 0x000077FD,
+ 6531: 0x0000793E,
+ 6532: 0x00007940,
+ 6533: 0x00007941,
+ 6534: 0x000079C9,
+ 6535: 0x000079C8,
+ 6536: 0x00007A7A,
+ 6537: 0x00007A79,
+ 6538: 0x00007AFA,
+ 6539: 0x00007CFE,
+ 6540: 0x00007F54,
+ 6541: 0x00007F8C,
+ 6542: 0x00007F8B,
+ 6543: 0x00008005,
+ 6544: 0x000080BA,
+ 6545: 0x000080A5,
+ 6546: 0x000080A2,
+ 6547: 0x000080B1,
+ 6548: 0x000080A1,
+ 6549: 0x000080AB,
+ 6550: 0x000080A9,
+ 6551: 0x000080B4,
+ 6552: 0x000080AA,
+ 6553: 0x000080AF,
+ 6554: 0x000081E5,
+ 6555: 0x000081FE,
+ 6556: 0x0000820D,
+ 6557: 0x000082B3,
+ 6558: 0x0000829D,
+ 6559: 0x00008299,
+ 6560: 0x000082AD,
+ 6561: 0x000082BD,
+ 6562: 0x0000829F,
+ 6563: 0x000082B9,
+ 6564: 0x000082B1,
+ 6565: 0x000082AC,
+ 6566: 0x000082A5,
+ 6567: 0x000082AF,
+ 6568: 0x000082B8,
+ 6569: 0x000082A3,
+ 6570: 0x000082B0,
+ 6571: 0x000082BE,
+ 6572: 0x000082B7,
+ 6573: 0x0000864E,
+ 6574: 0x00008671,
+ 6575: 0x0000521D,
+ 6576: 0x00008868,
+ 6577: 0x00008ECB,
+ 6578: 0x00008FCE,
+ 6579: 0x00008FD4,
+ 6580: 0x00008FD1,
+ 6581: 0x000090B5,
+ 6582: 0x000090B8,
+ 6583: 0x000090B1,
+ 6584: 0x000090B6,
+ 6585: 0x000091C7,
+ 6586: 0x000091D1,
+ 6587: 0x00009577,
+ 6588: 0x00009580,
+ 6589: 0x0000961C,
+ 6590: 0x00009640,
+ 6591: 0x0000963F,
+ 6592: 0x0000963B,
+ 6593: 0x00009644,
+ 6594: 0x00009642,
+ 6595: 0x000096B9,
+ 6596: 0x000096E8,
+ 6597: 0x00009752,
+ 6598: 0x0000975E,
+ 6599: 0x00004E9F,
+ 6600: 0x00004EAD,
+ 6601: 0x00004EAE,
+ 6602: 0x00004FE1,
+ 6603: 0x00004FB5,
+ 6604: 0x00004FAF,
+ 6605: 0x00004FBF,
+ 6606: 0x00004FE0,
+ 6607: 0x00004FD1,
+ 6608: 0x00004FCF,
+ 6609: 0x00004FDD,
+ 6610: 0x00004FC3,
+ 6611: 0x00004FB6,
+ 6612: 0x00004FD8,
+ 6613: 0x00004FDF,
+ 6614: 0x00004FCA,
+ 6615: 0x00004FD7,
+ 6616: 0x00004FAE,
+ 6617: 0x00004FD0,
+ 6618: 0x00004FC4,
+ 6619: 0x00004FC2,
+ 6620: 0x00004FDA,
+ 6621: 0x00004FCE,
+ 6622: 0x00004FDE,
+ 6623: 0x00004FB7,
+ 6624: 0x00005157,
+ 6625: 0x00005192,
+ 6626: 0x00005191,
+ 6627: 0x000051A0,
+ 6628: 0x0000524E,
+ 6629: 0x00005243,
+ 6630: 0x0000524A,
+ 6631: 0x0000524D,
+ 6632: 0x0000524C,
+ 6633: 0x0000524B,
+ 6634: 0x00005247,
+ 6635: 0x000052C7,
+ 6636: 0x000052C9,
+ 6637: 0x000052C3,
+ 6638: 0x000052C1,
+ 6639: 0x0000530D,
+ 6640: 0x00005357,
+ 6641: 0x0000537B,
+ 6642: 0x0000539A,
+ 6643: 0x000053DB,
+ 6644: 0x000054AC,
+ 6645: 0x000054C0,
+ 6646: 0x000054A8,
+ 6647: 0x000054CE,
+ 6648: 0x000054C9,
+ 6649: 0x000054B8,
+ 6650: 0x000054A6,
+ 6651: 0x000054B3,
+ 6652: 0x000054C7,
+ 6653: 0x000054C2,
+ 6654: 0x000054BD,
+ 6655: 0x000054AA,
+ 6656: 0x000054C1,
+ 6657: 0x000054C4,
+ 6658: 0x000054C8,
+ 6659: 0x000054AF,
+ 6660: 0x000054AB,
+ 6661: 0x000054B1,
+ 6662: 0x000054BB,
+ 6663: 0x000054A9,
+ 6664: 0x000054A7,
+ 6665: 0x000054BF,
+ 6666: 0x000056FF,
+ 6667: 0x00005782,
+ 6668: 0x0000578B,
+ 6669: 0x000057A0,
+ 6670: 0x000057A3,
+ 6671: 0x000057A2,
+ 6672: 0x000057CE,
+ 6673: 0x000057AE,
+ 6674: 0x00005793,
+ 6675: 0x00005955,
+ 6676: 0x00005951,
+ 6677: 0x0000594F,
+ 6678: 0x0000594E,
+ 6679: 0x00005950,
+ 6680: 0x000059DC,
+ 6681: 0x000059D8,
+ 6682: 0x000059FF,
+ 6683: 0x000059E3,
+ 6684: 0x000059E8,
+ 6685: 0x00005A03,
+ 6686: 0x000059E5,
+ 6687: 0x000059EA,
+ 6688: 0x000059DA,
+ 6689: 0x000059E6,
+ 6690: 0x00005A01,
+ 6691: 0x000059FB,
+ 6692: 0x00005B69,
+ 6693: 0x00005BA3,
+ 6694: 0x00005BA6,
+ 6695: 0x00005BA4,
+ 6696: 0x00005BA2,
+ 6697: 0x00005BA5,
+ 6698: 0x00005C01,
+ 6699: 0x00005C4E,
+ 6700: 0x00005C4F,
+ 6701: 0x00005C4D,
+ 6702: 0x00005C4B,
+ 6703: 0x00005CD9,
+ 6704: 0x00005CD2,
+ 6705: 0x00005DF7,
+ 6706: 0x00005E1D,
+ 6707: 0x00005E25,
+ 6708: 0x00005E1F,
+ 6709: 0x00005E7D,
+ 6710: 0x00005EA0,
+ 6711: 0x00005EA6,
+ 6712: 0x00005EFA,
+ 6713: 0x00005F08,
+ 6714: 0x00005F2D,
+ 6715: 0x00005F65,
+ 6716: 0x00005F88,
+ 6717: 0x00005F85,
+ 6718: 0x00005F8A,
+ 6719: 0x00005F8B,
+ 6720: 0x00005F87,
+ 6721: 0x00005F8C,
+ 6722: 0x00005F89,
+ 6723: 0x00006012,
+ 6724: 0x0000601D,
+ 6725: 0x00006020,
+ 6726: 0x00006025,
+ 6727: 0x0000600E,
+ 6728: 0x00006028,
+ 6729: 0x0000604D,
+ 6730: 0x00006070,
+ 6731: 0x00006068,
+ 6732: 0x00006062,
+ 6733: 0x00006046,
+ 6734: 0x00006043,
+ 6735: 0x0000606C,
+ 6736: 0x0000606B,
+ 6737: 0x0000606A,
+ 6738: 0x00006064,
+ 6739: 0x00006241,
+ 6740: 0x000062DC,
+ 6741: 0x00006316,
+ 6742: 0x00006309,
+ 6743: 0x000062FC,
+ 6744: 0x000062ED,
+ 6745: 0x00006301,
+ 6746: 0x000062EE,
+ 6747: 0x000062FD,
+ 6748: 0x00006307,
+ 6749: 0x000062F1,
+ 6750: 0x000062F7,
+ 6751: 0x000062EF,
+ 6752: 0x000062EC,
+ 6753: 0x000062FE,
+ 6754: 0x000062F4,
+ 6755: 0x00006311,
+ 6756: 0x00006302,
+ 6757: 0x0000653F,
+ 6758: 0x00006545,
+ 6759: 0x000065AB,
+ 6760: 0x000065BD,
+ 6761: 0x000065E2,
+ 6762: 0x00006625,
+ 6763: 0x0000662D,
+ 6764: 0x00006620,
+ 6765: 0x00006627,
+ 6766: 0x0000662F,
+ 6767: 0x0000661F,
+ 6768: 0x00006628,
+ 6769: 0x00006631,
+ 6770: 0x00006624,
+ 6771: 0x000066F7,
+ 6772: 0x000067FF,
+ 6773: 0x000067D3,
+ 6774: 0x000067F1,
+ 6775: 0x000067D4,
+ 6776: 0x000067D0,
+ 6777: 0x000067EC,
+ 6778: 0x000067B6,
+ 6779: 0x000067AF,
+ 6780: 0x000067F5,
+ 6781: 0x000067E9,
+ 6782: 0x000067EF,
+ 6783: 0x000067C4,
+ 6784: 0x000067D1,
+ 6785: 0x000067B4,
+ 6786: 0x000067DA,
+ 6787: 0x000067E5,
+ 6788: 0x000067B8,
+ 6789: 0x000067CF,
+ 6790: 0x000067DE,
+ 6791: 0x000067F3,
+ 6792: 0x000067B0,
+ 6793: 0x000067D9,
+ 6794: 0x000067E2,
+ 6795: 0x000067DD,
+ 6796: 0x000067D2,
+ 6797: 0x00006B6A,
+ 6798: 0x00006B83,
+ 6799: 0x00006B86,
+ 6800: 0x00006BB5,
+ 6801: 0x00006BD2,
+ 6802: 0x00006BD7,
+ 6803: 0x00006C1F,
+ 6804: 0x00006CC9,
+ 6805: 0x00006D0B,
+ 6806: 0x00006D32,
+ 6807: 0x00006D2A,
+ 6808: 0x00006D41,
+ 6809: 0x00006D25,
+ 6810: 0x00006D0C,
+ 6811: 0x00006D31,
+ 6812: 0x00006D1E,
+ 6813: 0x00006D17,
+ 6814: 0x00006D3B,
+ 6815: 0x00006D3D,
+ 6816: 0x00006D3E,
+ 6817: 0x00006D36,
+ 6818: 0x00006D1B,
+ 6819: 0x00006CF5,
+ 6820: 0x00006D39,
+ 6821: 0x00006D27,
+ 6822: 0x00006D38,
+ 6823: 0x00006D29,
+ 6824: 0x00006D2E,
+ 6825: 0x00006D35,
+ 6826: 0x00006D0E,
+ 6827: 0x00006D2B,
+ 6828: 0x000070AB,
+ 6829: 0x000070BA,
+ 6830: 0x000070B3,
+ 6831: 0x000070AC,
+ 6832: 0x000070AF,
+ 6833: 0x000070AD,
+ 6834: 0x000070B8,
+ 6835: 0x000070AE,
+ 6836: 0x000070A4,
+ 6837: 0x00007230,
+ 6838: 0x00007272,
+ 6839: 0x0000726F,
+ 6840: 0x00007274,
+ 6841: 0x000072E9,
+ 6842: 0x000072E0,
+ 6843: 0x000072E1,
+ 6844: 0x000073B7,
+ 6845: 0x000073CA,
+ 6846: 0x000073BB,
+ 6847: 0x000073B2,
+ 6848: 0x000073CD,
+ 6849: 0x000073C0,
+ 6850: 0x000073B3,
+ 6851: 0x0000751A,
+ 6852: 0x0000752D,
+ 6853: 0x0000754F,
+ 6854: 0x0000754C,
+ 6855: 0x0000754E,
+ 6856: 0x0000754B,
+ 6857: 0x000075AB,
+ 6858: 0x000075A4,
+ 6859: 0x000075A5,
+ 6860: 0x000075A2,
+ 6861: 0x000075A3,
+ 6862: 0x00007678,
+ 6863: 0x00007686,
+ 6864: 0x00007687,
+ 6865: 0x00007688,
+ 6866: 0x000076C8,
+ 6867: 0x000076C6,
+ 6868: 0x000076C3,
+ 6869: 0x000076C5,
+ 6870: 0x00007701,
+ 6871: 0x000076F9,
+ 6872: 0x000076F8,
+ 6873: 0x00007709,
+ 6874: 0x0000770B,
+ 6875: 0x000076FE,
+ 6876: 0x000076FC,
+ 6877: 0x00007707,
+ 6878: 0x000077DC,
+ 6879: 0x00007802,
+ 6880: 0x00007814,
+ 6881: 0x0000780C,
+ 6882: 0x0000780D,
+ 6883: 0x00007946,
+ 6884: 0x00007949,
+ 6885: 0x00007948,
+ 6886: 0x00007947,
+ 6887: 0x000079B9,
+ 6888: 0x000079BA,
+ 6889: 0x000079D1,
+ 6890: 0x000079D2,
+ 6891: 0x000079CB,
+ 6892: 0x00007A7F,
+ 6893: 0x00007A81,
+ 6894: 0x00007AFF,
+ 6895: 0x00007AFD,
+ 6896: 0x00007C7D,
+ 6897: 0x00007D02,
+ 6898: 0x00007D05,
+ 6899: 0x00007D00,
+ 6900: 0x00007D09,
+ 6901: 0x00007D07,
+ 6902: 0x00007D04,
+ 6903: 0x00007D06,
+ 6904: 0x00007F38,
+ 6905: 0x00007F8E,
+ 6906: 0x00007FBF,
+ 6907: 0x00008004,
+ 6908: 0x00008010,
+ 6909: 0x0000800D,
+ 6910: 0x00008011,
+ 6911: 0x00008036,
+ 6912: 0x000080D6,
+ 6913: 0x000080E5,
+ 6914: 0x000080DA,
+ 6915: 0x000080C3,
+ 6916: 0x000080C4,
+ 6917: 0x000080CC,
+ 6918: 0x000080E1,
+ 6919: 0x000080DB,
+ 6920: 0x000080CE,
+ 6921: 0x000080DE,
+ 6922: 0x000080E4,
+ 6923: 0x000080DD,
+ 6924: 0x000081F4,
+ 6925: 0x00008222,
+ 6926: 0x000082E7,
+ 6927: 0x00008303,
+ 6928: 0x00008305,
+ 6929: 0x000082E3,
+ 6930: 0x000082DB,
+ 6931: 0x000082E6,
+ 6932: 0x00008304,
+ 6933: 0x000082E5,
+ 6934: 0x00008302,
+ 6935: 0x00008309,
+ 6936: 0x000082D2,
+ 6937: 0x000082D7,
+ 6938: 0x000082F1,
+ 6939: 0x00008301,
+ 6940: 0x000082DC,
+ 6941: 0x000082D4,
+ 6942: 0x000082D1,
+ 6943: 0x000082DE,
+ 6944: 0x000082D3,
+ 6945: 0x000082DF,
+ 6946: 0x000082EF,
+ 6947: 0x00008306,
+ 6948: 0x00008650,
+ 6949: 0x00008679,
+ 6950: 0x0000867B,
+ 6951: 0x0000867A,
+ 6952: 0x0000884D,
+ 6953: 0x0000886B,
+ 6954: 0x00008981,
+ 6955: 0x000089D4,
+ 6956: 0x00008A08,
+ 6957: 0x00008A02,
+ 6958: 0x00008A03,
+ 6959: 0x00008C9E,
+ 6960: 0x00008CA0,
+ 6961: 0x00008D74,
+ 6962: 0x00008D73,
+ 6963: 0x00008DB4,
+ 6964: 0x00008ECD,
+ 6965: 0x00008ECC,
+ 6966: 0x00008FF0,
+ 6967: 0x00008FE6,
+ 6968: 0x00008FE2,
+ 6969: 0x00008FEA,
+ 6970: 0x00008FE5,
+ 6971: 0x00008FED,
+ 6972: 0x00008FEB,
+ 6973: 0x00008FE4,
+ 6974: 0x00008FE8,
+ 6975: 0x000090CA,
+ 6976: 0x000090CE,
+ 6977: 0x000090C1,
+ 6978: 0x000090C3,
+ 6979: 0x0000914B,
+ 6980: 0x0000914A,
+ 6981: 0x000091CD,
+ 6982: 0x00009582,
+ 6983: 0x00009650,
+ 6984: 0x0000964B,
+ 6985: 0x0000964C,
+ 6986: 0x0000964D,
+ 6987: 0x00009762,
+ 6988: 0x00009769,
+ 6989: 0x000097CB,
+ 6990: 0x000097ED,
+ 6991: 0x000097F3,
+ 6992: 0x00009801,
+ 6993: 0x000098A8,
+ 6994: 0x000098DB,
+ 6995: 0x000098DF,
+ 6996: 0x00009996,
+ 6997: 0x00009999,
+ 6998: 0x00004E58,
+ 6999: 0x00004EB3,
+ 7000: 0x0000500C,
+ 7001: 0x0000500D,
+ 7002: 0x00005023,
+ 7003: 0x00004FEF,
+ 7004: 0x00005026,
+ 7005: 0x00005025,
+ 7006: 0x00004FF8,
+ 7007: 0x00005029,
+ 7008: 0x00005016,
+ 7009: 0x00005006,
+ 7010: 0x0000503C,
+ 7011: 0x0000501F,
+ 7012: 0x0000501A,
+ 7013: 0x00005012,
+ 7014: 0x00005011,
+ 7015: 0x00004FFA,
+ 7016: 0x00005000,
+ 7017: 0x00005014,
+ 7018: 0x00005028,
+ 7019: 0x00004FF1,
+ 7020: 0x00005021,
+ 7021: 0x0000500B,
+ 7022: 0x00005019,
+ 7023: 0x00005018,
+ 7024: 0x00004FF3,
+ 7025: 0x00004FEE,
+ 7026: 0x0000502D,
+ 7027: 0x0000502A,
+ 7028: 0x00004FFE,
+ 7029: 0x0000502B,
+ 7030: 0x00005009,
+ 7031: 0x0000517C,
+ 7032: 0x000051A4,
+ 7033: 0x000051A5,
+ 7034: 0x000051A2,
+ 7035: 0x000051CD,
+ 7036: 0x000051CC,
+ 7037: 0x000051C6,
+ 7038: 0x000051CB,
+ 7039: 0x00005256,
+ 7040: 0x0000525C,
+ 7041: 0x00005254,
+ 7042: 0x0000525B,
+ 7043: 0x0000525D,
+ 7044: 0x0000532A,
+ 7045: 0x0000537F,
+ 7046: 0x0000539F,
+ 7047: 0x0000539D,
+ 7048: 0x000053DF,
+ 7049: 0x000054E8,
+ 7050: 0x00005510,
+ 7051: 0x00005501,
+ 7052: 0x00005537,
+ 7053: 0x000054FC,
+ 7054: 0x000054E5,
+ 7055: 0x000054F2,
+ 7056: 0x00005506,
+ 7057: 0x000054FA,
+ 7058: 0x00005514,
+ 7059: 0x000054E9,
+ 7060: 0x000054ED,
+ 7061: 0x000054E1,
+ 7062: 0x00005509,
+ 7063: 0x000054EE,
+ 7064: 0x000054EA,
+ 7065: 0x000054E6,
+ 7066: 0x00005527,
+ 7067: 0x00005507,
+ 7068: 0x000054FD,
+ 7069: 0x0000550F,
+ 7070: 0x00005703,
+ 7071: 0x00005704,
+ 7072: 0x000057C2,
+ 7073: 0x000057D4,
+ 7074: 0x000057CB,
+ 7075: 0x000057C3,
+ 7076: 0x00005809,
+ 7077: 0x0000590F,
+ 7078: 0x00005957,
+ 7079: 0x00005958,
+ 7080: 0x0000595A,
+ 7081: 0x00005A11,
+ 7082: 0x00005A18,
+ 7083: 0x00005A1C,
+ 7084: 0x00005A1F,
+ 7085: 0x00005A1B,
+ 7086: 0x00005A13,
+ 7087: 0x000059EC,
+ 7088: 0x00005A20,
+ 7089: 0x00005A23,
+ 7090: 0x00005A29,
+ 7091: 0x00005A25,
+ 7092: 0x00005A0C,
+ 7093: 0x00005A09,
+ 7094: 0x00005B6B,
+ 7095: 0x00005C58,
+ 7096: 0x00005BB0,
+ 7097: 0x00005BB3,
+ 7098: 0x00005BB6,
+ 7099: 0x00005BB4,
+ 7100: 0x00005BAE,
+ 7101: 0x00005BB5,
+ 7102: 0x00005BB9,
+ 7103: 0x00005BB8,
+ 7104: 0x00005C04,
+ 7105: 0x00005C51,
+ 7106: 0x00005C55,
+ 7107: 0x00005C50,
+ 7108: 0x00005CED,
+ 7109: 0x00005CFD,
+ 7110: 0x00005CFB,
+ 7111: 0x00005CEA,
+ 7112: 0x00005CE8,
+ 7113: 0x00005CF0,
+ 7114: 0x00005CF6,
+ 7115: 0x00005D01,
+ 7116: 0x00005CF4,
+ 7117: 0x00005DEE,
+ 7118: 0x00005E2D,
+ 7119: 0x00005E2B,
+ 7120: 0x00005EAB,
+ 7121: 0x00005EAD,
+ 7122: 0x00005EA7,
+ 7123: 0x00005F31,
+ 7124: 0x00005F92,
+ 7125: 0x00005F91,
+ 7126: 0x00005F90,
+ 7127: 0x00006059,
+ 7128: 0x00006063,
+ 7129: 0x00006065,
+ 7130: 0x00006050,
+ 7131: 0x00006055,
+ 7132: 0x0000606D,
+ 7133: 0x00006069,
+ 7134: 0x0000606F,
+ 7135: 0x00006084,
+ 7136: 0x0000609F,
+ 7137: 0x0000609A,
+ 7138: 0x0000608D,
+ 7139: 0x00006094,
+ 7140: 0x0000608C,
+ 7141: 0x00006085,
+ 7142: 0x00006096,
+ 7143: 0x00006247,
+ 7144: 0x000062F3,
+ 7145: 0x00006308,
+ 7146: 0x000062FF,
+ 7147: 0x0000634E,
+ 7148: 0x0000633E,
+ 7149: 0x0000632F,
+ 7150: 0x00006355,
+ 7151: 0x00006342,
+ 7152: 0x00006346,
+ 7153: 0x0000634F,
+ 7154: 0x00006349,
+ 7155: 0x0000633A,
+ 7156: 0x00006350,
+ 7157: 0x0000633D,
+ 7158: 0x0000632A,
+ 7159: 0x0000632B,
+ 7160: 0x00006328,
+ 7161: 0x0000634D,
+ 7162: 0x0000634C,
+ 7163: 0x00006548,
+ 7164: 0x00006549,
+ 7165: 0x00006599,
+ 7166: 0x000065C1,
+ 7167: 0x000065C5,
+ 7168: 0x00006642,
+ 7169: 0x00006649,
+ 7170: 0x0000664F,
+ 7171: 0x00006643,
+ 7172: 0x00006652,
+ 7173: 0x0000664C,
+ 7174: 0x00006645,
+ 7175: 0x00006641,
+ 7176: 0x000066F8,
+ 7177: 0x00006714,
+ 7178: 0x00006715,
+ 7179: 0x00006717,
+ 7180: 0x00006821,
+ 7181: 0x00006838,
+ 7182: 0x00006848,
+ 7183: 0x00006846,
+ 7184: 0x00006853,
+ 7185: 0x00006839,
+ 7186: 0x00006842,
+ 7187: 0x00006854,
+ 7188: 0x00006829,
+ 7189: 0x000068B3,
+ 7190: 0x00006817,
+ 7191: 0x0000684C,
+ 7192: 0x00006851,
+ 7193: 0x0000683D,
+ 7194: 0x000067F4,
+ 7195: 0x00006850,
+ 7196: 0x00006840,
+ 7197: 0x0000683C,
+ 7198: 0x00006843,
+ 7199: 0x0000682A,
+ 7200: 0x00006845,
+ 7201: 0x00006813,
+ 7202: 0x00006818,
+ 7203: 0x00006841,
+ 7204: 0x00006B8A,
+ 7205: 0x00006B89,
+ 7206: 0x00006BB7,
+ 7207: 0x00006C23,
+ 7208: 0x00006C27,
+ 7209: 0x00006C28,
+ 7210: 0x00006C26,
+ 7211: 0x00006C24,
+ 7212: 0x00006CF0,
+ 7213: 0x00006D6A,
+ 7214: 0x00006D95,
+ 7215: 0x00006D88,
+ 7216: 0x00006D87,
+ 7217: 0x00006D66,
+ 7218: 0x00006D78,
+ 7219: 0x00006D77,
+ 7220: 0x00006D59,
+ 7221: 0x00006D93,
+ 7222: 0x00006D6C,
+ 7223: 0x00006D89,
+ 7224: 0x00006D6E,
+ 7225: 0x00006D5A,
+ 7226: 0x00006D74,
+ 7227: 0x00006D69,
+ 7228: 0x00006D8C,
+ 7229: 0x00006D8A,
+ 7230: 0x00006D79,
+ 7231: 0x00006D85,
+ 7232: 0x00006D65,
+ 7233: 0x00006D94,
+ 7234: 0x000070CA,
+ 7235: 0x000070D8,
+ 7236: 0x000070E4,
+ 7237: 0x000070D9,
+ 7238: 0x000070C8,
+ 7239: 0x000070CF,
+ 7240: 0x00007239,
+ 7241: 0x00007279,
+ 7242: 0x000072FC,
+ 7243: 0x000072F9,
+ 7244: 0x000072FD,
+ 7245: 0x000072F8,
+ 7246: 0x000072F7,
+ 7247: 0x00007386,
+ 7248: 0x000073ED,
+ 7249: 0x00007409,
+ 7250: 0x000073EE,
+ 7251: 0x000073E0,
+ 7252: 0x000073EA,
+ 7253: 0x000073DE,
+ 7254: 0x00007554,
+ 7255: 0x0000755D,
+ 7256: 0x0000755C,
+ 7257: 0x0000755A,
+ 7258: 0x00007559,
+ 7259: 0x000075BE,
+ 7260: 0x000075C5,
+ 7261: 0x000075C7,
+ 7262: 0x000075B2,
+ 7263: 0x000075B3,
+ 7264: 0x000075BD,
+ 7265: 0x000075BC,
+ 7266: 0x000075B9,
+ 7267: 0x000075C2,
+ 7268: 0x000075B8,
+ 7269: 0x0000768B,
+ 7270: 0x000076B0,
+ 7271: 0x000076CA,
+ 7272: 0x000076CD,
+ 7273: 0x000076CE,
+ 7274: 0x00007729,
+ 7275: 0x0000771F,
+ 7276: 0x00007720,
+ 7277: 0x00007728,
+ 7278: 0x000077E9,
+ 7279: 0x00007830,
+ 7280: 0x00007827,
+ 7281: 0x00007838,
+ 7282: 0x0000781D,
+ 7283: 0x00007834,
+ 7284: 0x00007837,
+ 7285: 0x00007825,
+ 7286: 0x0000782D,
+ 7287: 0x00007820,
+ 7288: 0x0000781F,
+ 7289: 0x00007832,
+ 7290: 0x00007955,
+ 7291: 0x00007950,
+ 7292: 0x00007960,
+ 7293: 0x0000795F,
+ 7294: 0x00007956,
+ 7295: 0x0000795E,
+ 7296: 0x0000795D,
+ 7297: 0x00007957,
+ 7298: 0x0000795A,
+ 7299: 0x000079E4,
+ 7300: 0x000079E3,
+ 7301: 0x000079E7,
+ 7302: 0x000079DF,
+ 7303: 0x000079E6,
+ 7304: 0x000079E9,
+ 7305: 0x000079D8,
+ 7306: 0x00007A84,
+ 7307: 0x00007A88,
+ 7308: 0x00007AD9,
+ 7309: 0x00007B06,
+ 7310: 0x00007B11,
+ 7311: 0x00007C89,
+ 7312: 0x00007D21,
+ 7313: 0x00007D17,
+ 7314: 0x00007D0B,
+ 7315: 0x00007D0A,
+ 7316: 0x00007D20,
+ 7317: 0x00007D22,
+ 7318: 0x00007D14,
+ 7319: 0x00007D10,
+ 7320: 0x00007D15,
+ 7321: 0x00007D1A,
+ 7322: 0x00007D1C,
+ 7323: 0x00007D0D,
+ 7324: 0x00007D19,
+ 7325: 0x00007D1B,
+ 7326: 0x00007F3A,
+ 7327: 0x00007F5F,
+ 7328: 0x00007F94,
+ 7329: 0x00007FC5,
+ 7330: 0x00007FC1,
+ 7331: 0x00008006,
+ 7332: 0x00008018,
+ 7333: 0x00008015,
+ 7334: 0x00008019,
+ 7335: 0x00008017,
+ 7336: 0x0000803D,
+ 7337: 0x0000803F,
+ 7338: 0x000080F1,
+ 7339: 0x00008102,
+ 7340: 0x000080F0,
+ 7341: 0x00008105,
+ 7342: 0x000080ED,
+ 7343: 0x000080F4,
+ 7344: 0x00008106,
+ 7345: 0x000080F8,
+ 7346: 0x000080F3,
+ 7347: 0x00008108,
+ 7348: 0x000080FD,
+ 7349: 0x0000810A,
+ 7350: 0x000080FC,
+ 7351: 0x000080EF,
+ 7352: 0x000081ED,
+ 7353: 0x000081EC,
+ 7354: 0x00008200,
+ 7355: 0x00008210,
+ 7356: 0x0000822A,
+ 7357: 0x0000822B,
+ 7358: 0x00008228,
+ 7359: 0x0000822C,
+ 7360: 0x000082BB,
+ 7361: 0x0000832B,
+ 7362: 0x00008352,
+ 7363: 0x00008354,
+ 7364: 0x0000834A,
+ 7365: 0x00008338,
+ 7366: 0x00008350,
+ 7367: 0x00008349,
+ 7368: 0x00008335,
+ 7369: 0x00008334,
+ 7370: 0x0000834F,
+ 7371: 0x00008332,
+ 7372: 0x00008339,
+ 7373: 0x00008336,
+ 7374: 0x00008317,
+ 7375: 0x00008340,
+ 7376: 0x00008331,
+ 7377: 0x00008328,
+ 7378: 0x00008343,
+ 7379: 0x00008654,
+ 7380: 0x0000868A,
+ 7381: 0x000086AA,
+ 7382: 0x00008693,
+ 7383: 0x000086A4,
+ 7384: 0x000086A9,
+ 7385: 0x0000868C,
+ 7386: 0x000086A3,
+ 7387: 0x0000869C,
+ 7388: 0x00008870,
+ 7389: 0x00008877,
+ 7390: 0x00008881,
+ 7391: 0x00008882,
+ 7392: 0x0000887D,
+ 7393: 0x00008879,
+ 7394: 0x00008A18,
+ 7395: 0x00008A10,
+ 7396: 0x00008A0E,
+ 7397: 0x00008A0C,
+ 7398: 0x00008A15,
+ 7399: 0x00008A0A,
+ 7400: 0x00008A17,
+ 7401: 0x00008A13,
+ 7402: 0x00008A16,
+ 7403: 0x00008A0F,
+ 7404: 0x00008A11,
+ 7405: 0x00008C48,
+ 7406: 0x00008C7A,
+ 7407: 0x00008C79,
+ 7408: 0x00008CA1,
+ 7409: 0x00008CA2,
+ 7410: 0x00008D77,
+ 7411: 0x00008EAC,
+ 7412: 0x00008ED2,
+ 7413: 0x00008ED4,
+ 7414: 0x00008ECF,
+ 7415: 0x00008FB1,
+ 7416: 0x00009001,
+ 7417: 0x00009006,
+ 7418: 0x00008FF7,
+ 7419: 0x00009000,
+ 7420: 0x00008FFA,
+ 7421: 0x00008FF4,
+ 7422: 0x00009003,
+ 7423: 0x00008FFD,
+ 7424: 0x00009005,
+ 7425: 0x00008FF8,
+ 7426: 0x00009095,
+ 7427: 0x000090E1,
+ 7428: 0x000090DD,
+ 7429: 0x000090E2,
+ 7430: 0x00009152,
+ 7431: 0x0000914D,
+ 7432: 0x0000914C,
+ 7433: 0x000091D8,
+ 7434: 0x000091DD,
+ 7435: 0x000091D7,
+ 7436: 0x000091DC,
+ 7437: 0x000091D9,
+ 7438: 0x00009583,
+ 7439: 0x00009662,
+ 7440: 0x00009663,
+ 7441: 0x00009661,
+ 7442: 0x0000965B,
+ 7443: 0x0000965D,
+ 7444: 0x00009664,
+ 7445: 0x00009658,
+ 7446: 0x0000965E,
+ 7447: 0x000096BB,
+ 7448: 0x000098E2,
+ 7449: 0x000099AC,
+ 7450: 0x00009AA8,
+ 7451: 0x00009AD8,
+ 7452: 0x00009B25,
+ 7453: 0x00009B32,
+ 7454: 0x00009B3C,
+ 7455: 0x00004E7E,
+ 7456: 0x0000507A,
+ 7457: 0x0000507D,
+ 7458: 0x0000505C,
+ 7459: 0x00005047,
+ 7460: 0x00005043,
+ 7461: 0x0000504C,
+ 7462: 0x0000505A,
+ 7463: 0x00005049,
+ 7464: 0x00005065,
+ 7465: 0x00005076,
+ 7466: 0x0000504E,
+ 7467: 0x00005055,
+ 7468: 0x00005075,
+ 7469: 0x00005074,
+ 7470: 0x00005077,
+ 7471: 0x0000504F,
+ 7472: 0x0000500F,
+ 7473: 0x0000506F,
+ 7474: 0x0000506D,
+ 7475: 0x0000515C,
+ 7476: 0x00005195,
+ 7477: 0x000051F0,
+ 7478: 0x0000526A,
+ 7479: 0x0000526F,
+ 7480: 0x000052D2,
+ 7481: 0x000052D9,
+ 7482: 0x000052D8,
+ 7483: 0x000052D5,
+ 7484: 0x00005310,
+ 7485: 0x0000530F,
+ 7486: 0x00005319,
+ 7487: 0x0000533F,
+ 7488: 0x00005340,
+ 7489: 0x0000533E,
+ 7490: 0x000053C3,
+ 7491: 0x000066FC,
+ 7492: 0x00005546,
+ 7493: 0x0000556A,
+ 7494: 0x00005566,
+ 7495: 0x00005544,
+ 7496: 0x0000555E,
+ 7497: 0x00005561,
+ 7498: 0x00005543,
+ 7499: 0x0000554A,
+ 7500: 0x00005531,
+ 7501: 0x00005556,
+ 7502: 0x0000554F,
+ 7503: 0x00005555,
+ 7504: 0x0000552F,
+ 7505: 0x00005564,
+ 7506: 0x00005538,
+ 7507: 0x0000552E,
+ 7508: 0x0000555C,
+ 7509: 0x0000552C,
+ 7510: 0x00005563,
+ 7511: 0x00005533,
+ 7512: 0x00005541,
+ 7513: 0x00005557,
+ 7514: 0x00005708,
+ 7515: 0x0000570B,
+ 7516: 0x00005709,
+ 7517: 0x000057DF,
+ 7518: 0x00005805,
+ 7519: 0x0000580A,
+ 7520: 0x00005806,
+ 7521: 0x000057E0,
+ 7522: 0x000057E4,
+ 7523: 0x000057FA,
+ 7524: 0x00005802,
+ 7525: 0x00005835,
+ 7526: 0x000057F7,
+ 7527: 0x000057F9,
+ 7528: 0x00005920,
+ 7529: 0x00005962,
+ 7530: 0x00005A36,
+ 7531: 0x00005A41,
+ 7532: 0x00005A49,
+ 7533: 0x00005A66,
+ 7534: 0x00005A6A,
+ 7535: 0x00005A40,
+ 7536: 0x00005A3C,
+ 7537: 0x00005A62,
+ 7538: 0x00005A5A,
+ 7539: 0x00005A46,
+ 7540: 0x00005A4A,
+ 7541: 0x00005B70,
+ 7542: 0x00005BC7,
+ 7543: 0x00005BC5,
+ 7544: 0x00005BC4,
+ 7545: 0x00005BC2,
+ 7546: 0x00005BBF,
+ 7547: 0x00005BC6,
+ 7548: 0x00005C09,
+ 7549: 0x00005C08,
+ 7550: 0x00005C07,
+ 7551: 0x00005C60,
+ 7552: 0x00005C5C,
+ 7553: 0x00005C5D,
+ 7554: 0x00005D07,
+ 7555: 0x00005D06,
+ 7556: 0x00005D0E,
+ 7557: 0x00005D1B,
+ 7558: 0x00005D16,
+ 7559: 0x00005D22,
+ 7560: 0x00005D11,
+ 7561: 0x00005D29,
+ 7562: 0x00005D14,
+ 7563: 0x00005D19,
+ 7564: 0x00005D24,
+ 7565: 0x00005D27,
+ 7566: 0x00005D17,
+ 7567: 0x00005DE2,
+ 7568: 0x00005E38,
+ 7569: 0x00005E36,
+ 7570: 0x00005E33,
+ 7571: 0x00005E37,
+ 7572: 0x00005EB7,
+ 7573: 0x00005EB8,
+ 7574: 0x00005EB6,
+ 7575: 0x00005EB5,
+ 7576: 0x00005EBE,
+ 7577: 0x00005F35,
+ 7578: 0x00005F37,
+ 7579: 0x00005F57,
+ 7580: 0x00005F6C,
+ 7581: 0x00005F69,
+ 7582: 0x00005F6B,
+ 7583: 0x00005F97,
+ 7584: 0x00005F99,
+ 7585: 0x00005F9E,
+ 7586: 0x00005F98,
+ 7587: 0x00005FA1,
+ 7588: 0x00005FA0,
+ 7589: 0x00005F9C,
+ 7590: 0x0000607F,
+ 7591: 0x000060A3,
+ 7592: 0x00006089,
+ 7593: 0x000060A0,
+ 7594: 0x000060A8,
+ 7595: 0x000060CB,
+ 7596: 0x000060B4,
+ 7597: 0x000060E6,
+ 7598: 0x000060BD,
+ 7599: 0x000060C5,
+ 7600: 0x000060BB,
+ 7601: 0x000060B5,
+ 7602: 0x000060DC,
+ 7603: 0x000060BC,
+ 7604: 0x000060D8,
+ 7605: 0x000060D5,
+ 7606: 0x000060C6,
+ 7607: 0x000060DF,
+ 7608: 0x000060B8,
+ 7609: 0x000060DA,
+ 7610: 0x000060C7,
+ 7611: 0x0000621A,
+ 7612: 0x0000621B,
+ 7613: 0x00006248,
+ 7614: 0x000063A0,
+ 7615: 0x000063A7,
+ 7616: 0x00006372,
+ 7617: 0x00006396,
+ 7618: 0x000063A2,
+ 7619: 0x000063A5,
+ 7620: 0x00006377,
+ 7621: 0x00006367,
+ 7622: 0x00006398,
+ 7623: 0x000063AA,
+ 7624: 0x00006371,
+ 7625: 0x000063A9,
+ 7626: 0x00006389,
+ 7627: 0x00006383,
+ 7628: 0x0000639B,
+ 7629: 0x0000636B,
+ 7630: 0x000063A8,
+ 7631: 0x00006384,
+ 7632: 0x00006388,
+ 7633: 0x00006399,
+ 7634: 0x000063A1,
+ 7635: 0x000063AC,
+ 7636: 0x00006392,
+ 7637: 0x0000638F,
+ 7638: 0x00006380,
+ 7639: 0x0000637B,
+ 7640: 0x00006369,
+ 7641: 0x00006368,
+ 7642: 0x0000637A,
+ 7643: 0x0000655D,
+ 7644: 0x00006556,
+ 7645: 0x00006551,
+ 7646: 0x00006559,
+ 7647: 0x00006557,
+ 7648: 0x0000555F,
+ 7649: 0x0000654F,
+ 7650: 0x00006558,
+ 7651: 0x00006555,
+ 7652: 0x00006554,
+ 7653: 0x0000659C,
+ 7654: 0x0000659B,
+ 7655: 0x000065AC,
+ 7656: 0x000065CF,
+ 7657: 0x000065CB,
+ 7658: 0x000065CC,
+ 7659: 0x000065CE,
+ 7660: 0x0000665D,
+ 7661: 0x0000665A,
+ 7662: 0x00006664,
+ 7663: 0x00006668,
+ 7664: 0x00006666,
+ 7665: 0x0000665E,
+ 7666: 0x000066F9,
+ 7667: 0x000052D7,
+ 7668: 0x0000671B,
+ 7669: 0x00006881,
+ 7670: 0x000068AF,
+ 7671: 0x000068A2,
+ 7672: 0x00006893,
+ 7673: 0x000068B5,
+ 7674: 0x0000687F,
+ 7675: 0x00006876,
+ 7676: 0x000068B1,
+ 7677: 0x000068A7,
+ 7678: 0x00006897,
+ 7679: 0x000068B0,
+ 7680: 0x00006883,
+ 7681: 0x000068C4,
+ 7682: 0x000068AD,
+ 7683: 0x00006886,
+ 7684: 0x00006885,
+ 7685: 0x00006894,
+ 7686: 0x0000689D,
+ 7687: 0x000068A8,
+ 7688: 0x0000689F,
+ 7689: 0x000068A1,
+ 7690: 0x00006882,
+ 7691: 0x00006B32,
+ 7692: 0x00006BBA,
+ 7693: 0x00006BEB,
+ 7694: 0x00006BEC,
+ 7695: 0x00006C2B,
+ 7696: 0x00006D8E,
+ 7697: 0x00006DBC,
+ 7698: 0x00006DF3,
+ 7699: 0x00006DD9,
+ 7700: 0x00006DB2,
+ 7701: 0x00006DE1,
+ 7702: 0x00006DCC,
+ 7703: 0x00006DE4,
+ 7704: 0x00006DFB,
+ 7705: 0x00006DFA,
+ 7706: 0x00006E05,
+ 7707: 0x00006DC7,
+ 7708: 0x00006DCB,
+ 7709: 0x00006DAF,
+ 7710: 0x00006DD1,
+ 7711: 0x00006DAE,
+ 7712: 0x00006DDE,
+ 7713: 0x00006DF9,
+ 7714: 0x00006DB8,
+ 7715: 0x00006DF7,
+ 7716: 0x00006DF5,
+ 7717: 0x00006DC5,
+ 7718: 0x00006DD2,
+ 7719: 0x00006E1A,
+ 7720: 0x00006DB5,
+ 7721: 0x00006DDA,
+ 7722: 0x00006DEB,
+ 7723: 0x00006DD8,
+ 7724: 0x00006DEA,
+ 7725: 0x00006DF1,
+ 7726: 0x00006DEE,
+ 7727: 0x00006DE8,
+ 7728: 0x00006DC6,
+ 7729: 0x00006DC4,
+ 7730: 0x00006DAA,
+ 7731: 0x00006DEC,
+ 7732: 0x00006DBF,
+ 7733: 0x00006DE6,
+ 7734: 0x000070F9,
+ 7735: 0x00007109,
+ 7736: 0x0000710A,
+ 7737: 0x000070FD,
+ 7738: 0x000070EF,
+ 7739: 0x0000723D,
+ 7740: 0x0000727D,
+ 7741: 0x00007281,
+ 7742: 0x0000731C,
+ 7743: 0x0000731B,
+ 7744: 0x00007316,
+ 7745: 0x00007313,
+ 7746: 0x00007319,
+ 7747: 0x00007387,
+ 7748: 0x00007405,
+ 7749: 0x0000740A,
+ 7750: 0x00007403,
+ 7751: 0x00007406,
+ 7752: 0x000073FE,
+ 7753: 0x0000740D,
+ 7754: 0x000074E0,
+ 7755: 0x000074F6,
+ 7756: 0x000074F7,
+ 7757: 0x0000751C,
+ 7758: 0x00007522,
+ 7759: 0x00007565,
+ 7760: 0x00007566,
+ 7761: 0x00007562,
+ 7762: 0x00007570,
+ 7763: 0x0000758F,
+ 7764: 0x000075D4,
+ 7765: 0x000075D5,
+ 7766: 0x000075B5,
+ 7767: 0x000075CA,
+ 7768: 0x000075CD,
+ 7769: 0x0000768E,
+ 7770: 0x000076D4,
+ 7771: 0x000076D2,
+ 7772: 0x000076DB,
+ 7773: 0x00007737,
+ 7774: 0x0000773E,
+ 7775: 0x0000773C,
+ 7776: 0x00007736,
+ 7777: 0x00007738,
+ 7778: 0x0000773A,
+ 7779: 0x0000786B,
+ 7780: 0x00007843,
+ 7781: 0x0000784E,
+ 7782: 0x00007965,
+ 7783: 0x00007968,
+ 7784: 0x0000796D,
+ 7785: 0x000079FB,
+ 7786: 0x00007A92,
+ 7787: 0x00007A95,
+ 7788: 0x00007B20,
+ 7789: 0x00007B28,
+ 7790: 0x00007B1B,
+ 7791: 0x00007B2C,
+ 7792: 0x00007B26,
+ 7793: 0x00007B19,
+ 7794: 0x00007B1E,
+ 7795: 0x00007B2E,
+ 7796: 0x00007C92,
+ 7797: 0x00007C97,
+ 7798: 0x00007C95,
+ 7799: 0x00007D46,
+ 7800: 0x00007D43,
+ 7801: 0x00007D71,
+ 7802: 0x00007D2E,
+ 7803: 0x00007D39,
+ 7804: 0x00007D3C,
+ 7805: 0x00007D40,
+ 7806: 0x00007D30,
+ 7807: 0x00007D33,
+ 7808: 0x00007D44,
+ 7809: 0x00007D2F,
+ 7810: 0x00007D42,
+ 7811: 0x00007D32,
+ 7812: 0x00007D31,
+ 7813: 0x00007F3D,
+ 7814: 0x00007F9E,
+ 7815: 0x00007F9A,
+ 7816: 0x00007FCC,
+ 7817: 0x00007FCE,
+ 7818: 0x00007FD2,
+ 7819: 0x0000801C,
+ 7820: 0x0000804A,
+ 7821: 0x00008046,
+ 7822: 0x0000812F,
+ 7823: 0x00008116,
+ 7824: 0x00008123,
+ 7825: 0x0000812B,
+ 7826: 0x00008129,
+ 7827: 0x00008130,
+ 7828: 0x00008124,
+ 7829: 0x00008202,
+ 7830: 0x00008235,
+ 7831: 0x00008237,
+ 7832: 0x00008236,
+ 7833: 0x00008239,
+ 7834: 0x0000838E,
+ 7835: 0x0000839E,
+ 7836: 0x00008398,
+ 7837: 0x00008378,
+ 7838: 0x000083A2,
+ 7839: 0x00008396,
+ 7840: 0x000083BD,
+ 7841: 0x000083AB,
+ 7842: 0x00008392,
+ 7843: 0x0000838A,
+ 7844: 0x00008393,
+ 7845: 0x00008389,
+ 7846: 0x000083A0,
+ 7847: 0x00008377,
+ 7848: 0x0000837B,
+ 7849: 0x0000837C,
+ 7850: 0x00008386,
+ 7851: 0x000083A7,
+ 7852: 0x00008655,
+ 7853: 0x00005F6A,
+ 7854: 0x000086C7,
+ 7855: 0x000086C0,
+ 7856: 0x000086B6,
+ 7857: 0x000086C4,
+ 7858: 0x000086B5,
+ 7859: 0x000086C6,
+ 7860: 0x000086CB,
+ 7861: 0x000086B1,
+ 7862: 0x000086AF,
+ 7863: 0x000086C9,
+ 7864: 0x00008853,
+ 7865: 0x0000889E,
+ 7866: 0x00008888,
+ 7867: 0x000088AB,
+ 7868: 0x00008892,
+ 7869: 0x00008896,
+ 7870: 0x0000888D,
+ 7871: 0x0000888B,
+ 7872: 0x00008993,
+ 7873: 0x0000898F,
+ 7874: 0x00008A2A,
+ 7875: 0x00008A1D,
+ 7876: 0x00008A23,
+ 7877: 0x00008A25,
+ 7878: 0x00008A31,
+ 7879: 0x00008A2D,
+ 7880: 0x00008A1F,
+ 7881: 0x00008A1B,
+ 7882: 0x00008A22,
+ 7883: 0x00008C49,
+ 7884: 0x00008C5A,
+ 7885: 0x00008CA9,
+ 7886: 0x00008CAC,
+ 7887: 0x00008CAB,
+ 7888: 0x00008CA8,
+ 7889: 0x00008CAA,
+ 7890: 0x00008CA7,
+ 7891: 0x00008D67,
+ 7892: 0x00008D66,
+ 7893: 0x00008DBE,
+ 7894: 0x00008DBA,
+ 7895: 0x00008EDB,
+ 7896: 0x00008EDF,
+ 7897: 0x00009019,
+ 7898: 0x0000900D,
+ 7899: 0x0000901A,
+ 7900: 0x00009017,
+ 7901: 0x00009023,
+ 7902: 0x0000901F,
+ 7903: 0x0000901D,
+ 7904: 0x00009010,
+ 7905: 0x00009015,
+ 7906: 0x0000901E,
+ 7907: 0x00009020,
+ 7908: 0x0000900F,
+ 7909: 0x00009022,
+ 7910: 0x00009016,
+ 7911: 0x0000901B,
+ 7912: 0x00009014,
+ 7913: 0x000090E8,
+ 7914: 0x000090ED,
+ 7915: 0x000090FD,
+ 7916: 0x00009157,
+ 7917: 0x000091CE,
+ 7918: 0x000091F5,
+ 7919: 0x000091E6,
+ 7920: 0x000091E3,
+ 7921: 0x000091E7,
+ 7922: 0x000091ED,
+ 7923: 0x000091E9,
+ 7924: 0x00009589,
+ 7925: 0x0000966A,
+ 7926: 0x00009675,
+ 7927: 0x00009673,
+ 7928: 0x00009678,
+ 7929: 0x00009670,
+ 7930: 0x00009674,
+ 7931: 0x00009676,
+ 7932: 0x00009677,
+ 7933: 0x0000966C,
+ 7934: 0x000096C0,
+ 7935: 0x000096EA,
+ 7936: 0x000096E9,
+ 7937: 0x00007AE0,
+ 7938: 0x00007ADF,
+ 7939: 0x00009802,
+ 7940: 0x00009803,
+ 7941: 0x00009B5A,
+ 7942: 0x00009CE5,
+ 7943: 0x00009E75,
+ 7944: 0x00009E7F,
+ 7945: 0x00009EA5,
+ 7946: 0x00009EBB,
+ 7947: 0x000050A2,
+ 7948: 0x0000508D,
+ 7949: 0x00005085,
+ 7950: 0x00005099,
+ 7951: 0x00005091,
+ 7952: 0x00005080,
+ 7953: 0x00005096,
+ 7954: 0x00005098,
+ 7955: 0x0000509A,
+ 7956: 0x00006700,
+ 7957: 0x000051F1,
+ 7958: 0x00005272,
+ 7959: 0x00005274,
+ 7960: 0x00005275,
+ 7961: 0x00005269,
+ 7962: 0x000052DE,
+ 7963: 0x000052DD,
+ 7964: 0x000052DB,
+ 7965: 0x0000535A,
+ 7966: 0x000053A5,
+ 7967: 0x0000557B,
+ 7968: 0x00005580,
+ 7969: 0x000055A7,
+ 7970: 0x0000557C,
+ 7971: 0x0000558A,
+ 7972: 0x0000559D,
+ 7973: 0x00005598,
+ 7974: 0x00005582,
+ 7975: 0x0000559C,
+ 7976: 0x000055AA,
+ 7977: 0x00005594,
+ 7978: 0x00005587,
+ 7979: 0x0000558B,
+ 7980: 0x00005583,
+ 7981: 0x000055B3,
+ 7982: 0x000055AE,
+ 7983: 0x0000559F,
+ 7984: 0x0000553E,
+ 7985: 0x000055B2,
+ 7986: 0x0000559A,
+ 7987: 0x000055BB,
+ 7988: 0x000055AC,
+ 7989: 0x000055B1,
+ 7990: 0x0000557E,
+ 7991: 0x00005589,
+ 7992: 0x000055AB,
+ 7993: 0x00005599,
+ 7994: 0x0000570D,
+ 7995: 0x0000582F,
+ 7996: 0x0000582A,
+ 7997: 0x00005834,
+ 7998: 0x00005824,
+ 7999: 0x00005830,
+ 8000: 0x00005831,
+ 8001: 0x00005821,
+ 8002: 0x0000581D,
+ 8003: 0x00005820,
+ 8004: 0x000058F9,
+ 8005: 0x000058FA,
+ 8006: 0x00005960,
+ 8007: 0x00005A77,
+ 8008: 0x00005A9A,
+ 8009: 0x00005A7F,
+ 8010: 0x00005A92,
+ 8011: 0x00005A9B,
+ 8012: 0x00005AA7,
+ 8013: 0x00005B73,
+ 8014: 0x00005B71,
+ 8015: 0x00005BD2,
+ 8016: 0x00005BCC,
+ 8017: 0x00005BD3,
+ 8018: 0x00005BD0,
+ 8019: 0x00005C0A,
+ 8020: 0x00005C0B,
+ 8021: 0x00005C31,
+ 8022: 0x00005D4C,
+ 8023: 0x00005D50,
+ 8024: 0x00005D34,
+ 8025: 0x00005D47,
+ 8026: 0x00005DFD,
+ 8027: 0x00005E45,
+ 8028: 0x00005E3D,
+ 8029: 0x00005E40,
+ 8030: 0x00005E43,
+ 8031: 0x00005E7E,
+ 8032: 0x00005ECA,
+ 8033: 0x00005EC1,
+ 8034: 0x00005EC2,
+ 8035: 0x00005EC4,
+ 8036: 0x00005F3C,
+ 8037: 0x00005F6D,
+ 8038: 0x00005FA9,
+ 8039: 0x00005FAA,
+ 8040: 0x00005FA8,
+ 8041: 0x000060D1,
+ 8042: 0x000060E1,
+ 8043: 0x000060B2,
+ 8044: 0x000060B6,
+ 8045: 0x000060E0,
+ 8046: 0x0000611C,
+ 8047: 0x00006123,
+ 8048: 0x000060FA,
+ 8049: 0x00006115,
+ 8050: 0x000060F0,
+ 8051: 0x000060FB,
+ 8052: 0x000060F4,
+ 8053: 0x00006168,
+ 8054: 0x000060F1,
+ 8055: 0x0000610E,
+ 8056: 0x000060F6,
+ 8057: 0x00006109,
+ 8058: 0x00006100,
+ 8059: 0x00006112,
+ 8060: 0x0000621F,
+ 8061: 0x00006249,
+ 8062: 0x000063A3,
+ 8063: 0x0000638C,
+ 8064: 0x000063CF,
+ 8065: 0x000063C0,
+ 8066: 0x000063E9,
+ 8067: 0x000063C9,
+ 8068: 0x000063C6,
+ 8069: 0x000063CD,
+ 8070: 0x000063D2,
+ 8071: 0x000063E3,
+ 8072: 0x000063D0,
+ 8073: 0x000063E1,
+ 8074: 0x000063D6,
+ 8075: 0x000063ED,
+ 8076: 0x000063EE,
+ 8077: 0x00006376,
+ 8078: 0x000063F4,
+ 8079: 0x000063EA,
+ 8080: 0x000063DB,
+ 8081: 0x00006452,
+ 8082: 0x000063DA,
+ 8083: 0x000063F9,
+ 8084: 0x0000655E,
+ 8085: 0x00006566,
+ 8086: 0x00006562,
+ 8087: 0x00006563,
+ 8088: 0x00006591,
+ 8089: 0x00006590,
+ 8090: 0x000065AF,
+ 8091: 0x0000666E,
+ 8092: 0x00006670,
+ 8093: 0x00006674,
+ 8094: 0x00006676,
+ 8095: 0x0000666F,
+ 8096: 0x00006691,
+ 8097: 0x0000667A,
+ 8098: 0x0000667E,
+ 8099: 0x00006677,
+ 8100: 0x000066FE,
+ 8101: 0x000066FF,
+ 8102: 0x0000671F,
+ 8103: 0x0000671D,
+ 8104: 0x000068FA,
+ 8105: 0x000068D5,
+ 8106: 0x000068E0,
+ 8107: 0x000068D8,
+ 8108: 0x000068D7,
+ 8109: 0x00006905,
+ 8110: 0x000068DF,
+ 8111: 0x000068F5,
+ 8112: 0x000068EE,
+ 8113: 0x000068E7,
+ 8114: 0x000068F9,
+ 8115: 0x000068D2,
+ 8116: 0x000068F2,
+ 8117: 0x000068E3,
+ 8118: 0x000068CB,
+ 8119: 0x000068CD,
+ 8120: 0x0000690D,
+ 8121: 0x00006912,
+ 8122: 0x0000690E,
+ 8123: 0x000068C9,
+ 8124: 0x000068DA,
+ 8125: 0x0000696E,
+ 8126: 0x000068FB,
+ 8127: 0x00006B3E,
+ 8128: 0x00006B3A,
+ 8129: 0x00006B3D,
+ 8130: 0x00006B98,
+ 8131: 0x00006B96,
+ 8132: 0x00006BBC,
+ 8133: 0x00006BEF,
+ 8134: 0x00006C2E,
+ 8135: 0x00006C2F,
+ 8136: 0x00006C2C,
+ 8137: 0x00006E2F,
+ 8138: 0x00006E38,
+ 8139: 0x00006E54,
+ 8140: 0x00006E21,
+ 8141: 0x00006E32,
+ 8142: 0x00006E67,
+ 8143: 0x00006E4A,
+ 8144: 0x00006E20,
+ 8145: 0x00006E25,
+ 8146: 0x00006E23,
+ 8147: 0x00006E1B,
+ 8148: 0x00006E5B,
+ 8149: 0x00006E58,
+ 8150: 0x00006E24,
+ 8151: 0x00006E56,
+ 8152: 0x00006E6E,
+ 8153: 0x00006E2D,
+ 8154: 0x00006E26,
+ 8155: 0x00006E6F,
+ 8156: 0x00006E34,
+ 8157: 0x00006E4D,
+ 8158: 0x00006E3A,
+ 8159: 0x00006E2C,
+ 8160: 0x00006E43,
+ 8161: 0x00006E1D,
+ 8162: 0x00006E3E,
+ 8163: 0x00006ECB,
+ 8164: 0x00006E89,
+ 8165: 0x00006E19,
+ 8166: 0x00006E4E,
+ 8167: 0x00006E63,
+ 8168: 0x00006E44,
+ 8169: 0x00006E72,
+ 8170: 0x00006E69,
+ 8171: 0x00006E5F,
+ 8172: 0x00007119,
+ 8173: 0x0000711A,
+ 8174: 0x00007126,
+ 8175: 0x00007130,
+ 8176: 0x00007121,
+ 8177: 0x00007136,
+ 8178: 0x0000716E,
+ 8179: 0x0000711C,
+ 8180: 0x0000724C,
+ 8181: 0x00007284,
+ 8182: 0x00007280,
+ 8183: 0x00007336,
+ 8184: 0x00007325,
+ 8185: 0x00007334,
+ 8186: 0x00007329,
+ 8187: 0x0000743A,
+ 8188: 0x0000742A,
+ 8189: 0x00007433,
+ 8190: 0x00007422,
+ 8191: 0x00007425,
+ 8192: 0x00007435,
+ 8193: 0x00007436,
+ 8194: 0x00007434,
+ 8195: 0x0000742F,
+ 8196: 0x0000741B,
+ 8197: 0x00007426,
+ 8198: 0x00007428,
+ 8199: 0x00007525,
+ 8200: 0x00007526,
+ 8201: 0x0000756B,
+ 8202: 0x0000756A,
+ 8203: 0x000075E2,
+ 8204: 0x000075DB,
+ 8205: 0x000075E3,
+ 8206: 0x000075D9,
+ 8207: 0x000075D8,
+ 8208: 0x000075DE,
+ 8209: 0x000075E0,
+ 8210: 0x0000767B,
+ 8211: 0x0000767C,
+ 8212: 0x00007696,
+ 8213: 0x00007693,
+ 8214: 0x000076B4,
+ 8215: 0x000076DC,
+ 8216: 0x0000774F,
+ 8217: 0x000077ED,
+ 8218: 0x0000785D,
+ 8219: 0x0000786C,
+ 8220: 0x0000786F,
+ 8221: 0x00007A0D,
+ 8222: 0x00007A08,
+ 8223: 0x00007A0B,
+ 8224: 0x00007A05,
+ 8225: 0x00007A00,
+ 8226: 0x00007A98,
+ 8227: 0x00007A97,
+ 8228: 0x00007A96,
+ 8229: 0x00007AE5,
+ 8230: 0x00007AE3,
+ 8231: 0x00007B49,
+ 8232: 0x00007B56,
+ 8233: 0x00007B46,
+ 8234: 0x00007B50,
+ 8235: 0x00007B52,
+ 8236: 0x00007B54,
+ 8237: 0x00007B4D,
+ 8238: 0x00007B4B,
+ 8239: 0x00007B4F,
+ 8240: 0x00007B51,
+ 8241: 0x00007C9F,
+ 8242: 0x00007CA5,
+ 8243: 0x00007D5E,
+ 8244: 0x00007D50,
+ 8245: 0x00007D68,
+ 8246: 0x00007D55,
+ 8247: 0x00007D2B,
+ 8248: 0x00007D6E,
+ 8249: 0x00007D72,
+ 8250: 0x00007D61,
+ 8251: 0x00007D66,
+ 8252: 0x00007D62,
+ 8253: 0x00007D70,
+ 8254: 0x00007D73,
+ 8255: 0x00005584,
+ 8256: 0x00007FD4,
+ 8257: 0x00007FD5,
+ 8258: 0x0000800B,
+ 8259: 0x00008052,
+ 8260: 0x00008085,
+ 8261: 0x00008155,
+ 8262: 0x00008154,
+ 8263: 0x0000814B,
+ 8264: 0x00008151,
+ 8265: 0x0000814E,
+ 8266: 0x00008139,
+ 8267: 0x00008146,
+ 8268: 0x0000813E,
+ 8269: 0x0000814C,
+ 8270: 0x00008153,
+ 8271: 0x00008174,
+ 8272: 0x00008212,
+ 8273: 0x0000821C,
+ 8274: 0x000083E9,
+ 8275: 0x00008403,
+ 8276: 0x000083F8,
+ 8277: 0x0000840D,
+ 8278: 0x000083E0,
+ 8279: 0x000083C5,
+ 8280: 0x0000840B,
+ 8281: 0x000083C1,
+ 8282: 0x000083EF,
+ 8283: 0x000083F1,
+ 8284: 0x000083F4,
+ 8285: 0x00008457,
+ 8286: 0x0000840A,
+ 8287: 0x000083F0,
+ 8288: 0x0000840C,
+ 8289: 0x000083CC,
+ 8290: 0x000083FD,
+ 8291: 0x000083F2,
+ 8292: 0x000083CA,
+ 8293: 0x00008438,
+ 8294: 0x0000840E,
+ 8295: 0x00008404,
+ 8296: 0x000083DC,
+ 8297: 0x00008407,
+ 8298: 0x000083D4,
+ 8299: 0x000083DF,
+ 8300: 0x0000865B,
+ 8301: 0x000086DF,
+ 8302: 0x000086D9,
+ 8303: 0x000086ED,
+ 8304: 0x000086D4,
+ 8305: 0x000086DB,
+ 8306: 0x000086E4,
+ 8307: 0x000086D0,
+ 8308: 0x000086DE,
+ 8309: 0x00008857,
+ 8310: 0x000088C1,
+ 8311: 0x000088C2,
+ 8312: 0x000088B1,
+ 8313: 0x00008983,
+ 8314: 0x00008996,
+ 8315: 0x00008A3B,
+ 8316: 0x00008A60,
+ 8317: 0x00008A55,
+ 8318: 0x00008A5E,
+ 8319: 0x00008A3C,
+ 8320: 0x00008A41,
+ 8321: 0x00008A54,
+ 8322: 0x00008A5B,
+ 8323: 0x00008A50,
+ 8324: 0x00008A46,
+ 8325: 0x00008A34,
+ 8326: 0x00008A3A,
+ 8327: 0x00008A36,
+ 8328: 0x00008A56,
+ 8329: 0x00008C61,
+ 8330: 0x00008C82,
+ 8331: 0x00008CAF,
+ 8332: 0x00008CBC,
+ 8333: 0x00008CB3,
+ 8334: 0x00008CBD,
+ 8335: 0x00008CC1,
+ 8336: 0x00008CBB,
+ 8337: 0x00008CC0,
+ 8338: 0x00008CB4,
+ 8339: 0x00008CB7,
+ 8340: 0x00008CB6,
+ 8341: 0x00008CBF,
+ 8342: 0x00008CB8,
+ 8343: 0x00008D8A,
+ 8344: 0x00008D85,
+ 8345: 0x00008D81,
+ 8346: 0x00008DCE,
+ 8347: 0x00008DDD,
+ 8348: 0x00008DCB,
+ 8349: 0x00008DDA,
+ 8350: 0x00008DD1,
+ 8351: 0x00008DCC,
+ 8352: 0x00008DDB,
+ 8353: 0x00008DC6,
+ 8354: 0x00008EFB,
+ 8355: 0x00008EF8,
+ 8356: 0x00008EFC,
+ 8357: 0x00008F9C,
+ 8358: 0x0000902E,
+ 8359: 0x00009035,
+ 8360: 0x00009031,
+ 8361: 0x00009038,
+ 8362: 0x00009032,
+ 8363: 0x00009036,
+ 8364: 0x00009102,
+ 8365: 0x000090F5,
+ 8366: 0x00009109,
+ 8367: 0x000090FE,
+ 8368: 0x00009163,
+ 8369: 0x00009165,
+ 8370: 0x000091CF,
+ 8371: 0x00009214,
+ 8372: 0x00009215,
+ 8373: 0x00009223,
+ 8374: 0x00009209,
+ 8375: 0x0000921E,
+ 8376: 0x0000920D,
+ 8377: 0x00009210,
+ 8378: 0x00009207,
+ 8379: 0x00009211,
+ 8380: 0x00009594,
+ 8381: 0x0000958F,
+ 8382: 0x0000958B,
+ 8383: 0x00009591,
+ 8384: 0x00009593,
+ 8385: 0x00009592,
+ 8386: 0x0000958E,
+ 8387: 0x0000968A,
+ 8388: 0x0000968E,
+ 8389: 0x0000968B,
+ 8390: 0x0000967D,
+ 8391: 0x00009685,
+ 8392: 0x00009686,
+ 8393: 0x0000968D,
+ 8394: 0x00009672,
+ 8395: 0x00009684,
+ 8396: 0x000096C1,
+ 8397: 0x000096C5,
+ 8398: 0x000096C4,
+ 8399: 0x000096C6,
+ 8400: 0x000096C7,
+ 8401: 0x000096EF,
+ 8402: 0x000096F2,
+ 8403: 0x000097CC,
+ 8404: 0x00009805,
+ 8405: 0x00009806,
+ 8406: 0x00009808,
+ 8407: 0x000098E7,
+ 8408: 0x000098EA,
+ 8409: 0x000098EF,
+ 8410: 0x000098E9,
+ 8411: 0x000098F2,
+ 8412: 0x000098ED,
+ 8413: 0x000099AE,
+ 8414: 0x000099AD,
+ 8415: 0x00009EC3,
+ 8416: 0x00009ECD,
+ 8417: 0x00009ED1,
+ 8418: 0x00004E82,
+ 8419: 0x000050AD,
+ 8420: 0x000050B5,
+ 8421: 0x000050B2,
+ 8422: 0x000050B3,
+ 8423: 0x000050C5,
+ 8424: 0x000050BE,
+ 8425: 0x000050AC,
+ 8426: 0x000050B7,
+ 8427: 0x000050BB,
+ 8428: 0x000050AF,
+ 8429: 0x000050C7,
+ 8430: 0x0000527F,
+ 8431: 0x00005277,
+ 8432: 0x0000527D,
+ 8433: 0x000052DF,
+ 8434: 0x000052E6,
+ 8435: 0x000052E4,
+ 8436: 0x000052E2,
+ 8437: 0x000052E3,
+ 8438: 0x0000532F,
+ 8439: 0x000055DF,
+ 8440: 0x000055E8,
+ 8441: 0x000055D3,
+ 8442: 0x000055E6,
+ 8443: 0x000055CE,
+ 8444: 0x000055DC,
+ 8445: 0x000055C7,
+ 8446: 0x000055D1,
+ 8447: 0x000055E3,
+ 8448: 0x000055E4,
+ 8449: 0x000055EF,
+ 8450: 0x000055DA,
+ 8451: 0x000055E1,
+ 8452: 0x000055C5,
+ 8453: 0x000055C6,
+ 8454: 0x000055E5,
+ 8455: 0x000055C9,
+ 8456: 0x00005712,
+ 8457: 0x00005713,
+ 8458: 0x0000585E,
+ 8459: 0x00005851,
+ 8460: 0x00005858,
+ 8461: 0x00005857,
+ 8462: 0x0000585A,
+ 8463: 0x00005854,
+ 8464: 0x0000586B,
+ 8465: 0x0000584C,
+ 8466: 0x0000586D,
+ 8467: 0x0000584A,
+ 8468: 0x00005862,
+ 8469: 0x00005852,
+ 8470: 0x0000584B,
+ 8471: 0x00005967,
+ 8472: 0x00005AC1,
+ 8473: 0x00005AC9,
+ 8474: 0x00005ACC,
+ 8475: 0x00005ABE,
+ 8476: 0x00005ABD,
+ 8477: 0x00005ABC,
+ 8478: 0x00005AB3,
+ 8479: 0x00005AC2,
+ 8480: 0x00005AB2,
+ 8481: 0x00005D69,
+ 8482: 0x00005D6F,
+ 8483: 0x00005E4C,
+ 8484: 0x00005E79,
+ 8485: 0x00005EC9,
+ 8486: 0x00005EC8,
+ 8487: 0x00005F12,
+ 8488: 0x00005F59,
+ 8489: 0x00005FAC,
+ 8490: 0x00005FAE,
+ 8491: 0x0000611A,
+ 8492: 0x0000610F,
+ 8493: 0x00006148,
+ 8494: 0x0000611F,
+ 8495: 0x000060F3,
+ 8496: 0x0000611B,
+ 8497: 0x000060F9,
+ 8498: 0x00006101,
+ 8499: 0x00006108,
+ 8500: 0x0000614E,
+ 8501: 0x0000614C,
+ 8502: 0x00006144,
+ 8503: 0x0000614D,
+ 8504: 0x0000613E,
+ 8505: 0x00006134,
+ 8506: 0x00006127,
+ 8507: 0x0000610D,
+ 8508: 0x00006106,
+ 8509: 0x00006137,
+ 8510: 0x00006221,
+ 8511: 0x00006222,
+ 8512: 0x00006413,
+ 8513: 0x0000643E,
+ 8514: 0x0000641E,
+ 8515: 0x0000642A,
+ 8516: 0x0000642D,
+ 8517: 0x0000643D,
+ 8518: 0x0000642C,
+ 8519: 0x0000640F,
+ 8520: 0x0000641C,
+ 8521: 0x00006414,
+ 8522: 0x0000640D,
+ 8523: 0x00006436,
+ 8524: 0x00006416,
+ 8525: 0x00006417,
+ 8526: 0x00006406,
+ 8527: 0x0000656C,
+ 8528: 0x0000659F,
+ 8529: 0x000065B0,
+ 8530: 0x00006697,
+ 8531: 0x00006689,
+ 8532: 0x00006687,
+ 8533: 0x00006688,
+ 8534: 0x00006696,
+ 8535: 0x00006684,
+ 8536: 0x00006698,
+ 8537: 0x0000668D,
+ 8538: 0x00006703,
+ 8539: 0x00006994,
+ 8540: 0x0000696D,
+ 8541: 0x0000695A,
+ 8542: 0x00006977,
+ 8543: 0x00006960,
+ 8544: 0x00006954,
+ 8545: 0x00006975,
+ 8546: 0x00006930,
+ 8547: 0x00006982,
+ 8548: 0x0000694A,
+ 8549: 0x00006968,
+ 8550: 0x0000696B,
+ 8551: 0x0000695E,
+ 8552: 0x00006953,
+ 8553: 0x00006979,
+ 8554: 0x00006986,
+ 8555: 0x0000695D,
+ 8556: 0x00006963,
+ 8557: 0x0000695B,
+ 8558: 0x00006B47,
+ 8559: 0x00006B72,
+ 8560: 0x00006BC0,
+ 8561: 0x00006BBF,
+ 8562: 0x00006BD3,
+ 8563: 0x00006BFD,
+ 8564: 0x00006EA2,
+ 8565: 0x00006EAF,
+ 8566: 0x00006ED3,
+ 8567: 0x00006EB6,
+ 8568: 0x00006EC2,
+ 8569: 0x00006E90,
+ 8570: 0x00006E9D,
+ 8571: 0x00006EC7,
+ 8572: 0x00006EC5,
+ 8573: 0x00006EA5,
+ 8574: 0x00006E98,
+ 8575: 0x00006EBC,
+ 8576: 0x00006EBA,
+ 8577: 0x00006EAB,
+ 8578: 0x00006ED1,
+ 8579: 0x00006E96,
+ 8580: 0x00006E9C,
+ 8581: 0x00006EC4,
+ 8582: 0x00006ED4,
+ 8583: 0x00006EAA,
+ 8584: 0x00006EA7,
+ 8585: 0x00006EB4,
+ 8586: 0x0000714E,
+ 8587: 0x00007159,
+ 8588: 0x00007169,
+ 8589: 0x00007164,
+ 8590: 0x00007149,
+ 8591: 0x00007167,
+ 8592: 0x0000715C,
+ 8593: 0x0000716C,
+ 8594: 0x00007166,
+ 8595: 0x0000714C,
+ 8596: 0x00007165,
+ 8597: 0x0000715E,
+ 8598: 0x00007146,
+ 8599: 0x00007168,
+ 8600: 0x00007156,
+ 8601: 0x0000723A,
+ 8602: 0x00007252,
+ 8603: 0x00007337,
+ 8604: 0x00007345,
+ 8605: 0x0000733F,
+ 8606: 0x0000733E,
+ 8607: 0x0000746F,
+ 8608: 0x0000745A,
+ 8609: 0x00007455,
+ 8610: 0x0000745F,
+ 8611: 0x0000745E,
+ 8612: 0x00007441,
+ 8613: 0x0000743F,
+ 8614: 0x00007459,
+ 8615: 0x0000745B,
+ 8616: 0x0000745C,
+ 8617: 0x00007576,
+ 8618: 0x00007578,
+ 8619: 0x00007600,
+ 8620: 0x000075F0,
+ 8621: 0x00007601,
+ 8622: 0x000075F2,
+ 8623: 0x000075F1,
+ 8624: 0x000075FA,
+ 8625: 0x000075FF,
+ 8626: 0x000075F4,
+ 8627: 0x000075F3,
+ 8628: 0x000076DE,
+ 8629: 0x000076DF,
+ 8630: 0x0000775B,
+ 8631: 0x0000776B,
+ 8632: 0x00007766,
+ 8633: 0x0000775E,
+ 8634: 0x00007763,
+ 8635: 0x00007779,
+ 8636: 0x0000776A,
+ 8637: 0x0000776C,
+ 8638: 0x0000775C,
+ 8639: 0x00007765,
+ 8640: 0x00007768,
+ 8641: 0x00007762,
+ 8642: 0x000077EE,
+ 8643: 0x0000788E,
+ 8644: 0x000078B0,
+ 8645: 0x00007897,
+ 8646: 0x00007898,
+ 8647: 0x0000788C,
+ 8648: 0x00007889,
+ 8649: 0x0000787C,
+ 8650: 0x00007891,
+ 8651: 0x00007893,
+ 8652: 0x0000787F,
+ 8653: 0x0000797A,
+ 8654: 0x0000797F,
+ 8655: 0x00007981,
+ 8656: 0x0000842C,
+ 8657: 0x000079BD,
+ 8658: 0x00007A1C,
+ 8659: 0x00007A1A,
+ 8660: 0x00007A20,
+ 8661: 0x00007A14,
+ 8662: 0x00007A1F,
+ 8663: 0x00007A1E,
+ 8664: 0x00007A9F,
+ 8665: 0x00007AA0,
+ 8666: 0x00007B77,
+ 8667: 0x00007BC0,
+ 8668: 0x00007B60,
+ 8669: 0x00007B6E,
+ 8670: 0x00007B67,
+ 8671: 0x00007CB1,
+ 8672: 0x00007CB3,
+ 8673: 0x00007CB5,
+ 8674: 0x00007D93,
+ 8675: 0x00007D79,
+ 8676: 0x00007D91,
+ 8677: 0x00007D81,
+ 8678: 0x00007D8F,
+ 8679: 0x00007D5B,
+ 8680: 0x00007F6E,
+ 8681: 0x00007F69,
+ 8682: 0x00007F6A,
+ 8683: 0x00007F72,
+ 8684: 0x00007FA9,
+ 8685: 0x00007FA8,
+ 8686: 0x00007FA4,
+ 8687: 0x00008056,
+ 8688: 0x00008058,
+ 8689: 0x00008086,
+ 8690: 0x00008084,
+ 8691: 0x00008171,
+ 8692: 0x00008170,
+ 8693: 0x00008178,
+ 8694: 0x00008165,
+ 8695: 0x0000816E,
+ 8696: 0x00008173,
+ 8697: 0x0000816B,
+ 8698: 0x00008179,
+ 8699: 0x0000817A,
+ 8700: 0x00008166,
+ 8701: 0x00008205,
+ 8702: 0x00008247,
+ 8703: 0x00008482,
+ 8704: 0x00008477,
+ 8705: 0x0000843D,
+ 8706: 0x00008431,
+ 8707: 0x00008475,
+ 8708: 0x00008466,
+ 8709: 0x0000846B,
+ 8710: 0x00008449,
+ 8711: 0x0000846C,
+ 8712: 0x0000845B,
+ 8713: 0x0000843C,
+ 8714: 0x00008435,
+ 8715: 0x00008461,
+ 8716: 0x00008463,
+ 8717: 0x00008469,
+ 8718: 0x0000846D,
+ 8719: 0x00008446,
+ 8720: 0x0000865E,
+ 8721: 0x0000865C,
+ 8722: 0x0000865F,
+ 8723: 0x000086F9,
+ 8724: 0x00008713,
+ 8725: 0x00008708,
+ 8726: 0x00008707,
+ 8727: 0x00008700,
+ 8728: 0x000086FE,
+ 8729: 0x000086FB,
+ 8730: 0x00008702,
+ 8731: 0x00008703,
+ 8732: 0x00008706,
+ 8733: 0x0000870A,
+ 8734: 0x00008859,
+ 8735: 0x000088DF,
+ 8736: 0x000088D4,
+ 8737: 0x000088D9,
+ 8738: 0x000088DC,
+ 8739: 0x000088D8,
+ 8740: 0x000088DD,
+ 8741: 0x000088E1,
+ 8742: 0x000088CA,
+ 8743: 0x000088D5,
+ 8744: 0x000088D2,
+ 8745: 0x0000899C,
+ 8746: 0x000089E3,
+ 8747: 0x00008A6B,
+ 8748: 0x00008A72,
+ 8749: 0x00008A73,
+ 8750: 0x00008A66,
+ 8751: 0x00008A69,
+ 8752: 0x00008A70,
+ 8753: 0x00008A87,
+ 8754: 0x00008A7C,
+ 8755: 0x00008A63,
+ 8756: 0x00008AA0,
+ 8757: 0x00008A71,
+ 8758: 0x00008A85,
+ 8759: 0x00008A6D,
+ 8760: 0x00008A62,
+ 8761: 0x00008A6E,
+ 8762: 0x00008A6C,
+ 8763: 0x00008A79,
+ 8764: 0x00008A7B,
+ 8765: 0x00008A3E,
+ 8766: 0x00008A68,
+ 8767: 0x00008C62,
+ 8768: 0x00008C8A,
+ 8769: 0x00008C89,
+ 8770: 0x00008CCA,
+ 8771: 0x00008CC7,
+ 8772: 0x00008CC8,
+ 8773: 0x00008CC4,
+ 8774: 0x00008CB2,
+ 8775: 0x00008CC3,
+ 8776: 0x00008CC2,
+ 8777: 0x00008CC5,
+ 8778: 0x00008DE1,
+ 8779: 0x00008DDF,
+ 8780: 0x00008DE8,
+ 8781: 0x00008DEF,
+ 8782: 0x00008DF3,
+ 8783: 0x00008DFA,
+ 8784: 0x00008DEA,
+ 8785: 0x00008DE4,
+ 8786: 0x00008DE6,
+ 8787: 0x00008EB2,
+ 8788: 0x00008F03,
+ 8789: 0x00008F09,
+ 8790: 0x00008EFE,
+ 8791: 0x00008F0A,
+ 8792: 0x00008F9F,
+ 8793: 0x00008FB2,
+ 8794: 0x0000904B,
+ 8795: 0x0000904A,
+ 8796: 0x00009053,
+ 8797: 0x00009042,
+ 8798: 0x00009054,
+ 8799: 0x0000903C,
+ 8800: 0x00009055,
+ 8801: 0x00009050,
+ 8802: 0x00009047,
+ 8803: 0x0000904F,
+ 8804: 0x0000904E,
+ 8805: 0x0000904D,
+ 8806: 0x00009051,
+ 8807: 0x0000903E,
+ 8808: 0x00009041,
+ 8809: 0x00009112,
+ 8810: 0x00009117,
+ 8811: 0x0000916C,
+ 8812: 0x0000916A,
+ 8813: 0x00009169,
+ 8814: 0x000091C9,
+ 8815: 0x00009237,
+ 8816: 0x00009257,
+ 8817: 0x00009238,
+ 8818: 0x0000923D,
+ 8819: 0x00009240,
+ 8820: 0x0000923E,
+ 8821: 0x0000925B,
+ 8822: 0x0000924B,
+ 8823: 0x00009264,
+ 8824: 0x00009251,
+ 8825: 0x00009234,
+ 8826: 0x00009249,
+ 8827: 0x0000924D,
+ 8828: 0x00009245,
+ 8829: 0x00009239,
+ 8830: 0x0000923F,
+ 8831: 0x0000925A,
+ 8832: 0x00009598,
+ 8833: 0x00009698,
+ 8834: 0x00009694,
+ 8835: 0x00009695,
+ 8836: 0x000096CD,
+ 8837: 0x000096CB,
+ 8838: 0x000096C9,
+ 8839: 0x000096CA,
+ 8840: 0x000096F7,
+ 8841: 0x000096FB,
+ 8842: 0x000096F9,
+ 8843: 0x000096F6,
+ 8844: 0x00009756,
+ 8845: 0x00009774,
+ 8846: 0x00009776,
+ 8847: 0x00009810,
+ 8848: 0x00009811,
+ 8849: 0x00009813,
+ 8850: 0x0000980A,
+ 8851: 0x00009812,
+ 8852: 0x0000980C,
+ 8853: 0x000098FC,
+ 8854: 0x000098F4,
+ 8855: 0x000098FD,
+ 8856: 0x000098FE,
+ 8857: 0x000099B3,
+ 8858: 0x000099B1,
+ 8859: 0x000099B4,
+ 8860: 0x00009AE1,
+ 8861: 0x00009CE9,
+ 8862: 0x00009E82,
+ 8863: 0x00009F0E,
+ 8864: 0x00009F13,
+ 8865: 0x00009F20,
+ 8866: 0x000050E7,
+ 8867: 0x000050EE,
+ 8868: 0x000050E5,
+ 8869: 0x000050D6,
+ 8870: 0x000050ED,
+ 8871: 0x000050DA,
+ 8872: 0x000050D5,
+ 8873: 0x000050CF,
+ 8874: 0x000050D1,
+ 8875: 0x000050F1,
+ 8876: 0x000050CE,
+ 8877: 0x000050E9,
+ 8878: 0x00005162,
+ 8879: 0x000051F3,
+ 8880: 0x00005283,
+ 8881: 0x00005282,
+ 8882: 0x00005331,
+ 8883: 0x000053AD,
+ 8884: 0x000055FE,
+ 8885: 0x00005600,
+ 8886: 0x0000561B,
+ 8887: 0x00005617,
+ 8888: 0x000055FD,
+ 8889: 0x00005614,
+ 8890: 0x00005606,
+ 8891: 0x00005609,
+ 8892: 0x0000560D,
+ 8893: 0x0000560E,
+ 8894: 0x000055F7,
+ 8895: 0x00005616,
+ 8896: 0x0000561F,
+ 8897: 0x00005608,
+ 8898: 0x00005610,
+ 8899: 0x000055F6,
+ 8900: 0x00005718,
+ 8901: 0x00005716,
+ 8902: 0x00005875,
+ 8903: 0x0000587E,
+ 8904: 0x00005883,
+ 8905: 0x00005893,
+ 8906: 0x0000588A,
+ 8907: 0x00005879,
+ 8908: 0x00005885,
+ 8909: 0x0000587D,
+ 8910: 0x000058FD,
+ 8911: 0x00005925,
+ 8912: 0x00005922,
+ 8913: 0x00005924,
+ 8914: 0x0000596A,
+ 8915: 0x00005969,
+ 8916: 0x00005AE1,
+ 8917: 0x00005AE6,
+ 8918: 0x00005AE9,
+ 8919: 0x00005AD7,
+ 8920: 0x00005AD6,
+ 8921: 0x00005AD8,
+ 8922: 0x00005AE3,
+ 8923: 0x00005B75,
+ 8924: 0x00005BDE,
+ 8925: 0x00005BE7,
+ 8926: 0x00005BE1,
+ 8927: 0x00005BE5,
+ 8928: 0x00005BE6,
+ 8929: 0x00005BE8,
+ 8930: 0x00005BE2,
+ 8931: 0x00005BE4,
+ 8932: 0x00005BDF,
+ 8933: 0x00005C0D,
+ 8934: 0x00005C62,
+ 8935: 0x00005D84,
+ 8936: 0x00005D87,
+ 8937: 0x00005E5B,
+ 8938: 0x00005E63,
+ 8939: 0x00005E55,
+ 8940: 0x00005E57,
+ 8941: 0x00005E54,
+ 8942: 0x00005ED3,
+ 8943: 0x00005ED6,
+ 8944: 0x00005F0A,
+ 8945: 0x00005F46,
+ 8946: 0x00005F70,
+ 8947: 0x00005FB9,
+ 8948: 0x00006147,
+ 8949: 0x0000613F,
+ 8950: 0x0000614B,
+ 8951: 0x00006177,
+ 8952: 0x00006162,
+ 8953: 0x00006163,
+ 8954: 0x0000615F,
+ 8955: 0x0000615A,
+ 8956: 0x00006158,
+ 8957: 0x00006175,
+ 8958: 0x0000622A,
+ 8959: 0x00006487,
+ 8960: 0x00006458,
+ 8961: 0x00006454,
+ 8962: 0x000064A4,
+ 8963: 0x00006478,
+ 8964: 0x0000645F,
+ 8965: 0x0000647A,
+ 8966: 0x00006451,
+ 8967: 0x00006467,
+ 8968: 0x00006434,
+ 8969: 0x0000646D,
+ 8970: 0x0000647B,
+ 8971: 0x00006572,
+ 8972: 0x000065A1,
+ 8973: 0x000065D7,
+ 8974: 0x000065D6,
+ 8975: 0x000066A2,
+ 8976: 0x000066A8,
+ 8977: 0x0000669D,
+ 8978: 0x0000699C,
+ 8979: 0x000069A8,
+ 8980: 0x00006995,
+ 8981: 0x000069C1,
+ 8982: 0x000069AE,
+ 8983: 0x000069D3,
+ 8984: 0x000069CB,
+ 8985: 0x0000699B,
+ 8986: 0x000069B7,
+ 8987: 0x000069BB,
+ 8988: 0x000069AB,
+ 8989: 0x000069B4,
+ 8990: 0x000069D0,
+ 8991: 0x000069CD,
+ 8992: 0x000069AD,
+ 8993: 0x000069CC,
+ 8994: 0x000069A6,
+ 8995: 0x000069C3,
+ 8996: 0x000069A3,
+ 8997: 0x00006B49,
+ 8998: 0x00006B4C,
+ 8999: 0x00006C33,
+ 9000: 0x00006F33,
+ 9001: 0x00006F14,
+ 9002: 0x00006EFE,
+ 9003: 0x00006F13,
+ 9004: 0x00006EF4,
+ 9005: 0x00006F29,
+ 9006: 0x00006F3E,
+ 9007: 0x00006F20,
+ 9008: 0x00006F2C,
+ 9009: 0x00006F0F,
+ 9010: 0x00006F02,
+ 9011: 0x00006F22,
+ 9012: 0x00006EFF,
+ 9013: 0x00006EEF,
+ 9014: 0x00006F06,
+ 9015: 0x00006F31,
+ 9016: 0x00006F38,
+ 9017: 0x00006F32,
+ 9018: 0x00006F23,
+ 9019: 0x00006F15,
+ 9020: 0x00006F2B,
+ 9021: 0x00006F2F,
+ 9022: 0x00006F88,
+ 9023: 0x00006F2A,
+ 9024: 0x00006EEC,
+ 9025: 0x00006F01,
+ 9026: 0x00006EF2,
+ 9027: 0x00006ECC,
+ 9028: 0x00006EF7,
+ 9029: 0x00007194,
+ 9030: 0x00007199,
+ 9031: 0x0000717D,
+ 9032: 0x0000718A,
+ 9033: 0x00007184,
+ 9034: 0x00007192,
+ 9035: 0x0000723E,
+ 9036: 0x00007292,
+ 9037: 0x00007296,
+ 9038: 0x00007344,
+ 9039: 0x00007350,
+ 9040: 0x00007464,
+ 9041: 0x00007463,
+ 9042: 0x0000746A,
+ 9043: 0x00007470,
+ 9044: 0x0000746D,
+ 9045: 0x00007504,
+ 9046: 0x00007591,
+ 9047: 0x00007627,
+ 9048: 0x0000760D,
+ 9049: 0x0000760B,
+ 9050: 0x00007609,
+ 9051: 0x00007613,
+ 9052: 0x000076E1,
+ 9053: 0x000076E3,
+ 9054: 0x00007784,
+ 9055: 0x0000777D,
+ 9056: 0x0000777F,
+ 9057: 0x00007761,
+ 9058: 0x000078C1,
+ 9059: 0x0000789F,
+ 9060: 0x000078A7,
+ 9061: 0x000078B3,
+ 9062: 0x000078A9,
+ 9063: 0x000078A3,
+ 9064: 0x0000798E,
+ 9065: 0x0000798F,
+ 9066: 0x0000798D,
+ 9067: 0x00007A2E,
+ 9068: 0x00007A31,
+ 9069: 0x00007AAA,
+ 9070: 0x00007AA9,
+ 9071: 0x00007AED,
+ 9072: 0x00007AEF,
+ 9073: 0x00007BA1,
+ 9074: 0x00007B95,
+ 9075: 0x00007B8B,
+ 9076: 0x00007B75,
+ 9077: 0x00007B97,
+ 9078: 0x00007B9D,
+ 9079: 0x00007B94,
+ 9080: 0x00007B8F,
+ 9081: 0x00007BB8,
+ 9082: 0x00007B87,
+ 9083: 0x00007B84,
+ 9084: 0x00007CB9,
+ 9085: 0x00007CBD,
+ 9086: 0x00007CBE,
+ 9087: 0x00007DBB,
+ 9088: 0x00007DB0,
+ 9089: 0x00007D9C,
+ 9090: 0x00007DBD,
+ 9091: 0x00007DBE,
+ 9092: 0x00007DA0,
+ 9093: 0x00007DCA,
+ 9094: 0x00007DB4,
+ 9095: 0x00007DB2,
+ 9096: 0x00007DB1,
+ 9097: 0x00007DBA,
+ 9098: 0x00007DA2,
+ 9099: 0x00007DBF,
+ 9100: 0x00007DB5,
+ 9101: 0x00007DB8,
+ 9102: 0x00007DAD,
+ 9103: 0x00007DD2,
+ 9104: 0x00007DC7,
+ 9105: 0x00007DAC,
+ 9106: 0x00007F70,
+ 9107: 0x00007FE0,
+ 9108: 0x00007FE1,
+ 9109: 0x00007FDF,
+ 9110: 0x0000805E,
+ 9111: 0x0000805A,
+ 9112: 0x00008087,
+ 9113: 0x00008150,
+ 9114: 0x00008180,
+ 9115: 0x0000818F,
+ 9116: 0x00008188,
+ 9117: 0x0000818A,
+ 9118: 0x0000817F,
+ 9119: 0x00008182,
+ 9120: 0x000081E7,
+ 9121: 0x000081FA,
+ 9122: 0x00008207,
+ 9123: 0x00008214,
+ 9124: 0x0000821E,
+ 9125: 0x0000824B,
+ 9126: 0x000084C9,
+ 9127: 0x000084BF,
+ 9128: 0x000084C6,
+ 9129: 0x000084C4,
+ 9130: 0x00008499,
+ 9131: 0x0000849E,
+ 9132: 0x000084B2,
+ 9133: 0x0000849C,
+ 9134: 0x000084CB,
+ 9135: 0x000084B8,
+ 9136: 0x000084C0,
+ 9137: 0x000084D3,
+ 9138: 0x00008490,
+ 9139: 0x000084BC,
+ 9140: 0x000084D1,
+ 9141: 0x000084CA,
+ 9142: 0x0000873F,
+ 9143: 0x0000871C,
+ 9144: 0x0000873B,
+ 9145: 0x00008722,
+ 9146: 0x00008725,
+ 9147: 0x00008734,
+ 9148: 0x00008718,
+ 9149: 0x00008755,
+ 9150: 0x00008737,
+ 9151: 0x00008729,
+ 9152: 0x000088F3,
+ 9153: 0x00008902,
+ 9154: 0x000088F4,
+ 9155: 0x000088F9,
+ 9156: 0x000088F8,
+ 9157: 0x000088FD,
+ 9158: 0x000088E8,
+ 9159: 0x0000891A,
+ 9160: 0x000088EF,
+ 9161: 0x00008AA6,
+ 9162: 0x00008A8C,
+ 9163: 0x00008A9E,
+ 9164: 0x00008AA3,
+ 9165: 0x00008A8D,
+ 9166: 0x00008AA1,
+ 9167: 0x00008A93,
+ 9168: 0x00008AA4,
+ 9169: 0x00008AAA,
+ 9170: 0x00008AA5,
+ 9171: 0x00008AA8,
+ 9172: 0x00008A98,
+ 9173: 0x00008A91,
+ 9174: 0x00008A9A,
+ 9175: 0x00008AA7,
+ 9176: 0x00008C6A,
+ 9177: 0x00008C8D,
+ 9178: 0x00008C8C,
+ 9179: 0x00008CD3,
+ 9180: 0x00008CD1,
+ 9181: 0x00008CD2,
+ 9182: 0x00008D6B,
+ 9183: 0x00008D99,
+ 9184: 0x00008D95,
+ 9185: 0x00008DFC,
+ 9186: 0x00008F14,
+ 9187: 0x00008F12,
+ 9188: 0x00008F15,
+ 9189: 0x00008F13,
+ 9190: 0x00008FA3,
+ 9191: 0x00009060,
+ 9192: 0x00009058,
+ 9193: 0x0000905C,
+ 9194: 0x00009063,
+ 9195: 0x00009059,
+ 9196: 0x0000905E,
+ 9197: 0x00009062,
+ 9198: 0x0000905D,
+ 9199: 0x0000905B,
+ 9200: 0x00009119,
+ 9201: 0x00009118,
+ 9202: 0x0000911E,
+ 9203: 0x00009175,
+ 9204: 0x00009178,
+ 9205: 0x00009177,
+ 9206: 0x00009174,
+ 9207: 0x00009278,
+ 9208: 0x00009280,
+ 9209: 0x00009285,
+ 9210: 0x00009298,
+ 9211: 0x00009296,
+ 9212: 0x0000927B,
+ 9213: 0x00009293,
+ 9214: 0x0000929C,
+ 9215: 0x000092A8,
+ 9216: 0x0000927C,
+ 9217: 0x00009291,
+ 9218: 0x000095A1,
+ 9219: 0x000095A8,
+ 9220: 0x000095A9,
+ 9221: 0x000095A3,
+ 9222: 0x000095A5,
+ 9223: 0x000095A4,
+ 9224: 0x00009699,
+ 9225: 0x0000969C,
+ 9226: 0x0000969B,
+ 9227: 0x000096CC,
+ 9228: 0x000096D2,
+ 9229: 0x00009700,
+ 9230: 0x0000977C,
+ 9231: 0x00009785,
+ 9232: 0x000097F6,
+ 9233: 0x00009817,
+ 9234: 0x00009818,
+ 9235: 0x000098AF,
+ 9236: 0x000098B1,
+ 9237: 0x00009903,
+ 9238: 0x00009905,
+ 9239: 0x0000990C,
+ 9240: 0x00009909,
+ 9241: 0x000099C1,
+ 9242: 0x00009AAF,
+ 9243: 0x00009AB0,
+ 9244: 0x00009AE6,
+ 9245: 0x00009B41,
+ 9246: 0x00009B42,
+ 9247: 0x00009CF4,
+ 9248: 0x00009CF6,
+ 9249: 0x00009CF3,
+ 9250: 0x00009EBC,
+ 9251: 0x00009F3B,
+ 9252: 0x00009F4A,
+ 9253: 0x00005104,
+ 9254: 0x00005100,
+ 9255: 0x000050FB,
+ 9256: 0x000050F5,
+ 9257: 0x000050F9,
+ 9258: 0x00005102,
+ 9259: 0x00005108,
+ 9260: 0x00005109,
+ 9261: 0x00005105,
+ 9262: 0x000051DC,
+ 9263: 0x00005287,
+ 9264: 0x00005288,
+ 9265: 0x00005289,
+ 9266: 0x0000528D,
+ 9267: 0x0000528A,
+ 9268: 0x000052F0,
+ 9269: 0x000053B2,
+ 9270: 0x0000562E,
+ 9271: 0x0000563B,
+ 9272: 0x00005639,
+ 9273: 0x00005632,
+ 9274: 0x0000563F,
+ 9275: 0x00005634,
+ 9276: 0x00005629,
+ 9277: 0x00005653,
+ 9278: 0x0000564E,
+ 9279: 0x00005657,
+ 9280: 0x00005674,
+ 9281: 0x00005636,
+ 9282: 0x0000562F,
+ 9283: 0x00005630,
+ 9284: 0x00005880,
+ 9285: 0x0000589F,
+ 9286: 0x0000589E,
+ 9287: 0x000058B3,
+ 9288: 0x0000589C,
+ 9289: 0x000058AE,
+ 9290: 0x000058A9,
+ 9291: 0x000058A6,
+ 9292: 0x0000596D,
+ 9293: 0x00005B09,
+ 9294: 0x00005AFB,
+ 9295: 0x00005B0B,
+ 9296: 0x00005AF5,
+ 9297: 0x00005B0C,
+ 9298: 0x00005B08,
+ 9299: 0x00005BEE,
+ 9300: 0x00005BEC,
+ 9301: 0x00005BE9,
+ 9302: 0x00005BEB,
+ 9303: 0x00005C64,
+ 9304: 0x00005C65,
+ 9305: 0x00005D9D,
+ 9306: 0x00005D94,
+ 9307: 0x00005E62,
+ 9308: 0x00005E5F,
+ 9309: 0x00005E61,
+ 9310: 0x00005EE2,
+ 9311: 0x00005EDA,
+ 9312: 0x00005EDF,
+ 9313: 0x00005EDD,
+ 9314: 0x00005EE3,
+ 9315: 0x00005EE0,
+ 9316: 0x00005F48,
+ 9317: 0x00005F71,
+ 9318: 0x00005FB7,
+ 9319: 0x00005FB5,
+ 9320: 0x00006176,
+ 9321: 0x00006167,
+ 9322: 0x0000616E,
+ 9323: 0x0000615D,
+ 9324: 0x00006155,
+ 9325: 0x00006182,
+ 9326: 0x0000617C,
+ 9327: 0x00006170,
+ 9328: 0x0000616B,
+ 9329: 0x0000617E,
+ 9330: 0x000061A7,
+ 9331: 0x00006190,
+ 9332: 0x000061AB,
+ 9333: 0x0000618E,
+ 9334: 0x000061AC,
+ 9335: 0x0000619A,
+ 9336: 0x000061A4,
+ 9337: 0x00006194,
+ 9338: 0x000061AE,
+ 9339: 0x0000622E,
+ 9340: 0x00006469,
+ 9341: 0x0000646F,
+ 9342: 0x00006479,
+ 9343: 0x0000649E,
+ 9344: 0x000064B2,
+ 9345: 0x00006488,
+ 9346: 0x00006490,
+ 9347: 0x000064B0,
+ 9348: 0x000064A5,
+ 9349: 0x00006493,
+ 9350: 0x00006495,
+ 9351: 0x000064A9,
+ 9352: 0x00006492,
+ 9353: 0x000064AE,
+ 9354: 0x000064AD,
+ 9355: 0x000064AB,
+ 9356: 0x0000649A,
+ 9357: 0x000064AC,
+ 9358: 0x00006499,
+ 9359: 0x000064A2,
+ 9360: 0x000064B3,
+ 9361: 0x00006575,
+ 9362: 0x00006577,
+ 9363: 0x00006578,
+ 9364: 0x000066AE,
+ 9365: 0x000066AB,
+ 9366: 0x000066B4,
+ 9367: 0x000066B1,
+ 9368: 0x00006A23,
+ 9369: 0x00006A1F,
+ 9370: 0x000069E8,
+ 9371: 0x00006A01,
+ 9372: 0x00006A1E,
+ 9373: 0x00006A19,
+ 9374: 0x000069FD,
+ 9375: 0x00006A21,
+ 9376: 0x00006A13,
+ 9377: 0x00006A0A,
+ 9378: 0x000069F3,
+ 9379: 0x00006A02,
+ 9380: 0x00006A05,
+ 9381: 0x000069ED,
+ 9382: 0x00006A11,
+ 9383: 0x00006B50,
+ 9384: 0x00006B4E,
+ 9385: 0x00006BA4,
+ 9386: 0x00006BC5,
+ 9387: 0x00006BC6,
+ 9388: 0x00006F3F,
+ 9389: 0x00006F7C,
+ 9390: 0x00006F84,
+ 9391: 0x00006F51,
+ 9392: 0x00006F66,
+ 9393: 0x00006F54,
+ 9394: 0x00006F86,
+ 9395: 0x00006F6D,
+ 9396: 0x00006F5B,
+ 9397: 0x00006F78,
+ 9398: 0x00006F6E,
+ 9399: 0x00006F8E,
+ 9400: 0x00006F7A,
+ 9401: 0x00006F70,
+ 9402: 0x00006F64,
+ 9403: 0x00006F97,
+ 9404: 0x00006F58,
+ 9405: 0x00006ED5,
+ 9406: 0x00006F6F,
+ 9407: 0x00006F60,
+ 9408: 0x00006F5F,
+ 9409: 0x0000719F,
+ 9410: 0x000071AC,
+ 9411: 0x000071B1,
+ 9412: 0x000071A8,
+ 9413: 0x00007256,
+ 9414: 0x0000729B,
+ 9415: 0x0000734E,
+ 9416: 0x00007357,
+ 9417: 0x00007469,
+ 9418: 0x0000748B,
+ 9419: 0x00007483,
+ 9420: 0x0000747E,
+ 9421: 0x00007480,
+ 9422: 0x0000757F,
+ 9423: 0x00007620,
+ 9424: 0x00007629,
+ 9425: 0x0000761F,
+ 9426: 0x00007624,
+ 9427: 0x00007626,
+ 9428: 0x00007621,
+ 9429: 0x00007622,
+ 9430: 0x0000769A,
+ 9431: 0x000076BA,
+ 9432: 0x000076E4,
+ 9433: 0x0000778E,
+ 9434: 0x00007787,
+ 9435: 0x0000778C,
+ 9436: 0x00007791,
+ 9437: 0x0000778B,
+ 9438: 0x000078CB,
+ 9439: 0x000078C5,
+ 9440: 0x000078BA,
+ 9441: 0x000078CA,
+ 9442: 0x000078BE,
+ 9443: 0x000078D5,
+ 9444: 0x000078BC,
+ 9445: 0x000078D0,
+ 9446: 0x00007A3F,
+ 9447: 0x00007A3C,
+ 9448: 0x00007A40,
+ 9449: 0x00007A3D,
+ 9450: 0x00007A37,
+ 9451: 0x00007A3B,
+ 9452: 0x00007AAF,
+ 9453: 0x00007AAE,
+ 9454: 0x00007BAD,
+ 9455: 0x00007BB1,
+ 9456: 0x00007BC4,
+ 9457: 0x00007BB4,
+ 9458: 0x00007BC6,
+ 9459: 0x00007BC7,
+ 9460: 0x00007BC1,
+ 9461: 0x00007BA0,
+ 9462: 0x00007BCC,
+ 9463: 0x00007CCA,
+ 9464: 0x00007DE0,
+ 9465: 0x00007DF4,
+ 9466: 0x00007DEF,
+ 9467: 0x00007DFB,
+ 9468: 0x00007DD8,
+ 9469: 0x00007DEC,
+ 9470: 0x00007DDD,
+ 9471: 0x00007DE8,
+ 9472: 0x00007DE3,
+ 9473: 0x00007DDA,
+ 9474: 0x00007DDE,
+ 9475: 0x00007DE9,
+ 9476: 0x00007D9E,
+ 9477: 0x00007DD9,
+ 9478: 0x00007DF2,
+ 9479: 0x00007DF9,
+ 9480: 0x00007F75,
+ 9481: 0x00007F77,
+ 9482: 0x00007FAF,
+ 9483: 0x00007FE9,
+ 9484: 0x00008026,
+ 9485: 0x0000819B,
+ 9486: 0x0000819C,
+ 9487: 0x0000819D,
+ 9488: 0x000081A0,
+ 9489: 0x0000819A,
+ 9490: 0x00008198,
+ 9491: 0x00008517,
+ 9492: 0x0000853D,
+ 9493: 0x0000851A,
+ 9494: 0x000084EE,
+ 9495: 0x0000852C,
+ 9496: 0x0000852D,
+ 9497: 0x00008513,
+ 9498: 0x00008511,
+ 9499: 0x00008523,
+ 9500: 0x00008521,
+ 9501: 0x00008514,
+ 9502: 0x000084EC,
+ 9503: 0x00008525,
+ 9504: 0x000084FF,
+ 9505: 0x00008506,
+ 9506: 0x00008782,
+ 9507: 0x00008774,
+ 9508: 0x00008776,
+ 9509: 0x00008760,
+ 9510: 0x00008766,
+ 9511: 0x00008778,
+ 9512: 0x00008768,
+ 9513: 0x00008759,
+ 9514: 0x00008757,
+ 9515: 0x0000874C,
+ 9516: 0x00008753,
+ 9517: 0x0000885B,
+ 9518: 0x0000885D,
+ 9519: 0x00008910,
+ 9520: 0x00008907,
+ 9521: 0x00008912,
+ 9522: 0x00008913,
+ 9523: 0x00008915,
+ 9524: 0x0000890A,
+ 9525: 0x00008ABC,
+ 9526: 0x00008AD2,
+ 9527: 0x00008AC7,
+ 9528: 0x00008AC4,
+ 9529: 0x00008A95,
+ 9530: 0x00008ACB,
+ 9531: 0x00008AF8,
+ 9532: 0x00008AB2,
+ 9533: 0x00008AC9,
+ 9534: 0x00008AC2,
+ 9535: 0x00008ABF,
+ 9536: 0x00008AB0,
+ 9537: 0x00008AD6,
+ 9538: 0x00008ACD,
+ 9539: 0x00008AB6,
+ 9540: 0x00008AB9,
+ 9541: 0x00008ADB,
+ 9542: 0x00008C4C,
+ 9543: 0x00008C4E,
+ 9544: 0x00008C6C,
+ 9545: 0x00008CE0,
+ 9546: 0x00008CDE,
+ 9547: 0x00008CE6,
+ 9548: 0x00008CE4,
+ 9549: 0x00008CEC,
+ 9550: 0x00008CED,
+ 9551: 0x00008CE2,
+ 9552: 0x00008CE3,
+ 9553: 0x00008CDC,
+ 9554: 0x00008CEA,
+ 9555: 0x00008CE1,
+ 9556: 0x00008D6D,
+ 9557: 0x00008D9F,
+ 9558: 0x00008DA3,
+ 9559: 0x00008E2B,
+ 9560: 0x00008E10,
+ 9561: 0x00008E1D,
+ 9562: 0x00008E22,
+ 9563: 0x00008E0F,
+ 9564: 0x00008E29,
+ 9565: 0x00008E1F,
+ 9566: 0x00008E21,
+ 9567: 0x00008E1E,
+ 9568: 0x00008EBA,
+ 9569: 0x00008F1D,
+ 9570: 0x00008F1B,
+ 9571: 0x00008F1F,
+ 9572: 0x00008F29,
+ 9573: 0x00008F26,
+ 9574: 0x00008F2A,
+ 9575: 0x00008F1C,
+ 9576: 0x00008F1E,
+ 9577: 0x00008F25,
+ 9578: 0x00009069,
+ 9579: 0x0000906E,
+ 9580: 0x00009068,
+ 9581: 0x0000906D,
+ 9582: 0x00009077,
+ 9583: 0x00009130,
+ 9584: 0x0000912D,
+ 9585: 0x00009127,
+ 9586: 0x00009131,
+ 9587: 0x00009187,
+ 9588: 0x00009189,
+ 9589: 0x0000918B,
+ 9590: 0x00009183,
+ 9591: 0x000092C5,
+ 9592: 0x000092BB,
+ 9593: 0x000092B7,
+ 9594: 0x000092EA,
+ 9595: 0x000092AC,
+ 9596: 0x000092E4,
+ 9597: 0x000092C1,
+ 9598: 0x000092B3,
+ 9599: 0x000092BC,
+ 9600: 0x000092D2,
+ 9601: 0x000092C7,
+ 9602: 0x000092F0,
+ 9603: 0x000092B2,
+ 9604: 0x000095AD,
+ 9605: 0x000095B1,
+ 9606: 0x00009704,
+ 9607: 0x00009706,
+ 9608: 0x00009707,
+ 9609: 0x00009709,
+ 9610: 0x00009760,
+ 9611: 0x0000978D,
+ 9612: 0x0000978B,
+ 9613: 0x0000978F,
+ 9614: 0x00009821,
+ 9615: 0x0000982B,
+ 9616: 0x0000981C,
+ 9617: 0x000098B3,
+ 9618: 0x0000990A,
+ 9619: 0x00009913,
+ 9620: 0x00009912,
+ 9621: 0x00009918,
+ 9622: 0x000099DD,
+ 9623: 0x000099D0,
+ 9624: 0x000099DF,
+ 9625: 0x000099DB,
+ 9626: 0x000099D1,
+ 9627: 0x000099D5,
+ 9628: 0x000099D2,
+ 9629: 0x000099D9,
+ 9630: 0x00009AB7,
+ 9631: 0x00009AEE,
+ 9632: 0x00009AEF,
+ 9633: 0x00009B27,
+ 9634: 0x00009B45,
+ 9635: 0x00009B44,
+ 9636: 0x00009B77,
+ 9637: 0x00009B6F,
+ 9638: 0x00009D06,
+ 9639: 0x00009D09,
+ 9640: 0x00009D03,
+ 9641: 0x00009EA9,
+ 9642: 0x00009EBE,
+ 9643: 0x00009ECE,
+ 9644: 0x000058A8,
+ 9645: 0x00009F52,
+ 9646: 0x00005112,
+ 9647: 0x00005118,
+ 9648: 0x00005114,
+ 9649: 0x00005110,
+ 9650: 0x00005115,
+ 9651: 0x00005180,
+ 9652: 0x000051AA,
+ 9653: 0x000051DD,
+ 9654: 0x00005291,
+ 9655: 0x00005293,
+ 9656: 0x000052F3,
+ 9657: 0x00005659,
+ 9658: 0x0000566B,
+ 9659: 0x00005679,
+ 9660: 0x00005669,
+ 9661: 0x00005664,
+ 9662: 0x00005678,
+ 9663: 0x0000566A,
+ 9664: 0x00005668,
+ 9665: 0x00005665,
+ 9666: 0x00005671,
+ 9667: 0x0000566F,
+ 9668: 0x0000566C,
+ 9669: 0x00005662,
+ 9670: 0x00005676,
+ 9671: 0x000058C1,
+ 9672: 0x000058BE,
+ 9673: 0x000058C7,
+ 9674: 0x000058C5,
+ 9675: 0x0000596E,
+ 9676: 0x00005B1D,
+ 9677: 0x00005B34,
+ 9678: 0x00005B78,
+ 9679: 0x00005BF0,
+ 9680: 0x00005C0E,
+ 9681: 0x00005F4A,
+ 9682: 0x000061B2,
+ 9683: 0x00006191,
+ 9684: 0x000061A9,
+ 9685: 0x0000618A,
+ 9686: 0x000061CD,
+ 9687: 0x000061B6,
+ 9688: 0x000061BE,
+ 9689: 0x000061CA,
+ 9690: 0x000061C8,
+ 9691: 0x00006230,
+ 9692: 0x000064C5,
+ 9693: 0x000064C1,
+ 9694: 0x000064CB,
+ 9695: 0x000064BB,
+ 9696: 0x000064BC,
+ 9697: 0x000064DA,
+ 9698: 0x000064C4,
+ 9699: 0x000064C7,
+ 9700: 0x000064C2,
+ 9701: 0x000064CD,
+ 9702: 0x000064BF,
+ 9703: 0x000064D2,
+ 9704: 0x000064D4,
+ 9705: 0x000064BE,
+ 9706: 0x00006574,
+ 9707: 0x000066C6,
+ 9708: 0x000066C9,
+ 9709: 0x000066B9,
+ 9710: 0x000066C4,
+ 9711: 0x000066C7,
+ 9712: 0x000066B8,
+ 9713: 0x00006A3D,
+ 9714: 0x00006A38,
+ 9715: 0x00006A3A,
+ 9716: 0x00006A59,
+ 9717: 0x00006A6B,
+ 9718: 0x00006A58,
+ 9719: 0x00006A39,
+ 9720: 0x00006A44,
+ 9721: 0x00006A62,
+ 9722: 0x00006A61,
+ 9723: 0x00006A4B,
+ 9724: 0x00006A47,
+ 9725: 0x00006A35,
+ 9726: 0x00006A5F,
+ 9727: 0x00006A48,
+ 9728: 0x00006B59,
+ 9729: 0x00006B77,
+ 9730: 0x00006C05,
+ 9731: 0x00006FC2,
+ 9732: 0x00006FB1,
+ 9733: 0x00006FA1,
+ 9734: 0x00006FC3,
+ 9735: 0x00006FA4,
+ 9736: 0x00006FC1,
+ 9737: 0x00006FA7,
+ 9738: 0x00006FB3,
+ 9739: 0x00006FC0,
+ 9740: 0x00006FB9,
+ 9741: 0x00006FB6,
+ 9742: 0x00006FA6,
+ 9743: 0x00006FA0,
+ 9744: 0x00006FB4,
+ 9745: 0x000071BE,
+ 9746: 0x000071C9,
+ 9747: 0x000071D0,
+ 9748: 0x000071D2,
+ 9749: 0x000071C8,
+ 9750: 0x000071D5,
+ 9751: 0x000071B9,
+ 9752: 0x000071CE,
+ 9753: 0x000071D9,
+ 9754: 0x000071DC,
+ 9755: 0x000071C3,
+ 9756: 0x000071C4,
+ 9757: 0x00007368,
+ 9758: 0x0000749C,
+ 9759: 0x000074A3,
+ 9760: 0x00007498,
+ 9761: 0x0000749F,
+ 9762: 0x0000749E,
+ 9763: 0x000074E2,
+ 9764: 0x0000750C,
+ 9765: 0x0000750D,
+ 9766: 0x00007634,
+ 9767: 0x00007638,
+ 9768: 0x0000763A,
+ 9769: 0x000076E7,
+ 9770: 0x000076E5,
+ 9771: 0x000077A0,
+ 9772: 0x0000779E,
+ 9773: 0x0000779F,
+ 9774: 0x000077A5,
+ 9775: 0x000078E8,
+ 9776: 0x000078DA,
+ 9777: 0x000078EC,
+ 9778: 0x000078E7,
+ 9779: 0x000079A6,
+ 9780: 0x00007A4D,
+ 9781: 0x00007A4E,
+ 9782: 0x00007A46,
+ 9783: 0x00007A4C,
+ 9784: 0x00007A4B,
+ 9785: 0x00007ABA,
+ 9786: 0x00007BD9,
+ 9787: 0x00007C11,
+ 9788: 0x00007BC9,
+ 9789: 0x00007BE4,
+ 9790: 0x00007BDB,
+ 9791: 0x00007BE1,
+ 9792: 0x00007BE9,
+ 9793: 0x00007BE6,
+ 9794: 0x00007CD5,
+ 9795: 0x00007CD6,
+ 9796: 0x00007E0A,
+ 9797: 0x00007E11,
+ 9798: 0x00007E08,
+ 9799: 0x00007E1B,
+ 9800: 0x00007E23,
+ 9801: 0x00007E1E,
+ 9802: 0x00007E1D,
+ 9803: 0x00007E09,
+ 9804: 0x00007E10,
+ 9805: 0x00007F79,
+ 9806: 0x00007FB2,
+ 9807: 0x00007FF0,
+ 9808: 0x00007FF1,
+ 9809: 0x00007FEE,
+ 9810: 0x00008028,
+ 9811: 0x000081B3,
+ 9812: 0x000081A9,
+ 9813: 0x000081A8,
+ 9814: 0x000081FB,
+ 9815: 0x00008208,
+ 9816: 0x00008258,
+ 9817: 0x00008259,
+ 9818: 0x0000854A,
+ 9819: 0x00008559,
+ 9820: 0x00008548,
+ 9821: 0x00008568,
+ 9822: 0x00008569,
+ 9823: 0x00008543,
+ 9824: 0x00008549,
+ 9825: 0x0000856D,
+ 9826: 0x0000856A,
+ 9827: 0x0000855E,
+ 9828: 0x00008783,
+ 9829: 0x0000879F,
+ 9830: 0x0000879E,
+ 9831: 0x000087A2,
+ 9832: 0x0000878D,
+ 9833: 0x00008861,
+ 9834: 0x0000892A,
+ 9835: 0x00008932,
+ 9836: 0x00008925,
+ 9837: 0x0000892B,
+ 9838: 0x00008921,
+ 9839: 0x000089AA,
+ 9840: 0x000089A6,
+ 9841: 0x00008AE6,
+ 9842: 0x00008AFA,
+ 9843: 0x00008AEB,
+ 9844: 0x00008AF1,
+ 9845: 0x00008B00,
+ 9846: 0x00008ADC,
+ 9847: 0x00008AE7,
+ 9848: 0x00008AEE,
+ 9849: 0x00008AFE,
+ 9850: 0x00008B01,
+ 9851: 0x00008B02,
+ 9852: 0x00008AF7,
+ 9853: 0x00008AED,
+ 9854: 0x00008AF3,
+ 9855: 0x00008AF6,
+ 9856: 0x00008AFC,
+ 9857: 0x00008C6B,
+ 9858: 0x00008C6D,
+ 9859: 0x00008C93,
+ 9860: 0x00008CF4,
+ 9861: 0x00008E44,
+ 9862: 0x00008E31,
+ 9863: 0x00008E34,
+ 9864: 0x00008E42,
+ 9865: 0x00008E39,
+ 9866: 0x00008E35,
+ 9867: 0x00008F3B,
+ 9868: 0x00008F2F,
+ 9869: 0x00008F38,
+ 9870: 0x00008F33,
+ 9871: 0x00008FA8,
+ 9872: 0x00008FA6,
+ 9873: 0x00009075,
+ 9874: 0x00009074,
+ 9875: 0x00009078,
+ 9876: 0x00009072,
+ 9877: 0x0000907C,
+ 9878: 0x0000907A,
+ 9879: 0x00009134,
+ 9880: 0x00009192,
+ 9881: 0x00009320,
+ 9882: 0x00009336,
+ 9883: 0x000092F8,
+ 9884: 0x00009333,
+ 9885: 0x0000932F,
+ 9886: 0x00009322,
+ 9887: 0x000092FC,
+ 9888: 0x0000932B,
+ 9889: 0x00009304,
+ 9890: 0x0000931A,
+ 9891: 0x00009310,
+ 9892: 0x00009326,
+ 9893: 0x00009321,
+ 9894: 0x00009315,
+ 9895: 0x0000932E,
+ 9896: 0x00009319,
+ 9897: 0x000095BB,
+ 9898: 0x000096A7,
+ 9899: 0x000096A8,
+ 9900: 0x000096AA,
+ 9901: 0x000096D5,
+ 9902: 0x0000970E,
+ 9903: 0x00009711,
+ 9904: 0x00009716,
+ 9905: 0x0000970D,
+ 9906: 0x00009713,
+ 9907: 0x0000970F,
+ 9908: 0x0000975B,
+ 9909: 0x0000975C,
+ 9910: 0x00009766,
+ 9911: 0x00009798,
+ 9912: 0x00009830,
+ 9913: 0x00009838,
+ 9914: 0x0000983B,
+ 9915: 0x00009837,
+ 9916: 0x0000982D,
+ 9917: 0x00009839,
+ 9918: 0x00009824,
+ 9919: 0x00009910,
+ 9920: 0x00009928,
+ 9921: 0x0000991E,
+ 9922: 0x0000991B,
+ 9923: 0x00009921,
+ 9924: 0x0000991A,
+ 9925: 0x000099ED,
+ 9926: 0x000099E2,
+ 9927: 0x000099F1,
+ 9928: 0x00009AB8,
+ 9929: 0x00009ABC,
+ 9930: 0x00009AFB,
+ 9931: 0x00009AED,
+ 9932: 0x00009B28,
+ 9933: 0x00009B91,
+ 9934: 0x00009D15,
+ 9935: 0x00009D23,
+ 9936: 0x00009D26,
+ 9937: 0x00009D28,
+ 9938: 0x00009D12,
+ 9939: 0x00009D1B,
+ 9940: 0x00009ED8,
+ 9941: 0x00009ED4,
+ 9942: 0x00009F8D,
+ 9943: 0x00009F9C,
+ 9944: 0x0000512A,
+ 9945: 0x0000511F,
+ 9946: 0x00005121,
+ 9947: 0x00005132,
+ 9948: 0x000052F5,
+ 9949: 0x0000568E,
+ 9950: 0x00005680,
+ 9951: 0x00005690,
+ 9952: 0x00005685,
+ 9953: 0x00005687,
+ 9954: 0x0000568F,
+ 9955: 0x000058D5,
+ 9956: 0x000058D3,
+ 9957: 0x000058D1,
+ 9958: 0x000058CE,
+ 9959: 0x00005B30,
+ 9960: 0x00005B2A,
+ 9961: 0x00005B24,
+ 9962: 0x00005B7A,
+ 9963: 0x00005C37,
+ 9964: 0x00005C68,
+ 9965: 0x00005DBC,
+ 9966: 0x00005DBA,
+ 9967: 0x00005DBD,
+ 9968: 0x00005DB8,
+ 9969: 0x00005E6B,
+ 9970: 0x00005F4C,
+ 9971: 0x00005FBD,
+ 9972: 0x000061C9,
+ 9973: 0x000061C2,
+ 9974: 0x000061C7,
+ 9975: 0x000061E6,
+ 9976: 0x000061CB,
+ 9977: 0x00006232,
+ 9978: 0x00006234,
+ 9979: 0x000064CE,
+ 9980: 0x000064CA,
+ 9981: 0x000064D8,
+ 9982: 0x000064E0,
+ 9983: 0x000064F0,
+ 9984: 0x000064E6,
+ 9985: 0x000064EC,
+ 9986: 0x000064F1,
+ 9987: 0x000064E2,
+ 9988: 0x000064ED,
+ 9989: 0x00006582,
+ 9990: 0x00006583,
+ 9991: 0x000066D9,
+ 9992: 0x000066D6,
+ 9993: 0x00006A80,
+ 9994: 0x00006A94,
+ 9995: 0x00006A84,
+ 9996: 0x00006AA2,
+ 9997: 0x00006A9C,
+ 9998: 0x00006ADB,
+ 9999: 0x00006AA3,
+ 10000: 0x00006A7E,
+ 10001: 0x00006A97,
+ 10002: 0x00006A90,
+ 10003: 0x00006AA0,
+ 10004: 0x00006B5C,
+ 10005: 0x00006BAE,
+ 10006: 0x00006BDA,
+ 10007: 0x00006C08,
+ 10008: 0x00006FD8,
+ 10009: 0x00006FF1,
+ 10010: 0x00006FDF,
+ 10011: 0x00006FE0,
+ 10012: 0x00006FDB,
+ 10013: 0x00006FE4,
+ 10014: 0x00006FEB,
+ 10015: 0x00006FEF,
+ 10016: 0x00006F80,
+ 10017: 0x00006FEC,
+ 10018: 0x00006FE1,
+ 10019: 0x00006FE9,
+ 10020: 0x00006FD5,
+ 10021: 0x00006FEE,
+ 10022: 0x00006FF0,
+ 10023: 0x000071E7,
+ 10024: 0x000071DF,
+ 10025: 0x000071EE,
+ 10026: 0x000071E6,
+ 10027: 0x000071E5,
+ 10028: 0x000071ED,
+ 10029: 0x000071EC,
+ 10030: 0x000071F4,
+ 10031: 0x000071E0,
+ 10032: 0x00007235,
+ 10033: 0x00007246,
+ 10034: 0x00007370,
+ 10035: 0x00007372,
+ 10036: 0x000074A9,
+ 10037: 0x000074B0,
+ 10038: 0x000074A6,
+ 10039: 0x000074A8,
+ 10040: 0x00007646,
+ 10041: 0x00007642,
+ 10042: 0x0000764C,
+ 10043: 0x000076EA,
+ 10044: 0x000077B3,
+ 10045: 0x000077AA,
+ 10046: 0x000077B0,
+ 10047: 0x000077AC,
+ 10048: 0x000077A7,
+ 10049: 0x000077AD,
+ 10050: 0x000077EF,
+ 10051: 0x000078F7,
+ 10052: 0x000078FA,
+ 10053: 0x000078F4,
+ 10054: 0x000078EF,
+ 10055: 0x00007901,
+ 10056: 0x000079A7,
+ 10057: 0x000079AA,
+ 10058: 0x00007A57,
+ 10059: 0x00007ABF,
+ 10060: 0x00007C07,
+ 10061: 0x00007C0D,
+ 10062: 0x00007BFE,
+ 10063: 0x00007BF7,
+ 10064: 0x00007C0C,
+ 10065: 0x00007BE0,
+ 10066: 0x00007CE0,
+ 10067: 0x00007CDC,
+ 10068: 0x00007CDE,
+ 10069: 0x00007CE2,
+ 10070: 0x00007CDF,
+ 10071: 0x00007CD9,
+ 10072: 0x00007CDD,
+ 10073: 0x00007E2E,
+ 10074: 0x00007E3E,
+ 10075: 0x00007E46,
+ 10076: 0x00007E37,
+ 10077: 0x00007E32,
+ 10078: 0x00007E43,
+ 10079: 0x00007E2B,
+ 10080: 0x00007E3D,
+ 10081: 0x00007E31,
+ 10082: 0x00007E45,
+ 10083: 0x00007E41,
+ 10084: 0x00007E34,
+ 10085: 0x00007E39,
+ 10086: 0x00007E48,
+ 10087: 0x00007E35,
+ 10088: 0x00007E3F,
+ 10089: 0x00007E2F,
+ 10090: 0x00007F44,
+ 10091: 0x00007FF3,
+ 10092: 0x00007FFC,
+ 10093: 0x00008071,
+ 10094: 0x00008072,
+ 10095: 0x00008070,
+ 10096: 0x0000806F,
+ 10097: 0x00008073,
+ 10098: 0x000081C6,
+ 10099: 0x000081C3,
+ 10100: 0x000081BA,
+ 10101: 0x000081C2,
+ 10102: 0x000081C0,
+ 10103: 0x000081BF,
+ 10104: 0x000081BD,
+ 10105: 0x000081C9,
+ 10106: 0x000081BE,
+ 10107: 0x000081E8,
+ 10108: 0x00008209,
+ 10109: 0x00008271,
+ 10110: 0x000085AA,
+ 10111: 0x00008584,
+ 10112: 0x0000857E,
+ 10113: 0x0000859C,
+ 10114: 0x00008591,
+ 10115: 0x00008594,
+ 10116: 0x000085AF,
+ 10117: 0x0000859B,
+ 10118: 0x00008587,
+ 10119: 0x000085A8,
+ 10120: 0x0000858A,
+ 10121: 0x00008667,
+ 10122: 0x000087C0,
+ 10123: 0x000087D1,
+ 10124: 0x000087B3,
+ 10125: 0x000087D2,
+ 10126: 0x000087C6,
+ 10127: 0x000087AB,
+ 10128: 0x000087BB,
+ 10129: 0x000087BA,
+ 10130: 0x000087C8,
+ 10131: 0x000087CB,
+ 10132: 0x0000893B,
+ 10133: 0x00008936,
+ 10134: 0x00008944,
+ 10135: 0x00008938,
+ 10136: 0x0000893D,
+ 10137: 0x000089AC,
+ 10138: 0x00008B0E,
+ 10139: 0x00008B17,
+ 10140: 0x00008B19,
+ 10141: 0x00008B1B,
+ 10142: 0x00008B0A,
+ 10143: 0x00008B20,
+ 10144: 0x00008B1D,
+ 10145: 0x00008B04,
+ 10146: 0x00008B10,
+ 10147: 0x00008C41,
+ 10148: 0x00008C3F,
+ 10149: 0x00008C73,
+ 10150: 0x00008CFA,
+ 10151: 0x00008CFD,
+ 10152: 0x00008CFC,
+ 10153: 0x00008CF8,
+ 10154: 0x00008CFB,
+ 10155: 0x00008DA8,
+ 10156: 0x00008E49,
+ 10157: 0x00008E4B,
+ 10158: 0x00008E48,
+ 10159: 0x00008E4A,
+ 10160: 0x00008F44,
+ 10161: 0x00008F3E,
+ 10162: 0x00008F42,
+ 10163: 0x00008F45,
+ 10164: 0x00008F3F,
+ 10165: 0x0000907F,
+ 10166: 0x0000907D,
+ 10167: 0x00009084,
+ 10168: 0x00009081,
+ 10169: 0x00009082,
+ 10170: 0x00009080,
+ 10171: 0x00009139,
+ 10172: 0x000091A3,
+ 10173: 0x0000919E,
+ 10174: 0x0000919C,
+ 10175: 0x0000934D,
+ 10176: 0x00009382,
+ 10177: 0x00009328,
+ 10178: 0x00009375,
+ 10179: 0x0000934A,
+ 10180: 0x00009365,
+ 10181: 0x0000934B,
+ 10182: 0x00009318,
+ 10183: 0x0000937E,
+ 10184: 0x0000936C,
+ 10185: 0x0000935B,
+ 10186: 0x00009370,
+ 10187: 0x0000935A,
+ 10188: 0x00009354,
+ 10189: 0x000095CA,
+ 10190: 0x000095CB,
+ 10191: 0x000095CC,
+ 10192: 0x000095C8,
+ 10193: 0x000095C6,
+ 10194: 0x000096B1,
+ 10195: 0x000096B8,
+ 10196: 0x000096D6,
+ 10197: 0x0000971C,
+ 10198: 0x0000971E,
+ 10199: 0x000097A0,
+ 10200: 0x000097D3,
+ 10201: 0x00009846,
+ 10202: 0x000098B6,
+ 10203: 0x00009935,
+ 10204: 0x00009A01,
+ 10205: 0x000099FF,
+ 10206: 0x00009BAE,
+ 10207: 0x00009BAB,
+ 10208: 0x00009BAA,
+ 10209: 0x00009BAD,
+ 10210: 0x00009D3B,
+ 10211: 0x00009D3F,
+ 10212: 0x00009E8B,
+ 10213: 0x00009ECF,
+ 10214: 0x00009EDE,
+ 10215: 0x00009EDC,
+ 10216: 0x00009EDD,
+ 10217: 0x00009EDB,
+ 10218: 0x00009F3E,
+ 10219: 0x00009F4B,
+ 10220: 0x000053E2,
+ 10221: 0x00005695,
+ 10222: 0x000056AE,
+ 10223: 0x000058D9,
+ 10224: 0x000058D8,
+ 10225: 0x00005B38,
+ 10226: 0x00005F5D,
+ 10227: 0x000061E3,
+ 10228: 0x00006233,
+ 10229: 0x000064F4,
+ 10230: 0x000064F2,
+ 10231: 0x000064FE,
+ 10232: 0x00006506,
+ 10233: 0x000064FA,
+ 10234: 0x000064FB,
+ 10235: 0x000064F7,
+ 10236: 0x000065B7,
+ 10237: 0x000066DC,
+ 10238: 0x00006726,
+ 10239: 0x00006AB3,
+ 10240: 0x00006AAC,
+ 10241: 0x00006AC3,
+ 10242: 0x00006ABB,
+ 10243: 0x00006AB8,
+ 10244: 0x00006AC2,
+ 10245: 0x00006AAE,
+ 10246: 0x00006AAF,
+ 10247: 0x00006B5F,
+ 10248: 0x00006B78,
+ 10249: 0x00006BAF,
+ 10250: 0x00007009,
+ 10251: 0x0000700B,
+ 10252: 0x00006FFE,
+ 10253: 0x00007006,
+ 10254: 0x00006FFA,
+ 10255: 0x00007011,
+ 10256: 0x0000700F,
+ 10257: 0x000071FB,
+ 10258: 0x000071FC,
+ 10259: 0x000071FE,
+ 10260: 0x000071F8,
+ 10261: 0x00007377,
+ 10262: 0x00007375,
+ 10263: 0x000074A7,
+ 10264: 0x000074BF,
+ 10265: 0x00007515,
+ 10266: 0x00007656,
+ 10267: 0x00007658,
+ 10268: 0x00007652,
+ 10269: 0x000077BD,
+ 10270: 0x000077BF,
+ 10271: 0x000077BB,
+ 10272: 0x000077BC,
+ 10273: 0x0000790E,
+ 10274: 0x000079AE,
+ 10275: 0x00007A61,
+ 10276: 0x00007A62,
+ 10277: 0x00007A60,
+ 10278: 0x00007AC4,
+ 10279: 0x00007AC5,
+ 10280: 0x00007C2B,
+ 10281: 0x00007C27,
+ 10282: 0x00007C2A,
+ 10283: 0x00007C1E,
+ 10284: 0x00007C23,
+ 10285: 0x00007C21,
+ 10286: 0x00007CE7,
+ 10287: 0x00007E54,
+ 10288: 0x00007E55,
+ 10289: 0x00007E5E,
+ 10290: 0x00007E5A,
+ 10291: 0x00007E61,
+ 10292: 0x00007E52,
+ 10293: 0x00007E59,
+ 10294: 0x00007F48,
+ 10295: 0x00007FF9,
+ 10296: 0x00007FFB,
+ 10297: 0x00008077,
+ 10298: 0x00008076,
+ 10299: 0x000081CD,
+ 10300: 0x000081CF,
+ 10301: 0x0000820A,
+ 10302: 0x000085CF,
+ 10303: 0x000085A9,
+ 10304: 0x000085CD,
+ 10305: 0x000085D0,
+ 10306: 0x000085C9,
+ 10307: 0x000085B0,
+ 10308: 0x000085BA,
+ 10309: 0x000085B9,
+ 10310: 0x000085A6,
+ 10311: 0x000087EF,
+ 10312: 0x000087EC,
+ 10313: 0x000087F2,
+ 10314: 0x000087E0,
+ 10315: 0x00008986,
+ 10316: 0x000089B2,
+ 10317: 0x000089F4,
+ 10318: 0x00008B28,
+ 10319: 0x00008B39,
+ 10320: 0x00008B2C,
+ 10321: 0x00008B2B,
+ 10322: 0x00008C50,
+ 10323: 0x00008D05,
+ 10324: 0x00008E59,
+ 10325: 0x00008E63,
+ 10326: 0x00008E66,
+ 10327: 0x00008E64,
+ 10328: 0x00008E5F,
+ 10329: 0x00008E55,
+ 10330: 0x00008EC0,
+ 10331: 0x00008F49,
+ 10332: 0x00008F4D,
+ 10333: 0x00009087,
+ 10334: 0x00009083,
+ 10335: 0x00009088,
+ 10336: 0x000091AB,
+ 10337: 0x000091AC,
+ 10338: 0x000091D0,
+ 10339: 0x00009394,
+ 10340: 0x0000938A,
+ 10341: 0x00009396,
+ 10342: 0x000093A2,
+ 10343: 0x000093B3,
+ 10344: 0x000093AE,
+ 10345: 0x000093AC,
+ 10346: 0x000093B0,
+ 10347: 0x00009398,
+ 10348: 0x0000939A,
+ 10349: 0x00009397,
+ 10350: 0x000095D4,
+ 10351: 0x000095D6,
+ 10352: 0x000095D0,
+ 10353: 0x000095D5,
+ 10354: 0x000096E2,
+ 10355: 0x000096DC,
+ 10356: 0x000096D9,
+ 10357: 0x000096DB,
+ 10358: 0x000096DE,
+ 10359: 0x00009724,
+ 10360: 0x000097A3,
+ 10361: 0x000097A6,
+ 10362: 0x000097AD,
+ 10363: 0x000097F9,
+ 10364: 0x0000984D,
+ 10365: 0x0000984F,
+ 10366: 0x0000984C,
+ 10367: 0x0000984E,
+ 10368: 0x00009853,
+ 10369: 0x000098BA,
+ 10370: 0x0000993E,
+ 10371: 0x0000993F,
+ 10372: 0x0000993D,
+ 10373: 0x0000992E,
+ 10374: 0x000099A5,
+ 10375: 0x00009A0E,
+ 10376: 0x00009AC1,
+ 10377: 0x00009B03,
+ 10378: 0x00009B06,
+ 10379: 0x00009B4F,
+ 10380: 0x00009B4E,
+ 10381: 0x00009B4D,
+ 10382: 0x00009BCA,
+ 10383: 0x00009BC9,
+ 10384: 0x00009BFD,
+ 10385: 0x00009BC8,
+ 10386: 0x00009BC0,
+ 10387: 0x00009D51,
+ 10388: 0x00009D5D,
+ 10389: 0x00009D60,
+ 10390: 0x00009EE0,
+ 10391: 0x00009F15,
+ 10392: 0x00009F2C,
+ 10393: 0x00005133,
+ 10394: 0x000056A5,
+ 10395: 0x000058DE,
+ 10396: 0x000058DF,
+ 10397: 0x000058E2,
+ 10398: 0x00005BF5,
+ 10399: 0x00009F90,
+ 10400: 0x00005EEC,
+ 10401: 0x000061F2,
+ 10402: 0x000061F7,
+ 10403: 0x000061F6,
+ 10404: 0x000061F5,
+ 10405: 0x00006500,
+ 10406: 0x0000650F,
+ 10407: 0x000066E0,
+ 10408: 0x000066DD,
+ 10409: 0x00006AE5,
+ 10410: 0x00006ADD,
+ 10411: 0x00006ADA,
+ 10412: 0x00006AD3,
+ 10413: 0x0000701B,
+ 10414: 0x0000701F,
+ 10415: 0x00007028,
+ 10416: 0x0000701A,
+ 10417: 0x0000701D,
+ 10418: 0x00007015,
+ 10419: 0x00007018,
+ 10420: 0x00007206,
+ 10421: 0x0000720D,
+ 10422: 0x00007258,
+ 10423: 0x000072A2,
+ 10424: 0x00007378,
+ 10425: 0x0000737A,
+ 10426: 0x000074BD,
+ 10427: 0x000074CA,
+ 10428: 0x000074E3,
+ 10429: 0x00007587,
+ 10430: 0x00007586,
+ 10431: 0x0000765F,
+ 10432: 0x00007661,
+ 10433: 0x000077C7,
+ 10434: 0x00007919,
+ 10435: 0x000079B1,
+ 10436: 0x00007A6B,
+ 10437: 0x00007A69,
+ 10438: 0x00007C3E,
+ 10439: 0x00007C3F,
+ 10440: 0x00007C38,
+ 10441: 0x00007C3D,
+ 10442: 0x00007C37,
+ 10443: 0x00007C40,
+ 10444: 0x00007E6B,
+ 10445: 0x00007E6D,
+ 10446: 0x00007E79,
+ 10447: 0x00007E69,
+ 10448: 0x00007E6A,
+ 10449: 0x00007F85,
+ 10450: 0x00007E73,
+ 10451: 0x00007FB6,
+ 10452: 0x00007FB9,
+ 10453: 0x00007FB8,
+ 10454: 0x000081D8,
+ 10455: 0x000085E9,
+ 10456: 0x000085DD,
+ 10457: 0x000085EA,
+ 10458: 0x000085D5,
+ 10459: 0x000085E4,
+ 10460: 0x000085E5,
+ 10461: 0x000085F7,
+ 10462: 0x000087FB,
+ 10463: 0x00008805,
+ 10464: 0x0000880D,
+ 10465: 0x000087F9,
+ 10466: 0x000087FE,
+ 10467: 0x00008960,
+ 10468: 0x0000895F,
+ 10469: 0x00008956,
+ 10470: 0x0000895E,
+ 10471: 0x00008B41,
+ 10472: 0x00008B5C,
+ 10473: 0x00008B58,
+ 10474: 0x00008B49,
+ 10475: 0x00008B5A,
+ 10476: 0x00008B4E,
+ 10477: 0x00008B4F,
+ 10478: 0x00008B46,
+ 10479: 0x00008B59,
+ 10480: 0x00008D08,
+ 10481: 0x00008D0A,
+ 10482: 0x00008E7C,
+ 10483: 0x00008E72,
+ 10484: 0x00008E87,
+ 10485: 0x00008E76,
+ 10486: 0x00008E6C,
+ 10487: 0x00008E7A,
+ 10488: 0x00008E74,
+ 10489: 0x00008F54,
+ 10490: 0x00008F4E,
+ 10491: 0x00008FAD,
+ 10492: 0x0000908A,
+ 10493: 0x0000908B,
+ 10494: 0x000091B1,
+ 10495: 0x000091AE,
+ 10496: 0x000093E1,
+ 10497: 0x000093D1,
+ 10498: 0x000093DF,
+ 10499: 0x000093C3,
+ 10500: 0x000093C8,
+ 10501: 0x000093DC,
+ 10502: 0x000093DD,
+ 10503: 0x000093D6,
+ 10504: 0x000093E2,
+ 10505: 0x000093CD,
+ 10506: 0x000093D8,
+ 10507: 0x000093E4,
+ 10508: 0x000093D7,
+ 10509: 0x000093E8,
+ 10510: 0x000095DC,
+ 10511: 0x000096B4,
+ 10512: 0x000096E3,
+ 10513: 0x0000972A,
+ 10514: 0x00009727,
+ 10515: 0x00009761,
+ 10516: 0x000097DC,
+ 10517: 0x000097FB,
+ 10518: 0x0000985E,
+ 10519: 0x00009858,
+ 10520: 0x0000985B,
+ 10521: 0x000098BC,
+ 10522: 0x00009945,
+ 10523: 0x00009949,
+ 10524: 0x00009A16,
+ 10525: 0x00009A19,
+ 10526: 0x00009B0D,
+ 10527: 0x00009BE8,
+ 10528: 0x00009BE7,
+ 10529: 0x00009BD6,
+ 10530: 0x00009BDB,
+ 10531: 0x00009D89,
+ 10532: 0x00009D61,
+ 10533: 0x00009D72,
+ 10534: 0x00009D6A,
+ 10535: 0x00009D6C,
+ 10536: 0x00009E92,
+ 10537: 0x00009E97,
+ 10538: 0x00009E93,
+ 10539: 0x00009EB4,
+ 10540: 0x000052F8,
+ 10541: 0x000056A8,
+ 10542: 0x000056B7,
+ 10543: 0x000056B6,
+ 10544: 0x000056B4,
+ 10545: 0x000056BC,
+ 10546: 0x000058E4,
+ 10547: 0x00005B40,
+ 10548: 0x00005B43,
+ 10549: 0x00005B7D,
+ 10550: 0x00005BF6,
+ 10551: 0x00005DC9,
+ 10552: 0x000061F8,
+ 10553: 0x000061FA,
+ 10554: 0x00006518,
+ 10555: 0x00006514,
+ 10556: 0x00006519,
+ 10557: 0x000066E6,
+ 10558: 0x00006727,
+ 10559: 0x00006AEC,
+ 10560: 0x0000703E,
+ 10561: 0x00007030,
+ 10562: 0x00007032,
+ 10563: 0x00007210,
+ 10564: 0x0000737B,
+ 10565: 0x000074CF,
+ 10566: 0x00007662,
+ 10567: 0x00007665,
+ 10568: 0x00007926,
+ 10569: 0x0000792A,
+ 10570: 0x0000792C,
+ 10571: 0x0000792B,
+ 10572: 0x00007AC7,
+ 10573: 0x00007AF6,
+ 10574: 0x00007C4C,
+ 10575: 0x00007C43,
+ 10576: 0x00007C4D,
+ 10577: 0x00007CEF,
+ 10578: 0x00007CF0,
+ 10579: 0x00008FAE,
+ 10580: 0x00007E7D,
+ 10581: 0x00007E7C,
+ 10582: 0x00007E82,
+ 10583: 0x00007F4C,
+ 10584: 0x00008000,
+ 10585: 0x000081DA,
+ 10586: 0x00008266,
+ 10587: 0x000085FB,
+ 10588: 0x000085F9,
+ 10589: 0x00008611,
+ 10590: 0x000085FA,
+ 10591: 0x00008606,
+ 10592: 0x0000860B,
+ 10593: 0x00008607,
+ 10594: 0x0000860A,
+ 10595: 0x00008814,
+ 10596: 0x00008815,
+ 10597: 0x00008964,
+ 10598: 0x000089BA,
+ 10599: 0x000089F8,
+ 10600: 0x00008B70,
+ 10601: 0x00008B6C,
+ 10602: 0x00008B66,
+ 10603: 0x00008B6F,
+ 10604: 0x00008B5F,
+ 10605: 0x00008B6B,
+ 10606: 0x00008D0F,
+ 10607: 0x00008D0D,
+ 10608: 0x00008E89,
+ 10609: 0x00008E81,
+ 10610: 0x00008E85,
+ 10611: 0x00008E82,
+ 10612: 0x000091B4,
+ 10613: 0x000091CB,
+ 10614: 0x00009418,
+ 10615: 0x00009403,
+ 10616: 0x000093FD,
+ 10617: 0x000095E1,
+ 10618: 0x00009730,
+ 10619: 0x000098C4,
+ 10620: 0x00009952,
+ 10621: 0x00009951,
+ 10622: 0x000099A8,
+ 10623: 0x00009A2B,
+ 10624: 0x00009A30,
+ 10625: 0x00009A37,
+ 10626: 0x00009A35,
+ 10627: 0x00009C13,
+ 10628: 0x00009C0D,
+ 10629: 0x00009E79,
+ 10630: 0x00009EB5,
+ 10631: 0x00009EE8,
+ 10632: 0x00009F2F,
+ 10633: 0x00009F5F,
+ 10634: 0x00009F63,
+ 10635: 0x00009F61,
+ 10636: 0x00005137,
+ 10637: 0x00005138,
+ 10638: 0x000056C1,
+ 10639: 0x000056C0,
+ 10640: 0x000056C2,
+ 10641: 0x00005914,
+ 10642: 0x00005C6C,
+ 10643: 0x00005DCD,
+ 10644: 0x000061FC,
+ 10645: 0x000061FE,
+ 10646: 0x0000651D,
+ 10647: 0x0000651C,
+ 10648: 0x00006595,
+ 10649: 0x000066E9,
+ 10650: 0x00006AFB,
+ 10651: 0x00006B04,
+ 10652: 0x00006AFA,
+ 10653: 0x00006BB2,
+ 10654: 0x0000704C,
+ 10655: 0x0000721B,
+ 10656: 0x000072A7,
+ 10657: 0x000074D6,
+ 10658: 0x000074D4,
+ 10659: 0x00007669,
+ 10660: 0x000077D3,
+ 10661: 0x00007C50,
+ 10662: 0x00007E8F,
+ 10663: 0x00007E8C,
+ 10664: 0x00007FBC,
+ 10665: 0x00008617,
+ 10666: 0x0000862D,
+ 10667: 0x0000861A,
+ 10668: 0x00008823,
+ 10669: 0x00008822,
+ 10670: 0x00008821,
+ 10671: 0x0000881F,
+ 10672: 0x0000896A,
+ 10673: 0x0000896C,
+ 10674: 0x000089BD,
+ 10675: 0x00008B74,
+ 10676: 0x00008B77,
+ 10677: 0x00008B7D,
+ 10678: 0x00008D13,
+ 10679: 0x00008E8A,
+ 10680: 0x00008E8D,
+ 10681: 0x00008E8B,
+ 10682: 0x00008F5F,
+ 10683: 0x00008FAF,
+ 10684: 0x000091BA,
+ 10685: 0x0000942E,
+ 10686: 0x00009433,
+ 10687: 0x00009435,
+ 10688: 0x0000943A,
+ 10689: 0x00009438,
+ 10690: 0x00009432,
+ 10691: 0x0000942B,
+ 10692: 0x000095E2,
+ 10693: 0x00009738,
+ 10694: 0x00009739,
+ 10695: 0x00009732,
+ 10696: 0x000097FF,
+ 10697: 0x00009867,
+ 10698: 0x00009865,
+ 10699: 0x00009957,
+ 10700: 0x00009A45,
+ 10701: 0x00009A43,
+ 10702: 0x00009A40,
+ 10703: 0x00009A3E,
+ 10704: 0x00009ACF,
+ 10705: 0x00009B54,
+ 10706: 0x00009B51,
+ 10707: 0x00009C2D,
+ 10708: 0x00009C25,
+ 10709: 0x00009DAF,
+ 10710: 0x00009DB4,
+ 10711: 0x00009DC2,
+ 10712: 0x00009DB8,
+ 10713: 0x00009E9D,
+ 10714: 0x00009EEF,
+ 10715: 0x00009F19,
+ 10716: 0x00009F5C,
+ 10717: 0x00009F66,
+ 10718: 0x00009F67,
+ 10719: 0x0000513C,
+ 10720: 0x0000513B,
+ 10721: 0x000056C8,
+ 10722: 0x000056CA,
+ 10723: 0x000056C9,
+ 10724: 0x00005B7F,
+ 10725: 0x00005DD4,
+ 10726: 0x00005DD2,
+ 10727: 0x00005F4E,
+ 10728: 0x000061FF,
+ 10729: 0x00006524,
+ 10730: 0x00006B0A,
+ 10731: 0x00006B61,
+ 10732: 0x00007051,
+ 10733: 0x00007058,
+ 10734: 0x00007380,
+ 10735: 0x000074E4,
+ 10736: 0x0000758A,
+ 10737: 0x0000766E,
+ 10738: 0x0000766C,
+ 10739: 0x000079B3,
+ 10740: 0x00007C60,
+ 10741: 0x00007C5F,
+ 10742: 0x0000807E,
+ 10743: 0x0000807D,
+ 10744: 0x000081DF,
+ 10745: 0x00008972,
+ 10746: 0x0000896F,
+ 10747: 0x000089FC,
+ 10748: 0x00008B80,
+ 10749: 0x00008D16,
+ 10750: 0x00008D17,
+ 10751: 0x00008E91,
+ 10752: 0x00008E93,
+ 10753: 0x00008F61,
+ 10754: 0x00009148,
+ 10755: 0x00009444,
+ 10756: 0x00009451,
+ 10757: 0x00009452,
+ 10758: 0x0000973D,
+ 10759: 0x0000973E,
+ 10760: 0x000097C3,
+ 10761: 0x000097C1,
+ 10762: 0x0000986B,
+ 10763: 0x00009955,
+ 10764: 0x00009A55,
+ 10765: 0x00009A4D,
+ 10766: 0x00009AD2,
+ 10767: 0x00009B1A,
+ 10768: 0x00009C49,
+ 10769: 0x00009C31,
+ 10770: 0x00009C3E,
+ 10771: 0x00009C3B,
+ 10772: 0x00009DD3,
+ 10773: 0x00009DD7,
+ 10774: 0x00009F34,
+ 10775: 0x00009F6C,
+ 10776: 0x00009F6A,
+ 10777: 0x00009F94,
+ 10778: 0x000056CC,
+ 10779: 0x00005DD6,
+ 10780: 0x00006200,
+ 10781: 0x00006523,
+ 10782: 0x0000652B,
+ 10783: 0x0000652A,
+ 10784: 0x000066EC,
+ 10785: 0x00006B10,
+ 10786: 0x000074DA,
+ 10787: 0x00007ACA,
+ 10788: 0x00007C64,
+ 10789: 0x00007C63,
+ 10790: 0x00007C65,
+ 10791: 0x00007E93,
+ 10792: 0x00007E96,
+ 10793: 0x00007E94,
+ 10794: 0x000081E2,
+ 10795: 0x00008638,
+ 10796: 0x0000863F,
+ 10797: 0x00008831,
+ 10798: 0x00008B8A,
+ 10799: 0x00009090,
+ 10800: 0x0000908F,
+ 10801: 0x00009463,
+ 10802: 0x00009460,
+ 10803: 0x00009464,
+ 10804: 0x00009768,
+ 10805: 0x0000986F,
+ 10806: 0x0000995C,
+ 10807: 0x00009A5A,
+ 10808: 0x00009A5B,
+ 10809: 0x00009A57,
+ 10810: 0x00009AD3,
+ 10811: 0x00009AD4,
+ 10812: 0x00009AD1,
+ 10813: 0x00009C54,
+ 10814: 0x00009C57,
+ 10815: 0x00009C56,
+ 10816: 0x00009DE5,
+ 10817: 0x00009E9F,
+ 10818: 0x00009EF4,
+ 10819: 0x000056D1,
+ 10820: 0x000058E9,
+ 10821: 0x0000652C,
+ 10822: 0x0000705E,
+ 10823: 0x00007671,
+ 10824: 0x00007672,
+ 10825: 0x000077D7,
+ 10826: 0x00007F50,
+ 10827: 0x00007F88,
+ 10828: 0x00008836,
+ 10829: 0x00008839,
+ 10830: 0x00008862,
+ 10831: 0x00008B93,
+ 10832: 0x00008B92,
+ 10833: 0x00008B96,
+ 10834: 0x00008277,
+ 10835: 0x00008D1B,
+ 10836: 0x000091C0,
+ 10837: 0x0000946A,
+ 10838: 0x00009742,
+ 10839: 0x00009748,
+ 10840: 0x00009744,
+ 10841: 0x000097C6,
+ 10842: 0x00009870,
+ 10843: 0x00009A5F,
+ 10844: 0x00009B22,
+ 10845: 0x00009B58,
+ 10846: 0x00009C5F,
+ 10847: 0x00009DF9,
+ 10848: 0x00009DFA,
+ 10849: 0x00009E7C,
+ 10850: 0x00009E7D,
+ 10851: 0x00009F07,
+ 10852: 0x00009F77,
+ 10853: 0x00009F72,
+ 10854: 0x00005EF3,
+ 10855: 0x00006B16,
+ 10856: 0x00007063,
+ 10857: 0x00007C6C,
+ 10858: 0x00007C6E,
+ 10859: 0x0000883B,
+ 10860: 0x000089C0,
+ 10861: 0x00008EA1,
+ 10862: 0x000091C1,
+ 10863: 0x00009472,
+ 10864: 0x00009470,
+ 10865: 0x00009871,
+ 10866: 0x0000995E,
+ 10867: 0x00009AD6,
+ 10868: 0x00009B23,
+ 10869: 0x00009ECC,
+ 10870: 0x00007064,
+ 10871: 0x000077DA,
+ 10872: 0x00008B9A,
+ 10873: 0x00009477,
+ 10874: 0x000097C9,
+ 10875: 0x00009A62,
+ 10876: 0x00009A65,
+ 10877: 0x00007E9C,
+ 10878: 0x00008B9C,
+ 10879: 0x00008EAA,
+ 10880: 0x000091C5,
+ 10881: 0x0000947D,
+ 10882: 0x0000947E,
+ 10883: 0x0000947C,
+ 10884: 0x00009C77,
+ 10885: 0x00009C78,
+ 10886: 0x00009EF7,
+ 10887: 0x00008C54,
+ 10888: 0x0000947F,
+ 10889: 0x00009E1A,
+ 10890: 0x00007228,
+ 10891: 0x00009A6A,
+ 10892: 0x00009B31,
+ 10893: 0x00009E1B,
+ 10894: 0x00009E1E,
+ 10895: 0x00007C72,
+ 10896: 0x00002460,
+ 10897: 0x00002461,
+ 10898: 0x00002462,
+ 10899: 0x00002463,
+ 10900: 0x00002464,
+ 10901: 0x00002465,
+ 10902: 0x00002466,
+ 10903: 0x00002467,
+ 10904: 0x00002468,
+ 10905: 0x00002469,
+ 10906: 0x00002474,
+ 10907: 0x00002475,
+ 10908: 0x00002476,
+ 10909: 0x00002477,
+ 10910: 0x00002478,
+ 10911: 0x00002479,
+ 10912: 0x0000247A,
+ 10913: 0x0000247B,
+ 10914: 0x0000247C,
+ 10915: 0x0000247D,
+ 10916: 0x00002170,
+ 10917: 0x00002171,
+ 10918: 0x00002172,
+ 10919: 0x00002173,
+ 10920: 0x00002174,
+ 10921: 0x00002175,
+ 10922: 0x00002176,
+ 10923: 0x00002177,
+ 10924: 0x00002178,
+ 10925: 0x00002179,
+ 10926: 0x00004E36,
+ 10927: 0x00004E3F,
+ 10928: 0x00004E85,
+ 10929: 0x00004EA0,
+ 10930: 0x00005182,
+ 10931: 0x00005196,
+ 10932: 0x000051AB,
+ 10933: 0x000052F9,
+ 10934: 0x00005338,
+ 10935: 0x00005369,
+ 10936: 0x000053B6,
+ 10937: 0x0000590A,
+ 10938: 0x00005B80,
+ 10939: 0x00005DDB,
+ 10940: 0x00002F33,
+ 10941: 0x00005E7F,
+ 10942: 0x00005EF4,
+ 10943: 0x00005F50,
+ 10944: 0x00005F61,
+ 10945: 0x00006534,
+ 10946: 0x000065E0,
+ 10947: 0x00007592,
+ 10948: 0x00007676,
+ 10949: 0x00008FB5,
+ 10950: 0x000096B6,
+ 10951: 0x000000A8,
+ 10952: 0x000002C6,
+ 10953: 0x000030FD,
+ 10954: 0x000030FE,
+ 10955: 0x0000309D,
+ 10956: 0x0000309E,
+ 10957: 0x00003003,
+ 10958: 0x00004EDD,
+ 10959: 0x00003005,
+ 10960: 0x00003006,
+ 10961: 0x00003007,
+ 10962: 0x000030FC,
+ 10963: 0x0000FF3B,
+ 10964: 0x0000FF3D,
+ 10965: 0x0000273D,
+ 10966: 0x00003041,
+ 10967: 0x00003042,
+ 10968: 0x00003043,
+ 10969: 0x00003044,
+ 10970: 0x00003045,
+ 10971: 0x00003046,
+ 10972: 0x00003047,
+ 10973: 0x00003048,
+ 10974: 0x00003049,
+ 10975: 0x0000304A,
+ 10976: 0x0000304B,
+ 10977: 0x0000304C,
+ 10978: 0x0000304D,
+ 10979: 0x0000304E,
+ 10980: 0x0000304F,
+ 10981: 0x00003050,
+ 10982: 0x00003051,
+ 10983: 0x00003052,
+ 10984: 0x00003053,
+ 10985: 0x00003054,
+ 10986: 0x00003055,
+ 10987: 0x00003056,
+ 10988: 0x00003057,
+ 10989: 0x00003058,
+ 10990: 0x00003059,
+ 10991: 0x0000305A,
+ 10992: 0x0000305B,
+ 10993: 0x0000305C,
+ 10994: 0x0000305D,
+ 10995: 0x0000305E,
+ 10996: 0x0000305F,
+ 10997: 0x00003060,
+ 10998: 0x00003061,
+ 10999: 0x00003062,
+ 11000: 0x00003063,
+ 11001: 0x00003064,
+ 11002: 0x00003065,
+ 11003: 0x00003066,
+ 11004: 0x00003067,
+ 11005: 0x00003068,
+ 11006: 0x00003069,
+ 11007: 0x0000306A,
+ 11008: 0x0000306B,
+ 11009: 0x0000306C,
+ 11010: 0x0000306D,
+ 11011: 0x0000306E,
+ 11012: 0x0000306F,
+ 11013: 0x00003070,
+ 11014: 0x00003071,
+ 11015: 0x00003072,
+ 11016: 0x00003073,
+ 11017: 0x00003074,
+ 11018: 0x00003075,
+ 11019: 0x00003076,
+ 11020: 0x00003077,
+ 11021: 0x00003078,
+ 11022: 0x00003079,
+ 11023: 0x0000307A,
+ 11024: 0x0000307B,
+ 11025: 0x0000307C,
+ 11026: 0x0000307D,
+ 11027: 0x0000307E,
+ 11028: 0x0000307F,
+ 11029: 0x00003080,
+ 11030: 0x00003081,
+ 11031: 0x00003082,
+ 11032: 0x00003083,
+ 11033: 0x00003084,
+ 11034: 0x00003085,
+ 11035: 0x00003086,
+ 11036: 0x00003087,
+ 11037: 0x00003088,
+ 11038: 0x00003089,
+ 11039: 0x0000308A,
+ 11040: 0x0000308B,
+ 11041: 0x0000308C,
+ 11042: 0x0000308D,
+ 11043: 0x0000308E,
+ 11044: 0x0000308F,
+ 11045: 0x00003090,
+ 11046: 0x00003091,
+ 11047: 0x00003092,
+ 11048: 0x00003093,
+ 11049: 0x000030A1,
+ 11050: 0x000030A2,
+ 11051: 0x000030A3,
+ 11052: 0x000030A4,
+ 11053: 0x000030A5,
+ 11054: 0x000030A6,
+ 11055: 0x000030A7,
+ 11056: 0x000030A8,
+ 11057: 0x000030A9,
+ 11058: 0x000030AA,
+ 11059: 0x000030AB,
+ 11060: 0x000030AC,
+ 11061: 0x000030AD,
+ 11062: 0x000030AE,
+ 11063: 0x000030AF,
+ 11064: 0x000030B0,
+ 11065: 0x000030B1,
+ 11066: 0x000030B2,
+ 11067: 0x000030B3,
+ 11068: 0x000030B4,
+ 11069: 0x000030B5,
+ 11070: 0x000030B6,
+ 11071: 0x000030B7,
+ 11072: 0x000030B8,
+ 11073: 0x000030B9,
+ 11074: 0x000030BA,
+ 11075: 0x000030BB,
+ 11076: 0x000030BC,
+ 11077: 0x000030BD,
+ 11078: 0x000030BE,
+ 11079: 0x000030BF,
+ 11080: 0x000030C0,
+ 11081: 0x000030C1,
+ 11082: 0x000030C2,
+ 11083: 0x000030C3,
+ 11084: 0x000030C4,
+ 11085: 0x000030C5,
+ 11086: 0x000030C6,
+ 11087: 0x000030C7,
+ 11088: 0x000030C8,
+ 11089: 0x000030C9,
+ 11090: 0x000030CA,
+ 11091: 0x000030CB,
+ 11092: 0x000030CC,
+ 11093: 0x000030CD,
+ 11094: 0x000030CE,
+ 11095: 0x000030CF,
+ 11096: 0x000030D0,
+ 11097: 0x000030D1,
+ 11098: 0x000030D2,
+ 11099: 0x000030D3,
+ 11100: 0x000030D4,
+ 11101: 0x000030D5,
+ 11102: 0x000030D6,
+ 11103: 0x000030D7,
+ 11104: 0x000030D8,
+ 11105: 0x000030D9,
+ 11106: 0x000030DA,
+ 11107: 0x000030DB,
+ 11108: 0x000030DC,
+ 11109: 0x000030DD,
+ 11110: 0x000030DE,
+ 11111: 0x000030DF,
+ 11112: 0x000030E0,
+ 11113: 0x000030E1,
+ 11114: 0x000030E2,
+ 11115: 0x000030E3,
+ 11116: 0x000030E4,
+ 11117: 0x000030E5,
+ 11118: 0x000030E6,
+ 11119: 0x000030E7,
+ 11120: 0x000030E8,
+ 11121: 0x000030E9,
+ 11122: 0x000030EA,
+ 11123: 0x000030EB,
+ 11124: 0x000030EC,
+ 11125: 0x000030ED,
+ 11126: 0x000030EE,
+ 11127: 0x000030EF,
+ 11128: 0x000030F0,
+ 11129: 0x000030F1,
+ 11130: 0x000030F2,
+ 11131: 0x000030F3,
+ 11132: 0x000030F4,
+ 11133: 0x000030F5,
+ 11134: 0x000030F6,
+ 11135: 0x00000410,
+ 11136: 0x00000411,
+ 11137: 0x00000412,
+ 11138: 0x00000413,
+ 11139: 0x00000414,
+ 11140: 0x00000415,
+ 11141: 0x00000401,
+ 11142: 0x00000416,
+ 11143: 0x00000417,
+ 11144: 0x00000418,
+ 11145: 0x00000419,
+ 11146: 0x0000041A,
+ 11147: 0x0000041B,
+ 11148: 0x0000041C,
+ 11149: 0x0000041D,
+ 11150: 0x0000041E,
+ 11151: 0x0000041F,
+ 11152: 0x00000420,
+ 11153: 0x00000421,
+ 11154: 0x00000422,
+ 11155: 0x00000423,
+ 11156: 0x00000424,
+ 11157: 0x00000425,
+ 11158: 0x00000426,
+ 11159: 0x00000427,
+ 11160: 0x00000428,
+ 11161: 0x00000429,
+ 11162: 0x0000042A,
+ 11163: 0x0000042B,
+ 11164: 0x0000042C,
+ 11165: 0x0000042D,
+ 11166: 0x0000042E,
+ 11167: 0x0000042F,
+ 11168: 0x00000430,
+ 11169: 0x00000431,
+ 11170: 0x00000432,
+ 11171: 0x00000433,
+ 11172: 0x00000434,
+ 11173: 0x00000435,
+ 11174: 0x00000451,
+ 11175: 0x00000436,
+ 11176: 0x00000437,
+ 11177: 0x00000438,
+ 11178: 0x00000439,
+ 11179: 0x0000043A,
+ 11180: 0x0000043B,
+ 11181: 0x0000043C,
+ 11182: 0x0000043D,
+ 11183: 0x0000043E,
+ 11184: 0x0000043F,
+ 11185: 0x00000440,
+ 11186: 0x00000441,
+ 11187: 0x00000442,
+ 11188: 0x00000443,
+ 11189: 0x00000444,
+ 11190: 0x00000445,
+ 11191: 0x00000446,
+ 11192: 0x00000447,
+ 11193: 0x00000448,
+ 11194: 0x00000449,
+ 11195: 0x0000044A,
+ 11196: 0x0000044B,
+ 11197: 0x0000044C,
+ 11198: 0x0000044D,
+ 11199: 0x0000044E,
+ 11200: 0x0000044F,
+ 11201: 0x000021E7,
+ 11202: 0x000021B8,
+ 11203: 0x000021B9,
+ 11204: 0x000031CF,
+ 11205: 0x000200CC,
+ 11206: 0x00004E5A,
+ 11207: 0x0002008A,
+ 11208: 0x00005202,
+ 11209: 0x00004491,
+ 11210: 0x00009FB0,
+ 11211: 0x00005188,
+ 11212: 0x00009FB1,
+ 11213: 0x00027607,
+ 11254: 0x0000FFE2,
+ 11255: 0x0000FFE4,
+ 11256: 0x0000FF07,
+ 11257: 0x0000FF02,
+ 11258: 0x00003231,
+ 11259: 0x00002116,
+ 11260: 0x00002121,
+ 11261: 0x0000309B,
+ 11262: 0x0000309C,
+ 11263: 0x00002E80,
+ 11264: 0x00002E84,
+ 11265: 0x00002E86,
+ 11266: 0x00002E87,
+ 11267: 0x00002E88,
+ 11268: 0x00002E8A,
+ 11269: 0x00002E8C,
+ 11270: 0x00002E8D,
+ 11271: 0x00002E95,
+ 11272: 0x00002E9C,
+ 11273: 0x00002E9D,
+ 11274: 0x00002EA5,
+ 11275: 0x00002EA7,
+ 11276: 0x00002EAA,
+ 11277: 0x00002EAC,
+ 11278: 0x00002EAE,
+ 11279: 0x00002EB6,
+ 11280: 0x00002EBC,
+ 11281: 0x00002EBE,
+ 11282: 0x00002EC6,
+ 11283: 0x00002ECA,
+ 11284: 0x00002ECC,
+ 11285: 0x00002ECD,
+ 11286: 0x00002ECF,
+ 11287: 0x00002ED6,
+ 11288: 0x00002ED7,
+ 11289: 0x00002EDE,
+ 11290: 0x00002EE3,
+ 11294: 0x00000283,
+ 11295: 0x00000250,
+ 11296: 0x0000025B,
+ 11297: 0x00000254,
+ 11298: 0x00000275,
+ 11299: 0x00000153,
+ 11300: 0x000000F8,
+ 11301: 0x0000014B,
+ 11302: 0x0000028A,
+ 11303: 0x0000026A,
+ 11304: 0x00004E42,
+ 11305: 0x00004E5C,
+ 11306: 0x000051F5,
+ 11307: 0x0000531A,
+ 11308: 0x00005382,
+ 11309: 0x00004E07,
+ 11310: 0x00004E0C,
+ 11311: 0x00004E47,
+ 11312: 0x00004E8D,
+ 11313: 0x000056D7,
+ 11314: 0x0000FA0C,
+ 11315: 0x00005C6E,
+ 11316: 0x00005F73,
+ 11317: 0x00004E0F,
+ 11318: 0x00005187,
+ 11319: 0x00004E0E,
+ 11320: 0x00004E2E,
+ 11321: 0x00004E93,
+ 11322: 0x00004EC2,
+ 11323: 0x00004EC9,
+ 11324: 0x00004EC8,
+ 11325: 0x00005198,
+ 11326: 0x000052FC,
+ 11327: 0x0000536C,
+ 11328: 0x000053B9,
+ 11329: 0x00005720,
+ 11330: 0x00005903,
+ 11331: 0x0000592C,
+ 11332: 0x00005C10,
+ 11333: 0x00005DFF,
+ 11334: 0x000065E1,
+ 11335: 0x00006BB3,
+ 11336: 0x00006BCC,
+ 11337: 0x00006C14,
+ 11338: 0x0000723F,
+ 11339: 0x00004E31,
+ 11340: 0x00004E3C,
+ 11341: 0x00004EE8,
+ 11342: 0x00004EDC,
+ 11343: 0x00004EE9,
+ 11344: 0x00004EE1,
+ 11345: 0x00004EDD,
+ 11346: 0x00004EDA,
+ 11347: 0x0000520C,
+ 11348: 0x0000531C,
+ 11349: 0x0000534C,
+ 11350: 0x00005722,
+ 11351: 0x00005723,
+ 11352: 0x00005917,
+ 11353: 0x0000592F,
+ 11354: 0x00005B81,
+ 11355: 0x00005B84,
+ 11356: 0x00005C12,
+ 11357: 0x00005C3B,
+ 11358: 0x00005C74,
+ 11359: 0x00005C73,
+ 11360: 0x00005E04,
+ 11361: 0x00005E80,
+ 11362: 0x00005E82,
+ 11363: 0x00005FC9,
+ 11364: 0x00006209,
+ 11365: 0x00006250,
+ 11366: 0x00006C15,
+ 11367: 0x00006C36,
+ 11368: 0x00006C43,
+ 11369: 0x00006C3F,
+ 11370: 0x00006C3B,
+ 11371: 0x000072AE,
+ 11372: 0x000072B0,
+ 11373: 0x0000738A,
+ 11374: 0x000079B8,
+ 11375: 0x0000808A,
+ 11376: 0x0000961E,
+ 11377: 0x00004F0E,
+ 11378: 0x00004F18,
+ 11379: 0x00004F2C,
+ 11380: 0x00004EF5,
+ 11381: 0x00004F14,
+ 11382: 0x00004EF1,
+ 11383: 0x00004F00,
+ 11384: 0x00004EF7,
+ 11385: 0x00004F08,
+ 11386: 0x00004F1D,
+ 11387: 0x00004F02,
+ 11388: 0x00004F05,
+ 11389: 0x00004F22,
+ 11390: 0x00004F13,
+ 11391: 0x00004F04,
+ 11392: 0x00004EF4,
+ 11393: 0x00004F12,
+ 11394: 0x000051B1,
+ 11395: 0x00005213,
+ 11396: 0x00005209,
+ 11397: 0x00005210,
+ 11398: 0x000052A6,
+ 11399: 0x00005322,
+ 11400: 0x0000531F,
+ 11401: 0x0000534D,
+ 11402: 0x0000538A,
+ 11403: 0x00005407,
+ 11404: 0x000056E1,
+ 11405: 0x000056DF,
+ 11406: 0x0000572E,
+ 11407: 0x0000572A,
+ 11408: 0x00005734,
+ 11409: 0x0000593C,
+ 11410: 0x00005980,
+ 11411: 0x0000597C,
+ 11412: 0x00005985,
+ 11413: 0x0000597B,
+ 11414: 0x0000597E,
+ 11415: 0x00005977,
+ 11416: 0x0000597F,
+ 11417: 0x00005B56,
+ 11418: 0x00005C15,
+ 11419: 0x00005C25,
+ 11420: 0x00005C7C,
+ 11421: 0x00005C7A,
+ 11422: 0x00005C7B,
+ 11423: 0x00005C7E,
+ 11424: 0x00005DDF,
+ 11425: 0x00005E75,
+ 11426: 0x00005E84,
+ 11427: 0x00005F02,
+ 11428: 0x00005F1A,
+ 11429: 0x00005F74,
+ 11430: 0x00005FD5,
+ 11431: 0x00005FD4,
+ 11432: 0x00005FCF,
+ 11433: 0x0000625C,
+ 11434: 0x0000625E,
+ 11435: 0x00006264,
+ 11436: 0x00006261,
+ 11437: 0x00006266,
+ 11438: 0x00006262,
+ 11439: 0x00006259,
+ 11440: 0x00006260,
+ 11441: 0x0000625A,
+ 11442: 0x00006265,
+ 11443: 0x000065EF,
+ 11444: 0x000065EE,
+ 11445: 0x0000673E,
+ 11446: 0x00006739,
+ 11447: 0x00006738,
+ 11448: 0x0000673B,
+ 11449: 0x0000673A,
+ 11450: 0x0000673F,
+ 11451: 0x0000673C,
+ 11452: 0x00006733,
+ 11453: 0x00006C18,
+ 11454: 0x00006C46,
+ 11455: 0x00006C52,
+ 11456: 0x00006C5C,
+ 11457: 0x00006C4F,
+ 11458: 0x00006C4A,
+ 11459: 0x00006C54,
+ 11460: 0x00006C4B,
+ 11461: 0x00006C4C,
+ 11462: 0x00007071,
+ 11463: 0x0000725E,
+ 11464: 0x000072B4,
+ 11465: 0x000072B5,
+ 11466: 0x0000738E,
+ 11467: 0x0000752A,
+ 11468: 0x0000767F,
+ 11469: 0x00007A75,
+ 11470: 0x00007F51,
+ 11471: 0x00008278,
+ 11472: 0x0000827C,
+ 11473: 0x00008280,
+ 11474: 0x0000827D,
+ 11475: 0x0000827F,
+ 11476: 0x0000864D,
+ 11477: 0x0000897E,
+ 11478: 0x00009099,
+ 11479: 0x00009097,
+ 11480: 0x00009098,
+ 11481: 0x0000909B,
+ 11482: 0x00009094,
+ 11483: 0x00009622,
+ 11484: 0x00009624,
+ 11485: 0x00009620,
+ 11486: 0x00009623,
+ 11487: 0x00004F56,
+ 11488: 0x00004F3B,
+ 11489: 0x00004F62,
+ 11490: 0x00004F49,
+ 11491: 0x00004F53,
+ 11492: 0x00004F64,
+ 11493: 0x00004F3E,
+ 11494: 0x00004F67,
+ 11495: 0x00004F52,
+ 11496: 0x00004F5F,
+ 11497: 0x00004F41,
+ 11498: 0x00004F58,
+ 11499: 0x00004F2D,
+ 11500: 0x00004F33,
+ 11501: 0x00004F3F,
+ 11502: 0x00004F61,
+ 11503: 0x0000518F,
+ 11504: 0x000051B9,
+ 11505: 0x0000521C,
+ 11506: 0x0000521E,
+ 11507: 0x00005221,
+ 11508: 0x000052AD,
+ 11509: 0x000052AE,
+ 11510: 0x00005309,
+ 11511: 0x00005363,
+ 11512: 0x00005372,
+ 11513: 0x0000538E,
+ 11514: 0x0000538F,
+ 11515: 0x00005430,
+ 11516: 0x00005437,
+ 11517: 0x0000542A,
+ 11518: 0x00005454,
+ 11519: 0x00005445,
+ 11520: 0x00005419,
+ 11521: 0x0000541C,
+ 11522: 0x00005425,
+ 11523: 0x00005418,
+ 11524: 0x0000543D,
+ 11525: 0x0000544F,
+ 11526: 0x00005441,
+ 11527: 0x00005428,
+ 11528: 0x00005424,
+ 11529: 0x00005447,
+ 11530: 0x000056EE,
+ 11531: 0x000056E7,
+ 11532: 0x000056E5,
+ 11533: 0x00005741,
+ 11534: 0x00005745,
+ 11535: 0x0000574C,
+ 11536: 0x00005749,
+ 11537: 0x0000574B,
+ 11538: 0x00005752,
+ 11539: 0x00005906,
+ 11540: 0x00005940,
+ 11541: 0x000059A6,
+ 11542: 0x00005998,
+ 11543: 0x000059A0,
+ 11544: 0x00005997,
+ 11545: 0x0000598E,
+ 11546: 0x000059A2,
+ 11547: 0x00005990,
+ 11548: 0x0000598F,
+ 11549: 0x000059A7,
+ 11550: 0x000059A1,
+ 11551: 0x00005B8E,
+ 11552: 0x00005B92,
+ 11553: 0x00005C28,
+ 11554: 0x00005C2A,
+ 11555: 0x00005C8D,
+ 11556: 0x00005C8F,
+ 11557: 0x00005C88,
+ 11558: 0x00005C8B,
+ 11559: 0x00005C89,
+ 11560: 0x00005C92,
+ 11561: 0x00005C8A,
+ 11562: 0x00005C86,
+ 11563: 0x00005C93,
+ 11564: 0x00005C95,
+ 11565: 0x00005DE0,
+ 11566: 0x00005E0A,
+ 11567: 0x00005E0E,
+ 11568: 0x00005E8B,
+ 11569: 0x00005E89,
+ 11570: 0x00005E8C,
+ 11571: 0x00005E88,
+ 11572: 0x00005E8D,
+ 11573: 0x00005F05,
+ 11574: 0x00005F1D,
+ 11575: 0x00005F78,
+ 11576: 0x00005F76,
+ 11577: 0x00005FD2,
+ 11578: 0x00005FD1,
+ 11579: 0x00005FD0,
+ 11580: 0x00005FED,
+ 11581: 0x00005FE8,
+ 11582: 0x00005FEE,
+ 11583: 0x00005FF3,
+ 11584: 0x00005FE1,
+ 11585: 0x00005FE4,
+ 11586: 0x00005FE3,
+ 11587: 0x00005FFA,
+ 11588: 0x00005FEF,
+ 11589: 0x00005FF7,
+ 11590: 0x00005FFB,
+ 11591: 0x00006000,
+ 11592: 0x00005FF4,
+ 11593: 0x0000623A,
+ 11594: 0x00006283,
+ 11595: 0x0000628C,
+ 11596: 0x0000628E,
+ 11597: 0x0000628F,
+ 11598: 0x00006294,
+ 11599: 0x00006287,
+ 11600: 0x00006271,
+ 11601: 0x0000627B,
+ 11602: 0x0000627A,
+ 11603: 0x00006270,
+ 11604: 0x00006281,
+ 11605: 0x00006288,
+ 11606: 0x00006277,
+ 11607: 0x0000627D,
+ 11608: 0x00006272,
+ 11609: 0x00006274,
+ 11610: 0x00006537,
+ 11611: 0x000065F0,
+ 11612: 0x000065F4,
+ 11613: 0x000065F3,
+ 11614: 0x000065F2,
+ 11615: 0x000065F5,
+ 11616: 0x00006745,
+ 11617: 0x00006747,
+ 11618: 0x00006759,
+ 11619: 0x00006755,
+ 11620: 0x0000674C,
+ 11621: 0x00006748,
+ 11622: 0x0000675D,
+ 11623: 0x0000674D,
+ 11624: 0x0000675A,
+ 11625: 0x0000674B,
+ 11626: 0x00006BD0,
+ 11627: 0x00006C19,
+ 11628: 0x00006C1A,
+ 11629: 0x00006C78,
+ 11630: 0x00006C67,
+ 11631: 0x00006C6B,
+ 11632: 0x00006C84,
+ 11633: 0x00006C8B,
+ 11634: 0x00006C8F,
+ 11635: 0x00006C71,
+ 11636: 0x00006C6F,
+ 11637: 0x00006C69,
+ 11638: 0x00006C9A,
+ 11639: 0x00006C6D,
+ 11640: 0x00006C87,
+ 11641: 0x00006C95,
+ 11642: 0x00006C9C,
+ 11643: 0x00006C66,
+ 11644: 0x00006C73,
+ 11645: 0x00006C65,
+ 11646: 0x00006C7B,
+ 11647: 0x00006C8E,
+ 11648: 0x00007074,
+ 11649: 0x0000707A,
+ 11650: 0x00007263,
+ 11651: 0x000072BF,
+ 11652: 0x000072BD,
+ 11653: 0x000072C3,
+ 11654: 0x000072C6,
+ 11655: 0x000072C1,
+ 11656: 0x000072BA,
+ 11657: 0x000072C5,
+ 11658: 0x00007395,
+ 11659: 0x00007397,
+ 11660: 0x00007393,
+ 11661: 0x00007394,
+ 11662: 0x00007392,
+ 11663: 0x0000753A,
+ 11664: 0x00007539,
+ 11665: 0x00007594,
+ 11666: 0x00007595,
+ 11667: 0x00007681,
+ 11668: 0x0000793D,
+ 11669: 0x00008034,
+ 11670: 0x00008095,
+ 11671: 0x00008099,
+ 11672: 0x00008090,
+ 11673: 0x00008092,
+ 11674: 0x0000809C,
+ 11675: 0x00008290,
+ 11676: 0x0000828F,
+ 11677: 0x00008285,
+ 11678: 0x0000828E,
+ 11679: 0x00008291,
+ 11680: 0x00008293,
+ 11681: 0x0000828A,
+ 11682: 0x00008283,
+ 11683: 0x00008284,
+ 11684: 0x00008C78,
+ 11685: 0x00008FC9,
+ 11686: 0x00008FBF,
+ 11687: 0x0000909F,
+ 11688: 0x000090A1,
+ 11689: 0x000090A5,
+ 11690: 0x0000909E,
+ 11691: 0x000090A7,
+ 11692: 0x000090A0,
+ 11693: 0x00009630,
+ 11694: 0x00009628,
+ 11695: 0x0000962F,
+ 11696: 0x0000962D,
+ 11697: 0x00004E33,
+ 11698: 0x00004F98,
+ 11699: 0x00004F7C,
+ 11700: 0x00004F85,
+ 11701: 0x00004F7D,
+ 11702: 0x00004F80,
+ 11703: 0x00004F87,
+ 11704: 0x00004F76,
+ 11705: 0x00004F74,
+ 11706: 0x00004F89,
+ 11707: 0x00004F84,
+ 11708: 0x00004F77,
+ 11709: 0x00004F4C,
+ 11710: 0x00004F97,
+ 11711: 0x00004F6A,
+ 11712: 0x00004F9A,
+ 11713: 0x00004F79,
+ 11714: 0x00004F81,
+ 11715: 0x00004F78,
+ 11716: 0x00004F90,
+ 11717: 0x00004F9C,
+ 11718: 0x00004F94,
+ 11719: 0x00004F9E,
+ 11720: 0x00004F92,
+ 11721: 0x00004F82,
+ 11722: 0x00004F95,
+ 11723: 0x00004F6B,
+ 11724: 0x00004F6E,
+ 11725: 0x0000519E,
+ 11726: 0x000051BC,
+ 11727: 0x000051BE,
+ 11728: 0x00005235,
+ 11729: 0x00005232,
+ 11730: 0x00005233,
+ 11731: 0x00005246,
+ 11732: 0x00005231,
+ 11733: 0x000052BC,
+ 11734: 0x0000530A,
+ 11735: 0x0000530B,
+ 11736: 0x0000533C,
+ 11737: 0x00005392,
+ 11738: 0x00005394,
+ 11739: 0x00005487,
+ 11740: 0x0000547F,
+ 11741: 0x00005481,
+ 11742: 0x00005491,
+ 11743: 0x00005482,
+ 11744: 0x00005488,
+ 11745: 0x0000546B,
+ 11746: 0x0000547A,
+ 11747: 0x0000547E,
+ 11748: 0x00005465,
+ 11749: 0x0000546C,
+ 11750: 0x00005474,
+ 11751: 0x00005466,
+ 11752: 0x0000548D,
+ 11753: 0x0000546F,
+ 11754: 0x00005461,
+ 11755: 0x00005460,
+ 11756: 0x00005498,
+ 11757: 0x00005463,
+ 11758: 0x00005467,
+ 11759: 0x00005464,
+ 11760: 0x000056F7,
+ 11761: 0x000056F9,
+ 11762: 0x0000576F,
+ 11763: 0x00005772,
+ 11764: 0x0000576D,
+ 11765: 0x0000576B,
+ 11766: 0x00005771,
+ 11767: 0x00005770,
+ 11768: 0x00005776,
+ 11769: 0x00005780,
+ 11770: 0x00005775,
+ 11771: 0x0000577B,
+ 11772: 0x00005773,
+ 11773: 0x00005774,
+ 11774: 0x00005762,
+ 11775: 0x00005768,
+ 11776: 0x0000577D,
+ 11777: 0x0000590C,
+ 11778: 0x00005945,
+ 11779: 0x000059B5,
+ 11780: 0x000059BA,
+ 11781: 0x000059CF,
+ 11782: 0x000059CE,
+ 11783: 0x000059B2,
+ 11784: 0x000059CC,
+ 11785: 0x000059C1,
+ 11786: 0x000059B6,
+ 11787: 0x000059BC,
+ 11788: 0x000059C3,
+ 11789: 0x000059D6,
+ 11790: 0x000059B1,
+ 11791: 0x000059BD,
+ 11792: 0x000059C0,
+ 11793: 0x000059C8,
+ 11794: 0x000059B4,
+ 11795: 0x000059C7,
+ 11796: 0x00005B62,
+ 11797: 0x00005B65,
+ 11798: 0x00005B93,
+ 11799: 0x00005B95,
+ 11800: 0x00005C44,
+ 11801: 0x00005C47,
+ 11802: 0x00005CAE,
+ 11803: 0x00005CA4,
+ 11804: 0x00005CA0,
+ 11805: 0x00005CB5,
+ 11806: 0x00005CAF,
+ 11807: 0x00005CA8,
+ 11808: 0x00005CAC,
+ 11809: 0x00005C9F,
+ 11810: 0x00005CA3,
+ 11811: 0x00005CAD,
+ 11812: 0x00005CA2,
+ 11813: 0x00005CAA,
+ 11814: 0x00005CA7,
+ 11815: 0x00005C9D,
+ 11816: 0x00005CA5,
+ 11817: 0x00005CB6,
+ 11818: 0x00005CB0,
+ 11819: 0x00005CA6,
+ 11820: 0x00005E17,
+ 11821: 0x00005E14,
+ 11822: 0x00005E19,
+ 11823: 0x00005F28,
+ 11824: 0x00005F22,
+ 11825: 0x00005F23,
+ 11826: 0x00005F24,
+ 11827: 0x00005F54,
+ 11828: 0x00005F82,
+ 11829: 0x00005F7E,
+ 11830: 0x00005F7D,
+ 11831: 0x00005FDE,
+ 11832: 0x00005FE5,
+ 11833: 0x0000602D,
+ 11834: 0x00006026,
+ 11835: 0x00006019,
+ 11836: 0x00006032,
+ 11837: 0x0000600B,
+ 11838: 0x00006034,
+ 11839: 0x0000600A,
+ 11840: 0x00006017,
+ 11841: 0x00006033,
+ 11842: 0x0000601A,
+ 11843: 0x0000601E,
+ 11844: 0x0000602C,
+ 11845: 0x00006022,
+ 11846: 0x0000600D,
+ 11847: 0x00006010,
+ 11848: 0x0000602E,
+ 11849: 0x00006013,
+ 11850: 0x00006011,
+ 11851: 0x0000600C,
+ 11852: 0x00006009,
+ 11853: 0x0000601C,
+ 11854: 0x00006214,
+ 11855: 0x0000623D,
+ 11856: 0x000062AD,
+ 11857: 0x000062B4,
+ 11858: 0x000062D1,
+ 11859: 0x000062BE,
+ 11860: 0x000062AA,
+ 11861: 0x000062B6,
+ 11862: 0x000062CA,
+ 11863: 0x000062AE,
+ 11864: 0x000062B3,
+ 11865: 0x000062AF,
+ 11866: 0x000062BB,
+ 11867: 0x000062A9,
+ 11868: 0x000062B0,
+ 11869: 0x000062B8,
+ 11870: 0x0000653D,
+ 11871: 0x000065A8,
+ 11872: 0x000065BB,
+ 11873: 0x00006609,
+ 11874: 0x000065FC,
+ 11875: 0x00006604,
+ 11876: 0x00006612,
+ 11877: 0x00006608,
+ 11878: 0x000065FB,
+ 11879: 0x00006603,
+ 11880: 0x0000660B,
+ 11881: 0x0000660D,
+ 11882: 0x00006605,
+ 11883: 0x000065FD,
+ 11884: 0x00006611,
+ 11885: 0x00006610,
+ 11886: 0x000066F6,
+ 11887: 0x0000670A,
+ 11888: 0x00006785,
+ 11889: 0x0000676C,
+ 11890: 0x0000678E,
+ 11891: 0x00006792,
+ 11892: 0x00006776,
+ 11893: 0x0000677B,
+ 11894: 0x00006798,
+ 11895: 0x00006786,
+ 11896: 0x00006784,
+ 11897: 0x00006774,
+ 11898: 0x0000678D,
+ 11899: 0x0000678C,
+ 11900: 0x0000677A,
+ 11901: 0x0000679F,
+ 11902: 0x00006791,
+ 11903: 0x00006799,
+ 11904: 0x00006783,
+ 11905: 0x0000677D,
+ 11906: 0x00006781,
+ 11907: 0x00006778,
+ 11908: 0x00006779,
+ 11909: 0x00006794,
+ 11910: 0x00006B25,
+ 11911: 0x00006B80,
+ 11912: 0x00006B7E,
+ 11913: 0x00006BDE,
+ 11914: 0x00006C1D,
+ 11915: 0x00006C93,
+ 11916: 0x00006CEC,
+ 11917: 0x00006CEB,
+ 11918: 0x00006CEE,
+ 11919: 0x00006CD9,
+ 11920: 0x00006CB6,
+ 11921: 0x00006CD4,
+ 11922: 0x00006CAD,
+ 11923: 0x00006CE7,
+ 11924: 0x00006CB7,
+ 11925: 0x00006CD0,
+ 11926: 0x00006CC2,
+ 11927: 0x00006CBA,
+ 11928: 0x00006CC3,
+ 11929: 0x00006CC6,
+ 11930: 0x00006CED,
+ 11931: 0x00006CF2,
+ 11932: 0x00006CD2,
+ 11933: 0x00006CDD,
+ 11934: 0x00006CB4,
+ 11935: 0x00006C8A,
+ 11936: 0x00006C9D,
+ 11937: 0x00006C80,
+ 11938: 0x00006CDE,
+ 11939: 0x00006CC0,
+ 11940: 0x00006D30,
+ 11941: 0x00006CCD,
+ 11942: 0x00006CC7,
+ 11943: 0x00006CB0,
+ 11944: 0x00006CF9,
+ 11945: 0x00006CCF,
+ 11946: 0x00006CE9,
+ 11947: 0x00006CD1,
+ 11948: 0x00007094,
+ 11949: 0x00007098,
+ 11950: 0x00007085,
+ 11951: 0x00007093,
+ 11952: 0x00007086,
+ 11953: 0x00007084,
+ 11954: 0x00007091,
+ 11955: 0x00007096,
+ 11956: 0x00007082,
+ 11957: 0x0000709A,
+ 11958: 0x00007083,
+ 11959: 0x0000726A,
+ 11960: 0x000072D6,
+ 11961: 0x000072CB,
+ 11962: 0x000072D8,
+ 11963: 0x000072C9,
+ 11964: 0x000072DC,
+ 11965: 0x000072D2,
+ 11966: 0x000072D4,
+ 11967: 0x000072DA,
+ 11968: 0x000072CC,
+ 11969: 0x000072D1,
+ 11970: 0x000073A4,
+ 11971: 0x000073A1,
+ 11972: 0x000073AD,
+ 11973: 0x000073A6,
+ 11974: 0x000073A2,
+ 11975: 0x000073A0,
+ 11976: 0x000073AC,
+ 11977: 0x0000739D,
+ 11978: 0x000074DD,
+ 11979: 0x000074E8,
+ 11980: 0x0000753F,
+ 11981: 0x00007540,
+ 11982: 0x0000753E,
+ 11983: 0x0000758C,
+ 11984: 0x00007598,
+ 11985: 0x000076AF,
+ 11986: 0x000076F3,
+ 11987: 0x000076F1,
+ 11988: 0x000076F0,
+ 11989: 0x000076F5,
+ 11990: 0x000077F8,
+ 11991: 0x000077FC,
+ 11992: 0x000077F9,
+ 11993: 0x000077FB,
+ 11994: 0x000077FA,
+ 11995: 0x000077F7,
+ 11996: 0x00007942,
+ 11997: 0x0000793F,
+ 11998: 0x000079C5,
+ 11999: 0x00007A78,
+ 12000: 0x00007A7B,
+ 12001: 0x00007AFB,
+ 12002: 0x00007C75,
+ 12003: 0x00007CFD,
+ 12004: 0x00008035,
+ 12005: 0x0000808F,
+ 12006: 0x000080AE,
+ 12007: 0x000080A3,
+ 12008: 0x000080B8,
+ 12009: 0x000080B5,
+ 12010: 0x000080AD,
+ 12011: 0x00008220,
+ 12012: 0x000082A0,
+ 12013: 0x000082C0,
+ 12014: 0x000082AB,
+ 12015: 0x0000829A,
+ 12016: 0x00008298,
+ 12017: 0x0000829B,
+ 12018: 0x000082B5,
+ 12019: 0x000082A7,
+ 12020: 0x000082AE,
+ 12021: 0x000082BC,
+ 12022: 0x0000829E,
+ 12023: 0x000082BA,
+ 12024: 0x000082B4,
+ 12025: 0x000082A8,
+ 12026: 0x000082A1,
+ 12027: 0x000082A9,
+ 12028: 0x000082C2,
+ 12029: 0x000082A4,
+ 12030: 0x000082C3,
+ 12031: 0x000082B6,
+ 12032: 0x000082A2,
+ 12033: 0x00008670,
+ 12034: 0x0000866F,
+ 12035: 0x0000866D,
+ 12036: 0x0000866E,
+ 12037: 0x00008C56,
+ 12038: 0x00008FD2,
+ 12039: 0x00008FCB,
+ 12040: 0x00008FD3,
+ 12041: 0x00008FCD,
+ 12042: 0x00008FD6,
+ 12043: 0x00008FD5,
+ 12044: 0x00008FD7,
+ 12045: 0x000090B2,
+ 12046: 0x000090B4,
+ 12047: 0x000090AF,
+ 12048: 0x000090B3,
+ 12049: 0x000090B0,
+ 12050: 0x00009639,
+ 12051: 0x0000963D,
+ 12052: 0x0000963C,
+ 12053: 0x0000963A,
+ 12054: 0x00009643,
+ 12055: 0x00004FCD,
+ 12056: 0x00004FC5,
+ 12057: 0x00004FD3,
+ 12058: 0x00004FB2,
+ 12059: 0x00004FC9,
+ 12060: 0x00004FCB,
+ 12061: 0x00004FC1,
+ 12062: 0x00004FD4,
+ 12063: 0x00004FDC,
+ 12064: 0x00004FD9,
+ 12065: 0x00004FBB,
+ 12066: 0x00004FB3,
+ 12067: 0x00004FDB,
+ 12068: 0x00004FC7,
+ 12069: 0x00004FD6,
+ 12070: 0x00004FBA,
+ 12071: 0x00004FC0,
+ 12072: 0x00004FB9,
+ 12073: 0x00004FEC,
+ 12074: 0x00005244,
+ 12075: 0x00005249,
+ 12076: 0x000052C0,
+ 12077: 0x000052C2,
+ 12078: 0x0000533D,
+ 12079: 0x0000537C,
+ 12080: 0x00005397,
+ 12081: 0x00005396,
+ 12082: 0x00005399,
+ 12083: 0x00005398,
+ 12084: 0x000054BA,
+ 12085: 0x000054A1,
+ 12086: 0x000054AD,
+ 12087: 0x000054A5,
+ 12088: 0x000054CF,
+ 12089: 0x000054C3,
+ 12090: 0x0000830D,
+ 12091: 0x000054B7,
+ 12092: 0x000054AE,
+ 12093: 0x000054D6,
+ 12094: 0x000054B6,
+ 12095: 0x000054C5,
+ 12096: 0x000054C6,
+ 12097: 0x000054A0,
+ 12098: 0x00005470,
+ 12099: 0x000054BC,
+ 12100: 0x000054A2,
+ 12101: 0x000054BE,
+ 12102: 0x00005472,
+ 12103: 0x000054DE,
+ 12104: 0x000054B0,
+ 12105: 0x000057B5,
+ 12106: 0x0000579E,
+ 12107: 0x0000579F,
+ 12108: 0x000057A4,
+ 12109: 0x0000578C,
+ 12110: 0x00005797,
+ 12111: 0x0000579D,
+ 12112: 0x0000579B,
+ 12113: 0x00005794,
+ 12114: 0x00005798,
+ 12115: 0x0000578F,
+ 12116: 0x00005799,
+ 12117: 0x000057A5,
+ 12118: 0x0000579A,
+ 12119: 0x00005795,
+ 12120: 0x000058F4,
+ 12121: 0x0000590D,
+ 12122: 0x00005953,
+ 12123: 0x000059E1,
+ 12124: 0x000059DE,
+ 12125: 0x000059EE,
+ 12126: 0x00005A00,
+ 12127: 0x000059F1,
+ 12128: 0x000059DD,
+ 12129: 0x000059FA,
+ 12130: 0x000059FD,
+ 12131: 0x000059FC,
+ 12132: 0x000059F6,
+ 12133: 0x000059E4,
+ 12134: 0x000059F2,
+ 12135: 0x000059F7,
+ 12136: 0x000059DB,
+ 12137: 0x000059E9,
+ 12138: 0x000059F3,
+ 12139: 0x000059F5,
+ 12140: 0x000059E0,
+ 12141: 0x000059FE,
+ 12142: 0x000059F4,
+ 12143: 0x000059ED,
+ 12144: 0x00005BA8,
+ 12145: 0x00005C4C,
+ 12146: 0x00005CD0,
+ 12147: 0x00005CD8,
+ 12148: 0x00005CCC,
+ 12149: 0x00005CD7,
+ 12150: 0x00005CCB,
+ 12151: 0x00005CDB,
+ 12152: 0x00005CDE,
+ 12153: 0x00005CDA,
+ 12154: 0x00005CC9,
+ 12155: 0x00005CC7,
+ 12156: 0x00005CCA,
+ 12157: 0x00005CD6,
+ 12158: 0x00005CD3,
+ 12159: 0x00005CD4,
+ 12160: 0x00005CCF,
+ 12161: 0x00005CC8,
+ 12162: 0x00005CC6,
+ 12163: 0x00005CCE,
+ 12164: 0x00005CDF,
+ 12165: 0x00005CF8,
+ 12166: 0x00005DF9,
+ 12167: 0x00005E21,
+ 12168: 0x00005E22,
+ 12169: 0x00005E23,
+ 12170: 0x00005E20,
+ 12171: 0x00005E24,
+ 12172: 0x00005EB0,
+ 12173: 0x00005EA4,
+ 12174: 0x00005EA2,
+ 12175: 0x00005E9B,
+ 12176: 0x00005EA3,
+ 12177: 0x00005EA5,
+ 12178: 0x00005F07,
+ 12179: 0x00005F2E,
+ 12180: 0x00005F56,
+ 12181: 0x00005F86,
+ 12182: 0x00006037,
+ 12183: 0x00006039,
+ 12184: 0x00006054,
+ 12185: 0x00006072,
+ 12186: 0x0000605E,
+ 12187: 0x00006045,
+ 12188: 0x00006053,
+ 12189: 0x00006047,
+ 12190: 0x00006049,
+ 12191: 0x0000605B,
+ 12192: 0x0000604C,
+ 12193: 0x00006040,
+ 12194: 0x00006042,
+ 12195: 0x0000605F,
+ 12196: 0x00006024,
+ 12197: 0x00006044,
+ 12198: 0x00006058,
+ 12199: 0x00006066,
+ 12200: 0x0000606E,
+ 12201: 0x00006242,
+ 12202: 0x00006243,
+ 12203: 0x000062CF,
+ 12204: 0x0000630D,
+ 12205: 0x0000630B,
+ 12206: 0x000062F5,
+ 12207: 0x0000630E,
+ 12208: 0x00006303,
+ 12209: 0x000062EB,
+ 12210: 0x000062F9,
+ 12211: 0x0000630F,
+ 12212: 0x0000630C,
+ 12213: 0x000062F8,
+ 12214: 0x000062F6,
+ 12215: 0x00006300,
+ 12216: 0x00006313,
+ 12217: 0x00006314,
+ 12218: 0x000062FA,
+ 12219: 0x00006315,
+ 12220: 0x000062FB,
+ 12221: 0x000062F0,
+ 12222: 0x00006541,
+ 12223: 0x00006543,
+ 12224: 0x000065AA,
+ 12225: 0x000065BF,
+ 12226: 0x00006636,
+ 12227: 0x00006621,
+ 12228: 0x00006632,
+ 12229: 0x00006635,
+ 12230: 0x0000661C,
+ 12231: 0x00006626,
+ 12232: 0x00006622,
+ 12233: 0x00006633,
+ 12234: 0x0000662B,
+ 12235: 0x0000663A,
+ 12236: 0x0000661D,
+ 12237: 0x00006634,
+ 12238: 0x00006639,
+ 12239: 0x0000662E,
+ 12240: 0x0000670F,
+ 12241: 0x00006710,
+ 12242: 0x000067C1,
+ 12243: 0x000067F2,
+ 12244: 0x000067C8,
+ 12245: 0x000067BA,
+ 12246: 0x000067DC,
+ 12247: 0x000067BB,
+ 12248: 0x000067F8,
+ 12249: 0x000067D8,
+ 12250: 0x000067C0,
+ 12251: 0x000067B7,
+ 12252: 0x000067C5,
+ 12253: 0x000067EB,
+ 12254: 0x000067E4,
+ 12255: 0x000067DF,
+ 12256: 0x000067B5,
+ 12257: 0x000067CD,
+ 12258: 0x000067B3,
+ 12259: 0x000067F7,
+ 12260: 0x000067F6,
+ 12261: 0x000067EE,
+ 12262: 0x000067E3,
+ 12263: 0x000067C2,
+ 12264: 0x000067B9,
+ 12265: 0x000067CE,
+ 12266: 0x000067E7,
+ 12267: 0x000067F0,
+ 12268: 0x000067B2,
+ 12269: 0x000067FC,
+ 12270: 0x000067C6,
+ 12271: 0x000067ED,
+ 12272: 0x000067CC,
+ 12273: 0x000067AE,
+ 12274: 0x000067E6,
+ 12275: 0x000067DB,
+ 12276: 0x000067FA,
+ 12277: 0x000067C9,
+ 12278: 0x000067CA,
+ 12279: 0x000067C3,
+ 12280: 0x000067EA,
+ 12281: 0x000067CB,
+ 12282: 0x00006B28,
+ 12283: 0x00006B82,
+ 12284: 0x00006B84,
+ 12285: 0x00006BB6,
+ 12286: 0x00006BD6,
+ 12287: 0x00006BD8,
+ 12288: 0x00006BE0,
+ 12289: 0x00006C20,
+ 12290: 0x00006C21,
+ 12291: 0x00006D28,
+ 12292: 0x00006D34,
+ 12293: 0x00006D2D,
+ 12294: 0x00006D1F,
+ 12295: 0x00006D3C,
+ 12296: 0x00006D3F,
+ 12297: 0x00006D12,
+ 12298: 0x00006D0A,
+ 12299: 0x00006CDA,
+ 12300: 0x00006D33,
+ 12301: 0x00006D04,
+ 12302: 0x00006D19,
+ 12303: 0x00006D3A,
+ 12304: 0x00006D1A,
+ 12305: 0x00006D11,
+ 12306: 0x00006D00,
+ 12307: 0x00006D1D,
+ 12308: 0x00006D42,
+ 12309: 0x00006D01,
+ 12310: 0x00006D18,
+ 12311: 0x00006D37,
+ 12312: 0x00006D03,
+ 12313: 0x00006D0F,
+ 12314: 0x00006D40,
+ 12315: 0x00006D07,
+ 12316: 0x00006D20,
+ 12317: 0x00006D2C,
+ 12318: 0x00006D08,
+ 12319: 0x00006D22,
+ 12320: 0x00006D09,
+ 12321: 0x00006D10,
+ 12322: 0x000070B7,
+ 12323: 0x0000709F,
+ 12324: 0x000070BE,
+ 12325: 0x000070B1,
+ 12326: 0x000070B0,
+ 12327: 0x000070A1,
+ 12328: 0x000070B4,
+ 12329: 0x000070B5,
+ 12330: 0x000070A9,
+ 12331: 0x00007241,
+ 12332: 0x00007249,
+ 12333: 0x0000724A,
+ 12334: 0x0000726C,
+ 12335: 0x00007270,
+ 12336: 0x00007273,
+ 12337: 0x0000726E,
+ 12338: 0x000072CA,
+ 12339: 0x000072E4,
+ 12340: 0x000072E8,
+ 12341: 0x000072EB,
+ 12342: 0x000072DF,
+ 12343: 0x000072EA,
+ 12344: 0x000072E6,
+ 12345: 0x000072E3,
+ 12346: 0x00007385,
+ 12347: 0x000073CC,
+ 12348: 0x000073C2,
+ 12349: 0x000073C8,
+ 12350: 0x000073C5,
+ 12351: 0x000073B9,
+ 12352: 0x000073B6,
+ 12353: 0x000073B5,
+ 12354: 0x000073B4,
+ 12355: 0x000073EB,
+ 12356: 0x000073BF,
+ 12357: 0x000073C7,
+ 12358: 0x000073BE,
+ 12359: 0x000073C3,
+ 12360: 0x000073C6,
+ 12361: 0x000073B8,
+ 12362: 0x000073CB,
+ 12363: 0x000074EC,
+ 12364: 0x000074EE,
+ 12365: 0x0000752E,
+ 12366: 0x00007547,
+ 12367: 0x00007548,
+ 12368: 0x000075A7,
+ 12369: 0x000075AA,
+ 12370: 0x00007679,
+ 12371: 0x000076C4,
+ 12372: 0x00007708,
+ 12373: 0x00007703,
+ 12374: 0x00007704,
+ 12375: 0x00007705,
+ 12376: 0x0000770A,
+ 12377: 0x000076F7,
+ 12378: 0x000076FB,
+ 12379: 0x000076FA,
+ 12380: 0x000077E7,
+ 12381: 0x000077E8,
+ 12382: 0x00007806,
+ 12383: 0x00007811,
+ 12384: 0x00007812,
+ 12385: 0x00007805,
+ 12386: 0x00007810,
+ 12387: 0x0000780F,
+ 12388: 0x0000780E,
+ 12389: 0x00007809,
+ 12390: 0x00007803,
+ 12391: 0x00007813,
+ 12392: 0x0000794A,
+ 12393: 0x0000794C,
+ 12394: 0x0000794B,
+ 12395: 0x00007945,
+ 12396: 0x00007944,
+ 12397: 0x000079D5,
+ 12398: 0x000079CD,
+ 12399: 0x000079CF,
+ 12400: 0x000079D6,
+ 12401: 0x000079CE,
+ 12402: 0x00007A80,
+ 12403: 0x00007A7E,
+ 12404: 0x00007AD1,
+ 12405: 0x00007B00,
+ 12406: 0x00007B01,
+ 12407: 0x00007C7A,
+ 12408: 0x00007C78,
+ 12409: 0x00007C79,
+ 12410: 0x00007C7F,
+ 12411: 0x00007C80,
+ 12412: 0x00007C81,
+ 12413: 0x00007D03,
+ 12414: 0x00007D08,
+ 12415: 0x00007D01,
+ 12416: 0x00007F58,
+ 12417: 0x00007F91,
+ 12418: 0x00007F8D,
+ 12419: 0x00007FBE,
+ 12420: 0x00008007,
+ 12421: 0x0000800E,
+ 12422: 0x0000800F,
+ 12423: 0x00008014,
+ 12424: 0x00008037,
+ 12425: 0x000080D8,
+ 12426: 0x000080C7,
+ 12427: 0x000080E0,
+ 12428: 0x000080D1,
+ 12429: 0x000080C8,
+ 12430: 0x000080C2,
+ 12431: 0x000080D0,
+ 12432: 0x000080C5,
+ 12433: 0x000080E3,
+ 12434: 0x000080D9,
+ 12435: 0x000080DC,
+ 12436: 0x000080CA,
+ 12437: 0x000080D5,
+ 12438: 0x000080C9,
+ 12439: 0x000080CF,
+ 12440: 0x000080D7,
+ 12441: 0x000080E6,
+ 12442: 0x000080CD,
+ 12443: 0x000081FF,
+ 12444: 0x00008221,
+ 12445: 0x00008294,
+ 12446: 0x000082D9,
+ 12447: 0x000082FE,
+ 12448: 0x000082F9,
+ 12449: 0x00008307,
+ 12450: 0x000082E8,
+ 12451: 0x00008300,
+ 12452: 0x000082D5,
+ 12453: 0x0000833A,
+ 12454: 0x000082EB,
+ 12455: 0x000082D6,
+ 12456: 0x000082F4,
+ 12457: 0x000082EC,
+ 12458: 0x000082E1,
+ 12459: 0x000082F2,
+ 12460: 0x000082F5,
+ 12461: 0x0000830C,
+ 12462: 0x000082FB,
+ 12463: 0x000082F6,
+ 12464: 0x000082F0,
+ 12465: 0x000082EA,
+ 12466: 0x000082E4,
+ 12467: 0x000082E0,
+ 12468: 0x000082FA,
+ 12469: 0x000082F3,
+ 12470: 0x000082ED,
+ 12471: 0x00008677,
+ 12472: 0x00008674,
+ 12473: 0x0000867C,
+ 12474: 0x00008673,
+ 12475: 0x00008841,
+ 12476: 0x0000884E,
+ 12477: 0x00008867,
+ 12478: 0x0000886A,
+ 12479: 0x00008869,
+ 12480: 0x000089D3,
+ 12481: 0x00008A04,
+ 12482: 0x00008A07,
+ 12483: 0x00008D72,
+ 12484: 0x00008FE3,
+ 12485: 0x00008FE1,
+ 12486: 0x00008FEE,
+ 12487: 0x00008FE0,
+ 12488: 0x000090F1,
+ 12489: 0x000090BD,
+ 12490: 0x000090BF,
+ 12491: 0x000090D5,
+ 12492: 0x000090C5,
+ 12493: 0x000090BE,
+ 12494: 0x000090C7,
+ 12495: 0x000090CB,
+ 12496: 0x000090C8,
+ 12497: 0x000091D4,
+ 12498: 0x000091D3,
+ 12499: 0x00009654,
+ 12500: 0x0000964F,
+ 12501: 0x00009651,
+ 12502: 0x00009653,
+ 12503: 0x0000964A,
+ 12504: 0x0000964E,
+ 12505: 0x0000501E,
+ 12506: 0x00005005,
+ 12507: 0x00005007,
+ 12508: 0x00005013,
+ 12509: 0x00005022,
+ 12510: 0x00005030,
+ 12511: 0x0000501B,
+ 12512: 0x00004FF5,
+ 12513: 0x00004FF4,
+ 12514: 0x00005033,
+ 12515: 0x00005037,
+ 12516: 0x0000502C,
+ 12517: 0x00004FF6,
+ 12518: 0x00004FF7,
+ 12519: 0x00005017,
+ 12520: 0x0000501C,
+ 12521: 0x00005020,
+ 12522: 0x00005027,
+ 12523: 0x00005035,
+ 12524: 0x0000502F,
+ 12525: 0x00005031,
+ 12526: 0x0000500E,
+ 12527: 0x0000515A,
+ 12528: 0x00005194,
+ 12529: 0x00005193,
+ 12530: 0x000051CA,
+ 12531: 0x000051C4,
+ 12532: 0x000051C5,
+ 12533: 0x000051C8,
+ 12534: 0x000051CE,
+ 12535: 0x00005261,
+ 12536: 0x0000525A,
+ 12537: 0x00005252,
+ 12538: 0x0000525E,
+ 12539: 0x0000525F,
+ 12540: 0x00005255,
+ 12541: 0x00005262,
+ 12542: 0x000052CD,
+ 12543: 0x0000530E,
+ 12544: 0x0000539E,
+ 12545: 0x00005526,
+ 12546: 0x000054E2,
+ 12547: 0x00005517,
+ 12548: 0x00005512,
+ 12549: 0x000054E7,
+ 12550: 0x000054F3,
+ 12551: 0x000054E4,
+ 12552: 0x0000551A,
+ 12553: 0x000054FF,
+ 12554: 0x00005504,
+ 12555: 0x00005508,
+ 12556: 0x000054EB,
+ 12557: 0x00005511,
+ 12558: 0x00005505,
+ 12559: 0x000054F1,
+ 12560: 0x0000550A,
+ 12561: 0x000054FB,
+ 12562: 0x000054F7,
+ 12563: 0x000054F8,
+ 12564: 0x000054E0,
+ 12565: 0x0000550E,
+ 12566: 0x00005503,
+ 12567: 0x0000550B,
+ 12568: 0x00005701,
+ 12569: 0x00005702,
+ 12570: 0x000057CC,
+ 12571: 0x00005832,
+ 12572: 0x000057D5,
+ 12573: 0x000057D2,
+ 12574: 0x000057BA,
+ 12575: 0x000057C6,
+ 12576: 0x000057BD,
+ 12577: 0x000057BC,
+ 12578: 0x000057B8,
+ 12579: 0x000057B6,
+ 12580: 0x000057BF,
+ 12581: 0x000057C7,
+ 12582: 0x000057D0,
+ 12583: 0x000057B9,
+ 12584: 0x000057C1,
+ 12585: 0x0000590E,
+ 12586: 0x0000594A,
+ 12587: 0x00005A19,
+ 12588: 0x00005A16,
+ 12589: 0x00005A2D,
+ 12590: 0x00005A2E,
+ 12591: 0x00005A15,
+ 12592: 0x00005A0F,
+ 12593: 0x00005A17,
+ 12594: 0x00005A0A,
+ 12595: 0x00005A1E,
+ 12596: 0x00005A33,
+ 12597: 0x00005B6C,
+ 12598: 0x00005BA7,
+ 12599: 0x00005BAD,
+ 12600: 0x00005BAC,
+ 12601: 0x00005C03,
+ 12602: 0x00005C56,
+ 12603: 0x00005C54,
+ 12604: 0x00005CEC,
+ 12605: 0x00005CFF,
+ 12606: 0x00005CEE,
+ 12607: 0x00005CF1,
+ 12608: 0x00005CF7,
+ 12609: 0x00005D00,
+ 12610: 0x00005CF9,
+ 12611: 0x00005E29,
+ 12612: 0x00005E28,
+ 12613: 0x00005EA8,
+ 12614: 0x00005EAE,
+ 12615: 0x00005EAA,
+ 12616: 0x00005EAC,
+ 12617: 0x00005F33,
+ 12618: 0x00005F30,
+ 12619: 0x00005F67,
+ 12620: 0x0000605D,
+ 12621: 0x0000605A,
+ 12622: 0x00006067,
+ 12623: 0x00006041,
+ 12624: 0x000060A2,
+ 12625: 0x00006088,
+ 12626: 0x00006080,
+ 12627: 0x00006092,
+ 12628: 0x00006081,
+ 12629: 0x0000609D,
+ 12630: 0x00006083,
+ 12631: 0x00006095,
+ 12632: 0x0000609B,
+ 12633: 0x00006097,
+ 12634: 0x00006087,
+ 12635: 0x0000609C,
+ 12636: 0x0000608E,
+ 12637: 0x00006219,
+ 12638: 0x00006246,
+ 12639: 0x000062F2,
+ 12640: 0x00006310,
+ 12641: 0x00006356,
+ 12642: 0x0000632C,
+ 12643: 0x00006344,
+ 12644: 0x00006345,
+ 12645: 0x00006336,
+ 12646: 0x00006343,
+ 12647: 0x000063E4,
+ 12648: 0x00006339,
+ 12649: 0x0000634B,
+ 12650: 0x0000634A,
+ 12651: 0x0000633C,
+ 12652: 0x00006329,
+ 12653: 0x00006341,
+ 12654: 0x00006334,
+ 12655: 0x00006358,
+ 12656: 0x00006354,
+ 12657: 0x00006359,
+ 12658: 0x0000632D,
+ 12659: 0x00006347,
+ 12660: 0x00006333,
+ 12661: 0x0000635A,
+ 12662: 0x00006351,
+ 12663: 0x00006338,
+ 12664: 0x00006357,
+ 12665: 0x00006340,
+ 12666: 0x00006348,
+ 12667: 0x0000654A,
+ 12668: 0x00006546,
+ 12669: 0x000065C6,
+ 12670: 0x000065C3,
+ 12671: 0x000065C4,
+ 12672: 0x000065C2,
+ 12673: 0x0000664A,
+ 12674: 0x0000665F,
+ 12675: 0x00006647,
+ 12676: 0x00006651,
+ 12677: 0x00006712,
+ 12678: 0x00006713,
+ 12679: 0x0000681F,
+ 12680: 0x0000681A,
+ 12681: 0x00006849,
+ 12682: 0x00006832,
+ 12683: 0x00006833,
+ 12684: 0x0000683B,
+ 12685: 0x0000684B,
+ 12686: 0x0000684F,
+ 12687: 0x00006816,
+ 12688: 0x00006831,
+ 12689: 0x0000681C,
+ 12690: 0x00006835,
+ 12691: 0x0000682B,
+ 12692: 0x0000682D,
+ 12693: 0x0000682F,
+ 12694: 0x0000684E,
+ 12695: 0x00006844,
+ 12696: 0x00006834,
+ 12697: 0x0000681D,
+ 12698: 0x00006812,
+ 12699: 0x00006814,
+ 12700: 0x00006826,
+ 12701: 0x00006828,
+ 12702: 0x0000682E,
+ 12703: 0x0000684D,
+ 12704: 0x0000683A,
+ 12705: 0x00006825,
+ 12706: 0x00006820,
+ 12707: 0x00006B2C,
+ 12708: 0x00006B2F,
+ 12709: 0x00006B2D,
+ 12710: 0x00006B31,
+ 12711: 0x00006B34,
+ 12712: 0x00006B6D,
+ 12713: 0x00008082,
+ 12714: 0x00006B88,
+ 12715: 0x00006BE6,
+ 12716: 0x00006BE4,
+ 12717: 0x00006BE8,
+ 12718: 0x00006BE3,
+ 12719: 0x00006BE2,
+ 12720: 0x00006BE7,
+ 12721: 0x00006C25,
+ 12722: 0x00006D7A,
+ 12723: 0x00006D63,
+ 12724: 0x00006D64,
+ 12725: 0x00006D76,
+ 12726: 0x00006D0D,
+ 12727: 0x00006D61,
+ 12728: 0x00006D92,
+ 12729: 0x00006D58,
+ 12730: 0x00006D62,
+ 12731: 0x00006D6D,
+ 12732: 0x00006D6F,
+ 12733: 0x00006D91,
+ 12734: 0x00006D8D,
+ 12735: 0x00006DEF,
+ 12736: 0x00006D7F,
+ 12737: 0x00006D86,
+ 12738: 0x00006D5E,
+ 12739: 0x00006D67,
+ 12740: 0x00006D60,
+ 12741: 0x00006D97,
+ 12742: 0x00006D70,
+ 12743: 0x00006D7C,
+ 12744: 0x00006D5F,
+ 12745: 0x00006D82,
+ 12746: 0x00006D98,
+ 12747: 0x00006D2F,
+ 12748: 0x00006D68,
+ 12749: 0x00006D8B,
+ 12750: 0x00006D7E,
+ 12751: 0x00006D80,
+ 12752: 0x00006D84,
+ 12753: 0x00006D16,
+ 12754: 0x00006D83,
+ 12755: 0x00006D7B,
+ 12756: 0x00006D7D,
+ 12757: 0x00006D75,
+ 12758: 0x00006D90,
+ 12759: 0x000070DC,
+ 12760: 0x000070D3,
+ 12761: 0x000070D1,
+ 12762: 0x000070DD,
+ 12763: 0x000070CB,
+ 12764: 0x00007F39,
+ 12765: 0x000070E2,
+ 12766: 0x000070D7,
+ 12767: 0x000070D2,
+ 12768: 0x000070DE,
+ 12769: 0x000070E0,
+ 12770: 0x000070D4,
+ 12771: 0x000070CD,
+ 12772: 0x000070C5,
+ 12773: 0x000070C6,
+ 12774: 0x000070C7,
+ 12775: 0x000070DA,
+ 12776: 0x000070CE,
+ 12777: 0x000070E1,
+ 12778: 0x00007242,
+ 12779: 0x00007278,
+ 12780: 0x00007277,
+ 12781: 0x00007276,
+ 12782: 0x00007300,
+ 12783: 0x000072FA,
+ 12784: 0x000072F4,
+ 12785: 0x000072FE,
+ 12786: 0x000072F6,
+ 12787: 0x000072F3,
+ 12788: 0x000072FB,
+ 12789: 0x00007301,
+ 12790: 0x000073D3,
+ 12791: 0x000073D9,
+ 12792: 0x000073E5,
+ 12793: 0x000073D6,
+ 12794: 0x000073BC,
+ 12795: 0x000073E7,
+ 12796: 0x000073E3,
+ 12797: 0x000073E9,
+ 12798: 0x000073DC,
+ 12799: 0x000073D2,
+ 12800: 0x000073DB,
+ 12801: 0x000073D4,
+ 12802: 0x000073DD,
+ 12803: 0x000073DA,
+ 12804: 0x000073D7,
+ 12805: 0x000073D8,
+ 12806: 0x000073E8,
+ 12807: 0x000074DE,
+ 12808: 0x000074DF,
+ 12809: 0x000074F4,
+ 12810: 0x000074F5,
+ 12811: 0x00007521,
+ 12812: 0x0000755B,
+ 12813: 0x0000755F,
+ 12814: 0x000075B0,
+ 12815: 0x000075C1,
+ 12816: 0x000075BB,
+ 12817: 0x000075C4,
+ 12818: 0x000075C0,
+ 12819: 0x000075BF,
+ 12820: 0x000075B6,
+ 12821: 0x000075BA,
+ 12822: 0x0000768A,
+ 12823: 0x000076C9,
+ 12824: 0x0000771D,
+ 12825: 0x0000771B,
+ 12826: 0x00007710,
+ 12827: 0x00007713,
+ 12828: 0x00007712,
+ 12829: 0x00007723,
+ 12830: 0x00007711,
+ 12831: 0x00007715,
+ 12832: 0x00007719,
+ 12833: 0x0000771A,
+ 12834: 0x00007722,
+ 12835: 0x00007727,
+ 12836: 0x00007823,
+ 12837: 0x0000782C,
+ 12838: 0x00007822,
+ 12839: 0x00007835,
+ 12840: 0x0000782F,
+ 12841: 0x00007828,
+ 12842: 0x0000782E,
+ 12843: 0x0000782B,
+ 12844: 0x00007821,
+ 12845: 0x00007829,
+ 12846: 0x00007833,
+ 12847: 0x0000782A,
+ 12848: 0x00007831,
+ 12849: 0x00007954,
+ 12850: 0x0000795B,
+ 12851: 0x0000794F,
+ 12852: 0x0000795C,
+ 12853: 0x00007953,
+ 12854: 0x00007952,
+ 12855: 0x00007951,
+ 12856: 0x000079EB,
+ 12857: 0x000079EC,
+ 12858: 0x000079E0,
+ 12859: 0x000079EE,
+ 12860: 0x000079ED,
+ 12861: 0x000079EA,
+ 12862: 0x000079DC,
+ 12863: 0x000079DE,
+ 12864: 0x000079DD,
+ 12865: 0x00007A86,
+ 12866: 0x00007A89,
+ 12867: 0x00007A85,
+ 12868: 0x00007A8B,
+ 12869: 0x00007A8C,
+ 12870: 0x00007A8A,
+ 12871: 0x00007A87,
+ 12872: 0x00007AD8,
+ 12873: 0x00007B10,
+ 12874: 0x00007B04,
+ 12875: 0x00007B13,
+ 12876: 0x00007B05,
+ 12877: 0x00007B0F,
+ 12878: 0x00007B08,
+ 12879: 0x00007B0A,
+ 12880: 0x00007B0E,
+ 12881: 0x00007B09,
+ 12882: 0x00007B12,
+ 12883: 0x00007C84,
+ 12884: 0x00007C91,
+ 12885: 0x00007C8A,
+ 12886: 0x00007C8C,
+ 12887: 0x00007C88,
+ 12888: 0x00007C8D,
+ 12889: 0x00007C85,
+ 12890: 0x00007D1E,
+ 12891: 0x00007D1D,
+ 12892: 0x00007D11,
+ 12893: 0x00007D0E,
+ 12894: 0x00007D18,
+ 12895: 0x00007D16,
+ 12896: 0x00007D13,
+ 12897: 0x00007D1F,
+ 12898: 0x00007D12,
+ 12899: 0x00007D0F,
+ 12900: 0x00007D0C,
+ 12901: 0x00007F5C,
+ 12902: 0x00007F61,
+ 12903: 0x00007F5E,
+ 12904: 0x00007F60,
+ 12905: 0x00007F5D,
+ 12906: 0x00007F5B,
+ 12907: 0x00007F96,
+ 12908: 0x00007F92,
+ 12909: 0x00007FC3,
+ 12910: 0x00007FC2,
+ 12911: 0x00007FC0,
+ 12912: 0x00008016,
+ 12913: 0x0000803E,
+ 12914: 0x00008039,
+ 12915: 0x000080FA,
+ 12916: 0x000080F2,
+ 12917: 0x000080F9,
+ 12918: 0x000080F5,
+ 12919: 0x00008101,
+ 12920: 0x000080FB,
+ 12921: 0x00008100,
+ 12922: 0x00008201,
+ 12923: 0x0000822F,
+ 12924: 0x00008225,
+ 12925: 0x00008333,
+ 12926: 0x0000832D,
+ 12927: 0x00008344,
+ 12928: 0x00008319,
+ 12929: 0x00008351,
+ 12930: 0x00008325,
+ 12931: 0x00008356,
+ 12932: 0x0000833F,
+ 12933: 0x00008341,
+ 12934: 0x00008326,
+ 12935: 0x0000831C,
+ 12936: 0x00008322,
+ 12937: 0x00008342,
+ 12938: 0x0000834E,
+ 12939: 0x0000831B,
+ 12940: 0x0000832A,
+ 12941: 0x00008308,
+ 12942: 0x0000833C,
+ 12943: 0x0000834D,
+ 12944: 0x00008316,
+ 12945: 0x00008324,
+ 12946: 0x00008320,
+ 12947: 0x00008337,
+ 12948: 0x0000832F,
+ 12949: 0x00008329,
+ 12950: 0x00008347,
+ 12951: 0x00008345,
+ 12952: 0x0000834C,
+ 12953: 0x00008353,
+ 12954: 0x0000831E,
+ 12955: 0x0000832C,
+ 12956: 0x0000834B,
+ 12957: 0x00008327,
+ 12958: 0x00008348,
+ 12959: 0x00008653,
+ 12960: 0x00008652,
+ 12961: 0x000086A2,
+ 12962: 0x000086A8,
+ 12963: 0x00008696,
+ 12964: 0x0000868D,
+ 12965: 0x00008691,
+ 12966: 0x0000869E,
+ 12967: 0x00008687,
+ 12968: 0x00008697,
+ 12969: 0x00008686,
+ 12970: 0x0000868B,
+ 12971: 0x0000869A,
+ 12972: 0x00008685,
+ 12973: 0x000086A5,
+ 12974: 0x00008699,
+ 12975: 0x000086A1,
+ 12976: 0x000086A7,
+ 12977: 0x00008695,
+ 12978: 0x00008698,
+ 12979: 0x0000868E,
+ 12980: 0x0000869D,
+ 12981: 0x00008690,
+ 12982: 0x00008694,
+ 12983: 0x00008843,
+ 12984: 0x00008844,
+ 12985: 0x0000886D,
+ 12986: 0x00008875,
+ 12987: 0x00008876,
+ 12988: 0x00008872,
+ 12989: 0x00008880,
+ 12990: 0x00008871,
+ 12991: 0x0000887F,
+ 12992: 0x0000886F,
+ 12993: 0x00008883,
+ 12994: 0x0000887E,
+ 12995: 0x00008874,
+ 12996: 0x0000887C,
+ 12997: 0x00008A12,
+ 12998: 0x00008C47,
+ 12999: 0x00008C57,
+ 13000: 0x00008C7B,
+ 13001: 0x00008CA4,
+ 13002: 0x00008CA3,
+ 13003: 0x00008D76,
+ 13004: 0x00008D78,
+ 13005: 0x00008DB5,
+ 13006: 0x00008DB7,
+ 13007: 0x00008DB6,
+ 13008: 0x00008ED1,
+ 13009: 0x00008ED3,
+ 13010: 0x00008FFE,
+ 13011: 0x00008FF5,
+ 13012: 0x00009002,
+ 13013: 0x00008FFF,
+ 13014: 0x00008FFB,
+ 13015: 0x00009004,
+ 13016: 0x00008FFC,
+ 13017: 0x00008FF6,
+ 13018: 0x000090D6,
+ 13019: 0x000090E0,
+ 13020: 0x000090D9,
+ 13021: 0x000090DA,
+ 13022: 0x000090E3,
+ 13023: 0x000090DF,
+ 13024: 0x000090E5,
+ 13025: 0x000090D8,
+ 13026: 0x000090DB,
+ 13027: 0x000090D7,
+ 13028: 0x000090DC,
+ 13029: 0x000090E4,
+ 13030: 0x00009150,
+ 13031: 0x0000914E,
+ 13032: 0x0000914F,
+ 13033: 0x000091D5,
+ 13034: 0x000091E2,
+ 13035: 0x000091DA,
+ 13036: 0x0000965C,
+ 13037: 0x0000965F,
+ 13038: 0x000096BC,
+ 13039: 0x000098E3,
+ 13040: 0x00009ADF,
+ 13041: 0x00009B2F,
+ 13042: 0x00004E7F,
+ 13043: 0x00005070,
+ 13044: 0x0000506A,
+ 13045: 0x00005061,
+ 13046: 0x0000505E,
+ 13047: 0x00005060,
+ 13048: 0x00005053,
+ 13049: 0x0000504B,
+ 13050: 0x0000505D,
+ 13051: 0x00005072,
+ 13052: 0x00005048,
+ 13053: 0x0000504D,
+ 13054: 0x00005041,
+ 13055: 0x0000505B,
+ 13056: 0x0000504A,
+ 13057: 0x00005062,
+ 13058: 0x00005015,
+ 13059: 0x00005045,
+ 13060: 0x0000505F,
+ 13061: 0x00005069,
+ 13062: 0x0000506B,
+ 13063: 0x00005063,
+ 13064: 0x00005064,
+ 13065: 0x00005046,
+ 13066: 0x00005040,
+ 13067: 0x0000506E,
+ 13068: 0x00005073,
+ 13069: 0x00005057,
+ 13070: 0x00005051,
+ 13071: 0x000051D0,
+ 13072: 0x0000526B,
+ 13073: 0x0000526D,
+ 13074: 0x0000526C,
+ 13075: 0x0000526E,
+ 13076: 0x000052D6,
+ 13077: 0x000052D3,
+ 13078: 0x0000532D,
+ 13079: 0x0000539C,
+ 13080: 0x00005575,
+ 13081: 0x00005576,
+ 13082: 0x0000553C,
+ 13083: 0x0000554D,
+ 13084: 0x00005550,
+ 13085: 0x00005534,
+ 13086: 0x0000552A,
+ 13087: 0x00005551,
+ 13088: 0x00005562,
+ 13089: 0x00005536,
+ 13090: 0x00005535,
+ 13091: 0x00005530,
+ 13092: 0x00005552,
+ 13093: 0x00005545,
+ 13094: 0x0000550C,
+ 13095: 0x00005532,
+ 13096: 0x00005565,
+ 13097: 0x0000554E,
+ 13098: 0x00005539,
+ 13099: 0x00005548,
+ 13100: 0x0000552D,
+ 13101: 0x0000553B,
+ 13102: 0x00005540,
+ 13103: 0x0000554B,
+ 13104: 0x0000570A,
+ 13105: 0x00005707,
+ 13106: 0x000057FB,
+ 13107: 0x00005814,
+ 13108: 0x000057E2,
+ 13109: 0x000057F6,
+ 13110: 0x000057DC,
+ 13111: 0x000057F4,
+ 13112: 0x00005800,
+ 13113: 0x000057ED,
+ 13114: 0x000057FD,
+ 13115: 0x00005808,
+ 13116: 0x000057F8,
+ 13117: 0x0000580B,
+ 13118: 0x000057F3,
+ 13119: 0x000057CF,
+ 13120: 0x00005807,
+ 13121: 0x000057EE,
+ 13122: 0x000057E3,
+ 13123: 0x000057F2,
+ 13124: 0x000057E5,
+ 13125: 0x000057EC,
+ 13126: 0x000057E1,
+ 13127: 0x0000580E,
+ 13128: 0x000057FC,
+ 13129: 0x00005810,
+ 13130: 0x000057E7,
+ 13131: 0x00005801,
+ 13132: 0x0000580C,
+ 13133: 0x000057F1,
+ 13134: 0x000057E9,
+ 13135: 0x000057F0,
+ 13136: 0x0000580D,
+ 13137: 0x00005804,
+ 13138: 0x0000595C,
+ 13139: 0x00005A60,
+ 13140: 0x00005A58,
+ 13141: 0x00005A55,
+ 13142: 0x00005A67,
+ 13143: 0x00005A5E,
+ 13144: 0x00005A38,
+ 13145: 0x00005A35,
+ 13146: 0x00005A6D,
+ 13147: 0x00005A50,
+ 13148: 0x00005A5F,
+ 13149: 0x00005A65,
+ 13150: 0x00005A6C,
+ 13151: 0x00005A53,
+ 13152: 0x00005A64,
+ 13153: 0x00005A57,
+ 13154: 0x00005A43,
+ 13155: 0x00005A5D,
+ 13156: 0x00005A52,
+ 13157: 0x00005A44,
+ 13158: 0x00005A5B,
+ 13159: 0x00005A48,
+ 13160: 0x00005A8E,
+ 13161: 0x00005A3E,
+ 13162: 0x00005A4D,
+ 13163: 0x00005A39,
+ 13164: 0x00005A4C,
+ 13165: 0x00005A70,
+ 13166: 0x00005A69,
+ 13167: 0x00005A47,
+ 13168: 0x00005A51,
+ 13169: 0x00005A56,
+ 13170: 0x00005A42,
+ 13171: 0x00005A5C,
+ 13172: 0x00005B72,
+ 13173: 0x00005B6E,
+ 13174: 0x00005BC1,
+ 13175: 0x00005BC0,
+ 13176: 0x00005C59,
+ 13177: 0x00005D1E,
+ 13178: 0x00005D0B,
+ 13179: 0x00005D1D,
+ 13180: 0x00005D1A,
+ 13181: 0x00005D20,
+ 13182: 0x00005D0C,
+ 13183: 0x00005D28,
+ 13184: 0x00005D0D,
+ 13185: 0x00005D26,
+ 13186: 0x00005D25,
+ 13187: 0x00005D0F,
+ 13188: 0x00005D30,
+ 13189: 0x00005D12,
+ 13190: 0x00005D23,
+ 13191: 0x00005D1F,
+ 13192: 0x00005D2E,
+ 13193: 0x00005E3E,
+ 13194: 0x00005E34,
+ 13195: 0x00005EB1,
+ 13196: 0x00005EB4,
+ 13197: 0x00005EB9,
+ 13198: 0x00005EB2,
+ 13199: 0x00005EB3,
+ 13200: 0x00005F36,
+ 13201: 0x00005F38,
+ 13202: 0x00005F9B,
+ 13203: 0x00005F96,
+ 13204: 0x00005F9F,
+ 13205: 0x0000608A,
+ 13206: 0x00006090,
+ 13207: 0x00006086,
+ 13208: 0x000060BE,
+ 13209: 0x000060B0,
+ 13210: 0x000060BA,
+ 13211: 0x000060D3,
+ 13212: 0x000060D4,
+ 13213: 0x000060CF,
+ 13214: 0x000060E4,
+ 13215: 0x000060D9,
+ 13216: 0x000060DD,
+ 13217: 0x000060C8,
+ 13218: 0x000060B1,
+ 13219: 0x000060DB,
+ 13220: 0x000060B7,
+ 13221: 0x000060CA,
+ 13222: 0x000060BF,
+ 13223: 0x000060C3,
+ 13224: 0x000060CD,
+ 13225: 0x000060C0,
+ 13226: 0x00006332,
+ 13227: 0x00006365,
+ 13228: 0x0000638A,
+ 13229: 0x00006382,
+ 13230: 0x0000637D,
+ 13231: 0x000063BD,
+ 13232: 0x0000639E,
+ 13233: 0x000063AD,
+ 13234: 0x0000639D,
+ 13235: 0x00006397,
+ 13236: 0x000063AB,
+ 13237: 0x0000638E,
+ 13238: 0x0000636F,
+ 13239: 0x00006387,
+ 13240: 0x00006390,
+ 13241: 0x0000636E,
+ 13242: 0x000063AF,
+ 13243: 0x00006375,
+ 13244: 0x0000639C,
+ 13245: 0x0000636D,
+ 13246: 0x000063AE,
+ 13247: 0x0000637C,
+ 13248: 0x000063A4,
+ 13249: 0x0000633B,
+ 13250: 0x0000639F,
+ 13251: 0x00006378,
+ 13252: 0x00006385,
+ 13253: 0x00006381,
+ 13254: 0x00006391,
+ 13255: 0x0000638D,
+ 13256: 0x00006370,
+ 13257: 0x00006553,
+ 13258: 0x000065CD,
+ 13259: 0x00006665,
+ 13260: 0x00006661,
+ 13261: 0x0000665B,
+ 13262: 0x00006659,
+ 13263: 0x0000665C,
+ 13264: 0x00006662,
+ 13265: 0x00006718,
+ 13266: 0x00006879,
+ 13267: 0x00006887,
+ 13268: 0x00006890,
+ 13269: 0x0000689C,
+ 13270: 0x0000686D,
+ 13271: 0x0000686E,
+ 13272: 0x000068AE,
+ 13273: 0x000068AB,
+ 13274: 0x00006956,
+ 13275: 0x0000686F,
+ 13276: 0x000068A3,
+ 13277: 0x000068AC,
+ 13278: 0x000068A9,
+ 13279: 0x00006875,
+ 13280: 0x00006874,
+ 13281: 0x000068B2,
+ 13282: 0x0000688F,
+ 13283: 0x00006877,
+ 13284: 0x00006892,
+ 13285: 0x0000687C,
+ 13286: 0x0000686B,
+ 13287: 0x00006872,
+ 13288: 0x000068AA,
+ 13289: 0x00006880,
+ 13290: 0x00006871,
+ 13291: 0x0000687E,
+ 13292: 0x0000689B,
+ 13293: 0x00006896,
+ 13294: 0x0000688B,
+ 13295: 0x000068A0,
+ 13296: 0x00006889,
+ 13297: 0x000068A4,
+ 13298: 0x00006878,
+ 13299: 0x0000687B,
+ 13300: 0x00006891,
+ 13301: 0x0000688C,
+ 13302: 0x0000688A,
+ 13303: 0x0000687D,
+ 13304: 0x00006B36,
+ 13305: 0x00006B33,
+ 13306: 0x00006B37,
+ 13307: 0x00006B38,
+ 13308: 0x00006B91,
+ 13309: 0x00006B8F,
+ 13310: 0x00006B8D,
+ 13311: 0x00006B8E,
+ 13312: 0x00006B8C,
+ 13313: 0x00006C2A,
+ 13314: 0x00006DC0,
+ 13315: 0x00006DAB,
+ 13316: 0x00006DB4,
+ 13317: 0x00006DB3,
+ 13318: 0x00006E74,
+ 13319: 0x00006DAC,
+ 13320: 0x00006DE9,
+ 13321: 0x00006DE2,
+ 13322: 0x00006DB7,
+ 13323: 0x00006DF6,
+ 13324: 0x00006DD4,
+ 13325: 0x00006E00,
+ 13326: 0x00006DC8,
+ 13327: 0x00006DE0,
+ 13328: 0x00006DDF,
+ 13329: 0x00006DD6,
+ 13330: 0x00006DBE,
+ 13331: 0x00006DE5,
+ 13332: 0x00006DDC,
+ 13333: 0x00006DDD,
+ 13334: 0x00006DDB,
+ 13335: 0x00006DF4,
+ 13336: 0x00006DCA,
+ 13337: 0x00006DBD,
+ 13338: 0x00006DED,
+ 13339: 0x00006DF0,
+ 13340: 0x00006DBA,
+ 13341: 0x00006DD5,
+ 13342: 0x00006DC2,
+ 13343: 0x00006DCF,
+ 13344: 0x00006DC9,
+ 13345: 0x00006DD0,
+ 13346: 0x00006DF2,
+ 13347: 0x00006DD3,
+ 13348: 0x00006DFD,
+ 13349: 0x00006DD7,
+ 13350: 0x00006DCD,
+ 13351: 0x00006DE3,
+ 13352: 0x00006DBB,
+ 13353: 0x000070FA,
+ 13354: 0x0000710D,
+ 13355: 0x000070F7,
+ 13356: 0x00007117,
+ 13357: 0x000070F4,
+ 13358: 0x0000710C,
+ 13359: 0x000070F0,
+ 13360: 0x00007104,
+ 13361: 0x000070F3,
+ 13362: 0x00007110,
+ 13363: 0x000070FC,
+ 13364: 0x000070FF,
+ 13365: 0x00007106,
+ 13366: 0x00007113,
+ 13367: 0x00007100,
+ 13368: 0x000070F8,
+ 13369: 0x000070F6,
+ 13370: 0x0000710B,
+ 13371: 0x00007102,
+ 13372: 0x0000710E,
+ 13373: 0x0000727E,
+ 13374: 0x0000727B,
+ 13375: 0x0000727C,
+ 13376: 0x0000727F,
+ 13377: 0x0000731D,
+ 13378: 0x00007317,
+ 13379: 0x00007307,
+ 13380: 0x00007311,
+ 13381: 0x00007318,
+ 13382: 0x0000730A,
+ 13383: 0x00007308,
+ 13384: 0x000072FF,
+ 13385: 0x0000730F,
+ 13386: 0x0000731E,
+ 13387: 0x00007388,
+ 13388: 0x000073F6,
+ 13389: 0x000073F8,
+ 13390: 0x000073F5,
+ 13391: 0x00007404,
+ 13392: 0x00007401,
+ 13393: 0x000073FD,
+ 13394: 0x00007407,
+ 13395: 0x00007400,
+ 13396: 0x000073FA,
+ 13397: 0x000073FC,
+ 13398: 0x000073FF,
+ 13399: 0x0000740C,
+ 13400: 0x0000740B,
+ 13401: 0x000073F4,
+ 13402: 0x00007408,
+ 13403: 0x00007564,
+ 13404: 0x00007563,
+ 13405: 0x000075CE,
+ 13406: 0x000075D2,
+ 13407: 0x000075CF,
+ 13408: 0x000075CB,
+ 13409: 0x000075CC,
+ 13410: 0x000075D1,
+ 13411: 0x000075D0,
+ 13412: 0x0000768F,
+ 13413: 0x00007689,
+ 13414: 0x000076D3,
+ 13415: 0x00007739,
+ 13416: 0x0000772F,
+ 13417: 0x0000772D,
+ 13418: 0x00007731,
+ 13419: 0x00007732,
+ 13420: 0x00007734,
+ 13421: 0x00007733,
+ 13422: 0x0000773D,
+ 13423: 0x00007725,
+ 13424: 0x0000773B,
+ 13425: 0x00007735,
+ 13426: 0x00007848,
+ 13427: 0x00007852,
+ 13428: 0x00007849,
+ 13429: 0x0000784D,
+ 13430: 0x0000784A,
+ 13431: 0x0000784C,
+ 13432: 0x00007826,
+ 13433: 0x00007845,
+ 13434: 0x00007850,
+ 13435: 0x00007964,
+ 13436: 0x00007967,
+ 13437: 0x00007969,
+ 13438: 0x0000796A,
+ 13439: 0x00007963,
+ 13440: 0x0000796B,
+ 13441: 0x00007961,
+ 13442: 0x000079BB,
+ 13443: 0x000079FA,
+ 13444: 0x000079F8,
+ 13445: 0x000079F6,
+ 13446: 0x000079F7,
+ 13447: 0x00007A8F,
+ 13448: 0x00007A94,
+ 13449: 0x00007A90,
+ 13450: 0x00007B35,
+ 13451: 0x00007B47,
+ 13452: 0x00007B34,
+ 13453: 0x00007B25,
+ 13454: 0x00007B30,
+ 13455: 0x00007B22,
+ 13456: 0x00007B24,
+ 13457: 0x00007B33,
+ 13458: 0x00007B18,
+ 13459: 0x00007B2A,
+ 13460: 0x00007B1D,
+ 13461: 0x00007B31,
+ 13462: 0x00007B2B,
+ 13463: 0x00007B2D,
+ 13464: 0x00007B2F,
+ 13465: 0x00007B32,
+ 13466: 0x00007B38,
+ 13467: 0x00007B1A,
+ 13468: 0x00007B23,
+ 13469: 0x00007C94,
+ 13470: 0x00007C98,
+ 13471: 0x00007C96,
+ 13472: 0x00007CA3,
+ 13473: 0x00007D35,
+ 13474: 0x00007D3D,
+ 13475: 0x00007D38,
+ 13476: 0x00007D36,
+ 13477: 0x00007D3A,
+ 13478: 0x00007D45,
+ 13479: 0x00007D2C,
+ 13480: 0x00007D29,
+ 13481: 0x00007D41,
+ 13482: 0x00007D47,
+ 13483: 0x00007D3E,
+ 13484: 0x00007D3F,
+ 13485: 0x00007D4A,
+ 13486: 0x00007D3B,
+ 13487: 0x00007D28,
+ 13488: 0x00007F63,
+ 13489: 0x00007F95,
+ 13490: 0x00007F9C,
+ 13491: 0x00007F9D,
+ 13492: 0x00007F9B,
+ 13493: 0x00007FCA,
+ 13494: 0x00007FCB,
+ 13495: 0x00007FCD,
+ 13496: 0x00007FD0,
+ 13497: 0x00007FD1,
+ 13498: 0x00007FC7,
+ 13499: 0x00007FCF,
+ 13500: 0x00007FC9,
+ 13501: 0x0000801F,
+ 13502: 0x0000801E,
+ 13503: 0x0000801B,
+ 13504: 0x00008047,
+ 13505: 0x00008043,
+ 13506: 0x00008048,
+ 13507: 0x00008118,
+ 13508: 0x00008125,
+ 13509: 0x00008119,
+ 13510: 0x0000811B,
+ 13511: 0x0000812D,
+ 13512: 0x0000811F,
+ 13513: 0x0000812C,
+ 13514: 0x0000811E,
+ 13515: 0x00008121,
+ 13516: 0x00008115,
+ 13517: 0x00008127,
+ 13518: 0x0000811D,
+ 13519: 0x00008122,
+ 13520: 0x00008211,
+ 13521: 0x00008238,
+ 13522: 0x00008233,
+ 13523: 0x0000823A,
+ 13524: 0x00008234,
+ 13525: 0x00008232,
+ 13526: 0x00008274,
+ 13527: 0x00008390,
+ 13528: 0x000083A3,
+ 13529: 0x000083A8,
+ 13530: 0x0000838D,
+ 13531: 0x0000837A,
+ 13532: 0x00008373,
+ 13533: 0x000083A4,
+ 13534: 0x00008374,
+ 13535: 0x0000838F,
+ 13536: 0x00008381,
+ 13537: 0x00008395,
+ 13538: 0x00008399,
+ 13539: 0x00008375,
+ 13540: 0x00008394,
+ 13541: 0x000083A9,
+ 13542: 0x0000837D,
+ 13543: 0x00008383,
+ 13544: 0x0000838C,
+ 13545: 0x0000839D,
+ 13546: 0x0000839B,
+ 13547: 0x000083AA,
+ 13548: 0x0000838B,
+ 13549: 0x0000837E,
+ 13550: 0x000083A5,
+ 13551: 0x000083AF,
+ 13552: 0x00008388,
+ 13553: 0x00008397,
+ 13554: 0x000083B0,
+ 13555: 0x0000837F,
+ 13556: 0x000083A6,
+ 13557: 0x00008387,
+ 13558: 0x000083AE,
+ 13559: 0x00008376,
+ 13560: 0x0000839A,
+ 13561: 0x00008659,
+ 13562: 0x00008656,
+ 13563: 0x000086BF,
+ 13564: 0x000086B7,
+ 13565: 0x000086C2,
+ 13566: 0x000086C1,
+ 13567: 0x000086C5,
+ 13568: 0x000086BA,
+ 13569: 0x000086B0,
+ 13570: 0x000086C8,
+ 13571: 0x000086B9,
+ 13572: 0x000086B3,
+ 13573: 0x000086B8,
+ 13574: 0x000086CC,
+ 13575: 0x000086B4,
+ 13576: 0x000086BB,
+ 13577: 0x000086BC,
+ 13578: 0x000086C3,
+ 13579: 0x000086BD,
+ 13580: 0x000086BE,
+ 13581: 0x00008852,
+ 13582: 0x00008889,
+ 13583: 0x00008895,
+ 13584: 0x000088A8,
+ 13585: 0x000088A2,
+ 13586: 0x000088AA,
+ 13587: 0x0000889A,
+ 13588: 0x00008891,
+ 13589: 0x000088A1,
+ 13590: 0x0000889F,
+ 13591: 0x00008898,
+ 13592: 0x000088A7,
+ 13593: 0x00008899,
+ 13594: 0x0000889B,
+ 13595: 0x00008897,
+ 13596: 0x000088A4,
+ 13597: 0x000088AC,
+ 13598: 0x0000888C,
+ 13599: 0x00008893,
+ 13600: 0x0000888E,
+ 13601: 0x00008982,
+ 13602: 0x000089D6,
+ 13603: 0x000089D9,
+ 13604: 0x000089D5,
+ 13605: 0x00008A30,
+ 13606: 0x00008A27,
+ 13607: 0x00008A2C,
+ 13608: 0x00008A1E,
+ 13609: 0x00008C39,
+ 13610: 0x00008C3B,
+ 13611: 0x00008C5C,
+ 13612: 0x00008C5D,
+ 13613: 0x00008C7D,
+ 13614: 0x00008CA5,
+ 13615: 0x00008D7D,
+ 13616: 0x00008D7B,
+ 13617: 0x00008D79,
+ 13618: 0x00008DBC,
+ 13619: 0x00008DC2,
+ 13620: 0x00008DB9,
+ 13621: 0x00008DBF,
+ 13622: 0x00008DC1,
+ 13623: 0x00008ED8,
+ 13624: 0x00008EDE,
+ 13625: 0x00008EDD,
+ 13626: 0x00008EDC,
+ 13627: 0x00008ED7,
+ 13628: 0x00008EE0,
+ 13629: 0x00008EE1,
+ 13630: 0x00009024,
+ 13631: 0x0000900B,
+ 13632: 0x00009011,
+ 13633: 0x0000901C,
+ 13634: 0x0000900C,
+ 13635: 0x00009021,
+ 13636: 0x000090EF,
+ 13637: 0x000090EA,
+ 13638: 0x000090F0,
+ 13639: 0x000090F4,
+ 13640: 0x000090F2,
+ 13641: 0x000090F3,
+ 13642: 0x000090D4,
+ 13643: 0x000090EB,
+ 13644: 0x000090EC,
+ 13645: 0x000090E9,
+ 13646: 0x00009156,
+ 13647: 0x00009158,
+ 13648: 0x0000915A,
+ 13649: 0x00009153,
+ 13650: 0x00009155,
+ 13651: 0x000091EC,
+ 13652: 0x000091F4,
+ 13653: 0x000091F1,
+ 13654: 0x000091F3,
+ 13655: 0x000091F8,
+ 13656: 0x000091E4,
+ 13657: 0x000091F9,
+ 13658: 0x000091EA,
+ 13659: 0x000091EB,
+ 13660: 0x000091F7,
+ 13661: 0x000091E8,
+ 13662: 0x000091EE,
+ 13663: 0x0000957A,
+ 13664: 0x00009586,
+ 13665: 0x00009588,
+ 13666: 0x0000967C,
+ 13667: 0x0000966D,
+ 13668: 0x0000966B,
+ 13669: 0x00009671,
+ 13670: 0x0000966F,
+ 13671: 0x000096BF,
+ 13672: 0x0000976A,
+ 13673: 0x00009804,
+ 13674: 0x000098E5,
+ 13675: 0x00009997,
+ 13676: 0x0000509B,
+ 13677: 0x00005095,
+ 13678: 0x00005094,
+ 13679: 0x0000509E,
+ 13680: 0x0000508B,
+ 13681: 0x000050A3,
+ 13682: 0x00005083,
+ 13683: 0x0000508C,
+ 13684: 0x0000508E,
+ 13685: 0x0000509D,
+ 13686: 0x00005068,
+ 13687: 0x0000509C,
+ 13688: 0x00005092,
+ 13689: 0x00005082,
+ 13690: 0x00005087,
+ 13691: 0x0000515F,
+ 13692: 0x000051D4,
+ 13693: 0x00005312,
+ 13694: 0x00005311,
+ 13695: 0x000053A4,
+ 13696: 0x000053A7,
+ 13697: 0x00005591,
+ 13698: 0x000055A8,
+ 13699: 0x000055A5,
+ 13700: 0x000055AD,
+ 13701: 0x00005577,
+ 13702: 0x00005645,
+ 13703: 0x000055A2,
+ 13704: 0x00005593,
+ 13705: 0x00005588,
+ 13706: 0x0000558F,
+ 13707: 0x000055B5,
+ 13708: 0x00005581,
+ 13709: 0x000055A3,
+ 13710: 0x00005592,
+ 13711: 0x000055A4,
+ 13712: 0x0000557D,
+ 13713: 0x0000558C,
+ 13714: 0x000055A6,
+ 13715: 0x0000557F,
+ 13716: 0x00005595,
+ 13717: 0x000055A1,
+ 13718: 0x0000558E,
+ 13719: 0x0000570C,
+ 13720: 0x00005829,
+ 13721: 0x00005837,
+ 13722: 0x00005819,
+ 13723: 0x0000581E,
+ 13724: 0x00005827,
+ 13725: 0x00005823,
+ 13726: 0x00005828,
+ 13727: 0x000057F5,
+ 13728: 0x00005848,
+ 13729: 0x00005825,
+ 13730: 0x0000581C,
+ 13731: 0x0000581B,
+ 13732: 0x00005833,
+ 13733: 0x0000583F,
+ 13734: 0x00005836,
+ 13735: 0x0000582E,
+ 13736: 0x00005839,
+ 13737: 0x00005838,
+ 13738: 0x0000582D,
+ 13739: 0x0000582C,
+ 13740: 0x0000583B,
+ 13741: 0x00005961,
+ 13742: 0x00005AAF,
+ 13743: 0x00005A94,
+ 13744: 0x00005A9F,
+ 13745: 0x00005A7A,
+ 13746: 0x00005AA2,
+ 13747: 0x00005A9E,
+ 13748: 0x00005A78,
+ 13749: 0x00005AA6,
+ 13750: 0x00005A7C,
+ 13751: 0x00005AA5,
+ 13752: 0x00005AAC,
+ 13753: 0x00005A95,
+ 13754: 0x00005AAE,
+ 13755: 0x00005A37,
+ 13756: 0x00005A84,
+ 13757: 0x00005A8A,
+ 13758: 0x00005A97,
+ 13759: 0x00005A83,
+ 13760: 0x00005A8B,
+ 13761: 0x00005AA9,
+ 13762: 0x00005A7B,
+ 13763: 0x00005A7D,
+ 13764: 0x00005A8C,
+ 13765: 0x00005A9C,
+ 13766: 0x00005A8F,
+ 13767: 0x00005A93,
+ 13768: 0x00005A9D,
+ 13769: 0x00005BEA,
+ 13770: 0x00005BCD,
+ 13771: 0x00005BCB,
+ 13772: 0x00005BD4,
+ 13773: 0x00005BD1,
+ 13774: 0x00005BCA,
+ 13775: 0x00005BCE,
+ 13776: 0x00005C0C,
+ 13777: 0x00005C30,
+ 13778: 0x00005D37,
+ 13779: 0x00005D43,
+ 13780: 0x00005D6B,
+ 13781: 0x00005D41,
+ 13782: 0x00005D4B,
+ 13783: 0x00005D3F,
+ 13784: 0x00005D35,
+ 13785: 0x00005D51,
+ 13786: 0x00005D4E,
+ 13787: 0x00005D55,
+ 13788: 0x00005D33,
+ 13789: 0x00005D3A,
+ 13790: 0x00005D52,
+ 13791: 0x00005D3D,
+ 13792: 0x00005D31,
+ 13793: 0x00005D59,
+ 13794: 0x00005D42,
+ 13795: 0x00005D39,
+ 13796: 0x00005D49,
+ 13797: 0x00005D38,
+ 13798: 0x00005D3C,
+ 13799: 0x00005D32,
+ 13800: 0x00005D36,
+ 13801: 0x00005D40,
+ 13802: 0x00005D45,
+ 13803: 0x00005E44,
+ 13804: 0x00005E41,
+ 13805: 0x00005F58,
+ 13806: 0x00005FA6,
+ 13807: 0x00005FA5,
+ 13808: 0x00005FAB,
+ 13809: 0x000060C9,
+ 13810: 0x000060B9,
+ 13811: 0x000060CC,
+ 13812: 0x000060E2,
+ 13813: 0x000060CE,
+ 13814: 0x000060C4,
+ 13815: 0x00006114,
+ 13816: 0x000060F2,
+ 13817: 0x0000610A,
+ 13818: 0x00006116,
+ 13819: 0x00006105,
+ 13820: 0x000060F5,
+ 13821: 0x00006113,
+ 13822: 0x000060F8,
+ 13823: 0x000060FC,
+ 13824: 0x000060FE,
+ 13825: 0x000060C1,
+ 13826: 0x00006103,
+ 13827: 0x00006118,
+ 13828: 0x0000611D,
+ 13829: 0x00006110,
+ 13830: 0x000060FF,
+ 13831: 0x00006104,
+ 13832: 0x0000610B,
+ 13833: 0x0000624A,
+ 13834: 0x00006394,
+ 13835: 0x000063B1,
+ 13836: 0x000063B0,
+ 13837: 0x000063CE,
+ 13838: 0x000063E5,
+ 13839: 0x000063E8,
+ 13840: 0x000063EF,
+ 13841: 0x000063C3,
+ 13842: 0x0000649D,
+ 13843: 0x000063F3,
+ 13844: 0x000063CA,
+ 13845: 0x000063E0,
+ 13846: 0x000063F6,
+ 13847: 0x000063D5,
+ 13848: 0x000063F2,
+ 13849: 0x000063F5,
+ 13850: 0x00006461,
+ 13851: 0x000063DF,
+ 13852: 0x000063BE,
+ 13853: 0x000063DD,
+ 13854: 0x000063DC,
+ 13855: 0x000063C4,
+ 13856: 0x000063D8,
+ 13857: 0x000063D3,
+ 13858: 0x000063C2,
+ 13859: 0x000063C7,
+ 13860: 0x000063CC,
+ 13861: 0x000063CB,
+ 13862: 0x000063C8,
+ 13863: 0x000063F0,
+ 13864: 0x000063D7,
+ 13865: 0x000063D9,
+ 13866: 0x00006532,
+ 13867: 0x00006567,
+ 13868: 0x0000656A,
+ 13869: 0x00006564,
+ 13870: 0x0000655C,
+ 13871: 0x00006568,
+ 13872: 0x00006565,
+ 13873: 0x0000658C,
+ 13874: 0x0000659D,
+ 13875: 0x0000659E,
+ 13876: 0x000065AE,
+ 13877: 0x000065D0,
+ 13878: 0x000065D2,
+ 13879: 0x0000667C,
+ 13880: 0x0000666C,
+ 13881: 0x0000667B,
+ 13882: 0x00006680,
+ 13883: 0x00006671,
+ 13884: 0x00006679,
+ 13885: 0x0000666A,
+ 13886: 0x00006672,
+ 13887: 0x00006701,
+ 13888: 0x0000690C,
+ 13889: 0x000068D3,
+ 13890: 0x00006904,
+ 13891: 0x000068DC,
+ 13892: 0x0000692A,
+ 13893: 0x000068EC,
+ 13894: 0x000068EA,
+ 13895: 0x000068F1,
+ 13896: 0x0000690F,
+ 13897: 0x000068D6,
+ 13898: 0x000068F7,
+ 13899: 0x000068EB,
+ 13900: 0x000068E4,
+ 13901: 0x000068F6,
+ 13902: 0x00006913,
+ 13903: 0x00006910,
+ 13904: 0x000068F3,
+ 13905: 0x000068E1,
+ 13906: 0x00006907,
+ 13907: 0x000068CC,
+ 13908: 0x00006908,
+ 13909: 0x00006970,
+ 13910: 0x000068B4,
+ 13911: 0x00006911,
+ 13912: 0x000068EF,
+ 13913: 0x000068C6,
+ 13914: 0x00006914,
+ 13915: 0x000068F8,
+ 13916: 0x000068D0,
+ 13917: 0x000068FD,
+ 13918: 0x000068FC,
+ 13919: 0x000068E8,
+ 13920: 0x0000690B,
+ 13921: 0x0000690A,
+ 13922: 0x00006917,
+ 13923: 0x000068CE,
+ 13924: 0x000068C8,
+ 13925: 0x000068DD,
+ 13926: 0x000068DE,
+ 13927: 0x000068E6,
+ 13928: 0x000068F4,
+ 13929: 0x000068D1,
+ 13930: 0x00006906,
+ 13931: 0x000068D4,
+ 13932: 0x000068E9,
+ 13933: 0x00006915,
+ 13934: 0x00006925,
+ 13935: 0x000068C7,
+ 13936: 0x00006B39,
+ 13937: 0x00006B3B,
+ 13938: 0x00006B3F,
+ 13939: 0x00006B3C,
+ 13940: 0x00006B94,
+ 13941: 0x00006B97,
+ 13942: 0x00006B99,
+ 13943: 0x00006B95,
+ 13944: 0x00006BBD,
+ 13945: 0x00006BF0,
+ 13946: 0x00006BF2,
+ 13947: 0x00006BF3,
+ 13948: 0x00006C30,
+ 13949: 0x00006DFC,
+ 13950: 0x00006E46,
+ 13951: 0x00006E47,
+ 13952: 0x00006E1F,
+ 13953: 0x00006E49,
+ 13954: 0x00006E88,
+ 13955: 0x00006E3C,
+ 13956: 0x00006E3D,
+ 13957: 0x00006E45,
+ 13958: 0x00006E62,
+ 13959: 0x00006E2B,
+ 13960: 0x00006E3F,
+ 13961: 0x00006E41,
+ 13962: 0x00006E5D,
+ 13963: 0x00006E73,
+ 13964: 0x00006E1C,
+ 13965: 0x00006E33,
+ 13966: 0x00006E4B,
+ 13967: 0x00006E40,
+ 13968: 0x00006E51,
+ 13969: 0x00006E3B,
+ 13970: 0x00006E03,
+ 13971: 0x00006E2E,
+ 13972: 0x00006E5E,
+ 13973: 0x00006E68,
+ 13974: 0x00006E5C,
+ 13975: 0x00006E61,
+ 13976: 0x00006E31,
+ 13977: 0x00006E28,
+ 13978: 0x00006E60,
+ 13979: 0x00006E71,
+ 13980: 0x00006E6B,
+ 13981: 0x00006E39,
+ 13982: 0x00006E22,
+ 13983: 0x00006E30,
+ 13984: 0x00006E53,
+ 13985: 0x00006E65,
+ 13986: 0x00006E27,
+ 13987: 0x00006E78,
+ 13988: 0x00006E64,
+ 13989: 0x00006E77,
+ 13990: 0x00006E55,
+ 13991: 0x00006E79,
+ 13992: 0x00006E52,
+ 13993: 0x00006E66,
+ 13994: 0x00006E35,
+ 13995: 0x00006E36,
+ 13996: 0x00006E5A,
+ 13997: 0x00007120,
+ 13998: 0x0000711E,
+ 13999: 0x0000712F,
+ 14000: 0x000070FB,
+ 14001: 0x0000712E,
+ 14002: 0x00007131,
+ 14003: 0x00007123,
+ 14004: 0x00007125,
+ 14005: 0x00007122,
+ 14006: 0x00007132,
+ 14007: 0x0000711F,
+ 14008: 0x00007128,
+ 14009: 0x0000713A,
+ 14010: 0x0000711B,
+ 14011: 0x0000724B,
+ 14012: 0x0000725A,
+ 14013: 0x00007288,
+ 14014: 0x00007289,
+ 14015: 0x00007286,
+ 14016: 0x00007285,
+ 14017: 0x0000728B,
+ 14018: 0x00007312,
+ 14019: 0x0000730B,
+ 14020: 0x00007330,
+ 14021: 0x00007322,
+ 14022: 0x00007331,
+ 14023: 0x00007333,
+ 14024: 0x00007327,
+ 14025: 0x00007332,
+ 14026: 0x0000732D,
+ 14027: 0x00007326,
+ 14028: 0x00007323,
+ 14029: 0x00007335,
+ 14030: 0x0000730C,
+ 14031: 0x0000742E,
+ 14032: 0x0000742C,
+ 14033: 0x00007430,
+ 14034: 0x0000742B,
+ 14035: 0x00007416,
+ 14036: 0x0000741A,
+ 14037: 0x00007421,
+ 14038: 0x0000742D,
+ 14039: 0x00007431,
+ 14040: 0x00007424,
+ 14041: 0x00007423,
+ 14042: 0x0000741D,
+ 14043: 0x00007429,
+ 14044: 0x00007420,
+ 14045: 0x00007432,
+ 14046: 0x000074FB,
+ 14047: 0x0000752F,
+ 14048: 0x0000756F,
+ 14049: 0x0000756C,
+ 14050: 0x000075E7,
+ 14051: 0x000075DA,
+ 14052: 0x000075E1,
+ 14053: 0x000075E6,
+ 14054: 0x000075DD,
+ 14055: 0x000075DF,
+ 14056: 0x000075E4,
+ 14057: 0x000075D7,
+ 14058: 0x00007695,
+ 14059: 0x00007692,
+ 14060: 0x000076DA,
+ 14061: 0x00007746,
+ 14062: 0x00007747,
+ 14063: 0x00007744,
+ 14064: 0x0000774D,
+ 14065: 0x00007745,
+ 14066: 0x0000774A,
+ 14067: 0x0000774E,
+ 14068: 0x0000774B,
+ 14069: 0x0000774C,
+ 14070: 0x000077DE,
+ 14071: 0x000077EC,
+ 14072: 0x00007860,
+ 14073: 0x00007864,
+ 14074: 0x00007865,
+ 14075: 0x0000785C,
+ 14076: 0x0000786D,
+ 14077: 0x00007871,
+ 14078: 0x0000786A,
+ 14079: 0x0000786E,
+ 14080: 0x00007870,
+ 14081: 0x00007869,
+ 14082: 0x00007868,
+ 14083: 0x0000785E,
+ 14084: 0x00007862,
+ 14085: 0x00007974,
+ 14086: 0x00007973,
+ 14087: 0x00007972,
+ 14088: 0x00007970,
+ 14089: 0x00007A02,
+ 14090: 0x00007A0A,
+ 14091: 0x00007A03,
+ 14092: 0x00007A0C,
+ 14093: 0x00007A04,
+ 14094: 0x00007A99,
+ 14095: 0x00007AE6,
+ 14096: 0x00007AE4,
+ 14097: 0x00007B4A,
+ 14098: 0x00007B3B,
+ 14099: 0x00007B44,
+ 14100: 0x00007B48,
+ 14101: 0x00007B4C,
+ 14102: 0x00007B4E,
+ 14103: 0x00007B40,
+ 14104: 0x00007B58,
+ 14105: 0x00007B45,
+ 14106: 0x00007CA2,
+ 14107: 0x00007C9E,
+ 14108: 0x00007CA8,
+ 14109: 0x00007CA1,
+ 14110: 0x00007D58,
+ 14111: 0x00007D6F,
+ 14112: 0x00007D63,
+ 14113: 0x00007D53,
+ 14114: 0x00007D56,
+ 14115: 0x00007D67,
+ 14116: 0x00007D6A,
+ 14117: 0x00007D4F,
+ 14118: 0x00007D6D,
+ 14119: 0x00007D5C,
+ 14120: 0x00007D6B,
+ 14121: 0x00007D52,
+ 14122: 0x00007D54,
+ 14123: 0x00007D69,
+ 14124: 0x00007D51,
+ 14125: 0x00007D5F,
+ 14126: 0x00007D4E,
+ 14127: 0x00007F3E,
+ 14128: 0x00007F3F,
+ 14129: 0x00007F65,
+ 14130: 0x00007F66,
+ 14131: 0x00007FA2,
+ 14132: 0x00007FA0,
+ 14133: 0x00007FA1,
+ 14134: 0x00007FD7,
+ 14135: 0x00008051,
+ 14136: 0x0000804F,
+ 14137: 0x00008050,
+ 14138: 0x000080FE,
+ 14139: 0x000080D4,
+ 14140: 0x00008143,
+ 14141: 0x0000814A,
+ 14142: 0x00008152,
+ 14143: 0x0000814F,
+ 14144: 0x00008147,
+ 14145: 0x0000813D,
+ 14146: 0x0000814D,
+ 14147: 0x0000813A,
+ 14148: 0x000081E6,
+ 14149: 0x000081EE,
+ 14150: 0x000081F7,
+ 14151: 0x000081F8,
+ 14152: 0x000081F9,
+ 14153: 0x00008204,
+ 14154: 0x0000823C,
+ 14155: 0x0000823D,
+ 14156: 0x0000823F,
+ 14157: 0x00008275,
+ 14158: 0x0000833B,
+ 14159: 0x000083CF,
+ 14160: 0x000083F9,
+ 14161: 0x00008423,
+ 14162: 0x000083C0,
+ 14163: 0x000083E8,
+ 14164: 0x00008412,
+ 14165: 0x000083E7,
+ 14166: 0x000083E4,
+ 14167: 0x000083FC,
+ 14168: 0x000083F6,
+ 14169: 0x00008410,
+ 14170: 0x000083C6,
+ 14171: 0x000083C8,
+ 14172: 0x000083EB,
+ 14173: 0x000083E3,
+ 14174: 0x000083BF,
+ 14175: 0x00008401,
+ 14176: 0x000083DD,
+ 14177: 0x000083E5,
+ 14178: 0x000083D8,
+ 14179: 0x000083FF,
+ 14180: 0x000083E1,
+ 14181: 0x000083CB,
+ 14182: 0x000083CE,
+ 14183: 0x000083D6,
+ 14184: 0x000083F5,
+ 14185: 0x000083C9,
+ 14186: 0x00008409,
+ 14187: 0x0000840F,
+ 14188: 0x000083DE,
+ 14189: 0x00008411,
+ 14190: 0x00008406,
+ 14191: 0x000083C2,
+ 14192: 0x000083F3,
+ 14193: 0x000083D5,
+ 14194: 0x000083FA,
+ 14195: 0x000083C7,
+ 14196: 0x000083D1,
+ 14197: 0x000083EA,
+ 14198: 0x00008413,
+ 14199: 0x000083C3,
+ 14200: 0x000083EC,
+ 14201: 0x000083EE,
+ 14202: 0x000083C4,
+ 14203: 0x000083FB,
+ 14204: 0x000083D7,
+ 14205: 0x000083E2,
+ 14206: 0x0000841B,
+ 14207: 0x000083DB,
+ 14208: 0x000083FE,
+ 14209: 0x000086D8,
+ 14210: 0x000086E2,
+ 14211: 0x000086E6,
+ 14212: 0x000086D3,
+ 14213: 0x000086E3,
+ 14214: 0x000086DA,
+ 14215: 0x000086EA,
+ 14216: 0x000086DD,
+ 14217: 0x000086EB,
+ 14218: 0x000086DC,
+ 14219: 0x000086EC,
+ 14220: 0x000086E9,
+ 14221: 0x000086D7,
+ 14222: 0x000086E8,
+ 14223: 0x000086D1,
+ 14224: 0x00008848,
+ 14225: 0x00008856,
+ 14226: 0x00008855,
+ 14227: 0x000088BA,
+ 14228: 0x000088D7,
+ 14229: 0x000088B9,
+ 14230: 0x000088B8,
+ 14231: 0x000088C0,
+ 14232: 0x000088BE,
+ 14233: 0x000088B6,
+ 14234: 0x000088BC,
+ 14235: 0x000088B7,
+ 14236: 0x000088BD,
+ 14237: 0x000088B2,
+ 14238: 0x00008901,
+ 14239: 0x000088C9,
+ 14240: 0x00008995,
+ 14241: 0x00008998,
+ 14242: 0x00008997,
+ 14243: 0x000089DD,
+ 14244: 0x000089DA,
+ 14245: 0x000089DB,
+ 14246: 0x00008A4E,
+ 14247: 0x00008A4D,
+ 14248: 0x00008A39,
+ 14249: 0x00008A59,
+ 14250: 0x00008A40,
+ 14251: 0x00008A57,
+ 14252: 0x00008A58,
+ 14253: 0x00008A44,
+ 14254: 0x00008A45,
+ 14255: 0x00008A52,
+ 14256: 0x00008A48,
+ 14257: 0x00008A51,
+ 14258: 0x00008A4A,
+ 14259: 0x00008A4C,
+ 14260: 0x00008A4F,
+ 14261: 0x00008C5F,
+ 14262: 0x00008C81,
+ 14263: 0x00008C80,
+ 14264: 0x00008CBA,
+ 14265: 0x00008CBE,
+ 14266: 0x00008CB0,
+ 14267: 0x00008CB9,
+ 14268: 0x00008CB5,
+ 14269: 0x00008D84,
+ 14270: 0x00008D80,
+ 14271: 0x00008D89,
+ 14272: 0x00008DD8,
+ 14273: 0x00008DD3,
+ 14274: 0x00008DCD,
+ 14275: 0x00008DC7,
+ 14276: 0x00008DD6,
+ 14277: 0x00008DDC,
+ 14278: 0x00008DCF,
+ 14279: 0x00008DD5,
+ 14280: 0x00008DD9,
+ 14281: 0x00008DC8,
+ 14282: 0x00008DD7,
+ 14283: 0x00008DC5,
+ 14284: 0x00008EEF,
+ 14285: 0x00008EF7,
+ 14286: 0x00008EFA,
+ 14287: 0x00008EF9,
+ 14288: 0x00008EE6,
+ 14289: 0x00008EEE,
+ 14290: 0x00008EE5,
+ 14291: 0x00008EF5,
+ 14292: 0x00008EE7,
+ 14293: 0x00008EE8,
+ 14294: 0x00008EF6,
+ 14295: 0x00008EEB,
+ 14296: 0x00008EF1,
+ 14297: 0x00008EEC,
+ 14298: 0x00008EF4,
+ 14299: 0x00008EE9,
+ 14300: 0x0000902D,
+ 14301: 0x00009034,
+ 14302: 0x0000902F,
+ 14303: 0x00009106,
+ 14304: 0x0000912C,
+ 14305: 0x00009104,
+ 14306: 0x000090FF,
+ 14307: 0x000090FC,
+ 14308: 0x00009108,
+ 14309: 0x000090F9,
+ 14310: 0x000090FB,
+ 14311: 0x00009101,
+ 14312: 0x00009100,
+ 14313: 0x00009107,
+ 14314: 0x00009105,
+ 14315: 0x00009103,
+ 14316: 0x00009161,
+ 14317: 0x00009164,
+ 14318: 0x0000915F,
+ 14319: 0x00009162,
+ 14320: 0x00009160,
+ 14321: 0x00009201,
+ 14322: 0x0000920A,
+ 14323: 0x00009225,
+ 14324: 0x00009203,
+ 14325: 0x0000921A,
+ 14326: 0x00009226,
+ 14327: 0x0000920F,
+ 14328: 0x0000920C,
+ 14329: 0x00009200,
+ 14330: 0x00009212,
+ 14331: 0x000091FF,
+ 14332: 0x000091FD,
+ 14333: 0x00009206,
+ 14334: 0x00009204,
+ 14335: 0x00009227,
+ 14336: 0x00009202,
+ 14337: 0x0000921C,
+ 14338: 0x00009224,
+ 14339: 0x00009219,
+ 14340: 0x00009217,
+ 14341: 0x00009205,
+ 14342: 0x00009216,
+ 14343: 0x0000957B,
+ 14344: 0x0000958D,
+ 14345: 0x0000958C,
+ 14346: 0x00009590,
+ 14347: 0x00009687,
+ 14348: 0x0000967E,
+ 14349: 0x00009688,
+ 14350: 0x00009689,
+ 14351: 0x00009683,
+ 14352: 0x00009680,
+ 14353: 0x000096C2,
+ 14354: 0x000096C8,
+ 14355: 0x000096C3,
+ 14356: 0x000096F1,
+ 14357: 0x000096F0,
+ 14358: 0x0000976C,
+ 14359: 0x00009770,
+ 14360: 0x0000976E,
+ 14361: 0x00009807,
+ 14362: 0x000098A9,
+ 14363: 0x000098EB,
+ 14364: 0x00009CE6,
+ 14365: 0x00009EF9,
+ 14366: 0x00004E83,
+ 14367: 0x00004E84,
+ 14368: 0x00004EB6,
+ 14369: 0x000050BD,
+ 14370: 0x000050BF,
+ 14371: 0x000050C6,
+ 14372: 0x000050AE,
+ 14373: 0x000050C4,
+ 14374: 0x000050CA,
+ 14375: 0x000050B4,
+ 14376: 0x000050C8,
+ 14377: 0x000050C2,
+ 14378: 0x000050B0,
+ 14379: 0x000050C1,
+ 14380: 0x000050BA,
+ 14381: 0x000050B1,
+ 14382: 0x000050CB,
+ 14383: 0x000050C9,
+ 14384: 0x000050B6,
+ 14385: 0x000050B8,
+ 14386: 0x000051D7,
+ 14387: 0x0000527A,
+ 14388: 0x00005278,
+ 14389: 0x0000527B,
+ 14390: 0x0000527C,
+ 14391: 0x000055C3,
+ 14392: 0x000055DB,
+ 14393: 0x000055CC,
+ 14394: 0x000055D0,
+ 14395: 0x000055CB,
+ 14396: 0x000055CA,
+ 14397: 0x000055DD,
+ 14398: 0x000055C0,
+ 14399: 0x000055D4,
+ 14400: 0x000055C4,
+ 14401: 0x000055E9,
+ 14402: 0x000055BF,
+ 14403: 0x000055D2,
+ 14404: 0x0000558D,
+ 14405: 0x000055CF,
+ 14406: 0x000055D5,
+ 14407: 0x000055E2,
+ 14408: 0x000055D6,
+ 14409: 0x000055C8,
+ 14410: 0x000055F2,
+ 14411: 0x000055CD,
+ 14412: 0x000055D9,
+ 14413: 0x000055C2,
+ 14414: 0x00005714,
+ 14415: 0x00005853,
+ 14416: 0x00005868,
+ 14417: 0x00005864,
+ 14418: 0x0000584F,
+ 14419: 0x0000584D,
+ 14420: 0x00005849,
+ 14421: 0x0000586F,
+ 14422: 0x00005855,
+ 14423: 0x0000584E,
+ 14424: 0x0000585D,
+ 14425: 0x00005859,
+ 14426: 0x00005865,
+ 14427: 0x0000585B,
+ 14428: 0x0000583D,
+ 14429: 0x00005863,
+ 14430: 0x00005871,
+ 14431: 0x000058FC,
+ 14432: 0x00005AC7,
+ 14433: 0x00005AC4,
+ 14434: 0x00005ACB,
+ 14435: 0x00005ABA,
+ 14436: 0x00005AB8,
+ 14437: 0x00005AB1,
+ 14438: 0x00005AB5,
+ 14439: 0x00005AB0,
+ 14440: 0x00005ABF,
+ 14441: 0x00005AC8,
+ 14442: 0x00005ABB,
+ 14443: 0x00005AC6,
+ 14444: 0x00005AB7,
+ 14445: 0x00005AC0,
+ 14446: 0x00005ACA,
+ 14447: 0x00005AB4,
+ 14448: 0x00005AB6,
+ 14449: 0x00005ACD,
+ 14450: 0x00005AB9,
+ 14451: 0x00005A90,
+ 14452: 0x00005BD6,
+ 14453: 0x00005BD8,
+ 14454: 0x00005BD9,
+ 14455: 0x00005C1F,
+ 14456: 0x00005C33,
+ 14457: 0x00005D71,
+ 14458: 0x00005D63,
+ 14459: 0x00005D4A,
+ 14460: 0x00005D65,
+ 14461: 0x00005D72,
+ 14462: 0x00005D6C,
+ 14463: 0x00005D5E,
+ 14464: 0x00005D68,
+ 14465: 0x00005D67,
+ 14466: 0x00005D62,
+ 14467: 0x00005DF0,
+ 14468: 0x00005E4F,
+ 14469: 0x00005E4E,
+ 14470: 0x00005E4A,
+ 14471: 0x00005E4D,
+ 14472: 0x00005E4B,
+ 14473: 0x00005EC5,
+ 14474: 0x00005ECC,
+ 14475: 0x00005EC6,
+ 14476: 0x00005ECB,
+ 14477: 0x00005EC7,
+ 14478: 0x00005F40,
+ 14479: 0x00005FAF,
+ 14480: 0x00005FAD,
+ 14481: 0x000060F7,
+ 14482: 0x00006149,
+ 14483: 0x0000614A,
+ 14484: 0x0000612B,
+ 14485: 0x00006145,
+ 14486: 0x00006136,
+ 14487: 0x00006132,
+ 14488: 0x0000612E,
+ 14489: 0x00006146,
+ 14490: 0x0000612F,
+ 14491: 0x0000614F,
+ 14492: 0x00006129,
+ 14493: 0x00006140,
+ 14494: 0x00006220,
+ 14495: 0x00009168,
+ 14496: 0x00006223,
+ 14497: 0x00006225,
+ 14498: 0x00006224,
+ 14499: 0x000063C5,
+ 14500: 0x000063F1,
+ 14501: 0x000063EB,
+ 14502: 0x00006410,
+ 14503: 0x00006412,
+ 14504: 0x00006409,
+ 14505: 0x00006420,
+ 14506: 0x00006424,
+ 14507: 0x00006433,
+ 14508: 0x00006443,
+ 14509: 0x0000641F,
+ 14510: 0x00006415,
+ 14511: 0x00006418,
+ 14512: 0x00006439,
+ 14513: 0x00006437,
+ 14514: 0x00006422,
+ 14515: 0x00006423,
+ 14516: 0x0000640C,
+ 14517: 0x00006426,
+ 14518: 0x00006430,
+ 14519: 0x00006428,
+ 14520: 0x00006441,
+ 14521: 0x00006435,
+ 14522: 0x0000642F,
+ 14523: 0x0000640A,
+ 14524: 0x0000641A,
+ 14525: 0x00006440,
+ 14526: 0x00006425,
+ 14527: 0x00006427,
+ 14528: 0x0000640B,
+ 14529: 0x000063E7,
+ 14530: 0x0000641B,
+ 14531: 0x0000642E,
+ 14532: 0x00006421,
+ 14533: 0x0000640E,
+ 14534: 0x0000656F,
+ 14535: 0x00006592,
+ 14536: 0x000065D3,
+ 14537: 0x00006686,
+ 14538: 0x0000668C,
+ 14539: 0x00006695,
+ 14540: 0x00006690,
+ 14541: 0x0000668B,
+ 14542: 0x0000668A,
+ 14543: 0x00006699,
+ 14544: 0x00006694,
+ 14545: 0x00006678,
+ 14546: 0x00006720,
+ 14547: 0x00006966,
+ 14548: 0x0000695F,
+ 14549: 0x00006938,
+ 14550: 0x0000694E,
+ 14551: 0x00006962,
+ 14552: 0x00006971,
+ 14553: 0x0000693F,
+ 14554: 0x00006945,
+ 14555: 0x0000696A,
+ 14556: 0x00006939,
+ 14557: 0x00006942,
+ 14558: 0x00006957,
+ 14559: 0x00006959,
+ 14560: 0x0000697A,
+ 14561: 0x00006948,
+ 14562: 0x00006949,
+ 14563: 0x00006935,
+ 14564: 0x0000696C,
+ 14565: 0x00006933,
+ 14566: 0x0000693D,
+ 14567: 0x00006965,
+ 14568: 0x000068F0,
+ 14569: 0x00006978,
+ 14570: 0x00006934,
+ 14571: 0x00006969,
+ 14572: 0x00006940,
+ 14573: 0x0000696F,
+ 14574: 0x00006944,
+ 14575: 0x00006976,
+ 14576: 0x00006958,
+ 14577: 0x00006941,
+ 14578: 0x00006974,
+ 14579: 0x0000694C,
+ 14580: 0x0000693B,
+ 14581: 0x0000694B,
+ 14582: 0x00006937,
+ 14583: 0x0000695C,
+ 14584: 0x0000694F,
+ 14585: 0x00006951,
+ 14586: 0x00006932,
+ 14587: 0x00006952,
+ 14588: 0x0000692F,
+ 14589: 0x0000697B,
+ 14590: 0x0000693C,
+ 14591: 0x00006B46,
+ 14592: 0x00006B45,
+ 14593: 0x00006B43,
+ 14594: 0x00006B42,
+ 14595: 0x00006B48,
+ 14596: 0x00006B41,
+ 14597: 0x00006B9B,
+ 14598: 0x0000FA0D,
+ 14599: 0x00006BFB,
+ 14600: 0x00006BFC,
+ 14601: 0x00006BF9,
+ 14602: 0x00006BF7,
+ 14603: 0x00006BF8,
+ 14604: 0x00006E9B,
+ 14605: 0x00006ED6,
+ 14606: 0x00006EC8,
+ 14607: 0x00006E8F,
+ 14608: 0x00006EC0,
+ 14609: 0x00006E9F,
+ 14610: 0x00006E93,
+ 14611: 0x00006E94,
+ 14612: 0x00006EA0,
+ 14613: 0x00006EB1,
+ 14614: 0x00006EB9,
+ 14615: 0x00006EC6,
+ 14616: 0x00006ED2,
+ 14617: 0x00006EBD,
+ 14618: 0x00006EC1,
+ 14619: 0x00006E9E,
+ 14620: 0x00006EC9,
+ 14621: 0x00006EB7,
+ 14622: 0x00006EB0,
+ 14623: 0x00006ECD,
+ 14624: 0x00006EA6,
+ 14625: 0x00006ECF,
+ 14626: 0x00006EB2,
+ 14627: 0x00006EBE,
+ 14628: 0x00006EC3,
+ 14629: 0x00006EDC,
+ 14630: 0x00006ED8,
+ 14631: 0x00006E99,
+ 14632: 0x00006E92,
+ 14633: 0x00006E8E,
+ 14634: 0x00006E8D,
+ 14635: 0x00006EA4,
+ 14636: 0x00006EA1,
+ 14637: 0x00006EBF,
+ 14638: 0x00006EB3,
+ 14639: 0x00006ED0,
+ 14640: 0x00006ECA,
+ 14641: 0x00006E97,
+ 14642: 0x00006EAE,
+ 14643: 0x00006EA3,
+ 14644: 0x00007147,
+ 14645: 0x00007154,
+ 14646: 0x00007152,
+ 14647: 0x00007163,
+ 14648: 0x00007160,
+ 14649: 0x00007141,
+ 14650: 0x0000715D,
+ 14651: 0x00007162,
+ 14652: 0x00007172,
+ 14653: 0x00007178,
+ 14654: 0x0000716A,
+ 14655: 0x00007161,
+ 14656: 0x00007142,
+ 14657: 0x00007158,
+ 14658: 0x00007143,
+ 14659: 0x0000714B,
+ 14660: 0x00007170,
+ 14661: 0x0000715F,
+ 14662: 0x00007150,
+ 14663: 0x00007153,
+ 14664: 0x00007144,
+ 14665: 0x0000714D,
+ 14666: 0x0000715A,
+ 14667: 0x0000724F,
+ 14668: 0x0000728D,
+ 14669: 0x0000728C,
+ 14670: 0x00007291,
+ 14671: 0x00007290,
+ 14672: 0x0000728E,
+ 14673: 0x0000733C,
+ 14674: 0x00007342,
+ 14675: 0x0000733B,
+ 14676: 0x0000733A,
+ 14677: 0x00007340,
+ 14678: 0x0000734A,
+ 14679: 0x00007349,
+ 14680: 0x00007444,
+ 14681: 0x0000744A,
+ 14682: 0x0000744B,
+ 14683: 0x00007452,
+ 14684: 0x00007451,
+ 14685: 0x00007457,
+ 14686: 0x00007440,
+ 14687: 0x0000744F,
+ 14688: 0x00007450,
+ 14689: 0x0000744E,
+ 14690: 0x00007442,
+ 14691: 0x00007446,
+ 14692: 0x0000744D,
+ 14693: 0x00007454,
+ 14694: 0x000074E1,
+ 14695: 0x000074FF,
+ 14696: 0x000074FE,
+ 14697: 0x000074FD,
+ 14698: 0x0000751D,
+ 14699: 0x00007579,
+ 14700: 0x00007577,
+ 14701: 0x00006983,
+ 14702: 0x000075EF,
+ 14703: 0x0000760F,
+ 14704: 0x00007603,
+ 14705: 0x000075F7,
+ 14706: 0x000075FE,
+ 14707: 0x000075FC,
+ 14708: 0x000075F9,
+ 14709: 0x000075F8,
+ 14710: 0x00007610,
+ 14711: 0x000075FB,
+ 14712: 0x000075F6,
+ 14713: 0x000075ED,
+ 14714: 0x000075F5,
+ 14715: 0x000075FD,
+ 14716: 0x00007699,
+ 14717: 0x000076B5,
+ 14718: 0x000076DD,
+ 14719: 0x00007755,
+ 14720: 0x0000775F,
+ 14721: 0x00007760,
+ 14722: 0x00007752,
+ 14723: 0x00007756,
+ 14724: 0x0000775A,
+ 14725: 0x00007769,
+ 14726: 0x00007767,
+ 14727: 0x00007754,
+ 14728: 0x00007759,
+ 14729: 0x0000776D,
+ 14730: 0x000077E0,
+ 14731: 0x00007887,
+ 14732: 0x0000789A,
+ 14733: 0x00007894,
+ 14734: 0x0000788F,
+ 14735: 0x00007884,
+ 14736: 0x00007895,
+ 14737: 0x00007885,
+ 14738: 0x00007886,
+ 14739: 0x000078A1,
+ 14740: 0x00007883,
+ 14741: 0x00007879,
+ 14742: 0x00007899,
+ 14743: 0x00007880,
+ 14744: 0x00007896,
+ 14745: 0x0000787B,
+ 14746: 0x0000797C,
+ 14747: 0x00007982,
+ 14748: 0x0000797D,
+ 14749: 0x00007979,
+ 14750: 0x00007A11,
+ 14751: 0x00007A18,
+ 14752: 0x00007A19,
+ 14753: 0x00007A12,
+ 14754: 0x00007A17,
+ 14755: 0x00007A15,
+ 14756: 0x00007A22,
+ 14757: 0x00007A13,
+ 14758: 0x00007A1B,
+ 14759: 0x00007A10,
+ 14760: 0x00007AA3,
+ 14761: 0x00007AA2,
+ 14762: 0x00007A9E,
+ 14763: 0x00007AEB,
+ 14764: 0x00007B66,
+ 14765: 0x00007B64,
+ 14766: 0x00007B6D,
+ 14767: 0x00007B74,
+ 14768: 0x00007B69,
+ 14769: 0x00007B72,
+ 14770: 0x00007B65,
+ 14771: 0x00007B73,
+ 14772: 0x00007B71,
+ 14773: 0x00007B70,
+ 14774: 0x00007B61,
+ 14775: 0x00007B78,
+ 14776: 0x00007B76,
+ 14777: 0x00007B63,
+ 14778: 0x00007CB2,
+ 14779: 0x00007CB4,
+ 14780: 0x00007CAF,
+ 14781: 0x00007D88,
+ 14782: 0x00007D86,
+ 14783: 0x00007D80,
+ 14784: 0x00007D8D,
+ 14785: 0x00007D7F,
+ 14786: 0x00007D85,
+ 14787: 0x00007D7A,
+ 14788: 0x00007D8E,
+ 14789: 0x00007D7B,
+ 14790: 0x00007D83,
+ 14791: 0x00007D7C,
+ 14792: 0x00007D8C,
+ 14793: 0x00007D94,
+ 14794: 0x00007D84,
+ 14795: 0x00007D7D,
+ 14796: 0x00007D92,
+ 14797: 0x00007F6D,
+ 14798: 0x00007F6B,
+ 14799: 0x00007F67,
+ 14800: 0x00007F68,
+ 14801: 0x00007F6C,
+ 14802: 0x00007FA6,
+ 14803: 0x00007FA5,
+ 14804: 0x00007FA7,
+ 14805: 0x00007FDB,
+ 14806: 0x00007FDC,
+ 14807: 0x00008021,
+ 14808: 0x00008164,
+ 14809: 0x00008160,
+ 14810: 0x00008177,
+ 14811: 0x0000815C,
+ 14812: 0x00008169,
+ 14813: 0x0000815B,
+ 14814: 0x00008162,
+ 14815: 0x00008172,
+ 14816: 0x00006721,
+ 14817: 0x0000815E,
+ 14818: 0x00008176,
+ 14819: 0x00008167,
+ 14820: 0x0000816F,
+ 14821: 0x00008144,
+ 14822: 0x00008161,
+ 14823: 0x0000821D,
+ 14824: 0x00008249,
+ 14825: 0x00008244,
+ 14826: 0x00008240,
+ 14827: 0x00008242,
+ 14828: 0x00008245,
+ 14829: 0x000084F1,
+ 14830: 0x0000843F,
+ 14831: 0x00008456,
+ 14832: 0x00008476,
+ 14833: 0x00008479,
+ 14834: 0x0000848F,
+ 14835: 0x0000848D,
+ 14836: 0x00008465,
+ 14837: 0x00008451,
+ 14838: 0x00008440,
+ 14839: 0x00008486,
+ 14840: 0x00008467,
+ 14841: 0x00008430,
+ 14842: 0x0000844D,
+ 14843: 0x0000847D,
+ 14844: 0x0000845A,
+ 14845: 0x00008459,
+ 14846: 0x00008474,
+ 14847: 0x00008473,
+ 14848: 0x0000845D,
+ 14849: 0x00008507,
+ 14850: 0x0000845E,
+ 14851: 0x00008437,
+ 14852: 0x0000843A,
+ 14853: 0x00008434,
+ 14854: 0x0000847A,
+ 14855: 0x00008443,
+ 14856: 0x00008478,
+ 14857: 0x00008432,
+ 14858: 0x00008445,
+ 14859: 0x00008429,
+ 14860: 0x000083D9,
+ 14861: 0x0000844B,
+ 14862: 0x0000842F,
+ 14863: 0x00008442,
+ 14864: 0x0000842D,
+ 14865: 0x0000845F,
+ 14866: 0x00008470,
+ 14867: 0x00008439,
+ 14868: 0x0000844E,
+ 14869: 0x0000844C,
+ 14870: 0x00008452,
+ 14871: 0x0000846F,
+ 14872: 0x000084C5,
+ 14873: 0x0000848E,
+ 14874: 0x0000843B,
+ 14875: 0x00008447,
+ 14876: 0x00008436,
+ 14877: 0x00008433,
+ 14878: 0x00008468,
+ 14879: 0x0000847E,
+ 14880: 0x00008444,
+ 14881: 0x0000842B,
+ 14882: 0x00008460,
+ 14883: 0x00008454,
+ 14884: 0x0000846E,
+ 14885: 0x00008450,
+ 14886: 0x0000870B,
+ 14887: 0x00008704,
+ 14888: 0x000086F7,
+ 14889: 0x0000870C,
+ 14890: 0x000086FA,
+ 14891: 0x000086D6,
+ 14892: 0x000086F5,
+ 14893: 0x0000874D,
+ 14894: 0x000086F8,
+ 14895: 0x0000870E,
+ 14896: 0x00008709,
+ 14897: 0x00008701,
+ 14898: 0x000086F6,
+ 14899: 0x0000870D,
+ 14900: 0x00008705,
+ 14901: 0x000088D6,
+ 14902: 0x000088CB,
+ 14903: 0x000088CD,
+ 14904: 0x000088CE,
+ 14905: 0x000088DE,
+ 14906: 0x000088DB,
+ 14907: 0x000088DA,
+ 14908: 0x000088CC,
+ 14909: 0x000088D0,
+ 14910: 0x00008985,
+ 14911: 0x0000899B,
+ 14912: 0x000089DF,
+ 14913: 0x000089E5,
+ 14914: 0x000089E4,
+ 14915: 0x000089E1,
+ 14916: 0x000089E0,
+ 14917: 0x000089E2,
+ 14918: 0x000089DC,
+ 14919: 0x000089E6,
+ 14920: 0x00008A76,
+ 14921: 0x00008A86,
+ 14922: 0x00008A7F,
+ 14923: 0x00008A61,
+ 14924: 0x00008A3F,
+ 14925: 0x00008A77,
+ 14926: 0x00008A82,
+ 14927: 0x00008A84,
+ 14928: 0x00008A75,
+ 14929: 0x00008A83,
+ 14930: 0x00008A81,
+ 14931: 0x00008A74,
+ 14932: 0x00008A7A,
+ 14933: 0x00008C3C,
+ 14934: 0x00008C4B,
+ 14935: 0x00008C4A,
+ 14936: 0x00008C65,
+ 14937: 0x00008C64,
+ 14938: 0x00008C66,
+ 14939: 0x00008C86,
+ 14940: 0x00008C84,
+ 14941: 0x00008C85,
+ 14942: 0x00008CCC,
+ 14943: 0x00008D68,
+ 14944: 0x00008D69,
+ 14945: 0x00008D91,
+ 14946: 0x00008D8C,
+ 14947: 0x00008D8E,
+ 14948: 0x00008D8F,
+ 14949: 0x00008D8D,
+ 14950: 0x00008D93,
+ 14951: 0x00008D94,
+ 14952: 0x00008D90,
+ 14953: 0x00008D92,
+ 14954: 0x00008DF0,
+ 14955: 0x00008DE0,
+ 14956: 0x00008DEC,
+ 14957: 0x00008DF1,
+ 14958: 0x00008DEE,
+ 14959: 0x00008DD0,
+ 14960: 0x00008DE9,
+ 14961: 0x00008DE3,
+ 14962: 0x00008DE2,
+ 14963: 0x00008DE7,
+ 14964: 0x00008DF2,
+ 14965: 0x00008DEB,
+ 14966: 0x00008DF4,
+ 14967: 0x00008F06,
+ 14968: 0x00008EFF,
+ 14969: 0x00008F01,
+ 14970: 0x00008F00,
+ 14971: 0x00008F05,
+ 14972: 0x00008F07,
+ 14973: 0x00008F08,
+ 14974: 0x00008F02,
+ 14975: 0x00008F0B,
+ 14976: 0x00009052,
+ 14977: 0x0000903F,
+ 14978: 0x00009044,
+ 14979: 0x00009049,
+ 14980: 0x0000903D,
+ 14981: 0x00009110,
+ 14982: 0x0000910D,
+ 14983: 0x0000910F,
+ 14984: 0x00009111,
+ 14985: 0x00009116,
+ 14986: 0x00009114,
+ 14987: 0x0000910B,
+ 14988: 0x0000910E,
+ 14989: 0x0000916E,
+ 14990: 0x0000916F,
+ 14991: 0x00009248,
+ 14992: 0x00009252,
+ 14993: 0x00009230,
+ 14994: 0x0000923A,
+ 14995: 0x00009266,
+ 14996: 0x00009233,
+ 14997: 0x00009265,
+ 14998: 0x0000925E,
+ 14999: 0x00009283,
+ 15000: 0x0000922E,
+ 15001: 0x0000924A,
+ 15002: 0x00009246,
+ 15003: 0x0000926D,
+ 15004: 0x0000926C,
+ 15005: 0x0000924F,
+ 15006: 0x00009260,
+ 15007: 0x00009267,
+ 15008: 0x0000926F,
+ 15009: 0x00009236,
+ 15010: 0x00009261,
+ 15011: 0x00009270,
+ 15012: 0x00009231,
+ 15013: 0x00009254,
+ 15014: 0x00009263,
+ 15015: 0x00009250,
+ 15016: 0x00009272,
+ 15017: 0x0000924E,
+ 15018: 0x00009253,
+ 15019: 0x0000924C,
+ 15020: 0x00009256,
+ 15021: 0x00009232,
+ 15022: 0x0000959F,
+ 15023: 0x0000959C,
+ 15024: 0x0000959E,
+ 15025: 0x0000959B,
+ 15026: 0x00009692,
+ 15027: 0x00009693,
+ 15028: 0x00009691,
+ 15029: 0x00009697,
+ 15030: 0x000096CE,
+ 15031: 0x000096FA,
+ 15032: 0x000096FD,
+ 15033: 0x000096F8,
+ 15034: 0x000096F5,
+ 15035: 0x00009773,
+ 15036: 0x00009777,
+ 15037: 0x00009778,
+ 15038: 0x00009772,
+ 15039: 0x0000980F,
+ 15040: 0x0000980D,
+ 15041: 0x0000980E,
+ 15042: 0x000098AC,
+ 15043: 0x000098F6,
+ 15044: 0x000098F9,
+ 15045: 0x000099AF,
+ 15046: 0x000099B2,
+ 15047: 0x000099B0,
+ 15048: 0x000099B5,
+ 15049: 0x00009AAD,
+ 15050: 0x00009AAB,
+ 15051: 0x00009B5B,
+ 15052: 0x00009CEA,
+ 15053: 0x00009CED,
+ 15054: 0x00009CE7,
+ 15055: 0x00009E80,
+ 15056: 0x00009EFD,
+ 15057: 0x000050E6,
+ 15058: 0x000050D4,
+ 15059: 0x000050D7,
+ 15060: 0x000050E8,
+ 15061: 0x000050F3,
+ 15062: 0x000050DB,
+ 15063: 0x000050EA,
+ 15064: 0x000050DD,
+ 15065: 0x000050E4,
+ 15066: 0x000050D3,
+ 15067: 0x000050EC,
+ 15068: 0x000050F0,
+ 15069: 0x000050EF,
+ 15070: 0x000050E3,
+ 15071: 0x000050E0,
+ 15072: 0x000051D8,
+ 15073: 0x00005280,
+ 15074: 0x00005281,
+ 15075: 0x000052E9,
+ 15076: 0x000052EB,
+ 15077: 0x00005330,
+ 15078: 0x000053AC,
+ 15079: 0x00005627,
+ 15080: 0x00005615,
+ 15081: 0x0000560C,
+ 15082: 0x00005612,
+ 15083: 0x000055FC,
+ 15084: 0x0000560F,
+ 15085: 0x0000561C,
+ 15086: 0x00005601,
+ 15087: 0x00005613,
+ 15088: 0x00005602,
+ 15089: 0x000055FA,
+ 15090: 0x0000561D,
+ 15091: 0x00005604,
+ 15092: 0x000055FF,
+ 15093: 0x000055F9,
+ 15094: 0x00005889,
+ 15095: 0x0000587C,
+ 15096: 0x00005890,
+ 15097: 0x00005898,
+ 15098: 0x00005886,
+ 15099: 0x00005881,
+ 15100: 0x0000587F,
+ 15101: 0x00005874,
+ 15102: 0x0000588B,
+ 15103: 0x0000587A,
+ 15104: 0x00005887,
+ 15105: 0x00005891,
+ 15106: 0x0000588E,
+ 15107: 0x00005876,
+ 15108: 0x00005882,
+ 15109: 0x00005888,
+ 15110: 0x0000587B,
+ 15111: 0x00005894,
+ 15112: 0x0000588F,
+ 15113: 0x000058FE,
+ 15114: 0x0000596B,
+ 15115: 0x00005ADC,
+ 15116: 0x00005AEE,
+ 15117: 0x00005AE5,
+ 15118: 0x00005AD5,
+ 15119: 0x00005AEA,
+ 15120: 0x00005ADA,
+ 15121: 0x00005AED,
+ 15122: 0x00005AEB,
+ 15123: 0x00005AF3,
+ 15124: 0x00005AE2,
+ 15125: 0x00005AE0,
+ 15126: 0x00005ADB,
+ 15127: 0x00005AEC,
+ 15128: 0x00005ADE,
+ 15129: 0x00005ADD,
+ 15130: 0x00005AD9,
+ 15131: 0x00005AE8,
+ 15132: 0x00005ADF,
+ 15133: 0x00005B77,
+ 15134: 0x00005BE0,
+ 15135: 0x00005BE3,
+ 15136: 0x00005C63,
+ 15137: 0x00005D82,
+ 15138: 0x00005D80,
+ 15139: 0x00005D7D,
+ 15140: 0x00005D86,
+ 15141: 0x00005D7A,
+ 15142: 0x00005D81,
+ 15143: 0x00005D77,
+ 15144: 0x00005D8A,
+ 15145: 0x00005D89,
+ 15146: 0x00005D88,
+ 15147: 0x00005D7E,
+ 15148: 0x00005D7C,
+ 15149: 0x00005D8D,
+ 15150: 0x00005D79,
+ 15151: 0x00005D7F,
+ 15152: 0x00005E58,
+ 15153: 0x00005E59,
+ 15154: 0x00005E53,
+ 15155: 0x00005ED8,
+ 15156: 0x00005ED1,
+ 15157: 0x00005ED7,
+ 15158: 0x00005ECE,
+ 15159: 0x00005EDC,
+ 15160: 0x00005ED5,
+ 15161: 0x00005ED9,
+ 15162: 0x00005ED2,
+ 15163: 0x00005ED4,
+ 15164: 0x00005F44,
+ 15165: 0x00005F43,
+ 15166: 0x00005F6F,
+ 15167: 0x00005FB6,
+ 15168: 0x0000612C,
+ 15169: 0x00006128,
+ 15170: 0x00006141,
+ 15171: 0x0000615E,
+ 15172: 0x00006171,
+ 15173: 0x00006173,
+ 15174: 0x00006152,
+ 15175: 0x00006153,
+ 15176: 0x00006172,
+ 15177: 0x0000616C,
+ 15178: 0x00006180,
+ 15179: 0x00006174,
+ 15180: 0x00006154,
+ 15181: 0x0000617A,
+ 15182: 0x0000615B,
+ 15183: 0x00006165,
+ 15184: 0x0000613B,
+ 15185: 0x0000616A,
+ 15186: 0x00006161,
+ 15187: 0x00006156,
+ 15188: 0x00006229,
+ 15189: 0x00006227,
+ 15190: 0x0000622B,
+ 15191: 0x0000642B,
+ 15192: 0x0000644D,
+ 15193: 0x0000645B,
+ 15194: 0x0000645D,
+ 15195: 0x00006474,
+ 15196: 0x00006476,
+ 15197: 0x00006472,
+ 15198: 0x00006473,
+ 15199: 0x0000647D,
+ 15200: 0x00006475,
+ 15201: 0x00006466,
+ 15202: 0x000064A6,
+ 15203: 0x0000644E,
+ 15204: 0x00006482,
+ 15205: 0x0000645E,
+ 15206: 0x0000645C,
+ 15207: 0x0000644B,
+ 15208: 0x00006453,
+ 15209: 0x00006460,
+ 15210: 0x00006450,
+ 15211: 0x0000647F,
+ 15212: 0x0000643F,
+ 15213: 0x0000646C,
+ 15214: 0x0000646B,
+ 15215: 0x00006459,
+ 15216: 0x00006465,
+ 15217: 0x00006477,
+ 15218: 0x00006573,
+ 15219: 0x000065A0,
+ 15220: 0x000066A1,
+ 15221: 0x000066A0,
+ 15222: 0x0000669F,
+ 15223: 0x00006705,
+ 15224: 0x00006704,
+ 15225: 0x00006722,
+ 15226: 0x000069B1,
+ 15227: 0x000069B6,
+ 15228: 0x000069C9,
+ 15229: 0x000069A0,
+ 15230: 0x000069CE,
+ 15231: 0x00006996,
+ 15232: 0x000069B0,
+ 15233: 0x000069AC,
+ 15234: 0x000069BC,
+ 15235: 0x00006991,
+ 15236: 0x00006999,
+ 15237: 0x0000698E,
+ 15238: 0x000069A7,
+ 15239: 0x0000698D,
+ 15240: 0x000069A9,
+ 15241: 0x000069BE,
+ 15242: 0x000069AF,
+ 15243: 0x000069BF,
+ 15244: 0x000069C4,
+ 15245: 0x000069BD,
+ 15246: 0x000069A4,
+ 15247: 0x000069D4,
+ 15248: 0x000069B9,
+ 15249: 0x000069CA,
+ 15250: 0x0000699A,
+ 15251: 0x000069CF,
+ 15252: 0x000069B3,
+ 15253: 0x00006993,
+ 15254: 0x000069AA,
+ 15255: 0x000069A1,
+ 15256: 0x0000699E,
+ 15257: 0x000069D9,
+ 15258: 0x00006997,
+ 15259: 0x00006990,
+ 15260: 0x000069C2,
+ 15261: 0x000069B5,
+ 15262: 0x000069A5,
+ 15263: 0x000069C6,
+ 15264: 0x00006B4A,
+ 15265: 0x00006B4D,
+ 15266: 0x00006B4B,
+ 15267: 0x00006B9E,
+ 15268: 0x00006B9F,
+ 15269: 0x00006BA0,
+ 15270: 0x00006BC3,
+ 15271: 0x00006BC4,
+ 15272: 0x00006BFE,
+ 15273: 0x00006ECE,
+ 15274: 0x00006EF5,
+ 15275: 0x00006EF1,
+ 15276: 0x00006F03,
+ 15277: 0x00006F25,
+ 15278: 0x00006EF8,
+ 15279: 0x00006F37,
+ 15280: 0x00006EFB,
+ 15281: 0x00006F2E,
+ 15282: 0x00006F09,
+ 15283: 0x00006F4E,
+ 15284: 0x00006F19,
+ 15285: 0x00006F1A,
+ 15286: 0x00006F27,
+ 15287: 0x00006F18,
+ 15288: 0x00006F3B,
+ 15289: 0x00006F12,
+ 15290: 0x00006EED,
+ 15291: 0x00006F0A,
+ 15292: 0x00006F36,
+ 15293: 0x00006F73,
+ 15294: 0x00006EF9,
+ 15295: 0x00006EEE,
+ 15296: 0x00006F2D,
+ 15297: 0x00006F40,
+ 15298: 0x00006F30,
+ 15299: 0x00006F3C,
+ 15300: 0x00006F35,
+ 15301: 0x00006EEB,
+ 15302: 0x00006F07,
+ 15303: 0x00006F0E,
+ 15304: 0x00006F43,
+ 15305: 0x00006F05,
+ 15306: 0x00006EFD,
+ 15307: 0x00006EF6,
+ 15308: 0x00006F39,
+ 15309: 0x00006F1C,
+ 15310: 0x00006EFC,
+ 15311: 0x00006F3A,
+ 15312: 0x00006F1F,
+ 15313: 0x00006F0D,
+ 15314: 0x00006F1E,
+ 15315: 0x00006F08,
+ 15316: 0x00006F21,
+ 15317: 0x00007187,
+ 15318: 0x00007190,
+ 15319: 0x00007189,
+ 15320: 0x00007180,
+ 15321: 0x00007185,
+ 15322: 0x00007182,
+ 15323: 0x0000718F,
+ 15324: 0x0000717B,
+ 15325: 0x00007186,
+ 15326: 0x00007181,
+ 15327: 0x00007197,
+ 15328: 0x00007244,
+ 15329: 0x00007253,
+ 15330: 0x00007297,
+ 15331: 0x00007295,
+ 15332: 0x00007293,
+ 15333: 0x00007343,
+ 15334: 0x0000734D,
+ 15335: 0x00007351,
+ 15336: 0x0000734C,
+ 15337: 0x00007462,
+ 15338: 0x00007473,
+ 15339: 0x00007471,
+ 15340: 0x00007475,
+ 15341: 0x00007472,
+ 15342: 0x00007467,
+ 15343: 0x0000746E,
+ 15344: 0x00007500,
+ 15345: 0x00007502,
+ 15346: 0x00007503,
+ 15347: 0x0000757D,
+ 15348: 0x00007590,
+ 15349: 0x00007616,
+ 15350: 0x00007608,
+ 15351: 0x0000760C,
+ 15352: 0x00007615,
+ 15353: 0x00007611,
+ 15354: 0x0000760A,
+ 15355: 0x00007614,
+ 15356: 0x000076B8,
+ 15357: 0x00007781,
+ 15358: 0x0000777C,
+ 15359: 0x00007785,
+ 15360: 0x00007782,
+ 15361: 0x0000776E,
+ 15362: 0x00007780,
+ 15363: 0x0000776F,
+ 15364: 0x0000777E,
+ 15365: 0x00007783,
+ 15366: 0x000078B2,
+ 15367: 0x000078AA,
+ 15368: 0x000078B4,
+ 15369: 0x000078AD,
+ 15370: 0x000078A8,
+ 15371: 0x0000787E,
+ 15372: 0x000078AB,
+ 15373: 0x0000789E,
+ 15374: 0x000078A5,
+ 15375: 0x000078A0,
+ 15376: 0x000078AC,
+ 15377: 0x000078A2,
+ 15378: 0x000078A4,
+ 15379: 0x00007998,
+ 15380: 0x0000798A,
+ 15381: 0x0000798B,
+ 15382: 0x00007996,
+ 15383: 0x00007995,
+ 15384: 0x00007994,
+ 15385: 0x00007993,
+ 15386: 0x00007997,
+ 15387: 0x00007988,
+ 15388: 0x00007992,
+ 15389: 0x00007990,
+ 15390: 0x00007A2B,
+ 15391: 0x00007A4A,
+ 15392: 0x00007A30,
+ 15393: 0x00007A2F,
+ 15394: 0x00007A28,
+ 15395: 0x00007A26,
+ 15396: 0x00007AA8,
+ 15397: 0x00007AAB,
+ 15398: 0x00007AAC,
+ 15399: 0x00007AEE,
+ 15400: 0x00007B88,
+ 15401: 0x00007B9C,
+ 15402: 0x00007B8A,
+ 15403: 0x00007B91,
+ 15404: 0x00007B90,
+ 15405: 0x00007B96,
+ 15406: 0x00007B8D,
+ 15407: 0x00007B8C,
+ 15408: 0x00007B9B,
+ 15409: 0x00007B8E,
+ 15410: 0x00007B85,
+ 15411: 0x00007B98,
+ 15412: 0x00005284,
+ 15413: 0x00007B99,
+ 15414: 0x00007BA4,
+ 15415: 0x00007B82,
+ 15416: 0x00007CBB,
+ 15417: 0x00007CBF,
+ 15418: 0x00007CBC,
+ 15419: 0x00007CBA,
+ 15420: 0x00007DA7,
+ 15421: 0x00007DB7,
+ 15422: 0x00007DC2,
+ 15423: 0x00007DA3,
+ 15424: 0x00007DAA,
+ 15425: 0x00007DC1,
+ 15426: 0x00007DC0,
+ 15427: 0x00007DC5,
+ 15428: 0x00007D9D,
+ 15429: 0x00007DCE,
+ 15430: 0x00007DC4,
+ 15431: 0x00007DC6,
+ 15432: 0x00007DCB,
+ 15433: 0x00007DCC,
+ 15434: 0x00007DAF,
+ 15435: 0x00007DB9,
+ 15436: 0x00007D96,
+ 15437: 0x00007DBC,
+ 15438: 0x00007D9F,
+ 15439: 0x00007DA6,
+ 15440: 0x00007DAE,
+ 15441: 0x00007DA9,
+ 15442: 0x00007DA1,
+ 15443: 0x00007DC9,
+ 15444: 0x00007F73,
+ 15445: 0x00007FE2,
+ 15446: 0x00007FE3,
+ 15447: 0x00007FE5,
+ 15448: 0x00007FDE,
+ 15449: 0x00008024,
+ 15450: 0x0000805D,
+ 15451: 0x0000805C,
+ 15452: 0x00008189,
+ 15453: 0x00008186,
+ 15454: 0x00008183,
+ 15455: 0x00008187,
+ 15456: 0x0000818D,
+ 15457: 0x0000818C,
+ 15458: 0x0000818B,
+ 15459: 0x00008215,
+ 15460: 0x00008497,
+ 15461: 0x000084A4,
+ 15462: 0x000084A1,
+ 15463: 0x0000849F,
+ 15464: 0x000084BA,
+ 15465: 0x000084CE,
+ 15466: 0x000084C2,
+ 15467: 0x000084AC,
+ 15468: 0x000084AE,
+ 15469: 0x000084AB,
+ 15470: 0x000084B9,
+ 15471: 0x000084B4,
+ 15472: 0x000084C1,
+ 15473: 0x000084CD,
+ 15474: 0x000084AA,
+ 15475: 0x0000849A,
+ 15476: 0x000084B1,
+ 15477: 0x000084D0,
+ 15478: 0x0000849D,
+ 15479: 0x000084A7,
+ 15480: 0x000084BB,
+ 15481: 0x000084A2,
+ 15482: 0x00008494,
+ 15483: 0x000084C7,
+ 15484: 0x000084CC,
+ 15485: 0x0000849B,
+ 15486: 0x000084A9,
+ 15487: 0x000084AF,
+ 15488: 0x000084A8,
+ 15489: 0x000084D6,
+ 15490: 0x00008498,
+ 15491: 0x000084B6,
+ 15492: 0x000084CF,
+ 15493: 0x000084A0,
+ 15494: 0x000084D7,
+ 15495: 0x000084D4,
+ 15496: 0x000084D2,
+ 15497: 0x000084DB,
+ 15498: 0x000084B0,
+ 15499: 0x00008491,
+ 15500: 0x00008661,
+ 15501: 0x00008733,
+ 15502: 0x00008723,
+ 15503: 0x00008728,
+ 15504: 0x0000876B,
+ 15505: 0x00008740,
+ 15506: 0x0000872E,
+ 15507: 0x0000871E,
+ 15508: 0x00008721,
+ 15509: 0x00008719,
+ 15510: 0x0000871B,
+ 15511: 0x00008743,
+ 15512: 0x0000872C,
+ 15513: 0x00008741,
+ 15514: 0x0000873E,
+ 15515: 0x00008746,
+ 15516: 0x00008720,
+ 15517: 0x00008732,
+ 15518: 0x0000872A,
+ 15519: 0x0000872D,
+ 15520: 0x0000873C,
+ 15521: 0x00008712,
+ 15522: 0x0000873A,
+ 15523: 0x00008731,
+ 15524: 0x00008735,
+ 15525: 0x00008742,
+ 15526: 0x00008726,
+ 15527: 0x00008727,
+ 15528: 0x00008738,
+ 15529: 0x00008724,
+ 15530: 0x0000871A,
+ 15531: 0x00008730,
+ 15532: 0x00008711,
+ 15533: 0x000088F7,
+ 15534: 0x000088E7,
+ 15535: 0x000088F1,
+ 15536: 0x000088F2,
+ 15537: 0x000088FA,
+ 15538: 0x000088FE,
+ 15539: 0x000088EE,
+ 15540: 0x000088FC,
+ 15541: 0x000088F6,
+ 15542: 0x000088FB,
+ 15543: 0x000088F0,
+ 15544: 0x000088EC,
+ 15545: 0x000088EB,
+ 15546: 0x0000899D,
+ 15547: 0x000089A1,
+ 15548: 0x0000899F,
+ 15549: 0x0000899E,
+ 15550: 0x000089E9,
+ 15551: 0x000089EB,
+ 15552: 0x000089E8,
+ 15553: 0x00008AAB,
+ 15554: 0x00008A99,
+ 15555: 0x00008A8B,
+ 15556: 0x00008A92,
+ 15557: 0x00008A8F,
+ 15558: 0x00008A96,
+ 15559: 0x00008C3D,
+ 15560: 0x00008C68,
+ 15561: 0x00008C69,
+ 15562: 0x00008CD5,
+ 15563: 0x00008CCF,
+ 15564: 0x00008CD7,
+ 15565: 0x00008D96,
+ 15566: 0x00008E09,
+ 15567: 0x00008E02,
+ 15568: 0x00008DFF,
+ 15569: 0x00008E0D,
+ 15570: 0x00008DFD,
+ 15571: 0x00008E0A,
+ 15572: 0x00008E03,
+ 15573: 0x00008E07,
+ 15574: 0x00008E06,
+ 15575: 0x00008E05,
+ 15576: 0x00008DFE,
+ 15577: 0x00008E00,
+ 15578: 0x00008E04,
+ 15579: 0x00008F10,
+ 15580: 0x00008F11,
+ 15581: 0x00008F0E,
+ 15582: 0x00008F0D,
+ 15583: 0x00009123,
+ 15584: 0x0000911C,
+ 15585: 0x00009120,
+ 15586: 0x00009122,
+ 15587: 0x0000911F,
+ 15588: 0x0000911D,
+ 15589: 0x0000911A,
+ 15590: 0x00009124,
+ 15591: 0x00009121,
+ 15592: 0x0000911B,
+ 15593: 0x0000917A,
+ 15594: 0x00009172,
+ 15595: 0x00009179,
+ 15596: 0x00009173,
+ 15597: 0x000092A5,
+ 15598: 0x000092A4,
+ 15599: 0x00009276,
+ 15600: 0x0000929B,
+ 15601: 0x0000927A,
+ 15602: 0x000092A0,
+ 15603: 0x00009294,
+ 15604: 0x000092AA,
+ 15605: 0x0000928D,
+ 15606: 0x000092A6,
+ 15607: 0x0000929A,
+ 15608: 0x000092AB,
+ 15609: 0x00009279,
+ 15610: 0x00009297,
+ 15611: 0x0000927F,
+ 15612: 0x000092A3,
+ 15613: 0x000092EE,
+ 15614: 0x0000928E,
+ 15615: 0x00009282,
+ 15616: 0x00009295,
+ 15617: 0x000092A2,
+ 15618: 0x0000927D,
+ 15619: 0x00009288,
+ 15620: 0x000092A1,
+ 15621: 0x0000928A,
+ 15622: 0x00009286,
+ 15623: 0x0000928C,
+ 15624: 0x00009299,
+ 15625: 0x000092A7,
+ 15626: 0x0000927E,
+ 15627: 0x00009287,
+ 15628: 0x000092A9,
+ 15629: 0x0000929D,
+ 15630: 0x0000928B,
+ 15631: 0x0000922D,
+ 15632: 0x0000969E,
+ 15633: 0x000096A1,
+ 15634: 0x000096FF,
+ 15635: 0x00009758,
+ 15636: 0x0000977D,
+ 15637: 0x0000977A,
+ 15638: 0x0000977E,
+ 15639: 0x00009783,
+ 15640: 0x00009780,
+ 15641: 0x00009782,
+ 15642: 0x0000977B,
+ 15643: 0x00009784,
+ 15644: 0x00009781,
+ 15645: 0x0000977F,
+ 15646: 0x000097CE,
+ 15647: 0x000097CD,
+ 15648: 0x00009816,
+ 15649: 0x000098AD,
+ 15650: 0x000098AE,
+ 15651: 0x00009902,
+ 15652: 0x00009900,
+ 15653: 0x00009907,
+ 15654: 0x0000999D,
+ 15655: 0x0000999C,
+ 15656: 0x000099C3,
+ 15657: 0x000099B9,
+ 15658: 0x000099BB,
+ 15659: 0x000099BA,
+ 15660: 0x000099C2,
+ 15661: 0x000099BD,
+ 15662: 0x000099C7,
+ 15663: 0x00009AB1,
+ 15664: 0x00009AE3,
+ 15665: 0x00009AE7,
+ 15666: 0x00009B3E,
+ 15667: 0x00009B3F,
+ 15668: 0x00009B60,
+ 15669: 0x00009B61,
+ 15670: 0x00009B5F,
+ 15671: 0x00009CF1,
+ 15672: 0x00009CF2,
+ 15673: 0x00009CF5,
+ 15674: 0x00009EA7,
+ 15675: 0x000050FF,
+ 15676: 0x00005103,
+ 15677: 0x00005130,
+ 15678: 0x000050F8,
+ 15679: 0x00005106,
+ 15680: 0x00005107,
+ 15681: 0x000050F6,
+ 15682: 0x000050FE,
+ 15683: 0x0000510B,
+ 15684: 0x0000510C,
+ 15685: 0x000050FD,
+ 15686: 0x0000510A,
+ 15687: 0x0000528B,
+ 15688: 0x0000528C,
+ 15689: 0x000052F1,
+ 15690: 0x000052EF,
+ 15691: 0x00005648,
+ 15692: 0x00005642,
+ 15693: 0x0000564C,
+ 15694: 0x00005635,
+ 15695: 0x00005641,
+ 15696: 0x0000564A,
+ 15697: 0x00005649,
+ 15698: 0x00005646,
+ 15699: 0x00005658,
+ 15700: 0x0000565A,
+ 15701: 0x00005640,
+ 15702: 0x00005633,
+ 15703: 0x0000563D,
+ 15704: 0x0000562C,
+ 15705: 0x0000563E,
+ 15706: 0x00005638,
+ 15707: 0x0000562A,
+ 15708: 0x0000563A,
+ 15709: 0x0000571A,
+ 15710: 0x000058AB,
+ 15711: 0x0000589D,
+ 15712: 0x000058B1,
+ 15713: 0x000058A0,
+ 15714: 0x000058A3,
+ 15715: 0x000058AF,
+ 15716: 0x000058AC,
+ 15717: 0x000058A5,
+ 15718: 0x000058A1,
+ 15719: 0x000058FF,
+ 15720: 0x00005AFF,
+ 15721: 0x00005AF4,
+ 15722: 0x00005AFD,
+ 15723: 0x00005AF7,
+ 15724: 0x00005AF6,
+ 15725: 0x00005B03,
+ 15726: 0x00005AF8,
+ 15727: 0x00005B02,
+ 15728: 0x00005AF9,
+ 15729: 0x00005B01,
+ 15730: 0x00005B07,
+ 15731: 0x00005B05,
+ 15732: 0x00005B0F,
+ 15733: 0x00005C67,
+ 15734: 0x00005D99,
+ 15735: 0x00005D97,
+ 15736: 0x00005D9F,
+ 15737: 0x00005D92,
+ 15738: 0x00005DA2,
+ 15739: 0x00005D93,
+ 15740: 0x00005D95,
+ 15741: 0x00005DA0,
+ 15742: 0x00005D9C,
+ 15743: 0x00005DA1,
+ 15744: 0x00005D9A,
+ 15745: 0x00005D9E,
+ 15746: 0x00005E69,
+ 15747: 0x00005E5D,
+ 15748: 0x00005E60,
+ 15749: 0x00005E5C,
+ 15750: 0x00007DF3,
+ 15751: 0x00005EDB,
+ 15752: 0x00005EDE,
+ 15753: 0x00005EE1,
+ 15754: 0x00005F49,
+ 15755: 0x00005FB2,
+ 15756: 0x0000618B,
+ 15757: 0x00006183,
+ 15758: 0x00006179,
+ 15759: 0x000061B1,
+ 15760: 0x000061B0,
+ 15761: 0x000061A2,
+ 15762: 0x00006189,
+ 15763: 0x0000619B,
+ 15764: 0x00006193,
+ 15765: 0x000061AF,
+ 15766: 0x000061AD,
+ 15767: 0x0000619F,
+ 15768: 0x00006192,
+ 15769: 0x000061AA,
+ 15770: 0x000061A1,
+ 15771: 0x0000618D,
+ 15772: 0x00006166,
+ 15773: 0x000061B3,
+ 15774: 0x0000622D,
+ 15775: 0x0000646E,
+ 15776: 0x00006470,
+ 15777: 0x00006496,
+ 15778: 0x000064A0,
+ 15779: 0x00006485,
+ 15780: 0x00006497,
+ 15781: 0x0000649C,
+ 15782: 0x0000648F,
+ 15783: 0x0000648B,
+ 15784: 0x0000648A,
+ 15785: 0x0000648C,
+ 15786: 0x000064A3,
+ 15787: 0x0000649F,
+ 15788: 0x00006468,
+ 15789: 0x000064B1,
+ 15790: 0x00006498,
+ 15791: 0x00006576,
+ 15792: 0x0000657A,
+ 15793: 0x00006579,
+ 15794: 0x0000657B,
+ 15795: 0x000065B2,
+ 15796: 0x000065B3,
+ 15797: 0x000066B5,
+ 15798: 0x000066B0,
+ 15799: 0x000066A9,
+ 15800: 0x000066B2,
+ 15801: 0x000066B7,
+ 15802: 0x000066AA,
+ 15803: 0x000066AF,
+ 15804: 0x00006A00,
+ 15805: 0x00006A06,
+ 15806: 0x00006A17,
+ 15807: 0x000069E5,
+ 15808: 0x000069F8,
+ 15809: 0x00006A15,
+ 15810: 0x000069F1,
+ 15811: 0x000069E4,
+ 15812: 0x00006A20,
+ 15813: 0x000069FF,
+ 15814: 0x000069EC,
+ 15815: 0x000069E2,
+ 15816: 0x00006A1B,
+ 15817: 0x00006A1D,
+ 15818: 0x000069FE,
+ 15819: 0x00006A27,
+ 15820: 0x000069F2,
+ 15821: 0x000069EE,
+ 15822: 0x00006A14,
+ 15823: 0x000069F7,
+ 15824: 0x000069E7,
+ 15825: 0x00006A40,
+ 15826: 0x00006A08,
+ 15827: 0x000069E6,
+ 15828: 0x000069FB,
+ 15829: 0x00006A0D,
+ 15830: 0x000069FC,
+ 15831: 0x000069EB,
+ 15832: 0x00006A09,
+ 15833: 0x00006A04,
+ 15834: 0x00006A18,
+ 15835: 0x00006A25,
+ 15836: 0x00006A0F,
+ 15837: 0x000069F6,
+ 15838: 0x00006A26,
+ 15839: 0x00006A07,
+ 15840: 0x000069F4,
+ 15841: 0x00006A16,
+ 15842: 0x00006B51,
+ 15843: 0x00006BA5,
+ 15844: 0x00006BA3,
+ 15845: 0x00006BA2,
+ 15846: 0x00006BA6,
+ 15847: 0x00006C01,
+ 15848: 0x00006C00,
+ 15849: 0x00006BFF,
+ 15850: 0x00006C02,
+ 15851: 0x00006F41,
+ 15852: 0x00006F26,
+ 15853: 0x00006F7E,
+ 15854: 0x00006F87,
+ 15855: 0x00006FC6,
+ 15856: 0x00006F92,
+ 15857: 0x00006F8D,
+ 15858: 0x00006F89,
+ 15859: 0x00006F8C,
+ 15860: 0x00006F62,
+ 15861: 0x00006F4F,
+ 15862: 0x00006F85,
+ 15863: 0x00006F5A,
+ 15864: 0x00006F96,
+ 15865: 0x00006F76,
+ 15866: 0x00006F6C,
+ 15867: 0x00006F82,
+ 15868: 0x00006F55,
+ 15869: 0x00006F72,
+ 15870: 0x00006F52,
+ 15871: 0x00006F50,
+ 15872: 0x00006F57,
+ 15873: 0x00006F94,
+ 15874: 0x00006F93,
+ 15875: 0x00006F5D,
+ 15876: 0x00006F00,
+ 15877: 0x00006F61,
+ 15878: 0x00006F6B,
+ 15879: 0x00006F7D,
+ 15880: 0x00006F67,
+ 15881: 0x00006F90,
+ 15882: 0x00006F53,
+ 15883: 0x00006F8B,
+ 15884: 0x00006F69,
+ 15885: 0x00006F7F,
+ 15886: 0x00006F95,
+ 15887: 0x00006F63,
+ 15888: 0x00006F77,
+ 15889: 0x00006F6A,
+ 15890: 0x00006F7B,
+ 15891: 0x000071B2,
+ 15892: 0x000071AF,
+ 15893: 0x0000719B,
+ 15894: 0x000071B0,
+ 15895: 0x000071A0,
+ 15896: 0x0000719A,
+ 15897: 0x000071A9,
+ 15898: 0x000071B5,
+ 15899: 0x0000719D,
+ 15900: 0x000071A5,
+ 15901: 0x0000719E,
+ 15902: 0x000071A4,
+ 15903: 0x000071A1,
+ 15904: 0x000071AA,
+ 15905: 0x0000719C,
+ 15906: 0x000071A7,
+ 15907: 0x000071B3,
+ 15908: 0x00007298,
+ 15909: 0x0000729A,
+ 15910: 0x00007358,
+ 15911: 0x00007352,
+ 15912: 0x0000735E,
+ 15913: 0x0000735F,
+ 15914: 0x00007360,
+ 15915: 0x0000735D,
+ 15916: 0x0000735B,
+ 15917: 0x00007361,
+ 15918: 0x0000735A,
+ 15919: 0x00007359,
+ 15920: 0x00007362,
+ 15921: 0x00007487,
+ 15922: 0x00007489,
+ 15923: 0x0000748A,
+ 15924: 0x00007486,
+ 15925: 0x00007481,
+ 15926: 0x0000747D,
+ 15927: 0x00007485,
+ 15928: 0x00007488,
+ 15929: 0x0000747C,
+ 15930: 0x00007479,
+ 15931: 0x00007508,
+ 15932: 0x00007507,
+ 15933: 0x0000757E,
+ 15934: 0x00007625,
+ 15935: 0x0000761E,
+ 15936: 0x00007619,
+ 15937: 0x0000761D,
+ 15938: 0x0000761C,
+ 15939: 0x00007623,
+ 15940: 0x0000761A,
+ 15941: 0x00007628,
+ 15942: 0x0000761B,
+ 15943: 0x0000769C,
+ 15944: 0x0000769D,
+ 15945: 0x0000769E,
+ 15946: 0x0000769B,
+ 15947: 0x0000778D,
+ 15948: 0x0000778F,
+ 15949: 0x00007789,
+ 15950: 0x00007788,
+ 15951: 0x000078CD,
+ 15952: 0x000078BB,
+ 15953: 0x000078CF,
+ 15954: 0x000078CC,
+ 15955: 0x000078D1,
+ 15956: 0x000078CE,
+ 15957: 0x000078D4,
+ 15958: 0x000078C8,
+ 15959: 0x000078C3,
+ 15960: 0x000078C4,
+ 15961: 0x000078C9,
+ 15962: 0x0000799A,
+ 15963: 0x000079A1,
+ 15964: 0x000079A0,
+ 15965: 0x0000799C,
+ 15966: 0x000079A2,
+ 15967: 0x0000799B,
+ 15968: 0x00006B76,
+ 15969: 0x00007A39,
+ 15970: 0x00007AB2,
+ 15971: 0x00007AB4,
+ 15972: 0x00007AB3,
+ 15973: 0x00007BB7,
+ 15974: 0x00007BCB,
+ 15975: 0x00007BBE,
+ 15976: 0x00007BAC,
+ 15977: 0x00007BCE,
+ 15978: 0x00007BAF,
+ 15979: 0x00007BB9,
+ 15980: 0x00007BCA,
+ 15981: 0x00007BB5,
+ 15982: 0x00007CC5,
+ 15983: 0x00007CC8,
+ 15984: 0x00007CCC,
+ 15985: 0x00007CCB,
+ 15986: 0x00007DF7,
+ 15987: 0x00007DDB,
+ 15988: 0x00007DEA,
+ 15989: 0x00007DE7,
+ 15990: 0x00007DD7,
+ 15991: 0x00007DE1,
+ 15992: 0x00007E03,
+ 15993: 0x00007DFA,
+ 15994: 0x00007DE6,
+ 15995: 0x00007DF6,
+ 15996: 0x00007DF1,
+ 15997: 0x00007DF0,
+ 15998: 0x00007DEE,
+ 15999: 0x00007DDF,
+ 16000: 0x00007F76,
+ 16001: 0x00007FAC,
+ 16002: 0x00007FB0,
+ 16003: 0x00007FAD,
+ 16004: 0x00007FED,
+ 16005: 0x00007FEB,
+ 16006: 0x00007FEA,
+ 16007: 0x00007FEC,
+ 16008: 0x00007FE6,
+ 16009: 0x00007FE8,
+ 16010: 0x00008064,
+ 16011: 0x00008067,
+ 16012: 0x000081A3,
+ 16013: 0x0000819F,
+ 16014: 0x0000819E,
+ 16015: 0x00008195,
+ 16016: 0x000081A2,
+ 16017: 0x00008199,
+ 16018: 0x00008197,
+ 16019: 0x00008216,
+ 16020: 0x0000824F,
+ 16021: 0x00008253,
+ 16022: 0x00008252,
+ 16023: 0x00008250,
+ 16024: 0x0000824E,
+ 16025: 0x00008251,
+ 16026: 0x00008524,
+ 16027: 0x0000853B,
+ 16028: 0x0000850F,
+ 16029: 0x00008500,
+ 16030: 0x00008529,
+ 16031: 0x0000850E,
+ 16032: 0x00008509,
+ 16033: 0x0000850D,
+ 16034: 0x0000851F,
+ 16035: 0x0000850A,
+ 16036: 0x00008527,
+ 16037: 0x0000851C,
+ 16038: 0x000084FB,
+ 16039: 0x0000852B,
+ 16040: 0x000084FA,
+ 16041: 0x00008508,
+ 16042: 0x0000850C,
+ 16043: 0x000084F4,
+ 16044: 0x0000852A,
+ 16045: 0x000084F2,
+ 16046: 0x00008515,
+ 16047: 0x000084F7,
+ 16048: 0x000084EB,
+ 16049: 0x000084F3,
+ 16050: 0x000084FC,
+ 16051: 0x00008512,
+ 16052: 0x000084EA,
+ 16053: 0x000084E9,
+ 16054: 0x00008516,
+ 16055: 0x000084FE,
+ 16056: 0x00008528,
+ 16057: 0x0000851D,
+ 16058: 0x0000852E,
+ 16059: 0x00008502,
+ 16060: 0x000084FD,
+ 16061: 0x0000851E,
+ 16062: 0x000084F6,
+ 16063: 0x00008531,
+ 16064: 0x00008526,
+ 16065: 0x000084E7,
+ 16066: 0x000084E8,
+ 16067: 0x000084F0,
+ 16068: 0x000084EF,
+ 16069: 0x000084F9,
+ 16070: 0x00008518,
+ 16071: 0x00008520,
+ 16072: 0x00008530,
+ 16073: 0x0000850B,
+ 16074: 0x00008519,
+ 16075: 0x0000852F,
+ 16076: 0x00008662,
+ 16077: 0x00008756,
+ 16078: 0x00008763,
+ 16079: 0x00008764,
+ 16080: 0x00008777,
+ 16081: 0x000087E1,
+ 16082: 0x00008773,
+ 16083: 0x00008758,
+ 16084: 0x00008754,
+ 16085: 0x0000875B,
+ 16086: 0x00008752,
+ 16087: 0x00008761,
+ 16088: 0x0000875A,
+ 16089: 0x00008751,
+ 16090: 0x0000875E,
+ 16091: 0x0000876D,
+ 16092: 0x0000876A,
+ 16093: 0x00008750,
+ 16094: 0x0000874E,
+ 16095: 0x0000875F,
+ 16096: 0x0000875D,
+ 16097: 0x0000876F,
+ 16098: 0x0000876C,
+ 16099: 0x0000877A,
+ 16100: 0x0000876E,
+ 16101: 0x0000875C,
+ 16102: 0x00008765,
+ 16103: 0x0000874F,
+ 16104: 0x0000877B,
+ 16105: 0x00008775,
+ 16106: 0x00008762,
+ 16107: 0x00008767,
+ 16108: 0x00008769,
+ 16109: 0x0000885A,
+ 16110: 0x00008905,
+ 16111: 0x0000890C,
+ 16112: 0x00008914,
+ 16113: 0x0000890B,
+ 16114: 0x00008917,
+ 16115: 0x00008918,
+ 16116: 0x00008919,
+ 16117: 0x00008906,
+ 16118: 0x00008916,
+ 16119: 0x00008911,
+ 16120: 0x0000890E,
+ 16121: 0x00008909,
+ 16122: 0x000089A2,
+ 16123: 0x000089A4,
+ 16124: 0x000089A3,
+ 16125: 0x000089ED,
+ 16126: 0x000089F0,
+ 16127: 0x000089EC,
+ 16128: 0x00008ACF,
+ 16129: 0x00008AC6,
+ 16130: 0x00008AB8,
+ 16131: 0x00008AD3,
+ 16132: 0x00008AD1,
+ 16133: 0x00008AD4,
+ 16134: 0x00008AD5,
+ 16135: 0x00008ABB,
+ 16136: 0x00008AD7,
+ 16137: 0x00008ABE,
+ 16138: 0x00008AC0,
+ 16139: 0x00008AC5,
+ 16140: 0x00008AD8,
+ 16141: 0x00008AC3,
+ 16142: 0x00008ABA,
+ 16143: 0x00008ABD,
+ 16144: 0x00008AD9,
+ 16145: 0x00008C3E,
+ 16146: 0x00008C4D,
+ 16147: 0x00008C8F,
+ 16148: 0x00008CE5,
+ 16149: 0x00008CDF,
+ 16150: 0x00008CD9,
+ 16151: 0x00008CE8,
+ 16152: 0x00008CDA,
+ 16153: 0x00008CDD,
+ 16154: 0x00008CE7,
+ 16155: 0x00008DA0,
+ 16156: 0x00008D9C,
+ 16157: 0x00008DA1,
+ 16158: 0x00008D9B,
+ 16159: 0x00008E20,
+ 16160: 0x00008E23,
+ 16161: 0x00008E25,
+ 16162: 0x00008E24,
+ 16163: 0x00008E2E,
+ 16164: 0x00008E15,
+ 16165: 0x00008E1B,
+ 16166: 0x00008E16,
+ 16167: 0x00008E11,
+ 16168: 0x00008E19,
+ 16169: 0x00008E26,
+ 16170: 0x00008E27,
+ 16171: 0x00008E14,
+ 16172: 0x00008E12,
+ 16173: 0x00008E18,
+ 16174: 0x00008E13,
+ 16175: 0x00008E1C,
+ 16176: 0x00008E17,
+ 16177: 0x00008E1A,
+ 16178: 0x00008F2C,
+ 16179: 0x00008F24,
+ 16180: 0x00008F18,
+ 16181: 0x00008F1A,
+ 16182: 0x00008F20,
+ 16183: 0x00008F23,
+ 16184: 0x00008F16,
+ 16185: 0x00008F17,
+ 16186: 0x00009073,
+ 16187: 0x00009070,
+ 16188: 0x0000906F,
+ 16189: 0x00009067,
+ 16190: 0x0000906B,
+ 16191: 0x0000912F,
+ 16192: 0x0000912B,
+ 16193: 0x00009129,
+ 16194: 0x0000912A,
+ 16195: 0x00009132,
+ 16196: 0x00009126,
+ 16197: 0x0000912E,
+ 16198: 0x00009185,
+ 16199: 0x00009186,
+ 16200: 0x0000918A,
+ 16201: 0x00009181,
+ 16202: 0x00009182,
+ 16203: 0x00009184,
+ 16204: 0x00009180,
+ 16205: 0x000092D0,
+ 16206: 0x000092C3,
+ 16207: 0x000092C4,
+ 16208: 0x000092C0,
+ 16209: 0x000092D9,
+ 16210: 0x000092B6,
+ 16211: 0x000092CF,
+ 16212: 0x000092F1,
+ 16213: 0x000092DF,
+ 16214: 0x000092D8,
+ 16215: 0x000092E9,
+ 16216: 0x000092D7,
+ 16217: 0x000092DD,
+ 16218: 0x000092CC,
+ 16219: 0x000092EF,
+ 16220: 0x000092C2,
+ 16221: 0x000092E8,
+ 16222: 0x000092CA,
+ 16223: 0x000092C8,
+ 16224: 0x000092CE,
+ 16225: 0x000092E6,
+ 16226: 0x000092CD,
+ 16227: 0x000092D5,
+ 16228: 0x000092C9,
+ 16229: 0x000092E0,
+ 16230: 0x000092DE,
+ 16231: 0x000092E7,
+ 16232: 0x000092D1,
+ 16233: 0x000092D3,
+ 16234: 0x000092B5,
+ 16235: 0x000092E1,
+ 16236: 0x000092C6,
+ 16237: 0x000092B4,
+ 16238: 0x0000957C,
+ 16239: 0x000095AC,
+ 16240: 0x000095AB,
+ 16241: 0x000095AE,
+ 16242: 0x000095B0,
+ 16243: 0x000096A4,
+ 16244: 0x000096A2,
+ 16245: 0x000096D3,
+ 16246: 0x00009705,
+ 16247: 0x00009708,
+ 16248: 0x00009702,
+ 16249: 0x0000975A,
+ 16250: 0x0000978A,
+ 16251: 0x0000978E,
+ 16252: 0x00009788,
+ 16253: 0x000097D0,
+ 16254: 0x000097CF,
+ 16255: 0x0000981E,
+ 16256: 0x0000981D,
+ 16257: 0x00009826,
+ 16258: 0x00009829,
+ 16259: 0x00009828,
+ 16260: 0x00009820,
+ 16261: 0x0000981B,
+ 16262: 0x00009827,
+ 16263: 0x000098B2,
+ 16264: 0x00009908,
+ 16265: 0x000098FA,
+ 16266: 0x00009911,
+ 16267: 0x00009914,
+ 16268: 0x00009916,
+ 16269: 0x00009917,
+ 16270: 0x00009915,
+ 16271: 0x000099DC,
+ 16272: 0x000099CD,
+ 16273: 0x000099CF,
+ 16274: 0x000099D3,
+ 16275: 0x000099D4,
+ 16276: 0x000099CE,
+ 16277: 0x000099C9,
+ 16278: 0x000099D6,
+ 16279: 0x000099D8,
+ 16280: 0x000099CB,
+ 16281: 0x000099D7,
+ 16282: 0x000099CC,
+ 16283: 0x00009AB3,
+ 16284: 0x00009AEC,
+ 16285: 0x00009AEB,
+ 16286: 0x00009AF3,
+ 16287: 0x00009AF2,
+ 16288: 0x00009AF1,
+ 16289: 0x00009B46,
+ 16290: 0x00009B43,
+ 16291: 0x00009B67,
+ 16292: 0x00009B74,
+ 16293: 0x00009B71,
+ 16294: 0x00009B66,
+ 16295: 0x00009B76,
+ 16296: 0x00009B75,
+ 16297: 0x00009B70,
+ 16298: 0x00009B68,
+ 16299: 0x00009B64,
+ 16300: 0x00009B6C,
+ 16301: 0x00009CFC,
+ 16302: 0x00009CFA,
+ 16303: 0x00009CFD,
+ 16304: 0x00009CFF,
+ 16305: 0x00009CF7,
+ 16306: 0x00009D07,
+ 16307: 0x00009D00,
+ 16308: 0x00009CF9,
+ 16309: 0x00009CFB,
+ 16310: 0x00009D08,
+ 16311: 0x00009D05,
+ 16312: 0x00009D04,
+ 16313: 0x00009E83,
+ 16314: 0x00009ED3,
+ 16315: 0x00009F0F,
+ 16316: 0x00009F10,
+ 16317: 0x0000511C,
+ 16318: 0x00005113,
+ 16319: 0x00005117,
+ 16320: 0x0000511A,
+ 16321: 0x00005111,
+ 16322: 0x000051DE,
+ 16323: 0x00005334,
+ 16324: 0x000053E1,
+ 16325: 0x00005670,
+ 16326: 0x00005660,
+ 16327: 0x0000566E,
+ 16328: 0x00005673,
+ 16329: 0x00005666,
+ 16330: 0x00005663,
+ 16331: 0x0000566D,
+ 16332: 0x00005672,
+ 16333: 0x0000565E,
+ 16334: 0x00005677,
+ 16335: 0x0000571C,
+ 16336: 0x0000571B,
+ 16337: 0x000058C8,
+ 16338: 0x000058BD,
+ 16339: 0x000058C9,
+ 16340: 0x000058BF,
+ 16341: 0x000058BA,
+ 16342: 0x000058C2,
+ 16343: 0x000058BC,
+ 16344: 0x000058C6,
+ 16345: 0x00005B17,
+ 16346: 0x00005B19,
+ 16347: 0x00005B1B,
+ 16348: 0x00005B21,
+ 16349: 0x00005B14,
+ 16350: 0x00005B13,
+ 16351: 0x00005B10,
+ 16352: 0x00005B16,
+ 16353: 0x00005B28,
+ 16354: 0x00005B1A,
+ 16355: 0x00005B20,
+ 16356: 0x00005B1E,
+ 16357: 0x00005BEF,
+ 16358: 0x00005DAC,
+ 16359: 0x00005DB1,
+ 16360: 0x00005DA9,
+ 16361: 0x00005DA7,
+ 16362: 0x00005DB5,
+ 16363: 0x00005DB0,
+ 16364: 0x00005DAE,
+ 16365: 0x00005DAA,
+ 16366: 0x00005DA8,
+ 16367: 0x00005DB2,
+ 16368: 0x00005DAD,
+ 16369: 0x00005DAF,
+ 16370: 0x00005DB4,
+ 16371: 0x00005E67,
+ 16372: 0x00005E68,
+ 16373: 0x00005E66,
+ 16374: 0x00005E6F,
+ 16375: 0x00005EE9,
+ 16376: 0x00005EE7,
+ 16377: 0x00005EE6,
+ 16378: 0x00005EE8,
+ 16379: 0x00005EE5,
+ 16380: 0x00005F4B,
+ 16381: 0x00005FBC,
+ 16382: 0x0000619D,
+ 16383: 0x000061A8,
+ 16384: 0x00006196,
+ 16385: 0x000061C5,
+ 16386: 0x000061B4,
+ 16387: 0x000061C6,
+ 16388: 0x000061C1,
+ 16389: 0x000061CC,
+ 16390: 0x000061BA,
+ 16391: 0x000061BF,
+ 16392: 0x000061B8,
+ 16393: 0x0000618C,
+ 16394: 0x000064D7,
+ 16395: 0x000064D6,
+ 16396: 0x000064D0,
+ 16397: 0x000064CF,
+ 16398: 0x000064C9,
+ 16399: 0x000064BD,
+ 16400: 0x00006489,
+ 16401: 0x000064C3,
+ 16402: 0x000064DB,
+ 16403: 0x000064F3,
+ 16404: 0x000064D9,
+ 16405: 0x00006533,
+ 16406: 0x0000657F,
+ 16407: 0x0000657C,
+ 16408: 0x000065A2,
+ 16409: 0x000066C8,
+ 16410: 0x000066BE,
+ 16411: 0x000066C0,
+ 16412: 0x000066CA,
+ 16413: 0x000066CB,
+ 16414: 0x000066CF,
+ 16415: 0x000066BD,
+ 16416: 0x000066BB,
+ 16417: 0x000066BA,
+ 16418: 0x000066CC,
+ 16419: 0x00006723,
+ 16420: 0x00006A34,
+ 16421: 0x00006A66,
+ 16422: 0x00006A49,
+ 16423: 0x00006A67,
+ 16424: 0x00006A32,
+ 16425: 0x00006A68,
+ 16426: 0x00006A3E,
+ 16427: 0x00006A5D,
+ 16428: 0x00006A6D,
+ 16429: 0x00006A76,
+ 16430: 0x00006A5B,
+ 16431: 0x00006A51,
+ 16432: 0x00006A28,
+ 16433: 0x00006A5A,
+ 16434: 0x00006A3B,
+ 16435: 0x00006A3F,
+ 16436: 0x00006A41,
+ 16437: 0x00006A6A,
+ 16438: 0x00006A64,
+ 16439: 0x00006A50,
+ 16440: 0x00006A4F,
+ 16441: 0x00006A54,
+ 16442: 0x00006A6F,
+ 16443: 0x00006A69,
+ 16444: 0x00006A60,
+ 16445: 0x00006A3C,
+ 16446: 0x00006A5E,
+ 16447: 0x00006A56,
+ 16448: 0x00006A55,
+ 16449: 0x00006A4D,
+ 16450: 0x00006A4E,
+ 16451: 0x00006A46,
+ 16452: 0x00006B55,
+ 16453: 0x00006B54,
+ 16454: 0x00006B56,
+ 16455: 0x00006BA7,
+ 16456: 0x00006BAA,
+ 16457: 0x00006BAB,
+ 16458: 0x00006BC8,
+ 16459: 0x00006BC7,
+ 16460: 0x00006C04,
+ 16461: 0x00006C03,
+ 16462: 0x00006C06,
+ 16463: 0x00006FAD,
+ 16464: 0x00006FCB,
+ 16465: 0x00006FA3,
+ 16466: 0x00006FC7,
+ 16467: 0x00006FBC,
+ 16468: 0x00006FCE,
+ 16469: 0x00006FC8,
+ 16470: 0x00006F5E,
+ 16471: 0x00006FC4,
+ 16472: 0x00006FBD,
+ 16473: 0x00006F9E,
+ 16474: 0x00006FCA,
+ 16475: 0x00006FA8,
+ 16476: 0x00007004,
+ 16477: 0x00006FA5,
+ 16478: 0x00006FAE,
+ 16479: 0x00006FBA,
+ 16480: 0x00006FAC,
+ 16481: 0x00006FAA,
+ 16482: 0x00006FCF,
+ 16483: 0x00006FBF,
+ 16484: 0x00006FB8,
+ 16485: 0x00006FA2,
+ 16486: 0x00006FC9,
+ 16487: 0x00006FAB,
+ 16488: 0x00006FCD,
+ 16489: 0x00006FAF,
+ 16490: 0x00006FB2,
+ 16491: 0x00006FB0,
+ 16492: 0x000071C5,
+ 16493: 0x000071C2,
+ 16494: 0x000071BF,
+ 16495: 0x000071B8,
+ 16496: 0x000071D6,
+ 16497: 0x000071C0,
+ 16498: 0x000071C1,
+ 16499: 0x000071CB,
+ 16500: 0x000071D4,
+ 16501: 0x000071CA,
+ 16502: 0x000071C7,
+ 16503: 0x000071CF,
+ 16504: 0x000071BD,
+ 16505: 0x000071D8,
+ 16506: 0x000071BC,
+ 16507: 0x000071C6,
+ 16508: 0x000071DA,
+ 16509: 0x000071DB,
+ 16510: 0x0000729D,
+ 16511: 0x0000729E,
+ 16512: 0x00007369,
+ 16513: 0x00007366,
+ 16514: 0x00007367,
+ 16515: 0x0000736C,
+ 16516: 0x00007365,
+ 16517: 0x0000736B,
+ 16518: 0x0000736A,
+ 16519: 0x0000747F,
+ 16520: 0x0000749A,
+ 16521: 0x000074A0,
+ 16522: 0x00007494,
+ 16523: 0x00007492,
+ 16524: 0x00007495,
+ 16525: 0x000074A1,
+ 16526: 0x0000750B,
+ 16527: 0x00007580,
+ 16528: 0x0000762F,
+ 16529: 0x0000762D,
+ 16530: 0x00007631,
+ 16531: 0x0000763D,
+ 16532: 0x00007633,
+ 16533: 0x0000763C,
+ 16534: 0x00007635,
+ 16535: 0x00007632,
+ 16536: 0x00007630,
+ 16537: 0x000076BB,
+ 16538: 0x000076E6,
+ 16539: 0x0000779A,
+ 16540: 0x0000779D,
+ 16541: 0x000077A1,
+ 16542: 0x0000779C,
+ 16543: 0x0000779B,
+ 16544: 0x000077A2,
+ 16545: 0x000077A3,
+ 16546: 0x00007795,
+ 16547: 0x00007799,
+ 16548: 0x00007797,
+ 16549: 0x000078DD,
+ 16550: 0x000078E9,
+ 16551: 0x000078E5,
+ 16552: 0x000078EA,
+ 16553: 0x000078DE,
+ 16554: 0x000078E3,
+ 16555: 0x000078DB,
+ 16556: 0x000078E1,
+ 16557: 0x000078E2,
+ 16558: 0x000078ED,
+ 16559: 0x000078DF,
+ 16560: 0x000078E0,
+ 16561: 0x000079A4,
+ 16562: 0x00007A44,
+ 16563: 0x00007A48,
+ 16564: 0x00007A47,
+ 16565: 0x00007AB6,
+ 16566: 0x00007AB8,
+ 16567: 0x00007AB5,
+ 16568: 0x00007AB1,
+ 16569: 0x00007AB7,
+ 16570: 0x00007BDE,
+ 16571: 0x00007BE3,
+ 16572: 0x00007BE7,
+ 16573: 0x00007BDD,
+ 16574: 0x00007BD5,
+ 16575: 0x00007BE5,
+ 16576: 0x00007BDA,
+ 16577: 0x00007BE8,
+ 16578: 0x00007BF9,
+ 16579: 0x00007BD4,
+ 16580: 0x00007BEA,
+ 16581: 0x00007BE2,
+ 16582: 0x00007BDC,
+ 16583: 0x00007BEB,
+ 16584: 0x00007BD8,
+ 16585: 0x00007BDF,
+ 16586: 0x00007CD2,
+ 16587: 0x00007CD4,
+ 16588: 0x00007CD7,
+ 16589: 0x00007CD0,
+ 16590: 0x00007CD1,
+ 16591: 0x00007E12,
+ 16592: 0x00007E21,
+ 16593: 0x00007E17,
+ 16594: 0x00007E0C,
+ 16595: 0x00007E1F,
+ 16596: 0x00007E20,
+ 16597: 0x00007E13,
+ 16598: 0x00007E0E,
+ 16599: 0x00007E1C,
+ 16600: 0x00007E15,
+ 16601: 0x00007E1A,
+ 16602: 0x00007E22,
+ 16603: 0x00007E0B,
+ 16604: 0x00007E0F,
+ 16605: 0x00007E16,
+ 16606: 0x00007E0D,
+ 16607: 0x00007E14,
+ 16608: 0x00007E25,
+ 16609: 0x00007E24,
+ 16610: 0x00007F43,
+ 16611: 0x00007F7B,
+ 16612: 0x00007F7C,
+ 16613: 0x00007F7A,
+ 16614: 0x00007FB1,
+ 16615: 0x00007FEF,
+ 16616: 0x0000802A,
+ 16617: 0x00008029,
+ 16618: 0x0000806C,
+ 16619: 0x000081B1,
+ 16620: 0x000081A6,
+ 16621: 0x000081AE,
+ 16622: 0x000081B9,
+ 16623: 0x000081B5,
+ 16624: 0x000081AB,
+ 16625: 0x000081B0,
+ 16626: 0x000081AC,
+ 16627: 0x000081B4,
+ 16628: 0x000081B2,
+ 16629: 0x000081B7,
+ 16630: 0x000081A7,
+ 16631: 0x000081F2,
+ 16632: 0x00008255,
+ 16633: 0x00008256,
+ 16634: 0x00008257,
+ 16635: 0x00008556,
+ 16636: 0x00008545,
+ 16637: 0x0000856B,
+ 16638: 0x0000854D,
+ 16639: 0x00008553,
+ 16640: 0x00008561,
+ 16641: 0x00008558,
+ 16642: 0x00008540,
+ 16643: 0x00008546,
+ 16644: 0x00008564,
+ 16645: 0x00008541,
+ 16646: 0x00008562,
+ 16647: 0x00008544,
+ 16648: 0x00008551,
+ 16649: 0x00008547,
+ 16650: 0x00008563,
+ 16651: 0x0000853E,
+ 16652: 0x0000855B,
+ 16653: 0x00008571,
+ 16654: 0x0000854E,
+ 16655: 0x0000856E,
+ 16656: 0x00008575,
+ 16657: 0x00008555,
+ 16658: 0x00008567,
+ 16659: 0x00008560,
+ 16660: 0x0000858C,
+ 16661: 0x00008566,
+ 16662: 0x0000855D,
+ 16663: 0x00008554,
+ 16664: 0x00008565,
+ 16665: 0x0000856C,
+ 16666: 0x00008663,
+ 16667: 0x00008665,
+ 16668: 0x00008664,
+ 16669: 0x0000879B,
+ 16670: 0x0000878F,
+ 16671: 0x00008797,
+ 16672: 0x00008793,
+ 16673: 0x00008792,
+ 16674: 0x00008788,
+ 16675: 0x00008781,
+ 16676: 0x00008796,
+ 16677: 0x00008798,
+ 16678: 0x00008779,
+ 16679: 0x00008787,
+ 16680: 0x000087A3,
+ 16681: 0x00008785,
+ 16682: 0x00008790,
+ 16683: 0x00008791,
+ 16684: 0x0000879D,
+ 16685: 0x00008784,
+ 16686: 0x00008794,
+ 16687: 0x0000879C,
+ 16688: 0x0000879A,
+ 16689: 0x00008789,
+ 16690: 0x0000891E,
+ 16691: 0x00008926,
+ 16692: 0x00008930,
+ 16693: 0x0000892D,
+ 16694: 0x0000892E,
+ 16695: 0x00008927,
+ 16696: 0x00008931,
+ 16697: 0x00008922,
+ 16698: 0x00008929,
+ 16699: 0x00008923,
+ 16700: 0x0000892F,
+ 16701: 0x0000892C,
+ 16702: 0x0000891F,
+ 16703: 0x000089F1,
+ 16704: 0x00008AE0,
+ 16705: 0x00008AE2,
+ 16706: 0x00008AF2,
+ 16707: 0x00008AF4,
+ 16708: 0x00008AF5,
+ 16709: 0x00008ADD,
+ 16710: 0x00008B14,
+ 16711: 0x00008AE4,
+ 16712: 0x00008ADF,
+ 16713: 0x00008AF0,
+ 16714: 0x00008AC8,
+ 16715: 0x00008ADE,
+ 16716: 0x00008AE1,
+ 16717: 0x00008AE8,
+ 16718: 0x00008AFF,
+ 16719: 0x00008AEF,
+ 16720: 0x00008AFB,
+ 16721: 0x00008C91,
+ 16722: 0x00008C92,
+ 16723: 0x00008C90,
+ 16724: 0x00008CF5,
+ 16725: 0x00008CEE,
+ 16726: 0x00008CF1,
+ 16727: 0x00008CF0,
+ 16728: 0x00008CF3,
+ 16729: 0x00008D6C,
+ 16730: 0x00008D6E,
+ 16731: 0x00008DA5,
+ 16732: 0x00008DA7,
+ 16733: 0x00008E33,
+ 16734: 0x00008E3E,
+ 16735: 0x00008E38,
+ 16736: 0x00008E40,
+ 16737: 0x00008E45,
+ 16738: 0x00008E36,
+ 16739: 0x00008E3C,
+ 16740: 0x00008E3D,
+ 16741: 0x00008E41,
+ 16742: 0x00008E30,
+ 16743: 0x00008E3F,
+ 16744: 0x00008EBD,
+ 16745: 0x00008F36,
+ 16746: 0x00008F2E,
+ 16747: 0x00008F35,
+ 16748: 0x00008F32,
+ 16749: 0x00008F39,
+ 16750: 0x00008F37,
+ 16751: 0x00008F34,
+ 16752: 0x00009076,
+ 16753: 0x00009079,
+ 16754: 0x0000907B,
+ 16755: 0x00009086,
+ 16756: 0x000090FA,
+ 16757: 0x00009133,
+ 16758: 0x00009135,
+ 16759: 0x00009136,
+ 16760: 0x00009193,
+ 16761: 0x00009190,
+ 16762: 0x00009191,
+ 16763: 0x0000918D,
+ 16764: 0x0000918F,
+ 16765: 0x00009327,
+ 16766: 0x0000931E,
+ 16767: 0x00009308,
+ 16768: 0x0000931F,
+ 16769: 0x00009306,
+ 16770: 0x0000930F,
+ 16771: 0x0000937A,
+ 16772: 0x00009338,
+ 16773: 0x0000933C,
+ 16774: 0x0000931B,
+ 16775: 0x00009323,
+ 16776: 0x00009312,
+ 16777: 0x00009301,
+ 16778: 0x00009346,
+ 16779: 0x0000932D,
+ 16780: 0x0000930E,
+ 16781: 0x0000930D,
+ 16782: 0x000092CB,
+ 16783: 0x0000931D,
+ 16784: 0x000092FA,
+ 16785: 0x00009325,
+ 16786: 0x00009313,
+ 16787: 0x000092F9,
+ 16788: 0x000092F7,
+ 16789: 0x00009334,
+ 16790: 0x00009302,
+ 16791: 0x00009324,
+ 16792: 0x000092FF,
+ 16793: 0x00009329,
+ 16794: 0x00009339,
+ 16795: 0x00009335,
+ 16796: 0x0000932A,
+ 16797: 0x00009314,
+ 16798: 0x0000930C,
+ 16799: 0x0000930B,
+ 16800: 0x000092FE,
+ 16801: 0x00009309,
+ 16802: 0x00009300,
+ 16803: 0x000092FB,
+ 16804: 0x00009316,
+ 16805: 0x000095BC,
+ 16806: 0x000095CD,
+ 16807: 0x000095BE,
+ 16808: 0x000095B9,
+ 16809: 0x000095BA,
+ 16810: 0x000095B6,
+ 16811: 0x000095BF,
+ 16812: 0x000095B5,
+ 16813: 0x000095BD,
+ 16814: 0x000096A9,
+ 16815: 0x000096D4,
+ 16816: 0x0000970B,
+ 16817: 0x00009712,
+ 16818: 0x00009710,
+ 16819: 0x00009799,
+ 16820: 0x00009797,
+ 16821: 0x00009794,
+ 16822: 0x000097F0,
+ 16823: 0x000097F8,
+ 16824: 0x00009835,
+ 16825: 0x0000982F,
+ 16826: 0x00009832,
+ 16827: 0x00009924,
+ 16828: 0x0000991F,
+ 16829: 0x00009927,
+ 16830: 0x00009929,
+ 16831: 0x0000999E,
+ 16832: 0x000099EE,
+ 16833: 0x000099EC,
+ 16834: 0x000099E5,
+ 16835: 0x000099E4,
+ 16836: 0x000099F0,
+ 16837: 0x000099E3,
+ 16838: 0x000099EA,
+ 16839: 0x000099E9,
+ 16840: 0x000099E7,
+ 16841: 0x00009AB9,
+ 16842: 0x00009ABF,
+ 16843: 0x00009AB4,
+ 16844: 0x00009ABB,
+ 16845: 0x00009AF6,
+ 16846: 0x00009AFA,
+ 16847: 0x00009AF9,
+ 16848: 0x00009AF7,
+ 16849: 0x00009B33,
+ 16850: 0x00009B80,
+ 16851: 0x00009B85,
+ 16852: 0x00009B87,
+ 16853: 0x00009B7C,
+ 16854: 0x00009B7E,
+ 16855: 0x00009B7B,
+ 16856: 0x00009B82,
+ 16857: 0x00009B93,
+ 16858: 0x00009B92,
+ 16859: 0x00009B90,
+ 16860: 0x00009B7A,
+ 16861: 0x00009B95,
+ 16862: 0x00009B7D,
+ 16863: 0x00009B88,
+ 16864: 0x00009D25,
+ 16865: 0x00009D17,
+ 16866: 0x00009D20,
+ 16867: 0x00009D1E,
+ 16868: 0x00009D14,
+ 16869: 0x00009D29,
+ 16870: 0x00009D1D,
+ 16871: 0x00009D18,
+ 16872: 0x00009D22,
+ 16873: 0x00009D10,
+ 16874: 0x00009D19,
+ 16875: 0x00009D1F,
+ 16876: 0x00009E88,
+ 16877: 0x00009E86,
+ 16878: 0x00009E87,
+ 16879: 0x00009EAE,
+ 16880: 0x00009EAD,
+ 16881: 0x00009ED5,
+ 16882: 0x00009ED6,
+ 16883: 0x00009EFA,
+ 16884: 0x00009F12,
+ 16885: 0x00009F3D,
+ 16886: 0x00005126,
+ 16887: 0x00005125,
+ 16888: 0x00005122,
+ 16889: 0x00005124,
+ 16890: 0x00005120,
+ 16891: 0x00005129,
+ 16892: 0x000052F4,
+ 16893: 0x00005693,
+ 16894: 0x0000568C,
+ 16895: 0x0000568D,
+ 16896: 0x00005686,
+ 16897: 0x00005684,
+ 16898: 0x00005683,
+ 16899: 0x0000567E,
+ 16900: 0x00005682,
+ 16901: 0x0000567F,
+ 16902: 0x00005681,
+ 16903: 0x000058D6,
+ 16904: 0x000058D4,
+ 16905: 0x000058CF,
+ 16906: 0x000058D2,
+ 16907: 0x00005B2D,
+ 16908: 0x00005B25,
+ 16909: 0x00005B32,
+ 16910: 0x00005B23,
+ 16911: 0x00005B2C,
+ 16912: 0x00005B27,
+ 16913: 0x00005B26,
+ 16914: 0x00005B2F,
+ 16915: 0x00005B2E,
+ 16916: 0x00005B7B,
+ 16917: 0x00005BF1,
+ 16918: 0x00005BF2,
+ 16919: 0x00005DB7,
+ 16920: 0x00005E6C,
+ 16921: 0x00005E6A,
+ 16922: 0x00005FBE,
+ 16923: 0x00005FBB,
+ 16924: 0x000061C3,
+ 16925: 0x000061B5,
+ 16926: 0x000061BC,
+ 16927: 0x000061E7,
+ 16928: 0x000061E0,
+ 16929: 0x000061E5,
+ 16930: 0x000061E4,
+ 16931: 0x000061E8,
+ 16932: 0x000061DE,
+ 16933: 0x000064EF,
+ 16934: 0x000064E9,
+ 16935: 0x000064E3,
+ 16936: 0x000064EB,
+ 16937: 0x000064E4,
+ 16938: 0x000064E8,
+ 16939: 0x00006581,
+ 16940: 0x00006580,
+ 16941: 0x000065B6,
+ 16942: 0x000065DA,
+ 16943: 0x000066D2,
+ 16944: 0x00006A8D,
+ 16945: 0x00006A96,
+ 16946: 0x00006A81,
+ 16947: 0x00006AA5,
+ 16948: 0x00006A89,
+ 16949: 0x00006A9F,
+ 16950: 0x00006A9B,
+ 16951: 0x00006AA1,
+ 16952: 0x00006A9E,
+ 16953: 0x00006A87,
+ 16954: 0x00006A93,
+ 16955: 0x00006A8E,
+ 16956: 0x00006A95,
+ 16957: 0x00006A83,
+ 16958: 0x00006AA8,
+ 16959: 0x00006AA4,
+ 16960: 0x00006A91,
+ 16961: 0x00006A7F,
+ 16962: 0x00006AA6,
+ 16963: 0x00006A9A,
+ 16964: 0x00006A85,
+ 16965: 0x00006A8C,
+ 16966: 0x00006A92,
+ 16967: 0x00006B5B,
+ 16968: 0x00006BAD,
+ 16969: 0x00006C09,
+ 16970: 0x00006FCC,
+ 16971: 0x00006FA9,
+ 16972: 0x00006FF4,
+ 16973: 0x00006FD4,
+ 16974: 0x00006FE3,
+ 16975: 0x00006FDC,
+ 16976: 0x00006FED,
+ 16977: 0x00006FE7,
+ 16978: 0x00006FE6,
+ 16979: 0x00006FDE,
+ 16980: 0x00006FF2,
+ 16981: 0x00006FDD,
+ 16982: 0x00006FE2,
+ 16983: 0x00006FE8,
+ 16984: 0x000071E1,
+ 16985: 0x000071F1,
+ 16986: 0x000071E8,
+ 16987: 0x000071F2,
+ 16988: 0x000071E4,
+ 16989: 0x000071F0,
+ 16990: 0x000071E2,
+ 16991: 0x00007373,
+ 16992: 0x0000736E,
+ 16993: 0x0000736F,
+ 16994: 0x00007497,
+ 16995: 0x000074B2,
+ 16996: 0x000074AB,
+ 16997: 0x00007490,
+ 16998: 0x000074AA,
+ 16999: 0x000074AD,
+ 17000: 0x000074B1,
+ 17001: 0x000074A5,
+ 17002: 0x000074AF,
+ 17003: 0x00007510,
+ 17004: 0x00007511,
+ 17005: 0x00007512,
+ 17006: 0x0000750F,
+ 17007: 0x00007584,
+ 17008: 0x00007643,
+ 17009: 0x00007648,
+ 17010: 0x00007649,
+ 17011: 0x00007647,
+ 17012: 0x000076A4,
+ 17013: 0x000076E9,
+ 17014: 0x000077B5,
+ 17015: 0x000077AB,
+ 17016: 0x000077B2,
+ 17017: 0x000077B7,
+ 17018: 0x000077B6,
+ 17019: 0x000077B4,
+ 17020: 0x000077B1,
+ 17021: 0x000077A8,
+ 17022: 0x000077F0,
+ 17023: 0x000078F3,
+ 17024: 0x000078FD,
+ 17025: 0x00007902,
+ 17026: 0x000078FB,
+ 17027: 0x000078FC,
+ 17028: 0x000078F2,
+ 17029: 0x00007905,
+ 17030: 0x000078F9,
+ 17031: 0x000078FE,
+ 17032: 0x00007904,
+ 17033: 0x000079AB,
+ 17034: 0x000079A8,
+ 17035: 0x00007A5C,
+ 17036: 0x00007A5B,
+ 17037: 0x00007A56,
+ 17038: 0x00007A58,
+ 17039: 0x00007A54,
+ 17040: 0x00007A5A,
+ 17041: 0x00007ABE,
+ 17042: 0x00007AC0,
+ 17043: 0x00007AC1,
+ 17044: 0x00007C05,
+ 17045: 0x00007C0F,
+ 17046: 0x00007BF2,
+ 17047: 0x00007C00,
+ 17048: 0x00007BFF,
+ 17049: 0x00007BFB,
+ 17050: 0x00007C0E,
+ 17051: 0x00007BF4,
+ 17052: 0x00007C0B,
+ 17053: 0x00007BF3,
+ 17054: 0x00007C02,
+ 17055: 0x00007C09,
+ 17056: 0x00007C03,
+ 17057: 0x00007C01,
+ 17058: 0x00007BF8,
+ 17059: 0x00007BFD,
+ 17060: 0x00007C06,
+ 17061: 0x00007BF0,
+ 17062: 0x00007BF1,
+ 17063: 0x00007C10,
+ 17064: 0x00007C0A,
+ 17065: 0x00007CE8,
+ 17066: 0x00007E2D,
+ 17067: 0x00007E3C,
+ 17068: 0x00007E42,
+ 17069: 0x00007E33,
+ 17070: 0x00009848,
+ 17071: 0x00007E38,
+ 17072: 0x00007E2A,
+ 17073: 0x00007E49,
+ 17074: 0x00007E40,
+ 17075: 0x00007E47,
+ 17076: 0x00007E29,
+ 17077: 0x00007E4C,
+ 17078: 0x00007E30,
+ 17079: 0x00007E3B,
+ 17080: 0x00007E36,
+ 17081: 0x00007E44,
+ 17082: 0x00007E3A,
+ 17083: 0x00007F45,
+ 17084: 0x00007F7F,
+ 17085: 0x00007F7E,
+ 17086: 0x00007F7D,
+ 17087: 0x00007FF4,
+ 17088: 0x00007FF2,
+ 17089: 0x0000802C,
+ 17090: 0x000081BB,
+ 17091: 0x000081C4,
+ 17092: 0x000081CC,
+ 17093: 0x000081CA,
+ 17094: 0x000081C5,
+ 17095: 0x000081C7,
+ 17096: 0x000081BC,
+ 17097: 0x000081E9,
+ 17098: 0x0000825B,
+ 17099: 0x0000825A,
+ 17100: 0x0000825C,
+ 17101: 0x00008583,
+ 17102: 0x00008580,
+ 17103: 0x0000858F,
+ 17104: 0x000085A7,
+ 17105: 0x00008595,
+ 17106: 0x000085A0,
+ 17107: 0x0000858B,
+ 17108: 0x000085A3,
+ 17109: 0x0000857B,
+ 17110: 0x000085A4,
+ 17111: 0x0000859A,
+ 17112: 0x0000859E,
+ 17113: 0x00008577,
+ 17114: 0x0000857C,
+ 17115: 0x00008589,
+ 17116: 0x000085A1,
+ 17117: 0x0000857A,
+ 17118: 0x00008578,
+ 17119: 0x00008557,
+ 17120: 0x0000858E,
+ 17121: 0x00008596,
+ 17122: 0x00008586,
+ 17123: 0x0000858D,
+ 17124: 0x00008599,
+ 17125: 0x0000859D,
+ 17126: 0x00008581,
+ 17127: 0x000085A2,
+ 17128: 0x00008582,
+ 17129: 0x00008588,
+ 17130: 0x00008585,
+ 17131: 0x00008579,
+ 17132: 0x00008576,
+ 17133: 0x00008598,
+ 17134: 0x00008590,
+ 17135: 0x0000859F,
+ 17136: 0x00008668,
+ 17137: 0x000087BE,
+ 17138: 0x000087AA,
+ 17139: 0x000087AD,
+ 17140: 0x000087C5,
+ 17141: 0x000087B0,
+ 17142: 0x000087AC,
+ 17143: 0x000087B9,
+ 17144: 0x000087B5,
+ 17145: 0x000087BC,
+ 17146: 0x000087AE,
+ 17147: 0x000087C9,
+ 17148: 0x000087C3,
+ 17149: 0x000087C2,
+ 17150: 0x000087CC,
+ 17151: 0x000087B7,
+ 17152: 0x000087AF,
+ 17153: 0x000087C4,
+ 17154: 0x000087CA,
+ 17155: 0x000087B4,
+ 17156: 0x000087B6,
+ 17157: 0x000087BF,
+ 17158: 0x000087B8,
+ 17159: 0x000087BD,
+ 17160: 0x000087DE,
+ 17161: 0x000087B2,
+ 17162: 0x00008935,
+ 17163: 0x00008933,
+ 17164: 0x0000893C,
+ 17165: 0x0000893E,
+ 17166: 0x00008941,
+ 17167: 0x00008952,
+ 17168: 0x00008937,
+ 17169: 0x00008942,
+ 17170: 0x000089AD,
+ 17171: 0x000089AF,
+ 17172: 0x000089AE,
+ 17173: 0x000089F2,
+ 17174: 0x000089F3,
+ 17175: 0x00008B1E,
+ 17176: 0x00008B18,
+ 17177: 0x00008B16,
+ 17178: 0x00008B11,
+ 17179: 0x00008B05,
+ 17180: 0x00008B0B,
+ 17181: 0x00008B22,
+ 17182: 0x00008B0F,
+ 17183: 0x00008B12,
+ 17184: 0x00008B15,
+ 17185: 0x00008B07,
+ 17186: 0x00008B0D,
+ 17187: 0x00008B08,
+ 17188: 0x00008B06,
+ 17189: 0x00008B1C,
+ 17190: 0x00008B13,
+ 17191: 0x00008B1A,
+ 17192: 0x00008C4F,
+ 17193: 0x00008C70,
+ 17194: 0x00008C72,
+ 17195: 0x00008C71,
+ 17196: 0x00008C6F,
+ 17197: 0x00008C95,
+ 17198: 0x00008C94,
+ 17199: 0x00008CF9,
+ 17200: 0x00008D6F,
+ 17201: 0x00008E4E,
+ 17202: 0x00008E4D,
+ 17203: 0x00008E53,
+ 17204: 0x00008E50,
+ 17205: 0x00008E4C,
+ 17206: 0x00008E47,
+ 17207: 0x00008F43,
+ 17208: 0x00008F40,
+ 17209: 0x00009085,
+ 17210: 0x0000907E,
+ 17211: 0x00009138,
+ 17212: 0x0000919A,
+ 17213: 0x000091A2,
+ 17214: 0x0000919B,
+ 17215: 0x00009199,
+ 17216: 0x0000919F,
+ 17217: 0x000091A1,
+ 17218: 0x0000919D,
+ 17219: 0x000091A0,
+ 17220: 0x000093A1,
+ 17221: 0x00009383,
+ 17222: 0x000093AF,
+ 17223: 0x00009364,
+ 17224: 0x00009356,
+ 17225: 0x00009347,
+ 17226: 0x0000937C,
+ 17227: 0x00009358,
+ 17228: 0x0000935C,
+ 17229: 0x00009376,
+ 17230: 0x00009349,
+ 17231: 0x00009350,
+ 17232: 0x00009351,
+ 17233: 0x00009360,
+ 17234: 0x0000936D,
+ 17235: 0x0000938F,
+ 17236: 0x0000934C,
+ 17237: 0x0000936A,
+ 17238: 0x00009379,
+ 17239: 0x00009357,
+ 17240: 0x00009355,
+ 17241: 0x00009352,
+ 17242: 0x0000934F,
+ 17243: 0x00009371,
+ 17244: 0x00009377,
+ 17245: 0x0000937B,
+ 17246: 0x00009361,
+ 17247: 0x0000935E,
+ 17248: 0x00009363,
+ 17249: 0x00009367,
+ 17250: 0x00009380,
+ 17251: 0x0000934E,
+ 17252: 0x00009359,
+ 17253: 0x000095C7,
+ 17254: 0x000095C0,
+ 17255: 0x000095C9,
+ 17256: 0x000095C3,
+ 17257: 0x000095C5,
+ 17258: 0x000095B7,
+ 17259: 0x000096AE,
+ 17260: 0x000096B0,
+ 17261: 0x000096AC,
+ 17262: 0x00009720,
+ 17263: 0x0000971F,
+ 17264: 0x00009718,
+ 17265: 0x0000971D,
+ 17266: 0x00009719,
+ 17267: 0x0000979A,
+ 17268: 0x000097A1,
+ 17269: 0x0000979C,
+ 17270: 0x0000979E,
+ 17271: 0x0000979D,
+ 17272: 0x000097D5,
+ 17273: 0x000097D4,
+ 17274: 0x000097F1,
+ 17275: 0x00009841,
+ 17276: 0x00009844,
+ 17277: 0x0000984A,
+ 17278: 0x00009849,
+ 17279: 0x00009845,
+ 17280: 0x00009843,
+ 17281: 0x00009925,
+ 17282: 0x0000992B,
+ 17283: 0x0000992C,
+ 17284: 0x0000992A,
+ 17285: 0x00009933,
+ 17286: 0x00009932,
+ 17287: 0x0000992F,
+ 17288: 0x0000992D,
+ 17289: 0x00009931,
+ 17290: 0x00009930,
+ 17291: 0x00009998,
+ 17292: 0x000099A3,
+ 17293: 0x000099A1,
+ 17294: 0x00009A02,
+ 17295: 0x000099FA,
+ 17296: 0x000099F4,
+ 17297: 0x000099F7,
+ 17298: 0x000099F9,
+ 17299: 0x000099F8,
+ 17300: 0x000099F6,
+ 17301: 0x000099FB,
+ 17302: 0x000099FD,
+ 17303: 0x000099FE,
+ 17304: 0x000099FC,
+ 17305: 0x00009A03,
+ 17306: 0x00009ABE,
+ 17307: 0x00009AFE,
+ 17308: 0x00009AFD,
+ 17309: 0x00009B01,
+ 17310: 0x00009AFC,
+ 17311: 0x00009B48,
+ 17312: 0x00009B9A,
+ 17313: 0x00009BA8,
+ 17314: 0x00009B9E,
+ 17315: 0x00009B9B,
+ 17316: 0x00009BA6,
+ 17317: 0x00009BA1,
+ 17318: 0x00009BA5,
+ 17319: 0x00009BA4,
+ 17320: 0x00009B86,
+ 17321: 0x00009BA2,
+ 17322: 0x00009BA0,
+ 17323: 0x00009BAF,
+ 17324: 0x00009D33,
+ 17325: 0x00009D41,
+ 17326: 0x00009D67,
+ 17327: 0x00009D36,
+ 17328: 0x00009D2E,
+ 17329: 0x00009D2F,
+ 17330: 0x00009D31,
+ 17331: 0x00009D38,
+ 17332: 0x00009D30,
+ 17333: 0x00009D45,
+ 17334: 0x00009D42,
+ 17335: 0x00009D43,
+ 17336: 0x00009D3E,
+ 17337: 0x00009D37,
+ 17338: 0x00009D40,
+ 17339: 0x00009D3D,
+ 17340: 0x00007FF5,
+ 17341: 0x00009D2D,
+ 17342: 0x00009E8A,
+ 17343: 0x00009E89,
+ 17344: 0x00009E8D,
+ 17345: 0x00009EB0,
+ 17346: 0x00009EC8,
+ 17347: 0x00009EDA,
+ 17348: 0x00009EFB,
+ 17349: 0x00009EFF,
+ 17350: 0x00009F24,
+ 17351: 0x00009F23,
+ 17352: 0x00009F22,
+ 17353: 0x00009F54,
+ 17354: 0x00009FA0,
+ 17355: 0x00005131,
+ 17356: 0x0000512D,
+ 17357: 0x0000512E,
+ 17358: 0x00005698,
+ 17359: 0x0000569C,
+ 17360: 0x00005697,
+ 17361: 0x0000569A,
+ 17362: 0x0000569D,
+ 17363: 0x00005699,
+ 17364: 0x00005970,
+ 17365: 0x00005B3C,
+ 17366: 0x00005C69,
+ 17367: 0x00005C6A,
+ 17368: 0x00005DC0,
+ 17369: 0x00005E6D,
+ 17370: 0x00005E6E,
+ 17371: 0x000061D8,
+ 17372: 0x000061DF,
+ 17373: 0x000061ED,
+ 17374: 0x000061EE,
+ 17375: 0x000061F1,
+ 17376: 0x000061EA,
+ 17377: 0x000061F0,
+ 17378: 0x000061EB,
+ 17379: 0x000061D6,
+ 17380: 0x000061E9,
+ 17381: 0x000064FF,
+ 17382: 0x00006504,
+ 17383: 0x000064FD,
+ 17384: 0x000064F8,
+ 17385: 0x00006501,
+ 17386: 0x00006503,
+ 17387: 0x000064FC,
+ 17388: 0x00006594,
+ 17389: 0x000065DB,
+ 17390: 0x000066DA,
+ 17391: 0x000066DB,
+ 17392: 0x000066D8,
+ 17393: 0x00006AC5,
+ 17394: 0x00006AB9,
+ 17395: 0x00006ABD,
+ 17396: 0x00006AE1,
+ 17397: 0x00006AC6,
+ 17398: 0x00006ABA,
+ 17399: 0x00006AB6,
+ 17400: 0x00006AB7,
+ 17401: 0x00006AC7,
+ 17402: 0x00006AB4,
+ 17403: 0x00006AAD,
+ 17404: 0x00006B5E,
+ 17405: 0x00006BC9,
+ 17406: 0x00006C0B,
+ 17407: 0x00007007,
+ 17408: 0x0000700C,
+ 17409: 0x0000700D,
+ 17410: 0x00007001,
+ 17411: 0x00007005,
+ 17412: 0x00007014,
+ 17413: 0x0000700E,
+ 17414: 0x00006FFF,
+ 17415: 0x00007000,
+ 17416: 0x00006FFB,
+ 17417: 0x00007026,
+ 17418: 0x00006FFC,
+ 17419: 0x00006FF7,
+ 17420: 0x0000700A,
+ 17421: 0x00007201,
+ 17422: 0x000071FF,
+ 17423: 0x000071F9,
+ 17424: 0x00007203,
+ 17425: 0x000071FD,
+ 17426: 0x00007376,
+ 17427: 0x000074B8,
+ 17428: 0x000074C0,
+ 17429: 0x000074B5,
+ 17430: 0x000074C1,
+ 17431: 0x000074BE,
+ 17432: 0x000074B6,
+ 17433: 0x000074BB,
+ 17434: 0x000074C2,
+ 17435: 0x00007514,
+ 17436: 0x00007513,
+ 17437: 0x0000765C,
+ 17438: 0x00007664,
+ 17439: 0x00007659,
+ 17440: 0x00007650,
+ 17441: 0x00007653,
+ 17442: 0x00007657,
+ 17443: 0x0000765A,
+ 17444: 0x000076A6,
+ 17445: 0x000076BD,
+ 17446: 0x000076EC,
+ 17447: 0x000077C2,
+ 17448: 0x000077BA,
+ 17449: 0x000078FF,
+ 17450: 0x0000790C,
+ 17451: 0x00007913,
+ 17452: 0x00007914,
+ 17453: 0x00007909,
+ 17454: 0x00007910,
+ 17455: 0x00007912,
+ 17456: 0x00007911,
+ 17457: 0x000079AD,
+ 17458: 0x000079AC,
+ 17459: 0x00007A5F,
+ 17460: 0x00007C1C,
+ 17461: 0x00007C29,
+ 17462: 0x00007C19,
+ 17463: 0x00007C20,
+ 17464: 0x00007C1F,
+ 17465: 0x00007C2D,
+ 17466: 0x00007C1D,
+ 17467: 0x00007C26,
+ 17468: 0x00007C28,
+ 17469: 0x00007C22,
+ 17470: 0x00007C25,
+ 17471: 0x00007C30,
+ 17472: 0x00007E5C,
+ 17473: 0x00007E50,
+ 17474: 0x00007E56,
+ 17475: 0x00007E63,
+ 17476: 0x00007E58,
+ 17477: 0x00007E62,
+ 17478: 0x00007E5F,
+ 17479: 0x00007E51,
+ 17480: 0x00007E60,
+ 17481: 0x00007E57,
+ 17482: 0x00007E53,
+ 17483: 0x00007FB5,
+ 17484: 0x00007FB3,
+ 17485: 0x00007FF7,
+ 17486: 0x00007FF8,
+ 17487: 0x00008075,
+ 17488: 0x000081D1,
+ 17489: 0x000081D2,
+ 17490: 0x000081D0,
+ 17491: 0x0000825F,
+ 17492: 0x0000825E,
+ 17493: 0x000085B4,
+ 17494: 0x000085C6,
+ 17495: 0x000085C0,
+ 17496: 0x000085C3,
+ 17497: 0x000085C2,
+ 17498: 0x000085B3,
+ 17499: 0x000085B5,
+ 17500: 0x000085BD,
+ 17501: 0x000085C7,
+ 17502: 0x000085C4,
+ 17503: 0x000085BF,
+ 17504: 0x000085CB,
+ 17505: 0x000085CE,
+ 17506: 0x000085C8,
+ 17507: 0x000085C5,
+ 17508: 0x000085B1,
+ 17509: 0x000085B6,
+ 17510: 0x000085D2,
+ 17511: 0x00008624,
+ 17512: 0x000085B8,
+ 17513: 0x000085B7,
+ 17514: 0x000085BE,
+ 17515: 0x00008669,
+ 17516: 0x000087E7,
+ 17517: 0x000087E6,
+ 17518: 0x000087E2,
+ 17519: 0x000087DB,
+ 17520: 0x000087EB,
+ 17521: 0x000087EA,
+ 17522: 0x000087E5,
+ 17523: 0x000087DF,
+ 17524: 0x000087F3,
+ 17525: 0x000087E4,
+ 17526: 0x000087D4,
+ 17527: 0x000087DC,
+ 17528: 0x000087D3,
+ 17529: 0x000087ED,
+ 17530: 0x000087D8,
+ 17531: 0x000087E3,
+ 17532: 0x000087A4,
+ 17533: 0x000087D7,
+ 17534: 0x000087D9,
+ 17535: 0x00008801,
+ 17536: 0x000087F4,
+ 17537: 0x000087E8,
+ 17538: 0x000087DD,
+ 17539: 0x00008953,
+ 17540: 0x0000894B,
+ 17541: 0x0000894F,
+ 17542: 0x0000894C,
+ 17543: 0x00008946,
+ 17544: 0x00008950,
+ 17545: 0x00008951,
+ 17546: 0x00008949,
+ 17547: 0x00008B2A,
+ 17548: 0x00008B27,
+ 17549: 0x00008B23,
+ 17550: 0x00008B33,
+ 17551: 0x00008B30,
+ 17552: 0x00008B35,
+ 17553: 0x00008B47,
+ 17554: 0x00008B2F,
+ 17555: 0x00008B3C,
+ 17556: 0x00008B3E,
+ 17557: 0x00008B31,
+ 17558: 0x00008B25,
+ 17559: 0x00008B37,
+ 17560: 0x00008B26,
+ 17561: 0x00008B36,
+ 17562: 0x00008B2E,
+ 17563: 0x00008B24,
+ 17564: 0x00008B3B,
+ 17565: 0x00008B3D,
+ 17566: 0x00008B3A,
+ 17567: 0x00008C42,
+ 17568: 0x00008C75,
+ 17569: 0x00008C99,
+ 17570: 0x00008C98,
+ 17571: 0x00008C97,
+ 17572: 0x00008CFE,
+ 17573: 0x00008D04,
+ 17574: 0x00008D02,
+ 17575: 0x00008D00,
+ 17576: 0x00008E5C,
+ 17577: 0x00008E62,
+ 17578: 0x00008E60,
+ 17579: 0x00008E57,
+ 17580: 0x00008E56,
+ 17581: 0x00008E5E,
+ 17582: 0x00008E65,
+ 17583: 0x00008E67,
+ 17584: 0x00008E5B,
+ 17585: 0x00008E5A,
+ 17586: 0x00008E61,
+ 17587: 0x00008E5D,
+ 17588: 0x00008E69,
+ 17589: 0x00008E54,
+ 17590: 0x00008F46,
+ 17591: 0x00008F47,
+ 17592: 0x00008F48,
+ 17593: 0x00008F4B,
+ 17594: 0x00009128,
+ 17595: 0x0000913A,
+ 17596: 0x0000913B,
+ 17597: 0x0000913E,
+ 17598: 0x000091A8,
+ 17599: 0x000091A5,
+ 17600: 0x000091A7,
+ 17601: 0x000091AF,
+ 17602: 0x000091AA,
+ 17603: 0x000093B5,
+ 17604: 0x0000938C,
+ 17605: 0x00009392,
+ 17606: 0x000093B7,
+ 17607: 0x0000939B,
+ 17608: 0x0000939D,
+ 17609: 0x00009389,
+ 17610: 0x000093A7,
+ 17611: 0x0000938E,
+ 17612: 0x000093AA,
+ 17613: 0x0000939E,
+ 17614: 0x000093A6,
+ 17615: 0x00009395,
+ 17616: 0x00009388,
+ 17617: 0x00009399,
+ 17618: 0x0000939F,
+ 17619: 0x0000938D,
+ 17620: 0x000093B1,
+ 17621: 0x00009391,
+ 17622: 0x000093B2,
+ 17623: 0x000093A4,
+ 17624: 0x000093A8,
+ 17625: 0x000093B4,
+ 17626: 0x000093A3,
+ 17627: 0x000093A5,
+ 17628: 0x000095D2,
+ 17629: 0x000095D3,
+ 17630: 0x000095D1,
+ 17631: 0x000096B3,
+ 17632: 0x000096D7,
+ 17633: 0x000096DA,
+ 17634: 0x00005DC2,
+ 17635: 0x000096DF,
+ 17636: 0x000096D8,
+ 17637: 0x000096DD,
+ 17638: 0x00009723,
+ 17639: 0x00009722,
+ 17640: 0x00009725,
+ 17641: 0x000097AC,
+ 17642: 0x000097AE,
+ 17643: 0x000097A8,
+ 17644: 0x000097AB,
+ 17645: 0x000097A4,
+ 17646: 0x000097AA,
+ 17647: 0x000097A2,
+ 17648: 0x000097A5,
+ 17649: 0x000097D7,
+ 17650: 0x000097D9,
+ 17651: 0x000097D6,
+ 17652: 0x000097D8,
+ 17653: 0x000097FA,
+ 17654: 0x00009850,
+ 17655: 0x00009851,
+ 17656: 0x00009852,
+ 17657: 0x000098B8,
+ 17658: 0x00009941,
+ 17659: 0x0000993C,
+ 17660: 0x0000993A,
+ 17661: 0x00009A0F,
+ 17662: 0x00009A0B,
+ 17663: 0x00009A09,
+ 17664: 0x00009A0D,
+ 17665: 0x00009A04,
+ 17666: 0x00009A11,
+ 17667: 0x00009A0A,
+ 17668: 0x00009A05,
+ 17669: 0x00009A07,
+ 17670: 0x00009A06,
+ 17671: 0x00009AC0,
+ 17672: 0x00009ADC,
+ 17673: 0x00009B08,
+ 17674: 0x00009B04,
+ 17675: 0x00009B05,
+ 17676: 0x00009B29,
+ 17677: 0x00009B35,
+ 17678: 0x00009B4A,
+ 17679: 0x00009B4C,
+ 17680: 0x00009B4B,
+ 17681: 0x00009BC7,
+ 17682: 0x00009BC6,
+ 17683: 0x00009BC3,
+ 17684: 0x00009BBF,
+ 17685: 0x00009BC1,
+ 17686: 0x00009BB5,
+ 17687: 0x00009BB8,
+ 17688: 0x00009BD3,
+ 17689: 0x00009BB6,
+ 17690: 0x00009BC4,
+ 17691: 0x00009BB9,
+ 17692: 0x00009BBD,
+ 17693: 0x00009D5C,
+ 17694: 0x00009D53,
+ 17695: 0x00009D4F,
+ 17696: 0x00009D4A,
+ 17697: 0x00009D5B,
+ 17698: 0x00009D4B,
+ 17699: 0x00009D59,
+ 17700: 0x00009D56,
+ 17701: 0x00009D4C,
+ 17702: 0x00009D57,
+ 17703: 0x00009D52,
+ 17704: 0x00009D54,
+ 17705: 0x00009D5F,
+ 17706: 0x00009D58,
+ 17707: 0x00009D5A,
+ 17708: 0x00009E8E,
+ 17709: 0x00009E8C,
+ 17710: 0x00009EDF,
+ 17711: 0x00009F01,
+ 17712: 0x00009F00,
+ 17713: 0x00009F16,
+ 17714: 0x00009F25,
+ 17715: 0x00009F2B,
+ 17716: 0x00009F2A,
+ 17717: 0x00009F29,
+ 17718: 0x00009F28,
+ 17719: 0x00009F4C,
+ 17720: 0x00009F55,
+ 17721: 0x00005134,
+ 17722: 0x00005135,
+ 17723: 0x00005296,
+ 17724: 0x000052F7,
+ 17725: 0x000053B4,
+ 17726: 0x000056AB,
+ 17727: 0x000056AD,
+ 17728: 0x000056A6,
+ 17729: 0x000056A7,
+ 17730: 0x000056AA,
+ 17731: 0x000056AC,
+ 17732: 0x000058DA,
+ 17733: 0x000058DD,
+ 17734: 0x000058DB,
+ 17735: 0x00005912,
+ 17736: 0x00005B3D,
+ 17737: 0x00005B3E,
+ 17738: 0x00005B3F,
+ 17739: 0x00005DC3,
+ 17740: 0x00005E70,
+ 17741: 0x00005FBF,
+ 17742: 0x000061FB,
+ 17743: 0x00006507,
+ 17744: 0x00006510,
+ 17745: 0x0000650D,
+ 17746: 0x00006509,
+ 17747: 0x0000650C,
+ 17748: 0x0000650E,
+ 17749: 0x00006584,
+ 17750: 0x000065DE,
+ 17751: 0x000065DD,
+ 17752: 0x000066DE,
+ 17753: 0x00006AE7,
+ 17754: 0x00006AE0,
+ 17755: 0x00006ACC,
+ 17756: 0x00006AD1,
+ 17757: 0x00006AD9,
+ 17758: 0x00006ACB,
+ 17759: 0x00006ADF,
+ 17760: 0x00006ADC,
+ 17761: 0x00006AD0,
+ 17762: 0x00006AEB,
+ 17763: 0x00006ACF,
+ 17764: 0x00006ACD,
+ 17765: 0x00006ADE,
+ 17766: 0x00006B60,
+ 17767: 0x00006BB0,
+ 17768: 0x00006C0C,
+ 17769: 0x00007019,
+ 17770: 0x00007027,
+ 17771: 0x00007020,
+ 17772: 0x00007016,
+ 17773: 0x0000702B,
+ 17774: 0x00007021,
+ 17775: 0x00007022,
+ 17776: 0x00007023,
+ 17777: 0x00007029,
+ 17778: 0x00007017,
+ 17779: 0x00007024,
+ 17780: 0x0000701C,
+ 17781: 0x0000702A,
+ 17782: 0x0000720C,
+ 17783: 0x0000720A,
+ 17784: 0x00007207,
+ 17785: 0x00007202,
+ 17786: 0x00007205,
+ 17787: 0x000072A5,
+ 17788: 0x000072A6,
+ 17789: 0x000072A4,
+ 17790: 0x000072A3,
+ 17791: 0x000072A1,
+ 17792: 0x000074CB,
+ 17793: 0x000074C5,
+ 17794: 0x000074B7,
+ 17795: 0x000074C3,
+ 17796: 0x00007516,
+ 17797: 0x00007660,
+ 17798: 0x000077C9,
+ 17799: 0x000077CA,
+ 17800: 0x000077C4,
+ 17801: 0x000077F1,
+ 17802: 0x0000791D,
+ 17803: 0x0000791B,
+ 17804: 0x00007921,
+ 17805: 0x0000791C,
+ 17806: 0x00007917,
+ 17807: 0x0000791E,
+ 17808: 0x000079B0,
+ 17809: 0x00007A67,
+ 17810: 0x00007A68,
+ 17811: 0x00007C33,
+ 17812: 0x00007C3C,
+ 17813: 0x00007C39,
+ 17814: 0x00007C2C,
+ 17815: 0x00007C3B,
+ 17816: 0x00007CEC,
+ 17817: 0x00007CEA,
+ 17818: 0x00007E76,
+ 17819: 0x00007E75,
+ 17820: 0x00007E78,
+ 17821: 0x00007E70,
+ 17822: 0x00007E77,
+ 17823: 0x00007E6F,
+ 17824: 0x00007E7A,
+ 17825: 0x00007E72,
+ 17826: 0x00007E74,
+ 17827: 0x00007E68,
+ 17828: 0x00007F4B,
+ 17829: 0x00007F4A,
+ 17830: 0x00007F83,
+ 17831: 0x00007F86,
+ 17832: 0x00007FB7,
+ 17833: 0x00007FFD,
+ 17834: 0x00007FFE,
+ 17835: 0x00008078,
+ 17836: 0x000081D7,
+ 17837: 0x000081D5,
+ 17838: 0x00008264,
+ 17839: 0x00008261,
+ 17840: 0x00008263,
+ 17841: 0x000085EB,
+ 17842: 0x000085F1,
+ 17843: 0x000085ED,
+ 17844: 0x000085D9,
+ 17845: 0x000085E1,
+ 17846: 0x000085E8,
+ 17847: 0x000085DA,
+ 17848: 0x000085D7,
+ 17849: 0x000085EC,
+ 17850: 0x000085F2,
+ 17851: 0x000085F8,
+ 17852: 0x000085D8,
+ 17853: 0x000085DF,
+ 17854: 0x000085E3,
+ 17855: 0x000085DC,
+ 17856: 0x000085D1,
+ 17857: 0x000085F0,
+ 17858: 0x000085E6,
+ 17859: 0x000085EF,
+ 17860: 0x000085DE,
+ 17861: 0x000085E2,
+ 17862: 0x00008800,
+ 17863: 0x000087FA,
+ 17864: 0x00008803,
+ 17865: 0x000087F6,
+ 17866: 0x000087F7,
+ 17867: 0x00008809,
+ 17868: 0x0000880C,
+ 17869: 0x0000880B,
+ 17870: 0x00008806,
+ 17871: 0x000087FC,
+ 17872: 0x00008808,
+ 17873: 0x000087FF,
+ 17874: 0x0000880A,
+ 17875: 0x00008802,
+ 17876: 0x00008962,
+ 17877: 0x0000895A,
+ 17878: 0x0000895B,
+ 17879: 0x00008957,
+ 17880: 0x00008961,
+ 17881: 0x0000895C,
+ 17882: 0x00008958,
+ 17883: 0x0000895D,
+ 17884: 0x00008959,
+ 17885: 0x00008988,
+ 17886: 0x000089B7,
+ 17887: 0x000089B6,
+ 17888: 0x000089F6,
+ 17889: 0x00008B50,
+ 17890: 0x00008B48,
+ 17891: 0x00008B4A,
+ 17892: 0x00008B40,
+ 17893: 0x00008B53,
+ 17894: 0x00008B56,
+ 17895: 0x00008B54,
+ 17896: 0x00008B4B,
+ 17897: 0x00008B55,
+ 17898: 0x00008B51,
+ 17899: 0x00008B42,
+ 17900: 0x00008B52,
+ 17901: 0x00008B57,
+ 17902: 0x00008C43,
+ 17903: 0x00008C77,
+ 17904: 0x00008C76,
+ 17905: 0x00008C9A,
+ 17906: 0x00008D06,
+ 17907: 0x00008D07,
+ 17908: 0x00008D09,
+ 17909: 0x00008DAC,
+ 17910: 0x00008DAA,
+ 17911: 0x00008DAD,
+ 17912: 0x00008DAB,
+ 17913: 0x00008E6D,
+ 17914: 0x00008E78,
+ 17915: 0x00008E73,
+ 17916: 0x00008E6A,
+ 17917: 0x00008E6F,
+ 17918: 0x00008E7B,
+ 17919: 0x00008EC2,
+ 17920: 0x00008F52,
+ 17921: 0x00008F51,
+ 17922: 0x00008F4F,
+ 17923: 0x00008F50,
+ 17924: 0x00008F53,
+ 17925: 0x00008FB4,
+ 17926: 0x00009140,
+ 17927: 0x0000913F,
+ 17928: 0x000091B0,
+ 17929: 0x000091AD,
+ 17930: 0x000093DE,
+ 17931: 0x000093C7,
+ 17932: 0x000093CF,
+ 17933: 0x000093C2,
+ 17934: 0x000093DA,
+ 17935: 0x000093D0,
+ 17936: 0x000093F9,
+ 17937: 0x000093EC,
+ 17938: 0x000093CC,
+ 17939: 0x000093D9,
+ 17940: 0x000093A9,
+ 17941: 0x000093E6,
+ 17942: 0x000093CA,
+ 17943: 0x000093D4,
+ 17944: 0x000093EE,
+ 17945: 0x000093E3,
+ 17946: 0x000093D5,
+ 17947: 0x000093C4,
+ 17948: 0x000093CE,
+ 17949: 0x000093C0,
+ 17950: 0x000093D2,
+ 17951: 0x000093E7,
+ 17952: 0x0000957D,
+ 17953: 0x000095DA,
+ 17954: 0x000095DB,
+ 17955: 0x000096E1,
+ 17956: 0x00009729,
+ 17957: 0x0000972B,
+ 17958: 0x0000972C,
+ 17959: 0x00009728,
+ 17960: 0x00009726,
+ 17961: 0x000097B3,
+ 17962: 0x000097B7,
+ 17963: 0x000097B6,
+ 17964: 0x000097DD,
+ 17965: 0x000097DE,
+ 17966: 0x000097DF,
+ 17967: 0x0000985C,
+ 17968: 0x00009859,
+ 17969: 0x0000985D,
+ 17970: 0x00009857,
+ 17971: 0x000098BF,
+ 17972: 0x000098BD,
+ 17973: 0x000098BB,
+ 17974: 0x000098BE,
+ 17975: 0x00009948,
+ 17976: 0x00009947,
+ 17977: 0x00009943,
+ 17978: 0x000099A6,
+ 17979: 0x000099A7,
+ 17980: 0x00009A1A,
+ 17981: 0x00009A15,
+ 17982: 0x00009A25,
+ 17983: 0x00009A1D,
+ 17984: 0x00009A24,
+ 17985: 0x00009A1B,
+ 17986: 0x00009A22,
+ 17987: 0x00009A20,
+ 17988: 0x00009A27,
+ 17989: 0x00009A23,
+ 17990: 0x00009A1E,
+ 17991: 0x00009A1C,
+ 17992: 0x00009A14,
+ 17993: 0x00009AC2,
+ 17994: 0x00009B0B,
+ 17995: 0x00009B0A,
+ 17996: 0x00009B0E,
+ 17997: 0x00009B0C,
+ 17998: 0x00009B37,
+ 17999: 0x00009BEA,
+ 18000: 0x00009BEB,
+ 18001: 0x00009BE0,
+ 18002: 0x00009BDE,
+ 18003: 0x00009BE4,
+ 18004: 0x00009BE6,
+ 18005: 0x00009BE2,
+ 18006: 0x00009BF0,
+ 18007: 0x00009BD4,
+ 18008: 0x00009BD7,
+ 18009: 0x00009BEC,
+ 18010: 0x00009BDC,
+ 18011: 0x00009BD9,
+ 18012: 0x00009BE5,
+ 18013: 0x00009BD5,
+ 18014: 0x00009BE1,
+ 18015: 0x00009BDA,
+ 18016: 0x00009D77,
+ 18017: 0x00009D81,
+ 18018: 0x00009D8A,
+ 18019: 0x00009D84,
+ 18020: 0x00009D88,
+ 18021: 0x00009D71,
+ 18022: 0x00009D80,
+ 18023: 0x00009D78,
+ 18024: 0x00009D86,
+ 18025: 0x00009D8B,
+ 18026: 0x00009D8C,
+ 18027: 0x00009D7D,
+ 18028: 0x00009D6B,
+ 18029: 0x00009D74,
+ 18030: 0x00009D75,
+ 18031: 0x00009D70,
+ 18032: 0x00009D69,
+ 18033: 0x00009D85,
+ 18034: 0x00009D73,
+ 18035: 0x00009D7B,
+ 18036: 0x00009D82,
+ 18037: 0x00009D6F,
+ 18038: 0x00009D79,
+ 18039: 0x00009D7F,
+ 18040: 0x00009D87,
+ 18041: 0x00009D68,
+ 18042: 0x00009E94,
+ 18043: 0x00009E91,
+ 18044: 0x00009EC0,
+ 18045: 0x00009EFC,
+ 18046: 0x00009F2D,
+ 18047: 0x00009F40,
+ 18048: 0x00009F41,
+ 18049: 0x00009F4D,
+ 18050: 0x00009F56,
+ 18051: 0x00009F57,
+ 18052: 0x00009F58,
+ 18053: 0x00005337,
+ 18054: 0x000056B2,
+ 18055: 0x000056B5,
+ 18056: 0x000056B3,
+ 18057: 0x000058E3,
+ 18058: 0x00005B45,
+ 18059: 0x00005DC6,
+ 18060: 0x00005DC7,
+ 18061: 0x00005EEE,
+ 18062: 0x00005EEF,
+ 18063: 0x00005FC0,
+ 18064: 0x00005FC1,
+ 18065: 0x000061F9,
+ 18066: 0x00006517,
+ 18067: 0x00006516,
+ 18068: 0x00006515,
+ 18069: 0x00006513,
+ 18070: 0x000065DF,
+ 18071: 0x000066E8,
+ 18072: 0x000066E3,
+ 18073: 0x000066E4,
+ 18074: 0x00006AF3,
+ 18075: 0x00006AF0,
+ 18076: 0x00006AEA,
+ 18077: 0x00006AE8,
+ 18078: 0x00006AF9,
+ 18079: 0x00006AF1,
+ 18080: 0x00006AEE,
+ 18081: 0x00006AEF,
+ 18082: 0x0000703C,
+ 18083: 0x00007035,
+ 18084: 0x0000702F,
+ 18085: 0x00007037,
+ 18086: 0x00007034,
+ 18087: 0x00007031,
+ 18088: 0x00007042,
+ 18089: 0x00007038,
+ 18090: 0x0000703F,
+ 18091: 0x0000703A,
+ 18092: 0x00007039,
+ 18093: 0x00007040,
+ 18094: 0x0000703B,
+ 18095: 0x00007033,
+ 18096: 0x00007041,
+ 18097: 0x00007213,
+ 18098: 0x00007214,
+ 18099: 0x000072A8,
+ 18100: 0x0000737D,
+ 18101: 0x0000737C,
+ 18102: 0x000074BA,
+ 18103: 0x000076AB,
+ 18104: 0x000076AA,
+ 18105: 0x000076BE,
+ 18106: 0x000076ED,
+ 18107: 0x000077CC,
+ 18108: 0x000077CE,
+ 18109: 0x000077CF,
+ 18110: 0x000077CD,
+ 18111: 0x000077F2,
+ 18112: 0x00007925,
+ 18113: 0x00007923,
+ 18114: 0x00007927,
+ 18115: 0x00007928,
+ 18116: 0x00007924,
+ 18117: 0x00007929,
+ 18118: 0x000079B2,
+ 18119: 0x00007A6E,
+ 18120: 0x00007A6C,
+ 18121: 0x00007A6D,
+ 18122: 0x00007AF7,
+ 18123: 0x00007C49,
+ 18124: 0x00007C48,
+ 18125: 0x00007C4A,
+ 18126: 0x00007C47,
+ 18127: 0x00007C45,
+ 18128: 0x00007CEE,
+ 18129: 0x00007E7B,
+ 18130: 0x00007E7E,
+ 18131: 0x00007E81,
+ 18132: 0x00007E80,
+ 18133: 0x00007FBA,
+ 18134: 0x00007FFF,
+ 18135: 0x00008079,
+ 18136: 0x000081DB,
+ 18137: 0x000081D9,
+ 18138: 0x0000820B,
+ 18139: 0x00008268,
+ 18140: 0x00008269,
+ 18141: 0x00008622,
+ 18142: 0x000085FF,
+ 18143: 0x00008601,
+ 18144: 0x000085FE,
+ 18145: 0x0000861B,
+ 18146: 0x00008600,
+ 18147: 0x000085F6,
+ 18148: 0x00008604,
+ 18149: 0x00008609,
+ 18150: 0x00008605,
+ 18151: 0x0000860C,
+ 18152: 0x000085FD,
+ 18153: 0x00008819,
+ 18154: 0x00008810,
+ 18155: 0x00008811,
+ 18156: 0x00008817,
+ 18157: 0x00008813,
+ 18158: 0x00008816,
+ 18159: 0x00008963,
+ 18160: 0x00008966,
+ 18161: 0x000089B9,
+ 18162: 0x000089F7,
+ 18163: 0x00008B60,
+ 18164: 0x00008B6A,
+ 18165: 0x00008B5D,
+ 18166: 0x00008B68,
+ 18167: 0x00008B63,
+ 18168: 0x00008B65,
+ 18169: 0x00008B67,
+ 18170: 0x00008B6D,
+ 18171: 0x00008DAE,
+ 18172: 0x00008E86,
+ 18173: 0x00008E88,
+ 18174: 0x00008E84,
+ 18175: 0x00008F59,
+ 18176: 0x00008F56,
+ 18177: 0x00008F57,
+ 18178: 0x00008F55,
+ 18179: 0x00008F58,
+ 18180: 0x00008F5A,
+ 18181: 0x0000908D,
+ 18182: 0x00009143,
+ 18183: 0x00009141,
+ 18184: 0x000091B7,
+ 18185: 0x000091B5,
+ 18186: 0x000091B2,
+ 18187: 0x000091B3,
+ 18188: 0x0000940B,
+ 18189: 0x00009413,
+ 18190: 0x000093FB,
+ 18191: 0x00009420,
+ 18192: 0x0000940F,
+ 18193: 0x00009414,
+ 18194: 0x000093FE,
+ 18195: 0x00009415,
+ 18196: 0x00009410,
+ 18197: 0x00009428,
+ 18198: 0x00009419,
+ 18199: 0x0000940D,
+ 18200: 0x000093F5,
+ 18201: 0x00009400,
+ 18202: 0x000093F7,
+ 18203: 0x00009407,
+ 18204: 0x0000940E,
+ 18205: 0x00009416,
+ 18206: 0x00009412,
+ 18207: 0x000093FA,
+ 18208: 0x00009409,
+ 18209: 0x000093F8,
+ 18210: 0x0000940A,
+ 18211: 0x000093FF,
+ 18212: 0x000093FC,
+ 18213: 0x0000940C,
+ 18214: 0x000093F6,
+ 18215: 0x00009411,
+ 18216: 0x00009406,
+ 18217: 0x000095DE,
+ 18218: 0x000095E0,
+ 18219: 0x000095DF,
+ 18220: 0x0000972E,
+ 18221: 0x0000972F,
+ 18222: 0x000097B9,
+ 18223: 0x000097BB,
+ 18224: 0x000097FD,
+ 18225: 0x000097FE,
+ 18226: 0x00009860,
+ 18227: 0x00009862,
+ 18228: 0x00009863,
+ 18229: 0x0000985F,
+ 18230: 0x000098C1,
+ 18231: 0x000098C2,
+ 18232: 0x00009950,
+ 18233: 0x0000994E,
+ 18234: 0x00009959,
+ 18235: 0x0000994C,
+ 18236: 0x0000994B,
+ 18237: 0x00009953,
+ 18238: 0x00009A32,
+ 18239: 0x00009A34,
+ 18240: 0x00009A31,
+ 18241: 0x00009A2C,
+ 18242: 0x00009A2A,
+ 18243: 0x00009A36,
+ 18244: 0x00009A29,
+ 18245: 0x00009A2E,
+ 18246: 0x00009A38,
+ 18247: 0x00009A2D,
+ 18248: 0x00009AC7,
+ 18249: 0x00009ACA,
+ 18250: 0x00009AC6,
+ 18251: 0x00009B10,
+ 18252: 0x00009B12,
+ 18253: 0x00009B11,
+ 18254: 0x00009C0B,
+ 18255: 0x00009C08,
+ 18256: 0x00009BF7,
+ 18257: 0x00009C05,
+ 18258: 0x00009C12,
+ 18259: 0x00009BF8,
+ 18260: 0x00009C40,
+ 18261: 0x00009C07,
+ 18262: 0x00009C0E,
+ 18263: 0x00009C06,
+ 18264: 0x00009C17,
+ 18265: 0x00009C14,
+ 18266: 0x00009C09,
+ 18267: 0x00009D9F,
+ 18268: 0x00009D99,
+ 18269: 0x00009DA4,
+ 18270: 0x00009D9D,
+ 18271: 0x00009D92,
+ 18272: 0x00009D98,
+ 18273: 0x00009D90,
+ 18274: 0x00009D9B,
+ 18275: 0x00009DA0,
+ 18276: 0x00009D94,
+ 18277: 0x00009D9C,
+ 18278: 0x00009DAA,
+ 18279: 0x00009D97,
+ 18280: 0x00009DA1,
+ 18281: 0x00009D9A,
+ 18282: 0x00009DA2,
+ 18283: 0x00009DA8,
+ 18284: 0x00009D9E,
+ 18285: 0x00009DA3,
+ 18286: 0x00009DBF,
+ 18287: 0x00009DA9,
+ 18288: 0x00009D96,
+ 18289: 0x00009DA6,
+ 18290: 0x00009DA7,
+ 18291: 0x00009E99,
+ 18292: 0x00009E9B,
+ 18293: 0x00009E9A,
+ 18294: 0x00009EE5,
+ 18295: 0x00009EE4,
+ 18296: 0x00009EE7,
+ 18297: 0x00009EE6,
+ 18298: 0x00009F30,
+ 18299: 0x00009F2E,
+ 18300: 0x00009F5B,
+ 18301: 0x00009F60,
+ 18302: 0x00009F5E,
+ 18303: 0x00009F5D,
+ 18304: 0x00009F59,
+ 18305: 0x00009F91,
+ 18306: 0x0000513A,
+ 18307: 0x00005139,
+ 18308: 0x00005298,
+ 18309: 0x00005297,
+ 18310: 0x000056C3,
+ 18311: 0x000056BD,
+ 18312: 0x000056BE,
+ 18313: 0x00005B48,
+ 18314: 0x00005B47,
+ 18315: 0x00005DCB,
+ 18316: 0x00005DCF,
+ 18317: 0x00005EF1,
+ 18318: 0x000061FD,
+ 18319: 0x0000651B,
+ 18320: 0x00006B02,
+ 18321: 0x00006AFC,
+ 18322: 0x00006B03,
+ 18323: 0x00006AF8,
+ 18324: 0x00006B00,
+ 18325: 0x00007043,
+ 18326: 0x00007044,
+ 18327: 0x0000704A,
+ 18328: 0x00007048,
+ 18329: 0x00007049,
+ 18330: 0x00007045,
+ 18331: 0x00007046,
+ 18332: 0x0000721D,
+ 18333: 0x0000721A,
+ 18334: 0x00007219,
+ 18335: 0x0000737E,
+ 18336: 0x00007517,
+ 18337: 0x0000766A,
+ 18338: 0x000077D0,
+ 18339: 0x0000792D,
+ 18340: 0x00007931,
+ 18341: 0x0000792F,
+ 18342: 0x00007C54,
+ 18343: 0x00007C53,
+ 18344: 0x00007CF2,
+ 18345: 0x00007E8A,
+ 18346: 0x00007E87,
+ 18347: 0x00007E88,
+ 18348: 0x00007E8B,
+ 18349: 0x00007E86,
+ 18350: 0x00007E8D,
+ 18351: 0x00007F4D,
+ 18352: 0x00007FBB,
+ 18353: 0x00008030,
+ 18354: 0x000081DD,
+ 18355: 0x00008618,
+ 18356: 0x0000862A,
+ 18357: 0x00008626,
+ 18358: 0x0000861F,
+ 18359: 0x00008623,
+ 18360: 0x0000861C,
+ 18361: 0x00008619,
+ 18362: 0x00008627,
+ 18363: 0x0000862E,
+ 18364: 0x00008621,
+ 18365: 0x00008620,
+ 18366: 0x00008629,
+ 18367: 0x0000861E,
+ 18368: 0x00008625,
+ 18369: 0x00008829,
+ 18370: 0x0000881D,
+ 18371: 0x0000881B,
+ 18372: 0x00008820,
+ 18373: 0x00008824,
+ 18374: 0x0000881C,
+ 18375: 0x0000882B,
+ 18376: 0x0000884A,
+ 18377: 0x0000896D,
+ 18378: 0x00008969,
+ 18379: 0x0000896E,
+ 18380: 0x0000896B,
+ 18381: 0x000089FA,
+ 18382: 0x00008B79,
+ 18383: 0x00008B78,
+ 18384: 0x00008B45,
+ 18385: 0x00008B7A,
+ 18386: 0x00008B7B,
+ 18387: 0x00008D10,
+ 18388: 0x00008D14,
+ 18389: 0x00008DAF,
+ 18390: 0x00008E8E,
+ 18391: 0x00008E8C,
+ 18392: 0x00008F5E,
+ 18393: 0x00008F5B,
+ 18394: 0x00008F5D,
+ 18395: 0x00009146,
+ 18396: 0x00009144,
+ 18397: 0x00009145,
+ 18398: 0x000091B9,
+ 18399: 0x0000943F,
+ 18400: 0x0000943B,
+ 18401: 0x00009436,
+ 18402: 0x00009429,
+ 18403: 0x0000943D,
+ 18404: 0x0000943C,
+ 18405: 0x00009430,
+ 18406: 0x00009439,
+ 18407: 0x0000942A,
+ 18408: 0x00009437,
+ 18409: 0x0000942C,
+ 18410: 0x00009440,
+ 18411: 0x00009431,
+ 18412: 0x000095E5,
+ 18413: 0x000095E4,
+ 18414: 0x000095E3,
+ 18415: 0x00009735,
+ 18416: 0x0000973A,
+ 18417: 0x000097BF,
+ 18418: 0x000097E1,
+ 18419: 0x00009864,
+ 18420: 0x000098C9,
+ 18421: 0x000098C6,
+ 18422: 0x000098C0,
+ 18423: 0x00009958,
+ 18424: 0x00009956,
+ 18425: 0x00009A39,
+ 18426: 0x00009A3D,
+ 18427: 0x00009A46,
+ 18428: 0x00009A44,
+ 18429: 0x00009A42,
+ 18430: 0x00009A41,
+ 18431: 0x00009A3A,
+ 18432: 0x00009A3F,
+ 18433: 0x00009ACD,
+ 18434: 0x00009B15,
+ 18435: 0x00009B17,
+ 18436: 0x00009B18,
+ 18437: 0x00009B16,
+ 18438: 0x00009B3A,
+ 18439: 0x00009B52,
+ 18440: 0x00009C2B,
+ 18441: 0x00009C1D,
+ 18442: 0x00009C1C,
+ 18443: 0x00009C2C,
+ 18444: 0x00009C23,
+ 18445: 0x00009C28,
+ 18446: 0x00009C29,
+ 18447: 0x00009C24,
+ 18448: 0x00009C21,
+ 18449: 0x00009DB7,
+ 18450: 0x00009DB6,
+ 18451: 0x00009DBC,
+ 18452: 0x00009DC1,
+ 18453: 0x00009DC7,
+ 18454: 0x00009DCA,
+ 18455: 0x00009DCF,
+ 18456: 0x00009DBE,
+ 18457: 0x00009DC5,
+ 18458: 0x00009DC3,
+ 18459: 0x00009DBB,
+ 18460: 0x00009DB5,
+ 18461: 0x00009DCE,
+ 18462: 0x00009DB9,
+ 18463: 0x00009DBA,
+ 18464: 0x00009DAC,
+ 18465: 0x00009DC8,
+ 18466: 0x00009DB1,
+ 18467: 0x00009DAD,
+ 18468: 0x00009DCC,
+ 18469: 0x00009DB3,
+ 18470: 0x00009DCD,
+ 18471: 0x00009DB2,
+ 18472: 0x00009E7A,
+ 18473: 0x00009E9C,
+ 18474: 0x00009EEB,
+ 18475: 0x00009EEE,
+ 18476: 0x00009EED,
+ 18477: 0x00009F1B,
+ 18478: 0x00009F18,
+ 18479: 0x00009F1A,
+ 18480: 0x00009F31,
+ 18481: 0x00009F4E,
+ 18482: 0x00009F65,
+ 18483: 0x00009F64,
+ 18484: 0x00009F92,
+ 18485: 0x00004EB9,
+ 18486: 0x000056C6,
+ 18487: 0x000056C5,
+ 18488: 0x000056CB,
+ 18489: 0x00005971,
+ 18490: 0x00005B4B,
+ 18491: 0x00005B4C,
+ 18492: 0x00005DD5,
+ 18493: 0x00005DD1,
+ 18494: 0x00005EF2,
+ 18495: 0x00006521,
+ 18496: 0x00006520,
+ 18497: 0x00006526,
+ 18498: 0x00006522,
+ 18499: 0x00006B0B,
+ 18500: 0x00006B08,
+ 18501: 0x00006B09,
+ 18502: 0x00006C0D,
+ 18503: 0x00007055,
+ 18504: 0x00007056,
+ 18505: 0x00007057,
+ 18506: 0x00007052,
+ 18507: 0x0000721E,
+ 18508: 0x0000721F,
+ 18509: 0x000072A9,
+ 18510: 0x0000737F,
+ 18511: 0x000074D8,
+ 18512: 0x000074D5,
+ 18513: 0x000074D9,
+ 18514: 0x000074D7,
+ 18515: 0x0000766D,
+ 18516: 0x000076AD,
+ 18517: 0x00007935,
+ 18518: 0x000079B4,
+ 18519: 0x00007A70,
+ 18520: 0x00007A71,
+ 18521: 0x00007C57,
+ 18522: 0x00007C5C,
+ 18523: 0x00007C59,
+ 18524: 0x00007C5B,
+ 18525: 0x00007C5A,
+ 18526: 0x00007CF4,
+ 18527: 0x00007CF1,
+ 18528: 0x00007E91,
+ 18529: 0x00007F4F,
+ 18530: 0x00007F87,
+ 18531: 0x000081DE,
+ 18532: 0x0000826B,
+ 18533: 0x00008634,
+ 18534: 0x00008635,
+ 18535: 0x00008633,
+ 18536: 0x0000862C,
+ 18537: 0x00008632,
+ 18538: 0x00008636,
+ 18539: 0x0000882C,
+ 18540: 0x00008828,
+ 18541: 0x00008826,
+ 18542: 0x0000882A,
+ 18543: 0x00008825,
+ 18544: 0x00008971,
+ 18545: 0x000089BF,
+ 18546: 0x000089BE,
+ 18547: 0x000089FB,
+ 18548: 0x00008B7E,
+ 18549: 0x00008B84,
+ 18550: 0x00008B82,
+ 18551: 0x00008B86,
+ 18552: 0x00008B85,
+ 18553: 0x00008B7F,
+ 18554: 0x00008D15,
+ 18555: 0x00008E95,
+ 18556: 0x00008E94,
+ 18557: 0x00008E9A,
+ 18558: 0x00008E92,
+ 18559: 0x00008E90,
+ 18560: 0x00008E96,
+ 18561: 0x00008E97,
+ 18562: 0x00008F60,
+ 18563: 0x00008F62,
+ 18564: 0x00009147,
+ 18565: 0x0000944C,
+ 18566: 0x00009450,
+ 18567: 0x0000944A,
+ 18568: 0x0000944B,
+ 18569: 0x0000944F,
+ 18570: 0x00009447,
+ 18571: 0x00009445,
+ 18572: 0x00009448,
+ 18573: 0x00009449,
+ 18574: 0x00009446,
+ 18575: 0x0000973F,
+ 18576: 0x000097E3,
+ 18577: 0x0000986A,
+ 18578: 0x00009869,
+ 18579: 0x000098CB,
+ 18580: 0x00009954,
+ 18581: 0x0000995B,
+ 18582: 0x00009A4E,
+ 18583: 0x00009A53,
+ 18584: 0x00009A54,
+ 18585: 0x00009A4C,
+ 18586: 0x00009A4F,
+ 18587: 0x00009A48,
+ 18588: 0x00009A4A,
+ 18589: 0x00009A49,
+ 18590: 0x00009A52,
+ 18591: 0x00009A50,
+ 18592: 0x00009AD0,
+ 18593: 0x00009B19,
+ 18594: 0x00009B2B,
+ 18595: 0x00009B3B,
+ 18596: 0x00009B56,
+ 18597: 0x00009B55,
+ 18598: 0x00009C46,
+ 18599: 0x00009C48,
+ 18600: 0x00009C3F,
+ 18601: 0x00009C44,
+ 18602: 0x00009C39,
+ 18603: 0x00009C33,
+ 18604: 0x00009C41,
+ 18605: 0x00009C3C,
+ 18606: 0x00009C37,
+ 18607: 0x00009C34,
+ 18608: 0x00009C32,
+ 18609: 0x00009C3D,
+ 18610: 0x00009C36,
+ 18611: 0x00009DDB,
+ 18612: 0x00009DD2,
+ 18613: 0x00009DDE,
+ 18614: 0x00009DDA,
+ 18615: 0x00009DCB,
+ 18616: 0x00009DD0,
+ 18617: 0x00009DDC,
+ 18618: 0x00009DD1,
+ 18619: 0x00009DDF,
+ 18620: 0x00009DE9,
+ 18621: 0x00009DD9,
+ 18622: 0x00009DD8,
+ 18623: 0x00009DD6,
+ 18624: 0x00009DF5,
+ 18625: 0x00009DD5,
+ 18626: 0x00009DDD,
+ 18627: 0x00009EB6,
+ 18628: 0x00009EF0,
+ 18629: 0x00009F35,
+ 18630: 0x00009F33,
+ 18631: 0x00009F32,
+ 18632: 0x00009F42,
+ 18633: 0x00009F6B,
+ 18634: 0x00009F95,
+ 18635: 0x00009FA2,
+ 18636: 0x0000513D,
+ 18637: 0x00005299,
+ 18638: 0x000058E8,
+ 18639: 0x000058E7,
+ 18640: 0x00005972,
+ 18641: 0x00005B4D,
+ 18642: 0x00005DD8,
+ 18643: 0x0000882F,
+ 18644: 0x00005F4F,
+ 18645: 0x00006201,
+ 18646: 0x00006203,
+ 18647: 0x00006204,
+ 18648: 0x00006529,
+ 18649: 0x00006525,
+ 18650: 0x00006596,
+ 18651: 0x000066EB,
+ 18652: 0x00006B11,
+ 18653: 0x00006B12,
+ 18654: 0x00006B0F,
+ 18655: 0x00006BCA,
+ 18656: 0x0000705B,
+ 18657: 0x0000705A,
+ 18658: 0x00007222,
+ 18659: 0x00007382,
+ 18660: 0x00007381,
+ 18661: 0x00007383,
+ 18662: 0x00007670,
+ 18663: 0x000077D4,
+ 18664: 0x00007C67,
+ 18665: 0x00007C66,
+ 18666: 0x00007E95,
+ 18667: 0x0000826C,
+ 18668: 0x0000863A,
+ 18669: 0x00008640,
+ 18670: 0x00008639,
+ 18671: 0x0000863C,
+ 18672: 0x00008631,
+ 18673: 0x0000863B,
+ 18674: 0x0000863E,
+ 18675: 0x00008830,
+ 18676: 0x00008832,
+ 18677: 0x0000882E,
+ 18678: 0x00008833,
+ 18679: 0x00008976,
+ 18680: 0x00008974,
+ 18681: 0x00008973,
+ 18682: 0x000089FE,
+ 18683: 0x00008B8C,
+ 18684: 0x00008B8E,
+ 18685: 0x00008B8B,
+ 18686: 0x00008B88,
+ 18687: 0x00008C45,
+ 18688: 0x00008D19,
+ 18689: 0x00008E98,
+ 18690: 0x00008F64,
+ 18691: 0x00008F63,
+ 18692: 0x000091BC,
+ 18693: 0x00009462,
+ 18694: 0x00009455,
+ 18695: 0x0000945D,
+ 18696: 0x00009457,
+ 18697: 0x0000945E,
+ 18698: 0x000097C4,
+ 18699: 0x000097C5,
+ 18700: 0x00009800,
+ 18701: 0x00009A56,
+ 18702: 0x00009A59,
+ 18703: 0x00009B1E,
+ 18704: 0x00009B1F,
+ 18705: 0x00009B20,
+ 18706: 0x00009C52,
+ 18707: 0x00009C58,
+ 18708: 0x00009C50,
+ 18709: 0x00009C4A,
+ 18710: 0x00009C4D,
+ 18711: 0x00009C4B,
+ 18712: 0x00009C55,
+ 18713: 0x00009C59,
+ 18714: 0x00009C4C,
+ 18715: 0x00009C4E,
+ 18716: 0x00009DFB,
+ 18717: 0x00009DF7,
+ 18718: 0x00009DEF,
+ 18719: 0x00009DE3,
+ 18720: 0x00009DEB,
+ 18721: 0x00009DF8,
+ 18722: 0x00009DE4,
+ 18723: 0x00009DF6,
+ 18724: 0x00009DE1,
+ 18725: 0x00009DEE,
+ 18726: 0x00009DE6,
+ 18727: 0x00009DF2,
+ 18728: 0x00009DF0,
+ 18729: 0x00009DE2,
+ 18730: 0x00009DEC,
+ 18731: 0x00009DF4,
+ 18732: 0x00009DF3,
+ 18733: 0x00009DE8,
+ 18734: 0x00009DED,
+ 18735: 0x00009EC2,
+ 18736: 0x00009ED0,
+ 18737: 0x00009EF2,
+ 18738: 0x00009EF3,
+ 18739: 0x00009F06,
+ 18740: 0x00009F1C,
+ 18741: 0x00009F38,
+ 18742: 0x00009F37,
+ 18743: 0x00009F36,
+ 18744: 0x00009F43,
+ 18745: 0x00009F4F,
+ 18746: 0x00009F71,
+ 18747: 0x00009F70,
+ 18748: 0x00009F6E,
+ 18749: 0x00009F6F,
+ 18750: 0x000056D3,
+ 18751: 0x000056CD,
+ 18752: 0x00005B4E,
+ 18753: 0x00005C6D,
+ 18754: 0x0000652D,
+ 18755: 0x000066ED,
+ 18756: 0x000066EE,
+ 18757: 0x00006B13,
+ 18758: 0x0000705F,
+ 18759: 0x00007061,
+ 18760: 0x0000705D,
+ 18761: 0x00007060,
+ 18762: 0x00007223,
+ 18763: 0x000074DB,
+ 18764: 0x000074E5,
+ 18765: 0x000077D5,
+ 18766: 0x00007938,
+ 18767: 0x000079B7,
+ 18768: 0x000079B6,
+ 18769: 0x00007C6A,
+ 18770: 0x00007E97,
+ 18771: 0x00007F89,
+ 18772: 0x0000826D,
+ 18773: 0x00008643,
+ 18774: 0x00008838,
+ 18775: 0x00008837,
+ 18776: 0x00008835,
+ 18777: 0x0000884B,
+ 18778: 0x00008B94,
+ 18779: 0x00008B95,
+ 18780: 0x00008E9E,
+ 18781: 0x00008E9F,
+ 18782: 0x00008EA0,
+ 18783: 0x00008E9D,
+ 18784: 0x000091BE,
+ 18785: 0x000091BD,
+ 18786: 0x000091C2,
+ 18787: 0x0000946B,
+ 18788: 0x00009468,
+ 18789: 0x00009469,
+ 18790: 0x000096E5,
+ 18791: 0x00009746,
+ 18792: 0x00009743,
+ 18793: 0x00009747,
+ 18794: 0x000097C7,
+ 18795: 0x000097E5,
+ 18796: 0x00009A5E,
+ 18797: 0x00009AD5,
+ 18798: 0x00009B59,
+ 18799: 0x00009C63,
+ 18800: 0x00009C67,
+ 18801: 0x00009C66,
+ 18802: 0x00009C62,
+ 18803: 0x00009C5E,
+ 18804: 0x00009C60,
+ 18805: 0x00009E02,
+ 18806: 0x00009DFE,
+ 18807: 0x00009E07,
+ 18808: 0x00009E03,
+ 18809: 0x00009E06,
+ 18810: 0x00009E05,
+ 18811: 0x00009E00,
+ 18812: 0x00009E01,
+ 18813: 0x00009E09,
+ 18814: 0x00009DFF,
+ 18815: 0x00009DFD,
+ 18816: 0x00009E04,
+ 18817: 0x00009EA0,
+ 18818: 0x00009F1E,
+ 18819: 0x00009F46,
+ 18820: 0x00009F74,
+ 18821: 0x00009F75,
+ 18822: 0x00009F76,
+ 18823: 0x000056D4,
+ 18824: 0x0000652E,
+ 18825: 0x000065B8,
+ 18826: 0x00006B18,
+ 18827: 0x00006B19,
+ 18828: 0x00006B17,
+ 18829: 0x00006B1A,
+ 18830: 0x00007062,
+ 18831: 0x00007226,
+ 18832: 0x000072AA,
+ 18833: 0x000077D8,
+ 18834: 0x000077D9,
+ 18835: 0x00007939,
+ 18836: 0x00007C69,
+ 18837: 0x00007C6B,
+ 18838: 0x00007CF6,
+ 18839: 0x00007E9A,
+ 18840: 0x00007E98,
+ 18841: 0x00007E9B,
+ 18842: 0x00007E99,
+ 18843: 0x000081E0,
+ 18844: 0x000081E1,
+ 18845: 0x00008646,
+ 18846: 0x00008647,
+ 18847: 0x00008648,
+ 18848: 0x00008979,
+ 18849: 0x0000897A,
+ 18850: 0x0000897C,
+ 18851: 0x0000897B,
+ 18852: 0x000089FF,
+ 18853: 0x00008B98,
+ 18854: 0x00008B99,
+ 18855: 0x00008EA5,
+ 18856: 0x00008EA4,
+ 18857: 0x00008EA3,
+ 18858: 0x0000946E,
+ 18859: 0x0000946D,
+ 18860: 0x0000946F,
+ 18861: 0x00009471,
+ 18862: 0x00009473,
+ 18863: 0x00009749,
+ 18864: 0x00009872,
+ 18865: 0x0000995F,
+ 18866: 0x00009C68,
+ 18867: 0x00009C6E,
+ 18868: 0x00009C6D,
+ 18869: 0x00009E0B,
+ 18870: 0x00009E0D,
+ 18871: 0x00009E10,
+ 18872: 0x00009E0F,
+ 18873: 0x00009E12,
+ 18874: 0x00009E11,
+ 18875: 0x00009EA1,
+ 18876: 0x00009EF5,
+ 18877: 0x00009F09,
+ 18878: 0x00009F47,
+ 18879: 0x00009F78,
+ 18880: 0x00009F7B,
+ 18881: 0x00009F7A,
+ 18882: 0x00009F79,
+ 18883: 0x0000571E,
+ 18884: 0x00007066,
+ 18885: 0x00007C6F,
+ 18886: 0x0000883C,
+ 18887: 0x00008DB2,
+ 18888: 0x00008EA6,
+ 18889: 0x000091C3,
+ 18890: 0x00009474,
+ 18891: 0x00009478,
+ 18892: 0x00009476,
+ 18893: 0x00009475,
+ 18894: 0x00009A60,
+ 18895: 0x00009C74,
+ 18896: 0x00009C73,
+ 18897: 0x00009C71,
+ 18898: 0x00009C75,
+ 18899: 0x00009E14,
+ 18900: 0x00009E13,
+ 18901: 0x00009EF6,
+ 18902: 0x00009F0A,
+ 18903: 0x00009FA4,
+ 18904: 0x00007068,
+ 18905: 0x00007065,
+ 18906: 0x00007CF7,
+ 18907: 0x0000866A,
+ 18908: 0x0000883E,
+ 18909: 0x0000883D,
+ 18910: 0x0000883F,
+ 18911: 0x00008B9E,
+ 18912: 0x00008C9C,
+ 18913: 0x00008EA9,
+ 18914: 0x00008EC9,
+ 18915: 0x0000974B,
+ 18916: 0x00009873,
+ 18917: 0x00009874,
+ 18918: 0x000098CC,
+ 18919: 0x00009961,
+ 18920: 0x000099AB,
+ 18921: 0x00009A64,
+ 18922: 0x00009A66,
+ 18923: 0x00009A67,
+ 18924: 0x00009B24,
+ 18925: 0x00009E15,
+ 18926: 0x00009E17,
+ 18927: 0x00009F48,
+ 18928: 0x00006207,
+ 18929: 0x00006B1E,
+ 18930: 0x00007227,
+ 18931: 0x0000864C,
+ 18932: 0x00008EA8,
+ 18933: 0x00009482,
+ 18934: 0x00009480,
+ 18935: 0x00009481,
+ 18936: 0x00009A69,
+ 18937: 0x00009A68,
+ 18938: 0x00009B2E,
+ 18939: 0x00009E19,
+ 18940: 0x00007229,
+ 18941: 0x0000864B,
+ 18942: 0x00008B9F,
+ 18943: 0x00009483,
+ 18944: 0x00009C79,
+ 18945: 0x00009EB7,
+ 18946: 0x00007675,
+ 18947: 0x00009A6B,
+ 18948: 0x00009C7A,
+ 18949: 0x00009E1D,
+ 18950: 0x00007069,
+ 18951: 0x0000706A,
+ 18952: 0x00009EA4,
+ 18953: 0x00009F7E,
+ 18954: 0x00009F49,
+ 18955: 0x00009F98,
+ 18956: 0x00007881,
+ 18957: 0x000092B9,
+ 18958: 0x000088CF,
+ 18959: 0x000058BB,
+ 18960: 0x00006052,
+ 18961: 0x00007CA7,
+ 18962: 0x00005AFA,
+ 18963: 0x00002554,
+ 18964: 0x00002566,
+ 18965: 0x00002557,
+ 18966: 0x00002560,
+ 18967: 0x0000256C,
+ 18968: 0x00002563,
+ 18969: 0x0000255A,
+ 18970: 0x00002569,
+ 18971: 0x0000255D,
+ 18972: 0x00002552,
+ 18973: 0x00002564,
+ 18974: 0x00002555,
+ 18975: 0x0000255E,
+ 18976: 0x0000256A,
+ 18977: 0x00002561,
+ 18978: 0x00002558,
+ 18979: 0x00002567,
+ 18980: 0x0000255B,
+ 18981: 0x00002553,
+ 18982: 0x00002565,
+ 18983: 0x00002556,
+ 18984: 0x0000255F,
+ 18985: 0x0000256B,
+ 18986: 0x00002562,
+ 18987: 0x00002559,
+ 18988: 0x00002568,
+ 18989: 0x0000255C,
+ 18990: 0x00002551,
+ 18991: 0x00002550,
+ 18992: 0x0000256D,
+ 18993: 0x0000256E,
+ 18994: 0x00002570,
+ 18995: 0x0000256F,
+ 18996: 0x0000FFED,
+ 18997: 0x00020547,
+ 18998: 0x000092DB,
+ 18999: 0x000205DF,
+ 19000: 0x00023FC5,
+ 19001: 0x0000854C,
+ 19002: 0x000042B5,
+ 19003: 0x000073EF,
+ 19004: 0x000051B5,
+ 19005: 0x00003649,
+ 19006: 0x00024942,
+ 19007: 0x000289E4,
+ 19008: 0x00009344,
+ 19009: 0x000219DB,
+ 19010: 0x000082EE,
+ 19011: 0x00023CC8,
+ 19012: 0x0000783C,
+ 19013: 0x00006744,
+ 19014: 0x000062DF,
+ 19015: 0x00024933,
+ 19016: 0x000289AA,
+ 19017: 0x000202A0,
+ 19018: 0x00026BB3,
+ 19019: 0x00021305,
+ 19020: 0x00004FAB,
+ 19021: 0x000224ED,
+ 19022: 0x00005008,
+ 19023: 0x00026D29,
+ 19024: 0x00027A84,
+ 19025: 0x00023600,
+ 19026: 0x00024AB1,
+ 19027: 0x00022513,
+ 19028: 0x00005029,
+ 19029: 0x0002037E,
+ 19030: 0x00005FA4,
+ 19031: 0x00020380,
+ 19032: 0x00020347,
+ 19033: 0x00006EDB,
+ 19034: 0x0002041F,
+ 19035: 0x0000507D,
+ 19036: 0x00005101,
+ 19037: 0x0000347A,
+ 19038: 0x0000510E,
+ 19039: 0x0000986C,
+ 19040: 0x00003743,
+ 19041: 0x00008416,
+ 19042: 0x000249A4,
+ 19043: 0x00020487,
+ 19044: 0x00005160,
+ 19045: 0x000233B4,
+ 19046: 0x0000516A,
+ 19047: 0x00020BFF,
+ 19048: 0x000220FC,
+ 19049: 0x000202E5,
+ 19050: 0x00022530,
+ 19051: 0x0002058E,
+ 19052: 0x00023233,
+ 19053: 0x00021983,
+ 19054: 0x00005B82,
+ 19055: 0x0000877D,
+ 19056: 0x000205B3,
+ 19057: 0x00023C99,
+ 19058: 0x000051B2,
+ 19059: 0x000051B8,
+ 19060: 0x00009D34,
+ 19061: 0x000051C9,
+ 19062: 0x000051CF,
+ 19063: 0x000051D1,
+ 19064: 0x00003CDC,
+ 19065: 0x000051D3,
+ 19066: 0x00024AA6,
+ 19067: 0x000051B3,
+ 19068: 0x000051E2,
+ 19069: 0x00005342,
+ 19070: 0x000051ED,
+ 19071: 0x000083CD,
+ 19072: 0x0000693E,
+ 19073: 0x0002372D,
+ 19074: 0x00005F7B,
+ 19075: 0x0000520B,
+ 19076: 0x00005226,
+ 19077: 0x0000523C,
+ 19078: 0x000052B5,
+ 19079: 0x00005257,
+ 19080: 0x00005294,
+ 19081: 0x000052B9,
+ 19082: 0x000052C5,
+ 19083: 0x00007C15,
+ 19084: 0x00008542,
+ 19085: 0x000052E0,
+ 19086: 0x0000860D,
+ 19087: 0x00026B13,
+ 19088: 0x00005305,
+ 19089: 0x00028ADE,
+ 19090: 0x00005549,
+ 19091: 0x00006ED9,
+ 19092: 0x00023F80,
+ 19093: 0x00020954,
+ 19094: 0x00023FEC,
+ 19095: 0x00005333,
+ 19096: 0x00005344,
+ 19097: 0x00020BE2,
+ 19098: 0x00006CCB,
+ 19099: 0x00021726,
+ 19100: 0x0000681B,
+ 19101: 0x000073D5,
+ 19102: 0x0000604A,
+ 19103: 0x00003EAA,
+ 19104: 0x000038CC,
+ 19105: 0x000216E8,
+ 19106: 0x000071DD,
+ 19107: 0x000044A2,
+ 19108: 0x0000536D,
+ 19109: 0x00005374,
+ 19110: 0x000286AB,
+ 19111: 0x0000537E,
+ 19112: 0x0000537F,
+ 19113: 0x00021596,
+ 19114: 0x00021613,
+ 19115: 0x000077E6,
+ 19116: 0x00005393,
+ 19117: 0x00028A9B,
+ 19118: 0x000053A0,
+ 19119: 0x000053AB,
+ 19120: 0x000053AE,
+ 19121: 0x000073A7,
+ 19122: 0x00025772,
+ 19123: 0x00003F59,
+ 19124: 0x0000739C,
+ 19125: 0x000053C1,
+ 19126: 0x000053C5,
+ 19127: 0x00006C49,
+ 19128: 0x00004E49,
+ 19129: 0x000057FE,
+ 19130: 0x000053D9,
+ 19131: 0x00003AAB,
+ 19132: 0x00020B8F,
+ 19133: 0x000053E0,
+ 19134: 0x00023FEB,
+ 19135: 0x00022DA3,
+ 19136: 0x000053F6,
+ 19137: 0x00020C77,
+ 19138: 0x00005413,
+ 19139: 0x00007079,
+ 19140: 0x0000552B,
+ 19141: 0x00006657,
+ 19142: 0x00006D5B,
+ 19143: 0x0000546D,
+ 19144: 0x00026B53,
+ 19145: 0x00020D74,
+ 19146: 0x0000555D,
+ 19147: 0x0000548F,
+ 19148: 0x000054A4,
+ 19149: 0x000047A6,
+ 19150: 0x0002170D,
+ 19151: 0x00020EDD,
+ 19152: 0x00003DB4,
+ 19153: 0x00020D4D,
+ 19154: 0x000289BC,
+ 19155: 0x00022698,
+ 19156: 0x00005547,
+ 19157: 0x00004CED,
+ 19158: 0x0000542F,
+ 19159: 0x00007417,
+ 19160: 0x00005586,
+ 19161: 0x000055A9,
+ 19162: 0x00005605,
+ 19163: 0x000218D7,
+ 19164: 0x0002403A,
+ 19165: 0x00004552,
+ 19166: 0x00024435,
+ 19167: 0x000066B3,
+ 19168: 0x000210B4,
+ 19169: 0x00005637,
+ 19170: 0x000066CD,
+ 19171: 0x0002328A,
+ 19172: 0x000066A4,
+ 19173: 0x000066AD,
+ 19174: 0x0000564D,
+ 19175: 0x0000564F,
+ 19176: 0x000078F1,
+ 19177: 0x000056F1,
+ 19178: 0x00009787,
+ 19179: 0x000053FE,
+ 19180: 0x00005700,
+ 19181: 0x000056EF,
+ 19182: 0x000056ED,
+ 19183: 0x00028B66,
+ 19184: 0x00003623,
+ 19185: 0x0002124F,
+ 19186: 0x00005746,
+ 19187: 0x000241A5,
+ 19188: 0x00006C6E,
+ 19189: 0x0000708B,
+ 19190: 0x00005742,
+ 19191: 0x000036B1,
+ 19192: 0x00026C7E,
+ 19193: 0x000057E6,
+ 19194: 0x00021416,
+ 19195: 0x00005803,
+ 19196: 0x00021454,
+ 19197: 0x00024363,
+ 19198: 0x00005826,
+ 19199: 0x00024BF5,
+ 19200: 0x0000585C,
+ 19201: 0x000058AA,
+ 19202: 0x00003561,
+ 19203: 0x000058E0,
+ 19204: 0x000058DC,
+ 19205: 0x0002123C,
+ 19206: 0x000058FB,
+ 19207: 0x00005BFF,
+ 19208: 0x00005743,
+ 19209: 0x0002A150,
+ 19210: 0x00024278,
+ 19211: 0x000093D3,
+ 19212: 0x000035A1,
+ 19213: 0x0000591F,
+ 19214: 0x000068A6,
+ 19215: 0x000036C3,
+ 19216: 0x00006E59,
+ 19217: 0x0002163E,
+ 19218: 0x00005A24,
+ 19219: 0x00005553,
+ 19220: 0x00021692,
+ 19221: 0x00008505,
+ 19222: 0x000059C9,
+ 19223: 0x00020D4E,
+ 19224: 0x00026C81,
+ 19225: 0x00026D2A,
+ 19226: 0x000217DC,
+ 19227: 0x000059D9,
+ 19228: 0x000217FB,
+ 19229: 0x000217B2,
+ 19230: 0x00026DA6,
+ 19231: 0x00006D71,
+ 19232: 0x00021828,
+ 19233: 0x000216D5,
+ 19234: 0x000059F9,
+ 19235: 0x00026E45,
+ 19236: 0x00005AAB,
+ 19237: 0x00005A63,
+ 19238: 0x000036E6,
+ 19239: 0x000249A9,
+ 19240: 0x00005A77,
+ 19241: 0x00003708,
+ 19242: 0x00005A96,
+ 19243: 0x00007465,
+ 19244: 0x00005AD3,
+ 19245: 0x00026FA1,
+ 19246: 0x00022554,
+ 19247: 0x00003D85,
+ 19248: 0x00021911,
+ 19249: 0x00003732,
+ 19250: 0x000216B8,
+ 19251: 0x00005E83,
+ 19252: 0x000052D0,
+ 19253: 0x00005B76,
+ 19254: 0x00006588,
+ 19255: 0x00005B7C,
+ 19256: 0x00027A0E,
+ 19257: 0x00004004,
+ 19258: 0x0000485D,
+ 19259: 0x00020204,
+ 19260: 0x00005BD5,
+ 19261: 0x00006160,
+ 19262: 0x00021A34,
+ 19263: 0x000259CC,
+ 19264: 0x000205A5,
+ 19265: 0x00005BF3,
+ 19266: 0x00005B9D,
+ 19267: 0x00004D10,
+ 19268: 0x00005C05,
+ 19269: 0x00021B44,
+ 19270: 0x00005C13,
+ 19271: 0x000073CE,
+ 19272: 0x00005C14,
+ 19273: 0x00021CA5,
+ 19274: 0x00026B28,
+ 19275: 0x00005C49,
+ 19276: 0x000048DD,
+ 19277: 0x00005C85,
+ 19278: 0x00005CE9,
+ 19279: 0x00005CEF,
+ 19280: 0x00005D8B,
+ 19281: 0x00021DF9,
+ 19282: 0x00021E37,
+ 19283: 0x00005D10,
+ 19284: 0x00005D18,
+ 19285: 0x00005D46,
+ 19286: 0x00021EA4,
+ 19287: 0x00005CBA,
+ 19288: 0x00005DD7,
+ 19289: 0x000082FC,
+ 19290: 0x0000382D,
+ 19291: 0x00024901,
+ 19292: 0x00022049,
+ 19293: 0x00022173,
+ 19294: 0x00008287,
+ 19295: 0x00003836,
+ 19296: 0x00003BC2,
+ 19297: 0x00005E2E,
+ 19298: 0x00006A8A,
+ 19299: 0x00005E75,
+ 19300: 0x00005E7A,
+ 19301: 0x000244BC,
+ 19302: 0x00020CD3,
+ 19303: 0x000053A6,
+ 19304: 0x00004EB7,
+ 19305: 0x00005ED0,
+ 19306: 0x000053A8,
+ 19307: 0x00021771,
+ 19308: 0x00005E09,
+ 19309: 0x00005EF4,
+ 19310: 0x00028482,
+ 19311: 0x00005EF9,
+ 19312: 0x00005EFB,
+ 19313: 0x000038A0,
+ 19314: 0x00005EFC,
+ 19315: 0x0000683E,
+ 19316: 0x0000941B,
+ 19317: 0x00005F0D,
+ 19318: 0x000201C1,
+ 19319: 0x0002F894,
+ 19320: 0x00003ADE,
+ 19321: 0x000048AE,
+ 19322: 0x0002133A,
+ 19323: 0x00005F3A,
+ 19324: 0x00026888,
+ 19325: 0x000223D0,
+ 19326: 0x00005F58,
+ 19327: 0x00022471,
+ 19328: 0x00005F63,
+ 19329: 0x000097BD,
+ 19330: 0x00026E6E,
+ 19331: 0x00005F72,
+ 19332: 0x00009340,
+ 19333: 0x00028A36,
+ 19334: 0x00005FA7,
+ 19335: 0x00005DB6,
+ 19336: 0x00003D5F,
+ 19337: 0x00025250,
+ 19338: 0x00021F6A,
+ 19339: 0x000270F8,
+ 19340: 0x00022668,
+ 19341: 0x000091D6,
+ 19342: 0x0002029E,
+ 19343: 0x00028A29,
+ 19344: 0x00006031,
+ 19345: 0x00006685,
+ 19346: 0x00021877,
+ 19347: 0x00003963,
+ 19348: 0x00003DC7,
+ 19349: 0x00003639,
+ 19350: 0x00005790,
+ 19351: 0x000227B4,
+ 19352: 0x00007971,
+ 19353: 0x00003E40,
+ 19354: 0x0000609E,
+ 19355: 0x000060A4,
+ 19356: 0x000060B3,
+ 19357: 0x00024982,
+ 19358: 0x0002498F,
+ 19359: 0x00027A53,
+ 19360: 0x000074A4,
+ 19361: 0x000050E1,
+ 19362: 0x00005AA0,
+ 19363: 0x00006164,
+ 19364: 0x00008424,
+ 19365: 0x00006142,
+ 19366: 0x0002F8A6,
+ 19367: 0x00026ED2,
+ 19368: 0x00006181,
+ 19369: 0x000051F4,
+ 19370: 0x00020656,
+ 19371: 0x00006187,
+ 19372: 0x00005BAA,
+ 19373: 0x00023FB7,
+ 19374: 0x0002285F,
+ 19375: 0x000061D3,
+ 19376: 0x00028B9D,
+ 19377: 0x0002995D,
+ 19378: 0x000061D0,
+ 19379: 0x00003932,
+ 19380: 0x00022980,
+ 19381: 0x000228C1,
+ 19382: 0x00006023,
+ 19383: 0x0000615C,
+ 19384: 0x0000651E,
+ 19385: 0x0000638B,
+ 19386: 0x00020118,
+ 19387: 0x000062C5,
+ 19388: 0x00021770,
+ 19389: 0x000062D5,
+ 19390: 0x00022E0D,
+ 19391: 0x0000636C,
+ 19392: 0x000249DF,
+ 19393: 0x00003A17,
+ 19394: 0x00006438,
+ 19395: 0x000063F8,
+ 19396: 0x0002138E,
+ 19397: 0x000217FC,
+ 19398: 0x00006490,
+ 19399: 0x00006F8A,
+ 19400: 0x00022E36,
+ 19401: 0x00009814,
+ 19402: 0x0002408C,
+ 19403: 0x0002571D,
+ 19404: 0x000064E1,
+ 19405: 0x000064E5,
+ 19406: 0x0000947B,
+ 19407: 0x00003A66,
+ 19408: 0x0000643A,
+ 19409: 0x00003A57,
+ 19410: 0x0000654D,
+ 19411: 0x00006F16,
+ 19412: 0x00024A28,
+ 19413: 0x00024A23,
+ 19414: 0x00006585,
+ 19415: 0x0000656D,
+ 19416: 0x0000655F,
+ 19417: 0x0002307E,
+ 19418: 0x000065B5,
+ 19419: 0x00024940,
+ 19420: 0x00004B37,
+ 19421: 0x000065D1,
+ 19422: 0x000040D8,
+ 19423: 0x00021829,
+ 19424: 0x000065E0,
+ 19425: 0x000065E3,
+ 19426: 0x00005FDF,
+ 19427: 0x00023400,
+ 19428: 0x00006618,
+ 19429: 0x000231F7,
+ 19430: 0x000231F8,
+ 19431: 0x00006644,
+ 19432: 0x000231A4,
+ 19433: 0x000231A5,
+ 19434: 0x0000664B,
+ 19435: 0x00020E75,
+ 19436: 0x00006667,
+ 19437: 0x000251E6,
+ 19438: 0x00006673,
+ 19439: 0x00006674,
+ 19440: 0x00021E3D,
+ 19441: 0x00023231,
+ 19442: 0x000285F4,
+ 19443: 0x000231C8,
+ 19444: 0x00025313,
+ 19445: 0x000077C5,
+ 19446: 0x000228F7,
+ 19447: 0x000099A4,
+ 19448: 0x00006702,
+ 19449: 0x0002439C,
+ 19450: 0x00024A21,
+ 19451: 0x00003B2B,
+ 19452: 0x000069FA,
+ 19453: 0x000237C2,
+ 19454: 0x0000675E,
+ 19455: 0x00006767,
+ 19456: 0x00006762,
+ 19457: 0x000241CD,
+ 19458: 0x000290ED,
+ 19459: 0x000067D7,
+ 19460: 0x000044E9,
+ 19461: 0x00006822,
+ 19462: 0x00006E50,
+ 19463: 0x0000923C,
+ 19464: 0x00006801,
+ 19465: 0x000233E6,
+ 19466: 0x00026DA0,
+ 19467: 0x0000685D,
+ 19468: 0x0002346F,
+ 19469: 0x000069E1,
+ 19470: 0x00006A0B,
+ 19471: 0x00028ADF,
+ 19472: 0x00006973,
+ 19473: 0x000068C3,
+ 19474: 0x000235CD,
+ 19475: 0x00006901,
+ 19476: 0x00006900,
+ 19477: 0x00003D32,
+ 19478: 0x00003A01,
+ 19479: 0x0002363C,
+ 19480: 0x00003B80,
+ 19481: 0x000067AC,
+ 19482: 0x00006961,
+ 19483: 0x00028A4A,
+ 19484: 0x000042FC,
+ 19485: 0x00006936,
+ 19486: 0x00006998,
+ 19487: 0x00003BA1,
+ 19488: 0x000203C9,
+ 19489: 0x00008363,
+ 19490: 0x00005090,
+ 19491: 0x000069F9,
+ 19492: 0x00023659,
+ 19493: 0x0002212A,
+ 19494: 0x00006A45,
+ 19495: 0x00023703,
+ 19496: 0x00006A9D,
+ 19497: 0x00003BF3,
+ 19498: 0x000067B1,
+ 19499: 0x00006AC8,
+ 19500: 0x0002919C,
+ 19501: 0x00003C0D,
+ 19502: 0x00006B1D,
+ 19503: 0x00020923,
+ 19504: 0x000060DE,
+ 19505: 0x00006B35,
+ 19506: 0x00006B74,
+ 19507: 0x000227CD,
+ 19508: 0x00006EB5,
+ 19509: 0x00023ADB,
+ 19510: 0x000203B5,
+ 19511: 0x00021958,
+ 19512: 0x00003740,
+ 19513: 0x00005421,
+ 19514: 0x00023B5A,
+ 19515: 0x00006BE1,
+ 19516: 0x00023EFC,
+ 19517: 0x00006BDC,
+ 19518: 0x00006C37,
+ 19519: 0x0002248B,
+ 19520: 0x000248F1,
+ 19521: 0x00026B51,
+ 19522: 0x00006C5A,
+ 19523: 0x00008226,
+ 19524: 0x00006C79,
+ 19525: 0x00023DBC,
+ 19526: 0x000044C5,
+ 19527: 0x00023DBD,
+ 19528: 0x000241A4,
+ 19529: 0x0002490C,
+ 19530: 0x00024900,
+ 19531: 0x00023CC9,
+ 19532: 0x000036E5,
+ 19533: 0x00003CEB,
+ 19534: 0x00020D32,
+ 19535: 0x00009B83,
+ 19536: 0x000231F9,
+ 19537: 0x00022491,
+ 19538: 0x00007F8F,
+ 19539: 0x00006837,
+ 19540: 0x00026D25,
+ 19541: 0x00026DA1,
+ 19542: 0x00026DEB,
+ 19543: 0x00006D96,
+ 19544: 0x00006D5C,
+ 19545: 0x00006E7C,
+ 19546: 0x00006F04,
+ 19547: 0x0002497F,
+ 19548: 0x00024085,
+ 19549: 0x00026E72,
+ 19550: 0x00008533,
+ 19551: 0x00026F74,
+ 19552: 0x000051C7,
+ 19553: 0x00006C9C,
+ 19554: 0x00006E1D,
+ 19555: 0x0000842E,
+ 19556: 0x00028B21,
+ 19557: 0x00006E2F,
+ 19558: 0x00023E2F,
+ 19559: 0x00007453,
+ 19560: 0x00023F82,
+ 19561: 0x000079CC,
+ 19562: 0x00006E4F,
+ 19563: 0x00005A91,
+ 19564: 0x0002304B,
+ 19565: 0x00006FF8,
+ 19566: 0x0000370D,
+ 19567: 0x00006F9D,
+ 19568: 0x00023E30,
+ 19569: 0x00006EFA,
+ 19570: 0x00021497,
+ 19571: 0x0002403D,
+ 19572: 0x00004555,
+ 19573: 0x000093F0,
+ 19574: 0x00006F44,
+ 19575: 0x00006F5C,
+ 19576: 0x00003D4E,
+ 19577: 0x00006F74,
+ 19578: 0x00029170,
+ 19579: 0x00003D3B,
+ 19580: 0x00006F9F,
+ 19581: 0x00024144,
+ 19582: 0x00006FD3,
+ 19583: 0x00024091,
+ 19584: 0x00024155,
+ 19585: 0x00024039,
+ 19586: 0x00023FF0,
+ 19587: 0x00023FB4,
+ 19588: 0x0002413F,
+ 19589: 0x000051DF,
+ 19590: 0x00024156,
+ 19591: 0x00024157,
+ 19592: 0x00024140,
+ 19593: 0x000261DD,
+ 19594: 0x0000704B,
+ 19595: 0x0000707E,
+ 19596: 0x000070A7,
+ 19597: 0x00007081,
+ 19598: 0x000070CC,
+ 19599: 0x000070D5,
+ 19600: 0x000070D6,
+ 19601: 0x000070DF,
+ 19602: 0x00004104,
+ 19603: 0x00003DE8,
+ 19604: 0x000071B4,
+ 19605: 0x00007196,
+ 19606: 0x00024277,
+ 19607: 0x0000712B,
+ 19608: 0x00007145,
+ 19609: 0x00005A88,
+ 19610: 0x0000714A,
+ 19611: 0x0000716E,
+ 19612: 0x00005C9C,
+ 19613: 0x00024365,
+ 19614: 0x0000714F,
+ 19615: 0x00009362,
+ 19616: 0x000242C1,
+ 19617: 0x0000712C,
+ 19618: 0x0002445A,
+ 19619: 0x00024A27,
+ 19620: 0x00024A22,
+ 19621: 0x000071BA,
+ 19622: 0x00028BE8,
+ 19623: 0x000070BD,
+ 19624: 0x0000720E,
+ 19625: 0x00009442,
+ 19626: 0x00007215,
+ 19627: 0x00005911,
+ 19628: 0x00009443,
+ 19629: 0x00007224,
+ 19630: 0x00009341,
+ 19631: 0x00025605,
+ 19632: 0x0000722E,
+ 19633: 0x00007240,
+ 19634: 0x00024974,
+ 19635: 0x000068BD,
+ 19636: 0x00007255,
+ 19637: 0x00007257,
+ 19638: 0x00003E55,
+ 19639: 0x00023044,
+ 19640: 0x0000680D,
+ 19641: 0x00006F3D,
+ 19642: 0x00007282,
+ 19643: 0x0000732A,
+ 19644: 0x0000732B,
+ 19645: 0x00024823,
+ 19646: 0x0002882B,
+ 19647: 0x000048ED,
+ 19648: 0x00028804,
+ 19649: 0x00007328,
+ 19650: 0x0000732E,
+ 19651: 0x000073CF,
+ 19652: 0x000073AA,
+ 19653: 0x00020C3A,
+ 19654: 0x00026A2E,
+ 19655: 0x000073C9,
+ 19656: 0x00007449,
+ 19657: 0x000241E2,
+ 19658: 0x000216E7,
+ 19659: 0x00024A24,
+ 19660: 0x00006623,
+ 19661: 0x000036C5,
+ 19662: 0x000249B7,
+ 19663: 0x0002498D,
+ 19664: 0x000249FB,
+ 19665: 0x000073F7,
+ 19666: 0x00007415,
+ 19667: 0x00006903,
+ 19668: 0x00024A26,
+ 19669: 0x00007439,
+ 19670: 0x000205C3,
+ 19671: 0x00003ED7,
+ 19672: 0x0000745C,
+ 19673: 0x000228AD,
+ 19674: 0x00007460,
+ 19675: 0x00028EB2,
+ 19676: 0x00007447,
+ 19677: 0x000073E4,
+ 19678: 0x00007476,
+ 19679: 0x000083B9,
+ 19680: 0x0000746C,
+ 19681: 0x00003730,
+ 19682: 0x00007474,
+ 19683: 0x000093F1,
+ 19684: 0x00006A2C,
+ 19685: 0x00007482,
+ 19686: 0x00004953,
+ 19687: 0x00024A8C,
+ 19688: 0x0002415F,
+ 19689: 0x00024A79,
+ 19690: 0x00028B8F,
+ 19691: 0x00005B46,
+ 19692: 0x00028C03,
+ 19693: 0x0002189E,
+ 19694: 0x000074C8,
+ 19695: 0x00021988,
+ 19696: 0x0000750E,
+ 19697: 0x000074E9,
+ 19698: 0x0000751E,
+ 19699: 0x00028ED9,
+ 19700: 0x00021A4B,
+ 19701: 0x00005BD7,
+ 19702: 0x00028EAC,
+ 19703: 0x00009385,
+ 19704: 0x0000754D,
+ 19705: 0x0000754A,
+ 19706: 0x00007567,
+ 19707: 0x0000756E,
+ 19708: 0x00024F82,
+ 19709: 0x00003F04,
+ 19710: 0x00024D13,
+ 19711: 0x0000758E,
+ 19712: 0x0000745D,
+ 19713: 0x0000759E,
+ 19714: 0x000075B4,
+ 19715: 0x00007602,
+ 19716: 0x0000762C,
+ 19717: 0x00007651,
+ 19718: 0x0000764F,
+ 19719: 0x0000766F,
+ 19720: 0x00007676,
+ 19721: 0x000263F5,
+ 19722: 0x00007690,
+ 19723: 0x000081EF,
+ 19724: 0x000037F8,
+ 19725: 0x00026911,
+ 19726: 0x0002690E,
+ 19727: 0x000076A1,
+ 19728: 0x000076A5,
+ 19729: 0x000076B7,
+ 19730: 0x000076CC,
+ 19731: 0x00026F9F,
+ 19732: 0x00008462,
+ 19733: 0x0002509D,
+ 19734: 0x0002517D,
+ 19735: 0x00021E1C,
+ 19736: 0x0000771E,
+ 19737: 0x00007726,
+ 19738: 0x00007740,
+ 19739: 0x000064AF,
+ 19740: 0x00025220,
+ 19741: 0x00007758,
+ 19742: 0x000232AC,
+ 19743: 0x000077AF,
+ 19744: 0x00028964,
+ 19745: 0x00028968,
+ 19746: 0x000216C1,
+ 19747: 0x000077F4,
+ 19748: 0x00007809,
+ 19749: 0x00021376,
+ 19750: 0x00024A12,
+ 19751: 0x000068CA,
+ 19752: 0x000078AF,
+ 19753: 0x000078C7,
+ 19754: 0x000078D3,
+ 19755: 0x000096A5,
+ 19756: 0x0000792E,
+ 19757: 0x000255E0,
+ 19758: 0x000078D7,
+ 19759: 0x00007934,
+ 19760: 0x000078B1,
+ 19761: 0x0002760C,
+ 19762: 0x00008FB8,
+ 19763: 0x00008884,
+ 19764: 0x00028B2B,
+ 19765: 0x00026083,
+ 19766: 0x0002261C,
+ 19767: 0x00007986,
+ 19768: 0x00008900,
+ 19769: 0x00006902,
+ 19770: 0x00007980,
+ 19771: 0x00025857,
+ 19772: 0x0000799D,
+ 19773: 0x00027B39,
+ 19774: 0x0000793C,
+ 19775: 0x000079A9,
+ 19776: 0x00006E2A,
+ 19777: 0x00027126,
+ 19778: 0x00003EA8,
+ 19779: 0x000079C6,
+ 19780: 0x0002910D,
+ 19781: 0x000079D4,
+}
+
+const numEncodeTables = 8
+
+// encodeX are the encoding tables from Unicode to Big5 code,
+// sorted by decreasing length.
+// encode0: 42633 entries for runes in [131105, 173738).
+// encode1: 29004 entries for runes in [ 11904, 40908).
+// encode2: 2176 entries for runes in [ 7870, 10046).
+// encode3: 939 entries for runes in [ 167, 1106).
+// encode4: 446 entries for runes in [ 65072, 65518).
+// encode5: 432 entries for runes in [194597, 195029).
+// encode6: 263 entries for runes in [ 63751, 64014).
+// encode7: 1 entries for runes in [175615, 175616).
+
+const encode0Low, encode0High = 131105, 173738
+
+var encode0 = [...]uint16{
+ 131105 - 131105: 0x9C71,
+ 131134 - 131105: 0x9375,
+ 131142 - 131105: 0x9376,
+ 131150 - 131105: 0x9548,
+ 131176 - 131105: 0x8EC6,
+ 131206 - 131105: 0x8BC5,
+ 131207 - 131105: 0x8BFA,
+ 131210 - 131105: 0xC87C,
+ 131220 - 131105: 0x9AB4,
+ 131274 - 131105: 0x884E,
+ 131275 - 131105: 0x884B,
+ 131276 - 131105: 0xC87A,
+ 131277 - 131105: 0x8848,
+ 131281 - 131105: 0x8847,
+ 131310 - 131105: 0xA0F6,
+ 131340 - 131105: 0x8845,
+ 131342 - 131105: 0x8853,
+ 131352 - 131105: 0xFCAD,
+ 131492 - 131105: 0x8CF5,
+ 131497 - 131105: 0x8AAD,
+ 131499 - 131105: 0x9272,
+ 131521 - 131105: 0xFC47,
+ 131540 - 131105: 0x94DF,
+ 131570 - 131105: 0x9FD1,
+ 131588 - 131105: 0xFBCB,
+ 131596 - 131105: 0x927D,
+ 131604 - 131105: 0x98A4,
+ 131641 - 131105: 0x8CF9,
+ 131675 - 131105: 0x94E7,
+ 131700 - 131105: 0x90CB,
+ 131701 - 131105: 0x927B,
+ 131737 - 131105: 0x94D8,
+ 131742 - 131105: 0xFC5F,
+ 131744 - 131105: 0xFA54,
+ 131767 - 131105: 0x9AB5,
+ 131775 - 131105: 0x96DA,
+ 131776 - 131105: 0x9279,
+ 131813 - 131105: 0xFA74,
+ 131850 - 131105: 0x9275,
+ 131877 - 131105: 0x8DFB,
+ 131905 - 131105: 0x8A49,
+ 131909 - 131105: 0x92DF,
+ 131910 - 131105: 0x9B7C,
+ 131911 - 131105: 0xFA63,
+ 131966 - 131105: 0xFA60,
+ 131967 - 131105: 0x926D,
+ 131968 - 131105: 0xFA62,
+ 132000 - 131105: 0x9AB6,
+ 132007 - 131105: 0x976B,
+ 132021 - 131105: 0xFD6A,
+ 132041 - 131105: 0xFD54,
+ 132043 - 131105: 0x9273,
+ 132085 - 131105: 0x97D8,
+ 132092 - 131105: 0x9FBB,
+ 132115 - 131105: 0x9342,
+ 132116 - 131105: 0x9276,
+ 132127 - 131105: 0xFA65,
+ 132197 - 131105: 0x926C,
+ 132231 - 131105: 0xFA6E,
+ 132238 - 131105: 0x9EE0,
+ 132241 - 131105: 0x92C0,
+ 132242 - 131105: 0x92BF,
+ 132259 - 131105: 0x92BE,
+ 132311 - 131105: 0x9ABA,
+ 132348 - 131105: 0x8AB3,
+ 132350 - 131105: 0x9775,
+ 132423 - 131105: 0xFA40,
+ 132494 - 131105: 0xFA76,
+ 132517 - 131105: 0xFBD0,
+ 132531 - 131105: 0xFA7B,
+ 132547 - 131105: 0xFE6D,
+ 132554 - 131105: 0x9BB3,
+ 132560 - 131105: 0x89CC,
+ 132565 - 131105: 0x9ABE,
+ 132575 - 131105: 0xFA42,
+ 132576 - 131105: 0x92BC,
+ 132587 - 131105: 0x945C,
+ 132625 - 131105: 0x9BB5,
+ 132629 - 131105: 0x9ABF,
+ 132633 - 131105: 0x98A7,
+ 132634 - 131105: 0x97A4,
+ 132656 - 131105: 0x90FD,
+ 132694 - 131105: 0xFC7B,
+ 132726 - 131105: 0x9AC0,
+ 132878 - 131105: 0x92C3,
+ 132913 - 131105: 0x8AAA,
+ 132985 - 131105: 0x9BD0,
+ 133164 - 131105: 0x9550,
+ 133235 - 131105: 0x92C6,
+ 133333 - 131105: 0x98A6,
+ 133398 - 131105: 0x9546,
+ 133411 - 131105: 0xFD63,
+ 133460 - 131105: 0xFAC2,
+ 133497 - 131105: 0x9EC3,
+ 133607 - 131105: 0x89B2,
+ 133649 - 131105: 0x9C66,
+ 133712 - 131105: 0x9053,
+ 133743 - 131105: 0x8C62,
+ 133770 - 131105: 0x87A8,
+ 133812 - 131105: 0x97C1,
+ 133826 - 131105: 0x9AC4,
+ 133837 - 131105: 0x9AC5,
+ 133901 - 131105: 0x8EEF,
+ 134031 - 131105: 0xFAE9,
+ 134047 - 131105: 0x8D40,
+ 134056 - 131105: 0x9262,
+ 134057 - 131105: 0x8AF7,
+ 134079 - 131105: 0x9AC6,
+ 134086 - 131105: 0x92E1,
+ 134091 - 131105: 0x9AC9,
+ 134114 - 131105: 0xFAC6,
+ 134123 - 131105: 0x97A5,
+ 134139 - 131105: 0x9ACB,
+ 134143 - 131105: 0xFA72,
+ 134155 - 131105: 0x8A5E,
+ 134157 - 131105: 0x94E0,
+ 134176 - 131105: 0x92CC,
+ 134196 - 131105: 0x8AE5,
+ 134202 - 131105: 0xFE5C,
+ 134203 - 131105: 0x9ACC,
+ 134209 - 131105: 0x9DF9,
+ 134210 - 131105: 0x8A43,
+ 134211 - 131105: 0x8AA6,
+ 134227 - 131105: 0x9ACD,
+ 134245 - 131105: 0x9ACE,
+ 134263 - 131105: 0xFAEE,
+ 134264 - 131105: 0x9BCC,
+ 134268 - 131105: 0x9ACF,
+ 134285 - 131105: 0x9AD1,
+ 134294 - 131105: 0x9DFA,
+ 134300 - 131105: 0x9D7C,
+ 134325 - 131105: 0x9AD3,
+ 134328 - 131105: 0x97A6,
+ 134351 - 131105: 0x995F,
+ 134355 - 131105: 0xFBF6,
+ 134356 - 131105: 0x9FC5,
+ 134357 - 131105: 0x8A59,
+ 134358 - 131105: 0x8B6B,
+ 134365 - 131105: 0x9AD4,
+ 134381 - 131105: 0x9AD5,
+ 134399 - 131105: 0x97A2,
+ 134421 - 131105: 0x8A44,
+ 134440 - 131105: 0x9F4A,
+ 134449 - 131105: 0x90A1,
+ 134450 - 131105: 0xFDA4,
+ 134470 - 131105: 0x8A64,
+ 134471 - 131105: 0x8AF2,
+ 134472 - 131105: 0x8AF8,
+ 134473 - 131105: 0x9DD8,
+ 134476 - 131105: 0x94D6,
+ 134477 - 131105: 0xFAFE,
+ 134478 - 131105: 0xFBA7,
+ 134511 - 131105: 0x9AD6,
+ 134513 - 131105: 0x9F4D,
+ 134516 - 131105: 0xFAF6,
+ 134524 - 131105: 0x8A57,
+ 134526 - 131105: 0x8B43,
+ 134527 - 131105: 0x8B44,
+ 134550 - 131105: 0x8AB6,
+ 134556 - 131105: 0x8AC0,
+ 134567 - 131105: 0x9E54,
+ 134578 - 131105: 0x9AD7,
+ 134600 - 131105: 0x9AD8,
+ 134660 - 131105: 0x9ADC,
+ 134665 - 131105: 0x8ACA,
+ 134666 - 131105: 0x9EA8,
+ 134669 - 131105: 0x9263,
+ 134670 - 131105: 0x9ADD,
+ 134671 - 131105: 0x8B65,
+ 134672 - 131105: 0x8B6F,
+ 134673 - 131105: 0x8B7E,
+ 134678 - 131105: 0x8F43,
+ 134685 - 131105: 0x92D0,
+ 134732 - 131105: 0x8AF4,
+ 134765 - 131105: 0x9DBE,
+ 134771 - 131105: 0x9AE1,
+ 134773 - 131105: 0xFCDE,
+ 134774 - 131105: 0x9DFD,
+ 134775 - 131105: 0x8B66,
+ 134776 - 131105: 0x8B70,
+ 134777 - 131105: 0x8B75,
+ 134778 - 131105: 0x8AE4,
+ 134779 - 131105: 0x8BA4,
+ 134796 - 131105: 0x8AED,
+ 134806 - 131105: 0x8A5D,
+ 134808 - 131105: 0x8B48,
+ 134813 - 131105: 0x9DED,
+ 134818 - 131105: 0x9E40,
+ 134826 - 131105: 0x8AEF,
+ 134827 - 131105: 0x8AF6,
+ 134828 - 131105: 0x9E76,
+ 134838 - 131105: 0x9EE3,
+ 134871 - 131105: 0x9ADE,
+ 134872 - 131105: 0x8DFE,
+ 134877 - 131105: 0xFAFC,
+ 134904 - 131105: 0x9CB1,
+ 134905 - 131105: 0x9E77,
+ 134906 - 131105: 0x8B64,
+ 134907 - 131105: 0x8B67,
+ 134941 - 131105: 0x974B,
+ 134950 - 131105: 0x9653,
+ 134957 - 131105: 0x9AE0,
+ 134958 - 131105: 0x8B4A,
+ 134960 - 131105: 0x8AF1,
+ 134961 - 131105: 0x8AD7,
+ 134971 - 131105: 0xA0AB,
+ 134988 - 131105: 0x8AB5,
+ 135012 - 131105: 0x8A5F,
+ 135053 - 131105: 0x8AEE,
+ 135056 - 131105: 0x9ADF,
+ 135085 - 131105: 0x8AFE,
+ 135092 - 131105: 0x8A58,
+ 135093 - 131105: 0x8BA3,
+ 135094 - 131105: 0x8BA7,
+ 135100 - 131105: 0x9AE3,
+ 135135 - 131105: 0x9261,
+ 135146 - 131105: 0x9DD7,
+ 135147 - 131105: 0x9E7D,
+ 135148 - 131105: 0x9EA7,
+ 135149 - 131105: 0x9EAB,
+ 135188 - 131105: 0x9042,
+ 135197 - 131105: 0x8B79,
+ 135198 - 131105: 0x8B7A,
+ 135247 - 131105: 0x9AE6,
+ 135260 - 131105: 0x9AE5,
+ 135279 - 131105: 0x8A7E,
+ 135285 - 131105: 0x9E44,
+ 135286 - 131105: 0x9AE7,
+ 135287 - 131105: 0x8A7C,
+ 135288 - 131105: 0x8B71,
+ 135291 - 131105: 0x9AE9,
+ 135304 - 131105: 0x9AEA,
+ 135318 - 131105: 0x9AEB,
+ 135325 - 131105: 0x8ABD,
+ 135348 - 131105: 0xFB4E,
+ 135359 - 131105: 0x9AED,
+ 135360 - 131105: 0x8AF9,
+ 135361 - 131105: 0x9E63,
+ 135367 - 131105: 0x8B49,
+ 135368 - 131105: 0x8ACE,
+ 135369 - 131105: 0x8B6E,
+ 135375 - 131105: 0x8AE8,
+ 135379 - 131105: 0x9AEE,
+ 135396 - 131105: 0x92CE,
+ 135412 - 131105: 0x8A5A,
+ 135413 - 131105: 0x8B7B,
+ 135414 - 131105: 0x8B7C,
+ 135471 - 131105: 0x9AEF,
+ 135483 - 131105: 0x9AF0,
+ 135485 - 131105: 0x8AFA,
+ 135493 - 131105: 0x8941,
+ 135496 - 131105: 0x8B72,
+ 135503 - 131105: 0x8AF3,
+ 135552 - 131105: 0x8BA8,
+ 135559 - 131105: 0x9EAE,
+ 135641 - 131105: 0x9E72,
+ 135740 - 131105: 0xFB73,
+ 135759 - 131105: 0xFB5F,
+ 135804 - 131105: 0x90BA,
+ 135848 - 131105: 0x91FE,
+ 135849 - 131105: 0x9EF6,
+ 135856 - 131105: 0x97ED,
+ 135907 - 131105: 0x9AF3,
+ 135934 - 131105: 0xA0EE,
+ 135938 - 131105: 0x967C,
+ 135939 - 131105: 0x9345,
+ 135940 - 131105: 0x986E,
+ 135941 - 131105: 0xFA56,
+ 135990 - 131105: 0x9AF5,
+ 135994 - 131105: 0xFC4B,
+ 136053 - 131105: 0x9AF4,
+ 136054 - 131105: 0xFEDE,
+ 136078 - 131105: 0xFCB7,
+ 136088 - 131105: 0x97F1,
+ 136092 - 131105: 0x97C7,
+ 136133 - 131105: 0x9CCB,
+ 136134 - 131105: 0x9240,
+ 136173 - 131105: 0x9CE8,
+ 136190 - 131105: 0x91FD,
+ 136211 - 131105: 0x974E,
+ 136214 - 131105: 0xFB68,
+ 136228 - 131105: 0x976C,
+ 136255 - 131105: 0x8CC2,
+ 136274 - 131105: 0x97E8,
+ 136276 - 131105: 0xFB6A,
+ 136277 - 131105: 0x8B74,
+ 136330 - 131105: 0x8EE7,
+ 136343 - 131105: 0xFDC8,
+ 136374 - 131105: 0x9241,
+ 136424 - 131105: 0x96A1,
+ 136445 - 131105: 0x8EF3,
+ 136567 - 131105: 0x9AF7,
+ 136578 - 131105: 0x8FA6,
+ 136598 - 131105: 0xFAD6,
+ 136714 - 131105: 0x9CC7,
+ 136723 - 131105: 0xFAD7,
+ 136729 - 131105: 0x9AF8,
+ 136766 - 131105: 0xFBA1,
+ 136801 - 131105: 0x8EC5,
+ 136850 - 131105: 0xFBA4,
+ 136888 - 131105: 0xFBC2,
+ 136890 - 131105: 0x9AC1,
+ 136896 - 131105: 0x91FA,
+ 136897 - 131105: 0xFEDB,
+ 136898 - 131105: 0x97AB,
+ 136915 - 131105: 0x9147,
+ 136917 - 131105: 0xFBB1,
+ 136927 - 131105: 0x8FEA,
+ 136934 - 131105: 0x94D2,
+ 136935 - 131105: 0xFE61,
+ 136936 - 131105: 0xFACE,
+ 136954 - 131105: 0x92ED,
+ 136955 - 131105: 0x91F3,
+ 136956 - 131105: 0x93C6,
+ 136958 - 131105: 0x935A,
+ 136973 - 131105: 0xFAFB,
+ 136976 - 131105: 0x92EF,
+ 136998 - 131105: 0xFAC8,
+ 137018 - 131105: 0x9847,
+ 137019 - 131105: 0x9366,
+ 137020 - 131105: 0x9855,
+ 137047 - 131105: 0x96E6,
+ 137068 - 131105: 0x9F43,
+ 137069 - 131105: 0x9FAA,
+ 137070 - 131105: 0x94DA,
+ 137071 - 131105: 0x92EE,
+ 137072 - 131105: 0xFCAF,
+ 137073 - 131105: 0xFBFB,
+ 137075 - 131105: 0x8EF9,
+ 137076 - 131105: 0x91F6,
+ 137131 - 131105: 0x9364,
+ 137136 - 131105: 0x94F5,
+ 137137 - 131105: 0x9CB6,
+ 137138 - 131105: 0xFBAD,
+ 137139 - 131105: 0x984E,
+ 137140 - 131105: 0x8F44,
+ 137141 - 131105: 0x96FD,
+ 137155 - 131105: 0x9AF9,
+ 137159 - 131105: 0x9AFA,
+ 137177 - 131105: 0x9769,
+ 137178 - 131105: 0x95D4,
+ 137179 - 131105: 0x984B,
+ 137180 - 131105: 0xFBAA,
+ 137183 - 131105: 0x987C,
+ 137199 - 131105: 0x91EA,
+ 137205 - 131105: 0x9DAF,
+ 137206 - 131105: 0x9DC5,
+ 137208 - 131105: 0x91F1,
+ 137209 - 131105: 0x8EB1,
+ 137210 - 131105: 0x97A9,
+ 137211 - 131105: 0xFBAC,
+ 137212 - 131105: 0xFCB8,
+ 137248 - 131105: 0x9CB9,
+ 137256 - 131105: 0xFBB0,
+ 137257 - 131105: 0xFCD2,
+ 137258 - 131105: 0x93CB,
+ 137261 - 131105: 0x9AFD,
+ 137273 - 131105: 0x91F4,
+ 137274 - 131105: 0x8BAC,
+ 137275 - 131105: 0xA055,
+ 137280 - 131105: 0x9574,
+ 137285 - 131105: 0x95BE,
+ 137298 - 131105: 0x97AD,
+ 137310 - 131105: 0x8EE9,
+ 137313 - 131105: 0x92F8,
+ 137314 - 131105: 0x97BE,
+ 137315 - 131105: 0x916C,
+ 137316 - 131105: 0x94AA,
+ 137335 - 131105: 0xFC63,
+ 137339 - 131105: 0x9DC6,
+ 137347 - 131105: 0x97B5,
+ 137348 - 131105: 0x92B8,
+ 137349 - 131105: 0x91EF,
+ 137374 - 131105: 0xFEA6,
+ 137375 - 131105: 0x9760,
+ 137376 - 131105: 0x9358,
+ 137377 - 131105: 0x9576,
+ 137378 - 131105: 0x8FAC,
+ 137406 - 131105: 0x91EC,
+ 137407 - 131105: 0x97B4,
+ 137425 - 131105: 0x91F7,
+ 137430 - 131105: 0x974A,
+ 137431 - 131105: 0xFB49,
+ 137432 - 131105: 0x9578,
+ 137433 - 131105: 0x93BC,
+ 137466 - 131105: 0x91D6,
+ 137475 - 131105: 0x9355,
+ 137476 - 131105: 0x9356,
+ 137477 - 131105: 0x9851,
+ 137488 - 131105: 0x8FF8,
+ 137489 - 131105: 0xFBC0,
+ 137490 - 131105: 0x93F2,
+ 137493 - 131105: 0x90D0,
+ 137500 - 131105: 0x9C44,
+ 137506 - 131105: 0x9255,
+ 137511 - 131105: 0x9363,
+ 137531 - 131105: 0x91A5,
+ 137540 - 131105: 0xA0ED,
+ 137560 - 131105: 0xFD6B,
+ 137578 - 131105: 0x9AFE,
+ 137596 - 131105: 0x9351,
+ 137600 - 131105: 0x8C57,
+ 137603 - 131105: 0xFA78,
+ 137608 - 131105: 0xFEA8,
+ 137622 - 131105: 0x9350,
+ 137691 - 131105: 0xFA4C,
+ 137715 - 131105: 0x92F7,
+ 137773 - 131105: 0x9B40,
+ 137780 - 131105: 0xFBCE,
+ 137797 - 131105: 0x9B41,
+ 137803 - 131105: 0xFEAD,
+ 137827 - 131105: 0x8761,
+ 138052 - 131105: 0xFBD5,
+ 138177 - 131105: 0x8BC2,
+ 138178 - 131105: 0x9A7C,
+ 138282 - 131105: 0x9B42,
+ 138352 - 131105: 0x9B43,
+ 138402 - 131105: 0x9E79,
+ 138405 - 131105: 0xFBD9,
+ 138412 - 131105: 0x9B44,
+ 138566 - 131105: 0xA0A7,
+ 138579 - 131105: 0x877B,
+ 138590 - 131105: 0x876E,
+ 138640 - 131105: 0x9BF3,
+ 138678 - 131105: 0x8C79,
+ 138682 - 131105: 0x935E,
+ 138698 - 131105: 0x89CB,
+ 138705 - 131105: 0x9F53,
+ 138731 - 131105: 0x93D7,
+ 138745 - 131105: 0xFBE1,
+ 138780 - 131105: 0xFED0,
+ 138787 - 131105: 0x8CF1,
+ 138807 - 131105: 0xFBE2,
+ 138813 - 131105: 0xFCE3,
+ 138889 - 131105: 0x9074,
+ 138916 - 131105: 0xFBE6,
+ 138920 - 131105: 0x9BB7,
+ 138952 - 131105: 0x9B45,
+ 138965 - 131105: 0x9B47,
+ 139023 - 131105: 0x9F50,
+ 139029 - 131105: 0x9B48,
+ 139114 - 131105: 0xFC5B,
+ 139166 - 131105: 0x98A9,
+ 139169 - 131105: 0x9CFD,
+ 139240 - 131105: 0x884C,
+ 139333 - 131105: 0x9B4B,
+ 139337 - 131105: 0xFBEC,
+ 139390 - 131105: 0x8C69,
+ 139418 - 131105: 0x9BA8,
+ 139463 - 131105: 0x8AD5,
+ 139516 - 131105: 0xFA73,
+ 139562 - 131105: 0xFD59,
+ 139611 - 131105: 0x91A2,
+ 139635 - 131105: 0xFBED,
+ 139642 - 131105: 0x9CA9,
+ 139681 - 131105: 0x8AA8,
+ 139713 - 131105: 0x8D42,
+ 139715 - 131105: 0x9BC3,
+ 139784 - 131105: 0x8AE1,
+ 139900 - 131105: 0x9B4E,
+ 140065 - 131105: 0x95D0,
+ 140069 - 131105: 0x905F,
+ 140221 - 131105: 0x97EE,
+ 140240 - 131105: 0xFC4E,
+ 140247 - 131105: 0x9B4F,
+ 140282 - 131105: 0x9B50,
+ 140389 - 131105: 0x9EC6,
+ 140401 - 131105: 0xFC50,
+ 140427 - 131105: 0xFD73,
+ 140433 - 131105: 0xFDA7,
+ 140464 - 131105: 0x9DA2,
+ 140476 - 131105: 0x87D1,
+ 140481 - 131105: 0x87D3,
+ 140489 - 131105: 0x87D4,
+ 140492 - 131105: 0x87D5,
+ 140525 - 131105: 0xFA58,
+ 140563 - 131105: 0xFA5E,
+ 140571 - 131105: 0xA059,
+ 140592 - 131105: 0xFA75,
+ 140628 - 131105: 0xFBBE,
+ 140685 - 131105: 0x9CA2,
+ 140719 - 131105: 0x9370,
+ 140734 - 131105: 0x9371,
+ 140827 - 131105: 0x9377,
+ 140828 - 131105: 0xFEEF,
+ 140843 - 131105: 0x936D,
+ 140904 - 131105: 0xFC5D,
+ 140922 - 131105: 0x90B8,
+ 140950 - 131105: 0x8AFC,
+ 140952 - 131105: 0xFB41,
+ 141044 - 131105: 0x9E6B,
+ 141045 - 131105: 0x94E3,
+ 141046 - 131105: 0x8EE2,
+ 141074 - 131105: 0x8C7D,
+ 141076 - 131105: 0x8ED7,
+ 141083 - 131105: 0x9C4D,
+ 141087 - 131105: 0x96A3,
+ 141098 - 131105: 0x9B51,
+ 141173 - 131105: 0x8AC3,
+ 141185 - 131105: 0x96AA,
+ 141206 - 131105: 0x8CE2,
+ 141236 - 131105: 0xFC68,
+ 141237 - 131105: 0x8B6D,
+ 141261 - 131105: 0xFD67,
+ 141315 - 131105: 0x8AE9,
+ 141407 - 131105: 0xFCA1,
+ 141408 - 131105: 0x936C,
+ 141425 - 131105: 0x9B52,
+ 141485 - 131105: 0xFE70,
+ 141505 - 131105: 0xFCA8,
+ 141559 - 131105: 0xFCE9,
+ 141606 - 131105: 0x9CB4,
+ 141625 - 131105: 0x8AEA,
+ 141647 - 131105: 0x9B53,
+ 141671 - 131105: 0x9B55,
+ 141675 - 131105: 0x96AB,
+ 141696 - 131105: 0xFCA7,
+ 141715 - 131105: 0x9B56,
+ 141926 - 131105: 0x8ABC,
+ 142031 - 131105: 0x8ACB,
+ 142037 - 131105: 0x9B57,
+ 142054 - 131105: 0x89CD,
+ 142056 - 131105: 0x9B59,
+ 142094 - 131105: 0x9B5B,
+ 142114 - 131105: 0x93A5,
+ 142143 - 131105: 0x9B5D,
+ 142147 - 131105: 0x9E4F,
+ 142186 - 131105: 0x93A3,
+ 142282 - 131105: 0x8A7B,
+ 142286 - 131105: 0x8B42,
+ 142374 - 131105: 0x9750,
+ 142375 - 131105: 0x8FB3,
+ 142392 - 131105: 0x8A50,
+ 142412 - 131105: 0x9B60,
+ 142417 - 131105: 0x8B45,
+ 142421 - 131105: 0x8B46,
+ 142434 - 131105: 0x9DFE,
+ 142472 - 131105: 0x9B62,
+ 142491 - 131105: 0x937B,
+ 142497 - 131105: 0x93B1,
+ 142505 - 131105: 0x8A60,
+ 142514 - 131105: 0x8AD8,
+ 142519 - 131105: 0x9B63,
+ 142530 - 131105: 0x8A69,
+ 142534 - 131105: 0x8A47,
+ 142537 - 131105: 0x8ACC,
+ 142599 - 131105: 0x937C,
+ 142600 - 131105: 0x9B65,
+ 142610 - 131105: 0x9B66,
+ 142660 - 131105: 0x8A72,
+ 142668 - 131105: 0x8A7A,
+ 142695 - 131105: 0x93AF,
+ 142733 - 131105: 0x8AB0,
+ 142741 - 131105: 0x9B68,
+ 142752 - 131105: 0x9EA3,
+ 142755 - 131105: 0xFAEC,
+ 142756 - 131105: 0x8B77,
+ 142775 - 131105: 0x9B67,
+ 142830 - 131105: 0x8B59,
+ 142861 - 131105: 0xFCB1,
+ 142902 - 131105: 0xFCBB,
+ 142914 - 131105: 0x9B69,
+ 142968 - 131105: 0x93A8,
+ 142987 - 131105: 0x8AE0,
+ 143027 - 131105: 0x9E51,
+ 143087 - 131105: 0x8F5F,
+ 143220 - 131105: 0x9B6A,
+ 143308 - 131105: 0x9B6B,
+ 143331 - 131105: 0x97EC,
+ 143411 - 131105: 0x9B6C,
+ 143428 - 131105: 0xFE4E,
+ 143435 - 131105: 0xFDC2,
+ 143462 - 131105: 0x9B6D,
+ 143485 - 131105: 0x9167,
+ 143486 - 131105: 0xFCCC,
+ 143502 - 131105: 0x93B6,
+ 143543 - 131105: 0x90E4,
+ 143548 - 131105: 0x90E5,
+ 143578 - 131105: 0x9EF2,
+ 143619 - 131105: 0x93CA,
+ 143677 - 131105: 0x8BBC,
+ 143741 - 131105: 0x8F46,
+ 143746 - 131105: 0x93CF,
+ 143780 - 131105: 0xFCDB,
+ 143781 - 131105: 0xFCDC,
+ 143795 - 131105: 0x93C0,
+ 143816 - 131105: 0xFCE6,
+ 143817 - 131105: 0x96E7,
+ 143850 - 131105: 0x87A7,
+ 143863 - 131105: 0xFCD8,
+ 143864 - 131105: 0xFCD9,
+ 143865 - 131105: 0xFDA6,
+ 143887 - 131105: 0x93CE,
+ 143909 - 131105: 0x95F1,
+ 143919 - 131105: 0x9CE9,
+ 143921 - 131105: 0xFCE4,
+ 143922 - 131105: 0x94AF,
+ 143923 - 131105: 0xFA77,
+ 143924 - 131105: 0x93CC,
+ 143958 - 131105: 0x8CE1,
+ 143966 - 131105: 0x87A9,
+ 143970 - 131105: 0x905A,
+ 144001 - 131105: 0x8C54,
+ 144009 - 131105: 0x93BF,
+ 144010 - 131105: 0xFB51,
+ 144043 - 131105: 0x93B9,
+ 144044 - 131105: 0xFED7,
+ 144045 - 131105: 0x93B7,
+ 144082 - 131105: 0x93D9,
+ 144096 - 131105: 0x93BB,
+ 144097 - 131105: 0x93DA,
+ 144128 - 131105: 0x98A3,
+ 144138 - 131105: 0x90D1,
+ 144159 - 131105: 0x9B6E,
+ 144308 - 131105: 0xFA70,
+ 144332 - 131105: 0x9BEB,
+ 144350 - 131105: 0x9B6F,
+ 144358 - 131105: 0xFCFC,
+ 144372 - 131105: 0x8B40,
+ 144373 - 131105: 0xA07B,
+ 144377 - 131105: 0x8CA1,
+ 144378 - 131105: 0x97F7,
+ 144382 - 131105: 0x93E2,
+ 144384 - 131105: 0xFCD6,
+ 144447 - 131105: 0x9559,
+ 144464 - 131105: 0x93A6,
+ 144495 - 131105: 0xFD40,
+ 144498 - 131105: 0x935F,
+ 144613 - 131105: 0x97F2,
+ 144665 - 131105: 0x9C76,
+ 144688 - 131105: 0x8EF8,
+ 144721 - 131105: 0x8CEB,
+ 144730 - 131105: 0x8F47,
+ 144743 - 131105: 0x9B74,
+ 144789 - 131105: 0x92B4,
+ 144793 - 131105: 0x91ED,
+ 144796 - 131105: 0x96D2,
+ 144827 - 131105: 0x87D8,
+ 144845 - 131105: 0xFD46,
+ 144846 - 131105: 0x8F4F,
+ 144847 - 131105: 0x9549,
+ 144883 - 131105: 0x9B75,
+ 144896 - 131105: 0xFA5C,
+ 144919 - 131105: 0x8751,
+ 144922 - 131105: 0x9B79,
+ 144956 - 131105: 0xFD4B,
+ 144960 - 131105: 0x96D3,
+ 144985 - 131105: 0xFD58,
+ 144991 - 131105: 0x945F,
+ 145015 - 131105: 0xA0F5,
+ 145038 - 131105: 0x87C7,
+ 145054 - 131105: 0x877C,
+ 145062 - 131105: 0x9243,
+ 145069 - 131105: 0x97FA,
+ 145082 - 131105: 0x9DD9,
+ 145119 - 131105: 0x97F4,
+ 145134 - 131105: 0x924D,
+ 145155 - 131105: 0xFD5B,
+ 145174 - 131105: 0x9B7A,
+ 145184 - 131105: 0x9ED5,
+ 145197 - 131105: 0xFAAE,
+ 145199 - 131105: 0x9CC9,
+ 145215 - 131105: 0x9258,
+ 145254 - 131105: 0x8EC8,
+ 145281 - 131105: 0x94B4,
+ 145314 - 131105: 0x93E1,
+ 145340 - 131105: 0x93DF,
+ 145346 - 131105: 0xFCF0,
+ 145365 - 131105: 0x93EC,
+ 145366 - 131105: 0x97F6,
+ 145367 - 131105: 0x96CF,
+ 145466 - 131105: 0x93DE,
+ 145858 - 131105: 0x8ACF,
+ 146087 - 131105: 0x9BA2,
+ 146139 - 131105: 0xFD69,
+ 146158 - 131105: 0x9352,
+ 146170 - 131105: 0x98A2,
+ 146202 - 131105: 0x8CE7,
+ 146266 - 131105: 0xFD6E,
+ 146531 - 131105: 0x8CA4,
+ 146585 - 131105: 0xFA7C,
+ 146586 - 131105: 0x93FA,
+ 146587 - 131105: 0x907C,
+ 146613 - 131105: 0x8F67,
+ 146615 - 131105: 0x9DB7,
+ 146631 - 131105: 0xA0E9,
+ 146632 - 131105: 0xFA4E,
+ 146633 - 131105: 0xFDA1,
+ 146684 - 131105: 0x9E74,
+ 146685 - 131105: 0x9FBF,
+ 146686 - 131105: 0x9ECB,
+ 146687 - 131105: 0x9BB9,
+ 146752 - 131105: 0x9DD4,
+ 146779 - 131105: 0x97B9,
+ 146814 - 131105: 0x8EF1,
+ 146831 - 131105: 0x957B,
+ 146870 - 131105: 0x9ED2,
+ 146871 - 131105: 0x9753,
+ 146872 - 131105: 0x96A4,
+ 146873 - 131105: 0x8FBE,
+ 146874 - 131105: 0x94D9,
+ 146875 - 131105: 0x9058,
+ 146876 - 131105: 0xFD79,
+ 146877 - 131105: 0xFD7B,
+ 146915 - 131105: 0x8EDA,
+ 146936 - 131105: 0x8EFA,
+ 146950 - 131105: 0x8762,
+ 146961 - 131105: 0x9BA5,
+ 146988 - 131105: 0x9ED9,
+ 146989 - 131105: 0x97D4,
+ 146990 - 131105: 0x90BB,
+ 146991 - 131105: 0xFDBC,
+ 146992 - 131105: 0xFDC6,
+ 146993 - 131105: 0x9248,
+ 147001 - 131105: 0x92B5,
+ 147080 - 131105: 0x9DC1,
+ 147081 - 131105: 0x92B9,
+ 147082 - 131105: 0x92A6,
+ 147083 - 131105: 0x8F4B,
+ 147129 - 131105: 0x9BA6,
+ 147135 - 131105: 0x92B6,
+ 147159 - 131105: 0x8E40,
+ 147191 - 131105: 0x9ED8,
+ 147192 - 131105: 0x945E,
+ 147193 - 131105: 0x985F,
+ 147194 - 131105: 0x94CE,
+ 147195 - 131105: 0x924A,
+ 147196 - 131105: 0xFD70,
+ 147253 - 131105: 0x9467,
+ 147265 - 131105: 0x8DEC,
+ 147274 - 131105: 0x9BD8,
+ 147297 - 131105: 0x8763,
+ 147327 - 131105: 0x9448,
+ 147328 - 131105: 0xFAC1,
+ 147329 - 131105: 0x9CF7,
+ 147330 - 131105: 0xFDBE,
+ 147343 - 131105: 0x8FDA,
+ 147380 - 131105: 0xFDD9,
+ 147383 - 131105: 0xFC7E,
+ 147392 - 131105: 0x93F9,
+ 147397 - 131105: 0xFA43,
+ 147435 - 131105: 0xFAEB,
+ 147436 - 131105: 0xFAC3,
+ 147437 - 131105: 0x97D3,
+ 147438 - 131105: 0x95F9,
+ 147439 - 131105: 0x9C48,
+ 147440 - 131105: 0xFDD8,
+ 147473 - 131105: 0xA0D8,
+ 147513 - 131105: 0xFDD7,
+ 147514 - 131105: 0xFB4A,
+ 147515 - 131105: 0x9BAF,
+ 147516 - 131105: 0x944B,
+ 147517 - 131105: 0xFDC9,
+ 147543 - 131105: 0x8EAC,
+ 147589 - 131105: 0xFDB2,
+ 147595 - 131105: 0x925A,
+ 147596 - 131105: 0xFCBD,
+ 147597 - 131105: 0x92D9,
+ 147601 - 131105: 0xFDD5,
+ 147657 - 131105: 0x92DD,
+ 147681 - 131105: 0x9259,
+ 147692 - 131105: 0x8CF0,
+ 147716 - 131105: 0x96BA,
+ 147727 - 131105: 0x925B,
+ 147737 - 131105: 0x9BAB,
+ 147775 - 131105: 0xFDDA,
+ 147776 - 131105: 0xFDDE,
+ 147780 - 131105: 0xFDD3,
+ 147790 - 131105: 0x8C46,
+ 147797 - 131105: 0xFDD6,
+ 147798 - 131105: 0xFDDC,
+ 147799 - 131105: 0xFDDD,
+ 147804 - 131105: 0x90FE,
+ 147807 - 131105: 0xFEA1,
+ 147809 - 131105: 0x87A5,
+ 147831 - 131105: 0x8BAD,
+ 147834 - 131105: 0x9CD8,
+ 147875 - 131105: 0x9E6D,
+ 147876 - 131105: 0xFD7C,
+ 147877 - 131105: 0xFB61,
+ 147884 - 131105: 0x96F8,
+ 147893 - 131105: 0x96F0,
+ 147917 - 131105: 0xFCF4,
+ 147938 - 131105: 0xFE60,
+ 147964 - 131105: 0x9852,
+ 147995 - 131105: 0x964F,
+ 148043 - 131105: 0x916E,
+ 148054 - 131105: 0x986D,
+ 148057 - 131105: 0x9864,
+ 148086 - 131105: 0x9453,
+ 148087 - 131105: 0xFDEC,
+ 148088 - 131105: 0xFB78,
+ 148100 - 131105: 0x95BA,
+ 148115 - 131105: 0x985D,
+ 148117 - 131105: 0x92F9,
+ 148133 - 131105: 0x985A,
+ 148159 - 131105: 0x8750,
+ 148161 - 131105: 0xFDF6,
+ 148169 - 131105: 0x93D0,
+ 148170 - 131105: 0x9862,
+ 148206 - 131105: 0x9BAD,
+ 148218 - 131105: 0x974F,
+ 148237 - 131105: 0x9BAE,
+ 148250 - 131105: 0x9452,
+ 148276 - 131105: 0x9BB0,
+ 148296 - 131105: 0x91D2,
+ 148322 - 131105: 0x97EA,
+ 148323 - 131105: 0xFB6B,
+ 148324 - 131105: 0x91B1,
+ 148325 - 131105: 0xFDF3,
+ 148364 - 131105: 0x92CB,
+ 148374 - 131105: 0x9BB1,
+ 148380 - 131105: 0xFCEC,
+ 148413 - 131105: 0x986B,
+ 148417 - 131105: 0x9751,
+ 148457 - 131105: 0x9871,
+ 148458 - 131105: 0x95EF,
+ 148466 - 131105: 0x9EF3,
+ 148472 - 131105: 0x91E8,
+ 148484 - 131105: 0x9BBA,
+ 148533 - 131105: 0xFB4C,
+ 148534 - 131105: 0x926A,
+ 148570 - 131105: 0xFDF8,
+ 148571 - 131105: 0x9861,
+ 148595 - 131105: 0x91E7,
+ 148615 - 131105: 0x93ED,
+ 148616 - 131105: 0x9744,
+ 148665 - 131105: 0x91E1,
+ 148668 - 131105: 0xFBF5,
+ 148686 - 131105: 0x9869,
+ 148691 - 131105: 0x8A62,
+ 148694 - 131105: 0x9BBB,
+ 148741 - 131105: 0x8CA8,
+ 148769 - 131105: 0x9C55,
+ 148856 - 131105: 0x8E77,
+ 148936 - 131105: 0x8AB2,
+ 149016 - 131105: 0x9EBC,
+ 149034 - 131105: 0x93E6,
+ 149093 - 131105: 0x93A2,
+ 149108 - 131105: 0x9BBD,
+ 149143 - 131105: 0x94B3,
+ 149204 - 131105: 0x937D,
+ 149254 - 131105: 0x9E66,
+ 149285 - 131105: 0x9459,
+ 149295 - 131105: 0x9BBF,
+ 149391 - 131105: 0x9458,
+ 149472 - 131105: 0x9EA5,
+ 149522 - 131105: 0x9BC7,
+ 149539 - 131105: 0xFE54,
+ 149634 - 131105: 0x8E74,
+ 149737 - 131105: 0x8BD6,
+ 149744 - 131105: 0x94B6,
+ 149745 - 131105: 0xFD74,
+ 149746 - 131105: 0x98C0,
+ 149747 - 131105: 0x94A5,
+ 149755 - 131105: 0x9BC8,
+ 149759 - 131105: 0x95ED,
+ 149760 - 131105: 0xFD7E,
+ 149761 - 131105: 0xFBEB,
+ 149772 - 131105: 0xFD7D,
+ 149782 - 131105: 0x976F,
+ 149783 - 131105: 0x9461,
+ 149785 - 131105: 0x9FC1,
+ 149807 - 131105: 0x95D7,
+ 149811 - 131105: 0xFA52,
+ 149812 - 131105: 0x9C58,
+ 149822 - 131105: 0x9F68,
+ 149823 - 131105: 0x9BE7,
+ 149824 - 131105: 0xFCCE,
+ 149825 - 131105: 0x96E8,
+ 149826 - 131105: 0xFA49,
+ 149827 - 131105: 0x97A1,
+ 149858 - 131105: 0x954D,
+ 149859 - 131105: 0x9EF8,
+ 149876 - 131105: 0xFE49,
+ 149877 - 131105: 0x91CE,
+ 149878 - 131105: 0x9771,
+ 149883 - 131105: 0x8CCF,
+ 149887 - 131105: 0xFDB1,
+ 149890 - 131105: 0xFC6E,
+ 149896 - 131105: 0x9CF2,
+ 149897 - 131105: 0x93B8,
+ 149898 - 131105: 0x9043,
+ 149899 - 131105: 0x9759,
+ 149900 - 131105: 0x94D7,
+ 149901 - 131105: 0xFE66,
+ 149902 - 131105: 0x947D,
+ 149903 - 131105: 0xFC6F,
+ 149908 - 131105: 0x9246,
+ 149924 - 131105: 0xFA6D,
+ 149927 - 131105: 0x8EF7,
+ 149929 - 131105: 0xFBB7,
+ 149931 - 131105: 0x947C,
+ 149932 - 131105: 0x92CD,
+ 149933 - 131105: 0x97B2,
+ 149943 - 131105: 0xFE65,
+ 149944 - 131105: 0x967E,
+ 149945 - 131105: 0x9758,
+ 149946 - 131105: 0x9B77,
+ 149947 - 131105: 0x91CF,
+ 149957 - 131105: 0x94A4,
+ 149968 - 131105: 0x9CAD,
+ 149978 - 131105: 0x8BAB,
+ 149982 - 131105: 0x96D5,
+ 149983 - 131105: 0xFCB3,
+ 149987 - 131105: 0x93AE,
+ 149989 - 131105: 0x976D,
+ 149996 - 131105: 0x9446,
+ 149997 - 131105: 0x95F7,
+ 150006 - 131105: 0x9C46,
+ 150007 - 131105: 0x955B,
+ 150008 - 131105: 0x91D1,
+ 150009 - 131105: 0x94F4,
+ 150011 - 131105: 0xFE67,
+ 150030 - 131105: 0x92A5,
+ 150034 - 131105: 0xFEDF,
+ 150035 - 131105: 0x8CAB,
+ 150037 - 131105: 0x9BC9,
+ 150049 - 131105: 0xFCED,
+ 150050 - 131105: 0xFDFA,
+ 150051 - 131105: 0xFCC8,
+ 150052 - 131105: 0xFE62,
+ 150053 - 131105: 0x91FC,
+ 150054 - 131105: 0xFE6B,
+ 150055 - 131105: 0xFDF9,
+ 150056 - 131105: 0xFCC7,
+ 150057 - 131105: 0x914E,
+ 150058 - 131105: 0x9CB8,
+ 150078 - 131105: 0x9767,
+ 150082 - 131105: 0x95EE,
+ 150085 - 131105: 0x9BB2,
+ 150090 - 131105: 0x9460,
+ 150094 - 131105: 0x94A2,
+ 150095 - 131105: 0x9875,
+ 150096 - 131105: 0x97AC,
+ 150097 - 131105: 0x91D3,
+ 150109 - 131105: 0x987B,
+ 150117 - 131105: 0x8EEB,
+ 150118 - 131105: 0x976A,
+ 150119 - 131105: 0x965E,
+ 150129 - 131105: 0x97EB,
+ 150135 - 131105: 0x9FF9,
+ 150136 - 131105: 0x95F8,
+ 150137 - 131105: 0xFEA2,
+ 150138 - 131105: 0x8FE6,
+ 150156 - 131105: 0xFE7E,
+ 150163 - 131105: 0x9DA4,
+ 150164 - 131105: 0x9768,
+ 150165 - 131105: 0x8EEC,
+ 150166 - 131105: 0x94BD,
+ 150180 - 131105: 0x945B,
+ 150181 - 131105: 0x9CF6,
+ 150182 - 131105: 0xFAA7,
+ 150183 - 131105: 0x9BD9,
+ 150193 - 131105: 0xFA5D,
+ 150194 - 131105: 0x9656,
+ 150195 - 131105: 0x9762,
+ 150202 - 131105: 0x94BA,
+ 150203 - 131105: 0xA04F,
+ 150204 - 131105: 0x92D8,
+ 150208 - 131105: 0x9BCB,
+ 150215 - 131105: 0x94BB,
+ 150218 - 131105: 0x9D5F,
+ 150225 - 131105: 0x90CF,
+ 150239 - 131105: 0x9465,
+ 150242 - 131105: 0x9F4C,
+ 150249 - 131105: 0x90D8,
+ 150287 - 131105: 0x8D5B,
+ 150382 - 131105: 0x9EBE,
+ 150517 - 131105: 0xFB6D,
+ 150537 - 131105: 0x95CA,
+ 150686 - 131105: 0x9DC2,
+ 150687 - 131105: 0x97F8,
+ 150729 - 131105: 0x8FFC,
+ 150745 - 131105: 0x9473,
+ 150790 - 131105: 0x9474,
+ 150803 - 131105: 0xFEB7,
+ 150968 - 131105: 0x8A4B,
+ 151018 - 131105: 0x8A55,
+ 151019 - 131105: 0x8B69,
+ 151099 - 131105: 0x8ADC,
+ 151120 - 131105: 0x8B76,
+ 151205 - 131105: 0x9BCE,
+ 151207 - 131105: 0x8A68,
+ 151310 - 131105: 0xA0F8,
+ 151388 - 131105: 0x98DF,
+ 151426 - 131105: 0xFEB5,
+ 151430 - 131105: 0x9BCF,
+ 151447 - 131105: 0x96FB,
+ 151450 - 131105: 0x9BFB,
+ 151465 - 131105: 0x9ECE,
+ 151480 - 131105: 0x8EE5,
+ 151490 - 131105: 0x9E7B,
+ 151596 - 131105: 0x9BD2,
+ 151634 - 131105: 0x8AA5,
+ 151709 - 131105: 0xFECE,
+ 151851 - 131105: 0x8A45,
+ 151880 - 131105: 0x9DFC,
+ 151933 - 131105: 0xFECF,
+ 151934 - 131105: 0x8BA5,
+ 152013 - 131105: 0x8C4A,
+ 152035 - 131105: 0x8AEC,
+ 152038 - 131105: 0xFCE0,
+ 152039 - 131105: 0x94AD,
+ 152096 - 131105: 0xFED5,
+ 152097 - 131105: 0x94AC,
+ 152144 - 131105: 0xFC5A,
+ 152217 - 131105: 0x9BD6,
+ 152263 - 131105: 0x8A6F,
+ 152280 - 131105: 0x8BA9,
+ 152334 - 131105: 0x8E5F,
+ 152337 - 131105: 0x9DCB,
+ 152339 - 131105: 0xFCE7,
+ 152601 - 131105: 0x9BD7,
+ 152613 - 131105: 0x93C8,
+ 152623 - 131105: 0x91F0,
+ 152624 - 131105: 0x8FE0,
+ 152646 - 131105: 0x9BDB,
+ 152684 - 131105: 0x90ED,
+ 152686 - 131105: 0x9BDC,
+ 152730 - 131105: 0x8D53,
+ 152881 - 131105: 0xA0EC,
+ 152885 - 131105: 0x98FA,
+ 152895 - 131105: 0x9BE0,
+ 152923 - 131105: 0x93C7,
+ 152924 - 131105: 0x9249,
+ 152925 - 131105: 0x96E1,
+ 152926 - 131105: 0x9BE2,
+ 152930 - 131105: 0x9BE4,
+ 152933 - 131105: 0x8FE1,
+ 152934 - 131105: 0x9BE5,
+ 152961 - 131105: 0x94C0,
+ 152964 - 131105: 0x93C3,
+ 152975 - 131105: 0x93C5,
+ 153017 - 131105: 0x9079,
+ 153045 - 131105: 0x977B,
+ 153051 - 131105: 0x907E,
+ 153056 - 131105: 0xFEE6,
+ 153093 - 131105: 0xFE46,
+ 153141 - 131105: 0x9DB8,
+ 153169 - 131105: 0x9270,
+ 153219 - 131105: 0x95A8,
+ 153237 - 131105: 0x8CB0,
+ 153315 - 131105: 0x94C8,
+ 153334 - 131105: 0x98B9,
+ 153350 - 131105: 0x9140,
+ 153373 - 131105: 0xFCBE,
+ 153381 - 131105: 0x9157,
+ 153405 - 131105: 0x8BB2,
+ 153458 - 131105: 0xFADF,
+ 153543 - 131105: 0x9BE6,
+ 153567 - 131105: 0x9643,
+ 153568 - 131105: 0x8E44,
+ 153569 - 131105: 0x9C4F,
+ 153687 - 131105: 0xFEF4,
+ 153693 - 131105: 0x9BE8,
+ 153714 - 131105: 0x93DC,
+ 153800 - 131105: 0x966F,
+ 153822 - 131105: 0x87A1,
+ 153825 - 131105: 0x8E4A,
+ 153859 - 131105: 0x9BED,
+ 153926 - 131105: 0x92F6,
+ 153942 - 131105: 0x9DB9,
+ 154028 - 131105: 0x8E4E,
+ 154060 - 131105: 0xFBCF,
+ 154196 - 131105: 0x8760,
+ 154261 - 131105: 0x9EC2,
+ 154268 - 131105: 0x94E5,
+ 154286 - 131105: 0x9BF0,
+ 154287 - 131105: 0x94E4,
+ 154345 - 131105: 0x9551,
+ 154484 - 131105: 0x8BBB,
+ 154505 - 131105: 0x9BF1,
+ 154547 - 131105: 0x94F0,
+ 154548 - 131105: 0x8E64,
+ 154566 - 131105: 0x94EA,
+ 154596 - 131105: 0x8F61,
+ 154600 - 131105: 0x9B64,
+ 154625 - 131105: 0x8E5B,
+ 154630 - 131105: 0x9BF2,
+ 154657 - 131105: 0x9FBE,
+ 154698 - 131105: 0x9DC9,
+ 154725 - 131105: 0x8E6C,
+ 154769 - 131105: 0x8F73,
+ 154788 - 131105: 0x8CAF,
+ 154816 - 131105: 0x8F75,
+ 154817 - 131105: 0x8E71,
+ 154878 - 131105: 0x8E60,
+ 154912 - 131105: 0x8E6A,
+ 154928 - 131105: 0x8C4C,
+ 154947 - 131105: 0x9552,
+ 155033 - 131105: 0x87CF,
+ 155065 - 131105: 0x87C0,
+ 155150 - 131105: 0x9554,
+ 155209 - 131105: 0x8AD4,
+ 155265 - 131105: 0x9DBB,
+ 155266 - 131105: 0x9543,
+ 155267 - 131105: 0x92FE,
+ 155302 - 131105: 0x94F2,
+ 155324 - 131105: 0x94F1,
+ 155351 - 131105: 0xA0EA,
+ 155352 - 131105: 0x9DD2,
+ 155418 - 131105: 0xA0B1,
+ 155467 - 131105: 0x91F8,
+ 155617 - 131105: 0x9462,
+ 155618 - 131105: 0x9BA4,
+ 155681 - 131105: 0x877D,
+ 155689 - 131105: 0x8EAD,
+ 155720 - 131105: 0x9EAD,
+ 155748 - 131105: 0x96D0,
+ 155779 - 131105: 0xFEEE,
+ 155799 - 131105: 0x8AB4,
+ 155812 - 131105: 0x9757,
+ 155813 - 131105: 0x8A77,
+ 155906 - 131105: 0x9BF7,
+ 155937 - 131105: 0x8EB5,
+ 155993 - 131105: 0xA06D,
+ 155994 - 131105: 0x8EB6,
+ 155995 - 131105: 0x9756,
+ 155996 - 131105: 0x9540,
+ 156077 - 131105: 0xA0F3,
+ 156078 - 131105: 0x94BE,
+ 156082 - 131105: 0x9BFA,
+ 156125 - 131105: 0xFDDF,
+ 156248 - 131105: 0x9DBC,
+ 156257 - 131105: 0x94FE,
+ 156266 - 131105: 0x8BDB,
+ 156267 - 131105: 0xA0FE,
+ 156368 - 131105: 0x8EC0,
+ 156469 - 131105: 0x9F47,
+ 156491 - 131105: 0x8BDE,
+ 156492 - 131105: 0xA0FB,
+ 156497 - 131105: 0x8EC3,
+ 156606 - 131105: 0x9649,
+ 156661 - 131105: 0xFEC2,
+ 156664 - 131105: 0x954C,
+ 156674 - 131105: 0x9BFD,
+ 156688 - 131105: 0x90CC,
+ 156689 - 131105: 0x9C60,
+ 156690 - 131105: 0x954B,
+ 156746 - 131105: 0x9BFE,
+ 156777 - 131105: 0x9C70,
+ 156804 - 131105: 0x9C43,
+ 156808 - 131105: 0x9C47,
+ 156809 - 131105: 0x8ECC,
+ 156813 - 131105: 0x8E54,
+ 156824 - 131105: 0x8EE4,
+ 156946 - 131105: 0x9C49,
+ 157042 - 131105: 0x8B5E,
+ 157088 - 131105: 0x955E,
+ 157101 - 131105: 0x955C,
+ 157119 - 131105: 0x9C4B,
+ 157202 - 131105: 0x8BE1,
+ 157222 - 131105: 0x8ED9,
+ 157359 - 131105: 0x9DB4,
+ 157361 - 131105: 0x925F,
+ 157365 - 131105: 0x9C4C,
+ 157402 - 131105: 0x8AA1,
+ 157416 - 131105: 0x8EDB,
+ 157436 - 131105: 0x9C56,
+ 157462 - 131105: 0x8AA2,
+ 157505 - 131105: 0x9754,
+ 157593 - 131105: 0x9C5E,
+ 157619 - 131105: 0x9ED4,
+ 157620 - 131105: 0x9568,
+ 157644 - 131105: 0xA0C3,
+ 157724 - 131105: 0x8AE6,
+ 157766 - 131105: 0xA0F7,
+ 157790 - 131105: 0x9C61,
+ 157806 - 131105: 0x9C5F,
+ 157832 - 131105: 0xFC4D,
+ 157834 - 131105: 0x9E5B,
+ 157843 - 131105: 0x9E69,
+ 157895 - 131105: 0x9C63,
+ 157966 - 131105: 0xFEC7,
+ 157969 - 131105: 0xFEC6,
+ 157990 - 131105: 0x9C67,
+ 158009 - 131105: 0x9C69,
+ 158033 - 131105: 0x8BE2,
+ 158120 - 131105: 0x9165,
+ 158133 - 131105: 0x9CE7,
+ 158194 - 131105: 0x8A54,
+ 158202 - 131105: 0x9C6C,
+ 158253 - 131105: 0x9C6E,
+ 158254 - 131105: 0xFE5D,
+ 158260 - 131105: 0x9C73,
+ 158274 - 131105: 0x956A,
+ 158289 - 131105: 0x956D,
+ 158290 - 131105: 0x8EF0,
+ 158469 - 131105: 0x8F4D,
+ 158474 - 131105: 0x8EF6,
+ 158483 - 131105: 0xFABC,
+ 158485 - 131105: 0x8CD5,
+ 158499 - 131105: 0x875E,
+ 158504 - 131105: 0xFBDA,
+ 158544 - 131105: 0x8B4C,
+ 158545 - 131105: 0xFD75,
+ 158546 - 131105: 0x9BDD,
+ 158547 - 131105: 0xFAF5,
+ 158555 - 131105: 0x9C74,
+ 158581 - 131105: 0x9545,
+ 158594 - 131105: 0x96C6,
+ 158614 - 131105: 0x8F6A,
+ 158615 - 131105: 0x8F4E,
+ 158621 - 131105: 0x9C78,
+ 158643 - 131105: 0xFA55,
+ 158656 - 131105: 0x97E4,
+ 158711 - 131105: 0x9C41,
+ 158753 - 131105: 0x925C,
+ 158784 - 131105: 0x96FA,
+ 158785 - 131105: 0x8CF6,
+ 158790 - 131105: 0x8D4D,
+ 158846 - 131105: 0xFB66,
+ 158847 - 131105: 0x8E65,
+ 158848 - 131105: 0x9849,
+ 158849 - 131105: 0xFBA8,
+ 158850 - 131105: 0x9842,
+ 158884 - 131105: 0x9C7A,
+ 158903 - 131105: 0x97FB,
+ 158904 - 131105: 0x90CA,
+ 158909 - 131105: 0x9C5B,
+ 158912 - 131105: 0x974D,
+ 158915 - 131105: 0x8ED3,
+ 158929 - 131105: 0x9561,
+ 159010 - 131105: 0x9F4B,
+ 159011 - 131105: 0x9FB5,
+ 159012 - 131105: 0x93D2,
+ 159013 - 131105: 0xFDAA,
+ 159014 - 131105: 0x9840,
+ 159015 - 131105: 0x9146,
+ 159016 - 131105: 0x9867,
+ 159017 - 131105: 0xFA5A,
+ 159018 - 131105: 0xFBA9,
+ 159057 - 131105: 0x9841,
+ 159092 - 131105: 0x8CD3,
+ 159136 - 131105: 0xFCFD,
+ 159137 - 131105: 0xFDAB,
+ 159138 - 131105: 0x91BD,
+ 159139 - 131105: 0x8F4C,
+ 159140 - 131105: 0x96C9,
+ 159141 - 131105: 0x8F55,
+ 159142 - 131105: 0xFBAE,
+ 159143 - 131105: 0x956F,
+ 159150 - 131105: 0x9C7D,
+ 159196 - 131105: 0xA0F0,
+ 159210 - 131105: 0x946F,
+ 159211 - 131105: 0xFDAC,
+ 159216 - 131105: 0x96CB,
+ 159232 - 131105: 0x96CE,
+ 159237 - 131105: 0xA056,
+ 159239 - 131105: 0x9CE1,
+ 159250 - 131105: 0x96C4,
+ 159298 - 131105: 0x8F5E,
+ 159299 - 131105: 0x8F6C,
+ 159300 - 131105: 0x8EA3,
+ 159301 - 131105: 0xFBB3,
+ 159342 - 131105: 0xFC53,
+ 159346 - 131105: 0xFDB3,
+ 159351 - 131105: 0x8F6B,
+ 159364 - 131105: 0x96CA,
+ 159368 - 131105: 0x87CD,
+ 159371 - 131105: 0x8753,
+ 159385 - 131105: 0x8F79,
+ 159440 - 131105: 0x9E6F,
+ 159441 - 131105: 0xA0C5,
+ 159442 - 131105: 0xFC78,
+ 159443 - 131105: 0x8E42,
+ 159444 - 131105: 0x8F5A,
+ 159445 - 131105: 0x90C2,
+ 159446 - 131105: 0x8EA5,
+ 159447 - 131105: 0x9061,
+ 159526 - 131105: 0x924F,
+ 159603 - 131105: 0x9373,
+ 159604 - 131105: 0xFDB5,
+ 159647 - 131105: 0xFECC,
+ 159649 - 131105: 0xFBBD,
+ 159678 - 131105: 0x8CD6,
+ 159710 - 131105: 0x9843,
+ 159711 - 131105: 0x96C5,
+ 159758 - 131105: 0x89BC,
+ 159819 - 131105: 0x9CA3,
+ 159826 - 131105: 0x924B,
+ 159827 - 131105: 0x984A,
+ 159880 - 131105: 0x8FA4,
+ 159917 - 131105: 0xA0F1,
+ 159918 - 131105: 0x9EFB,
+ 159919 - 131105: 0x9CD2,
+ 159949 - 131105: 0x8FA7,
+ 159954 - 131105: 0x8754,
+ 159992 - 131105: 0xFC5C,
+ 160009 - 131105: 0x9845,
+ 160012 - 131105: 0x9046,
+ 160013 - 131105: 0x8CD1,
+ 160038 - 131105: 0xFEFA,
+ 160039 - 131105: 0x9560,
+ 160100 - 131105: 0x9F48,
+ 160101 - 131105: 0x9247,
+ 160117 - 131105: 0x90FB,
+ 160205 - 131105: 0x9CA4,
+ 160283 - 131105: 0x9571,
+ 160359 - 131105: 0x8745,
+ 160384 - 131105: 0x9CA6,
+ 160389 - 131105: 0x9CA7,
+ 160395 - 131105: 0x9CAA,
+ 160434 - 131105: 0x9ED3,
+ 160438 - 131105: 0x9E70,
+ 160486 - 131105: 0x9CAC,
+ 160594 - 131105: 0x8752,
+ 160666 - 131105: 0x8FAE,
+ 160767 - 131105: 0x8D50,
+ 160802 - 131105: 0x957D,
+ 160848 - 131105: 0x9CB0,
+ 160900 - 131105: 0x97B6,
+ 160902 - 131105: 0xA0BD,
+ 161140 - 131105: 0x8ADF,
+ 161187 - 131105: 0x9EAA,
+ 161248 - 131105: 0x8FBD,
+ 161252 - 131105: 0x8FBF,
+ 161277 - 131105: 0x9369,
+ 161278 - 131105: 0x9BA7,
+ 161287 - 131105: 0xC8A4,
+ 161292 - 131105: 0xFEEA,
+ 161330 - 131105: 0x9BE1,
+ 161337 - 131105: 0x8B41,
+ 161365 - 131105: 0x9DB6,
+ 161366 - 131105: 0xA0EB,
+ 161367 - 131105: 0x9BA3,
+ 161428 - 131105: 0x8BA1,
+ 161551 - 131105: 0x8FC8,
+ 161589 - 131105: 0x894C,
+ 161590 - 131105: 0x9860,
+ 161601 - 131105: 0x94C7,
+ 161630 - 131105: 0x8B58,
+ 161668 - 131105: 0x95AB,
+ 161669 - 131105: 0x95AA,
+ 161740 - 131105: 0x9CC3,
+ 161880 - 131105: 0x9CC4,
+ 161904 - 131105: 0x93D6,
+ 161949 - 131105: 0x9DAC,
+ 161970 - 131105: 0x8BE6,
+ 161992 - 131105: 0x8A71,
+ 162084 - 131105: 0x8FD1,
+ 162151 - 131105: 0x99D5,
+ 162170 - 131105: 0x90F4,
+ 162208 - 131105: 0x8AA3,
+ 162269 - 131105: 0x9CCE,
+ 162301 - 131105: 0x9CD4,
+ 162314 - 131105: 0x9CD5,
+ 162318 - 131105: 0xFBC8,
+ 162366 - 131105: 0x9DB3,
+ 162387 - 131105: 0xFC70,
+ 162393 - 131105: 0x8FD7,
+ 162425 - 131105: 0x9B73,
+ 162436 - 131105: 0xFA5B,
+ 162493 - 131105: 0x8FD2,
+ 162494 - 131105: 0x9064,
+ 162548 - 131105: 0x98B6,
+ 162566 - 131105: 0x9668,
+ 162571 - 131105: 0x9CD6,
+ 162584 - 131105: 0x98BD,
+ 162616 - 131105: 0x8FDC,
+ 162617 - 131105: 0xFEF6,
+ 162618 - 131105: 0x8FD9,
+ 162632 - 131105: 0x9541,
+ 162661 - 131105: 0x87CA,
+ 162799 - 131105: 0x876C,
+ 162804 - 131105: 0x97F3,
+ 162834 - 131105: 0x9BF8,
+ 162924 - 131105: 0x875A,
+ 162993 - 131105: 0x8748,
+ 163013 - 131105: 0x874A,
+ 163119 - 131105: 0x9E6C,
+ 163155 - 131105: 0x8FF2,
+ 163156 - 131105: 0x8FEE,
+ 163174 - 131105: 0x9CD7,
+ 163187 - 131105: 0x9E6E,
+ 163204 - 131105: 0x8A40,
+ 163215 - 131105: 0x8FEF,
+ 163224 - 131105: 0x8FF4,
+ 163261 - 131105: 0x8FF5,
+ 163292 - 131105: 0x95C2,
+ 163405 - 131105: 0x986A,
+ 163407 - 131105: 0x97CF,
+ 163630 - 131105: 0x9EE5,
+ 163833 - 131105: 0x9E7C,
+ 163842 - 131105: 0x9041,
+ 163849 - 131105: 0x9CDB,
+ 163870 - 131105: 0x9441,
+ 163875 - 131105: 0x9CE6,
+ 163876 - 131105: 0x9DB0,
+ 163912 - 131105: 0x9CEA,
+ 163971 - 131105: 0x9CED,
+ 163984 - 131105: 0x9CFA,
+ 164029 - 131105: 0x8B62,
+ 164030 - 131105: 0x8A4E,
+ 164072 - 131105: 0x9CCA,
+ 164073 - 131105: 0x8A66,
+ 164084 - 131105: 0x9CFB,
+ 164142 - 131105: 0x9CFC,
+ 164175 - 131105: 0x9CFE,
+ 164189 - 131105: 0x8A53,
+ 164207 - 131105: 0x9CE5,
+ 164233 - 131105: 0x9D40,
+ 164271 - 131105: 0x9D41,
+ 164284 - 131105: 0x9045,
+ 164359 - 131105: 0x8B73,
+ 164376 - 131105: 0x97CA,
+ 164378 - 131105: 0x9D42,
+ 164438 - 131105: 0x8A61,
+ 164476 - 131105: 0x8BAE,
+ 164507 - 131105: 0x8AD2,
+ 164557 - 131105: 0x8BA2,
+ 164578 - 131105: 0x9DF2,
+ 164614 - 131105: 0x9D43,
+ 164632 - 131105: 0x9CDF,
+ 164655 - 131105: 0x9D44,
+ 164666 - 131105: 0x8ECA,
+ 164709 - 131105: 0x904E,
+ 164717 - 131105: 0x8EB3,
+ 164733 - 131105: 0x9FF5,
+ 164746 - 131105: 0x9D45,
+ 164882 - 131105: 0x904F,
+ 164968 - 131105: 0x9D47,
+ 164972 - 131105: 0x89CA,
+ 164979 - 131105: 0x9CB5,
+ 164994 - 131105: 0xFBFE,
+ 165121 - 131105: 0x905E,
+ 165180 - 131105: 0x9063,
+ 165181 - 131105: 0x9057,
+ 165228 - 131105: 0x9066,
+ 165352 - 131105: 0x9BC0,
+ 165364 - 131105: 0xFCE5,
+ 165376 - 131105: 0x9162,
+ 165387 - 131105: 0x9067,
+ 165413 - 131105: 0x8FA1,
+ 165435 - 131105: 0x8FA2,
+ 165546 - 131105: 0x9D48,
+ 165547 - 131105: 0xFAD3,
+ 165554 - 131105: 0x8D4F,
+ 165564 - 131105: 0x905D,
+ 165592 - 131105: 0x90B9,
+ 165606 - 131105: 0x906B,
+ 165647 - 131105: 0x8C5C,
+ 165651 - 131105: 0x9069,
+ 165892 - 131105: 0xFE57,
+ 165931 - 131105: 0xFE55,
+ 166157 - 131105: 0x87A6,
+ 166195 - 131105: 0x9073,
+ 166216 - 131105: 0x9BEF,
+ 166217 - 131105: 0x9CF0,
+ 166230 - 131105: 0x9D4B,
+ 166244 - 131105: 0xFED9,
+ 166248 - 131105: 0xFEDA,
+ 166252 - 131105: 0x91E0,
+ 166253 - 131105: 0x8D43,
+ 166270 - 131105: 0x91D8,
+ 166281 - 131105: 0x9646,
+ 166312 - 131105: 0x9360,
+ 166314 - 131105: 0xFA53,
+ 166315 - 131105: 0x9CD3,
+ 166328 - 131105: 0x9D4E,
+ 166332 - 131105: 0xFB40,
+ 166336 - 131105: 0x8DE2,
+ 166364 - 131105: 0x9442,
+ 166366 - 131105: 0x9056,
+ 166369 - 131105: 0x9865,
+ 166371 - 131105: 0x8C6C,
+ 166372 - 131105: 0xFA4A,
+ 166375 - 131105: 0x9D50,
+ 166376 - 131105: 0x9D52,
+ 166393 - 131105: 0x95AF,
+ 166394 - 131105: 0x975A,
+ 166395 - 131105: 0x9349,
+ 166396 - 131105: 0x9747,
+ 166415 - 131105: 0xA0F4,
+ 166422 - 131105: 0x9778,
+ 166437 - 131105: 0x8FCF,
+ 166441 - 131105: 0xFC60,
+ 166450 - 131105: 0x8C4E,
+ 166454 - 131105: 0xFC56,
+ 166468 - 131105: 0x91DC,
+ 166469 - 131105: 0x9661,
+ 166470 - 131105: 0x92EC,
+ 166471 - 131105: 0x935D,
+ 166472 - 131105: 0x8EDE,
+ 166473 - 131105: 0x96FE,
+ 166474 - 131105: 0xFD4F,
+ 166475 - 131105: 0x95DE,
+ 166489 - 131105: 0x98B0,
+ 166490 - 131105: 0xA040,
+ 166529 - 131105: 0x97BD,
+ 166530 - 131105: 0x977D,
+ 166531 - 131105: 0x97F5,
+ 166554 - 131105: 0x9BAC,
+ 166555 - 131105: 0xFADA,
+ 166556 - 131105: 0x92C2,
+ 166592 - 131105: 0x97B1,
+ 166598 - 131105: 0x907B,
+ 166603 - 131105: 0x93FE,
+ 166604 - 131105: 0x947B,
+ 166606 - 131105: 0x9777,
+ 166622 - 131105: 0xFABE,
+ 166623 - 131105: 0xFD43,
+ 166624 - 131105: 0x90C6,
+ 166625 - 131105: 0x90A4,
+ 166626 - 131105: 0x90A8,
+ 166627 - 131105: 0x94A9,
+ 166629 - 131105: 0x90A9,
+ 166634 - 131105: 0x8C65,
+ 166652 - 131105: 0x95E0,
+ 166668 - 131105: 0x907D,
+ 166675 - 131105: 0x9265,
+ 166689 - 131105: 0xFDBA,
+ 166690 - 131105: 0x93C4,
+ 166699 - 131105: 0xFEED,
+ 166700 - 131105: 0x9DAB,
+ 166701 - 131105: 0xA0E3,
+ 166703 - 131105: 0x9648,
+ 166726 - 131105: 0x9D53,
+ 166732 - 131105: 0x8AA9,
+ 166734 - 131105: 0x9BC5,
+ 166736 - 131105: 0x965D,
+ 166755 - 131105: 0x975F,
+ 166756 - 131105: 0x965F,
+ 166757 - 131105: 0x966E,
+ 166758 - 131105: 0xFB5D,
+ 166764 - 131105: 0x9DB1,
+ 166799 - 131105: 0xFEA3,
+ 166809 - 131105: 0x9DB2,
+ 166812 - 131105: 0x95AE,
+ 166813 - 131105: 0xFCA3,
+ 166841 - 131105: 0x8769,
+ 166850 - 131105: 0xA0A2,
+ 166853 - 131105: 0x9655,
+ 166868 - 131105: 0x9D54,
+ 166871 - 131105: 0x9341,
+ 166873 - 131105: 0x95AD,
+ 166874 - 131105: 0x91D5,
+ 166887 - 131105: 0x977A,
+ 166888 - 131105: 0xFDFC,
+ 166889 - 131105: 0x8E47,
+ 166890 - 131105: 0x93FD,
+ 166891 - 131105: 0x90A5,
+ 166892 - 131105: 0x90AC,
+ 166901 - 131105: 0x95AC,
+ 166911 - 131105: 0x90AE,
+ 166915 - 131105: 0xFEA5,
+ 166921 - 131105: 0x9D56,
+ 166940 - 131105: 0x97E3,
+ 166941 - 131105: 0x95E2,
+ 166947 - 131105: 0x9466,
+ 166950 - 131105: 0x9647,
+ 166955 - 131105: 0x91B8,
+ 166960 - 131105: 0x9CEC,
+ 166969 - 131105: 0x90AD,
+ 166971 - 131105: 0x95E3,
+ 167114 - 131105: 0x8B4F,
+ 167117 - 131105: 0x8AE3,
+ 167122 - 131105: 0x8B4D,
+ 167220 - 131105: 0x95EA,
+ 167321 - 131105: 0x8B4E,
+ 167353 - 131105: 0x8CC1,
+ 167439 - 131105: 0x8BED,
+ 167478 - 131105: 0x91D9,
+ 167481 - 131105: 0xA0A4,
+ 167525 - 131105: 0x95F5,
+ 167526 - 131105: 0x95F4,
+ 167575 - 131105: 0x9FB3,
+ 167596 - 131105: 0xFEAF,
+ 167602 - 131105: 0xFE72,
+ 167603 - 131105: 0x927A,
+ 167641 - 131105: 0xFEAC,
+ 167655 - 131105: 0x95F3,
+ 167877 - 131105: 0x9D58,
+ 168057 - 131105: 0x8D46,
+ 168072 - 131105: 0x9372,
+ 168075 - 131105: 0x91C5,
+ 168083 - 131105: 0x9642,
+ 168111 - 131105: 0x90CD,
+ 168112 - 131105: 0x95FE,
+ 168113 - 131105: 0x9159,
+ 168128 - 131105: 0x9C65,
+ 168164 - 131105: 0x97CC,
+ 168165 - 131105: 0x90CE,
+ 168172 - 131105: 0x9D59,
+ 168173 - 131105: 0xFCF5,
+ 168205 - 131105: 0xFEFD,
+ 168208 - 131105: 0x9D5B,
+ 168252 - 131105: 0x9D5C,
+ 168269 - 131105: 0x937E,
+ 168283 - 131105: 0x98AC,
+ 168286 - 131105: 0x9D5E,
+ 168304 - 131105: 0xFDD0,
+ 168348 - 131105: 0xFD60,
+ 168360 - 131105: 0x9CCF,
+ 168405 - 131105: 0x90DD,
+ 168427 - 131105: 0x90E0,
+ 168989 - 131105: 0x90F3,
+ 168992 - 131105: 0x98B1,
+ 169011 - 131105: 0x90F0,
+ 169023 - 131105: 0x93BD,
+ 169032 - 131105: 0x95B7,
+ 169168 - 131105: 0x9F46,
+ 169177 - 131105: 0x8E4B,
+ 169178 - 131105: 0x9658,
+ 169189 - 131105: 0x8A4C,
+ 169191 - 131105: 0x9D63,
+ 169374 - 131105: 0x9ECF,
+ 169392 - 131105: 0x9D65,
+ 169400 - 131105: 0x9D66,
+ 169431 - 131105: 0x965A,
+ 169449 - 131105: 0x9D64,
+ 169460 - 131105: 0x8A6C,
+ 169760 - 131105: 0x8AD9,
+ 169778 - 131105: 0x9D67,
+ 169940 - 131105: 0x8A70,
+ 170000 - 131105: 0x8BF3,
+ 170071 - 131105: 0x9150,
+ 170148 - 131105: 0x9CC1,
+ 170193 - 131105: 0x9D68,
+ 170218 - 131105: 0x93A7,
+ 170225 - 131105: 0x9674,
+ 170234 - 131105: 0x8CFD,
+ 170243 - 131105: 0xA0EF,
+ 170245 - 131105: 0x9151,
+ 170287 - 131105: 0x96C1,
+ 170309 - 131105: 0x8777,
+ 170311 - 131105: 0x8C64,
+ 170312 - 131105: 0x9676,
+ 170313 - 131105: 0x9D69,
+ 170333 - 131105: 0xFCA4,
+ 170346 - 131105: 0x9D6A,
+ 170397 - 131105: 0x924E,
+ 170435 - 131105: 0x9D6B,
+ 170441 - 131105: 0x9BC1,
+ 170536 - 131105: 0x9D6C,
+ 170573 - 131105: 0x8A65,
+ 170757 - 131105: 0x915D,
+ 170766 - 131105: 0x9D6D,
+ 170965 - 131105: 0x915A,
+ 171123 - 131105: 0x8C42,
+ 171181 - 131105: 0x9CC0,
+ 171326 - 131105: 0x916A,
+ 171354 - 131105: 0x9D6E,
+ 171388 - 131105: 0x9EA6,
+ 171416 - 131105: 0x9DCD,
+ 171419 - 131105: 0x9D6F,
+ 171510 - 131105: 0x89BB,
+ 171526 - 131105: 0x9EF9,
+ 171565 - 131105: 0x96B4,
+ 171624 - 131105: 0x9172,
+ 171692 - 131105: 0x9EC8,
+ 171696 - 131105: 0x8771,
+ 171715 - 131105: 0x8B55,
+ 171768 - 131105: 0x9D71,
+ 171811 - 131105: 0x9D72,
+ 171824 - 131105: 0x9ECC,
+ 171959 - 131105: 0x9174,
+ 171998 - 131105: 0x9ED0,
+ 172052 - 131105: 0x905C,
+ 172167 - 131105: 0x8ED2,
+ 172217 - 131105: 0x91A8,
+ 172257 - 131105: 0x9177,
+ 172269 - 131105: 0x96BF,
+ 172275 - 131105: 0x96C0,
+ 172280 - 131105: 0x8FB1,
+ 172286 - 131105: 0x96B7,
+ 172295 - 131105: 0x8C55,
+ 172323 - 131105: 0x9178,
+ 172339 - 131105: 0x89BE,
+ 172340 - 131105: 0x917C,
+ 172368 - 131105: 0xFB77,
+ 172434 - 131105: 0x9175,
+ 172435 - 131105: 0x91A3,
+ 172459 - 131105: 0x9176,
+ 172468 - 131105: 0x96BE,
+ 172469 - 131105: 0x8D49,
+ 172511 - 131105: 0x9179,
+ 172533 - 131105: 0x96B6,
+ 172576 - 131105: 0x91A4,
+ 172595 - 131105: 0x91A6,
+ 172691 - 131105: 0x9D75,
+ 172703 - 131105: 0x9052,
+ 172722 - 131105: 0xA045,
+ 172724 - 131105: 0x91A9,
+ 172726 - 131105: 0x98AA,
+ 172730 - 131105: 0x8C5F,
+ 172733 - 131105: 0x8BAA,
+ 172767 - 131105: 0x9CDD,
+ 172799 - 131105: 0x9D77,
+ 172881 - 131105: 0x8756,
+ 172969 - 131105: 0x8940,
+ 173108 - 131105: 0x9EEC,
+ 173147 - 131105: 0x93AA,
+ 173510 - 131105: 0x9478,
+ 173515 - 131105: 0x9D7A,
+ 173569 - 131105: 0x8AC9,
+ 173618 - 131105: 0x8B4B,
+ 173642 - 131105: 0x9FEC,
+ 173659 - 131105: 0x8AE2,
+ 173737 - 131105: 0x9E75,
+}
+
+const encode1Low, encode1High = 11904, 40908
+
+var encode1 = [...]uint16{
+ 11904 - 11904: 0xC8D6,
+ 11908 - 11904: 0xC8D7,
+ 11910 - 11904: 0xC8D8,
+ 11911 - 11904: 0xC8D9,
+ 11912 - 11904: 0xC8DA,
+ 11914 - 11904: 0xC8DB,
+ 11916 - 11904: 0xC8DC,
+ 11917 - 11904: 0xC8DD,
+ 11925 - 11904: 0xC8DE,
+ 11932 - 11904: 0xC8DF,
+ 11933 - 11904: 0xC8E0,
+ 11941 - 11904: 0xC8E1,
+ 11943 - 11904: 0xC8E2,
+ 11946 - 11904: 0xC8E3,
+ 11948 - 11904: 0xC8E4,
+ 11950 - 11904: 0xC8E5,
+ 11958 - 11904: 0xC8E6,
+ 11964 - 11904: 0xC8E7,
+ 11966 - 11904: 0xC8E8,
+ 11974 - 11904: 0xC8E9,
+ 11978 - 11904: 0xC8EA,
+ 11980 - 11904: 0xC8EB,
+ 11981 - 11904: 0xC8EC,
+ 11983 - 11904: 0xC8ED,
+ 11990 - 11904: 0xC8EE,
+ 11991 - 11904: 0xC8EF,
+ 11998 - 11904: 0xC8F0,
+ 12003 - 11904: 0xC8F1,
+ 12083 - 11904: 0xC6CD,
+ 12288 - 11904: 0xA140,
+ 12289 - 11904: 0xA142,
+ 12290 - 11904: 0xA143,
+ 12291 - 11904: 0xC6DE,
+ 12293 - 11904: 0xC6E0,
+ 12294 - 11904: 0xC6E1,
+ 12295 - 11904: 0xC6E2,
+ 12296 - 11904: 0xA171,
+ 12297 - 11904: 0xA172,
+ 12298 - 11904: 0xA16D,
+ 12299 - 11904: 0xA16E,
+ 12300 - 11904: 0xA175,
+ 12301 - 11904: 0xA176,
+ 12302 - 11904: 0xA179,
+ 12303 - 11904: 0xA17A,
+ 12304 - 11904: 0xA169,
+ 12305 - 11904: 0xA16A,
+ 12306 - 11904: 0xA245,
+ 12308 - 11904: 0xA165,
+ 12309 - 11904: 0xA166,
+ 12317 - 11904: 0xA1A9,
+ 12318 - 11904: 0xA1AA,
+ 12321 - 11904: 0xA2C3,
+ 12322 - 11904: 0xA2C4,
+ 12323 - 11904: 0xA2C5,
+ 12324 - 11904: 0xA2C6,
+ 12325 - 11904: 0xA2C7,
+ 12326 - 11904: 0xA2C8,
+ 12327 - 11904: 0xA2C9,
+ 12328 - 11904: 0xA2CA,
+ 12329 - 11904: 0xA2CB,
+ 12353 - 11904: 0xC6E7,
+ 12354 - 11904: 0xC6E8,
+ 12355 - 11904: 0xC6E9,
+ 12356 - 11904: 0xC6EA,
+ 12357 - 11904: 0xC6EB,
+ 12358 - 11904: 0xC6EC,
+ 12359 - 11904: 0xC6ED,
+ 12360 - 11904: 0xC6EE,
+ 12361 - 11904: 0xC6EF,
+ 12362 - 11904: 0xC6F0,
+ 12363 - 11904: 0xC6F1,
+ 12364 - 11904: 0xC6F2,
+ 12365 - 11904: 0xC6F3,
+ 12366 - 11904: 0xC6F4,
+ 12367 - 11904: 0xC6F5,
+ 12368 - 11904: 0xC6F6,
+ 12369 - 11904: 0xC6F7,
+ 12370 - 11904: 0xC6F8,
+ 12371 - 11904: 0xC6F9,
+ 12372 - 11904: 0xC6FA,
+ 12373 - 11904: 0xC6FB,
+ 12374 - 11904: 0xC6FC,
+ 12375 - 11904: 0xC6FD,
+ 12376 - 11904: 0xC6FE,
+ 12377 - 11904: 0xC740,
+ 12378 - 11904: 0xC741,
+ 12379 - 11904: 0xC742,
+ 12380 - 11904: 0xC743,
+ 12381 - 11904: 0xC744,
+ 12382 - 11904: 0xC745,
+ 12383 - 11904: 0xC746,
+ 12384 - 11904: 0xC747,
+ 12385 - 11904: 0xC748,
+ 12386 - 11904: 0xC749,
+ 12387 - 11904: 0xC74A,
+ 12388 - 11904: 0xC74B,
+ 12389 - 11904: 0xC74C,
+ 12390 - 11904: 0xC74D,
+ 12391 - 11904: 0xC74E,
+ 12392 - 11904: 0xC74F,
+ 12393 - 11904: 0xC750,
+ 12394 - 11904: 0xC751,
+ 12395 - 11904: 0xC752,
+ 12396 - 11904: 0xC753,
+ 12397 - 11904: 0xC754,
+ 12398 - 11904: 0xC755,
+ 12399 - 11904: 0xC756,
+ 12400 - 11904: 0xC757,
+ 12401 - 11904: 0xC758,
+ 12402 - 11904: 0xC759,
+ 12403 - 11904: 0xC75A,
+ 12404 - 11904: 0xC75B,
+ 12405 - 11904: 0xC75C,
+ 12406 - 11904: 0xC75D,
+ 12407 - 11904: 0xC75E,
+ 12408 - 11904: 0xC75F,
+ 12409 - 11904: 0xC760,
+ 12410 - 11904: 0xC761,
+ 12411 - 11904: 0xC762,
+ 12412 - 11904: 0xC763,
+ 12413 - 11904: 0xC764,
+ 12414 - 11904: 0xC765,
+ 12415 - 11904: 0xC766,
+ 12416 - 11904: 0xC767,
+ 12417 - 11904: 0xC768,
+ 12418 - 11904: 0xC769,
+ 12419 - 11904: 0xC76A,
+ 12420 - 11904: 0xC76B,
+ 12421 - 11904: 0xC76C,
+ 12422 - 11904: 0xC76D,
+ 12423 - 11904: 0xC76E,
+ 12424 - 11904: 0xC76F,
+ 12425 - 11904: 0xC770,
+ 12426 - 11904: 0xC771,
+ 12427 - 11904: 0xC772,
+ 12428 - 11904: 0xC773,
+ 12429 - 11904: 0xC774,
+ 12430 - 11904: 0xC775,
+ 12431 - 11904: 0xC776,
+ 12432 - 11904: 0xC777,
+ 12433 - 11904: 0xC778,
+ 12434 - 11904: 0xC779,
+ 12435 - 11904: 0xC77A,
+ 12443 - 11904: 0xC8D4,
+ 12444 - 11904: 0xC8D5,
+ 12445 - 11904: 0xC6DC,
+ 12446 - 11904: 0xC6DD,
+ 12449 - 11904: 0xC77B,
+ 12450 - 11904: 0xC77C,
+ 12451 - 11904: 0xC77D,
+ 12452 - 11904: 0xC77E,
+ 12453 - 11904: 0xC7A1,
+ 12454 - 11904: 0xC7A2,
+ 12455 - 11904: 0xC7A3,
+ 12456 - 11904: 0xC7A4,
+ 12457 - 11904: 0xC7A5,
+ 12458 - 11904: 0xC7A6,
+ 12459 - 11904: 0xC7A7,
+ 12460 - 11904: 0xC7A8,
+ 12461 - 11904: 0xC7A9,
+ 12462 - 11904: 0xC7AA,
+ 12463 - 11904: 0xC7AB,
+ 12464 - 11904: 0xC7AC,
+ 12465 - 11904: 0xC7AD,
+ 12466 - 11904: 0xC7AE,
+ 12467 - 11904: 0xC7AF,
+ 12468 - 11904: 0xC7B0,
+ 12469 - 11904: 0xC7B1,
+ 12470 - 11904: 0xC7B2,
+ 12471 - 11904: 0xC7B3,
+ 12472 - 11904: 0xC7B4,
+ 12473 - 11904: 0xC7B5,
+ 12474 - 11904: 0xC7B6,
+ 12475 - 11904: 0xC7B7,
+ 12476 - 11904: 0xC7B8,
+ 12477 - 11904: 0xC7B9,
+ 12478 - 11904: 0xC7BA,
+ 12479 - 11904: 0xC7BB,
+ 12480 - 11904: 0xC7BC,
+ 12481 - 11904: 0xC7BD,
+ 12482 - 11904: 0xC7BE,
+ 12483 - 11904: 0xC7BF,
+ 12484 - 11904: 0xC7C0,
+ 12485 - 11904: 0xC7C1,
+ 12486 - 11904: 0xC7C2,
+ 12487 - 11904: 0xC7C3,
+ 12488 - 11904: 0xC7C4,
+ 12489 - 11904: 0xC7C5,
+ 12490 - 11904: 0xC7C6,
+ 12491 - 11904: 0xC7C7,
+ 12492 - 11904: 0xC7C8,
+ 12493 - 11904: 0xC7C9,
+ 12494 - 11904: 0xC7CA,
+ 12495 - 11904: 0xC7CB,
+ 12496 - 11904: 0xC7CC,
+ 12497 - 11904: 0xC7CD,
+ 12498 - 11904: 0xC7CE,
+ 12499 - 11904: 0xC7CF,
+ 12500 - 11904: 0xC7D0,
+ 12501 - 11904: 0xC7D1,
+ 12502 - 11904: 0xC7D2,
+ 12503 - 11904: 0xC7D3,
+ 12504 - 11904: 0xC7D4,
+ 12505 - 11904: 0xC7D5,
+ 12506 - 11904: 0xC7D6,
+ 12507 - 11904: 0xC7D7,
+ 12508 - 11904: 0xC7D8,
+ 12509 - 11904: 0xC7D9,
+ 12510 - 11904: 0xC7DA,
+ 12511 - 11904: 0xC7DB,
+ 12512 - 11904: 0xC7DC,
+ 12513 - 11904: 0xC7DD,
+ 12514 - 11904: 0xC7DE,
+ 12515 - 11904: 0xC7DF,
+ 12516 - 11904: 0xC7E0,
+ 12517 - 11904: 0xC7E1,
+ 12518 - 11904: 0xC7E2,
+ 12519 - 11904: 0xC7E3,
+ 12520 - 11904: 0xC7E4,
+ 12521 - 11904: 0xC7E5,
+ 12522 - 11904: 0xC7E6,
+ 12523 - 11904: 0xC7E7,
+ 12524 - 11904: 0xC7E8,
+ 12525 - 11904: 0xC7E9,
+ 12526 - 11904: 0xC7EA,
+ 12527 - 11904: 0xC7EB,
+ 12528 - 11904: 0xC7EC,
+ 12529 - 11904: 0xC7ED,
+ 12530 - 11904: 0xC7EE,
+ 12531 - 11904: 0xC7EF,
+ 12532 - 11904: 0xC7F0,
+ 12533 - 11904: 0xC7F1,
+ 12534 - 11904: 0xC7F2,
+ 12540 - 11904: 0xC6E3,
+ 12541 - 11904: 0xC6DA,
+ 12542 - 11904: 0xC6DB,
+ 12549 - 11904: 0xA374,
+ 12550 - 11904: 0xA375,
+ 12551 - 11904: 0xA376,
+ 12552 - 11904: 0xA377,
+ 12553 - 11904: 0xA378,
+ 12554 - 11904: 0xA379,
+ 12555 - 11904: 0xA37A,
+ 12556 - 11904: 0xA37B,
+ 12557 - 11904: 0xA37C,
+ 12558 - 11904: 0xA37D,
+ 12559 - 11904: 0xA37E,
+ 12560 - 11904: 0xA3A1,
+ 12561 - 11904: 0xA3A2,
+ 12562 - 11904: 0xA3A3,
+ 12563 - 11904: 0xA3A4,
+ 12564 - 11904: 0xA3A5,
+ 12565 - 11904: 0xA3A6,
+ 12566 - 11904: 0xA3A7,
+ 12567 - 11904: 0xA3A8,
+ 12568 - 11904: 0xA3A9,
+ 12569 - 11904: 0xA3AA,
+ 12570 - 11904: 0xA3AB,
+ 12571 - 11904: 0xA3AC,
+ 12572 - 11904: 0xA3AD,
+ 12573 - 11904: 0xA3AE,
+ 12574 - 11904: 0xA3AF,
+ 12575 - 11904: 0xA3B0,
+ 12576 - 11904: 0xA3B1,
+ 12577 - 11904: 0xA3B2,
+ 12578 - 11904: 0xA3B3,
+ 12579 - 11904: 0xA3B4,
+ 12580 - 11904: 0xA3B5,
+ 12581 - 11904: 0xA3B6,
+ 12582 - 11904: 0xA3B7,
+ 12583 - 11904: 0xA3B8,
+ 12584 - 11904: 0xA3B9,
+ 12585 - 11904: 0xA3BA,
+ 12736 - 11904: 0x8840,
+ 12737 - 11904: 0x8841,
+ 12738 - 11904: 0x8842,
+ 12739 - 11904: 0x8843,
+ 12740 - 11904: 0x8844,
+ 12741 - 11904: 0x8846,
+ 12742 - 11904: 0x8849,
+ 12743 - 11904: 0x884A,
+ 12744 - 11904: 0x884D,
+ 12745 - 11904: 0x884F,
+ 12746 - 11904: 0x8850,
+ 12747 - 11904: 0x8851,
+ 12748 - 11904: 0x8852,
+ 12749 - 11904: 0x8854,
+ 12750 - 11904: 0x8855,
+ 12751 - 11904: 0xC879,
+ 12849 - 11904: 0xC8D1,
+ 12963 - 11904: 0xA1C0,
+ 13198 - 11904: 0xA255,
+ 13199 - 11904: 0xA256,
+ 13212 - 11904: 0xA250,
+ 13213 - 11904: 0xA251,
+ 13214 - 11904: 0xA252,
+ 13217 - 11904: 0xA254,
+ 13252 - 11904: 0xA257,
+ 13262 - 11904: 0xA253,
+ 13265 - 11904: 0xA1EB,
+ 13266 - 11904: 0xA1EA,
+ 13269 - 11904: 0xA24F,
+ 13365 - 11904: 0x9277,
+ 13376 - 11904: 0x96DF,
+ 13386 - 11904: 0x8CF4,
+ 13388 - 11904: 0x89D5,
+ 13412 - 11904: 0x93CD,
+ 13427 - 11904: 0x9BDF,
+ 13434 - 11904: 0xFA68,
+ 13437 - 11904: 0x89DA,
+ 13438 - 11904: 0x8F59,
+ 13459 - 11904: 0x89DB,
+ 13462 - 11904: 0x8F5D,
+ 13477 - 11904: 0x89DC,
+ 13487 - 11904: 0x96F7,
+ 13500 - 11904: 0x8ADA,
+ 13505 - 11904: 0x8BDC,
+ 13512 - 11904: 0x97DB,
+ 13535 - 11904: 0x9E53,
+ 13540 - 11904: 0x9DAA,
+ 13542 - 11904: 0x87BE,
+ 13563 - 11904: 0x9BEA,
+ 13574 - 11904: 0x8A6E,
+ 13630 - 11904: 0x8BC8,
+ 13649 - 11904: 0x89E8,
+ 13651 - 11904: 0x89EA,
+ 13657 - 11904: 0x8C4B,
+ 13665 - 11904: 0xFB70,
+ 13677 - 11904: 0x89ED,
+ 13680 - 11904: 0x94DD,
+ 13682 - 11904: 0x89EE,
+ 13687 - 11904: 0x9EB4,
+ 13688 - 11904: 0x8AD3,
+ 13700 - 11904: 0x92DB,
+ 13719 - 11904: 0x94DB,
+ 13720 - 11904: 0x89F9,
+ 13729 - 11904: 0xFB7A,
+ 13733 - 11904: 0x89FB,
+ 13741 - 11904: 0x9EFC,
+ 13759 - 11904: 0x89FC,
+ 13761 - 11904: 0x89BF,
+ 13765 - 11904: 0x89FE,
+ 13767 - 11904: 0x89E6,
+ 13770 - 11904: 0x9D46,
+ 13774 - 11904: 0x9DEE,
+ 13778 - 11904: 0xA07E,
+ 13782 - 11904: 0xA068,
+ 13787 - 11904: 0x98E9,
+ 13789 - 11904: 0x8B68,
+ 13809 - 11904: 0x8DFD,
+ 13810 - 11904: 0x8BBE,
+ 13811 - 11904: 0x9FD9,
+ 13819 - 11904: 0x8AEB,
+ 13822 - 11904: 0x9FD7,
+ 13833 - 11904: 0x8B6A,
+ 13848 - 11904: 0x9C5C,
+ 13850 - 11904: 0x8BB1,
+ 13859 - 11904: 0xFB5E,
+ 13861 - 11904: 0x8770,
+ 13869 - 11904: 0x9DF3,
+ 13877 - 11904: 0xA0D0,
+ 13881 - 11904: 0xFC66,
+ 13886 - 11904: 0x92E9,
+ 13895 - 11904: 0x9AEC,
+ 13896 - 11904: 0x8FAB,
+ 13897 - 11904: 0xFA48,
+ 13902 - 11904: 0x8E45,
+ 13919 - 11904: 0x9C6F,
+ 13921 - 11904: 0x8D5C,
+ 13946 - 11904: 0x9EDE,
+ 13953 - 11904: 0x89EF,
+ 13978 - 11904: 0x96E9,
+ 13989 - 11904: 0x9EBB,
+ 13994 - 11904: 0x94DE,
+ 13996 - 11904: 0x9EB8,
+ 14000 - 11904: 0x97BA,
+ 14001 - 11904: 0xFB65,
+ 14005 - 11904: 0x95D6,
+ 14009 - 11904: 0x9CBB,
+ 14012 - 11904: 0x97DA,
+ 14017 - 11904: 0x8F45,
+ 14019 - 11904: 0xFB7D,
+ 14020 - 11904: 0x9158,
+ 14021 - 11904: 0xFE64,
+ 14023 - 11904: 0x9856,
+ 14024 - 11904: 0x9B4D,
+ 14035 - 11904: 0x935B,
+ 14036 - 11904: 0x95C7,
+ 14038 - 11904: 0x97E7,
+ 14045 - 11904: 0x9359,
+ 14049 - 11904: 0x91F5,
+ 14050 - 11904: 0x97B8,
+ 14053 - 11904: 0xFDA2,
+ 14054 - 11904: 0xFBB6,
+ 14069 - 11904: 0x92FA,
+ 14081 - 11904: 0x9357,
+ 14083 - 11904: 0x8BA6,
+ 14088 - 11904: 0xFBB9,
+ 14090 - 11904: 0x97B0,
+ 14093 - 11904: 0xFDC4,
+ 14108 - 11904: 0x9CA1,
+ 14114 - 11904: 0x91F2,
+ 14115 - 11904: 0x91F9,
+ 14117 - 11904: 0x8FF1,
+ 14124 - 11904: 0x9745,
+ 14125 - 11904: 0x9853,
+ 14128 - 11904: 0xFE78,
+ 14130 - 11904: 0xFBC1,
+ 14131 - 11904: 0x9251,
+ 14138 - 11904: 0x9DAD,
+ 14144 - 11904: 0xFD6C,
+ 14147 - 11904: 0xFA6B,
+ 14178 - 11904: 0x9BC2,
+ 14191 - 11904: 0x9A7B,
+ 14231 - 11904: 0x8B60,
+ 14240 - 11904: 0x934B,
+ 14265 - 11904: 0x9ABD,
+ 14270 - 11904: 0x91B7,
+ 14294 - 11904: 0x8D4B,
+ 14322 - 11904: 0x95B4,
+ 14328 - 11904: 0xFEC5,
+ 14331 - 11904: 0x9EF0,
+ 14351 - 11904: 0x8D64,
+ 14361 - 11904: 0x9269,
+ 14368 - 11904: 0x8D67,
+ 14381 - 11904: 0xFBEA,
+ 14390 - 11904: 0xFBEF,
+ 14392 - 11904: 0x8D68,
+ 14435 - 11904: 0x93EB,
+ 14453 - 11904: 0x877A,
+ 14496 - 11904: 0xFC42,
+ 14531 - 11904: 0x9166,
+ 14540 - 11904: 0xFACD,
+ 14545 - 11904: 0x93DD,
+ 14548 - 11904: 0x8D52,
+ 14586 - 11904: 0x8BCC,
+ 14600 - 11904: 0x8D6D,
+ 14612 - 11904: 0x8D6E,
+ 14631 - 11904: 0x96A8,
+ 14642 - 11904: 0xFCA6,
+ 14655 - 11904: 0x8D6F,
+ 14669 - 11904: 0x8D70,
+ 14691 - 11904: 0xFC64,
+ 14712 - 11904: 0x8CF3,
+ 14720 - 11904: 0x9060,
+ 14729 - 11904: 0x8D74,
+ 14730 - 11904: 0x97C3,
+ 14738 - 11904: 0x8AD0,
+ 14745 - 11904: 0x9274,
+ 14747 - 11904: 0x9BBE,
+ 14753 - 11904: 0x9CC8,
+ 14756 - 11904: 0x9CBA,
+ 14776 - 11904: 0x8D78,
+ 14812 - 11904: 0x9EB9,
+ 14818 - 11904: 0x955A,
+ 14821 - 11904: 0x91B4,
+ 14828 - 11904: 0x8A48,
+ 14840 - 11904: 0x8D7D,
+ 14843 - 11904: 0x8A7D,
+ 14846 - 11904: 0x8AC2,
+ 14849 - 11904: 0xFD4A,
+ 14851 - 11904: 0x8DA1,
+ 14854 - 11904: 0x8AD1,
+ 14871 - 11904: 0xFCB4,
+ 14872 - 11904: 0x8B47,
+ 14889 - 11904: 0x93A4,
+ 14890 - 11904: 0x9EDA,
+ 14900 - 11904: 0x8A51,
+ 14923 - 11904: 0x8DA6,
+ 14930 - 11904: 0x9EC5,
+ 14935 - 11904: 0xFCC4,
+ 14940 - 11904: 0xA078,
+ 14942 - 11904: 0x94B5,
+ 14950 - 11904: 0xFCC2,
+ 14951 - 11904: 0x8A6B,
+ 14999 - 11904: 0x8DAB,
+ 15019 - 11904: 0xFAE8,
+ 15037 - 11904: 0x8DAD,
+ 15070 - 11904: 0xFC49,
+ 15072 - 11904: 0x93C1,
+ 15088 - 11904: 0x906F,
+ 15090 - 11904: 0x8DB0,
+ 15093 - 11904: 0x87A2,
+ 15099 - 11904: 0x947E,
+ 15118 - 11904: 0x90FA,
+ 15129 - 11904: 0x9479,
+ 15138 - 11904: 0x8DB2,
+ 15147 - 11904: 0xFCEE,
+ 15161 - 11904: 0x997B,
+ 15170 - 11904: 0x8DB4,
+ 15192 - 11904: 0x8DB7,
+ 15200 - 11904: 0x91B3,
+ 15217 - 11904: 0x8DBB,
+ 15218 - 11904: 0x8DBA,
+ 15227 - 11904: 0x8DBC,
+ 15228 - 11904: 0x9044,
+ 15232 - 11904: 0xFD4C,
+ 15253 - 11904: 0x874B,
+ 15254 - 11904: 0x93E4,
+ 15257 - 11904: 0x93E0,
+ 15265 - 11904: 0xFD53,
+ 15292 - 11904: 0x8DC3,
+ 15294 - 11904: 0x9BB8,
+ 15298 - 11904: 0xFBF0,
+ 15300 - 11904: 0x93E9,
+ 15319 - 11904: 0x93F6,
+ 15325 - 11904: 0x8DC5,
+ 15340 - 11904: 0x8DCA,
+ 15346 - 11904: 0x8DCC,
+ 15347 - 11904: 0xFD5D,
+ 15348 - 11904: 0x93B5,
+ 15373 - 11904: 0xFD61,
+ 15377 - 11904: 0x9CF8,
+ 15381 - 11904: 0x9252,
+ 15384 - 11904: 0xA0E8,
+ 15444 - 11904: 0x9CA5,
+ 15499 - 11904: 0x8C56,
+ 15563 - 11904: 0x8DD6,
+ 15565 - 11904: 0x97C0,
+ 15569 - 11904: 0xA0DE,
+ 15574 - 11904: 0x97D2,
+ 15580 - 11904: 0xFAA5,
+ 15595 - 11904: 0xFDA3,
+ 15599 - 11904: 0x8DDB,
+ 15634 - 11904: 0x8CEA,
+ 15635 - 11904: 0x8EAF,
+ 15645 - 11904: 0x91B5,
+ 15666 - 11904: 0xFD49,
+ 15675 - 11904: 0xFDD1,
+ 15686 - 11904: 0x8DEB,
+ 15692 - 11904: 0x97C6,
+ 15694 - 11904: 0xFDCE,
+ 15697 - 11904: 0x90FC,
+ 15711 - 11904: 0xFC59,
+ 15714 - 11904: 0x96D6,
+ 15721 - 11904: 0x97C5,
+ 15722 - 11904: 0x8DEF,
+ 15727 - 11904: 0x97D7,
+ 15733 - 11904: 0x8DF0,
+ 15741 - 11904: 0x96A6,
+ 15749 - 11904: 0xFBBF,
+ 15752 - 11904: 0x8CDF,
+ 15754 - 11904: 0x8DF3,
+ 15759 - 11904: 0x9449,
+ 15761 - 11904: 0x8DF5,
+ 15781 - 11904: 0x9872,
+ 15789 - 11904: 0x8E6B,
+ 15796 - 11904: 0xFAFD,
+ 15807 - 11904: 0x8F50,
+ 15814 - 11904: 0x9DCC,
+ 15815 - 11904: 0xFC65,
+ 15817 - 11904: 0x8C44,
+ 15820 - 11904: 0x996E,
+ 15821 - 11904: 0x94A1,
+ 15827 - 11904: 0x8F63,
+ 15835 - 11904: 0xA0DA,
+ 15847 - 11904: 0x9253,
+ 15848 - 11904: 0xFDE9,
+ 15851 - 11904: 0x9DB5,
+ 15859 - 11904: 0x9879,
+ 15860 - 11904: 0x876A,
+ 15863 - 11904: 0x9D5D,
+ 15868 - 11904: 0x8D63,
+ 15869 - 11904: 0x9669,
+ 15878 - 11904: 0x9F70,
+ 15936 - 11904: 0xFC6A,
+ 15939 - 11904: 0x8AC7,
+ 15944 - 11904: 0x89D7,
+ 15957 - 11904: 0xFE4D,
+ 15988 - 11904: 0x9EDD,
+ 16040 - 11904: 0xFEFB,
+ 16041 - 11904: 0x98BC,
+ 16042 - 11904: 0xFACC,
+ 16045 - 11904: 0x95B0,
+ 16049 - 11904: 0x9464,
+ 16056 - 11904: 0x936F,
+ 16063 - 11904: 0x94B9,
+ 16066 - 11904: 0x95EC,
+ 16071 - 11904: 0x91EE,
+ 16074 - 11904: 0x98C3,
+ 16076 - 11904: 0x95F6,
+ 16080 - 11904: 0x8FFD,
+ 16081 - 11904: 0x98C5,
+ 16086 - 11904: 0x9766,
+ 16087 - 11904: 0xFE6E,
+ 16090 - 11904: 0x97DD,
+ 16091 - 11904: 0x8CAA,
+ 16094 - 11904: 0x92D2,
+ 16097 - 11904: 0x9761,
+ 16098 - 11904: 0x98CB,
+ 16103 - 11904: 0x95F0,
+ 16105 - 11904: 0x975D,
+ 16107 - 11904: 0x91E3,
+ 16108 - 11904: 0x877E,
+ 16112 - 11904: 0x98CC,
+ 16115 - 11904: 0x9469,
+ 16116 - 11904: 0x98CD,
+ 16122 - 11904: 0x98CE,
+ 16124 - 11904: 0x95FC,
+ 16127 - 11904: 0x94A3,
+ 16128 - 11904: 0x9662,
+ 16132 - 11904: 0xFEB6,
+ 16134 - 11904: 0x9463,
+ 16135 - 11904: 0x8D47,
+ 16142 - 11904: 0x98D0,
+ 16211 - 11904: 0x98D1,
+ 16216 - 11904: 0x9475,
+ 16217 - 11904: 0xFAE0,
+ 16227 - 11904: 0x9472,
+ 16252 - 11904: 0x98D6,
+ 16275 - 11904: 0x8AF0,
+ 16320 - 11904: 0x98D9,
+ 16328 - 11904: 0x8D5A,
+ 16343 - 11904: 0x98DB,
+ 16348 - 11904: 0x98DD,
+ 16357 - 11904: 0x98A8,
+ 16365 - 11904: 0x8A6D,
+ 16377 - 11904: 0x8AFB,
+ 16378 - 11904: 0x8AAE,
+ 16388 - 11904: 0xFBC9,
+ 16393 - 11904: 0x8C5D,
+ 16413 - 11904: 0x98E4,
+ 16441 - 11904: 0x98E6,
+ 16453 - 11904: 0x98E8,
+ 16467 - 11904: 0x8A4D,
+ 16471 - 11904: 0x9257,
+ 16482 - 11904: 0x95DF,
+ 16485 - 11904: 0xA0AC,
+ 16490 - 11904: 0x98EB,
+ 16495 - 11904: 0x98EC,
+ 16497 - 11904: 0x8CC3,
+ 16552 - 11904: 0x98F4,
+ 16564 - 11904: 0x87D9,
+ 16571 - 11904: 0x8AB8,
+ 16575 - 11904: 0x9EE7,
+ 16584 - 11904: 0x94BC,
+ 16600 - 11904: 0xFCD1,
+ 16607 - 11904: 0x9CC6,
+ 16632 - 11904: 0x8D4A,
+ 16634 - 11904: 0x9E7E,
+ 16642 - 11904: 0x8D44,
+ 16643 - 11904: 0x98FE,
+ 16644 - 11904: 0xFDE8,
+ 16649 - 11904: 0x9940,
+ 16654 - 11904: 0x94C9,
+ 16689 - 11904: 0x87C6,
+ 16690 - 11904: 0x94D3,
+ 16743 - 11904: 0x9946,
+ 16748 - 11904: 0x90C0,
+ 16750 - 11904: 0x94D1,
+ 16764 - 11904: 0x8D4E,
+ 16767 - 11904: 0x9573,
+ 16769 - 11904: 0x87CE,
+ 16784 - 11904: 0x93C2,
+ 16818 - 11904: 0x9948,
+ 16836 - 11904: 0x994B,
+ 16842 - 11904: 0x8E55,
+ 16847 - 11904: 0x994E,
+ 16859 - 11904: 0x8EFE,
+ 16877 - 11904: 0x8D5F,
+ 16879 - 11904: 0x8E59,
+ 16889 - 11904: 0x94EC,
+ 16913 - 11904: 0x94EF,
+ 16931 - 11904: 0x8C60,
+ 16960 - 11904: 0x8F74,
+ 16992 - 11904: 0x9955,
+ 17002 - 11904: 0x9544,
+ 17014 - 11904: 0x8CCB,
+ 17018 - 11904: 0x9956,
+ 17036 - 11904: 0x9959,
+ 17044 - 11904: 0x995B,
+ 17058 - 11904: 0x8CC4,
+ 17077 - 11904: 0xFA45,
+ 17081 - 11904: 0x90B7,
+ 17084 - 11904: 0x9743,
+ 17140 - 11904: 0x95CD,
+ 17147 - 11904: 0x97C9,
+ 17148 - 11904: 0xFD50,
+ 17162 - 11904: 0x87AA,
+ 17195 - 11904: 0x8EB9,
+ 17262 - 11904: 0x95C6,
+ 17303 - 11904: 0x9967,
+ 17306 - 11904: 0x8CE3,
+ 17338 - 11904: 0x8AB9,
+ 17345 - 11904: 0x8DFC,
+ 17369 - 11904: 0x8A76,
+ 17375 - 11904: 0x9D51,
+ 17389 - 11904: 0x9973,
+ 17392 - 11904: 0x8740,
+ 17394 - 11904: 0x9D4F,
+ 17409 - 11904: 0x997A,
+ 17410 - 11904: 0x9564,
+ 17427 - 11904: 0x99A1,
+ 17445 - 11904: 0x99A5,
+ 17453 - 11904: 0x99A7,
+ 17530 - 11904: 0x8EED,
+ 17551 - 11904: 0x99AD,
+ 17553 - 11904: 0xC87E,
+ 17567 - 11904: 0x946E,
+ 17568 - 11904: 0x8F70,
+ 17570 - 11904: 0xFAD0,
+ 17584 - 11904: 0x99B3,
+ 17591 - 11904: 0xA053,
+ 17597 - 11904: 0x8D5E,
+ 17600 - 11904: 0x965C,
+ 17603 - 11904: 0x8CE0,
+ 17605 - 11904: 0xFD7A,
+ 17614 - 11904: 0x97FE,
+ 17629 - 11904: 0x92BD,
+ 17630 - 11904: 0x8D5D,
+ 17631 - 11904: 0x97FD,
+ 17633 - 11904: 0x87DB,
+ 17636 - 11904: 0x8F64,
+ 17641 - 11904: 0xFCF7,
+ 17642 - 11904: 0x9562,
+ 17643 - 11904: 0x97CD,
+ 17644 - 11904: 0x9E64,
+ 17652 - 11904: 0x924C,
+ 17667 - 11904: 0x8EC9,
+ 17668 - 11904: 0x99BC,
+ 17673 - 11904: 0x9DA5,
+ 17675 - 11904: 0x8F54,
+ 17686 - 11904: 0x8F7C,
+ 17691 - 11904: 0x8D55,
+ 17693 - 11904: 0x8EA2,
+ 17703 - 11904: 0x8F7A,
+ 17710 - 11904: 0x97AE,
+ 17715 - 11904: 0x96C8,
+ 17718 - 11904: 0x8CE4,
+ 17723 - 11904: 0x99C3,
+ 17725 - 11904: 0x90D6,
+ 17727 - 11904: 0x9CBE,
+ 17731 - 11904: 0x8F76,
+ 17745 - 11904: 0x9470,
+ 17746 - 11904: 0xFB4B,
+ 17749 - 11904: 0xFDCA,
+ 17752 - 11904: 0x8CEF,
+ 17756 - 11904: 0x8EC7,
+ 17761 - 11904: 0x8D54,
+ 17762 - 11904: 0xA0F9,
+ 17770 - 11904: 0x8FA9,
+ 17773 - 11904: 0x8D51,
+ 17783 - 11904: 0x99C7,
+ 17784 - 11904: 0x8744,
+ 17797 - 11904: 0x90D7,
+ 17830 - 11904: 0x8743,
+ 17843 - 11904: 0x8747,
+ 17882 - 11904: 0x8758,
+ 17897 - 11904: 0x9EDF,
+ 17898 - 11904: 0x8D59,
+ 17923 - 11904: 0x8742,
+ 17926 - 11904: 0x99CE,
+ 17935 - 11904: 0x8FBA,
+ 17941 - 11904: 0x8FEB,
+ 17943 - 11904: 0x99CF,
+ 18011 - 11904: 0x8FC2,
+ 18042 - 11904: 0x92C9,
+ 18048 - 11904: 0x97DC,
+ 18081 - 11904: 0x875D,
+ 18094 - 11904: 0x87CC,
+ 18107 - 11904: 0x8D45,
+ 18127 - 11904: 0x95B3,
+ 18128 - 11904: 0x9C79,
+ 18165 - 11904: 0x95B2,
+ 18167 - 11904: 0x8D4C,
+ 18195 - 11904: 0x8FDB,
+ 18200 - 11904: 0x9BE3,
+ 18230 - 11904: 0x874C,
+ 18244 - 11904: 0x874D,
+ 18254 - 11904: 0x9E7A,
+ 18255 - 11904: 0x8757,
+ 18300 - 11904: 0x9BEE,
+ 18328 - 11904: 0x99DE,
+ 18342 - 11904: 0xFAFA,
+ 18389 - 11904: 0x8A52,
+ 18413 - 11904: 0x99E1,
+ 18420 - 11904: 0x8A67,
+ 18432 - 11904: 0x8BB5,
+ 18443 - 11904: 0x8AAC,
+ 18487 - 11904: 0x99E9,
+ 18525 - 11904: 0xFBCA,
+ 18545 - 11904: 0x97DE,
+ 18587 - 11904: 0x95D1,
+ 18605 - 11904: 0x99F5,
+ 18606 - 11904: 0xFC4A,
+ 18640 - 11904: 0x9BA9,
+ 18653 - 11904: 0xFBDC,
+ 18669 - 11904: 0xFE56,
+ 18675 - 11904: 0x9EA4,
+ 18682 - 11904: 0x9D49,
+ 18694 - 11904: 0x95DB,
+ 18705 - 11904: 0x89C5,
+ 18718 - 11904: 0x99F8,
+ 18725 - 11904: 0x9664,
+ 18730 - 11904: 0x9055,
+ 18733 - 11904: 0x96D4,
+ 18735 - 11904: 0x87C4,
+ 18736 - 11904: 0x87AE,
+ 18741 - 11904: 0x977C,
+ 18748 - 11904: 0x964D,
+ 18750 - 11904: 0x97E1,
+ 18757 - 11904: 0x9A48,
+ 18769 - 11904: 0x9A49,
+ 18771 - 11904: 0xFE7D,
+ 18789 - 11904: 0x90AA,
+ 18794 - 11904: 0x9A50,
+ 18802 - 11904: 0x9347,
+ 18825 - 11904: 0x8ED8,
+ 18849 - 11904: 0x90C9,
+ 18855 - 11904: 0x9A55,
+ 18911 - 11904: 0x90BC,
+ 18917 - 11904: 0x9A58,
+ 18919 - 11904: 0x8BB8,
+ 18959 - 11904: 0x90D5,
+ 18973 - 11904: 0x9641,
+ 18980 - 11904: 0x9A5A,
+ 18997 - 11904: 0x9A5C,
+ 19094 - 11904: 0x97C2,
+ 19108 - 11904: 0x875C,
+ 19124 - 11904: 0x8ABB,
+ 19128 - 11904: 0x9BAA,
+ 19153 - 11904: 0x90F5,
+ 19172 - 11904: 0x9A60,
+ 19199 - 11904: 0x9145,
+ 19216 - 11904: 0x8C58,
+ 19225 - 11904: 0x9A63,
+ 19232 - 11904: 0x8C49,
+ 19244 - 11904: 0x8BB6,
+ 19255 - 11904: 0xFCCF,
+ 19311 - 11904: 0x966B,
+ 19312 - 11904: 0x9A6E,
+ 19314 - 11904: 0x914F,
+ 19323 - 11904: 0x9746,
+ 19326 - 11904: 0xA0E6,
+ 19342 - 11904: 0x92D7,
+ 19344 - 11904: 0x9675,
+ 19347 - 11904: 0x93D4,
+ 19350 - 11904: 0x91BB,
+ 19351 - 11904: 0x9679,
+ 19357 - 11904: 0x9A70,
+ 19389 - 11904: 0x9678,
+ 19390 - 11904: 0x91CD,
+ 19392 - 11904: 0x9C4A,
+ 19460 - 11904: 0xA06F,
+ 19463 - 11904: 0xA06A,
+ 19470 - 11904: 0x915F,
+ 19506 - 11904: 0x8741,
+ 19515 - 11904: 0x9FA5,
+ 19518 - 11904: 0x89BA,
+ 19520 - 11904: 0x874F,
+ 19527 - 11904: 0x874E,
+ 19543 - 11904: 0x8755,
+ 19547 - 11904: 0x9ECD,
+ 19565 - 11904: 0x9A79,
+ 19575 - 11904: 0x8CF2,
+ 19579 - 11904: 0x8D57,
+ 19581 - 11904: 0x9DCE,
+ 19585 - 11904: 0x8CD2,
+ 19589 - 11904: 0x8759,
+ 19620 - 11904: 0x9D73,
+ 19630 - 11904: 0x96B9,
+ 19632 - 11904: 0x96BC,
+ 19639 - 11904: 0x9CD1,
+ 19661 - 11904: 0x89B7,
+ 19681 - 11904: 0x9EEE,
+ 19682 - 11904: 0x8749,
+ 19693 - 11904: 0xFB43,
+ 19719 - 11904: 0x875B,
+ 19721 - 11904: 0x9EC9,
+ 19728 - 11904: 0xFBD3,
+ 19764 - 11904: 0x91AE,
+ 19830 - 11904: 0x8D58,
+ 19831 - 11904: 0x8746,
+ 19849 - 11904: 0x8D56,
+ 19857 - 11904: 0x9D78,
+ 19868 - 11904: 0x9D7B,
+ 19968 - 11904: 0xA440,
+ 19969 - 11904: 0xA442,
+ 19971 - 11904: 0xA443,
+ 19972 - 11904: 0x9EB3,
+ 19975 - 11904: 0xC945,
+ 19976 - 11904: 0xA456,
+ 19977 - 11904: 0xA454,
+ 19978 - 11904: 0xA457,
+ 19979 - 11904: 0xA455,
+ 19980 - 11904: 0xC946,
+ 19981 - 11904: 0xA4A3,
+ 19982 - 11904: 0xC94F,
+ 19983 - 11904: 0xC94D,
+ 19984 - 11904: 0xA4A2,
+ 19985 - 11904: 0xA4A1,
+ 19988 - 11904: 0xA542,
+ 19989 - 11904: 0xA541,
+ 19990 - 11904: 0xA540,
+ 19992 - 11904: 0xA543,
+ 19993 - 11904: 0xA4FE,
+ 19994 - 11904: 0x9EB2,
+ 19996 - 11904: 0x9DD6,
+ 19998 - 11904: 0xA5E0,
+ 19999 - 11904: 0xA5E1,
+ 20001 - 11904: 0x994F,
+ 20004 - 11904: 0x89CE,
+ 20006 - 11904: 0xA8C3,
+ 20008 - 11904: 0x8BC0,
+ 20010 - 11904: 0x9FC4,
+ 20011 - 11904: 0xA458,
+ 20012 - 11904: 0x8BD4,
+ 20013 - 11904: 0xA4A4,
+ 20014 - 11904: 0xC950,
+ 20015 - 11904: 0x8C72,
+ 20016 - 11904: 0xA4A5,
+ 20017 - 11904: 0xC963,
+ 20018 - 11904: 0xA6EA,
+ 20019 - 11904: 0xCBB1,
+ 20022 - 11904: 0xC6BF,
+ 20023 - 11904: 0x8BF9,
+ 20024 - 11904: 0xA459,
+ 20025 - 11904: 0xA4A6,
+ 20027 - 11904: 0xA544,
+ 20028 - 11904: 0xC964,
+ 20029 - 11904: 0x8946,
+ 20031 - 11904: 0xC6C0,
+ 20034 - 11904: 0xC940,
+ 20035 - 11904: 0xA444,
+ 20037 - 11904: 0xA45B,
+ 20039 - 11904: 0xC947,
+ 20040 - 11904: 0xA45C,
+ 20041 - 11904: 0xFAE5,
+ 20043 - 11904: 0xA4A7,
+ 20045 - 11904: 0xA545,
+ 20046 - 11904: 0xA547,
+ 20047 - 11904: 0xA546,
+ 20050 - 11904: 0xA5E2,
+ 20051 - 11904: 0xA5E3,
+ 20054 - 11904: 0xA8C4,
+ 20056 - 11904: 0xADBC,
+ 20057 - 11904: 0xA441,
+ 20058 - 11904: 0xC87B,
+ 20059 - 11904: 0x8BC6,
+ 20060 - 11904: 0xC941,
+ 20061 - 11904: 0xA445,
+ 20062 - 11904: 0xA45E,
+ 20063 - 11904: 0xA45D,
+ 20073 - 11904: 0xA5E4,
+ 20074 - 11904: 0x9C57,
+ 20083 - 11904: 0xA8C5,
+ 20088 - 11904: 0x9AFB,
+ 20094 - 11904: 0xB0AE,
+ 20095 - 11904: 0xD44B,
+ 20096 - 11904: 0x89D0,
+ 20097 - 11904: 0x89CF,
+ 20098 - 11904: 0xB6C3,
+ 20099 - 11904: 0xDCB1,
+ 20100 - 11904: 0xDCB2,
+ 20101 - 11904: 0xC6C1,
+ 20102 - 11904: 0xA446,
+ 20103 - 11904: 0x89D1,
+ 20104 - 11904: 0xA4A9,
+ 20105 - 11904: 0x89E2,
+ 20107 - 11904: 0xA8C6,
+ 20108 - 11904: 0xA447,
+ 20109 - 11904: 0xC948,
+ 20110 - 11904: 0xA45F,
+ 20113 - 11904: 0xA4AA,
+ 20114 - 11904: 0xA4AC,
+ 20115 - 11904: 0xC951,
+ 20116 - 11904: 0xA4AD,
+ 20117 - 11904: 0xA4AB,
+ 20120 - 11904: 0x927E,
+ 20121 - 11904: 0xA5E5,
+ 20122 - 11904: 0x9DBA,
+ 20123 - 11904: 0xA8C7,
+ 20126 - 11904: 0xA8C8,
+ 20127 - 11904: 0xAB45,
+ 20128 - 11904: 0xC6C2,
+ 20129 - 11904: 0xA460,
+ 20130 - 11904: 0xA4AE,
+ 20131 - 11904: 0x8C6F,
+ 20132 - 11904: 0xA5E6,
+ 20133 - 11904: 0xA5E8,
+ 20134 - 11904: 0xA5E7,
+ 20136 - 11904: 0xA6EB,
+ 20139 - 11904: 0xA8C9,
+ 20140 - 11904: 0xA8CA,
+ 20141 - 11904: 0xAB46,
+ 20142 - 11904: 0xAB47,
+ 20147 - 11904: 0xADBD,
+ 20150 - 11904: 0xDCB3,
+ 20151 - 11904: 0xFBF8,
+ 20153 - 11904: 0xF6D6,
+ 20154 - 11904: 0xA448,
+ 20155 - 11904: 0x8BC7,
+ 20156 - 11904: 0x926B,
+ 20159 - 11904: 0x89D2,
+ 20160 - 11904: 0xA4B0,
+ 20161 - 11904: 0xA4AF,
+ 20162 - 11904: 0xC952,
+ 20163 - 11904: 0xA4B1,
+ 20164 - 11904: 0xA4B7,
+ 20166 - 11904: 0xA4B2,
+ 20167 - 11904: 0xA4B3,
+ 20168 - 11904: 0xC954,
+ 20169 - 11904: 0xC953,
+ 20170 - 11904: 0xA4B5,
+ 20171 - 11904: 0xA4B6,
+ 20173 - 11904: 0xA4B4,
+ 20174 - 11904: 0x9FCF,
+ 20180 - 11904: 0xA54A,
+ 20181 - 11904: 0xA54B,
+ 20182 - 11904: 0xA54C,
+ 20183 - 11904: 0xA54D,
+ 20184 - 11904: 0xA549,
+ 20185 - 11904: 0xA550,
+ 20186 - 11904: 0xC96A,
+ 20188 - 11904: 0xC966,
+ 20189 - 11904: 0xC969,
+ 20190 - 11904: 0xA551,
+ 20191 - 11904: 0xA561,
+ 20193 - 11904: 0xC968,
+ 20195 - 11904: 0xA54E,
+ 20196 - 11904: 0xA54F,
+ 20197 - 11904: 0xA548,
+ 20200 - 11904: 0xC965,
+ 20201 - 11904: 0xC967,
+ 20202 - 11904: 0x9DA9,
+ 20203 - 11904: 0x89D3,
+ 20206 - 11904: 0x99E2,
+ 20208 - 11904: 0xA5F5,
+ 20209 - 11904: 0xC9B0,
+ 20210 - 11904: 0xA5F2,
+ 20211 - 11904: 0xA5F6,
+ 20212 - 11904: 0xC9BA,
+ 20213 - 11904: 0xC9AE,
+ 20214 - 11904: 0xA5F3,
+ 20215 - 11904: 0xC9B2,
+ 20216 - 11904: 0x9267,
+ 20219 - 11904: 0xA5F4,
+ 20221 - 11904: 0xA5F7,
+ 20223 - 11904: 0xA5E9,
+ 20224 - 11904: 0xC9B1,
+ 20225 - 11904: 0xA5F8,
+ 20226 - 11904: 0xC9B5,
+ 20227 - 11904: 0x92A4,
+ 20228 - 11904: 0xC9B9,
+ 20229 - 11904: 0xC9B6,
+ 20232 - 11904: 0xC9B3,
+ 20233 - 11904: 0xA5EA,
+ 20234 - 11904: 0xA5EC,
+ 20235 - 11904: 0xA5F9,
+ 20237 - 11904: 0xA5EE,
+ 20238 - 11904: 0xC9AB,
+ 20239 - 11904: 0xA5F1,
+ 20240 - 11904: 0xA5EF,
+ 20241 - 11904: 0xA5F0,
+ 20242 - 11904: 0xC9BB,
+ 20243 - 11904: 0xC9B8,
+ 20244 - 11904: 0xC9AF,
+ 20245 - 11904: 0xA5ED,
+ 20247 - 11904: 0x8C73,
+ 20248 - 11904: 0xC9AC,
+ 20249 - 11904: 0xA5EB,
+ 20250 - 11904: 0x894E,
+ 20253 - 11904: 0xC9B4,
+ 20258 - 11904: 0xC9B7,
+ 20264 - 11904: 0x894F,
+ 20265 - 11904: 0x9278,
+ 20268 - 11904: 0xC9AD,
+ 20269 - 11904: 0xCA66,
+ 20271 - 11904: 0xA742,
+ 20272 - 11904: 0xA6F4,
+ 20274 - 11904: 0x91B6,
+ 20275 - 11904: 0xCA67,
+ 20276 - 11904: 0xA6F1,
+ 20278 - 11904: 0xA744,
+ 20279 - 11904: 0x89D4,
+ 20280 - 11904: 0xA6F9,
+ 20281 - 11904: 0x9FD2,
+ 20282 - 11904: 0xA6F8,
+ 20283 - 11904: 0xCA5B,
+ 20284 - 11904: 0xA6FC,
+ 20285 - 11904: 0xA6F7,
+ 20286 - 11904: 0xCA60,
+ 20287 - 11904: 0xCA68,
+ 20289 - 11904: 0xCA64,
+ 20290 - 11904: 0x92A7,
+ 20291 - 11904: 0xA6FA,
+ 20293 - 11904: 0x95A2,
+ 20294 - 11904: 0xA6FD,
+ 20295 - 11904: 0xA6EE,
+ 20296 - 11904: 0xA747,
+ 20297 - 11904: 0xCA5D,
+ 20299 - 11904: 0x926E,
+ 20300 - 11904: 0xCBBD,
+ 20301 - 11904: 0xA6EC,
+ 20302 - 11904: 0xA743,
+ 20303 - 11904: 0xA6ED,
+ 20304 - 11904: 0xA6F5,
+ 20305 - 11904: 0xA6F6,
+ 20306 - 11904: 0xCA62,
+ 20307 - 11904: 0xCA5E,
+ 20308 - 11904: 0xA6FB,
+ 20309 - 11904: 0xA6F3,
+ 20310 - 11904: 0xCA5A,
+ 20311 - 11904: 0xA6EF,
+ 20312 - 11904: 0xCA65,
+ 20313 - 11904: 0xA745,
+ 20314 - 11904: 0xA748,
+ 20315 - 11904: 0xA6F2,
+ 20316 - 11904: 0xA740,
+ 20317 - 11904: 0xA746,
+ 20318 - 11904: 0xA6F0,
+ 20319 - 11904: 0xCA63,
+ 20320 - 11904: 0xA741,
+ 20321 - 11904: 0xCA69,
+ 20322 - 11904: 0xCA5C,
+ 20323 - 11904: 0xA6FE,
+ 20324 - 11904: 0xCA5F,
+ 20327 - 11904: 0xCA61,
+ 20329 - 11904: 0xA8D8,
+ 20330 - 11904: 0xCBBF,
+ 20331 - 11904: 0xCBCB,
+ 20332 - 11904: 0xA8D0,
+ 20334 - 11904: 0xCBCC,
+ 20335 - 11904: 0xA8CB,
+ 20336 - 11904: 0xA8D5,
+ 20338 - 11904: 0x96EA,
+ 20339 - 11904: 0xA8CE,
+ 20340 - 11904: 0xCBB9,
+ 20341 - 11904: 0xA8D6,
+ 20342 - 11904: 0xCBB8,
+ 20343 - 11904: 0xCBBC,
+ 20344 - 11904: 0xCBC3,
+ 20345 - 11904: 0xCBC1,
+ 20346 - 11904: 0xA8DE,
+ 20347 - 11904: 0xA8D9,
+ 20348 - 11904: 0xCBB3,
+ 20349 - 11904: 0xCBB5,
+ 20350 - 11904: 0xA8DB,
+ 20351 - 11904: 0xA8CF,
+ 20352 - 11904: 0xCBB6,
+ 20353 - 11904: 0xCBC2,
+ 20354 - 11904: 0xCBC9,
+ 20355 - 11904: 0xA8D4,
+ 20356 - 11904: 0xCBBB,
+ 20357 - 11904: 0xCBB4,
+ 20358 - 11904: 0xA8D3,
+ 20359 - 11904: 0xCBB7,
+ 20360 - 11904: 0xA8D7,
+ 20361 - 11904: 0xCBBA,
+ 20362 - 11904: 0x926F,
+ 20363 - 11904: 0xA8D2,
+ 20365 - 11904: 0xA8CD,
+ 20367 - 11904: 0xA8DC,
+ 20368 - 11904: 0xCBC4,
+ 20369 - 11904: 0xA8DD,
+ 20370 - 11904: 0xCBC8,
+ 20372 - 11904: 0xCBC6,
+ 20373 - 11904: 0xCBCA,
+ 20374 - 11904: 0xA8DA,
+ 20375 - 11904: 0xCBBE,
+ 20376 - 11904: 0xCBB2,
+ 20378 - 11904: 0xCBC0,
+ 20379 - 11904: 0xA8D1,
+ 20380 - 11904: 0xCBC5,
+ 20381 - 11904: 0xA8CC,
+ 20382 - 11904: 0xCBC7,
+ 20386 - 11904: 0x92A3,
+ 20392 - 11904: 0x8950,
+ 20395 - 11904: 0xFA57,
+ 20398 - 11904: 0xAB56,
+ 20399 - 11904: 0xAB4A,
+ 20400 - 11904: 0x9866,
+ 20402 - 11904: 0xCDE0,
+ 20403 - 11904: 0xCDE8,
+ 20404 - 11904: 0x8CF8,
+ 20405 - 11904: 0xAB49,
+ 20406 - 11904: 0xAB51,
+ 20407 - 11904: 0xAB5D,
+ 20409 - 11904: 0xCDEE,
+ 20410 - 11904: 0xCDEC,
+ 20411 - 11904: 0xCDE7,
+ 20413 - 11904: 0x89D6,
+ 20415 - 11904: 0xAB4B,
+ 20416 - 11904: 0xCDED,
+ 20417 - 11904: 0xCDE3,
+ 20418 - 11904: 0xAB59,
+ 20419 - 11904: 0xAB50,
+ 20420 - 11904: 0xAB58,
+ 20421 - 11904: 0xCDDE,
+ 20423 - 11904: 0xCDEA,
+ 20424 - 11904: 0x98B2,
+ 20425 - 11904: 0xCDE1,
+ 20426 - 11904: 0xAB54,
+ 20427 - 11904: 0xCDE2,
+ 20428 - 11904: 0x92AB,
+ 20429 - 11904: 0xCDDD,
+ 20430 - 11904: 0xAB5B,
+ 20431 - 11904: 0xAB4E,
+ 20432 - 11904: 0xAB57,
+ 20433 - 11904: 0xAB4D,
+ 20435 - 11904: 0xCDDF,
+ 20436 - 11904: 0xCDE4,
+ 20438 - 11904: 0xCDEB,
+ 20439 - 11904: 0xAB55,
+ 20440 - 11904: 0xAB52,
+ 20441 - 11904: 0xCDE6,
+ 20442 - 11904: 0xAB5A,
+ 20443 - 11904: 0xCDE9,
+ 20444 - 11904: 0xCDE5,
+ 20445 - 11904: 0xAB4F,
+ 20446 - 11904: 0xAB5C,
+ 20447 - 11904: 0xAB53,
+ 20448 - 11904: 0xAB4C,
+ 20449 - 11904: 0xAB48,
+ 20452 - 11904: 0x96DE,
+ 20453 - 11904: 0x92AC,
+ 20460 - 11904: 0xCDEF,
+ 20462 - 11904: 0xADD7,
+ 20463 - 11904: 0xADC1,
+ 20464 - 11904: 0x8C70,
+ 20465 - 11904: 0xADD1,
+ 20466 - 11904: 0x9F6E,
+ 20467 - 11904: 0xADD6,
+ 20468 - 11904: 0xD0D0,
+ 20469 - 11904: 0xD0CF,
+ 20470 - 11904: 0xD0D4,
+ 20471 - 11904: 0xD0D5,
+ 20472 - 11904: 0xADC4,
+ 20473 - 11904: 0x8EF2,
+ 20474 - 11904: 0xADCD,
+ 20477 - 11904: 0x9F6C,
+ 20478 - 11904: 0xADDA,
+ 20480 - 11904: 0xADCE,
+ 20483 - 11904: 0x89D8,
+ 20485 - 11904: 0xD0C9,
+ 20486 - 11904: 0xADC7,
+ 20487 - 11904: 0xD0CA,
+ 20488 - 11904: 0xFA59,
+ 20489 - 11904: 0xADDC,
+ 20491 - 11904: 0xADD3,
+ 20492 - 11904: 0xADBE,
+ 20493 - 11904: 0xADBF,
+ 20494 - 11904: 0xD0DD,
+ 20495 - 11904: 0xB0BF,
+ 20497 - 11904: 0xADCC,
+ 20498 - 11904: 0xADCB,
+ 20499 - 11904: 0xD0CB,
+ 20500 - 11904: 0xADCF,
+ 20501 - 11904: 0xD45B,
+ 20502 - 11904: 0xADC6,
+ 20503 - 11904: 0xD0D6,
+ 20504 - 11904: 0xADD5,
+ 20505 - 11904: 0xADD4,
+ 20506 - 11904: 0xADCA,
+ 20507 - 11904: 0xD0CE,
+ 20508 - 11904: 0xD0D7,
+ 20510 - 11904: 0xD0C8,
+ 20511 - 11904: 0xADC9,
+ 20512 - 11904: 0xD0D8,
+ 20513 - 11904: 0xADD2,
+ 20514 - 11904: 0xD0CC,
+ 20515 - 11904: 0xADC0,
+ 20517 - 11904: 0xADC3,
+ 20518 - 11904: 0xADC2,
+ 20519 - 11904: 0xD0D9,
+ 20520 - 11904: 0xADD0,
+ 20521 - 11904: 0xFA5F,
+ 20522 - 11904: 0xADD9,
+ 20523 - 11904: 0xADDB,
+ 20524 - 11904: 0xD0D3,
+ 20525 - 11904: 0xADD8,
+ 20526 - 11904: 0x92A8,
+ 20527 - 11904: 0xD0DB,
+ 20528 - 11904: 0xD0CD,
+ 20529 - 11904: 0xD0DC,
+ 20531 - 11904: 0xD0D1,
+ 20532 - 11904: 0x9163,
+ 20533 - 11904: 0xD0DA,
+ 20535 - 11904: 0xD0D2,
+ 20539 - 11904: 0x8C40,
+ 20540 - 11904: 0xADC8,
+ 20544 - 11904: 0xD463,
+ 20545 - 11904: 0xD457,
+ 20547 - 11904: 0xB0B3,
+ 20549 - 11904: 0xD45C,
+ 20550 - 11904: 0xD462,
+ 20551 - 11904: 0xB0B2,
+ 20552 - 11904: 0xD455,
+ 20553 - 11904: 0xB0B6,
+ 20554 - 11904: 0xD459,
+ 20555 - 11904: 0xD452,
+ 20556 - 11904: 0xB0B4,
+ 20557 - 11904: 0xD456,
+ 20558 - 11904: 0xB0B9,
+ 20559 - 11904: 0xB0BE,
+ 20561 - 11904: 0xD467,
+ 20563 - 11904: 0xD451,
+ 20565 - 11904: 0xB0BA,
+ 20566 - 11904: 0x9F73,
+ 20567 - 11904: 0xD466,
+ 20568 - 11904: 0x92AD,
+ 20570 - 11904: 0xB0B5,
+ 20571 - 11904: 0xD458,
+ 20572 - 11904: 0xB0B1,
+ 20573 - 11904: 0xD453,
+ 20574 - 11904: 0xD44F,
+ 20575 - 11904: 0xD45D,
+ 20576 - 11904: 0xD450,
+ 20577 - 11904: 0xD44E,
+ 20578 - 11904: 0xD45A,
+ 20579 - 11904: 0xD460,
+ 20580 - 11904: 0xD461,
+ 20581 - 11904: 0xB0B7,
+ 20582 - 11904: 0x9BE9,
+ 20584 - 11904: 0xD85B,
+ 20585 - 11904: 0xD45E,
+ 20586 - 11904: 0xD44D,
+ 20587 - 11904: 0xD45F,
+ 20588 - 11904: 0x92A9,
+ 20589 - 11904: 0xB0C1,
+ 20590 - 11904: 0xD464,
+ 20591 - 11904: 0xB0C0,
+ 20592 - 11904: 0xD44C,
+ 20594 - 11904: 0xD454,
+ 20595 - 11904: 0xD465,
+ 20596 - 11904: 0xB0BC,
+ 20597 - 11904: 0xB0BB,
+ 20598 - 11904: 0xB0B8,
+ 20599 - 11904: 0xB0BD,
+ 20602 - 11904: 0xB0AF,
+ 20605 - 11904: 0xFA66,
+ 20608 - 11904: 0xB3C8,
+ 20609 - 11904: 0x92AA,
+ 20610 - 11904: 0xD85E,
+ 20611 - 11904: 0xD857,
+ 20613 - 11904: 0xB3C5,
+ 20615 - 11904: 0xD85F,
+ 20616 - 11904: 0x89D9,
+ 20619 - 11904: 0xD855,
+ 20620 - 11904: 0xD858,
+ 20621 - 11904: 0xB3C4,
+ 20622 - 11904: 0xD859,
+ 20624 - 11904: 0xFD56,
+ 20625 - 11904: 0xB3C7,
+ 20626 - 11904: 0xD85D,
+ 20628 - 11904: 0xD853,
+ 20629 - 11904: 0xD852,
+ 20630 - 11904: 0xB3C9,
+ 20632 - 11904: 0xB3CA,
+ 20633 - 11904: 0xB3C6,
+ 20634 - 11904: 0xB3CB,
+ 20635 - 11904: 0xD851,
+ 20636 - 11904: 0xD85C,
+ 20637 - 11904: 0xD85A,
+ 20638 - 11904: 0xD854,
+ 20642 - 11904: 0xB3C3,
+ 20643 - 11904: 0xD856,
+ 20646 - 11904: 0x9FA8,
+ 20652 - 11904: 0xB6CA,
+ 20653 - 11904: 0xB6C4,
+ 20654 - 11904: 0xDCB7,
+ 20655 - 11904: 0xB6CD,
+ 20656 - 11904: 0xDCBD,
+ 20657 - 11904: 0xDCC0,
+ 20658 - 11904: 0xB6C6,
+ 20659 - 11904: 0xB6C7,
+ 20660 - 11904: 0xDCBA,
+ 20661 - 11904: 0xB6C5,
+ 20662 - 11904: 0xDCC3,
+ 20663 - 11904: 0xB6CB,
+ 20664 - 11904: 0xDCC4,
+ 20666 - 11904: 0xDCBF,
+ 20667 - 11904: 0xB6CC,
+ 20668 - 11904: 0x8C71,
+ 20669 - 11904: 0xDCB4,
+ 20670 - 11904: 0xB6C9,
+ 20671 - 11904: 0xDCB5,
+ 20673 - 11904: 0xDCBE,
+ 20674 - 11904: 0xDCBC,
+ 20676 - 11904: 0xDCB8,
+ 20677 - 11904: 0xB6C8,
+ 20678 - 11904: 0xDCB6,
+ 20679 - 11904: 0xB6CE,
+ 20680 - 11904: 0xDCBB,
+ 20681 - 11904: 0xDCC2,
+ 20682 - 11904: 0xDCB9,
+ 20683 - 11904: 0xDCC1,
+ 20685 - 11904: 0x92A1,
+ 20686 - 11904: 0xB9B6,
+ 20687 - 11904: 0xB9B3,
+ 20688 - 11904: 0x90E3,
+ 20689 - 11904: 0xB9B4,
+ 20691 - 11904: 0xE0F9,
+ 20692 - 11904: 0xE0F1,
+ 20693 - 11904: 0xB9B2,
+ 20694 - 11904: 0xB9AF,
+ 20695 - 11904: 0xE0F2,
+ 20697 - 11904: 0xA0A6,
+ 20698 - 11904: 0xB9B1,
+ 20699 - 11904: 0xE0F5,
+ 20701 - 11904: 0xE0F7,
+ 20703 - 11904: 0x94AB,
+ 20704 - 11904: 0xE0FE,
+ 20705 - 11904: 0xFC72,
+ 20707 - 11904: 0xE0FD,
+ 20708 - 11904: 0xE0F8,
+ 20709 - 11904: 0xB9AE,
+ 20710 - 11904: 0xE0F0,
+ 20711 - 11904: 0xB9AC,
+ 20712 - 11904: 0xE0F3,
+ 20713 - 11904: 0xB9B7,
+ 20714 - 11904: 0xE0F6,
+ 20716 - 11904: 0xE0FA,
+ 20717 - 11904: 0xB9B0,
+ 20718 - 11904: 0xB9AD,
+ 20719 - 11904: 0xE0FC,
+ 20720 - 11904: 0xE0FB,
+ 20721 - 11904: 0xB9B5,
+ 20723 - 11904: 0xE0F4,
+ 20724 - 11904: 0x97C4,
+ 20725 - 11904: 0xBBF8,
+ 20726 - 11904: 0xE4EC,
+ 20728 - 11904: 0xE4E9,
+ 20729 - 11904: 0xBBF9,
+ 20731 - 11904: 0xBBF7,
+ 20732 - 11904: 0x92AE,
+ 20733 - 11904: 0xE4F0,
+ 20734 - 11904: 0xE4ED,
+ 20735 - 11904: 0xE4E6,
+ 20736 - 11904: 0xBBF6,
+ 20737 - 11904: 0xFA67,
+ 20738 - 11904: 0xBBFA,
+ 20739 - 11904: 0xE4E7,
+ 20740 - 11904: 0xBBF5,
+ 20741 - 11904: 0xBBFD,
+ 20742 - 11904: 0xE4EA,
+ 20743 - 11904: 0xE4EB,
+ 20744 - 11904: 0xBBFB,
+ 20745 - 11904: 0xBBFC,
+ 20746 - 11904: 0xE4F1,
+ 20747 - 11904: 0xE4EE,
+ 20748 - 11904: 0xE4EF,
+ 20749 - 11904: 0x92A2,
+ 20750 - 11904: 0xFA69,
+ 20752 - 11904: 0xBEAA,
+ 20753 - 11904: 0xE8F8,
+ 20754 - 11904: 0xBEA7,
+ 20755 - 11904: 0xE8F5,
+ 20756 - 11904: 0xBEA9,
+ 20757 - 11904: 0xBEAB,
+ 20759 - 11904: 0xE8F6,
+ 20760 - 11904: 0xBEA8,
+ 20762 - 11904: 0xE8F7,
+ 20764 - 11904: 0xE8F4,
+ 20767 - 11904: 0xC076,
+ 20768 - 11904: 0xECBD,
+ 20769 - 11904: 0xC077,
+ 20770 - 11904: 0xECBB,
+ 20772 - 11904: 0xECBC,
+ 20773 - 11904: 0xECBA,
+ 20774 - 11904: 0xECB9,
+ 20777 - 11904: 0xECBE,
+ 20778 - 11904: 0xC075,
+ 20779 - 11904: 0x9268,
+ 20781 - 11904: 0xEFB8,
+ 20782 - 11904: 0xEFB9,
+ 20784 - 11904: 0xE4E8,
+ 20785 - 11904: 0xEFB7,
+ 20786 - 11904: 0xC078,
+ 20787 - 11904: 0xC35F,
+ 20788 - 11904: 0xF1EB,
+ 20789 - 11904: 0xF1EC,
+ 20791 - 11904: 0xC4D7,
+ 20792 - 11904: 0xC4D8,
+ 20793 - 11904: 0xF5C1,
+ 20794 - 11904: 0xF5C0,
+ 20795 - 11904: 0xC56C,
+ 20796 - 11904: 0xC56B,
+ 20797 - 11904: 0xF7D0,
+ 20799 - 11904: 0xA449,
+ 20800 - 11904: 0xA461,
+ 20801 - 11904: 0xA4B9,
+ 20803 - 11904: 0xA4B8,
+ 20804 - 11904: 0xA553,
+ 20805 - 11904: 0xA552,
+ 20806 - 11904: 0xA5FC,
+ 20807 - 11904: 0xA5FB,
+ 20808 - 11904: 0xA5FD,
+ 20809 - 11904: 0xA5FA,
+ 20811 - 11904: 0xA74A,
+ 20812 - 11904: 0xA749,
+ 20813 - 11904: 0xA74B,
+ 20818 - 11904: 0xA8E0,
+ 20820 - 11904: 0xA8DF,
+ 20821 - 11904: 0xA8E1,
+ 20822 - 11904: 0x8951,
+ 20823 - 11904: 0xAB5E,
+ 20825 - 11904: 0xA259,
+ 20826 - 11904: 0xD0DE,
+ 20827 - 11904: 0xA25A,
+ 20828 - 11904: 0xB0C2,
+ 20829 - 11904: 0xA25C,
+ 20830 - 11904: 0xA25B,
+ 20831 - 11904: 0xD860,
+ 20832 - 11904: 0xFA6F,
+ 20833 - 11904: 0xA25D,
+ 20834 - 11904: 0xB9B8,
+ 20835 - 11904: 0xA25E,
+ 20837 - 11904: 0xA44A,
+ 20839 - 11904: 0xA4BA,
+ 20840 - 11904: 0xA5FE,
+ 20841 - 11904: 0xA8E2,
+ 20842 - 11904: 0xFA71,
+ 20843 - 11904: 0xA44B,
+ 20844 - 11904: 0xA4BD,
+ 20845 - 11904: 0xA4BB,
+ 20846 - 11904: 0xA4BC,
+ 20849 - 11904: 0xA640,
+ 20852 - 11904: 0x8952,
+ 20853 - 11904: 0xA74C,
+ 20854 - 11904: 0xA8E4,
+ 20855 - 11904: 0xA8E3,
+ 20856 - 11904: 0xA8E5,
+ 20857 - 11904: 0x945A,
+ 20860 - 11904: 0xADDD,
+ 20864 - 11904: 0xBEAC,
+ 20866 - 11904: 0xC6C3,
+ 20870 - 11904: 0x89DD,
+ 20871 - 11904: 0xC94E,
+ 20872 - 11904: 0xC8A2,
+ 20873 - 11904: 0xA554,
+ 20874 - 11904: 0xA555,
+ 20877 - 11904: 0xA641,
+ 20879 - 11904: 0xCA6A,
+ 20881 - 11904: 0xAB60,
+ 20882 - 11904: 0xAB5F,
+ 20883 - 11904: 0xD0E0,
+ 20884 - 11904: 0xD0DF,
+ 20885 - 11904: 0xB0C3,
+ 20886 - 11904: 0xC6C4,
+ 20887 - 11904: 0xA4BE,
+ 20888 - 11904: 0xC955,
+ 20890 - 11904: 0x9E52,
+ 20892 - 11904: 0x8953,
+ 20894 - 11904: 0xCBCD,
+ 20896 - 11904: 0xAB61,
+ 20898 - 11904: 0xADE0,
+ 20900 - 11904: 0xADDE,
+ 20901 - 11904: 0xADDF,
+ 20903 - 11904: 0x9E55,
+ 20904 - 11904: 0x92BA,
+ 20906 - 11904: 0xBEAD,
+ 20907 - 11904: 0xC6C5,
+ 20908 - 11904: 0xA556,
+ 20910 - 11904: 0x8C5B,
+ 20912 - 11904: 0xA642,
+ 20913 - 11904: 0xC9BC,
+ 20914 - 11904: 0xFA7D,
+ 20915 - 11904: 0xFAA8,
+ 20916 - 11904: 0x9A68,
+ 20917 - 11904: 0xFA47,
+ 20918 - 11904: 0xA74D,
+ 20919 - 11904: 0xA74E,
+ 20920 - 11904: 0xFA7E,
+ 20921 - 11904: 0xCA6B,
+ 20924 - 11904: 0xCBCE,
+ 20925 - 11904: 0xA8E6,
+ 20926 - 11904: 0xCBCF,
+ 20931 - 11904: 0x92BB,
+ 20932 - 11904: 0xD0E2,
+ 20933 - 11904: 0xD0E3,
+ 20934 - 11904: 0xADE3,
+ 20935 - 11904: 0xFDB6,
+ 20936 - 11904: 0xD0E4,
+ 20937 - 11904: 0xFAA2,
+ 20938 - 11904: 0xD0E1,
+ 20939 - 11904: 0xADE4,
+ 20940 - 11904: 0xADE2,
+ 20941 - 11904: 0xADE1,
+ 20942 - 11904: 0xD0E5,
+ 20943 - 11904: 0xFAA3,
+ 20944 - 11904: 0xD468,
+ 20945 - 11904: 0xFAA4,
+ 20946 - 11904: 0x9BB4,
+ 20947 - 11904: 0xFAA6,
+ 20948 - 11904: 0xD861,
+ 20951 - 11904: 0xDCC5,
+ 20952 - 11904: 0xE140,
+ 20955 - 11904: 0x89DF,
+ 20956 - 11904: 0xBBFE,
+ 20957 - 11904: 0xBEAE,
+ 20958 - 11904: 0xE8F9,
+ 20959 - 11904: 0xFDDB,
+ 20960 - 11904: 0xA44C,
+ 20961 - 11904: 0xA45A,
+ 20962 - 11904: 0xFAA9,
+ 20964 - 11904: 0x8954,
+ 20973 - 11904: 0xFAAB,
+ 20976 - 11904: 0xB0C4,
+ 20977 - 11904: 0xB3CD,
+ 20979 - 11904: 0xB9B9,
+ 20980 - 11904: 0xFC7A,
+ 20981 - 11904: 0xC942,
+ 20982 - 11904: 0xA4BF,
+ 20984 - 11904: 0xA559,
+ 20985 - 11904: 0xA557,
+ 20986 - 11904: 0xA558,
+ 20988 - 11904: 0x89E0,
+ 20989 - 11904: 0xA8E7,
+ 20990 - 11904: 0x9F4F,
+ 20992 - 11904: 0xA44D,
+ 20993 - 11904: 0xA44E,
+ 20994 - 11904: 0xC87D,
+ 20995 - 11904: 0xA462,
+ 20997 - 11904: 0x89E1,
+ 20998 - 11904: 0xA4C0,
+ 20999 - 11904: 0xA4C1,
+ 21000 - 11904: 0xA4C2,
+ 21001 - 11904: 0xC9BE,
+ 21002 - 11904: 0xA55A,
+ 21003 - 11904: 0xFAB0,
+ 21004 - 11904: 0xC96B,
+ 21006 - 11904: 0xA646,
+ 21008 - 11904: 0xC9BF,
+ 21009 - 11904: 0xA644,
+ 21010 - 11904: 0xA645,
+ 21011 - 11904: 0xC9BD,
+ 21014 - 11904: 0xA647,
+ 21015 - 11904: 0xA643,
+ 21020 - 11904: 0xCA6C,
+ 21021 - 11904: 0xAAEC,
+ 21022 - 11904: 0xCA6D,
+ 21023 - 11904: 0x9FCD,
+ 21024 - 11904: 0xA0E7,
+ 21025 - 11904: 0xCA6E,
+ 21028 - 11904: 0xA750,
+ 21029 - 11904: 0xA74F,
+ 21030 - 11904: 0xFAB1,
+ 21031 - 11904: 0x89A6,
+ 21032 - 11904: 0xA753,
+ 21033 - 11904: 0xA751,
+ 21034 - 11904: 0xA752,
+ 21038 - 11904: 0xA8ED,
+ 21040 - 11904: 0xA8EC,
+ 21041 - 11904: 0xCBD4,
+ 21042 - 11904: 0xCBD1,
+ 21043 - 11904: 0xCBD2,
+ 21044 - 11904: 0x9EFA,
+ 21045 - 11904: 0xCBD0,
+ 21046 - 11904: 0xA8EE,
+ 21047 - 11904: 0xA8EA,
+ 21048 - 11904: 0xA8E9,
+ 21050 - 11904: 0xA8EB,
+ 21051 - 11904: 0xA8E8,
+ 21052 - 11904: 0xFAB2,
+ 21057 - 11904: 0xA8EF,
+ 21059 - 11904: 0xAB63,
+ 21060 - 11904: 0xCDF0,
+ 21062 - 11904: 0xCBD3,
+ 21063 - 11904: 0xAB68,
+ 21065 - 11904: 0xCDF1,
+ 21066 - 11904: 0xAB64,
+ 21067 - 11904: 0xAB67,
+ 21068 - 11904: 0xAB66,
+ 21069 - 11904: 0xAB65,
+ 21070 - 11904: 0xAB62,
+ 21071 - 11904: 0x87BC,
+ 21074 - 11904: 0xD0E8,
+ 21076 - 11904: 0xADE7,
+ 21077 - 11904: 0xD0EB,
+ 21078 - 11904: 0xADE5,
+ 21079 - 11904: 0xFAB4,
+ 21081 - 11904: 0x92C4,
+ 21082 - 11904: 0xD0E7,
+ 21083 - 11904: 0xADE8,
+ 21084 - 11904: 0xADE6,
+ 21085 - 11904: 0xADE9,
+ 21086 - 11904: 0xD0E9,
+ 21087 - 11904: 0xD0EA,
+ 21088 - 11904: 0x9F6F,
+ 21089 - 11904: 0xD0E6,
+ 21090 - 11904: 0xD0EC,
+ 21096 - 11904: 0x8BB0,
+ 21097 - 11904: 0xB3D1,
+ 21098 - 11904: 0xB0C5,
+ 21099 - 11904: 0xD469,
+ 21100 - 11904: 0xD46B,
+ 21101 - 11904: 0xD46A,
+ 21102 - 11904: 0xD46C,
+ 21103 - 11904: 0xB0C6,
+ 21106 - 11904: 0xB3CE,
+ 21107 - 11904: 0x9FAC,
+ 21108 - 11904: 0xB3CF,
+ 21109 - 11904: 0xB3D0,
+ 21111 - 11904: 0xB6D0,
+ 21112 - 11904: 0xDCC7,
+ 21113 - 11904: 0x89E3,
+ 21114 - 11904: 0xDCC6,
+ 21115 - 11904: 0xDCC8,
+ 21116 - 11904: 0xDCC9,
+ 21117 - 11904: 0xB6D1,
+ 21119 - 11904: 0xB6CF,
+ 21120 - 11904: 0xE141,
+ 21121 - 11904: 0xE142,
+ 21122 - 11904: 0xB9BB,
+ 21123 - 11904: 0xB9BA,
+ 21124 - 11904: 0xE35A,
+ 21127 - 11904: 0xBC40,
+ 21128 - 11904: 0xBC41,
+ 21129 - 11904: 0xBC42,
+ 21130 - 11904: 0xBC44,
+ 21131 - 11904: 0xE4F2,
+ 21132 - 11904: 0xE4F3,
+ 21133 - 11904: 0xBC43,
+ 21135 - 11904: 0x9BD3,
+ 21136 - 11904: 0x89E4,
+ 21137 - 11904: 0xBEAF,
+ 21139 - 11904: 0xBEB0,
+ 21140 - 11904: 0xFAB5,
+ 21142 - 11904: 0xF1ED,
+ 21143 - 11904: 0xF5C3,
+ 21144 - 11904: 0xF5C2,
+ 21145 - 11904: 0xF7D1,
+ 21146 - 11904: 0x9FD5,
+ 21147 - 11904: 0xA44F,
+ 21151 - 11904: 0xA55C,
+ 21152 - 11904: 0xA55B,
+ 21153 - 11904: 0x8955,
+ 21155 - 11904: 0xA648,
+ 21156 - 11904: 0x92C5,
+ 21158 - 11904: 0xC9C0,
+ 21160 - 11904: 0x8956,
+ 21161 - 11904: 0xA755,
+ 21162 - 11904: 0xA756,
+ 21163 - 11904: 0xA754,
+ 21164 - 11904: 0xA757,
+ 21165 - 11904: 0xCA6F,
+ 21166 - 11904: 0xCA70,
+ 21173 - 11904: 0xFAB3,
+ 21177 - 11904: 0xFAB6,
+ 21179 - 11904: 0xA8F1,
+ 21180 - 11904: 0xCBD5,
+ 21182 - 11904: 0xA8F0,
+ 21184 - 11904: 0xCDF2,
+ 21185 - 11904: 0xAB6C,
+ 21186 - 11904: 0xCDF3,
+ 21187 - 11904: 0xAB6B,
+ 21189 - 11904: 0xFAB7,
+ 21191 - 11904: 0xAB69,
+ 21193 - 11904: 0xAB6A,
+ 21196 - 11904: 0x9EDC,
+ 21197 - 11904: 0xD0ED,
+ 21200 - 11904: 0xFBC4,
+ 21201 - 11904: 0x9F71,
+ 21202 - 11904: 0xB0C7,
+ 21203 - 11904: 0xD46E,
+ 21205 - 11904: 0xB0CA,
+ 21206 - 11904: 0xD46D,
+ 21207 - 11904: 0xB1E5,
+ 21208 - 11904: 0xB0C9,
+ 21209 - 11904: 0xB0C8,
+ 21211 - 11904: 0xB3D4,
+ 21213 - 11904: 0xB3D3,
+ 21214 - 11904: 0xB3D2,
+ 21215 - 11904: 0xB6D2,
+ 21216 - 11904: 0xFABA,
+ 21217 - 11904: 0x92C7,
+ 21218 - 11904: 0xB6D5,
+ 21219 - 11904: 0xB6D6,
+ 21220 - 11904: 0xB6D4,
+ 21222 - 11904: 0xB6D3,
+ 21225 - 11904: 0xE143,
+ 21227 - 11904: 0xE144,
+ 21231 - 11904: 0xE4F5,
+ 21232 - 11904: 0xBC45,
+ 21233 - 11904: 0xE4F4,
+ 21235 - 11904: 0xBEB1,
+ 21236 - 11904: 0xECBF,
+ 21237 - 11904: 0xC079,
+ 21239 - 11904: 0xF1EE,
+ 21240 - 11904: 0xC455,
+ 21241 - 11904: 0xC6C6,
+ 21242 - 11904: 0xA463,
+ 21243 - 11904: 0xA4C3,
+ 21244 - 11904: 0xC956,
+ 21246 - 11904: 0xA4C4,
+ 21247 - 11904: 0xA4C5,
+ 21249 - 11904: 0x9A4C,
+ 21253 - 11904: 0xFABD,
+ 21254 - 11904: 0xA55E,
+ 21256 - 11904: 0xA649,
+ 21257 - 11904: 0xCA71,
+ 21258 - 11904: 0xCBD6,
+ 21259 - 11904: 0xCBD7,
+ 21261 - 11904: 0xAB6D,
+ 21262 - 11904: 0xD0EE,
+ 21263 - 11904: 0xB0CC,
+ 21264 - 11904: 0xB0CB,
+ 21265 - 11904: 0xD863,
+ 21266 - 11904: 0xD862,
+ 21269 - 11904: 0xA450,
+ 21270 - 11904: 0xA4C6,
+ 21271 - 11904: 0xA55F,
+ 21273 - 11904: 0xB0CD,
+ 21274 - 11904: 0xC943,
+ 21276 - 11904: 0xC96C,
+ 21277 - 11904: 0xA560,
+ 21279 - 11904: 0xC9C2,
+ 21280 - 11904: 0xA64B,
+ 21281 - 11904: 0xA64A,
+ 21282 - 11904: 0xC9C1,
+ 21283 - 11904: 0xA758,
+ 21284 - 11904: 0x8C68,
+ 21287 - 11904: 0x89E5,
+ 21290 - 11904: 0xADEA,
+ 21292 - 11904: 0x9F7D,
+ 21293 - 11904: 0xD46F,
+ 21295 - 11904: 0xB6D7,
+ 21296 - 11904: 0xE145,
+ 21297 - 11904: 0xB9BC,
+ 21298 - 11904: 0xA0A9,
+ 21299 - 11904: 0xFAC4,
+ 21300 - 11904: 0xE8FA,
+ 21303 - 11904: 0xF3FD,
+ 21304 - 11904: 0xC6C7,
+ 21305 - 11904: 0xA4C7,
+ 21307 - 11904: 0x8957,
+ 21308 - 11904: 0xCBD8,
+ 21309 - 11904: 0xCDF4,
+ 21310 - 11904: 0xB0D0,
+ 21311 - 11904: 0xB0CE,
+ 21312 - 11904: 0xB0CF,
+ 21313 - 11904: 0xA451,
+ 21314 - 11904: 0xFAAA,
+ 21315 - 11904: 0xA464,
+ 21316 - 11904: 0xFAC5,
+ 21317 - 11904: 0xA4CA,
+ 21319 - 11904: 0xA4C9,
+ 21320 - 11904: 0xA4C8,
+ 21321 - 11904: 0xA563,
+ 21322 - 11904: 0xA562,
+ 21324 - 11904: 0xC96D,
+ 21325 - 11904: 0xC9C3,
+ 21326 - 11904: 0x8958,
+ 21329 - 11904: 0xA8F5,
+ 21330 - 11904: 0xA8F2,
+ 21331 - 11904: 0xA8F4,
+ 21332 - 11904: 0xA8F3,
+ 21335 - 11904: 0xAB6E,
+ 21338 - 11904: 0xB3D5,
+ 21340 - 11904: 0xA452,
+ 21341 - 11904: 0x8BE3,
+ 21342 - 11904: 0xA4CB,
+ 21343 - 11904: 0x8B61,
+ 21344 - 11904: 0xA565,
+ 21345 - 11904: 0xA564,
+ 21347 - 11904: 0xCA72,
+ 21348 - 11904: 0x9AF1,
+ 21350 - 11904: 0xA8F6,
+ 21351 - 11904: 0x9EB7,
+ 21353 - 11904: 0xC6C8,
+ 21356 - 11904: 0xC957,
+ 21357 - 11904: 0xFAD1,
+ 21358 - 11904: 0xA567,
+ 21359 - 11904: 0xA566,
+ 21360 - 11904: 0xA64C,
+ 21361 - 11904: 0xA64D,
+ 21362 - 11904: 0xCA73,
+ 21363 - 11904: 0xA759,
+ 21364 - 11904: 0xFAD2,
+ 21365 - 11904: 0xA75A,
+ 21367 - 11904: 0xA8F7,
+ 21368 - 11904: 0xA8F8,
+ 21369 - 11904: 0xA8F9,
+ 21371 - 11904: 0xAB6F,
+ 21372 - 11904: 0xCDF5,
+ 21373 - 11904: 0x9EBA,
+ 21374 - 11904: 0xFAD4,
+ 21375 - 11904: 0xFAD5,
+ 21378 - 11904: 0xC944,
+ 21380 - 11904: 0xA4CC,
+ 21386 - 11904: 0xC9C4,
+ 21390 - 11904: 0xCA74,
+ 21391 - 11904: 0xCA75,
+ 21394 - 11904: 0xCBD9,
+ 21395 - 11904: 0xFAD9,
+ 21396 - 11904: 0xCBDA,
+ 21398 - 11904: 0xCDF7,
+ 21399 - 11904: 0xCDF6,
+ 21400 - 11904: 0xCDF9,
+ 21401 - 11904: 0xCDF8,
+ 21402 - 11904: 0xAB70,
+ 21404 - 11904: 0xD470,
+ 21405 - 11904: 0xADED,
+ 21406 - 11904: 0xD0EF,
+ 21407 - 11904: 0xADEC,
+ 21408 - 11904: 0xFADB,
+ 21410 - 11904: 0x9CE0,
+ 21412 - 11904: 0xD864,
+ 21413 - 11904: 0xB3D6,
+ 21414 - 11904: 0xFBF7,
+ 21415 - 11904: 0xD865,
+ 21416 - 11904: 0xFBFA,
+ 21417 - 11904: 0x89E7,
+ 21418 - 11904: 0xA07A,
+ 21419 - 11904: 0xFADC,
+ 21420 - 11904: 0xE146,
+ 21421 - 11904: 0xB9BD,
+ 21422 - 11904: 0xFADD,
+ 21424 - 11904: 0x89E9,
+ 21426 - 11904: 0xBC46,
+ 21428 - 11904: 0xF1EF,
+ 21430 - 11904: 0xC6C9,
+ 21433 - 11904: 0xC958,
+ 21435 - 11904: 0xA568,
+ 21441 - 11904: 0xFAE2,
+ 21442 - 11904: 0x89EB,
+ 21443 - 11904: 0xB0D1,
+ 21445 - 11904: 0xFAE3,
+ 21448 - 11904: 0xA453,
+ 21449 - 11904: 0xA465,
+ 21450 - 11904: 0xA4CE,
+ 21451 - 11904: 0xA4CD,
+ 21452 - 11904: 0x90C8,
+ 21453 - 11904: 0xA4CF,
+ 21456 - 11904: 0x92DA,
+ 21457 - 11904: 0x8959,
+ 21458 - 11904: 0x9CF5,
+ 21460 - 11904: 0xA8FB,
+ 21462 - 11904: 0xA8FA,
+ 21463 - 11904: 0xA8FC,
+ 21464 - 11904: 0x895A,
+ 21465 - 11904: 0xFAE7,
+ 21466 - 11904: 0x9FA2,
+ 21467 - 11904: 0xAB71,
+ 21471 - 11904: 0xADEE,
+ 21472 - 11904: 0xFAEA,
+ 21473 - 11904: 0xE8FB,
+ 21474 - 11904: 0xC24F,
+ 21475 - 11904: 0xA466,
+ 21476 - 11904: 0xA56A,
+ 21477 - 11904: 0xA579,
+ 21478 - 11904: 0xA574,
+ 21480 - 11904: 0xA56F,
+ 21481 - 11904: 0xA56E,
+ 21482 - 11904: 0xA575,
+ 21483 - 11904: 0xA573,
+ 21484 - 11904: 0xA56C,
+ 21485 - 11904: 0xA57A,
+ 21486 - 11904: 0xA56D,
+ 21487 - 11904: 0xA569,
+ 21488 - 11904: 0xA578,
+ 21489 - 11904: 0xA577,
+ 21490 - 11904: 0xA576,
+ 21491 - 11904: 0xA56B,
+ 21493 - 11904: 0xA572,
+ 21494 - 11904: 0xFAED,
+ 21495 - 11904: 0x8FAD,
+ 21496 - 11904: 0xA571,
+ 21499 - 11904: 0xA57B,
+ 21500 - 11904: 0xA570,
+ 21502 - 11904: 0xFB59,
+ 21505 - 11904: 0xA653,
+ 21507 - 11904: 0xA659,
+ 21508 - 11904: 0xA655,
+ 21510 - 11904: 0xA65B,
+ 21511 - 11904: 0xC9C5,
+ 21512 - 11904: 0xA658,
+ 21513 - 11904: 0xA64E,
+ 21514 - 11904: 0xA651,
+ 21515 - 11904: 0xA654,
+ 21516 - 11904: 0xA650,
+ 21517 - 11904: 0xA657,
+ 21518 - 11904: 0xA65A,
+ 21519 - 11904: 0xA64F,
+ 21520 - 11904: 0xA652,
+ 21521 - 11904: 0xA656,
+ 21522 - 11904: 0xA65C,
+ 21523 - 11904: 0xFAEF,
+ 21524 - 11904: 0x96EF,
+ 21526 - 11904: 0x9DEC,
+ 21528 - 11904: 0xCA7E,
+ 21529 - 11904: 0xCA7B,
+ 21530 - 11904: 0x9DCA,
+ 21531 - 11904: 0xA767,
+ 21532 - 11904: 0xCA7C,
+ 21533 - 11904: 0xA75B,
+ 21534 - 11904: 0xA75D,
+ 21535 - 11904: 0xA775,
+ 21536 - 11904: 0xA770,
+ 21537 - 11904: 0xFD6D,
+ 21539 - 11904: 0x89EC,
+ 21540 - 11904: 0xCAA5,
+ 21541 - 11904: 0xCA7D,
+ 21542 - 11904: 0xA75F,
+ 21543 - 11904: 0xA761,
+ 21544 - 11904: 0xCAA4,
+ 21545 - 11904: 0xA768,
+ 21546 - 11904: 0xCA78,
+ 21547 - 11904: 0xA774,
+ 21548 - 11904: 0xA776,
+ 21549 - 11904: 0xA75C,
+ 21550 - 11904: 0xA76D,
+ 21551 - 11904: 0xFB44,
+ 21552 - 11904: 0xCA76,
+ 21553 - 11904: 0xA773,
+ 21554 - 11904: 0x9DE2,
+ 21555 - 11904: 0xA764,
+ 21556 - 11904: 0x8C75,
+ 21557 - 11904: 0xA76E,
+ 21558 - 11904: 0xA76F,
+ 21559 - 11904: 0xCA77,
+ 21560 - 11904: 0xA76C,
+ 21561 - 11904: 0xA76A,
+ 21563 - 11904: 0xA76B,
+ 21564 - 11904: 0xA771,
+ 21565 - 11904: 0xCAA1,
+ 21566 - 11904: 0xA75E,
+ 21568 - 11904: 0xA772,
+ 21569 - 11904: 0xCAA3,
+ 21570 - 11904: 0xA766,
+ 21571 - 11904: 0xA763,
+ 21573 - 11904: 0xCA7A,
+ 21574 - 11904: 0xA762,
+ 21575 - 11904: 0xCAA6,
+ 21576 - 11904: 0xA765,
+ 21578 - 11904: 0xA769,
+ 21579 - 11904: 0x9EC0,
+ 21580 - 11904: 0x87C5,
+ 21581 - 11904: 0x9E56,
+ 21582 - 11904: 0xA760,
+ 21583 - 11904: 0xCAA2,
+ 21588 - 11904: 0xCA79,
+ 21600 - 11904: 0xCBEB,
+ 21601 - 11904: 0xCBEA,
+ 21602 - 11904: 0xA94F,
+ 21603 - 11904: 0xCBED,
+ 21604 - 11904: 0xCBEF,
+ 21605 - 11904: 0xCBE4,
+ 21606 - 11904: 0xCBE7,
+ 21607 - 11904: 0xCBEE,
+ 21608 - 11904: 0xA950,
+ 21609 - 11904: 0x9F79,
+ 21610 - 11904: 0x9AC7,
+ 21611 - 11904: 0xCBE1,
+ 21612 - 11904: 0xCBE5,
+ 21613 - 11904: 0xFAF4,
+ 21615 - 11904: 0xCBE9,
+ 21616 - 11904: 0xCE49,
+ 21617 - 11904: 0xA94B,
+ 21618 - 11904: 0xCE4D,
+ 21619 - 11904: 0xA8FD,
+ 21620 - 11904: 0xCBE6,
+ 21621 - 11904: 0xA8FE,
+ 21622 - 11904: 0xA94C,
+ 21623 - 11904: 0xA945,
+ 21624 - 11904: 0xA941,
+ 21626 - 11904: 0xCBE2,
+ 21627 - 11904: 0xA944,
+ 21628 - 11904: 0xA949,
+ 21629 - 11904: 0xA952,
+ 21630 - 11904: 0xCBE3,
+ 21631 - 11904: 0xCBDC,
+ 21632 - 11904: 0xA943,
+ 21633 - 11904: 0xCBDD,
+ 21634 - 11904: 0xCBDF,
+ 21636 - 11904: 0xA946,
+ 21637 - 11904: 0x98A1,
+ 21638 - 11904: 0xA948,
+ 21639 - 11904: 0xCBDB,
+ 21640 - 11904: 0xCBE0,
+ 21643 - 11904: 0xA951,
+ 21644 - 11904: 0xA94D,
+ 21645 - 11904: 0xCBE8,
+ 21646 - 11904: 0xA953,
+ 21647 - 11904: 0xFAF8,
+ 21648 - 11904: 0xA94A,
+ 21649 - 11904: 0xCBDE,
+ 21650 - 11904: 0xA947,
+ 21651 - 11904: 0x89F0,
+ 21652 - 11904: 0x9E47,
+ 21653 - 11904: 0xA942,
+ 21654 - 11904: 0xA940,
+ 21655 - 11904: 0x9DF7,
+ 21656 - 11904: 0xCBEC,
+ 21658 - 11904: 0xA94E,
+ 21660 - 11904: 0x9FD3,
+ 21662 - 11904: 0x9ACA,
+ 21664 - 11904: 0xCE48,
+ 21665 - 11904: 0xCDFB,
+ 21666 - 11904: 0xCE4B,
+ 21667 - 11904: 0x89F1,
+ 21668 - 11904: 0xFAF9,
+ 21669 - 11904: 0xCDFD,
+ 21670 - 11904: 0xAB78,
+ 21671 - 11904: 0xABA8,
+ 21672 - 11904: 0xAB74,
+ 21673 - 11904: 0xABA7,
+ 21674 - 11904: 0xAB7D,
+ 21675 - 11904: 0xABA4,
+ 21676 - 11904: 0xAB72,
+ 21677 - 11904: 0xCDFC,
+ 21678 - 11904: 0xCE43,
+ 21679 - 11904: 0xABA3,
+ 21680 - 11904: 0xCE4F,
+ 21681 - 11904: 0xABA5,
+ 21682 - 11904: 0x8E5A,
+ 21683 - 11904: 0xAB79,
+ 21684 - 11904: 0x89F2,
+ 21686 - 11904: 0xCE45,
+ 21687 - 11904: 0xCE42,
+ 21688 - 11904: 0xAB77,
+ 21689 - 11904: 0x89F3,
+ 21690 - 11904: 0xCDFA,
+ 21691 - 11904: 0xABA6,
+ 21692 - 11904: 0xCE4A,
+ 21693 - 11904: 0xAB7C,
+ 21694 - 11904: 0xCE4C,
+ 21695 - 11904: 0xABA9,
+ 21696 - 11904: 0xAB73,
+ 21697 - 11904: 0xAB7E,
+ 21698 - 11904: 0xAB7B,
+ 21699 - 11904: 0xCE40,
+ 21700 - 11904: 0xABA1,
+ 21701 - 11904: 0xCE46,
+ 21702 - 11904: 0xCE47,
+ 21703 - 11904: 0xAB7A,
+ 21704 - 11904: 0xABA2,
+ 21705 - 11904: 0xAB76,
+ 21707 - 11904: 0x925D,
+ 21708 - 11904: 0x8B51,
+ 21709 - 11904: 0x92E0,
+ 21710 - 11904: 0xAB75,
+ 21711 - 11904: 0xCDFE,
+ 21712 - 11904: 0x89F4,
+ 21718 - 11904: 0xCE44,
+ 21722 - 11904: 0x9FD4,
+ 21726 - 11904: 0xCE4E,
+ 21728 - 11904: 0xD144,
+ 21729 - 11904: 0xADFB,
+ 21730 - 11904: 0xD0F1,
+ 21731 - 11904: 0x8A79,
+ 21732 - 11904: 0xD0F6,
+ 21733 - 11904: 0xADF4,
+ 21734 - 11904: 0xAE40,
+ 21735 - 11904: 0xD0F4,
+ 21736 - 11904: 0xADEF,
+ 21737 - 11904: 0xADF9,
+ 21738 - 11904: 0xADFE,
+ 21739 - 11904: 0xD0FB,
+ 21741 - 11904: 0xADFA,
+ 21742 - 11904: 0xADFD,
+ 21743 - 11904: 0x89F5,
+ 21745 - 11904: 0xD0FE,
+ 21746 - 11904: 0xADF5,
+ 21747 - 11904: 0xD0F5,
+ 21751 - 11904: 0xD142,
+ 21752 - 11904: 0xD143,
+ 21754 - 11904: 0xADF7,
+ 21755 - 11904: 0xD141,
+ 21756 - 11904: 0xADF3,
+ 21757 - 11904: 0xAE43,
+ 21759 - 11904: 0xD0F8,
+ 21761 - 11904: 0xADF1,
+ 21762 - 11904: 0x97A7,
+ 21763 - 11904: 0xD146,
+ 21764 - 11904: 0xD0F9,
+ 21765 - 11904: 0xD0FD,
+ 21766 - 11904: 0xADF6,
+ 21767 - 11904: 0xAE42,
+ 21768 - 11904: 0xD0FA,
+ 21769 - 11904: 0xADFC,
+ 21770 - 11904: 0xD140,
+ 21771 - 11904: 0xD147,
+ 21772 - 11904: 0xD4A1,
+ 21773 - 11904: 0x93BA,
+ 21774 - 11904: 0xD145,
+ 21775 - 11904: 0xAE44,
+ 21776 - 11904: 0xADF0,
+ 21777 - 11904: 0xD0FC,
+ 21778 - 11904: 0xD0F3,
+ 21779 - 11904: 0x9E58,
+ 21780 - 11904: 0xADF8,
+ 21783 - 11904: 0xD0F2,
+ 21784 - 11904: 0x89F6,
+ 21786 - 11904: 0xD0F7,
+ 21790 - 11904: 0x9E57,
+ 21795 - 11904: 0x89F7,
+ 21797 - 11904: 0x8A41,
+ 21798 - 11904: 0xD0F0,
+ 21799 - 11904: 0xAE41,
+ 21800 - 11904: 0x89F8,
+ 21802 - 11904: 0xD477,
+ 21803 - 11904: 0xFAF1,
+ 21804 - 11904: 0xB0E4,
+ 21805 - 11904: 0xD4A7,
+ 21806 - 11904: 0xB0E2,
+ 21807 - 11904: 0xB0DF,
+ 21808 - 11904: 0xD47C,
+ 21809 - 11904: 0xB0DB,
+ 21810 - 11904: 0xD4A2,
+ 21811 - 11904: 0xB0E6,
+ 21812 - 11904: 0xD476,
+ 21813 - 11904: 0xD47B,
+ 21814 - 11904: 0xD47A,
+ 21815 - 11904: 0xADF2,
+ 21816 - 11904: 0xB0E1,
+ 21817 - 11904: 0xD4A5,
+ 21819 - 11904: 0xD4A8,
+ 21820 - 11904: 0xD473,
+ 21822 - 11904: 0xB3E8,
+ 21823 - 11904: 0x89FA,
+ 21824 - 11904: 0xD4A9,
+ 21825 - 11904: 0xB0E7,
+ 21827 - 11904: 0xB0D9,
+ 21828 - 11904: 0xB0D6,
+ 21829 - 11904: 0xD47E,
+ 21830 - 11904: 0xB0D3,
+ 21831 - 11904: 0xFB42,
+ 21832 - 11904: 0xD4A6,
+ 21833 - 11904: 0xFABF,
+ 21834 - 11904: 0xB0DA,
+ 21835 - 11904: 0xD4AA,
+ 21837 - 11904: 0xD474,
+ 21838 - 11904: 0xD4A4,
+ 21839 - 11904: 0xB0DD,
+ 21840 - 11904: 0xD475,
+ 21841 - 11904: 0xD478,
+ 21842 - 11904: 0xD47D,
+ 21843 - 11904: 0xFBA3,
+ 21845 - 11904: 0xB0DE,
+ 21846 - 11904: 0xB0DC,
+ 21847 - 11904: 0xB0E8,
+ 21852 - 11904: 0xB0E3,
+ 21853 - 11904: 0xFAF7,
+ 21854 - 11904: 0xB0D7,
+ 21855 - 11904: 0xB1D2,
+ 21857 - 11904: 0xB0D8,
+ 21858 - 11904: 0xD479,
+ 21859 - 11904: 0xB0E5,
+ 21860 - 11904: 0xB0E0,
+ 21861 - 11904: 0xD4A3,
+ 21862 - 11904: 0xB0D5,
+ 21865 - 11904: 0x9E4E,
+ 21866 - 11904: 0xB0D4,
+ 21867 - 11904: 0x94DC,
+ 21873 - 11904: 0x95DA,
+ 21874 - 11904: 0x9DF8,
+ 21875 - 11904: 0x9F6A,
+ 21877 - 11904: 0xD471,
+ 21878 - 11904: 0xD472,
+ 21879 - 11904: 0xD86A,
+ 21881 - 11904: 0x8AB7,
+ 21883 - 11904: 0xB3D7,
+ 21884 - 11904: 0xB3DA,
+ 21885 - 11904: 0xD875,
+ 21886 - 11904: 0xB3EE,
+ 21887 - 11904: 0xD878,
+ 21888 - 11904: 0xB3D8,
+ 21889 - 11904: 0xD871,
+ 21890 - 11904: 0xB3DE,
+ 21891 - 11904: 0xB3E4,
+ 21892 - 11904: 0xB5BD,
+ 21894 - 11904: 0xFB46,
+ 21895 - 11904: 0xB3E2,
+ 21896 - 11904: 0xD86E,
+ 21897 - 11904: 0xB3EF,
+ 21898 - 11904: 0xB3DB,
+ 21899 - 11904: 0xB3E3,
+ 21900 - 11904: 0xD876,
+ 21901 - 11904: 0xDCD7,
+ 21902 - 11904: 0xD87B,
+ 21903 - 11904: 0xD86F,
+ 21904 - 11904: 0x8A46,
+ 21905 - 11904: 0xD866,
+ 21906 - 11904: 0xD873,
+ 21907 - 11904: 0xD86D,
+ 21908 - 11904: 0xB3E1,
+ 21909 - 11904: 0xD879,
+ 21912 - 11904: 0xB3DD,
+ 21913 - 11904: 0xB3F1,
+ 21914 - 11904: 0xB3EA,
+ 21916 - 11904: 0xB3DF,
+ 21917 - 11904: 0xB3DC,
+ 21919 - 11904: 0xB3E7,
+ 21921 - 11904: 0xD87A,
+ 21922 - 11904: 0xD86C,
+ 21923 - 11904: 0xD872,
+ 21924 - 11904: 0xD874,
+ 21925 - 11904: 0xD868,
+ 21926 - 11904: 0xD877,
+ 21927 - 11904: 0xB3D9,
+ 21928 - 11904: 0xD867,
+ 21929 - 11904: 0xFB47,
+ 21930 - 11904: 0xB3E0,
+ 21931 - 11904: 0xB3F0,
+ 21932 - 11904: 0xB3EC,
+ 21933 - 11904: 0xD869,
+ 21934 - 11904: 0xB3E6,
+ 21936 - 11904: 0x9148,
+ 21937 - 11904: 0xB3ED,
+ 21938 - 11904: 0xB3E9,
+ 21939 - 11904: 0xB3E5,
+ 21940 - 11904: 0x92DE,
+ 21941 - 11904: 0xD870,
+ 21945 - 11904: 0x8B53,
+ 21946 - 11904: 0x9DF6,
+ 21947 - 11904: 0xB3EB,
+ 21948 - 11904: 0x9BDA,
+ 21951 - 11904: 0xDCD5,
+ 21952 - 11904: 0xDCD1,
+ 21953 - 11904: 0x9D7E,
+ 21954 - 11904: 0xDCE0,
+ 21955 - 11904: 0xDCCA,
+ 21956 - 11904: 0xDCD3,
+ 21957 - 11904: 0xB6E5,
+ 21958 - 11904: 0xB6E6,
+ 21959 - 11904: 0xB6DE,
+ 21960 - 11904: 0xDCDC,
+ 21961 - 11904: 0xB6E8,
+ 21962 - 11904: 0xDCCF,
+ 21963 - 11904: 0xDCCE,
+ 21964 - 11904: 0xDCCC,
+ 21965 - 11904: 0xDCDE,
+ 21966 - 11904: 0xB6DC,
+ 21967 - 11904: 0xDCD8,
+ 21968 - 11904: 0xDCCD,
+ 21969 - 11904: 0xB6DF,
+ 21970 - 11904: 0xDCD6,
+ 21971 - 11904: 0xB6DA,
+ 21972 - 11904: 0xDCD2,
+ 21973 - 11904: 0xDCD9,
+ 21974 - 11904: 0xDCDB,
+ 21975 - 11904: 0x89FD,
+ 21976 - 11904: 0x99E4,
+ 21977 - 11904: 0xDCDF,
+ 21978 - 11904: 0xB6E3,
+ 21979 - 11904: 0xDCCB,
+ 21980 - 11904: 0xB6DD,
+ 21981 - 11904: 0xDCD0,
+ 21982 - 11904: 0x9E43,
+ 21983 - 11904: 0xB6D8,
+ 21985 - 11904: 0xB6E4,
+ 21986 - 11904: 0xDCDA,
+ 21987 - 11904: 0xB6E0,
+ 21988 - 11904: 0xB6E1,
+ 21989 - 11904: 0xB6E7,
+ 21990 - 11904: 0xB6DB,
+ 21991 - 11904: 0xA25F,
+ 21992 - 11904: 0xB6D9,
+ 21993 - 11904: 0xDCD4,
+ 21994 - 11904: 0x9DE9,
+ 21996 - 11904: 0x8F52,
+ 21999 - 11904: 0xB6E2,
+ 22000 - 11904: 0x9DF5,
+ 22001 - 11904: 0x9DF0,
+ 22002 - 11904: 0xDCDD,
+ 22005 - 11904: 0x99E7,
+ 22006 - 11904: 0xB9CD,
+ 22007 - 11904: 0xB9C8,
+ 22009 - 11904: 0xE155,
+ 22010 - 11904: 0xE151,
+ 22011 - 11904: 0x8BBD,
+ 22012 - 11904: 0xE14B,
+ 22013 - 11904: 0xB9C2,
+ 22014 - 11904: 0xB9BE,
+ 22015 - 11904: 0xE154,
+ 22016 - 11904: 0xB9BF,
+ 22017 - 11904: 0xE14E,
+ 22018 - 11904: 0xE150,
+ 22020 - 11904: 0xE153,
+ 22021 - 11904: 0xFB48,
+ 22022 - 11904: 0xB9C4,
+ 22024 - 11904: 0xB9CB,
+ 22025 - 11904: 0xB9C5,
+ 22028 - 11904: 0xE149,
+ 22029 - 11904: 0xB9C6,
+ 22030 - 11904: 0xB9C7,
+ 22031 - 11904: 0xE14C,
+ 22032 - 11904: 0xB9CC,
+ 22033 - 11904: 0x9FB7,
+ 22034 - 11904: 0xE14A,
+ 22035 - 11904: 0xE14F,
+ 22036 - 11904: 0xB9C3,
+ 22037 - 11904: 0xE148,
+ 22038 - 11904: 0xB9C9,
+ 22039 - 11904: 0xB9C1,
+ 22043 - 11904: 0xB9C0,
+ 22044 - 11904: 0xE14D,
+ 22045 - 11904: 0xE152,
+ 22046 - 11904: 0x9DD0,
+ 22047 - 11904: 0xB9CA,
+ 22048 - 11904: 0x9FEB,
+ 22049 - 11904: 0x8DA9,
+ 22050 - 11904: 0x9DCF,
+ 22051 - 11904: 0x98E1,
+ 22053 - 11904: 0x9DE5,
+ 22055 - 11904: 0xE147,
+ 22057 - 11904: 0xBC4D,
+ 22058 - 11904: 0xE547,
+ 22060 - 11904: 0xE544,
+ 22061 - 11904: 0x9DC8,
+ 22062 - 11904: 0xBC47,
+ 22063 - 11904: 0xBC53,
+ 22064 - 11904: 0xBC54,
+ 22066 - 11904: 0xBC4A,
+ 22067 - 11904: 0xE542,
+ 22068 - 11904: 0xBC4C,
+ 22069 - 11904: 0xE4F9,
+ 22070 - 11904: 0xBC52,
+ 22071 - 11904: 0xFB4F,
+ 22072 - 11904: 0xE546,
+ 22073 - 11904: 0xBC49,
+ 22074 - 11904: 0xE548,
+ 22075 - 11904: 0xBC48,
+ 22077 - 11904: 0xE543,
+ 22078 - 11904: 0xE545,
+ 22079 - 11904: 0xBC4B,
+ 22080 - 11904: 0xE541,
+ 22081 - 11904: 0xE4FA,
+ 22082 - 11904: 0xE4F7,
+ 22083 - 11904: 0x9DEB,
+ 22085 - 11904: 0xD86B,
+ 22086 - 11904: 0xE4FD,
+ 22088 - 11904: 0xE4F6,
+ 22089 - 11904: 0xE4FC,
+ 22090 - 11904: 0xE4FB,
+ 22092 - 11904: 0xE4F8,
+ 22093 - 11904: 0xFB54,
+ 22094 - 11904: 0xBC4F,
+ 22095 - 11904: 0xFB55,
+ 22096 - 11904: 0x9AA2,
+ 22098 - 11904: 0x8AD6,
+ 22099 - 11904: 0xBC4E,
+ 22100 - 11904: 0x9A5F,
+ 22103 - 11904: 0xBC50,
+ 22104 - 11904: 0xE4FE,
+ 22105 - 11904: 0xBEB2,
+ 22106 - 11904: 0xE540,
+ 22109 - 11904: 0x9EF5,
+ 22110 - 11904: 0xE945,
+ 22112 - 11904: 0xE8FD,
+ 22113 - 11904: 0x8FB7,
+ 22114 - 11904: 0xBEBE,
+ 22115 - 11904: 0xE942,
+ 22116 - 11904: 0xBEB6,
+ 22117 - 11904: 0xBEBA,
+ 22118 - 11904: 0xE941,
+ 22120 - 11904: 0xBEB9,
+ 22121 - 11904: 0xBEB5,
+ 22122 - 11904: 0xBEB8,
+ 22123 - 11904: 0xBEB3,
+ 22124 - 11904: 0xBEBD,
+ 22125 - 11904: 0xE943,
+ 22126 - 11904: 0xE8FE,
+ 22127 - 11904: 0xBEBC,
+ 22128 - 11904: 0xE8FC,
+ 22129 - 11904: 0xBEBB,
+ 22130 - 11904: 0xE944,
+ 22131 - 11904: 0xE940,
+ 22132 - 11904: 0xBC51,
+ 22134 - 11904: 0xBEBF,
+ 22135 - 11904: 0xE946,
+ 22136 - 11904: 0xBEB7,
+ 22137 - 11904: 0xBEB4,
+ 22138 - 11904: 0x9AD2,
+ 22139 - 11904: 0x9E6A,
+ 22140 - 11904: 0x9EE8,
+ 22142 - 11904: 0xECC6,
+ 22143 - 11904: 0xECC8,
+ 22144 - 11904: 0xC07B,
+ 22145 - 11904: 0xECC9,
+ 22146 - 11904: 0xECC7,
+ 22147 - 11904: 0xECC5,
+ 22148 - 11904: 0xECC4,
+ 22149 - 11904: 0xC07D,
+ 22150 - 11904: 0xECC3,
+ 22151 - 11904: 0xC07E,
+ 22153 - 11904: 0x8BBF,
+ 22154 - 11904: 0x91C2,
+ 22155 - 11904: 0x9D62,
+ 22156 - 11904: 0xECC1,
+ 22157 - 11904: 0xECC2,
+ 22158 - 11904: 0xC07A,
+ 22159 - 11904: 0xC0A1,
+ 22160 - 11904: 0xC07C,
+ 22162 - 11904: 0x9260,
+ 22163 - 11904: 0xECC0,
+ 22165 - 11904: 0xC250,
+ 22167 - 11904: 0xEFBC,
+ 22168 - 11904: 0xEFBA,
+ 22169 - 11904: 0xEFBF,
+ 22170 - 11904: 0xEFBD,
+ 22172 - 11904: 0xEFBB,
+ 22173 - 11904: 0xEFBE,
+ 22174 - 11904: 0x925E,
+ 22175 - 11904: 0x91C1,
+ 22177 - 11904: 0x8AC5,
+ 22180 - 11904: 0x97A3,
+ 22181 - 11904: 0xC360,
+ 22182 - 11904: 0xF1F2,
+ 22183 - 11904: 0xF1F3,
+ 22184 - 11904: 0xC456,
+ 22186 - 11904: 0xF1F4,
+ 22187 - 11904: 0xF1F0,
+ 22188 - 11904: 0xF1F5,
+ 22189 - 11904: 0xF1F1,
+ 22190 - 11904: 0xC251,
+ 22191 - 11904: 0x8B6C,
+ 22193 - 11904: 0x8D7E,
+ 22194 - 11904: 0xF3FE,
+ 22195 - 11904: 0xF441,
+ 22196 - 11904: 0xC459,
+ 22197 - 11904: 0xF440,
+ 22198 - 11904: 0xC458,
+ 22199 - 11904: 0xC457,
+ 22201 - 11904: 0x9C54,
+ 22204 - 11904: 0xC45A,
+ 22205 - 11904: 0xF5C5,
+ 22206 - 11904: 0xF5C6,
+ 22207 - 11904: 0x9DBD,
+ 22208 - 11904: 0xC4DA,
+ 22209 - 11904: 0xC4D9,
+ 22210 - 11904: 0xC4DB,
+ 22211 - 11904: 0xF5C4,
+ 22213 - 11904: 0xF6D8,
+ 22214 - 11904: 0xF6D7,
+ 22216 - 11904: 0xC56D,
+ 22217 - 11904: 0xC56F,
+ 22218 - 11904: 0xC56E,
+ 22219 - 11904: 0xF6D9,
+ 22220 - 11904: 0xC5C8,
+ 22221 - 11904: 0xF8A6,
+ 22225 - 11904: 0xC5F1,
+ 22227 - 11904: 0xF8A5,
+ 22228 - 11904: 0xF8EE,
+ 22230 - 11904: 0x9CC5,
+ 22231 - 11904: 0xC949,
+ 22234 - 11904: 0xA57D,
+ 22235 - 11904: 0xA57C,
+ 22237 - 11904: 0xA65F,
+ 22238 - 11904: 0xA65E,
+ 22239 - 11904: 0xC9C7,
+ 22240 - 11904: 0xA65D,
+ 22241 - 11904: 0xC9C6,
+ 22242 - 11904: 0x895B,
+ 22244 - 11904: 0xA779,
+ 22245 - 11904: 0xCAA9,
+ 22247 - 11904: 0xCAA8,
+ 22250 - 11904: 0xA777,
+ 22251 - 11904: 0xA77A,
+ 22253 - 11904: 0xFB5C,
+ 22254 - 11904: 0xCAA7,
+ 22255 - 11904: 0xFB5B,
+ 22256 - 11904: 0xA778,
+ 22257 - 11904: 0xFB57,
+ 22263 - 11904: 0xCBF0,
+ 22265 - 11904: 0xCBF1,
+ 22266 - 11904: 0xA954,
+ 22267 - 11904: 0x8765,
+ 22269 - 11904: 0x98C7,
+ 22271 - 11904: 0xABAA,
+ 22272 - 11904: 0xFB5A,
+ 22273 - 11904: 0xD148,
+ 22274 - 11904: 0xD149,
+ 22275 - 11904: 0xAE45,
+ 22276 - 11904: 0xAE46,
+ 22279 - 11904: 0xD4AC,
+ 22280 - 11904: 0xB0E9,
+ 22281 - 11904: 0xB0EB,
+ 22282 - 11904: 0xD4AB,
+ 22283 - 11904: 0xB0EA,
+ 22284 - 11904: 0xD87C,
+ 22285 - 11904: 0xB3F2,
+ 22290 - 11904: 0xB6E9,
+ 22291 - 11904: 0xB6EA,
+ 22292 - 11904: 0xDCE1,
+ 22293 - 11904: 0x9CEE,
+ 22294 - 11904: 0xB9CF,
+ 22296 - 11904: 0xB9CE,
+ 22298 - 11904: 0xE549,
+ 22299 - 11904: 0xE948,
+ 22300 - 11904: 0xE947,
+ 22301 - 11904: 0x92E2,
+ 22302 - 11904: 0xF96B,
+ 22303 - 11904: 0xA467,
+ 22304 - 11904: 0xC959,
+ 22306 - 11904: 0xC96E,
+ 22307 - 11904: 0xC96F,
+ 22312 - 11904: 0xA662,
+ 22313 - 11904: 0xA666,
+ 22314 - 11904: 0xC9C9,
+ 22316 - 11904: 0xA664,
+ 22317 - 11904: 0xA663,
+ 22318 - 11904: 0xC9C8,
+ 22319 - 11904: 0xA665,
+ 22320 - 11904: 0xA661,
+ 22322 - 11904: 0x94A7,
+ 22323 - 11904: 0xA660,
+ 22324 - 11904: 0xC9CA,
+ 22331 - 11904: 0xA7A6,
+ 22333 - 11904: 0x8CCC,
+ 22334 - 11904: 0xA7A3,
+ 22335 - 11904: 0x9BD4,
+ 22336 - 11904: 0xA77D,
+ 22337 - 11904: 0xCAAA,
+ 22338 - 11904: 0xFB64,
+ 22339 - 11904: 0xFB76,
+ 22341 - 11904: 0xCAAB,
+ 22342 - 11904: 0xFB60,
+ 22343 - 11904: 0xA7A1,
+ 22345 - 11904: 0xCAAD,
+ 22346 - 11904: 0xA77B,
+ 22347 - 11904: 0xCAAE,
+ 22348 - 11904: 0xCAAC,
+ 22349 - 11904: 0xA77E,
+ 22350 - 11904: 0xA7A2,
+ 22351 - 11904: 0xA7A5,
+ 22352 - 11904: 0xA7A4,
+ 22353 - 11904: 0xA77C,
+ 22354 - 11904: 0xCAAF,
+ 22356 - 11904: 0x99E5,
+ 22359 - 11904: 0x9AC2,
+ 22363 - 11904: 0x91FB,
+ 22367 - 11904: 0xA073,
+ 22369 - 11904: 0xA959,
+ 22370 - 11904: 0xCBFE,
+ 22372 - 11904: 0xA95B,
+ 22374 - 11904: 0xA95A,
+ 22375 - 11904: 0x9F72,
+ 22376 - 11904: 0xCC40,
+ 22377 - 11904: 0xA958,
+ 22378 - 11904: 0xA957,
+ 22379 - 11904: 0xCBF5,
+ 22381 - 11904: 0xCBF4,
+ 22383 - 11904: 0xCBF2,
+ 22384 - 11904: 0xCBF7,
+ 22385 - 11904: 0xCBF6,
+ 22386 - 11904: 0xCBF3,
+ 22387 - 11904: 0xCBFC,
+ 22388 - 11904: 0xCBFD,
+ 22389 - 11904: 0xCBFA,
+ 22390 - 11904: 0xCBF8,
+ 22391 - 11904: 0xA956,
+ 22394 - 11904: 0x9FCC,
+ 22395 - 11904: 0xCBFB,
+ 22396 - 11904: 0xA95C,
+ 22397 - 11904: 0xCC41,
+ 22398 - 11904: 0x98A5,
+ 22399 - 11904: 0x92E8,
+ 22400 - 11904: 0xCBF9,
+ 22402 - 11904: 0xABAB,
+ 22403 - 11904: 0xA955,
+ 22408 - 11904: 0x9BBC,
+ 22410 - 11904: 0x96F3,
+ 22411 - 11904: 0xABAC,
+ 22412 - 11904: 0xCE54,
+ 22413 - 11904: 0x92E7,
+ 22415 - 11904: 0xCE5A,
+ 22416 - 11904: 0xFC67,
+ 22419 - 11904: 0xABB2,
+ 22420 - 11904: 0xCE58,
+ 22421 - 11904: 0xCE5E,
+ 22423 - 11904: 0xCE55,
+ 22424 - 11904: 0xCE59,
+ 22425 - 11904: 0xCE5B,
+ 22426 - 11904: 0xCE5D,
+ 22427 - 11904: 0xCE57,
+ 22428 - 11904: 0x8B7D,
+ 22429 - 11904: 0xCE56,
+ 22430 - 11904: 0xCE51,
+ 22431 - 11904: 0xCE52,
+ 22432 - 11904: 0xABAD,
+ 22433 - 11904: 0x9BF4,
+ 22434 - 11904: 0xABAF,
+ 22435 - 11904: 0xABAE,
+ 22436 - 11904: 0xCE53,
+ 22437 - 11904: 0xCE5C,
+ 22439 - 11904: 0x9EF7,
+ 22442 - 11904: 0x9EC1,
+ 22446 - 11904: 0xABB1,
+ 22451 - 11904: 0x87C3,
+ 22452 - 11904: 0x996F,
+ 22453 - 11904: 0xCE50,
+ 22454 - 11904: 0xD153,
+ 22456 - 11904: 0xD152,
+ 22457 - 11904: 0xD157,
+ 22458 - 11904: 0xD14E,
+ 22459 - 11904: 0x96F1,
+ 22460 - 11904: 0xD151,
+ 22461 - 11904: 0xD150,
+ 22462 - 11904: 0x8E41,
+ 22463 - 11904: 0xD154,
+ 22465 - 11904: 0xD158,
+ 22466 - 11904: 0xAE47,
+ 22467 - 11904: 0xAE4A,
+ 22468 - 11904: 0x954A,
+ 22470 - 11904: 0xD14F,
+ 22471 - 11904: 0xD155,
+ 22472 - 11904: 0x97E6,
+ 22475 - 11904: 0xAE49,
+ 22476 - 11904: 0xD14A,
+ 22478 - 11904: 0xABB0,
+ 22479 - 11904: 0xD4BA,
+ 22480 - 11904: 0xD156,
+ 22482 - 11904: 0xD14D,
+ 22484 - 11904: 0xAE48,
+ 22485 - 11904: 0xD14C,
+ 22487 - 11904: 0x96F5,
+ 22492 - 11904: 0xD4B1,
+ 22493 - 11904: 0x92E6,
+ 22494 - 11904: 0x9F42,
+ 22495 - 11904: 0xB0EC,
+ 22496 - 11904: 0xB0F0,
+ 22497 - 11904: 0xD4C1,
+ 22498 - 11904: 0xD4AF,
+ 22499 - 11904: 0xD4BD,
+ 22500 - 11904: 0xB0F1,
+ 22501 - 11904: 0xD4BF,
+ 22502 - 11904: 0xFB67,
+ 22503 - 11904: 0xD4C5,
+ 22505 - 11904: 0xD4C9,
+ 22508 - 11904: 0xD4C0,
+ 22509 - 11904: 0xD4B4,
+ 22510 - 11904: 0xD4BC,
+ 22511 - 11904: 0x99A9,
+ 22512 - 11904: 0xD4CA,
+ 22513 - 11904: 0xD4C8,
+ 22514 - 11904: 0xD4BE,
+ 22515 - 11904: 0xD4B9,
+ 22516 - 11904: 0xD4B2,
+ 22517 - 11904: 0xD8A6,
+ 22518 - 11904: 0xD4B0,
+ 22519 - 11904: 0xB0F5,
+ 22520 - 11904: 0xD4B7,
+ 22521 - 11904: 0xB0F6,
+ 22522 - 11904: 0xB0F2,
+ 22523 - 11904: 0xD4AD,
+ 22524 - 11904: 0xD4C3,
+ 22525 - 11904: 0xD4B5,
+ 22526 - 11904: 0xFAE6,
+ 22528 - 11904: 0xD4B3,
+ 22529 - 11904: 0xD4C6,
+ 22530 - 11904: 0xB0F3,
+ 22531 - 11904: 0xFB69,
+ 22532 - 11904: 0xD4CC,
+ 22533 - 11904: 0xB0ED,
+ 22534 - 11904: 0xB0EF,
+ 22535 - 11904: 0xD4BB,
+ 22536 - 11904: 0xD4B6,
+ 22537 - 11904: 0xAE4B,
+ 22538 - 11904: 0xB0EE,
+ 22539 - 11904: 0xD4B8,
+ 22540 - 11904: 0xD4C7,
+ 22541 - 11904: 0xD4CB,
+ 22542 - 11904: 0xD4C2,
+ 22544 - 11904: 0xD4C4,
+ 22546 - 11904: 0x97E5,
+ 22548 - 11904: 0xD4AE,
+ 22552 - 11904: 0x87C8,
+ 22553 - 11904: 0xD8A1,
+ 22555 - 11904: 0xD8AA,
+ 22556 - 11904: 0xD8A9,
+ 22557 - 11904: 0xB3FA,
+ 22558 - 11904: 0xD8A2,
+ 22560 - 11904: 0xB3FB,
+ 22561 - 11904: 0xB3F9,
+ 22562 - 11904: 0x967D,
+ 22563 - 11904: 0xD8A4,
+ 22564 - 11904: 0xB3F6,
+ 22565 - 11904: 0xD8A8,
+ 22566 - 11904: 0xFB6C,
+ 22567 - 11904: 0xD8A3,
+ 22568 - 11904: 0xD8A5,
+ 22569 - 11904: 0xD87D,
+ 22570 - 11904: 0xB3F4,
+ 22572 - 11904: 0xD8B2,
+ 22573 - 11904: 0xD8B1,
+ 22574 - 11904: 0xD8AE,
+ 22575 - 11904: 0xB3F3,
+ 22576 - 11904: 0xB3F7,
+ 22577 - 11904: 0xB3F8,
+ 22578 - 11904: 0xD14B,
+ 22579 - 11904: 0xD8AB,
+ 22580 - 11904: 0xB3F5,
+ 22581 - 11904: 0xB0F4,
+ 22582 - 11904: 0xD8AD,
+ 22583 - 11904: 0xD87E,
+ 22584 - 11904: 0xD8B0,
+ 22585 - 11904: 0xD8AF,
+ 22586 - 11904: 0x99A2,
+ 22587 - 11904: 0xD8B3,
+ 22589 - 11904: 0xDCEF,
+ 22591 - 11904: 0xD8AC,
+ 22592 - 11904: 0x9ABB,
+ 22596 - 11904: 0x9A65,
+ 22599 - 11904: 0x944E,
+ 22600 - 11904: 0xD8A7,
+ 22601 - 11904: 0xDCE7,
+ 22602 - 11904: 0xB6F4,
+ 22603 - 11904: 0xB6F7,
+ 22604 - 11904: 0xB6F2,
+ 22605 - 11904: 0xDCE6,
+ 22606 - 11904: 0xDCEA,
+ 22607 - 11904: 0xDCE5,
+ 22609 - 11904: 0xB6EC,
+ 22610 - 11904: 0xB6F6,
+ 22611 - 11904: 0xDCE2,
+ 22612 - 11904: 0xB6F0,
+ 22613 - 11904: 0xDCE9,
+ 22615 - 11904: 0xB6EE,
+ 22616 - 11904: 0xB6ED,
+ 22617 - 11904: 0xDCEC,
+ 22618 - 11904: 0xB6EF,
+ 22619 - 11904: 0xDCEE,
+ 22620 - 11904: 0xFB6E,
+ 22621 - 11904: 0xDCEB,
+ 22622 - 11904: 0xB6EB,
+ 22623 - 11904: 0x99DF,
+ 22626 - 11904: 0xB6F5,
+ 22627 - 11904: 0xDCF0,
+ 22628 - 11904: 0xDCE4,
+ 22629 - 11904: 0xDCED,
+ 22632 - 11904: 0xDCE3,
+ 22633 - 11904: 0x98E3,
+ 22635 - 11904: 0xB6F1,
+ 22636 - 11904: 0x9254,
+ 22637 - 11904: 0xB6F3,
+ 22639 - 11904: 0xDCE8,
+ 22641 - 11904: 0xDCF1,
+ 22642 - 11904: 0x967B,
+ 22643 - 11904: 0x8AAF,
+ 22644 - 11904: 0xE15D,
+ 22645 - 11904: 0xB9D0,
+ 22646 - 11904: 0xE163,
+ 22649 - 11904: 0xB9D5,
+ 22650 - 11904: 0xE15F,
+ 22651 - 11904: 0xE166,
+ 22652 - 11904: 0xE157,
+ 22653 - 11904: 0xB9D7,
+ 22654 - 11904: 0xB9D1,
+ 22655 - 11904: 0xE15C,
+ 22656 - 11904: 0xBC55,
+ 22657 - 11904: 0xE15B,
+ 22658 - 11904: 0xE164,
+ 22659 - 11904: 0xB9D2,
+ 22661 - 11904: 0xB9D6,
+ 22662 - 11904: 0xE15A,
+ 22663 - 11904: 0xE160,
+ 22664 - 11904: 0xE165,
+ 22665 - 11904: 0xE156,
+ 22666 - 11904: 0xB9D4,
+ 22667 - 11904: 0xE15E,
+ 22670 - 11904: 0xE162,
+ 22671 - 11904: 0xE168,
+ 22672 - 11904: 0xE158,
+ 22673 - 11904: 0xE161,
+ 22674 - 11904: 0x8C77,
+ 22675 - 11904: 0xB9D3,
+ 22676 - 11904: 0xE167,
+ 22678 - 11904: 0x87B0,
+ 22680 - 11904: 0xE159,
+ 22681 - 11904: 0x8BAF,
+ 22682 - 11904: 0x9EBD,
+ 22684 - 11904: 0xBC59,
+ 22685 - 11904: 0xE54B,
+ 22686 - 11904: 0xBC57,
+ 22687 - 11904: 0xBC56,
+ 22688 - 11904: 0xE54D,
+ 22689 - 11904: 0xE552,
+ 22691 - 11904: 0xE54E,
+ 22693 - 11904: 0xE551,
+ 22694 - 11904: 0xBC5C,
+ 22695 - 11904: 0x9EE6,
+ 22696 - 11904: 0xBEA5,
+ 22697 - 11904: 0xBC5B,
+ 22698 - 11904: 0xFB6F,
+ 22699 - 11904: 0xE54A,
+ 22700 - 11904: 0xE550,
+ 22702 - 11904: 0xBC5A,
+ 22703 - 11904: 0xE54F,
+ 22704 - 11904: 0x8EE1,
+ 22705 - 11904: 0xE54C,
+ 22707 - 11904: 0xBC58,
+ 22709 - 11904: 0x9B7D,
+ 22710 - 11904: 0x9C7E,
+ 22714 - 11904: 0xE94D,
+ 22715 - 11904: 0xF9D9,
+ 22716 - 11904: 0xE94F,
+ 22717 - 11904: 0xE94A,
+ 22718 - 11904: 0xBEC1,
+ 22719 - 11904: 0xE94C,
+ 22721 - 11904: 0xBEC0,
+ 22722 - 11904: 0xE94E,
+ 22725 - 11904: 0xBEC3,
+ 22726 - 11904: 0xE950,
+ 22727 - 11904: 0xBEC2,
+ 22728 - 11904: 0xE949,
+ 22729 - 11904: 0xE94B,
+ 22731 - 11904: 0x92EA,
+ 22734 - 11904: 0xC0A5,
+ 22735 - 11904: 0xECCC,
+ 22736 - 11904: 0x8C78,
+ 22737 - 11904: 0xC0A4,
+ 22738 - 11904: 0xECCD,
+ 22739 - 11904: 0xC0A3,
+ 22740 - 11904: 0xECCB,
+ 22741 - 11904: 0xC0A2,
+ 22742 - 11904: 0xECCA,
+ 22744 - 11904: 0xC253,
+ 22745 - 11904: 0xC252,
+ 22746 - 11904: 0xF1F6,
+ 22747 - 11904: 0xF1F8,
+ 22748 - 11904: 0xFB72,
+ 22749 - 11904: 0xF1F7,
+ 22750 - 11904: 0xC361,
+ 22751 - 11904: 0xC362,
+ 22752 - 11904: 0xFB71,
+ 22754 - 11904: 0xC363,
+ 22755 - 11904: 0xF442,
+ 22756 - 11904: 0xC45B,
+ 22759 - 11904: 0xF7D3,
+ 22760 - 11904: 0xF7D2,
+ 22761 - 11904: 0xC5F2,
+ 22763 - 11904: 0xA468,
+ 22764 - 11904: 0xA4D0,
+ 22767 - 11904: 0xA7A7,
+ 22768 - 11904: 0x895C,
+ 22770 - 11904: 0x98F0,
+ 22771 - 11904: 0x96F2,
+ 22772 - 11904: 0xCE5F,
+ 22777 - 11904: 0xB3FC,
+ 22778 - 11904: 0xB3FD,
+ 22779 - 11904: 0xFB74,
+ 22780 - 11904: 0xDCF2,
+ 22781 - 11904: 0xB9D8,
+ 22782 - 11904: 0xE169,
+ 22783 - 11904: 0xE553,
+ 22786 - 11904: 0x8BC1,
+ 22787 - 11904: 0xC95A,
+ 22788 - 11904: 0x895D,
+ 22789 - 11904: 0x89DE,
+ 22790 - 11904: 0xCAB0,
+ 22791 - 11904: 0x895E,
+ 22794 - 11904: 0xC6CA,
+ 22796 - 11904: 0xCC42,
+ 22797 - 11904: 0xCE60,
+ 22798 - 11904: 0xD159,
+ 22799 - 11904: 0xAE4C,
+ 22801 - 11904: 0xFE42,
+ 22802 - 11904: 0xF1F9,
+ 22804 - 11904: 0xC4DC,
+ 22805 - 11904: 0xA469,
+ 22806 - 11904: 0xA57E,
+ 22807 - 11904: 0xC970,
+ 22809 - 11904: 0xA667,
+ 22810 - 11904: 0xA668,
+ 22812 - 11904: 0xA95D,
+ 22813 - 11904: 0x8768,
+ 22815 - 11904: 0xFB7B,
+ 22816 - 11904: 0xB0F7,
+ 22818 - 11904: 0xB9DA,
+ 22820 - 11904: 0xB9DB,
+ 22821 - 11904: 0xB9D9,
+ 22823 - 11904: 0xA46A,
+ 22825 - 11904: 0xA4D1,
+ 22826 - 11904: 0xA4D3,
+ 22827 - 11904: 0xA4D2,
+ 22828 - 11904: 0xC95B,
+ 22829 - 11904: 0xA4D4,
+ 22830 - 11904: 0xA5A1,
+ 22831 - 11904: 0xC971,
+ 22833 - 11904: 0xA5A2,
+ 22834 - 11904: 0x895F,
+ 22836 - 11904: 0x8960,
+ 22839 - 11904: 0xA669,
+ 22840 - 11904: 0xA66A,
+ 22844 - 11904: 0xC9CB,
+ 22846 - 11904: 0xA7A8,
+ 22848 - 11904: 0xCAB1,
+ 22852 - 11904: 0xA961,
+ 22853 - 11904: 0xCC43,
+ 22855 - 11904: 0xA95F,
+ 22856 - 11904: 0xA960,
+ 22857 - 11904: 0xA95E,
+ 22858 - 11904: 0xD15A,
+ 22862 - 11904: 0xABB6,
+ 22863 - 11904: 0xABB5,
+ 22864 - 11904: 0xABB7,
+ 22865 - 11904: 0xABB4,
+ 22867 - 11904: 0xCE61,
+ 22868 - 11904: 0xA962,
+ 22869 - 11904: 0xABB3,
+ 22871 - 11904: 0xAE4D,
+ 22872 - 11904: 0xAE4E,
+ 22874 - 11904: 0xAE4F,
+ 22876 - 11904: 0xD4CD,
+ 22880 - 11904: 0xB3FE,
+ 22881 - 11904: 0xD8B4,
+ 22882 - 11904: 0xB0F8,
+ 22885 - 11904: 0x9BCD,
+ 22887 - 11904: 0xB6F8,
+ 22889 - 11904: 0xB9DD,
+ 22890 - 11904: 0xB9DC,
+ 22891 - 11904: 0xE16A,
+ 22893 - 11904: 0xBC5D,
+ 22894 - 11904: 0xBEC4,
+ 22896 - 11904: 0xEFC0,
+ 22897 - 11904: 0xF6DA,
+ 22898 - 11904: 0xF7D4,
+ 22899 - 11904: 0xA46B,
+ 22900 - 11904: 0xA5A3,
+ 22901 - 11904: 0x9DD3,
+ 22902 - 11904: 0xA5A4,
+ 22903 - 11904: 0xC9D1,
+ 22904 - 11904: 0xA66C,
+ 22905 - 11904: 0xA66F,
+ 22907 - 11904: 0xC9CF,
+ 22908 - 11904: 0xC9CD,
+ 22909 - 11904: 0xA66E,
+ 22910 - 11904: 0xC9D0,
+ 22911 - 11904: 0xC9D2,
+ 22912 - 11904: 0xC9CC,
+ 22913 - 11904: 0xA671,
+ 22914 - 11904: 0xA670,
+ 22915 - 11904: 0xA66D,
+ 22916 - 11904: 0xA66B,
+ 22917 - 11904: 0xC9CE,
+ 22921 - 11904: 0x984C,
+ 22922 - 11904: 0xA7B3,
+ 22925 - 11904: 0xA7B0,
+ 22926 - 11904: 0xCAB6,
+ 22927 - 11904: 0xCAB9,
+ 22928 - 11904: 0xCAB8,
+ 22930 - 11904: 0xA7AA,
+ 22931 - 11904: 0xA7B2,
+ 22932 - 11904: 0x9752,
+ 22934 - 11904: 0xA7AF,
+ 22935 - 11904: 0xCAB5,
+ 22936 - 11904: 0xCAB3,
+ 22937 - 11904: 0xA7AE,
+ 22938 - 11904: 0x95C3,
+ 22941 - 11904: 0xA7A9,
+ 22942 - 11904: 0xA7AC,
+ 22943 - 11904: 0x9BB6,
+ 22944 - 11904: 0xCAB4,
+ 22945 - 11904: 0xCABB,
+ 22946 - 11904: 0xCAB7,
+ 22947 - 11904: 0xA7AD,
+ 22948 - 11904: 0xA7B1,
+ 22949 - 11904: 0xA7B4,
+ 22950 - 11904: 0xCAB2,
+ 22951 - 11904: 0xCABA,
+ 22952 - 11904: 0xA7AB,
+ 22956 - 11904: 0x9AB9,
+ 22958 - 11904: 0xA967,
+ 22959 - 11904: 0xA96F,
+ 22960 - 11904: 0x97B3,
+ 22961 - 11904: 0xCC4F,
+ 22962 - 11904: 0xCC48,
+ 22963 - 11904: 0xA970,
+ 22964 - 11904: 0xCC53,
+ 22965 - 11904: 0xCC44,
+ 22966 - 11904: 0xCC4B,
+ 22967 - 11904: 0x9F74,
+ 22968 - 11904: 0x92F1,
+ 22969 - 11904: 0xA966,
+ 22970 - 11904: 0xCC45,
+ 22971 - 11904: 0xA964,
+ 22972 - 11904: 0xCC4C,
+ 22973 - 11904: 0xCC50,
+ 22974 - 11904: 0xA963,
+ 22975 - 11904: 0x8CFA,
+ 22976 - 11904: 0xCC51,
+ 22977 - 11904: 0xCC4A,
+ 22979 - 11904: 0xCC4D,
+ 22980 - 11904: 0x97DF,
+ 22981 - 11904: 0xA972,
+ 22982 - 11904: 0xA969,
+ 22983 - 11904: 0xCC54,
+ 22984 - 11904: 0xCC52,
+ 22985 - 11904: 0xFBA6,
+ 22986 - 11904: 0xA96E,
+ 22987 - 11904: 0xA96C,
+ 22988 - 11904: 0xCC49,
+ 22989 - 11904: 0xA96B,
+ 22990 - 11904: 0xCC47,
+ 22991 - 11904: 0xCC46,
+ 22992 - 11904: 0xA96A,
+ 22993 - 11904: 0xA968,
+ 22994 - 11904: 0xA971,
+ 22995 - 11904: 0xA96D,
+ 22996 - 11904: 0xA965,
+ 22998 - 11904: 0xCC4E,
+ 23000 - 11904: 0xABB9,
+ 23001 - 11904: 0xFBAB,
+ 23002 - 11904: 0xABC0,
+ 23003 - 11904: 0xCE6F,
+ 23004 - 11904: 0xABB8,
+ 23005 - 11904: 0xCE67,
+ 23006 - 11904: 0xCE63,
+ 23008 - 11904: 0xCE73,
+ 23009 - 11904: 0xCE62,
+ 23011 - 11904: 0xABBB,
+ 23012 - 11904: 0xCE6C,
+ 23013 - 11904: 0xABBE,
+ 23014 - 11904: 0xABC1,
+ 23016 - 11904: 0xABBC,
+ 23017 - 11904: 0xCE70,
+ 23018 - 11904: 0xABBF,
+ 23019 - 11904: 0x9877,
+ 23020 - 11904: 0xAE56,
+ 23021 - 11904: 0xCE76,
+ 23022 - 11904: 0xCE64,
+ 23023 - 11904: 0x9854,
+ 23024 - 11904: 0x95C5,
+ 23025 - 11904: 0xCE66,
+ 23026 - 11904: 0xCE6D,
+ 23027 - 11904: 0xCE71,
+ 23028 - 11904: 0xCE75,
+ 23029 - 11904: 0xCE72,
+ 23030 - 11904: 0xCE6B,
+ 23031 - 11904: 0xCE6E,
+ 23032 - 11904: 0x9D55,
+ 23033 - 11904: 0xFBB2,
+ 23034 - 11904: 0xCE68,
+ 23035 - 11904: 0xABC3,
+ 23036 - 11904: 0xCE6A,
+ 23037 - 11904: 0xCE69,
+ 23038 - 11904: 0xCE74,
+ 23039 - 11904: 0xABBA,
+ 23040 - 11904: 0xCE65,
+ 23041 - 11904: 0xABC2,
+ 23042 - 11904: 0x957E,
+ 23043 - 11904: 0xABBD,
+ 23049 - 11904: 0xAE5C,
+ 23050 - 11904: 0xD162,
+ 23051 - 11904: 0x9742,
+ 23052 - 11904: 0xAE5B,
+ 23053 - 11904: 0x94E6,
+ 23055 - 11904: 0xD160,
+ 23057 - 11904: 0xAE50,
+ 23058 - 11904: 0x92F5,
+ 23059 - 11904: 0xAE55,
+ 23061 - 11904: 0xD15F,
+ 23062 - 11904: 0xD15C,
+ 23063 - 11904: 0xD161,
+ 23064 - 11904: 0xAE51,
+ 23065 - 11904: 0xD15B,
+ 23066 - 11904: 0x8CC5,
+ 23067 - 11904: 0xAE54,
+ 23068 - 11904: 0xAE52,
+ 23070 - 11904: 0xD163,
+ 23071 - 11904: 0xAE53,
+ 23072 - 11904: 0xAE57,
+ 23073 - 11904: 0x92FD,
+ 23075 - 11904: 0xAE58,
+ 23076 - 11904: 0xFBA2,
+ 23077 - 11904: 0xAE5A,
+ 23079 - 11904: 0x9C51,
+ 23081 - 11904: 0xAE59,
+ 23082 - 11904: 0x94E9,
+ 23083 - 11904: 0x985C,
+ 23084 - 11904: 0x92F0,
+ 23085 - 11904: 0xD15D,
+ 23086 - 11904: 0xD15E,
+ 23091 - 11904: 0xD164,
+ 23093 - 11904: 0xD4D4,
+ 23094 - 11904: 0xB0F9,
+ 23095 - 11904: 0xD8C2,
+ 23096 - 11904: 0xD4D3,
+ 23097 - 11904: 0xD4E6,
+ 23100 - 11904: 0xB140,
+ 23101 - 11904: 0x944C,
+ 23102 - 11904: 0xD4E4,
+ 23104 - 11904: 0xB0FE,
+ 23105 - 11904: 0xB0FA,
+ 23106 - 11904: 0xD4ED,
+ 23107 - 11904: 0xD4DD,
+ 23108 - 11904: 0xD4E0,
+ 23109 - 11904: 0x916B,
+ 23110 - 11904: 0xB143,
+ 23111 - 11904: 0xD4EA,
+ 23112 - 11904: 0xD4E2,
+ 23113 - 11904: 0xB0FB,
+ 23114 - 11904: 0xB144,
+ 23116 - 11904: 0xD4E7,
+ 23117 - 11904: 0xD4E5,
+ 23120 - 11904: 0xD4D6,
+ 23121 - 11904: 0xD4EB,
+ 23122 - 11904: 0xD4DF,
+ 23123 - 11904: 0xD4DA,
+ 23124 - 11904: 0x8B78,
+ 23125 - 11904: 0xD4D0,
+ 23126 - 11904: 0xD4EC,
+ 23127 - 11904: 0xD4DC,
+ 23128 - 11904: 0xD4CF,
+ 23129 - 11904: 0x94E2,
+ 23130 - 11904: 0xB142,
+ 23131 - 11904: 0xD4E1,
+ 23132 - 11904: 0xD4EE,
+ 23133 - 11904: 0xD4DE,
+ 23134 - 11904: 0xD4D2,
+ 23135 - 11904: 0xD4D7,
+ 23136 - 11904: 0xD4CE,
+ 23137 - 11904: 0x984F,
+ 23138 - 11904: 0xB141,
+ 23139 - 11904: 0xFBB5,
+ 23140 - 11904: 0xD4DB,
+ 23141 - 11904: 0xD4D8,
+ 23142 - 11904: 0xB0FC,
+ 23143 - 11904: 0xD4D1,
+ 23144 - 11904: 0x9271,
+ 23145 - 11904: 0xD4E9,
+ 23146 - 11904: 0xB0FD,
+ 23147 - 11904: 0x9365,
+ 23148 - 11904: 0xD4D9,
+ 23149 - 11904: 0xD4D5,
+ 23150 - 11904: 0x985B,
+ 23152 - 11904: 0xD4E8,
+ 23153 - 11904: 0x9850,
+ 23159 - 11904: 0xFBB8,
+ 23160 - 11904: 0xD8BB,
+ 23161 - 11904: 0x97BC,
+ 23162 - 11904: 0xD8B8,
+ 23163 - 11904: 0xD8C9,
+ 23164 - 11904: 0xD8BD,
+ 23165 - 11904: 0xD8CA,
+ 23166 - 11904: 0x92F3,
+ 23167 - 11904: 0xB442,
+ 23169 - 11904: 0x9340,
+ 23170 - 11904: 0x984D,
+ 23171 - 11904: 0xD8C6,
+ 23172 - 11904: 0xD8C3,
+ 23174 - 11904: 0x9572,
+ 23176 - 11904: 0xFDEF,
+ 23178 - 11904: 0xD8C4,
+ 23179 - 11904: 0xD8C7,
+ 23180 - 11904: 0xD8CB,
+ 23182 - 11904: 0xD4E3,
+ 23183 - 11904: 0xD8CD,
+ 23184 - 11904: 0xDD47,
+ 23185 - 11904: 0xFDC1,
+ 23186 - 11904: 0xB443,
+ 23187 - 11904: 0xD8CE,
+ 23188 - 11904: 0xD8B6,
+ 23189 - 11904: 0xD8C0,
+ 23190 - 11904: 0xFBBA,
+ 23191 - 11904: 0xD8C5,
+ 23193 - 11904: 0x92EB,
+ 23194 - 11904: 0xB441,
+ 23195 - 11904: 0xB444,
+ 23196 - 11904: 0xD8CC,
+ 23197 - 11904: 0xD8CF,
+ 23198 - 11904: 0xD8BA,
+ 23199 - 11904: 0xD8B7,
+ 23200 - 11904: 0xFC73,
+ 23201 - 11904: 0x97B7,
+ 23202 - 11904: 0xD8B9,
+ 23204 - 11904: 0x876F,
+ 23205 - 11904: 0xD8BE,
+ 23206 - 11904: 0xD8BC,
+ 23207 - 11904: 0xB445,
+ 23209 - 11904: 0xD8C8,
+ 23211 - 11904: 0xFBB4,
+ 23212 - 11904: 0xD8BF,
+ 23214 - 11904: 0xD8C1,
+ 23215 - 11904: 0xD8B5,
+ 23216 - 11904: 0xDCFA,
+ 23217 - 11904: 0xDCF8,
+ 23218 - 11904: 0xB742,
+ 23219 - 11904: 0xB740,
+ 23220 - 11904: 0xDD43,
+ 23221 - 11904: 0xDCF9,
+ 23222 - 11904: 0xDD44,
+ 23223 - 11904: 0xDD40,
+ 23224 - 11904: 0xDCF7,
+ 23225 - 11904: 0xDD46,
+ 23226 - 11904: 0xDCF6,
+ 23227 - 11904: 0xDCFD,
+ 23228 - 11904: 0xB6FE,
+ 23229 - 11904: 0xB6FD,
+ 23230 - 11904: 0xB6FC,
+ 23231 - 11904: 0xDCFB,
+ 23232 - 11904: 0xDD41,
+ 23233 - 11904: 0xB6F9,
+ 23234 - 11904: 0xB741,
+ 23235 - 11904: 0x90A7,
+ 23236 - 11904: 0xDCF4,
+ 23238 - 11904: 0xDCFE,
+ 23239 - 11904: 0xDCF3,
+ 23240 - 11904: 0xDCFC,
+ 23241 - 11904: 0xB6FA,
+ 23242 - 11904: 0xDD42,
+ 23243 - 11904: 0xDCF5,
+ 23244 - 11904: 0xB6FB,
+ 23245 - 11904: 0xDD45,
+ 23246 - 11904: 0x9741,
+ 23247 - 11904: 0x92F4,
+ 23249 - 11904: 0x8772,
+ 23251 - 11904: 0xFBBC,
+ 23253 - 11904: 0xE16E,
+ 23254 - 11904: 0xB9E2,
+ 23255 - 11904: 0xB9E1,
+ 23256 - 11904: 0xB9E3,
+ 23257 - 11904: 0xE17A,
+ 23258 - 11904: 0xE170,
+ 23259 - 11904: 0xE176,
+ 23260 - 11904: 0xE16B,
+ 23261 - 11904: 0xE179,
+ 23262 - 11904: 0xE178,
+ 23263 - 11904: 0xE17C,
+ 23264 - 11904: 0xE175,
+ 23265 - 11904: 0xB9DE,
+ 23266 - 11904: 0xE174,
+ 23267 - 11904: 0xB9E4,
+ 23268 - 11904: 0x9577,
+ 23269 - 11904: 0xE16D,
+ 23270 - 11904: 0xB9DF,
+ 23272 - 11904: 0xE17B,
+ 23273 - 11904: 0xB9E0,
+ 23274 - 11904: 0xE16F,
+ 23275 - 11904: 0xE172,
+ 23276 - 11904: 0xE177,
+ 23277 - 11904: 0xE171,
+ 23278 - 11904: 0xE16C,
+ 23280 - 11904: 0x9EE2,
+ 23282 - 11904: 0x8F78,
+ 23283 - 11904: 0xE173,
+ 23284 - 11904: 0xE555,
+ 23285 - 11904: 0xBC61,
+ 23286 - 11904: 0xE558,
+ 23287 - 11904: 0xE557,
+ 23288 - 11904: 0xE55A,
+ 23289 - 11904: 0xE55C,
+ 23290 - 11904: 0xF9DC,
+ 23291 - 11904: 0xBC5F,
+ 23293 - 11904: 0xE556,
+ 23294 - 11904: 0x9672,
+ 23295 - 11904: 0xE554,
+ 23297 - 11904: 0xE55D,
+ 23298 - 11904: 0xE55B,
+ 23299 - 11904: 0xE559,
+ 23301 - 11904: 0xE55F,
+ 23303 - 11904: 0xE55E,
+ 23304 - 11904: 0xBC63,
+ 23305 - 11904: 0xBC5E,
+ 23307 - 11904: 0xBC60,
+ 23308 - 11904: 0xBC62,
+ 23309 - 11904: 0x9EB5,
+ 23311 - 11904: 0xE560,
+ 23312 - 11904: 0xE957,
+ 23313 - 11904: 0x964B,
+ 23315 - 11904: 0xE956,
+ 23316 - 11904: 0xE955,
+ 23317 - 11904: 0x8CAC,
+ 23318 - 11904: 0xE958,
+ 23319 - 11904: 0xE951,
+ 23321 - 11904: 0xE952,
+ 23322 - 11904: 0xE95A,
+ 23323 - 11904: 0xE953,
+ 23325 - 11904: 0xBEC5,
+ 23326 - 11904: 0xE95C,
+ 23327 - 11904: 0xA0FA,
+ 23328 - 11904: 0xE95B,
+ 23329 - 11904: 0xE954,
+ 23331 - 11904: 0xECD1,
+ 23332 - 11904: 0xC0A8,
+ 23333 - 11904: 0xECCF,
+ 23334 - 11904: 0xECD4,
+ 23335 - 11904: 0xECD3,
+ 23336 - 11904: 0xE959,
+ 23338 - 11904: 0xC0A7,
+ 23339 - 11904: 0x9575,
+ 23340 - 11904: 0xECD2,
+ 23341 - 11904: 0xECCE,
+ 23342 - 11904: 0xECD6,
+ 23343 - 11904: 0xECD5,
+ 23344 - 11904: 0xC0A6,
+ 23346 - 11904: 0xECD0,
+ 23348 - 11904: 0xBEC6,
+ 23352 - 11904: 0xC254,
+ 23356 - 11904: 0xEFC1,
+ 23357 - 11904: 0xF1FA,
+ 23358 - 11904: 0xF1FB,
+ 23359 - 11904: 0xF1FC,
+ 23360 - 11904: 0xC45C,
+ 23361 - 11904: 0x90DA,
+ 23363 - 11904: 0xC45D,
+ 23364 - 11904: 0x9367,
+ 23365 - 11904: 0xF443,
+ 23366 - 11904: 0xFEA4,
+ 23367 - 11904: 0xF5C8,
+ 23368 - 11904: 0xF5C7,
+ 23370 - 11904: 0x90DF,
+ 23371 - 11904: 0xF6DB,
+ 23372 - 11904: 0xF6DC,
+ 23373 - 11904: 0xF7D5,
+ 23374 - 11904: 0xF8A7,
+ 23375 - 11904: 0x9354,
+ 23376 - 11904: 0xA46C,
+ 23377 - 11904: 0xA46D,
+ 23379 - 11904: 0xA46E,
+ 23380 - 11904: 0xA4D5,
+ 23381 - 11904: 0xA5A5,
+ 23382 - 11904: 0xC9D3,
+ 23383 - 11904: 0xA672,
+ 23384 - 11904: 0xA673,
+ 23386 - 11904: 0xA7B7,
+ 23387 - 11904: 0xA7B8,
+ 23388 - 11904: 0xA7B6,
+ 23389 - 11904: 0xA7B5,
+ 23391 - 11904: 0xA973,
+ 23394 - 11904: 0xCC55,
+ 23395 - 11904: 0xA975,
+ 23396 - 11904: 0xA974,
+ 23397 - 11904: 0xCC56,
+ 23398 - 11904: 0x8961,
+ 23400 - 11904: 0x8BB4,
+ 23401 - 11904: 0xABC4,
+ 23403 - 11904: 0xAE5D,
+ 23404 - 11904: 0xD165,
+ 23405 - 11904: 0x9DC0,
+ 23406 - 11904: 0xD4F0,
+ 23408 - 11904: 0xB145,
+ 23409 - 11904: 0xB447,
+ 23410 - 11904: 0xD4EF,
+ 23411 - 11904: 0xB446,
+ 23412 - 11904: 0x8E48,
+ 23413 - 11904: 0xB9E5,
+ 23414 - 11904: 0xFBC5,
+ 23415 - 11904: 0xE17D,
+ 23416 - 11904: 0xBEC7,
+ 23418 - 11904: 0xC0A9,
+ 23419 - 11904: 0xECD7,
+ 23420 - 11904: 0xFBC7,
+ 23421 - 11904: 0xC45E,
+ 23423 - 11904: 0xC570,
+ 23424 - 11904: 0xC6CB,
+ 23425 - 11904: 0xC972,
+ 23426 - 11904: 0xFA79,
+ 23427 - 11904: 0xA5A6,
+ 23428 - 11904: 0xC973,
+ 23429 - 11904: 0xA676,
+ 23431 - 11904: 0xA674,
+ 23432 - 11904: 0xA675,
+ 23433 - 11904: 0xA677,
+ 23435 - 11904: 0xA7BA,
+ 23436 - 11904: 0xA7B9,
+ 23438 - 11904: 0xCABC,
+ 23439 - 11904: 0xA7BB,
+ 23440 - 11904: 0x9E67,
+ 23442 - 11904: 0xCABD,
+ 23443 - 11904: 0xCC57,
+ 23445 - 11904: 0xCC58,
+ 23446 - 11904: 0x8CD9,
+ 23447 - 11904: 0xA976,
+ 23448 - 11904: 0xA978,
+ 23449 - 11904: 0xA97A,
+ 23450 - 11904: 0xA977,
+ 23451 - 11904: 0xA97B,
+ 23452 - 11904: 0xA979,
+ 23453 - 11904: 0xFBD2,
+ 23454 - 11904: 0x8962,
+ 23455 - 11904: 0x8963,
+ 23458 - 11904: 0xABC8,
+ 23459 - 11904: 0xABC5,
+ 23460 - 11904: 0xABC7,
+ 23461 - 11904: 0xABC9,
+ 23462 - 11904: 0xABC6,
+ 23463 - 11904: 0xD166,
+ 23464 - 11904: 0xCE77,
+ 23466 - 11904: 0xFC7D,
+ 23468 - 11904: 0xD168,
+ 23469 - 11904: 0xD167,
+ 23470 - 11904: 0xAE63,
+ 23472 - 11904: 0xAE5F,
+ 23475 - 11904: 0xAE60,
+ 23476 - 11904: 0xAE62,
+ 23477 - 11904: 0xAE64,
+ 23478 - 11904: 0xAE61,
+ 23479 - 11904: 0x8773,
+ 23480 - 11904: 0xAE66,
+ 23481 - 11904: 0xAE65,
+ 23487 - 11904: 0xB14A,
+ 23488 - 11904: 0xD4F2,
+ 23489 - 11904: 0xD4F1,
+ 23490 - 11904: 0xB149,
+ 23491 - 11904: 0x9F6B,
+ 23492 - 11904: 0xB148,
+ 23493 - 11904: 0xB147,
+ 23494 - 11904: 0xB14B,
+ 23495 - 11904: 0xB146,
+ 23498 - 11904: 0xD8D5,
+ 23499 - 11904: 0xD8D2,
+ 23500 - 11904: 0xB449,
+ 23501 - 11904: 0xD8D1,
+ 23502 - 11904: 0xD8D6,
+ 23504 - 11904: 0xB44B,
+ 23505 - 11904: 0xD8D4,
+ 23506 - 11904: 0xB448,
+ 23507 - 11904: 0xB44A,
+ 23508 - 11904: 0xD8D3,
+ 23509 - 11904: 0xFBCC,
+ 23510 - 11904: 0xDD48,
+ 23511 - 11904: 0xFEAE,
+ 23512 - 11904: 0xDD49,
+ 23513 - 11904: 0xDD4A,
+ 23515 - 11904: 0x876D,
+ 23518 - 11904: 0xB9E6,
+ 23519 - 11904: 0xB9EE,
+ 23520 - 11904: 0xE17E,
+ 23521 - 11904: 0xB9E8,
+ 23522 - 11904: 0xB9EC,
+ 23523 - 11904: 0xE1A1,
+ 23524 - 11904: 0xB9ED,
+ 23525 - 11904: 0xB9E9,
+ 23526 - 11904: 0xB9EA,
+ 23527 - 11904: 0xB9E7,
+ 23528 - 11904: 0xB9EB,
+ 23529 - 11904: 0xBC66,
+ 23530 - 11904: 0xD8D0,
+ 23531 - 11904: 0xBC67,
+ 23532 - 11904: 0xBC65,
+ 23534 - 11904: 0xBC64,
+ 23535 - 11904: 0xE95D,
+ 23536 - 11904: 0xBEC8,
+ 23537 - 11904: 0xECD8,
+ 23538 - 11904: 0xECD9,
+ 23539 - 11904: 0xFBD1,
+ 23541 - 11904: 0xC364,
+ 23542 - 11904: 0xC45F,
+ 23544 - 11904: 0xA46F,
+ 23546 - 11904: 0xA678,
+ 23551 - 11904: 0xFB75,
+ 23553 - 11904: 0xABCA,
+ 23555 - 11904: 0xD169,
+ 23556 - 11904: 0xAE67,
+ 23557 - 11904: 0xFBD4,
+ 23559 - 11904: 0xB14E,
+ 23560 - 11904: 0xB14D,
+ 23561 - 11904: 0xB14C,
+ 23562 - 11904: 0xB44C,
+ 23563 - 11904: 0xB44D,
+ 23564 - 11904: 0xD8D7,
+ 23565 - 11904: 0xB9EF,
+ 23566 - 11904: 0xBEC9,
+ 23567 - 11904: 0xA470,
+ 23568 - 11904: 0xC95C,
+ 23569 - 11904: 0xA4D6,
+ 23570 - 11904: 0xC974,
+ 23571 - 11904: 0xFBD6,
+ 23572 - 11904: 0xFBD8,
+ 23573 - 11904: 0xC9D4,
+ 23574 - 11904: 0xA679,
+ 23578 - 11904: 0xA97C,
+ 23580 - 11904: 0x8B5D,
+ 23582 - 11904: 0x934C,
+ 23583 - 11904: 0xDD4B,
+ 23584 - 11904: 0x9AE2,
+ 23586 - 11904: 0xA471,
+ 23587 - 11904: 0x8BC9,
+ 23588 - 11904: 0xA4D7,
+ 23589 - 11904: 0xC9D5,
+ 23592 - 11904: 0xCABE,
+ 23594 - 11904: 0xCABF,
+ 23596 - 11904: 0xA7BC,
+ 23600 - 11904: 0xD8D8,
+ 23601 - 11904: 0xB44E,
+ 23603 - 11904: 0xDD4C,
+ 23607 - 11904: 0xC0AA,
+ 23608 - 11904: 0xA472,
+ 23609 - 11904: 0xA4A8,
+ 23610 - 11904: 0xA4D8,
+ 23611 - 11904: 0xC975,
+ 23612 - 11904: 0xA5A7,
+ 23614 - 11904: 0xA7C0,
+ 23615 - 11904: 0xA7BF,
+ 23616 - 11904: 0xA7BD,
+ 23617 - 11904: 0xA7BE,
+ 23620 - 11904: 0xCC59,
+ 23621 - 11904: 0xA97E,
+ 23622 - 11904: 0xA9A1,
+ 23623 - 11904: 0xCC5A,
+ 23624 - 11904: 0xA97D,
+ 23625 - 11904: 0xFBDB,
+ 23626 - 11904: 0x9FC9,
+ 23627 - 11904: 0xABCE,
+ 23628 - 11904: 0xCE78,
+ 23629 - 11904: 0xABCD,
+ 23630 - 11904: 0xABCB,
+ 23631 - 11904: 0xABCC,
+ 23632 - 11904: 0xAE6A,
+ 23633 - 11904: 0xAE68,
+ 23635 - 11904: 0x9F44,
+ 23636 - 11904: 0xD16B,
+ 23637 - 11904: 0xAE69,
+ 23638 - 11904: 0xD16A,
+ 23640 - 11904: 0xAE5E,
+ 23641 - 11904: 0xD4F3,
+ 23644 - 11904: 0xB150,
+ 23645 - 11904: 0xB151,
+ 23646 - 11904: 0x98ED,
+ 23648 - 11904: 0xB14F,
+ 23650 - 11904: 0xB9F0,
+ 23651 - 11904: 0xE1A2,
+ 23652 - 11904: 0xBC68,
+ 23653 - 11904: 0xBC69,
+ 23655 - 11904: 0xE561,
+ 23656 - 11904: 0xC0AB,
+ 23657 - 11904: 0xEFC2,
+ 23658 - 11904: 0xEFC3,
+ 23660 - 11904: 0xC4DD,
+ 23661 - 11904: 0xF8A8,
+ 23662 - 11904: 0xC94B,
+ 23663 - 11904: 0xA4D9,
+ 23665 - 11904: 0xA473,
+ 23667 - 11904: 0xC977,
+ 23668 - 11904: 0xC976,
+ 23672 - 11904: 0x8CE9,
+ 23673 - 11904: 0xA67A,
+ 23674 - 11904: 0xC9D7,
+ 23675 - 11904: 0xC9D8,
+ 23676 - 11904: 0xC9D6,
+ 23678 - 11904: 0xC9D9,
+ 23685 - 11904: 0xFBDD,
+ 23686 - 11904: 0xCAC7,
+ 23688 - 11904: 0xCAC2,
+ 23689 - 11904: 0xCAC4,
+ 23690 - 11904: 0xCAC6,
+ 23691 - 11904: 0xCAC3,
+ 23692 - 11904: 0xA7C4,
+ 23693 - 11904: 0xCAC0,
+ 23695 - 11904: 0xCAC1,
+ 23696 - 11904: 0xA7C1,
+ 23697 - 11904: 0xA7C2,
+ 23698 - 11904: 0xCAC5,
+ 23699 - 11904: 0xCAC8,
+ 23700 - 11904: 0xA7C3,
+ 23701 - 11904: 0xCAC9,
+ 23705 - 11904: 0x8DF2,
+ 23706 - 11904: 0x8964,
+ 23708 - 11904: 0xFDF2,
+ 23709 - 11904: 0xCC68,
+ 23710 - 11904: 0x934D,
+ 23711 - 11904: 0xCC62,
+ 23712 - 11904: 0xCC5D,
+ 23713 - 11904: 0xA9A3,
+ 23714 - 11904: 0xCC65,
+ 23715 - 11904: 0xCC63,
+ 23716 - 11904: 0xCC5C,
+ 23717 - 11904: 0xCC69,
+ 23718 - 11904: 0xCC6C,
+ 23719 - 11904: 0xCC67,
+ 23720 - 11904: 0xCC60,
+ 23721 - 11904: 0xA9A5,
+ 23722 - 11904: 0xCC66,
+ 23723 - 11904: 0xA9A6,
+ 23724 - 11904: 0xCC61,
+ 23725 - 11904: 0xCC64,
+ 23726 - 11904: 0xCC5B,
+ 23727 - 11904: 0xCC5F,
+ 23728 - 11904: 0xCC6B,
+ 23729 - 11904: 0xA9A7,
+ 23731 - 11904: 0xA9A8,
+ 23733 - 11904: 0xCC5E,
+ 23734 - 11904: 0xCC6A,
+ 23735 - 11904: 0xA9A2,
+ 23736 - 11904: 0xA9A4,
+ 23738 - 11904: 0xFBE7,
+ 23745 - 11904: 0xA0F2,
+ 23746 - 11904: 0x9868,
+ 23750 - 11904: 0xCEAB,
+ 23751 - 11904: 0xCEA4,
+ 23752 - 11904: 0xCEAA,
+ 23753 - 11904: 0xCEA3,
+ 23754 - 11904: 0xCEA5,
+ 23755 - 11904: 0xCE7D,
+ 23756 - 11904: 0xCE7B,
+ 23758 - 11904: 0xCEAC,
+ 23759 - 11904: 0xCEA9,
+ 23760 - 11904: 0xCE79,
+ 23761 - 11904: 0x9F58,
+ 23762 - 11904: 0xABD0,
+ 23763 - 11904: 0xCEA7,
+ 23764 - 11904: 0xCEA8,
+ 23765 - 11904: 0x8CE6,
+ 23766 - 11904: 0xCEA6,
+ 23767 - 11904: 0xCE7C,
+ 23768 - 11904: 0xCE7A,
+ 23769 - 11904: 0xABCF,
+ 23770 - 11904: 0xCEA2,
+ 23771 - 11904: 0xCE7E,
+ 23774 - 11904: 0xCEA1,
+ 23775 - 11904: 0xCEAD,
+ 23781 - 11904: 0x8D73,
+ 23784 - 11904: 0xAE6F,
+ 23785 - 11904: 0xFBDE,
+ 23786 - 11904: 0xAE6E,
+ 23788 - 11904: 0xD16C,
+ 23789 - 11904: 0xAE6B,
+ 23790 - 11904: 0xD16E,
+ 23791 - 11904: 0xFBDF,
+ 23792 - 11904: 0xAE70,
+ 23793 - 11904: 0xD16F,
+ 23796 - 11904: 0xAE73,
+ 23797 - 11904: 0x8C48,
+ 23798 - 11904: 0xAE71,
+ 23799 - 11904: 0xD170,
+ 23800 - 11904: 0xCEAE,
+ 23801 - 11904: 0xD172,
+ 23803 - 11904: 0xAE6D,
+ 23804 - 11904: 0x8774,
+ 23805 - 11904: 0xAE6C,
+ 23807 - 11904: 0xD16D,
+ 23808 - 11904: 0xD171,
+ 23809 - 11904: 0xAE72,
+ 23814 - 11904: 0xB153,
+ 23815 - 11904: 0xB152,
+ 23819 - 11904: 0xD4F5,
+ 23820 - 11904: 0xD4F9,
+ 23821 - 11904: 0xD4FB,
+ 23822 - 11904: 0xB154,
+ 23823 - 11904: 0xD4FE,
+ 23824 - 11904: 0xFBE3,
+ 23825 - 11904: 0xB158,
+ 23826 - 11904: 0xD541,
+ 23828 - 11904: 0xB15A,
+ 23829 - 11904: 0x8DA8,
+ 23830 - 11904: 0xB156,
+ 23831 - 11904: 0xB15E,
+ 23832 - 11904: 0xFBE4,
+ 23833 - 11904: 0xB15B,
+ 23834 - 11904: 0xD4F7,
+ 23835 - 11904: 0xB155,
+ 23837 - 11904: 0xD4F6,
+ 23838 - 11904: 0xD4F4,
+ 23839 - 11904: 0xD543,
+ 23840 - 11904: 0xD4F8,
+ 23842 - 11904: 0xB157,
+ 23843 - 11904: 0xD542,
+ 23844 - 11904: 0xB15C,
+ 23845 - 11904: 0xD4FD,
+ 23846 - 11904: 0xD4FC,
+ 23847 - 11904: 0xB15D,
+ 23848 - 11904: 0xD4FA,
+ 23849 - 11904: 0xB159,
+ 23852 - 11904: 0x9C75,
+ 23854 - 11904: 0xD544,
+ 23855 - 11904: 0x9878,
+ 23856 - 11904: 0xD540,
+ 23857 - 11904: 0xD8E7,
+ 23858 - 11904: 0xD8EE,
+ 23859 - 11904: 0xD8E3,
+ 23860 - 11904: 0xB451,
+ 23861 - 11904: 0xD8DF,
+ 23862 - 11904: 0xD8EF,
+ 23863 - 11904: 0xD8D9,
+ 23864 - 11904: 0xD8EC,
+ 23865 - 11904: 0xD8EA,
+ 23866 - 11904: 0xD8E4,
+ 23868 - 11904: 0xD8ED,
+ 23869 - 11904: 0xD8E6,
+ 23870 - 11904: 0x8D60,
+ 23871 - 11904: 0xD8DE,
+ 23872 - 11904: 0xD8F0,
+ 23873 - 11904: 0xD8DC,
+ 23874 - 11904: 0xD8E9,
+ 23875 - 11904: 0xD8DA,
+ 23877 - 11904: 0xD8F1,
+ 23878 - 11904: 0xFBE5,
+ 23879 - 11904: 0xB452,
+ 23880 - 11904: 0x8D61,
+ 23881 - 11904: 0xD8EB,
+ 23882 - 11904: 0xDD4F,
+ 23883 - 11904: 0xD8DD,
+ 23884 - 11904: 0xB44F,
+ 23886 - 11904: 0xD8E1,
+ 23888 - 11904: 0xB450,
+ 23889 - 11904: 0xD8E0,
+ 23890 - 11904: 0xD8E5,
+ 23893 - 11904: 0xD8E2,
+ 23894 - 11904: 0x8D62,
+ 23895 - 11904: 0xA0A1,
+ 23897 - 11904: 0xD8E8,
+ 23899 - 11904: 0x9C40,
+ 23902 - 11904: 0xDD53,
+ 23906 - 11904: 0xDD56,
+ 23907 - 11904: 0xDD4E,
+ 23909 - 11904: 0xDD50,
+ 23911 - 11904: 0xDD55,
+ 23912 - 11904: 0xDD54,
+ 23913 - 11904: 0xB743,
+ 23915 - 11904: 0xD8DB,
+ 23916 - 11904: 0xDD52,
+ 23919 - 11904: 0xB744,
+ 23920 - 11904: 0x98AD,
+ 23921 - 11904: 0xDD4D,
+ 23922 - 11904: 0xDD51,
+ 23924 - 11904: 0x9EEA,
+ 23927 - 11904: 0xE1A9,
+ 23928 - 11904: 0x8CEC,
+ 23929 - 11904: 0xE1B0,
+ 23930 - 11904: 0xE1A7,
+ 23931 - 11904: 0x8CD4,
+ 23932 - 11904: 0xE1AE,
+ 23933 - 11904: 0xE1A5,
+ 23934 - 11904: 0xE1AD,
+ 23935 - 11904: 0xE1B1,
+ 23936 - 11904: 0xE1A4,
+ 23937 - 11904: 0xE1A8,
+ 23938 - 11904: 0xE1A3,
+ 23940 - 11904: 0xB9F1,
+ 23941 - 11904: 0x9CEB,
+ 23942 - 11904: 0xE1A6,
+ 23943 - 11904: 0xB9F2,
+ 23944 - 11904: 0xE1AC,
+ 23945 - 11904: 0xE1AB,
+ 23946 - 11904: 0xE1AA,
+ 23947 - 11904: 0xFBE0,
+ 23949 - 11904: 0xE1AF,
+ 23950 - 11904: 0x9F51,
+ 23954 - 11904: 0xE565,
+ 23955 - 11904: 0xE567,
+ 23956 - 11904: 0xBC6B,
+ 23957 - 11904: 0xE568,
+ 23959 - 11904: 0xE563,
+ 23961 - 11904: 0xE562,
+ 23962 - 11904: 0xE56C,
+ 23964 - 11904: 0xE56A,
+ 23965 - 11904: 0xBC6A,
+ 23966 - 11904: 0xE56D,
+ 23967 - 11904: 0xE564,
+ 23968 - 11904: 0xE569,
+ 23969 - 11904: 0xE56B,
+ 23970 - 11904: 0xE566,
+ 23972 - 11904: 0x8D65,
+ 23975 - 11904: 0xE961,
+ 23976 - 11904: 0xE966,
+ 23977 - 11904: 0xE960,
+ 23978 - 11904: 0xE965,
+ 23979 - 11904: 0x9CF1,
+ 23980 - 11904: 0xE95E,
+ 23981 - 11904: 0xE968,
+ 23982 - 11904: 0xE964,
+ 23983 - 11904: 0xE969,
+ 23984 - 11904: 0xE963,
+ 23985 - 11904: 0xE95F,
+ 23986 - 11904: 0xE967,
+ 23988 - 11904: 0xE96A,
+ 23989 - 11904: 0xE962,
+ 23990 - 11904: 0xFC58,
+ 23991 - 11904: 0xECDA,
+ 23992 - 11904: 0xC0AF,
+ 23993 - 11904: 0x8D66,
+ 23994 - 11904: 0xC0AD,
+ 23996 - 11904: 0xC0AC,
+ 23997 - 11904: 0xC0AE,
+ 24000 - 11904: 0xEFC4,
+ 24001 - 11904: 0x9654,
+ 24002 - 11904: 0xF172,
+ 24003 - 11904: 0xF1FD,
+ 24006 - 11904: 0xF444,
+ 24007 - 11904: 0xF445,
+ 24009 - 11904: 0xC460,
+ 24011 - 11904: 0xF5C9,
+ 24013 - 11904: 0xC4DE,
+ 24015 - 11904: 0xF5CA,
+ 24017 - 11904: 0xF6DE,
+ 24018 - 11904: 0xC572,
+ 24020 - 11904: 0xC571,
+ 24021 - 11904: 0xF6DD,
+ 24022 - 11904: 0xC5C9,
+ 24023 - 11904: 0xFBE8,
+ 24024 - 11904: 0xF7D6,
+ 24027 - 11904: 0xC6CC,
+ 24029 - 11904: 0xA474,
+ 24030 - 11904: 0xA67B,
+ 24031 - 11904: 0xC9DA,
+ 24032 - 11904: 0xCACA,
+ 24033 - 11904: 0xA8B5,
+ 24034 - 11904: 0xB15F,
+ 24037 - 11904: 0xA475,
+ 24038 - 11904: 0xA5AA,
+ 24039 - 11904: 0xA5A9,
+ 24040 - 11904: 0xA5A8,
+ 24043 - 11904: 0xA7C5,
+ 24046 - 11904: 0xAE74,
+ 24048 - 11904: 0xDD57,
+ 24049 - 11904: 0xA476,
+ 24050 - 11904: 0xA477,
+ 24051 - 11904: 0xA478,
+ 24052 - 11904: 0xA4DA,
+ 24053 - 11904: 0x9FCE,
+ 24055 - 11904: 0xABD1,
+ 24057 - 11904: 0xCEAF,
+ 24061 - 11904: 0xB453,
+ 24062 - 11904: 0xA479,
+ 24063 - 11904: 0xC95D,
+ 24066 - 11904: 0xA5AB,
+ 24067 - 11904: 0xA5AC,
+ 24068 - 11904: 0xC978,
+ 24070 - 11904: 0xA67C,
+ 24073 - 11904: 0xFBFC,
+ 24074 - 11904: 0xCACB,
+ 24075 - 11904: 0x9AE4,
+ 24076 - 11904: 0xA7C6,
+ 24078 - 11904: 0xCACC,
+ 24081 - 11904: 0xA9AE,
+ 24082 - 11904: 0x9F75,
+ 24084 - 11904: 0xCC6E,
+ 24085 - 11904: 0xA9AC,
+ 24086 - 11904: 0xA9AB,
+ 24087 - 11904: 0xCC6D,
+ 24088 - 11904: 0xA9A9,
+ 24089 - 11904: 0xCC6F,
+ 24090 - 11904: 0xA9AA,
+ 24091 - 11904: 0xA9AD,
+ 24093 - 11904: 0xABD2,
+ 24095 - 11904: 0xABD4,
+ 24096 - 11904: 0xCEB3,
+ 24097 - 11904: 0xCEB0,
+ 24098 - 11904: 0xCEB1,
+ 24099 - 11904: 0xCEB2,
+ 24100 - 11904: 0xCEB4,
+ 24101 - 11904: 0xABD3,
+ 24104 - 11904: 0xD174,
+ 24105 - 11904: 0xD173,
+ 24107 - 11904: 0xAE76,
+ 24109 - 11904: 0xAE75,
+ 24110 - 11904: 0xFBF1,
+ 24115 - 11904: 0xB162,
+ 24116 - 11904: 0xD546,
+ 24118 - 11904: 0xB161,
+ 24119 - 11904: 0xB163,
+ 24120 - 11904: 0xB160,
+ 24125 - 11904: 0xB455,
+ 24126 - 11904: 0xD545,
+ 24128 - 11904: 0xB456,
+ 24129 - 11904: 0xD8F3,
+ 24130 - 11904: 0x8D69,
+ 24131 - 11904: 0xB457,
+ 24132 - 11904: 0xD8F2,
+ 24133 - 11904: 0xB454,
+ 24136 - 11904: 0x934F,
+ 24138 - 11904: 0xDD5A,
+ 24139 - 11904: 0xDD5C,
+ 24140 - 11904: 0xB745,
+ 24141 - 11904: 0xDD5B,
+ 24142 - 11904: 0xDD59,
+ 24143 - 11904: 0xDD58,
+ 24147 - 11904: 0xE1B4,
+ 24148 - 11904: 0xB9F7,
+ 24149 - 11904: 0xB9F5,
+ 24151 - 11904: 0xB9F6,
+ 24152 - 11904: 0xE1B2,
+ 24153 - 11904: 0xE1B3,
+ 24155 - 11904: 0xB9F3,
+ 24156 - 11904: 0xE571,
+ 24157 - 11904: 0xE56F,
+ 24158 - 11904: 0x934E,
+ 24159 - 11904: 0xBC6D,
+ 24160 - 11904: 0xE570,
+ 24161 - 11904: 0xBC6E,
+ 24162 - 11904: 0xBC6C,
+ 24163 - 11904: 0xB9F4,
+ 24166 - 11904: 0xE96D,
+ 24167 - 11904: 0xE96B,
+ 24168 - 11904: 0xE96C,
+ 24169 - 11904: 0xE56E,
+ 24170 - 11904: 0xECDC,
+ 24171 - 11904: 0xC0B0,
+ 24172 - 11904: 0xECDB,
+ 24173 - 11904: 0xEFC5,
+ 24174 - 11904: 0xEFC6,
+ 24175 - 11904: 0xE96E,
+ 24176 - 11904: 0xF1FE,
+ 24178 - 11904: 0xA47A,
+ 24179 - 11904: 0xA5AD,
+ 24180 - 11904: 0xA67E,
+ 24181 - 11904: 0xFBF3,
+ 24182 - 11904: 0xA67D,
+ 24184 - 11904: 0xA9AF,
+ 24185 - 11904: 0xB746,
+ 24186 - 11904: 0xFBF4,
+ 24187 - 11904: 0xA4DB,
+ 24188 - 11904: 0xA5AE,
+ 24189 - 11904: 0xABD5,
+ 24190 - 11904: 0xB458,
+ 24191 - 11904: 0xC6CE,
+ 24192 - 11904: 0xC979,
+ 24194 - 11904: 0xC97A,
+ 24195 - 11904: 0xFBC3,
+ 24196 - 11904: 0xC9DC,
+ 24198 - 11904: 0x8965,
+ 24199 - 11904: 0xA7C8,
+ 24200 - 11904: 0xCAD0,
+ 24201 - 11904: 0xCACE,
+ 24202 - 11904: 0xA7C9,
+ 24203 - 11904: 0xCACD,
+ 24204 - 11904: 0xCACF,
+ 24205 - 11904: 0xCAD1,
+ 24207 - 11904: 0xA7C7,
+ 24210 - 11904: 0x8C7A,
+ 24213 - 11904: 0xA9B3,
+ 24214 - 11904: 0xA9B4,
+ 24215 - 11904: 0xA9B1,
+ 24217 - 11904: 0x8C7B,
+ 24218 - 11904: 0xA9B0,
+ 24219 - 11904: 0xCEB8,
+ 24220 - 11904: 0xA9B2,
+ 24224 - 11904: 0xABD6,
+ 24226 - 11904: 0xCEB7,
+ 24227 - 11904: 0xCEB9,
+ 24228 - 11904: 0xCEB6,
+ 24229 - 11904: 0xCEBA,
+ 24230 - 11904: 0xABD7,
+ 24231 - 11904: 0xAE79,
+ 24232 - 11904: 0xD175,
+ 24234 - 11904: 0xD177,
+ 24235 - 11904: 0xAE77,
+ 24236 - 11904: 0xD178,
+ 24237 - 11904: 0xAE78,
+ 24238 - 11904: 0xD176,
+ 24240 - 11904: 0xCEB5,
+ 24241 - 11904: 0xD547,
+ 24242 - 11904: 0xD54A,
+ 24243 - 11904: 0xD54B,
+ 24244 - 11904: 0xD548,
+ 24245 - 11904: 0xB167,
+ 24246 - 11904: 0xB166,
+ 24247 - 11904: 0xB164,
+ 24248 - 11904: 0xB165,
+ 24249 - 11904: 0xD549,
+ 24253 - 11904: 0x8D6A,
+ 24254 - 11904: 0xB168,
+ 24257 - 11904: 0xB45A,
+ 24258 - 11904: 0xB45B,
+ 24260 - 11904: 0xB45C,
+ 24261 - 11904: 0xDD5D,
+ 24262 - 11904: 0xDD5F,
+ 24263 - 11904: 0xDD61,
+ 24264 - 11904: 0xB748,
+ 24265 - 11904: 0xB747,
+ 24266 - 11904: 0xB459,
+ 24267 - 11904: 0xDD60,
+ 24268 - 11904: 0xDD5E,
+ 24269 - 11904: 0x9353,
+ 24270 - 11904: 0xE1B8,
+ 24272 - 11904: 0xFBF9,
+ 24273 - 11904: 0xE1B6,
+ 24274 - 11904: 0xE1BC,
+ 24275 - 11904: 0xB9F8,
+ 24276 - 11904: 0xE1BD,
+ 24277 - 11904: 0xE1BA,
+ 24278 - 11904: 0xB9F9,
+ 24279 - 11904: 0xE1B7,
+ 24280 - 11904: 0xE1B5,
+ 24281 - 11904: 0xE1BB,
+ 24282 - 11904: 0xBC70,
+ 24283 - 11904: 0xE573,
+ 24284 - 11904: 0xE1B9,
+ 24285 - 11904: 0xBC72,
+ 24286 - 11904: 0xE574,
+ 24287 - 11904: 0xBC71,
+ 24288 - 11904: 0xBC74,
+ 24289 - 11904: 0xE575,
+ 24290 - 11904: 0xBC6F,
+ 24291 - 11904: 0xBC73,
+ 24293 - 11904: 0xE973,
+ 24294 - 11904: 0xE971,
+ 24295 - 11904: 0xE970,
+ 24296 - 11904: 0xE972,
+ 24297 - 11904: 0xE96F,
+ 24300 - 11904: 0xC366,
+ 24302 - 11904: 0xF446,
+ 24303 - 11904: 0xF447,
+ 24305 - 11904: 0xF5CB,
+ 24306 - 11904: 0xF6DF,
+ 24307 - 11904: 0xC655,
+ 24308 - 11904: 0xFBFD,
+ 24310 - 11904: 0xA9B5,
+ 24311 - 11904: 0xA7CA,
+ 24312 - 11904: 0x9059,
+ 24313 - 11904: 0xFC40,
+ 24314 - 11904: 0xABD8,
+ 24315 - 11904: 0xFC41,
+ 24316 - 11904: 0xFC43,
+ 24318 - 11904: 0xA47B,
+ 24319 - 11904: 0xA4DC,
+ 24321 - 11904: 0xA5AF,
+ 24322 - 11904: 0xC9DD,
+ 24324 - 11904: 0xA7CB,
+ 24325 - 11904: 0xCAD2,
+ 24327 - 11904: 0xCEBB,
+ 24328 - 11904: 0xABD9,
+ 24330 - 11904: 0xB9FA,
+ 24331 - 11904: 0xA47C,
+ 24332 - 11904: 0x9FD8,
+ 24333 - 11904: 0xFC46,
+ 24334 - 11904: 0x9362,
+ 24335 - 11904: 0xA6A1,
+ 24338 - 11904: 0xB749,
+ 24339 - 11904: 0xA47D,
+ 24340 - 11904: 0xA4DD,
+ 24341 - 11904: 0xA4DE,
+ 24343 - 11904: 0xA5B1,
+ 24344 - 11904: 0xA5B0,
+ 24346 - 11904: 0xC9DE,
+ 24347 - 11904: 0xA6A2,
+ 24349 - 11904: 0xCAD3,
+ 24351 - 11904: 0xA7CC,
+ 24354 - 11904: 0xCC71,
+ 24355 - 11904: 0xCC72,
+ 24356 - 11904: 0xCC73,
+ 24357 - 11904: 0x8D6B,
+ 24358 - 11904: 0xA9B6,
+ 24359 - 11904: 0xA9B7,
+ 24360 - 11904: 0xCC70,
+ 24361 - 11904: 0xA9B8,
+ 24365 - 11904: 0xABDA,
+ 24366 - 11904: 0xCEBC,
+ 24368 - 11904: 0xD17A,
+ 24369 - 11904: 0xAE7A,
+ 24371 - 11904: 0xD179,
+ 24373 - 11904: 0xB169,
+ 24374 - 11904: 0xD54C,
+ 24375 - 11904: 0xB16A,
+ 24376 - 11904: 0xD54D,
+ 24378 - 11904: 0xFC4C,
+ 24379 - 11904: 0x8CFE,
+ 24380 - 11904: 0xB45D,
+ 24384 - 11904: 0xDD62,
+ 24387 - 11904: 0xE1BF,
+ 24388 - 11904: 0xE1BE,
+ 24390 - 11904: 0xB9FB,
+ 24392 - 11904: 0xBC75,
+ 24393 - 11904: 0xE576,
+ 24394 - 11904: 0xBECA,
+ 24395 - 11904: 0xE974,
+ 24396 - 11904: 0xC0B1,
+ 24397 - 11904: 0x95B8,
+ 24398 - 11904: 0xC573,
+ 24399 - 11904: 0xF7D8,
+ 24400 - 11904: 0xC6D0,
+ 24401 - 11904: 0x8BCA,
+ 24404 - 11904: 0xCC74,
+ 24406 - 11904: 0xCEBD,
+ 24407 - 11904: 0xB16B,
+ 24408 - 11904: 0xFC4F,
+ 24409 - 11904: 0xB74A,
+ 24412 - 11904: 0x987A,
+ 24413 - 11904: 0xC255,
+ 24417 - 11904: 0xC6D1,
+ 24418 - 11904: 0xA7CE,
+ 24419 - 11904: 0xFC51,
+ 24420 - 11904: 0xA7CD,
+ 24421 - 11904: 0xABDB,
+ 24423 - 11904: 0xD17B,
+ 24425 - 11904: 0xB16D,
+ 24426 - 11904: 0xB343,
+ 24427 - 11904: 0xB16E,
+ 24428 - 11904: 0xB16C,
+ 24429 - 11904: 0xB45E,
+ 24431 - 11904: 0xE1C0,
+ 24432 - 11904: 0xB9FC,
+ 24433 - 11904: 0xBC76,
+ 24434 - 11904: 0xFC54,
+ 24435 - 11904: 0xC94C,
+ 24436 - 11904: 0xC9DF,
+ 24438 - 11904: 0xCAD5,
+ 24439 - 11904: 0xA7CF,
+ 24440 - 11904: 0xCAD4,
+ 24441 - 11904: 0xA7D0,
+ 24443 - 11904: 0xFAAF,
+ 24444 - 11904: 0xA9BC,
+ 24445 - 11904: 0xCC77,
+ 24446 - 11904: 0xCC76,
+ 24447 - 11904: 0xA9BB,
+ 24448 - 11904: 0xA9B9,
+ 24449 - 11904: 0xA9BA,
+ 24450 - 11904: 0xCC75,
+ 24451 - 11904: 0x8D6C,
+ 24453 - 11904: 0xABDD,
+ 24454 - 11904: 0xCEBE,
+ 24455 - 11904: 0xABE0,
+ 24456 - 11904: 0xABDC,
+ 24457 - 11904: 0xABE2,
+ 24458 - 11904: 0xABDE,
+ 24459 - 11904: 0xABDF,
+ 24460 - 11904: 0xABE1,
+ 24464 - 11904: 0xAE7D,
+ 24465 - 11904: 0xAE7C,
+ 24466 - 11904: 0xAE7B,
+ 24470 - 11904: 0xD54F,
+ 24471 - 11904: 0xB16F,
+ 24472 - 11904: 0xB172,
+ 24473 - 11904: 0xB170,
+ 24475 - 11904: 0xD54E,
+ 24476 - 11904: 0xB175,
+ 24478 - 11904: 0xB171,
+ 24479 - 11904: 0xD550,
+ 24480 - 11904: 0xB174,
+ 24481 - 11904: 0xB173,
+ 24484 - 11904: 0xFA61,
+ 24485 - 11904: 0xD8F6,
+ 24486 - 11904: 0xD8F5,
+ 24487 - 11904: 0xFC57,
+ 24488 - 11904: 0xB461,
+ 24489 - 11904: 0xB45F,
+ 24490 - 11904: 0xB460,
+ 24491 - 11904: 0xD8F7,
+ 24492 - 11904: 0xB74B,
+ 24493 - 11904: 0xDD64,
+ 24494 - 11904: 0xB74C,
+ 24495 - 11904: 0xDD63,
+ 24497 - 11904: 0x9B70,
+ 24498 - 11904: 0xE577,
+ 24501 - 11904: 0xBC78,
+ 24502 - 11904: 0xE1C1,
+ 24503 - 11904: 0xBC77,
+ 24505 - 11904: 0xB9FD,
+ 24506 - 11904: 0xA051,
+ 24507 - 11904: 0xECDE,
+ 24508 - 11904: 0xE975,
+ 24509 - 11904: 0xC0B2,
+ 24510 - 11904: 0xECDD,
+ 24511 - 11904: 0xF240,
+ 24512 - 11904: 0xF448,
+ 24513 - 11904: 0xF449,
+ 24514 - 11904: 0x8C7C,
+ 24515 - 11904: 0xA4DF,
+ 24516 - 11904: 0x8BCB,
+ 24517 - 11904: 0xA5B2,
+ 24521 - 11904: 0xC97B,
+ 24524 - 11904: 0xA7D2,
+ 24525 - 11904: 0xA7D4,
+ 24527 - 11904: 0xC9E2,
+ 24528 - 11904: 0xCAD8,
+ 24529 - 11904: 0xCAD7,
+ 24530 - 11904: 0xCAD6,
+ 24532 - 11904: 0xC9E1,
+ 24533 - 11904: 0xC9E0,
+ 24534 - 11904: 0xA6A4,
+ 24535 - 11904: 0xA7D3,
+ 24536 - 11904: 0xA7D1,
+ 24537 - 11904: 0xA6A3,
+ 24539 - 11904: 0x936E,
+ 24541 - 11904: 0xA9BD,
+ 24542 - 11904: 0xCC78,
+ 24543 - 11904: 0xFCD5,
+ 24544 - 11904: 0xA9BE,
+ 24545 - 11904: 0xCADD,
+ 24547 - 11904: 0xCADF,
+ 24548 - 11904: 0xCADE,
+ 24549 - 11904: 0xCC79,
+ 24552 - 11904: 0xCADA,
+ 24554 - 11904: 0xA7D8,
+ 24555 - 11904: 0xA7D6,
+ 24557 - 11904: 0xCAD9,
+ 24558 - 11904: 0xCADB,
+ 24559 - 11904: 0xCAE1,
+ 24561 - 11904: 0xA7D5,
+ 24563 - 11904: 0xCADC,
+ 24564 - 11904: 0xCAE5,
+ 24565 - 11904: 0xA9C0,
+ 24567 - 11904: 0xCAE2,
+ 24568 - 11904: 0xA7D7,
+ 24570 - 11904: 0xCAE0,
+ 24571 - 11904: 0xCAE3,
+ 24573 - 11904: 0xA9BF,
+ 24575 - 11904: 0xA9C1,
+ 24576 - 11904: 0xCAE4,
+ 24585 - 11904: 0xCCAF,
+ 24586 - 11904: 0xCCA2,
+ 24587 - 11904: 0xCC7E,
+ 24588 - 11904: 0xCCAE,
+ 24589 - 11904: 0xCCA9,
+ 24590 - 11904: 0xABE7,
+ 24591 - 11904: 0xA9C2,
+ 24592 - 11904: 0xCCAA,
+ 24593 - 11904: 0xCCAD,
+ 24594 - 11904: 0xABE3,
+ 24595 - 11904: 0xCCAC,
+ 24596 - 11904: 0xA9C3,
+ 24597 - 11904: 0xA9C8,
+ 24598 - 11904: 0xA9C6,
+ 24599 - 11904: 0xCCA3,
+ 24601 - 11904: 0xCC7C,
+ 24602 - 11904: 0xCCA5,
+ 24603 - 11904: 0xA9CD,
+ 24604 - 11904: 0xCCB0,
+ 24605 - 11904: 0xABE4,
+ 24606 - 11904: 0xCCA6,
+ 24608 - 11904: 0xABE5,
+ 24609 - 11904: 0xA9C9,
+ 24610 - 11904: 0xCCA8,
+ 24611 - 11904: 0xFCA9,
+ 24612 - 11904: 0xCECD,
+ 24613 - 11904: 0xABE6,
+ 24614 - 11904: 0xCC7B,
+ 24615 - 11904: 0xA9CA,
+ 24616 - 11904: 0xABE8,
+ 24617 - 11904: 0xA9CB,
+ 24618 - 11904: 0xA9C7,
+ 24619 - 11904: 0xA9CC,
+ 24620 - 11904: 0xCCA7,
+ 24621 - 11904: 0xCC7A,
+ 24622 - 11904: 0xCCAB,
+ 24623 - 11904: 0xA9C4,
+ 24625 - 11904: 0xFC61,
+ 24626 - 11904: 0xCC7D,
+ 24627 - 11904: 0xCCA4,
+ 24628 - 11904: 0xCCA1,
+ 24629 - 11904: 0xA9C5,
+ 24631 - 11904: 0xCEBF,
+ 24633 - 11904: 0xCEC0,
+ 24635 - 11904: 0x8966,
+ 24640 - 11904: 0xCECA,
+ 24641 - 11904: 0xD1A1,
+ 24642 - 11904: 0xCECB,
+ 24643 - 11904: 0xABEE,
+ 24644 - 11904: 0xCECE,
+ 24645 - 11904: 0xCEC4,
+ 24646 - 11904: 0xABED,
+ 24647 - 11904: 0xCEC6,
+ 24649 - 11904: 0xCEC7,
+ 24650 - 11904: 0xFACB,
+ 24652 - 11904: 0xCEC9,
+ 24653 - 11904: 0xABE9,
+ 24656 - 11904: 0xAEA3,
+ 24658 - 11904: 0xF9DA,
+ 24659 - 11904: 0xCEC5,
+ 24660 - 11904: 0xCEC1,
+ 24661 - 11904: 0xAEA4,
+ 24664 - 11904: 0xCECF,
+ 24665 - 11904: 0xAE7E,
+ 24666 - 11904: 0xD17D,
+ 24667 - 11904: 0xCEC8,
+ 24669 - 11904: 0xD17C,
+ 24670 - 11904: 0xCEC3,
+ 24671 - 11904: 0xCECC,
+ 24674 - 11904: 0xABEC,
+ 24675 - 11904: 0xAEA1,
+ 24676 - 11904: 0xABF2,
+ 24677 - 11904: 0xAEA2,
+ 24678 - 11904: 0xCED0,
+ 24679 - 11904: 0xD17E,
+ 24680 - 11904: 0xABEB,
+ 24681 - 11904: 0xAEA6,
+ 24682 - 11904: 0xABF1,
+ 24683 - 11904: 0xABF0,
+ 24684 - 11904: 0xABEF,
+ 24685 - 11904: 0xAEA5,
+ 24686 - 11904: 0xCED1,
+ 24687 - 11904: 0xAEA7,
+ 24688 - 11904: 0xABEA,
+ 24690 - 11904: 0xCEC2,
+ 24693 - 11904: 0x937A,
+ 24695 - 11904: 0xA0E0,
+ 24702 - 11904: 0x936B,
+ 24703 - 11904: 0xB176,
+ 24704 - 11904: 0xD1A4,
+ 24705 - 11904: 0xD1A6,
+ 24707 - 11904: 0xD1A8,
+ 24708 - 11904: 0xAEA8,
+ 24709 - 11904: 0xAEAE,
+ 24710 - 11904: 0xD553,
+ 24711 - 11904: 0xD1AC,
+ 24712 - 11904: 0xD1A3,
+ 24713 - 11904: 0xB178,
+ 24714 - 11904: 0xD551,
+ 24716 - 11904: 0xAEAD,
+ 24717 - 11904: 0xAEAB,
+ 24718 - 11904: 0xD1AE,
+ 24720 - 11904: 0xD552,
+ 24722 - 11904: 0xD1A5,
+ 24724 - 11904: 0xAEAC,
+ 24725 - 11904: 0xD1A9,
+ 24726 - 11904: 0xAEAF,
+ 24727 - 11904: 0xD1AB,
+ 24730 - 11904: 0xAEAA,
+ 24731 - 11904: 0xD1AA,
+ 24732 - 11904: 0xD1AD,
+ 24733 - 11904: 0xD1A7,
+ 24734 - 11904: 0xFC6B,
+ 24735 - 11904: 0xAEA9,
+ 24736 - 11904: 0xB179,
+ 24738 - 11904: 0xD1A2,
+ 24739 - 11904: 0xB177,
+ 24740 - 11904: 0xFC6C,
+ 24743 - 11904: 0x9468,
+ 24744 - 11904: 0xB17A,
+ 24752 - 11904: 0xD555,
+ 24753 - 11904: 0xD55E,
+ 24754 - 11904: 0xB464,
+ 24755 - 11904: 0xFC6D,
+ 24756 - 11904: 0xB17C,
+ 24757 - 11904: 0xB1A3,
+ 24758 - 11904: 0xB465,
+ 24759 - 11904: 0xD560,
+ 24760 - 11904: 0xB1AA,
+ 24761 - 11904: 0xD8F9,
+ 24762 - 11904: 0xD556,
+ 24763 - 11904: 0xB1A2,
+ 24764 - 11904: 0xB1A5,
+ 24765 - 11904: 0xB17E,
+ 24766 - 11904: 0xD554,
+ 24767 - 11904: 0xD562,
+ 24768 - 11904: 0xD565,
+ 24769 - 11904: 0xD949,
+ 24771 - 11904: 0xD563,
+ 24772 - 11904: 0xD8FD,
+ 24773 - 11904: 0xB1A1,
+ 24774 - 11904: 0xB1A8,
+ 24775 - 11904: 0xB1AC,
+ 24776 - 11904: 0xD55D,
+ 24777 - 11904: 0xD8F8,
+ 24778 - 11904: 0xD561,
+ 24779 - 11904: 0xB17B,
+ 24780 - 11904: 0xD8FA,
+ 24781 - 11904: 0xD564,
+ 24782 - 11904: 0xD8FC,
+ 24783 - 11904: 0xD559,
+ 24785 - 11904: 0xB462,
+ 24787 - 11904: 0xD557,
+ 24788 - 11904: 0xD558,
+ 24789 - 11904: 0xB1A7,
+ 24791 - 11904: 0x8D71,
+ 24792 - 11904: 0xB1A6,
+ 24793 - 11904: 0xD55B,
+ 24794 - 11904: 0xB1AB,
+ 24795 - 11904: 0xD55F,
+ 24796 - 11904: 0xB1A4,
+ 24797 - 11904: 0xD55C,
+ 24798 - 11904: 0xFD64,
+ 24799 - 11904: 0xB1A9,
+ 24800 - 11904: 0xB466,
+ 24801 - 11904: 0xB463,
+ 24802 - 11904: 0xD8FB,
+ 24803 - 11904: 0x99BA,
+ 24804 - 11904: 0xD55A,
+ 24806 - 11904: 0xB17D,
+ 24807 - 11904: 0x9AD0,
+ 24808 - 11904: 0x9A61,
+ 24809 - 11904: 0xA0E5,
+ 24816 - 11904: 0xB46B,
+ 24817 - 11904: 0xB46F,
+ 24818 - 11904: 0xD940,
+ 24819 - 11904: 0xB751,
+ 24820 - 11904: 0xB46D,
+ 24821 - 11904: 0xD944,
+ 24822 - 11904: 0xB471,
+ 24823 - 11904: 0xDD65,
+ 24824 - 11904: 0xD946,
+ 24825 - 11904: 0xB753,
+ 24826 - 11904: 0xB469,
+ 24827 - 11904: 0xB46C,
+ 24828 - 11904: 0xD947,
+ 24829 - 11904: 0xA05B,
+ 24830 - 11904: 0xD948,
+ 24831 - 11904: 0xD94E,
+ 24832 - 11904: 0xB473,
+ 24833 - 11904: 0xB754,
+ 24835 - 11904: 0xD94A,
+ 24836 - 11904: 0xD94F,
+ 24837 - 11904: 0xD943,
+ 24838 - 11904: 0xB75E,
+ 24839 - 11904: 0x96AC,
+ 24840 - 11904: 0xB755,
+ 24841 - 11904: 0xB472,
+ 24842 - 11904: 0xD941,
+ 24843 - 11904: 0xD950,
+ 24844 - 11904: 0x9740,
+ 24845 - 11904: 0xB75D,
+ 24846 - 11904: 0xB470,
+ 24847 - 11904: 0xB74E,
+ 24848 - 11904: 0xD94D,
+ 24850 - 11904: 0xB474,
+ 24851 - 11904: 0xD945,
+ 24852 - 11904: 0xD8FE,
+ 24853 - 11904: 0xB46A,
+ 24854 - 11904: 0xD942,
+ 24856 - 11904: 0xD94B,
+ 24857 - 11904: 0x9EF1,
+ 24858 - 11904: 0xB74D,
+ 24859 - 11904: 0xB752,
+ 24860 - 11904: 0xB467,
+ 24861 - 11904: 0xD94C,
+ 24863 - 11904: 0xB750,
+ 24866 - 11904: 0x8C4D,
+ 24867 - 11904: 0xB468,
+ 24871 - 11904: 0xB75C,
+ 24872 - 11904: 0xE1C3,
+ 24873 - 11904: 0xDD70,
+ 24875 - 11904: 0xDD68,
+ 24876 - 11904: 0xE1C2,
+ 24878 - 11904: 0xDD6C,
+ 24879 - 11904: 0xDD6E,
+ 24880 - 11904: 0x9F7E,
+ 24882 - 11904: 0xDD6B,
+ 24884 - 11904: 0xB75B,
+ 24886 - 11904: 0xDD6A,
+ 24887 - 11904: 0xB75F,
+ 24891 - 11904: 0xE1D2,
+ 24893 - 11904: 0x8D72,
+ 24894 - 11904: 0xB75A,
+ 24895 - 11904: 0xBA40,
+ 24896 - 11904: 0xDD71,
+ 24897 - 11904: 0xE1C4,
+ 24898 - 11904: 0xFC76,
+ 24900 - 11904: 0xB758,
+ 24901 - 11904: 0xDD69,
+ 24902 - 11904: 0xDD6D,
+ 24903 - 11904: 0xB9FE,
+ 24904 - 11904: 0xB74F,
+ 24905 - 11904: 0xDD66,
+ 24906 - 11904: 0xDD67,
+ 24907 - 11904: 0xBA41,
+ 24908 - 11904: 0xB757,
+ 24909 - 11904: 0xB759,
+ 24910 - 11904: 0xB756,
+ 24911 - 11904: 0xDD6F,
+ 24912 - 11904: 0x96A9,
+ 24914 - 11904: 0xE1C8,
+ 24915 - 11904: 0xE1C9,
+ 24916 - 11904: 0xE1CE,
+ 24917 - 11904: 0xBC7D,
+ 24918 - 11904: 0xE1D5,
+ 24920 - 11904: 0xBA47,
+ 24921 - 11904: 0xA06E,
+ 24922 - 11904: 0xBA46,
+ 24923 - 11904: 0xE1D0,
+ 24924 - 11904: 0xFCAA,
+ 24925 - 11904: 0xBC7C,
+ 24926 - 11904: 0xE1C5,
+ 24927 - 11904: 0xBA45,
+ 24928 - 11904: 0xFBCD,
+ 24929 - 11904: 0xE1D4,
+ 24930 - 11904: 0xBA43,
+ 24931 - 11904: 0xBA44,
+ 24932 - 11904: 0xFC74,
+ 24933 - 11904: 0xE1D1,
+ 24934 - 11904: 0xE5AA,
+ 24935 - 11904: 0xBC7A,
+ 24936 - 11904: 0xB46E,
+ 24938 - 11904: 0xE1D3,
+ 24939 - 11904: 0xBCA3,
+ 24940 - 11904: 0xE1CB,
+ 24942 - 11904: 0xBC7B,
+ 24943 - 11904: 0xA074,
+ 24944 - 11904: 0xBCA2,
+ 24945 - 11904: 0xE1C6,
+ 24946 - 11904: 0xE1CA,
+ 24947 - 11904: 0xE1C7,
+ 24948 - 11904: 0xE1CD,
+ 24949 - 11904: 0xBA48,
+ 24950 - 11904: 0xBC79,
+ 24951 - 11904: 0xBA42,
+ 24953 - 11904: 0xE57A,
+ 24954 - 11904: 0xE1CF,
+ 24956 - 11904: 0xBCA1,
+ 24957 - 11904: 0xA071,
+ 24958 - 11904: 0xBCA4,
+ 24960 - 11904: 0xE1CC,
+ 24961 - 11904: 0xFC79,
+ 24962 - 11904: 0xBC7E,
+ 24963 - 11904: 0xE579,
+ 24967 - 11904: 0xFC7C,
+ 24969 - 11904: 0xE57E,
+ 24970 - 11904: 0xBECE,
+ 24971 - 11904: 0xE578,
+ 24972 - 11904: 0xE9A3,
+ 24973 - 11904: 0xE5A9,
+ 24974 - 11904: 0xBCA8,
+ 24976 - 11904: 0xBCA6,
+ 24977 - 11904: 0xBECC,
+ 24978 - 11904: 0xE5A6,
+ 24979 - 11904: 0xE5A2,
+ 24980 - 11904: 0xBCAC,
+ 24981 - 11904: 0x9C50,
+ 24982 - 11904: 0xE978,
+ 24984 - 11904: 0x9379,
+ 24985 - 11904: 0x9378,
+ 24986 - 11904: 0xBCAA,
+ 24987 - 11904: 0xE5A1,
+ 24988 - 11904: 0xA0DD,
+ 24989 - 11904: 0xE976,
+ 24991 - 11904: 0xE5A5,
+ 24993 - 11904: 0xE5A8,
+ 24994 - 11904: 0xE57D,
+ 24996 - 11904: 0xBCAB,
+ 24999 - 11904: 0xBCA5,
+ 25000 - 11904: 0xE977,
+ 25001 - 11904: 0xBECD,
+ 25002 - 11904: 0xE5A7,
+ 25003 - 11904: 0xBCA7,
+ 25004 - 11904: 0xBCA9,
+ 25005 - 11904: 0xE5A4,
+ 25006 - 11904: 0xBCAD,
+ 25007 - 11904: 0xE5A3,
+ 25008 - 11904: 0xE57C,
+ 25009 - 11904: 0xE57B,
+ 25010 - 11904: 0xBECB,
+ 25011 - 11904: 0xE5AB,
+ 25012 - 11904: 0xE97A,
+ 25013 - 11904: 0xECE0,
+ 25014 - 11904: 0xBED0,
+ 25015 - 11904: 0x8D75,
+ 25016 - 11904: 0xE9A2,
+ 25017 - 11904: 0x8D76,
+ 25018 - 11904: 0xE97E,
+ 25020 - 11904: 0xECE1,
+ 25022 - 11904: 0xBED1,
+ 25023 - 11904: 0xE9A1,
+ 25024 - 11904: 0x9374,
+ 25025 - 11904: 0xE97C,
+ 25026 - 11904: 0xC0B4,
+ 25027 - 11904: 0xECDF,
+ 25029 - 11904: 0xE979,
+ 25030 - 11904: 0xE97B,
+ 25031 - 11904: 0xC0B5,
+ 25032 - 11904: 0xBED3,
+ 25033 - 11904: 0xC0B3,
+ 25034 - 11904: 0xBED2,
+ 25035 - 11904: 0xC0B7,
+ 25036 - 11904: 0xE97D,
+ 25037 - 11904: 0xBECF,
+ 25039 - 11904: 0x8D77,
+ 25040 - 11904: 0xFCA5,
+ 25043 - 11904: 0xFCA2,
+ 25046 - 11904: 0xEFCF,
+ 25048 - 11904: 0xEFC7,
+ 25050 - 11904: 0x90C3,
+ 25054 - 11904: 0xECE7,
+ 25055 - 11904: 0xEFC8,
+ 25056 - 11904: 0xECE3,
+ 25058 - 11904: 0xA079,
+ 25059 - 11904: 0xC256,
+ 25060 - 11904: 0xECE5,
+ 25061 - 11904: 0xECE4,
+ 25062 - 11904: 0xC0B6,
+ 25063 - 11904: 0xECE2,
+ 25064 - 11904: 0xECE6,
+ 25065 - 11904: 0xEFD0,
+ 25066 - 11904: 0xEFCC,
+ 25067 - 11904: 0xEFCE,
+ 25069 - 11904: 0xEFC9,
+ 25070 - 11904: 0xEFCA,
+ 25072 - 11904: 0xEFCD,
+ 25073 - 11904: 0xEFCB,
+ 25074 - 11904: 0xC367,
+ 25077 - 11904: 0xC36A,
+ 25078 - 11904: 0xC369,
+ 25079 - 11904: 0xC368,
+ 25080 - 11904: 0xC461,
+ 25081 - 11904: 0xF44A,
+ 25082 - 11904: 0xC462,
+ 25083 - 11904: 0xF241,
+ 25084 - 11904: 0xC4DF,
+ 25085 - 11904: 0xF5CC,
+ 25086 - 11904: 0xC4E0,
+ 25087 - 11904: 0xC574,
+ 25088 - 11904: 0xC5CA,
+ 25089 - 11904: 0xF7D9,
+ 25091 - 11904: 0xF7DA,
+ 25092 - 11904: 0xF7DB,
+ 25095 - 11904: 0xF9BA,
+ 25096 - 11904: 0xA4E0,
+ 25097 - 11904: 0xC97C,
+ 25098 - 11904: 0xA5B3,
+ 25100 - 11904: 0xA6A6,
+ 25101 - 11904: 0xA6A7,
+ 25102 - 11904: 0xA6A5,
+ 25104 - 11904: 0xA6A8,
+ 25105 - 11904: 0xA7DA,
+ 25106 - 11904: 0xA7D9,
+ 25108 - 11904: 0xCCB1,
+ 25109 - 11904: 0xA9CF,
+ 25110 - 11904: 0xA9CE,
+ 25113 - 11904: 0xD1AF,
+ 25114 - 11904: 0xB1AD,
+ 25115 - 11904: 0xB1AE,
+ 25119 - 11904: 0xB475,
+ 25120 - 11904: 0xDD72,
+ 25121 - 11904: 0xB760,
+ 25122 - 11904: 0xB761,
+ 25123 - 11904: 0xDD74,
+ 25124 - 11904: 0xDD76,
+ 25125 - 11904: 0xDD75,
+ 25127 - 11904: 0xE1D7,
+ 25129 - 11904: 0xE1D6,
+ 25130 - 11904: 0xBA49,
+ 25131 - 11904: 0xE1D8,
+ 25132 - 11904: 0x8D79,
+ 25133 - 11904: 0xE5AC,
+ 25134 - 11904: 0xBCAE,
+ 25136 - 11904: 0xBED4,
+ 25138 - 11904: 0xC0B8,
+ 25139 - 11904: 0xC257,
+ 25140 - 11904: 0xC0B9,
+ 25142 - 11904: 0xA4E1,
+ 25143 - 11904: 0x8BFC,
+ 25145 - 11904: 0xA076,
+ 25146 - 11904: 0xCAE6,
+ 25149 - 11904: 0xCCB2,
+ 25150 - 11904: 0xA9D1,
+ 25151 - 11904: 0xA9D0,
+ 25152 - 11904: 0xA9D2,
+ 25153 - 11904: 0xABF3,
+ 25154 - 11904: 0xCED2,
+ 25155 - 11904: 0xCED3,
+ 25158 - 11904: 0xD1B0,
+ 25159 - 11904: 0xAEB0,
+ 25160 - 11904: 0xB1AF,
+ 25161 - 11904: 0xB476,
+ 25162 - 11904: 0xD951,
+ 25163 - 11904: 0xA4E2,
+ 25164 - 11904: 0x8BCD,
+ 25165 - 11904: 0xA47E,
+ 25166 - 11904: 0xA4E3,
+ 25168 - 11904: 0xC97D,
+ 25169 - 11904: 0xA5B7,
+ 25170 - 11904: 0xA5B6,
+ 25171 - 11904: 0xA5B4,
+ 25172 - 11904: 0xA5B5,
+ 25176 - 11904: 0xA6AB,
+ 25177 - 11904: 0xC9E9,
+ 25178 - 11904: 0xC9EB,
+ 25179 - 11904: 0xA6AA,
+ 25180 - 11904: 0xC9E3,
+ 25182 - 11904: 0xC9E4,
+ 25184 - 11904: 0xC9EA,
+ 25185 - 11904: 0xC9E6,
+ 25186 - 11904: 0xC9E8,
+ 25187 - 11904: 0xA6A9,
+ 25188 - 11904: 0xC9E5,
+ 25189 - 11904: 0xC9EC,
+ 25190 - 11904: 0xC9E7,
+ 25192 - 11904: 0x9F5A,
+ 25197 - 11904: 0xA7E1,
+ 25198 - 11904: 0xA7EA,
+ 25199 - 11904: 0xA7E8,
+ 25200 - 11904: 0xCAF0,
+ 25201 - 11904: 0xCAED,
+ 25202 - 11904: 0xCAF5,
+ 25203 - 11904: 0xA7E6,
+ 25204 - 11904: 0xCAF6,
+ 25206 - 11904: 0xA7DF,
+ 25207 - 11904: 0xCAF3,
+ 25209 - 11904: 0xA7E5,
+ 25210 - 11904: 0xCAEF,
+ 25211 - 11904: 0xCAEE,
+ 25212 - 11904: 0xA7E3,
+ 25213 - 11904: 0xCAF4,
+ 25214 - 11904: 0xA7E4,
+ 25215 - 11904: 0xA9D3,
+ 25216 - 11904: 0xA7DE,
+ 25217 - 11904: 0xCAF1,
+ 25218 - 11904: 0x9FF4,
+ 25219 - 11904: 0xCAE7,
+ 25220 - 11904: 0xA7DB,
+ 25221 - 11904: 0x9FBA,
+ 25222 - 11904: 0xA7EE,
+ 25223 - 11904: 0xCAEC,
+ 25224 - 11904: 0xCAF2,
+ 25225 - 11904: 0xA7E0,
+ 25226 - 11904: 0xA7E2,
+ 25228 - 11904: 0xCAE8,
+ 25230 - 11904: 0xCAE9,
+ 25231 - 11904: 0xCAEA,
+ 25232 - 11904: 0x8D7A,
+ 25233 - 11904: 0xA7ED,
+ 25234 - 11904: 0xA7E7,
+ 25235 - 11904: 0xA7EC,
+ 25236 - 11904: 0xCAEB,
+ 25237 - 11904: 0xA7EB,
+ 25238 - 11904: 0xA7DD,
+ 25239 - 11904: 0xA7DC,
+ 25240 - 11904: 0xA7E9,
+ 25245 - 11904: 0x9E45,
+ 25252 - 11904: 0x93B0,
+ 25254 - 11904: 0xA075,
+ 25256 - 11904: 0xA9E1,
+ 25257 - 11904: 0xCCBE,
+ 25258 - 11904: 0xCCB7,
+ 25259 - 11904: 0xA9DC,
+ 25260 - 11904: 0xA9EF,
+ 25261 - 11904: 0xCCB3,
+ 25262 - 11904: 0xCCBA,
+ 25263 - 11904: 0xCCBC,
+ 25264 - 11904: 0xCCBF,
+ 25265 - 11904: 0xA9EA,
+ 25267 - 11904: 0xCCBB,
+ 25268 - 11904: 0xCCB4,
+ 25269 - 11904: 0xA9E8,
+ 25270 - 11904: 0xCCB8,
+ 25272 - 11904: 0xCCC0,
+ 25273 - 11904: 0xA9D9,
+ 25275 - 11904: 0xCCBD,
+ 25276 - 11904: 0xA9E3,
+ 25277 - 11904: 0xA9E2,
+ 25278 - 11904: 0xCCB6,
+ 25279 - 11904: 0xA9D7,
+ 25281 - 11904: 0x87DD,
+ 25282 - 11904: 0xA9D8,
+ 25283 - 11904: 0x9B46,
+ 25284 - 11904: 0xA9D6,
+ 25285 - 11904: 0xFCAE,
+ 25286 - 11904: 0xA9EE,
+ 25287 - 11904: 0xA9E6,
+ 25288 - 11904: 0xA9E0,
+ 25289 - 11904: 0xA9D4,
+ 25290 - 11904: 0xCCB9,
+ 25291 - 11904: 0xA9DF,
+ 25292 - 11904: 0xA9D5,
+ 25293 - 11904: 0xA9E7,
+ 25294 - 11904: 0xA9F0,
+ 25295 - 11904: 0xCED4,
+ 25296 - 11904: 0xA9E4,
+ 25297 - 11904: 0xCCB5,
+ 25298 - 11904: 0xA9DA,
+ 25299 - 11904: 0xA9DD,
+ 25300 - 11904: 0xA9DE,
+ 25301 - 11904: 0xFCB0,
+ 25302 - 11904: 0xA9EC,
+ 25303 - 11904: 0xA9ED,
+ 25304 - 11904: 0xA9EB,
+ 25305 - 11904: 0xA9E5,
+ 25306 - 11904: 0xA9E9,
+ 25307 - 11904: 0xA9DB,
+ 25308 - 11904: 0xABF4,
+ 25311 - 11904: 0xFA51,
+ 25317 - 11904: 0x8D7B,
+ 25323 - 11904: 0xCEDA,
+ 25324 - 11904: 0xAC41,
+ 25325 - 11904: 0xABF8,
+ 25326 - 11904: 0xABFA,
+ 25327 - 11904: 0xAC40,
+ 25328 - 11904: 0xCEE6,
+ 25329 - 11904: 0xABFD,
+ 25330 - 11904: 0xD1B1,
+ 25331 - 11904: 0xAEB1,
+ 25332 - 11904: 0xAC43,
+ 25333 - 11904: 0xCED7,
+ 25334 - 11904: 0xCEDF,
+ 25335 - 11904: 0xABFE,
+ 25336 - 11904: 0xCEDE,
+ 25337 - 11904: 0xCEDB,
+ 25338 - 11904: 0xCEE3,
+ 25339 - 11904: 0xCEE5,
+ 25340 - 11904: 0xABF7,
+ 25341 - 11904: 0xABFB,
+ 25342 - 11904: 0xAC42,
+ 25343 - 11904: 0xAEB3,
+ 25344 - 11904: 0xCEE0,
+ 25345 - 11904: 0xABF9,
+ 25346 - 11904: 0xAC45,
+ 25347 - 11904: 0xCED9,
+ 25351 - 11904: 0xABFC,
+ 25352 - 11904: 0xAEB2,
+ 25353 - 11904: 0xABF6,
+ 25355 - 11904: 0xCED6,
+ 25356 - 11904: 0xCEDD,
+ 25357 - 11904: 0xCED5,
+ 25358 - 11904: 0xCED8,
+ 25359 - 11904: 0xCEDC,
+ 25360 - 11904: 0xD1B2,
+ 25361 - 11904: 0xAC44,
+ 25363 - 11904: 0xCEE1,
+ 25364 - 11904: 0xCEE2,
+ 25365 - 11904: 0xCEE4,
+ 25366 - 11904: 0xABF5,
+ 25368 - 11904: 0x8D7C,
+ 25384 - 11904: 0xAEC1,
+ 25385 - 11904: 0xD1BE,
+ 25386 - 11904: 0xAEBF,
+ 25387 - 11904: 0xAEC0,
+ 25388 - 11904: 0xD1B4,
+ 25389 - 11904: 0xD1C4,
+ 25390 - 11904: 0x9ED6,
+ 25391 - 11904: 0xAEB6,
+ 25393 - 11904: 0x93AC,
+ 25394 - 11904: 0xD566,
+ 25395 - 11904: 0xD1C6,
+ 25396 - 11904: 0xD1C0,
+ 25397 - 11904: 0x9F5B,
+ 25398 - 11904: 0xD1B7,
+ 25399 - 11904: 0x93A9,
+ 25400 - 11904: 0xD1C9,
+ 25401 - 11904: 0xD1BA,
+ 25402 - 11904: 0xAEBC,
+ 25403 - 11904: 0xD57D,
+ 25404 - 11904: 0xD1BD,
+ 25405 - 11904: 0xAEBE,
+ 25406 - 11904: 0xAEB5,
+ 25408 - 11904: 0xD1CB,
+ 25409 - 11904: 0xD1BF,
+ 25410 - 11904: 0xAEB8,
+ 25411 - 11904: 0xD1B8,
+ 25412 - 11904: 0xD1B5,
+ 25413 - 11904: 0xD1B6,
+ 25414 - 11904: 0xAEB9,
+ 25415 - 11904: 0xD1C5,
+ 25416 - 11904: 0xD1CC,
+ 25417 - 11904: 0xAEBB,
+ 25418 - 11904: 0xD1BC,
+ 25419 - 11904: 0xD1BB,
+ 25420 - 11904: 0xAEC3,
+ 25421 - 11904: 0xAEC2,
+ 25422 - 11904: 0xAEB4,
+ 25423 - 11904: 0xAEBA,
+ 25424 - 11904: 0xAEBD,
+ 25425 - 11904: 0xD1C8,
+ 25428 - 11904: 0xD1C2,
+ 25429 - 11904: 0xAEB7,
+ 25430 - 11904: 0xD1B3,
+ 25431 - 11904: 0xD1CA,
+ 25432 - 11904: 0xD1C1,
+ 25433 - 11904: 0xD1C3,
+ 25434 - 11904: 0xD1C7,
+ 25444 - 11904: 0xA07C,
+ 25445 - 11904: 0xD567,
+ 25447 - 11904: 0xB1B7,
+ 25448 - 11904: 0xB1CB,
+ 25449 - 11904: 0xB1CA,
+ 25451 - 11904: 0xB1BF,
+ 25452 - 11904: 0xFCB2,
+ 25453 - 11904: 0xD579,
+ 25454 - 11904: 0xD575,
+ 25455 - 11904: 0xD572,
+ 25456 - 11904: 0xD5A6,
+ 25457 - 11904: 0xB1BA,
+ 25458 - 11904: 0xB1B2,
+ 25461 - 11904: 0xD577,
+ 25462 - 11904: 0xB4A8,
+ 25463 - 11904: 0xB1B6,
+ 25464 - 11904: 0xD5A1,
+ 25465 - 11904: 0x8AC1,
+ 25466 - 11904: 0xB1CC,
+ 25467 - 11904: 0xB1C9,
+ 25468 - 11904: 0xD57B,
+ 25469 - 11904: 0xD56A,
+ 25471 - 11904: 0x9FB4,
+ 25472 - 11904: 0xB1C8,
+ 25473 - 11904: 0xD5A3,
+ 25474 - 11904: 0xD569,
+ 25475 - 11904: 0xB1BD,
+ 25476 - 11904: 0xB1C1,
+ 25477 - 11904: 0xD5A2,
+ 25479 - 11904: 0xD573,
+ 25480 - 11904: 0xB1C2,
+ 25481 - 11904: 0xB1BC,
+ 25482 - 11904: 0xD568,
+ 25483 - 11904: 0xFCAC,
+ 25484 - 11904: 0xB478,
+ 25485 - 11904: 0xD5A5,
+ 25486 - 11904: 0xD571,
+ 25487 - 11904: 0xB1C7,
+ 25488 - 11904: 0xD574,
+ 25489 - 11904: 0xD5A4,
+ 25490 - 11904: 0xB1C6,
+ 25492 - 11904: 0xD952,
+ 25494 - 11904: 0xB1B3,
+ 25495 - 11904: 0xD56F,
+ 25496 - 11904: 0xB1B8,
+ 25497 - 11904: 0xB1C3,
+ 25499 - 11904: 0xB1BE,
+ 25500 - 11904: 0xD578,
+ 25501 - 11904: 0xD56E,
+ 25502 - 11904: 0xD56C,
+ 25503 - 11904: 0xD57E,
+ 25504 - 11904: 0xB1B0,
+ 25505 - 11904: 0xB1C4,
+ 25506 - 11904: 0xB1B4,
+ 25507 - 11904: 0xB477,
+ 25508 - 11904: 0xD57C,
+ 25509 - 11904: 0xB1B5,
+ 25511 - 11904: 0xB1B1,
+ 25512 - 11904: 0xB1C0,
+ 25513 - 11904: 0xB1BB,
+ 25514 - 11904: 0xB1B9,
+ 25515 - 11904: 0xD570,
+ 25516 - 11904: 0xB1C5,
+ 25517 - 11904: 0xD56D,
+ 25518 - 11904: 0xD57A,
+ 25519 - 11904: 0xD576,
+ 25520 - 11904: 0xD954,
+ 25521 - 11904: 0xD953,
+ 25529 - 11904: 0x9E4C,
+ 25533 - 11904: 0xD56B,
+ 25534 - 11904: 0xD964,
+ 25536 - 11904: 0xB47A,
+ 25537 - 11904: 0x8FC5,
+ 25538 - 11904: 0xD96A,
+ 25539 - 11904: 0xD959,
+ 25540 - 11904: 0xD967,
+ 25541 - 11904: 0xDD77,
+ 25542 - 11904: 0xB47D,
+ 25543 - 11904: 0xD96B,
+ 25544 - 11904: 0xD96E,
+ 25545 - 11904: 0xB47C,
+ 25546 - 11904: 0xD95C,
+ 25547 - 11904: 0xD96D,
+ 25548 - 11904: 0xD96C,
+ 25549 - 11904: 0xB47E,
+ 25550 - 11904: 0xD955,
+ 25551 - 11904: 0xB479,
+ 25552 - 11904: 0xB4A3,
+ 25553 - 11904: 0x93AD,
+ 25554 - 11904: 0xB4A1,
+ 25555 - 11904: 0xD969,
+ 25557 - 11904: 0xD95F,
+ 25558 - 11904: 0xB4A5,
+ 25559 - 11904: 0xD970,
+ 25560 - 11904: 0xD968,
+ 25561 - 11904: 0xD971,
+ 25562 - 11904: 0xB4AD,
+ 25563 - 11904: 0xB4AB,
+ 25564 - 11904: 0xD966,
+ 25565 - 11904: 0xD965,
+ 25566 - 11904: 0x9DC3,
+ 25567 - 11904: 0xD963,
+ 25568 - 11904: 0xD95D,
+ 25569 - 11904: 0xB4A4,
+ 25570 - 11904: 0x8DA2,
+ 25571 - 11904: 0xB4A2,
+ 25572 - 11904: 0xD1B9,
+ 25573 - 11904: 0xD956,
+ 25574 - 11904: 0x9D4A,
+ 25575 - 11904: 0xDDB7,
+ 25576 - 11904: 0xD957,
+ 25577 - 11904: 0xB47B,
+ 25578 - 11904: 0xB4AA,
+ 25579 - 11904: 0xDD79,
+ 25581 - 11904: 0xB4A6,
+ 25582 - 11904: 0xB4A7,
+ 25583 - 11904: 0xD958,
+ 25584 - 11904: 0xD96F,
+ 25585 - 11904: 0xDD78,
+ 25586 - 11904: 0xD960,
+ 25587 - 11904: 0xD95B,
+ 25588 - 11904: 0xB4A9,
+ 25589 - 11904: 0xD961,
+ 25590 - 11904: 0xD95E,
+ 25592 - 11904: 0xFCB6,
+ 25593 - 11904: 0xB4AE,
+ 25595 - 11904: 0x8DA3,
+ 25596 - 11904: 0x9E4B,
+ 25598 - 11904: 0x9E4D,
+ 25606 - 11904: 0xB770,
+ 25607 - 11904: 0x8DA4,
+ 25609 - 11904: 0xDD7C,
+ 25610 - 11904: 0xDDB1,
+ 25611 - 11904: 0xDDB6,
+ 25612 - 11904: 0xDDAA,
+ 25613 - 11904: 0xB76C,
+ 25614 - 11904: 0xDDBB,
+ 25615 - 11904: 0xB769,
+ 25616 - 11904: 0xDD7A,
+ 25618 - 11904: 0xDD7B,
+ 25619 - 11904: 0xB762,
+ 25620 - 11904: 0xB76B,
+ 25621 - 11904: 0xDDA4,
+ 25622 - 11904: 0xB76E,
+ 25623 - 11904: 0xB76F,
+ 25624 - 11904: 0xDDA5,
+ 25626 - 11904: 0xDDB2,
+ 25627 - 11904: 0xDDB8,
+ 25628 - 11904: 0xB76A,
+ 25630 - 11904: 0xB764,
+ 25631 - 11904: 0xDDA3,
+ 25632 - 11904: 0xDD7D,
+ 25633 - 11904: 0xDDBA,
+ 25634 - 11904: 0xDDA8,
+ 25635 - 11904: 0xDDA9,
+ 25636 - 11904: 0xDD7E,
+ 25637 - 11904: 0xDDB4,
+ 25638 - 11904: 0xDDAB,
+ 25639 - 11904: 0xDDB5,
+ 25640 - 11904: 0xDDAD,
+ 25642 - 11904: 0xB765,
+ 25643 - 11904: 0xE1D9,
+ 25644 - 11904: 0xB768,
+ 25645 - 11904: 0xB766,
+ 25646 - 11904: 0xDDB9,
+ 25647 - 11904: 0xDDB0,
+ 25648 - 11904: 0xDDAC,
+ 25650 - 11904: 0x8AFD,
+ 25651 - 11904: 0xDDA1,
+ 25652 - 11904: 0xBA53,
+ 25653 - 11904: 0xDDAF,
+ 25654 - 11904: 0xB76D,
+ 25655 - 11904: 0xDDA7,
+ 25656 - 11904: 0xFCB5,
+ 25657 - 11904: 0xDDA6,
+ 25658 - 11904: 0xFCC3,
+ 25659 - 11904: 0x93B2,
+ 25661 - 11904: 0xB767,
+ 25662 - 11904: 0xB763,
+ 25663 - 11904: 0xE1EE,
+ 25664 - 11904: 0xDDB3,
+ 25665 - 11904: 0xDDAE,
+ 25667 - 11904: 0xDDA2,
+ 25675 - 11904: 0xE1E9,
+ 25677 - 11904: 0xE1DA,
+ 25678 - 11904: 0xE1E5,
+ 25680 - 11904: 0xE1EC,
+ 25681 - 11904: 0xBA51,
+ 25682 - 11904: 0xB4AC,
+ 25683 - 11904: 0xE1EA,
+ 25684 - 11904: 0xBA4C,
+ 25688 - 11904: 0xBA4B,
+ 25689 - 11904: 0xE1F1,
+ 25690 - 11904: 0x8DA5,
+ 25691 - 11904: 0xE1DB,
+ 25692 - 11904: 0xE1E8,
+ 25693 - 11904: 0xE1DC,
+ 25694 - 11904: 0xE1E7,
+ 25695 - 11904: 0xBA4F,
+ 25696 - 11904: 0xE1EB,
+ 25697 - 11904: 0xD962,
+ 25701 - 11904: 0xE1F2,
+ 25702 - 11904: 0xE1E3,
+ 25703 - 11904: 0xBA52,
+ 25704 - 11904: 0xE5BA,
+ 25705 - 11904: 0xBCAF,
+ 25707 - 11904: 0xE1F0,
+ 25708 - 11904: 0xE1EF,
+ 25709 - 11904: 0xBA54,
+ 25710 - 11904: 0xE5AD,
+ 25711 - 11904: 0xBCB0,
+ 25712 - 11904: 0xE5AE,
+ 25713 - 11904: 0x93A1,
+ 25714 - 11904: 0xE1DF,
+ 25715 - 11904: 0xE1E0,
+ 25716 - 11904: 0xE1DD,
+ 25717 - 11904: 0xE1E2,
+ 25718 - 11904: 0xE1DE,
+ 25719 - 11904: 0xE1F3,
+ 25720 - 11904: 0xBA4E,
+ 25721 - 11904: 0xBCB1,
+ 25722 - 11904: 0xBA50,
+ 25723 - 11904: 0xBA55,
+ 25724 - 11904: 0x8AC6,
+ 25725 - 11904: 0xE1E1,
+ 25727 - 11904: 0xE1ED,
+ 25730 - 11904: 0xE1E6,
+ 25733 - 11904: 0xE5B1,
+ 25735 - 11904: 0xBA4A,
+ 25736 - 11904: 0xBCB4,
+ 25737 - 11904: 0xE9AA,
+ 25738 - 11904: 0xE5B6,
+ 25739 - 11904: 0xE5B5,
+ 25740 - 11904: 0xE5B7,
+ 25741 - 11904: 0x8A5B,
+ 25743 - 11904: 0xE5B4,
+ 25744 - 11904: 0xFCB9,
+ 25745 - 11904: 0x894D,
+ 25746 - 11904: 0xBCBB,
+ 25747 - 11904: 0xBCB8,
+ 25749 - 11904: 0xBCB9,
+ 25750 - 11904: 0xE5AF,
+ 25751 - 11904: 0xE5B2,
+ 25752 - 11904: 0xE5BC,
+ 25753 - 11904: 0xBCC1,
+ 25754 - 11904: 0xBCBF,
+ 25756 - 11904: 0xE5B3,
+ 25757 - 11904: 0xD95A,
+ 25758 - 11904: 0xBCB2,
+ 25759 - 11904: 0xE5B9,
+ 25760 - 11904: 0xE5B0,
+ 25762 - 11904: 0xBCC2,
+ 25763 - 11904: 0xE5B8,
+ 25764 - 11904: 0xBA4D,
+ 25765 - 11904: 0xBCB7,
+ 25766 - 11904: 0xE1E4,
+ 25769 - 11904: 0xBCBA,
+ 25771 - 11904: 0xBCBE,
+ 25772 - 11904: 0xBCC0,
+ 25773 - 11904: 0xBCBD,
+ 25774 - 11904: 0xBCBC,
+ 25775 - 11904: 0xFED4,
+ 25776 - 11904: 0xBCB6,
+ 25777 - 11904: 0xE5BB,
+ 25778 - 11904: 0xBCB3,
+ 25779 - 11904: 0xBCC3,
+ 25780 - 11904: 0x8A78,
+ 25782 - 11904: 0x93AB,
+ 25787 - 11904: 0xBED8,
+ 25788 - 11904: 0xBED9,
+ 25789 - 11904: 0xE9A9,
+ 25790 - 11904: 0xBEE2,
+ 25791 - 11904: 0xBEDF,
+ 25792 - 11904: 0x8DA7,
+ 25793 - 11904: 0xBED6,
+ 25794 - 11904: 0xBEDD,
+ 25795 - 11904: 0xE9AB,
+ 25796 - 11904: 0xBEDB,
+ 25797 - 11904: 0xBED5,
+ 25799 - 11904: 0xBEDC,
+ 25801 - 11904: 0xE9A8,
+ 25802 - 11904: 0xC0BB,
+ 25803 - 11904: 0xBED7,
+ 25805 - 11904: 0xBEDE,
+ 25806 - 11904: 0xC0BA,
+ 25807 - 11904: 0xE9A7,
+ 25808 - 11904: 0xE9A6,
+ 25810 - 11904: 0xBEE0,
+ 25811 - 11904: 0x9F45,
+ 25812 - 11904: 0xBEE1,
+ 25814 - 11904: 0xE9A5,
+ 25815 - 11904: 0xE9A4,
+ 25816 - 11904: 0xC0BC,
+ 25817 - 11904: 0xE9AE,
+ 25818 - 11904: 0xBEDA,
+ 25819 - 11904: 0xE9AC,
+ 25821 - 11904: 0x8A56,
+ 25824 - 11904: 0xC0BD,
+ 25825 - 11904: 0xFCBF,
+ 25826 - 11904: 0xC0C2,
+ 25827 - 11904: 0xECEA,
+ 25828 - 11904: 0xECEC,
+ 25829 - 11904: 0xFCC0,
+ 25830 - 11904: 0xC0BF,
+ 25831 - 11904: 0x8EE6,
+ 25832 - 11904: 0xECED,
+ 25833 - 11904: 0xECE9,
+ 25834 - 11904: 0x8AA4,
+ 25835 - 11904: 0xECEB,
+ 25836 - 11904: 0xC0C0,
+ 25837 - 11904: 0xC0C3,
+ 25839 - 11904: 0xECE8,
+ 25840 - 11904: 0xC0BE,
+ 25841 - 11904: 0xC0C1,
+ 25842 - 11904: 0xC259,
+ 25843 - 11904: 0xE9AD,
+ 25844 - 11904: 0xC258,
+ 25847 - 11904: 0xC25E,
+ 25848 - 11904: 0xEFD4,
+ 25850 - 11904: 0xC25C,
+ 25851 - 11904: 0xC25D,
+ 25852 - 11904: 0xEFD7,
+ 25853 - 11904: 0xEFD3,
+ 25854 - 11904: 0xC25A,
+ 25855 - 11904: 0xEFD1,
+ 25856 - 11904: 0xC36B,
+ 25857 - 11904: 0xEFD5,
+ 25859 - 11904: 0xEFD6,
+ 25860 - 11904: 0xEFD2,
+ 25862 - 11904: 0xC25B,
+ 25863 - 11904: 0xF242,
+ 25865 - 11904: 0xF245,
+ 25866 - 11904: 0x8943,
+ 25868 - 11904: 0xF246,
+ 25869 - 11904: 0xF244,
+ 25870 - 11904: 0xF247,
+ 25871 - 11904: 0xC36C,
+ 25872 - 11904: 0xF243,
+ 25873 - 11904: 0x93F3,
+ 25875 - 11904: 0xF44E,
+ 25876 - 11904: 0xC464,
+ 25877 - 11904: 0xF44D,
+ 25878 - 11904: 0xF44C,
+ 25879 - 11904: 0xF44B,
+ 25880 - 11904: 0xC463,
+ 25881 - 11904: 0xC465,
+ 25883 - 11904: 0xF5CD,
+ 25884 - 11904: 0xC4E2,
+ 25885 - 11904: 0xC4E1,
+ 25886 - 11904: 0xFCAB,
+ 25887 - 11904: 0x9EA2,
+ 25888 - 11904: 0xF6E1,
+ 25889 - 11904: 0xF6E0,
+ 25890 - 11904: 0xF6E3,
+ 25891 - 11904: 0xC5CB,
+ 25892 - 11904: 0xC575,
+ 25893 - 11904: 0xF7DD,
+ 25894 - 11904: 0xF6E2,
+ 25897 - 11904: 0xF7DC,
+ 25898 - 11904: 0xC5CD,
+ 25899 - 11904: 0xC5CC,
+ 25900 - 11904: 0xC5F3,
+ 25901 - 11904: 0xF8A9,
+ 25902 - 11904: 0xF8EF,
+ 25903 - 11904: 0xA4E4,
+ 25904 - 11904: 0x9DC7,
+ 25906 - 11904: 0xD972,
+ 25907 - 11904: 0xE9AF,
+ 25908 - 11904: 0xC6D2,
+ 25909 - 11904: 0x8BCE,
+ 25910 - 11904: 0xA6AC,
+ 25911 - 11904: 0xCAF7,
+ 25912 - 11904: 0xA7F1,
+ 25913 - 11904: 0xA7EF,
+ 25915 - 11904: 0xA7F0,
+ 25917 - 11904: 0xCCC1,
+ 25918 - 11904: 0xA9F1,
+ 25919 - 11904: 0xAC46,
+ 25921 - 11904: 0xCEE7,
+ 25923 - 11904: 0xCEE8,
+ 25925 - 11904: 0xAC47,
+ 25926 - 11904: 0xD1CE,
+ 25928 - 11904: 0xAEC4,
+ 25929 - 11904: 0xAEC5,
+ 25930 - 11904: 0xD1CD,
+ 25933 - 11904: 0xFCC5,
+ 25935 - 11904: 0xB1D3,
+ 25937 - 11904: 0xB1CF,
+ 25939 - 11904: 0xD5A7,
+ 25940 - 11904: 0xB1D6,
+ 25941 - 11904: 0xB1D5,
+ 25942 - 11904: 0xB1CE,
+ 25943 - 11904: 0xB1D1,
+ 25944 - 11904: 0xB1D4,
+ 25945 - 11904: 0xB1D0,
+ 25948 - 11904: 0xD976,
+ 25949 - 11904: 0xB1CD,
+ 25950 - 11904: 0xB4AF,
+ 25951 - 11904: 0xFCCB,
+ 25954 - 11904: 0xB4B1,
+ 25955 - 11904: 0xB4B2,
+ 25956 - 11904: 0xD975,
+ 25957 - 11904: 0xD978,
+ 25958 - 11904: 0xB4B0,
+ 25959 - 11904: 0xD973,
+ 25960 - 11904: 0xD977,
+ 25962 - 11904: 0xD974,
+ 25963 - 11904: 0x93B3,
+ 25964 - 11904: 0xB771,
+ 25965 - 11904: 0xFCCA,
+ 25967 - 11904: 0xDDBC,
+ 25970 - 11904: 0xBA56,
+ 25971 - 11904: 0xE1F4,
+ 25972 - 11904: 0xBEE3,
+ 25973 - 11904: 0xBCC4,
+ 25974 - 11904: 0xE5BD,
+ 25975 - 11904: 0xBCC5,
+ 25976 - 11904: 0xBCC6,
+ 25977 - 11904: 0xE5BF,
+ 25978 - 11904: 0xE5BE,
+ 25979 - 11904: 0xE5C0,
+ 25980 - 11904: 0xE9B1,
+ 25983 - 11904: 0xE9B0,
+ 25984 - 11904: 0xECEF,
+ 25985 - 11904: 0xECEE,
+ 25986 - 11904: 0xC0C4,
+ 25987 - 11904: 0xC0C5,
+ 25988 - 11904: 0xF248,
+ 25989 - 11904: 0xFCC9,
+ 25990 - 11904: 0x8DAC,
+ 25991 - 11904: 0xA4E5,
+ 25992 - 11904: 0xFBC6,
+ 25993 - 11904: 0x8967,
+ 25995 - 11904: 0x8C7E,
+ 25996 - 11904: 0xD979,
+ 26000 - 11904: 0xB4B4,
+ 26001 - 11904: 0xB4B3,
+ 26002 - 11904: 0xDDBD,
+ 26004 - 11904: 0xEFD8,
+ 26005 - 11904: 0xC4E3,
+ 26006 - 11904: 0xF7DE,
+ 26007 - 11904: 0xA4E6,
+ 26009 - 11904: 0xAEC6,
+ 26011 - 11904: 0xB1D8,
+ 26012 - 11904: 0xB1D7,
+ 26013 - 11904: 0xD97A,
+ 26014 - 11904: 0xD97B,
+ 26015 - 11904: 0xB772,
+ 26016 - 11904: 0xE1F5,
+ 26017 - 11904: 0xBA57,
+ 26018 - 11904: 0xE9B2,
+ 26020 - 11904: 0xA4E7,
+ 26021 - 11904: 0xA5B8,
+ 26023 - 11904: 0xA9F2,
+ 26024 - 11904: 0xCCC2,
+ 26026 - 11904: 0xCEE9,
+ 26027 - 11904: 0xAC48,
+ 26028 - 11904: 0xB1D9,
+ 26030 - 11904: 0xD97C,
+ 26031 - 11904: 0xB4B5,
+ 26032 - 11904: 0xB773,
+ 26034 - 11904: 0xE5C1,
+ 26035 - 11904: 0xE5C2,
+ 26037 - 11904: 0xFCCD,
+ 26038 - 11904: 0xECF0,
+ 26039 - 11904: 0xC25F,
+ 26040 - 11904: 0xF8F0,
+ 26041 - 11904: 0xA4E8,
+ 26043 - 11904: 0xCCC3,
+ 26044 - 11904: 0xA9F3,
+ 26045 - 11904: 0xAC49,
+ 26046 - 11904: 0x9CF3,
+ 26047 - 11904: 0xCEEA,
+ 26049 - 11904: 0xAEC7,
+ 26050 - 11904: 0xD1D2,
+ 26051 - 11904: 0xD1D0,
+ 26052 - 11904: 0xD1D1,
+ 26053 - 11904: 0xAEC8,
+ 26054 - 11904: 0xD1CF,
+ 26059 - 11904: 0xB1DB,
+ 26060 - 11904: 0xB1DC,
+ 26061 - 11904: 0xD5A8,
+ 26062 - 11904: 0xB1DD,
+ 26063 - 11904: 0xB1DA,
+ 26064 - 11904: 0xD97D,
+ 26065 - 11904: 0xFCD0,
+ 26066 - 11904: 0xD97E,
+ 26067 - 11904: 0xDDBE,
+ 26068 - 11904: 0x95BB,
+ 26070 - 11904: 0xBA59,
+ 26071 - 11904: 0xBA58,
+ 26074 - 11904: 0xECF1,
+ 26075 - 11904: 0xEFD9,
+ 26077 - 11904: 0xF24A,
+ 26078 - 11904: 0xF249,
+ 26079 - 11904: 0xF44F,
+ 26080 - 11904: 0xFCD3,
+ 26081 - 11904: 0xC95E,
+ 26082 - 11904: 0xAC4A,
+ 26083 - 11904: 0xFCD4,
+ 26085 - 11904: 0xA4E9,
+ 26086 - 11904: 0xA5B9,
+ 26088 - 11904: 0xA6AE,
+ 26089 - 11904: 0xA6AD,
+ 26092 - 11904: 0xA6AF,
+ 26093 - 11904: 0xA6B0,
+ 26094 - 11904: 0xC9EE,
+ 26095 - 11904: 0xC9ED,
+ 26096 - 11904: 0xCAF8,
+ 26097 - 11904: 0xA7F2,
+ 26098 - 11904: 0xCAFB,
+ 26099 - 11904: 0xCAFA,
+ 26100 - 11904: 0xCAF9,
+ 26101 - 11904: 0xCAFC,
+ 26106 - 11904: 0xA9F4,
+ 26107 - 11904: 0xCCC9,
+ 26108 - 11904: 0xCCC5,
+ 26109 - 11904: 0xCCCE,
+ 26111 - 11904: 0x8DAE,
+ 26112 - 11904: 0xA9FB,
+ 26114 - 11904: 0xA9F9,
+ 26115 - 11904: 0xCCCA,
+ 26116 - 11904: 0xCCC6,
+ 26117 - 11904: 0xCCCD,
+ 26118 - 11904: 0xA9F8,
+ 26119 - 11904: 0xAA40,
+ 26120 - 11904: 0xCCC8,
+ 26121 - 11904: 0xCCC4,
+ 26122 - 11904: 0xA9FE,
+ 26123 - 11904: 0xCCCB,
+ 26124 - 11904: 0xA9F7,
+ 26125 - 11904: 0xCCCC,
+ 26126 - 11904: 0xA9FA,
+ 26127 - 11904: 0xA9FC,
+ 26128 - 11904: 0xCCD0,
+ 26129 - 11904: 0xCCCF,
+ 26130 - 11904: 0xCCC7,
+ 26131 - 11904: 0xA9F6,
+ 26132 - 11904: 0xA9F5,
+ 26133 - 11904: 0xA9FD,
+ 26136 - 11904: 0xFCD7,
+ 26140 - 11904: 0xCEEF,
+ 26141 - 11904: 0xCEF5,
+ 26142 - 11904: 0x93DB,
+ 26143 - 11904: 0xAC50,
+ 26144 - 11904: 0xAC4D,
+ 26145 - 11904: 0xCEEC,
+ 26146 - 11904: 0xCEF1,
+ 26147 - 11904: 0xFE63,
+ 26148 - 11904: 0xAC53,
+ 26149 - 11904: 0xAC4B,
+ 26150 - 11904: 0xCEF0,
+ 26151 - 11904: 0xAC4E,
+ 26152 - 11904: 0xAC51,
+ 26155 - 11904: 0xCEF3,
+ 26157 - 11904: 0xAC4C,
+ 26158 - 11904: 0xCEF8,
+ 26159 - 11904: 0xAC4F,
+ 26160 - 11904: 0x93D5,
+ 26161 - 11904: 0xAC52,
+ 26162 - 11904: 0xCEED,
+ 26163 - 11904: 0xCEF2,
+ 26164 - 11904: 0xCEF6,
+ 26165 - 11904: 0xCEEE,
+ 26166 - 11904: 0xCEEB,
+ 26169 - 11904: 0xCEF7,
+ 26170 - 11904: 0xCEF4,
+ 26177 - 11904: 0xAED0,
+ 26178 - 11904: 0xAEC9,
+ 26179 - 11904: 0xAECC,
+ 26180 - 11904: 0xFCDA,
+ 26181 - 11904: 0xAECF,
+ 26183 - 11904: 0xD1D5,
+ 26184 - 11904: 0x9B71,
+ 26185 - 11904: 0xAECA,
+ 26186 - 11904: 0xD1D3,
+ 26187 - 11904: 0xFCDD,
+ 26188 - 11904: 0xAECE,
+ 26189 - 11904: 0x8764,
+ 26191 - 11904: 0xAECB,
+ 26193 - 11904: 0xD1D6,
+ 26194 - 11904: 0xAECD,
+ 26195 - 11904: 0x8DAF,
+ 26199 - 11904: 0xFAF2,
+ 26201 - 11904: 0xD5AC,
+ 26202 - 11904: 0xB1DF,
+ 26203 - 11904: 0xD5AB,
+ 26204 - 11904: 0xD5AD,
+ 26205 - 11904: 0xB1DE,
+ 26206 - 11904: 0xB1E3,
+ 26207 - 11904: 0xD1D4,
+ 26208 - 11904: 0x87B5,
+ 26209 - 11904: 0xD5AA,
+ 26210 - 11904: 0xD5AE,
+ 26211 - 11904: 0x93D8,
+ 26212 - 11904: 0xB1E0,
+ 26213 - 11904: 0xD5A9,
+ 26214 - 11904: 0xB1E2,
+ 26215 - 11904: 0xFCDF,
+ 26216 - 11904: 0xB1E1,
+ 26218 - 11904: 0xD9A7,
+ 26219 - 11904: 0x93D3,
+ 26220 - 11904: 0xD9A2,
+ 26222 - 11904: 0xB4B6,
+ 26223 - 11904: 0xB4BA,
+ 26224 - 11904: 0xB4B7,
+ 26225 - 11904: 0xD9A5,
+ 26226 - 11904: 0xD9A8,
+ 26227 - 11904: 0xFCE1,
+ 26228 - 11904: 0xFCE2,
+ 26230 - 11904: 0xB4B9,
+ 26231 - 11904: 0xB4BE,
+ 26232 - 11904: 0xDDC7,
+ 26233 - 11904: 0xD9A6,
+ 26234 - 11904: 0xB4BC,
+ 26235 - 11904: 0xD9A3,
+ 26236 - 11904: 0xD9A1,
+ 26237 - 11904: 0x8E76,
+ 26238 - 11904: 0xB4BD,
+ 26240 - 11904: 0xD9A4,
+ 26244 - 11904: 0xB779,
+ 26245 - 11904: 0xFC62,
+ 26246 - 11904: 0xDDBF,
+ 26247 - 11904: 0xB776,
+ 26248 - 11904: 0xB777,
+ 26249 - 11904: 0xB775,
+ 26250 - 11904: 0xDDC4,
+ 26251 - 11904: 0xDDC3,
+ 26252 - 11904: 0xDDC0,
+ 26253 - 11904: 0xB77B,
+ 26254 - 11904: 0x93D1,
+ 26256 - 11904: 0xDDC2,
+ 26257 - 11904: 0xB4BB,
+ 26258 - 11904: 0x8DB1,
+ 26260 - 11904: 0xDDC6,
+ 26261 - 11904: 0xDDC1,
+ 26262 - 11904: 0xB778,
+ 26263 - 11904: 0xB774,
+ 26264 - 11904: 0xB77A,
+ 26265 - 11904: 0xDDC5,
+ 26266 - 11904: 0x9859,
+ 26269 - 11904: 0xBA5C,
+ 26271 - 11904: 0xE1F8,
+ 26272 - 11904: 0xE1F7,
+ 26273 - 11904: 0xE1F6,
+ 26274 - 11904: 0xBA5A,
+ 26276 - 11904: 0xFB52,
+ 26280 - 11904: 0xBA5B,
+ 26281 - 11904: 0xE5C5,
+ 26282 - 11904: 0xE5C8,
+ 26283 - 11904: 0xBCC8,
+ 26285 - 11904: 0xFB53,
+ 26286 - 11904: 0xBCC7,
+ 26287 - 11904: 0xE5C9,
+ 26288 - 11904: 0xE5C4,
+ 26289 - 11904: 0xBCCA,
+ 26290 - 11904: 0xE5C6,
+ 26291 - 11904: 0xFB4D,
+ 26292 - 11904: 0xBCC9,
+ 26293 - 11904: 0xE5C3,
+ 26294 - 11904: 0x9CBF,
+ 26295 - 11904: 0xE5C7,
+ 26296 - 11904: 0xBEE9,
+ 26297 - 11904: 0xBEE6,
+ 26298 - 11904: 0xE9BB,
+ 26299 - 11904: 0xE9BA,
+ 26301 - 11904: 0xE9B9,
+ 26302 - 11904: 0xE9B4,
+ 26303 - 11904: 0x9B72,
+ 26304 - 11904: 0xE9B5,
+ 26308 - 11904: 0xBEE7,
+ 26310 - 11904: 0xBEE4,
+ 26311 - 11904: 0xBEE8,
+ 26312 - 11904: 0xE9B3,
+ 26313 - 11904: 0xBEE5,
+ 26314 - 11904: 0xE9B6,
+ 26315 - 11904: 0xE9B7,
+ 26316 - 11904: 0xE9BC,
+ 26317 - 11904: 0xFB50,
+ 26318 - 11904: 0x93BE,
+ 26319 - 11904: 0xE9B8,
+ 26322 - 11904: 0xECF2,
+ 26326 - 11904: 0xC0C7,
+ 26328 - 11904: 0xEFDC,
+ 26329 - 11904: 0xC0C6,
+ 26330 - 11904: 0xEFDA,
+ 26331 - 11904: 0xEFDB,
+ 26332 - 11904: 0xC260,
+ 26333 - 11904: 0xC36E,
+ 26334 - 11904: 0xF24B,
+ 26336 - 11904: 0xC36D,
+ 26339 - 11904: 0xF451,
+ 26340 - 11904: 0xF452,
+ 26342 - 11904: 0xC466,
+ 26343 - 11904: 0x8CDB,
+ 26344 - 11904: 0xF450,
+ 26345 - 11904: 0xC4E4,
+ 26347 - 11904: 0xF7DF,
+ 26348 - 11904: 0xC5CE,
+ 26349 - 11904: 0xF8AA,
+ 26350 - 11904: 0xF8AB,
+ 26352 - 11904: 0xA4EA,
+ 26353 - 11904: 0x9DF1,
+ 26354 - 11904: 0xA6B1,
+ 26355 - 11904: 0xA6B2,
+ 26356 - 11904: 0xA7F3,
+ 26358 - 11904: 0xCCD1,
+ 26359 - 11904: 0xAC54,
+ 26360 - 11904: 0xAED1,
+ 26361 - 11904: 0xB1E4,
+ 26364 - 11904: 0xB0D2,
+ 26366 - 11904: 0xB4BF,
+ 26367 - 11904: 0xB4C0,
+ 26368 - 11904: 0xB3CC,
+ 26369 - 11904: 0xD9A9,
+ 26370 - 11904: 0xFCEB,
+ 26371 - 11904: 0xB77C,
+ 26372 - 11904: 0xE1FA,
+ 26373 - 11904: 0xE1F9,
+ 26376 - 11904: 0xA4EB,
+ 26377 - 11904: 0xA6B3,
+ 26378 - 11904: 0xCCD2,
+ 26379 - 11904: 0xAA42,
+ 26380 - 11904: 0xA0BB,
+ 26381 - 11904: 0xAA41,
+ 26382 - 11904: 0x9B7E,
+ 26383 - 11904: 0xCEF9,
+ 26384 - 11904: 0xCEFA,
+ 26386 - 11904: 0xD1D7,
+ 26387 - 11904: 0xD1D8,
+ 26388 - 11904: 0xAED2,
+ 26389 - 11904: 0xAED3,
+ 26390 - 11904: 0x8DB3,
+ 26391 - 11904: 0xAED4,
+ 26392 - 11904: 0xD5AF,
+ 26393 - 11904: 0x8C52,
+ 26395 - 11904: 0xB1E6,
+ 26397 - 11904: 0xB4C2,
+ 26398 - 11904: 0x9AE8,
+ 26399 - 11904: 0xB4C1,
+ 26400 - 11904: 0xDDC8,
+ 26401 - 11904: 0xDF7A,
+ 26402 - 11904: 0xE1FB,
+ 26403 - 11904: 0xE9BD,
+ 26405 - 11904: 0x8EDC,
+ 26406 - 11904: 0xC261,
+ 26407 - 11904: 0xC467,
+ 26408 - 11904: 0xA4EC,
+ 26410 - 11904: 0xA5BC,
+ 26411 - 11904: 0xA5BD,
+ 26412 - 11904: 0xA5BB,
+ 26413 - 11904: 0xA5BE,
+ 26414 - 11904: 0xA5BA,
+ 26417 - 11904: 0xA6B6,
+ 26419 - 11904: 0xC9F6,
+ 26420 - 11904: 0xA6B5,
+ 26421 - 11904: 0xA6B7,
+ 26422 - 11904: 0x9CF9,
+ 26424 - 11904: 0xC9F1,
+ 26425 - 11904: 0xC9F0,
+ 26426 - 11904: 0xC9F3,
+ 26427 - 11904: 0xC9F2,
+ 26428 - 11904: 0xC9F5,
+ 26429 - 11904: 0xA6B4,
+ 26430 - 11904: 0xC9EF,
+ 26431 - 11904: 0xC9F4,
+ 26436 - 11904: 0xFA50,
+ 26437 - 11904: 0xCAFD,
+ 26438 - 11904: 0xA7FD,
+ 26439 - 11904: 0xCAFE,
+ 26440 - 11904: 0xCB43,
+ 26441 - 11904: 0xA7FC,
+ 26443 - 11904: 0xCB47,
+ 26444 - 11904: 0xCB42,
+ 26445 - 11904: 0xCB45,
+ 26446 - 11904: 0xA7F5,
+ 26447 - 11904: 0xA7F6,
+ 26448 - 11904: 0xA7F7,
+ 26449 - 11904: 0xA7F8,
+ 26451 - 11904: 0xA840,
+ 26453 - 11904: 0xCB41,
+ 26454 - 11904: 0xA7FA,
+ 26455 - 11904: 0xA841,
+ 26457 - 11904: 0xCB40,
+ 26458 - 11904: 0xCB46,
+ 26460 - 11904: 0xA7F9,
+ 26461 - 11904: 0xCB44,
+ 26462 - 11904: 0xFCF1,
+ 26463 - 11904: 0xA7F4,
+ 26464 - 11904: 0xA7FE,
+ 26465 - 11904: 0x98E7,
+ 26466 - 11904: 0xFCF3,
+ 26471 - 11904: 0xFCF2,
+ 26474 - 11904: 0xAA57,
+ 26475 - 11904: 0x8CCA,
+ 26476 - 11904: 0xCCD4,
+ 26477 - 11904: 0xAA43,
+ 26478 - 11904: 0x8775,
+ 26479 - 11904: 0xAA4D,
+ 26480 - 11904: 0xAA4E,
+ 26481 - 11904: 0xAA46,
+ 26482 - 11904: 0xAA58,
+ 26483 - 11904: 0xAA48,
+ 26484 - 11904: 0xCCDC,
+ 26485 - 11904: 0xAA53,
+ 26486 - 11904: 0xCCD7,
+ 26487 - 11904: 0xAA49,
+ 26488 - 11904: 0xCCE6,
+ 26489 - 11904: 0xCCE7,
+ 26490 - 11904: 0xCCDF,
+ 26491 - 11904: 0xCCD8,
+ 26492 - 11904: 0xAA56,
+ 26493 - 11904: 0xCCE4,
+ 26494 - 11904: 0xAA51,
+ 26495 - 11904: 0xAA4F,
+ 26497 - 11904: 0xCCE5,
+ 26498 - 11904: 0x87BA,
+ 26499 - 11904: 0xCCE3,
+ 26500 - 11904: 0xCCDB,
+ 26501 - 11904: 0xCCD3,
+ 26502 - 11904: 0xCCDA,
+ 26503 - 11904: 0xAA4A,
+ 26505 - 11904: 0xAA50,
+ 26507 - 11904: 0xAA44,
+ 26508 - 11904: 0xCCDE,
+ 26509 - 11904: 0xCCDD,
+ 26510 - 11904: 0xCCD5,
+ 26511 - 11904: 0x93E5,
+ 26512 - 11904: 0xAA52,
+ 26513 - 11904: 0xCCE1,
+ 26514 - 11904: 0xCCD6,
+ 26515 - 11904: 0xAA55,
+ 26516 - 11904: 0xCCE8,
+ 26517 - 11904: 0xAA45,
+ 26519 - 11904: 0xAA4C,
+ 26520 - 11904: 0xCCD9,
+ 26521 - 11904: 0xCCE2,
+ 26522 - 11904: 0xAA54,
+ 26524 - 11904: 0xAA47,
+ 26525 - 11904: 0xAA4B,
+ 26527 - 11904: 0xCCE0,
+ 26528 - 11904: 0x9A59,
+ 26532 - 11904: 0x8DB5,
+ 26540 - 11904: 0xFD4D,
+ 26542 - 11904: 0xCF5B,
+ 26543 - 11904: 0xAC5C,
+ 26544 - 11904: 0xAC69,
+ 26545 - 11904: 0xFD5E,
+ 26546 - 11904: 0xCF56,
+ 26547 - 11904: 0xCF4C,
+ 26548 - 11904: 0xAC62,
+ 26549 - 11904: 0xCF4A,
+ 26550 - 11904: 0xAC5B,
+ 26551 - 11904: 0xCF45,
+ 26552 - 11904: 0xAC65,
+ 26553 - 11904: 0xCF52,
+ 26554 - 11904: 0xCEFE,
+ 26555 - 11904: 0xCF41,
+ 26559 - 11904: 0x8F7D,
+ 26560 - 11904: 0xCF44,
+ 26561 - 11904: 0xCEFB,
+ 26562 - 11904: 0xCF51,
+ 26563 - 11904: 0xCF61,
+ 26564 - 11904: 0xAC60,
+ 26565 - 11904: 0xCF46,
+ 26566 - 11904: 0xCF58,
+ 26568 - 11904: 0xCEFD,
+ 26569 - 11904: 0xCF5F,
+ 26570 - 11904: 0xCF60,
+ 26571 - 11904: 0xCF63,
+ 26572 - 11904: 0xCF5A,
+ 26573 - 11904: 0xCF4B,
+ 26574 - 11904: 0xCF53,
+ 26575 - 11904: 0xAC66,
+ 26576 - 11904: 0xAC59,
+ 26577 - 11904: 0xAC61,
+ 26578 - 11904: 0xAC6D,
+ 26579 - 11904: 0xAC56,
+ 26580 - 11904: 0xAC58,
+ 26582 - 11904: 0x9547,
+ 26583 - 11904: 0xFCF6,
+ 26584 - 11904: 0xCF43,
+ 26585 - 11904: 0xAC6A,
+ 26586 - 11904: 0xAC63,
+ 26587 - 11904: 0xCF5D,
+ 26588 - 11904: 0xCF40,
+ 26589 - 11904: 0xAC6C,
+ 26590 - 11904: 0xAC67,
+ 26591 - 11904: 0xCF49,
+ 26594 - 11904: 0xAC6B,
+ 26595 - 11904: 0xCF50,
+ 26596 - 11904: 0xCF48,
+ 26597 - 11904: 0xAC64,
+ 26598 - 11904: 0xCF5C,
+ 26599 - 11904: 0xCF54,
+ 26601 - 11904: 0xAC5E,
+ 26602 - 11904: 0xCF62,
+ 26603 - 11904: 0xCF47,
+ 26604 - 11904: 0xAC5A,
+ 26605 - 11904: 0xCF59,
+ 26606 - 11904: 0xCF4F,
+ 26607 - 11904: 0xAC5F,
+ 26608 - 11904: 0xCF55,
+ 26609 - 11904: 0xAC57,
+ 26610 - 11904: 0xCEFC,
+ 26611 - 11904: 0xAC68,
+ 26612 - 11904: 0xAEE3,
+ 26613 - 11904: 0xAC5D,
+ 26614 - 11904: 0xCF4E,
+ 26615 - 11904: 0xCF4D,
+ 26616 - 11904: 0xCF42,
+ 26617 - 11904: 0x9250,
+ 26618 - 11904: 0xCF5E,
+ 26620 - 11904: 0xCF57,
+ 26622 - 11904: 0x8968,
+ 26623 - 11904: 0xAC55,
+ 26624 - 11904: 0x8DB6,
+ 26625 - 11904: 0xFCFB,
+ 26626 - 11904: 0xA07D,
+ 26627 - 11904: 0x98FC,
+ 26628 - 11904: 0x8969,
+ 26637 - 11904: 0xFE4F,
+ 26640 - 11904: 0x9256,
+ 26642 - 11904: 0xD1EC,
+ 26643 - 11904: 0xAEEA,
+ 26644 - 11904: 0xD1ED,
+ 26646 - 11904: 0xD1E1,
+ 26647 - 11904: 0xAEDF,
+ 26648 - 11904: 0xAEEB,
+ 26650 - 11904: 0xD1DA,
+ 26651 - 11904: 0xFAC9,
+ 26652 - 11904: 0xD1E3,
+ 26653 - 11904: 0xD1EB,
+ 26654 - 11904: 0x93E8,
+ 26655 - 11904: 0xD1D9,
+ 26656 - 11904: 0xD1F4,
+ 26657 - 11904: 0xAED5,
+ 26658 - 11904: 0xFCF8,
+ 26661 - 11904: 0xD1F3,
+ 26662 - 11904: 0xD1EE,
+ 26664 - 11904: 0xD1EF,
+ 26665 - 11904: 0xAEDD,
+ 26666 - 11904: 0xAEE8,
+ 26667 - 11904: 0xD1E5,
+ 26669 - 11904: 0xD1E6,
+ 26670 - 11904: 0xD1F0,
+ 26671 - 11904: 0xD1E7,
+ 26673 - 11904: 0xD1E2,
+ 26674 - 11904: 0xD1DC,
+ 26675 - 11904: 0xD1DD,
+ 26676 - 11904: 0xD1EA,
+ 26677 - 11904: 0xD1E4,
+ 26678 - 11904: 0x9CE3,
+ 26679 - 11904: 0xFDA9,
+ 26680 - 11904: 0xAED6,
+ 26681 - 11904: 0xAEDA,
+ 26682 - 11904: 0xD1F2,
+ 26683 - 11904: 0xD1DE,
+ 26684 - 11904: 0xAEE6,
+ 26685 - 11904: 0xAEE2,
+ 26686 - 11904: 0xFC44,
+ 26688 - 11904: 0xAEE5,
+ 26689 - 11904: 0xAEEC,
+ 26690 - 11904: 0xAEDB,
+ 26691 - 11904: 0xAEE7,
+ 26692 - 11904: 0xD1E9,
+ 26693 - 11904: 0xAEE9,
+ 26694 - 11904: 0xAED8,
+ 26695 - 11904: 0x9640,
+ 26696 - 11904: 0xAED7,
+ 26697 - 11904: 0xD1DB,
+ 26698 - 11904: 0x8DB8,
+ 26699 - 11904: 0xD1DF,
+ 26700 - 11904: 0xAEE0,
+ 26701 - 11904: 0xD1F1,
+ 26702 - 11904: 0xD1E8,
+ 26703 - 11904: 0xD1E0,
+ 26704 - 11904: 0xAEE4,
+ 26705 - 11904: 0xAEE1,
+ 26707 - 11904: 0xAED9,
+ 26708 - 11904: 0xAEDC,
+ 26709 - 11904: 0x9B4A,
+ 26710 - 11904: 0x8FB9,
+ 26717 - 11904: 0xFCFE,
+ 26725 - 11904: 0x896A,
+ 26731 - 11904: 0xD5C4,
+ 26733 - 11904: 0xD5B4,
+ 26734 - 11904: 0xD5B5,
+ 26735 - 11904: 0xD5B9,
+ 26737 - 11904: 0xD5C8,
+ 26738 - 11904: 0xD5C5,
+ 26740 - 11904: 0xD5BE,
+ 26741 - 11904: 0xD5BD,
+ 26742 - 11904: 0xB1ED,
+ 26743 - 11904: 0xD5C1,
+ 26744 - 11904: 0xD5D0,
+ 26745 - 11904: 0xD5B0,
+ 26747 - 11904: 0xD5D1,
+ 26748 - 11904: 0xD5C3,
+ 26749 - 11904: 0xD5D5,
+ 26750 - 11904: 0xD5C9,
+ 26751 - 11904: 0xB1EC,
+ 26752 - 11904: 0xD5C7,
+ 26753 - 11904: 0xB1E7,
+ 26754 - 11904: 0xB1FC,
+ 26755 - 11904: 0xB1F2,
+ 26756 - 11904: 0x8DB9,
+ 26757 - 11904: 0xB1F6,
+ 26758 - 11904: 0xB1F5,
+ 26759 - 11904: 0xD5B1,
+ 26760 - 11904: 0x917E,
+ 26761 - 11904: 0xD5CE,
+ 26762 - 11904: 0xD5D4,
+ 26763 - 11904: 0xD5CC,
+ 26764 - 11904: 0xD5D3,
+ 26767 - 11904: 0xD5C0,
+ 26768 - 11904: 0xD5B2,
+ 26769 - 11904: 0xD5D2,
+ 26770 - 11904: 0xD5C2,
+ 26771 - 11904: 0xB1EA,
+ 26772 - 11904: 0xB1F7,
+ 26774 - 11904: 0xD5CB,
+ 26775 - 11904: 0xB1F0,
+ 26776 - 11904: 0x93F4,
+ 26779 - 11904: 0xD5CA,
+ 26780 - 11904: 0xD5B3,
+ 26781 - 11904: 0xB1F8,
+ 26783 - 11904: 0xB1FA,
+ 26784 - 11904: 0xD5CD,
+ 26785 - 11904: 0xB1FB,
+ 26786 - 11904: 0xB1E9,
+ 26787 - 11904: 0xD5BA,
+ 26788 - 11904: 0xD5CF,
+ 26790 - 11904: 0xFB7C,
+ 26791 - 11904: 0xB1EF,
+ 26792 - 11904: 0xB1F9,
+ 26793 - 11904: 0xD5BC,
+ 26794 - 11904: 0xD5C6,
+ 26795 - 11904: 0xD5B7,
+ 26796 - 11904: 0xD5BB,
+ 26797 - 11904: 0xB1F4,
+ 26798 - 11904: 0xD5B6,
+ 26799 - 11904: 0xB1E8,
+ 26800 - 11904: 0xB1F1,
+ 26801 - 11904: 0xB1EE,
+ 26802 - 11904: 0xD5BF,
+ 26803 - 11904: 0xAEDE,
+ 26804 - 11904: 0xD9C0,
+ 26805 - 11904: 0xB1EB,
+ 26806 - 11904: 0x93E7,
+ 26809 - 11904: 0x97EF,
+ 26813 - 11904: 0xFE4A,
+ 26819 - 11904: 0xFD45,
+ 26820 - 11904: 0xB1F3,
+ 26821 - 11904: 0x96A5,
+ 26822 - 11904: 0xD9C3,
+ 26823 - 11904: 0xD9D9,
+ 26824 - 11904: 0xD9CE,
+ 26825 - 11904: 0xB4D6,
+ 26826 - 11904: 0xFEE0,
+ 26827 - 11904: 0xB4D1,
+ 26828 - 11904: 0xD9BD,
+ 26829 - 11904: 0xB4D2,
+ 26830 - 11904: 0xD9CD,
+ 26832 - 11904: 0xD9C6,
+ 26833 - 11904: 0xD9D3,
+ 26834 - 11904: 0xB4CE,
+ 26835 - 11904: 0xD9AB,
+ 26836 - 11904: 0xD9D5,
+ 26837 - 11904: 0xB4C4,
+ 26838 - 11904: 0xD9B3,
+ 26839 - 11904: 0xB4C7,
+ 26840 - 11904: 0xB4C6,
+ 26842 - 11904: 0xB4D7,
+ 26844 - 11904: 0xD9AD,
+ 26845 - 11904: 0xD9CF,
+ 26846 - 11904: 0xD9D0,
+ 26847 - 11904: 0xB4C9,
+ 26848 - 11904: 0xB4C5,
+ 26849 - 11904: 0xD9BB,
+ 26851 - 11904: 0xB4D0,
+ 26852 - 11904: 0xD9B6,
+ 26854 - 11904: 0xD9D1,
+ 26855 - 11904: 0xB4CC,
+ 26856 - 11904: 0xD9C9,
+ 26857 - 11904: 0xD9D6,
+ 26858 - 11904: 0xD9B0,
+ 26859 - 11904: 0xD9B5,
+ 26860 - 11904: 0xD9AF,
+ 26862 - 11904: 0xB4CB,
+ 26863 - 11904: 0xD9C2,
+ 26864 - 11904: 0xDDDE,
+ 26865 - 11904: 0xD9B1,
+ 26866 - 11904: 0xB4CF,
+ 26867 - 11904: 0xD9BA,
+ 26868 - 11904: 0xD9D2,
+ 26869 - 11904: 0xB4CA,
+ 26870 - 11904: 0xD9B7,
+ 26871 - 11904: 0xD9B4,
+ 26872 - 11904: 0xD9C5,
+ 26873 - 11904: 0xB4CD,
+ 26874 - 11904: 0xB4C3,
+ 26875 - 11904: 0xB4D9,
+ 26876 - 11904: 0xD9C8,
+ 26877 - 11904: 0xD9C7,
+ 26880 - 11904: 0xFD48,
+ 26881 - 11904: 0xFD47,
+ 26882 - 11904: 0xFEF2,
+ 26883 - 11904: 0xFE6A,
+ 26884 - 11904: 0xD9AC,
+ 26885 - 11904: 0xB4C8,
+ 26886 - 11904: 0xD9D4,
+ 26887 - 11904: 0xD9BC,
+ 26888 - 11904: 0xD9BE,
+ 26889 - 11904: 0x8DBD,
+ 26890 - 11904: 0xD9CB,
+ 26891 - 11904: 0xD9CA,
+ 26892 - 11904: 0xD9AA,
+ 26893 - 11904: 0xB4D3,
+ 26894 - 11904: 0xB4D5,
+ 26895 - 11904: 0xD9B2,
+ 26896 - 11904: 0xD9B9,
+ 26897 - 11904: 0xD9C1,
+ 26898 - 11904: 0xB4D4,
+ 26899 - 11904: 0xD9B8,
+ 26900 - 11904: 0xD9C4,
+ 26901 - 11904: 0xD9D7,
+ 26903 - 11904: 0xD9CC,
+ 26904 - 11904: 0x9BA1,
+ 26905 - 11904: 0x8CA2,
+ 26906 - 11904: 0x9AB7,
+ 26907 - 11904: 0x8EFC,
+ 26917 - 11904: 0xD9D8,
+ 26922 - 11904: 0xD9AE,
+ 26924 - 11904: 0x9FA1,
+ 26927 - 11904: 0xDDF2,
+ 26928 - 11904: 0xB7A6,
+ 26930 - 11904: 0xDDF0,
+ 26931 - 11904: 0xDDDB,
+ 26932 - 11904: 0xDDE0,
+ 26933 - 11904: 0xDDD9,
+ 26934 - 11904: 0xFD51,
+ 26935 - 11904: 0xDDEC,
+ 26936 - 11904: 0xDDCB,
+ 26937 - 11904: 0xDDD2,
+ 26939 - 11904: 0xDDEA,
+ 26940 - 11904: 0xDDF4,
+ 26941 - 11904: 0xDDDC,
+ 26942 - 11904: 0xFAAD,
+ 26943 - 11904: 0xDDCF,
+ 26944 - 11904: 0xDDE2,
+ 26945 - 11904: 0xDDE7,
+ 26946 - 11904: 0xDDD3,
+ 26947 - 11904: 0x8DBE,
+ 26948 - 11904: 0xDDE4,
+ 26949 - 11904: 0xDDD0,
+ 26950 - 11904: 0x89A4,
+ 26952 - 11904: 0xDDD7,
+ 26953 - 11904: 0xDDD8,
+ 26954 - 11904: 0xB7A8,
+ 26955 - 11904: 0xDDEB,
+ 26956 - 11904: 0xDDE9,
+ 26958 - 11904: 0xDDCC,
+ 26959 - 11904: 0xDDEE,
+ 26961 - 11904: 0xDDEF,
+ 26962 - 11904: 0xDDF1,
+ 26963 - 11904: 0xB7AC,
+ 26964 - 11904: 0xB7A4,
+ 26965 - 11904: 0x9AD9,
+ 26966 - 11904: 0xD5B8,
+ 26967 - 11904: 0xDDD4,
+ 26968 - 11904: 0xDDE6,
+ 26969 - 11904: 0xDDD5,
+ 26970 - 11904: 0xB7A1,
+ 26971 - 11904: 0xB7B1,
+ 26972 - 11904: 0xDDED,
+ 26973 - 11904: 0xB7AF,
+ 26974 - 11904: 0xB7AB,
+ 26975 - 11904: 0xDDCA,
+ 26976 - 11904: 0xB7A3,
+ 26977 - 11904: 0xFD4E,
+ 26978 - 11904: 0xDDCD,
+ 26979 - 11904: 0xB7B0,
+ 26980 - 11904: 0x8DC0,
+ 26981 - 11904: 0xDDDD,
+ 26982 - 11904: 0xDDC9,
+ 26983 - 11904: 0x97F0,
+ 26984 - 11904: 0xB7A9,
+ 26985 - 11904: 0xDDE1,
+ 26986 - 11904: 0xDDD1,
+ 26987 - 11904: 0xB7AA,
+ 26988 - 11904: 0xDDDA,
+ 26989 - 11904: 0xB77E,
+ 26990 - 11904: 0xB4D8,
+ 26991 - 11904: 0xDDE3,
+ 26992 - 11904: 0xD9BF,
+ 26993 - 11904: 0xDDCE,
+ 26994 - 11904: 0x93B4,
+ 26995 - 11904: 0xFD44,
+ 26996 - 11904: 0xDDE8,
+ 26997 - 11904: 0xB7A5,
+ 26998 - 11904: 0xDDE5,
+ 26999 - 11904: 0xB7A2,
+ 27000 - 11904: 0xDDDF,
+ 27001 - 11904: 0xB7AD,
+ 27002 - 11904: 0xDDD6,
+ 27003 - 11904: 0xDDF3,
+ 27008 - 11904: 0x9FA7,
+ 27010 - 11904: 0xB7A7,
+ 27011 - 11904: 0xDEC6,
+ 27013 - 11904: 0x8DC2,
+ 27014 - 11904: 0xB7AE,
+ 27018 - 11904: 0x99B6,
+ 27021 - 11904: 0xE24A,
+ 27022 - 11904: 0xE248,
+ 27024 - 11904: 0xE25E,
+ 27025 - 11904: 0xE246,
+ 27027 - 11904: 0xE258,
+ 27028 - 11904: 0xB77D,
+ 27029 - 11904: 0xBA5F,
+ 27030 - 11904: 0xE242,
+ 27031 - 11904: 0xE25D,
+ 27032 - 11904: 0xFD52,
+ 27033 - 11904: 0xE247,
+ 27034 - 11904: 0xE255,
+ 27035 - 11904: 0xBA64,
+ 27036 - 11904: 0xBA5D,
+ 27038 - 11904: 0xE25B,
+ 27039 - 11904: 0x8DC1,
+ 27040 - 11904: 0xE240,
+ 27041 - 11904: 0xE25A,
+ 27042 - 11904: 0x8E46,
+ 27043 - 11904: 0xBA6F,
+ 27044 - 11904: 0xE251,
+ 27045 - 11904: 0xE261,
+ 27046 - 11904: 0xBA6D,
+ 27047 - 11904: 0xE249,
+ 27048 - 11904: 0xBA5E,
+ 27049 - 11904: 0xE24B,
+ 27050 - 11904: 0xE259,
+ 27051 - 11904: 0xBA67,
+ 27052 - 11904: 0xE244,
+ 27053 - 11904: 0xBA6B,
+ 27054 - 11904: 0xBA61,
+ 27055 - 11904: 0xE24D,
+ 27056 - 11904: 0xE243,
+ 27057 - 11904: 0xE1FC,
+ 27058 - 11904: 0xA0D1,
+ 27059 - 11904: 0xE257,
+ 27060 - 11904: 0xBA68,
+ 27061 - 11904: 0xE260,
+ 27062 - 11904: 0xE1FD,
+ 27063 - 11904: 0xBA65,
+ 27065 - 11904: 0xE253,
+ 27067 - 11904: 0xBA66,
+ 27068 - 11904: 0xE245,
+ 27069 - 11904: 0xE250,
+ 27070 - 11904: 0xE24C,
+ 27071 - 11904: 0xE24E,
+ 27072 - 11904: 0x9FCA,
+ 27073 - 11904: 0xBA60,
+ 27074 - 11904: 0xE25F,
+ 27075 - 11904: 0xBA6E,
+ 27076 - 11904: 0xE24F,
+ 27078 - 11904: 0xE262,
+ 27081 - 11904: 0xE1FE,
+ 27082 - 11904: 0xE254,
+ 27083 - 11904: 0xBA63,
+ 27084 - 11904: 0xBA6C,
+ 27085 - 11904: 0xBA6A,
+ 27086 - 11904: 0xE241,
+ 27087 - 11904: 0xE256,
+ 27088 - 11904: 0xBA69,
+ 27089 - 11904: 0x92CF,
+ 27091 - 11904: 0xBA62,
+ 27092 - 11904: 0xE252,
+ 27093 - 11904: 0x9CF4,
+ 27094 - 11904: 0x8DC4,
+ 27097 - 11904: 0xE25C,
+ 27105 - 11904: 0xFD41,
+ 27106 - 11904: 0xE5D5,
+ 27108 - 11904: 0xE5D1,
+ 27109 - 11904: 0xE5CD,
+ 27110 - 11904: 0xE5E1,
+ 27111 - 11904: 0xE5DE,
+ 27112 - 11904: 0xBCCD,
+ 27113 - 11904: 0x9B4C,
+ 27115 - 11904: 0xE5E5,
+ 27116 - 11904: 0xE5D4,
+ 27117 - 11904: 0xBCD8,
+ 27118 - 11904: 0xE5DB,
+ 27121 - 11904: 0xE5D0,
+ 27122 - 11904: 0xE5DA,
+ 27123 - 11904: 0xBCD5,
+ 27124 - 11904: 0xE5EE,
+ 27126 - 11904: 0xE5EB,
+ 27127 - 11904: 0xE5DD,
+ 27128 - 11904: 0xE5CE,
+ 27129 - 11904: 0xFD57,
+ 27130 - 11904: 0xFCEF,
+ 27131 - 11904: 0xE5E2,
+ 27132 - 11904: 0xE5E4,
+ 27133 - 11904: 0xBCD1,
+ 27134 - 11904: 0xE5D8,
+ 27135 - 11904: 0xE5D3,
+ 27136 - 11904: 0xE5CA,
+ 27137 - 11904: 0xBCCE,
+ 27138 - 11904: 0xBCD6,
+ 27139 - 11904: 0x9CDE,
+ 27140 - 11904: 0xE5E7,
+ 27141 - 11904: 0xBCD7,
+ 27142 - 11904: 0xE5CB,
+ 27143 - 11904: 0xE5ED,
+ 27144 - 11904: 0xE5E0,
+ 27145 - 11904: 0xE5E6,
+ 27146 - 11904: 0xBCD4,
+ 27147 - 11904: 0xFD42,
+ 27148 - 11904: 0x986C,
+ 27149 - 11904: 0xE5E3,
+ 27151 - 11904: 0xE5EA,
+ 27153 - 11904: 0xBCD9,
+ 27155 - 11904: 0xBCD3,
+ 27156 - 11904: 0xE5DC,
+ 27157 - 11904: 0xE5CF,
+ 27158 - 11904: 0xE5EF,
+ 27159 - 11904: 0xE5CC,
+ 27160 - 11904: 0xE5E8,
+ 27161 - 11904: 0xBCD0,
+ 27162 - 11904: 0x97F9,
+ 27163 - 11904: 0xE5D6,
+ 27164 - 11904: 0x9558,
+ 27165 - 11904: 0xE5D7,
+ 27166 - 11904: 0xBCCF,
+ 27167 - 11904: 0xBCCC,
+ 27168 - 11904: 0xE5D2,
+ 27169 - 11904: 0xBCD2,
+ 27171 - 11904: 0xBCCB,
+ 27173 - 11904: 0xE5E9,
+ 27174 - 11904: 0xE5EC,
+ 27175 - 11904: 0xE5D9,
+ 27176 - 11904: 0xE9CA,
+ 27177 - 11904: 0x87B6,
+ 27179 - 11904: 0x985E,
+ 27180 - 11904: 0xFE7B,
+ 27181 - 11904: 0x94CD,
+ 27186 - 11904: 0xE9C2,
+ 27187 - 11904: 0x93EE,
+ 27188 - 11904: 0xE9BE,
+ 27189 - 11904: 0xBEF6,
+ 27192 - 11904: 0xBEEB,
+ 27193 - 11904: 0xBEF0,
+ 27194 - 11904: 0xBEEC,
+ 27195 - 11904: 0xE9CC,
+ 27196 - 11904: 0xE9D7,
+ 27197 - 11904: 0xBEEA,
+ 27198 - 11904: 0xE9C4,
+ 27199 - 11904: 0xE9CD,
+ 27200 - 11904: 0xE5DF,
+ 27201 - 11904: 0xE9CE,
+ 27203 - 11904: 0x8CA3,
+ 27204 - 11904: 0xBEF1,
+ 27205 - 11904: 0xFD5A,
+ 27206 - 11904: 0xE9DD,
+ 27207 - 11904: 0xBEF5,
+ 27208 - 11904: 0xBEF8,
+ 27209 - 11904: 0xE9C0,
+ 27211 - 11904: 0xBEF4,
+ 27212 - 11904: 0x93F5,
+ 27213 - 11904: 0xE9DB,
+ 27214 - 11904: 0xE9DC,
+ 27215 - 11904: 0xE9D2,
+ 27216 - 11904: 0xE9D1,
+ 27217 - 11904: 0xE9C9,
+ 27218 - 11904: 0x93EF,
+ 27219 - 11904: 0x8EEA,
+ 27220 - 11904: 0xE9D3,
+ 27221 - 11904: 0xE9DA,
+ 27222 - 11904: 0xE9D9,
+ 27223 - 11904: 0x8F5B,
+ 27224 - 11904: 0xBEEF,
+ 27225 - 11904: 0xBEED,
+ 27226 - 11904: 0xE9CB,
+ 27227 - 11904: 0xE9C8,
+ 27229 - 11904: 0xE9C5,
+ 27230 - 11904: 0xE9D8,
+ 27231 - 11904: 0xBEF7,
+ 27232 - 11904: 0xE9D6,
+ 27233 - 11904: 0xBEF3,
+ 27234 - 11904: 0xBEF2,
+ 27235 - 11904: 0x8C5E,
+ 27236 - 11904: 0xE9D0,
+ 27237 - 11904: 0x8DC6,
+ 27238 - 11904: 0xE9BF,
+ 27239 - 11904: 0xE9C1,
+ 27240 - 11904: 0xE9C3,
+ 27241 - 11904: 0xE9D5,
+ 27242 - 11904: 0xE9CF,
+ 27243 - 11904: 0xBEEE,
+ 27245 - 11904: 0xE9C6,
+ 27247 - 11904: 0xE9D4,
+ 27249 - 11904: 0x8DC8,
+ 27252 - 11904: 0x8DC7,
+ 27254 - 11904: 0xE9C7,
+ 27258 - 11904: 0x93F7,
+ 27262 - 11904: 0xC0CF,
+ 27263 - 11904: 0xED45,
+ 27264 - 11904: 0xC0C8,
+ 27265 - 11904: 0xECF5,
+ 27266 - 11904: 0x8DC9,
+ 27267 - 11904: 0xED41,
+ 27268 - 11904: 0xC0CA,
+ 27269 - 11904: 0xED48,
+ 27271 - 11904: 0xECFC,
+ 27273 - 11904: 0xECF7,
+ 27274 - 11904: 0xFBF2,
+ 27276 - 11904: 0xED49,
+ 27277 - 11904: 0xECF3,
+ 27278 - 11904: 0xECFE,
+ 27279 - 11904: 0x9670,
+ 27280 - 11904: 0xC0D1,
+ 27281 - 11904: 0xED44,
+ 27282 - 11904: 0xED4A,
+ 27283 - 11904: 0xECFD,
+ 27284 - 11904: 0xC0C9,
+ 27285 - 11904: 0xED40,
+ 27286 - 11904: 0xECF4,
+ 27287 - 11904: 0xC0D0,
+ 27289 - 11904: 0x8DCB,
+ 27290 - 11904: 0xED47,
+ 27291 - 11904: 0xECF9,
+ 27292 - 11904: 0xC0CC,
+ 27293 - 11904: 0xFD5C,
+ 27294 - 11904: 0xECFB,
+ 27295 - 11904: 0xECF8,
+ 27296 - 11904: 0xC0D2,
+ 27297 - 11904: 0xECFA,
+ 27298 - 11904: 0xC0CB,
+ 27299 - 11904: 0xC0CE,
+ 27300 - 11904: 0xED43,
+ 27301 - 11904: 0xECF6,
+ 27302 - 11904: 0xED46,
+ 27303 - 11904: 0x8F65,
+ 27304 - 11904: 0xED42,
+ 27307 - 11904: 0x8DCD,
+ 27308 - 11904: 0xC263,
+ 27309 - 11904: 0xEFE7,
+ 27310 - 11904: 0xC268,
+ 27311 - 11904: 0xC269,
+ 27313 - 11904: 0x9DA8,
+ 27314 - 11904: 0x94F9,
+ 27315 - 11904: 0xC262,
+ 27316 - 11904: 0xEFE6,
+ 27317 - 11904: 0x8DCE,
+ 27318 - 11904: 0xEFE3,
+ 27319 - 11904: 0xEFE4,
+ 27320 - 11904: 0xC266,
+ 27321 - 11904: 0xEFDE,
+ 27322 - 11904: 0xEFE2,
+ 27323 - 11904: 0xC265,
+ 27325 - 11904: 0xEFDF,
+ 27326 - 11904: 0x93EA,
+ 27330 - 11904: 0xC267,
+ 27331 - 11904: 0xC264,
+ 27333 - 11904: 0xEFDD,
+ 27334 - 11904: 0xEFE1,
+ 27335 - 11904: 0xEFE5,
+ 27336 - 11904: 0xFD5F,
+ 27337 - 11904: 0x93F0,
+ 27338 - 11904: 0x9FB6,
+ 27339 - 11904: 0xF251,
+ 27340 - 11904: 0xF24E,
+ 27341 - 11904: 0xF257,
+ 27343 - 11904: 0xF256,
+ 27344 - 11904: 0xF254,
+ 27345 - 11904: 0xF24F,
+ 27347 - 11904: 0xC372,
+ 27348 - 11904: 0x8DCF,
+ 27352 - 11904: 0x9763,
+ 27353 - 11904: 0xF250,
+ 27354 - 11904: 0xC371,
+ 27355 - 11904: 0xC0CD,
+ 27356 - 11904: 0xF253,
+ 27357 - 11904: 0xC370,
+ 27358 - 11904: 0xF258,
+ 27359 - 11904: 0xF252,
+ 27360 - 11904: 0xF24D,
+ 27361 - 11904: 0xEFE0,
+ 27365 - 11904: 0xC36F,
+ 27367 - 11904: 0xF24C,
+ 27368 - 11904: 0xF456,
+ 27370 - 11904: 0xF455,
+ 27371 - 11904: 0xF255,
+ 27372 - 11904: 0xC468,
+ 27374 - 11904: 0xF459,
+ 27375 - 11904: 0xF45A,
+ 27376 - 11904: 0xF454,
+ 27377 - 11904: 0xF458,
+ 27379 - 11904: 0xF453,
+ 27382 - 11904: 0x8DD0,
+ 27384 - 11904: 0xF5D1,
+ 27385 - 11904: 0xF457,
+ 27386 - 11904: 0xC4E7,
+ 27387 - 11904: 0xC4E5,
+ 27388 - 11904: 0xF5CF,
+ 27392 - 11904: 0xF5D2,
+ 27394 - 11904: 0xF5CE,
+ 27395 - 11904: 0xF5D0,
+ 27396 - 11904: 0xC4E6,
+ 27397 - 11904: 0x93F1,
+ 27400 - 11904: 0xF6E5,
+ 27401 - 11904: 0xF6E6,
+ 27402 - 11904: 0xC576,
+ 27403 - 11904: 0xF6E4,
+ 27407 - 11904: 0xF7E2,
+ 27408 - 11904: 0xC5CF,
+ 27409 - 11904: 0xF7E0,
+ 27410 - 11904: 0xF7E1,
+ 27411 - 11904: 0xF8AC,
+ 27414 - 11904: 0xC656,
+ 27415 - 11904: 0xF8F3,
+ 27416 - 11904: 0xF8F1,
+ 27417 - 11904: 0xF8F2,
+ 27418 - 11904: 0xF8F4,
+ 27421 - 11904: 0xFD62,
+ 27422 - 11904: 0xF9BB,
+ 27424 - 11904: 0xA4ED,
+ 27425 - 11904: 0xA6B8,
+ 27427 - 11904: 0xAA59,
+ 27429 - 11904: 0xCCE9,
+ 27432 - 11904: 0xCF64,
+ 27436 - 11904: 0xD1F5,
+ 27437 - 11904: 0xD1F7,
+ 27439 - 11904: 0xD1F6,
+ 27441 - 11904: 0xD1F8,
+ 27442 - 11904: 0xB1FD,
+ 27443 - 11904: 0xD5D7,
+ 27444 - 11904: 0xD1F9,
+ 27445 - 11904: 0xFD65,
+ 27446 - 11904: 0xD5D6,
+ 27447 - 11904: 0xD5D8,
+ 27448 - 11904: 0xD5D9,
+ 27449 - 11904: 0xD9DA,
+ 27450 - 11904: 0xB4DB,
+ 27451 - 11904: 0xD9DB,
+ 27452 - 11904: 0xD9DD,
+ 27453 - 11904: 0xB4DC,
+ 27454 - 11904: 0xB4DA,
+ 27455 - 11904: 0xD9DC,
+ 27457 - 11904: 0xDDFA,
+ 27458 - 11904: 0xDDF8,
+ 27459 - 11904: 0xDDF7,
+ 27461 - 11904: 0xDDF6,
+ 27462 - 11904: 0xDDF5,
+ 27463 - 11904: 0xB7B2,
+ 27464 - 11904: 0xDDF9,
+ 27465 - 11904: 0xBA70,
+ 27466 - 11904: 0xE263,
+ 27467 - 11904: 0xE265,
+ 27468 - 11904: 0xBA71,
+ 27469 - 11904: 0xE264,
+ 27470 - 11904: 0xBCDB,
+ 27472 - 11904: 0xBCDA,
+ 27473 - 11904: 0xE5F0,
+ 27474 - 11904: 0x9FDB,
+ 27476 - 11904: 0xE9DF,
+ 27477 - 11904: 0xE9DE,
+ 27478 - 11904: 0xE9E0,
+ 27479 - 11904: 0x93F8,
+ 27481 - 11904: 0xBEF9,
+ 27483 - 11904: 0xED4B,
+ 27484 - 11904: 0xC0D3,
+ 27486 - 11904: 0xEFE8,
+ 27487 - 11904: 0xC26A,
+ 27488 - 11904: 0xF259,
+ 27489 - 11904: 0xC577,
+ 27490 - 11904: 0xA4EE,
+ 27491 - 11904: 0xA5BF,
+ 27492 - 11904: 0xA6B9,
+ 27493 - 11904: 0xA842,
+ 27494 - 11904: 0xAA5A,
+ 27495 - 11904: 0xAA5B,
+ 27498 - 11904: 0xAC6E,
+ 27501 - 11904: 0xD1FA,
+ 27503 - 11904: 0x8BF7,
+ 27506 - 11904: 0xB7B3,
+ 27508 - 11904: 0xFD66,
+ 27510 - 11904: 0xE6D1,
+ 27511 - 11904: 0xBEFA,
+ 27512 - 11904: 0xC26B,
+ 27513 - 11904: 0xA4EF,
+ 27514 - 11904: 0x8BCF,
+ 27515 - 11904: 0xA6BA,
+ 27518 - 11904: 0xCCEB,
+ 27519 - 11904: 0xAA5C,
+ 27520 - 11904: 0xCCEA,
+ 27521 - 11904: 0x8DD1,
+ 27522 - 11904: 0xCF65,
+ 27523 - 11904: 0xAC6F,
+ 27524 - 11904: 0xCF66,
+ 27526 - 11904: 0xAC70,
+ 27528 - 11904: 0xD1FC,
+ 27529 - 11904: 0xAEEE,
+ 27530 - 11904: 0xAEED,
+ 27532 - 11904: 0xD5DE,
+ 27533 - 11904: 0xD5DC,
+ 27534 - 11904: 0xD5DD,
+ 27535 - 11904: 0xD5DB,
+ 27537 - 11904: 0xD5DA,
+ 27540 - 11904: 0xD9DE,
+ 27541 - 11904: 0xD9E1,
+ 27542 - 11904: 0xB4DE,
+ 27543 - 11904: 0xD9DF,
+ 27544 - 11904: 0xB4DD,
+ 27545 - 11904: 0xD9E0,
+ 27547 - 11904: 0xDDFB,
+ 27550 - 11904: 0xE266,
+ 27551 - 11904: 0xE267,
+ 27552 - 11904: 0xE268,
+ 27554 - 11904: 0xE5F3,
+ 27555 - 11904: 0xE5F2,
+ 27556 - 11904: 0xBCDC,
+ 27557 - 11904: 0xE5F1,
+ 27558 - 11904: 0xE5F4,
+ 27559 - 11904: 0xE9E1,
+ 27562 - 11904: 0xE9E2,
+ 27563 - 11904: 0xE9E3,
+ 27565 - 11904: 0xED4C,
+ 27566 - 11904: 0xC0D4,
+ 27567 - 11904: 0xC26C,
+ 27568 - 11904: 0xF25A,
+ 27570 - 11904: 0xC4E8,
+ 27571 - 11904: 0xC95F,
+ 27573 - 11904: 0xAC71,
+ 27574 - 11904: 0xCF67,
+ 27575 - 11904: 0xAEEF,
+ 27578 - 11904: 0xB1FE,
+ 27580 - 11904: 0xB4DF,
+ 27581 - 11904: 0xD9E2,
+ 27583 - 11904: 0xB7B5,
+ 27584 - 11904: 0xB7B4,
+ 27585 - 11904: 0x8DD2,
+ 27587 - 11904: 0xE269,
+ 27588 - 11904: 0xE26A,
+ 27589 - 11904: 0xBCDD,
+ 27590 - 11904: 0xBCDE,
+ 27591 - 11904: 0xE9E5,
+ 27592 - 11904: 0xE9E4,
+ 27593 - 11904: 0xEFE9,
+ 27594 - 11904: 0xF7E3,
+ 27595 - 11904: 0xA4F0,
+ 27596 - 11904: 0xC960,
+ 27597 - 11904: 0xA5C0,
+ 27599 - 11904: 0xA843,
+ 27600 - 11904: 0xCB48,
+ 27602 - 11904: 0xAC72,
+ 27603 - 11904: 0xB7B6,
+ 27604 - 11904: 0xA4F1,
+ 27606 - 11904: 0xCF68,
+ 27607 - 11904: 0xAC73,
+ 27608 - 11904: 0xCF69,
+ 27610 - 11904: 0xC0D5,
+ 27611 - 11904: 0xA4F2,
+ 27612 - 11904: 0xFD71,
+ 27614 - 11904: 0xCCEC,
+ 27616 - 11904: 0xCF6A,
+ 27617 - 11904: 0xFD6F,
+ 27618 - 11904: 0xD242,
+ 27619 - 11904: 0xD241,
+ 27620 - 11904: 0xD1FE,
+ 27622 - 11904: 0xD1FD,
+ 27623 - 11904: 0xD243,
+ 27624 - 11904: 0xD240,
+ 27626 - 11904: 0x8DD3,
+ 27627 - 11904: 0xB240,
+ 27628 - 11904: 0xB241,
+ 27631 - 11904: 0xB4E0,
+ 27632 - 11904: 0xD9E3,
+ 27634 - 11904: 0xD9E4,
+ 27635 - 11904: 0xD9E5,
+ 27639 - 11904: 0xDE41,
+ 27640 - 11904: 0xDE42,
+ 27641 - 11904: 0xDE40,
+ 27642 - 11904: 0x9FE7,
+ 27643 - 11904: 0xDDFD,
+ 27644 - 11904: 0xDDFE,
+ 27645 - 11904: 0xB7B7,
+ 27646 - 11904: 0xE26B,
+ 27647 - 11904: 0xE5F7,
+ 27648 - 11904: 0xE5F6,
+ 27649 - 11904: 0xE5F5,
+ 27650 - 11904: 0xE5F8,
+ 27651 - 11904: 0xE9E7,
+ 27652 - 11904: 0xE9E6,
+ 27653 - 11904: 0xBEFB,
+ 27654 - 11904: 0xE9E8,
+ 27656 - 11904: 0xC0D6,
+ 27657 - 11904: 0xED4D,
+ 27659 - 11904: 0xEFEA,
+ 27660 - 11904: 0xF25B,
+ 27661 - 11904: 0xF6E7,
+ 27663 - 11904: 0xA4F3,
+ 27664 - 11904: 0xA5C2,
+ 27665 - 11904: 0xA5C1,
+ 27667 - 11904: 0xAA5D,
+ 27668 - 11904: 0xC961,
+ 27669 - 11904: 0xC97E,
+ 27670 - 11904: 0xA6BB,
+ 27672 - 11904: 0xC9F7,
+ 27673 - 11904: 0xCB49,
+ 27674 - 11904: 0xCB4A,
+ 27675 - 11904: 0xAA5E,
+ 27676 - 11904: 0x90BD,
+ 27677 - 11904: 0xCCED,
+ 27679 - 11904: 0xAC74,
+ 27680 - 11904: 0xCF6B,
+ 27681 - 11904: 0xCF6C,
+ 27683 - 11904: 0xAEF0,
+ 27684 - 11904: 0xAEF4,
+ 27685 - 11904: 0xD244,
+ 27686 - 11904: 0xAEF3,
+ 27687 - 11904: 0xAEF1,
+ 27688 - 11904: 0xAEF2,
+ 27690 - 11904: 0xD5DF,
+ 27691 - 11904: 0xB242,
+ 27692 - 11904: 0xB4E3,
+ 27694 - 11904: 0xB4E1,
+ 27695 - 11904: 0xB4E2,
+ 27696 - 11904: 0xD9E6,
+ 27697 - 11904: 0x9FD0,
+ 27699 - 11904: 0xBA72,
+ 27700 - 11904: 0xA4F4,
+ 27701 - 11904: 0x8BD0,
+ 27702 - 11904: 0xC9A1,
+ 27703 - 11904: 0xFD72,
+ 27704 - 11904: 0xA5C3,
+ 27705 - 11904: 0x9CAE,
+ 27706 - 11904: 0x8BD1,
+ 27707 - 11904: 0xC9A4,
+ 27709 - 11904: 0x8ADB,
+ 27710 - 11904: 0xA5C6,
+ 27711 - 11904: 0xC9A3,
+ 27712 - 11904: 0xA5C5,
+ 27713 - 11904: 0xA5C4,
+ 27714 - 11904: 0xA844,
+ 27715 - 11904: 0xC9A2,
+ 27718 - 11904: 0xC9F8,
+ 27721 - 11904: 0xFAE4,
+ 27722 - 11904: 0xC9FC,
+ 27723 - 11904: 0xC9FE,
+ 27724 - 11904: 0xCA40,
+ 27725 - 11904: 0xA6C5,
+ 27726 - 11904: 0xA6C6,
+ 27727 - 11904: 0xC9FB,
+ 27728 - 11904: 0xA6C1,
+ 27730 - 11904: 0xC9F9,
+ 27732 - 11904: 0xC9FD,
+ 27733 - 11904: 0xA6C2,
+ 27735 - 11904: 0xA6BD,
+ 27736 - 11904: 0x95CE,
+ 27737 - 11904: 0xA6BE,
+ 27738 - 11904: 0xFD76,
+ 27739 - 11904: 0xA6C4,
+ 27740 - 11904: 0xC9FA,
+ 27741 - 11904: 0xA6BC,
+ 27742 - 11904: 0xA845,
+ 27743 - 11904: 0xA6BF,
+ 27744 - 11904: 0xA6C0,
+ 27745 - 11904: 0xA6C3,
+ 27749 - 11904: 0xCB5B,
+ 27750 - 11904: 0xCB59,
+ 27751 - 11904: 0xCB4C,
+ 27752 - 11904: 0xA851,
+ 27753 - 11904: 0xCB53,
+ 27754 - 11904: 0xA84C,
+ 27755 - 11904: 0xCB4D,
+ 27757 - 11904: 0xCB55,
+ 27758 - 11904: 0xFB62,
+ 27759 - 11904: 0xCB52,
+ 27760 - 11904: 0xA84F,
+ 27761 - 11904: 0xCB51,
+ 27762 - 11904: 0xA856,
+ 27763 - 11904: 0xCB5A,
+ 27764 - 11904: 0xA858,
+ 27765 - 11904: 0x8DD4,
+ 27766 - 11904: 0xA85A,
+ 27768 - 11904: 0xCB4B,
+ 27769 - 11904: 0xFD78,
+ 27770 - 11904: 0xA84D,
+ 27771 - 11904: 0xCB5C,
+ 27773 - 11904: 0xA854,
+ 27774 - 11904: 0xA857,
+ 27775 - 11904: 0x8EE3,
+ 27776 - 11904: 0xCD45,
+ 27777 - 11904: 0xA847,
+ 27778 - 11904: 0xA85E,
+ 27779 - 11904: 0xA855,
+ 27780 - 11904: 0xCB4E,
+ 27781 - 11904: 0xA84A,
+ 27782 - 11904: 0xA859,
+ 27783 - 11904: 0xCB56,
+ 27784 - 11904: 0xA848,
+ 27785 - 11904: 0xA849,
+ 27786 - 11904: 0xCD43,
+ 27787 - 11904: 0xCB4F,
+ 27788 - 11904: 0xA850,
+ 27789 - 11904: 0xA85B,
+ 27790 - 11904: 0xCB5D,
+ 27791 - 11904: 0xCB50,
+ 27792 - 11904: 0xA84E,
+ 27794 - 11904: 0xA853,
+ 27795 - 11904: 0xCCEE,
+ 27796 - 11904: 0xA85C,
+ 27797 - 11904: 0xCB57,
+ 27798 - 11904: 0xA852,
+ 27800 - 11904: 0xA85D,
+ 27801 - 11904: 0xA846,
+ 27802 - 11904: 0xCB54,
+ 27803 - 11904: 0xA84B,
+ 27804 - 11904: 0xFDB7,
+ 27805 - 11904: 0xCD44,
+ 27807 - 11904: 0x9076,
+ 27810 - 11904: 0x98C6,
+ 27818 - 11904: 0x8DD5,
+ 27819 - 11904: 0xAA6A,
+ 27820 - 11904: 0xAA7A,
+ 27821 - 11904: 0xCCF5,
+ 27822 - 11904: 0xAA71,
+ 27823 - 11904: 0x97D1,
+ 27824 - 11904: 0xCD4B,
+ 27825 - 11904: 0xAA62,
+ 27826 - 11904: 0x9EB6,
+ 27827 - 11904: 0xAA65,
+ 27828 - 11904: 0xCD42,
+ 27830 - 11904: 0xCCF3,
+ 27831 - 11904: 0xCCF7,
+ 27832 - 11904: 0xAA6D,
+ 27833 - 11904: 0xAA6F,
+ 27834 - 11904: 0xCCFA,
+ 27835 - 11904: 0xAA76,
+ 27836 - 11904: 0xAA68,
+ 27837 - 11904: 0xAA66,
+ 27838 - 11904: 0xAA67,
+ 27839 - 11904: 0xAA75,
+ 27840 - 11904: 0xCD47,
+ 27841 - 11904: 0xAA70,
+ 27842 - 11904: 0xCCF9,
+ 27843 - 11904: 0xCCFB,
+ 27844 - 11904: 0xAA6E,
+ 27845 - 11904: 0xAA73,
+ 27846 - 11904: 0xCCFC,
+ 27847 - 11904: 0xCD4A,
+ 27849 - 11904: 0xAC75,
+ 27850 - 11904: 0xAA79,
+ 27851 - 11904: 0xFAC7,
+ 27852 - 11904: 0xAA63,
+ 27853 - 11904: 0xCD49,
+ 27854 - 11904: 0xA042,
+ 27855 - 11904: 0xCD4D,
+ 27856 - 11904: 0xCCF8,
+ 27857 - 11904: 0xCD4F,
+ 27858 - 11904: 0xCD40,
+ 27859 - 11904: 0xAA6C,
+ 27860 - 11904: 0xCCF4,
+ 27861 - 11904: 0xAA6B,
+ 27862 - 11904: 0xAA7D,
+ 27863 - 11904: 0xAA72,
+ 27865 - 11904: 0xCCF2,
+ 27866 - 11904: 0xCF75,
+ 27867 - 11904: 0xAA78,
+ 27868 - 11904: 0xAA7C,
+ 27869 - 11904: 0xCD41,
+ 27870 - 11904: 0xCD46,
+ 27871 - 11904: 0x9873,
+ 27872 - 11904: 0xAA7E,
+ 27873 - 11904: 0xAA77,
+ 27874 - 11904: 0xAA69,
+ 27875 - 11904: 0xAA5F,
+ 27877 - 11904: 0xAA64,
+ 27879 - 11904: 0xCCF6,
+ 27880 - 11904: 0xAA60,
+ 27881 - 11904: 0xCD4E,
+ 27882 - 11904: 0x9FFC,
+ 27883 - 11904: 0xCCF0,
+ 27884 - 11904: 0xCCEF,
+ 27885 - 11904: 0xCCFD,
+ 27886 - 11904: 0xCCF1,
+ 27887 - 11904: 0xAA7B,
+ 27888 - 11904: 0xAEF5,
+ 27889 - 11904: 0xAA74,
+ 27890 - 11904: 0xCCFE,
+ 27891 - 11904: 0xAA61,
+ 27893 - 11904: 0xACA6,
+ 27897 - 11904: 0xCD4C,
+ 27903 - 11904: 0x8CA5,
+ 27904 - 11904: 0xCF7C,
+ 27905 - 11904: 0xCFA1,
+ 27906 - 11904: 0x8DD7,
+ 27907 - 11904: 0xCFA4,
+ 27908 - 11904: 0xCF77,
+ 27909 - 11904: 0x92FB,
+ 27910 - 11904: 0x8DD8,
+ 27911 - 11904: 0xCFA7,
+ 27912 - 11904: 0xCFAA,
+ 27913 - 11904: 0xCFAC,
+ 27914 - 11904: 0xCF74,
+ 27915 - 11904: 0xAC76,
+ 27916 - 11904: 0xAC7B,
+ 27917 - 11904: 0xD249,
+ 27918 - 11904: 0xACAD,
+ 27919 - 11904: 0xCFA5,
+ 27920 - 11904: 0xCFAD,
+ 27921 - 11904: 0xCF7B,
+ 27922 - 11904: 0xCF73,
+ 27926 - 11904: 0xD264,
+ 27927 - 11904: 0xAC7E,
+ 27928 - 11904: 0xCFA2,
+ 27929 - 11904: 0xCF78,
+ 27930 - 11904: 0xCF7A,
+ 27931 - 11904: 0xACA5,
+ 27933 - 11904: 0xCF7D,
+ 27934 - 11904: 0xAC7D,
+ 27935 - 11904: 0xCF70,
+ 27936 - 11904: 0xCFA8,
+ 27938 - 11904: 0xCFAB,
+ 27940 - 11904: 0x944F,
+ 27941 - 11904: 0xAC7A,
+ 27942 - 11904: 0x8DD9,
+ 27943 - 11904: 0xACA8,
+ 27944 - 11904: 0xCF6D,
+ 27945 - 11904: 0xACAA,
+ 27946 - 11904: 0xAC78,
+ 27947 - 11904: 0xACAE,
+ 27948 - 11904: 0xCFA9,
+ 27949 - 11904: 0xCF6F,
+ 27950 - 11904: 0xACAB,
+ 27951 - 11904: 0xD25E,
+ 27952 - 11904: 0xCD48,
+ 27953 - 11904: 0xAC7C,
+ 27954 - 11904: 0xAC77,
+ 27955 - 11904: 0xCF76,
+ 27956 - 11904: 0xCF6E,
+ 27957 - 11904: 0xACAC,
+ 27958 - 11904: 0xACA4,
+ 27959 - 11904: 0xCFA3,
+ 27960 - 11904: 0xACA9,
+ 27961 - 11904: 0xACA7,
+ 27962 - 11904: 0xCF79,
+ 27963 - 11904: 0xACA1,
+ 27964 - 11904: 0xCF71,
+ 27965 - 11904: 0xACA2,
+ 27966 - 11904: 0xACA3,
+ 27967 - 11904: 0xCF72,
+ 27968 - 11904: 0xCFA6,
+ 27969 - 11904: 0xAC79,
+ 27970 - 11904: 0xCF7E,
+ 27982 - 11904: 0x896B,
+ 27991 - 11904: 0x97CE,
+ 27992 - 11904: 0xD24C,
+ 27993 - 11904: 0xAEFD,
+ 27994 - 11904: 0xAF43,
+ 27995 - 11904: 0xFAF3,
+ 27996 - 11904: 0xFDAE,
+ 27998 - 11904: 0xD255,
+ 27999 - 11904: 0xD25B,
+ 28000 - 11904: 0xD257,
+ 28001 - 11904: 0xD24A,
+ 28002 - 11904: 0xD24D,
+ 28003 - 11904: 0xD246,
+ 28004 - 11904: 0xD247,
+ 28005 - 11904: 0xAF4A,
+ 28006 - 11904: 0xAEFA,
+ 28007 - 11904: 0xD256,
+ 28008 - 11904: 0xD25F,
+ 28009 - 11904: 0xAF45,
+ 28010 - 11904: 0xAEF6,
+ 28012 - 11904: 0xAF40,
+ 28013 - 11904: 0xD24E,
+ 28014 - 11904: 0xAF42,
+ 28015 - 11904: 0xD24F,
+ 28016 - 11904: 0xD259,
+ 28017 - 11904: 0xFBAF,
+ 28018 - 11904: 0x92B7,
+ 28020 - 11904: 0xAF44,
+ 28021 - 11904: 0xD268,
+ 28022 - 11904: 0xD248,
+ 28023 - 11904: 0xAEFC,
+ 28024 - 11904: 0xAEFB,
+ 28025 - 11904: 0xAF48,
+ 28026 - 11904: 0xD245,
+ 28027 - 11904: 0xD266,
+ 28028 - 11904: 0xD25A,
+ 28029 - 11904: 0xD267,
+ 28030 - 11904: 0xD261,
+ 28031 - 11904: 0xD253,
+ 28032 - 11904: 0xD262,
+ 28033 - 11904: 0x8DDA,
+ 28034 - 11904: 0xD25C,
+ 28035 - 11904: 0xD265,
+ 28036 - 11904: 0xD263,
+ 28037 - 11904: 0xAF49,
+ 28038 - 11904: 0xD254,
+ 28039 - 11904: 0xAEF9,
+ 28040 - 11904: 0xAEF8,
+ 28041 - 11904: 0xAF41,
+ 28042 - 11904: 0xAF47,
+ 28043 - 11904: 0xD260,
+ 28044 - 11904: 0xAF46,
+ 28045 - 11904: 0xD251,
+ 28046 - 11904: 0xB243,
+ 28047 - 11904: 0x9C5A,
+ 28048 - 11904: 0xD269,
+ 28049 - 11904: 0xD250,
+ 28050 - 11904: 0xD24B,
+ 28051 - 11904: 0xAEFE,
+ 28052 - 11904: 0xAF4B,
+ 28053 - 11904: 0xAEF7,
+ 28054 - 11904: 0xFDAD,
+ 28055 - 11904: 0xD258,
+ 28056 - 11904: 0xD25D,
+ 28068 - 11904: 0x8DDC,
+ 28069 - 11904: 0x9444,
+ 28074 - 11904: 0xB265,
+ 28075 - 11904: 0xD5E1,
+ 28076 - 11904: 0xD5E5,
+ 28078 - 11904: 0xB252,
+ 28079 - 11904: 0xB250,
+ 28081 - 11904: 0x8DDD,
+ 28082 - 11904: 0xB247,
+ 28083 - 11904: 0xD5E3,
+ 28084 - 11904: 0xD5E2,
+ 28085 - 11904: 0xB25B,
+ 28087 - 11904: 0xD5E8,
+ 28088 - 11904: 0xB255,
+ 28089 - 11904: 0xA0D6,
+ 28090 - 11904: 0xD5FA,
+ 28091 - 11904: 0xD647,
+ 28092 - 11904: 0xB244,
+ 28093 - 11904: 0xD5F7,
+ 28094 - 11904: 0xD5F0,
+ 28095 - 11904: 0xB267,
+ 28096 - 11904: 0xD5E0,
+ 28098 - 11904: 0xD5FC,
+ 28100 - 11904: 0xB264,
+ 28101 - 11904: 0xB258,
+ 28102 - 11904: 0xB263,
+ 28103 - 11904: 0xB24E,
+ 28104 - 11904: 0xD5EC,
+ 28105 - 11904: 0xD5FE,
+ 28106 - 11904: 0xD5F6,
+ 28107 - 11904: 0xB24F,
+ 28108 - 11904: 0xB249,
+ 28109 - 11904: 0xD645,
+ 28111 - 11904: 0xD5FD,
+ 28112 - 11904: 0xD640,
+ 28113 - 11904: 0xB251,
+ 28114 - 11904: 0xB259,
+ 28115 - 11904: 0xD642,
+ 28116 - 11904: 0xD5EA,
+ 28117 - 11904: 0xD5FB,
+ 28118 - 11904: 0xD5EF,
+ 28119 - 11904: 0xD644,
+ 28120 - 11904: 0xB25E,
+ 28121 - 11904: 0xB246,
+ 28122 - 11904: 0xB25C,
+ 28123 - 11904: 0xD5F4,
+ 28124 - 11904: 0xD5F2,
+ 28125 - 11904: 0xD5F3,
+ 28126 - 11904: 0xB253,
+ 28127 - 11904: 0xD5EE,
+ 28128 - 11904: 0xD5ED,
+ 28129 - 11904: 0xB248,
+ 28130 - 11904: 0xD5E7,
+ 28131 - 11904: 0xD646,
+ 28132 - 11904: 0xB24A,
+ 28133 - 11904: 0xD5F1,
+ 28134 - 11904: 0xB268,
+ 28136 - 11904: 0xB262,
+ 28137 - 11904: 0xD5E6,
+ 28138 - 11904: 0xB25F,
+ 28139 - 11904: 0xB25D,
+ 28140 - 11904: 0xB266,
+ 28141 - 11904: 0xD5F8,
+ 28142 - 11904: 0xB261,
+ 28143 - 11904: 0xD252,
+ 28144 - 11904: 0xD5F9,
+ 28145 - 11904: 0xB260,
+ 28146 - 11904: 0xD641,
+ 28147 - 11904: 0xB245,
+ 28148 - 11904: 0xD5F5,
+ 28149 - 11904: 0xB257,
+ 28150 - 11904: 0xD5E9,
+ 28151 - 11904: 0xB256,
+ 28153 - 11904: 0xB254,
+ 28154 - 11904: 0xB24C,
+ 28155 - 11904: 0xB24B,
+ 28156 - 11904: 0xD9E7,
+ 28157 - 11904: 0xD643,
+ 28158 - 11904: 0x8C41,
+ 28160 - 11904: 0xD5EB,
+ 28162 - 11904: 0x97D5,
+ 28163 - 11904: 0xD9FC,
+ 28164 - 11904: 0x944A,
+ 28165 - 11904: 0xB24D,
+ 28170 - 11904: 0x944D,
+ 28175 - 11904: 0x97CB,
+ 28181 - 11904: 0x8DDE,
+ 28184 - 11904: 0x8DDF,
+ 28185 - 11904: 0xB541,
+ 28186 - 11904: 0xB25A,
+ 28187 - 11904: 0xB4EE,
+ 28188 - 11904: 0xD9F6,
+ 28189 - 11904: 0xFDB8,
+ 28191 - 11904: 0xD9EA,
+ 28192 - 11904: 0xB4EB,
+ 28193 - 11904: 0xB4E7,
+ 28194 - 11904: 0xDA49,
+ 28195 - 11904: 0xB4ED,
+ 28196 - 11904: 0xB4F1,
+ 28197 - 11904: 0xB4EC,
+ 28198 - 11904: 0xB4F5,
+ 28199 - 11904: 0xDA4D,
+ 28200 - 11904: 0xDA44,
+ 28201 - 11904: 0x8DE0,
+ 28202 - 11904: 0xFEF9,
+ 28203 - 11904: 0xD9F1,
+ 28204 - 11904: 0xB4FA,
+ 28205 - 11904: 0xB4F4,
+ 28206 - 11904: 0xD9FD,
+ 28207 - 11904: 0xFDBB,
+ 28208 - 11904: 0xDA4A,
+ 28209 - 11904: 0xDA43,
+ 28210 - 11904: 0xB4E8,
+ 28211 - 11904: 0xD9F7,
+ 28212 - 11904: 0xB4F7,
+ 28213 - 11904: 0xDA55,
+ 28214 - 11904: 0xDA56,
+ 28216 - 11904: 0xB4E5,
+ 28217 - 11904: 0xDA48,
+ 28218 - 11904: 0xB4F9,
+ 28219 - 11904: 0xD9FB,
+ 28220 - 11904: 0xD9ED,
+ 28221 - 11904: 0xD9EE,
+ 28222 - 11904: 0xB4FD,
+ 28223 - 11904: 0xD9F2,
+ 28224 - 11904: 0xD9F9,
+ 28225 - 11904: 0xD9F3,
+ 28227 - 11904: 0xB4FB,
+ 28228 - 11904: 0xB544,
+ 28229 - 11904: 0xD9EF,
+ 28230 - 11904: 0xD9E8,
+ 28231 - 11904: 0xD9E9,
+ 28233 - 11904: 0xD9EB,
+ 28234 - 11904: 0xB4EA,
+ 28235 - 11904: 0xD9F8,
+ 28237 - 11904: 0xB4F8,
+ 28238 - 11904: 0xB542,
+ 28239 - 11904: 0xFDC0,
+ 28240 - 11904: 0xFCF9,
+ 28241 - 11904: 0xD9FA,
+ 28242 - 11904: 0xDA53,
+ 28243 - 11904: 0xDA4B,
+ 28244 - 11904: 0xB4E6,
+ 28245 - 11904: 0xDA51,
+ 28246 - 11904: 0xB4F2,
+ 28247 - 11904: 0x8CDD,
+ 28248 - 11904: 0xB4F0,
+ 28249 - 11904: 0xFB7E,
+ 28250 - 11904: 0xDA57,
+ 28251 - 11904: 0xB4EF,
+ 28252 - 11904: 0xDA41,
+ 28253 - 11904: 0xD9F4,
+ 28254 - 11904: 0xD9FE,
+ 28255 - 11904: 0xB547,
+ 28256 - 11904: 0xDA45,
+ 28257 - 11904: 0xDA42,
+ 28258 - 11904: 0xD9F0,
+ 28259 - 11904: 0xB543,
+ 28260 - 11904: 0xDA4F,
+ 28261 - 11904: 0xDA4C,
+ 28262 - 11904: 0xDA54,
+ 28263 - 11904: 0xB4E9,
+ 28264 - 11904: 0xDA40,
+ 28265 - 11904: 0xB546,
+ 28267 - 11904: 0xDA47,
+ 28270 - 11904: 0xB4F3,
+ 28271 - 11904: 0xB4F6,
+ 28273 - 11904: 0xDA46,
+ 28274 - 11904: 0xB545,
+ 28275 - 11904: 0xD9F5,
+ 28276 - 11904: 0xD5E4,
+ 28278 - 11904: 0x92B3,
+ 28279 - 11904: 0xDA50,
+ 28280 - 11904: 0xDA4E,
+ 28281 - 11904: 0xDA52,
+ 28284 - 11904: 0xFDAF,
+ 28294 - 11904: 0x8DE1,
+ 28296 - 11904: 0xD9EC,
+ 28297 - 11904: 0xB540,
+ 28299 - 11904: 0x95D3,
+ 28301 - 11904: 0xDE61,
+ 28302 - 11904: 0xDE60,
+ 28303 - 11904: 0xDE46,
+ 28304 - 11904: 0xB7BD,
+ 28306 - 11904: 0xDE5F,
+ 28307 - 11904: 0xDE49,
+ 28308 - 11904: 0xDE4A,
+ 28310 - 11904: 0xB7C7,
+ 28311 - 11904: 0xDE68,
+ 28312 - 11904: 0xB7C2,
+ 28313 - 11904: 0xDE5E,
+ 28314 - 11904: 0x89C1,
+ 28315 - 11904: 0xDE43,
+ 28316 - 11904: 0xB7C8,
+ 28317 - 11904: 0xB7BE,
+ 28318 - 11904: 0xDE52,
+ 28319 - 11904: 0xDE48,
+ 28320 - 11904: 0xDE4B,
+ 28321 - 11904: 0xDE63,
+ 28322 - 11904: 0xB7B8,
+ 28323 - 11904: 0xDE6A,
+ 28324 - 11904: 0xDE62,
+ 28325 - 11904: 0xB7C1,
+ 28326 - 11904: 0xDE57,
+ 28327 - 11904: 0xB7CC,
+ 28330 - 11904: 0xB7CB,
+ 28331 - 11904: 0xB7C5,
+ 28334 - 11904: 0xDE69,
+ 28335 - 11904: 0xB7B9,
+ 28336 - 11904: 0xDE55,
+ 28337 - 11904: 0xDE4C,
+ 28338 - 11904: 0xDE59,
+ 28339 - 11904: 0xDE65,
+ 28340 - 11904: 0xB7CD,
+ 28341 - 11904: 0xFD68,
+ 28342 - 11904: 0xB7BB,
+ 28343 - 11904: 0xDE54,
+ 28344 - 11904: 0x9CB7,
+ 28345 - 11904: 0xDE4D,
+ 28346 - 11904: 0xB7C4,
+ 28347 - 11904: 0x8DE3,
+ 28348 - 11904: 0xB7C3,
+ 28349 - 11904: 0xDE50,
+ 28350 - 11904: 0xDE5A,
+ 28351 - 11904: 0xDE64,
+ 28352 - 11904: 0xDE47,
+ 28353 - 11904: 0xDE51,
+ 28354 - 11904: 0xB7BC,
+ 28355 - 11904: 0xDE5B,
+ 28356 - 11904: 0xB7C9,
+ 28357 - 11904: 0xB7C0,
+ 28358 - 11904: 0xDE4E,
+ 28359 - 11904: 0xB7BF,
+ 28360 - 11904: 0xDE45,
+ 28361 - 11904: 0xDE53,
+ 28362 - 11904: 0xDE67,
+ 28363 - 11904: 0xB4FE,
+ 28364 - 11904: 0xBAB0,
+ 28365 - 11904: 0xDE56,
+ 28366 - 11904: 0xE26C,
+ 28367 - 11904: 0xDE58,
+ 28368 - 11904: 0xDE66,
+ 28369 - 11904: 0xB7C6,
+ 28370 - 11904: 0xDE4F,
+ 28371 - 11904: 0xB7BA,
+ 28372 - 11904: 0xB7CA,
+ 28373 - 11904: 0xBCF0,
+ 28374 - 11904: 0xDE44,
+ 28376 - 11904: 0xDE5D,
+ 28377 - 11904: 0xFAC0,
+ 28378 - 11904: 0x8DE5,
+ 28379 - 11904: 0xFA64,
+ 28380 - 11904: 0xDE5C,
+ 28381 - 11904: 0x8947,
+ 28386 - 11904: 0x8DE4,
+ 28392 - 11904: 0x8DE7,
+ 28393 - 11904: 0x8DE8,
+ 28395 - 11904: 0xE2AA,
+ 28396 - 11904: 0xBAAD,
+ 28397 - 11904: 0xE27D,
+ 28398 - 11904: 0xE2A4,
+ 28399 - 11904: 0xBAA2,
+ 28401 - 11904: 0xE26E,
+ 28402 - 11904: 0xBAAF,
+ 28404 - 11904: 0xBA77,
+ 28405 - 11904: 0xE26D,
+ 28406 - 11904: 0xE2B0,
+ 28407 - 11904: 0xBAB1,
+ 28408 - 11904: 0xE271,
+ 28409 - 11904: 0xE2A3,
+ 28410 - 11904: 0xFDC7,
+ 28411 - 11904: 0xE273,
+ 28412 - 11904: 0xE2B3,
+ 28413 - 11904: 0xE2AF,
+ 28414 - 11904: 0xBA75,
+ 28415 - 11904: 0xBAA1,
+ 28416 - 11904: 0xE653,
+ 28417 - 11904: 0xBAAE,
+ 28418 - 11904: 0xBA7D,
+ 28419 - 11904: 0xE26F,
+ 28420 - 11904: 0xFDB0,
+ 28421 - 11904: 0xE2AE,
+ 28422 - 11904: 0xBAA3,
+ 28423 - 11904: 0xE2AB,
+ 28424 - 11904: 0xE2B8,
+ 28425 - 11904: 0xE275,
+ 28426 - 11904: 0xE27E,
+ 28427 - 11904: 0x9445,
+ 28428 - 11904: 0x97D6,
+ 28429 - 11904: 0xE2B6,
+ 28430 - 11904: 0xE2AC,
+ 28431 - 11904: 0xBA7C,
+ 28434 - 11904: 0xE27C,
+ 28435 - 11904: 0xBA76,
+ 28436 - 11904: 0xBA74,
+ 28437 - 11904: 0xBAA8,
+ 28438 - 11904: 0xFCC6,
+ 28439 - 11904: 0x9844,
+ 28440 - 11904: 0xE27A,
+ 28441 - 11904: 0xE277,
+ 28442 - 11904: 0xE278,
+ 28444 - 11904: 0xE2B2,
+ 28446 - 11904: 0xE2B7,
+ 28447 - 11904: 0xE2B5,
+ 28448 - 11904: 0xBA7A,
+ 28449 - 11904: 0xE2B9,
+ 28450 - 11904: 0xBA7E,
+ 28451 - 11904: 0xBAA7,
+ 28452 - 11904: 0x8DE9,
+ 28453 - 11904: 0xE270,
+ 28454 - 11904: 0xE5FA,
+ 28455 - 11904: 0xE279,
+ 28457 - 11904: 0xBA78,
+ 28458 - 11904: 0xBAAC,
+ 28459 - 11904: 0xBAA9,
+ 28460 - 11904: 0xBA7B,
+ 28461 - 11904: 0xE2A5,
+ 28462 - 11904: 0xE274,
+ 28463 - 11904: 0xBAAA,
+ 28464 - 11904: 0xE2A7,
+ 28465 - 11904: 0xBAA4,
+ 28466 - 11904: 0xBAA6,
+ 28467 - 11904: 0xBA73,
+ 28468 - 11904: 0x8DEA,
+ 28469 - 11904: 0xE2A9,
+ 28470 - 11904: 0xE2A1,
+ 28471 - 11904: 0xE272,
+ 28472 - 11904: 0xBAA5,
+ 28473 - 11904: 0xE2B1,
+ 28474 - 11904: 0xE2B4,
+ 28475 - 11904: 0xE27B,
+ 28476 - 11904: 0xE2A8,
+ 28477 - 11904: 0xFE50,
+ 28478 - 11904: 0xBA79,
+ 28479 - 11904: 0xBCDF,
+ 28480 - 11904: 0xE2A6,
+ 28481 - 11904: 0xE5F9,
+ 28483 - 11904: 0xE2AD,
+ 28484 - 11904: 0xFDCC,
+ 28494 - 11904: 0xE276,
+ 28495 - 11904: 0xE644,
+ 28496 - 11904: 0xE64E,
+ 28497 - 11904: 0xBCE2,
+ 28498 - 11904: 0xE64D,
+ 28499 - 11904: 0xE659,
+ 28500 - 11904: 0xBCE4,
+ 28501 - 11904: 0xE64B,
+ 28502 - 11904: 0x9DA7,
+ 28503 - 11904: 0xE64F,
+ 28504 - 11904: 0xBCEF,
+ 28506 - 11904: 0xE646,
+ 28507 - 11904: 0xBCE7,
+ 28508 - 11904: 0xFDCD,
+ 28509 - 11904: 0xE652,
+ 28510 - 11904: 0xE9F0,
+ 28511 - 11904: 0xBCF3,
+ 28512 - 11904: 0xBCF2,
+ 28513 - 11904: 0xE654,
+ 28514 - 11904: 0xE643,
+ 28515 - 11904: 0xE65E,
+ 28516 - 11904: 0xBCED,
+ 28518 - 11904: 0xBCE3,
+ 28519 - 11904: 0xE657,
+ 28521 - 11904: 0xE65B,
+ 28522 - 11904: 0xE660,
+ 28523 - 11904: 0xE655,
+ 28524 - 11904: 0xE649,
+ 28525 - 11904: 0xBCE6,
+ 28526 - 11904: 0xBCE9,
+ 28527 - 11904: 0xBCF1,
+ 28528 - 11904: 0xBCEC,
+ 28530 - 11904: 0xE64C,
+ 28531 - 11904: 0xE2A2,
+ 28532 - 11904: 0xFDCF,
+ 28534 - 11904: 0xE648,
+ 28535 - 11904: 0xE65F,
+ 28536 - 11904: 0xBCE8,
+ 28537 - 11904: 0x95D2,
+ 28538 - 11904: 0xBCEB,
+ 28539 - 11904: 0xE661,
+ 28540 - 11904: 0xBCE0,
+ 28541 - 11904: 0xE656,
+ 28542 - 11904: 0xE5FB,
+ 28543 - 11904: 0xE65C,
+ 28544 - 11904: 0xC0DF,
+ 28545 - 11904: 0x8DED,
+ 28546 - 11904: 0xE64A,
+ 28548 - 11904: 0xBCE1,
+ 28549 - 11904: 0xE645,
+ 28550 - 11904: 0xBCE5,
+ 28551 - 11904: 0xE5FC,
+ 28552 - 11904: 0xBAAB,
+ 28553 - 11904: 0xE641,
+ 28554 - 11904: 0xFCBA,
+ 28555 - 11904: 0xE65A,
+ 28556 - 11904: 0xE642,
+ 28557 - 11904: 0xE640,
+ 28558 - 11904: 0xBCEA,
+ 28560 - 11904: 0xE658,
+ 28562 - 11904: 0xE5FE,
+ 28563 - 11904: 0xE651,
+ 28564 - 11904: 0xE650,
+ 28565 - 11904: 0xE65D,
+ 28566 - 11904: 0xE647,
+ 28567 - 11904: 0xBCEE,
+ 28573 - 11904: 0xFDC5,
+ 28574 - 11904: 0xE9F3,
+ 28575 - 11904: 0xFDD2,
+ 28576 - 11904: 0xBF49,
+ 28577 - 11904: 0xBEFE,
+ 28578 - 11904: 0xEA40,
+ 28579 - 11904: 0xE9EB,
+ 28580 - 11904: 0xBF41,
+ 28581 - 11904: 0xE9F7,
+ 28582 - 11904: 0xBF48,
+ 28583 - 11904: 0xBF43,
+ 28584 - 11904: 0xE9F5,
+ 28585 - 11904: 0xED4F,
+ 28586 - 11904: 0xE9FB,
+ 28587 - 11904: 0xEA42,
+ 28588 - 11904: 0xE9FA,
+ 28589 - 11904: 0xE9E9,
+ 28590 - 11904: 0xE9F8,
+ 28591 - 11904: 0xEA44,
+ 28592 - 11904: 0xEA46,
+ 28593 - 11904: 0xBEFD,
+ 28594 - 11904: 0xEA45,
+ 28595 - 11904: 0xBF44,
+ 28596 - 11904: 0xBF4A,
+ 28597 - 11904: 0x9CDC,
+ 28598 - 11904: 0xBF47,
+ 28600 - 11904: 0xE9FE,
+ 28601 - 11904: 0xBF46,
+ 28602 - 11904: 0xE9F9,
+ 28603 - 11904: 0x95CF,
+ 28604 - 11904: 0xE9ED,
+ 28605 - 11904: 0xE9F2,
+ 28606 - 11904: 0x8DEE,
+ 28607 - 11904: 0xE9FD,
+ 28608 - 11904: 0xBF45,
+ 28609 - 11904: 0xBF42,
+ 28610 - 11904: 0xBEFC,
+ 28611 - 11904: 0xBF40,
+ 28612 - 11904: 0xE9F1,
+ 28614 - 11904: 0xE5FD,
+ 28615 - 11904: 0xE9EC,
+ 28616 - 11904: 0xE9EF,
+ 28617 - 11904: 0xEA41,
+ 28618 - 11904: 0xE9F4,
+ 28619 - 11904: 0xE9EA,
+ 28620 - 11904: 0xED4E,
+ 28621 - 11904: 0xEA43,
+ 28622 - 11904: 0xE9EE,
+ 28623 - 11904: 0xE9FC,
+ 28627 - 11904: 0xFDD4,
+ 28628 - 11904: 0xED51,
+ 28629 - 11904: 0xC0E3,
+ 28632 - 11904: 0xC0D7,
+ 28633 - 11904: 0x96EC,
+ 28634 - 11904: 0x96EB,
+ 28635 - 11904: 0xC0DB,
+ 28636 - 11904: 0xED53,
+ 28637 - 11904: 0xED59,
+ 28638 - 11904: 0xED57,
+ 28639 - 11904: 0xC0D9,
+ 28640 - 11904: 0xC0DA,
+ 28641 - 11904: 0xC0E1,
+ 28642 - 11904: 0xED5A,
+ 28643 - 11904: 0xED52,
+ 28644 - 11904: 0xC0DC,
+ 28646 - 11904: 0xED56,
+ 28647 - 11904: 0xED55,
+ 28648 - 11904: 0xED5B,
+ 28649 - 11904: 0xC0E2,
+ 28651 - 11904: 0xC0DD,
+ 28652 - 11904: 0xC0E0,
+ 28653 - 11904: 0xED54,
+ 28654 - 11904: 0xC0E4,
+ 28655 - 11904: 0xC0DE,
+ 28656 - 11904: 0xC0E5,
+ 28657 - 11904: 0xC0D8,
+ 28658 - 11904: 0xED58,
+ 28660 - 11904: 0xED50,
+ 28662 - 11904: 0x90B6,
+ 28663 - 11904: 0xEFF7,
+ 28664 - 11904: 0xFDC3,
+ 28666 - 11904: 0xC271,
+ 28667 - 11904: 0xEFF4,
+ 28668 - 11904: 0xEFF6,
+ 28670 - 11904: 0xC26F,
+ 28671 - 11904: 0xEFF2,
+ 28672 - 11904: 0xEFF3,
+ 28673 - 11904: 0xEFEE,
+ 28675 - 11904: 0x98AB,
+ 28676 - 11904: 0xE9F6,
+ 28677 - 11904: 0xEFEF,
+ 28678 - 11904: 0xC270,
+ 28679 - 11904: 0xEFEB,
+ 28681 - 11904: 0xC26D,
+ 28682 - 11904: 0xEFF8,
+ 28683 - 11904: 0xC26E,
+ 28684 - 11904: 0xEFEC,
+ 28685 - 11904: 0xEFED,
+ 28686 - 11904: 0xEFF1,
+ 28687 - 11904: 0xC273,
+ 28689 - 11904: 0xC272,
+ 28692 - 11904: 0xEFF0,
+ 28693 - 11904: 0xC378,
+ 28694 - 11904: 0xF25F,
+ 28695 - 11904: 0xF265,
+ 28696 - 11904: 0xC379,
+ 28697 - 11904: 0xF25C,
+ 28698 - 11904: 0xC376,
+ 28699 - 11904: 0xC373,
+ 28700 - 11904: 0xF267,
+ 28701 - 11904: 0xC377,
+ 28702 - 11904: 0x96EE,
+ 28703 - 11904: 0xC374,
+ 28704 - 11904: 0xF25E,
+ 28705 - 11904: 0xF261,
+ 28706 - 11904: 0xF262,
+ 28707 - 11904: 0xF263,
+ 28708 - 11904: 0xF266,
+ 28710 - 11904: 0xEFF5,
+ 28711 - 11904: 0xF25D,
+ 28712 - 11904: 0xC375,
+ 28713 - 11904: 0xF264,
+ 28714 - 11904: 0xF268,
+ 28715 - 11904: 0xF260,
+ 28716 - 11904: 0x8DF4,
+ 28719 - 11904: 0xF45D,
+ 28720 - 11904: 0xC46A,
+ 28721 - 11904: 0xF460,
+ 28722 - 11904: 0xC46B,
+ 28723 - 11904: 0xF468,
+ 28724 - 11904: 0xF45F,
+ 28725 - 11904: 0xF45C,
+ 28727 - 11904: 0xF45E,
+ 28728 - 11904: 0xF462,
+ 28729 - 11904: 0xF465,
+ 28730 - 11904: 0xF464,
+ 28731 - 11904: 0xF467,
+ 28732 - 11904: 0xF45B,
+ 28734 - 11904: 0xC469,
+ 28735 - 11904: 0xF463,
+ 28736 - 11904: 0xF466,
+ 28737 - 11904: 0xF469,
+ 28738 - 11904: 0xF461,
+ 28739 - 11904: 0xF5D3,
+ 28740 - 11904: 0xF5D4,
+ 28741 - 11904: 0xF5D8,
+ 28742 - 11904: 0xF5D9,
+ 28744 - 11904: 0xF5D6,
+ 28745 - 11904: 0xF5D7,
+ 28746 - 11904: 0xF5D5,
+ 28747 - 11904: 0xFDE0,
+ 28748 - 11904: 0xC4E9,
+ 28749 - 11904: 0x8C67,
+ 28752 - 11904: 0x8DF6,
+ 28753 - 11904: 0xC578,
+ 28754 - 11904: 0xF6EB,
+ 28756 - 11904: 0x8DF7,
+ 28757 - 11904: 0xF6E8,
+ 28758 - 11904: 0xF6E9,
+ 28759 - 11904: 0xF6EA,
+ 28760 - 11904: 0xC579,
+ 28762 - 11904: 0xF7E5,
+ 28763 - 11904: 0xF7E4,
+ 28764 - 11904: 0x8FFA,
+ 28765 - 11904: 0xF8AF,
+ 28766 - 11904: 0xC5F4,
+ 28767 - 11904: 0xF8AD,
+ 28768 - 11904: 0xF8B0,
+ 28769 - 11904: 0xF8AE,
+ 28770 - 11904: 0xF8F5,
+ 28771 - 11904: 0xC657,
+ 28772 - 11904: 0xC665,
+ 28773 - 11904: 0xF9A3,
+ 28774 - 11904: 0xF96C,
+ 28775 - 11904: 0x97D0,
+ 28776 - 11904: 0xF9A2,
+ 28777 - 11904: 0xF9D0,
+ 28778 - 11904: 0xF9D1,
+ 28779 - 11904: 0xA4F5,
+ 28780 - 11904: 0x8BD2,
+ 28782 - 11904: 0x87DE,
+ 28783 - 11904: 0x8DF8,
+ 28784 - 11904: 0xA6C7,
+ 28785 - 11904: 0xCA41,
+ 28788 - 11904: 0xCB5E,
+ 28789 - 11904: 0x90D9,
+ 28790 - 11904: 0xA85F,
+ 28791 - 11904: 0x8C47,
+ 28792 - 11904: 0xA862,
+ 28793 - 11904: 0xFAF0,
+ 28794 - 11904: 0xCB5F,
+ 28796 - 11904: 0xA860,
+ 28797 - 11904: 0xA861,
+ 28798 - 11904: 0xFDE1,
+ 28799 - 11904: 0x8DF9,
+ 28801 - 11904: 0xFDE3,
+ 28802 - 11904: 0xCD58,
+ 28803 - 11904: 0xCD5A,
+ 28804 - 11904: 0xCD55,
+ 28805 - 11904: 0xCD52,
+ 28806 - 11904: 0xCD54,
+ 28809 - 11904: 0x8DFA,
+ 28810 - 11904: 0xAAA4,
+ 28811 - 11904: 0xFB63,
+ 28814 - 11904: 0xAAA2,
+ 28815 - 11904: 0x90A6,
+ 28817 - 11904: 0xCD56,
+ 28818 - 11904: 0xAAA3,
+ 28819 - 11904: 0xCD53,
+ 28820 - 11904: 0xCD50,
+ 28821 - 11904: 0xAAA1,
+ 28822 - 11904: 0xCD57,
+ 28824 - 11904: 0xCD51,
+ 28825 - 11904: 0xAAA5,
+ 28826 - 11904: 0xCD59,
+ 28831 - 11904: 0xCFAF,
+ 28832 - 11904: 0x9970,
+ 28833 - 11904: 0xCFB3,
+ 28835 - 11904: 0x91EB,
+ 28836 - 11904: 0xACB7,
+ 28837 - 11904: 0x9770,
+ 28838 - 11904: 0x986F,
+ 28839 - 11904: 0xFDE2,
+ 28841 - 11904: 0xCFB6,
+ 28843 - 11904: 0xACAF,
+ 28844 - 11904: 0xACB2,
+ 28845 - 11904: 0xACB4,
+ 28846 - 11904: 0xACB6,
+ 28847 - 11904: 0xACB3,
+ 28848 - 11904: 0xCFB2,
+ 28849 - 11904: 0xCFB1,
+ 28851 - 11904: 0xACB1,
+ 28852 - 11904: 0xCFB4,
+ 28853 - 11904: 0xCFB5,
+ 28855 - 11904: 0xCFAE,
+ 28856 - 11904: 0xACB5,
+ 28857 - 11904: 0x98F2,
+ 28858 - 11904: 0xACB0,
+ 28859 - 11904: 0x9AFC,
+ 28860 - 11904: 0x896C,
+ 28861 - 11904: 0xFDFD,
+ 28862 - 11904: 0xCFB0,
+ 28864 - 11904: 0x995E,
+ 28868 - 11904: 0x95BD,
+ 28869 - 11904: 0xD277,
+ 28870 - 11904: 0xD278,
+ 28871 - 11904: 0xD279,
+ 28872 - 11904: 0xAF50,
+ 28874 - 11904: 0xAF4C,
+ 28875 - 11904: 0xD26E,
+ 28876 - 11904: 0xFDE4,
+ 28877 - 11904: 0xD276,
+ 28878 - 11904: 0xD27B,
+ 28879 - 11904: 0xAF51,
+ 28880 - 11904: 0x91E6,
+ 28881 - 11904: 0xD26C,
+ 28882 - 11904: 0xD272,
+ 28883 - 11904: 0xD26B,
+ 28884 - 11904: 0xD275,
+ 28885 - 11904: 0xFDE5,
+ 28886 - 11904: 0xFDE6,
+ 28887 - 11904: 0xD271,
+ 28888 - 11904: 0xAF4D,
+ 28889 - 11904: 0xAF4F,
+ 28890 - 11904: 0xD27A,
+ 28892 - 11904: 0xD26A,
+ 28893 - 11904: 0xD26D,
+ 28894 - 11904: 0xD273,
+ 28895 - 11904: 0xFDE7,
+ 28896 - 11904: 0xD274,
+ 28897 - 11904: 0xD27C,
+ 28898 - 11904: 0xD270,
+ 28900 - 11904: 0xAF4E,
+ 28911 - 11904: 0xB26D,
+ 28912 - 11904: 0xD64E,
+ 28913 - 11904: 0x9454,
+ 28915 - 11904: 0xD650,
+ 28916 - 11904: 0xD64C,
+ 28917 - 11904: 0x99B8,
+ 28918 - 11904: 0xD658,
+ 28919 - 11904: 0xD64A,
+ 28920 - 11904: 0xD657,
+ 28921 - 11904: 0xB269,
+ 28922 - 11904: 0xD648,
+ 28923 - 11904: 0xDA5B,
+ 28924 - 11904: 0xD652,
+ 28925 - 11904: 0xB26C,
+ 28926 - 11904: 0x97E9,
+ 28927 - 11904: 0xD653,
+ 28928 - 11904: 0xD656,
+ 28930 - 11904: 0xD65A,
+ 28932 - 11904: 0xD64F,
+ 28933 - 11904: 0x9346,
+ 28934 - 11904: 0xD654,
+ 28937 - 11904: 0xB26A,
+ 28938 - 11904: 0xB26B,
+ 28939 - 11904: 0xD659,
+ 28940 - 11904: 0xD64D,
+ 28941 - 11904: 0xD649,
+ 28942 - 11904: 0xD65B,
+ 28944 - 11904: 0xD651,
+ 28947 - 11904: 0xD655,
+ 28951 - 11904: 0xD64B,
+ 28953 - 11904: 0xB548,
+ 28954 - 11904: 0xB549,
+ 28955 - 11904: 0xDA65,
+ 28956 - 11904: 0xB54F,
+ 28957 - 11904: 0x9863,
+ 28958 - 11904: 0xDA59,
+ 28959 - 11904: 0xDA62,
+ 28960 - 11904: 0xDA58,
+ 28961 - 11904: 0xB54C,
+ 28962 - 11904: 0xDA60,
+ 28963 - 11904: 0xDA5E,
+ 28965 - 11904: 0xDA5F,
+ 28966 - 11904: 0xB54A,
+ 28968 - 11904: 0xDA63,
+ 28969 - 11904: 0x95BC,
+ 28971 - 11904: 0xFDED,
+ 28972 - 11904: 0xFDF7,
+ 28974 - 11904: 0xDA5C,
+ 28975 - 11904: 0xDA5A,
+ 28976 - 11904: 0xB54B,
+ 28977 - 11904: 0xDA5D,
+ 28978 - 11904: 0xDA61,
+ 28979 - 11904: 0x9870,
+ 28980 - 11904: 0x96F6,
+ 28981 - 11904: 0x8EA9,
+ 28982 - 11904: 0xB54D,
+ 28986 - 11904: 0xDA64,
+ 28987 - 11904: 0x9451,
+ 28990 - 11904: 0x8E43,
+ 28992 - 11904: 0x8B5A,
+ 28993 - 11904: 0xDE70,
+ 28994 - 11904: 0xDE77,
+ 28995 - 11904: 0xDE79,
+ 28996 - 11904: 0xDEA1,
+ 28997 - 11904: 0xFDEE,
+ 28998 - 11904: 0xB7DA,
+ 28999 - 11904: 0xDE6B,
+ 29001 - 11904: 0xB7D2,
+ 29002 - 11904: 0xFDF0,
+ 29003 - 11904: 0xDE7A,
+ 29004 - 11904: 0xB7D7,
+ 29005 - 11904: 0xDEA2,
+ 29006 - 11904: 0xB7CE,
+ 29007 - 11904: 0xFDF4,
+ 29008 - 11904: 0xDE7D,
+ 29009 - 11904: 0x9BF5,
+ 29010 - 11904: 0xDE6D,
+ 29011 - 11904: 0xDE7E,
+ 29012 - 11904: 0xDE6C,
+ 29014 - 11904: 0xB7DC,
+ 29015 - 11904: 0x8CEE,
+ 29016 - 11904: 0xDE78,
+ 29017 - 11904: 0xB7CF,
+ 29018 - 11904: 0xDEA3,
+ 29020 - 11904: 0xB7D4,
+ 29021 - 11904: 0xDE71,
+ 29022 - 11904: 0xB7D9,
+ 29023 - 11904: 0xDE7C,
+ 29024 - 11904: 0xDE6F,
+ 29025 - 11904: 0xDE76,
+ 29026 - 11904: 0xDE72,
+ 29027 - 11904: 0xDE6E,
+ 29028 - 11904: 0xB7D1,
+ 29029 - 11904: 0xB7D8,
+ 29030 - 11904: 0xB7D6,
+ 29031 - 11904: 0xB7D3,
+ 29032 - 11904: 0xB7DB,
+ 29033 - 11904: 0xB7D0,
+ 29034 - 11904: 0xDE75,
+ 29035 - 11904: 0x977E,
+ 29036 - 11904: 0xB7D5,
+ 29038 - 11904: 0xFDF1,
+ 29040 - 11904: 0xDE7B,
+ 29041 - 11904: 0x9BD5,
+ 29042 - 11904: 0xDE73,
+ 29043 - 11904: 0x9AC3,
+ 29045 - 11904: 0x97C8,
+ 29046 - 11904: 0xA0DB,
+ 29047 - 11904: 0x91D0,
+ 29048 - 11904: 0xDE74,
+ 29050 - 11904: 0x9FE4,
+ 29051 - 11904: 0xE2C1,
+ 29052 - 11904: 0x8FDD,
+ 29053 - 11904: 0xBAB4,
+ 29054 - 11904: 0x91E9,
+ 29056 - 11904: 0xE2BD,
+ 29057 - 11904: 0xE2C3,
+ 29058 - 11904: 0xE2BF,
+ 29060 - 11904: 0xBAB6,
+ 29061 - 11904: 0xE2BE,
+ 29062 - 11904: 0xE2C2,
+ 29063 - 11904: 0xE2BA,
+ 29064 - 11904: 0x98E0,
+ 29065 - 11904: 0xE2BC,
+ 29066 - 11904: 0xBAB5,
+ 29068 - 11904: 0x92CA,
+ 29070 - 11904: 0x9857,
+ 29071 - 11904: 0xE2C0,
+ 29072 - 11904: 0xE2BB,
+ 29073 - 11904: 0x8C51,
+ 29074 - 11904: 0xBAB7,
+ 29076 - 11904: 0xBAB2,
+ 29078 - 11904: 0xFDEB,
+ 29079 - 11904: 0xE2C4,
+ 29080 - 11904: 0x9B49,
+ 29081 - 11904: 0xBAB3,
+ 29082 - 11904: 0xE667,
+ 29083 - 11904: 0xE664,
+ 29084 - 11904: 0xE670,
+ 29085 - 11904: 0xE66A,
+ 29086 - 11904: 0xE66C,
+ 29087 - 11904: 0xBCF4,
+ 29088 - 11904: 0xE666,
+ 29089 - 11904: 0xE66E,
+ 29090 - 11904: 0x9D76,
+ 29091 - 11904: 0x9EAF,
+ 29092 - 11904: 0xE66D,
+ 29093 - 11904: 0xE66B,
+ 29095 - 11904: 0xE671,
+ 29096 - 11904: 0xBCF7,
+ 29097 - 11904: 0xE668,
+ 29098 - 11904: 0xE66F,
+ 29100 - 11904: 0xBCF5,
+ 29101 - 11904: 0x9CCC,
+ 29103 - 11904: 0xE663,
+ 29104 - 11904: 0xE665,
+ 29105 - 11904: 0xBCF6,
+ 29106 - 11904: 0xE662,
+ 29107 - 11904: 0xE672,
+ 29108 - 11904: 0xFDEA,
+ 29109 - 11904: 0xE669,
+ 29111 - 11904: 0x8DF1,
+ 29112 - 11904: 0xEA4A,
+ 29113 - 11904: 0xBF51,
+ 29114 - 11904: 0xFDFB,
+ 29116 - 11904: 0xEA55,
+ 29117 - 11904: 0xEA53,
+ 29118 - 11904: 0xBF4B,
+ 29119 - 11904: 0xEA49,
+ 29120 - 11904: 0xEA4C,
+ 29121 - 11904: 0xEA4D,
+ 29122 - 11904: 0xEA48,
+ 29123 - 11904: 0xBF55,
+ 29124 - 11904: 0xBF56,
+ 29125 - 11904: 0xEA47,
+ 29126 - 11904: 0xEA56,
+ 29127 - 11904: 0xEA51,
+ 29128 - 11904: 0xBF4F,
+ 29129 - 11904: 0xBF4C,
+ 29130 - 11904: 0xEA50,
+ 29131 - 11904: 0xEA4E,
+ 29134 - 11904: 0xBF52,
+ 29135 - 11904: 0xEA52,
+ 29136 - 11904: 0xBF4D,
+ 29137 - 11904: 0x8E53,
+ 29138 - 11904: 0xBF4E,
+ 29140 - 11904: 0xEA4F,
+ 29141 - 11904: 0xBF50,
+ 29142 - 11904: 0xEA4B,
+ 29144 - 11904: 0xEA54,
+ 29145 - 11904: 0xBF53,
+ 29146 - 11904: 0xEA57,
+ 29147 - 11904: 0xEA58,
+ 29148 - 11904: 0xBF54,
+ 29149 - 11904: 0xFACF,
+ 29151 - 11904: 0xC0E7,
+ 29152 - 11904: 0xC0EE,
+ 29153 - 11904: 0xED5C,
+ 29154 - 11904: 0xED62,
+ 29156 - 11904: 0xED60,
+ 29157 - 11904: 0xC0EA,
+ 29158 - 11904: 0xC0E9,
+ 29159 - 11904: 0xC0E6,
+ 29160 - 11904: 0xED5E,
+ 29163 - 11904: 0x96F9,
+ 29164 - 11904: 0xC0EC,
+ 29165 - 11904: 0xC0EB,
+ 29166 - 11904: 0xC0E8,
+ 29168 - 11904: 0xED61,
+ 29169 - 11904: 0xED5D,
+ 29170 - 11904: 0xED5F,
+ 29172 - 11904: 0xC0ED,
+ 29173 - 11904: 0x98BF,
+ 29174 - 11904: 0x9E49,
+ 29176 - 11904: 0xC277,
+ 29177 - 11904: 0xEFFB,
+ 29179 - 11904: 0xC274,
+ 29180 - 11904: 0xC275,
+ 29181 - 11904: 0xEFFD,
+ 29182 - 11904: 0xC276,
+ 29183 - 11904: 0xEFFA,
+ 29184 - 11904: 0x8CA7,
+ 29185 - 11904: 0xEFF9,
+ 29186 - 11904: 0xF26C,
+ 29187 - 11904: 0xEFFC,
+ 29189 - 11904: 0xF26D,
+ 29190 - 11904: 0xC37A,
+ 29191 - 11904: 0xF26B,
+ 29193 - 11904: 0x9BCA,
+ 29194 - 11904: 0xF26A,
+ 29196 - 11904: 0xF269,
+ 29197 - 11904: 0xC37B,
+ 29198 - 11904: 0xFDFE,
+ 29199 - 11904: 0x92DC,
+ 29200 - 11904: 0xC46C,
+ 29203 - 11904: 0xF46A,
+ 29204 - 11904: 0xF46B,
+ 29205 - 11904: 0xFE41,
+ 29206 - 11904: 0x91CC,
+ 29207 - 11904: 0x91E2,
+ 29209 - 11904: 0xF5DC,
+ 29210 - 11904: 0xF5DB,
+ 29211 - 11904: 0xC4EA,
+ 29213 - 11904: 0xF5DA,
+ 29214 - 11904: 0xF6EC,
+ 29215 - 11904: 0xF6ED,
+ 29218 - 11904: 0xF7E6,
+ 29219 - 11904: 0xF8B1,
+ 29220 - 11904: 0xFE44,
+ 29221 - 11904: 0x875F,
+ 29222 - 11904: 0xF8F6,
+ 29223 - 11904: 0xF9BC,
+ 29224 - 11904: 0xC679,
+ 29225 - 11904: 0xF9C6,
+ 29226 - 11904: 0xA4F6,
+ 29227 - 11904: 0x8BD3,
+ 29228 - 11904: 0xAAA6,
+ 29229 - 11904: 0xAAA7,
+ 29230 - 11904: 0xFE47,
+ 29232 - 11904: 0xACB8,
+ 29237 - 11904: 0xC0EF,
+ 29238 - 11904: 0xA4F7,
+ 29240 - 11904: 0xAAA8,
+ 29241 - 11904: 0xAF52,
+ 29242 - 11904: 0xB7DD,
+ 29243 - 11904: 0xA4F8,
+ 29245 - 11904: 0xB26E,
+ 29246 - 11904: 0xBAB8,
+ 29247 - 11904: 0xC962,
+ 29248 - 11904: 0xFE48,
+ 29249 - 11904: 0xCFB7,
+ 29250 - 11904: 0xD27D,
+ 29252 - 11904: 0xE2C5,
+ 29254 - 11904: 0xC0F0,
+ 29255 - 11904: 0xA4F9,
+ 29256 - 11904: 0xAAA9,
+ 29257 - 11904: 0xCFB8,
+ 29258 - 11904: 0xCFB9,
+ 29259 - 11904: 0xDA66,
+ 29260 - 11904: 0xB550,
+ 29263 - 11904: 0xDEA4,
+ 29264 - 11904: 0xA0E4,
+ 29266 - 11904: 0xB7DE,
+ 29267 - 11904: 0xE2C6,
+ 29269 - 11904: 0xFE4B,
+ 29270 - 11904: 0xBCF8,
+ 29271 - 11904: 0xFE4C,
+ 29272 - 11904: 0xC37C,
+ 29273 - 11904: 0xA4FA,
+ 29274 - 11904: 0xDA67,
+ 29275 - 11904: 0xA4FB,
+ 29276 - 11904: 0x8DBF,
+ 29277 - 11904: 0xA6C9,
+ 29278 - 11904: 0xCA42,
+ 29279 - 11904: 0xA6C8,
+ 29280 - 11904: 0xA865,
+ 29281 - 11904: 0xA864,
+ 29282 - 11904: 0xA863,
+ 29283 - 11904: 0xCB60,
+ 29286 - 11904: 0x9E78,
+ 29287 - 11904: 0xAAAA,
+ 29289 - 11904: 0xAAAB,
+ 29290 - 11904: 0xCD5B,
+ 29292 - 11904: 0xCFBA,
+ 29294 - 11904: 0xCFBD,
+ 29295 - 11904: 0xACBA,
+ 29296 - 11904: 0xCFBB,
+ 29298 - 11904: 0xACB9,
+ 29299 - 11904: 0xCFBC,
+ 29300 - 11904: 0xACBB,
+ 29302 - 11904: 0xD2A2,
+ 29303 - 11904: 0xD2A1,
+ 29304 - 11904: 0xD27E,
+ 29305 - 11904: 0xAF53,
+ 29307 - 11904: 0xD65D,
+ 29308 - 11904: 0xD65E,
+ 29309 - 11904: 0xB26F,
+ 29310 - 11904: 0xD65C,
+ 29311 - 11904: 0xD65F,
+ 29312 - 11904: 0xB552,
+ 29313 - 11904: 0xB270,
+ 29314 - 11904: 0xFE51,
+ 29316 - 11904: 0xB551,
+ 29317 - 11904: 0xDA6B,
+ 29318 - 11904: 0xDA6A,
+ 29319 - 11904: 0x9456,
+ 29320 - 11904: 0xDA68,
+ 29321 - 11904: 0xDA69,
+ 29323 - 11904: 0xDA6C,
+ 29324 - 11904: 0xDEA6,
+ 29325 - 11904: 0xDEA5,
+ 29326 - 11904: 0xDEA9,
+ 29327 - 11904: 0x9D61,
+ 29328 - 11904: 0xDEA8,
+ 29329 - 11904: 0xDEA7,
+ 29330 - 11904: 0xBAB9,
+ 29331 - 11904: 0xE2C9,
+ 29332 - 11904: 0x9457,
+ 29333 - 11904: 0xE2C8,
+ 29334 - 11904: 0xBABA,
+ 29335 - 11904: 0xE2C7,
+ 29336 - 11904: 0xE673,
+ 29338 - 11904: 0xE674,
+ 29339 - 11904: 0xBCF9,
+ 29341 - 11904: 0xEA59,
+ 29342 - 11904: 0xEA5A,
+ 29343 - 11904: 0x9966,
+ 29345 - 11904: 0xF272,
+ 29346 - 11904: 0xC37D,
+ 29347 - 11904: 0xF271,
+ 29348 - 11904: 0xF270,
+ 29349 - 11904: 0xF26E,
+ 29350 - 11904: 0xF26F,
+ 29351 - 11904: 0xC4EB,
+ 29352 - 11904: 0xF46C,
+ 29353 - 11904: 0xF6EE,
+ 29354 - 11904: 0xF8F7,
+ 29356 - 11904: 0xA4FC,
+ 29357 - 11904: 0x8BD5,
+ 29358 - 11904: 0xC9A5,
+ 29359 - 11904: 0xA5C7,
+ 29360 - 11904: 0xC9A6,
+ 29362 - 11904: 0xA069,
+ 29364 - 11904: 0xCA43,
+ 29365 - 11904: 0xCA44,
+ 29370 - 11904: 0xCB66,
+ 29373 - 11904: 0xCB62,
+ 29375 - 11904: 0xCB61,
+ 29376 - 11904: 0xAAAC,
+ 29377 - 11904: 0xCB65,
+ 29378 - 11904: 0xA867,
+ 29379 - 11904: 0xCB63,
+ 29380 - 11904: 0xA866,
+ 29381 - 11904: 0xCB67,
+ 29382 - 11904: 0xCB64,
+ 29385 - 11904: 0xCD5F,
+ 29386 - 11904: 0xCFBE,
+ 29387 - 11904: 0xCD5D,
+ 29388 - 11904: 0xCD64,
+ 29389 - 11904: 0x98B4,
+ 29390 - 11904: 0xAAAD,
+ 29392 - 11904: 0xAAB0,
+ 29393 - 11904: 0xCD65,
+ 29394 - 11904: 0xCD61,
+ 29396 - 11904: 0xCD62,
+ 29398 - 11904: 0xCD5C,
+ 29399 - 11904: 0xAAAF,
+ 29400 - 11904: 0xCD5E,
+ 29401 - 11904: 0xAAAE,
+ 29402 - 11904: 0xCD63,
+ 29404 - 11904: 0xCD60,
+ 29407 - 11904: 0xCFC2,
+ 29408 - 11904: 0xACBD,
+ 29409 - 11904: 0xACBE,
+ 29410 - 11904: 0xA049,
+ 29411 - 11904: 0xCFC5,
+ 29412 - 11904: 0xCFBF,
+ 29414 - 11904: 0xCFC4,
+ 29416 - 11904: 0xCFC0,
+ 29417 - 11904: 0xACBC,
+ 29418 - 11904: 0xCFC3,
+ 29419 - 11904: 0xCFC1,
+ 29427 - 11904: 0xD2A8,
+ 29428 - 11904: 0xD2A5,
+ 29430 - 11904: 0xD2A7,
+ 29431 - 11904: 0xAF58,
+ 29432 - 11904: 0xAF57,
+ 29433 - 11904: 0xAF55,
+ 29434 - 11904: 0xD2A4,
+ 29435 - 11904: 0xD2A9,
+ 29436 - 11904: 0xAF54,
+ 29437 - 11904: 0xAF56,
+ 29438 - 11904: 0xD2A6,
+ 29439 - 11904: 0xD667,
+ 29440 - 11904: 0xD2A3,
+ 29441 - 11904: 0xD2AA,
+ 29442 - 11904: 0xA04C,
+ 29444 - 11904: 0x9E65,
+ 29447 - 11904: 0xD662,
+ 29448 - 11904: 0xD666,
+ 29450 - 11904: 0xD665,
+ 29451 - 11904: 0xDA6E,
+ 29452 - 11904: 0xDA79,
+ 29455 - 11904: 0xD668,
+ 29456 - 11904: 0x98B5,
+ 29457 - 11904: 0xD663,
+ 29458 - 11904: 0xDA6D,
+ 29459 - 11904: 0xB274,
+ 29462 - 11904: 0xB273,
+ 29463 - 11904: 0xD661,
+ 29464 - 11904: 0xD664,
+ 29465 - 11904: 0xB275,
+ 29467 - 11904: 0xB272,
+ 29468 - 11904: 0xB271,
+ 29469 - 11904: 0xD660,
+ 29470 - 11904: 0xD669,
+ 29474 - 11904: 0xDA70,
+ 29475 - 11904: 0xDA77,
+ 29477 - 11904: 0xB554,
+ 29478 - 11904: 0xDA76,
+ 29479 - 11904: 0xDA73,
+ 29480 - 11904: 0xFE58,
+ 29481 - 11904: 0xB556,
+ 29482 - 11904: 0xFE52,
+ 29483 - 11904: 0xFE53,
+ 29484 - 11904: 0xA065,
+ 29485 - 11904: 0xDA75,
+ 29486 - 11904: 0xFE59,
+ 29488 - 11904: 0xDA6F,
+ 29489 - 11904: 0xDA71,
+ 29490 - 11904: 0xDA74,
+ 29491 - 11904: 0xDA72,
+ 29492 - 11904: 0xB555,
+ 29493 - 11904: 0xDA78,
+ 29494 - 11904: 0xB553,
+ 29495 - 11904: 0xB7DF,
+ 29496 - 11904: 0x98B7,
+ 29497 - 11904: 0x98B8,
+ 29498 - 11904: 0xDEAD,
+ 29499 - 11904: 0xDEAC,
+ 29500 - 11904: 0xDEAA,
+ 29502 - 11904: 0xB7E2,
+ 29503 - 11904: 0xB7E1,
+ 29504 - 11904: 0xDEAE,
+ 29505 - 11904: 0x98BA,
+ 29506 - 11904: 0xDEAB,
+ 29507 - 11904: 0xE2CA,
+ 29508 - 11904: 0xBABB,
+ 29509 - 11904: 0xB7E0,
+ 29512 - 11904: 0x98BB,
+ 29513 - 11904: 0xDEB0,
+ 29514 - 11904: 0xDEAF,
+ 29516 - 11904: 0xE2CD,
+ 29517 - 11904: 0xE2CB,
+ 29518 - 11904: 0xBCFA,
+ 29519 - 11904: 0x9FBC,
+ 29520 - 11904: 0xBABC,
+ 29521 - 11904: 0xE2CC,
+ 29522 - 11904: 0xE676,
+ 29527 - 11904: 0xBCFB,
+ 29528 - 11904: 0xE675,
+ 29529 - 11904: 0xE67E,
+ 29530 - 11904: 0xE67D,
+ 29531 - 11904: 0xE67B,
+ 29533 - 11904: 0xE67A,
+ 29534 - 11904: 0xE677,
+ 29535 - 11904: 0xE678,
+ 29536 - 11904: 0xE679,
+ 29537 - 11904: 0xE67C,
+ 29538 - 11904: 0xE6A1,
+ 29541 - 11904: 0xEA5F,
+ 29542 - 11904: 0xEA5C,
+ 29543 - 11904: 0xEA5D,
+ 29544 - 11904: 0xBF57,
+ 29545 - 11904: 0xEA5B,
+ 29546 - 11904: 0xEA61,
+ 29547 - 11904: 0xEA60,
+ 29548 - 11904: 0xEA5E,
+ 29550 - 11904: 0xED64,
+ 29551 - 11904: 0xED65,
+ 29552 - 11904: 0xC0F1,
+ 29553 - 11904: 0xA04A,
+ 29554 - 11904: 0xC0F2,
+ 29555 - 11904: 0xED63,
+ 29556 - 11904: 0x9EC7,
+ 29557 - 11904: 0xC279,
+ 29558 - 11904: 0xEFFE,
+ 29559 - 11904: 0xC278,
+ 29560 - 11904: 0xC37E,
+ 29562 - 11904: 0xC3A1,
+ 29563 - 11904: 0xC46D,
+ 29564 - 11904: 0xF46E,
+ 29565 - 11904: 0xF46D,
+ 29566 - 11904: 0xF5DD,
+ 29567 - 11904: 0xF6EF,
+ 29568 - 11904: 0xC57A,
+ 29569 - 11904: 0xF7E8,
+ 29570 - 11904: 0xF7E7,
+ 29571 - 11904: 0xF7E9,
+ 29572 - 11904: 0xA5C8,
+ 29573 - 11904: 0xCFC6,
+ 29574 - 11904: 0xAF59,
+ 29575 - 11904: 0xB276,
+ 29576 - 11904: 0xD66A,
+ 29577 - 11904: 0xA5C9,
+ 29578 - 11904: 0xC9A7,
+ 29579 - 11904: 0xA4FD,
+ 29580 - 11904: 0x8CA9,
+ 29582 - 11904: 0xCA45,
+ 29583 - 11904: 0x98AE,
+ 29586 - 11904: 0xCB6C,
+ 29587 - 11904: 0xCB6A,
+ 29588 - 11904: 0xCB6B,
+ 29589 - 11904: 0xCB68,
+ 29590 - 11904: 0xA868,
+ 29591 - 11904: 0xCB69,
+ 29592 - 11904: 0x92D6,
+ 29596 - 11904: 0xFAE1,
+ 29597 - 11904: 0xCD6D,
+ 29598 - 11904: 0x91D4,
+ 29599 - 11904: 0xAAB3,
+ 29600 - 11904: 0xCD6B,
+ 29601 - 11904: 0xCD67,
+ 29602 - 11904: 0xCD6A,
+ 29604 - 11904: 0xCD66,
+ 29605 - 11904: 0xAAB5,
+ 29606 - 11904: 0xCD69,
+ 29607 - 11904: 0xFADE,
+ 29608 - 11904: 0xAAB2,
+ 29609 - 11904: 0xAAB1,
+ 29610 - 11904: 0xFE5B,
+ 29611 - 11904: 0xAAB4,
+ 29612 - 11904: 0xCD6C,
+ 29613 - 11904: 0xCD68,
+ 29618 - 11904: 0xACC2,
+ 29619 - 11904: 0xACC5,
+ 29620 - 11904: 0xCFCE,
+ 29621 - 11904: 0xCFCD,
+ 29622 - 11904: 0xCFCC,
+ 29623 - 11904: 0xACBF,
+ 29624 - 11904: 0xCFD5,
+ 29625 - 11904: 0xCFCB,
+ 29626 - 11904: 0x8C53,
+ 29627 - 11904: 0xACC1,
+ 29628 - 11904: 0xD2AF,
+ 29630 - 11904: 0xCFD2,
+ 29631 - 11904: 0xCFD0,
+ 29632 - 11904: 0xACC4,
+ 29634 - 11904: 0xCFC8,
+ 29635 - 11904: 0xCFD3,
+ 29636 - 11904: 0x87BF,
+ 29637 - 11904: 0xCFCA,
+ 29638 - 11904: 0xCFD4,
+ 29639 - 11904: 0xCFD1,
+ 29640 - 11904: 0xCFC9,
+ 29641 - 11904: 0xFE5E,
+ 29642 - 11904: 0xACC0,
+ 29643 - 11904: 0xCFD6,
+ 29644 - 11904: 0xCFC7,
+ 29645 - 11904: 0xACC3,
+ 29646 - 11904: 0xFBD7,
+ 29647 - 11904: 0xFE5A,
+ 29648 - 11904: 0x94C5,
+ 29650 - 11904: 0xD2B4,
+ 29651 - 11904: 0xD2AB,
+ 29652 - 11904: 0xD2B6,
+ 29653 - 11904: 0xFACA,
+ 29654 - 11904: 0xD2AE,
+ 29655 - 11904: 0xD2B9,
+ 29656 - 11904: 0xD2BA,
+ 29657 - 11904: 0xD2AC,
+ 29658 - 11904: 0xD2B8,
+ 29659 - 11904: 0xD2B5,
+ 29660 - 11904: 0xD2B3,
+ 29661 - 11904: 0xD2B7,
+ 29662 - 11904: 0xAF5F,
+ 29664 - 11904: 0xAF5D,
+ 29665 - 11904: 0x98C1,
+ 29666 - 11904: 0x975C,
+ 29667 - 11904: 0xD2B1,
+ 29668 - 11904: 0xFE74,
+ 29669 - 11904: 0xD2AD,
+ 29670 - 11904: 0x9773,
+ 29671 - 11904: 0xD2B0,
+ 29672 - 11904: 0xD2BB,
+ 29673 - 11904: 0xD2B2,
+ 29674 - 11904: 0xAF5E,
+ 29675 - 11904: 0xCFCF,
+ 29677 - 11904: 0xAF5A,
+ 29678 - 11904: 0xAF5C,
+ 29679 - 11904: 0xFA46,
+ 29683 - 11904: 0x9764,
+ 29684 - 11904: 0xD678,
+ 29685 - 11904: 0xD66D,
+ 29686 - 11904: 0xD66B,
+ 29687 - 11904: 0xFE68,
+ 29688 - 11904: 0xD66C,
+ 29689 - 11904: 0x964E,
+ 29690 - 11904: 0xD673,
+ 29691 - 11904: 0x9765,
+ 29692 - 11904: 0xD674,
+ 29693 - 11904: 0xD670,
+ 29694 - 11904: 0xB27B,
+ 29695 - 11904: 0xD675,
+ 29696 - 11904: 0xD672,
+ 29697 - 11904: 0xD66F,
+ 29698 - 11904: 0x8C5A,
+ 29699 - 11904: 0xB279,
+ 29700 - 11904: 0xD66E,
+ 29701 - 11904: 0xB277,
+ 29702 - 11904: 0xB27A,
+ 29703 - 11904: 0xD671,
+ 29704 - 11904: 0xD679,
+ 29705 - 11904: 0xAF5B,
+ 29706 - 11904: 0xB278,
+ 29707 - 11904: 0xD677,
+ 29708 - 11904: 0xD676,
+ 29709 - 11904: 0xB27C,
+ 29713 - 11904: 0x89A1,
+ 29714 - 11904: 0x95FA,
+ 29716 - 11904: 0x92D4,
+ 29717 - 11904: 0xFE69,
+ 29718 - 11904: 0xDA7E,
+ 29719 - 11904: 0xFB45,
+ 29721 - 11904: 0x98C8,
+ 29722 - 11904: 0xDAA1,
+ 29723 - 11904: 0xB560,
+ 29724 - 11904: 0x90EF,
+ 29725 - 11904: 0xDAA7,
+ 29726 - 11904: 0x98C9,
+ 29727 - 11904: 0x98CA,
+ 29728 - 11904: 0xDAA9,
+ 29729 - 11904: 0xDAA2,
+ 29730 - 11904: 0xB55A,
+ 29731 - 11904: 0xDAA6,
+ 29732 - 11904: 0xDAA5,
+ 29733 - 11904: 0xB55B,
+ 29734 - 11904: 0xB561,
+ 29736 - 11904: 0xB562,
+ 29737 - 11904: 0xDAA8,
+ 29738 - 11904: 0xB558,
+ 29739 - 11904: 0xDA7D,
+ 29740 - 11904: 0xDA7B,
+ 29741 - 11904: 0xDAA3,
+ 29742 - 11904: 0xDA7A,
+ 29743 - 11904: 0xB55F,
+ 29744 - 11904: 0xDA7C,
+ 29745 - 11904: 0xDAA4,
+ 29746 - 11904: 0xDAAA,
+ 29747 - 11904: 0xB559,
+ 29748 - 11904: 0xB55E,
+ 29749 - 11904: 0xB55C,
+ 29750 - 11904: 0xB55D,
+ 29751 - 11904: 0x946D,
+ 29752 - 11904: 0x94B7,
+ 29753 - 11904: 0xFE6C,
+ 29754 - 11904: 0xB557,
+ 29756 - 11904: 0x946B,
+ 29759 - 11904: 0xB7E9,
+ 29760 - 11904: 0xDEB7,
+ 29761 - 11904: 0xB7E8,
+ 29762 - 11904: 0xDEBB,
+ 29763 - 11904: 0x92FC,
+ 29764 - 11904: 0xDEB1,
+ 29765 - 11904: 0x95EB,
+ 29766 - 11904: 0xDEBC,
+ 29767 - 11904: 0xFE73,
+ 29768 - 11904: 0x976E,
+ 29769 - 11904: 0xFE5F,
+ 29770 - 11904: 0xDEB2,
+ 29771 - 11904: 0xDEB3,
+ 29772 - 11904: 0x87B8,
+ 29773 - 11904: 0xDEBD,
+ 29774 - 11904: 0xDEBA,
+ 29775 - 11904: 0xDEB8,
+ 29776 - 11904: 0xDEB9,
+ 29777 - 11904: 0xDEB5,
+ 29778 - 11904: 0xDEB4,
+ 29779 - 11904: 0xFDBD,
+ 29780 - 11904: 0xDEBE,
+ 29781 - 11904: 0xB7E5,
+ 29782 - 11904: 0x92D5,
+ 29783 - 11904: 0xDEB6,
+ 29785 - 11904: 0xB7EA,
+ 29786 - 11904: 0xB7E4,
+ 29787 - 11904: 0xB7EB,
+ 29788 - 11904: 0xFE6F,
+ 29789 - 11904: 0xFEB9,
+ 29790 - 11904: 0xB7E7,
+ 29791 - 11904: 0xB7E6,
+ 29792 - 11904: 0xFE71,
+ 29793 - 11904: 0x8778,
+ 29794 - 11904: 0xE2CE,
+ 29795 - 11904: 0xBABE,
+ 29796 - 11904: 0xBABD,
+ 29797 - 11904: 0xFBBB,
+ 29799 - 11904: 0xE2D3,
+ 29800 - 11904: 0xA0D5,
+ 29801 - 11904: 0xBCFC,
+ 29802 - 11904: 0xBABF,
+ 29803 - 11904: 0x95FB,
+ 29804 - 11904: 0xFE77,
+ 29805 - 11904: 0xBAC1,
+ 29806 - 11904: 0xE2D4,
+ 29807 - 11904: 0xB7E3,
+ 29808 - 11904: 0xBAC0,
+ 29809 - 11904: 0xE2D0,
+ 29810 - 11904: 0xE2D2,
+ 29811 - 11904: 0xE2CF,
+ 29812 - 11904: 0xFE79,
+ 29813 - 11904: 0xE2D1,
+ 29814 - 11904: 0xFE75,
+ 29817 - 11904: 0xE6AB,
+ 29818 - 11904: 0x945D,
+ 29820 - 11904: 0xE6AA,
+ 29821 - 11904: 0xE6A7,
+ 29822 - 11904: 0xBD40,
+ 29823 - 11904: 0xEA62,
+ 29824 - 11904: 0xBD41,
+ 29825 - 11904: 0xE6A6,
+ 29826 - 11904: 0xFE7C,
+ 29827 - 11904: 0xBCFE,
+ 29829 - 11904: 0xE6A8,
+ 29830 - 11904: 0xE6A5,
+ 29831 - 11904: 0xE6A2,
+ 29832 - 11904: 0xE6A9,
+ 29833 - 11904: 0xE6A3,
+ 29834 - 11904: 0xE6A4,
+ 29835 - 11904: 0xBCFD,
+ 29836 - 11904: 0x9344,
+ 29837 - 11904: 0x8EA6,
+ 29840 - 11904: 0xED69,
+ 29842 - 11904: 0xEA66,
+ 29844 - 11904: 0xEA65,
+ 29845 - 11904: 0xEA67,
+ 29847 - 11904: 0xED66,
+ 29848 - 11904: 0xBF5A,
+ 29849 - 11904: 0x92D3,
+ 29850 - 11904: 0xEA63,
+ 29851 - 11904: 0x94B8,
+ 29852 - 11904: 0xBF58,
+ 29853 - 11904: 0x8779,
+ 29854 - 11904: 0xBF5C,
+ 29855 - 11904: 0xBF5B,
+ 29856 - 11904: 0xEA64,
+ 29857 - 11904: 0xEA68,
+ 29859 - 11904: 0xBF59,
+ 29860 - 11904: 0xFC71,
+ 29861 - 11904: 0xED6D,
+ 29862 - 11904: 0xC0F5,
+ 29863 - 11904: 0xC27A,
+ 29864 - 11904: 0xC0F6,
+ 29865 - 11904: 0xC0F3,
+ 29866 - 11904: 0xED6A,
+ 29867 - 11904: 0xED68,
+ 29869 - 11904: 0xED6B,
+ 29871 - 11904: 0xED6E,
+ 29872 - 11904: 0xC0F4,
+ 29873 - 11904: 0xED6C,
+ 29874 - 11904: 0xED67,
+ 29876 - 11904: 0x975E,
+ 29877 - 11904: 0xF042,
+ 29878 - 11904: 0xF045,
+ 29879 - 11904: 0xF275,
+ 29880 - 11904: 0xF040,
+ 29881 - 11904: 0x8CAD,
+ 29882 - 11904: 0xF46F,
+ 29883 - 11904: 0xF046,
+ 29885 - 11904: 0xC3A2,
+ 29886 - 11904: 0xF044,
+ 29887 - 11904: 0xC27B,
+ 29888 - 11904: 0xF041,
+ 29889 - 11904: 0xF043,
+ 29890 - 11904: 0xF047,
+ 29891 - 11904: 0xF276,
+ 29893 - 11904: 0xF274,
+ 29894 - 11904: 0x87C1,
+ 29896 - 11904: 0xFEA7,
+ 29898 - 11904: 0xC3A3,
+ 29899 - 11904: 0xF273,
+ 29900 - 11904: 0x946A,
+ 29903 - 11904: 0xC46E,
+ 29904 - 11904: 0x93E3,
+ 29907 - 11904: 0x98CF,
+ 29908 - 11904: 0xC4ED,
+ 29909 - 11904: 0xF6F1,
+ 29910 - 11904: 0xC4EC,
+ 29911 - 11904: 0xF6F3,
+ 29912 - 11904: 0xF6F0,
+ 29913 - 11904: 0xF6F2,
+ 29914 - 11904: 0xC5D0,
+ 29915 - 11904: 0xF8B2,
+ 29916 - 11904: 0xA5CA,
+ 29917 - 11904: 0xCD6E,
+ 29918 - 11904: 0xD2BC,
+ 29919 - 11904: 0xD2BD,
+ 29920 - 11904: 0xB27D,
+ 29921 - 11904: 0xDEBF,
+ 29922 - 11904: 0xBF5D,
+ 29923 - 11904: 0xC3A4,
+ 29924 - 11904: 0xC57B,
+ 29925 - 11904: 0xF8B3,
+ 29926 - 11904: 0xA5CB,
+ 29927 - 11904: 0xA0D9,
+ 29928 - 11904: 0xCD6F,
+ 29929 - 11904: 0xFEAA,
+ 29932 - 11904: 0xCFD7,
+ 29934 - 11904: 0xCFD8,
+ 29936 - 11904: 0xA0BF,
+ 29937 - 11904: 0xA04D,
+ 29938 - 11904: 0xA0B8,
+ 29940 - 11904: 0xD2BE,
+ 29941 - 11904: 0xD2BF,
+ 29942 - 11904: 0xB27E,
+ 29943 - 11904: 0xB2A1,
+ 29944 - 11904: 0xA0CE,
+ 29947 - 11904: 0xDAAB,
+ 29949 - 11904: 0xDEC2,
+ 29950 - 11904: 0xDEC1,
+ 29951 - 11904: 0xDEC0,
+ 29952 - 11904: 0xE2D5,
+ 29954 - 11904: 0xE2D6,
+ 29955 - 11904: 0xE2D7,
+ 29956 - 11904: 0xBAC2,
+ 29957 - 11904: 0xA0B7,
+ 29959 - 11904: 0xE6AD,
+ 29960 - 11904: 0xE6AC,
+ 29963 - 11904: 0xEA69,
+ 29964 - 11904: 0xBF5E,
+ 29965 - 11904: 0xBF5F,
+ 29966 - 11904: 0xFEA9,
+ 29967 - 11904: 0xED72,
+ 29968 - 11904: 0xED6F,
+ 29969 - 11904: 0xED70,
+ 29970 - 11904: 0xED71,
+ 29971 - 11904: 0xF049,
+ 29972 - 11904: 0xF048,
+ 29973 - 11904: 0xC27C,
+ 29974 - 11904: 0xF277,
+ 29975 - 11904: 0xF5DE,
+ 29976 - 11904: 0xA5CC,
+ 29977 - 11904: 0x89C3,
+ 29978 - 11904: 0xACC6,
+ 29980 - 11904: 0xB2A2,
+ 29981 - 11904: 0xDEC3,
+ 29982 - 11904: 0xFEAB,
+ 29983 - 11904: 0xA5CD,
+ 29985 - 11904: 0xD2C0,
+ 29986 - 11904: 0xB2A3,
+ 29989 - 11904: 0xB563,
+ 29990 - 11904: 0xB564,
+ 29992 - 11904: 0xA5CE,
+ 29993 - 11904: 0xA5CF,
+ 29994 - 11904: 0xCA46,
+ 29995 - 11904: 0xA86A,
+ 29996 - 11904: 0xA869,
+ 29997 - 11904: 0xACC7,
+ 29998 - 11904: 0xCFD9,
+ 29999 - 11904: 0xDAAC,
+ 30000 - 11904: 0xA5D0,
+ 30001 - 11904: 0xA5D1,
+ 30002 - 11904: 0xA5D2,
+ 30003 - 11904: 0xA5D3,
+ 30004 - 11904: 0x9DF4,
+ 30005 - 11904: 0x896D,
+ 30007 - 11904: 0xA86B,
+ 30008 - 11904: 0xA86C,
+ 30009 - 11904: 0xCB6E,
+ 30010 - 11904: 0xCB6D,
+ 30011 - 11904: 0x9C7B,
+ 30013 - 11904: 0xAAB6,
+ 30014 - 11904: 0xCD72,
+ 30015 - 11904: 0xCD70,
+ 30016 - 11904: 0xCD71,
+ 30018 - 11904: 0x98D2,
+ 30022 - 11904: 0x9FA9,
+ 30023 - 11904: 0xCFDA,
+ 30024 - 11904: 0xCFDB,
+ 30026 - 11904: 0xFEB2,
+ 30027 - 11904: 0xACCB,
+ 30028 - 11904: 0xACC9,
+ 30029 - 11904: 0xFEB1,
+ 30030 - 11904: 0xACCA,
+ 30031 - 11904: 0xACC8,
+ 30033 - 11904: 0x97D9,
+ 30035 - 11904: 0xA0C4,
+ 30036 - 11904: 0xAF60,
+ 30037 - 11904: 0x9476,
+ 30041 - 11904: 0xAF64,
+ 30042 - 11904: 0xAF63,
+ 30043 - 11904: 0xD2C1,
+ 30044 - 11904: 0xAF62,
+ 30045 - 11904: 0xAF61,
+ 30047 - 11904: 0xD2C2,
+ 30048 - 11904: 0x9978,
+ 30050 - 11904: 0xB2A6,
+ 30051 - 11904: 0xD67B,
+ 30052 - 11904: 0xD67A,
+ 30053 - 11904: 0xB2A4,
+ 30054 - 11904: 0xB2A5,
+ 30055 - 11904: 0xFEB3,
+ 30058 - 11904: 0xB566,
+ 30059 - 11904: 0xB565,
+ 30060 - 11904: 0xDAAE,
+ 30061 - 11904: 0x98D3,
+ 30062 - 11904: 0xFEB4,
+ 30063 - 11904: 0xDAAD,
+ 30064 - 11904: 0xB2A7,
+ 30066 - 11904: 0x98D4,
+ 30070 - 11904: 0xB7ED,
+ 30071 - 11904: 0xDEC5,
+ 30072 - 11904: 0xB7EE,
+ 30073 - 11904: 0xDEC4,
+ 30074 - 11904: 0x9FB9,
+ 30077 - 11904: 0xE2D8,
+ 30078 - 11904: 0xE6AE,
+ 30079 - 11904: 0xBD42,
+ 30080 - 11904: 0xEA6A,
+ 30083 - 11904: 0x9471,
+ 30084 - 11904: 0xED73,
+ 30086 - 11904: 0xC3A6,
+ 30087 - 11904: 0xC3A5,
+ 30090 - 11904: 0xC57C,
+ 30091 - 11904: 0xA5D4,
+ 30092 - 11904: 0xCD73,
+ 30093 - 11904: 0x98D5,
+ 30094 - 11904: 0xFEB8,
+ 30095 - 11904: 0xB2A8,
+ 30096 - 11904: 0xE2D9,
+ 30097 - 11904: 0xBAC3,
+ 30098 - 11904: 0xC6D4,
+ 30100 - 11904: 0xCB6F,
+ 30101 - 11904: 0xCB70,
+ 30104 - 11904: 0xCD74,
+ 30105 - 11904: 0xAAB8,
+ 30106 - 11904: 0xAAB9,
+ 30109 - 11904: 0xAAB7,
+ 30110 - 11904: 0xFEBA,
+ 30114 - 11904: 0xACCF,
+ 30115 - 11904: 0xACD0,
+ 30116 - 11904: 0xACCD,
+ 30117 - 11904: 0xACCE,
+ 30119 - 11904: 0xCFDC,
+ 30122 - 11904: 0xCFDD,
+ 30123 - 11904: 0xACCC,
+ 30128 - 11904: 0xD2C3,
+ 30129 - 11904: 0x9E5C,
+ 30130 - 11904: 0xAF68,
+ 30131 - 11904: 0xAF69,
+ 30132 - 11904: 0xFEBB,
+ 30133 - 11904: 0xB2AB,
+ 30134 - 11904: 0xD2C9,
+ 30136 - 11904: 0xAF6E,
+ 30137 - 11904: 0xAF6C,
+ 30138 - 11904: 0xD2CA,
+ 30139 - 11904: 0xD2C5,
+ 30140 - 11904: 0xAF6B,
+ 30141 - 11904: 0xAF6A,
+ 30142 - 11904: 0xAF65,
+ 30143 - 11904: 0xD2C8,
+ 30144 - 11904: 0xD2C7,
+ 30145 - 11904: 0xD2C4,
+ 30146 - 11904: 0xAF6D,
+ 30147 - 11904: 0xA044,
+ 30148 - 11904: 0xD2C6,
+ 30149 - 11904: 0xAF66,
+ 30151 - 11904: 0xAF67,
+ 30152 - 11904: 0x98D7,
+ 30154 - 11904: 0xB2AC,
+ 30155 - 11904: 0xD6A1,
+ 30156 - 11904: 0xD6A2,
+ 30157 - 11904: 0xB2AD,
+ 30158 - 11904: 0xD67C,
+ 30159 - 11904: 0xD67E,
+ 30160 - 11904: 0xD6A4,
+ 30161 - 11904: 0xD6A3,
+ 30162 - 11904: 0xD67D,
+ 30164 - 11904: 0xB2A9,
+ 30165 - 11904: 0xB2AA,
+ 30167 - 11904: 0xDAB6,
+ 30168 - 11904: 0xB56B,
+ 30169 - 11904: 0xB56A,
+ 30170 - 11904: 0xDAB0,
+ 30171 - 11904: 0xB568,
+ 30172 - 11904: 0x98D8,
+ 30173 - 11904: 0xDAB3,
+ 30174 - 11904: 0xB56C,
+ 30175 - 11904: 0xDAB4,
+ 30176 - 11904: 0xB56D,
+ 30177 - 11904: 0xDAB1,
+ 30178 - 11904: 0xB567,
+ 30179 - 11904: 0xB569,
+ 30180 - 11904: 0xDAB5,
+ 30182 - 11904: 0xDAB2,
+ 30183 - 11904: 0xDAAF,
+ 30189 - 11904: 0xDED2,
+ 30191 - 11904: 0xDEC7,
+ 30192 - 11904: 0xB7F0,
+ 30193 - 11904: 0xB7F3,
+ 30194 - 11904: 0xB7F2,
+ 30195 - 11904: 0xB7F7,
+ 30196 - 11904: 0xB7F6,
+ 30197 - 11904: 0xDED3,
+ 30198 - 11904: 0xDED1,
+ 30199 - 11904: 0xDECA,
+ 30200 - 11904: 0xDECE,
+ 30201 - 11904: 0xDECD,
+ 30202 - 11904: 0xB7F4,
+ 30203 - 11904: 0xDED0,
+ 30204 - 11904: 0xDECC,
+ 30205 - 11904: 0xDED4,
+ 30206 - 11904: 0xDECB,
+ 30207 - 11904: 0xB7F5,
+ 30208 - 11904: 0xB7EF,
+ 30209 - 11904: 0xB7F1,
+ 30210 - 11904: 0xFEBC,
+ 30211 - 11904: 0xDEC9,
+ 30215 - 11904: 0x9FFE,
+ 30216 - 11904: 0xE2DB,
+ 30217 - 11904: 0xBAC7,
+ 30218 - 11904: 0xE2DF,
+ 30219 - 11904: 0xBAC6,
+ 30220 - 11904: 0xE2DC,
+ 30221 - 11904: 0xBAC5,
+ 30223 - 11904: 0xDEC8,
+ 30224 - 11904: 0xDECF,
+ 30225 - 11904: 0xE2DE,
+ 30227 - 11904: 0xBAC8,
+ 30228 - 11904: 0xE2E0,
+ 30229 - 11904: 0xE2DD,
+ 30230 - 11904: 0xE2DA,
+ 30233 - 11904: 0xE6B1,
+ 30234 - 11904: 0xE6B5,
+ 30235 - 11904: 0xE6B7,
+ 30236 - 11904: 0xE6B3,
+ 30237 - 11904: 0xE6B2,
+ 30238 - 11904: 0xE6B0,
+ 30239 - 11904: 0xBD45,
+ 30240 - 11904: 0xBD43,
+ 30241 - 11904: 0xBD48,
+ 30242 - 11904: 0xBD49,
+ 30243 - 11904: 0xE6B4,
+ 30244 - 11904: 0xBD46,
+ 30245 - 11904: 0xE6AF,
+ 30246 - 11904: 0xBD47,
+ 30247 - 11904: 0xBAC4,
+ 30248 - 11904: 0xE6B6,
+ 30249 - 11904: 0xBD44,
+ 30252 - 11904: 0xFEBD,
+ 30253 - 11904: 0xEA6C,
+ 30255 - 11904: 0xEA6B,
+ 30256 - 11904: 0xEA73,
+ 30257 - 11904: 0xEA6D,
+ 30258 - 11904: 0xEA72,
+ 30259 - 11904: 0xEA6F,
+ 30260 - 11904: 0xBF60,
+ 30261 - 11904: 0xEA71,
+ 30264 - 11904: 0xBF61,
+ 30266 - 11904: 0xBF62,
+ 30267 - 11904: 0x9DDD,
+ 30268 - 11904: 0xEA70,
+ 30269 - 11904: 0xEA6E,
+ 30272 - 11904: 0x9EE1,
+ 30274 - 11904: 0xC0F8,
+ 30275 - 11904: 0xED74,
+ 30278 - 11904: 0xC0F7,
+ 30279 - 11904: 0xED77,
+ 30280 - 11904: 0xED75,
+ 30281 - 11904: 0xED76,
+ 30284 - 11904: 0xC0F9,
+ 30285 - 11904: 0x98DA,
+ 30286 - 11904: 0x9DDF,
+ 30287 - 11904: 0xFEBF,
+ 30288 - 11904: 0xF04D,
+ 30289 - 11904: 0xFEBE,
+ 30290 - 11904: 0xC2A1,
+ 30291 - 11904: 0xF04E,
+ 30292 - 11904: 0x9EEB,
+ 30294 - 11904: 0xC27D,
+ 30295 - 11904: 0xF04F,
+ 30296 - 11904: 0xC27E,
+ 30297 - 11904: 0xF04C,
+ 30298 - 11904: 0xF050,
+ 30300 - 11904: 0xF04A,
+ 30303 - 11904: 0xC3A7,
+ 30304 - 11904: 0xF278,
+ 30305 - 11904: 0xC3A8,
+ 30306 - 11904: 0xC46F,
+ 30308 - 11904: 0xF04B,
+ 30309 - 11904: 0xC470,
+ 30310 - 11904: 0x9E59,
+ 30311 - 11904: 0xA05C,
+ 30313 - 11904: 0xC4EE,
+ 30314 - 11904: 0xF5DF,
+ 30316 - 11904: 0xC57E,
+ 30317 - 11904: 0xF6F4,
+ 30318 - 11904: 0xC57D,
+ 30319 - 11904: 0xFEC0,
+ 30320 - 11904: 0xF7EA,
+ 30321 - 11904: 0xC5F5,
+ 30322 - 11904: 0xC5F6,
+ 30323 - 11904: 0x9477,
+ 30324 - 11904: 0x98DC,
+ 30325 - 11904: 0xF9CC,
+ 30326 - 11904: 0xFEC1,
+ 30328 - 11904: 0xACD1,
+ 30329 - 11904: 0xCFDE,
+ 30330 - 11904: 0x98DE,
+ 30331 - 11904: 0xB56E,
+ 30332 - 11904: 0xB56F,
+ 30333 - 11904: 0xA5D5,
+ 30334 - 11904: 0xA6CA,
+ 30335 - 11904: 0xCA47,
+ 30337 - 11904: 0xCB71,
+ 30338 - 11904: 0xA86D,
+ 30340 - 11904: 0xAABA,
+ 30342 - 11904: 0xACD2,
+ 30343 - 11904: 0xACD3,
+ 30344 - 11904: 0xACD4,
+ 30345 - 11904: 0xD6A6,
+ 30346 - 11904: 0xD2CB,
+ 30347 - 11904: 0xAF6F,
+ 30350 - 11904: 0xB2AE,
+ 30351 - 11904: 0xD6A5,
+ 30352 - 11904: 0xFEC3,
+ 30354 - 11904: 0xDAB8,
+ 30355 - 11904: 0xB571,
+ 30357 - 11904: 0xDAB7,
+ 30358 - 11904: 0xB570,
+ 30361 - 11904: 0xDED5,
+ 30362 - 11904: 0xBD4A,
+ 30363 - 11904: 0xE6BB,
+ 30364 - 11904: 0xE6B8,
+ 30365 - 11904: 0xE6B9,
+ 30366 - 11904: 0xE6BA,
+ 30369 - 11904: 0xFEC8,
+ 30372 - 11904: 0xED78,
+ 30373 - 11904: 0xFEC9,
+ 30374 - 11904: 0xF051,
+ 30378 - 11904: 0xF471,
+ 30379 - 11904: 0xF470,
+ 30381 - 11904: 0xF6F5,
+ 30382 - 11904: 0xA5D6,
+ 30383 - 11904: 0xCD75,
+ 30384 - 11904: 0xAF70,
+ 30388 - 11904: 0xB572,
+ 30389 - 11904: 0xDED6,
+ 30391 - 11904: 0xFECA,
+ 30392 - 11904: 0xE2E1,
+ 30394 - 11904: 0xBD4B,
+ 30395 - 11904: 0xEA74,
+ 30397 - 11904: 0xF052,
+ 30398 - 11904: 0xF472,
+ 30399 - 11904: 0xA5D7,
+ 30402 - 11904: 0xAABB,
+ 30403 - 11904: 0xACD7,
+ 30404 - 11904: 0xCFDF,
+ 30405 - 11904: 0xACD8,
+ 30406 - 11904: 0xACD6,
+ 30408 - 11904: 0xACD5,
+ 30409 - 11904: 0xD2CC,
+ 30410 - 11904: 0xAF71,
+ 30412 - 11904: 0xFECB,
+ 30413 - 11904: 0xAF72,
+ 30414 - 11904: 0xAF73,
+ 30418 - 11904: 0xB2B0,
+ 30419 - 11904: 0xD6A7,
+ 30420 - 11904: 0xB2AF,
+ 30422 - 11904: 0x9FC2,
+ 30425 - 11904: 0x8C6B,
+ 30426 - 11904: 0xDAB9,
+ 30427 - 11904: 0xB2B1,
+ 30428 - 11904: 0xB573,
+ 30429 - 11904: 0xDED7,
+ 30430 - 11904: 0xB7F8,
+ 30431 - 11904: 0xB7F9,
+ 30433 - 11904: 0xBAC9,
+ 30435 - 11904: 0xBACA,
+ 30436 - 11904: 0xBD4C,
+ 30437 - 11904: 0xBF64,
+ 30438 - 11904: 0xEA75,
+ 30439 - 11904: 0xBF63,
+ 30441 - 11904: 0xED79,
+ 30442 - 11904: 0xC0FA,
+ 30444 - 11904: 0xF053,
+ 30445 - 11904: 0xF473,
+ 30446 - 11904: 0xA5D8,
+ 30447 - 11904: 0xA86E,
+ 30448 - 11904: 0xCD78,
+ 30449 - 11904: 0xCD77,
+ 30450 - 11904: 0xAABC,
+ 30451 - 11904: 0xCD76,
+ 30452 - 11904: 0xAABD,
+ 30453 - 11904: 0xCD79,
+ 30455 - 11904: 0xCFE5,
+ 30456 - 11904: 0xACDB,
+ 30457 - 11904: 0xACDA,
+ 30458 - 11904: 0xCFE7,
+ 30459 - 11904: 0xCFE6,
+ 30460 - 11904: 0xACDF,
+ 30462 - 11904: 0xACDE,
+ 30465 - 11904: 0xACD9,
+ 30467 - 11904: 0xCFE1,
+ 30468 - 11904: 0xCFE2,
+ 30469 - 11904: 0xCFE3,
+ 30471 - 11904: 0xACE0,
+ 30472 - 11904: 0xCFE0,
+ 30473 - 11904: 0xACDC,
+ 30474 - 11904: 0xCFE4,
+ 30475 - 11904: 0xACDD,
+ 30476 - 11904: 0x98C4,
+ 30478 - 11904: 0x94B0,
+ 30479 - 11904: 0x94B1,
+ 30480 - 11904: 0xD2CF,
+ 30481 - 11904: 0xD2D3,
+ 30482 - 11904: 0xD2D1,
+ 30483 - 11904: 0xD2D0,
+ 30485 - 11904: 0xD2D4,
+ 30489 - 11904: 0xD2D5,
+ 30490 - 11904: 0xD2D6,
+ 30491 - 11904: 0xD2CE,
+ 30493 - 11904: 0xD2CD,
+ 30494 - 11904: 0xFED1,
+ 30495 - 11904: 0xAF75,
+ 30496 - 11904: 0xAF76,
+ 30498 - 11904: 0xD2D7,
+ 30499 - 11904: 0xD2D2,
+ 30500 - 11904: 0xA0C1,
+ 30501 - 11904: 0xD6B0,
+ 30502 - 11904: 0xFED2,
+ 30503 - 11904: 0xD2D8,
+ 30504 - 11904: 0xAF77,
+ 30505 - 11904: 0xAF74,
+ 30507 - 11904: 0xA0CD,
+ 30509 - 11904: 0xD6AA,
+ 30511 - 11904: 0xD6A9,
+ 30513 - 11904: 0xD6AB,
+ 30514 - 11904: 0xD6AC,
+ 30515 - 11904: 0xD6AE,
+ 30516 - 11904: 0xD6AD,
+ 30517 - 11904: 0xD6B2,
+ 30518 - 11904: 0xB2B5,
+ 30519 - 11904: 0xB2B2,
+ 30520 - 11904: 0xB2B6,
+ 30521 - 11904: 0xD6A8,
+ 30522 - 11904: 0xB2B7,
+ 30523 - 11904: 0xD6B1,
+ 30524 - 11904: 0xB2B4,
+ 30525 - 11904: 0xD6AF,
+ 30526 - 11904: 0xB2B3,
+ 30528 - 11904: 0xFED3,
+ 30531 - 11904: 0x98E5,
+ 30532 - 11904: 0xDABC,
+ 30533 - 11904: 0xDABE,
+ 30534 - 11904: 0xDABA,
+ 30535 - 11904: 0xDABB,
+ 30538 - 11904: 0xDABF,
+ 30539 - 11904: 0xDAC1,
+ 30540 - 11904: 0xDAC2,
+ 30541 - 11904: 0xDABD,
+ 30542 - 11904: 0xDAC0,
+ 30543 - 11904: 0xB574,
+ 30546 - 11904: 0xDEDB,
+ 30548 - 11904: 0xDEE0,
+ 30549 - 11904: 0xDED8,
+ 30550 - 11904: 0xDEDC,
+ 30552 - 11904: 0xFED6,
+ 30553 - 11904: 0xDEE1,
+ 30554 - 11904: 0xDEDD,
+ 30555 - 11904: 0xB7FA,
+ 30556 - 11904: 0xB843,
+ 30558 - 11904: 0xB7FD,
+ 30559 - 11904: 0xDED9,
+ 30560 - 11904: 0xDEDA,
+ 30561 - 11904: 0xBACE,
+ 30562 - 11904: 0xB846,
+ 30563 - 11904: 0xB7FE,
+ 30565 - 11904: 0xB844,
+ 30566 - 11904: 0xB7FC,
+ 30567 - 11904: 0xDEDF,
+ 30568 - 11904: 0xB845,
+ 30569 - 11904: 0xDEDE,
+ 30570 - 11904: 0xB841,
+ 30571 - 11904: 0xB7FB,
+ 30572 - 11904: 0xB842,
+ 30573 - 11904: 0xDEE2,
+ 30574 - 11904: 0xE2E6,
+ 30575 - 11904: 0xE2E8,
+ 30578 - 11904: 0x91E4,
+ 30583 - 11904: 0x8FC7,
+ 30584 - 11904: 0x94AE,
+ 30585 - 11904: 0xB840,
+ 30586 - 11904: 0x8A4F,
+ 30587 - 11904: 0x94B2,
+ 30588 - 11904: 0xE2E3,
+ 30589 - 11904: 0xBACC,
+ 30590 - 11904: 0xE2E9,
+ 30591 - 11904: 0xBACD,
+ 30592 - 11904: 0xE2E7,
+ 30593 - 11904: 0xE2E2,
+ 30594 - 11904: 0xE2E5,
+ 30595 - 11904: 0xE2EA,
+ 30596 - 11904: 0xBACB,
+ 30597 - 11904: 0xE2E4,
+ 30599 - 11904: 0xBD4E,
+ 30600 - 11904: 0xE6BF,
+ 30601 - 11904: 0xE6BE,
+ 30603 - 11904: 0xBD51,
+ 30604 - 11904: 0xBD4F,
+ 30605 - 11904: 0xE6BC,
+ 30606 - 11904: 0xBD4D,
+ 30607 - 11904: 0xE6BD,
+ 30609 - 11904: 0xBD50,
+ 30611 - 11904: 0x8FD4,
+ 30613 - 11904: 0xEA7D,
+ 30615 - 11904: 0xEAA1,
+ 30616 - 11904: 0x98EA,
+ 30617 - 11904: 0xEA7E,
+ 30618 - 11904: 0xEA76,
+ 30619 - 11904: 0xEA7A,
+ 30620 - 11904: 0xEA79,
+ 30621 - 11904: 0xEA77,
+ 30622 - 11904: 0xBF66,
+ 30623 - 11904: 0xBF67,
+ 30624 - 11904: 0xBF65,
+ 30625 - 11904: 0xEA78,
+ 30626 - 11904: 0xEA7B,
+ 30627 - 11904: 0xEA7C,
+ 30629 - 11904: 0xBF68,
+ 30631 - 11904: 0xC140,
+ 30632 - 11904: 0xEDA3,
+ 30634 - 11904: 0xC0FC,
+ 30635 - 11904: 0xED7B,
+ 30636 - 11904: 0xC0FE,
+ 30637 - 11904: 0xC141,
+ 30639 - 11904: 0xFED8,
+ 30640 - 11904: 0xC0FD,
+ 30641 - 11904: 0xEDA2,
+ 30642 - 11904: 0xED7C,
+ 30643 - 11904: 0xC0FB,
+ 30644 - 11904: 0xEDA1,
+ 30645 - 11904: 0xED7A,
+ 30646 - 11904: 0xED7E,
+ 30647 - 11904: 0xED7D,
+ 30649 - 11904: 0x9DE0,
+ 30650 - 11904: 0xF055,
+ 30651 - 11904: 0xC2A4,
+ 30652 - 11904: 0xC2A5,
+ 30653 - 11904: 0xC2A2,
+ 30654 - 11904: 0x98EE,
+ 30655 - 11904: 0xC2A3,
+ 30658 - 11904: 0xF054,
+ 30659 - 11904: 0x95C4,
+ 30660 - 11904: 0xF27B,
+ 30661 - 11904: 0xFCE8,
+ 30663 - 11904: 0xC3A9,
+ 30665 - 11904: 0xF279,
+ 30666 - 11904: 0xF27A,
+ 30667 - 11904: 0x98EF,
+ 30668 - 11904: 0xF474,
+ 30669 - 11904: 0xF477,
+ 30670 - 11904: 0xF475,
+ 30671 - 11904: 0xF476,
+ 30672 - 11904: 0xF5E0,
+ 30675 - 11904: 0xC4EF,
+ 30676 - 11904: 0xF7EB,
+ 30677 - 11904: 0xF8B4,
+ 30679 - 11904: 0xC5F7,
+ 30680 - 11904: 0xF8F8,
+ 30681 - 11904: 0xF8F9,
+ 30682 - 11904: 0xC666,
+ 30683 - 11904: 0xA5D9,
+ 30684 - 11904: 0xACE1,
+ 30685 - 11904: 0x8C6E,
+ 30686 - 11904: 0xDAC3,
+ 30688 - 11904: 0xDEE3,
+ 30690 - 11904: 0xA5DA,
+ 30691 - 11904: 0xA86F,
+ 30693 - 11904: 0xAABE,
+ 30694 - 11904: 0xFAD8,
+ 30695 - 11904: 0xCFE8,
+ 30696 - 11904: 0xCFE9,
+ 30697 - 11904: 0xAF78,
+ 30700 - 11904: 0xDAC4,
+ 30701 - 11904: 0xB575,
+ 30702 - 11904: 0xB847,
+ 30703 - 11904: 0xC142,
+ 30704 - 11904: 0xEDA4,
+ 30705 - 11904: 0xF27C,
+ 30706 - 11904: 0xF478,
+ 30707 - 11904: 0xA5DB,
+ 30708 - 11904: 0xFEDC,
+ 30711 - 11904: 0xCDA1,
+ 30712 - 11904: 0xCD7A,
+ 30713 - 11904: 0xCD7C,
+ 30714 - 11904: 0xCD7E,
+ 30715 - 11904: 0xCD7D,
+ 30716 - 11904: 0xCD7B,
+ 30717 - 11904: 0xAABF,
+ 30718 - 11904: 0xA0AE,
+ 30722 - 11904: 0xACE2,
+ 30723 - 11904: 0xCFF2,
+ 30725 - 11904: 0xCFED,
+ 30726 - 11904: 0xCFEA,
+ 30728 - 11904: 0x9D4C,
+ 30729 - 11904: 0xFEDD,
+ 30732 - 11904: 0xACE4,
+ 30733 - 11904: 0xACE5,
+ 30734 - 11904: 0xCFF0,
+ 30735 - 11904: 0xCFEF,
+ 30736 - 11904: 0xCFEE,
+ 30737 - 11904: 0xCFEB,
+ 30738 - 11904: 0xCFEC,
+ 30739 - 11904: 0xCFF3,
+ 30740 - 11904: 0xACE3,
+ 30744 - 11904: 0x98F1,
+ 30748 - 11904: 0x98F3,
+ 30749 - 11904: 0xAF7C,
+ 30750 - 11904: 0x94C1,
+ 30751 - 11904: 0xAFA4,
+ 30752 - 11904: 0xAFA3,
+ 30753 - 11904: 0xD2E1,
+ 30754 - 11904: 0xD2DB,
+ 30755 - 11904: 0xD2D9,
+ 30757 - 11904: 0xAFA1,
+ 30758 - 11904: 0xD6B9,
+ 30759 - 11904: 0xAF7A,
+ 30760 - 11904: 0xD2DE,
+ 30761 - 11904: 0xD2E2,
+ 30762 - 11904: 0xD2E4,
+ 30763 - 11904: 0xD2E0,
+ 30764 - 11904: 0xD2DA,
+ 30765 - 11904: 0xAFA2,
+ 30766 - 11904: 0xD2DF,
+ 30767 - 11904: 0xD2DD,
+ 30768 - 11904: 0xAF79,
+ 30769 - 11904: 0xD2E5,
+ 30770 - 11904: 0xAFA5,
+ 30771 - 11904: 0xD2E3,
+ 30772 - 11904: 0xAF7D,
+ 30773 - 11904: 0xD2DC,
+ 30775 - 11904: 0xAF7E,
+ 30776 - 11904: 0xAF7B,
+ 30777 - 11904: 0x98F5,
+ 30780 - 11904: 0xFA4F,
+ 30781 - 11904: 0x96E2,
+ 30786 - 11904: 0x9450,
+ 30787 - 11904: 0xB2B9,
+ 30788 - 11904: 0x96A2,
+ 30789 - 11904: 0xD6BA,
+ 30791 - 11904: 0x98F6,
+ 30792 - 11904: 0xD6B3,
+ 30793 - 11904: 0xD6B5,
+ 30794 - 11904: 0xD6B7,
+ 30795 - 11904: 0x96E5,
+ 30796 - 11904: 0xD6B8,
+ 30797 - 11904: 0xD6B6,
+ 30798 - 11904: 0xB2BA,
+ 30800 - 11904: 0xD6BB,
+ 30801 - 11904: 0x98F7,
+ 30802 - 11904: 0xD6B4,
+ 30803 - 11904: 0xA046,
+ 30804 - 11904: 0x96E3,
+ 30812 - 11904: 0xDAC8,
+ 30813 - 11904: 0xB576,
+ 30814 - 11904: 0xDAD0,
+ 30816 - 11904: 0xDAC5,
+ 30818 - 11904: 0xDAD1,
+ 30820 - 11904: 0xDAC6,
+ 30821 - 11904: 0xDAC7,
+ 30822 - 11904: 0x98F8,
+ 30824 - 11904: 0xDACF,
+ 30825 - 11904: 0xDACE,
+ 30826 - 11904: 0xDACB,
+ 30827 - 11904: 0xB2B8,
+ 30828 - 11904: 0xB577,
+ 30829 - 11904: 0xDAC9,
+ 30830 - 11904: 0xDACC,
+ 30831 - 11904: 0xB578,
+ 30832 - 11904: 0xDACD,
+ 30833 - 11904: 0xDACA,
+ 30841 - 11904: 0xDEEE,
+ 30842 - 11904: 0x9EE4,
+ 30843 - 11904: 0xDEF2,
+ 30844 - 11904: 0xB84E,
+ 30846 - 11904: 0xE2F0,
+ 30847 - 11904: 0xB851,
+ 30848 - 11904: 0xDEF0,
+ 30849 - 11904: 0xF9D6,
+ 30851 - 11904: 0xDEED,
+ 30852 - 11904: 0xDEE8,
+ 30853 - 11904: 0xDEEA,
+ 30854 - 11904: 0xDEEB,
+ 30855 - 11904: 0xDEE4,
+ 30856 - 11904: 0x94C3,
+ 30857 - 11904: 0xB84D,
+ 30860 - 11904: 0xB84C,
+ 30861 - 11904: 0x94C2,
+ 30862 - 11904: 0xB848,
+ 30863 - 11904: 0xDEE7,
+ 30865 - 11904: 0xB84F,
+ 30867 - 11904: 0xB850,
+ 30868 - 11904: 0xDEE6,
+ 30869 - 11904: 0xDEE9,
+ 30870 - 11904: 0xDEF1,
+ 30871 - 11904: 0xB84A,
+ 30872 - 11904: 0xB84B,
+ 30873 - 11904: 0xDEEF,
+ 30874 - 11904: 0xDEE5,
+ 30878 - 11904: 0xE2F2,
+ 30879 - 11904: 0xBAD0,
+ 30880 - 11904: 0xE2F4,
+ 30881 - 11904: 0xDEEC,
+ 30882 - 11904: 0xE2F6,
+ 30883 - 11904: 0xBAD4,
+ 30884 - 11904: 0xE2F7,
+ 30885 - 11904: 0xE2F3,
+ 30887 - 11904: 0xBAD1,
+ 30888 - 11904: 0xE2EF,
+ 30889 - 11904: 0xBAD3,
+ 30890 - 11904: 0xE2EC,
+ 30891 - 11904: 0xE2F1,
+ 30892 - 11904: 0xE2F5,
+ 30893 - 11904: 0xE2EE,
+ 30895 - 11904: 0xFEE1,
+ 30896 - 11904: 0xB849,
+ 30897 - 11904: 0xFEE9,
+ 30898 - 11904: 0xE2EB,
+ 30899 - 11904: 0xBAD2,
+ 30900 - 11904: 0xE2ED,
+ 30902 - 11904: 0x96E4,
+ 30904 - 11904: 0x89AC,
+ 30905 - 11904: 0x96DB,
+ 30906 - 11904: 0xBD54,
+ 30907 - 11904: 0xE6C1,
+ 30908 - 11904: 0xBD58,
+ 30910 - 11904: 0xBD56,
+ 30913 - 11904: 0xBACF,
+ 30915 - 11904: 0xE6C8,
+ 30916 - 11904: 0xE6C9,
+ 30917 - 11904: 0xBD53,
+ 30919 - 11904: 0xFEE2,
+ 30920 - 11904: 0xE6C7,
+ 30921 - 11904: 0xE6CA,
+ 30922 - 11904: 0xBD55,
+ 30923 - 11904: 0xBD52,
+ 30924 - 11904: 0xE6C3,
+ 30925 - 11904: 0xE6C0,
+ 30926 - 11904: 0xE6C5,
+ 30927 - 11904: 0xE6C2,
+ 30928 - 11904: 0xBD59,
+ 30929 - 11904: 0xE6C4,
+ 30930 - 11904: 0x94C4,
+ 30931 - 11904: 0xFEE3,
+ 30932 - 11904: 0xE6C6,
+ 30933 - 11904: 0xBD57,
+ 30935 - 11904: 0xFEE7,
+ 30936 - 11904: 0x9FFB,
+ 30938 - 11904: 0xBF6A,
+ 30939 - 11904: 0xEAA8,
+ 30941 - 11904: 0xEAA2,
+ 30942 - 11904: 0xEAA6,
+ 30943 - 11904: 0xEAAC,
+ 30944 - 11904: 0xEAAD,
+ 30945 - 11904: 0xEAA9,
+ 30946 - 11904: 0xEAAA,
+ 30947 - 11904: 0xEAA7,
+ 30948 - 11904: 0x8C59,
+ 30949 - 11904: 0xEAA4,
+ 30951 - 11904: 0xBF6C,
+ 30952 - 11904: 0xBF69,
+ 30953 - 11904: 0xEAA3,
+ 30954 - 11904: 0xEAA5,
+ 30956 - 11904: 0xBF6B,
+ 30957 - 11904: 0xEAAB,
+ 30958 - 11904: 0x93C9,
+ 30959 - 11904: 0xC146,
+ 30960 - 11904: 0x94E8,
+ 30961 - 11904: 0xFB56,
+ 30962 - 11904: 0xEDAA,
+ 30963 - 11904: 0xEDA5,
+ 30964 - 11904: 0xC145,
+ 30965 - 11904: 0x90C5,
+ 30967 - 11904: 0xC143,
+ 30969 - 11904: 0xEDAC,
+ 30970 - 11904: 0xC144,
+ 30971 - 11904: 0xEDA8,
+ 30972 - 11904: 0xEDA9,
+ 30973 - 11904: 0xEDA6,
+ 30974 - 11904: 0xEDAD,
+ 30975 - 11904: 0xF056,
+ 30977 - 11904: 0xC147,
+ 30978 - 11904: 0xEDA7,
+ 30980 - 11904: 0xEDAE,
+ 30981 - 11904: 0xEDAB,
+ 30982 - 11904: 0xA0A8,
+ 30985 - 11904: 0xF05A,
+ 30988 - 11904: 0xF057,
+ 30990 - 11904: 0xC2A6,
+ 30992 - 11904: 0xF05B,
+ 30993 - 11904: 0xF05D,
+ 30994 - 11904: 0xF05C,
+ 30995 - 11904: 0xF058,
+ 30996 - 11904: 0xF059,
+ 30999 - 11904: 0xF2A3,
+ 31001 - 11904: 0xC3AA,
+ 31003 - 11904: 0xF27E,
+ 31004 - 11904: 0xF2A2,
+ 31005 - 11904: 0xF27D,
+ 31006 - 11904: 0xF2A4,
+ 31009 - 11904: 0xF2A1,
+ 31011 - 11904: 0xF47A,
+ 31012 - 11904: 0xF47D,
+ 31013 - 11904: 0xF479,
+ 31014 - 11904: 0xC471,
+ 31015 - 11904: 0xF47B,
+ 31016 - 11904: 0xF47C,
+ 31017 - 11904: 0xF47E,
+ 31018 - 11904: 0xC472,
+ 31019 - 11904: 0xC474,
+ 31020 - 11904: 0xC473,
+ 31021 - 11904: 0xF5E1,
+ 31022 - 11904: 0xFEE5,
+ 31023 - 11904: 0xF5E3,
+ 31025 - 11904: 0xF5E2,
+ 31026 - 11904: 0x98FD,
+ 31027 - 11904: 0x98FB,
+ 31028 - 11904: 0xFEE8,
+ 31029 - 11904: 0xF6F6,
+ 31030 - 11904: 0x8EBF,
+ 31032 - 11904: 0xF8B5,
+ 31033 - 11904: 0xF8FA,
+ 31034 - 11904: 0xA5DC,
+ 31035 - 11904: 0x8BD8,
+ 31036 - 11904: 0xFEF7,
+ 31037 - 11904: 0xCB72,
+ 31038 - 11904: 0xAAC0,
+ 31039 - 11904: 0xCDA3,
+ 31040 - 11904: 0xAAC1,
+ 31041 - 11904: 0xAAC2,
+ 31042 - 11904: 0xCDA2,
+ 31044 - 11904: 0xCFF8,
+ 31045 - 11904: 0xCFF7,
+ 31046 - 11904: 0xACE6,
+ 31047 - 11904: 0xACE9,
+ 31048 - 11904: 0xACE8,
+ 31049 - 11904: 0xACE7,
+ 31050 - 11904: 0xCFF4,
+ 31051 - 11904: 0xCFF6,
+ 31052 - 11904: 0xCFF5,
+ 31055 - 11904: 0xD2E8,
+ 31056 - 11904: 0xAFA7,
+ 31057 - 11904: 0xD2EC,
+ 31058 - 11904: 0xD2EB,
+ 31059 - 11904: 0xD2EA,
+ 31060 - 11904: 0xD2E6,
+ 31061 - 11904: 0xAFA6,
+ 31062 - 11904: 0xAFAA,
+ 31063 - 11904: 0xAFAD,
+ 31064 - 11904: 0x8F68,
+ 31065 - 11904: 0x94C6,
+ 31066 - 11904: 0xAFAE,
+ 31067 - 11904: 0xD2E7,
+ 31068 - 11904: 0xD2E9,
+ 31069 - 11904: 0xAFAC,
+ 31070 - 11904: 0xAFAB,
+ 31071 - 11904: 0xAFA9,
+ 31072 - 11904: 0xAFA8,
+ 31073 - 11904: 0xD6C2,
+ 31074 - 11904: 0x9DEA,
+ 31075 - 11904: 0xD6C0,
+ 31076 - 11904: 0xD6BC,
+ 31077 - 11904: 0xB2BB,
+ 31079 - 11904: 0xD6BD,
+ 31080 - 11904: 0xB2BC,
+ 31081 - 11904: 0xD6BE,
+ 31082 - 11904: 0xD6BF,
+ 31083 - 11904: 0xD6C1,
+ 31085 - 11904: 0xB2BD,
+ 31088 - 11904: 0xDAD5,
+ 31089 - 11904: 0xFC69,
+ 31090 - 11904: 0xDAD4,
+ 31091 - 11904: 0xDAD3,
+ 31092 - 11904: 0xDAD2,
+ 31097 - 11904: 0xDEF6,
+ 31098 - 11904: 0xB852,
+ 31100 - 11904: 0xDEF3,
+ 31101 - 11904: 0xDEF5,
+ 31102 - 11904: 0x9CDA,
+ 31103 - 11904: 0xB853,
+ 31104 - 11904: 0xFEF3,
+ 31105 - 11904: 0xB854,
+ 31106 - 11904: 0xDEF4,
+ 31107 - 11904: 0x9C72,
+ 31110 - 11904: 0xFEF0,
+ 31111 - 11904: 0x89C9,
+ 31112 - 11904: 0xE341,
+ 31114 - 11904: 0xE2F9,
+ 31115 - 11904: 0xE2FA,
+ 31117 - 11904: 0xBAD7,
+ 31118 - 11904: 0xBAD5,
+ 31119 - 11904: 0xBAD6,
+ 31120 - 11904: 0xE343,
+ 31121 - 11904: 0x9941,
+ 31122 - 11904: 0xE342,
+ 31123 - 11904: 0xE2FE,
+ 31124 - 11904: 0xE2FD,
+ 31125 - 11904: 0xE2FC,
+ 31126 - 11904: 0xE2FB,
+ 31127 - 11904: 0xE340,
+ 31128 - 11904: 0xE2F8,
+ 31129 - 11904: 0x9942,
+ 31130 - 11904: 0xE6CB,
+ 31131 - 11904: 0xE6D0,
+ 31132 - 11904: 0xE6CE,
+ 31133 - 11904: 0xFEF5,
+ 31135 - 11904: 0x91D7,
+ 31136 - 11904: 0xE6CD,
+ 31137 - 11904: 0xE6CC,
+ 31138 - 11904: 0xE6CF,
+ 31140 - 11904: 0xEAAE,
+ 31141 - 11904: 0x94CC,
+ 31142 - 11904: 0xBF6D,
+ 31143 - 11904: 0xC148,
+ 31144 - 11904: 0xEDB0,
+ 31145 - 11904: 0xFEF8,
+ 31146 - 11904: 0xC149,
+ 31147 - 11904: 0xEDAF,
+ 31148 - 11904: 0xF05F,
+ 31149 - 11904: 0xF05E,
+ 31150 - 11904: 0xC2A7,
+ 31152 - 11904: 0xF2A5,
+ 31153 - 11904: 0xC3AB,
+ 31154 - 11904: 0xF4A1,
+ 31155 - 11904: 0xC5A1,
+ 31156 - 11904: 0xF6F7,
+ 31158 - 11904: 0xF8B7,
+ 31159 - 11904: 0xF8B6,
+ 31160 - 11904: 0xC9A8,
+ 31161 - 11904: 0xACEA,
+ 31162 - 11904: 0xACEB,
+ 31163 - 11904: 0xD6C3,
+ 31165 - 11904: 0xB856,
+ 31166 - 11904: 0xA5DD,
+ 31167 - 11904: 0xA872,
+ 31168 - 11904: 0xA871,
+ 31169 - 11904: 0xA870,
+ 31172 - 11904: 0x97A8,
+ 31173 - 11904: 0xCDA4,
+ 31174 - 11904: 0xFEFC,
+ 31176 - 11904: 0xAAC4,
+ 31177 - 11904: 0xAAC3,
+ 31178 - 11904: 0x8CDE,
+ 31179 - 11904: 0xACEE,
+ 31180 - 11904: 0xFDBF,
+ 31181 - 11904: 0xCFFA,
+ 31182 - 11904: 0xCFFD,
+ 31183 - 11904: 0xCFFB,
+ 31184 - 11904: 0x87B3,
+ 31185 - 11904: 0xACEC,
+ 31186 - 11904: 0xACED,
+ 31188 - 11904: 0xFEFE,
+ 31189 - 11904: 0xCFF9,
+ 31190 - 11904: 0xCFFC,
+ 31192 - 11904: 0xAFB5,
+ 31196 - 11904: 0xD2F3,
+ 31197 - 11904: 0xD2F5,
+ 31198 - 11904: 0xD2F4,
+ 31199 - 11904: 0xAFB2,
+ 31200 - 11904: 0xD2EF,
+ 31202 - 11904: 0x96D1,
+ 31203 - 11904: 0xAFB0,
+ 31204 - 11904: 0xAFAF,
+ 31206 - 11904: 0xAFB3,
+ 31207 - 11904: 0xAFB1,
+ 31209 - 11904: 0xAFB4,
+ 31210 - 11904: 0xD2F2,
+ 31211 - 11904: 0xD2ED,
+ 31212 - 11904: 0xD2EE,
+ 31213 - 11904: 0xD2F1,
+ 31214 - 11904: 0xD2F0,
+ 31217 - 11904: 0x94D5,
+ 31220 - 11904: 0x94D0,
+ 31222 - 11904: 0xD6C6,
+ 31223 - 11904: 0xD6C7,
+ 31224 - 11904: 0xD6C5,
+ 31226 - 11904: 0xD6C4,
+ 31227 - 11904: 0xB2BE,
+ 31232 - 11904: 0xB57D,
+ 31234 - 11904: 0xDAD6,
+ 31235 - 11904: 0xDAD8,
+ 31236 - 11904: 0xDADA,
+ 31237 - 11904: 0xB57C,
+ 31238 - 11904: 0x9944,
+ 31240 - 11904: 0xB57A,
+ 31242 - 11904: 0xDAD7,
+ 31243 - 11904: 0xB57B,
+ 31244 - 11904: 0xDAD9,
+ 31245 - 11904: 0xB579,
+ 31248 - 11904: 0xDF41,
+ 31249 - 11904: 0xDEF7,
+ 31250 - 11904: 0xDEFA,
+ 31251 - 11904: 0xDEFE,
+ 31252 - 11904: 0xB85A,
+ 31253 - 11904: 0xDEFC,
+ 31255 - 11904: 0xDEFB,
+ 31256 - 11904: 0xDEF8,
+ 31257 - 11904: 0xDEF9,
+ 31258 - 11904: 0xB858,
+ 31259 - 11904: 0xDF40,
+ 31260 - 11904: 0xB857,
+ 31262 - 11904: 0xB85C,
+ 31263 - 11904: 0xB85B,
+ 31264 - 11904: 0xB859,
+ 31266 - 11904: 0xDEFD,
+ 31270 - 11904: 0xE349,
+ 31272 - 11904: 0xE348,
+ 31274 - 11904: 0x8C63,
+ 31275 - 11904: 0xE344,
+ 31276 - 11904: 0x87BB,
+ 31277 - 11904: 0xA0B3,
+ 31278 - 11904: 0xBAD8,
+ 31279 - 11904: 0xE347,
+ 31280 - 11904: 0xE346,
+ 31281 - 11904: 0xBAD9,
+ 31282 - 11904: 0x87B4,
+ 31287 - 11904: 0xBD5E,
+ 31289 - 11904: 0xE6D2,
+ 31290 - 11904: 0x94CF,
+ 31291 - 11904: 0xBD5F,
+ 31292 - 11904: 0xBD5B,
+ 31293 - 11904: 0xBD5D,
+ 31294 - 11904: 0x9FFA,
+ 31295 - 11904: 0xBD5A,
+ 31296 - 11904: 0xBD5C,
+ 31299 - 11904: 0x91E5,
+ 31300 - 11904: 0xEAAF,
+ 31301 - 11904: 0x9C6A,
+ 31302 - 11904: 0xBF70,
+ 31303 - 11904: 0xEAB1,
+ 31304 - 11904: 0xEAB0,
+ 31305 - 11904: 0x8E49,
+ 31306 - 11904: 0xE345,
+ 31307 - 11904: 0xBF72,
+ 31308 - 11904: 0xBF71,
+ 31309 - 11904: 0xBF6E,
+ 31310 - 11904: 0xBF6F,
+ 31316 - 11904: 0xEDB5,
+ 31318 - 11904: 0xEDB3,
+ 31319 - 11904: 0xC14A,
+ 31320 - 11904: 0xEDB4,
+ 31322 - 11904: 0xEDB6,
+ 31323 - 11904: 0xEDB2,
+ 31324 - 11904: 0xEDB1,
+ 31327 - 11904: 0xF060,
+ 31328 - 11904: 0xC2AA,
+ 31329 - 11904: 0xC2A8,
+ 31330 - 11904: 0xC2A9,
+ 31333 - 11904: 0x8E4C,
+ 31335 - 11904: 0xF2A6,
+ 31336 - 11904: 0xF2A7,
+ 31337 - 11904: 0xC3AD,
+ 31339 - 11904: 0xC3AC,
+ 31340 - 11904: 0xF4A3,
+ 31341 - 11904: 0xF4A4,
+ 31342 - 11904: 0xF4A2,
+ 31344 - 11904: 0xF6F8,
+ 31345 - 11904: 0xF6F9,
+ 31346 - 11904: 0x87C9,
+ 31348 - 11904: 0xA5DE,
+ 31349 - 11904: 0xCA48,
+ 31350 - 11904: 0xA873,
+ 31352 - 11904: 0xCDA5,
+ 31353 - 11904: 0xAAC6,
+ 31354 - 11904: 0xAAC5,
+ 31355 - 11904: 0xCDA6,
+ 31357 - 11904: 0x8E4D,
+ 31358 - 11904: 0xD040,
+ 31359 - 11904: 0xACEF,
+ 31360 - 11904: 0xCFFE,
+ 31361 - 11904: 0xACF0,
+ 31363 - 11904: 0x9A73,
+ 31364 - 11904: 0xAFB6,
+ 31365 - 11904: 0xD2F8,
+ 31366 - 11904: 0xD2F6,
+ 31367 - 11904: 0xD2FC,
+ 31368 - 11904: 0xAFB7,
+ 31369 - 11904: 0xD2F7,
+ 31370 - 11904: 0xD2FB,
+ 31371 - 11904: 0xD2F9,
+ 31372 - 11904: 0xD2FA,
+ 31375 - 11904: 0xD6C8,
+ 31376 - 11904: 0xD6CA,
+ 31377 - 11904: 0x9947,
+ 31378 - 11904: 0xB2BF,
+ 31379 - 11904: 0x8CB1,
+ 31380 - 11904: 0xD6C9,
+ 31381 - 11904: 0xB2C0,
+ 31382 - 11904: 0xB5A2,
+ 31383 - 11904: 0xB5A1,
+ 31384 - 11904: 0xB57E,
+ 31385 - 11904: 0xDADB,
+ 31390 - 11904: 0xDF44,
+ 31391 - 11904: 0xB85D,
+ 31392 - 11904: 0xB85E,
+ 31394 - 11904: 0xDF43,
+ 31395 - 11904: 0xDF42,
+ 31400 - 11904: 0xE34A,
+ 31401 - 11904: 0xBADB,
+ 31402 - 11904: 0xBADA,
+ 31403 - 11904: 0xE34B,
+ 31404 - 11904: 0xE34C,
+ 31406 - 11904: 0xBD61,
+ 31407 - 11904: 0xBD60,
+ 31408 - 11904: 0x8E50,
+ 31409 - 11904: 0xEAB5,
+ 31410 - 11904: 0xE6D3,
+ 31411 - 11904: 0xE6D5,
+ 31412 - 11904: 0xE6D4,
+ 31413 - 11904: 0xEAB4,
+ 31414 - 11904: 0xEAB2,
+ 31415 - 11904: 0xEAB6,
+ 31416 - 11904: 0xEAB3,
+ 31418 - 11904: 0xBF73,
+ 31419 - 11904: 0x8E4F,
+ 31420 - 11904: 0x9949,
+ 31422 - 11904: 0xEDB7,
+ 31423 - 11904: 0xC14B,
+ 31424 - 11904: 0xEDB8,
+ 31425 - 11904: 0xEDB9,
+ 31426 - 11904: 0x8E51,
+ 31427 - 11904: 0x8E52,
+ 31428 - 11904: 0xC2AB,
+ 31429 - 11904: 0xC2AC,
+ 31431 - 11904: 0xC475,
+ 31432 - 11904: 0x9AB2,
+ 31433 - 11904: 0x89A5,
+ 31434 - 11904: 0xC5D1,
+ 31435 - 11904: 0xA5DF,
+ 31439 - 11904: 0x994C,
+ 31441 - 11904: 0xD041,
+ 31443 - 11904: 0x9FF8,
+ 31448 - 11904: 0xD2FD,
+ 31449 - 11904: 0xAFB8,
+ 31450 - 11904: 0x8E56,
+ 31451 - 11904: 0x994D,
+ 31452 - 11904: 0x91CA,
+ 31453 - 11904: 0x8E57,
+ 31455 - 11904: 0xB3BA,
+ 31456 - 11904: 0xB3B9,
+ 31458 - 11904: 0x94E1,
+ 31459 - 11904: 0xB5A4,
+ 31460 - 11904: 0xDADD,
+ 31461 - 11904: 0xB5A3,
+ 31462 - 11904: 0xDADC,
+ 31463 - 11904: 0x9047,
+ 31465 - 11904: 0x8FD8,
+ 31466 - 11904: 0x8E58,
+ 31467 - 11904: 0xDF45,
+ 31469 - 11904: 0xBADC,
+ 31470 - 11904: 0xE34D,
+ 31471 - 11904: 0xBADD,
+ 31478 - 11904: 0xC476,
+ 31479 - 11904: 0xF4A5,
+ 31481 - 11904: 0xA6CB,
+ 31482 - 11904: 0xAAC7,
+ 31483 - 11904: 0xCDA7,
+ 31484 - 11904: 0x87A3,
+ 31485 - 11904: 0xACF2,
+ 31486 - 11904: 0x94EB,
+ 31487 - 11904: 0xACF1,
+ 31488 - 11904: 0xD042,
+ 31489 - 11904: 0xD043,
+ 31492 - 11904: 0xD340,
+ 31493 - 11904: 0xD342,
+ 31494 - 11904: 0xAFB9,
+ 31496 - 11904: 0xD344,
+ 31497 - 11904: 0xD347,
+ 31498 - 11904: 0xD345,
+ 31499 - 11904: 0x8E5C,
+ 31500 - 11904: 0x9553,
+ 31502 - 11904: 0xD346,
+ 31503 - 11904: 0xD343,
+ 31504 - 11904: 0xD2FE,
+ 31505 - 11904: 0xAFBA,
+ 31506 - 11904: 0xD348,
+ 31507 - 11904: 0xD341,
+ 31508 - 11904: 0x9FE5,
+ 31512 - 11904: 0xD6D3,
+ 31513 - 11904: 0xB2C6,
+ 31514 - 11904: 0xD6DC,
+ 31515 - 11904: 0xB2C3,
+ 31517 - 11904: 0xD6D5,
+ 31518 - 11904: 0xB2C7,
+ 31519 - 11904: 0x9F56,
+ 31520 - 11904: 0xB2C1,
+ 31522 - 11904: 0xD6D0,
+ 31523 - 11904: 0xD6DD,
+ 31524 - 11904: 0xD6D1,
+ 31525 - 11904: 0xD6CE,
+ 31526 - 11904: 0xB2C5,
+ 31527 - 11904: 0x954F,
+ 31528 - 11904: 0xB2C2,
+ 31529 - 11904: 0x8E5E,
+ 31530 - 11904: 0xD6D4,
+ 31531 - 11904: 0xD6D7,
+ 31532 - 11904: 0xB2C4,
+ 31533 - 11904: 0xD6D8,
+ 31534 - 11904: 0xB2C8,
+ 31535 - 11904: 0xD6D9,
+ 31536 - 11904: 0xD6CF,
+ 31537 - 11904: 0xD6D6,
+ 31538 - 11904: 0xD6DA,
+ 31539 - 11904: 0xD6D2,
+ 31540 - 11904: 0xD6CD,
+ 31541 - 11904: 0xD6CB,
+ 31544 - 11904: 0xD6DB,
+ 31545 - 11904: 0x996A,
+ 31547 - 11904: 0xDADF,
+ 31552 - 11904: 0xDAE4,
+ 31554 - 11904: 0x9C64,
+ 31555 - 11904: 0x9CD9,
+ 31556 - 11904: 0xDAE0,
+ 31557 - 11904: 0xDAE6,
+ 31558 - 11904: 0xB5A7,
+ 31559 - 11904: 0xD6CC,
+ 31560 - 11904: 0xDAE1,
+ 31561 - 11904: 0xB5A5,
+ 31562 - 11904: 0xDADE,
+ 31563 - 11904: 0xB5AC,
+ 31564 - 11904: 0xDAE2,
+ 31565 - 11904: 0xB5AB,
+ 31566 - 11904: 0xDAE3,
+ 31567 - 11904: 0xB5AD,
+ 31568 - 11904: 0xB5A8,
+ 31569 - 11904: 0xB5AE,
+ 31570 - 11904: 0xB5A9,
+ 31572 - 11904: 0xB5AA,
+ 31573 - 11904: 0x8E5D,
+ 31574 - 11904: 0xB5A6,
+ 31576 - 11904: 0xDAE5,
+ 31584 - 11904: 0xB861,
+ 31585 - 11904: 0xDF50,
+ 31586 - 11904: 0x9950,
+ 31587 - 11904: 0xDF53,
+ 31588 - 11904: 0xDF47,
+ 31589 - 11904: 0xDF4C,
+ 31590 - 11904: 0xDF46,
+ 31591 - 11904: 0xB863,
+ 31593 - 11904: 0xDF4A,
+ 31596 - 11904: 0x9951,
+ 31597 - 11904: 0xDF48,
+ 31598 - 11904: 0xB862,
+ 31599 - 11904: 0x8E62,
+ 31600 - 11904: 0xDF4F,
+ 31601 - 11904: 0xDF4E,
+ 31602 - 11904: 0xDF4B,
+ 31603 - 11904: 0xDF4D,
+ 31604 - 11904: 0xDF49,
+ 31605 - 11904: 0xBAE1,
+ 31606 - 11904: 0xDF52,
+ 31607 - 11904: 0xB85F,
+ 31608 - 11904: 0xDF51,
+ 31611 - 11904: 0x9952,
+ 31618 - 11904: 0xE35D,
+ 31620 - 11904: 0xBAE8,
+ 31621 - 11904: 0xE358,
+ 31623 - 11904: 0xBAE7,
+ 31624 - 11904: 0xE34E,
+ 31626 - 11904: 0xE350,
+ 31627 - 11904: 0xBAE0,
+ 31628 - 11904: 0xE355,
+ 31629 - 11904: 0xE354,
+ 31630 - 11904: 0xE357,
+ 31631 - 11904: 0xBAE5,
+ 31632 - 11904: 0xE352,
+ 31633 - 11904: 0xE351,
+ 31634 - 11904: 0x8E68,
+ 31636 - 11904: 0xBAE4,
+ 31637 - 11904: 0xBADF,
+ 31638 - 11904: 0xE353,
+ 31639 - 11904: 0xBAE2,
+ 31640 - 11904: 0xE359,
+ 31641 - 11904: 0xE35B,
+ 31643 - 11904: 0xE356,
+ 31644 - 11904: 0xE34F,
+ 31645 - 11904: 0xBAE3,
+ 31648 - 11904: 0xBD69,
+ 31649 - 11904: 0xBADE,
+ 31650 - 11904: 0x8E61,
+ 31651 - 11904: 0x9F59,
+ 31652 - 11904: 0xE35C,
+ 31660 - 11904: 0xE6D9,
+ 31661 - 11904: 0xBD62,
+ 31662 - 11904: 0x87D0,
+ 31663 - 11904: 0xE6DB,
+ 31665 - 11904: 0xBD63,
+ 31666 - 11904: 0x8BB3,
+ 31668 - 11904: 0xBD65,
+ 31669 - 11904: 0xE6DE,
+ 31671 - 11904: 0xE6D6,
+ 31672 - 11904: 0xBAE6,
+ 31673 - 11904: 0xE6DC,
+ 31678 - 11904: 0xE6D8,
+ 31680 - 11904: 0xB860,
+ 31681 - 11904: 0xBD68,
+ 31684 - 11904: 0xBD64,
+ 31685 - 11904: 0x87B9,
+ 31686 - 11904: 0xBD66,
+ 31687 - 11904: 0xBD67,
+ 31689 - 11904: 0xBF76,
+ 31690 - 11904: 0xE6DD,
+ 31691 - 11904: 0xE6D7,
+ 31692 - 11904: 0xBD6A,
+ 31694 - 11904: 0xE6DA,
+ 31695 - 11904: 0x9F5D,
+ 31696 - 11904: 0x8E66,
+ 31700 - 11904: 0xEAC0,
+ 31701 - 11904: 0xEABB,
+ 31704 - 11904: 0xEAC5,
+ 31705 - 11904: 0xBF74,
+ 31706 - 11904: 0xEABD,
+ 31707 - 11904: 0xBF78,
+ 31708 - 11904: 0xEAC3,
+ 31709 - 11904: 0xEABA,
+ 31710 - 11904: 0xEAB7,
+ 31711 - 11904: 0xEAC6,
+ 31712 - 11904: 0xC151,
+ 31713 - 11904: 0xBF79,
+ 31714 - 11904: 0xEAC2,
+ 31715 - 11904: 0xEAB8,
+ 31716 - 11904: 0xBF77,
+ 31717 - 11904: 0xEABC,
+ 31718 - 11904: 0xBF7B,
+ 31719 - 11904: 0xEAB9,
+ 31720 - 11904: 0xEABE,
+ 31721 - 11904: 0xBF7A,
+ 31722 - 11904: 0xEAC1,
+ 31723 - 11904: 0xEAC4,
+ 31724 - 11904: 0x8CB2,
+ 31728 - 11904: 0xEDCB,
+ 31729 - 11904: 0xEDCC,
+ 31730 - 11904: 0xEDBC,
+ 31731 - 11904: 0xEDC3,
+ 31732 - 11904: 0xEDC1,
+ 31735 - 11904: 0xC14F,
+ 31736 - 11904: 0xEDC8,
+ 31737 - 11904: 0xEABF,
+ 31738 - 11904: 0x8E6E,
+ 31739 - 11904: 0xEDBF,
+ 31740 - 11904: 0x9F64,
+ 31741 - 11904: 0xEDC9,
+ 31742 - 11904: 0xC14E,
+ 31743 - 11904: 0xEDBE,
+ 31744 - 11904: 0xEDBD,
+ 31745 - 11904: 0xEDC7,
+ 31746 - 11904: 0xEDC4,
+ 31747 - 11904: 0xEDC6,
+ 31749 - 11904: 0xEDBA,
+ 31750 - 11904: 0xEDCA,
+ 31751 - 11904: 0xC14C,
+ 31753 - 11904: 0xEDC5,
+ 31754 - 11904: 0xEDCE,
+ 31755 - 11904: 0xEDC2,
+ 31756 - 11904: 0xC150,
+ 31757 - 11904: 0xC14D,
+ 31758 - 11904: 0xEDC0,
+ 31759 - 11904: 0xEDBB,
+ 31760 - 11904: 0xEDCD,
+ 31761 - 11904: 0xBF75,
+ 31762 - 11904: 0x9953,
+ 31765 - 11904: 0xFAB8,
+ 31769 - 11904: 0xF063,
+ 31771 - 11904: 0x9954,
+ 31772 - 11904: 0xF061,
+ 31773 - 11904: 0xF067,
+ 31774 - 11904: 0xC2B0,
+ 31775 - 11904: 0xF065,
+ 31776 - 11904: 0xF064,
+ 31777 - 11904: 0xC2B2,
+ 31778 - 11904: 0xF06A,
+ 31779 - 11904: 0xC2B1,
+ 31781 - 11904: 0xF06B,
+ 31782 - 11904: 0xF068,
+ 31783 - 11904: 0xC2AE,
+ 31784 - 11904: 0xF069,
+ 31785 - 11904: 0xF062,
+ 31786 - 11904: 0xC2AF,
+ 31787 - 11904: 0xC2AD,
+ 31788 - 11904: 0xF2AB,
+ 31789 - 11904: 0xF066,
+ 31792 - 11904: 0xF06C,
+ 31795 - 11904: 0xF2A8,
+ 31797 - 11904: 0x8E70,
+ 31799 - 11904: 0xC3B2,
+ 31800 - 11904: 0xC3B0,
+ 31801 - 11904: 0xF2AA,
+ 31803 - 11904: 0xF2AC,
+ 31804 - 11904: 0xF2A9,
+ 31805 - 11904: 0xC3B1,
+ 31806 - 11904: 0xC3AE,
+ 31807 - 11904: 0xC3AF,
+ 31808 - 11904: 0xC3B3,
+ 31810 - 11904: 0x9F61,
+ 31811 - 11904: 0xC478,
+ 31812 - 11904: 0x8E72,
+ 31813 - 11904: 0xF4AA,
+ 31815 - 11904: 0xF4A9,
+ 31816 - 11904: 0xF4A7,
+ 31817 - 11904: 0xF4A6,
+ 31818 - 11904: 0xF4A8,
+ 31820 - 11904: 0xC477,
+ 31821 - 11904: 0xC479,
+ 31824 - 11904: 0xC4F0,
+ 31825 - 11904: 0xA06B,
+ 31827 - 11904: 0xF5E5,
+ 31828 - 11904: 0xF5E4,
+ 31830 - 11904: 0x9F40,
+ 31831 - 11904: 0xF6FA,
+ 31833 - 11904: 0xF6FC,
+ 31834 - 11904: 0xF6FE,
+ 31835 - 11904: 0xF6FD,
+ 31836 - 11904: 0xF6FB,
+ 31837 - 11904: 0x94ED,
+ 31839 - 11904: 0xC5A3,
+ 31840 - 11904: 0xC5A2,
+ 31843 - 11904: 0xC5D3,
+ 31844 - 11904: 0xC5D2,
+ 31845 - 11904: 0xC5D4,
+ 31846 - 11904: 0xF7ED,
+ 31847 - 11904: 0xF7EC,
+ 31849 - 11904: 0xF8FB,
+ 31850 - 11904: 0xF8B8,
+ 31851 - 11904: 0xF8FC,
+ 31852 - 11904: 0xC658,
+ 31853 - 11904: 0x94EE,
+ 31854 - 11904: 0xC659,
+ 31855 - 11904: 0xF96D,
+ 31856 - 11904: 0x9FBD,
+ 31858 - 11904: 0xC67E,
+ 31859 - 11904: 0xA6CC,
+ 31860 - 11904: 0x8E7B,
+ 31861 - 11904: 0xCDA8,
+ 31864 - 11904: 0xD045,
+ 31865 - 11904: 0xD046,
+ 31866 - 11904: 0xD044,
+ 31867 - 11904: 0x9957,
+ 31868 - 11904: 0x94F7,
+ 31869 - 11904: 0xACF3,
+ 31870 - 11904: 0x9F5F,
+ 31871 - 11904: 0xD047,
+ 31872 - 11904: 0xD048,
+ 31873 - 11904: 0xD049,
+ 31875 - 11904: 0x8E73,
+ 31876 - 11904: 0xD349,
+ 31877 - 11904: 0xD34F,
+ 31878 - 11904: 0x9F62,
+ 31880 - 11904: 0xD34D,
+ 31881 - 11904: 0xAFBB,
+ 31882 - 11904: 0xD34B,
+ 31884 - 11904: 0xD34C,
+ 31885 - 11904: 0xD34E,
+ 31886 - 11904: 0x94F6,
+ 31889 - 11904: 0xD34A,
+ 31890 - 11904: 0xB2C9,
+ 31892 - 11904: 0xD6DE,
+ 31893 - 11904: 0xB2CB,
+ 31894 - 11904: 0xD6E0,
+ 31895 - 11904: 0xB2CA,
+ 31896 - 11904: 0xD6DF,
+ 31900 - 11904: 0x9958,
+ 31902 - 11904: 0xDAE8,
+ 31903 - 11904: 0xB5AF,
+ 31905 - 11904: 0xDAEA,
+ 31906 - 11904: 0xDAE7,
+ 31907 - 11904: 0xD6E1,
+ 31909 - 11904: 0xB5B0,
+ 31910 - 11904: 0x8E75,
+ 31911 - 11904: 0xF9DB,
+ 31912 - 11904: 0xDAE9,
+ 31916 - 11904: 0x9072,
+ 31918 - 11904: 0x94F8,
+ 31919 - 11904: 0xDF56,
+ 31921 - 11904: 0xB864,
+ 31922 - 11904: 0xDF54,
+ 31923 - 11904: 0xB865,
+ 31924 - 11904: 0xDF55,
+ 31925 - 11904: 0xB866,
+ 31928 - 11904: 0x995A,
+ 31929 - 11904: 0xBAE9,
+ 31930 - 11904: 0xE361,
+ 31931 - 11904: 0xE35E,
+ 31932 - 11904: 0xE360,
+ 31933 - 11904: 0xBAEA,
+ 31934 - 11904: 0xBAEB,
+ 31935 - 11904: 0xE35F,
+ 31938 - 11904: 0xA0B0,
+ 31939 - 11904: 0x8CB3,
+ 31941 - 11904: 0xE6DF,
+ 31943 - 11904: 0x8E79,
+ 31944 - 11904: 0xE6E0,
+ 31945 - 11904: 0x8E78,
+ 31946 - 11904: 0xBD6B,
+ 31947 - 11904: 0xE6E2,
+ 31948 - 11904: 0xE6E1,
+ 31949 - 11904: 0x94F3,
+ 31950 - 11904: 0xA261,
+ 31952 - 11904: 0xEACA,
+ 31953 - 11904: 0xEACB,
+ 31954 - 11904: 0xEAC7,
+ 31955 - 11904: 0x98AF,
+ 31956 - 11904: 0xEAC8,
+ 31957 - 11904: 0xBF7C,
+ 31958 - 11904: 0xBF7D,
+ 31959 - 11904: 0xEAC9,
+ 31961 - 11904: 0xC157,
+ 31962 - 11904: 0xA0B2,
+ 31964 - 11904: 0xC153,
+ 31965 - 11904: 0xC158,
+ 31966 - 11904: 0xC154,
+ 31967 - 11904: 0xC156,
+ 31968 - 11904: 0xC152,
+ 31970 - 11904: 0xC155,
+ 31974 - 11904: 0x8E7A,
+ 31975 - 11904: 0xC2B3,
+ 31976 - 11904: 0xEDCF,
+ 31978 - 11904: 0xF2AE,
+ 31980 - 11904: 0xF2AD,
+ 31981 - 11904: 0x995C,
+ 31982 - 11904: 0xF4AB,
+ 31983 - 11904: 0xC47A,
+ 31984 - 11904: 0xC47B,
+ 31985 - 11904: 0xF741,
+ 31986 - 11904: 0xF5E6,
+ 31987 - 11904: 0x8E7C,
+ 31988 - 11904: 0xF740,
+ 31989 - 11904: 0x8E7D,
+ 31990 - 11904: 0xF8FD,
+ 31991 - 11904: 0xF9A4,
+ 31992 - 11904: 0xA6CD,
+ 31993 - 11904: 0x8BD9,
+ 31995 - 11904: 0xA874,
+ 31996 - 11904: 0x89A2,
+ 31997 - 11904: 0xCDA9,
+ 31998 - 11904: 0xAAC8,
+ 32000 - 11904: 0xACF6,
+ 32001 - 11904: 0xD04C,
+ 32002 - 11904: 0xACF4,
+ 32003 - 11904: 0xD04A,
+ 32004 - 11904: 0xACF9,
+ 32005 - 11904: 0xACF5,
+ 32006 - 11904: 0xACFA,
+ 32007 - 11904: 0xACF8,
+ 32008 - 11904: 0xD04B,
+ 32009 - 11904: 0xACF7,
+ 32010 - 11904: 0xAFBF,
+ 32011 - 11904: 0xAFBE,
+ 32012 - 11904: 0xD35A,
+ 32013 - 11904: 0xAFC7,
+ 32014 - 11904: 0xD353,
+ 32015 - 11904: 0xD359,
+ 32016 - 11904: 0xAFC3,
+ 32017 - 11904: 0xD352,
+ 32018 - 11904: 0xD358,
+ 32019 - 11904: 0xD356,
+ 32020 - 11904: 0xAFC2,
+ 32021 - 11904: 0xAFC4,
+ 32022 - 11904: 0xD355,
+ 32023 - 11904: 0xAFBD,
+ 32024 - 11904: 0xD354,
+ 32025 - 11904: 0xAFC8,
+ 32026 - 11904: 0xAFC5,
+ 32027 - 11904: 0xAFC9,
+ 32028 - 11904: 0xAFC6,
+ 32029 - 11904: 0xD351,
+ 32030 - 11904: 0xD350,
+ 32031 - 11904: 0xD357,
+ 32032 - 11904: 0xAFC0,
+ 32033 - 11904: 0xAFBC,
+ 32034 - 11904: 0xAFC1,
+ 32037 - 11904: 0x9ED7,
+ 32040 - 11904: 0xD6F0,
+ 32041 - 11904: 0xD6E9,
+ 32043 - 11904: 0xB5B5,
+ 32044 - 11904: 0xD6E8,
+ 32046 - 11904: 0xB2CF,
+ 32047 - 11904: 0xB2D6,
+ 32048 - 11904: 0xB2D3,
+ 32049 - 11904: 0xB2D9,
+ 32050 - 11904: 0xB2D8,
+ 32051 - 11904: 0xB2D4,
+ 32053 - 11904: 0xD6E2,
+ 32054 - 11904: 0xD6E5,
+ 32056 - 11904: 0xD6E4,
+ 32057 - 11904: 0xB2D0,
+ 32058 - 11904: 0xD6E6,
+ 32059 - 11904: 0xD6EF,
+ 32060 - 11904: 0xB2D1,
+ 32061 - 11904: 0xD6E3,
+ 32062 - 11904: 0xD6EC,
+ 32063 - 11904: 0xD6ED,
+ 32064 - 11904: 0xB2D2,
+ 32065 - 11904: 0xD6EA,
+ 32066 - 11904: 0xB2D7,
+ 32067 - 11904: 0xB2CD,
+ 32068 - 11904: 0xB2D5,
+ 32069 - 11904: 0xD6E7,
+ 32070 - 11904: 0xB2CC,
+ 32071 - 11904: 0xD6EB,
+ 32074 - 11904: 0xD6EE,
+ 32077 - 11904: 0xA0B6,
+ 32078 - 11904: 0xDAFB,
+ 32079 - 11904: 0xDAF2,
+ 32080 - 11904: 0xB5B2,
+ 32081 - 11904: 0xDAF9,
+ 32082 - 11904: 0xDAF6,
+ 32083 - 11904: 0xDAEE,
+ 32084 - 11904: 0xDAF7,
+ 32085 - 11904: 0xB5B4,
+ 32086 - 11904: 0xDAEF,
+ 32088 - 11904: 0xDAEB,
+ 32090 - 11904: 0x9E42,
+ 32091 - 11904: 0xB86C,
+ 32092 - 11904: 0xDAF4,
+ 32093 - 11904: 0x8EA4,
+ 32094 - 11904: 0xB5B1,
+ 32095 - 11904: 0xDAFA,
+ 32097 - 11904: 0xB5B8,
+ 32098 - 11904: 0xB5BA,
+ 32099 - 11904: 0xDAED,
+ 32102 - 11904: 0xB5B9,
+ 32103 - 11904: 0xDAF0,
+ 32104 - 11904: 0xB5B3,
+ 32105 - 11904: 0xDAF8,
+ 32106 - 11904: 0xDAF1,
+ 32107 - 11904: 0xDAF5,
+ 32109 - 11904: 0xDAF3,
+ 32110 - 11904: 0xB5B6,
+ 32111 - 11904: 0xDAEC,
+ 32112 - 11904: 0xB5BB,
+ 32113 - 11904: 0xB2CE,
+ 32114 - 11904: 0xB5B7,
+ 32115 - 11904: 0xB5BC,
+ 32121 - 11904: 0xB868,
+ 32122 - 11904: 0xDF5D,
+ 32123 - 11904: 0xDF5F,
+ 32124 - 11904: 0xDF61,
+ 32125 - 11904: 0xDF65,
+ 32127 - 11904: 0xDF5B,
+ 32128 - 11904: 0xDF59,
+ 32129 - 11904: 0xB86A,
+ 32131 - 11904: 0xDF60,
+ 32132 - 11904: 0xDF64,
+ 32133 - 11904: 0xDF5C,
+ 32134 - 11904: 0xDF58,
+ 32136 - 11904: 0xDF57,
+ 32137 - 11904: 0x8EA7,
+ 32139 - 11904: 0x8C76,
+ 32140 - 11904: 0xDF62,
+ 32141 - 11904: 0xDF5A,
+ 32142 - 11904: 0xDF5E,
+ 32143 - 11904: 0xB86B,
+ 32145 - 11904: 0xB869,
+ 32146 - 11904: 0xDF66,
+ 32147 - 11904: 0xB867,
+ 32148 - 11904: 0xDF63,
+ 32149 - 11904: 0x8767,
+ 32150 - 11904: 0xE372,
+ 32151 - 11904: 0x9542,
+ 32156 - 11904: 0xBAEE,
+ 32157 - 11904: 0xE36A,
+ 32158 - 11904: 0xBD78,
+ 32159 - 11904: 0xE374,
+ 32160 - 11904: 0xBAF1,
+ 32161 - 11904: 0xE378,
+ 32162 - 11904: 0xBAF7,
+ 32163 - 11904: 0xE365,
+ 32164 - 11904: 0x987D,
+ 32166 - 11904: 0xE375,
+ 32167 - 11904: 0xE362,
+ 32168 - 11904: 0x9755,
+ 32169 - 11904: 0xE377,
+ 32170 - 11904: 0xE366,
+ 32171 - 11904: 0x8EA8,
+ 32172 - 11904: 0xBAFE,
+ 32173 - 11904: 0xBAFB,
+ 32174 - 11904: 0xE376,
+ 32175 - 11904: 0xE370,
+ 32176 - 11904: 0xBAED,
+ 32177 - 11904: 0xBAF5,
+ 32178 - 11904: 0xBAF4,
+ 32179 - 11904: 0x8EAA,
+ 32180 - 11904: 0xBAF3,
+ 32181 - 11904: 0xBAF9,
+ 32183 - 11904: 0xE363,
+ 32184 - 11904: 0xBAFA,
+ 32185 - 11904: 0xE371,
+ 32186 - 11904: 0xBAF6,
+ 32187 - 11904: 0xBAEC,
+ 32188 - 11904: 0xE373,
+ 32189 - 11904: 0xBAEF,
+ 32190 - 11904: 0xBAF0,
+ 32191 - 11904: 0xBAF8,
+ 32192 - 11904: 0xE368,
+ 32193 - 11904: 0xE367,
+ 32194 - 11904: 0xE364,
+ 32196 - 11904: 0xE36C,
+ 32197 - 11904: 0xE369,
+ 32198 - 11904: 0xE36D,
+ 32199 - 11904: 0xBAFD,
+ 32201 - 11904: 0xE379,
+ 32202 - 11904: 0xBAF2,
+ 32203 - 11904: 0xE36E,
+ 32204 - 11904: 0xE36F,
+ 32205 - 11904: 0x89A3,
+ 32206 - 11904: 0xE36B,
+ 32207 - 11904: 0x9960,
+ 32208 - 11904: 0x9962,
+ 32210 - 11904: 0xBAFC,
+ 32211 - 11904: 0x94FC,
+ 32212 - 11904: 0x9961,
+ 32215 - 11904: 0xE6E7,
+ 32216 - 11904: 0xBD70,
+ 32217 - 11904: 0xBD79,
+ 32218 - 11904: 0xBD75,
+ 32219 - 11904: 0xE6E4,
+ 32220 - 11904: 0x94FA,
+ 32221 - 11904: 0xBD72,
+ 32222 - 11904: 0xBD76,
+ 32223 - 11904: 0xE6F0,
+ 32224 - 11904: 0xBD6C,
+ 32225 - 11904: 0xE6E8,
+ 32227 - 11904: 0xBD74,
+ 32228 - 11904: 0x8EAE,
+ 32229 - 11904: 0x8EB2,
+ 32230 - 11904: 0xE6EB,
+ 32231 - 11904: 0xE6E6,
+ 32232 - 11904: 0xBD73,
+ 32233 - 11904: 0xBD77,
+ 32234 - 11904: 0xE6E5,
+ 32236 - 11904: 0xBD71,
+ 32238 - 11904: 0xE6EF,
+ 32239 - 11904: 0xBD6E,
+ 32240 - 11904: 0xE6EE,
+ 32241 - 11904: 0xE6ED,
+ 32242 - 11904: 0xBD7A,
+ 32243 - 11904: 0xE572,
+ 32244 - 11904: 0xBD6D,
+ 32245 - 11904: 0x8EB0,
+ 32246 - 11904: 0xE6EC,
+ 32247 - 11904: 0xE6E3,
+ 32249 - 11904: 0xBD7B,
+ 32250 - 11904: 0xE6EA,
+ 32251 - 11904: 0xBD6F,
+ 32253 - 11904: 0x9963,
+ 32254 - 11904: 0x97AA,
+ 32259 - 11904: 0xE6E9,
+ 32263 - 11904: 0x94FB,
+ 32264 - 11904: 0xBFA2,
+ 32265 - 11904: 0xBFA7,
+ 32266 - 11904: 0xBF7E,
+ 32267 - 11904: 0xEAD8,
+ 32268 - 11904: 0xEACF,
+ 32269 - 11904: 0xEADB,
+ 32270 - 11904: 0xEAD3,
+ 32271 - 11904: 0xEAD9,
+ 32272 - 11904: 0xBFA8,
+ 32273 - 11904: 0xBFA1,
+ 32274 - 11904: 0xEACC,
+ 32275 - 11904: 0xEAD2,
+ 32276 - 11904: 0xEADC,
+ 32277 - 11904: 0xEAD5,
+ 32278 - 11904: 0xEADA,
+ 32279 - 11904: 0xEACE,
+ 32282 - 11904: 0xEAD6,
+ 32283 - 11904: 0xBFA3,
+ 32284 - 11904: 0xEAD4,
+ 32285 - 11904: 0xBFA6,
+ 32286 - 11904: 0xBFA5,
+ 32287 - 11904: 0xEAD0,
+ 32288 - 11904: 0xEAD1,
+ 32289 - 11904: 0xEACD,
+ 32290 - 11904: 0xEAD7,
+ 32291 - 11904: 0xBFA4,
+ 32292 - 11904: 0xEADE,
+ 32293 - 11904: 0xEADD,
+ 32295 - 11904: 0x8EBB,
+ 32297 - 11904: 0xEDDA,
+ 32298 - 11904: 0xEDD6,
+ 32299 - 11904: 0xC15F,
+ 32301 - 11904: 0xEDD0,
+ 32302 - 11904: 0xC159,
+ 32303 - 11904: 0xC169,
+ 32304 - 11904: 0xEDDC,
+ 32305 - 11904: 0xC161,
+ 32306 - 11904: 0xC15D,
+ 32307 - 11904: 0xEDD3,
+ 32308 - 11904: 0xC164,
+ 32309 - 11904: 0xC167,
+ 32310 - 11904: 0xEDDE,
+ 32311 - 11904: 0xC15C,
+ 32312 - 11904: 0xEDD5,
+ 32313 - 11904: 0xC165,
+ 32314 - 11904: 0xEDE0,
+ 32315 - 11904: 0xEDDD,
+ 32316 - 11904: 0xEDD1,
+ 32317 - 11904: 0xC160,
+ 32318 - 11904: 0xC15A,
+ 32319 - 11904: 0xC168,
+ 32320 - 11904: 0xEDD8,
+ 32321 - 11904: 0xC163,
+ 32322 - 11904: 0xEDD2,
+ 32323 - 11904: 0xC15E,
+ 32324 - 11904: 0xEDDF,
+ 32325 - 11904: 0xC162,
+ 32326 - 11904: 0xC15B,
+ 32327 - 11904: 0xEDD9,
+ 32328 - 11904: 0xC166,
+ 32329 - 11904: 0xEDD7,
+ 32332 - 11904: 0xEDDB,
+ 32336 - 11904: 0xF06E,
+ 32337 - 11904: 0xF074,
+ 32338 - 11904: 0xC2B9,
+ 32339 - 11904: 0xF077,
+ 32340 - 11904: 0xC2B4,
+ 32341 - 11904: 0xC2B5,
+ 32342 - 11904: 0xF06F,
+ 32343 - 11904: 0xF076,
+ 32344 - 11904: 0xF071,
+ 32345 - 11904: 0xC2BA,
+ 32346 - 11904: 0xC2B7,
+ 32347 - 11904: 0x8CDC,
+ 32348 - 11904: 0xF06D,
+ 32350 - 11904: 0xC2B6,
+ 32351 - 11904: 0xF073,
+ 32352 - 11904: 0xF075,
+ 32353 - 11904: 0xC2B8,
+ 32354 - 11904: 0xF072,
+ 32355 - 11904: 0xF070,
+ 32357 - 11904: 0x9876,
+ 32359 - 11904: 0x8EA1,
+ 32360 - 11904: 0xF2B8,
+ 32361 - 11904: 0xC3B7,
+ 32362 - 11904: 0xC3B8,
+ 32363 - 11904: 0xC3B4,
+ 32364 - 11904: 0x8CB4,
+ 32365 - 11904: 0xC3B5,
+ 32366 - 11904: 0x8EB7,
+ 32367 - 11904: 0xF2B4,
+ 32368 - 11904: 0xF2B2,
+ 32370 - 11904: 0xF2B6,
+ 32371 - 11904: 0xC3BA,
+ 32372 - 11904: 0xF2B7,
+ 32373 - 11904: 0xF2B0,
+ 32374 - 11904: 0xF2AF,
+ 32375 - 11904: 0xF2B3,
+ 32376 - 11904: 0xF2B1,
+ 32377 - 11904: 0xC3B6,
+ 32378 - 11904: 0xF2B5,
+ 32379 - 11904: 0xF4AC,
+ 32380 - 11904: 0xC47E,
+ 32381 - 11904: 0xC47D,
+ 32382 - 11904: 0xF4AD,
+ 32383 - 11904: 0x9DA6,
+ 32384 - 11904: 0xF4AF,
+ 32385 - 11904: 0xF4AE,
+ 32386 - 11904: 0xC4A1,
+ 32390 - 11904: 0xF5EB,
+ 32391 - 11904: 0xF5E8,
+ 32392 - 11904: 0xF5E9,
+ 32394 - 11904: 0xF5E7,
+ 32395 - 11904: 0xF5EA,
+ 32396 - 11904: 0xC4F2,
+ 32397 - 11904: 0xF5EC,
+ 32398 - 11904: 0x9EB0,
+ 32399 - 11904: 0xC4F1,
+ 32401 - 11904: 0xF742,
+ 32402 - 11904: 0x8EB8,
+ 32403 - 11904: 0xC5D5,
+ 32404 - 11904: 0xC5D7,
+ 32405 - 11904: 0xF7EE,
+ 32406 - 11904: 0xC5D6,
+ 32407 - 11904: 0xF8B9,
+ 32408 - 11904: 0xF940,
+ 32409 - 11904: 0xF942,
+ 32410 - 11904: 0xF8FE,
+ 32411 - 11904: 0xF941,
+ 32412 - 11904: 0xC66C,
+ 32415 - 11904: 0x9D70,
+ 32420 - 11904: 0x896E,
+ 32428 - 11904: 0x896F,
+ 32442 - 11904: 0x8970,
+ 32455 - 11904: 0x8971,
+ 32463 - 11904: 0x8972,
+ 32479 - 11904: 0x8973,
+ 32518 - 11904: 0x8974,
+ 32566 - 11904: 0xA6CE,
+ 32567 - 11904: 0x8975,
+ 32568 - 11904: 0xACFB,
+ 32569 - 11904: 0xD26F,
+ 32570 - 11904: 0xAFCA,
+ 32573 - 11904: 0xB2DA,
+ 32574 - 11904: 0xDAFC,
+ 32575 - 11904: 0xDAFD,
+ 32576 - 11904: 0x8EBC,
+ 32577 - 11904: 0x8EBD,
+ 32579 - 11904: 0xEADF,
+ 32580 - 11904: 0xC16A,
+ 32581 - 11904: 0xEDE1,
+ 32583 - 11904: 0x8EBE,
+ 32584 - 11904: 0xC2BB,
+ 32585 - 11904: 0x9DD1,
+ 32586 - 11904: 0xF2BA,
+ 32587 - 11904: 0xF2B9,
+ 32588 - 11904: 0xC4A2,
+ 32589 - 11904: 0xF5ED,
+ 32590 - 11904: 0x94FD,
+ 32591 - 11904: 0xF743,
+ 32592 - 11904: 0xC5F8,
+ 32593 - 11904: 0xCA49,
+ 32594 - 11904: 0x8BD7,
+ 32595 - 11904: 0x8BDA,
+ 32596 - 11904: 0xAAC9,
+ 32597 - 11904: 0xA875,
+ 32600 - 11904: 0xD04D,
+ 32603 - 11904: 0xD360,
+ 32604 - 11904: 0xD35B,
+ 32605 - 11904: 0xD35F,
+ 32606 - 11904: 0xD35D,
+ 32607 - 11904: 0xAFCB,
+ 32608 - 11904: 0xD35E,
+ 32609 - 11904: 0xD35C,
+ 32611 - 11904: 0xD6F1,
+ 32613 - 11904: 0xDAFE,
+ 32614 - 11904: 0xDB40,
+ 32615 - 11904: 0xDF69,
+ 32616 - 11904: 0xDF6A,
+ 32617 - 11904: 0xB86E,
+ 32618 - 11904: 0xB86F,
+ 32619 - 11904: 0xDF68,
+ 32620 - 11904: 0xDF6B,
+ 32621 - 11904: 0xDF67,
+ 32622 - 11904: 0xB86D,
+ 32624 - 11904: 0xBB40,
+ 32625 - 11904: 0xA0E2,
+ 32626 - 11904: 0xB870,
+ 32627 - 11904: 0xE37A,
+ 32629 - 11904: 0xBD7C,
+ 32630 - 11904: 0xE6F1,
+ 32631 - 11904: 0xBD7D,
+ 32632 - 11904: 0x9FE9,
+ 32633 - 11904: 0xBFA9,
+ 32634 - 11904: 0xEAE2,
+ 32635 - 11904: 0xEAE0,
+ 32636 - 11904: 0xEAE1,
+ 32637 - 11904: 0xEDE4,
+ 32638 - 11904: 0xEDE3,
+ 32639 - 11904: 0xEDE2,
+ 32643 - 11904: 0xF2BB,
+ 32645 - 11904: 0xC3B9,
+ 32646 - 11904: 0xF2BC,
+ 32647 - 11904: 0xF744,
+ 32648 - 11904: 0xC5F9,
+ 32649 - 11904: 0xF8BA,
+ 32650 - 11904: 0xA6CF,
+ 32651 - 11904: 0xAACB,
+ 32652 - 11904: 0xAACA,
+ 32653 - 11904: 0xD04F,
+ 32654 - 11904: 0xACFC,
+ 32655 - 11904: 0xFDA8,
+ 32657 - 11904: 0xD04E,
+ 32658 - 11904: 0xD362,
+ 32659 - 11904: 0x8AE7,
+ 32660 - 11904: 0xAFCC,
+ 32661 - 11904: 0xD6F2,
+ 32662 - 11904: 0xD361,
+ 32663 - 11904: 0x8EC2,
+ 32666 - 11904: 0xB2DC,
+ 32667 - 11904: 0xD6F5,
+ 32668 - 11904: 0xD6F3,
+ 32669 - 11904: 0xD6F4,
+ 32670 - 11904: 0xB2DB,
+ 32672 - 11904: 0xDB42,
+ 32673 - 11904: 0xDB43,
+ 32674 - 11904: 0xDB41,
+ 32675 - 11904: 0x8EC4,
+ 32676 - 11904: 0xB873,
+ 32677 - 11904: 0xDF6D,
+ 32678 - 11904: 0xDF6C,
+ 32679 - 11904: 0xDF6E,
+ 32680 - 11904: 0xB872,
+ 32681 - 11904: 0xB871,
+ 32684 - 11904: 0xE6F2,
+ 32685 - 11904: 0xE6F4,
+ 32686 - 11904: 0x9964,
+ 32687 - 11904: 0xBD7E,
+ 32688 - 11904: 0xE6F3,
+ 32689 - 11904: 0xEAE3,
+ 32690 - 11904: 0xBFAA,
+ 32691 - 11904: 0xF079,
+ 32692 - 11904: 0x9965,
+ 32693 - 11904: 0xF078,
+ 32694 - 11904: 0xC3BB,
+ 32695 - 11904: 0xF2BD,
+ 32696 - 11904: 0xC3BD,
+ 32697 - 11904: 0xC3BC,
+ 32698 - 11904: 0xF4B0,
+ 32699 - 11904: 0xF5EE,
+ 32700 - 11904: 0xC4F3,
+ 32701 - 11904: 0xA6D0,
+ 32702 - 11904: 0xD050,
+ 32703 - 11904: 0xACFD,
+ 32704 - 11904: 0xD365,
+ 32705 - 11904: 0xAFCE,
+ 32706 - 11904: 0xD364,
+ 32707 - 11904: 0xD363,
+ 32709 - 11904: 0xAFCD,
+ 32711 - 11904: 0xD6FB,
+ 32713 - 11904: 0xD6FD,
+ 32714 - 11904: 0xD6F6,
+ 32715 - 11904: 0xD6F7,
+ 32716 - 11904: 0xB2DD,
+ 32717 - 11904: 0xD6F8,
+ 32718 - 11904: 0xB2DE,
+ 32719 - 11904: 0xD6FC,
+ 32720 - 11904: 0xD6F9,
+ 32721 - 11904: 0xD6FA,
+ 32722 - 11904: 0xB2DF,
+ 32724 - 11904: 0xB5BE,
+ 32725 - 11904: 0xB5BF,
+ 32727 - 11904: 0xDB44,
+ 32731 - 11904: 0xDF6F,
+ 32732 - 11904: 0xDF70,
+ 32733 - 11904: 0x954E,
+ 32734 - 11904: 0xE37E,
+ 32735 - 11904: 0xBB43,
+ 32736 - 11904: 0xBB41,
+ 32737 - 11904: 0xBB42,
+ 32738 - 11904: 0xE37B,
+ 32739 - 11904: 0xE37C,
+ 32741 - 11904: 0xE37D,
+ 32742 - 11904: 0xE6F9,
+ 32743 - 11904: 0x98B3,
+ 32744 - 11904: 0xE6FA,
+ 32745 - 11904: 0xBDA1,
+ 32746 - 11904: 0xE6F7,
+ 32747 - 11904: 0xE6F6,
+ 32748 - 11904: 0xE6F8,
+ 32749 - 11904: 0xE6F5,
+ 32750 - 11904: 0xBFAD,
+ 32751 - 11904: 0xEAE4,
+ 32752 - 11904: 0xBFAB,
+ 32753 - 11904: 0xBFAC,
+ 32754 - 11904: 0xEDE6,
+ 32755 - 11904: 0xC16B,
+ 32756 - 11904: 0xEDE5,
+ 32757 - 11904: 0xEFA8,
+ 32759 - 11904: 0xF07A,
+ 32760 - 11904: 0xF07B,
+ 32761 - 11904: 0xC2BC,
+ 32762 - 11904: 0x8ECB,
+ 32763 - 11904: 0xC2BD,
+ 32764 - 11904: 0xC16C,
+ 32765 - 11904: 0xF2BE,
+ 32766 - 11904: 0xF2BF,
+ 32767 - 11904: 0xF4B1,
+ 32768 - 11904: 0xC4A3,
+ 32769 - 11904: 0xA6D1,
+ 32770 - 11904: 0x8BDF,
+ 32771 - 11904: 0xA6D2,
+ 32772 - 11904: 0xACFE,
+ 32773 - 11904: 0xAACC,
+ 32774 - 11904: 0xAFCF,
+ 32775 - 11904: 0xD051,
+ 32776 - 11904: 0x8ECE,
+ 32779 - 11904: 0xB5C0,
+ 32780 - 11904: 0xA6D3,
+ 32781 - 11904: 0xAD41,
+ 32782 - 11904: 0xD052,
+ 32783 - 11904: 0xD053,
+ 32784 - 11904: 0xAD40,
+ 32785 - 11904: 0xAD42,
+ 32786 - 11904: 0xA6D4,
+ 32788 - 11904: 0xD054,
+ 32789 - 11904: 0xAFD1,
+ 32790 - 11904: 0xD366,
+ 32791 - 11904: 0xAFD3,
+ 32792 - 11904: 0xAFD0,
+ 32793 - 11904: 0xAFD2,
+ 32795 - 11904: 0xD741,
+ 32796 - 11904: 0xB2E0,
+ 32797 - 11904: 0x8ECF,
+ 32798 - 11904: 0xD740,
+ 32799 - 11904: 0xD6FE,
+ 32800 - 11904: 0x9968,
+ 32801 - 11904: 0xDF71,
+ 32804 - 11904: 0xE3A1,
+ 32805 - 11904: 0x9969,
+ 32806 - 11904: 0xBDA2,
+ 32808 - 11904: 0xBFAE,
+ 32809 - 11904: 0xEAE6,
+ 32810 - 11904: 0xEAE5,
+ 32812 - 11904: 0xEDE7,
+ 32814 - 11904: 0x996B,
+ 32815 - 11904: 0x8ED1,
+ 32816 - 11904: 0xF5EF,
+ 32817 - 11904: 0x996C,
+ 32819 - 11904: 0xA6D5,
+ 32820 - 11904: 0xCB73,
+ 32821 - 11904: 0xCDAA,
+ 32822 - 11904: 0xAD43,
+ 32823 - 11904: 0xD055,
+ 32825 - 11904: 0xD368,
+ 32827 - 11904: 0x8ED4,
+ 32828 - 11904: 0x8ED5,
+ 32829 - 11904: 0xAFD4,
+ 32830 - 11904: 0xD367,
+ 32831 - 11904: 0xAFD5,
+ 32835 - 11904: 0xD743,
+ 32838 - 11904: 0xB2E2,
+ 32839 - 11904: 0xD742,
+ 32840 - 11904: 0xD744,
+ 32842 - 11904: 0xB2E1,
+ 32847 - 11904: 0xDB46,
+ 32848 - 11904: 0xDB47,
+ 32849 - 11904: 0xDB45,
+ 32850 - 11904: 0xB5C1,
+ 32852 - 11904: 0x996D,
+ 32854 - 11904: 0xB874,
+ 32856 - 11904: 0xB875,
+ 32858 - 11904: 0xBB45,
+ 32859 - 11904: 0xA0BE,
+ 32860 - 11904: 0xE3A3,
+ 32861 - 11904: 0xE3A2,
+ 32862 - 11904: 0xBB44,
+ 32865 - 11904: 0x8ED6,
+ 32866 - 11904: 0xA0BC,
+ 32867 - 11904: 0xA0B5,
+ 32868 - 11904: 0xE6FB,
+ 32870 - 11904: 0xA0B4,
+ 32871 - 11904: 0xE6FC,
+ 32876 - 11904: 0xEAE7,
+ 32879 - 11904: 0xC170,
+ 32880 - 11904: 0xC16F,
+ 32881 - 11904: 0xC16D,
+ 32882 - 11904: 0xC16E,
+ 32883 - 11904: 0xC171,
+ 32885 - 11904: 0xF07C,
+ 32886 - 11904: 0xC2BF,
+ 32887 - 11904: 0xC2BE,
+ 32888 - 11904: 0xF2C0,
+ 32889 - 11904: 0xF4B2,
+ 32893 - 11904: 0xC5A5,
+ 32894 - 11904: 0xC5A4,
+ 32895 - 11904: 0xA6D6,
+ 32896 - 11904: 0x8BE0,
+ 32898 - 11904: 0xD1FB,
+ 32900 - 11904: 0xB877,
+ 32901 - 11904: 0xB5C2,
+ 32902 - 11904: 0xB876,
+ 32903 - 11904: 0xBB46,
+ 32905 - 11904: 0xA6D7,
+ 32906 - 11904: 0xC9A9,
+ 32907 - 11904: 0xA6D8,
+ 32908 - 11904: 0xA6D9,
+ 32911 - 11904: 0xCDAB,
+ 32912 - 11904: 0xCB76,
+ 32914 - 11904: 0xCB77,
+ 32915 - 11904: 0xA877,
+ 32917 - 11904: 0xCB74,
+ 32918 - 11904: 0xA876,
+ 32920 - 11904: 0xA879,
+ 32921 - 11904: 0xCB75,
+ 32922 - 11904: 0xA87B,
+ 32923 - 11904: 0xA87A,
+ 32924 - 11904: 0xCB78,
+ 32925 - 11904: 0xA878,
+ 32927 - 11904: 0x89B5,
+ 32929 - 11904: 0xAAD1,
+ 32930 - 11904: 0xAACF,
+ 32931 - 11904: 0xCDAD,
+ 32933 - 11904: 0xAACE,
+ 32935 - 11904: 0x8EDD,
+ 32937 - 11904: 0xAAD3,
+ 32938 - 11904: 0xAAD5,
+ 32939 - 11904: 0xAAD2,
+ 32941 - 11904: 0xCDB0,
+ 32942 - 11904: 0xCDAC,
+ 32943 - 11904: 0xAAD6,
+ 32945 - 11904: 0xAAD0,
+ 32946 - 11904: 0xA87C,
+ 32948 - 11904: 0xAAD4,
+ 32949 - 11904: 0xCDAF,
+ 32950 - 11904: 0x9E5D,
+ 32951 - 11904: 0x9971,
+ 32952 - 11904: 0xCDAE,
+ 32954 - 11904: 0xAACD,
+ 32956 - 11904: 0x89AE,
+ 32957 - 11904: 0x9DE8,
+ 32962 - 11904: 0xD05B,
+ 32963 - 11904: 0xAD47,
+ 32964 - 11904: 0xAD48,
+ 32965 - 11904: 0xD05D,
+ 32966 - 11904: 0x9565,
+ 32967 - 11904: 0xD057,
+ 32968 - 11904: 0xD05A,
+ 32969 - 11904: 0xD063,
+ 32970 - 11904: 0xD061,
+ 32972 - 11904: 0xAD49,
+ 32973 - 11904: 0xD067,
+ 32974 - 11904: 0xAD4C,
+ 32975 - 11904: 0xD064,
+ 32976 - 11904: 0xD05C,
+ 32977 - 11904: 0xD059,
+ 32980 - 11904: 0xDB49,
+ 32981 - 11904: 0xD062,
+ 32982 - 11904: 0xAD44,
+ 32983 - 11904: 0xD065,
+ 32984 - 11904: 0xD056,
+ 32985 - 11904: 0xD05F,
+ 32986 - 11904: 0xAD46,
+ 32987 - 11904: 0xAD4B,
+ 32988 - 11904: 0xD060,
+ 32989 - 11904: 0xAD4F,
+ 32990 - 11904: 0xAD4D,
+ 32992 - 11904: 0xD058,
+ 32993 - 11904: 0xAD4A,
+ 32995 - 11904: 0xD05E,
+ 32996 - 11904: 0xAD4E,
+ 32997 - 11904: 0xAD45,
+ 32998 - 11904: 0xD066,
+ 33001 - 11904: 0x9972,
+ 33004 - 11904: 0x8B5C,
+ 33005 - 11904: 0xAFDA,
+ 33007 - 11904: 0xAFE3,
+ 33008 - 11904: 0xAFD8,
+ 33009 - 11904: 0xAFD6,
+ 33010 - 11904: 0xD36A,
+ 33011 - 11904: 0xAFDE,
+ 33012 - 11904: 0xAFDB,
+ 33013 - 11904: 0xD36C,
+ 33014 - 11904: 0x89B1,
+ 33016 - 11904: 0xAFDD,
+ 33017 - 11904: 0xD36B,
+ 33018 - 11904: 0xD369,
+ 33019 - 11904: 0xD36E,
+ 33020 - 11904: 0xAFE2,
+ 33021 - 11904: 0xAFE0,
+ 33022 - 11904: 0xDB48,
+ 33024 - 11904: 0xD36F,
+ 33025 - 11904: 0xD36D,
+ 33026 - 11904: 0xAFD7,
+ 33027 - 11904: 0xA0C0,
+ 33029 - 11904: 0xAFD9,
+ 33030 - 11904: 0xAFDC,
+ 33031 - 11904: 0x8EDF,
+ 33032 - 11904: 0xAFDF,
+ 33033 - 11904: 0x9566,
+ 33034 - 11904: 0xAFE1,
+ 33036 - 11904: 0x9974,
+ 33038 - 11904: 0x9976,
+ 33042 - 11904: 0x9977,
+ 33044 - 11904: 0x9979,
+ 33045 - 11904: 0xD74E,
+ 33046 - 11904: 0xB2E4,
+ 33047 - 11904: 0x9DDA,
+ 33048 - 11904: 0xD745,
+ 33049 - 11904: 0xD747,
+ 33050 - 11904: 0x8EE0,
+ 33051 - 11904: 0xD748,
+ 33053 - 11904: 0xD750,
+ 33054 - 11904: 0xD74C,
+ 33055 - 11904: 0xD74A,
+ 33057 - 11904: 0xD74D,
+ 33058 - 11904: 0xD751,
+ 33059 - 11904: 0xB2E5,
+ 33060 - 11904: 0xB2E9,
+ 33061 - 11904: 0xD746,
+ 33063 - 11904: 0xD74F,
+ 33065 - 11904: 0xB2E7,
+ 33066 - 11904: 0x935C,
+ 33067 - 11904: 0xB2E6,
+ 33068 - 11904: 0xD74B,
+ 33069 - 11904: 0xD749,
+ 33071 - 11904: 0xB2E3,
+ 33072 - 11904: 0xB2E8,
+ 33074 - 11904: 0x9DE6,
+ 33076 - 11904: 0x8B5F,
+ 33079 - 11904: 0x9563,
+ 33081 - 11904: 0xB5C8,
+ 33082 - 11904: 0xDB51,
+ 33085 - 11904: 0xDB4F,
+ 33086 - 11904: 0xB5CA,
+ 33090 - 11904: 0x9567,
+ 33091 - 11904: 0xDB4A,
+ 33092 - 11904: 0xDFA1,
+ 33094 - 11904: 0xB5C9,
+ 33095 - 11904: 0xDB4E,
+ 33096 - 11904: 0x9DE3,
+ 33098 - 11904: 0xDB4B,
+ 33099 - 11904: 0xB5C5,
+ 33100 - 11904: 0xB5CB,
+ 33101 - 11904: 0xDB50,
+ 33102 - 11904: 0xB5C7,
+ 33103 - 11904: 0xDB4D,
+ 33104 - 11904: 0xBB47,
+ 33105 - 11904: 0xB5C6,
+ 33106 - 11904: 0xDB4C,
+ 33107 - 11904: 0xB5CC,
+ 33108 - 11904: 0xB5C4,
+ 33109 - 11904: 0xB5C3,
+ 33110 - 11904: 0x997C,
+ 33113 - 11904: 0x997D,
+ 33114 - 11904: 0x997E,
+ 33115 - 11904: 0xDF77,
+ 33116 - 11904: 0xDF75,
+ 33118 - 11904: 0xDF7B,
+ 33120 - 11904: 0xDF73,
+ 33121 - 11904: 0xDFA2,
+ 33122 - 11904: 0xDF78,
+ 33124 - 11904: 0xDF72,
+ 33125 - 11904: 0xB87B,
+ 33126 - 11904: 0xB8A3,
+ 33127 - 11904: 0xDF7D,
+ 33129 - 11904: 0xDF76,
+ 33131 - 11904: 0xB87E,
+ 33132 - 11904: 0x8CFB,
+ 33133 - 11904: 0x8B5B,
+ 33134 - 11904: 0xB87C,
+ 33135 - 11904: 0xDF7E,
+ 33136 - 11904: 0xB879,
+ 33137 - 11904: 0xB878,
+ 33138 - 11904: 0xDF79,
+ 33139 - 11904: 0xB87D,
+ 33140 - 11904: 0xB5CD,
+ 33142 - 11904: 0xDF7C,
+ 33143 - 11904: 0xDF74,
+ 33144 - 11904: 0xB87A,
+ 33145 - 11904: 0xB8A1,
+ 33146 - 11904: 0xB8A2,
+ 33148 - 11904: 0x99A3,
+ 33151 - 11904: 0xBB4C,
+ 33152 - 11904: 0xBB48,
+ 33154 - 11904: 0xBB4D,
+ 33155 - 11904: 0xE3A6,
+ 33156 - 11904: 0x99A4,
+ 33158 - 11904: 0xE3A5,
+ 33159 - 11904: 0xE3A7,
+ 33160 - 11904: 0xBB4A,
+ 33161 - 11904: 0xE3A4,
+ 33162 - 11904: 0xBB4B,
+ 33163 - 11904: 0xE3AA,
+ 33164 - 11904: 0xE3A9,
+ 33165 - 11904: 0xE3A8,
+ 33167 - 11904: 0xBB49,
+ 33171 - 11904: 0x99A6,
+ 33173 - 11904: 0xE741,
+ 33175 - 11904: 0xE744,
+ 33176 - 11904: 0xBDA8,
+ 33177 - 11904: 0xE743,
+ 33178 - 11904: 0xBDA7,
+ 33179 - 11904: 0xBDA3,
+ 33180 - 11904: 0xBDA4,
+ 33181 - 11904: 0xBDA5,
+ 33182 - 11904: 0xE740,
+ 33183 - 11904: 0xE6FE,
+ 33184 - 11904: 0xBDA6,
+ 33186 - 11904: 0xE742,
+ 33187 - 11904: 0xE6FD,
+ 33189 - 11904: 0x99A8,
+ 33190 - 11904: 0xEAE9,
+ 33191 - 11904: 0xEAF3,
+ 33192 - 11904: 0xBFB1,
+ 33193 - 11904: 0xBFB0,
+ 33194 - 11904: 0x8ABE,
+ 33195 - 11904: 0xEAED,
+ 33196 - 11904: 0xEAEF,
+ 33198 - 11904: 0xEAEA,
+ 33200 - 11904: 0xEAEE,
+ 33201 - 11904: 0xEAE8,
+ 33202 - 11904: 0xEAF1,
+ 33203 - 11904: 0xBFAF,
+ 33204 - 11904: 0xEAF0,
+ 33205 - 11904: 0xEAEC,
+ 33206 - 11904: 0x9E61,
+ 33207 - 11904: 0xEAF2,
+ 33209 - 11904: 0xEAEB,
+ 33210 - 11904: 0xC174,
+ 33211 - 11904: 0xEDE8,
+ 33212 - 11904: 0xEDEE,
+ 33213 - 11904: 0xC178,
+ 33214 - 11904: 0xC17A,
+ 33215 - 11904: 0xC177,
+ 33216 - 11904: 0xC176,
+ 33217 - 11904: 0x99AA,
+ 33218 - 11904: 0xC175,
+ 33219 - 11904: 0xC173,
+ 33220 - 11904: 0xEDE9,
+ 33221 - 11904: 0xEDEC,
+ 33222 - 11904: 0xC172,
+ 33223 - 11904: 0xEDED,
+ 33224 - 11904: 0xA0C8,
+ 33225 - 11904: 0xC179,
+ 33226 - 11904: 0xEDEB,
+ 33228 - 11904: 0xEDEA,
+ 33229 - 11904: 0xC2C0,
+ 33231 - 11904: 0xC2C1,
+ 33232 - 11904: 0xF0A1,
+ 33233 - 11904: 0xF07D,
+ 33234 - 11904: 0xF07E,
+ 33237 - 11904: 0xF2C2,
+ 33239 - 11904: 0xF2C1,
+ 33240 - 11904: 0xC3BE,
+ 33241 - 11904: 0xF4B4,
+ 33242 - 11904: 0xC4A4,
+ 33243 - 11904: 0xF4B3,
+ 33245 - 11904: 0xF5F0,
+ 33246 - 11904: 0xF745,
+ 33247 - 11904: 0xC5A6,
+ 33248 - 11904: 0xF943,
+ 33249 - 11904: 0xF944,
+ 33250 - 11904: 0xC5D8,
+ 33251 - 11904: 0xA6DA,
+ 33252 - 11904: 0x99AB,
+ 33253 - 11904: 0xAAD7,
+ 33254 - 11904: 0xDB52,
+ 33255 - 11904: 0xBB4E,
+ 33256 - 11904: 0xC17B,
+ 33257 - 11904: 0xEDEF,
+ 33258 - 11904: 0xA6DB,
+ 33260 - 11904: 0xAFE5,
+ 33261 - 11904: 0xAFE4,
+ 33262 - 11904: 0xDB53,
+ 33263 - 11904: 0xFEC4,
+ 33266 - 11904: 0xEAF4,
+ 33267 - 11904: 0xA6DC,
+ 33268 - 11904: 0xAD50,
+ 33270 - 11904: 0x98C2,
+ 33271 - 11904: 0xDB54,
+ 33272 - 11904: 0xDB55,
+ 33273 - 11904: 0xDB56,
+ 33274 - 11904: 0xBB4F,
+ 33275 - 11904: 0xBFB2,
+ 33276 - 11904: 0xA6DD,
+ 33278 - 11904: 0xAAD8,
+ 33279 - 11904: 0xD068,
+ 33280 - 11904: 0xAFE6,
+ 33281 - 11904: 0xD370,
+ 33282 - 11904: 0xB2EA,
+ 33284 - 11904: 0xDB57,
+ 33285 - 11904: 0xB8A4,
+ 33287 - 11904: 0xBB50,
+ 33288 - 11904: 0xBFB3,
+ 33289 - 11904: 0xC17C,
+ 33290 - 11904: 0xC2C2,
+ 33291 - 11904: 0xF4B5,
+ 33292 - 11904: 0xA6DE,
+ 33293 - 11904: 0xAAD9,
+ 33296 - 11904: 0xAFE7,
+ 33297 - 11904: 0xD752,
+ 33298 - 11904: 0xB5CE,
+ 33300 - 11904: 0xBB51,
+ 33301 - 11904: 0xE3AB,
+ 33302 - 11904: 0xE745,
+ 33304 - 11904: 0x8EE8,
+ 33306 - 11904: 0xA0BA,
+ 33307 - 11904: 0xA6DF,
+ 33308 - 11904: 0xB5CF,
+ 33309 - 11904: 0xDFA3,
+ 33310 - 11904: 0xBB52,
+ 33311 - 11904: 0xA6E0,
+ 33312 - 11904: 0xCDB1,
+ 33313 - 11904: 0xD069,
+ 33314 - 11904: 0xAD51,
+ 33317 - 11904: 0xD372,
+ 33318 - 11904: 0xFD77,
+ 33320 - 11904: 0xAFEA,
+ 33321 - 11904: 0x8EEE,
+ 33322 - 11904: 0xAFE8,
+ 33323 - 11904: 0xAFE9,
+ 33324 - 11904: 0xAFEB,
+ 33325 - 11904: 0x9EBF,
+ 33327 - 11904: 0xD371,
+ 33330 - 11904: 0xD757,
+ 33331 - 11904: 0xD754,
+ 33332 - 11904: 0xD756,
+ 33333 - 11904: 0xB2EB,
+ 33334 - 11904: 0xB2ED,
+ 33335 - 11904: 0xB2EC,
+ 33336 - 11904: 0xD753,
+ 33337 - 11904: 0xB2EE,
+ 33338 - 11904: 0xD755,
+ 33340 - 11904: 0xDB58,
+ 33341 - 11904: 0xDB59,
+ 33342 - 11904: 0x89C2,
+ 33343 - 11904: 0xDB5A,
+ 33344 - 11904: 0xDFA6,
+ 33346 - 11904: 0xDFA7,
+ 33348 - 11904: 0xDFA5,
+ 33349 - 11904: 0xDFA8,
+ 33351 - 11904: 0xB8A5,
+ 33353 - 11904: 0xDFA4,
+ 33355 - 11904: 0xBB53,
+ 33358 - 11904: 0xE74A,
+ 33359 - 11904: 0xE746,
+ 33360 - 11904: 0xE749,
+ 33361 - 11904: 0xE74B,
+ 33362 - 11904: 0xE748,
+ 33363 - 11904: 0xE747,
+ 33364 - 11904: 0x99AC,
+ 33365 - 11904: 0xEAF5,
+ 33366 - 11904: 0xEAF6,
+ 33367 - 11904: 0xEAF7,
+ 33368 - 11904: 0xBFB4,
+ 33369 - 11904: 0xBFB5,
+ 33370 - 11904: 0xEDF1,
+ 33371 - 11904: 0xEDF0,
+ 33372 - 11904: 0xEDF2,
+ 33374 - 11904: 0xF0A3,
+ 33375 - 11904: 0xF0A2,
+ 33377 - 11904: 0xF2C4,
+ 33378 - 11904: 0x956B,
+ 33379 - 11904: 0xF2C5,
+ 33380 - 11904: 0xF2C3,
+ 33381 - 11904: 0x956C,
+ 33382 - 11904: 0xC4A5,
+ 33384 - 11904: 0xF4B6,
+ 33385 - 11904: 0xF4B7,
+ 33387 - 11904: 0xF746,
+ 33388 - 11904: 0xF7EF,
+ 33389 - 11904: 0xF8BB,
+ 33390 - 11904: 0xA6E1,
+ 33391 - 11904: 0xA87D,
+ 33393 - 11904: 0xC17D,
+ 33394 - 11904: 0xA6E2,
+ 33396 - 11904: 0xD758,
+ 33397 - 11904: 0xDB5B,
+ 33398 - 11904: 0x99AF,
+ 33399 - 11904: 0xC641,
+ 33400 - 11904: 0xCA4A,
+ 33401 - 11904: 0x994A,
+ 33402 - 11904: 0x8976,
+ 33403 - 11904: 0x8F48,
+ 33404 - 11904: 0xCA4B,
+ 33405 - 11904: 0xCA4D,
+ 33406 - 11904: 0xA6E3,
+ 33407 - 11904: 0xCA4E,
+ 33408 - 11904: 0xCA4C,
+ 33411 - 11904: 0xCBA2,
+ 33412 - 11904: 0xCBA3,
+ 33413 - 11904: 0xCB7B,
+ 33415 - 11904: 0xFBEE,
+ 33418 - 11904: 0xCBA1,
+ 33419 - 11904: 0xA8A1,
+ 33421 - 11904: 0xA8A2,
+ 33422 - 11904: 0xCB7C,
+ 33423 - 11904: 0xCB7A,
+ 33424 - 11904: 0xCB79,
+ 33425 - 11904: 0xCB7D,
+ 33426 - 11904: 0xA87E,
+ 33427 - 11904: 0xCB7E,
+ 33428 - 11904: 0xD06A,
+ 33432 - 11904: 0xCDB6,
+ 33433 - 11904: 0xAADC,
+ 33434 - 11904: 0xCDB5,
+ 33435 - 11904: 0xCDB7,
+ 33437 - 11904: 0xAADB,
+ 33438 - 11904: 0xCDBC,
+ 33439 - 11904: 0xAADF,
+ 33440 - 11904: 0xCDB2,
+ 33441 - 11904: 0xCDC0,
+ 33442 - 11904: 0xCDC6,
+ 33443 - 11904: 0xAAE6,
+ 33444 - 11904: 0xCDC3,
+ 33445 - 11904: 0xAAE3,
+ 33446 - 11904: 0x99AE,
+ 33447 - 11904: 0xCDB9,
+ 33448 - 11904: 0xCDBF,
+ 33449 - 11904: 0xCDC1,
+ 33450 - 11904: 0x8EFB,
+ 33451 - 11904: 0xCDB4,
+ 33452 - 11904: 0xAAE2,
+ 33453 - 11904: 0xAADD,
+ 33454 - 11904: 0xCDBA,
+ 33455 - 11904: 0xAAE4,
+ 33456 - 11904: 0xAAE7,
+ 33457 - 11904: 0xAAE1,
+ 33459 - 11904: 0xAADA,
+ 33460 - 11904: 0xCDBE,
+ 33461 - 11904: 0xCDB8,
+ 33462 - 11904: 0xCDC5,
+ 33463 - 11904: 0xAAE9,
+ 33464 - 11904: 0xAAE5,
+ 33465 - 11904: 0xAAE0,
+ 33466 - 11904: 0xCDBD,
+ 33467 - 11904: 0xAFEC,
+ 33468 - 11904: 0xCDBB,
+ 33469 - 11904: 0xAADE,
+ 33470 - 11904: 0xAAE8,
+ 33471 - 11904: 0x8CD0,
+ 33472 - 11904: 0xCDB3,
+ 33474 - 11904: 0xCDC2,
+ 33475 - 11904: 0xCDC4,
+ 33476 - 11904: 0x8B52,
+ 33482 - 11904: 0x99B0,
+ 33487 - 11904: 0x8977,
+ 33488 - 11904: 0x8F41,
+ 33489 - 11904: 0xAD62,
+ 33490 - 11904: 0xAD5C,
+ 33491 - 11904: 0xAD64,
+ 33492 - 11904: 0xAD61,
+ 33493 - 11904: 0xD071,
+ 33494 - 11904: 0xD074,
+ 33495 - 11904: 0xAD5D,
+ 33496 - 11904: 0x99B1,
+ 33497 - 11904: 0xD06B,
+ 33499 - 11904: 0xAD56,
+ 33500 - 11904: 0xAD60,
+ 33502 - 11904: 0xAD63,
+ 33503 - 11904: 0xAD65,
+ 33504 - 11904: 0xD0A2,
+ 33505 - 11904: 0xD077,
+ 33506 - 11904: 0x8F49,
+ 33507 - 11904: 0xAD55,
+ 33508 - 11904: 0xD0A1,
+ 33509 - 11904: 0xAD59,
+ 33510 - 11904: 0xAD57,
+ 33511 - 11904: 0xAD52,
+ 33512 - 11904: 0xD06F,
+ 33514 - 11904: 0xD07E,
+ 33515 - 11904: 0xD073,
+ 33516 - 11904: 0xD076,
+ 33517 - 11904: 0xD0A5,
+ 33518 - 11904: 0xFA4D,
+ 33519 - 11904: 0xAD66,
+ 33520 - 11904: 0xD07D,
+ 33521 - 11904: 0xAD5E,
+ 33522 - 11904: 0xD078,
+ 33523 - 11904: 0xD0A4,
+ 33524 - 11904: 0xD075,
+ 33525 - 11904: 0xD079,
+ 33526 - 11904: 0xD07C,
+ 33527 - 11904: 0x9DE4,
+ 33528 - 11904: 0x8CB5,
+ 33529 - 11904: 0xD06D,
+ 33530 - 11904: 0xD0A3,
+ 33531 - 11904: 0xD07B,
+ 33532 - 11904: 0xFBE9,
+ 33533 - 11904: 0x9B54,
+ 33534 - 11904: 0xD06C,
+ 33535 - 11904: 0x99B2,
+ 33536 - 11904: 0xD070,
+ 33537 - 11904: 0xAD5F,
+ 33538 - 11904: 0xAD5A,
+ 33539 - 11904: 0xAD53,
+ 33540 - 11904: 0xAD58,
+ 33541 - 11904: 0xAD54,
+ 33542 - 11904: 0xAD67,
+ 33543 - 11904: 0xD06E,
+ 33544 - 11904: 0xD3A5,
+ 33545 - 11904: 0xAD5B,
+ 33547 - 11904: 0x9E68,
+ 33548 - 11904: 0xD07A,
+ 33549 - 11904: 0xCE41,
+ 33558 - 11904: 0xD3A8,
+ 33559 - 11904: 0xAFFA,
+ 33560 - 11904: 0x8F4A,
+ 33561 - 11904: 0xD376,
+ 33562 - 11904: 0x8F42,
+ 33563 - 11904: 0xD3A3,
+ 33564 - 11904: 0xD37D,
+ 33565 - 11904: 0x8F51,
+ 33566 - 11904: 0xD3B2,
+ 33568 - 11904: 0xD3AA,
+ 33570 - 11904: 0xD37E,
+ 33572 - 11904: 0xD3A9,
+ 33573 - 11904: 0xD378,
+ 33574 - 11904: 0xD37C,
+ 33575 - 11904: 0xD3B5,
+ 33576 - 11904: 0xAFFD,
+ 33577 - 11904: 0xD3AD,
+ 33578 - 11904: 0xD3A4,
+ 33579 - 11904: 0xAFED,
+ 33580 - 11904: 0xD3B3,
+ 33581 - 11904: 0xD374,
+ 33583 - 11904: 0xD3AC,
+ 33585 - 11904: 0xAFFC,
+ 33586 - 11904: 0xAFF7,
+ 33587 - 11904: 0xD373,
+ 33588 - 11904: 0xAFF5,
+ 33589 - 11904: 0xAFF4,
+ 33590 - 11904: 0xAFF9,
+ 33591 - 11904: 0xD3AB,
+ 33592 - 11904: 0xAFF1,
+ 33593 - 11904: 0xAFF8,
+ 33594 - 11904: 0xD072,
+ 33595 - 11904: 0xDB5C,
+ 33596 - 11904: 0xD3A6,
+ 33597 - 11904: 0x9846,
+ 33599 - 11904: 0xD37A,
+ 33600 - 11904: 0xAFFB,
+ 33601 - 11904: 0xD37B,
+ 33602 - 11904: 0xD3A1,
+ 33603 - 11904: 0xAFFE,
+ 33604 - 11904: 0xD375,
+ 33605 - 11904: 0xD3AF,
+ 33607 - 11904: 0xD3AE,
+ 33608 - 11904: 0xD3B6,
+ 33609 - 11904: 0xAFF3,
+ 33610 - 11904: 0xAFF0,
+ 33611 - 11904: 0xD3B4,
+ 33612 - 11904: 0xD3B0,
+ 33613 - 11904: 0xD3A7,
+ 33614 - 11904: 0xD3A2,
+ 33615 - 11904: 0xAFF6,
+ 33616 - 11904: 0xAFF2,
+ 33617 - 11904: 0xD377,
+ 33618 - 11904: 0xAFEE,
+ 33619 - 11904: 0xD3B1,
+ 33620 - 11904: 0xAFEF,
+ 33622 - 11904: 0xD379,
+ 33623 - 11904: 0x99B4,
+ 33634 - 11904: 0x8EF5,
+ 33635 - 11904: 0xFD55,
+ 33638 - 11904: 0x9CCD,
+ 33647 - 11904: 0x8978,
+ 33651 - 11904: 0xD75E,
+ 33652 - 11904: 0xD760,
+ 33653 - 11904: 0xD765,
+ 33654 - 11904: 0xD779,
+ 33655 - 11904: 0xB2FC,
+ 33656 - 11904: 0xB2F2,
+ 33658 - 11904: 0xD75D,
+ 33659 - 11904: 0xB2FD,
+ 33660 - 11904: 0xB2FE,
+ 33661 - 11904: 0xD768,
+ 33662 - 11904: 0xD76F,
+ 33663 - 11904: 0xD775,
+ 33665 - 11904: 0xD762,
+ 33667 - 11904: 0xD769,
+ 33669 - 11904: 0x8F53,
+ 33670 - 11904: 0xB340,
+ 33671 - 11904: 0xD777,
+ 33672 - 11904: 0xD772,
+ 33673 - 11904: 0xB2FA,
+ 33674 - 11904: 0xB2F8,
+ 33675 - 11904: 0xD76E,
+ 33676 - 11904: 0xD76A,
+ 33677 - 11904: 0xD75C,
+ 33678 - 11904: 0xB2EF,
+ 33679 - 11904: 0xD761,
+ 33680 - 11904: 0xD759,
+ 33681 - 11904: 0x8F6F,
+ 33682 - 11904: 0xB2F7,
+ 33683 - 11904: 0xB2F9,
+ 33684 - 11904: 0xD766,
+ 33685 - 11904: 0xD763,
+ 33686 - 11904: 0xB2F4,
+ 33687 - 11904: 0xD773,
+ 33688 - 11904: 0xB2F1,
+ 33689 - 11904: 0xD764,
+ 33690 - 11904: 0xD77A,
+ 33691 - 11904: 0xD76C,
+ 33692 - 11904: 0x8E63,
+ 33693 - 11904: 0xD76B,
+ 33694 - 11904: 0xB2F0,
+ 33696 - 11904: 0xB2FB,
+ 33698 - 11904: 0xB2F3,
+ 33699 - 11904: 0xD75A,
+ 33700 - 11904: 0xD75F,
+ 33701 - 11904: 0xD770,
+ 33702 - 11904: 0xD776,
+ 33703 - 11904: 0xB341,
+ 33704 - 11904: 0xD75B,
+ 33705 - 11904: 0xD767,
+ 33706 - 11904: 0xD76D,
+ 33707 - 11904: 0xB2F6,
+ 33708 - 11904: 0x8F56,
+ 33710 - 11904: 0xD778,
+ 33711 - 11904: 0xD771,
+ 33712 - 11904: 0xD774,
+ 33721 - 11904: 0xFE76,
+ 33725 - 11904: 0xB2F5,
+ 33726 - 11904: 0x9FC6,
+ 33727 - 11904: 0xDB6C,
+ 33728 - 11904: 0xDB60,
+ 33729 - 11904: 0xB5D7,
+ 33730 - 11904: 0xDB7D,
+ 33731 - 11904: 0xDBA7,
+ 33732 - 11904: 0xDBAA,
+ 33733 - 11904: 0xB5D5,
+ 33734 - 11904: 0xDB68,
+ 33735 - 11904: 0xDBA3,
+ 33736 - 11904: 0xDB69,
+ 33737 - 11904: 0xDB77,
+ 33738 - 11904: 0xB5E2,
+ 33739 - 11904: 0xDB73,
+ 33740 - 11904: 0xB5DF,
+ 33741 - 11904: 0xFAAC,
+ 33742 - 11904: 0xDB74,
+ 33743 - 11904: 0xDB5D,
+ 33745 - 11904: 0xDBA4,
+ 33747 - 11904: 0x8F58,
+ 33748 - 11904: 0xB5E8,
+ 33749 - 11904: 0xDBA1,
+ 33750 - 11904: 0xDB75,
+ 33751 - 11904: 0xDBAC,
+ 33752 - 11904: 0xDB70,
+ 33753 - 11904: 0xDFC8,
+ 33755 - 11904: 0xDBAF,
+ 33756 - 11904: 0xB5E6,
+ 33757 - 11904: 0xDB6E,
+ 33758 - 11904: 0xDB7A,
+ 33759 - 11904: 0xB5E9,
+ 33760 - 11904: 0xB5D4,
+ 33761 - 11904: 0xDB72,
+ 33762 - 11904: 0xDBAD,
+ 33763 - 11904: 0xDB6B,
+ 33764 - 11904: 0xDB64,
+ 33765 - 11904: 0xDB6F,
+ 33767 - 11904: 0xDB63,
+ 33768 - 11904: 0xDB61,
+ 33769 - 11904: 0xB5D0,
+ 33770 - 11904: 0xDBA5,
+ 33771 - 11904: 0xDB6A,
+ 33772 - 11904: 0xDBA8,
+ 33773 - 11904: 0x9848,
+ 33774 - 11904: 0xDBA9,
+ 33775 - 11904: 0xB5D8,
+ 33776 - 11904: 0xB5DD,
+ 33777 - 11904: 0xB5D9,
+ 33778 - 11904: 0xB5E1,
+ 33779 - 11904: 0xDB7E,
+ 33780 - 11904: 0xB5DA,
+ 33781 - 11904: 0xDB76,
+ 33782 - 11904: 0xDB66,
+ 33784 - 11904: 0xB5D2,
+ 33785 - 11904: 0xDB5E,
+ 33786 - 11904: 0xDBA2,
+ 33787 - 11904: 0xDBAB,
+ 33788 - 11904: 0xDB65,
+ 33789 - 11904: 0xB5E0,
+ 33790 - 11904: 0xDBB0,
+ 33791 - 11904: 0xDB71,
+ 33793 - 11904: 0xDB6D,
+ 33795 - 11904: 0xB5D1,
+ 33796 - 11904: 0xB5E5,
+ 33797 - 11904: 0x99B7,
+ 33798 - 11904: 0xDB7C,
+ 33799 - 11904: 0xB5E7,
+ 33801 - 11904: 0xDB78,
+ 33802 - 11904: 0xB5DC,
+ 33803 - 11904: 0xB5D6,
+ 33804 - 11904: 0xB5DE,
+ 33805 - 11904: 0xB5D3,
+ 33806 - 11904: 0xB5E4,
+ 33807 - 11904: 0xDB79,
+ 33808 - 11904: 0xDB67,
+ 33809 - 11904: 0xDB7B,
+ 33810 - 11904: 0xDB62,
+ 33811 - 11904: 0xDBA6,
+ 33812 - 11904: 0x9665,
+ 33814 - 11904: 0xFA6C,
+ 33816 - 11904: 0x9DE7,
+ 33819 - 11904: 0xDBAE,
+ 33820 - 11904: 0x9E62,
+ 33824 - 11904: 0x96CC,
+ 33825 - 11904: 0x8E67,
+ 33827 - 11904: 0xDB5F,
+ 33828 - 11904: 0xFC75,
+ 33830 - 11904: 0x987E,
+ 33833 - 11904: 0xDFC7,
+ 33835 - 11904: 0xDFDD,
+ 33836 - 11904: 0xB855,
+ 33837 - 11904: 0xDFCC,
+ 33838 - 11904: 0xFDB9,
+ 33839 - 11904: 0xDFCA,
+ 33840 - 11904: 0xDFB5,
+ 33841 - 11904: 0xB8A9,
+ 33842 - 11904: 0xDFC5,
+ 33843 - 11904: 0xDFD9,
+ 33844 - 11904: 0xDFC1,
+ 33845 - 11904: 0xB8B1,
+ 33846 - 11904: 0xDFD8,
+ 33847 - 11904: 0xDFBF,
+ 33848 - 11904: 0xB5E3,
+ 33849 - 11904: 0xDFCF,
+ 33850 - 11904: 0xDFC0,
+ 33851 - 11904: 0xDFD6,
+ 33852 - 11904: 0xB8B0,
+ 33853 - 11904: 0xB8A8,
+ 33854 - 11904: 0x97FC,
+ 33855 - 11904: 0xDFAA,
+ 33856 - 11904: 0xDFB2,
+ 33858 - 11904: 0xDFCB,
+ 33859 - 11904: 0xDFC3,
+ 33860 - 11904: 0xDFDC,
+ 33861 - 11904: 0xDFC6,
+ 33862 - 11904: 0xB8B6,
+ 33863 - 11904: 0xDFD7,
+ 33864 - 11904: 0x98F9,
+ 33865 - 11904: 0xB8AD,
+ 33866 - 11904: 0x8F66,
+ 33867 - 11904: 0xDFC9,
+ 33868 - 11904: 0xDFD1,
+ 33869 - 11904: 0xDFB6,
+ 33870 - 11904: 0xDFD0,
+ 33872 - 11904: 0xDFE1,
+ 33873 - 11904: 0xDFB1,
+ 33874 - 11904: 0xDFD2,
+ 33875 - 11904: 0x956E,
+ 33876 - 11904: 0xDFDF,
+ 33877 - 11904: 0x9245,
+ 33878 - 11904: 0xDFAB,
+ 33879 - 11904: 0xB5DB,
+ 33880 - 11904: 0x8F60,
+ 33881 - 11904: 0xDFB9,
+ 33882 - 11904: 0xDFB8,
+ 33883 - 11904: 0xB8AF,
+ 33884 - 11904: 0x9ED1,
+ 33885 - 11904: 0xDFBC,
+ 33886 - 11904: 0xDFBE,
+ 33887 - 11904: 0xDFCD,
+ 33888 - 11904: 0xDFDE,
+ 33889 - 11904: 0xB8B2,
+ 33890 - 11904: 0xFECD,
+ 33891 - 11904: 0xB8B3,
+ 33892 - 11904: 0x99B9,
+ 33893 - 11904: 0xDFB0,
+ 33894 - 11904: 0xB8AB,
+ 33895 - 11904: 0xDFB4,
+ 33896 - 11904: 0xDFDA,
+ 33897 - 11904: 0xB8B4,
+ 33899 - 11904: 0xB8AC,
+ 33900 - 11904: 0xB8AE,
+ 33901 - 11904: 0xB8B5,
+ 33902 - 11904: 0xDFE0,
+ 33903 - 11904: 0xDFD3,
+ 33904 - 11904: 0xDFCE,
+ 33905 - 11904: 0x8F62,
+ 33906 - 11904: 0x974C,
+ 33907 - 11904: 0xDFBB,
+ 33908 - 11904: 0xDFBA,
+ 33909 - 11904: 0xB8AA,
+ 33910 - 11904: 0xDFAC,
+ 33911 - 11904: 0xB8A7,
+ 33912 - 11904: 0xDFC4,
+ 33913 - 11904: 0xDFAD,
+ 33914 - 11904: 0xDFC2,
+ 33917 - 11904: 0xDFB7,
+ 33918 - 11904: 0xDFDB,
+ 33919 - 11904: 0x91C7,
+ 33920 - 11904: 0x955F,
+ 33922 - 11904: 0xB8A6,
+ 33924 - 11904: 0x87AB,
+ 33926 - 11904: 0xDFB3,
+ 33928 - 11904: 0x99BB,
+ 33933 - 11904: 0xDFAF,
+ 33934 - 11904: 0xDFD5,
+ 33935 - 11904: 0xDFAE,
+ 33936 - 11904: 0xBB60,
+ 33937 - 11904: 0xE3D3,
+ 33938 - 11904: 0x8E6D,
+ 33939 - 11904: 0x8F71,
+ 33940 - 11904: 0xE3C2,
+ 33942 - 11904: 0x94CB,
+ 33943 - 11904: 0xE3AC,
+ 33944 - 11904: 0xE3CA,
+ 33945 - 11904: 0xBB58,
+ 33946 - 11904: 0xE3BB,
+ 33947 - 11904: 0xE3C5,
+ 33948 - 11904: 0xBB5B,
+ 33949 - 11904: 0xE3BE,
+ 33950 - 11904: 0xBB59,
+ 33951 - 11904: 0xE3AF,
+ 33952 - 11904: 0xE3CD,
+ 33953 - 11904: 0xE3AE,
+ 33954 - 11904: 0xE3C1,
+ 33955 - 11904: 0x95B1,
+ 33956 - 11904: 0xE3AD,
+ 33959 - 11904: 0xE3BF,
+ 33960 - 11904: 0xE3C8,
+ 33961 - 11904: 0xE3C6,
+ 33962 - 11904: 0xE3BA,
+ 33963 - 11904: 0xE3B5,
+ 33964 - 11904: 0xE3B3,
+ 33965 - 11904: 0x9AF2,
+ 33966 - 11904: 0xE3B4,
+ 33967 - 11904: 0xE3C7,
+ 33968 - 11904: 0xE3D2,
+ 33969 - 11904: 0xE3BC,
+ 33970 - 11904: 0xBB5A,
+ 33972 - 11904: 0xE3B7,
+ 33974 - 11904: 0xE3CB,
+ 33976 - 11904: 0xBB5D,
+ 33977 - 11904: 0xE3B6,
+ 33978 - 11904: 0xE3B0,
+ 33979 - 11904: 0xE3C0,
+ 33980 - 11904: 0xBB61,
+ 33981 - 11904: 0x96C3,
+ 33982 - 11904: 0x99BD,
+ 33983 - 11904: 0xBB55,
+ 33984 - 11904: 0xBB5E,
+ 33985 - 11904: 0xE3B8,
+ 33986 - 11904: 0xE3B2,
+ 33988 - 11904: 0xBB57,
+ 33989 - 11904: 0xDFD4,
+ 33990 - 11904: 0xBB56,
+ 33991 - 11904: 0xE3C3,
+ 33993 - 11904: 0xBB54,
+ 33994 - 11904: 0xBB63,
+ 33995 - 11904: 0xBB5C,
+ 33996 - 11904: 0xE3C4,
+ 33997 - 11904: 0xE3B9,
+ 33998 - 11904: 0xE3B1,
+ 33999 - 11904: 0xE3CC,
+ 34000 - 11904: 0xE3BD,
+ 34001 - 11904: 0xBB62,
+ 34002 - 11904: 0xE3D0,
+ 34003 - 11904: 0xBB5F,
+ 34004 - 11904: 0xE3CF,
+ 34006 - 11904: 0xE3C9,
+ 34007 - 11904: 0xE3CE,
+ 34010 - 11904: 0xA0CF,
+ 34011 - 11904: 0xE3D1,
+ 34014 - 11904: 0x8F6D,
+ 34017 - 11904: 0x99BE,
+ 34018 - 11904: 0x8EF4,
+ 34020 - 11904: 0x8F72,
+ 34021 - 11904: 0x95E4,
+ 34023 - 11904: 0xE773,
+ 34024 - 11904: 0xE774,
+ 34025 - 11904: 0xE767,
+ 34026 - 11904: 0xE766,
+ 34027 - 11904: 0xE762,
+ 34028 - 11904: 0xBDB4,
+ 34030 - 11904: 0xBDAC,
+ 34031 - 11904: 0xE776,
+ 34032 - 11904: 0xE775,
+ 34033 - 11904: 0xDFA9,
+ 34034 - 11904: 0xE75F,
+ 34035 - 11904: 0xE763,
+ 34036 - 11904: 0xE75D,
+ 34038 - 11904: 0xE770,
+ 34039 - 11904: 0xE761,
+ 34040 - 11904: 0x99BF,
+ 34041 - 11904: 0xE777,
+ 34042 - 11904: 0xE75A,
+ 34043 - 11904: 0xE758,
+ 34044 - 11904: 0xE764,
+ 34045 - 11904: 0xE76E,
+ 34046 - 11904: 0xE769,
+ 34047 - 11904: 0xBDB6,
+ 34048 - 11904: 0xE74F,
+ 34050 - 11904: 0xE76D,
+ 34051 - 11904: 0x9244,
+ 34052 - 11904: 0x87D7,
+ 34053 - 11904: 0xFBA5,
+ 34054 - 11904: 0xBDB7,
+ 34055 - 11904: 0xDFBD,
+ 34056 - 11904: 0xE75B,
+ 34057 - 11904: 0xE752,
+ 34058 - 11904: 0xE755,
+ 34059 - 11904: 0xE77B,
+ 34060 - 11904: 0xE75C,
+ 34061 - 11904: 0xE753,
+ 34062 - 11904: 0xE751,
+ 34063 - 11904: 0xE74E,
+ 34064 - 11904: 0x99C0,
+ 34065 - 11904: 0xBDB0,
+ 34066 - 11904: 0xE765,
+ 34067 - 11904: 0xBDAF,
+ 34068 - 11904: 0xBDB3,
+ 34069 - 11904: 0xE760,
+ 34070 - 11904: 0xE768,
+ 34071 - 11904: 0xBDA9,
+ 34072 - 11904: 0xE778,
+ 34073 - 11904: 0xE77C,
+ 34074 - 11904: 0xBDAB,
+ 34076 - 11904: 0xE757,
+ 34077 - 11904: 0xE76B,
+ 34078 - 11904: 0xE76F,
+ 34079 - 11904: 0xE754,
+ 34080 - 11904: 0xE779,
+ 34081 - 11904: 0xBDB2,
+ 34083 - 11904: 0xBDB1,
+ 34084 - 11904: 0xE74C,
+ 34085 - 11904: 0xBDB5,
+ 34086 - 11904: 0xE772,
+ 34087 - 11904: 0xE756,
+ 34088 - 11904: 0xE76A,
+ 34089 - 11904: 0xE750,
+ 34090 - 11904: 0xE75E,
+ 34091 - 11904: 0xE759,
+ 34092 - 11904: 0xBDAD,
+ 34093 - 11904: 0xBDAE,
+ 34094 - 11904: 0xE76C,
+ 34095 - 11904: 0xE77D,
+ 34096 - 11904: 0xE77A,
+ 34097 - 11904: 0xE771,
+ 34099 - 11904: 0xFDB4,
+ 34100 - 11904: 0x8F77,
+ 34104 - 11904: 0x99C1,
+ 34107 - 11904: 0xE74D,
+ 34109 - 11904: 0xBDAA,
+ 34110 - 11904: 0xEB49,
+ 34112 - 11904: 0xEB40,
+ 34113 - 11904: 0xEB43,
+ 34114 - 11904: 0xFAB9,
+ 34115 - 11904: 0xBFBB,
+ 34116 - 11904: 0xEB45,
+ 34117 - 11904: 0xEAF9,
+ 34118 - 11904: 0xEB41,
+ 34119 - 11904: 0xEB47,
+ 34120 - 11904: 0xBFB8,
+ 34121 - 11904: 0xBFBC,
+ 34122 - 11904: 0xBFB6,
+ 34123 - 11904: 0x8F40,
+ 34124 - 11904: 0xFA44,
+ 34125 - 11904: 0xEAFB,
+ 34126 - 11904: 0xEB4C,
+ 34129 - 11904: 0xEB46,
+ 34130 - 11904: 0x99C2,
+ 34131 - 11904: 0xEAFC,
+ 34132 - 11904: 0xEB55,
+ 34133 - 11904: 0xEB4F,
+ 34134 - 11904: 0xEAF8,
+ 34135 - 11904: 0xEE46,
+ 34136 - 11904: 0xEAFE,
+ 34137 - 11904: 0xBFB7,
+ 34138 - 11904: 0x8F5C,
+ 34139 - 11904: 0xEB4A,
+ 34141 - 11904: 0xEB54,
+ 34142 - 11904: 0xBFBF,
+ 34143 - 11904: 0x8CBD,
+ 34144 - 11904: 0xEB51,
+ 34145 - 11904: 0xEAFD,
+ 34146 - 11904: 0xEB44,
+ 34147 - 11904: 0xEB48,
+ 34148 - 11904: 0xEB42,
+ 34149 - 11904: 0xEB56,
+ 34150 - 11904: 0xEB53,
+ 34151 - 11904: 0xEB50,
+ 34152 - 11904: 0xBFB9,
+ 34153 - 11904: 0xBFBA,
+ 34154 - 11904: 0xBFBE,
+ 34155 - 11904: 0xEAFA,
+ 34156 - 11904: 0xEB57,
+ 34157 - 11904: 0xBFBD,
+ 34158 - 11904: 0xEB4D,
+ 34159 - 11904: 0x99C4,
+ 34160 - 11904: 0x99C5,
+ 34161 - 11904: 0xEB4B,
+ 34163 - 11904: 0x8F7B,
+ 34165 - 11904: 0xEB4E,
+ 34166 - 11904: 0xEE53,
+ 34167 - 11904: 0xEE40,
+ 34168 - 11904: 0xEE45,
+ 34169 - 11904: 0xEE52,
+ 34170 - 11904: 0xEE44,
+ 34171 - 11904: 0xEDFB,
+ 34172 - 11904: 0xEE41,
+ 34174 - 11904: 0xC1A2,
+ 34176 - 11904: 0xEDF4,
+ 34177 - 11904: 0xEE4D,
+ 34178 - 11904: 0xEE4F,
+ 34179 - 11904: 0xEDF3,
+ 34180 - 11904: 0xC1A1,
+ 34181 - 11904: 0xEE51,
+ 34182 - 11904: 0xEE49,
+ 34183 - 11904: 0xC1A8,
+ 34184 - 11904: 0xEE50,
+ 34185 - 11904: 0xEE42,
+ 34186 - 11904: 0xC1AA,
+ 34187 - 11904: 0xEDF9,
+ 34188 - 11904: 0xEB52,
+ 34189 - 11904: 0xEE4A,
+ 34190 - 11904: 0xEE47,
+ 34191 - 11904: 0xEDF5,
+ 34192 - 11904: 0xEE55,
+ 34193 - 11904: 0xC1A4,
+ 34195 - 11904: 0x8776,
+ 34196 - 11904: 0xC1A5,
+ 34197 - 11904: 0xEDF7,
+ 34198 - 11904: 0xEE48,
+ 34199 - 11904: 0x8CB6,
+ 34200 - 11904: 0xEE54,
+ 34201 - 11904: 0xEE4B,
+ 34202 - 11904: 0xEDFD,
+ 34203 - 11904: 0xC1A7,
+ 34204 - 11904: 0xC1A3,
+ 34205 - 11904: 0xEE4C,
+ 34206 - 11904: 0xEDFE,
+ 34207 - 11904: 0xEE56,
+ 34208 - 11904: 0xEDF8,
+ 34209 - 11904: 0xEE43,
+ 34210 - 11904: 0xEE4E,
+ 34211 - 11904: 0xEDFA,
+ 34212 - 11904: 0xEDFC,
+ 34214 - 11904: 0xC2CB,
+ 34215 - 11904: 0xEDF6,
+ 34216 - 11904: 0xC1A9,
+ 34217 - 11904: 0xC2C4,
+ 34218 - 11904: 0xC17E,
+ 34223 - 11904: 0xC1A6,
+ 34224 - 11904: 0xC2C8,
+ 34225 - 11904: 0xF0B3,
+ 34227 - 11904: 0xF0A9,
+ 34228 - 11904: 0xF0A4,
+ 34229 - 11904: 0xF0AA,
+ 34230 - 11904: 0xF0B4,
+ 34231 - 11904: 0xF0B8,
+ 34232 - 11904: 0xF0B7,
+ 34233 - 11904: 0xC2CA,
+ 34234 - 11904: 0xC2C9,
+ 34237 - 11904: 0xF0AB,
+ 34238 - 11904: 0xF0B9,
+ 34239 - 11904: 0xF0AE,
+ 34240 - 11904: 0xF0A6,
+ 34241 - 11904: 0x8FA3,
+ 34242 - 11904: 0xF0A8,
+ 34243 - 11904: 0xF0A7,
+ 34244 - 11904: 0xF0AD,
+ 34245 - 11904: 0xF0B2,
+ 34246 - 11904: 0xF0A5,
+ 34247 - 11904: 0xF0AC,
+ 34248 - 11904: 0xF0B1,
+ 34249 - 11904: 0xC2C7,
+ 34251 - 11904: 0xF0AF,
+ 34253 - 11904: 0xC2C5,
+ 34254 - 11904: 0xF0B0,
+ 34255 - 11904: 0xC2C3,
+ 34256 - 11904: 0xC2C6,
+ 34257 - 11904: 0xF2D5,
+ 34258 - 11904: 0xF0B5,
+ 34261 - 11904: 0xC3C2,
+ 34262 - 11904: 0x8CCE,
+ 34263 - 11904: 0xF2CD,
+ 34264 - 11904: 0xF2D1,
+ 34265 - 11904: 0xF2C9,
+ 34266 - 11904: 0xF2CC,
+ 34268 - 11904: 0xF2D4,
+ 34269 - 11904: 0xC3C0,
+ 34270 - 11904: 0xF2D9,
+ 34271 - 11904: 0xF2D2,
+ 34272 - 11904: 0x99C6,
+ 34273 - 11904: 0xF2CA,
+ 34274 - 11904: 0xF2DA,
+ 34275 - 11904: 0xF2D3,
+ 34276 - 11904: 0xC3C3,
+ 34277 - 11904: 0xC3C4,
+ 34278 - 11904: 0xF2D7,
+ 34280 - 11904: 0xF2CB,
+ 34281 - 11904: 0xC3BF,
+ 34282 - 11904: 0xC3C1,
+ 34283 - 11904: 0xF2C6,
+ 34284 - 11904: 0xF2CE,
+ 34285 - 11904: 0xF2C8,
+ 34286 - 11904: 0x96CD,
+ 34287 - 11904: 0xF2D8,
+ 34288 - 11904: 0xF2D6,
+ 34289 - 11904: 0xF2C7,
+ 34290 - 11904: 0xF2CF,
+ 34294 - 11904: 0xF4BE,
+ 34295 - 11904: 0xC3C5,
+ 34296 - 11904: 0xF2D0,
+ 34297 - 11904: 0xC4A7,
+ 34298 - 11904: 0xC4A9,
+ 34299 - 11904: 0xC4A6,
+ 34300 - 11904: 0x96C7,
+ 34301 - 11904: 0xF4C3,
+ 34302 - 11904: 0xF4BB,
+ 34303 - 11904: 0xF4B9,
+ 34304 - 11904: 0xF4BD,
+ 34305 - 11904: 0xF4BA,
+ 34306 - 11904: 0x8FA5,
+ 34308 - 11904: 0xF4BF,
+ 34309 - 11904: 0xF4C1,
+ 34310 - 11904: 0xC4AA,
+ 34311 - 11904: 0xC4AC,
+ 34313 - 11904: 0xF4C0,
+ 34314 - 11904: 0xC4AD,
+ 34315 - 11904: 0xC4AB,
+ 34316 - 11904: 0xF4C2,
+ 34317 - 11904: 0xFABB,
+ 34319 - 11904: 0x8C61,
+ 34320 - 11904: 0x9570,
+ 34321 - 11904: 0xC4A8,
+ 34323 - 11904: 0x87AF,
+ 34324 - 11904: 0x9368,
+ 34326 - 11904: 0x8F7E,
+ 34327 - 11904: 0xC4F4,
+ 34328 - 11904: 0xF5F1,
+ 34329 - 11904: 0xF5F7,
+ 34330 - 11904: 0xC4F6,
+ 34331 - 11904: 0xF4BC,
+ 34332 - 11904: 0xF5F6,
+ 34334 - 11904: 0xF5FD,
+ 34335 - 11904: 0xF5F4,
+ 34336 - 11904: 0xF5FB,
+ 34337 - 11904: 0xF5FA,
+ 34338 - 11904: 0xF4B8,
+ 34339 - 11904: 0xF5F5,
+ 34340 - 11904: 0xF0B6,
+ 34341 - 11904: 0xF5FE,
+ 34342 - 11904: 0xF5F3,
+ 34343 - 11904: 0xF5F8,
+ 34344 - 11904: 0x8FAA,
+ 34345 - 11904: 0xF5FC,
+ 34346 - 11904: 0xF5F2,
+ 34348 - 11904: 0xF74A,
+ 34349 - 11904: 0xC4F5,
+ 34350 - 11904: 0xF5F9,
+ 34351 - 11904: 0xA050,
+ 34353 - 11904: 0xF7F4,
+ 34354 - 11904: 0xF74B,
+ 34355 - 11904: 0xF749,
+ 34356 - 11904: 0xF747,
+ 34357 - 11904: 0xF748,
+ 34358 - 11904: 0xF74C,
+ 34360 - 11904: 0xC5D9,
+ 34361 - 11904: 0xF7F2,
+ 34362 - 11904: 0xF7F0,
+ 34363 - 11904: 0xF7F5,
+ 34364 - 11904: 0xF7F3,
+ 34366 - 11904: 0xF7F6,
+ 34367 - 11904: 0xC5DA,
+ 34368 - 11904: 0xF7F1,
+ 34370 - 11904: 0x90D3,
+ 34371 - 11904: 0xF8BC,
+ 34373 - 11904: 0x9556,
+ 34374 - 11904: 0xF945,
+ 34375 - 11904: 0xF946,
+ 34376 - 11904: 0xF947,
+ 34379 - 11904: 0xF9C7,
+ 34380 - 11904: 0xF9BD,
+ 34381 - 11904: 0xCA4F,
+ 34382 - 11904: 0xAAEA,
+ 34384 - 11904: 0xAD68,
+ 34386 - 11904: 0xD3B8,
+ 34387 - 11904: 0xD3B7,
+ 34388 - 11904: 0xB040,
+ 34389 - 11904: 0xB342,
+ 34390 - 11904: 0xD77C,
+ 34393 - 11904: 0xD77B,
+ 34395 - 11904: 0xB5EA,
+ 34396 - 11904: 0xB8B8,
+ 34398 - 11904: 0xB8B7,
+ 34399 - 11904: 0xB8B9,
+ 34401 - 11904: 0xE3D4,
+ 34402 - 11904: 0xE77E,
+ 34403 - 11904: 0xEB58,
+ 34404 - 11904: 0xEB5A,
+ 34405 - 11904: 0xEB59,
+ 34407 - 11904: 0xC1AB,
+ 34408 - 11904: 0xEE57,
+ 34409 - 11904: 0xF0BA,
+ 34410 - 11904: 0xF9A5,
+ 34411 - 11904: 0xA6E4,
+ 34412 - 11904: 0x8FB8,
+ 34413 - 11904: 0xCDC9,
+ 34414 - 11904: 0xCDCA,
+ 34415 - 11904: 0xCDC8,
+ 34416 - 11904: 0xCDC7,
+ 34417 - 11904: 0xAAEB,
+ 34418 - 11904: 0x99C8,
+ 34419 - 11904: 0xD0A9,
+ 34420 - 11904: 0xD0A7,
+ 34423 - 11904: 0xD0A6,
+ 34425 - 11904: 0xAD69,
+ 34426 - 11904: 0xAD6B,
+ 34427 - 11904: 0xAD6A,
+ 34428 - 11904: 0xD0A8,
+ 34430 - 11904: 0x8FAF,
+ 34437 - 11904: 0xD3C4,
+ 34438 - 11904: 0xD3C1,
+ 34439 - 11904: 0xD3BF,
+ 34442 - 11904: 0xB041,
+ 34443 - 11904: 0xD3C2,
+ 34444 - 11904: 0xB046,
+ 34445 - 11904: 0xD3BC,
+ 34446 - 11904: 0xD3CB,
+ 34448 - 11904: 0xD3CD,
+ 34449 - 11904: 0xD3BD,
+ 34450 - 11904: 0x99C9,
+ 34451 - 11904: 0xB043,
+ 34452 - 11904: 0xD3CE,
+ 34453 - 11904: 0xD3C9,
+ 34454 - 11904: 0xD3BB,
+ 34455 - 11904: 0xD3C0,
+ 34456 - 11904: 0xD3CA,
+ 34457 - 11904: 0xD3C6,
+ 34458 - 11904: 0xD3C3,
+ 34460 - 11904: 0xB048,
+ 34461 - 11904: 0xD3CC,
+ 34462 - 11904: 0xD3BE,
+ 34464 - 11904: 0x9579,
+ 34465 - 11904: 0xD3C7,
+ 34466 - 11904: 0xD3B9,
+ 34467 - 11904: 0xB047,
+ 34468 - 11904: 0xB044,
+ 34469 - 11904: 0xD3C5,
+ 34471 - 11904: 0xD3C8,
+ 34472 - 11904: 0xD3BA,
+ 34473 - 11904: 0xB045,
+ 34474 - 11904: 0xB042,
+ 34477 - 11904: 0x9F49,
+ 34479 - 11904: 0xB34C,
+ 34480 - 11904: 0xD7A5,
+ 34481 - 11904: 0xB34B,
+ 34482 - 11904: 0x99CA,
+ 34483 - 11904: 0xD7A8,
+ 34484 - 11904: 0xD7AB,
+ 34485 - 11904: 0xB348,
+ 34486 - 11904: 0xB346,
+ 34487 - 11904: 0xD77E,
+ 34488 - 11904: 0xD7A9,
+ 34489 - 11904: 0xD7A7,
+ 34490 - 11904: 0xD7A4,
+ 34491 - 11904: 0xD7AC,
+ 34492 - 11904: 0xD7AD,
+ 34493 - 11904: 0xD7AF,
+ 34494 - 11904: 0xD7B0,
+ 34495 - 11904: 0xD77D,
+ 34496 - 11904: 0xB345,
+ 34497 - 11904: 0xD7A2,
+ 34498 - 11904: 0xD7A1,
+ 34499 - 11904: 0xD7AE,
+ 34500 - 11904: 0xB347,
+ 34501 - 11904: 0xD7A3,
+ 34502 - 11904: 0xB349,
+ 34503 - 11904: 0xB344,
+ 34504 - 11904: 0xD7A6,
+ 34505 - 11904: 0xB34D,
+ 34507 - 11904: 0xB34A,
+ 34508 - 11904: 0xD7AA,
+ 34512 - 11904: 0xB5F1,
+ 34513 - 11904: 0xDBBF,
+ 34515 - 11904: 0xDBB4,
+ 34516 - 11904: 0xB5EE,
+ 34518 - 11904: 0xDFE7,
+ 34519 - 11904: 0xDBBD,
+ 34520 - 11904: 0xDBB1,
+ 34521 - 11904: 0xB5EC,
+ 34522 - 11904: 0xDBB6,
+ 34523 - 11904: 0xB5EF,
+ 34524 - 11904: 0xDBBA,
+ 34525 - 11904: 0xDBB8,
+ 34526 - 11904: 0xB5F2,
+ 34527 - 11904: 0xB5EB,
+ 34530 - 11904: 0xDBB2,
+ 34531 - 11904: 0xDBB5,
+ 34532 - 11904: 0xB5F0,
+ 34534 - 11904: 0xDBB3,
+ 34536 - 11904: 0xDBBE,
+ 34537 - 11904: 0xDBBC,
+ 34538 - 11904: 0xDBB7,
+ 34539 - 11904: 0xDBB9,
+ 34540 - 11904: 0xDBBB,
+ 34541 - 11904: 0xB5ED,
+ 34543 - 11904: 0x99CB,
+ 34549 - 11904: 0xDFE8,
+ 34550 - 11904: 0xDFEE,
+ 34551 - 11904: 0xDFE4,
+ 34552 - 11904: 0xDFEA,
+ 34553 - 11904: 0xB8BA,
+ 34554 - 11904: 0xDFE6,
+ 34555 - 11904: 0xB8C0,
+ 34558 - 11904: 0xB8BF,
+ 34560 - 11904: 0xB8BE,
+ 34561 - 11904: 0xDFED,
+ 34562 - 11904: 0xB8C1,
+ 34563 - 11904: 0xB8C2,
+ 34564 - 11904: 0xDFE3,
+ 34565 - 11904: 0xDFF0,
+ 34566 - 11904: 0xB8C3,
+ 34567 - 11904: 0xB8BD,
+ 34568 - 11904: 0xB8BC,
+ 34569 - 11904: 0xDFEC,
+ 34570 - 11904: 0xB8C4,
+ 34571 - 11904: 0xDFE2,
+ 34572 - 11904: 0xDFE5,
+ 34573 - 11904: 0xDFEF,
+ 34574 - 11904: 0xDFEB,
+ 34577 - 11904: 0xE3F4,
+ 34578 - 11904: 0xE3E9,
+ 34579 - 11904: 0xB8BB,
+ 34584 - 11904: 0xBB6A,
+ 34585 - 11904: 0xE3DD,
+ 34586 - 11904: 0xE3F2,
+ 34587 - 11904: 0xE3DE,
+ 34588 - 11904: 0xBB65,
+ 34590 - 11904: 0xE3DB,
+ 34592 - 11904: 0xE3E4,
+ 34593 - 11904: 0xE3DC,
+ 34594 - 11904: 0xBB67,
+ 34595 - 11904: 0xE3D6,
+ 34596 - 11904: 0xE3F1,
+ 34597 - 11904: 0xBB68,
+ 34598 - 11904: 0xE3EE,
+ 34599 - 11904: 0xE3EF,
+ 34600 - 11904: 0xE3D7,
+ 34601 - 11904: 0xBB6D,
+ 34602 - 11904: 0xE3E6,
+ 34604 - 11904: 0xE3E0,
+ 34605 - 11904: 0xE3E7,
+ 34606 - 11904: 0xE3DA,
+ 34608 - 11904: 0xE3F3,
+ 34609 - 11904: 0xE3EB,
+ 34610 - 11904: 0xE3E5,
+ 34611 - 11904: 0xE3D5,
+ 34612 - 11904: 0xBB69,
+ 34613 - 11904: 0xE3EC,
+ 34615 - 11904: 0xBB6C,
+ 34616 - 11904: 0xE3F0,
+ 34618 - 11904: 0xE3EA,
+ 34619 - 11904: 0xBB66,
+ 34620 - 11904: 0xE3E8,
+ 34622 - 11904: 0xE3E2,
+ 34623 - 11904: 0xBB64,
+ 34624 - 11904: 0xE3D9,
+ 34625 - 11904: 0xE3E1,
+ 34626 - 11904: 0xE3ED,
+ 34627 - 11904: 0xE3DF,
+ 34630 - 11904: 0xE3E3,
+ 34636 - 11904: 0xBDC1,
+ 34637 - 11904: 0xDFE9,
+ 34638 - 11904: 0xE7B2,
+ 34639 - 11904: 0xE7BB,
+ 34640 - 11904: 0xE7B1,
+ 34641 - 11904: 0xE7AD,
+ 34642 - 11904: 0xE7AA,
+ 34643 - 11904: 0xBDC2,
+ 34644 - 11904: 0xE7A8,
+ 34645 - 11904: 0xBB6B,
+ 34646 - 11904: 0xE7A1,
+ 34647 - 11904: 0xBDC0,
+ 34648 - 11904: 0xE7A7,
+ 34649 - 11904: 0xBDBF,
+ 34650 - 11904: 0xE7AC,
+ 34651 - 11904: 0xE7A9,
+ 34652 - 11904: 0xE7B9,
+ 34653 - 11904: 0xE7B4,
+ 34654 - 11904: 0xE7AE,
+ 34655 - 11904: 0xE7B3,
+ 34656 - 11904: 0xBDBB,
+ 34657 - 11904: 0xE7AB,
+ 34658 - 11904: 0xE7BE,
+ 34659 - 11904: 0xE7A2,
+ 34660 - 11904: 0xE7A3,
+ 34661 - 11904: 0xE7BA,
+ 34662 - 11904: 0xBDBC,
+ 34663 - 11904: 0xE7BF,
+ 34664 - 11904: 0xBDBE,
+ 34665 - 11904: 0xE7C0,
+ 34666 - 11904: 0xE7B0,
+ 34667 - 11904: 0xE3D8,
+ 34668 - 11904: 0xE7B6,
+ 34669 - 11904: 0xE7AF,
+ 34670 - 11904: 0xE7B8,
+ 34671 - 11904: 0xE7B5,
+ 34672 - 11904: 0x9DD5,
+ 34673 - 11904: 0x8FB0,
+ 34675 - 11904: 0xE7A6,
+ 34676 - 11904: 0xBDB9,
+ 34677 - 11904: 0xE7BD,
+ 34678 - 11904: 0xBDBA,
+ 34679 - 11904: 0xE7A4,
+ 34680 - 11904: 0xBDBD,
+ 34681 - 11904: 0xEB64,
+ 34682 - 11904: 0xE7B7,
+ 34683 - 11904: 0xE7BC,
+ 34685 - 11904: 0xFA7A,
+ 34689 - 11904: 0xEB61,
+ 34690 - 11904: 0xBDB8,
+ 34691 - 11904: 0xBFC0,
+ 34692 - 11904: 0xEB6B,
+ 34693 - 11904: 0xEB67,
+ 34694 - 11904: 0x9E5F,
+ 34695 - 11904: 0xEB65,
+ 34696 - 11904: 0xEB60,
+ 34697 - 11904: 0xEB6F,
+ 34699 - 11904: 0x99CD,
+ 34700 - 11904: 0xA0C9,
+ 34701 - 11904: 0xBFC4,
+ 34703 - 11904: 0xEB5C,
+ 34704 - 11904: 0xEB68,
+ 34705 - 11904: 0xEB69,
+ 34706 - 11904: 0xEB5F,
+ 34707 - 11904: 0xEB5E,
+ 34708 - 11904: 0xEB6C,
+ 34710 - 11904: 0xEB62,
+ 34711 - 11904: 0xEB5D,
+ 34712 - 11904: 0xEB63,
+ 34714 - 11904: 0xEB6E,
+ 34715 - 11904: 0xEB5B,
+ 34716 - 11904: 0xEB6D,
+ 34717 - 11904: 0xEB6A,
+ 34718 - 11904: 0xBFC2,
+ 34719 - 11904: 0xBFC1,
+ 34722 - 11904: 0xBFC3,
+ 34723 - 11904: 0xEB66,
+ 34724 - 11904: 0xF0CB,
+ 34725 - 11904: 0x9ADB,
+ 34729 - 11904: 0xA0C6,
+ 34730 - 11904: 0xEE59,
+ 34731 - 11904: 0xC1B1,
+ 34732 - 11904: 0xEE5D,
+ 34733 - 11904: 0xEE5A,
+ 34734 - 11904: 0xEE61,
+ 34735 - 11904: 0xEE67,
+ 34736 - 11904: 0xEE5C,
+ 34737 - 11904: 0x8FB4,
+ 34738 - 11904: 0xEE70,
+ 34739 - 11904: 0xC1AE,
+ 34740 - 11904: 0xEE6A,
+ 34741 - 11904: 0xEE5F,
+ 34742 - 11904: 0xEE6B,
+ 34743 - 11904: 0xEE66,
+ 34744 - 11904: 0xEE6D,
+ 34745 - 11904: 0xEE5E,
+ 34746 - 11904: 0xC1B3,
+ 34747 - 11904: 0xC1B2,
+ 34748 - 11904: 0xEE60,
+ 34749 - 11904: 0xEE6E,
+ 34750 - 11904: 0xEE58,
+ 34751 - 11904: 0xEE6C,
+ 34752 - 11904: 0xC1AC,
+ 34753 - 11904: 0xA0D7,
+ 34754 - 11904: 0xEE64,
+ 34755 - 11904: 0xEE63,
+ 34756 - 11904: 0xEE68,
+ 34757 - 11904: 0xEE5B,
+ 34758 - 11904: 0xC1B0,
+ 34760 - 11904: 0xC1B4,
+ 34761 - 11904: 0xEE62,
+ 34762 - 11904: 0xEE69,
+ 34763 - 11904: 0xC1B5,
+ 34764 - 11904: 0xEE65,
+ 34766 - 11904: 0xA0C7,
+ 34769 - 11904: 0xC1AD,
+ 34770 - 11904: 0xC1AF,
+ 34771 - 11904: 0xF0C7,
+ 34772 - 11904: 0xF0C5,
+ 34774 - 11904: 0xA043,
+ 34775 - 11904: 0xF0CC,
+ 34776 - 11904: 0xF0C9,
+ 34777 - 11904: 0xF0CD,
+ 34778 - 11904: 0x8FB5,
+ 34779 - 11904: 0xF0BE,
+ 34780 - 11904: 0xF0C6,
+ 34781 - 11904: 0xF0D1,
+ 34782 - 11904: 0xEE6F,
+ 34783 - 11904: 0xF0C2,
+ 34784 - 11904: 0xC2CF,
+ 34785 - 11904: 0xE7A5,
+ 34786 - 11904: 0xF0BD,
+ 34787 - 11904: 0xF0CA,
+ 34788 - 11904: 0xF0C4,
+ 34789 - 11904: 0xF0C1,
+ 34790 - 11904: 0xF0BC,
+ 34791 - 11904: 0xF0BB,
+ 34792 - 11904: 0xF0D0,
+ 34794 - 11904: 0xF0C0,
+ 34795 - 11904: 0xF0BF,
+ 34796 - 11904: 0xC2CD,
+ 34797 - 11904: 0xF0C8,
+ 34798 - 11904: 0x8FB2,
+ 34799 - 11904: 0xC2CC,
+ 34802 - 11904: 0xC2CE,
+ 34803 - 11904: 0xF0C3,
+ 34804 - 11904: 0xF0CF,
+ 34805 - 11904: 0xA061,
+ 34806 - 11904: 0xF2DE,
+ 34807 - 11904: 0xF2DF,
+ 34809 - 11904: 0xC3C9,
+ 34810 - 11904: 0xF2DC,
+ 34811 - 11904: 0xC3C6,
+ 34812 - 11904: 0xF2E4,
+ 34814 - 11904: 0xC3CA,
+ 34815 - 11904: 0xF2E6,
+ 34816 - 11904: 0xF2DB,
+ 34817 - 11904: 0xF0CE,
+ 34818 - 11904: 0xF2E8,
+ 34819 - 11904: 0xF2DD,
+ 34820 - 11904: 0x9E5E,
+ 34821 - 11904: 0xC3C7,
+ 34822 - 11904: 0xF2E3,
+ 34824 - 11904: 0xF2E5,
+ 34825 - 11904: 0xF2E0,
+ 34826 - 11904: 0xF2E7,
+ 34827 - 11904: 0xF2E2,
+ 34828 - 11904: 0xF2E1,
+ 34829 - 11904: 0xC3C8,
+ 34831 - 11904: 0xA063,
+ 34832 - 11904: 0xF4C5,
+ 34833 - 11904: 0xF4C6,
+ 34835 - 11904: 0xF4C8,
+ 34836 - 11904: 0xC4AE,
+ 34837 - 11904: 0xC4AF,
+ 34838 - 11904: 0xF4C9,
+ 34839 - 11904: 0xF4C7,
+ 34840 - 11904: 0x9FE8,
+ 34841 - 11904: 0xF4C4,
+ 34843 - 11904: 0xF642,
+ 34844 - 11904: 0xF645,
+ 34845 - 11904: 0xF641,
+ 34847 - 11904: 0xC4FA,
+ 34848 - 11904: 0xF643,
+ 34849 - 11904: 0xC4F9,
+ 34850 - 11904: 0xC4F8,
+ 34851 - 11904: 0xC4F7,
+ 34852 - 11904: 0xF644,
+ 34853 - 11904: 0xF751,
+ 34854 - 11904: 0xF74F,
+ 34855 - 11904: 0x9CB2,
+ 34856 - 11904: 0xF74E,
+ 34857 - 11904: 0xF640,
+ 34858 - 11904: 0xF750,
+ 34859 - 11904: 0xF646,
+ 34860 - 11904: 0xF74D,
+ 34861 - 11904: 0x957C,
+ 34862 - 11904: 0xF7F9,
+ 34863 - 11904: 0xF7D7,
+ 34864 - 11904: 0xF7F7,
+ 34865 - 11904: 0xC5DB,
+ 34866 - 11904: 0xF7F8,
+ 34867 - 11904: 0xF7FA,
+ 34869 - 11904: 0xF8BF,
+ 34870 - 11904: 0xC5FA,
+ 34871 - 11904: 0xF8BE,
+ 34872 - 11904: 0xF8BD,
+ 34873 - 11904: 0xC5FB,
+ 34875 - 11904: 0xC65A,
+ 34876 - 11904: 0xF96E,
+ 34877 - 11904: 0xF9A7,
+ 34878 - 11904: 0xF9A6,
+ 34879 - 11904: 0xF9A8,
+ 34880 - 11904: 0xA6E5,
+ 34881 - 11904: 0xD0AA,
+ 34882 - 11904: 0x9FC7,
+ 34883 - 11904: 0xD3CF,
+ 34884 - 11904: 0xD3D0,
+ 34885 - 11904: 0x8FBB,
+ 34886 - 11904: 0x8FBC,
+ 34888 - 11904: 0xDBC0,
+ 34890 - 11904: 0xF647,
+ 34891 - 11904: 0xF8C0,
+ 34892 - 11904: 0xA6E6,
+ 34893 - 11904: 0xAD6C,
+ 34894 - 11904: 0xD0AB,
+ 34895 - 11904: 0x8FEC,
+ 34898 - 11904: 0xD7B1,
+ 34899 - 11904: 0xB34E,
+ 34901 - 11904: 0xDBC2,
+ 34902 - 11904: 0xDBC1,
+ 34903 - 11904: 0xB5F3,
+ 34905 - 11904: 0xB8C5,
+ 34906 - 11904: 0xE7C1,
+ 34907 - 11904: 0xBDC3,
+ 34909 - 11904: 0xBDC4,
+ 34910 - 11904: 0x8FC0,
+ 34912 - 11904: 0x936A,
+ 34913 - 11904: 0xBFC5,
+ 34914 - 11904: 0xC5FC,
+ 34915 - 11904: 0xA6E7,
+ 34916 - 11904: 0x8BE4,
+ 34917 - 11904: 0x9C7C,
+ 34919 - 11904: 0xD0AC,
+ 34920 - 11904: 0xAAED,
+ 34921 - 11904: 0xD0AE,
+ 34922 - 11904: 0xD0AD,
+ 34923 - 11904: 0xAD6D,
+ 34925 - 11904: 0xD3D1,
+ 34926 - 11904: 0x95A1,
+ 34927 - 11904: 0xD3D8,
+ 34928 - 11904: 0xB049,
+ 34929 - 11904: 0xD3D6,
+ 34930 - 11904: 0xD3D4,
+ 34932 - 11904: 0xD3DB,
+ 34933 - 11904: 0xD3D2,
+ 34934 - 11904: 0xD3D3,
+ 34935 - 11904: 0xB04A,
+ 34937 - 11904: 0xB04E,
+ 34940 - 11904: 0xD3DC,
+ 34941 - 11904: 0xB04D,
+ 34942 - 11904: 0xD3DA,
+ 34943 - 11904: 0xD3D7,
+ 34944 - 11904: 0xD3D5,
+ 34945 - 11904: 0xB04B,
+ 34946 - 11904: 0xB04C,
+ 34947 - 11904: 0xD3D9,
+ 34948 - 11904: 0xFEEC,
+ 34951 - 11904: 0x95A3,
+ 34952 - 11904: 0xB350,
+ 34953 - 11904: 0xD7B2,
+ 34955 - 11904: 0xB355,
+ 34956 - 11904: 0xD7C2,
+ 34957 - 11904: 0xB354,
+ 34958 - 11904: 0xD7C4,
+ 34959 - 11904: 0x8C45,
+ 34960 - 11904: 0x8CB8,
+ 34961 - 11904: 0xD7B8,
+ 34962 - 11904: 0xB352,
+ 34963 - 11904: 0xD7C3,
+ 34965 - 11904: 0xD7B3,
+ 34966 - 11904: 0xB353,
+ 34967 - 11904: 0xD7BF,
+ 34968 - 11904: 0xD7BB,
+ 34969 - 11904: 0xD7BD,
+ 34970 - 11904: 0xD7B7,
+ 34971 - 11904: 0xD7BE,
+ 34972 - 11904: 0x8FC1,
+ 34973 - 11904: 0x87B7,
+ 34974 - 11904: 0xB34F,
+ 34975 - 11904: 0xD7BA,
+ 34976 - 11904: 0xA052,
+ 34977 - 11904: 0xD7B9,
+ 34978 - 11904: 0xD7B5,
+ 34980 - 11904: 0xD7C0,
+ 34983 - 11904: 0xD7BC,
+ 34984 - 11904: 0xD7B4,
+ 34986 - 11904: 0xD7B6,
+ 34987 - 11904: 0xB351,
+ 34988 - 11904: 0xD7C1,
+ 34990 - 11904: 0x99D0,
+ 34993 - 11904: 0xB5F6,
+ 34994 - 11904: 0xDBCD,
+ 34996 - 11904: 0x8FC3,
+ 34997 - 11904: 0x8FC4,
+ 34998 - 11904: 0xDBC9,
+ 34999 - 11904: 0xDBCB,
+ 35000 - 11904: 0xDBC6,
+ 35001 - 11904: 0xDBC5,
+ 35002 - 11904: 0xDBC3,
+ 35004 - 11904: 0xDBCA,
+ 35005 - 11904: 0xDBCC,
+ 35006 - 11904: 0xDBC8,
+ 35007 - 11904: 0x95A4,
+ 35008 - 11904: 0xDBC7,
+ 35009 - 11904: 0xB5F4,
+ 35010 - 11904: 0xB5F5,
+ 35013 - 11904: 0x8FC6,
+ 35015 - 11904: 0x9E60,
+ 35017 - 11904: 0xDBCF,
+ 35018 - 11904: 0xB8CD,
+ 35019 - 11904: 0xDFF2,
+ 35020 - 11904: 0xDFF8,
+ 35021 - 11904: 0xDFF3,
+ 35022 - 11904: 0xDFF4,
+ 35023 - 11904: 0xF9D8,
+ 35024 - 11904: 0xDFF9,
+ 35026 - 11904: 0xB8CF,
+ 35028 - 11904: 0xB8C7,
+ 35029 - 11904: 0xB8CE,
+ 35030 - 11904: 0xDFF1,
+ 35031 - 11904: 0xDBC4,
+ 35032 - 11904: 0xB8CA,
+ 35033 - 11904: 0xB8C8,
+ 35034 - 11904: 0xDFF7,
+ 35035 - 11904: 0xDFF6,
+ 35036 - 11904: 0xB8C9,
+ 35037 - 11904: 0xB8CB,
+ 35038 - 11904: 0xDFF5,
+ 35039 - 11904: 0xB8C6,
+ 35041 - 11904: 0xB8CC,
+ 35046 - 11904: 0x95A5,
+ 35047 - 11904: 0xE3F6,
+ 35048 - 11904: 0xBB74,
+ 35051 - 11904: 0xE442,
+ 35052 - 11904: 0xE441,
+ 35054 - 11904: 0xE3FB,
+ 35055 - 11904: 0xBB76,
+ 35056 - 11904: 0xE440,
+ 35057 - 11904: 0xE3F7,
+ 35058 - 11904: 0xE3F8,
+ 35059 - 11904: 0xBB6E,
+ 35060 - 11904: 0xBB70,
+ 35061 - 11904: 0x9CB3,
+ 35062 - 11904: 0xE3FD,
+ 35063 - 11904: 0xE3F5,
+ 35064 - 11904: 0xBB72,
+ 35065 - 11904: 0xBB71,
+ 35066 - 11904: 0xE3F9,
+ 35067 - 11904: 0xE3FE,
+ 35068 - 11904: 0xE3FC,
+ 35069 - 11904: 0xBB73,
+ 35070 - 11904: 0xE3FA,
+ 35071 - 11904: 0x99D1,
+ 35072 - 11904: 0xFEF1,
+ 35073 - 11904: 0xDBCE,
+ 35074 - 11904: 0xBB6F,
+ 35077 - 11904: 0xE7C2,
+ 35078 - 11904: 0xE7C9,
+ 35079 - 11904: 0xBDC6,
+ 35081 - 11904: 0xE7CD,
+ 35082 - 11904: 0xBDCA,
+ 35083 - 11904: 0xE7C5,
+ 35084 - 11904: 0xE7C3,
+ 35086 - 11904: 0xE7CC,
+ 35088 - 11904: 0xBDC5,
+ 35089 - 11904: 0xE7CB,
+ 35090 - 11904: 0xBDC7,
+ 35091 - 11904: 0xBDC8,
+ 35092 - 11904: 0xE7C4,
+ 35093 - 11904: 0xBDC9,
+ 35094 - 11904: 0xE7CA,
+ 35095 - 11904: 0xE7C6,
+ 35096 - 11904: 0xE7C7,
+ 35097 - 11904: 0xE7C8,
+ 35098 - 11904: 0xBB75,
+ 35102 - 11904: 0xEB70,
+ 35103 - 11904: 0xEB7C,
+ 35105 - 11904: 0xBFCA,
+ 35106 - 11904: 0xEB77,
+ 35107 - 11904: 0xEB79,
+ 35108 - 11904: 0x99D2,
+ 35109 - 11904: 0xBFC8,
+ 35110 - 11904: 0xEB71,
+ 35111 - 11904: 0xEB75,
+ 35113 - 11904: 0xEB78,
+ 35114 - 11904: 0xBFC6,
+ 35115 - 11904: 0xBFC9,
+ 35116 - 11904: 0xEB7B,
+ 35117 - 11904: 0xEB73,
+ 35118 - 11904: 0xEB74,
+ 35119 - 11904: 0xEB7A,
+ 35120 - 11904: 0xEB72,
+ 35121 - 11904: 0xEB76,
+ 35122 - 11904: 0xBFC7,
+ 35123 - 11904: 0xEE72,
+ 35125 - 11904: 0xEE71,
+ 35126 - 11904: 0xC1B7,
+ 35127 - 11904: 0xEE77,
+ 35128 - 11904: 0xC1B9,
+ 35131 - 11904: 0xC1B6,
+ 35132 - 11904: 0xEE73,
+ 35133 - 11904: 0xC1BA,
+ 35134 - 11904: 0xEE74,
+ 35137 - 11904: 0xEE75,
+ 35138 - 11904: 0xEE78,
+ 35139 - 11904: 0x9CC2,
+ 35140 - 11904: 0xC1B8,
+ 35142 - 11904: 0xF0D6,
+ 35143 - 11904: 0x99D3,
+ 35145 - 11904: 0xF0D9,
+ 35147 - 11904: 0xF0D3,
+ 35148 - 11904: 0xF0D5,
+ 35149 - 11904: 0x95A7,
+ 35151 - 11904: 0xF0D4,
+ 35152 - 11904: 0xF0D7,
+ 35153 - 11904: 0xF0D8,
+ 35154 - 11904: 0xEE76,
+ 35155 - 11904: 0xF0D2,
+ 35156 - 11904: 0x95A9,
+ 35158 - 11904: 0xC3CD,
+ 35159 - 11904: 0xF2EC,
+ 35160 - 11904: 0xF2EF,
+ 35161 - 11904: 0xF2F1,
+ 35162 - 11904: 0xF2EA,
+ 35163 - 11904: 0xF2EB,
+ 35164 - 11904: 0xF2EE,
+ 35165 - 11904: 0xF2F0,
+ 35166 - 11904: 0xC3CE,
+ 35167 - 11904: 0xC3CC,
+ 35168 - 11904: 0xC3CB,
+ 35169 - 11904: 0xF2ED,
+ 35170 - 11904: 0xF2E9,
+ 35171 - 11904: 0xF4CA,
+ 35172 - 11904: 0xC4B0,
+ 35173 - 11904: 0x95A6,
+ 35174 - 11904: 0xF4CB,
+ 35177 - 11904: 0xF649,
+ 35178 - 11904: 0xC4FB,
+ 35179 - 11904: 0xF64B,
+ 35180 - 11904: 0xC4FC,
+ 35181 - 11904: 0xF648,
+ 35182 - 11904: 0xF64A,
+ 35183 - 11904: 0xC5A8,
+ 35185 - 11904: 0xF752,
+ 35186 - 11904: 0xC5A7,
+ 35187 - 11904: 0xF7FD,
+ 35188 - 11904: 0xF7FC,
+ 35190 - 11904: 0xF7FB,
+ 35191 - 11904: 0x9C5D,
+ 35193 - 11904: 0xF948,
+ 35194 - 11904: 0xF949,
+ 35195 - 11904: 0xF94B,
+ 35196 - 11904: 0xF94A,
+ 35198 - 11904: 0xCA50,
+ 35199 - 11904: 0xA6E8,
+ 35200 - 11904: 0x98E2,
+ 35201 - 11904: 0xAD6E,
+ 35202 - 11904: 0xD7C5,
+ 35203 - 11904: 0xB5F7,
+ 35205 - 11904: 0xDFFA,
+ 35206 - 11904: 0xC2D0,
+ 35207 - 11904: 0x8FC9,
+ 35208 - 11904: 0xF2F2,
+ 35209 - 11904: 0xA0C2,
+ 35210 - 11904: 0x8FCA,
+ 35211 - 11904: 0xA8A3,
+ 35215 - 11904: 0xB357,
+ 35217 - 11904: 0x99D4,
+ 35219 - 11904: 0xB356,
+ 35220 - 11904: 0xA0B9,
+ 35221 - 11904: 0xDBD0,
+ 35222 - 11904: 0xB5F8,
+ 35223 - 11904: 0xDBD2,
+ 35224 - 11904: 0xDBD1,
+ 35227 - 11904: 0xDFFB,
+ 35228 - 11904: 0xB8D0,
+ 35229 - 11904: 0xE443,
+ 35230 - 11904: 0xE446,
+ 35231 - 11904: 0xE445,
+ 35233 - 11904: 0xE444,
+ 35234 - 11904: 0xE7CE,
+ 35235 - 11904: 0xE7D0,
+ 35236 - 11904: 0xE7CF,
+ 35237 - 11904: 0x9B58,
+ 35238 - 11904: 0xBFCC,
+ 35239 - 11904: 0x8FCD,
+ 35241 - 11904: 0xA0D4,
+ 35242 - 11904: 0xBFCB,
+ 35244 - 11904: 0xC1BB,
+ 35245 - 11904: 0xEE79,
+ 35246 - 11904: 0xEE7B,
+ 35247 - 11904: 0xEE7A,
+ 35250 - 11904: 0xC2D1,
+ 35254 - 11904: 0xF2F4,
+ 35255 - 11904: 0xF2F3,
+ 35257 - 11904: 0xF4CC,
+ 35258 - 11904: 0xC4B1,
+ 35260 - 11904: 0x8FCE,
+ 35261 - 11904: 0xC4FD,
+ 35262 - 11904: 0xF754,
+ 35263 - 11904: 0xF753,
+ 35264 - 11904: 0xC65B,
+ 35265 - 11904: 0x8BE5,
+ 35270 - 11904: 0x8979,
+ 35282 - 11904: 0xA8A4,
+ 35283 - 11904: 0xD0AF,
+ 35284 - 11904: 0xAD6F,
+ 35285 - 11904: 0xD7C8,
+ 35286 - 11904: 0xD7C6,
+ 35289 - 11904: 0xD7C7,
+ 35290 - 11904: 0xDBD4,
+ 35291 - 11904: 0xDBD5,
+ 35292 - 11904: 0xE043,
+ 35293 - 11904: 0xDBD3,
+ 35295 - 11904: 0xDFFC,
+ 35296 - 11904: 0xE041,
+ 35297 - 11904: 0xE040,
+ 35298 - 11904: 0xE042,
+ 35299 - 11904: 0xB8D1,
+ 35300 - 11904: 0xDFFE,
+ 35301 - 11904: 0xDFFD,
+ 35302 - 11904: 0xE044,
+ 35303 - 11904: 0x8FD0,
+ 35304 - 11904: 0xE449,
+ 35305 - 11904: 0xE447,
+ 35307 - 11904: 0xE448,
+ 35308 - 11904: 0xE7D3,
+ 35309 - 11904: 0xE7D1,
+ 35312 - 11904: 0xE7D2,
+ 35313 - 11904: 0xEB7D,
+ 35314 - 11904: 0xEE7C,
+ 35315 - 11904: 0xEE7D,
+ 35316 - 11904: 0xC2D2,
+ 35318 - 11904: 0xF2F5,
+ 35319 - 11904: 0xF4CD,
+ 35320 - 11904: 0xC4B2,
+ 35322 - 11904: 0xF64C,
+ 35323 - 11904: 0xF755,
+ 35324 - 11904: 0xC5A9,
+ 35326 - 11904: 0xF7FE,
+ 35327 - 11904: 0xF94C,
+ 35328 - 11904: 0xA8A5,
+ 35330 - 11904: 0xAD71,
+ 35331 - 11904: 0xAD72,
+ 35332 - 11904: 0xD0B0,
+ 35335 - 11904: 0xD0B1,
+ 35336 - 11904: 0xAD70,
+ 35338 - 11904: 0xB054,
+ 35340 - 11904: 0xB052,
+ 35342 - 11904: 0xB051,
+ 35343 - 11904: 0xB058,
+ 35344 - 11904: 0xB050,
+ 35345 - 11904: 0xB059,
+ 35346 - 11904: 0xD3DD,
+ 35347 - 11904: 0xB056,
+ 35349 - 11904: 0xB053,
+ 35350 - 11904: 0xB057,
+ 35351 - 11904: 0xB055,
+ 35352 - 11904: 0xB04F,
+ 35355 - 11904: 0xB35F,
+ 35356 - 11904: 0x95B6,
+ 35357 - 11904: 0xB359,
+ 35358 - 11904: 0xD7CC,
+ 35359 - 11904: 0xB35E,
+ 35362 - 11904: 0xB360,
+ 35363 - 11904: 0xB35A,
+ 35365 - 11904: 0xB35B,
+ 35367 - 11904: 0xD7CA,
+ 35369 - 11904: 0x99D6,
+ 35370 - 11904: 0xB358,
+ 35371 - 11904: 0x95E5,
+ 35372 - 11904: 0xD7CB,
+ 35373 - 11904: 0xB35D,
+ 35376 - 11904: 0xD7C9,
+ 35377 - 11904: 0xB35C,
+ 35380 - 11904: 0xB644,
+ 35382 - 11904: 0xB646,
+ 35384 - 11904: 0x99D7,
+ 35385 - 11904: 0xDBD8,
+ 35386 - 11904: 0xB645,
+ 35387 - 11904: 0xB5F9,
+ 35388 - 11904: 0xB5FD,
+ 35389 - 11904: 0x95B5,
+ 35390 - 11904: 0xB8E4,
+ 35391 - 11904: 0xE049,
+ 35392 - 11904: 0xDBDA,
+ 35393 - 11904: 0xB5FE,
+ 35396 - 11904: 0xDBDD,
+ 35397 - 11904: 0xDBDE,
+ 35398 - 11904: 0xB643,
+ 35400 - 11904: 0xDBE0,
+ 35401 - 11904: 0xA0CA,
+ 35402 - 11904: 0xDBE2,
+ 35404 - 11904: 0xDBE3,
+ 35405 - 11904: 0xDBD7,
+ 35406 - 11904: 0xDBD6,
+ 35407 - 11904: 0xDBE4,
+ 35408 - 11904: 0xB642,
+ 35409 - 11904: 0xDBE1,
+ 35410 - 11904: 0xDBDF,
+ 35412 - 11904: 0xB640,
+ 35413 - 11904: 0xB5FB,
+ 35414 - 11904: 0xB647,
+ 35415 - 11904: 0xDBDB,
+ 35416 - 11904: 0xDBDC,
+ 35417 - 11904: 0xDBD9,
+ 35419 - 11904: 0xB641,
+ 35422 - 11904: 0xB5FC,
+ 35424 - 11904: 0xB5FA,
+ 35425 - 11904: 0xE048,
+ 35426 - 11904: 0xB8DF,
+ 35427 - 11904: 0xB8DA,
+ 35430 - 11904: 0xB8D5,
+ 35431 - 11904: 0x9FFD,
+ 35432 - 11904: 0xB8E5,
+ 35433 - 11904: 0xB8D6,
+ 35435 - 11904: 0xB8D2,
+ 35436 - 11904: 0xB8E1,
+ 35437 - 11904: 0xB8DE,
+ 35438 - 11904: 0xB8E0,
+ 35440 - 11904: 0xB8D7,
+ 35441 - 11904: 0xB8DC,
+ 35442 - 11904: 0xB8D3,
+ 35443 - 11904: 0xB8D4,
+ 35444 - 11904: 0xE050,
+ 35445 - 11904: 0xE04D,
+ 35446 - 11904: 0xE045,
+ 35447 - 11904: 0xE04A,
+ 35449 - 11904: 0xB8E2,
+ 35450 - 11904: 0xE051,
+ 35451 - 11904: 0xB8E3,
+ 35452 - 11904: 0xB8D9,
+ 35454 - 11904: 0xA058,
+ 35455 - 11904: 0xE047,
+ 35457 - 11904: 0xE04F,
+ 35458 - 11904: 0xE04B,
+ 35459 - 11904: 0xE04E,
+ 35460 - 11904: 0xE04C,
+ 35461 - 11904: 0xB8DD,
+ 35462 - 11904: 0xE046,
+ 35463 - 11904: 0xB8D8,
+ 35467 - 11904: 0xE44C,
+ 35468 - 11904: 0xBB78,
+ 35469 - 11904: 0xBB7B,
+ 35471 - 11904: 0xE44E,
+ 35472 - 11904: 0x8FD6,
+ 35473 - 11904: 0xBBA5,
+ 35474 - 11904: 0xE44D,
+ 35475 - 11904: 0xBB7D,
+ 35476 - 11904: 0x99D8,
+ 35477 - 11904: 0xBDCF,
+ 35478 - 11904: 0xE44F,
+ 35480 - 11904: 0xBBA4,
+ 35481 - 11904: 0xE44B,
+ 35482 - 11904: 0xBBA6,
+ 35484 - 11904: 0x8FD3,
+ 35486 - 11904: 0xBB79,
+ 35488 - 11904: 0xB8DB,
+ 35489 - 11904: 0xBB7C,
+ 35491 - 11904: 0xBB7A,
+ 35492 - 11904: 0xBB7E,
+ 35493 - 11904: 0xBBA2,
+ 35494 - 11904: 0xBB77,
+ 35495 - 11904: 0xBBA7,
+ 35496 - 11904: 0xBBA3,
+ 35497 - 11904: 0x8FE5,
+ 35498 - 11904: 0xBBA1,
+ 35499 - 11904: 0xE44A,
+ 35503 - 11904: 0x8FE9,
+ 35504 - 11904: 0xBDD6,
+ 35506 - 11904: 0xBDD2,
+ 35508 - 11904: 0x99D9,
+ 35510 - 11904: 0xBDD9,
+ 35512 - 11904: 0xE7D6,
+ 35513 - 11904: 0xBDDA,
+ 35514 - 11904: 0xE7E2,
+ 35515 - 11904: 0xE7DB,
+ 35516 - 11904: 0xBDCB,
+ 35517 - 11904: 0xE7E3,
+ 35518 - 11904: 0xE7DD,
+ 35519 - 11904: 0xBDD5,
+ 35520 - 11904: 0xE7DE,
+ 35522 - 11904: 0xBDD4,
+ 35523 - 11904: 0xE7E1,
+ 35524 - 11904: 0xBDCE,
+ 35525 - 11904: 0xE7DF,
+ 35526 - 11904: 0xE7D5,
+ 35527 - 11904: 0xBDCD,
+ 35528 - 11904: 0xEBAA,
+ 35529 - 11904: 0xBDD3,
+ 35531 - 11904: 0xBDD0,
+ 35532 - 11904: 0x8CF7,
+ 35533 - 11904: 0xBDD8,
+ 35535 - 11904: 0xE7D4,
+ 35537 - 11904: 0xE7D8,
+ 35538 - 11904: 0xBDCC,
+ 35539 - 11904: 0xE7D7,
+ 35540 - 11904: 0xE7D9,
+ 35541 - 11904: 0xE7DA,
+ 35542 - 11904: 0xBDD7,
+ 35543 - 11904: 0xE7DC,
+ 35544 - 11904: 0xE7E0,
+ 35545 - 11904: 0xE7E4,
+ 35546 - 11904: 0x927C,
+ 35547 - 11904: 0xBDDB,
+ 35548 - 11904: 0xBFD2,
+ 35549 - 11904: 0xEBA5,
+ 35550 - 11904: 0xEBAB,
+ 35551 - 11904: 0xEBA8,
+ 35552 - 11904: 0xEB7E,
+ 35553 - 11904: 0xEBAC,
+ 35554 - 11904: 0xEBA1,
+ 35556 - 11904: 0xEBA7,
+ 35558 - 11904: 0xBFCD,
+ 35559 - 11904: 0xBFD3,
+ 35560 - 11904: 0xEBAD,
+ 35562 - 11904: 0x9C45,
+ 35563 - 11904: 0xBFCF,
+ 35565 - 11904: 0xBFD9,
+ 35566 - 11904: 0xBFD4,
+ 35567 - 11904: 0xEBAF,
+ 35568 - 11904: 0xEBA9,
+ 35569 - 11904: 0xBFD0,
+ 35570 - 11904: 0xEBA2,
+ 35571 - 11904: 0xBFDA,
+ 35572 - 11904: 0xEBA3,
+ 35573 - 11904: 0xEBA4,
+ 35574 - 11904: 0xBFDB,
+ 35575 - 11904: 0xBFD8,
+ 35576 - 11904: 0xBDD1,
+ 35577 - 11904: 0x8CE8,
+ 35578 - 11904: 0xBFCE,
+ 35579 - 11904: 0xEBB0,
+ 35580 - 11904: 0xBFDC,
+ 35582 - 11904: 0xBFD5,
+ 35583 - 11904: 0xEBAE,
+ 35584 - 11904: 0xBFD1,
+ 35585 - 11904: 0xBFD6,
+ 35586 - 11904: 0xBFD7,
+ 35588 - 11904: 0xC1C3,
+ 35589 - 11904: 0xEEA4,
+ 35590 - 11904: 0xEEAD,
+ 35591 - 11904: 0xEEAA,
+ 35592 - 11904: 0xEEAC,
+ 35594 - 11904: 0xC1C0,
+ 35595 - 11904: 0xEEA5,
+ 35596 - 11904: 0x8FDE,
+ 35597 - 11904: 0xEEAB,
+ 35598 - 11904: 0xC1BC,
+ 35599 - 11904: 0xEEA7,
+ 35600 - 11904: 0xC1C4,
+ 35601 - 11904: 0xEEA3,
+ 35602 - 11904: 0xEEA8,
+ 35603 - 11904: 0xEEAF,
+ 35604 - 11904: 0xEBA6,
+ 35605 - 11904: 0xEEA9,
+ 35606 - 11904: 0xEEA2,
+ 35607 - 11904: 0xC1BD,
+ 35608 - 11904: 0xEEA1,
+ 35609 - 11904: 0xC1BE,
+ 35610 - 11904: 0xEEB0,
+ 35611 - 11904: 0xC1BF,
+ 35612 - 11904: 0xEEAE,
+ 35613 - 11904: 0xC1C2,
+ 35614 - 11904: 0xEE7E,
+ 35615 - 11904: 0x8FDF,
+ 35616 - 11904: 0xC1C1,
+ 35618 - 11904: 0xEEA6,
+ 35619 - 11904: 0xF0DC,
+ 35620 - 11904: 0xF0EA,
+ 35621 - 11904: 0xF0E5,
+ 35622 - 11904: 0xF0E7,
+ 35623 - 11904: 0xF0DB,
+ 35624 - 11904: 0xC2D3,
+ 35626 - 11904: 0xF0DA,
+ 35627 - 11904: 0xC2D6,
+ 35628 - 11904: 0xC2D5,
+ 35629 - 11904: 0xA04B,
+ 35630 - 11904: 0xF0E9,
+ 35631 - 11904: 0xF0E1,
+ 35632 - 11904: 0xF0DE,
+ 35633 - 11904: 0xF0E4,
+ 35635 - 11904: 0xF0DD,
+ 35637 - 11904: 0xF0DF,
+ 35638 - 11904: 0xF0E8,
+ 35639 - 11904: 0xF0E6,
+ 35641 - 11904: 0xC2D4,
+ 35642 - 11904: 0xF0ED,
+ 35643 - 11904: 0xF0EB,
+ 35644 - 11904: 0xF0E2,
+ 35645 - 11904: 0xF0EC,
+ 35646 - 11904: 0xF0E3,
+ 35647 - 11904: 0x8FE2,
+ 35648 - 11904: 0xF2F9,
+ 35649 - 11904: 0xC3CF,
+ 35650 - 11904: 0xF341,
+ 35651 - 11904: 0xA0CC,
+ 35653 - 11904: 0xF64F,
+ 35654 - 11904: 0xC3D6,
+ 35655 - 11904: 0xF0E0,
+ 35656 - 11904: 0xF2F7,
+ 35657 - 11904: 0xC3D2,
+ 35658 - 11904: 0xF2F8,
+ 35659 - 11904: 0xF2FD,
+ 35660 - 11904: 0x8FE3,
+ 35661 - 11904: 0x8FE4,
+ 35662 - 11904: 0xC3D4,
+ 35663 - 11904: 0xC3D5,
+ 35664 - 11904: 0xF2F6,
+ 35665 - 11904: 0xF340,
+ 35666 - 11904: 0xF342,
+ 35667 - 11904: 0xF2FA,
+ 35668 - 11904: 0xF2FC,
+ 35669 - 11904: 0xF2FE,
+ 35670 - 11904: 0xF2FB,
+ 35671 - 11904: 0xF343,
+ 35672 - 11904: 0xC3D1,
+ 35673 - 11904: 0xC3D7,
+ 35674 - 11904: 0xC3D3,
+ 35676 - 11904: 0xC3D0,
+ 35677 - 11904: 0xF4D0,
+ 35678 - 11904: 0x9BC4,
+ 35679 - 11904: 0xC4B7,
+ 35680 - 11904: 0xF4CE,
+ 35682 - 11904: 0x9BFC,
+ 35683 - 11904: 0xF4D2,
+ 35685 - 11904: 0xF4D3,
+ 35686 - 11904: 0xC4B5,
+ 35687 - 11904: 0xF4D4,
+ 35688 - 11904: 0xF4D1,
+ 35689 - 11904: 0x964C,
+ 35690 - 11904: 0xF4CF,
+ 35691 - 11904: 0xC4B8,
+ 35692 - 11904: 0xC4B4,
+ 35693 - 11904: 0xF4D5,
+ 35695 - 11904: 0xC4B6,
+ 35696 - 11904: 0xC4B3,
+ 35700 - 11904: 0xC4FE,
+ 35703 - 11904: 0xC540,
+ 35704 - 11904: 0xF64E,
+ 35705 - 11904: 0xF64D,
+ 35706 - 11904: 0xF650,
+ 35707 - 11904: 0xF651,
+ 35709 - 11904: 0xC541,
+ 35710 - 11904: 0xF756,
+ 35711 - 11904: 0xF75B,
+ 35712 - 11904: 0xC5AA,
+ 35713 - 11904: 0x9AF6,
+ 35714 - 11904: 0xF758,
+ 35715 - 11904: 0x8CAE,
+ 35716 - 11904: 0xF757,
+ 35717 - 11904: 0xF75A,
+ 35718 - 11904: 0xF759,
+ 35720 - 11904: 0xF843,
+ 35722 - 11904: 0xC5DC,
+ 35723 - 11904: 0xF842,
+ 35724 - 11904: 0xF840,
+ 35726 - 11904: 0xF841,
+ 35727 - 11904: 0x87CB,
+ 35728 - 11904: 0x8FE7,
+ 35730 - 11904: 0xC5FE,
+ 35731 - 11904: 0xC5FD,
+ 35732 - 11904: 0xF8C1,
+ 35733 - 11904: 0xF8C2,
+ 35734 - 11904: 0xC640,
+ 35736 - 11904: 0xF94D,
+ 35737 - 11904: 0xF94E,
+ 35738 - 11904: 0xC667,
+ 35739 - 11904: 0x8FE8,
+ 35740 - 11904: 0xC66D,
+ 35742 - 11904: 0xF9A9,
+ 35743 - 11904: 0xF9C8,
+ 35744 - 11904: 0x8BE7,
+ 35774 - 11904: 0x897A,
+ 35810 - 11904: 0x897B,
+ 35895 - 11904: 0xA8A6,
+ 35897 - 11904: 0xD7CD,
+ 35899 - 11904: 0xD7CE,
+ 35900 - 11904: 0xE052,
+ 35901 - 11904: 0xE450,
+ 35902 - 11904: 0xE7E5,
+ 35903 - 11904: 0xC1C6,
+ 35905 - 11904: 0xC1C5,
+ 35906 - 11904: 0xF0EE,
+ 35907 - 11904: 0xF344,
+ 35909 - 11904: 0xF844,
+ 35910 - 11904: 0xA8A7,
+ 35911 - 11904: 0xD3DE,
+ 35912 - 11904: 0xB05A,
+ 35913 - 11904: 0xB361,
+ 35914 - 11904: 0xE054,
+ 35915 - 11904: 0xE053,
+ 35916 - 11904: 0xBDDC,
+ 35917 - 11904: 0xE7E6,
+ 35918 - 11904: 0xBDDD,
+ 35919 - 11904: 0xEEB1,
+ 35920 - 11904: 0xC2D7,
+ 35921 - 11904: 0x99DA,
+ 35924 - 11904: 0xC676,
+ 35925 - 11904: 0xA8A8,
+ 35926 - 11904: 0xCDCB,
+ 35927 - 11904: 0xD3DF,
+ 35930 - 11904: 0xB362,
+ 35932 - 11904: 0xD7CF,
+ 35933 - 11904: 0xD7D0,
+ 35935 - 11904: 0xDBE5,
+ 35937 - 11904: 0xB648,
+ 35938 - 11904: 0xB8E6,
+ 35940 - 11904: 0xE056,
+ 35941 - 11904: 0xE055,
+ 35942 - 11904: 0xE057,
+ 35944 - 11904: 0xE451,
+ 35945 - 11904: 0xE452,
+ 35946 - 11904: 0xBBA8,
+ 35947 - 11904: 0xBFDD,
+ 35948 - 11904: 0xBDDE,
+ 35949 - 11904: 0xBFDE,
+ 35951 - 11904: 0xEEB5,
+ 35952 - 11904: 0xEEB2,
+ 35953 - 11904: 0xEEB4,
+ 35954 - 11904: 0xEEB3,
+ 35955 - 11904: 0xC1C7,
+ 35957 - 11904: 0xF0EF,
+ 35958 - 11904: 0xF346,
+ 35959 - 11904: 0xF345,
+ 35960 - 11904: 0xCBA4,
+ 35961 - 11904: 0xB05C,
+ 35962 - 11904: 0xB05B,
+ 35963 - 11904: 0xD3E0,
+ 35965 - 11904: 0xD7D1,
+ 35968 - 11904: 0xDBE7,
+ 35969 - 11904: 0xDBE6,
+ 35970 - 11904: 0xB649,
+ 35972 - 11904: 0xE059,
+ 35973 - 11904: 0xE05A,
+ 35974 - 11904: 0xE058,
+ 35977 - 11904: 0xB8E8,
+ 35978 - 11904: 0xB8E7,
+ 35980 - 11904: 0xBBAA,
+ 35981 - 11904: 0xBBA9,
+ 35983 - 11904: 0xE7E7,
+ 35984 - 11904: 0xEBB3,
+ 35985 - 11904: 0xEBB1,
+ 35986 - 11904: 0xEBB2,
+ 35987 - 11904: 0xBFDF,
+ 35988 - 11904: 0xEEB7,
+ 35989 - 11904: 0xEEB6,
+ 35991 - 11904: 0xF0F2,
+ 35992 - 11904: 0xF0F1,
+ 35993 - 11904: 0xF0F0,
+ 35994 - 11904: 0xF347,
+ 35995 - 11904: 0x8FED,
+ 35996 - 11904: 0xF9AA,
+ 35997 - 11904: 0xA8A9,
+ 35998 - 11904: 0xAD73,
+ 35999 - 11904: 0x95C0,
+ 36000 - 11904: 0xAD74,
+ 36001 - 11904: 0xB05D,
+ 36002 - 11904: 0xB05E,
+ 36003 - 11904: 0xD3E2,
+ 36004 - 11904: 0xD3E1,
+ 36005 - 11904: 0xD7D2,
+ 36007 - 11904: 0xB368,
+ 36008 - 11904: 0xB366,
+ 36009 - 11904: 0xB363,
+ 36010 - 11904: 0xB367,
+ 36011 - 11904: 0xB365,
+ 36012 - 11904: 0xB364,
+ 36013 - 11904: 0xA0CB,
+ 36015 - 11904: 0xB64A,
+ 36016 - 11904: 0xDBEA,
+ 36018 - 11904: 0xB8ED,
+ 36019 - 11904: 0xB64C,
+ 36020 - 11904: 0xB651,
+ 36021 - 11904: 0xDBEC,
+ 36022 - 11904: 0xB653,
+ 36023 - 11904: 0xB652,
+ 36024 - 11904: 0xB655,
+ 36025 - 11904: 0xDBEB,
+ 36026 - 11904: 0xDBE8,
+ 36027 - 11904: 0xB64F,
+ 36028 - 11904: 0xB64B,
+ 36029 - 11904: 0xB64D,
+ 36030 - 11904: 0xDBE9,
+ 36031 - 11904: 0xB654,
+ 36032 - 11904: 0xB650,
+ 36033 - 11904: 0xB64E,
+ 36034 - 11904: 0xB8EF,
+ 36035 - 11904: 0xB8EE,
+ 36036 - 11904: 0xB8EC,
+ 36037 - 11904: 0xB8F0,
+ 36039 - 11904: 0xB8EA,
+ 36040 - 11904: 0xB8EB,
+ 36042 - 11904: 0xB8E9,
+ 36044 - 11904: 0xE05B,
+ 36045 - 11904: 0x9E48,
+ 36047 - 11904: 0xE454,
+ 36049 - 11904: 0xBBAC,
+ 36050 - 11904: 0xBBAD,
+ 36051 - 11904: 0xBBAB,
+ 36052 - 11904: 0x99DB,
+ 36053 - 11904: 0xE453,
+ 36054 - 11904: 0x8FF3,
+ 36055 - 11904: 0xE455,
+ 36057 - 11904: 0xE7EA,
+ 36058 - 11904: 0xE7EC,
+ 36059 - 11904: 0x8FF9,
+ 36060 - 11904: 0xBDE7,
+ 36061 - 11904: 0xE7ED,
+ 36062 - 11904: 0xBDE0,
+ 36063 - 11904: 0xE7E9,
+ 36064 - 11904: 0xBDDF,
+ 36065 - 11904: 0xBDE9,
+ 36066 - 11904: 0xBDE5,
+ 36067 - 11904: 0xBDE6,
+ 36068 - 11904: 0xBDE2,
+ 36069 - 11904: 0xE7E8,
+ 36070 - 11904: 0xBDE1,
+ 36071 - 11904: 0xE7EE,
+ 36072 - 11904: 0xE7EB,
+ 36073 - 11904: 0x95C1,
+ 36074 - 11904: 0xBDE8,
+ 36075 - 11904: 0xA04E,
+ 36076 - 11904: 0xBDE3,
+ 36077 - 11904: 0xBDE4,
+ 36078 - 11904: 0xEBB5,
+ 36080 - 11904: 0xEBB7,
+ 36081 - 11904: 0xEBB6,
+ 36082 - 11904: 0x99DC,
+ 36083 - 11904: 0xEBB8,
+ 36084 - 11904: 0xBFE0,
+ 36085 - 11904: 0xEBB4,
+ 36087 - 11904: 0xA064,
+ 36088 - 11904: 0xC1CB,
+ 36089 - 11904: 0xEEB8,
+ 36090 - 11904: 0xC1C8,
+ 36091 - 11904: 0xC1CC,
+ 36092 - 11904: 0xC1CA,
+ 36093 - 11904: 0xC1C9,
+ 36094 - 11904: 0xF0F3,
+ 36096 - 11904: 0xF0F6,
+ 36098 - 11904: 0xF0F5,
+ 36099 - 11904: 0x8FF7,
+ 36100 - 11904: 0xF0F4,
+ 36101 - 11904: 0xC2D8,
+ 36102 - 11904: 0xF348,
+ 36103 - 11904: 0xF349,
+ 36104 - 11904: 0xC3D8,
+ 36105 - 11904: 0xF34A,
+ 36106 - 11904: 0xC3D9,
+ 36107 - 11904: 0x89B0,
+ 36108 - 11904: 0xA048,
+ 36109 - 11904: 0xC4BA,
+ 36111 - 11904: 0xC4B9,
+ 36112 - 11904: 0xF652,
+ 36113 - 11904: 0x8FFB,
+ 36114 - 11904: 0x8FF6,
+ 36115 - 11904: 0xC542,
+ 36116 - 11904: 0xF653,
+ 36117 - 11904: 0xF75C,
+ 36118 - 11904: 0xC5AB,
+ 36119 - 11904: 0xC5AC,
+ 36120 - 11904: 0x9DDC,
+ 36121 - 11904: 0xF845,
+ 36123 - 11904: 0xC642,
+ 36124 - 11904: 0x99DD,
+ 36125 - 11904: 0x8BE8,
+ 36196 - 11904: 0xA8AA,
+ 36198 - 11904: 0xB36A,
+ 36199 - 11904: 0xB369,
+ 36200 - 11904: 0xE05C,
+ 36201 - 11904: 0xE05D,
+ 36203 - 11904: 0xBBAE,
+ 36204 - 11904: 0xEBB9,
+ 36205 - 11904: 0xBDEA,
+ 36206 - 11904: 0xEBBA,
+ 36207 - 11904: 0xEEB9,
+ 36208 - 11904: 0xA8AB,
+ 36210 - 11904: 0xD0B2,
+ 36211 - 11904: 0xAD76,
+ 36212 - 11904: 0xAD75,
+ 36214 - 11904: 0xD3E3,
+ 36215 - 11904: 0xB05F,
+ 36216 - 11904: 0xD3E4,
+ 36217 - 11904: 0xD7D5,
+ 36218 - 11904: 0x92C1,
+ 36219 - 11904: 0xD7D4,
+ 36221 - 11904: 0xD7D3,
+ 36224 - 11904: 0xDBEE,
+ 36225 - 11904: 0xB658,
+ 36226 - 11904: 0x9FD6,
+ 36228 - 11904: 0xDBED,
+ 36229 - 11904: 0xB657,
+ 36233 - 11904: 0xDBEF,
+ 36234 - 11904: 0xB656,
+ 36236 - 11904: 0xE05F,
+ 36237 - 11904: 0xE062,
+ 36238 - 11904: 0xE060,
+ 36239 - 11904: 0xE061,
+ 36240 - 11904: 0xE065,
+ 36241 - 11904: 0xE05E,
+ 36242 - 11904: 0xE066,
+ 36243 - 11904: 0xE063,
+ 36244 - 11904: 0xE064,
+ 36245 - 11904: 0xBBB0,
+ 36246 - 11904: 0xE456,
+ 36249 - 11904: 0xBBAF,
+ 36251 - 11904: 0xE7F2,
+ 36252 - 11904: 0xE7F0,
+ 36255 - 11904: 0xBDEB,
+ 36256 - 11904: 0xE7EF,
+ 36257 - 11904: 0xE7F1,
+ 36259 - 11904: 0xBDEC,
+ 36261 - 11904: 0xEBBB,
+ 36262 - 11904: 0xA0D2,
+ 36263 - 11904: 0xEBBC,
+ 36264 - 11904: 0xC1CD,
+ 36265 - 11904: 0x9040,
+ 36266 - 11904: 0xF34C,
+ 36267 - 11904: 0xF34E,
+ 36268 - 11904: 0xF34B,
+ 36269 - 11904: 0xF34D,
+ 36270 - 11904: 0xF4D6,
+ 36271 - 11904: 0xF654,
+ 36274 - 11904: 0xF96F,
+ 36275 - 11904: 0xA8AC,
+ 36276 - 11904: 0xAD77,
+ 36277 - 11904: 0xD3E5,
+ 36278 - 11904: 0xD3E7,
+ 36279 - 11904: 0xD3E6,
+ 36281 - 11904: 0xD7D8,
+ 36282 - 11904: 0xB36C,
+ 36284 - 11904: 0xD7D6,
+ 36286 - 11904: 0xB36B,
+ 36287 - 11904: 0xD7D9,
+ 36288 - 11904: 0x8AC4,
+ 36289 - 11904: 0xD7DA,
+ 36290 - 11904: 0xD7D7,
+ 36291 - 11904: 0x99E0,
+ 36293 - 11904: 0xDBFB,
+ 36294 - 11904: 0xB660,
+ 36295 - 11904: 0xDBF3,
+ 36296 - 11904: 0xDBF9,
+ 36299 - 11904: 0xB65B,
+ 36300 - 11904: 0xB65E,
+ 36301 - 11904: 0xDBF2,
+ 36302 - 11904: 0xB659,
+ 36303 - 11904: 0xDBF6,
+ 36304 - 11904: 0xE06C,
+ 36305 - 11904: 0xB65D,
+ 36307 - 11904: 0xDBF1,
+ 36308 - 11904: 0x9FF0,
+ 36309 - 11904: 0xDBF7,
+ 36310 - 11904: 0xDBF4,
+ 36311 - 11904: 0xDBFA,
+ 36312 - 11904: 0xDBF0,
+ 36313 - 11904: 0xDBF8,
+ 36314 - 11904: 0xB65C,
+ 36315 - 11904: 0xB65F,
+ 36316 - 11904: 0xDBF5,
+ 36317 - 11904: 0xB65A,
+ 36319 - 11904: 0xB8F2,
+ 36320 - 11904: 0xE068,
+ 36321 - 11904: 0xB8F1,
+ 36322 - 11904: 0xE06F,
+ 36323 - 11904: 0xE06E,
+ 36324 - 11904: 0xB8F8,
+ 36326 - 11904: 0xB8F9,
+ 36327 - 11904: 0xE070,
+ 36328 - 11904: 0xB8F3,
+ 36329 - 11904: 0xE06D,
+ 36330 - 11904: 0xB8F7,
+ 36331 - 11904: 0xE072,
+ 36332 - 11904: 0xE069,
+ 36334 - 11904: 0xE06B,
+ 36335 - 11904: 0xB8F4,
+ 36336 - 11904: 0xE067,
+ 36337 - 11904: 0xE06A,
+ 36338 - 11904: 0xE071,
+ 36339 - 11904: 0xB8F5,
+ 36340 - 11904: 0xE073,
+ 36346 - 11904: 0xB8F6,
+ 36348 - 11904: 0xBBB1,
+ 36349 - 11904: 0xE45B,
+ 36350 - 11904: 0xE461,
+ 36351 - 11904: 0xE459,
+ 36352 - 11904: 0xE462,
+ 36353 - 11904: 0x9FF3,
+ 36354 - 11904: 0xE458,
+ 36355 - 11904: 0xE45D,
+ 36356 - 11904: 0xE463,
+ 36357 - 11904: 0xE460,
+ 36358 - 11904: 0xE45F,
+ 36359 - 11904: 0xE45E,
+ 36361 - 11904: 0xE457,
+ 36362 - 11904: 0xE45C,
+ 36365 - 11904: 0xE45A,
+ 36366 - 11904: 0x9DBF,
+ 36367 - 11904: 0xBDF1,
+ 36368 - 11904: 0xBDEE,
+ 36369 - 11904: 0xE7FB,
+ 36370 - 11904: 0xE841,
+ 36371 - 11904: 0xE843,
+ 36372 - 11904: 0xE840,
+ 36373 - 11904: 0xE7F8,
+ 36374 - 11904: 0xE7FA,
+ 36375 - 11904: 0xE845,
+ 36376 - 11904: 0xE842,
+ 36377 - 11904: 0xE7FC,
+ 36378 - 11904: 0xE846,
+ 36379 - 11904: 0xE7F9,
+ 36380 - 11904: 0xE844,
+ 36381 - 11904: 0xBDEF,
+ 36382 - 11904: 0xBDF5,
+ 36383 - 11904: 0xBDF3,
+ 36384 - 11904: 0xE7F3,
+ 36385 - 11904: 0xBDF4,
+ 36386 - 11904: 0xBDF0,
+ 36387 - 11904: 0xE7F4,
+ 36388 - 11904: 0xE7F6,
+ 36389 - 11904: 0xE7F5,
+ 36390 - 11904: 0xE7FD,
+ 36391 - 11904: 0xE7FE,
+ 36392 - 11904: 0x9FF6,
+ 36393 - 11904: 0xBDF2,
+ 36394 - 11904: 0x95C8,
+ 36395 - 11904: 0xBDED,
+ 36397 - 11904: 0x9E5A,
+ 36398 - 11904: 0xE7F7,
+ 36400 - 11904: 0xEBC6,
+ 36401 - 11904: 0xBFE2,
+ 36403 - 11904: 0xEBBD,
+ 36404 - 11904: 0xBFE3,
+ 36405 - 11904: 0xBFE6,
+ 36406 - 11904: 0xEBC2,
+ 36408 - 11904: 0xEBBF,
+ 36409 - 11904: 0xBFE5,
+ 36410 - 11904: 0x99E3,
+ 36412 - 11904: 0xEBC3,
+ 36413 - 11904: 0xEBC4,
+ 36414 - 11904: 0xEBBE,
+ 36415 - 11904: 0xEBC7,
+ 36416 - 11904: 0xEBC0,
+ 36417 - 11904: 0xEBC5,
+ 36418 - 11904: 0xBFE4,
+ 36420 - 11904: 0xBFE1,
+ 36421 - 11904: 0xEBC1,
+ 36422 - 11904: 0x8A4A,
+ 36423 - 11904: 0xEEBF,
+ 36424 - 11904: 0xC1D0,
+ 36425 - 11904: 0xC1CE,
+ 36426 - 11904: 0xC1D1,
+ 36427 - 11904: 0xC1CF,
+ 36428 - 11904: 0xEEBE,
+ 36429 - 11904: 0xEEBB,
+ 36430 - 11904: 0xEEBA,
+ 36431 - 11904: 0x9FF1,
+ 36432 - 11904: 0xEEBD,
+ 36435 - 11904: 0xEEBC,
+ 36436 - 11904: 0xF145,
+ 36437 - 11904: 0xC2DE,
+ 36438 - 11904: 0xF0FB,
+ 36439 - 11904: 0xF0FA,
+ 36441 - 11904: 0xC2D9,
+ 36442 - 11904: 0xF141,
+ 36443 - 11904: 0xF140,
+ 36444 - 11904: 0xF0F7,
+ 36445 - 11904: 0xF143,
+ 36446 - 11904: 0xF0FC,
+ 36447 - 11904: 0xC2DD,
+ 36448 - 11904: 0xF0F9,
+ 36449 - 11904: 0xF142,
+ 36450 - 11904: 0xF0F8,
+ 36451 - 11904: 0xC2DA,
+ 36452 - 11904: 0xC2DC,
+ 36453 - 11904: 0xF0FD,
+ 36454 - 11904: 0xC2DB,
+ 36455 - 11904: 0xF0FE,
+ 36456 - 11904: 0x8AA7,
+ 36457 - 11904: 0xF144,
+ 36458 - 11904: 0xF352,
+ 36460 - 11904: 0xC3DE,
+ 36461 - 11904: 0xF34F,
+ 36463 - 11904: 0xF353,
+ 36465 - 11904: 0x99E6,
+ 36466 - 11904: 0xC3DB,
+ 36467 - 11904: 0xF351,
+ 36468 - 11904: 0xC3E0,
+ 36469 - 11904: 0x9FF7,
+ 36470 - 11904: 0xC3DD,
+ 36471 - 11904: 0x9FED,
+ 36472 - 11904: 0xF350,
+ 36474 - 11904: 0xC3DF,
+ 36475 - 11904: 0xF354,
+ 36476 - 11904: 0xC3DA,
+ 36478 - 11904: 0x8A5C,
+ 36480 - 11904: 0x9DAE,
+ 36481 - 11904: 0xC4BC,
+ 36482 - 11904: 0xC4BE,
+ 36484 - 11904: 0xF4D9,
+ 36485 - 11904: 0xC4BD,
+ 36486 - 11904: 0xF4D7,
+ 36487 - 11904: 0xC3DC,
+ 36488 - 11904: 0xF4D8,
+ 36489 - 11904: 0xC4BB,
+ 36490 - 11904: 0xC543,
+ 36491 - 11904: 0xC545,
+ 36492 - 11904: 0xF656,
+ 36493 - 11904: 0xC544,
+ 36494 - 11904: 0xF655,
+ 36496 - 11904: 0xF761,
+ 36497 - 11904: 0xC5AD,
+ 36498 - 11904: 0xF760,
+ 36499 - 11904: 0xC5AE,
+ 36500 - 11904: 0xF75E,
+ 36501 - 11904: 0xF75D,
+ 36502 - 11904: 0xF762,
+ 36503 - 11904: 0xF763,
+ 36504 - 11904: 0xF846,
+ 36506 - 11904: 0xF75F,
+ 36509 - 11904: 0xF8C6,
+ 36510 - 11904: 0xF8C3,
+ 36511 - 11904: 0xF8C4,
+ 36512 - 11904: 0xF8C5,
+ 36513 - 11904: 0xC65C,
+ 36515 - 11904: 0xF951,
+ 36516 - 11904: 0xF950,
+ 36517 - 11904: 0xF94F,
+ 36518 - 11904: 0xF970,
+ 36519 - 11904: 0x95C9,
+ 36520 - 11904: 0xF9BE,
+ 36521 - 11904: 0xF9AB,
+ 36522 - 11904: 0xC66E,
+ 36523 - 11904: 0xA8AD,
+ 36524 - 11904: 0xB060,
+ 36525 - 11904: 0x9048,
+ 36528 - 11904: 0x99E8,
+ 36530 - 11904: 0xB8FA,
+ 36534 - 11904: 0x9049,
+ 36537 - 11904: 0x8CBA,
+ 36538 - 11904: 0xBDF6,
+ 36540 - 11904: 0x90B1,
+ 36541 - 11904: 0xEBC8,
+ 36544 - 11904: 0xC2DF,
+ 36546 - 11904: 0xF355,
+ 36547 - 11904: 0x904A,
+ 36553 - 11904: 0xF9AC,
+ 36554 - 11904: 0xA8AE,
+ 36555 - 11904: 0xAAEE,
+ 36556 - 11904: 0xAD79,
+ 36557 - 11904: 0xAD78,
+ 36558 - 11904: 0x99EA,
+ 36559 - 11904: 0xB063,
+ 36561 - 11904: 0xD3E8,
+ 36562 - 11904: 0xB061,
+ 36563 - 11904: 0xD3E9,
+ 36564 - 11904: 0xB062,
+ 36567 - 11904: 0xD7DF,
+ 36568 - 11904: 0xD7DB,
+ 36570 - 11904: 0x9BD1,
+ 36571 - 11904: 0xB36D,
+ 36572 - 11904: 0xD7DE,
+ 36573 - 11904: 0xD7DD,
+ 36574 - 11904: 0xD7DC,
+ 36575 - 11904: 0xB36E,
+ 36576 - 11904: 0xD7E0,
+ 36577 - 11904: 0xD7E1,
+ 36578 - 11904: 0x99EB,
+ 36580 - 11904: 0x99EC,
+ 36581 - 11904: 0xDC43,
+ 36582 - 11904: 0xDC41,
+ 36583 - 11904: 0xDC45,
+ 36584 - 11904: 0xDC46,
+ 36585 - 11904: 0xDC4C,
+ 36587 - 11904: 0xDC48,
+ 36588 - 11904: 0xDC4A,
+ 36589 - 11904: 0x99ED,
+ 36590 - 11904: 0xDC42,
+ 36591 - 11904: 0xDBFC,
+ 36593 - 11904: 0xDC49,
+ 36594 - 11904: 0x99EE,
+ 36596 - 11904: 0xDC4B,
+ 36597 - 11904: 0xDC44,
+ 36598 - 11904: 0xDC47,
+ 36599 - 11904: 0xDBFD,
+ 36600 - 11904: 0xB662,
+ 36601 - 11904: 0xDC40,
+ 36602 - 11904: 0xDBFE,
+ 36603 - 11904: 0xB661,
+ 36604 - 11904: 0xB663,
+ 36606 - 11904: 0xB8FD,
+ 36607 - 11904: 0xE075,
+ 36608 - 11904: 0xE077,
+ 36609 - 11904: 0xE076,
+ 36610 - 11904: 0xE07B,
+ 36611 - 11904: 0xB8FB,
+ 36613 - 11904: 0xE078,
+ 36614 - 11904: 0xE074,
+ 36615 - 11904: 0xE079,
+ 36616 - 11904: 0xE07A,
+ 36617 - 11904: 0xB8FC,
+ 36618 - 11904: 0xB8FE,
+ 36619 - 11904: 0xE07C,
+ 36621 - 11904: 0xE467,
+ 36622 - 11904: 0xE466,
+ 36624 - 11904: 0xE464,
+ 36625 - 11904: 0xE465,
+ 36626 - 11904: 0xBBB3,
+ 36627 - 11904: 0xBBB5,
+ 36628 - 11904: 0xBBB2,
+ 36629 - 11904: 0xBBB4,
+ 36630 - 11904: 0xE84D,
+ 36631 - 11904: 0xE84E,
+ 36632 - 11904: 0xE849,
+ 36633 - 11904: 0x904C,
+ 36634 - 11904: 0xE84A,
+ 36635 - 11904: 0xBDF8,
+ 36636 - 11904: 0xBDFD,
+ 36637 - 11904: 0xBDF7,
+ 36638 - 11904: 0xBDFE,
+ 36639 - 11904: 0xBDF9,
+ 36640 - 11904: 0xE84B,
+ 36643 - 11904: 0xE84C,
+ 36644 - 11904: 0xE848,
+ 36645 - 11904: 0xBE40,
+ 36646 - 11904: 0xBDFB,
+ 36649 - 11904: 0xBDFA,
+ 36650 - 11904: 0xBDFC,
+ 36652 - 11904: 0xE847,
+ 36653 - 11904: 0x904D,
+ 36654 - 11904: 0xEBCA,
+ 36655 - 11904: 0xBFE8,
+ 36656 - 11904: 0x95CB,
+ 36658 - 11904: 0xEBCC,
+ 36659 - 11904: 0xBFEA,
+ 36660 - 11904: 0xEBCF,
+ 36661 - 11904: 0xEBCB,
+ 36662 - 11904: 0xEBC9,
+ 36663 - 11904: 0xEBCE,
+ 36664 - 11904: 0xBFE9,
+ 36665 - 11904: 0xEBCD,
+ 36667 - 11904: 0xBFE7,
+ 36670 - 11904: 0xC1D3,
+ 36671 - 11904: 0xC1D6,
+ 36672 - 11904: 0xEEC1,
+ 36673 - 11904: 0x97E2,
+ 36674 - 11904: 0xC1D4,
+ 36675 - 11904: 0xEEC0,
+ 36676 - 11904: 0xC1D2,
+ 36677 - 11904: 0xC1D5,
+ 36678 - 11904: 0xF146,
+ 36679 - 11904: 0xF147,
+ 36680 - 11904: 0xF148,
+ 36681 - 11904: 0xC2E0,
+ 36682 - 11904: 0x95CC,
+ 36683 - 11904: 0xF149,
+ 36685 - 11904: 0xC2E1,
+ 36686 - 11904: 0xC3E2,
+ 36687 - 11904: 0xF358,
+ 36688 - 11904: 0xF359,
+ 36689 - 11904: 0xF357,
+ 36690 - 11904: 0xF356,
+ 36691 - 11904: 0xF35A,
+ 36692 - 11904: 0xC3E1,
+ 36693 - 11904: 0xF4DD,
+ 36694 - 11904: 0xF4DB,
+ 36695 - 11904: 0xF4DC,
+ 36696 - 11904: 0xF4DE,
+ 36697 - 11904: 0xF4DA,
+ 36698 - 11904: 0xF4DF,
+ 36699 - 11904: 0xF658,
+ 36700 - 11904: 0x9F78,
+ 36701 - 11904: 0xF659,
+ 36702 - 11904: 0xF657,
+ 36703 - 11904: 0xC546,
+ 36704 - 11904: 0xF764,
+ 36705 - 11904: 0xC5AF,
+ 36706 - 11904: 0xF765,
+ 36707 - 11904: 0xF848,
+ 36708 - 11904: 0xF847,
+ 36710 - 11904: 0x897C,
+ 36711 - 11904: 0x897D,
+ 36718 - 11904: 0x897E,
+ 36755 - 11904: 0x995D,
+ 36763 - 11904: 0xA8AF,
+ 36764 - 11904: 0xB664,
+ 36767 - 11904: 0xB940,
+ 36768 - 11904: 0x9B5A,
+ 36771 - 11904: 0xBBB6,
+ 36773 - 11904: 0x9050,
+ 36774 - 11904: 0xBFEC,
+ 36775 - 11904: 0x8C4F,
+ 36776 - 11904: 0xBFEB,
+ 36781 - 11904: 0xC3E3,
+ 36782 - 11904: 0xC47C,
+ 36783 - 11904: 0xC547,
+ 36784 - 11904: 0xA8B0,
+ 36785 - 11904: 0xB064,
+ 36786 - 11904: 0xB941,
+ 36787 - 11904: 0x9054,
+ 36788 - 11904: 0xF35B,
+ 36789 - 11904: 0xC6D6,
+ 36790 - 11904: 0x9AA8,
+ 36791 - 11904: 0x99EF,
+ 36792 - 11904: 0xFEEB,
+ 36793 - 11904: 0x9DA3,
+ 36794 - 11904: 0x9DA1,
+ 36795 - 11904: 0x9943,
+ 36796 - 11904: 0x9945,
+ 36798 - 11904: 0x9D7D,
+ 36799 - 11904: 0xCBA6,
+ 36801 - 11904: 0x99F0,
+ 36802 - 11904: 0xA8B1,
+ 36804 - 11904: 0xA8B4,
+ 36805 - 11904: 0xA8B3,
+ 36806 - 11904: 0xA8B2,
+ 36809 - 11904: 0xCBA5,
+ 36810 - 11904: 0x99F1,
+ 36811 - 11904: 0xCDCD,
+ 36812 - 11904: 0x99F2,
+ 36813 - 11904: 0xCDCF,
+ 36814 - 11904: 0xAAEF,
+ 36815 - 11904: 0x8CBC,
+ 36816 - 11904: 0x9D60,
+ 36817 - 11904: 0xAAF1,
+ 36818 - 11904: 0xCDCC,
+ 36819 - 11904: 0xCDCE,
+ 36820 - 11904: 0xAAF0,
+ 36821 - 11904: 0xCDD1,
+ 36822 - 11904: 0xCDD0,
+ 36823 - 11904: 0xCDD2,
+ 36826 - 11904: 0xA0A3,
+ 36832 - 11904: 0xD0B6,
+ 36833 - 11904: 0xD0B4,
+ 36834 - 11904: 0xAD7C,
+ 36835 - 11904: 0xD0B3,
+ 36836 - 11904: 0xADA3,
+ 36837 - 11904: 0xAD7E,
+ 36838 - 11904: 0xAD7B,
+ 36840 - 11904: 0xADA4,
+ 36842 - 11904: 0xAD7D,
+ 36843 - 11904: 0xADA2,
+ 36845 - 11904: 0xADA1,
+ 36846 - 11904: 0xD0B5,
+ 36848 - 11904: 0xAD7A,
+ 36852 - 11904: 0xB06A,
+ 36853 - 11904: 0xD3EB,
+ 36854 - 11904: 0xD3F1,
+ 36855 - 11904: 0xB067,
+ 36856 - 11904: 0xB06E,
+ 36857 - 11904: 0x905B,
+ 36858 - 11904: 0xB069,
+ 36859 - 11904: 0xD3EE,
+ 36860 - 11904: 0xD3F0,
+ 36861 - 11904: 0xB06C,
+ 36862 - 11904: 0xD3EA,
+ 36863 - 11904: 0xD3ED,
+ 36864 - 11904: 0xB068,
+ 36865 - 11904: 0xB065,
+ 36866 - 11904: 0xD3EC,
+ 36867 - 11904: 0xB06B,
+ 36868 - 11904: 0xD3EF,
+ 36869 - 11904: 0xB06D,
+ 36870 - 11904: 0xB066,
+ 36872 - 11904: 0x9EDB,
+ 36875 - 11904: 0xD7E3,
+ 36876 - 11904: 0xD7E6,
+ 36877 - 11904: 0xB370,
+ 36879 - 11904: 0xB37A,
+ 36880 - 11904: 0xB376,
+ 36881 - 11904: 0xD7E4,
+ 36882 - 11904: 0x9D79,
+ 36884 - 11904: 0xB37E,
+ 36885 - 11904: 0xB377,
+ 36886 - 11904: 0xB37C,
+ 36887 - 11904: 0xB372,
+ 36889 - 11904: 0xB36F,
+ 36890 - 11904: 0xB371,
+ 36891 - 11904: 0xB37D,
+ 36892 - 11904: 0xD7E5,
+ 36893 - 11904: 0xB375,
+ 36894 - 11904: 0xB378,
+ 36895 - 11904: 0xB374,
+ 36896 - 11904: 0xB379,
+ 36897 - 11904: 0xD7E7,
+ 36898 - 11904: 0xB37B,
+ 36899 - 11904: 0xB373,
+ 36900 - 11904: 0xD7E2,
+ 36909 - 11904: 0xDC4D,
+ 36910 - 11904: 0xB665,
+ 36911 - 11904: 0xDC4F,
+ 36913 - 11904: 0xB667,
+ 36914 - 11904: 0xB669,
+ 36915 - 11904: 0x99F3,
+ 36916 - 11904: 0xDC4E,
+ 36917 - 11904: 0xB666,
+ 36918 - 11904: 0xB66A,
+ 36919 - 11904: 0x9062,
+ 36920 - 11904: 0xB668,
+ 36924 - 11904: 0xB947,
+ 36925 - 11904: 0xE0A3,
+ 36926 - 11904: 0xB94F,
+ 36927 - 11904: 0xE07E,
+ 36929 - 11904: 0xB950,
+ 36930 - 11904: 0xB945,
+ 36932 - 11904: 0xE0A1,
+ 36934 - 11904: 0x87BD,
+ 36935 - 11904: 0xB94A,
+ 36937 - 11904: 0xE0A2,
+ 36938 - 11904: 0xB943,
+ 36939 - 11904: 0xB942,
+ 36940 - 11904: 0x9F55,
+ 36941 - 11904: 0xB94D,
+ 36942 - 11904: 0xB94C,
+ 36943 - 11904: 0xB94B,
+ 36944 - 11904: 0xB949,
+ 36945 - 11904: 0xB94E,
+ 36946 - 11904: 0xE07D,
+ 36947 - 11904: 0xB944,
+ 36948 - 11904: 0xB946,
+ 36949 - 11904: 0xB948,
+ 36950 - 11904: 0x9BF9,
+ 36952 - 11904: 0xBBB8,
+ 36953 - 11904: 0xBBBB,
+ 36955 - 11904: 0xBBBF,
+ 36956 - 11904: 0xBBB9,
+ 36957 - 11904: 0xBBBE,
+ 36958 - 11904: 0xBBBC,
+ 36960 - 11904: 0xBBB7,
+ 36961 - 11904: 0x9065,
+ 36962 - 11904: 0xBBBD,
+ 36963 - 11904: 0xBBBA,
+ 36964 - 11904: 0x96E0,
+ 36967 - 11904: 0xE852,
+ 36968 - 11904: 0xBE43,
+ 36969 - 11904: 0xBE41,
+ 36971 - 11904: 0xE853,
+ 36972 - 11904: 0x98BE,
+ 36973 - 11904: 0xBE44,
+ 36974 - 11904: 0xBE42,
+ 36975 - 11904: 0xE851,
+ 36976 - 11904: 0xE850,
+ 36978 - 11904: 0xBFF0,
+ 36979 - 11904: 0xE84F,
+ 36980 - 11904: 0xBFEE,
+ 36981 - 11904: 0xBFED,
+ 36982 - 11904: 0xEBD0,
+ 36983 - 11904: 0xBE45,
+ 36984 - 11904: 0xBFEF,
+ 36985 - 11904: 0xEBD1,
+ 36986 - 11904: 0xBFF2,
+ 36987 - 11904: 0xEBD2,
+ 36988 - 11904: 0xBFF1,
+ 36989 - 11904: 0xC1D8,
+ 36990 - 11904: 0xEEC3,
+ 36991 - 11904: 0xC1D7,
+ 36992 - 11904: 0xC1DC,
+ 36993 - 11904: 0xC1DA,
+ 36994 - 11904: 0xC1DB,
+ 36995 - 11904: 0xC2E3,
+ 36996 - 11904: 0xC1D9,
+ 36997 - 11904: 0xEEC2,
+ 36998 - 11904: 0xEBD3,
+ 36999 - 11904: 0xC2E2,
+ 37000 - 11904: 0xC2E4,
+ 37002 - 11904: 0xC3E4,
+ 37003 - 11904: 0xC3E5,
+ 37005 - 11904: 0xF4E0,
+ 37007 - 11904: 0xC5DE,
+ 37008 - 11904: 0xC5DD,
+ 37009 - 11904: 0xA8B6,
+ 37012 - 11904: 0xCA55,
+ 37013 - 11904: 0xB06F,
+ 37015 - 11904: 0xCA52,
+ 37016 - 11904: 0xCA53,
+ 37017 - 11904: 0xCA51,
+ 37019 - 11904: 0xCA54,
+ 37022 - 11904: 0xCBAA,
+ 37023 - 11904: 0xCBA7,
+ 37024 - 11904: 0xCBAC,
+ 37025 - 11904: 0xCBA8,
+ 37026 - 11904: 0xA8B7,
+ 37027 - 11904: 0xA8BA,
+ 37029 - 11904: 0xCBA9,
+ 37030 - 11904: 0xA8B9,
+ 37031 - 11904: 0xCBAB,
+ 37032 - 11904: 0x9068,
+ 37034 - 11904: 0xA8B8,
+ 37038 - 11904: 0x906C,
+ 37039 - 11904: 0xCDD5,
+ 37040 - 11904: 0xCDD7,
+ 37041 - 11904: 0xAAF4,
+ 37042 - 11904: 0xCDD3,
+ 37043 - 11904: 0xCDD6,
+ 37044 - 11904: 0xCDD4,
+ 37045 - 11904: 0xAAF2,
+ 37046 - 11904: 0xAAF5,
+ 37048 - 11904: 0xAAF3,
+ 37051 - 11904: 0x95D8,
+ 37053 - 11904: 0xD0B8,
+ 37054 - 11904: 0xD0BC,
+ 37055 - 11904: 0xD0B9,
+ 37057 - 11904: 0xADA7,
+ 37059 - 11904: 0xADA8,
+ 37060 - 11904: 0x906A,
+ 37061 - 11904: 0xD0BB,
+ 37063 - 11904: 0xD0BD,
+ 37064 - 11904: 0xD0BF,
+ 37066 - 11904: 0xADA5,
+ 37067 - 11904: 0xD0BE,
+ 37070 - 11904: 0xADA6,
+ 37076 - 11904: 0xD7EE,
+ 37077 - 11904: 0xD0BA,
+ 37078 - 11904: 0xD3F2,
+ 37079 - 11904: 0xD3FB,
+ 37080 - 11904: 0xD3F9,
+ 37081 - 11904: 0xD3F4,
+ 37082 - 11904: 0xD3F5,
+ 37083 - 11904: 0xD3FA,
+ 37084 - 11904: 0xD3FC,
+ 37085 - 11904: 0xB071,
+ 37087 - 11904: 0xD3F7,
+ 37088 - 11904: 0xD3F3,
+ 37089 - 11904: 0xB070,
+ 37090 - 11904: 0xB072,
+ 37091 - 11904: 0xD3F6,
+ 37092 - 11904: 0xD3FD,
+ 37093 - 11904: 0xD3F8,
+ 37096 - 11904: 0xB3A1,
+ 37097 - 11904: 0xD7F1,
+ 37098 - 11904: 0xD7E9,
+ 37099 - 11904: 0xD7EF,
+ 37100 - 11904: 0xD7F0,
+ 37101 - 11904: 0xB3A2,
+ 37103 - 11904: 0xD7E8,
+ 37104 - 11904: 0xD7EA,
+ 37105 - 11904: 0xD0B7,
+ 37106 - 11904: 0xD7EC,
+ 37107 - 11904: 0xD7ED,
+ 37108 - 11904: 0xD7EB,
+ 37109 - 11904: 0xB66C,
+ 37113 - 11904: 0xDC56,
+ 37114 - 11904: 0xEBD4,
+ 37115 - 11904: 0xDC57,
+ 37116 - 11904: 0xDC54,
+ 37117 - 11904: 0xB3A3,
+ 37118 - 11904: 0xB66E,
+ 37119 - 11904: 0xDC53,
+ 37120 - 11904: 0xDC59,
+ 37121 - 11904: 0xDC58,
+ 37122 - 11904: 0xB66B,
+ 37123 - 11904: 0xDC5C,
+ 37124 - 11904: 0xDC52,
+ 37125 - 11904: 0xDC5B,
+ 37126 - 11904: 0xDC50,
+ 37127 - 11904: 0xDC5A,
+ 37128 - 11904: 0xDC55,
+ 37129 - 11904: 0xB66D,
+ 37131 - 11904: 0xE0AA,
+ 37133 - 11904: 0xE0A5,
+ 37134 - 11904: 0xE0AB,
+ 37135 - 11904: 0xE0A6,
+ 37136 - 11904: 0xE0A4,
+ 37137 - 11904: 0xE0A7,
+ 37138 - 11904: 0xB951,
+ 37140 - 11904: 0xE0A9,
+ 37142 - 11904: 0xE0A8,
+ 37143 - 11904: 0xB952,
+ 37144 - 11904: 0xBBC1,
+ 37145 - 11904: 0xBBC0,
+ 37146 - 11904: 0xE46E,
+ 37147 - 11904: 0xE471,
+ 37148 - 11904: 0xE469,
+ 37149 - 11904: 0xE46D,
+ 37150 - 11904: 0xBBC2,
+ 37151 - 11904: 0xE46C,
+ 37152 - 11904: 0xE46A,
+ 37153 - 11904: 0xE470,
+ 37154 - 11904: 0xE46B,
+ 37155 - 11904: 0xE468,
+ 37156 - 11904: 0xE46F,
+ 37158 - 11904: 0xE859,
+ 37159 - 11904: 0xBE48,
+ 37160 - 11904: 0xF14A,
+ 37161 - 11904: 0xE856,
+ 37162 - 11904: 0xE857,
+ 37163 - 11904: 0xE855,
+ 37164 - 11904: 0xDC51,
+ 37165 - 11904: 0xBE47,
+ 37166 - 11904: 0xE85A,
+ 37167 - 11904: 0xE854,
+ 37168 - 11904: 0xBE46,
+ 37169 - 11904: 0xBE49,
+ 37170 - 11904: 0xE858,
+ 37171 - 11904: 0xEBD5,
+ 37172 - 11904: 0xBFF3,
+ 37173 - 11904: 0xEBD6,
+ 37174 - 11904: 0xEBD7,
+ 37176 - 11904: 0xEEC4,
+ 37177 - 11904: 0xC1DD,
+ 37178 - 11904: 0xF14B,
+ 37179 - 11904: 0xF14C,
+ 37182 - 11904: 0xF14D,
+ 37183 - 11904: 0xF35D,
+ 37184 - 11904: 0xF35C,
+ 37185 - 11904: 0xF4E2,
+ 37187 - 11904: 0xF4E1,
+ 37188 - 11904: 0xF65B,
+ 37189 - 11904: 0xF65C,
+ 37190 - 11904: 0xF65A,
+ 37191 - 11904: 0xF766,
+ 37192 - 11904: 0xC5B0,
+ 37193 - 11904: 0xA8BB,
+ 37194 - 11904: 0xADAA,
+ 37195 - 11904: 0xADA9,
+ 37196 - 11904: 0xB075,
+ 37197 - 11904: 0xB074,
+ 37198 - 11904: 0xD440,
+ 37199 - 11904: 0xD441,
+ 37200 - 11904: 0xD3FE,
+ 37201 - 11904: 0x9FB2,
+ 37202 - 11904: 0xB073,
+ 37203 - 11904: 0xD7F5,
+ 37205 - 11904: 0xD7F6,
+ 37206 - 11904: 0xD7F2,
+ 37207 - 11904: 0xB3A4,
+ 37208 - 11904: 0xD7F3,
+ 37209 - 11904: 0x9FAE,
+ 37210 - 11904: 0xD7F4,
+ 37212 - 11904: 0x9FB0,
+ 37214 - 11904: 0x89AD,
+ 37215 - 11904: 0xDC5F,
+ 37216 - 11904: 0xDC61,
+ 37217 - 11904: 0xDC5D,
+ 37218 - 11904: 0xDC60,
+ 37219 - 11904: 0xB66F,
+ 37220 - 11904: 0xDC5E,
+ 37221 - 11904: 0xB670,
+ 37223 - 11904: 0x906E,
+ 37224 - 11904: 0xDD73,
+ 37225 - 11904: 0xB955,
+ 37226 - 11904: 0xB954,
+ 37228 - 11904: 0xB953,
+ 37230 - 11904: 0xE0AC,
+ 37231 - 11904: 0xE0AD,
+ 37232 - 11904: 0x9E71,
+ 37234 - 11904: 0xE473,
+ 37235 - 11904: 0xE475,
+ 37236 - 11904: 0xBBC6,
+ 37237 - 11904: 0xBBC3,
+ 37238 - 11904: 0x9E4A,
+ 37239 - 11904: 0xBBC5,
+ 37240 - 11904: 0xBBC4,
+ 37241 - 11904: 0xE474,
+ 37242 - 11904: 0xE472,
+ 37244 - 11904: 0x9FDC,
+ 37248 - 11904: 0xE861,
+ 37249 - 11904: 0xE85E,
+ 37250 - 11904: 0xE85F,
+ 37251 - 11904: 0xBE4D,
+ 37252 - 11904: 0xE860,
+ 37253 - 11904: 0xE85B,
+ 37254 - 11904: 0xE85C,
+ 37255 - 11904: 0xBE4A,
+ 37257 - 11904: 0xBE4B,
+ 37258 - 11904: 0xE85D,
+ 37259 - 11904: 0xBE4C,
+ 37260 - 11904: 0x89AB,
+ 37261 - 11904: 0xEBDB,
+ 37262 - 11904: 0x9FB8,
+ 37263 - 11904: 0xEBDC,
+ 37264 - 11904: 0xEBD9,
+ 37265 - 11904: 0xEBDA,
+ 37266 - 11904: 0xBFF4,
+ 37267 - 11904: 0xEBD8,
+ 37273 - 11904: 0xEEC8,
+ 37274 - 11904: 0xEEC5,
+ 37275 - 11904: 0xEEC7,
+ 37276 - 11904: 0xC1E0,
+ 37277 - 11904: 0xEECB,
+ 37278 - 11904: 0xC1DF,
+ 37279 - 11904: 0xEEC9,
+ 37280 - 11904: 0xEECC,
+ 37281 - 11904: 0xEECA,
+ 37282 - 11904: 0xEEC6,
+ 37283 - 11904: 0xC1DE,
+ 37285 - 11904: 0xF14F,
+ 37287 - 11904: 0xF150,
+ 37288 - 11904: 0xF14E,
+ 37289 - 11904: 0x9070,
+ 37290 - 11904: 0xF152,
+ 37291 - 11904: 0xC2E5,
+ 37292 - 11904: 0xC2E6,
+ 37293 - 11904: 0xF35F,
+ 37294 - 11904: 0xC3E7,
+ 37295 - 11904: 0xF151,
+ 37296 - 11904: 0xF35E,
+ 37297 - 11904: 0xC3E6,
+ 37298 - 11904: 0xF4E5,
+ 37299 - 11904: 0xF4E6,
+ 37300 - 11904: 0xC4BF,
+ 37301 - 11904: 0xF4E4,
+ 37302 - 11904: 0x8B63,
+ 37303 - 11904: 0xF4E3,
+ 37305 - 11904: 0xF65D,
+ 37306 - 11904: 0xC548,
+ 37307 - 11904: 0x95DC,
+ 37308 - 11904: 0xF849,
+ 37309 - 11904: 0xF8C8,
+ 37310 - 11904: 0xF8C7,
+ 37312 - 11904: 0xC643,
+ 37313 - 11904: 0xC65D,
+ 37314 - 11904: 0xF8C9,
+ 37315 - 11904: 0xF971,
+ 37316 - 11904: 0x9071,
+ 37317 - 11904: 0xC66F,
+ 37318 - 11904: 0xA8BC,
+ 37319 - 11904: 0xAAF6,
+ 37321 - 11904: 0xB956,
+ 37323 - 11904: 0xC4C0,
+ 37324 - 11904: 0xA8BD,
+ 37325 - 11904: 0xADAB,
+ 37326 - 11904: 0xB3A5,
+ 37327 - 11904: 0xB671,
+ 37328 - 11904: 0xC2E7,
+ 37329 - 11904: 0xAAF7,
+ 37331 - 11904: 0xD0C1,
+ 37332 - 11904: 0xD0C0,
+ 37333 - 11904: 0xD442,
+ 37334 - 11904: 0xFC5E,
+ 37335 - 11904: 0xB078,
+ 37336 - 11904: 0xB076,
+ 37337 - 11904: 0xB07A,
+ 37338 - 11904: 0xD444,
+ 37340 - 11904: 0xB079,
+ 37341 - 11904: 0xB077,
+ 37343 - 11904: 0x8949,
+ 37346 - 11904: 0xD443,
+ 37347 - 11904: 0xB3A8,
+ 37348 - 11904: 0xD7FC,
+ 37349 - 11904: 0x965B,
+ 37350 - 11904: 0xB3A7,
+ 37351 - 11904: 0xB3A9,
+ 37352 - 11904: 0xD842,
+ 37353 - 11904: 0xB3AB,
+ 37354 - 11904: 0xD7FE,
+ 37355 - 11904: 0xD840,
+ 37356 - 11904: 0xD7F7,
+ 37357 - 11904: 0xB3AA,
+ 37358 - 11904: 0xD843,
+ 37361 - 11904: 0xD7F9,
+ 37363 - 11904: 0xD7FA,
+ 37364 - 11904: 0xD7F8,
+ 37365 - 11904: 0xB3A6,
+ 37366 - 11904: 0x8C50,
+ 37367 - 11904: 0xD841,
+ 37368 - 11904: 0xD7FB,
+ 37369 - 11904: 0xD7FD,
+ 37370 - 11904: 0x94A6,
+ 37373 - 11904: 0xDC6D,
+ 37374 - 11904: 0x8FD5,
+ 37375 - 11904: 0xDC6C,
+ 37376 - 11904: 0xDC6A,
+ 37377 - 11904: 0xDC62,
+ 37378 - 11904: 0xDC71,
+ 37379 - 11904: 0xDC65,
+ 37380 - 11904: 0xDC6F,
+ 37381 - 11904: 0xDC76,
+ 37382 - 11904: 0xDC6E,
+ 37383 - 11904: 0xB679,
+ 37384 - 11904: 0x9E73,
+ 37385 - 11904: 0xB675,
+ 37386 - 11904: 0xDC63,
+ 37388 - 11904: 0xDC69,
+ 37389 - 11904: 0xB677,
+ 37390 - 11904: 0x9075,
+ 37391 - 11904: 0xDC68,
+ 37392 - 11904: 0xB678,
+ 37393 - 11904: 0xB67A,
+ 37394 - 11904: 0xDC6B,
+ 37395 - 11904: 0x99F7,
+ 37396 - 11904: 0xB672,
+ 37397 - 11904: 0xB673,
+ 37398 - 11904: 0xDC77,
+ 37399 - 11904: 0xDC75,
+ 37400 - 11904: 0x87B2,
+ 37401 - 11904: 0xDC74,
+ 37402 - 11904: 0xDC66,
+ 37404 - 11904: 0xDC72,
+ 37406 - 11904: 0xB676,
+ 37409 - 11904: 0x8CBF,
+ 37411 - 11904: 0xB674,
+ 37412 - 11904: 0xDC73,
+ 37413 - 11904: 0xDC64,
+ 37414 - 11904: 0xDC67,
+ 37415 - 11904: 0xDC70,
+ 37416 - 11904: 0x99F9,
+ 37418 - 11904: 0x9663,
+ 37419 - 11904: 0x95B9,
+ 37421 - 11904: 0xE4BA,
+ 37422 - 11904: 0xE0B7,
+ 37424 - 11904: 0xE0B0,
+ 37425 - 11904: 0xE0C3,
+ 37426 - 11904: 0xE0CC,
+ 37427 - 11904: 0xE0B3,
+ 37428 - 11904: 0xB961,
+ 37429 - 11904: 0x94D4,
+ 37430 - 11904: 0xE0C0,
+ 37431 - 11904: 0xB957,
+ 37432 - 11904: 0xB959,
+ 37433 - 11904: 0xB965,
+ 37434 - 11904: 0xE0B1,
+ 37436 - 11904: 0xFCFA,
+ 37437 - 11904: 0xB95A,
+ 37438 - 11904: 0xB95C,
+ 37439 - 11904: 0xB966,
+ 37440 - 11904: 0xB95B,
+ 37441 - 11904: 0x9077,
+ 37444 - 11904: 0x90AB,
+ 37445 - 11904: 0xB964,
+ 37446 - 11904: 0xE0B9,
+ 37448 - 11904: 0xE0AE,
+ 37449 - 11904: 0xB962,
+ 37450 - 11904: 0xE0B8,
+ 37451 - 11904: 0xB95E,
+ 37452 - 11904: 0xE0CA,
+ 37453 - 11904: 0xB963,
+ 37454 - 11904: 0xE0C8,
+ 37455 - 11904: 0xE0BC,
+ 37456 - 11904: 0xE0C6,
+ 37457 - 11904: 0xB960,
+ 37458 - 11904: 0xE0AF,
+ 37459 - 11904: 0xE0C9,
+ 37460 - 11904: 0xE0C4,
+ 37461 - 11904: 0x9D4D,
+ 37462 - 11904: 0xE0CB,
+ 37463 - 11904: 0xB958,
+ 37464 - 11904: 0x99FA,
+ 37466 - 11904: 0xB967,
+ 37467 - 11904: 0xB95D,
+ 37469 - 11904: 0x92E3,
+ 37470 - 11904: 0xE0B5,
+ 37471 - 11904: 0x97BB,
+ 37472 - 11904: 0xE0BD,
+ 37473 - 11904: 0xE0C1,
+ 37474 - 11904: 0x9078,
+ 37475 - 11904: 0xE0C5,
+ 37476 - 11904: 0xB95F,
+ 37477 - 11904: 0xE0B4,
+ 37478 - 11904: 0xE0B2,
+ 37479 - 11904: 0xE0BE,
+ 37483 - 11904: 0x99FB,
+ 37484 - 11904: 0xE0BB,
+ 37485 - 11904: 0xE0BA,
+ 37486 - 11904: 0x97E0,
+ 37487 - 11904: 0xE0BF,
+ 37488 - 11904: 0xE0C2,
+ 37490 - 11904: 0xE0C7,
+ 37494 - 11904: 0xE478,
+ 37495 - 11904: 0x96DC,
+ 37496 - 11904: 0xBBC7,
+ 37497 - 11904: 0xE4A4,
+ 37498 - 11904: 0xE47A,
+ 37499 - 11904: 0xBBCC,
+ 37500 - 11904: 0xBBD0,
+ 37501 - 11904: 0xE4AD,
+ 37502 - 11904: 0xE4B5,
+ 37503 - 11904: 0xE4A6,
+ 37504 - 11904: 0xBBC8,
+ 37505 - 11904: 0x9CA8,
+ 37506 - 11904: 0xE4AA,
+ 37507 - 11904: 0xE0B6,
+ 37508 - 11904: 0x9772,
+ 37509 - 11904: 0xBBC9,
+ 37510 - 11904: 0xE4B1,
+ 37511 - 11904: 0xE4B6,
+ 37512 - 11904: 0xE4AE,
+ 37513 - 11904: 0x9440,
+ 37514 - 11904: 0xE4B0,
+ 37515 - 11904: 0xE4B9,
+ 37516 - 11904: 0xE4B2,
+ 37517 - 11904: 0xE47E,
+ 37518 - 11904: 0xE4A9,
+ 37519 - 11904: 0x92F2,
+ 37521 - 11904: 0xBBD1,
+ 37523 - 11904: 0xBBCD,
+ 37524 - 11904: 0xE47C,
+ 37525 - 11904: 0xE4AB,
+ 37526 - 11904: 0xBBCB,
+ 37527 - 11904: 0xE4A5,
+ 37528 - 11904: 0xBBCA,
+ 37529 - 11904: 0xE4B3,
+ 37530 - 11904: 0xE4A2,
+ 37531 - 11904: 0xE479,
+ 37532 - 11904: 0xBBCE,
+ 37533 - 11904: 0xE4B8,
+ 37536 - 11904: 0xE47B,
+ 37537 - 11904: 0xE4AF,
+ 37538 - 11904: 0xE4AC,
+ 37539 - 11904: 0xE4A7,
+ 37540 - 11904: 0xE477,
+ 37541 - 11904: 0xE476,
+ 37542 - 11904: 0xE4A1,
+ 37543 - 11904: 0xE4B4,
+ 37544 - 11904: 0xBBCF,
+ 37545 - 11904: 0xE4B7,
+ 37546 - 11904: 0xE47D,
+ 37547 - 11904: 0xE4A3,
+ 37548 - 11904: 0xBE52,
+ 37550 - 11904: 0x99FD,
+ 37553 - 11904: 0x99FC,
+ 37554 - 11904: 0xBE5A,
+ 37555 - 11904: 0xBE55,
+ 37556 - 11904: 0xE8A4,
+ 37557 - 11904: 0xE8A1,
+ 37558 - 11904: 0xE867,
+ 37559 - 11904: 0xBE50,
+ 37561 - 11904: 0xF9D7,
+ 37562 - 11904: 0x964A,
+ 37563 - 11904: 0xBE4F,
+ 37564 - 11904: 0xBE56,
+ 37566 - 11904: 0x96D8,
+ 37567 - 11904: 0x99FE,
+ 37568 - 11904: 0xE865,
+ 37569 - 11904: 0xBE54,
+ 37570 - 11904: 0xE871,
+ 37571 - 11904: 0xE863,
+ 37572 - 11904: 0xE864,
+ 37573 - 11904: 0xBE4E,
+ 37574 - 11904: 0xE8A3,
+ 37575 - 11904: 0xBE58,
+ 37576 - 11904: 0xE874,
+ 37577 - 11904: 0xE879,
+ 37578 - 11904: 0xE873,
+ 37579 - 11904: 0xEBEE,
+ 37580 - 11904: 0xE86F,
+ 37581 - 11904: 0xE877,
+ 37582 - 11904: 0xE875,
+ 37583 - 11904: 0xE868,
+ 37584 - 11904: 0xE862,
+ 37585 - 11904: 0xE87D,
+ 37586 - 11904: 0xBE57,
+ 37587 - 11904: 0xE87E,
+ 37588 - 11904: 0x904B,
+ 37589 - 11904: 0xE878,
+ 37591 - 11904: 0xE86D,
+ 37592 - 11904: 0xE86B,
+ 37593 - 11904: 0xE866,
+ 37595 - 11904: 0xFA41,
+ 37597 - 11904: 0xE86E,
+ 37598 - 11904: 0xE87B,
+ 37599 - 11904: 0xE86A,
+ 37600 - 11904: 0xE87A,
+ 37601 - 11904: 0xE8A2,
+ 37603 - 11904: 0x9A40,
+ 37604 - 11904: 0xBE53,
+ 37605 - 11904: 0x975B,
+ 37606 - 11904: 0xE876,
+ 37607 - 11904: 0xE87C,
+ 37608 - 11904: 0xE872,
+ 37609 - 11904: 0xE86C,
+ 37610 - 11904: 0xBE51,
+ 37611 - 11904: 0x9A41,
+ 37612 - 11904: 0x91DD,
+ 37614 - 11904: 0xE4A8,
+ 37615 - 11904: 0xE870,
+ 37616 - 11904: 0xBE59,
+ 37617 - 11904: 0xE869,
+ 37618 - 11904: 0x93FC,
+ 37619 - 11904: 0x9A42,
+ 37620 - 11904: 0x9A43,
+ 37622 - 11904: 0x9659,
+ 37623 - 11904: 0xEBF4,
+ 37624 - 11904: 0xBFF7,
+ 37625 - 11904: 0xEBF3,
+ 37626 - 11904: 0xEBF0,
+ 37627 - 11904: 0xEC44,
+ 37628 - 11904: 0xBFFB,
+ 37629 - 11904: 0x9A44,
+ 37630 - 11904: 0xEC41,
+ 37631 - 11904: 0xEBF8,
+ 37632 - 11904: 0xEC43,
+ 37633 - 11904: 0xEBE9,
+ 37634 - 11904: 0xEBF6,
+ 37635 - 11904: 0x9051,
+ 37636 - 11904: 0xBFFD,
+ 37638 - 11904: 0xEBE1,
+ 37639 - 11904: 0x94BF,
+ 37640 - 11904: 0xEBDF,
+ 37641 - 11904: 0xEC42,
+ 37643 - 11904: 0xEC40,
+ 37644 - 11904: 0xEBFE,
+ 37645 - 11904: 0xEBED,
+ 37646 - 11904: 0xEBEC,
+ 37647 - 11904: 0xEBE2,
+ 37648 - 11904: 0xC040,
+ 37650 - 11904: 0xEBE8,
+ 37651 - 11904: 0xEBF2,
+ 37652 - 11904: 0xEBFD,
+ 37653 - 11904: 0xC043,
+ 37654 - 11904: 0xEC45,
+ 37656 - 11904: 0xC1E8,
+ 37657 - 11904: 0xC045,
+ 37658 - 11904: 0xBFFE,
+ 37659 - 11904: 0xEBE6,
+ 37661 - 11904: 0xEBEF,
+ 37662 - 11904: 0xEBDE,
+ 37663 - 11904: 0xEBE0,
+ 37664 - 11904: 0xBFF5,
+ 37665 - 11904: 0xC042,
+ 37666 - 11904: 0xBFFA,
+ 37667 - 11904: 0xEBE7,
+ 37668 - 11904: 0xEBF7,
+ 37669 - 11904: 0xEBF1,
+ 37670 - 11904: 0xC041,
+ 37671 - 11904: 0xEBDD,
+ 37672 - 11904: 0xC1E3,
+ 37673 - 11904: 0xEBF9,
+ 37674 - 11904: 0xEBFC,
+ 37675 - 11904: 0xBFFC,
+ 37676 - 11904: 0x90A2,
+ 37677 - 11904: 0xEBEB,
+ 37678 - 11904: 0xC044,
+ 37679 - 11904: 0xBFF9,
+ 37680 - 11904: 0x9CAB,
+ 37681 - 11904: 0x9776,
+ 37683 - 11904: 0xBFF8,
+ 37684 - 11904: 0xEBF5,
+ 37685 - 11904: 0xEBFB,
+ 37686 - 11904: 0xBFF6,
+ 37688 - 11904: 0xEBE4,
+ 37689 - 11904: 0xEBFA,
+ 37692 - 11904: 0xEBE5,
+ 37696 - 11904: 0xFC55,
+ 37697 - 11904: 0xFE45,
+ 37698 - 11904: 0x94A8,
+ 37699 - 11904: 0x9A45,
+ 37700 - 11904: 0xFA4B,
+ 37701 - 11904: 0x9DE1,
+ 37702 - 11904: 0xEBEA,
+ 37703 - 11904: 0xEED2,
+ 37704 - 11904: 0x96D9,
+ 37705 - 11904: 0xEED7,
+ 37706 - 11904: 0xC1E5,
+ 37707 - 11904: 0xC1E7,
+ 37708 - 11904: 0xEEDD,
+ 37709 - 11904: 0xC1E1,
+ 37710 - 11904: 0xEEEC,
+ 37711 - 11904: 0xEEE3,
+ 37712 - 11904: 0xEED8,
+ 37713 - 11904: 0xEED9,
+ 37714 - 11904: 0xEEE2,
+ 37716 - 11904: 0xC1EE,
+ 37717 - 11904: 0xEEE1,
+ 37718 - 11904: 0xEED1,
+ 37719 - 11904: 0xEEE0,
+ 37720 - 11904: 0xEED4,
+ 37721 - 11904: 0xEEED,
+ 37722 - 11904: 0xC1ED,
+ 37723 - 11904: 0xC1EB,
+ 37724 - 11904: 0xEED5,
+ 37726 - 11904: 0xEEE8,
+ 37727 - 11904: 0x9774,
+ 37728 - 11904: 0xEEDA,
+ 37729 - 11904: 0xEEE7,
+ 37730 - 11904: 0xFDF5,
+ 37731 - 11904: 0xEEE9,
+ 37732 - 11904: 0xEED0,
+ 37733 - 11904: 0xC1E6,
+ 37734 - 11904: 0x92E5,
+ 37735 - 11904: 0xEEEA,
+ 37736 - 11904: 0x9645,
+ 37737 - 11904: 0x91DA,
+ 37738 - 11904: 0xEEDE,
+ 37739 - 11904: 0x90A3,
+ 37740 - 11904: 0xC1EA,
+ 37741 - 11904: 0xEEDB,
+ 37742 - 11904: 0xA05F,
+ 37744 - 11904: 0xC1EC,
+ 37745 - 11904: 0xEEE4,
+ 37747 - 11904: 0x90AF,
+ 37748 - 11904: 0x97BF,
+ 37749 - 11904: 0xC1E4,
+ 37750 - 11904: 0xEED6,
+ 37751 - 11904: 0xEEE5,
+ 37752 - 11904: 0x914C,
+ 37753 - 11904: 0xEEDF,
+ 37754 - 11904: 0xEBE3,
+ 37755 - 11904: 0xEEE6,
+ 37756 - 11904: 0xEED3,
+ 37757 - 11904: 0x967A,
+ 37758 - 11904: 0xC1E9,
+ 37760 - 11904: 0xEEEB,
+ 37761 - 11904: 0x91DE,
+ 37762 - 11904: 0xC1E2,
+ 37763 - 11904: 0xEECE,
+ 37764 - 11904: 0x9A46,
+ 37765 - 11904: 0xFEB0,
+ 37766 - 11904: 0x9779,
+ 37767 - 11904: 0x946C,
+ 37768 - 11904: 0xF160,
+ 37769 - 11904: 0xF159,
+ 37770 - 11904: 0xC2E9,
+ 37772 - 11904: 0xF154,
+ 37773 - 11904: 0xF163,
+ 37774 - 11904: 0xF15B,
+ 37775 - 11904: 0xEEDC,
+ 37776 - 11904: 0x9858,
+ 37777 - 11904: 0xF165,
+ 37778 - 11904: 0xF155,
+ 37780 - 11904: 0xC2E8,
+ 37781 - 11904: 0xF15F,
+ 37782 - 11904: 0xC2EA,
+ 37783 - 11904: 0xC2F2,
+ 37784 - 11904: 0xC2F0,
+ 37785 - 11904: 0xF161,
+ 37786 - 11904: 0xC2F1,
+ 37787 - 11904: 0xF157,
+ 37788 - 11904: 0x9266,
+ 37789 - 11904: 0xF158,
+ 37790 - 11904: 0xF15D,
+ 37791 - 11904: 0xF162,
+ 37792 - 11904: 0x93FB,
+ 37793 - 11904: 0xEECD,
+ 37794 - 11904: 0xC2EB,
+ 37795 - 11904: 0xF16A,
+ 37796 - 11904: 0xF167,
+ 37797 - 11904: 0xF16B,
+ 37798 - 11904: 0xF15E,
+ 37799 - 11904: 0xF15A,
+ 37800 - 11904: 0xF168,
+ 37801 - 11904: 0xF36A,
+ 37802 - 11904: 0xF15C,
+ 37804 - 11904: 0xC2EE,
+ 37805 - 11904: 0x9A47,
+ 37806 - 11904: 0xC2ED,
+ 37807 - 11904: 0xEECF,
+ 37808 - 11904: 0xC2EF,
+ 37809 - 11904: 0xF164,
+ 37810 - 11904: 0xF166,
+ 37811 - 11904: 0xC2EC,
+ 37812 - 11904: 0xF169,
+ 37813 - 11904: 0xF153,
+ 37815 - 11904: 0xF156,
+ 37816 - 11904: 0x9749,
+ 37819 - 11904: 0x9748,
+ 37821 - 11904: 0x934A,
+ 37823 - 11904: 0x9CE2,
+ 37824 - 11904: 0xF373,
+ 37826 - 11904: 0xF363,
+ 37827 - 11904: 0xC3EB,
+ 37828 - 11904: 0xF371,
+ 37830 - 11904: 0x9264,
+ 37831 - 11904: 0xF361,
+ 37832 - 11904: 0xC3EC,
+ 37834 - 11904: 0xF36C,
+ 37835 - 11904: 0x91DF,
+ 37836 - 11904: 0xF368,
+ 37837 - 11904: 0xC3F1,
+ 37838 - 11904: 0xF372,
+ 37839 - 11904: 0xF362,
+ 37840 - 11904: 0xF365,
+ 37841 - 11904: 0xC3E9,
+ 37842 - 11904: 0xF374,
+ 37843 - 11904: 0xFB79,
+ 37844 - 11904: 0xF36D,
+ 37845 - 11904: 0xF370,
+ 37846 - 11904: 0xC3EF,
+ 37847 - 11904: 0xC3F4,
+ 37848 - 11904: 0xC3F2,
+ 37849 - 11904: 0xF369,
+ 37850 - 11904: 0xF364,
+ 37851 - 11904: 0x96D7,
+ 37852 - 11904: 0xC3ED,
+ 37853 - 11904: 0xC3EE,
+ 37854 - 11904: 0xF360,
+ 37855 - 11904: 0xC3EA,
+ 37856 - 11904: 0x9343,
+ 37857 - 11904: 0xC3E8,
+ 37858 - 11904: 0xC3F0,
+ 37859 - 11904: 0xF36F,
+ 37860 - 11904: 0xC3F3,
+ 37862 - 11904: 0xF36B,
+ 37863 - 11904: 0xF375,
+ 37864 - 11904: 0xC3F5,
+ 37868 - 11904: 0xF367,
+ 37870 - 11904: 0xF36E,
+ 37872 - 11904: 0xFDCB,
+ 37873 - 11904: 0xFE7A,
+ 37875 - 11904: 0x91DB,
+ 37876 - 11904: 0x8C6A,
+ 37877 - 11904: 0xF4F3,
+ 37878 - 11904: 0xF542,
+ 37879 - 11904: 0xF4F5,
+ 37880 - 11904: 0xF4FC,
+ 37881 - 11904: 0xF366,
+ 37882 - 11904: 0xF4FA,
+ 37883 - 11904: 0xF4E9,
+ 37884 - 11904: 0xF540,
+ 37885 - 11904: 0xC4C3,
+ 37886 - 11904: 0xF4ED,
+ 37887 - 11904: 0xF4FE,
+ 37888 - 11904: 0xF4F4,
+ 37889 - 11904: 0x97AF,
+ 37891 - 11904: 0xC4C2,
+ 37892 - 11904: 0x95DD,
+ 37894 - 11904: 0xF544,
+ 37895 - 11904: 0xF4F6,
+ 37896 - 11904: 0x9348,
+ 37897 - 11904: 0xF4FB,
+ 37898 - 11904: 0xF4FD,
+ 37899 - 11904: 0xF4E7,
+ 37900 - 11904: 0xF541,
+ 37901 - 11904: 0xF4F2,
+ 37902 - 11904: 0xF4F7,
+ 37903 - 11904: 0xF4EB,
+ 37904 - 11904: 0xF4EF,
+ 37905 - 11904: 0xF543,
+ 37906 - 11904: 0xF4F9,
+ 37907 - 11904: 0xF4E8,
+ 37908 - 11904: 0xF4EC,
+ 37909 - 11904: 0xF4EE,
+ 37910 - 11904: 0xF4F8,
+ 37911 - 11904: 0x9A4B,
+ 37912 - 11904: 0xC4C1,
+ 37913 - 11904: 0xF4F1,
+ 37915 - 11904: 0xFC45,
+ 37917 - 11904: 0x9A4D,
+ 37920 - 11904: 0xF4EA,
+ 37924 - 11904: 0x91BC,
+ 37925 - 11904: 0x90E2,
+ 37926 - 11904: 0x90B4,
+ 37927 - 11904: 0x95E1,
+ 37928 - 11904: 0xF4F0,
+ 37929 - 11904: 0xF661,
+ 37930 - 11904: 0xF666,
+ 37931 - 11904: 0xC54F,
+ 37932 - 11904: 0xF668,
+ 37933 - 11904: 0x9A4E,
+ 37934 - 11904: 0xC549,
+ 37935 - 11904: 0x87AD,
+ 37936 - 11904: 0xF664,
+ 37937 - 11904: 0xF66A,
+ 37938 - 11904: 0xC54E,
+ 37939 - 11904: 0xC54A,
+ 37941 - 11904: 0xC54B,
+ 37942 - 11904: 0xF660,
+ 37943 - 11904: 0xF667,
+ 37944 - 11904: 0xC54D,
+ 37945 - 11904: 0xF665,
+ 37946 - 11904: 0xC54C,
+ 37947 - 11904: 0xF65F,
+ 37948 - 11904: 0xF663,
+ 37949 - 11904: 0xF662,
+ 37950 - 11904: 0x9A4F,
+ 37951 - 11904: 0xF65E,
+ 37952 - 11904: 0xF669,
+ 37954 - 11904: 0xFE40,
+ 37955 - 11904: 0xFE43,
+ 37956 - 11904: 0xC5B1,
+ 37957 - 11904: 0xF76D,
+ 37958 - 11904: 0xF770,
+ 37959 - 11904: 0xF76C,
+ 37960 - 11904: 0xF76E,
+ 37961 - 11904: 0xF76F,
+ 37962 - 11904: 0xF769,
+ 37963 - 11904: 0xF76A,
+ 37964 - 11904: 0xF767,
+ 37965 - 11904: 0x96DD,
+ 37967 - 11904: 0xF76B,
+ 37968 - 11904: 0xF768,
+ 37969 - 11904: 0xC5B2,
+ 37970 - 11904: 0xC5B3,
+ 37972 - 11904: 0x9A51,
+ 37973 - 11904: 0xF84B,
+ 37975 - 11904: 0xF84D,
+ 37976 - 11904: 0x96A7,
+ 37979 - 11904: 0x90B0,
+ 37981 - 11904: 0xF84C,
+ 37982 - 11904: 0xF84E,
+ 37984 - 11904: 0xC5E0,
+ 37986 - 11904: 0xF84A,
+ 37987 - 11904: 0xC5DF,
+ 37988 - 11904: 0xC5E1,
+ 37989 - 11904: 0x9C4E,
+ 37991 - 11904: 0x9443,
+ 37992 - 11904: 0xF8CB,
+ 37993 - 11904: 0xF8CC,
+ 37994 - 11904: 0xC644,
+ 37995 - 11904: 0xF8CA,
+ 37996 - 11904: 0x8EBA,
+ 37997 - 11904: 0xF953,
+ 37998 - 11904: 0xF952,
+ 37999 - 11904: 0xF954,
+ 38000 - 11904: 0xC65F,
+ 38001 - 11904: 0xF955,
+ 38002 - 11904: 0xC65E,
+ 38003 - 11904: 0xF956,
+ 38004 - 11904: 0xF972,
+ 38005 - 11904: 0xF975,
+ 38006 - 11904: 0xF974,
+ 38007 - 11904: 0xC668,
+ 38008 - 11904: 0xF973,
+ 38009 - 11904: 0x9A52,
+ 38011 - 11904: 0xFCC1,
+ 38012 - 11904: 0xC672,
+ 38013 - 11904: 0xC670,
+ 38014 - 11904: 0xC671,
+ 38015 - 11904: 0xC677,
+ 38016 - 11904: 0xF9C0,
+ 38017 - 11904: 0xF9C1,
+ 38018 - 11904: 0xF9BF,
+ 38019 - 11904: 0xF9C9,
+ 38021 - 11904: 0x8BE9,
+ 38047 - 11904: 0x9CAF,
+ 38050 - 11904: 0x8BFD,
+ 38081 - 11904: 0x9ABC,
+ 38083 - 11904: 0x9AB8,
+ 38108 - 11904: 0x9AAE,
+ 38134 - 11904: 0x9AA7,
+ 38189 - 11904: 0x9A53,
+ 38215 - 11904: 0x9D74,
+ 38263 - 11904: 0xAAF8,
+ 38264 - 11904: 0x8BEA,
+ 38266 - 11904: 0xD844,
+ 38267 - 11904: 0xDC78,
+ 38268 - 11904: 0xE8A5,
+ 38269 - 11904: 0xF376,
+ 38271 - 11904: 0x8BEB,
+ 38272 - 11904: 0xAAF9,
+ 38274 - 11904: 0xADAC,
+ 38275 - 11904: 0xB07B,
+ 38277 - 11904: 0x90B2,
+ 38278 - 11904: 0xD845,
+ 38280 - 11904: 0xD846,
+ 38281 - 11904: 0xB3AC,
+ 38283 - 11904: 0xB67D,
+ 38284 - 11904: 0xDC7A,
+ 38285 - 11904: 0xDC79,
+ 38286 - 11904: 0xB6A3,
+ 38287 - 11904: 0xB67C,
+ 38288 - 11904: 0xDC7B,
+ 38289 - 11904: 0xB67E,
+ 38290 - 11904: 0xB6A2,
+ 38291 - 11904: 0xB6A1,
+ 38292 - 11904: 0xB67B,
+ 38294 - 11904: 0x95E9,
+ 38295 - 11904: 0x95E8,
+ 38296 - 11904: 0xB968,
+ 38297 - 11904: 0x95E6,
+ 38299 - 11904: 0xE0D0,
+ 38300 - 11904: 0xE0CE,
+ 38302 - 11904: 0xE0CF,
+ 38303 - 11904: 0xE0CD,
+ 38304 - 11904: 0x90B5,
+ 38305 - 11904: 0xBBD2,
+ 38306 - 11904: 0x9A54,
+ 38307 - 11904: 0xBBD5,
+ 38308 - 11904: 0xBBD7,
+ 38309 - 11904: 0xBBD6,
+ 38310 - 11904: 0x90B3,
+ 38311 - 11904: 0x95E7,
+ 38312 - 11904: 0xBBD3,
+ 38313 - 11904: 0xBBD4,
+ 38314 - 11904: 0x8B50,
+ 38315 - 11904: 0xE8A7,
+ 38316 - 11904: 0xE8A6,
+ 38317 - 11904: 0xBE5B,
+ 38318 - 11904: 0xE8A8,
+ 38320 - 11904: 0xE8A9,
+ 38321 - 11904: 0xBE5C,
+ 38325 - 11904: 0xEC4D,
+ 38326 - 11904: 0xEC4B,
+ 38327 - 11904: 0xEEF3,
+ 38329 - 11904: 0xEC49,
+ 38330 - 11904: 0xEC4A,
+ 38331 - 11904: 0xC046,
+ 38332 - 11904: 0xEC46,
+ 38333 - 11904: 0xEC4E,
+ 38334 - 11904: 0xEC48,
+ 38335 - 11904: 0xEC4C,
+ 38336 - 11904: 0xEEEF,
+ 38339 - 11904: 0xEEF1,
+ 38341 - 11904: 0xEEF2,
+ 38342 - 11904: 0xC1F3,
+ 38343 - 11904: 0xEEEE,
+ 38344 - 11904: 0xC1F2,
+ 38345 - 11904: 0xEEF0,
+ 38346 - 11904: 0xC1EF,
+ 38347 - 11904: 0xC1F0,
+ 38348 - 11904: 0xC1F1,
+ 38349 - 11904: 0xEC47,
+ 38352 - 11904: 0xC2F5,
+ 38353 - 11904: 0xF16E,
+ 38354 - 11904: 0xF16C,
+ 38355 - 11904: 0xF16D,
+ 38356 - 11904: 0xC2F3,
+ 38357 - 11904: 0xC2F6,
+ 38358 - 11904: 0xC2F4,
+ 38362 - 11904: 0xF377,
+ 38363 - 11904: 0xF378,
+ 38364 - 11904: 0xC3F6,
+ 38366 - 11904: 0xF545,
+ 38367 - 11904: 0xF547,
+ 38368 - 11904: 0xF546,
+ 38369 - 11904: 0xC4C4,
+ 38370 - 11904: 0xC550,
+ 38371 - 11904: 0xF66D,
+ 38372 - 11904: 0xF66C,
+ 38373 - 11904: 0xF66B,
+ 38376 - 11904: 0x8BEC,
+ 38388 - 11904: 0x9A56,
+ 38428 - 11904: 0xAAFA,
+ 38429 - 11904: 0x8BFB,
+ 38430 - 11904: 0xC9AA,
+ 38432 - 11904: 0xCA58,
+ 38433 - 11904: 0xA6E9,
+ 38434 - 11904: 0xCA56,
+ 38435 - 11904: 0xCA59,
+ 38436 - 11904: 0xCA57,
+ 38440 - 11904: 0xCBAE,
+ 38442 - 11904: 0xA8C1,
+ 38444 - 11904: 0xA8C2,
+ 38445 - 11904: 0xCBB0,
+ 38446 - 11904: 0xA8BF,
+ 38447 - 11904: 0xCBAF,
+ 38448 - 11904: 0xCBAD,
+ 38449 - 11904: 0xA8C0,
+ 38450 - 11904: 0xA8BE,
+ 38451 - 11904: 0x9A57,
+ 38456 - 11904: 0xA0AA,
+ 38457 - 11904: 0xCDD8,
+ 38458 - 11904: 0xCDDB,
+ 38459 - 11904: 0xAAFD,
+ 38460 - 11904: 0xCDDA,
+ 38461 - 11904: 0xCDD9,
+ 38463 - 11904: 0xAAFC,
+ 38464 - 11904: 0xAAFB,
+ 38465 - 11904: 0x9FA6,
+ 38466 - 11904: 0xAB40,
+ 38467 - 11904: 0xCDDC,
+ 38468 - 11904: 0xAAFE,
+ 38469 - 11904: 0x99CC,
+ 38474 - 11904: 0xD0C6,
+ 38475 - 11904: 0xADAE,
+ 38476 - 11904: 0xADAF,
+ 38477 - 11904: 0xADB0,
+ 38478 - 11904: 0xD0C7,
+ 38479 - 11904: 0xD0C3,
+ 38480 - 11904: 0xADAD,
+ 38481 - 11904: 0xD0C4,
+ 38483 - 11904: 0xD0C5,
+ 38484 - 11904: 0xD0C2,
+ 38486 - 11904: 0x9C59,
+ 38488 - 11904: 0xB0A4,
+ 38491 - 11904: 0xB0A1,
+ 38492 - 11904: 0xD445,
+ 38493 - 11904: 0xB0A2,
+ 38494 - 11904: 0xB0A5,
+ 38495 - 11904: 0xD446,
+ 38497 - 11904: 0xB07E,
+ 38498 - 11904: 0xB07C,
+ 38499 - 11904: 0xB07D,
+ 38500 - 11904: 0xB0A3,
+ 38505 - 11904: 0x99B5,
+ 38506 - 11904: 0xB3AD,
+ 38507 - 11904: 0xD849,
+ 38508 - 11904: 0xB3B5,
+ 38509 - 11904: 0xD848,
+ 38511 - 11904: 0xD84B,
+ 38512 - 11904: 0xB3B1,
+ 38513 - 11904: 0xD84A,
+ 38514 - 11904: 0xB6AB,
+ 38515 - 11904: 0xB3AF,
+ 38516 - 11904: 0xB3B2,
+ 38517 - 11904: 0xB3AE,
+ 38518 - 11904: 0xB3B3,
+ 38519 - 11904: 0xB3B4,
+ 38520 - 11904: 0xB3B0,
+ 38523 - 11904: 0x90BE,
+ 38524 - 11904: 0xD847,
+ 38525 - 11904: 0xB6A7,
+ 38526 - 11904: 0xDC7D,
+ 38528 - 11904: 0xDCA3,
+ 38529 - 11904: 0x9FAF,
+ 38531 - 11904: 0xDCA2,
+ 38532 - 11904: 0xB6AC,
+ 38533 - 11904: 0xB6A8,
+ 38534 - 11904: 0xB6A9,
+ 38535 - 11904: 0xDC7C,
+ 38536 - 11904: 0xDC7E,
+ 38537 - 11904: 0xDCA1,
+ 38538 - 11904: 0xB6A4,
+ 38539 - 11904: 0xB6A6,
+ 38541 - 11904: 0xB6AA,
+ 38542 - 11904: 0xB6A5,
+ 38543 - 11904: 0x95F2,
+ 38545 - 11904: 0xE0D3,
+ 38546 - 11904: 0xE0D1,
+ 38547 - 11904: 0xE0D2,
+ 38548 - 11904: 0xB96A,
+ 38549 - 11904: 0xB96B,
+ 38550 - 11904: 0x90BF,
+ 38551 - 11904: 0xE0D4,
+ 38552 - 11904: 0xB969,
+ 38553 - 11904: 0xBBD8,
+ 38555 - 11904: 0xBBDA,
+ 38556 - 11904: 0xBBD9,
+ 38558 - 11904: 0xE4BB,
+ 38561 - 11904: 0xE4BC,
+ 38562 - 11904: 0xE8AB,
+ 38563 - 11904: 0x90C1,
+ 38564 - 11904: 0xE8AA,
+ 38565 - 11904: 0xFEE4,
+ 38567 - 11904: 0xC047,
+ 38568 - 11904: 0xC048,
+ 38569 - 11904: 0xEC4F,
+ 38570 - 11904: 0xC049,
+ 38572 - 11904: 0xEEF6,
+ 38574 - 11904: 0xEEF4,
+ 38576 - 11904: 0xEEF5,
+ 38577 - 11904: 0xC1F4,
+ 38579 - 11904: 0xF16F,
+ 38580 - 11904: 0xC3F7,
+ 38582 - 11904: 0xC6D7,
+ 38584 - 11904: 0xC1F5,
+ 38585 - 11904: 0xAB41,
+ 38587 - 11904: 0xB0A6,
+ 38588 - 11904: 0xD447,
+ 38589 - 11904: 0x90C7,
+ 38591 - 11904: 0xD84C,
+ 38592 - 11904: 0xB3B6,
+ 38593 - 11904: 0xB6AD,
+ 38594 - 11904: 0xDCA4,
+ 38595 - 11904: 0xDCA6,
+ 38596 - 11904: 0xB6AF,
+ 38597 - 11904: 0xB6AE,
+ 38598 - 11904: 0xB6B0,
+ 38599 - 11904: 0xB6B1,
+ 38600 - 11904: 0xDCA5,
+ 38601 - 11904: 0xB96E,
+ 38602 - 11904: 0xB96F,
+ 38603 - 11904: 0xB96D,
+ 38604 - 11904: 0xBBDB,
+ 38605 - 11904: 0xB96C,
+ 38606 - 11904: 0xE0D5,
+ 38610 - 11904: 0xBBDC,
+ 38611 - 11904: 0xE8AC,
+ 38612 - 11904: 0xEC50,
+ 38613 - 11904: 0xC04A,
+ 38614 - 11904: 0xC1F6,
+ 38615 - 11904: 0xF170,
+ 38616 - 11904: 0xF174,
+ 38617 - 11904: 0xC2F9,
+ 38618 - 11904: 0xF171,
+ 38619 - 11904: 0xC2FA,
+ 38620 - 11904: 0xC2F8,
+ 38621 - 11904: 0xF175,
+ 38622 - 11904: 0xC2FB,
+ 38623 - 11904: 0xF173,
+ 38625 - 11904: 0xF379,
+ 38626 - 11904: 0xC2F7,
+ 38627 - 11904: 0xC3F8,
+ 38629 - 11904: 0xF8CD,
+ 38632 - 11904: 0xAB42,
+ 38633 - 11904: 0xB3B8,
+ 38634 - 11904: 0xB3B7,
+ 38639 - 11904: 0xB6B2,
+ 38640 - 11904: 0xDCA8,
+ 38641 - 11904: 0xDCA7,
+ 38642 - 11904: 0xB6B3,
+ 38644 - 11904: 0x92E4,
+ 38645 - 11904: 0xE0D9,
+ 38646 - 11904: 0xB973,
+ 38647 - 11904: 0xB970,
+ 38648 - 11904: 0xE0D8,
+ 38649 - 11904: 0xB972,
+ 38650 - 11904: 0xE0D6,
+ 38651 - 11904: 0xB971,
+ 38653 - 11904: 0xE0D7,
+ 38655 - 11904: 0xE4BD,
+ 38656 - 11904: 0xBBDD,
+ 38658 - 11904: 0xE8AF,
+ 38659 - 11904: 0x9F52,
+ 38660 - 11904: 0xBE5D,
+ 38661 - 11904: 0xE8AD,
+ 38662 - 11904: 0xBE5E,
+ 38663 - 11904: 0xBE5F,
+ 38664 - 11904: 0xE8AE,
+ 38665 - 11904: 0xBE60,
+ 38667 - 11904: 0xEC51,
+ 38669 - 11904: 0xC04E,
+ 38670 - 11904: 0xC04B,
+ 38671 - 11904: 0xC050,
+ 38672 - 11904: 0xEC53,
+ 38673 - 11904: 0xC04C,
+ 38674 - 11904: 0xEC52,
+ 38675 - 11904: 0xC04F,
+ 38678 - 11904: 0xC04D,
+ 38680 - 11904: 0xEEF9,
+ 38681 - 11904: 0xEEFB,
+ 38683 - 11904: 0x90DB,
+ 38684 - 11904: 0xC1F7,
+ 38685 - 11904: 0xEEFA,
+ 38686 - 11904: 0xC1F8,
+ 38687 - 11904: 0xEEF8,
+ 38688 - 11904: 0xEEF7,
+ 38689 - 11904: 0xA066,
+ 38690 - 11904: 0xF177,
+ 38691 - 11904: 0xF176,
+ 38692 - 11904: 0xC2FC,
+ 38693 - 11904: 0xF178,
+ 38694 - 11904: 0xF37E,
+ 38695 - 11904: 0xC3FA,
+ 38696 - 11904: 0xF37D,
+ 38697 - 11904: 0xF37A,
+ 38698 - 11904: 0xC3F9,
+ 38699 - 11904: 0xF37B,
+ 38700 - 11904: 0xF37C,
+ 38702 - 11904: 0xF548,
+ 38703 - 11904: 0xF549,
+ 38704 - 11904: 0xC4C5,
+ 38705 - 11904: 0x90D2,
+ 38706 - 11904: 0xC553,
+ 38708 - 11904: 0x876B,
+ 38709 - 11904: 0xF66E,
+ 38710 - 11904: 0x90D4,
+ 38712 - 11904: 0xC551,
+ 38713 - 11904: 0xC552,
+ 38714 - 11904: 0xF66F,
+ 38717 - 11904: 0xC5B4,
+ 38718 - 11904: 0xC5B5,
+ 38719 - 11904: 0xF771,
+ 38720 - 11904: 0x9A5B,
+ 38721 - 11904: 0x95FD,
+ 38722 - 11904: 0xC645,
+ 38723 - 11904: 0xF8CF,
+ 38724 - 11904: 0xC647,
+ 38726 - 11904: 0xF8CE,
+ 38727 - 11904: 0xF8D0,
+ 38728 - 11904: 0xC646,
+ 38729 - 11904: 0xF957,
+ 38730 - 11904: 0x87B1,
+ 38731 - 11904: 0xF9AD,
+ 38737 - 11904: 0x8BC4,
+ 38738 - 11904: 0xAB43,
+ 38741 - 11904: 0x8C66,
+ 38742 - 11904: 0xB974,
+ 38743 - 11904: 0x90DE,
+ 38744 - 11904: 0xE4BE,
+ 38746 - 11904: 0xE8B0,
+ 38747 - 11904: 0xC051,
+ 38748 - 11904: 0xC052,
+ 38749 - 11904: 0x9CE4,
+ 38750 - 11904: 0xAB44,
+ 38751 - 11904: 0x90E1,
+ 38752 - 11904: 0xBE61,
+ 38753 - 11904: 0xC3FB,
+ 38754 - 11904: 0xADB1,
+ 38758 - 11904: 0xC053,
+ 38760 - 11904: 0xC5E2,
+ 38761 - 11904: 0xADB2,
+ 38762 - 11904: 0xD84D,
+ 38764 - 11904: 0xDCA9,
+ 38765 - 11904: 0x9E46,
+ 38766 - 11904: 0xDCAB,
+ 38768 - 11904: 0xDCAA,
+ 38769 - 11904: 0x9651,
+ 38770 - 11904: 0xE0DD,
+ 38771 - 11904: 0xE0DA,
+ 38772 - 11904: 0xB975,
+ 38774 - 11904: 0xB976,
+ 38775 - 11904: 0xE0DB,
+ 38776 - 11904: 0xE0DC,
+ 38778 - 11904: 0xE4C0,
+ 38779 - 11904: 0xE4C5,
+ 38780 - 11904: 0xBBDE,
+ 38781 - 11904: 0xE4BF,
+ 38782 - 11904: 0xE4C1,
+ 38783 - 11904: 0xE4C8,
+ 38784 - 11904: 0xE4C3,
+ 38785 - 11904: 0xE4C7,
+ 38786 - 11904: 0xE4C4,
+ 38787 - 11904: 0xE4C2,
+ 38788 - 11904: 0xE4C6,
+ 38789 - 11904: 0xBBDF,
+ 38791 - 11904: 0xFB58,
+ 38792 - 11904: 0xE8B3,
+ 38793 - 11904: 0x90E6,
+ 38794 - 11904: 0xE8B1,
+ 38795 - 11904: 0xBE63,
+ 38797 - 11904: 0xBE62,
+ 38798 - 11904: 0xE8B2,
+ 38799 - 11904: 0xBE64,
+ 38804 - 11904: 0xEC56,
+ 38807 - 11904: 0xEC55,
+ 38808 - 11904: 0xC054,
+ 38809 - 11904: 0xEC54,
+ 38810 - 11904: 0xEEFC,
+ 38811 - 11904: 0x9650,
+ 38812 - 11904: 0xEEFE,
+ 38813 - 11904: 0xEF41,
+ 38814 - 11904: 0xEF40,
+ 38815 - 11904: 0x90E7,
+ 38816 - 11904: 0xC1F9,
+ 38817 - 11904: 0xEEFD,
+ 38818 - 11904: 0xF1A1,
+ 38819 - 11904: 0xC2FD,
+ 38820 - 11904: 0xF17D,
+ 38821 - 11904: 0xF1A2,
+ 38822 - 11904: 0xC2FE,
+ 38824 - 11904: 0xF17B,
+ 38826 - 11904: 0xF17E,
+ 38827 - 11904: 0xF17C,
+ 38828 - 11904: 0xF179,
+ 38829 - 11904: 0xC340,
+ 38830 - 11904: 0xF17A,
+ 38833 - 11904: 0x90E8,
+ 38834 - 11904: 0x9A5D,
+ 38835 - 11904: 0xF3A1,
+ 38836 - 11904: 0x9F7A,
+ 38838 - 11904: 0xF3A3,
+ 38839 - 11904: 0xF3A2,
+ 38840 - 11904: 0x9B5C,
+ 38841 - 11904: 0xF54A,
+ 38842 - 11904: 0x9F7C,
+ 38843 - 11904: 0xF54B,
+ 38845 - 11904: 0xFC52,
+ 38846 - 11904: 0x90E9,
+ 38847 - 11904: 0xF670,
+ 38848 - 11904: 0x90EA,
+ 38849 - 11904: 0xC5B7,
+ 38850 - 11904: 0x9A5E,
+ 38851 - 11904: 0xC5B6,
+ 38852 - 11904: 0xF84F,
+ 38853 - 11904: 0xF850,
+ 38854 - 11904: 0xC648,
+ 38855 - 11904: 0xF8D1,
+ 38856 - 11904: 0x9F76,
+ 38857 - 11904: 0xC669,
+ 38859 - 11904: 0xADB3,
+ 38860 - 11904: 0xB6B4,
+ 38861 - 11904: 0xE4CA,
+ 38862 - 11904: 0xE4C9,
+ 38863 - 11904: 0xE8B5,
+ 38864 - 11904: 0xE8B4,
+ 38866 - 11904: 0x90EB,
+ 38867 - 11904: 0xC1FA,
+ 38868 - 11904: 0xEF43,
+ 38869 - 11904: 0xEF42,
+ 38870 - 11904: 0xF1A5,
+ 38871 - 11904: 0xF1A3,
+ 38872 - 11904: 0xF1A6,
+ 38873 - 11904: 0xF1A4,
+ 38876 - 11904: 0xC3FC,
+ 38877 - 11904: 0xF3A4,
+ 38878 - 11904: 0xF3A5,
+ 38879 - 11904: 0xF3A6,
+ 38880 - 11904: 0x90EC,
+ 38881 - 11904: 0xF671,
+ 38883 - 11904: 0xF772,
+ 38885 - 11904: 0xF8D2,
+ 38886 - 11904: 0x8BEE,
+ 38893 - 11904: 0xADB4,
+ 38894 - 11904: 0x90EE,
+ 38896 - 11904: 0xEC57,
+ 38897 - 11904: 0xEF44,
+ 38898 - 11904: 0x91C6,
+ 38899 - 11904: 0xADB5,
+ 38901 - 11904: 0x90F2,
+ 38902 - 11904: 0xBBE0,
+ 38904 - 11904: 0xEC58,
+ 38905 - 11904: 0xC341,
+ 38906 - 11904: 0xF1A7,
+ 38907 - 11904: 0xC3FD,
+ 38909 - 11904: 0xF54C,
+ 38910 - 11904: 0xF54D,
+ 38911 - 11904: 0xC554,
+ 38912 - 11904: 0xF851,
+ 38913 - 11904: 0xADB6,
+ 38914 - 11904: 0xB3BB,
+ 38915 - 11904: 0xB3BC,
+ 38916 - 11904: 0xD84E,
+ 38917 - 11904: 0xB6B5,
+ 38918 - 11904: 0xB6B6,
+ 38919 - 11904: 0xDCAC,
+ 38920 - 11904: 0xB6B7,
+ 38922 - 11904: 0xB97A,
+ 38924 - 11904: 0xB97C,
+ 38925 - 11904: 0xE0DF,
+ 38926 - 11904: 0xE0E0,
+ 38927 - 11904: 0xE0DE,
+ 38928 - 11904: 0xB977,
+ 38929 - 11904: 0xB978,
+ 38930 - 11904: 0xB97B,
+ 38931 - 11904: 0xB979,
+ 38932 - 11904: 0xFCBC,
+ 38933 - 11904: 0x8A74,
+ 38934 - 11904: 0xE4CB,
+ 38935 - 11904: 0xBBE1,
+ 38936 - 11904: 0xBBE2,
+ 38939 - 11904: 0xE8BC,
+ 38940 - 11904: 0xBE67,
+ 38941 - 11904: 0xE8B7,
+ 38942 - 11904: 0xE8B6,
+ 38943 - 11904: 0x9657,
+ 38944 - 11904: 0xE8BB,
+ 38945 - 11904: 0xBE65,
+ 38947 - 11904: 0x9CEF,
+ 38948 - 11904: 0xC05B,
+ 38950 - 11904: 0xE8B8,
+ 38951 - 11904: 0xE8BD,
+ 38952 - 11904: 0xE8BA,
+ 38953 - 11904: 0xE8B9,
+ 38955 - 11904: 0xBE66,
+ 38957 - 11904: 0xC059,
+ 38958 - 11904: 0x9FDF,
+ 38959 - 11904: 0xEC5A,
+ 38960 - 11904: 0xC055,
+ 38962 - 11904: 0xEC5B,
+ 38963 - 11904: 0x90F7,
+ 38964 - 11904: 0x90F6,
+ 38965 - 11904: 0xEC59,
+ 38967 - 11904: 0xC058,
+ 38968 - 11904: 0xC056,
+ 38969 - 11904: 0xC05A,
+ 38971 - 11904: 0xC057,
+ 38977 - 11904: 0xEF45,
+ 38979 - 11904: 0xEF4A,
+ 38980 - 11904: 0xEF46,
+ 38981 - 11904: 0xEF49,
+ 38982 - 11904: 0xC1FB,
+ 38983 - 11904: 0x9B5E,
+ 38984 - 11904: 0xEDD4,
+ 38985 - 11904: 0xEF48,
+ 38986 - 11904: 0xEF47,
+ 38987 - 11904: 0x90F8,
+ 38988 - 11904: 0xC344,
+ 38989 - 11904: 0xC342,
+ 38990 - 11904: 0xC345,
+ 38991 - 11904: 0xC343,
+ 38992 - 11904: 0xF1A8,
+ 38993 - 11904: 0xF1A9,
+ 38994 - 11904: 0xF1AA,
+ 38995 - 11904: 0xC346,
+ 38998 - 11904: 0x8CFC,
+ 38999 - 11904: 0xF3AA,
+ 39000 - 11904: 0xC440,
+ 39001 - 11904: 0xF3A8,
+ 39003 - 11904: 0xC441,
+ 39004 - 11904: 0xF3A7,
+ 39005 - 11904: 0xF3A9,
+ 39006 - 11904: 0xC3FE,
+ 39007 - 11904: 0xF551,
+ 39008 - 11904: 0xF54E,
+ 39010 - 11904: 0xF54F,
+ 39011 - 11904: 0xF550,
+ 39012 - 11904: 0xF672,
+ 39013 - 11904: 0xC556,
+ 39014 - 11904: 0x90F9,
+ 39015 - 11904: 0xC555,
+ 39016 - 11904: 0x8CC9,
+ 39017 - 11904: 0xF774,
+ 39018 - 11904: 0xF773,
+ 39019 - 11904: 0xC5B8,
+ 39020 - 11904: 0xFA6A,
+ 39023 - 11904: 0xC5E3,
+ 39024 - 11904: 0xC649,
+ 39025 - 11904: 0xC660,
+ 39026 - 11904: 0xF958,
+ 39027 - 11904: 0xF9AE,
+ 39028 - 11904: 0xF9AF,
+ 39029 - 11904: 0x8BEF,
+ 39080 - 11904: 0xADB7,
+ 39081 - 11904: 0xDCAD,
+ 39084 - 11904: 0xE0E1,
+ 39085 - 11904: 0xE4CC,
+ 39086 - 11904: 0xE4CD,
+ 39087 - 11904: 0xBBE3,
+ 39089 - 11904: 0xBBE4,
+ 39090 - 11904: 0xE8BE,
+ 39091 - 11904: 0xBE68,
+ 39092 - 11904: 0x9FE0,
+ 39094 - 11904: 0xC1FC,
+ 39095 - 11904: 0x9142,
+ 39096 - 11904: 0xF1AB,
+ 39097 - 11904: 0x9A62,
+ 39098 - 11904: 0xC347,
+ 39099 - 11904: 0xF3AD,
+ 39100 - 11904: 0xC442,
+ 39101 - 11904: 0xF3AC,
+ 39102 - 11904: 0xF3AE,
+ 39103 - 11904: 0xF3AB,
+ 39104 - 11904: 0xF675,
+ 39105 - 11904: 0xF552,
+ 39106 - 11904: 0xF553,
+ 39107 - 11904: 0x9569,
+ 39108 - 11904: 0xC4C6,
+ 39110 - 11904: 0xF674,
+ 39111 - 11904: 0x9144,
+ 39112 - 11904: 0x9143,
+ 39113 - 11904: 0xF673,
+ 39114 - 11904: 0x9141,
+ 39115 - 11904: 0xF775,
+ 39116 - 11904: 0xF9B0,
+ 39118 - 11904: 0x8BF0,
+ 39131 - 11904: 0xADB8,
+ 39132 - 11904: 0x9660,
+ 39134 - 11904: 0x8BF1,
+ 39135 - 11904: 0xADB9,
+ 39136 - 11904: 0x99F6,
+ 39137 - 11904: 0x9149,
+ 39138 - 11904: 0xB0A7,
+ 39139 - 11904: 0xD448,
+ 39141 - 11904: 0xD84F,
+ 39142 - 11904: 0x914A,
+ 39143 - 11904: 0xB6B8,
+ 39145 - 11904: 0xB6BB,
+ 39146 - 11904: 0xB6B9,
+ 39147 - 11904: 0xDCAE,
+ 39148 - 11904: 0x914B,
+ 39149 - 11904: 0xB6BD,
+ 39151 - 11904: 0xB6BA,
+ 39153 - 11904: 0x9A64,
+ 39154 - 11904: 0xB6BC,
+ 39156 - 11904: 0xB97E,
+ 39157 - 11904: 0x8ABF,
+ 39158 - 11904: 0xE0E2,
+ 39161 - 11904: 0xE0E3,
+ 39162 - 11904: 0xE8C0,
+ 39164 - 11904: 0xB97D,
+ 39165 - 11904: 0xB9A1,
+ 39166 - 11904: 0xB9A2,
+ 39168 - 11904: 0xE4CF,
+ 39170 - 11904: 0xE4CE,
+ 39171 - 11904: 0xBBE5,
+ 39173 - 11904: 0xBBE6,
+ 39175 - 11904: 0xE4D0,
+ 39176 - 11904: 0xE8BF,
+ 39177 - 11904: 0xBBE8,
+ 39178 - 11904: 0xBE69,
+ 39180 - 11904: 0xBBE7,
+ 39182 - 11904: 0x9A66,
+ 39184 - 11904: 0xC05C,
+ 39185 - 11904: 0xE8C1,
+ 39186 - 11904: 0xBE6B,
+ 39187 - 11904: 0xBE6A,
+ 39188 - 11904: 0xE8C2,
+ 39189 - 11904: 0xE8C5,
+ 39190 - 11904: 0xE8C3,
+ 39191 - 11904: 0xE8C4,
+ 39192 - 11904: 0xBE6C,
+ 39193 - 11904: 0x9A67,
+ 39194 - 11904: 0xC061,
+ 39195 - 11904: 0xC05F,
+ 39196 - 11904: 0x9A69,
+ 39198 - 11904: 0xC05E,
+ 39199 - 11904: 0xEC5D,
+ 39201 - 11904: 0xC060,
+ 39204 - 11904: 0xEC5C,
+ 39205 - 11904: 0xEF4B,
+ 39207 - 11904: 0xEC5E,
+ 39208 - 11904: 0xC05D,
+ 39209 - 11904: 0xEC5F,
+ 39210 - 11904: 0xEF4E,
+ 39211 - 11904: 0xEF4C,
+ 39212 - 11904: 0xEF4D,
+ 39213 - 11904: 0xEF52,
+ 39214 - 11904: 0xC34B,
+ 39215 - 11904: 0xEF51,
+ 39216 - 11904: 0xEF54,
+ 39217 - 11904: 0xEF53,
+ 39218 - 11904: 0xEF50,
+ 39219 - 11904: 0xEF4F,
+ 39221 - 11904: 0xC1FD,
+ 39223 - 11904: 0x9A6A,
+ 39224 - 11904: 0x9652,
+ 39225 - 11904: 0x914D,
+ 39226 - 11904: 0xF1AE,
+ 39227 - 11904: 0x9666,
+ 39228 - 11904: 0xF1AD,
+ 39229 - 11904: 0xC34A,
+ 39230 - 11904: 0xC348,
+ 39231 - 11904: 0xC349,
+ 39232 - 11904: 0x9F7B,
+ 39233 - 11904: 0xF1AC,
+ 39234 - 11904: 0x9A6B,
+ 39235 - 11904: 0xF3B1,
+ 39237 - 11904: 0xC443,
+ 39239 - 11904: 0xF3B0,
+ 39240 - 11904: 0xF3AF,
+ 39241 - 11904: 0xC444,
+ 39242 - 11904: 0xA06C,
+ 39243 - 11904: 0xF558,
+ 39244 - 11904: 0xF557,
+ 39245 - 11904: 0x9667,
+ 39246 - 11904: 0xF555,
+ 39248 - 11904: 0xF554,
+ 39249 - 11904: 0xC4C8,
+ 39250 - 11904: 0xC4C7,
+ 39251 - 11904: 0xF559,
+ 39252 - 11904: 0xF776,
+ 39253 - 11904: 0xC5B9,
+ 39254 - 11904: 0xF677,
+ 39255 - 11904: 0xC557,
+ 39256 - 11904: 0xF676,
+ 39257 - 11904: 0xF556,
+ 39259 - 11904: 0xF777,
+ 39260 - 11904: 0xC5E4,
+ 39261 - 11904: 0x9A6C,
+ 39262 - 11904: 0xC661,
+ 39263 - 11904: 0xF959,
+ 39265 - 11904: 0xF9B1,
+ 39266 - 11904: 0x9A6D,
+ 39267 - 11904: 0x8BF2,
+ 39318 - 11904: 0xADBA,
+ 39319 - 11904: 0xD850,
+ 39320 - 11904: 0xEF55,
+ 39321 - 11904: 0xADBB,
+ 39323 - 11904: 0x966A,
+ 39324 - 11904: 0xE4D2,
+ 39325 - 11904: 0xE4D1,
+ 39326 - 11904: 0xEC60,
+ 39329 - 11904: 0xEF57,
+ 39331 - 11904: 0xEF56,
+ 39332 - 11904: 0xFCEA,
+ 39333 - 11904: 0xC34C,
+ 39334 - 11904: 0xF3B2,
+ 39335 - 11904: 0xF3B3,
+ 39336 - 11904: 0xC4C9,
+ 39338 - 11904: 0x966C,
+ 39339 - 11904: 0xF9B2,
+ 39340 - 11904: 0xB0A8,
+ 39341 - 11904: 0xB6BF,
+ 39342 - 11904: 0xB6BE,
+ 39343 - 11904: 0xE0E4,
+ 39344 - 11904: 0xE0E6,
+ 39345 - 11904: 0xB9A4,
+ 39346 - 11904: 0xE0E5,
+ 39347 - 11904: 0xB9A3,
+ 39348 - 11904: 0xB9A5,
+ 39349 - 11904: 0xE0E7,
+ 39352 - 11904: 0x91C4,
+ 39353 - 11904: 0xE4D4,
+ 39354 - 11904: 0xE4D6,
+ 39355 - 11904: 0xE4D5,
+ 39356 - 11904: 0x9677,
+ 39357 - 11904: 0xE4D8,
+ 39361 - 11904: 0xBBE9,
+ 39362 - 11904: 0xE4D7,
+ 39363 - 11904: 0xE4D3,
+ 39364 - 11904: 0x99F4,
+ 39365 - 11904: 0x9A6F,
+ 39367 - 11904: 0xE4D9,
+ 39369 - 11904: 0xE8CC,
+ 39371 - 11904: 0xE8CF,
+ 39372 - 11904: 0xE8D1,
+ 39373 - 11904: 0xE8C7,
+ 39374 - 11904: 0xE8CB,
+ 39375 - 11904: 0xE8C8,
+ 39376 - 11904: 0xBE6E,
+ 39377 - 11904: 0xBE71,
+ 39378 - 11904: 0xBE73,
+ 39379 - 11904: 0xE8C9,
+ 39380 - 11904: 0xE8CA,
+ 39381 - 11904: 0xBE72,
+ 39382 - 11904: 0xE8CD,
+ 39383 - 11904: 0xE8D0,
+ 39384 - 11904: 0xE8CE,
+ 39385 - 11904: 0xBE74,
+ 39386 - 11904: 0x9FAB,
+ 39387 - 11904: 0xBE70,
+ 39388 - 11904: 0xE8C6,
+ 39389 - 11904: 0xBE6D,
+ 39391 - 11904: 0xBE6F,
+ 39392 - 11904: 0x8CBE,
+ 39393 - 11904: 0x8EC1,
+ 39394 - 11904: 0xC063,
+ 39395 - 11904: 0xEC66,
+ 39396 - 11904: 0xEC64,
+ 39397 - 11904: 0xEC63,
+ 39398 - 11904: 0x9555,
+ 39399 - 11904: 0xEC69,
+ 39401 - 11904: 0xEC68,
+ 39402 - 11904: 0xEC67,
+ 39404 - 11904: 0xEC62,
+ 39405 - 11904: 0xC062,
+ 39406 - 11904: 0xEC61,
+ 39408 - 11904: 0xEC65,
+ 39409 - 11904: 0xC064,
+ 39412 - 11904: 0xEF5A,
+ 39413 - 11904: 0x9152,
+ 39414 - 11904: 0xEF5E,
+ 39415 - 11904: 0xEF5B,
+ 39416 - 11904: 0xEF5D,
+ 39417 - 11904: 0xEF5C,
+ 39418 - 11904: 0xEF59,
+ 39419 - 11904: 0xEF5F,
+ 39420 - 11904: 0xEF62,
+ 39421 - 11904: 0xEF60,
+ 39422 - 11904: 0xEF61,
+ 39423 - 11904: 0xC240,
+ 39425 - 11904: 0xC1FE,
+ 39426 - 11904: 0xEF58,
+ 39427 - 11904: 0xEF63,
+ 39428 - 11904: 0xF1B3,
+ 39429 - 11904: 0xF1B6,
+ 39430 - 11904: 0xF1B8,
+ 39431 - 11904: 0xF1B7,
+ 39433 - 11904: 0xF1B1,
+ 39434 - 11904: 0xF1B5,
+ 39435 - 11904: 0xF1B0,
+ 39436 - 11904: 0x9153,
+ 39437 - 11904: 0xF1B2,
+ 39438 - 11904: 0xC34D,
+ 39439 - 11904: 0xF1AF,
+ 39440 - 11904: 0x9155,
+ 39441 - 11904: 0xF1B4,
+ 39444 - 11904: 0xF3C0,
+ 39445 - 11904: 0xF3B5,
+ 39446 - 11904: 0xC445,
+ 39449 - 11904: 0xC446,
+ 39450 - 11904: 0xF3B4,
+ 39451 - 11904: 0xF3B9,
+ 39452 - 11904: 0xF3BF,
+ 39453 - 11904: 0xF3B7,
+ 39454 - 11904: 0xF3BE,
+ 39455 - 11904: 0x955D,
+ 39456 - 11904: 0xF3BB,
+ 39457 - 11904: 0x9671,
+ 39458 - 11904: 0xF3BA,
+ 39459 - 11904: 0xF3BD,
+ 39460 - 11904: 0xF3B8,
+ 39461 - 11904: 0xF3B6,
+ 39462 - 11904: 0x9C6D,
+ 39463 - 11904: 0xF3BC,
+ 39465 - 11904: 0xF560,
+ 39466 - 11904: 0xF55E,
+ 39467 - 11904: 0xC4CA,
+ 39468 - 11904: 0xF55D,
+ 39469 - 11904: 0xF563,
+ 39470 - 11904: 0xF561,
+ 39471 - 11904: 0x9673,
+ 39472 - 11904: 0xC4CB,
+ 39473 - 11904: 0xF55C,
+ 39474 - 11904: 0xF55A,
+ 39476 - 11904: 0xF55B,
+ 39477 - 11904: 0xC4CD,
+ 39478 - 11904: 0xF55F,
+ 39479 - 11904: 0xC4CC,
+ 39480 - 11904: 0xF562,
+ 39481 - 11904: 0xF678,
+ 39482 - 11904: 0xF67E,
+ 39483 - 11904: 0x9154,
+ 39484 - 11904: 0x9A71,
+ 39485 - 11904: 0xF679,
+ 39486 - 11904: 0xC55B,
+ 39487 - 11904: 0xF6A1,
+ 39488 - 11904: 0xC55A,
+ 39489 - 11904: 0xF67D,
+ 39490 - 11904: 0xF67C,
+ 39491 - 11904: 0xC559,
+ 39492 - 11904: 0xF67B,
+ 39493 - 11904: 0xC558,
+ 39494 - 11904: 0xF67A,
+ 39496 - 11904: 0xF77D,
+ 39497 - 11904: 0xF7A1,
+ 39498 - 11904: 0xF77E,
+ 39500 - 11904: 0xF77B,
+ 39501 - 11904: 0xC5BB,
+ 39502 - 11904: 0xF778,
+ 39503 - 11904: 0xF77C,
+ 39504 - 11904: 0xF7A3,
+ 39506 - 11904: 0xF7A2,
+ 39507 - 11904: 0xF779,
+ 39508 - 11904: 0xF77A,
+ 39509 - 11904: 0xC5BA,
+ 39510 - 11904: 0xF852,
+ 39511 - 11904: 0xC5E7,
+ 39512 - 11904: 0x9156,
+ 39513 - 11904: 0xF853,
+ 39514 - 11904: 0xC5E5,
+ 39515 - 11904: 0xC5E6,
+ 39516 - 11904: 0x966D,
+ 39518 - 11904: 0xF8D3,
+ 39519 - 11904: 0xC64A,
+ 39520 - 11904: 0xF976,
+ 39522 - 11904: 0xC66A,
+ 39523 - 11904: 0x9557,
+ 39524 - 11904: 0xF9B3,
+ 39525 - 11904: 0xC66B,
+ 39526 - 11904: 0xF9B4,
+ 39527 - 11904: 0xF9B5,
+ 39528 - 11904: 0xF9C3,
+ 39529 - 11904: 0xF9C2,
+ 39530 - 11904: 0xC67A,
+ 39531 - 11904: 0xF9CD,
+ 39532 - 11904: 0x89C6,
+ 39567 - 11904: 0x89C7,
+ 39592 - 11904: 0xB0A9,
+ 39595 - 11904: 0xE0E9,
+ 39597 - 11904: 0xE0E8,
+ 39599 - 11904: 0xBBEA,
+ 39600 - 11904: 0xBBEB,
+ 39601 - 11904: 0xE4DA,
+ 39602 - 11904: 0x8A6A,
+ 39603 - 11904: 0xE8D2,
+ 39604 - 11904: 0xEC6C,
+ 39606 - 11904: 0x8B57,
+ 39607 - 11904: 0xBE75,
+ 39608 - 11904: 0xC065,
+ 39609 - 11904: 0xEC6A,
+ 39610 - 11904: 0x9FE1,
+ 39611 - 11904: 0xEC6D,
+ 39612 - 11904: 0xC066,
+ 39613 - 11904: 0x9B5F,
+ 39614 - 11904: 0xEF64,
+ 39615 - 11904: 0xEC6B,
+ 39616 - 11904: 0xF1B9,
+ 39617 - 11904: 0xC34E,
+ 39618 - 11904: 0xF3C1,
+ 39622 - 11904: 0xF566,
+ 39623 - 11904: 0xF564,
+ 39626 - 11904: 0xF565,
+ 39629 - 11904: 0xF6A2,
+ 39631 - 11904: 0xC55C,
+ 39632 - 11904: 0xF7A4,
+ 39633 - 11904: 0xC5EA,
+ 39634 - 11904: 0xC5BC,
+ 39635 - 11904: 0xC5E8,
+ 39636 - 11904: 0xC5E9,
+ 39637 - 11904: 0xF8D4,
+ 39638 - 11904: 0xC662,
+ 39639 - 11904: 0xA05D,
+ 39640 - 11904: 0xB0AA,
+ 39644 - 11904: 0xF1BA,
+ 39647 - 11904: 0xD449,
+ 39648 - 11904: 0x915B,
+ 39649 - 11904: 0xB9A6,
+ 39650 - 11904: 0x915C,
+ 39651 - 11904: 0xE4DB,
+ 39654 - 11904: 0xBBEC,
+ 39655 - 11904: 0xE4DC,
+ 39659 - 11904: 0xE8D4,
+ 39660 - 11904: 0xE8D3,
+ 39661 - 11904: 0xC068,
+ 39662 - 11904: 0xBE76,
+ 39663 - 11904: 0xBE77,
+ 39665 - 11904: 0xE8D7,
+ 39666 - 11904: 0xE8D6,
+ 39667 - 11904: 0xE8D5,
+ 39668 - 11904: 0x915E,
+ 39670 - 11904: 0xEC6E,
+ 39671 - 11904: 0xEC71,
+ 39673 - 11904: 0xEC70,
+ 39674 - 11904: 0xEC6F,
+ 39675 - 11904: 0xC067,
+ 39676 - 11904: 0xEF68,
+ 39677 - 11904: 0xEF66,
+ 39678 - 11904: 0xEF65,
+ 39679 - 11904: 0x9F5C,
+ 39681 - 11904: 0xEF67,
+ 39682 - 11904: 0x9F57,
+ 39683 - 11904: 0xC34F,
+ 39684 - 11904: 0xF1BC,
+ 39685 - 11904: 0xF1BD,
+ 39686 - 11904: 0xC350,
+ 39688 - 11904: 0xF1BB,
+ 39689 - 11904: 0x9F65,
+ 39690 - 11904: 0xF3C3,
+ 39691 - 11904: 0xF3C2,
+ 39692 - 11904: 0xF3C5,
+ 39693 - 11904: 0xC447,
+ 39694 - 11904: 0xF3C4,
+ 39695 - 11904: 0x9A72,
+ 39696 - 11904: 0xF567,
+ 39697 - 11904: 0xF569,
+ 39698 - 11904: 0xF568,
+ 39700 - 11904: 0x9160,
+ 39701 - 11904: 0xF6A3,
+ 39702 - 11904: 0xF6A6,
+ 39703 - 11904: 0xF6A4,
+ 39704 - 11904: 0xF6A5,
+ 39705 - 11904: 0xF7A5,
+ 39706 - 11904: 0xC5BD,
+ 39710 - 11904: 0xF854,
+ 39711 - 11904: 0xF855,
+ 39712 - 11904: 0xF856,
+ 39714 - 11904: 0xC64B,
+ 39715 - 11904: 0xC663,
+ 39716 - 11904: 0xF9B6,
+ 39717 - 11904: 0xB0AB,
+ 39719 - 11904: 0xBE78,
+ 39720 - 11904: 0xC069,
+ 39721 - 11904: 0xF1BE,
+ 39722 - 11904: 0x9F5E,
+ 39723 - 11904: 0xF7A6,
+ 39725 - 11904: 0x9161,
+ 39726 - 11904: 0xF9C4,
+ 39727 - 11904: 0xD44A,
+ 39729 - 11904: 0xC67B,
+ 39730 - 11904: 0xB0AC,
+ 39731 - 11904: 0xEC72,
+ 39732 - 11904: 0x9164,
+ 39733 - 11904: 0xF1BF,
+ 39735 - 11904: 0xF3C6,
+ 39737 - 11904: 0x9F41,
+ 39738 - 11904: 0xF6A7,
+ 39739 - 11904: 0xF7A7,
+ 39740 - 11904: 0xB0AD,
+ 39742 - 11904: 0xE4DD,
+ 39743 - 11904: 0xE4DE,
+ 39744 - 11904: 0x9169,
+ 39745 - 11904: 0xBBED,
+ 39746 - 11904: 0xBBEE,
+ 39747 - 11904: 0xE8D9,
+ 39748 - 11904: 0xBE7A,
+ 39749 - 11904: 0xBE79,
+ 39750 - 11904: 0xE8D8,
+ 39752 - 11904: 0xEF69,
+ 39754 - 11904: 0xF1C0,
+ 39755 - 11904: 0xF1C2,
+ 39756 - 11904: 0xF1C1,
+ 39757 - 11904: 0xC353,
+ 39758 - 11904: 0xC352,
+ 39759 - 11904: 0xC351,
+ 39760 - 11904: 0x9168,
+ 39761 - 11904: 0xC55E,
+ 39762 - 11904: 0xF6A8,
+ 39764 - 11904: 0xC55D,
+ 39765 - 11904: 0xF7A9,
+ 39766 - 11904: 0xF7A8,
+ 39768 - 11904: 0xC64C,
+ 39769 - 11904: 0xF8D5,
+ 39770 - 11904: 0xB3BD,
+ 39771 - 11904: 0xE0EA,
+ 39775 - 11904: 0xE4E1,
+ 39776 - 11904: 0xE4DF,
+ 39777 - 11904: 0xE4E0,
+ 39780 - 11904: 0xE8E2,
+ 39782 - 11904: 0xE8DD,
+ 39783 - 11904: 0xE8DA,
+ 39784 - 11904: 0xE8E1,
+ 39785 - 11904: 0x9A74,
+ 39788 - 11904: 0xE8E3,
+ 39791 - 11904: 0xBE7C,
+ 39792 - 11904: 0xE8E0,
+ 39793 - 11904: 0xE8DC,
+ 39796 - 11904: 0xE8DB,
+ 39797 - 11904: 0xE8DF,
+ 39798 - 11904: 0xE8DE,
+ 39799 - 11904: 0xBE7B,
+ 39802 - 11904: 0xEC7D,
+ 39803 - 11904: 0xEC78,
+ 39804 - 11904: 0xEC76,
+ 39805 - 11904: 0xECA1,
+ 39806 - 11904: 0xEC77,
+ 39807 - 11904: 0x96B2,
+ 39808 - 11904: 0xEC73,
+ 39809 - 11904: 0x9A75,
+ 39810 - 11904: 0xEC79,
+ 39811 - 11904: 0xFDA5,
+ 39813 - 11904: 0xEC74,
+ 39814 - 11904: 0xEF72,
+ 39815 - 11904: 0xEC75,
+ 39816 - 11904: 0xECA2,
+ 39819 - 11904: 0x9EE9,
+ 39821 - 11904: 0x8BBA,
+ 39822 - 11904: 0x916D,
+ 39823 - 11904: 0xA060,
+ 39824 - 11904: 0xEC7C,
+ 39825 - 11904: 0xC06A,
+ 39826 - 11904: 0xEC7B,
+ 39827 - 11904: 0xEC7A,
+ 39829 - 11904: 0xEC7E,
+ 39831 - 11904: 0x9FDE,
+ 39834 - 11904: 0xEF6A,
+ 39835 - 11904: 0xEF6D,
+ 39837 - 11904: 0x9FC3,
+ 39838 - 11904: 0xEF6C,
+ 39839 - 11904: 0x96B5,
+ 39840 - 11904: 0xEF74,
+ 39841 - 11904: 0xEF6F,
+ 39842 - 11904: 0xEF73,
+ 39844 - 11904: 0xEF71,
+ 39845 - 11904: 0xEF70,
+ 39846 - 11904: 0xEF6E,
+ 39848 - 11904: 0xEF6B,
+ 39850 - 11904: 0xC243,
+ 39851 - 11904: 0xC242,
+ 39853 - 11904: 0xC244,
+ 39854 - 11904: 0xC241,
+ 39855 - 11904: 0xEF75,
+ 39856 - 11904: 0xA067,
+ 39861 - 11904: 0xF1C8,
+ 39862 - 11904: 0xF1CB,
+ 39864 - 11904: 0xF1C9,
+ 39865 - 11904: 0xF1CD,
+ 39869 - 11904: 0xF1CE,
+ 39871 - 11904: 0xF1C6,
+ 39872 - 11904: 0xC358,
+ 39873 - 11904: 0xF1C7,
+ 39875 - 11904: 0xF1C5,
+ 39876 - 11904: 0xF1CC,
+ 39878 - 11904: 0xF1C4,
+ 39879 - 11904: 0xF1C3,
+ 39880 - 11904: 0xC357,
+ 39881 - 11904: 0xC355,
+ 39882 - 11904: 0xC354,
+ 39887 - 11904: 0x96B3,
+ 39891 - 11904: 0xF1CA,
+ 39892 - 11904: 0xF3CF,
+ 39893 - 11904: 0xF3D5,
+ 39894 - 11904: 0xC44A,
+ 39895 - 11904: 0xF3D0,
+ 39897 - 11904: 0xF3D3,
+ 39898 - 11904: 0xF3D7,
+ 39899 - 11904: 0xC44B,
+ 39900 - 11904: 0xF3D2,
+ 39901 - 11904: 0x9A76,
+ 39902 - 11904: 0xF3CA,
+ 39904 - 11904: 0xF3C9,
+ 39905 - 11904: 0xF3D6,
+ 39906 - 11904: 0xF3CD,
+ 39908 - 11904: 0xF3CB,
+ 39909 - 11904: 0xF3D4,
+ 39910 - 11904: 0xF3CC,
+ 39911 - 11904: 0xC449,
+ 39912 - 11904: 0xC448,
+ 39913 - 11904: 0x95D5,
+ 39914 - 11904: 0xF3C7,
+ 39915 - 11904: 0xF3C8,
+ 39916 - 11904: 0xF3D1,
+ 39917 - 11904: 0x9ECA,
+ 39920 - 11904: 0xF3CE,
+ 39921 - 11904: 0x9A77,
+ 39924 - 11904: 0x9A78,
+ 39927 - 11904: 0xF56C,
+ 39928 - 11904: 0xF56F,
+ 39933 - 11904: 0xC356,
+ 39935 - 11904: 0x9170,
+ 39938 - 11904: 0x916F,
+ 39941 - 11904: 0xF56D,
+ 39942 - 11904: 0xF573,
+ 39943 - 11904: 0xF571,
+ 39944 - 11904: 0xF56B,
+ 39945 - 11904: 0xF576,
+ 39946 - 11904: 0x9FA3,
+ 39947 - 11904: 0xF56A,
+ 39948 - 11904: 0x9171,
+ 39949 - 11904: 0xC4CF,
+ 39950 - 11904: 0xF572,
+ 39952 - 11904: 0x96B1,
+ 39954 - 11904: 0xF56E,
+ 39955 - 11904: 0xC4CE,
+ 39956 - 11904: 0xF575,
+ 39957 - 11904: 0x9F63,
+ 39959 - 11904: 0xF574,
+ 39963 - 11904: 0x9F67,
+ 39964 - 11904: 0xF6AB,
+ 39965 - 11904: 0xF6AA,
+ 39967 - 11904: 0x8BB9,
+ 39968 - 11904: 0x9A7A,
+ 39969 - 11904: 0xF6B1,
+ 39971 - 11904: 0xF6AD,
+ 39972 - 11904: 0xF6B0,
+ 39973 - 11904: 0xC560,
+ 39974 - 11904: 0x8B56,
+ 39976 - 11904: 0xF6AE,
+ 39977 - 11904: 0xF6AF,
+ 39979 - 11904: 0xF6A9,
+ 39980 - 11904: 0xF6AC,
+ 39981 - 11904: 0xC55F,
+ 39983 - 11904: 0x9ADA,
+ 39985 - 11904: 0xC5BF,
+ 39986 - 11904: 0xF7B4,
+ 39987 - 11904: 0xF7AF,
+ 39988 - 11904: 0xF7B3,
+ 39989 - 11904: 0x96B0,
+ 39990 - 11904: 0xF7B6,
+ 39991 - 11904: 0xF7B2,
+ 39993 - 11904: 0xF7AE,
+ 39994 - 11904: 0x9A7E,
+ 39995 - 11904: 0xC5C1,
+ 39996 - 11904: 0xF7B1,
+ 39997 - 11904: 0xF7B5,
+ 39998 - 11904: 0xC5C0,
+ 39999 - 11904: 0xF7AC,
+ 40000 - 11904: 0xF570,
+ 40001 - 11904: 0xF7B0,
+ 40004 - 11904: 0xF7AD,
+ 40005 - 11904: 0x9DDE,
+ 40006 - 11904: 0xF7AA,
+ 40008 - 11904: 0xF7AB,
+ 40009 - 11904: 0xC5BE,
+ 40010 - 11904: 0xF85A,
+ 40011 - 11904: 0xF85C,
+ 40012 - 11904: 0xF85F,
+ 40013 - 11904: 0xF85B,
+ 40014 - 11904: 0xF860,
+ 40015 - 11904: 0x96AD,
+ 40016 - 11904: 0xF859,
+ 40018 - 11904: 0xF857,
+ 40019 - 11904: 0x96AE,
+ 40020 - 11904: 0xC5EB,
+ 40021 - 11904: 0xF85D,
+ 40022 - 11904: 0xC5ED,
+ 40023 - 11904: 0xC5EC,
+ 40024 - 11904: 0xF858,
+ 40025 - 11904: 0xF85E,
+ 40029 - 11904: 0x9EA1,
+ 40030 - 11904: 0xF8DA,
+ 40031 - 11904: 0xC64D,
+ 40032 - 11904: 0xF8DB,
+ 40034 - 11904: 0xF8D9,
+ 40035 - 11904: 0xF8D6,
+ 40038 - 11904: 0xF8D8,
+ 40039 - 11904: 0xF8D7,
+ 40040 - 11904: 0xF95A,
+ 40045 - 11904: 0xF95C,
+ 40046 - 11904: 0xF95B,
+ 40049 - 11904: 0xF979,
+ 40050 - 11904: 0x9E50,
+ 40051 - 11904: 0xF978,
+ 40052 - 11904: 0xF977,
+ 40053 - 11904: 0xF97A,
+ 40055 - 11904: 0xC673,
+ 40056 - 11904: 0xC674,
+ 40057 - 11904: 0xF9CA,
+ 40058 - 11904: 0xF9CE,
+ 40059 - 11904: 0x96AF,
+ 40060 - 11904: 0x8BF4,
+ 40165 - 11904: 0xB3BE,
+ 40166 - 11904: 0xDCAF,
+ 40167 - 11904: 0xE0ED,
+ 40169 - 11904: 0xB9A7,
+ 40170 - 11904: 0xE0EB,
+ 40173 - 11904: 0xE0EC,
+ 40177 - 11904: 0xE4E2,
+ 40178 - 11904: 0xE4E3,
+ 40179 - 11904: 0xBBF1,
+ 40180 - 11904: 0xBBEF,
+ 40181 - 11904: 0xE4E4,
+ 40182 - 11904: 0xBBF0,
+ 40183 - 11904: 0xE8E8,
+ 40185 - 11904: 0xE8EB,
+ 40186 - 11904: 0xE8E5,
+ 40187 - 11904: 0xE8EC,
+ 40188 - 11904: 0xE8E4,
+ 40189 - 11904: 0xE8E6,
+ 40191 - 11904: 0xE8E7,
+ 40192 - 11904: 0xE8EA,
+ 40194 - 11904: 0x9FA4,
+ 40195 - 11904: 0xBEA1,
+ 40196 - 11904: 0xE8EF,
+ 40197 - 11904: 0xE8EE,
+ 40198 - 11904: 0xBE7D,
+ 40199 - 11904: 0xE8E9,
+ 40200 - 11904: 0xE8ED,
+ 40201 - 11904: 0xBE7E,
+ 40204 - 11904: 0x96BD,
+ 40208 - 11904: 0xECAC,
+ 40210 - 11904: 0xC06F,
+ 40212 - 11904: 0xECA7,
+ 40213 - 11904: 0xC06B,
+ 40214 - 11904: 0x96F4,
+ 40215 - 11904: 0xECA4,
+ 40216 - 11904: 0xECAA,
+ 40217 - 11904: 0xECAD,
+ 40219 - 11904: 0xC070,
+ 40221 - 11904: 0xECA9,
+ 40222 - 11904: 0xECA6,
+ 40223 - 11904: 0xECAE,
+ 40224 - 11904: 0xECA5,
+ 40225 - 11904: 0x96B8,
+ 40226 - 11904: 0xECAB,
+ 40227 - 11904: 0xC06C,
+ 40229 - 11904: 0xECA3,
+ 40230 - 11904: 0xC06D,
+ 40232 - 11904: 0xC06E,
+ 40233 - 11904: 0xECA8,
+ 40237 - 11904: 0xEFA9,
+ 40238 - 11904: 0xEF7A,
+ 40239 - 11904: 0xEF7B,
+ 40240 - 11904: 0xEF7E,
+ 40241 - 11904: 0xEF7C,
+ 40243 - 11904: 0xEF76,
+ 40244 - 11904: 0xFAA1,
+ 40246 - 11904: 0xEF79,
+ 40247 - 11904: 0xEFA5,
+ 40248 - 11904: 0xEF7D,
+ 40249 - 11904: 0x91A7,
+ 40251 - 11904: 0xC245,
+ 40253 - 11904: 0xEFA7,
+ 40254 - 11904: 0xEFA4,
+ 40255 - 11904: 0xC246,
+ 40256 - 11904: 0xEFA6,
+ 40257 - 11904: 0xEF77,
+ 40258 - 11904: 0xEFA2,
+ 40259 - 11904: 0xEFA3,
+ 40260 - 11904: 0xA05E,
+ 40261 - 11904: 0xEFA1,
+ 40265 - 11904: 0x9A7D,
+ 40266 - 11904: 0xF1D2,
+ 40267 - 11904: 0xF1D4,
+ 40268 - 11904: 0xF1D7,
+ 40270 - 11904: 0x8948,
+ 40271 - 11904: 0xF1D1,
+ 40272 - 11904: 0x9EB1,
+ 40273 - 11904: 0xC359,
+ 40274 - 11904: 0xF1D9,
+ 40275 - 11904: 0xF1D0,
+ 40276 - 11904: 0xF1DA,
+ 40278 - 11904: 0xF1D6,
+ 40279 - 11904: 0xF1D8,
+ 40280 - 11904: 0xF1DC,
+ 40281 - 11904: 0xF1D5,
+ 40282 - 11904: 0xF1DD,
+ 40283 - 11904: 0xF1D3,
+ 40284 - 11904: 0xF1CF,
+ 40285 - 11904: 0xC35A,
+ 40286 - 11904: 0x9DDB,
+ 40287 - 11904: 0xF1DB,
+ 40288 - 11904: 0xC35B,
+ 40289 - 11904: 0xC44D,
+ 40295 - 11904: 0xEF78,
+ 40296 - 11904: 0xF3F1,
+ 40297 - 11904: 0xF3E8,
+ 40298 - 11904: 0xC44F,
+ 40299 - 11904: 0xF3E4,
+ 40300 - 11904: 0xC450,
+ 40301 - 11904: 0x95BF,
+ 40302 - 11904: 0x8A73,
+ 40303 - 11904: 0xF3ED,
+ 40304 - 11904: 0xF3E7,
+ 40305 - 11904: 0xF3DD,
+ 40306 - 11904: 0xC44E,
+ 40307 - 11904: 0xF3EA,
+ 40308 - 11904: 0xF3E5,
+ 40309 - 11904: 0xF3E6,
+ 40311 - 11904: 0xF3D8,
+ 40312 - 11904: 0xF3DF,
+ 40313 - 11904: 0xF3EE,
+ 40315 - 11904: 0xF3EB,
+ 40316 - 11904: 0x9EFE,
+ 40317 - 11904: 0xF3E3,
+ 40318 - 11904: 0x917A,
+ 40319 - 11904: 0xF3EF,
+ 40320 - 11904: 0xF3DE,
+ 40321 - 11904: 0xF3D9,
+ 40322 - 11904: 0xF3EC,
+ 40323 - 11904: 0x917B,
+ 40324 - 11904: 0xF3DB,
+ 40325 - 11904: 0xF3E9,
+ 40326 - 11904: 0xF3E0,
+ 40327 - 11904: 0xF3F0,
+ 40328 - 11904: 0xF3DC,
+ 40329 - 11904: 0xC44C,
+ 40330 - 11904: 0xF3DA,
+ 40331 - 11904: 0xF3E1,
+ 40332 - 11904: 0xF3E2,
+ 40336 - 11904: 0xF57D,
+ 40338 - 11904: 0xF57B,
+ 40339 - 11904: 0x9AA3,
+ 40340 - 11904: 0xF5A2,
+ 40342 - 11904: 0xF5AE,
+ 40343 - 11904: 0xF5A5,
+ 40344 - 11904: 0xF57C,
+ 40345 - 11904: 0xF578,
+ 40346 - 11904: 0xF5A7,
+ 40347 - 11904: 0xF57E,
+ 40348 - 11904: 0xF5A3,
+ 40349 - 11904: 0xF57A,
+ 40350 - 11904: 0xF5AA,
+ 40351 - 11904: 0xF577,
+ 40352 - 11904: 0xF5A1,
+ 40353 - 11904: 0xF5A6,
+ 40354 - 11904: 0xF5A8,
+ 40355 - 11904: 0xF5AB,
+ 40356 - 11904: 0xF579,
+ 40357 - 11904: 0x96C2,
+ 40358 - 11904: 0xF5AF,
+ 40359 - 11904: 0xF5B0,
+ 40360 - 11904: 0xF5A9,
+ 40361 - 11904: 0xF5AD,
+ 40362 - 11904: 0xF5A4,
+ 40363 - 11904: 0x9F77,
+ 40364 - 11904: 0xF6C1,
+ 40365 - 11904: 0xF6C4,
+ 40367 - 11904: 0xC561,
+ 40369 - 11904: 0xF6C3,
+ 40370 - 11904: 0xF6C8,
+ 40371 - 11904: 0xF6C6,
+ 40372 - 11904: 0xC562,
+ 40373 - 11904: 0xF6BD,
+ 40374 - 11904: 0xF6B3,
+ 40375 - 11904: 0xF6B2,
+ 40376 - 11904: 0xC564,
+ 40377 - 11904: 0xF6BF,
+ 40378 - 11904: 0xF6C0,
+ 40379 - 11904: 0xF6BC,
+ 40380 - 11904: 0xF6B4,
+ 40381 - 11904: 0x9AA4,
+ 40382 - 11904: 0xF6B9,
+ 40383 - 11904: 0xF5AC,
+ 40384 - 11904: 0x9AA5,
+ 40385 - 11904: 0xF6B5,
+ 40386 - 11904: 0xC563,
+ 40387 - 11904: 0xF6BB,
+ 40388 - 11904: 0x91A1,
+ 40389 - 11904: 0xF6BA,
+ 40391 - 11904: 0xF6B6,
+ 40392 - 11904: 0xF6C2,
+ 40393 - 11904: 0x89B8,
+ 40394 - 11904: 0xF6B7,
+ 40395 - 11904: 0xF7BB,
+ 40396 - 11904: 0xF6C5,
+ 40397 - 11904: 0xF6C7,
+ 40398 - 11904: 0xF6BE,
+ 40399 - 11904: 0xF6B8,
+ 40400 - 11904: 0xF7BC,
+ 40401 - 11904: 0xF7BE,
+ 40402 - 11904: 0xF7B8,
+ 40403 - 11904: 0xC5C2,
+ 40404 - 11904: 0x9173,
+ 40405 - 11904: 0xF7C5,
+ 40406 - 11904: 0xF7C3,
+ 40407 - 11904: 0xC5C3,
+ 40408 - 11904: 0xF7C2,
+ 40409 - 11904: 0xF7C1,
+ 40410 - 11904: 0xF7BA,
+ 40411 - 11904: 0xF7B7,
+ 40412 - 11904: 0xF7BD,
+ 40413 - 11904: 0xF7C6,
+ 40414 - 11904: 0xF7B9,
+ 40415 - 11904: 0xF7BF,
+ 40417 - 11904: 0xF869,
+ 40418 - 11904: 0xF86E,
+ 40419 - 11904: 0xF864,
+ 40420 - 11904: 0xF867,
+ 40421 - 11904: 0xC5EE,
+ 40422 - 11904: 0xF86B,
+ 40424 - 11904: 0xF872,
+ 40425 - 11904: 0xF7C0,
+ 40427 - 11904: 0xF865,
+ 40428 - 11904: 0xF86F,
+ 40429 - 11904: 0xF873,
+ 40430 - 11904: 0xF86A,
+ 40431 - 11904: 0xF863,
+ 40432 - 11904: 0xF86D,
+ 40434 - 11904: 0xF86C,
+ 40435 - 11904: 0xF871,
+ 40436 - 11904: 0xF870,
+ 40437 - 11904: 0xF7C4,
+ 40438 - 11904: 0xF868,
+ 40439 - 11904: 0xF862,
+ 40440 - 11904: 0xF866,
+ 40441 - 11904: 0xC64E,
+ 40442 - 11904: 0xC64F,
+ 40443 - 11904: 0xF861,
+ 40444 - 11904: 0x9AA6,
+ 40445 - 11904: 0xF8E6,
+ 40446 - 11904: 0xF8DD,
+ 40447 - 11904: 0xF8E5,
+ 40448 - 11904: 0xF8E2,
+ 40449 - 11904: 0xF8E3,
+ 40450 - 11904: 0xF8DC,
+ 40451 - 11904: 0xF8DF,
+ 40452 - 11904: 0xF8E7,
+ 40453 - 11904: 0xF8E1,
+ 40454 - 11904: 0xF8E0,
+ 40455 - 11904: 0xF8DE,
+ 40457 - 11904: 0xF8E4,
+ 40458 - 11904: 0x89BD,
+ 40459 - 11904: 0xF95D,
+ 40460 - 11904: 0x89B9,
+ 40461 - 11904: 0xF95E,
+ 40462 - 11904: 0x917D,
+ 40463 - 11904: 0xF960,
+ 40464 - 11904: 0xF95F,
+ 40465 - 11904: 0xF962,
+ 40466 - 11904: 0xF961,
+ 40467 - 11904: 0xF97C,
+ 40468 - 11904: 0xF97B,
+ 40469 - 11904: 0xF9B7,
+ 40471 - 11904: 0xF9B8,
+ 40472 - 11904: 0x96BB,
+ 40473 - 11904: 0xF9C5,
+ 40474 - 11904: 0xC678,
+ 40475 - 11904: 0xC67C,
+ 40476 - 11904: 0x9FF2,
+ 40477 - 11904: 0xF9CF,
+ 40478 - 11904: 0xC67D,
+ 40479 - 11904: 0x8BF5,
+ 40565 - 11904: 0xB3BF,
+ 40569 - 11904: 0xC4D0,
+ 40570 - 11904: 0xF6C9,
+ 40571 - 11904: 0x9AA9,
+ 40572 - 11904: 0xC650,
+ 40573 - 11904: 0xC651,
+ 40575 - 11904: 0xB3C0,
+ 40576 - 11904: 0xE0EE,
+ 40577 - 11904: 0x9F54,
+ 40578 - 11904: 0xB9A8,
+ 40579 - 11904: 0xE8F0,
+ 40580 - 11904: 0x9FE3,
+ 40581 - 11904: 0x9EED,
+ 40582 - 11904: 0xECB0,
+ 40583 - 11904: 0xECB1,
+ 40584 - 11904: 0xECAF,
+ 40585 - 11904: 0xEFAB,
+ 40586 - 11904: 0xEFAA,
+ 40587 - 11904: 0xC247,
+ 40588 - 11904: 0xF1DF,
+ 40589 - 11904: 0xEFAC,
+ 40590 - 11904: 0xF1DE,
+ 40592 - 11904: 0x91AA,
+ 40593 - 11904: 0xF3F3,
+ 40594 - 11904: 0xC451,
+ 40595 - 11904: 0xC453,
+ 40596 - 11904: 0xF3F2,
+ 40597 - 11904: 0x91AB,
+ 40598 - 11904: 0xA070,
+ 40599 - 11904: 0xC452,
+ 40600 - 11904: 0x9F6D,
+ 40601 - 11904: 0xF5B1,
+ 40602 - 11904: 0xF5B3,
+ 40603 - 11904: 0xF5B2,
+ 40604 - 11904: 0xF6CA,
+ 40605 - 11904: 0xC565,
+ 40606 - 11904: 0x91AC,
+ 40607 - 11904: 0xC5EF,
+ 40608 - 11904: 0xF8E8,
+ 40609 - 11904: 0xF963,
+ 40610 - 11904: 0x91AD,
+ 40612 - 11904: 0xF9D2,
+ 40613 - 11904: 0xB3C1,
+ 40614 - 11904: 0xA0FD,
+ 40615 - 11904: 0xE4E5,
+ 40616 - 11904: 0x9FE2,
+ 40617 - 11904: 0xBEA2,
+ 40618 - 11904: 0x91AF,
+ 40619 - 11904: 0x9E41,
+ 40620 - 11904: 0x9AAA,
+ 40621 - 11904: 0xECB3,
+ 40622 - 11904: 0xECB2,
+ 40623 - 11904: 0x91B0,
+ 40624 - 11904: 0xEFAD,
+ 40625 - 11904: 0x9AAB,
+ 40628 - 11904: 0xC454,
+ 40629 - 11904: 0xC4D1,
+ 40630 - 11904: 0xF7C7,
+ 40631 - 11904: 0xF9CB,
+ 40635 - 11904: 0xB3C2,
+ 40636 - 11904: 0xBBF2,
+ 40637 - 11904: 0x9AAC,
+ 40638 - 11904: 0xBEA3,
+ 40639 - 11904: 0x9A4A,
+ 40640 - 11904: 0xF3F4,
+ 40641 - 11904: 0x91B2,
+ 40642 - 11904: 0xF874,
+ 40643 - 11904: 0xB6C0,
+ 40644 - 11904: 0x8BF6,
+ 40646 - 11904: 0x9AAD,
+ 40647 - 11904: 0x89B6,
+ 40648 - 11904: 0xEFAE,
+ 40652 - 11904: 0xC664,
+ 40653 - 11904: 0xB6C1,
+ 40654 - 11904: 0xBEA4,
+ 40655 - 11904: 0xC248,
+ 40656 - 11904: 0xF875,
+ 40657 - 11904: 0xB6C2,
+ 40659 - 11904: 0xE8F1,
+ 40660 - 11904: 0xC072,
+ 40661 - 11904: 0xECB4,
+ 40662 - 11904: 0xECB5,
+ 40664 - 11904: 0xC071,
+ 40666 - 11904: 0xEFAF,
+ 40667 - 11904: 0xC24C,
+ 40668 - 11904: 0xC24A,
+ 40669 - 11904: 0xC24B,
+ 40670 - 11904: 0xC249,
+ 40671 - 11904: 0xF1E0,
+ 40672 - 11904: 0xC35C,
+ 40674 - 11904: 0x9AAF,
+ 40676 - 11904: 0xF5B5,
+ 40677 - 11904: 0xF5B4,
+ 40678 - 11904: 0xF5B7,
+ 40679 - 11904: 0xF5B6,
+ 40680 - 11904: 0xC4D2,
+ 40683 - 11904: 0xF6CB,
+ 40685 - 11904: 0xF6CD,
+ 40686 - 11904: 0xF6CC,
+ 40687 - 11904: 0xC566,
+ 40688 - 11904: 0xF7C8,
+ 40689 - 11904: 0x9AB0,
+ 40690 - 11904: 0xF876,
+ 40691 - 11904: 0xF877,
+ 40692 - 11904: 0xC5F0,
+ 40693 - 11904: 0xF964,
+ 40694 - 11904: 0xF97D,
+ 40695 - 11904: 0xC675,
+ 40696 - 11904: 0x9AB1,
+ 40697 - 11904: 0xDCB0,
+ 40698 - 11904: 0xECB6,
+ 40699 - 11904: 0xEFB0,
+ 40700 - 11904: 0xF3F5,
+ 40701 - 11904: 0xE0EF,
+ 40702 - 11904: 0x9AA1,
+ 40703 - 11904: 0xEFB1,
+ 40704 - 11904: 0xF1E2,
+ 40705 - 11904: 0xF1E1,
+ 40706 - 11904: 0x91B9,
+ 40710 - 11904: 0xF878,
+ 40711 - 11904: 0xC652,
+ 40712 - 11904: 0x91BA,
+ 40713 - 11904: 0xF965,
+ 40714 - 11904: 0xF97E,
+ 40718 - 11904: 0xB9A9,
+ 40719 - 11904: 0xE8F2,
+ 40720 - 11904: 0xE8F3,
+ 40722 - 11904: 0xECB7,
+ 40723 - 11904: 0xB9AA,
+ 40725 - 11904: 0xC35D,
+ 40726 - 11904: 0xF1E3,
+ 40727 - 11904: 0x9F66,
+ 40728 - 11904: 0xF6CF,
+ 40729 - 11904: 0xC567,
+ 40730 - 11904: 0xF6D0,
+ 40731 - 11904: 0xF6CE,
+ 40732 - 11904: 0xF879,
+ 40734 - 11904: 0xF8E9,
+ 40736 - 11904: 0xB9AB,
+ 40738 - 11904: 0xEFB4,
+ 40739 - 11904: 0xEFB3,
+ 40740 - 11904: 0xEFB2,
+ 40741 - 11904: 0xF1E4,
+ 40742 - 11904: 0xA041,
+ 40743 - 11904: 0x8BB7,
+ 40744 - 11904: 0xF1E8,
+ 40745 - 11904: 0xF1E7,
+ 40746 - 11904: 0xF1E6,
+ 40747 - 11904: 0xF1E5,
+ 40748 - 11904: 0xC35E,
+ 40749 - 11904: 0xF3F6,
+ 40750 - 11904: 0xF5B9,
+ 40751 - 11904: 0xC4D3,
+ 40752 - 11904: 0xF5B8,
+ 40753 - 11904: 0xF6D1,
+ 40754 - 11904: 0xF7CB,
+ 40755 - 11904: 0xF7CA,
+ 40756 - 11904: 0xC5C4,
+ 40757 - 11904: 0xF7C9,
+ 40758 - 11904: 0xF87C,
+ 40759 - 11904: 0xF87B,
+ 40760 - 11904: 0xF87A,
+ 40761 - 11904: 0x91C0,
+ 40763 - 11904: 0xBBF3,
+ 40765 - 11904: 0xECB8,
+ 40766 - 11904: 0xC24D,
+ 40768 - 11904: 0xF3F7,
+ 40769 - 11904: 0xF3F8,
+ 40770 - 11904: 0xF7CC,
+ 40771 - 11904: 0xF87D,
+ 40772 - 11904: 0x9AB3,
+ 40773 - 11904: 0x91C3,
+ 40774 - 11904: 0xF8EA,
+ 40775 - 11904: 0xF966,
+ 40776 - 11904: 0xF9B9,
+ 40777 - 11904: 0xF9D4,
+ 40778 - 11904: 0xBBF4,
+ 40779 - 11904: 0xC24E,
+ 40780 - 11904: 0xF1E9,
+ 40781 - 11904: 0xF3F9,
+ 40782 - 11904: 0xF6D2,
+ 40783 - 11904: 0xF87E,
+ 40784 - 11904: 0xA0FC,
+ 40786 - 11904: 0xBEA6,
+ 40787 - 11904: 0x9FEE,
+ 40788 - 11904: 0xEFB5,
+ 40789 - 11904: 0xF1EA,
+ 40790 - 11904: 0xF3FA,
+ 40791 - 11904: 0xF3FB,
+ 40792 - 11904: 0xF3FC,
+ 40793 - 11904: 0xF5BE,
+ 40794 - 11904: 0x9F69,
+ 40795 - 11904: 0xF5BA,
+ 40796 - 11904: 0xC568,
+ 40797 - 11904: 0xF5BD,
+ 40798 - 11904: 0xF5BC,
+ 40799 - 11904: 0xC4D4,
+ 40800 - 11904: 0xF5BB,
+ 40801 - 11904: 0xC4D6,
+ 40802 - 11904: 0x91C8,
+ 40803 - 11904: 0xC4D5,
+ 40804 - 11904: 0xF6D4,
+ 40805 - 11904: 0xF6D3,
+ 40806 - 11904: 0xC569,
+ 40807 - 11904: 0xC56A,
+ 40809 - 11904: 0x91C9,
+ 40810 - 11904: 0xC5C6,
+ 40811 - 11904: 0xF7CD,
+ 40812 - 11904: 0xC5C5,
+ 40814 - 11904: 0xF8A3,
+ 40815 - 11904: 0xF8A4,
+ 40816 - 11904: 0xF8A2,
+ 40817 - 11904: 0xF8A1,
+ 40818 - 11904: 0xC654,
+ 40820 - 11904: 0xF8EB,
+ 40821 - 11904: 0xF8EC,
+ 40822 - 11904: 0xF8ED,
+ 40823 - 11904: 0xC653,
+ 40824 - 11904: 0xF967,
+ 40825 - 11904: 0xF96A,
+ 40826 - 11904: 0xF969,
+ 40827 - 11904: 0xF968,
+ 40830 - 11904: 0xF9D3,
+ 40831 - 11904: 0x8DE6,
+ 40845 - 11904: 0xC073,
+ 40846 - 11904: 0x91CB,
+ 40848 - 11904: 0xC365,
+ 40849 - 11904: 0xF5BF,
+ 40850 - 11904: 0xF6D5,
+ 40852 - 11904: 0xC5C7,
+ 40853 - 11904: 0xF7CE,
+ 40854 - 11904: 0x87AC,
+ 40855 - 11904: 0x87A4,
+ 40856 - 11904: 0xF9D5,
+ 40857 - 11904: 0x89C8,
+ 40860 - 11904: 0xC074,
+ 40863 - 11904: 0x8DAA,
+ 40864 - 11904: 0xEFB6,
+ 40866 - 11904: 0xF7CF,
+ 40868 - 11904: 0xF9A1,
+ 40869 - 11904: 0x9FDD,
+ 40870 - 11904: 0x8C43,
+ 40871 - 11904: 0x8C6D,
+ 40872 - 11904: 0x8C74,
+ 40873 - 11904: 0x8CB7,
+ 40874 - 11904: 0x8CB9,
+ 40875 - 11904: 0x8CBB,
+ 40876 - 11904: 0x8CC0,
+ 40877 - 11904: 0x8CD7,
+ 40878 - 11904: 0x8CD8,
+ 40879 - 11904: 0x8CDA,
+ 40880 - 11904: 0xC8A1,
+ 40881 - 11904: 0xC8A3,
+ 40882 - 11904: 0x8CED,
+ 40883 - 11904: 0x8D48,
+ 40903 - 11904: 0x87C2,
+ 40904 - 11904: 0x87D2,
+ 40905 - 11904: 0x87D6,
+ 40906 - 11904: 0x87DA,
+ 40907 - 11904: 0x87DF,
+}
+
+const encode2Low, encode2High = 7870, 10046
+
+var encode2 = [...]uint16{
+ 7870 - 7870: 0x8863,
+ 7871 - 7870: 0x88A4,
+ 7872 - 7870: 0x8865,
+ 7873 - 7870: 0x88A6,
+ 8211 - 7870: 0xA156,
+ 8212 - 7870: 0xA158,
+ 8216 - 7870: 0xA1A5,
+ 8217 - 7870: 0xA1A6,
+ 8220 - 7870: 0xA1A7,
+ 8221 - 7870: 0xA1A8,
+ 8229 - 7870: 0xA14C,
+ 8230 - 7870: 0xA14B,
+ 8231 - 7870: 0xA145,
+ 8242 - 7870: 0xA1AC,
+ 8245 - 7870: 0xA1AB,
+ 8251 - 7870: 0xA1B0,
+ 8364 - 7870: 0xA3E1,
+ 8451 - 7870: 0xA24A,
+ 8453 - 7870: 0xA1C1,
+ 8457 - 7870: 0xA24B,
+ 8470 - 7870: 0xC8D2,
+ 8481 - 7870: 0xC8D3,
+ 8544 - 7870: 0xA2B9,
+ 8545 - 7870: 0xA2BA,
+ 8546 - 7870: 0xA2BB,
+ 8547 - 7870: 0xA2BC,
+ 8548 - 7870: 0xA2BD,
+ 8549 - 7870: 0xA2BE,
+ 8550 - 7870: 0xA2BF,
+ 8551 - 7870: 0xA2C0,
+ 8552 - 7870: 0xA2C1,
+ 8553 - 7870: 0xA2C2,
+ 8560 - 7870: 0xC6B5,
+ 8561 - 7870: 0xC6B6,
+ 8562 - 7870: 0xC6B7,
+ 8563 - 7870: 0xC6B8,
+ 8564 - 7870: 0xC6B9,
+ 8565 - 7870: 0xC6BA,
+ 8566 - 7870: 0xC6BB,
+ 8567 - 7870: 0xC6BC,
+ 8568 - 7870: 0xC6BD,
+ 8569 - 7870: 0xC6BE,
+ 8592 - 7870: 0xA1F6,
+ 8593 - 7870: 0xA1F4,
+ 8594 - 7870: 0xA1F7,
+ 8595 - 7870: 0xA1F5,
+ 8598 - 7870: 0xA1F8,
+ 8599 - 7870: 0xA1F9,
+ 8600 - 7870: 0xA1FB,
+ 8601 - 7870: 0xA1FA,
+ 8632 - 7870: 0xC877,
+ 8633 - 7870: 0xC878,
+ 8679 - 7870: 0xC876,
+ 8725 - 7870: 0xA241,
+ 8730 - 7870: 0xA1D4,
+ 8734 - 7870: 0xA1DB,
+ 8735 - 7870: 0xA1E8,
+ 8736 - 7870: 0xA1E7,
+ 8739 - 7870: 0xA1FD,
+ 8741 - 7870: 0xA1FC,
+ 8745 - 7870: 0xA1E4,
+ 8746 - 7870: 0xA1E5,
+ 8747 - 7870: 0xA1EC,
+ 8750 - 7870: 0xA1ED,
+ 8756 - 7870: 0xA1EF,
+ 8757 - 7870: 0xA1EE,
+ 8786 - 7870: 0xA1DC,
+ 8800 - 7870: 0xA1DA,
+ 8801 - 7870: 0xA1DD,
+ 8806 - 7870: 0xA1D8,
+ 8807 - 7870: 0xA1D9,
+ 8853 - 7870: 0xA1F2,
+ 8857 - 7870: 0xA1F3,
+ 8869 - 7870: 0xA1E6,
+ 8895 - 7870: 0xA1E9,
+ 9178 - 7870: 0x88A9,
+ 9179 - 7870: 0x88AA,
+ 9216 - 7870: 0xA3C0,
+ 9217 - 7870: 0xA3C1,
+ 9218 - 7870: 0xA3C2,
+ 9219 - 7870: 0xA3C3,
+ 9220 - 7870: 0xA3C4,
+ 9221 - 7870: 0xA3C5,
+ 9222 - 7870: 0xA3C6,
+ 9223 - 7870: 0xA3C7,
+ 9224 - 7870: 0xA3C8,
+ 9225 - 7870: 0xA3C9,
+ 9226 - 7870: 0xA3CA,
+ 9227 - 7870: 0xA3CB,
+ 9228 - 7870: 0xA3CC,
+ 9229 - 7870: 0xA3CD,
+ 9230 - 7870: 0xA3CE,
+ 9231 - 7870: 0xA3CF,
+ 9232 - 7870: 0xA3D0,
+ 9233 - 7870: 0xA3D1,
+ 9234 - 7870: 0xA3D2,
+ 9235 - 7870: 0xA3D3,
+ 9236 - 7870: 0xA3D4,
+ 9237 - 7870: 0xA3D5,
+ 9238 - 7870: 0xA3D6,
+ 9239 - 7870: 0xA3D7,
+ 9240 - 7870: 0xA3D8,
+ 9241 - 7870: 0xA3D9,
+ 9242 - 7870: 0xA3DA,
+ 9243 - 7870: 0xA3DB,
+ 9244 - 7870: 0xA3DC,
+ 9245 - 7870: 0xA3DD,
+ 9246 - 7870: 0xA3DE,
+ 9247 - 7870: 0xA3DF,
+ 9249 - 7870: 0xA3E0,
+ 9312 - 7870: 0xC6A1,
+ 9313 - 7870: 0xC6A2,
+ 9314 - 7870: 0xC6A3,
+ 9315 - 7870: 0xC6A4,
+ 9316 - 7870: 0xC6A5,
+ 9317 - 7870: 0xC6A6,
+ 9318 - 7870: 0xC6A7,
+ 9319 - 7870: 0xC6A8,
+ 9320 - 7870: 0xC6A9,
+ 9321 - 7870: 0xC6AA,
+ 9332 - 7870: 0xC6AB,
+ 9333 - 7870: 0xC6AC,
+ 9334 - 7870: 0xC6AD,
+ 9335 - 7870: 0xC6AE,
+ 9336 - 7870: 0xC6AF,
+ 9337 - 7870: 0xC6B0,
+ 9338 - 7870: 0xC6B1,
+ 9339 - 7870: 0xC6B2,
+ 9340 - 7870: 0xC6B3,
+ 9341 - 7870: 0xC6B4,
+ 9472 - 7870: 0xA277,
+ 9474 - 7870: 0xA278,
+ 9484 - 7870: 0xA27A,
+ 9488 - 7870: 0xA27B,
+ 9492 - 7870: 0xA27C,
+ 9496 - 7870: 0xA27D,
+ 9500 - 7870: 0xA275,
+ 9508 - 7870: 0xA274,
+ 9516 - 7870: 0xA273,
+ 9524 - 7870: 0xA272,
+ 9532 - 7870: 0xA271,
+ 9552 - 7870: 0xF9F9,
+ 9553 - 7870: 0xF9F8,
+ 9554 - 7870: 0xF9E6,
+ 9555 - 7870: 0xF9EF,
+ 9556 - 7870: 0xF9DD,
+ 9557 - 7870: 0xF9E8,
+ 9558 - 7870: 0xF9F1,
+ 9559 - 7870: 0xF9DF,
+ 9560 - 7870: 0xF9EC,
+ 9561 - 7870: 0xF9F5,
+ 9562 - 7870: 0xF9E3,
+ 9563 - 7870: 0xF9EE,
+ 9564 - 7870: 0xF9F7,
+ 9565 - 7870: 0xF9E5,
+ 9566 - 7870: 0xF9E9,
+ 9567 - 7870: 0xF9F2,
+ 9568 - 7870: 0xF9E0,
+ 9569 - 7870: 0xF9EB,
+ 9570 - 7870: 0xF9F4,
+ 9571 - 7870: 0xF9E2,
+ 9572 - 7870: 0xF9E7,
+ 9573 - 7870: 0xF9F0,
+ 9574 - 7870: 0xF9DE,
+ 9575 - 7870: 0xF9ED,
+ 9576 - 7870: 0xF9F6,
+ 9577 - 7870: 0xF9E4,
+ 9578 - 7870: 0xF9EA,
+ 9579 - 7870: 0xF9F3,
+ 9580 - 7870: 0xF9E1,
+ 9581 - 7870: 0xF9FA,
+ 9582 - 7870: 0xF9FB,
+ 9583 - 7870: 0xF9FD,
+ 9584 - 7870: 0xF9FC,
+ 9585 - 7870: 0xA2AC,
+ 9586 - 7870: 0xA2AD,
+ 9587 - 7870: 0xA2AE,
+ 9588 - 7870: 0xA15A,
+ 9601 - 7870: 0xA262,
+ 9602 - 7870: 0xA263,
+ 9603 - 7870: 0xA264,
+ 9604 - 7870: 0xA265,
+ 9605 - 7870: 0xA266,
+ 9606 - 7870: 0xA267,
+ 9607 - 7870: 0xA268,
+ 9608 - 7870: 0xA269,
+ 9609 - 7870: 0xA270,
+ 9610 - 7870: 0xA26F,
+ 9611 - 7870: 0xA26E,
+ 9612 - 7870: 0xA26D,
+ 9613 - 7870: 0xA26C,
+ 9614 - 7870: 0xA26B,
+ 9615 - 7870: 0xA26A,
+ 9620 - 7870: 0xA276,
+ 9621 - 7870: 0xA279,
+ 9632 - 7870: 0xA1BD,
+ 9633 - 7870: 0xA1BC,
+ 9650 - 7870: 0xA1B6,
+ 9651 - 7870: 0xA1B5,
+ 9660 - 7870: 0xA1BF,
+ 9661 - 7870: 0xA1BE,
+ 9670 - 7870: 0xA1BB,
+ 9671 - 7870: 0xA1BA,
+ 9675 - 7870: 0xA1B3,
+ 9678 - 7870: 0xA1B7,
+ 9679 - 7870: 0xA1B4,
+ 9698 - 7870: 0xA2A8,
+ 9699 - 7870: 0xA2A9,
+ 9700 - 7870: 0xA2AB,
+ 9701 - 7870: 0xA2AA,
+ 9733 - 7870: 0xA1B9,
+ 9734 - 7870: 0xA1B8,
+ 9792 - 7870: 0xA1F0,
+ 9794 - 7870: 0xA1F1,
+ 10045 - 7870: 0xC6E6,
+}
+
+const encode3Low, encode3High = 167, 1106
+
+var encode3 = [...]uint16{
+ 167 - 167: 0xA1B1,
+ 168 - 167: 0xC6D8,
+ 175 - 167: 0xA1C2,
+ 176 - 167: 0xA258,
+ 177 - 167: 0xA1D3,
+ 183 - 167: 0xA150,
+ 192 - 167: 0x8859,
+ 193 - 167: 0x8857,
+ 200 - 167: 0x885D,
+ 201 - 167: 0x885B,
+ 202 - 167: 0x8866,
+ 210 - 167: 0x8861,
+ 211 - 167: 0x885F,
+ 215 - 167: 0xA1D1,
+ 224 - 167: 0x886A,
+ 225 - 167: 0x8868,
+ 232 - 167: 0x886F,
+ 233 - 167: 0x886D,
+ 234 - 167: 0x88A7,
+ 236 - 167: 0x8873,
+ 237 - 167: 0x8871,
+ 242 - 167: 0x8877,
+ 243 - 167: 0x8875,
+ 247 - 167: 0xA1D2,
+ 248 - 167: 0xC8FB,
+ 249 - 167: 0x887B,
+ 250 - 167: 0x8879,
+ 252 - 167: 0x88A2,
+ 256 - 167: 0x8856,
+ 257 - 167: 0x8867,
+ 274 - 167: 0x885A,
+ 275 - 167: 0x886C,
+ 282 - 167: 0x885C,
+ 283 - 167: 0x886E,
+ 299 - 167: 0x8870,
+ 331 - 167: 0xC8FC,
+ 332 - 167: 0x885E,
+ 333 - 167: 0x8874,
+ 339 - 167: 0xC8FA,
+ 363 - 167: 0x8878,
+ 461 - 167: 0x8858,
+ 462 - 167: 0x8869,
+ 464 - 167: 0x8872,
+ 465 - 167: 0x8860,
+ 466 - 167: 0x8876,
+ 468 - 167: 0x887A,
+ 470 - 167: 0x887C,
+ 472 - 167: 0x887D,
+ 474 - 167: 0x887E,
+ 476 - 167: 0x88A1,
+ 592 - 167: 0xC8F6,
+ 593 - 167: 0x886B,
+ 596 - 167: 0xC8F8,
+ 603 - 167: 0xC8F7,
+ 609 - 167: 0x88A8,
+ 618 - 167: 0xC8FE,
+ 629 - 167: 0xC8F9,
+ 643 - 167: 0xC8F5,
+ 650 - 167: 0xC8FD,
+ 710 - 167: 0xC6D9,
+ 711 - 167: 0xA3BE,
+ 713 - 167: 0xA3BC,
+ 714 - 167: 0xA3BD,
+ 715 - 167: 0xA3BF,
+ 717 - 167: 0xA1C5,
+ 729 - 167: 0xA3BB,
+ 913 - 167: 0xA344,
+ 914 - 167: 0xA345,
+ 915 - 167: 0xA346,
+ 916 - 167: 0xA347,
+ 917 - 167: 0xA348,
+ 918 - 167: 0xA349,
+ 919 - 167: 0xA34A,
+ 920 - 167: 0xA34B,
+ 921 - 167: 0xA34C,
+ 922 - 167: 0xA34D,
+ 923 - 167: 0xA34E,
+ 924 - 167: 0xA34F,
+ 925 - 167: 0xA350,
+ 926 - 167: 0xA351,
+ 927 - 167: 0xA352,
+ 928 - 167: 0xA353,
+ 929 - 167: 0xA354,
+ 931 - 167: 0xA355,
+ 932 - 167: 0xA356,
+ 933 - 167: 0xA357,
+ 934 - 167: 0xA358,
+ 935 - 167: 0xA359,
+ 936 - 167: 0xA35A,
+ 937 - 167: 0xA35B,
+ 945 - 167: 0xA35C,
+ 946 - 167: 0xA35D,
+ 947 - 167: 0xA35E,
+ 948 - 167: 0xA35F,
+ 949 - 167: 0xA360,
+ 950 - 167: 0xA361,
+ 951 - 167: 0xA362,
+ 952 - 167: 0xA363,
+ 953 - 167: 0xA364,
+ 954 - 167: 0xA365,
+ 955 - 167: 0xA366,
+ 956 - 167: 0xA367,
+ 957 - 167: 0xA368,
+ 958 - 167: 0xA369,
+ 959 - 167: 0xA36A,
+ 960 - 167: 0xA36B,
+ 961 - 167: 0xA36C,
+ 963 - 167: 0xA36D,
+ 964 - 167: 0xA36E,
+ 965 - 167: 0xA36F,
+ 966 - 167: 0xA370,
+ 967 - 167: 0xA371,
+ 968 - 167: 0xA372,
+ 969 - 167: 0xA373,
+ 1025 - 167: 0xC7F9,
+ 1040 - 167: 0xC7F3,
+ 1041 - 167: 0xC7F4,
+ 1042 - 167: 0xC7F5,
+ 1043 - 167: 0xC7F6,
+ 1044 - 167: 0xC7F7,
+ 1045 - 167: 0xC7F8,
+ 1046 - 167: 0xC7FA,
+ 1047 - 167: 0xC7FB,
+ 1048 - 167: 0xC7FC,
+ 1049 - 167: 0xC7FD,
+ 1050 - 167: 0xC7FE,
+ 1051 - 167: 0xC840,
+ 1052 - 167: 0xC841,
+ 1053 - 167: 0xC842,
+ 1054 - 167: 0xC843,
+ 1055 - 167: 0xC844,
+ 1056 - 167: 0xC845,
+ 1057 - 167: 0xC846,
+ 1058 - 167: 0xC847,
+ 1059 - 167: 0xC848,
+ 1060 - 167: 0xC849,
+ 1061 - 167: 0xC84A,
+ 1062 - 167: 0xC84B,
+ 1063 - 167: 0xC84C,
+ 1064 - 167: 0xC84D,
+ 1065 - 167: 0xC84E,
+ 1066 - 167: 0xC84F,
+ 1067 - 167: 0xC850,
+ 1068 - 167: 0xC851,
+ 1069 - 167: 0xC852,
+ 1070 - 167: 0xC853,
+ 1071 - 167: 0xC854,
+ 1072 - 167: 0xC855,
+ 1073 - 167: 0xC856,
+ 1074 - 167: 0xC857,
+ 1075 - 167: 0xC858,
+ 1076 - 167: 0xC859,
+ 1077 - 167: 0xC85A,
+ 1078 - 167: 0xC85C,
+ 1079 - 167: 0xC85D,
+ 1080 - 167: 0xC85E,
+ 1081 - 167: 0xC85F,
+ 1082 - 167: 0xC860,
+ 1083 - 167: 0xC861,
+ 1084 - 167: 0xC862,
+ 1085 - 167: 0xC863,
+ 1086 - 167: 0xC864,
+ 1087 - 167: 0xC865,
+ 1088 - 167: 0xC866,
+ 1089 - 167: 0xC867,
+ 1090 - 167: 0xC868,
+ 1091 - 167: 0xC869,
+ 1092 - 167: 0xC86A,
+ 1093 - 167: 0xC86B,
+ 1094 - 167: 0xC86C,
+ 1095 - 167: 0xC86D,
+ 1096 - 167: 0xC86E,
+ 1097 - 167: 0xC86F,
+ 1098 - 167: 0xC870,
+ 1099 - 167: 0xC871,
+ 1100 - 167: 0xC872,
+ 1101 - 167: 0xC873,
+ 1102 - 167: 0xC874,
+ 1103 - 167: 0xC875,
+ 1105 - 167: 0xC85B,
+}
+
+const encode4Low, encode4High = 65072, 65518
+
+var encode4 = [...]uint16{
+ 65072 - 65072: 0xA14A,
+ 65073 - 65072: 0xA157,
+ 65075 - 65072: 0xA159,
+ 65076 - 65072: 0xA15B,
+ 65077 - 65072: 0xA15F,
+ 65078 - 65072: 0xA160,
+ 65079 - 65072: 0xA163,
+ 65080 - 65072: 0xA164,
+ 65081 - 65072: 0xA167,
+ 65082 - 65072: 0xA168,
+ 65083 - 65072: 0xA16B,
+ 65084 - 65072: 0xA16C,
+ 65085 - 65072: 0xA16F,
+ 65086 - 65072: 0xA170,
+ 65087 - 65072: 0xA173,
+ 65088 - 65072: 0xA174,
+ 65089 - 65072: 0xA177,
+ 65090 - 65072: 0xA178,
+ 65091 - 65072: 0xA17B,
+ 65092 - 65072: 0xA17C,
+ 65097 - 65072: 0xA1C6,
+ 65098 - 65072: 0xA1C7,
+ 65099 - 65072: 0xA1CA,
+ 65100 - 65072: 0xA1CB,
+ 65101 - 65072: 0xA1C8,
+ 65102 - 65072: 0xA1C9,
+ 65103 - 65072: 0xA15C,
+ 65104 - 65072: 0xA14D,
+ 65105 - 65072: 0xA14E,
+ 65106 - 65072: 0xA14F,
+ 65108 - 65072: 0xA151,
+ 65109 - 65072: 0xA152,
+ 65110 - 65072: 0xA153,
+ 65111 - 65072: 0xA154,
+ 65113 - 65072: 0xA17D,
+ 65114 - 65072: 0xA17E,
+ 65115 - 65072: 0xA1A1,
+ 65116 - 65072: 0xA1A2,
+ 65117 - 65072: 0xA1A3,
+ 65118 - 65072: 0xA1A4,
+ 65119 - 65072: 0xA1CC,
+ 65120 - 65072: 0xA1CD,
+ 65121 - 65072: 0xA1CE,
+ 65122 - 65072: 0xA1DE,
+ 65123 - 65072: 0xA1DF,
+ 65124 - 65072: 0xA1E0,
+ 65125 - 65072: 0xA1E1,
+ 65126 - 65072: 0xA1E2,
+ 65128 - 65072: 0xA242,
+ 65129 - 65072: 0xA24C,
+ 65130 - 65072: 0xA24D,
+ 65131 - 65072: 0xA24E,
+ 65281 - 65072: 0xA149,
+ 65282 - 65072: 0xC8D0,
+ 65283 - 65072: 0xA1AD,
+ 65284 - 65072: 0xA243,
+ 65285 - 65072: 0xA248,
+ 65286 - 65072: 0xA1AE,
+ 65287 - 65072: 0xC8CF,
+ 65288 - 65072: 0xA15D,
+ 65289 - 65072: 0xA15E,
+ 65290 - 65072: 0xA1AF,
+ 65291 - 65072: 0xA1CF,
+ 65292 - 65072: 0xA141,
+ 65293 - 65072: 0xA1D0,
+ 65294 - 65072: 0xA144,
+ 65295 - 65072: 0xA1FE,
+ 65296 - 65072: 0xA2AF,
+ 65297 - 65072: 0xA2B0,
+ 65298 - 65072: 0xA2B1,
+ 65299 - 65072: 0xA2B2,
+ 65300 - 65072: 0xA2B3,
+ 65301 - 65072: 0xA2B4,
+ 65302 - 65072: 0xA2B5,
+ 65303 - 65072: 0xA2B6,
+ 65304 - 65072: 0xA2B7,
+ 65305 - 65072: 0xA2B8,
+ 65306 - 65072: 0xA147,
+ 65307 - 65072: 0xA146,
+ 65308 - 65072: 0xA1D5,
+ 65309 - 65072: 0xA1D7,
+ 65310 - 65072: 0xA1D6,
+ 65311 - 65072: 0xA148,
+ 65312 - 65072: 0xA249,
+ 65313 - 65072: 0xA2CF,
+ 65314 - 65072: 0xA2D0,
+ 65315 - 65072: 0xA2D1,
+ 65316 - 65072: 0xA2D2,
+ 65317 - 65072: 0xA2D3,
+ 65318 - 65072: 0xA2D4,
+ 65319 - 65072: 0xA2D5,
+ 65320 - 65072: 0xA2D6,
+ 65321 - 65072: 0xA2D7,
+ 65322 - 65072: 0xA2D8,
+ 65323 - 65072: 0xA2D9,
+ 65324 - 65072: 0xA2DA,
+ 65325 - 65072: 0xA2DB,
+ 65326 - 65072: 0xA2DC,
+ 65327 - 65072: 0xA2DD,
+ 65328 - 65072: 0xA2DE,
+ 65329 - 65072: 0xA2DF,
+ 65330 - 65072: 0xA2E0,
+ 65331 - 65072: 0xA2E1,
+ 65332 - 65072: 0xA2E2,
+ 65333 - 65072: 0xA2E3,
+ 65334 - 65072: 0xA2E4,
+ 65335 - 65072: 0xA2E5,
+ 65336 - 65072: 0xA2E6,
+ 65337 - 65072: 0xA2E7,
+ 65338 - 65072: 0xA2E8,
+ 65339 - 65072: 0xC6E4,
+ 65340 - 65072: 0xA240,
+ 65341 - 65072: 0xC6E5,
+ 65343 - 65072: 0xA1C4,
+ 65345 - 65072: 0xA2E9,
+ 65346 - 65072: 0xA2EA,
+ 65347 - 65072: 0xA2EB,
+ 65348 - 65072: 0xA2EC,
+ 65349 - 65072: 0xA2ED,
+ 65350 - 65072: 0xA2EE,
+ 65351 - 65072: 0xA2EF,
+ 65352 - 65072: 0xA2F0,
+ 65353 - 65072: 0xA2F1,
+ 65354 - 65072: 0xA2F2,
+ 65355 - 65072: 0xA2F3,
+ 65356 - 65072: 0xA2F4,
+ 65357 - 65072: 0xA2F5,
+ 65358 - 65072: 0xA2F6,
+ 65359 - 65072: 0xA2F7,
+ 65360 - 65072: 0xA2F8,
+ 65361 - 65072: 0xA2F9,
+ 65362 - 65072: 0xA2FA,
+ 65363 - 65072: 0xA2FB,
+ 65364 - 65072: 0xA2FC,
+ 65365 - 65072: 0xA2FD,
+ 65366 - 65072: 0xA2FE,
+ 65367 - 65072: 0xA340,
+ 65368 - 65072: 0xA341,
+ 65369 - 65072: 0xA342,
+ 65370 - 65072: 0xA343,
+ 65371 - 65072: 0xA161,
+ 65372 - 65072: 0xA155,
+ 65373 - 65072: 0xA162,
+ 65374 - 65072: 0xA1E3,
+ 65504 - 65072: 0xA246,
+ 65505 - 65072: 0xA247,
+ 65506 - 65072: 0xC8CD,
+ 65507 - 65072: 0xA1C3,
+ 65508 - 65072: 0xC8CE,
+ 65509 - 65072: 0xA244,
+ 65517 - 65072: 0xF9FE,
+}
+
+const encode5Low, encode5High = 194597, 195029
+
+var encode5 = [...]uint16{
+ 194597 - 194597: 0x9874,
+ 194619 - 194597: 0x9AC8,
+ 194624 - 194597: 0xA047,
+ 194680 - 194597: 0x8BC3,
+ 194708 - 194597: 0xFC48,
+ 194726 - 194597: 0xFC77,
+ 194765 - 194597: 0x9C52,
+ 194964 - 194597: 0x8EFD,
+ 194994 - 194597: 0x8FA8,
+ 195004 - 194597: 0x957A,
+ 195028 - 194597: 0x8FF0,
+}
+
+const encode6Low, encode6High = 63751, 64014
+
+var encode6 = [...]uint16{
+ 63751 - 63751: 0x8BF8,
+ 64012 - 63751: 0xC94A,
+ 64013 - 63751: 0xDDFC,
+}
+
+const encode7Low, encode7High = 175615, 175616
+
+var encode7 = [...]uint16{
+ 175615 - 175615: 0x87DC,
+}
diff --git a/vendor/golang.org/x/text/encoding/unicode/override.go b/vendor/golang.org/x/text/encoding/unicode/override.go
new file mode 100644
index 000000000..35d62fcc9
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/unicode/override.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 unicode
+
+import (
+ "golang.org/x/text/transform"
+)
+
+// BOMOverride returns a new decoder transformer that is identical to fallback,
+// except that the presence of a Byte Order Mark at the start of the input
+// causes it to switch to the corresponding Unicode decoding. It will only
+// consider BOMs for UTF-8, UTF-16BE, and UTF-16LE.
+//
+// This differs from using ExpectBOM by allowing a BOM to switch to UTF-8, not
+// just UTF-16 variants, and allowing falling back to any encoding scheme.
+//
+// This technique is recommended by the W3C for use in HTML 5: "For
+// compatibility with deployed content, the byte order mark (also known as BOM)
+// is considered more authoritative than anything else."
+// http://www.w3.org/TR/encoding/#specification-hooks
+//
+// Using BOMOverride is mostly intended for use cases where the first characters
+// of a fallback encoding are known to not be a BOM, for example, for valid HTML
+// and most encodings.
+func BOMOverride(fallback transform.Transformer) transform.Transformer {
+ // TODO: possibly allow a variadic argument of unicode encodings to allow
+ // specifying details of which fallbacks are supported as well as
+ // specifying the details of the implementations. This would also allow for
+ // support for UTF-32, which should not be supported by default.
+ return &bomOverride{fallback: fallback}
+}
+
+type bomOverride struct {
+ fallback transform.Transformer
+ current transform.Transformer
+}
+
+func (d *bomOverride) Reset() {
+ d.current = nil
+ d.fallback.Reset()
+}
+
+var (
+ // TODO: we could use decode functions here, instead of allocating a new
+ // decoder on every NewDecoder as IgnoreBOM decoders can be stateless.
+ utf16le = UTF16(LittleEndian, IgnoreBOM)
+ utf16be = UTF16(BigEndian, IgnoreBOM)
+)
+
+const utf8BOM = "\ufeff"
+
+func (d *bomOverride) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ if d.current != nil {
+ return d.current.Transform(dst, src, atEOF)
+ }
+ if len(src) < 3 && !atEOF {
+ return 0, 0, transform.ErrShortSrc
+ }
+ d.current = d.fallback
+ bomSize := 0
+ if len(src) >= 2 {
+ if src[0] == 0xFF && src[1] == 0xFE {
+ d.current = utf16le.NewDecoder()
+ bomSize = 2
+ } else if src[0] == 0xFE && src[1] == 0xFF {
+ d.current = utf16be.NewDecoder()
+ bomSize = 2
+ } else if len(src) >= 3 &&
+ src[0] == utf8BOM[0] &&
+ src[1] == utf8BOM[1] &&
+ src[2] == utf8BOM[2] {
+ d.current = transform.Nop
+ bomSize = 3
+ }
+ }
+ if bomSize < len(src) {
+ nDst, nSrc, err = d.current.Transform(dst, src[bomSize:], atEOF)
+ }
+ return nDst, nSrc + bomSize, err
+}
diff --git a/vendor/golang.org/x/text/encoding/unicode/unicode.go b/vendor/golang.org/x/text/encoding/unicode/unicode.go
new file mode 100644
index 000000000..4850ff365
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/unicode/unicode.go
@@ -0,0 +1,434 @@
+// 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 unicode provides Unicode encodings such as UTF-16.
+package unicode // import "golang.org/x/text/encoding/unicode"
+
+import (
+ "errors"
+ "unicode/utf16"
+ "unicode/utf8"
+
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/internal"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/internal/utf8internal"
+ "golang.org/x/text/runes"
+ "golang.org/x/text/transform"
+)
+
+// TODO: I think the Transformers really should return errors on unmatched
+// surrogate pairs and odd numbers of bytes. This is not required by RFC 2781,
+// which leaves it open, but is suggested by WhatWG. It will allow for all error
+// modes as defined by WhatWG: fatal, HTML and Replacement. This would require
+// the introduction of some kind of error type for conveying the erroneous code
+// point.
+
+// UTF8 is the UTF-8 encoding.
+var UTF8 encoding.Encoding = utf8enc
+
+var utf8enc = &internal.Encoding{
+ &internal.SimpleEncoding{utf8Decoder{}, runes.ReplaceIllFormed()},
+ "UTF-8",
+ identifier.UTF8,
+}
+
+type utf8Decoder struct{ transform.NopResetter }
+
+func (utf8Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ var pSrc int // point from which to start copy in src
+ var accept utf8internal.AcceptRange
+
+ // The decoder can only make the input larger, not smaller.
+ n := len(src)
+ if len(dst) < n {
+ err = transform.ErrShortDst
+ n = len(dst)
+ atEOF = false
+ }
+ for nSrc < n {
+ c := src[nSrc]
+ if c < utf8.RuneSelf {
+ nSrc++
+ continue
+ }
+ first := utf8internal.First[c]
+ size := int(first & utf8internal.SizeMask)
+ if first == utf8internal.FirstInvalid {
+ goto handleInvalid // invalid starter byte
+ }
+ accept = utf8internal.AcceptRanges[first>>utf8internal.AcceptShift]
+ if nSrc+size > n {
+ if !atEOF {
+ // We may stop earlier than necessary here if the short sequence
+ // has invalid bytes. Not checking for this simplifies the code
+ // and may avoid duplicate computations in certain conditions.
+ if err == nil {
+ err = transform.ErrShortSrc
+ }
+ break
+ }
+ // Determine the maximal subpart of an ill-formed subsequence.
+ switch {
+ case nSrc+1 >= n || src[nSrc+1] < accept.Lo || accept.Hi < src[nSrc+1]:
+ size = 1
+ case nSrc+2 >= n || src[nSrc+2] < utf8internal.LoCB || utf8internal.HiCB < src[nSrc+2]:
+ size = 2
+ default:
+ size = 3 // As we are short, the maximum is 3.
+ }
+ goto handleInvalid
+ }
+ if c = src[nSrc+1]; c < accept.Lo || accept.Hi < c {
+ size = 1
+ goto handleInvalid // invalid continuation byte
+ } else if size == 2 {
+ } else if c = src[nSrc+2]; c < utf8internal.LoCB || utf8internal.HiCB < c {
+ size = 2
+ goto handleInvalid // invalid continuation byte
+ } else if size == 3 {
+ } else if c = src[nSrc+3]; c < utf8internal.LoCB || utf8internal.HiCB < c {
+ size = 3
+ goto handleInvalid // invalid continuation byte
+ }
+ nSrc += size
+ continue
+
+ handleInvalid:
+ // Copy the scanned input so far.
+ nDst += copy(dst[nDst:], src[pSrc:nSrc])
+
+ // Append RuneError to the destination.
+ const runeError = "\ufffd"
+ if nDst+len(runeError) > len(dst) {
+ return nDst, nSrc, transform.ErrShortDst
+ }
+ nDst += copy(dst[nDst:], runeError)
+
+ // Skip the maximal subpart of an ill-formed subsequence according to
+ // the W3C standard way instead of the Go way. This Transform is
+ // probably the only place in the text repo where it is warranted.
+ nSrc += size
+ pSrc = nSrc
+
+ // Recompute the maximum source length.
+ if sz := len(dst) - nDst; sz < len(src)-nSrc {
+ err = transform.ErrShortDst
+ n = nSrc + sz
+ atEOF = false
+ }
+ }
+ return nDst + copy(dst[nDst:], src[pSrc:nSrc]), nSrc, err
+}
+
+// UTF16 returns a UTF-16 Encoding for the given default endianness and byte
+// order mark (BOM) policy.
+//
+// When decoding from UTF-16 to UTF-8, if the BOMPolicy is IgnoreBOM then
+// neither BOMs U+FEFF nor noncharacters U+FFFE in the input stream will affect
+// the endianness used for decoding, and will instead be output as their
+// standard UTF-8 encodings: "\xef\xbb\xbf" and "\xef\xbf\xbe". If the BOMPolicy
+// is UseBOM or ExpectBOM a staring BOM is not written to the UTF-8 output.
+// Instead, it overrides the default endianness e for the remainder of the
+// transformation. Any subsequent BOMs U+FEFF or noncharacters U+FFFE will not
+// affect the endianness used, and will instead be output as their standard
+// UTF-8 encodings. For UseBOM, if there is no starting BOM, it will proceed
+// with the default Endianness. For ExpectBOM, in that case, the transformation
+// will return early with an ErrMissingBOM error.
+//
+// When encoding from UTF-8 to UTF-16, a BOM will be inserted at the start of
+// the output if the BOMPolicy is UseBOM or ExpectBOM. Otherwise, a BOM will not
+// be inserted. The UTF-8 input does not need to contain a BOM.
+//
+// There is no concept of a 'native' endianness. If the UTF-16 data is produced
+// and consumed in a greater context that implies a certain endianness, use
+// IgnoreBOM. Otherwise, use ExpectBOM and always produce and consume a BOM.
+//
+// In the language of https://www.unicode.org/faq/utf_bom.html#bom10, IgnoreBOM
+// corresponds to "Where the precise type of the data stream is known... the
+// BOM should not be used" and ExpectBOM corresponds to "A particular
+// protocol... may require use of the BOM".
+func UTF16(e Endianness, b BOMPolicy) encoding.Encoding {
+ return utf16Encoding{config{e, b}, mibValue[e][b&bomMask]}
+}
+
+// mibValue maps Endianness and BOMPolicy settings to MIB constants. Note that
+// some configurations map to the same MIB identifier. RFC 2781 has requirements
+// and recommendations. Some of the "configurations" are merely recommendations,
+// so multiple configurations could match.
+var mibValue = map[Endianness][numBOMValues]identifier.MIB{
+ BigEndian: [numBOMValues]identifier.MIB{
+ IgnoreBOM: identifier.UTF16BE,
+ UseBOM: identifier.UTF16, // BigEnding default is preferred by RFC 2781.
+ // TODO: acceptBOM | strictBOM would map to UTF16BE as well.
+ },
+ LittleEndian: [numBOMValues]identifier.MIB{
+ IgnoreBOM: identifier.UTF16LE,
+ UseBOM: identifier.UTF16, // LittleEndian default is allowed and preferred on Windows.
+ // TODO: acceptBOM | strictBOM would map to UTF16LE as well.
+ },
+ // ExpectBOM is not widely used and has no valid MIB identifier.
+}
+
+// All lists a configuration for each IANA-defined UTF-16 variant.
+var All = []encoding.Encoding{
+ UTF8,
+ UTF16(BigEndian, UseBOM),
+ UTF16(BigEndian, IgnoreBOM),
+ UTF16(LittleEndian, IgnoreBOM),
+}
+
+// BOMPolicy is a UTF-16 encoding's byte order mark policy.
+type BOMPolicy uint8
+
+const (
+ writeBOM BOMPolicy = 0x01
+ acceptBOM BOMPolicy = 0x02
+ requireBOM BOMPolicy = 0x04
+ bomMask BOMPolicy = 0x07
+
+ // HACK: numBOMValues == 8 triggers a bug in the 1.4 compiler (cannot have a
+ // map of an array of length 8 of a type that is also used as a key or value
+ // in another map). See golang.org/issue/11354.
+ // TODO: consider changing this value back to 8 if the use of 1.4.* has
+ // been minimized.
+ numBOMValues = 8 + 1
+
+ // IgnoreBOM means to ignore any byte order marks.
+ IgnoreBOM BOMPolicy = 0
+ // Common and RFC 2781-compliant interpretation for UTF-16BE/LE.
+
+ // UseBOM means that the UTF-16 form may start with a byte order mark, which
+ // will be used to override the default encoding.
+ UseBOM BOMPolicy = writeBOM | acceptBOM
+ // Common and RFC 2781-compliant interpretation for UTF-16.
+
+ // ExpectBOM means that the UTF-16 form must start with a byte order mark,
+ // which will be used to override the default encoding.
+ ExpectBOM BOMPolicy = writeBOM | acceptBOM | requireBOM
+ // Used in Java as Unicode (not to be confused with Java's UTF-16) and
+ // ICU's UTF-16,version=1. Not compliant with RFC 2781.
+
+ // TODO (maybe): strictBOM: BOM must match Endianness. This would allow:
+ // - UTF-16(B|L)E,version=1: writeBOM | acceptBOM | requireBOM | strictBOM
+ // (UnicodeBig and UnicodeLittle in Java)
+ // - RFC 2781-compliant, but less common interpretation for UTF-16(B|L)E:
+ // acceptBOM | strictBOM (e.g. assigned to CheckBOM).
+ // This addition would be consistent with supporting ExpectBOM.
+)
+
+// Endianness is a UTF-16 encoding's default endianness.
+type Endianness bool
+
+const (
+ // BigEndian is UTF-16BE.
+ BigEndian Endianness = false
+ // LittleEndian is UTF-16LE.
+ LittleEndian Endianness = true
+)
+
+// ErrMissingBOM means that decoding UTF-16 input with ExpectBOM did not find a
+// starting byte order mark.
+var ErrMissingBOM = errors.New("encoding: missing byte order mark")
+
+type utf16Encoding struct {
+ config
+ mib identifier.MIB
+}
+
+type config struct {
+ endianness Endianness
+ bomPolicy BOMPolicy
+}
+
+func (u utf16Encoding) NewDecoder() *encoding.Decoder {
+ return &encoding.Decoder{Transformer: &utf16Decoder{
+ initial: u.config,
+ current: u.config,
+ }}
+}
+
+func (u utf16Encoding) NewEncoder() *encoding.Encoder {
+ return &encoding.Encoder{Transformer: &utf16Encoder{
+ endianness: u.endianness,
+ initialBOMPolicy: u.bomPolicy,
+ currentBOMPolicy: u.bomPolicy,
+ }}
+}
+
+func (u utf16Encoding) ID() (mib identifier.MIB, other string) {
+ return u.mib, ""
+}
+
+func (u utf16Encoding) String() string {
+ e, b := "B", ""
+ if u.endianness == LittleEndian {
+ e = "L"
+ }
+ switch u.bomPolicy {
+ case ExpectBOM:
+ b = "Expect"
+ case UseBOM:
+ b = "Use"
+ case IgnoreBOM:
+ b = "Ignore"
+ }
+ return "UTF-16" + e + "E (" + b + " BOM)"
+}
+
+type utf16Decoder struct {
+ initial config
+ current config
+}
+
+func (u *utf16Decoder) Reset() {
+ u.current = u.initial
+}
+
+func (u *utf16Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ if len(src) == 0 {
+ if atEOF && u.current.bomPolicy&requireBOM != 0 {
+ return 0, 0, ErrMissingBOM
+ }
+ return 0, 0, nil
+ }
+ if u.current.bomPolicy&acceptBOM != 0 {
+ if len(src) < 2 {
+ return 0, 0, transform.ErrShortSrc
+ }
+ switch {
+ case src[0] == 0xfe && src[1] == 0xff:
+ u.current.endianness = BigEndian
+ nSrc = 2
+ case src[0] == 0xff && src[1] == 0xfe:
+ u.current.endianness = LittleEndian
+ nSrc = 2
+ default:
+ if u.current.bomPolicy&requireBOM != 0 {
+ return 0, 0, ErrMissingBOM
+ }
+ }
+ u.current.bomPolicy = IgnoreBOM
+ }
+
+ var r rune
+ var dSize, sSize int
+ for nSrc < len(src) {
+ if nSrc+1 < len(src) {
+ x := uint16(src[nSrc+0])<<8 | uint16(src[nSrc+1])
+ if u.current.endianness == LittleEndian {
+ x = x>>8 | x<<8
+ }
+ r, sSize = rune(x), 2
+ if utf16.IsSurrogate(r) {
+ if nSrc+3 < len(src) {
+ x = uint16(src[nSrc+2])<<8 | uint16(src[nSrc+3])
+ if u.current.endianness == LittleEndian {
+ x = x>>8 | x<<8
+ }
+ // Save for next iteration if it is not a high surrogate.
+ if isHighSurrogate(rune(x)) {
+ r, sSize = utf16.DecodeRune(r, rune(x)), 4
+ }
+ } else if !atEOF {
+ err = transform.ErrShortSrc
+ break
+ }
+ }
+ if dSize = utf8.RuneLen(r); dSize < 0 {
+ r, dSize = utf8.RuneError, 3
+ }
+ } else if atEOF {
+ // Single trailing byte.
+ r, dSize, sSize = utf8.RuneError, 3, 1
+ } else {
+ err = transform.ErrShortSrc
+ break
+ }
+ if nDst+dSize > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ nDst += utf8.EncodeRune(dst[nDst:], r)
+ nSrc += sSize
+ }
+ return nDst, nSrc, err
+}
+
+func isHighSurrogate(r rune) bool {
+ return 0xDC00 <= r && r <= 0xDFFF
+}
+
+type utf16Encoder struct {
+ endianness Endianness
+ initialBOMPolicy BOMPolicy
+ currentBOMPolicy BOMPolicy
+}
+
+func (u *utf16Encoder) Reset() {
+ u.currentBOMPolicy = u.initialBOMPolicy
+}
+
+func (u *utf16Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ if u.currentBOMPolicy&writeBOM != 0 {
+ if len(dst) < 2 {
+ return 0, 0, transform.ErrShortDst
+ }
+ dst[0], dst[1] = 0xfe, 0xff
+ u.currentBOMPolicy = IgnoreBOM
+ nDst = 2
+ }
+
+ r, size := rune(0), 0
+ for nSrc < len(src) {
+ r = rune(src[nSrc])
+
+ // Decode a 1-byte rune.
+ if r < utf8.RuneSelf {
+ size = 1
+
+ } else {
+ // Decode a multi-byte rune.
+ r, size = utf8.DecodeRune(src[nSrc:])
+ if size == 1 {
+ // All valid runes of size 1 (those below utf8.RuneSelf) were
+ // handled above. We have invalid UTF-8 or we haven't seen the
+ // full character yet.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+ }
+ }
+
+ if r <= 0xffff {
+ if nDst+2 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+0] = uint8(r >> 8)
+ dst[nDst+1] = uint8(r)
+ nDst += 2
+ } else {
+ if nDst+4 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ r1, r2 := utf16.EncodeRune(r)
+ dst[nDst+0] = uint8(r1 >> 8)
+ dst[nDst+1] = uint8(r1)
+ dst[nDst+2] = uint8(r2 >> 8)
+ dst[nDst+3] = uint8(r2)
+ nDst += 4
+ }
+ nSrc += size
+ }
+
+ if u.endianness == LittleEndian {
+ for i := 0; i < nDst; i += 2 {
+ dst[i], dst[i+1] = dst[i+1], dst[i]
+ }
+ }
+ return nDst, nSrc, err
+}
diff --git a/vendor/golang.org/x/text/internal/colltab/collelem.go b/vendor/golang.org/x/text/internal/colltab/collelem.go
index 880952c3e..396cebda2 100644
--- a/vendor/golang.org/x/text/internal/colltab/collelem.go
+++ b/vendor/golang.org/x/text/internal/colltab/collelem.go
@@ -87,7 +87,7 @@ func (ce Elem) ctype() ceType {
// - t* is the tertiary collation value
// 100ttttt cccccccc pppppppp pppppppp
// - t* is the tertiar collation value
-// - c* is the cannonical combining class
+// - c* is the canonical combining class
// - p* is the primary collation value
// Collation elements with a secondary value are of the form
// 1010cccc ccccssss ssssssss tttttttt, where
@@ -327,13 +327,13 @@ func splitExpandIndex(ce Elem) (index int) {
// - v* is the replacement tertiary weight for the first rune,
// - w* is the replacement tertiary weight for the second rune,
// Tertiary weights of subsequent runes should be replaced with maxTertiary.
-// See http://www.unicode.org/reports/tr10/#Compatibility_Decompositions for more details.
+// See https://www.unicode.org/reports/tr10/#Compatibility_Decompositions for more details.
func splitDecompose(ce Elem) (t1, t2 uint8) {
return uint8(ce), uint8(ce >> 8)
}
const (
- // These constants were taken from http://www.unicode.org/versions/Unicode6.0.0/ch12.pdf.
+ // These constants were taken from https://www.unicode.org/versions/Unicode6.0.0/ch12.pdf.
minUnified rune = 0x4E00
maxUnified = 0x9FFF
minCompatibility = 0xF900
@@ -352,7 +352,7 @@ const (
// implicitPrimary returns the primary weight for the a rune
// for which there is no entry for the rune in the collation table.
// We take a different approach from the one specified in
-// http://unicode.org/reports/tr10/#Implicit_Weights,
+// https://unicode.org/reports/tr10/#Implicit_Weights,
// but preserve the resulting relative ordering of the runes.
func implicitPrimary(r rune) int {
if unicode.Is(unicode.Ideographic, r) {
diff --git a/vendor/golang.org/x/text/internal/colltab/numeric.go b/vendor/golang.org/x/text/internal/colltab/numeric.go
index 38c255cb4..53b819cc3 100644
--- a/vendor/golang.org/x/text/internal/colltab/numeric.go
+++ b/vendor/golang.org/x/text/internal/colltab/numeric.go
@@ -130,7 +130,7 @@ type numberConverter struct {
// init completes initialization of a numberConverter and prepares it for adding
// more digits. elems is assumed to have a digit starting at oldLen.
func (nc *numberConverter) init(elems []Elem, oldLen int, isZero bool) {
- // Insert a marker indicating the start of a number and and a placeholder
+ // Insert a marker indicating the start of a number and a placeholder
// for the number of digits.
if isZero {
elems = append(elems[:oldLen], nc.w.numberStart, 0)
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 000000000..cdfdb7497
--- /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 000000000..46a001507
--- /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 000000000..1b36935ef
--- /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 000000000..83816a72a
--- /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 000000000..8d810723c
--- /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 000000000..554ca354b
--- /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, 0x0581f000,
+ 0x0581f032, 0x05857000, 0x05857032, 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, 0x0b71f000,
+ 0x0b71f033, 0x0b757000, 0x0b757033, 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, 0x39d33000, 0x39d33099, 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,
+ 0x40857000, 0x408570ba, 0x408dc000, 0x408dc0ba,
+ 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,
+ 0x4321f000, 0x4321f033, 0x4321f0bd, 0x4321f105,
+ 0x4321f14d, 0x43257000, 0x43257033, 0x432570bd,
+ 0x43257105, 0x4325714d, 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, 0x4bc1f000,
+ 0x4bc1f137, 0x4bc57000, 0x4bc57137, 0x4be00000,
+ 0x4be57000, 0x4be570b4, 0x4bee3000, 0x4bee30b4,
+ 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, 0x51f38000,
+ 0x51f38053, 0x51f39000, 0x51f3908d, 0x52800000,
+ 0x528000ba, 0x52900000, 0x52938000, 0x52938053,
+ 0x5293808d, 0x529380c6, 0x5293810d, 0x52939000,
+ // Entry 300 - 31F
+ 0x5293908d, 0x529390c6, 0x5293912e, 0x52f00000,
+ 0x52f00161,
+} // Size: 3116 bytes
+
+const specialTagsStr string = "ca-ES-valencia en-US-u-va-posix"
+
+// Total table size 3147 bytes (3KiB); checksum: F4E57D15
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 000000000..ca135d295
--- /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 000000000..4ae78e0fa
--- /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 000000000..9b20b88fe
--- /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 000000000..1e74d1aff
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/language.go
@@ -0,0 +1,596 @@
+// 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.
+func (t Tag) TypeForKey(key string) string {
+ if start, end, _ := t.findTypeForKey(key); end != start {
+ return t.str[start:end]
+ }
+ 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, end, _ := t.findTypeForKey(key)
+ if start != end {
+ // Remove key tag and leading '-'.
+ start -= 4
+
+ // Remove a possible empty extension.
+ if (end == len(t.str) || t.str[end+2] == '-') && t.str[start-2] == '-' {
+ 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, end, hasExt := t.findTypeForKey(key)
+ if start == end {
+ if hasExt {
+ b = b[2:]
+ }
+ t.str = fmt.Sprintf("%s-%s%s", s[:start], b, s[end:])
+ } else {
+ t.str = fmt.Sprintf("%s%s%s", s[:start], 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, end int, hasExt bool) {
+ p := int(t.pExt)
+ if len(key) != 2 || p == len(t.str) || p == 0 {
+ return p, p, false
+ }
+ s := t.str
+
+ // Find the correct extension.
+ for p++; s[p] != 'u'; p++ {
+ if s[p] > 'u' {
+ p--
+ return p, p, false
+ }
+ if p = nextExtension(s, p); p == len(s) {
+ return 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 {
+ // p points to the hyphen preceding the current token.
+ if p3 := p + 3; s[p3] == '-' {
+ // Found a key.
+ // Check whether we just processed the key that was requested.
+ if curKey == key {
+ return start, p, true
+ }
+ // Set to the next key and continue scanning type tokens.
+ curKey = s[p+1 : p3]
+ if curKey > key {
+ return p, p, true
+ }
+ // Start of the type token sequence.
+ start = p + 4
+ // A type is at least 3 characters long.
+ p += 7 // 4 + 3
+ } else {
+ // Attribute or type, which is at least 3 characters long.
+ p += 4
+ }
+ // p points past the third character of a type or attribute.
+ max := p + 5 // maximum length of token plus hyphen.
+ if len(s) < max {
+ max = len(s)
+ }
+ for ; p < max && s[p] != '-'; p++ {
+ }
+ // Bail if we have exhausted all tokens or if the next token starts
+ // a new extension.
+ if p == len(s) || s[p+2] == '-' {
+ if curKey == key {
+ return start, p, true
+ }
+ return p, p, true
+ }
+ }
+}
+
+// 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/language/lookup.go b/vendor/golang.org/x/text/internal/language/lookup.go
index 1d80ac370..6294b8152 100644
--- a/vendor/golang.org/x/text/language/lookup.go
+++ b/vendor/golang.org/x/text/internal/language/lookup.go
@@ -17,11 +17,11 @@ import (
// 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
+ return 0, ErrSyntax
}
i := idx.Index(key)
if i == -1 {
- return 0, mkErrInvalid(key)
+ return 0, NewValueError(key)
}
return i, nil
}
@@ -32,38 +32,45 @@ func searchUint(imap []uint16, key uint16) int {
})
}
-type langID uint16
+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) (langID, error) {
+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 langID) (langID, langAliasType) {
- k := sort.Search(len(langAliasMap), func(i int) bool {
- return langAliasMap[i].from >= uint16(id)
+func normLang(id Language) (Language, AliasType) {
+ k := sort.Search(len(AliasMap), func(i int) bool {
+ return AliasMap[i].From >= uint16(id)
})
- if k < len(langAliasMap) && langAliasMap[k].from == uint16(id) {
- return langID(langAliasMap[k].to), langAliasTypes[k]
+ if k < len(AliasMap) && AliasMap[k].From == uint16(id) {
+ return Language(AliasMap[k].To), AliasTypes[k]
}
- return id, langAliasTypeUnknown
+ 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) (langID, error) {
+func getLangISO2(s []byte) (Language, error) {
if !tag.FixCase("zz", s) {
- return 0, errSyntax
+ return 0, ErrSyntax
}
if i := lang.Index(s); i != -1 && lang.Elem(i)[3] != 0 {
- return langID(i), nil
+ return Language(i), nil
}
- return 0, mkErrInvalid(s)
+ return 0, NewValueError(s)
}
const base = 'z' - 'a' + 1
@@ -88,7 +95,7 @@ func intToStr(v uint, s []byte) {
// getLangISO3 returns the langID for the given 3-letter ISO language code
// or unknownLang if this does not exist.
-func getLangISO3(s []byte) (langID, error) {
+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) {
@@ -96,7 +103,7 @@ func getLangISO3(s []byte) (langID, error) {
// 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 := langID(i)
+ id := Language(i)
if id == nonCanonicalUnd {
return 0, nil
}
@@ -104,26 +111,26 @@ func getLangISO3(s []byte) (langID, error) {
}
}
if i := altLangISO3.Index(s); i != -1 {
- return langID(altLangIndex[altLangISO3.Elem(i)[3]]), nil
+ return Language(altLangIndex[altLangISO3.Elem(i)[3]]), nil
}
n := strToInt(s)
if langNoIndex[n/8]&(1<<(n%8)) != 0 {
- return langID(n) + langNoIndexOffset, nil
+ 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 langID(i), nil
+ return Language(i), nil
}
}
- return 0, mkErrInvalid(s)
+ return 0, NewValueError(s)
}
- return 0, errSyntax
+ return 0, ErrSyntax
}
-// stringToBuf writes the string to b and returns the number of bytes
+// StringToBuf writes the string to b and returns the number of bytes
// written. cap(b) must be >= 3.
-func (id langID) stringToBuf(b []byte) int {
+func (id Language) StringToBuf(b []byte) int {
if id >= langNoIndexOffset {
intToStr(uint(id)-langNoIndexOffset, b[:3])
return 3
@@ -140,7 +147,7 @@ func (id langID) stringToBuf(b []byte) int {
// 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 langID) String() string {
+func (b Language) String() string {
if b == 0 {
return "und"
} else if b >= langNoIndexOffset {
@@ -157,7 +164,7 @@ func (b langID) String() string {
}
// ISO3 returns the ISO 639-3 language code.
-func (b langID) ISO3() string {
+func (b Language) ISO3() string {
if b == 0 || b >= langNoIndexOffset {
return b.String()
}
@@ -173,15 +180,24 @@ func (b langID) ISO3() string {
}
// IsPrivateUse reports whether this language code is reserved for private use.
-func (b langID) IsPrivateUse() bool {
+func (b Language) IsPrivateUse() bool {
return langPrivateStart <= b && b <= langPrivateEnd
}
-type regionID uint16
+// 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) (regionID, error) {
+func getRegionID(s []byte) (Region, error) {
if len(s) == 3 {
if isAlpha(s[0]) {
return getRegionISO3(s)
@@ -195,34 +211,34 @@ func getRegionID(s []byte) (regionID, error) {
// getRegionISO2 returns the regionID for the given 2-letter ISO country code
// or unknownRegion if this does not exist.
-func getRegionISO2(s []byte) (regionID, error) {
+func getRegionISO2(s []byte) (Region, error) {
i, err := findIndex(regionISO, s, "ZZ")
if err != nil {
return 0, err
}
- return regionID(i) + isoRegionOffset, nil
+ 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) (regionID, error) {
+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 regionID(i) + isoRegionOffset, nil
+ return Region(i) + isoRegionOffset, nil
}
}
for i := 0; i < len(altRegionISO3); i += 3 {
if tag.Compare(altRegionISO3[i:i+3], s) == 0 {
- return regionID(altRegionIDs[i/3]), nil
+ return Region(altRegionIDs[i/3]), nil
}
}
- return 0, mkErrInvalid(s)
+ return 0, NewValueError(s)
}
- return 0, errSyntax
+ return 0, ErrSyntax
}
-func getRegionM49(n int) (regionID, error) {
+func getRegionM49(n int) (Region, error) {
if 0 < n && n <= 999 {
const (
searchBits = 7
@@ -236,7 +252,7 @@ func getRegionM49(n int) (regionID, error) {
return buf[i] >= val
})
if r := fromM49[int(m49Index[idx])+i]; r&^regionMask == val {
- return regionID(r & regionMask), nil
+ return Region(r & regionMask), nil
}
}
var e ValueError
@@ -247,13 +263,13 @@ func getRegionM49(n int) (regionID, error) {
// 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 regionID) regionID {
+func normRegion(r Region) Region {
m := regionOldMap
k := sort.Search(len(m), func(i int) bool {
- return m[i].from >= uint16(r)
+ return m[i].From >= uint16(r)
})
- if k < len(m) && m[k].from == uint16(r) {
- return regionID(m[k].to)
+ if k < len(m) && m[k].From == uint16(r) {
+ return Region(m[k].To)
}
return 0
}
@@ -264,13 +280,13 @@ const (
bcp47Region
)
-func (r regionID) typ() byte {
+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 regionID) String() string {
+func (r Region) String() string {
if r < isoRegionOffset {
if r == 0 {
return "ZZ"
@@ -284,7 +300,7 @@ func (r regionID) String() 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 regionID) ISO3() string {
+func (r Region) ISO3() string {
if r < isoRegionOffset {
return "ZZZ"
}
@@ -301,29 +317,29 @@ func (r regionID) ISO3() string {
// M49 returns the UN M.49 encoding of r, or 0 if this encoding
// is not defined for r.
-func (r regionID) M49() int {
+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 regionID) IsPrivateUse() bool {
+func (r Region) IsPrivateUse() bool {
return r.typ()&iso3166UserAssigned != 0
}
-type scriptID uint8
+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) (scriptID, error) {
+func getScriptID(idx tag.Index, s []byte) (Script, error) {
i, err := findIndex(idx, s, "Zzzz")
- return scriptID(i), err
+ return Script(i), err
}
// String returns the script code in title case.
// It returns "Zzzz" for an unspecified script.
-func (s scriptID) String() string {
+func (s Script) String() string {
if s == 0 {
return "Zzzz"
}
@@ -331,7 +347,7 @@ func (s scriptID) String() string {
}
// IsPrivateUse reports whether this script code is reserved for private use.
-func (s scriptID) IsPrivateUse() bool {
+func (s Script) IsPrivateUse() bool {
return _Qaaa <= s && s <= _Qabx
}
@@ -389,7 +405,7 @@ func grandfathered(s [maxAltTaglen]byte) (t Tag, ok bool) {
if v < 0 {
return Make(altTags[altTagIndex[-v-1]:altTagIndex[-v]]), true
}
- t.lang = langID(v)
+ 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 000000000..75a2dbca7
--- /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 000000000..2be83e1da
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/parse.go
@@ -0,0 +1,594 @@
+// 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
+ if end < cap(s.b) {
+ b := make([]byte, len(s.b)+diff)
+ copy(b, s.b[:oldStart])
+ copy(b[end:], s.b[oldEnd:])
+ s.b = b
+ } else {
+ s.b = append(s.b[end:], s.b[oldEnd:]...)
+ }
+ 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':
+ 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
+ }
+ var last, key []byte
+ for attrEnd := end; len(scan.token) == 2; last = key {
+ key = scan.token
+ keyEnd := scan.end
+ end = scan.acceptMinSize(3)
+ // TODO: check key value validity
+ if keyEnd == end || bytes.Compare(key, last) != 1 {
+ // 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, keyEnd := scan.start, scan.end
+ end = scan.acceptMinSize(3)
+ if keyEnd != end {
+ keys = append(keys, scan.b[keyStart:end])
+ } else {
+ scan.setError(ErrSyntax)
+ end = keyStart
+ }
+ }
+ 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':
+ 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 000000000..239e2d29e
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/tables.go
@@ -0,0 +1,3431 @@
+// 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 = 8665
+
+const NumScripts = 242
+
+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, 0x20, 0x41, 0x00, 0x50, 0x40, 0x00, 0x80,
+ // Entry C0 - FF
+ 0xfb, 0x4a, 0xf2, 0x9f, 0xb4, 0x42, 0x41, 0x96,
+ 0x1b, 0x14, 0x08, 0xf2, 0x2b, 0xe7, 0x17, 0x56,
+ 0x05, 0x7d, 0x0e, 0x1c, 0x37, 0x71, 0xf3, 0xef,
+ 0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10,
+ 0xbc, 0x85, 0xaf, 0xdf, 0xff, 0xf7, 0x73, 0x35,
+ 0x3e, 0x87, 0xc7, 0xdf, 0xff, 0x00, 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, 0xc5, 0x67, 0x5f,
+ 0x56, 0x89, 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, 0x08, 0x16,
+ 0x01, 0x00, 0x00, 0xb0, 0x14, 0x03, 0x50, 0x06,
+ 0x0a, 0x00, 0x01, 0x00, 0x00, 0x00, 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, 0x01, 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,
+ 0xcd, 0x55, 0xe7, 0x01, 0x00, 0x20, 0xb2, 0xc5,
+ 0xa4, 0x45, 0x25, 0x9b, 0x02, 0xdf, 0xe0, 0xdf,
+ 0x03, 0x44, 0x08, 0x10, 0x01, 0x04, 0x01, 0xe3,
+ 0x92, 0x54, 0xdb, 0x28, 0xd1, 0x5f, 0xf6, 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, 0x38, 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, 0x04, 0x04, 0x68, 0x00, 0x20, 0x70, 0xff,
+ 0x7b, 0x7f, 0x60, 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,
+ 0x08, 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, 0xd9, 0x0e, 0x11,
+ 0x86, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x00, 0x01,
+ 0x05, 0xd1, 0x50, 0x58, 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, 0xbd,
+ 0xcd, 0xff, 0xfb, 0xff, 0xdf, 0xd7, 0xea, 0xff,
+ 0xe5, 0x5f, 0x6d, 0x0f, 0xa7, 0x51, 0x06, 0xc4,
+ // Entry 480 - 4BF
+ 0x13, 0x50, 0x5d, 0xaf, 0xa6, 0xfd, 0x99, 0xfb,
+ 0x63, 0x1d, 0x53, 0xff, 0xef, 0xb7, 0x35, 0x20,
+ 0x14, 0x00, 0x55, 0x51, 0x82, 0x65, 0xf5, 0x41,
+ 0xe2, 0xff, 0xfc, 0xdf, 0x00, 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,
+ 0xba, 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, 0xe5, 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, 0xbf, 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, 0xf1, 0x57, 0x6c,
+ 0xff, 0xe4, 0xef, 0x6f, 0xff, 0xfc, 0xdd, 0xde,
+ 0xfc, 0xfd, 0x76, 0x5f, 0x7a, 0x1f, 0x00, 0x98,
+ 0x02, 0xfb, 0xa3, 0xef, 0xf3, 0xd6, 0xf2, 0xff,
+ 0xb9, 0xda, 0x7d, 0x50, 0x1e, 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, 0x53, 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, 0xcc, 0x58, 0xd5, 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, 0x08, 0x41,
+ 0x04, 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, 0x00, 0x55, 0x55,
+ 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, 0x19, 0xc7, 0x0c, 0xd5, 0x42,
+ 0x54, 0xdd, 0x77, 0x14, 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, 0x3f, 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: 656 bytes, 164 elements
+var AliasMap = [164]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: 0x73e, To: 0x21a1},
+ 20: {From: 0x7b3, To: 0x56},
+ 21: {From: 0x7b9, To: 0x299b},
+ 22: {From: 0x7c5, To: 0x58},
+ 23: {From: 0x7e6, To: 0x145},
+ 24: {From: 0x80c, To: 0x5a},
+ 25: {From: 0x815, To: 0x8d},
+ 26: {From: 0x87e, To: 0x810},
+ 27: {From: 0x8c3, To: 0xee3},
+ 28: {From: 0x9ef, To: 0x331},
+ 29: {From: 0xa36, To: 0x2c5},
+ 30: {From: 0xa3d, To: 0xbf},
+ 31: {From: 0xabe, To: 0x3322},
+ 32: {From: 0xb38, To: 0x529},
+ 33: {From: 0xb75, To: 0x265a},
+ 34: {From: 0xb7e, To: 0xbc3},
+ 35: {From: 0xb9b, To: 0x44e},
+ 36: {From: 0xbbc, To: 0x4229},
+ 37: {From: 0xbbf, To: 0x529},
+ 38: {From: 0xbfe, To: 0x2da7},
+ 39: {From: 0xc2e, To: 0x3181},
+ 40: {From: 0xcb9, To: 0xf3},
+ 41: {From: 0xd08, To: 0xfa},
+ 42: {From: 0xdc8, To: 0x11a},
+ 43: {From: 0xdd7, To: 0x32d},
+ 44: {From: 0xdf8, To: 0xdfb},
+ 45: {From: 0xdfe, To: 0x531},
+ 46: {From: 0xedf, To: 0x205a},
+ 47: {From: 0xeee, To: 0x2e9a},
+ 48: {From: 0xf39, To: 0x367},
+ 49: {From: 0x10d0, To: 0x140},
+ 50: {From: 0x1104, To: 0x2d0},
+ 51: {From: 0x11a0, To: 0x1ec},
+ 52: {From: 0x1279, To: 0x21},
+ 53: {From: 0x1424, To: 0x15e},
+ 54: {From: 0x1470, To: 0x14e},
+ 55: {From: 0x151f, To: 0xd9b},
+ 56: {From: 0x1523, To: 0x390},
+ 57: {From: 0x1532, To: 0x19f},
+ 58: {From: 0x1580, To: 0x210},
+ 59: {From: 0x1583, To: 0x10d},
+ 60: {From: 0x15a3, To: 0x3caf},
+ 61: {From: 0x166a, To: 0x19b},
+ 62: {From: 0x16c8, To: 0x136},
+ 63: {From: 0x1700, To: 0x29f8},
+ 64: {From: 0x1718, To: 0x194},
+ 65: {From: 0x1727, To: 0xf3f},
+ 66: {From: 0x177a, To: 0x178},
+ 67: {From: 0x1809, To: 0x17b6},
+ 68: {From: 0x1816, To: 0x18f3},
+ 69: {From: 0x188a, To: 0x436},
+ 70: {From: 0x1979, To: 0x1d01},
+ 71: {From: 0x1a74, To: 0x2bb0},
+ 72: {From: 0x1a8a, To: 0x1f8},
+ 73: {From: 0x1b5a, To: 0x1fa},
+ 74: {From: 0x1b86, To: 0x1515},
+ 75: {From: 0x1d64, To: 0x2c9b},
+ 76: {From: 0x2038, To: 0x37b1},
+ 77: {From: 0x203d, To: 0x20dd},
+ 78: {From: 0x205a, To: 0x30b},
+ 79: {From: 0x20e3, To: 0x274},
+ 80: {From: 0x20ee, To: 0x263},
+ 81: {From: 0x20f2, To: 0x22d},
+ 82: {From: 0x20f9, To: 0x256},
+ 83: {From: 0x210f, To: 0x21eb},
+ 84: {From: 0x2135, To: 0x27d},
+ 85: {From: 0x2160, To: 0x913},
+ 86: {From: 0x2199, To: 0x121},
+ 87: {From: 0x21ce, To: 0x1561},
+ 88: {From: 0x21e6, To: 0x504},
+ 89: {From: 0x21f4, To: 0x49f},
+ 90: {From: 0x222d, To: 0x121},
+ 91: {From: 0x2237, To: 0x121},
+ 92: {From: 0x2262, To: 0x92a},
+ 93: {From: 0x2316, To: 0x3226},
+ 94: {From: 0x2382, To: 0x3365},
+ 95: {From: 0x2472, To: 0x2c7},
+ 96: {From: 0x24e4, To: 0x2ff},
+ 97: {From: 0x24f0, To: 0x2fa},
+ 98: {From: 0x24fa, To: 0x31f},
+ 99: {From: 0x2550, To: 0xb5b},
+ 100: {From: 0x25a9, To: 0xe2},
+ 101: {From: 0x263e, To: 0x2d0},
+ 102: {From: 0x26c9, To: 0x26b4},
+ 103: {From: 0x26f9, To: 0x3c8},
+ 104: {From: 0x2727, To: 0x3caf},
+ 105: {From: 0x2765, To: 0x26b4},
+ 106: {From: 0x2789, To: 0x4358},
+ 107: {From: 0x28ef, To: 0x2837},
+ 108: {From: 0x2914, To: 0x351},
+ 109: {From: 0x2986, To: 0x2da7},
+ 110: {From: 0x2b1a, To: 0x38d},
+ 111: {From: 0x2bfc, To: 0x395},
+ 112: {From: 0x2c3f, To: 0x3caf},
+ 113: {From: 0x2cfc, To: 0x3be},
+ 114: {From: 0x2d13, To: 0x597},
+ 115: {From: 0x2d47, To: 0x148},
+ 116: {From: 0x2d48, To: 0x148},
+ 117: {From: 0x2dff, To: 0x2f1},
+ 118: {From: 0x2e08, To: 0x19cc},
+ 119: {From: 0x2e1a, To: 0x2d95},
+ 120: {From: 0x2e21, To: 0x292},
+ 121: {From: 0x2e54, To: 0x7d},
+ 122: {From: 0x2e65, To: 0x2282},
+ 123: {From: 0x2ea0, To: 0x2e9b},
+ 124: {From: 0x2eef, To: 0x2ed7},
+ 125: {From: 0x3193, To: 0x3c4},
+ 126: {From: 0x3366, To: 0x338e},
+ 127: {From: 0x342a, To: 0x3dc},
+ 128: {From: 0x34ee, To: 0x18d0},
+ 129: {From: 0x35c8, To: 0x2c9b},
+ 130: {From: 0x35e6, To: 0x412},
+ 131: {From: 0x3658, To: 0x246},
+ 132: {From: 0x3676, To: 0x3f4},
+ 133: {From: 0x36fd, To: 0x445},
+ 134: {From: 0x37c0, To: 0x121},
+ 135: {From: 0x3816, To: 0x38f2},
+ 136: {From: 0x382b, To: 0x2c9b},
+ 137: {From: 0x382f, To: 0xa9},
+ 138: {From: 0x3832, To: 0x3228},
+ 139: {From: 0x386c, To: 0x39a6},
+ 140: {From: 0x3892, To: 0x3fc0},
+ 141: {From: 0x38a5, To: 0x39d7},
+ 142: {From: 0x38b4, To: 0x1fa4},
+ 143: {From: 0x38b5, To: 0x2e9a},
+ 144: {From: 0x395c, To: 0x47e},
+ 145: {From: 0x3b4e, To: 0xd91},
+ 146: {From: 0x3b78, To: 0x137},
+ 147: {From: 0x3c99, To: 0x4bc},
+ 148: {From: 0x3fbd, To: 0x100},
+ 149: {From: 0x4208, To: 0xa91},
+ 150: {From: 0x42be, To: 0x573},
+ 151: {From: 0x42f9, To: 0x3f60},
+ 152: {From: 0x4378, To: 0x25a},
+ 153: {From: 0x43cb, To: 0x36cb},
+ 154: {From: 0x43cd, To: 0x10f},
+ 155: {From: 0x44af, To: 0x3322},
+ 156: {From: 0x44e3, To: 0x512},
+ 157: {From: 0x45ca, To: 0x2409},
+ 158: {From: 0x45dd, To: 0x26dc},
+ 159: {From: 0x4610, To: 0x48ae},
+ 160: {From: 0x46ae, To: 0x46a0},
+ 161: {From: 0x473e, To: 0x4745},
+ 162: {From: 0x4916, To: 0x31f},
+ 163: {From: 0x49a7, To: 0x523},
+}
+
+// Size: 164 bytes, 164 elements
+var AliasTypes = [164]AliasType{
+ // Entry 0 - 3F
+ 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 1, 2,
+ 1, 1, 2, 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,
+ 2, 1, 1, 1, 1, 2, 1, 0, 1, 1, 2, 2, 0, 1, 2, 0,
+ // Entry 40 - 7F
+ 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, 1, 0, 0, 1,
+ 2, 2, 2, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1,
+ 0, 1, 0, 2, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2,
+ // Entry 80 - BF
+ 0, 0, 2, 1, 1, 1, 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, 1, 1,
+}
+
+const (
+ _Latn = 87
+ _Hani = 54
+ _Hans = 56
+ _Hant = 57
+ _Qaaa = 139
+ _Qaai = 147
+ _Qabx = 188
+ _Zinh = 236
+ _Zyyy = 241
+ _Zzzz = 242
+)
+
+// 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: 976 bytes
+ "----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" +
+ "BrahBraiBugiBuhdCakmCansCariChamCherCirtCoptCpmnCprtCyrlCyrsDevaDogrDsrt" +
+ "DuplEgydEgyhEgypElbaEthiGeokGeorGlagGongGonmGothGranGrekGujrGuruHanbHang" +
+ "HaniHanoHansHantHatrHebrHiraHluwHmngHmnpHrktHungIndsItalJamoJavaJpanJurc" +
+ "KaliKanaKharKhmrKhojKitlKitsKndaKoreKpelKthiLanaLaooLatfLatgLatnLekeLepc" +
+ "LimbLinaLinbLisuLomaLyciLydiMahjMakaMandManiMarcMayaMedfMendMercMeroMlym" +
+ "ModiMongMoonMrooMteiMultMymrNarbNbatNewaNkdbNkgbNkooNshuOgamOlckOrkhOrya" +
+ "OsgeOsmaPalmPaucPermPhagPhliPhlpPhlvPhnxPiqdPlrdPrtiQaaaQaabQaacQaadQaae" +
+ "QaafQaagQaahQaaiQaajQaakQaalQaamQaanQaaoQaapQaaqQaarQaasQaatQaauQaavQaaw" +
+ "QaaxQaayQaazQabaQabbQabcQabdQabeQabfQabgQabhQabiQabjQabkQablQabmQabnQabo" +
+ "QabpQabqQabrQabsQabtQabuQabvQabwQabxRjngRoroRunrSamrSaraSarbSaurSgnwShaw" +
+ "ShrdShuiSiddSindSinhSoraSoyoSundSyloSyrcSyreSyrjSyrnTagbTakrTaleTaluTaml" +
+ "TangTavtTeluTengTfngTglgThaaThaiTibtTirhUgarVaiiVispWaraWchoWoleXpeoXsux" +
+ "YiiiZanbZinhZmthZsyeZsymZxxxZyyyZzzz\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, 0x1f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29,
+ 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, 0x57, 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, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 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, 0x57,
+ 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, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x57, 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, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00,
+ // Entry 100 - 13F
+ 0x57, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xde, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00,
+ 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, 0x57, 0x00,
+ // Entry 140 - 17F
+ 0x57, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x57, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00,
+ 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00,
+ 0x00, 0x57, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x57, 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,
+ 0x57, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x57, 0x32, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x21, 0x00,
+ // Entry 1C0 - 1FF
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x57, 0x57, 0x00, 0x57, 0x57, 0x00, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00,
+ 0x57, 0x57, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00,
+ // Entry 200 - 23F
+ 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2b, 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, 0x1f, 0x00, 0x00, 0x57, 0x00, 0x00,
+ 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4f, 0x00, 0x00, 0x50, 0x00, 0x21, 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, 0x57, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 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, 0x57, 0x00, 0x00,
+ 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ // Entry 2C0 - 2FF
+ 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 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,
+ 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
+ // Entry 300 - 33F
+ 0x00, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x57,
+ 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00,
+ // Entry 340 - 37F
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00,
+ 0x57, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57,
+ 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x57, 0x00,
+ 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00,
+ // Entry 380 - 3BF
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x57, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ // Entry 3C0 - 3FF
+ 0x57, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+ 0x00, 0x57, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1f, 0x00, 0x00, 0x57, 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, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x57, 0x00,
+ 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57,
+ 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00,
+ // Entry 440 - 47F
+ 0x00, 0x00, 0x00, 0x00, 0x57, 0x57, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xda, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x29,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57,
+ 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x57, 0x00,
+ // Entry 480 - 4BF
+ 0x57, 0x00, 0x57, 0x00, 0x00, 0x00, 0x57, 0x00,
+ 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x57, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ // Entry 4C0 - 4FF
+ 0x57, 0x00, 0x00, 0x57, 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, 0x57, 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, 0x3b, 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, 0x57,
+ 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: 1615 bytes
+var variantIndex = map[string]uint8{
+ "1606nict": 0x0,
+ "1694acad": 0x1,
+ "1901": 0x2,
+ "1959acad": 0x3,
+ "1994": 0x4d,
+ "1996": 0x4,
+ "abl1943": 0x5,
+ "akuapem": 0x6,
+ "alalc97": 0x4f,
+ "aluku": 0x7,
+ "ao1990": 0x8,
+ "arevela": 0x9,
+ "arevmda": 0xa,
+ "asante": 0xb,
+ "baku1926": 0xc,
+ "balanka": 0xd,
+ "barla": 0xe,
+ "basiceng": 0xf,
+ "bauddha": 0x10,
+ "biscayan": 0x11,
+ "biske": 0x48,
+ "bohoric": 0x12,
+ "boont": 0x13,
+ "colb1945": 0x14,
+ "cornu": 0x15,
+ "dajnko": 0x16,
+ "ekavsk": 0x17,
+ "emodeng": 0x18,
+ "fonipa": 0x50,
+ "fonnapa": 0x51,
+ "fonupa": 0x52,
+ "fonxsamp": 0x53,
+ "hepburn": 0x19,
+ "heploc": 0x4e,
+ "hognorsk": 0x1a,
+ "hsistemo": 0x1b,
+ "ijekavsk": 0x1c,
+ "itihasa": 0x1d,
+ "jauer": 0x1e,
+ "jyutping": 0x1f,
+ "kkcor": 0x20,
+ "kociewie": 0x21,
+ "kscor": 0x22,
+ "laukika": 0x23,
+ "lipaw": 0x49,
+ "luna1918": 0x24,
+ "metelko": 0x25,
+ "monoton": 0x26,
+ "ndyuka": 0x27,
+ "nedis": 0x28,
+ "newfound": 0x29,
+ "njiva": 0x4a,
+ "nulik": 0x2a,
+ "osojs": 0x4b,
+ "oxendict": 0x2b,
+ "pahawh2": 0x2c,
+ "pahawh3": 0x2d,
+ "pahawh4": 0x2e,
+ "pamaka": 0x2f,
+ "petr1708": 0x30,
+ "pinyin": 0x31,
+ "polyton": 0x32,
+ "puter": 0x33,
+ "rigik": 0x34,
+ "rozaj": 0x35,
+ "rumgr": 0x36,
+ "scotland": 0x37,
+ "scouse": 0x38,
+ "simple": 0x54,
+ "solba": 0x4c,
+ "sotav": 0x39,
+ "spanglis": 0x3a,
+ "surmiran": 0x3b,
+ "sursilv": 0x3c,
+ "sutsilv": 0x3d,
+ "tarask": 0x3e,
+ "uccor": 0x3f,
+ "ucrcor": 0x40,
+ "ulster": 0x41,
+ "unifon": 0x42,
+ "vaidika": 0x43,
+ "valencia": 0x44,
+ "vallader": 0x45,
+ "wadegile": 0x46,
+ "xsistemo": 0x47,
+}
+
+// variantNumSpecialized is the number of specialized variants in variants.
+const variantNumSpecialized = 79
+
+// 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: 976 bytes, 244 elements
+var likelyScript = [244]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},
+ 28: {lang: 0xf1, region: 0x6b},
+ 30: {lang: 0x1a0, region: 0x5d},
+ 31: {lang: 0x3e2, region: 0x106},
+ 33: {lang: 0x1be, region: 0x99},
+ 36: {lang: 0x15e, region: 0x78},
+ 39: {lang: 0x133, region: 0x6b},
+ 40: {lang: 0x431, region: 0x27},
+ 41: {lang: 0x27, region: 0x6f},
+ 43: {lang: 0x210, region: 0x7d},
+ 44: {lang: 0xfe, region: 0x38},
+ 46: {lang: 0x19b, region: 0x99},
+ 47: {lang: 0x19e, region: 0x130},
+ 48: {lang: 0x3e9, region: 0x99},
+ 49: {lang: 0x136, region: 0x87},
+ 50: {lang: 0x1a4, region: 0x99},
+ 51: {lang: 0x39d, region: 0x99},
+ 52: {lang: 0x529, region: 0x12e},
+ 53: {lang: 0x254, region: 0xab},
+ 54: {lang: 0x529, region: 0x53},
+ 55: {lang: 0x1cb, region: 0xe7},
+ 56: {lang: 0x529, region: 0x53},
+ 57: {lang: 0x529, region: 0x12e},
+ 58: {lang: 0x2fd, region: 0x9b},
+ 59: {lang: 0x1bc, region: 0x97},
+ 60: {lang: 0x200, region: 0xa2},
+ 61: {lang: 0x1c5, region: 0x12b},
+ 62: {lang: 0x1ca, region: 0xaf},
+ 65: {lang: 0x1d5, region: 0x92},
+ 67: {lang: 0x142, region: 0x9e},
+ 68: {lang: 0x254, region: 0xab},
+ 69: {lang: 0x20e, region: 0x95},
+ 70: {lang: 0x200, region: 0xa2},
+ 72: {lang: 0x135, region: 0xc4},
+ 73: {lang: 0x200, region: 0xa2},
+ 74: {lang: 0x3bb, region: 0xe8},
+ 75: {lang: 0x24a, region: 0xa6},
+ 76: {lang: 0x3fa, region: 0x99},
+ 79: {lang: 0x251, region: 0x99},
+ 80: {lang: 0x254, region: 0xab},
+ 82: {lang: 0x88, region: 0x99},
+ 83: {lang: 0x370, region: 0x123},
+ 84: {lang: 0x2b8, region: 0xaf},
+ 89: {lang: 0x29f, region: 0x99},
+ 90: {lang: 0x2a8, region: 0x99},
+ 91: {lang: 0x28f, region: 0x87},
+ 92: {lang: 0x1a0, region: 0x87},
+ 93: {lang: 0x2ac, region: 0x53},
+ 95: {lang: 0x4f4, region: 0x12b},
+ 96: {lang: 0x4f5, region: 0x12b},
+ 97: {lang: 0x1be, region: 0x99},
+ 99: {lang: 0x337, region: 0x9c},
+ 100: {lang: 0x4f7, region: 0x53},
+ 101: {lang: 0xa9, region: 0x53},
+ 104: {lang: 0x2e8, region: 0x112},
+ 105: {lang: 0x4f8, region: 0x10b},
+ 106: {lang: 0x4f8, region: 0x10b},
+ 107: {lang: 0x304, region: 0x99},
+ 108: {lang: 0x31b, region: 0x99},
+ 109: {lang: 0x30b, region: 0x53},
+ 111: {lang: 0x31e, region: 0x35},
+ 112: {lang: 0x30e, region: 0x99},
+ 113: {lang: 0x414, region: 0xe8},
+ 114: {lang: 0x331, region: 0xc4},
+ 115: {lang: 0x4f9, region: 0x108},
+ 116: {lang: 0x3b, region: 0xa1},
+ 117: {lang: 0x353, region: 0xdb},
+ 120: {lang: 0x2d0, region: 0x84},
+ 121: {lang: 0x52a, region: 0x53},
+ 122: {lang: 0x403, region: 0x96},
+ 123: {lang: 0x3ee, region: 0x99},
+ 124: {lang: 0x39b, region: 0xc5},
+ 125: {lang: 0x395, region: 0x99},
+ 126: {lang: 0x399, region: 0x135},
+ 127: {lang: 0x429, region: 0x115},
+ 128: {lang: 0x3b, region: 0x11c},
+ 129: {lang: 0xfd, region: 0xc4},
+ 130: {lang: 0x27d, region: 0x106},
+ 131: {lang: 0x2c9, region: 0x53},
+ 132: {lang: 0x39f, region: 0x9c},
+ 133: {lang: 0x39f, region: 0x53},
+ 135: {lang: 0x3ad, region: 0xb0},
+ 137: {lang: 0x1c6, region: 0x53},
+ 138: {lang: 0x4fd, region: 0x9c},
+ 189: {lang: 0x3cb, region: 0x95},
+ 191: {lang: 0x372, region: 0x10c},
+ 192: {lang: 0x420, region: 0x97},
+ 194: {lang: 0x4ff, region: 0x15e},
+ 195: {lang: 0x3f0, region: 0x99},
+ 196: {lang: 0x45, region: 0x135},
+ 197: {lang: 0x139, region: 0x7b},
+ 198: {lang: 0x3e9, region: 0x99},
+ 200: {lang: 0x3e9, region: 0x99},
+ 201: {lang: 0x3fa, region: 0x99},
+ 202: {lang: 0x40c, region: 0xb3},
+ 203: {lang: 0x433, region: 0x99},
+ 204: {lang: 0xef, region: 0xc5},
+ 205: {lang: 0x43e, region: 0x95},
+ 206: {lang: 0x44d, region: 0x35},
+ 207: {lang: 0x44e, region: 0x9b},
+ 211: {lang: 0x45a, region: 0xe7},
+ 212: {lang: 0x11a, region: 0x99},
+ 213: {lang: 0x45e, region: 0x53},
+ 214: {lang: 0x232, region: 0x53},
+ 215: {lang: 0x450, region: 0x99},
+ 216: {lang: 0x4a5, region: 0x53},
+ 217: {lang: 0x9f, region: 0x13e},
+ 218: {lang: 0x461, region: 0x99},
+ 220: {lang: 0x528, region: 0xba},
+ 221: {lang: 0x153, region: 0xe7},
+ 222: {lang: 0x128, region: 0xcd},
+ 223: {lang: 0x46b, region: 0x123},
+ 224: {lang: 0xa9, region: 0x53},
+ 225: {lang: 0x2ce, region: 0x99},
+ 226: {lang: 0x4ad, region: 0x11c},
+ 227: {lang: 0x4be, region: 0xb4},
+ 229: {lang: 0x1ce, region: 0x99},
+ 232: {lang: 0x3a9, region: 0x9c},
+ 233: {lang: 0x22, region: 0x9b},
+ 234: {lang: 0x1ea, region: 0x53},
+ 235: {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: 0x57, flags: 0x0},
+ 1: {region: 0x6f, script: 0x57, flags: 0x0},
+ 2: {region: 0x165, script: 0x57, flags: 0x0},
+ 3: {region: 0x165, script: 0x57, flags: 0x0},
+ 4: {region: 0x165, script: 0x57, flags: 0x0},
+ 5: {region: 0x7d, script: 0x1f, flags: 0x0},
+ 6: {region: 0x165, script: 0x57, flags: 0x0},
+ 7: {region: 0x165, script: 0x1f, flags: 0x0},
+ 8: {region: 0x80, script: 0x57, flags: 0x0},
+ 9: {region: 0x165, script: 0x57, flags: 0x0},
+ 10: {region: 0x165, script: 0x57, flags: 0x0},
+ 11: {region: 0x165, script: 0x57, flags: 0x0},
+ 12: {region: 0x95, script: 0x57, flags: 0x0},
+ 13: {region: 0x131, script: 0x57, flags: 0x0},
+ 14: {region: 0x80, script: 0x57, flags: 0x0},
+ 15: {region: 0x165, script: 0x57, flags: 0x0},
+ 16: {region: 0x165, script: 0x57, flags: 0x0},
+ 17: {region: 0x106, script: 0x1f, flags: 0x0},
+ 18: {region: 0x165, script: 0x57, flags: 0x0},
+ 19: {region: 0x9c, script: 0x9, flags: 0x0},
+ 20: {region: 0x128, script: 0x5, flags: 0x0},
+ 21: {region: 0x165, script: 0x57, flags: 0x0},
+ 22: {region: 0x161, script: 0x57, flags: 0x0},
+ 23: {region: 0x165, script: 0x57, flags: 0x0},
+ 24: {region: 0x165, script: 0x57, flags: 0x0},
+ 25: {region: 0x165, script: 0x57, flags: 0x0},
+ 26: {region: 0x165, script: 0x57, flags: 0x0},
+ 27: {region: 0x165, script: 0x57, flags: 0x0},
+ 28: {region: 0x52, script: 0x57, flags: 0x0},
+ 29: {region: 0x165, script: 0x57, flags: 0x0},
+ 30: {region: 0x165, script: 0x57, flags: 0x0},
+ 31: {region: 0x99, script: 0x4, flags: 0x0},
+ 32: {region: 0x165, script: 0x57, flags: 0x0},
+ 33: {region: 0x80, script: 0x57, flags: 0x0},
+ 34: {region: 0x9b, script: 0xe9, flags: 0x0},
+ 35: {region: 0x165, script: 0x57, flags: 0x0},
+ 36: {region: 0x165, script: 0x57, flags: 0x0},
+ 37: {region: 0x14d, script: 0x57, flags: 0x0},
+ 38: {region: 0x106, script: 0x1f, flags: 0x0},
+ 39: {region: 0x6f, script: 0x29, flags: 0x0},
+ 40: {region: 0x165, script: 0x57, flags: 0x0},
+ 41: {region: 0x165, script: 0x57, flags: 0x0},
+ 42: {region: 0xd6, script: 0x57, flags: 0x0},
+ 43: {region: 0x165, script: 0x57, flags: 0x0},
+ 45: {region: 0x165, script: 0x57, flags: 0x0},
+ 46: {region: 0x165, script: 0x57, flags: 0x0},
+ 47: {region: 0x165, script: 0x57, flags: 0x0},
+ 48: {region: 0x165, script: 0x57, flags: 0x0},
+ 49: {region: 0x165, script: 0x57, flags: 0x0},
+ 50: {region: 0x165, script: 0x57, flags: 0x0},
+ 51: {region: 0x95, script: 0x57, flags: 0x0},
+ 52: {region: 0x165, script: 0x5, flags: 0x0},
+ 53: {region: 0x122, script: 0x5, flags: 0x0},
+ 54: {region: 0x165, script: 0x57, flags: 0x0},
+ 55: {region: 0x165, script: 0x57, flags: 0x0},
+ 56: {region: 0x165, script: 0x57, flags: 0x0},
+ 57: {region: 0x165, script: 0x57, flags: 0x0},
+ 58: {region: 0x6b, script: 0x5, flags: 0x0},
+ 59: {region: 0x0, script: 0x3, flags: 0x1},
+ 60: {region: 0x165, script: 0x57, flags: 0x0},
+ 61: {region: 0x51, script: 0x57, flags: 0x0},
+ 62: {region: 0x3f, script: 0x57, 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: 0x57, flags: 0x0},
+ 69: {region: 0x135, script: 0xc4, flags: 0x0},
+ 70: {region: 0x165, script: 0x57, flags: 0x0},
+ 71: {region: 0x165, script: 0x57, flags: 0x0},
+ 72: {region: 0x6e, script: 0x57, flags: 0x0},
+ 73: {region: 0x165, script: 0x57, flags: 0x0},
+ 74: {region: 0x165, script: 0x57, flags: 0x0},
+ 75: {region: 0x49, script: 0x57, flags: 0x0},
+ 76: {region: 0x165, script: 0x57, flags: 0x0},
+ 77: {region: 0x106, script: 0x1f, flags: 0x0},
+ 78: {region: 0x165, script: 0x5, flags: 0x0},
+ 79: {region: 0x165, script: 0x57, flags: 0x0},
+ 80: {region: 0x165, script: 0x57, flags: 0x0},
+ 81: {region: 0x165, script: 0x57, flags: 0x0},
+ 82: {region: 0x99, script: 0x21, flags: 0x0},
+ 83: {region: 0x165, script: 0x57, flags: 0x0},
+ 84: {region: 0x165, script: 0x57, flags: 0x0},
+ 85: {region: 0x165, script: 0x57, flags: 0x0},
+ 86: {region: 0x3f, script: 0x57, flags: 0x0},
+ 87: {region: 0x165, script: 0x57, flags: 0x0},
+ 88: {region: 0x3, script: 0x5, flags: 0x1},
+ 89: {region: 0x106, script: 0x1f, flags: 0x0},
+ 90: {region: 0xe8, script: 0x5, flags: 0x0},
+ 91: {region: 0x95, script: 0x57, flags: 0x0},
+ 92: {region: 0xdb, script: 0x21, flags: 0x0},
+ 93: {region: 0x2e, script: 0x57, flags: 0x0},
+ 94: {region: 0x52, script: 0x57, flags: 0x0},
+ 95: {region: 0x165, script: 0x57, flags: 0x0},
+ 96: {region: 0x52, script: 0xb, flags: 0x0},
+ 97: {region: 0x165, script: 0x57, flags: 0x0},
+ 98: {region: 0x165, script: 0x57, flags: 0x0},
+ 99: {region: 0x95, script: 0x57, flags: 0x0},
+ 100: {region: 0x165, script: 0x57, flags: 0x0},
+ 101: {region: 0x52, script: 0x57, flags: 0x0},
+ 102: {region: 0x165, script: 0x57, flags: 0x0},
+ 103: {region: 0x165, script: 0x57, flags: 0x0},
+ 104: {region: 0x165, script: 0x57, flags: 0x0},
+ 105: {region: 0x165, script: 0x57, flags: 0x0},
+ 106: {region: 0x4f, script: 0x57, flags: 0x0},
+ 107: {region: 0x165, script: 0x57, flags: 0x0},
+ 108: {region: 0x165, script: 0x57, flags: 0x0},
+ 109: {region: 0x165, script: 0x57, flags: 0x0},
+ 110: {region: 0x165, script: 0x29, flags: 0x0},
+ 111: {region: 0x165, script: 0x57, flags: 0x0},
+ 112: {region: 0x165, script: 0x57, flags: 0x0},
+ 113: {region: 0x47, script: 0x1f, flags: 0x0},
+ 114: {region: 0x165, script: 0x57, flags: 0x0},
+ 115: {region: 0x165, script: 0x57, flags: 0x0},
+ 116: {region: 0x10b, script: 0x5, flags: 0x0},
+ 117: {region: 0x162, script: 0x57, flags: 0x0},
+ 118: {region: 0x165, script: 0x57, flags: 0x0},
+ 119: {region: 0x95, script: 0x57, flags: 0x0},
+ 120: {region: 0x165, script: 0x57, flags: 0x0},
+ 121: {region: 0x12f, script: 0x57, flags: 0x0},
+ 122: {region: 0x52, script: 0x57, flags: 0x0},
+ 123: {region: 0x99, script: 0xd7, flags: 0x0},
+ 124: {region: 0xe8, script: 0x5, flags: 0x0},
+ 125: {region: 0x99, script: 0x21, flags: 0x0},
+ 126: {region: 0x38, script: 0x1f, flags: 0x0},
+ 127: {region: 0x99, script: 0x21, flags: 0x0},
+ 128: {region: 0xe8, script: 0x5, flags: 0x0},
+ 129: {region: 0x12b, script: 0x31, flags: 0x0},
+ 131: {region: 0x99, script: 0x21, flags: 0x0},
+ 132: {region: 0x165, script: 0x57, flags: 0x0},
+ 133: {region: 0x99, script: 0x21, flags: 0x0},
+ 134: {region: 0xe7, script: 0x57, flags: 0x0},
+ 135: {region: 0x165, script: 0x57, flags: 0x0},
+ 136: {region: 0x99, script: 0x21, flags: 0x0},
+ 137: {region: 0x165, script: 0x57, flags: 0x0},
+ 138: {region: 0x13f, script: 0x57, flags: 0x0},
+ 139: {region: 0x165, script: 0x57, flags: 0x0},
+ 140: {region: 0x165, script: 0x57, flags: 0x0},
+ 141: {region: 0xe7, script: 0x57, flags: 0x0},
+ 142: {region: 0x165, script: 0x57, flags: 0x0},
+ 143: {region: 0xd6, script: 0x57, flags: 0x0},
+ 144: {region: 0x165, script: 0x57, flags: 0x0},
+ 145: {region: 0x165, script: 0x57, flags: 0x0},
+ 146: {region: 0x165, script: 0x57, flags: 0x0},
+ 147: {region: 0x165, script: 0x29, flags: 0x0},
+ 148: {region: 0x99, script: 0x21, flags: 0x0},
+ 149: {region: 0x95, script: 0x57, flags: 0x0},
+ 150: {region: 0x165, script: 0x57, flags: 0x0},
+ 151: {region: 0x165, script: 0x57, flags: 0x0},
+ 152: {region: 0x114, script: 0x57, flags: 0x0},
+ 153: {region: 0x165, script: 0x57, flags: 0x0},
+ 154: {region: 0x165, script: 0x57, flags: 0x0},
+ 155: {region: 0x52, script: 0x57, flags: 0x0},
+ 156: {region: 0x165, script: 0x57, flags: 0x0},
+ 157: {region: 0xe7, script: 0x57, flags: 0x0},
+ 158: {region: 0x165, script: 0x57, flags: 0x0},
+ 159: {region: 0x13e, script: 0xd9, flags: 0x0},
+ 160: {region: 0xc3, script: 0x57, flags: 0x0},
+ 161: {region: 0x165, script: 0x57, flags: 0x0},
+ 162: {region: 0x165, script: 0x57, flags: 0x0},
+ 163: {region: 0xc3, script: 0x57, flags: 0x0},
+ 164: {region: 0x165, script: 0x57, flags: 0x0},
+ 165: {region: 0x35, script: 0xe, flags: 0x0},
+ 166: {region: 0x165, script: 0x57, flags: 0x0},
+ 167: {region: 0x165, script: 0x57, flags: 0x0},
+ 168: {region: 0x165, script: 0x57, flags: 0x0},
+ 169: {region: 0x53, script: 0xe0, flags: 0x0},
+ 170: {region: 0x165, script: 0x57, flags: 0x0},
+ 171: {region: 0x165, script: 0x57, flags: 0x0},
+ 172: {region: 0x165, script: 0x57, flags: 0x0},
+ 173: {region: 0x99, script: 0xe, flags: 0x0},
+ 174: {region: 0x165, script: 0x57, flags: 0x0},
+ 175: {region: 0x9c, script: 0x5, flags: 0x0},
+ 176: {region: 0x165, script: 0x57, flags: 0x0},
+ 177: {region: 0x4f, script: 0x57, flags: 0x0},
+ 178: {region: 0x78, script: 0x57, flags: 0x0},
+ 179: {region: 0x99, script: 0x21, flags: 0x0},
+ 180: {region: 0xe8, script: 0x5, flags: 0x0},
+ 181: {region: 0x99, script: 0x21, flags: 0x0},
+ 182: {region: 0x165, script: 0x57, flags: 0x0},
+ 183: {region: 0x33, script: 0x57, flags: 0x0},
+ 184: {region: 0x165, script: 0x57, flags: 0x0},
+ 185: {region: 0xb4, script: 0xc, flags: 0x0},
+ 186: {region: 0x52, script: 0x57, flags: 0x0},
+ 187: {region: 0x165, script: 0x29, flags: 0x0},
+ 188: {region: 0xe7, script: 0x57, flags: 0x0},
+ 189: {region: 0x165, script: 0x57, flags: 0x0},
+ 190: {region: 0xe8, script: 0x21, flags: 0x0},
+ 191: {region: 0x106, script: 0x1f, flags: 0x0},
+ 192: {region: 0x15f, script: 0x57, flags: 0x0},
+ 193: {region: 0x165, script: 0x57, flags: 0x0},
+ 194: {region: 0x95, script: 0x57, flags: 0x0},
+ 195: {region: 0x165, script: 0x57, flags: 0x0},
+ 196: {region: 0x52, script: 0x57, flags: 0x0},
+ 197: {region: 0x165, script: 0x57, flags: 0x0},
+ 198: {region: 0x165, script: 0x57, flags: 0x0},
+ 199: {region: 0x165, script: 0x57, flags: 0x0},
+ 200: {region: 0x86, script: 0x57, flags: 0x0},
+ 201: {region: 0x165, script: 0x57, flags: 0x0},
+ 202: {region: 0x165, script: 0x57, flags: 0x0},
+ 203: {region: 0x165, script: 0x57, flags: 0x0},
+ 204: {region: 0x165, script: 0x57, flags: 0x0},
+ 205: {region: 0x6d, script: 0x29, flags: 0x0},
+ 206: {region: 0x165, script: 0x57, flags: 0x0},
+ 207: {region: 0x165, script: 0x57, flags: 0x0},
+ 208: {region: 0x52, script: 0x57, flags: 0x0},
+ 209: {region: 0x165, script: 0x57, flags: 0x0},
+ 210: {region: 0x165, script: 0x57, flags: 0x0},
+ 211: {region: 0xc3, script: 0x57, flags: 0x0},
+ 212: {region: 0x165, script: 0x57, flags: 0x0},
+ 213: {region: 0x165, script: 0x57, flags: 0x0},
+ 214: {region: 0x165, script: 0x57, flags: 0x0},
+ 215: {region: 0x6e, script: 0x57, flags: 0x0},
+ 216: {region: 0x165, script: 0x57, flags: 0x0},
+ 217: {region: 0x165, script: 0x57, flags: 0x0},
+ 218: {region: 0xd6, script: 0x57, flags: 0x0},
+ 219: {region: 0x35, script: 0x16, flags: 0x0},
+ 220: {region: 0x106, script: 0x1f, flags: 0x0},
+ 221: {region: 0xe7, script: 0x57, flags: 0x0},
+ 222: {region: 0x165, script: 0x57, flags: 0x0},
+ 223: {region: 0x131, script: 0x57, flags: 0x0},
+ 224: {region: 0x8a, script: 0x57, flags: 0x0},
+ 225: {region: 0x75, script: 0x57, flags: 0x0},
+ 226: {region: 0x106, script: 0x1f, flags: 0x0},
+ 227: {region: 0x135, script: 0x57, flags: 0x0},
+ 228: {region: 0x49, script: 0x57, 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: 0x57, flags: 0x0},
+ 233: {region: 0x9b, script: 0x5, flags: 0x0},
+ 234: {region: 0x165, script: 0x57, flags: 0x0},
+ 235: {region: 0x165, script: 0x57, flags: 0x0},
+ 236: {region: 0x165, script: 0x57, flags: 0x0},
+ 237: {region: 0x165, script: 0x57, flags: 0x0},
+ 238: {region: 0x165, script: 0x57, flags: 0x0},
+ 239: {region: 0xc5, script: 0xcc, flags: 0x0},
+ 240: {region: 0x78, script: 0x57, flags: 0x0},
+ 241: {region: 0x6b, script: 0x1c, flags: 0x0},
+ 242: {region: 0xe7, script: 0x57, flags: 0x0},
+ 243: {region: 0x49, script: 0x17, flags: 0x0},
+ 244: {region: 0x130, script: 0x1f, 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: 0x57, flags: 0x0},
+ 250: {region: 0x5e, script: 0x57, flags: 0x0},
+ 251: {region: 0xe9, script: 0x57, flags: 0x0},
+ 252: {region: 0x49, script: 0x17, flags: 0x0},
+ 253: {region: 0xc4, script: 0x81, flags: 0x0},
+ 254: {region: 0x8, script: 0x2, flags: 0x1},
+ 255: {region: 0x106, script: 0x1f, flags: 0x0},
+ 256: {region: 0x7b, script: 0x57, flags: 0x0},
+ 257: {region: 0x63, script: 0x57, flags: 0x0},
+ 258: {region: 0x165, script: 0x57, flags: 0x0},
+ 259: {region: 0x165, script: 0x57, flags: 0x0},
+ 260: {region: 0x165, script: 0x57, flags: 0x0},
+ 261: {region: 0x165, script: 0x57, flags: 0x0},
+ 262: {region: 0x135, script: 0x57, flags: 0x0},
+ 263: {region: 0x106, script: 0x1f, flags: 0x0},
+ 264: {region: 0xa4, script: 0x57, flags: 0x0},
+ 265: {region: 0x165, script: 0x57, flags: 0x0},
+ 266: {region: 0x165, script: 0x57, flags: 0x0},
+ 267: {region: 0x99, script: 0x5, flags: 0x0},
+ 268: {region: 0x165, script: 0x57, flags: 0x0},
+ 269: {region: 0x60, script: 0x57, flags: 0x0},
+ 270: {region: 0x165, script: 0x57, flags: 0x0},
+ 271: {region: 0x49, script: 0x57, flags: 0x0},
+ 272: {region: 0x165, script: 0x57, flags: 0x0},
+ 273: {region: 0x165, script: 0x57, flags: 0x0},
+ 274: {region: 0x165, script: 0x57, flags: 0x0},
+ 275: {region: 0x165, script: 0x5, flags: 0x0},
+ 276: {region: 0x49, script: 0x57, flags: 0x0},
+ 277: {region: 0x165, script: 0x57, flags: 0x0},
+ 278: {region: 0x165, script: 0x57, flags: 0x0},
+ 279: {region: 0xd4, script: 0x57, flags: 0x0},
+ 280: {region: 0x4f, script: 0x57, flags: 0x0},
+ 281: {region: 0x165, script: 0x57, flags: 0x0},
+ 282: {region: 0x99, script: 0x5, flags: 0x0},
+ 283: {region: 0x165, script: 0x57, flags: 0x0},
+ 284: {region: 0x165, script: 0x57, flags: 0x0},
+ 285: {region: 0x165, script: 0x57, flags: 0x0},
+ 286: {region: 0x165, script: 0x29, flags: 0x0},
+ 287: {region: 0x60, script: 0x57, flags: 0x0},
+ 288: {region: 0xc3, script: 0x57, flags: 0x0},
+ 289: {region: 0xd0, script: 0x57, flags: 0x0},
+ 290: {region: 0x165, script: 0x57, flags: 0x0},
+ 291: {region: 0xdb, script: 0x21, flags: 0x0},
+ 292: {region: 0x52, script: 0x57, flags: 0x0},
+ 293: {region: 0x165, script: 0x57, flags: 0x0},
+ 294: {region: 0x165, script: 0x57, flags: 0x0},
+ 295: {region: 0x165, script: 0x57, flags: 0x0},
+ 296: {region: 0xcd, script: 0xde, flags: 0x0},
+ 297: {region: 0x165, script: 0x57, flags: 0x0},
+ 298: {region: 0x165, script: 0x57, flags: 0x0},
+ 299: {region: 0x114, script: 0x57, flags: 0x0},
+ 300: {region: 0x37, script: 0x57, flags: 0x0},
+ 301: {region: 0x43, script: 0xe0, flags: 0x0},
+ 302: {region: 0x165, script: 0x57, flags: 0x0},
+ 303: {region: 0xa4, script: 0x57, flags: 0x0},
+ 304: {region: 0x80, script: 0x57, flags: 0x0},
+ 305: {region: 0xd6, script: 0x57, flags: 0x0},
+ 306: {region: 0x9e, script: 0x57, flags: 0x0},
+ 307: {region: 0x6b, script: 0x27, flags: 0x0},
+ 308: {region: 0x165, script: 0x57, flags: 0x0},
+ 309: {region: 0xc4, script: 0x48, flags: 0x0},
+ 310: {region: 0x87, script: 0x31, flags: 0x0},
+ 311: {region: 0x165, script: 0x57, flags: 0x0},
+ 312: {region: 0x165, script: 0x57, flags: 0x0},
+ 313: {region: 0xa, script: 0x2, flags: 0x1},
+ 314: {region: 0x165, script: 0x57, flags: 0x0},
+ 315: {region: 0x165, script: 0x57, flags: 0x0},
+ 316: {region: 0x1, script: 0x57, flags: 0x0},
+ 317: {region: 0x165, script: 0x57, flags: 0x0},
+ 318: {region: 0x6e, script: 0x57, flags: 0x0},
+ 319: {region: 0x135, script: 0x57, flags: 0x0},
+ 320: {region: 0x6a, script: 0x57, flags: 0x0},
+ 321: {region: 0x165, script: 0x57, flags: 0x0},
+ 322: {region: 0x9e, script: 0x43, flags: 0x0},
+ 323: {region: 0x165, script: 0x57, flags: 0x0},
+ 324: {region: 0x165, script: 0x57, flags: 0x0},
+ 325: {region: 0x6e, script: 0x57, flags: 0x0},
+ 326: {region: 0x52, script: 0x57, flags: 0x0},
+ 327: {region: 0x6e, script: 0x57, flags: 0x0},
+ 328: {region: 0x9c, script: 0x5, flags: 0x0},
+ 329: {region: 0x165, script: 0x57, flags: 0x0},
+ 330: {region: 0x165, script: 0x57, flags: 0x0},
+ 331: {region: 0x165, script: 0x57, flags: 0x0},
+ 332: {region: 0x165, script: 0x57, flags: 0x0},
+ 333: {region: 0x86, script: 0x57, flags: 0x0},
+ 334: {region: 0xc, script: 0x2, flags: 0x1},
+ 335: {region: 0x165, script: 0x57, flags: 0x0},
+ 336: {region: 0xc3, script: 0x57, flags: 0x0},
+ 337: {region: 0x72, script: 0x57, flags: 0x0},
+ 338: {region: 0x10b, script: 0x5, flags: 0x0},
+ 339: {region: 0xe7, script: 0x57, flags: 0x0},
+ 340: {region: 0x10c, script: 0x57, flags: 0x0},
+ 341: {region: 0x73, script: 0x57, flags: 0x0},
+ 342: {region: 0x165, script: 0x57, flags: 0x0},
+ 343: {region: 0x165, script: 0x57, flags: 0x0},
+ 344: {region: 0x76, script: 0x57, flags: 0x0},
+ 345: {region: 0x165, script: 0x57, flags: 0x0},
+ 346: {region: 0x3b, script: 0x57, flags: 0x0},
+ 347: {region: 0x165, script: 0x57, flags: 0x0},
+ 348: {region: 0x165, script: 0x57, flags: 0x0},
+ 349: {region: 0x165, script: 0x57, flags: 0x0},
+ 350: {region: 0x78, script: 0x57, flags: 0x0},
+ 351: {region: 0x135, script: 0x57, flags: 0x0},
+ 352: {region: 0x78, script: 0x57, flags: 0x0},
+ 353: {region: 0x60, script: 0x57, flags: 0x0},
+ 354: {region: 0x60, script: 0x57, flags: 0x0},
+ 355: {region: 0x52, script: 0x5, flags: 0x0},
+ 356: {region: 0x140, script: 0x57, flags: 0x0},
+ 357: {region: 0x165, script: 0x57, flags: 0x0},
+ 358: {region: 0x84, script: 0x57, flags: 0x0},
+ 359: {region: 0x165, script: 0x57, flags: 0x0},
+ 360: {region: 0xd4, script: 0x57, flags: 0x0},
+ 361: {region: 0x9e, script: 0x57, flags: 0x0},
+ 362: {region: 0xd6, script: 0x57, flags: 0x0},
+ 363: {region: 0x165, script: 0x57, flags: 0x0},
+ 364: {region: 0x10b, script: 0x57, flags: 0x0},
+ 365: {region: 0xd9, script: 0x57, flags: 0x0},
+ 366: {region: 0x96, script: 0x57, flags: 0x0},
+ 367: {region: 0x80, script: 0x57, flags: 0x0},
+ 368: {region: 0x165, script: 0x57, flags: 0x0},
+ 369: {region: 0xbc, script: 0x57, flags: 0x0},
+ 370: {region: 0x165, script: 0x57, flags: 0x0},
+ 371: {region: 0x165, script: 0x57, flags: 0x0},
+ 372: {region: 0x165, script: 0x57, flags: 0x0},
+ 373: {region: 0x53, script: 0x38, flags: 0x0},
+ 374: {region: 0x165, script: 0x57, flags: 0x0},
+ 375: {region: 0x95, script: 0x57, flags: 0x0},
+ 376: {region: 0x165, script: 0x57, flags: 0x0},
+ 377: {region: 0x165, script: 0x57, flags: 0x0},
+ 378: {region: 0x99, script: 0x21, flags: 0x0},
+ 379: {region: 0x165, script: 0x57, flags: 0x0},
+ 380: {region: 0x9c, script: 0x5, flags: 0x0},
+ 381: {region: 0x7e, script: 0x57, flags: 0x0},
+ 382: {region: 0x7b, script: 0x57, flags: 0x0},
+ 383: {region: 0x165, script: 0x57, flags: 0x0},
+ 384: {region: 0x165, script: 0x57, flags: 0x0},
+ 385: {region: 0x165, script: 0x57, flags: 0x0},
+ 386: {region: 0x165, script: 0x57, flags: 0x0},
+ 387: {region: 0x165, script: 0x57, flags: 0x0},
+ 388: {region: 0x165, script: 0x57, flags: 0x0},
+ 389: {region: 0x6f, script: 0x29, flags: 0x0},
+ 390: {region: 0x165, script: 0x57, flags: 0x0},
+ 391: {region: 0xdb, script: 0x21, flags: 0x0},
+ 392: {region: 0x165, script: 0x57, flags: 0x0},
+ 393: {region: 0xa7, script: 0x57, flags: 0x0},
+ 394: {region: 0x165, script: 0x57, flags: 0x0},
+ 395: {region: 0xe8, script: 0x5, flags: 0x0},
+ 396: {region: 0x165, script: 0x57, flags: 0x0},
+ 397: {region: 0xe8, script: 0x5, flags: 0x0},
+ 398: {region: 0x165, script: 0x57, flags: 0x0},
+ 399: {region: 0x165, script: 0x57, flags: 0x0},
+ 400: {region: 0x6e, script: 0x57, flags: 0x0},
+ 401: {region: 0x9c, script: 0x5, flags: 0x0},
+ 402: {region: 0x165, script: 0x57, flags: 0x0},
+ 403: {region: 0x165, script: 0x29, flags: 0x0},
+ 404: {region: 0xf1, script: 0x57, flags: 0x0},
+ 405: {region: 0x165, script: 0x57, flags: 0x0},
+ 406: {region: 0x165, script: 0x57, flags: 0x0},
+ 407: {region: 0x165, script: 0x57, flags: 0x0},
+ 408: {region: 0x165, script: 0x29, flags: 0x0},
+ 409: {region: 0x165, script: 0x57, flags: 0x0},
+ 410: {region: 0x99, script: 0x21, flags: 0x0},
+ 411: {region: 0x99, script: 0xda, flags: 0x0},
+ 412: {region: 0x95, script: 0x57, flags: 0x0},
+ 413: {region: 0xd9, script: 0x57, flags: 0x0},
+ 414: {region: 0x130, script: 0x2f, flags: 0x0},
+ 415: {region: 0x165, script: 0x57, flags: 0x0},
+ 416: {region: 0xe, script: 0x2, flags: 0x1},
+ 417: {region: 0x99, script: 0xe, flags: 0x0},
+ 418: {region: 0x165, script: 0x57, flags: 0x0},
+ 419: {region: 0x4e, script: 0x57, flags: 0x0},
+ 420: {region: 0x99, script: 0x32, flags: 0x0},
+ 421: {region: 0x41, script: 0x57, flags: 0x0},
+ 422: {region: 0x54, script: 0x57, flags: 0x0},
+ 423: {region: 0x165, script: 0x57, flags: 0x0},
+ 424: {region: 0x80, script: 0x57, flags: 0x0},
+ 425: {region: 0x165, script: 0x57, flags: 0x0},
+ 426: {region: 0x165, script: 0x57, flags: 0x0},
+ 427: {region: 0xa4, script: 0x57, flags: 0x0},
+ 428: {region: 0x98, script: 0x57, flags: 0x0},
+ 429: {region: 0x165, script: 0x57, flags: 0x0},
+ 430: {region: 0xdb, script: 0x21, flags: 0x0},
+ 431: {region: 0x165, script: 0x57, flags: 0x0},
+ 432: {region: 0x165, script: 0x5, flags: 0x0},
+ 433: {region: 0x49, script: 0x57, flags: 0x0},
+ 434: {region: 0x165, script: 0x5, flags: 0x0},
+ 435: {region: 0x165, script: 0x57, flags: 0x0},
+ 436: {region: 0x10, script: 0x3, flags: 0x1},
+ 437: {region: 0x165, script: 0x57, flags: 0x0},
+ 438: {region: 0x53, script: 0x38, flags: 0x0},
+ 439: {region: 0x165, script: 0x57, flags: 0x0},
+ 440: {region: 0x135, script: 0x57, flags: 0x0},
+ 441: {region: 0x24, script: 0x5, flags: 0x0},
+ 442: {region: 0x165, script: 0x57, flags: 0x0},
+ 443: {region: 0x165, script: 0x29, flags: 0x0},
+ 444: {region: 0x97, script: 0x3b, flags: 0x0},
+ 445: {region: 0x165, script: 0x57, flags: 0x0},
+ 446: {region: 0x99, script: 0x21, flags: 0x0},
+ 447: {region: 0x165, script: 0x57, flags: 0x0},
+ 448: {region: 0x73, script: 0x57, flags: 0x0},
+ 449: {region: 0x165, script: 0x57, flags: 0x0},
+ 450: {region: 0x165, script: 0x57, flags: 0x0},
+ 451: {region: 0xe7, script: 0x57, flags: 0x0},
+ 452: {region: 0x165, script: 0x57, flags: 0x0},
+ 453: {region: 0x12b, script: 0x3d, flags: 0x0},
+ 454: {region: 0x53, script: 0x89, flags: 0x0},
+ 455: {region: 0x165, script: 0x57, flags: 0x0},
+ 456: {region: 0xe8, script: 0x5, flags: 0x0},
+ 457: {region: 0x99, script: 0x21, flags: 0x0},
+ 458: {region: 0xaf, script: 0x3e, flags: 0x0},
+ 459: {region: 0xe7, script: 0x57, flags: 0x0},
+ 460: {region: 0xe8, script: 0x5, flags: 0x0},
+ 461: {region: 0xe6, script: 0x57, flags: 0x0},
+ 462: {region: 0x99, script: 0x21, flags: 0x0},
+ 463: {region: 0x99, script: 0x21, flags: 0x0},
+ 464: {region: 0x165, script: 0x57, flags: 0x0},
+ 465: {region: 0x90, script: 0x57, flags: 0x0},
+ 466: {region: 0x60, script: 0x57, flags: 0x0},
+ 467: {region: 0x53, script: 0x38, flags: 0x0},
+ 468: {region: 0x91, script: 0x57, flags: 0x0},
+ 469: {region: 0x92, script: 0x57, flags: 0x0},
+ 470: {region: 0x165, script: 0x57, flags: 0x0},
+ 471: {region: 0x28, script: 0x8, flags: 0x0},
+ 472: {region: 0xd2, script: 0x57, flags: 0x0},
+ 473: {region: 0x78, script: 0x57, flags: 0x0},
+ 474: {region: 0x165, script: 0x57, flags: 0x0},
+ 475: {region: 0x165, script: 0x57, flags: 0x0},
+ 476: {region: 0xd0, script: 0x57, flags: 0x0},
+ 477: {region: 0xd6, script: 0x57, flags: 0x0},
+ 478: {region: 0x165, script: 0x57, flags: 0x0},
+ 479: {region: 0x165, script: 0x57, flags: 0x0},
+ 480: {region: 0x165, script: 0x57, flags: 0x0},
+ 481: {region: 0x95, script: 0x57, flags: 0x0},
+ 482: {region: 0x165, script: 0x57, flags: 0x0},
+ 483: {region: 0x165, script: 0x57, flags: 0x0},
+ 484: {region: 0x165, script: 0x57, flags: 0x0},
+ 486: {region: 0x122, script: 0x57, flags: 0x0},
+ 487: {region: 0xd6, script: 0x57, flags: 0x0},
+ 488: {region: 0x165, script: 0x57, flags: 0x0},
+ 489: {region: 0x165, script: 0x57, flags: 0x0},
+ 490: {region: 0x53, script: 0xea, flags: 0x0},
+ 491: {region: 0x165, script: 0x57, flags: 0x0},
+ 492: {region: 0x135, script: 0x57, flags: 0x0},
+ 493: {region: 0x165, script: 0x57, flags: 0x0},
+ 494: {region: 0x49, script: 0x57, flags: 0x0},
+ 495: {region: 0x165, script: 0x57, flags: 0x0},
+ 496: {region: 0x165, script: 0x57, flags: 0x0},
+ 497: {region: 0xe7, script: 0x57, flags: 0x0},
+ 498: {region: 0x165, script: 0x57, flags: 0x0},
+ 499: {region: 0x95, script: 0x57, flags: 0x0},
+ 500: {region: 0x106, script: 0x1f, flags: 0x0},
+ 501: {region: 0x1, script: 0x57, flags: 0x0},
+ 502: {region: 0x165, script: 0x57, flags: 0x0},
+ 503: {region: 0x165, script: 0x57, flags: 0x0},
+ 504: {region: 0x9d, script: 0x57, flags: 0x0},
+ 505: {region: 0x9e, script: 0x57, flags: 0x0},
+ 506: {region: 0x49, script: 0x17, flags: 0x0},
+ 507: {region: 0x97, script: 0x3b, flags: 0x0},
+ 508: {region: 0x165, script: 0x57, flags: 0x0},
+ 509: {region: 0x165, script: 0x57, flags: 0x0},
+ 510: {region: 0x106, script: 0x57, flags: 0x0},
+ 511: {region: 0x165, script: 0x57, flags: 0x0},
+ 512: {region: 0xa2, script: 0x46, flags: 0x0},
+ 513: {region: 0x165, script: 0x57, flags: 0x0},
+ 514: {region: 0xa0, script: 0x57, flags: 0x0},
+ 515: {region: 0x1, script: 0x57, flags: 0x0},
+ 516: {region: 0x165, script: 0x57, flags: 0x0},
+ 517: {region: 0x165, script: 0x57, flags: 0x0},
+ 518: {region: 0x165, script: 0x57, flags: 0x0},
+ 519: {region: 0x52, script: 0x57, flags: 0x0},
+ 520: {region: 0x130, script: 0x3b, flags: 0x0},
+ 521: {region: 0x165, script: 0x57, flags: 0x0},
+ 522: {region: 0x12f, script: 0x57, flags: 0x0},
+ 523: {region: 0xdb, script: 0x21, flags: 0x0},
+ 524: {region: 0x165, script: 0x57, flags: 0x0},
+ 525: {region: 0x63, script: 0x57, flags: 0x0},
+ 526: {region: 0x95, script: 0x57, flags: 0x0},
+ 527: {region: 0x95, script: 0x57, flags: 0x0},
+ 528: {region: 0x7d, script: 0x2b, flags: 0x0},
+ 529: {region: 0x137, script: 0x1f, flags: 0x0},
+ 530: {region: 0x67, script: 0x57, flags: 0x0},
+ 531: {region: 0xc4, script: 0x57, flags: 0x0},
+ 532: {region: 0x165, script: 0x57, flags: 0x0},
+ 533: {region: 0x165, script: 0x57, flags: 0x0},
+ 534: {region: 0xd6, script: 0x57, flags: 0x0},
+ 535: {region: 0xa4, script: 0x57, flags: 0x0},
+ 536: {region: 0xc3, script: 0x57, flags: 0x0},
+ 537: {region: 0x106, script: 0x1f, flags: 0x0},
+ 538: {region: 0x165, script: 0x57, flags: 0x0},
+ 539: {region: 0x165, script: 0x57, flags: 0x0},
+ 540: {region: 0x165, script: 0x57, flags: 0x0},
+ 541: {region: 0x165, script: 0x57, flags: 0x0},
+ 542: {region: 0xd4, script: 0x5, flags: 0x0},
+ 543: {region: 0xd6, script: 0x57, flags: 0x0},
+ 544: {region: 0x164, script: 0x57, flags: 0x0},
+ 545: {region: 0x165, script: 0x57, flags: 0x0},
+ 546: {region: 0x165, script: 0x57, flags: 0x0},
+ 547: {region: 0x12f, script: 0x57, flags: 0x0},
+ 548: {region: 0x122, script: 0x5, flags: 0x0},
+ 549: {region: 0x165, script: 0x57, flags: 0x0},
+ 550: {region: 0x123, script: 0xdf, flags: 0x0},
+ 551: {region: 0x5a, script: 0x57, flags: 0x0},
+ 552: {region: 0x52, script: 0x57, flags: 0x0},
+ 553: {region: 0x165, script: 0x57, flags: 0x0},
+ 554: {region: 0x4f, script: 0x57, flags: 0x0},
+ 555: {region: 0x99, script: 0x21, flags: 0x0},
+ 556: {region: 0x99, script: 0x21, flags: 0x0},
+ 557: {region: 0x4b, script: 0x57, flags: 0x0},
+ 558: {region: 0x95, script: 0x57, flags: 0x0},
+ 559: {region: 0x165, script: 0x57, flags: 0x0},
+ 560: {region: 0x41, script: 0x57, flags: 0x0},
+ 561: {region: 0x99, script: 0x57, flags: 0x0},
+ 562: {region: 0x53, script: 0xd6, flags: 0x0},
+ 563: {region: 0x99, script: 0x21, flags: 0x0},
+ 564: {region: 0xc3, script: 0x57, flags: 0x0},
+ 565: {region: 0x165, script: 0x57, flags: 0x0},
+ 566: {region: 0x99, script: 0x72, flags: 0x0},
+ 567: {region: 0xe8, script: 0x5, flags: 0x0},
+ 568: {region: 0x165, script: 0x57, flags: 0x0},
+ 569: {region: 0xa4, script: 0x57, flags: 0x0},
+ 570: {region: 0x165, script: 0x57, flags: 0x0},
+ 571: {region: 0x12b, script: 0x57, flags: 0x0},
+ 572: {region: 0x165, script: 0x57, flags: 0x0},
+ 573: {region: 0xd2, script: 0x57, flags: 0x0},
+ 574: {region: 0x165, script: 0x57, flags: 0x0},
+ 575: {region: 0xaf, script: 0x54, flags: 0x0},
+ 576: {region: 0x165, script: 0x57, flags: 0x0},
+ 577: {region: 0x165, script: 0x57, flags: 0x0},
+ 578: {region: 0x13, script: 0x6, flags: 0x1},
+ 579: {region: 0x165, script: 0x57, flags: 0x0},
+ 580: {region: 0x52, script: 0x57, flags: 0x0},
+ 581: {region: 0x82, script: 0x57, flags: 0x0},
+ 582: {region: 0xa4, script: 0x57, flags: 0x0},
+ 583: {region: 0x165, script: 0x57, flags: 0x0},
+ 584: {region: 0x165, script: 0x57, flags: 0x0},
+ 585: {region: 0x165, script: 0x57, flags: 0x0},
+ 586: {region: 0xa6, script: 0x4b, flags: 0x0},
+ 587: {region: 0x2a, script: 0x57, flags: 0x0},
+ 588: {region: 0x165, script: 0x57, flags: 0x0},
+ 589: {region: 0x165, script: 0x57, flags: 0x0},
+ 590: {region: 0x165, script: 0x57, flags: 0x0},
+ 591: {region: 0x165, script: 0x57, flags: 0x0},
+ 592: {region: 0x165, script: 0x57, flags: 0x0},
+ 593: {region: 0x99, script: 0x4f, flags: 0x0},
+ 594: {region: 0x8b, script: 0x57, flags: 0x0},
+ 595: {region: 0x165, script: 0x57, flags: 0x0},
+ 596: {region: 0xab, script: 0x50, flags: 0x0},
+ 597: {region: 0x106, script: 0x1f, flags: 0x0},
+ 598: {region: 0x99, script: 0x21, flags: 0x0},
+ 599: {region: 0x165, script: 0x57, flags: 0x0},
+ 600: {region: 0x75, script: 0x57, flags: 0x0},
+ 601: {region: 0x165, script: 0x57, flags: 0x0},
+ 602: {region: 0xb4, script: 0x57, flags: 0x0},
+ 603: {region: 0x165, script: 0x57, flags: 0x0},
+ 604: {region: 0x165, script: 0x57, flags: 0x0},
+ 605: {region: 0x165, script: 0x57, flags: 0x0},
+ 606: {region: 0x165, script: 0x57, flags: 0x0},
+ 607: {region: 0x165, script: 0x57, flags: 0x0},
+ 608: {region: 0x165, script: 0x57, flags: 0x0},
+ 609: {region: 0x165, script: 0x57, flags: 0x0},
+ 610: {region: 0x165, script: 0x29, flags: 0x0},
+ 611: {region: 0x165, script: 0x57, flags: 0x0},
+ 612: {region: 0x106, script: 0x1f, flags: 0x0},
+ 613: {region: 0x112, script: 0x57, flags: 0x0},
+ 614: {region: 0xe7, script: 0x57, flags: 0x0},
+ 615: {region: 0x106, script: 0x57, flags: 0x0},
+ 616: {region: 0x165, script: 0x57, flags: 0x0},
+ 617: {region: 0x99, script: 0x21, flags: 0x0},
+ 618: {region: 0x99, script: 0x5, flags: 0x0},
+ 619: {region: 0x12f, script: 0x57, flags: 0x0},
+ 620: {region: 0x165, script: 0x57, flags: 0x0},
+ 621: {region: 0x52, script: 0x57, flags: 0x0},
+ 622: {region: 0x60, script: 0x57, flags: 0x0},
+ 623: {region: 0x165, script: 0x57, flags: 0x0},
+ 624: {region: 0x165, script: 0x57, flags: 0x0},
+ 625: {region: 0x165, script: 0x29, flags: 0x0},
+ 626: {region: 0x165, script: 0x57, flags: 0x0},
+ 627: {region: 0x165, script: 0x57, flags: 0x0},
+ 628: {region: 0x19, script: 0x3, flags: 0x1},
+ 629: {region: 0x165, script: 0x57, flags: 0x0},
+ 630: {region: 0x165, script: 0x57, flags: 0x0},
+ 631: {region: 0x165, script: 0x57, flags: 0x0},
+ 632: {region: 0x165, script: 0x57, flags: 0x0},
+ 633: {region: 0x106, script: 0x1f, flags: 0x0},
+ 634: {region: 0x165, script: 0x57, flags: 0x0},
+ 635: {region: 0x165, script: 0x57, flags: 0x0},
+ 636: {region: 0x165, script: 0x57, flags: 0x0},
+ 637: {region: 0x106, script: 0x1f, flags: 0x0},
+ 638: {region: 0x165, script: 0x57, flags: 0x0},
+ 639: {region: 0x95, script: 0x57, flags: 0x0},
+ 640: {region: 0xe8, script: 0x5, flags: 0x0},
+ 641: {region: 0x7b, script: 0x57, flags: 0x0},
+ 642: {region: 0x165, script: 0x57, flags: 0x0},
+ 643: {region: 0x165, script: 0x57, flags: 0x0},
+ 644: {region: 0x165, script: 0x57, flags: 0x0},
+ 645: {region: 0x165, script: 0x29, flags: 0x0},
+ 646: {region: 0x123, script: 0xdf, flags: 0x0},
+ 647: {region: 0xe8, script: 0x5, flags: 0x0},
+ 648: {region: 0x165, script: 0x57, flags: 0x0},
+ 649: {region: 0x165, script: 0x57, flags: 0x0},
+ 650: {region: 0x1c, script: 0x5, flags: 0x1},
+ 651: {region: 0x165, script: 0x57, flags: 0x0},
+ 652: {region: 0x165, script: 0x57, flags: 0x0},
+ 653: {region: 0x165, script: 0x57, flags: 0x0},
+ 654: {region: 0x138, script: 0x57, flags: 0x0},
+ 655: {region: 0x87, script: 0x5b, flags: 0x0},
+ 656: {region: 0x97, script: 0x3b, flags: 0x0},
+ 657: {region: 0x12f, script: 0x57, flags: 0x0},
+ 658: {region: 0xe8, script: 0x5, flags: 0x0},
+ 659: {region: 0x131, script: 0x57, flags: 0x0},
+ 660: {region: 0x165, script: 0x57, flags: 0x0},
+ 661: {region: 0xb7, script: 0x57, flags: 0x0},
+ 662: {region: 0x106, script: 0x1f, flags: 0x0},
+ 663: {region: 0x165, script: 0x57, flags: 0x0},
+ 664: {region: 0x95, script: 0x57, flags: 0x0},
+ 665: {region: 0x165, script: 0x57, flags: 0x0},
+ 666: {region: 0x53, script: 0xdf, flags: 0x0},
+ 667: {region: 0x165, script: 0x57, flags: 0x0},
+ 668: {region: 0x165, script: 0x57, flags: 0x0},
+ 669: {region: 0x165, script: 0x57, flags: 0x0},
+ 670: {region: 0x165, script: 0x57, flags: 0x0},
+ 671: {region: 0x99, script: 0x59, flags: 0x0},
+ 672: {region: 0x165, script: 0x57, flags: 0x0},
+ 673: {region: 0x165, script: 0x57, flags: 0x0},
+ 674: {region: 0x106, script: 0x1f, flags: 0x0},
+ 675: {region: 0x131, script: 0x57, flags: 0x0},
+ 676: {region: 0x165, script: 0x57, flags: 0x0},
+ 677: {region: 0xd9, script: 0x57, flags: 0x0},
+ 678: {region: 0x165, script: 0x57, flags: 0x0},
+ 679: {region: 0x165, script: 0x57, flags: 0x0},
+ 680: {region: 0x21, script: 0x2, flags: 0x1},
+ 681: {region: 0x165, script: 0x57, flags: 0x0},
+ 682: {region: 0x165, script: 0x57, flags: 0x0},
+ 683: {region: 0x9e, script: 0x57, flags: 0x0},
+ 684: {region: 0x53, script: 0x5d, flags: 0x0},
+ 685: {region: 0x95, script: 0x57, flags: 0x0},
+ 686: {region: 0x9c, script: 0x5, flags: 0x0},
+ 687: {region: 0x135, script: 0x57, flags: 0x0},
+ 688: {region: 0x165, script: 0x57, flags: 0x0},
+ 689: {region: 0x165, script: 0x57, flags: 0x0},
+ 690: {region: 0x99, script: 0xda, flags: 0x0},
+ 691: {region: 0x9e, script: 0x57, flags: 0x0},
+ 692: {region: 0x165, script: 0x57, flags: 0x0},
+ 693: {region: 0x4b, script: 0x57, flags: 0x0},
+ 694: {region: 0x165, script: 0x57, flags: 0x0},
+ 695: {region: 0x165, script: 0x57, flags: 0x0},
+ 696: {region: 0xaf, script: 0x54, flags: 0x0},
+ 697: {region: 0x165, script: 0x57, flags: 0x0},
+ 698: {region: 0x165, script: 0x57, flags: 0x0},
+ 699: {region: 0x4b, script: 0x57, flags: 0x0},
+ 700: {region: 0x165, script: 0x57, flags: 0x0},
+ 701: {region: 0x165, script: 0x57, flags: 0x0},
+ 702: {region: 0x162, script: 0x57, flags: 0x0},
+ 703: {region: 0x9c, script: 0x5, flags: 0x0},
+ 704: {region: 0xb6, script: 0x57, flags: 0x0},
+ 705: {region: 0xb8, script: 0x57, flags: 0x0},
+ 706: {region: 0x4b, script: 0x57, flags: 0x0},
+ 707: {region: 0x4b, script: 0x57, flags: 0x0},
+ 708: {region: 0xa4, script: 0x57, flags: 0x0},
+ 709: {region: 0xa4, script: 0x57, flags: 0x0},
+ 710: {region: 0x9c, script: 0x5, flags: 0x0},
+ 711: {region: 0xb8, script: 0x57, flags: 0x0},
+ 712: {region: 0x123, script: 0xdf, flags: 0x0},
+ 713: {region: 0x53, script: 0x38, flags: 0x0},
+ 714: {region: 0x12b, script: 0x57, flags: 0x0},
+ 715: {region: 0x95, script: 0x57, flags: 0x0},
+ 716: {region: 0x52, script: 0x57, flags: 0x0},
+ 717: {region: 0x99, script: 0x21, flags: 0x0},
+ 718: {region: 0x99, script: 0x21, flags: 0x0},
+ 719: {region: 0x95, script: 0x57, flags: 0x0},
+ 720: {region: 0x23, script: 0x3, flags: 0x1},
+ 721: {region: 0xa4, script: 0x57, flags: 0x0},
+ 722: {region: 0x165, script: 0x57, flags: 0x0},
+ 723: {region: 0xcf, script: 0x57, flags: 0x0},
+ 724: {region: 0x165, script: 0x57, flags: 0x0},
+ 725: {region: 0x165, script: 0x57, flags: 0x0},
+ 726: {region: 0x165, script: 0x57, flags: 0x0},
+ 727: {region: 0x165, script: 0x57, flags: 0x0},
+ 728: {region: 0x165, script: 0x57, flags: 0x0},
+ 729: {region: 0x165, script: 0x57, flags: 0x0},
+ 730: {region: 0x165, script: 0x57, flags: 0x0},
+ 731: {region: 0x165, script: 0x57, flags: 0x0},
+ 732: {region: 0x165, script: 0x57, flags: 0x0},
+ 733: {region: 0x165, script: 0x57, flags: 0x0},
+ 734: {region: 0x165, script: 0x57, flags: 0x0},
+ 735: {region: 0x165, script: 0x5, flags: 0x0},
+ 736: {region: 0x106, script: 0x1f, flags: 0x0},
+ 737: {region: 0xe7, script: 0x57, flags: 0x0},
+ 738: {region: 0x165, script: 0x57, flags: 0x0},
+ 739: {region: 0x95, script: 0x57, flags: 0x0},
+ 740: {region: 0x165, script: 0x29, flags: 0x0},
+ 741: {region: 0x165, script: 0x57, flags: 0x0},
+ 742: {region: 0x165, script: 0x57, flags: 0x0},
+ 743: {region: 0x165, script: 0x57, flags: 0x0},
+ 744: {region: 0x112, script: 0x57, flags: 0x0},
+ 745: {region: 0xa4, script: 0x57, flags: 0x0},
+ 746: {region: 0x165, script: 0x57, flags: 0x0},
+ 747: {region: 0x165, script: 0x57, flags: 0x0},
+ 748: {region: 0x123, script: 0x5, flags: 0x0},
+ 749: {region: 0xcc, script: 0x57, flags: 0x0},
+ 750: {region: 0x165, script: 0x57, flags: 0x0},
+ 751: {region: 0x165, script: 0x57, flags: 0x0},
+ 752: {region: 0x165, script: 0x57, flags: 0x0},
+ 753: {region: 0xbf, script: 0x57, flags: 0x0},
+ 754: {region: 0xd1, script: 0x57, flags: 0x0},
+ 755: {region: 0x165, script: 0x57, flags: 0x0},
+ 756: {region: 0x52, script: 0x57, flags: 0x0},
+ 757: {region: 0xdb, script: 0x21, flags: 0x0},
+ 758: {region: 0x12f, script: 0x57, flags: 0x0},
+ 759: {region: 0xc0, script: 0x57, flags: 0x0},
+ 760: {region: 0x165, script: 0x57, flags: 0x0},
+ 761: {region: 0x165, script: 0x57, flags: 0x0},
+ 762: {region: 0xe0, script: 0x57, flags: 0x0},
+ 763: {region: 0x165, script: 0x57, flags: 0x0},
+ 764: {region: 0x95, script: 0x57, flags: 0x0},
+ 765: {region: 0x9b, script: 0x3a, flags: 0x0},
+ 766: {region: 0x165, script: 0x57, flags: 0x0},
+ 767: {region: 0xc2, script: 0x1f, flags: 0x0},
+ 768: {region: 0x165, script: 0x5, flags: 0x0},
+ 769: {region: 0x165, script: 0x57, flags: 0x0},
+ 770: {region: 0x165, script: 0x57, flags: 0x0},
+ 771: {region: 0x165, script: 0x57, flags: 0x0},
+ 772: {region: 0x99, script: 0x6b, flags: 0x0},
+ 773: {region: 0x165, script: 0x57, flags: 0x0},
+ 774: {region: 0x165, script: 0x57, flags: 0x0},
+ 775: {region: 0x10b, script: 0x57, flags: 0x0},
+ 776: {region: 0x165, script: 0x57, flags: 0x0},
+ 777: {region: 0x165, script: 0x57, flags: 0x0},
+ 778: {region: 0x165, script: 0x57, flags: 0x0},
+ 779: {region: 0x26, script: 0x3, flags: 0x1},
+ 780: {region: 0x165, script: 0x57, flags: 0x0},
+ 781: {region: 0x165, script: 0x57, flags: 0x0},
+ 782: {region: 0x99, script: 0xe, flags: 0x0},
+ 783: {region: 0xc4, script: 0x72, flags: 0x0},
+ 785: {region: 0x165, script: 0x57, flags: 0x0},
+ 786: {region: 0x49, script: 0x57, flags: 0x0},
+ 787: {region: 0x49, script: 0x57, flags: 0x0},
+ 788: {region: 0x37, script: 0x57, flags: 0x0},
+ 789: {region: 0x165, script: 0x57, flags: 0x0},
+ 790: {region: 0x165, script: 0x57, flags: 0x0},
+ 791: {region: 0x165, script: 0x57, flags: 0x0},
+ 792: {region: 0x165, script: 0x57, flags: 0x0},
+ 793: {region: 0x165, script: 0x57, flags: 0x0},
+ 794: {region: 0x165, script: 0x57, flags: 0x0},
+ 795: {region: 0x99, script: 0x21, flags: 0x0},
+ 796: {region: 0xdb, script: 0x21, flags: 0x0},
+ 797: {region: 0x106, script: 0x1f, flags: 0x0},
+ 798: {region: 0x35, script: 0x6f, flags: 0x0},
+ 799: {region: 0x29, script: 0x3, flags: 0x1},
+ 800: {region: 0xcb, script: 0x57, flags: 0x0},
+ 801: {region: 0x165, script: 0x57, flags: 0x0},
+ 802: {region: 0x165, script: 0x57, flags: 0x0},
+ 803: {region: 0x165, script: 0x57, flags: 0x0},
+ 804: {region: 0x99, script: 0x21, flags: 0x0},
+ 805: {region: 0x52, script: 0x57, flags: 0x0},
+ 807: {region: 0x165, script: 0x57, flags: 0x0},
+ 808: {region: 0x135, script: 0x57, flags: 0x0},
+ 809: {region: 0x165, script: 0x57, flags: 0x0},
+ 810: {region: 0x165, script: 0x57, flags: 0x0},
+ 811: {region: 0xe8, script: 0x5, flags: 0x0},
+ 812: {region: 0xc3, script: 0x57, flags: 0x0},
+ 813: {region: 0x99, script: 0x21, flags: 0x0},
+ 814: {region: 0x95, script: 0x57, flags: 0x0},
+ 815: {region: 0x164, script: 0x57, flags: 0x0},
+ 816: {region: 0x165, script: 0x57, flags: 0x0},
+ 817: {region: 0xc4, script: 0x72, flags: 0x0},
+ 818: {region: 0x165, script: 0x57, flags: 0x0},
+ 819: {region: 0x165, script: 0x29, flags: 0x0},
+ 820: {region: 0x106, script: 0x1f, flags: 0x0},
+ 821: {region: 0x165, script: 0x57, flags: 0x0},
+ 822: {region: 0x131, script: 0x57, flags: 0x0},
+ 823: {region: 0x9c, script: 0x63, flags: 0x0},
+ 824: {region: 0x165, script: 0x57, flags: 0x0},
+ 825: {region: 0x165, script: 0x57, flags: 0x0},
+ 826: {region: 0x9c, script: 0x5, flags: 0x0},
+ 827: {region: 0x165, script: 0x57, flags: 0x0},
+ 828: {region: 0x165, script: 0x57, flags: 0x0},
+ 829: {region: 0x165, script: 0x57, flags: 0x0},
+ 830: {region: 0xdd, script: 0x57, flags: 0x0},
+ 831: {region: 0x165, script: 0x57, flags: 0x0},
+ 832: {region: 0x165, script: 0x57, flags: 0x0},
+ 834: {region: 0x165, script: 0x57, flags: 0x0},
+ 835: {region: 0x53, script: 0x38, flags: 0x0},
+ 836: {region: 0x9e, script: 0x57, flags: 0x0},
+ 837: {region: 0xd2, script: 0x57, flags: 0x0},
+ 838: {region: 0x165, script: 0x57, flags: 0x0},
+ 839: {region: 0xda, script: 0x57, flags: 0x0},
+ 840: {region: 0x165, script: 0x57, flags: 0x0},
+ 841: {region: 0x165, script: 0x57, flags: 0x0},
+ 842: {region: 0x165, script: 0x57, flags: 0x0},
+ 843: {region: 0xcf, script: 0x57, flags: 0x0},
+ 844: {region: 0x165, script: 0x57, flags: 0x0},
+ 845: {region: 0x165, script: 0x57, flags: 0x0},
+ 846: {region: 0x164, script: 0x57, flags: 0x0},
+ 847: {region: 0xd1, script: 0x57, flags: 0x0},
+ 848: {region: 0x60, script: 0x57, flags: 0x0},
+ 849: {region: 0xdb, script: 0x21, flags: 0x0},
+ 850: {region: 0x165, script: 0x57, flags: 0x0},
+ 851: {region: 0xdb, script: 0x21, flags: 0x0},
+ 852: {region: 0x165, script: 0x57, flags: 0x0},
+ 853: {region: 0x165, script: 0x57, flags: 0x0},
+ 854: {region: 0xd2, script: 0x57, flags: 0x0},
+ 855: {region: 0x165, script: 0x57, flags: 0x0},
+ 856: {region: 0x165, script: 0x57, flags: 0x0},
+ 857: {region: 0xd1, script: 0x57, flags: 0x0},
+ 858: {region: 0x165, script: 0x57, flags: 0x0},
+ 859: {region: 0xcf, script: 0x57, flags: 0x0},
+ 860: {region: 0xcf, script: 0x57, flags: 0x0},
+ 861: {region: 0x165, script: 0x57, flags: 0x0},
+ 862: {region: 0x165, script: 0x57, flags: 0x0},
+ 863: {region: 0x95, script: 0x57, flags: 0x0},
+ 864: {region: 0x165, script: 0x57, flags: 0x0},
+ 865: {region: 0xdf, script: 0x57, flags: 0x0},
+ 866: {region: 0x165, script: 0x57, flags: 0x0},
+ 867: {region: 0x165, script: 0x57, flags: 0x0},
+ 868: {region: 0x99, script: 0x57, flags: 0x0},
+ 869: {region: 0x165, script: 0x57, flags: 0x0},
+ 870: {region: 0x165, script: 0x57, flags: 0x0},
+ 871: {region: 0xd9, script: 0x57, flags: 0x0},
+ 872: {region: 0x52, script: 0x57, flags: 0x0},
+ 873: {region: 0x165, script: 0x57, flags: 0x0},
+ 874: {region: 0xda, script: 0x57, flags: 0x0},
+ 875: {region: 0x165, script: 0x57, flags: 0x0},
+ 876: {region: 0x52, script: 0x57, flags: 0x0},
+ 877: {region: 0x165, script: 0x57, flags: 0x0},
+ 878: {region: 0x165, script: 0x57, flags: 0x0},
+ 879: {region: 0xda, script: 0x57, flags: 0x0},
+ 880: {region: 0x123, script: 0x53, flags: 0x0},
+ 881: {region: 0x99, script: 0x21, flags: 0x0},
+ 882: {region: 0x10c, script: 0xbf, flags: 0x0},
+ 883: {region: 0x165, script: 0x57, flags: 0x0},
+ 884: {region: 0x165, script: 0x57, flags: 0x0},
+ 885: {region: 0x84, script: 0x78, flags: 0x0},
+ 886: {region: 0x161, script: 0x57, flags: 0x0},
+ 887: {region: 0x165, script: 0x57, flags: 0x0},
+ 888: {region: 0x49, script: 0x17, flags: 0x0},
+ 889: {region: 0x165, script: 0x57, flags: 0x0},
+ 890: {region: 0x161, script: 0x57, flags: 0x0},
+ 891: {region: 0x165, script: 0x57, flags: 0x0},
+ 892: {region: 0x165, script: 0x57, flags: 0x0},
+ 893: {region: 0x165, script: 0x57, flags: 0x0},
+ 894: {region: 0x165, script: 0x57, flags: 0x0},
+ 895: {region: 0x165, script: 0x57, flags: 0x0},
+ 896: {region: 0x117, script: 0x57, flags: 0x0},
+ 897: {region: 0x165, script: 0x57, flags: 0x0},
+ 898: {region: 0x165, script: 0x57, flags: 0x0},
+ 899: {region: 0x135, script: 0x57, flags: 0x0},
+ 900: {region: 0x165, script: 0x57, flags: 0x0},
+ 901: {region: 0x53, script: 0x57, flags: 0x0},
+ 902: {region: 0x165, script: 0x57, flags: 0x0},
+ 903: {region: 0xce, script: 0x57, flags: 0x0},
+ 904: {region: 0x12f, script: 0x57, flags: 0x0},
+ 905: {region: 0x131, script: 0x57, flags: 0x0},
+ 906: {region: 0x80, script: 0x57, flags: 0x0},
+ 907: {region: 0x78, script: 0x57, flags: 0x0},
+ 908: {region: 0x165, script: 0x57, flags: 0x0},
+ 910: {region: 0x165, script: 0x57, flags: 0x0},
+ 911: {region: 0x165, script: 0x57, flags: 0x0},
+ 912: {region: 0x6f, script: 0x57, flags: 0x0},
+ 913: {region: 0x165, script: 0x57, flags: 0x0},
+ 914: {region: 0x165, script: 0x57, flags: 0x0},
+ 915: {region: 0x165, script: 0x57, flags: 0x0},
+ 916: {region: 0x165, script: 0x57, flags: 0x0},
+ 917: {region: 0x99, script: 0x7d, flags: 0x0},
+ 918: {region: 0x165, script: 0x57, flags: 0x0},
+ 919: {region: 0x165, script: 0x5, flags: 0x0},
+ 920: {region: 0x7d, script: 0x1f, flags: 0x0},
+ 921: {region: 0x135, script: 0x7e, flags: 0x0},
+ 922: {region: 0x165, script: 0x5, flags: 0x0},
+ 923: {region: 0xc5, script: 0x7c, flags: 0x0},
+ 924: {region: 0x165, script: 0x57, flags: 0x0},
+ 925: {region: 0x2c, script: 0x3, flags: 0x1},
+ 926: {region: 0xe7, script: 0x57, flags: 0x0},
+ 927: {region: 0x2f, script: 0x2, flags: 0x1},
+ 928: {region: 0xe7, script: 0x57, flags: 0x0},
+ 929: {region: 0x30, script: 0x57, flags: 0x0},
+ 930: {region: 0xf0, script: 0x57, flags: 0x0},
+ 931: {region: 0x165, script: 0x57, flags: 0x0},
+ 932: {region: 0x78, script: 0x57, flags: 0x0},
+ 933: {region: 0xd6, script: 0x57, flags: 0x0},
+ 934: {region: 0x135, script: 0x57, flags: 0x0},
+ 935: {region: 0x49, script: 0x57, flags: 0x0},
+ 936: {region: 0x165, script: 0x57, flags: 0x0},
+ 937: {region: 0x9c, script: 0xe8, flags: 0x0},
+ 938: {region: 0x165, script: 0x57, flags: 0x0},
+ 939: {region: 0x60, script: 0x57, flags: 0x0},
+ 940: {region: 0x165, script: 0x5, flags: 0x0},
+ 941: {region: 0xb0, script: 0x87, flags: 0x0},
+ 943: {region: 0x165, script: 0x57, flags: 0x0},
+ 944: {region: 0x165, script: 0x57, flags: 0x0},
+ 945: {region: 0x99, script: 0x12, flags: 0x0},
+ 946: {region: 0xa4, script: 0x57, flags: 0x0},
+ 947: {region: 0xe9, script: 0x57, flags: 0x0},
+ 948: {region: 0x165, script: 0x57, flags: 0x0},
+ 949: {region: 0x9e, script: 0x57, flags: 0x0},
+ 950: {region: 0x165, script: 0x57, flags: 0x0},
+ 951: {region: 0x165, script: 0x57, flags: 0x0},
+ 952: {region: 0x87, script: 0x31, flags: 0x0},
+ 953: {region: 0x75, script: 0x57, flags: 0x0},
+ 954: {region: 0x165, script: 0x57, flags: 0x0},
+ 955: {region: 0xe8, script: 0x4a, flags: 0x0},
+ 956: {region: 0x9c, script: 0x5, flags: 0x0},
+ 957: {region: 0x1, script: 0x57, flags: 0x0},
+ 958: {region: 0x24, script: 0x5, flags: 0x0},
+ 959: {region: 0x165, script: 0x57, flags: 0x0},
+ 960: {region: 0x41, script: 0x57, flags: 0x0},
+ 961: {region: 0x165, script: 0x57, flags: 0x0},
+ 962: {region: 0x7a, script: 0x57, flags: 0x0},
+ 963: {region: 0x165, script: 0x57, flags: 0x0},
+ 964: {region: 0xe4, script: 0x57, flags: 0x0},
+ 965: {region: 0x89, script: 0x57, flags: 0x0},
+ 966: {region: 0x69, script: 0x57, flags: 0x0},
+ 967: {region: 0x165, script: 0x57, flags: 0x0},
+ 968: {region: 0x99, script: 0x21, flags: 0x0},
+ 969: {region: 0x165, script: 0x57, flags: 0x0},
+ 970: {region: 0x102, script: 0x57, flags: 0x0},
+ 971: {region: 0x95, script: 0x57, flags: 0x0},
+ 972: {region: 0x165, script: 0x57, flags: 0x0},
+ 973: {region: 0x165, script: 0x57, flags: 0x0},
+ 974: {region: 0x9e, script: 0x57, flags: 0x0},
+ 975: {region: 0x165, script: 0x5, flags: 0x0},
+ 976: {region: 0x99, script: 0x57, flags: 0x0},
+ 977: {region: 0x31, script: 0x2, flags: 0x1},
+ 978: {region: 0xdb, script: 0x21, flags: 0x0},
+ 979: {region: 0x35, script: 0xe, flags: 0x0},
+ 980: {region: 0x4e, script: 0x57, flags: 0x0},
+ 981: {region: 0x72, script: 0x57, flags: 0x0},
+ 982: {region: 0x4e, script: 0x57, flags: 0x0},
+ 983: {region: 0x9c, script: 0x5, flags: 0x0},
+ 984: {region: 0x10c, script: 0x57, flags: 0x0},
+ 985: {region: 0x3a, script: 0x57, flags: 0x0},
+ 986: {region: 0x165, script: 0x57, flags: 0x0},
+ 987: {region: 0xd1, script: 0x57, flags: 0x0},
+ 988: {region: 0x104, script: 0x57, flags: 0x0},
+ 989: {region: 0x95, script: 0x57, flags: 0x0},
+ 990: {region: 0x12f, script: 0x57, flags: 0x0},
+ 991: {region: 0x165, script: 0x57, flags: 0x0},
+ 992: {region: 0x165, script: 0x57, flags: 0x0},
+ 993: {region: 0x73, script: 0x57, flags: 0x0},
+ 994: {region: 0x106, script: 0x1f, flags: 0x0},
+ 995: {region: 0x130, script: 0x1f, flags: 0x0},
+ 996: {region: 0x109, script: 0x57, flags: 0x0},
+ 997: {region: 0x107, script: 0x57, flags: 0x0},
+ 998: {region: 0x12f, script: 0x57, flags: 0x0},
+ 999: {region: 0x165, script: 0x57, flags: 0x0},
+ 1000: {region: 0xa2, script: 0x49, flags: 0x0},
+ 1001: {region: 0x99, script: 0x21, flags: 0x0},
+ 1002: {region: 0x80, script: 0x57, flags: 0x0},
+ 1003: {region: 0x106, script: 0x1f, flags: 0x0},
+ 1004: {region: 0xa4, script: 0x57, flags: 0x0},
+ 1005: {region: 0x95, script: 0x57, flags: 0x0},
+ 1006: {region: 0x99, script: 0x57, flags: 0x0},
+ 1007: {region: 0x114, script: 0x57, flags: 0x0},
+ 1008: {region: 0x99, script: 0xc3, flags: 0x0},
+ 1009: {region: 0x165, script: 0x57, flags: 0x0},
+ 1010: {region: 0x165, script: 0x57, flags: 0x0},
+ 1011: {region: 0x12f, script: 0x57, flags: 0x0},
+ 1012: {region: 0x9e, script: 0x57, flags: 0x0},
+ 1013: {region: 0x99, script: 0x21, flags: 0x0},
+ 1014: {region: 0x165, script: 0x5, flags: 0x0},
+ 1015: {region: 0x9e, script: 0x57, flags: 0x0},
+ 1016: {region: 0x7b, script: 0x57, flags: 0x0},
+ 1017: {region: 0x49, script: 0x57, flags: 0x0},
+ 1018: {region: 0x33, script: 0x4, flags: 0x1},
+ 1019: {region: 0x9e, script: 0x57, flags: 0x0},
+ 1020: {region: 0x9c, script: 0x5, flags: 0x0},
+ 1021: {region: 0xda, script: 0x57, flags: 0x0},
+ 1022: {region: 0x4f, script: 0x57, flags: 0x0},
+ 1023: {region: 0xd1, script: 0x57, flags: 0x0},
+ 1024: {region: 0xcf, script: 0x57, flags: 0x0},
+ 1025: {region: 0xc3, script: 0x57, flags: 0x0},
+ 1026: {region: 0x4c, script: 0x57, flags: 0x0},
+ 1027: {region: 0x96, script: 0x7a, flags: 0x0},
+ 1028: {region: 0xb6, script: 0x57, flags: 0x0},
+ 1029: {region: 0x165, script: 0x29, flags: 0x0},
+ 1030: {region: 0x165, script: 0x57, flags: 0x0},
+ 1032: {region: 0xba, script: 0xdc, flags: 0x0},
+ 1033: {region: 0x165, script: 0x57, flags: 0x0},
+ 1034: {region: 0xc4, script: 0x72, flags: 0x0},
+ 1035: {region: 0x165, script: 0x5, flags: 0x0},
+ 1036: {region: 0xb3, script: 0xca, flags: 0x0},
+ 1037: {region: 0x6f, script: 0x57, flags: 0x0},
+ 1038: {region: 0x165, script: 0x57, flags: 0x0},
+ 1039: {region: 0x165, script: 0x57, flags: 0x0},
+ 1040: {region: 0x165, script: 0x57, flags: 0x0},
+ 1041: {region: 0x165, script: 0x57, flags: 0x0},
+ 1042: {region: 0x111, script: 0x57, flags: 0x0},
+ 1043: {region: 0x165, script: 0x57, flags: 0x0},
+ 1044: {region: 0xe8, script: 0x5, flags: 0x0},
+ 1045: {region: 0x165, script: 0x57, flags: 0x0},
+ 1046: {region: 0x10f, script: 0x57, flags: 0x0},
+ 1047: {region: 0x165, script: 0x57, flags: 0x0},
+ 1048: {region: 0xe9, script: 0x57, flags: 0x0},
+ 1049: {region: 0x165, script: 0x57, flags: 0x0},
+ 1050: {region: 0x95, script: 0x57, flags: 0x0},
+ 1051: {region: 0x142, script: 0x57, flags: 0x0},
+ 1052: {region: 0x10c, script: 0x57, flags: 0x0},
+ 1054: {region: 0x10c, script: 0x57, flags: 0x0},
+ 1055: {region: 0x72, script: 0x57, flags: 0x0},
+ 1056: {region: 0x97, script: 0xc0, flags: 0x0},
+ 1057: {region: 0x165, script: 0x57, flags: 0x0},
+ 1058: {region: 0x72, script: 0x57, flags: 0x0},
+ 1059: {region: 0x164, script: 0x57, flags: 0x0},
+ 1060: {region: 0x165, script: 0x57, flags: 0x0},
+ 1061: {region: 0xc3, script: 0x57, flags: 0x0},
+ 1062: {region: 0x165, script: 0x57, flags: 0x0},
+ 1063: {region: 0x165, script: 0x57, flags: 0x0},
+ 1064: {region: 0x165, script: 0x57, flags: 0x0},
+ 1065: {region: 0x115, script: 0x57, flags: 0x0},
+ 1066: {region: 0x165, script: 0x57, flags: 0x0},
+ 1067: {region: 0x165, script: 0x57, flags: 0x0},
+ 1068: {region: 0x123, script: 0xdf, flags: 0x0},
+ 1069: {region: 0x165, script: 0x57, flags: 0x0},
+ 1070: {region: 0x165, script: 0x57, flags: 0x0},
+ 1071: {region: 0x165, script: 0x57, flags: 0x0},
+ 1072: {region: 0x165, script: 0x57, flags: 0x0},
+ 1073: {region: 0x27, script: 0x57, flags: 0x0},
+ 1074: {region: 0x37, script: 0x5, flags: 0x1},
+ 1075: {region: 0x99, script: 0xcb, flags: 0x0},
+ 1076: {region: 0x116, script: 0x57, flags: 0x0},
+ 1077: {region: 0x114, script: 0x57, flags: 0x0},
+ 1078: {region: 0x99, script: 0x21, flags: 0x0},
+ 1079: {region: 0x161, script: 0x57, flags: 0x0},
+ 1080: {region: 0x165, script: 0x57, flags: 0x0},
+ 1081: {region: 0x165, script: 0x57, flags: 0x0},
+ 1082: {region: 0x6d, script: 0x57, flags: 0x0},
+ 1083: {region: 0x161, script: 0x57, flags: 0x0},
+ 1084: {region: 0x165, script: 0x57, flags: 0x0},
+ 1085: {region: 0x60, script: 0x57, flags: 0x0},
+ 1086: {region: 0x95, script: 0x57, flags: 0x0},
+ 1087: {region: 0x165, script: 0x57, flags: 0x0},
+ 1088: {region: 0x165, script: 0x57, flags: 0x0},
+ 1089: {region: 0x12f, script: 0x57, flags: 0x0},
+ 1090: {region: 0x165, script: 0x57, flags: 0x0},
+ 1091: {region: 0x84, script: 0x57, flags: 0x0},
+ 1092: {region: 0x10c, script: 0x57, flags: 0x0},
+ 1093: {region: 0x12f, script: 0x57, flags: 0x0},
+ 1094: {region: 0x15f, script: 0x5, flags: 0x0},
+ 1095: {region: 0x4b, script: 0x57, flags: 0x0},
+ 1096: {region: 0x60, script: 0x57, flags: 0x0},
+ 1097: {region: 0x165, script: 0x57, flags: 0x0},
+ 1098: {region: 0x99, script: 0x21, flags: 0x0},
+ 1099: {region: 0x95, script: 0x57, flags: 0x0},
+ 1100: {region: 0x165, script: 0x57, flags: 0x0},
+ 1101: {region: 0x35, script: 0xe, flags: 0x0},
+ 1102: {region: 0x9b, script: 0xcf, flags: 0x0},
+ 1103: {region: 0xe9, script: 0x57, flags: 0x0},
+ 1104: {region: 0x99, script: 0xd7, flags: 0x0},
+ 1105: {region: 0xdb, script: 0x21, flags: 0x0},
+ 1106: {region: 0x165, script: 0x57, flags: 0x0},
+ 1107: {region: 0x165, script: 0x57, flags: 0x0},
+ 1108: {region: 0x165, script: 0x57, flags: 0x0},
+ 1109: {region: 0x165, script: 0x57, flags: 0x0},
+ 1110: {region: 0x165, script: 0x57, flags: 0x0},
+ 1111: {region: 0x165, script: 0x57, flags: 0x0},
+ 1112: {region: 0x165, script: 0x57, flags: 0x0},
+ 1113: {region: 0x165, script: 0x57, flags: 0x0},
+ 1114: {region: 0xe7, script: 0x57, flags: 0x0},
+ 1115: {region: 0x165, script: 0x57, flags: 0x0},
+ 1116: {region: 0x165, script: 0x57, flags: 0x0},
+ 1117: {region: 0x99, script: 0x4f, flags: 0x0},
+ 1118: {region: 0x53, script: 0xd5, flags: 0x0},
+ 1119: {region: 0xdb, script: 0x21, flags: 0x0},
+ 1120: {region: 0xdb, script: 0x21, flags: 0x0},
+ 1121: {region: 0x99, script: 0xda, flags: 0x0},
+ 1122: {region: 0x165, script: 0x57, flags: 0x0},
+ 1123: {region: 0x112, script: 0x57, flags: 0x0},
+ 1124: {region: 0x131, script: 0x57, flags: 0x0},
+ 1125: {region: 0x126, script: 0x57, flags: 0x0},
+ 1126: {region: 0x165, script: 0x57, flags: 0x0},
+ 1127: {region: 0x3c, script: 0x3, flags: 0x1},
+ 1128: {region: 0x165, script: 0x57, flags: 0x0},
+ 1129: {region: 0x165, script: 0x57, flags: 0x0},
+ 1130: {region: 0x165, script: 0x57, flags: 0x0},
+ 1131: {region: 0x123, script: 0xdf, flags: 0x0},
+ 1132: {region: 0xdb, script: 0x21, flags: 0x0},
+ 1133: {region: 0xdb, script: 0x21, flags: 0x0},
+ 1134: {region: 0xdb, script: 0x21, flags: 0x0},
+ 1135: {region: 0x6f, script: 0x29, flags: 0x0},
+ 1136: {region: 0x165, script: 0x57, flags: 0x0},
+ 1137: {region: 0x6d, script: 0x29, flags: 0x0},
+ 1138: {region: 0x165, script: 0x57, flags: 0x0},
+ 1139: {region: 0x165, script: 0x57, flags: 0x0},
+ 1140: {region: 0x165, script: 0x57, flags: 0x0},
+ 1141: {region: 0xd6, script: 0x57, flags: 0x0},
+ 1142: {region: 0x127, script: 0x57, flags: 0x0},
+ 1143: {region: 0x125, script: 0x57, flags: 0x0},
+ 1144: {region: 0x32, script: 0x57, flags: 0x0},
+ 1145: {region: 0xdb, script: 0x21, flags: 0x0},
+ 1146: {region: 0xe7, script: 0x57, flags: 0x0},
+ 1147: {region: 0x165, script: 0x57, flags: 0x0},
+ 1148: {region: 0x165, script: 0x57, flags: 0x0},
+ 1149: {region: 0x32, script: 0x57, flags: 0x0},
+ 1150: {region: 0xd4, script: 0x57, flags: 0x0},
+ 1151: {region: 0x165, script: 0x57, flags: 0x0},
+ 1152: {region: 0x161, script: 0x57, flags: 0x0},
+ 1153: {region: 0x165, script: 0x57, flags: 0x0},
+ 1154: {region: 0x129, script: 0x57, flags: 0x0},
+ 1155: {region: 0x165, script: 0x57, flags: 0x0},
+ 1156: {region: 0xce, script: 0x57, flags: 0x0},
+ 1157: {region: 0x165, script: 0x57, flags: 0x0},
+ 1158: {region: 0xe6, script: 0x57, flags: 0x0},
+ 1159: {region: 0x165, script: 0x57, flags: 0x0},
+ 1160: {region: 0x165, script: 0x57, flags: 0x0},
+ 1161: {region: 0x165, script: 0x57, flags: 0x0},
+ 1162: {region: 0x12b, script: 0x57, flags: 0x0},
+ 1163: {region: 0x12b, script: 0x57, flags: 0x0},
+ 1164: {region: 0x12e, script: 0x57, flags: 0x0},
+ 1165: {region: 0x165, script: 0x5, flags: 0x0},
+ 1166: {region: 0x161, script: 0x57, flags: 0x0},
+ 1167: {region: 0x87, script: 0x31, flags: 0x0},
+ 1168: {region: 0xdb, script: 0x21, flags: 0x0},
+ 1169: {region: 0xe7, script: 0x57, flags: 0x0},
+ 1170: {region: 0x43, script: 0xe0, flags: 0x0},
+ 1171: {region: 0x165, script: 0x57, flags: 0x0},
+ 1172: {region: 0x106, script: 0x1f, flags: 0x0},
+ 1173: {region: 0x165, script: 0x57, flags: 0x0},
+ 1174: {region: 0x165, script: 0x57, flags: 0x0},
+ 1175: {region: 0x131, script: 0x57, flags: 0x0},
+ 1176: {region: 0x165, script: 0x57, flags: 0x0},
+ 1177: {region: 0x123, script: 0xdf, flags: 0x0},
+ 1178: {region: 0x32, script: 0x57, flags: 0x0},
+ 1179: {region: 0x165, script: 0x57, flags: 0x0},
+ 1180: {region: 0x165, script: 0x57, flags: 0x0},
+ 1181: {region: 0xce, script: 0x57, flags: 0x0},
+ 1182: {region: 0x165, script: 0x57, flags: 0x0},
+ 1183: {region: 0x165, script: 0x57, flags: 0x0},
+ 1184: {region: 0x12d, script: 0x57, flags: 0x0},
+ 1185: {region: 0x165, script: 0x57, flags: 0x0},
+ 1187: {region: 0x165, script: 0x57, flags: 0x0},
+ 1188: {region: 0xd4, script: 0x57, flags: 0x0},
+ 1189: {region: 0x53, script: 0xd8, flags: 0x0},
+ 1190: {region: 0xe5, script: 0x57, flags: 0x0},
+ 1191: {region: 0x165, script: 0x57, flags: 0x0},
+ 1192: {region: 0x106, script: 0x1f, flags: 0x0},
+ 1193: {region: 0xba, script: 0x57, flags: 0x0},
+ 1194: {region: 0x165, script: 0x57, flags: 0x0},
+ 1195: {region: 0x106, script: 0x1f, flags: 0x0},
+ 1196: {region: 0x3f, script: 0x4, flags: 0x1},
+ 1197: {region: 0x11c, script: 0xe2, flags: 0x0},
+ 1198: {region: 0x130, script: 0x1f, flags: 0x0},
+ 1199: {region: 0x75, script: 0x57, flags: 0x0},
+ 1200: {region: 0x2a, script: 0x57, 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: 0x57, flags: 0x0},
+ 1206: {region: 0x165, script: 0x57, flags: 0x0},
+ 1207: {region: 0x165, script: 0x57, flags: 0x0},
+ 1208: {region: 0x165, script: 0x57, flags: 0x0},
+ 1209: {region: 0x165, script: 0x57, flags: 0x0},
+ 1210: {region: 0x165, script: 0x57, flags: 0x0},
+ 1211: {region: 0x165, script: 0x57, flags: 0x0},
+ 1212: {region: 0x46, script: 0x4, flags: 0x1},
+ 1213: {region: 0x165, script: 0x57, flags: 0x0},
+ 1214: {region: 0xb4, script: 0xe3, flags: 0x0},
+ 1215: {region: 0x165, script: 0x57, flags: 0x0},
+ 1216: {region: 0x161, script: 0x57, flags: 0x0},
+ 1217: {region: 0x9e, script: 0x57, flags: 0x0},
+ 1218: {region: 0x106, script: 0x57, flags: 0x0},
+ 1219: {region: 0x13e, script: 0x57, flags: 0x0},
+ 1220: {region: 0x11b, script: 0x57, flags: 0x0},
+ 1221: {region: 0x165, script: 0x57, flags: 0x0},
+ 1222: {region: 0x36, script: 0x57, flags: 0x0},
+ 1223: {region: 0x60, script: 0x57, flags: 0x0},
+ 1224: {region: 0xd1, script: 0x57, flags: 0x0},
+ 1225: {region: 0x1, script: 0x57, flags: 0x0},
+ 1226: {region: 0x106, script: 0x57, flags: 0x0},
+ 1227: {region: 0x6a, script: 0x57, flags: 0x0},
+ 1228: {region: 0x12f, script: 0x57, flags: 0x0},
+ 1229: {region: 0x165, script: 0x57, flags: 0x0},
+ 1230: {region: 0x36, script: 0x57, flags: 0x0},
+ 1231: {region: 0x4e, script: 0x57, flags: 0x0},
+ 1232: {region: 0x165, script: 0x57, flags: 0x0},
+ 1233: {region: 0x6f, script: 0x29, flags: 0x0},
+ 1234: {region: 0x165, script: 0x57, flags: 0x0},
+ 1235: {region: 0xe7, script: 0x57, flags: 0x0},
+ 1236: {region: 0x2f, script: 0x57, flags: 0x0},
+ 1237: {region: 0x99, script: 0xda, flags: 0x0},
+ 1238: {region: 0x99, script: 0x21, flags: 0x0},
+ 1239: {region: 0x165, script: 0x57, flags: 0x0},
+ 1240: {region: 0x165, script: 0x57, flags: 0x0},
+ 1241: {region: 0x165, script: 0x57, flags: 0x0},
+ 1242: {region: 0x165, script: 0x57, flags: 0x0},
+ 1243: {region: 0x165, script: 0x57, flags: 0x0},
+ 1244: {region: 0x165, script: 0x57, flags: 0x0},
+ 1245: {region: 0x165, script: 0x57, flags: 0x0},
+ 1246: {region: 0x165, script: 0x57, flags: 0x0},
+ 1247: {region: 0x165, script: 0x57, flags: 0x0},
+ 1248: {region: 0x140, script: 0x57, flags: 0x0},
+ 1249: {region: 0x165, script: 0x57, flags: 0x0},
+ 1250: {region: 0x165, script: 0x57, flags: 0x0},
+ 1251: {region: 0xa8, script: 0x5, flags: 0x0},
+ 1252: {region: 0x165, script: 0x57, flags: 0x0},
+ 1253: {region: 0x114, script: 0x57, flags: 0x0},
+ 1254: {region: 0x165, script: 0x57, flags: 0x0},
+ 1255: {region: 0x165, script: 0x57, flags: 0x0},
+ 1256: {region: 0x165, script: 0x57, flags: 0x0},
+ 1257: {region: 0x165, script: 0x57, flags: 0x0},
+ 1258: {region: 0x99, script: 0x21, flags: 0x0},
+ 1259: {region: 0x53, script: 0x38, flags: 0x0},
+ 1260: {region: 0x165, script: 0x57, flags: 0x0},
+ 1261: {region: 0x165, script: 0x57, flags: 0x0},
+ 1262: {region: 0x41, script: 0x57, flags: 0x0},
+ 1263: {region: 0x165, script: 0x57, flags: 0x0},
+ 1264: {region: 0x12b, script: 0x18, flags: 0x0},
+ 1265: {region: 0x165, script: 0x57, flags: 0x0},
+ 1266: {region: 0x161, script: 0x57, flags: 0x0},
+ 1267: {region: 0x165, script: 0x57, flags: 0x0},
+ 1268: {region: 0x12b, script: 0x5f, flags: 0x0},
+ 1269: {region: 0x12b, script: 0x60, flags: 0x0},
+ 1270: {region: 0x7d, script: 0x2b, flags: 0x0},
+ 1271: {region: 0x53, script: 0x64, flags: 0x0},
+ 1272: {region: 0x10b, script: 0x69, flags: 0x0},
+ 1273: {region: 0x108, script: 0x73, flags: 0x0},
+ 1274: {region: 0x99, script: 0x21, flags: 0x0},
+ 1275: {region: 0x131, script: 0x57, flags: 0x0},
+ 1276: {region: 0x165, script: 0x57, flags: 0x0},
+ 1277: {region: 0x9c, script: 0x8a, flags: 0x0},
+ 1278: {region: 0x165, script: 0x57, flags: 0x0},
+ 1279: {region: 0x15e, script: 0xc2, flags: 0x0},
+ 1280: {region: 0x165, script: 0x57, flags: 0x0},
+ 1281: {region: 0x165, script: 0x57, flags: 0x0},
+ 1282: {region: 0xdb, script: 0x21, flags: 0x0},
+ 1283: {region: 0x165, script: 0x57, flags: 0x0},
+ 1284: {region: 0x165, script: 0x57, flags: 0x0},
+ 1285: {region: 0xd1, script: 0x57, flags: 0x0},
+ 1286: {region: 0x75, script: 0x57, flags: 0x0},
+ 1287: {region: 0x165, script: 0x57, flags: 0x0},
+ 1288: {region: 0x165, script: 0x57, flags: 0x0},
+ 1289: {region: 0x52, script: 0x57, flags: 0x0},
+ 1290: {region: 0x165, script: 0x57, flags: 0x0},
+ 1291: {region: 0x165, script: 0x57, flags: 0x0},
+ 1292: {region: 0x165, script: 0x57, flags: 0x0},
+ 1293: {region: 0x52, script: 0x57, flags: 0x0},
+ 1294: {region: 0x165, script: 0x57, flags: 0x0},
+ 1295: {region: 0x165, script: 0x57, flags: 0x0},
+ 1296: {region: 0x165, script: 0x57, flags: 0x0},
+ 1297: {region: 0x165, script: 0x57, flags: 0x0},
+ 1298: {region: 0x1, script: 0x3b, flags: 0x0},
+ 1299: {region: 0x165, script: 0x57, flags: 0x0},
+ 1300: {region: 0x165, script: 0x57, flags: 0x0},
+ 1301: {region: 0x165, script: 0x57, flags: 0x0},
+ 1302: {region: 0x165, script: 0x57, flags: 0x0},
+ 1303: {region: 0x165, script: 0x57, flags: 0x0},
+ 1304: {region: 0xd6, script: 0x57, flags: 0x0},
+ 1305: {region: 0x165, script: 0x57, flags: 0x0},
+ 1306: {region: 0x165, script: 0x57, flags: 0x0},
+ 1307: {region: 0x165, script: 0x57, flags: 0x0},
+ 1308: {region: 0x41, script: 0x57, flags: 0x0},
+ 1309: {region: 0x165, script: 0x57, flags: 0x0},
+ 1310: {region: 0xcf, script: 0x57, flags: 0x0},
+ 1311: {region: 0x4a, script: 0x3, flags: 0x1},
+ 1312: {region: 0x165, script: 0x57, flags: 0x0},
+ 1313: {region: 0x165, script: 0x57, flags: 0x0},
+ 1314: {region: 0x165, script: 0x57, flags: 0x0},
+ 1315: {region: 0x53, script: 0x57, flags: 0x0},
+ 1316: {region: 0x10b, script: 0x57, flags: 0x0},
+ 1318: {region: 0xa8, script: 0x5, flags: 0x0},
+ 1319: {region: 0xd9, script: 0x57, flags: 0x0},
+ 1320: {region: 0xba, script: 0xdc, flags: 0x0},
+ 1321: {region: 0x4d, script: 0x14, flags: 0x1},
+ 1322: {region: 0x53, script: 0x79, flags: 0x0},
+ 1323: {region: 0x165, script: 0x57, flags: 0x0},
+ 1324: {region: 0x122, script: 0x57, flags: 0x0},
+ 1325: {region: 0xd0, script: 0x57, flags: 0x0},
+ 1326: {region: 0x165, script: 0x57, flags: 0x0},
+ 1327: {region: 0x161, script: 0x57, flags: 0x0},
+ 1329: {region: 0x12b, script: 0x57, 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: 0x74, flags: 0x2},
+ 2: {region: 0x11c, script: 0x80, flags: 0x2},
+ 3: {region: 0x32, script: 0x57, flags: 0x0},
+ 4: {region: 0x9b, script: 0x5, flags: 0x4},
+ 5: {region: 0x9c, script: 0x5, flags: 0x4},
+ 6: {region: 0x106, script: 0x1f, flags: 0x4},
+ 7: {region: 0x9c, script: 0x5, flags: 0x2},
+ 8: {region: 0x106, script: 0x1f, flags: 0x0},
+ 9: {region: 0x38, script: 0x2c, flags: 0x2},
+ 10: {region: 0x135, script: 0x57, flags: 0x0},
+ 11: {region: 0x7b, script: 0xc5, flags: 0x2},
+ 12: {region: 0x114, script: 0x57, flags: 0x0},
+ 13: {region: 0x84, script: 0x1, flags: 0x2},
+ 14: {region: 0x5d, script: 0x1e, flags: 0x0},
+ 15: {region: 0x87, script: 0x5c, flags: 0x2},
+ 16: {region: 0xd6, script: 0x57, flags: 0x0},
+ 17: {region: 0x52, script: 0x5, flags: 0x4},
+ 18: {region: 0x10b, script: 0x5, flags: 0x4},
+ 19: {region: 0xae, script: 0x1f, 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: 0x57, flags: 0x0},
+ 26: {region: 0xb0, script: 0x5, flags: 0x4},
+ 27: {region: 0x9b, script: 0x5, flags: 0x2},
+ 28: {region: 0xa5, script: 0x1f, flags: 0x0},
+ 29: {region: 0x53, script: 0x5, flags: 0x4},
+ 30: {region: 0x12b, script: 0x57, flags: 0x4},
+ 31: {region: 0x53, script: 0x5, flags: 0x2},
+ 32: {region: 0x12b, script: 0x57, flags: 0x2},
+ 33: {region: 0xdb, script: 0x21, flags: 0x0},
+ 34: {region: 0x99, script: 0x5a, flags: 0x2},
+ 35: {region: 0x83, script: 0x57, flags: 0x0},
+ 36: {region: 0x84, script: 0x78, flags: 0x4},
+ 37: {region: 0x84, script: 0x78, flags: 0x2},
+ 38: {region: 0xc5, script: 0x1f, flags: 0x0},
+ 39: {region: 0x53, script: 0x6d, flags: 0x4},
+ 40: {region: 0x53, script: 0x6d, flags: 0x2},
+ 41: {region: 0xd0, script: 0x57, flags: 0x0},
+ 42: {region: 0x4a, script: 0x5, flags: 0x4},
+ 43: {region: 0x95, script: 0x5, flags: 0x4},
+ 44: {region: 0x99, script: 0x33, flags: 0x0},
+ 45: {region: 0xe8, script: 0x5, flags: 0x4},
+ 46: {region: 0xe8, script: 0x5, flags: 0x2},
+ 47: {region: 0x9c, script: 0x84, flags: 0x0},
+ 48: {region: 0x53, script: 0x85, flags: 0x2},
+ 49: {region: 0xba, script: 0xdc, flags: 0x0},
+ 50: {region: 0xd9, script: 0x57, flags: 0x4},
+ 51: {region: 0xe8, script: 0x5, flags: 0x0},
+ 52: {region: 0x99, script: 0x21, flags: 0x2},
+ 53: {region: 0x99, script: 0x4c, flags: 0x2},
+ 54: {region: 0x99, script: 0xc9, flags: 0x2},
+ 55: {region: 0x105, script: 0x1f, flags: 0x0},
+ 56: {region: 0xbd, script: 0x57, flags: 0x4},
+ 57: {region: 0x104, script: 0x57, flags: 0x4},
+ 58: {region: 0x106, script: 0x57, flags: 0x4},
+ 59: {region: 0x12b, script: 0x57, flags: 0x4},
+ 60: {region: 0x124, script: 0x1f, 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: 0x1f, flags: 0x4},
+ 65: {region: 0xc5, script: 0x1f, flags: 0x4},
+ 66: {region: 0xae, script: 0x1f, flags: 0x2},
+ 67: {region: 0x99, script: 0xe, flags: 0x0},
+ 68: {region: 0xdb, script: 0x21, flags: 0x4},
+ 69: {region: 0xdb, script: 0x21, flags: 0x2},
+ 70: {region: 0x137, script: 0x57, flags: 0x0},
+ 71: {region: 0x24, script: 0x5, flags: 0x4},
+ 72: {region: 0x53, script: 0x1f, flags: 0x4},
+ 73: {region: 0x24, script: 0x5, flags: 0x2},
+ 74: {region: 0x8d, script: 0x39, flags: 0x0},
+ 75: {region: 0x53, script: 0x38, flags: 0x4},
+ 76: {region: 0x53, script: 0x38, flags: 0x2},
+ 77: {region: 0x53, script: 0x38, flags: 0x0},
+ 78: {region: 0x2f, script: 0x39, flags: 0x4},
+ 79: {region: 0x3e, script: 0x39, flags: 0x4},
+ 80: {region: 0x7b, script: 0x39, flags: 0x4},
+ 81: {region: 0x7e, script: 0x39, flags: 0x4},
+ 82: {region: 0x8d, script: 0x39, flags: 0x4},
+ 83: {region: 0x95, script: 0x39, flags: 0x4},
+ 84: {region: 0xc6, script: 0x39, flags: 0x4},
+ 85: {region: 0xd0, script: 0x39, flags: 0x4},
+ 86: {region: 0xe2, script: 0x39, flags: 0x4},
+ 87: {region: 0xe5, script: 0x39, flags: 0x4},
+ 88: {region: 0xe7, script: 0x39, flags: 0x4},
+ 89: {region: 0x116, script: 0x39, flags: 0x4},
+ 90: {region: 0x123, script: 0x39, flags: 0x4},
+ 91: {region: 0x12e, script: 0x39, flags: 0x4},
+ 92: {region: 0x135, script: 0x39, flags: 0x4},
+ 93: {region: 0x13e, script: 0x39, flags: 0x4},
+ 94: {region: 0x12e, script: 0x11, flags: 0x2},
+ 95: {region: 0x12e, script: 0x34, flags: 0x2},
+ 96: {region: 0x12e, script: 0x39, 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: 0x57, 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: 0x57, flags: 0x0},
+ 43: {lang: 0x0, script: 0x57, flags: 0x0},
+ 44: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 45: {lang: 0x41b, script: 0x57, flags: 0x0},
+ 46: {lang: 0x10d, script: 0x57, flags: 0x0},
+ 48: {lang: 0x367, script: 0x57, flags: 0x0},
+ 49: {lang: 0x444, script: 0x57, flags: 0x0},
+ 50: {lang: 0x58, script: 0x57, flags: 0x0},
+ 51: {lang: 0x6, script: 0x2, flags: 0x1},
+ 53: {lang: 0xa5, script: 0xe, flags: 0x0},
+ 54: {lang: 0x367, script: 0x57, flags: 0x0},
+ 55: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 56: {lang: 0x7e, script: 0x1f, flags: 0x0},
+ 57: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 58: {lang: 0x3d9, script: 0x57, flags: 0x0},
+ 59: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 60: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 62: {lang: 0x31f, script: 0x57, flags: 0x0},
+ 63: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 64: {lang: 0x3a1, script: 0x57, flags: 0x0},
+ 65: {lang: 0x3c0, script: 0x57, flags: 0x0},
+ 67: {lang: 0x8, script: 0x2, flags: 0x1},
+ 69: {lang: 0x0, script: 0x57, flags: 0x0},
+ 71: {lang: 0x71, script: 0x1f, flags: 0x0},
+ 73: {lang: 0x512, script: 0x3b, flags: 0x2},
+ 74: {lang: 0x31f, script: 0x5, flags: 0x2},
+ 75: {lang: 0x445, script: 0x57, flags: 0x0},
+ 76: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 77: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 78: {lang: 0x10d, script: 0x57, flags: 0x0},
+ 79: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 81: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 82: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 83: {lang: 0xa, script: 0x4, flags: 0x1},
+ 84: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 85: {lang: 0x0, script: 0x57, flags: 0x0},
+ 86: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 89: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 90: {lang: 0x3c0, script: 0x57, flags: 0x0},
+ 91: {lang: 0x3a1, script: 0x57, flags: 0x0},
+ 93: {lang: 0xe, script: 0x2, flags: 0x1},
+ 94: {lang: 0xfa, script: 0x57, flags: 0x0},
+ 96: {lang: 0x10d, script: 0x57, flags: 0x0},
+ 98: {lang: 0x1, script: 0x57, flags: 0x0},
+ 99: {lang: 0x101, script: 0x57, flags: 0x0},
+ 101: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 103: {lang: 0x10, script: 0x2, flags: 0x1},
+ 104: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 105: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 106: {lang: 0x140, script: 0x57, flags: 0x0},
+ 107: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 108: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 109: {lang: 0x46f, script: 0x29, flags: 0x0},
+ 110: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 111: {lang: 0x12, script: 0x2, flags: 0x1},
+ 113: {lang: 0x10d, script: 0x57, flags: 0x0},
+ 114: {lang: 0x151, script: 0x57, flags: 0x0},
+ 115: {lang: 0x1c0, script: 0x21, flags: 0x2},
+ 118: {lang: 0x158, script: 0x57, flags: 0x0},
+ 120: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 122: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 123: {lang: 0x14, script: 0x2, flags: 0x1},
+ 125: {lang: 0x16, script: 0x3, flags: 0x1},
+ 126: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 128: {lang: 0x21, script: 0x57, flags: 0x0},
+ 130: {lang: 0x245, script: 0x57, flags: 0x0},
+ 132: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 133: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 134: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 135: {lang: 0x19, script: 0x2, flags: 0x1},
+ 136: {lang: 0x0, script: 0x57, flags: 0x0},
+ 137: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 139: {lang: 0x3c0, script: 0x57, flags: 0x0},
+ 141: {lang: 0x529, script: 0x39, flags: 0x0},
+ 142: {lang: 0x0, script: 0x57, flags: 0x0},
+ 143: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 144: {lang: 0x1d1, script: 0x57, flags: 0x0},
+ 145: {lang: 0x1d4, script: 0x57, flags: 0x0},
+ 146: {lang: 0x1d5, script: 0x57, flags: 0x0},
+ 148: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 149: {lang: 0x1b, script: 0x2, flags: 0x1},
+ 151: {lang: 0x1bc, script: 0x3b, 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: 0x57, flags: 0x0},
+ 158: {lang: 0x1f9, script: 0x57, flags: 0x0},
+ 161: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 162: {lang: 0x200, script: 0x46, flags: 0x0},
+ 164: {lang: 0x445, script: 0x57, flags: 0x0},
+ 165: {lang: 0x28a, script: 0x1f, flags: 0x0},
+ 166: {lang: 0x22, script: 0x3, flags: 0x1},
+ 168: {lang: 0x25, script: 0x2, flags: 0x1},
+ 170: {lang: 0x254, script: 0x50, flags: 0x0},
+ 171: {lang: 0x254, script: 0x50, flags: 0x0},
+ 172: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 174: {lang: 0x3e2, script: 0x1f, flags: 0x0},
+ 175: {lang: 0x27, script: 0x2, flags: 0x1},
+ 176: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 178: {lang: 0x10d, script: 0x57, flags: 0x0},
+ 179: {lang: 0x40c, script: 0xca, flags: 0x0},
+ 181: {lang: 0x43b, script: 0x57, flags: 0x0},
+ 182: {lang: 0x2c0, script: 0x57, flags: 0x0},
+ 183: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 184: {lang: 0x2c7, script: 0x57, flags: 0x0},
+ 185: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 186: {lang: 0x29, script: 0x2, flags: 0x1},
+ 187: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 188: {lang: 0x2b, script: 0x2, flags: 0x1},
+ 189: {lang: 0x432, script: 0x57, flags: 0x0},
+ 190: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 191: {lang: 0x2f1, script: 0x57, flags: 0x0},
+ 194: {lang: 0x2d, script: 0x2, flags: 0x1},
+ 195: {lang: 0xa0, script: 0x57, 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: 0x57, flags: 0x0},
+ 201: {lang: 0x35, script: 0x2, flags: 0x1},
+ 203: {lang: 0x320, script: 0x57, flags: 0x0},
+ 204: {lang: 0x37, script: 0x3, flags: 0x1},
+ 205: {lang: 0x128, script: 0xde, flags: 0x0},
+ 207: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 208: {lang: 0x31f, script: 0x57, flags: 0x0},
+ 209: {lang: 0x3c0, script: 0x57, flags: 0x0},
+ 210: {lang: 0x16, script: 0x57, flags: 0x0},
+ 211: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 212: {lang: 0x1b4, script: 0x57, flags: 0x0},
+ 214: {lang: 0x1b4, script: 0x5, flags: 0x2},
+ 216: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 217: {lang: 0x367, script: 0x57, flags: 0x0},
+ 218: {lang: 0x347, script: 0x57, flags: 0x0},
+ 219: {lang: 0x351, script: 0x21, flags: 0x0},
+ 225: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 226: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 228: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 229: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 230: {lang: 0x486, script: 0x57, flags: 0x0},
+ 231: {lang: 0x153, script: 0x57, flags: 0x0},
+ 232: {lang: 0x3a, script: 0x3, flags: 0x1},
+ 233: {lang: 0x3b3, script: 0x57, flags: 0x0},
+ 234: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 236: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 237: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 238: {lang: 0x3c0, script: 0x57, flags: 0x0},
+ 240: {lang: 0x3a2, script: 0x57, flags: 0x0},
+ 241: {lang: 0x194, script: 0x57, flags: 0x0},
+ 243: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 258: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 260: {lang: 0x3d, script: 0x2, flags: 0x1},
+ 261: {lang: 0x432, script: 0x1f, flags: 0x0},
+ 262: {lang: 0x3f, script: 0x2, flags: 0x1},
+ 263: {lang: 0x3e5, script: 0x57, flags: 0x0},
+ 264: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 266: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 267: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 268: {lang: 0x41, script: 0x2, flags: 0x1},
+ 271: {lang: 0x416, script: 0x57, flags: 0x0},
+ 272: {lang: 0x347, script: 0x57, flags: 0x0},
+ 273: {lang: 0x43, script: 0x2, flags: 0x1},
+ 275: {lang: 0x1f9, script: 0x57, flags: 0x0},
+ 276: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 277: {lang: 0x429, script: 0x57, flags: 0x0},
+ 278: {lang: 0x367, script: 0x57, flags: 0x0},
+ 280: {lang: 0x3c0, script: 0x57, flags: 0x0},
+ 282: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 284: {lang: 0x45, script: 0x2, flags: 0x1},
+ 288: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 289: {lang: 0x15e, script: 0x57, 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: 0x57, flags: 0x0},
+ 294: {lang: 0x3c0, script: 0x57, flags: 0x0},
+ 295: {lang: 0x476, script: 0x57, flags: 0x0},
+ 296: {lang: 0x4e, script: 0x2, flags: 0x1},
+ 297: {lang: 0x482, script: 0x57, flags: 0x0},
+ 299: {lang: 0x50, script: 0x4, flags: 0x1},
+ 301: {lang: 0x4a0, script: 0x57, flags: 0x0},
+ 302: {lang: 0x54, script: 0x2, flags: 0x1},
+ 303: {lang: 0x445, script: 0x57, flags: 0x0},
+ 304: {lang: 0x56, script: 0x3, flags: 0x1},
+ 305: {lang: 0x445, script: 0x57, flags: 0x0},
+ 309: {lang: 0x512, script: 0x3b, flags: 0x2},
+ 310: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 311: {lang: 0x4bc, script: 0x57, flags: 0x0},
+ 312: {lang: 0x1f9, script: 0x57, flags: 0x0},
+ 315: {lang: 0x13e, script: 0x57, flags: 0x0},
+ 318: {lang: 0x4c3, script: 0x57, flags: 0x0},
+ 319: {lang: 0x8a, script: 0x57, flags: 0x0},
+ 320: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 322: {lang: 0x41b, script: 0x57, 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: 0x57, 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: 0x57, flags: 0x0},
+ 2: {lang: 0x431, script: 0x57, flags: 0x0},
+ 3: {lang: 0x2ff, script: 0x1f, flags: 0x0},
+ 4: {lang: 0x1d7, script: 0x8, flags: 0x0},
+ 5: {lang: 0x274, script: 0x57, flags: 0x0},
+ 6: {lang: 0xb7, script: 0x57, flags: 0x0},
+ 7: {lang: 0x432, script: 0x1f, flags: 0x0},
+ 8: {lang: 0x12d, script: 0xe0, flags: 0x0},
+ 9: {lang: 0x351, script: 0x21, flags: 0x0},
+ 10: {lang: 0x529, script: 0x38, flags: 0x0},
+ 11: {lang: 0x4ac, script: 0x5, flags: 0x0},
+ 12: {lang: 0x523, script: 0x57, flags: 0x0},
+ 13: {lang: 0x29a, script: 0xdf, flags: 0x0},
+ 14: {lang: 0x136, script: 0x31, flags: 0x0},
+ 15: {lang: 0x48a, script: 0x57, flags: 0x0},
+ 16: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 17: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 18: {lang: 0x27, script: 0x29, flags: 0x0},
+ 19: {lang: 0x139, script: 0x57, flags: 0x0},
+ 20: {lang: 0x26a, script: 0x5, flags: 0x2},
+ 21: {lang: 0x512, script: 0x3b, flags: 0x2},
+ 22: {lang: 0x210, script: 0x2b, flags: 0x0},
+ 23: {lang: 0x5, script: 0x1f, flags: 0x0},
+ 24: {lang: 0x274, script: 0x57, flags: 0x0},
+ 25: {lang: 0x136, script: 0x31, flags: 0x0},
+ 26: {lang: 0x2ff, script: 0x1f, flags: 0x0},
+ 27: {lang: 0x1e1, script: 0x57, flags: 0x0},
+ 28: {lang: 0x31f, script: 0x5, flags: 0x0},
+ 29: {lang: 0x1be, script: 0x21, flags: 0x0},
+ 30: {lang: 0x4b4, script: 0x5, flags: 0x0},
+ 31: {lang: 0x236, script: 0x72, flags: 0x0},
+ 32: {lang: 0x148, script: 0x5, flags: 0x0},
+ 33: {lang: 0x476, script: 0x57, flags: 0x0},
+ 34: {lang: 0x24a, script: 0x4b, flags: 0x0},
+ 35: {lang: 0xe6, script: 0x5, flags: 0x0},
+ 36: {lang: 0x226, script: 0xdf, flags: 0x0},
+ 37: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 38: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 39: {lang: 0x2b8, script: 0x54, flags: 0x0},
+ 40: {lang: 0x226, script: 0xdf, flags: 0x0},
+ 41: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 42: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 43: {lang: 0x3dc, script: 0x57, flags: 0x0},
+ 44: {lang: 0x4ae, script: 0x1f, flags: 0x0},
+ 45: {lang: 0x2ff, script: 0x1f, flags: 0x0},
+ 46: {lang: 0x431, script: 0x57, flags: 0x0},
+ 47: {lang: 0x331, script: 0x72, flags: 0x0},
+ 48: {lang: 0x213, script: 0x57, flags: 0x0},
+ 49: {lang: 0x30b, script: 0x1f, flags: 0x0},
+ 50: {lang: 0x242, script: 0x5, flags: 0x0},
+ 51: {lang: 0x529, script: 0x39, flags: 0x0},
+ 52: {lang: 0x3c0, script: 0x57, flags: 0x0},
+ 53: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 54: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 55: {lang: 0x2ed, script: 0x57, flags: 0x0},
+ 56: {lang: 0x4b4, script: 0x5, flags: 0x0},
+ 57: {lang: 0x88, script: 0x21, flags: 0x0},
+ 58: {lang: 0x4b4, script: 0x5, flags: 0x0},
+ 59: {lang: 0x4b4, script: 0x5, flags: 0x0},
+ 60: {lang: 0xbe, script: 0x21, flags: 0x0},
+ 61: {lang: 0x3dc, script: 0x57, flags: 0x0},
+ 62: {lang: 0x7e, script: 0x1f, flags: 0x0},
+ 63: {lang: 0x3e2, script: 0x1f, flags: 0x0},
+ 64: {lang: 0x267, script: 0x57, flags: 0x0},
+ 65: {lang: 0x444, script: 0x57, flags: 0x0},
+ 66: {lang: 0x512, script: 0x3b, flags: 0x0},
+ 67: {lang: 0x412, script: 0x57, flags: 0x0},
+ 68: {lang: 0x4ae, script: 0x1f, flags: 0x0},
+ 69: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 70: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 71: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 72: {lang: 0x35, script: 0x5, flags: 0x0},
+ 73: {lang: 0x46b, script: 0xdf, flags: 0x0},
+ 74: {lang: 0x2ec, script: 0x5, flags: 0x0},
+ 75: {lang: 0x30f, script: 0x72, flags: 0x0},
+ 76: {lang: 0x467, script: 0x1f, flags: 0x0},
+ 77: {lang: 0x148, script: 0x5, flags: 0x0},
+ 78: {lang: 0x3a, script: 0x5, flags: 0x0},
+ 79: {lang: 0x15e, script: 0x57, flags: 0x0},
+ 80: {lang: 0x48a, script: 0x57, flags: 0x0},
+ 81: {lang: 0x58, script: 0x5, flags: 0x0},
+ 82: {lang: 0x219, script: 0x1f, flags: 0x0},
+ 83: {lang: 0x81, script: 0x31, flags: 0x0},
+ 84: {lang: 0x529, script: 0x39, flags: 0x0},
+ 85: {lang: 0x48c, script: 0x57, flags: 0x0},
+ 86: {lang: 0x4ae, script: 0x1f, flags: 0x0},
+ 87: {lang: 0x512, script: 0x3b, flags: 0x0},
+ 88: {lang: 0x3b3, script: 0x57, flags: 0x0},
+ 89: {lang: 0x431, script: 0x57, flags: 0x0},
+ 90: {lang: 0x432, script: 0x1f, flags: 0x0},
+ 91: {lang: 0x15e, script: 0x57, 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: 0x57},
+ 2: {lang: 0x139, region: 0x135, script: 0x57},
+ 3: {lang: 0x3c0, region: 0x41, script: 0x57},
+ 4: {lang: 0x139, region: 0x2f, script: 0x57},
+ 5: {lang: 0x139, region: 0xd6, script: 0x57},
+ 6: {lang: 0x13e, region: 0xcf, script: 0x57},
+ 7: {lang: 0x445, region: 0x12f, script: 0x57},
+ 8: {lang: 0x3a, region: 0x6b, script: 0x5},
+ 9: {lang: 0x445, region: 0x4b, script: 0x57},
+ 10: {lang: 0x139, region: 0x161, script: 0x57},
+ 11: {lang: 0x139, region: 0x135, script: 0x57},
+ 12: {lang: 0x139, region: 0x135, script: 0x57},
+ 13: {lang: 0x13e, region: 0x59, script: 0x57},
+ 14: {lang: 0x529, region: 0x53, script: 0x38},
+ 15: {lang: 0x1be, region: 0x99, script: 0x21},
+ 16: {lang: 0x1e1, region: 0x95, script: 0x57},
+ 17: {lang: 0x1f9, region: 0x9e, script: 0x57},
+ 18: {lang: 0x139, region: 0x2f, script: 0x57},
+ 19: {lang: 0x139, region: 0xe6, script: 0x57},
+ 20: {lang: 0x139, region: 0x8a, script: 0x57},
+ 21: {lang: 0x41b, region: 0x142, script: 0x57},
+ 22: {lang: 0x529, region: 0x53, script: 0x38},
+ 23: {lang: 0x4bc, region: 0x137, script: 0x57},
+ 24: {lang: 0x3a, region: 0x108, script: 0x5},
+ 25: {lang: 0x3e2, region: 0x106, script: 0x1f},
+ 26: {lang: 0x3e2, region: 0x106, script: 0x1f},
+ 27: {lang: 0x139, region: 0x7b, script: 0x57},
+ 28: {lang: 0x10d, region: 0x60, script: 0x57},
+ 29: {lang: 0x139, region: 0xd6, script: 0x57},
+ 30: {lang: 0x13e, region: 0x1f, script: 0x57},
+ 31: {lang: 0x139, region: 0x9a, script: 0x57},
+ 32: {lang: 0x139, region: 0x7b, script: 0x57},
+}
+
+// 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: 0x57, 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: 0x57, toRegion: 0x1a, fromRegion: []uint16{0x2e, 0x4e, 0x60, 0x63, 0x72, 0xd9, 0x10c, 0x10f}},
+ 2: {lang: 0x13e, script: 0x0, maxScript: 0x57, 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: 0x57, toRegion: 0xee, fromRegion: []uint16{0x2a, 0x4e, 0x5a, 0x86, 0x8b, 0xb7, 0xc6, 0xd1, 0x118, 0x126}},
+ 4: {lang: 0x529, script: 0x39, maxScript: 0x39, toRegion: 0x8d, fromRegion: []uint16{0xc6}},
+}
+
+// Total table size 25886 bytes (25KiB); checksum: 50D3D57D
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 000000000..e7afd3188
--- /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/utf8internal/utf8internal.go b/vendor/golang.org/x/text/internal/utf8internal/utf8internal.go
new file mode 100644
index 000000000..575cea870
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/utf8internal/utf8internal.go
@@ -0,0 +1,87 @@
+// 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 utf8internal contains low-level utf8-related constants, tables, etc.
+// that are used internally by the text package.
+package utf8internal
+
+// The default lowest and highest continuation byte.
+const (
+ LoCB = 0x80 // 1000 0000
+ HiCB = 0xBF // 1011 1111
+)
+
+// Constants related to getting information of first bytes of UTF-8 sequences.
+const (
+ // ASCII identifies a UTF-8 byte as ASCII.
+ ASCII = as
+
+ // FirstInvalid indicates a byte is invalid as a first byte of a UTF-8
+ // sequence.
+ FirstInvalid = xx
+
+ // SizeMask is a mask for the size bits. Use use x&SizeMask to get the size.
+ SizeMask = 7
+
+ // AcceptShift is the right-shift count for the first byte info byte to get
+ // the index into the AcceptRanges table. See AcceptRanges.
+ AcceptShift = 4
+
+ // The names of these constants are chosen to give nice alignment in the
+ // table below. The first nibble is an index into acceptRanges or F for
+ // special one-byte cases. The second nibble is the Rune length or the
+ // Status for the special one-byte case.
+ xx = 0xF1 // invalid: size 1
+ as = 0xF0 // ASCII: size 1
+ s1 = 0x02 // accept 0, size 2
+ s2 = 0x13 // accept 1, size 3
+ s3 = 0x03 // accept 0, size 3
+ s4 = 0x23 // accept 2, size 3
+ s5 = 0x34 // accept 3, size 4
+ s6 = 0x04 // accept 0, size 4
+ s7 = 0x44 // accept 4, size 4
+)
+
+// First is information about the first byte in a UTF-8 sequence.
+var First = [256]uint8{
+ // 1 2 3 4 5 6 7 8 9 A B C D E F
+ as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x00-0x0F
+ as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x10-0x1F
+ as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x20-0x2F
+ as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x30-0x3F
+ as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x40-0x4F
+ as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x50-0x5F
+ as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x60-0x6F
+ as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x70-0x7F
+ // 1 2 3 4 5 6 7 8 9 A B C D E F
+ xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x80-0x8F
+ xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x90-0x9F
+ xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xA0-0xAF
+ xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xB0-0xBF
+ xx, xx, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xC0-0xCF
+ s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xD0-0xDF
+ s2, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s4, s3, s3, // 0xE0-0xEF
+ s5, s6, s6, s6, s7, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xF0-0xFF
+}
+
+// AcceptRange gives the range of valid values for the second byte in a UTF-8
+// sequence for any value for First that is not ASCII or FirstInvalid.
+type AcceptRange struct {
+ Lo uint8 // lowest value for second byte.
+ Hi uint8 // highest value for second byte.
+}
+
+// AcceptRanges is a slice of AcceptRange values. For a given byte sequence b
+//
+// AcceptRanges[First[b[0]]>>AcceptShift]
+//
+// will give the value of AcceptRange for the multi-byte UTF-8 sequence starting
+// at b[0].
+var AcceptRanges = [...]AcceptRange{
+ 0: {LoCB, HiCB},
+ 1: {0xA0, HiCB},
+ 2: {LoCB, 0x9F},
+ 3: {0x90, HiCB},
+ 4: {LoCB, 0x8F},
+}
diff --git a/vendor/golang.org/x/text/language/common.go b/vendor/golang.org/x/text/language/common.go
deleted file mode 100644
index a255bb0a5..000000000
--- a/vendor/golang.org/x/text/language/common.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// This file was generated by go generate; DO NOT EDIT
-
-package language
-
-// This file contains code common to the maketables.go and the package code.
-
-// langAliasType is the type of an alias in langAliasMap.
-type langAliasType int8
-
-const (
- langDeprecated langAliasType = iota
- langMacro
- langLegacy
-
- langAliasTypeUnknown langAliasType = -1
-)
diff --git a/vendor/golang.org/x/text/language/coverage.go b/vendor/golang.org/x/text/language/coverage.go
index 101fd23c1..a24fd1a4d 100644
--- a/vendor/golang.org/x/text/language/coverage.go
+++ b/vendor/golang.org/x/text/language/coverage.go
@@ -7,6 +7,8 @@ package language
import (
"fmt"
"sort"
+
+ "golang.org/x/text/internal/language"
)
// The Coverage interface is used to define the level of coverage of an
@@ -44,9 +46,9 @@ type allSubtags struct{}
// 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, numRegions)
+ reg := make([]Region, language.NumRegions)
for i := range reg {
- reg[i] = Region{regionID(i + 1)}
+ reg[i] = Region{language.Region(i + 1)}
}
return reg
}
@@ -55,9 +57,9 @@ func (s allSubtags) Regions() []Region {
// 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, numScripts)
+ scr := make([]Script, language.NumScripts)
for i := range scr {
- scr[i] = Script{scriptID(i + 1)}
+ scr[i] = Script{language.Script(i + 1)}
}
return scr
}
@@ -65,22 +67,10 @@ func (s allSubtags) Scripts() []Script {
// BaseLanguages returns the list of all supported base languages. It generates
// the list by traversing the internal structures.
func (s allSubtags) BaseLanguages() []Base {
- base := make([]Base, 0, numLanguages)
- for i := 0; i < langNoIndexOffset; i++ {
- // We included "und" already for the value 0.
- if i != nonCanonicalUnd {
- base = append(base, Base{langID(i)})
- }
- }
- i := langNoIndexOffset
- for _, v := range langNoIndex {
- for k := 0; k < 8; k++ {
- if v&1 == 1 {
- base = append(base, Base{langID(i)})
- }
- v >>= 1
- i++
- }
+ bs := language.BaseLanguages()
+ base := make([]Base, len(bs))
+ for i, b := range bs {
+ base[i] = Base{b}
}
return base
}
@@ -90,7 +80,7 @@ func (s allSubtags) Tags() []Tag {
return nil
}
-// coverage is used used by NewCoverage which is used as a convenient way for
+// 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
@@ -134,7 +124,7 @@ func (s *coverage) BaseLanguages() []Base {
}
a := make([]Base, len(tags))
for i, t := range tags {
- a[i] = Base{langID(t.lang)}
+ a[i] = Base{language.Language(t.lang())}
}
sort.Sort(bases(a))
k := 0
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 000000000..8afecd50e
--- /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/index.go b/vendor/golang.org/x/text/language/index.go
deleted file mode 100644
index 50c752186..000000000
--- a/vendor/golang.org/x/text/language/index.go
+++ /dev/null
@@ -1,767 +0,0 @@
-// This file was generated by go generate; DO NOT EDIT
-
-package language
-
-// NumCompactTags is the number of common tags. The maximum tag is
-// NumCompactTags-1.
-const NumCompactTags = 752
-
-var specialTags = []Tag{ // 2 elements
- 0: {lang: 0xd5, region: 0x6d, script: 0x0, pVariant: 0x5, pExt: 0xe, str: "ca-ES-valencia"},
- 1: {lang: 0x134, region: 0x134, script: 0x0, pVariant: 0x5, pExt: 0x5, str: "en-US-u-va-posix"},
-} // Size: 72 bytes
-
-var coreTags = map[uint32]uint16{
- 0x0: 0, // und
- 0x01500000: 3, // af
- 0x015000d1: 4, // af-NA
- 0x01500160: 5, // af-ZA
- 0x01b00000: 6, // agq
- 0x01b00051: 7, // agq-CM
- 0x02000000: 8, // ak
- 0x0200007f: 9, // ak-GH
- 0x02600000: 10, // am
- 0x0260006e: 11, // am-ET
- 0x03900000: 12, // ar
- 0x03900001: 13, // ar-001
- 0x03900022: 14, // ar-AE
- 0x03900038: 15, // ar-BH
- 0x03900061: 16, // ar-DJ
- 0x03900066: 17, // ar-DZ
- 0x0390006a: 18, // ar-EG
- 0x0390006b: 19, // ar-EH
- 0x0390006c: 20, // ar-ER
- 0x03900096: 21, // ar-IL
- 0x0390009a: 22, // ar-IQ
- 0x039000a0: 23, // ar-JO
- 0x039000a7: 24, // ar-KM
- 0x039000ab: 25, // ar-KW
- 0x039000af: 26, // ar-LB
- 0x039000b8: 27, // ar-LY
- 0x039000b9: 28, // ar-MA
- 0x039000c8: 29, // ar-MR
- 0x039000e0: 30, // ar-OM
- 0x039000ec: 31, // ar-PS
- 0x039000f2: 32, // ar-QA
- 0x03900107: 33, // ar-SA
- 0x0390010a: 34, // ar-SD
- 0x03900114: 35, // ar-SO
- 0x03900116: 36, // ar-SS
- 0x0390011b: 37, // ar-SY
- 0x0390011f: 38, // ar-TD
- 0x03900127: 39, // ar-TN
- 0x0390015d: 40, // ar-YE
- 0x03f00000: 41, // ars
- 0x04200000: 42, // as
- 0x04200098: 43, // as-IN
- 0x04300000: 44, // asa
- 0x0430012e: 45, // asa-TZ
- 0x04700000: 46, // ast
- 0x0470006d: 47, // ast-ES
- 0x05700000: 48, // az
- 0x0571e000: 49, // az-Cyrl
- 0x0571e031: 50, // az-Cyrl-AZ
- 0x05752000: 51, // az-Latn
- 0x05752031: 52, // az-Latn-AZ
- 0x05d00000: 53, // bas
- 0x05d00051: 54, // bas-CM
- 0x07000000: 55, // be
- 0x07000046: 56, // be-BY
- 0x07400000: 57, // bem
- 0x07400161: 58, // bem-ZM
- 0x07800000: 59, // bez
- 0x0780012e: 60, // bez-TZ
- 0x07d00000: 61, // bg
- 0x07d00037: 62, // bg-BG
- 0x08100000: 63, // bh
- 0x09e00000: 64, // bm
- 0x09e000c2: 65, // bm-ML
- 0x0a300000: 66, // bn
- 0x0a300034: 67, // bn-BD
- 0x0a300098: 68, // bn-IN
- 0x0a700000: 69, // bo
- 0x0a700052: 70, // bo-CN
- 0x0a700098: 71, // bo-IN
- 0x0b000000: 72, // br
- 0x0b000077: 73, // br-FR
- 0x0b300000: 74, // brx
- 0x0b300098: 75, // brx-IN
- 0x0b500000: 76, // bs
- 0x0b51e000: 77, // bs-Cyrl
- 0x0b51e032: 78, // bs-Cyrl-BA
- 0x0b552000: 79, // bs-Latn
- 0x0b552032: 80, // bs-Latn-BA
- 0x0d500000: 81, // ca
- 0x0d500021: 82, // ca-AD
- 0x0d50006d: 83, // ca-ES
- 0x0d500077: 84, // ca-FR
- 0x0d50009d: 85, // ca-IT
- 0x0da00000: 86, // ce
- 0x0da00105: 87, // ce-RU
- 0x0dd00000: 88, // cgg
- 0x0dd00130: 89, // cgg-UG
- 0x0e300000: 90, // chr
- 0x0e300134: 91, // chr-US
- 0x0e700000: 92, // ckb
- 0x0e70009a: 93, // ckb-IQ
- 0x0e70009b: 94, // ckb-IR
- 0x0f600000: 95, // cs
- 0x0f60005d: 96, // cs-CZ
- 0x0fa00000: 97, // cu
- 0x0fa00105: 98, // cu-RU
- 0x0fc00000: 99, // cy
- 0x0fc0007a: 100, // cy-GB
- 0x0fd00000: 101, // da
- 0x0fd00062: 102, // da-DK
- 0x0fd00081: 103, // da-GL
- 0x10400000: 104, // dav
- 0x104000a3: 105, // dav-KE
- 0x10900000: 106, // de
- 0x1090002d: 107, // de-AT
- 0x10900035: 108, // de-BE
- 0x1090004d: 109, // de-CH
- 0x1090005f: 110, // de-DE
- 0x1090009d: 111, // de-IT
- 0x109000b1: 112, // de-LI
- 0x109000b6: 113, // de-LU
- 0x11300000: 114, // dje
- 0x113000d3: 115, // dje-NE
- 0x11b00000: 116, // dsb
- 0x11b0005f: 117, // dsb-DE
- 0x12000000: 118, // dua
- 0x12000051: 119, // dua-CM
- 0x12400000: 120, // dv
- 0x12700000: 121, // dyo
- 0x12700113: 122, // dyo-SN
- 0x12900000: 123, // dz
- 0x12900042: 124, // dz-BT
- 0x12b00000: 125, // ebu
- 0x12b000a3: 126, // ebu-KE
- 0x12c00000: 127, // ee
- 0x12c0007f: 128, // ee-GH
- 0x12c00121: 129, // ee-TG
- 0x13100000: 130, // el
- 0x1310005c: 131, // el-CY
- 0x13100086: 132, // el-GR
- 0x13400000: 133, // en
- 0x13400001: 134, // en-001
- 0x1340001a: 135, // en-150
- 0x13400024: 136, // en-AG
- 0x13400025: 137, // en-AI
- 0x1340002c: 138, // en-AS
- 0x1340002d: 139, // en-AT
- 0x1340002e: 140, // en-AU
- 0x13400033: 141, // en-BB
- 0x13400035: 142, // en-BE
- 0x13400039: 143, // en-BI
- 0x1340003c: 144, // en-BM
- 0x13400041: 145, // en-BS
- 0x13400045: 146, // en-BW
- 0x13400047: 147, // en-BZ
- 0x13400048: 148, // en-CA
- 0x13400049: 149, // en-CC
- 0x1340004d: 150, // en-CH
- 0x1340004f: 151, // en-CK
- 0x13400051: 152, // en-CM
- 0x1340005b: 153, // en-CX
- 0x1340005c: 154, // en-CY
- 0x1340005f: 155, // en-DE
- 0x13400060: 156, // en-DG
- 0x13400062: 157, // en-DK
- 0x13400063: 158, // en-DM
- 0x1340006c: 159, // en-ER
- 0x13400071: 160, // en-FI
- 0x13400072: 161, // en-FJ
- 0x13400073: 162, // en-FK
- 0x13400074: 163, // en-FM
- 0x1340007a: 164, // en-GB
- 0x1340007b: 165, // en-GD
- 0x1340007e: 166, // en-GG
- 0x1340007f: 167, // en-GH
- 0x13400080: 168, // en-GI
- 0x13400082: 169, // en-GM
- 0x13400089: 170, // en-GU
- 0x1340008b: 171, // en-GY
- 0x1340008c: 172, // en-HK
- 0x13400095: 173, // en-IE
- 0x13400096: 174, // en-IL
- 0x13400097: 175, // en-IM
- 0x13400098: 176, // en-IN
- 0x13400099: 177, // en-IO
- 0x1340009e: 178, // en-JE
- 0x1340009f: 179, // en-JM
- 0x134000a3: 180, // en-KE
- 0x134000a6: 181, // en-KI
- 0x134000a8: 182, // en-KN
- 0x134000ac: 183, // en-KY
- 0x134000b0: 184, // en-LC
- 0x134000b3: 185, // en-LR
- 0x134000b4: 186, // en-LS
- 0x134000be: 187, // en-MG
- 0x134000bf: 188, // en-MH
- 0x134000c5: 189, // en-MO
- 0x134000c6: 190, // en-MP
- 0x134000c9: 191, // en-MS
- 0x134000ca: 192, // en-MT
- 0x134000cb: 193, // en-MU
- 0x134000cd: 194, // en-MW
- 0x134000cf: 195, // en-MY
- 0x134000d1: 196, // en-NA
- 0x134000d4: 197, // en-NF
- 0x134000d5: 198, // en-NG
- 0x134000d8: 199, // en-NL
- 0x134000dc: 200, // en-NR
- 0x134000de: 201, // en-NU
- 0x134000df: 202, // en-NZ
- 0x134000e5: 203, // en-PG
- 0x134000e6: 204, // en-PH
- 0x134000e7: 205, // en-PK
- 0x134000ea: 206, // en-PN
- 0x134000eb: 207, // en-PR
- 0x134000ef: 208, // en-PW
- 0x13400106: 209, // en-RW
- 0x13400108: 210, // en-SB
- 0x13400109: 211, // en-SC
- 0x1340010a: 212, // en-SD
- 0x1340010b: 213, // en-SE
- 0x1340010c: 214, // en-SG
- 0x1340010d: 215, // en-SH
- 0x1340010e: 216, // en-SI
- 0x13400111: 217, // en-SL
- 0x13400116: 218, // en-SS
- 0x1340011a: 219, // en-SX
- 0x1340011c: 220, // en-SZ
- 0x1340011e: 221, // en-TC
- 0x13400124: 222, // en-TK
- 0x13400128: 223, // en-TO
- 0x1340012b: 224, // en-TT
- 0x1340012c: 225, // en-TV
- 0x1340012e: 226, // en-TZ
- 0x13400130: 227, // en-UG
- 0x13400132: 228, // en-UM
- 0x13400134: 229, // en-US
- 0x13400138: 230, // en-VC
- 0x1340013b: 231, // en-VG
- 0x1340013c: 232, // en-VI
- 0x1340013e: 233, // en-VU
- 0x13400141: 234, // en-WS
- 0x13400160: 235, // en-ZA
- 0x13400161: 236, // en-ZM
- 0x13400163: 237, // en-ZW
- 0x13700000: 238, // eo
- 0x13700001: 239, // eo-001
- 0x13900000: 240, // es
- 0x1390001e: 241, // es-419
- 0x1390002b: 242, // es-AR
- 0x1390003e: 243, // es-BO
- 0x13900040: 244, // es-BR
- 0x13900050: 245, // es-CL
- 0x13900053: 246, // es-CO
- 0x13900055: 247, // es-CR
- 0x13900058: 248, // es-CU
- 0x13900064: 249, // es-DO
- 0x13900067: 250, // es-EA
- 0x13900068: 251, // es-EC
- 0x1390006d: 252, // es-ES
- 0x13900085: 253, // es-GQ
- 0x13900088: 254, // es-GT
- 0x1390008e: 255, // es-HN
- 0x13900093: 256, // es-IC
- 0x139000ce: 257, // es-MX
- 0x139000d7: 258, // es-NI
- 0x139000e1: 259, // es-PA
- 0x139000e3: 260, // es-PE
- 0x139000e6: 261, // es-PH
- 0x139000eb: 262, // es-PR
- 0x139000f0: 263, // es-PY
- 0x13900119: 264, // es-SV
- 0x13900134: 265, // es-US
- 0x13900135: 266, // es-UY
- 0x1390013a: 267, // es-VE
- 0x13b00000: 268, // et
- 0x13b00069: 269, // et-EE
- 0x14000000: 270, // eu
- 0x1400006d: 271, // eu-ES
- 0x14100000: 272, // ewo
- 0x14100051: 273, // ewo-CM
- 0x14300000: 274, // fa
- 0x14300023: 275, // fa-AF
- 0x1430009b: 276, // fa-IR
- 0x14900000: 277, // ff
- 0x14900051: 278, // ff-CM
- 0x14900083: 279, // ff-GN
- 0x149000c8: 280, // ff-MR
- 0x14900113: 281, // ff-SN
- 0x14c00000: 282, // fi
- 0x14c00071: 283, // fi-FI
- 0x14e00000: 284, // fil
- 0x14e000e6: 285, // fil-PH
- 0x15300000: 286, // fo
- 0x15300062: 287, // fo-DK
- 0x15300075: 288, // fo-FO
- 0x15900000: 289, // fr
- 0x15900035: 290, // fr-BE
- 0x15900036: 291, // fr-BF
- 0x15900039: 292, // fr-BI
- 0x1590003a: 293, // fr-BJ
- 0x1590003b: 294, // fr-BL
- 0x15900048: 295, // fr-CA
- 0x1590004a: 296, // fr-CD
- 0x1590004b: 297, // fr-CF
- 0x1590004c: 298, // fr-CG
- 0x1590004d: 299, // fr-CH
- 0x1590004e: 300, // fr-CI
- 0x15900051: 301, // fr-CM
- 0x15900061: 302, // fr-DJ
- 0x15900066: 303, // fr-DZ
- 0x15900077: 304, // fr-FR
- 0x15900079: 305, // fr-GA
- 0x1590007d: 306, // fr-GF
- 0x15900083: 307, // fr-GN
- 0x15900084: 308, // fr-GP
- 0x15900085: 309, // fr-GQ
- 0x15900090: 310, // fr-HT
- 0x159000a7: 311, // fr-KM
- 0x159000b6: 312, // fr-LU
- 0x159000b9: 313, // fr-MA
- 0x159000ba: 314, // fr-MC
- 0x159000bd: 315, // fr-MF
- 0x159000be: 316, // fr-MG
- 0x159000c2: 317, // fr-ML
- 0x159000c7: 318, // fr-MQ
- 0x159000c8: 319, // fr-MR
- 0x159000cb: 320, // fr-MU
- 0x159000d2: 321, // fr-NC
- 0x159000d3: 322, // fr-NE
- 0x159000e4: 323, // fr-PF
- 0x159000e9: 324, // fr-PM
- 0x15900101: 325, // fr-RE
- 0x15900106: 326, // fr-RW
- 0x15900109: 327, // fr-SC
- 0x15900113: 328, // fr-SN
- 0x1590011b: 329, // fr-SY
- 0x1590011f: 330, // fr-TD
- 0x15900121: 331, // fr-TG
- 0x15900127: 332, // fr-TN
- 0x1590013e: 333, // fr-VU
- 0x1590013f: 334, // fr-WF
- 0x1590015e: 335, // fr-YT
- 0x16400000: 336, // fur
- 0x1640009d: 337, // fur-IT
- 0x16800000: 338, // fy
- 0x168000d8: 339, // fy-NL
- 0x16900000: 340, // ga
- 0x16900095: 341, // ga-IE
- 0x17800000: 342, // gd
- 0x1780007a: 343, // gd-GB
- 0x18a00000: 344, // gl
- 0x18a0006d: 345, // gl-ES
- 0x19c00000: 346, // gsw
- 0x19c0004d: 347, // gsw-CH
- 0x19c00077: 348, // gsw-FR
- 0x19c000b1: 349, // gsw-LI
- 0x19d00000: 350, // gu
- 0x19d00098: 351, // gu-IN
- 0x1a200000: 352, // guw
- 0x1a400000: 353, // guz
- 0x1a4000a3: 354, // guz-KE
- 0x1a500000: 355, // gv
- 0x1a500097: 356, // gv-IM
- 0x1ad00000: 357, // ha
- 0x1ad0007f: 358, // ha-GH
- 0x1ad000d3: 359, // ha-NE
- 0x1ad000d5: 360, // ha-NG
- 0x1b100000: 361, // haw
- 0x1b100134: 362, // haw-US
- 0x1b500000: 363, // he
- 0x1b500096: 364, // he-IL
- 0x1b700000: 365, // hi
- 0x1b700098: 366, // hi-IN
- 0x1ca00000: 367, // hr
- 0x1ca00032: 368, // hr-BA
- 0x1ca0008f: 369, // hr-HR
- 0x1cb00000: 370, // hsb
- 0x1cb0005f: 371, // hsb-DE
- 0x1ce00000: 372, // hu
- 0x1ce00091: 373, // hu-HU
- 0x1d000000: 374, // hy
- 0x1d000027: 375, // hy-AM
- 0x1da00000: 376, // id
- 0x1da00094: 377, // id-ID
- 0x1df00000: 378, // ig
- 0x1df000d5: 379, // ig-NG
- 0x1e200000: 380, // ii
- 0x1e200052: 381, // ii-CN
- 0x1f000000: 382, // is
- 0x1f00009c: 383, // is-IS
- 0x1f100000: 384, // it
- 0x1f10004d: 385, // it-CH
- 0x1f10009d: 386, // it-IT
- 0x1f100112: 387, // it-SM
- 0x1f200000: 388, // iu
- 0x1f800000: 389, // ja
- 0x1f8000a1: 390, // ja-JP
- 0x1fb00000: 391, // jbo
- 0x1ff00000: 392, // jgo
- 0x1ff00051: 393, // jgo-CM
- 0x20200000: 394, // jmc
- 0x2020012e: 395, // jmc-TZ
- 0x20600000: 396, // jv
- 0x20800000: 397, // ka
- 0x2080007c: 398, // ka-GE
- 0x20a00000: 399, // kab
- 0x20a00066: 400, // kab-DZ
- 0x20e00000: 401, // kaj
- 0x20f00000: 402, // kam
- 0x20f000a3: 403, // kam-KE
- 0x21700000: 404, // kcg
- 0x21b00000: 405, // kde
- 0x21b0012e: 406, // kde-TZ
- 0x21f00000: 407, // kea
- 0x21f00059: 408, // kea-CV
- 0x22c00000: 409, // khq
- 0x22c000c2: 410, // khq-ML
- 0x23100000: 411, // ki
- 0x231000a3: 412, // ki-KE
- 0x23a00000: 413, // kk
- 0x23a000ad: 414, // kk-KZ
- 0x23c00000: 415, // kkj
- 0x23c00051: 416, // kkj-CM
- 0x23d00000: 417, // kl
- 0x23d00081: 418, // kl-GL
- 0x23e00000: 419, // kln
- 0x23e000a3: 420, // kln-KE
- 0x24200000: 421, // km
- 0x242000a5: 422, // km-KH
- 0x24900000: 423, // kn
- 0x24900098: 424, // kn-IN
- 0x24b00000: 425, // ko
- 0x24b000a9: 426, // ko-KP
- 0x24b000aa: 427, // ko-KR
- 0x24d00000: 428, // kok
- 0x24d00098: 429, // kok-IN
- 0x26100000: 430, // ks
- 0x26100098: 431, // ks-IN
- 0x26200000: 432, // ksb
- 0x2620012e: 433, // ksb-TZ
- 0x26400000: 434, // ksf
- 0x26400051: 435, // ksf-CM
- 0x26500000: 436, // ksh
- 0x2650005f: 437, // ksh-DE
- 0x26b00000: 438, // ku
- 0x27800000: 439, // kw
- 0x2780007a: 440, // kw-GB
- 0x28100000: 441, // ky
- 0x281000a4: 442, // ky-KG
- 0x28800000: 443, // lag
- 0x2880012e: 444, // lag-TZ
- 0x28c00000: 445, // lb
- 0x28c000b6: 446, // lb-LU
- 0x29a00000: 447, // lg
- 0x29a00130: 448, // lg-UG
- 0x2a600000: 449, // lkt
- 0x2a600134: 450, // lkt-US
- 0x2ac00000: 451, // ln
- 0x2ac00029: 452, // ln-AO
- 0x2ac0004a: 453, // ln-CD
- 0x2ac0004b: 454, // ln-CF
- 0x2ac0004c: 455, // ln-CG
- 0x2af00000: 456, // lo
- 0x2af000ae: 457, // lo-LA
- 0x2b600000: 458, // lrc
- 0x2b60009a: 459, // lrc-IQ
- 0x2b60009b: 460, // lrc-IR
- 0x2b700000: 461, // lt
- 0x2b7000b5: 462, // lt-LT
- 0x2b900000: 463, // lu
- 0x2b90004a: 464, // lu-CD
- 0x2bb00000: 465, // luo
- 0x2bb000a3: 466, // luo-KE
- 0x2bc00000: 467, // luy
- 0x2bc000a3: 468, // luy-KE
- 0x2be00000: 469, // lv
- 0x2be000b7: 470, // lv-LV
- 0x2c800000: 471, // mas
- 0x2c8000a3: 472, // mas-KE
- 0x2c80012e: 473, // mas-TZ
- 0x2e000000: 474, // mer
- 0x2e0000a3: 475, // mer-KE
- 0x2e400000: 476, // mfe
- 0x2e4000cb: 477, // mfe-MU
- 0x2e800000: 478, // mg
- 0x2e8000be: 479, // mg-MG
- 0x2e900000: 480, // mgh
- 0x2e9000d0: 481, // mgh-MZ
- 0x2eb00000: 482, // mgo
- 0x2eb00051: 483, // mgo-CM
- 0x2f600000: 484, // mk
- 0x2f6000c1: 485, // mk-MK
- 0x2fb00000: 486, // ml
- 0x2fb00098: 487, // ml-IN
- 0x30200000: 488, // mn
- 0x302000c4: 489, // mn-MN
- 0x31200000: 490, // mr
- 0x31200098: 491, // mr-IN
- 0x31600000: 492, // ms
- 0x3160003d: 493, // ms-BN
- 0x316000cf: 494, // ms-MY
- 0x3160010c: 495, // ms-SG
- 0x31700000: 496, // mt
- 0x317000ca: 497, // mt-MT
- 0x31c00000: 498, // mua
- 0x31c00051: 499, // mua-CM
- 0x32800000: 500, // my
- 0x328000c3: 501, // my-MM
- 0x33100000: 502, // mzn
- 0x3310009b: 503, // mzn-IR
- 0x33800000: 504, // nah
- 0x33c00000: 505, // naq
- 0x33c000d1: 506, // naq-NA
- 0x33e00000: 507, // nb
- 0x33e000d9: 508, // nb-NO
- 0x33e0010f: 509, // nb-SJ
- 0x34500000: 510, // nd
- 0x34500163: 511, // nd-ZW
- 0x34700000: 512, // nds
- 0x3470005f: 513, // nds-DE
- 0x347000d8: 514, // nds-NL
- 0x34800000: 515, // ne
- 0x34800098: 516, // ne-IN
- 0x348000da: 517, // ne-NP
- 0x35e00000: 518, // nl
- 0x35e0002f: 519, // nl-AW
- 0x35e00035: 520, // nl-BE
- 0x35e0003f: 521, // nl-BQ
- 0x35e0005a: 522, // nl-CW
- 0x35e000d8: 523, // nl-NL
- 0x35e00115: 524, // nl-SR
- 0x35e0011a: 525, // nl-SX
- 0x35f00000: 526, // nmg
- 0x35f00051: 527, // nmg-CM
- 0x36100000: 528, // nn
- 0x361000d9: 529, // nn-NO
- 0x36300000: 530, // nnh
- 0x36300051: 531, // nnh-CM
- 0x36600000: 532, // no
- 0x36c00000: 533, // nqo
- 0x36d00000: 534, // nr
- 0x37100000: 535, // nso
- 0x37700000: 536, // nus
- 0x37700116: 537, // nus-SS
- 0x37e00000: 538, // ny
- 0x38000000: 539, // nyn
- 0x38000130: 540, // nyn-UG
- 0x38700000: 541, // om
- 0x3870006e: 542, // om-ET
- 0x387000a3: 543, // om-KE
- 0x38c00000: 544, // or
- 0x38c00098: 545, // or-IN
- 0x38f00000: 546, // os
- 0x38f0007c: 547, // os-GE
- 0x38f00105: 548, // os-RU
- 0x39400000: 549, // pa
- 0x39405000: 550, // pa-Arab
- 0x394050e7: 551, // pa-Arab-PK
- 0x3942f000: 552, // pa-Guru
- 0x3942f098: 553, // pa-Guru-IN
- 0x39800000: 554, // pap
- 0x3aa00000: 555, // pl
- 0x3aa000e8: 556, // pl-PL
- 0x3b400000: 557, // prg
- 0x3b400001: 558, // prg-001
- 0x3b500000: 559, // ps
- 0x3b500023: 560, // ps-AF
- 0x3b700000: 561, // pt
- 0x3b700029: 562, // pt-AO
- 0x3b700040: 563, // pt-BR
- 0x3b70004d: 564, // pt-CH
- 0x3b700059: 565, // pt-CV
- 0x3b700085: 566, // pt-GQ
- 0x3b70008a: 567, // pt-GW
- 0x3b7000b6: 568, // pt-LU
- 0x3b7000c5: 569, // pt-MO
- 0x3b7000d0: 570, // pt-MZ
- 0x3b7000ed: 571, // pt-PT
- 0x3b700117: 572, // pt-ST
- 0x3b700125: 573, // pt-TL
- 0x3bb00000: 574, // qu
- 0x3bb0003e: 575, // qu-BO
- 0x3bb00068: 576, // qu-EC
- 0x3bb000e3: 577, // qu-PE
- 0x3cb00000: 578, // rm
- 0x3cb0004d: 579, // rm-CH
- 0x3d000000: 580, // rn
- 0x3d000039: 581, // rn-BI
- 0x3d300000: 582, // ro
- 0x3d3000bb: 583, // ro-MD
- 0x3d300103: 584, // ro-RO
- 0x3d500000: 585, // rof
- 0x3d50012e: 586, // rof-TZ
- 0x3d900000: 587, // ru
- 0x3d900046: 588, // ru-BY
- 0x3d9000a4: 589, // ru-KG
- 0x3d9000ad: 590, // ru-KZ
- 0x3d9000bb: 591, // ru-MD
- 0x3d900105: 592, // ru-RU
- 0x3d90012f: 593, // ru-UA
- 0x3dc00000: 594, // rw
- 0x3dc00106: 595, // rw-RW
- 0x3dd00000: 596, // rwk
- 0x3dd0012e: 597, // rwk-TZ
- 0x3e200000: 598, // sah
- 0x3e200105: 599, // sah-RU
- 0x3e300000: 600, // saq
- 0x3e3000a3: 601, // saq-KE
- 0x3e900000: 602, // sbp
- 0x3e90012e: 603, // sbp-TZ
- 0x3f200000: 604, // sdh
- 0x3f300000: 605, // se
- 0x3f300071: 606, // se-FI
- 0x3f3000d9: 607, // se-NO
- 0x3f30010b: 608, // se-SE
- 0x3f500000: 609, // seh
- 0x3f5000d0: 610, // seh-MZ
- 0x3f700000: 611, // ses
- 0x3f7000c2: 612, // ses-ML
- 0x3f800000: 613, // sg
- 0x3f80004b: 614, // sg-CF
- 0x3fe00000: 615, // shi
- 0x3fe52000: 616, // shi-Latn
- 0x3fe520b9: 617, // shi-Latn-MA
- 0x3fed2000: 618, // shi-Tfng
- 0x3fed20b9: 619, // shi-Tfng-MA
- 0x40200000: 620, // si
- 0x402000b2: 621, // si-LK
- 0x40800000: 622, // sk
- 0x40800110: 623, // sk-SK
- 0x40c00000: 624, // sl
- 0x40c0010e: 625, // sl-SI
- 0x41200000: 626, // sma
- 0x41300000: 627, // smi
- 0x41400000: 628, // smj
- 0x41500000: 629, // smn
- 0x41500071: 630, // smn-FI
- 0x41800000: 631, // sms
- 0x41900000: 632, // sn
- 0x41900163: 633, // sn-ZW
- 0x41f00000: 634, // so
- 0x41f00061: 635, // so-DJ
- 0x41f0006e: 636, // so-ET
- 0x41f000a3: 637, // so-KE
- 0x41f00114: 638, // so-SO
- 0x42700000: 639, // sq
- 0x42700026: 640, // sq-AL
- 0x427000c1: 641, // sq-MK
- 0x4270014c: 642, // sq-XK
- 0x42800000: 643, // sr
- 0x4281e000: 644, // sr-Cyrl
- 0x4281e032: 645, // sr-Cyrl-BA
- 0x4281e0bc: 646, // sr-Cyrl-ME
- 0x4281e104: 647, // sr-Cyrl-RS
- 0x4281e14c: 648, // sr-Cyrl-XK
- 0x42852000: 649, // sr-Latn
- 0x42852032: 650, // sr-Latn-BA
- 0x428520bc: 651, // sr-Latn-ME
- 0x42852104: 652, // sr-Latn-RS
- 0x4285214c: 653, // sr-Latn-XK
- 0x42d00000: 654, // ss
- 0x43000000: 655, // ssy
- 0x43100000: 656, // st
- 0x43a00000: 657, // sv
- 0x43a00030: 658, // sv-AX
- 0x43a00071: 659, // sv-FI
- 0x43a0010b: 660, // sv-SE
- 0x43b00000: 661, // sw
- 0x43b0004a: 662, // sw-CD
- 0x43b000a3: 663, // sw-KE
- 0x43b0012e: 664, // sw-TZ
- 0x43b00130: 665, // sw-UG
- 0x44400000: 666, // syr
- 0x44600000: 667, // ta
- 0x44600098: 668, // ta-IN
- 0x446000b2: 669, // ta-LK
- 0x446000cf: 670, // ta-MY
- 0x4460010c: 671, // ta-SG
- 0x45700000: 672, // te
- 0x45700098: 673, // te-IN
- 0x45a00000: 674, // teo
- 0x45a000a3: 675, // teo-KE
- 0x45a00130: 676, // teo-UG
- 0x46100000: 677, // th
- 0x46100122: 678, // th-TH
- 0x46500000: 679, // ti
- 0x4650006c: 680, // ti-ER
- 0x4650006e: 681, // ti-ET
- 0x46700000: 682, // tig
- 0x46c00000: 683, // tk
- 0x46c00126: 684, // tk-TM
- 0x47600000: 685, // tn
- 0x47800000: 686, // to
- 0x47800128: 687, // to-TO
- 0x48000000: 688, // tr
- 0x4800005c: 689, // tr-CY
- 0x4800012a: 690, // tr-TR
- 0x48400000: 691, // ts
- 0x49a00000: 692, // twq
- 0x49a000d3: 693, // twq-NE
- 0x49f00000: 694, // tzm
- 0x49f000b9: 695, // tzm-MA
- 0x4a200000: 696, // ug
- 0x4a200052: 697, // ug-CN
- 0x4a400000: 698, // uk
- 0x4a40012f: 699, // uk-UA
- 0x4aa00000: 700, // ur
- 0x4aa00098: 701, // ur-IN
- 0x4aa000e7: 702, // ur-PK
- 0x4b200000: 703, // uz
- 0x4b205000: 704, // uz-Arab
- 0x4b205023: 705, // uz-Arab-AF
- 0x4b21e000: 706, // uz-Cyrl
- 0x4b21e136: 707, // uz-Cyrl-UZ
- 0x4b252000: 708, // uz-Latn
- 0x4b252136: 709, // uz-Latn-UZ
- 0x4b400000: 710, // vai
- 0x4b452000: 711, // vai-Latn
- 0x4b4520b3: 712, // vai-Latn-LR
- 0x4b4d9000: 713, // vai-Vaii
- 0x4b4d90b3: 714, // vai-Vaii-LR
- 0x4b600000: 715, // ve
- 0x4b900000: 716, // vi
- 0x4b90013d: 717, // vi-VN
- 0x4bf00000: 718, // vo
- 0x4bf00001: 719, // vo-001
- 0x4c200000: 720, // vun
- 0x4c20012e: 721, // vun-TZ
- 0x4c400000: 722, // wa
- 0x4c500000: 723, // wae
- 0x4c50004d: 724, // wae-CH
- 0x4db00000: 725, // wo
- 0x4e800000: 726, // xh
- 0x4f100000: 727, // xog
- 0x4f100130: 728, // xog-UG
- 0x4ff00000: 729, // yav
- 0x4ff00051: 730, // yav-CM
- 0x50800000: 731, // yi
- 0x50800001: 732, // yi-001
- 0x50e00000: 733, // yo
- 0x50e0003a: 734, // yo-BJ
- 0x50e000d5: 735, // yo-NG
- 0x51500000: 736, // yue
- 0x5150008c: 737, // yue-HK
- 0x51e00000: 738, // zgh
- 0x51e000b9: 739, // zgh-MA
- 0x51f00000: 740, // zh
- 0x51f34000: 741, // zh-Hans
- 0x51f34052: 742, // zh-Hans-CN
- 0x51f3408c: 743, // zh-Hans-HK
- 0x51f340c5: 744, // zh-Hans-MO
- 0x51f3410c: 745, // zh-Hans-SG
- 0x51f35000: 746, // zh-Hant
- 0x51f3508c: 747, // zh-Hant-HK
- 0x51f350c5: 748, // zh-Hant-MO
- 0x51f3512d: 749, // zh-Hant-TW
- 0x52400000: 750, // zu
- 0x52400160: 751, // zu-ZA
-}
-
-// Total table size 4580 bytes (4KiB); checksum: A7F72A2A
diff --git a/vendor/golang.org/x/text/language/language.go b/vendor/golang.org/x/text/language/language.go
index 5eecceb61..b939c89f1 100644
--- a/vendor/golang.org/x/text/language/language.go
+++ b/vendor/golang.org/x/text/language/language.go
@@ -2,144 +2,42 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-//go:generate go run maketables.go gen_common.go -output tables.go
-//go:generate go run gen_index.go
+//go:generate go run gen.go -output tables.go
-// Package language implements BCP 47 language tags and related functionality.
-//
-// The Tag type, which is used to represent languages, is agnostic to the
-// meaning of its subtags. Tags are not fully canonicalized to preserve
-// information that may be valuable in certain contexts. As a consequence, two
-// different tags may represent identical languages.
-//
-// Initializing language- or locale-specific components usually consists of
-// two steps. The first step is to select a display language based on the
-// preferred languages of the user and the languages supported by an application.
-// The second step is to create the language-specific services based on
-// this selection. Each is discussed in more details below.
-//
-// Matching preferred against supported languages
-//
-// An application may support various languages. This list is typically limited
-// by the languages for which there exists translations of the user interface.
-// Similarly, a user may provide a list of preferred languages which is limited
-// by the languages understood by this user.
-// An application should use a Matcher to find the best supported language based
-// on the user's preferred list.
-// Matchers are aware of the intricacies of equivalence between languages.
-// The default Matcher implementation takes into account things such as
-// deprecated subtags, legacy tags, and mutual intelligibility between scripts
-// and languages.
-//
-// A Matcher for English, Australian English, Danish, and standard Mandarin can
-// be defined 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,
-// })
-//
-// The following code selects the best match for someone speaking Spanish and
-// Norwegian:
-//
-// preferred := []language.Tag{ language.Spanish, language.Norwegian }
-// tag, _, _ := matcher.Match(preferred...)
-//
-// In this case, the best match is Danish, as Danish is sufficiently a match to
-// Norwegian to not have to fall back to the default.
-// See ParseAcceptLanguage on how to handle the Accept-Language HTTP header.
-//
-// Selecting language-specific services
-//
-// One should always use the Tag returned by the Matcher to create an instance
-// of any of the language-specific services provided by the text repository.
-// This prevents the mixing of languages, such as having a different language for
-// messages and display names, as well as improper casing or sorting order for
-// the selected language.
-// Using the returned Tag also allows user-defined settings, such as collation
-// order or numbering system to be transparently passed as options.
-//
-// If you have language-specific data in your application, however, it will in
-// most cases suffice to use the index returned by the matcher to identify
-// the user language.
-// The following loop provides an alternative in case this is not sufficient:
-//
-// supported := map[language.Tag]data{
-// language.English: enData,
-// language.MustParse("en-AU"): enAUData,
-// language.Danish: daData,
-// language.Chinese: zhData,
-// }
-// tag, _, _ := matcher.Match(preferred...)
-// for ; tag != language.Und; tag = tag.Parent() {
-// if v, ok := supported[tag]; ok {
-// return v
-// }
-// }
-// return enData // should not reach here
-//
-// Repeatedly taking the Parent of the tag returned by Match will eventually
-// match one of the tags used to initialize the Matcher.
-//
-// Canonicalization
-//
-// 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
-// Matchers will handle such distinctions, though, and are 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"
+package 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
+ "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 struct {
- lang langID
- region regionID
- script scriptID
- pVariant byte // offset in str, includes preceding '-'
- pExt uint16 // offset of first extension, includes preceding '-'
+type Tag compact.Tag
+
+func makeTag(t language.Tag) (tag Tag) {
+ return Tag(compact.Make(t))
+}
- // str is the string representation of the Tag. It will only be used if the
- // tag has variants or extensions.
- str string
+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 {
@@ -156,25 +54,13 @@ func (c CanonType) Make(s string) Tag {
// 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) {
- return Base{t.lang}, Script{t.script}, Region{t.region}
-}
-
-// equalTags compares language, script and region subtags only.
-func (t Tag) equalTags(a Tag) bool {
- return t.lang == a.lang && t.script == a.script && t.region == a.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 {
- if int(t.pVariant) < len(t.str) {
- return false
- }
- return t.equalTags(und)
-}
-
-// private reports whether the Tag consists solely of a private use tag.
-func (t Tag) private() bool {
- return t.str != "" && t.pVariant == 0
+ return compact.Tag(t).IsRoot()
}
// CanonType can be used to enable or disable various types of canonicalization.
@@ -226,73 +112,73 @@ const (
// canonicalize returns the canonicalized equivalent of the tag and
// whether there was any change.
-func (t Tag) canonicalize(c CanonType) (Tag, bool) {
+func canonicalize(c CanonType, t language.Tag) (language.Tag, bool) {
if c == Raw {
return t, false
}
changed := false
if c&SuppressScript != 0 {
- if t.lang < langNoIndexOffset && uint8(t.script) == suppressScript[t.lang] {
- t.script = 0
+ if t.LangID.SuppressScript() == t.ScriptID {
+ t.ScriptID = 0
changed = true
}
}
if c&canonLang != 0 {
for {
- if l, aliasType := normLang(t.lang); l != t.lang {
+ if l, aliasType := t.LangID.Canonicalize(); l != t.LangID {
switch aliasType {
- case langLegacy:
+ case language.Legacy:
if c&Legacy != 0 {
- if t.lang == _sh && t.script == 0 {
- t.script = _Latn
+ if t.LangID == _sh && t.ScriptID == 0 {
+ t.ScriptID = _Latn
}
- t.lang = l
+ t.LangID = l
changed = true
}
- case langMacro:
+ 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 http://unicode.org/cldr/trac/ticket/2698 and also
- // http://unicode.org/cldr/trac/ticket/1790 for some of the
+ // 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.lang != _nb {
+ if c&CLDR == 0 || t.LangID != _nb {
changed = true
- t.lang = l
+ t.LangID = l
}
}
- case langDeprecated:
+ case language.Deprecated:
if c&DeprecatedBase != 0 {
- if t.lang == _mo && t.region == 0 {
- t.region = _MD
+ if t.LangID == _mo && t.RegionID == 0 {
+ t.RegionID = _MD
}
- t.lang = l
+ t.LangID = l
changed = true
// Other canonicalization types may still apply.
continue
}
}
- } else if c&Legacy != 0 && t.lang == _no && c&CLDR != 0 {
- t.lang = _nb
+ } else if c&Legacy != 0 && t.LangID == _no && c&CLDR != 0 {
+ t.LangID = _nb
changed = true
}
break
}
}
if c&DeprecatedScript != 0 {
- if t.script == _Qaai {
+ if t.ScriptID == _Qaai {
changed = true
- t.script = _Zinh
+ t.ScriptID = _Zinh
}
}
if c&DeprecatedRegion != 0 {
- if r := normRegion(t.region); r != 0 {
+ if r := t.RegionID.Canonicalize(); r != t.RegionID {
changed = true
- t.region = r
+ t.RegionID = r
}
}
return t, changed
@@ -300,11 +186,20 @@ func (t Tag) canonicalize(c CanonType) (Tag, bool) {
// Canonicalize returns the canonicalized equivalent of the tag.
func (c CanonType) Canonicalize(t Tag) (Tag, error) {
- t, changed := t.canonicalize(c)
- if changed {
- t.remakeString()
+ // 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.
@@ -327,79 +222,38 @@ func (c Confidence) String() string {
return confName[c]
}
-// 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)
+// String returns the canonical string representation of the language tag.
+func (t Tag) String() string {
+ return t.tag().String()
}
-// 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.lang.stringToBuf(buf[:])
- if t.script != 0 {
- n += copy(buf[n:], "-")
- n += copy(buf[n:], t.script.String())
- }
- if t.region != 0 {
- n += copy(buf[n:], "-")
- n += copy(buf[n:], t.region.String())
- }
- return n
+// MarshalText implements encoding.TextMarshaler.
+func (t Tag) MarshalText() (text []byte, err error) {
+ return t.tag().MarshalText()
}
-// String returns the canonical string representation of the language tag.
-func (t Tag) String() string {
- if t.str != "" {
- return t.str
- }
- if t.script == 0 && t.region == 0 {
- return t.lang.String()
- }
- buf := [maxCoreSize]byte{}
- return string(buf[:t.genCoreBytes(buf[:])])
+// 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 t.lang != 0 {
- return Base{t.lang}, Exact
+ if b := t.lang(); b != 0 {
+ return Base{b}, Exact
}
+ tt := t.tag()
c := High
- if t.script == 0 && !(Region{t.region}).IsCountry() {
+ if tt.ScriptID == 0 && !tt.RegionID.IsCountry() {
c = Low
}
- if tag, err := addTags(t); err == nil && tag.lang != 0 {
- return Base{tag.lang}, c
+ if tag, err := tt.Maximize(); err == nil && tag.LangID != 0 {
+ return Base{tag.LangID}, c
}
return Base{0}, No
}
@@ -412,35 +266,34 @@ func (t Tag) Base() (Base, Confidence) {
// 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 http://www.unicode.org/reports/tr24/#Values for more details. Zzzz is also used for
+// 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 t.script != 0 {
- return Script{t.script}, Exact
- }
- sc, c := scriptID(_Zzzz), No
- if t.lang < langNoIndexOffset {
- if scr := scriptID(suppressScript[t.lang]); 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 t.region == 0 {
- return Script{scriptID(scr)}, High
- }
- sc, c = scr, High
+ 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 := addTags(t); err == nil {
- if tag.script != sc {
- sc, c = tag.script, Low
+ if tag, err := tt.Maximize(); err == nil {
+ if tag.ScriptID != sc {
+ sc, c = tag.ScriptID, Low
}
} else {
- t, _ = (Deprecated | Macro).Canonicalize(t)
- if tag, err := addTags(t); err == nil && tag.script != sc {
- sc, c = tag.script, Low
+ tt, _ = canonicalize(Deprecated|Macro, tt)
+ if tag, err := tt.Maximize(); err == nil && tag.ScriptID != sc {
+ sc, c = tag.ScriptID, Low
}
}
return Script{sc}, c
@@ -450,28 +303,31 @@ func (t Tag) Script() (Script, Confidence) {
// 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 t.region != 0 {
- return Region{t.region}, Exact
+ if r := t.region(); r != 0 {
+ return Region{r}, Exact
}
- if t, err := addTags(t); err == nil {
- return Region{t.region}, Low // TODO: differentiate between high and low.
+ tt := t.tag()
+ if tt, err := tt.Maximize(); err == nil {
+ return Region{tt.RegionID}, Low // TODO: differentiate between high and low.
}
- t, _ = (Deprecated | Macro).Canonicalize(t)
- if tag, err := addTags(t); err == nil {
- return Region{tag.region}, 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?
}
-// Variant returns the variants specified explicitly for this language tag.
+// 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{}
- if int(t.pVariant) < int(t.pExt) {
- for x, str := "", t.str[t.pVariant:t.pExt]; str != ""; {
- x, str = nextToken(str)
- v = append(v, Variant{x})
- }
+ x, str := "", t.tag().Variants()
+ for str != "" {
+ x, str = nextToken(str)
+ v = append(v, Variant{x})
}
return v
}
@@ -479,57 +335,13 @@ func (t Tag) Variants() []Variant {
// 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 {
- if t.str != "" {
- // Strip the variants and extensions.
- t, _ = Raw.Compose(t.Raw())
- if t.region == 0 && t.script != 0 && t.lang != 0 {
- base, _ := addTags(Tag{lang: t.lang})
- if base.script == t.script {
- return Tag{lang: t.lang}
- }
- }
- return t
- }
- if t.lang != 0 {
- if t.region != 0 {
- maxScript := t.script
- if maxScript == 0 {
- max, _ := addTags(t)
- maxScript = max.script
- }
-
- for i := range parents {
- if langID(parents[i].lang) == t.lang && scriptID(parents[i].maxScript) == maxScript {
- for _, r := range parents[i].fromRegion {
- if regionID(r) == t.region {
- return Tag{
- lang: t.lang,
- script: scriptID(parents[i].script),
- region: regionID(parents[i].toRegion),
- }
- }
- }
- }
- }
-
- // Strip the script if it is the default one.
- base, _ := addTags(Tag{lang: t.lang})
- if base.script != maxScript {
- return Tag{lang: t.lang, script: maxScript}
- }
- return Tag{lang: t.lang}
- } else if t.script != 0 {
- // The parent for an base-script pair with a non-default script is
- // "und" instead of the base language.
- base, _ := addTags(Tag{lang: t.lang})
- if base.script != t.script {
- return und
- }
- return Tag{lang: t.lang}
- }
- }
- return und
+ return Tag(compact.Tag(t).Parent())
}
// returns token t and the rest of the string.
@@ -555,17 +367,8 @@ func (e Extension) String() string {
// ParseExtension parses s as an extension and returns it on success.
func ParseExtension(s string) (e Extension, err error) {
- scan := makeScannerString(s)
- var end int
- if n := len(scan.token); n != 1 {
- return Extension{}, errSyntax
- }
- scan.toLower(0, len(scan.b))
- end = parseExtension(&scan)
- if end != len(s) {
- return Extension{}, errSyntax
- }
- return Extension{string(scan.b)}, nil
+ ext, err := language.ParseExtension(s)
+ return Extension{ext}, err
}
// Type returns the one-byte extension type of e. It returns 0 for the zero
@@ -586,22 +389,20 @@ func (e Extension) Tokens() []string {
// 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) {
- for i := int(t.pExt); i < len(t.str)-1; {
- var ext string
- i, ext = getExtension(t.str, i)
- if ext[0] == x {
- return Extension{ext}, true
- }
+ if !compact.Tag(t).MayHaveExtensions() {
+ return Extension{}, false
}
- 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 i := int(t.pExt); i < len(t.str)-1; {
- var ext string
- i, ext = getExtension(t.str, i)
+ for _, ext := range t.tag().Extensions() {
e = append(e, Extension{ext})
}
return e
@@ -609,259 +410,105 @@ func (t Tag) Extensions() []Extension {
// 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
-// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
+// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
// TypeForKey will traverse the inheritance chain to get the correct value.
func (t Tag) TypeForKey(key string) string {
- if start, end, _ := t.findTypeForKey(key); end != start {
- return t.str[start:end]
+ if !compact.Tag(t).MayHaveExtensions() {
+ if key != "rg" && key != "va" {
+ return ""
+ }
}
- return ""
+ return t.tag().TypeForKey(key)
}
-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
-// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
+// 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.private() {
- return t, errPrivateUse
- }
- if len(key) != 2 {
- return t, errInvalidArguments
- }
-
- // Remove the setting if value is "".
- if value == "" {
- start, end, _ := t.findTypeForKey(key)
- if start != end {
- // Remove key tag and leading '-'.
- start -= 4
-
- // Remove a possible empty extension.
- if (end == len(t.str) || t.str[end+2] == '-') && t.str[start-2] == '-' {
- 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, end, hasExt := t.findTypeForKey(key)
- if start == end {
- if hasExt {
- b = b[2:]
- }
- t.str = fmt.Sprintf("%s-%s%s", s[:start], b, s[end:])
- } else {
- t.str = fmt.Sprintf("%s%s%s", s[:start], value, s[end:])
- }
- }
- return t, nil
+ tt, err := t.tag().SetTypeForKey(key, value)
+ return makeTag(tt), err
}
-// 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, end int, hasExt bool) {
- p := int(t.pExt)
- if len(key) != 2 || p == len(t.str) || p == 0 {
- return p, p, false
- }
- s := t.str
-
- // Find the correct extension.
- for p++; s[p] != 'u'; p++ {
- if s[p] > 'u' {
- p--
- return p, p, false
- }
- if p = nextExtension(s, p); p == len(s) {
- return 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 {
- // p points to the hyphen preceding the current token.
- if p3 := p + 3; s[p3] == '-' {
- // Found a key.
- // Check whether we just processed the key that was requested.
- if curKey == key {
- return start, p, true
- }
- // Set to the next key and continue scanning type tokens.
- curKey = s[p+1 : p3]
- if curKey > key {
- return p, p, true
- }
- // Start of the type token sequence.
- start = p + 4
- // A type is at least 3 characters long.
- p += 7 // 4 + 3
- } else {
- // Attribute or type, which is at least 3 characters long.
- p += 4
- }
- // p points past the third character of a type or attribute.
- max := p + 5 // maximum length of token plus hyphen.
- if len(s) < max {
- max = len(s)
- }
- for ; p < max && s[p] != '-'; p++ {
- }
- // Bail if we have exhausted all tokens or if the next token starts
- // a new extension.
- if p == len(s) || s[p+2] == '-' {
- if curKey == key {
- return start, p, true
- }
- return p, p, true
- }
- }
-}
+// 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. Extensions, except for the
-// 'va' type of the 'u' extension, are ignored. It will return 0, false if no
-// compact tag exists, where 0 is the index for the root language (Und).
-func CompactIndex(t Tag) (index int, ok 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.
- b, s, r := t.Raw()
- if len(t.str) > 0 {
- if strings.HasPrefix(t.str, "x-") {
- // We have no entries for user-defined tags.
- return 0, false
- }
- if uint16(t.pVariant) != t.pExt {
- // There are no tags with variants and an u-va type.
- if t.TypeForKey("va") != "" {
- return 0, false
- }
- t, _ = Raw.Compose(b, s, r, t.Variants())
- } else if _, ok := t.Extension('u'); ok {
- // Strip all but the 'va' entry.
- variant := t.TypeForKey("va")
- t, _ = Raw.Compose(b, s, r)
- t, _ = t.SetTypeForKey("va", variant)
- }
- if len(t.str) > 0 {
- // We have some variants.
- for i, s := range specialTags {
- if s == t {
- return i + 1, true
- }
- }
- return 0, false
- }
- }
- // 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.
- key := uint32(b.langID) << (8 + 12)
- key |= uint32(s.scriptID) << 12
- key |= uint32(r.regionID)
- x, ok := coreTags[key]
- return int(x), ok
+// 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
+ 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) {
- if n := len(s); n < 2 || 3 < n {
- return Base{}, errSyntax
- }
- var buf [3]byte
- l, err := getLangID(buf[:copy(buf[:], s)])
+ 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
+ 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) {
- if len(s) != 4 {
- return Script{}, errSyntax
- }
- var buf [4]byte
- sc, err := getScriptID(script, buf[:copy(buf[:], s)])
+ 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
+ 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 := getRegionM49(r)
+ rid, err := language.EncodeM49(r)
return Region{rid}, err
}
@@ -869,62 +516,54 @@ func EncodeM49(r int) (Region, error) {
// 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 Region{}, errSyntax
- }
- var buf [3]byte
- r, err := getRegionID(buf[:copy(buf[:], s)])
+ 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.String()
+}
+
+// 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 {
- if r.regionID == 0 || r.IsGroup() || r.IsPrivateUse() && r.regionID != _XK {
- return false
- }
- return true
+ 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 {
- if r.regionID == 0 {
- return false
- }
- return int(regionInclusion[r.regionID]) < len(regionContainment)
+ 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)
+ return r.regionID.Contains(c.regionID)
}
-func (r regionID) contains(c regionID) 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.
//
@@ -933,25 +572,15 @@ var errNoTLD = errors.New("language: region is not a valid ccTLD")
// 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.regionID == _GB {
- r = Region{_UK}
- }
- if (r.typ() & ccTLD) == 0 {
- return Region{}, errNoTLD
- }
- return r, nil
+ 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 {
- if cr := normRegion(r.regionID); cr != 0 {
- return Region{cr}
- }
- return r
+ return Region{r.regionID.Canonicalize()}
}
// Variant represents a registered variant of a language as defined by BCP 47.
@@ -962,11 +591,8 @@ type Variant struct {
// 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 _, ok := variantIndex[s]; ok {
- return Variant{s}, nil
- }
- return Variant{}, mkErrInvalid([]byte(s))
+ v, err := language.ParseVariant(s)
+ return Variant{v.String()}, err
}
// String returns the string representation of the variant.
diff --git a/vendor/golang.org/x/text/language/match.go b/vendor/golang.org/x/text/language/match.go
index 8ad950533..f73492134 100644
--- a/vendor/golang.org/x/text/language/match.go
+++ b/vendor/golang.org/x/text/language/match.go
@@ -4,7 +4,45 @@
package language
-import "errors"
+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.
//
@@ -36,248 +74,76 @@ func Comprehends(speaker, alternative Tag) Confidence {
// 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) Matcher {
- return newMatcher(t)
+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 {
- t = m.default_.tag
+ if match != nil {
+ tt, index = match.tag, match.index
} else {
- t, index = match.tag, match.index
- }
- // 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: consider also adding in variants that are compatible with the
- // matched language.
- // TODO: Add back region if it is non-ambiguous? Or create another tag to
- // preserve the region?
- if u, ok := w.Extension('u'); ok {
- t, _ = Raw.Compose(t, u)
- }
- return t, index, c
-}
-
-type scriptRegionFlags uint8
-
-const (
- isList = 1 << iota
- scriptInFrom
- regionInFrom
-)
-
-func (t *Tag) setUndefinedLang(id langID) {
- if t.lang == 0 {
- t.lang = id
- }
-}
-
-func (t *Tag) setUndefinedScript(id scriptID) {
- if t.script == 0 {
- t.script = id
- }
-}
-
-func (t *Tag) setUndefinedRegion(id regionID) {
- if t.region == 0 || t.region.contains(id) {
- t.region = 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 a 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.region]; i < nRegionGroups {
- x := likelyRegionGroup[i]
- if langID(x.lang) == t.lang && scriptID(x.script) == t.script {
- t.region = regionID(x.region)
- }
- return true
- }
- return false
-}
-
-func addTags(t Tag) (Tag, error) {
- // We leave private use identifiers alone.
- if t.private() {
- return t, nil
- }
- if t.script != 0 && t.region != 0 {
- if t.lang != 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.region : t.region+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 scriptID(x.script) == t.script {
- t.setUndefinedLang(langID(x.lang))
- return t, nil
- }
- }
- }
- if t.lang != 0 {
- // Search matches for lang-script and lang-region, where lang != und.
- if t.lang < langNoIndexOffset {
- x := likelyLang[t.lang]
- if x.flags&isList != 0 {
- list := likelyLangList[x.region : x.region+uint16(x.script)]
- if t.script != 0 {
- for _, x := range list {
- if scriptID(x.script) == t.script && x.flags&scriptInFrom != 0 {
- t.setUndefinedRegion(regionID(x.region))
- return t, nil
- }
- }
- } else if t.region != 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.region.contains(regionID(x.region)) {
- tt.region = regionID(x.region)
- tt.setUndefinedScript(scriptID(x.script))
- goodScript = goodScript && tt.script == scriptID(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.script = tt.script
- }
+ // 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
}
- }
- }
- } else {
- // Search matches for und-script.
- if t.script != 0 {
- x := likelyScript[t.script]
- if x.region != 0 {
- t.setUndefinedRegion(regionID(x.region))
- t.setUndefinedLang(langID(x.lang))
- return t, nil
- }
- }
- // Search matches for und-region. If und-script-region exists, it would
- // have been found earlier.
- if t.region != 0 {
- if i := regionInclusion[t.region]; i < nRegionGroups {
- x := likelyRegionGroup[i]
- if x.region != 0 {
- t.setUndefinedLang(langID(x.lang))
- t.setUndefinedScript(scriptID(x.script))
- t.region = regionID(x.region)
- }
- } else {
- x := likelyRegion[t.region]
- if x.flags&isList != 0 {
- x = likelyRegionList[x.lang]
- }
- if x.script != 0 && x.flags != scriptInFrom {
- t.setUndefinedLang(langID(x.lang))
- t.setUndefinedScript(scriptID(x.script))
- return t, nil
+ 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.
}
-
- // Search matches for lang.
- if t.lang < langNoIndexOffset {
- x := likelyLang[t.lang]
- if x.flags&isList != 0 {
- x = likelyLangList[x.region]
+ 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")
}
- if x.region != 0 {
- t.setUndefinedScript(scriptID(x.script))
- t.setUndefinedRegion(regionID(x.region))
- }
- specializeRegion(&t)
- if t.lang == 0 {
- t.lang = _en // default language
+ }
+ // 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)
}
- return t, nil
+ tt = b.Make()
}
- return t, ErrMissingLikelyTagsData
+ return makeTag(tt), index, c
}
-func (t *Tag) setTagsFrom(id Tag) {
- t.lang = id.lang
- t.script = id.script
- t.region = id.region
-}
+// ErrMissingLikelyTagsData indicates no information was available
+// to compute likely values of missing tags.
+var ErrMissingLikelyTagsData = errors.New("missing likely tags data")
-// 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{
- {lang: t.lang},
- {lang: t.lang, region: t.region},
- {lang: t.lang, script: t.script},
- } {
- if x, err := addTags(id); err == nil && max.equalTags(x) {
- t.setTagsFrom(id)
- break
- }
- }
- return t, nil
-}
+// 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 http://www.unicode.org/reports/tr35/#LanguageMatching).
+// (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.
@@ -300,8 +166,9 @@ func minimizeTags(t Tag) (Tag, error) {
// 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 above a certain threshold, return this
-// match without proceeding to the next tag in "desired". [See Note 1]
+// 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:
@@ -350,9 +217,6 @@ func minimizeTags(t Tag) (Tag, error) {
// found wins.
//
// Notes:
-// [1] Note that even if we may not have a perfect match, if a match is above a
-// certain threshold, it is considered a better match than any other match
-// to a tag later in the list of preferred language tags.
// [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
@@ -388,22 +252,24 @@ func minimizeTags(t Tag) (Tag, error) {
// matcher keeps a set of supported language tags, indexed by language.
type matcher struct {
- default_ *haveTag
- index map[langID]*matchHeader
- passSettings bool
+ 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 {
- exact []*haveTag
- max []*haveTag
+ 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 Tag
+ tag language.Tag
// index of this tag in the original list of supported tags.
index int
@@ -413,35 +279,37 @@ type haveTag struct {
conf Confidence
// Maximized region and script.
- maxRegion regionID
- maxScript scriptID
+ 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 scriptID
+ altScript language.Script
// nextMax is the index of the next haveTag with the same maximized tags.
nextMax uint16
}
-func makeHaveTag(tag Tag, index int) (haveTag, langID) {
+func makeHaveTag(tag language.Tag, index int) (haveTag, language.Language) {
max := tag
- if tag.lang != 0 {
- max, _ = max.canonicalize(All)
- max, _ = addTags(max)
- max.remakeString()
+ 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.region, max.script, altScript(max.lang, max.script), 0}, max.lang
+ 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 langID, s scriptID) scriptID {
+func altScript(l language.Language, s language.Script) language.Script {
for _, alt := range matchScript {
- if (alt.lang == 0 || langID(alt.lang) == l) && scriptID(alt.have) == s {
- return scriptID(alt.want)
+ // 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
@@ -450,34 +318,32 @@ func altScript(l langID, s scriptID) scriptID {
// 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.exact {
- if v.tag.equalsRest(n.tag) {
+ for _, v := range h.haveTags {
+ if equalsRest(v.tag, n.tag) {
return
}
}
- if exact {
- h.exact = append(h.exact, &n)
- }
// Allow duplicate maximized tags, but create a linked list to allow quickly
// comparing the equivalents and bail out.
- for i, v := range h.max {
+ for i, v := range h.haveTags {
if v.maxScript == n.maxScript &&
v.maxRegion == n.maxRegion &&
- v.tag.variantOrPrivateTagStr() == n.tag.variantOrPrivateTagStr() {
- for h.max[i].nextMax != 0 {
- i = int(h.max[i].nextMax)
+ v.tag.VariantOrPrivateUseTags() == n.tag.VariantOrPrivateUseTags() {
+ for h.haveTags[i].nextMax != 0 {
+ i = int(h.haveTags[i].nextMax)
}
- h.max[i].nextMax = uint16(len(h.max))
+ h.haveTags[i].nextMax = uint16(len(h.haveTags))
break
}
}
- h.max = append(h.max, &n)
+ 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 langID) *matchHeader {
+func (m *matcher) header(l language.Language) *matchHeader {
if h := m.index[l]; h != nil {
return h
}
@@ -486,12 +352,26 @@ func (m *matcher) header(l langID) *matchHeader {
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) *matcher {
+func newMatcher(supported []Tag, options []MatchOption) *matcher {
m := &matcher{
- index: make(map[langID]*matchHeader),
+ index: make(map[language.Language]*matchHeader),
+ preferSameScript: true,
+ }
+ for _, o := range options {
+ o(m)
}
if len(supported) == 0 {
m.default_ = &haveTag{}
@@ -500,36 +380,41 @@ func newMatcher(supported []Tag) *matcher {
// Add supported languages to the index. Add exact matches first to give
// them precedence.
for i, tag := range supported {
- pair, _ := makeHaveTag(tag, i)
- m.header(tag.lang).addIfNew(pair, true)
- }
- m.default_ = m.header(supported[0].lang).exact[0]
+ 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 {
- pair, max := makeHaveTag(tag, i)
- if max != tag.lang {
- m.header(max).addIfNew(pair, false)
+ 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.
- // If force is true, the update will also apply to derived entries. To
- // avoid applying a "transitive closure", use false.
- update := func(want, have uint16, conf Confidence, force bool) {
- if hh := m.index[langID(have)]; hh != nil {
- if !force && len(hh.exact) == 0 {
+ // 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(langID(want))
- for _, ht := range hh.max {
+ 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(langID(want), v.maxScript)
+ v.altScript = altScript(language.Language(want), v.maxScript)
}
- hw.addIfNew(v, conf == Exact && len(hh.exact) > 0)
+ hw.addIfNew(v, conf == Exact && hh.original)
}
}
}
@@ -537,9 +422,9 @@ func newMatcher(supported []Tag) *matcher {
// Add entries for languages with mutual intelligibility as defined by CLDR's
// languageMatch data.
for _, ml := range matchLang {
- update(ml.want, ml.have, Confidence(ml.conf), false)
+ update(ml.want, ml.have, toConf(ml.distance))
if !ml.oneway {
- update(ml.have, ml.want, Confidence(ml.conf), false)
+ update(ml.have, ml.want, toConf(ml.distance))
}
}
@@ -548,126 +433,157 @@ func newMatcher(supported []Tag) *matcher {
// 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 langAliasMap {
- if lm.from == _sh {
- continue
- }
-
+ 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 langAliasTypes[i] != langMacro {
- if !isExactEquivalent(langID(lm.from)) {
+ if language.AliasTypes[i] != language.Macro {
+ if !isExactEquivalent(language.Language(lm.From)) {
conf = High
}
- update(lm.to, lm.from, conf, true)
+ update(lm.To, lm.From, conf)
}
- update(lm.from, lm.to, conf, true)
+ 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 Tag, c Confidence) {
+func (m *matcher) getBest(want ...Tag) (got *haveTag, orig language.Tag, c Confidence) {
best := bestMatch{}
- for _, w := range want {
- var max Tag
+ for i, ww := range want {
+ w := ww.tag()
+ var max language.Tag
// Check for exact match first.
- h := m.index[w.lang]
- if w.lang != 0 {
- // Base language is defined.
+ h := m.index[w.LangID]
+ if w.LangID != 0 {
if h == nil {
continue
}
- for i := range h.exact {
- have := h.exact[i]
- if have.tag.equalsRest(w) {
- return have, w, Exact
- }
+ // 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
}
- max, _ = w.canonicalize(Legacy | Deprecated)
- max, _ = addTags(max)
+ // 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.exact {
- have := h.exact[i]
- if have.tag.equalsRest(w) {
+ for i := range h.haveTags {
+ have := h.haveTags[i]
+ if equalsRest(have.tag, w) {
return have, w, Exact
}
}
}
- if w.script == 0 && w.region == 0 {
+ if w.ScriptID == 0 && w.RegionID == 0 {
// We skip all tags matching und for approximate matching, including
// private tags.
continue
}
- max, _ = addTags(w)
- if h = m.index[max.lang]; h == nil {
+ 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.max {
- have := h.max[i]
- best.update(have, w, max.script, max.region)
+ 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.max[have.nextMax]
- best.update(have, w, max.script, max.region)
+ have = h.haveTags[have.nextMax]
+ best.update(have, w, max.ScriptID, max.RegionID, pin)
}
- return best.have, best.want, High
+ return best.have, best.want, best.conf
}
}
}
if best.conf <= No {
if len(want) != 0 {
- return nil, want[0], No
+ return nil, want[0].tag(), No
}
- return nil, 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 Tag
- conf Confidence
+ 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
- regDist uint8
- origScript bool
- parentDist uint8 // 255 if have is not an ancestor of want tag.
+ 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.
-func (m *bestMatch) update(have *haveTag, tag Tag, maxScript scriptID, maxRegion regionID) {
+// 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
}
- if have.maxScript != maxScript {
+ // 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.
+ // 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 {
- // There is usually a small difference between languages across regions.
- // We use the region distance (below) to disambiguate between equal matches.
if High < c {
+ // There is usually a small difference between languages across regions.
c = High
}
}
@@ -686,7 +602,7 @@ func (m *bestMatch) update(have *haveTag, tag Tag, maxScript scriptID, maxRegion
// Tie-breaker rules:
// We prefer if the pre-maximized language was specified and identical.
- origLang := have.tag.lang == tag.lang && tag.lang != 0
+ origLang := have.tag.LangID == tag.LangID && tag.LangID != 0
if !beaten && m.origLang != origLang {
if m.origLang {
return
@@ -695,7 +611,7 @@ func (m *bestMatch) update(have *haveTag, tag Tag, maxScript scriptID, maxRegion
}
// We prefer if the pre-maximized region was specified and identical.
- origReg := have.tag.region == tag.region && tag.region != 0
+ origReg := have.tag.RegionID == tag.RegionID && tag.RegionID != 0
if !beaten && m.origReg != origReg {
if m.origReg {
return
@@ -703,28 +619,26 @@ func (m *bestMatch) update(have *haveTag, tag Tag, maxScript scriptID, maxRegion
beaten = true
}
- // Next we prefer smaller distances between regions, as defined by regionDist.
- regDist := regionDist(have.maxRegion, maxRegion, tag.lang)
- if !beaten && m.regDist != regDist {
- if regDist > m.regDist {
+ regGroupDist, sameGroup := regionGroupDist(have.maxRegion, maxRegion, maxScript, tag.LangID)
+ if !beaten && m.regGroupDist != regGroupDist {
+ if regGroupDist > m.regGroupDist {
return
}
beaten = true
}
- // Next we prefer if the pre-maximized script was specified and identical.
- origScript := have.tag.script == tag.script && tag.script != 0
- if !beaten && m.origScript != origScript {
- if m.origScript {
+ paradigmReg := isParadigmLocale(tag.LangID, have.maxRegion)
+ if !beaten && m.paradigmReg != paradigmReg {
+ if !paradigmReg {
return
}
beaten = true
}
- // Finally we prefer tags which have a closer parent relationship.
- parentDist := parentDistance(have.tag.region, tag)
- if !beaten && m.parentDist != parentDist {
- if parentDist > m.parentDist {
+ // 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
@@ -735,90 +649,59 @@ func (m *bestMatch) update(have *haveTag, tag Tag, maxScript scriptID, maxRegion
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.regDist = regDist
- m.parentDist = parentDist
+ m.regGroupDist = regGroupDist
}
}
-// parentDistance returns the number of times Parent must be called before the
-// regions match. It is assumed that it has already been checked that lang and
-// script are identical. If haveRegion does not occur in the ancestor chain of
-// tag, it returns 255.
-func parentDistance(haveRegion regionID, tag Tag) uint8 {
- p := tag.Parent()
- d := uint8(1)
- for haveRegion != p.region {
- if p.region == 0 {
- return 255
+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
}
- p = p.Parent()
- d++
- }
- return d
-}
-
-// regionDist wraps regionDistance with some exceptions to the algorithmic distance.
-func regionDist(a, b regionID, lang langID) uint8 {
- if lang == _en {
- // Two variants of non-US English are close to each other, regardless of distance.
- if a != _US && b != _US {
- return 2
- }
- }
- return uint8(regionDistance(a, b))
-}
-
-// regionDistance computes the distance between two regions based on the
-// distance in the graph of region containments as defined in CLDR. It iterates
-// over increasingly inclusive sets of groups, represented as bit vectors, until
-// the source bit vector has bits in common with the destination vector.
-func regionDistance(a, b regionID) int {
- if a == b {
- return 0
- }
- p, q := regionInclusion[a], regionInclusion[b]
- if p < nRegionGroups {
- p, q = q, p
- }
- set := regionInclusionBits
- if q < nRegionGroups && set[p]&(1<<q) != 0 {
- return 1
- }
- d := 2
- for goal := set[q]; set[p]&goal == 0; p = regionInclusionNext[p] {
- d++
}
- return d
+ return false
}
-func (t Tag) variants() string {
- if t.pVariant == 0 {
- return ""
- }
- return t.str[t.pVariant:t.pExt]
-}
+// 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
-// variantOrPrivateTagStr returns variants or private use tags.
-func (t Tag) variantOrPrivateTagStr() string {
- if t.pExt > 0 {
- return t.str[t.pVariant:t.pExt]
+ 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 t.str[t.pVariant:]
+ return defaultDistance, true
}
// equalsRest compares everything except the language.
-func (a Tag) equalsRest(b Tag) bool {
+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.script == b.script && a.region == b.region && a.variantOrPrivateTagStr() == b.variantOrPrivateTagStr()
+ 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 langID) bool {
+func isExactEquivalent(l language.Language) bool {
for _, o := range notEquivalent {
if o == l {
return false
@@ -827,15 +710,26 @@ func isExactEquivalent(l langID) bool {
return true
}
-var notEquivalent []langID
+var notEquivalent []language.Language
func init() {
// Create a list of all languages for which canonicalization may alter the
// script or region.
- for _, lm := range langAliasMap {
- tag := Tag{lang: langID(lm.from)}
- if tag, _ = tag.canonicalize(All); tag.script != 0 || tag.region != 0 {
- notEquivalent = append(notEquivalent, langID(lm.from))
+ 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
index cfa28f56e..11acfd885 100644
--- a/vendor/golang.org/x/text/language/parse.go
+++ b/vendor/golang.org/x/text/language/parse.go
@@ -5,216 +5,21 @@
package language
import (
- "bytes"
"errors"
- "fmt"
- "sort"
"strconv"
"strings"
- "golang.org/x/text/internal/tag"
+ "golang.org/x/text/internal/language"
)
-// 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")
-
// 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
-}
-
-func mkErrInvalid(s []byte) error {
- var e ValueError
- copy(e.v[:], s)
- 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'
- }
- }
-}
+type ValueError interface {
+ error
-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
- if end < cap(s.b) {
- b := make([]byte, len(s.b)+diff)
- copy(b, s.b[:oldStart])
- copy(b[end:], s.b[oldEnd:])
- s.b = b
- } else {
- s.b = append(s.b[end:], s.b[oldEnd:]...)
- }
- 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.setError(errSyntax)
- 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
+ // 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
@@ -223,7 +28,7 @@ func (s *scanner) acceptMinSize(min int) (end int) {
// 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
-// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
+// 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)
@@ -235,327 +40,18 @@ func Parse(s string) (t Tag, err error) {
// 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
-// http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
-// The resulting tag is canonicalized using the the canonicalization type c.
+// 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) {
- // 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
- }
+ tt, err := language.Parse(s)
+ if err != nil {
+ return makeTag(tt), err
}
- scan := makeScannerString(s)
- t, err = parse(&scan, s)
- t, changed := t.canonicalize(c)
+ tt, changed := canonicalize(c, tt)
if changed {
- t.remakeString()
- }
- return t, err
-}
-
-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.lang, e = getLangID(scan.token)
- scan.setError(e)
- scan.replace(t.lang.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.lang = 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.script, e = getScriptID(script, scan.token)
- if t.script == 0 {
- scan.gobble(e)
- }
- end = scan.scan()
- }
- if n := len(scan.token); n >= 2 && n <= 3 {
- t.region, e = getRegionID(scan.token)
- if t.region == 0 {
- scan.gobble(e)
- } else {
- scan.replace(t.region.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(mkErrInvalid(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 [][]byte
-
-func (b bytesSort) Len() int {
- return len(b)
-}
-
-func (b bytesSort) Swap(i, j int) {
- b[i], b[j] = b[j], b[i]
-}
-
-func (b bytesSort) Less(i, j int) bool {
- return bytes.Compare(b[i], b[j]) == -1
-}
-
-// 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)
+ tt.RemakeString()
}
- sort.Sort(bytesSort(exts))
- 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':
- 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))
- copy(scan.b[p:], bytes.Join(attrs, separator))
- break
- }
- last = scan.token
- end = scan.end
- }
- var last, key []byte
- for attrEnd := end; len(scan.token) == 2; last = key {
- key = scan.token
- keyEnd := scan.end
- end = scan.acceptMinSize(3)
- // TODO: check key value validity
- if keyEnd == end || bytes.Compare(key, last) != 1 {
- // 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, keyEnd := scan.start, scan.end
- end = scan.acceptMinSize(3)
- if keyEnd != end {
- keys = append(keys, scan.b[keyStart:end])
- } else {
- scan.setError(errSyntax)
- end = keyStart
- }
- }
- sort.Sort(bytesSort(keys))
- reordered := bytes.Join(keys, separator)
- if e := p + len(reordered); e < end {
- scan.deleteRange(e, end)
- end = e
- }
- copy(scan.b[p:], bytes.Join(keys, separator))
- break
- }
- }
- case 't':
- 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
+ return makeTag(tt), err
}
// Compose creates a Tag from individual parts, which may be of type Tag, Base,
@@ -563,10 +59,11 @@ func parseExtension(scan *scanner) int {
// 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. 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.
+// 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...)
}
@@ -576,196 +73,68 @@ func Compose(part ...interface{}) (t Tag, err error) {
// 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. 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.
+// 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 builder
- if err = b.update(part...); err != nil {
+ var b language.Builder
+ if err = update(&b, part...); err != nil {
return und, err
}
- t, _ = b.tag.canonicalize(c)
-
- if len(b.ext) > 0 || len(b.variant) > 0 {
- sort.Sort(sortVariant(b.variant))
- sort.Strings(b.ext)
- if b.private != "" {
- b.ext = append(b.ext, b.private)
- }
- n := maxCoreSize + tokenLen(b.variant...) + tokenLen(b.ext...)
- buf := make([]byte, n)
- p := t.genCoreBytes(buf)
- t.pVariant = byte(p)
- p += appendTokens(buf[p:], b.variant...)
- t.pExt = uint16(p)
- p += appendTokens(buf[p:], b.ext...)
- t.str = string(buf[:p])
- } else if b.private != "" {
- t.str = b.private
- t.remakeString()
- }
- return
-}
-
-type builder struct {
- tag Tag
-
- private string // the x extension
- ext []string
- variant []string
-
- err error
-}
-
-func (b *builder) addExt(e string) {
- if e == "" {
- } else if e[0] == 'x' {
- b.private = e
- } else {
- b.ext = append(b.ext, e)
- }
+ b.Tag, _ = canonicalize(c, b.Tag)
+ return makeTag(b.Make()), err
}
var errInvalidArgument = errors.New("invalid Extension or Variant")
-func (b *builder) update(part ...interface{}) (err error) {
- replace := func(l *[]string, s string, eq func(a, b string) bool) bool {
- if s == "" {
- b.err = errInvalidArgument
- return true
- }
- for i, v := range *l {
- if eq(v, s) {
- (*l)[i] = s
- return true
- }
- }
- return false
- }
+func update(b *language.Builder, part ...interface{}) (err error) {
for _, x := range part {
switch v := x.(type) {
case Tag:
- b.tag.lang = v.lang
- b.tag.region = v.region
- b.tag.script = v.script
- if v.str != "" {
- b.variant = nil
- for x, s := "", v.str[v.pVariant:v.pExt]; s != ""; {
- x, s = nextToken(s)
- b.variant = append(b.variant, x)
- }
- b.ext, b.private = nil, ""
- for i, e := int(v.pExt), ""; i < len(v.str); {
- i, e = getExtension(v.str, i)
- b.addExt(e)
- }
- }
+ b.SetTag(v.tag())
case Base:
- b.tag.lang = v.langID
+ b.Tag.LangID = v.langID
case Script:
- b.tag.script = v.scriptID
+ b.Tag.ScriptID = v.scriptID
case Region:
- b.tag.region = v.regionID
+ b.Tag.RegionID = v.regionID
case Variant:
- if !replace(&b.variant, v.variant, func(a, b string) bool { return a == b }) {
- b.variant = append(b.variant, v.variant)
+ if v.variant == "" {
+ err = errInvalidArgument
+ break
}
+ b.AddVariant(v.variant)
case Extension:
- if !replace(&b.ext, v.s, func(a, b string) bool { return a[0] == b[0] }) {
- b.addExt(v.s)
+ if v.s == "" {
+ err = errInvalidArgument
+ break
}
+ b.SetExt(v.s)
case []Variant:
- b.variant = nil
- for _, x := range v {
- b.update(x)
+ b.ClearVariants()
+ for _, v := range v {
+ b.AddVariant(v.variant)
}
case []Extension:
- b.ext, b.private = nil, ""
+ b.ClearExtensions()
for _, e := range v {
- b.update(e)
+ b.SetExt(e.s)
}
// TODO: support parsing of raw strings based on morphology or just extensions?
case error:
- err = v
- }
- }
- return
-}
-
-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 sortVariant []string
-
-func (s sortVariant) Len() int {
- return len(s)
-}
-
-func (s sortVariant) Swap(i, j int) {
- s[j], s[i] = s[i], s[j]
-}
-
-func (s sortVariant) Less(i, j int) bool {
- return variantIndex[s[i]] < variantIndex[s[j]]
-}
-
-func findExt(list []string, x byte) int {
- for i, e := range list {
- if e[0] == x {
- return i
- }
- }
- return -1
-}
-
-// 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
+ if v != nil {
+ err = v
}
- p += 3
- } else {
- p++
}
}
- return len(s)
+ return
}
var errInvalidWeight = errors.New("ParseAcceptLanguage: invalid weight")
-// ParseAcceptLanguage parses the contents of a Accept-Language header as
+// 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.
@@ -788,7 +157,7 @@ func ParseAcceptLanguage(s string) (tag []Tag, q []float32, err error) {
if !ok {
return nil, nil, err
}
- t = Tag{lang: id}
+ t = makeTag(language.Tag{LangID: id})
}
// Scan the optional weight.
@@ -830,9 +199,9 @@ func split(s string, c byte) (head, tail string) {
return strings.TrimSpace(s), ""
}
-// Add hack mapping to deal with a small number of cases that that occur
+// Add hack mapping to deal with a small number of cases that occur
// in Accept-Language (with reasonable frequency).
-var acceptFallback = map[string]langID{
+var acceptFallback = map[string]language.Language{
"english": _en,
"deutsch": _de,
"italian": _it,
diff --git a/vendor/golang.org/x/text/language/tables.go b/vendor/golang.org/x/text/language/tables.go
index ccdc1ff0f..e22807719 100644
--- a/vendor/golang.org/x/text/language/tables.go
+++ b/vendor/golang.org/x/text/language/tables.go
@@ -1,3547 +1,298 @@
-// This file was generated by go generate; DO NOT EDIT
+// 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 = "30"
-
-const numLanguages = 8654
-
-const numScripts = 230
-
-const numRegions = 356
-
-type fromTo struct {
- from uint16
- to uint16
-}
+const CLDRVersion = "32"
-const nonCanonicalUnd = 1191
const (
- _af = 21
- _am = 38
- _ar = 57
- _az = 87
- _bg = 125
- _bn = 163
- _ca = 213
- _cs = 246
- _da = 253
- _de = 265
- _el = 305
- _en = 308
- _es = 313
- _et = 315
- _fa = 323
- _fi = 332
- _fil = 334
- _fr = 345
- _gu = 413
- _he = 437
- _hi = 439
- _hr = 458
- _hu = 462
- _hy = 464
- _id = 474
- _is = 496
- _it = 497
- _ja = 504
- _ka = 520
- _kk = 570
- _km = 578
- _kn = 585
- _ko = 587
- _ky = 641
- _lo = 687
- _lt = 695
- _lv = 702
- _mk = 758
- _ml = 763
- _mn = 770
- _mo = 775
- _mr = 786
- _ms = 790
- _mul = 797
- _my = 808
- _nb = 830
- _ne = 840
- _nl = 862
- _no = 870
- _pa = 916
- _pl = 938
- _pt = 951
- _ro = 979
- _ru = 985
- _sh = 1021
- _si = 1026
- _sk = 1032
- _sl = 1036
- _sq = 1063
- _sr = 1064
- _sv = 1082
- _sw = 1083
- _ta = 1094
- _te = 1111
- _th = 1121
- _tl = 1136
- _tn = 1142
- _tr = 1152
- _uk = 1188
- _ur = 1194
- _uz = 1202
- _vi = 1209
- _zh = 1311
- _zu = 1316
- _jbo = 507
- _ami = 1639
- _bnn = 2346
- _hak = 431
- _tlh = 14456
- _lb = 652
- _nv = 890
- _pwn = 12044
- _tao = 14177
- _tay = 14187
- _tsu = 14651
- _nn = 865
- _sfb = 13618
- _vgt = 15690
- _sgg = 13649
- _cmn = 2996
- _nan = 826
- _hsn = 460
+ _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 langPrivateStart = 0x2f67
-
-const langPrivateEnd = 0x316e
-
-// 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: 5280 bytes
- "---\x00aaaraai\x00aak\x00aau\x00abbkabi\x00abr\x00abt\x00aby\x00acd\x00a" +
- "ce\x00ach\x00ada\x00ade\x00adj\x00ady\x00adz\x00aeveaeb\x00aey\x00affrag" +
- "c\x00agd\x00agg\x00agm\x00ago\x00agq\x00aha\x00ahl\x00aho\x00ajg\x00akka" +
- "akk\x00ala\x00ali\x00aln\x00alt\x00ammhamm\x00amn\x00amo\x00amp\x00anrga" +
- "nc\x00ank\x00ann\x00any\x00aoj\x00aom\x00aoz\x00apc\x00apd\x00ape\x00apr" +
- "\x00aps\x00apz\x00arraarc\x00arh\x00arn\x00aro\x00arq\x00ars\x00ary\x00a" +
- "rz\x00assmasa\x00ase\x00asg\x00aso\x00ast\x00ata\x00atg\x00atj\x00auy" +
- "\x00avvaavl\x00avn\x00avt\x00avu\x00awa\x00awb\x00awo\x00awx\x00ayymayb" +
- "\x00azzebaakbal\x00ban\x00bap\x00bar\x00bas\x00bav\x00bax\x00bba\x00bbb" +
- "\x00bbc\x00bbd\x00bbj\x00bbp\x00bbr\x00bcf\x00bch\x00bci\x00bcm\x00bcn" +
- "\x00bco\x00bcq\x00bcu\x00bdd\x00beelbef\x00beh\x00bej\x00bem\x00bet\x00b" +
- "ew\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\x00bjz\x00bkc\x00bkm\x00bkq\x00bku\x00bkv\x00blt\x00bmambmh\x00b" +
- "mk\x00bmq\x00bmu\x00bnenbng\x00bnm\x00bnp\x00boodboj\x00bom\x00bon\x00bp" +
- "y\x00bqc\x00bqi\x00bqp\x00bqv\x00brrebra\x00brh\x00brx\x00brz\x00bsosbsj" +
- "\x00bsq\x00bss\x00bst\x00bto\x00btt\x00btv\x00bua\x00buc\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\x00" +
- "chm\x00cho\x00chp\x00chr\x00cja\x00cjm\x00cjv\x00ckb\x00ckl\x00cko\x00ck" +
- "y\x00cla\x00cme\x00cooscop\x00cps\x00crrecrj\x00crk\x00crl\x00crm\x00crs" +
- "\x00csescsb\x00csw\x00ctd\x00cuhucvhvcyymdaandad\x00daf\x00dag\x00dah" +
- "\x00dak\x00dar\x00dav\x00dbd\x00dbq\x00dcc\x00ddn\x00deeuded\x00den\x00d" +
- "ga\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\x00dyo\x00dyu\x00dzzodzg\x00ebu" +
- "\x00eeweefi\x00egl\x00egy\x00eky\x00elllema\x00emi\x00enngenn\x00enq\x00" +
- "eopoeri\x00es\x00\x05esu\x00etstetr\x00ett\x00etu\x00etx\x00euusewo\x00e" +
- "xt\x00faasfaa\x00fab\x00fag\x00fai\x00fan\x00ffulffi\x00ffm\x00fiinfia" +
- "\x00fil\x00fit\x00fjijflr\x00fmp\x00foaofod\x00fon\x00for\x00fpe\x00fqs" +
- "\x00frrafrc\x00frp\x00frr\x00frs\x00fub\x00fud\x00fue\x00fuf\x00fuh\x00f" +
- "uq\x00fur\x00fuv\x00fuy\x00fvr\x00fyrygalegaa\x00gaf\x00gag\x00gah\x00ga" +
- "j\x00gam\x00gan\x00gaw\x00gay\x00gbf\x00gbm\x00gby\x00gbz\x00gcr\x00gdla" +
- "gde\x00gdn\x00gdr\x00geb\x00gej\x00gel\x00gez\x00gfk\x00ggn\x00ghs\x00gi" +
- "l\x00gim\x00gjk\x00gjn\x00gju\x00gkn\x00gkp\x00gllgglk\x00gmm\x00gmv\x00" +
- "gnrngnd\x00gng\x00god\x00gof\x00goi\x00gom\x00gon\x00gor\x00gos\x00got" +
- "\x00grc\x00grt\x00grw\x00gsw\x00guujgub\x00guc\x00gud\x00gur\x00guw\x00g" +
- "ux\x00guz\x00gvlvgvf\x00gvr\x00gvs\x00gwc\x00gwi\x00gwt\x00gyi\x00haauha" +
- "g\x00hak\x00ham\x00haw\x00haz\x00hbb\x00hdy\x00heebhhy\x00hiinhia\x00hif" +
- "\x00hig\x00hih\x00hil\x00hla\x00hlu\x00hmd\x00hmt\x00hnd\x00hne\x00hnj" +
- "\x00hnn\x00hno\x00homohoc\x00hoj\x00hot\x00hrrvhsb\x00hsn\x00htathuunhui" +
- "\x00hyyehzerianaian\x00iar\x00iba\x00ibb\x00iby\x00ica\x00ich\x00idndidd" +
- "\x00idi\x00idu\x00ieleigboigb\x00ige\x00iiiiijj\x00ikpkikk\x00ikt\x00ikw" +
- "\x00ikx\x00ilo\x00imo\x00inndinh\x00iodoiou\x00iri\x00isslittaiukuiw\x00" +
- "\x03iwm\x00iws\x00izh\x00izi\x00japnjab\x00jam\x00jbo\x00jbu\x00jen\x00j" +
- "gk\x00jgo\x00ji\x00\x06jib\x00jmc\x00jml\x00jra\x00jut\x00jvavjwavkaatka" +
- "a\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\x00k" +
- "gp\x00kha\x00khb\x00khn\x00khq\x00khs\x00kht\x00khw\x00khz\x00kiikkij" +
- "\x00kiu\x00kiw\x00kjuakjd\x00kjg\x00kjs\x00kjy\x00kkazkkc\x00kkj\x00klal" +
- "kln\x00klq\x00klt\x00klx\x00kmhmkmb\x00kmh\x00kmo\x00kms\x00kmu\x00kmw" +
- "\x00knanknp\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\x00saz\x00sba\x00sbe\x00sbp\x00scrdsck\x00s" +
- "cl\x00scn\x00sco\x00scs\x00sdndsdc\x00sdh\x00semesef\x00seh\x00sei\x00se" +
- "s\x00sgagsga\x00sgs\x00sgw\x00sgz\x00sh\x00\x02shi\x00shk\x00shn\x00shu" +
- "\x00siinsid\x00sig\x00sil\x00sim\x00sjr\x00sklkskc\x00skr\x00sks\x00sllv" +
- "sld\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\x00sssw" +
- "ssd\x00ssg\x00ssy\x00stotstk\x00stq\x00suunsua\x00sue\x00suk\x00sur\x00s" +
- "us\x00svweswwaswb\x00swc\x00swg\x00swp\x00swv\x00sxn\x00sxw\x00syl\x00sy" +
- "r\x00szl\x00taamtaj\x00tal\x00tan\x00taq\x00tbc\x00tbd\x00tbf\x00tbg\x00" +
- "tbo\x00tbw\x00tbz\x00tci\x00tcy\x00tdd\x00tdg\x00tdh\x00teelted\x00tem" +
- "\x00teo\x00tet\x00tfi\x00tggktgc\x00tgo\x00tgu\x00thhathl\x00thq\x00thr" +
- "\x00tiirtif\x00tig\x00tik\x00tim\x00tio\x00tiv\x00tkuktkl\x00tkr\x00tkt" +
- "\x00tlgltlf\x00tlx\x00tly\x00tmh\x00tmy\x00tnsntnh\x00toontof\x00tog\x00" +
- "toq\x00tpi\x00tpm\x00tpz\x00tqo\x00trurtru\x00trv\x00trw\x00tssotsd\x00t" +
- "sf\x00tsg\x00tsj\x00tsw\x00ttatttd\x00tte\x00ttj\x00ttr\x00tts\x00ttt" +
- "\x00tuh\x00tul\x00tum\x00tuq\x00tvd\x00tvl\x00tvu\x00twwitwh\x00twq\x00t" +
- "xg\x00tyahtya\x00tyv\x00tzm\x00ubu\x00udm\x00ugiguga\x00ukkruli\x00umb" +
- "\x00und\x00unr\x00unx\x00urrduri\x00urt\x00urw\x00usa\x00utr\x00uvh\x00u" +
- "vl\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\x00woolw" +
- "ob\x00wos\x00wrs\x00wsk\x00wtm\x00wuu\x00wuv\x00wwa\x00xav\x00xbi\x00xcr" +
- "\x00xes\x00xhhoxla\x00xlc\x00xld\x00xmf\x00xmn\x00xmr\x00xna\x00xnr\x00x" +
- "og\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\x00yooryon\x00yrb" +
- "\x00yre\x00yrl\x00yss\x00yua\x00yue\x00yuj\x00yut\x00yuw\x00zahazag\x00z" +
- "bl\x00zdj\x00zea\x00zgh\x00zhhozia\x00zlm\x00zmi\x00zne\x00zuulzxx\x00zz" +
- "a\x00\xff\xff\xff\xff"
-
-const langNoIndexOffset = 1319
-
-// 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, 0xd7, 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, 0x7f, 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, 0x20, 0x41, 0x00, 0x50, 0x40, 0x00, 0x80,
- // Entry C0 - FF
- 0xfb, 0x4a, 0xf2, 0x9f, 0xb4, 0x42, 0x41, 0x96,
- 0x1b, 0x14, 0x08, 0xf2, 0x2b, 0xe7, 0x17, 0x56,
- 0x45, 0x7d, 0x0e, 0x1c, 0x37, 0x71, 0xf3, 0xef,
- 0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10,
- 0xbc, 0x87, 0xaf, 0xdf, 0xff, 0xf7, 0x73, 0x35,
- 0x3e, 0x87, 0xc7, 0xdf, 0xff, 0x00, 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, 0xc5, 0x67, 0x5f,
- 0x56, 0x89, 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, 0x08, 0x16,
- 0x01, 0x00, 0x00, 0xb0, 0x14, 0x03, 0x50, 0x06,
- 0x0a, 0x00, 0x01, 0x00, 0x00, 0x00, 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, 0x50, 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, 0x01, 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, 0x7e, 0xbf,
- // Entry 200 - 23F
- 0xdf, 0xc3, 0x83, 0x82, 0xc0, 0xfb, 0x57, 0x27,
- 0xcd, 0x55, 0xe7, 0x01, 0x00, 0x20, 0xb2, 0xc5,
- 0xa4, 0x45, 0x25, 0x9b, 0x02, 0xcf, 0xe0, 0xdf,
- 0x03, 0x44, 0x08, 0x10, 0x01, 0x04, 0x01, 0xe3,
- 0x92, 0x54, 0xdb, 0x28, 0xd1, 0x5f, 0xf6, 0x6d,
- 0x79, 0xed, 0x1c, 0x7d, 0x04, 0x08, 0x00, 0x01,
- 0x21, 0x12, 0x6c, 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, 0x38, 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, 0x04, 0x04, 0x68, 0x00, 0x20, 0x70, 0xff,
- 0x7b, 0x7f, 0x60, 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,
- 0x08, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x60,
- 0xe5, 0x48, 0x00, 0x81, 0x20, 0xc0, 0x05, 0x80,
- 0x03, 0x00, 0x00, 0x00, 0xcc, 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, 0xff,
- 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, 0xd9, 0x0e, 0x11,
- 0x84, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x00, 0x01,
- 0x05, 0xd1, 0x50, 0x58, 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, 0x8e, 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, 0xbd,
- 0xcd, 0xff, 0xfb, 0xff, 0xdf, 0xd7, 0xea, 0xff,
- 0xe5, 0x5f, 0x6d, 0x0f, 0xa7, 0x51, 0x04, 0x44,
- // Entry 480 - 4BF
- 0x13, 0x50, 0x5d, 0xaf, 0xa6, 0xfd, 0x99, 0xfb,
- 0x63, 0x1d, 0x53, 0xff, 0xef, 0xb7, 0x35, 0x20,
- 0x14, 0x00, 0x55, 0x51, 0x82, 0x65, 0xf5, 0x41,
- 0xe2, 0xff, 0xfc, 0xdf, 0x00, 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,
- 0xba, 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, 0xe5, 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, 0xf2, 0xb9, 0xff, 0xfd, 0x3f,
- 0x1f, 0x18, 0xcf, 0x9c, 0xbf, 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, 0x82, 0xf1, 0x57, 0x6c,
- 0xff, 0xe4, 0xef, 0x6f, 0xff, 0xfc, 0xdd, 0xde,
- 0xfc, 0xfd, 0x76, 0x5f, 0x7a, 0x1f, 0x00, 0x98,
- 0x02, 0xfb, 0xa3, 0xef, 0xf3, 0xd6, 0xf2, 0xff,
- 0xb9, 0xda, 0x7d, 0x50, 0x1e, 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, 0x53, 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, 0x8c, 0x58, 0xd5, 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, 0x08, 0x41,
- 0x04, 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,
- 0xa0, 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, 0x00, 0x55, 0x55,
- 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, 0x00, 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, 0x19, 0xc7, 0x0c, 0xd5, 0x42,
- 0x54, 0xdd, 0x77, 0x14, 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, 0x3f, 0x05, 0x00, 0x12, 0x81,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x02, 0x28,
- 0x84, 0x00, 0x23, 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{
- 0x0278, 0x03fd, 0x01f3, 0x03dc, 0x0139, 0x0200,
-}
-
-// langAliasMap maps langIDs to their suggested replacements.
-// Size: 644 bytes, 161 elements
-var langAliasMap = [161]fromTo{
- 0: {from: 0x81, to: 0x87},
- 1: {from: 0x181, to: 0x1a7},
- 2: {from: 0x1eb, to: 0x1da},
- 3: {from: 0x1f3, to: 0x1b5},
- 4: {from: 0x200, to: 0x508},
- 5: {from: 0x207, to: 0x206},
- 6: {from: 0x307, to: 0x3d3},
- 7: {from: 0x33e, to: 0x366},
- 8: {from: 0x3fd, to: 0x428},
- 9: {from: 0x470, to: 0x14e},
- 10: {from: 0x486, to: 0x447},
- 11: {from: 0x498, to: 0x20},
- 12: {from: 0x533, to: 0x539},
- 13: {from: 0x584, to: 0x129},
- 14: {from: 0x625, to: 0x1ea6},
- 15: {from: 0x646, to: 0x427},
- 16: {from: 0x657, to: 0x427},
- 17: {from: 0x6e2, to: 0x39},
- 18: {from: 0x6ed, to: 0x1d0},
- 19: {from: 0x733, to: 0x2196},
- 20: {from: 0x7a8, to: 0x55},
- 21: {from: 0x7ae, to: 0x2990},
- 22: {from: 0x7ba, to: 0x57},
- 23: {from: 0x7db, to: 0x140},
- 24: {from: 0x801, to: 0x59},
- 25: {from: 0x80a, to: 0x8c},
- 26: {from: 0x873, to: 0x805},
- 27: {from: 0x8b8, to: 0xed8},
- 28: {from: 0x9e4, to: 0x328},
- 29: {from: 0xa2b, to: 0x2bc},
- 30: {from: 0xa32, to: 0xbd},
- 31: {from: 0xab3, to: 0x3317},
- 32: {from: 0xb2d, to: 0x51f},
- 33: {from: 0xb6a, to: 0x264f},
- 34: {from: 0xb73, to: 0xbb8},
- 35: {from: 0xb90, to: 0x444},
- 36: {from: 0xbb1, to: 0x421e},
- 37: {from: 0xbb4, to: 0x51f},
- 38: {from: 0xbf3, to: 0x2d9c},
- 39: {from: 0xc23, to: 0x3176},
- 40: {from: 0xcae, to: 0xf0},
- 41: {from: 0xcfd, to: 0xf6},
- 42: {from: 0xdbd, to: 0x116},
- 43: {from: 0xdcc, to: 0x324},
- 44: {from: 0xded, to: 0xdf0},
- 45: {from: 0xdf3, to: 0x526},
- 46: {from: 0xed4, to: 0x204f},
- 47: {from: 0xee3, to: 0x2e8f},
- 48: {from: 0xf2e, to: 0x35e},
- 49: {from: 0x10c5, to: 0x13b},
- 50: {from: 0x10f9, to: 0x2c7},
- 51: {from: 0x1195, to: 0x1e4},
- 52: {from: 0x126e, to: 0x20},
- 53: {from: 0x1419, to: 0x159},
- 54: {from: 0x1465, to: 0x149},
- 55: {from: 0x1514, to: 0xd90},
- 56: {from: 0x1518, to: 0x387},
- 57: {from: 0x1527, to: 0x16ba},
- 58: {from: 0x1575, to: 0x208},
- 59: {from: 0x1578, to: 0x109},
- 60: {from: 0x1598, to: 0x3ca4},
- 61: {from: 0x165f, to: 0x195},
- 62: {from: 0x16bd, to: 0x131},
- 63: {from: 0x16f5, to: 0x29ed},
- 64: {from: 0x170d, to: 0x18e},
- 65: {from: 0x171c, to: 0xf34},
- 66: {from: 0x176f, to: 0x1519},
- 67: {from: 0x17fe, to: 0x17ab},
- 68: {from: 0x180b, to: 0x18e8},
- 69: {from: 0x187f, to: 0x42c},
- 70: {from: 0x196e, to: 0x1cf6},
- 71: {from: 0x1a69, to: 0x2ba5},
- 72: {from: 0x1a7f, to: 0x1f0},
- 73: {from: 0x1b4f, to: 0x1f2},
- 74: {from: 0x1b7b, to: 0x150a},
- 75: {from: 0x202d, to: 0x37a6},
- 76: {from: 0x2032, to: 0x20d2},
- 77: {from: 0x204f, to: 0x302},
- 78: {from: 0x20d8, to: 0x26b},
- 79: {from: 0x20e3, to: 0x25a},
- 80: {from: 0x20e7, to: 0x225},
- 81: {from: 0x20ee, to: 0x24d},
- 82: {from: 0x2104, to: 0x21e0},
- 83: {from: 0x212a, to: 0x274},
- 84: {from: 0x218e, to: 0x11d},
- 85: {from: 0x21c3, to: 0x1556},
- 86: {from: 0x21db, to: 0x4fa},
- 87: {from: 0x21e9, to: 0x495},
- 88: {from: 0x2222, to: 0x11d},
- 89: {from: 0x222c, to: 0x11d},
- 90: {from: 0x2257, to: 0x91f},
- 91: {from: 0x230b, to: 0x321b},
- 92: {from: 0x2377, to: 0x335a},
- 93: {from: 0x2467, to: 0x2be},
- 94: {from: 0x24d9, to: 0x2f6},
- 95: {from: 0x24e5, to: 0x2f1},
- 96: {from: 0x24ef, to: 0x316},
- 97: {from: 0x2545, to: 0xb50},
- 98: {from: 0x259e, to: 0xe0},
- 99: {from: 0x2633, to: 0x2c7},
- 100: {from: 0x26be, to: 0x26a9},
- 101: {from: 0x26ee, to: 0x3bf},
- 102: {from: 0x271c, to: 0x3ca4},
- 103: {from: 0x275a, to: 0x26a9},
- 104: {from: 0x277e, to: 0x434d},
- 105: {from: 0x28e4, to: 0x282c},
- 106: {from: 0x2909, to: 0x348},
- 107: {from: 0x297b, to: 0x2d9c},
- 108: {from: 0x2b0f, to: 0x384},
- 109: {from: 0x2bf1, to: 0x38c},
- 110: {from: 0x2c34, to: 0x3ca4},
- 111: {from: 0x2cf1, to: 0x3b5},
- 112: {from: 0x2d08, to: 0x58c},
- 113: {from: 0x2d3c, to: 0x143},
- 114: {from: 0x2d3d, to: 0x143},
- 115: {from: 0x2df4, to: 0x2e8},
- 116: {from: 0x2dfd, to: 0x19c1},
- 117: {from: 0x2e0f, to: 0x2d8a},
- 118: {from: 0x2e16, to: 0x289},
- 119: {from: 0x2e49, to: 0x7c},
- 120: {from: 0x2e5a, to: 0x2277},
- 121: {from: 0x2e95, to: 0x2e90},
- 122: {from: 0x2ee4, to: 0x2ecc},
- 123: {from: 0x3188, to: 0x3bb},
- 124: {from: 0x335b, to: 0x3383},
- 125: {from: 0x341f, to: 0x3d3},
- 126: {from: 0x34e3, to: 0x18c5},
- 127: {from: 0x35db, to: 0x408},
- 128: {from: 0x364d, to: 0x23e},
- 129: {from: 0x366b, to: 0x3ea},
- 130: {from: 0x36f2, to: 0x43b},
- 131: {from: 0x37b5, to: 0x11d},
- 132: {from: 0x380b, to: 0x38e7},
- 133: {from: 0x3820, to: 0x2c90},
- 134: {from: 0x3824, to: 0xa7},
- 135: {from: 0x3827, to: 0x321d},
- 136: {from: 0x3861, to: 0x399b},
- 137: {from: 0x3887, to: 0x3fb5},
- 138: {from: 0x389a, to: 0x39cc},
- 139: {from: 0x38a9, to: 0x1f99},
- 140: {from: 0x38aa, to: 0x2e8f},
- 141: {from: 0x3951, to: 0x474},
- 142: {from: 0x3b43, to: 0xd86},
- 143: {from: 0x3b6d, to: 0x132},
- 144: {from: 0x3c8e, to: 0x4b2},
- 145: {from: 0x3fb2, to: 0xfc},
- 146: {from: 0x41fd, to: 0xa86},
- 147: {from: 0x42b3, to: 0x568},
- 148: {from: 0x42ee, to: 0x3f55},
- 149: {from: 0x436d, to: 0x251},
- 150: {from: 0x43c0, to: 0x36c0},
- 151: {from: 0x43c2, to: 0x10b},
- 152: {from: 0x44a4, to: 0x3317},
- 153: {from: 0x44d8, to: 0x508},
- 154: {from: 0x45bf, to: 0x23fe},
- 155: {from: 0x45d2, to: 0x26d1},
- 156: {from: 0x4605, to: 0x48a3},
- 157: {from: 0x46a3, to: 0x4695},
- 158: {from: 0x4733, to: 0x473a},
- 159: {from: 0x490b, to: 0x316},
- 160: {from: 0x499c, to: 0x519},
-}
-
-// Size: 161 bytes, 161 elements
-var langAliasTypes = [161]langAliasType{
- // Entry 0 - 3F
- 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 1, 2,
- 1, 1, 2, 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,
- 2, 1, 1, 1, 1, 2, 1, 0, 1, 1, 2, 2, 0, 1, 2, 0,
- // Entry 40 - 7F
- 1, 0, 1, 1, 1, 1, 0, 0, 2, 1, 0, 0, 0, 1, 1, 1,
- 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 2, 2,
- 2, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1,
- 0, 2, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 2,
- // Entry 80 - BF
- 1, 1, 1, 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, 1,
- 1,
-}
-
const (
- _Latn = 82
- _Hani = 50
- _Hans = 52
- _Hant = 53
- _Qaaa = 131
- _Qaai = 139
- _Qabx = 180
- _Zinh = 224
- _Zyyy = 229
- _Zzzz = 230
+ _Latn = 87
+ _Hani = 54
+ _Hans = 56
+ _Hant = 57
+ _Qaaa = 139
+ _Qaai = 147
+ _Qabx = 188
+ _Zinh = 236
+ _Zyyy = 241
+ _Zzzz = 242
)
-// 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: 928 bytes
- "----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" +
- "BrahBraiBugiBuhdCakmCansCariChamCherCirtCoptCprtCyrlCyrsDevaDsrtDuplEgyd" +
- "EgyhEgypElbaEthiGeokGeorGlagGothGranGrekGujrGuruHanbHangHaniHanoHansHant" +
- "HatrHebrHiraHluwHmngHrktHungIndsItalJamoJavaJpanJurcKaliKanaKharKhmrKhoj" +
- "KitlKitsKndaKoreKpelKthiLanaLaooLatfLatgLatnLekeLepcLimbLinaLinbLisuLoma" +
- "LyciLydiMahjMandManiMarcMayaMendMercMeroMlymModiMongMoonMrooMteiMultMymr" +
- "NarbNbatNewaNkgbNkooNshuOgamOlckOrkhOryaOsgeOsmaPalmPaucPermPhagPhliPhlp" +
- "PhlvPhnxPiqdPlrdPrtiQaaaQaabQaacQaadQaaeQaafQaagQaahQaaiQaajQaakQaalQaam" +
- "QaanQaaoQaapQaaqQaarQaasQaatQaauQaavQaawQaaxQaayQaazQabaQabbQabcQabdQabe" +
- "QabfQabgQabhQabiQabjQabkQablQabmQabnQaboQabpQabqQabrQabsQabtQabuQabvQabw" +
- "QabxRjngRoroRunrSamrSaraSarbSaurSgnwShawShrdSiddSindSinhSoraSundSyloSyrc" +
- "SyreSyrjSyrnTagbTakrTaleTaluTamlTangTavtTeluTengTfngTglgThaaThaiTibtTirh" +
- "UgarVaiiVispWaraWoleXpeoXsuxYiiiZinhZmthZsyeZsymZxxxZyyyZzzz\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: 1319 bytes, 1319 elements
-var suppressScript = [1319]uint8{
+var regionToGroups = []uint8{ // 357 elements
// Entry 0 - 3F
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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
- 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 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,
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00,
+ 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, 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, 0x52, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x52, 0x52, 0x00, 0x00,
// Entry 100 - 13F
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00,
- 0x00, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x2d, 0x00, 0x00, 0x52, 0x00, 0x00, 0x52,
- 0x00, 0x52, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
- // Entry 140 - 17F
- 0x52, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
- 0x52, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x52, 0x00, 0x00, 0x52, 0x52, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x52, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x52, 0x00, 0x00, 0x00, 0x52, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x52, 0x2e, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x20,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- // Entry 1C0 - 1FF
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x52, 0x52, 0x00, 0x52, 0x52, 0x00,
- 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
- 0x52, 0x52, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00,
- 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- // Entry 200 - 23F
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x29, 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,
- 0x00, 0x00, 0x1e, 0x00, 0x00, 0x52, 0x00, 0x00,
- // Entry 240 - 27F
- 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x4a, 0x00, 0x4b, 0x00, 0x20, 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, 0x00, 0x00, 0x00,
- // Entry 280 - 2BF
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x52, 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, 0x52, 0x00, 0x00, 0x4f,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
- // Entry 2C0 - 2FF
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 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, 0x52,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00,
- 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00,
- // Entry 300 - 33F
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x52, 0x52,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
- // Entry 340 - 37F
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x52,
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
- 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x70, 0x52, 0x00, 0x00,
- 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
- // Entry 380 - 3BF
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
- 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x52,
- 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
- // Entry 3C0 - 3FF
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
- 0x52, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x1e, 0x00, 0x00, 0x52, 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,
- 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- // Entry 400 - 43F
- 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
- 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
- 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x52, 0x52, 0x00, 0x00, 0x00, 0x00,
- // Entry 440 - 47F
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0,
- 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xd5, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00,
- 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x52, 0x00,
- 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
- // Entry 480 - 4BF
- 0x52, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00,
- 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- // Entry 4C0 - 4FF
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,
- 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- // Entry 500 - 53F
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x37, 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, 0x52, 0x00, 0x00,
-}
-
-const (
- _001 = 1
- _419 = 30
- _BR = 64
- _CA = 72
- _ES = 109
- _GB = 122
- _MD = 187
- _PT = 237
- _UK = 305
- _US = 308
- _ZZ = 356
- _XA = 322
- _XC = 324
- _XK = 332
-)
-
-// 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 = 31
-
-// regionTypes defines the status of a region for various standards.
-// Size: 357 bytes, 357 elements
-var regionTypes = [357]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, 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, 0x06,
- // Entry 40 - 7F
- 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, 0x06,
- // Entry 80 - BF
- 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, 0x06,
- // Entry C0 - FF
- 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, 0x05,
- // Entry 100 - 13F
- 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, 0x06,
- // Entry 140 - 17F
- 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{
- 0x0056, 0x006f, 0x0087, 0x00a7, 0x00a9, 0x00ac, 0x00e9, 0x0104,
- 0x0120, 0x015e, 0x00db,
-}
-
-// Size: 80 bytes, 20 elements
-var regionOldMap = [20]fromTo{
- 0: {from: 0x43, to: 0xc3},
- 1: {from: 0x57, to: 0xa6},
- 2: {from: 0x5e, to: 0x5f},
- 3: {from: 0x65, to: 0x3a},
- 4: {from: 0x78, to: 0x77},
- 5: {from: 0x92, to: 0x36},
- 6: {from: 0xa2, to: 0x132},
- 7: {from: 0xc0, to: 0x132},
- 8: {from: 0xd6, to: 0x13e},
- 9: {from: 0xdb, to: 0x2a},
- 10: {from: 0xee, to: 0x132},
- 11: {from: 0xf1, to: 0xe1},
- 12: {from: 0xfb, to: 0x6f},
- 13: {from: 0x102, to: 0x163},
- 14: {from: 0x129, to: 0x125},
- 15: {from: 0x131, to: 0x7a},
- 16: {from: 0x139, to: 0x13d},
- 17: {from: 0x140, to: 0x132},
- 18: {from: 0x15c, to: 0x15d},
- 19: {from: 0x162, to: 0x4a},
-}
-
-// m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are
-// codes indicating collections of regions.
-// Size: 714 bytes, 357 elements
-var m49 = [357]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, 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, 535,
- // Entry 40 - 7F
- 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, 288,
- // Entry 80 - BF
- 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, 584,
- // Entry C0 - FF
- 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, 971,
- // Entry 100 - 13F
- 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, 876,
- // Entry 140 - 17F
- 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, 107, 142, 180, 219, 258, 290,
- 332,
-}
-
-// fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details.
-// Size: 664 bytes, 332 elements
-var fromM49 = [332]uint16{
- // Entry 0 - 3F
- 0x0201, 0x0402, 0x0603, 0x0823, 0x0a04, 0x1026, 0x1205, 0x142a,
- 0x1606, 0x1866, 0x1a07, 0x1c08, 0x1e09, 0x202c, 0x220a, 0x240b,
- 0x260c, 0x2821, 0x2a0d, 0x3029, 0x3824, 0x3a0e, 0x3c0f, 0x3e31,
- 0x402b, 0x4410, 0x4611, 0x482e, 0x4e12, 0x502d, 0x5841, 0x6038,
- 0x6434, 0x6627, 0x6833, 0x6a13, 0x6c14, 0x7035, 0x7215, 0x783c,
- 0x7a16, 0x8042, 0x883e, 0x8c32, 0x9045, 0x9444, 0x9840, 0xa847,
- 0xac99, 0xb508, 0xb93b, 0xc03d, 0xc837, 0xd0c3, 0xd839, 0xe046,
- 0xe8a5, 0xf051, 0xf848, 0x0859, 0x10ac, 0x184b, 0x1c17, 0x1e18,
- // Entry 40 - 7F
- 0x20b2, 0x2219, 0x291f, 0x2c1a, 0x2e1b, 0x3050, 0x341c, 0x361d,
- 0x3852, 0x3d2d, 0x445b, 0x4c49, 0x5453, 0x5ca7, 0x5f5e, 0x644c,
- 0x684a, 0x704f, 0x7855, 0x7e8f, 0x8058, 0x885c, 0x965d, 0x983a,
- 0xa062, 0xa863, 0xac64, 0xb468, 0xbd19, 0xc485, 0xcc6e, 0xce6e,
- 0xd06c, 0xd269, 0xd475, 0xdc73, 0xde87, 0xe472, 0xec71, 0xf030,
- 0xf278, 0xf477, 0xfc7d, 0x04e4, 0x0920, 0x0c61, 0x1479, 0x187c,
- 0x1c82, 0x26ec, 0x285f, 0x2c5e, 0x305f, 0x407f, 0x4880, 0x50a6,
- 0x5886, 0x6081, 0x687b, 0x7084, 0x7889, 0x8088, 0x8883, 0x908b,
- // Entry 80 - BF
- 0x9890, 0x9c8d, 0xa137, 0xa88e, 0xb08c, 0xb891, 0xc09c, 0xc898,
- 0xd094, 0xd89b, 0xe09a, 0xe895, 0xf096, 0xf89d, 0x004e, 0x089f,
- 0x10a1, 0x1cad, 0x20a0, 0x28a3, 0x30a9, 0x34aa, 0x3cab, 0x42a4,
- 0x44ae, 0x461e, 0x4caf, 0x54b4, 0x58b7, 0x5cb3, 0x64b8, 0x6cb1,
- 0x70b5, 0x74b6, 0x7cc5, 0x84be, 0x8ccd, 0x94cf, 0x9ccc, 0xa4c2,
- 0xacca, 0xb4c7, 0xbcc8, 0xc0cb, 0xc8ce, 0xd8ba, 0xe0c4, 0xe4bb,
- 0xe6bc, 0xe8c9, 0xf0b9, 0xf8d0, 0x00e0, 0x08d1, 0x10dc, 0x18da,
- 0x20d8, 0x2428, 0x265a, 0x2a2f, 0x2d1a, 0x2e3f, 0x30dd, 0x38d2,
- // Entry C0 - FF
- 0x493e, 0x54df, 0x5cd7, 0x64d3, 0x6cd5, 0x74de, 0x7cd4, 0x84d9,
- 0x88c6, 0x8b32, 0x8e74, 0x90bf, 0x92ef, 0x94e7, 0x9ee1, 0xace5,
- 0xb0f0, 0xb8e3, 0xc0e6, 0xc8ea, 0xd0e8, 0xd8ed, 0xe08a, 0xe525,
- 0xeceb, 0xf4f2, 0xfd01, 0x0503, 0x0705, 0x0d06, 0x183b, 0x1d0d,
- 0x26a8, 0x2825, 0x2cb0, 0x2ebd, 0x34e9, 0x3d38, 0x4512, 0x4d17,
- 0x5507, 0x5d13, 0x6104, 0x6509, 0x6d11, 0x7d0c, 0x7f10, 0x813d,
- 0x830e, 0x8514, 0x8d60, 0x9963, 0xa15c, 0xa86d, 0xb116, 0xb30a,
- 0xb86b, 0xc10a, 0xc915, 0xd10f, 0xd91c, 0xe10b, 0xe84d, 0xf11b,
- // Entry 100 - 13F
- 0xf523, 0xf922, 0x0121, 0x0924, 0x1128, 0x192b, 0x2022, 0x2927,
- 0x312a, 0x3726, 0x391e, 0x3d2c, 0x4130, 0x492f, 0x4ec1, 0x5518,
- 0x646a, 0x747a, 0x7e7e, 0x809e, 0x8297, 0x852e, 0x9134, 0xa53c,
- 0xac36, 0xb535, 0xb936, 0xbd3a, 0xd93f, 0xe541, 0xed5d, 0xef5d,
- 0xf656, 0xfd61, 0x7c1f, 0x7ef3, 0x80f4, 0x82f5, 0x84f6, 0x86f7,
- 0x88f8, 0x8af9, 0x8cfa, 0x8e6f, 0x90fc, 0x92fd, 0x94fe, 0x96ff,
- 0x9900, 0x9b42, 0x9d43, 0x9f44, 0xa145, 0xa346, 0xa547, 0xa748,
- 0xa949, 0xab4a, 0xad4b, 0xaf4c, 0xb14d, 0xb34e, 0xb54f, 0xb750,
- // Entry 140 - 17F
- 0xb951, 0xbb52, 0xbd53, 0xbf54, 0xc155, 0xc356, 0xc557, 0xc758,
- 0xc959, 0xcb5a, 0xcd5b, 0xcf64,
-}
-
-// Size: 1463 bytes
-var variantIndex = map[string]uint8{
- "1606nict": 0x0,
- "1694acad": 0x1,
- "1901": 0x2,
- "1959acad": 0x3,
- "1994": 0x45,
- "1996": 0x4,
- "abl1943": 0x5,
- "alalc97": 0x47,
- "aluku": 0x6,
- "ao1990": 0x7,
- "arevela": 0x8,
- "arevmda": 0x9,
- "baku1926": 0xa,
- "balanka": 0xb,
- "barla": 0xc,
- "basiceng": 0xd,
- "bauddha": 0xe,
- "biscayan": 0xf,
- "biske": 0x40,
- "bohoric": 0x10,
- "boont": 0x11,
- "colb1945": 0x12,
- "cornu": 0x13,
- "dajnko": 0x14,
- "ekavsk": 0x15,
- "emodeng": 0x16,
- "fonipa": 0x48,
- "fonnapa": 0x49,
- "fonupa": 0x4a,
- "fonxsamp": 0x4b,
- "hepburn": 0x17,
- "heploc": 0x46,
- "hognorsk": 0x18,
- "ijekavsk": 0x19,
- "itihasa": 0x1a,
- "jauer": 0x1b,
- "jyutping": 0x1c,
- "kkcor": 0x1d,
- "kociewie": 0x1e,
- "kscor": 0x1f,
- "laukika": 0x20,
- "lipaw": 0x41,
- "luna1918": 0x21,
- "metelko": 0x22,
- "monoton": 0x23,
- "ndyuka": 0x24,
- "nedis": 0x25,
- "newfound": 0x26,
- "njiva": 0x42,
- "nulik": 0x27,
- "osojs": 0x43,
- "oxendict": 0x28,
- "pamaka": 0x29,
- "petr1708": 0x2a,
- "pinyin": 0x2b,
- "polyton": 0x2c,
- "puter": 0x2d,
- "rigik": 0x2e,
- "rozaj": 0x2f,
- "rumgr": 0x30,
- "scotland": 0x31,
- "scouse": 0x32,
- "simple": 0x4c,
- "solba": 0x44,
- "sotav": 0x33,
- "surmiran": 0x34,
- "sursilv": 0x35,
- "sutsilv": 0x36,
- "tarask": 0x37,
- "uccor": 0x38,
- "ucrcor": 0x39,
- "ulster": 0x3a,
- "unifon": 0x3b,
- "vaidika": 0x3c,
- "valencia": 0x3d,
- "vallader": 0x3e,
- "wadegile": 0x3f,
-}
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+} // Size: 381 bytes
-// variantNumSpecialized is the number of specialized variants in variants.
-const variantNumSpecialized = 71
-
-// nRegionGroups is the number of region groups.
-const nRegionGroups = 32
-
-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: 928 bytes, 232 elements
-var likelyScript = [232]likelyLangRegion{
- 1: {lang: 0x149, region: 0x83},
- 3: {lang: 0x299, region: 0x105},
- 4: {lang: 0x1e, region: 0x98},
- 5: {lang: 0x39, region: 0x6a},
- 7: {lang: 0x3a, region: 0x9b},
- 8: {lang: 0x1d0, region: 0x27},
- 9: {lang: 0x12, region: 0x9b},
- 10: {lang: 0x5a, region: 0x94},
- 11: {lang: 0x5f, region: 0x51},
- 12: {lang: 0xb7, region: 0xb3},
- 13: {lang: 0x62, region: 0x94},
- 14: {lang: 0xa3, region: 0x34},
- 15: {lang: 0x3e0, region: 0x98},
- 17: {lang: 0x51f, region: 0x12d},
- 18: {lang: 0x3a8, region: 0x98},
- 19: {lang: 0x159, region: 0x77},
- 20: {lang: 0xc0, region: 0x94},
- 21: {lang: 0x9b, region: 0xe6},
- 22: {lang: 0xd9, region: 0x34},
- 23: {lang: 0xf0, region: 0x48},
- 24: {lang: 0x4e6, region: 0x12a},
- 25: {lang: 0xe5, region: 0x13d},
- 26: {lang: 0xe3, region: 0x134},
- 28: {lang: 0xee, region: 0x6a},
- 29: {lang: 0x199, region: 0x5c},
- 30: {lang: 0x3d9, region: 0x105},
- 32: {lang: 0x1b7, region: 0x98},
- 34: {lang: 0x159, region: 0x77},
- 37: {lang: 0x12f, region: 0x6a},
- 38: {lang: 0x427, region: 0x26},
- 39: {lang: 0x26, region: 0x6e},
- 41: {lang: 0x208, region: 0x7c},
- 42: {lang: 0xfa, region: 0x37},
- 43: {lang: 0x198, region: 0x12f},
- 44: {lang: 0x3e0, region: 0x98},
- 45: {lang: 0x131, region: 0x86},
- 46: {lang: 0x19d, region: 0x98},
- 47: {lang: 0x394, region: 0x98},
- 48: {lang: 0x51f, region: 0x12d},
- 49: {lang: 0x24b, region: 0xaa},
- 50: {lang: 0x51f, region: 0x52},
- 51: {lang: 0x1c4, region: 0xe6},
- 52: {lang: 0x51f, region: 0x52},
- 53: {lang: 0x51f, region: 0x12d},
- 54: {lang: 0x2f4, region: 0x9a},
- 55: {lang: 0x1b5, region: 0x96},
- 56: {lang: 0x1f8, region: 0xa1},
- 57: {lang: 0x1be, region: 0x12a},
- 58: {lang: 0x1c3, region: 0xae},
- 60: {lang: 0x1ce, region: 0x91},
- 62: {lang: 0x13d, region: 0x9d},
- 63: {lang: 0x24b, region: 0xaa},
- 64: {lang: 0x206, region: 0x94},
- 65: {lang: 0x1f8, region: 0xa1},
- 67: {lang: 0x130, region: 0xc3},
- 68: {lang: 0x1f8, region: 0xa1},
- 69: {lang: 0x3b2, region: 0xe7},
- 70: {lang: 0x242, region: 0xa5},
- 71: {lang: 0x3f0, region: 0x98},
- 74: {lang: 0x249, region: 0x98},
- 75: {lang: 0x24b, region: 0xaa},
- 77: {lang: 0x87, region: 0x98},
- 78: {lang: 0x367, region: 0x122},
- 79: {lang: 0x2af, region: 0xae},
- 84: {lang: 0x296, region: 0x98},
- 85: {lang: 0x29f, region: 0x98},
- 86: {lang: 0x286, region: 0x86},
- 87: {lang: 0x199, region: 0x86},
- 88: {lang: 0x2a3, region: 0x52},
- 90: {lang: 0x4ea, region: 0x12a},
- 91: {lang: 0x4eb, region: 0x12a},
- 92: {lang: 0x1b7, region: 0x98},
- 93: {lang: 0x32e, region: 0x9b},
- 94: {lang: 0x4ed, region: 0x52},
- 95: {lang: 0xa7, region: 0x52},
- 97: {lang: 0x2df, region: 0x111},
- 98: {lang: 0x4ee, region: 0x10a},
- 99: {lang: 0x4ee, region: 0x10a},
- 100: {lang: 0x2fb, region: 0x98},
- 101: {lang: 0x312, region: 0x98},
- 102: {lang: 0x302, region: 0x52},
- 104: {lang: 0x315, region: 0x34},
- 105: {lang: 0x305, region: 0x98},
- 106: {lang: 0x40a, region: 0xe7},
- 107: {lang: 0x328, region: 0xc3},
- 108: {lang: 0x4ef, region: 0x107},
- 109: {lang: 0x3a, region: 0xa0},
- 110: {lang: 0x34a, region: 0xda},
- 112: {lang: 0x2c7, region: 0x83},
- 114: {lang: 0x3f9, region: 0x95},
- 115: {lang: 0x3e5, region: 0x98},
- 116: {lang: 0x392, region: 0xc4},
- 117: {lang: 0x38c, region: 0x98},
- 118: {lang: 0x390, region: 0x134},
- 119: {lang: 0x41f, region: 0x114},
- 120: {lang: 0x3a, region: 0x11b},
- 121: {lang: 0xf9, region: 0xc3},
- 122: {lang: 0x274, region: 0x105},
- 123: {lang: 0x2c0, region: 0x52},
- 124: {lang: 0x396, region: 0x9b},
- 125: {lang: 0x396, region: 0x52},
- 127: {lang: 0x3a4, region: 0xaf},
- 129: {lang: 0x1bf, region: 0x52},
- 130: {lang: 0x4f3, region: 0x9b},
- 181: {lang: 0x3c2, region: 0x94},
- 183: {lang: 0x369, region: 0x10b},
- 184: {lang: 0x416, region: 0x96},
- 186: {lang: 0x4f5, region: 0x15d},
- 187: {lang: 0x3e6, region: 0x98},
- 188: {lang: 0x44, region: 0x134},
- 189: {lang: 0x134, region: 0x7a},
- 190: {lang: 0x3e0, region: 0x98},
- 191: {lang: 0x3e0, region: 0x98},
- 192: {lang: 0x3f0, region: 0x98},
- 193: {lang: 0x402, region: 0xb2},
- 194: {lang: 0x429, region: 0x98},
- 195: {lang: 0x434, region: 0x94},
- 196: {lang: 0x443, region: 0x34},
- 197: {lang: 0x444, region: 0x9a},
- 201: {lang: 0x450, region: 0xe6},
- 202: {lang: 0x116, region: 0x98},
- 203: {lang: 0x454, region: 0x52},
- 204: {lang: 0x22a, region: 0x52},
- 205: {lang: 0x446, region: 0x98},
- 206: {lang: 0x49b, region: 0x52},
- 207: {lang: 0x9d, region: 0x13d},
- 208: {lang: 0x457, region: 0x98},
- 210: {lang: 0x51e, region: 0xb9},
- 211: {lang: 0x14e, region: 0xe6},
- 212: {lang: 0x124, region: 0xcc},
- 213: {lang: 0x461, region: 0x122},
- 214: {lang: 0xa7, region: 0x52},
- 215: {lang: 0x2c5, region: 0x98},
- 216: {lang: 0x4a3, region: 0x11b},
- 217: {lang: 0x4b4, region: 0xb3},
- 219: {lang: 0x1c7, region: 0x98},
- 221: {lang: 0x3a0, region: 0x9b},
- 222: {lang: 0x21, region: 0x9a},
- 223: {lang: 0x1e2, region: 0x52},
-}
-
-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: 5276 bytes, 1319 elements
-var likelyLang = [1319]likelyScriptRegion{
- 0: {region: 0x134, script: 0x52, flags: 0x0},
- 1: {region: 0x6e, script: 0x52, flags: 0x0},
- 2: {region: 0x164, script: 0x52, flags: 0x0},
- 3: {region: 0x164, script: 0x52, flags: 0x0},
- 4: {region: 0x164, script: 0x52, flags: 0x0},
- 5: {region: 0x7c, script: 0x1e, flags: 0x0},
- 6: {region: 0x164, script: 0x52, flags: 0x0},
- 7: {region: 0x7f, script: 0x52, flags: 0x0},
- 8: {region: 0x164, script: 0x52, flags: 0x0},
- 9: {region: 0x164, script: 0x52, flags: 0x0},
- 10: {region: 0x164, script: 0x52, flags: 0x0},
- 11: {region: 0x94, script: 0x52, flags: 0x0},
- 12: {region: 0x130, script: 0x52, flags: 0x0},
- 13: {region: 0x7f, script: 0x52, flags: 0x0},
- 14: {region: 0x164, script: 0x52, flags: 0x0},
- 15: {region: 0x164, script: 0x52, flags: 0x0},
- 16: {region: 0x105, script: 0x1e, flags: 0x0},
- 17: {region: 0x164, script: 0x52, flags: 0x0},
- 18: {region: 0x9b, script: 0x9, flags: 0x0},
- 19: {region: 0x127, script: 0x5, flags: 0x0},
- 20: {region: 0x164, script: 0x52, flags: 0x0},
- 21: {region: 0x160, script: 0x52, flags: 0x0},
- 22: {region: 0x164, script: 0x52, flags: 0x0},
- 23: {region: 0x164, script: 0x52, flags: 0x0},
- 24: {region: 0x164, script: 0x52, flags: 0x0},
- 25: {region: 0x164, script: 0x52, flags: 0x0},
- 26: {region: 0x164, script: 0x52, flags: 0x0},
- 27: {region: 0x51, script: 0x52, flags: 0x0},
- 28: {region: 0x164, script: 0x52, flags: 0x0},
- 29: {region: 0x164, script: 0x52, flags: 0x0},
- 30: {region: 0x98, script: 0x4, flags: 0x0},
- 31: {region: 0x164, script: 0x52, flags: 0x0},
- 32: {region: 0x7f, script: 0x52, flags: 0x0},
- 33: {region: 0x9a, script: 0xde, flags: 0x0},
- 34: {region: 0x164, script: 0x52, flags: 0x0},
- 35: {region: 0x164, script: 0x52, flags: 0x0},
- 36: {region: 0x14c, script: 0x52, flags: 0x0},
- 37: {region: 0x105, script: 0x1e, flags: 0x0},
- 38: {region: 0x6e, script: 0x27, flags: 0x0},
- 39: {region: 0x164, script: 0x52, flags: 0x0},
- 40: {region: 0x164, script: 0x52, flags: 0x0},
- 41: {region: 0xd5, script: 0x52, flags: 0x0},
- 42: {region: 0x164, script: 0x52, flags: 0x0},
- 44: {region: 0x164, script: 0x52, flags: 0x0},
- 45: {region: 0x164, script: 0x52, flags: 0x0},
- 46: {region: 0x164, script: 0x52, flags: 0x0},
- 47: {region: 0x164, script: 0x52, flags: 0x0},
- 48: {region: 0x164, script: 0x52, flags: 0x0},
- 49: {region: 0x164, script: 0x52, flags: 0x0},
- 50: {region: 0x94, script: 0x52, flags: 0x0},
- 51: {region: 0x164, script: 0x5, flags: 0x0},
- 52: {region: 0x121, script: 0x5, flags: 0x0},
- 53: {region: 0x164, script: 0x52, flags: 0x0},
- 54: {region: 0x164, script: 0x52, flags: 0x0},
- 55: {region: 0x164, script: 0x52, flags: 0x0},
- 56: {region: 0x164, script: 0x52, flags: 0x0},
- 57: {region: 0x6a, script: 0x5, flags: 0x0},
- 58: {region: 0x0, script: 0x3, flags: 0x1},
- 59: {region: 0x164, script: 0x52, flags: 0x0},
- 60: {region: 0x50, script: 0x52, flags: 0x0},
- 61: {region: 0x3e, script: 0x52, flags: 0x0},
- 62: {region: 0x66, script: 0x5, flags: 0x0},
- 64: {region: 0xb9, script: 0x5, flags: 0x0},
- 65: {region: 0x6a, script: 0x5, flags: 0x0},
- 66: {region: 0x98, script: 0xe, flags: 0x0},
- 67: {region: 0x12e, script: 0x52, flags: 0x0},
- 68: {region: 0x134, script: 0xbc, flags: 0x0},
- 69: {region: 0x164, script: 0x52, flags: 0x0},
- 70: {region: 0x164, script: 0x52, flags: 0x0},
- 71: {region: 0x6d, script: 0x52, flags: 0x0},
- 72: {region: 0x164, script: 0x52, flags: 0x0},
- 73: {region: 0x164, script: 0x52, flags: 0x0},
- 74: {region: 0x48, script: 0x52, flags: 0x0},
- 75: {region: 0x164, script: 0x52, flags: 0x0},
- 76: {region: 0x105, script: 0x1e, flags: 0x0},
- 77: {region: 0x164, script: 0x5, flags: 0x0},
- 78: {region: 0x164, script: 0x52, flags: 0x0},
- 79: {region: 0x164, script: 0x52, flags: 0x0},
- 80: {region: 0x164, script: 0x52, flags: 0x0},
- 81: {region: 0x98, script: 0x20, flags: 0x0},
- 82: {region: 0x164, script: 0x52, flags: 0x0},
- 83: {region: 0x164, script: 0x52, flags: 0x0},
- 84: {region: 0x164, script: 0x52, flags: 0x0},
- 85: {region: 0x3e, script: 0x52, flags: 0x0},
- 86: {region: 0x164, script: 0x52, flags: 0x0},
- 87: {region: 0x3, script: 0x5, flags: 0x1},
- 88: {region: 0x105, script: 0x1e, flags: 0x0},
- 89: {region: 0xe7, script: 0x5, flags: 0x0},
- 90: {region: 0x94, script: 0x52, flags: 0x0},
- 91: {region: 0xda, script: 0x20, flags: 0x0},
- 92: {region: 0x2d, script: 0x52, flags: 0x0},
- 93: {region: 0x51, script: 0x52, flags: 0x0},
- 94: {region: 0x164, script: 0x52, flags: 0x0},
- 95: {region: 0x51, script: 0xb, flags: 0x0},
- 96: {region: 0x164, script: 0x52, flags: 0x0},
- 97: {region: 0x164, script: 0x52, flags: 0x0},
- 98: {region: 0x94, script: 0x52, flags: 0x0},
- 99: {region: 0x164, script: 0x52, flags: 0x0},
- 100: {region: 0x51, script: 0x52, flags: 0x0},
- 101: {region: 0x164, script: 0x52, flags: 0x0},
- 102: {region: 0x164, script: 0x52, flags: 0x0},
- 103: {region: 0x164, script: 0x52, flags: 0x0},
- 104: {region: 0x164, script: 0x52, flags: 0x0},
- 105: {region: 0x4e, script: 0x52, flags: 0x0},
- 106: {region: 0x164, script: 0x52, flags: 0x0},
- 107: {region: 0x164, script: 0x52, flags: 0x0},
- 108: {region: 0x164, script: 0x52, flags: 0x0},
- 109: {region: 0x164, script: 0x27, flags: 0x0},
- 110: {region: 0x164, script: 0x52, flags: 0x0},
- 111: {region: 0x164, script: 0x52, flags: 0x0},
- 112: {region: 0x46, script: 0x1e, flags: 0x0},
- 113: {region: 0x164, script: 0x52, flags: 0x0},
- 114: {region: 0x164, script: 0x52, flags: 0x0},
- 115: {region: 0x10a, script: 0x5, flags: 0x0},
- 116: {region: 0x161, script: 0x52, flags: 0x0},
- 117: {region: 0x164, script: 0x52, flags: 0x0},
- 118: {region: 0x94, script: 0x52, flags: 0x0},
- 119: {region: 0x164, script: 0x52, flags: 0x0},
- 120: {region: 0x12e, script: 0x52, flags: 0x0},
- 121: {region: 0x51, script: 0x52, flags: 0x0},
- 122: {region: 0x98, script: 0xcd, flags: 0x0},
- 123: {region: 0xe7, script: 0x5, flags: 0x0},
- 124: {region: 0x98, script: 0x20, flags: 0x0},
- 125: {region: 0x37, script: 0x1e, flags: 0x0},
- 126: {region: 0x98, script: 0x20, flags: 0x0},
- 127: {region: 0xe7, script: 0x5, flags: 0x0},
- 128: {region: 0x12a, script: 0x2d, flags: 0x0},
- 130: {region: 0x98, script: 0x20, flags: 0x0},
- 131: {region: 0x164, script: 0x52, flags: 0x0},
- 132: {region: 0x98, script: 0x20, flags: 0x0},
- 133: {region: 0xe6, script: 0x52, flags: 0x0},
- 134: {region: 0x164, script: 0x52, flags: 0x0},
- 135: {region: 0x98, script: 0x20, flags: 0x0},
- 136: {region: 0x164, script: 0x52, flags: 0x0},
- 137: {region: 0x13e, script: 0x52, flags: 0x0},
- 138: {region: 0x164, script: 0x52, flags: 0x0},
- 139: {region: 0x164, script: 0x52, flags: 0x0},
- 140: {region: 0xe6, script: 0x52, flags: 0x0},
- 141: {region: 0x164, script: 0x52, flags: 0x0},
- 142: {region: 0xd5, script: 0x52, flags: 0x0},
- 143: {region: 0x164, script: 0x52, flags: 0x0},
- 144: {region: 0x164, script: 0x52, flags: 0x0},
- 145: {region: 0x164, script: 0x52, flags: 0x0},
- 146: {region: 0x164, script: 0x27, flags: 0x0},
- 147: {region: 0x98, script: 0x20, flags: 0x0},
- 148: {region: 0x94, script: 0x52, flags: 0x0},
- 149: {region: 0x164, script: 0x52, flags: 0x0},
- 150: {region: 0x164, script: 0x52, flags: 0x0},
- 151: {region: 0x164, script: 0x52, flags: 0x0},
- 152: {region: 0x164, script: 0x52, flags: 0x0},
- 153: {region: 0x51, script: 0x52, flags: 0x0},
- 154: {region: 0x164, script: 0x52, flags: 0x0},
- 155: {region: 0xe6, script: 0x52, flags: 0x0},
- 156: {region: 0x164, script: 0x52, flags: 0x0},
- 157: {region: 0x13d, script: 0xcf, flags: 0x0},
- 158: {region: 0xc2, script: 0x52, flags: 0x0},
- 159: {region: 0x164, script: 0x52, flags: 0x0},
- 160: {region: 0x164, script: 0x52, flags: 0x0},
- 161: {region: 0xc2, script: 0x52, flags: 0x0},
- 162: {region: 0x164, script: 0x52, flags: 0x0},
- 163: {region: 0x34, script: 0xe, flags: 0x0},
- 164: {region: 0x164, script: 0x52, flags: 0x0},
- 165: {region: 0x164, script: 0x52, flags: 0x0},
- 166: {region: 0x164, script: 0x52, flags: 0x0},
- 167: {region: 0x52, script: 0xd6, flags: 0x0},
- 168: {region: 0x164, script: 0x52, flags: 0x0},
- 169: {region: 0x164, script: 0x52, flags: 0x0},
- 170: {region: 0x164, script: 0x52, flags: 0x0},
- 171: {region: 0x98, script: 0xe, flags: 0x0},
- 172: {region: 0x164, script: 0x52, flags: 0x0},
- 173: {region: 0x9b, script: 0x5, flags: 0x0},
- 174: {region: 0x164, script: 0x52, flags: 0x0},
- 175: {region: 0x4e, script: 0x52, flags: 0x0},
- 176: {region: 0x77, script: 0x52, flags: 0x0},
- 177: {region: 0x98, script: 0x20, flags: 0x0},
- 178: {region: 0xe7, script: 0x5, flags: 0x0},
- 179: {region: 0x98, script: 0x20, flags: 0x0},
- 180: {region: 0x164, script: 0x52, flags: 0x0},
- 181: {region: 0x32, script: 0x52, flags: 0x0},
- 182: {region: 0x164, script: 0x52, flags: 0x0},
- 183: {region: 0xb3, script: 0xc, flags: 0x0},
- 184: {region: 0x51, script: 0x52, flags: 0x0},
- 185: {region: 0x164, script: 0x27, flags: 0x0},
- 186: {region: 0xe6, script: 0x52, flags: 0x0},
- 187: {region: 0x164, script: 0x52, flags: 0x0},
- 188: {region: 0xe7, script: 0x20, flags: 0x0},
- 189: {region: 0x105, script: 0x1e, flags: 0x0},
- 190: {region: 0x15e, script: 0x52, flags: 0x0},
- 191: {region: 0x164, script: 0x52, flags: 0x0},
- 192: {region: 0x94, script: 0x52, flags: 0x0},
- 193: {region: 0x164, script: 0x52, flags: 0x0},
- 194: {region: 0x51, script: 0x52, flags: 0x0},
- 195: {region: 0x164, script: 0x52, flags: 0x0},
- 196: {region: 0x164, script: 0x52, flags: 0x0},
- 197: {region: 0x164, script: 0x52, flags: 0x0},
- 198: {region: 0x85, script: 0x52, flags: 0x0},
- 199: {region: 0x164, script: 0x52, flags: 0x0},
- 200: {region: 0x164, script: 0x52, flags: 0x0},
- 201: {region: 0x164, script: 0x52, flags: 0x0},
- 202: {region: 0x164, script: 0x52, flags: 0x0},
- 203: {region: 0x6c, script: 0x27, flags: 0x0},
- 204: {region: 0x164, script: 0x52, flags: 0x0},
- 205: {region: 0x164, script: 0x52, flags: 0x0},
- 206: {region: 0x51, script: 0x52, flags: 0x0},
- 207: {region: 0x164, script: 0x52, flags: 0x0},
- 208: {region: 0x164, script: 0x52, flags: 0x0},
- 209: {region: 0xc2, script: 0x52, flags: 0x0},
- 210: {region: 0x164, script: 0x52, flags: 0x0},
- 211: {region: 0x164, script: 0x52, flags: 0x0},
- 212: {region: 0x164, script: 0x52, flags: 0x0},
- 213: {region: 0x6d, script: 0x52, flags: 0x0},
- 214: {region: 0x164, script: 0x52, flags: 0x0},
- 215: {region: 0x164, script: 0x52, flags: 0x0},
- 216: {region: 0xd5, script: 0x52, flags: 0x0},
- 217: {region: 0x8, script: 0x2, flags: 0x1},
- 218: {region: 0x105, script: 0x1e, flags: 0x0},
- 219: {region: 0xe6, script: 0x52, flags: 0x0},
- 220: {region: 0x164, script: 0x52, flags: 0x0},
- 221: {region: 0x130, script: 0x52, flags: 0x0},
- 222: {region: 0x89, script: 0x52, flags: 0x0},
- 223: {region: 0x74, script: 0x52, flags: 0x0},
- 224: {region: 0x105, script: 0x1e, flags: 0x0},
- 225: {region: 0x134, script: 0x52, flags: 0x0},
- 226: {region: 0x48, script: 0x52, flags: 0x0},
- 227: {region: 0x134, script: 0x1a, flags: 0x0},
- 228: {region: 0xa5, script: 0x5, flags: 0x0},
- 229: {region: 0x13d, script: 0x19, flags: 0x0},
- 230: {region: 0x164, script: 0x52, flags: 0x0},
- 231: {region: 0x9a, script: 0x5, flags: 0x0},
- 232: {region: 0x164, script: 0x52, flags: 0x0},
- 233: {region: 0x164, script: 0x52, flags: 0x0},
- 234: {region: 0x164, script: 0x52, flags: 0x0},
- 235: {region: 0x164, script: 0x52, flags: 0x0},
- 236: {region: 0x164, script: 0x52, flags: 0x0},
- 237: {region: 0x77, script: 0x52, flags: 0x0},
- 238: {region: 0x6a, script: 0x1c, flags: 0x0},
- 239: {region: 0xe6, script: 0x52, flags: 0x0},
- 240: {region: 0x48, script: 0x17, flags: 0x0},
- 241: {region: 0x48, script: 0x17, flags: 0x0},
- 242: {region: 0x48, script: 0x17, flags: 0x0},
- 243: {region: 0x48, script: 0x17, flags: 0x0},
- 244: {region: 0x48, script: 0x17, flags: 0x0},
- 245: {region: 0x109, script: 0x52, flags: 0x0},
- 246: {region: 0x5d, script: 0x52, flags: 0x0},
- 247: {region: 0xe8, script: 0x52, flags: 0x0},
- 248: {region: 0x48, script: 0x17, flags: 0x0},
- 249: {region: 0xc3, script: 0x79, flags: 0x0},
- 250: {region: 0xa, script: 0x2, flags: 0x1},
- 251: {region: 0x105, script: 0x1e, flags: 0x0},
- 252: {region: 0x7a, script: 0x52, flags: 0x0},
- 253: {region: 0x62, script: 0x52, flags: 0x0},
- 254: {region: 0x164, script: 0x52, flags: 0x0},
- 255: {region: 0x164, script: 0x52, flags: 0x0},
- 256: {region: 0x164, script: 0x52, flags: 0x0},
- 257: {region: 0x164, script: 0x52, flags: 0x0},
- 258: {region: 0x134, script: 0x52, flags: 0x0},
- 259: {region: 0x105, script: 0x1e, flags: 0x0},
- 260: {region: 0xa3, script: 0x52, flags: 0x0},
- 261: {region: 0x164, script: 0x52, flags: 0x0},
- 262: {region: 0x164, script: 0x52, flags: 0x0},
- 263: {region: 0x98, script: 0x5, flags: 0x0},
- 264: {region: 0x164, script: 0x52, flags: 0x0},
- 265: {region: 0x5f, script: 0x52, flags: 0x0},
- 266: {region: 0x164, script: 0x52, flags: 0x0},
- 267: {region: 0x48, script: 0x52, flags: 0x0},
- 268: {region: 0x164, script: 0x52, flags: 0x0},
- 269: {region: 0x164, script: 0x52, flags: 0x0},
- 270: {region: 0x164, script: 0x52, flags: 0x0},
- 271: {region: 0x164, script: 0x5, flags: 0x0},
- 272: {region: 0x48, script: 0x52, flags: 0x0},
- 273: {region: 0x164, script: 0x52, flags: 0x0},
- 274: {region: 0x164, script: 0x52, flags: 0x0},
- 275: {region: 0xd3, script: 0x52, flags: 0x0},
- 276: {region: 0x4e, script: 0x52, flags: 0x0},
- 277: {region: 0x164, script: 0x52, flags: 0x0},
- 278: {region: 0x98, script: 0x5, flags: 0x0},
- 279: {region: 0x164, script: 0x52, flags: 0x0},
- 280: {region: 0x164, script: 0x52, flags: 0x0},
- 281: {region: 0x164, script: 0x52, flags: 0x0},
- 282: {region: 0x164, script: 0x27, flags: 0x0},
- 283: {region: 0x5f, script: 0x52, flags: 0x0},
- 284: {region: 0xc2, script: 0x52, flags: 0x0},
- 285: {region: 0xcf, script: 0x52, flags: 0x0},
- 286: {region: 0x164, script: 0x52, flags: 0x0},
- 287: {region: 0xda, script: 0x20, flags: 0x0},
- 288: {region: 0x51, script: 0x52, flags: 0x0},
- 289: {region: 0x164, script: 0x52, flags: 0x0},
- 290: {region: 0x164, script: 0x52, flags: 0x0},
- 291: {region: 0x164, script: 0x52, flags: 0x0},
- 292: {region: 0xcc, script: 0xd4, flags: 0x0},
- 293: {region: 0x164, script: 0x52, flags: 0x0},
- 294: {region: 0x164, script: 0x52, flags: 0x0},
- 295: {region: 0x113, script: 0x52, flags: 0x0},
- 296: {region: 0x36, script: 0x52, flags: 0x0},
- 297: {region: 0x42, script: 0xd6, flags: 0x0},
- 298: {region: 0x164, script: 0x52, flags: 0x0},
- 299: {region: 0xa3, script: 0x52, flags: 0x0},
- 300: {region: 0x7f, script: 0x52, flags: 0x0},
- 301: {region: 0xd5, script: 0x52, flags: 0x0},
- 302: {region: 0x9d, script: 0x52, flags: 0x0},
- 303: {region: 0x6a, script: 0x25, flags: 0x0},
- 304: {region: 0xc3, script: 0x43, flags: 0x0},
- 305: {region: 0x86, script: 0x2d, flags: 0x0},
- 306: {region: 0x164, script: 0x52, flags: 0x0},
- 307: {region: 0x164, script: 0x52, flags: 0x0},
- 308: {region: 0xc, script: 0x2, flags: 0x1},
- 309: {region: 0x164, script: 0x52, flags: 0x0},
- 310: {region: 0x164, script: 0x52, flags: 0x0},
- 311: {region: 0x1, script: 0x52, flags: 0x0},
- 312: {region: 0x164, script: 0x52, flags: 0x0},
- 313: {region: 0x6d, script: 0x52, flags: 0x0},
- 314: {region: 0x134, script: 0x52, flags: 0x0},
- 315: {region: 0x69, script: 0x52, flags: 0x0},
- 316: {region: 0x164, script: 0x52, flags: 0x0},
- 317: {region: 0x9d, script: 0x3e, flags: 0x0},
- 318: {region: 0x164, script: 0x52, flags: 0x0},
- 319: {region: 0x164, script: 0x52, flags: 0x0},
- 320: {region: 0x6d, script: 0x52, flags: 0x0},
- 321: {region: 0x51, script: 0x52, flags: 0x0},
- 322: {region: 0x6d, script: 0x52, flags: 0x0},
- 323: {region: 0x9b, script: 0x5, flags: 0x0},
- 324: {region: 0x164, script: 0x52, flags: 0x0},
- 325: {region: 0x164, script: 0x52, flags: 0x0},
- 326: {region: 0x164, script: 0x52, flags: 0x0},
- 327: {region: 0x164, script: 0x52, flags: 0x0},
- 328: {region: 0x85, script: 0x52, flags: 0x0},
- 329: {region: 0xe, script: 0x2, flags: 0x1},
- 330: {region: 0x164, script: 0x52, flags: 0x0},
- 331: {region: 0xc2, script: 0x52, flags: 0x0},
- 332: {region: 0x71, script: 0x52, flags: 0x0},
- 333: {region: 0x10a, script: 0x5, flags: 0x0},
- 334: {region: 0xe6, script: 0x52, flags: 0x0},
- 335: {region: 0x10b, script: 0x52, flags: 0x0},
- 336: {region: 0x72, script: 0x52, flags: 0x0},
- 337: {region: 0x164, script: 0x52, flags: 0x0},
- 338: {region: 0x164, script: 0x52, flags: 0x0},
- 339: {region: 0x75, script: 0x52, flags: 0x0},
- 340: {region: 0x164, script: 0x52, flags: 0x0},
- 341: {region: 0x3a, script: 0x52, flags: 0x0},
- 342: {region: 0x164, script: 0x52, flags: 0x0},
- 343: {region: 0x164, script: 0x52, flags: 0x0},
- 344: {region: 0x164, script: 0x52, flags: 0x0},
- 345: {region: 0x77, script: 0x52, flags: 0x0},
- 346: {region: 0x134, script: 0x52, flags: 0x0},
- 347: {region: 0x77, script: 0x52, flags: 0x0},
- 348: {region: 0x5f, script: 0x52, flags: 0x0},
- 349: {region: 0x5f, script: 0x52, flags: 0x0},
- 350: {region: 0x51, script: 0x5, flags: 0x0},
- 351: {region: 0x13f, script: 0x52, flags: 0x0},
- 352: {region: 0x164, script: 0x52, flags: 0x0},
- 353: {region: 0x83, script: 0x52, flags: 0x0},
- 354: {region: 0x164, script: 0x52, flags: 0x0},
- 355: {region: 0xd3, script: 0x52, flags: 0x0},
- 356: {region: 0x9d, script: 0x52, flags: 0x0},
- 357: {region: 0xd5, script: 0x52, flags: 0x0},
- 358: {region: 0x164, script: 0x52, flags: 0x0},
- 359: {region: 0x10a, script: 0x52, flags: 0x0},
- 360: {region: 0xd8, script: 0x52, flags: 0x0},
- 361: {region: 0x95, script: 0x52, flags: 0x0},
- 362: {region: 0x7f, script: 0x52, flags: 0x0},
- 363: {region: 0x164, script: 0x52, flags: 0x0},
- 364: {region: 0xbb, script: 0x52, flags: 0x0},
- 365: {region: 0x164, script: 0x52, flags: 0x0},
- 366: {region: 0x164, script: 0x52, flags: 0x0},
- 367: {region: 0x164, script: 0x52, flags: 0x0},
- 368: {region: 0x52, script: 0x34, flags: 0x0},
- 369: {region: 0x164, script: 0x52, flags: 0x0},
- 370: {region: 0x94, script: 0x52, flags: 0x0},
- 371: {region: 0x164, script: 0x52, flags: 0x0},
- 372: {region: 0x98, script: 0x20, flags: 0x0},
- 373: {region: 0x164, script: 0x52, flags: 0x0},
- 374: {region: 0x9b, script: 0x5, flags: 0x0},
- 375: {region: 0x7d, script: 0x52, flags: 0x0},
- 376: {region: 0x7a, script: 0x52, flags: 0x0},
- 377: {region: 0x164, script: 0x52, flags: 0x0},
- 378: {region: 0x164, script: 0x52, flags: 0x0},
- 379: {region: 0x164, script: 0x52, flags: 0x0},
- 380: {region: 0x164, script: 0x52, flags: 0x0},
- 381: {region: 0x164, script: 0x52, flags: 0x0},
- 382: {region: 0x164, script: 0x52, flags: 0x0},
- 383: {region: 0x6e, script: 0x27, flags: 0x0},
- 384: {region: 0x164, script: 0x52, flags: 0x0},
- 385: {region: 0xda, script: 0x20, flags: 0x0},
- 386: {region: 0x164, script: 0x52, flags: 0x0},
- 387: {region: 0xa6, script: 0x52, flags: 0x0},
- 388: {region: 0x164, script: 0x52, flags: 0x0},
- 389: {region: 0xe7, script: 0x5, flags: 0x0},
- 390: {region: 0x164, script: 0x52, flags: 0x0},
- 391: {region: 0xe7, script: 0x5, flags: 0x0},
- 392: {region: 0x164, script: 0x52, flags: 0x0},
- 393: {region: 0x164, script: 0x52, flags: 0x0},
- 394: {region: 0x6d, script: 0x52, flags: 0x0},
- 395: {region: 0x9b, script: 0x5, flags: 0x0},
- 396: {region: 0x164, script: 0x52, flags: 0x0},
- 397: {region: 0x164, script: 0x27, flags: 0x0},
- 398: {region: 0xf0, script: 0x52, flags: 0x0},
- 399: {region: 0x164, script: 0x52, flags: 0x0},
- 400: {region: 0x164, script: 0x52, flags: 0x0},
- 401: {region: 0x164, script: 0x52, flags: 0x0},
- 402: {region: 0x164, script: 0x27, flags: 0x0},
- 403: {region: 0x164, script: 0x52, flags: 0x0},
- 404: {region: 0x98, script: 0x20, flags: 0x0},
- 405: {region: 0x98, script: 0xd0, flags: 0x0},
- 406: {region: 0x94, script: 0x52, flags: 0x0},
- 407: {region: 0xd8, script: 0x52, flags: 0x0},
- 408: {region: 0x12f, script: 0x2b, flags: 0x0},
- 409: {region: 0x10, script: 0x2, flags: 0x1},
- 410: {region: 0x98, script: 0xe, flags: 0x0},
- 411: {region: 0x164, script: 0x52, flags: 0x0},
- 412: {region: 0x4d, script: 0x52, flags: 0x0},
- 413: {region: 0x98, script: 0x2e, flags: 0x0},
- 414: {region: 0x40, script: 0x52, flags: 0x0},
- 415: {region: 0x53, script: 0x52, flags: 0x0},
- 416: {region: 0x164, script: 0x52, flags: 0x0},
- 417: {region: 0x7f, script: 0x52, flags: 0x0},
- 418: {region: 0x164, script: 0x52, flags: 0x0},
- 419: {region: 0x164, script: 0x52, flags: 0x0},
- 420: {region: 0xa3, script: 0x52, flags: 0x0},
- 421: {region: 0x97, script: 0x52, flags: 0x0},
- 422: {region: 0x164, script: 0x52, flags: 0x0},
- 423: {region: 0xda, script: 0x20, flags: 0x0},
- 424: {region: 0x164, script: 0x52, flags: 0x0},
- 425: {region: 0x164, script: 0x5, flags: 0x0},
- 426: {region: 0x48, script: 0x52, flags: 0x0},
- 427: {region: 0x164, script: 0x5, flags: 0x0},
- 428: {region: 0x164, script: 0x52, flags: 0x0},
- 429: {region: 0x12, script: 0x3, flags: 0x1},
- 430: {region: 0x164, script: 0x52, flags: 0x0},
- 431: {region: 0x52, script: 0x34, flags: 0x0},
- 432: {region: 0x164, script: 0x52, flags: 0x0},
- 433: {region: 0x134, script: 0x52, flags: 0x0},
- 434: {region: 0x23, script: 0x5, flags: 0x0},
- 435: {region: 0x164, script: 0x52, flags: 0x0},
- 436: {region: 0x164, script: 0x27, flags: 0x0},
- 437: {region: 0x96, script: 0x37, flags: 0x0},
- 438: {region: 0x164, script: 0x52, flags: 0x0},
- 439: {region: 0x98, script: 0x20, flags: 0x0},
- 440: {region: 0x164, script: 0x52, flags: 0x0},
- 441: {region: 0x72, script: 0x52, flags: 0x0},
- 442: {region: 0x164, script: 0x52, flags: 0x0},
- 443: {region: 0x164, script: 0x52, flags: 0x0},
- 444: {region: 0xe6, script: 0x52, flags: 0x0},
- 445: {region: 0x164, script: 0x52, flags: 0x0},
- 446: {region: 0x12a, script: 0x39, flags: 0x0},
- 447: {region: 0x52, script: 0x81, flags: 0x0},
- 448: {region: 0x164, script: 0x52, flags: 0x0},
- 449: {region: 0xe7, script: 0x5, flags: 0x0},
- 450: {region: 0x98, script: 0x20, flags: 0x0},
- 451: {region: 0xae, script: 0x3a, flags: 0x0},
- 452: {region: 0xe6, script: 0x52, flags: 0x0},
- 453: {region: 0xe7, script: 0x5, flags: 0x0},
- 454: {region: 0xe5, script: 0x52, flags: 0x0},
- 455: {region: 0x98, script: 0x20, flags: 0x0},
- 456: {region: 0x98, script: 0x20, flags: 0x0},
- 457: {region: 0x164, script: 0x52, flags: 0x0},
- 458: {region: 0x8f, script: 0x52, flags: 0x0},
- 459: {region: 0x5f, script: 0x52, flags: 0x0},
- 460: {region: 0x52, script: 0x34, flags: 0x0},
- 461: {region: 0x90, script: 0x52, flags: 0x0},
- 462: {region: 0x91, script: 0x52, flags: 0x0},
- 463: {region: 0x164, script: 0x52, flags: 0x0},
- 464: {region: 0x27, script: 0x8, flags: 0x0},
- 465: {region: 0xd1, script: 0x52, flags: 0x0},
- 466: {region: 0x77, script: 0x52, flags: 0x0},
- 467: {region: 0x164, script: 0x52, flags: 0x0},
- 468: {region: 0x164, script: 0x52, flags: 0x0},
- 469: {region: 0xcf, script: 0x52, flags: 0x0},
- 470: {region: 0xd5, script: 0x52, flags: 0x0},
- 471: {region: 0x164, script: 0x52, flags: 0x0},
- 472: {region: 0x164, script: 0x52, flags: 0x0},
- 473: {region: 0x164, script: 0x52, flags: 0x0},
- 474: {region: 0x94, script: 0x52, flags: 0x0},
- 475: {region: 0x164, script: 0x52, flags: 0x0},
- 476: {region: 0x164, script: 0x52, flags: 0x0},
- 477: {region: 0x164, script: 0x52, flags: 0x0},
- 479: {region: 0xd5, script: 0x52, flags: 0x0},
- 480: {region: 0x164, script: 0x52, flags: 0x0},
- 481: {region: 0x164, script: 0x52, flags: 0x0},
- 482: {region: 0x52, script: 0xdf, flags: 0x0},
- 483: {region: 0x164, script: 0x52, flags: 0x0},
- 484: {region: 0x134, script: 0x52, flags: 0x0},
- 485: {region: 0x164, script: 0x52, flags: 0x0},
- 486: {region: 0x48, script: 0x52, flags: 0x0},
- 487: {region: 0x164, script: 0x52, flags: 0x0},
- 488: {region: 0x164, script: 0x52, flags: 0x0},
- 489: {region: 0xe6, script: 0x52, flags: 0x0},
- 490: {region: 0x164, script: 0x52, flags: 0x0},
- 491: {region: 0x94, script: 0x52, flags: 0x0},
- 492: {region: 0x105, script: 0x1e, flags: 0x0},
- 494: {region: 0x164, script: 0x52, flags: 0x0},
- 495: {region: 0x164, script: 0x52, flags: 0x0},
- 496: {region: 0x9c, script: 0x52, flags: 0x0},
- 497: {region: 0x9d, script: 0x52, flags: 0x0},
- 498: {region: 0x48, script: 0x17, flags: 0x0},
- 499: {region: 0x96, script: 0x37, flags: 0x0},
- 500: {region: 0x164, script: 0x52, flags: 0x0},
- 501: {region: 0x164, script: 0x52, flags: 0x0},
- 502: {region: 0x105, script: 0x52, flags: 0x0},
- 503: {region: 0x164, script: 0x52, flags: 0x0},
- 504: {region: 0xa1, script: 0x41, flags: 0x0},
- 505: {region: 0x164, script: 0x52, flags: 0x0},
- 506: {region: 0x9f, script: 0x52, flags: 0x0},
- 508: {region: 0x164, script: 0x52, flags: 0x0},
- 509: {region: 0x164, script: 0x52, flags: 0x0},
- 510: {region: 0x164, script: 0x52, flags: 0x0},
- 511: {region: 0x51, script: 0x52, flags: 0x0},
- 512: {region: 0x12f, script: 0x37, flags: 0x0},
- 513: {region: 0x164, script: 0x52, flags: 0x0},
- 514: {region: 0x12e, script: 0x52, flags: 0x0},
- 515: {region: 0xda, script: 0x20, flags: 0x0},
- 516: {region: 0x164, script: 0x52, flags: 0x0},
- 517: {region: 0x62, script: 0x52, flags: 0x0},
- 518: {region: 0x94, script: 0x52, flags: 0x0},
- 519: {region: 0x94, script: 0x52, flags: 0x0},
- 520: {region: 0x7c, script: 0x29, flags: 0x0},
- 521: {region: 0x136, script: 0x1e, flags: 0x0},
- 522: {region: 0x66, script: 0x52, flags: 0x0},
- 523: {region: 0xc3, script: 0x52, flags: 0x0},
- 524: {region: 0x164, script: 0x52, flags: 0x0},
- 525: {region: 0x164, script: 0x52, flags: 0x0},
- 526: {region: 0xd5, script: 0x52, flags: 0x0},
- 527: {region: 0xa3, script: 0x52, flags: 0x0},
- 528: {region: 0xc2, script: 0x52, flags: 0x0},
- 529: {region: 0x105, script: 0x1e, flags: 0x0},
- 530: {region: 0x164, script: 0x52, flags: 0x0},
- 531: {region: 0x164, script: 0x52, flags: 0x0},
- 532: {region: 0x164, script: 0x52, flags: 0x0},
- 533: {region: 0x164, script: 0x52, flags: 0x0},
- 534: {region: 0xd3, script: 0x5, flags: 0x0},
- 535: {region: 0xd5, script: 0x52, flags: 0x0},
- 536: {region: 0x163, script: 0x52, flags: 0x0},
- 537: {region: 0x164, script: 0x52, flags: 0x0},
- 538: {region: 0x164, script: 0x52, flags: 0x0},
- 539: {region: 0x12e, script: 0x52, flags: 0x0},
- 540: {region: 0x121, script: 0x5, flags: 0x0},
- 541: {region: 0x164, script: 0x52, flags: 0x0},
- 542: {region: 0x122, script: 0xd5, flags: 0x0},
- 543: {region: 0x59, script: 0x52, flags: 0x0},
- 544: {region: 0x51, script: 0x52, flags: 0x0},
- 545: {region: 0x164, script: 0x52, flags: 0x0},
- 546: {region: 0x4e, script: 0x52, flags: 0x0},
- 547: {region: 0x98, script: 0x20, flags: 0x0},
- 548: {region: 0x98, script: 0x20, flags: 0x0},
- 549: {region: 0x4a, script: 0x52, flags: 0x0},
- 550: {region: 0x94, script: 0x52, flags: 0x0},
- 551: {region: 0x164, script: 0x52, flags: 0x0},
- 552: {region: 0x40, script: 0x52, flags: 0x0},
- 553: {region: 0x98, script: 0x52, flags: 0x0},
- 554: {region: 0x52, script: 0xcc, flags: 0x0},
- 555: {region: 0x98, script: 0x20, flags: 0x0},
- 556: {region: 0xc2, script: 0x52, flags: 0x0},
- 557: {region: 0x164, script: 0x52, flags: 0x0},
- 558: {region: 0x98, script: 0x6b, flags: 0x0},
- 559: {region: 0xe7, script: 0x5, flags: 0x0},
- 560: {region: 0x164, script: 0x52, flags: 0x0},
- 561: {region: 0xa3, script: 0x52, flags: 0x0},
- 562: {region: 0x164, script: 0x52, flags: 0x0},
- 563: {region: 0x12a, script: 0x52, flags: 0x0},
- 564: {region: 0x164, script: 0x52, flags: 0x0},
- 565: {region: 0xd1, script: 0x52, flags: 0x0},
- 566: {region: 0x164, script: 0x52, flags: 0x0},
- 567: {region: 0xae, script: 0x4f, flags: 0x0},
- 568: {region: 0x164, script: 0x52, flags: 0x0},
- 569: {region: 0x164, script: 0x52, flags: 0x0},
- 570: {region: 0x15, script: 0x6, flags: 0x1},
- 571: {region: 0x164, script: 0x52, flags: 0x0},
- 572: {region: 0x51, script: 0x52, flags: 0x0},
- 573: {region: 0x81, script: 0x52, flags: 0x0},
- 574: {region: 0xa3, script: 0x52, flags: 0x0},
- 575: {region: 0x164, script: 0x52, flags: 0x0},
- 576: {region: 0x164, script: 0x52, flags: 0x0},
- 577: {region: 0x164, script: 0x52, flags: 0x0},
- 578: {region: 0xa5, script: 0x46, flags: 0x0},
- 579: {region: 0x29, script: 0x52, flags: 0x0},
- 580: {region: 0x164, script: 0x52, flags: 0x0},
- 581: {region: 0x164, script: 0x52, flags: 0x0},
- 582: {region: 0x164, script: 0x52, flags: 0x0},
- 583: {region: 0x164, script: 0x52, flags: 0x0},
- 584: {region: 0x164, script: 0x52, flags: 0x0},
- 585: {region: 0x98, script: 0x4a, flags: 0x0},
- 586: {region: 0x164, script: 0x52, flags: 0x0},
- 587: {region: 0xaa, script: 0x4b, flags: 0x0},
- 588: {region: 0x105, script: 0x1e, flags: 0x0},
- 589: {region: 0x98, script: 0x20, flags: 0x0},
- 590: {region: 0x164, script: 0x52, flags: 0x0},
- 591: {region: 0x74, script: 0x52, flags: 0x0},
- 592: {region: 0x164, script: 0x52, flags: 0x0},
- 593: {region: 0xb3, script: 0x52, flags: 0x0},
- 594: {region: 0x164, script: 0x52, flags: 0x0},
- 595: {region: 0x164, script: 0x52, flags: 0x0},
- 596: {region: 0x164, script: 0x52, flags: 0x0},
- 597: {region: 0x164, script: 0x52, flags: 0x0},
- 598: {region: 0x164, script: 0x52, flags: 0x0},
- 599: {region: 0x164, script: 0x52, flags: 0x0},
- 600: {region: 0x164, script: 0x52, flags: 0x0},
- 601: {region: 0x164, script: 0x27, flags: 0x0},
- 603: {region: 0x105, script: 0x1e, flags: 0x0},
- 604: {region: 0x111, script: 0x52, flags: 0x0},
- 605: {region: 0xe6, script: 0x52, flags: 0x0},
- 606: {region: 0x105, script: 0x52, flags: 0x0},
- 607: {region: 0x164, script: 0x52, flags: 0x0},
- 608: {region: 0x98, script: 0x20, flags: 0x0},
- 609: {region: 0x98, script: 0x5, flags: 0x0},
- 610: {region: 0x12e, script: 0x52, flags: 0x0},
- 611: {region: 0x164, script: 0x52, flags: 0x0},
- 612: {region: 0x51, script: 0x52, flags: 0x0},
- 613: {region: 0x5f, script: 0x52, flags: 0x0},
- 614: {region: 0x164, script: 0x52, flags: 0x0},
- 615: {region: 0x164, script: 0x52, flags: 0x0},
- 616: {region: 0x164, script: 0x27, flags: 0x0},
- 617: {region: 0x164, script: 0x52, flags: 0x0},
- 618: {region: 0x164, script: 0x52, flags: 0x0},
- 619: {region: 0x1b, script: 0x3, flags: 0x1},
- 620: {region: 0x164, script: 0x52, flags: 0x0},
- 621: {region: 0x164, script: 0x52, flags: 0x0},
- 622: {region: 0x164, script: 0x52, flags: 0x0},
- 623: {region: 0x164, script: 0x52, flags: 0x0},
- 624: {region: 0x105, script: 0x1e, flags: 0x0},
- 625: {region: 0x164, script: 0x52, flags: 0x0},
- 626: {region: 0x164, script: 0x52, flags: 0x0},
- 627: {region: 0x164, script: 0x52, flags: 0x0},
- 628: {region: 0x105, script: 0x1e, flags: 0x0},
- 629: {region: 0x164, script: 0x52, flags: 0x0},
- 630: {region: 0x94, script: 0x52, flags: 0x0},
- 631: {region: 0xe7, script: 0x5, flags: 0x0},
- 632: {region: 0x7a, script: 0x52, flags: 0x0},
- 633: {region: 0x164, script: 0x52, flags: 0x0},
- 634: {region: 0x164, script: 0x52, flags: 0x0},
- 635: {region: 0x164, script: 0x52, flags: 0x0},
- 636: {region: 0x164, script: 0x27, flags: 0x0},
- 637: {region: 0x122, script: 0xd5, flags: 0x0},
- 638: {region: 0xe7, script: 0x5, flags: 0x0},
- 639: {region: 0x164, script: 0x52, flags: 0x0},
- 640: {region: 0x164, script: 0x52, flags: 0x0},
- 641: {region: 0x1e, script: 0x5, flags: 0x1},
- 642: {region: 0x164, script: 0x52, flags: 0x0},
- 643: {region: 0x164, script: 0x52, flags: 0x0},
- 644: {region: 0x164, script: 0x52, flags: 0x0},
- 645: {region: 0x137, script: 0x52, flags: 0x0},
- 646: {region: 0x86, script: 0x56, flags: 0x0},
- 647: {region: 0x96, script: 0x37, flags: 0x0},
- 648: {region: 0x12e, script: 0x52, flags: 0x0},
- 649: {region: 0xe7, script: 0x5, flags: 0x0},
- 650: {region: 0x130, script: 0x52, flags: 0x0},
- 651: {region: 0x164, script: 0x52, flags: 0x0},
- 652: {region: 0xb6, script: 0x52, flags: 0x0},
- 653: {region: 0x105, script: 0x1e, flags: 0x0},
- 654: {region: 0x164, script: 0x52, flags: 0x0},
- 655: {region: 0x94, script: 0x52, flags: 0x0},
- 656: {region: 0x164, script: 0x52, flags: 0x0},
- 657: {region: 0x52, script: 0xd5, flags: 0x0},
- 658: {region: 0x164, script: 0x52, flags: 0x0},
- 659: {region: 0x164, script: 0x52, flags: 0x0},
- 660: {region: 0x164, script: 0x52, flags: 0x0},
- 661: {region: 0x164, script: 0x52, flags: 0x0},
- 662: {region: 0x98, script: 0x54, flags: 0x0},
- 663: {region: 0x164, script: 0x52, flags: 0x0},
- 664: {region: 0x164, script: 0x52, flags: 0x0},
- 665: {region: 0x105, script: 0x1e, flags: 0x0},
- 666: {region: 0x130, script: 0x52, flags: 0x0},
- 667: {region: 0x164, script: 0x52, flags: 0x0},
- 668: {region: 0xd8, script: 0x52, flags: 0x0},
- 669: {region: 0x164, script: 0x52, flags: 0x0},
- 670: {region: 0x164, script: 0x52, flags: 0x0},
- 671: {region: 0x23, script: 0x2, flags: 0x1},
- 672: {region: 0x164, script: 0x52, flags: 0x0},
- 673: {region: 0x164, script: 0x52, flags: 0x0},
- 674: {region: 0x9d, script: 0x52, flags: 0x0},
- 675: {region: 0x52, script: 0x58, flags: 0x0},
- 676: {region: 0x94, script: 0x52, flags: 0x0},
- 677: {region: 0x9b, script: 0x5, flags: 0x0},
- 678: {region: 0x134, script: 0x52, flags: 0x0},
- 679: {region: 0x164, script: 0x52, flags: 0x0},
- 680: {region: 0x164, script: 0x52, flags: 0x0},
- 681: {region: 0x98, script: 0xd0, flags: 0x0},
- 682: {region: 0x9d, script: 0x52, flags: 0x0},
- 683: {region: 0x164, script: 0x52, flags: 0x0},
- 684: {region: 0x4a, script: 0x52, flags: 0x0},
- 685: {region: 0x164, script: 0x52, flags: 0x0},
- 686: {region: 0x164, script: 0x52, flags: 0x0},
- 687: {region: 0xae, script: 0x4f, flags: 0x0},
- 688: {region: 0x164, script: 0x52, flags: 0x0},
- 689: {region: 0x164, script: 0x52, flags: 0x0},
- 690: {region: 0x4a, script: 0x52, flags: 0x0},
- 691: {region: 0x164, script: 0x52, flags: 0x0},
- 692: {region: 0x164, script: 0x52, flags: 0x0},
- 693: {region: 0x161, script: 0x52, flags: 0x0},
- 694: {region: 0x9b, script: 0x5, flags: 0x0},
- 695: {region: 0xb5, script: 0x52, flags: 0x0},
- 696: {region: 0xb7, script: 0x52, flags: 0x0},
- 697: {region: 0x4a, script: 0x52, flags: 0x0},
- 698: {region: 0x4a, script: 0x52, flags: 0x0},
- 699: {region: 0xa3, script: 0x52, flags: 0x0},
- 700: {region: 0xa3, script: 0x52, flags: 0x0},
- 701: {region: 0x9b, script: 0x5, flags: 0x0},
- 702: {region: 0xb7, script: 0x52, flags: 0x0},
- 703: {region: 0x122, script: 0xd5, flags: 0x0},
- 704: {region: 0x52, script: 0x34, flags: 0x0},
- 705: {region: 0x12a, script: 0x52, flags: 0x0},
- 706: {region: 0x94, script: 0x52, flags: 0x0},
- 707: {region: 0x51, script: 0x52, flags: 0x0},
- 708: {region: 0x98, script: 0x20, flags: 0x0},
- 709: {region: 0x98, script: 0x20, flags: 0x0},
- 710: {region: 0x94, script: 0x52, flags: 0x0},
- 711: {region: 0x25, script: 0x3, flags: 0x1},
- 712: {region: 0xa3, script: 0x52, flags: 0x0},
- 713: {region: 0x164, script: 0x52, flags: 0x0},
- 714: {region: 0xce, script: 0x52, flags: 0x0},
- 715: {region: 0x164, script: 0x52, flags: 0x0},
- 716: {region: 0x164, script: 0x52, flags: 0x0},
- 717: {region: 0x164, script: 0x52, flags: 0x0},
- 718: {region: 0x164, script: 0x52, flags: 0x0},
- 719: {region: 0x164, script: 0x52, flags: 0x0},
- 720: {region: 0x164, script: 0x52, flags: 0x0},
- 721: {region: 0x164, script: 0x52, flags: 0x0},
- 722: {region: 0x164, script: 0x52, flags: 0x0},
- 723: {region: 0x164, script: 0x52, flags: 0x0},
- 724: {region: 0x164, script: 0x52, flags: 0x0},
- 725: {region: 0x164, script: 0x52, flags: 0x0},
- 726: {region: 0x164, script: 0x5, flags: 0x0},
- 727: {region: 0x105, script: 0x1e, flags: 0x0},
- 728: {region: 0xe6, script: 0x52, flags: 0x0},
- 729: {region: 0x164, script: 0x52, flags: 0x0},
- 730: {region: 0x94, script: 0x52, flags: 0x0},
- 731: {region: 0x164, script: 0x27, flags: 0x0},
- 732: {region: 0x164, script: 0x52, flags: 0x0},
- 733: {region: 0x164, script: 0x52, flags: 0x0},
- 734: {region: 0x164, script: 0x52, flags: 0x0},
- 735: {region: 0x111, script: 0x52, flags: 0x0},
- 736: {region: 0xa3, script: 0x52, flags: 0x0},
- 737: {region: 0x164, script: 0x52, flags: 0x0},
- 738: {region: 0x164, script: 0x52, flags: 0x0},
- 739: {region: 0x122, script: 0x5, flags: 0x0},
- 740: {region: 0xcb, script: 0x52, flags: 0x0},
- 741: {region: 0x164, script: 0x52, flags: 0x0},
- 742: {region: 0x164, script: 0x52, flags: 0x0},
- 743: {region: 0x164, script: 0x52, flags: 0x0},
- 744: {region: 0xbe, script: 0x52, flags: 0x0},
- 745: {region: 0xd0, script: 0x52, flags: 0x0},
- 746: {region: 0x164, script: 0x52, flags: 0x0},
- 747: {region: 0x51, script: 0x52, flags: 0x0},
- 748: {region: 0xda, script: 0x20, flags: 0x0},
- 749: {region: 0x12e, script: 0x52, flags: 0x0},
- 750: {region: 0xbf, script: 0x52, flags: 0x0},
- 751: {region: 0x164, script: 0x52, flags: 0x0},
- 752: {region: 0x164, script: 0x52, flags: 0x0},
- 753: {region: 0xdf, script: 0x52, flags: 0x0},
- 754: {region: 0x164, script: 0x52, flags: 0x0},
- 755: {region: 0x94, script: 0x52, flags: 0x0},
- 756: {region: 0x9a, script: 0x36, flags: 0x0},
- 757: {region: 0x164, script: 0x52, flags: 0x0},
- 758: {region: 0xc1, script: 0x1e, flags: 0x0},
- 759: {region: 0x164, script: 0x5, flags: 0x0},
- 760: {region: 0x164, script: 0x52, flags: 0x0},
- 761: {region: 0x164, script: 0x52, flags: 0x0},
- 762: {region: 0x164, script: 0x52, flags: 0x0},
- 763: {region: 0x98, script: 0x64, flags: 0x0},
- 764: {region: 0x164, script: 0x52, flags: 0x0},
- 765: {region: 0x164, script: 0x52, flags: 0x0},
- 766: {region: 0x10a, script: 0x52, flags: 0x0},
- 767: {region: 0x164, script: 0x52, flags: 0x0},
- 768: {region: 0x164, script: 0x52, flags: 0x0},
- 769: {region: 0x164, script: 0x52, flags: 0x0},
- 770: {region: 0x28, script: 0x3, flags: 0x1},
- 771: {region: 0x164, script: 0x52, flags: 0x0},
- 772: {region: 0x164, script: 0x52, flags: 0x0},
- 773: {region: 0x98, script: 0xe, flags: 0x0},
- 774: {region: 0xc3, script: 0x6b, flags: 0x0},
- 776: {region: 0x164, script: 0x52, flags: 0x0},
- 777: {region: 0x48, script: 0x52, flags: 0x0},
- 778: {region: 0x48, script: 0x52, flags: 0x0},
- 779: {region: 0x36, script: 0x52, flags: 0x0},
- 780: {region: 0x164, script: 0x52, flags: 0x0},
- 781: {region: 0x164, script: 0x52, flags: 0x0},
- 782: {region: 0x164, script: 0x52, flags: 0x0},
- 783: {region: 0x164, script: 0x52, flags: 0x0},
- 784: {region: 0x164, script: 0x52, flags: 0x0},
- 785: {region: 0x164, script: 0x52, flags: 0x0},
- 786: {region: 0x98, script: 0x20, flags: 0x0},
- 787: {region: 0xda, script: 0x20, flags: 0x0},
- 788: {region: 0x105, script: 0x1e, flags: 0x0},
- 789: {region: 0x34, script: 0x68, flags: 0x0},
- 790: {region: 0x2b, script: 0x3, flags: 0x1},
- 791: {region: 0xca, script: 0x52, flags: 0x0},
- 792: {region: 0x164, script: 0x52, flags: 0x0},
- 793: {region: 0x164, script: 0x52, flags: 0x0},
- 794: {region: 0x164, script: 0x52, flags: 0x0},
- 795: {region: 0x98, script: 0x20, flags: 0x0},
- 796: {region: 0x51, script: 0x52, flags: 0x0},
- 798: {region: 0x164, script: 0x52, flags: 0x0},
- 799: {region: 0x134, script: 0x52, flags: 0x0},
- 800: {region: 0x164, script: 0x52, flags: 0x0},
- 801: {region: 0x164, script: 0x52, flags: 0x0},
- 802: {region: 0xe7, script: 0x5, flags: 0x0},
- 803: {region: 0xc2, script: 0x52, flags: 0x0},
- 804: {region: 0x98, script: 0x20, flags: 0x0},
- 805: {region: 0x94, script: 0x52, flags: 0x0},
- 806: {region: 0x163, script: 0x52, flags: 0x0},
- 807: {region: 0x164, script: 0x52, flags: 0x0},
- 808: {region: 0xc3, script: 0x6b, flags: 0x0},
- 809: {region: 0x164, script: 0x52, flags: 0x0},
- 810: {region: 0x164, script: 0x27, flags: 0x0},
- 811: {region: 0x105, script: 0x1e, flags: 0x0},
- 812: {region: 0x164, script: 0x52, flags: 0x0},
- 813: {region: 0x130, script: 0x52, flags: 0x0},
- 814: {region: 0x9b, script: 0x5d, flags: 0x0},
- 815: {region: 0x164, script: 0x52, flags: 0x0},
- 816: {region: 0x164, script: 0x52, flags: 0x0},
- 817: {region: 0x9b, script: 0x5, flags: 0x0},
- 818: {region: 0x164, script: 0x52, flags: 0x0},
- 819: {region: 0x164, script: 0x52, flags: 0x0},
- 820: {region: 0x164, script: 0x52, flags: 0x0},
- 821: {region: 0xdc, script: 0x52, flags: 0x0},
- 822: {region: 0x164, script: 0x52, flags: 0x0},
- 823: {region: 0x164, script: 0x52, flags: 0x0},
- 825: {region: 0x164, script: 0x52, flags: 0x0},
- 826: {region: 0x52, script: 0x34, flags: 0x0},
- 827: {region: 0x9d, script: 0x52, flags: 0x0},
- 828: {region: 0xd1, script: 0x52, flags: 0x0},
- 829: {region: 0x164, script: 0x52, flags: 0x0},
- 830: {region: 0xd9, script: 0x52, flags: 0x0},
- 831: {region: 0x164, script: 0x52, flags: 0x0},
- 832: {region: 0x164, script: 0x52, flags: 0x0},
- 833: {region: 0x164, script: 0x52, flags: 0x0},
- 834: {region: 0xce, script: 0x52, flags: 0x0},
- 835: {region: 0x164, script: 0x52, flags: 0x0},
- 836: {region: 0x164, script: 0x52, flags: 0x0},
- 837: {region: 0x163, script: 0x52, flags: 0x0},
- 838: {region: 0xd0, script: 0x52, flags: 0x0},
- 839: {region: 0x5f, script: 0x52, flags: 0x0},
- 840: {region: 0xda, script: 0x20, flags: 0x0},
- 841: {region: 0x164, script: 0x52, flags: 0x0},
- 842: {region: 0xda, script: 0x20, flags: 0x0},
- 843: {region: 0x164, script: 0x52, flags: 0x0},
- 844: {region: 0x164, script: 0x52, flags: 0x0},
- 845: {region: 0xd1, script: 0x52, flags: 0x0},
- 846: {region: 0x164, script: 0x52, flags: 0x0},
- 847: {region: 0x164, script: 0x52, flags: 0x0},
- 848: {region: 0xd0, script: 0x52, flags: 0x0},
- 849: {region: 0x164, script: 0x52, flags: 0x0},
- 850: {region: 0xce, script: 0x52, flags: 0x0},
- 851: {region: 0xce, script: 0x52, flags: 0x0},
- 852: {region: 0x164, script: 0x52, flags: 0x0},
- 853: {region: 0x164, script: 0x52, flags: 0x0},
- 854: {region: 0x94, script: 0x52, flags: 0x0},
- 855: {region: 0x164, script: 0x52, flags: 0x0},
- 856: {region: 0xde, script: 0x52, flags: 0x0},
- 857: {region: 0x164, script: 0x52, flags: 0x0},
- 858: {region: 0x164, script: 0x52, flags: 0x0},
- 859: {region: 0x98, script: 0x52, flags: 0x0},
- 860: {region: 0x164, script: 0x52, flags: 0x0},
- 861: {region: 0x164, script: 0x52, flags: 0x0},
- 862: {region: 0xd8, script: 0x52, flags: 0x0},
- 863: {region: 0x51, script: 0x52, flags: 0x0},
- 864: {region: 0x164, script: 0x52, flags: 0x0},
- 865: {region: 0xd9, script: 0x52, flags: 0x0},
- 866: {region: 0x164, script: 0x52, flags: 0x0},
- 867: {region: 0x51, script: 0x52, flags: 0x0},
- 868: {region: 0x164, script: 0x52, flags: 0x0},
- 869: {region: 0x164, script: 0x52, flags: 0x0},
- 870: {region: 0xd9, script: 0x52, flags: 0x0},
- 871: {region: 0x122, script: 0x4e, flags: 0x0},
- 872: {region: 0x98, script: 0x20, flags: 0x0},
- 873: {region: 0x10b, script: 0xb7, flags: 0x0},
- 874: {region: 0x164, script: 0x52, flags: 0x0},
- 875: {region: 0x164, script: 0x52, flags: 0x0},
- 876: {region: 0x83, script: 0x70, flags: 0x0},
- 877: {region: 0x160, script: 0x52, flags: 0x0},
- 878: {region: 0x164, script: 0x52, flags: 0x0},
- 879: {region: 0x48, script: 0x17, flags: 0x0},
- 880: {region: 0x164, script: 0x52, flags: 0x0},
- 881: {region: 0x160, script: 0x52, flags: 0x0},
- 882: {region: 0x164, script: 0x52, flags: 0x0},
- 883: {region: 0x164, script: 0x52, flags: 0x0},
- 884: {region: 0x164, script: 0x52, flags: 0x0},
- 885: {region: 0x164, script: 0x52, flags: 0x0},
- 886: {region: 0x164, script: 0x52, flags: 0x0},
- 887: {region: 0x116, script: 0x52, flags: 0x0},
- 888: {region: 0x164, script: 0x52, flags: 0x0},
- 889: {region: 0x164, script: 0x52, flags: 0x0},
- 890: {region: 0x134, script: 0x52, flags: 0x0},
- 891: {region: 0x164, script: 0x52, flags: 0x0},
- 892: {region: 0x52, script: 0x52, flags: 0x0},
- 893: {region: 0x164, script: 0x52, flags: 0x0},
- 894: {region: 0xcd, script: 0x52, flags: 0x0},
- 895: {region: 0x12e, script: 0x52, flags: 0x0},
- 896: {region: 0x130, script: 0x52, flags: 0x0},
- 897: {region: 0x7f, script: 0x52, flags: 0x0},
- 898: {region: 0x77, script: 0x52, flags: 0x0},
- 899: {region: 0x164, script: 0x52, flags: 0x0},
- 901: {region: 0x164, script: 0x52, flags: 0x0},
- 902: {region: 0x164, script: 0x52, flags: 0x0},
- 903: {region: 0x6e, script: 0x52, flags: 0x0},
- 904: {region: 0x164, script: 0x52, flags: 0x0},
- 905: {region: 0x164, script: 0x52, flags: 0x0},
- 906: {region: 0x164, script: 0x52, flags: 0x0},
- 907: {region: 0x164, script: 0x52, flags: 0x0},
- 908: {region: 0x98, script: 0x75, flags: 0x0},
- 909: {region: 0x164, script: 0x52, flags: 0x0},
- 910: {region: 0x164, script: 0x5, flags: 0x0},
- 911: {region: 0x7c, script: 0x1e, flags: 0x0},
- 912: {region: 0x134, script: 0x76, flags: 0x0},
- 913: {region: 0x164, script: 0x5, flags: 0x0},
- 914: {region: 0xc4, script: 0x74, flags: 0x0},
- 915: {region: 0x164, script: 0x52, flags: 0x0},
- 916: {region: 0x2e, script: 0x3, flags: 0x1},
- 917: {region: 0xe6, script: 0x52, flags: 0x0},
- 918: {region: 0x31, script: 0x2, flags: 0x1},
- 919: {region: 0xe6, script: 0x52, flags: 0x0},
- 920: {region: 0x2f, script: 0x52, flags: 0x0},
- 921: {region: 0xef, script: 0x52, flags: 0x0},
- 922: {region: 0x164, script: 0x52, flags: 0x0},
- 923: {region: 0x77, script: 0x52, flags: 0x0},
- 924: {region: 0xd5, script: 0x52, flags: 0x0},
- 925: {region: 0x134, script: 0x52, flags: 0x0},
- 926: {region: 0x48, script: 0x52, flags: 0x0},
- 927: {region: 0x164, script: 0x52, flags: 0x0},
- 928: {region: 0x9b, script: 0xdd, flags: 0x0},
- 929: {region: 0x164, script: 0x52, flags: 0x0},
- 930: {region: 0x5f, script: 0x52, flags: 0x0},
- 931: {region: 0x164, script: 0x5, flags: 0x0},
- 932: {region: 0xaf, script: 0x7f, flags: 0x0},
- 934: {region: 0x164, script: 0x52, flags: 0x0},
- 935: {region: 0x164, script: 0x52, flags: 0x0},
- 936: {region: 0x98, script: 0x12, flags: 0x0},
- 937: {region: 0xa3, script: 0x52, flags: 0x0},
- 938: {region: 0xe8, script: 0x52, flags: 0x0},
- 939: {region: 0x164, script: 0x52, flags: 0x0},
- 940: {region: 0x9d, script: 0x52, flags: 0x0},
- 941: {region: 0x164, script: 0x52, flags: 0x0},
- 942: {region: 0x164, script: 0x52, flags: 0x0},
- 943: {region: 0x86, script: 0x2d, flags: 0x0},
- 944: {region: 0x74, script: 0x52, flags: 0x0},
- 945: {region: 0x164, script: 0x52, flags: 0x0},
- 946: {region: 0xe7, script: 0x45, flags: 0x0},
- 947: {region: 0x9b, script: 0x5, flags: 0x0},
- 948: {region: 0x1, script: 0x52, flags: 0x0},
- 949: {region: 0x23, script: 0x5, flags: 0x0},
- 950: {region: 0x164, script: 0x52, flags: 0x0},
- 951: {region: 0x40, script: 0x52, flags: 0x0},
- 952: {region: 0x164, script: 0x52, flags: 0x0},
- 953: {region: 0x79, script: 0x52, flags: 0x0},
- 954: {region: 0x164, script: 0x52, flags: 0x0},
- 955: {region: 0xe3, script: 0x52, flags: 0x0},
- 956: {region: 0x88, script: 0x52, flags: 0x0},
- 957: {region: 0x68, script: 0x52, flags: 0x0},
- 958: {region: 0x164, script: 0x52, flags: 0x0},
- 959: {region: 0x98, script: 0x20, flags: 0x0},
- 960: {region: 0x164, script: 0x52, flags: 0x0},
- 961: {region: 0x101, script: 0x52, flags: 0x0},
- 962: {region: 0x94, script: 0x52, flags: 0x0},
- 963: {region: 0x164, script: 0x52, flags: 0x0},
- 964: {region: 0x164, script: 0x52, flags: 0x0},
- 965: {region: 0x9d, script: 0x52, flags: 0x0},
- 966: {region: 0x164, script: 0x5, flags: 0x0},
- 967: {region: 0x98, script: 0x52, flags: 0x0},
- 968: {region: 0x33, script: 0x2, flags: 0x1},
- 969: {region: 0xda, script: 0x20, flags: 0x0},
- 970: {region: 0x34, script: 0xe, flags: 0x0},
- 971: {region: 0x4d, script: 0x52, flags: 0x0},
- 972: {region: 0x71, script: 0x52, flags: 0x0},
- 973: {region: 0x4d, script: 0x52, flags: 0x0},
- 974: {region: 0x9b, script: 0x5, flags: 0x0},
- 975: {region: 0x10b, script: 0x52, flags: 0x0},
- 976: {region: 0x39, script: 0x52, flags: 0x0},
- 977: {region: 0x164, script: 0x52, flags: 0x0},
- 978: {region: 0xd0, script: 0x52, flags: 0x0},
- 979: {region: 0x103, script: 0x52, flags: 0x0},
- 980: {region: 0x94, script: 0x52, flags: 0x0},
- 981: {region: 0x12e, script: 0x52, flags: 0x0},
- 982: {region: 0x164, script: 0x52, flags: 0x0},
- 983: {region: 0x164, script: 0x52, flags: 0x0},
- 984: {region: 0x72, script: 0x52, flags: 0x0},
- 985: {region: 0x105, script: 0x1e, flags: 0x0},
- 986: {region: 0x12f, script: 0x1e, flags: 0x0},
- 987: {region: 0x108, script: 0x52, flags: 0x0},
- 988: {region: 0x106, script: 0x52, flags: 0x0},
- 989: {region: 0x12e, script: 0x52, flags: 0x0},
- 990: {region: 0x164, script: 0x52, flags: 0x0},
- 991: {region: 0xa1, script: 0x44, flags: 0x0},
- 992: {region: 0x98, script: 0x20, flags: 0x0},
- 993: {region: 0x7f, script: 0x52, flags: 0x0},
- 994: {region: 0x105, script: 0x1e, flags: 0x0},
- 995: {region: 0xa3, script: 0x52, flags: 0x0},
- 996: {region: 0x94, script: 0x52, flags: 0x0},
- 997: {region: 0x98, script: 0x52, flags: 0x0},
- 998: {region: 0x98, script: 0xbb, flags: 0x0},
- 999: {region: 0x164, script: 0x52, flags: 0x0},
- 1000: {region: 0x164, script: 0x52, flags: 0x0},
- 1001: {region: 0x12e, script: 0x52, flags: 0x0},
- 1002: {region: 0x9d, script: 0x52, flags: 0x0},
- 1003: {region: 0x98, script: 0x20, flags: 0x0},
- 1004: {region: 0x164, script: 0x5, flags: 0x0},
- 1005: {region: 0x9d, script: 0x52, flags: 0x0},
- 1006: {region: 0x7a, script: 0x52, flags: 0x0},
- 1007: {region: 0x48, script: 0x52, flags: 0x0},
- 1008: {region: 0x35, script: 0x4, flags: 0x1},
- 1009: {region: 0x9d, script: 0x52, flags: 0x0},
- 1010: {region: 0x9b, script: 0x5, flags: 0x0},
- 1011: {region: 0xd9, script: 0x52, flags: 0x0},
- 1012: {region: 0x4e, script: 0x52, flags: 0x0},
- 1013: {region: 0xd0, script: 0x52, flags: 0x0},
- 1014: {region: 0xce, script: 0x52, flags: 0x0},
- 1015: {region: 0xc2, script: 0x52, flags: 0x0},
- 1016: {region: 0x4b, script: 0x52, flags: 0x0},
- 1017: {region: 0x95, script: 0x72, flags: 0x0},
- 1018: {region: 0xb5, script: 0x52, flags: 0x0},
- 1019: {region: 0x164, script: 0x27, flags: 0x0},
- 1020: {region: 0x164, script: 0x52, flags: 0x0},
- 1022: {region: 0xb9, script: 0xd2, flags: 0x0},
- 1023: {region: 0x164, script: 0x52, flags: 0x0},
- 1024: {region: 0xc3, script: 0x6b, flags: 0x0},
- 1025: {region: 0x164, script: 0x5, flags: 0x0},
- 1026: {region: 0xb2, script: 0xc1, flags: 0x0},
- 1027: {region: 0x6e, script: 0x52, flags: 0x0},
- 1028: {region: 0x164, script: 0x52, flags: 0x0},
- 1029: {region: 0x164, script: 0x52, flags: 0x0},
- 1030: {region: 0x164, script: 0x52, flags: 0x0},
- 1031: {region: 0x164, script: 0x52, flags: 0x0},
- 1032: {region: 0x110, script: 0x52, flags: 0x0},
- 1033: {region: 0x164, script: 0x52, flags: 0x0},
- 1034: {region: 0xe7, script: 0x5, flags: 0x0},
- 1035: {region: 0x164, script: 0x52, flags: 0x0},
- 1036: {region: 0x10e, script: 0x52, flags: 0x0},
- 1037: {region: 0x164, script: 0x52, flags: 0x0},
- 1038: {region: 0xe8, script: 0x52, flags: 0x0},
- 1039: {region: 0x164, script: 0x52, flags: 0x0},
- 1040: {region: 0x94, script: 0x52, flags: 0x0},
- 1041: {region: 0x141, script: 0x52, flags: 0x0},
- 1042: {region: 0x10b, script: 0x52, flags: 0x0},
- 1044: {region: 0x10b, script: 0x52, flags: 0x0},
- 1045: {region: 0x71, script: 0x52, flags: 0x0},
- 1046: {region: 0x96, script: 0xb8, flags: 0x0},
- 1047: {region: 0x164, script: 0x52, flags: 0x0},
- 1048: {region: 0x71, script: 0x52, flags: 0x0},
- 1049: {region: 0x163, script: 0x52, flags: 0x0},
- 1050: {region: 0x164, script: 0x52, flags: 0x0},
- 1051: {region: 0xc2, script: 0x52, flags: 0x0},
- 1052: {region: 0x164, script: 0x52, flags: 0x0},
- 1053: {region: 0x164, script: 0x52, flags: 0x0},
- 1054: {region: 0x164, script: 0x52, flags: 0x0},
- 1055: {region: 0x114, script: 0x52, flags: 0x0},
- 1056: {region: 0x164, script: 0x52, flags: 0x0},
- 1057: {region: 0x164, script: 0x52, flags: 0x0},
- 1058: {region: 0x122, script: 0xd5, flags: 0x0},
- 1059: {region: 0x164, script: 0x52, flags: 0x0},
- 1060: {region: 0x164, script: 0x52, flags: 0x0},
- 1061: {region: 0x164, script: 0x52, flags: 0x0},
- 1062: {region: 0x164, script: 0x52, flags: 0x0},
- 1063: {region: 0x26, script: 0x52, flags: 0x0},
- 1064: {region: 0x39, script: 0x5, flags: 0x1},
- 1065: {region: 0x98, script: 0xc2, flags: 0x0},
- 1066: {region: 0x115, script: 0x52, flags: 0x0},
- 1067: {region: 0x113, script: 0x52, flags: 0x0},
- 1068: {region: 0x98, script: 0x20, flags: 0x0},
- 1069: {region: 0x160, script: 0x52, flags: 0x0},
- 1070: {region: 0x164, script: 0x52, flags: 0x0},
- 1071: {region: 0x164, script: 0x52, flags: 0x0},
- 1072: {region: 0x6c, script: 0x52, flags: 0x0},
- 1073: {region: 0x160, script: 0x52, flags: 0x0},
- 1074: {region: 0x164, script: 0x52, flags: 0x0},
- 1075: {region: 0x5f, script: 0x52, flags: 0x0},
- 1076: {region: 0x94, script: 0x52, flags: 0x0},
- 1077: {region: 0x164, script: 0x52, flags: 0x0},
- 1078: {region: 0x164, script: 0x52, flags: 0x0},
- 1079: {region: 0x12e, script: 0x52, flags: 0x0},
- 1080: {region: 0x164, script: 0x52, flags: 0x0},
- 1081: {region: 0x83, script: 0x52, flags: 0x0},
- 1082: {region: 0x10b, script: 0x52, flags: 0x0},
- 1083: {region: 0x12e, script: 0x52, flags: 0x0},
- 1084: {region: 0x15e, script: 0x5, flags: 0x0},
- 1085: {region: 0x4a, script: 0x52, flags: 0x0},
- 1086: {region: 0x5f, script: 0x52, flags: 0x0},
- 1087: {region: 0x164, script: 0x52, flags: 0x0},
- 1088: {region: 0x98, script: 0x20, flags: 0x0},
- 1089: {region: 0x94, script: 0x52, flags: 0x0},
- 1090: {region: 0x164, script: 0x52, flags: 0x0},
- 1091: {region: 0x34, script: 0xe, flags: 0x0},
- 1092: {region: 0x9a, script: 0xc5, flags: 0x0},
- 1093: {region: 0xe8, script: 0x52, flags: 0x0},
- 1094: {region: 0x98, script: 0xcd, flags: 0x0},
- 1095: {region: 0xda, script: 0x20, flags: 0x0},
- 1096: {region: 0x164, script: 0x52, flags: 0x0},
- 1097: {region: 0x164, script: 0x52, flags: 0x0},
- 1098: {region: 0x164, script: 0x52, flags: 0x0},
- 1099: {region: 0x164, script: 0x52, flags: 0x0},
- 1100: {region: 0x164, script: 0x52, flags: 0x0},
- 1101: {region: 0x164, script: 0x52, flags: 0x0},
- 1102: {region: 0x164, script: 0x52, flags: 0x0},
- 1103: {region: 0x164, script: 0x52, flags: 0x0},
- 1104: {region: 0xe6, script: 0x52, flags: 0x0},
- 1105: {region: 0x164, script: 0x52, flags: 0x0},
- 1106: {region: 0x164, script: 0x52, flags: 0x0},
- 1107: {region: 0x98, script: 0x4a, flags: 0x0},
- 1108: {region: 0x52, script: 0xcb, flags: 0x0},
- 1109: {region: 0xda, script: 0x20, flags: 0x0},
- 1110: {region: 0xda, script: 0x20, flags: 0x0},
- 1111: {region: 0x98, script: 0xd0, flags: 0x0},
- 1112: {region: 0x164, script: 0x52, flags: 0x0},
- 1113: {region: 0x111, script: 0x52, flags: 0x0},
- 1114: {region: 0x130, script: 0x52, flags: 0x0},
- 1115: {region: 0x125, script: 0x52, flags: 0x0},
- 1116: {region: 0x164, script: 0x52, flags: 0x0},
- 1117: {region: 0x3e, script: 0x3, flags: 0x1},
- 1118: {region: 0x164, script: 0x52, flags: 0x0},
- 1119: {region: 0x164, script: 0x52, flags: 0x0},
- 1120: {region: 0x164, script: 0x52, flags: 0x0},
- 1121: {region: 0x122, script: 0xd5, flags: 0x0},
- 1122: {region: 0xda, script: 0x20, flags: 0x0},
- 1123: {region: 0xda, script: 0x20, flags: 0x0},
- 1124: {region: 0xda, script: 0x20, flags: 0x0},
- 1125: {region: 0x6e, script: 0x27, flags: 0x0},
- 1126: {region: 0x164, script: 0x52, flags: 0x0},
- 1127: {region: 0x6c, script: 0x27, flags: 0x0},
- 1128: {region: 0x164, script: 0x52, flags: 0x0},
- 1129: {region: 0x164, script: 0x52, flags: 0x0},
- 1130: {region: 0x164, script: 0x52, flags: 0x0},
- 1131: {region: 0xd5, script: 0x52, flags: 0x0},
- 1132: {region: 0x126, script: 0x52, flags: 0x0},
- 1133: {region: 0x124, script: 0x52, flags: 0x0},
- 1134: {region: 0x31, script: 0x52, flags: 0x0},
- 1135: {region: 0xda, script: 0x20, flags: 0x0},
- 1136: {region: 0xe6, script: 0x52, flags: 0x0},
- 1137: {region: 0x164, script: 0x52, flags: 0x0},
- 1138: {region: 0x164, script: 0x52, flags: 0x0},
- 1139: {region: 0x31, script: 0x52, flags: 0x0},
- 1140: {region: 0xd3, script: 0x52, flags: 0x0},
- 1141: {region: 0x164, script: 0x52, flags: 0x0},
- 1142: {region: 0x160, script: 0x52, flags: 0x0},
- 1143: {region: 0x164, script: 0x52, flags: 0x0},
- 1144: {region: 0x128, script: 0x52, flags: 0x0},
- 1145: {region: 0x164, script: 0x52, flags: 0x0},
- 1146: {region: 0xcd, script: 0x52, flags: 0x0},
- 1147: {region: 0x164, script: 0x52, flags: 0x0},
- 1148: {region: 0xe5, script: 0x52, flags: 0x0},
- 1149: {region: 0x164, script: 0x52, flags: 0x0},
- 1150: {region: 0x164, script: 0x52, flags: 0x0},
- 1151: {region: 0x164, script: 0x52, flags: 0x0},
- 1152: {region: 0x12a, script: 0x52, flags: 0x0},
- 1153: {region: 0x12a, script: 0x52, flags: 0x0},
- 1154: {region: 0x12d, script: 0x52, flags: 0x0},
- 1155: {region: 0x164, script: 0x5, flags: 0x0},
- 1156: {region: 0x160, script: 0x52, flags: 0x0},
- 1157: {region: 0x86, script: 0x2d, flags: 0x0},
- 1158: {region: 0xda, script: 0x20, flags: 0x0},
- 1159: {region: 0xe6, script: 0x52, flags: 0x0},
- 1160: {region: 0x42, script: 0xd6, flags: 0x0},
- 1161: {region: 0x164, script: 0x52, flags: 0x0},
- 1162: {region: 0x105, script: 0x1e, flags: 0x0},
- 1163: {region: 0x164, script: 0x52, flags: 0x0},
- 1164: {region: 0x164, script: 0x52, flags: 0x0},
- 1165: {region: 0x130, script: 0x52, flags: 0x0},
- 1166: {region: 0x164, script: 0x52, flags: 0x0},
- 1167: {region: 0x122, script: 0xd5, flags: 0x0},
- 1168: {region: 0x31, script: 0x52, flags: 0x0},
- 1169: {region: 0x164, script: 0x52, flags: 0x0},
- 1170: {region: 0x164, script: 0x52, flags: 0x0},
- 1171: {region: 0xcd, script: 0x52, flags: 0x0},
- 1172: {region: 0x164, script: 0x52, flags: 0x0},
- 1173: {region: 0x164, script: 0x52, flags: 0x0},
- 1174: {region: 0x12c, script: 0x52, flags: 0x0},
- 1175: {region: 0x164, script: 0x52, flags: 0x0},
- 1177: {region: 0x164, script: 0x52, flags: 0x0},
- 1178: {region: 0xd3, script: 0x52, flags: 0x0},
- 1179: {region: 0x52, script: 0xce, flags: 0x0},
- 1180: {region: 0xe4, script: 0x52, flags: 0x0},
- 1181: {region: 0x164, script: 0x52, flags: 0x0},
- 1182: {region: 0x105, script: 0x1e, flags: 0x0},
- 1183: {region: 0xb9, script: 0x52, flags: 0x0},
- 1184: {region: 0x164, script: 0x52, flags: 0x0},
- 1185: {region: 0x105, script: 0x1e, flags: 0x0},
- 1186: {region: 0x41, script: 0x4, flags: 0x1},
- 1187: {region: 0x11b, script: 0xd8, flags: 0x0},
- 1188: {region: 0x12f, script: 0x1e, flags: 0x0},
- 1189: {region: 0x74, script: 0x52, flags: 0x0},
- 1190: {region: 0x29, script: 0x52, flags: 0x0},
- 1192: {region: 0x45, script: 0x3, flags: 0x1},
- 1193: {region: 0x98, script: 0xe, flags: 0x0},
- 1194: {region: 0xe7, script: 0x5, flags: 0x0},
- 1195: {region: 0x164, script: 0x52, flags: 0x0},
- 1196: {region: 0x164, script: 0x52, flags: 0x0},
- 1197: {region: 0x164, script: 0x52, flags: 0x0},
- 1198: {region: 0x164, script: 0x52, flags: 0x0},
- 1199: {region: 0x164, script: 0x52, flags: 0x0},
- 1200: {region: 0x164, script: 0x52, flags: 0x0},
- 1201: {region: 0x164, script: 0x52, flags: 0x0},
- 1202: {region: 0x48, script: 0x4, flags: 0x1},
- 1203: {region: 0x164, script: 0x52, flags: 0x0},
- 1204: {region: 0xb3, script: 0xd9, flags: 0x0},
- 1205: {region: 0x164, script: 0x52, flags: 0x0},
- 1206: {region: 0x160, script: 0x52, flags: 0x0},
- 1207: {region: 0x9d, script: 0x52, flags: 0x0},
- 1208: {region: 0x105, script: 0x52, flags: 0x0},
- 1209: {region: 0x13d, script: 0x52, flags: 0x0},
- 1210: {region: 0x11a, script: 0x52, flags: 0x0},
- 1211: {region: 0x164, script: 0x52, flags: 0x0},
- 1212: {region: 0x35, script: 0x52, flags: 0x0},
- 1213: {region: 0x5f, script: 0x52, flags: 0x0},
- 1214: {region: 0xd0, script: 0x52, flags: 0x0},
- 1215: {region: 0x1, script: 0x52, flags: 0x0},
- 1216: {region: 0x105, script: 0x52, flags: 0x0},
- 1217: {region: 0x69, script: 0x52, flags: 0x0},
- 1218: {region: 0x12e, script: 0x52, flags: 0x0},
- 1219: {region: 0x164, script: 0x52, flags: 0x0},
- 1220: {region: 0x35, script: 0x52, flags: 0x0},
- 1221: {region: 0x4d, script: 0x52, flags: 0x0},
- 1222: {region: 0x164, script: 0x52, flags: 0x0},
- 1223: {region: 0x6e, script: 0x27, flags: 0x0},
- 1224: {region: 0x164, script: 0x52, flags: 0x0},
- 1225: {region: 0xe6, script: 0x52, flags: 0x0},
- 1226: {region: 0x2e, script: 0x52, flags: 0x0},
- 1227: {region: 0x98, script: 0xd0, flags: 0x0},
- 1228: {region: 0x98, script: 0x20, flags: 0x0},
- 1229: {region: 0x164, script: 0x52, flags: 0x0},
- 1230: {region: 0x164, script: 0x52, flags: 0x0},
- 1231: {region: 0x164, script: 0x52, flags: 0x0},
- 1232: {region: 0x164, script: 0x52, flags: 0x0},
- 1233: {region: 0x164, script: 0x52, flags: 0x0},
- 1234: {region: 0x164, script: 0x52, flags: 0x0},
- 1235: {region: 0x164, script: 0x52, flags: 0x0},
- 1236: {region: 0x164, script: 0x52, flags: 0x0},
- 1237: {region: 0x164, script: 0x52, flags: 0x0},
- 1238: {region: 0x13f, script: 0x52, flags: 0x0},
- 1239: {region: 0x164, script: 0x52, flags: 0x0},
- 1240: {region: 0x164, script: 0x52, flags: 0x0},
- 1241: {region: 0xa7, script: 0x5, flags: 0x0},
- 1242: {region: 0x164, script: 0x52, flags: 0x0},
- 1243: {region: 0x113, script: 0x52, flags: 0x0},
- 1244: {region: 0x164, script: 0x52, flags: 0x0},
- 1245: {region: 0x164, script: 0x52, flags: 0x0},
- 1246: {region: 0x164, script: 0x52, flags: 0x0},
- 1247: {region: 0x164, script: 0x52, flags: 0x0},
- 1248: {region: 0x98, script: 0x20, flags: 0x0},
- 1249: {region: 0x52, script: 0x34, flags: 0x0},
- 1250: {region: 0x164, script: 0x52, flags: 0x0},
- 1251: {region: 0x164, script: 0x52, flags: 0x0},
- 1252: {region: 0x40, script: 0x52, flags: 0x0},
- 1253: {region: 0x164, script: 0x52, flags: 0x0},
- 1254: {region: 0x12a, script: 0x18, flags: 0x0},
- 1255: {region: 0x164, script: 0x52, flags: 0x0},
- 1256: {region: 0x160, script: 0x52, flags: 0x0},
- 1257: {region: 0x164, script: 0x52, flags: 0x0},
- 1258: {region: 0x12a, script: 0x5a, flags: 0x0},
- 1259: {region: 0x12a, script: 0x5b, flags: 0x0},
- 1260: {region: 0x7c, script: 0x29, flags: 0x0},
- 1261: {region: 0x52, script: 0x5e, flags: 0x0},
- 1262: {region: 0x10a, script: 0x62, flags: 0x0},
- 1263: {region: 0x107, script: 0x6c, flags: 0x0},
- 1264: {region: 0x98, script: 0x20, flags: 0x0},
- 1265: {region: 0x130, script: 0x52, flags: 0x0},
- 1266: {region: 0x164, script: 0x52, flags: 0x0},
- 1267: {region: 0x9b, script: 0x82, flags: 0x0},
- 1268: {region: 0x164, script: 0x52, flags: 0x0},
- 1269: {region: 0x15d, script: 0xba, flags: 0x0},
- 1270: {region: 0x164, script: 0x52, flags: 0x0},
- 1271: {region: 0x164, script: 0x52, flags: 0x0},
- 1272: {region: 0xda, script: 0x20, flags: 0x0},
- 1273: {region: 0x164, script: 0x52, flags: 0x0},
- 1274: {region: 0x164, script: 0x52, flags: 0x0},
- 1275: {region: 0xd0, script: 0x52, flags: 0x0},
- 1276: {region: 0x74, script: 0x52, flags: 0x0},
- 1277: {region: 0x164, script: 0x52, flags: 0x0},
- 1278: {region: 0x164, script: 0x52, flags: 0x0},
- 1279: {region: 0x51, script: 0x52, flags: 0x0},
- 1280: {region: 0x164, script: 0x52, flags: 0x0},
- 1281: {region: 0x164, script: 0x52, flags: 0x0},
- 1282: {region: 0x164, script: 0x52, flags: 0x0},
- 1283: {region: 0x51, script: 0x52, flags: 0x0},
- 1284: {region: 0x164, script: 0x52, flags: 0x0},
- 1285: {region: 0x164, script: 0x52, flags: 0x0},
- 1286: {region: 0x164, script: 0x52, flags: 0x0},
- 1287: {region: 0x164, script: 0x52, flags: 0x0},
- 1288: {region: 0x1, script: 0x37, flags: 0x0},
- 1289: {region: 0x164, script: 0x52, flags: 0x0},
- 1290: {region: 0x164, script: 0x52, flags: 0x0},
- 1291: {region: 0x164, script: 0x52, flags: 0x0},
- 1292: {region: 0x164, script: 0x52, flags: 0x0},
- 1293: {region: 0x164, script: 0x52, flags: 0x0},
- 1294: {region: 0xd5, script: 0x52, flags: 0x0},
- 1295: {region: 0x164, script: 0x52, flags: 0x0},
- 1296: {region: 0x164, script: 0x52, flags: 0x0},
- 1297: {region: 0x164, script: 0x52, flags: 0x0},
- 1298: {region: 0x40, script: 0x52, flags: 0x0},
- 1299: {region: 0x164, script: 0x52, flags: 0x0},
- 1300: {region: 0xce, script: 0x52, flags: 0x0},
- 1301: {region: 0x4c, script: 0x3, flags: 0x1},
- 1302: {region: 0x164, script: 0x52, flags: 0x0},
- 1303: {region: 0x164, script: 0x52, flags: 0x0},
- 1304: {region: 0x164, script: 0x52, flags: 0x0},
- 1305: {region: 0x52, script: 0x52, flags: 0x0},
- 1306: {region: 0x10a, script: 0x52, flags: 0x0},
- 1308: {region: 0xa7, script: 0x5, flags: 0x0},
- 1309: {region: 0xd8, script: 0x52, flags: 0x0},
- 1310: {region: 0xb9, script: 0xd2, flags: 0x0},
- 1311: {region: 0x4f, script: 0x14, flags: 0x1},
- 1312: {region: 0x164, script: 0x52, flags: 0x0},
- 1313: {region: 0x121, script: 0x52, flags: 0x0},
- 1314: {region: 0xcf, script: 0x52, flags: 0x0},
- 1315: {region: 0x164, script: 0x52, flags: 0x0},
- 1316: {region: 0x160, script: 0x52, flags: 0x0},
- 1318: {region: 0x12a, script: 0x52, flags: 0x0},
-}
-
-// likelyLangList holds lists info associated with likelyLang.
-// Size: 396 bytes, 99 elements
-var likelyLangList = [99]likelyScriptRegion{
- 0: {region: 0x9b, script: 0x7, flags: 0x0},
- 1: {region: 0xa0, script: 0x6d, flags: 0x2},
- 2: {region: 0x11b, script: 0x78, flags: 0x2},
- 3: {region: 0x31, script: 0x52, flags: 0x0},
- 4: {region: 0x9a, script: 0x5, flags: 0x4},
- 5: {region: 0x9b, script: 0x5, flags: 0x4},
- 6: {region: 0x105, script: 0x1e, flags: 0x4},
- 7: {region: 0x9b, script: 0x5, flags: 0x2},
- 8: {region: 0x98, script: 0xe, flags: 0x0},
- 9: {region: 0x34, script: 0x16, flags: 0x2},
- 10: {region: 0x105, script: 0x1e, flags: 0x0},
- 11: {region: 0x37, script: 0x2a, flags: 0x2},
- 12: {region: 0x134, script: 0x52, flags: 0x0},
- 13: {region: 0x7a, script: 0xbd, flags: 0x2},
- 14: {region: 0x113, script: 0x52, flags: 0x0},
- 15: {region: 0x83, script: 0x1, flags: 0x2},
- 16: {region: 0x5c, script: 0x1d, flags: 0x0},
- 17: {region: 0x86, script: 0x57, flags: 0x2},
- 18: {region: 0xd5, script: 0x52, flags: 0x0},
- 19: {region: 0x51, script: 0x5, flags: 0x4},
- 20: {region: 0x10a, script: 0x5, flags: 0x4},
- 21: {region: 0xad, script: 0x1e, flags: 0x0},
- 22: {region: 0x23, script: 0x5, flags: 0x4},
- 23: {region: 0x52, script: 0x5, flags: 0x4},
- 24: {region: 0x9b, script: 0x5, flags: 0x4},
- 25: {region: 0xc4, script: 0x5, flags: 0x4},
- 26: {region: 0x52, script: 0x5, flags: 0x2},
- 27: {region: 0x12a, script: 0x52, flags: 0x0},
- 28: {region: 0xaf, script: 0x5, flags: 0x4},
- 29: {region: 0x9a, script: 0x5, flags: 0x2},
- 30: {region: 0xa4, script: 0x1e, flags: 0x0},
- 31: {region: 0x52, script: 0x5, flags: 0x4},
- 32: {region: 0x12a, script: 0x52, flags: 0x4},
- 33: {region: 0x52, script: 0x5, flags: 0x2},
- 34: {region: 0x12a, script: 0x52, flags: 0x2},
- 35: {region: 0xda, script: 0x20, flags: 0x0},
- 36: {region: 0x98, script: 0x55, flags: 0x2},
- 37: {region: 0x82, script: 0x52, flags: 0x0},
- 38: {region: 0x83, script: 0x70, flags: 0x4},
- 39: {region: 0x83, script: 0x70, flags: 0x2},
- 40: {region: 0xc4, script: 0x1e, flags: 0x0},
- 41: {region: 0x52, script: 0x66, flags: 0x4},
- 42: {region: 0x52, script: 0x66, flags: 0x2},
- 43: {region: 0xcf, script: 0x52, flags: 0x0},
- 44: {region: 0x49, script: 0x5, flags: 0x4},
- 45: {region: 0x94, script: 0x5, flags: 0x4},
- 46: {region: 0x98, script: 0x2f, flags: 0x0},
- 47: {region: 0xe7, script: 0x5, flags: 0x4},
- 48: {region: 0xe7, script: 0x5, flags: 0x2},
- 49: {region: 0x9b, script: 0x7c, flags: 0x0},
- 50: {region: 0x52, script: 0x7d, flags: 0x2},
- 51: {region: 0xb9, script: 0xd2, flags: 0x0},
- 52: {region: 0xd8, script: 0x52, flags: 0x4},
- 53: {region: 0xe7, script: 0x5, flags: 0x0},
- 54: {region: 0x98, script: 0x20, flags: 0x2},
- 55: {region: 0x98, script: 0x47, flags: 0x2},
- 56: {region: 0x98, script: 0xc0, flags: 0x2},
- 57: {region: 0x104, script: 0x1e, flags: 0x0},
- 58: {region: 0xbc, script: 0x52, flags: 0x4},
- 59: {region: 0x103, script: 0x52, flags: 0x4},
- 60: {region: 0x105, script: 0x52, flags: 0x4},
- 61: {region: 0x12a, script: 0x52, flags: 0x4},
- 62: {region: 0x123, script: 0x1e, flags: 0x0},
- 63: {region: 0xe7, script: 0x5, flags: 0x4},
- 64: {region: 0xe7, script: 0x5, flags: 0x2},
- 65: {region: 0x52, script: 0x5, flags: 0x0},
- 66: {region: 0xad, script: 0x1e, flags: 0x4},
- 67: {region: 0xc4, script: 0x1e, flags: 0x4},
- 68: {region: 0xad, script: 0x1e, flags: 0x2},
- 69: {region: 0x98, script: 0xe, flags: 0x0},
- 70: {region: 0xda, script: 0x20, flags: 0x4},
- 71: {region: 0xda, script: 0x20, flags: 0x2},
- 72: {region: 0x136, script: 0x52, flags: 0x0},
- 73: {region: 0x23, script: 0x5, flags: 0x4},
- 74: {region: 0x52, script: 0x1e, flags: 0x4},
- 75: {region: 0x23, script: 0x5, flags: 0x2},
- 76: {region: 0x8c, script: 0x35, flags: 0x0},
- 77: {region: 0x52, script: 0x34, flags: 0x4},
- 78: {region: 0x52, script: 0x34, flags: 0x2},
- 79: {region: 0x52, script: 0x34, flags: 0x0},
- 80: {region: 0x2e, script: 0x35, flags: 0x4},
- 81: {region: 0x3d, script: 0x35, flags: 0x4},
- 82: {region: 0x7a, script: 0x35, flags: 0x4},
- 83: {region: 0x7d, script: 0x35, flags: 0x4},
- 84: {region: 0x8c, script: 0x35, flags: 0x4},
- 85: {region: 0x94, script: 0x35, flags: 0x4},
- 86: {region: 0xc5, script: 0x35, flags: 0x4},
- 87: {region: 0xcf, script: 0x35, flags: 0x4},
- 88: {region: 0xe1, script: 0x35, flags: 0x4},
- 89: {region: 0xe4, script: 0x35, flags: 0x4},
- 90: {region: 0xe6, script: 0x35, flags: 0x4},
- 91: {region: 0x115, script: 0x35, flags: 0x4},
- 92: {region: 0x122, script: 0x35, flags: 0x4},
- 93: {region: 0x12d, script: 0x35, flags: 0x4},
- 94: {region: 0x134, script: 0x35, flags: 0x4},
- 95: {region: 0x13d, script: 0x35, flags: 0x4},
- 96: {region: 0x12d, script: 0x11, flags: 0x2},
- 97: {region: 0x12d, script: 0x30, flags: 0x2},
- 98: {region: 0x12d, script: 0x35, 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: 1428 bytes, 357 elements
-var likelyRegion = [357]likelyLangScript{
- 33: {lang: 0xd5, script: 0x52, flags: 0x0},
- 34: {lang: 0x39, script: 0x5, flags: 0x0},
- 35: {lang: 0x0, script: 0x2, flags: 0x1},
- 38: {lang: 0x2, script: 0x2, flags: 0x1},
- 39: {lang: 0x4, script: 0x2, flags: 0x1},
- 41: {lang: 0x3b7, script: 0x52, flags: 0x0},
- 42: {lang: 0x0, script: 0x52, flags: 0x0},
- 43: {lang: 0x139, script: 0x52, flags: 0x0},
- 44: {lang: 0x411, script: 0x52, flags: 0x0},
- 45: {lang: 0x109, script: 0x52, flags: 0x0},
- 47: {lang: 0x35e, script: 0x52, flags: 0x0},
- 48: {lang: 0x43a, script: 0x52, flags: 0x0},
- 49: {lang: 0x57, script: 0x52, flags: 0x0},
- 50: {lang: 0x6, script: 0x2, flags: 0x1},
- 52: {lang: 0xa3, script: 0xe, flags: 0x0},
- 53: {lang: 0x35e, script: 0x52, flags: 0x0},
- 54: {lang: 0x159, script: 0x52, flags: 0x0},
- 55: {lang: 0x7d, script: 0x1e, flags: 0x0},
- 56: {lang: 0x39, script: 0x5, flags: 0x0},
- 57: {lang: 0x3d0, script: 0x52, flags: 0x0},
- 58: {lang: 0x159, script: 0x52, flags: 0x0},
- 59: {lang: 0x159, script: 0x52, flags: 0x0},
- 61: {lang: 0x316, script: 0x52, flags: 0x0},
- 62: {lang: 0x139, script: 0x52, flags: 0x0},
- 63: {lang: 0x398, script: 0x52, flags: 0x0},
- 64: {lang: 0x3b7, script: 0x52, flags: 0x0},
- 66: {lang: 0x8, script: 0x2, flags: 0x1},
- 68: {lang: 0x0, script: 0x52, flags: 0x0},
- 70: {lang: 0x70, script: 0x1e, flags: 0x0},
- 72: {lang: 0x508, script: 0x37, flags: 0x2},
- 73: {lang: 0x316, script: 0x5, flags: 0x2},
- 74: {lang: 0x43b, script: 0x52, flags: 0x0},
- 75: {lang: 0x159, script: 0x52, flags: 0x0},
- 76: {lang: 0x159, script: 0x52, flags: 0x0},
- 77: {lang: 0x109, script: 0x52, flags: 0x0},
- 78: {lang: 0x159, script: 0x52, flags: 0x0},
- 80: {lang: 0x139, script: 0x52, flags: 0x0},
- 81: {lang: 0x159, script: 0x52, flags: 0x0},
- 82: {lang: 0xa, script: 0x5, flags: 0x1},
- 83: {lang: 0x139, script: 0x52, flags: 0x0},
- 84: {lang: 0x0, script: 0x52, flags: 0x0},
- 85: {lang: 0x139, script: 0x52, flags: 0x0},
- 88: {lang: 0x139, script: 0x52, flags: 0x0},
- 89: {lang: 0x3b7, script: 0x52, flags: 0x0},
- 90: {lang: 0x398, script: 0x52, flags: 0x0},
- 92: {lang: 0xf, script: 0x2, flags: 0x1},
- 93: {lang: 0xf6, script: 0x52, flags: 0x0},
- 95: {lang: 0x109, script: 0x52, flags: 0x0},
- 97: {lang: 0x1, script: 0x52, flags: 0x0},
- 98: {lang: 0xfd, script: 0x52, flags: 0x0},
- 100: {lang: 0x139, script: 0x52, flags: 0x0},
- 102: {lang: 0x11, script: 0x2, flags: 0x1},
- 103: {lang: 0x139, script: 0x52, flags: 0x0},
- 104: {lang: 0x139, script: 0x52, flags: 0x0},
- 105: {lang: 0x13b, script: 0x52, flags: 0x0},
- 106: {lang: 0x39, script: 0x5, flags: 0x0},
- 107: {lang: 0x39, script: 0x5, flags: 0x0},
- 108: {lang: 0x465, script: 0x27, flags: 0x0},
- 109: {lang: 0x139, script: 0x52, flags: 0x0},
- 110: {lang: 0x13, script: 0x2, flags: 0x1},
- 112: {lang: 0x109, script: 0x52, flags: 0x0},
- 113: {lang: 0x14c, script: 0x52, flags: 0x0},
- 114: {lang: 0x1b9, script: 0x20, flags: 0x2},
- 117: {lang: 0x153, script: 0x52, flags: 0x0},
- 119: {lang: 0x159, script: 0x52, flags: 0x0},
- 121: {lang: 0x159, script: 0x52, flags: 0x0},
- 122: {lang: 0x15, script: 0x2, flags: 0x1},
- 124: {lang: 0x17, script: 0x3, flags: 0x1},
- 125: {lang: 0x159, script: 0x52, flags: 0x0},
- 127: {lang: 0x20, script: 0x52, flags: 0x0},
- 129: {lang: 0x23d, script: 0x52, flags: 0x0},
- 131: {lang: 0x159, script: 0x52, flags: 0x0},
- 132: {lang: 0x159, script: 0x52, flags: 0x0},
- 133: {lang: 0x139, script: 0x52, flags: 0x0},
- 134: {lang: 0x1a, script: 0x2, flags: 0x1},
- 135: {lang: 0x0, script: 0x52, flags: 0x0},
- 136: {lang: 0x139, script: 0x52, flags: 0x0},
- 138: {lang: 0x3b7, script: 0x52, flags: 0x0},
- 140: {lang: 0x51f, script: 0x35, flags: 0x0},
- 141: {lang: 0x0, script: 0x52, flags: 0x0},
- 142: {lang: 0x139, script: 0x52, flags: 0x0},
- 143: {lang: 0x1ca, script: 0x52, flags: 0x0},
- 144: {lang: 0x1cd, script: 0x52, flags: 0x0},
- 145: {lang: 0x1ce, script: 0x52, flags: 0x0},
- 147: {lang: 0x139, script: 0x52, flags: 0x0},
- 148: {lang: 0x1c, script: 0x2, flags: 0x1},
- 150: {lang: 0x1b5, script: 0x37, flags: 0x0},
- 152: {lang: 0x1e, script: 0x3, flags: 0x1},
- 154: {lang: 0x39, script: 0x5, flags: 0x0},
- 155: {lang: 0x21, script: 0x2, flags: 0x1},
- 156: {lang: 0x1f0, script: 0x52, flags: 0x0},
- 157: {lang: 0x1f1, script: 0x52, flags: 0x0},
- 160: {lang: 0x39, script: 0x5, flags: 0x0},
- 161: {lang: 0x1f8, script: 0x41, flags: 0x0},
- 163: {lang: 0x43b, script: 0x52, flags: 0x0},
- 164: {lang: 0x281, script: 0x1e, flags: 0x0},
- 165: {lang: 0x23, script: 0x3, flags: 0x1},
- 167: {lang: 0x26, script: 0x2, flags: 0x1},
- 169: {lang: 0x24b, script: 0x4b, flags: 0x0},
- 170: {lang: 0x24b, script: 0x4b, flags: 0x0},
- 171: {lang: 0x39, script: 0x5, flags: 0x0},
- 173: {lang: 0x3d9, script: 0x1e, flags: 0x0},
- 174: {lang: 0x28, script: 0x2, flags: 0x1},
- 175: {lang: 0x39, script: 0x5, flags: 0x0},
- 177: {lang: 0x109, script: 0x52, flags: 0x0},
- 178: {lang: 0x402, script: 0xc1, flags: 0x0},
- 180: {lang: 0x431, script: 0x52, flags: 0x0},
- 181: {lang: 0x2b7, script: 0x52, flags: 0x0},
- 182: {lang: 0x159, script: 0x52, flags: 0x0},
- 183: {lang: 0x2be, script: 0x52, flags: 0x0},
- 184: {lang: 0x39, script: 0x5, flags: 0x0},
- 185: {lang: 0x2a, script: 0x2, flags: 0x1},
- 186: {lang: 0x159, script: 0x52, flags: 0x0},
- 187: {lang: 0x2c, script: 0x2, flags: 0x1},
- 188: {lang: 0x428, script: 0x52, flags: 0x0},
- 189: {lang: 0x159, script: 0x52, flags: 0x0},
- 190: {lang: 0x2e8, script: 0x52, flags: 0x0},
- 193: {lang: 0x2e, script: 0x2, flags: 0x1},
- 194: {lang: 0x9e, script: 0x52, flags: 0x0},
- 195: {lang: 0x30, script: 0x2, flags: 0x1},
- 196: {lang: 0x32, script: 0x2, flags: 0x1},
- 197: {lang: 0x34, script: 0x2, flags: 0x1},
- 199: {lang: 0x159, script: 0x52, flags: 0x0},
- 200: {lang: 0x36, script: 0x2, flags: 0x1},
- 202: {lang: 0x317, script: 0x52, flags: 0x0},
- 203: {lang: 0x38, script: 0x3, flags: 0x1},
- 204: {lang: 0x124, script: 0xd4, flags: 0x0},
- 206: {lang: 0x139, script: 0x52, flags: 0x0},
- 207: {lang: 0x316, script: 0x52, flags: 0x0},
- 208: {lang: 0x3b7, script: 0x52, flags: 0x0},
- 209: {lang: 0x15, script: 0x52, flags: 0x0},
- 210: {lang: 0x159, script: 0x52, flags: 0x0},
- 211: {lang: 0x1ad, script: 0x52, flags: 0x0},
- 213: {lang: 0x1ad, script: 0x5, flags: 0x2},
- 215: {lang: 0x139, script: 0x52, flags: 0x0},
- 216: {lang: 0x35e, script: 0x52, flags: 0x0},
- 217: {lang: 0x33e, script: 0x52, flags: 0x0},
- 218: {lang: 0x348, script: 0x20, flags: 0x0},
- 224: {lang: 0x39, script: 0x5, flags: 0x0},
- 225: {lang: 0x139, script: 0x52, flags: 0x0},
- 227: {lang: 0x139, script: 0x52, flags: 0x0},
- 228: {lang: 0x159, script: 0x52, flags: 0x0},
- 229: {lang: 0x47c, script: 0x52, flags: 0x0},
- 230: {lang: 0x14e, script: 0x52, flags: 0x0},
- 231: {lang: 0x3b, script: 0x3, flags: 0x1},
- 232: {lang: 0x3e, script: 0x2, flags: 0x1},
- 233: {lang: 0x159, script: 0x52, flags: 0x0},
- 235: {lang: 0x139, script: 0x52, flags: 0x0},
- 236: {lang: 0x39, script: 0x5, flags: 0x0},
- 237: {lang: 0x3b7, script: 0x52, flags: 0x0},
- 239: {lang: 0x399, script: 0x52, flags: 0x0},
- 240: {lang: 0x18e, script: 0x52, flags: 0x0},
- 242: {lang: 0x39, script: 0x5, flags: 0x0},
- 257: {lang: 0x159, script: 0x52, flags: 0x0},
- 259: {lang: 0x40, script: 0x2, flags: 0x1},
- 260: {lang: 0x428, script: 0x1e, flags: 0x0},
- 261: {lang: 0x42, script: 0x2, flags: 0x1},
- 262: {lang: 0x3dc, script: 0x52, flags: 0x0},
- 263: {lang: 0x39, script: 0x5, flags: 0x0},
- 265: {lang: 0x159, script: 0x52, flags: 0x0},
- 266: {lang: 0x39, script: 0x5, flags: 0x0},
- 267: {lang: 0x44, script: 0x2, flags: 0x1},
- 270: {lang: 0x40c, script: 0x52, flags: 0x0},
- 271: {lang: 0x33e, script: 0x52, flags: 0x0},
- 272: {lang: 0x46, script: 0x2, flags: 0x1},
- 274: {lang: 0x1f1, script: 0x52, flags: 0x0},
- 275: {lang: 0x159, script: 0x52, flags: 0x0},
- 276: {lang: 0x41f, script: 0x52, flags: 0x0},
- 277: {lang: 0x35e, script: 0x52, flags: 0x0},
- 279: {lang: 0x3b7, script: 0x52, flags: 0x0},
- 281: {lang: 0x139, script: 0x52, flags: 0x0},
- 283: {lang: 0x48, script: 0x2, flags: 0x1},
- 287: {lang: 0x159, script: 0x52, flags: 0x0},
- 288: {lang: 0x159, script: 0x52, flags: 0x0},
- 289: {lang: 0x4a, script: 0x2, flags: 0x1},
- 290: {lang: 0x4c, script: 0x3, flags: 0x1},
- 291: {lang: 0x4f, script: 0x2, flags: 0x1},
- 292: {lang: 0x46d, script: 0x52, flags: 0x0},
- 293: {lang: 0x3b7, script: 0x52, flags: 0x0},
- 294: {lang: 0x46c, script: 0x52, flags: 0x0},
- 295: {lang: 0x51, script: 0x2, flags: 0x1},
- 296: {lang: 0x478, script: 0x52, flags: 0x0},
- 298: {lang: 0x53, script: 0x4, flags: 0x1},
- 300: {lang: 0x496, script: 0x52, flags: 0x0},
- 301: {lang: 0x57, script: 0x2, flags: 0x1},
- 302: {lang: 0x43b, script: 0x52, flags: 0x0},
- 303: {lang: 0x59, script: 0x3, flags: 0x1},
- 304: {lang: 0x43b, script: 0x52, flags: 0x0},
- 308: {lang: 0x508, script: 0x37, flags: 0x2},
- 309: {lang: 0x139, script: 0x52, flags: 0x0},
- 310: {lang: 0x4b2, script: 0x52, flags: 0x0},
- 311: {lang: 0x1f1, script: 0x52, flags: 0x0},
- 314: {lang: 0x139, script: 0x52, flags: 0x0},
- 317: {lang: 0x4b9, script: 0x52, flags: 0x0},
- 318: {lang: 0x89, script: 0x52, flags: 0x0},
- 319: {lang: 0x159, script: 0x52, flags: 0x0},
- 321: {lang: 0x411, script: 0x52, flags: 0x0},
- 332: {lang: 0x5c, script: 0x2, flags: 0x1},
- 349: {lang: 0x39, script: 0x5, flags: 0x0},
- 350: {lang: 0x5e, script: 0x2, flags: 0x1},
- 355: {lang: 0x419, script: 0x52, flags: 0x0},
-}
-
-// likelyRegionList holds lists info associated with likelyRegion.
-// Size: 384 bytes, 96 elements
-var likelyRegionList = [96]likelyLangScript{
- 0: {lang: 0x143, script: 0x5, flags: 0x0},
- 1: {lang: 0x46c, script: 0x52, flags: 0x0},
- 2: {lang: 0x427, script: 0x52, flags: 0x0},
- 3: {lang: 0x2f6, script: 0x1e, flags: 0x0},
- 4: {lang: 0x1d0, script: 0x8, flags: 0x0},
- 5: {lang: 0x26b, script: 0x52, flags: 0x0},
- 6: {lang: 0xb5, script: 0x52, flags: 0x0},
- 7: {lang: 0x428, script: 0x1e, flags: 0x0},
- 8: {lang: 0x129, script: 0xd6, flags: 0x0},
- 9: {lang: 0x348, script: 0x20, flags: 0x0},
- 10: {lang: 0x51f, script: 0x34, flags: 0x0},
- 11: {lang: 0x4a2, script: 0x5, flags: 0x0},
- 12: {lang: 0x515, script: 0x35, flags: 0x0},
- 13: {lang: 0x519, script: 0x52, flags: 0x0},
- 14: {lang: 0x291, script: 0xd5, flags: 0x0},
- 15: {lang: 0x131, script: 0x2d, flags: 0x0},
- 16: {lang: 0x480, script: 0x52, flags: 0x0},
- 17: {lang: 0x39, script: 0x5, flags: 0x0},
- 18: {lang: 0x159, script: 0x52, flags: 0x0},
- 19: {lang: 0x26, script: 0x27, flags: 0x0},
- 20: {lang: 0x134, script: 0x52, flags: 0x0},
- 21: {lang: 0x261, script: 0x5, flags: 0x2},
- 22: {lang: 0x508, script: 0x37, flags: 0x2},
- 23: {lang: 0x208, script: 0x29, flags: 0x0},
- 24: {lang: 0x5, script: 0x1e, flags: 0x0},
- 25: {lang: 0x26b, script: 0x52, flags: 0x0},
- 26: {lang: 0x131, script: 0x2d, flags: 0x0},
- 27: {lang: 0x2f6, script: 0x1e, flags: 0x0},
- 28: {lang: 0x1da, script: 0x52, flags: 0x0},
- 29: {lang: 0x316, script: 0x5, flags: 0x0},
- 30: {lang: 0x1b7, script: 0x20, flags: 0x0},
- 31: {lang: 0x4aa, script: 0x5, flags: 0x0},
- 32: {lang: 0x22e, script: 0x6b, flags: 0x0},
- 33: {lang: 0x143, script: 0x5, flags: 0x0},
- 34: {lang: 0x46c, script: 0x52, flags: 0x0},
- 35: {lang: 0x242, script: 0x46, flags: 0x0},
- 36: {lang: 0xe4, script: 0x5, flags: 0x0},
- 37: {lang: 0x21e, script: 0xd5, flags: 0x0},
- 38: {lang: 0x39, script: 0x5, flags: 0x0},
- 39: {lang: 0x159, script: 0x52, flags: 0x0},
- 40: {lang: 0x2af, script: 0x4f, flags: 0x0},
- 41: {lang: 0x21e, script: 0xd5, flags: 0x0},
- 42: {lang: 0x39, script: 0x5, flags: 0x0},
- 43: {lang: 0x159, script: 0x52, flags: 0x0},
- 44: {lang: 0x3d3, script: 0x52, flags: 0x0},
- 45: {lang: 0x4a4, script: 0x1e, flags: 0x0},
- 46: {lang: 0x2f6, script: 0x1e, flags: 0x0},
- 47: {lang: 0x427, script: 0x52, flags: 0x0},
- 48: {lang: 0x328, script: 0x6b, flags: 0x0},
- 49: {lang: 0x20b, script: 0x52, flags: 0x0},
- 50: {lang: 0x302, script: 0x1e, flags: 0x0},
- 51: {lang: 0x23a, script: 0x5, flags: 0x0},
- 52: {lang: 0x51f, script: 0x35, flags: 0x0},
- 53: {lang: 0x3b7, script: 0x52, flags: 0x0},
- 54: {lang: 0x39, script: 0x5, flags: 0x0},
- 55: {lang: 0x159, script: 0x52, flags: 0x0},
- 56: {lang: 0x2e4, script: 0x52, flags: 0x0},
- 57: {lang: 0x4aa, script: 0x5, flags: 0x0},
- 58: {lang: 0x87, script: 0x20, flags: 0x0},
- 59: {lang: 0x4aa, script: 0x5, flags: 0x0},
- 60: {lang: 0x4aa, script: 0x5, flags: 0x0},
- 61: {lang: 0xbc, script: 0x20, flags: 0x0},
- 62: {lang: 0x3aa, script: 0x52, flags: 0x0},
- 63: {lang: 0x70, script: 0x1e, flags: 0x0},
- 64: {lang: 0x3d3, script: 0x52, flags: 0x0},
- 65: {lang: 0x7d, script: 0x1e, flags: 0x0},
- 66: {lang: 0x3d9, script: 0x1e, flags: 0x0},
- 67: {lang: 0x25e, script: 0x52, flags: 0x0},
- 68: {lang: 0x43a, script: 0x52, flags: 0x0},
- 69: {lang: 0x508, script: 0x37, flags: 0x0},
- 70: {lang: 0x408, script: 0x52, flags: 0x0},
- 71: {lang: 0x4a4, script: 0x1e, flags: 0x0},
- 72: {lang: 0x39, script: 0x5, flags: 0x0},
- 73: {lang: 0x159, script: 0x52, flags: 0x0},
- 74: {lang: 0x159, script: 0x52, flags: 0x0},
- 75: {lang: 0x34, script: 0x5, flags: 0x0},
- 76: {lang: 0x461, script: 0xd5, flags: 0x0},
- 77: {lang: 0x2e3, script: 0x5, flags: 0x0},
- 78: {lang: 0x306, script: 0x6b, flags: 0x0},
- 79: {lang: 0x45d, script: 0x1e, flags: 0x0},
- 80: {lang: 0x143, script: 0x5, flags: 0x0},
- 81: {lang: 0x39, script: 0x5, flags: 0x0},
- 82: {lang: 0x159, script: 0x52, flags: 0x0},
- 83: {lang: 0x480, script: 0x52, flags: 0x0},
- 84: {lang: 0x57, script: 0x5, flags: 0x0},
- 85: {lang: 0x211, script: 0x1e, flags: 0x0},
- 86: {lang: 0x80, script: 0x2d, flags: 0x0},
- 87: {lang: 0x51f, script: 0x35, flags: 0x0},
- 88: {lang: 0x482, script: 0x52, flags: 0x0},
- 89: {lang: 0x4a4, script: 0x1e, flags: 0x0},
- 90: {lang: 0x508, script: 0x37, flags: 0x0},
- 91: {lang: 0x3aa, script: 0x52, flags: 0x0},
- 92: {lang: 0x427, script: 0x52, flags: 0x0},
- 93: {lang: 0x428, script: 0x1e, flags: 0x0},
- 94: {lang: 0x159, script: 0x52, flags: 0x0},
- 95: {lang: 0x43c, script: 0x5, flags: 0x0},
-}
-
-type likelyTag struct {
- lang uint16
- region uint16
- script uint8
-}
-
-// Size: 192 bytes, 32 elements
-var likelyRegionGroup = [32]likelyTag{
- 1: {lang: 0x134, region: 0xd5, script: 0x52},
- 2: {lang: 0x134, region: 0x134, script: 0x52},
- 3: {lang: 0x3b7, region: 0x40, script: 0x52},
- 4: {lang: 0x134, region: 0x2e, script: 0x52},
- 5: {lang: 0x134, region: 0xd5, script: 0x52},
- 6: {lang: 0x139, region: 0xce, script: 0x52},
- 7: {lang: 0x43b, region: 0x12e, script: 0x52},
- 8: {lang: 0x39, region: 0x6a, script: 0x5},
- 9: {lang: 0x43b, region: 0x4a, script: 0x52},
- 10: {lang: 0x134, region: 0x160, script: 0x52},
- 11: {lang: 0x134, region: 0x134, script: 0x52},
- 12: {lang: 0x134, region: 0x134, script: 0x52},
- 13: {lang: 0x139, region: 0x58, script: 0x52},
- 14: {lang: 0x51f, region: 0x52, script: 0x34},
- 15: {lang: 0x1b7, region: 0x98, script: 0x20},
- 16: {lang: 0x1da, region: 0x94, script: 0x52},
- 17: {lang: 0x1f1, region: 0x9d, script: 0x52},
- 18: {lang: 0x134, region: 0x2e, script: 0x52},
- 19: {lang: 0x134, region: 0xe5, script: 0x52},
- 20: {lang: 0x134, region: 0x89, script: 0x52},
- 21: {lang: 0x411, region: 0x141, script: 0x52},
- 22: {lang: 0x51f, region: 0x52, script: 0x34},
- 23: {lang: 0x4b2, region: 0x136, script: 0x52},
- 24: {lang: 0x39, region: 0x107, script: 0x5},
- 25: {lang: 0x3d9, region: 0x105, script: 0x1e},
- 26: {lang: 0x3d9, region: 0x105, script: 0x1e},
- 27: {lang: 0x134, region: 0x7a, script: 0x52},
- 28: {lang: 0x109, region: 0x5f, script: 0x52},
- 29: {lang: 0x139, region: 0x1e, script: 0x52},
- 30: {lang: 0x134, region: 0x99, script: 0x52},
- 31: {lang: 0x134, region: 0x7a, script: 0x52},
-}
+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
- conf uint8
- oneway bool
+ want uint16
+ have uint16
+ distance uint8
+ oneway bool
}
-
type scriptIntelligibility struct {
- lang uint16
- want uint8
- have uint8
- conf uint8
+ 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.
-// Size: 708 bytes, 118 elements
-var matchLang = [118]mutualIntelligibility{
- 0: {want: 0x366, have: 0x33e, conf: 0x2, oneway: false},
- 1: {want: 0x26b, have: 0xe7, conf: 0x2, oneway: false},
- 2: {want: 0x1ca, have: 0xb5, conf: 0x2, oneway: false},
- 3: {want: 0x3fd, have: 0xb5, conf: 0x2, oneway: false},
- 4: {want: 0x428, have: 0xb5, conf: 0x2, oneway: false},
- 5: {want: 0x3fd, have: 0x1ca, conf: 0x2, oneway: false},
- 6: {want: 0x428, have: 0x1ca, conf: 0x2, oneway: false},
- 7: {want: 0x3fd, have: 0x428, conf: 0x2, oneway: false},
- 8: {want: 0x430, have: 0x1, conf: 0x2, oneway: false},
- 9: {want: 0x19c, have: 0x109, conf: 0x2, oneway: true},
- 10: {want: 0x28c, have: 0x109, conf: 0x2, oneway: true},
- 11: {want: 0xfd, have: 0x366, conf: 0x2, oneway: false},
- 12: {want: 0xfd, have: 0x33e, conf: 0x2, oneway: false},
- 13: {want: 0xe7, have: 0x26b, conf: 0x2, oneway: false},
- 14: {want: 0x5, have: 0x3d9, conf: 0x2, oneway: true},
- 15: {want: 0xc, have: 0x134, conf: 0x2, oneway: true},
- 16: {want: 0x15, have: 0x35e, conf: 0x2, oneway: true},
- 17: {want: 0x20, have: 0x134, conf: 0x2, oneway: true},
- 18: {want: 0x55, have: 0x139, conf: 0x2, oneway: true},
- 19: {want: 0x57, have: 0x3d9, conf: 0x2, oneway: true},
- 20: {want: 0x70, have: 0x3d9, conf: 0x2, oneway: true},
- 21: {want: 0x74, have: 0x134, conf: 0x2, oneway: true},
- 22: {want: 0x81, have: 0x1b7, conf: 0x2, oneway: true},
- 23: {want: 0xa3, have: 0x134, conf: 0x2, oneway: true},
- 24: {want: 0xb0, have: 0x159, conf: 0x2, oneway: true},
- 25: {want: 0xdb, have: 0x14e, conf: 0x2, oneway: true},
- 26: {want: 0xe3, have: 0x134, conf: 0x2, oneway: true},
- 27: {want: 0xe7, have: 0x39, conf: 0x2, oneway: true},
- 28: {want: 0xed, have: 0x159, conf: 0x2, oneway: true},
- 29: {want: 0xf5, have: 0x159, conf: 0x2, oneway: true},
- 30: {want: 0xfc, have: 0x134, conf: 0x2, oneway: true},
- 31: {want: 0x12c, have: 0x134, conf: 0x2, oneway: true},
- 32: {want: 0x137, have: 0x134, conf: 0x2, oneway: true},
- 33: {want: 0x13b, have: 0x14c, conf: 0x2, oneway: true},
- 34: {want: 0x140, have: 0x139, conf: 0x2, oneway: true},
- 35: {want: 0x153, have: 0xfd, conf: 0x2, oneway: true},
- 36: {want: 0x168, have: 0x35e, conf: 0x2, oneway: true},
- 37: {want: 0x169, have: 0x134, conf: 0x2, oneway: true},
- 38: {want: 0x16a, have: 0x134, conf: 0x2, oneway: true},
- 39: {want: 0x178, have: 0x134, conf: 0x2, oneway: true},
- 40: {want: 0x18a, have: 0x139, conf: 0x2, oneway: true},
- 41: {want: 0x18e, have: 0x139, conf: 0x2, oneway: true},
- 42: {want: 0x19d, have: 0x1b7, conf: 0x2, oneway: true},
- 43: {want: 0x1ad, have: 0x134, conf: 0x2, oneway: true},
- 44: {want: 0x1b1, have: 0x134, conf: 0x2, oneway: true},
- 45: {want: 0x1cd, have: 0x159, conf: 0x2, oneway: true},
- 46: {want: 0x1d0, have: 0x3d9, conf: 0x2, oneway: true},
- 47: {want: 0x1d2, have: 0x134, conf: 0x2, oneway: true},
- 48: {want: 0x1df, have: 0x134, conf: 0x2, oneway: true},
- 49: {want: 0x1f0, have: 0x134, conf: 0x2, oneway: true},
- 50: {want: 0x206, have: 0x1da, conf: 0x2, oneway: true},
- 51: {want: 0x208, have: 0x134, conf: 0x2, oneway: true},
- 52: {want: 0x225, have: 0x159, conf: 0x2, oneway: true},
- 53: {want: 0x23a, have: 0x3d9, conf: 0x2, oneway: true},
- 54: {want: 0x242, have: 0x134, conf: 0x2, oneway: true},
- 55: {want: 0x249, have: 0x134, conf: 0x2, oneway: true},
- 56: {want: 0x25c, have: 0x134, conf: 0x2, oneway: true},
- 57: {want: 0x26b, have: 0x480, conf: 0x2, oneway: true},
- 58: {want: 0x281, have: 0x3d9, conf: 0x2, oneway: true},
- 59: {want: 0x285, have: 0x1f1, conf: 0x2, oneway: true},
- 60: {want: 0x29a, have: 0x134, conf: 0x2, oneway: true},
- 61: {want: 0x2ac, have: 0x159, conf: 0x2, oneway: true},
- 62: {want: 0x2af, have: 0x134, conf: 0x2, oneway: true},
- 63: {want: 0x2b5, have: 0x134, conf: 0x2, oneway: true},
- 64: {want: 0x2ba, have: 0x159, conf: 0x2, oneway: true},
- 65: {want: 0x2e4, have: 0x134, conf: 0x2, oneway: true},
- 66: {want: 0x2e8, have: 0x159, conf: 0x2, oneway: true},
- 67: {want: 0x2f1, have: 0x134, conf: 0x2, oneway: true},
- 68: {want: 0x2f6, have: 0x7d, conf: 0x2, oneway: true},
- 69: {want: 0x2fb, have: 0x134, conf: 0x2, oneway: true},
- 70: {want: 0x302, have: 0x3d9, conf: 0x2, oneway: true},
- 71: {want: 0x312, have: 0x1b7, conf: 0x2, oneway: true},
- 72: {want: 0x316, have: 0x1da, conf: 0x2, oneway: true},
- 73: {want: 0x317, have: 0x134, conf: 0x2, oneway: true},
- 74: {want: 0x328, have: 0x134, conf: 0x2, oneway: true},
- 75: {want: 0x348, have: 0x134, conf: 0x2, oneway: true},
- 76: {want: 0x361, have: 0x33e, conf: 0x2, oneway: false},
- 77: {want: 0x361, have: 0x366, conf: 0x2, oneway: true},
- 78: {want: 0x371, have: 0x134, conf: 0x2, oneway: true},
- 79: {want: 0x37e, have: 0x134, conf: 0x2, oneway: true},
- 80: {want: 0x380, have: 0x134, conf: 0x2, oneway: true},
- 81: {want: 0x382, have: 0x159, conf: 0x2, oneway: true},
- 82: {want: 0x387, have: 0x134, conf: 0x2, oneway: true},
- 83: {want: 0x38c, have: 0x134, conf: 0x2, oneway: true},
- 84: {want: 0x394, have: 0x134, conf: 0x2, oneway: true},
- 85: {want: 0x39c, have: 0x134, conf: 0x2, oneway: true},
- 86: {want: 0x3b5, have: 0x134, conf: 0x2, oneway: true},
- 87: {want: 0x3bb, have: 0x139, conf: 0x2, oneway: true},
- 88: {want: 0x3cb, have: 0x109, conf: 0x2, oneway: true},
- 89: {want: 0x3d0, have: 0x134, conf: 0x2, oneway: true},
- 90: {want: 0x3dc, have: 0x159, conf: 0x2, oneway: true},
- 91: {want: 0x3e0, have: 0x1b7, conf: 0x2, oneway: true},
- 92: {want: 0x3f0, have: 0x134, conf: 0x2, oneway: true},
- 93: {want: 0x402, have: 0x134, conf: 0x2, oneway: true},
- 94: {want: 0x419, have: 0x134, conf: 0x2, oneway: true},
- 95: {want: 0x41f, have: 0x134, conf: 0x2, oneway: true},
- 96: {want: 0x427, have: 0x134, conf: 0x2, oneway: true},
- 97: {want: 0x431, have: 0x134, conf: 0x2, oneway: true},
- 98: {want: 0x434, have: 0x1da, conf: 0x2, oneway: true},
- 99: {want: 0x43b, have: 0x134, conf: 0x2, oneway: true},
- 100: {want: 0x446, have: 0x134, conf: 0x2, oneway: true},
- 101: {want: 0x457, have: 0x134, conf: 0x2, oneway: true},
- 102: {want: 0x45d, have: 0x3d9, conf: 0x2, oneway: true},
- 103: {want: 0x465, have: 0x134, conf: 0x2, oneway: true},
- 104: {want: 0x46c, have: 0x3d9, conf: 0x2, oneway: true},
- 105: {want: 0x3878, have: 0x134, conf: 0x2, oneway: true},
- 106: {want: 0x476, have: 0x134, conf: 0x2, oneway: true},
- 107: {want: 0x478, have: 0x134, conf: 0x2, oneway: true},
- 108: {want: 0x48a, have: 0x3d9, conf: 0x2, oneway: true},
- 109: {want: 0x493, have: 0x134, conf: 0x2, oneway: true},
- 110: {want: 0x4a2, have: 0x51f, conf: 0x2, oneway: true},
- 111: {want: 0x4aa, have: 0x134, conf: 0x2, oneway: true},
- 112: {want: 0x4b2, have: 0x3d9, conf: 0x2, oneway: true},
- 113: {want: 0x4db, have: 0x159, conf: 0x2, oneway: true},
- 114: {want: 0x4e8, have: 0x134, conf: 0x2, oneway: true},
- 115: {want: 0x508, have: 0x134, conf: 0x2, oneway: true},
- 116: {want: 0x50e, have: 0x134, conf: 0x2, oneway: true},
- 117: {want: 0x524, have: 0x134, conf: 0x2, oneway: true},
-}
+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.
-// Size: 24 bytes, 4 elements
-var matchScript = [4]scriptIntelligibility{
- 0: {lang: 0x428, want: 0x52, have: 0x1e, conf: 0x2},
- 1: {lang: 0x428, want: 0x1e, have: 0x52, conf: 0x2},
- 2: {lang: 0x0, want: 0x34, have: 0x35, conf: 0x1},
- 3: {lang: 0x0, want: 0x35, have: 0x34, conf: 0x1},
-}
-
-// Size: 128 bytes, 32 elements
-var regionContainment = [32]uint32{
- 0xffffffff, 0x000007a2, 0x00003044, 0x00000008,
- 0x403c0010, 0x00000020, 0x00000040, 0x00000080,
- 0x00000100, 0x00000200, 0x00000400, 0x2000384c,
- 0x00001000, 0x00002000, 0x00004000, 0x00008000,
- 0x00010000, 0x00020000, 0x00040000, 0x00080000,
- 0x00100000, 0x00200000, 0x01c1c000, 0x00800000,
- 0x01000000, 0x1e020000, 0x04000000, 0x08000000,
- 0x10000000, 0x20002048, 0x40000000, 0x80000000,
-}
-
-// 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: 357 bytes, 357 elements
-var regionInclusion = [357]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, 0x20,
- 0x21, 0x22, 0x23, 0x24, 0x25, 0x25, 0x22, 0x23,
- 0x25, 0x26, 0x21, 0x27, 0x28, 0x29, 0x2a, 0x25,
- 0x2b, 0x23, 0x22, 0x25, 0x24, 0x29, 0x2c, 0x2d,
- 0x23, 0x2e, 0x2c, 0x25, 0x2f, 0x30, 0x27, 0x25,
- // Entry 40 - 7F
- 0x27, 0x25, 0x24, 0x30, 0x21, 0x31, 0x32, 0x33,
- 0x2f, 0x21, 0x26, 0x26, 0x26, 0x34, 0x2c, 0x28,
- 0x27, 0x26, 0x35, 0x27, 0x21, 0x33, 0x22, 0x20,
- 0x25, 0x2c, 0x25, 0x21, 0x36, 0x2d, 0x34, 0x29,
- 0x21, 0x2e, 0x37, 0x25, 0x25, 0x20, 0x38, 0x38,
- 0x27, 0x37, 0x38, 0x38, 0x2e, 0x39, 0x2e, 0x1f,
- 0x20, 0x37, 0x3a, 0x27, 0x3b, 0x2b, 0x20, 0x29,
- 0x34, 0x26, 0x37, 0x25, 0x23, 0x27, 0x2b, 0x2c,
- // Entry 80 - BF
- 0x22, 0x2f, 0x2c, 0x2c, 0x25, 0x26, 0x39, 0x21,
- 0x33, 0x3b, 0x2c, 0x27, 0x35, 0x21, 0x33, 0x39,
- 0x25, 0x2d, 0x20, 0x38, 0x30, 0x37, 0x23, 0x2b,
- 0x24, 0x21, 0x23, 0x24, 0x2b, 0x39, 0x2b, 0x25,
- 0x23, 0x35, 0x20, 0x2e, 0x3c, 0x30, 0x3b, 0x2e,
- 0x25, 0x35, 0x35, 0x23, 0x25, 0x3c, 0x30, 0x23,
- 0x25, 0x34, 0x24, 0x2c, 0x31, 0x37, 0x29, 0x37,
- 0x38, 0x38, 0x34, 0x32, 0x22, 0x25, 0x2e, 0x3b,
- // Entry C0 - FF
- 0x20, 0x22, 0x2c, 0x30, 0x35, 0x35, 0x3b, 0x25,
- 0x2c, 0x25, 0x39, 0x2e, 0x24, 0x2e, 0x33, 0x30,
- 0x2e, 0x31, 0x3a, 0x2c, 0x2a, 0x2c, 0x20, 0x33,
- 0x29, 0x2b, 0x24, 0x20, 0x3b, 0x23, 0x28, 0x2a,
- 0x23, 0x33, 0x20, 0x27, 0x28, 0x3a, 0x30, 0x24,
- 0x2d, 0x2f, 0x28, 0x25, 0x23, 0x39, 0x20, 0x3b,
- 0x27, 0x20, 0x23, 0x20, 0x20, 0x1e, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- // Entry 100 - 13F
- 0x20, 0x2e, 0x20, 0x2d, 0x22, 0x32, 0x2e, 0x23,
- 0x3a, 0x2e, 0x38, 0x37, 0x30, 0x2c, 0x39, 0x2b,
- 0x2d, 0x2c, 0x22, 0x2c, 0x2e, 0x27, 0x2e, 0x26,
- 0x32, 0x33, 0x25, 0x23, 0x31, 0x21, 0x25, 0x26,
- 0x21, 0x2c, 0x30, 0x3c, 0x28, 0x30, 0x3c, 0x38,
- 0x28, 0x30, 0x23, 0x25, 0x28, 0x35, 0x2e, 0x32,
- 0x2e, 0x20, 0x21, 0x20, 0x2f, 0x27, 0x3c, 0x22,
- 0x25, 0x20, 0x27, 0x25, 0x25, 0x30, 0x3a, 0x28,
- // Entry 140 - 17F
- 0x20, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x22, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x23, 0x23, 0x2e, 0x22,
- 0x31, 0x2e, 0x26, 0x2e, 0x20,
-}
-
-// 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: 288 bytes, 72 elements
-var regionInclusionBits = [72]uint32{
- // Entry 0 - 1F
- 0x82400813, 0x000007a3, 0x00003844, 0x20000808,
- 0x403c0011, 0x00000022, 0x20000844, 0x00000082,
- 0x00000102, 0x00000202, 0x00000402, 0x2000384d,
- 0x00001804, 0x20002804, 0x00404000, 0x00408000,
- 0x00410000, 0x02020000, 0x00040010, 0x00080010,
- 0x00100010, 0x00200010, 0x01c1c001, 0x00c00000,
- 0x01400000, 0x1e020001, 0x06000000, 0x0a000000,
- 0x12000000, 0x20002848, 0x40000010, 0x80000001,
- // Entry 20 - 3F
- 0x00000001, 0x40000000, 0x00020000, 0x01000000,
- 0x00008000, 0x00002000, 0x00000200, 0x00000008,
- 0x00200000, 0x90000000, 0x00040000, 0x08000000,
- 0x00000020, 0x84000000, 0x00000080, 0x00001000,
- 0x00010000, 0x00000400, 0x04000000, 0x00000040,
- 0x10000000, 0x00004000, 0x81000000, 0x88000000,
- 0x00000100, 0x80020000, 0x00080000, 0x00100000,
- 0x00800000, 0xffffffff, 0x82400fb3, 0xc27c0813,
- // Entry 40 - 5F
- 0xa240385f, 0x83c1c813, 0x9e420813, 0x92000001,
- 0x86000001, 0x81400001, 0x8a000001, 0x82020001,
-}
-
-// regionInclusionNext marks, for each entry in regionInclusionBits, the set of
-// all groups that are reachable from the groups set in the respective entry.
-// Size: 72 bytes, 72 elements
-var regionInclusionNext = [72]uint8{
- // Entry 0 - 3F
- 0x3d, 0x3e, 0x0b, 0x0b, 0x3f, 0x01, 0x0b, 0x01,
- 0x01, 0x01, 0x01, 0x40, 0x0b, 0x0b, 0x16, 0x16,
- 0x16, 0x19, 0x04, 0x04, 0x04, 0x04, 0x41, 0x16,
- 0x16, 0x42, 0x19, 0x19, 0x19, 0x0b, 0x04, 0x00,
- 0x00, 0x1e, 0x11, 0x18, 0x0f, 0x0d, 0x09, 0x03,
- 0x15, 0x43, 0x12, 0x1b, 0x05, 0x44, 0x07, 0x0c,
- 0x10, 0x0a, 0x1a, 0x06, 0x1c, 0x0e, 0x45, 0x46,
- 0x08, 0x47, 0x13, 0x14, 0x17, 0x3d, 0x3d, 0x3d,
- // Entry 40 - 7F
- 0x3d, 0x3d, 0x3d, 0x42, 0x42, 0x41, 0x42, 0x42,
-}
-
-type parentRel struct {
- lang uint16
- script uint8
- maxScript uint8
- toRegion uint16
- fromRegion []uint16
-}
-
-// Size: 412 bytes, 5 elements
-var parents = [5]parentRel{
- 0: {lang: 0x134, script: 0x0, maxScript: 0x52, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x24, 0x25, 0x2e, 0x33, 0x35, 0x3c, 0x41, 0x45, 0x47, 0x48, 0x49, 0x4f, 0x51, 0x5b, 0x5c, 0x60, 0x63, 0x6c, 0x72, 0x73, 0x74, 0x7a, 0x7b, 0x7e, 0x7f, 0x80, 0x82, 0x8b, 0x8c, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9e, 0x9f, 0xa3, 0xa6, 0xa8, 0xac, 0xb0, 0xb3, 0xb4, 0xbe, 0xc5, 0xc9, 0xca, 0xcb, 0xcd, 0xcf, 0xd1, 0xd4, 0xd5, 0xdc, 0xde, 0xdf, 0xe5, 0xe6, 0xe7, 0xea, 0xef, 0x106, 0x108, 0x109, 0x10a, 0x10c, 0x10d, 0x111, 0x116, 0x11a, 0x11c, 0x11e, 0x124, 0x128, 0x12b, 0x12c, 0x12e, 0x130, 0x138, 0x13b, 0x13e, 0x141, 0x160, 0x161, 0x163}},
- 1: {lang: 0x134, script: 0x0, maxScript: 0x52, toRegion: 0x1a, fromRegion: []uint16{0x2d, 0x4d, 0x5f, 0x62, 0x71, 0xd8, 0x10b, 0x10e}},
- 2: {lang: 0x139, script: 0x0, maxScript: 0x52, toRegion: 0x1e, fromRegion: []uint16{0x2b, 0x3e, 0x40, 0x50, 0x53, 0x55, 0x58, 0x64, 0x68, 0x88, 0x8e, 0xce, 0xd7, 0xe1, 0xe3, 0xeb, 0xf0, 0x119, 0x134, 0x135, 0x13a}},
- 3: {lang: 0x3b7, script: 0x0, maxScript: 0x52, toRegion: 0xed, fromRegion: []uint16{0x29, 0x4d, 0x59, 0x85, 0x8a, 0xb6, 0xc5, 0xd0, 0x117, 0x125}},
- 4: {lang: 0x51f, script: 0x35, maxScript: 0x35, toRegion: 0x8c, fromRegion: []uint16{0xc5}},
-}
-
-// Total table size 25825 bytes (25KiB); checksum: 4E97CC5E
+var matchScript = []scriptIntelligibility{ // 26 elements
+ 0: {wantLang: 0x432, haveLang: 0x432, wantScript: 0x57, haveScript: 0x1f, distance: 0x5},
+ 1: {wantLang: 0x432, haveLang: 0x432, wantScript: 0x1f, haveScript: 0x57, distance: 0x5},
+ 2: {wantLang: 0x58, haveLang: 0x3e2, wantScript: 0x57, haveScript: 0x1f, distance: 0xa},
+ 3: {wantLang: 0xa5, haveLang: 0x139, wantScript: 0xe, haveScript: 0x57, distance: 0xa},
+ 4: {wantLang: 0x1d7, haveLang: 0x3e2, wantScript: 0x8, haveScript: 0x1f, distance: 0xa},
+ 5: {wantLang: 0x210, haveLang: 0x139, wantScript: 0x2b, haveScript: 0x57, distance: 0xa},
+ 6: {wantLang: 0x24a, haveLang: 0x139, wantScript: 0x4b, haveScript: 0x57, distance: 0xa},
+ 7: {wantLang: 0x251, haveLang: 0x139, wantScript: 0x4f, haveScript: 0x57, distance: 0xa},
+ 8: {wantLang: 0x2b8, haveLang: 0x139, wantScript: 0x54, haveScript: 0x57, distance: 0xa},
+ 9: {wantLang: 0x304, haveLang: 0x139, wantScript: 0x6b, haveScript: 0x57, distance: 0xa},
+ 10: {wantLang: 0x331, haveLang: 0x139, wantScript: 0x72, haveScript: 0x57, distance: 0xa},
+ 11: {wantLang: 0x351, haveLang: 0x139, wantScript: 0x21, haveScript: 0x57, distance: 0xa},
+ 12: {wantLang: 0x395, haveLang: 0x139, wantScript: 0x7d, haveScript: 0x57, distance: 0xa},
+ 13: {wantLang: 0x39d, haveLang: 0x139, wantScript: 0x33, haveScript: 0x57, distance: 0xa},
+ 14: {wantLang: 0x3be, haveLang: 0x139, wantScript: 0x5, haveScript: 0x57, distance: 0xa},
+ 15: {wantLang: 0x3fa, haveLang: 0x139, wantScript: 0x5, haveScript: 0x57, distance: 0xa},
+ 16: {wantLang: 0x40c, haveLang: 0x139, wantScript: 0xca, haveScript: 0x57, distance: 0xa},
+ 17: {wantLang: 0x450, haveLang: 0x139, wantScript: 0xd7, haveScript: 0x57, distance: 0xa},
+ 18: {wantLang: 0x461, haveLang: 0x139, wantScript: 0xda, haveScript: 0x57, distance: 0xa},
+ 19: {wantLang: 0x46f, haveLang: 0x139, wantScript: 0x29, haveScript: 0x57, distance: 0xa},
+ 20: {wantLang: 0x476, haveLang: 0x3e2, wantScript: 0x57, haveScript: 0x1f, distance: 0xa},
+ 21: {wantLang: 0x4b4, haveLang: 0x139, wantScript: 0x5, haveScript: 0x57, distance: 0xa},
+ 22: {wantLang: 0x4bc, haveLang: 0x3e2, wantScript: 0x57, haveScript: 0x1f, distance: 0xa},
+ 23: {wantLang: 0x512, haveLang: 0x139, wantScript: 0x3b, haveScript: 0x57, distance: 0xa},
+ 24: {wantLang: 0x529, haveLang: 0x529, wantScript: 0x38, haveScript: 0x39, distance: 0xf},
+ 25: {wantLang: 0x529, haveLang: 0x529, wantScript: 0x39, haveScript: 0x38, 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: 0x39, group: 0x2, distance: 0x4},
+ 9: {lang: 0x529, script: 0x39, 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: 0x39, group: 0x80, distance: 0x5},
+} // Size: 114 bytes
+
+// Total table size 1471 bytes (1KiB); checksum: 4CB1CD46
diff --git a/vendor/golang.org/x/text/language/tags.go b/vendor/golang.org/x/text/language/tags.go
index de30155a2..42ea79266 100644
--- a/vendor/golang.org/x/text/language/tags.go
+++ b/vendor/golang.org/x/text/language/tags.go
@@ -4,6 +4,8 @@
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.
@@ -61,83 +63,83 @@ var (
Und Tag = Tag{}
- Afrikaans Tag = Tag{lang: _af} // af
- Amharic Tag = Tag{lang: _am} // am
- Arabic Tag = Tag{lang: _ar} // ar
- ModernStandardArabic Tag = Tag{lang: _ar, region: _001} // ar-001
- Azerbaijani Tag = Tag{lang: _az} // az
- Bulgarian Tag = Tag{lang: _bg} // bg
- Bengali Tag = Tag{lang: _bn} // bn
- Catalan Tag = Tag{lang: _ca} // ca
- Czech Tag = Tag{lang: _cs} // cs
- Danish Tag = Tag{lang: _da} // da
- German Tag = Tag{lang: _de} // de
- Greek Tag = Tag{lang: _el} // el
- English Tag = Tag{lang: _en} // en
- AmericanEnglish Tag = Tag{lang: _en, region: _US} // en-US
- BritishEnglish Tag = Tag{lang: _en, region: _GB} // en-GB
- Spanish Tag = Tag{lang: _es} // es
- EuropeanSpanish Tag = Tag{lang: _es, region: _ES} // es-ES
- LatinAmericanSpanish Tag = Tag{lang: _es, region: _419} // es-419
- Estonian Tag = Tag{lang: _et} // et
- Persian Tag = Tag{lang: _fa} // fa
- Finnish Tag = Tag{lang: _fi} // fi
- Filipino Tag = Tag{lang: _fil} // fil
- French Tag = Tag{lang: _fr} // fr
- CanadianFrench Tag = Tag{lang: _fr, region: _CA} // fr-CA
- Gujarati Tag = Tag{lang: _gu} // gu
- Hebrew Tag = Tag{lang: _he} // he
- Hindi Tag = Tag{lang: _hi} // hi
- Croatian Tag = Tag{lang: _hr} // hr
- Hungarian Tag = Tag{lang: _hu} // hu
- Armenian Tag = Tag{lang: _hy} // hy
- Indonesian Tag = Tag{lang: _id} // id
- Icelandic Tag = Tag{lang: _is} // is
- Italian Tag = Tag{lang: _it} // it
- Japanese Tag = Tag{lang: _ja} // ja
- Georgian Tag = Tag{lang: _ka} // ka
- Kazakh Tag = Tag{lang: _kk} // kk
- Khmer Tag = Tag{lang: _km} // km
- Kannada Tag = Tag{lang: _kn} // kn
- Korean Tag = Tag{lang: _ko} // ko
- Kirghiz Tag = Tag{lang: _ky} // ky
- Lao Tag = Tag{lang: _lo} // lo
- Lithuanian Tag = Tag{lang: _lt} // lt
- Latvian Tag = Tag{lang: _lv} // lv
- Macedonian Tag = Tag{lang: _mk} // mk
- Malayalam Tag = Tag{lang: _ml} // ml
- Mongolian Tag = Tag{lang: _mn} // mn
- Marathi Tag = Tag{lang: _mr} // mr
- Malay Tag = Tag{lang: _ms} // ms
- Burmese Tag = Tag{lang: _my} // my
- Nepali Tag = Tag{lang: _ne} // ne
- Dutch Tag = Tag{lang: _nl} // nl
- Norwegian Tag = Tag{lang: _no} // no
- Punjabi Tag = Tag{lang: _pa} // pa
- Polish Tag = Tag{lang: _pl} // pl
- Portuguese Tag = Tag{lang: _pt} // pt
- BrazilianPortuguese Tag = Tag{lang: _pt, region: _BR} // pt-BR
- EuropeanPortuguese Tag = Tag{lang: _pt, region: _PT} // pt-PT
- Romanian Tag = Tag{lang: _ro} // ro
- Russian Tag = Tag{lang: _ru} // ru
- Sinhala Tag = Tag{lang: _si} // si
- Slovak Tag = Tag{lang: _sk} // sk
- Slovenian Tag = Tag{lang: _sl} // sl
- Albanian Tag = Tag{lang: _sq} // sq
- Serbian Tag = Tag{lang: _sr} // sr
- SerbianLatin Tag = Tag{lang: _sr, script: _Latn} // sr-Latn
- Swedish Tag = Tag{lang: _sv} // sv
- Swahili Tag = Tag{lang: _sw} // sw
- Tamil Tag = Tag{lang: _ta} // ta
- Telugu Tag = Tag{lang: _te} // te
- Thai Tag = Tag{lang: _th} // th
- Turkish Tag = Tag{lang: _tr} // tr
- Ukrainian Tag = Tag{lang: _uk} // uk
- Urdu Tag = Tag{lang: _ur} // ur
- Uzbek Tag = Tag{lang: _uz} // uz
- Vietnamese Tag = Tag{lang: _vi} // vi
- Chinese Tag = Tag{lang: _zh} // zh
- SimplifiedChinese Tag = Tag{lang: _zh, script: _Hans} // zh-Hans
- TraditionalChinese Tag = Tag{lang: _zh, script: _Hant} // zh-Hant
- Zulu Tag = Tag{lang: _zu} // zu
+ 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/golang.org/x/text/runes/cond.go b/vendor/golang.org/x/text/runes/cond.go
new file mode 100644
index 000000000..df7aa02db
--- /dev/null
+++ b/vendor/golang.org/x/text/runes/cond.go
@@ -0,0 +1,187 @@
+// 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 runes
+
+import (
+ "unicode/utf8"
+
+ "golang.org/x/text/transform"
+)
+
+// Note: below we pass invalid UTF-8 to the tIn and tNotIn transformers as is.
+// This is done for various reasons:
+// - To retain the semantics of the Nop transformer: if input is passed to a Nop
+// one would expect it to be unchanged.
+// - It would be very expensive to pass a converted RuneError to a transformer:
+// a transformer might need more source bytes after RuneError, meaning that
+// the only way to pass it safely is to create a new buffer and manage the
+// intermingling of RuneErrors and normal input.
+// - Many transformers leave ill-formed UTF-8 as is, so this is not
+// inconsistent. Generally ill-formed UTF-8 is only replaced if it is a
+// logical consequence of the operation (as for Map) or if it otherwise would
+// pose security concerns (as for Remove).
+// - An alternative would be to return an error on ill-formed UTF-8, but this
+// would be inconsistent with other operations.
+
+// If returns a transformer that applies tIn to consecutive runes for which
+// s.Contains(r) and tNotIn to consecutive runes for which !s.Contains(r). Reset
+// is called on tIn and tNotIn at the start of each run. A Nop transformer will
+// substitute a nil value passed to tIn or tNotIn. Invalid UTF-8 is translated
+// to RuneError to determine which transformer to apply, but is passed as is to
+// the respective transformer.
+func If(s Set, tIn, tNotIn transform.Transformer) Transformer {
+ if tIn == nil && tNotIn == nil {
+ return Transformer{transform.Nop}
+ }
+ if tIn == nil {
+ tIn = transform.Nop
+ }
+ if tNotIn == nil {
+ tNotIn = transform.Nop
+ }
+ sIn, ok := tIn.(transform.SpanningTransformer)
+ if !ok {
+ sIn = dummySpan{tIn}
+ }
+ sNotIn, ok := tNotIn.(transform.SpanningTransformer)
+ if !ok {
+ sNotIn = dummySpan{tNotIn}
+ }
+
+ a := &cond{
+ tIn: sIn,
+ tNotIn: sNotIn,
+ f: s.Contains,
+ }
+ a.Reset()
+ return Transformer{a}
+}
+
+type dummySpan struct{ transform.Transformer }
+
+func (d dummySpan) Span(src []byte, atEOF bool) (n int, err error) {
+ return 0, transform.ErrEndOfSpan
+}
+
+type cond struct {
+ tIn, tNotIn transform.SpanningTransformer
+ f func(rune) bool
+ check func(rune) bool // current check to perform
+ t transform.SpanningTransformer // current transformer to use
+}
+
+// Reset implements transform.Transformer.
+func (t *cond) Reset() {
+ t.check = t.is
+ t.t = t.tIn
+ t.t.Reset() // notIn will be reset on first usage.
+}
+
+func (t *cond) is(r rune) bool {
+ if t.f(r) {
+ return true
+ }
+ t.check = t.isNot
+ t.t = t.tNotIn
+ t.tNotIn.Reset()
+ return false
+}
+
+func (t *cond) isNot(r rune) bool {
+ if !t.f(r) {
+ return true
+ }
+ t.check = t.is
+ t.t = t.tIn
+ t.tIn.Reset()
+ return false
+}
+
+// This implementation of Span doesn't help all too much, but it needs to be
+// there to satisfy this package's Transformer interface.
+// TODO: there are certainly room for improvements, though. For example, if
+// t.t == transform.Nop (which will a common occurrence) it will save a bundle
+// to special-case that loop.
+func (t *cond) Span(src []byte, atEOF bool) (n int, err error) {
+ p := 0
+ for n < len(src) && err == nil {
+ // Don't process too much at a time as the Spanner that will be
+ // called on this block may terminate early.
+ const maxChunk = 4096
+ max := len(src)
+ if v := n + maxChunk; v < max {
+ max = v
+ }
+ atEnd := false
+ size := 0
+ current := t.t
+ for ; p < max; p += size {
+ r := rune(src[p])
+ if r < utf8.RuneSelf {
+ size = 1
+ } else if r, size = utf8.DecodeRune(src[p:]); size == 1 {
+ if !atEOF && !utf8.FullRune(src[p:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+ }
+ if !t.check(r) {
+ // The next rune will be the start of a new run.
+ atEnd = true
+ break
+ }
+ }
+ n2, err2 := current.Span(src[n:p], atEnd || (atEOF && p == len(src)))
+ n += n2
+ if err2 != nil {
+ return n, err2
+ }
+ // At this point either err != nil or t.check will pass for the rune at p.
+ p = n + size
+ }
+ return n, err
+}
+
+func (t *cond) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ p := 0
+ for nSrc < len(src) && err == nil {
+ // Don't process too much at a time, as the work might be wasted if the
+ // destination buffer isn't large enough to hold the result or a
+ // transform returns an error early.
+ const maxChunk = 4096
+ max := len(src)
+ if n := nSrc + maxChunk; n < len(src) {
+ max = n
+ }
+ atEnd := false
+ size := 0
+ current := t.t
+ for ; p < max; p += size {
+ r := rune(src[p])
+ if r < utf8.RuneSelf {
+ size = 1
+ } else if r, size = utf8.DecodeRune(src[p:]); size == 1 {
+ if !atEOF && !utf8.FullRune(src[p:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+ }
+ if !t.check(r) {
+ // The next rune will be the start of a new run.
+ atEnd = true
+ break
+ }
+ }
+ nDst2, nSrc2, err2 := current.Transform(dst[nDst:], src[nSrc:p], atEnd || (atEOF && p == len(src)))
+ nDst += nDst2
+ nSrc += nSrc2
+ if err2 != nil {
+ return nDst, nSrc, err2
+ }
+ // At this point either err != nil or t.check will pass for the rune at p.
+ p = nSrc + size
+ }
+ return nDst, nSrc, err
+}
diff --git a/vendor/golang.org/x/text/runes/runes.go b/vendor/golang.org/x/text/runes/runes.go
new file mode 100644
index 000000000..71933696f
--- /dev/null
+++ b/vendor/golang.org/x/text/runes/runes.go
@@ -0,0 +1,355 @@
+// 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 runes provide transforms for UTF-8 encoded text.
+package runes // import "golang.org/x/text/runes"
+
+import (
+ "unicode"
+ "unicode/utf8"
+
+ "golang.org/x/text/transform"
+)
+
+// A Set is a collection of runes.
+type Set interface {
+ // Contains returns true if r is contained in the set.
+ Contains(r rune) bool
+}
+
+type setFunc func(rune) bool
+
+func (s setFunc) Contains(r rune) bool {
+ return s(r)
+}
+
+// Note: using funcs here instead of wrapping types result in cleaner
+// documentation and a smaller API.
+
+// In creates a Set with a Contains method that returns true for all runes in
+// the given RangeTable.
+func In(rt *unicode.RangeTable) Set {
+ return setFunc(func(r rune) bool { return unicode.Is(rt, r) })
+}
+
+// In creates a Set with a Contains method that returns true for all runes not
+// in the given RangeTable.
+func NotIn(rt *unicode.RangeTable) Set {
+ return setFunc(func(r rune) bool { return !unicode.Is(rt, r) })
+}
+
+// Predicate creates a Set with a Contains method that returns f(r).
+func Predicate(f func(rune) bool) Set {
+ return setFunc(f)
+}
+
+// Transformer implements the transform.Transformer interface.
+type Transformer struct {
+ t transform.SpanningTransformer
+}
+
+func (t Transformer) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ return t.t.Transform(dst, src, atEOF)
+}
+
+func (t Transformer) Span(b []byte, atEOF bool) (n int, err error) {
+ return t.t.Span(b, atEOF)
+}
+
+func (t Transformer) Reset() { t.t.Reset() }
+
+// Bytes returns a new byte slice with the result of converting b using t. It
+// calls Reset on t. It returns nil if any error was found. This can only happen
+// if an error-producing Transformer is passed to If.
+func (t Transformer) Bytes(b []byte) []byte {
+ b, _, err := transform.Bytes(t, b)
+ if err != nil {
+ return nil
+ }
+ return b
+}
+
+// String returns a string with the result of converting s using t. It calls
+// Reset on t. It returns the empty string if any error was found. This can only
+// happen if an error-producing Transformer is passed to If.
+func (t Transformer) String(s string) string {
+ s, _, err := transform.String(t, s)
+ if err != nil {
+ return ""
+ }
+ return s
+}
+
+// TODO:
+// - Copy: copying strings and bytes in whole-rune units.
+// - Validation (maybe)
+// - Well-formed-ness (maybe)
+
+const runeErrorString = string(utf8.RuneError)
+
+// Remove returns a Transformer that removes runes r for which s.Contains(r).
+// Illegal input bytes are replaced by RuneError before being passed to f.
+func Remove(s Set) Transformer {
+ if f, ok := s.(setFunc); ok {
+ // This little trick cuts the running time of BenchmarkRemove for sets
+ // created by Predicate roughly in half.
+ // TODO: special-case RangeTables as well.
+ return Transformer{remove(f)}
+ }
+ return Transformer{remove(s.Contains)}
+}
+
+// TODO: remove transform.RemoveFunc.
+
+type remove func(r rune) bool
+
+func (remove) Reset() {}
+
+// Span implements transform.Spanner.
+func (t remove) Span(src []byte, atEOF bool) (n int, err error) {
+ for r, size := rune(0), 0; n < len(src); {
+ if r = rune(src[n]); r < utf8.RuneSelf {
+ size = 1
+ } else if r, size = utf8.DecodeRune(src[n:]); size == 1 {
+ // Invalid rune.
+ if !atEOF && !utf8.FullRune(src[n:]) {
+ err = transform.ErrShortSrc
+ } else {
+ err = transform.ErrEndOfSpan
+ }
+ break
+ }
+ if t(r) {
+ err = transform.ErrEndOfSpan
+ break
+ }
+ n += size
+ }
+ return
+}
+
+// Transform implements transform.Transformer.
+func (t remove) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ for r, size := rune(0), 0; nSrc < len(src); {
+ if r = rune(src[nSrc]); r < utf8.RuneSelf {
+ size = 1
+ } else if r, size = utf8.DecodeRune(src[nSrc:]); size == 1 {
+ // Invalid rune.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+ // We replace illegal bytes with RuneError. Not doing so might
+ // otherwise turn a sequence of invalid UTF-8 into valid UTF-8.
+ // The resulting byte sequence may subsequently contain runes
+ // for which t(r) is true that were passed unnoticed.
+ if !t(utf8.RuneError) {
+ if nDst+3 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+0] = runeErrorString[0]
+ dst[nDst+1] = runeErrorString[1]
+ dst[nDst+2] = runeErrorString[2]
+ nDst += 3
+ }
+ nSrc++
+ continue
+ }
+ if t(r) {
+ nSrc += size
+ continue
+ }
+ if nDst+size > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ for i := 0; i < size; i++ {
+ dst[nDst] = src[nSrc]
+ nDst++
+ nSrc++
+ }
+ }
+ return
+}
+
+// Map returns a Transformer that maps the runes in the input using the given
+// mapping. Illegal bytes in the input are converted to utf8.RuneError before
+// being passed to the mapping func.
+func Map(mapping func(rune) rune) Transformer {
+ return Transformer{mapper(mapping)}
+}
+
+type mapper func(rune) rune
+
+func (mapper) Reset() {}
+
+// Span implements transform.Spanner.
+func (t mapper) Span(src []byte, atEOF bool) (n int, err error) {
+ for r, size := rune(0), 0; n < len(src); n += size {
+ if r = rune(src[n]); r < utf8.RuneSelf {
+ size = 1
+ } else if r, size = utf8.DecodeRune(src[n:]); size == 1 {
+ // Invalid rune.
+ if !atEOF && !utf8.FullRune(src[n:]) {
+ err = transform.ErrShortSrc
+ } else {
+ err = transform.ErrEndOfSpan
+ }
+ break
+ }
+ if t(r) != r {
+ err = transform.ErrEndOfSpan
+ break
+ }
+ }
+ return n, err
+}
+
+// Transform implements transform.Transformer.
+func (t mapper) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ var replacement rune
+ var b [utf8.UTFMax]byte
+
+ for r, size := rune(0), 0; nSrc < len(src); {
+ if r = rune(src[nSrc]); r < utf8.RuneSelf {
+ if replacement = t(r); replacement < utf8.RuneSelf {
+ if nDst == len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst] = byte(replacement)
+ nDst++
+ nSrc++
+ continue
+ }
+ size = 1
+ } else if r, size = utf8.DecodeRune(src[nSrc:]); size == 1 {
+ // Invalid rune.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+
+ if replacement = t(utf8.RuneError); replacement == utf8.RuneError {
+ if nDst+3 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+0] = runeErrorString[0]
+ dst[nDst+1] = runeErrorString[1]
+ dst[nDst+2] = runeErrorString[2]
+ nDst += 3
+ nSrc++
+ continue
+ }
+ } else if replacement = t(r); replacement == r {
+ if nDst+size > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ for i := 0; i < size; i++ {
+ dst[nDst] = src[nSrc]
+ nDst++
+ nSrc++
+ }
+ continue
+ }
+
+ n := utf8.EncodeRune(b[:], replacement)
+
+ if nDst+n > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ for i := 0; i < n; i++ {
+ dst[nDst] = b[i]
+ nDst++
+ }
+ nSrc += size
+ }
+ return
+}
+
+// ReplaceIllFormed returns a transformer that replaces all input bytes that are
+// not part of a well-formed UTF-8 code sequence with utf8.RuneError.
+func ReplaceIllFormed() Transformer {
+ return Transformer{&replaceIllFormed{}}
+}
+
+type replaceIllFormed struct{ transform.NopResetter }
+
+func (t replaceIllFormed) Span(src []byte, atEOF bool) (n int, err error) {
+ for n < len(src) {
+ // ASCII fast path.
+ if src[n] < utf8.RuneSelf {
+ n++
+ continue
+ }
+
+ r, size := utf8.DecodeRune(src[n:])
+
+ // Look for a valid non-ASCII rune.
+ if r != utf8.RuneError || size != 1 {
+ n += size
+ continue
+ }
+
+ // Look for short source data.
+ if !atEOF && !utf8.FullRune(src[n:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+
+ // We have an invalid rune.
+ err = transform.ErrEndOfSpan
+ break
+ }
+ return n, err
+}
+
+func (t replaceIllFormed) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+ for nSrc < len(src) {
+ // ASCII fast path.
+ if r := src[nSrc]; r < utf8.RuneSelf {
+ if nDst == len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst] = r
+ nDst++
+ nSrc++
+ continue
+ }
+
+ // Look for a valid non-ASCII rune.
+ if _, size := utf8.DecodeRune(src[nSrc:]); size != 1 {
+ if size != copy(dst[nDst:], src[nSrc:nSrc+size]) {
+ err = transform.ErrShortDst
+ break
+ }
+ nDst += size
+ nSrc += size
+ continue
+ }
+
+ // Look for short source data.
+ if !atEOF && !utf8.FullRune(src[nSrc:]) {
+ err = transform.ErrShortSrc
+ break
+ }
+
+ // We have an invalid rune.
+ if nDst+3 > len(dst) {
+ err = transform.ErrShortDst
+ break
+ }
+ dst[nDst+0] = runeErrorString[0]
+ dst[nDst+1] = runeErrorString[1]
+ dst[nDst+2] = runeErrorString[2]
+ nDst += 3
+ nSrc++
+ }
+ return nDst, nSrc, err
+}
diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule.go b/vendor/golang.org/x/text/secure/bidirule/bidirule.go
index a7161bdd9..e2b70f76c 100644
--- a/vendor/golang.org/x/text/secure/bidirule/bidirule.go
+++ b/vendor/golang.org/x/text/secure/bidirule/bidirule.go
@@ -155,6 +155,7 @@ func DirectionString(s string) bidi.Direction {
e, sz := bidi.LookupString(s[i:])
if sz == 0 {
i++
+ continue
}
c := e.Class()
if c == bidi.R || c == bidi.AL || c == bidi.AN {
@@ -202,13 +203,6 @@ func (t *Transformer) isRTL() bool {
return t.seen&isRTL != 0
}
-func (t *Transformer) isFinal() bool {
- if !t.isRTL() {
- return true
- }
- return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial
-}
-
// Reset implements transform.Transformer.
func (t *Transformer) Reset() { *t = Transformer{} }
diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go b/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go
new file mode 100644
index 000000000..e4c62289f
--- /dev/null
+++ b/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go
@@ -0,0 +1,11 @@
+// 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.
+
+// +build go1.10
+
+package bidirule
+
+func (t *Transformer) isFinal() bool {
+ return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial
+}
diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go b/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go
new file mode 100644
index 000000000..02b9e1e9d
--- /dev/null
+++ b/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go
@@ -0,0 +1,14 @@
+// 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.
+
+// +build !go1.10
+
+package bidirule
+
+func (t *Transformer) isFinal() bool {
+ if !t.isRTL() {
+ return true
+ }
+ return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial
+}
diff --git a/vendor/golang.org/x/text/transform/transform.go b/vendor/golang.org/x/text/transform/transform.go
index fe47b9b35..919e3d950 100644
--- a/vendor/golang.org/x/text/transform/transform.go
+++ b/vendor/golang.org/x/text/transform/transform.go
@@ -78,8 +78,8 @@ type SpanningTransformer interface {
// considering the error err.
//
// A nil error means that all input bytes are known to be identical to the
- // output produced by the Transformer. A nil error can be be returned
- // regardless of whether atEOF is true. If err is nil, then then n must
+ // output produced by the Transformer. A nil error can be returned
+ // regardless of whether atEOF is true. If err is nil, then n must
// equal len(src); the converse is not necessarily true.
//
// ErrEndOfSpan means that the Transformer output may differ from the
diff --git a/vendor/golang.org/x/text/unicode/bidi/bidi.go b/vendor/golang.org/x/text/unicode/bidi/bidi.go
index 3fc4a6252..e8edc54cc 100644
--- a/vendor/golang.org/x/text/unicode/bidi/bidi.go
+++ b/vendor/golang.org/x/text/unicode/bidi/bidi.go
@@ -6,7 +6,7 @@
// Package bidi contains functionality for bidirectional text support.
//
-// See http://www.unicode.org/reports/tr9.
+// See https://www.unicode.org/reports/tr9.
//
// NOTE: UNDER CONSTRUCTION. This API may change in backwards incompatible ways
// and without notice.
diff --git a/vendor/golang.org/x/text/unicode/bidi/bracket.go b/vendor/golang.org/x/text/unicode/bidi/bracket.go
index 601e25920..185393979 100644
--- a/vendor/golang.org/x/text/unicode/bidi/bracket.go
+++ b/vendor/golang.org/x/text/unicode/bidi/bracket.go
@@ -12,7 +12,7 @@ import (
// This file contains a port of the reference implementation of the
// Bidi Parentheses Algorithm:
-// http://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/BidiPBAReference.java
+// https://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/BidiPBAReference.java
//
// The implementation in this file covers definitions BD14-BD16 and rule N0
// of UAX#9.
@@ -246,7 +246,7 @@ func (p *bracketPairer) getStrongTypeN0(index int) Class {
// assuming the given embedding direction.
//
// It returns ON if no strong type is found. If a single strong type is found,
-// it returns this this type. Otherwise it returns the embedding direction.
+// it returns this type. Otherwise it returns the embedding direction.
//
// TODO: use separate type for "strong" directionality.
func (p *bracketPairer) classifyPairContent(loc bracketPair, dirEmbed Class) Class {
diff --git a/vendor/golang.org/x/text/unicode/bidi/core.go b/vendor/golang.org/x/text/unicode/bidi/core.go
index ec52f1448..48d144008 100644
--- a/vendor/golang.org/x/text/unicode/bidi/core.go
+++ b/vendor/golang.org/x/text/unicode/bidi/core.go
@@ -7,7 +7,7 @@ package bidi
import "log"
// This implementation is a port based on the reference implementation found at:
-// http://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/
+// https://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/
//
// described in Unicode Bidirectional Algorithm (UAX #9).
//
@@ -726,7 +726,7 @@ loop:
continue loop
}
}
- log.Panicf("invalid bidi code %s present in assertOnly at position %d", t, s.indexes[i])
+ log.Panicf("invalid bidi code %v present in assertOnly at position %d", t, s.indexes[i])
}
}
diff --git a/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go
new file mode 100644
index 000000000..2e1ff1959
--- /dev/null
+++ b/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go
@@ -0,0 +1,1815 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+// +build go1.10
+
+package bidi
+
+// UnicodeVersion is the Unicode version from which the tables in this package are derived.
+const UnicodeVersion = "10.0.0"
+
+// xorMasks contains masks to be xor-ed with brackets to get the reverse
+// version.
+var xorMasks = []int32{ // 8 elements
+ 0, 1, 6, 7, 3, 15, 29, 63,
+} // Size: 56 bytes
+
+// lookup returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) {
+ c0 := s[0]
+ switch {
+ case c0 < 0x80: // is ASCII
+ return bidiValues[c0], 1
+ case c0 < 0xC2:
+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+ case c0 < 0xE0: // 2-byte UTF-8
+ if len(s) < 2 {
+ return 0, 0
+ }
+ i := bidiIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c1), 2
+ case c0 < 0xF0: // 3-byte UTF-8
+ if len(s) < 3 {
+ return 0, 0
+ }
+ i := bidiIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = bidiIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c2), 3
+ case c0 < 0xF8: // 4-byte UTF-8
+ if len(s) < 4 {
+ return 0, 0
+ }
+ i := bidiIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = bidiIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ o = uint32(i)<<6 + uint32(c2)
+ i = bidiIndex[o]
+ c3 := s[3]
+ if c3 < 0x80 || 0xC0 <= c3 {
+ return 0, 3 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c3), 4
+ }
+ // Illegal rune
+ return 0, 1
+}
+
+// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *bidiTrie) lookupUnsafe(s []byte) uint8 {
+ c0 := s[0]
+ if c0 < 0x80 { // is ASCII
+ return bidiValues[c0]
+ }
+ i := bidiIndex[c0]
+ if c0 < 0xE0 { // 2-byte UTF-8
+ return t.lookupValue(uint32(i), s[1])
+ }
+ i = bidiIndex[uint32(i)<<6+uint32(s[1])]
+ if c0 < 0xF0 { // 3-byte UTF-8
+ return t.lookupValue(uint32(i), s[2])
+ }
+ i = bidiIndex[uint32(i)<<6+uint32(s[2])]
+ if c0 < 0xF8 { // 4-byte UTF-8
+ return t.lookupValue(uint32(i), s[3])
+ }
+ return 0
+}
+
+// lookupString returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *bidiTrie) lookupString(s string) (v uint8, sz int) {
+ c0 := s[0]
+ switch {
+ case c0 < 0x80: // is ASCII
+ return bidiValues[c0], 1
+ case c0 < 0xC2:
+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+ case c0 < 0xE0: // 2-byte UTF-8
+ if len(s) < 2 {
+ return 0, 0
+ }
+ i := bidiIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c1), 2
+ case c0 < 0xF0: // 3-byte UTF-8
+ if len(s) < 3 {
+ return 0, 0
+ }
+ i := bidiIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = bidiIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c2), 3
+ case c0 < 0xF8: // 4-byte UTF-8
+ if len(s) < 4 {
+ return 0, 0
+ }
+ i := bidiIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = bidiIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ o = uint32(i)<<6 + uint32(c2)
+ i = bidiIndex[o]
+ c3 := s[3]
+ if c3 < 0x80 || 0xC0 <= c3 {
+ return 0, 3 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c3), 4
+ }
+ // Illegal rune
+ return 0, 1
+}
+
+// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *bidiTrie) lookupStringUnsafe(s string) uint8 {
+ c0 := s[0]
+ if c0 < 0x80 { // is ASCII
+ return bidiValues[c0]
+ }
+ i := bidiIndex[c0]
+ if c0 < 0xE0 { // 2-byte UTF-8
+ return t.lookupValue(uint32(i), s[1])
+ }
+ i = bidiIndex[uint32(i)<<6+uint32(s[1])]
+ if c0 < 0xF0 { // 3-byte UTF-8
+ return t.lookupValue(uint32(i), s[2])
+ }
+ i = bidiIndex[uint32(i)<<6+uint32(s[2])]
+ if c0 < 0xF8 { // 4-byte UTF-8
+ return t.lookupValue(uint32(i), s[3])
+ }
+ return 0
+}
+
+// bidiTrie. Total size: 16128 bytes (15.75 KiB). Checksum: 8122d83e461996f.
+type bidiTrie struct{}
+
+func newBidiTrie(i int) *bidiTrie {
+ return &bidiTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 {
+ switch {
+ default:
+ return uint8(bidiValues[n<<6+uint32(b)])
+ }
+}
+
+// bidiValues: 228 blocks, 14592 entries, 14592 bytes
+// The third block is the zero block.
+var bidiValues = [14592]uint8{
+ // Block 0x0, offset 0x0
+ 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b,
+ 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008,
+ 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b,
+ 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b,
+ 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007,
+ 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004,
+ 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a,
+ 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006,
+ 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002,
+ 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a,
+ 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a,
+ // Block 0x1, offset 0x40
+ 0x40: 0x000a,
+ 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a,
+ 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a,
+ 0x7b: 0x005a,
+ 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b,
+ // Block 0x2, offset 0x80
+ // Block 0x3, offset 0xc0
+ 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007,
+ 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b,
+ 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b,
+ 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b,
+ 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b,
+ 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004,
+ 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a,
+ 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a,
+ 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a,
+ 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a,
+ 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a,
+ // Block 0x4, offset 0x100
+ 0x117: 0x000a,
+ 0x137: 0x000a,
+ // Block 0x5, offset 0x140
+ 0x179: 0x000a, 0x17a: 0x000a,
+ // Block 0x6, offset 0x180
+ 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a,
+ 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a,
+ 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a,
+ 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a,
+ 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a,
+ 0x19e: 0x000a, 0x19f: 0x000a,
+ 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a,
+ 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a,
+ 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a,
+ 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a,
+ 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a,
+ // Block 0x7, offset 0x1c0
+ 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c,
+ 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c,
+ 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c,
+ 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c,
+ 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c,
+ 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c,
+ 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c,
+ 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c,
+ 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c,
+ 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c,
+ 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c,
+ // Block 0x8, offset 0x200
+ 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c,
+ 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c,
+ 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c,
+ 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c,
+ 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c,
+ 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c,
+ 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c,
+ 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c,
+ 0x234: 0x000a, 0x235: 0x000a,
+ 0x23e: 0x000a,
+ // Block 0x9, offset 0x240
+ 0x244: 0x000a, 0x245: 0x000a,
+ 0x247: 0x000a,
+ // Block 0xa, offset 0x280
+ 0x2b6: 0x000a,
+ // Block 0xb, offset 0x2c0
+ 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c,
+ 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c,
+ // Block 0xc, offset 0x300
+ 0x30a: 0x000a,
+ 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c,
+ 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c,
+ 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c,
+ 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c,
+ 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c,
+ 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c,
+ 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c,
+ 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c,
+ 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c,
+ // Block 0xd, offset 0x340
+ 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c,
+ 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001,
+ 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001,
+ 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001,
+ 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001,
+ 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001,
+ 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001,
+ 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001,
+ 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001,
+ 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001,
+ 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001,
+ // Block 0xe, offset 0x380
+ 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005,
+ 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d,
+ 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c,
+ 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c,
+ 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d,
+ 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d,
+ 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d,
+ 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d,
+ 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d,
+ 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d,
+ 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d,
+ // Block 0xf, offset 0x3c0
+ 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d,
+ 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c,
+ 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c,
+ 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c,
+ 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c,
+ 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005,
+ 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005,
+ 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d,
+ 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d,
+ 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d,
+ 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d,
+ // Block 0x10, offset 0x400
+ 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d,
+ 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d,
+ 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d,
+ 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d,
+ 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d,
+ 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d,
+ 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d,
+ 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d,
+ 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d,
+ 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d,
+ 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d,
+ // Block 0x11, offset 0x440
+ 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d,
+ 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d,
+ 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d,
+ 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c,
+ 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005,
+ 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c,
+ 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a,
+ 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d,
+ 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002,
+ 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d,
+ 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d,
+ // Block 0x12, offset 0x480
+ 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d,
+ 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d,
+ 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c,
+ 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d,
+ 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d,
+ 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d,
+ 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d,
+ 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d,
+ 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c,
+ 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c,
+ 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c,
+ // Block 0x13, offset 0x4c0
+ 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c,
+ 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d,
+ 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d,
+ 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d,
+ 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d,
+ 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d,
+ 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d,
+ 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d,
+ 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d,
+ 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d,
+ 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d,
+ // Block 0x14, offset 0x500
+ 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d,
+ 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d,
+ 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d,
+ 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d,
+ 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d,
+ 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d,
+ 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c,
+ 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c,
+ 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d,
+ 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d,
+ 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d,
+ // Block 0x15, offset 0x540
+ 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001,
+ 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001,
+ 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001,
+ 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001,
+ 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001,
+ 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001,
+ 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001,
+ 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c,
+ 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001,
+ 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001,
+ 0x57c: 0x0001, 0x57d: 0x0001, 0x57e: 0x0001, 0x57f: 0x0001,
+ // Block 0x16, offset 0x580
+ 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001,
+ 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001,
+ 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001,
+ 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c,
+ 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c,
+ 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c,
+ 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c,
+ 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001,
+ 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001,
+ 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001,
+ 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001,
+ // Block 0x17, offset 0x5c0
+ 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001,
+ 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001,
+ 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001,
+ 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001,
+ 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001,
+ 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d,
+ 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d,
+ 0x5ea: 0x000d, 0x5eb: 0x000d, 0x5ec: 0x000d, 0x5ed: 0x000d, 0x5ee: 0x000d, 0x5ef: 0x000d,
+ 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001,
+ 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001,
+ 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001,
+ // Block 0x18, offset 0x600
+ 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001,
+ 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001,
+ 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001,
+ 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001,
+ 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001,
+ 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d,
+ 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d,
+ 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d,
+ 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d,
+ 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d,
+ 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d,
+ // Block 0x19, offset 0x640
+ 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d,
+ 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d,
+ 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d,
+ 0x652: 0x000d, 0x653: 0x000d, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c,
+ 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c,
+ 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c,
+ 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c,
+ 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c,
+ 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c,
+ 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c,
+ 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c,
+ // Block 0x1a, offset 0x680
+ 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c,
+ 0x6ba: 0x000c,
+ 0x6bc: 0x000c,
+ // Block 0x1b, offset 0x6c0
+ 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c,
+ 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c,
+ 0x6cd: 0x000c, 0x6d1: 0x000c,
+ 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c,
+ 0x6e2: 0x000c, 0x6e3: 0x000c,
+ // Block 0x1c, offset 0x700
+ 0x701: 0x000c,
+ 0x73c: 0x000c,
+ // Block 0x1d, offset 0x740
+ 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c,
+ 0x74d: 0x000c,
+ 0x762: 0x000c, 0x763: 0x000c,
+ 0x772: 0x0004, 0x773: 0x0004,
+ 0x77b: 0x0004,
+ // Block 0x1e, offset 0x780
+ 0x781: 0x000c, 0x782: 0x000c,
+ 0x7bc: 0x000c,
+ // Block 0x1f, offset 0x7c0
+ 0x7c1: 0x000c, 0x7c2: 0x000c,
+ 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c,
+ 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c,
+ 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c,
+ // Block 0x20, offset 0x800
+ 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c,
+ 0x807: 0x000c, 0x808: 0x000c,
+ 0x80d: 0x000c,
+ 0x822: 0x000c, 0x823: 0x000c,
+ 0x831: 0x0004,
+ 0x83a: 0x000c, 0x83b: 0x000c,
+ 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c,
+ // Block 0x21, offset 0x840
+ 0x841: 0x000c,
+ 0x87c: 0x000c, 0x87f: 0x000c,
+ // Block 0x22, offset 0x880
+ 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c,
+ 0x88d: 0x000c,
+ 0x896: 0x000c,
+ 0x8a2: 0x000c, 0x8a3: 0x000c,
+ // Block 0x23, offset 0x8c0
+ 0x8c2: 0x000c,
+ // Block 0x24, offset 0x900
+ 0x900: 0x000c,
+ 0x90d: 0x000c,
+ 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a,
+ 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a,
+ // Block 0x25, offset 0x940
+ 0x940: 0x000c,
+ 0x97e: 0x000c, 0x97f: 0x000c,
+ // Block 0x26, offset 0x980
+ 0x980: 0x000c,
+ 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c,
+ 0x98c: 0x000c, 0x98d: 0x000c,
+ 0x995: 0x000c, 0x996: 0x000c,
+ 0x9a2: 0x000c, 0x9a3: 0x000c,
+ 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a,
+ 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a,
+ // Block 0x27, offset 0x9c0
+ 0x9cc: 0x000c, 0x9cd: 0x000c,
+ 0x9e2: 0x000c, 0x9e3: 0x000c,
+ // Block 0x28, offset 0xa00
+ 0xa00: 0x000c, 0xa01: 0x000c,
+ 0xa3b: 0x000c,
+ 0xa3c: 0x000c,
+ // Block 0x29, offset 0xa40
+ 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c,
+ 0xa4d: 0x000c,
+ 0xa62: 0x000c, 0xa63: 0x000c,
+ // Block 0x2a, offset 0xa80
+ 0xa8a: 0x000c,
+ 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c,
+ // Block 0x2b, offset 0xac0
+ 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c,
+ 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c,
+ 0xaff: 0x0004,
+ // Block 0x2c, offset 0xb00
+ 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c,
+ 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c,
+ // Block 0x2d, offset 0xb40
+ 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c,
+ 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c,
+ 0xb7c: 0x000c,
+ // Block 0x2e, offset 0xb80
+ 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c,
+ 0xb8c: 0x000c, 0xb8d: 0x000c,
+ // Block 0x2f, offset 0xbc0
+ 0xbd8: 0x000c, 0xbd9: 0x000c,
+ 0xbf5: 0x000c,
+ 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a,
+ 0xbfc: 0x003a, 0xbfd: 0x002a,
+ // Block 0x30, offset 0xc00
+ 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c,
+ 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c,
+ 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c,
+ // Block 0x31, offset 0xc40
+ 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c,
+ 0xc46: 0x000c, 0xc47: 0x000c,
+ 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c,
+ 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c,
+ 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c,
+ 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c,
+ 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c,
+ 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c,
+ 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c,
+ 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c,
+ 0xc7c: 0x000c,
+ // Block 0x32, offset 0xc80
+ 0xc86: 0x000c,
+ // Block 0x33, offset 0xcc0
+ 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c,
+ 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c,
+ 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c,
+ 0xcfd: 0x000c, 0xcfe: 0x000c,
+ // Block 0x34, offset 0xd00
+ 0xd18: 0x000c, 0xd19: 0x000c,
+ 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c,
+ 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c,
+ // Block 0x35, offset 0xd40
+ 0xd42: 0x000c, 0xd45: 0x000c,
+ 0xd46: 0x000c,
+ 0xd4d: 0x000c,
+ 0xd5d: 0x000c,
+ // Block 0x36, offset 0xd80
+ 0xd9d: 0x000c,
+ 0xd9e: 0x000c, 0xd9f: 0x000c,
+ // Block 0x37, offset 0xdc0
+ 0xdd0: 0x000a, 0xdd1: 0x000a,
+ 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a,
+ 0xdd8: 0x000a, 0xdd9: 0x000a,
+ // Block 0x38, offset 0xe00
+ 0xe00: 0x000a,
+ // Block 0x39, offset 0xe40
+ 0xe40: 0x0009,
+ 0xe5b: 0x007a, 0xe5c: 0x006a,
+ // Block 0x3a, offset 0xe80
+ 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c,
+ 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c,
+ // Block 0x3b, offset 0xec0
+ 0xed2: 0x000c, 0xed3: 0x000c,
+ 0xef2: 0x000c, 0xef3: 0x000c,
+ // Block 0x3c, offset 0xf00
+ 0xf34: 0x000c, 0xf35: 0x000c,
+ 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c,
+ 0xf3c: 0x000c, 0xf3d: 0x000c,
+ // Block 0x3d, offset 0xf40
+ 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c,
+ 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c,
+ 0xf52: 0x000c, 0xf53: 0x000c,
+ 0xf5b: 0x0004, 0xf5d: 0x000c,
+ 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a,
+ 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a,
+ // Block 0x3e, offset 0xf80
+ 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a,
+ 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c,
+ 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b,
+ // Block 0x3f, offset 0xfc0
+ 0xfc5: 0x000c,
+ 0xfc6: 0x000c,
+ 0xfe9: 0x000c,
+ // Block 0x40, offset 0x1000
+ 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c,
+ 0x1027: 0x000c, 0x1028: 0x000c,
+ 0x1032: 0x000c,
+ 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c,
+ // Block 0x41, offset 0x1040
+ 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a,
+ // Block 0x42, offset 0x1080
+ 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a,
+ 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a,
+ 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a,
+ 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a,
+ 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a,
+ 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a,
+ // Block 0x43, offset 0x10c0
+ 0x10d7: 0x000c,
+ 0x10d8: 0x000c, 0x10db: 0x000c,
+ // Block 0x44, offset 0x1100
+ 0x1116: 0x000c,
+ 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c,
+ 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c,
+ 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c,
+ 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c,
+ 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c,
+ 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c,
+ 0x113c: 0x000c, 0x113f: 0x000c,
+ // Block 0x45, offset 0x1140
+ 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c,
+ 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c,
+ 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c,
+ // Block 0x46, offset 0x1180
+ 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c,
+ 0x11b4: 0x000c,
+ 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c,
+ 0x11bc: 0x000c,
+ // Block 0x47, offset 0x11c0
+ 0x11c2: 0x000c,
+ 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c,
+ 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c,
+ // Block 0x48, offset 0x1200
+ 0x1200: 0x000c, 0x1201: 0x000c,
+ 0x1222: 0x000c, 0x1223: 0x000c,
+ 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c,
+ 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c,
+ // Block 0x49, offset 0x1240
+ 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c,
+ 0x126d: 0x000c, 0x126f: 0x000c,
+ 0x1270: 0x000c, 0x1271: 0x000c,
+ // Block 0x4a, offset 0x1280
+ 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c,
+ 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c,
+ 0x12b6: 0x000c, 0x12b7: 0x000c,
+ // Block 0x4b, offset 0x12c0
+ 0x12d0: 0x000c, 0x12d1: 0x000c,
+ 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c,
+ 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c,
+ 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c,
+ 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c,
+ 0x12ed: 0x000c,
+ 0x12f4: 0x000c,
+ 0x12f8: 0x000c, 0x12f9: 0x000c,
+ // Block 0x4c, offset 0x1300
+ 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c,
+ 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c,
+ 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c,
+ 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c,
+ 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c,
+ 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c,
+ 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c,
+ 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c,
+ 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c,
+ 0x1336: 0x000c, 0x1337: 0x000c, 0x1338: 0x000c, 0x1339: 0x000c, 0x133b: 0x000c,
+ 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c,
+ // Block 0x4d, offset 0x1340
+ 0x137d: 0x000a, 0x137f: 0x000a,
+ // Block 0x4e, offset 0x1380
+ 0x1380: 0x000a, 0x1381: 0x000a,
+ 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a,
+ 0x139d: 0x000a,
+ 0x139e: 0x000a, 0x139f: 0x000a,
+ 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a,
+ 0x13bd: 0x000a, 0x13be: 0x000a,
+ // Block 0x4f, offset 0x13c0
+ 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009,
+ 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b,
+ 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a,
+ 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a,
+ 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a,
+ 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a,
+ 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007,
+ 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006,
+ 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a,
+ 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a,
+ 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a,
+ // Block 0x50, offset 0x1400
+ 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a,
+ 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a,
+ 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a,
+ 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a,
+ 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a,
+ 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b,
+ 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e,
+ 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b,
+ 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002,
+ 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003,
+ 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a,
+ // Block 0x51, offset 0x1440
+ 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002,
+ 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003,
+ 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a,
+ 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004,
+ 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004,
+ 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004,
+ 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004,
+ 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004,
+ 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004,
+ // Block 0x52, offset 0x1480
+ 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004,
+ 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004,
+ 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c,
+ 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c,
+ 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c,
+ 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c,
+ 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c,
+ 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c,
+ 0x14b0: 0x000c,
+ // Block 0x53, offset 0x14c0
+ 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a,
+ 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a,
+ 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a,
+ 0x14d8: 0x000a,
+ 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a,
+ 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a,
+ 0x14ee: 0x0004,
+ 0x14fa: 0x000a, 0x14fb: 0x000a,
+ // Block 0x54, offset 0x1500
+ 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a,
+ 0x150a: 0x000a, 0x150b: 0x000a,
+ 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a,
+ 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a,
+ 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a,
+ 0x151e: 0x000a, 0x151f: 0x000a,
+ // Block 0x55, offset 0x1540
+ 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a,
+ 0x1550: 0x000a, 0x1551: 0x000a,
+ 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a,
+ 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a,
+ 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a,
+ 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a,
+ 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a,
+ 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a,
+ 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a,
+ 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a,
+ // Block 0x56, offset 0x1580
+ 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a,
+ 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a,
+ 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a,
+ 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a,
+ 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a,
+ 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a,
+ 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a,
+ 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a,
+ 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a,
+ 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a,
+ 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a,
+ // Block 0x57, offset 0x15c0
+ 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a,
+ 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a,
+ 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a,
+ 0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a,
+ 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a,
+ 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a,
+ 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a,
+ 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a,
+ 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a,
+ 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a,
+ 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a,
+ // Block 0x58, offset 0x1600
+ 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a,
+ 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a,
+ 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a,
+ 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a,
+ 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a,
+ 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a,
+ 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a,
+ 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a,
+ 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a,
+ // Block 0x59, offset 0x1640
+ 0x167b: 0x000a,
+ 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a,
+ // Block 0x5a, offset 0x1680
+ 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a,
+ 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a,
+ 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a,
+ 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a,
+ 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a,
+ 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a,
+ 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a,
+ 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a,
+ 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a,
+ 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a,
+ 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a,
+ // Block 0x5b, offset 0x16c0
+ 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a,
+ 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a,
+ 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a,
+ 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a,
+ 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a,
+ 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a,
+ 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a,
+ // Block 0x5c, offset 0x1700
+ 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a,
+ 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a,
+ 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a,
+ 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a,
+ 0x172a: 0x000a, 0x172b: 0x000a, 0x172c: 0x000a, 0x172d: 0x000a, 0x172e: 0x000a, 0x172f: 0x000a,
+ 0x1730: 0x000a, 0x1731: 0x000a, 0x1732: 0x000a, 0x1733: 0x000a, 0x1734: 0x000a, 0x1735: 0x000a,
+ 0x1736: 0x000a, 0x1737: 0x000a, 0x1738: 0x000a, 0x1739: 0x000a, 0x173a: 0x000a, 0x173b: 0x000a,
+ 0x173c: 0x000a, 0x173d: 0x000a, 0x173e: 0x000a, 0x173f: 0x000a,
+ // Block 0x5d, offset 0x1740
+ 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a,
+ 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x0002, 0x1749: 0x0002, 0x174a: 0x0002, 0x174b: 0x0002,
+ 0x174c: 0x0002, 0x174d: 0x0002, 0x174e: 0x0002, 0x174f: 0x0002, 0x1750: 0x0002, 0x1751: 0x0002,
+ 0x1752: 0x0002, 0x1753: 0x0002, 0x1754: 0x0002, 0x1755: 0x0002, 0x1756: 0x0002, 0x1757: 0x0002,
+ 0x1758: 0x0002, 0x1759: 0x0002, 0x175a: 0x0002, 0x175b: 0x0002,
+ // Block 0x5e, offset 0x1780
+ 0x17aa: 0x000a, 0x17ab: 0x000a, 0x17ac: 0x000a, 0x17ad: 0x000a, 0x17ae: 0x000a, 0x17af: 0x000a,
+ 0x17b0: 0x000a, 0x17b1: 0x000a, 0x17b2: 0x000a, 0x17b3: 0x000a, 0x17b4: 0x000a, 0x17b5: 0x000a,
+ 0x17b6: 0x000a, 0x17b7: 0x000a, 0x17b8: 0x000a, 0x17b9: 0x000a, 0x17ba: 0x000a, 0x17bb: 0x000a,
+ 0x17bc: 0x000a, 0x17bd: 0x000a, 0x17be: 0x000a, 0x17bf: 0x000a,
+ // Block 0x5f, offset 0x17c0
+ 0x17c0: 0x000a, 0x17c1: 0x000a, 0x17c2: 0x000a, 0x17c3: 0x000a, 0x17c4: 0x000a, 0x17c5: 0x000a,
+ 0x17c6: 0x000a, 0x17c7: 0x000a, 0x17c8: 0x000a, 0x17c9: 0x000a, 0x17ca: 0x000a, 0x17cb: 0x000a,
+ 0x17cc: 0x000a, 0x17cd: 0x000a, 0x17ce: 0x000a, 0x17cf: 0x000a, 0x17d0: 0x000a, 0x17d1: 0x000a,
+ 0x17d2: 0x000a, 0x17d3: 0x000a, 0x17d4: 0x000a, 0x17d5: 0x000a, 0x17d6: 0x000a, 0x17d7: 0x000a,
+ 0x17d8: 0x000a, 0x17d9: 0x000a, 0x17da: 0x000a, 0x17db: 0x000a, 0x17dc: 0x000a, 0x17dd: 0x000a,
+ 0x17de: 0x000a, 0x17df: 0x000a, 0x17e0: 0x000a, 0x17e1: 0x000a, 0x17e2: 0x000a, 0x17e3: 0x000a,
+ 0x17e4: 0x000a, 0x17e5: 0x000a, 0x17e6: 0x000a, 0x17e7: 0x000a, 0x17e8: 0x000a, 0x17e9: 0x000a,
+ 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a,
+ 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a,
+ 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a,
+ 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a,
+ // Block 0x60, offset 0x1800
+ 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a,
+ 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a,
+ 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a,
+ 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a,
+ 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a,
+ 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a,
+ 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x003a, 0x1829: 0x002a,
+ 0x182a: 0x003a, 0x182b: 0x002a, 0x182c: 0x003a, 0x182d: 0x002a, 0x182e: 0x003a, 0x182f: 0x002a,
+ 0x1830: 0x003a, 0x1831: 0x002a, 0x1832: 0x003a, 0x1833: 0x002a, 0x1834: 0x003a, 0x1835: 0x002a,
+ 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a,
+ 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a,
+ // Block 0x61, offset 0x1840
+ 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x009a,
+ 0x1846: 0x008a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a,
+ 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a,
+ 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a,
+ 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a,
+ 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a,
+ 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x003a, 0x1867: 0x002a, 0x1868: 0x003a, 0x1869: 0x002a,
+ 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a,
+ 0x1870: 0x000a, 0x1871: 0x000a, 0x1872: 0x000a, 0x1873: 0x000a, 0x1874: 0x000a, 0x1875: 0x000a,
+ 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a,
+ 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a,
+ // Block 0x62, offset 0x1880
+ 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x007a, 0x1884: 0x006a, 0x1885: 0x009a,
+ 0x1886: 0x008a, 0x1887: 0x00ba, 0x1888: 0x00aa, 0x1889: 0x009a, 0x188a: 0x008a, 0x188b: 0x007a,
+ 0x188c: 0x006a, 0x188d: 0x00da, 0x188e: 0x002a, 0x188f: 0x003a, 0x1890: 0x00ca, 0x1891: 0x009a,
+ 0x1892: 0x008a, 0x1893: 0x007a, 0x1894: 0x006a, 0x1895: 0x009a, 0x1896: 0x008a, 0x1897: 0x00ba,
+ 0x1898: 0x00aa, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a,
+ 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a,
+ 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x000a, 0x18a7: 0x000a, 0x18a8: 0x000a, 0x18a9: 0x000a,
+ 0x18aa: 0x000a, 0x18ab: 0x000a, 0x18ac: 0x000a, 0x18ad: 0x000a, 0x18ae: 0x000a, 0x18af: 0x000a,
+ 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a,
+ 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a,
+ 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a,
+ // Block 0x63, offset 0x18c0
+ 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x000a, 0x18c4: 0x000a, 0x18c5: 0x000a,
+ 0x18c6: 0x000a, 0x18c7: 0x000a, 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a,
+ 0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a,
+ 0x18d2: 0x000a, 0x18d3: 0x000a, 0x18d4: 0x000a, 0x18d5: 0x000a, 0x18d6: 0x000a, 0x18d7: 0x000a,
+ 0x18d8: 0x003a, 0x18d9: 0x002a, 0x18da: 0x003a, 0x18db: 0x002a, 0x18dc: 0x000a, 0x18dd: 0x000a,
+ 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a,
+ 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a,
+ 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a,
+ 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a,
+ 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a,
+ 0x18fc: 0x003a, 0x18fd: 0x002a, 0x18fe: 0x000a, 0x18ff: 0x000a,
+ // Block 0x64, offset 0x1900
+ 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a,
+ 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a,
+ 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a,
+ 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a,
+ 0x1918: 0x000a, 0x1919: 0x000a, 0x191a: 0x000a, 0x191b: 0x000a, 0x191c: 0x000a, 0x191d: 0x000a,
+ 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a,
+ 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a,
+ 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a,
+ 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a,
+ 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a,
+ 0x193c: 0x000a, 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x000a,
+ // Block 0x65, offset 0x1940
+ 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a,
+ 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a,
+ 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a,
+ 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a,
+ 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a,
+ 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a,
+ 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a,
+ 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a,
+ 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000a, 0x1975: 0x000a,
+ 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a,
+ 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a,
+ // Block 0x66, offset 0x1980
+ 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a,
+ 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a,
+ 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a,
+ 0x1992: 0x000a,
+ 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a,
+ // Block 0x67, offset 0x19c0
+ 0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a,
+ 0x19ea: 0x000a, 0x19ef: 0x000c,
+ 0x19f0: 0x000c, 0x19f1: 0x000c,
+ 0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a,
+ 0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a,
+ // Block 0x68, offset 0x1a00
+ 0x1a3f: 0x000c,
+ // Block 0x69, offset 0x1a40
+ 0x1a60: 0x000c, 0x1a61: 0x000c, 0x1a62: 0x000c, 0x1a63: 0x000c,
+ 0x1a64: 0x000c, 0x1a65: 0x000c, 0x1a66: 0x000c, 0x1a67: 0x000c, 0x1a68: 0x000c, 0x1a69: 0x000c,
+ 0x1a6a: 0x000c, 0x1a6b: 0x000c, 0x1a6c: 0x000c, 0x1a6d: 0x000c, 0x1a6e: 0x000c, 0x1a6f: 0x000c,
+ 0x1a70: 0x000c, 0x1a71: 0x000c, 0x1a72: 0x000c, 0x1a73: 0x000c, 0x1a74: 0x000c, 0x1a75: 0x000c,
+ 0x1a76: 0x000c, 0x1a77: 0x000c, 0x1a78: 0x000c, 0x1a79: 0x000c, 0x1a7a: 0x000c, 0x1a7b: 0x000c,
+ 0x1a7c: 0x000c, 0x1a7d: 0x000c, 0x1a7e: 0x000c, 0x1a7f: 0x000c,
+ // Block 0x6a, offset 0x1a80
+ 0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a,
+ 0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a,
+ 0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, 0x1a90: 0x000a, 0x1a91: 0x000a,
+ 0x1a92: 0x000a, 0x1a93: 0x000a, 0x1a94: 0x000a, 0x1a95: 0x000a, 0x1a96: 0x000a, 0x1a97: 0x000a,
+ 0x1a98: 0x000a, 0x1a99: 0x000a, 0x1a9a: 0x000a, 0x1a9b: 0x000a, 0x1a9c: 0x000a, 0x1a9d: 0x000a,
+ 0x1a9e: 0x000a, 0x1a9f: 0x000a, 0x1aa0: 0x000a, 0x1aa1: 0x000a, 0x1aa2: 0x003a, 0x1aa3: 0x002a,
+ 0x1aa4: 0x003a, 0x1aa5: 0x002a, 0x1aa6: 0x003a, 0x1aa7: 0x002a, 0x1aa8: 0x003a, 0x1aa9: 0x002a,
+ 0x1aaa: 0x000a, 0x1aab: 0x000a, 0x1aac: 0x000a, 0x1aad: 0x000a, 0x1aae: 0x000a, 0x1aaf: 0x000a,
+ 0x1ab0: 0x000a, 0x1ab1: 0x000a, 0x1ab2: 0x000a, 0x1ab3: 0x000a, 0x1ab4: 0x000a, 0x1ab5: 0x000a,
+ 0x1ab6: 0x000a, 0x1ab7: 0x000a, 0x1ab8: 0x000a, 0x1ab9: 0x000a, 0x1aba: 0x000a, 0x1abb: 0x000a,
+ 0x1abc: 0x000a, 0x1abd: 0x000a, 0x1abe: 0x000a, 0x1abf: 0x000a,
+ // Block 0x6b, offset 0x1ac0
+ 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a,
+ 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a,
+ // Block 0x6c, offset 0x1b00
+ 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a,
+ 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a,
+ 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a,
+ 0x1b12: 0x000a, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a,
+ 0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a,
+ 0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a,
+ 0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a,
+ 0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a,
+ 0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, 0x1b34: 0x000a, 0x1b35: 0x000a,
+ 0x1b36: 0x000a, 0x1b37: 0x000a, 0x1b38: 0x000a, 0x1b39: 0x000a, 0x1b3a: 0x000a, 0x1b3b: 0x000a,
+ 0x1b3c: 0x000a, 0x1b3d: 0x000a, 0x1b3e: 0x000a, 0x1b3f: 0x000a,
+ // Block 0x6d, offset 0x1b40
+ 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a,
+ 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a,
+ 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a,
+ 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a,
+ 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5a: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a,
+ 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a,
+ 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a,
+ 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a,
+ 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a,
+ // Block 0x6e, offset 0x1b80
+ 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a,
+ 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a,
+ 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a,
+ 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a,
+ 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, 0x1bb4: 0x000a, 0x1bb5: 0x000a,
+ 0x1bb6: 0x000a, 0x1bb7: 0x000a, 0x1bb8: 0x000a, 0x1bb9: 0x000a, 0x1bba: 0x000a, 0x1bbb: 0x000a,
+ // Block 0x6f, offset 0x1bc0
+ 0x1bc0: 0x0009, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a,
+ 0x1bc8: 0x003a, 0x1bc9: 0x002a, 0x1bca: 0x003a, 0x1bcb: 0x002a,
+ 0x1bcc: 0x003a, 0x1bcd: 0x002a, 0x1bce: 0x003a, 0x1bcf: 0x002a, 0x1bd0: 0x003a, 0x1bd1: 0x002a,
+ 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x003a, 0x1bd5: 0x002a, 0x1bd6: 0x003a, 0x1bd7: 0x002a,
+ 0x1bd8: 0x003a, 0x1bd9: 0x002a, 0x1bda: 0x003a, 0x1bdb: 0x002a, 0x1bdc: 0x000a, 0x1bdd: 0x000a,
+ 0x1bde: 0x000a, 0x1bdf: 0x000a, 0x1be0: 0x000a,
+ 0x1bea: 0x000c, 0x1beb: 0x000c, 0x1bec: 0x000c, 0x1bed: 0x000c,
+ 0x1bf0: 0x000a,
+ 0x1bf6: 0x000a, 0x1bf7: 0x000a,
+ 0x1bfd: 0x000a, 0x1bfe: 0x000a, 0x1bff: 0x000a,
+ // Block 0x70, offset 0x1c00
+ 0x1c19: 0x000c, 0x1c1a: 0x000c, 0x1c1b: 0x000a, 0x1c1c: 0x000a,
+ 0x1c20: 0x000a,
+ // Block 0x71, offset 0x1c40
+ 0x1c7b: 0x000a,
+ // Block 0x72, offset 0x1c80
+ 0x1c80: 0x000a, 0x1c81: 0x000a, 0x1c82: 0x000a, 0x1c83: 0x000a, 0x1c84: 0x000a, 0x1c85: 0x000a,
+ 0x1c86: 0x000a, 0x1c87: 0x000a, 0x1c88: 0x000a, 0x1c89: 0x000a, 0x1c8a: 0x000a, 0x1c8b: 0x000a,
+ 0x1c8c: 0x000a, 0x1c8d: 0x000a, 0x1c8e: 0x000a, 0x1c8f: 0x000a, 0x1c90: 0x000a, 0x1c91: 0x000a,
+ 0x1c92: 0x000a, 0x1c93: 0x000a, 0x1c94: 0x000a, 0x1c95: 0x000a, 0x1c96: 0x000a, 0x1c97: 0x000a,
+ 0x1c98: 0x000a, 0x1c99: 0x000a, 0x1c9a: 0x000a, 0x1c9b: 0x000a, 0x1c9c: 0x000a, 0x1c9d: 0x000a,
+ 0x1c9e: 0x000a, 0x1c9f: 0x000a, 0x1ca0: 0x000a, 0x1ca1: 0x000a, 0x1ca2: 0x000a, 0x1ca3: 0x000a,
+ // Block 0x73, offset 0x1cc0
+ 0x1cdd: 0x000a,
+ 0x1cde: 0x000a,
+ // Block 0x74, offset 0x1d00
+ 0x1d10: 0x000a, 0x1d11: 0x000a,
+ 0x1d12: 0x000a, 0x1d13: 0x000a, 0x1d14: 0x000a, 0x1d15: 0x000a, 0x1d16: 0x000a, 0x1d17: 0x000a,
+ 0x1d18: 0x000a, 0x1d19: 0x000a, 0x1d1a: 0x000a, 0x1d1b: 0x000a, 0x1d1c: 0x000a, 0x1d1d: 0x000a,
+ 0x1d1e: 0x000a, 0x1d1f: 0x000a,
+ 0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a,
+ // Block 0x75, offset 0x1d40
+ 0x1d71: 0x000a, 0x1d72: 0x000a, 0x1d73: 0x000a, 0x1d74: 0x000a, 0x1d75: 0x000a,
+ 0x1d76: 0x000a, 0x1d77: 0x000a, 0x1d78: 0x000a, 0x1d79: 0x000a, 0x1d7a: 0x000a, 0x1d7b: 0x000a,
+ 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, 0x1d7f: 0x000a,
+ // Block 0x76, offset 0x1d80
+ 0x1d8c: 0x000a, 0x1d8d: 0x000a, 0x1d8e: 0x000a, 0x1d8f: 0x000a,
+ // Block 0x77, offset 0x1dc0
+ 0x1df7: 0x000a, 0x1df8: 0x000a, 0x1df9: 0x000a, 0x1dfa: 0x000a,
+ // Block 0x78, offset 0x1e00
+ 0x1e1e: 0x000a, 0x1e1f: 0x000a,
+ 0x1e3f: 0x000a,
+ // Block 0x79, offset 0x1e40
+ 0x1e50: 0x000a, 0x1e51: 0x000a,
+ 0x1e52: 0x000a, 0x1e53: 0x000a, 0x1e54: 0x000a, 0x1e55: 0x000a, 0x1e56: 0x000a, 0x1e57: 0x000a,
+ 0x1e58: 0x000a, 0x1e59: 0x000a, 0x1e5a: 0x000a, 0x1e5b: 0x000a, 0x1e5c: 0x000a, 0x1e5d: 0x000a,
+ 0x1e5e: 0x000a, 0x1e5f: 0x000a, 0x1e60: 0x000a, 0x1e61: 0x000a, 0x1e62: 0x000a, 0x1e63: 0x000a,
+ 0x1e64: 0x000a, 0x1e65: 0x000a, 0x1e66: 0x000a, 0x1e67: 0x000a, 0x1e68: 0x000a, 0x1e69: 0x000a,
+ 0x1e6a: 0x000a, 0x1e6b: 0x000a, 0x1e6c: 0x000a, 0x1e6d: 0x000a, 0x1e6e: 0x000a, 0x1e6f: 0x000a,
+ 0x1e70: 0x000a, 0x1e71: 0x000a, 0x1e72: 0x000a, 0x1e73: 0x000a, 0x1e74: 0x000a, 0x1e75: 0x000a,
+ 0x1e76: 0x000a, 0x1e77: 0x000a, 0x1e78: 0x000a, 0x1e79: 0x000a, 0x1e7a: 0x000a, 0x1e7b: 0x000a,
+ 0x1e7c: 0x000a, 0x1e7d: 0x000a, 0x1e7e: 0x000a, 0x1e7f: 0x000a,
+ // Block 0x7a, offset 0x1e80
+ 0x1e80: 0x000a, 0x1e81: 0x000a, 0x1e82: 0x000a, 0x1e83: 0x000a, 0x1e84: 0x000a, 0x1e85: 0x000a,
+ 0x1e86: 0x000a,
+ // Block 0x7b, offset 0x1ec0
+ 0x1ecd: 0x000a, 0x1ece: 0x000a, 0x1ecf: 0x000a,
+ // Block 0x7c, offset 0x1f00
+ 0x1f2f: 0x000c,
+ 0x1f30: 0x000c, 0x1f31: 0x000c, 0x1f32: 0x000c, 0x1f33: 0x000a, 0x1f34: 0x000c, 0x1f35: 0x000c,
+ 0x1f36: 0x000c, 0x1f37: 0x000c, 0x1f38: 0x000c, 0x1f39: 0x000c, 0x1f3a: 0x000c, 0x1f3b: 0x000c,
+ 0x1f3c: 0x000c, 0x1f3d: 0x000c, 0x1f3e: 0x000a, 0x1f3f: 0x000a,
+ // Block 0x7d, offset 0x1f40
+ 0x1f5e: 0x000c, 0x1f5f: 0x000c,
+ // Block 0x7e, offset 0x1f80
+ 0x1fb0: 0x000c, 0x1fb1: 0x000c,
+ // Block 0x7f, offset 0x1fc0
+ 0x1fc0: 0x000a, 0x1fc1: 0x000a, 0x1fc2: 0x000a, 0x1fc3: 0x000a, 0x1fc4: 0x000a, 0x1fc5: 0x000a,
+ 0x1fc6: 0x000a, 0x1fc7: 0x000a, 0x1fc8: 0x000a, 0x1fc9: 0x000a, 0x1fca: 0x000a, 0x1fcb: 0x000a,
+ 0x1fcc: 0x000a, 0x1fcd: 0x000a, 0x1fce: 0x000a, 0x1fcf: 0x000a, 0x1fd0: 0x000a, 0x1fd1: 0x000a,
+ 0x1fd2: 0x000a, 0x1fd3: 0x000a, 0x1fd4: 0x000a, 0x1fd5: 0x000a, 0x1fd6: 0x000a, 0x1fd7: 0x000a,
+ 0x1fd8: 0x000a, 0x1fd9: 0x000a, 0x1fda: 0x000a, 0x1fdb: 0x000a, 0x1fdc: 0x000a, 0x1fdd: 0x000a,
+ 0x1fde: 0x000a, 0x1fdf: 0x000a, 0x1fe0: 0x000a, 0x1fe1: 0x000a,
+ // Block 0x80, offset 0x2000
+ 0x2008: 0x000a,
+ // Block 0x81, offset 0x2040
+ 0x2042: 0x000c,
+ 0x2046: 0x000c, 0x204b: 0x000c,
+ 0x2065: 0x000c, 0x2066: 0x000c, 0x2068: 0x000a, 0x2069: 0x000a,
+ 0x206a: 0x000a, 0x206b: 0x000a,
+ 0x2078: 0x0004, 0x2079: 0x0004,
+ // Block 0x82, offset 0x2080
+ 0x20b4: 0x000a, 0x20b5: 0x000a,
+ 0x20b6: 0x000a, 0x20b7: 0x000a,
+ // Block 0x83, offset 0x20c0
+ 0x20c4: 0x000c, 0x20c5: 0x000c,
+ 0x20e0: 0x000c, 0x20e1: 0x000c, 0x20e2: 0x000c, 0x20e3: 0x000c,
+ 0x20e4: 0x000c, 0x20e5: 0x000c, 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c,
+ 0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, 0x20ee: 0x000c, 0x20ef: 0x000c,
+ 0x20f0: 0x000c, 0x20f1: 0x000c,
+ // Block 0x84, offset 0x2100
+ 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c,
+ 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c,
+ // Block 0x85, offset 0x2140
+ 0x2147: 0x000c, 0x2148: 0x000c, 0x2149: 0x000c, 0x214a: 0x000c, 0x214b: 0x000c,
+ 0x214c: 0x000c, 0x214d: 0x000c, 0x214e: 0x000c, 0x214f: 0x000c, 0x2150: 0x000c, 0x2151: 0x000c,
+ // Block 0x86, offset 0x2180
+ 0x2180: 0x000c, 0x2181: 0x000c, 0x2182: 0x000c,
+ 0x21b3: 0x000c,
+ 0x21b6: 0x000c, 0x21b7: 0x000c, 0x21b8: 0x000c, 0x21b9: 0x000c,
+ 0x21bc: 0x000c,
+ // Block 0x87, offset 0x21c0
+ 0x21e5: 0x000c,
+ // Block 0x88, offset 0x2200
+ 0x2229: 0x000c,
+ 0x222a: 0x000c, 0x222b: 0x000c, 0x222c: 0x000c, 0x222d: 0x000c, 0x222e: 0x000c,
+ 0x2231: 0x000c, 0x2232: 0x000c, 0x2235: 0x000c,
+ 0x2236: 0x000c,
+ // Block 0x89, offset 0x2240
+ 0x2243: 0x000c,
+ 0x224c: 0x000c,
+ 0x227c: 0x000c,
+ // Block 0x8a, offset 0x2280
+ 0x22b0: 0x000c, 0x22b2: 0x000c, 0x22b3: 0x000c, 0x22b4: 0x000c,
+ 0x22b7: 0x000c, 0x22b8: 0x000c,
+ 0x22be: 0x000c, 0x22bf: 0x000c,
+ // Block 0x8b, offset 0x22c0
+ 0x22c1: 0x000c,
+ 0x22ec: 0x000c, 0x22ed: 0x000c,
+ 0x22f6: 0x000c,
+ // Block 0x8c, offset 0x2300
+ 0x2325: 0x000c, 0x2328: 0x000c,
+ 0x232d: 0x000c,
+ // Block 0x8d, offset 0x2340
+ 0x235d: 0x0001,
+ 0x235e: 0x000c, 0x235f: 0x0001, 0x2360: 0x0001, 0x2361: 0x0001, 0x2362: 0x0001, 0x2363: 0x0001,
+ 0x2364: 0x0001, 0x2365: 0x0001, 0x2366: 0x0001, 0x2367: 0x0001, 0x2368: 0x0001, 0x2369: 0x0003,
+ 0x236a: 0x0001, 0x236b: 0x0001, 0x236c: 0x0001, 0x236d: 0x0001, 0x236e: 0x0001, 0x236f: 0x0001,
+ 0x2370: 0x0001, 0x2371: 0x0001, 0x2372: 0x0001, 0x2373: 0x0001, 0x2374: 0x0001, 0x2375: 0x0001,
+ 0x2376: 0x0001, 0x2377: 0x0001, 0x2378: 0x0001, 0x2379: 0x0001, 0x237a: 0x0001, 0x237b: 0x0001,
+ 0x237c: 0x0001, 0x237d: 0x0001, 0x237e: 0x0001, 0x237f: 0x0001,
+ // Block 0x8e, offset 0x2380
+ 0x2380: 0x0001, 0x2381: 0x0001, 0x2382: 0x0001, 0x2383: 0x0001, 0x2384: 0x0001, 0x2385: 0x0001,
+ 0x2386: 0x0001, 0x2387: 0x0001, 0x2388: 0x0001, 0x2389: 0x0001, 0x238a: 0x0001, 0x238b: 0x0001,
+ 0x238c: 0x0001, 0x238d: 0x0001, 0x238e: 0x0001, 0x238f: 0x0001, 0x2390: 0x000d, 0x2391: 0x000d,
+ 0x2392: 0x000d, 0x2393: 0x000d, 0x2394: 0x000d, 0x2395: 0x000d, 0x2396: 0x000d, 0x2397: 0x000d,
+ 0x2398: 0x000d, 0x2399: 0x000d, 0x239a: 0x000d, 0x239b: 0x000d, 0x239c: 0x000d, 0x239d: 0x000d,
+ 0x239e: 0x000d, 0x239f: 0x000d, 0x23a0: 0x000d, 0x23a1: 0x000d, 0x23a2: 0x000d, 0x23a3: 0x000d,
+ 0x23a4: 0x000d, 0x23a5: 0x000d, 0x23a6: 0x000d, 0x23a7: 0x000d, 0x23a8: 0x000d, 0x23a9: 0x000d,
+ 0x23aa: 0x000d, 0x23ab: 0x000d, 0x23ac: 0x000d, 0x23ad: 0x000d, 0x23ae: 0x000d, 0x23af: 0x000d,
+ 0x23b0: 0x000d, 0x23b1: 0x000d, 0x23b2: 0x000d, 0x23b3: 0x000d, 0x23b4: 0x000d, 0x23b5: 0x000d,
+ 0x23b6: 0x000d, 0x23b7: 0x000d, 0x23b8: 0x000d, 0x23b9: 0x000d, 0x23ba: 0x000d, 0x23bb: 0x000d,
+ 0x23bc: 0x000d, 0x23bd: 0x000d, 0x23be: 0x000d, 0x23bf: 0x000d,
+ // Block 0x8f, offset 0x23c0
+ 0x23c0: 0x000d, 0x23c1: 0x000d, 0x23c2: 0x000d, 0x23c3: 0x000d, 0x23c4: 0x000d, 0x23c5: 0x000d,
+ 0x23c6: 0x000d, 0x23c7: 0x000d, 0x23c8: 0x000d, 0x23c9: 0x000d, 0x23ca: 0x000d, 0x23cb: 0x000d,
+ 0x23cc: 0x000d, 0x23cd: 0x000d, 0x23ce: 0x000d, 0x23cf: 0x000d, 0x23d0: 0x000d, 0x23d1: 0x000d,
+ 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d,
+ 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d,
+ 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d,
+ 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d,
+ 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d,
+ 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d,
+ 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d,
+ 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000a, 0x23ff: 0x000a,
+ // Block 0x90, offset 0x2400
+ 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d,
+ 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d,
+ 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000b, 0x2411: 0x000b,
+ 0x2412: 0x000b, 0x2413: 0x000b, 0x2414: 0x000b, 0x2415: 0x000b, 0x2416: 0x000b, 0x2417: 0x000b,
+ 0x2418: 0x000b, 0x2419: 0x000b, 0x241a: 0x000b, 0x241b: 0x000b, 0x241c: 0x000b, 0x241d: 0x000b,
+ 0x241e: 0x000b, 0x241f: 0x000b, 0x2420: 0x000b, 0x2421: 0x000b, 0x2422: 0x000b, 0x2423: 0x000b,
+ 0x2424: 0x000b, 0x2425: 0x000b, 0x2426: 0x000b, 0x2427: 0x000b, 0x2428: 0x000b, 0x2429: 0x000b,
+ 0x242a: 0x000b, 0x242b: 0x000b, 0x242c: 0x000b, 0x242d: 0x000b, 0x242e: 0x000b, 0x242f: 0x000b,
+ 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d,
+ 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d,
+ 0x243c: 0x000d, 0x243d: 0x000a, 0x243e: 0x000d, 0x243f: 0x000d,
+ // Block 0x91, offset 0x2440
+ 0x2440: 0x000c, 0x2441: 0x000c, 0x2442: 0x000c, 0x2443: 0x000c, 0x2444: 0x000c, 0x2445: 0x000c,
+ 0x2446: 0x000c, 0x2447: 0x000c, 0x2448: 0x000c, 0x2449: 0x000c, 0x244a: 0x000c, 0x244b: 0x000c,
+ 0x244c: 0x000c, 0x244d: 0x000c, 0x244e: 0x000c, 0x244f: 0x000c, 0x2450: 0x000a, 0x2451: 0x000a,
+ 0x2452: 0x000a, 0x2453: 0x000a, 0x2454: 0x000a, 0x2455: 0x000a, 0x2456: 0x000a, 0x2457: 0x000a,
+ 0x2458: 0x000a, 0x2459: 0x000a,
+ 0x2460: 0x000c, 0x2461: 0x000c, 0x2462: 0x000c, 0x2463: 0x000c,
+ 0x2464: 0x000c, 0x2465: 0x000c, 0x2466: 0x000c, 0x2467: 0x000c, 0x2468: 0x000c, 0x2469: 0x000c,
+ 0x246a: 0x000c, 0x246b: 0x000c, 0x246c: 0x000c, 0x246d: 0x000c, 0x246e: 0x000c, 0x246f: 0x000c,
+ 0x2470: 0x000a, 0x2471: 0x000a, 0x2472: 0x000a, 0x2473: 0x000a, 0x2474: 0x000a, 0x2475: 0x000a,
+ 0x2476: 0x000a, 0x2477: 0x000a, 0x2478: 0x000a, 0x2479: 0x000a, 0x247a: 0x000a, 0x247b: 0x000a,
+ 0x247c: 0x000a, 0x247d: 0x000a, 0x247e: 0x000a, 0x247f: 0x000a,
+ // Block 0x92, offset 0x2480
+ 0x2480: 0x000a, 0x2481: 0x000a, 0x2482: 0x000a, 0x2483: 0x000a, 0x2484: 0x000a, 0x2485: 0x000a,
+ 0x2486: 0x000a, 0x2487: 0x000a, 0x2488: 0x000a, 0x2489: 0x000a, 0x248a: 0x000a, 0x248b: 0x000a,
+ 0x248c: 0x000a, 0x248d: 0x000a, 0x248e: 0x000a, 0x248f: 0x000a, 0x2490: 0x0006, 0x2491: 0x000a,
+ 0x2492: 0x0006, 0x2494: 0x000a, 0x2495: 0x0006, 0x2496: 0x000a, 0x2497: 0x000a,
+ 0x2498: 0x000a, 0x2499: 0x009a, 0x249a: 0x008a, 0x249b: 0x007a, 0x249c: 0x006a, 0x249d: 0x009a,
+ 0x249e: 0x008a, 0x249f: 0x0004, 0x24a0: 0x000a, 0x24a1: 0x000a, 0x24a2: 0x0003, 0x24a3: 0x0003,
+ 0x24a4: 0x000a, 0x24a5: 0x000a, 0x24a6: 0x000a, 0x24a8: 0x000a, 0x24a9: 0x0004,
+ 0x24aa: 0x0004, 0x24ab: 0x000a,
+ 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d,
+ 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d,
+ 0x24bc: 0x000d, 0x24bd: 0x000d, 0x24be: 0x000d, 0x24bf: 0x000d,
+ // Block 0x93, offset 0x24c0
+ 0x24c0: 0x000d, 0x24c1: 0x000d, 0x24c2: 0x000d, 0x24c3: 0x000d, 0x24c4: 0x000d, 0x24c5: 0x000d,
+ 0x24c6: 0x000d, 0x24c7: 0x000d, 0x24c8: 0x000d, 0x24c9: 0x000d, 0x24ca: 0x000d, 0x24cb: 0x000d,
+ 0x24cc: 0x000d, 0x24cd: 0x000d, 0x24ce: 0x000d, 0x24cf: 0x000d, 0x24d0: 0x000d, 0x24d1: 0x000d,
+ 0x24d2: 0x000d, 0x24d3: 0x000d, 0x24d4: 0x000d, 0x24d5: 0x000d, 0x24d6: 0x000d, 0x24d7: 0x000d,
+ 0x24d8: 0x000d, 0x24d9: 0x000d, 0x24da: 0x000d, 0x24db: 0x000d, 0x24dc: 0x000d, 0x24dd: 0x000d,
+ 0x24de: 0x000d, 0x24df: 0x000d, 0x24e0: 0x000d, 0x24e1: 0x000d, 0x24e2: 0x000d, 0x24e3: 0x000d,
+ 0x24e4: 0x000d, 0x24e5: 0x000d, 0x24e6: 0x000d, 0x24e7: 0x000d, 0x24e8: 0x000d, 0x24e9: 0x000d,
+ 0x24ea: 0x000d, 0x24eb: 0x000d, 0x24ec: 0x000d, 0x24ed: 0x000d, 0x24ee: 0x000d, 0x24ef: 0x000d,
+ 0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d,
+ 0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d,
+ 0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000b,
+ // Block 0x94, offset 0x2500
+ 0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x0004, 0x2504: 0x0004, 0x2505: 0x0004,
+ 0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x003a, 0x2509: 0x002a, 0x250a: 0x000a, 0x250b: 0x0003,
+ 0x250c: 0x0006, 0x250d: 0x0003, 0x250e: 0x0006, 0x250f: 0x0006, 0x2510: 0x0002, 0x2511: 0x0002,
+ 0x2512: 0x0002, 0x2513: 0x0002, 0x2514: 0x0002, 0x2515: 0x0002, 0x2516: 0x0002, 0x2517: 0x0002,
+ 0x2518: 0x0002, 0x2519: 0x0002, 0x251a: 0x0006, 0x251b: 0x000a, 0x251c: 0x000a, 0x251d: 0x000a,
+ 0x251e: 0x000a, 0x251f: 0x000a, 0x2520: 0x000a,
+ 0x253b: 0x005a,
+ 0x253c: 0x000a, 0x253d: 0x004a, 0x253e: 0x000a, 0x253f: 0x000a,
+ // Block 0x95, offset 0x2540
+ 0x2540: 0x000a,
+ 0x255b: 0x005a, 0x255c: 0x000a, 0x255d: 0x004a,
+ 0x255e: 0x000a, 0x255f: 0x00fa, 0x2560: 0x00ea, 0x2561: 0x000a, 0x2562: 0x003a, 0x2563: 0x002a,
+ 0x2564: 0x000a, 0x2565: 0x000a,
+ // Block 0x96, offset 0x2580
+ 0x25a0: 0x0004, 0x25a1: 0x0004, 0x25a2: 0x000a, 0x25a3: 0x000a,
+ 0x25a4: 0x000a, 0x25a5: 0x0004, 0x25a6: 0x0004, 0x25a8: 0x000a, 0x25a9: 0x000a,
+ 0x25aa: 0x000a, 0x25ab: 0x000a, 0x25ac: 0x000a, 0x25ad: 0x000a, 0x25ae: 0x000a,
+ 0x25b0: 0x000b, 0x25b1: 0x000b, 0x25b2: 0x000b, 0x25b3: 0x000b, 0x25b4: 0x000b, 0x25b5: 0x000b,
+ 0x25b6: 0x000b, 0x25b7: 0x000b, 0x25b8: 0x000b, 0x25b9: 0x000a, 0x25ba: 0x000a, 0x25bb: 0x000a,
+ 0x25bc: 0x000a, 0x25bd: 0x000a, 0x25be: 0x000b, 0x25bf: 0x000b,
+ // Block 0x97, offset 0x25c0
+ 0x25c1: 0x000a,
+ // Block 0x98, offset 0x2600
+ 0x2600: 0x000a, 0x2601: 0x000a, 0x2602: 0x000a, 0x2603: 0x000a, 0x2604: 0x000a, 0x2605: 0x000a,
+ 0x2606: 0x000a, 0x2607: 0x000a, 0x2608: 0x000a, 0x2609: 0x000a, 0x260a: 0x000a, 0x260b: 0x000a,
+ 0x260c: 0x000a, 0x2610: 0x000a, 0x2611: 0x000a,
+ 0x2612: 0x000a, 0x2613: 0x000a, 0x2614: 0x000a, 0x2615: 0x000a, 0x2616: 0x000a, 0x2617: 0x000a,
+ 0x2618: 0x000a, 0x2619: 0x000a, 0x261a: 0x000a, 0x261b: 0x000a,
+ 0x2620: 0x000a,
+ // Block 0x99, offset 0x2640
+ 0x267d: 0x000c,
+ // Block 0x9a, offset 0x2680
+ 0x26a0: 0x000c, 0x26a1: 0x0002, 0x26a2: 0x0002, 0x26a3: 0x0002,
+ 0x26a4: 0x0002, 0x26a5: 0x0002, 0x26a6: 0x0002, 0x26a7: 0x0002, 0x26a8: 0x0002, 0x26a9: 0x0002,
+ 0x26aa: 0x0002, 0x26ab: 0x0002, 0x26ac: 0x0002, 0x26ad: 0x0002, 0x26ae: 0x0002, 0x26af: 0x0002,
+ 0x26b0: 0x0002, 0x26b1: 0x0002, 0x26b2: 0x0002, 0x26b3: 0x0002, 0x26b4: 0x0002, 0x26b5: 0x0002,
+ 0x26b6: 0x0002, 0x26b7: 0x0002, 0x26b8: 0x0002, 0x26b9: 0x0002, 0x26ba: 0x0002, 0x26bb: 0x0002,
+ // Block 0x9b, offset 0x26c0
+ 0x26f6: 0x000c, 0x26f7: 0x000c, 0x26f8: 0x000c, 0x26f9: 0x000c, 0x26fa: 0x000c,
+ // Block 0x9c, offset 0x2700
+ 0x2700: 0x0001, 0x2701: 0x0001, 0x2702: 0x0001, 0x2703: 0x0001, 0x2704: 0x0001, 0x2705: 0x0001,
+ 0x2706: 0x0001, 0x2707: 0x0001, 0x2708: 0x0001, 0x2709: 0x0001, 0x270a: 0x0001, 0x270b: 0x0001,
+ 0x270c: 0x0001, 0x270d: 0x0001, 0x270e: 0x0001, 0x270f: 0x0001, 0x2710: 0x0001, 0x2711: 0x0001,
+ 0x2712: 0x0001, 0x2713: 0x0001, 0x2714: 0x0001, 0x2715: 0x0001, 0x2716: 0x0001, 0x2717: 0x0001,
+ 0x2718: 0x0001, 0x2719: 0x0001, 0x271a: 0x0001, 0x271b: 0x0001, 0x271c: 0x0001, 0x271d: 0x0001,
+ 0x271e: 0x0001, 0x271f: 0x0001, 0x2720: 0x0001, 0x2721: 0x0001, 0x2722: 0x0001, 0x2723: 0x0001,
+ 0x2724: 0x0001, 0x2725: 0x0001, 0x2726: 0x0001, 0x2727: 0x0001, 0x2728: 0x0001, 0x2729: 0x0001,
+ 0x272a: 0x0001, 0x272b: 0x0001, 0x272c: 0x0001, 0x272d: 0x0001, 0x272e: 0x0001, 0x272f: 0x0001,
+ 0x2730: 0x0001, 0x2731: 0x0001, 0x2732: 0x0001, 0x2733: 0x0001, 0x2734: 0x0001, 0x2735: 0x0001,
+ 0x2736: 0x0001, 0x2737: 0x0001, 0x2738: 0x0001, 0x2739: 0x0001, 0x273a: 0x0001, 0x273b: 0x0001,
+ 0x273c: 0x0001, 0x273d: 0x0001, 0x273e: 0x0001, 0x273f: 0x0001,
+ // Block 0x9d, offset 0x2740
+ 0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001,
+ 0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001,
+ 0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001,
+ 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001,
+ 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001,
+ 0x275e: 0x0001, 0x275f: 0x000a, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001,
+ 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001,
+ 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001,
+ 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001,
+ 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001,
+ 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001,
+ // Block 0x9e, offset 0x2780
+ 0x2780: 0x0001, 0x2781: 0x000c, 0x2782: 0x000c, 0x2783: 0x000c, 0x2784: 0x0001, 0x2785: 0x000c,
+ 0x2786: 0x000c, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001,
+ 0x278c: 0x000c, 0x278d: 0x000c, 0x278e: 0x000c, 0x278f: 0x000c, 0x2790: 0x0001, 0x2791: 0x0001,
+ 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001,
+ 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001,
+ 0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001,
+ 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001,
+ 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001,
+ 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001,
+ 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x000c, 0x27b9: 0x000c, 0x27ba: 0x000c, 0x27bb: 0x0001,
+ 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x000c,
+ // Block 0x9f, offset 0x27c0
+ 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001,
+ 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001,
+ 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001,
+ 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001,
+ 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001,
+ 0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001,
+ 0x27e4: 0x0001, 0x27e5: 0x000c, 0x27e6: 0x000c, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001,
+ 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001,
+ 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001,
+ 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001,
+ 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001,
+ // Block 0xa0, offset 0x2800
+ 0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001,
+ 0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001,
+ 0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001,
+ 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001,
+ 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001,
+ 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001,
+ 0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001,
+ 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001,
+ 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001,
+ 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x000a, 0x283a: 0x000a, 0x283b: 0x000a,
+ 0x283c: 0x000a, 0x283d: 0x000a, 0x283e: 0x000a, 0x283f: 0x000a,
+ // Block 0xa1, offset 0x2840
+ 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001,
+ 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001,
+ 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001,
+ 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001,
+ 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001,
+ 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0005, 0x2861: 0x0005, 0x2862: 0x0005, 0x2863: 0x0005,
+ 0x2864: 0x0005, 0x2865: 0x0005, 0x2866: 0x0005, 0x2867: 0x0005, 0x2868: 0x0005, 0x2869: 0x0005,
+ 0x286a: 0x0005, 0x286b: 0x0005, 0x286c: 0x0005, 0x286d: 0x0005, 0x286e: 0x0005, 0x286f: 0x0005,
+ 0x2870: 0x0005, 0x2871: 0x0005, 0x2872: 0x0005, 0x2873: 0x0005, 0x2874: 0x0005, 0x2875: 0x0005,
+ 0x2876: 0x0005, 0x2877: 0x0005, 0x2878: 0x0005, 0x2879: 0x0005, 0x287a: 0x0005, 0x287b: 0x0005,
+ 0x287c: 0x0005, 0x287d: 0x0005, 0x287e: 0x0005, 0x287f: 0x0001,
+ // Block 0xa2, offset 0x2880
+ 0x2881: 0x000c,
+ 0x28b8: 0x000c, 0x28b9: 0x000c, 0x28ba: 0x000c, 0x28bb: 0x000c,
+ 0x28bc: 0x000c, 0x28bd: 0x000c, 0x28be: 0x000c, 0x28bf: 0x000c,
+ // Block 0xa3, offset 0x28c0
+ 0x28c0: 0x000c, 0x28c1: 0x000c, 0x28c2: 0x000c, 0x28c3: 0x000c, 0x28c4: 0x000c, 0x28c5: 0x000c,
+ 0x28c6: 0x000c,
+ 0x28d2: 0x000a, 0x28d3: 0x000a, 0x28d4: 0x000a, 0x28d5: 0x000a, 0x28d6: 0x000a, 0x28d7: 0x000a,
+ 0x28d8: 0x000a, 0x28d9: 0x000a, 0x28da: 0x000a, 0x28db: 0x000a, 0x28dc: 0x000a, 0x28dd: 0x000a,
+ 0x28de: 0x000a, 0x28df: 0x000a, 0x28e0: 0x000a, 0x28e1: 0x000a, 0x28e2: 0x000a, 0x28e3: 0x000a,
+ 0x28e4: 0x000a, 0x28e5: 0x000a,
+ 0x28ff: 0x000c,
+ // Block 0xa4, offset 0x2900
+ 0x2900: 0x000c, 0x2901: 0x000c,
+ 0x2933: 0x000c, 0x2934: 0x000c, 0x2935: 0x000c,
+ 0x2936: 0x000c, 0x2939: 0x000c, 0x293a: 0x000c,
+ // Block 0xa5, offset 0x2940
+ 0x2940: 0x000c, 0x2941: 0x000c, 0x2942: 0x000c,
+ 0x2967: 0x000c, 0x2968: 0x000c, 0x2969: 0x000c,
+ 0x296a: 0x000c, 0x296b: 0x000c, 0x296d: 0x000c, 0x296e: 0x000c, 0x296f: 0x000c,
+ 0x2970: 0x000c, 0x2971: 0x000c, 0x2972: 0x000c, 0x2973: 0x000c, 0x2974: 0x000c,
+ // Block 0xa6, offset 0x2980
+ 0x29b3: 0x000c,
+ // Block 0xa7, offset 0x29c0
+ 0x29c0: 0x000c, 0x29c1: 0x000c,
+ 0x29f6: 0x000c, 0x29f7: 0x000c, 0x29f8: 0x000c, 0x29f9: 0x000c, 0x29fa: 0x000c, 0x29fb: 0x000c,
+ 0x29fc: 0x000c, 0x29fd: 0x000c, 0x29fe: 0x000c,
+ // Block 0xa8, offset 0x2a00
+ 0x2a0a: 0x000c, 0x2a0b: 0x000c,
+ 0x2a0c: 0x000c,
+ // Block 0xa9, offset 0x2a40
+ 0x2a6f: 0x000c,
+ 0x2a70: 0x000c, 0x2a71: 0x000c, 0x2a74: 0x000c,
+ 0x2a76: 0x000c, 0x2a77: 0x000c,
+ 0x2a7e: 0x000c,
+ // Block 0xaa, offset 0x2a80
+ 0x2a9f: 0x000c, 0x2aa3: 0x000c,
+ 0x2aa4: 0x000c, 0x2aa5: 0x000c, 0x2aa6: 0x000c, 0x2aa7: 0x000c, 0x2aa8: 0x000c, 0x2aa9: 0x000c,
+ 0x2aaa: 0x000c,
+ // Block 0xab, offset 0x2ac0
+ 0x2ac0: 0x000c, 0x2ac1: 0x000c,
+ 0x2afc: 0x000c,
+ // Block 0xac, offset 0x2b00
+ 0x2b00: 0x000c,
+ 0x2b26: 0x000c, 0x2b27: 0x000c, 0x2b28: 0x000c, 0x2b29: 0x000c,
+ 0x2b2a: 0x000c, 0x2b2b: 0x000c, 0x2b2c: 0x000c,
+ 0x2b30: 0x000c, 0x2b31: 0x000c, 0x2b32: 0x000c, 0x2b33: 0x000c, 0x2b34: 0x000c,
+ // Block 0xad, offset 0x2b40
+ 0x2b78: 0x000c, 0x2b79: 0x000c, 0x2b7a: 0x000c, 0x2b7b: 0x000c,
+ 0x2b7c: 0x000c, 0x2b7d: 0x000c, 0x2b7e: 0x000c, 0x2b7f: 0x000c,
+ // Block 0xae, offset 0x2b80
+ 0x2b82: 0x000c, 0x2b83: 0x000c, 0x2b84: 0x000c,
+ 0x2b86: 0x000c,
+ // Block 0xaf, offset 0x2bc0
+ 0x2bf3: 0x000c, 0x2bf4: 0x000c, 0x2bf5: 0x000c,
+ 0x2bf6: 0x000c, 0x2bf7: 0x000c, 0x2bf8: 0x000c, 0x2bfa: 0x000c,
+ 0x2bff: 0x000c,
+ // Block 0xb0, offset 0x2c00
+ 0x2c00: 0x000c, 0x2c02: 0x000c, 0x2c03: 0x000c,
+ // Block 0xb1, offset 0x2c40
+ 0x2c72: 0x000c, 0x2c73: 0x000c, 0x2c74: 0x000c, 0x2c75: 0x000c,
+ 0x2c7c: 0x000c, 0x2c7d: 0x000c, 0x2c7f: 0x000c,
+ // Block 0xb2, offset 0x2c80
+ 0x2c80: 0x000c,
+ 0x2c9c: 0x000c, 0x2c9d: 0x000c,
+ // Block 0xb3, offset 0x2cc0
+ 0x2cf3: 0x000c, 0x2cf4: 0x000c, 0x2cf5: 0x000c,
+ 0x2cf6: 0x000c, 0x2cf7: 0x000c, 0x2cf8: 0x000c, 0x2cf9: 0x000c, 0x2cfa: 0x000c,
+ 0x2cfd: 0x000c, 0x2cff: 0x000c,
+ // Block 0xb4, offset 0x2d00
+ 0x2d00: 0x000c,
+ 0x2d20: 0x000a, 0x2d21: 0x000a, 0x2d22: 0x000a, 0x2d23: 0x000a,
+ 0x2d24: 0x000a, 0x2d25: 0x000a, 0x2d26: 0x000a, 0x2d27: 0x000a, 0x2d28: 0x000a, 0x2d29: 0x000a,
+ 0x2d2a: 0x000a, 0x2d2b: 0x000a, 0x2d2c: 0x000a,
+ // Block 0xb5, offset 0x2d40
+ 0x2d6b: 0x000c, 0x2d6d: 0x000c,
+ 0x2d70: 0x000c, 0x2d71: 0x000c, 0x2d72: 0x000c, 0x2d73: 0x000c, 0x2d74: 0x000c, 0x2d75: 0x000c,
+ 0x2d77: 0x000c,
+ // Block 0xb6, offset 0x2d80
+ 0x2d9d: 0x000c,
+ 0x2d9e: 0x000c, 0x2d9f: 0x000c, 0x2da2: 0x000c, 0x2da3: 0x000c,
+ 0x2da4: 0x000c, 0x2da5: 0x000c, 0x2da7: 0x000c, 0x2da8: 0x000c, 0x2da9: 0x000c,
+ 0x2daa: 0x000c, 0x2dab: 0x000c,
+ // Block 0xb7, offset 0x2dc0
+ 0x2dc1: 0x000c, 0x2dc2: 0x000c, 0x2dc3: 0x000c, 0x2dc4: 0x000c, 0x2dc5: 0x000c,
+ 0x2dc6: 0x000c, 0x2dc9: 0x000c, 0x2dca: 0x000c,
+ 0x2df3: 0x000c, 0x2df4: 0x000c, 0x2df5: 0x000c,
+ 0x2df6: 0x000c, 0x2df7: 0x000c, 0x2df8: 0x000c, 0x2dfb: 0x000c,
+ 0x2dfc: 0x000c, 0x2dfd: 0x000c, 0x2dfe: 0x000c,
+ // Block 0xb8, offset 0x2e00
+ 0x2e07: 0x000c,
+ 0x2e11: 0x000c,
+ 0x2e12: 0x000c, 0x2e13: 0x000c, 0x2e14: 0x000c, 0x2e15: 0x000c, 0x2e16: 0x000c,
+ 0x2e19: 0x000c, 0x2e1a: 0x000c, 0x2e1b: 0x000c,
+ // Block 0xb9, offset 0x2e40
+ 0x2e4a: 0x000c, 0x2e4b: 0x000c,
+ 0x2e4c: 0x000c, 0x2e4d: 0x000c, 0x2e4e: 0x000c, 0x2e4f: 0x000c, 0x2e50: 0x000c, 0x2e51: 0x000c,
+ 0x2e52: 0x000c, 0x2e53: 0x000c, 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c,
+ 0x2e58: 0x000c, 0x2e59: 0x000c,
+ // Block 0xba, offset 0x2e80
+ 0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c,
+ 0x2eb6: 0x000c, 0x2eb8: 0x000c, 0x2eb9: 0x000c, 0x2eba: 0x000c, 0x2ebb: 0x000c,
+ 0x2ebc: 0x000c, 0x2ebd: 0x000c,
+ // Block 0xbb, offset 0x2ec0
+ 0x2ed2: 0x000c, 0x2ed3: 0x000c, 0x2ed4: 0x000c, 0x2ed5: 0x000c, 0x2ed6: 0x000c, 0x2ed7: 0x000c,
+ 0x2ed8: 0x000c, 0x2ed9: 0x000c, 0x2eda: 0x000c, 0x2edb: 0x000c, 0x2edc: 0x000c, 0x2edd: 0x000c,
+ 0x2ede: 0x000c, 0x2edf: 0x000c, 0x2ee0: 0x000c, 0x2ee1: 0x000c, 0x2ee2: 0x000c, 0x2ee3: 0x000c,
+ 0x2ee4: 0x000c, 0x2ee5: 0x000c, 0x2ee6: 0x000c, 0x2ee7: 0x000c,
+ 0x2eea: 0x000c, 0x2eeb: 0x000c, 0x2eec: 0x000c, 0x2eed: 0x000c, 0x2eee: 0x000c, 0x2eef: 0x000c,
+ 0x2ef0: 0x000c, 0x2ef2: 0x000c, 0x2ef3: 0x000c, 0x2ef5: 0x000c,
+ 0x2ef6: 0x000c,
+ // Block 0xbc, offset 0x2f00
+ 0x2f31: 0x000c, 0x2f32: 0x000c, 0x2f33: 0x000c, 0x2f34: 0x000c, 0x2f35: 0x000c,
+ 0x2f36: 0x000c, 0x2f3a: 0x000c,
+ 0x2f3c: 0x000c, 0x2f3d: 0x000c, 0x2f3f: 0x000c,
+ // Block 0xbd, offset 0x2f40
+ 0x2f40: 0x000c, 0x2f41: 0x000c, 0x2f42: 0x000c, 0x2f43: 0x000c, 0x2f44: 0x000c, 0x2f45: 0x000c,
+ 0x2f47: 0x000c,
+ // Block 0xbe, offset 0x2f80
+ 0x2fb0: 0x000c, 0x2fb1: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb4: 0x000c,
+ // Block 0xbf, offset 0x2fc0
+ 0x2ff0: 0x000c, 0x2ff1: 0x000c, 0x2ff2: 0x000c, 0x2ff3: 0x000c, 0x2ff4: 0x000c, 0x2ff5: 0x000c,
+ 0x2ff6: 0x000c,
+ // Block 0xc0, offset 0x3000
+ 0x300f: 0x000c, 0x3010: 0x000c, 0x3011: 0x000c,
+ 0x3012: 0x000c,
+ // Block 0xc1, offset 0x3040
+ 0x305d: 0x000c,
+ 0x305e: 0x000c, 0x3060: 0x000b, 0x3061: 0x000b, 0x3062: 0x000b, 0x3063: 0x000b,
+ // Block 0xc2, offset 0x3080
+ 0x30a7: 0x000c, 0x30a8: 0x000c, 0x30a9: 0x000c,
+ 0x30b3: 0x000b, 0x30b4: 0x000b, 0x30b5: 0x000b,
+ 0x30b6: 0x000b, 0x30b7: 0x000b, 0x30b8: 0x000b, 0x30b9: 0x000b, 0x30ba: 0x000b, 0x30bb: 0x000c,
+ 0x30bc: 0x000c, 0x30bd: 0x000c, 0x30be: 0x000c, 0x30bf: 0x000c,
+ // Block 0xc3, offset 0x30c0
+ 0x30c0: 0x000c, 0x30c1: 0x000c, 0x30c2: 0x000c, 0x30c5: 0x000c,
+ 0x30c6: 0x000c, 0x30c7: 0x000c, 0x30c8: 0x000c, 0x30c9: 0x000c, 0x30ca: 0x000c, 0x30cb: 0x000c,
+ 0x30ea: 0x000c, 0x30eb: 0x000c, 0x30ec: 0x000c, 0x30ed: 0x000c,
+ // Block 0xc4, offset 0x3100
+ 0x3100: 0x000a, 0x3101: 0x000a, 0x3102: 0x000c, 0x3103: 0x000c, 0x3104: 0x000c, 0x3105: 0x000a,
+ // Block 0xc5, offset 0x3140
+ 0x3140: 0x000a, 0x3141: 0x000a, 0x3142: 0x000a, 0x3143: 0x000a, 0x3144: 0x000a, 0x3145: 0x000a,
+ 0x3146: 0x000a, 0x3147: 0x000a, 0x3148: 0x000a, 0x3149: 0x000a, 0x314a: 0x000a, 0x314b: 0x000a,
+ 0x314c: 0x000a, 0x314d: 0x000a, 0x314e: 0x000a, 0x314f: 0x000a, 0x3150: 0x000a, 0x3151: 0x000a,
+ 0x3152: 0x000a, 0x3153: 0x000a, 0x3154: 0x000a, 0x3155: 0x000a, 0x3156: 0x000a,
+ // Block 0xc6, offset 0x3180
+ 0x319b: 0x000a,
+ // Block 0xc7, offset 0x31c0
+ 0x31d5: 0x000a,
+ // Block 0xc8, offset 0x3200
+ 0x320f: 0x000a,
+ // Block 0xc9, offset 0x3240
+ 0x3249: 0x000a,
+ // Block 0xca, offset 0x3280
+ 0x3283: 0x000a,
+ 0x328e: 0x0002, 0x328f: 0x0002, 0x3290: 0x0002, 0x3291: 0x0002,
+ 0x3292: 0x0002, 0x3293: 0x0002, 0x3294: 0x0002, 0x3295: 0x0002, 0x3296: 0x0002, 0x3297: 0x0002,
+ 0x3298: 0x0002, 0x3299: 0x0002, 0x329a: 0x0002, 0x329b: 0x0002, 0x329c: 0x0002, 0x329d: 0x0002,
+ 0x329e: 0x0002, 0x329f: 0x0002, 0x32a0: 0x0002, 0x32a1: 0x0002, 0x32a2: 0x0002, 0x32a3: 0x0002,
+ 0x32a4: 0x0002, 0x32a5: 0x0002, 0x32a6: 0x0002, 0x32a7: 0x0002, 0x32a8: 0x0002, 0x32a9: 0x0002,
+ 0x32aa: 0x0002, 0x32ab: 0x0002, 0x32ac: 0x0002, 0x32ad: 0x0002, 0x32ae: 0x0002, 0x32af: 0x0002,
+ 0x32b0: 0x0002, 0x32b1: 0x0002, 0x32b2: 0x0002, 0x32b3: 0x0002, 0x32b4: 0x0002, 0x32b5: 0x0002,
+ 0x32b6: 0x0002, 0x32b7: 0x0002, 0x32b8: 0x0002, 0x32b9: 0x0002, 0x32ba: 0x0002, 0x32bb: 0x0002,
+ 0x32bc: 0x0002, 0x32bd: 0x0002, 0x32be: 0x0002, 0x32bf: 0x0002,
+ // Block 0xcb, offset 0x32c0
+ 0x32c0: 0x000c, 0x32c1: 0x000c, 0x32c2: 0x000c, 0x32c3: 0x000c, 0x32c4: 0x000c, 0x32c5: 0x000c,
+ 0x32c6: 0x000c, 0x32c7: 0x000c, 0x32c8: 0x000c, 0x32c9: 0x000c, 0x32ca: 0x000c, 0x32cb: 0x000c,
+ 0x32cc: 0x000c, 0x32cd: 0x000c, 0x32ce: 0x000c, 0x32cf: 0x000c, 0x32d0: 0x000c, 0x32d1: 0x000c,
+ 0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x000c,
+ 0x32d8: 0x000c, 0x32d9: 0x000c, 0x32da: 0x000c, 0x32db: 0x000c, 0x32dc: 0x000c, 0x32dd: 0x000c,
+ 0x32de: 0x000c, 0x32df: 0x000c, 0x32e0: 0x000c, 0x32e1: 0x000c, 0x32e2: 0x000c, 0x32e3: 0x000c,
+ 0x32e4: 0x000c, 0x32e5: 0x000c, 0x32e6: 0x000c, 0x32e7: 0x000c, 0x32e8: 0x000c, 0x32e9: 0x000c,
+ 0x32ea: 0x000c, 0x32eb: 0x000c, 0x32ec: 0x000c, 0x32ed: 0x000c, 0x32ee: 0x000c, 0x32ef: 0x000c,
+ 0x32f0: 0x000c, 0x32f1: 0x000c, 0x32f2: 0x000c, 0x32f3: 0x000c, 0x32f4: 0x000c, 0x32f5: 0x000c,
+ 0x32f6: 0x000c, 0x32fb: 0x000c,
+ 0x32fc: 0x000c, 0x32fd: 0x000c, 0x32fe: 0x000c, 0x32ff: 0x000c,
+ // Block 0xcc, offset 0x3300
+ 0x3300: 0x000c, 0x3301: 0x000c, 0x3302: 0x000c, 0x3303: 0x000c, 0x3304: 0x000c, 0x3305: 0x000c,
+ 0x3306: 0x000c, 0x3307: 0x000c, 0x3308: 0x000c, 0x3309: 0x000c, 0x330a: 0x000c, 0x330b: 0x000c,
+ 0x330c: 0x000c, 0x330d: 0x000c, 0x330e: 0x000c, 0x330f: 0x000c, 0x3310: 0x000c, 0x3311: 0x000c,
+ 0x3312: 0x000c, 0x3313: 0x000c, 0x3314: 0x000c, 0x3315: 0x000c, 0x3316: 0x000c, 0x3317: 0x000c,
+ 0x3318: 0x000c, 0x3319: 0x000c, 0x331a: 0x000c, 0x331b: 0x000c, 0x331c: 0x000c, 0x331d: 0x000c,
+ 0x331e: 0x000c, 0x331f: 0x000c, 0x3320: 0x000c, 0x3321: 0x000c, 0x3322: 0x000c, 0x3323: 0x000c,
+ 0x3324: 0x000c, 0x3325: 0x000c, 0x3326: 0x000c, 0x3327: 0x000c, 0x3328: 0x000c, 0x3329: 0x000c,
+ 0x332a: 0x000c, 0x332b: 0x000c, 0x332c: 0x000c,
+ 0x3335: 0x000c,
+ // Block 0xcd, offset 0x3340
+ 0x3344: 0x000c,
+ 0x335b: 0x000c, 0x335c: 0x000c, 0x335d: 0x000c,
+ 0x335e: 0x000c, 0x335f: 0x000c, 0x3361: 0x000c, 0x3362: 0x000c, 0x3363: 0x000c,
+ 0x3364: 0x000c, 0x3365: 0x000c, 0x3366: 0x000c, 0x3367: 0x000c, 0x3368: 0x000c, 0x3369: 0x000c,
+ 0x336a: 0x000c, 0x336b: 0x000c, 0x336c: 0x000c, 0x336d: 0x000c, 0x336e: 0x000c, 0x336f: 0x000c,
+ // Block 0xce, offset 0x3380
+ 0x3380: 0x000c, 0x3381: 0x000c, 0x3382: 0x000c, 0x3383: 0x000c, 0x3384: 0x000c, 0x3385: 0x000c,
+ 0x3386: 0x000c, 0x3388: 0x000c, 0x3389: 0x000c, 0x338a: 0x000c, 0x338b: 0x000c,
+ 0x338c: 0x000c, 0x338d: 0x000c, 0x338e: 0x000c, 0x338f: 0x000c, 0x3390: 0x000c, 0x3391: 0x000c,
+ 0x3392: 0x000c, 0x3393: 0x000c, 0x3394: 0x000c, 0x3395: 0x000c, 0x3396: 0x000c, 0x3397: 0x000c,
+ 0x3398: 0x000c, 0x339b: 0x000c, 0x339c: 0x000c, 0x339d: 0x000c,
+ 0x339e: 0x000c, 0x339f: 0x000c, 0x33a0: 0x000c, 0x33a1: 0x000c, 0x33a3: 0x000c,
+ 0x33a4: 0x000c, 0x33a6: 0x000c, 0x33a7: 0x000c, 0x33a8: 0x000c, 0x33a9: 0x000c,
+ 0x33aa: 0x000c,
+ // Block 0xcf, offset 0x33c0
+ 0x33c0: 0x0001, 0x33c1: 0x0001, 0x33c2: 0x0001, 0x33c3: 0x0001, 0x33c4: 0x0001, 0x33c5: 0x0001,
+ 0x33c6: 0x0001, 0x33c7: 0x0001, 0x33c8: 0x0001, 0x33c9: 0x0001, 0x33ca: 0x0001, 0x33cb: 0x0001,
+ 0x33cc: 0x0001, 0x33cd: 0x0001, 0x33ce: 0x0001, 0x33cf: 0x0001, 0x33d0: 0x000c, 0x33d1: 0x000c,
+ 0x33d2: 0x000c, 0x33d3: 0x000c, 0x33d4: 0x000c, 0x33d5: 0x000c, 0x33d6: 0x000c, 0x33d7: 0x0001,
+ 0x33d8: 0x0001, 0x33d9: 0x0001, 0x33da: 0x0001, 0x33db: 0x0001, 0x33dc: 0x0001, 0x33dd: 0x0001,
+ 0x33de: 0x0001, 0x33df: 0x0001, 0x33e0: 0x0001, 0x33e1: 0x0001, 0x33e2: 0x0001, 0x33e3: 0x0001,
+ 0x33e4: 0x0001, 0x33e5: 0x0001, 0x33e6: 0x0001, 0x33e7: 0x0001, 0x33e8: 0x0001, 0x33e9: 0x0001,
+ 0x33ea: 0x0001, 0x33eb: 0x0001, 0x33ec: 0x0001, 0x33ed: 0x0001, 0x33ee: 0x0001, 0x33ef: 0x0001,
+ 0x33f0: 0x0001, 0x33f1: 0x0001, 0x33f2: 0x0001, 0x33f3: 0x0001, 0x33f4: 0x0001, 0x33f5: 0x0001,
+ 0x33f6: 0x0001, 0x33f7: 0x0001, 0x33f8: 0x0001, 0x33f9: 0x0001, 0x33fa: 0x0001, 0x33fb: 0x0001,
+ 0x33fc: 0x0001, 0x33fd: 0x0001, 0x33fe: 0x0001, 0x33ff: 0x0001,
+ // Block 0xd0, offset 0x3400
+ 0x3400: 0x0001, 0x3401: 0x0001, 0x3402: 0x0001, 0x3403: 0x0001, 0x3404: 0x000c, 0x3405: 0x000c,
+ 0x3406: 0x000c, 0x3407: 0x000c, 0x3408: 0x000c, 0x3409: 0x000c, 0x340a: 0x000c, 0x340b: 0x0001,
+ 0x340c: 0x0001, 0x340d: 0x0001, 0x340e: 0x0001, 0x340f: 0x0001, 0x3410: 0x0001, 0x3411: 0x0001,
+ 0x3412: 0x0001, 0x3413: 0x0001, 0x3414: 0x0001, 0x3415: 0x0001, 0x3416: 0x0001, 0x3417: 0x0001,
+ 0x3418: 0x0001, 0x3419: 0x0001, 0x341a: 0x0001, 0x341b: 0x0001, 0x341c: 0x0001, 0x341d: 0x0001,
+ 0x341e: 0x0001, 0x341f: 0x0001, 0x3420: 0x0001, 0x3421: 0x0001, 0x3422: 0x0001, 0x3423: 0x0001,
+ 0x3424: 0x0001, 0x3425: 0x0001, 0x3426: 0x0001, 0x3427: 0x0001, 0x3428: 0x0001, 0x3429: 0x0001,
+ 0x342a: 0x0001, 0x342b: 0x0001, 0x342c: 0x0001, 0x342d: 0x0001, 0x342e: 0x0001, 0x342f: 0x0001,
+ 0x3430: 0x0001, 0x3431: 0x0001, 0x3432: 0x0001, 0x3433: 0x0001, 0x3434: 0x0001, 0x3435: 0x0001,
+ 0x3436: 0x0001, 0x3437: 0x0001, 0x3438: 0x0001, 0x3439: 0x0001, 0x343a: 0x0001, 0x343b: 0x0001,
+ 0x343c: 0x0001, 0x343d: 0x0001, 0x343e: 0x0001, 0x343f: 0x0001,
+ // Block 0xd1, offset 0x3440
+ 0x3440: 0x000d, 0x3441: 0x000d, 0x3442: 0x000d, 0x3443: 0x000d, 0x3444: 0x000d, 0x3445: 0x000d,
+ 0x3446: 0x000d, 0x3447: 0x000d, 0x3448: 0x000d, 0x3449: 0x000d, 0x344a: 0x000d, 0x344b: 0x000d,
+ 0x344c: 0x000d, 0x344d: 0x000d, 0x344e: 0x000d, 0x344f: 0x000d, 0x3450: 0x000d, 0x3451: 0x000d,
+ 0x3452: 0x000d, 0x3453: 0x000d, 0x3454: 0x000d, 0x3455: 0x000d, 0x3456: 0x000d, 0x3457: 0x000d,
+ 0x3458: 0x000d, 0x3459: 0x000d, 0x345a: 0x000d, 0x345b: 0x000d, 0x345c: 0x000d, 0x345d: 0x000d,
+ 0x345e: 0x000d, 0x345f: 0x000d, 0x3460: 0x000d, 0x3461: 0x000d, 0x3462: 0x000d, 0x3463: 0x000d,
+ 0x3464: 0x000d, 0x3465: 0x000d, 0x3466: 0x000d, 0x3467: 0x000d, 0x3468: 0x000d, 0x3469: 0x000d,
+ 0x346a: 0x000d, 0x346b: 0x000d, 0x346c: 0x000d, 0x346d: 0x000d, 0x346e: 0x000d, 0x346f: 0x000d,
+ 0x3470: 0x000a, 0x3471: 0x000a, 0x3472: 0x000d, 0x3473: 0x000d, 0x3474: 0x000d, 0x3475: 0x000d,
+ 0x3476: 0x000d, 0x3477: 0x000d, 0x3478: 0x000d, 0x3479: 0x000d, 0x347a: 0x000d, 0x347b: 0x000d,
+ 0x347c: 0x000d, 0x347d: 0x000d, 0x347e: 0x000d, 0x347f: 0x000d,
+ // Block 0xd2, offset 0x3480
+ 0x3480: 0x000a, 0x3481: 0x000a, 0x3482: 0x000a, 0x3483: 0x000a, 0x3484: 0x000a, 0x3485: 0x000a,
+ 0x3486: 0x000a, 0x3487: 0x000a, 0x3488: 0x000a, 0x3489: 0x000a, 0x348a: 0x000a, 0x348b: 0x000a,
+ 0x348c: 0x000a, 0x348d: 0x000a, 0x348e: 0x000a, 0x348f: 0x000a, 0x3490: 0x000a, 0x3491: 0x000a,
+ 0x3492: 0x000a, 0x3493: 0x000a, 0x3494: 0x000a, 0x3495: 0x000a, 0x3496: 0x000a, 0x3497: 0x000a,
+ 0x3498: 0x000a, 0x3499: 0x000a, 0x349a: 0x000a, 0x349b: 0x000a, 0x349c: 0x000a, 0x349d: 0x000a,
+ 0x349e: 0x000a, 0x349f: 0x000a, 0x34a0: 0x000a, 0x34a1: 0x000a, 0x34a2: 0x000a, 0x34a3: 0x000a,
+ 0x34a4: 0x000a, 0x34a5: 0x000a, 0x34a6: 0x000a, 0x34a7: 0x000a, 0x34a8: 0x000a, 0x34a9: 0x000a,
+ 0x34aa: 0x000a, 0x34ab: 0x000a,
+ 0x34b0: 0x000a, 0x34b1: 0x000a, 0x34b2: 0x000a, 0x34b3: 0x000a, 0x34b4: 0x000a, 0x34b5: 0x000a,
+ 0x34b6: 0x000a, 0x34b7: 0x000a, 0x34b8: 0x000a, 0x34b9: 0x000a, 0x34ba: 0x000a, 0x34bb: 0x000a,
+ 0x34bc: 0x000a, 0x34bd: 0x000a, 0x34be: 0x000a, 0x34bf: 0x000a,
+ // Block 0xd3, offset 0x34c0
+ 0x34c0: 0x000a, 0x34c1: 0x000a, 0x34c2: 0x000a, 0x34c3: 0x000a, 0x34c4: 0x000a, 0x34c5: 0x000a,
+ 0x34c6: 0x000a, 0x34c7: 0x000a, 0x34c8: 0x000a, 0x34c9: 0x000a, 0x34ca: 0x000a, 0x34cb: 0x000a,
+ 0x34cc: 0x000a, 0x34cd: 0x000a, 0x34ce: 0x000a, 0x34cf: 0x000a, 0x34d0: 0x000a, 0x34d1: 0x000a,
+ 0x34d2: 0x000a, 0x34d3: 0x000a,
+ 0x34e0: 0x000a, 0x34e1: 0x000a, 0x34e2: 0x000a, 0x34e3: 0x000a,
+ 0x34e4: 0x000a, 0x34e5: 0x000a, 0x34e6: 0x000a, 0x34e7: 0x000a, 0x34e8: 0x000a, 0x34e9: 0x000a,
+ 0x34ea: 0x000a, 0x34eb: 0x000a, 0x34ec: 0x000a, 0x34ed: 0x000a, 0x34ee: 0x000a,
+ 0x34f1: 0x000a, 0x34f2: 0x000a, 0x34f3: 0x000a, 0x34f4: 0x000a, 0x34f5: 0x000a,
+ 0x34f6: 0x000a, 0x34f7: 0x000a, 0x34f8: 0x000a, 0x34f9: 0x000a, 0x34fa: 0x000a, 0x34fb: 0x000a,
+ 0x34fc: 0x000a, 0x34fd: 0x000a, 0x34fe: 0x000a, 0x34ff: 0x000a,
+ // Block 0xd4, offset 0x3500
+ 0x3501: 0x000a, 0x3502: 0x000a, 0x3503: 0x000a, 0x3504: 0x000a, 0x3505: 0x000a,
+ 0x3506: 0x000a, 0x3507: 0x000a, 0x3508: 0x000a, 0x3509: 0x000a, 0x350a: 0x000a, 0x350b: 0x000a,
+ 0x350c: 0x000a, 0x350d: 0x000a, 0x350e: 0x000a, 0x350f: 0x000a, 0x3511: 0x000a,
+ 0x3512: 0x000a, 0x3513: 0x000a, 0x3514: 0x000a, 0x3515: 0x000a, 0x3516: 0x000a, 0x3517: 0x000a,
+ 0x3518: 0x000a, 0x3519: 0x000a, 0x351a: 0x000a, 0x351b: 0x000a, 0x351c: 0x000a, 0x351d: 0x000a,
+ 0x351e: 0x000a, 0x351f: 0x000a, 0x3520: 0x000a, 0x3521: 0x000a, 0x3522: 0x000a, 0x3523: 0x000a,
+ 0x3524: 0x000a, 0x3525: 0x000a, 0x3526: 0x000a, 0x3527: 0x000a, 0x3528: 0x000a, 0x3529: 0x000a,
+ 0x352a: 0x000a, 0x352b: 0x000a, 0x352c: 0x000a, 0x352d: 0x000a, 0x352e: 0x000a, 0x352f: 0x000a,
+ 0x3530: 0x000a, 0x3531: 0x000a, 0x3532: 0x000a, 0x3533: 0x000a, 0x3534: 0x000a, 0x3535: 0x000a,
+ // Block 0xd5, offset 0x3540
+ 0x3540: 0x0002, 0x3541: 0x0002, 0x3542: 0x0002, 0x3543: 0x0002, 0x3544: 0x0002, 0x3545: 0x0002,
+ 0x3546: 0x0002, 0x3547: 0x0002, 0x3548: 0x0002, 0x3549: 0x0002, 0x354a: 0x0002, 0x354b: 0x000a,
+ 0x354c: 0x000a,
+ // Block 0xd6, offset 0x3580
+ 0x35aa: 0x000a, 0x35ab: 0x000a,
+ // Block 0xd7, offset 0x35c0
+ 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a,
+ 0x35e4: 0x000a, 0x35e5: 0x000a,
+ // Block 0xd8, offset 0x3600
+ 0x3600: 0x000a, 0x3601: 0x000a, 0x3602: 0x000a, 0x3603: 0x000a, 0x3604: 0x000a, 0x3605: 0x000a,
+ 0x3606: 0x000a, 0x3607: 0x000a, 0x3608: 0x000a, 0x3609: 0x000a, 0x360a: 0x000a, 0x360b: 0x000a,
+ 0x360c: 0x000a, 0x360d: 0x000a, 0x360e: 0x000a, 0x360f: 0x000a, 0x3610: 0x000a, 0x3611: 0x000a,
+ 0x3612: 0x000a, 0x3613: 0x000a, 0x3614: 0x000a,
+ 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a,
+ 0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, 0x3628: 0x000a, 0x3629: 0x000a,
+ 0x362a: 0x000a, 0x362b: 0x000a, 0x362c: 0x000a,
+ 0x3630: 0x000a, 0x3631: 0x000a, 0x3632: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a,
+ 0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a,
+ // Block 0xd9, offset 0x3640
+ 0x3640: 0x000a, 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a,
+ 0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a,
+ 0x364c: 0x000a, 0x364d: 0x000a, 0x364e: 0x000a, 0x364f: 0x000a, 0x3650: 0x000a, 0x3651: 0x000a,
+ 0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a,
+ // Block 0xda, offset 0x3680
+ 0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000a, 0x3683: 0x000a, 0x3684: 0x000a, 0x3685: 0x000a,
+ 0x3686: 0x000a, 0x3687: 0x000a, 0x3688: 0x000a, 0x3689: 0x000a, 0x368a: 0x000a, 0x368b: 0x000a,
+ 0x3690: 0x000a, 0x3691: 0x000a,
+ 0x3692: 0x000a, 0x3693: 0x000a, 0x3694: 0x000a, 0x3695: 0x000a, 0x3696: 0x000a, 0x3697: 0x000a,
+ 0x3698: 0x000a, 0x3699: 0x000a, 0x369a: 0x000a, 0x369b: 0x000a, 0x369c: 0x000a, 0x369d: 0x000a,
+ 0x369e: 0x000a, 0x369f: 0x000a, 0x36a0: 0x000a, 0x36a1: 0x000a, 0x36a2: 0x000a, 0x36a3: 0x000a,
+ 0x36a4: 0x000a, 0x36a5: 0x000a, 0x36a6: 0x000a, 0x36a7: 0x000a, 0x36a8: 0x000a, 0x36a9: 0x000a,
+ 0x36aa: 0x000a, 0x36ab: 0x000a, 0x36ac: 0x000a, 0x36ad: 0x000a, 0x36ae: 0x000a, 0x36af: 0x000a,
+ 0x36b0: 0x000a, 0x36b1: 0x000a, 0x36b2: 0x000a, 0x36b3: 0x000a, 0x36b4: 0x000a, 0x36b5: 0x000a,
+ 0x36b6: 0x000a, 0x36b7: 0x000a, 0x36b8: 0x000a, 0x36b9: 0x000a, 0x36ba: 0x000a, 0x36bb: 0x000a,
+ 0x36bc: 0x000a, 0x36bd: 0x000a, 0x36be: 0x000a, 0x36bf: 0x000a,
+ // Block 0xdb, offset 0x36c0
+ 0x36c0: 0x000a, 0x36c1: 0x000a, 0x36c2: 0x000a, 0x36c3: 0x000a, 0x36c4: 0x000a, 0x36c5: 0x000a,
+ 0x36c6: 0x000a, 0x36c7: 0x000a,
+ 0x36d0: 0x000a, 0x36d1: 0x000a,
+ 0x36d2: 0x000a, 0x36d3: 0x000a, 0x36d4: 0x000a, 0x36d5: 0x000a, 0x36d6: 0x000a, 0x36d7: 0x000a,
+ 0x36d8: 0x000a, 0x36d9: 0x000a,
+ 0x36e0: 0x000a, 0x36e1: 0x000a, 0x36e2: 0x000a, 0x36e3: 0x000a,
+ 0x36e4: 0x000a, 0x36e5: 0x000a, 0x36e6: 0x000a, 0x36e7: 0x000a, 0x36e8: 0x000a, 0x36e9: 0x000a,
+ 0x36ea: 0x000a, 0x36eb: 0x000a, 0x36ec: 0x000a, 0x36ed: 0x000a, 0x36ee: 0x000a, 0x36ef: 0x000a,
+ 0x36f0: 0x000a, 0x36f1: 0x000a, 0x36f2: 0x000a, 0x36f3: 0x000a, 0x36f4: 0x000a, 0x36f5: 0x000a,
+ 0x36f6: 0x000a, 0x36f7: 0x000a, 0x36f8: 0x000a, 0x36f9: 0x000a, 0x36fa: 0x000a, 0x36fb: 0x000a,
+ 0x36fc: 0x000a, 0x36fd: 0x000a, 0x36fe: 0x000a, 0x36ff: 0x000a,
+ // Block 0xdc, offset 0x3700
+ 0x3700: 0x000a, 0x3701: 0x000a, 0x3702: 0x000a, 0x3703: 0x000a, 0x3704: 0x000a, 0x3705: 0x000a,
+ 0x3706: 0x000a, 0x3707: 0x000a,
+ 0x3710: 0x000a, 0x3711: 0x000a,
+ 0x3712: 0x000a, 0x3713: 0x000a, 0x3714: 0x000a, 0x3715: 0x000a, 0x3716: 0x000a, 0x3717: 0x000a,
+ 0x3718: 0x000a, 0x3719: 0x000a, 0x371a: 0x000a, 0x371b: 0x000a, 0x371c: 0x000a, 0x371d: 0x000a,
+ 0x371e: 0x000a, 0x371f: 0x000a, 0x3720: 0x000a, 0x3721: 0x000a, 0x3722: 0x000a, 0x3723: 0x000a,
+ 0x3724: 0x000a, 0x3725: 0x000a, 0x3726: 0x000a, 0x3727: 0x000a, 0x3728: 0x000a, 0x3729: 0x000a,
+ 0x372a: 0x000a, 0x372b: 0x000a, 0x372c: 0x000a, 0x372d: 0x000a,
+ // Block 0xdd, offset 0x3740
+ 0x3740: 0x000a, 0x3741: 0x000a, 0x3742: 0x000a, 0x3743: 0x000a, 0x3744: 0x000a, 0x3745: 0x000a,
+ 0x3746: 0x000a, 0x3747: 0x000a, 0x3748: 0x000a, 0x3749: 0x000a, 0x374a: 0x000a, 0x374b: 0x000a,
+ 0x3750: 0x000a, 0x3751: 0x000a,
+ 0x3752: 0x000a, 0x3753: 0x000a, 0x3754: 0x000a, 0x3755: 0x000a, 0x3756: 0x000a, 0x3757: 0x000a,
+ 0x3758: 0x000a, 0x3759: 0x000a, 0x375a: 0x000a, 0x375b: 0x000a, 0x375c: 0x000a, 0x375d: 0x000a,
+ 0x375e: 0x000a, 0x375f: 0x000a, 0x3760: 0x000a, 0x3761: 0x000a, 0x3762: 0x000a, 0x3763: 0x000a,
+ 0x3764: 0x000a, 0x3765: 0x000a, 0x3766: 0x000a, 0x3767: 0x000a, 0x3768: 0x000a, 0x3769: 0x000a,
+ 0x376a: 0x000a, 0x376b: 0x000a, 0x376c: 0x000a, 0x376d: 0x000a, 0x376e: 0x000a, 0x376f: 0x000a,
+ 0x3770: 0x000a, 0x3771: 0x000a, 0x3772: 0x000a, 0x3773: 0x000a, 0x3774: 0x000a, 0x3775: 0x000a,
+ 0x3776: 0x000a, 0x3777: 0x000a, 0x3778: 0x000a, 0x3779: 0x000a, 0x377a: 0x000a, 0x377b: 0x000a,
+ 0x377c: 0x000a, 0x377d: 0x000a, 0x377e: 0x000a,
+ // Block 0xde, offset 0x3780
+ 0x3780: 0x000a, 0x3781: 0x000a, 0x3782: 0x000a, 0x3783: 0x000a, 0x3784: 0x000a, 0x3785: 0x000a,
+ 0x3786: 0x000a, 0x3787: 0x000a, 0x3788: 0x000a, 0x3789: 0x000a, 0x378a: 0x000a, 0x378b: 0x000a,
+ 0x378c: 0x000a, 0x3790: 0x000a, 0x3791: 0x000a,
+ 0x3792: 0x000a, 0x3793: 0x000a, 0x3794: 0x000a, 0x3795: 0x000a, 0x3796: 0x000a, 0x3797: 0x000a,
+ 0x3798: 0x000a, 0x3799: 0x000a, 0x379a: 0x000a, 0x379b: 0x000a, 0x379c: 0x000a, 0x379d: 0x000a,
+ 0x379e: 0x000a, 0x379f: 0x000a, 0x37a0: 0x000a, 0x37a1: 0x000a, 0x37a2: 0x000a, 0x37a3: 0x000a,
+ 0x37a4: 0x000a, 0x37a5: 0x000a, 0x37a6: 0x000a, 0x37a7: 0x000a, 0x37a8: 0x000a, 0x37a9: 0x000a,
+ 0x37aa: 0x000a, 0x37ab: 0x000a,
+ // Block 0xdf, offset 0x37c0
+ 0x37c0: 0x000a, 0x37c1: 0x000a, 0x37c2: 0x000a, 0x37c3: 0x000a, 0x37c4: 0x000a, 0x37c5: 0x000a,
+ 0x37c6: 0x000a, 0x37c7: 0x000a, 0x37c8: 0x000a, 0x37c9: 0x000a, 0x37ca: 0x000a, 0x37cb: 0x000a,
+ 0x37cc: 0x000a, 0x37cd: 0x000a, 0x37ce: 0x000a, 0x37cf: 0x000a, 0x37d0: 0x000a, 0x37d1: 0x000a,
+ 0x37d2: 0x000a, 0x37d3: 0x000a, 0x37d4: 0x000a, 0x37d5: 0x000a, 0x37d6: 0x000a, 0x37d7: 0x000a,
+ // Block 0xe0, offset 0x3800
+ 0x3800: 0x000a,
+ 0x3810: 0x000a, 0x3811: 0x000a,
+ 0x3812: 0x000a, 0x3813: 0x000a, 0x3814: 0x000a, 0x3815: 0x000a, 0x3816: 0x000a, 0x3817: 0x000a,
+ 0x3818: 0x000a, 0x3819: 0x000a, 0x381a: 0x000a, 0x381b: 0x000a, 0x381c: 0x000a, 0x381d: 0x000a,
+ 0x381e: 0x000a, 0x381f: 0x000a, 0x3820: 0x000a, 0x3821: 0x000a, 0x3822: 0x000a, 0x3823: 0x000a,
+ 0x3824: 0x000a, 0x3825: 0x000a, 0x3826: 0x000a,
+ // Block 0xe1, offset 0x3840
+ 0x387e: 0x000b, 0x387f: 0x000b,
+ // Block 0xe2, offset 0x3880
+ 0x3880: 0x000b, 0x3881: 0x000b, 0x3882: 0x000b, 0x3883: 0x000b, 0x3884: 0x000b, 0x3885: 0x000b,
+ 0x3886: 0x000b, 0x3887: 0x000b, 0x3888: 0x000b, 0x3889: 0x000b, 0x388a: 0x000b, 0x388b: 0x000b,
+ 0x388c: 0x000b, 0x388d: 0x000b, 0x388e: 0x000b, 0x388f: 0x000b, 0x3890: 0x000b, 0x3891: 0x000b,
+ 0x3892: 0x000b, 0x3893: 0x000b, 0x3894: 0x000b, 0x3895: 0x000b, 0x3896: 0x000b, 0x3897: 0x000b,
+ 0x3898: 0x000b, 0x3899: 0x000b, 0x389a: 0x000b, 0x389b: 0x000b, 0x389c: 0x000b, 0x389d: 0x000b,
+ 0x389e: 0x000b, 0x389f: 0x000b, 0x38a0: 0x000b, 0x38a1: 0x000b, 0x38a2: 0x000b, 0x38a3: 0x000b,
+ 0x38a4: 0x000b, 0x38a5: 0x000b, 0x38a6: 0x000b, 0x38a7: 0x000b, 0x38a8: 0x000b, 0x38a9: 0x000b,
+ 0x38aa: 0x000b, 0x38ab: 0x000b, 0x38ac: 0x000b, 0x38ad: 0x000b, 0x38ae: 0x000b, 0x38af: 0x000b,
+ 0x38b0: 0x000b, 0x38b1: 0x000b, 0x38b2: 0x000b, 0x38b3: 0x000b, 0x38b4: 0x000b, 0x38b5: 0x000b,
+ 0x38b6: 0x000b, 0x38b7: 0x000b, 0x38b8: 0x000b, 0x38b9: 0x000b, 0x38ba: 0x000b, 0x38bb: 0x000b,
+ 0x38bc: 0x000b, 0x38bd: 0x000b, 0x38be: 0x000b, 0x38bf: 0x000b,
+ // Block 0xe3, offset 0x38c0
+ 0x38c0: 0x000c, 0x38c1: 0x000c, 0x38c2: 0x000c, 0x38c3: 0x000c, 0x38c4: 0x000c, 0x38c5: 0x000c,
+ 0x38c6: 0x000c, 0x38c7: 0x000c, 0x38c8: 0x000c, 0x38c9: 0x000c, 0x38ca: 0x000c, 0x38cb: 0x000c,
+ 0x38cc: 0x000c, 0x38cd: 0x000c, 0x38ce: 0x000c, 0x38cf: 0x000c, 0x38d0: 0x000c, 0x38d1: 0x000c,
+ 0x38d2: 0x000c, 0x38d3: 0x000c, 0x38d4: 0x000c, 0x38d5: 0x000c, 0x38d6: 0x000c, 0x38d7: 0x000c,
+ 0x38d8: 0x000c, 0x38d9: 0x000c, 0x38da: 0x000c, 0x38db: 0x000c, 0x38dc: 0x000c, 0x38dd: 0x000c,
+ 0x38de: 0x000c, 0x38df: 0x000c, 0x38e0: 0x000c, 0x38e1: 0x000c, 0x38e2: 0x000c, 0x38e3: 0x000c,
+ 0x38e4: 0x000c, 0x38e5: 0x000c, 0x38e6: 0x000c, 0x38e7: 0x000c, 0x38e8: 0x000c, 0x38e9: 0x000c,
+ 0x38ea: 0x000c, 0x38eb: 0x000c, 0x38ec: 0x000c, 0x38ed: 0x000c, 0x38ee: 0x000c, 0x38ef: 0x000c,
+ 0x38f0: 0x000b, 0x38f1: 0x000b, 0x38f2: 0x000b, 0x38f3: 0x000b, 0x38f4: 0x000b, 0x38f5: 0x000b,
+ 0x38f6: 0x000b, 0x38f7: 0x000b, 0x38f8: 0x000b, 0x38f9: 0x000b, 0x38fa: 0x000b, 0x38fb: 0x000b,
+ 0x38fc: 0x000b, 0x38fd: 0x000b, 0x38fe: 0x000b, 0x38ff: 0x000b,
+}
+
+// bidiIndex: 24 blocks, 1536 entries, 1536 bytes
+// Block 0 is the zero block.
+var bidiIndex = [1536]uint8{
+ // Block 0x0, offset 0x0
+ // Block 0x1, offset 0x40
+ // Block 0x2, offset 0x80
+ // Block 0x3, offset 0xc0
+ 0xc2: 0x01, 0xc3: 0x02,
+ 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08,
+ 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b,
+ 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13,
+ 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06,
+ 0xea: 0x07, 0xef: 0x08,
+ 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15,
+ // Block 0x4, offset 0x100
+ 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b,
+ 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22,
+ 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28,
+ 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30,
+ // Block 0x5, offset 0x140
+ 0x140: 0x31, 0x141: 0x32, 0x142: 0x33,
+ 0x14d: 0x34, 0x14e: 0x35,
+ 0x150: 0x36,
+ 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b,
+ 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40,
+ 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47,
+ 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a,
+ 0x17e: 0x4b, 0x17f: 0x4c,
+ // Block 0x6, offset 0x180
+ 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54,
+ 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x54,
+ 0x190: 0x59, 0x191: 0x5a, 0x192: 0x5b, 0x193: 0x5c, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54,
+ 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5d, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5e, 0x19e: 0x54, 0x19f: 0x5f,
+ 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x60, 0x1a7: 0x61,
+ 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x62, 0x1ae: 0x63, 0x1af: 0x64,
+ 0x1b3: 0x65, 0x1b5: 0x66, 0x1b7: 0x67,
+ 0x1b8: 0x68, 0x1b9: 0x69, 0x1ba: 0x6a, 0x1bb: 0x6b, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6c,
+ // Block 0x7, offset 0x1c0
+ 0x1c0: 0x6d, 0x1c2: 0x6e, 0x1c3: 0x6f, 0x1c7: 0x70,
+ 0x1c8: 0x71, 0x1c9: 0x72, 0x1ca: 0x73, 0x1cb: 0x74, 0x1cd: 0x75, 0x1cf: 0x76,
+ // Block 0x8, offset 0x200
+ 0x237: 0x54,
+ // Block 0x9, offset 0x240
+ 0x252: 0x77, 0x253: 0x78,
+ 0x258: 0x79, 0x259: 0x7a, 0x25a: 0x7b, 0x25b: 0x7c, 0x25c: 0x7d, 0x25e: 0x7e,
+ 0x260: 0x7f, 0x261: 0x80, 0x263: 0x81, 0x264: 0x82, 0x265: 0x83, 0x266: 0x84, 0x267: 0x85,
+ 0x268: 0x86, 0x269: 0x87, 0x26a: 0x88, 0x26b: 0x89, 0x26f: 0x8a,
+ // Block 0xa, offset 0x280
+ 0x2ac: 0x8b, 0x2ad: 0x8c, 0x2ae: 0x0e, 0x2af: 0x0e,
+ 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8d, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8e,
+ 0x2b8: 0x8f, 0x2b9: 0x90, 0x2ba: 0x0e, 0x2bb: 0x91, 0x2bc: 0x92, 0x2bd: 0x93, 0x2bf: 0x94,
+ // Block 0xb, offset 0x2c0
+ 0x2c4: 0x95, 0x2c5: 0x54, 0x2c6: 0x96, 0x2c7: 0x97,
+ 0x2cb: 0x98, 0x2cd: 0x99,
+ 0x2e0: 0x9a, 0x2e1: 0x9a, 0x2e2: 0x9a, 0x2e3: 0x9a, 0x2e4: 0x9b, 0x2e5: 0x9a, 0x2e6: 0x9a, 0x2e7: 0x9a,
+ 0x2e8: 0x9c, 0x2e9: 0x9a, 0x2ea: 0x9a, 0x2eb: 0x9d, 0x2ec: 0x9e, 0x2ed: 0x9a, 0x2ee: 0x9a, 0x2ef: 0x9a,
+ 0x2f0: 0x9a, 0x2f1: 0x9a, 0x2f2: 0x9a, 0x2f3: 0x9a, 0x2f4: 0x9a, 0x2f5: 0x9a, 0x2f6: 0x9a, 0x2f7: 0x9a,
+ 0x2f8: 0x9a, 0x2f9: 0x9f, 0x2fa: 0x9a, 0x2fb: 0x9a, 0x2fc: 0x9a, 0x2fd: 0x9a, 0x2fe: 0x9a, 0x2ff: 0x9a,
+ // Block 0xc, offset 0x300
+ 0x300: 0xa0, 0x301: 0xa1, 0x302: 0xa2, 0x304: 0xa3, 0x305: 0xa4, 0x306: 0xa5, 0x307: 0xa6,
+ 0x308: 0xa7, 0x30b: 0xa8, 0x30c: 0xa9, 0x30d: 0xaa,
+ 0x310: 0xab, 0x311: 0xac, 0x312: 0xad, 0x313: 0xae, 0x316: 0xaf, 0x317: 0xb0,
+ 0x318: 0xb1, 0x319: 0xb2, 0x31a: 0xb3, 0x31c: 0xb4,
+ 0x328: 0xb5, 0x329: 0xb6, 0x32a: 0xb7,
+ 0x330: 0xb8, 0x332: 0xb9, 0x334: 0xba, 0x335: 0xbb,
+ // Block 0xd, offset 0x340
+ 0x36b: 0xbc, 0x36c: 0xbd,
+ 0x37e: 0xbe,
+ // Block 0xe, offset 0x380
+ 0x3b2: 0xbf,
+ // Block 0xf, offset 0x3c0
+ 0x3c5: 0xc0, 0x3c6: 0xc1,
+ 0x3c8: 0x54, 0x3c9: 0xc2, 0x3cc: 0x54, 0x3cd: 0xc3,
+ 0x3db: 0xc4, 0x3dc: 0xc5, 0x3dd: 0xc6, 0x3de: 0xc7, 0x3df: 0xc8,
+ 0x3e8: 0xc9, 0x3e9: 0xca, 0x3ea: 0xcb,
+ // Block 0x10, offset 0x400
+ 0x400: 0xcc,
+ 0x420: 0x9a, 0x421: 0x9a, 0x422: 0x9a, 0x423: 0xcd, 0x424: 0x9a, 0x425: 0xce, 0x426: 0x9a, 0x427: 0x9a,
+ 0x428: 0x9a, 0x429: 0x9a, 0x42a: 0x9a, 0x42b: 0x9a, 0x42c: 0x9a, 0x42d: 0x9a, 0x42e: 0x9a, 0x42f: 0x9a,
+ 0x430: 0x9a, 0x431: 0x9a, 0x432: 0x9a, 0x433: 0x9a, 0x434: 0x9a, 0x435: 0x9a, 0x436: 0x9a, 0x437: 0x9a,
+ 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xcf, 0x43c: 0x9a, 0x43d: 0x9a, 0x43e: 0x9a, 0x43f: 0x9a,
+ // Block 0x11, offset 0x440
+ 0x440: 0xd0, 0x441: 0x54, 0x442: 0xd1, 0x443: 0xd2, 0x444: 0xd3, 0x445: 0xd4,
+ 0x449: 0xd5, 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54,
+ 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54,
+ 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xd6, 0x45c: 0x54, 0x45d: 0x6b, 0x45e: 0x54, 0x45f: 0xd7,
+ 0x460: 0xd8, 0x461: 0xd9, 0x462: 0xda, 0x464: 0xdb, 0x465: 0xdc, 0x466: 0xdd, 0x467: 0xde,
+ 0x47f: 0xdf,
+ // Block 0x12, offset 0x480
+ 0x4bf: 0xdf,
+ // Block 0x13, offset 0x4c0
+ 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b,
+ 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f,
+ 0x4ef: 0x10,
+ 0x4ff: 0x10,
+ // Block 0x14, offset 0x500
+ 0x50f: 0x10,
+ 0x51f: 0x10,
+ 0x52f: 0x10,
+ 0x53f: 0x10,
+ // Block 0x15, offset 0x540
+ 0x540: 0xe0, 0x541: 0xe0, 0x542: 0xe0, 0x543: 0xe0, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xe1,
+ 0x548: 0xe0, 0x549: 0xe0, 0x54a: 0xe0, 0x54b: 0xe0, 0x54c: 0xe0, 0x54d: 0xe0, 0x54e: 0xe0, 0x54f: 0xe0,
+ 0x550: 0xe0, 0x551: 0xe0, 0x552: 0xe0, 0x553: 0xe0, 0x554: 0xe0, 0x555: 0xe0, 0x556: 0xe0, 0x557: 0xe0,
+ 0x558: 0xe0, 0x559: 0xe0, 0x55a: 0xe0, 0x55b: 0xe0, 0x55c: 0xe0, 0x55d: 0xe0, 0x55e: 0xe0, 0x55f: 0xe0,
+ 0x560: 0xe0, 0x561: 0xe0, 0x562: 0xe0, 0x563: 0xe0, 0x564: 0xe0, 0x565: 0xe0, 0x566: 0xe0, 0x567: 0xe0,
+ 0x568: 0xe0, 0x569: 0xe0, 0x56a: 0xe0, 0x56b: 0xe0, 0x56c: 0xe0, 0x56d: 0xe0, 0x56e: 0xe0, 0x56f: 0xe0,
+ 0x570: 0xe0, 0x571: 0xe0, 0x572: 0xe0, 0x573: 0xe0, 0x574: 0xe0, 0x575: 0xe0, 0x576: 0xe0, 0x577: 0xe0,
+ 0x578: 0xe0, 0x579: 0xe0, 0x57a: 0xe0, 0x57b: 0xe0, 0x57c: 0xe0, 0x57d: 0xe0, 0x57e: 0xe0, 0x57f: 0xe0,
+ // Block 0x16, offset 0x580
+ 0x58f: 0x10,
+ 0x59f: 0x10,
+ 0x5a0: 0x13,
+ 0x5af: 0x10,
+ 0x5bf: 0x10,
+ // Block 0x17, offset 0x5c0
+ 0x5cf: 0x10,
+}
+
+// Total table size 16184 bytes (15KiB); checksum: F50EF68C
diff --git a/vendor/golang.org/x/text/unicode/bidi/tables.go b/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go
index 2d4dde07c..0ca0193eb 100644
--- a/vendor/golang.org/x/text/unicode/bidi/tables.go
+++ b/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go
@@ -1,4 +1,6 @@
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+// +build !go1.10
package bidi
diff --git a/vendor/golang.org/x/text/unicode/bidi/trieval.go b/vendor/golang.org/x/text/unicode/bidi/trieval.go
index bebd855ef..4c459c4b7 100644
--- a/vendor/golang.org/x/text/unicode/bidi/trieval.go
+++ b/vendor/golang.org/x/text/unicode/bidi/trieval.go
@@ -1,4 +1,4 @@
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
package bidi
diff --git a/vendor/golang.org/x/text/unicode/norm/composition.go b/vendor/golang.org/x/text/unicode/norm/composition.go
index d17b278ad..e2087bce5 100644
--- a/vendor/golang.org/x/text/unicode/norm/composition.go
+++ b/vendor/golang.org/x/text/unicode/norm/composition.go
@@ -33,17 +33,9 @@ const (
// streamSafe implements the policy of when a CGJ should be inserted.
type streamSafe uint8
-// mkStreamSafe is a shorthand for declaring a streamSafe var and calling
-// first on it.
-func mkStreamSafe(p Properties) streamSafe {
- return streamSafe(p.nTrailingNonStarters())
-}
-
-// first inserts the first rune of a segment.
+// first inserts the first rune of a segment. It is a faster version of next if
+// it is known p represents the first rune in a segment.
func (ss *streamSafe) first(p Properties) {
- if *ss != 0 {
- panic("!= 0")
- }
*ss = streamSafe(p.nTrailingNonStarters())
}
@@ -66,7 +58,7 @@ func (ss *streamSafe) next(p Properties) ssState {
// be a non-starter. Note that it always hold that if nLead > 0 then
// nLead == nTrail.
if n == 0 {
- *ss = 0
+ *ss = streamSafe(p.nTrailingNonStarters())
return ssStarter
}
return ssSuccess
@@ -142,7 +134,6 @@ func (rb *reorderBuffer) setFlusher(out []byte, f func(*reorderBuffer) bool) {
func (rb *reorderBuffer) reset() {
rb.nrune = 0
rb.nbyte = 0
- rb.ss = 0
}
func (rb *reorderBuffer) doFlush() bool {
@@ -257,6 +248,9 @@ func (rb *reorderBuffer) insertUnsafe(src input, i int, info Properties) {
// It flushes the buffer on each new segment start.
func (rb *reorderBuffer) insertDecomposed(dcomp []byte) insertErr {
rb.tmpBytes.setBytes(dcomp)
+ // As the streamSafe accounting already handles the counting for modifiers,
+ // we don't have to call next. However, we do need to keep the accounting
+ // intact when flushing the buffer.
for i := 0; i < len(dcomp); {
info := rb.f.info(rb.tmpBytes, i)
if info.BoundaryBefore() && rb.nrune > 0 && !rb.doFlush() {
@@ -413,7 +407,7 @@ func decomposeHangul(buf []byte, r rune) int {
// decomposeHangul algorithmically decomposes a Hangul rune into
// its Jamo components.
-// See http://unicode.org/reports/tr15/#Hangul for details on decomposing Hangul.
+// See https://unicode.org/reports/tr15/#Hangul for details on decomposing Hangul.
func (rb *reorderBuffer) decomposeHangul(r rune) {
r -= hangulBase
x := r % jamoTCount
@@ -426,7 +420,7 @@ func (rb *reorderBuffer) decomposeHangul(r rune) {
}
// combineHangul algorithmically combines Jamo character components into Hangul.
-// See http://unicode.org/reports/tr15/#Hangul for details on combining Hangul.
+// See https://unicode.org/reports/tr15/#Hangul for details on combining Hangul.
func (rb *reorderBuffer) combineHangul(s, i, k int) {
b := rb.rune[:]
bn := rb.nrune
@@ -467,6 +461,10 @@ func (rb *reorderBuffer) combineHangul(s, i, k int) {
// It should only be used to recompose a single segment, as it will not
// handle alternations between Hangul and non-Hangul characters correctly.
func (rb *reorderBuffer) compose() {
+ // Lazily load the map used by the combine func below, but do
+ // it outside of the loop.
+ recompMapOnce.Do(buildRecompMap)
+
// UAX #15, section X5 , including Corrigendum #5
// "In any character sequence beginning with starter S, a character C is
// blocked from S if and only if there is some character B between S
diff --git a/vendor/golang.org/x/text/unicode/norm/forminfo.go b/vendor/golang.org/x/text/unicode/norm/forminfo.go
index 15a67c653..526c7033a 100644
--- a/vendor/golang.org/x/text/unicode/norm/forminfo.go
+++ b/vendor/golang.org/x/text/unicode/norm/forminfo.go
@@ -4,13 +4,15 @@
package norm
+import "encoding/binary"
+
// This file contains Form-specific logic and wrappers for data in tables.go.
// Rune info is stored in a separate trie per composing form. A composing form
// and its corresponding decomposing form share the same trie. Each trie maps
// a rune to a uint16. The values take two forms. For v >= 0x8000:
// bits
-// 15: 1 (inverse of NFD_QD bit of qcInfo)
+// 15: 1 (inverse of NFD_QC bit of qcInfo)
// 13..7: qcInfo (see below). isYesD is always true (no decompostion).
// 6..0: ccc (compressed CCC value).
// For v < 0x8000, the respective rune has a decomposition and v is an index
@@ -56,28 +58,31 @@ type formInfo struct {
nextMain iterFunc
}
-var formTable []*formInfo
-
-func init() {
- formTable = make([]*formInfo, 4)
-
- for i := range formTable {
- f := &formInfo{}
- formTable[i] = f
- f.form = Form(i)
- if Form(i) == NFKD || Form(i) == NFKC {
- f.compatibility = true
- f.info = lookupInfoNFKC
- } else {
- f.info = lookupInfoNFC
- }
- f.nextMain = nextDecomposed
- if Form(i) == NFC || Form(i) == NFKC {
- f.nextMain = nextComposed
- f.composing = true
- }
- }
-}
+var formTable = []*formInfo{{
+ form: NFC,
+ composing: true,
+ compatibility: false,
+ info: lookupInfoNFC,
+ nextMain: nextComposed,
+}, {
+ form: NFD,
+ composing: false,
+ compatibility: false,
+ info: lookupInfoNFC,
+ nextMain: nextDecomposed,
+}, {
+ form: NFKC,
+ composing: true,
+ compatibility: true,
+ info: lookupInfoNFKC,
+ nextMain: nextComposed,
+}, {
+ form: NFKD,
+ composing: false,
+ compatibility: true,
+ info: lookupInfoNFKC,
+ nextMain: nextDecomposed,
+}}
// We do not distinguish between boundaries for NFC, NFD, etc. to avoid
// unexpected behavior for the user. For example, in NFD, there is a boundary
@@ -175,6 +180,17 @@ func (p Properties) TrailCCC() uint8 {
return ccc[p.tccc]
}
+func buildRecompMap() {
+ recompMap = make(map[uint32]rune, len(recompMapPacked)/8)
+ var buf [8]byte
+ for i := 0; i < len(recompMapPacked); i += 8 {
+ copy(buf[:], recompMapPacked[i:i+8])
+ key := binary.BigEndian.Uint32(buf[:4])
+ val := binary.BigEndian.Uint32(buf[4:])
+ recompMap[key] = rune(val)
+ }
+}
+
// Recomposition
// We use 32-bit keys instead of 64-bit for the two codepoint keys.
// This clips off the bits of three entries, but we know this will not
@@ -183,8 +199,14 @@ func (p Properties) TrailCCC() uint8 {
// Note that the recomposition map for NFC and NFKC are identical.
// combine returns the combined rune or 0 if it doesn't exist.
+//
+// The caller is responsible for calling
+// recompMapOnce.Do(buildRecompMap) sometime before this is called.
func combine(a, b rune) rune {
key := uint32(uint16(a))<<16 + uint32(uint16(b))
+ if recompMap == nil {
+ panic("caller error") // see func comment
+ }
return recompMap[key]
}
diff --git a/vendor/golang.org/x/text/unicode/norm/input.go b/vendor/golang.org/x/text/unicode/norm/input.go
index 045d4ccce..479e35bc2 100644
--- a/vendor/golang.org/x/text/unicode/norm/input.go
+++ b/vendor/golang.org/x/text/unicode/norm/input.go
@@ -90,16 +90,20 @@ func (in *input) charinfoNFKC(p int) (uint16, int) {
}
func (in *input) hangul(p int) (r rune) {
+ var size int
if in.bytes == nil {
if !isHangulString(in.str[p:]) {
return 0
}
- r, _ = utf8.DecodeRuneInString(in.str[p:])
+ r, size = utf8.DecodeRuneInString(in.str[p:])
} else {
if !isHangul(in.bytes[p:]) {
return 0
}
- r, _ = utf8.DecodeRune(in.bytes[p:])
+ r, size = utf8.DecodeRune(in.bytes[p:])
+ }
+ if size != hangulUTF8Size {
+ return 0
}
return r
}
diff --git a/vendor/golang.org/x/text/unicode/norm/iter.go b/vendor/golang.org/x/text/unicode/norm/iter.go
index 0a42a72de..417c6b268 100644
--- a/vendor/golang.org/x/text/unicode/norm/iter.go
+++ b/vendor/golang.org/x/text/unicode/norm/iter.go
@@ -41,6 +41,7 @@ func (i *Iter) Init(f Form, src []byte) {
i.next = i.rb.f.nextMain
i.asciiF = nextASCIIBytes
i.info = i.rb.f.info(i.rb.src, i.p)
+ i.rb.ss.first(i.info)
}
// InitString initializes i to iterate over src after normalizing it to Form f.
@@ -56,11 +57,12 @@ func (i *Iter) InitString(f Form, src string) {
i.next = i.rb.f.nextMain
i.asciiF = nextASCIIString
i.info = i.rb.f.info(i.rb.src, i.p)
+ i.rb.ss.first(i.info)
}
// Seek sets the segment to be returned by the next call to Next to start
// at position p. It is the responsibility of the caller to set p to the
-// start of a UTF8 rune.
+// start of a segment.
func (i *Iter) Seek(offset int64, whence int) (int64, error) {
var abs int64
switch whence {
@@ -84,6 +86,7 @@ func (i *Iter) Seek(offset int64, whence int) (int64, error) {
i.multiSeg = nil
i.next = i.rb.f.nextMain
i.info = i.rb.f.info(i.rb.src, i.p)
+ i.rb.ss.first(i.info)
return abs, nil
}
@@ -125,8 +128,9 @@ func (i *Iter) Next() []byte {
func nextASCIIBytes(i *Iter) []byte {
p := i.p + 1
if p >= i.rb.nsrc {
+ p0 := i.p
i.setDone()
- return i.rb.src.bytes[i.p:p]
+ return i.rb.src.bytes[p0:p]
}
if i.rb.src.bytes[p] < utf8.RuneSelf {
p0 := i.p
@@ -161,6 +165,7 @@ func nextHangul(i *Iter) []byte {
if next >= i.rb.nsrc {
i.setDone()
} else if i.rb.src.hangul(next) == 0 {
+ i.rb.ss.next(i.info)
i.info = i.rb.f.info(i.rb.src, i.p)
i.next = i.rb.f.nextMain
return i.next(i)
@@ -204,12 +209,10 @@ func nextMultiNorm(i *Iter) []byte {
if info.BoundaryBefore() {
i.rb.compose()
seg := i.buf[:i.rb.flushCopy(i.buf[:])]
- i.rb.ss.first(info)
i.rb.insertUnsafe(input{bytes: d}, j, info)
i.multiSeg = d[j+int(info.size):]
return seg
}
- i.rb.ss.next(info)
i.rb.insertUnsafe(input{bytes: d}, j, info)
j += int(info.size)
}
@@ -222,9 +225,9 @@ func nextMultiNorm(i *Iter) []byte {
func nextDecomposed(i *Iter) (next []byte) {
outp := 0
inCopyStart, outCopyStart := i.p, 0
- ss := mkStreamSafe(i.info)
for {
if sz := int(i.info.size); sz <= 1 {
+ i.rb.ss = 0
p := i.p
i.p++ // ASCII or illegal byte. Either way, advance by 1.
if i.p >= i.rb.nsrc {
@@ -243,6 +246,8 @@ func nextDecomposed(i *Iter) (next []byte) {
p := outp + len(d)
if outp > 0 {
i.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p)
+ // TODO: this condition should not be possible, but we leave it
+ // in for defensive purposes.
if p > len(i.buf) {
return i.buf[:outp]
}
@@ -266,7 +271,7 @@ func nextDecomposed(i *Iter) (next []byte) {
} else {
i.info = i.rb.f.info(i.rb.src, i.p)
}
- switch ss.next(i.info) {
+ switch i.rb.ss.next(i.info) {
case ssOverflow:
i.next = nextCGJDecompose
fallthrough
@@ -309,7 +314,7 @@ func nextDecomposed(i *Iter) (next []byte) {
}
prevCC := i.info.tccc
i.info = i.rb.f.info(i.rb.src, i.p)
- if v := ss.next(i.info); v == ssStarter {
+ if v := i.rb.ss.next(i.info); v == ssStarter {
break
} else if v == ssOverflow {
i.next = nextCGJDecompose
@@ -335,10 +340,6 @@ doNorm:
func doNormDecomposed(i *Iter) []byte {
for {
- if s := i.rb.ss.next(i.info); s == ssOverflow {
- i.next = nextCGJDecompose
- break
- }
i.rb.insertUnsafe(i.rb.src, i.p, i.info)
if i.p += int(i.info.size); i.p >= i.rb.nsrc {
i.setDone()
@@ -348,6 +349,10 @@ func doNormDecomposed(i *Iter) []byte {
if i.info.ccc == 0 {
break
}
+ if s := i.rb.ss.next(i.info); s == ssOverflow {
+ i.next = nextCGJDecompose
+ break
+ }
}
// new segment or too many combining characters: exit normalization
return i.buf[:i.rb.flushCopy(i.buf[:])]
@@ -357,6 +362,7 @@ func nextCGJDecompose(i *Iter) []byte {
i.rb.ss = 0
i.rb.insertCGJ()
i.next = nextDecomposed
+ i.rb.ss.first(i.info)
buf := doNormDecomposed(i)
return buf
}
@@ -365,7 +371,6 @@ func nextCGJDecompose(i *Iter) []byte {
func nextComposed(i *Iter) []byte {
outp, startp := 0, i.p
var prevCC uint8
- ss := mkStreamSafe(i.info)
for {
if !i.info.isYesC() {
goto doNorm
@@ -385,11 +390,12 @@ func nextComposed(i *Iter) []byte {
i.setDone()
break
} else if i.rb.src._byte(i.p) < utf8.RuneSelf {
+ i.rb.ss = 0
i.next = i.asciiF
break
}
i.info = i.rb.f.info(i.rb.src, i.p)
- if v := ss.next(i.info); v == ssStarter {
+ if v := i.rb.ss.next(i.info); v == ssStarter {
break
} else if v == ssOverflow {
i.next = nextCGJCompose
@@ -401,8 +407,10 @@ func nextComposed(i *Iter) []byte {
}
return i.returnSlice(startp, i.p)
doNorm:
+ // reset to start position
i.p = startp
i.info = i.rb.f.info(i.rb.src, i.p)
+ i.rb.ss.first(i.info)
if i.info.multiSegment() {
d := i.info.Decomposition()
info := i.rb.f.info(input{bytes: d}, 0)
diff --git a/vendor/golang.org/x/text/unicode/norm/normalize.go b/vendor/golang.org/x/text/unicode/norm/normalize.go
index bba8ce9f9..95efcf26e 100644
--- a/vendor/golang.org/x/text/unicode/norm/normalize.go
+++ b/vendor/golang.org/x/text/unicode/norm/normalize.go
@@ -2,8 +2,9 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+// Note: the file data_test.go that is generated should not be checked in.
//go:generate go run maketables.go triegen.go
-//go:generate go run maketables.go triegen.go -test
+//go:generate go test -tags test
// Package norm contains types and functions for normalizing Unicode strings.
package norm // import "golang.org/x/text/unicode/norm"
@@ -28,8 +29,8 @@ import (
// proceed independently on both sides:
// f(x) == append(f(x[0:n]), f(x[n:])...)
//
-// References: http://unicode.org/reports/tr15/ and
-// http://unicode.org/notes/tn5/.
+// References: https://unicode.org/reports/tr15/ and
+// https://unicode.org/notes/tn5/.
type Form int
const (
@@ -323,7 +324,6 @@ func (f *formInfo) quickSpan(src input, i, end int, atEOF bool) (n int, ok bool)
// have an overflow for runes that are starters (e.g. with U+FF9E).
switch ss.next(info) {
case ssStarter:
- ss.first(info)
lastSegStart = i
case ssOverflow:
return lastSegStart, false
@@ -440,6 +440,8 @@ func (f Form) nextBoundary(src input, nsrc int, atEOF bool) int {
}
return -1
}
+ // TODO: Using streamSafe to determine the boundary isn't the same as
+ // using BoundaryBefore. Determine which should be used.
if s := ss.next(info); s != ssSuccess {
return i
}
@@ -504,15 +506,14 @@ func decomposeSegment(rb *reorderBuffer, sp int, atEOF bool) int {
if info.size == 0 {
return 0
}
- if rb.nrune > 0 {
- if s := rb.ss.next(info); s == ssStarter {
- goto end
- } else if s == ssOverflow {
- rb.insertCGJ()
+ if s := rb.ss.next(info); s == ssStarter {
+ // TODO: this could be removed if we don't support merging.
+ if rb.nrune > 0 {
goto end
}
- } else {
- rb.ss.first(info)
+ } else if s == ssOverflow {
+ rb.insertCGJ()
+ goto end
}
if err := rb.insertFlush(rb.src, sp, info); err != iSuccess {
return int(err)
diff --git a/vendor/golang.org/x/text/unicode/norm/readwriter.go b/vendor/golang.org/x/text/unicode/norm/readwriter.go
index d926ee903..b38096f5c 100644
--- a/vendor/golang.org/x/text/unicode/norm/readwriter.go
+++ b/vendor/golang.org/x/text/unicode/norm/readwriter.go
@@ -60,8 +60,8 @@ func (w *normWriter) Close() error {
}
// Writer returns a new writer that implements Write(b)
-// by writing f(b) to w. The returned writer may use an
-// an internal buffer to maintain state across Write calls.
+// by writing f(b) to w. The returned writer may use an
+// internal buffer to maintain state across Write calls.
// Calling its Close method writes any buffered data to w.
func (f Form) Writer(w io.Writer) io.WriteCloser {
wr := &normWriter{rb: reorderBuffer{}, w: w}
diff --git a/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go
new file mode 100644
index 000000000..c48a97b0c
--- /dev/null
+++ b/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go
@@ -0,0 +1,7657 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+// +build go1.10
+
+package norm
+
+import "sync"
+
+const (
+ // Version is the Unicode edition from which the tables are derived.
+ Version = "10.0.0"
+
+ // MaxTransformChunkSize indicates the maximum number of bytes that Transform
+ // may need to write atomically for any Form. Making a destination buffer at
+ // least this size ensures that Transform can always make progress and that
+ // the user does not need to grow the buffer on an ErrShortDst.
+ MaxTransformChunkSize = 35 + maxNonStarters*4
+)
+
+var ccc = [55]uint8{
+ 0, 1, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36,
+ 84, 91, 103, 107, 118, 122, 129, 130,
+ 132, 202, 214, 216, 218, 220, 222, 224,
+ 226, 228, 230, 232, 233, 234, 240,
+}
+
+const (
+ firstMulti = 0x186D
+ firstCCC = 0x2C9E
+ endMulti = 0x2F60
+ firstLeadingCCC = 0x49AE
+ firstCCCZeroExcept = 0x4A78
+ firstStarterWithNLead = 0x4A9F
+ lastDecomp = 0x4AA1
+ maxDecomp = 0x8000
+)
+
+// decomps: 19105 bytes
+var decomps = [...]byte{
+ // Bytes 0 - 3f
+ 0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41,
+ 0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41,
+ 0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41,
+ 0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41,
+ 0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41,
+ 0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41,
+ 0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41,
+ 0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41,
+ // Bytes 40 - 7f
+ 0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41,
+ 0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41,
+ 0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41,
+ 0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41,
+ 0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41,
+ 0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41,
+ 0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41,
+ 0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41,
+ // Bytes 80 - bf
+ 0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41,
+ 0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41,
+ 0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41,
+ 0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41,
+ 0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41,
+ 0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41,
+ 0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41,
+ 0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42,
+ // Bytes c0 - ff
+ 0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5,
+ 0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2,
+ 0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42,
+ 0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1,
+ 0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6,
+ 0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42,
+ 0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90,
+ 0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9,
+ // Bytes 100 - 13f
+ 0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42,
+ 0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F,
+ 0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9,
+ 0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42,
+ 0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB,
+ 0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9,
+ 0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42,
+ 0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5,
+ // Bytes 140 - 17f
+ 0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9,
+ 0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42,
+ 0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A,
+ 0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA,
+ 0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42,
+ 0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F,
+ 0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE,
+ 0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42,
+ // Bytes 180 - 1bf
+ 0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97,
+ 0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE,
+ 0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42,
+ 0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F,
+ 0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE,
+ 0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42,
+ 0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8,
+ 0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE,
+ // Bytes 1c0 - 1ff
+ 0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42,
+ 0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7,
+ 0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE,
+ 0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42,
+ 0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF,
+ 0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF,
+ 0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42,
+ 0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87,
+ // Bytes 200 - 23f
+ 0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF,
+ 0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42,
+ 0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90,
+ 0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7,
+ 0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42,
+ 0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2,
+ 0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8,
+ 0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42,
+ // Bytes 240 - 27f
+ 0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB,
+ 0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8,
+ 0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42,
+ 0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3,
+ 0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8,
+ 0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42,
+ 0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81,
+ 0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9,
+ // Bytes 280 - 2bf
+ 0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42,
+ 0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89,
+ 0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9,
+ 0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42,
+ 0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE,
+ 0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA,
+ 0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42,
+ 0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C,
+ // Bytes 2c0 - 2ff
+ 0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA,
+ 0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42,
+ 0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9,
+ 0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA,
+ 0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42,
+ 0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81,
+ 0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB,
+ 0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42,
+ // Bytes 300 - 33f
+ 0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90,
+ 0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43,
+ 0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43,
+ 0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43,
+ 0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43,
+ 0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43,
+ 0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43,
+ 0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43,
+ // Bytes 340 - 37f
+ 0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43,
+ 0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43,
+ 0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43,
+ 0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43,
+ 0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43,
+ 0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43,
+ 0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43,
+ 0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43,
+ // Bytes 380 - 3bf
+ 0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43,
+ 0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43,
+ 0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43,
+ 0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43,
+ 0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43,
+ 0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43,
+ 0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43,
+ 0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43,
+ // Bytes 3c0 - 3ff
+ 0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43,
+ 0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43,
+ 0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43,
+ 0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43,
+ 0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43,
+ 0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43,
+ 0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43,
+ 0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43,
+ // Bytes 400 - 43f
+ 0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43,
+ 0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43,
+ 0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43,
+ 0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43,
+ 0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43,
+ 0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43,
+ 0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43,
+ 0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43,
+ // Bytes 440 - 47f
+ 0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43,
+ 0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43,
+ 0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43,
+ 0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43,
+ 0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43,
+ 0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43,
+ 0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43,
+ 0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43,
+ // Bytes 480 - 4bf
+ 0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43,
+ 0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43,
+ 0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43,
+ 0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43,
+ 0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43,
+ 0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43,
+ 0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43,
+ 0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43,
+ // Bytes 4c0 - 4ff
+ 0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43,
+ 0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43,
+ 0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43,
+ 0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43,
+ 0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43,
+ 0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43,
+ 0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43,
+ 0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43,
+ // Bytes 500 - 53f
+ 0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43,
+ 0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43,
+ 0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43,
+ 0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43,
+ 0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43,
+ 0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43,
+ 0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43,
+ 0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43,
+ // Bytes 540 - 57f
+ 0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43,
+ 0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43,
+ 0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43,
+ 0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43,
+ 0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43,
+ 0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43,
+ 0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43,
+ 0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43,
+ // Bytes 580 - 5bf
+ 0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43,
+ 0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43,
+ 0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43,
+ 0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43,
+ 0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43,
+ 0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43,
+ 0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43,
+ 0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43,
+ // Bytes 5c0 - 5ff
+ 0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43,
+ 0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43,
+ 0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43,
+ 0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43,
+ 0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43,
+ 0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43,
+ 0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43,
+ 0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43,
+ // Bytes 600 - 63f
+ 0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43,
+ 0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43,
+ 0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43,
+ 0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43,
+ 0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43,
+ 0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43,
+ 0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43,
+ 0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43,
+ // Bytes 640 - 67f
+ 0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43,
+ 0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43,
+ 0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43,
+ 0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43,
+ 0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43,
+ 0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43,
+ 0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43,
+ 0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43,
+ // Bytes 680 - 6bf
+ 0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43,
+ 0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43,
+ 0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43,
+ 0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43,
+ 0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43,
+ 0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43,
+ 0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43,
+ 0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43,
+ // Bytes 6c0 - 6ff
+ 0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43,
+ 0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43,
+ 0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43,
+ 0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43,
+ 0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43,
+ 0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43,
+ 0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43,
+ 0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43,
+ // Bytes 700 - 73f
+ 0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43,
+ 0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43,
+ 0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43,
+ 0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43,
+ 0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43,
+ 0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43,
+ 0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43,
+ 0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43,
+ // Bytes 740 - 77f
+ 0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43,
+ 0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43,
+ 0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43,
+ 0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43,
+ 0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43,
+ 0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43,
+ 0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43,
+ 0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43,
+ // Bytes 780 - 7bf
+ 0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43,
+ 0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43,
+ 0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43,
+ 0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43,
+ 0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43,
+ 0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43,
+ 0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43,
+ 0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43,
+ // Bytes 7c0 - 7ff
+ 0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43,
+ 0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43,
+ 0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43,
+ 0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43,
+ 0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43,
+ 0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43,
+ 0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43,
+ 0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43,
+ // Bytes 800 - 83f
+ 0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43,
+ 0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43,
+ 0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43,
+ 0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43,
+ 0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43,
+ 0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43,
+ 0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43,
+ 0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43,
+ // Bytes 840 - 87f
+ 0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43,
+ 0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43,
+ 0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43,
+ 0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43,
+ 0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43,
+ 0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43,
+ 0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43,
+ 0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43,
+ // Bytes 880 - 8bf
+ 0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43,
+ 0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43,
+ 0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43,
+ 0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43,
+ 0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43,
+ 0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43,
+ 0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43,
+ 0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43,
+ // Bytes 8c0 - 8ff
+ 0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43,
+ 0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43,
+ 0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43,
+ 0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43,
+ 0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43,
+ 0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43,
+ 0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43,
+ 0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43,
+ // Bytes 900 - 93f
+ 0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43,
+ 0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43,
+ 0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43,
+ 0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43,
+ 0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43,
+ 0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43,
+ 0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43,
+ 0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43,
+ // Bytes 940 - 97f
+ 0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43,
+ 0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43,
+ 0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43,
+ 0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43,
+ 0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43,
+ 0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43,
+ 0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43,
+ 0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43,
+ // Bytes 980 - 9bf
+ 0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43,
+ 0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43,
+ 0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43,
+ 0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43,
+ 0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43,
+ 0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43,
+ 0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43,
+ 0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43,
+ // Bytes 9c0 - 9ff
+ 0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43,
+ 0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43,
+ 0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43,
+ 0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43,
+ 0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43,
+ 0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43,
+ 0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43,
+ 0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43,
+ // Bytes a00 - a3f
+ 0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43,
+ 0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43,
+ 0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43,
+ 0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43,
+ 0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43,
+ 0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43,
+ 0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43,
+ 0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43,
+ // Bytes a40 - a7f
+ 0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43,
+ 0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43,
+ 0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43,
+ 0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43,
+ 0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43,
+ 0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43,
+ 0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43,
+ 0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43,
+ // Bytes a80 - abf
+ 0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43,
+ 0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43,
+ 0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43,
+ 0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43,
+ 0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43,
+ 0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43,
+ 0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43,
+ 0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43,
+ // Bytes ac0 - aff
+ 0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43,
+ 0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43,
+ 0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43,
+ 0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43,
+ 0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43,
+ 0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43,
+ 0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43,
+ 0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43,
+ // Bytes b00 - b3f
+ 0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43,
+ 0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43,
+ 0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43,
+ 0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43,
+ 0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43,
+ 0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43,
+ 0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43,
+ 0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43,
+ // Bytes b40 - b7f
+ 0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43,
+ 0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43,
+ 0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43,
+ 0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43,
+ 0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43,
+ 0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43,
+ 0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43,
+ 0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43,
+ // Bytes b80 - bbf
+ 0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43,
+ 0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43,
+ 0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43,
+ 0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43,
+ 0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43,
+ 0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43,
+ 0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43,
+ 0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43,
+ // Bytes bc0 - bff
+ 0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43,
+ 0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43,
+ 0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43,
+ 0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43,
+ 0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43,
+ 0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43,
+ 0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43,
+ 0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43,
+ // Bytes c00 - c3f
+ 0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43,
+ 0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43,
+ 0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43,
+ 0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43,
+ 0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43,
+ 0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43,
+ 0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43,
+ 0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43,
+ // Bytes c40 - c7f
+ 0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43,
+ 0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43,
+ 0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43,
+ 0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43,
+ 0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43,
+ 0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43,
+ 0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43,
+ 0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43,
+ // Bytes c80 - cbf
+ 0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43,
+ 0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43,
+ 0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43,
+ 0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43,
+ 0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43,
+ 0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43,
+ 0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43,
+ 0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43,
+ // Bytes cc0 - cff
+ 0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43,
+ 0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43,
+ 0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43,
+ 0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43,
+ 0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43,
+ 0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43,
+ 0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43,
+ 0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43,
+ // Bytes d00 - d3f
+ 0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43,
+ 0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43,
+ 0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43,
+ 0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43,
+ 0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43,
+ 0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43,
+ 0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43,
+ 0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43,
+ // Bytes d40 - d7f
+ 0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43,
+ 0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43,
+ 0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43,
+ 0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43,
+ 0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43,
+ 0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43,
+ 0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43,
+ 0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43,
+ // Bytes d80 - dbf
+ 0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43,
+ 0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43,
+ 0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43,
+ 0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43,
+ 0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43,
+ 0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43,
+ 0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43,
+ 0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43,
+ // Bytes dc0 - dff
+ 0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43,
+ 0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43,
+ 0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43,
+ 0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43,
+ 0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43,
+ 0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43,
+ 0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43,
+ 0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43,
+ // Bytes e00 - e3f
+ 0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43,
+ 0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43,
+ 0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43,
+ 0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43,
+ 0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43,
+ 0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43,
+ 0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43,
+ 0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43,
+ // Bytes e40 - e7f
+ 0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43,
+ 0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43,
+ 0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43,
+ 0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43,
+ 0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43,
+ 0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43,
+ 0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43,
+ 0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43,
+ // Bytes e80 - ebf
+ 0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43,
+ 0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43,
+ 0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43,
+ 0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43,
+ 0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43,
+ 0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43,
+ 0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43,
+ 0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43,
+ // Bytes ec0 - eff
+ 0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43,
+ 0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43,
+ 0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43,
+ 0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43,
+ 0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43,
+ 0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43,
+ 0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43,
+ 0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43,
+ // Bytes f00 - f3f
+ 0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43,
+ 0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43,
+ 0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43,
+ 0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43,
+ 0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43,
+ 0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43,
+ 0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43,
+ 0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43,
+ // Bytes f40 - f7f
+ 0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43,
+ 0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43,
+ 0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43,
+ 0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43,
+ 0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43,
+ 0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43,
+ 0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43,
+ 0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43,
+ // Bytes f80 - fbf
+ 0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43,
+ 0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43,
+ 0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43,
+ 0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43,
+ 0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43,
+ 0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43,
+ 0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43,
+ 0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43,
+ // Bytes fc0 - fff
+ 0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43,
+ 0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43,
+ 0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43,
+ 0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43,
+ 0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43,
+ 0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43,
+ 0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43,
+ 0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43,
+ // Bytes 1000 - 103f
+ 0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43,
+ 0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43,
+ 0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43,
+ 0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43,
+ 0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43,
+ 0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43,
+ 0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43,
+ 0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43,
+ // Bytes 1040 - 107f
+ 0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43,
+ 0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43,
+ 0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43,
+ 0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43,
+ 0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43,
+ 0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43,
+ 0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43,
+ 0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43,
+ // Bytes 1080 - 10bf
+ 0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43,
+ 0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43,
+ 0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43,
+ 0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43,
+ 0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43,
+ 0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43,
+ 0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43,
+ 0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43,
+ // Bytes 10c0 - 10ff
+ 0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43,
+ 0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43,
+ 0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43,
+ 0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43,
+ 0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43,
+ 0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43,
+ 0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43,
+ 0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43,
+ // Bytes 1100 - 113f
+ 0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43,
+ 0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43,
+ 0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43,
+ 0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43,
+ 0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43,
+ 0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43,
+ 0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43,
+ 0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43,
+ // Bytes 1140 - 117f
+ 0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43,
+ 0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43,
+ 0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43,
+ 0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43,
+ 0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43,
+ 0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43,
+ 0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43,
+ 0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43,
+ // Bytes 1180 - 11bf
+ 0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43,
+ 0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43,
+ 0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43,
+ 0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43,
+ 0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43,
+ 0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43,
+ 0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43,
+ 0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43,
+ // Bytes 11c0 - 11ff
+ 0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43,
+ 0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43,
+ 0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43,
+ 0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43,
+ 0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43,
+ 0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43,
+ 0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43,
+ 0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43,
+ // Bytes 1200 - 123f
+ 0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43,
+ 0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43,
+ 0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43,
+ 0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43,
+ 0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43,
+ 0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43,
+ 0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43,
+ 0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43,
+ // Bytes 1240 - 127f
+ 0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43,
+ 0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43,
+ 0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43,
+ 0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43,
+ 0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43,
+ 0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43,
+ 0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43,
+ 0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43,
+ // Bytes 1280 - 12bf
+ 0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43,
+ 0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43,
+ 0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43,
+ 0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43,
+ 0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43,
+ 0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43,
+ 0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43,
+ 0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43,
+ // Bytes 12c0 - 12ff
+ 0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43,
+ 0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43,
+ 0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43,
+ 0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43,
+ 0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43,
+ 0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43,
+ 0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43,
+ 0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43,
+ // Bytes 1300 - 133f
+ 0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43,
+ 0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43,
+ 0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43,
+ 0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43,
+ 0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43,
+ 0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43,
+ 0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43,
+ 0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43,
+ // Bytes 1340 - 137f
+ 0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43,
+ 0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43,
+ 0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43,
+ 0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43,
+ 0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43,
+ 0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43,
+ 0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43,
+ 0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43,
+ // Bytes 1380 - 13bf
+ 0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43,
+ 0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43,
+ 0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43,
+ 0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43,
+ 0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43,
+ 0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43,
+ 0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43,
+ 0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43,
+ // Bytes 13c0 - 13ff
+ 0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43,
+ 0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43,
+ 0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43,
+ 0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43,
+ 0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43,
+ 0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43,
+ 0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43,
+ 0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43,
+ // Bytes 1400 - 143f
+ 0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43,
+ 0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43,
+ 0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43,
+ 0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43,
+ 0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43,
+ 0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43,
+ 0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43,
+ 0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43,
+ // Bytes 1440 - 147f
+ 0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43,
+ 0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43,
+ 0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43,
+ 0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43,
+ 0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43,
+ 0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43,
+ 0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43,
+ 0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43,
+ // Bytes 1480 - 14bf
+ 0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43,
+ 0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43,
+ 0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43,
+ 0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43,
+ 0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43,
+ 0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43,
+ 0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43,
+ 0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43,
+ // Bytes 14c0 - 14ff
+ 0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43,
+ 0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43,
+ 0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43,
+ 0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43,
+ 0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43,
+ 0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43,
+ 0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43,
+ 0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43,
+ // Bytes 1500 - 153f
+ 0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43,
+ 0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43,
+ 0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43,
+ 0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43,
+ 0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43,
+ 0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43,
+ 0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43,
+ 0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43,
+ // Bytes 1540 - 157f
+ 0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43,
+ 0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43,
+ 0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43,
+ 0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43,
+ 0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43,
+ 0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43,
+ 0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43,
+ 0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43,
+ // Bytes 1580 - 15bf
+ 0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43,
+ 0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43,
+ 0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43,
+ 0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43,
+ 0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43,
+ 0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43,
+ 0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43,
+ 0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43,
+ // Bytes 15c0 - 15ff
+ 0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43,
+ 0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43,
+ 0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43,
+ 0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43,
+ 0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43,
+ 0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43,
+ 0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43,
+ 0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43,
+ // Bytes 1600 - 163f
+ 0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43,
+ 0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43,
+ 0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43,
+ 0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43,
+ 0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43,
+ 0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43,
+ 0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43,
+ 0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43,
+ // Bytes 1640 - 167f
+ 0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44,
+ 0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94,
+ 0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0,
+ 0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA,
+ 0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0,
+ 0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44,
+ 0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93,
+ 0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0,
+ // Bytes 1680 - 16bf
+ 0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88,
+ 0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1,
+ 0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44,
+ 0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86,
+ 0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0,
+ 0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94,
+ 0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2,
+ 0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44,
+ // Bytes 16c0 - 16ff
+ 0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80,
+ 0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0,
+ 0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93,
+ 0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3,
+ 0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44,
+ 0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A,
+ 0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0,
+ 0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA,
+ // Bytes 1700 - 173f
+ 0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3,
+ 0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44,
+ 0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE,
+ 0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0,
+ 0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB,
+ 0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4,
+ 0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44,
+ 0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2,
+ // Bytes 1740 - 177f
+ 0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0,
+ 0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84,
+ 0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5,
+ 0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44,
+ 0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89,
+ 0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0,
+ 0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A,
+ 0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5,
+ // Bytes 1780 - 17bf
+ 0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44,
+ 0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2,
+ 0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0,
+ 0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A,
+ 0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6,
+ 0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44,
+ 0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93,
+ 0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0,
+ // Bytes 17c0 - 17ff
+ 0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7,
+ 0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6,
+ 0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44,
+ 0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5,
+ 0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0,
+ 0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92,
+ 0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7,
+ 0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44,
+ // Bytes 1800 - 183f
+ 0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2,
+ 0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0,
+ 0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92,
+ 0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8,
+ 0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44,
+ 0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85,
+ 0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0,
+ 0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A,
+ // Bytes 1840 - 187f
+ 0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9,
+ 0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44,
+ 0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84,
+ 0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0,
+ 0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92,
+ 0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21,
+ 0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30,
+ 0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42,
+ // Bytes 1880 - 18bf
+ 0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31,
+ 0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31,
+ 0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42,
+ 0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39,
+ 0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32,
+ 0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42,
+ 0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35,
+ 0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32,
+ // Bytes 18c0 - 18ff
+ 0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42,
+ 0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31,
+ 0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33,
+ 0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42,
+ 0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39,
+ 0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34,
+ 0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42,
+ 0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35,
+ // Bytes 1900 - 193f
+ 0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34,
+ 0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42,
+ 0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C,
+ 0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37,
+ 0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42,
+ 0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D,
+ 0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41,
+ 0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42,
+ // Bytes 1940 - 197f
+ 0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A,
+ 0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48,
+ 0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42,
+ 0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A,
+ 0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49,
+ 0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42,
+ 0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A,
+ 0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D,
+ // Bytes 1980 - 19bf
+ 0x44, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42,
+ 0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F,
+ 0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50,
+ 0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42,
+ 0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76,
+ 0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57,
+ 0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42,
+ 0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64,
+ // Bytes 19c0 - 19ff
+ 0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64,
+ 0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42,
+ 0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66,
+ 0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66,
+ 0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42,
+ 0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76,
+ 0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B,
+ 0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42,
+ // Bytes 1a00 - 1a3f
+ 0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74,
+ 0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C,
+ 0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42,
+ 0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56,
+ 0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D,
+ 0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42,
+ 0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46,
+ 0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E,
+ // Bytes 1a40 - 1a7f
+ 0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42,
+ 0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46,
+ 0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70,
+ 0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42,
+ 0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69,
+ 0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29,
+ 0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29,
+ 0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29,
+ // Bytes 1a80 - 1abf
+ 0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29,
+ 0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29,
+ 0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29,
+ 0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29,
+ 0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29,
+ 0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29,
+ 0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29,
+ 0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29,
+ // Bytes 1ac0 - 1aff
+ 0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29,
+ 0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29,
+ 0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29,
+ 0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29,
+ 0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29,
+ 0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29,
+ 0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29,
+ 0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29,
+ // Bytes 1b00 - 1b3f
+ 0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29,
+ 0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29,
+ 0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29,
+ 0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29,
+ 0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29,
+ 0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29,
+ 0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29,
+ 0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29,
+ // Bytes 1b40 - 1b7f
+ 0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29,
+ 0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29,
+ 0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29,
+ 0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E,
+ 0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E,
+ 0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E,
+ 0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E,
+ 0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E,
+ // Bytes 1b80 - 1bbf
+ 0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E,
+ 0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D,
+ 0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E,
+ 0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A,
+ 0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49,
+ 0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7,
+ 0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61,
+ 0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D,
+ // Bytes 1bc0 - 1bff
+ 0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45,
+ 0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A,
+ 0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49,
+ 0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73,
+ 0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72,
+ 0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75,
+ 0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32,
+ 0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32,
+ // Bytes 1c00 - 1c3f
+ 0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67,
+ 0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C,
+ 0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61,
+ 0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A,
+ 0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32,
+ 0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9,
+ 0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7,
+ 0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32,
+ // Bytes 1c40 - 1c7f
+ 0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C,
+ 0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69,
+ 0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43,
+ 0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E,
+ 0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46,
+ 0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57,
+ 0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C,
+ 0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73,
+ // Bytes 1c80 - 1cbf
+ 0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31,
+ 0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44,
+ 0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34,
+ 0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28,
+ 0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29,
+ 0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31,
+ 0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44,
+ 0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81,
+ // Bytes 1cc0 - 1cff
+ 0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31,
+ 0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9,
+ 0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6,
+ 0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44,
+ 0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C,
+ 0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34,
+ 0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88,
+ 0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6,
+ // Bytes 1d00 - 1d3f
+ 0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44,
+ 0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97,
+ 0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36,
+ 0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5,
+ 0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7,
+ 0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44,
+ 0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82,
+ 0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39,
+ // Bytes 1d40 - 1d7f
+ 0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9,
+ 0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E,
+ 0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44,
+ 0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69,
+ 0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5,
+ 0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB,
+ 0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4,
+ 0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44,
+ // Bytes 1d80 - 1dbf
+ 0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9,
+ 0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8,
+ 0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE,
+ 0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8,
+ 0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44,
+ 0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9,
+ 0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8,
+ 0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC,
+ // Bytes 1dc0 - 1dff
+ 0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA,
+ 0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44,
+ 0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9,
+ 0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8,
+ 0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89,
+ 0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB,
+ 0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44,
+ 0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9,
+ // Bytes 1e00 - 1e3f
+ 0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8,
+ 0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89,
+ 0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC,
+ 0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44,
+ 0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9,
+ 0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8,
+ 0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89,
+ 0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE,
+ // Bytes 1e40 - 1e7f
+ 0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44,
+ 0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9,
+ 0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8,
+ 0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD,
+ 0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3,
+ 0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44,
+ 0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9,
+ 0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8,
+ // Bytes 1e80 - 1ebf
+ 0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD,
+ 0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4,
+ 0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44,
+ 0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9,
+ 0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8,
+ 0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE,
+ 0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5,
+ 0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44,
+ // Bytes 1ec0 - 1eff
+ 0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8,
+ 0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8,
+ 0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1,
+ 0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6,
+ 0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44,
+ 0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9,
+ 0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8,
+ 0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85,
+ // Bytes 1f00 - 1f3f
+ 0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9,
+ 0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44,
+ 0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8,
+ 0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8,
+ 0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A,
+ 0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81,
+ 0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44,
+ 0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9,
+ // Bytes 1f40 - 1f7f
+ 0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9,
+ 0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85,
+ 0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82,
+ 0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44,
+ 0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8,
+ 0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9,
+ 0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85,
+ 0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83,
+ // Bytes 1f80 - 1fbf
+ 0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44,
+ 0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8,
+ 0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9,
+ 0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87,
+ 0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84,
+ 0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44,
+ 0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8,
+ 0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9,
+ // Bytes 1fc0 - 1fff
+ 0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89,
+ 0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86,
+ 0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44,
+ 0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8,
+ 0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9,
+ 0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86,
+ 0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86,
+ 0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44,
+ // Bytes 2000 - 203f
+ 0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9,
+ 0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9,
+ 0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4,
+ 0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A,
+ 0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44,
+ 0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8,
+ 0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9,
+ 0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87,
+ // Bytes 2040 - 207f
+ 0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A,
+ 0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44,
+ 0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84,
+ 0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29,
+ 0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28,
+ 0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84,
+ 0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29,
+ 0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28,
+ // Bytes 2080 - 20bf
+ 0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84,
+ 0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29,
+ 0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28,
+ 0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84,
+ 0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29,
+ 0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28,
+ 0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8,
+ 0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29,
+ // Bytes 20c0 - 20ff
+ 0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28,
+ 0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB,
+ 0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29,
+ 0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28,
+ 0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85,
+ 0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29,
+ 0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28,
+ 0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90,
+ // Bytes 2100 - 213f
+ 0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29,
+ 0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28,
+ 0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD,
+ 0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29,
+ 0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28,
+ 0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C,
+ 0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29,
+ 0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28,
+ // Bytes 2140 - 217f
+ 0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89,
+ 0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29,
+ 0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28,
+ 0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5,
+ 0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29,
+ 0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28,
+ 0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3,
+ 0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29,
+ // Bytes 2180 - 21bf
+ 0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31,
+ 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6,
+ 0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9,
+ 0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31,
+ 0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7,
+ 0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5,
+ 0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31,
+ 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6,
+ // Bytes 21c0 - 21ff
+ 0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9,
+ 0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31,
+ 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6,
+ 0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9,
+ 0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31,
+ 0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6,
+ 0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9,
+ 0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31,
+ // Bytes 2200 - 223f
+ 0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6,
+ 0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9,
+ 0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31,
+ 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81,
+ 0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35,
+ 0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31,
+ 0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81,
+ 0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39,
+ // Bytes 2240 - 227f
+ 0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32,
+ 0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6,
+ 0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9,
+ 0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32,
+ 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6,
+ 0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9,
+ 0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32,
+ 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6,
+ // Bytes 2280 - 22bf
+ 0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5,
+ 0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32,
+ 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6,
+ 0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33,
+ 0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,
+ 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6,
+ 0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34,
+ 0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,
+ // Bytes 22c0 - 22ff
+ 0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81,
+ 0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36,
+ 0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37,
+ 0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88,
+ 0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D,
+ 0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31,
+ 0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2,
+ 0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88,
+ // Bytes 2300 - 233f
+ 0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD,
+ 0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9,
+ 0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85,
+ 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46,
+ 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,
+ 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA,
+ 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8,
+ 0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE,
+ // Bytes 2340 - 237f
+ 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9,
+ 0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC,
+ 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46,
+ 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8,
+ 0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA,
+ 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8,
+ 0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD,
+ 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8,
+ // Bytes 2380 - 23bf
+ 0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89,
+ 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
+ 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,
+ 0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD,
+ 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8,
+ 0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC,
+ 0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8,
+ 0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89,
+ // Bytes 23c0 - 23ff
+ 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46,
+ 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8,
+ 0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3,
+ 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8,
+ 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD,
+ 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9,
+ 0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE,
+ 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46,
+ // Bytes 2400 - 243f
+ 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8,
+ 0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5,
+ 0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9,
+ 0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85,
+ 0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9,
+ 0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A,
+ 0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46,
+ 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8,
+ // Bytes 2440 - 247f
+ 0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7,
+ 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8,
+ 0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85,
+ 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9,
+ 0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A,
+ 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46,
+ 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8,
+ 0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81,
+ // Bytes 2480 - 24bf
+ 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9,
+ 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84,
+ 0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8,
+ 0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85,
+ 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
+ 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,
+ 0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84,
+ 0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8,
+ // Bytes 24c0 - 24ff
+ 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC,
+ 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9,
+ 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89,
+ 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46,
+ 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9,
+ 0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84,
+ 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8,
+ 0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC,
+ // Bytes 2500 - 253f
+ 0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9,
+ 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A,
+ 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46,
+ 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9,
+ 0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85,
+ 0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8,
+ 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE,
+ 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9,
+ // Bytes 2540 - 257f
+ 0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD,
+ 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46,
+ 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9,
+ 0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86,
+ 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8,
+ 0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD,
+ 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9,
+ 0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A,
+ // Bytes 2580 - 25bf
+ 0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46,
+ 0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,
+ 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A,
+ 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9,
+ 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85,
+ 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8,
+ 0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC,
+ 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46,
+ // Bytes 25c0 - 25ff
+ 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9,
+ 0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A,
+ 0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9,
+ 0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
+ 0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9,
+ 0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88,
+ 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46,
+ 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9,
+ // Bytes 2600 - 263f
+ 0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A,
+ 0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9,
+ 0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
+ 0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB,
+ 0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2,
+ 0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46,
+ 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0,
+ 0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD,
+ // Bytes 2640 - 267f
+ 0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82,
+ 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0,
+ 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE,
+ 0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7,
+ 0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46,
+ 0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0,
+ 0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE,
+ 0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1,
+ // Bytes 2680 - 26bf
+ 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0,
+ 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE,
+ 0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
+ 0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46,
+ 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2,
+ 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81,
+ 0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88,
+ 0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3,
+ // Bytes 26c0 - 26ff
+ 0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82,
+ 0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88,
+ 0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46,
+ 0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3,
+ 0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83,
+ 0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA,
+ 0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3,
+ 0x83, 0xA0, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD,
+ // Bytes 2700 - 273f
+ 0xA3, 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90,
+ 0x46, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46,
+ 0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72,
+ 0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3,
+ 0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28,
+ 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48,
+ 0x28, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29,
+ 0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1,
+ // Bytes 2740 - 277f
+ 0x29, 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85,
+ 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1,
+ 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87,
+ 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
+ 0x89, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1,
+ 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28,
+ 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48,
+ 0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29,
+ // Bytes 2780 - 27bf
+ 0x48, 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1,
+ 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85,
+ 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1,
+ 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91,
+ 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
+ 0x92, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61,
+ 0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8,
+ 0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48,
+ // Bytes 27c0 - 27ff
+ 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87,
+ 0x48, 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9,
+ 0x84, 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7,
+ 0xD9, 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8,
+ 0xB9, 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84,
+ 0xD9, 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8,
+ 0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88,
+ 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2,
+ // Bytes 2800 - 283f
+ 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
+ 0x49, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2,
+ 0x80, 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88,
+ 0xAB, 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE,
+ 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3,
+ 0x80, 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95,
+ 0x49, 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3,
+ 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B,
+ // Bytes 2840 - 287f
+ 0x9D, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,
+ 0xE5, 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3,
+ 0x80, 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95,
+ 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3,
+ 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C,
+ 0xAC, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,
+ 0xE7, 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3,
+ 0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95,
+ // Bytes 2880 - 28bf
+ 0x49, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3,
+ 0x83, 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
+ 0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6,
+ 0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3,
+ 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9,
+ 0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3,
+ 0x83, 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
+ 0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1,
+ // Bytes 28c0 - 28ff
+ 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3,
+ 0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A,
+ 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3,
+ 0x83, 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83,
+ 0xB3, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86,
+ 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3,
+ 0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,
+ 0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3,
+ // Bytes 2900 - 293f
+ 0x83, 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82,
+ 0xA4, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92,
+ 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3,
+ 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3,
+ 0x49, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3,
+ 0x83, 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82,
+ 0x9A, 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98,
+ 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3,
+ // Bytes 2940 - 297f
+ 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB,
+ 0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3,
+ 0x83, 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82,
+ 0xA4, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E,
+ 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3,
+ 0x83, 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF,
+ 0x49, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3,
+ 0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82,
+ // Bytes 2980 - 29bf
+ 0xA2, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF,
+ 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2,
+ 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
+ 0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2,
+ 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB,
+ 0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3,
+ 0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82,
+ 0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3,
+ // Bytes 29c0 - 29ff
+ 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
+ 0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C,
+ 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,
+ 0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB,
+ 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83,
+ 0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD,
+ 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3,
+ 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B,
+ // Bytes 2a00 - 2a3f
+ 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3,
+ 0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC,
+ 0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3,
+ 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82,
+ 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3,
+ 0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82,
+ 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C,
+ 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
+ // Bytes 2a40 - 2a7f
+ 0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F,
+ 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
+ 0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A,
+ 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,
+ 0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC,
+ 0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3,
+ 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF,
+ 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3,
+ // Bytes 2a80 - 2abf
+ 0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83,
+ 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3,
+ 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82,
+ 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C,
+ 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82,
+ 0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F,
+ 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83,
+ 0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC,
+ // Bytes 2ac0 - 2aff
+ 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,
+ 0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88,
+ 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3,
+ 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,
+ 0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4,
+ 0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1,
+ 0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92,
+ 0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9,
+ // Bytes 2b00 - 2b3f
+ 0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7,
+ 0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2,
+ 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83,
+ 0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2,
+ 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82,
+ 0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD,
+ 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83,
+ 0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5,
+ // Bytes 2b40 - 2b7f
+ 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83,
+ 0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F,
+ 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
+ 0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98,
+ 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83,
+ 0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B,
+ 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
+ 0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E,
+ // Bytes 2b80 - 2bbf
+ 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83,
+ 0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1,
+ 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,
+ 0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB,
+ 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82,
+ 0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84,
+ 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1,
+ 0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3,
+ // Bytes 2bc0 - 2bff
+ 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,
+ 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
+ 0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD,
+ 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
+ 0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD,
+ 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83,
+ 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52,
+ 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
+ // Bytes 2c00 - 2c3f
+ 0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3,
+ 0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83,
+ 0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3,
+ 0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83,
+ 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3,
+ 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88,
+ 0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3,
+ 0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88,
+ // Bytes 2c40 - 2c7f
+ 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3,
+ 0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7,
+ 0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3,
+ 0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F,
+ 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
+ 0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3,
+ 0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82,
+ 0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9,
+ // Bytes 2c80 - 2cbf
+ 0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84,
+ 0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9,
+ 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88,
+ 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0,
+ 0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0,
+ 0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0,
+ 0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0,
+ 0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0,
+ // Bytes 2cc0 - 2cff
+ 0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0,
+ 0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,
+ 0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,
+ 0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,
+ 0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,
+ 0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,
+ 0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,
+ 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0,
+ // Bytes 2d00 - 2d3f
+ 0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,
+ 0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0,
+ 0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,
+ 0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1,
+ 0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1,
+ 0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+ 0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+ 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+ // Bytes 2d40 - 2d7f
+ 0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+ 0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+ 0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+ 0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+ 0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+ 0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+ 0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+ 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0,
+ // Bytes 2d80 - 2dbf
+ 0x91, 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01,
+ 0x08, 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84,
+ 0xA7, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0,
+ 0x91, 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D,
+ 0x87, 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0,
+ 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01,
+ 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92,
+ 0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0,
+ // Bytes 2dc0 - 2dff
+ 0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96,
+ 0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0,
+ 0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01,
+ 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0,
+ 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0,
+ 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44,
+ 0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC,
+ 0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9,
+ // Bytes 2e00 - 2e3f
+ 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9,
+ 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9,
+ 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,
+ 0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01,
+ 0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01,
+ 0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01,
+ 0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01,
+ 0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01,
+ // Bytes 2e40 - 2e7f
+ 0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01,
+ 0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01,
+ 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01,
+ 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01,
+ 0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01,
+ 0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01,
+ 0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01,
+ 0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01,
+ // Bytes 2e80 - 2ebf
+ 0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01,
+ 0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01,
+ 0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3,
+ 0x82, 0x99, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1,
+ 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4,
+ 0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99,
+ 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C,
+ 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
+ // Bytes 2ec0 - 2eff
+ 0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83,
+ 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3,
+ 0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1,
+ 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80,
+ 0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4,
+ 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82,
+ 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82,
+ 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3,
+ // Bytes 2f00 - 2f3f
+ 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3,
+ 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,
+ 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F,
+ 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83,
+ 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
+ 0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3,
+ 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88,
+ 0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95,
+ // Bytes 2f40 - 2f7f
+ 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83,
+ 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
+ 0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01,
+ 0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01,
+ 0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC,
+ 0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03,
+ 0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81,
+ 0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41,
+ // Bytes 2f80 - 2fbf
+ 0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9,
+ 0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC,
+ 0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03,
+ 0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8,
+ 0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42,
+ 0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5,
+ 0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC,
+ 0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03,
+ // Bytes 2fc0 - 2fff
+ 0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87,
+ 0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44,
+ 0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5,
+ 0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC,
+ 0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03,
+ 0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83,
+ 0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45,
+ 0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9,
+ // Bytes 3000 - 303f
+ 0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC,
+ 0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03,
+ 0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8,
+ 0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45,
+ 0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9,
+ 0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC,
+ 0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03,
+ 0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87,
+ // Bytes 3040 - 307f
+ 0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47,
+ 0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9,
+ 0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC,
+ 0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03,
+ 0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7,
+ 0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49,
+ 0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9,
+ 0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC,
+ // Bytes 3080 - 30bf
+ 0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03,
+ 0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87,
+ 0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49,
+ 0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9,
+ 0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC,
+ 0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03,
+ 0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82,
+ 0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B,
+ // Bytes 30c0 - 30ff
+ 0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5,
+ 0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC,
+ 0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03,
+ 0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7,
+ 0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C,
+ 0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9,
+ 0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC,
+ 0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03,
+ // Bytes 3100 - 313f
+ 0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83,
+ 0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E,
+ 0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5,
+ 0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC,
+ 0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03,
+ 0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81,
+ 0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F,
+ 0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9,
+ // Bytes 3140 - 317f
+ 0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC,
+ 0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03,
+ 0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87,
+ 0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52,
+ 0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9,
+ 0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC,
+ 0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03,
+ 0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82,
+ // Bytes 3180 - 31bf
+ 0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53,
+ 0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5,
+ 0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC,
+ 0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03,
+ 0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7,
+ 0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54,
+ 0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9,
+ 0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC,
+ // Bytes 31c0 - 31ff
+ 0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03,
+ 0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A,
+ 0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55,
+ 0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9,
+ 0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC,
+ 0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03,
+ 0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD,
+ 0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56,
+ // Bytes 3200 - 323f
+ 0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5,
+ 0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC,
+ 0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03,
+ 0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88,
+ 0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58,
+ 0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9,
+ 0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC,
+ 0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03,
+ // Bytes 3240 - 327f
+ 0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84,
+ 0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59,
+ 0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9,
+ 0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC,
+ 0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03,
+ 0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C,
+ 0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A,
+ 0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9,
+ // Bytes 3280 - 32bf
+ 0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC,
+ 0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03,
+ 0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C,
+ 0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61,
+ 0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5,
+ 0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC,
+ 0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03,
+ 0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81,
+ // Bytes 32c0 - 32ff
+ 0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63,
+ 0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9,
+ 0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC,
+ 0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03,
+ 0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD,
+ 0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65,
+ 0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9,
+ 0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC,
+ // Bytes 3300 - 333f
+ 0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03,
+ 0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89,
+ 0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65,
+ 0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9,
+ 0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC,
+ 0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03,
+ 0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81,
+ 0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67,
+ // Bytes 3340 - 337f
+ 0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9,
+ 0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC,
+ 0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03,
+ 0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87,
+ 0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68,
+ 0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5,
+ 0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC,
+ 0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03,
+ // Bytes 3380 - 33bf
+ 0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81,
+ 0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69,
+ 0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9,
+ 0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC,
+ 0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03,
+ 0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91,
+ 0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69,
+ 0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5,
+ // Bytes 33c0 - 33ff
+ 0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC,
+ 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03,
+ 0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3,
+ 0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B,
+ 0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9,
+ 0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC,
+ 0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03,
+ 0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81,
+ // Bytes 3400 - 343f
+ 0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D,
+ 0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9,
+ 0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC,
+ 0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03,
+ 0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3,
+ 0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E,
+ 0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5,
+ 0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC,
+ // Bytes 3440 - 347f
+ 0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03,
+ 0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B,
+ 0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F,
+ 0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9,
+ 0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC,
+ 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03,
+ 0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C,
+ 0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72,
+ // Bytes 3480 - 34bf
+ 0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5,
+ 0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC,
+ 0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03,
+ 0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7,
+ 0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74,
+ 0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9,
+ 0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC,
+ 0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03,
+ // Bytes 34c0 - 34ff
+ 0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1,
+ 0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75,
+ 0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9,
+ 0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC,
+ 0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03,
+ 0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C,
+ 0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75,
+ 0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5,
+ // Bytes 3500 - 353f
+ 0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC,
+ 0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03,
+ 0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83,
+ 0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77,
+ 0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9,
+ 0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC,
+ 0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03,
+ 0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3,
+ // Bytes 3540 - 357f
+ 0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78,
+ 0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9,
+ 0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC,
+ 0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03,
+ 0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87,
+ 0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79,
+ 0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9,
+ 0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC,
+ // Bytes 3580 - 35bf
+ 0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03,
+ 0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C,
+ 0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A,
+ 0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80,
+ 0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04,
+ 0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86,
+ 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84,
+ 0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04,
+ // Bytes 35c0 - 35ff
+ 0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6,
+ 0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81,
+ 0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04,
+ 0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92,
+ 0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80,
+ 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04,
+ 0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91,
+ 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85,
+ // Bytes 3600 - 363f
+ 0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04,
+ 0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97,
+ 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81,
+ 0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04,
+ 0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99,
+ 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84,
+ 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04,
+ 0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F,
+ // Bytes 3640 - 367f
+ 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81,
+ 0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04,
+ 0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5,
+ 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84,
+ 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04,
+ 0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9,
+ 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81,
+ 0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04,
+ // Bytes 3680 - 36bf
+ 0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1,
+ 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85,
+ 0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04,
+ 0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7,
+ 0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80,
+ 0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04,
+ 0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9,
+ 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82,
+ // Bytes 36c0 - 36ff
+ 0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04,
+ 0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81,
+ 0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94,
+ 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04,
+ 0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85,
+ 0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86,
+ 0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04,
+ 0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92,
+ // Bytes 3700 - 373f
+ 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88,
+ 0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04,
+ 0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90,
+ 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81,
+ 0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04,
+ 0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95,
+ 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86,
+ 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04,
+ // Bytes 3740 - 377f
+ 0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98,
+ 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84,
+ 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04,
+ 0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A,
+ 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88,
+ 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04,
+ 0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3,
+ 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B,
+ // Bytes 3780 - 37bf
+ 0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04,
+ 0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD,
+ 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86,
+ 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04,
+ 0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5,
+ 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86,
+ 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04,
+ 0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6,
+ // Bytes 37c0 - 37ff
+ 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88,
+ 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04,
+ 0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8,
+ 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88,
+ 0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04,
+ 0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83,
+ 0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86,
+ 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04,
+ // Bytes 3800 - 383f
+ 0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87,
+ 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88,
+ 0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04,
+ 0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4,
+ 0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F,
+ 0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04,
+ 0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8,
+ 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88,
+ // Bytes 3840 - 387f
+ 0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04,
+ 0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7,
+ 0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94,
+ 0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04,
+ 0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92,
+ 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94,
+ 0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA,
+ 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,
+ // Bytes 3880 - 38bf
+ 0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41,
+ 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC,
+ 0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86,
+ 0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC,
+ 0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89,
+ 0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA,
+ 0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05,
+ 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41,
+ // Bytes 38c0 - 38ff
+ 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC,
+ 0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7,
+ 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC,
+ 0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81,
+ 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA,
+ 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05,
+ 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45,
+ 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC,
+ // Bytes 3900 - 393f
+ 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7,
+ 0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC,
+ 0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84,
+ 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA,
+ 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,
+ 0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F,
+ 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC,
+ 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83,
+ // Bytes 3940 - 397f
+ 0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC,
+ 0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80,
+ 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA,
+ 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,
+ 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F,
+ 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC,
+ 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B,
+ 0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC,
+ // Bytes 3980 - 39bf
+ 0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3,
+ 0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA,
+ 0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05,
+ 0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53,
+ 0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC,
+ 0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3,
+ 0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC,
+ 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88,
+ // Bytes 39c0 - 39ff
+ 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
+ 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05,
+ 0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55,
+ 0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC,
+ 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B,
+ 0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC,
+ 0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89,
+ 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,
+ // Bytes 3a00 - 3a3f
+ 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,
+ 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61,
+ 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC,
+ 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86,
+ 0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC,
+ 0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83,
+ 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA,
+ 0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,
+ // Bytes 3a40 - 3a7f
+ 0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61,
+ 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC,
+ 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3,
+ 0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC,
+ 0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80,
+ 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA,
+ 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05,
+ 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65,
+ // Bytes 3a80 - 3abf
+ 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC,
+ 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3,
+ 0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC,
+ 0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81,
+ 0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA,
+ 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,
+ 0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F,
+ 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC,
+ // Bytes 3ac0 - 3aff
+ 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83,
+ 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC,
+ 0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88,
+ 0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA,
+ 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05,
+ 0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F,
+ 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC,
+ 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B,
+ // Bytes 3b00 - 3b3f
+ 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC,
+ 0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89,
+ 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,
+ 0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05,
+ 0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72,
+ 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC,
+ 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C,
+ 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC,
+ // Bytes 3b40 - 3b7f
+ 0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81,
+ 0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA,
+ 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05,
+ 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75,
+ 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC,
+ 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B,
+ 0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC,
+ 0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83,
+ // Bytes 3b80 - 3bbf
+ 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA,
+ 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05,
+ 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1,
+ 0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE,
+ 0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE,
+ 0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC,
+ 0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82,
+ 0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05,
+ // Bytes 3bc0 - 3bff
+ 0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05,
+ 0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
+ 0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87,
+ 0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94,
+ 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC,
+ 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8,
+ 0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05,
+ 0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05,
+ // Bytes 3c00 - 3c3f
+ 0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
+ 0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
+ 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85,
+ 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC,
+ 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8,
+ 0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05,
+ 0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05,
+ 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
+ // Bytes 3c40 - 3c7f
+ 0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
+ 0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6,
+ 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC,
+ 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8,
+ 0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05,
+ 0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05,
+ 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
+ 0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
+ // Bytes 3c80 - 3cbf
+ 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86,
+ 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC,
+ 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8,
+ 0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05,
+ 0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05,
+ 0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
+ 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
+ 0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2,
+ // Bytes 3cc0 - 3cff
+ 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC,
+ 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8,
+ 0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05,
+ 0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+ // Bytes 3d00 - 3d3f
+ 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
+ 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+ // Bytes 3d40 - 3d7f
+ 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
+ 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
+ // Bytes 3d80 - 3dbf
+ 0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+ // Bytes 3dc0 - 3dff
+ 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
+ // Bytes 3e00 - 3e3f
+ 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA,
+ 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
+ 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+ // Bytes 3e40 - 3e7f
+ 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
+ 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA,
+ // Bytes 3e80 - 3ebf
+ 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
+ 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+ 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+ 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
+ 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
+ // Bytes 3ec0 - 3eff
+ 0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
+ 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
+ 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09,
+ 0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09,
+ 0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09,
+ 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85,
+ 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11,
+ // Bytes 3f00 - 3f3f
+ 0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D,
+ // Bytes 3f40 - 3f7f
+ 0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D,
+ // Bytes 3f80 - 3fbf
+ 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D,
+ 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D,
+ 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D,
+ 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D,
+ // Bytes 3fc0 - 3fff
+ 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D,
+ 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D,
+ // Bytes 4000 - 403f
+ 0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D,
+ // Bytes 4040 - 407f
+ 0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D,
+ 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D,
+ 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D,
+ // Bytes 4080 - 40bf
+ 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D,
+ 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D,
+ 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D,
+ 0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D,
+ // Bytes 40c0 - 40ff
+ 0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D,
+ 0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D,
+ 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
+ 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC,
+ 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC,
+ 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+ 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
+ 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
+ // Bytes 4100 - 413f
+ 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD,
+ 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,
+ 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+ 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
+ 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
+ 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC,
+ 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,
+ 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+ // Bytes 4140 - 417f
+ 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
+ 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
+ 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC,
+ 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC,
+ 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+ 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
+ 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
+ 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD,
+ // Bytes 4180 - 41bf
+ 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,
+ 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+ 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
+ 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
+ 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC,
+ 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,
+ 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+ 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
+ // Bytes 41c0 - 41ff
+ 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
+ 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC,
+ 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC,
+ 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+ 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
+ 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
+ 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD,
+ 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,
+ // Bytes 4200 - 423f
+ 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF,
+ 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
+ 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
+ 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC,
+ 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,
+ 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF,
+ 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
+ 0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82,
+ // Bytes 4240 - 427f
+ 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0,
+ 0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82,
+ 0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2,
+ 0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43,
+ 0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84,
+ 0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20,
+ 0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9,
+ 0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC,
+ // Bytes 4280 - 42bf
+ 0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43,
+ 0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94,
+ 0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20,
+ 0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5,
+ 0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD,
+ 0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43,
+ 0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D,
+ 0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20,
+ // Bytes 42c0 - 42ff
+ 0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D,
+ 0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9,
+ 0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43,
+ 0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82,
+ 0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D,
+ 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE,
+ 0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC,
+ 0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9,
+ // Bytes 4300 - 433f
+ 0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
+ 0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC,
+ 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9,
+ 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
+ 0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC,
+ 0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9,
+ 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
+ 0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC,
+ // Bytes 4340 - 437f
+ 0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9,
+ 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7,
+ 0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41,
+ 0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
+ 0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41,
+ 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7,
+ // Bytes 4380 - 43bf
+ 0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41,
+ 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7,
+ 0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41,
+ 0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
+ 0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41,
+ // Bytes 43c0 - 43ff
+ 0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
+ 0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49,
+ 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
+ 0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41,
+ 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7,
+ 0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6,
+ // Bytes 4400 - 443f
+ 0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31,
+ 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8,
+ 0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9,
+ 0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,
+ 0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8,
+ 0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9,
+ 0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65,
+ 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9,
+ // Bytes 4440 - 447f
+ 0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9,
+ 0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75,
+ 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9,
+ 0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9,
+ 0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9,
+ 0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB,
+ 0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88,
+ 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC,
+ // Bytes 4480 - 44bf
+ 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82,
+ 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+ 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45,
+ 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20,
+ 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC,
+ 0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94,
+ 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9,
+ 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91,
+ // Bytes 44c0 - 44ff
+ 0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72,
+ 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45,
+ 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20,
+ 0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB,
+ 0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC,
+ 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC,
+ 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6,
+ 0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6,
+ // Bytes 4500 - 453f
+ 0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9,
+ 0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,
+ 0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,
+ 0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1,
+ // Bytes 4540 - 457f
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1,
+ 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2,
+ 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF,
+ 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96,
+ 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97,
+ // Bytes 4580 - 45bf
+ 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C,
+ 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB,
+ 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2,
+ 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8,
+ 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1,
+ 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2,
+ 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2,
+ 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3,
+ // Bytes 45c0 - 45ff
+ 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86,
+ 0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85,
+ 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0,
+ 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD,
+ 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,
+ 0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
+ 0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2,
+ 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49,
+ // Bytes 4600 - 463f
+ 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE,
+ 0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
+ 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE,
+ 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85,
+ 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0,
+ 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
+ 0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85,
+ 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
+ // Bytes 4640 - 467f
+ 0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
+ 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE,
+ 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,
+ 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0,
+ 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
+ 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86,
+ 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
+ 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
+ // Bytes 4680 - 46bf
+ 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE,
+ 0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC,
+ 0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83,
+ 0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A,
+ 0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43,
+ 0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9,
+ 0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC,
+ 0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83,
+ // Bytes 46c0 - 46ff
+ 0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3,
+ 0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F,
+ 0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9,
+ 0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC,
+ 0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83,
+ 0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8,
+ 0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53,
+ 0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9,
+ // Bytes 4700 - 473f
+ 0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC,
+ 0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83,
+ 0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B,
+ 0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61,
+ 0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9,
+ 0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC,
+ 0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83,
+ 0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82,
+ // Bytes 4740 - 477f
+ 0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65,
+ 0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5,
+ 0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC,
+ 0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83,
+ 0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84,
+ 0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F,
+ 0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD,
+ 0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC,
+ // Bytes 4780 - 47bf
+ 0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83,
+ 0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C,
+ 0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75,
+ 0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9,
+ 0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC,
+ 0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9,
+ 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
+ 0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC,
+ // Bytes 47c0 - 47ff
+ 0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9,
+ 0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
+ 0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC,
+ 0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9,
+ 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
+ 0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC,
+ 0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9,
+ 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE,
+ // Bytes 4800 - 483f
+ 0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC,
+ 0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9,
+ 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE,
+ 0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC,
+ 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9,
+ 0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE,
+ 0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC,
+ 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9,
+ // Bytes 4840 - 487f
+ 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE,
+ 0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC,
+ 0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9,
+ 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF,
+ 0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC,
+ 0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9,
+ 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF,
+ 0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC,
+ // Bytes 4880 - 48bf
+ 0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9,
+ 0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE,
+ 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ // Bytes 48c0 - 48ff
+ 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ // Bytes 4900 - 493f
+ 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ // Bytes 4940 - 497f
+ 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF,
+ // Bytes 4980 - 49bf
+ 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF,
+ 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF,
+ 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF,
+ 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF,
+ 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF,
+ 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC,
+ 0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32,
+ 0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85,
+ // Bytes 49c0 - 49ff
+ 0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01,
+ 0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43,
+ 0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85,
+ 0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01,
+ 0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43,
+ 0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85,
+ 0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01,
+ 0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43,
+ // Bytes 4a00 - 4a3f
+ 0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85,
+ 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01,
+ 0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43,
+ 0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85,
+ 0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01,
+ 0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43,
+ 0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85,
+ 0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01,
+ // Bytes 4a40 - 4a7f
+ 0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43,
+ 0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86,
+ 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01,
+ 0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43,
+ 0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86,
+ 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01,
+ 0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32,
+ 0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3,
+ // Bytes 4a80 - 4abf
+ 0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1,
+ 0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD,
+ 0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0,
+ 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00,
+ 0x01,
+}
+
+// lookup returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) {
+ c0 := s[0]
+ switch {
+ case c0 < 0x80: // is ASCII
+ return nfcValues[c0], 1
+ case c0 < 0xC2:
+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+ case c0 < 0xE0: // 2-byte UTF-8
+ if len(s) < 2 {
+ return 0, 0
+ }
+ i := nfcIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c1), 2
+ case c0 < 0xF0: // 3-byte UTF-8
+ if len(s) < 3 {
+ return 0, 0
+ }
+ i := nfcIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = nfcIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c2), 3
+ case c0 < 0xF8: // 4-byte UTF-8
+ if len(s) < 4 {
+ return 0, 0
+ }
+ i := nfcIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = nfcIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ o = uint32(i)<<6 + uint32(c2)
+ i = nfcIndex[o]
+ c3 := s[3]
+ if c3 < 0x80 || 0xC0 <= c3 {
+ return 0, 3 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c3), 4
+ }
+ // Illegal rune
+ return 0, 1
+}
+
+// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *nfcTrie) lookupUnsafe(s []byte) uint16 {
+ c0 := s[0]
+ if c0 < 0x80 { // is ASCII
+ return nfcValues[c0]
+ }
+ i := nfcIndex[c0]
+ if c0 < 0xE0 { // 2-byte UTF-8
+ return t.lookupValue(uint32(i), s[1])
+ }
+ i = nfcIndex[uint32(i)<<6+uint32(s[1])]
+ if c0 < 0xF0 { // 3-byte UTF-8
+ return t.lookupValue(uint32(i), s[2])
+ }
+ i = nfcIndex[uint32(i)<<6+uint32(s[2])]
+ if c0 < 0xF8 { // 4-byte UTF-8
+ return t.lookupValue(uint32(i), s[3])
+ }
+ return 0
+}
+
+// lookupString returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *nfcTrie) lookupString(s string) (v uint16, sz int) {
+ c0 := s[0]
+ switch {
+ case c0 < 0x80: // is ASCII
+ return nfcValues[c0], 1
+ case c0 < 0xC2:
+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+ case c0 < 0xE0: // 2-byte UTF-8
+ if len(s) < 2 {
+ return 0, 0
+ }
+ i := nfcIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c1), 2
+ case c0 < 0xF0: // 3-byte UTF-8
+ if len(s) < 3 {
+ return 0, 0
+ }
+ i := nfcIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = nfcIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c2), 3
+ case c0 < 0xF8: // 4-byte UTF-8
+ if len(s) < 4 {
+ return 0, 0
+ }
+ i := nfcIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = nfcIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ o = uint32(i)<<6 + uint32(c2)
+ i = nfcIndex[o]
+ c3 := s[3]
+ if c3 < 0x80 || 0xC0 <= c3 {
+ return 0, 3 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c3), 4
+ }
+ // Illegal rune
+ return 0, 1
+}
+
+// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *nfcTrie) lookupStringUnsafe(s string) uint16 {
+ c0 := s[0]
+ if c0 < 0x80 { // is ASCII
+ return nfcValues[c0]
+ }
+ i := nfcIndex[c0]
+ if c0 < 0xE0 { // 2-byte UTF-8
+ return t.lookupValue(uint32(i), s[1])
+ }
+ i = nfcIndex[uint32(i)<<6+uint32(s[1])]
+ if c0 < 0xF0 { // 3-byte UTF-8
+ return t.lookupValue(uint32(i), s[2])
+ }
+ i = nfcIndex[uint32(i)<<6+uint32(s[2])]
+ if c0 < 0xF8 { // 4-byte UTF-8
+ return t.lookupValue(uint32(i), s[3])
+ }
+ return 0
+}
+
+// nfcTrie. Total size: 10442 bytes (10.20 KiB). Checksum: 4ba400a9d8208e03.
+type nfcTrie struct{}
+
+func newNfcTrie(i int) *nfcTrie {
+ return &nfcTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 {
+ switch {
+ case n < 45:
+ return uint16(nfcValues[n<<6+uint32(b)])
+ default:
+ n -= 45
+ return uint16(nfcSparse.lookup(n, b))
+ }
+}
+
+// nfcValues: 47 blocks, 3008 entries, 6016 bytes
+// The third block is the zero block.
+var nfcValues = [3008]uint16{
+ // Block 0x0, offset 0x0
+ 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
+ // Block 0x1, offset 0x40
+ 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
+ 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
+ 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
+ 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
+ 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
+ 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
+ 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
+ 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
+ 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
+ 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
+ // Block 0x2, offset 0x80
+ // Block 0x3, offset 0xc0
+ 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,
+ 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,
+ 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,
+ 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,
+ 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,
+ 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,
+ 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,
+ 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,
+ 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,
+ 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
+ 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,
+ // Block 0x4, offset 0x100
+ 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,
+ 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,
+ 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,
+ 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
+ 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,
+ 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,
+ 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,
+ 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,
+ 0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0,
+ 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,
+ 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8,
+ // Block 0x5, offset 0x140
+ 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,
+ 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f,
+ 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
+ 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,
+ 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,
+ 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,
+ 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,
+ 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
+ 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,
+ 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,
+ 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000,
+ // Block 0x6, offset 0x180
+ 0x184: 0x8100, 0x185: 0x8100,
+ 0x186: 0x8100,
+ 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,
+ 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,
+ 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,
+ 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,
+ 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,
+ 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
+ 0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334,
+ 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,
+ 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,
+ // Block 0x7, offset 0x1c0
+ 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,
+ 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,
+ 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,
+ 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,
+ 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,
+ 0x1de: 0x305a, 0x1df: 0x3366,
+ 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,
+ 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,
+ 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,
+ // Block 0x8, offset 0x200
+ 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
+ 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,
+ 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,
+ 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,
+ 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,
+ 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,
+ 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,
+ 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,
+ 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,
+ 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
+ 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
+ // Block 0x9, offset 0x240
+ 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,
+ 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
+ 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
+ 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
+ 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,
+ 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,
+ 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,
+ 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,
+ 0x274: 0x0170,
+ 0x27a: 0x8100,
+ 0x27e: 0x0037,
+ // Block 0xa, offset 0x280
+ 0x284: 0x8100, 0x285: 0x35a1,
+ 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,
+ 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,
+ 0x295: 0xa000, 0x297: 0xa000,
+ 0x299: 0xa000,
+ 0x29f: 0xa000, 0x2a1: 0xa000,
+ 0x2a5: 0xa000, 0x2a9: 0xa000,
+ 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,
+ 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,
+ 0x2b7: 0xa000, 0x2b9: 0xa000,
+ 0x2bf: 0xa000,
+ // Block 0xb, offset 0x2c0
+ 0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b,
+ 0x2c6: 0xa000, 0x2c7: 0x3709,
+ 0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000,
+ 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000,
+ 0x2d8: 0xa000, 0x2d9: 0x3751, 0x2da: 0xa000,
+ 0x2de: 0xa000, 0x2e3: 0xa000,
+ 0x2e7: 0xa000,
+ 0x2eb: 0xa000, 0x2ed: 0xa000,
+ 0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000,
+ 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d5, 0x2fa: 0xa000,
+ 0x2fe: 0xa000,
+ // Block 0xc, offset 0x300
+ 0x301: 0x3733, 0x302: 0x37b7,
+ 0x310: 0x370f, 0x311: 0x3793,
+ 0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab,
+ 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd,
+ 0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf,
+ 0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000,
+ 0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed,
+ 0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805,
+ 0x338: 0x3787, 0x339: 0x380b,
+ // Block 0xd, offset 0x340
+ 0x351: 0x812d,
+ 0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132,
+ 0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132,
+ 0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d,
+ 0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132,
+ 0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132,
+ 0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a,
+ 0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f,
+ 0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112,
+ // Block 0xe, offset 0x380
+ 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116,
+ 0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c,
+ 0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132,
+ 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132,
+ 0x39e: 0x8132, 0x39f: 0x812d,
+ 0x3b0: 0x811e,
+ // Block 0xf, offset 0x3c0
+ 0x3c5: 0xa000,
+ 0x3c6: 0x2d26, 0x3c7: 0xa000, 0x3c8: 0x2d2e, 0x3c9: 0xa000, 0x3ca: 0x2d36, 0x3cb: 0xa000,
+ 0x3cc: 0x2d3e, 0x3cd: 0xa000, 0x3ce: 0x2d46, 0x3d1: 0xa000,
+ 0x3d2: 0x2d4e,
+ 0x3f4: 0x8102, 0x3f5: 0x9900,
+ 0x3fa: 0xa000, 0x3fb: 0x2d56,
+ 0x3fc: 0xa000, 0x3fd: 0x2d5e, 0x3fe: 0xa000, 0x3ff: 0xa000,
+ // Block 0x10, offset 0x400
+ 0x400: 0x8132, 0x401: 0x8132, 0x402: 0x812d, 0x403: 0x8132, 0x404: 0x8132, 0x405: 0x8132,
+ 0x406: 0x8132, 0x407: 0x8132, 0x408: 0x8132, 0x409: 0x8132, 0x40a: 0x812d, 0x40b: 0x8132,
+ 0x40c: 0x8132, 0x40d: 0x8135, 0x40e: 0x812a, 0x40f: 0x812d, 0x410: 0x8129, 0x411: 0x8132,
+ 0x412: 0x8132, 0x413: 0x8132, 0x414: 0x8132, 0x415: 0x8132, 0x416: 0x8132, 0x417: 0x8132,
+ 0x418: 0x8132, 0x419: 0x8132, 0x41a: 0x8132, 0x41b: 0x8132, 0x41c: 0x8132, 0x41d: 0x8132,
+ 0x41e: 0x8132, 0x41f: 0x8132, 0x420: 0x8132, 0x421: 0x8132, 0x422: 0x8132, 0x423: 0x8132,
+ 0x424: 0x8132, 0x425: 0x8132, 0x426: 0x8132, 0x427: 0x8132, 0x428: 0x8132, 0x429: 0x8132,
+ 0x42a: 0x8132, 0x42b: 0x8132, 0x42c: 0x8132, 0x42d: 0x8132, 0x42e: 0x8132, 0x42f: 0x8132,
+ 0x430: 0x8132, 0x431: 0x8132, 0x432: 0x8132, 0x433: 0x8132, 0x434: 0x8132, 0x435: 0x8132,
+ 0x436: 0x8133, 0x437: 0x8131, 0x438: 0x8131, 0x439: 0x812d, 0x43b: 0x8132,
+ 0x43c: 0x8134, 0x43d: 0x812d, 0x43e: 0x8132, 0x43f: 0x812d,
+ // Block 0x11, offset 0x440
+ 0x440: 0x2f97, 0x441: 0x32a3, 0x442: 0x2fa1, 0x443: 0x32ad, 0x444: 0x2fa6, 0x445: 0x32b2,
+ 0x446: 0x2fab, 0x447: 0x32b7, 0x448: 0x38cc, 0x449: 0x3a5b, 0x44a: 0x2fc4, 0x44b: 0x32d0,
+ 0x44c: 0x2fce, 0x44d: 0x32da, 0x44e: 0x2fdd, 0x44f: 0x32e9, 0x450: 0x2fd3, 0x451: 0x32df,
+ 0x452: 0x2fd8, 0x453: 0x32e4, 0x454: 0x38ef, 0x455: 0x3a7e, 0x456: 0x38f6, 0x457: 0x3a85,
+ 0x458: 0x3019, 0x459: 0x3325, 0x45a: 0x301e, 0x45b: 0x332a, 0x45c: 0x3904, 0x45d: 0x3a93,
+ 0x45e: 0x3023, 0x45f: 0x332f, 0x460: 0x3032, 0x461: 0x333e, 0x462: 0x3050, 0x463: 0x335c,
+ 0x464: 0x305f, 0x465: 0x336b, 0x466: 0x3055, 0x467: 0x3361, 0x468: 0x3064, 0x469: 0x3370,
+ 0x46a: 0x3069, 0x46b: 0x3375, 0x46c: 0x30af, 0x46d: 0x33bb, 0x46e: 0x390b, 0x46f: 0x3a9a,
+ 0x470: 0x30b9, 0x471: 0x33ca, 0x472: 0x30c3, 0x473: 0x33d4, 0x474: 0x30cd, 0x475: 0x33de,
+ 0x476: 0x46c4, 0x477: 0x4755, 0x478: 0x3912, 0x479: 0x3aa1, 0x47a: 0x30e6, 0x47b: 0x33f7,
+ 0x47c: 0x30e1, 0x47d: 0x33f2, 0x47e: 0x30eb, 0x47f: 0x33fc,
+ // Block 0x12, offset 0x480
+ 0x480: 0x30f0, 0x481: 0x3401, 0x482: 0x30f5, 0x483: 0x3406, 0x484: 0x3109, 0x485: 0x341a,
+ 0x486: 0x3113, 0x487: 0x3424, 0x488: 0x3122, 0x489: 0x3433, 0x48a: 0x311d, 0x48b: 0x342e,
+ 0x48c: 0x3935, 0x48d: 0x3ac4, 0x48e: 0x3943, 0x48f: 0x3ad2, 0x490: 0x394a, 0x491: 0x3ad9,
+ 0x492: 0x3951, 0x493: 0x3ae0, 0x494: 0x314f, 0x495: 0x3460, 0x496: 0x3154, 0x497: 0x3465,
+ 0x498: 0x315e, 0x499: 0x346f, 0x49a: 0x46f1, 0x49b: 0x4782, 0x49c: 0x3997, 0x49d: 0x3b26,
+ 0x49e: 0x3177, 0x49f: 0x3488, 0x4a0: 0x3181, 0x4a1: 0x3492, 0x4a2: 0x4700, 0x4a3: 0x4791,
+ 0x4a4: 0x399e, 0x4a5: 0x3b2d, 0x4a6: 0x39a5, 0x4a7: 0x3b34, 0x4a8: 0x39ac, 0x4a9: 0x3b3b,
+ 0x4aa: 0x3190, 0x4ab: 0x34a1, 0x4ac: 0x319a, 0x4ad: 0x34b0, 0x4ae: 0x31ae, 0x4af: 0x34c4,
+ 0x4b0: 0x31a9, 0x4b1: 0x34bf, 0x4b2: 0x31ea, 0x4b3: 0x3500, 0x4b4: 0x31f9, 0x4b5: 0x350f,
+ 0x4b6: 0x31f4, 0x4b7: 0x350a, 0x4b8: 0x39b3, 0x4b9: 0x3b42, 0x4ba: 0x39ba, 0x4bb: 0x3b49,
+ 0x4bc: 0x31fe, 0x4bd: 0x3514, 0x4be: 0x3203, 0x4bf: 0x3519,
+ // Block 0x13, offset 0x4c0
+ 0x4c0: 0x3208, 0x4c1: 0x351e, 0x4c2: 0x320d, 0x4c3: 0x3523, 0x4c4: 0x321c, 0x4c5: 0x3532,
+ 0x4c6: 0x3217, 0x4c7: 0x352d, 0x4c8: 0x3221, 0x4c9: 0x353c, 0x4ca: 0x3226, 0x4cb: 0x3541,
+ 0x4cc: 0x322b, 0x4cd: 0x3546, 0x4ce: 0x3249, 0x4cf: 0x3564, 0x4d0: 0x3262, 0x4d1: 0x3582,
+ 0x4d2: 0x3271, 0x4d3: 0x3591, 0x4d4: 0x3276, 0x4d5: 0x3596, 0x4d6: 0x337a, 0x4d7: 0x34a6,
+ 0x4d8: 0x3537, 0x4d9: 0x3573, 0x4db: 0x35d1,
+ 0x4e0: 0x46a1, 0x4e1: 0x4732, 0x4e2: 0x2f83, 0x4e3: 0x328f,
+ 0x4e4: 0x3878, 0x4e5: 0x3a07, 0x4e6: 0x3871, 0x4e7: 0x3a00, 0x4e8: 0x3886, 0x4e9: 0x3a15,
+ 0x4ea: 0x387f, 0x4eb: 0x3a0e, 0x4ec: 0x38be, 0x4ed: 0x3a4d, 0x4ee: 0x3894, 0x4ef: 0x3a23,
+ 0x4f0: 0x388d, 0x4f1: 0x3a1c, 0x4f2: 0x38a2, 0x4f3: 0x3a31, 0x4f4: 0x389b, 0x4f5: 0x3a2a,
+ 0x4f6: 0x38c5, 0x4f7: 0x3a54, 0x4f8: 0x46b5, 0x4f9: 0x4746, 0x4fa: 0x3000, 0x4fb: 0x330c,
+ 0x4fc: 0x2fec, 0x4fd: 0x32f8, 0x4fe: 0x38da, 0x4ff: 0x3a69,
+ // Block 0x14, offset 0x500
+ 0x500: 0x38d3, 0x501: 0x3a62, 0x502: 0x38e8, 0x503: 0x3a77, 0x504: 0x38e1, 0x505: 0x3a70,
+ 0x506: 0x38fd, 0x507: 0x3a8c, 0x508: 0x3091, 0x509: 0x339d, 0x50a: 0x30a5, 0x50b: 0x33b1,
+ 0x50c: 0x46e7, 0x50d: 0x4778, 0x50e: 0x3136, 0x50f: 0x3447, 0x510: 0x3920, 0x511: 0x3aaf,
+ 0x512: 0x3919, 0x513: 0x3aa8, 0x514: 0x392e, 0x515: 0x3abd, 0x516: 0x3927, 0x517: 0x3ab6,
+ 0x518: 0x3989, 0x519: 0x3b18, 0x51a: 0x396d, 0x51b: 0x3afc, 0x51c: 0x3966, 0x51d: 0x3af5,
+ 0x51e: 0x397b, 0x51f: 0x3b0a, 0x520: 0x3974, 0x521: 0x3b03, 0x522: 0x3982, 0x523: 0x3b11,
+ 0x524: 0x31e5, 0x525: 0x34fb, 0x526: 0x31c7, 0x527: 0x34dd, 0x528: 0x39e4, 0x529: 0x3b73,
+ 0x52a: 0x39dd, 0x52b: 0x3b6c, 0x52c: 0x39f2, 0x52d: 0x3b81, 0x52e: 0x39eb, 0x52f: 0x3b7a,
+ 0x530: 0x39f9, 0x531: 0x3b88, 0x532: 0x3230, 0x533: 0x354b, 0x534: 0x3258, 0x535: 0x3578,
+ 0x536: 0x3253, 0x537: 0x356e, 0x538: 0x323f, 0x539: 0x355a,
+ // Block 0x15, offset 0x540
+ 0x540: 0x4804, 0x541: 0x480a, 0x542: 0x491e, 0x543: 0x4936, 0x544: 0x4926, 0x545: 0x493e,
+ 0x546: 0x492e, 0x547: 0x4946, 0x548: 0x47aa, 0x549: 0x47b0, 0x54a: 0x488e, 0x54b: 0x48a6,
+ 0x54c: 0x4896, 0x54d: 0x48ae, 0x54e: 0x489e, 0x54f: 0x48b6, 0x550: 0x4816, 0x551: 0x481c,
+ 0x552: 0x3db8, 0x553: 0x3dc8, 0x554: 0x3dc0, 0x555: 0x3dd0,
+ 0x558: 0x47b6, 0x559: 0x47bc, 0x55a: 0x3ce8, 0x55b: 0x3cf8, 0x55c: 0x3cf0, 0x55d: 0x3d00,
+ 0x560: 0x482e, 0x561: 0x4834, 0x562: 0x494e, 0x563: 0x4966,
+ 0x564: 0x4956, 0x565: 0x496e, 0x566: 0x495e, 0x567: 0x4976, 0x568: 0x47c2, 0x569: 0x47c8,
+ 0x56a: 0x48be, 0x56b: 0x48d6, 0x56c: 0x48c6, 0x56d: 0x48de, 0x56e: 0x48ce, 0x56f: 0x48e6,
+ 0x570: 0x4846, 0x571: 0x484c, 0x572: 0x3e18, 0x573: 0x3e30, 0x574: 0x3e20, 0x575: 0x3e38,
+ 0x576: 0x3e28, 0x577: 0x3e40, 0x578: 0x47ce, 0x579: 0x47d4, 0x57a: 0x3d18, 0x57b: 0x3d30,
+ 0x57c: 0x3d20, 0x57d: 0x3d38, 0x57e: 0x3d28, 0x57f: 0x3d40,
+ // Block 0x16, offset 0x580
+ 0x580: 0x4852, 0x581: 0x4858, 0x582: 0x3e48, 0x583: 0x3e58, 0x584: 0x3e50, 0x585: 0x3e60,
+ 0x588: 0x47da, 0x589: 0x47e0, 0x58a: 0x3d48, 0x58b: 0x3d58,
+ 0x58c: 0x3d50, 0x58d: 0x3d60, 0x590: 0x4864, 0x591: 0x486a,
+ 0x592: 0x3e80, 0x593: 0x3e98, 0x594: 0x3e88, 0x595: 0x3ea0, 0x596: 0x3e90, 0x597: 0x3ea8,
+ 0x599: 0x47e6, 0x59b: 0x3d68, 0x59d: 0x3d70,
+ 0x59f: 0x3d78, 0x5a0: 0x487c, 0x5a1: 0x4882, 0x5a2: 0x497e, 0x5a3: 0x4996,
+ 0x5a4: 0x4986, 0x5a5: 0x499e, 0x5a6: 0x498e, 0x5a7: 0x49a6, 0x5a8: 0x47ec, 0x5a9: 0x47f2,
+ 0x5aa: 0x48ee, 0x5ab: 0x4906, 0x5ac: 0x48f6, 0x5ad: 0x490e, 0x5ae: 0x48fe, 0x5af: 0x4916,
+ 0x5b0: 0x47f8, 0x5b1: 0x431e, 0x5b2: 0x3691, 0x5b3: 0x4324, 0x5b4: 0x4822, 0x5b5: 0x432a,
+ 0x5b6: 0x36a3, 0x5b7: 0x4330, 0x5b8: 0x36c1, 0x5b9: 0x4336, 0x5ba: 0x36d9, 0x5bb: 0x433c,
+ 0x5bc: 0x4870, 0x5bd: 0x4342,
+ // Block 0x17, offset 0x5c0
+ 0x5c0: 0x3da0, 0x5c1: 0x3da8, 0x5c2: 0x4184, 0x5c3: 0x41a2, 0x5c4: 0x418e, 0x5c5: 0x41ac,
+ 0x5c6: 0x4198, 0x5c7: 0x41b6, 0x5c8: 0x3cd8, 0x5c9: 0x3ce0, 0x5ca: 0x40d0, 0x5cb: 0x40ee,
+ 0x5cc: 0x40da, 0x5cd: 0x40f8, 0x5ce: 0x40e4, 0x5cf: 0x4102, 0x5d0: 0x3de8, 0x5d1: 0x3df0,
+ 0x5d2: 0x41c0, 0x5d3: 0x41de, 0x5d4: 0x41ca, 0x5d5: 0x41e8, 0x5d6: 0x41d4, 0x5d7: 0x41f2,
+ 0x5d8: 0x3d08, 0x5d9: 0x3d10, 0x5da: 0x410c, 0x5db: 0x412a, 0x5dc: 0x4116, 0x5dd: 0x4134,
+ 0x5de: 0x4120, 0x5df: 0x413e, 0x5e0: 0x3ec0, 0x5e1: 0x3ec8, 0x5e2: 0x41fc, 0x5e3: 0x421a,
+ 0x5e4: 0x4206, 0x5e5: 0x4224, 0x5e6: 0x4210, 0x5e7: 0x422e, 0x5e8: 0x3d80, 0x5e9: 0x3d88,
+ 0x5ea: 0x4148, 0x5eb: 0x4166, 0x5ec: 0x4152, 0x5ed: 0x4170, 0x5ee: 0x415c, 0x5ef: 0x417a,
+ 0x5f0: 0x3685, 0x5f1: 0x367f, 0x5f2: 0x3d90, 0x5f3: 0x368b, 0x5f4: 0x3d98,
+ 0x5f6: 0x4810, 0x5f7: 0x3db0, 0x5f8: 0x35f5, 0x5f9: 0x35ef, 0x5fa: 0x35e3, 0x5fb: 0x42ee,
+ 0x5fc: 0x35fb, 0x5fd: 0x8100, 0x5fe: 0x01d3, 0x5ff: 0xa100,
+ // Block 0x18, offset 0x600
+ 0x600: 0x8100, 0x601: 0x35a7, 0x602: 0x3dd8, 0x603: 0x369d, 0x604: 0x3de0,
+ 0x606: 0x483a, 0x607: 0x3df8, 0x608: 0x3601, 0x609: 0x42f4, 0x60a: 0x360d, 0x60b: 0x42fa,
+ 0x60c: 0x3619, 0x60d: 0x3b8f, 0x60e: 0x3b96, 0x60f: 0x3b9d, 0x610: 0x36b5, 0x611: 0x36af,
+ 0x612: 0x3e00, 0x613: 0x44e4, 0x616: 0x36bb, 0x617: 0x3e10,
+ 0x618: 0x3631, 0x619: 0x362b, 0x61a: 0x361f, 0x61b: 0x4300, 0x61d: 0x3ba4,
+ 0x61e: 0x3bab, 0x61f: 0x3bb2, 0x620: 0x36eb, 0x621: 0x36e5, 0x622: 0x3e68, 0x623: 0x44ec,
+ 0x624: 0x36cd, 0x625: 0x36d3, 0x626: 0x36f1, 0x627: 0x3e78, 0x628: 0x3661, 0x629: 0x365b,
+ 0x62a: 0x364f, 0x62b: 0x430c, 0x62c: 0x3649, 0x62d: 0x359b, 0x62e: 0x42e8, 0x62f: 0x0081,
+ 0x632: 0x3eb0, 0x633: 0x36f7, 0x634: 0x3eb8,
+ 0x636: 0x4888, 0x637: 0x3ed0, 0x638: 0x363d, 0x639: 0x4306, 0x63a: 0x366d, 0x63b: 0x4318,
+ 0x63c: 0x3679, 0x63d: 0x4256, 0x63e: 0xa100,
+ // Block 0x19, offset 0x640
+ 0x641: 0x3c06, 0x643: 0xa000, 0x644: 0x3c0d, 0x645: 0xa000,
+ 0x647: 0x3c14, 0x648: 0xa000, 0x649: 0x3c1b,
+ 0x64d: 0xa000,
+ 0x660: 0x2f65, 0x661: 0xa000, 0x662: 0x3c29,
+ 0x664: 0xa000, 0x665: 0xa000,
+ 0x66d: 0x3c22, 0x66e: 0x2f60, 0x66f: 0x2f6a,
+ 0x670: 0x3c30, 0x671: 0x3c37, 0x672: 0xa000, 0x673: 0xa000, 0x674: 0x3c3e, 0x675: 0x3c45,
+ 0x676: 0xa000, 0x677: 0xa000, 0x678: 0x3c4c, 0x679: 0x3c53, 0x67a: 0xa000, 0x67b: 0xa000,
+ 0x67c: 0xa000, 0x67d: 0xa000,
+ // Block 0x1a, offset 0x680
+ 0x680: 0x3c5a, 0x681: 0x3c61, 0x682: 0xa000, 0x683: 0xa000, 0x684: 0x3c76, 0x685: 0x3c7d,
+ 0x686: 0xa000, 0x687: 0xa000, 0x688: 0x3c84, 0x689: 0x3c8b,
+ 0x691: 0xa000,
+ 0x692: 0xa000,
+ 0x6a2: 0xa000,
+ 0x6a8: 0xa000, 0x6a9: 0xa000,
+ 0x6ab: 0xa000, 0x6ac: 0x3ca0, 0x6ad: 0x3ca7, 0x6ae: 0x3cae, 0x6af: 0x3cb5,
+ 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0xa000, 0x6b5: 0xa000,
+ // Block 0x1b, offset 0x6c0
+ 0x6c6: 0xa000, 0x6cb: 0xa000,
+ 0x6cc: 0x3f08, 0x6cd: 0xa000, 0x6ce: 0x3f10, 0x6cf: 0xa000, 0x6d0: 0x3f18, 0x6d1: 0xa000,
+ 0x6d2: 0x3f20, 0x6d3: 0xa000, 0x6d4: 0x3f28, 0x6d5: 0xa000, 0x6d6: 0x3f30, 0x6d7: 0xa000,
+ 0x6d8: 0x3f38, 0x6d9: 0xa000, 0x6da: 0x3f40, 0x6db: 0xa000, 0x6dc: 0x3f48, 0x6dd: 0xa000,
+ 0x6de: 0x3f50, 0x6df: 0xa000, 0x6e0: 0x3f58, 0x6e1: 0xa000, 0x6e2: 0x3f60,
+ 0x6e4: 0xa000, 0x6e5: 0x3f68, 0x6e6: 0xa000, 0x6e7: 0x3f70, 0x6e8: 0xa000, 0x6e9: 0x3f78,
+ 0x6ef: 0xa000,
+ 0x6f0: 0x3f80, 0x6f1: 0x3f88, 0x6f2: 0xa000, 0x6f3: 0x3f90, 0x6f4: 0x3f98, 0x6f5: 0xa000,
+ 0x6f6: 0x3fa0, 0x6f7: 0x3fa8, 0x6f8: 0xa000, 0x6f9: 0x3fb0, 0x6fa: 0x3fb8, 0x6fb: 0xa000,
+ 0x6fc: 0x3fc0, 0x6fd: 0x3fc8,
+ // Block 0x1c, offset 0x700
+ 0x714: 0x3f00,
+ 0x719: 0x9903, 0x71a: 0x9903, 0x71b: 0x8100, 0x71c: 0x8100, 0x71d: 0xa000,
+ 0x71e: 0x3fd0,
+ 0x726: 0xa000,
+ 0x72b: 0xa000, 0x72c: 0x3fe0, 0x72d: 0xa000, 0x72e: 0x3fe8, 0x72f: 0xa000,
+ 0x730: 0x3ff0, 0x731: 0xa000, 0x732: 0x3ff8, 0x733: 0xa000, 0x734: 0x4000, 0x735: 0xa000,
+ 0x736: 0x4008, 0x737: 0xa000, 0x738: 0x4010, 0x739: 0xa000, 0x73a: 0x4018, 0x73b: 0xa000,
+ 0x73c: 0x4020, 0x73d: 0xa000, 0x73e: 0x4028, 0x73f: 0xa000,
+ // Block 0x1d, offset 0x740
+ 0x740: 0x4030, 0x741: 0xa000, 0x742: 0x4038, 0x744: 0xa000, 0x745: 0x4040,
+ 0x746: 0xa000, 0x747: 0x4048, 0x748: 0xa000, 0x749: 0x4050,
+ 0x74f: 0xa000, 0x750: 0x4058, 0x751: 0x4060,
+ 0x752: 0xa000, 0x753: 0x4068, 0x754: 0x4070, 0x755: 0xa000, 0x756: 0x4078, 0x757: 0x4080,
+ 0x758: 0xa000, 0x759: 0x4088, 0x75a: 0x4090, 0x75b: 0xa000, 0x75c: 0x4098, 0x75d: 0x40a0,
+ 0x76f: 0xa000,
+ 0x770: 0xa000, 0x771: 0xa000, 0x772: 0xa000, 0x774: 0x3fd8,
+ 0x777: 0x40a8, 0x778: 0x40b0, 0x779: 0x40b8, 0x77a: 0x40c0,
+ 0x77d: 0xa000, 0x77e: 0x40c8,
+ // Block 0x1e, offset 0x780
+ 0x780: 0x1377, 0x781: 0x0cfb, 0x782: 0x13d3, 0x783: 0x139f, 0x784: 0x0e57, 0x785: 0x06eb,
+ 0x786: 0x08df, 0x787: 0x162b, 0x788: 0x162b, 0x789: 0x0a0b, 0x78a: 0x145f, 0x78b: 0x0943,
+ 0x78c: 0x0a07, 0x78d: 0x0bef, 0x78e: 0x0fcf, 0x78f: 0x115f, 0x790: 0x1297, 0x791: 0x12d3,
+ 0x792: 0x1307, 0x793: 0x141b, 0x794: 0x0d73, 0x795: 0x0dff, 0x796: 0x0eab, 0x797: 0x0f43,
+ 0x798: 0x125f, 0x799: 0x1447, 0x79a: 0x1573, 0x79b: 0x070f, 0x79c: 0x08b3, 0x79d: 0x0d87,
+ 0x79e: 0x0ecf, 0x79f: 0x1293, 0x7a0: 0x15c3, 0x7a1: 0x0ab3, 0x7a2: 0x0e77, 0x7a3: 0x1283,
+ 0x7a4: 0x1317, 0x7a5: 0x0c23, 0x7a6: 0x11bb, 0x7a7: 0x12df, 0x7a8: 0x0b1f, 0x7a9: 0x0d0f,
+ 0x7aa: 0x0e17, 0x7ab: 0x0f1b, 0x7ac: 0x1427, 0x7ad: 0x074f, 0x7ae: 0x07e7, 0x7af: 0x0853,
+ 0x7b0: 0x0c8b, 0x7b1: 0x0d7f, 0x7b2: 0x0ecb, 0x7b3: 0x0fef, 0x7b4: 0x1177, 0x7b5: 0x128b,
+ 0x7b6: 0x12a3, 0x7b7: 0x13c7, 0x7b8: 0x14ef, 0x7b9: 0x15a3, 0x7ba: 0x15bf, 0x7bb: 0x102b,
+ 0x7bc: 0x106b, 0x7bd: 0x1123, 0x7be: 0x1243, 0x7bf: 0x147b,
+ // Block 0x1f, offset 0x7c0
+ 0x7c0: 0x15cb, 0x7c1: 0x134b, 0x7c2: 0x09c7, 0x7c3: 0x0b3b, 0x7c4: 0x10db, 0x7c5: 0x119b,
+ 0x7c6: 0x0eff, 0x7c7: 0x1033, 0x7c8: 0x1397, 0x7c9: 0x14e7, 0x7ca: 0x09c3, 0x7cb: 0x0a8f,
+ 0x7cc: 0x0d77, 0x7cd: 0x0e2b, 0x7ce: 0x0e5f, 0x7cf: 0x1113, 0x7d0: 0x113b, 0x7d1: 0x14a7,
+ 0x7d2: 0x084f, 0x7d3: 0x11a7, 0x7d4: 0x07f3, 0x7d5: 0x07ef, 0x7d6: 0x1097, 0x7d7: 0x1127,
+ 0x7d8: 0x125b, 0x7d9: 0x14af, 0x7da: 0x1367, 0x7db: 0x0c27, 0x7dc: 0x0d73, 0x7dd: 0x1357,
+ 0x7de: 0x06f7, 0x7df: 0x0a63, 0x7e0: 0x0b93, 0x7e1: 0x0f2f, 0x7e2: 0x0faf, 0x7e3: 0x0873,
+ 0x7e4: 0x103b, 0x7e5: 0x075f, 0x7e6: 0x0b77, 0x7e7: 0x06d7, 0x7e8: 0x0deb, 0x7e9: 0x0ca3,
+ 0x7ea: 0x110f, 0x7eb: 0x08c7, 0x7ec: 0x09b3, 0x7ed: 0x0ffb, 0x7ee: 0x1263, 0x7ef: 0x133b,
+ 0x7f0: 0x0db7, 0x7f1: 0x13f7, 0x7f2: 0x0de3, 0x7f3: 0x0c37, 0x7f4: 0x121b, 0x7f5: 0x0c57,
+ 0x7f6: 0x0fab, 0x7f7: 0x072b, 0x7f8: 0x07a7, 0x7f9: 0x07eb, 0x7fa: 0x0d53, 0x7fb: 0x10fb,
+ 0x7fc: 0x11f3, 0x7fd: 0x1347, 0x7fe: 0x145b, 0x7ff: 0x085b,
+ // Block 0x20, offset 0x800
+ 0x800: 0x090f, 0x801: 0x0a17, 0x802: 0x0b2f, 0x803: 0x0cbf, 0x804: 0x0e7b, 0x805: 0x103f,
+ 0x806: 0x1497, 0x807: 0x157b, 0x808: 0x15cf, 0x809: 0x15e7, 0x80a: 0x0837, 0x80b: 0x0cf3,
+ 0x80c: 0x0da3, 0x80d: 0x13eb, 0x80e: 0x0afb, 0x80f: 0x0bd7, 0x810: 0x0bf3, 0x811: 0x0c83,
+ 0x812: 0x0e6b, 0x813: 0x0eb7, 0x814: 0x0f67, 0x815: 0x108b, 0x816: 0x112f, 0x817: 0x1193,
+ 0x818: 0x13db, 0x819: 0x126b, 0x81a: 0x1403, 0x81b: 0x147f, 0x81c: 0x080f, 0x81d: 0x083b,
+ 0x81e: 0x0923, 0x81f: 0x0ea7, 0x820: 0x12f3, 0x821: 0x133b, 0x822: 0x0b1b, 0x823: 0x0b8b,
+ 0x824: 0x0c4f, 0x825: 0x0daf, 0x826: 0x10d7, 0x827: 0x0f23, 0x828: 0x073b, 0x829: 0x097f,
+ 0x82a: 0x0a63, 0x82b: 0x0ac7, 0x82c: 0x0b97, 0x82d: 0x0f3f, 0x82e: 0x0f5b, 0x82f: 0x116b,
+ 0x830: 0x118b, 0x831: 0x1463, 0x832: 0x14e3, 0x833: 0x14f3, 0x834: 0x152f, 0x835: 0x0753,
+ 0x836: 0x107f, 0x837: 0x144f, 0x838: 0x14cb, 0x839: 0x0baf, 0x83a: 0x0717, 0x83b: 0x0777,
+ 0x83c: 0x0a67, 0x83d: 0x0a87, 0x83e: 0x0caf, 0x83f: 0x0d73,
+ // Block 0x21, offset 0x840
+ 0x840: 0x0ec3, 0x841: 0x0fcb, 0x842: 0x1277, 0x843: 0x1417, 0x844: 0x1623, 0x845: 0x0ce3,
+ 0x846: 0x14a3, 0x847: 0x0833, 0x848: 0x0d2f, 0x849: 0x0d3b, 0x84a: 0x0e0f, 0x84b: 0x0e47,
+ 0x84c: 0x0f4b, 0x84d: 0x0fa7, 0x84e: 0x1027, 0x84f: 0x110b, 0x850: 0x153b, 0x851: 0x07af,
+ 0x852: 0x0c03, 0x853: 0x14b3, 0x854: 0x0767, 0x855: 0x0aab, 0x856: 0x0e2f, 0x857: 0x13df,
+ 0x858: 0x0b67, 0x859: 0x0bb7, 0x85a: 0x0d43, 0x85b: 0x0f2f, 0x85c: 0x14bb, 0x85d: 0x0817,
+ 0x85e: 0x08ff, 0x85f: 0x0a97, 0x860: 0x0cd3, 0x861: 0x0d1f, 0x862: 0x0d5f, 0x863: 0x0df3,
+ 0x864: 0x0f47, 0x865: 0x0fbb, 0x866: 0x1157, 0x867: 0x12f7, 0x868: 0x1303, 0x869: 0x1457,
+ 0x86a: 0x14d7, 0x86b: 0x0883, 0x86c: 0x0e4b, 0x86d: 0x0903, 0x86e: 0x0ec7, 0x86f: 0x0f6b,
+ 0x870: 0x1287, 0x871: 0x14bf, 0x872: 0x15ab, 0x873: 0x15d3, 0x874: 0x0d37, 0x875: 0x0e27,
+ 0x876: 0x11c3, 0x877: 0x10b7, 0x878: 0x10c3, 0x879: 0x10e7, 0x87a: 0x0f17, 0x87b: 0x0e9f,
+ 0x87c: 0x1363, 0x87d: 0x0733, 0x87e: 0x122b, 0x87f: 0x081b,
+ // Block 0x22, offset 0x880
+ 0x880: 0x080b, 0x881: 0x0b0b, 0x882: 0x0c2b, 0x883: 0x10f3, 0x884: 0x0a53, 0x885: 0x0e03,
+ 0x886: 0x0cef, 0x887: 0x13e7, 0x888: 0x12e7, 0x889: 0x14ab, 0x88a: 0x1323, 0x88b: 0x0b27,
+ 0x88c: 0x0787, 0x88d: 0x095b, 0x890: 0x09af,
+ 0x892: 0x0cdf, 0x895: 0x07f7, 0x896: 0x0f1f, 0x897: 0x0fe3,
+ 0x898: 0x1047, 0x899: 0x1063, 0x89a: 0x1067, 0x89b: 0x107b, 0x89c: 0x14fb, 0x89d: 0x10eb,
+ 0x89e: 0x116f, 0x8a0: 0x128f, 0x8a2: 0x1353,
+ 0x8a5: 0x1407, 0x8a6: 0x1433,
+ 0x8aa: 0x154f, 0x8ab: 0x1553, 0x8ac: 0x1557, 0x8ad: 0x15bb, 0x8ae: 0x142b, 0x8af: 0x14c7,
+ 0x8b0: 0x0757, 0x8b1: 0x077b, 0x8b2: 0x078f, 0x8b3: 0x084b, 0x8b4: 0x0857, 0x8b5: 0x0897,
+ 0x8b6: 0x094b, 0x8b7: 0x0967, 0x8b8: 0x096f, 0x8b9: 0x09ab, 0x8ba: 0x09b7, 0x8bb: 0x0a93,
+ 0x8bc: 0x0a9b, 0x8bd: 0x0ba3, 0x8be: 0x0bcb, 0x8bf: 0x0bd3,
+ // Block 0x23, offset 0x8c0
+ 0x8c0: 0x0beb, 0x8c1: 0x0c97, 0x8c2: 0x0cc7, 0x8c3: 0x0ce7, 0x8c4: 0x0d57, 0x8c5: 0x0e1b,
+ 0x8c6: 0x0e37, 0x8c7: 0x0e67, 0x8c8: 0x0ebb, 0x8c9: 0x0edb, 0x8ca: 0x0f4f, 0x8cb: 0x102f,
+ 0x8cc: 0x104b, 0x8cd: 0x1053, 0x8ce: 0x104f, 0x8cf: 0x1057, 0x8d0: 0x105b, 0x8d1: 0x105f,
+ 0x8d2: 0x1073, 0x8d3: 0x1077, 0x8d4: 0x109b, 0x8d5: 0x10af, 0x8d6: 0x10cb, 0x8d7: 0x112f,
+ 0x8d8: 0x1137, 0x8d9: 0x113f, 0x8da: 0x1153, 0x8db: 0x117b, 0x8dc: 0x11cb, 0x8dd: 0x11ff,
+ 0x8de: 0x11ff, 0x8df: 0x1267, 0x8e0: 0x130f, 0x8e1: 0x1327, 0x8e2: 0x135b, 0x8e3: 0x135f,
+ 0x8e4: 0x13a3, 0x8e5: 0x13a7, 0x8e6: 0x13ff, 0x8e7: 0x1407, 0x8e8: 0x14db, 0x8e9: 0x151f,
+ 0x8ea: 0x1537, 0x8eb: 0x0b9b, 0x8ec: 0x171e, 0x8ed: 0x11e3,
+ 0x8f0: 0x06df, 0x8f1: 0x07e3, 0x8f2: 0x07a3, 0x8f3: 0x074b, 0x8f4: 0x078b, 0x8f5: 0x07b7,
+ 0x8f6: 0x0847, 0x8f7: 0x0863, 0x8f8: 0x094b, 0x8f9: 0x0937, 0x8fa: 0x0947, 0x8fb: 0x0963,
+ 0x8fc: 0x09af, 0x8fd: 0x09bf, 0x8fe: 0x0a03, 0x8ff: 0x0a0f,
+ // Block 0x24, offset 0x900
+ 0x900: 0x0a2b, 0x901: 0x0a3b, 0x902: 0x0b23, 0x903: 0x0b2b, 0x904: 0x0b5b, 0x905: 0x0b7b,
+ 0x906: 0x0bab, 0x907: 0x0bc3, 0x908: 0x0bb3, 0x909: 0x0bd3, 0x90a: 0x0bc7, 0x90b: 0x0beb,
+ 0x90c: 0x0c07, 0x90d: 0x0c5f, 0x90e: 0x0c6b, 0x90f: 0x0c73, 0x910: 0x0c9b, 0x911: 0x0cdf,
+ 0x912: 0x0d0f, 0x913: 0x0d13, 0x914: 0x0d27, 0x915: 0x0da7, 0x916: 0x0db7, 0x917: 0x0e0f,
+ 0x918: 0x0e5b, 0x919: 0x0e53, 0x91a: 0x0e67, 0x91b: 0x0e83, 0x91c: 0x0ebb, 0x91d: 0x1013,
+ 0x91e: 0x0edf, 0x91f: 0x0f13, 0x920: 0x0f1f, 0x921: 0x0f5f, 0x922: 0x0f7b, 0x923: 0x0f9f,
+ 0x924: 0x0fc3, 0x925: 0x0fc7, 0x926: 0x0fe3, 0x927: 0x0fe7, 0x928: 0x0ff7, 0x929: 0x100b,
+ 0x92a: 0x1007, 0x92b: 0x1037, 0x92c: 0x10b3, 0x92d: 0x10cb, 0x92e: 0x10e3, 0x92f: 0x111b,
+ 0x930: 0x112f, 0x931: 0x114b, 0x932: 0x117b, 0x933: 0x122f, 0x934: 0x1257, 0x935: 0x12cb,
+ 0x936: 0x1313, 0x937: 0x131f, 0x938: 0x1327, 0x939: 0x133f, 0x93a: 0x1353, 0x93b: 0x1343,
+ 0x93c: 0x135b, 0x93d: 0x1357, 0x93e: 0x134f, 0x93f: 0x135f,
+ // Block 0x25, offset 0x940
+ 0x940: 0x136b, 0x941: 0x13a7, 0x942: 0x13e3, 0x943: 0x1413, 0x944: 0x144b, 0x945: 0x146b,
+ 0x946: 0x14b7, 0x947: 0x14db, 0x948: 0x14fb, 0x949: 0x150f, 0x94a: 0x151f, 0x94b: 0x152b,
+ 0x94c: 0x1537, 0x94d: 0x158b, 0x94e: 0x162b, 0x94f: 0x16b5, 0x950: 0x16b0, 0x951: 0x16e2,
+ 0x952: 0x0607, 0x953: 0x062f, 0x954: 0x0633, 0x955: 0x1764, 0x956: 0x1791, 0x957: 0x1809,
+ 0x958: 0x1617, 0x959: 0x1627,
+ // Block 0x26, offset 0x980
+ 0x980: 0x06fb, 0x981: 0x06f3, 0x982: 0x0703, 0x983: 0x1647, 0x984: 0x0747, 0x985: 0x0757,
+ 0x986: 0x075b, 0x987: 0x0763, 0x988: 0x076b, 0x989: 0x076f, 0x98a: 0x077b, 0x98b: 0x0773,
+ 0x98c: 0x05b3, 0x98d: 0x165b, 0x98e: 0x078f, 0x98f: 0x0793, 0x990: 0x0797, 0x991: 0x07b3,
+ 0x992: 0x164c, 0x993: 0x05b7, 0x994: 0x079f, 0x995: 0x07bf, 0x996: 0x1656, 0x997: 0x07cf,
+ 0x998: 0x07d7, 0x999: 0x0737, 0x99a: 0x07df, 0x99b: 0x07e3, 0x99c: 0x1831, 0x99d: 0x07ff,
+ 0x99e: 0x0807, 0x99f: 0x05bf, 0x9a0: 0x081f, 0x9a1: 0x0823, 0x9a2: 0x082b, 0x9a3: 0x082f,
+ 0x9a4: 0x05c3, 0x9a5: 0x0847, 0x9a6: 0x084b, 0x9a7: 0x0857, 0x9a8: 0x0863, 0x9a9: 0x0867,
+ 0x9aa: 0x086b, 0x9ab: 0x0873, 0x9ac: 0x0893, 0x9ad: 0x0897, 0x9ae: 0x089f, 0x9af: 0x08af,
+ 0x9b0: 0x08b7, 0x9b1: 0x08bb, 0x9b2: 0x08bb, 0x9b3: 0x08bb, 0x9b4: 0x166a, 0x9b5: 0x0e93,
+ 0x9b6: 0x08cf, 0x9b7: 0x08d7, 0x9b8: 0x166f, 0x9b9: 0x08e3, 0x9ba: 0x08eb, 0x9bb: 0x08f3,
+ 0x9bc: 0x091b, 0x9bd: 0x0907, 0x9be: 0x0913, 0x9bf: 0x0917,
+ // Block 0x27, offset 0x9c0
+ 0x9c0: 0x091f, 0x9c1: 0x0927, 0x9c2: 0x092b, 0x9c3: 0x0933, 0x9c4: 0x093b, 0x9c5: 0x093f,
+ 0x9c6: 0x093f, 0x9c7: 0x0947, 0x9c8: 0x094f, 0x9c9: 0x0953, 0x9ca: 0x095f, 0x9cb: 0x0983,
+ 0x9cc: 0x0967, 0x9cd: 0x0987, 0x9ce: 0x096b, 0x9cf: 0x0973, 0x9d0: 0x080b, 0x9d1: 0x09cf,
+ 0x9d2: 0x0997, 0x9d3: 0x099b, 0x9d4: 0x099f, 0x9d5: 0x0993, 0x9d6: 0x09a7, 0x9d7: 0x09a3,
+ 0x9d8: 0x09bb, 0x9d9: 0x1674, 0x9da: 0x09d7, 0x9db: 0x09db, 0x9dc: 0x09e3, 0x9dd: 0x09ef,
+ 0x9de: 0x09f7, 0x9df: 0x0a13, 0x9e0: 0x1679, 0x9e1: 0x167e, 0x9e2: 0x0a1f, 0x9e3: 0x0a23,
+ 0x9e4: 0x0a27, 0x9e5: 0x0a1b, 0x9e6: 0x0a2f, 0x9e7: 0x05c7, 0x9e8: 0x05cb, 0x9e9: 0x0a37,
+ 0x9ea: 0x0a3f, 0x9eb: 0x0a3f, 0x9ec: 0x1683, 0x9ed: 0x0a5b, 0x9ee: 0x0a5f, 0x9ef: 0x0a63,
+ 0x9f0: 0x0a6b, 0x9f1: 0x1688, 0x9f2: 0x0a73, 0x9f3: 0x0a77, 0x9f4: 0x0b4f, 0x9f5: 0x0a7f,
+ 0x9f6: 0x05cf, 0x9f7: 0x0a8b, 0x9f8: 0x0a9b, 0x9f9: 0x0aa7, 0x9fa: 0x0aa3, 0x9fb: 0x1692,
+ 0x9fc: 0x0aaf, 0x9fd: 0x1697, 0x9fe: 0x0abb, 0x9ff: 0x0ab7,
+ // Block 0x28, offset 0xa00
+ 0xa00: 0x0abf, 0xa01: 0x0acf, 0xa02: 0x0ad3, 0xa03: 0x05d3, 0xa04: 0x0ae3, 0xa05: 0x0aeb,
+ 0xa06: 0x0aef, 0xa07: 0x0af3, 0xa08: 0x05d7, 0xa09: 0x169c, 0xa0a: 0x05db, 0xa0b: 0x0b0f,
+ 0xa0c: 0x0b13, 0xa0d: 0x0b17, 0xa0e: 0x0b1f, 0xa0f: 0x1863, 0xa10: 0x0b37, 0xa11: 0x16a6,
+ 0xa12: 0x16a6, 0xa13: 0x11d7, 0xa14: 0x0b47, 0xa15: 0x0b47, 0xa16: 0x05df, 0xa17: 0x16c9,
+ 0xa18: 0x179b, 0xa19: 0x0b57, 0xa1a: 0x0b5f, 0xa1b: 0x05e3, 0xa1c: 0x0b73, 0xa1d: 0x0b83,
+ 0xa1e: 0x0b87, 0xa1f: 0x0b8f, 0xa20: 0x0b9f, 0xa21: 0x05eb, 0xa22: 0x05e7, 0xa23: 0x0ba3,
+ 0xa24: 0x16ab, 0xa25: 0x0ba7, 0xa26: 0x0bbb, 0xa27: 0x0bbf, 0xa28: 0x0bc3, 0xa29: 0x0bbf,
+ 0xa2a: 0x0bcf, 0xa2b: 0x0bd3, 0xa2c: 0x0be3, 0xa2d: 0x0bdb, 0xa2e: 0x0bdf, 0xa2f: 0x0be7,
+ 0xa30: 0x0beb, 0xa31: 0x0bef, 0xa32: 0x0bfb, 0xa33: 0x0bff, 0xa34: 0x0c17, 0xa35: 0x0c1f,
+ 0xa36: 0x0c2f, 0xa37: 0x0c43, 0xa38: 0x16ba, 0xa39: 0x0c3f, 0xa3a: 0x0c33, 0xa3b: 0x0c4b,
+ 0xa3c: 0x0c53, 0xa3d: 0x0c67, 0xa3e: 0x16bf, 0xa3f: 0x0c6f,
+ // Block 0x29, offset 0xa40
+ 0xa40: 0x0c63, 0xa41: 0x0c5b, 0xa42: 0x05ef, 0xa43: 0x0c77, 0xa44: 0x0c7f, 0xa45: 0x0c87,
+ 0xa46: 0x0c7b, 0xa47: 0x05f3, 0xa48: 0x0c97, 0xa49: 0x0c9f, 0xa4a: 0x16c4, 0xa4b: 0x0ccb,
+ 0xa4c: 0x0cff, 0xa4d: 0x0cdb, 0xa4e: 0x05ff, 0xa4f: 0x0ce7, 0xa50: 0x05fb, 0xa51: 0x05f7,
+ 0xa52: 0x07c3, 0xa53: 0x07c7, 0xa54: 0x0d03, 0xa55: 0x0ceb, 0xa56: 0x11ab, 0xa57: 0x0663,
+ 0xa58: 0x0d0f, 0xa59: 0x0d13, 0xa5a: 0x0d17, 0xa5b: 0x0d2b, 0xa5c: 0x0d23, 0xa5d: 0x16dd,
+ 0xa5e: 0x0603, 0xa5f: 0x0d3f, 0xa60: 0x0d33, 0xa61: 0x0d4f, 0xa62: 0x0d57, 0xa63: 0x16e7,
+ 0xa64: 0x0d5b, 0xa65: 0x0d47, 0xa66: 0x0d63, 0xa67: 0x0607, 0xa68: 0x0d67, 0xa69: 0x0d6b,
+ 0xa6a: 0x0d6f, 0xa6b: 0x0d7b, 0xa6c: 0x16ec, 0xa6d: 0x0d83, 0xa6e: 0x060b, 0xa6f: 0x0d8f,
+ 0xa70: 0x16f1, 0xa71: 0x0d93, 0xa72: 0x060f, 0xa73: 0x0d9f, 0xa74: 0x0dab, 0xa75: 0x0db7,
+ 0xa76: 0x0dbb, 0xa77: 0x16f6, 0xa78: 0x168d, 0xa79: 0x16fb, 0xa7a: 0x0ddb, 0xa7b: 0x1700,
+ 0xa7c: 0x0de7, 0xa7d: 0x0def, 0xa7e: 0x0ddf, 0xa7f: 0x0dfb,
+ // Block 0x2a, offset 0xa80
+ 0xa80: 0x0e0b, 0xa81: 0x0e1b, 0xa82: 0x0e0f, 0xa83: 0x0e13, 0xa84: 0x0e1f, 0xa85: 0x0e23,
+ 0xa86: 0x1705, 0xa87: 0x0e07, 0xa88: 0x0e3b, 0xa89: 0x0e3f, 0xa8a: 0x0613, 0xa8b: 0x0e53,
+ 0xa8c: 0x0e4f, 0xa8d: 0x170a, 0xa8e: 0x0e33, 0xa8f: 0x0e6f, 0xa90: 0x170f, 0xa91: 0x1714,
+ 0xa92: 0x0e73, 0xa93: 0x0e87, 0xa94: 0x0e83, 0xa95: 0x0e7f, 0xa96: 0x0617, 0xa97: 0x0e8b,
+ 0xa98: 0x0e9b, 0xa99: 0x0e97, 0xa9a: 0x0ea3, 0xa9b: 0x1651, 0xa9c: 0x0eb3, 0xa9d: 0x1719,
+ 0xa9e: 0x0ebf, 0xa9f: 0x1723, 0xaa0: 0x0ed3, 0xaa1: 0x0edf, 0xaa2: 0x0ef3, 0xaa3: 0x1728,
+ 0xaa4: 0x0f07, 0xaa5: 0x0f0b, 0xaa6: 0x172d, 0xaa7: 0x1732, 0xaa8: 0x0f27, 0xaa9: 0x0f37,
+ 0xaaa: 0x061b, 0xaab: 0x0f3b, 0xaac: 0x061f, 0xaad: 0x061f, 0xaae: 0x0f53, 0xaaf: 0x0f57,
+ 0xab0: 0x0f5f, 0xab1: 0x0f63, 0xab2: 0x0f6f, 0xab3: 0x0623, 0xab4: 0x0f87, 0xab5: 0x1737,
+ 0xab6: 0x0fa3, 0xab7: 0x173c, 0xab8: 0x0faf, 0xab9: 0x16a1, 0xaba: 0x0fbf, 0xabb: 0x1741,
+ 0xabc: 0x1746, 0xabd: 0x174b, 0xabe: 0x0627, 0xabf: 0x062b,
+ // Block 0x2b, offset 0xac0
+ 0xac0: 0x0ff7, 0xac1: 0x1755, 0xac2: 0x1750, 0xac3: 0x175a, 0xac4: 0x175f, 0xac5: 0x0fff,
+ 0xac6: 0x1003, 0xac7: 0x1003, 0xac8: 0x100b, 0xac9: 0x0633, 0xaca: 0x100f, 0xacb: 0x0637,
+ 0xacc: 0x063b, 0xacd: 0x1769, 0xace: 0x1023, 0xacf: 0x102b, 0xad0: 0x1037, 0xad1: 0x063f,
+ 0xad2: 0x176e, 0xad3: 0x105b, 0xad4: 0x1773, 0xad5: 0x1778, 0xad6: 0x107b, 0xad7: 0x1093,
+ 0xad8: 0x0643, 0xad9: 0x109b, 0xada: 0x109f, 0xadb: 0x10a3, 0xadc: 0x177d, 0xadd: 0x1782,
+ 0xade: 0x1782, 0xadf: 0x10bb, 0xae0: 0x0647, 0xae1: 0x1787, 0xae2: 0x10cf, 0xae3: 0x10d3,
+ 0xae4: 0x064b, 0xae5: 0x178c, 0xae6: 0x10ef, 0xae7: 0x064f, 0xae8: 0x10ff, 0xae9: 0x10f7,
+ 0xaea: 0x1107, 0xaeb: 0x1796, 0xaec: 0x111f, 0xaed: 0x0653, 0xaee: 0x112b, 0xaef: 0x1133,
+ 0xaf0: 0x1143, 0xaf1: 0x0657, 0xaf2: 0x17a0, 0xaf3: 0x17a5, 0xaf4: 0x065b, 0xaf5: 0x17aa,
+ 0xaf6: 0x115b, 0xaf7: 0x17af, 0xaf8: 0x1167, 0xaf9: 0x1173, 0xafa: 0x117b, 0xafb: 0x17b4,
+ 0xafc: 0x17b9, 0xafd: 0x118f, 0xafe: 0x17be, 0xaff: 0x1197,
+ // Block 0x2c, offset 0xb00
+ 0xb00: 0x16ce, 0xb01: 0x065f, 0xb02: 0x11af, 0xb03: 0x11b3, 0xb04: 0x0667, 0xb05: 0x11b7,
+ 0xb06: 0x0a33, 0xb07: 0x17c3, 0xb08: 0x17c8, 0xb09: 0x16d3, 0xb0a: 0x16d8, 0xb0b: 0x11d7,
+ 0xb0c: 0x11db, 0xb0d: 0x13f3, 0xb0e: 0x066b, 0xb0f: 0x1207, 0xb10: 0x1203, 0xb11: 0x120b,
+ 0xb12: 0x083f, 0xb13: 0x120f, 0xb14: 0x1213, 0xb15: 0x1217, 0xb16: 0x121f, 0xb17: 0x17cd,
+ 0xb18: 0x121b, 0xb19: 0x1223, 0xb1a: 0x1237, 0xb1b: 0x123b, 0xb1c: 0x1227, 0xb1d: 0x123f,
+ 0xb1e: 0x1253, 0xb1f: 0x1267, 0xb20: 0x1233, 0xb21: 0x1247, 0xb22: 0x124b, 0xb23: 0x124f,
+ 0xb24: 0x17d2, 0xb25: 0x17dc, 0xb26: 0x17d7, 0xb27: 0x066f, 0xb28: 0x126f, 0xb29: 0x1273,
+ 0xb2a: 0x127b, 0xb2b: 0x17f0, 0xb2c: 0x127f, 0xb2d: 0x17e1, 0xb2e: 0x0673, 0xb2f: 0x0677,
+ 0xb30: 0x17e6, 0xb31: 0x17eb, 0xb32: 0x067b, 0xb33: 0x129f, 0xb34: 0x12a3, 0xb35: 0x12a7,
+ 0xb36: 0x12ab, 0xb37: 0x12b7, 0xb38: 0x12b3, 0xb39: 0x12bf, 0xb3a: 0x12bb, 0xb3b: 0x12cb,
+ 0xb3c: 0x12c3, 0xb3d: 0x12c7, 0xb3e: 0x12cf, 0xb3f: 0x067f,
+ // Block 0x2d, offset 0xb40
+ 0xb40: 0x12d7, 0xb41: 0x12db, 0xb42: 0x0683, 0xb43: 0x12eb, 0xb44: 0x12ef, 0xb45: 0x17f5,
+ 0xb46: 0x12fb, 0xb47: 0x12ff, 0xb48: 0x0687, 0xb49: 0x130b, 0xb4a: 0x05bb, 0xb4b: 0x17fa,
+ 0xb4c: 0x17ff, 0xb4d: 0x068b, 0xb4e: 0x068f, 0xb4f: 0x1337, 0xb50: 0x134f, 0xb51: 0x136b,
+ 0xb52: 0x137b, 0xb53: 0x1804, 0xb54: 0x138f, 0xb55: 0x1393, 0xb56: 0x13ab, 0xb57: 0x13b7,
+ 0xb58: 0x180e, 0xb59: 0x1660, 0xb5a: 0x13c3, 0xb5b: 0x13bf, 0xb5c: 0x13cb, 0xb5d: 0x1665,
+ 0xb5e: 0x13d7, 0xb5f: 0x13e3, 0xb60: 0x1813, 0xb61: 0x1818, 0xb62: 0x1423, 0xb63: 0x142f,
+ 0xb64: 0x1437, 0xb65: 0x181d, 0xb66: 0x143b, 0xb67: 0x1467, 0xb68: 0x1473, 0xb69: 0x1477,
+ 0xb6a: 0x146f, 0xb6b: 0x1483, 0xb6c: 0x1487, 0xb6d: 0x1822, 0xb6e: 0x1493, 0xb6f: 0x0693,
+ 0xb70: 0x149b, 0xb71: 0x1827, 0xb72: 0x0697, 0xb73: 0x14d3, 0xb74: 0x0ac3, 0xb75: 0x14eb,
+ 0xb76: 0x182c, 0xb77: 0x1836, 0xb78: 0x069b, 0xb79: 0x069f, 0xb7a: 0x1513, 0xb7b: 0x183b,
+ 0xb7c: 0x06a3, 0xb7d: 0x1840, 0xb7e: 0x152b, 0xb7f: 0x152b,
+ // Block 0x2e, offset 0xb80
+ 0xb80: 0x1533, 0xb81: 0x1845, 0xb82: 0x154b, 0xb83: 0x06a7, 0xb84: 0x155b, 0xb85: 0x1567,
+ 0xb86: 0x156f, 0xb87: 0x1577, 0xb88: 0x06ab, 0xb89: 0x184a, 0xb8a: 0x158b, 0xb8b: 0x15a7,
+ 0xb8c: 0x15b3, 0xb8d: 0x06af, 0xb8e: 0x06b3, 0xb8f: 0x15b7, 0xb90: 0x184f, 0xb91: 0x06b7,
+ 0xb92: 0x1854, 0xb93: 0x1859, 0xb94: 0x185e, 0xb95: 0x15db, 0xb96: 0x06bb, 0xb97: 0x15ef,
+ 0xb98: 0x15f7, 0xb99: 0x15fb, 0xb9a: 0x1603, 0xb9b: 0x160b, 0xb9c: 0x1613, 0xb9d: 0x1868,
+}
+
+// nfcIndex: 22 blocks, 1408 entries, 1408 bytes
+// Block 0 is the zero block.
+var nfcIndex = [1408]uint8{
+ // Block 0x0, offset 0x0
+ // Block 0x1, offset 0x40
+ // Block 0x2, offset 0x80
+ // Block 0x3, offset 0xc0
+ 0xc2: 0x2d, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2e, 0xc7: 0x04,
+ 0xc8: 0x05, 0xca: 0x2f, 0xcb: 0x30, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x31,
+ 0xd0: 0x09, 0xd1: 0x32, 0xd2: 0x33, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x34,
+ 0xd8: 0x35, 0xd9: 0x0c, 0xdb: 0x36, 0xdc: 0x37, 0xdd: 0x38, 0xdf: 0x39,
+ 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
+ 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
+ 0xf0: 0x13,
+ // Block 0x4, offset 0x100
+ 0x120: 0x3a, 0x121: 0x3b, 0x123: 0x3c, 0x124: 0x3d, 0x125: 0x3e, 0x126: 0x3f, 0x127: 0x40,
+ 0x128: 0x41, 0x129: 0x42, 0x12a: 0x43, 0x12b: 0x44, 0x12c: 0x3f, 0x12d: 0x45, 0x12e: 0x46, 0x12f: 0x47,
+ 0x131: 0x48, 0x132: 0x49, 0x133: 0x4a, 0x134: 0x4b, 0x135: 0x4c, 0x137: 0x4d,
+ 0x138: 0x4e, 0x139: 0x4f, 0x13a: 0x50, 0x13b: 0x51, 0x13c: 0x52, 0x13d: 0x53, 0x13e: 0x54, 0x13f: 0x55,
+ // Block 0x5, offset 0x140
+ 0x140: 0x56, 0x142: 0x57, 0x144: 0x58, 0x145: 0x59, 0x146: 0x5a, 0x147: 0x5b,
+ 0x14d: 0x5c,
+ 0x15c: 0x5d, 0x15f: 0x5e,
+ 0x162: 0x5f, 0x164: 0x60,
+ 0x168: 0x61, 0x169: 0x62, 0x16a: 0x63, 0x16c: 0x0d, 0x16d: 0x64, 0x16e: 0x65, 0x16f: 0x66,
+ 0x170: 0x67, 0x173: 0x68, 0x177: 0x0e,
+ 0x178: 0x0f, 0x179: 0x10, 0x17a: 0x11, 0x17b: 0x12, 0x17c: 0x13, 0x17d: 0x14, 0x17e: 0x15, 0x17f: 0x16,
+ // Block 0x6, offset 0x180
+ 0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d,
+ 0x188: 0x6e, 0x189: 0x17, 0x18a: 0x18, 0x18b: 0x6f, 0x18c: 0x70,
+ 0x1ab: 0x71,
+ 0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74,
+ // Block 0x7, offset 0x1c0
+ 0x1c0: 0x75, 0x1c1: 0x19, 0x1c2: 0x1a, 0x1c3: 0x1b, 0x1c4: 0x76, 0x1c5: 0x77,
+ 0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a,
+ // Block 0x8, offset 0x200
+ 0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d,
+ 0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83,
+ 0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86,
+ 0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87,
+ 0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88,
+ // Block 0x9, offset 0x240
+ 0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89,
+ 0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a,
+ 0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b,
+ 0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c,
+ 0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d,
+ 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87,
+ 0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88,
+ 0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89,
+ // Block 0xa, offset 0x280
+ 0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a,
+ 0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b,
+ 0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c,
+ 0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d,
+ 0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87,
+ 0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88,
+ 0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89,
+ 0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a,
+ // Block 0xb, offset 0x2c0
+ 0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b,
+ 0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c,
+ 0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d,
+ 0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e,
+ // Block 0xc, offset 0x300
+ 0x324: 0x1c, 0x325: 0x1d, 0x326: 0x1e, 0x327: 0x1f,
+ 0x328: 0x20, 0x329: 0x21, 0x32a: 0x22, 0x32b: 0x23, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91,
+ 0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95,
+ 0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b,
+ // Block 0xd, offset 0x340
+ 0x347: 0x9c,
+ 0x34b: 0x9d, 0x34d: 0x9e,
+ 0x368: 0x9f, 0x36b: 0xa0,
+ // Block 0xe, offset 0x380
+ 0x381: 0xa1, 0x382: 0xa2, 0x384: 0xa3, 0x385: 0x82, 0x387: 0xa4,
+ 0x388: 0xa5, 0x38b: 0xa6, 0x38c: 0x3f, 0x38d: 0xa7,
+ 0x391: 0xa8, 0x392: 0xa9, 0x393: 0xaa, 0x396: 0xab, 0x397: 0xac,
+ 0x398: 0x73, 0x39a: 0xad, 0x39c: 0xae,
+ 0x3a8: 0xaf, 0x3a9: 0xb0, 0x3aa: 0xb1,
+ 0x3b0: 0x73, 0x3b5: 0xb2,
+ // Block 0xf, offset 0x3c0
+ 0x3eb: 0xb3, 0x3ec: 0xb4,
+ // Block 0x10, offset 0x400
+ 0x432: 0xb5,
+ // Block 0x11, offset 0x440
+ 0x445: 0xb6, 0x446: 0xb7, 0x447: 0xb8,
+ 0x449: 0xb9,
+ // Block 0x12, offset 0x480
+ 0x480: 0xba,
+ 0x4a3: 0xbb, 0x4a5: 0xbc,
+ // Block 0x13, offset 0x4c0
+ 0x4c8: 0xbd,
+ // Block 0x14, offset 0x500
+ 0x520: 0x24, 0x521: 0x25, 0x522: 0x26, 0x523: 0x27, 0x524: 0x28, 0x525: 0x29, 0x526: 0x2a, 0x527: 0x2b,
+ 0x528: 0x2c,
+ // Block 0x15, offset 0x540
+ 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
+ 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
+ 0x56f: 0x12,
+}
+
+// nfcSparseOffset: 145 entries, 290 bytes
+var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x62, 0x67, 0x69, 0x7a, 0x82, 0x89, 0x8c, 0x93, 0x97, 0x9b, 0x9d, 0x9f, 0xa8, 0xac, 0xb3, 0xb8, 0xbb, 0xc5, 0xc8, 0xcf, 0xd7, 0xda, 0xdc, 0xde, 0xe0, 0xe5, 0xf6, 0x102, 0x104, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x119, 0x11c, 0x11e, 0x121, 0x124, 0x128, 0x12d, 0x136, 0x138, 0x13b, 0x13d, 0x148, 0x14c, 0x15a, 0x15d, 0x163, 0x169, 0x174, 0x178, 0x17a, 0x17c, 0x17e, 0x180, 0x182, 0x188, 0x18c, 0x18e, 0x190, 0x198, 0x19c, 0x19f, 0x1a1, 0x1a3, 0x1a5, 0x1a8, 0x1aa, 0x1ac, 0x1ae, 0x1b0, 0x1b6, 0x1b9, 0x1bb, 0x1c2, 0x1c8, 0x1ce, 0x1d6, 0x1dc, 0x1e2, 0x1e8, 0x1ec, 0x1fa, 0x203, 0x206, 0x209, 0x20b, 0x20e, 0x210, 0x214, 0x219, 0x21b, 0x21d, 0x222, 0x228, 0x22a, 0x22c, 0x22e, 0x234, 0x237, 0x23a, 0x242, 0x249, 0x24c, 0x24f, 0x251, 0x259, 0x25c, 0x263, 0x266, 0x26c, 0x26e, 0x271, 0x273, 0x275, 0x277, 0x279, 0x27c, 0x27e, 0x280, 0x282, 0x28f, 0x299, 0x29b, 0x29d, 0x2a3, 0x2a5, 0x2a8}
+
+// nfcSparseValues: 682 entries, 2728 bytes
+var nfcSparseValues = [682]valueRange{
+ // Block 0x0, offset 0x0
+ {value: 0x0000, lo: 0x04},
+ {value: 0xa100, lo: 0xa8, hi: 0xa8},
+ {value: 0x8100, lo: 0xaf, hi: 0xaf},
+ {value: 0x8100, lo: 0xb4, hi: 0xb4},
+ {value: 0x8100, lo: 0xb8, hi: 0xb8},
+ // Block 0x1, offset 0x5
+ {value: 0x0091, lo: 0x03},
+ {value: 0x46e2, lo: 0xa0, hi: 0xa1},
+ {value: 0x4714, lo: 0xaf, hi: 0xb0},
+ {value: 0xa000, lo: 0xb7, hi: 0xb7},
+ // Block 0x2, offset 0x9
+ {value: 0x0000, lo: 0x01},
+ {value: 0xa000, lo: 0x92, hi: 0x92},
+ // Block 0x3, offset 0xb
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8100, lo: 0x98, hi: 0x9d},
+ // Block 0x4, offset 0xd
+ {value: 0x0006, lo: 0x0a},
+ {value: 0xa000, lo: 0x81, hi: 0x81},
+ {value: 0xa000, lo: 0x85, hi: 0x85},
+ {value: 0xa000, lo: 0x89, hi: 0x89},
+ {value: 0x4840, lo: 0x8a, hi: 0x8a},
+ {value: 0x485e, lo: 0x8b, hi: 0x8b},
+ {value: 0x36c7, lo: 0x8c, hi: 0x8c},
+ {value: 0x36df, lo: 0x8d, hi: 0x8d},
+ {value: 0x4876, lo: 0x8e, hi: 0x8e},
+ {value: 0xa000, lo: 0x92, hi: 0x92},
+ {value: 0x36fd, lo: 0x93, hi: 0x94},
+ // Block 0x5, offset 0x18
+ {value: 0x0000, lo: 0x0f},
+ {value: 0xa000, lo: 0x83, hi: 0x83},
+ {value: 0xa000, lo: 0x87, hi: 0x87},
+ {value: 0xa000, lo: 0x8b, hi: 0x8b},
+ {value: 0xa000, lo: 0x8d, hi: 0x8d},
+ {value: 0x37a5, lo: 0x90, hi: 0x90},
+ {value: 0x37b1, lo: 0x91, hi: 0x91},
+ {value: 0x379f, lo: 0x93, hi: 0x93},
+ {value: 0xa000, lo: 0x96, hi: 0x96},
+ {value: 0x3817, lo: 0x97, hi: 0x97},
+ {value: 0x37e1, lo: 0x9c, hi: 0x9c},
+ {value: 0x37c9, lo: 0x9d, hi: 0x9d},
+ {value: 0x37f3, lo: 0x9e, hi: 0x9e},
+ {value: 0xa000, lo: 0xb4, hi: 0xb5},
+ {value: 0x381d, lo: 0xb6, hi: 0xb6},
+ {value: 0x3823, lo: 0xb7, hi: 0xb7},
+ // Block 0x6, offset 0x28
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0x83, hi: 0x87},
+ // Block 0x7, offset 0x2a
+ {value: 0x0001, lo: 0x04},
+ {value: 0x8113, lo: 0x81, hi: 0x82},
+ {value: 0x8132, lo: 0x84, hi: 0x84},
+ {value: 0x812d, lo: 0x85, hi: 0x85},
+ {value: 0x810d, lo: 0x87, hi: 0x87},
+ // Block 0x8, offset 0x2f
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x8132, lo: 0x90, hi: 0x97},
+ {value: 0x8119, lo: 0x98, hi: 0x98},
+ {value: 0x811a, lo: 0x99, hi: 0x99},
+ {value: 0x811b, lo: 0x9a, hi: 0x9a},
+ {value: 0x3841, lo: 0xa2, hi: 0xa2},
+ {value: 0x3847, lo: 0xa3, hi: 0xa3},
+ {value: 0x3853, lo: 0xa4, hi: 0xa4},
+ {value: 0x384d, lo: 0xa5, hi: 0xa5},
+ {value: 0x3859, lo: 0xa6, hi: 0xa6},
+ {value: 0xa000, lo: 0xa7, hi: 0xa7},
+ // Block 0x9, offset 0x3a
+ {value: 0x0000, lo: 0x0e},
+ {value: 0x386b, lo: 0x80, hi: 0x80},
+ {value: 0xa000, lo: 0x81, hi: 0x81},
+ {value: 0x385f, lo: 0x82, hi: 0x82},
+ {value: 0xa000, lo: 0x92, hi: 0x92},
+ {value: 0x3865, lo: 0x93, hi: 0x93},
+ {value: 0xa000, lo: 0x95, hi: 0x95},
+ {value: 0x8132, lo: 0x96, hi: 0x9c},
+ {value: 0x8132, lo: 0x9f, hi: 0xa2},
+ {value: 0x812d, lo: 0xa3, hi: 0xa3},
+ {value: 0x8132, lo: 0xa4, hi: 0xa4},
+ {value: 0x8132, lo: 0xa7, hi: 0xa8},
+ {value: 0x812d, lo: 0xaa, hi: 0xaa},
+ {value: 0x8132, lo: 0xab, hi: 0xac},
+ {value: 0x812d, lo: 0xad, hi: 0xad},
+ // Block 0xa, offset 0x49
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x811f, lo: 0x91, hi: 0x91},
+ {value: 0x8132, lo: 0xb0, hi: 0xb0},
+ {value: 0x812d, lo: 0xb1, hi: 0xb1},
+ {value: 0x8132, lo: 0xb2, hi: 0xb3},
+ {value: 0x812d, lo: 0xb4, hi: 0xb4},
+ {value: 0x8132, lo: 0xb5, hi: 0xb6},
+ {value: 0x812d, lo: 0xb7, hi: 0xb9},
+ {value: 0x8132, lo: 0xba, hi: 0xba},
+ {value: 0x812d, lo: 0xbb, hi: 0xbc},
+ {value: 0x8132, lo: 0xbd, hi: 0xbd},
+ {value: 0x812d, lo: 0xbe, hi: 0xbe},
+ {value: 0x8132, lo: 0xbf, hi: 0xbf},
+ // Block 0xb, offset 0x56
+ {value: 0x0005, lo: 0x07},
+ {value: 0x8132, lo: 0x80, hi: 0x80},
+ {value: 0x8132, lo: 0x81, hi: 0x81},
+ {value: 0x812d, lo: 0x82, hi: 0x83},
+ {value: 0x812d, lo: 0x84, hi: 0x85},
+ {value: 0x812d, lo: 0x86, hi: 0x87},
+ {value: 0x812d, lo: 0x88, hi: 0x89},
+ {value: 0x8132, lo: 0x8a, hi: 0x8a},
+ // Block 0xc, offset 0x5e
+ {value: 0x0000, lo: 0x03},
+ {value: 0x8132, lo: 0xab, hi: 0xb1},
+ {value: 0x812d, lo: 0xb2, hi: 0xb2},
+ {value: 0x8132, lo: 0xb3, hi: 0xb3},
+ // Block 0xd, offset 0x62
+ {value: 0x0000, lo: 0x04},
+ {value: 0x8132, lo: 0x96, hi: 0x99},
+ {value: 0x8132, lo: 0x9b, hi: 0xa3},
+ {value: 0x8132, lo: 0xa5, hi: 0xa7},
+ {value: 0x8132, lo: 0xa9, hi: 0xad},
+ // Block 0xe, offset 0x67
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0x99, hi: 0x9b},
+ // Block 0xf, offset 0x69
+ {value: 0x0000, lo: 0x10},
+ {value: 0x8132, lo: 0x94, hi: 0xa1},
+ {value: 0x812d, lo: 0xa3, hi: 0xa3},
+ {value: 0x8132, lo: 0xa4, hi: 0xa5},
+ {value: 0x812d, lo: 0xa6, hi: 0xa6},
+ {value: 0x8132, lo: 0xa7, hi: 0xa8},
+ {value: 0x812d, lo: 0xa9, hi: 0xa9},
+ {value: 0x8132, lo: 0xaa, hi: 0xac},
+ {value: 0x812d, lo: 0xad, hi: 0xaf},
+ {value: 0x8116, lo: 0xb0, hi: 0xb0},
+ {value: 0x8117, lo: 0xb1, hi: 0xb1},
+ {value: 0x8118, lo: 0xb2, hi: 0xb2},
+ {value: 0x8132, lo: 0xb3, hi: 0xb5},
+ {value: 0x812d, lo: 0xb6, hi: 0xb6},
+ {value: 0x8132, lo: 0xb7, hi: 0xb8},
+ {value: 0x812d, lo: 0xb9, hi: 0xba},
+ {value: 0x8132, lo: 0xbb, hi: 0xbf},
+ // Block 0x10, offset 0x7a
+ {value: 0x0000, lo: 0x07},
+ {value: 0xa000, lo: 0xa8, hi: 0xa8},
+ {value: 0x3ed8, lo: 0xa9, hi: 0xa9},
+ {value: 0xa000, lo: 0xb0, hi: 0xb0},
+ {value: 0x3ee0, lo: 0xb1, hi: 0xb1},
+ {value: 0xa000, lo: 0xb3, hi: 0xb3},
+ {value: 0x3ee8, lo: 0xb4, hi: 0xb4},
+ {value: 0x9902, lo: 0xbc, hi: 0xbc},
+ // Block 0x11, offset 0x82
+ {value: 0x0008, lo: 0x06},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x8132, lo: 0x91, hi: 0x91},
+ {value: 0x812d, lo: 0x92, hi: 0x92},
+ {value: 0x8132, lo: 0x93, hi: 0x93},
+ {value: 0x8132, lo: 0x94, hi: 0x94},
+ {value: 0x451c, lo: 0x98, hi: 0x9f},
+ // Block 0x12, offset 0x89
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8102, lo: 0xbc, hi: 0xbc},
+ {value: 0x9900, lo: 0xbe, hi: 0xbe},
+ // Block 0x13, offset 0x8c
+ {value: 0x0008, lo: 0x06},
+ {value: 0xa000, lo: 0x87, hi: 0x87},
+ {value: 0x2c9e, lo: 0x8b, hi: 0x8c},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x9900, lo: 0x97, hi: 0x97},
+ {value: 0x455c, lo: 0x9c, hi: 0x9d},
+ {value: 0x456c, lo: 0x9f, hi: 0x9f},
+ // Block 0x14, offset 0x93
+ {value: 0x0000, lo: 0x03},
+ {value: 0x4594, lo: 0xb3, hi: 0xb3},
+ {value: 0x459c, lo: 0xb6, hi: 0xb6},
+ {value: 0x8102, lo: 0xbc, hi: 0xbc},
+ // Block 0x15, offset 0x97
+ {value: 0x0008, lo: 0x03},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x4574, lo: 0x99, hi: 0x9b},
+ {value: 0x458c, lo: 0x9e, hi: 0x9e},
+ // Block 0x16, offset 0x9b
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8102, lo: 0xbc, hi: 0xbc},
+ // Block 0x17, offset 0x9d
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ // Block 0x18, offset 0x9f
+ {value: 0x0000, lo: 0x08},
+ {value: 0xa000, lo: 0x87, hi: 0x87},
+ {value: 0x2cb6, lo: 0x88, hi: 0x88},
+ {value: 0x2cae, lo: 0x8b, hi: 0x8b},
+ {value: 0x2cbe, lo: 0x8c, hi: 0x8c},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x9900, lo: 0x96, hi: 0x97},
+ {value: 0x45a4, lo: 0x9c, hi: 0x9c},
+ {value: 0x45ac, lo: 0x9d, hi: 0x9d},
+ // Block 0x19, offset 0xa8
+ {value: 0x0000, lo: 0x03},
+ {value: 0xa000, lo: 0x92, hi: 0x92},
+ {value: 0x2cc6, lo: 0x94, hi: 0x94},
+ {value: 0x9900, lo: 0xbe, hi: 0xbe},
+ // Block 0x1a, offset 0xac
+ {value: 0x0000, lo: 0x06},
+ {value: 0xa000, lo: 0x86, hi: 0x87},
+ {value: 0x2cce, lo: 0x8a, hi: 0x8a},
+ {value: 0x2cde, lo: 0x8b, hi: 0x8b},
+ {value: 0x2cd6, lo: 0x8c, hi: 0x8c},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x9900, lo: 0x97, hi: 0x97},
+ // Block 0x1b, offset 0xb3
+ {value: 0x1801, lo: 0x04},
+ {value: 0xa000, lo: 0x86, hi: 0x86},
+ {value: 0x3ef0, lo: 0x88, hi: 0x88},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x8120, lo: 0x95, hi: 0x96},
+ // Block 0x1c, offset 0xb8
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8102, lo: 0xbc, hi: 0xbc},
+ {value: 0xa000, lo: 0xbf, hi: 0xbf},
+ // Block 0x1d, offset 0xbb
+ {value: 0x0000, lo: 0x09},
+ {value: 0x2ce6, lo: 0x80, hi: 0x80},
+ {value: 0x9900, lo: 0x82, hi: 0x82},
+ {value: 0xa000, lo: 0x86, hi: 0x86},
+ {value: 0x2cee, lo: 0x87, hi: 0x87},
+ {value: 0x2cf6, lo: 0x88, hi: 0x88},
+ {value: 0x2f50, lo: 0x8a, hi: 0x8a},
+ {value: 0x2dd8, lo: 0x8b, hi: 0x8b},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x9900, lo: 0x95, hi: 0x96},
+ // Block 0x1e, offset 0xc5
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0xbb, hi: 0xbc},
+ {value: 0x9900, lo: 0xbe, hi: 0xbe},
+ // Block 0x1f, offset 0xc8
+ {value: 0x0000, lo: 0x06},
+ {value: 0xa000, lo: 0x86, hi: 0x87},
+ {value: 0x2cfe, lo: 0x8a, hi: 0x8a},
+ {value: 0x2d0e, lo: 0x8b, hi: 0x8b},
+ {value: 0x2d06, lo: 0x8c, hi: 0x8c},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x9900, lo: 0x97, hi: 0x97},
+ // Block 0x20, offset 0xcf
+ {value: 0x6bea, lo: 0x07},
+ {value: 0x9904, lo: 0x8a, hi: 0x8a},
+ {value: 0x9900, lo: 0x8f, hi: 0x8f},
+ {value: 0xa000, lo: 0x99, hi: 0x99},
+ {value: 0x3ef8, lo: 0x9a, hi: 0x9a},
+ {value: 0x2f58, lo: 0x9c, hi: 0x9c},
+ {value: 0x2de3, lo: 0x9d, hi: 0x9d},
+ {value: 0x2d16, lo: 0x9e, hi: 0x9f},
+ // Block 0x21, offset 0xd7
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8122, lo: 0xb8, hi: 0xb9},
+ {value: 0x8104, lo: 0xba, hi: 0xba},
+ // Block 0x22, offset 0xda
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8123, lo: 0x88, hi: 0x8b},
+ // Block 0x23, offset 0xdc
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8124, lo: 0xb8, hi: 0xb9},
+ // Block 0x24, offset 0xde
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8125, lo: 0x88, hi: 0x8b},
+ // Block 0x25, offset 0xe0
+ {value: 0x0000, lo: 0x04},
+ {value: 0x812d, lo: 0x98, hi: 0x99},
+ {value: 0x812d, lo: 0xb5, hi: 0xb5},
+ {value: 0x812d, lo: 0xb7, hi: 0xb7},
+ {value: 0x812b, lo: 0xb9, hi: 0xb9},
+ // Block 0x26, offset 0xe5
+ {value: 0x0000, lo: 0x10},
+ {value: 0x2644, lo: 0x83, hi: 0x83},
+ {value: 0x264b, lo: 0x8d, hi: 0x8d},
+ {value: 0x2652, lo: 0x92, hi: 0x92},
+ {value: 0x2659, lo: 0x97, hi: 0x97},
+ {value: 0x2660, lo: 0x9c, hi: 0x9c},
+ {value: 0x263d, lo: 0xa9, hi: 0xa9},
+ {value: 0x8126, lo: 0xb1, hi: 0xb1},
+ {value: 0x8127, lo: 0xb2, hi: 0xb2},
+ {value: 0x4a84, lo: 0xb3, hi: 0xb3},
+ {value: 0x8128, lo: 0xb4, hi: 0xb4},
+ {value: 0x4a8d, lo: 0xb5, hi: 0xb5},
+ {value: 0x45b4, lo: 0xb6, hi: 0xb6},
+ {value: 0x8200, lo: 0xb7, hi: 0xb7},
+ {value: 0x45bc, lo: 0xb8, hi: 0xb8},
+ {value: 0x8200, lo: 0xb9, hi: 0xb9},
+ {value: 0x8127, lo: 0xba, hi: 0xbd},
+ // Block 0x27, offset 0xf6
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x8127, lo: 0x80, hi: 0x80},
+ {value: 0x4a96, lo: 0x81, hi: 0x81},
+ {value: 0x8132, lo: 0x82, hi: 0x83},
+ {value: 0x8104, lo: 0x84, hi: 0x84},
+ {value: 0x8132, lo: 0x86, hi: 0x87},
+ {value: 0x266e, lo: 0x93, hi: 0x93},
+ {value: 0x2675, lo: 0x9d, hi: 0x9d},
+ {value: 0x267c, lo: 0xa2, hi: 0xa2},
+ {value: 0x2683, lo: 0xa7, hi: 0xa7},
+ {value: 0x268a, lo: 0xac, hi: 0xac},
+ {value: 0x2667, lo: 0xb9, hi: 0xb9},
+ // Block 0x28, offset 0x102
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0x86, hi: 0x86},
+ // Block 0x29, offset 0x104
+ {value: 0x0000, lo: 0x05},
+ {value: 0xa000, lo: 0xa5, hi: 0xa5},
+ {value: 0x2d1e, lo: 0xa6, hi: 0xa6},
+ {value: 0x9900, lo: 0xae, hi: 0xae},
+ {value: 0x8102, lo: 0xb7, hi: 0xb7},
+ {value: 0x8104, lo: 0xb9, hi: 0xba},
+ // Block 0x2a, offset 0x10a
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0x8d, hi: 0x8d},
+ // Block 0x2b, offset 0x10c
+ {value: 0x0000, lo: 0x01},
+ {value: 0xa000, lo: 0x80, hi: 0x92},
+ // Block 0x2c, offset 0x10e
+ {value: 0x0000, lo: 0x01},
+ {value: 0xb900, lo: 0xa1, hi: 0xb5},
+ // Block 0x2d, offset 0x110
+ {value: 0x0000, lo: 0x01},
+ {value: 0x9900, lo: 0xa8, hi: 0xbf},
+ // Block 0x2e, offset 0x112
+ {value: 0x0000, lo: 0x01},
+ {value: 0x9900, lo: 0x80, hi: 0x82},
+ // Block 0x2f, offset 0x114
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0x9d, hi: 0x9f},
+ // Block 0x30, offset 0x116
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x94, hi: 0x94},
+ {value: 0x8104, lo: 0xb4, hi: 0xb4},
+ // Block 0x31, offset 0x119
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x92, hi: 0x92},
+ {value: 0x8132, lo: 0x9d, hi: 0x9d},
+ // Block 0x32, offset 0x11c
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8131, lo: 0xa9, hi: 0xa9},
+ // Block 0x33, offset 0x11e
+ {value: 0x0004, lo: 0x02},
+ {value: 0x812e, lo: 0xb9, hi: 0xba},
+ {value: 0x812d, lo: 0xbb, hi: 0xbb},
+ // Block 0x34, offset 0x121
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8132, lo: 0x97, hi: 0x97},
+ {value: 0x812d, lo: 0x98, hi: 0x98},
+ // Block 0x35, offset 0x124
+ {value: 0x0000, lo: 0x03},
+ {value: 0x8104, lo: 0xa0, hi: 0xa0},
+ {value: 0x8132, lo: 0xb5, hi: 0xbc},
+ {value: 0x812d, lo: 0xbf, hi: 0xbf},
+ // Block 0x36, offset 0x128
+ {value: 0x0000, lo: 0x04},
+ {value: 0x8132, lo: 0xb0, hi: 0xb4},
+ {value: 0x812d, lo: 0xb5, hi: 0xba},
+ {value: 0x8132, lo: 0xbb, hi: 0xbc},
+ {value: 0x812d, lo: 0xbd, hi: 0xbd},
+ // Block 0x37, offset 0x12d
+ {value: 0x0000, lo: 0x08},
+ {value: 0x2d66, lo: 0x80, hi: 0x80},
+ {value: 0x2d6e, lo: 0x81, hi: 0x81},
+ {value: 0xa000, lo: 0x82, hi: 0x82},
+ {value: 0x2d76, lo: 0x83, hi: 0x83},
+ {value: 0x8104, lo: 0x84, hi: 0x84},
+ {value: 0x8132, lo: 0xab, hi: 0xab},
+ {value: 0x812d, lo: 0xac, hi: 0xac},
+ {value: 0x8132, lo: 0xad, hi: 0xb3},
+ // Block 0x38, offset 0x136
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0xaa, hi: 0xab},
+ // Block 0x39, offset 0x138
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8102, lo: 0xa6, hi: 0xa6},
+ {value: 0x8104, lo: 0xb2, hi: 0xb3},
+ // Block 0x3a, offset 0x13b
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8102, lo: 0xb7, hi: 0xb7},
+ // Block 0x3b, offset 0x13d
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x8132, lo: 0x90, hi: 0x92},
+ {value: 0x8101, lo: 0x94, hi: 0x94},
+ {value: 0x812d, lo: 0x95, hi: 0x99},
+ {value: 0x8132, lo: 0x9a, hi: 0x9b},
+ {value: 0x812d, lo: 0x9c, hi: 0x9f},
+ {value: 0x8132, lo: 0xa0, hi: 0xa0},
+ {value: 0x8101, lo: 0xa2, hi: 0xa8},
+ {value: 0x812d, lo: 0xad, hi: 0xad},
+ {value: 0x8132, lo: 0xb4, hi: 0xb4},
+ {value: 0x8132, lo: 0xb8, hi: 0xb9},
+ // Block 0x3c, offset 0x148
+ {value: 0x0004, lo: 0x03},
+ {value: 0x0433, lo: 0x80, hi: 0x81},
+ {value: 0x8100, lo: 0x97, hi: 0x97},
+ {value: 0x8100, lo: 0xbe, hi: 0xbe},
+ // Block 0x3d, offset 0x14c
+ {value: 0x0000, lo: 0x0d},
+ {value: 0x8132, lo: 0x90, hi: 0x91},
+ {value: 0x8101, lo: 0x92, hi: 0x93},
+ {value: 0x8132, lo: 0x94, hi: 0x97},
+ {value: 0x8101, lo: 0x98, hi: 0x9a},
+ {value: 0x8132, lo: 0x9b, hi: 0x9c},
+ {value: 0x8132, lo: 0xa1, hi: 0xa1},
+ {value: 0x8101, lo: 0xa5, hi: 0xa6},
+ {value: 0x8132, lo: 0xa7, hi: 0xa7},
+ {value: 0x812d, lo: 0xa8, hi: 0xa8},
+ {value: 0x8132, lo: 0xa9, hi: 0xa9},
+ {value: 0x8101, lo: 0xaa, hi: 0xab},
+ {value: 0x812d, lo: 0xac, hi: 0xaf},
+ {value: 0x8132, lo: 0xb0, hi: 0xb0},
+ // Block 0x3e, offset 0x15a
+ {value: 0x427b, lo: 0x02},
+ {value: 0x01b8, lo: 0xa6, hi: 0xa6},
+ {value: 0x0057, lo: 0xaa, hi: 0xab},
+ // Block 0x3f, offset 0x15d
+ {value: 0x0007, lo: 0x05},
+ {value: 0xa000, lo: 0x90, hi: 0x90},
+ {value: 0xa000, lo: 0x92, hi: 0x92},
+ {value: 0xa000, lo: 0x94, hi: 0x94},
+ {value: 0x3bb9, lo: 0x9a, hi: 0x9b},
+ {value: 0x3bc7, lo: 0xae, hi: 0xae},
+ // Block 0x40, offset 0x163
+ {value: 0x000e, lo: 0x05},
+ {value: 0x3bce, lo: 0x8d, hi: 0x8e},
+ {value: 0x3bd5, lo: 0x8f, hi: 0x8f},
+ {value: 0xa000, lo: 0x90, hi: 0x90},
+ {value: 0xa000, lo: 0x92, hi: 0x92},
+ {value: 0xa000, lo: 0x94, hi: 0x94},
+ // Block 0x41, offset 0x169
+ {value: 0x6408, lo: 0x0a},
+ {value: 0xa000, lo: 0x83, hi: 0x83},
+ {value: 0x3be3, lo: 0x84, hi: 0x84},
+ {value: 0xa000, lo: 0x88, hi: 0x88},
+ {value: 0x3bea, lo: 0x89, hi: 0x89},
+ {value: 0xa000, lo: 0x8b, hi: 0x8b},
+ {value: 0x3bf1, lo: 0x8c, hi: 0x8c},
+ {value: 0xa000, lo: 0xa3, hi: 0xa3},
+ {value: 0x3bf8, lo: 0xa4, hi: 0xa5},
+ {value: 0x3bff, lo: 0xa6, hi: 0xa6},
+ {value: 0xa000, lo: 0xbc, hi: 0xbc},
+ // Block 0x42, offset 0x174
+ {value: 0x0007, lo: 0x03},
+ {value: 0x3c68, lo: 0xa0, hi: 0xa1},
+ {value: 0x3c92, lo: 0xa2, hi: 0xa3},
+ {value: 0x3cbc, lo: 0xaa, hi: 0xad},
+ // Block 0x43, offset 0x178
+ {value: 0x0004, lo: 0x01},
+ {value: 0x048b, lo: 0xa9, hi: 0xaa},
+ // Block 0x44, offset 0x17a
+ {value: 0x0000, lo: 0x01},
+ {value: 0x44dd, lo: 0x9c, hi: 0x9c},
+ // Block 0x45, offset 0x17c
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0xaf, hi: 0xb1},
+ // Block 0x46, offset 0x17e
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0xbf, hi: 0xbf},
+ // Block 0x47, offset 0x180
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0xa0, hi: 0xbf},
+ // Block 0x48, offset 0x182
+ {value: 0x0000, lo: 0x05},
+ {value: 0x812c, lo: 0xaa, hi: 0xaa},
+ {value: 0x8131, lo: 0xab, hi: 0xab},
+ {value: 0x8133, lo: 0xac, hi: 0xac},
+ {value: 0x812e, lo: 0xad, hi: 0xad},
+ {value: 0x812f, lo: 0xae, hi: 0xaf},
+ // Block 0x49, offset 0x188
+ {value: 0x0000, lo: 0x03},
+ {value: 0x4a9f, lo: 0xb3, hi: 0xb3},
+ {value: 0x4a9f, lo: 0xb5, hi: 0xb6},
+ {value: 0x4a9f, lo: 0xba, hi: 0xbf},
+ // Block 0x4a, offset 0x18c
+ {value: 0x0000, lo: 0x01},
+ {value: 0x4a9f, lo: 0x8f, hi: 0xa3},
+ // Block 0x4b, offset 0x18e
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8100, lo: 0xae, hi: 0xbe},
+ // Block 0x4c, offset 0x190
+ {value: 0x0000, lo: 0x07},
+ {value: 0x8100, lo: 0x84, hi: 0x84},
+ {value: 0x8100, lo: 0x87, hi: 0x87},
+ {value: 0x8100, lo: 0x90, hi: 0x90},
+ {value: 0x8100, lo: 0x9e, hi: 0x9e},
+ {value: 0x8100, lo: 0xa1, hi: 0xa1},
+ {value: 0x8100, lo: 0xb2, hi: 0xb2},
+ {value: 0x8100, lo: 0xbb, hi: 0xbb},
+ // Block 0x4d, offset 0x198
+ {value: 0x0000, lo: 0x03},
+ {value: 0x8100, lo: 0x80, hi: 0x80},
+ {value: 0x8100, lo: 0x8b, hi: 0x8b},
+ {value: 0x8100, lo: 0x8e, hi: 0x8e},
+ // Block 0x4e, offset 0x19c
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8132, lo: 0xaf, hi: 0xaf},
+ {value: 0x8132, lo: 0xb4, hi: 0xbd},
+ // Block 0x4f, offset 0x19f
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0x9e, hi: 0x9f},
+ // Block 0x50, offset 0x1a1
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0xb0, hi: 0xb1},
+ // Block 0x51, offset 0x1a3
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0x86, hi: 0x86},
+ // Block 0x52, offset 0x1a5
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x84, hi: 0x84},
+ {value: 0x8132, lo: 0xa0, hi: 0xb1},
+ // Block 0x53, offset 0x1a8
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0xab, hi: 0xad},
+ // Block 0x54, offset 0x1aa
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0x93, hi: 0x93},
+ // Block 0x55, offset 0x1ac
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8102, lo: 0xb3, hi: 0xb3},
+ // Block 0x56, offset 0x1ae
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0x80, hi: 0x80},
+ // Block 0x57, offset 0x1b0
+ {value: 0x0000, lo: 0x05},
+ {value: 0x8132, lo: 0xb0, hi: 0xb0},
+ {value: 0x8132, lo: 0xb2, hi: 0xb3},
+ {value: 0x812d, lo: 0xb4, hi: 0xb4},
+ {value: 0x8132, lo: 0xb7, hi: 0xb8},
+ {value: 0x8132, lo: 0xbe, hi: 0xbf},
+ // Block 0x58, offset 0x1b6
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8132, lo: 0x81, hi: 0x81},
+ {value: 0x8104, lo: 0xb6, hi: 0xb6},
+ // Block 0x59, offset 0x1b9
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0xad, hi: 0xad},
+ // Block 0x5a, offset 0x1bb
+ {value: 0x0000, lo: 0x06},
+ {value: 0xe500, lo: 0x80, hi: 0x80},
+ {value: 0xc600, lo: 0x81, hi: 0x9b},
+ {value: 0xe500, lo: 0x9c, hi: 0x9c},
+ {value: 0xc600, lo: 0x9d, hi: 0xb7},
+ {value: 0xe500, lo: 0xb8, hi: 0xb8},
+ {value: 0xc600, lo: 0xb9, hi: 0xbf},
+ // Block 0x5b, offset 0x1c2
+ {value: 0x0000, lo: 0x05},
+ {value: 0xc600, lo: 0x80, hi: 0x93},
+ {value: 0xe500, lo: 0x94, hi: 0x94},
+ {value: 0xc600, lo: 0x95, hi: 0xaf},
+ {value: 0xe500, lo: 0xb0, hi: 0xb0},
+ {value: 0xc600, lo: 0xb1, hi: 0xbf},
+ // Block 0x5c, offset 0x1c8
+ {value: 0x0000, lo: 0x05},
+ {value: 0xc600, lo: 0x80, hi: 0x8b},
+ {value: 0xe500, lo: 0x8c, hi: 0x8c},
+ {value: 0xc600, lo: 0x8d, hi: 0xa7},
+ {value: 0xe500, lo: 0xa8, hi: 0xa8},
+ {value: 0xc600, lo: 0xa9, hi: 0xbf},
+ // Block 0x5d, offset 0x1ce
+ {value: 0x0000, lo: 0x07},
+ {value: 0xc600, lo: 0x80, hi: 0x83},
+ {value: 0xe500, lo: 0x84, hi: 0x84},
+ {value: 0xc600, lo: 0x85, hi: 0x9f},
+ {value: 0xe500, lo: 0xa0, hi: 0xa0},
+ {value: 0xc600, lo: 0xa1, hi: 0xbb},
+ {value: 0xe500, lo: 0xbc, hi: 0xbc},
+ {value: 0xc600, lo: 0xbd, hi: 0xbf},
+ // Block 0x5e, offset 0x1d6
+ {value: 0x0000, lo: 0x05},
+ {value: 0xc600, lo: 0x80, hi: 0x97},
+ {value: 0xe500, lo: 0x98, hi: 0x98},
+ {value: 0xc600, lo: 0x99, hi: 0xb3},
+ {value: 0xe500, lo: 0xb4, hi: 0xb4},
+ {value: 0xc600, lo: 0xb5, hi: 0xbf},
+ // Block 0x5f, offset 0x1dc
+ {value: 0x0000, lo: 0x05},
+ {value: 0xc600, lo: 0x80, hi: 0x8f},
+ {value: 0xe500, lo: 0x90, hi: 0x90},
+ {value: 0xc600, lo: 0x91, hi: 0xab},
+ {value: 0xe500, lo: 0xac, hi: 0xac},
+ {value: 0xc600, lo: 0xad, hi: 0xbf},
+ // Block 0x60, offset 0x1e2
+ {value: 0x0000, lo: 0x05},
+ {value: 0xc600, lo: 0x80, hi: 0x87},
+ {value: 0xe500, lo: 0x88, hi: 0x88},
+ {value: 0xc600, lo: 0x89, hi: 0xa3},
+ {value: 0xe500, lo: 0xa4, hi: 0xa4},
+ {value: 0xc600, lo: 0xa5, hi: 0xbf},
+ // Block 0x61, offset 0x1e8
+ {value: 0x0000, lo: 0x03},
+ {value: 0xc600, lo: 0x80, hi: 0x87},
+ {value: 0xe500, lo: 0x88, hi: 0x88},
+ {value: 0xc600, lo: 0x89, hi: 0xa3},
+ // Block 0x62, offset 0x1ec
+ {value: 0x0006, lo: 0x0d},
+ {value: 0x4390, lo: 0x9d, hi: 0x9d},
+ {value: 0x8115, lo: 0x9e, hi: 0x9e},
+ {value: 0x4402, lo: 0x9f, hi: 0x9f},
+ {value: 0x43f0, lo: 0xaa, hi: 0xab},
+ {value: 0x44f4, lo: 0xac, hi: 0xac},
+ {value: 0x44fc, lo: 0xad, hi: 0xad},
+ {value: 0x4348, lo: 0xae, hi: 0xb1},
+ {value: 0x4366, lo: 0xb2, hi: 0xb4},
+ {value: 0x437e, lo: 0xb5, hi: 0xb6},
+ {value: 0x438a, lo: 0xb8, hi: 0xb8},
+ {value: 0x4396, lo: 0xb9, hi: 0xbb},
+ {value: 0x43ae, lo: 0xbc, hi: 0xbc},
+ {value: 0x43b4, lo: 0xbe, hi: 0xbe},
+ // Block 0x63, offset 0x1fa
+ {value: 0x0006, lo: 0x08},
+ {value: 0x43ba, lo: 0x80, hi: 0x81},
+ {value: 0x43c6, lo: 0x83, hi: 0x84},
+ {value: 0x43d8, lo: 0x86, hi: 0x89},
+ {value: 0x43fc, lo: 0x8a, hi: 0x8a},
+ {value: 0x4378, lo: 0x8b, hi: 0x8b},
+ {value: 0x4360, lo: 0x8c, hi: 0x8c},
+ {value: 0x43a8, lo: 0x8d, hi: 0x8d},
+ {value: 0x43d2, lo: 0x8e, hi: 0x8e},
+ // Block 0x64, offset 0x203
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8100, lo: 0xa4, hi: 0xa5},
+ {value: 0x8100, lo: 0xb0, hi: 0xb1},
+ // Block 0x65, offset 0x206
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8100, lo: 0x9b, hi: 0x9d},
+ {value: 0x8200, lo: 0x9e, hi: 0xa3},
+ // Block 0x66, offset 0x209
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8100, lo: 0x90, hi: 0x90},
+ // Block 0x67, offset 0x20b
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8100, lo: 0x99, hi: 0x99},
+ {value: 0x8200, lo: 0xb2, hi: 0xb4},
+ // Block 0x68, offset 0x20e
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8100, lo: 0xbc, hi: 0xbd},
+ // Block 0x69, offset 0x210
+ {value: 0x0000, lo: 0x03},
+ {value: 0x8132, lo: 0xa0, hi: 0xa6},
+ {value: 0x812d, lo: 0xa7, hi: 0xad},
+ {value: 0x8132, lo: 0xae, hi: 0xaf},
+ // Block 0x6a, offset 0x214
+ {value: 0x0000, lo: 0x04},
+ {value: 0x8100, lo: 0x89, hi: 0x8c},
+ {value: 0x8100, lo: 0xb0, hi: 0xb2},
+ {value: 0x8100, lo: 0xb4, hi: 0xb4},
+ {value: 0x8100, lo: 0xb6, hi: 0xbf},
+ // Block 0x6b, offset 0x219
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8100, lo: 0x81, hi: 0x8c},
+ // Block 0x6c, offset 0x21b
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8100, lo: 0xb5, hi: 0xba},
+ // Block 0x6d, offset 0x21d
+ {value: 0x0000, lo: 0x04},
+ {value: 0x4a9f, lo: 0x9e, hi: 0x9f},
+ {value: 0x4a9f, lo: 0xa3, hi: 0xa3},
+ {value: 0x4a9f, lo: 0xa5, hi: 0xa6},
+ {value: 0x4a9f, lo: 0xaa, hi: 0xaf},
+ // Block 0x6e, offset 0x222
+ {value: 0x0000, lo: 0x05},
+ {value: 0x4a9f, lo: 0x82, hi: 0x87},
+ {value: 0x4a9f, lo: 0x8a, hi: 0x8f},
+ {value: 0x4a9f, lo: 0x92, hi: 0x97},
+ {value: 0x4a9f, lo: 0x9a, hi: 0x9c},
+ {value: 0x8100, lo: 0xa3, hi: 0xa3},
+ // Block 0x6f, offset 0x228
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0xbd, hi: 0xbd},
+ // Block 0x70, offset 0x22a
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0xa0, hi: 0xa0},
+ // Block 0x71, offset 0x22c
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0xb6, hi: 0xba},
+ // Block 0x72, offset 0x22e
+ {value: 0x002c, lo: 0x05},
+ {value: 0x812d, lo: 0x8d, hi: 0x8d},
+ {value: 0x8132, lo: 0x8f, hi: 0x8f},
+ {value: 0x8132, lo: 0xb8, hi: 0xb8},
+ {value: 0x8101, lo: 0xb9, hi: 0xba},
+ {value: 0x8104, lo: 0xbf, hi: 0xbf},
+ // Block 0x73, offset 0x234
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8132, lo: 0xa5, hi: 0xa5},
+ {value: 0x812d, lo: 0xa6, hi: 0xa6},
+ // Block 0x74, offset 0x237
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x86, hi: 0x86},
+ {value: 0x8104, lo: 0xbf, hi: 0xbf},
+ // Block 0x75, offset 0x23a
+ {value: 0x17fe, lo: 0x07},
+ {value: 0xa000, lo: 0x99, hi: 0x99},
+ {value: 0x4238, lo: 0x9a, hi: 0x9a},
+ {value: 0xa000, lo: 0x9b, hi: 0x9b},
+ {value: 0x4242, lo: 0x9c, hi: 0x9c},
+ {value: 0xa000, lo: 0xa5, hi: 0xa5},
+ {value: 0x424c, lo: 0xab, hi: 0xab},
+ {value: 0x8104, lo: 0xb9, hi: 0xba},
+ // Block 0x76, offset 0x242
+ {value: 0x0000, lo: 0x06},
+ {value: 0x8132, lo: 0x80, hi: 0x82},
+ {value: 0x9900, lo: 0xa7, hi: 0xa7},
+ {value: 0x2d7e, lo: 0xae, hi: 0xae},
+ {value: 0x2d88, lo: 0xaf, hi: 0xaf},
+ {value: 0xa000, lo: 0xb1, hi: 0xb2},
+ {value: 0x8104, lo: 0xb3, hi: 0xb4},
+ // Block 0x77, offset 0x249
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x80, hi: 0x80},
+ {value: 0x8102, lo: 0x8a, hi: 0x8a},
+ // Block 0x78, offset 0x24c
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0xb5, hi: 0xb5},
+ {value: 0x8102, lo: 0xb6, hi: 0xb6},
+ // Block 0x79, offset 0x24f
+ {value: 0x0002, lo: 0x01},
+ {value: 0x8102, lo: 0xa9, hi: 0xaa},
+ // Block 0x7a, offset 0x251
+ {value: 0x0000, lo: 0x07},
+ {value: 0xa000, lo: 0x87, hi: 0x87},
+ {value: 0x2d92, lo: 0x8b, hi: 0x8b},
+ {value: 0x2d9c, lo: 0x8c, hi: 0x8c},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x9900, lo: 0x97, hi: 0x97},
+ {value: 0x8132, lo: 0xa6, hi: 0xac},
+ {value: 0x8132, lo: 0xb0, hi: 0xb4},
+ // Block 0x7b, offset 0x259
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x82, hi: 0x82},
+ {value: 0x8102, lo: 0x86, hi: 0x86},
+ // Block 0x7c, offset 0x25c
+ {value: 0x6b5a, lo: 0x06},
+ {value: 0x9900, lo: 0xb0, hi: 0xb0},
+ {value: 0xa000, lo: 0xb9, hi: 0xb9},
+ {value: 0x9900, lo: 0xba, hi: 0xba},
+ {value: 0x2db0, lo: 0xbb, hi: 0xbb},
+ {value: 0x2da6, lo: 0xbc, hi: 0xbd},
+ {value: 0x2dba, lo: 0xbe, hi: 0xbe},
+ // Block 0x7d, offset 0x263
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x82, hi: 0x82},
+ {value: 0x8102, lo: 0x83, hi: 0x83},
+ // Block 0x7e, offset 0x266
+ {value: 0x0000, lo: 0x05},
+ {value: 0x9900, lo: 0xaf, hi: 0xaf},
+ {value: 0xa000, lo: 0xb8, hi: 0xb9},
+ {value: 0x2dc4, lo: 0xba, hi: 0xba},
+ {value: 0x2dce, lo: 0xbb, hi: 0xbb},
+ {value: 0x8104, lo: 0xbf, hi: 0xbf},
+ // Block 0x7f, offset 0x26c
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8102, lo: 0x80, hi: 0x80},
+ // Block 0x80, offset 0x26e
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0xb6, hi: 0xb6},
+ {value: 0x8102, lo: 0xb7, hi: 0xb7},
+ // Block 0x81, offset 0x271
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0xab, hi: 0xab},
+ // Block 0x82, offset 0x273
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0xb4, hi: 0xb4},
+ // Block 0x83, offset 0x275
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0x87, hi: 0x87},
+ // Block 0x84, offset 0x277
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0x99, hi: 0x99},
+ // Block 0x85, offset 0x279
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8102, lo: 0x82, hi: 0x82},
+ {value: 0x8104, lo: 0x84, hi: 0x85},
+ // Block 0x86, offset 0x27c
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8101, lo: 0xb0, hi: 0xb4},
+ // Block 0x87, offset 0x27e
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0xb0, hi: 0xb6},
+ // Block 0x88, offset 0x280
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8101, lo: 0x9e, hi: 0x9e},
+ // Block 0x89, offset 0x282
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x45cc, lo: 0x9e, hi: 0x9e},
+ {value: 0x45d6, lo: 0x9f, hi: 0x9f},
+ {value: 0x460a, lo: 0xa0, hi: 0xa0},
+ {value: 0x4618, lo: 0xa1, hi: 0xa1},
+ {value: 0x4626, lo: 0xa2, hi: 0xa2},
+ {value: 0x4634, lo: 0xa3, hi: 0xa3},
+ {value: 0x4642, lo: 0xa4, hi: 0xa4},
+ {value: 0x812b, lo: 0xa5, hi: 0xa6},
+ {value: 0x8101, lo: 0xa7, hi: 0xa9},
+ {value: 0x8130, lo: 0xad, hi: 0xad},
+ {value: 0x812b, lo: 0xae, hi: 0xb2},
+ {value: 0x812d, lo: 0xbb, hi: 0xbf},
+ // Block 0x8a, offset 0x28f
+ {value: 0x0000, lo: 0x09},
+ {value: 0x812d, lo: 0x80, hi: 0x82},
+ {value: 0x8132, lo: 0x85, hi: 0x89},
+ {value: 0x812d, lo: 0x8a, hi: 0x8b},
+ {value: 0x8132, lo: 0xaa, hi: 0xad},
+ {value: 0x45e0, lo: 0xbb, hi: 0xbb},
+ {value: 0x45ea, lo: 0xbc, hi: 0xbc},
+ {value: 0x4650, lo: 0xbd, hi: 0xbd},
+ {value: 0x466c, lo: 0xbe, hi: 0xbe},
+ {value: 0x465e, lo: 0xbf, hi: 0xbf},
+ // Block 0x8b, offset 0x299
+ {value: 0x0000, lo: 0x01},
+ {value: 0x467a, lo: 0x80, hi: 0x80},
+ // Block 0x8c, offset 0x29b
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0x82, hi: 0x84},
+ // Block 0x8d, offset 0x29d
+ {value: 0x0000, lo: 0x05},
+ {value: 0x8132, lo: 0x80, hi: 0x86},
+ {value: 0x8132, lo: 0x88, hi: 0x98},
+ {value: 0x8132, lo: 0x9b, hi: 0xa1},
+ {value: 0x8132, lo: 0xa3, hi: 0xa4},
+ {value: 0x8132, lo: 0xa6, hi: 0xaa},
+ // Block 0x8e, offset 0x2a3
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0x90, hi: 0x96},
+ // Block 0x8f, offset 0x2a5
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8132, lo: 0x84, hi: 0x89},
+ {value: 0x8102, lo: 0x8a, hi: 0x8a},
+ // Block 0x90, offset 0x2a8
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8100, lo: 0x93, hi: 0x93},
+}
+
+// lookup returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) {
+ c0 := s[0]
+ switch {
+ case c0 < 0x80: // is ASCII
+ return nfkcValues[c0], 1
+ case c0 < 0xC2:
+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+ case c0 < 0xE0: // 2-byte UTF-8
+ if len(s) < 2 {
+ return 0, 0
+ }
+ i := nfkcIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c1), 2
+ case c0 < 0xF0: // 3-byte UTF-8
+ if len(s) < 3 {
+ return 0, 0
+ }
+ i := nfkcIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = nfkcIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c2), 3
+ case c0 < 0xF8: // 4-byte UTF-8
+ if len(s) < 4 {
+ return 0, 0
+ }
+ i := nfkcIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = nfkcIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ o = uint32(i)<<6 + uint32(c2)
+ i = nfkcIndex[o]
+ c3 := s[3]
+ if c3 < 0x80 || 0xC0 <= c3 {
+ return 0, 3 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c3), 4
+ }
+ // Illegal rune
+ return 0, 1
+}
+
+// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 {
+ c0 := s[0]
+ if c0 < 0x80 { // is ASCII
+ return nfkcValues[c0]
+ }
+ i := nfkcIndex[c0]
+ if c0 < 0xE0 { // 2-byte UTF-8
+ return t.lookupValue(uint32(i), s[1])
+ }
+ i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
+ if c0 < 0xF0 { // 3-byte UTF-8
+ return t.lookupValue(uint32(i), s[2])
+ }
+ i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
+ if c0 < 0xF8 { // 4-byte UTF-8
+ return t.lookupValue(uint32(i), s[3])
+ }
+ return 0
+}
+
+// lookupString returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) {
+ c0 := s[0]
+ switch {
+ case c0 < 0x80: // is ASCII
+ return nfkcValues[c0], 1
+ case c0 < 0xC2:
+ return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+ case c0 < 0xE0: // 2-byte UTF-8
+ if len(s) < 2 {
+ return 0, 0
+ }
+ i := nfkcIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c1), 2
+ case c0 < 0xF0: // 3-byte UTF-8
+ if len(s) < 3 {
+ return 0, 0
+ }
+ i := nfkcIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = nfkcIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c2), 3
+ case c0 < 0xF8: // 4-byte UTF-8
+ if len(s) < 4 {
+ return 0, 0
+ }
+ i := nfkcIndex[c0]
+ c1 := s[1]
+ if c1 < 0x80 || 0xC0 <= c1 {
+ return 0, 1 // Illegal UTF-8: not a continuation byte.
+ }
+ o := uint32(i)<<6 + uint32(c1)
+ i = nfkcIndex[o]
+ c2 := s[2]
+ if c2 < 0x80 || 0xC0 <= c2 {
+ return 0, 2 // Illegal UTF-8: not a continuation byte.
+ }
+ o = uint32(i)<<6 + uint32(c2)
+ i = nfkcIndex[o]
+ c3 := s[3]
+ if c3 < 0x80 || 0xC0 <= c3 {
+ return 0, 3 // Illegal UTF-8: not a continuation byte.
+ }
+ return t.lookupValue(uint32(i), c3), 4
+ }
+ // Illegal rune
+ return 0, 1
+}
+
+// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 {
+ c0 := s[0]
+ if c0 < 0x80 { // is ASCII
+ return nfkcValues[c0]
+ }
+ i := nfkcIndex[c0]
+ if c0 < 0xE0 { // 2-byte UTF-8
+ return t.lookupValue(uint32(i), s[1])
+ }
+ i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
+ if c0 < 0xF0 { // 3-byte UTF-8
+ return t.lookupValue(uint32(i), s[2])
+ }
+ i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
+ if c0 < 0xF8 { // 4-byte UTF-8
+ return t.lookupValue(uint32(i), s[3])
+ }
+ return 0
+}
+
+// nfkcTrie. Total size: 17104 bytes (16.70 KiB). Checksum: d985061cf5307b35.
+type nfkcTrie struct{}
+
+func newNfkcTrie(i int) *nfkcTrie {
+ return &nfkcTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 {
+ switch {
+ case n < 91:
+ return uint16(nfkcValues[n<<6+uint32(b)])
+ default:
+ n -= 91
+ return uint16(nfkcSparse.lookup(n, b))
+ }
+}
+
+// nfkcValues: 93 blocks, 5952 entries, 11904 bytes
+// The third block is the zero block.
+var nfkcValues = [5952]uint16{
+ // Block 0x0, offset 0x0
+ 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
+ // Block 0x1, offset 0x40
+ 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
+ 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
+ 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
+ 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
+ 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
+ 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
+ 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
+ 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
+ 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
+ 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
+ // Block 0x2, offset 0x80
+ // Block 0x3, offset 0xc0
+ 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,
+ 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,
+ 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,
+ 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,
+ 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,
+ 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,
+ 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,
+ 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,
+ 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,
+ 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
+ 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,
+ // Block 0x4, offset 0x100
+ 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,
+ 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,
+ 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,
+ 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
+ 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,
+ 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,
+ 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,
+ 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,
+ 0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0,
+ 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,
+ 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac,
+ // Block 0x5, offset 0x140
+ 0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,
+ 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c,
+ 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
+ 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,
+ 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,
+ 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,
+ 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,
+ 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
+ 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,
+ 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,
+ 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7,
+ // Block 0x6, offset 0x180
+ 0x184: 0x2dee, 0x185: 0x2df4,
+ 0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a,
+ 0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,
+ 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,
+ 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,
+ 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,
+ 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,
+ 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
+ 0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334,
+ 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,
+ 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,
+ // Block 0x7, offset 0x1c0
+ 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,
+ 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,
+ 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,
+ 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,
+ 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,
+ 0x1de: 0x305a, 0x1df: 0x3366,
+ 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,
+ 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,
+ 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,
+ // Block 0x8, offset 0x200
+ 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
+ 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,
+ 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,
+ 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,
+ 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,
+ 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,
+ 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,
+ 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,
+ 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,
+ 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
+ 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
+ // Block 0x9, offset 0x240
+ 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,
+ 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
+ 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
+ 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
+ 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,
+ 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,
+ 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,
+ 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,
+ 0x274: 0x0170,
+ 0x27a: 0x42a5,
+ 0x27e: 0x0037,
+ // Block 0xa, offset 0x280
+ 0x284: 0x425a, 0x285: 0x447b,
+ 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,
+ 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,
+ 0x295: 0xa000, 0x297: 0xa000,
+ 0x299: 0xa000,
+ 0x29f: 0xa000, 0x2a1: 0xa000,
+ 0x2a5: 0xa000, 0x2a9: 0xa000,
+ 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,
+ 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,
+ 0x2b7: 0xa000, 0x2b9: 0xa000,
+ 0x2bf: 0xa000,
+ // Block 0xb, offset 0x2c0
+ 0x2c1: 0xa000, 0x2c5: 0xa000,
+ 0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e,
+ 0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0,
+ 0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8,
+ 0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7,
+ 0x2f9: 0x01a6,
+ // Block 0xc, offset 0x300
+ 0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b,
+ 0x306: 0xa000, 0x307: 0x3709,
+ 0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000,
+ 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000,
+ 0x318: 0xa000, 0x319: 0x3751, 0x31a: 0xa000,
+ 0x31e: 0xa000, 0x323: 0xa000,
+ 0x327: 0xa000,
+ 0x32b: 0xa000, 0x32d: 0xa000,
+ 0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000,
+ 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d5, 0x33a: 0xa000,
+ 0x33e: 0xa000,
+ // Block 0xd, offset 0x340
+ 0x341: 0x3733, 0x342: 0x37b7,
+ 0x350: 0x370f, 0x351: 0x3793,
+ 0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab,
+ 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd,
+ 0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf,
+ 0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000,
+ 0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed,
+ 0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805,
+ 0x378: 0x3787, 0x379: 0x380b,
+ // Block 0xe, offset 0x380
+ 0x387: 0x1d61,
+ 0x391: 0x812d,
+ 0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132,
+ 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132,
+ 0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d,
+ 0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132,
+ 0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132,
+ 0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a,
+ 0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f,
+ 0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112,
+ // Block 0xf, offset 0x3c0
+ 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116,
+ 0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c,
+ 0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132,
+ 0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132,
+ 0x3de: 0x8132, 0x3df: 0x812d,
+ 0x3f0: 0x811e, 0x3f5: 0x1d84,
+ 0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a,
+ // Block 0x10, offset 0x400
+ 0x405: 0xa000,
+ 0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000,
+ 0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000,
+ 0x412: 0x2d4e,
+ 0x434: 0x8102, 0x435: 0x9900,
+ 0x43a: 0xa000, 0x43b: 0x2d56,
+ 0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000,
+ // Block 0x11, offset 0x440
+ 0x440: 0x0069, 0x441: 0x006b, 0x442: 0x006f, 0x443: 0x0083, 0x444: 0x00f5, 0x445: 0x00f8,
+ 0x446: 0x0413, 0x447: 0x0085, 0x448: 0x0089, 0x449: 0x008b, 0x44a: 0x0104, 0x44b: 0x0107,
+ 0x44c: 0x010a, 0x44d: 0x008f, 0x44f: 0x0097, 0x450: 0x009b, 0x451: 0x00e0,
+ 0x452: 0x009f, 0x453: 0x00fe, 0x454: 0x0417, 0x455: 0x041b, 0x456: 0x00a1, 0x457: 0x00a9,
+ 0x458: 0x00ab, 0x459: 0x0423, 0x45a: 0x012b, 0x45b: 0x00ad, 0x45c: 0x0427, 0x45d: 0x01be,
+ 0x45e: 0x01c1, 0x45f: 0x01c4, 0x460: 0x01fa, 0x461: 0x01fd, 0x462: 0x0093, 0x463: 0x00a5,
+ 0x464: 0x00ab, 0x465: 0x00ad, 0x466: 0x01be, 0x467: 0x01c1, 0x468: 0x01eb, 0x469: 0x01fa,
+ 0x46a: 0x01fd,
+ 0x478: 0x020c,
+ // Block 0x12, offset 0x480
+ 0x49b: 0x00fb, 0x49c: 0x0087, 0x49d: 0x0101,
+ 0x49e: 0x00d4, 0x49f: 0x010a, 0x4a0: 0x008d, 0x4a1: 0x010d, 0x4a2: 0x0110, 0x4a3: 0x0116,
+ 0x4a4: 0x011c, 0x4a5: 0x011f, 0x4a6: 0x0122, 0x4a7: 0x042b, 0x4a8: 0x016a, 0x4a9: 0x0128,
+ 0x4aa: 0x042f, 0x4ab: 0x016d, 0x4ac: 0x0131, 0x4ad: 0x012e, 0x4ae: 0x0134, 0x4af: 0x0137,
+ 0x4b0: 0x013a, 0x4b1: 0x013d, 0x4b2: 0x0140, 0x4b3: 0x014c, 0x4b4: 0x014f, 0x4b5: 0x00ec,
+ 0x4b6: 0x0152, 0x4b7: 0x0155, 0x4b8: 0x041f, 0x4b9: 0x0158, 0x4ba: 0x015b, 0x4bb: 0x00b5,
+ 0x4bc: 0x015e, 0x4bd: 0x0161, 0x4be: 0x0164, 0x4bf: 0x01d0,
+ // Block 0x13, offset 0x4c0
+ 0x4c0: 0x8132, 0x4c1: 0x8132, 0x4c2: 0x812d, 0x4c3: 0x8132, 0x4c4: 0x8132, 0x4c5: 0x8132,
+ 0x4c6: 0x8132, 0x4c7: 0x8132, 0x4c8: 0x8132, 0x4c9: 0x8132, 0x4ca: 0x812d, 0x4cb: 0x8132,
+ 0x4cc: 0x8132, 0x4cd: 0x8135, 0x4ce: 0x812a, 0x4cf: 0x812d, 0x4d0: 0x8129, 0x4d1: 0x8132,
+ 0x4d2: 0x8132, 0x4d3: 0x8132, 0x4d4: 0x8132, 0x4d5: 0x8132, 0x4d6: 0x8132, 0x4d7: 0x8132,
+ 0x4d8: 0x8132, 0x4d9: 0x8132, 0x4da: 0x8132, 0x4db: 0x8132, 0x4dc: 0x8132, 0x4dd: 0x8132,
+ 0x4de: 0x8132, 0x4df: 0x8132, 0x4e0: 0x8132, 0x4e1: 0x8132, 0x4e2: 0x8132, 0x4e3: 0x8132,
+ 0x4e4: 0x8132, 0x4e5: 0x8132, 0x4e6: 0x8132, 0x4e7: 0x8132, 0x4e8: 0x8132, 0x4e9: 0x8132,
+ 0x4ea: 0x8132, 0x4eb: 0x8132, 0x4ec: 0x8132, 0x4ed: 0x8132, 0x4ee: 0x8132, 0x4ef: 0x8132,
+ 0x4f0: 0x8132, 0x4f1: 0x8132, 0x4f2: 0x8132, 0x4f3: 0x8132, 0x4f4: 0x8132, 0x4f5: 0x8132,
+ 0x4f6: 0x8133, 0x4f7: 0x8131, 0x4f8: 0x8131, 0x4f9: 0x812d, 0x4fb: 0x8132,
+ 0x4fc: 0x8134, 0x4fd: 0x812d, 0x4fe: 0x8132, 0x4ff: 0x812d,
+ // Block 0x14, offset 0x500
+ 0x500: 0x2f97, 0x501: 0x32a3, 0x502: 0x2fa1, 0x503: 0x32ad, 0x504: 0x2fa6, 0x505: 0x32b2,
+ 0x506: 0x2fab, 0x507: 0x32b7, 0x508: 0x38cc, 0x509: 0x3a5b, 0x50a: 0x2fc4, 0x50b: 0x32d0,
+ 0x50c: 0x2fce, 0x50d: 0x32da, 0x50e: 0x2fdd, 0x50f: 0x32e9, 0x510: 0x2fd3, 0x511: 0x32df,
+ 0x512: 0x2fd8, 0x513: 0x32e4, 0x514: 0x38ef, 0x515: 0x3a7e, 0x516: 0x38f6, 0x517: 0x3a85,
+ 0x518: 0x3019, 0x519: 0x3325, 0x51a: 0x301e, 0x51b: 0x332a, 0x51c: 0x3904, 0x51d: 0x3a93,
+ 0x51e: 0x3023, 0x51f: 0x332f, 0x520: 0x3032, 0x521: 0x333e, 0x522: 0x3050, 0x523: 0x335c,
+ 0x524: 0x305f, 0x525: 0x336b, 0x526: 0x3055, 0x527: 0x3361, 0x528: 0x3064, 0x529: 0x3370,
+ 0x52a: 0x3069, 0x52b: 0x3375, 0x52c: 0x30af, 0x52d: 0x33bb, 0x52e: 0x390b, 0x52f: 0x3a9a,
+ 0x530: 0x30b9, 0x531: 0x33ca, 0x532: 0x30c3, 0x533: 0x33d4, 0x534: 0x30cd, 0x535: 0x33de,
+ 0x536: 0x46c4, 0x537: 0x4755, 0x538: 0x3912, 0x539: 0x3aa1, 0x53a: 0x30e6, 0x53b: 0x33f7,
+ 0x53c: 0x30e1, 0x53d: 0x33f2, 0x53e: 0x30eb, 0x53f: 0x33fc,
+ // Block 0x15, offset 0x540
+ 0x540: 0x30f0, 0x541: 0x3401, 0x542: 0x30f5, 0x543: 0x3406, 0x544: 0x3109, 0x545: 0x341a,
+ 0x546: 0x3113, 0x547: 0x3424, 0x548: 0x3122, 0x549: 0x3433, 0x54a: 0x311d, 0x54b: 0x342e,
+ 0x54c: 0x3935, 0x54d: 0x3ac4, 0x54e: 0x3943, 0x54f: 0x3ad2, 0x550: 0x394a, 0x551: 0x3ad9,
+ 0x552: 0x3951, 0x553: 0x3ae0, 0x554: 0x314f, 0x555: 0x3460, 0x556: 0x3154, 0x557: 0x3465,
+ 0x558: 0x315e, 0x559: 0x346f, 0x55a: 0x46f1, 0x55b: 0x4782, 0x55c: 0x3997, 0x55d: 0x3b26,
+ 0x55e: 0x3177, 0x55f: 0x3488, 0x560: 0x3181, 0x561: 0x3492, 0x562: 0x4700, 0x563: 0x4791,
+ 0x564: 0x399e, 0x565: 0x3b2d, 0x566: 0x39a5, 0x567: 0x3b34, 0x568: 0x39ac, 0x569: 0x3b3b,
+ 0x56a: 0x3190, 0x56b: 0x34a1, 0x56c: 0x319a, 0x56d: 0x34b0, 0x56e: 0x31ae, 0x56f: 0x34c4,
+ 0x570: 0x31a9, 0x571: 0x34bf, 0x572: 0x31ea, 0x573: 0x3500, 0x574: 0x31f9, 0x575: 0x350f,
+ 0x576: 0x31f4, 0x577: 0x350a, 0x578: 0x39b3, 0x579: 0x3b42, 0x57a: 0x39ba, 0x57b: 0x3b49,
+ 0x57c: 0x31fe, 0x57d: 0x3514, 0x57e: 0x3203, 0x57f: 0x3519,
+ // Block 0x16, offset 0x580
+ 0x580: 0x3208, 0x581: 0x351e, 0x582: 0x320d, 0x583: 0x3523, 0x584: 0x321c, 0x585: 0x3532,
+ 0x586: 0x3217, 0x587: 0x352d, 0x588: 0x3221, 0x589: 0x353c, 0x58a: 0x3226, 0x58b: 0x3541,
+ 0x58c: 0x322b, 0x58d: 0x3546, 0x58e: 0x3249, 0x58f: 0x3564, 0x590: 0x3262, 0x591: 0x3582,
+ 0x592: 0x3271, 0x593: 0x3591, 0x594: 0x3276, 0x595: 0x3596, 0x596: 0x337a, 0x597: 0x34a6,
+ 0x598: 0x3537, 0x599: 0x3573, 0x59a: 0x1be0, 0x59b: 0x42d7,
+ 0x5a0: 0x46a1, 0x5a1: 0x4732, 0x5a2: 0x2f83, 0x5a3: 0x328f,
+ 0x5a4: 0x3878, 0x5a5: 0x3a07, 0x5a6: 0x3871, 0x5a7: 0x3a00, 0x5a8: 0x3886, 0x5a9: 0x3a15,
+ 0x5aa: 0x387f, 0x5ab: 0x3a0e, 0x5ac: 0x38be, 0x5ad: 0x3a4d, 0x5ae: 0x3894, 0x5af: 0x3a23,
+ 0x5b0: 0x388d, 0x5b1: 0x3a1c, 0x5b2: 0x38a2, 0x5b3: 0x3a31, 0x5b4: 0x389b, 0x5b5: 0x3a2a,
+ 0x5b6: 0x38c5, 0x5b7: 0x3a54, 0x5b8: 0x46b5, 0x5b9: 0x4746, 0x5ba: 0x3000, 0x5bb: 0x330c,
+ 0x5bc: 0x2fec, 0x5bd: 0x32f8, 0x5be: 0x38da, 0x5bf: 0x3a69,
+ // Block 0x17, offset 0x5c0
+ 0x5c0: 0x38d3, 0x5c1: 0x3a62, 0x5c2: 0x38e8, 0x5c3: 0x3a77, 0x5c4: 0x38e1, 0x5c5: 0x3a70,
+ 0x5c6: 0x38fd, 0x5c7: 0x3a8c, 0x5c8: 0x3091, 0x5c9: 0x339d, 0x5ca: 0x30a5, 0x5cb: 0x33b1,
+ 0x5cc: 0x46e7, 0x5cd: 0x4778, 0x5ce: 0x3136, 0x5cf: 0x3447, 0x5d0: 0x3920, 0x5d1: 0x3aaf,
+ 0x5d2: 0x3919, 0x5d3: 0x3aa8, 0x5d4: 0x392e, 0x5d5: 0x3abd, 0x5d6: 0x3927, 0x5d7: 0x3ab6,
+ 0x5d8: 0x3989, 0x5d9: 0x3b18, 0x5da: 0x396d, 0x5db: 0x3afc, 0x5dc: 0x3966, 0x5dd: 0x3af5,
+ 0x5de: 0x397b, 0x5df: 0x3b0a, 0x5e0: 0x3974, 0x5e1: 0x3b03, 0x5e2: 0x3982, 0x5e3: 0x3b11,
+ 0x5e4: 0x31e5, 0x5e5: 0x34fb, 0x5e6: 0x31c7, 0x5e7: 0x34dd, 0x5e8: 0x39e4, 0x5e9: 0x3b73,
+ 0x5ea: 0x39dd, 0x5eb: 0x3b6c, 0x5ec: 0x39f2, 0x5ed: 0x3b81, 0x5ee: 0x39eb, 0x5ef: 0x3b7a,
+ 0x5f0: 0x39f9, 0x5f1: 0x3b88, 0x5f2: 0x3230, 0x5f3: 0x354b, 0x5f4: 0x3258, 0x5f5: 0x3578,
+ 0x5f6: 0x3253, 0x5f7: 0x356e, 0x5f8: 0x323f, 0x5f9: 0x355a,
+ // Block 0x18, offset 0x600
+ 0x600: 0x4804, 0x601: 0x480a, 0x602: 0x491e, 0x603: 0x4936, 0x604: 0x4926, 0x605: 0x493e,
+ 0x606: 0x492e, 0x607: 0x4946, 0x608: 0x47aa, 0x609: 0x47b0, 0x60a: 0x488e, 0x60b: 0x48a6,
+ 0x60c: 0x4896, 0x60d: 0x48ae, 0x60e: 0x489e, 0x60f: 0x48b6, 0x610: 0x4816, 0x611: 0x481c,
+ 0x612: 0x3db8, 0x613: 0x3dc8, 0x614: 0x3dc0, 0x615: 0x3dd0,
+ 0x618: 0x47b6, 0x619: 0x47bc, 0x61a: 0x3ce8, 0x61b: 0x3cf8, 0x61c: 0x3cf0, 0x61d: 0x3d00,
+ 0x620: 0x482e, 0x621: 0x4834, 0x622: 0x494e, 0x623: 0x4966,
+ 0x624: 0x4956, 0x625: 0x496e, 0x626: 0x495e, 0x627: 0x4976, 0x628: 0x47c2, 0x629: 0x47c8,
+ 0x62a: 0x48be, 0x62b: 0x48d6, 0x62c: 0x48c6, 0x62d: 0x48de, 0x62e: 0x48ce, 0x62f: 0x48e6,
+ 0x630: 0x4846, 0x631: 0x484c, 0x632: 0x3e18, 0x633: 0x3e30, 0x634: 0x3e20, 0x635: 0x3e38,
+ 0x636: 0x3e28, 0x637: 0x3e40, 0x638: 0x47ce, 0x639: 0x47d4, 0x63a: 0x3d18, 0x63b: 0x3d30,
+ 0x63c: 0x3d20, 0x63d: 0x3d38, 0x63e: 0x3d28, 0x63f: 0x3d40,
+ // Block 0x19, offset 0x640
+ 0x640: 0x4852, 0x641: 0x4858, 0x642: 0x3e48, 0x643: 0x3e58, 0x644: 0x3e50, 0x645: 0x3e60,
+ 0x648: 0x47da, 0x649: 0x47e0, 0x64a: 0x3d48, 0x64b: 0x3d58,
+ 0x64c: 0x3d50, 0x64d: 0x3d60, 0x650: 0x4864, 0x651: 0x486a,
+ 0x652: 0x3e80, 0x653: 0x3e98, 0x654: 0x3e88, 0x655: 0x3ea0, 0x656: 0x3e90, 0x657: 0x3ea8,
+ 0x659: 0x47e6, 0x65b: 0x3d68, 0x65d: 0x3d70,
+ 0x65f: 0x3d78, 0x660: 0x487c, 0x661: 0x4882, 0x662: 0x497e, 0x663: 0x4996,
+ 0x664: 0x4986, 0x665: 0x499e, 0x666: 0x498e, 0x667: 0x49a6, 0x668: 0x47ec, 0x669: 0x47f2,
+ 0x66a: 0x48ee, 0x66b: 0x4906, 0x66c: 0x48f6, 0x66d: 0x490e, 0x66e: 0x48fe, 0x66f: 0x4916,
+ 0x670: 0x47f8, 0x671: 0x431e, 0x672: 0x3691, 0x673: 0x4324, 0x674: 0x4822, 0x675: 0x432a,
+ 0x676: 0x36a3, 0x677: 0x4330, 0x678: 0x36c1, 0x679: 0x4336, 0x67a: 0x36d9, 0x67b: 0x433c,
+ 0x67c: 0x4870, 0x67d: 0x4342,
+ // Block 0x1a, offset 0x680
+ 0x680: 0x3da0, 0x681: 0x3da8, 0x682: 0x4184, 0x683: 0x41a2, 0x684: 0x418e, 0x685: 0x41ac,
+ 0x686: 0x4198, 0x687: 0x41b6, 0x688: 0x3cd8, 0x689: 0x3ce0, 0x68a: 0x40d0, 0x68b: 0x40ee,
+ 0x68c: 0x40da, 0x68d: 0x40f8, 0x68e: 0x40e4, 0x68f: 0x4102, 0x690: 0x3de8, 0x691: 0x3df0,
+ 0x692: 0x41c0, 0x693: 0x41de, 0x694: 0x41ca, 0x695: 0x41e8, 0x696: 0x41d4, 0x697: 0x41f2,
+ 0x698: 0x3d08, 0x699: 0x3d10, 0x69a: 0x410c, 0x69b: 0x412a, 0x69c: 0x4116, 0x69d: 0x4134,
+ 0x69e: 0x4120, 0x69f: 0x413e, 0x6a0: 0x3ec0, 0x6a1: 0x3ec8, 0x6a2: 0x41fc, 0x6a3: 0x421a,
+ 0x6a4: 0x4206, 0x6a5: 0x4224, 0x6a6: 0x4210, 0x6a7: 0x422e, 0x6a8: 0x3d80, 0x6a9: 0x3d88,
+ 0x6aa: 0x4148, 0x6ab: 0x4166, 0x6ac: 0x4152, 0x6ad: 0x4170, 0x6ae: 0x415c, 0x6af: 0x417a,
+ 0x6b0: 0x3685, 0x6b1: 0x367f, 0x6b2: 0x3d90, 0x6b3: 0x368b, 0x6b4: 0x3d98,
+ 0x6b6: 0x4810, 0x6b7: 0x3db0, 0x6b8: 0x35f5, 0x6b9: 0x35ef, 0x6ba: 0x35e3, 0x6bb: 0x42ee,
+ 0x6bc: 0x35fb, 0x6bd: 0x4287, 0x6be: 0x01d3, 0x6bf: 0x4287,
+ // Block 0x1b, offset 0x6c0
+ 0x6c0: 0x42a0, 0x6c1: 0x4482, 0x6c2: 0x3dd8, 0x6c3: 0x369d, 0x6c4: 0x3de0,
+ 0x6c6: 0x483a, 0x6c7: 0x3df8, 0x6c8: 0x3601, 0x6c9: 0x42f4, 0x6ca: 0x360d, 0x6cb: 0x42fa,
+ 0x6cc: 0x3619, 0x6cd: 0x4489, 0x6ce: 0x4490, 0x6cf: 0x4497, 0x6d0: 0x36b5, 0x6d1: 0x36af,
+ 0x6d2: 0x3e00, 0x6d3: 0x44e4, 0x6d6: 0x36bb, 0x6d7: 0x3e10,
+ 0x6d8: 0x3631, 0x6d9: 0x362b, 0x6da: 0x361f, 0x6db: 0x4300, 0x6dd: 0x449e,
+ 0x6de: 0x44a5, 0x6df: 0x44ac, 0x6e0: 0x36eb, 0x6e1: 0x36e5, 0x6e2: 0x3e68, 0x6e3: 0x44ec,
+ 0x6e4: 0x36cd, 0x6e5: 0x36d3, 0x6e6: 0x36f1, 0x6e7: 0x3e78, 0x6e8: 0x3661, 0x6e9: 0x365b,
+ 0x6ea: 0x364f, 0x6eb: 0x430c, 0x6ec: 0x3649, 0x6ed: 0x4474, 0x6ee: 0x447b, 0x6ef: 0x0081,
+ 0x6f2: 0x3eb0, 0x6f3: 0x36f7, 0x6f4: 0x3eb8,
+ 0x6f6: 0x4888, 0x6f7: 0x3ed0, 0x6f8: 0x363d, 0x6f9: 0x4306, 0x6fa: 0x366d, 0x6fb: 0x4318,
+ 0x6fc: 0x3679, 0x6fd: 0x425a, 0x6fe: 0x428c,
+ // Block 0x1c, offset 0x700
+ 0x700: 0x1bd8, 0x701: 0x1bdc, 0x702: 0x0047, 0x703: 0x1c54, 0x705: 0x1be8,
+ 0x706: 0x1bec, 0x707: 0x00e9, 0x709: 0x1c58, 0x70a: 0x008f, 0x70b: 0x0051,
+ 0x70c: 0x0051, 0x70d: 0x0051, 0x70e: 0x0091, 0x70f: 0x00da, 0x710: 0x0053, 0x711: 0x0053,
+ 0x712: 0x0059, 0x713: 0x0099, 0x715: 0x005d, 0x716: 0x198d,
+ 0x719: 0x0061, 0x71a: 0x0063, 0x71b: 0x0065, 0x71c: 0x0065, 0x71d: 0x0065,
+ 0x720: 0x199f, 0x721: 0x1bc8, 0x722: 0x19a8,
+ 0x724: 0x0075, 0x726: 0x01b8, 0x728: 0x0075,
+ 0x72a: 0x0057, 0x72b: 0x42d2, 0x72c: 0x0045, 0x72d: 0x0047, 0x72f: 0x008b,
+ 0x730: 0x004b, 0x731: 0x004d, 0x733: 0x005b, 0x734: 0x009f, 0x735: 0x0215,
+ 0x736: 0x0218, 0x737: 0x021b, 0x738: 0x021e, 0x739: 0x0093, 0x73b: 0x1b98,
+ 0x73c: 0x01e8, 0x73d: 0x01c1, 0x73e: 0x0179, 0x73f: 0x01a0,
+ // Block 0x1d, offset 0x740
+ 0x740: 0x0463, 0x745: 0x0049,
+ 0x746: 0x0089, 0x747: 0x008b, 0x748: 0x0093, 0x749: 0x0095,
+ 0x750: 0x222e, 0x751: 0x223a,
+ 0x752: 0x22ee, 0x753: 0x2216, 0x754: 0x229a, 0x755: 0x2222, 0x756: 0x22a0, 0x757: 0x22b8,
+ 0x758: 0x22c4, 0x759: 0x2228, 0x75a: 0x22ca, 0x75b: 0x2234, 0x75c: 0x22be, 0x75d: 0x22d0,
+ 0x75e: 0x22d6, 0x75f: 0x1cbc, 0x760: 0x0053, 0x761: 0x195a, 0x762: 0x1ba4, 0x763: 0x1963,
+ 0x764: 0x006d, 0x765: 0x19ab, 0x766: 0x1bd0, 0x767: 0x1d48, 0x768: 0x1966, 0x769: 0x0071,
+ 0x76a: 0x19b7, 0x76b: 0x1bd4, 0x76c: 0x0059, 0x76d: 0x0047, 0x76e: 0x0049, 0x76f: 0x005b,
+ 0x770: 0x0093, 0x771: 0x19e4, 0x772: 0x1c18, 0x773: 0x19ed, 0x774: 0x00ad, 0x775: 0x1a62,
+ 0x776: 0x1c4c, 0x777: 0x1d5c, 0x778: 0x19f0, 0x779: 0x00b1, 0x77a: 0x1a65, 0x77b: 0x1c50,
+ 0x77c: 0x0099, 0x77d: 0x0087, 0x77e: 0x0089, 0x77f: 0x009b,
+ // Block 0x1e, offset 0x780
+ 0x781: 0x3c06, 0x783: 0xa000, 0x784: 0x3c0d, 0x785: 0xa000,
+ 0x787: 0x3c14, 0x788: 0xa000, 0x789: 0x3c1b,
+ 0x78d: 0xa000,
+ 0x7a0: 0x2f65, 0x7a1: 0xa000, 0x7a2: 0x3c29,
+ 0x7a4: 0xa000, 0x7a5: 0xa000,
+ 0x7ad: 0x3c22, 0x7ae: 0x2f60, 0x7af: 0x2f6a,
+ 0x7b0: 0x3c30, 0x7b1: 0x3c37, 0x7b2: 0xa000, 0x7b3: 0xa000, 0x7b4: 0x3c3e, 0x7b5: 0x3c45,
+ 0x7b6: 0xa000, 0x7b7: 0xa000, 0x7b8: 0x3c4c, 0x7b9: 0x3c53, 0x7ba: 0xa000, 0x7bb: 0xa000,
+ 0x7bc: 0xa000, 0x7bd: 0xa000,
+ // Block 0x1f, offset 0x7c0
+ 0x7c0: 0x3c5a, 0x7c1: 0x3c61, 0x7c2: 0xa000, 0x7c3: 0xa000, 0x7c4: 0x3c76, 0x7c5: 0x3c7d,
+ 0x7c6: 0xa000, 0x7c7: 0xa000, 0x7c8: 0x3c84, 0x7c9: 0x3c8b,
+ 0x7d1: 0xa000,
+ 0x7d2: 0xa000,
+ 0x7e2: 0xa000,
+ 0x7e8: 0xa000, 0x7e9: 0xa000,
+ 0x7eb: 0xa000, 0x7ec: 0x3ca0, 0x7ed: 0x3ca7, 0x7ee: 0x3cae, 0x7ef: 0x3cb5,
+ 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0xa000, 0x7f5: 0xa000,
+ // Block 0x20, offset 0x800
+ 0x820: 0x0023, 0x821: 0x0025, 0x822: 0x0027, 0x823: 0x0029,
+ 0x824: 0x002b, 0x825: 0x002d, 0x826: 0x002f, 0x827: 0x0031, 0x828: 0x0033, 0x829: 0x1882,
+ 0x82a: 0x1885, 0x82b: 0x1888, 0x82c: 0x188b, 0x82d: 0x188e, 0x82e: 0x1891, 0x82f: 0x1894,
+ 0x830: 0x1897, 0x831: 0x189a, 0x832: 0x189d, 0x833: 0x18a6, 0x834: 0x1a68, 0x835: 0x1a6c,
+ 0x836: 0x1a70, 0x837: 0x1a74, 0x838: 0x1a78, 0x839: 0x1a7c, 0x83a: 0x1a80, 0x83b: 0x1a84,
+ 0x83c: 0x1a88, 0x83d: 0x1c80, 0x83e: 0x1c85, 0x83f: 0x1c8a,
+ // Block 0x21, offset 0x840
+ 0x840: 0x1c8f, 0x841: 0x1c94, 0x842: 0x1c99, 0x843: 0x1c9e, 0x844: 0x1ca3, 0x845: 0x1ca8,
+ 0x846: 0x1cad, 0x847: 0x1cb2, 0x848: 0x187f, 0x849: 0x18a3, 0x84a: 0x18c7, 0x84b: 0x18eb,
+ 0x84c: 0x190f, 0x84d: 0x1918, 0x84e: 0x191e, 0x84f: 0x1924, 0x850: 0x192a, 0x851: 0x1b60,
+ 0x852: 0x1b64, 0x853: 0x1b68, 0x854: 0x1b6c, 0x855: 0x1b70, 0x856: 0x1b74, 0x857: 0x1b78,
+ 0x858: 0x1b7c, 0x859: 0x1b80, 0x85a: 0x1b84, 0x85b: 0x1b88, 0x85c: 0x1af4, 0x85d: 0x1af8,
+ 0x85e: 0x1afc, 0x85f: 0x1b00, 0x860: 0x1b04, 0x861: 0x1b08, 0x862: 0x1b0c, 0x863: 0x1b10,
+ 0x864: 0x1b14, 0x865: 0x1b18, 0x866: 0x1b1c, 0x867: 0x1b20, 0x868: 0x1b24, 0x869: 0x1b28,
+ 0x86a: 0x1b2c, 0x86b: 0x1b30, 0x86c: 0x1b34, 0x86d: 0x1b38, 0x86e: 0x1b3c, 0x86f: 0x1b40,
+ 0x870: 0x1b44, 0x871: 0x1b48, 0x872: 0x1b4c, 0x873: 0x1b50, 0x874: 0x1b54, 0x875: 0x1b58,
+ 0x876: 0x0043, 0x877: 0x0045, 0x878: 0x0047, 0x879: 0x0049, 0x87a: 0x004b, 0x87b: 0x004d,
+ 0x87c: 0x004f, 0x87d: 0x0051, 0x87e: 0x0053, 0x87f: 0x0055,
+ // Block 0x22, offset 0x880
+ 0x880: 0x06bf, 0x881: 0x06e3, 0x882: 0x06ef, 0x883: 0x06ff, 0x884: 0x0707, 0x885: 0x0713,
+ 0x886: 0x071b, 0x887: 0x0723, 0x888: 0x072f, 0x889: 0x0783, 0x88a: 0x079b, 0x88b: 0x07ab,
+ 0x88c: 0x07bb, 0x88d: 0x07cb, 0x88e: 0x07db, 0x88f: 0x07fb, 0x890: 0x07ff, 0x891: 0x0803,
+ 0x892: 0x0837, 0x893: 0x085f, 0x894: 0x086f, 0x895: 0x0877, 0x896: 0x087b, 0x897: 0x0887,
+ 0x898: 0x08a3, 0x899: 0x08a7, 0x89a: 0x08bf, 0x89b: 0x08c3, 0x89c: 0x08cb, 0x89d: 0x08db,
+ 0x89e: 0x0977, 0x89f: 0x098b, 0x8a0: 0x09cb, 0x8a1: 0x09df, 0x8a2: 0x09e7, 0x8a3: 0x09eb,
+ 0x8a4: 0x09fb, 0x8a5: 0x0a17, 0x8a6: 0x0a43, 0x8a7: 0x0a4f, 0x8a8: 0x0a6f, 0x8a9: 0x0a7b,
+ 0x8aa: 0x0a7f, 0x8ab: 0x0a83, 0x8ac: 0x0a9b, 0x8ad: 0x0a9f, 0x8ae: 0x0acb, 0x8af: 0x0ad7,
+ 0x8b0: 0x0adf, 0x8b1: 0x0ae7, 0x8b2: 0x0af7, 0x8b3: 0x0aff, 0x8b4: 0x0b07, 0x8b5: 0x0b33,
+ 0x8b6: 0x0b37, 0x8b7: 0x0b3f, 0x8b8: 0x0b43, 0x8b9: 0x0b4b, 0x8ba: 0x0b53, 0x8bb: 0x0b63,
+ 0x8bc: 0x0b7f, 0x8bd: 0x0bf7, 0x8be: 0x0c0b, 0x8bf: 0x0c0f,
+ // Block 0x23, offset 0x8c0
+ 0x8c0: 0x0c8f, 0x8c1: 0x0c93, 0x8c2: 0x0ca7, 0x8c3: 0x0cab, 0x8c4: 0x0cb3, 0x8c5: 0x0cbb,
+ 0x8c6: 0x0cc3, 0x8c7: 0x0ccf, 0x8c8: 0x0cf7, 0x8c9: 0x0d07, 0x8ca: 0x0d1b, 0x8cb: 0x0d8b,
+ 0x8cc: 0x0d97, 0x8cd: 0x0da7, 0x8ce: 0x0db3, 0x8cf: 0x0dbf, 0x8d0: 0x0dc7, 0x8d1: 0x0dcb,
+ 0x8d2: 0x0dcf, 0x8d3: 0x0dd3, 0x8d4: 0x0dd7, 0x8d5: 0x0e8f, 0x8d6: 0x0ed7, 0x8d7: 0x0ee3,
+ 0x8d8: 0x0ee7, 0x8d9: 0x0eeb, 0x8da: 0x0eef, 0x8db: 0x0ef7, 0x8dc: 0x0efb, 0x8dd: 0x0f0f,
+ 0x8de: 0x0f2b, 0x8df: 0x0f33, 0x8e0: 0x0f73, 0x8e1: 0x0f77, 0x8e2: 0x0f7f, 0x8e3: 0x0f83,
+ 0x8e4: 0x0f8b, 0x8e5: 0x0f8f, 0x8e6: 0x0fb3, 0x8e7: 0x0fb7, 0x8e8: 0x0fd3, 0x8e9: 0x0fd7,
+ 0x8ea: 0x0fdb, 0x8eb: 0x0fdf, 0x8ec: 0x0ff3, 0x8ed: 0x1017, 0x8ee: 0x101b, 0x8ef: 0x101f,
+ 0x8f0: 0x1043, 0x8f1: 0x1083, 0x8f2: 0x1087, 0x8f3: 0x10a7, 0x8f4: 0x10b7, 0x8f5: 0x10bf,
+ 0x8f6: 0x10df, 0x8f7: 0x1103, 0x8f8: 0x1147, 0x8f9: 0x114f, 0x8fa: 0x1163, 0x8fb: 0x116f,
+ 0x8fc: 0x1177, 0x8fd: 0x117f, 0x8fe: 0x1183, 0x8ff: 0x1187,
+ // Block 0x24, offset 0x900
+ 0x900: 0x119f, 0x901: 0x11a3, 0x902: 0x11bf, 0x903: 0x11c7, 0x904: 0x11cf, 0x905: 0x11d3,
+ 0x906: 0x11df, 0x907: 0x11e7, 0x908: 0x11eb, 0x909: 0x11ef, 0x90a: 0x11f7, 0x90b: 0x11fb,
+ 0x90c: 0x129b, 0x90d: 0x12af, 0x90e: 0x12e3, 0x90f: 0x12e7, 0x910: 0x12ef, 0x911: 0x131b,
+ 0x912: 0x1323, 0x913: 0x132b, 0x914: 0x1333, 0x915: 0x136f, 0x916: 0x1373, 0x917: 0x137b,
+ 0x918: 0x137f, 0x919: 0x1383, 0x91a: 0x13af, 0x91b: 0x13b3, 0x91c: 0x13bb, 0x91d: 0x13cf,
+ 0x91e: 0x13d3, 0x91f: 0x13ef, 0x920: 0x13f7, 0x921: 0x13fb, 0x922: 0x141f, 0x923: 0x143f,
+ 0x924: 0x1453, 0x925: 0x1457, 0x926: 0x145f, 0x927: 0x148b, 0x928: 0x148f, 0x929: 0x149f,
+ 0x92a: 0x14c3, 0x92b: 0x14cf, 0x92c: 0x14df, 0x92d: 0x14f7, 0x92e: 0x14ff, 0x92f: 0x1503,
+ 0x930: 0x1507, 0x931: 0x150b, 0x932: 0x1517, 0x933: 0x151b, 0x934: 0x1523, 0x935: 0x153f,
+ 0x936: 0x1543, 0x937: 0x1547, 0x938: 0x155f, 0x939: 0x1563, 0x93a: 0x156b, 0x93b: 0x157f,
+ 0x93c: 0x1583, 0x93d: 0x1587, 0x93e: 0x158f, 0x93f: 0x1593,
+ // Block 0x25, offset 0x940
+ 0x946: 0xa000, 0x94b: 0xa000,
+ 0x94c: 0x3f08, 0x94d: 0xa000, 0x94e: 0x3f10, 0x94f: 0xa000, 0x950: 0x3f18, 0x951: 0xa000,
+ 0x952: 0x3f20, 0x953: 0xa000, 0x954: 0x3f28, 0x955: 0xa000, 0x956: 0x3f30, 0x957: 0xa000,
+ 0x958: 0x3f38, 0x959: 0xa000, 0x95a: 0x3f40, 0x95b: 0xa000, 0x95c: 0x3f48, 0x95d: 0xa000,
+ 0x95e: 0x3f50, 0x95f: 0xa000, 0x960: 0x3f58, 0x961: 0xa000, 0x962: 0x3f60,
+ 0x964: 0xa000, 0x965: 0x3f68, 0x966: 0xa000, 0x967: 0x3f70, 0x968: 0xa000, 0x969: 0x3f78,
+ 0x96f: 0xa000,
+ 0x970: 0x3f80, 0x971: 0x3f88, 0x972: 0xa000, 0x973: 0x3f90, 0x974: 0x3f98, 0x975: 0xa000,
+ 0x976: 0x3fa0, 0x977: 0x3fa8, 0x978: 0xa000, 0x979: 0x3fb0, 0x97a: 0x3fb8, 0x97b: 0xa000,
+ 0x97c: 0x3fc0, 0x97d: 0x3fc8,
+ // Block 0x26, offset 0x980
+ 0x994: 0x3f00,
+ 0x999: 0x9903, 0x99a: 0x9903, 0x99b: 0x42dc, 0x99c: 0x42e2, 0x99d: 0xa000,
+ 0x99e: 0x3fd0, 0x99f: 0x26b4,
+ 0x9a6: 0xa000,
+ 0x9ab: 0xa000, 0x9ac: 0x3fe0, 0x9ad: 0xa000, 0x9ae: 0x3fe8, 0x9af: 0xa000,
+ 0x9b0: 0x3ff0, 0x9b1: 0xa000, 0x9b2: 0x3ff8, 0x9b3: 0xa000, 0x9b4: 0x4000, 0x9b5: 0xa000,
+ 0x9b6: 0x4008, 0x9b7: 0xa000, 0x9b8: 0x4010, 0x9b9: 0xa000, 0x9ba: 0x4018, 0x9bb: 0xa000,
+ 0x9bc: 0x4020, 0x9bd: 0xa000, 0x9be: 0x4028, 0x9bf: 0xa000,
+ // Block 0x27, offset 0x9c0
+ 0x9c0: 0x4030, 0x9c1: 0xa000, 0x9c2: 0x4038, 0x9c4: 0xa000, 0x9c5: 0x4040,
+ 0x9c6: 0xa000, 0x9c7: 0x4048, 0x9c8: 0xa000, 0x9c9: 0x4050,
+ 0x9cf: 0xa000, 0x9d0: 0x4058, 0x9d1: 0x4060,
+ 0x9d2: 0xa000, 0x9d3: 0x4068, 0x9d4: 0x4070, 0x9d5: 0xa000, 0x9d6: 0x4078, 0x9d7: 0x4080,
+ 0x9d8: 0xa000, 0x9d9: 0x4088, 0x9da: 0x4090, 0x9db: 0xa000, 0x9dc: 0x4098, 0x9dd: 0x40a0,
+ 0x9ef: 0xa000,
+ 0x9f0: 0xa000, 0x9f1: 0xa000, 0x9f2: 0xa000, 0x9f4: 0x3fd8,
+ 0x9f7: 0x40a8, 0x9f8: 0x40b0, 0x9f9: 0x40b8, 0x9fa: 0x40c0,
+ 0x9fd: 0xa000, 0x9fe: 0x40c8, 0x9ff: 0x26c9,
+ // Block 0x28, offset 0xa00
+ 0xa00: 0x0367, 0xa01: 0x032b, 0xa02: 0x032f, 0xa03: 0x0333, 0xa04: 0x037b, 0xa05: 0x0337,
+ 0xa06: 0x033b, 0xa07: 0x033f, 0xa08: 0x0343, 0xa09: 0x0347, 0xa0a: 0x034b, 0xa0b: 0x034f,
+ 0xa0c: 0x0353, 0xa0d: 0x0357, 0xa0e: 0x035b, 0xa0f: 0x49bd, 0xa10: 0x49c3, 0xa11: 0x49c9,
+ 0xa12: 0x49cf, 0xa13: 0x49d5, 0xa14: 0x49db, 0xa15: 0x49e1, 0xa16: 0x49e7, 0xa17: 0x49ed,
+ 0xa18: 0x49f3, 0xa19: 0x49f9, 0xa1a: 0x49ff, 0xa1b: 0x4a05, 0xa1c: 0x4a0b, 0xa1d: 0x4a11,
+ 0xa1e: 0x4a17, 0xa1f: 0x4a1d, 0xa20: 0x4a23, 0xa21: 0x4a29, 0xa22: 0x4a2f, 0xa23: 0x4a35,
+ 0xa24: 0x03c3, 0xa25: 0x035f, 0xa26: 0x0363, 0xa27: 0x03e7, 0xa28: 0x03eb, 0xa29: 0x03ef,
+ 0xa2a: 0x03f3, 0xa2b: 0x03f7, 0xa2c: 0x03fb, 0xa2d: 0x03ff, 0xa2e: 0x036b, 0xa2f: 0x0403,
+ 0xa30: 0x0407, 0xa31: 0x036f, 0xa32: 0x0373, 0xa33: 0x0377, 0xa34: 0x037f, 0xa35: 0x0383,
+ 0xa36: 0x0387, 0xa37: 0x038b, 0xa38: 0x038f, 0xa39: 0x0393, 0xa3a: 0x0397, 0xa3b: 0x039b,
+ 0xa3c: 0x039f, 0xa3d: 0x03a3, 0xa3e: 0x03a7, 0xa3f: 0x03ab,
+ // Block 0x29, offset 0xa40
+ 0xa40: 0x03af, 0xa41: 0x03b3, 0xa42: 0x040b, 0xa43: 0x040f, 0xa44: 0x03b7, 0xa45: 0x03bb,
+ 0xa46: 0x03bf, 0xa47: 0x03c7, 0xa48: 0x03cb, 0xa49: 0x03cf, 0xa4a: 0x03d3, 0xa4b: 0x03d7,
+ 0xa4c: 0x03db, 0xa4d: 0x03df, 0xa4e: 0x03e3,
+ 0xa52: 0x06bf, 0xa53: 0x071b, 0xa54: 0x06cb, 0xa55: 0x097b, 0xa56: 0x06cf, 0xa57: 0x06e7,
+ 0xa58: 0x06d3, 0xa59: 0x0f93, 0xa5a: 0x0707, 0xa5b: 0x06db, 0xa5c: 0x06c3, 0xa5d: 0x09ff,
+ 0xa5e: 0x098f, 0xa5f: 0x072f,
+ // Block 0x2a, offset 0xa80
+ 0xa80: 0x2054, 0xa81: 0x205a, 0xa82: 0x2060, 0xa83: 0x2066, 0xa84: 0x206c, 0xa85: 0x2072,
+ 0xa86: 0x2078, 0xa87: 0x207e, 0xa88: 0x2084, 0xa89: 0x208a, 0xa8a: 0x2090, 0xa8b: 0x2096,
+ 0xa8c: 0x209c, 0xa8d: 0x20a2, 0xa8e: 0x2726, 0xa8f: 0x272f, 0xa90: 0x2738, 0xa91: 0x2741,
+ 0xa92: 0x274a, 0xa93: 0x2753, 0xa94: 0x275c, 0xa95: 0x2765, 0xa96: 0x276e, 0xa97: 0x2780,
+ 0xa98: 0x2789, 0xa99: 0x2792, 0xa9a: 0x279b, 0xa9b: 0x27a4, 0xa9c: 0x2777, 0xa9d: 0x2bac,
+ 0xa9e: 0x2aed, 0xaa0: 0x20a8, 0xaa1: 0x20c0, 0xaa2: 0x20b4, 0xaa3: 0x2108,
+ 0xaa4: 0x20c6, 0xaa5: 0x20e4, 0xaa6: 0x20ae, 0xaa7: 0x20de, 0xaa8: 0x20ba, 0xaa9: 0x20f0,
+ 0xaaa: 0x2120, 0xaab: 0x213e, 0xaac: 0x2138, 0xaad: 0x212c, 0xaae: 0x217a, 0xaaf: 0x210e,
+ 0xab0: 0x211a, 0xab1: 0x2132, 0xab2: 0x2126, 0xab3: 0x2150, 0xab4: 0x20fc, 0xab5: 0x2144,
+ 0xab6: 0x216e, 0xab7: 0x2156, 0xab8: 0x20ea, 0xab9: 0x20cc, 0xaba: 0x2102, 0xabb: 0x2114,
+ 0xabc: 0x214a, 0xabd: 0x20d2, 0xabe: 0x2174, 0xabf: 0x20f6,
+ // Block 0x2b, offset 0xac0
+ 0xac0: 0x215c, 0xac1: 0x20d8, 0xac2: 0x2162, 0xac3: 0x2168, 0xac4: 0x092f, 0xac5: 0x0b03,
+ 0xac6: 0x0ca7, 0xac7: 0x10c7,
+ 0xad0: 0x1bc4, 0xad1: 0x18a9,
+ 0xad2: 0x18ac, 0xad3: 0x18af, 0xad4: 0x18b2, 0xad5: 0x18b5, 0xad6: 0x18b8, 0xad7: 0x18bb,
+ 0xad8: 0x18be, 0xad9: 0x18c1, 0xada: 0x18ca, 0xadb: 0x18cd, 0xadc: 0x18d0, 0xadd: 0x18d3,
+ 0xade: 0x18d6, 0xadf: 0x18d9, 0xae0: 0x0313, 0xae1: 0x031b, 0xae2: 0x031f, 0xae3: 0x0327,
+ 0xae4: 0x032b, 0xae5: 0x032f, 0xae6: 0x0337, 0xae7: 0x033f, 0xae8: 0x0343, 0xae9: 0x034b,
+ 0xaea: 0x034f, 0xaeb: 0x0353, 0xaec: 0x0357, 0xaed: 0x035b, 0xaee: 0x2e18, 0xaef: 0x2e20,
+ 0xaf0: 0x2e28, 0xaf1: 0x2e30, 0xaf2: 0x2e38, 0xaf3: 0x2e40, 0xaf4: 0x2e48, 0xaf5: 0x2e50,
+ 0xaf6: 0x2e60, 0xaf7: 0x2e68, 0xaf8: 0x2e70, 0xaf9: 0x2e78, 0xafa: 0x2e80, 0xafb: 0x2e88,
+ 0xafc: 0x2ed3, 0xafd: 0x2e9b, 0xafe: 0x2e58,
+ // Block 0x2c, offset 0xb00
+ 0xb00: 0x06bf, 0xb01: 0x071b, 0xb02: 0x06cb, 0xb03: 0x097b, 0xb04: 0x071f, 0xb05: 0x07af,
+ 0xb06: 0x06c7, 0xb07: 0x07ab, 0xb08: 0x070b, 0xb09: 0x0887, 0xb0a: 0x0d07, 0xb0b: 0x0e8f,
+ 0xb0c: 0x0dd7, 0xb0d: 0x0d1b, 0xb0e: 0x145f, 0xb0f: 0x098b, 0xb10: 0x0ccf, 0xb11: 0x0d4b,
+ 0xb12: 0x0d0b, 0xb13: 0x104b, 0xb14: 0x08fb, 0xb15: 0x0f03, 0xb16: 0x1387, 0xb17: 0x105f,
+ 0xb18: 0x0843, 0xb19: 0x108f, 0xb1a: 0x0f9b, 0xb1b: 0x0a17, 0xb1c: 0x140f, 0xb1d: 0x077f,
+ 0xb1e: 0x08ab, 0xb1f: 0x0df7, 0xb20: 0x1527, 0xb21: 0x0743, 0xb22: 0x07d3, 0xb23: 0x0d9b,
+ 0xb24: 0x06cf, 0xb25: 0x06e7, 0xb26: 0x06d3, 0xb27: 0x0adb, 0xb28: 0x08ef, 0xb29: 0x087f,
+ 0xb2a: 0x0a57, 0xb2b: 0x0a4b, 0xb2c: 0x0feb, 0xb2d: 0x073f, 0xb2e: 0x139b, 0xb2f: 0x089b,
+ 0xb30: 0x09f3, 0xb31: 0x18dc, 0xb32: 0x18df, 0xb33: 0x18e2, 0xb34: 0x18e5, 0xb35: 0x18ee,
+ 0xb36: 0x18f1, 0xb37: 0x18f4, 0xb38: 0x18f7, 0xb39: 0x18fa, 0xb3a: 0x18fd, 0xb3b: 0x1900,
+ 0xb3c: 0x1903, 0xb3d: 0x1906, 0xb3e: 0x1909, 0xb3f: 0x1912,
+ // Block 0x2d, offset 0xb40
+ 0xb40: 0x1cc6, 0xb41: 0x1cd5, 0xb42: 0x1ce4, 0xb43: 0x1cf3, 0xb44: 0x1d02, 0xb45: 0x1d11,
+ 0xb46: 0x1d20, 0xb47: 0x1d2f, 0xb48: 0x1d3e, 0xb49: 0x218c, 0xb4a: 0x219e, 0xb4b: 0x21b0,
+ 0xb4c: 0x1954, 0xb4d: 0x1c04, 0xb4e: 0x19d2, 0xb4f: 0x1ba8, 0xb50: 0x04cb, 0xb51: 0x04d3,
+ 0xb52: 0x04db, 0xb53: 0x04e3, 0xb54: 0x04eb, 0xb55: 0x04ef, 0xb56: 0x04f3, 0xb57: 0x04f7,
+ 0xb58: 0x04fb, 0xb59: 0x04ff, 0xb5a: 0x0503, 0xb5b: 0x0507, 0xb5c: 0x050b, 0xb5d: 0x050f,
+ 0xb5e: 0x0513, 0xb5f: 0x0517, 0xb60: 0x051b, 0xb61: 0x0523, 0xb62: 0x0527, 0xb63: 0x052b,
+ 0xb64: 0x052f, 0xb65: 0x0533, 0xb66: 0x0537, 0xb67: 0x053b, 0xb68: 0x053f, 0xb69: 0x0543,
+ 0xb6a: 0x0547, 0xb6b: 0x054b, 0xb6c: 0x054f, 0xb6d: 0x0553, 0xb6e: 0x0557, 0xb6f: 0x055b,
+ 0xb70: 0x055f, 0xb71: 0x0563, 0xb72: 0x0567, 0xb73: 0x056f, 0xb74: 0x0577, 0xb75: 0x057f,
+ 0xb76: 0x0583, 0xb77: 0x0587, 0xb78: 0x058b, 0xb79: 0x058f, 0xb7a: 0x0593, 0xb7b: 0x0597,
+ 0xb7c: 0x059b, 0xb7d: 0x059f, 0xb7e: 0x05a3,
+ // Block 0x2e, offset 0xb80
+ 0xb80: 0x2b0c, 0xb81: 0x29a8, 0xb82: 0x2b1c, 0xb83: 0x2880, 0xb84: 0x2ee4, 0xb85: 0x288a,
+ 0xb86: 0x2894, 0xb87: 0x2f28, 0xb88: 0x29b5, 0xb89: 0x289e, 0xb8a: 0x28a8, 0xb8b: 0x28b2,
+ 0xb8c: 0x29dc, 0xb8d: 0x29e9, 0xb8e: 0x29c2, 0xb8f: 0x29cf, 0xb90: 0x2ea9, 0xb91: 0x29f6,
+ 0xb92: 0x2a03, 0xb93: 0x2bbe, 0xb94: 0x26bb, 0xb95: 0x2bd1, 0xb96: 0x2be4, 0xb97: 0x2b2c,
+ 0xb98: 0x2a10, 0xb99: 0x2bf7, 0xb9a: 0x2c0a, 0xb9b: 0x2a1d, 0xb9c: 0x28bc, 0xb9d: 0x28c6,
+ 0xb9e: 0x2eb7, 0xb9f: 0x2a2a, 0xba0: 0x2b3c, 0xba1: 0x2ef5, 0xba2: 0x28d0, 0xba3: 0x28da,
+ 0xba4: 0x2a37, 0xba5: 0x28e4, 0xba6: 0x28ee, 0xba7: 0x26d0, 0xba8: 0x26d7, 0xba9: 0x28f8,
+ 0xbaa: 0x2902, 0xbab: 0x2c1d, 0xbac: 0x2a44, 0xbad: 0x2b4c, 0xbae: 0x2c30, 0xbaf: 0x2a51,
+ 0xbb0: 0x2916, 0xbb1: 0x290c, 0xbb2: 0x2f3c, 0xbb3: 0x2a5e, 0xbb4: 0x2c43, 0xbb5: 0x2920,
+ 0xbb6: 0x2b5c, 0xbb7: 0x292a, 0xbb8: 0x2a78, 0xbb9: 0x2934, 0xbba: 0x2a85, 0xbbb: 0x2f06,
+ 0xbbc: 0x2a6b, 0xbbd: 0x2b6c, 0xbbe: 0x2a92, 0xbbf: 0x26de,
+ // Block 0x2f, offset 0xbc0
+ 0xbc0: 0x2f17, 0xbc1: 0x293e, 0xbc2: 0x2948, 0xbc3: 0x2a9f, 0xbc4: 0x2952, 0xbc5: 0x295c,
+ 0xbc6: 0x2966, 0xbc7: 0x2b7c, 0xbc8: 0x2aac, 0xbc9: 0x26e5, 0xbca: 0x2c56, 0xbcb: 0x2e90,
+ 0xbcc: 0x2b8c, 0xbcd: 0x2ab9, 0xbce: 0x2ec5, 0xbcf: 0x2970, 0xbd0: 0x297a, 0xbd1: 0x2ac6,
+ 0xbd2: 0x26ec, 0xbd3: 0x2ad3, 0xbd4: 0x2b9c, 0xbd5: 0x26f3, 0xbd6: 0x2c69, 0xbd7: 0x2984,
+ 0xbd8: 0x1cb7, 0xbd9: 0x1ccb, 0xbda: 0x1cda, 0xbdb: 0x1ce9, 0xbdc: 0x1cf8, 0xbdd: 0x1d07,
+ 0xbde: 0x1d16, 0xbdf: 0x1d25, 0xbe0: 0x1d34, 0xbe1: 0x1d43, 0xbe2: 0x2192, 0xbe3: 0x21a4,
+ 0xbe4: 0x21b6, 0xbe5: 0x21c2, 0xbe6: 0x21ce, 0xbe7: 0x21da, 0xbe8: 0x21e6, 0xbe9: 0x21f2,
+ 0xbea: 0x21fe, 0xbeb: 0x220a, 0xbec: 0x2246, 0xbed: 0x2252, 0xbee: 0x225e, 0xbef: 0x226a,
+ 0xbf0: 0x2276, 0xbf1: 0x1c14, 0xbf2: 0x19c6, 0xbf3: 0x1936, 0xbf4: 0x1be4, 0xbf5: 0x1a47,
+ 0xbf6: 0x1a56, 0xbf7: 0x19cc, 0xbf8: 0x1bfc, 0xbf9: 0x1c00, 0xbfa: 0x1960, 0xbfb: 0x2701,
+ 0xbfc: 0x270f, 0xbfd: 0x26fa, 0xbfe: 0x2708, 0xbff: 0x2ae0,
+ // Block 0x30, offset 0xc00
+ 0xc00: 0x1a4a, 0xc01: 0x1a32, 0xc02: 0x1c60, 0xc03: 0x1a1a, 0xc04: 0x19f3, 0xc05: 0x1969,
+ 0xc06: 0x1978, 0xc07: 0x1948, 0xc08: 0x1bf0, 0xc09: 0x1d52, 0xc0a: 0x1a4d, 0xc0b: 0x1a35,
+ 0xc0c: 0x1c64, 0xc0d: 0x1c70, 0xc0e: 0x1a26, 0xc0f: 0x19fc, 0xc10: 0x1957, 0xc11: 0x1c1c,
+ 0xc12: 0x1bb0, 0xc13: 0x1b9c, 0xc14: 0x1bcc, 0xc15: 0x1c74, 0xc16: 0x1a29, 0xc17: 0x19c9,
+ 0xc18: 0x19ff, 0xc19: 0x19de, 0xc1a: 0x1a41, 0xc1b: 0x1c78, 0xc1c: 0x1a2c, 0xc1d: 0x19c0,
+ 0xc1e: 0x1a02, 0xc1f: 0x1c3c, 0xc20: 0x1bf4, 0xc21: 0x1a14, 0xc22: 0x1c24, 0xc23: 0x1c40,
+ 0xc24: 0x1bf8, 0xc25: 0x1a17, 0xc26: 0x1c28, 0xc27: 0x22e8, 0xc28: 0x22fc, 0xc29: 0x1996,
+ 0xc2a: 0x1c20, 0xc2b: 0x1bb4, 0xc2c: 0x1ba0, 0xc2d: 0x1c48, 0xc2e: 0x2716, 0xc2f: 0x27ad,
+ 0xc30: 0x1a59, 0xc31: 0x1a44, 0xc32: 0x1c7c, 0xc33: 0x1a2f, 0xc34: 0x1a50, 0xc35: 0x1a38,
+ 0xc36: 0x1c68, 0xc37: 0x1a1d, 0xc38: 0x19f6, 0xc39: 0x1981, 0xc3a: 0x1a53, 0xc3b: 0x1a3b,
+ 0xc3c: 0x1c6c, 0xc3d: 0x1a20, 0xc3e: 0x19f9, 0xc3f: 0x1984,
+ // Block 0x31, offset 0xc40
+ 0xc40: 0x1c2c, 0xc41: 0x1bb8, 0xc42: 0x1d4d, 0xc43: 0x1939, 0xc44: 0x19ba, 0xc45: 0x19bd,
+ 0xc46: 0x22f5, 0xc47: 0x1b94, 0xc48: 0x19c3, 0xc49: 0x194b, 0xc4a: 0x19e1, 0xc4b: 0x194e,
+ 0xc4c: 0x19ea, 0xc4d: 0x196c, 0xc4e: 0x196f, 0xc4f: 0x1a05, 0xc50: 0x1a0b, 0xc51: 0x1a0e,
+ 0xc52: 0x1c30, 0xc53: 0x1a11, 0xc54: 0x1a23, 0xc55: 0x1c38, 0xc56: 0x1c44, 0xc57: 0x1990,
+ 0xc58: 0x1d57, 0xc59: 0x1bbc, 0xc5a: 0x1993, 0xc5b: 0x1a5c, 0xc5c: 0x19a5, 0xc5d: 0x19b4,
+ 0xc5e: 0x22e2, 0xc5f: 0x22dc, 0xc60: 0x1cc1, 0xc61: 0x1cd0, 0xc62: 0x1cdf, 0xc63: 0x1cee,
+ 0xc64: 0x1cfd, 0xc65: 0x1d0c, 0xc66: 0x1d1b, 0xc67: 0x1d2a, 0xc68: 0x1d39, 0xc69: 0x2186,
+ 0xc6a: 0x2198, 0xc6b: 0x21aa, 0xc6c: 0x21bc, 0xc6d: 0x21c8, 0xc6e: 0x21d4, 0xc6f: 0x21e0,
+ 0xc70: 0x21ec, 0xc71: 0x21f8, 0xc72: 0x2204, 0xc73: 0x2240, 0xc74: 0x224c, 0xc75: 0x2258,
+ 0xc76: 0x2264, 0xc77: 0x2270, 0xc78: 0x227c, 0xc79: 0x2282, 0xc7a: 0x2288, 0xc7b: 0x228e,
+ 0xc7c: 0x2294, 0xc7d: 0x22a6, 0xc7e: 0x22ac, 0xc7f: 0x1c10,
+ // Block 0x32, offset 0xc80
+ 0xc80: 0x1377, 0xc81: 0x0cfb, 0xc82: 0x13d3, 0xc83: 0x139f, 0xc84: 0x0e57, 0xc85: 0x06eb,
+ 0xc86: 0x08df, 0xc87: 0x162b, 0xc88: 0x162b, 0xc89: 0x0a0b, 0xc8a: 0x145f, 0xc8b: 0x0943,
+ 0xc8c: 0x0a07, 0xc8d: 0x0bef, 0xc8e: 0x0fcf, 0xc8f: 0x115f, 0xc90: 0x1297, 0xc91: 0x12d3,
+ 0xc92: 0x1307, 0xc93: 0x141b, 0xc94: 0x0d73, 0xc95: 0x0dff, 0xc96: 0x0eab, 0xc97: 0x0f43,
+ 0xc98: 0x125f, 0xc99: 0x1447, 0xc9a: 0x1573, 0xc9b: 0x070f, 0xc9c: 0x08b3, 0xc9d: 0x0d87,
+ 0xc9e: 0x0ecf, 0xc9f: 0x1293, 0xca0: 0x15c3, 0xca1: 0x0ab3, 0xca2: 0x0e77, 0xca3: 0x1283,
+ 0xca4: 0x1317, 0xca5: 0x0c23, 0xca6: 0x11bb, 0xca7: 0x12df, 0xca8: 0x0b1f, 0xca9: 0x0d0f,
+ 0xcaa: 0x0e17, 0xcab: 0x0f1b, 0xcac: 0x1427, 0xcad: 0x074f, 0xcae: 0x07e7, 0xcaf: 0x0853,
+ 0xcb0: 0x0c8b, 0xcb1: 0x0d7f, 0xcb2: 0x0ecb, 0xcb3: 0x0fef, 0xcb4: 0x1177, 0xcb5: 0x128b,
+ 0xcb6: 0x12a3, 0xcb7: 0x13c7, 0xcb8: 0x14ef, 0xcb9: 0x15a3, 0xcba: 0x15bf, 0xcbb: 0x102b,
+ 0xcbc: 0x106b, 0xcbd: 0x1123, 0xcbe: 0x1243, 0xcbf: 0x147b,
+ // Block 0x33, offset 0xcc0
+ 0xcc0: 0x15cb, 0xcc1: 0x134b, 0xcc2: 0x09c7, 0xcc3: 0x0b3b, 0xcc4: 0x10db, 0xcc5: 0x119b,
+ 0xcc6: 0x0eff, 0xcc7: 0x1033, 0xcc8: 0x1397, 0xcc9: 0x14e7, 0xcca: 0x09c3, 0xccb: 0x0a8f,
+ 0xccc: 0x0d77, 0xccd: 0x0e2b, 0xcce: 0x0e5f, 0xccf: 0x1113, 0xcd0: 0x113b, 0xcd1: 0x14a7,
+ 0xcd2: 0x084f, 0xcd3: 0x11a7, 0xcd4: 0x07f3, 0xcd5: 0x07ef, 0xcd6: 0x1097, 0xcd7: 0x1127,
+ 0xcd8: 0x125b, 0xcd9: 0x14af, 0xcda: 0x1367, 0xcdb: 0x0c27, 0xcdc: 0x0d73, 0xcdd: 0x1357,
+ 0xcde: 0x06f7, 0xcdf: 0x0a63, 0xce0: 0x0b93, 0xce1: 0x0f2f, 0xce2: 0x0faf, 0xce3: 0x0873,
+ 0xce4: 0x103b, 0xce5: 0x075f, 0xce6: 0x0b77, 0xce7: 0x06d7, 0xce8: 0x0deb, 0xce9: 0x0ca3,
+ 0xcea: 0x110f, 0xceb: 0x08c7, 0xcec: 0x09b3, 0xced: 0x0ffb, 0xcee: 0x1263, 0xcef: 0x133b,
+ 0xcf0: 0x0db7, 0xcf1: 0x13f7, 0xcf2: 0x0de3, 0xcf3: 0x0c37, 0xcf4: 0x121b, 0xcf5: 0x0c57,
+ 0xcf6: 0x0fab, 0xcf7: 0x072b, 0xcf8: 0x07a7, 0xcf9: 0x07eb, 0xcfa: 0x0d53, 0xcfb: 0x10fb,
+ 0xcfc: 0x11f3, 0xcfd: 0x1347, 0xcfe: 0x145b, 0xcff: 0x085b,
+ // Block 0x34, offset 0xd00
+ 0xd00: 0x090f, 0xd01: 0x0a17, 0xd02: 0x0b2f, 0xd03: 0x0cbf, 0xd04: 0x0e7b, 0xd05: 0x103f,
+ 0xd06: 0x1497, 0xd07: 0x157b, 0xd08: 0x15cf, 0xd09: 0x15e7, 0xd0a: 0x0837, 0xd0b: 0x0cf3,
+ 0xd0c: 0x0da3, 0xd0d: 0x13eb, 0xd0e: 0x0afb, 0xd0f: 0x0bd7, 0xd10: 0x0bf3, 0xd11: 0x0c83,
+ 0xd12: 0x0e6b, 0xd13: 0x0eb7, 0xd14: 0x0f67, 0xd15: 0x108b, 0xd16: 0x112f, 0xd17: 0x1193,
+ 0xd18: 0x13db, 0xd19: 0x126b, 0xd1a: 0x1403, 0xd1b: 0x147f, 0xd1c: 0x080f, 0xd1d: 0x083b,
+ 0xd1e: 0x0923, 0xd1f: 0x0ea7, 0xd20: 0x12f3, 0xd21: 0x133b, 0xd22: 0x0b1b, 0xd23: 0x0b8b,
+ 0xd24: 0x0c4f, 0xd25: 0x0daf, 0xd26: 0x10d7, 0xd27: 0x0f23, 0xd28: 0x073b, 0xd29: 0x097f,
+ 0xd2a: 0x0a63, 0xd2b: 0x0ac7, 0xd2c: 0x0b97, 0xd2d: 0x0f3f, 0xd2e: 0x0f5b, 0xd2f: 0x116b,
+ 0xd30: 0x118b, 0xd31: 0x1463, 0xd32: 0x14e3, 0xd33: 0x14f3, 0xd34: 0x152f, 0xd35: 0x0753,
+ 0xd36: 0x107f, 0xd37: 0x144f, 0xd38: 0x14cb, 0xd39: 0x0baf, 0xd3a: 0x0717, 0xd3b: 0x0777,
+ 0xd3c: 0x0a67, 0xd3d: 0x0a87, 0xd3e: 0x0caf, 0xd3f: 0x0d73,
+ // Block 0x35, offset 0xd40
+ 0xd40: 0x0ec3, 0xd41: 0x0fcb, 0xd42: 0x1277, 0xd43: 0x1417, 0xd44: 0x1623, 0xd45: 0x0ce3,
+ 0xd46: 0x14a3, 0xd47: 0x0833, 0xd48: 0x0d2f, 0xd49: 0x0d3b, 0xd4a: 0x0e0f, 0xd4b: 0x0e47,
+ 0xd4c: 0x0f4b, 0xd4d: 0x0fa7, 0xd4e: 0x1027, 0xd4f: 0x110b, 0xd50: 0x153b, 0xd51: 0x07af,
+ 0xd52: 0x0c03, 0xd53: 0x14b3, 0xd54: 0x0767, 0xd55: 0x0aab, 0xd56: 0x0e2f, 0xd57: 0x13df,
+ 0xd58: 0x0b67, 0xd59: 0x0bb7, 0xd5a: 0x0d43, 0xd5b: 0x0f2f, 0xd5c: 0x14bb, 0xd5d: 0x0817,
+ 0xd5e: 0x08ff, 0xd5f: 0x0a97, 0xd60: 0x0cd3, 0xd61: 0x0d1f, 0xd62: 0x0d5f, 0xd63: 0x0df3,
+ 0xd64: 0x0f47, 0xd65: 0x0fbb, 0xd66: 0x1157, 0xd67: 0x12f7, 0xd68: 0x1303, 0xd69: 0x1457,
+ 0xd6a: 0x14d7, 0xd6b: 0x0883, 0xd6c: 0x0e4b, 0xd6d: 0x0903, 0xd6e: 0x0ec7, 0xd6f: 0x0f6b,
+ 0xd70: 0x1287, 0xd71: 0x14bf, 0xd72: 0x15ab, 0xd73: 0x15d3, 0xd74: 0x0d37, 0xd75: 0x0e27,
+ 0xd76: 0x11c3, 0xd77: 0x10b7, 0xd78: 0x10c3, 0xd79: 0x10e7, 0xd7a: 0x0f17, 0xd7b: 0x0e9f,
+ 0xd7c: 0x1363, 0xd7d: 0x0733, 0xd7e: 0x122b, 0xd7f: 0x081b,
+ // Block 0x36, offset 0xd80
+ 0xd80: 0x080b, 0xd81: 0x0b0b, 0xd82: 0x0c2b, 0xd83: 0x10f3, 0xd84: 0x0a53, 0xd85: 0x0e03,
+ 0xd86: 0x0cef, 0xd87: 0x13e7, 0xd88: 0x12e7, 0xd89: 0x14ab, 0xd8a: 0x1323, 0xd8b: 0x0b27,
+ 0xd8c: 0x0787, 0xd8d: 0x095b, 0xd90: 0x09af,
+ 0xd92: 0x0cdf, 0xd95: 0x07f7, 0xd96: 0x0f1f, 0xd97: 0x0fe3,
+ 0xd98: 0x1047, 0xd99: 0x1063, 0xd9a: 0x1067, 0xd9b: 0x107b, 0xd9c: 0x14fb, 0xd9d: 0x10eb,
+ 0xd9e: 0x116f, 0xda0: 0x128f, 0xda2: 0x1353,
+ 0xda5: 0x1407, 0xda6: 0x1433,
+ 0xdaa: 0x154f, 0xdab: 0x1553, 0xdac: 0x1557, 0xdad: 0x15bb, 0xdae: 0x142b, 0xdaf: 0x14c7,
+ 0xdb0: 0x0757, 0xdb1: 0x077b, 0xdb2: 0x078f, 0xdb3: 0x084b, 0xdb4: 0x0857, 0xdb5: 0x0897,
+ 0xdb6: 0x094b, 0xdb7: 0x0967, 0xdb8: 0x096f, 0xdb9: 0x09ab, 0xdba: 0x09b7, 0xdbb: 0x0a93,
+ 0xdbc: 0x0a9b, 0xdbd: 0x0ba3, 0xdbe: 0x0bcb, 0xdbf: 0x0bd3,
+ // Block 0x37, offset 0xdc0
+ 0xdc0: 0x0beb, 0xdc1: 0x0c97, 0xdc2: 0x0cc7, 0xdc3: 0x0ce7, 0xdc4: 0x0d57, 0xdc5: 0x0e1b,
+ 0xdc6: 0x0e37, 0xdc7: 0x0e67, 0xdc8: 0x0ebb, 0xdc9: 0x0edb, 0xdca: 0x0f4f, 0xdcb: 0x102f,
+ 0xdcc: 0x104b, 0xdcd: 0x1053, 0xdce: 0x104f, 0xdcf: 0x1057, 0xdd0: 0x105b, 0xdd1: 0x105f,
+ 0xdd2: 0x1073, 0xdd3: 0x1077, 0xdd4: 0x109b, 0xdd5: 0x10af, 0xdd6: 0x10cb, 0xdd7: 0x112f,
+ 0xdd8: 0x1137, 0xdd9: 0x113f, 0xdda: 0x1153, 0xddb: 0x117b, 0xddc: 0x11cb, 0xddd: 0x11ff,
+ 0xdde: 0x11ff, 0xddf: 0x1267, 0xde0: 0x130f, 0xde1: 0x1327, 0xde2: 0x135b, 0xde3: 0x135f,
+ 0xde4: 0x13a3, 0xde5: 0x13a7, 0xde6: 0x13ff, 0xde7: 0x1407, 0xde8: 0x14db, 0xde9: 0x151f,
+ 0xdea: 0x1537, 0xdeb: 0x0b9b, 0xdec: 0x171e, 0xded: 0x11e3,
+ 0xdf0: 0x06df, 0xdf1: 0x07e3, 0xdf2: 0x07a3, 0xdf3: 0x074b, 0xdf4: 0x078b, 0xdf5: 0x07b7,
+ 0xdf6: 0x0847, 0xdf7: 0x0863, 0xdf8: 0x094b, 0xdf9: 0x0937, 0xdfa: 0x0947, 0xdfb: 0x0963,
+ 0xdfc: 0x09af, 0xdfd: 0x09bf, 0xdfe: 0x0a03, 0xdff: 0x0a0f,
+ // Block 0x38, offset 0xe00
+ 0xe00: 0x0a2b, 0xe01: 0x0a3b, 0xe02: 0x0b23, 0xe03: 0x0b2b, 0xe04: 0x0b5b, 0xe05: 0x0b7b,
+ 0xe06: 0x0bab, 0xe07: 0x0bc3, 0xe08: 0x0bb3, 0xe09: 0x0bd3, 0xe0a: 0x0bc7, 0xe0b: 0x0beb,
+ 0xe0c: 0x0c07, 0xe0d: 0x0c5f, 0xe0e: 0x0c6b, 0xe0f: 0x0c73, 0xe10: 0x0c9b, 0xe11: 0x0cdf,
+ 0xe12: 0x0d0f, 0xe13: 0x0d13, 0xe14: 0x0d27, 0xe15: 0x0da7, 0xe16: 0x0db7, 0xe17: 0x0e0f,
+ 0xe18: 0x0e5b, 0xe19: 0x0e53, 0xe1a: 0x0e67, 0xe1b: 0x0e83, 0xe1c: 0x0ebb, 0xe1d: 0x1013,
+ 0xe1e: 0x0edf, 0xe1f: 0x0f13, 0xe20: 0x0f1f, 0xe21: 0x0f5f, 0xe22: 0x0f7b, 0xe23: 0x0f9f,
+ 0xe24: 0x0fc3, 0xe25: 0x0fc7, 0xe26: 0x0fe3, 0xe27: 0x0fe7, 0xe28: 0x0ff7, 0xe29: 0x100b,
+ 0xe2a: 0x1007, 0xe2b: 0x1037, 0xe2c: 0x10b3, 0xe2d: 0x10cb, 0xe2e: 0x10e3, 0xe2f: 0x111b,
+ 0xe30: 0x112f, 0xe31: 0x114b, 0xe32: 0x117b, 0xe33: 0x122f, 0xe34: 0x1257, 0xe35: 0x12cb,
+ 0xe36: 0x1313, 0xe37: 0x131f, 0xe38: 0x1327, 0xe39: 0x133f, 0xe3a: 0x1353, 0xe3b: 0x1343,
+ 0xe3c: 0x135b, 0xe3d: 0x1357, 0xe3e: 0x134f, 0xe3f: 0x135f,
+ // Block 0x39, offset 0xe40
+ 0xe40: 0x136b, 0xe41: 0x13a7, 0xe42: 0x13e3, 0xe43: 0x1413, 0xe44: 0x144b, 0xe45: 0x146b,
+ 0xe46: 0x14b7, 0xe47: 0x14db, 0xe48: 0x14fb, 0xe49: 0x150f, 0xe4a: 0x151f, 0xe4b: 0x152b,
+ 0xe4c: 0x1537, 0xe4d: 0x158b, 0xe4e: 0x162b, 0xe4f: 0x16b5, 0xe50: 0x16b0, 0xe51: 0x16e2,
+ 0xe52: 0x0607, 0xe53: 0x062f, 0xe54: 0x0633, 0xe55: 0x1764, 0xe56: 0x1791, 0xe57: 0x1809,
+ 0xe58: 0x1617, 0xe59: 0x1627,
+ // Block 0x3a, offset 0xe80
+ 0xe80: 0x19d5, 0xe81: 0x19d8, 0xe82: 0x19db, 0xe83: 0x1c08, 0xe84: 0x1c0c, 0xe85: 0x1a5f,
+ 0xe86: 0x1a5f,
+ 0xe93: 0x1d75, 0xe94: 0x1d66, 0xe95: 0x1d6b, 0xe96: 0x1d7a, 0xe97: 0x1d70,
+ 0xe9d: 0x4390,
+ 0xe9e: 0x8115, 0xe9f: 0x4402, 0xea0: 0x022d, 0xea1: 0x0215, 0xea2: 0x021e, 0xea3: 0x0221,
+ 0xea4: 0x0224, 0xea5: 0x0227, 0xea6: 0x022a, 0xea7: 0x0230, 0xea8: 0x0233, 0xea9: 0x0017,
+ 0xeaa: 0x43f0, 0xeab: 0x43f6, 0xeac: 0x44f4, 0xead: 0x44fc, 0xeae: 0x4348, 0xeaf: 0x434e,
+ 0xeb0: 0x4354, 0xeb1: 0x435a, 0xeb2: 0x4366, 0xeb3: 0x436c, 0xeb4: 0x4372, 0xeb5: 0x437e,
+ 0xeb6: 0x4384, 0xeb8: 0x438a, 0xeb9: 0x4396, 0xeba: 0x439c, 0xebb: 0x43a2,
+ 0xebc: 0x43ae, 0xebe: 0x43b4,
+ // Block 0x3b, offset 0xec0
+ 0xec0: 0x43ba, 0xec1: 0x43c0, 0xec3: 0x43c6, 0xec4: 0x43cc,
+ 0xec6: 0x43d8, 0xec7: 0x43de, 0xec8: 0x43e4, 0xec9: 0x43ea, 0xeca: 0x43fc, 0xecb: 0x4378,
+ 0xecc: 0x4360, 0xecd: 0x43a8, 0xece: 0x43d2, 0xecf: 0x1d7f, 0xed0: 0x0299, 0xed1: 0x0299,
+ 0xed2: 0x02a2, 0xed3: 0x02a2, 0xed4: 0x02a2, 0xed5: 0x02a2, 0xed6: 0x02a5, 0xed7: 0x02a5,
+ 0xed8: 0x02a5, 0xed9: 0x02a5, 0xeda: 0x02ab, 0xedb: 0x02ab, 0xedc: 0x02ab, 0xedd: 0x02ab,
+ 0xede: 0x029f, 0xedf: 0x029f, 0xee0: 0x029f, 0xee1: 0x029f, 0xee2: 0x02a8, 0xee3: 0x02a8,
+ 0xee4: 0x02a8, 0xee5: 0x02a8, 0xee6: 0x029c, 0xee7: 0x029c, 0xee8: 0x029c, 0xee9: 0x029c,
+ 0xeea: 0x02cf, 0xeeb: 0x02cf, 0xeec: 0x02cf, 0xeed: 0x02cf, 0xeee: 0x02d2, 0xeef: 0x02d2,
+ 0xef0: 0x02d2, 0xef1: 0x02d2, 0xef2: 0x02b1, 0xef3: 0x02b1, 0xef4: 0x02b1, 0xef5: 0x02b1,
+ 0xef6: 0x02ae, 0xef7: 0x02ae, 0xef8: 0x02ae, 0xef9: 0x02ae, 0xefa: 0x02b4, 0xefb: 0x02b4,
+ 0xefc: 0x02b4, 0xefd: 0x02b4, 0xefe: 0x02b7, 0xeff: 0x02b7,
+ // Block 0x3c, offset 0xf00
+ 0xf00: 0x02b7, 0xf01: 0x02b7, 0xf02: 0x02c0, 0xf03: 0x02c0, 0xf04: 0x02bd, 0xf05: 0x02bd,
+ 0xf06: 0x02c3, 0xf07: 0x02c3, 0xf08: 0x02ba, 0xf09: 0x02ba, 0xf0a: 0x02c9, 0xf0b: 0x02c9,
+ 0xf0c: 0x02c6, 0xf0d: 0x02c6, 0xf0e: 0x02d5, 0xf0f: 0x02d5, 0xf10: 0x02d5, 0xf11: 0x02d5,
+ 0xf12: 0x02db, 0xf13: 0x02db, 0xf14: 0x02db, 0xf15: 0x02db, 0xf16: 0x02e1, 0xf17: 0x02e1,
+ 0xf18: 0x02e1, 0xf19: 0x02e1, 0xf1a: 0x02de, 0xf1b: 0x02de, 0xf1c: 0x02de, 0xf1d: 0x02de,
+ 0xf1e: 0x02e4, 0xf1f: 0x02e4, 0xf20: 0x02e7, 0xf21: 0x02e7, 0xf22: 0x02e7, 0xf23: 0x02e7,
+ 0xf24: 0x446e, 0xf25: 0x446e, 0xf26: 0x02ed, 0xf27: 0x02ed, 0xf28: 0x02ed, 0xf29: 0x02ed,
+ 0xf2a: 0x02ea, 0xf2b: 0x02ea, 0xf2c: 0x02ea, 0xf2d: 0x02ea, 0xf2e: 0x0308, 0xf2f: 0x0308,
+ 0xf30: 0x4468, 0xf31: 0x4468,
+ // Block 0x3d, offset 0xf40
+ 0xf53: 0x02d8, 0xf54: 0x02d8, 0xf55: 0x02d8, 0xf56: 0x02d8, 0xf57: 0x02f6,
+ 0xf58: 0x02f6, 0xf59: 0x02f3, 0xf5a: 0x02f3, 0xf5b: 0x02f9, 0xf5c: 0x02f9, 0xf5d: 0x204f,
+ 0xf5e: 0x02ff, 0xf5f: 0x02ff, 0xf60: 0x02f0, 0xf61: 0x02f0, 0xf62: 0x02fc, 0xf63: 0x02fc,
+ 0xf64: 0x0305, 0xf65: 0x0305, 0xf66: 0x0305, 0xf67: 0x0305, 0xf68: 0x028d, 0xf69: 0x028d,
+ 0xf6a: 0x25aa, 0xf6b: 0x25aa, 0xf6c: 0x261a, 0xf6d: 0x261a, 0xf6e: 0x25e9, 0xf6f: 0x25e9,
+ 0xf70: 0x2605, 0xf71: 0x2605, 0xf72: 0x25fe, 0xf73: 0x25fe, 0xf74: 0x260c, 0xf75: 0x260c,
+ 0xf76: 0x2613, 0xf77: 0x2613, 0xf78: 0x2613, 0xf79: 0x25f0, 0xf7a: 0x25f0, 0xf7b: 0x25f0,
+ 0xf7c: 0x0302, 0xf7d: 0x0302, 0xf7e: 0x0302, 0xf7f: 0x0302,
+ // Block 0x3e, offset 0xf80
+ 0xf80: 0x25b1, 0xf81: 0x25b8, 0xf82: 0x25d4, 0xf83: 0x25f0, 0xf84: 0x25f7, 0xf85: 0x1d89,
+ 0xf86: 0x1d8e, 0xf87: 0x1d93, 0xf88: 0x1da2, 0xf89: 0x1db1, 0xf8a: 0x1db6, 0xf8b: 0x1dbb,
+ 0xf8c: 0x1dc0, 0xf8d: 0x1dc5, 0xf8e: 0x1dd4, 0xf8f: 0x1de3, 0xf90: 0x1de8, 0xf91: 0x1ded,
+ 0xf92: 0x1dfc, 0xf93: 0x1e0b, 0xf94: 0x1e10, 0xf95: 0x1e15, 0xf96: 0x1e1a, 0xf97: 0x1e29,
+ 0xf98: 0x1e2e, 0xf99: 0x1e3d, 0xf9a: 0x1e42, 0xf9b: 0x1e47, 0xf9c: 0x1e56, 0xf9d: 0x1e5b,
+ 0xf9e: 0x1e60, 0xf9f: 0x1e6a, 0xfa0: 0x1ea6, 0xfa1: 0x1eb5, 0xfa2: 0x1ec4, 0xfa3: 0x1ec9,
+ 0xfa4: 0x1ece, 0xfa5: 0x1ed8, 0xfa6: 0x1ee7, 0xfa7: 0x1eec, 0xfa8: 0x1efb, 0xfa9: 0x1f00,
+ 0xfaa: 0x1f05, 0xfab: 0x1f14, 0xfac: 0x1f19, 0xfad: 0x1f28, 0xfae: 0x1f2d, 0xfaf: 0x1f32,
+ 0xfb0: 0x1f37, 0xfb1: 0x1f3c, 0xfb2: 0x1f41, 0xfb3: 0x1f46, 0xfb4: 0x1f4b, 0xfb5: 0x1f50,
+ 0xfb6: 0x1f55, 0xfb7: 0x1f5a, 0xfb8: 0x1f5f, 0xfb9: 0x1f64, 0xfba: 0x1f69, 0xfbb: 0x1f6e,
+ 0xfbc: 0x1f73, 0xfbd: 0x1f78, 0xfbe: 0x1f7d, 0xfbf: 0x1f87,
+ // Block 0x3f, offset 0xfc0
+ 0xfc0: 0x1f8c, 0xfc1: 0x1f91, 0xfc2: 0x1f96, 0xfc3: 0x1fa0, 0xfc4: 0x1fa5, 0xfc5: 0x1faf,
+ 0xfc6: 0x1fb4, 0xfc7: 0x1fb9, 0xfc8: 0x1fbe, 0xfc9: 0x1fc3, 0xfca: 0x1fc8, 0xfcb: 0x1fcd,
+ 0xfcc: 0x1fd2, 0xfcd: 0x1fd7, 0xfce: 0x1fe6, 0xfcf: 0x1ff5, 0xfd0: 0x1ffa, 0xfd1: 0x1fff,
+ 0xfd2: 0x2004, 0xfd3: 0x2009, 0xfd4: 0x200e, 0xfd5: 0x2018, 0xfd6: 0x201d, 0xfd7: 0x2022,
+ 0xfd8: 0x2031, 0xfd9: 0x2040, 0xfda: 0x2045, 0xfdb: 0x4420, 0xfdc: 0x4426, 0xfdd: 0x445c,
+ 0xfde: 0x44b3, 0xfdf: 0x44ba, 0xfe0: 0x44c1, 0xfe1: 0x44c8, 0xfe2: 0x44cf, 0xfe3: 0x44d6,
+ 0xfe4: 0x25c6, 0xfe5: 0x25cd, 0xfe6: 0x25d4, 0xfe7: 0x25db, 0xfe8: 0x25f0, 0xfe9: 0x25f7,
+ 0xfea: 0x1d98, 0xfeb: 0x1d9d, 0xfec: 0x1da2, 0xfed: 0x1da7, 0xfee: 0x1db1, 0xfef: 0x1db6,
+ 0xff0: 0x1dca, 0xff1: 0x1dcf, 0xff2: 0x1dd4, 0xff3: 0x1dd9, 0xff4: 0x1de3, 0xff5: 0x1de8,
+ 0xff6: 0x1df2, 0xff7: 0x1df7, 0xff8: 0x1dfc, 0xff9: 0x1e01, 0xffa: 0x1e0b, 0xffb: 0x1e10,
+ 0xffc: 0x1f3c, 0xffd: 0x1f41, 0xffe: 0x1f50, 0xfff: 0x1f55,
+ // Block 0x40, offset 0x1000
+ 0x1000: 0x1f5a, 0x1001: 0x1f6e, 0x1002: 0x1f73, 0x1003: 0x1f78, 0x1004: 0x1f7d, 0x1005: 0x1f96,
+ 0x1006: 0x1fa0, 0x1007: 0x1fa5, 0x1008: 0x1faa, 0x1009: 0x1fbe, 0x100a: 0x1fdc, 0x100b: 0x1fe1,
+ 0x100c: 0x1fe6, 0x100d: 0x1feb, 0x100e: 0x1ff5, 0x100f: 0x1ffa, 0x1010: 0x445c, 0x1011: 0x2027,
+ 0x1012: 0x202c, 0x1013: 0x2031, 0x1014: 0x2036, 0x1015: 0x2040, 0x1016: 0x2045, 0x1017: 0x25b1,
+ 0x1018: 0x25b8, 0x1019: 0x25bf, 0x101a: 0x25d4, 0x101b: 0x25e2, 0x101c: 0x1d89, 0x101d: 0x1d8e,
+ 0x101e: 0x1d93, 0x101f: 0x1da2, 0x1020: 0x1dac, 0x1021: 0x1dbb, 0x1022: 0x1dc0, 0x1023: 0x1dc5,
+ 0x1024: 0x1dd4, 0x1025: 0x1dde, 0x1026: 0x1dfc, 0x1027: 0x1e15, 0x1028: 0x1e1a, 0x1029: 0x1e29,
+ 0x102a: 0x1e2e, 0x102b: 0x1e3d, 0x102c: 0x1e47, 0x102d: 0x1e56, 0x102e: 0x1e5b, 0x102f: 0x1e60,
+ 0x1030: 0x1e6a, 0x1031: 0x1ea6, 0x1032: 0x1eab, 0x1033: 0x1eb5, 0x1034: 0x1ec4, 0x1035: 0x1ec9,
+ 0x1036: 0x1ece, 0x1037: 0x1ed8, 0x1038: 0x1ee7, 0x1039: 0x1efb, 0x103a: 0x1f00, 0x103b: 0x1f05,
+ 0x103c: 0x1f14, 0x103d: 0x1f19, 0x103e: 0x1f28, 0x103f: 0x1f2d,
+ // Block 0x41, offset 0x1040
+ 0x1040: 0x1f32, 0x1041: 0x1f37, 0x1042: 0x1f46, 0x1043: 0x1f4b, 0x1044: 0x1f5f, 0x1045: 0x1f64,
+ 0x1046: 0x1f69, 0x1047: 0x1f6e, 0x1048: 0x1f73, 0x1049: 0x1f87, 0x104a: 0x1f8c, 0x104b: 0x1f91,
+ 0x104c: 0x1f96, 0x104d: 0x1f9b, 0x104e: 0x1faf, 0x104f: 0x1fb4, 0x1050: 0x1fb9, 0x1051: 0x1fbe,
+ 0x1052: 0x1fcd, 0x1053: 0x1fd2, 0x1054: 0x1fd7, 0x1055: 0x1fe6, 0x1056: 0x1ff0, 0x1057: 0x1fff,
+ 0x1058: 0x2004, 0x1059: 0x4450, 0x105a: 0x2018, 0x105b: 0x201d, 0x105c: 0x2022, 0x105d: 0x2031,
+ 0x105e: 0x203b, 0x105f: 0x25d4, 0x1060: 0x25e2, 0x1061: 0x1da2, 0x1062: 0x1dac, 0x1063: 0x1dd4,
+ 0x1064: 0x1dde, 0x1065: 0x1dfc, 0x1066: 0x1e06, 0x1067: 0x1e6a, 0x1068: 0x1e6f, 0x1069: 0x1e92,
+ 0x106a: 0x1e97, 0x106b: 0x1f6e, 0x106c: 0x1f73, 0x106d: 0x1f96, 0x106e: 0x1fe6, 0x106f: 0x1ff0,
+ 0x1070: 0x2031, 0x1071: 0x203b, 0x1072: 0x4504, 0x1073: 0x450c, 0x1074: 0x4514, 0x1075: 0x1ef1,
+ 0x1076: 0x1ef6, 0x1077: 0x1f0a, 0x1078: 0x1f0f, 0x1079: 0x1f1e, 0x107a: 0x1f23, 0x107b: 0x1e74,
+ 0x107c: 0x1e79, 0x107d: 0x1e9c, 0x107e: 0x1ea1, 0x107f: 0x1e33,
+ // Block 0x42, offset 0x1080
+ 0x1080: 0x1e38, 0x1081: 0x1e1f, 0x1082: 0x1e24, 0x1083: 0x1e4c, 0x1084: 0x1e51, 0x1085: 0x1eba,
+ 0x1086: 0x1ebf, 0x1087: 0x1edd, 0x1088: 0x1ee2, 0x1089: 0x1e7e, 0x108a: 0x1e83, 0x108b: 0x1e88,
+ 0x108c: 0x1e92, 0x108d: 0x1e8d, 0x108e: 0x1e65, 0x108f: 0x1eb0, 0x1090: 0x1ed3, 0x1091: 0x1ef1,
+ 0x1092: 0x1ef6, 0x1093: 0x1f0a, 0x1094: 0x1f0f, 0x1095: 0x1f1e, 0x1096: 0x1f23, 0x1097: 0x1e74,
+ 0x1098: 0x1e79, 0x1099: 0x1e9c, 0x109a: 0x1ea1, 0x109b: 0x1e33, 0x109c: 0x1e38, 0x109d: 0x1e1f,
+ 0x109e: 0x1e24, 0x109f: 0x1e4c, 0x10a0: 0x1e51, 0x10a1: 0x1eba, 0x10a2: 0x1ebf, 0x10a3: 0x1edd,
+ 0x10a4: 0x1ee2, 0x10a5: 0x1e7e, 0x10a6: 0x1e83, 0x10a7: 0x1e88, 0x10a8: 0x1e92, 0x10a9: 0x1e8d,
+ 0x10aa: 0x1e65, 0x10ab: 0x1eb0, 0x10ac: 0x1ed3, 0x10ad: 0x1e7e, 0x10ae: 0x1e83, 0x10af: 0x1e88,
+ 0x10b0: 0x1e92, 0x10b1: 0x1e6f, 0x10b2: 0x1e97, 0x10b3: 0x1eec, 0x10b4: 0x1e56, 0x10b5: 0x1e5b,
+ 0x10b6: 0x1e60, 0x10b7: 0x1e7e, 0x10b8: 0x1e83, 0x10b9: 0x1e88, 0x10ba: 0x1eec, 0x10bb: 0x1efb,
+ 0x10bc: 0x4408, 0x10bd: 0x4408,
+ // Block 0x43, offset 0x10c0
+ 0x10d0: 0x2311, 0x10d1: 0x2326,
+ 0x10d2: 0x2326, 0x10d3: 0x232d, 0x10d4: 0x2334, 0x10d5: 0x2349, 0x10d6: 0x2350, 0x10d7: 0x2357,
+ 0x10d8: 0x237a, 0x10d9: 0x237a, 0x10da: 0x239d, 0x10db: 0x2396, 0x10dc: 0x23b2, 0x10dd: 0x23a4,
+ 0x10de: 0x23ab, 0x10df: 0x23ce, 0x10e0: 0x23ce, 0x10e1: 0x23c7, 0x10e2: 0x23d5, 0x10e3: 0x23d5,
+ 0x10e4: 0x23ff, 0x10e5: 0x23ff, 0x10e6: 0x241b, 0x10e7: 0x23e3, 0x10e8: 0x23e3, 0x10e9: 0x23dc,
+ 0x10ea: 0x23f1, 0x10eb: 0x23f1, 0x10ec: 0x23f8, 0x10ed: 0x23f8, 0x10ee: 0x2422, 0x10ef: 0x2430,
+ 0x10f0: 0x2430, 0x10f1: 0x2437, 0x10f2: 0x2437, 0x10f3: 0x243e, 0x10f4: 0x2445, 0x10f5: 0x244c,
+ 0x10f6: 0x2453, 0x10f7: 0x2453, 0x10f8: 0x245a, 0x10f9: 0x2468, 0x10fa: 0x2476, 0x10fb: 0x246f,
+ 0x10fc: 0x247d, 0x10fd: 0x247d, 0x10fe: 0x2492, 0x10ff: 0x2499,
+ // Block 0x44, offset 0x1100
+ 0x1100: 0x24ca, 0x1101: 0x24d8, 0x1102: 0x24d1, 0x1103: 0x24b5, 0x1104: 0x24b5, 0x1105: 0x24df,
+ 0x1106: 0x24df, 0x1107: 0x24e6, 0x1108: 0x24e6, 0x1109: 0x2510, 0x110a: 0x2517, 0x110b: 0x251e,
+ 0x110c: 0x24f4, 0x110d: 0x2502, 0x110e: 0x2525, 0x110f: 0x252c,
+ 0x1112: 0x24fb, 0x1113: 0x2580, 0x1114: 0x2587, 0x1115: 0x255d, 0x1116: 0x2564, 0x1117: 0x2548,
+ 0x1118: 0x2548, 0x1119: 0x254f, 0x111a: 0x2579, 0x111b: 0x2572, 0x111c: 0x259c, 0x111d: 0x259c,
+ 0x111e: 0x230a, 0x111f: 0x231f, 0x1120: 0x2318, 0x1121: 0x2342, 0x1122: 0x233b, 0x1123: 0x2365,
+ 0x1124: 0x235e, 0x1125: 0x2388, 0x1126: 0x236c, 0x1127: 0x2381, 0x1128: 0x23b9, 0x1129: 0x2406,
+ 0x112a: 0x23ea, 0x112b: 0x2429, 0x112c: 0x24c3, 0x112d: 0x24ed, 0x112e: 0x2595, 0x112f: 0x258e,
+ 0x1130: 0x25a3, 0x1131: 0x253a, 0x1132: 0x24a0, 0x1133: 0x256b, 0x1134: 0x2492, 0x1135: 0x24ca,
+ 0x1136: 0x2461, 0x1137: 0x24ae, 0x1138: 0x2541, 0x1139: 0x2533, 0x113a: 0x24bc, 0x113b: 0x24a7,
+ 0x113c: 0x24bc, 0x113d: 0x2541, 0x113e: 0x2373, 0x113f: 0x238f,
+ // Block 0x45, offset 0x1140
+ 0x1140: 0x2509, 0x1141: 0x2484, 0x1142: 0x2303, 0x1143: 0x24a7, 0x1144: 0x244c, 0x1145: 0x241b,
+ 0x1146: 0x23c0, 0x1147: 0x2556,
+ 0x1170: 0x2414, 0x1171: 0x248b, 0x1172: 0x27bf, 0x1173: 0x27b6, 0x1174: 0x27ec, 0x1175: 0x27da,
+ 0x1176: 0x27c8, 0x1177: 0x27e3, 0x1178: 0x27f5, 0x1179: 0x240d, 0x117a: 0x2c7c, 0x117b: 0x2afc,
+ 0x117c: 0x27d1,
+ // Block 0x46, offset 0x1180
+ 0x1190: 0x0019, 0x1191: 0x0483,
+ 0x1192: 0x0487, 0x1193: 0x0035, 0x1194: 0x0037, 0x1195: 0x0003, 0x1196: 0x003f, 0x1197: 0x04bf,
+ 0x1198: 0x04c3, 0x1199: 0x1b5c,
+ 0x11a0: 0x8132, 0x11a1: 0x8132, 0x11a2: 0x8132, 0x11a3: 0x8132,
+ 0x11a4: 0x8132, 0x11a5: 0x8132, 0x11a6: 0x8132, 0x11a7: 0x812d, 0x11a8: 0x812d, 0x11a9: 0x812d,
+ 0x11aa: 0x812d, 0x11ab: 0x812d, 0x11ac: 0x812d, 0x11ad: 0x812d, 0x11ae: 0x8132, 0x11af: 0x8132,
+ 0x11b0: 0x1873, 0x11b1: 0x0443, 0x11b2: 0x043f, 0x11b3: 0x007f, 0x11b4: 0x007f, 0x11b5: 0x0011,
+ 0x11b6: 0x0013, 0x11b7: 0x00b7, 0x11b8: 0x00bb, 0x11b9: 0x04b7, 0x11ba: 0x04bb, 0x11bb: 0x04ab,
+ 0x11bc: 0x04af, 0x11bd: 0x0493, 0x11be: 0x0497, 0x11bf: 0x048b,
+ // Block 0x47, offset 0x11c0
+ 0x11c0: 0x048f, 0x11c1: 0x049b, 0x11c2: 0x049f, 0x11c3: 0x04a3, 0x11c4: 0x04a7,
+ 0x11c7: 0x0077, 0x11c8: 0x007b, 0x11c9: 0x4269, 0x11ca: 0x4269, 0x11cb: 0x4269,
+ 0x11cc: 0x4269, 0x11cd: 0x007f, 0x11ce: 0x007f, 0x11cf: 0x007f, 0x11d0: 0x0019, 0x11d1: 0x0483,
+ 0x11d2: 0x001d, 0x11d4: 0x0037, 0x11d5: 0x0035, 0x11d6: 0x003f, 0x11d7: 0x0003,
+ 0x11d8: 0x0443, 0x11d9: 0x0011, 0x11da: 0x0013, 0x11db: 0x00b7, 0x11dc: 0x00bb, 0x11dd: 0x04b7,
+ 0x11de: 0x04bb, 0x11df: 0x0007, 0x11e0: 0x000d, 0x11e1: 0x0015, 0x11e2: 0x0017, 0x11e3: 0x001b,
+ 0x11e4: 0x0039, 0x11e5: 0x003d, 0x11e6: 0x003b, 0x11e8: 0x0079, 0x11e9: 0x0009,
+ 0x11ea: 0x000b, 0x11eb: 0x0041,
+ 0x11f0: 0x42aa, 0x11f1: 0x442c, 0x11f2: 0x42af, 0x11f4: 0x42b4,
+ 0x11f6: 0x42b9, 0x11f7: 0x4432, 0x11f8: 0x42be, 0x11f9: 0x4438, 0x11fa: 0x42c3, 0x11fb: 0x443e,
+ 0x11fc: 0x42c8, 0x11fd: 0x4444, 0x11fe: 0x42cd, 0x11ff: 0x444a,
+ // Block 0x48, offset 0x1200
+ 0x1200: 0x0236, 0x1201: 0x440e, 0x1202: 0x440e, 0x1203: 0x4414, 0x1204: 0x4414, 0x1205: 0x4456,
+ 0x1206: 0x4456, 0x1207: 0x441a, 0x1208: 0x441a, 0x1209: 0x4462, 0x120a: 0x4462, 0x120b: 0x4462,
+ 0x120c: 0x4462, 0x120d: 0x0239, 0x120e: 0x0239, 0x120f: 0x023c, 0x1210: 0x023c, 0x1211: 0x023c,
+ 0x1212: 0x023c, 0x1213: 0x023f, 0x1214: 0x023f, 0x1215: 0x0242, 0x1216: 0x0242, 0x1217: 0x0242,
+ 0x1218: 0x0242, 0x1219: 0x0245, 0x121a: 0x0245, 0x121b: 0x0245, 0x121c: 0x0245, 0x121d: 0x0248,
+ 0x121e: 0x0248, 0x121f: 0x0248, 0x1220: 0x0248, 0x1221: 0x024b, 0x1222: 0x024b, 0x1223: 0x024b,
+ 0x1224: 0x024b, 0x1225: 0x024e, 0x1226: 0x024e, 0x1227: 0x024e, 0x1228: 0x024e, 0x1229: 0x0251,
+ 0x122a: 0x0251, 0x122b: 0x0254, 0x122c: 0x0254, 0x122d: 0x0257, 0x122e: 0x0257, 0x122f: 0x025a,
+ 0x1230: 0x025a, 0x1231: 0x025d, 0x1232: 0x025d, 0x1233: 0x025d, 0x1234: 0x025d, 0x1235: 0x0260,
+ 0x1236: 0x0260, 0x1237: 0x0260, 0x1238: 0x0260, 0x1239: 0x0263, 0x123a: 0x0263, 0x123b: 0x0263,
+ 0x123c: 0x0263, 0x123d: 0x0266, 0x123e: 0x0266, 0x123f: 0x0266,
+ // Block 0x49, offset 0x1240
+ 0x1240: 0x0266, 0x1241: 0x0269, 0x1242: 0x0269, 0x1243: 0x0269, 0x1244: 0x0269, 0x1245: 0x026c,
+ 0x1246: 0x026c, 0x1247: 0x026c, 0x1248: 0x026c, 0x1249: 0x026f, 0x124a: 0x026f, 0x124b: 0x026f,
+ 0x124c: 0x026f, 0x124d: 0x0272, 0x124e: 0x0272, 0x124f: 0x0272, 0x1250: 0x0272, 0x1251: 0x0275,
+ 0x1252: 0x0275, 0x1253: 0x0275, 0x1254: 0x0275, 0x1255: 0x0278, 0x1256: 0x0278, 0x1257: 0x0278,
+ 0x1258: 0x0278, 0x1259: 0x027b, 0x125a: 0x027b, 0x125b: 0x027b, 0x125c: 0x027b, 0x125d: 0x027e,
+ 0x125e: 0x027e, 0x125f: 0x027e, 0x1260: 0x027e, 0x1261: 0x0281, 0x1262: 0x0281, 0x1263: 0x0281,
+ 0x1264: 0x0281, 0x1265: 0x0284, 0x1266: 0x0284, 0x1267: 0x0284, 0x1268: 0x0284, 0x1269: 0x0287,
+ 0x126a: 0x0287, 0x126b: 0x0287, 0x126c: 0x0287, 0x126d: 0x028a, 0x126e: 0x028a, 0x126f: 0x028d,
+ 0x1270: 0x028d, 0x1271: 0x0290, 0x1272: 0x0290, 0x1273: 0x0290, 0x1274: 0x0290, 0x1275: 0x2e00,
+ 0x1276: 0x2e00, 0x1277: 0x2e08, 0x1278: 0x2e08, 0x1279: 0x2e10, 0x127a: 0x2e10, 0x127b: 0x1f82,
+ 0x127c: 0x1f82,
+ // Block 0x4a, offset 0x1280
+ 0x1280: 0x0081, 0x1281: 0x0083, 0x1282: 0x0085, 0x1283: 0x0087, 0x1284: 0x0089, 0x1285: 0x008b,
+ 0x1286: 0x008d, 0x1287: 0x008f, 0x1288: 0x0091, 0x1289: 0x0093, 0x128a: 0x0095, 0x128b: 0x0097,
+ 0x128c: 0x0099, 0x128d: 0x009b, 0x128e: 0x009d, 0x128f: 0x009f, 0x1290: 0x00a1, 0x1291: 0x00a3,
+ 0x1292: 0x00a5, 0x1293: 0x00a7, 0x1294: 0x00a9, 0x1295: 0x00ab, 0x1296: 0x00ad, 0x1297: 0x00af,
+ 0x1298: 0x00b1, 0x1299: 0x00b3, 0x129a: 0x00b5, 0x129b: 0x00b7, 0x129c: 0x00b9, 0x129d: 0x00bb,
+ 0x129e: 0x00bd, 0x129f: 0x0477, 0x12a0: 0x047b, 0x12a1: 0x0487, 0x12a2: 0x049b, 0x12a3: 0x049f,
+ 0x12a4: 0x0483, 0x12a5: 0x05ab, 0x12a6: 0x05a3, 0x12a7: 0x04c7, 0x12a8: 0x04cf, 0x12a9: 0x04d7,
+ 0x12aa: 0x04df, 0x12ab: 0x04e7, 0x12ac: 0x056b, 0x12ad: 0x0573, 0x12ae: 0x057b, 0x12af: 0x051f,
+ 0x12b0: 0x05af, 0x12b1: 0x04cb, 0x12b2: 0x04d3, 0x12b3: 0x04db, 0x12b4: 0x04e3, 0x12b5: 0x04eb,
+ 0x12b6: 0x04ef, 0x12b7: 0x04f3, 0x12b8: 0x04f7, 0x12b9: 0x04fb, 0x12ba: 0x04ff, 0x12bb: 0x0503,
+ 0x12bc: 0x0507, 0x12bd: 0x050b, 0x12be: 0x050f, 0x12bf: 0x0513,
+ // Block 0x4b, offset 0x12c0
+ 0x12c0: 0x0517, 0x12c1: 0x051b, 0x12c2: 0x0523, 0x12c3: 0x0527, 0x12c4: 0x052b, 0x12c5: 0x052f,
+ 0x12c6: 0x0533, 0x12c7: 0x0537, 0x12c8: 0x053b, 0x12c9: 0x053f, 0x12ca: 0x0543, 0x12cb: 0x0547,
+ 0x12cc: 0x054b, 0x12cd: 0x054f, 0x12ce: 0x0553, 0x12cf: 0x0557, 0x12d0: 0x055b, 0x12d1: 0x055f,
+ 0x12d2: 0x0563, 0x12d3: 0x0567, 0x12d4: 0x056f, 0x12d5: 0x0577, 0x12d6: 0x057f, 0x12d7: 0x0583,
+ 0x12d8: 0x0587, 0x12d9: 0x058b, 0x12da: 0x058f, 0x12db: 0x0593, 0x12dc: 0x0597, 0x12dd: 0x05a7,
+ 0x12de: 0x4a78, 0x12df: 0x4a7e, 0x12e0: 0x03c3, 0x12e1: 0x0313, 0x12e2: 0x0317, 0x12e3: 0x4a3b,
+ 0x12e4: 0x031b, 0x12e5: 0x4a41, 0x12e6: 0x4a47, 0x12e7: 0x031f, 0x12e8: 0x0323, 0x12e9: 0x0327,
+ 0x12ea: 0x4a4d, 0x12eb: 0x4a53, 0x12ec: 0x4a59, 0x12ed: 0x4a5f, 0x12ee: 0x4a65, 0x12ef: 0x4a6b,
+ 0x12f0: 0x0367, 0x12f1: 0x032b, 0x12f2: 0x032f, 0x12f3: 0x0333, 0x12f4: 0x037b, 0x12f5: 0x0337,
+ 0x12f6: 0x033b, 0x12f7: 0x033f, 0x12f8: 0x0343, 0x12f9: 0x0347, 0x12fa: 0x034b, 0x12fb: 0x034f,
+ 0x12fc: 0x0353, 0x12fd: 0x0357, 0x12fe: 0x035b,
+ // Block 0x4c, offset 0x1300
+ 0x1302: 0x49bd, 0x1303: 0x49c3, 0x1304: 0x49c9, 0x1305: 0x49cf,
+ 0x1306: 0x49d5, 0x1307: 0x49db, 0x130a: 0x49e1, 0x130b: 0x49e7,
+ 0x130c: 0x49ed, 0x130d: 0x49f3, 0x130e: 0x49f9, 0x130f: 0x49ff,
+ 0x1312: 0x4a05, 0x1313: 0x4a0b, 0x1314: 0x4a11, 0x1315: 0x4a17, 0x1316: 0x4a1d, 0x1317: 0x4a23,
+ 0x131a: 0x4a29, 0x131b: 0x4a2f, 0x131c: 0x4a35,
+ 0x1320: 0x00bf, 0x1321: 0x00c2, 0x1322: 0x00cb, 0x1323: 0x4264,
+ 0x1324: 0x00c8, 0x1325: 0x00c5, 0x1326: 0x0447, 0x1328: 0x046b, 0x1329: 0x044b,
+ 0x132a: 0x044f, 0x132b: 0x0453, 0x132c: 0x0457, 0x132d: 0x046f, 0x132e: 0x0473,
+ // Block 0x4d, offset 0x1340
+ 0x1340: 0x0063, 0x1341: 0x0065, 0x1342: 0x0067, 0x1343: 0x0069, 0x1344: 0x006b, 0x1345: 0x006d,
+ 0x1346: 0x006f, 0x1347: 0x0071, 0x1348: 0x0073, 0x1349: 0x0075, 0x134a: 0x0083, 0x134b: 0x0085,
+ 0x134c: 0x0087, 0x134d: 0x0089, 0x134e: 0x008b, 0x134f: 0x008d, 0x1350: 0x008f, 0x1351: 0x0091,
+ 0x1352: 0x0093, 0x1353: 0x0095, 0x1354: 0x0097, 0x1355: 0x0099, 0x1356: 0x009b, 0x1357: 0x009d,
+ 0x1358: 0x009f, 0x1359: 0x00a1, 0x135a: 0x00a3, 0x135b: 0x00a5, 0x135c: 0x00a7, 0x135d: 0x00a9,
+ 0x135e: 0x00ab, 0x135f: 0x00ad, 0x1360: 0x00af, 0x1361: 0x00b1, 0x1362: 0x00b3, 0x1363: 0x00b5,
+ 0x1364: 0x00dd, 0x1365: 0x00f2, 0x1368: 0x0173, 0x1369: 0x0176,
+ 0x136a: 0x0179, 0x136b: 0x017c, 0x136c: 0x017f, 0x136d: 0x0182, 0x136e: 0x0185, 0x136f: 0x0188,
+ 0x1370: 0x018b, 0x1371: 0x018e, 0x1372: 0x0191, 0x1373: 0x0194, 0x1374: 0x0197, 0x1375: 0x019a,
+ 0x1376: 0x019d, 0x1377: 0x01a0, 0x1378: 0x01a3, 0x1379: 0x0188, 0x137a: 0x01a6, 0x137b: 0x01a9,
+ 0x137c: 0x01ac, 0x137d: 0x01af, 0x137e: 0x01b2, 0x137f: 0x01b5,
+ // Block 0x4e, offset 0x1380
+ 0x1380: 0x01fd, 0x1381: 0x0200, 0x1382: 0x0203, 0x1383: 0x045b, 0x1384: 0x01c7, 0x1385: 0x01d0,
+ 0x1386: 0x01d6, 0x1387: 0x01fa, 0x1388: 0x01eb, 0x1389: 0x01e8, 0x138a: 0x0206, 0x138b: 0x0209,
+ 0x138e: 0x0021, 0x138f: 0x0023, 0x1390: 0x0025, 0x1391: 0x0027,
+ 0x1392: 0x0029, 0x1393: 0x002b, 0x1394: 0x002d, 0x1395: 0x002f, 0x1396: 0x0031, 0x1397: 0x0033,
+ 0x1398: 0x0021, 0x1399: 0x0023, 0x139a: 0x0025, 0x139b: 0x0027, 0x139c: 0x0029, 0x139d: 0x002b,
+ 0x139e: 0x002d, 0x139f: 0x002f, 0x13a0: 0x0031, 0x13a1: 0x0033, 0x13a2: 0x0021, 0x13a3: 0x0023,
+ 0x13a4: 0x0025, 0x13a5: 0x0027, 0x13a6: 0x0029, 0x13a7: 0x002b, 0x13a8: 0x002d, 0x13a9: 0x002f,
+ 0x13aa: 0x0031, 0x13ab: 0x0033, 0x13ac: 0x0021, 0x13ad: 0x0023, 0x13ae: 0x0025, 0x13af: 0x0027,
+ 0x13b0: 0x0029, 0x13b1: 0x002b, 0x13b2: 0x002d, 0x13b3: 0x002f, 0x13b4: 0x0031, 0x13b5: 0x0033,
+ 0x13b6: 0x0021, 0x13b7: 0x0023, 0x13b8: 0x0025, 0x13b9: 0x0027, 0x13ba: 0x0029, 0x13bb: 0x002b,
+ 0x13bc: 0x002d, 0x13bd: 0x002f, 0x13be: 0x0031, 0x13bf: 0x0033,
+ // Block 0x4f, offset 0x13c0
+ 0x13c0: 0x0239, 0x13c1: 0x023c, 0x13c2: 0x0248, 0x13c3: 0x0251, 0x13c5: 0x028a,
+ 0x13c6: 0x025a, 0x13c7: 0x024b, 0x13c8: 0x0269, 0x13c9: 0x0290, 0x13ca: 0x027b, 0x13cb: 0x027e,
+ 0x13cc: 0x0281, 0x13cd: 0x0284, 0x13ce: 0x025d, 0x13cf: 0x026f, 0x13d0: 0x0275, 0x13d1: 0x0263,
+ 0x13d2: 0x0278, 0x13d3: 0x0257, 0x13d4: 0x0260, 0x13d5: 0x0242, 0x13d6: 0x0245, 0x13d7: 0x024e,
+ 0x13d8: 0x0254, 0x13d9: 0x0266, 0x13da: 0x026c, 0x13db: 0x0272, 0x13dc: 0x0293, 0x13dd: 0x02e4,
+ 0x13de: 0x02cc, 0x13df: 0x0296, 0x13e1: 0x023c, 0x13e2: 0x0248,
+ 0x13e4: 0x0287, 0x13e7: 0x024b, 0x13e9: 0x0290,
+ 0x13ea: 0x027b, 0x13eb: 0x027e, 0x13ec: 0x0281, 0x13ed: 0x0284, 0x13ee: 0x025d, 0x13ef: 0x026f,
+ 0x13f0: 0x0275, 0x13f1: 0x0263, 0x13f2: 0x0278, 0x13f4: 0x0260, 0x13f5: 0x0242,
+ 0x13f6: 0x0245, 0x13f7: 0x024e, 0x13f9: 0x0266, 0x13fb: 0x0272,
+ // Block 0x50, offset 0x1400
+ 0x1402: 0x0248,
+ 0x1407: 0x024b, 0x1409: 0x0290, 0x140b: 0x027e,
+ 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1411: 0x0263,
+ 0x1412: 0x0278, 0x1414: 0x0260, 0x1417: 0x024e,
+ 0x1419: 0x0266, 0x141b: 0x0272, 0x141d: 0x02e4,
+ 0x141f: 0x0296, 0x1421: 0x023c, 0x1422: 0x0248,
+ 0x1424: 0x0287, 0x1427: 0x024b, 0x1428: 0x0269, 0x1429: 0x0290,
+ 0x142a: 0x027b, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f,
+ 0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1434: 0x0260, 0x1435: 0x0242,
+ 0x1436: 0x0245, 0x1437: 0x024e, 0x1439: 0x0266, 0x143a: 0x026c, 0x143b: 0x0272,
+ 0x143c: 0x0293, 0x143e: 0x02cc,
+ // Block 0x51, offset 0x1440
+ 0x1440: 0x0239, 0x1441: 0x023c, 0x1442: 0x0248, 0x1443: 0x0251, 0x1444: 0x0287, 0x1445: 0x028a,
+ 0x1446: 0x025a, 0x1447: 0x024b, 0x1448: 0x0269, 0x1449: 0x0290, 0x144b: 0x027e,
+ 0x144c: 0x0281, 0x144d: 0x0284, 0x144e: 0x025d, 0x144f: 0x026f, 0x1450: 0x0275, 0x1451: 0x0263,
+ 0x1452: 0x0278, 0x1453: 0x0257, 0x1454: 0x0260, 0x1455: 0x0242, 0x1456: 0x0245, 0x1457: 0x024e,
+ 0x1458: 0x0254, 0x1459: 0x0266, 0x145a: 0x026c, 0x145b: 0x0272,
+ 0x1461: 0x023c, 0x1462: 0x0248, 0x1463: 0x0251,
+ 0x1465: 0x028a, 0x1466: 0x025a, 0x1467: 0x024b, 0x1468: 0x0269, 0x1469: 0x0290,
+ 0x146b: 0x027e, 0x146c: 0x0281, 0x146d: 0x0284, 0x146e: 0x025d, 0x146f: 0x026f,
+ 0x1470: 0x0275, 0x1471: 0x0263, 0x1472: 0x0278, 0x1473: 0x0257, 0x1474: 0x0260, 0x1475: 0x0242,
+ 0x1476: 0x0245, 0x1477: 0x024e, 0x1478: 0x0254, 0x1479: 0x0266, 0x147a: 0x026c, 0x147b: 0x0272,
+ // Block 0x52, offset 0x1480
+ 0x1480: 0x1879, 0x1481: 0x1876, 0x1482: 0x187c, 0x1483: 0x18a0, 0x1484: 0x18c4, 0x1485: 0x18e8,
+ 0x1486: 0x190c, 0x1487: 0x1915, 0x1488: 0x191b, 0x1489: 0x1921, 0x148a: 0x1927,
+ 0x1490: 0x1a8c, 0x1491: 0x1a90,
+ 0x1492: 0x1a94, 0x1493: 0x1a98, 0x1494: 0x1a9c, 0x1495: 0x1aa0, 0x1496: 0x1aa4, 0x1497: 0x1aa8,
+ 0x1498: 0x1aac, 0x1499: 0x1ab0, 0x149a: 0x1ab4, 0x149b: 0x1ab8, 0x149c: 0x1abc, 0x149d: 0x1ac0,
+ 0x149e: 0x1ac4, 0x149f: 0x1ac8, 0x14a0: 0x1acc, 0x14a1: 0x1ad0, 0x14a2: 0x1ad4, 0x14a3: 0x1ad8,
+ 0x14a4: 0x1adc, 0x14a5: 0x1ae0, 0x14a6: 0x1ae4, 0x14a7: 0x1ae8, 0x14a8: 0x1aec, 0x14a9: 0x1af0,
+ 0x14aa: 0x271e, 0x14ab: 0x0047, 0x14ac: 0x0065, 0x14ad: 0x193c, 0x14ae: 0x19b1,
+ 0x14b0: 0x0043, 0x14b1: 0x0045, 0x14b2: 0x0047, 0x14b3: 0x0049, 0x14b4: 0x004b, 0x14b5: 0x004d,
+ 0x14b6: 0x004f, 0x14b7: 0x0051, 0x14b8: 0x0053, 0x14b9: 0x0055, 0x14ba: 0x0057, 0x14bb: 0x0059,
+ 0x14bc: 0x005b, 0x14bd: 0x005d, 0x14be: 0x005f, 0x14bf: 0x0061,
+ // Block 0x53, offset 0x14c0
+ 0x14c0: 0x26ad, 0x14c1: 0x26c2, 0x14c2: 0x0503,
+ 0x14d0: 0x0c0f, 0x14d1: 0x0a47,
+ 0x14d2: 0x08d3, 0x14d3: 0x45c4, 0x14d4: 0x071b, 0x14d5: 0x09ef, 0x14d6: 0x132f, 0x14d7: 0x09ff,
+ 0x14d8: 0x0727, 0x14d9: 0x0cd7, 0x14da: 0x0eaf, 0x14db: 0x0caf, 0x14dc: 0x0827, 0x14dd: 0x0b6b,
+ 0x14de: 0x07bf, 0x14df: 0x0cb7, 0x14e0: 0x0813, 0x14e1: 0x1117, 0x14e2: 0x0f83, 0x14e3: 0x138b,
+ 0x14e4: 0x09d3, 0x14e5: 0x090b, 0x14e6: 0x0e63, 0x14e7: 0x0c1b, 0x14e8: 0x0c47, 0x14e9: 0x06bf,
+ 0x14ea: 0x06cb, 0x14eb: 0x140b, 0x14ec: 0x0adb, 0x14ed: 0x06e7, 0x14ee: 0x08ef, 0x14ef: 0x0c3b,
+ 0x14f0: 0x13b3, 0x14f1: 0x0c13, 0x14f2: 0x106f, 0x14f3: 0x10ab, 0x14f4: 0x08f7, 0x14f5: 0x0e43,
+ 0x14f6: 0x0d0b, 0x14f7: 0x0d07, 0x14f8: 0x0f97, 0x14f9: 0x082b, 0x14fa: 0x0957, 0x14fb: 0x1443,
+ // Block 0x54, offset 0x1500
+ 0x1500: 0x06fb, 0x1501: 0x06f3, 0x1502: 0x0703, 0x1503: 0x1647, 0x1504: 0x0747, 0x1505: 0x0757,
+ 0x1506: 0x075b, 0x1507: 0x0763, 0x1508: 0x076b, 0x1509: 0x076f, 0x150a: 0x077b, 0x150b: 0x0773,
+ 0x150c: 0x05b3, 0x150d: 0x165b, 0x150e: 0x078f, 0x150f: 0x0793, 0x1510: 0x0797, 0x1511: 0x07b3,
+ 0x1512: 0x164c, 0x1513: 0x05b7, 0x1514: 0x079f, 0x1515: 0x07bf, 0x1516: 0x1656, 0x1517: 0x07cf,
+ 0x1518: 0x07d7, 0x1519: 0x0737, 0x151a: 0x07df, 0x151b: 0x07e3, 0x151c: 0x1831, 0x151d: 0x07ff,
+ 0x151e: 0x0807, 0x151f: 0x05bf, 0x1520: 0x081f, 0x1521: 0x0823, 0x1522: 0x082b, 0x1523: 0x082f,
+ 0x1524: 0x05c3, 0x1525: 0x0847, 0x1526: 0x084b, 0x1527: 0x0857, 0x1528: 0x0863, 0x1529: 0x0867,
+ 0x152a: 0x086b, 0x152b: 0x0873, 0x152c: 0x0893, 0x152d: 0x0897, 0x152e: 0x089f, 0x152f: 0x08af,
+ 0x1530: 0x08b7, 0x1531: 0x08bb, 0x1532: 0x08bb, 0x1533: 0x08bb, 0x1534: 0x166a, 0x1535: 0x0e93,
+ 0x1536: 0x08cf, 0x1537: 0x08d7, 0x1538: 0x166f, 0x1539: 0x08e3, 0x153a: 0x08eb, 0x153b: 0x08f3,
+ 0x153c: 0x091b, 0x153d: 0x0907, 0x153e: 0x0913, 0x153f: 0x0917,
+ // Block 0x55, offset 0x1540
+ 0x1540: 0x091f, 0x1541: 0x0927, 0x1542: 0x092b, 0x1543: 0x0933, 0x1544: 0x093b, 0x1545: 0x093f,
+ 0x1546: 0x093f, 0x1547: 0x0947, 0x1548: 0x094f, 0x1549: 0x0953, 0x154a: 0x095f, 0x154b: 0x0983,
+ 0x154c: 0x0967, 0x154d: 0x0987, 0x154e: 0x096b, 0x154f: 0x0973, 0x1550: 0x080b, 0x1551: 0x09cf,
+ 0x1552: 0x0997, 0x1553: 0x099b, 0x1554: 0x099f, 0x1555: 0x0993, 0x1556: 0x09a7, 0x1557: 0x09a3,
+ 0x1558: 0x09bb, 0x1559: 0x1674, 0x155a: 0x09d7, 0x155b: 0x09db, 0x155c: 0x09e3, 0x155d: 0x09ef,
+ 0x155e: 0x09f7, 0x155f: 0x0a13, 0x1560: 0x1679, 0x1561: 0x167e, 0x1562: 0x0a1f, 0x1563: 0x0a23,
+ 0x1564: 0x0a27, 0x1565: 0x0a1b, 0x1566: 0x0a2f, 0x1567: 0x05c7, 0x1568: 0x05cb, 0x1569: 0x0a37,
+ 0x156a: 0x0a3f, 0x156b: 0x0a3f, 0x156c: 0x1683, 0x156d: 0x0a5b, 0x156e: 0x0a5f, 0x156f: 0x0a63,
+ 0x1570: 0x0a6b, 0x1571: 0x1688, 0x1572: 0x0a73, 0x1573: 0x0a77, 0x1574: 0x0b4f, 0x1575: 0x0a7f,
+ 0x1576: 0x05cf, 0x1577: 0x0a8b, 0x1578: 0x0a9b, 0x1579: 0x0aa7, 0x157a: 0x0aa3, 0x157b: 0x1692,
+ 0x157c: 0x0aaf, 0x157d: 0x1697, 0x157e: 0x0abb, 0x157f: 0x0ab7,
+ // Block 0x56, offset 0x1580
+ 0x1580: 0x0abf, 0x1581: 0x0acf, 0x1582: 0x0ad3, 0x1583: 0x05d3, 0x1584: 0x0ae3, 0x1585: 0x0aeb,
+ 0x1586: 0x0aef, 0x1587: 0x0af3, 0x1588: 0x05d7, 0x1589: 0x169c, 0x158a: 0x05db, 0x158b: 0x0b0f,
+ 0x158c: 0x0b13, 0x158d: 0x0b17, 0x158e: 0x0b1f, 0x158f: 0x1863, 0x1590: 0x0b37, 0x1591: 0x16a6,
+ 0x1592: 0x16a6, 0x1593: 0x11d7, 0x1594: 0x0b47, 0x1595: 0x0b47, 0x1596: 0x05df, 0x1597: 0x16c9,
+ 0x1598: 0x179b, 0x1599: 0x0b57, 0x159a: 0x0b5f, 0x159b: 0x05e3, 0x159c: 0x0b73, 0x159d: 0x0b83,
+ 0x159e: 0x0b87, 0x159f: 0x0b8f, 0x15a0: 0x0b9f, 0x15a1: 0x05eb, 0x15a2: 0x05e7, 0x15a3: 0x0ba3,
+ 0x15a4: 0x16ab, 0x15a5: 0x0ba7, 0x15a6: 0x0bbb, 0x15a7: 0x0bbf, 0x15a8: 0x0bc3, 0x15a9: 0x0bbf,
+ 0x15aa: 0x0bcf, 0x15ab: 0x0bd3, 0x15ac: 0x0be3, 0x15ad: 0x0bdb, 0x15ae: 0x0bdf, 0x15af: 0x0be7,
+ 0x15b0: 0x0beb, 0x15b1: 0x0bef, 0x15b2: 0x0bfb, 0x15b3: 0x0bff, 0x15b4: 0x0c17, 0x15b5: 0x0c1f,
+ 0x15b6: 0x0c2f, 0x15b7: 0x0c43, 0x15b8: 0x16ba, 0x15b9: 0x0c3f, 0x15ba: 0x0c33, 0x15bb: 0x0c4b,
+ 0x15bc: 0x0c53, 0x15bd: 0x0c67, 0x15be: 0x16bf, 0x15bf: 0x0c6f,
+ // Block 0x57, offset 0x15c0
+ 0x15c0: 0x0c63, 0x15c1: 0x0c5b, 0x15c2: 0x05ef, 0x15c3: 0x0c77, 0x15c4: 0x0c7f, 0x15c5: 0x0c87,
+ 0x15c6: 0x0c7b, 0x15c7: 0x05f3, 0x15c8: 0x0c97, 0x15c9: 0x0c9f, 0x15ca: 0x16c4, 0x15cb: 0x0ccb,
+ 0x15cc: 0x0cff, 0x15cd: 0x0cdb, 0x15ce: 0x05ff, 0x15cf: 0x0ce7, 0x15d0: 0x05fb, 0x15d1: 0x05f7,
+ 0x15d2: 0x07c3, 0x15d3: 0x07c7, 0x15d4: 0x0d03, 0x15d5: 0x0ceb, 0x15d6: 0x11ab, 0x15d7: 0x0663,
+ 0x15d8: 0x0d0f, 0x15d9: 0x0d13, 0x15da: 0x0d17, 0x15db: 0x0d2b, 0x15dc: 0x0d23, 0x15dd: 0x16dd,
+ 0x15de: 0x0603, 0x15df: 0x0d3f, 0x15e0: 0x0d33, 0x15e1: 0x0d4f, 0x15e2: 0x0d57, 0x15e3: 0x16e7,
+ 0x15e4: 0x0d5b, 0x15e5: 0x0d47, 0x15e6: 0x0d63, 0x15e7: 0x0607, 0x15e8: 0x0d67, 0x15e9: 0x0d6b,
+ 0x15ea: 0x0d6f, 0x15eb: 0x0d7b, 0x15ec: 0x16ec, 0x15ed: 0x0d83, 0x15ee: 0x060b, 0x15ef: 0x0d8f,
+ 0x15f0: 0x16f1, 0x15f1: 0x0d93, 0x15f2: 0x060f, 0x15f3: 0x0d9f, 0x15f4: 0x0dab, 0x15f5: 0x0db7,
+ 0x15f6: 0x0dbb, 0x15f7: 0x16f6, 0x15f8: 0x168d, 0x15f9: 0x16fb, 0x15fa: 0x0ddb, 0x15fb: 0x1700,
+ 0x15fc: 0x0de7, 0x15fd: 0x0def, 0x15fe: 0x0ddf, 0x15ff: 0x0dfb,
+ // Block 0x58, offset 0x1600
+ 0x1600: 0x0e0b, 0x1601: 0x0e1b, 0x1602: 0x0e0f, 0x1603: 0x0e13, 0x1604: 0x0e1f, 0x1605: 0x0e23,
+ 0x1606: 0x1705, 0x1607: 0x0e07, 0x1608: 0x0e3b, 0x1609: 0x0e3f, 0x160a: 0x0613, 0x160b: 0x0e53,
+ 0x160c: 0x0e4f, 0x160d: 0x170a, 0x160e: 0x0e33, 0x160f: 0x0e6f, 0x1610: 0x170f, 0x1611: 0x1714,
+ 0x1612: 0x0e73, 0x1613: 0x0e87, 0x1614: 0x0e83, 0x1615: 0x0e7f, 0x1616: 0x0617, 0x1617: 0x0e8b,
+ 0x1618: 0x0e9b, 0x1619: 0x0e97, 0x161a: 0x0ea3, 0x161b: 0x1651, 0x161c: 0x0eb3, 0x161d: 0x1719,
+ 0x161e: 0x0ebf, 0x161f: 0x1723, 0x1620: 0x0ed3, 0x1621: 0x0edf, 0x1622: 0x0ef3, 0x1623: 0x1728,
+ 0x1624: 0x0f07, 0x1625: 0x0f0b, 0x1626: 0x172d, 0x1627: 0x1732, 0x1628: 0x0f27, 0x1629: 0x0f37,
+ 0x162a: 0x061b, 0x162b: 0x0f3b, 0x162c: 0x061f, 0x162d: 0x061f, 0x162e: 0x0f53, 0x162f: 0x0f57,
+ 0x1630: 0x0f5f, 0x1631: 0x0f63, 0x1632: 0x0f6f, 0x1633: 0x0623, 0x1634: 0x0f87, 0x1635: 0x1737,
+ 0x1636: 0x0fa3, 0x1637: 0x173c, 0x1638: 0x0faf, 0x1639: 0x16a1, 0x163a: 0x0fbf, 0x163b: 0x1741,
+ 0x163c: 0x1746, 0x163d: 0x174b, 0x163e: 0x0627, 0x163f: 0x062b,
+ // Block 0x59, offset 0x1640
+ 0x1640: 0x0ff7, 0x1641: 0x1755, 0x1642: 0x1750, 0x1643: 0x175a, 0x1644: 0x175f, 0x1645: 0x0fff,
+ 0x1646: 0x1003, 0x1647: 0x1003, 0x1648: 0x100b, 0x1649: 0x0633, 0x164a: 0x100f, 0x164b: 0x0637,
+ 0x164c: 0x063b, 0x164d: 0x1769, 0x164e: 0x1023, 0x164f: 0x102b, 0x1650: 0x1037, 0x1651: 0x063f,
+ 0x1652: 0x176e, 0x1653: 0x105b, 0x1654: 0x1773, 0x1655: 0x1778, 0x1656: 0x107b, 0x1657: 0x1093,
+ 0x1658: 0x0643, 0x1659: 0x109b, 0x165a: 0x109f, 0x165b: 0x10a3, 0x165c: 0x177d, 0x165d: 0x1782,
+ 0x165e: 0x1782, 0x165f: 0x10bb, 0x1660: 0x0647, 0x1661: 0x1787, 0x1662: 0x10cf, 0x1663: 0x10d3,
+ 0x1664: 0x064b, 0x1665: 0x178c, 0x1666: 0x10ef, 0x1667: 0x064f, 0x1668: 0x10ff, 0x1669: 0x10f7,
+ 0x166a: 0x1107, 0x166b: 0x1796, 0x166c: 0x111f, 0x166d: 0x0653, 0x166e: 0x112b, 0x166f: 0x1133,
+ 0x1670: 0x1143, 0x1671: 0x0657, 0x1672: 0x17a0, 0x1673: 0x17a5, 0x1674: 0x065b, 0x1675: 0x17aa,
+ 0x1676: 0x115b, 0x1677: 0x17af, 0x1678: 0x1167, 0x1679: 0x1173, 0x167a: 0x117b, 0x167b: 0x17b4,
+ 0x167c: 0x17b9, 0x167d: 0x118f, 0x167e: 0x17be, 0x167f: 0x1197,
+ // Block 0x5a, offset 0x1680
+ 0x1680: 0x16ce, 0x1681: 0x065f, 0x1682: 0x11af, 0x1683: 0x11b3, 0x1684: 0x0667, 0x1685: 0x11b7,
+ 0x1686: 0x0a33, 0x1687: 0x17c3, 0x1688: 0x17c8, 0x1689: 0x16d3, 0x168a: 0x16d8, 0x168b: 0x11d7,
+ 0x168c: 0x11db, 0x168d: 0x13f3, 0x168e: 0x066b, 0x168f: 0x1207, 0x1690: 0x1203, 0x1691: 0x120b,
+ 0x1692: 0x083f, 0x1693: 0x120f, 0x1694: 0x1213, 0x1695: 0x1217, 0x1696: 0x121f, 0x1697: 0x17cd,
+ 0x1698: 0x121b, 0x1699: 0x1223, 0x169a: 0x1237, 0x169b: 0x123b, 0x169c: 0x1227, 0x169d: 0x123f,
+ 0x169e: 0x1253, 0x169f: 0x1267, 0x16a0: 0x1233, 0x16a1: 0x1247, 0x16a2: 0x124b, 0x16a3: 0x124f,
+ 0x16a4: 0x17d2, 0x16a5: 0x17dc, 0x16a6: 0x17d7, 0x16a7: 0x066f, 0x16a8: 0x126f, 0x16a9: 0x1273,
+ 0x16aa: 0x127b, 0x16ab: 0x17f0, 0x16ac: 0x127f, 0x16ad: 0x17e1, 0x16ae: 0x0673, 0x16af: 0x0677,
+ 0x16b0: 0x17e6, 0x16b1: 0x17eb, 0x16b2: 0x067b, 0x16b3: 0x129f, 0x16b4: 0x12a3, 0x16b5: 0x12a7,
+ 0x16b6: 0x12ab, 0x16b7: 0x12b7, 0x16b8: 0x12b3, 0x16b9: 0x12bf, 0x16ba: 0x12bb, 0x16bb: 0x12cb,
+ 0x16bc: 0x12c3, 0x16bd: 0x12c7, 0x16be: 0x12cf, 0x16bf: 0x067f,
+ // Block 0x5b, offset 0x16c0
+ 0x16c0: 0x12d7, 0x16c1: 0x12db, 0x16c2: 0x0683, 0x16c3: 0x12eb, 0x16c4: 0x12ef, 0x16c5: 0x17f5,
+ 0x16c6: 0x12fb, 0x16c7: 0x12ff, 0x16c8: 0x0687, 0x16c9: 0x130b, 0x16ca: 0x05bb, 0x16cb: 0x17fa,
+ 0x16cc: 0x17ff, 0x16cd: 0x068b, 0x16ce: 0x068f, 0x16cf: 0x1337, 0x16d0: 0x134f, 0x16d1: 0x136b,
+ 0x16d2: 0x137b, 0x16d3: 0x1804, 0x16d4: 0x138f, 0x16d5: 0x1393, 0x16d6: 0x13ab, 0x16d7: 0x13b7,
+ 0x16d8: 0x180e, 0x16d9: 0x1660, 0x16da: 0x13c3, 0x16db: 0x13bf, 0x16dc: 0x13cb, 0x16dd: 0x1665,
+ 0x16de: 0x13d7, 0x16df: 0x13e3, 0x16e0: 0x1813, 0x16e1: 0x1818, 0x16e2: 0x1423, 0x16e3: 0x142f,
+ 0x16e4: 0x1437, 0x16e5: 0x181d, 0x16e6: 0x143b, 0x16e7: 0x1467, 0x16e8: 0x1473, 0x16e9: 0x1477,
+ 0x16ea: 0x146f, 0x16eb: 0x1483, 0x16ec: 0x1487, 0x16ed: 0x1822, 0x16ee: 0x1493, 0x16ef: 0x0693,
+ 0x16f0: 0x149b, 0x16f1: 0x1827, 0x16f2: 0x0697, 0x16f3: 0x14d3, 0x16f4: 0x0ac3, 0x16f5: 0x14eb,
+ 0x16f6: 0x182c, 0x16f7: 0x1836, 0x16f8: 0x069b, 0x16f9: 0x069f, 0x16fa: 0x1513, 0x16fb: 0x183b,
+ 0x16fc: 0x06a3, 0x16fd: 0x1840, 0x16fe: 0x152b, 0x16ff: 0x152b,
+ // Block 0x5c, offset 0x1700
+ 0x1700: 0x1533, 0x1701: 0x1845, 0x1702: 0x154b, 0x1703: 0x06a7, 0x1704: 0x155b, 0x1705: 0x1567,
+ 0x1706: 0x156f, 0x1707: 0x1577, 0x1708: 0x06ab, 0x1709: 0x184a, 0x170a: 0x158b, 0x170b: 0x15a7,
+ 0x170c: 0x15b3, 0x170d: 0x06af, 0x170e: 0x06b3, 0x170f: 0x15b7, 0x1710: 0x184f, 0x1711: 0x06b7,
+ 0x1712: 0x1854, 0x1713: 0x1859, 0x1714: 0x185e, 0x1715: 0x15db, 0x1716: 0x06bb, 0x1717: 0x15ef,
+ 0x1718: 0x15f7, 0x1719: 0x15fb, 0x171a: 0x1603, 0x171b: 0x160b, 0x171c: 0x1613, 0x171d: 0x1868,
+}
+
+// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes
+// Block 0 is the zero block.
+var nfkcIndex = [1408]uint8{
+ // Block 0x0, offset 0x0
+ // Block 0x1, offset 0x40
+ // Block 0x2, offset 0x80
+ // Block 0x3, offset 0xc0
+ 0xc2: 0x5b, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5c, 0xc7: 0x04,
+ 0xc8: 0x05, 0xca: 0x5d, 0xcb: 0x5e, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09,
+ 0xd0: 0x0a, 0xd1: 0x5f, 0xd2: 0x60, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x61,
+ 0xd8: 0x62, 0xd9: 0x0d, 0xdb: 0x63, 0xdc: 0x64, 0xdd: 0x65, 0xdf: 0x66,
+ 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
+ 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
+ 0xf0: 0x13,
+ // Block 0x4, offset 0x100
+ 0x120: 0x67, 0x121: 0x68, 0x123: 0x69, 0x124: 0x6a, 0x125: 0x6b, 0x126: 0x6c, 0x127: 0x6d,
+ 0x128: 0x6e, 0x129: 0x6f, 0x12a: 0x70, 0x12b: 0x71, 0x12c: 0x6c, 0x12d: 0x72, 0x12e: 0x73, 0x12f: 0x74,
+ 0x131: 0x75, 0x132: 0x76, 0x133: 0x77, 0x134: 0x78, 0x135: 0x79, 0x137: 0x7a,
+ 0x138: 0x7b, 0x139: 0x7c, 0x13a: 0x7d, 0x13b: 0x7e, 0x13c: 0x7f, 0x13d: 0x80, 0x13e: 0x81, 0x13f: 0x82,
+ // Block 0x5, offset 0x140
+ 0x140: 0x83, 0x142: 0x84, 0x143: 0x85, 0x144: 0x86, 0x145: 0x87, 0x146: 0x88, 0x147: 0x89,
+ 0x14d: 0x8a,
+ 0x15c: 0x8b, 0x15f: 0x8c,
+ 0x162: 0x8d, 0x164: 0x8e,
+ 0x168: 0x8f, 0x169: 0x90, 0x16a: 0x91, 0x16c: 0x0e, 0x16d: 0x92, 0x16e: 0x93, 0x16f: 0x94,
+ 0x170: 0x95, 0x173: 0x96, 0x174: 0x97, 0x175: 0x0f, 0x176: 0x10, 0x177: 0x11,
+ 0x178: 0x12, 0x179: 0x13, 0x17a: 0x14, 0x17b: 0x15, 0x17c: 0x16, 0x17d: 0x17, 0x17e: 0x18, 0x17f: 0x19,
+ // Block 0x6, offset 0x180
+ 0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x1a, 0x185: 0x1b, 0x186: 0x9c, 0x187: 0x9d,
+ 0x188: 0x9e, 0x189: 0x1c, 0x18a: 0x1d, 0x18b: 0x9f, 0x18c: 0xa0,
+ 0x191: 0x1e, 0x192: 0x1f, 0x193: 0xa1,
+ 0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4,
+ 0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8,
+ 0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x20, 0x1bd: 0x21, 0x1be: 0x22, 0x1bf: 0xab,
+ // Block 0x7, offset 0x1c0
+ 0x1c0: 0xac, 0x1c1: 0x23, 0x1c2: 0x24, 0x1c3: 0x25, 0x1c4: 0xad, 0x1c5: 0x26, 0x1c6: 0x27,
+ 0x1c8: 0x28, 0x1c9: 0x29, 0x1ca: 0x2a, 0x1cb: 0x2b, 0x1cc: 0x2c, 0x1cd: 0x2d, 0x1ce: 0x2e, 0x1cf: 0x2f,
+ // Block 0x8, offset 0x200
+ 0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2,
+ 0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8,
+ 0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc,
+ 0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd,
+ 0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe,
+ // Block 0x9, offset 0x240
+ 0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf,
+ 0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0,
+ 0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1,
+ 0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2,
+ 0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3,
+ 0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd,
+ 0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe,
+ 0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf,
+ // Block 0xa, offset 0x280
+ 0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0,
+ 0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1,
+ 0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2,
+ 0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3,
+ 0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd,
+ 0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe,
+ 0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf,
+ 0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0,
+ // Block 0xb, offset 0x2c0
+ 0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1,
+ 0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2,
+ 0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3,
+ 0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4,
+ // Block 0xc, offset 0x300
+ 0x324: 0x30, 0x325: 0x31, 0x326: 0x32, 0x327: 0x33,
+ 0x328: 0x34, 0x329: 0x35, 0x32a: 0x36, 0x32b: 0x37, 0x32c: 0x38, 0x32d: 0x39, 0x32e: 0x3a, 0x32f: 0x3b,
+ 0x330: 0x3c, 0x331: 0x3d, 0x332: 0x3e, 0x333: 0x3f, 0x334: 0x40, 0x335: 0x41, 0x336: 0x42, 0x337: 0x43,
+ 0x338: 0x44, 0x339: 0x45, 0x33a: 0x46, 0x33b: 0x47, 0x33c: 0xc5, 0x33d: 0x48, 0x33e: 0x49, 0x33f: 0x4a,
+ // Block 0xd, offset 0x340
+ 0x347: 0xc6,
+ 0x34b: 0xc7, 0x34d: 0xc8,
+ 0x368: 0xc9, 0x36b: 0xca,
+ // Block 0xe, offset 0x380
+ 0x381: 0xcb, 0x382: 0xcc, 0x384: 0xcd, 0x385: 0xb7, 0x387: 0xce,
+ 0x388: 0xcf, 0x38b: 0xd0, 0x38c: 0x6c, 0x38d: 0xd1,
+ 0x391: 0xd2, 0x392: 0xd3, 0x393: 0xd4, 0x396: 0xd5, 0x397: 0xd6,
+ 0x398: 0xd7, 0x39a: 0xd8, 0x39c: 0xd9,
+ 0x3a8: 0xda, 0x3a9: 0xdb, 0x3aa: 0xdc,
+ 0x3b0: 0xd7, 0x3b5: 0xdd,
+ // Block 0xf, offset 0x3c0
+ 0x3eb: 0xde, 0x3ec: 0xdf,
+ // Block 0x10, offset 0x400
+ 0x432: 0xe0,
+ // Block 0x11, offset 0x440
+ 0x445: 0xe1, 0x446: 0xe2, 0x447: 0xe3,
+ 0x449: 0xe4,
+ 0x450: 0xe5, 0x451: 0xe6, 0x452: 0xe7, 0x453: 0xe8, 0x454: 0xe9, 0x455: 0xea, 0x456: 0xeb, 0x457: 0xec,
+ 0x458: 0xed, 0x459: 0xee, 0x45a: 0x4b, 0x45b: 0xef, 0x45c: 0xf0, 0x45d: 0xf1, 0x45e: 0xf2, 0x45f: 0x4c,
+ // Block 0x12, offset 0x480
+ 0x480: 0xf3,
+ 0x4a3: 0xf4, 0x4a5: 0xf5,
+ 0x4b8: 0x4d, 0x4b9: 0x4e, 0x4ba: 0x4f,
+ // Block 0x13, offset 0x4c0
+ 0x4c4: 0x50, 0x4c5: 0xf6, 0x4c6: 0xf7,
+ 0x4c8: 0x51, 0x4c9: 0xf8,
+ // Block 0x14, offset 0x500
+ 0x520: 0x52, 0x521: 0x53, 0x522: 0x54, 0x523: 0x55, 0x524: 0x56, 0x525: 0x57, 0x526: 0x58, 0x527: 0x59,
+ 0x528: 0x5a,
+ // Block 0x15, offset 0x540
+ 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
+ 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
+ 0x56f: 0x12,
+}
+
+// nfkcSparseOffset: 158 entries, 316 bytes
+var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x87, 0x8f, 0x96, 0x99, 0xa0, 0xa4, 0xa8, 0xaa, 0xac, 0xb5, 0xb9, 0xc0, 0xc5, 0xc8, 0xd2, 0xd5, 0xdc, 0xe4, 0xe8, 0xea, 0xed, 0xf1, 0xf7, 0x108, 0x114, 0x116, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12d, 0x130, 0x132, 0x135, 0x138, 0x13c, 0x141, 0x14a, 0x14c, 0x14f, 0x151, 0x15c, 0x167, 0x175, 0x183, 0x193, 0x1a1, 0x1a8, 0x1ae, 0x1bd, 0x1c1, 0x1c3, 0x1c7, 0x1c9, 0x1cc, 0x1ce, 0x1d1, 0x1d3, 0x1d6, 0x1d8, 0x1da, 0x1dc, 0x1e8, 0x1f2, 0x1fc, 0x1ff, 0x203, 0x205, 0x207, 0x209, 0x20b, 0x20e, 0x210, 0x212, 0x214, 0x216, 0x21c, 0x21f, 0x223, 0x225, 0x22c, 0x232, 0x238, 0x240, 0x246, 0x24c, 0x252, 0x256, 0x258, 0x25a, 0x25c, 0x25e, 0x264, 0x267, 0x26a, 0x272, 0x279, 0x27c, 0x27f, 0x281, 0x289, 0x28c, 0x293, 0x296, 0x29c, 0x29e, 0x2a0, 0x2a3, 0x2a5, 0x2a7, 0x2a9, 0x2ab, 0x2ae, 0x2b0, 0x2b2, 0x2b4, 0x2c1, 0x2cb, 0x2cd, 0x2cf, 0x2d3, 0x2d8, 0x2e4, 0x2e9, 0x2f2, 0x2f8, 0x2fd, 0x301, 0x306, 0x30a, 0x31a, 0x328, 0x336, 0x344, 0x34a, 0x34c, 0x34f, 0x359, 0x35b}
+
+// nfkcSparseValues: 869 entries, 3476 bytes
+var nfkcSparseValues = [869]valueRange{
+ // Block 0x0, offset 0x0
+ {value: 0x0002, lo: 0x0d},
+ {value: 0x0001, lo: 0xa0, hi: 0xa0},
+ {value: 0x4278, lo: 0xa8, hi: 0xa8},
+ {value: 0x0083, lo: 0xaa, hi: 0xaa},
+ {value: 0x4264, lo: 0xaf, hi: 0xaf},
+ {value: 0x0025, lo: 0xb2, hi: 0xb3},
+ {value: 0x425a, lo: 0xb4, hi: 0xb4},
+ {value: 0x01dc, lo: 0xb5, hi: 0xb5},
+ {value: 0x4291, lo: 0xb8, hi: 0xb8},
+ {value: 0x0023, lo: 0xb9, hi: 0xb9},
+ {value: 0x009f, lo: 0xba, hi: 0xba},
+ {value: 0x221c, lo: 0xbc, hi: 0xbc},
+ {value: 0x2210, lo: 0xbd, hi: 0xbd},
+ {value: 0x22b2, lo: 0xbe, hi: 0xbe},
+ // Block 0x1, offset 0xe
+ {value: 0x0091, lo: 0x03},
+ {value: 0x46e2, lo: 0xa0, hi: 0xa1},
+ {value: 0x4714, lo: 0xaf, hi: 0xb0},
+ {value: 0xa000, lo: 0xb7, hi: 0xb7},
+ // Block 0x2, offset 0x12
+ {value: 0x0003, lo: 0x08},
+ {value: 0xa000, lo: 0x92, hi: 0x92},
+ {value: 0x0091, lo: 0xb0, hi: 0xb0},
+ {value: 0x0119, lo: 0xb1, hi: 0xb1},
+ {value: 0x0095, lo: 0xb2, hi: 0xb2},
+ {value: 0x00a5, lo: 0xb3, hi: 0xb3},
+ {value: 0x0143, lo: 0xb4, hi: 0xb6},
+ {value: 0x00af, lo: 0xb7, hi: 0xb7},
+ {value: 0x00b3, lo: 0xb8, hi: 0xb8},
+ // Block 0x3, offset 0x1b
+ {value: 0x000a, lo: 0x09},
+ {value: 0x426e, lo: 0x98, hi: 0x98},
+ {value: 0x4273, lo: 0x99, hi: 0x9a},
+ {value: 0x4296, lo: 0x9b, hi: 0x9b},
+ {value: 0x425f, lo: 0x9c, hi: 0x9c},
+ {value: 0x4282, lo: 0x9d, hi: 0x9d},
+ {value: 0x0113, lo: 0xa0, hi: 0xa0},
+ {value: 0x0099, lo: 0xa1, hi: 0xa1},
+ {value: 0x00a7, lo: 0xa2, hi: 0xa3},
+ {value: 0x0167, lo: 0xa4, hi: 0xa4},
+ // Block 0x4, offset 0x25
+ {value: 0x0000, lo: 0x0f},
+ {value: 0xa000, lo: 0x83, hi: 0x83},
+ {value: 0xa000, lo: 0x87, hi: 0x87},
+ {value: 0xa000, lo: 0x8b, hi: 0x8b},
+ {value: 0xa000, lo: 0x8d, hi: 0x8d},
+ {value: 0x37a5, lo: 0x90, hi: 0x90},
+ {value: 0x37b1, lo: 0x91, hi: 0x91},
+ {value: 0x379f, lo: 0x93, hi: 0x93},
+ {value: 0xa000, lo: 0x96, hi: 0x96},
+ {value: 0x3817, lo: 0x97, hi: 0x97},
+ {value: 0x37e1, lo: 0x9c, hi: 0x9c},
+ {value: 0x37c9, lo: 0x9d, hi: 0x9d},
+ {value: 0x37f3, lo: 0x9e, hi: 0x9e},
+ {value: 0xa000, lo: 0xb4, hi: 0xb5},
+ {value: 0x381d, lo: 0xb6, hi: 0xb6},
+ {value: 0x3823, lo: 0xb7, hi: 0xb7},
+ // Block 0x5, offset 0x35
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0x83, hi: 0x87},
+ // Block 0x6, offset 0x37
+ {value: 0x0001, lo: 0x04},
+ {value: 0x8113, lo: 0x81, hi: 0x82},
+ {value: 0x8132, lo: 0x84, hi: 0x84},
+ {value: 0x812d, lo: 0x85, hi: 0x85},
+ {value: 0x810d, lo: 0x87, hi: 0x87},
+ // Block 0x7, offset 0x3c
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x8132, lo: 0x90, hi: 0x97},
+ {value: 0x8119, lo: 0x98, hi: 0x98},
+ {value: 0x811a, lo: 0x99, hi: 0x99},
+ {value: 0x811b, lo: 0x9a, hi: 0x9a},
+ {value: 0x3841, lo: 0xa2, hi: 0xa2},
+ {value: 0x3847, lo: 0xa3, hi: 0xa3},
+ {value: 0x3853, lo: 0xa4, hi: 0xa4},
+ {value: 0x384d, lo: 0xa5, hi: 0xa5},
+ {value: 0x3859, lo: 0xa6, hi: 0xa6},
+ {value: 0xa000, lo: 0xa7, hi: 0xa7},
+ // Block 0x8, offset 0x47
+ {value: 0x0000, lo: 0x0e},
+ {value: 0x386b, lo: 0x80, hi: 0x80},
+ {value: 0xa000, lo: 0x81, hi: 0x81},
+ {value: 0x385f, lo: 0x82, hi: 0x82},
+ {value: 0xa000, lo: 0x92, hi: 0x92},
+ {value: 0x3865, lo: 0x93, hi: 0x93},
+ {value: 0xa000, lo: 0x95, hi: 0x95},
+ {value: 0x8132, lo: 0x96, hi: 0x9c},
+ {value: 0x8132, lo: 0x9f, hi: 0xa2},
+ {value: 0x812d, lo: 0xa3, hi: 0xa3},
+ {value: 0x8132, lo: 0xa4, hi: 0xa4},
+ {value: 0x8132, lo: 0xa7, hi: 0xa8},
+ {value: 0x812d, lo: 0xaa, hi: 0xaa},
+ {value: 0x8132, lo: 0xab, hi: 0xac},
+ {value: 0x812d, lo: 0xad, hi: 0xad},
+ // Block 0x9, offset 0x56
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x811f, lo: 0x91, hi: 0x91},
+ {value: 0x8132, lo: 0xb0, hi: 0xb0},
+ {value: 0x812d, lo: 0xb1, hi: 0xb1},
+ {value: 0x8132, lo: 0xb2, hi: 0xb3},
+ {value: 0x812d, lo: 0xb4, hi: 0xb4},
+ {value: 0x8132, lo: 0xb5, hi: 0xb6},
+ {value: 0x812d, lo: 0xb7, hi: 0xb9},
+ {value: 0x8132, lo: 0xba, hi: 0xba},
+ {value: 0x812d, lo: 0xbb, hi: 0xbc},
+ {value: 0x8132, lo: 0xbd, hi: 0xbd},
+ {value: 0x812d, lo: 0xbe, hi: 0xbe},
+ {value: 0x8132, lo: 0xbf, hi: 0xbf},
+ // Block 0xa, offset 0x63
+ {value: 0x0005, lo: 0x07},
+ {value: 0x8132, lo: 0x80, hi: 0x80},
+ {value: 0x8132, lo: 0x81, hi: 0x81},
+ {value: 0x812d, lo: 0x82, hi: 0x83},
+ {value: 0x812d, lo: 0x84, hi: 0x85},
+ {value: 0x812d, lo: 0x86, hi: 0x87},
+ {value: 0x812d, lo: 0x88, hi: 0x89},
+ {value: 0x8132, lo: 0x8a, hi: 0x8a},
+ // Block 0xb, offset 0x6b
+ {value: 0x0000, lo: 0x03},
+ {value: 0x8132, lo: 0xab, hi: 0xb1},
+ {value: 0x812d, lo: 0xb2, hi: 0xb2},
+ {value: 0x8132, lo: 0xb3, hi: 0xb3},
+ // Block 0xc, offset 0x6f
+ {value: 0x0000, lo: 0x04},
+ {value: 0x8132, lo: 0x96, hi: 0x99},
+ {value: 0x8132, lo: 0x9b, hi: 0xa3},
+ {value: 0x8132, lo: 0xa5, hi: 0xa7},
+ {value: 0x8132, lo: 0xa9, hi: 0xad},
+ // Block 0xd, offset 0x74
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0x99, hi: 0x9b},
+ // Block 0xe, offset 0x76
+ {value: 0x0000, lo: 0x10},
+ {value: 0x8132, lo: 0x94, hi: 0xa1},
+ {value: 0x812d, lo: 0xa3, hi: 0xa3},
+ {value: 0x8132, lo: 0xa4, hi: 0xa5},
+ {value: 0x812d, lo: 0xa6, hi: 0xa6},
+ {value: 0x8132, lo: 0xa7, hi: 0xa8},
+ {value: 0x812d, lo: 0xa9, hi: 0xa9},
+ {value: 0x8132, lo: 0xaa, hi: 0xac},
+ {value: 0x812d, lo: 0xad, hi: 0xaf},
+ {value: 0x8116, lo: 0xb0, hi: 0xb0},
+ {value: 0x8117, lo: 0xb1, hi: 0xb1},
+ {value: 0x8118, lo: 0xb2, hi: 0xb2},
+ {value: 0x8132, lo: 0xb3, hi: 0xb5},
+ {value: 0x812d, lo: 0xb6, hi: 0xb6},
+ {value: 0x8132, lo: 0xb7, hi: 0xb8},
+ {value: 0x812d, lo: 0xb9, hi: 0xba},
+ {value: 0x8132, lo: 0xbb, hi: 0xbf},
+ // Block 0xf, offset 0x87
+ {value: 0x0000, lo: 0x07},
+ {value: 0xa000, lo: 0xa8, hi: 0xa8},
+ {value: 0x3ed8, lo: 0xa9, hi: 0xa9},
+ {value: 0xa000, lo: 0xb0, hi: 0xb0},
+ {value: 0x3ee0, lo: 0xb1, hi: 0xb1},
+ {value: 0xa000, lo: 0xb3, hi: 0xb3},
+ {value: 0x3ee8, lo: 0xb4, hi: 0xb4},
+ {value: 0x9902, lo: 0xbc, hi: 0xbc},
+ // Block 0x10, offset 0x8f
+ {value: 0x0008, lo: 0x06},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x8132, lo: 0x91, hi: 0x91},
+ {value: 0x812d, lo: 0x92, hi: 0x92},
+ {value: 0x8132, lo: 0x93, hi: 0x93},
+ {value: 0x8132, lo: 0x94, hi: 0x94},
+ {value: 0x451c, lo: 0x98, hi: 0x9f},
+ // Block 0x11, offset 0x96
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8102, lo: 0xbc, hi: 0xbc},
+ {value: 0x9900, lo: 0xbe, hi: 0xbe},
+ // Block 0x12, offset 0x99
+ {value: 0x0008, lo: 0x06},
+ {value: 0xa000, lo: 0x87, hi: 0x87},
+ {value: 0x2c9e, lo: 0x8b, hi: 0x8c},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x9900, lo: 0x97, hi: 0x97},
+ {value: 0x455c, lo: 0x9c, hi: 0x9d},
+ {value: 0x456c, lo: 0x9f, hi: 0x9f},
+ // Block 0x13, offset 0xa0
+ {value: 0x0000, lo: 0x03},
+ {value: 0x4594, lo: 0xb3, hi: 0xb3},
+ {value: 0x459c, lo: 0xb6, hi: 0xb6},
+ {value: 0x8102, lo: 0xbc, hi: 0xbc},
+ // Block 0x14, offset 0xa4
+ {value: 0x0008, lo: 0x03},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x4574, lo: 0x99, hi: 0x9b},
+ {value: 0x458c, lo: 0x9e, hi: 0x9e},
+ // Block 0x15, offset 0xa8
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8102, lo: 0xbc, hi: 0xbc},
+ // Block 0x16, offset 0xaa
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ // Block 0x17, offset 0xac
+ {value: 0x0000, lo: 0x08},
+ {value: 0xa000, lo: 0x87, hi: 0x87},
+ {value: 0x2cb6, lo: 0x88, hi: 0x88},
+ {value: 0x2cae, lo: 0x8b, hi: 0x8b},
+ {value: 0x2cbe, lo: 0x8c, hi: 0x8c},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x9900, lo: 0x96, hi: 0x97},
+ {value: 0x45a4, lo: 0x9c, hi: 0x9c},
+ {value: 0x45ac, lo: 0x9d, hi: 0x9d},
+ // Block 0x18, offset 0xb5
+ {value: 0x0000, lo: 0x03},
+ {value: 0xa000, lo: 0x92, hi: 0x92},
+ {value: 0x2cc6, lo: 0x94, hi: 0x94},
+ {value: 0x9900, lo: 0xbe, hi: 0xbe},
+ // Block 0x19, offset 0xb9
+ {value: 0x0000, lo: 0x06},
+ {value: 0xa000, lo: 0x86, hi: 0x87},
+ {value: 0x2cce, lo: 0x8a, hi: 0x8a},
+ {value: 0x2cde, lo: 0x8b, hi: 0x8b},
+ {value: 0x2cd6, lo: 0x8c, hi: 0x8c},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x9900, lo: 0x97, hi: 0x97},
+ // Block 0x1a, offset 0xc0
+ {value: 0x1801, lo: 0x04},
+ {value: 0xa000, lo: 0x86, hi: 0x86},
+ {value: 0x3ef0, lo: 0x88, hi: 0x88},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x8120, lo: 0x95, hi: 0x96},
+ // Block 0x1b, offset 0xc5
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8102, lo: 0xbc, hi: 0xbc},
+ {value: 0xa000, lo: 0xbf, hi: 0xbf},
+ // Block 0x1c, offset 0xc8
+ {value: 0x0000, lo: 0x09},
+ {value: 0x2ce6, lo: 0x80, hi: 0x80},
+ {value: 0x9900, lo: 0x82, hi: 0x82},
+ {value: 0xa000, lo: 0x86, hi: 0x86},
+ {value: 0x2cee, lo: 0x87, hi: 0x87},
+ {value: 0x2cf6, lo: 0x88, hi: 0x88},
+ {value: 0x2f50, lo: 0x8a, hi: 0x8a},
+ {value: 0x2dd8, lo: 0x8b, hi: 0x8b},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x9900, lo: 0x95, hi: 0x96},
+ // Block 0x1d, offset 0xd2
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0xbb, hi: 0xbc},
+ {value: 0x9900, lo: 0xbe, hi: 0xbe},
+ // Block 0x1e, offset 0xd5
+ {value: 0x0000, lo: 0x06},
+ {value: 0xa000, lo: 0x86, hi: 0x87},
+ {value: 0x2cfe, lo: 0x8a, hi: 0x8a},
+ {value: 0x2d0e, lo: 0x8b, hi: 0x8b},
+ {value: 0x2d06, lo: 0x8c, hi: 0x8c},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x9900, lo: 0x97, hi: 0x97},
+ // Block 0x1f, offset 0xdc
+ {value: 0x6bea, lo: 0x07},
+ {value: 0x9904, lo: 0x8a, hi: 0x8a},
+ {value: 0x9900, lo: 0x8f, hi: 0x8f},
+ {value: 0xa000, lo: 0x99, hi: 0x99},
+ {value: 0x3ef8, lo: 0x9a, hi: 0x9a},
+ {value: 0x2f58, lo: 0x9c, hi: 0x9c},
+ {value: 0x2de3, lo: 0x9d, hi: 0x9d},
+ {value: 0x2d16, lo: 0x9e, hi: 0x9f},
+ // Block 0x20, offset 0xe4
+ {value: 0x0000, lo: 0x03},
+ {value: 0x2621, lo: 0xb3, hi: 0xb3},
+ {value: 0x8122, lo: 0xb8, hi: 0xb9},
+ {value: 0x8104, lo: 0xba, hi: 0xba},
+ // Block 0x21, offset 0xe8
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8123, lo: 0x88, hi: 0x8b},
+ // Block 0x22, offset 0xea
+ {value: 0x0000, lo: 0x02},
+ {value: 0x2636, lo: 0xb3, hi: 0xb3},
+ {value: 0x8124, lo: 0xb8, hi: 0xb9},
+ // Block 0x23, offset 0xed
+ {value: 0x0000, lo: 0x03},
+ {value: 0x8125, lo: 0x88, hi: 0x8b},
+ {value: 0x2628, lo: 0x9c, hi: 0x9c},
+ {value: 0x262f, lo: 0x9d, hi: 0x9d},
+ // Block 0x24, offset 0xf1
+ {value: 0x0000, lo: 0x05},
+ {value: 0x030b, lo: 0x8c, hi: 0x8c},
+ {value: 0x812d, lo: 0x98, hi: 0x99},
+ {value: 0x812d, lo: 0xb5, hi: 0xb5},
+ {value: 0x812d, lo: 0xb7, hi: 0xb7},
+ {value: 0x812b, lo: 0xb9, hi: 0xb9},
+ // Block 0x25, offset 0xf7
+ {value: 0x0000, lo: 0x10},
+ {value: 0x2644, lo: 0x83, hi: 0x83},
+ {value: 0x264b, lo: 0x8d, hi: 0x8d},
+ {value: 0x2652, lo: 0x92, hi: 0x92},
+ {value: 0x2659, lo: 0x97, hi: 0x97},
+ {value: 0x2660, lo: 0x9c, hi: 0x9c},
+ {value: 0x263d, lo: 0xa9, hi: 0xa9},
+ {value: 0x8126, lo: 0xb1, hi: 0xb1},
+ {value: 0x8127, lo: 0xb2, hi: 0xb2},
+ {value: 0x4a84, lo: 0xb3, hi: 0xb3},
+ {value: 0x8128, lo: 0xb4, hi: 0xb4},
+ {value: 0x4a8d, lo: 0xb5, hi: 0xb5},
+ {value: 0x45b4, lo: 0xb6, hi: 0xb6},
+ {value: 0x45f4, lo: 0xb7, hi: 0xb7},
+ {value: 0x45bc, lo: 0xb8, hi: 0xb8},
+ {value: 0x45ff, lo: 0xb9, hi: 0xb9},
+ {value: 0x8127, lo: 0xba, hi: 0xbd},
+ // Block 0x26, offset 0x108
+ {value: 0x0000, lo: 0x0b},
+ {value: 0x8127, lo: 0x80, hi: 0x80},
+ {value: 0x4a96, lo: 0x81, hi: 0x81},
+ {value: 0x8132, lo: 0x82, hi: 0x83},
+ {value: 0x8104, lo: 0x84, hi: 0x84},
+ {value: 0x8132, lo: 0x86, hi: 0x87},
+ {value: 0x266e, lo: 0x93, hi: 0x93},
+ {value: 0x2675, lo: 0x9d, hi: 0x9d},
+ {value: 0x267c, lo: 0xa2, hi: 0xa2},
+ {value: 0x2683, lo: 0xa7, hi: 0xa7},
+ {value: 0x268a, lo: 0xac, hi: 0xac},
+ {value: 0x2667, lo: 0xb9, hi: 0xb9},
+ // Block 0x27, offset 0x114
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0x86, hi: 0x86},
+ // Block 0x28, offset 0x116
+ {value: 0x0000, lo: 0x05},
+ {value: 0xa000, lo: 0xa5, hi: 0xa5},
+ {value: 0x2d1e, lo: 0xa6, hi: 0xa6},
+ {value: 0x9900, lo: 0xae, hi: 0xae},
+ {value: 0x8102, lo: 0xb7, hi: 0xb7},
+ {value: 0x8104, lo: 0xb9, hi: 0xba},
+ // Block 0x29, offset 0x11c
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0x8d, hi: 0x8d},
+ // Block 0x2a, offset 0x11e
+ {value: 0x0000, lo: 0x01},
+ {value: 0x030f, lo: 0xbc, hi: 0xbc},
+ // Block 0x2b, offset 0x120
+ {value: 0x0000, lo: 0x01},
+ {value: 0xa000, lo: 0x80, hi: 0x92},
+ // Block 0x2c, offset 0x122
+ {value: 0x0000, lo: 0x01},
+ {value: 0xb900, lo: 0xa1, hi: 0xb5},
+ // Block 0x2d, offset 0x124
+ {value: 0x0000, lo: 0x01},
+ {value: 0x9900, lo: 0xa8, hi: 0xbf},
+ // Block 0x2e, offset 0x126
+ {value: 0x0000, lo: 0x01},
+ {value: 0x9900, lo: 0x80, hi: 0x82},
+ // Block 0x2f, offset 0x128
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0x9d, hi: 0x9f},
+ // Block 0x30, offset 0x12a
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x94, hi: 0x94},
+ {value: 0x8104, lo: 0xb4, hi: 0xb4},
+ // Block 0x31, offset 0x12d
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x92, hi: 0x92},
+ {value: 0x8132, lo: 0x9d, hi: 0x9d},
+ // Block 0x32, offset 0x130
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8131, lo: 0xa9, hi: 0xa9},
+ // Block 0x33, offset 0x132
+ {value: 0x0004, lo: 0x02},
+ {value: 0x812e, lo: 0xb9, hi: 0xba},
+ {value: 0x812d, lo: 0xbb, hi: 0xbb},
+ // Block 0x34, offset 0x135
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8132, lo: 0x97, hi: 0x97},
+ {value: 0x812d, lo: 0x98, hi: 0x98},
+ // Block 0x35, offset 0x138
+ {value: 0x0000, lo: 0x03},
+ {value: 0x8104, lo: 0xa0, hi: 0xa0},
+ {value: 0x8132, lo: 0xb5, hi: 0xbc},
+ {value: 0x812d, lo: 0xbf, hi: 0xbf},
+ // Block 0x36, offset 0x13c
+ {value: 0x0000, lo: 0x04},
+ {value: 0x8132, lo: 0xb0, hi: 0xb4},
+ {value: 0x812d, lo: 0xb5, hi: 0xba},
+ {value: 0x8132, lo: 0xbb, hi: 0xbc},
+ {value: 0x812d, lo: 0xbd, hi: 0xbd},
+ // Block 0x37, offset 0x141
+ {value: 0x0000, lo: 0x08},
+ {value: 0x2d66, lo: 0x80, hi: 0x80},
+ {value: 0x2d6e, lo: 0x81, hi: 0x81},
+ {value: 0xa000, lo: 0x82, hi: 0x82},
+ {value: 0x2d76, lo: 0x83, hi: 0x83},
+ {value: 0x8104, lo: 0x84, hi: 0x84},
+ {value: 0x8132, lo: 0xab, hi: 0xab},
+ {value: 0x812d, lo: 0xac, hi: 0xac},
+ {value: 0x8132, lo: 0xad, hi: 0xb3},
+ // Block 0x38, offset 0x14a
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0xaa, hi: 0xab},
+ // Block 0x39, offset 0x14c
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8102, lo: 0xa6, hi: 0xa6},
+ {value: 0x8104, lo: 0xb2, hi: 0xb3},
+ // Block 0x3a, offset 0x14f
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8102, lo: 0xb7, hi: 0xb7},
+ // Block 0x3b, offset 0x151
+ {value: 0x0000, lo: 0x0a},
+ {value: 0x8132, lo: 0x90, hi: 0x92},
+ {value: 0x8101, lo: 0x94, hi: 0x94},
+ {value: 0x812d, lo: 0x95, hi: 0x99},
+ {value: 0x8132, lo: 0x9a, hi: 0x9b},
+ {value: 0x812d, lo: 0x9c, hi: 0x9f},
+ {value: 0x8132, lo: 0xa0, hi: 0xa0},
+ {value: 0x8101, lo: 0xa2, hi: 0xa8},
+ {value: 0x812d, lo: 0xad, hi: 0xad},
+ {value: 0x8132, lo: 0xb4, hi: 0xb4},
+ {value: 0x8132, lo: 0xb8, hi: 0xb9},
+ // Block 0x3c, offset 0x15c
+ {value: 0x0002, lo: 0x0a},
+ {value: 0x0043, lo: 0xac, hi: 0xac},
+ {value: 0x00d1, lo: 0xad, hi: 0xad},
+ {value: 0x0045, lo: 0xae, hi: 0xae},
+ {value: 0x0049, lo: 0xb0, hi: 0xb1},
+ {value: 0x00e6, lo: 0xb2, hi: 0xb2},
+ {value: 0x004f, lo: 0xb3, hi: 0xba},
+ {value: 0x005f, lo: 0xbc, hi: 0xbc},
+ {value: 0x00ef, lo: 0xbd, hi: 0xbd},
+ {value: 0x0061, lo: 0xbe, hi: 0xbe},
+ {value: 0x0065, lo: 0xbf, hi: 0xbf},
+ // Block 0x3d, offset 0x167
+ {value: 0x0000, lo: 0x0d},
+ {value: 0x0001, lo: 0x80, hi: 0x8a},
+ {value: 0x043b, lo: 0x91, hi: 0x91},
+ {value: 0x429b, lo: 0x97, hi: 0x97},
+ {value: 0x001d, lo: 0xa4, hi: 0xa4},
+ {value: 0x1873, lo: 0xa5, hi: 0xa5},
+ {value: 0x1b5c, lo: 0xa6, hi: 0xa6},
+ {value: 0x0001, lo: 0xaf, hi: 0xaf},
+ {value: 0x2691, lo: 0xb3, hi: 0xb3},
+ {value: 0x27fe, lo: 0xb4, hi: 0xb4},
+ {value: 0x2698, lo: 0xb6, hi: 0xb6},
+ {value: 0x2808, lo: 0xb7, hi: 0xb7},
+ {value: 0x186d, lo: 0xbc, hi: 0xbc},
+ {value: 0x4269, lo: 0xbe, hi: 0xbe},
+ // Block 0x3e, offset 0x175
+ {value: 0x0002, lo: 0x0d},
+ {value: 0x1933, lo: 0x87, hi: 0x87},
+ {value: 0x1930, lo: 0x88, hi: 0x88},
+ {value: 0x1870, lo: 0x89, hi: 0x89},
+ {value: 0x298e, lo: 0x97, hi: 0x97},
+ {value: 0x0001, lo: 0x9f, hi: 0x9f},
+ {value: 0x0021, lo: 0xb0, hi: 0xb0},
+ {value: 0x0093, lo: 0xb1, hi: 0xb1},
+ {value: 0x0029, lo: 0xb4, hi: 0xb9},
+ {value: 0x0017, lo: 0xba, hi: 0xba},
+ {value: 0x0467, lo: 0xbb, hi: 0xbb},
+ {value: 0x003b, lo: 0xbc, hi: 0xbc},
+ {value: 0x0011, lo: 0xbd, hi: 0xbe},
+ {value: 0x009d, lo: 0xbf, hi: 0xbf},
+ // Block 0x3f, offset 0x183
+ {value: 0x0002, lo: 0x0f},
+ {value: 0x0021, lo: 0x80, hi: 0x89},
+ {value: 0x0017, lo: 0x8a, hi: 0x8a},
+ {value: 0x0467, lo: 0x8b, hi: 0x8b},
+ {value: 0x003b, lo: 0x8c, hi: 0x8c},
+ {value: 0x0011, lo: 0x8d, hi: 0x8e},
+ {value: 0x0083, lo: 0x90, hi: 0x90},
+ {value: 0x008b, lo: 0x91, hi: 0x91},
+ {value: 0x009f, lo: 0x92, hi: 0x92},
+ {value: 0x00b1, lo: 0x93, hi: 0x93},
+ {value: 0x0104, lo: 0x94, hi: 0x94},
+ {value: 0x0091, lo: 0x95, hi: 0x95},
+ {value: 0x0097, lo: 0x96, hi: 0x99},
+ {value: 0x00a1, lo: 0x9a, hi: 0x9a},
+ {value: 0x00a7, lo: 0x9b, hi: 0x9c},
+ {value: 0x1999, lo: 0xa8, hi: 0xa8},
+ // Block 0x40, offset 0x193
+ {value: 0x0000, lo: 0x0d},
+ {value: 0x8132, lo: 0x90, hi: 0x91},
+ {value: 0x8101, lo: 0x92, hi: 0x93},
+ {value: 0x8132, lo: 0x94, hi: 0x97},
+ {value: 0x8101, lo: 0x98, hi: 0x9a},
+ {value: 0x8132, lo: 0x9b, hi: 0x9c},
+ {value: 0x8132, lo: 0xa1, hi: 0xa1},
+ {value: 0x8101, lo: 0xa5, hi: 0xa6},
+ {value: 0x8132, lo: 0xa7, hi: 0xa7},
+ {value: 0x812d, lo: 0xa8, hi: 0xa8},
+ {value: 0x8132, lo: 0xa9, hi: 0xa9},
+ {value: 0x8101, lo: 0xaa, hi: 0xab},
+ {value: 0x812d, lo: 0xac, hi: 0xaf},
+ {value: 0x8132, lo: 0xb0, hi: 0xb0},
+ // Block 0x41, offset 0x1a1
+ {value: 0x0007, lo: 0x06},
+ {value: 0x2180, lo: 0x89, hi: 0x89},
+ {value: 0xa000, lo: 0x90, hi: 0x90},
+ {value: 0xa000, lo: 0x92, hi: 0x92},
+ {value: 0xa000, lo: 0x94, hi: 0x94},
+ {value: 0x3bb9, lo: 0x9a, hi: 0x9b},
+ {value: 0x3bc7, lo: 0xae, hi: 0xae},
+ // Block 0x42, offset 0x1a8
+ {value: 0x000e, lo: 0x05},
+ {value: 0x3bce, lo: 0x8d, hi: 0x8e},
+ {value: 0x3bd5, lo: 0x8f, hi: 0x8f},
+ {value: 0xa000, lo: 0x90, hi: 0x90},
+ {value: 0xa000, lo: 0x92, hi: 0x92},
+ {value: 0xa000, lo: 0x94, hi: 0x94},
+ // Block 0x43, offset 0x1ae
+ {value: 0x0173, lo: 0x0e},
+ {value: 0xa000, lo: 0x83, hi: 0x83},
+ {value: 0x3be3, lo: 0x84, hi: 0x84},
+ {value: 0xa000, lo: 0x88, hi: 0x88},
+ {value: 0x3bea, lo: 0x89, hi: 0x89},
+ {value: 0xa000, lo: 0x8b, hi: 0x8b},
+ {value: 0x3bf1, lo: 0x8c, hi: 0x8c},
+ {value: 0xa000, lo: 0xa3, hi: 0xa3},
+ {value: 0x3bf8, lo: 0xa4, hi: 0xa4},
+ {value: 0xa000, lo: 0xa5, hi: 0xa5},
+ {value: 0x3bff, lo: 0xa6, hi: 0xa6},
+ {value: 0x269f, lo: 0xac, hi: 0xad},
+ {value: 0x26a6, lo: 0xaf, hi: 0xaf},
+ {value: 0x281c, lo: 0xb0, hi: 0xb0},
+ {value: 0xa000, lo: 0xbc, hi: 0xbc},
+ // Block 0x44, offset 0x1bd
+ {value: 0x0007, lo: 0x03},
+ {value: 0x3c68, lo: 0xa0, hi: 0xa1},
+ {value: 0x3c92, lo: 0xa2, hi: 0xa3},
+ {value: 0x3cbc, lo: 0xaa, hi: 0xad},
+ // Block 0x45, offset 0x1c1
+ {value: 0x0004, lo: 0x01},
+ {value: 0x048b, lo: 0xa9, hi: 0xaa},
+ // Block 0x46, offset 0x1c3
+ {value: 0x0002, lo: 0x03},
+ {value: 0x0057, lo: 0x80, hi: 0x8f},
+ {value: 0x0083, lo: 0x90, hi: 0xa9},
+ {value: 0x0021, lo: 0xaa, hi: 0xaa},
+ // Block 0x47, offset 0x1c7
+ {value: 0x0000, lo: 0x01},
+ {value: 0x299b, lo: 0x8c, hi: 0x8c},
+ // Block 0x48, offset 0x1c9
+ {value: 0x0263, lo: 0x02},
+ {value: 0x1b8c, lo: 0xb4, hi: 0xb4},
+ {value: 0x192d, lo: 0xb5, hi: 0xb6},
+ // Block 0x49, offset 0x1cc
+ {value: 0x0000, lo: 0x01},
+ {value: 0x44dd, lo: 0x9c, hi: 0x9c},
+ // Block 0x4a, offset 0x1ce
+ {value: 0x0000, lo: 0x02},
+ {value: 0x0095, lo: 0xbc, hi: 0xbc},
+ {value: 0x006d, lo: 0xbd, hi: 0xbd},
+ // Block 0x4b, offset 0x1d1
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0xaf, hi: 0xb1},
+ // Block 0x4c, offset 0x1d3
+ {value: 0x0000, lo: 0x02},
+ {value: 0x047f, lo: 0xaf, hi: 0xaf},
+ {value: 0x8104, lo: 0xbf, hi: 0xbf},
+ // Block 0x4d, offset 0x1d6
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0xa0, hi: 0xbf},
+ // Block 0x4e, offset 0x1d8
+ {value: 0x0000, lo: 0x01},
+ {value: 0x0dc3, lo: 0x9f, hi: 0x9f},
+ // Block 0x4f, offset 0x1da
+ {value: 0x0000, lo: 0x01},
+ {value: 0x162f, lo: 0xb3, hi: 0xb3},
+ // Block 0x50, offset 0x1dc
+ {value: 0x0004, lo: 0x0b},
+ {value: 0x1597, lo: 0x80, hi: 0x82},
+ {value: 0x15af, lo: 0x83, hi: 0x83},
+ {value: 0x15c7, lo: 0x84, hi: 0x85},
+ {value: 0x15d7, lo: 0x86, hi: 0x89},
+ {value: 0x15eb, lo: 0x8a, hi: 0x8c},
+ {value: 0x15ff, lo: 0x8d, hi: 0x8d},
+ {value: 0x1607, lo: 0x8e, hi: 0x8e},
+ {value: 0x160f, lo: 0x8f, hi: 0x90},
+ {value: 0x161b, lo: 0x91, hi: 0x93},
+ {value: 0x162b, lo: 0x94, hi: 0x94},
+ {value: 0x1633, lo: 0x95, hi: 0x95},
+ // Block 0x51, offset 0x1e8
+ {value: 0x0004, lo: 0x09},
+ {value: 0x0001, lo: 0x80, hi: 0x80},
+ {value: 0x812c, lo: 0xaa, hi: 0xaa},
+ {value: 0x8131, lo: 0xab, hi: 0xab},
+ {value: 0x8133, lo: 0xac, hi: 0xac},
+ {value: 0x812e, lo: 0xad, hi: 0xad},
+ {value: 0x812f, lo: 0xae, hi: 0xae},
+ {value: 0x812f, lo: 0xaf, hi: 0xaf},
+ {value: 0x04b3, lo: 0xb6, hi: 0xb6},
+ {value: 0x0887, lo: 0xb8, hi: 0xba},
+ // Block 0x52, offset 0x1f2
+ {value: 0x0006, lo: 0x09},
+ {value: 0x0313, lo: 0xb1, hi: 0xb1},
+ {value: 0x0317, lo: 0xb2, hi: 0xb2},
+ {value: 0x4a3b, lo: 0xb3, hi: 0xb3},
+ {value: 0x031b, lo: 0xb4, hi: 0xb4},
+ {value: 0x4a41, lo: 0xb5, hi: 0xb6},
+ {value: 0x031f, lo: 0xb7, hi: 0xb7},
+ {value: 0x0323, lo: 0xb8, hi: 0xb8},
+ {value: 0x0327, lo: 0xb9, hi: 0xb9},
+ {value: 0x4a4d, lo: 0xba, hi: 0xbf},
+ // Block 0x53, offset 0x1fc
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8132, lo: 0xaf, hi: 0xaf},
+ {value: 0x8132, lo: 0xb4, hi: 0xbd},
+ // Block 0x54, offset 0x1ff
+ {value: 0x0000, lo: 0x03},
+ {value: 0x020f, lo: 0x9c, hi: 0x9c},
+ {value: 0x0212, lo: 0x9d, hi: 0x9d},
+ {value: 0x8132, lo: 0x9e, hi: 0x9f},
+ // Block 0x55, offset 0x203
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0xb0, hi: 0xb1},
+ // Block 0x56, offset 0x205
+ {value: 0x0000, lo: 0x01},
+ {value: 0x163b, lo: 0xb0, hi: 0xb0},
+ // Block 0x57, offset 0x207
+ {value: 0x000c, lo: 0x01},
+ {value: 0x00d7, lo: 0xb8, hi: 0xb9},
+ // Block 0x58, offset 0x209
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0x86, hi: 0x86},
+ // Block 0x59, offset 0x20b
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x84, hi: 0x84},
+ {value: 0x8132, lo: 0xa0, hi: 0xb1},
+ // Block 0x5a, offset 0x20e
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0xab, hi: 0xad},
+ // Block 0x5b, offset 0x210
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0x93, hi: 0x93},
+ // Block 0x5c, offset 0x212
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8102, lo: 0xb3, hi: 0xb3},
+ // Block 0x5d, offset 0x214
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0x80, hi: 0x80},
+ // Block 0x5e, offset 0x216
+ {value: 0x0000, lo: 0x05},
+ {value: 0x8132, lo: 0xb0, hi: 0xb0},
+ {value: 0x8132, lo: 0xb2, hi: 0xb3},
+ {value: 0x812d, lo: 0xb4, hi: 0xb4},
+ {value: 0x8132, lo: 0xb7, hi: 0xb8},
+ {value: 0x8132, lo: 0xbe, hi: 0xbf},
+ // Block 0x5f, offset 0x21c
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8132, lo: 0x81, hi: 0x81},
+ {value: 0x8104, lo: 0xb6, hi: 0xb6},
+ // Block 0x60, offset 0x21f
+ {value: 0x0008, lo: 0x03},
+ {value: 0x1637, lo: 0x9c, hi: 0x9d},
+ {value: 0x0125, lo: 0x9e, hi: 0x9e},
+ {value: 0x1643, lo: 0x9f, hi: 0x9f},
+ // Block 0x61, offset 0x223
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0xad, hi: 0xad},
+ // Block 0x62, offset 0x225
+ {value: 0x0000, lo: 0x06},
+ {value: 0xe500, lo: 0x80, hi: 0x80},
+ {value: 0xc600, lo: 0x81, hi: 0x9b},
+ {value: 0xe500, lo: 0x9c, hi: 0x9c},
+ {value: 0xc600, lo: 0x9d, hi: 0xb7},
+ {value: 0xe500, lo: 0xb8, hi: 0xb8},
+ {value: 0xc600, lo: 0xb9, hi: 0xbf},
+ // Block 0x63, offset 0x22c
+ {value: 0x0000, lo: 0x05},
+ {value: 0xc600, lo: 0x80, hi: 0x93},
+ {value: 0xe500, lo: 0x94, hi: 0x94},
+ {value: 0xc600, lo: 0x95, hi: 0xaf},
+ {value: 0xe500, lo: 0xb0, hi: 0xb0},
+ {value: 0xc600, lo: 0xb1, hi: 0xbf},
+ // Block 0x64, offset 0x232
+ {value: 0x0000, lo: 0x05},
+ {value: 0xc600, lo: 0x80, hi: 0x8b},
+ {value: 0xe500, lo: 0x8c, hi: 0x8c},
+ {value: 0xc600, lo: 0x8d, hi: 0xa7},
+ {value: 0xe500, lo: 0xa8, hi: 0xa8},
+ {value: 0xc600, lo: 0xa9, hi: 0xbf},
+ // Block 0x65, offset 0x238
+ {value: 0x0000, lo: 0x07},
+ {value: 0xc600, lo: 0x80, hi: 0x83},
+ {value: 0xe500, lo: 0x84, hi: 0x84},
+ {value: 0xc600, lo: 0x85, hi: 0x9f},
+ {value: 0xe500, lo: 0xa0, hi: 0xa0},
+ {value: 0xc600, lo: 0xa1, hi: 0xbb},
+ {value: 0xe500, lo: 0xbc, hi: 0xbc},
+ {value: 0xc600, lo: 0xbd, hi: 0xbf},
+ // Block 0x66, offset 0x240
+ {value: 0x0000, lo: 0x05},
+ {value: 0xc600, lo: 0x80, hi: 0x97},
+ {value: 0xe500, lo: 0x98, hi: 0x98},
+ {value: 0xc600, lo: 0x99, hi: 0xb3},
+ {value: 0xe500, lo: 0xb4, hi: 0xb4},
+ {value: 0xc600, lo: 0xb5, hi: 0xbf},
+ // Block 0x67, offset 0x246
+ {value: 0x0000, lo: 0x05},
+ {value: 0xc600, lo: 0x80, hi: 0x8f},
+ {value: 0xe500, lo: 0x90, hi: 0x90},
+ {value: 0xc600, lo: 0x91, hi: 0xab},
+ {value: 0xe500, lo: 0xac, hi: 0xac},
+ {value: 0xc600, lo: 0xad, hi: 0xbf},
+ // Block 0x68, offset 0x24c
+ {value: 0x0000, lo: 0x05},
+ {value: 0xc600, lo: 0x80, hi: 0x87},
+ {value: 0xe500, lo: 0x88, hi: 0x88},
+ {value: 0xc600, lo: 0x89, hi: 0xa3},
+ {value: 0xe500, lo: 0xa4, hi: 0xa4},
+ {value: 0xc600, lo: 0xa5, hi: 0xbf},
+ // Block 0x69, offset 0x252
+ {value: 0x0000, lo: 0x03},
+ {value: 0xc600, lo: 0x80, hi: 0x87},
+ {value: 0xe500, lo: 0x88, hi: 0x88},
+ {value: 0xc600, lo: 0x89, hi: 0xa3},
+ // Block 0x6a, offset 0x256
+ {value: 0x0002, lo: 0x01},
+ {value: 0x0003, lo: 0x81, hi: 0xbf},
+ // Block 0x6b, offset 0x258
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0xbd, hi: 0xbd},
+ // Block 0x6c, offset 0x25a
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0xa0, hi: 0xa0},
+ // Block 0x6d, offset 0x25c
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0xb6, hi: 0xba},
+ // Block 0x6e, offset 0x25e
+ {value: 0x002c, lo: 0x05},
+ {value: 0x812d, lo: 0x8d, hi: 0x8d},
+ {value: 0x8132, lo: 0x8f, hi: 0x8f},
+ {value: 0x8132, lo: 0xb8, hi: 0xb8},
+ {value: 0x8101, lo: 0xb9, hi: 0xba},
+ {value: 0x8104, lo: 0xbf, hi: 0xbf},
+ // Block 0x6f, offset 0x264
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8132, lo: 0xa5, hi: 0xa5},
+ {value: 0x812d, lo: 0xa6, hi: 0xa6},
+ // Block 0x70, offset 0x267
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x86, hi: 0x86},
+ {value: 0x8104, lo: 0xbf, hi: 0xbf},
+ // Block 0x71, offset 0x26a
+ {value: 0x17fe, lo: 0x07},
+ {value: 0xa000, lo: 0x99, hi: 0x99},
+ {value: 0x4238, lo: 0x9a, hi: 0x9a},
+ {value: 0xa000, lo: 0x9b, hi: 0x9b},
+ {value: 0x4242, lo: 0x9c, hi: 0x9c},
+ {value: 0xa000, lo: 0xa5, hi: 0xa5},
+ {value: 0x424c, lo: 0xab, hi: 0xab},
+ {value: 0x8104, lo: 0xb9, hi: 0xba},
+ // Block 0x72, offset 0x272
+ {value: 0x0000, lo: 0x06},
+ {value: 0x8132, lo: 0x80, hi: 0x82},
+ {value: 0x9900, lo: 0xa7, hi: 0xa7},
+ {value: 0x2d7e, lo: 0xae, hi: 0xae},
+ {value: 0x2d88, lo: 0xaf, hi: 0xaf},
+ {value: 0xa000, lo: 0xb1, hi: 0xb2},
+ {value: 0x8104, lo: 0xb3, hi: 0xb4},
+ // Block 0x73, offset 0x279
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x80, hi: 0x80},
+ {value: 0x8102, lo: 0x8a, hi: 0x8a},
+ // Block 0x74, offset 0x27c
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0xb5, hi: 0xb5},
+ {value: 0x8102, lo: 0xb6, hi: 0xb6},
+ // Block 0x75, offset 0x27f
+ {value: 0x0002, lo: 0x01},
+ {value: 0x8102, lo: 0xa9, hi: 0xaa},
+ // Block 0x76, offset 0x281
+ {value: 0x0000, lo: 0x07},
+ {value: 0xa000, lo: 0x87, hi: 0x87},
+ {value: 0x2d92, lo: 0x8b, hi: 0x8b},
+ {value: 0x2d9c, lo: 0x8c, hi: 0x8c},
+ {value: 0x8104, lo: 0x8d, hi: 0x8d},
+ {value: 0x9900, lo: 0x97, hi: 0x97},
+ {value: 0x8132, lo: 0xa6, hi: 0xac},
+ {value: 0x8132, lo: 0xb0, hi: 0xb4},
+ // Block 0x77, offset 0x289
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x82, hi: 0x82},
+ {value: 0x8102, lo: 0x86, hi: 0x86},
+ // Block 0x78, offset 0x28c
+ {value: 0x6b5a, lo: 0x06},
+ {value: 0x9900, lo: 0xb0, hi: 0xb0},
+ {value: 0xa000, lo: 0xb9, hi: 0xb9},
+ {value: 0x9900, lo: 0xba, hi: 0xba},
+ {value: 0x2db0, lo: 0xbb, hi: 0xbb},
+ {value: 0x2da6, lo: 0xbc, hi: 0xbd},
+ {value: 0x2dba, lo: 0xbe, hi: 0xbe},
+ // Block 0x79, offset 0x293
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0x82, hi: 0x82},
+ {value: 0x8102, lo: 0x83, hi: 0x83},
+ // Block 0x7a, offset 0x296
+ {value: 0x0000, lo: 0x05},
+ {value: 0x9900, lo: 0xaf, hi: 0xaf},
+ {value: 0xa000, lo: 0xb8, hi: 0xb9},
+ {value: 0x2dc4, lo: 0xba, hi: 0xba},
+ {value: 0x2dce, lo: 0xbb, hi: 0xbb},
+ {value: 0x8104, lo: 0xbf, hi: 0xbf},
+ // Block 0x7b, offset 0x29c
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8102, lo: 0x80, hi: 0x80},
+ // Block 0x7c, offset 0x29e
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0xbf, hi: 0xbf},
+ // Block 0x7d, offset 0x2a0
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8104, lo: 0xb6, hi: 0xb6},
+ {value: 0x8102, lo: 0xb7, hi: 0xb7},
+ // Block 0x7e, offset 0x2a3
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0xab, hi: 0xab},
+ // Block 0x7f, offset 0x2a5
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0xb4, hi: 0xb4},
+ // Block 0x80, offset 0x2a7
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0x87, hi: 0x87},
+ // Block 0x81, offset 0x2a9
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8104, lo: 0x99, hi: 0x99},
+ // Block 0x82, offset 0x2ab
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8102, lo: 0x82, hi: 0x82},
+ {value: 0x8104, lo: 0x84, hi: 0x85},
+ // Block 0x83, offset 0x2ae
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8101, lo: 0xb0, hi: 0xb4},
+ // Block 0x84, offset 0x2b0
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0xb0, hi: 0xb6},
+ // Block 0x85, offset 0x2b2
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8101, lo: 0x9e, hi: 0x9e},
+ // Block 0x86, offset 0x2b4
+ {value: 0x0000, lo: 0x0c},
+ {value: 0x45cc, lo: 0x9e, hi: 0x9e},
+ {value: 0x45d6, lo: 0x9f, hi: 0x9f},
+ {value: 0x460a, lo: 0xa0, hi: 0xa0},
+ {value: 0x4618, lo: 0xa1, hi: 0xa1},
+ {value: 0x4626, lo: 0xa2, hi: 0xa2},
+ {value: 0x4634, lo: 0xa3, hi: 0xa3},
+ {value: 0x4642, lo: 0xa4, hi: 0xa4},
+ {value: 0x812b, lo: 0xa5, hi: 0xa6},
+ {value: 0x8101, lo: 0xa7, hi: 0xa9},
+ {value: 0x8130, lo: 0xad, hi: 0xad},
+ {value: 0x812b, lo: 0xae, hi: 0xb2},
+ {value: 0x812d, lo: 0xbb, hi: 0xbf},
+ // Block 0x87, offset 0x2c1
+ {value: 0x0000, lo: 0x09},
+ {value: 0x812d, lo: 0x80, hi: 0x82},
+ {value: 0x8132, lo: 0x85, hi: 0x89},
+ {value: 0x812d, lo: 0x8a, hi: 0x8b},
+ {value: 0x8132, lo: 0xaa, hi: 0xad},
+ {value: 0x45e0, lo: 0xbb, hi: 0xbb},
+ {value: 0x45ea, lo: 0xbc, hi: 0xbc},
+ {value: 0x4650, lo: 0xbd, hi: 0xbd},
+ {value: 0x466c, lo: 0xbe, hi: 0xbe},
+ {value: 0x465e, lo: 0xbf, hi: 0xbf},
+ // Block 0x88, offset 0x2cb
+ {value: 0x0000, lo: 0x01},
+ {value: 0x467a, lo: 0x80, hi: 0x80},
+ // Block 0x89, offset 0x2cd
+ {value: 0x0000, lo: 0x01},
+ {value: 0x8132, lo: 0x82, hi: 0x84},
+ // Block 0x8a, offset 0x2cf
+ {value: 0x0002, lo: 0x03},
+ {value: 0x0043, lo: 0x80, hi: 0x99},
+ {value: 0x0083, lo: 0x9a, hi: 0xb3},
+ {value: 0x0043, lo: 0xb4, hi: 0xbf},
+ // Block 0x8b, offset 0x2d3
+ {value: 0x0002, lo: 0x04},
+ {value: 0x005b, lo: 0x80, hi: 0x8d},
+ {value: 0x0083, lo: 0x8e, hi: 0x94},
+ {value: 0x0093, lo: 0x96, hi: 0xa7},
+ {value: 0x0043, lo: 0xa8, hi: 0xbf},
+ // Block 0x8c, offset 0x2d8
+ {value: 0x0002, lo: 0x0b},
+ {value: 0x0073, lo: 0x80, hi: 0x81},
+ {value: 0x0083, lo: 0x82, hi: 0x9b},
+ {value: 0x0043, lo: 0x9c, hi: 0x9c},
+ {value: 0x0047, lo: 0x9e, hi: 0x9f},
+ {value: 0x004f, lo: 0xa2, hi: 0xa2},
+ {value: 0x0055, lo: 0xa5, hi: 0xa6},
+ {value: 0x005d, lo: 0xa9, hi: 0xac},
+ {value: 0x0067, lo: 0xae, hi: 0xb5},
+ {value: 0x0083, lo: 0xb6, hi: 0xb9},
+ {value: 0x008d, lo: 0xbb, hi: 0xbb},
+ {value: 0x0091, lo: 0xbd, hi: 0xbf},
+ // Block 0x8d, offset 0x2e4
+ {value: 0x0002, lo: 0x04},
+ {value: 0x0097, lo: 0x80, hi: 0x83},
+ {value: 0x00a1, lo: 0x85, hi: 0x8f},
+ {value: 0x0043, lo: 0x90, hi: 0xa9},
+ {value: 0x0083, lo: 0xaa, hi: 0xbf},
+ // Block 0x8e, offset 0x2e9
+ {value: 0x0002, lo: 0x08},
+ {value: 0x00af, lo: 0x80, hi: 0x83},
+ {value: 0x0043, lo: 0x84, hi: 0x85},
+ {value: 0x0049, lo: 0x87, hi: 0x8a},
+ {value: 0x0055, lo: 0x8d, hi: 0x94},
+ {value: 0x0067, lo: 0x96, hi: 0x9c},
+ {value: 0x0083, lo: 0x9e, hi: 0xb7},
+ {value: 0x0043, lo: 0xb8, hi: 0xb9},
+ {value: 0x0049, lo: 0xbb, hi: 0xbe},
+ // Block 0x8f, offset 0x2f2
+ {value: 0x0002, lo: 0x05},
+ {value: 0x0053, lo: 0x80, hi: 0x84},
+ {value: 0x005f, lo: 0x86, hi: 0x86},
+ {value: 0x0067, lo: 0x8a, hi: 0x90},
+ {value: 0x0083, lo: 0x92, hi: 0xab},
+ {value: 0x0043, lo: 0xac, hi: 0xbf},
+ // Block 0x90, offset 0x2f8
+ {value: 0x0002, lo: 0x04},
+ {value: 0x006b, lo: 0x80, hi: 0x85},
+ {value: 0x0083, lo: 0x86, hi: 0x9f},
+ {value: 0x0043, lo: 0xa0, hi: 0xb9},
+ {value: 0x0083, lo: 0xba, hi: 0xbf},
+ // Block 0x91, offset 0x2fd
+ {value: 0x0002, lo: 0x03},
+ {value: 0x008f, lo: 0x80, hi: 0x93},
+ {value: 0x0043, lo: 0x94, hi: 0xad},
+ {value: 0x0083, lo: 0xae, hi: 0xbf},
+ // Block 0x92, offset 0x301
+ {value: 0x0002, lo: 0x04},
+ {value: 0x00a7, lo: 0x80, hi: 0x87},
+ {value: 0x0043, lo: 0x88, hi: 0xa1},
+ {value: 0x0083, lo: 0xa2, hi: 0xbb},
+ {value: 0x0043, lo: 0xbc, hi: 0xbf},
+ // Block 0x93, offset 0x306
+ {value: 0x0002, lo: 0x03},
+ {value: 0x004b, lo: 0x80, hi: 0x95},
+ {value: 0x0083, lo: 0x96, hi: 0xaf},
+ {value: 0x0043, lo: 0xb0, hi: 0xbf},
+ // Block 0x94, offset 0x30a
+ {value: 0x0003, lo: 0x0f},
+ {value: 0x01b8, lo: 0x80, hi: 0x80},
+ {value: 0x045f, lo: 0x81, hi: 0x81},
+ {value: 0x01bb, lo: 0x82, hi: 0x9a},
+ {value: 0x045b, lo: 0x9b, hi: 0x9b},
+ {value: 0x01c7, lo: 0x9c, hi: 0x9c},
+ {value: 0x01d0, lo: 0x9d, hi: 0x9d},
+ {value: 0x01d6, lo: 0x9e, hi: 0x9e},
+ {value: 0x01fa, lo: 0x9f, hi: 0x9f},
+ {value: 0x01eb, lo: 0xa0, hi: 0xa0},
+ {value: 0x01e8, lo: 0xa1, hi: 0xa1},
+ {value: 0x0173, lo: 0xa2, hi: 0xb2},
+ {value: 0x0188, lo: 0xb3, hi: 0xb3},
+ {value: 0x01a6, lo: 0xb4, hi: 0xba},
+ {value: 0x045f, lo: 0xbb, hi: 0xbb},
+ {value: 0x01bb, lo: 0xbc, hi: 0xbf},
+ // Block 0x95, offset 0x31a
+ {value: 0x0003, lo: 0x0d},
+ {value: 0x01c7, lo: 0x80, hi: 0x94},
+ {value: 0x045b, lo: 0x95, hi: 0x95},
+ {value: 0x01c7, lo: 0x96, hi: 0x96},
+ {value: 0x01d0, lo: 0x97, hi: 0x97},
+ {value: 0x01d6, lo: 0x98, hi: 0x98},
+ {value: 0x01fa, lo: 0x99, hi: 0x99},
+ {value: 0x01eb, lo: 0x9a, hi: 0x9a},
+ {value: 0x01e8, lo: 0x9b, hi: 0x9b},
+ {value: 0x0173, lo: 0x9c, hi: 0xac},
+ {value: 0x0188, lo: 0xad, hi: 0xad},
+ {value: 0x01a6, lo: 0xae, hi: 0xb4},
+ {value: 0x045f, lo: 0xb5, hi: 0xb5},
+ {value: 0x01bb, lo: 0xb6, hi: 0xbf},
+ // Block 0x96, offset 0x328
+ {value: 0x0003, lo: 0x0d},
+ {value: 0x01d9, lo: 0x80, hi: 0x8e},
+ {value: 0x045b, lo: 0x8f, hi: 0x8f},
+ {value: 0x01c7, lo: 0x90, hi: 0x90},
+ {value: 0x01d0, lo: 0x91, hi: 0x91},
+ {value: 0x01d6, lo: 0x92, hi: 0x92},
+ {value: 0x01fa, lo: 0x93, hi: 0x93},
+ {value: 0x01eb, lo: 0x94, hi: 0x94},
+ {value: 0x01e8, lo: 0x95, hi: 0x95},
+ {value: 0x0173, lo: 0x96, hi: 0xa6},
+ {value: 0x0188, lo: 0xa7, hi: 0xa7},
+ {value: 0x01a6, lo: 0xa8, hi: 0xae},
+ {value: 0x045f, lo: 0xaf, hi: 0xaf},
+ {value: 0x01bb, lo: 0xb0, hi: 0xbf},
+ // Block 0x97, offset 0x336
+ {value: 0x0003, lo: 0x0d},
+ {value: 0x01eb, lo: 0x80, hi: 0x88},
+ {value: 0x045b, lo: 0x89, hi: 0x89},
+ {value: 0x01c7, lo: 0x8a, hi: 0x8a},
+ {value: 0x01d0, lo: 0x8b, hi: 0x8b},
+ {value: 0x01d6, lo: 0x8c, hi: 0x8c},
+ {value: 0x01fa, lo: 0x8d, hi: 0x8d},
+ {value: 0x01eb, lo: 0x8e, hi: 0x8e},
+ {value: 0x01e8, lo: 0x8f, hi: 0x8f},
+ {value: 0x0173, lo: 0x90, hi: 0xa0},
+ {value: 0x0188, lo: 0xa1, hi: 0xa1},
+ {value: 0x01a6, lo: 0xa2, hi: 0xa8},
+ {value: 0x045f, lo: 0xa9, hi: 0xa9},
+ {value: 0x01bb, lo: 0xaa, hi: 0xbf},
+ // Block 0x98, offset 0x344
+ {value: 0x0000, lo: 0x05},
+ {value: 0x8132, lo: 0x80, hi: 0x86},
+ {value: 0x8132, lo: 0x88, hi: 0x98},
+ {value: 0x8132, lo: 0x9b, hi: 0xa1},
+ {value: 0x8132, lo: 0xa3, hi: 0xa4},
+ {value: 0x8132, lo: 0xa6, hi: 0xaa},
+ // Block 0x99, offset 0x34a
+ {value: 0x0000, lo: 0x01},
+ {value: 0x812d, lo: 0x90, hi: 0x96},
+ // Block 0x9a, offset 0x34c
+ {value: 0x0000, lo: 0x02},
+ {value: 0x8132, lo: 0x84, hi: 0x89},
+ {value: 0x8102, lo: 0x8a, hi: 0x8a},
+ // Block 0x9b, offset 0x34f
+ {value: 0x0002, lo: 0x09},
+ {value: 0x0063, lo: 0x80, hi: 0x89},
+ {value: 0x1951, lo: 0x8a, hi: 0x8a},
+ {value: 0x1981, lo: 0x8b, hi: 0x8b},
+ {value: 0x199c, lo: 0x8c, hi: 0x8c},
+ {value: 0x19a2, lo: 0x8d, hi: 0x8d},
+ {value: 0x1bc0, lo: 0x8e, hi: 0x8e},
+ {value: 0x19ae, lo: 0x8f, hi: 0x8f},
+ {value: 0x197b, lo: 0xaa, hi: 0xaa},
+ {value: 0x197e, lo: 0xab, hi: 0xab},
+ // Block 0x9c, offset 0x359
+ {value: 0x0000, lo: 0x01},
+ {value: 0x193f, lo: 0x90, hi: 0x90},
+ // Block 0x9d, offset 0x35b
+ {value: 0x0028, lo: 0x09},
+ {value: 0x2862, lo: 0x80, hi: 0x80},
+ {value: 0x2826, lo: 0x81, hi: 0x81},
+ {value: 0x2830, lo: 0x82, hi: 0x82},
+ {value: 0x2844, lo: 0x83, hi: 0x84},
+ {value: 0x284e, lo: 0x85, hi: 0x86},
+ {value: 0x283a, lo: 0x87, hi: 0x87},
+ {value: 0x2858, lo: 0x88, hi: 0x88},
+ {value: 0x0b6f, lo: 0x90, hi: 0x90},
+ {value: 0x08e7, lo: 0x91, hi: 0x91},
+}
+
+// recompMap: 7520 bytes (entries only)
+var recompMap map[uint32]rune
+var recompMapOnce sync.Once
+
+const recompMapPacked = "" +
+ "\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0
+ "\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1
+ "\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2
+ "\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3
+ "\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4
+ "\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5
+ "\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7
+ "\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8
+ "\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9
+ "\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA
+ "\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB
+ "\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC
+ "\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD
+ "\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE
+ "\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF
+ "\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1
+ "\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2
+ "\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3
+ "\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4
+ "\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5
+ "\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6
+ "\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9
+ "\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA
+ "\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB
+ "\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC
+ "\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD
+ "\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0
+ "\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1
+ "\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2
+ "\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3
+ "\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4
+ "\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5
+ "\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7
+ "\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8
+ "\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9
+ "\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA
+ "\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB
+ "\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC
+ "\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED
+ "\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE
+ "\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF
+ "\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1
+ "\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2
+ "\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3
+ "\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4
+ "\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5
+ "\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6
+ "\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9
+ "\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA
+ "\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB
+ "\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC
+ "\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD
+ "\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF
+ "\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100
+ "\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101
+ "\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102
+ "\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103
+ "\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104
+ "\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105
+ "\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106
+ "\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107
+ "\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108
+ "\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109
+ "\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A
+ "\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B
+ "\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C
+ "\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D
+ "\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E
+ "\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F
+ "\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112
+ "\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113
+ "\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114
+ "\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115
+ "\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116
+ "\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117
+ "\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118
+ "\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119
+ "\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A
+ "\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B
+ "\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C
+ "\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D
+ "\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E
+ "\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F
+ "\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120
+ "\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121
+ "\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122
+ "\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123
+ "\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124
+ "\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125
+ "\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128
+ "\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129
+ "\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A
+ "\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B
+ "\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C
+ "\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D
+ "\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E
+ "\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F
+ "\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130
+ "\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134
+ "\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135
+ "\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136
+ "\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137
+ "\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139
+ "\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A
+ "\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B
+ "\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C
+ "\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D
+ "\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E
+ "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143
+ "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144
+ "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145
+ "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146
+ "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147
+ "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148
+ "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C
+ "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D
+ "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E
+ "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F
+ "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150
+ "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151
+ "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154
+ "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155
+ "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156
+ "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157
+ "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158
+ "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159
+ "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A
+ "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B
+ "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C
+ "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D
+ "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E
+ "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F
+ "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160
+ "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161
+ "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162
+ "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163
+ "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164
+ "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165
+ "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168
+ "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169
+ "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A
+ "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B
+ "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C
+ "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D
+ "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E
+ "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F
+ "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170
+ "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171
+ "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172
+ "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173
+ "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174
+ "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175
+ "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176
+ "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177
+ "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178
+ "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179
+ "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A
+ "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B
+ "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C
+ "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D
+ "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E
+ "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0
+ "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1
+ "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF
+ "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0
+ "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD
+ "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE
+ "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF
+ "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0
+ "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1
+ "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2
+ "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3
+ "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4
+ "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5
+ "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6
+ "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7
+ "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8
+ "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9
+ "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA
+ "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB
+ "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC
+ "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE
+ "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF
+ "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0
+ "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1
+ "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2
+ "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3
+ "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6
+ "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7
+ "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8
+ "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9
+ "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA
+ "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB
+ "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC
+ "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED
+ "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE
+ "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF
+ "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0
+ "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4
+ "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5
+ "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8
+ "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9
+ "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA
+ "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB
+ "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC
+ "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD
+ "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE
+ "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF
+ "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200
+ "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201
+ "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202
+ "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203
+ "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204
+ "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205
+ "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206
+ "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207
+ "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208
+ "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209
+ "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A
+ "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B
+ "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C
+ "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D
+ "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E
+ "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F
+ "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210
+ "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211
+ "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212
+ "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213
+ "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214
+ "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215
+ "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216
+ "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217
+ "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218
+ "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219
+ "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A
+ "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B
+ "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E
+ "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F
+ "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226
+ "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227
+ "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228
+ "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229
+ "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A
+ "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B
+ "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C
+ "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D
+ "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E
+ "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F
+ "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230
+ "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231
+ "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232
+ "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233
+ "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385
+ "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386
+ "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388
+ "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389
+ "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A
+ "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C
+ "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E
+ "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F
+ "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390
+ "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA
+ "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB
+ "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC
+ "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD
+ "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE
+ "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF
+ "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0
+ "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA
+ "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB
+ "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC
+ "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD
+ "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE
+ "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3
+ "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4
+ "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400
+ "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401
+ "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403
+ "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407
+ "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C
+ "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D
+ "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E
+ "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419
+ "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439
+ "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450
+ "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451
+ "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453
+ "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457
+ "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C
+ "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D
+ "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E
+ "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476
+ "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477
+ "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1
+ "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2
+ "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0
+ "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1
+ "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2
+ "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3
+ "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6
+ "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7
+ "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA
+ "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB
+ "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC
+ "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD
+ "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE
+ "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF
+ "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2
+ "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3
+ "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4
+ "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5
+ "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6
+ "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7
+ "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA
+ "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB
+ "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC
+ "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED
+ "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE
+ "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF
+ "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0
+ "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1
+ "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2
+ "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3
+ "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4
+ "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5
+ "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8
+ "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9
+ "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622
+ "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623
+ "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624
+ "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625
+ "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626
+ "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0
+ "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2
+ "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3
+ "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929
+ "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931
+ "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934
+ "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB
+ "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC
+ "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48
+ "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B
+ "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C
+ "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94
+ "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA
+ "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB
+ "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC
+ "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48
+ "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0
+ "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7
+ "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8
+ "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA
+ "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB
+ "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A
+ "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B
+ "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C
+ "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA
+ "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC
+ "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD
+ "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE
+ "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026
+ "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06
+ "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08
+ "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A
+ "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C
+ "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E
+ "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12
+ "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B
+ "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D
+ "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40
+ "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41
+ "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43
+ "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00
+ "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01
+ "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02
+ "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03
+ "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04
+ "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05
+ "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06
+ "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07
+ "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08
+ "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09
+ "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A
+ "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B
+ "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C
+ "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D
+ "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E
+ "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F
+ "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10
+ "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11
+ "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12
+ "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13
+ "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14
+ "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15
+ "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16
+ "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17
+ "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18
+ "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19
+ "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A
+ "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B
+ "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C
+ "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D
+ "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E
+ "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F
+ "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20
+ "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21
+ "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22
+ "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23
+ "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24
+ "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25
+ "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26
+ "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27
+ "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28
+ "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29
+ "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A
+ "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B
+ "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C
+ "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D
+ "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E
+ "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F
+ "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30
+ "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31
+ "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32
+ "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33
+ "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34
+ "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35
+ "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36
+ "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37
+ "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38
+ "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39
+ "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A
+ "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B
+ "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C
+ "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D
+ "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E
+ "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F
+ "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40
+ "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41
+ "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42
+ "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43
+ "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44
+ "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45
+ "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46
+ "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47
+ "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48
+ "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49
+ "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A
+ "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B
+ "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C
+ "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D
+ "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E
+ "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F
+ "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50
+ "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51
+ "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52
+ "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53
+ "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54
+ "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55
+ "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56
+ "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57
+ "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58
+ "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59
+ "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A
+ "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B
+ "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C
+ "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D
+ "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E
+ "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F
+ "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60
+ "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61
+ "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62
+ "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63
+ "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64
+ "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65
+ "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66
+ "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67
+ "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68
+ "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69
+ "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A
+ "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B
+ "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C
+ "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D
+ "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E
+ "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F
+ "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70
+ "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71
+ "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72
+ "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73
+ "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74
+ "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75
+ "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76
+ "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77
+ "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78
+ "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79
+ "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A
+ "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B
+ "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C
+ "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D
+ "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E
+ "\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F
+ "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80
+ "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81
+ "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82
+ "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83
+ "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84
+ "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85
+ "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86
+ "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87
+ "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88
+ "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89
+ "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A
+ "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B
+ "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C
+ "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D
+ "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E
+ "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F
+ "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90
+ "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91
+ "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92
+ "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93
+ "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94
+ "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95
+ "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96
+ "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97
+ "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98
+ "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99
+ "\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B
+ "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0
+ "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1
+ "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2
+ "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3
+ "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4
+ "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5
+ "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6
+ "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7
+ "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8
+ "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9
+ "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA
+ "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB
+ "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC
+ "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD
+ "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE
+ "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF
+ "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0
+ "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1
+ "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2
+ "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3
+ "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4
+ "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5
+ "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6
+ "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7
+ "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8
+ "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9
+ "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA
+ "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB
+ "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC
+ "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD
+ "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE
+ "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF
+ "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0
+ "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1
+ "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2
+ "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3
+ "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4
+ "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5
+ "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6
+ "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7
+ "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8
+ "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9
+ "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA
+ "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB
+ "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC
+ "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD
+ "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE
+ "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF
+ "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0
+ "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1
+ "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2
+ "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3
+ "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4
+ "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5
+ "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6
+ "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7
+ "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8
+ "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9
+ "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA
+ "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB
+ "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC
+ "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD
+ "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE
+ "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF
+ "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0
+ "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1
+ "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2
+ "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3
+ "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4
+ "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5
+ "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6
+ "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7
+ "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8
+ "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9
+ "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA
+ "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB
+ "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC
+ "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED
+ "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE
+ "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF
+ "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0
+ "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1
+ "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2
+ "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3
+ "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4
+ "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5
+ "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6
+ "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7
+ "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8
+ "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9
+ "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00
+ "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01
+ "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02
+ "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03
+ "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04
+ "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05
+ "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06
+ "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07
+ "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08
+ "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09
+ "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A
+ "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B
+ "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C
+ "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D
+ "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E
+ "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F
+ "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10
+ "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11
+ "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12
+ "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13
+ "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14
+ "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15
+ "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18
+ "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19
+ "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A
+ "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B
+ "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C
+ "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D
+ "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20
+ "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21
+ "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22
+ "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23
+ "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24
+ "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25
+ "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26
+ "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27
+ "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28
+ "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29
+ "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A
+ "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B
+ "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C
+ "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D
+ "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E
+ "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F
+ "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30
+ "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31
+ "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32
+ "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33
+ "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34
+ "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35
+ "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36
+ "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37
+ "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38
+ "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39
+ "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A
+ "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B
+ "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C
+ "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D
+ "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E
+ "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F
+ "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40
+ "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41
+ "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42
+ "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43
+ "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44
+ "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45
+ "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48
+ "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49
+ "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A
+ "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B
+ "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C
+ "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D
+ "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50
+ "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51
+ "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52
+ "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53
+ "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54
+ "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55
+ "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56
+ "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57
+ "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59
+ "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B
+ "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D
+ "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F
+ "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60
+ "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61
+ "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62
+ "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63
+ "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64
+ "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65
+ "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66
+ "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67
+ "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68
+ "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69
+ "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A
+ "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B
+ "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C
+ "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D
+ "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E
+ "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F
+ "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70
+ "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72
+ "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74
+ "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76
+ "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78
+ "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A
+ "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C
+ "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80
+ "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81
+ "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82
+ "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83
+ "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84
+ "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85
+ "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86
+ "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87
+ "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88
+ "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89
+ "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A
+ "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B
+ "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C
+ "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D
+ "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E
+ "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F
+ "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90
+ "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91
+ "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92
+ "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93
+ "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94
+ "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95
+ "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96
+ "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97
+ "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98
+ "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99
+ "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A
+ "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B
+ "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C
+ "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D
+ "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E
+ "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F
+ "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0
+ "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1
+ "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2
+ "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3
+ "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4
+ "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5
+ "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6
+ "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7
+ "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8
+ "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9
+ "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA
+ "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB
+ "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC
+ "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD
+ "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE
+ "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF
+ "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0
+ "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1
+ "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2
+ "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3
+ "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4
+ "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6
+ "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7
+ "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8
+ "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9
+ "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA
+ "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC
+ "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1
+ "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2
+ "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3
+ "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4
+ "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6
+ "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7
+ "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8
+ "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA
+ "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC
+ "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD
+ "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE
+ "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF
+ "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0
+ "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1
+ "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2
+ "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6
+ "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7
+ "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8
+ "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9
+ "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA
+ "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD
+ "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE
+ "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF
+ "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0
+ "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1
+ "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2
+ "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4
+ "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5
+ "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6
+ "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7
+ "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8
+ "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9
+ "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA
+ "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC
+ "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED
+ "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2
+ "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3
+ "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4
+ "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6
+ "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7
+ "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8
+ "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA
+ "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC
+ "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A
+ "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B
+ "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE
+ "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD
+ "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE
+ "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF
+ "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204
+ "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209
+ "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C
+ "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224
+ "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226
+ "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241
+ "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244
+ "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247
+ "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249
+ "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260
+ "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262
+ "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D
+ "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E
+ "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F
+ "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270
+ "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271
+ "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274
+ "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275
+ "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278
+ "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279
+ "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280
+ "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281
+ "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284
+ "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285
+ "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288
+ "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289
+ "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC
+ "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD
+ "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE
+ "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF
+ "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0
+ "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1
+ "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2
+ "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3
+ "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA
+ "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB
+ "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC
+ "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED
+ "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C
+ "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E
+ "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050
+ "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052
+ "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054
+ "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056
+ "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058
+ "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A
+ "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C
+ "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E
+ "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060
+ "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062
+ "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065
+ "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067
+ "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069
+ "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070
+ "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071
+ "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073
+ "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074
+ "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076
+ "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077
+ "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079
+ "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A
+ "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C
+ "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D
+ "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094
+ "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E
+ "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC
+ "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE
+ "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0
+ "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2
+ "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4
+ "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6
+ "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8
+ "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA
+ "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC
+ "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE
+ "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0
+ "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2
+ "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5
+ "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7
+ "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9
+ "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0
+ "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1
+ "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3
+ "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4
+ "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6
+ "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7
+ "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9
+ "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA
+ "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC
+ "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD
+ "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4
+ "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7
+ "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8
+ "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9
+ "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA
+ "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE
+ "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A
+ "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C
+ "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB
+ "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E
+ "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F
+ "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B
+ "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C
+ "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB
+ "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC
+ "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE
+ "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA
+ "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB
+ ""
+ // Total size of tables: 53KB (54226 bytes)
diff --git a/vendor/golang.org/x/text/unicode/norm/tables.go b/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go
index a56697b57..942906929 100644
--- a/vendor/golang.org/x/text/unicode/norm/tables.go
+++ b/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go
@@ -1,7 +1,11 @@
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+// +build !go1.10
package norm
+import "sync"
+
const (
// Version is the Unicode edition from which the tables are derived.
Version = "9.0.0"
@@ -27,14 +31,14 @@ const (
firstMulti = 0x186D
firstCCC = 0x2C9E
endMulti = 0x2F60
- firstLeadingCCC = 0x4A44
- firstCCCZeroExcept = 0x4A5A
- firstStarterWithNLead = 0x4A81
- lastDecomp = 0x4A83
+ firstLeadingCCC = 0x49AE
+ firstCCCZeroExcept = 0x4A78
+ firstStarterWithNLead = 0x4A9F
+ lastDecomp = 0x4AA1
maxDecomp = 0x8000
)
-// decomps: 19075 bytes
+// decomps: 19105 bytes
var decomps = [...]byte{
// Bytes 0 - 3f
0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41,
@@ -2443,283 +2447,287 @@ var decomps = [...]byte{
0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D,
0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9,
0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43,
- 0x73, 0xCC, 0x87, 0xC9, 0x43, 0xE1, 0x85, 0xA1,
- 0x01, 0x43, 0xE1, 0x85, 0xA2, 0x01, 0x43, 0xE1,
- 0x85, 0xA3, 0x01, 0x43, 0xE1, 0x85, 0xA4, 0x01,
- 0x43, 0xE1, 0x85, 0xA5, 0x01, 0x43, 0xE1, 0x85,
- 0xA6, 0x01, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x43,
+ 0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82,
+ 0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D,
+ 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE,
+ 0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC,
+ 0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9,
// Bytes 4300 - 433f
- 0xE1, 0x85, 0xA8, 0x01, 0x43, 0xE1, 0x85, 0xA9,
- 0x01, 0x43, 0xE1, 0x85, 0xAA, 0x01, 0x43, 0xE1,
- 0x85, 0xAB, 0x01, 0x43, 0xE1, 0x85, 0xAC, 0x01,
- 0x43, 0xE1, 0x85, 0xAD, 0x01, 0x43, 0xE1, 0x85,
- 0xAE, 0x01, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x43,
- 0xE1, 0x85, 0xB0, 0x01, 0x43, 0xE1, 0x85, 0xB1,
- 0x01, 0x43, 0xE1, 0x85, 0xB2, 0x01, 0x43, 0xE1,
- 0x85, 0xB3, 0x01, 0x43, 0xE1, 0x85, 0xB4, 0x01,
+ 0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
+ 0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC,
+ 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9,
+ 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
+ 0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC,
+ 0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9,
+ 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
+ 0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC,
// Bytes 4340 - 437f
- 0x43, 0xE1, 0x85, 0xB5, 0x01, 0x43, 0xE1, 0x86,
- 0xAA, 0x01, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x43,
- 0xE1, 0x86, 0xAD, 0x01, 0x43, 0xE1, 0x86, 0xB0,
- 0x01, 0x43, 0xE1, 0x86, 0xB1, 0x01, 0x43, 0xE1,
- 0x86, 0xB2, 0x01, 0x43, 0xE1, 0x86, 0xB3, 0x01,
- 0x43, 0xE1, 0x86, 0xB4, 0x01, 0x43, 0xE1, 0x86,
- 0xB5, 0x01, 0x44, 0x20, 0xE3, 0x82, 0x99, 0x0D,
- 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D, 0x44, 0xC2,
+ 0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9,
+ 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7,
+ 0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41,
+ 0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
+ 0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41,
+ 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7,
// Bytes 4380 - 43bf
- 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE, 0x91, 0xCC,
- 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC, 0x81, 0xC9,
- 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
- 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x9F, 0xCC,
- 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x81, 0xC9,
- 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x44, 0xCE,
- 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB1, 0xCC,
- 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC, 0x81, 0xC9,
+ 0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41,
+ 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7,
+ 0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41,
+ 0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
+ 0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41,
// Bytes 43c0 - 43ff
- 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
- 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xBF, 0xCC,
- 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC, 0x81, 0xC9,
- 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9, 0x44, 0xD7,
- 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7, 0x90, 0xD6,
- 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6, 0xBC, 0x41,
- 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
- 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7, 0x92, 0xD6,
+ 0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
+ 0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49,
+ 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
+ 0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6,
+ 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41,
+ 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7,
+ 0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6,
// Bytes 4400 - 443f
- 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6, 0xBC, 0x41,
- 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
- 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7, 0x95, 0xD6,
- 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6, 0xBC, 0x41,
- 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
- 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7, 0x99, 0xD6,
- 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6, 0xBC, 0x41,
- 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
+ 0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31,
+ 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8,
+ 0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9,
+ 0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,
+ 0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8,
+ 0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9,
+ 0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65,
+ 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9,
// Bytes 4440 - 447f
- 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7, 0x9C, 0xD6,
- 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6, 0xBC, 0x41,
- 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
- 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA3, 0xD6,
- 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBC, 0x41,
- 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
- 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA7, 0xD6,
- 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6, 0xBC, 0x41,
+ 0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9,
+ 0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75,
+ 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9,
+ 0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9,
+ 0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9,
+ 0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB,
+ 0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88,
+ 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC,
// Bytes 4480 - 44bf
- 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
- 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7, 0xA9, 0xD7,
- 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6, 0xBC, 0x41,
- 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31, 0x44, 0xD8,
- 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8, 0xA7, 0xD9,
- 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x94, 0xC9,
- 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, 0x44, 0xD8,
- 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8, 0xB1, 0xD9,
+ 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82,
+ 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+ 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45,
+ 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20,
+ 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC,
+ 0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94,
+ 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9,
+ 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91,
// Bytes 44c0 - 44ff
- 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9, 0x8B, 0x59,
- 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65, 0x44, 0xD9,
- 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9, 0x80, 0xD9,
- 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9, 0x91, 0x71,
- 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75, 0x44, 0xD9,
- 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x88, 0xD9,
- 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9, 0xB0, 0x79,
- 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x44, 0xDB,
+ 0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72,
+ 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45,
+ 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20,
+ 0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB,
+ 0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC,
+ 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC,
+ 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6,
+ 0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6,
// Bytes 4500 - 453f
- 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB, 0x95, 0xD9,
- 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88, 0xCC, 0x80,
- 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC, 0x81, 0xCA,
- 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82, 0xCA, 0x45,
- 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x45, 0x20,
- 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC,
- 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xCC, 0x94,
- 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x94, 0xCC,
+ 0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9,
+ 0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,
+ 0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,
+ 0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1,
// Bytes 4540 - 457f
- 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94, 0xCD, 0x82,
- 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9, 0x91, 0x72,
- 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91, 0x72, 0x45,
- 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72, 0x45, 0x20,
- 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45, 0x20, 0xD9,
- 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20, 0xD9, 0x91,
- 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB, 0x9D, 0xCC,
- 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC, 0x88, 0xCC,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF,
+ 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1,
+ 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2,
+ 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF,
+ 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96,
+ 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97,
// Bytes 4580 - 45bf
- 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC, 0x88, 0xCC,
- 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6, 0xBC, 0xD7,
- 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6, 0xBC, 0xD7,
- 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9, 0x8E, 0xD9,
- 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, 0x8F, 0xD9,
- 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, 0x90, 0xD9,
- 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95, 0xE0, 0xA4,
- 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96, 0xE0, 0xA4,
+ 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C,
+ 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB,
+ 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2,
+ 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8,
+ 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1,
+ 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2,
+ 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2,
+ 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3,
// Bytes 45c0 - 45ff
- 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97, 0xE0, 0xA4,
- 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C, 0xE0, 0xA4,
- 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1, 0xE0, 0xA4,
- 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2, 0xE0, 0xA4,
- 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB, 0xE0, 0xA4,
- 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF, 0xE0, 0xA4,
- 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1, 0xE0, 0xA6,
- 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2, 0xE0, 0xA6,
+ 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86,
+ 0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85,
+ 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0,
+ 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD,
+ 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,
+ 0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
+ 0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2,
+ 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49,
// Bytes 4600 - 463f
- 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF, 0xE0, 0xA6,
- 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96, 0xE0, 0xA8,
- 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97, 0xE0, 0xA8,
- 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C, 0xE0, 0xA8,
- 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB, 0xE0, 0xA8,
- 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2, 0xE0, 0xA8,
- 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8, 0xE0, 0xA8,
- 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1, 0xE0, 0xAC,
- // Bytes 4640 - 467f
- 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2, 0xE0, 0xAC,
- 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2, 0xE0, 0xBE,
- 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3, 0xE0, 0xBE,
- 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86, 0xE3, 0x82,
- 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85, 0x97, 0xF0,
- 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x85,
- 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0,
- 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xAD,
- // Bytes 4680 - 46bf
- 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85,
- 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2, 0xE0, 0xBD,
- 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49, 0xE0, 0xBE,
- 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E,
+ 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE,
+ 0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
+ 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE,
0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85,
- 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0,
+ 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0,
0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
- 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x85,
- // Bytes 46c0 - 46ff
+ 0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85,
0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
- 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
- 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB1, 0xAE,
- 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85,
- 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE, 0x4C, 0xF0,
+ // Bytes 4640 - 467f
+ 0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
+ 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE,
+ 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,
+ 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0,
0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
- 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86,
- 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
+ 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86,
+ 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
+ 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
+ // Bytes 4680 - 46bf
+ 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE,
+ 0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC,
+ 0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83,
+ 0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A,
+ 0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43,
+ 0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9,
+ 0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC,
+ 0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83,
+ // Bytes 46c0 - 46ff
+ 0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3,
+ 0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F,
+ 0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9,
+ 0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC,
+ 0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83,
+ 0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8,
+ 0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53,
+ 0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9,
// Bytes 4700 - 473f
- 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
- 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE,
- 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85,
- 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x83, 0x41,
- 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC, 0x86, 0xC9,
- 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83, 0x41, 0xCC,
- 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A, 0xC9, 0x83,
- 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43, 0xCC, 0xA7,
+ 0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC,
+ 0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83,
+ 0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B,
+ 0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61,
+ 0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9,
+ 0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC,
+ 0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83,
+ 0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82,
// Bytes 4740 - 477f
- 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9, 0x83, 0x45,
- 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC, 0xA3, 0xB5,
- 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83, 0x49, 0xCC,
- 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3, 0xB5, 0x83,
- 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F, 0xCC, 0x83,
- 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9, 0x83, 0x4F,
- 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC, 0x88, 0xC9,
- 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83, 0x4F, 0xCC,
+ 0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65,
+ 0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5,
+ 0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC,
+ 0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83,
+ 0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84,
+ 0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F,
+ 0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD,
+ 0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC,
// Bytes 4780 - 47bf
- 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8, 0xA5, 0x83,
- 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53, 0xCC, 0x81,
- 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9, 0x83, 0x53,
- 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC, 0x83, 0xC9,
- 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83, 0x55, 0xCC,
- 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B, 0xAD, 0x83,
- 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61, 0xCC, 0x86,
- 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9, 0x83, 0x61,
+ 0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83,
+ 0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C,
+ 0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75,
+ 0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9,
+ 0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC,
+ 0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9,
+ 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
+ 0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC,
// Bytes 47c0 - 47ff
- 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC, 0x8A, 0xC9,
- 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83, 0x63, 0xCC,
- 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82, 0xC9, 0x83,
- 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65, 0xCC, 0xA3,
- 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5, 0x83, 0x69,
- 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC, 0xA3, 0xB5,
- 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83, 0x6F, 0xCC,
- 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84, 0xC9, 0x83,
+ 0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9,
+ 0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
+ 0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC,
+ 0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9,
+ 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
+ 0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC,
+ 0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9,
+ 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE,
// Bytes 4800 - 483f
- 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F, 0xCC, 0x88,
- 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD, 0x83, 0x6F,
- 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0xA8, 0xA5,
- 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83, 0x73, 0xCC,
- 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C, 0xC9, 0x83,
- 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75, 0xCC, 0x83,
- 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9, 0x83, 0x75,
- 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC, 0x9B, 0xAD,
+ 0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC,
+ 0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9,
+ 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE,
+ 0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC,
+ 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9,
+ 0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE,
+ 0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC,
+ 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9,
// Bytes 4840 - 487f
- 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9, 0x84, 0xCE,
- 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0x95, 0xCC,
- 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC, 0x94, 0xC9,
- 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9, 0x84, 0xCE,
- 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0x99, 0xCC,
- 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC, 0x94, 0xC9,
- 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9, 0x84, 0xCE,
- 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA5, 0xCC,
+ 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE,
+ 0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC,
+ 0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9,
+ 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF,
+ 0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC,
+ 0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9,
+ 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF,
+ 0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC,
// Bytes 4880 - 48bf
- 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x93, 0xC9,
- 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
- 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE, 0xB1, 0xCC,
- 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x93, 0xC9,
- 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
- 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE, 0xB5, 0xCC,
- 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC, 0x94, 0xC9,
- 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9, 0x84, 0xCE,
+ 0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9,
+ 0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE,
+ 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
// Bytes 48c0 - 48ff
- 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB7, 0xCC,
- 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x94, 0xC9,
- 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9, 0x84, 0xCE,
- 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE, 0xB9, 0xCC,
- 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC, 0x94, 0xC9,
- 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9, 0x84, 0xCE,
- 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF, 0x85, 0xCC,
- 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x93, 0xC9,
+ 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
// Bytes 4900 - 493f
- 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9, 0x84, 0xCF,
- 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF, 0x89, 0xCC,
- 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x93, 0xC9,
- 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9, 0x84, 0xCF,
- 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE, 0x91, 0xCC,
- 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, 0x91, 0xCC,
- 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, 0x91, 0xCC,
- 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, 0x91, 0xCC,
+ 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
// Bytes 4940 - 497f
- 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, 0x91, 0xCC,
- 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, 0x91, 0xCC,
- 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, 0x97, 0xCC,
- 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, 0x97, 0xCC,
- 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, 0x97, 0xCC,
- 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, 0x97, 0xCC,
- 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, 0x97, 0xCC,
- 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, 0x97, 0xCC,
+ 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+ 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+ 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+ 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF,
// Bytes 4980 - 49bf
- 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, 0xA9, 0xCC,
- 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, 0xA9, 0xCC,
- 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, 0xA9, 0xCC,
- 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, 0xA9, 0xCC,
- 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, 0xA9, 0xCC,
- 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, 0xA9, 0xCC,
- 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, 0xB1, 0xCC,
- 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, 0xB1, 0xCC,
+ 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF,
+ 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF,
+ 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF,
+ 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF,
+ 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF,
+ 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC,
+ 0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32,
+ 0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85,
// Bytes 49c0 - 49ff
- 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, 0xB1, 0xCC,
- 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, 0xB1, 0xCC,
- 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, 0xB1, 0xCC,
- 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, 0xB1, 0xCC,
- 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, 0xB7, 0xCC,
- 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, 0xB7, 0xCC,
- 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, 0xB7, 0xCC,
- 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, 0xB7, 0xCC,
+ 0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01,
+ 0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43,
+ 0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85,
+ 0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01,
+ 0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43,
+ 0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85,
+ 0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01,
+ 0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43,
// Bytes 4a00 - 4a3f
- 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, 0xB7, 0xCC,
- 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, 0xB7, 0xCC,
- 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF, 0x89, 0xCC,
- 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF, 0x89, 0xCC,
- 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF, 0x89, 0xCC,
- 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF, 0x89, 0xCC,
- 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF, 0x89, 0xCC,
- 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF, 0x89, 0xCC,
+ 0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85,
+ 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01,
+ 0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43,
+ 0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85,
+ 0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01,
+ 0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43,
+ 0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85,
+ 0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01,
// Bytes 4a40 - 4a7f
- 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC, 0x80, 0xC9,
- 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32, 0x42, 0xCC,
- 0x93, 0xC9, 0x32, 0x44, 0xCC, 0x88, 0xCC, 0x81,
- 0xCA, 0x32, 0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03,
- 0x43, 0xE3, 0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0,
- 0xBD, 0xB1, 0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46,
- 0xE0, 0xBD, 0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26,
- 0x46, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E,
+ 0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43,
+ 0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86,
+ 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01,
+ 0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43,
+ 0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86,
+ 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01,
+ 0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32,
+ 0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3,
// Bytes 4a80 - 4abf
- 0x26, 0x00, 0x01,
+ 0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1,
+ 0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD,
+ 0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0,
+ 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00,
+ 0x01,
}
// lookup returns the trie value for the first UTF-8 encoding in s and
@@ -2892,7 +2900,7 @@ func (t *nfcTrie) lookupStringUnsafe(s string) uint16 {
return 0
}
-// nfcTrie. Total size: 10332 bytes (10.09 KiB). Checksum: ad355b768fddb1b6.
+// nfcTrie. Total size: 10332 bytes (10.09 KiB). Checksum: 51cc525b297fc970.
type nfcTrie struct{}
func newNfcTrie(i int) *nfcTrie {
@@ -2928,22 +2936,22 @@ var nfcValues = [2944]uint16{
0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
// Block 0x2, offset 0x80
// Block 0x3, offset 0xc0
- 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x471e, 0xc3: 0x2f79, 0xc4: 0x472d, 0xc5: 0x4732,
- 0xc6: 0xa000, 0xc7: 0x473c, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x4741, 0xcb: 0x2ffb,
- 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x4755, 0xd1: 0x3104,
- 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x475f, 0xd5: 0x4764, 0xd6: 0x4773,
- 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x47a5, 0xdd: 0x3235,
- 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x47af, 0xe3: 0x3285,
- 0xe4: 0x47be, 0xe5: 0x47c3, 0xe6: 0xa000, 0xe7: 0x47cd, 0xe8: 0x32ee, 0xe9: 0x32f3,
- 0xea: 0x47d2, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x47e6,
- 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x47f0, 0xf5: 0x47f5,
- 0xf6: 0x4804, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
- 0xfc: 0x4836, 0xfd: 0x3550, 0xff: 0x3569,
+ 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,
+ 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,
+ 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,
+ 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,
+ 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,
+ 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,
+ 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,
+ 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,
+ 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,
+ 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
+ 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,
// Block 0x4, offset 0x100
- 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x4723, 0x103: 0x47b4, 0x104: 0x2f9c, 0x105: 0x32a8,
+ 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,
0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,
0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,
- 0x112: 0x4746, 0x113: 0x47d7, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
+ 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,
0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,
0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,
@@ -2954,12 +2962,12 @@ var nfcValues = [2944]uint16{
// Block 0x5, offset 0x140
0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,
0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f,
- 0x14c: 0x4769, 0x14d: 0x47fa, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
+ 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,
- 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x478c, 0x15b: 0x481d, 0x15c: 0x317c, 0x15d: 0x348d,
- 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x4791, 0x161: 0x4822, 0x162: 0x31a4, 0x163: 0x34ba,
- 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x479b, 0x169: 0x482c,
- 0x16a: 0x47a0, 0x16b: 0x4831, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
+ 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,
+ 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,
+ 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,
+ 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,
0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,
0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000,
@@ -2971,7 +2979,7 @@ var nfcValues = [2944]uint16{
0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,
0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,
0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,
- 0x1aa: 0x4782, 0x1ab: 0x4813, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
+ 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334,
0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,
0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,
@@ -2982,8 +2990,8 @@ var nfcValues = [2944]uint16{
0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,
0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,
0x1de: 0x305a, 0x1df: 0x3366,
- 0x1e6: 0x4728, 0x1e7: 0x47b9, 0x1e8: 0x4750, 0x1e9: 0x47e1,
- 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x476e, 0x1ef: 0x47ff,
+ 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,
+ 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,
0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,
// Block 0x8, offset 0x200
0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
@@ -2998,7 +3006,7 @@ var nfcValues = [2944]uint16{
0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
// Block 0x9, offset 0x240
- 0x240: 0x4a44, 0x241: 0x4a49, 0x242: 0x9932, 0x243: 0x4a4e, 0x244: 0x4a53, 0x245: 0x9936,
+ 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,
0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
@@ -3017,7 +3025,7 @@ var nfcValues = [2944]uint16{
0x299: 0xa000,
0x29f: 0xa000, 0x2a1: 0xa000,
0x2a5: 0xa000, 0x2a9: 0xa000,
- 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x4894, 0x2ad: 0x3697, 0x2ae: 0x48be, 0x2af: 0x36a9,
+ 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,
0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,
0x2b7: 0xa000, 0x2b9: 0xa000,
0x2bf: 0xa000,
@@ -3078,15 +3086,15 @@ var nfcValues = [2944]uint16{
0x424: 0x305f, 0x425: 0x336b, 0x426: 0x3055, 0x427: 0x3361, 0x428: 0x3064, 0x429: 0x3370,
0x42a: 0x3069, 0x42b: 0x3375, 0x42c: 0x30af, 0x42d: 0x33bb, 0x42e: 0x390b, 0x42f: 0x3a9a,
0x430: 0x30b9, 0x431: 0x33ca, 0x432: 0x30c3, 0x433: 0x33d4, 0x434: 0x30cd, 0x435: 0x33de,
- 0x436: 0x475a, 0x437: 0x47eb, 0x438: 0x3912, 0x439: 0x3aa1, 0x43a: 0x30e6, 0x43b: 0x33f7,
+ 0x436: 0x46c4, 0x437: 0x4755, 0x438: 0x3912, 0x439: 0x3aa1, 0x43a: 0x30e6, 0x43b: 0x33f7,
0x43c: 0x30e1, 0x43d: 0x33f2, 0x43e: 0x30eb, 0x43f: 0x33fc,
// Block 0x11, offset 0x440
0x440: 0x30f0, 0x441: 0x3401, 0x442: 0x30f5, 0x443: 0x3406, 0x444: 0x3109, 0x445: 0x341a,
0x446: 0x3113, 0x447: 0x3424, 0x448: 0x3122, 0x449: 0x3433, 0x44a: 0x311d, 0x44b: 0x342e,
0x44c: 0x3935, 0x44d: 0x3ac4, 0x44e: 0x3943, 0x44f: 0x3ad2, 0x450: 0x394a, 0x451: 0x3ad9,
0x452: 0x3951, 0x453: 0x3ae0, 0x454: 0x314f, 0x455: 0x3460, 0x456: 0x3154, 0x457: 0x3465,
- 0x458: 0x315e, 0x459: 0x346f, 0x45a: 0x4787, 0x45b: 0x4818, 0x45c: 0x3997, 0x45d: 0x3b26,
- 0x45e: 0x3177, 0x45f: 0x3488, 0x460: 0x3181, 0x461: 0x3492, 0x462: 0x4796, 0x463: 0x4827,
+ 0x458: 0x315e, 0x459: 0x346f, 0x45a: 0x46f1, 0x45b: 0x4782, 0x45c: 0x3997, 0x45d: 0x3b26,
+ 0x45e: 0x3177, 0x45f: 0x3488, 0x460: 0x3181, 0x461: 0x3492, 0x462: 0x4700, 0x463: 0x4791,
0x464: 0x399e, 0x465: 0x3b2d, 0x466: 0x39a5, 0x467: 0x3b34, 0x468: 0x39ac, 0x469: 0x3b3b,
0x46a: 0x3190, 0x46b: 0x34a1, 0x46c: 0x319a, 0x46d: 0x34b0, 0x46e: 0x31ae, 0x46f: 0x34c4,
0x470: 0x31a9, 0x471: 0x34bf, 0x472: 0x31ea, 0x473: 0x3500, 0x474: 0x31f9, 0x475: 0x350f,
@@ -3098,16 +3106,16 @@ var nfcValues = [2944]uint16{
0x48c: 0x322b, 0x48d: 0x3546, 0x48e: 0x3249, 0x48f: 0x3564, 0x490: 0x3262, 0x491: 0x3582,
0x492: 0x3271, 0x493: 0x3591, 0x494: 0x3276, 0x495: 0x3596, 0x496: 0x337a, 0x497: 0x34a6,
0x498: 0x3537, 0x499: 0x3573, 0x49b: 0x35d1,
- 0x4a0: 0x4737, 0x4a1: 0x47c8, 0x4a2: 0x2f83, 0x4a3: 0x328f,
+ 0x4a0: 0x46a1, 0x4a1: 0x4732, 0x4a2: 0x2f83, 0x4a3: 0x328f,
0x4a4: 0x3878, 0x4a5: 0x3a07, 0x4a6: 0x3871, 0x4a7: 0x3a00, 0x4a8: 0x3886, 0x4a9: 0x3a15,
0x4aa: 0x387f, 0x4ab: 0x3a0e, 0x4ac: 0x38be, 0x4ad: 0x3a4d, 0x4ae: 0x3894, 0x4af: 0x3a23,
0x4b0: 0x388d, 0x4b1: 0x3a1c, 0x4b2: 0x38a2, 0x4b3: 0x3a31, 0x4b4: 0x389b, 0x4b5: 0x3a2a,
- 0x4b6: 0x38c5, 0x4b7: 0x3a54, 0x4b8: 0x474b, 0x4b9: 0x47dc, 0x4ba: 0x3000, 0x4bb: 0x330c,
+ 0x4b6: 0x38c5, 0x4b7: 0x3a54, 0x4b8: 0x46b5, 0x4b9: 0x4746, 0x4ba: 0x3000, 0x4bb: 0x330c,
0x4bc: 0x2fec, 0x4bd: 0x32f8, 0x4be: 0x38da, 0x4bf: 0x3a69,
// Block 0x13, offset 0x4c0
0x4c0: 0x38d3, 0x4c1: 0x3a62, 0x4c2: 0x38e8, 0x4c3: 0x3a77, 0x4c4: 0x38e1, 0x4c5: 0x3a70,
0x4c6: 0x38fd, 0x4c7: 0x3a8c, 0x4c8: 0x3091, 0x4c9: 0x339d, 0x4ca: 0x30a5, 0x4cb: 0x33b1,
- 0x4cc: 0x477d, 0x4cd: 0x480e, 0x4ce: 0x3136, 0x4cf: 0x3447, 0x4d0: 0x3920, 0x4d1: 0x3aaf,
+ 0x4cc: 0x46e7, 0x4cd: 0x4778, 0x4ce: 0x3136, 0x4cf: 0x3447, 0x4d0: 0x3920, 0x4d1: 0x3aaf,
0x4d2: 0x3919, 0x4d3: 0x3aa8, 0x4d4: 0x392e, 0x4d5: 0x3abd, 0x4d6: 0x3927, 0x4d7: 0x3ab6,
0x4d8: 0x3989, 0x4d9: 0x3b18, 0x4da: 0x396d, 0x4db: 0x3afc, 0x4dc: 0x3966, 0x4dd: 0x3af5,
0x4de: 0x397b, 0x4df: 0x3b0a, 0x4e0: 0x3974, 0x4e1: 0x3b03, 0x4e2: 0x3982, 0x4e3: 0x3b11,
@@ -3116,29 +3124,29 @@ var nfcValues = [2944]uint16{
0x4f0: 0x39f9, 0x4f1: 0x3b88, 0x4f2: 0x3230, 0x4f3: 0x354b, 0x4f4: 0x3258, 0x4f5: 0x3578,
0x4f6: 0x3253, 0x4f7: 0x356e, 0x4f8: 0x323f, 0x4f9: 0x355a,
// Block 0x14, offset 0x500
- 0x500: 0x489a, 0x501: 0x48a0, 0x502: 0x49b4, 0x503: 0x49cc, 0x504: 0x49bc, 0x505: 0x49d4,
- 0x506: 0x49c4, 0x507: 0x49dc, 0x508: 0x4840, 0x509: 0x4846, 0x50a: 0x4924, 0x50b: 0x493c,
- 0x50c: 0x492c, 0x50d: 0x4944, 0x50e: 0x4934, 0x50f: 0x494c, 0x510: 0x48ac, 0x511: 0x48b2,
+ 0x500: 0x4804, 0x501: 0x480a, 0x502: 0x491e, 0x503: 0x4936, 0x504: 0x4926, 0x505: 0x493e,
+ 0x506: 0x492e, 0x507: 0x4946, 0x508: 0x47aa, 0x509: 0x47b0, 0x50a: 0x488e, 0x50b: 0x48a6,
+ 0x50c: 0x4896, 0x50d: 0x48ae, 0x50e: 0x489e, 0x50f: 0x48b6, 0x510: 0x4816, 0x511: 0x481c,
0x512: 0x3db8, 0x513: 0x3dc8, 0x514: 0x3dc0, 0x515: 0x3dd0,
- 0x518: 0x484c, 0x519: 0x4852, 0x51a: 0x3ce8, 0x51b: 0x3cf8, 0x51c: 0x3cf0, 0x51d: 0x3d00,
- 0x520: 0x48c4, 0x521: 0x48ca, 0x522: 0x49e4, 0x523: 0x49fc,
- 0x524: 0x49ec, 0x525: 0x4a04, 0x526: 0x49f4, 0x527: 0x4a0c, 0x528: 0x4858, 0x529: 0x485e,
- 0x52a: 0x4954, 0x52b: 0x496c, 0x52c: 0x495c, 0x52d: 0x4974, 0x52e: 0x4964, 0x52f: 0x497c,
- 0x530: 0x48dc, 0x531: 0x48e2, 0x532: 0x3e18, 0x533: 0x3e30, 0x534: 0x3e20, 0x535: 0x3e38,
- 0x536: 0x3e28, 0x537: 0x3e40, 0x538: 0x4864, 0x539: 0x486a, 0x53a: 0x3d18, 0x53b: 0x3d30,
+ 0x518: 0x47b6, 0x519: 0x47bc, 0x51a: 0x3ce8, 0x51b: 0x3cf8, 0x51c: 0x3cf0, 0x51d: 0x3d00,
+ 0x520: 0x482e, 0x521: 0x4834, 0x522: 0x494e, 0x523: 0x4966,
+ 0x524: 0x4956, 0x525: 0x496e, 0x526: 0x495e, 0x527: 0x4976, 0x528: 0x47c2, 0x529: 0x47c8,
+ 0x52a: 0x48be, 0x52b: 0x48d6, 0x52c: 0x48c6, 0x52d: 0x48de, 0x52e: 0x48ce, 0x52f: 0x48e6,
+ 0x530: 0x4846, 0x531: 0x484c, 0x532: 0x3e18, 0x533: 0x3e30, 0x534: 0x3e20, 0x535: 0x3e38,
+ 0x536: 0x3e28, 0x537: 0x3e40, 0x538: 0x47ce, 0x539: 0x47d4, 0x53a: 0x3d18, 0x53b: 0x3d30,
0x53c: 0x3d20, 0x53d: 0x3d38, 0x53e: 0x3d28, 0x53f: 0x3d40,
// Block 0x15, offset 0x540
- 0x540: 0x48e8, 0x541: 0x48ee, 0x542: 0x3e48, 0x543: 0x3e58, 0x544: 0x3e50, 0x545: 0x3e60,
- 0x548: 0x4870, 0x549: 0x4876, 0x54a: 0x3d48, 0x54b: 0x3d58,
- 0x54c: 0x3d50, 0x54d: 0x3d60, 0x550: 0x48fa, 0x551: 0x4900,
+ 0x540: 0x4852, 0x541: 0x4858, 0x542: 0x3e48, 0x543: 0x3e58, 0x544: 0x3e50, 0x545: 0x3e60,
+ 0x548: 0x47da, 0x549: 0x47e0, 0x54a: 0x3d48, 0x54b: 0x3d58,
+ 0x54c: 0x3d50, 0x54d: 0x3d60, 0x550: 0x4864, 0x551: 0x486a,
0x552: 0x3e80, 0x553: 0x3e98, 0x554: 0x3e88, 0x555: 0x3ea0, 0x556: 0x3e90, 0x557: 0x3ea8,
- 0x559: 0x487c, 0x55b: 0x3d68, 0x55d: 0x3d70,
- 0x55f: 0x3d78, 0x560: 0x4912, 0x561: 0x4918, 0x562: 0x4a14, 0x563: 0x4a2c,
- 0x564: 0x4a1c, 0x565: 0x4a34, 0x566: 0x4a24, 0x567: 0x4a3c, 0x568: 0x4882, 0x569: 0x4888,
- 0x56a: 0x4984, 0x56b: 0x499c, 0x56c: 0x498c, 0x56d: 0x49a4, 0x56e: 0x4994, 0x56f: 0x49ac,
- 0x570: 0x488e, 0x571: 0x43b4, 0x572: 0x3691, 0x573: 0x43ba, 0x574: 0x48b8, 0x575: 0x43c0,
- 0x576: 0x36a3, 0x577: 0x43c6, 0x578: 0x36c1, 0x579: 0x43cc, 0x57a: 0x36d9, 0x57b: 0x43d2,
- 0x57c: 0x4906, 0x57d: 0x43d8,
+ 0x559: 0x47e6, 0x55b: 0x3d68, 0x55d: 0x3d70,
+ 0x55f: 0x3d78, 0x560: 0x487c, 0x561: 0x4882, 0x562: 0x497e, 0x563: 0x4996,
+ 0x564: 0x4986, 0x565: 0x499e, 0x566: 0x498e, 0x567: 0x49a6, 0x568: 0x47ec, 0x569: 0x47f2,
+ 0x56a: 0x48ee, 0x56b: 0x4906, 0x56c: 0x48f6, 0x56d: 0x490e, 0x56e: 0x48fe, 0x56f: 0x4916,
+ 0x570: 0x47f8, 0x571: 0x431e, 0x572: 0x3691, 0x573: 0x4324, 0x574: 0x4822, 0x575: 0x432a,
+ 0x576: 0x36a3, 0x577: 0x4330, 0x578: 0x36c1, 0x579: 0x4336, 0x57a: 0x36d9, 0x57b: 0x433c,
+ 0x57c: 0x4870, 0x57d: 0x4342,
// Block 0x16, offset 0x580
0x580: 0x3da0, 0x581: 0x3da8, 0x582: 0x4184, 0x583: 0x41a2, 0x584: 0x418e, 0x585: 0x41ac,
0x586: 0x4198, 0x587: 0x41b6, 0x588: 0x3cd8, 0x589: 0x3ce0, 0x58a: 0x40d0, 0x58b: 0x40ee,
@@ -3149,19 +3157,19 @@ var nfcValues = [2944]uint16{
0x5a4: 0x4206, 0x5a5: 0x4224, 0x5a6: 0x4210, 0x5a7: 0x422e, 0x5a8: 0x3d80, 0x5a9: 0x3d88,
0x5aa: 0x4148, 0x5ab: 0x4166, 0x5ac: 0x4152, 0x5ad: 0x4170, 0x5ae: 0x415c, 0x5af: 0x417a,
0x5b0: 0x3685, 0x5b1: 0x367f, 0x5b2: 0x3d90, 0x5b3: 0x368b, 0x5b4: 0x3d98,
- 0x5b6: 0x48a6, 0x5b7: 0x3db0, 0x5b8: 0x35f5, 0x5b9: 0x35ef, 0x5ba: 0x35e3, 0x5bb: 0x4384,
+ 0x5b6: 0x4810, 0x5b7: 0x3db0, 0x5b8: 0x35f5, 0x5b9: 0x35ef, 0x5ba: 0x35e3, 0x5bb: 0x42ee,
0x5bc: 0x35fb, 0x5bd: 0x8100, 0x5be: 0x01d3, 0x5bf: 0xa100,
// Block 0x17, offset 0x5c0
0x5c0: 0x8100, 0x5c1: 0x35a7, 0x5c2: 0x3dd8, 0x5c3: 0x369d, 0x5c4: 0x3de0,
- 0x5c6: 0x48d0, 0x5c7: 0x3df8, 0x5c8: 0x3601, 0x5c9: 0x438a, 0x5ca: 0x360d, 0x5cb: 0x4390,
+ 0x5c6: 0x483a, 0x5c7: 0x3df8, 0x5c8: 0x3601, 0x5c9: 0x42f4, 0x5ca: 0x360d, 0x5cb: 0x42fa,
0x5cc: 0x3619, 0x5cd: 0x3b8f, 0x5ce: 0x3b96, 0x5cf: 0x3b9d, 0x5d0: 0x36b5, 0x5d1: 0x36af,
- 0x5d2: 0x3e00, 0x5d3: 0x457a, 0x5d6: 0x36bb, 0x5d7: 0x3e10,
- 0x5d8: 0x3631, 0x5d9: 0x362b, 0x5da: 0x361f, 0x5db: 0x4396, 0x5dd: 0x3ba4,
- 0x5de: 0x3bab, 0x5df: 0x3bb2, 0x5e0: 0x36eb, 0x5e1: 0x36e5, 0x5e2: 0x3e68, 0x5e3: 0x4582,
+ 0x5d2: 0x3e00, 0x5d3: 0x44e4, 0x5d6: 0x36bb, 0x5d7: 0x3e10,
+ 0x5d8: 0x3631, 0x5d9: 0x362b, 0x5da: 0x361f, 0x5db: 0x4300, 0x5dd: 0x3ba4,
+ 0x5de: 0x3bab, 0x5df: 0x3bb2, 0x5e0: 0x36eb, 0x5e1: 0x36e5, 0x5e2: 0x3e68, 0x5e3: 0x44ec,
0x5e4: 0x36cd, 0x5e5: 0x36d3, 0x5e6: 0x36f1, 0x5e7: 0x3e78, 0x5e8: 0x3661, 0x5e9: 0x365b,
- 0x5ea: 0x364f, 0x5eb: 0x43a2, 0x5ec: 0x3649, 0x5ed: 0x359b, 0x5ee: 0x437e, 0x5ef: 0x0081,
+ 0x5ea: 0x364f, 0x5eb: 0x430c, 0x5ec: 0x3649, 0x5ed: 0x359b, 0x5ee: 0x42e8, 0x5ef: 0x0081,
0x5f2: 0x3eb0, 0x5f3: 0x36f7, 0x5f4: 0x3eb8,
- 0x5f6: 0x491e, 0x5f7: 0x3ed0, 0x5f8: 0x363d, 0x5f9: 0x439c, 0x5fa: 0x366d, 0x5fb: 0x43ae,
+ 0x5f6: 0x4888, 0x5f7: 0x3ed0, 0x5f8: 0x363d, 0x5f9: 0x4306, 0x5fa: 0x366d, 0x5fb: 0x4318,
0x5fc: 0x3679, 0x5fd: 0x4256, 0x5fe: 0xa100,
// Block 0x18, offset 0x600
0x601: 0x3c06, 0x603: 0xa000, 0x604: 0x3c0d, 0x605: 0xa000,
@@ -3519,8 +3527,8 @@ var nfcSparseValues = [688]valueRange{
{value: 0x8100, lo: 0xb8, hi: 0xb8},
// Block 0x1, offset 0x5
{value: 0x0091, lo: 0x03},
- {value: 0x4778, lo: 0xa0, hi: 0xa1},
- {value: 0x47aa, lo: 0xaf, hi: 0xb0},
+ {value: 0x46e2, lo: 0xa0, hi: 0xa1},
+ {value: 0x4714, lo: 0xaf, hi: 0xb0},
{value: 0xa000, lo: 0xb7, hi: 0xb7},
// Block 0x2, offset 0x9
{value: 0x0000, lo: 0x01},
@@ -3533,11 +3541,11 @@ var nfcSparseValues = [688]valueRange{
{value: 0xa000, lo: 0x81, hi: 0x81},
{value: 0xa000, lo: 0x85, hi: 0x85},
{value: 0xa000, lo: 0x89, hi: 0x89},
- {value: 0x48d6, lo: 0x8a, hi: 0x8a},
- {value: 0x48f4, lo: 0x8b, hi: 0x8b},
+ {value: 0x4840, lo: 0x8a, hi: 0x8a},
+ {value: 0x485e, lo: 0x8b, hi: 0x8b},
{value: 0x36c7, lo: 0x8c, hi: 0x8c},
{value: 0x36df, lo: 0x8d, hi: 0x8d},
- {value: 0x490c, lo: 0x8e, hi: 0x8e},
+ {value: 0x4876, lo: 0x8e, hi: 0x8e},
{value: 0xa000, lo: 0x92, hi: 0x92},
{value: 0x36fd, lo: 0x93, hi: 0x94},
// Block 0x5, offset 0x18
@@ -3665,7 +3673,7 @@ var nfcSparseValues = [688]valueRange{
{value: 0x812d, lo: 0x92, hi: 0x92},
{value: 0x8132, lo: 0x93, hi: 0x93},
{value: 0x8132, lo: 0x94, hi: 0x94},
- {value: 0x45b2, lo: 0x98, hi: 0x9f},
+ {value: 0x451c, lo: 0x98, hi: 0x9f},
// Block 0x12, offset 0x89
{value: 0x0000, lo: 0x02},
{value: 0x8102, lo: 0xbc, hi: 0xbc},
@@ -3676,18 +3684,18 @@ var nfcSparseValues = [688]valueRange{
{value: 0x2c9e, lo: 0x8b, hi: 0x8c},
{value: 0x8104, lo: 0x8d, hi: 0x8d},
{value: 0x9900, lo: 0x97, hi: 0x97},
- {value: 0x45f2, lo: 0x9c, hi: 0x9d},
- {value: 0x4602, lo: 0x9f, hi: 0x9f},
+ {value: 0x455c, lo: 0x9c, hi: 0x9d},
+ {value: 0x456c, lo: 0x9f, hi: 0x9f},
// Block 0x14, offset 0x93
{value: 0x0000, lo: 0x03},
- {value: 0x462a, lo: 0xb3, hi: 0xb3},
- {value: 0x4632, lo: 0xb6, hi: 0xb6},
+ {value: 0x4594, lo: 0xb3, hi: 0xb3},
+ {value: 0x459c, lo: 0xb6, hi: 0xb6},
{value: 0x8102, lo: 0xbc, hi: 0xbc},
// Block 0x15, offset 0x97
{value: 0x0008, lo: 0x03},
{value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x460a, lo: 0x99, hi: 0x9b},
- {value: 0x4622, lo: 0x9e, hi: 0x9e},
+ {value: 0x4574, lo: 0x99, hi: 0x9b},
+ {value: 0x458c, lo: 0x9e, hi: 0x9e},
// Block 0x16, offset 0x9b
{value: 0x0000, lo: 0x01},
{value: 0x8102, lo: 0xbc, hi: 0xbc},
@@ -3702,8 +3710,8 @@ var nfcSparseValues = [688]valueRange{
{value: 0x2cbe, lo: 0x8c, hi: 0x8c},
{value: 0x8104, lo: 0x8d, hi: 0x8d},
{value: 0x9900, lo: 0x96, hi: 0x97},
- {value: 0x463a, lo: 0x9c, hi: 0x9c},
- {value: 0x4642, lo: 0x9d, hi: 0x9d},
+ {value: 0x45a4, lo: 0x9c, hi: 0x9c},
+ {value: 0x45ac, lo: 0x9d, hi: 0x9d},
// Block 0x19, offset 0xa8
{value: 0x0000, lo: 0x03},
{value: 0xa000, lo: 0x92, hi: 0x92},
@@ -3787,18 +3795,18 @@ var nfcSparseValues = [688]valueRange{
{value: 0x263d, lo: 0xa9, hi: 0xa9},
{value: 0x8126, lo: 0xb1, hi: 0xb1},
{value: 0x8127, lo: 0xb2, hi: 0xb2},
- {value: 0x4a66, lo: 0xb3, hi: 0xb3},
+ {value: 0x4a84, lo: 0xb3, hi: 0xb3},
{value: 0x8128, lo: 0xb4, hi: 0xb4},
- {value: 0x4a6f, lo: 0xb5, hi: 0xb5},
- {value: 0x464a, lo: 0xb6, hi: 0xb6},
+ {value: 0x4a8d, lo: 0xb5, hi: 0xb5},
+ {value: 0x45b4, lo: 0xb6, hi: 0xb6},
{value: 0x8200, lo: 0xb7, hi: 0xb7},
- {value: 0x4652, lo: 0xb8, hi: 0xb8},
+ {value: 0x45bc, lo: 0xb8, hi: 0xb8},
{value: 0x8200, lo: 0xb9, hi: 0xb9},
{value: 0x8127, lo: 0xba, hi: 0xbd},
// Block 0x27, offset 0xf5
{value: 0x0000, lo: 0x0b},
{value: 0x8127, lo: 0x80, hi: 0x80},
- {value: 0x4a78, lo: 0x81, hi: 0x81},
+ {value: 0x4a96, lo: 0x81, hi: 0x81},
{value: 0x8132, lo: 0x82, hi: 0x83},
{value: 0x8104, lo: 0x84, hi: 0x84},
{value: 0x8132, lo: 0x86, hi: 0x87},
@@ -3975,7 +3983,7 @@ var nfcSparseValues = [688]valueRange{
{value: 0x048b, lo: 0xa9, hi: 0xaa},
// Block 0x45, offset 0x189
{value: 0x0000, lo: 0x01},
- {value: 0x4573, lo: 0x9c, hi: 0x9c},
+ {value: 0x44dd, lo: 0x9c, hi: 0x9c},
// Block 0x46, offset 0x18b
{value: 0x0000, lo: 0x01},
{value: 0x8132, lo: 0xaf, hi: 0xb1},
@@ -3994,12 +4002,12 @@ var nfcSparseValues = [688]valueRange{
{value: 0x812f, lo: 0xae, hi: 0xaf},
// Block 0x4a, offset 0x197
{value: 0x0000, lo: 0x03},
- {value: 0x4a81, lo: 0xb3, hi: 0xb3},
- {value: 0x4a81, lo: 0xb5, hi: 0xb6},
- {value: 0x4a81, lo: 0xba, hi: 0xbf},
+ {value: 0x4a9f, lo: 0xb3, hi: 0xb3},
+ {value: 0x4a9f, lo: 0xb5, hi: 0xb6},
+ {value: 0x4a9f, lo: 0xba, hi: 0xbf},
// Block 0x4b, offset 0x19b
{value: 0x0000, lo: 0x01},
- {value: 0x4a81, lo: 0x8f, hi: 0xa3},
+ {value: 0x4a9f, lo: 0x8f, hi: 0xa3},
// Block 0x4c, offset 0x19d
{value: 0x0000, lo: 0x01},
{value: 0x8100, lo: 0xae, hi: 0xbe},
@@ -4119,29 +4127,29 @@ var nfcSparseValues = [688]valueRange{
{value: 0xc600, lo: 0x89, hi: 0xa3},
// Block 0x63, offset 0x1fb
{value: 0x0006, lo: 0x0d},
- {value: 0x4426, lo: 0x9d, hi: 0x9d},
+ {value: 0x4390, lo: 0x9d, hi: 0x9d},
{value: 0x8115, lo: 0x9e, hi: 0x9e},
- {value: 0x4498, lo: 0x9f, hi: 0x9f},
- {value: 0x4486, lo: 0xaa, hi: 0xab},
- {value: 0x458a, lo: 0xac, hi: 0xac},
- {value: 0x4592, lo: 0xad, hi: 0xad},
- {value: 0x43de, lo: 0xae, hi: 0xb1},
- {value: 0x43fc, lo: 0xb2, hi: 0xb4},
- {value: 0x4414, lo: 0xb5, hi: 0xb6},
- {value: 0x4420, lo: 0xb8, hi: 0xb8},
- {value: 0x442c, lo: 0xb9, hi: 0xbb},
- {value: 0x4444, lo: 0xbc, hi: 0xbc},
- {value: 0x444a, lo: 0xbe, hi: 0xbe},
+ {value: 0x4402, lo: 0x9f, hi: 0x9f},
+ {value: 0x43f0, lo: 0xaa, hi: 0xab},
+ {value: 0x44f4, lo: 0xac, hi: 0xac},
+ {value: 0x44fc, lo: 0xad, hi: 0xad},
+ {value: 0x4348, lo: 0xae, hi: 0xb1},
+ {value: 0x4366, lo: 0xb2, hi: 0xb4},
+ {value: 0x437e, lo: 0xb5, hi: 0xb6},
+ {value: 0x438a, lo: 0xb8, hi: 0xb8},
+ {value: 0x4396, lo: 0xb9, hi: 0xbb},
+ {value: 0x43ae, lo: 0xbc, hi: 0xbc},
+ {value: 0x43b4, lo: 0xbe, hi: 0xbe},
// Block 0x64, offset 0x209
{value: 0x0006, lo: 0x08},
- {value: 0x4450, lo: 0x80, hi: 0x81},
- {value: 0x445c, lo: 0x83, hi: 0x84},
- {value: 0x446e, lo: 0x86, hi: 0x89},
- {value: 0x4492, lo: 0x8a, hi: 0x8a},
- {value: 0x440e, lo: 0x8b, hi: 0x8b},
- {value: 0x43f6, lo: 0x8c, hi: 0x8c},
- {value: 0x443e, lo: 0x8d, hi: 0x8d},
- {value: 0x4468, lo: 0x8e, hi: 0x8e},
+ {value: 0x43ba, lo: 0x80, hi: 0x81},
+ {value: 0x43c6, lo: 0x83, hi: 0x84},
+ {value: 0x43d8, lo: 0x86, hi: 0x89},
+ {value: 0x43fc, lo: 0x8a, hi: 0x8a},
+ {value: 0x4378, lo: 0x8b, hi: 0x8b},
+ {value: 0x4360, lo: 0x8c, hi: 0x8c},
+ {value: 0x43a8, lo: 0x8d, hi: 0x8d},
+ {value: 0x43d2, lo: 0x8e, hi: 0x8e},
// Block 0x65, offset 0x212
{value: 0x0000, lo: 0x02},
{value: 0x8100, lo: 0xa4, hi: 0xa5},
@@ -4179,16 +4187,16 @@ var nfcSparseValues = [688]valueRange{
{value: 0x8100, lo: 0xb5, hi: 0xba},
// Block 0x6e, offset 0x22c
{value: 0x0000, lo: 0x04},
- {value: 0x4a81, lo: 0x9e, hi: 0x9f},
- {value: 0x4a81, lo: 0xa3, hi: 0xa3},
- {value: 0x4a81, lo: 0xa5, hi: 0xa6},
- {value: 0x4a81, lo: 0xaa, hi: 0xaf},
+ {value: 0x4a9f, lo: 0x9e, hi: 0x9f},
+ {value: 0x4a9f, lo: 0xa3, hi: 0xa3},
+ {value: 0x4a9f, lo: 0xa5, hi: 0xa6},
+ {value: 0x4a9f, lo: 0xaa, hi: 0xaf},
// Block 0x6f, offset 0x231
{value: 0x0000, lo: 0x05},
- {value: 0x4a81, lo: 0x82, hi: 0x87},
- {value: 0x4a81, lo: 0x8a, hi: 0x8f},
- {value: 0x4a81, lo: 0x92, hi: 0x97},
- {value: 0x4a81, lo: 0x9a, hi: 0x9c},
+ {value: 0x4a9f, lo: 0x82, hi: 0x87},
+ {value: 0x4a9f, lo: 0x8a, hi: 0x8f},
+ {value: 0x4a9f, lo: 0x92, hi: 0x97},
+ {value: 0x4a9f, lo: 0x9a, hi: 0x9c},
{value: 0x8100, lo: 0xa3, hi: 0xa3},
// Block 0x70, offset 0x237
{value: 0x0000, lo: 0x01},
@@ -4295,13 +4303,13 @@ var nfcSparseValues = [688]valueRange{
{value: 0x8101, lo: 0x9e, hi: 0x9e},
// Block 0x86, offset 0x288
{value: 0x0000, lo: 0x0c},
- {value: 0x4662, lo: 0x9e, hi: 0x9e},
- {value: 0x466c, lo: 0x9f, hi: 0x9f},
- {value: 0x46a0, lo: 0xa0, hi: 0xa0},
- {value: 0x46ae, lo: 0xa1, hi: 0xa1},
- {value: 0x46bc, lo: 0xa2, hi: 0xa2},
- {value: 0x46ca, lo: 0xa3, hi: 0xa3},
- {value: 0x46d8, lo: 0xa4, hi: 0xa4},
+ {value: 0x45cc, lo: 0x9e, hi: 0x9e},
+ {value: 0x45d6, lo: 0x9f, hi: 0x9f},
+ {value: 0x460a, lo: 0xa0, hi: 0xa0},
+ {value: 0x4618, lo: 0xa1, hi: 0xa1},
+ {value: 0x4626, lo: 0xa2, hi: 0xa2},
+ {value: 0x4634, lo: 0xa3, hi: 0xa3},
+ {value: 0x4642, lo: 0xa4, hi: 0xa4},
{value: 0x812b, lo: 0xa5, hi: 0xa6},
{value: 0x8101, lo: 0xa7, hi: 0xa9},
{value: 0x8130, lo: 0xad, hi: 0xad},
@@ -4313,14 +4321,14 @@ var nfcSparseValues = [688]valueRange{
{value: 0x8132, lo: 0x85, hi: 0x89},
{value: 0x812d, lo: 0x8a, hi: 0x8b},
{value: 0x8132, lo: 0xaa, hi: 0xad},
- {value: 0x4676, lo: 0xbb, hi: 0xbb},
- {value: 0x4680, lo: 0xbc, hi: 0xbc},
- {value: 0x46e6, lo: 0xbd, hi: 0xbd},
- {value: 0x4702, lo: 0xbe, hi: 0xbe},
- {value: 0x46f4, lo: 0xbf, hi: 0xbf},
+ {value: 0x45e0, lo: 0xbb, hi: 0xbb},
+ {value: 0x45ea, lo: 0xbc, hi: 0xbc},
+ {value: 0x4650, lo: 0xbd, hi: 0xbd},
+ {value: 0x466c, lo: 0xbe, hi: 0xbe},
+ {value: 0x465e, lo: 0xbf, hi: 0xbf},
// Block 0x88, offset 0x29f
{value: 0x0000, lo: 0x01},
- {value: 0x4710, lo: 0x80, hi: 0x80},
+ {value: 0x467a, lo: 0x80, hi: 0x80},
// Block 0x89, offset 0x2a1
{value: 0x0000, lo: 0x01},
{value: 0x8132, lo: 0x82, hi: 0x84},
@@ -4513,7 +4521,7 @@ func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 {
return 0
}
-// nfkcTrie. Total size: 16994 bytes (16.60 KiB). Checksum: 146925fc21092b17.
+// nfkcTrie. Total size: 16994 bytes (16.60 KiB). Checksum: c3ed54ee046f3c46.
type nfkcTrie struct{}
func newNfkcTrie(i int) *nfkcTrie {
@@ -4549,22 +4557,22 @@ var nfkcValues = [5888]uint16{
0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
// Block 0x2, offset 0x80
// Block 0x3, offset 0xc0
- 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x471e, 0xc3: 0x2f79, 0xc4: 0x472d, 0xc5: 0x4732,
- 0xc6: 0xa000, 0xc7: 0x473c, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x4741, 0xcb: 0x2ffb,
- 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x4755, 0xd1: 0x3104,
- 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x475f, 0xd5: 0x4764, 0xd6: 0x4773,
- 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x47a5, 0xdd: 0x3235,
- 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x47af, 0xe3: 0x3285,
- 0xe4: 0x47be, 0xe5: 0x47c3, 0xe6: 0xa000, 0xe7: 0x47cd, 0xe8: 0x32ee, 0xe9: 0x32f3,
- 0xea: 0x47d2, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x47e6,
- 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x47f0, 0xf5: 0x47f5,
- 0xf6: 0x4804, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
- 0xfc: 0x4836, 0xfd: 0x3550, 0xff: 0x3569,
+ 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,
+ 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,
+ 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,
+ 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,
+ 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,
+ 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,
+ 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,
+ 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,
+ 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,
+ 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
+ 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,
// Block 0x4, offset 0x100
- 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x4723, 0x103: 0x47b4, 0x104: 0x2f9c, 0x105: 0x32a8,
+ 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,
0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,
0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,
- 0x112: 0x4746, 0x113: 0x47d7, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
+ 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,
0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,
0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,
@@ -4575,12 +4583,12 @@ var nfkcValues = [5888]uint16{
// Block 0x5, offset 0x140
0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,
0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c,
- 0x14c: 0x4769, 0x14d: 0x47fa, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
+ 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,
- 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x478c, 0x15b: 0x481d, 0x15c: 0x317c, 0x15d: 0x348d,
- 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x4791, 0x161: 0x4822, 0x162: 0x31a4, 0x163: 0x34ba,
- 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x479b, 0x169: 0x482c,
- 0x16a: 0x47a0, 0x16b: 0x4831, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
+ 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,
+ 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,
+ 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,
+ 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,
0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,
0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7,
@@ -4592,7 +4600,7 @@ var nfkcValues = [5888]uint16{
0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,
0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,
0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,
- 0x1aa: 0x4782, 0x1ab: 0x4813, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
+ 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334,
0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,
0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,
@@ -4603,8 +4611,8 @@ var nfkcValues = [5888]uint16{
0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,
0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,
0x1de: 0x305a, 0x1df: 0x3366,
- 0x1e6: 0x4728, 0x1e7: 0x47b9, 0x1e8: 0x4750, 0x1e9: 0x47e1,
- 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x476e, 0x1ef: 0x47ff,
+ 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,
+ 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,
0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,
// Block 0x8, offset 0x200
0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
@@ -4619,7 +4627,7 @@ var nfkcValues = [5888]uint16{
0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
// Block 0x9, offset 0x240
- 0x240: 0x4a44, 0x241: 0x4a49, 0x242: 0x9932, 0x243: 0x4a4e, 0x244: 0x4a53, 0x245: 0x9936,
+ 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,
0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
@@ -4631,22 +4639,22 @@ var nfkcValues = [5888]uint16{
0x27a: 0x42a5,
0x27e: 0x0037,
// Block 0xa, offset 0x280
- 0x284: 0x425a, 0x285: 0x4511,
+ 0x284: 0x425a, 0x285: 0x447b,
0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,
0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,
0x295: 0xa000, 0x297: 0xa000,
0x299: 0xa000,
0x29f: 0xa000, 0x2a1: 0xa000,
0x2a5: 0xa000, 0x2a9: 0xa000,
- 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x4894, 0x2ad: 0x3697, 0x2ae: 0x48be, 0x2af: 0x36a9,
+ 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,
0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,
0x2b7: 0xa000, 0x2b9: 0xa000,
0x2bf: 0xa000,
// Block 0xb, offset 0x2c0
0x2c1: 0xa000, 0x2c5: 0xa000,
- 0x2c9: 0xa000, 0x2ca: 0x48d6, 0x2cb: 0x48f4,
- 0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x490c, 0x2d0: 0x01be, 0x2d1: 0x01d0,
- 0x2d2: 0x01ac, 0x2d3: 0x43a2, 0x2d4: 0x43a8, 0x2d5: 0x01fa, 0x2d6: 0x01e8,
+ 0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e,
+ 0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0,
+ 0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8,
0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7,
0x2f9: 0x01a6,
// Block 0xc, offset 0x300
@@ -4726,15 +4734,15 @@ var nfkcValues = [5888]uint16{
0x4e4: 0x305f, 0x4e5: 0x336b, 0x4e6: 0x3055, 0x4e7: 0x3361, 0x4e8: 0x3064, 0x4e9: 0x3370,
0x4ea: 0x3069, 0x4eb: 0x3375, 0x4ec: 0x30af, 0x4ed: 0x33bb, 0x4ee: 0x390b, 0x4ef: 0x3a9a,
0x4f0: 0x30b9, 0x4f1: 0x33ca, 0x4f2: 0x30c3, 0x4f3: 0x33d4, 0x4f4: 0x30cd, 0x4f5: 0x33de,
- 0x4f6: 0x475a, 0x4f7: 0x47eb, 0x4f8: 0x3912, 0x4f9: 0x3aa1, 0x4fa: 0x30e6, 0x4fb: 0x33f7,
+ 0x4f6: 0x46c4, 0x4f7: 0x4755, 0x4f8: 0x3912, 0x4f9: 0x3aa1, 0x4fa: 0x30e6, 0x4fb: 0x33f7,
0x4fc: 0x30e1, 0x4fd: 0x33f2, 0x4fe: 0x30eb, 0x4ff: 0x33fc,
// Block 0x14, offset 0x500
0x500: 0x30f0, 0x501: 0x3401, 0x502: 0x30f5, 0x503: 0x3406, 0x504: 0x3109, 0x505: 0x341a,
0x506: 0x3113, 0x507: 0x3424, 0x508: 0x3122, 0x509: 0x3433, 0x50a: 0x311d, 0x50b: 0x342e,
0x50c: 0x3935, 0x50d: 0x3ac4, 0x50e: 0x3943, 0x50f: 0x3ad2, 0x510: 0x394a, 0x511: 0x3ad9,
0x512: 0x3951, 0x513: 0x3ae0, 0x514: 0x314f, 0x515: 0x3460, 0x516: 0x3154, 0x517: 0x3465,
- 0x518: 0x315e, 0x519: 0x346f, 0x51a: 0x4787, 0x51b: 0x4818, 0x51c: 0x3997, 0x51d: 0x3b26,
- 0x51e: 0x3177, 0x51f: 0x3488, 0x520: 0x3181, 0x521: 0x3492, 0x522: 0x4796, 0x523: 0x4827,
+ 0x518: 0x315e, 0x519: 0x346f, 0x51a: 0x46f1, 0x51b: 0x4782, 0x51c: 0x3997, 0x51d: 0x3b26,
+ 0x51e: 0x3177, 0x51f: 0x3488, 0x520: 0x3181, 0x521: 0x3492, 0x522: 0x4700, 0x523: 0x4791,
0x524: 0x399e, 0x525: 0x3b2d, 0x526: 0x39a5, 0x527: 0x3b34, 0x528: 0x39ac, 0x529: 0x3b3b,
0x52a: 0x3190, 0x52b: 0x34a1, 0x52c: 0x319a, 0x52d: 0x34b0, 0x52e: 0x31ae, 0x52f: 0x34c4,
0x530: 0x31a9, 0x531: 0x34bf, 0x532: 0x31ea, 0x533: 0x3500, 0x534: 0x31f9, 0x535: 0x350f,
@@ -4746,16 +4754,16 @@ var nfkcValues = [5888]uint16{
0x54c: 0x322b, 0x54d: 0x3546, 0x54e: 0x3249, 0x54f: 0x3564, 0x550: 0x3262, 0x551: 0x3582,
0x552: 0x3271, 0x553: 0x3591, 0x554: 0x3276, 0x555: 0x3596, 0x556: 0x337a, 0x557: 0x34a6,
0x558: 0x3537, 0x559: 0x3573, 0x55a: 0x1be0, 0x55b: 0x42d7,
- 0x560: 0x4737, 0x561: 0x47c8, 0x562: 0x2f83, 0x563: 0x328f,
+ 0x560: 0x46a1, 0x561: 0x4732, 0x562: 0x2f83, 0x563: 0x328f,
0x564: 0x3878, 0x565: 0x3a07, 0x566: 0x3871, 0x567: 0x3a00, 0x568: 0x3886, 0x569: 0x3a15,
0x56a: 0x387f, 0x56b: 0x3a0e, 0x56c: 0x38be, 0x56d: 0x3a4d, 0x56e: 0x3894, 0x56f: 0x3a23,
0x570: 0x388d, 0x571: 0x3a1c, 0x572: 0x38a2, 0x573: 0x3a31, 0x574: 0x389b, 0x575: 0x3a2a,
- 0x576: 0x38c5, 0x577: 0x3a54, 0x578: 0x474b, 0x579: 0x47dc, 0x57a: 0x3000, 0x57b: 0x330c,
+ 0x576: 0x38c5, 0x577: 0x3a54, 0x578: 0x46b5, 0x579: 0x4746, 0x57a: 0x3000, 0x57b: 0x330c,
0x57c: 0x2fec, 0x57d: 0x32f8, 0x57e: 0x38da, 0x57f: 0x3a69,
// Block 0x16, offset 0x580
0x580: 0x38d3, 0x581: 0x3a62, 0x582: 0x38e8, 0x583: 0x3a77, 0x584: 0x38e1, 0x585: 0x3a70,
0x586: 0x38fd, 0x587: 0x3a8c, 0x588: 0x3091, 0x589: 0x339d, 0x58a: 0x30a5, 0x58b: 0x33b1,
- 0x58c: 0x477d, 0x58d: 0x480e, 0x58e: 0x3136, 0x58f: 0x3447, 0x590: 0x3920, 0x591: 0x3aaf,
+ 0x58c: 0x46e7, 0x58d: 0x4778, 0x58e: 0x3136, 0x58f: 0x3447, 0x590: 0x3920, 0x591: 0x3aaf,
0x592: 0x3919, 0x593: 0x3aa8, 0x594: 0x392e, 0x595: 0x3abd, 0x596: 0x3927, 0x597: 0x3ab6,
0x598: 0x3989, 0x599: 0x3b18, 0x59a: 0x396d, 0x59b: 0x3afc, 0x59c: 0x3966, 0x59d: 0x3af5,
0x59e: 0x397b, 0x59f: 0x3b0a, 0x5a0: 0x3974, 0x5a1: 0x3b03, 0x5a2: 0x3982, 0x5a3: 0x3b11,
@@ -4764,29 +4772,29 @@ var nfkcValues = [5888]uint16{
0x5b0: 0x39f9, 0x5b1: 0x3b88, 0x5b2: 0x3230, 0x5b3: 0x354b, 0x5b4: 0x3258, 0x5b5: 0x3578,
0x5b6: 0x3253, 0x5b7: 0x356e, 0x5b8: 0x323f, 0x5b9: 0x355a,
// Block 0x17, offset 0x5c0
- 0x5c0: 0x489a, 0x5c1: 0x48a0, 0x5c2: 0x49b4, 0x5c3: 0x49cc, 0x5c4: 0x49bc, 0x5c5: 0x49d4,
- 0x5c6: 0x49c4, 0x5c7: 0x49dc, 0x5c8: 0x4840, 0x5c9: 0x4846, 0x5ca: 0x4924, 0x5cb: 0x493c,
- 0x5cc: 0x492c, 0x5cd: 0x4944, 0x5ce: 0x4934, 0x5cf: 0x494c, 0x5d0: 0x48ac, 0x5d1: 0x48b2,
+ 0x5c0: 0x4804, 0x5c1: 0x480a, 0x5c2: 0x491e, 0x5c3: 0x4936, 0x5c4: 0x4926, 0x5c5: 0x493e,
+ 0x5c6: 0x492e, 0x5c7: 0x4946, 0x5c8: 0x47aa, 0x5c9: 0x47b0, 0x5ca: 0x488e, 0x5cb: 0x48a6,
+ 0x5cc: 0x4896, 0x5cd: 0x48ae, 0x5ce: 0x489e, 0x5cf: 0x48b6, 0x5d0: 0x4816, 0x5d1: 0x481c,
0x5d2: 0x3db8, 0x5d3: 0x3dc8, 0x5d4: 0x3dc0, 0x5d5: 0x3dd0,
- 0x5d8: 0x484c, 0x5d9: 0x4852, 0x5da: 0x3ce8, 0x5db: 0x3cf8, 0x5dc: 0x3cf0, 0x5dd: 0x3d00,
- 0x5e0: 0x48c4, 0x5e1: 0x48ca, 0x5e2: 0x49e4, 0x5e3: 0x49fc,
- 0x5e4: 0x49ec, 0x5e5: 0x4a04, 0x5e6: 0x49f4, 0x5e7: 0x4a0c, 0x5e8: 0x4858, 0x5e9: 0x485e,
- 0x5ea: 0x4954, 0x5eb: 0x496c, 0x5ec: 0x495c, 0x5ed: 0x4974, 0x5ee: 0x4964, 0x5ef: 0x497c,
- 0x5f0: 0x48dc, 0x5f1: 0x48e2, 0x5f2: 0x3e18, 0x5f3: 0x3e30, 0x5f4: 0x3e20, 0x5f5: 0x3e38,
- 0x5f6: 0x3e28, 0x5f7: 0x3e40, 0x5f8: 0x4864, 0x5f9: 0x486a, 0x5fa: 0x3d18, 0x5fb: 0x3d30,
+ 0x5d8: 0x47b6, 0x5d9: 0x47bc, 0x5da: 0x3ce8, 0x5db: 0x3cf8, 0x5dc: 0x3cf0, 0x5dd: 0x3d00,
+ 0x5e0: 0x482e, 0x5e1: 0x4834, 0x5e2: 0x494e, 0x5e3: 0x4966,
+ 0x5e4: 0x4956, 0x5e5: 0x496e, 0x5e6: 0x495e, 0x5e7: 0x4976, 0x5e8: 0x47c2, 0x5e9: 0x47c8,
+ 0x5ea: 0x48be, 0x5eb: 0x48d6, 0x5ec: 0x48c6, 0x5ed: 0x48de, 0x5ee: 0x48ce, 0x5ef: 0x48e6,
+ 0x5f0: 0x4846, 0x5f1: 0x484c, 0x5f2: 0x3e18, 0x5f3: 0x3e30, 0x5f4: 0x3e20, 0x5f5: 0x3e38,
+ 0x5f6: 0x3e28, 0x5f7: 0x3e40, 0x5f8: 0x47ce, 0x5f9: 0x47d4, 0x5fa: 0x3d18, 0x5fb: 0x3d30,
0x5fc: 0x3d20, 0x5fd: 0x3d38, 0x5fe: 0x3d28, 0x5ff: 0x3d40,
// Block 0x18, offset 0x600
- 0x600: 0x48e8, 0x601: 0x48ee, 0x602: 0x3e48, 0x603: 0x3e58, 0x604: 0x3e50, 0x605: 0x3e60,
- 0x608: 0x4870, 0x609: 0x4876, 0x60a: 0x3d48, 0x60b: 0x3d58,
- 0x60c: 0x3d50, 0x60d: 0x3d60, 0x610: 0x48fa, 0x611: 0x4900,
+ 0x600: 0x4852, 0x601: 0x4858, 0x602: 0x3e48, 0x603: 0x3e58, 0x604: 0x3e50, 0x605: 0x3e60,
+ 0x608: 0x47da, 0x609: 0x47e0, 0x60a: 0x3d48, 0x60b: 0x3d58,
+ 0x60c: 0x3d50, 0x60d: 0x3d60, 0x610: 0x4864, 0x611: 0x486a,
0x612: 0x3e80, 0x613: 0x3e98, 0x614: 0x3e88, 0x615: 0x3ea0, 0x616: 0x3e90, 0x617: 0x3ea8,
- 0x619: 0x487c, 0x61b: 0x3d68, 0x61d: 0x3d70,
- 0x61f: 0x3d78, 0x620: 0x4912, 0x621: 0x4918, 0x622: 0x4a14, 0x623: 0x4a2c,
- 0x624: 0x4a1c, 0x625: 0x4a34, 0x626: 0x4a24, 0x627: 0x4a3c, 0x628: 0x4882, 0x629: 0x4888,
- 0x62a: 0x4984, 0x62b: 0x499c, 0x62c: 0x498c, 0x62d: 0x49a4, 0x62e: 0x4994, 0x62f: 0x49ac,
- 0x630: 0x488e, 0x631: 0x43b4, 0x632: 0x3691, 0x633: 0x43ba, 0x634: 0x48b8, 0x635: 0x43c0,
- 0x636: 0x36a3, 0x637: 0x43c6, 0x638: 0x36c1, 0x639: 0x43cc, 0x63a: 0x36d9, 0x63b: 0x43d2,
- 0x63c: 0x4906, 0x63d: 0x43d8,
+ 0x619: 0x47e6, 0x61b: 0x3d68, 0x61d: 0x3d70,
+ 0x61f: 0x3d78, 0x620: 0x487c, 0x621: 0x4882, 0x622: 0x497e, 0x623: 0x4996,
+ 0x624: 0x4986, 0x625: 0x499e, 0x626: 0x498e, 0x627: 0x49a6, 0x628: 0x47ec, 0x629: 0x47f2,
+ 0x62a: 0x48ee, 0x62b: 0x4906, 0x62c: 0x48f6, 0x62d: 0x490e, 0x62e: 0x48fe, 0x62f: 0x4916,
+ 0x630: 0x47f8, 0x631: 0x431e, 0x632: 0x3691, 0x633: 0x4324, 0x634: 0x4822, 0x635: 0x432a,
+ 0x636: 0x36a3, 0x637: 0x4330, 0x638: 0x36c1, 0x639: 0x4336, 0x63a: 0x36d9, 0x63b: 0x433c,
+ 0x63c: 0x4870, 0x63d: 0x4342,
// Block 0x19, offset 0x640
0x640: 0x3da0, 0x641: 0x3da8, 0x642: 0x4184, 0x643: 0x41a2, 0x644: 0x418e, 0x645: 0x41ac,
0x646: 0x4198, 0x647: 0x41b6, 0x648: 0x3cd8, 0x649: 0x3ce0, 0x64a: 0x40d0, 0x64b: 0x40ee,
@@ -4797,19 +4805,19 @@ var nfkcValues = [5888]uint16{
0x664: 0x4206, 0x665: 0x4224, 0x666: 0x4210, 0x667: 0x422e, 0x668: 0x3d80, 0x669: 0x3d88,
0x66a: 0x4148, 0x66b: 0x4166, 0x66c: 0x4152, 0x66d: 0x4170, 0x66e: 0x415c, 0x66f: 0x417a,
0x670: 0x3685, 0x671: 0x367f, 0x672: 0x3d90, 0x673: 0x368b, 0x674: 0x3d98,
- 0x676: 0x48a6, 0x677: 0x3db0, 0x678: 0x35f5, 0x679: 0x35ef, 0x67a: 0x35e3, 0x67b: 0x4384,
+ 0x676: 0x4810, 0x677: 0x3db0, 0x678: 0x35f5, 0x679: 0x35ef, 0x67a: 0x35e3, 0x67b: 0x42ee,
0x67c: 0x35fb, 0x67d: 0x4287, 0x67e: 0x01d3, 0x67f: 0x4287,
// Block 0x1a, offset 0x680
- 0x680: 0x42a0, 0x681: 0x4518, 0x682: 0x3dd8, 0x683: 0x369d, 0x684: 0x3de0,
- 0x686: 0x48d0, 0x687: 0x3df8, 0x688: 0x3601, 0x689: 0x438a, 0x68a: 0x360d, 0x68b: 0x4390,
- 0x68c: 0x3619, 0x68d: 0x451f, 0x68e: 0x4526, 0x68f: 0x452d, 0x690: 0x36b5, 0x691: 0x36af,
- 0x692: 0x3e00, 0x693: 0x457a, 0x696: 0x36bb, 0x697: 0x3e10,
- 0x698: 0x3631, 0x699: 0x362b, 0x69a: 0x361f, 0x69b: 0x4396, 0x69d: 0x4534,
- 0x69e: 0x453b, 0x69f: 0x4542, 0x6a0: 0x36eb, 0x6a1: 0x36e5, 0x6a2: 0x3e68, 0x6a3: 0x4582,
+ 0x680: 0x42a0, 0x681: 0x4482, 0x682: 0x3dd8, 0x683: 0x369d, 0x684: 0x3de0,
+ 0x686: 0x483a, 0x687: 0x3df8, 0x688: 0x3601, 0x689: 0x42f4, 0x68a: 0x360d, 0x68b: 0x42fa,
+ 0x68c: 0x3619, 0x68d: 0x4489, 0x68e: 0x4490, 0x68f: 0x4497, 0x690: 0x36b5, 0x691: 0x36af,
+ 0x692: 0x3e00, 0x693: 0x44e4, 0x696: 0x36bb, 0x697: 0x3e10,
+ 0x698: 0x3631, 0x699: 0x362b, 0x69a: 0x361f, 0x69b: 0x4300, 0x69d: 0x449e,
+ 0x69e: 0x44a5, 0x69f: 0x44ac, 0x6a0: 0x36eb, 0x6a1: 0x36e5, 0x6a2: 0x3e68, 0x6a3: 0x44ec,
0x6a4: 0x36cd, 0x6a5: 0x36d3, 0x6a6: 0x36f1, 0x6a7: 0x3e78, 0x6a8: 0x3661, 0x6a9: 0x365b,
- 0x6aa: 0x364f, 0x6ab: 0x43a2, 0x6ac: 0x3649, 0x6ad: 0x450a, 0x6ae: 0x4511, 0x6af: 0x0081,
+ 0x6aa: 0x364f, 0x6ab: 0x430c, 0x6ac: 0x3649, 0x6ad: 0x4474, 0x6ae: 0x447b, 0x6af: 0x0081,
0x6b2: 0x3eb0, 0x6b3: 0x36f7, 0x6b4: 0x3eb8,
- 0x6b6: 0x491e, 0x6b7: 0x3ed0, 0x6b8: 0x363d, 0x6b9: 0x439c, 0x6ba: 0x366d, 0x6bb: 0x43ae,
+ 0x6b6: 0x4888, 0x6b7: 0x3ed0, 0x6b8: 0x363d, 0x6b9: 0x4306, 0x6ba: 0x366d, 0x6bb: 0x4318,
0x6bc: 0x3679, 0x6bd: 0x425a, 0x6be: 0x428c,
// Block 0x1b, offset 0x6c0
0x6c0: 0x1bd8, 0x6c1: 0x1bdc, 0x6c2: 0x0047, 0x6c3: 0x1c54, 0x6c5: 0x1be8,
@@ -4922,7 +4930,7 @@ var nfkcValues = [5888]uint16{
0x93c: 0x3fc0, 0x93d: 0x3fc8,
// Block 0x25, offset 0x940
0x954: 0x3f00,
- 0x959: 0x9903, 0x95a: 0x9903, 0x95b: 0x4372, 0x95c: 0x4378, 0x95d: 0xa000,
+ 0x959: 0x9903, 0x95a: 0x9903, 0x95b: 0x42dc, 0x95c: 0x42e2, 0x95d: 0xa000,
0x95e: 0x3fd0, 0x95f: 0x26b4,
0x966: 0xa000,
0x96b: 0xa000, 0x96c: 0x3fe0, 0x96d: 0xa000, 0x96e: 0x3fe8, 0x96f: 0xa000,
@@ -4942,10 +4950,10 @@ var nfkcValues = [5888]uint16{
// Block 0x27, offset 0x9c0
0x9c0: 0x0367, 0x9c1: 0x032b, 0x9c2: 0x032f, 0x9c3: 0x0333, 0x9c4: 0x037b, 0x9c5: 0x0337,
0x9c6: 0x033b, 0x9c7: 0x033f, 0x9c8: 0x0343, 0x9c9: 0x0347, 0x9ca: 0x034b, 0x9cb: 0x034f,
- 0x9cc: 0x0353, 0x9cd: 0x0357, 0x9ce: 0x035b, 0x9cf: 0x42dc, 0x9d0: 0x42e1, 0x9d1: 0x42e6,
- 0x9d2: 0x42eb, 0x9d3: 0x42f0, 0x9d4: 0x42f5, 0x9d5: 0x42fa, 0x9d6: 0x42ff, 0x9d7: 0x4304,
- 0x9d8: 0x4309, 0x9d9: 0x430e, 0x9da: 0x4313, 0x9db: 0x4318, 0x9dc: 0x431d, 0x9dd: 0x4322,
- 0x9de: 0x4327, 0x9df: 0x432c, 0x9e0: 0x4331, 0x9e1: 0x4336, 0x9e2: 0x433b, 0x9e3: 0x4340,
+ 0x9cc: 0x0353, 0x9cd: 0x0357, 0x9ce: 0x035b, 0x9cf: 0x49bd, 0x9d0: 0x49c3, 0x9d1: 0x49c9,
+ 0x9d2: 0x49cf, 0x9d3: 0x49d5, 0x9d4: 0x49db, 0x9d5: 0x49e1, 0x9d6: 0x49e7, 0x9d7: 0x49ed,
+ 0x9d8: 0x49f3, 0x9d9: 0x49f9, 0x9da: 0x49ff, 0x9db: 0x4a05, 0x9dc: 0x4a0b, 0x9dd: 0x4a11,
+ 0x9de: 0x4a17, 0x9df: 0x4a1d, 0x9e0: 0x4a23, 0x9e1: 0x4a29, 0x9e2: 0x4a2f, 0x9e3: 0x4a35,
0x9e4: 0x03c3, 0x9e5: 0x035f, 0x9e6: 0x0363, 0x9e7: 0x03e7, 0x9e8: 0x03eb, 0x9e9: 0x03ef,
0x9ea: 0x03f3, 0x9eb: 0x03f7, 0x9ec: 0x03fb, 0x9ed: 0x03ff, 0x9ee: 0x036b, 0x9ef: 0x0403,
0x9f0: 0x0407, 0x9f1: 0x036f, 0x9f2: 0x0373, 0x9f3: 0x0377, 0x9f4: 0x037f, 0x9f5: 0x0383,
@@ -5148,17 +5156,17 @@ var nfkcValues = [5888]uint16{
0xe40: 0x19d5, 0xe41: 0x19d8, 0xe42: 0x19db, 0xe43: 0x1c08, 0xe44: 0x1c0c, 0xe45: 0x1a5f,
0xe46: 0x1a5f,
0xe53: 0x1d75, 0xe54: 0x1d66, 0xe55: 0x1d6b, 0xe56: 0x1d7a, 0xe57: 0x1d70,
- 0xe5d: 0x4426,
- 0xe5e: 0x8115, 0xe5f: 0x4498, 0xe60: 0x022d, 0xe61: 0x0215, 0xe62: 0x021e, 0xe63: 0x0221,
+ 0xe5d: 0x4390,
+ 0xe5e: 0x8115, 0xe5f: 0x4402, 0xe60: 0x022d, 0xe61: 0x0215, 0xe62: 0x021e, 0xe63: 0x0221,
0xe64: 0x0224, 0xe65: 0x0227, 0xe66: 0x022a, 0xe67: 0x0230, 0xe68: 0x0233, 0xe69: 0x0017,
- 0xe6a: 0x4486, 0xe6b: 0x448c, 0xe6c: 0x458a, 0xe6d: 0x4592, 0xe6e: 0x43de, 0xe6f: 0x43e4,
- 0xe70: 0x43ea, 0xe71: 0x43f0, 0xe72: 0x43fc, 0xe73: 0x4402, 0xe74: 0x4408, 0xe75: 0x4414,
- 0xe76: 0x441a, 0xe78: 0x4420, 0xe79: 0x442c, 0xe7a: 0x4432, 0xe7b: 0x4438,
- 0xe7c: 0x4444, 0xe7e: 0x444a,
+ 0xe6a: 0x43f0, 0xe6b: 0x43f6, 0xe6c: 0x44f4, 0xe6d: 0x44fc, 0xe6e: 0x4348, 0xe6f: 0x434e,
+ 0xe70: 0x4354, 0xe71: 0x435a, 0xe72: 0x4366, 0xe73: 0x436c, 0xe74: 0x4372, 0xe75: 0x437e,
+ 0xe76: 0x4384, 0xe78: 0x438a, 0xe79: 0x4396, 0xe7a: 0x439c, 0xe7b: 0x43a2,
+ 0xe7c: 0x43ae, 0xe7e: 0x43b4,
// Block 0x3a, offset 0xe80
- 0xe80: 0x4450, 0xe81: 0x4456, 0xe83: 0x445c, 0xe84: 0x4462,
- 0xe86: 0x446e, 0xe87: 0x4474, 0xe88: 0x447a, 0xe89: 0x4480, 0xe8a: 0x4492, 0xe8b: 0x440e,
- 0xe8c: 0x43f6, 0xe8d: 0x443e, 0xe8e: 0x4468, 0xe8f: 0x1d7f, 0xe90: 0x0299, 0xe91: 0x0299,
+ 0xe80: 0x43ba, 0xe81: 0x43c0, 0xe83: 0x43c6, 0xe84: 0x43cc,
+ 0xe86: 0x43d8, 0xe87: 0x43de, 0xe88: 0x43e4, 0xe89: 0x43ea, 0xe8a: 0x43fc, 0xe8b: 0x4378,
+ 0xe8c: 0x4360, 0xe8d: 0x43a8, 0xe8e: 0x43d2, 0xe8f: 0x1d7f, 0xe90: 0x0299, 0xe91: 0x0299,
0xe92: 0x02a2, 0xe93: 0x02a2, 0xe94: 0x02a2, 0xe95: 0x02a2, 0xe96: 0x02a5, 0xe97: 0x02a5,
0xe98: 0x02a5, 0xe99: 0x02a5, 0xe9a: 0x02ab, 0xe9b: 0x02ab, 0xe9c: 0x02ab, 0xe9d: 0x02ab,
0xe9e: 0x029f, 0xe9f: 0x029f, 0xea0: 0x029f, 0xea1: 0x029f, 0xea2: 0x02a8, 0xea3: 0x02a8,
@@ -5174,9 +5182,9 @@ var nfkcValues = [5888]uint16{
0xed2: 0x02db, 0xed3: 0x02db, 0xed4: 0x02db, 0xed5: 0x02db, 0xed6: 0x02e1, 0xed7: 0x02e1,
0xed8: 0x02e1, 0xed9: 0x02e1, 0xeda: 0x02de, 0xedb: 0x02de, 0xedc: 0x02de, 0xedd: 0x02de,
0xede: 0x02e4, 0xedf: 0x02e4, 0xee0: 0x02e7, 0xee1: 0x02e7, 0xee2: 0x02e7, 0xee3: 0x02e7,
- 0xee4: 0x4504, 0xee5: 0x4504, 0xee6: 0x02ed, 0xee7: 0x02ed, 0xee8: 0x02ed, 0xee9: 0x02ed,
+ 0xee4: 0x446e, 0xee5: 0x446e, 0xee6: 0x02ed, 0xee7: 0x02ed, 0xee8: 0x02ed, 0xee9: 0x02ed,
0xeea: 0x02ea, 0xeeb: 0x02ea, 0xeec: 0x02ea, 0xeed: 0x02ea, 0xeee: 0x0308, 0xeef: 0x0308,
- 0xef0: 0x44fe, 0xef1: 0x44fe,
+ 0xef0: 0x4468, 0xef1: 0x4468,
// Block 0x3c, offset 0xf00
0xf13: 0x02d8, 0xf14: 0x02d8, 0xf15: 0x02d8, 0xf16: 0x02d8, 0xf17: 0x02f6,
0xf18: 0x02f6, 0xf19: 0x02f3, 0xf1a: 0x02f3, 0xf1b: 0x02f9, 0xf1c: 0x02f9, 0xf1d: 0x204f,
@@ -5203,8 +5211,8 @@ var nfkcValues = [5888]uint16{
0xf86: 0x1fb4, 0xf87: 0x1fb9, 0xf88: 0x1fbe, 0xf89: 0x1fc3, 0xf8a: 0x1fc8, 0xf8b: 0x1fcd,
0xf8c: 0x1fd2, 0xf8d: 0x1fd7, 0xf8e: 0x1fe6, 0xf8f: 0x1ff5, 0xf90: 0x1ffa, 0xf91: 0x1fff,
0xf92: 0x2004, 0xf93: 0x2009, 0xf94: 0x200e, 0xf95: 0x2018, 0xf96: 0x201d, 0xf97: 0x2022,
- 0xf98: 0x2031, 0xf99: 0x2040, 0xf9a: 0x2045, 0xf9b: 0x44b6, 0xf9c: 0x44bc, 0xf9d: 0x44f2,
- 0xf9e: 0x4549, 0xf9f: 0x4550, 0xfa0: 0x4557, 0xfa1: 0x455e, 0xfa2: 0x4565, 0xfa3: 0x456c,
+ 0xf98: 0x2031, 0xf99: 0x2040, 0xf9a: 0x2045, 0xf9b: 0x4420, 0xf9c: 0x4426, 0xf9d: 0x445c,
+ 0xf9e: 0x44b3, 0xf9f: 0x44ba, 0xfa0: 0x44c1, 0xfa1: 0x44c8, 0xfa2: 0x44cf, 0xfa3: 0x44d6,
0xfa4: 0x25c6, 0xfa5: 0x25cd, 0xfa6: 0x25d4, 0xfa7: 0x25db, 0xfa8: 0x25f0, 0xfa9: 0x25f7,
0xfaa: 0x1d98, 0xfab: 0x1d9d, 0xfac: 0x1da2, 0xfad: 0x1da7, 0xfae: 0x1db1, 0xfaf: 0x1db6,
0xfb0: 0x1dca, 0xfb1: 0x1dcf, 0xfb2: 0x1dd4, 0xfb3: 0x1dd9, 0xfb4: 0x1de3, 0xfb5: 0x1de8,
@@ -5213,7 +5221,7 @@ var nfkcValues = [5888]uint16{
// Block 0x3f, offset 0xfc0
0xfc0: 0x1f5a, 0xfc1: 0x1f6e, 0xfc2: 0x1f73, 0xfc3: 0x1f78, 0xfc4: 0x1f7d, 0xfc5: 0x1f96,
0xfc6: 0x1fa0, 0xfc7: 0x1fa5, 0xfc8: 0x1faa, 0xfc9: 0x1fbe, 0xfca: 0x1fdc, 0xfcb: 0x1fe1,
- 0xfcc: 0x1fe6, 0xfcd: 0x1feb, 0xfce: 0x1ff5, 0xfcf: 0x1ffa, 0xfd0: 0x44f2, 0xfd1: 0x2027,
+ 0xfcc: 0x1fe6, 0xfcd: 0x1feb, 0xfce: 0x1ff5, 0xfcf: 0x1ffa, 0xfd0: 0x445c, 0xfd1: 0x2027,
0xfd2: 0x202c, 0xfd3: 0x2031, 0xfd4: 0x2036, 0xfd5: 0x2040, 0xfd6: 0x2045, 0xfd7: 0x25b1,
0xfd8: 0x25b8, 0xfd9: 0x25bf, 0xfda: 0x25d4, 0xfdb: 0x25e2, 0xfdc: 0x1d89, 0xfdd: 0x1d8e,
0xfde: 0x1d93, 0xfdf: 0x1da2, 0xfe0: 0x1dac, 0xfe1: 0x1dbb, 0xfe2: 0x1dc0, 0xfe3: 0x1dc5,
@@ -5227,11 +5235,11 @@ var nfkcValues = [5888]uint16{
0x1006: 0x1f69, 0x1007: 0x1f6e, 0x1008: 0x1f73, 0x1009: 0x1f87, 0x100a: 0x1f8c, 0x100b: 0x1f91,
0x100c: 0x1f96, 0x100d: 0x1f9b, 0x100e: 0x1faf, 0x100f: 0x1fb4, 0x1010: 0x1fb9, 0x1011: 0x1fbe,
0x1012: 0x1fcd, 0x1013: 0x1fd2, 0x1014: 0x1fd7, 0x1015: 0x1fe6, 0x1016: 0x1ff0, 0x1017: 0x1fff,
- 0x1018: 0x2004, 0x1019: 0x44e6, 0x101a: 0x2018, 0x101b: 0x201d, 0x101c: 0x2022, 0x101d: 0x2031,
+ 0x1018: 0x2004, 0x1019: 0x4450, 0x101a: 0x2018, 0x101b: 0x201d, 0x101c: 0x2022, 0x101d: 0x2031,
0x101e: 0x203b, 0x101f: 0x25d4, 0x1020: 0x25e2, 0x1021: 0x1da2, 0x1022: 0x1dac, 0x1023: 0x1dd4,
0x1024: 0x1dde, 0x1025: 0x1dfc, 0x1026: 0x1e06, 0x1027: 0x1e6a, 0x1028: 0x1e6f, 0x1029: 0x1e92,
0x102a: 0x1e97, 0x102b: 0x1f6e, 0x102c: 0x1f73, 0x102d: 0x1f96, 0x102e: 0x1fe6, 0x102f: 0x1ff0,
- 0x1030: 0x2031, 0x1031: 0x203b, 0x1032: 0x459a, 0x1033: 0x45a2, 0x1034: 0x45aa, 0x1035: 0x1ef1,
+ 0x1030: 0x2031, 0x1031: 0x203b, 0x1032: 0x4504, 0x1033: 0x450c, 0x1034: 0x4514, 0x1035: 0x1ef1,
0x1036: 0x1ef6, 0x1037: 0x1f0a, 0x1038: 0x1f0f, 0x1039: 0x1f1e, 0x103a: 0x1f23, 0x103b: 0x1e74,
0x103c: 0x1e79, 0x103d: 0x1e9c, 0x103e: 0x1ea1, 0x103f: 0x1e33,
// Block 0x41, offset 0x1040
@@ -5245,7 +5253,7 @@ var nfkcValues = [5888]uint16{
0x106a: 0x1e65, 0x106b: 0x1eb0, 0x106c: 0x1ed3, 0x106d: 0x1e7e, 0x106e: 0x1e83, 0x106f: 0x1e88,
0x1070: 0x1e92, 0x1071: 0x1e6f, 0x1072: 0x1e97, 0x1073: 0x1eec, 0x1074: 0x1e56, 0x1075: 0x1e5b,
0x1076: 0x1e60, 0x1077: 0x1e7e, 0x1078: 0x1e83, 0x1079: 0x1e88, 0x107a: 0x1eec, 0x107b: 0x1efb,
- 0x107c: 0x449e, 0x107d: 0x449e,
+ 0x107c: 0x4408, 0x107d: 0x4408,
// Block 0x42, offset 0x1080
0x1090: 0x2311, 0x1091: 0x2326,
0x1092: 0x2326, 0x1093: 0x232d, 0x1094: 0x2334, 0x1095: 0x2349, 0x1096: 0x2350, 0x1097: 0x2357,
@@ -5293,13 +5301,13 @@ var nfkcValues = [5888]uint16{
0x119e: 0x04bb, 0x119f: 0x0007, 0x11a0: 0x000d, 0x11a1: 0x0015, 0x11a2: 0x0017, 0x11a3: 0x001b,
0x11a4: 0x0039, 0x11a5: 0x003d, 0x11a6: 0x003b, 0x11a8: 0x0079, 0x11a9: 0x0009,
0x11aa: 0x000b, 0x11ab: 0x0041,
- 0x11b0: 0x42aa, 0x11b1: 0x44c2, 0x11b2: 0x42af, 0x11b4: 0x42b4,
- 0x11b6: 0x42b9, 0x11b7: 0x44c8, 0x11b8: 0x42be, 0x11b9: 0x44ce, 0x11ba: 0x42c3, 0x11bb: 0x44d4,
- 0x11bc: 0x42c8, 0x11bd: 0x44da, 0x11be: 0x42cd, 0x11bf: 0x44e0,
+ 0x11b0: 0x42aa, 0x11b1: 0x442c, 0x11b2: 0x42af, 0x11b4: 0x42b4,
+ 0x11b6: 0x42b9, 0x11b7: 0x4432, 0x11b8: 0x42be, 0x11b9: 0x4438, 0x11ba: 0x42c3, 0x11bb: 0x443e,
+ 0x11bc: 0x42c8, 0x11bd: 0x4444, 0x11be: 0x42cd, 0x11bf: 0x444a,
// Block 0x47, offset 0x11c0
- 0x11c0: 0x0236, 0x11c1: 0x44a4, 0x11c2: 0x44a4, 0x11c3: 0x44aa, 0x11c4: 0x44aa, 0x11c5: 0x44ec,
- 0x11c6: 0x44ec, 0x11c7: 0x44b0, 0x11c8: 0x44b0, 0x11c9: 0x44f8, 0x11ca: 0x44f8, 0x11cb: 0x44f8,
- 0x11cc: 0x44f8, 0x11cd: 0x0239, 0x11ce: 0x0239, 0x11cf: 0x023c, 0x11d0: 0x023c, 0x11d1: 0x023c,
+ 0x11c0: 0x0236, 0x11c1: 0x440e, 0x11c2: 0x440e, 0x11c3: 0x4414, 0x11c4: 0x4414, 0x11c5: 0x4456,
+ 0x11c6: 0x4456, 0x11c7: 0x441a, 0x11c8: 0x441a, 0x11c9: 0x4462, 0x11ca: 0x4462, 0x11cb: 0x4462,
+ 0x11cc: 0x4462, 0x11cd: 0x0239, 0x11ce: 0x0239, 0x11cf: 0x023c, 0x11d0: 0x023c, 0x11d1: 0x023c,
0x11d2: 0x023c, 0x11d3: 0x023f, 0x11d4: 0x023f, 0x11d5: 0x0242, 0x11d6: 0x0242, 0x11d7: 0x0242,
0x11d8: 0x0242, 0x11d9: 0x0245, 0x11da: 0x0245, 0x11db: 0x0245, 0x11dc: 0x0245, 0x11dd: 0x0248,
0x11de: 0x0248, 0x11df: 0x0248, 0x11e0: 0x0248, 0x11e1: 0x024b, 0x11e2: 0x024b, 0x11e3: 0x024b,
@@ -5338,18 +5346,18 @@ var nfkcValues = [5888]uint16{
0x128c: 0x054b, 0x128d: 0x054f, 0x128e: 0x0553, 0x128f: 0x0557, 0x1290: 0x055b, 0x1291: 0x055f,
0x1292: 0x0563, 0x1293: 0x0567, 0x1294: 0x056f, 0x1295: 0x0577, 0x1296: 0x057f, 0x1297: 0x0583,
0x1298: 0x0587, 0x1299: 0x058b, 0x129a: 0x058f, 0x129b: 0x0593, 0x129c: 0x0597, 0x129d: 0x05a7,
- 0x129e: 0x4a5a, 0x129f: 0x4a60, 0x12a0: 0x03c3, 0x12a1: 0x0313, 0x12a2: 0x0317, 0x12a3: 0x4345,
- 0x12a4: 0x031b, 0x12a5: 0x434a, 0x12a6: 0x434f, 0x12a7: 0x031f, 0x12a8: 0x0323, 0x12a9: 0x0327,
- 0x12aa: 0x4354, 0x12ab: 0x4359, 0x12ac: 0x435e, 0x12ad: 0x4363, 0x12ae: 0x4368, 0x12af: 0x436d,
+ 0x129e: 0x4a78, 0x129f: 0x4a7e, 0x12a0: 0x03c3, 0x12a1: 0x0313, 0x12a2: 0x0317, 0x12a3: 0x4a3b,
+ 0x12a4: 0x031b, 0x12a5: 0x4a41, 0x12a6: 0x4a47, 0x12a7: 0x031f, 0x12a8: 0x0323, 0x12a9: 0x0327,
+ 0x12aa: 0x4a4d, 0x12ab: 0x4a53, 0x12ac: 0x4a59, 0x12ad: 0x4a5f, 0x12ae: 0x4a65, 0x12af: 0x4a6b,
0x12b0: 0x0367, 0x12b1: 0x032b, 0x12b2: 0x032f, 0x12b3: 0x0333, 0x12b4: 0x037b, 0x12b5: 0x0337,
0x12b6: 0x033b, 0x12b7: 0x033f, 0x12b8: 0x0343, 0x12b9: 0x0347, 0x12ba: 0x034b, 0x12bb: 0x034f,
0x12bc: 0x0353, 0x12bd: 0x0357, 0x12be: 0x035b,
// Block 0x4b, offset 0x12c0
- 0x12c2: 0x42dc, 0x12c3: 0x42e1, 0x12c4: 0x42e6, 0x12c5: 0x42eb,
- 0x12c6: 0x42f0, 0x12c7: 0x42f5, 0x12ca: 0x42fa, 0x12cb: 0x42ff,
- 0x12cc: 0x4304, 0x12cd: 0x4309, 0x12ce: 0x430e, 0x12cf: 0x4313,
- 0x12d2: 0x4318, 0x12d3: 0x431d, 0x12d4: 0x4322, 0x12d5: 0x4327, 0x12d6: 0x432c, 0x12d7: 0x4331,
- 0x12da: 0x4336, 0x12db: 0x433b, 0x12dc: 0x4340,
+ 0x12c2: 0x49bd, 0x12c3: 0x49c3, 0x12c4: 0x49c9, 0x12c5: 0x49cf,
+ 0x12c6: 0x49d5, 0x12c7: 0x49db, 0x12ca: 0x49e1, 0x12cb: 0x49e7,
+ 0x12cc: 0x49ed, 0x12cd: 0x49f3, 0x12ce: 0x49f9, 0x12cf: 0x49ff,
+ 0x12d2: 0x4a05, 0x12d3: 0x4a0b, 0x12d4: 0x4a11, 0x12d5: 0x4a17, 0x12d6: 0x4a1d, 0x12d7: 0x4a23,
+ 0x12da: 0x4a29, 0x12db: 0x4a2f, 0x12dc: 0x4a35,
0x12e0: 0x00bf, 0x12e1: 0x00c2, 0x12e2: 0x00cb, 0x12e3: 0x4264,
0x12e4: 0x00c8, 0x12e5: 0x00c5, 0x12e6: 0x0447, 0x12e8: 0x046b, 0x12e9: 0x044b,
0x12ea: 0x044f, 0x12eb: 0x0453, 0x12ec: 0x0457, 0x12ed: 0x046f, 0x12ee: 0x0473,
@@ -5426,7 +5434,7 @@ var nfkcValues = [5888]uint16{
// Block 0x52, offset 0x1480
0x1480: 0x26ad, 0x1481: 0x26c2, 0x1482: 0x0503,
0x1490: 0x0c0f, 0x1491: 0x0a47,
- 0x1492: 0x08d3, 0x1493: 0x465a, 0x1494: 0x071b, 0x1495: 0x09ef, 0x1496: 0x132f, 0x1497: 0x09ff,
+ 0x1492: 0x08d3, 0x1493: 0x45c4, 0x1494: 0x071b, 0x1495: 0x09ef, 0x1496: 0x132f, 0x1497: 0x09ff,
0x1498: 0x0727, 0x1499: 0x0cd7, 0x149a: 0x0eaf, 0x149b: 0x0caf, 0x149c: 0x0827, 0x149d: 0x0b6b,
0x149e: 0x07bf, 0x149f: 0x0cb7, 0x14a0: 0x0813, 0x14a1: 0x1117, 0x14a2: 0x0f83, 0x14a3: 0x138b,
0x14a4: 0x09d3, 0x14a5: 0x090b, 0x14a6: 0x0e63, 0x14a7: 0x0c1b, 0x14a8: 0x0c47, 0x14a9: 0x06bf,
@@ -5665,8 +5673,8 @@ var nfkcSparseValues = [875]valueRange{
{value: 0x22b2, lo: 0xbe, hi: 0xbe},
// Block 0x1, offset 0xe
{value: 0x0091, lo: 0x03},
- {value: 0x4778, lo: 0xa0, hi: 0xa1},
- {value: 0x47aa, lo: 0xaf, hi: 0xb0},
+ {value: 0x46e2, lo: 0xa0, hi: 0xa1},
+ {value: 0x4714, lo: 0xaf, hi: 0xb0},
{value: 0xa000, lo: 0xb7, hi: 0xb7},
// Block 0x2, offset 0x12
{value: 0x0003, lo: 0x08},
@@ -5814,7 +5822,7 @@ var nfkcSparseValues = [875]valueRange{
{value: 0x812d, lo: 0x92, hi: 0x92},
{value: 0x8132, lo: 0x93, hi: 0x93},
{value: 0x8132, lo: 0x94, hi: 0x94},
- {value: 0x45b2, lo: 0x98, hi: 0x9f},
+ {value: 0x451c, lo: 0x98, hi: 0x9f},
// Block 0x11, offset 0x96
{value: 0x0000, lo: 0x02},
{value: 0x8102, lo: 0xbc, hi: 0xbc},
@@ -5825,18 +5833,18 @@ var nfkcSparseValues = [875]valueRange{
{value: 0x2c9e, lo: 0x8b, hi: 0x8c},
{value: 0x8104, lo: 0x8d, hi: 0x8d},
{value: 0x9900, lo: 0x97, hi: 0x97},
- {value: 0x45f2, lo: 0x9c, hi: 0x9d},
- {value: 0x4602, lo: 0x9f, hi: 0x9f},
+ {value: 0x455c, lo: 0x9c, hi: 0x9d},
+ {value: 0x456c, lo: 0x9f, hi: 0x9f},
// Block 0x13, offset 0xa0
{value: 0x0000, lo: 0x03},
- {value: 0x462a, lo: 0xb3, hi: 0xb3},
- {value: 0x4632, lo: 0xb6, hi: 0xb6},
+ {value: 0x4594, lo: 0xb3, hi: 0xb3},
+ {value: 0x459c, lo: 0xb6, hi: 0xb6},
{value: 0x8102, lo: 0xbc, hi: 0xbc},
// Block 0x14, offset 0xa4
{value: 0x0008, lo: 0x03},
{value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x460a, lo: 0x99, hi: 0x9b},
- {value: 0x4622, lo: 0x9e, hi: 0x9e},
+ {value: 0x4574, lo: 0x99, hi: 0x9b},
+ {value: 0x458c, lo: 0x9e, hi: 0x9e},
// Block 0x15, offset 0xa8
{value: 0x0000, lo: 0x01},
{value: 0x8102, lo: 0xbc, hi: 0xbc},
@@ -5851,8 +5859,8 @@ var nfkcSparseValues = [875]valueRange{
{value: 0x2cbe, lo: 0x8c, hi: 0x8c},
{value: 0x8104, lo: 0x8d, hi: 0x8d},
{value: 0x9900, lo: 0x96, hi: 0x97},
- {value: 0x463a, lo: 0x9c, hi: 0x9c},
- {value: 0x4642, lo: 0x9d, hi: 0x9d},
+ {value: 0x45a4, lo: 0x9c, hi: 0x9c},
+ {value: 0x45ac, lo: 0x9d, hi: 0x9d},
// Block 0x18, offset 0xb5
{value: 0x0000, lo: 0x03},
{value: 0xa000, lo: 0x92, hi: 0x92},
@@ -5941,18 +5949,18 @@ var nfkcSparseValues = [875]valueRange{
{value: 0x263d, lo: 0xa9, hi: 0xa9},
{value: 0x8126, lo: 0xb1, hi: 0xb1},
{value: 0x8127, lo: 0xb2, hi: 0xb2},
- {value: 0x4a66, lo: 0xb3, hi: 0xb3},
+ {value: 0x4a84, lo: 0xb3, hi: 0xb3},
{value: 0x8128, lo: 0xb4, hi: 0xb4},
- {value: 0x4a6f, lo: 0xb5, hi: 0xb5},
- {value: 0x464a, lo: 0xb6, hi: 0xb6},
- {value: 0x468a, lo: 0xb7, hi: 0xb7},
- {value: 0x4652, lo: 0xb8, hi: 0xb8},
- {value: 0x4695, lo: 0xb9, hi: 0xb9},
+ {value: 0x4a8d, lo: 0xb5, hi: 0xb5},
+ {value: 0x45b4, lo: 0xb6, hi: 0xb6},
+ {value: 0x45f4, lo: 0xb7, hi: 0xb7},
+ {value: 0x45bc, lo: 0xb8, hi: 0xb8},
+ {value: 0x45ff, lo: 0xb9, hi: 0xb9},
{value: 0x8127, lo: 0xba, hi: 0xbd},
// Block 0x26, offset 0x107
{value: 0x0000, lo: 0x0b},
{value: 0x8127, lo: 0x80, hi: 0x80},
- {value: 0x4a78, lo: 0x81, hi: 0x81},
+ {value: 0x4a96, lo: 0x81, hi: 0x81},
{value: 0x8132, lo: 0x82, hi: 0x83},
{value: 0x8104, lo: 0x84, hi: 0x84},
{value: 0x8132, lo: 0x86, hi: 0x87},
@@ -6199,7 +6207,7 @@ var nfkcSparseValues = [875]valueRange{
{value: 0x192d, lo: 0xb5, hi: 0xb6},
// Block 0x4a, offset 0x1db
{value: 0x0000, lo: 0x01},
- {value: 0x4573, lo: 0x9c, hi: 0x9c},
+ {value: 0x44dd, lo: 0x9c, hi: 0x9c},
// Block 0x4b, offset 0x1dd
{value: 0x0000, lo: 0x02},
{value: 0x0095, lo: 0xbc, hi: 0xbc},
@@ -6245,16 +6253,16 @@ var nfkcSparseValues = [875]valueRange{
{value: 0x04b3, lo: 0xb6, hi: 0xb6},
{value: 0x0887, lo: 0xb8, hi: 0xba},
// Block 0x53, offset 0x201
- {value: 0x0005, lo: 0x09},
+ {value: 0x0006, lo: 0x09},
{value: 0x0313, lo: 0xb1, hi: 0xb1},
{value: 0x0317, lo: 0xb2, hi: 0xb2},
- {value: 0x4345, lo: 0xb3, hi: 0xb3},
+ {value: 0x4a3b, lo: 0xb3, hi: 0xb3},
{value: 0x031b, lo: 0xb4, hi: 0xb4},
- {value: 0x434a, lo: 0xb5, hi: 0xb6},
+ {value: 0x4a41, lo: 0xb5, hi: 0xb6},
{value: 0x031f, lo: 0xb7, hi: 0xb7},
{value: 0x0323, lo: 0xb8, hi: 0xb8},
{value: 0x0327, lo: 0xb9, hi: 0xb9},
- {value: 0x4354, lo: 0xba, hi: 0xbf},
+ {value: 0x4a4d, lo: 0xba, hi: 0xbf},
// Block 0x54, offset 0x20b
{value: 0x0000, lo: 0x02},
{value: 0x8132, lo: 0xaf, hi: 0xaf},
@@ -6479,13 +6487,13 @@ var nfkcSparseValues = [875]valueRange{
{value: 0x8101, lo: 0x9e, hi: 0x9e},
// Block 0x83, offset 0x2ba
{value: 0x0000, lo: 0x0c},
- {value: 0x4662, lo: 0x9e, hi: 0x9e},
- {value: 0x466c, lo: 0x9f, hi: 0x9f},
- {value: 0x46a0, lo: 0xa0, hi: 0xa0},
- {value: 0x46ae, lo: 0xa1, hi: 0xa1},
- {value: 0x46bc, lo: 0xa2, hi: 0xa2},
- {value: 0x46ca, lo: 0xa3, hi: 0xa3},
- {value: 0x46d8, lo: 0xa4, hi: 0xa4},
+ {value: 0x45cc, lo: 0x9e, hi: 0x9e},
+ {value: 0x45d6, lo: 0x9f, hi: 0x9f},
+ {value: 0x460a, lo: 0xa0, hi: 0xa0},
+ {value: 0x4618, lo: 0xa1, hi: 0xa1},
+ {value: 0x4626, lo: 0xa2, hi: 0xa2},
+ {value: 0x4634, lo: 0xa3, hi: 0xa3},
+ {value: 0x4642, lo: 0xa4, hi: 0xa4},
{value: 0x812b, lo: 0xa5, hi: 0xa6},
{value: 0x8101, lo: 0xa7, hi: 0xa9},
{value: 0x8130, lo: 0xad, hi: 0xad},
@@ -6497,14 +6505,14 @@ var nfkcSparseValues = [875]valueRange{
{value: 0x8132, lo: 0x85, hi: 0x89},
{value: 0x812d, lo: 0x8a, hi: 0x8b},
{value: 0x8132, lo: 0xaa, hi: 0xad},
- {value: 0x4676, lo: 0xbb, hi: 0xbb},
- {value: 0x4680, lo: 0xbc, hi: 0xbc},
- {value: 0x46e6, lo: 0xbd, hi: 0xbd},
- {value: 0x4702, lo: 0xbe, hi: 0xbe},
- {value: 0x46f4, lo: 0xbf, hi: 0xbf},
+ {value: 0x45e0, lo: 0xbb, hi: 0xbb},
+ {value: 0x45ea, lo: 0xbc, hi: 0xbc},
+ {value: 0x4650, lo: 0xbd, hi: 0xbd},
+ {value: 0x466c, lo: 0xbe, hi: 0xbe},
+ {value: 0x465e, lo: 0xbf, hi: 0xbf},
// Block 0x85, offset 0x2d1
{value: 0x0000, lo: 0x01},
- {value: 0x4710, lo: 0x80, hi: 0x80},
+ {value: 0x467a, lo: 0x80, hi: 0x80},
// Block 0x86, offset 0x2d3
{value: 0x0000, lo: 0x01},
{value: 0x8132, lo: 0x82, hi: 0x84},
@@ -6681,947 +6689,949 @@ var nfkcSparseValues = [875]valueRange{
}
// recompMap: 7520 bytes (entries only)
-var recompMap = map[uint32]rune{
- 0x00410300: 0x00C0,
- 0x00410301: 0x00C1,
- 0x00410302: 0x00C2,
- 0x00410303: 0x00C3,
- 0x00410308: 0x00C4,
- 0x0041030A: 0x00C5,
- 0x00430327: 0x00C7,
- 0x00450300: 0x00C8,
- 0x00450301: 0x00C9,
- 0x00450302: 0x00CA,
- 0x00450308: 0x00CB,
- 0x00490300: 0x00CC,
- 0x00490301: 0x00CD,
- 0x00490302: 0x00CE,
- 0x00490308: 0x00CF,
- 0x004E0303: 0x00D1,
- 0x004F0300: 0x00D2,
- 0x004F0301: 0x00D3,
- 0x004F0302: 0x00D4,
- 0x004F0303: 0x00D5,
- 0x004F0308: 0x00D6,
- 0x00550300: 0x00D9,
- 0x00550301: 0x00DA,
- 0x00550302: 0x00DB,
- 0x00550308: 0x00DC,
- 0x00590301: 0x00DD,
- 0x00610300: 0x00E0,
- 0x00610301: 0x00E1,
- 0x00610302: 0x00E2,
- 0x00610303: 0x00E3,
- 0x00610308: 0x00E4,
- 0x0061030A: 0x00E5,
- 0x00630327: 0x00E7,
- 0x00650300: 0x00E8,
- 0x00650301: 0x00E9,
- 0x00650302: 0x00EA,
- 0x00650308: 0x00EB,
- 0x00690300: 0x00EC,
- 0x00690301: 0x00ED,
- 0x00690302: 0x00EE,
- 0x00690308: 0x00EF,
- 0x006E0303: 0x00F1,
- 0x006F0300: 0x00F2,
- 0x006F0301: 0x00F3,
- 0x006F0302: 0x00F4,
- 0x006F0303: 0x00F5,
- 0x006F0308: 0x00F6,
- 0x00750300: 0x00F9,
- 0x00750301: 0x00FA,
- 0x00750302: 0x00FB,
- 0x00750308: 0x00FC,
- 0x00790301: 0x00FD,
- 0x00790308: 0x00FF,
- 0x00410304: 0x0100,
- 0x00610304: 0x0101,
- 0x00410306: 0x0102,
- 0x00610306: 0x0103,
- 0x00410328: 0x0104,
- 0x00610328: 0x0105,
- 0x00430301: 0x0106,
- 0x00630301: 0x0107,
- 0x00430302: 0x0108,
- 0x00630302: 0x0109,
- 0x00430307: 0x010A,
- 0x00630307: 0x010B,
- 0x0043030C: 0x010C,
- 0x0063030C: 0x010D,
- 0x0044030C: 0x010E,
- 0x0064030C: 0x010F,
- 0x00450304: 0x0112,
- 0x00650304: 0x0113,
- 0x00450306: 0x0114,
- 0x00650306: 0x0115,
- 0x00450307: 0x0116,
- 0x00650307: 0x0117,
- 0x00450328: 0x0118,
- 0x00650328: 0x0119,
- 0x0045030C: 0x011A,
- 0x0065030C: 0x011B,
- 0x00470302: 0x011C,
- 0x00670302: 0x011D,
- 0x00470306: 0x011E,
- 0x00670306: 0x011F,
- 0x00470307: 0x0120,
- 0x00670307: 0x0121,
- 0x00470327: 0x0122,
- 0x00670327: 0x0123,
- 0x00480302: 0x0124,
- 0x00680302: 0x0125,
- 0x00490303: 0x0128,
- 0x00690303: 0x0129,
- 0x00490304: 0x012A,
- 0x00690304: 0x012B,
- 0x00490306: 0x012C,
- 0x00690306: 0x012D,
- 0x00490328: 0x012E,
- 0x00690328: 0x012F,
- 0x00490307: 0x0130,
- 0x004A0302: 0x0134,
- 0x006A0302: 0x0135,
- 0x004B0327: 0x0136,
- 0x006B0327: 0x0137,
- 0x004C0301: 0x0139,
- 0x006C0301: 0x013A,
- 0x004C0327: 0x013B,
- 0x006C0327: 0x013C,
- 0x004C030C: 0x013D,
- 0x006C030C: 0x013E,
- 0x004E0301: 0x0143,
- 0x006E0301: 0x0144,
- 0x004E0327: 0x0145,
- 0x006E0327: 0x0146,
- 0x004E030C: 0x0147,
- 0x006E030C: 0x0148,
- 0x004F0304: 0x014C,
- 0x006F0304: 0x014D,
- 0x004F0306: 0x014E,
- 0x006F0306: 0x014F,
- 0x004F030B: 0x0150,
- 0x006F030B: 0x0151,
- 0x00520301: 0x0154,
- 0x00720301: 0x0155,
- 0x00520327: 0x0156,
- 0x00720327: 0x0157,
- 0x0052030C: 0x0158,
- 0x0072030C: 0x0159,
- 0x00530301: 0x015A,
- 0x00730301: 0x015B,
- 0x00530302: 0x015C,
- 0x00730302: 0x015D,
- 0x00530327: 0x015E,
- 0x00730327: 0x015F,
- 0x0053030C: 0x0160,
- 0x0073030C: 0x0161,
- 0x00540327: 0x0162,
- 0x00740327: 0x0163,
- 0x0054030C: 0x0164,
- 0x0074030C: 0x0165,
- 0x00550303: 0x0168,
- 0x00750303: 0x0169,
- 0x00550304: 0x016A,
- 0x00750304: 0x016B,
- 0x00550306: 0x016C,
- 0x00750306: 0x016D,
- 0x0055030A: 0x016E,
- 0x0075030A: 0x016F,
- 0x0055030B: 0x0170,
- 0x0075030B: 0x0171,
- 0x00550328: 0x0172,
- 0x00750328: 0x0173,
- 0x00570302: 0x0174,
- 0x00770302: 0x0175,
- 0x00590302: 0x0176,
- 0x00790302: 0x0177,
- 0x00590308: 0x0178,
- 0x005A0301: 0x0179,
- 0x007A0301: 0x017A,
- 0x005A0307: 0x017B,
- 0x007A0307: 0x017C,
- 0x005A030C: 0x017D,
- 0x007A030C: 0x017E,
- 0x004F031B: 0x01A0,
- 0x006F031B: 0x01A1,
- 0x0055031B: 0x01AF,
- 0x0075031B: 0x01B0,
- 0x0041030C: 0x01CD,
- 0x0061030C: 0x01CE,
- 0x0049030C: 0x01CF,
- 0x0069030C: 0x01D0,
- 0x004F030C: 0x01D1,
- 0x006F030C: 0x01D2,
- 0x0055030C: 0x01D3,
- 0x0075030C: 0x01D4,
- 0x00DC0304: 0x01D5,
- 0x00FC0304: 0x01D6,
- 0x00DC0301: 0x01D7,
- 0x00FC0301: 0x01D8,
- 0x00DC030C: 0x01D9,
- 0x00FC030C: 0x01DA,
- 0x00DC0300: 0x01DB,
- 0x00FC0300: 0x01DC,
- 0x00C40304: 0x01DE,
- 0x00E40304: 0x01DF,
- 0x02260304: 0x01E0,
- 0x02270304: 0x01E1,
- 0x00C60304: 0x01E2,
- 0x00E60304: 0x01E3,
- 0x0047030C: 0x01E6,
- 0x0067030C: 0x01E7,
- 0x004B030C: 0x01E8,
- 0x006B030C: 0x01E9,
- 0x004F0328: 0x01EA,
- 0x006F0328: 0x01EB,
- 0x01EA0304: 0x01EC,
- 0x01EB0304: 0x01ED,
- 0x01B7030C: 0x01EE,
- 0x0292030C: 0x01EF,
- 0x006A030C: 0x01F0,
- 0x00470301: 0x01F4,
- 0x00670301: 0x01F5,
- 0x004E0300: 0x01F8,
- 0x006E0300: 0x01F9,
- 0x00C50301: 0x01FA,
- 0x00E50301: 0x01FB,
- 0x00C60301: 0x01FC,
- 0x00E60301: 0x01FD,
- 0x00D80301: 0x01FE,
- 0x00F80301: 0x01FF,
- 0x0041030F: 0x0200,
- 0x0061030F: 0x0201,
- 0x00410311: 0x0202,
- 0x00610311: 0x0203,
- 0x0045030F: 0x0204,
- 0x0065030F: 0x0205,
- 0x00450311: 0x0206,
- 0x00650311: 0x0207,
- 0x0049030F: 0x0208,
- 0x0069030F: 0x0209,
- 0x00490311: 0x020A,
- 0x00690311: 0x020B,
- 0x004F030F: 0x020C,
- 0x006F030F: 0x020D,
- 0x004F0311: 0x020E,
- 0x006F0311: 0x020F,
- 0x0052030F: 0x0210,
- 0x0072030F: 0x0211,
- 0x00520311: 0x0212,
- 0x00720311: 0x0213,
- 0x0055030F: 0x0214,
- 0x0075030F: 0x0215,
- 0x00550311: 0x0216,
- 0x00750311: 0x0217,
- 0x00530326: 0x0218,
- 0x00730326: 0x0219,
- 0x00540326: 0x021A,
- 0x00740326: 0x021B,
- 0x0048030C: 0x021E,
- 0x0068030C: 0x021F,
- 0x00410307: 0x0226,
- 0x00610307: 0x0227,
- 0x00450327: 0x0228,
- 0x00650327: 0x0229,
- 0x00D60304: 0x022A,
- 0x00F60304: 0x022B,
- 0x00D50304: 0x022C,
- 0x00F50304: 0x022D,
- 0x004F0307: 0x022E,
- 0x006F0307: 0x022F,
- 0x022E0304: 0x0230,
- 0x022F0304: 0x0231,
- 0x00590304: 0x0232,
- 0x00790304: 0x0233,
- 0x00A80301: 0x0385,
- 0x03910301: 0x0386,
- 0x03950301: 0x0388,
- 0x03970301: 0x0389,
- 0x03990301: 0x038A,
- 0x039F0301: 0x038C,
- 0x03A50301: 0x038E,
- 0x03A90301: 0x038F,
- 0x03CA0301: 0x0390,
- 0x03990308: 0x03AA,
- 0x03A50308: 0x03AB,
- 0x03B10301: 0x03AC,
- 0x03B50301: 0x03AD,
- 0x03B70301: 0x03AE,
- 0x03B90301: 0x03AF,
- 0x03CB0301: 0x03B0,
- 0x03B90308: 0x03CA,
- 0x03C50308: 0x03CB,
- 0x03BF0301: 0x03CC,
- 0x03C50301: 0x03CD,
- 0x03C90301: 0x03CE,
- 0x03D20301: 0x03D3,
- 0x03D20308: 0x03D4,
- 0x04150300: 0x0400,
- 0x04150308: 0x0401,
- 0x04130301: 0x0403,
- 0x04060308: 0x0407,
- 0x041A0301: 0x040C,
- 0x04180300: 0x040D,
- 0x04230306: 0x040E,
- 0x04180306: 0x0419,
- 0x04380306: 0x0439,
- 0x04350300: 0x0450,
- 0x04350308: 0x0451,
- 0x04330301: 0x0453,
- 0x04560308: 0x0457,
- 0x043A0301: 0x045C,
- 0x04380300: 0x045D,
- 0x04430306: 0x045E,
- 0x0474030F: 0x0476,
- 0x0475030F: 0x0477,
- 0x04160306: 0x04C1,
- 0x04360306: 0x04C2,
- 0x04100306: 0x04D0,
- 0x04300306: 0x04D1,
- 0x04100308: 0x04D2,
- 0x04300308: 0x04D3,
- 0x04150306: 0x04D6,
- 0x04350306: 0x04D7,
- 0x04D80308: 0x04DA,
- 0x04D90308: 0x04DB,
- 0x04160308: 0x04DC,
- 0x04360308: 0x04DD,
- 0x04170308: 0x04DE,
- 0x04370308: 0x04DF,
- 0x04180304: 0x04E2,
- 0x04380304: 0x04E3,
- 0x04180308: 0x04E4,
- 0x04380308: 0x04E5,
- 0x041E0308: 0x04E6,
- 0x043E0308: 0x04E7,
- 0x04E80308: 0x04EA,
- 0x04E90308: 0x04EB,
- 0x042D0308: 0x04EC,
- 0x044D0308: 0x04ED,
- 0x04230304: 0x04EE,
- 0x04430304: 0x04EF,
- 0x04230308: 0x04F0,
- 0x04430308: 0x04F1,
- 0x0423030B: 0x04F2,
- 0x0443030B: 0x04F3,
- 0x04270308: 0x04F4,
- 0x04470308: 0x04F5,
- 0x042B0308: 0x04F8,
- 0x044B0308: 0x04F9,
- 0x06270653: 0x0622,
- 0x06270654: 0x0623,
- 0x06480654: 0x0624,
- 0x06270655: 0x0625,
- 0x064A0654: 0x0626,
- 0x06D50654: 0x06C0,
- 0x06C10654: 0x06C2,
- 0x06D20654: 0x06D3,
- 0x0928093C: 0x0929,
- 0x0930093C: 0x0931,
- 0x0933093C: 0x0934,
- 0x09C709BE: 0x09CB,
- 0x09C709D7: 0x09CC,
- 0x0B470B56: 0x0B48,
- 0x0B470B3E: 0x0B4B,
- 0x0B470B57: 0x0B4C,
- 0x0B920BD7: 0x0B94,
- 0x0BC60BBE: 0x0BCA,
- 0x0BC70BBE: 0x0BCB,
- 0x0BC60BD7: 0x0BCC,
- 0x0C460C56: 0x0C48,
- 0x0CBF0CD5: 0x0CC0,
- 0x0CC60CD5: 0x0CC7,
- 0x0CC60CD6: 0x0CC8,
- 0x0CC60CC2: 0x0CCA,
- 0x0CCA0CD5: 0x0CCB,
- 0x0D460D3E: 0x0D4A,
- 0x0D470D3E: 0x0D4B,
- 0x0D460D57: 0x0D4C,
- 0x0DD90DCA: 0x0DDA,
- 0x0DD90DCF: 0x0DDC,
- 0x0DDC0DCA: 0x0DDD,
- 0x0DD90DDF: 0x0DDE,
- 0x1025102E: 0x1026,
- 0x1B051B35: 0x1B06,
- 0x1B071B35: 0x1B08,
- 0x1B091B35: 0x1B0A,
- 0x1B0B1B35: 0x1B0C,
- 0x1B0D1B35: 0x1B0E,
- 0x1B111B35: 0x1B12,
- 0x1B3A1B35: 0x1B3B,
- 0x1B3C1B35: 0x1B3D,
- 0x1B3E1B35: 0x1B40,
- 0x1B3F1B35: 0x1B41,
- 0x1B421B35: 0x1B43,
- 0x00410325: 0x1E00,
- 0x00610325: 0x1E01,
- 0x00420307: 0x1E02,
- 0x00620307: 0x1E03,
- 0x00420323: 0x1E04,
- 0x00620323: 0x1E05,
- 0x00420331: 0x1E06,
- 0x00620331: 0x1E07,
- 0x00C70301: 0x1E08,
- 0x00E70301: 0x1E09,
- 0x00440307: 0x1E0A,
- 0x00640307: 0x1E0B,
- 0x00440323: 0x1E0C,
- 0x00640323: 0x1E0D,
- 0x00440331: 0x1E0E,
- 0x00640331: 0x1E0F,
- 0x00440327: 0x1E10,
- 0x00640327: 0x1E11,
- 0x0044032D: 0x1E12,
- 0x0064032D: 0x1E13,
- 0x01120300: 0x1E14,
- 0x01130300: 0x1E15,
- 0x01120301: 0x1E16,
- 0x01130301: 0x1E17,
- 0x0045032D: 0x1E18,
- 0x0065032D: 0x1E19,
- 0x00450330: 0x1E1A,
- 0x00650330: 0x1E1B,
- 0x02280306: 0x1E1C,
- 0x02290306: 0x1E1D,
- 0x00460307: 0x1E1E,
- 0x00660307: 0x1E1F,
- 0x00470304: 0x1E20,
- 0x00670304: 0x1E21,
- 0x00480307: 0x1E22,
- 0x00680307: 0x1E23,
- 0x00480323: 0x1E24,
- 0x00680323: 0x1E25,
- 0x00480308: 0x1E26,
- 0x00680308: 0x1E27,
- 0x00480327: 0x1E28,
- 0x00680327: 0x1E29,
- 0x0048032E: 0x1E2A,
- 0x0068032E: 0x1E2B,
- 0x00490330: 0x1E2C,
- 0x00690330: 0x1E2D,
- 0x00CF0301: 0x1E2E,
- 0x00EF0301: 0x1E2F,
- 0x004B0301: 0x1E30,
- 0x006B0301: 0x1E31,
- 0x004B0323: 0x1E32,
- 0x006B0323: 0x1E33,
- 0x004B0331: 0x1E34,
- 0x006B0331: 0x1E35,
- 0x004C0323: 0x1E36,
- 0x006C0323: 0x1E37,
- 0x1E360304: 0x1E38,
- 0x1E370304: 0x1E39,
- 0x004C0331: 0x1E3A,
- 0x006C0331: 0x1E3B,
- 0x004C032D: 0x1E3C,
- 0x006C032D: 0x1E3D,
- 0x004D0301: 0x1E3E,
- 0x006D0301: 0x1E3F,
- 0x004D0307: 0x1E40,
- 0x006D0307: 0x1E41,
- 0x004D0323: 0x1E42,
- 0x006D0323: 0x1E43,
- 0x004E0307: 0x1E44,
- 0x006E0307: 0x1E45,
- 0x004E0323: 0x1E46,
- 0x006E0323: 0x1E47,
- 0x004E0331: 0x1E48,
- 0x006E0331: 0x1E49,
- 0x004E032D: 0x1E4A,
- 0x006E032D: 0x1E4B,
- 0x00D50301: 0x1E4C,
- 0x00F50301: 0x1E4D,
- 0x00D50308: 0x1E4E,
- 0x00F50308: 0x1E4F,
- 0x014C0300: 0x1E50,
- 0x014D0300: 0x1E51,
- 0x014C0301: 0x1E52,
- 0x014D0301: 0x1E53,
- 0x00500301: 0x1E54,
- 0x00700301: 0x1E55,
- 0x00500307: 0x1E56,
- 0x00700307: 0x1E57,
- 0x00520307: 0x1E58,
- 0x00720307: 0x1E59,
- 0x00520323: 0x1E5A,
- 0x00720323: 0x1E5B,
- 0x1E5A0304: 0x1E5C,
- 0x1E5B0304: 0x1E5D,
- 0x00520331: 0x1E5E,
- 0x00720331: 0x1E5F,
- 0x00530307: 0x1E60,
- 0x00730307: 0x1E61,
- 0x00530323: 0x1E62,
- 0x00730323: 0x1E63,
- 0x015A0307: 0x1E64,
- 0x015B0307: 0x1E65,
- 0x01600307: 0x1E66,
- 0x01610307: 0x1E67,
- 0x1E620307: 0x1E68,
- 0x1E630307: 0x1E69,
- 0x00540307: 0x1E6A,
- 0x00740307: 0x1E6B,
- 0x00540323: 0x1E6C,
- 0x00740323: 0x1E6D,
- 0x00540331: 0x1E6E,
- 0x00740331: 0x1E6F,
- 0x0054032D: 0x1E70,
- 0x0074032D: 0x1E71,
- 0x00550324: 0x1E72,
- 0x00750324: 0x1E73,
- 0x00550330: 0x1E74,
- 0x00750330: 0x1E75,
- 0x0055032D: 0x1E76,
- 0x0075032D: 0x1E77,
- 0x01680301: 0x1E78,
- 0x01690301: 0x1E79,
- 0x016A0308: 0x1E7A,
- 0x016B0308: 0x1E7B,
- 0x00560303: 0x1E7C,
- 0x00760303: 0x1E7D,
- 0x00560323: 0x1E7E,
- 0x00760323: 0x1E7F,
- 0x00570300: 0x1E80,
- 0x00770300: 0x1E81,
- 0x00570301: 0x1E82,
- 0x00770301: 0x1E83,
- 0x00570308: 0x1E84,
- 0x00770308: 0x1E85,
- 0x00570307: 0x1E86,
- 0x00770307: 0x1E87,
- 0x00570323: 0x1E88,
- 0x00770323: 0x1E89,
- 0x00580307: 0x1E8A,
- 0x00780307: 0x1E8B,
- 0x00580308: 0x1E8C,
- 0x00780308: 0x1E8D,
- 0x00590307: 0x1E8E,
- 0x00790307: 0x1E8F,
- 0x005A0302: 0x1E90,
- 0x007A0302: 0x1E91,
- 0x005A0323: 0x1E92,
- 0x007A0323: 0x1E93,
- 0x005A0331: 0x1E94,
- 0x007A0331: 0x1E95,
- 0x00680331: 0x1E96,
- 0x00740308: 0x1E97,
- 0x0077030A: 0x1E98,
- 0x0079030A: 0x1E99,
- 0x017F0307: 0x1E9B,
- 0x00410323: 0x1EA0,
- 0x00610323: 0x1EA1,
- 0x00410309: 0x1EA2,
- 0x00610309: 0x1EA3,
- 0x00C20301: 0x1EA4,
- 0x00E20301: 0x1EA5,
- 0x00C20300: 0x1EA6,
- 0x00E20300: 0x1EA7,
- 0x00C20309: 0x1EA8,
- 0x00E20309: 0x1EA9,
- 0x00C20303: 0x1EAA,
- 0x00E20303: 0x1EAB,
- 0x1EA00302: 0x1EAC,
- 0x1EA10302: 0x1EAD,
- 0x01020301: 0x1EAE,
- 0x01030301: 0x1EAF,
- 0x01020300: 0x1EB0,
- 0x01030300: 0x1EB1,
- 0x01020309: 0x1EB2,
- 0x01030309: 0x1EB3,
- 0x01020303: 0x1EB4,
- 0x01030303: 0x1EB5,
- 0x1EA00306: 0x1EB6,
- 0x1EA10306: 0x1EB7,
- 0x00450323: 0x1EB8,
- 0x00650323: 0x1EB9,
- 0x00450309: 0x1EBA,
- 0x00650309: 0x1EBB,
- 0x00450303: 0x1EBC,
- 0x00650303: 0x1EBD,
- 0x00CA0301: 0x1EBE,
- 0x00EA0301: 0x1EBF,
- 0x00CA0300: 0x1EC0,
- 0x00EA0300: 0x1EC1,
- 0x00CA0309: 0x1EC2,
- 0x00EA0309: 0x1EC3,
- 0x00CA0303: 0x1EC4,
- 0x00EA0303: 0x1EC5,
- 0x1EB80302: 0x1EC6,
- 0x1EB90302: 0x1EC7,
- 0x00490309: 0x1EC8,
- 0x00690309: 0x1EC9,
- 0x00490323: 0x1ECA,
- 0x00690323: 0x1ECB,
- 0x004F0323: 0x1ECC,
- 0x006F0323: 0x1ECD,
- 0x004F0309: 0x1ECE,
- 0x006F0309: 0x1ECF,
- 0x00D40301: 0x1ED0,
- 0x00F40301: 0x1ED1,
- 0x00D40300: 0x1ED2,
- 0x00F40300: 0x1ED3,
- 0x00D40309: 0x1ED4,
- 0x00F40309: 0x1ED5,
- 0x00D40303: 0x1ED6,
- 0x00F40303: 0x1ED7,
- 0x1ECC0302: 0x1ED8,
- 0x1ECD0302: 0x1ED9,
- 0x01A00301: 0x1EDA,
- 0x01A10301: 0x1EDB,
- 0x01A00300: 0x1EDC,
- 0x01A10300: 0x1EDD,
- 0x01A00309: 0x1EDE,
- 0x01A10309: 0x1EDF,
- 0x01A00303: 0x1EE0,
- 0x01A10303: 0x1EE1,
- 0x01A00323: 0x1EE2,
- 0x01A10323: 0x1EE3,
- 0x00550323: 0x1EE4,
- 0x00750323: 0x1EE5,
- 0x00550309: 0x1EE6,
- 0x00750309: 0x1EE7,
- 0x01AF0301: 0x1EE8,
- 0x01B00301: 0x1EE9,
- 0x01AF0300: 0x1EEA,
- 0x01B00300: 0x1EEB,
- 0x01AF0309: 0x1EEC,
- 0x01B00309: 0x1EED,
- 0x01AF0303: 0x1EEE,
- 0x01B00303: 0x1EEF,
- 0x01AF0323: 0x1EF0,
- 0x01B00323: 0x1EF1,
- 0x00590300: 0x1EF2,
- 0x00790300: 0x1EF3,
- 0x00590323: 0x1EF4,
- 0x00790323: 0x1EF5,
- 0x00590309: 0x1EF6,
- 0x00790309: 0x1EF7,
- 0x00590303: 0x1EF8,
- 0x00790303: 0x1EF9,
- 0x03B10313: 0x1F00,
- 0x03B10314: 0x1F01,
- 0x1F000300: 0x1F02,
- 0x1F010300: 0x1F03,
- 0x1F000301: 0x1F04,
- 0x1F010301: 0x1F05,
- 0x1F000342: 0x1F06,
- 0x1F010342: 0x1F07,
- 0x03910313: 0x1F08,
- 0x03910314: 0x1F09,
- 0x1F080300: 0x1F0A,
- 0x1F090300: 0x1F0B,
- 0x1F080301: 0x1F0C,
- 0x1F090301: 0x1F0D,
- 0x1F080342: 0x1F0E,
- 0x1F090342: 0x1F0F,
- 0x03B50313: 0x1F10,
- 0x03B50314: 0x1F11,
- 0x1F100300: 0x1F12,
- 0x1F110300: 0x1F13,
- 0x1F100301: 0x1F14,
- 0x1F110301: 0x1F15,
- 0x03950313: 0x1F18,
- 0x03950314: 0x1F19,
- 0x1F180300: 0x1F1A,
- 0x1F190300: 0x1F1B,
- 0x1F180301: 0x1F1C,
- 0x1F190301: 0x1F1D,
- 0x03B70313: 0x1F20,
- 0x03B70314: 0x1F21,
- 0x1F200300: 0x1F22,
- 0x1F210300: 0x1F23,
- 0x1F200301: 0x1F24,
- 0x1F210301: 0x1F25,
- 0x1F200342: 0x1F26,
- 0x1F210342: 0x1F27,
- 0x03970313: 0x1F28,
- 0x03970314: 0x1F29,
- 0x1F280300: 0x1F2A,
- 0x1F290300: 0x1F2B,
- 0x1F280301: 0x1F2C,
- 0x1F290301: 0x1F2D,
- 0x1F280342: 0x1F2E,
- 0x1F290342: 0x1F2F,
- 0x03B90313: 0x1F30,
- 0x03B90314: 0x1F31,
- 0x1F300300: 0x1F32,
- 0x1F310300: 0x1F33,
- 0x1F300301: 0x1F34,
- 0x1F310301: 0x1F35,
- 0x1F300342: 0x1F36,
- 0x1F310342: 0x1F37,
- 0x03990313: 0x1F38,
- 0x03990314: 0x1F39,
- 0x1F380300: 0x1F3A,
- 0x1F390300: 0x1F3B,
- 0x1F380301: 0x1F3C,
- 0x1F390301: 0x1F3D,
- 0x1F380342: 0x1F3E,
- 0x1F390342: 0x1F3F,
- 0x03BF0313: 0x1F40,
- 0x03BF0314: 0x1F41,
- 0x1F400300: 0x1F42,
- 0x1F410300: 0x1F43,
- 0x1F400301: 0x1F44,
- 0x1F410301: 0x1F45,
- 0x039F0313: 0x1F48,
- 0x039F0314: 0x1F49,
- 0x1F480300: 0x1F4A,
- 0x1F490300: 0x1F4B,
- 0x1F480301: 0x1F4C,
- 0x1F490301: 0x1F4D,
- 0x03C50313: 0x1F50,
- 0x03C50314: 0x1F51,
- 0x1F500300: 0x1F52,
- 0x1F510300: 0x1F53,
- 0x1F500301: 0x1F54,
- 0x1F510301: 0x1F55,
- 0x1F500342: 0x1F56,
- 0x1F510342: 0x1F57,
- 0x03A50314: 0x1F59,
- 0x1F590300: 0x1F5B,
- 0x1F590301: 0x1F5D,
- 0x1F590342: 0x1F5F,
- 0x03C90313: 0x1F60,
- 0x03C90314: 0x1F61,
- 0x1F600300: 0x1F62,
- 0x1F610300: 0x1F63,
- 0x1F600301: 0x1F64,
- 0x1F610301: 0x1F65,
- 0x1F600342: 0x1F66,
- 0x1F610342: 0x1F67,
- 0x03A90313: 0x1F68,
- 0x03A90314: 0x1F69,
- 0x1F680300: 0x1F6A,
- 0x1F690300: 0x1F6B,
- 0x1F680301: 0x1F6C,
- 0x1F690301: 0x1F6D,
- 0x1F680342: 0x1F6E,
- 0x1F690342: 0x1F6F,
- 0x03B10300: 0x1F70,
- 0x03B50300: 0x1F72,
- 0x03B70300: 0x1F74,
- 0x03B90300: 0x1F76,
- 0x03BF0300: 0x1F78,
- 0x03C50300: 0x1F7A,
- 0x03C90300: 0x1F7C,
- 0x1F000345: 0x1F80,
- 0x1F010345: 0x1F81,
- 0x1F020345: 0x1F82,
- 0x1F030345: 0x1F83,
- 0x1F040345: 0x1F84,
- 0x1F050345: 0x1F85,
- 0x1F060345: 0x1F86,
- 0x1F070345: 0x1F87,
- 0x1F080345: 0x1F88,
- 0x1F090345: 0x1F89,
- 0x1F0A0345: 0x1F8A,
- 0x1F0B0345: 0x1F8B,
- 0x1F0C0345: 0x1F8C,
- 0x1F0D0345: 0x1F8D,
- 0x1F0E0345: 0x1F8E,
- 0x1F0F0345: 0x1F8F,
- 0x1F200345: 0x1F90,
- 0x1F210345: 0x1F91,
- 0x1F220345: 0x1F92,
- 0x1F230345: 0x1F93,
- 0x1F240345: 0x1F94,
- 0x1F250345: 0x1F95,
- 0x1F260345: 0x1F96,
- 0x1F270345: 0x1F97,
- 0x1F280345: 0x1F98,
- 0x1F290345: 0x1F99,
- 0x1F2A0345: 0x1F9A,
- 0x1F2B0345: 0x1F9B,
- 0x1F2C0345: 0x1F9C,
- 0x1F2D0345: 0x1F9D,
- 0x1F2E0345: 0x1F9E,
- 0x1F2F0345: 0x1F9F,
- 0x1F600345: 0x1FA0,
- 0x1F610345: 0x1FA1,
- 0x1F620345: 0x1FA2,
- 0x1F630345: 0x1FA3,
- 0x1F640345: 0x1FA4,
- 0x1F650345: 0x1FA5,
- 0x1F660345: 0x1FA6,
- 0x1F670345: 0x1FA7,
- 0x1F680345: 0x1FA8,
- 0x1F690345: 0x1FA9,
- 0x1F6A0345: 0x1FAA,
- 0x1F6B0345: 0x1FAB,
- 0x1F6C0345: 0x1FAC,
- 0x1F6D0345: 0x1FAD,
- 0x1F6E0345: 0x1FAE,
- 0x1F6F0345: 0x1FAF,
- 0x03B10306: 0x1FB0,
- 0x03B10304: 0x1FB1,
- 0x1F700345: 0x1FB2,
- 0x03B10345: 0x1FB3,
- 0x03AC0345: 0x1FB4,
- 0x03B10342: 0x1FB6,
- 0x1FB60345: 0x1FB7,
- 0x03910306: 0x1FB8,
- 0x03910304: 0x1FB9,
- 0x03910300: 0x1FBA,
- 0x03910345: 0x1FBC,
- 0x00A80342: 0x1FC1,
- 0x1F740345: 0x1FC2,
- 0x03B70345: 0x1FC3,
- 0x03AE0345: 0x1FC4,
- 0x03B70342: 0x1FC6,
- 0x1FC60345: 0x1FC7,
- 0x03950300: 0x1FC8,
- 0x03970300: 0x1FCA,
- 0x03970345: 0x1FCC,
- 0x1FBF0300: 0x1FCD,
- 0x1FBF0301: 0x1FCE,
- 0x1FBF0342: 0x1FCF,
- 0x03B90306: 0x1FD0,
- 0x03B90304: 0x1FD1,
- 0x03CA0300: 0x1FD2,
- 0x03B90342: 0x1FD6,
- 0x03CA0342: 0x1FD7,
- 0x03990306: 0x1FD8,
- 0x03990304: 0x1FD9,
- 0x03990300: 0x1FDA,
- 0x1FFE0300: 0x1FDD,
- 0x1FFE0301: 0x1FDE,
- 0x1FFE0342: 0x1FDF,
- 0x03C50306: 0x1FE0,
- 0x03C50304: 0x1FE1,
- 0x03CB0300: 0x1FE2,
- 0x03C10313: 0x1FE4,
- 0x03C10314: 0x1FE5,
- 0x03C50342: 0x1FE6,
- 0x03CB0342: 0x1FE7,
- 0x03A50306: 0x1FE8,
- 0x03A50304: 0x1FE9,
- 0x03A50300: 0x1FEA,
- 0x03A10314: 0x1FEC,
- 0x00A80300: 0x1FED,
- 0x1F7C0345: 0x1FF2,
- 0x03C90345: 0x1FF3,
- 0x03CE0345: 0x1FF4,
- 0x03C90342: 0x1FF6,
- 0x1FF60345: 0x1FF7,
- 0x039F0300: 0x1FF8,
- 0x03A90300: 0x1FFA,
- 0x03A90345: 0x1FFC,
- 0x21900338: 0x219A,
- 0x21920338: 0x219B,
- 0x21940338: 0x21AE,
- 0x21D00338: 0x21CD,
- 0x21D40338: 0x21CE,
- 0x21D20338: 0x21CF,
- 0x22030338: 0x2204,
- 0x22080338: 0x2209,
- 0x220B0338: 0x220C,
- 0x22230338: 0x2224,
- 0x22250338: 0x2226,
- 0x223C0338: 0x2241,
- 0x22430338: 0x2244,
- 0x22450338: 0x2247,
- 0x22480338: 0x2249,
- 0x003D0338: 0x2260,
- 0x22610338: 0x2262,
- 0x224D0338: 0x226D,
- 0x003C0338: 0x226E,
- 0x003E0338: 0x226F,
- 0x22640338: 0x2270,
- 0x22650338: 0x2271,
- 0x22720338: 0x2274,
- 0x22730338: 0x2275,
- 0x22760338: 0x2278,
- 0x22770338: 0x2279,
- 0x227A0338: 0x2280,
- 0x227B0338: 0x2281,
- 0x22820338: 0x2284,
- 0x22830338: 0x2285,
- 0x22860338: 0x2288,
- 0x22870338: 0x2289,
- 0x22A20338: 0x22AC,
- 0x22A80338: 0x22AD,
- 0x22A90338: 0x22AE,
- 0x22AB0338: 0x22AF,
- 0x227C0338: 0x22E0,
- 0x227D0338: 0x22E1,
- 0x22910338: 0x22E2,
- 0x22920338: 0x22E3,
- 0x22B20338: 0x22EA,
- 0x22B30338: 0x22EB,
- 0x22B40338: 0x22EC,
- 0x22B50338: 0x22ED,
- 0x304B3099: 0x304C,
- 0x304D3099: 0x304E,
- 0x304F3099: 0x3050,
- 0x30513099: 0x3052,
- 0x30533099: 0x3054,
- 0x30553099: 0x3056,
- 0x30573099: 0x3058,
- 0x30593099: 0x305A,
- 0x305B3099: 0x305C,
- 0x305D3099: 0x305E,
- 0x305F3099: 0x3060,
- 0x30613099: 0x3062,
- 0x30643099: 0x3065,
- 0x30663099: 0x3067,
- 0x30683099: 0x3069,
- 0x306F3099: 0x3070,
- 0x306F309A: 0x3071,
- 0x30723099: 0x3073,
- 0x3072309A: 0x3074,
- 0x30753099: 0x3076,
- 0x3075309A: 0x3077,
- 0x30783099: 0x3079,
- 0x3078309A: 0x307A,
- 0x307B3099: 0x307C,
- 0x307B309A: 0x307D,
- 0x30463099: 0x3094,
- 0x309D3099: 0x309E,
- 0x30AB3099: 0x30AC,
- 0x30AD3099: 0x30AE,
- 0x30AF3099: 0x30B0,
- 0x30B13099: 0x30B2,
- 0x30B33099: 0x30B4,
- 0x30B53099: 0x30B6,
- 0x30B73099: 0x30B8,
- 0x30B93099: 0x30BA,
- 0x30BB3099: 0x30BC,
- 0x30BD3099: 0x30BE,
- 0x30BF3099: 0x30C0,
- 0x30C13099: 0x30C2,
- 0x30C43099: 0x30C5,
- 0x30C63099: 0x30C7,
- 0x30C83099: 0x30C9,
- 0x30CF3099: 0x30D0,
- 0x30CF309A: 0x30D1,
- 0x30D23099: 0x30D3,
- 0x30D2309A: 0x30D4,
- 0x30D53099: 0x30D6,
- 0x30D5309A: 0x30D7,
- 0x30D83099: 0x30D9,
- 0x30D8309A: 0x30DA,
- 0x30DB3099: 0x30DC,
- 0x30DB309A: 0x30DD,
- 0x30A63099: 0x30F4,
- 0x30EF3099: 0x30F7,
- 0x30F03099: 0x30F8,
- 0x30F13099: 0x30F9,
- 0x30F23099: 0x30FA,
- 0x30FD3099: 0x30FE,
- 0x109910BA: 0x1109A,
- 0x109B10BA: 0x1109C,
- 0x10A510BA: 0x110AB,
- 0x11311127: 0x1112E,
- 0x11321127: 0x1112F,
- 0x1347133E: 0x1134B,
- 0x13471357: 0x1134C,
- 0x14B914BA: 0x114BB,
- 0x14B914B0: 0x114BC,
- 0x14B914BD: 0x114BE,
- 0x15B815AF: 0x115BA,
- 0x15B915AF: 0x115BB,
-}
+var recompMap map[uint32]rune
+var recompMapOnce sync.Once
-// Total size of tables: 53KB (53976 bytes)
+const recompMapPacked = "" +
+ "\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0
+ "\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1
+ "\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2
+ "\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3
+ "\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4
+ "\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5
+ "\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7
+ "\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8
+ "\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9
+ "\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA
+ "\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB
+ "\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC
+ "\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD
+ "\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE
+ "\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF
+ "\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1
+ "\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2
+ "\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3
+ "\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4
+ "\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5
+ "\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6
+ "\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9
+ "\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA
+ "\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB
+ "\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC
+ "\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD
+ "\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0
+ "\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1
+ "\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2
+ "\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3
+ "\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4
+ "\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5
+ "\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7
+ "\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8
+ "\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9
+ "\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA
+ "\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB
+ "\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC
+ "\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED
+ "\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE
+ "\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF
+ "\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1
+ "\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2
+ "\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3
+ "\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4
+ "\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5
+ "\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6
+ "\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9
+ "\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA
+ "\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB
+ "\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC
+ "\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD
+ "\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF
+ "\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100
+ "\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101
+ "\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102
+ "\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103
+ "\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104
+ "\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105
+ "\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106
+ "\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107
+ "\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108
+ "\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109
+ "\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A
+ "\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B
+ "\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C
+ "\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D
+ "\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E
+ "\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F
+ "\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112
+ "\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113
+ "\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114
+ "\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115
+ "\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116
+ "\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117
+ "\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118
+ "\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119
+ "\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A
+ "\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B
+ "\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C
+ "\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D
+ "\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E
+ "\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F
+ "\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120
+ "\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121
+ "\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122
+ "\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123
+ "\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124
+ "\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125
+ "\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128
+ "\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129
+ "\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A
+ "\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B
+ "\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C
+ "\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D
+ "\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E
+ "\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F
+ "\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130
+ "\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134
+ "\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135
+ "\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136
+ "\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137
+ "\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139
+ "\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A
+ "\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B
+ "\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C
+ "\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D
+ "\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E
+ "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143
+ "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144
+ "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145
+ "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146
+ "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147
+ "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148
+ "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C
+ "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D
+ "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E
+ "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F
+ "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150
+ "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151
+ "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154
+ "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155
+ "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156
+ "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157
+ "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158
+ "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159
+ "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A
+ "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B
+ "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C
+ "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D
+ "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E
+ "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F
+ "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160
+ "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161
+ "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162
+ "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163
+ "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164
+ "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165
+ "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168
+ "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169
+ "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A
+ "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B
+ "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C
+ "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D
+ "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E
+ "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F
+ "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170
+ "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171
+ "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172
+ "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173
+ "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174
+ "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175
+ "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176
+ "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177
+ "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178
+ "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179
+ "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A
+ "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B
+ "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C
+ "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D
+ "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E
+ "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0
+ "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1
+ "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF
+ "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0
+ "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD
+ "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE
+ "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF
+ "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0
+ "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1
+ "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2
+ "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3
+ "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4
+ "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5
+ "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6
+ "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7
+ "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8
+ "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9
+ "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA
+ "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB
+ "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC
+ "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE
+ "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF
+ "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0
+ "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1
+ "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2
+ "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3
+ "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6
+ "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7
+ "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8
+ "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9
+ "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA
+ "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB
+ "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC
+ "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED
+ "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE
+ "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF
+ "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0
+ "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4
+ "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5
+ "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8
+ "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9
+ "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA
+ "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB
+ "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC
+ "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD
+ "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE
+ "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF
+ "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200
+ "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201
+ "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202
+ "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203
+ "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204
+ "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205
+ "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206
+ "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207
+ "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208
+ "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209
+ "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A
+ "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B
+ "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C
+ "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D
+ "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E
+ "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F
+ "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210
+ "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211
+ "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212
+ "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213
+ "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214
+ "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215
+ "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216
+ "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217
+ "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218
+ "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219
+ "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A
+ "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B
+ "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E
+ "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F
+ "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226
+ "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227
+ "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228
+ "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229
+ "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A
+ "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B
+ "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C
+ "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D
+ "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E
+ "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F
+ "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230
+ "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231
+ "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232
+ "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233
+ "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385
+ "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386
+ "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388
+ "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389
+ "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A
+ "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C
+ "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E
+ "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F
+ "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390
+ "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA
+ "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB
+ "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC
+ "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD
+ "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE
+ "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF
+ "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0
+ "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA
+ "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB
+ "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC
+ "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD
+ "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE
+ "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3
+ "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4
+ "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400
+ "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401
+ "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403
+ "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407
+ "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C
+ "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D
+ "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E
+ "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419
+ "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439
+ "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450
+ "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451
+ "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453
+ "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457
+ "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C
+ "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D
+ "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E
+ "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476
+ "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477
+ "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1
+ "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2
+ "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0
+ "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1
+ "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2
+ "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3
+ "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6
+ "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7
+ "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA
+ "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB
+ "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC
+ "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD
+ "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE
+ "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF
+ "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2
+ "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3
+ "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4
+ "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5
+ "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6
+ "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7
+ "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA
+ "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB
+ "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC
+ "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED
+ "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE
+ "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF
+ "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0
+ "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1
+ "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2
+ "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3
+ "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4
+ "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5
+ "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8
+ "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9
+ "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622
+ "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623
+ "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624
+ "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625
+ "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626
+ "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0
+ "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2
+ "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3
+ "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929
+ "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931
+ "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934
+ "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB
+ "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC
+ "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48
+ "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B
+ "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C
+ "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94
+ "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA
+ "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB
+ "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC
+ "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48
+ "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0
+ "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7
+ "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8
+ "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA
+ "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB
+ "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A
+ "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B
+ "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C
+ "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA
+ "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC
+ "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD
+ "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE
+ "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026
+ "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06
+ "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08
+ "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A
+ "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C
+ "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E
+ "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12
+ "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B
+ "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D
+ "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40
+ "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41
+ "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43
+ "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00
+ "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01
+ "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02
+ "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03
+ "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04
+ "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05
+ "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06
+ "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07
+ "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08
+ "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09
+ "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A
+ "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B
+ "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C
+ "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D
+ "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E
+ "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F
+ "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10
+ "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11
+ "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12
+ "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13
+ "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14
+ "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15
+ "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16
+ "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17
+ "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18
+ "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19
+ "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A
+ "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B
+ "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C
+ "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D
+ "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E
+ "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F
+ "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20
+ "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21
+ "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22
+ "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23
+ "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24
+ "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25
+ "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26
+ "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27
+ "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28
+ "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29
+ "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A
+ "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B
+ "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C
+ "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D
+ "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E
+ "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F
+ "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30
+ "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31
+ "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32
+ "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33
+ "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34
+ "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35
+ "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36
+ "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37
+ "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38
+ "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39
+ "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A
+ "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B
+ "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C
+ "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D
+ "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E
+ "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F
+ "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40
+ "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41
+ "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42
+ "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43
+ "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44
+ "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45
+ "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46
+ "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47
+ "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48
+ "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49
+ "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A
+ "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B
+ "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C
+ "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D
+ "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E
+ "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F
+ "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50
+ "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51
+ "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52
+ "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53
+ "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54
+ "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55
+ "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56
+ "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57
+ "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58
+ "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59
+ "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A
+ "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B
+ "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C
+ "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D
+ "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E
+ "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F
+ "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60
+ "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61
+ "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62
+ "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63
+ "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64
+ "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65
+ "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66
+ "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67
+ "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68
+ "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69
+ "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A
+ "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B
+ "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C
+ "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D
+ "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E
+ "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F
+ "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70
+ "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71
+ "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72
+ "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73
+ "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74
+ "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75
+ "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76
+ "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77
+ "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78
+ "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79
+ "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A
+ "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B
+ "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C
+ "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D
+ "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E
+ "\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F
+ "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80
+ "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81
+ "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82
+ "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83
+ "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84
+ "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85
+ "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86
+ "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87
+ "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88
+ "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89
+ "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A
+ "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B
+ "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C
+ "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D
+ "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E
+ "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F
+ "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90
+ "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91
+ "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92
+ "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93
+ "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94
+ "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95
+ "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96
+ "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97
+ "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98
+ "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99
+ "\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B
+ "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0
+ "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1
+ "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2
+ "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3
+ "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4
+ "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5
+ "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6
+ "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7
+ "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8
+ "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9
+ "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA
+ "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB
+ "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC
+ "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD
+ "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE
+ "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF
+ "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0
+ "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1
+ "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2
+ "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3
+ "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4
+ "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5
+ "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6
+ "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7
+ "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8
+ "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9
+ "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA
+ "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB
+ "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC
+ "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD
+ "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE
+ "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF
+ "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0
+ "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1
+ "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2
+ "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3
+ "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4
+ "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5
+ "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6
+ "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7
+ "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8
+ "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9
+ "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA
+ "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB
+ "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC
+ "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD
+ "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE
+ "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF
+ "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0
+ "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1
+ "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2
+ "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3
+ "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4
+ "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5
+ "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6
+ "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7
+ "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8
+ "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9
+ "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA
+ "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB
+ "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC
+ "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD
+ "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE
+ "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF
+ "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0
+ "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1
+ "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2
+ "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3
+ "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4
+ "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5
+ "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6
+ "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7
+ "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8
+ "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9
+ "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA
+ "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB
+ "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC
+ "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED
+ "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE
+ "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF
+ "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0
+ "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1
+ "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2
+ "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3
+ "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4
+ "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5
+ "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6
+ "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7
+ "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8
+ "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9
+ "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00
+ "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01
+ "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02
+ "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03
+ "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04
+ "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05
+ "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06
+ "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07
+ "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08
+ "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09
+ "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A
+ "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B
+ "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C
+ "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D
+ "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E
+ "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F
+ "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10
+ "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11
+ "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12
+ "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13
+ "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14
+ "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15
+ "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18
+ "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19
+ "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A
+ "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B
+ "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C
+ "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D
+ "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20
+ "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21
+ "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22
+ "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23
+ "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24
+ "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25
+ "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26
+ "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27
+ "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28
+ "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29
+ "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A
+ "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B
+ "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C
+ "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D
+ "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E
+ "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F
+ "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30
+ "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31
+ "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32
+ "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33
+ "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34
+ "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35
+ "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36
+ "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37
+ "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38
+ "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39
+ "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A
+ "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B
+ "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C
+ "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D
+ "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E
+ "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F
+ "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40
+ "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41
+ "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42
+ "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43
+ "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44
+ "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45
+ "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48
+ "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49
+ "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A
+ "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B
+ "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C
+ "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D
+ "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50
+ "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51
+ "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52
+ "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53
+ "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54
+ "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55
+ "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56
+ "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57
+ "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59
+ "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B
+ "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D
+ "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F
+ "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60
+ "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61
+ "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62
+ "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63
+ "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64
+ "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65
+ "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66
+ "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67
+ "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68
+ "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69
+ "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A
+ "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B
+ "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C
+ "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D
+ "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E
+ "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F
+ "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70
+ "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72
+ "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74
+ "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76
+ "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78
+ "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A
+ "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C
+ "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80
+ "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81
+ "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82
+ "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83
+ "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84
+ "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85
+ "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86
+ "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87
+ "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88
+ "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89
+ "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A
+ "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B
+ "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C
+ "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D
+ "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E
+ "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F
+ "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90
+ "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91
+ "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92
+ "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93
+ "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94
+ "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95
+ "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96
+ "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97
+ "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98
+ "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99
+ "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A
+ "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B
+ "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C
+ "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D
+ "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E
+ "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F
+ "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0
+ "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1
+ "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2
+ "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3
+ "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4
+ "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5
+ "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6
+ "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7
+ "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8
+ "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9
+ "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA
+ "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB
+ "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC
+ "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD
+ "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE
+ "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF
+ "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0
+ "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1
+ "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2
+ "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3
+ "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4
+ "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6
+ "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7
+ "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8
+ "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9
+ "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA
+ "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC
+ "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1
+ "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2
+ "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3
+ "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4
+ "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6
+ "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7
+ "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8
+ "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA
+ "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC
+ "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD
+ "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE
+ "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF
+ "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0
+ "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1
+ "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2
+ "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6
+ "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7
+ "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8
+ "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9
+ "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA
+ "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD
+ "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE
+ "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF
+ "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0
+ "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1
+ "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2
+ "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4
+ "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5
+ "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6
+ "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7
+ "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8
+ "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9
+ "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA
+ "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC
+ "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED
+ "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2
+ "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3
+ "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4
+ "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6
+ "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7
+ "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8
+ "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA
+ "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC
+ "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A
+ "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B
+ "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE
+ "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD
+ "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE
+ "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF
+ "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204
+ "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209
+ "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C
+ "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224
+ "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226
+ "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241
+ "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244
+ "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247
+ "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249
+ "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260
+ "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262
+ "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D
+ "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E
+ "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F
+ "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270
+ "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271
+ "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274
+ "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275
+ "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278
+ "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279
+ "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280
+ "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281
+ "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284
+ "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285
+ "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288
+ "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289
+ "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC
+ "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD
+ "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE
+ "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF
+ "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0
+ "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1
+ "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2
+ "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3
+ "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA
+ "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB
+ "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC
+ "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED
+ "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C
+ "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E
+ "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050
+ "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052
+ "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054
+ "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056
+ "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058
+ "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A
+ "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C
+ "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E
+ "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060
+ "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062
+ "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065
+ "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067
+ "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069
+ "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070
+ "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071
+ "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073
+ "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074
+ "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076
+ "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077
+ "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079
+ "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A
+ "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C
+ "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D
+ "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094
+ "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E
+ "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC
+ "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE
+ "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0
+ "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2
+ "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4
+ "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6
+ "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8
+ "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA
+ "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC
+ "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE
+ "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0
+ "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2
+ "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5
+ "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7
+ "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9
+ "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0
+ "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1
+ "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3
+ "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4
+ "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6
+ "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7
+ "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9
+ "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA
+ "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC
+ "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD
+ "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4
+ "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7
+ "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8
+ "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9
+ "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA
+ "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE
+ "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A
+ "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C
+ "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB
+ "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E
+ "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F
+ "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B
+ "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C
+ "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB
+ "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC
+ "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE
+ "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA
+ "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB
+ ""
+ // Total size of tables: 53KB (54006 bytes)
diff --git a/vendor/golang.org/x/text/unicode/norm/transform.go b/vendor/golang.org/x/text/unicode/norm/transform.go
index 8589067cd..a1d366ae4 100644
--- a/vendor/golang.org/x/text/unicode/norm/transform.go
+++ b/vendor/golang.org/x/text/unicode/norm/transform.go
@@ -18,7 +18,6 @@ func (Form) Reset() {}
// Users should either catch ErrShortDst and allow dst to grow or have dst be at
// least of size MaxTransformChunkSize to be guaranteed of progress.
func (f Form) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
- n := 0
// Cap the maximum number of src bytes to check.
b := src
eof := atEOF
@@ -27,20 +26,21 @@ func (f Form) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error)
eof = false
b = b[:ns]
}
- i, ok := formTable[f].quickSpan(inputBytes(b), n, len(b), eof)
- n += copy(dst[n:], b[n:i])
+ i, ok := formTable[f].quickSpan(inputBytes(b), 0, len(b), eof)
+ n := copy(dst, b[:i])
if !ok {
nDst, nSrc, err = f.transform(dst[n:], src[n:], atEOF)
return nDst + n, nSrc + n, err
}
- if n < len(src) && !atEOF {
+
+ if err == nil && n < len(src) && !atEOF {
err = transform.ErrShortSrc
}
return n, n, err
}
func flushTransform(rb *reorderBuffer) bool {
- // Write out (must fully fit in dst, or else it is a ErrShortDst).
+ // Write out (must fully fit in dst, or else it is an ErrShortDst).
if len(rb.out) < rb.nrune*utf8.UTFMax {
return false
}
@@ -79,7 +79,7 @@ func (f Form) transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error)
nSrc += n
nDst += n
if ok {
- if n < rb.nsrc && !atEOF {
+ if err == nil && n < rb.nsrc && !atEOF {
err = transform.ErrShortSrc
}
return nDst, nSrc, err
diff --git a/vendor/golang.org/x/time/README b/vendor/golang.org/x/time/README
deleted file mode 100644
index 144e347b4..000000000
--- a/vendor/golang.org/x/time/README
+++ /dev/null
@@ -1 +0,0 @@
-This repository provides supplementary Go time packages.
diff --git a/vendor/golang.org/x/time/README.md b/vendor/golang.org/x/time/README.md
new file mode 100644
index 000000000..ce9becdde
--- /dev/null
+++ b/vendor/golang.org/x/time/README.md
@@ -0,0 +1,17 @@
+# Go Time
+
+This repository provides supplementary Go time packages.
+
+## Download/Install
+
+The easiest way to install is to run `go get -u golang.org/x/time`. You can
+also manually git clone the repository to `$GOPATH/src/golang.org/x/time`.
+
+## Report Issues / Send Patches
+
+This repository uses Gerrit for code changes. To learn how to submit changes to
+this repository, see https://golang.org/doc/contribute.html.
+
+The main issue tracker for the time repository is located at
+https://github.com/golang/go/issues. Prefix your issue with "x/time:" in the
+subject line, so it is easy to find.
diff --git a/vendor/golang.org/x/time/rate/rate.go b/vendor/golang.org/x/time/rate/rate.go
index 938feaffe..ae93e2471 100644
--- a/vendor/golang.org/x/time/rate/rate.go
+++ b/vendor/golang.org/x/time/rate/rate.go
@@ -6,12 +6,11 @@
package rate
import (
+ "context"
"fmt"
"math"
"sync"
"time"
-
- "golang.org/x/net/context"
)
// Limit defines the maximum frequency of some events.
@@ -244,8 +243,12 @@ func (lim *Limiter) WaitN(ctx context.Context, n int) (err error) {
if !r.ok {
return fmt.Errorf("rate: Wait(n=%d) would exceed context deadline", n)
}
- // Wait
- t := time.NewTimer(r.DelayFrom(now))
+ // Wait if necessary
+ delay := r.DelayFrom(now)
+ if delay == 0 {
+ return nil
+ }
+ t := time.NewTimer(delay)
defer t.Stop()
select {
case <-t.C:
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/README.md b/vendor/gopkg.in/cheggaaa/pb.v1/README.md
index 31babb305..1295df70e 100644
--- a/vendor/gopkg.in/cheggaaa/pb.v1/README.md
+++ b/vendor/gopkg.in/cheggaaa/pb.v1/README.md
@@ -1,7 +1,8 @@
# Terminal progress bar for Go
-Simple progress bar for console programs.
-
+Simple progress bar for console programs.
+
+Please check the new version https://github.com/cheggaaa/pb/tree/v2 (currently, it's beta)
## Installation
@@ -170,7 +171,7 @@ The result will be as follows:
```
$ go run example/multiple.go
-First 141 / 1000 [===============>---------------------------------------] 14.10 % 44s
-Second 139 / 1000 [==============>---------------------------------------] 13.90 % 44s
-Third 152 / 1000 [================>--------------------------------------] 15.20 % 40s
+First 34 / 200 [=========>---------------------------------------------] 17.00% 00m08s
+Second 42 / 200 [===========>------------------------------------------] 21.00% 00m06s
+Third 36 / 200 [=========>---------------------------------------------] 18.00% 00m08s
```
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/format.go b/vendor/gopkg.in/cheggaaa/pb.v1/format.go
index d5aeff793..8bb8a7a1d 100644
--- a/vendor/gopkg.in/cheggaaa/pb.v1/format.go
+++ b/vendor/gopkg.in/cheggaaa/pb.v1/format.go
@@ -2,7 +2,6 @@ package pb
import (
"fmt"
- "strings"
"time"
)
@@ -11,12 +10,26 @@ type Units int
const (
// U_NO are default units, they represent a simple value and are not formatted at all.
U_NO Units = iota
- // U_BYTES units are formatted in a human readable way (b, Bb, Mb, ...)
+ // U_BYTES units are formatted in a human readable way (B, KiB, MiB, ...)
U_BYTES
+ // U_BYTES_DEC units are like U_BYTES, but base 10 (B, KB, MB, ...)
+ U_BYTES_DEC
// U_DURATION units are formatted in a human readable way (3h14m15s)
U_DURATION
)
+const (
+ KiB = 1024
+ MiB = 1048576
+ GiB = 1073741824
+ TiB = 1099511627776
+
+ KB = 1e3
+ MB = 1e6
+ GB = 1e9
+ TB = 1e12
+)
+
func Format(i int64) *formatter {
return &formatter{n: i}
}
@@ -28,11 +41,6 @@ type formatter struct {
perSec bool
}
-func (f *formatter) Value(n int64) *formatter {
- f.n = n
- return f
-}
-
func (f *formatter) To(unit Units) *formatter {
f.unit = unit
return f
@@ -52,13 +60,10 @@ func (f *formatter) String() (out string) {
switch f.unit {
case U_BYTES:
out = formatBytes(f.n)
+ case U_BYTES_DEC:
+ out = formatBytesDec(f.n)
case U_DURATION:
- d := time.Duration(f.n)
- if d > time.Hour*24 {
- out = fmt.Sprintf("%dd", d/24/time.Hour)
- d -= (d / time.Hour / 24) * (time.Hour * 24)
- }
- out = fmt.Sprintf("%s%v", out, d)
+ out = formatDuration(f.n)
default:
out = fmt.Sprintf(fmt.Sprintf("%%%dd", f.width), f.n)
}
@@ -68,20 +73,53 @@ func (f *formatter) String() (out string) {
return
}
-// Convert bytes to human readable string. Like a 2 MB, 64.2 KB, 52 B
+// Convert bytes to human readable string. Like 2 MiB, 64.2 KiB, 52 B
func formatBytes(i int64) (result string) {
switch {
- case i > (1024 * 1024 * 1024 * 1024):
- result = fmt.Sprintf("%.02f TB", float64(i)/1024/1024/1024/1024)
- case i > (1024 * 1024 * 1024):
- result = fmt.Sprintf("%.02f GB", float64(i)/1024/1024/1024)
- case i > (1024 * 1024):
- result = fmt.Sprintf("%.02f MB", float64(i)/1024/1024)
- case i > 1024:
- result = fmt.Sprintf("%.02f KB", float64(i)/1024)
+ case i >= TiB:
+ result = fmt.Sprintf("%.02f TiB", float64(i)/TiB)
+ case i >= GiB:
+ result = fmt.Sprintf("%.02f GiB", float64(i)/GiB)
+ case i >= MiB:
+ result = fmt.Sprintf("%.02f MiB", float64(i)/MiB)
+ case i >= KiB:
+ result = fmt.Sprintf("%.02f KiB", float64(i)/KiB)
default:
result = fmt.Sprintf("%d B", i)
}
- result = strings.Trim(result, " ")
+ return
+}
+
+// Convert bytes to base-10 human readable string. Like 2 MB, 64.2 KB, 52 B
+func formatBytesDec(i int64) (result string) {
+ switch {
+ case i >= TB:
+ result = fmt.Sprintf("%.02f TB", float64(i)/TB)
+ case i >= GB:
+ result = fmt.Sprintf("%.02f GB", float64(i)/GB)
+ case i >= MB:
+ result = fmt.Sprintf("%.02f MB", float64(i)/MB)
+ case i >= KB:
+ result = fmt.Sprintf("%.02f KB", float64(i)/KB)
+ default:
+ result = fmt.Sprintf("%d B", i)
+ }
+ return
+}
+
+func formatDuration(n int64) (result string) {
+ d := time.Duration(n)
+ if d > time.Hour*24 {
+ result = fmt.Sprintf("%dd", d/24/time.Hour)
+ d -= (d / time.Hour / 24) * (time.Hour * 24)
+ }
+ if d > time.Hour {
+ result = fmt.Sprintf("%s%dh", result, d/time.Hour)
+ d -= d / time.Hour * time.Hour
+ }
+ m := d / time.Minute
+ d -= m * time.Minute
+ s := d / time.Second
+ result = fmt.Sprintf("%s%02dm%02ds", result, m, s)
return
}
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/pb.go b/vendor/gopkg.in/cheggaaa/pb.v1/pb.go
index f1f15bff3..e03291b89 100644
--- a/vendor/gopkg.in/cheggaaa/pb.v1/pb.go
+++ b/vendor/gopkg.in/cheggaaa/pb.v1/pb.go
@@ -13,7 +13,7 @@ import (
)
// Current version
-const Version = "1.0.6"
+const Version = "1.0.27"
const (
// Default refresh rate - 200ms
@@ -37,18 +37,17 @@ func New(total int) *ProgressBar {
// Create new progress bar object using int64 as total
func New64(total int64) *ProgressBar {
pb := &ProgressBar{
- Total: total,
- RefreshRate: DEFAULT_REFRESH_RATE,
- ShowPercent: true,
- ShowCounters: true,
- ShowBar: true,
- ShowTimeLeft: true,
- ShowFinalTime: true,
- Units: U_NO,
- ManualUpdate: false,
- finish: make(chan struct{}),
- currentValue: -1,
- mu: new(sync.Mutex),
+ Total: total,
+ RefreshRate: DEFAULT_REFRESH_RATE,
+ ShowPercent: true,
+ ShowCounters: true,
+ ShowBar: true,
+ ShowTimeLeft: true,
+ ShowElapsedTime: false,
+ ShowFinalTime: true,
+ Units: U_NO,
+ ManualUpdate: false,
+ finish: make(chan struct{}),
}
return pb.Format(FORMAT)
}
@@ -67,13 +66,14 @@ func StartNew(total int) *ProgressBar {
type Callback func(out string)
type ProgressBar struct {
- current int64 // current must be first member of struct (https://code.google.com/p/go/issues/detail?id=5278)
+ current int64 // current must be first member of struct (https://code.google.com/p/go/issues/detail?id=5278)
+ previous int64
Total int64
RefreshRate time.Duration
ShowPercent, ShowCounters bool
ShowSpeed, ShowTimeLeft, ShowBar bool
- ShowFinalTime bool
+ ShowFinalTime, ShowElapsedTime bool
Output io.Writer
Callback Callback
NotPrint bool
@@ -91,13 +91,14 @@ type ProgressBar struct {
finish chan struct{}
isFinish bool
- startTime time.Time
- startValue int64
- currentValue int64
+ startTime time.Time
+ startValue int64
+
+ changeTime time.Time
prefix, postfix string
- mu *sync.Mutex
+ mu sync.Mutex
lastPrint string
BarStart string
@@ -112,8 +113,8 @@ type ProgressBar struct {
// Start print
func (pb *ProgressBar) Start() *ProgressBar {
pb.startTime = time.Now()
- pb.startValue = pb.current
- if pb.Total == 0 {
+ pb.startValue = atomic.LoadInt64(&pb.current)
+ if atomic.LoadInt64(&pb.Total) == 0 {
pb.ShowTimeLeft = false
pb.ShowPercent = false
pb.AutoStat = false
@@ -158,12 +159,16 @@ func (pb *ProgressBar) Add64(add int64) int64 {
// Set prefix string
func (pb *ProgressBar) Prefix(prefix string) *ProgressBar {
+ pb.mu.Lock()
+ defer pb.mu.Unlock()
pb.prefix = prefix
return pb
}
// Set postfix string
func (pb *ProgressBar) Postfix(postfix string) *ProgressBar {
+ pb.mu.Lock()
+ defer pb.mu.Unlock()
pb.postfix = postfix
return pb
}
@@ -173,7 +178,7 @@ func (pb *ProgressBar) Postfix(postfix string) *ProgressBar {
// Example: bar.Format("[\x00=\x00>\x00-\x00]") // \x00 is the delimiter
func (pb *ProgressBar) Format(format string) *ProgressBar {
var formatEntries []string
- if len(format) == 5 {
+ if utf8.RuneCountInString(format) == 5 {
formatEntries = strings.Split(format, "")
} else {
formatEntries = strings.Split(format, "\x00")
@@ -221,7 +226,9 @@ func (pb *ProgressBar) Finish() {
//Protect multiple calls
pb.finishOnce.Do(func() {
close(pb.finish)
- pb.write(atomic.LoadInt64(&pb.current))
+ pb.write(atomic.LoadInt64(&pb.Total), atomic.LoadInt64(&pb.current))
+ pb.mu.Lock()
+ defer pb.mu.Unlock()
switch {
case pb.Output != nil:
fmt.Fprintln(pb.Output)
@@ -232,6 +239,13 @@ func (pb *ProgressBar) Finish() {
})
}
+// IsFinished return boolean
+func (pb *ProgressBar) IsFinished() bool {
+ pb.mu.Lock()
+ defer pb.mu.Unlock()
+ return pb.isFinish
+}
+
// End print and write string 'str'
func (pb *ProgressBar) FinishPrint(str string) {
pb.Finish()
@@ -262,16 +276,18 @@ func (pb *ProgressBar) NewProxyReader(r io.Reader) *Reader {
return &Reader{r, pb}
}
-func (pb *ProgressBar) write(current int64) {
+func (pb *ProgressBar) write(total, current int64) {
+ pb.mu.Lock()
+ defer pb.mu.Unlock()
width := pb.GetWidth()
- var percentBox, countersBox, timeLeftBox, speedBox, barBox, end, out string
+ var percentBox, countersBox, timeLeftBox, timeSpentBox, speedBox, barBox, end, out string
// percents
if pb.ShowPercent {
var percent float64
- if pb.Total > 0 {
- percent = float64(current) / (float64(pb.Total) / float64(100))
+ if total > 0 {
+ percent = float64(current) / (float64(total) / float64(100))
} else {
percent = float64(current) / float64(100)
}
@@ -281,17 +297,24 @@ func (pb *ProgressBar) write(current int64) {
// counters
if pb.ShowCounters {
current := Format(current).To(pb.Units).Width(pb.UnitsWidth)
- if pb.Total > 0 {
- total := Format(pb.Total).To(pb.Units).Width(pb.UnitsWidth)
- countersBox = fmt.Sprintf(" %s / %s ", current, total)
+ if total > 0 {
+ totalS := Format(total).To(pb.Units).Width(pb.UnitsWidth)
+ countersBox = fmt.Sprintf(" %s / %s ", current, totalS)
} else {
countersBox = fmt.Sprintf(" %s / ? ", current)
}
}
// time left
- fromStart := time.Now().Sub(pb.startTime)
currentFromStart := current - pb.startValue
+ fromStart := time.Now().Sub(pb.startTime)
+ lastChangeTime := pb.changeTime
+ fromChange := lastChangeTime.Sub(pb.startTime)
+
+ if pb.ShowElapsedTime {
+ timeSpentBox = fmt.Sprintf(" %s ", (fromStart/time.Second)*time.Second)
+ }
+
select {
case <-pb.finish:
if pb.ShowFinalTime {
@@ -301,17 +324,20 @@ func (pb *ProgressBar) write(current int64) {
}
default:
if pb.ShowTimeLeft && currentFromStart > 0 {
- perEntry := fromStart / time.Duration(currentFromStart)
+ perEntry := fromChange / time.Duration(currentFromStart)
var left time.Duration
- if pb.Total > 0 {
- left = time.Duration(pb.Total-currentFromStart) * perEntry
+ if total > 0 {
+ left = time.Duration(total-currentFromStart) * perEntry
+ left -= time.Since(lastChangeTime)
left = (left / time.Second) * time.Second
} else {
left = time.Duration(currentFromStart) * perEntry
left = (left / time.Second) * time.Second
}
- timeLeft := Format(int64(left)).To(U_DURATION).String()
- timeLeftBox = fmt.Sprintf(" %s", timeLeft)
+ if left > 0 {
+ timeLeft := Format(int64(left)).To(U_DURATION).String()
+ timeLeftBox = fmt.Sprintf(" %s", timeLeft)
+ }
}
}
@@ -326,30 +352,38 @@ func (pb *ProgressBar) write(current int64) {
speedBox = " " + Format(int64(speed)).To(pb.Units).Width(pb.UnitsWidth).PerSec().String()
}
- barWidth := escapeAwareRuneCountInString(countersBox + pb.BarStart + pb.BarEnd + percentBox + timeLeftBox + speedBox + pb.prefix + pb.postfix)
+ barWidth := escapeAwareRuneCountInString(countersBox + pb.BarStart + pb.BarEnd + percentBox + timeSpentBox + timeLeftBox + speedBox + pb.prefix + pb.postfix)
// bar
if pb.ShowBar {
size := width - barWidth
if size > 0 {
- if pb.Total > 0 {
- curCount := int(math.Ceil((float64(current) / float64(pb.Total)) * float64(size)))
- emptCount := size - curCount
+ if total > 0 {
+ curSize := int(math.Ceil((float64(current) / float64(total)) * float64(size)))
+ emptySize := size - curSize
barBox = pb.BarStart
- if emptCount < 0 {
- emptCount = 0
+ if emptySize < 0 {
+ emptySize = 0
}
- if curCount > size {
- curCount = size
+ if curSize > size {
+ curSize = size
}
- if emptCount <= 0 {
- barBox += strings.Repeat(pb.Current, curCount)
- } else if curCount > 0 {
- barBox += strings.Repeat(pb.Current, curCount-1) + pb.CurrentN
+
+ cursorLen := escapeAwareRuneCountInString(pb.Current)
+ if emptySize <= 0 {
+ barBox += strings.Repeat(pb.Current, curSize/cursorLen)
+ } else if curSize > 0 {
+ cursorEndLen := escapeAwareRuneCountInString(pb.CurrentN)
+ cursorRepetitions := (curSize - cursorEndLen) / cursorLen
+ barBox += strings.Repeat(pb.Current, cursorRepetitions)
+ barBox += pb.CurrentN
}
- barBox += strings.Repeat(pb.Empty, emptCount) + pb.BarEnd
+
+ emptyLen := escapeAwareRuneCountInString(pb.Empty)
+ barBox += strings.Repeat(pb.Empty, emptySize/emptyLen)
+ barBox += pb.BarEnd
} else {
- barBox = pb.BarStart
pos := size - int(current)%int(size)
+ barBox = pb.BarStart
if pos-1 > 0 {
barBox += strings.Repeat(pb.Empty, pos-1)
}
@@ -363,17 +397,18 @@ func (pb *ProgressBar) write(current int64) {
}
// check len
- out = pb.prefix + countersBox + barBox + percentBox + speedBox + timeLeftBox + pb.postfix
- if escapeAwareRuneCountInString(out) < width {
- end = strings.Repeat(" ", width-utf8.RuneCountInString(out))
+ out = pb.prefix + timeSpentBox + countersBox + barBox + percentBox + speedBox + timeLeftBox + pb.postfix
+
+ if cl := escapeAwareRuneCountInString(out); cl < width {
+ end = strings.Repeat(" ", width-cl)
}
// and print!
- pb.mu.Lock()
pb.lastPrint = out + end
- pb.mu.Unlock()
+ isFinish := pb.isFinish
+
switch {
- case pb.isFinish:
+ case isFinish:
return
case pb.Output != nil:
fmt.Fprint(pb.Output, "\r"+out+end)
@@ -406,24 +441,55 @@ func (pb *ProgressBar) GetWidth() int {
// Write the current state of the progressbar
func (pb *ProgressBar) Update() {
c := atomic.LoadInt64(&pb.current)
- if pb.AlwaysUpdate || c != pb.currentValue {
- pb.write(c)
- pb.currentValue = c
+ p := atomic.LoadInt64(&pb.previous)
+ t := atomic.LoadInt64(&pb.Total)
+ if p != c {
+ pb.mu.Lock()
+ pb.changeTime = time.Now()
+ pb.mu.Unlock()
+ atomic.StoreInt64(&pb.previous, c)
}
+ pb.write(t, c)
if pb.AutoStat {
if c == 0 {
pb.startTime = time.Now()
pb.startValue = 0
- } else if c >= pb.Total && pb.isFinish != true {
+ } else if c >= t && pb.isFinish != true {
pb.Finish()
}
}
}
+// String return the last bar print
func (pb *ProgressBar) String() string {
+ pb.mu.Lock()
+ defer pb.mu.Unlock()
return pb.lastPrint
}
+// SetTotal atomically sets new total count
+func (pb *ProgressBar) SetTotal(total int) *ProgressBar {
+ return pb.SetTotal64(int64(total))
+}
+
+// SetTotal64 atomically sets new total count
+func (pb *ProgressBar) SetTotal64(total int64) *ProgressBar {
+ atomic.StoreInt64(&pb.Total, total)
+ return pb
+}
+
+// Reset bar and set new total count
+// Does effect only on finished bar
+func (pb *ProgressBar) Reset(total int) *ProgressBar {
+ pb.mu.Lock()
+ defer pb.mu.Unlock()
+ if pb.isFinish {
+ pb.SetTotal(total).Set(0)
+ atomic.StoreInt64(&pb.previous, 0)
+ }
+ return pb
+}
+
// Internal loop for refreshing the progressbar
func (pb *ProgressBar) refresher() {
for {
@@ -435,10 +501,3 @@ func (pb *ProgressBar) refresher() {
}
}
}
-
-type window struct {
- Row uint16
- Col uint16
- Xpixel uint16
- Ypixel uint16
-}
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/pb_appengine.go b/vendor/gopkg.in/cheggaaa/pb.v1/pb_appengine.go
index d85dbc3b2..17168f39a 100644
--- a/vendor/gopkg.in/cheggaaa/pb.v1/pb_appengine.go
+++ b/vendor/gopkg.in/cheggaaa/pb.v1/pb_appengine.go
@@ -1,4 +1,4 @@
-// +build appengine
+// +build appengine js
package pb
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/pb_nix.go b/vendor/gopkg.in/cheggaaa/pb.v1/pb_nix.go
deleted file mode 100644
index c06097b43..000000000
--- a/vendor/gopkg.in/cheggaaa/pb.v1/pb_nix.go
+++ /dev/null
@@ -1,8 +0,0 @@
-// +build linux darwin freebsd netbsd openbsd dragonfly
-// +build !appengine
-
-package pb
-
-import "syscall"
-
-const sysIoctl = syscall.SYS_IOCTL
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/pb_solaris.go b/vendor/gopkg.in/cheggaaa/pb.v1/pb_solaris.go
deleted file mode 100644
index b7d461e17..000000000
--- a/vendor/gopkg.in/cheggaaa/pb.v1/pb_solaris.go
+++ /dev/null
@@ -1,6 +0,0 @@
-// +build solaris
-// +build !appengine
-
-package pb
-
-const sysIoctl = 54
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/pb_win.go b/vendor/gopkg.in/cheggaaa/pb.v1/pb_win.go
index 72f682835..9595e8236 100644
--- a/vendor/gopkg.in/cheggaaa/pb.v1/pb_win.go
+++ b/vendor/gopkg.in/cheggaaa/pb.v1/pb_win.go
@@ -102,7 +102,7 @@ var echoLockMutex sync.Mutex
var oldState word
-func lockEcho() (quit chan int, err error) {
+func lockEcho() (shutdownCh chan struct{}, err error) {
echoLockMutex.Lock()
defer echoLockMutex.Unlock()
if echoLocked {
@@ -124,6 +124,8 @@ func lockEcho() (quit chan int, err error) {
err = fmt.Errorf("Can't set terminal settings: %v", e)
return
}
+
+ shutdownCh = make(chan struct{})
return
}
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/pb_x.go b/vendor/gopkg.in/cheggaaa/pb.v1/pb_x.go
index 12e6fe6e2..af4251760 100644
--- a/vendor/gopkg.in/cheggaaa/pb.v1/pb_x.go
+++ b/vendor/gopkg.in/cheggaaa/pb.v1/pb_x.go
@@ -1,5 +1,5 @@
// +build linux darwin freebsd netbsd openbsd solaris dragonfly
-// +build !appengine
+// +build !appengine !js
package pb
@@ -8,101 +8,109 @@ import (
"fmt"
"os"
"os/signal"
- "runtime"
"sync"
"syscall"
- "unsafe"
-)
-const (
- TIOCGWINSZ = 0x5413
- TIOCGWINSZ_OSX = 1074295912
+ "golang.org/x/sys/unix"
)
-var tty *os.File
-
var ErrPoolWasStarted = errors.New("Bar pool was started")
-var echoLocked bool
-var echoLockMutex sync.Mutex
+var (
+ echoLockMutex sync.Mutex
+ origTermStatePtr *unix.Termios
+ tty *os.File
+ istty bool
+)
func init() {
+ echoLockMutex.Lock()
+ defer echoLockMutex.Unlock()
+
var err error
tty, err = os.Open("/dev/tty")
+ istty = true
if err != nil {
tty = os.Stdin
+ istty = false
}
}
// terminalWidth returns width of the terminal.
func terminalWidth() (int, error) {
- w := new(window)
- tio := syscall.TIOCGWINSZ
- if runtime.GOOS == "darwin" {
- tio = TIOCGWINSZ_OSX
+ if !istty {
+ return 0, errors.New("Not Supported")
}
- res, _, err := syscall.Syscall(sysIoctl,
- tty.Fd(),
- uintptr(tio),
- uintptr(unsafe.Pointer(w)),
- )
- if int(res) == -1 {
+ echoLockMutex.Lock()
+ defer echoLockMutex.Unlock()
+
+ fd := int(tty.Fd())
+
+ ws, err := unix.IoctlGetWinsize(fd, unix.TIOCGWINSZ)
+ if err != nil {
return 0, err
}
- return int(w.Col), nil
-}
-var oldState syscall.Termios
+ return int(ws.Col), nil
+}
-func lockEcho() (quit chan int, err error) {
+func lockEcho() (shutdownCh chan struct{}, err error) {
echoLockMutex.Lock()
defer echoLockMutex.Unlock()
- if echoLocked {
- err = ErrPoolWasStarted
- return
- }
- echoLocked = true
+ if istty {
+ if origTermStatePtr != nil {
+ return shutdownCh, ErrPoolWasStarted
+ }
- fd := tty.Fd()
- if _, _, e := syscall.Syscall6(sysIoctl, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0); e != 0 {
- err = fmt.Errorf("Can't get terminal settings: %v", e)
- return
- }
+ fd := int(tty.Fd())
+
+ origTermStatePtr, err = unix.IoctlGetTermios(fd, ioctlReadTermios)
+ if err != nil {
+ return nil, fmt.Errorf("Can't get terminal settings: %v", err)
+ }
+
+ oldTermios := *origTermStatePtr
+ newTermios := oldTermios
+ newTermios.Lflag &^= syscall.ECHO
+ newTermios.Lflag |= syscall.ICANON | syscall.ISIG
+ newTermios.Iflag |= syscall.ICRNL
+ if err := unix.IoctlSetTermios(fd, ioctlWriteTermios, &newTermios); err != nil {
+ return nil, fmt.Errorf("Can't set terminal settings: %v", err)
+ }
- newState := oldState
- newState.Lflag &^= syscall.ECHO
- newState.Lflag |= syscall.ICANON | syscall.ISIG
- newState.Iflag |= syscall.ICRNL
- if _, _, e := syscall.Syscall6(sysIoctl, fd, ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); e != 0 {
- err = fmt.Errorf("Can't set terminal settings: %v", e)
- return
}
- quit = make(chan int, 1)
- go catchTerminate(quit)
+ shutdownCh = make(chan struct{})
+ go catchTerminate(shutdownCh)
return
}
-func unlockEcho() (err error) {
+func unlockEcho() error {
echoLockMutex.Lock()
defer echoLockMutex.Unlock()
- if !echoLocked {
- return
- }
- echoLocked = false
- fd := tty.Fd()
- if _, _, e := syscall.Syscall6(sysIoctl, fd, ioctlWriteTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0); e != 0 {
- err = fmt.Errorf("Can't set terminal settings")
+ if istty {
+ if origTermStatePtr == nil {
+ return nil
+ }
+
+ fd := int(tty.Fd())
+
+ if err := unix.IoctlSetTermios(fd, ioctlWriteTermios, origTermStatePtr); err != nil {
+ return fmt.Errorf("Can't set terminal settings: %v", err)
+ }
+
}
- return
+ origTermStatePtr = nil
+
+ return nil
}
// listen exit signals and restore terminal state
-func catchTerminate(quit chan int) {
+func catchTerminate(shutdownCh chan struct{}) {
sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGKILL)
defer signal.Stop(sig)
select {
- case <-quit:
+ case <-shutdownCh:
unlockEcho()
case <-sig:
unlockEcho()
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/pool.go b/vendor/gopkg.in/cheggaaa/pb.v1/pool.go
index 0b4a4afa8..392e7599c 100644
--- a/vendor/gopkg.in/cheggaaa/pb.v1/pool.go
+++ b/vendor/gopkg.in/cheggaaa/pb.v1/pool.go
@@ -3,6 +3,7 @@
package pb
import (
+ "io"
"sync"
"time"
)
@@ -11,22 +12,36 @@ import (
// You need call pool.Stop() after work
func StartPool(pbs ...*ProgressBar) (pool *Pool, err error) {
pool = new(Pool)
- if err = pool.start(); err != nil {
+ if err = pool.Start(); err != nil {
return
}
pool.Add(pbs...)
return
}
+// NewPool initialises a pool with progress bars, but
+// doesn't start it. You need to call Start manually
+func NewPool(pbs ...*ProgressBar) (pool *Pool) {
+ pool = new(Pool)
+ pool.Add(pbs...)
+ return
+}
+
type Pool struct {
- RefreshRate time.Duration
- bars []*ProgressBar
- quit chan int
- finishOnce sync.Once
+ Output io.Writer
+ RefreshRate time.Duration
+ bars []*ProgressBar
+ lastBarsCount int
+ shutdownCh chan struct{}
+ workerCh chan struct{}
+ m sync.Mutex
+ finishOnce sync.Once
}
// Add progress bars.
func (p *Pool) Add(pbs ...*ProgressBar) {
+ p.m.Lock()
+ defer p.m.Unlock()
for _, bar := range pbs {
bar.ManualUpdate = true
bar.NotPrint = true
@@ -35,30 +50,38 @@ func (p *Pool) Add(pbs ...*ProgressBar) {
}
}
-func (p *Pool) start() (err error) {
+func (p *Pool) Start() (err error) {
p.RefreshRate = DefaultRefreshRate
- quit, err := lockEcho()
+ p.shutdownCh, err = lockEcho()
if err != nil {
return
}
- p.quit = make(chan int)
- go p.writer(quit)
+ p.workerCh = make(chan struct{})
+ go p.writer()
return
}
-func (p *Pool) writer(finish chan int) {
+func (p *Pool) writer() {
var first = true
+ defer func() {
+ if first == false {
+ p.print(false)
+ } else {
+ p.print(true)
+ p.print(false)
+ }
+ close(p.workerCh)
+ }()
+
for {
select {
case <-time.After(p.RefreshRate):
if p.print(first) {
p.print(false)
- finish <- 1
return
}
first = false
- case <-p.quit:
- finish <- 1
+ case <-p.shutdownCh:
return
}
}
@@ -66,11 +89,16 @@ func (p *Pool) writer(finish chan int) {
// Restore terminal state and close pool
func (p *Pool) Stop() error {
- // Wait until one final refresh has passed.
- time.Sleep(p.RefreshRate)
-
p.finishOnce.Do(func() {
- close(p.quit)
+ if p.shutdownCh != nil {
+ close(p.shutdownCh)
+ }
})
+
+ // Wait for the worker to complete
+ select {
+ case <-p.workerCh:
+ }
+
return unlockEcho()
}
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/pool_win.go b/vendor/gopkg.in/cheggaaa/pb.v1/pool_win.go
index d7a5ace41..63598d378 100644
--- a/vendor/gopkg.in/cheggaaa/pb.v1/pool_win.go
+++ b/vendor/gopkg.in/cheggaaa/pb.v1/pool_win.go
@@ -8,13 +8,18 @@ import (
)
func (p *Pool) print(first bool) bool {
+ p.m.Lock()
+ defer p.m.Unlock()
var out string
if !first {
coords, err := getCursorPos()
if err != nil {
log.Panic(err)
}
- coords.Y -= int16(len(p.bars))
+ coords.Y -= int16(p.lastBarsCount)
+ if coords.Y < 0 {
+ coords.Y = 0
+ }
coords.X = 0
err = setCursorPos(coords)
@@ -24,12 +29,17 @@ func (p *Pool) print(first bool) bool {
}
isFinished := true
for _, bar := range p.bars {
- if !bar.isFinish {
+ if !bar.IsFinished() {
isFinished = false
}
bar.Update()
out += fmt.Sprintf("\r%s\n", bar.String())
}
- fmt.Print(out)
+ if p.Output != nil {
+ fmt.Fprint(p.Output, out)
+ } else {
+ fmt.Print(out)
+ }
+ p.lastBarsCount = len(p.bars)
return isFinished
}
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/pool_x.go b/vendor/gopkg.in/cheggaaa/pb.v1/pool_x.go
index d95b71d87..a8ae14d2f 100644
--- a/vendor/gopkg.in/cheggaaa/pb.v1/pool_x.go
+++ b/vendor/gopkg.in/cheggaaa/pb.v1/pool_x.go
@@ -5,18 +5,25 @@ package pb
import "fmt"
func (p *Pool) print(first bool) bool {
+ p.m.Lock()
+ defer p.m.Unlock()
var out string
if !first {
- out = fmt.Sprintf("\033[%dA", len(p.bars))
+ out = fmt.Sprintf("\033[%dA", p.lastBarsCount)
}
isFinished := true
for _, bar := range p.bars {
- if !bar.isFinish {
+ if !bar.IsFinished() {
isFinished = false
}
bar.Update()
out += fmt.Sprintf("\r%s\n", bar.String())
}
- fmt.Print(out)
+ if p.Output != nil {
+ fmt.Fprint(p.Output, out)
+ } else {
+ fmt.Print(out)
+ }
+ p.lastBarsCount = len(p.bars)
return isFinished
}
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/runecount.go b/vendor/gopkg.in/cheggaaa/pb.v1/runecount.go
index d52edd365..c617c55ec 100644
--- a/vendor/gopkg.in/cheggaaa/pb.v1/runecount.go
+++ b/vendor/gopkg.in/cheggaaa/pb.v1/runecount.go
@@ -11,7 +11,7 @@ var ctrlFinder = regexp.MustCompile("\x1b\x5b[0-9]+\x6d")
func escapeAwareRuneCountInString(s string) int {
n := runewidth.StringWidth(s)
for _, sm := range ctrlFinder.FindAllString(s, -1) {
- n -= len(sm)
+ n -= runewidth.StringWidth(sm)
}
return n
}
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/termios_nix.go b/vendor/gopkg.in/cheggaaa/pb.v1/termios_nix.go
deleted file mode 100644
index ebb3fe87c..000000000
--- a/vendor/gopkg.in/cheggaaa/pb.v1/termios_nix.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build linux solaris
-// +build !appengine
-
-package pb
-
-const ioctlReadTermios = 0x5401 // syscall.TCGETS
-const ioctlWriteTermios = 0x5402 // syscall.TCSETS
diff --git a/vendor/gopkg.in/cheggaaa/pb.v1/termios_sysv.go b/vendor/gopkg.in/cheggaaa/pb.v1/termios_sysv.go
new file mode 100644
index 000000000..b10f61859
--- /dev/null
+++ b/vendor/gopkg.in/cheggaaa/pb.v1/termios_sysv.go
@@ -0,0 +1,13 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build linux solaris
+// +build !appengine
+
+package pb
+
+import "golang.org/x/sys/unix"
+
+const ioctlReadTermios = unix.TCGETS
+const ioctlWriteTermios = unix.TCSETS
diff --git a/vendor/gopkg.in/inf.v0/dec.go b/vendor/gopkg.in/inf.v0/dec.go
index 3b4afedf1..26548b63c 100644
--- a/vendor/gopkg.in/inf.v0/dec.go
+++ b/vendor/gopkg.in/inf.v0/dec.go
@@ -104,7 +104,7 @@ var bigInt = [...]*big.Int{
var exp10cache [64]big.Int = func() [64]big.Int {
e10, e10i := [64]big.Int{}, bigInt[1]
- for i, _ := range e10 {
+ for i := range e10 {
e10[i].Set(e10i)
e10i = new(big.Int).Mul(e10i, bigInt[10])
}
diff --git a/vendor/gopkg.in/mgo.v2/LICENSE b/vendor/gopkg.in/mgo.v2/LICENSE
index 01ba7d041..770c7672b 100644
--- a/vendor/gopkg.in/mgo.v2/LICENSE
+++ b/vendor/gopkg.in/mgo.v2/LICENSE
@@ -5,13 +5,13 @@ Copyright (c) 2010-2013 - Gustavo Niemeyer <gustavo@niemeyer.net>
All rights reserved.
Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
+modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
+ list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
+ and/or other materials provided with the distribution.
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
diff --git a/vendor/gopkg.in/mgo.v2/internal/sasl/sspi_windows.c b/vendor/gopkg.in/mgo.v2/internal/sasl/sspi_windows.c
index 9acdc523d..63f9a6f86 100644
--- a/vendor/gopkg.in/mgo.v2/internal/sasl/sspi_windows.c
+++ b/vendor/gopkg.in/mgo.v2/internal/sasl/sspi_windows.c
@@ -1,5 +1,5 @@
// Code adapted from the NodeJS kerberos library:
-//
+//
// https://github.com/christkv/kerberos/tree/master/lib/win32/kerberos_sspi.c
//
// Under the terms of the Apache License, Version 2.0:
diff --git a/vendor/gopkg.in/mgo.v2/internal/sasl/sspi_windows.h b/vendor/gopkg.in/mgo.v2/internal/sasl/sspi_windows.h
index dda2a5050..d28327031 100644
--- a/vendor/gopkg.in/mgo.v2/internal/sasl/sspi_windows.h
+++ b/vendor/gopkg.in/mgo.v2/internal/sasl/sspi_windows.h
@@ -1,5 +1,5 @@
// Code adapted from the NodeJS kerberos library:
-//
+//
// https://github.com/christkv/kerberos/tree/master/lib/win32/kerberos_sspi.h
//
// Under the terms of the Apache License, Version 2.0:
diff --git a/vendor/gopkg.in/yaml.v2/LICENSE b/vendor/gopkg.in/yaml.v2/LICENSE
index 866d74a7a..8dada3eda 100644
--- a/vendor/gopkg.in/yaml.v2/LICENSE
+++ b/vendor/gopkg.in/yaml.v2/LICENSE
@@ -1,13 +1,201 @@
-Copyright 2011-2016 Canonical Ltd.
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
-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
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- http://www.apache.org/licenses/LICENSE-2.0
+ 1. Definitions.
-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.
+ "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/contrib/python/podman/LICENSE.txt b/vendor/gopkg.in/yaml.v2/NOTICE
index decfce56d..866d74a7a 100644
--- a/contrib/python/podman/LICENSE.txt
+++ b/vendor/gopkg.in/yaml.v2/NOTICE
@@ -1,4 +1,4 @@
-Copyright 2018 Red Hat, Inc
+Copyright 2011-2016 Canonical Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/vendor/gopkg.in/yaml.v2/README.md b/vendor/gopkg.in/yaml.v2/README.md
index 1884de6a7..b50c6e877 100644
--- a/vendor/gopkg.in/yaml.v2/README.md
+++ b/vendor/gopkg.in/yaml.v2/README.md
@@ -65,6 +65,8 @@ b:
d: [3, 4]
`
+// Note: struct fields must be public in order for unmarshal to
+// correctly populate the data.
type T struct {
A string
B struct {
diff --git a/vendor/gopkg.in/yaml.v2/apic.go b/vendor/gopkg.in/yaml.v2/apic.go
index 95ec014e8..1f7e87e67 100644
--- a/vendor/gopkg.in/yaml.v2/apic.go
+++ b/vendor/gopkg.in/yaml.v2/apic.go
@@ -2,7 +2,6 @@ package yaml
import (
"io"
- "os"
)
func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) {
@@ -48,9 +47,9 @@ func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err
return n, nil
}
-// File read handler.
-func yaml_file_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
- return parser.input_file.Read(buffer)
+// Reader read handler.
+func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
+ return parser.input_reader.Read(buffer)
}
// Set a string input.
@@ -64,12 +63,12 @@ func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) {
}
// Set a file input.
-func yaml_parser_set_input_file(parser *yaml_parser_t, file *os.File) {
+func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) {
if parser.read_handler != nil {
panic("must set the input source only once")
}
- parser.read_handler = yaml_file_read_handler
- parser.input_file = file
+ parser.read_handler = yaml_reader_read_handler
+ parser.input_reader = r
}
// Set the source encoding.
@@ -81,14 +80,13 @@ func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) {
}
// Create a new emitter object.
-func yaml_emitter_initialize(emitter *yaml_emitter_t) bool {
+func yaml_emitter_initialize(emitter *yaml_emitter_t) {
*emitter = yaml_emitter_t{
buffer: make([]byte, output_buffer_size),
raw_buffer: make([]byte, 0, output_raw_buffer_size),
states: make([]yaml_emitter_state_t, 0, initial_stack_size),
events: make([]yaml_event_t, 0, initial_queue_size),
}
- return true
}
// Destroy an emitter object.
@@ -102,9 +100,10 @@ func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
return nil
}
-// File write handler.
-func yaml_file_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
- _, err := emitter.output_file.Write(buffer)
+// yaml_writer_write_handler uses emitter.output_writer to write the
+// emitted text.
+func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
+ _, err := emitter.output_writer.Write(buffer)
return err
}
@@ -118,12 +117,12 @@ func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]by
}
// Set a file output.
-func yaml_emitter_set_output_file(emitter *yaml_emitter_t, file io.Writer) {
+func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) {
if emitter.write_handler != nil {
panic("must set the output target only once")
}
- emitter.write_handler = yaml_file_write_handler
- emitter.output_file = file
+ emitter.write_handler = yaml_writer_write_handler
+ emitter.output_writer = w
}
// Set the output encoding.
@@ -252,41 +251,41 @@ func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) {
//
// Create STREAM-START.
-func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) bool {
+func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) {
*event = yaml_event_t{
typ: yaml_STREAM_START_EVENT,
encoding: encoding,
}
- return true
}
// Create STREAM-END.
-func yaml_stream_end_event_initialize(event *yaml_event_t) bool {
+func yaml_stream_end_event_initialize(event *yaml_event_t) {
*event = yaml_event_t{
typ: yaml_STREAM_END_EVENT,
}
- return true
}
// Create DOCUMENT-START.
-func yaml_document_start_event_initialize(event *yaml_event_t, version_directive *yaml_version_directive_t,
- tag_directives []yaml_tag_directive_t, implicit bool) bool {
+func yaml_document_start_event_initialize(
+ event *yaml_event_t,
+ version_directive *yaml_version_directive_t,
+ tag_directives []yaml_tag_directive_t,
+ implicit bool,
+) {
*event = yaml_event_t{
typ: yaml_DOCUMENT_START_EVENT,
version_directive: version_directive,
tag_directives: tag_directives,
implicit: implicit,
}
- return true
}
// Create DOCUMENT-END.
-func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) bool {
+func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) {
*event = yaml_event_t{
typ: yaml_DOCUMENT_END_EVENT,
implicit: implicit,
}
- return true
}
///*
@@ -348,7 +347,7 @@ func yaml_sequence_end_event_initialize(event *yaml_event_t) bool {
}
// Create MAPPING-START.
-func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) bool {
+func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) {
*event = yaml_event_t{
typ: yaml_MAPPING_START_EVENT,
anchor: anchor,
@@ -356,15 +355,13 @@ func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte
implicit: implicit,
style: yaml_style_t(style),
}
- return true
}
// Create MAPPING-END.
-func yaml_mapping_end_event_initialize(event *yaml_event_t) bool {
+func yaml_mapping_end_event_initialize(event *yaml_event_t) {
*event = yaml_event_t{
typ: yaml_MAPPING_END_EVENT,
}
- return true
}
// Destroy an event object.
@@ -471,7 +468,7 @@ func yaml_event_delete(event *yaml_event_t) {
// } context
// tag_directive *yaml_tag_directive_t
//
-// context.error = YAML_NO_ERROR // Eliminate a compliler warning.
+// context.error = YAML_NO_ERROR // Eliminate a compiler warning.
//
// assert(document) // Non-NULL document object is expected.
//
diff --git a/vendor/gopkg.in/yaml.v2/decode.go b/vendor/gopkg.in/yaml.v2/decode.go
index 052ecfcd1..e4e56e28e 100644
--- a/vendor/gopkg.in/yaml.v2/decode.go
+++ b/vendor/gopkg.in/yaml.v2/decode.go
@@ -4,6 +4,7 @@ import (
"encoding"
"encoding/base64"
"fmt"
+ "io"
"math"
"reflect"
"strconv"
@@ -22,19 +23,22 @@ type node struct {
kind int
line, column int
tag string
- value string
- implicit bool
- children []*node
- anchors map[string]*node
+ // For an alias node, alias holds the resolved alias.
+ alias *node
+ value string
+ implicit bool
+ children []*node
+ anchors map[string]*node
}
// ----------------------------------------------------------------------------
// Parser, produces a node tree out of a libyaml event stream.
type parser struct {
- parser yaml_parser_t
- event yaml_event_t
- doc *node
+ parser yaml_parser_t
+ event yaml_event_t
+ doc *node
+ doneInit bool
}
func newParser(b []byte) *parser {
@@ -42,21 +46,30 @@ func newParser(b []byte) *parser {
if !yaml_parser_initialize(&p.parser) {
panic("failed to initialize YAML emitter")
}
-
if len(b) == 0 {
b = []byte{'\n'}
}
-
yaml_parser_set_input_string(&p.parser, b)
+ return &p
+}
- p.skip()
- if p.event.typ != yaml_STREAM_START_EVENT {
- panic("expected stream start event, got " + strconv.Itoa(int(p.event.typ)))
+func newParserFromReader(r io.Reader) *parser {
+ p := parser{}
+ if !yaml_parser_initialize(&p.parser) {
+ panic("failed to initialize YAML emitter")
}
- p.skip()
+ yaml_parser_set_input_reader(&p.parser, r)
return &p
}
+func (p *parser) init() {
+ if p.doneInit {
+ return
+ }
+ p.expect(yaml_STREAM_START_EVENT)
+ p.doneInit = true
+}
+
func (p *parser) destroy() {
if p.event.typ != yaml_NO_EVENT {
yaml_event_delete(&p.event)
@@ -64,16 +77,35 @@ func (p *parser) destroy() {
yaml_parser_delete(&p.parser)
}
-func (p *parser) skip() {
- if p.event.typ != yaml_NO_EVENT {
- if p.event.typ == yaml_STREAM_END_EVENT {
- failf("attempted to go past the end of stream; corrupted value?")
+// expect consumes an event from the event stream and
+// checks that it's of the expected type.
+func (p *parser) expect(e yaml_event_type_t) {
+ if p.event.typ == yaml_NO_EVENT {
+ if !yaml_parser_parse(&p.parser, &p.event) {
+ p.fail()
}
- yaml_event_delete(&p.event)
+ }
+ if p.event.typ == yaml_STREAM_END_EVENT {
+ failf("attempted to go past the end of stream; corrupted value?")
+ }
+ if p.event.typ != e {
+ p.parser.problem = fmt.Sprintf("expected %s event but got %s", e, p.event.typ)
+ p.fail()
+ }
+ yaml_event_delete(&p.event)
+ p.event.typ = yaml_NO_EVENT
+}
+
+// peek peeks at the next event in the event stream,
+// puts the results into p.event and returns the event type.
+func (p *parser) peek() yaml_event_type_t {
+ if p.event.typ != yaml_NO_EVENT {
+ return p.event.typ
}
if !yaml_parser_parse(&p.parser, &p.event) {
p.fail()
}
+ return p.event.typ
}
func (p *parser) fail() {
@@ -81,6 +113,10 @@ func (p *parser) fail() {
var line int
if p.parser.problem_mark.line != 0 {
line = p.parser.problem_mark.line
+ // Scanner errors don't iterate line before returning error
+ if p.parser.error == yaml_SCANNER_ERROR {
+ line++
+ }
} else if p.parser.context_mark.line != 0 {
line = p.parser.context_mark.line
}
@@ -103,7 +139,8 @@ func (p *parser) anchor(n *node, anchor []byte) {
}
func (p *parser) parse() *node {
- switch p.event.typ {
+ p.init()
+ switch p.peek() {
case yaml_SCALAR_EVENT:
return p.scalar()
case yaml_ALIAS_EVENT:
@@ -118,7 +155,7 @@ func (p *parser) parse() *node {
// Happens when attempting to decode an empty buffer.
return nil
default:
- panic("attempted to parse unknown event: " + strconv.Itoa(int(p.event.typ)))
+ panic("attempted to parse unknown event: " + p.event.typ.String())
}
}
@@ -134,19 +171,20 @@ func (p *parser) document() *node {
n := p.node(documentNode)
n.anchors = make(map[string]*node)
p.doc = n
- p.skip()
+ p.expect(yaml_DOCUMENT_START_EVENT)
n.children = append(n.children, p.parse())
- if p.event.typ != yaml_DOCUMENT_END_EVENT {
- panic("expected end of document event but got " + strconv.Itoa(int(p.event.typ)))
- }
- p.skip()
+ p.expect(yaml_DOCUMENT_END_EVENT)
return n
}
func (p *parser) alias() *node {
n := p.node(aliasNode)
n.value = string(p.event.anchor)
- p.skip()
+ n.alias = p.doc.anchors[n.value]
+ if n.alias == nil {
+ failf("unknown anchor '%s' referenced", n.value)
+ }
+ p.expect(yaml_ALIAS_EVENT)
return n
}
@@ -156,29 +194,29 @@ func (p *parser) scalar() *node {
n.tag = string(p.event.tag)
n.implicit = p.event.implicit
p.anchor(n, p.event.anchor)
- p.skip()
+ p.expect(yaml_SCALAR_EVENT)
return n
}
func (p *parser) sequence() *node {
n := p.node(sequenceNode)
p.anchor(n, p.event.anchor)
- p.skip()
- for p.event.typ != yaml_SEQUENCE_END_EVENT {
+ p.expect(yaml_SEQUENCE_START_EVENT)
+ for p.peek() != yaml_SEQUENCE_END_EVENT {
n.children = append(n.children, p.parse())
}
- p.skip()
+ p.expect(yaml_SEQUENCE_END_EVENT)
return n
}
func (p *parser) mapping() *node {
n := p.node(mappingNode)
p.anchor(n, p.event.anchor)
- p.skip()
- for p.event.typ != yaml_MAPPING_END_EVENT {
+ p.expect(yaml_MAPPING_START_EVENT)
+ for p.peek() != yaml_MAPPING_END_EVENT {
n.children = append(n.children, p.parse(), p.parse())
}
- p.skip()
+ p.expect(yaml_MAPPING_END_EVENT)
return n
}
@@ -187,9 +225,10 @@ func (p *parser) mapping() *node {
type decoder struct {
doc *node
- aliases map[string]bool
+ aliases map[*node]bool
mapType reflect.Type
terrors []string
+ strict bool
}
var (
@@ -197,11 +236,13 @@ var (
durationType = reflect.TypeOf(time.Duration(0))
defaultMapType = reflect.TypeOf(map[interface{}]interface{}{})
ifaceType = defaultMapType.Elem()
+ timeType = reflect.TypeOf(time.Time{})
+ ptrTimeType = reflect.TypeOf(&time.Time{})
)
-func newDecoder() *decoder {
- d := &decoder{mapType: defaultMapType}
- d.aliases = make(map[string]bool)
+func newDecoder(strict bool) *decoder {
+ d := &decoder{mapType: defaultMapType, strict: strict}
+ d.aliases = make(map[*node]bool)
return d
}
@@ -250,7 +291,7 @@ func (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) {
//
// If n holds a null value, prepare returns before doing anything.
func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) {
- if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "" && n.implicit) {
+ if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "~" || n.value == "" && n.implicit) {
return out, false, false
}
again := true
@@ -307,16 +348,13 @@ func (d *decoder) document(n *node, out reflect.Value) (good bool) {
}
func (d *decoder) alias(n *node, out reflect.Value) (good bool) {
- an, ok := d.doc.anchors[n.value]
- if !ok {
- failf("unknown anchor '%s' referenced", n.value)
- }
- if d.aliases[n.value] {
+ if d.aliases[n] {
+ // TODO this could actually be allowed in some circumstances.
failf("anchor '%s' value contains itself", n.value)
}
- d.aliases[n.value] = true
- good = d.unmarshal(an, out)
- delete(d.aliases, n.value)
+ d.aliases[n] = true
+ good = d.unmarshal(n.alias, out)
+ delete(d.aliases, n)
return good
}
@@ -328,7 +366,7 @@ func resetMap(out reflect.Value) {
}
}
-func (d *decoder) scalar(n *node, out reflect.Value) (good bool) {
+func (d *decoder) scalar(n *node, out reflect.Value) bool {
var tag string
var resolved interface{}
if n.tag == "" && !n.implicit {
@@ -352,9 +390,26 @@ func (d *decoder) scalar(n *node, out reflect.Value) (good bool) {
}
return true
}
- if s, ok := resolved.(string); ok && out.CanAddr() {
- if u, ok := out.Addr().Interface().(encoding.TextUnmarshaler); ok {
- err := u.UnmarshalText([]byte(s))
+ if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() {
+ // We've resolved to exactly the type we want, so use that.
+ out.Set(resolvedv)
+ return true
+ }
+ // Perhaps we can use the value as a TextUnmarshaler to
+ // set its value.
+ if out.CanAddr() {
+ u, ok := out.Addr().Interface().(encoding.TextUnmarshaler)
+ if ok {
+ var text []byte
+ if tag == yaml_BINARY_TAG {
+ text = []byte(resolved.(string))
+ } else {
+ // We let any value be unmarshaled into TextUnmarshaler.
+ // That might be more lax than we'd like, but the
+ // TextUnmarshaler itself should bowl out any dubious values.
+ text = []byte(n.value)
+ }
+ err := u.UnmarshalText(text)
if err != nil {
fail(err)
}
@@ -365,46 +420,54 @@ func (d *decoder) scalar(n *node, out reflect.Value) (good bool) {
case reflect.String:
if tag == yaml_BINARY_TAG {
out.SetString(resolved.(string))
- good = true
- } else if resolved != nil {
+ return true
+ }
+ if resolved != nil {
out.SetString(n.value)
- good = true
+ return true
}
case reflect.Interface:
if resolved == nil {
out.Set(reflect.Zero(out.Type()))
+ } else if tag == yaml_TIMESTAMP_TAG {
+ // It looks like a timestamp but for backward compatibility
+ // reasons we set it as a string, so that code that unmarshals
+ // timestamp-like values into interface{} will continue to
+ // see a string and not a time.Time.
+ // TODO(v3) Drop this.
+ out.Set(reflect.ValueOf(n.value))
} else {
out.Set(reflect.ValueOf(resolved))
}
- good = true
+ return true
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
switch resolved := resolved.(type) {
case int:
if !out.OverflowInt(int64(resolved)) {
out.SetInt(int64(resolved))
- good = true
+ return true
}
case int64:
if !out.OverflowInt(resolved) {
out.SetInt(resolved)
- good = true
+ return true
}
case uint64:
if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {
out.SetInt(int64(resolved))
- good = true
+ return true
}
case float64:
if resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {
out.SetInt(int64(resolved))
- good = true
+ return true
}
case string:
if out.Type() == durationType {
d, err := time.ParseDuration(resolved)
if err == nil {
out.SetInt(int64(d))
- good = true
+ return true
}
}
}
@@ -413,44 +476,49 @@ func (d *decoder) scalar(n *node, out reflect.Value) (good bool) {
case int:
if resolved >= 0 && !out.OverflowUint(uint64(resolved)) {
out.SetUint(uint64(resolved))
- good = true
+ return true
}
case int64:
if resolved >= 0 && !out.OverflowUint(uint64(resolved)) {
out.SetUint(uint64(resolved))
- good = true
+ return true
}
case uint64:
if !out.OverflowUint(uint64(resolved)) {
out.SetUint(uint64(resolved))
- good = true
+ return true
}
case float64:
if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) {
out.SetUint(uint64(resolved))
- good = true
+ return true
}
}
case reflect.Bool:
switch resolved := resolved.(type) {
case bool:
out.SetBool(resolved)
- good = true
+ return true
}
case reflect.Float32, reflect.Float64:
switch resolved := resolved.(type) {
case int:
out.SetFloat(float64(resolved))
- good = true
+ return true
case int64:
out.SetFloat(float64(resolved))
- good = true
+ return true
case uint64:
out.SetFloat(float64(resolved))
- good = true
+ return true
case float64:
out.SetFloat(resolved)
- good = true
+ return true
+ }
+ case reflect.Struct:
+ if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() {
+ out.Set(resolvedv)
+ return true
}
case reflect.Ptr:
if out.Type().Elem() == reflect.TypeOf(resolved) {
@@ -458,13 +526,11 @@ func (d *decoder) scalar(n *node, out reflect.Value) (good bool) {
elem := reflect.New(out.Type().Elem())
elem.Elem().Set(reflect.ValueOf(resolved))
out.Set(elem)
- good = true
+ return true
}
}
- if !good {
- d.terror(n, tag, out)
- }
- return good
+ d.terror(n, tag, out)
+ return false
}
func settableValueOf(i interface{}) reflect.Value {
@@ -481,6 +547,10 @@ func (d *decoder) sequence(n *node, out reflect.Value) (good bool) {
switch out.Kind() {
case reflect.Slice:
out.Set(reflect.MakeSlice(out.Type(), l, l))
+ case reflect.Array:
+ if l != out.Len() {
+ failf("invalid array: want %d elements but got %d", out.Len(), l)
+ }
case reflect.Interface:
// No type hints. Will have to use a generic sequence.
iface = out
@@ -499,7 +569,9 @@ func (d *decoder) sequence(n *node, out reflect.Value) (good bool) {
j++
}
}
- out.Set(out.Slice(0, j))
+ if out.Kind() != reflect.Array {
+ out.Set(out.Slice(0, j))
+ }
if iface.IsValid() {
iface.Set(out)
}
@@ -560,7 +632,7 @@ func (d *decoder) mapping(n *node, out reflect.Value) (good bool) {
}
e := reflect.New(et).Elem()
if d.unmarshal(n.children[i+1], e) {
- out.SetMapIndex(k, e)
+ d.setMapIndex(n.children[i+1], out, k, e)
}
}
}
@@ -568,6 +640,14 @@ func (d *decoder) mapping(n *node, out reflect.Value) (good bool) {
return true
}
+func (d *decoder) setMapIndex(n *node, out, k, v reflect.Value) {
+ if d.strict && out.MapIndex(k) != zeroValue {
+ d.terrors = append(d.terrors, fmt.Sprintf("line %d: key %#v already set in map", n.line+1, k.Interface()))
+ return
+ }
+ out.SetMapIndex(k, v)
+}
+
func (d *decoder) mappingSlice(n *node, out reflect.Value) (good bool) {
outt := out.Type()
if outt.Elem() != mapItemType {
@@ -615,6 +695,10 @@ func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) {
elemType = inlineMap.Type().Elem()
}
+ var doneFields []bool
+ if d.strict {
+ doneFields = make([]bool, len(sinfo.FieldsList))
+ }
for i := 0; i < l; i += 2 {
ni := n.children[i]
if isMerge(ni) {
@@ -625,6 +709,13 @@ func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) {
continue
}
if info, ok := sinfo.FieldsMap[name.String()]; ok {
+ if d.strict {
+ if doneFields[info.Id] {
+ d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.line+1, name.String(), out.Type()))
+ continue
+ }
+ doneFields[info.Id] = true
+ }
var field reflect.Value
if info.Inline == nil {
field = out.Field(info.Num)
@@ -638,7 +729,9 @@ func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) {
}
value := reflect.New(elemType).Elem()
d.unmarshal(n.children[i+1], value)
- inlineMap.SetMapIndex(name, value)
+ d.setMapIndex(n.children[i+1], inlineMap, name, value)
+ } else if d.strict {
+ d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.line+1, name.String(), out.Type()))
}
}
return true
diff --git a/vendor/gopkg.in/yaml.v2/emitterc.go b/vendor/gopkg.in/yaml.v2/emitterc.go
index 6ecdcb3c7..a1c2cc526 100644
--- a/vendor/gopkg.in/yaml.v2/emitterc.go
+++ b/vendor/gopkg.in/yaml.v2/emitterc.go
@@ -2,6 +2,7 @@ package yaml
import (
"bytes"
+ "fmt"
)
// Flush the buffer if needed.
@@ -664,7 +665,7 @@ func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t,
return yaml_emitter_emit_mapping_start(emitter, event)
default:
return yaml_emitter_set_emitter_error(emitter,
- "expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS")
+ fmt.Sprintf("expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got %v", event.typ))
}
}
@@ -842,7 +843,7 @@ func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event
return true
}
-// Write an achor.
+// Write an anchor.
func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool {
if emitter.anchor_data.anchor == nil {
return true
@@ -994,10 +995,10 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {
break_space = false
space_break = false
- preceeded_by_whitespace = false
- followed_by_whitespace = false
- previous_space = false
- previous_break = false
+ preceded_by_whitespace = false
+ followed_by_whitespace = false
+ previous_space = false
+ previous_break = false
)
emitter.scalar_data.value = value
@@ -1016,7 +1017,7 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {
flow_indicators = true
}
- preceeded_by_whitespace = true
+ preceded_by_whitespace = true
for i, w := 0, 0; i < len(value); i += w {
w = width(value[i])
followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w)
@@ -1047,7 +1048,7 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {
block_indicators = true
}
case '#':
- if preceeded_by_whitespace {
+ if preceded_by_whitespace {
flow_indicators = true
block_indicators = true
}
@@ -1088,7 +1089,7 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {
}
// [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition.
- preceeded_by_whitespace = is_blankz(value, i)
+ preceded_by_whitespace = is_blankz(value, i)
}
emitter.scalar_data.multiline = line_breaks
diff --git a/vendor/gopkg.in/yaml.v2/encode.go b/vendor/gopkg.in/yaml.v2/encode.go
index 84f849955..0ee738e11 100644
--- a/vendor/gopkg.in/yaml.v2/encode.go
+++ b/vendor/gopkg.in/yaml.v2/encode.go
@@ -3,38 +3,67 @@ package yaml
import (
"encoding"
"fmt"
+ "io"
"reflect"
"regexp"
"sort"
"strconv"
"strings"
"time"
+ "unicode/utf8"
)
+// jsonNumber is the interface of the encoding/json.Number datatype.
+// Repeating the interface here avoids a dependency on encoding/json, and also
+// supports other libraries like jsoniter, which use a similar datatype with
+// the same interface. Detecting this interface is useful when dealing with
+// structures containing json.Number, which is a string under the hood. The
+// encoder should prefer the use of Int64(), Float64() and string(), in that
+// order, when encoding this type.
+type jsonNumber interface {
+ Float64() (float64, error)
+ Int64() (int64, error)
+ String() string
+}
+
type encoder struct {
emitter yaml_emitter_t
event yaml_event_t
out []byte
flow bool
+ // doneInit holds whether the initial stream_start_event has been
+ // emitted.
+ doneInit bool
}
-func newEncoder() (e *encoder) {
- e = &encoder{}
- e.must(yaml_emitter_initialize(&e.emitter))
+func newEncoder() *encoder {
+ e := &encoder{}
+ yaml_emitter_initialize(&e.emitter)
yaml_emitter_set_output_string(&e.emitter, &e.out)
yaml_emitter_set_unicode(&e.emitter, true)
- e.must(yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING))
- e.emit()
- e.must(yaml_document_start_event_initialize(&e.event, nil, nil, true))
- e.emit()
return e
}
-func (e *encoder) finish() {
- e.must(yaml_document_end_event_initialize(&e.event, true))
+func newEncoderWithWriter(w io.Writer) *encoder {
+ e := &encoder{}
+ yaml_emitter_initialize(&e.emitter)
+ yaml_emitter_set_output_writer(&e.emitter, w)
+ yaml_emitter_set_unicode(&e.emitter, true)
+ return e
+}
+
+func (e *encoder) init() {
+ if e.doneInit {
+ return
+ }
+ yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING)
e.emit()
+ e.doneInit = true
+}
+
+func (e *encoder) finish() {
e.emitter.open_ended = false
- e.must(yaml_stream_end_event_initialize(&e.event))
+ yaml_stream_end_event_initialize(&e.event)
e.emit()
}
@@ -44,9 +73,7 @@ func (e *encoder) destroy() {
func (e *encoder) emit() {
// This will internally delete the e.event value.
- if !yaml_emitter_emit(&e.emitter, &e.event) && e.event.typ != yaml_DOCUMENT_END_EVENT && e.event.typ != yaml_STREAM_END_EVENT {
- e.must(false)
- }
+ e.must(yaml_emitter_emit(&e.emitter, &e.event))
}
func (e *encoder) must(ok bool) {
@@ -59,13 +86,43 @@ func (e *encoder) must(ok bool) {
}
}
+func (e *encoder) marshalDoc(tag string, in reflect.Value) {
+ e.init()
+ yaml_document_start_event_initialize(&e.event, nil, nil, true)
+ e.emit()
+ e.marshal(tag, in)
+ yaml_document_end_event_initialize(&e.event, true)
+ e.emit()
+}
+
func (e *encoder) marshal(tag string, in reflect.Value) {
- if !in.IsValid() {
+ if !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() {
e.nilv()
return
}
iface := in.Interface()
- if m, ok := iface.(Marshaler); ok {
+ switch m := iface.(type) {
+ case jsonNumber:
+ integer, err := m.Int64()
+ if err == nil {
+ // In this case the json.Number is a valid int64
+ in = reflect.ValueOf(integer)
+ break
+ }
+ float, err := m.Float64()
+ if err == nil {
+ // In this case the json.Number is a valid float64
+ in = reflect.ValueOf(float)
+ break
+ }
+ // fallback case - no number could be obtained
+ in = reflect.ValueOf(m.String())
+ case time.Time, *time.Time:
+ // Although time.Time implements TextMarshaler,
+ // we don't want to treat it as a string for YAML
+ // purposes because YAML has special support for
+ // timestamps.
+ case Marshaler:
v, err := m.MarshalYAML()
if err != nil {
fail(err)
@@ -75,31 +132,34 @@ func (e *encoder) marshal(tag string, in reflect.Value) {
return
}
in = reflect.ValueOf(v)
- } else if m, ok := iface.(encoding.TextMarshaler); ok {
+ case encoding.TextMarshaler:
text, err := m.MarshalText()
if err != nil {
fail(err)
}
in = reflect.ValueOf(string(text))
+ case nil:
+ e.nilv()
+ return
}
switch in.Kind() {
case reflect.Interface:
- if in.IsNil() {
- e.nilv()
- } else {
- e.marshal(tag, in.Elem())
- }
+ e.marshal(tag, in.Elem())
case reflect.Map:
e.mapv(tag, in)
case reflect.Ptr:
- if in.IsNil() {
- e.nilv()
+ if in.Type() == ptrTimeType {
+ e.timev(tag, in.Elem())
} else {
e.marshal(tag, in.Elem())
}
case reflect.Struct:
- e.structv(tag, in)
- case reflect.Slice:
+ if in.Type() == timeType {
+ e.timev(tag, in)
+ } else {
+ e.structv(tag, in)
+ }
+ case reflect.Slice, reflect.Array:
if in.Type().Elem() == mapItemType {
e.itemsv(tag, in)
} else {
@@ -191,10 +251,10 @@ func (e *encoder) mappingv(tag string, f func()) {
e.flow = false
style = yaml_FLOW_MAPPING_STYLE
}
- e.must(yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))
+ yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)
e.emit()
f()
- e.must(yaml_mapping_end_event_initialize(&e.event))
+ yaml_mapping_end_event_initialize(&e.event)
e.emit()
}
@@ -240,23 +300,36 @@ var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0
func (e *encoder) stringv(tag string, in reflect.Value) {
var style yaml_scalar_style_t
s := in.String()
- rtag, rs := resolve("", s)
- if rtag == yaml_BINARY_TAG {
- if tag == "" || tag == yaml_STR_TAG {
- tag = rtag
- s = rs.(string)
- } else if tag == yaml_BINARY_TAG {
+ canUsePlain := true
+ switch {
+ case !utf8.ValidString(s):
+ if tag == yaml_BINARY_TAG {
failf("explicitly tagged !!binary data must be base64-encoded")
- } else {
+ }
+ if tag != "" {
failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag))
}
+ // It can't be encoded directly as YAML so use a binary tag
+ // and encode it as base64.
+ tag = yaml_BINARY_TAG
+ s = encodeBase64(s)
+ case tag == "":
+ // Check to see if it would resolve to a specific
+ // tag when encoded unquoted. If it doesn't,
+ // there's no need to quote it.
+ rtag, _ := resolve("", s)
+ canUsePlain = rtag == yaml_STR_TAG && !isBase60Float(s)
}
- if tag == "" && (rtag != yaml_STR_TAG || isBase60Float(s)) {
- style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
- } else if strings.Contains(s, "\n") {
+ // Note: it's possible for user code to emit invalid YAML
+ // if they explicitly specify a tag and a string containing
+ // text that's incompatible with that tag.
+ switch {
+ case strings.Contains(s, "\n"):
style = yaml_LITERAL_SCALAR_STYLE
- } else {
+ case canUsePlain:
style = yaml_PLAIN_SCALAR_STYLE
+ default:
+ style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
}
e.emitScalar(s, "", tag, style)
}
@@ -281,9 +354,20 @@ func (e *encoder) uintv(tag string, in reflect.Value) {
e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
}
+func (e *encoder) timev(tag string, in reflect.Value) {
+ t := in.Interface().(time.Time)
+ s := t.Format(time.RFC3339Nano)
+ e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE)
+}
+
func (e *encoder) floatv(tag string, in reflect.Value) {
- // FIXME: Handle 64 bits here.
- s := strconv.FormatFloat(float64(in.Float()), 'g', -1, 32)
+ // Issue #352: When formatting, use the precision of the underlying value
+ precision := 64
+ if in.Kind() == reflect.Float32 {
+ precision = 32
+ }
+
+ s := strconv.FormatFloat(in.Float(), 'g', -1, precision)
switch s {
case "+Inf":
s = ".inf"
diff --git a/vendor/gopkg.in/yaml.v2/readerc.go b/vendor/gopkg.in/yaml.v2/readerc.go
index f45079171..7c1f5fac3 100644
--- a/vendor/gopkg.in/yaml.v2/readerc.go
+++ b/vendor/gopkg.in/yaml.v2/readerc.go
@@ -93,9 +93,18 @@ func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool {
panic("read handler must be set")
}
+ // [Go] This function was changed to guarantee the requested length size at EOF.
+ // The fact we need to do this is pretty awful, but the description above implies
+ // for that to be the case, and there are tests
+
// If the EOF flag is set and the raw buffer is empty, do nothing.
if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) {
- return true
+ // [Go] ACTUALLY! Read the documentation of this function above.
+ // This is just broken. To return true, we need to have the
+ // given length in the buffer. Not doing that means every single
+ // check that calls this function to make sure the buffer has a
+ // given length is Go) panicking; or C) accessing invalid memory.
+ //return true
}
// Return if the buffer contains enough characters.
@@ -389,6 +398,15 @@ func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool {
break
}
}
+ // [Go] Read the documentation of this function above. To return true,
+ // we need to have the given length in the buffer. Not doing that means
+ // every single check that calls this function to make sure the buffer
+ // has a given length is Go) panicking; or C) accessing invalid memory.
+ // This happens here due to the EOF above breaking early.
+ for buffer_len < length {
+ parser.buffer[buffer_len] = 0
+ buffer_len++
+ }
parser.buffer = parser.buffer[:buffer_len]
return true
}
diff --git a/vendor/gopkg.in/yaml.v2/resolve.go b/vendor/gopkg.in/yaml.v2/resolve.go
index 232313cc0..6c151db6f 100644
--- a/vendor/gopkg.in/yaml.v2/resolve.go
+++ b/vendor/gopkg.in/yaml.v2/resolve.go
@@ -6,7 +6,7 @@ import (
"regexp"
"strconv"
"strings"
- "unicode/utf8"
+ "time"
)
type resolveMapItem struct {
@@ -75,7 +75,7 @@ func longTag(tag string) string {
func resolvableTag(tag string) bool {
switch tag {
- case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG:
+ case "", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG, yaml_TIMESTAMP_TAG:
return true
}
return false
@@ -92,6 +92,19 @@ func resolve(tag string, in string) (rtag string, out interface{}) {
switch tag {
case "", rtag, yaml_STR_TAG, yaml_BINARY_TAG:
return
+ case yaml_FLOAT_TAG:
+ if rtag == yaml_INT_TAG {
+ switch v := out.(type) {
+ case int64:
+ rtag = yaml_FLOAT_TAG
+ out = float64(v)
+ return
+ case int:
+ rtag = yaml_FLOAT_TAG
+ out = float64(v)
+ return
+ }
+ }
}
failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag))
}()
@@ -125,6 +138,15 @@ func resolve(tag string, in string) (rtag string, out interface{}) {
case 'D', 'S':
// Int, float, or timestamp.
+ // Only try values as a timestamp if the value is unquoted or there's an explicit
+ // !!timestamp tag.
+ if tag == "" || tag == yaml_TIMESTAMP_TAG {
+ t, ok := parseTimestamp(in)
+ if ok {
+ return yaml_TIMESTAMP_TAG, t
+ }
+ }
+
plain := strings.Replace(in, "_", "", -1)
intv, err := strconv.ParseInt(plain, 0, 64)
if err == nil {
@@ -158,28 +180,20 @@ func resolve(tag string, in string) (rtag string, out interface{}) {
return yaml_INT_TAG, uintv
}
} else if strings.HasPrefix(plain, "-0b") {
- intv, err := strconv.ParseInt(plain[3:], 2, 64)
+ intv, err := strconv.ParseInt("-" + plain[3:], 2, 64)
if err == nil {
- if intv == int64(int(intv)) {
- return yaml_INT_TAG, -int(intv)
+ if true || intv == int64(int(intv)) {
+ return yaml_INT_TAG, int(intv)
} else {
- return yaml_INT_TAG, -intv
+ return yaml_INT_TAG, intv
}
}
}
- // XXX Handle timestamps here.
-
default:
panic("resolveTable item not yet handled: " + string(rune(hint)) + " (with " + in + ")")
}
}
- if tag == yaml_BINARY_TAG {
- return yaml_BINARY_TAG, in
- }
- if utf8.ValidString(in) {
- return yaml_STR_TAG, in
- }
- return yaml_BINARY_TAG, encodeBase64(in)
+ return yaml_STR_TAG, in
}
// encodeBase64 encodes s as base64 that is broken up into multiple lines
@@ -206,3 +220,39 @@ func encodeBase64(s string) string {
}
return string(out[:k])
}
+
+// This is a subset of the formats allowed by the regular expression
+// defined at http://yaml.org/type/timestamp.html.
+var allowedTimestampFormats = []string{
+ "2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields.
+ "2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t".
+ "2006-1-2 15:4:5.999999999", // space separated with no time zone
+ "2006-1-2", // date only
+ // Notable exception: time.Parse cannot handle: "2001-12-14 21:59:43.10 -5"
+ // from the set of examples.
+}
+
+// parseTimestamp parses s as a timestamp string and
+// returns the timestamp and reports whether it succeeded.
+// Timestamp formats are defined at http://yaml.org/type/timestamp.html
+func parseTimestamp(s string) (time.Time, bool) {
+ // TODO write code to check all the formats supported by
+ // http://yaml.org/type/timestamp.html instead of using time.Parse.
+
+ // Quick check: all date formats start with YYYY-.
+ i := 0
+ for ; i < len(s); i++ {
+ if c := s[i]; c < '0' || c > '9' {
+ break
+ }
+ }
+ if i != 4 || i == len(s) || s[i] != '-' {
+ return time.Time{}, false
+ }
+ for _, format := range allowedTimestampFormats {
+ if t, err := time.Parse(format, s); err == nil {
+ return t, true
+ }
+ }
+ return time.Time{}, false
+}
diff --git a/vendor/gopkg.in/yaml.v2/scannerc.go b/vendor/gopkg.in/yaml.v2/scannerc.go
index 2c9d5111f..077fd1dd2 100644
--- a/vendor/gopkg.in/yaml.v2/scannerc.go
+++ b/vendor/gopkg.in/yaml.v2/scannerc.go
@@ -611,7 +611,7 @@ func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, co
if directive {
context = "while parsing a %TAG directive"
}
- return yaml_parser_set_scanner_error(parser, context, context_mark, "did not find URI escaped octet")
+ return yaml_parser_set_scanner_error(parser, context, context_mark, problem)
}
func trace(args ...interface{}) func() {
@@ -871,12 +871,6 @@ func yaml_parser_save_simple_key(parser *yaml_parser_t) bool {
required := parser.flow_level == 0 && parser.indent == parser.mark.column
- // A simple key is required only when it is the first token in the current
- // line. Therefore it is always allowed. But we add a check anyway.
- if required && !parser.simple_key_allowed {
- panic("should not happen")
- }
-
//
// If the current position may start a simple key, save it.
//
@@ -1944,7 +1938,7 @@ func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_ma
} else {
// It's either the '!' tag or not really a tag handle. If it's a %TAG
// directive, it's an error. If it's a tag token, it must be a part of URI.
- if directive && !(s[0] == '!' && s[1] == 0) {
+ if directive && string(s) != "!" {
yaml_parser_set_scanner_tag_error(parser, directive,
start_mark, "did not find expected '!'")
return false
@@ -1959,6 +1953,7 @@ func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_ma
func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool {
//size_t length = head ? strlen((char *)head) : 0
var s []byte
+ hasTag := len(head) > 0
// Copy the head if needed.
//
@@ -2000,10 +1995,10 @@ func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte
if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
return false
}
+ hasTag = true
}
- // Check if the tag is non-empty.
- if len(s) == 0 {
+ if !hasTag {
yaml_parser_set_scanner_tag_error(parser, directive,
start_mark, "did not find expected tag URI")
return false
@@ -2474,6 +2469,10 @@ func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, si
}
}
+ if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
+ return false
+ }
+
// Check if we are at the end of the scalar.
if single {
if parser.buffer[parser.buffer_pos] == '\'' {
@@ -2486,10 +2485,6 @@ func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, si
}
// Consume blank characters.
- if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {
- return false
- }
-
for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {
if is_blank(parser.buffer, parser.buffer_pos) {
// Consume a space or a tab character.
@@ -2591,19 +2586,10 @@ func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) b
// Consume non-blank characters.
for !is_blankz(parser.buffer, parser.buffer_pos) {
- // Check for 'x:x' in the flow context. TODO: Fix the test "spec-08-13".
- if parser.flow_level > 0 &&
- parser.buffer[parser.buffer_pos] == ':' &&
- !is_blankz(parser.buffer, parser.buffer_pos+1) {
- yaml_parser_set_scanner_error(parser, "while scanning a plain scalar",
- start_mark, "found unexpected ':'")
- return false
- }
-
// Check for indicators that may end a plain scalar.
if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) ||
(parser.flow_level > 0 &&
- (parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == ':' ||
+ (parser.buffer[parser.buffer_pos] == ',' ||
parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' ||
parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||
parser.buffer[parser.buffer_pos] == '}')) {
@@ -2655,10 +2641,10 @@ func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) b
for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {
if is_blank(parser.buffer, parser.buffer_pos) {
- // Check for tab character that abuse indentation.
+ // Check for tab characters that abuse indentation.
if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) {
yaml_parser_set_scanner_error(parser, "while scanning a plain scalar",
- start_mark, "found a tab character that violate indentation")
+ start_mark, "found a tab character that violates indentation")
return false
}
diff --git a/vendor/gopkg.in/yaml.v2/sorter.go b/vendor/gopkg.in/yaml.v2/sorter.go
index 5958822f9..4c45e660a 100644
--- a/vendor/gopkg.in/yaml.v2/sorter.go
+++ b/vendor/gopkg.in/yaml.v2/sorter.go
@@ -51,6 +51,15 @@ func (l keyList) Less(i, j int) bool {
}
var ai, bi int
var an, bn int64
+ if ar[i] == '0' || br[i] == '0' {
+ for j := i-1; j >= 0 && unicode.IsDigit(ar[j]); j-- {
+ if ar[j] != '0' {
+ an = 1
+ bn = 1
+ break
+ }
+ }
+ }
for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ {
an = an*10 + int64(ar[ai]-'0')
}
diff --git a/vendor/gopkg.in/yaml.v2/writerc.go b/vendor/gopkg.in/yaml.v2/writerc.go
index 190362f25..a2dde608c 100644
--- a/vendor/gopkg.in/yaml.v2/writerc.go
+++ b/vendor/gopkg.in/yaml.v2/writerc.go
@@ -18,72 +18,9 @@ func yaml_emitter_flush(emitter *yaml_emitter_t) bool {
return true
}
- // If the output encoding is UTF-8, we don't need to recode the buffer.
- if emitter.encoding == yaml_UTF8_ENCODING {
- if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil {
- return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error())
- }
- emitter.buffer_pos = 0
- return true
- }
-
- // Recode the buffer into the raw buffer.
- var low, high int
- if emitter.encoding == yaml_UTF16LE_ENCODING {
- low, high = 0, 1
- } else {
- high, low = 1, 0
- }
-
- pos := 0
- for pos < emitter.buffer_pos {
- // See the "reader.c" code for more details on UTF-8 encoding. Note
- // that we assume that the buffer contains a valid UTF-8 sequence.
-
- // Read the next UTF-8 character.
- octet := emitter.buffer[pos]
-
- var w int
- var value rune
- switch {
- case octet&0x80 == 0x00:
- w, value = 1, rune(octet&0x7F)
- case octet&0xE0 == 0xC0:
- w, value = 2, rune(octet&0x1F)
- case octet&0xF0 == 0xE0:
- w, value = 3, rune(octet&0x0F)
- case octet&0xF8 == 0xF0:
- w, value = 4, rune(octet&0x07)
- }
- for k := 1; k < w; k++ {
- octet = emitter.buffer[pos+k]
- value = (value << 6) + (rune(octet) & 0x3F)
- }
- pos += w
-
- // Write the character.
- if value < 0x10000 {
- var b [2]byte
- b[high] = byte(value >> 8)
- b[low] = byte(value & 0xFF)
- emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1])
- } else {
- // Write the character using a surrogate pair (check "reader.c").
- var b [4]byte
- value -= 0x10000
- b[high] = byte(0xD8 + (value >> 18))
- b[low] = byte((value >> 10) & 0xFF)
- b[high+2] = byte(0xDC + ((value >> 8) & 0xFF))
- b[low+2] = byte(value & 0xFF)
- emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1], b[2], b[3])
- }
- }
-
- // Write the raw buffer.
- if err := emitter.write_handler(emitter, emitter.raw_buffer); err != nil {
+ if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil {
return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error())
}
emitter.buffer_pos = 0
- emitter.raw_buffer = emitter.raw_buffer[:0]
return true
}
diff --git a/vendor/gopkg.in/yaml.v2/yaml.go b/vendor/gopkg.in/yaml.v2/yaml.go
index 36d6b883a..de85aa4cd 100644
--- a/vendor/gopkg.in/yaml.v2/yaml.go
+++ b/vendor/gopkg.in/yaml.v2/yaml.go
@@ -9,6 +9,7 @@ package yaml
import (
"errors"
"fmt"
+ "io"
"reflect"
"strings"
"sync"
@@ -77,8 +78,65 @@ type Marshaler interface {
// supported tag options.
//
func Unmarshal(in []byte, out interface{}) (err error) {
+ return unmarshal(in, out, false)
+}
+
+// UnmarshalStrict is like Unmarshal except that any fields that are found
+// in the data that do not have corresponding struct members, or mapping
+// keys that are duplicates, will result in
+// an error.
+func UnmarshalStrict(in []byte, out interface{}) (err error) {
+ return unmarshal(in, out, true)
+}
+
+// A Decorder reads and decodes YAML values from an input stream.
+type Decoder struct {
+ strict bool
+ parser *parser
+}
+
+// NewDecoder returns a new decoder that reads from r.
+//
+// The decoder introduces its own buffering and may read
+// data from r beyond the YAML values requested.
+func NewDecoder(r io.Reader) *Decoder {
+ return &Decoder{
+ parser: newParserFromReader(r),
+ }
+}
+
+// SetStrict sets whether strict decoding behaviour is enabled when
+// decoding items in the data (see UnmarshalStrict). By default, decoding is not strict.
+func (dec *Decoder) SetStrict(strict bool) {
+ dec.strict = strict
+}
+
+// Decode reads the next YAML-encoded value from its input
+// and stores it in the value pointed to by v.
+//
+// See the documentation for Unmarshal for details about the
+// conversion of YAML into a Go value.
+func (dec *Decoder) Decode(v interface{}) (err error) {
+ d := newDecoder(dec.strict)
+ defer handleErr(&err)
+ node := dec.parser.parse()
+ if node == nil {
+ return io.EOF
+ }
+ out := reflect.ValueOf(v)
+ if out.Kind() == reflect.Ptr && !out.IsNil() {
+ out = out.Elem()
+ }
+ d.unmarshal(node, out)
+ if len(d.terrors) > 0 {
+ return &TypeError{d.terrors}
+ }
+ return nil
+}
+
+func unmarshal(in []byte, out interface{}, strict bool) (err error) {
defer handleErr(&err)
- d := newDecoder()
+ d := newDecoder(strict)
p := newParser(in)
defer p.destroy()
node := p.parse()
@@ -99,8 +157,8 @@ func Unmarshal(in []byte, out interface{}) (err error) {
// of the generated document will reflect the structure of the value itself.
// Maps and pointers (to struct, string, int, etc) are accepted as the in value.
//
-// Struct fields are only unmarshalled if they are exported (have an upper case
-// first letter), and are unmarshalled using the field name lowercased as the
+// Struct fields are only marshalled if they are exported (have an upper case
+// first letter), and are marshalled using the field name lowercased as the
// default key. Custom keys may be defined via the "yaml" name in the field
// tag: the content preceding the first comma is used as the key, and the
// following comma-separated options are used to tweak the marshalling process.
@@ -114,7 +172,10 @@ func Unmarshal(in []byte, out interface{}) (err error) {
//
// omitempty Only include the field if it's not set to the zero
// value for the type or to empty slices or maps.
-// Does not apply to zero valued structs.
+// Zero valued structs will be omitted if all their public
+// fields are zero, unless they implement an IsZero
+// method (see the IsZeroer interface type), in which
+// case the field will be included if that method returns true.
//
// flow Marshal using a flow style (useful for structs,
// sequences and maps).
@@ -129,7 +190,7 @@ func Unmarshal(in []byte, out interface{}) (err error) {
// For example:
//
// type T struct {
-// F int "a,omitempty"
+// F int `yaml:"a,omitempty"`
// B int
// }
// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n"
@@ -139,12 +200,47 @@ func Marshal(in interface{}) (out []byte, err error) {
defer handleErr(&err)
e := newEncoder()
defer e.destroy()
- e.marshal("", reflect.ValueOf(in))
+ e.marshalDoc("", reflect.ValueOf(in))
e.finish()
out = e.out
return
}
+// An Encoder writes YAML values to an output stream.
+type Encoder struct {
+ encoder *encoder
+}
+
+// NewEncoder returns a new encoder that writes to w.
+// The Encoder should be closed after use to flush all data
+// to w.
+func NewEncoder(w io.Writer) *Encoder {
+ return &Encoder{
+ encoder: newEncoderWithWriter(w),
+ }
+}
+
+// Encode writes the YAML encoding of v to the stream.
+// If multiple items are encoded to the stream, the
+// second and subsequent document will be preceded
+// with a "---" document separator, but the first will not.
+//
+// See the documentation for Marshal for details about the conversion of Go
+// values to YAML.
+func (e *Encoder) Encode(v interface{}) (err error) {
+ defer handleErr(&err)
+ e.encoder.marshalDoc("", reflect.ValueOf(v))
+ return nil
+}
+
+// Close closes the encoder by writing any remaining data.
+// It does not write a stream terminating string "...".
+func (e *Encoder) Close() (err error) {
+ defer handleErr(&err)
+ e.encoder.finish()
+ return nil
+}
+
func handleErr(err *error) {
if v := recover(); v != nil {
if e, ok := v.(yamlError); ok {
@@ -200,6 +296,9 @@ type fieldInfo struct {
Num int
OmitEmpty bool
Flow bool
+ // Id holds the unique field identifier, so we can cheaply
+ // check for field duplicates without maintaining an extra map.
+ Id int
// Inline holds the field index if the field is part of an inlined struct.
Inline []int
@@ -279,6 +378,7 @@ func getStructInfo(st reflect.Type) (*structInfo, error) {
} else {
finfo.Inline = append([]int{i}, finfo.Inline...)
}
+ finfo.Id = len(fieldsList)
fieldsMap[finfo.Key] = finfo
fieldsList = append(fieldsList, finfo)
}
@@ -300,11 +400,16 @@ func getStructInfo(st reflect.Type) (*structInfo, error) {
return nil, errors.New(msg)
}
+ info.Id = len(fieldsList)
fieldsList = append(fieldsList, info)
fieldsMap[info.Key] = info
}
- sinfo = &structInfo{fieldsMap, fieldsList, inlineMap}
+ sinfo = &structInfo{
+ FieldsMap: fieldsMap,
+ FieldsList: fieldsList,
+ InlineMap: inlineMap,
+ }
fieldMapMutex.Lock()
structMap[st] = sinfo
@@ -312,8 +417,23 @@ func getStructInfo(st reflect.Type) (*structInfo, error) {
return sinfo, nil
}
+// IsZeroer is used to check whether an object is zero to
+// determine whether it should be omitted when marshaling
+// with the omitempty flag. One notable implementation
+// is time.Time.
+type IsZeroer interface {
+ IsZero() bool
+}
+
func isZero(v reflect.Value) bool {
- switch v.Kind() {
+ kind := v.Kind()
+ if z, ok := v.Interface().(IsZeroer); ok {
+ if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() {
+ return true
+ }
+ return z.IsZero()
+ }
+ switch kind {
case reflect.String:
return len(v.String()) == 0
case reflect.Interface, reflect.Ptr:
diff --git a/vendor/gopkg.in/yaml.v2/yamlh.go b/vendor/gopkg.in/yaml.v2/yamlh.go
index d60a6b6b0..e25cee563 100644
--- a/vendor/gopkg.in/yaml.v2/yamlh.go
+++ b/vendor/gopkg.in/yaml.v2/yamlh.go
@@ -1,6 +1,7 @@
package yaml
import (
+ "fmt"
"io"
)
@@ -239,6 +240,27 @@ const (
yaml_MAPPING_END_EVENT // A MAPPING-END event.
)
+var eventStrings = []string{
+ yaml_NO_EVENT: "none",
+ yaml_STREAM_START_EVENT: "stream start",
+ yaml_STREAM_END_EVENT: "stream end",
+ yaml_DOCUMENT_START_EVENT: "document start",
+ yaml_DOCUMENT_END_EVENT: "document end",
+ yaml_ALIAS_EVENT: "alias",
+ yaml_SCALAR_EVENT: "scalar",
+ yaml_SEQUENCE_START_EVENT: "sequence start",
+ yaml_SEQUENCE_END_EVENT: "sequence end",
+ yaml_MAPPING_START_EVENT: "mapping start",
+ yaml_MAPPING_END_EVENT: "mapping end",
+}
+
+func (e yaml_event_type_t) String() string {
+ if e < 0 || int(e) >= len(eventStrings) {
+ return fmt.Sprintf("unknown event %d", e)
+ }
+ return eventStrings[e]
+}
+
// The event structure.
type yaml_event_t struct {
@@ -508,7 +530,7 @@ type yaml_parser_t struct {
problem string // Error description.
- // The byte about which the problem occured.
+ // The byte about which the problem occurred.
problem_offset int
problem_value int
problem_mark yaml_mark_t
@@ -521,9 +543,9 @@ type yaml_parser_t struct {
read_handler yaml_read_handler_t // Read handler.
- input_file io.Reader // File input data.
- input []byte // String input data.
- input_pos int
+ input_reader io.Reader // File input data.
+ input []byte // String input data.
+ input_pos int
eof bool // EOF flag
@@ -632,7 +654,7 @@ type yaml_emitter_t struct {
write_handler yaml_write_handler_t // Write handler.
output_buffer *[]byte // String output data.
- output_file io.Writer // File output data.
+ output_writer io.Writer // File output data.
buffer []byte // The working buffer.
buffer_pos int // The current position of the buffer.
diff --git a/vendor/k8s.io/api/core/v1/generated.pb.go b/vendor/k8s.io/api/core/v1/generated.pb.go
index 48bfca98f..85c7b634b 100644
--- a/vendor/k8s.io/api/core/v1/generated.pb.go
+++ b/vendor/k8s.io/api/core/v1/generated.pb.go
@@ -7353,6 +7353,11 @@ func (m *PodSecurityContext) MarshalTo(dAtA []byte) (int, error) {
i++
i = encodeVarintGenerated(dAtA, i, uint64(*m.FSGroup))
}
+ if m.RunAsGroup != nil {
+ dAtA[i] = 0x30
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(*m.RunAsGroup))
+ }
return i, nil
}
@@ -9440,6 +9445,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) {
}
i++
}
+ if m.RunAsGroup != nil {
+ dAtA[i] = 0x40
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(*m.RunAsGroup))
+ }
return i, nil
}
@@ -12932,6 +12942,9 @@ func (m *PodSecurityContext) Size() (n int) {
if m.FSGroup != nil {
n += 1 + sovGenerated(uint64(*m.FSGroup))
}
+ if m.RunAsGroup != nil {
+ n += 1 + sovGenerated(uint64(*m.RunAsGroup))
+ }
return n
}
@@ -13679,6 +13692,9 @@ func (m *SecurityContext) Size() (n int) {
if m.AllowPrivilegeEscalation != nil {
n += 2
}
+ if m.RunAsGroup != nil {
+ n += 1 + sovGenerated(uint64(*m.RunAsGroup))
+ }
return n
}
@@ -15912,6 +15928,7 @@ func (this *PodSecurityContext) String() string {
`RunAsNonRoot:` + valueToStringGenerated(this.RunAsNonRoot) + `,`,
`SupplementalGroups:` + fmt.Sprintf("%v", this.SupplementalGroups) + `,`,
`FSGroup:` + valueToStringGenerated(this.FSGroup) + `,`,
+ `RunAsGroup:` + valueToStringGenerated(this.RunAsGroup) + `,`,
`}`,
}, "")
return s
@@ -16527,6 +16544,7 @@ func (this *SecurityContext) String() string {
`RunAsNonRoot:` + valueToStringGenerated(this.RunAsNonRoot) + `,`,
`ReadOnlyRootFilesystem:` + valueToStringGenerated(this.ReadOnlyRootFilesystem) + `,`,
`AllowPrivilegeEscalation:` + valueToStringGenerated(this.AllowPrivilegeEscalation) + `,`,
+ `RunAsGroup:` + valueToStringGenerated(this.RunAsGroup) + `,`,
`}`,
}, "")
return s
@@ -38270,6 +38288,26 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error {
}
}
m.FSGroup = &v
+ case 6:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field RunAsGroup", wireType)
+ }
+ var v int64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= (int64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.RunAsGroup = &v
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
@@ -45825,6 +45863,26 @@ func (m *SecurityContext) Unmarshal(dAtA []byte) error {
}
b := bool(v != 0)
m.AllowPrivilegeEscalation = &b
+ case 8:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field RunAsGroup", wireType)
+ }
+ var v int64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= (int64(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.RunAsGroup = &v
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
@@ -50275,796 +50333,797 @@ func init() {
}
var fileDescriptorGenerated = []byte{
- // 12646 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x5b, 0x70, 0x24, 0x47,
- 0x76, 0x18, 0xba, 0xd5, 0x8d, 0x57, 0x1f, 0xbc, 0x73, 0x66, 0x48, 0x0c, 0x48, 0x4e, 0x0f, 0x8b,
- 0xbb, 0xc3, 0xe1, 0x0b, 0x58, 0x0e, 0xc9, 0x25, 0xb5, 0xdc, 0xa5, 0x04, 0xa0, 0x81, 0x99, 0xe6,
- 0x0c, 0x30, 0xcd, 0x6c, 0xcc, 0xcc, 0x2e, 0x45, 0xed, 0xdd, 0x42, 0x77, 0xa2, 0x51, 0x44, 0xa1,
- 0xaa, 0x59, 0x55, 0x8d, 0x19, 0x30, 0xa4, 0x88, 0x7b, 0x57, 0x8f, 0x7b, 0xf5, 0xf8, 0xd8, 0xb8,
- 0x52, 0xd8, 0xb2, 0xa4, 0x90, 0x23, 0x6c, 0x39, 0xa4, 0xb5, 0x6c, 0x47, 0xc8, 0x92, 0x25, 0x59,
- 0x92, 0x6d, 0x59, 0x76, 0x38, 0xa4, 0x1f, 0x59, 0xf2, 0xcf, 0x2a, 0x42, 0x61, 0x58, 0x82, 0x14,
- 0x76, 0xe8, 0xc3, 0x0e, 0x87, 0xf5, 0x25, 0x58, 0xb6, 0x1c, 0xf9, 0xac, 0xcc, 0xea, 0xaa, 0xee,
- 0xc6, 0x10, 0x03, 0x52, 0x8a, 0xfd, 0xeb, 0xce, 0x73, 0xf2, 0x64, 0x56, 0x3e, 0x4e, 0x9e, 0x3c,
- 0x79, 0x1e, 0xf0, 0xe6, 0xee, 0x1b, 0xd1, 0x82, 0x1b, 0x2c, 0xee, 0x76, 0xb6, 0x48, 0xe8, 0x93,
- 0x98, 0x44, 0x8b, 0xfb, 0xc4, 0x6f, 0x06, 0xe1, 0xa2, 0x00, 0x38, 0x6d, 0x77, 0xb1, 0x11, 0x84,
- 0x64, 0x71, 0xff, 0xe5, 0xc5, 0x16, 0xf1, 0x49, 0xe8, 0xc4, 0xa4, 0xb9, 0xd0, 0x0e, 0x83, 0x38,
- 0x40, 0x88, 0xe3, 0x2c, 0x38, 0x6d, 0x77, 0x81, 0xe2, 0x2c, 0xec, 0xbf, 0x3c, 0xff, 0x52, 0xcb,
- 0x8d, 0x77, 0x3a, 0x5b, 0x0b, 0x8d, 0x60, 0x6f, 0xb1, 0x15, 0xb4, 0x82, 0x45, 0x86, 0xba, 0xd5,
- 0xd9, 0x66, 0xff, 0xd8, 0x1f, 0xf6, 0x8b, 0x93, 0x98, 0x5f, 0x4f, 0x9a, 0x21, 0x0f, 0x62, 0xe2,
- 0x47, 0x6e, 0xe0, 0x47, 0x2f, 0x39, 0x6d, 0x37, 0x22, 0xe1, 0x3e, 0x09, 0x17, 0xdb, 0xbb, 0x2d,
- 0x0a, 0x8b, 0x4c, 0x84, 0xc5, 0xfd, 0x97, 0xb7, 0x48, 0xec, 0x74, 0xf5, 0x68, 0xfe, 0xd5, 0x84,
- 0xdc, 0x9e, 0xd3, 0xd8, 0x71, 0x7d, 0x12, 0x1e, 0x48, 0x1a, 0x8b, 0x21, 0x89, 0x82, 0x4e, 0xd8,
- 0x20, 0x27, 0xaa, 0x15, 0x2d, 0xee, 0x91, 0xd8, 0xc9, 0xf8, 0xfa, 0xf9, 0xc5, 0xbc, 0x5a, 0x61,
- 0xc7, 0x8f, 0xdd, 0xbd, 0xee, 0x66, 0x3e, 0xd7, 0xaf, 0x42, 0xd4, 0xd8, 0x21, 0x7b, 0x4e, 0x57,
- 0xbd, 0x57, 0xf2, 0xea, 0x75, 0x62, 0xd7, 0x5b, 0x74, 0xfd, 0x38, 0x8a, 0xc3, 0x74, 0x25, 0xfb,
- 0x9b, 0x16, 0x5c, 0x5e, 0xba, 0x57, 0x5f, 0xf5, 0x9c, 0x28, 0x76, 0x1b, 0xcb, 0x5e, 0xd0, 0xd8,
- 0xad, 0xc7, 0x41, 0x48, 0xee, 0x06, 0x5e, 0x67, 0x8f, 0xd4, 0xd9, 0x40, 0xa0, 0x17, 0x61, 0x6c,
- 0x9f, 0xfd, 0xaf, 0x56, 0xe6, 0xac, 0xcb, 0xd6, 0xd5, 0xd2, 0xf2, 0xcc, 0x6f, 0x1f, 0x96, 0x3f,
- 0x75, 0x74, 0x58, 0x1e, 0xbb, 0x2b, 0xca, 0xb1, 0xc2, 0x40, 0x57, 0x60, 0x64, 0x3b, 0xda, 0x3c,
- 0x68, 0x93, 0xb9, 0x02, 0xc3, 0x9d, 0x12, 0xb8, 0x23, 0x6b, 0x75, 0x5a, 0x8a, 0x05, 0x14, 0x2d,
- 0x42, 0xa9, 0xed, 0x84, 0xb1, 0x1b, 0xbb, 0x81, 0x3f, 0x57, 0xbc, 0x6c, 0x5d, 0x1d, 0x5e, 0x9e,
- 0x15, 0xa8, 0xa5, 0x9a, 0x04, 0xe0, 0x04, 0x87, 0x76, 0x23, 0x24, 0x4e, 0xf3, 0xb6, 0xef, 0x1d,
- 0xcc, 0x0d, 0x5d, 0xb6, 0xae, 0x8e, 0x25, 0xdd, 0xc0, 0xa2, 0x1c, 0x2b, 0x0c, 0xfb, 0x27, 0x0a,
- 0x30, 0xb6, 0xb4, 0xbd, 0xed, 0xfa, 0x6e, 0x7c, 0x80, 0xee, 0xc2, 0x84, 0x1f, 0x34, 0x89, 0xfc,
- 0xcf, 0xbe, 0x62, 0xfc, 0xda, 0xe5, 0x85, 0xee, 0x95, 0xb9, 0xb0, 0xa1, 0xe1, 0x2d, 0xcf, 0x1c,
- 0x1d, 0x96, 0x27, 0xf4, 0x12, 0x6c, 0xd0, 0x41, 0x18, 0xc6, 0xdb, 0x41, 0x53, 0x91, 0x2d, 0x30,
- 0xb2, 0xe5, 0x2c, 0xb2, 0xb5, 0x04, 0x6d, 0x79, 0xfa, 0xe8, 0xb0, 0x3c, 0xae, 0x15, 0x60, 0x9d,
- 0x08, 0xda, 0x82, 0x69, 0xfa, 0xd7, 0x8f, 0x5d, 0x45, 0xb7, 0xc8, 0xe8, 0x3e, 0x93, 0x47, 0x57,
- 0x43, 0x5d, 0x3e, 0x77, 0x74, 0x58, 0x9e, 0x4e, 0x15, 0xe2, 0x34, 0x41, 0xfb, 0x43, 0x98, 0x5a,
- 0x8a, 0x63, 0xa7, 0xb1, 0x43, 0x9a, 0x7c, 0x06, 0xd1, 0xab, 0x30, 0xe4, 0x3b, 0x7b, 0x44, 0xcc,
- 0xef, 0x65, 0x31, 0xb0, 0x43, 0x1b, 0xce, 0x1e, 0x39, 0x3e, 0x2c, 0xcf, 0xdc, 0xf1, 0xdd, 0x0f,
- 0x3a, 0x62, 0x55, 0xd0, 0x32, 0xcc, 0xb0, 0xd1, 0x35, 0x80, 0x26, 0xd9, 0x77, 0x1b, 0xa4, 0xe6,
- 0xc4, 0x3b, 0x62, 0xbe, 0x91, 0xa8, 0x0b, 0x15, 0x05, 0xc1, 0x1a, 0x96, 0xfd, 0x00, 0x4a, 0x4b,
- 0xfb, 0x81, 0xdb, 0xac, 0x05, 0xcd, 0x08, 0xed, 0xc2, 0x74, 0x3b, 0x24, 0xdb, 0x24, 0x54, 0x45,
- 0x73, 0xd6, 0xe5, 0xe2, 0xd5, 0xf1, 0x6b, 0x57, 0x33, 0x3f, 0xd6, 0x44, 0x5d, 0xf5, 0xe3, 0xf0,
- 0x60, 0xf9, 0x71, 0xd1, 0xde, 0x74, 0x0a, 0x8a, 0xd3, 0x94, 0xed, 0x7f, 0x5b, 0x80, 0x0b, 0x4b,
- 0x1f, 0x76, 0x42, 0x52, 0x71, 0xa3, 0xdd, 0xf4, 0x0a, 0x6f, 0xba, 0xd1, 0xee, 0x46, 0x32, 0x02,
- 0x6a, 0x69, 0x55, 0x44, 0x39, 0x56, 0x18, 0xe8, 0x25, 0x18, 0xa5, 0xbf, 0xef, 0xe0, 0xaa, 0xf8,
- 0xe4, 0x73, 0x02, 0x79, 0xbc, 0xe2, 0xc4, 0x4e, 0x85, 0x83, 0xb0, 0xc4, 0x41, 0xeb, 0x30, 0xde,
- 0x60, 0x1b, 0xb2, 0xb5, 0x1e, 0x34, 0x09, 0x9b, 0xcc, 0xd2, 0xf2, 0x0b, 0x14, 0x7d, 0x25, 0x29,
- 0x3e, 0x3e, 0x2c, 0xcf, 0xf1, 0xbe, 0x09, 0x12, 0x1a, 0x0c, 0xeb, 0xf5, 0x91, 0xad, 0xf6, 0xd7,
- 0x10, 0xa3, 0x04, 0x19, 0x7b, 0xeb, 0xaa, 0xb6, 0x55, 0x86, 0xd9, 0x56, 0x99, 0xc8, 0xde, 0x26,
- 0xe8, 0x65, 0x18, 0xda, 0x75, 0xfd, 0xe6, 0xdc, 0x08, 0xa3, 0xf5, 0x14, 0x9d, 0xf3, 0x9b, 0xae,
- 0xdf, 0x3c, 0x3e, 0x2c, 0xcf, 0x1a, 0xdd, 0xa1, 0x85, 0x98, 0xa1, 0xda, 0x7f, 0x6e, 0x41, 0x99,
- 0xc1, 0xd6, 0x5c, 0x8f, 0xd4, 0x48, 0x18, 0xb9, 0x51, 0x4c, 0xfc, 0xd8, 0x18, 0xd0, 0x6b, 0x00,
- 0x11, 0x69, 0x84, 0x24, 0xd6, 0x86, 0x54, 0x2d, 0x8c, 0xba, 0x82, 0x60, 0x0d, 0x8b, 0x32, 0x84,
- 0x68, 0xc7, 0x09, 0xd9, 0xfa, 0x12, 0x03, 0xab, 0x18, 0x42, 0x5d, 0x02, 0x70, 0x82, 0x63, 0x30,
- 0x84, 0x62, 0x3f, 0x86, 0x80, 0xbe, 0x08, 0xd3, 0x49, 0x63, 0x51, 0xdb, 0x69, 0xc8, 0x01, 0x64,
- 0x5b, 0xa6, 0x6e, 0x82, 0x70, 0x1a, 0xd7, 0xfe, 0x87, 0x96, 0x58, 0x3c, 0xf4, 0xab, 0x3f, 0xe1,
- 0xdf, 0x6a, 0xff, 0xaa, 0x05, 0xa3, 0xcb, 0xae, 0xdf, 0x74, 0xfd, 0x16, 0xfa, 0x2a, 0x8c, 0xd1,
- 0xb3, 0xa9, 0xe9, 0xc4, 0x8e, 0xe0, 0x7b, 0x9f, 0xd5, 0xf6, 0x96, 0x3a, 0x2a, 0x16, 0xda, 0xbb,
- 0x2d, 0x5a, 0x10, 0x2d, 0x50, 0x6c, 0xba, 0xdb, 0x6e, 0x6f, 0xbd, 0x4f, 0x1a, 0xf1, 0x3a, 0x89,
- 0x9d, 0xe4, 0x73, 0x92, 0x32, 0xac, 0xa8, 0xa2, 0x9b, 0x30, 0x12, 0x3b, 0x61, 0x8b, 0xc4, 0x82,
- 0x01, 0x66, 0x32, 0x2a, 0x5e, 0x13, 0xd3, 0x1d, 0x49, 0xfc, 0x06, 0x49, 0x8e, 0x85, 0x4d, 0x56,
- 0x15, 0x0b, 0x12, 0xf6, 0x0f, 0x8d, 0xc0, 0xc5, 0x95, 0x7a, 0x35, 0x67, 0x5d, 0x5d, 0x81, 0x91,
- 0x66, 0xe8, 0xee, 0x93, 0x50, 0x8c, 0xb3, 0xa2, 0x52, 0x61, 0xa5, 0x58, 0x40, 0xd1, 0x1b, 0x30,
- 0xc1, 0x0f, 0xa4, 0x1b, 0x8e, 0xdf, 0xf4, 0xe4, 0x10, 0x9f, 0x17, 0xd8, 0x13, 0x77, 0x35, 0x18,
- 0x36, 0x30, 0x4f, 0xb8, 0xa8, 0xae, 0xa4, 0x36, 0x63, 0xde, 0x61, 0xf7, 0x83, 0x16, 0xcc, 0xf0,
- 0x66, 0x96, 0xe2, 0x38, 0x74, 0xb7, 0x3a, 0x31, 0x89, 0xe6, 0x86, 0x19, 0xa7, 0x5b, 0xc9, 0x1a,
- 0xad, 0xdc, 0x11, 0x58, 0xb8, 0x9b, 0xa2, 0xc2, 0x99, 0xe0, 0x9c, 0x68, 0x77, 0x26, 0x0d, 0xc6,
- 0x5d, 0xcd, 0xa2, 0xef, 0xb5, 0x60, 0xbe, 0x11, 0xf8, 0x71, 0x18, 0x78, 0x1e, 0x09, 0x6b, 0x9d,
- 0x2d, 0xcf, 0x8d, 0x76, 0xf8, 0x3a, 0xc5, 0x64, 0x9b, 0x71, 0x82, 0x9c, 0x39, 0x54, 0x48, 0x62,
- 0x0e, 0x2f, 0x1d, 0x1d, 0x96, 0xe7, 0x57, 0x72, 0x49, 0xe1, 0x1e, 0xcd, 0xa0, 0x5d, 0x40, 0xf4,
- 0x28, 0xad, 0xc7, 0x4e, 0x8b, 0x24, 0x8d, 0x8f, 0x0e, 0xde, 0xf8, 0x63, 0x47, 0x87, 0x65, 0xb4,
- 0xd1, 0x45, 0x02, 0x67, 0x90, 0x45, 0x1f, 0xc0, 0x79, 0x5a, 0xda, 0xf5, 0xad, 0x63, 0x83, 0x37,
- 0x37, 0x77, 0x74, 0x58, 0x3e, 0xbf, 0x91, 0x41, 0x04, 0x67, 0x92, 0x9e, 0x5f, 0x81, 0x0b, 0x99,
- 0x53, 0x85, 0x66, 0xa0, 0xb8, 0x4b, 0xb8, 0x08, 0x52, 0xc2, 0xf4, 0x27, 0x3a, 0x0f, 0xc3, 0xfb,
- 0x8e, 0xd7, 0x11, 0xab, 0x14, 0xf3, 0x3f, 0x9f, 0x2f, 0xbc, 0x61, 0xd9, 0x0d, 0x98, 0x58, 0x71,
- 0xda, 0xce, 0x96, 0xeb, 0xb9, 0xb1, 0x4b, 0x22, 0xf4, 0x2c, 0x14, 0x9d, 0x66, 0x93, 0x1d, 0x91,
- 0xa5, 0xe5, 0x0b, 0x47, 0x87, 0xe5, 0xe2, 0x52, 0x93, 0xf2, 0x6a, 0x50, 0x58, 0x07, 0x98, 0x62,
- 0xa0, 0xe7, 0x61, 0xa8, 0x19, 0x06, 0xed, 0xb9, 0x02, 0xc3, 0xa4, 0x43, 0x35, 0x54, 0x09, 0x83,
- 0x76, 0x0a, 0x95, 0xe1, 0xd8, 0xbf, 0x59, 0x80, 0x27, 0x57, 0x48, 0x7b, 0x67, 0xad, 0x9e, 0xb3,
- 0xe9, 0xae, 0xc2, 0xd8, 0x5e, 0xe0, 0xbb, 0x71, 0x10, 0x46, 0xa2, 0x69, 0x76, 0x9a, 0xac, 0x8b,
- 0x32, 0xac, 0xa0, 0xe8, 0x32, 0x0c, 0xb5, 0x13, 0x49, 0x60, 0x42, 0x4a, 0x11, 0x4c, 0x06, 0x60,
- 0x10, 0x8a, 0xd1, 0x89, 0x48, 0x28, 0x4e, 0x41, 0x85, 0x71, 0x27, 0x22, 0x21, 0x66, 0x90, 0x84,
- 0x9d, 0x52, 0x46, 0x2b, 0xb6, 0x55, 0x8a, 0x9d, 0x52, 0x08, 0xd6, 0xb0, 0x50, 0x0d, 0x4a, 0x91,
- 0x9a, 0xd4, 0xe1, 0xc1, 0x27, 0x75, 0x92, 0xf1, 0x5b, 0x35, 0x93, 0x09, 0x11, 0x83, 0x0d, 0x8c,
- 0xf4, 0xe5, 0xb7, 0xbf, 0x5e, 0x00, 0xc4, 0x87, 0xf0, 0xaf, 0xd9, 0xc0, 0xdd, 0xe9, 0x1e, 0xb8,
- 0x4c, 0xc9, 0xeb, 0x56, 0xd0, 0x70, 0xbc, 0x34, 0x0b, 0x3f, 0xad, 0xd1, 0xfb, 0x71, 0x0b, 0xd0,
- 0x8a, 0xeb, 0x37, 0x49, 0x78, 0x06, 0xd7, 0x8e, 0x93, 0x1d, 0xa4, 0xb7, 0x60, 0x6a, 0xc5, 0x73,
- 0x89, 0x1f, 0x57, 0x6b, 0x2b, 0x81, 0xbf, 0xed, 0xb6, 0xd0, 0xe7, 0x61, 0x8a, 0xde, 0xc2, 0x82,
- 0x4e, 0x5c, 0x27, 0x8d, 0xc0, 0x67, 0x02, 0x2b, 0xbd, 0xbb, 0xa0, 0xa3, 0xc3, 0xf2, 0xd4, 0xa6,
- 0x01, 0xc1, 0x29, 0x4c, 0xfb, 0x0f, 0xe9, 0x87, 0x06, 0x7b, 0xed, 0xc0, 0x27, 0x7e, 0xbc, 0x12,
- 0xf8, 0x4d, 0x7e, 0xb1, 0xf9, 0x3c, 0x0c, 0xc5, 0xb4, 0xe3, 0xfc, 0x23, 0xaf, 0xc8, 0xa9, 0xa5,
- 0xdd, 0x3d, 0x3e, 0x2c, 0x3f, 0xd6, 0x5d, 0x83, 0x7d, 0x10, 0xab, 0x83, 0xbe, 0x0d, 0x46, 0xa2,
- 0xd8, 0x89, 0x3b, 0x91, 0xf8, 0xec, 0xa7, 0xe5, 0x67, 0xd7, 0x59, 0xe9, 0xf1, 0x61, 0x79, 0x5a,
- 0x55, 0xe3, 0x45, 0x58, 0x54, 0x40, 0xcf, 0xc1, 0xe8, 0x1e, 0x89, 0x22, 0xa7, 0x25, 0x65, 0xd2,
- 0x69, 0x51, 0x77, 0x74, 0x9d, 0x17, 0x63, 0x09, 0x47, 0xcf, 0xc0, 0x30, 0x09, 0xc3, 0x20, 0x14,
- 0xab, 0x6a, 0x52, 0x20, 0x0e, 0xaf, 0xd2, 0x42, 0xcc, 0x61, 0xf6, 0xbf, 0xb7, 0x60, 0x5a, 0xf5,
- 0x95, 0xb7, 0x75, 0x06, 0xc2, 0xc7, 0xbb, 0x00, 0x0d, 0xf9, 0x81, 0x11, 0xe3, 0x77, 0xe3, 0xd7,
- 0xae, 0x64, 0x1e, 0xa9, 0x5d, 0xc3, 0x98, 0x50, 0x56, 0x45, 0x11, 0xd6, 0xa8, 0xd9, 0xff, 0xc2,
- 0x82, 0x73, 0xa9, 0x2f, 0xba, 0xe5, 0x46, 0x31, 0x7a, 0xaf, 0xeb, 0xab, 0x16, 0x06, 0xfb, 0x2a,
- 0x5a, 0x9b, 0x7d, 0x93, 0x5a, 0x73, 0xb2, 0x44, 0xfb, 0xa2, 0x1b, 0x30, 0xec, 0xc6, 0x64, 0x4f,
- 0x7e, 0xcc, 0x33, 0x3d, 0x3f, 0x86, 0xf7, 0x2a, 0x99, 0x91, 0x2a, 0xad, 0x89, 0x39, 0x01, 0xfb,
- 0x47, 0x8b, 0x50, 0xe2, 0xcb, 0x76, 0xdd, 0x69, 0x9f, 0xc1, 0x5c, 0x54, 0x61, 0x88, 0x51, 0xe7,
- 0x1d, 0x7f, 0x36, 0xbb, 0xe3, 0xa2, 0x3b, 0x0b, 0xf4, 0x66, 0xc1, 0x85, 0x17, 0xc5, 0xcc, 0x68,
- 0x11, 0x66, 0x24, 0x90, 0x03, 0xb0, 0xe5, 0xfa, 0x4e, 0x78, 0x40, 0xcb, 0xe6, 0x8a, 0x8c, 0xe0,
- 0x4b, 0xbd, 0x09, 0x2e, 0x2b, 0x7c, 0x4e, 0x56, 0xf5, 0x35, 0x01, 0x60, 0x8d, 0xe8, 0xfc, 0xeb,
- 0x50, 0x52, 0xc8, 0x27, 0x39, 0x95, 0xe7, 0xbf, 0x08, 0xd3, 0xa9, 0xb6, 0xfa, 0x55, 0x9f, 0xd0,
- 0x0f, 0xf5, 0x5f, 0x63, 0x5c, 0x40, 0xf4, 0x7a, 0xd5, 0xdf, 0x17, 0xec, 0xee, 0x43, 0x38, 0xef,
- 0x65, 0x70, 0x59, 0x31, 0x55, 0x83, 0x73, 0xe5, 0x27, 0xc5, 0x67, 0x9f, 0xcf, 0x82, 0xe2, 0xcc,
- 0x36, 0xe8, 0x41, 0x15, 0xb4, 0xe9, 0x9a, 0x77, 0x3c, 0xd6, 0x5f, 0x71, 0x5f, 0xbc, 0x2d, 0xca,
- 0xb0, 0x82, 0x52, 0x16, 0x76, 0x5e, 0x75, 0xfe, 0x26, 0x39, 0xa8, 0x13, 0x8f, 0x34, 0xe2, 0x20,
- 0xfc, 0x58, 0xbb, 0xff, 0x14, 0x1f, 0x7d, 0xce, 0x01, 0xc7, 0x05, 0x81, 0xe2, 0x4d, 0x72, 0xc0,
- 0xa7, 0x42, 0xff, 0xba, 0x62, 0xcf, 0xaf, 0xfb, 0x05, 0x0b, 0x26, 0xd5, 0xd7, 0x9d, 0xc1, 0x56,
- 0x5f, 0x36, 0xb7, 0xfa, 0x53, 0x3d, 0x17, 0x78, 0xce, 0x26, 0xff, 0x2b, 0xc6, 0xa4, 0x04, 0x4e,
- 0x2d, 0x0c, 0xe8, 0xd0, 0xd0, 0x53, 0xe5, 0xe3, 0x9c, 0x90, 0x41, 0xbe, 0xeb, 0x26, 0x39, 0xd8,
- 0x0c, 0xa8, 0x80, 0x93, 0xfd, 0x5d, 0xc6, 0xac, 0x0d, 0xf5, 0x9c, 0xb5, 0x5f, 0x2a, 0xc0, 0x05,
- 0x35, 0x02, 0x86, 0x08, 0xf1, 0xd7, 0x7d, 0x0c, 0x5e, 0x86, 0xf1, 0x26, 0xd9, 0x76, 0x3a, 0x5e,
- 0xac, 0x54, 0x47, 0xc3, 0x5c, 0x7d, 0x58, 0x49, 0x8a, 0xb1, 0x8e, 0x73, 0x82, 0x61, 0xfb, 0x99,
- 0x71, 0x76, 0x3a, 0xc4, 0x0e, 0x5d, 0xc1, 0x54, 0xbe, 0xd4, 0x14, 0x80, 0x13, 0xba, 0x02, 0x50,
- 0x28, 0xfb, 0x9e, 0x81, 0x61, 0x77, 0x8f, 0x4a, 0x0b, 0x05, 0x53, 0x08, 0xa8, 0xd2, 0x42, 0xcc,
- 0x61, 0xe8, 0x33, 0x30, 0xda, 0x08, 0xf6, 0xf6, 0x1c, 0xbf, 0xc9, 0x98, 0x76, 0x69, 0x79, 0x9c,
- 0x0a, 0x14, 0x2b, 0xbc, 0x08, 0x4b, 0x18, 0x7a, 0x12, 0x86, 0x9c, 0xb0, 0x15, 0xcd, 0x0d, 0x31,
- 0x9c, 0x31, 0xda, 0xd2, 0x52, 0xd8, 0x8a, 0x30, 0x2b, 0xa5, 0x92, 0xec, 0xfd, 0x20, 0xdc, 0x75,
- 0xfd, 0x56, 0xc5, 0x0d, 0x99, 0x58, 0xaa, 0x49, 0xb2, 0xf7, 0x14, 0x04, 0x6b, 0x58, 0x68, 0x0d,
- 0x86, 0xdb, 0x41, 0x18, 0x47, 0x73, 0x23, 0x6c, 0xb8, 0x9f, 0xce, 0xd9, 0x4a, 0xfc, 0x6b, 0x6b,
- 0x41, 0x18, 0x27, 0x1f, 0x40, 0xff, 0x45, 0x98, 0x57, 0x47, 0xdf, 0x06, 0x45, 0xe2, 0xef, 0xcf,
- 0x8d, 0x32, 0x2a, 0xf3, 0x59, 0x54, 0x56, 0xfd, 0xfd, 0xbb, 0x4e, 0x98, 0xf0, 0x99, 0x55, 0x7f,
- 0x1f, 0xd3, 0x3a, 0xe8, 0xcb, 0x50, 0x92, 0x8f, 0x07, 0x91, 0xb8, 0x5a, 0x66, 0x2e, 0x31, 0x2c,
- 0x90, 0x30, 0xf9, 0xa0, 0xe3, 0x86, 0x64, 0x8f, 0xf8, 0x71, 0x94, 0xa8, 0x7f, 0x24, 0x34, 0xc2,
- 0x09, 0x35, 0xf4, 0x65, 0xa9, 0xcf, 0x58, 0x0f, 0x3a, 0x7e, 0x1c, 0xcd, 0x95, 0x58, 0xf7, 0x32,
- 0x35, 0xcd, 0x77, 0x13, 0xbc, 0xb4, 0xc2, 0x83, 0x57, 0xc6, 0x06, 0x29, 0x84, 0x61, 0xd2, 0x73,
- 0xf7, 0x89, 0x4f, 0xa2, 0xa8, 0x16, 0x06, 0x5b, 0x64, 0x0e, 0x58, 0xcf, 0x2f, 0x66, 0x2b, 0x60,
- 0x83, 0x2d, 0xb2, 0x3c, 0x7b, 0x74, 0x58, 0x9e, 0xbc, 0xa5, 0xd7, 0xc1, 0x26, 0x09, 0x74, 0x07,
- 0xa6, 0xa8, 0x08, 0xed, 0x26, 0x44, 0xc7, 0xfb, 0x11, 0x65, 0xf2, 0x33, 0x36, 0x2a, 0xe1, 0x14,
- 0x11, 0xf4, 0x36, 0x94, 0x3c, 0x77, 0x9b, 0x34, 0x0e, 0x1a, 0x1e, 0x99, 0x9b, 0x60, 0x14, 0x33,
- 0xb7, 0xd5, 0x2d, 0x89, 0xc4, 0xaf, 0x28, 0xea, 0x2f, 0x4e, 0xaa, 0xa3, 0xbb, 0xf0, 0x58, 0x4c,
- 0xc2, 0x3d, 0xd7, 0x77, 0xe8, 0x76, 0x10, 0x12, 0x2f, 0x53, 0x63, 0x4f, 0xb2, 0xf5, 0x76, 0x49,
- 0x0c, 0xdd, 0x63, 0x9b, 0x99, 0x58, 0x38, 0xa7, 0x36, 0xba, 0x0d, 0xd3, 0x6c, 0x27, 0xd4, 0x3a,
- 0x9e, 0x57, 0x0b, 0x3c, 0xb7, 0x71, 0x30, 0x37, 0xc5, 0x08, 0x7e, 0x46, 0xea, 0xa9, 0xab, 0x26,
- 0x98, 0xde, 0xc9, 0x93, 0x7f, 0x38, 0x5d, 0x1b, 0x6d, 0x31, 0xbd, 0x65, 0x27, 0x74, 0xe3, 0x03,
- 0xba, 0x7e, 0xc9, 0x83, 0x78, 0x6e, 0xba, 0xe7, 0x0d, 0x57, 0x47, 0x55, 0xca, 0x4d, 0xbd, 0x10,
- 0xa7, 0x09, 0xd2, 0xad, 0x1d, 0xc5, 0x4d, 0xd7, 0x9f, 0x9b, 0x61, 0x1c, 0x43, 0xed, 0x8c, 0x3a,
- 0x2d, 0xc4, 0x1c, 0xc6, 0x74, 0x96, 0xf4, 0xc7, 0x6d, 0xca, 0x41, 0x67, 0x19, 0x62, 0xa2, 0xb3,
- 0x94, 0x00, 0x9c, 0xe0, 0xd0, 0x63, 0x39, 0x8e, 0x0f, 0xe6, 0x10, 0x43, 0x55, 0xdb, 0x65, 0x73,
- 0xf3, 0xcb, 0x98, 0x96, 0xa3, 0x5b, 0x30, 0x4a, 0xfc, 0xfd, 0xb5, 0x30, 0xd8, 0x9b, 0x3b, 0x97,
- 0xbf, 0x67, 0x57, 0x39, 0x0a, 0x67, 0xe8, 0xc9, 0x15, 0x45, 0x14, 0x63, 0x49, 0x02, 0x3d, 0x80,
- 0xb9, 0x8c, 0x19, 0xe1, 0x13, 0x70, 0x9e, 0x4d, 0xc0, 0x17, 0x44, 0xdd, 0xb9, 0xcd, 0x1c, 0xbc,
- 0xe3, 0x1e, 0x30, 0x9c, 0x4b, 0x1d, 0x7d, 0x17, 0x4c, 0xf2, 0x0d, 0xc5, 0x1f, 0x3c, 0xa2, 0xb9,
- 0x0b, 0xec, 0x6b, 0x2e, 0xe7, 0x6f, 0x4e, 0x8e, 0xb8, 0x7c, 0x41, 0x74, 0x68, 0x52, 0x2f, 0x8d,
- 0xb0, 0x49, 0xcd, 0xde, 0x82, 0x29, 0xc5, 0xb7, 0xd8, 0xd2, 0x41, 0x65, 0x18, 0xa6, 0x0c, 0x59,
- 0xea, 0x14, 0x4a, 0x74, 0xa6, 0x98, 0xa2, 0x1a, 0xf3, 0x72, 0x36, 0x53, 0xee, 0x87, 0x64, 0xf9,
- 0x20, 0x26, 0xfc, 0x5e, 0x58, 0xd4, 0x66, 0x4a, 0x02, 0x70, 0x82, 0x63, 0xff, 0x6f, 0x2e, 0xf7,
- 0x24, 0xcc, 0x71, 0x80, 0xe3, 0xe0, 0x45, 0x18, 0xdb, 0x09, 0xa2, 0x98, 0x62, 0xb3, 0x36, 0x86,
- 0x13, 0x49, 0xe7, 0x86, 0x28, 0xc7, 0x0a, 0x03, 0xbd, 0x09, 0x93, 0x0d, 0xbd, 0x01, 0x71, 0x96,
- 0xa9, 0x21, 0x30, 0x5a, 0xc7, 0x26, 0x2e, 0x7a, 0x03, 0xc6, 0xd8, 0x73, 0x65, 0x23, 0xf0, 0xc4,
- 0x0d, 0x54, 0x1e, 0xc8, 0x63, 0x35, 0x51, 0x7e, 0xac, 0xfd, 0xc6, 0x0a, 0x1b, 0x5d, 0x81, 0x11,
- 0xda, 0x85, 0x6a, 0x4d, 0x9c, 0x22, 0x4a, 0x2b, 0x70, 0x83, 0x95, 0x62, 0x01, 0xb5, 0xff, 0xff,
- 0x82, 0x36, 0xca, 0xf4, 0x4e, 0x45, 0x50, 0x0d, 0x46, 0xef, 0x3b, 0x6e, 0xec, 0xfa, 0x2d, 0x21,
- 0x2e, 0x3c, 0xd7, 0xf3, 0x48, 0x61, 0x95, 0xee, 0xf1, 0x0a, 0xfc, 0xd0, 0x13, 0x7f, 0xb0, 0x24,
- 0x43, 0x29, 0x86, 0x1d, 0xdf, 0xa7, 0x14, 0x0b, 0x83, 0x52, 0xc4, 0xbc, 0x02, 0xa7, 0x28, 0xfe,
- 0x60, 0x49, 0x06, 0xbd, 0x07, 0x20, 0x97, 0x25, 0x69, 0x8a, 0x67, 0xc2, 0x17, 0xfb, 0x13, 0xdd,
- 0x54, 0x75, 0x96, 0xa7, 0xe8, 0x91, 0x9a, 0xfc, 0xc7, 0x1a, 0x3d, 0x3b, 0x66, 0x62, 0x55, 0x77,
- 0x67, 0xd0, 0x77, 0x52, 0x4e, 0xe0, 0x84, 0x31, 0x69, 0x2e, 0xc5, 0x62, 0x70, 0x9e, 0x1f, 0x4c,
- 0x2a, 0xde, 0x74, 0xf7, 0x88, 0xce, 0x35, 0x04, 0x11, 0x9c, 0xd0, 0xb3, 0x7f, 0xa5, 0x08, 0x73,
- 0x79, 0xdd, 0xa5, 0x8b, 0x8e, 0x3c, 0x70, 0xe3, 0x15, 0x2a, 0x0d, 0x59, 0xe6, 0xa2, 0x5b, 0x15,
- 0xe5, 0x58, 0x61, 0xd0, 0xd9, 0x8f, 0xdc, 0x96, 0xbc, 0xd4, 0x0c, 0x27, 0xb3, 0x5f, 0x67, 0xa5,
- 0x58, 0x40, 0x29, 0x5e, 0x48, 0x9c, 0x48, 0xbc, 0x43, 0x6b, 0xab, 0x04, 0xb3, 0x52, 0x2c, 0xa0,
- 0xba, 0xc6, 0x64, 0xa8, 0x8f, 0xc6, 0xc4, 0x18, 0xa2, 0xe1, 0xd3, 0x1d, 0x22, 0xf4, 0x15, 0x80,
- 0x6d, 0xd7, 0x77, 0xa3, 0x1d, 0x46, 0x7d, 0xe4, 0xc4, 0xd4, 0x95, 0x2c, 0xb5, 0xa6, 0xa8, 0x60,
- 0x8d, 0x22, 0x7a, 0x0d, 0xc6, 0xd5, 0x06, 0xac, 0x56, 0x98, 0x52, 0x5e, 0x7b, 0xe4, 0x4c, 0xb8,
- 0x51, 0x05, 0xeb, 0x78, 0xf6, 0xfb, 0xe9, 0xf5, 0x22, 0x76, 0x80, 0x36, 0xbe, 0xd6, 0xa0, 0xe3,
- 0x5b, 0xe8, 0x3d, 0xbe, 0xf6, 0x6f, 0x15, 0x61, 0xda, 0x68, 0xac, 0x13, 0x0d, 0xc0, 0xb3, 0xae,
- 0xd3, 0x73, 0xce, 0x89, 0x89, 0xd8, 0x7f, 0x76, 0xff, 0xad, 0xa2, 0x9f, 0x85, 0x74, 0x07, 0xf0,
- 0xfa, 0xe8, 0x2b, 0x50, 0xf2, 0x9c, 0x88, 0x69, 0x5f, 0x88, 0xd8, 0x77, 0x83, 0x10, 0x4b, 0xee,
- 0x11, 0x4e, 0x14, 0x6b, 0x47, 0x0d, 0xa7, 0x9d, 0x90, 0xa4, 0x07, 0x32, 0x95, 0x7d, 0xa4, 0xa1,
- 0x83, 0xea, 0x04, 0x15, 0x90, 0x0e, 0x30, 0x87, 0xa1, 0x37, 0x60, 0x22, 0x24, 0x6c, 0x55, 0xac,
- 0x50, 0x51, 0x8e, 0x2d, 0xb3, 0xe1, 0x44, 0xe6, 0xc3, 0x1a, 0x0c, 0x1b, 0x98, 0x89, 0x28, 0x3f,
- 0xd2, 0x43, 0x94, 0x7f, 0x0e, 0x46, 0xd9, 0x0f, 0xb5, 0x02, 0xd4, 0x6c, 0x54, 0x79, 0x31, 0x96,
- 0xf0, 0xf4, 0x82, 0x19, 0x1b, 0x70, 0xc1, 0x3c, 0x0f, 0x53, 0x15, 0x87, 0xec, 0x05, 0xfe, 0xaa,
- 0xdf, 0x6c, 0x07, 0xae, 0x1f, 0xa3, 0x39, 0x18, 0x62, 0xa7, 0x03, 0xdf, 0xdb, 0x43, 0x94, 0x02,
- 0x1e, 0xa2, 0x82, 0xb9, 0xfd, 0xfb, 0x05, 0x98, 0xac, 0x10, 0x8f, 0xc4, 0x84, 0x5f, 0x65, 0x22,
- 0xb4, 0x06, 0xa8, 0x15, 0x3a, 0x0d, 0x52, 0x23, 0xa1, 0x1b, 0x34, 0x75, 0x6d, 0x6c, 0x91, 0x3f,
- 0x0e, 0x5d, 0xef, 0x82, 0xe2, 0x8c, 0x1a, 0xe8, 0x5d, 0x98, 0x6c, 0x87, 0xc4, 0x50, 0x22, 0x5a,
- 0x79, 0xd2, 0x48, 0x4d, 0x47, 0xe4, 0x82, 0xb0, 0x51, 0x84, 0x4d, 0x52, 0xe8, 0x3b, 0x60, 0x26,
- 0x08, 0xdb, 0x3b, 0x8e, 0x5f, 0x21, 0x6d, 0xe2, 0x37, 0xa9, 0xa4, 0x2f, 0x54, 0x10, 0xe7, 0x8f,
- 0x0e, 0xcb, 0x33, 0xb7, 0x53, 0x30, 0xdc, 0x85, 0x8d, 0xde, 0x85, 0xd9, 0x76, 0x18, 0xb4, 0x9d,
- 0x16, 0x5b, 0x28, 0x42, 0xa0, 0xe1, 0xdc, 0xe7, 0xc5, 0xa3, 0xc3, 0xf2, 0x6c, 0x2d, 0x0d, 0x3c,
- 0x3e, 0x2c, 0x9f, 0x63, 0x03, 0x45, 0x4b, 0x12, 0x20, 0xee, 0x26, 0x63, 0xb7, 0xe0, 0x42, 0x25,
- 0xb8, 0xef, 0xdf, 0x77, 0xc2, 0xe6, 0x52, 0xad, 0xaa, 0xe9, 0x0e, 0x36, 0xe4, 0xdd, 0x95, 0x1b,
- 0x63, 0x64, 0x9e, 0x53, 0x5a, 0x4d, 0x2e, 0xbf, 0xac, 0xb9, 0x1e, 0xc9, 0xd1, 0x51, 0xfc, 0xed,
- 0x82, 0xd1, 0x52, 0x82, 0xaf, 0x1e, 0x3e, 0xac, 0xdc, 0x87, 0x8f, 0x77, 0x60, 0x6c, 0xdb, 0x25,
- 0x5e, 0x13, 0x93, 0x6d, 0x31, 0x33, 0xcf, 0xe6, 0xbf, 0x2f, 0xaf, 0x51, 0x4c, 0xa9, 0x93, 0xe2,
- 0x37, 0xdf, 0x35, 0x51, 0x19, 0x2b, 0x32, 0x68, 0x17, 0x66, 0xe4, 0xd5, 0x4a, 0x42, 0xc5, 0x26,
- 0x7e, 0xae, 0xd7, 0x7d, 0xcd, 0x24, 0xce, 0x26, 0x10, 0xa7, 0xc8, 0xe0, 0x2e, 0xc2, 0xf4, 0xaa,
- 0xbb, 0x47, 0x8f, 0xab, 0x21, 0xb6, 0xa4, 0xd9, 0x55, 0x97, 0xdd, 0xda, 0x59, 0xa9, 0xfd, 0x53,
- 0x16, 0x3c, 0xde, 0x35, 0x32, 0x42, 0x7b, 0x71, 0xca, 0xb3, 0x90, 0xd6, 0x26, 0x14, 0xfa, 0x6b,
- 0x13, 0xec, 0x7f, 0x64, 0xc1, 0xf9, 0xd5, 0xbd, 0x76, 0x7c, 0x50, 0x71, 0xcd, 0xc7, 0x99, 0xd7,
- 0x61, 0x64, 0x8f, 0x34, 0xdd, 0xce, 0x9e, 0x98, 0xb9, 0xb2, 0x64, 0xe9, 0xeb, 0xac, 0xf4, 0xf8,
- 0xb0, 0x3c, 0x59, 0x8f, 0x83, 0xd0, 0x69, 0x11, 0x5e, 0x80, 0x05, 0x3a, 0x3b, 0x18, 0xdd, 0x0f,
- 0xc9, 0x2d, 0x77, 0xcf, 0x95, 0xf6, 0x02, 0x3d, 0x35, 0x6a, 0x0b, 0x72, 0x40, 0x17, 0xde, 0xe9,
- 0x38, 0x7e, 0xec, 0xc6, 0x07, 0xe2, 0xdd, 0x49, 0x12, 0xc1, 0x09, 0x3d, 0xfb, 0x9b, 0x16, 0x4c,
- 0x4b, 0x5e, 0xb2, 0xd4, 0x6c, 0x86, 0x24, 0x8a, 0xd0, 0x3c, 0x14, 0xdc, 0xb6, 0xe8, 0x25, 0x88,
- 0x5e, 0x16, 0xaa, 0x35, 0x5c, 0x70, 0xdb, 0xa8, 0x06, 0x25, 0x6e, 0x76, 0x90, 0x2c, 0xae, 0x81,
- 0x8c, 0x17, 0x58, 0x0f, 0x36, 0x65, 0x4d, 0x9c, 0x10, 0x91, 0x52, 0x31, 0x3b, 0x87, 0x8a, 0xe6,
- 0xa3, 0xd5, 0x0d, 0x51, 0x8e, 0x15, 0x06, 0xba, 0x0a, 0x63, 0x7e, 0xd0, 0xe4, 0x56, 0x20, 0x7c,
- 0x4f, 0xb3, 0x25, 0xbb, 0x21, 0xca, 0xb0, 0x82, 0xda, 0x3f, 0x62, 0xc1, 0x84, 0xfc, 0xb2, 0x01,
- 0x05, 0x74, 0xba, 0xb5, 0x12, 0xe1, 0x3c, 0xd9, 0x5a, 0x54, 0xc0, 0x66, 0x10, 0x43, 0xae, 0x2e,
- 0x9e, 0x44, 0xae, 0xb6, 0x7f, 0xb2, 0x00, 0x53, 0xb2, 0x3b, 0xf5, 0xce, 0x56, 0x44, 0x62, 0xb4,
- 0x09, 0x25, 0x87, 0x0f, 0x39, 0x91, 0x2b, 0xf6, 0x99, 0xec, 0x0b, 0x9d, 0x31, 0x3f, 0x89, 0xa8,
- 0xb3, 0x24, 0x6b, 0xe3, 0x84, 0x10, 0xf2, 0x60, 0xd6, 0x0f, 0x62, 0x76, 0xec, 0x29, 0x78, 0xaf,
- 0x87, 0x91, 0x34, 0xf5, 0x8b, 0x82, 0xfa, 0xec, 0x46, 0x9a, 0x0a, 0xee, 0x26, 0x8c, 0x56, 0xa5,
- 0x12, 0xa9, 0x98, 0x7f, 0x85, 0xd3, 0x67, 0x21, 0x5b, 0x87, 0x64, 0xff, 0x86, 0x05, 0x25, 0x89,
- 0x76, 0x16, 0x6f, 0x60, 0xeb, 0x30, 0x1a, 0xb1, 0x49, 0x90, 0x43, 0x63, 0xf7, 0xea, 0x38, 0x9f,
- 0xaf, 0xe4, 0x34, 0xe7, 0xff, 0x23, 0x2c, 0x69, 0x30, 0x2d, 0xb8, 0xea, 0xfe, 0x27, 0x44, 0x0b,
- 0xae, 0xfa, 0x93, 0x73, 0xc2, 0xfc, 0x17, 0xd6, 0x67, 0x4d, 0x55, 0x40, 0x85, 0xce, 0x76, 0x48,
- 0xb6, 0xdd, 0x07, 0x69, 0xa1, 0xb3, 0xc6, 0x4a, 0xb1, 0x80, 0xa2, 0xf7, 0x60, 0xa2, 0x21, 0x95,
- 0xc7, 0x09, 0x1b, 0xb8, 0xd2, 0x53, 0x15, 0xaf, 0x5e, 0x6d, 0xb8, 0x85, 0xe8, 0x8a, 0x56, 0x1f,
- 0x1b, 0xd4, 0x4c, 0xcb, 0x84, 0x62, 0x3f, 0xcb, 0x84, 0x84, 0x6e, 0xee, 0xdb, 0xba, 0xfd, 0xd3,
- 0x16, 0x8c, 0x70, 0x15, 0xe4, 0x60, 0x3a, 0x5b, 0xed, 0x11, 0x2b, 0x19, 0xbb, 0xbb, 0xb4, 0x50,
- 0x3c, 0x4a, 0xa1, 0x75, 0x28, 0xb1, 0x1f, 0x4c, 0x15, 0x53, 0xcc, 0x37, 0x8d, 0xe5, 0xad, 0xea,
- 0x1d, 0xbc, 0x2b, 0xab, 0xe1, 0x84, 0x82, 0xfd, 0x63, 0x45, 0xca, 0xaa, 0x12, 0x54, 0xe3, 0x04,
- 0xb7, 0x1e, 0xdd, 0x09, 0x5e, 0x78, 0x54, 0x27, 0x78, 0x0b, 0xa6, 0x1b, 0xda, 0x93, 0x57, 0x32,
- 0x93, 0x57, 0x7b, 0x2e, 0x12, 0xed, 0x75, 0x8c, 0xab, 0xe1, 0x56, 0x4c, 0x22, 0x38, 0x4d, 0x15,
- 0x7d, 0x27, 0x4c, 0xf0, 0x79, 0x16, 0xad, 0x0c, 0xb1, 0x56, 0x3e, 0x93, 0xbf, 0x5e, 0xf4, 0x26,
- 0xd8, 0x4a, 0xac, 0x6b, 0xd5, 0xb1, 0x41, 0xcc, 0xfe, 0x95, 0x31, 0x18, 0x5e, 0xdd, 0x27, 0x7e,
- 0x7c, 0x06, 0x0c, 0xa9, 0x01, 0x53, 0xae, 0xbf, 0x1f, 0x78, 0xfb, 0xa4, 0xc9, 0xe1, 0x27, 0x39,
- 0x5c, 0x1f, 0x13, 0xa4, 0xa7, 0xaa, 0x06, 0x09, 0x9c, 0x22, 0xf9, 0x28, 0x6e, 0xed, 0xd7, 0x61,
- 0x84, 0xcf, 0xbd, 0xb8, 0xb2, 0x67, 0x2a, 0xd8, 0xd9, 0x20, 0x8a, 0x5d, 0x90, 0x68, 0x14, 0xb8,
- 0x46, 0x5f, 0x54, 0x47, 0xef, 0xc3, 0xd4, 0xb6, 0x1b, 0x46, 0x31, 0xbd, 0x6e, 0x47, 0xb1, 0xb3,
- 0xd7, 0x7e, 0x88, 0x5b, 0xba, 0x1a, 0x87, 0x35, 0x83, 0x12, 0x4e, 0x51, 0x46, 0x2d, 0x98, 0xa4,
- 0x17, 0xc7, 0xa4, 0xa9, 0xd1, 0x13, 0x37, 0xa5, 0xd4, 0x70, 0xb7, 0x74, 0x42, 0xd8, 0xa4, 0x4b,
- 0x99, 0x49, 0x83, 0x5d, 0x34, 0xc7, 0x98, 0x44, 0xa1, 0x98, 0x09, 0xbf, 0x61, 0x72, 0x18, 0xe5,
- 0x49, 0xcc, 0x98, 0xa5, 0x64, 0xf2, 0x24, 0xcd, 0x64, 0xe5, 0xab, 0x50, 0x22, 0x74, 0x08, 0x29,
- 0x61, 0xf1, 0xd8, 0xb0, 0x38, 0x58, 0x5f, 0xd7, 0xdd, 0x46, 0x18, 0x98, 0xfa, 0x91, 0x55, 0x49,
- 0x09, 0x27, 0x44, 0xd1, 0x0a, 0x8c, 0x44, 0x24, 0x74, 0x49, 0x24, 0x9e, 0x1d, 0x7a, 0x4c, 0x23,
- 0x43, 0xe3, 0x36, 0xd4, 0xfc, 0x37, 0x16, 0x55, 0xe9, 0xf2, 0x72, 0xd8, 0x6d, 0x88, 0xbd, 0x34,
- 0x68, 0xcb, 0x6b, 0x89, 0x95, 0x62, 0x01, 0x45, 0x6f, 0xc3, 0x68, 0x48, 0x3c, 0xa6, 0x80, 0x9b,
- 0x1c, 0x7c, 0x91, 0x73, 0x7d, 0x1e, 0xaf, 0x87, 0x25, 0x01, 0x74, 0x13, 0x50, 0x48, 0xa8, 0x0c,
- 0xe1, 0xfa, 0x2d, 0x65, 0xe2, 0x21, 0xde, 0x0f, 0x9e, 0x10, 0xed, 0x9f, 0xc3, 0x09, 0x86, 0xb4,
- 0xae, 0xc4, 0x19, 0xd5, 0xd0, 0x75, 0x98, 0x55, 0xa5, 0x55, 0x3f, 0x8a, 0x1d, 0xbf, 0x41, 0xd8,
- 0xd3, 0x41, 0x29, 0x91, 0x8a, 0x70, 0x1a, 0x01, 0x77, 0xd7, 0xb1, 0xbf, 0x41, 0xc5, 0x19, 0x3a,
- 0x5a, 0x67, 0x20, 0x0b, 0xbc, 0x65, 0xca, 0x02, 0x17, 0x73, 0x67, 0x2e, 0x47, 0x0e, 0x38, 0xb2,
- 0x60, 0x5c, 0x9b, 0xd9, 0x64, 0xcd, 0x5a, 0x3d, 0xd6, 0x6c, 0x07, 0x66, 0xe8, 0x4a, 0xbf, 0xbd,
- 0xc5, 0xdc, 0x89, 0x9a, 0x6c, 0x61, 0x16, 0x1e, 0x6e, 0x61, 0x2a, 0x43, 0xdc, 0x5b, 0x29, 0x82,
- 0xb8, 0xab, 0x09, 0xf4, 0xba, 0xd4, 0x46, 0x15, 0x0d, 0xd3, 0x2d, 0xae, 0x69, 0x3a, 0x3e, 0x2c,
- 0xcf, 0x68, 0x1f, 0xa2, 0x6b, 0x9f, 0xec, 0xaf, 0xca, 0x6f, 0xe4, 0xcc, 0x66, 0x11, 0x4a, 0x0d,
- 0xb5, 0x58, 0x2c, 0xd3, 0x98, 0x5c, 0x2d, 0x07, 0x9c, 0xe0, 0xd0, 0x3d, 0x4a, 0xaf, 0x20, 0x69,
- 0x6b, 0x43, 0x7a, 0x41, 0xc1, 0x0c, 0x62, 0xbf, 0x02, 0xb0, 0xfa, 0x80, 0x34, 0xf8, 0x52, 0xd7,
- 0x1f, 0x75, 0xad, 0xfc, 0x47, 0x5d, 0xfb, 0x3f, 0x58, 0x30, 0xb5, 0xb6, 0x62, 0x5c, 0x13, 0x17,
- 0x00, 0xf8, 0xdd, 0xe8, 0xde, 0xbd, 0x0d, 0xf9, 0x5e, 0xc1, 0x55, 0xce, 0xaa, 0x14, 0x6b, 0x18,
- 0xe8, 0x22, 0x14, 0xbd, 0x8e, 0x2f, 0xae, 0x2c, 0xa3, 0x47, 0x87, 0xe5, 0xe2, 0xad, 0x8e, 0x8f,
- 0x69, 0x99, 0x66, 0xe0, 0x57, 0x1c, 0xd8, 0xc0, 0xaf, 0xaf, 0x9b, 0x10, 0x2a, 0xc3, 0xf0, 0xfd,
- 0xfb, 0x6e, 0x93, 0x1b, 0x63, 0x8b, 0xb7, 0x94, 0x7b, 0xf7, 0xaa, 0x95, 0x08, 0xf3, 0x72, 0xfb,
- 0xeb, 0x45, 0x98, 0x5f, 0xf3, 0xc8, 0x83, 0x8f, 0x68, 0x90, 0x3e, 0xa8, 0x79, 0xe2, 0xc9, 0xe4,
- 0xc5, 0x93, 0xda, 0x62, 0xf6, 0x1f, 0x8f, 0x6d, 0x18, 0xe5, 0x06, 0x02, 0xd2, 0x3c, 0xfd, 0xcd,
- 0xac, 0xd6, 0xf3, 0x07, 0x64, 0x41, 0x68, 0xe7, 0xb8, 0x09, 0x96, 0x3a, 0x69, 0x45, 0x29, 0x96,
- 0xc4, 0xe7, 0x3f, 0x0f, 0x13, 0x3a, 0xe6, 0x89, 0xac, 0xa2, 0xff, 0x9f, 0x22, 0xcc, 0xd0, 0x1e,
- 0x3c, 0xd2, 0x89, 0xb8, 0xd3, 0x3d, 0x11, 0xa7, 0x6d, 0x19, 0xdb, 0x7f, 0x36, 0xde, 0x4b, 0xcf,
- 0xc6, 0xcb, 0x79, 0xb3, 0x71, 0xd6, 0x73, 0xf0, 0xbd, 0x16, 0x9c, 0x5b, 0xf3, 0x82, 0xc6, 0x6e,
- 0xca, 0x68, 0xf7, 0x35, 0x18, 0xa7, 0x7c, 0x3c, 0x32, 0xbc, 0x61, 0x0c, 0xff, 0x28, 0x01, 0xc2,
- 0x3a, 0x9e, 0x56, 0xed, 0xce, 0x9d, 0x6a, 0x25, 0xcb, 0xad, 0x4a, 0x80, 0xb0, 0x8e, 0x67, 0xff,
- 0xae, 0x05, 0x4f, 0x5d, 0x5f, 0x59, 0x4d, 0x96, 0x62, 0x97, 0x67, 0x17, 0xbd, 0x05, 0x36, 0xb5,
- 0xae, 0x24, 0xb7, 0xc0, 0x0a, 0xeb, 0x85, 0x80, 0x7e, 0x52, 0xbc, 0x16, 0x7f, 0xce, 0x82, 0x73,
- 0xd7, 0xdd, 0x98, 0x1e, 0xcb, 0x69, 0x1f, 0x23, 0x7a, 0x2e, 0x47, 0x6e, 0x1c, 0x84, 0x07, 0x69,
- 0x1f, 0x23, 0xac, 0x20, 0x58, 0xc3, 0xe2, 0x2d, 0xef, 0xbb, 0x11, 0xed, 0x69, 0xc1, 0x54, 0x45,
- 0x61, 0x51, 0x8e, 0x15, 0x06, 0xfd, 0xb0, 0xa6, 0x1b, 0xb2, 0xab, 0xc4, 0x81, 0xe0, 0xb0, 0xea,
- 0xc3, 0x2a, 0x12, 0x80, 0x13, 0x1c, 0xfb, 0xa7, 0x2c, 0xb8, 0x70, 0xdd, 0xeb, 0x44, 0x31, 0x09,
- 0xb7, 0x23, 0xa3, 0xb3, 0xaf, 0x40, 0x89, 0xc8, 0xeb, 0xba, 0xe8, 0xab, 0x12, 0x30, 0xd5, 0x3d,
- 0x9e, 0x3b, 0x38, 0x29, 0xbc, 0x01, 0x2c, 0xe0, 0x4f, 0x66, 0xb9, 0xfd, 0x8b, 0x05, 0x98, 0xbc,
- 0xb1, 0xb9, 0x59, 0xbb, 0x4e, 0x62, 0x71, 0x8a, 0xf5, 0x57, 0x35, 0x63, 0x4d, 0x63, 0xd6, 0xeb,
- 0x52, 0xd4, 0x89, 0x5d, 0x6f, 0x81, 0x7b, 0xd4, 0x2e, 0x54, 0xfd, 0xf8, 0x76, 0x58, 0x8f, 0x43,
- 0xd7, 0x6f, 0x65, 0xea, 0xd8, 0xe4, 0x59, 0x5b, 0xcc, 0x3b, 0x6b, 0xd1, 0x2b, 0x30, 0xc2, 0x5c,
- 0x7a, 0xe5, 0xf5, 0xe4, 0x09, 0x75, 0xa7, 0x60, 0xa5, 0xc7, 0x87, 0xe5, 0xd2, 0x1d, 0x5c, 0xe5,
- 0x7f, 0xb0, 0x40, 0x45, 0x77, 0x60, 0x7c, 0x27, 0x8e, 0xdb, 0x37, 0x88, 0xd3, 0x24, 0xa1, 0xe4,
- 0x0e, 0x97, 0xb2, 0xb8, 0x03, 0x1d, 0x04, 0x8e, 0x96, 0x6c, 0xa8, 0xa4, 0x2c, 0xc2, 0x3a, 0x1d,
- 0xbb, 0x0e, 0x90, 0xc0, 0x4e, 0x49, 0xbf, 0x60, 0xff, 0x89, 0x05, 0xa3, 0xdc, 0xbb, 0x2a, 0x44,
- 0x5f, 0x80, 0x21, 0xf2, 0x80, 0x34, 0x84, 0xe4, 0x98, 0xd9, 0xe1, 0x44, 0xf0, 0xe0, 0xda, 0x72,
- 0xfa, 0x1f, 0xb3, 0x5a, 0xe8, 0x06, 0x8c, 0xd2, 0xde, 0x5e, 0x57, 0xae, 0x66, 0x4f, 0xe7, 0x7d,
- 0xb1, 0x9a, 0x76, 0x2e, 0xab, 0x88, 0x22, 0x2c, 0xab, 0x33, 0xcd, 0x6f, 0xa3, 0x5d, 0xa7, 0x0c,
- 0x2c, 0xee, 0x75, 0xce, 0x6e, 0xae, 0xd4, 0x38, 0x92, 0xa0, 0xc6, 0x35, 0xbf, 0xb2, 0x10, 0x27,
- 0x44, 0xec, 0x4d, 0x28, 0xd1, 0x49, 0x5d, 0xf2, 0x5c, 0xa7, 0xb7, 0xd2, 0xf9, 0x05, 0x28, 0x49,
- 0x05, 0x70, 0x24, 0x1c, 0x74, 0x18, 0x55, 0xa9, 0x1f, 0x8e, 0x70, 0x02, 0xb7, 0xb7, 0xe1, 0x3c,
- 0xb3, 0xa6, 0x70, 0xe2, 0x1d, 0x63, 0x8f, 0xf5, 0x5f, 0xcc, 0x2f, 0x8a, 0x8b, 0x18, 0x9f, 0x99,
- 0x39, 0xcd, 0xa3, 0x60, 0x42, 0x52, 0x4c, 0x2e, 0x65, 0xf6, 0x9f, 0x0d, 0xc1, 0x13, 0xd5, 0x7a,
- 0xbe, 0xe3, 0xdd, 0x1b, 0x30, 0xc1, 0xc5, 0x34, 0xba, 0xb4, 0x1d, 0x4f, 0xb4, 0xab, 0xde, 0x1a,
- 0x37, 0x35, 0x18, 0x36, 0x30, 0xd1, 0x53, 0x50, 0x74, 0x3f, 0xf0, 0xd3, 0xc6, 0xb9, 0xd5, 0x77,
- 0x36, 0x30, 0x2d, 0xa7, 0x60, 0x2a, 0xf1, 0x71, 0x56, 0xaa, 0xc0, 0x4a, 0xea, 0x7b, 0x0b, 0xa6,
- 0xdc, 0xa8, 0x11, 0xb9, 0x55, 0x9f, 0xf2, 0x99, 0xc4, 0x69, 0x33, 0x51, 0x12, 0xd0, 0x4e, 0x2b,
- 0x28, 0x4e, 0x61, 0x6b, 0x7c, 0x7d, 0x78, 0x60, 0xa9, 0xb1, 0xaf, 0xc7, 0x0a, 0x15, 0x88, 0xdb,
- 0xec, 0xeb, 0x22, 0x66, 0x28, 0x28, 0x04, 0x62, 0xfe, 0xc1, 0x11, 0x96, 0x30, 0x7a, 0x03, 0x6b,
- 0xec, 0x38, 0xed, 0xa5, 0x4e, 0xbc, 0x53, 0x71, 0xa3, 0x46, 0xb0, 0x4f, 0xc2, 0x03, 0x76, 0x79,
- 0x1e, 0x4b, 0x6e, 0x60, 0x0a, 0xb0, 0x72, 0x63, 0xa9, 0x46, 0x31, 0x71, 0x77, 0x1d, 0x53, 0x2a,
- 0x84, 0xd3, 0x90, 0x0a, 0x97, 0x60, 0x5a, 0x36, 0x53, 0x27, 0x11, 0x3b, 0x23, 0xc6, 0x59, 0xc7,
- 0x94, 0x3b, 0xb5, 0x28, 0x56, 0xdd, 0x4a, 0xe3, 0xa3, 0xd7, 0x61, 0xd2, 0xf5, 0xdd, 0xd8, 0x75,
- 0xe2, 0x20, 0x64, 0x27, 0x2c, 0xbf, 0x27, 0xb3, 0x47, 0xd1, 0xaa, 0x0e, 0xc0, 0x26, 0x9e, 0xfd,
- 0xa7, 0x43, 0x30, 0xcb, 0xa6, 0xed, 0x5b, 0x2b, 0xec, 0x13, 0xb3, 0xc2, 0xee, 0x74, 0xaf, 0xb0,
- 0xd3, 0x10, 0x77, 0x3f, 0xce, 0x65, 0xf6, 0x3e, 0x94, 0x94, 0x7d, 0xb5, 0x74, 0x11, 0xb0, 0x72,
- 0x5c, 0x04, 0xfa, 0x4b, 0x1f, 0xf2, 0x19, 0xb7, 0x98, 0xf9, 0x8c, 0xfb, 0x77, 0x2c, 0x48, 0xcc,
- 0x4c, 0xd1, 0x0d, 0x28, 0xb5, 0x03, 0x66, 0xca, 0x11, 0x4a, 0xfb, 0xa8, 0x27, 0x32, 0x0f, 0x2a,
- 0x7e, 0x28, 0xf2, 0xf1, 0xab, 0xc9, 0x1a, 0x38, 0xa9, 0x8c, 0x96, 0x61, 0xb4, 0x1d, 0x92, 0x7a,
- 0xcc, 0x5c, 0x39, 0xfb, 0xd2, 0xe1, 0x6b, 0x84, 0xe3, 0x63, 0x59, 0xd1, 0xfe, 0x25, 0x0b, 0x80,
- 0xbf, 0x94, 0x3a, 0x7e, 0x8b, 0x9c, 0x81, 0xf6, 0xb7, 0x02, 0x43, 0x51, 0x9b, 0x34, 0x7a, 0x19,
- 0xd9, 0x24, 0xfd, 0xa9, 0xb7, 0x49, 0x23, 0x19, 0x70, 0xfa, 0x0f, 0xb3, 0xda, 0xf6, 0xf7, 0x03,
- 0x4c, 0x25, 0x68, 0xd5, 0x98, 0xec, 0xa1, 0x97, 0x0c, 0x47, 0xb9, 0x8b, 0x29, 0x47, 0xb9, 0x12,
- 0xc3, 0xd6, 0x14, 0x8d, 0xef, 0x43, 0x71, 0xcf, 0x79, 0x20, 0x34, 0x49, 0x2f, 0xf4, 0xee, 0x06,
- 0xa5, 0xbf, 0xb0, 0xee, 0x3c, 0xe0, 0x77, 0xa6, 0x17, 0xe4, 0x02, 0x59, 0x77, 0x1e, 0x1c, 0x73,
- 0x53, 0x1a, 0xc6, 0xa4, 0x6e, 0xb9, 0x51, 0xfc, 0xb5, 0xff, 0x94, 0xfc, 0x67, 0xcb, 0x8e, 0x36,
- 0xc2, 0xda, 0x72, 0x7d, 0xf1, 0x6e, 0x38, 0x50, 0x5b, 0xae, 0x9f, 0x6e, 0xcb, 0xf5, 0x07, 0x68,
- 0xcb, 0xf5, 0xd1, 0x87, 0x30, 0x2a, 0xde, 0xe8, 0x99, 0xfd, 0xbc, 0xa9, 0xa5, 0xca, 0x6b, 0x4f,
- 0x3c, 0xf1, 0xf3, 0x36, 0x17, 0xe5, 0x9d, 0x50, 0x94, 0xf6, 0x6d, 0x57, 0x36, 0x88, 0xfe, 0x96,
- 0x05, 0x53, 0xe2, 0x37, 0x26, 0x1f, 0x74, 0x48, 0x14, 0x0b, 0xd9, 0xf3, 0x73, 0x83, 0xf7, 0x41,
- 0x54, 0xe4, 0x5d, 0xf9, 0x9c, 0x64, 0xb3, 0x26, 0xb0, 0x6f, 0x8f, 0x52, 0xbd, 0x40, 0xff, 0xc4,
- 0x82, 0xf3, 0x7b, 0xce, 0x03, 0xde, 0x22, 0x2f, 0xc3, 0x4e, 0xec, 0x06, 0xc2, 0x1f, 0xe0, 0x0b,
- 0x83, 0x4d, 0x7f, 0x57, 0x75, 0xde, 0x49, 0x69, 0x3a, 0x7c, 0x3e, 0x0b, 0xa5, 0x6f, 0x57, 0x33,
- 0xfb, 0x35, 0xbf, 0x0d, 0x63, 0x72, 0xbd, 0x65, 0xdc, 0xbc, 0x2b, 0xba, 0x60, 0x7d, 0x62, 0x13,
- 0x09, 0xdd, 0x5b, 0x8d, 0xb6, 0x23, 0xd6, 0xda, 0x23, 0x6d, 0xe7, 0x7d, 0x98, 0xd0, 0xd7, 0xd8,
- 0x23, 0x6d, 0xeb, 0x03, 0x38, 0x97, 0xb1, 0x96, 0x1e, 0x69, 0x93, 0xf7, 0xe1, 0x62, 0xee, 0xfa,
- 0x78, 0x94, 0x0d, 0xdb, 0xbf, 0x68, 0xe9, 0x7c, 0xf0, 0x0c, 0x54, 0xf0, 0x2b, 0xa6, 0x0a, 0xfe,
- 0x52, 0xef, 0x9d, 0x93, 0xa3, 0x87, 0x7f, 0x4f, 0xef, 0x34, 0xe5, 0xea, 0xe8, 0x6d, 0x18, 0xf1,
- 0x68, 0x89, 0x34, 0x0e, 0xb1, 0xfb, 0xef, 0xc8, 0x44, 0x96, 0x62, 0xe5, 0x11, 0x16, 0x14, 0xec,
- 0x5f, 0xb5, 0x60, 0xe8, 0x0c, 0x46, 0x02, 0x9b, 0x23, 0xf1, 0x52, 0x2e, 0x69, 0x11, 0x9a, 0x6b,
- 0x01, 0x3b, 0xf7, 0x57, 0x65, 0xf8, 0xb1, 0x9c, 0x81, 0xf9, 0x5f, 0x05, 0x18, 0xa7, 0x4d, 0x49,
- 0x2b, 0xc6, 0x37, 0x61, 0xd2, 0x73, 0xb6, 0x88, 0x27, 0xdf, 0x71, 0xd3, 0x0a, 0x93, 0x5b, 0x3a,
- 0x10, 0x9b, 0xb8, 0xb4, 0xf2, 0xb6, 0xfe, 0xa4, 0x2d, 0xe4, 0x17, 0x55, 0xd9, 0x78, 0xef, 0xc6,
- 0x26, 0x2e, 0xbd, 0xbb, 0xdf, 0x77, 0xe2, 0xc6, 0x8e, 0x50, 0xa6, 0xa8, 0xee, 0xde, 0xa3, 0x85,
- 0x98, 0xc3, 0xa8, 0x00, 0x27, 0x57, 0xe7, 0x5d, 0x7a, 0x33, 0x0c, 0x7c, 0x21, 0x1e, 0x2b, 0x01,
- 0x0e, 0x9b, 0x60, 0x9c, 0xc6, 0xcf, 0xf0, 0x98, 0x1f, 0x66, 0x36, 0x9a, 0x03, 0x78, 0xcc, 0xa3,
- 0x1a, 0x9c, 0x77, 0xfd, 0x86, 0xd7, 0x69, 0x92, 0x3b, 0x3e, 0x97, 0xee, 0x3c, 0xf7, 0x43, 0xd2,
- 0x14, 0x02, 0xb4, 0x32, 0xa7, 0xad, 0x66, 0xe0, 0xe0, 0xcc, 0x9a, 0xf6, 0xff, 0x05, 0xe7, 0x6e,
- 0x05, 0x4e, 0x73, 0xd9, 0xf1, 0x1c, 0xbf, 0x41, 0xc2, 0xaa, 0xdf, 0xea, 0x6b, 0x25, 0xa6, 0xdb,
- 0x74, 0x15, 0xfa, 0xd9, 0x74, 0xd9, 0x3b, 0x80, 0xf4, 0x06, 0x84, 0x6d, 0x32, 0x86, 0x51, 0x97,
- 0x37, 0x25, 0x96, 0xff, 0xb3, 0xd9, 0xd2, 0x75, 0x57, 0xcf, 0x34, 0xab, 0x5b, 0x5e, 0x80, 0x25,
- 0x21, 0xfb, 0x0d, 0xc8, 0xf4, 0x47, 0xec, 0xaf, 0xb6, 0xb1, 0x5f, 0x83, 0x59, 0x56, 0xf3, 0x64,
- 0x2a, 0x05, 0xfb, 0x07, 0x2d, 0x98, 0xde, 0x48, 0xc5, 0xb8, 0xb8, 0xc2, 0xde, 0x5a, 0x33, 0xf4,
- 0xee, 0x75, 0x56, 0x8a, 0x05, 0xf4, 0xd4, 0xf5, 0x7b, 0x7f, 0x65, 0x41, 0x49, 0x45, 0x67, 0x3a,
- 0x03, 0xa1, 0x76, 0xc5, 0x10, 0x6a, 0x33, 0xf5, 0x4e, 0xaa, 0x3b, 0x79, 0x32, 0x2d, 0xba, 0xa9,
- 0xa2, 0x35, 0xf4, 0x50, 0x39, 0x25, 0x64, 0xb8, 0x6f, 0xff, 0x94, 0x19, 0xd2, 0x41, 0xc6, 0x6f,
- 0x60, 0x66, 0x5a, 0x0a, 0xf7, 0x13, 0x62, 0xa6, 0xa5, 0xfa, 0x93, 0xc3, 0xfd, 0x6a, 0x5a, 0x97,
- 0xd9, 0xa9, 0xf0, 0xed, 0xcc, 0x95, 0x81, 0xed, 0x4d, 0x15, 0x24, 0xa5, 0x2c, 0x5c, 0x13, 0x44,
- 0xe9, 0x31, 0x63, 0x64, 0xe2, 0x1f, 0x8f, 0xa4, 0x95, 0x54, 0xb1, 0x6f, 0xc0, 0x74, 0x6a, 0xc0,
- 0xd0, 0x6b, 0x30, 0xdc, 0xde, 0x71, 0x22, 0x92, 0x32, 0x4d, 0x1d, 0xae, 0xd1, 0xc2, 0xe3, 0xc3,
- 0xf2, 0x94, 0xaa, 0xc0, 0x4a, 0x30, 0xc7, 0xb6, 0xff, 0xbb, 0x05, 0x43, 0x1b, 0x41, 0xf3, 0x2c,
- 0x16, 0xd3, 0x5b, 0xc6, 0x62, 0x7a, 0x32, 0x2f, 0x0e, 0x61, 0xee, 0x3a, 0x5a, 0x4b, 0xad, 0xa3,
- 0x4b, 0xb9, 0x14, 0x7a, 0x2f, 0xa1, 0x3d, 0x18, 0x67, 0xd1, 0x0d, 0x85, 0xa9, 0xec, 0x2b, 0xc6,
- 0xfd, 0xaa, 0x9c, 0xba, 0x5f, 0x4d, 0x6b, 0xa8, 0xda, 0x2d, 0xeb, 0x39, 0x18, 0x15, 0xe6, 0x9a,
- 0x69, 0xa7, 0x0d, 0x81, 0x8b, 0x25, 0xdc, 0xfe, 0xe9, 0x22, 0x18, 0xd1, 0x14, 0xd1, 0x6f, 0x58,
- 0xb0, 0x10, 0x72, 0x2f, 0xd8, 0x66, 0xa5, 0x13, 0xba, 0x7e, 0xab, 0xde, 0xd8, 0x21, 0xcd, 0x8e,
- 0xe7, 0xfa, 0xad, 0x6a, 0xcb, 0x0f, 0x54, 0xf1, 0xea, 0x03, 0xd2, 0xe8, 0xb0, 0x37, 0x97, 0x3e,
- 0xa1, 0x1b, 0x95, 0x39, 0xd4, 0xb5, 0xa3, 0xc3, 0xf2, 0x02, 0x3e, 0x11, 0x6d, 0x7c, 0xc2, 0xbe,
- 0xa0, 0xdf, 0xb5, 0x60, 0x91, 0x07, 0x19, 0x1c, 0xbc, 0xff, 0x3d, 0x6e, 0xa3, 0x35, 0x49, 0x2a,
- 0x21, 0xb2, 0x49, 0xc2, 0xbd, 0xe5, 0xd7, 0xc5, 0x80, 0x2e, 0xd6, 0x4e, 0xd6, 0x16, 0x3e, 0x69,
- 0xe7, 0xec, 0x7f, 0x5d, 0x84, 0x49, 0x3a, 0x8a, 0x49, 0x6c, 0x9a, 0xd7, 0x8c, 0x25, 0xf1, 0x74,
- 0x6a, 0x49, 0xcc, 0x1a, 0xc8, 0xa7, 0x13, 0x96, 0x26, 0x82, 0x59, 0xcf, 0x89, 0xe2, 0x1b, 0xc4,
- 0x09, 0xe3, 0x2d, 0xe2, 0x70, 0x33, 0xa1, 0xe2, 0x89, 0x4d, 0x9a, 0x94, 0xfa, 0xeb, 0x56, 0x9a,
- 0x18, 0xee, 0xa6, 0x8f, 0xf6, 0x01, 0x31, 0x5b, 0xa7, 0xd0, 0xf1, 0x23, 0xfe, 0x2d, 0xae, 0x78,
- 0x8f, 0x39, 0x59, 0xab, 0xf3, 0xa2, 0x55, 0x74, 0xab, 0x8b, 0x1a, 0xce, 0x68, 0x41, 0xb3, 0x61,
- 0x1b, 0x1e, 0xd4, 0x86, 0x6d, 0xa4, 0x8f, 0x67, 0xd4, 0x1e, 0xcc, 0x88, 0x59, 0xd9, 0x76, 0x5b,
- 0xe2, 0x90, 0xfe, 0x72, 0xca, 0xc6, 0xd5, 0x1a, 0xdc, 0x50, 0xa9, 0x8f, 0x81, 0xab, 0xfd, 0xdd,
- 0x70, 0x8e, 0x36, 0x67, 0xfa, 0xf1, 0x44, 0x88, 0xc0, 0xf4, 0x6e, 0x67, 0x8b, 0x78, 0x24, 0x96,
- 0x65, 0xa2, 0xd1, 0x4c, 0xb1, 0xdf, 0xac, 0x9d, 0xc8, 0x96, 0x37, 0x4d, 0x12, 0x38, 0x4d, 0xd3,
- 0xfe, 0x59, 0x0b, 0x98, 0xb5, 0xfc, 0x19, 0x1c, 0x7f, 0x5f, 0x34, 0x8f, 0xbf, 0xb9, 0x3c, 0x0e,
- 0x94, 0x73, 0xf2, 0xbd, 0xca, 0xa7, 0xa5, 0x16, 0x06, 0x0f, 0x0e, 0xa4, 0xec, 0xdf, 0x5f, 0xe2,
- 0xfa, 0x9f, 0x16, 0xdf, 0x90, 0x2a, 0x28, 0x00, 0xfa, 0x1e, 0x18, 0x6b, 0x38, 0x6d, 0xa7, 0xc1,
- 0xc3, 0xd8, 0xe6, 0x6a, 0x7f, 0x8c, 0x4a, 0x0b, 0x2b, 0xa2, 0x06, 0xd7, 0x66, 0x7c, 0x56, 0x7e,
- 0xa5, 0x2c, 0xee, 0xab, 0xc1, 0x50, 0x4d, 0xce, 0xef, 0xc2, 0xa4, 0x41, 0xec, 0x91, 0x5e, 0x7d,
- 0xbf, 0x87, 0x1f, 0x17, 0xea, 0xc6, 0xb2, 0x07, 0xb3, 0xbe, 0xf6, 0x9f, 0x32, 0x47, 0x29, 0x4e,
- 0x7f, 0xba, 0xdf, 0x81, 0xc0, 0x38, 0xa9, 0xe6, 0x0d, 0x90, 0x22, 0x83, 0xbb, 0x29, 0xdb, 0x7f,
- 0xcf, 0x82, 0xc7, 0x75, 0x44, 0x2d, 0x5e, 0x43, 0x3f, 0x7d, 0x72, 0x05, 0xc6, 0x82, 0x36, 0x09,
- 0x9d, 0xe4, 0x4e, 0x76, 0x55, 0x0e, 0xfa, 0x6d, 0x51, 0x7e, 0x2c, 0xe2, 0x09, 0x4a, 0xea, 0xb2,
- 0x1c, 0xab, 0x9a, 0xc8, 0x86, 0x11, 0x36, 0x18, 0x91, 0x88, 0xa5, 0xc1, 0xcc, 0x14, 0xd9, 0xd3,
- 0x6a, 0x84, 0x05, 0xc4, 0xfe, 0x7e, 0x8b, 0x2f, 0x2c, 0xbd, 0xeb, 0xe8, 0x03, 0x98, 0xd9, 0xa3,
- 0xd7, 0xb7, 0xd5, 0x07, 0xed, 0x90, 0xab, 0xd1, 0xe5, 0x38, 0xbd, 0xd0, 0x6f, 0x9c, 0xb4, 0x8f,
- 0x4c, 0x8c, 0xd9, 0xd6, 0x53, 0xc4, 0x70, 0x17, 0x79, 0xfb, 0x2f, 0x0a, 0x7c, 0x27, 0x32, 0xa9,
- 0xee, 0x39, 0x18, 0x6d, 0x07, 0xcd, 0x95, 0x6a, 0x05, 0x8b, 0x11, 0x52, 0xec, 0xaa, 0xc6, 0x8b,
- 0xb1, 0x84, 0xa3, 0x6b, 0x00, 0xe4, 0x41, 0x4c, 0x42, 0xdf, 0xf1, 0x94, 0xe1, 0x87, 0x12, 0x9e,
- 0x56, 0x15, 0x04, 0x6b, 0x58, 0xb4, 0x4e, 0x3b, 0x0c, 0xf6, 0xdd, 0x26, 0xf3, 0x36, 0x2c, 0x9a,
- 0x75, 0x6a, 0x0a, 0x82, 0x35, 0x2c, 0x7a, 0x55, 0xee, 0xf8, 0x11, 0x3f, 0x00, 0x9d, 0x2d, 0x11,
- 0x20, 0x6f, 0x2c, 0xb9, 0x2a, 0xdf, 0xd1, 0x81, 0xd8, 0xc4, 0x45, 0x4b, 0x30, 0x12, 0x3b, 0xcc,
- 0x9c, 0x61, 0x38, 0xdf, 0x2c, 0x71, 0x93, 0x62, 0xe8, 0x71, 0x4d, 0x69, 0x05, 0x2c, 0x2a, 0xa2,
- 0x77, 0x25, 0x0b, 0xe6, 0x2c, 0x59, 0xd8, 0x03, 0xe7, 0x2e, 0x5b, 0x9d, 0x7d, 0xeb, 0x3c, 0x58,
- 0xd8, 0x19, 0x1b, 0xb4, 0xec, 0xef, 0x2b, 0x01, 0x24, 0xd2, 0x1e, 0xfa, 0xb0, 0x8b, 0x45, 0xbc,
- 0xd8, 0x5b, 0x3e, 0x3c, 0x3d, 0xfe, 0x80, 0x7e, 0xc0, 0x82, 0x71, 0xc7, 0xf3, 0x82, 0x86, 0x13,
- 0xb3, 0x51, 0x2e, 0xf4, 0x66, 0x51, 0xa2, 0xfd, 0xa5, 0xa4, 0x06, 0xef, 0xc2, 0x2b, 0xd2, 0x52,
- 0x41, 0x83, 0xf4, 0xed, 0x85, 0xde, 0x30, 0xfa, 0xac, 0xbc, 0x04, 0xf0, 0xe5, 0x31, 0x9f, 0xbe,
- 0x04, 0x94, 0x18, 0x37, 0xd6, 0xe4, 0x7f, 0x74, 0xc7, 0x88, 0x24, 0x37, 0x94, 0x1f, 0x92, 0xc2,
- 0x10, 0x7a, 0xfa, 0x05, 0x91, 0x43, 0x35, 0xdd, 0x2f, 0x6a, 0x38, 0x3f, 0x6e, 0x8b, 0x26, 0x5d,
- 0xf7, 0xf1, 0x89, 0x7a, 0x1f, 0xa6, 0x9b, 0xe6, 0x71, 0x2b, 0x56, 0xd3, 0xb3, 0x79, 0x74, 0x53,
- 0xa7, 0x73, 0x72, 0xc0, 0xa6, 0x00, 0x38, 0x4d, 0x18, 0xd5, 0xb8, 0x87, 0x5a, 0xd5, 0xdf, 0x0e,
- 0x84, 0x5d, 0xb9, 0x9d, 0x3b, 0x97, 0x07, 0x51, 0x4c, 0xf6, 0x28, 0x66, 0x72, 0x8e, 0x6e, 0x88,
- 0xba, 0x58, 0x51, 0x41, 0x6f, 0xc3, 0x08, 0x73, 0x1b, 0x8e, 0xe6, 0xc6, 0xf2, 0xf5, 0x80, 0x66,
- 0xc4, 0x8b, 0x64, 0x53, 0xb1, 0xbf, 0x11, 0x16, 0x14, 0xd0, 0x0d, 0x19, 0x16, 0x27, 0xaa, 0xfa,
- 0x77, 0x22, 0xc2, 0xc2, 0xe2, 0x94, 0x96, 0x3f, 0x9d, 0x44, 0xbc, 0xe1, 0xe5, 0x99, 0x11, 0xcc,
- 0x8d, 0x9a, 0x54, 0x5e, 0x11, 0xff, 0x65, 0x60, 0xf4, 0x39, 0xc8, 0xef, 0x9e, 0x19, 0x3c, 0x3d,
- 0x19, 0xce, 0xbb, 0x26, 0x09, 0x9c, 0xa6, 0x79, 0xa6, 0xc7, 0xe7, 0xbc, 0x0f, 0x33, 0xe9, 0x8d,
- 0xf5, 0x48, 0x8f, 0xeb, 0x3f, 0x19, 0x82, 0x29, 0x73, 0x21, 0xa0, 0x45, 0x28, 0x09, 0x22, 0x2a,
- 0x88, 0xa7, 0x5a, 0xdb, 0xeb, 0x12, 0x80, 0x13, 0x1c, 0x16, 0xc4, 0x94, 0x55, 0xd7, 0xec, 0x00,
- 0x93, 0x20, 0xa6, 0x0a, 0x82, 0x35, 0x2c, 0x2a, 0x44, 0x6f, 0x05, 0x41, 0xac, 0x8e, 0x02, 0xb5,
- 0x5a, 0x96, 0x59, 0x29, 0x16, 0x50, 0x7a, 0x04, 0xec, 0x92, 0xd0, 0x27, 0x9e, 0xa9, 0xc9, 0x54,
- 0x47, 0xc0, 0x4d, 0x1d, 0x88, 0x4d, 0x5c, 0x7a, 0xa4, 0x05, 0x11, 0x5b, 0x7e, 0x42, 0x54, 0x4f,
- 0xec, 0x2a, 0xeb, 0xdc, 0x6d, 0x5e, 0xc2, 0xd1, 0x97, 0xe1, 0x71, 0xe5, 0xe5, 0x8e, 0xb9, 0x66,
- 0x58, 0xb6, 0x38, 0x62, 0xdc, 0xac, 0x1f, 0x5f, 0xc9, 0x46, 0xc3, 0x79, 0xf5, 0xd1, 0x5b, 0x30,
- 0x25, 0x44, 0x60, 0x49, 0x71, 0xd4, 0x34, 0x56, 0xb8, 0x69, 0x40, 0x71, 0x0a, 0x1b, 0x55, 0x60,
- 0x86, 0x96, 0x30, 0x29, 0x54, 0x52, 0xe0, 0xde, 0xfa, 0xea, 0xac, 0xbf, 0x99, 0x82, 0xe3, 0xae,
- 0x1a, 0x68, 0x09, 0xa6, 0xb9, 0x8c, 0x42, 0xef, 0x94, 0x6c, 0x1e, 0x84, 0xbb, 0x87, 0xda, 0x08,
- 0xb7, 0x4d, 0x30, 0x4e, 0xe3, 0xa3, 0x37, 0x60, 0xc2, 0x09, 0x1b, 0x3b, 0x6e, 0x4c, 0x1a, 0x71,
- 0x27, 0xe4, 0x7e, 0x20, 0x9a, 0xb5, 0xc7, 0x92, 0x06, 0xc3, 0x06, 0xa6, 0xfd, 0x21, 0x9c, 0xcb,
- 0xf0, 0x14, 0xa3, 0x0b, 0xc7, 0x69, 0xbb, 0xf2, 0x9b, 0x52, 0x16, 0x92, 0x4b, 0xb5, 0xaa, 0xfc,
- 0x1a, 0x0d, 0x8b, 0xae, 0x4e, 0xa6, 0x12, 0xd7, 0xb2, 0x17, 0xa8, 0xd5, 0xb9, 0x26, 0x01, 0x38,
- 0xc1, 0xb1, 0x7f, 0x07, 0x40, 0x53, 0xe8, 0x0c, 0x60, 0x1f, 0xf7, 0x06, 0x4c, 0xc8, 0x94, 0x1b,
- 0x5a, 0xa8, 0x77, 0xf5, 0x99, 0xd7, 0x35, 0x18, 0x36, 0x30, 0x69, 0xdf, 0x7c, 0x15, 0xa8, 0x3e,
- 0x65, 0x8f, 0x99, 0x84, 0xa9, 0x4f, 0x70, 0xd0, 0x8b, 0x30, 0x16, 0x11, 0x6f, 0xfb, 0x96, 0xeb,
- 0xef, 0x8a, 0x85, 0xad, 0xb8, 0x70, 0x5d, 0x94, 0x63, 0x85, 0x81, 0x96, 0xa1, 0xd8, 0x71, 0x9b,
- 0x62, 0x29, 0xcb, 0x03, 0xbf, 0x78, 0xa7, 0x5a, 0x39, 0x3e, 0x2c, 0x3f, 0x9d, 0x97, 0x49, 0x84,
- 0x5e, 0xed, 0xa3, 0x05, 0xba, 0xfd, 0x68, 0xe5, 0xac, 0xb7, 0x81, 0x91, 0x13, 0xbe, 0x0d, 0x5c,
- 0x03, 0x10, 0x5f, 0x2d, 0xd7, 0x72, 0x31, 0x99, 0xb5, 0xeb, 0x0a, 0x82, 0x35, 0x2c, 0x14, 0xc1,
- 0x6c, 0x23, 0x24, 0x8e, 0xbc, 0x43, 0x73, 0x9f, 0xa7, 0xb1, 0x87, 0x57, 0x10, 0xac, 0xa4, 0x89,
- 0xe1, 0x6e, 0xfa, 0x28, 0x80, 0xd9, 0xa6, 0x08, 0xaa, 0x90, 0x34, 0x5a, 0x3a, 0xb9, 0xa3, 0x15,
- 0x33, 0xc8, 0x49, 0x13, 0xc2, 0xdd, 0xb4, 0xd1, 0x57, 0x60, 0x5e, 0x16, 0x76, 0xc7, 0xb1, 0x60,
- 0xdb, 0xa5, 0xc8, 0xe3, 0xaf, 0x57, 0x72, 0xb1, 0x70, 0x0f, 0x0a, 0x08, 0xc3, 0x08, 0x7b, 0x4b,
- 0x8a, 0xe6, 0xc6, 0xd9, 0x39, 0xf7, 0x7c, 0xbe, 0x32, 0x80, 0xae, 0xf5, 0x05, 0xf6, 0x0e, 0x25,
- 0x4c, 0xca, 0x93, 0x67, 0x39, 0x56, 0x88, 0x05, 0x25, 0xb4, 0x0d, 0xe3, 0x8e, 0xef, 0x07, 0xb1,
- 0xc3, 0x45, 0xa8, 0x89, 0x7c, 0xd9, 0x4f, 0x23, 0xbc, 0x94, 0xd4, 0xe0, 0xd4, 0x95, 0x95, 0xaa,
- 0x06, 0xc1, 0x3a, 0x61, 0x74, 0x1f, 0xa6, 0x83, 0xfb, 0x94, 0x39, 0x4a, 0x2d, 0x45, 0x34, 0x37,
- 0xc9, 0xda, 0x7a, 0x75, 0x40, 0x3d, 0xad, 0x51, 0x59, 0xe3, 0x5a, 0x26, 0x51, 0x9c, 0x6e, 0x05,
- 0x2d, 0x18, 0xda, 0xea, 0xa9, 0xc4, 0x9d, 0x25, 0xd1, 0x56, 0xeb, 0xca, 0x69, 0x16, 0x17, 0x85,
- 0x9b, 0x48, 0xb3, 0xdd, 0x3f, 0x9d, 0x8a, 0x8b, 0x92, 0x80, 0xb0, 0x8e, 0x87, 0x76, 0x60, 0x22,
- 0x79, 0xb2, 0x0a, 0x23, 0x16, 0x95, 0x6d, 0xfc, 0xda, 0xb5, 0xc1, 0x3e, 0xae, 0xaa, 0xd5, 0xe4,
- 0x37, 0x07, 0xbd, 0x04, 0x1b, 0x94, 0xe7, 0xbf, 0x0d, 0xc6, 0xb5, 0x89, 0x3d, 0x51, 0x14, 0xdc,
- 0xb7, 0x60, 0x26, 0x3d, 0x75, 0x27, 0xf2, 0x20, 0xf8, 0x1f, 0x05, 0x98, 0xce, 0x78, 0xb9, 0x62,
- 0xd9, 0x48, 0x52, 0x0c, 0x35, 0x49, 0x3e, 0x62, 0xb2, 0xc5, 0xc2, 0x00, 0x6c, 0x51, 0xf2, 0xe8,
- 0x62, 0x2e, 0x8f, 0x16, 0xac, 0x70, 0xe8, 0xa3, 0xb0, 0x42, 0xf3, 0xf4, 0x19, 0x1e, 0xe8, 0xf4,
- 0x39, 0x05, 0xf6, 0x69, 0x1c, 0x60, 0xa3, 0x03, 0x1c, 0x60, 0x3f, 0x56, 0x80, 0x99, 0xb4, 0x85,
- 0xef, 0x19, 0xbc, 0x77, 0xbc, 0x6d, 0xbc, 0x77, 0x64, 0xe7, 0xf6, 0x49, 0xdb, 0x1d, 0xe7, 0xbd,
- 0x7d, 0xe0, 0xd4, 0xdb, 0xc7, 0xf3, 0x03, 0x51, 0xeb, 0xfd, 0x0e, 0xf2, 0xf7, 0x0b, 0x70, 0x21,
- 0x5d, 0x65, 0xc5, 0x73, 0xdc, 0xbd, 0x33, 0x18, 0x9b, 0xdb, 0xc6, 0xd8, 0xbc, 0x34, 0xc8, 0xd7,
- 0xb0, 0xae, 0xe5, 0x0e, 0xd0, 0xbd, 0xd4, 0x00, 0x2d, 0x0e, 0x4e, 0xb2, 0xf7, 0x28, 0x7d, 0xb3,
- 0x08, 0x97, 0x32, 0xeb, 0x25, 0xcf, 0x05, 0x6b, 0xc6, 0x73, 0xc1, 0xb5, 0xd4, 0x73, 0x81, 0xdd,
- 0xbb, 0xf6, 0xe9, 0xbc, 0x1f, 0x08, 0x77, 0x68, 0x16, 0x31, 0xf4, 0x21, 0xdf, 0x0e, 0x0c, 0x77,
- 0x68, 0x45, 0x08, 0x9b, 0x74, 0xff, 0x26, 0xbd, 0x19, 0xfc, 0x8e, 0x05, 0x17, 0x33, 0xe7, 0xe6,
- 0x0c, 0xf4, 0xea, 0x1b, 0xa6, 0x5e, 0xfd, 0xb9, 0x81, 0x57, 0x6b, 0x8e, 0xa2, 0xfd, 0x4f, 0x8b,
- 0x39, 0xdf, 0xc2, 0x34, 0x93, 0xb7, 0x61, 0xdc, 0x69, 0x34, 0x48, 0x14, 0xad, 0x07, 0x4d, 0x15,
- 0x41, 0xf3, 0x25, 0x26, 0x6d, 0x24, 0xc5, 0xc7, 0x87, 0xe5, 0xf9, 0x34, 0x89, 0x04, 0x8c, 0x75,
- 0x0a, 0x66, 0xd0, 0xdf, 0xc2, 0xa9, 0x06, 0xfd, 0xbd, 0x06, 0xb0, 0xaf, 0xf4, 0x15, 0x69, 0x35,
- 0xa7, 0xa6, 0xc9, 0xd0, 0xb0, 0xd0, 0x77, 0xb1, 0x5b, 0x00, 0x37, 0x06, 0xe2, 0x4b, 0xf1, 0x95,
- 0x01, 0xe7, 0x4a, 0x37, 0x2c, 0xe2, 0x71, 0x37, 0x94, 0x4a, 0x58, 0x91, 0x44, 0xdf, 0x01, 0x33,
- 0x11, 0x0f, 0xeb, 0xb4, 0xe2, 0x39, 0x11, 0x73, 0xe2, 0x12, 0xab, 0x90, 0x05, 0xd3, 0xa8, 0xa7,
- 0x60, 0xb8, 0x0b, 0x1b, 0xad, 0xc9, 0x8f, 0x62, 0x31, 0xa8, 0xf8, 0xc2, 0xbc, 0x92, 0x7c, 0x90,
- 0xc8, 0x85, 0x76, 0x3e, 0x3d, 0xfc, 0x6c, 0xe0, 0xb5, 0x9a, 0xf6, 0x8f, 0x0d, 0xc1, 0x13, 0x3d,
- 0x98, 0x18, 0x5a, 0x32, 0x8d, 0x00, 0x5e, 0x48, 0xeb, 0xff, 0xe6, 0x33, 0x2b, 0x1b, 0x0a, 0xc1,
- 0xd4, 0x5a, 0x29, 0x7c, 0xe4, 0xb5, 0xf2, 0xc3, 0x96, 0xa6, 0x99, 0xe5, 0xa6, 0xc2, 0x5f, 0x3c,
- 0x21, 0x73, 0x3e, 0x45, 0x55, 0xed, 0x76, 0x86, 0xbe, 0xf3, 0xda, 0xc0, 0xdd, 0x19, 0x58, 0x01,
- 0x7a, 0xb6, 0x4f, 0x46, 0x5f, 0xb3, 0xe0, 0xe9, 0xcc, 0xfe, 0x1a, 0x46, 0x4b, 0x8b, 0x50, 0x6a,
- 0xd0, 0x42, 0xcd, 0x31, 0x34, 0xf1, 0x98, 0x97, 0x00, 0x9c, 0xe0, 0x18, 0xb6, 0x49, 0x85, 0xbe,
- 0xb6, 0x49, 0xff, 0xca, 0x82, 0xae, 0x05, 0x7c, 0x06, 0x9c, 0xb4, 0x6a, 0x72, 0xd2, 0x4f, 0x0f,
- 0x32, 0x97, 0x39, 0x4c, 0xf4, 0x0f, 0xa7, 0xe1, 0xb1, 0x1c, 0x4f, 0xb0, 0x7d, 0x98, 0x6d, 0x35,
- 0x88, 0xe9, 0x72, 0x2b, 0x3e, 0x26, 0xd3, 0x3b, 0xb9, 0xa7, 0x7f, 0x2e, 0xbf, 0x10, 0x77, 0xa1,
- 0xe0, 0xee, 0x26, 0xd0, 0xd7, 0x2c, 0x38, 0xef, 0xdc, 0x8f, 0xba, 0x52, 0x95, 0x8a, 0x35, 0xf3,
- 0x6a, 0xa6, 0x9e, 0xb6, 0x4f, 0x6a, 0x53, 0x9e, 0xd5, 0x2b, 0x0b, 0x0b, 0x67, 0xb6, 0x85, 0xb0,
- 0x08, 0x7a, 0x4c, 0xe5, 0xed, 0x1e, 0x4e, 0xe1, 0x59, 0x2e, 0x7b, 0x9c, 0xa7, 0x4a, 0x08, 0x56,
- 0x74, 0xd0, 0x5d, 0x28, 0xb5, 0xa4, 0x1f, 0xad, 0xe0, 0xd9, 0x99, 0x87, 0x60, 0xa6, 0xb3, 0x2d,
- 0xf7, 0x1d, 0x51, 0x20, 0x9c, 0x90, 0x42, 0x6f, 0x41, 0xd1, 0xdf, 0x8e, 0x7a, 0xa5, 0xc3, 0x4a,
- 0xd9, 0xf2, 0xf1, 0x80, 0x0b, 0x1b, 0x6b, 0x75, 0x4c, 0x2b, 0xa2, 0x1b, 0x50, 0x0c, 0xb7, 0x9a,
- 0xe2, 0x69, 0x21, 0x53, 0x2e, 0xc5, 0xcb, 0x95, 0xec, 0x45, 0xc2, 0x29, 0xe1, 0xe5, 0x0a, 0xa6,
- 0x24, 0x50, 0x0d, 0x86, 0x99, 0xd3, 0x94, 0x78, 0x41, 0xc8, 0x14, 0x48, 0x7b, 0x38, 0x1f, 0xf2,
- 0xa8, 0x0c, 0x0c, 0x01, 0x73, 0x42, 0xe8, 0x6d, 0x18, 0x69, 0xb0, 0x8c, 0x51, 0x42, 0xf1, 0x93,
- 0x1d, 0xae, 0xab, 0x2b, 0xa7, 0x14, 0x7f, 0x41, 0xe5, 0xe5, 0x58, 0x50, 0x40, 0x9b, 0x30, 0xd2,
- 0x20, 0xed, 0x9d, 0xed, 0x48, 0xe8, 0x73, 0x3e, 0x9b, 0x49, 0xab, 0x47, 0x82, 0x34, 0x41, 0x95,
- 0x61, 0x60, 0x41, 0x0b, 0x7d, 0x1e, 0x0a, 0xdb, 0x0d, 0xe1, 0x49, 0x95, 0xf9, 0x86, 0x60, 0x46,
- 0xca, 0x58, 0x1e, 0x39, 0x3a, 0x2c, 0x17, 0xd6, 0x56, 0x70, 0x61, 0xbb, 0x81, 0x36, 0x60, 0x74,
- 0x9b, 0xfb, 0xd6, 0x8b, 0x00, 0x36, 0xcf, 0x66, 0xbb, 0xfd, 0x77, 0xb9, 0xdf, 0x73, 0x0f, 0x20,
- 0x01, 0xc0, 0x92, 0x08, 0x8b, 0x17, 0xac, 0x62, 0x04, 0x88, 0xc0, 0xf9, 0x0b, 0x27, 0x8b, 0xeb,
- 0x20, 0xd4, 0x1c, 0x8a, 0x0a, 0xd6, 0x28, 0xa2, 0xaf, 0x42, 0xc9, 0x91, 0xa9, 0x31, 0x45, 0x10,
- 0x9c, 0x57, 0x32, 0xb7, 0x63, 0xef, 0xac, 0xa1, 0x7c, 0x2d, 0x2b, 0x24, 0x9c, 0x10, 0x45, 0xbb,
- 0x30, 0xb9, 0x1f, 0xb5, 0x77, 0x88, 0xdc, 0xbe, 0x2c, 0x26, 0x4e, 0xce, 0x71, 0x75, 0x57, 0x20,
- 0xba, 0x61, 0xdc, 0x71, 0xbc, 0x2e, 0x8e, 0xc3, 0x1c, 0xc7, 0xee, 0xea, 0xc4, 0xb0, 0x49, 0x9b,
- 0x0e, 0xff, 0x07, 0x9d, 0x60, 0xeb, 0x20, 0x26, 0x22, 0xd2, 0x7e, 0xe6, 0xf0, 0xbf, 0xc3, 0x51,
- 0xba, 0x87, 0x5f, 0x00, 0xb0, 0x24, 0x42, 0x37, 0xb8, 0x23, 0xd3, 0xce, 0x0a, 0x5d, 0xce, 0x73,
- 0xb9, 0xc3, 0xd3, 0xd5, 0xdf, 0x64, 0x50, 0x18, 0x67, 0x4c, 0x48, 0x31, 0x8e, 0xd8, 0xde, 0x09,
- 0xe2, 0xc0, 0x4f, 0x71, 0xe3, 0xd9, 0x7c, 0x8e, 0x58, 0xcb, 0xc0, 0xef, 0xe6, 0x88, 0x59, 0x58,
- 0x38, 0xb3, 0x2d, 0xd4, 0x84, 0xa9, 0x76, 0x10, 0xc6, 0xf7, 0x83, 0x50, 0xae, 0x2f, 0xd4, 0xe3,
- 0x92, 0x6f, 0x60, 0x8a, 0x16, 0x99, 0x1d, 0xb8, 0x09, 0xc1, 0x29, 0x9a, 0xe8, 0x4b, 0x30, 0x1a,
- 0x35, 0x1c, 0x8f, 0x54, 0x6f, 0xcf, 0x9d, 0xcb, 0x3f, 0x6a, 0xea, 0x1c, 0x25, 0x67, 0x75, 0xb1,
- 0xc9, 0x11, 0x28, 0x58, 0x92, 0x43, 0x6b, 0x30, 0xcc, 0xd2, 0xb7, 0xb0, 0x24, 0x01, 0x39, 0xc1,
- 0xd6, 0xba, 0x6c, 0xa5, 0x39, 0x47, 0x62, 0xc5, 0x98, 0x57, 0xa7, 0x7b, 0x40, 0xc8, 0xba, 0x41,
- 0x34, 0x77, 0x21, 0x7f, 0x0f, 0x08, 0x11, 0xf9, 0x76, 0xbd, 0xd7, 0x1e, 0x50, 0x48, 0x38, 0x21,
- 0x4a, 0xf9, 0x31, 0xe5, 0xa1, 0x8f, 0xe5, 0xf3, 0xe3, 0x7c, 0x0e, 0xca, 0xf8, 0x31, 0xe5, 0x9f,
- 0x94, 0x84, 0xfd, 0x47, 0xa3, 0xdd, 0xf2, 0x09, 0xbb, 0x1d, 0x7d, 0x9f, 0xd5, 0x65, 0x3a, 0xf0,
- 0xb9, 0x41, 0x95, 0x35, 0xa7, 0x28, 0x99, 0x7e, 0xcd, 0x82, 0xc7, 0xda, 0x99, 0x1f, 0x22, 0x0e,
- 0xfb, 0xc1, 0x74, 0x3e, 0xfc, 0xd3, 0x55, 0x22, 0x8f, 0x6c, 0x38, 0xce, 0x69, 0x29, 0x2d, 0xfd,
- 0x17, 0x3f, 0xb2, 0xf4, 0xbf, 0x0e, 0x63, 0x4c, 0xa0, 0x4c, 0x22, 0xfb, 0x0d, 0x64, 0x80, 0xc7,
- 0xc4, 0x86, 0x15, 0x51, 0x11, 0x2b, 0x12, 0xe8, 0x47, 0x2c, 0x78, 0x2a, 0xdd, 0x75, 0x4c, 0x18,
- 0x58, 0x44, 0x89, 0xe6, 0x17, 0xb3, 0x35, 0xf1, 0xfd, 0x4f, 0xd5, 0x7a, 0x21, 0x1f, 0xf7, 0x43,
- 0xc0, 0xbd, 0x1b, 0x43, 0x95, 0x8c, 0x9b, 0xe1, 0x88, 0xf9, 0xb2, 0x38, 0xc0, 0xed, 0xf0, 0x55,
- 0x98, 0xd8, 0x0b, 0x3a, 0xbe, 0xf4, 0x8e, 0x11, 0xbe, 0xcf, 0x4c, 0x8b, 0xbd, 0xae, 0x95, 0x63,
- 0x03, 0x2b, 0x75, 0xa7, 0x1c, 0x7b, 0xd8, 0x3b, 0x25, 0x7a, 0x2f, 0x95, 0x26, 0xbe, 0x94, 0x2f,
- 0x5b, 0x88, 0xeb, 0xf7, 0x09, 0x92, 0xc5, 0x9f, 0xed, 0x3d, 0xe8, 0x1b, 0x56, 0x86, 0x00, 0xcf,
- 0x6f, 0xc6, 0x5f, 0x30, 0x6f, 0xc6, 0x57, 0xd2, 0x37, 0xe3, 0x2e, 0x4d, 0xa8, 0x71, 0x29, 0x1e,
- 0x3c, 0x46, 0xff, 0xa0, 0x01, 0x1a, 0x6d, 0x0f, 0x2e, 0xf7, 0x3b, 0x96, 0x98, 0xa9, 0x64, 0x53,
- 0xd9, 0x10, 0x24, 0xa6, 0x92, 0xcd, 0x6a, 0x05, 0x33, 0xc8, 0xa0, 0x11, 0x7c, 0xec, 0xff, 0x6a,
- 0x41, 0xb1, 0x16, 0x34, 0xcf, 0x40, 0xb3, 0xfb, 0x45, 0x43, 0xb3, 0xfb, 0x44, 0x4e, 0xfa, 0xfe,
- 0x5c, 0x3d, 0xee, 0x6a, 0x4a, 0x8f, 0xfb, 0x54, 0x1e, 0x81, 0xde, 0x5a, 0xdb, 0x9f, 0x29, 0xc2,
- 0x78, 0x2d, 0x68, 0x2a, 0x9b, 0xfb, 0x7f, 0xf3, 0x30, 0x36, 0xf7, 0xb9, 0xf1, 0x96, 0x35, 0xca,
- 0xcc, 0xc2, 0x52, 0xba, 0xf3, 0xfe, 0x35, 0x33, 0xbd, 0xbf, 0x47, 0xdc, 0xd6, 0x4e, 0x4c, 0x9a,
- 0xe9, 0xcf, 0x39, 0x3b, 0xd3, 0xfb, 0xff, 0x6c, 0xc1, 0x74, 0xaa, 0x75, 0xe4, 0x65, 0xf9, 0x06,
- 0x3e, 0xa4, 0x46, 0x6f, 0xb6, 0xaf, 0x33, 0xe1, 0x02, 0x80, 0x7a, 0x36, 0x93, 0xda, 0x2e, 0x26,
- 0xf5, 0xab, 0x77, 0xb5, 0x08, 0x6b, 0x18, 0xe8, 0x35, 0x18, 0x8f, 0x83, 0x76, 0xe0, 0x05, 0xad,
- 0x83, 0x9b, 0x44, 0xc6, 0x8c, 0x52, 0x8f, 0x9b, 0x9b, 0x09, 0x08, 0xeb, 0x78, 0xf6, 0xcf, 0x15,
- 0xf9, 0x87, 0xfa, 0xb1, 0xfb, 0xad, 0x35, 0xf9, 0xc9, 0x5e, 0x93, 0xdf, 0xb4, 0x60, 0x86, 0xb6,
- 0xce, 0xac, 0xd7, 0xe4, 0x61, 0xab, 0x72, 0x85, 0x59, 0x3d, 0x72, 0x85, 0x5d, 0xa1, 0xbc, 0xab,
- 0x19, 0x74, 0x62, 0xa1, 0x2d, 0xd3, 0x98, 0x13, 0x2d, 0xc5, 0x02, 0x2a, 0xf0, 0x48, 0x18, 0x0a,
- 0x8f, 0x3f, 0x1d, 0x8f, 0x84, 0x21, 0x16, 0x50, 0x99, 0x4a, 0x6c, 0x28, 0x27, 0x95, 0x18, 0x8b,
- 0x80, 0x29, 0x2c, 0xa6, 0x84, 0xd8, 0xa3, 0x45, 0xc0, 0x94, 0xa6, 0x54, 0x09, 0x8e, 0xfd, 0x8b,
- 0x45, 0x98, 0xa8, 0x05, 0xcd, 0xe4, 0xe1, 0xea, 0x55, 0xe3, 0xe1, 0xea, 0x72, 0xea, 0xe1, 0x6a,
- 0x46, 0xc7, 0xfd, 0xd6, 0x33, 0xd5, 0xc7, 0xf5, 0x4c, 0xf5, 0x2f, 0x2d, 0x36, 0x6b, 0x95, 0x8d,
- 0xba, 0x48, 0xc6, 0xfd, 0x32, 0x8c, 0x33, 0x86, 0xc4, 0x5c, 0x4c, 0xe5, 0x6b, 0x0e, 0xcb, 0x68,
- 0xb1, 0x91, 0x14, 0x63, 0x1d, 0x07, 0x5d, 0x85, 0xb1, 0x88, 0x38, 0x61, 0x63, 0x47, 0xf1, 0x38,
- 0xf1, 0xd6, 0xc1, 0xcb, 0xb0, 0x82, 0xa2, 0x77, 0x92, 0xe0, 0x8b, 0xc5, 0xfc, 0xb4, 0xd2, 0x7a,
- 0x7f, 0xf8, 0x16, 0xc9, 0x8f, 0xb8, 0x68, 0xdf, 0x03, 0xd4, 0x8d, 0x3f, 0x80, 0x19, 0x59, 0xd9,
- 0x0c, 0xb3, 0x56, 0xea, 0x0a, 0xb1, 0xf6, 0x97, 0x16, 0x4c, 0xd5, 0x82, 0x26, 0xdd, 0xba, 0x7f,
- 0x93, 0xf6, 0xa9, 0x1e, 0x79, 0x76, 0xa4, 0x47, 0xe4, 0xd9, 0x7f, 0x60, 0xc1, 0x68, 0x2d, 0x68,
- 0x9e, 0x81, 0x8e, 0xfd, 0x0b, 0xa6, 0x8e, 0xfd, 0xf1, 0x9c, 0x25, 0x91, 0xa3, 0x56, 0xff, 0xe5,
- 0x22, 0x4c, 0xd2, 0x7e, 0x06, 0x2d, 0x39, 0x4b, 0xc6, 0x88, 0x58, 0x03, 0x8c, 0x08, 0x15, 0x73,
- 0x03, 0xcf, 0x0b, 0xee, 0xa7, 0x67, 0x6c, 0x8d, 0x95, 0x62, 0x01, 0x45, 0x2f, 0xc2, 0x58, 0x3b,
- 0x24, 0xfb, 0x6e, 0xd0, 0x89, 0xd2, 0xde, 0xd4, 0x35, 0x51, 0x8e, 0x15, 0x06, 0xbd, 0x77, 0x45,
- 0xae, 0xdf, 0x20, 0xd2, 0xbe, 0x6c, 0x88, 0xd9, 0x97, 0xf1, 0x90, 0xf2, 0x5a, 0x39, 0x36, 0xb0,
- 0xd0, 0x3d, 0x28, 0xb1, 0xff, 0x8c, 0xa3, 0x9c, 0x3c, 0xc9, 0x99, 0xc8, 0xe3, 0x22, 0x08, 0xe0,
- 0x84, 0x16, 0xba, 0x06, 0x10, 0x4b, 0x4b, 0xb8, 0x48, 0x38, 0xfb, 0x2b, 0x59, 0x5b, 0xd9, 0xc8,
- 0x45, 0x58, 0xc3, 0x42, 0x2f, 0x40, 0x29, 0x76, 0x5c, 0xef, 0x96, 0xeb, 0x93, 0x48, 0x58, 0x12,
- 0x8a, 0x34, 0x2d, 0xa2, 0x10, 0x27, 0x70, 0x2a, 0xeb, 0xb0, 0x50, 0x12, 0x3c, 0x45, 0xe2, 0x18,
- 0xc3, 0x66, 0xb2, 0xce, 0x2d, 0x55, 0x8a, 0x35, 0x0c, 0xfb, 0x0d, 0xb8, 0x50, 0x0b, 0x9a, 0xb5,
- 0x20, 0x8c, 0xd7, 0x82, 0xf0, 0xbe, 0x13, 0x36, 0xe5, 0xfc, 0x95, 0x65, 0xc6, 0x10, 0xca, 0x7b,
- 0x86, 0xf9, 0xce, 0x34, 0x72, 0x81, 0xbc, 0xc2, 0xa4, 0x9d, 0x13, 0xba, 0x7d, 0xfd, 0xbb, 0x02,
- 0x63, 0x14, 0xa9, 0xbc, 0x9d, 0xe8, 0x2b, 0x30, 0x15, 0x91, 0x5b, 0xae, 0xdf, 0x79, 0x20, 0xef,
- 0xc7, 0x3d, 0x7c, 0xea, 0xea, 0xab, 0x3a, 0x26, 0xd7, 0xb2, 0x99, 0x65, 0x38, 0x45, 0x8d, 0x0e,
- 0x61, 0xd8, 0xf1, 0x97, 0xa2, 0x3b, 0x11, 0x09, 0x45, 0xde, 0x48, 0x36, 0x84, 0x58, 0x16, 0xe2,
- 0x04, 0x4e, 0x97, 0x0c, 0xfb, 0xb3, 0x11, 0xf8, 0x38, 0x08, 0x62, 0xb9, 0xc8, 0x58, 0xe6, 0x31,
- 0xad, 0x1c, 0x1b, 0x58, 0x68, 0x0d, 0x50, 0xd4, 0x69, 0xb7, 0x3d, 0xf6, 0x00, 0xee, 0x78, 0xd7,
- 0xc3, 0xa0, 0xd3, 0xe6, 0x8f, 0x8f, 0x22, 0x69, 0x57, 0xbd, 0x0b, 0x8a, 0x33, 0x6a, 0x50, 0xc6,
- 0xb0, 0x1d, 0xb1, 0xdf, 0x22, 0x9a, 0x04, 0xd7, 0x7c, 0xd7, 0x59, 0x11, 0x96, 0x30, 0xfb, 0x7b,
- 0xd8, 0x81, 0xc1, 0xd2, 0xfd, 0xc5, 0x9d, 0x90, 0xa0, 0x3d, 0x98, 0x6c, 0xb3, 0xa3, 0x5c, 0x04,
- 0x4e, 0x17, 0x03, 0xf8, 0x70, 0x76, 0x83, 0x3c, 0xfd, 0x97, 0x4e, 0x0e, 0x9b, 0xd4, 0xed, 0x9f,
- 0x99, 0x61, 0x7c, 0xa9, 0xce, 0xaf, 0x73, 0xa3, 0xc2, 0x1b, 0x40, 0xc8, 0xae, 0xf3, 0xf9, 0x7a,
- 0x85, 0xe4, 0x08, 0x11, 0x1e, 0x05, 0x58, 0xd6, 0x45, 0xef, 0xb0, 0x57, 0x5b, 0xce, 0x0c, 0xfa,
- 0xe5, 0x0d, 0xe7, 0x58, 0xc6, 0x03, 0xad, 0xa8, 0x88, 0x35, 0x22, 0xe8, 0x16, 0x4c, 0x8a, 0xec,
- 0x70, 0x42, 0x71, 0x54, 0x34, 0x14, 0x03, 0x93, 0x58, 0x07, 0x1e, 0xa7, 0x0b, 0xb0, 0x59, 0x19,
- 0xb5, 0xe0, 0x29, 0x2d, 0x55, 0x6a, 0x86, 0xed, 0x2a, 0xe7, 0x2d, 0x4f, 0x1f, 0x1d, 0x96, 0x9f,
- 0xda, 0xec, 0x85, 0x88, 0x7b, 0xd3, 0x41, 0xb7, 0xe1, 0x82, 0xd3, 0x88, 0xdd, 0x7d, 0x52, 0x21,
- 0x4e, 0xd3, 0x73, 0x7d, 0x62, 0x86, 0x17, 0xb9, 0x78, 0x74, 0x58, 0xbe, 0xb0, 0x94, 0x85, 0x80,
- 0xb3, 0xeb, 0xa1, 0x2f, 0x40, 0xa9, 0xe9, 0x47, 0x62, 0x0c, 0x46, 0x8c, 0x2c, 0xc0, 0xa5, 0xca,
- 0x46, 0x5d, 0x7d, 0x7f, 0xf2, 0x07, 0x27, 0x15, 0x50, 0x8b, 0x2b, 0x8f, 0xd4, 0x5d, 0x6d, 0xb4,
- 0x2b, 0x66, 0x4c, 0xfa, 0xd6, 0x6f, 0xf8, 0xdd, 0x71, 0xad, 0xa9, 0xb2, 0x0c, 0x37, 0x5c, 0xf2,
- 0x0c, 0xc2, 0xe8, 0x6d, 0x40, 0x54, 0x98, 0x71, 0x1b, 0x64, 0xa9, 0xc1, 0xe2, 0xd7, 0x33, 0x5d,
- 0xdb, 0x98, 0xe1, 0xe6, 0x84, 0xea, 0x5d, 0x18, 0x38, 0xa3, 0x16, 0xba, 0x41, 0x39, 0x8a, 0x5e,
- 0x2a, 0x0c, 0xf9, 0xa5, 0x00, 0x3c, 0x57, 0x21, 0xed, 0x90, 0x34, 0x9c, 0x98, 0x34, 0x4d, 0x8a,
- 0x38, 0x55, 0x8f, 0x9e, 0x37, 0x2a, 0x95, 0x15, 0x98, 0xe6, 0xe7, 0xdd, 0xe9, 0xac, 0xe8, 0xdd,
- 0x71, 0x27, 0x88, 0xe2, 0x0d, 0x12, 0xdf, 0x0f, 0xc2, 0x5d, 0x11, 0x13, 0x30, 0x09, 0x4f, 0x9b,
- 0x80, 0xb0, 0x8e, 0x47, 0x65, 0x45, 0xf6, 0x6c, 0x5a, 0xad, 0xb0, 0x57, 0xac, 0xb1, 0x64, 0x9f,
- 0xdc, 0xe0, 0xc5, 0x58, 0xc2, 0x25, 0x6a, 0xb5, 0xb6, 0xc2, 0x5e, 0xa4, 0x52, 0xa8, 0xd5, 0xda,
- 0x0a, 0x96, 0x70, 0x44, 0xba, 0x33, 0x2c, 0x4f, 0xe5, 0x6b, 0xfe, 0xba, 0xf9, 0xf2, 0x80, 0x49,
- 0x96, 0x7d, 0x98, 0x51, 0xb9, 0x9d, 0x79, 0xb0, 0xc4, 0x68, 0x6e, 0x9a, 0x2d, 0x92, 0xc1, 0x23,
- 0x2d, 0x2a, 0x5d, 0x6a, 0x35, 0x45, 0x09, 0x77, 0xd1, 0x36, 0xc2, 0xd6, 0xcc, 0xf4, 0x4d, 0x45,
- 0xb6, 0x08, 0xa5, 0xa8, 0xb3, 0xd5, 0x0c, 0xf6, 0x1c, 0xd7, 0x67, 0x0f, 0x48, 0x9a, 0x20, 0x52,
- 0x97, 0x00, 0x9c, 0xe0, 0xa0, 0x35, 0x18, 0x73, 0xa4, 0xa2, 0x14, 0xe5, 0xc7, 0xb1, 0x50, 0xea,
- 0x51, 0x26, 0x66, 0x2b, 0xd5, 0xa8, 0xaa, 0x8b, 0xde, 0x84, 0x49, 0xe1, 0x6a, 0x29, 0xac, 0xa4,
- 0xcf, 0x99, 0x5e, 0x39, 0x75, 0x1d, 0x88, 0x4d, 0x5c, 0xf4, 0x5d, 0x30, 0x45, 0xa9, 0x24, 0x8c,
- 0x6d, 0xee, 0xfc, 0x20, 0x1c, 0x51, 0x4b, 0x31, 0xa3, 0x57, 0xc6, 0x29, 0x62, 0xa8, 0x09, 0x4f,
- 0x3a, 0x9d, 0x38, 0x60, 0xca, 0x66, 0x73, 0xfd, 0x6f, 0x06, 0xbb, 0xc4, 0x67, 0xef, 0x3c, 0x63,
- 0xcb, 0x97, 0x8f, 0x0e, 0xcb, 0x4f, 0x2e, 0xf5, 0xc0, 0xc3, 0x3d, 0xa9, 0xa0, 0x3b, 0x30, 0x1e,
- 0x07, 0x9e, 0x70, 0x6f, 0x88, 0xe6, 0x1e, 0xcb, 0x0f, 0xbb, 0xb5, 0xa9, 0xd0, 0x74, 0x45, 0x8b,
- 0xaa, 0x8a, 0x75, 0x3a, 0x68, 0x93, 0xef, 0x31, 0x16, 0x90, 0x98, 0x44, 0x73, 0x8f, 0xe7, 0x0f,
- 0x8c, 0x8a, 0x5b, 0x6c, 0x6e, 0x41, 0x51, 0x13, 0xeb, 0x64, 0xd0, 0x75, 0x98, 0x6d, 0x87, 0x6e,
- 0xc0, 0x16, 0xb6, 0x52, 0xf4, 0xcf, 0x99, 0x59, 0x45, 0x6a, 0x69, 0x04, 0xdc, 0x5d, 0x87, 0x5e,
- 0xc4, 0x64, 0xe1, 0xdc, 0x45, 0x9e, 0xa2, 0x8e, 0x0b, 0xa7, 0xbc, 0x0c, 0x2b, 0x28, 0x5a, 0x67,
- 0x7c, 0x99, 0x5f, 0x99, 0xe6, 0xe6, 0xf3, 0xe3, 0x7f, 0xe8, 0x57, 0x2b, 0x2e, 0xb8, 0xa8, 0xbf,
- 0x38, 0xa1, 0x40, 0xcf, 0x8d, 0x68, 0xc7, 0x09, 0x49, 0x2d, 0x0c, 0x1a, 0x84, 0x77, 0x86, 0x9b,
- 0x93, 0x3f, 0xc1, 0xe3, 0xa6, 0xd2, 0x73, 0xa3, 0x9e, 0x85, 0x80, 0xb3, 0xeb, 0xcd, 0x7f, 0x3b,
- 0xcc, 0x76, 0x71, 0xf2, 0x13, 0x99, 0xc2, 0xff, 0xc5, 0x30, 0x94, 0x94, 0x22, 0x17, 0x2d, 0x9a,
- 0xfa, 0xf9, 0x8b, 0x69, 0xfd, 0xfc, 0x18, 0x95, 0x27, 0x75, 0x95, 0xfc, 0xa6, 0x61, 0xc8, 0x55,
- 0xc8, 0x4f, 0x5d, 0xa7, 0x6b, 0x31, 0xfa, 0xfa, 0xad, 0x6a, 0xf7, 0xf2, 0xe2, 0xc0, 0x8a, 0xfe,
- 0xa1, 0x9e, 0x57, 0xfd, 0x01, 0xb3, 0x71, 0xd3, 0xab, 0x6b, 0x3b, 0x68, 0x56, 0x6b, 0xe9, 0xf4,
- 0xb4, 0x35, 0x5a, 0x88, 0x39, 0x8c, 0x5d, 0x3e, 0xa8, 0xd8, 0xc1, 0x2e, 0x1f, 0xa3, 0x0f, 0x79,
- 0xf9, 0x90, 0x04, 0x70, 0x42, 0x0b, 0x79, 0x30, 0xdb, 0x30, 0x33, 0x0b, 0x2b, 0x5f, 0xd5, 0x67,
- 0xfa, 0xe6, 0xf8, 0xed, 0x68, 0x29, 0x07, 0x57, 0xd2, 0x54, 0x70, 0x37, 0x61, 0xf4, 0x26, 0x8c,
- 0x7d, 0x10, 0x44, 0x6c, 0x5b, 0x88, 0xb3, 0x57, 0x7a, 0x07, 0x8e, 0xbd, 0x73, 0xbb, 0xce, 0xca,
- 0x8f, 0x0f, 0xcb, 0xe3, 0xb5, 0xa0, 0x29, 0xff, 0x62, 0x55, 0x01, 0x3d, 0x80, 0x0b, 0x06, 0xc7,
- 0x52, 0xdd, 0x85, 0xc1, 0xbb, 0xfb, 0x94, 0x68, 0xee, 0x42, 0x35, 0x8b, 0x12, 0xce, 0x6e, 0x80,
- 0xb2, 0x01, 0x3f, 0x10, 0x59, 0xb9, 0xe5, 0xf9, 0xce, 0x8e, 0xf1, 0x92, 0x1e, 0x64, 0x21, 0x85,
- 0x80, 0xbb, 0xeb, 0xd8, 0xbf, 0xc6, 0xf5, 0xde, 0x42, 0x3b, 0x46, 0xa2, 0x8e, 0x77, 0x16, 0x09,
- 0xca, 0x56, 0x0d, 0xc5, 0xdd, 0x43, 0xbf, 0xad, 0xfc, 0x96, 0xc5, 0xde, 0x56, 0x36, 0xc9, 0x5e,
- 0xdb, 0x73, 0xe2, 0xb3, 0xf0, 0xa4, 0x78, 0x07, 0xc6, 0x62, 0xd1, 0x5a, 0xaf, 0x9c, 0x6a, 0x5a,
- 0xa7, 0xd8, 0xfb, 0x92, 0x3a, 0xf9, 0x65, 0x29, 0x56, 0x64, 0xec, 0x7f, 0xc6, 0x67, 0x40, 0x42,
- 0xce, 0x40, 0x89, 0x52, 0x31, 0x95, 0x28, 0xe5, 0x3e, 0x5f, 0x90, 0xa3, 0x4c, 0xf9, 0xa7, 0x66,
- 0xbf, 0xd9, 0x25, 0xeb, 0x93, 0xfe, 0xa8, 0x67, 0xff, 0x84, 0x05, 0xe7, 0xb3, 0xac, 0x60, 0xa8,
- 0xb4, 0xc6, 0xaf, 0x78, 0xea, 0x91, 0x53, 0x8d, 0xe0, 0x5d, 0x51, 0x8e, 0x15, 0xc6, 0xc0, 0xe9,
- 0x4a, 0x4e, 0x16, 0x53, 0xef, 0x36, 0x98, 0xd9, 0xac, 0xd1, 0x5b, 0xdc, 0x35, 0xca, 0x52, 0xe9,
- 0xa6, 0x4f, 0xe6, 0x16, 0x65, 0xff, 0x7c, 0x01, 0xce, 0xf3, 0x57, 0x8a, 0xa5, 0xfd, 0xc0, 0x6d,
- 0xd6, 0x82, 0xa6, 0x70, 0x14, 0x7b, 0x17, 0x26, 0xda, 0xda, 0xbd, 0xbc, 0x57, 0x54, 0x2f, 0xfd,
- 0xfe, 0x9e, 0xdc, 0x8f, 0xf4, 0x52, 0x6c, 0xd0, 0x42, 0x4d, 0x98, 0x20, 0xfb, 0x6e, 0x43, 0xa9,
- 0xba, 0x0b, 0x27, 0x3e, 0x1b, 0x54, 0x2b, 0xab, 0x1a, 0x1d, 0x6c, 0x50, 0x7d, 0x04, 0xd9, 0x07,
- 0xed, 0x9f, 0xb4, 0xe0, 0xf1, 0x9c, 0x18, 0x60, 0xb4, 0xb9, 0xfb, 0xec, 0x3d, 0x48, 0x24, 0x32,
- 0x53, 0xcd, 0xf1, 0x57, 0x22, 0x2c, 0xa0, 0xe8, 0x4b, 0x00, 0xfc, 0x95, 0x87, 0x5e, 0x17, 0xc4,
- 0xa7, 0x0f, 0x16, 0x1b, 0x47, 0x0b, 0xa0, 0x22, 0xeb, 0x63, 0x8d, 0x96, 0xfd, 0xb3, 0x45, 0x18,
- 0x66, 0xaf, 0x0a, 0x68, 0x0d, 0x46, 0x77, 0x78, 0xc4, 0xf1, 0x41, 0x82, 0x9b, 0x27, 0xf7, 0x2e,
- 0x5e, 0x80, 0x65, 0x65, 0xb4, 0x0e, 0xe7, 0x84, 0x33, 0x62, 0x85, 0x78, 0xce, 0x81, 0xbc, 0xbe,
- 0xf3, 0xe4, 0x5f, 0x2a, 0xdd, 0x5d, 0xb5, 0x1b, 0x05, 0x67, 0xd5, 0x43, 0x6f, 0x75, 0xc5, 0x19,
- 0xe5, 0xb1, 0xda, 0x95, 0xb0, 0xdf, 0x27, 0xd6, 0xe8, 0x9b, 0x30, 0xd9, 0xee, 0x52, 0x54, 0x0c,
- 0x27, 0x17, 0x11, 0x53, 0x39, 0x61, 0xe2, 0x32, 0xf3, 0x97, 0x0e, 0x33, 0xf6, 0xd9, 0xdc, 0x09,
- 0x49, 0xb4, 0x13, 0x78, 0x4d, 0x91, 0x8f, 0x3f, 0x31, 0x7f, 0x49, 0xc1, 0x71, 0x57, 0x0d, 0x4a,
- 0x65, 0xdb, 0x71, 0xbd, 0x4e, 0x48, 0x12, 0x2a, 0x23, 0x26, 0x95, 0xb5, 0x14, 0x1c, 0x77, 0xd5,
- 0xa0, 0xeb, 0xe8, 0x82, 0x48, 0xe6, 0x2e, 0x43, 0x54, 0x28, 0x9b, 0xa6, 0x51, 0xe9, 0xaa, 0xd2,
- 0x23, 0x6c, 0x92, 0xb0, 0xfa, 0x50, 0xe9, 0xe0, 0xb5, 0x54, 0xc1, 0xc2, 0x49, 0x45, 0x52, 0x79,
- 0x98, 0x94, 0xe2, 0x7f, 0x64, 0xc1, 0xb9, 0x0c, 0xdb, 0x49, 0xce, 0xaa, 0x5a, 0x6e, 0x14, 0xab,
- 0x04, 0x47, 0x1a, 0xab, 0xe2, 0xe5, 0x58, 0x61, 0xd0, 0xfd, 0xc0, 0x99, 0x61, 0x9a, 0x01, 0x0a,
- 0xdb, 0x24, 0x01, 0x3d, 0x19, 0x03, 0x44, 0x97, 0x61, 0xa8, 0x13, 0x91, 0x50, 0xe6, 0xe2, 0x96,
- 0xfc, 0x9b, 0xa9, 0x3e, 0x19, 0x84, 0x8a, 0xa6, 0x2d, 0xa5, 0x75, 0xd4, 0x44, 0x53, 0xae, 0x77,
- 0xe4, 0x30, 0xfb, 0xeb, 0x45, 0xb8, 0x98, 0x6b, 0x1b, 0x4d, 0xbb, 0xb4, 0x17, 0xf8, 0x6e, 0x1c,
- 0xa8, 0x17, 0x2b, 0x1e, 0xdf, 0x87, 0xb4, 0x77, 0xd6, 0x45, 0x39, 0x56, 0x18, 0xe8, 0x0a, 0x0c,
- 0xb3, 0x9b, 0x7d, 0x57, 0x0a, 0xa7, 0xe5, 0x0a, 0x0f, 0x3b, 0xc1, 0xc1, 0x03, 0xa7, 0xc7, 0x7b,
- 0x06, 0x86, 0xda, 0x41, 0xe0, 0xa5, 0x99, 0x11, 0xed, 0x6e, 0x10, 0x78, 0x98, 0x01, 0xd1, 0x67,
- 0xc4, 0x38, 0xa4, 0x9e, 0x68, 0xb0, 0xd3, 0x0c, 0x22, 0x6d, 0x30, 0x9e, 0x83, 0xd1, 0x5d, 0x72,
- 0x10, 0xba, 0x7e, 0x2b, 0xfd, 0x74, 0x77, 0x93, 0x17, 0x63, 0x09, 0x37, 0x33, 0x98, 0x8c, 0x9e,
- 0x76, 0x5e, 0xbb, 0xb1, 0xbe, 0x47, 0xdb, 0x0f, 0x17, 0x61, 0x1a, 0x2f, 0x57, 0xbe, 0x35, 0x11,
- 0x77, 0xba, 0x27, 0xe2, 0xb4, 0xf3, 0xda, 0xf5, 0x9f, 0x8d, 0x5f, 0xb6, 0x60, 0x9a, 0x45, 0xf9,
- 0x16, 0xf1, 0x69, 0xdc, 0xc0, 0x3f, 0x03, 0xd1, 0xed, 0x19, 0x18, 0x0e, 0x69, 0xa3, 0xe9, 0x64,
- 0x55, 0xac, 0x27, 0x98, 0xc3, 0xd0, 0x93, 0x30, 0xc4, 0xba, 0x40, 0x27, 0x6f, 0x82, 0xe7, 0xf9,
- 0xa8, 0x38, 0xb1, 0x83, 0x59, 0x29, 0x73, 0x14, 0xc6, 0xa4, 0xed, 0xb9, 0xbc, 0xd3, 0x89, 0xaa,
- 0xff, 0x93, 0xe1, 0x28, 0x9c, 0xd9, 0xb5, 0x8f, 0xe6, 0x28, 0x9c, 0x4d, 0xb2, 0xf7, 0xb5, 0xe8,
- 0xbf, 0x15, 0xe0, 0x52, 0x66, 0xbd, 0x81, 0x1d, 0x85, 0x7b, 0xd7, 0x3e, 0x1d, 0x0b, 0x8c, 0x6c,
- 0xc3, 0x88, 0xe2, 0x19, 0x1a, 0x46, 0x0c, 0x0d, 0x2a, 0x39, 0x0e, 0x0f, 0xe0, 0xbf, 0x9b, 0x39,
- 0x64, 0x9f, 0x10, 0xff, 0xdd, 0xcc, 0xbe, 0xe5, 0x5c, 0xeb, 0xfe, 0xaa, 0x90, 0xf3, 0x2d, 0xec,
- 0x82, 0x77, 0x95, 0xf2, 0x19, 0x06, 0x8c, 0x84, 0x24, 0x3c, 0xc1, 0x79, 0x0c, 0x2f, 0xc3, 0x0a,
- 0x8a, 0x5c, 0xcd, 0x13, 0xb6, 0x90, 0x9f, 0xca, 0x34, 0xb7, 0xa9, 0x05, 0xf3, 0x65, 0x46, 0x0f,
- 0xa6, 0x93, 0xf6, 0x8a, 0x5d, 0xd7, 0x2e, 0xe5, 0xc5, 0xc1, 0x2f, 0xe5, 0x13, 0xd9, 0x17, 0x72,
- 0xb4, 0x04, 0xd3, 0x7b, 0xae, 0x4f, 0xd9, 0xe6, 0x81, 0x29, 0x8a, 0xaa, 0xc0, 0x10, 0xeb, 0x26,
- 0x18, 0xa7, 0xf1, 0xe7, 0xdf, 0x84, 0xc9, 0x87, 0x57, 0x47, 0x7e, 0xb3, 0x08, 0x4f, 0xf4, 0xd8,
- 0xf6, 0x9c, 0xd7, 0x1b, 0x73, 0xa0, 0xf1, 0xfa, 0xae, 0x79, 0xa8, 0xc1, 0xf9, 0xed, 0x8e, 0xe7,
- 0x1d, 0x30, 0xdb, 0x43, 0xd2, 0x94, 0x18, 0x42, 0x56, 0x54, 0x21, 0xfc, 0xd7, 0x32, 0x70, 0x70,
- 0x66, 0x4d, 0xf4, 0x36, 0xa0, 0x40, 0xe4, 0x51, 0x4e, 0x42, 0x04, 0xb1, 0x81, 0x2f, 0x26, 0x9b,
- 0xf1, 0x76, 0x17, 0x06, 0xce, 0xa8, 0x45, 0x85, 0x7e, 0x7a, 0x2a, 0x1d, 0xa8, 0x6e, 0xa5, 0x84,
- 0x7e, 0xac, 0x03, 0xb1, 0x89, 0x8b, 0xae, 0xc3, 0xac, 0xb3, 0xef, 0xb8, 0x3c, 0x64, 0xa4, 0x24,
- 0xc0, 0xa5, 0x7e, 0xa5, 0x04, 0x5b, 0x4a, 0x23, 0xe0, 0xee, 0x3a, 0x29, 0x57, 0xdc, 0x91, 0x7c,
- 0x57, 0xdc, 0xde, 0x7c, 0xb1, 0x9f, 0x4e, 0xd7, 0xfe, 0x8f, 0x16, 0x3d, 0xbe, 0xb8, 0xf0, 0x6e,
- 0x86, 0xcf, 0x7a, 0x13, 0x26, 0x95, 0x6e, 0x52, 0xf3, 0x8a, 0x55, 0xe3, 0xb0, 0xa2, 0x03, 0xb1,
- 0x89, 0xcb, 0x17, 0x44, 0x94, 0x38, 0x68, 0x18, 0xa2, 0xbb, 0x70, 0x7b, 0x57, 0x18, 0xe8, 0xcb,
- 0x30, 0xda, 0x74, 0xf7, 0xdd, 0x28, 0x08, 0xc5, 0x66, 0x39, 0xa1, 0x99, 0x7b, 0xc2, 0x07, 0x2b,
- 0x9c, 0x0c, 0x96, 0xf4, 0xec, 0x1f, 0x2e, 0xc0, 0xa4, 0x6c, 0xf1, 0x9d, 0x4e, 0x10, 0x3b, 0x67,
- 0x70, 0x2c, 0x5f, 0x37, 0x8e, 0xe5, 0xcf, 0xf4, 0xf2, 0xfd, 0x67, 0x5d, 0xca, 0x3d, 0x8e, 0x6f,
- 0xa7, 0x8e, 0xe3, 0x67, 0xfb, 0x93, 0xea, 0x7d, 0x0c, 0xff, 0x73, 0x0b, 0x66, 0x0d, 0xfc, 0x33,
- 0x38, 0x0d, 0xd6, 0xcc, 0xd3, 0xe0, 0xe9, 0xbe, 0xdf, 0x90, 0x73, 0x0a, 0x7c, 0xa3, 0x90, 0xea,
- 0x3b, 0xe3, 0xfe, 0x1f, 0xc0, 0xd0, 0x8e, 0x13, 0x36, 0x7b, 0x05, 0x3e, 0xee, 0xaa, 0xb4, 0x70,
- 0xc3, 0x09, 0x9b, 0x9c, 0x87, 0xbf, 0xa8, 0xb2, 0xaf, 0x3a, 0x61, 0xb3, 0xaf, 0x3f, 0x12, 0x6b,
- 0x0a, 0xbd, 0x01, 0x23, 0x51, 0x23, 0x68, 0x2b, 0x6b, 0xc1, 0xcb, 0x3c, 0x33, 0x2b, 0x2d, 0x39,
- 0x3e, 0x2c, 0x23, 0xb3, 0x39, 0x5a, 0x8c, 0x05, 0xfe, 0x7c, 0x0b, 0x4a, 0xaa, 0xe9, 0x47, 0xea,
- 0xeb, 0xf1, 0xfb, 0x45, 0x38, 0x97, 0xb1, 0x2e, 0x50, 0x64, 0x8c, 0xd6, 0xcb, 0x03, 0x2e, 0xa7,
- 0x8f, 0x38, 0x5e, 0x11, 0xbb, 0xb1, 0x34, 0xc5, 0xfc, 0x0f, 0xdc, 0xe8, 0x9d, 0x88, 0xa4, 0x1b,
- 0xa5, 0x45, 0xfd, 0x1b, 0xa5, 0x8d, 0x9d, 0xd9, 0x50, 0xd3, 0x86, 0x54, 0x4f, 0x1f, 0xe9, 0x9c,
- 0xfe, 0x79, 0x11, 0xce, 0x67, 0x85, 0x0c, 0x41, 0xdf, 0x9d, 0x4a, 0xa3, 0xf4, 0xea, 0xa0, 0xc1,
- 0x46, 0x78, 0x6e, 0x25, 0x11, 0x63, 0x6d, 0xc1, 0x4c, 0xac, 0xd4, 0x77, 0x98, 0x45, 0x9b, 0xcc,
- 0x41, 0x30, 0xe4, 0xe9, 0xaf, 0xe4, 0x16, 0xff, 0xdc, 0xc0, 0x1d, 0x10, 0x79, 0xb3, 0xa2, 0x94,
- 0x83, 0xa0, 0x2c, 0xee, 0xef, 0x20, 0x28, 0x5b, 0x9e, 0x77, 0x61, 0x5c, 0xfb, 0x9a, 0x47, 0x3a,
- 0xe3, 0xbb, 0xf4, 0x44, 0xd1, 0xfa, 0xfd, 0x48, 0x67, 0xfd, 0x27, 0x2d, 0x48, 0xd9, 0xe8, 0x29,
- 0x95, 0x94, 0x95, 0xab, 0x92, 0xba, 0x0c, 0x43, 0x61, 0xe0, 0x91, 0x74, 0x66, 0x1d, 0x1c, 0x78,
- 0x04, 0x33, 0x08, 0xc5, 0x88, 0x13, 0x85, 0xc4, 0x84, 0x7e, 0xd9, 0x12, 0xd7, 0xa8, 0x67, 0x60,
- 0xd8, 0x23, 0xfb, 0x44, 0x6a, 0x23, 0x14, 0x4f, 0xbe, 0x45, 0x0b, 0x31, 0x87, 0xd9, 0xbf, 0x3c,
- 0x04, 0x4f, 0xf5, 0x74, 0xb1, 0xa5, 0x57, 0x96, 0x96, 0x13, 0x93, 0xfb, 0xce, 0x41, 0x3a, 0xee,
- 0xf7, 0x75, 0x5e, 0x8c, 0x25, 0x9c, 0x59, 0x14, 0xf3, 0xd0, 0xa1, 0x29, 0x05, 0x9e, 0x88, 0x18,
- 0x2a, 0xa0, 0xa6, 0xe2, 0xa8, 0x78, 0x1a, 0x8a, 0xa3, 0x6b, 0x00, 0x51, 0xe4, 0xad, 0xfa, 0x54,
- 0x02, 0x6b, 0x0a, 0x53, 0xe5, 0x24, 0xc4, 0x6c, 0xfd, 0x96, 0x80, 0x60, 0x0d, 0x0b, 0x55, 0x60,
- 0xa6, 0x1d, 0x06, 0x31, 0xd7, 0x87, 0x56, 0xb8, 0x91, 0xcc, 0xb0, 0xe9, 0xdd, 0x58, 0x4b, 0xc1,
- 0x71, 0x57, 0x0d, 0xf4, 0x1a, 0x8c, 0x0b, 0x8f, 0xc7, 0x5a, 0x10, 0x78, 0x42, 0x55, 0xa3, 0x4c,
- 0x2e, 0xea, 0x09, 0x08, 0xeb, 0x78, 0x5a, 0x35, 0xa6, 0x64, 0x1d, 0xcd, 0xac, 0xc6, 0x15, 0xad,
- 0x1a, 0x5e, 0x2a, 0x7c, 0xd0, 0xd8, 0x40, 0xe1, 0x83, 0x12, 0xe5, 0x55, 0x69, 0xe0, 0x77, 0x25,
- 0xe8, 0xab, 0xee, 0xf9, 0x85, 0x21, 0x38, 0x27, 0x16, 0xce, 0xa3, 0x5e, 0x2e, 0x77, 0xba, 0x97,
- 0xcb, 0x69, 0xa8, 0xb7, 0xbe, 0xb5, 0x66, 0xce, 0x7a, 0xcd, 0xfc, 0x5a, 0x11, 0x46, 0xf8, 0x54,
- 0x9c, 0x81, 0x0c, 0xbf, 0x26, 0x94, 0x7e, 0x3d, 0x02, 0xe7, 0xf0, 0xbe, 0x2c, 0x54, 0x9c, 0xd8,
- 0xe1, 0xe7, 0x97, 0x62, 0xa3, 0x89, 0x7a, 0x10, 0x2d, 0x18, 0x8c, 0x76, 0x3e, 0xa5, 0xd5, 0x02,
- 0x4e, 0x43, 0x63, 0xbb, 0x5f, 0x01, 0x88, 0xe2, 0xd0, 0xf5, 0x5b, 0x94, 0x86, 0x08, 0xc1, 0xf4,
- 0x7c, 0x8f, 0xd6, 0xeb, 0x0a, 0x99, 0xf7, 0x21, 0x59, 0x82, 0x0a, 0x80, 0x35, 0x8a, 0xf3, 0xaf,
- 0x43, 0x49, 0x21, 0xf7, 0x53, 0x01, 0x4c, 0xe8, 0xa7, 0xde, 0x17, 0x61, 0x3a, 0xd5, 0xd6, 0x89,
- 0x34, 0x08, 0xbf, 0x62, 0xc1, 0x34, 0xef, 0xf2, 0xaa, 0xbf, 0x2f, 0x36, 0xfb, 0x87, 0x70, 0xde,
- 0xcb, 0xd8, 0x74, 0x62, 0x46, 0x07, 0xdf, 0xa4, 0x4a, 0x63, 0x90, 0x05, 0xc5, 0x99, 0x6d, 0xa0,
- 0xab, 0x30, 0xc6, 0x5d, 0x70, 0x1c, 0x4f, 0xb8, 0x4d, 0x4c, 0xf0, 0x54, 0x1c, 0xbc, 0x0c, 0x2b,
- 0xa8, 0xfd, 0x07, 0x16, 0xcc, 0xf2, 0x9e, 0xdf, 0x24, 0x07, 0xea, 0x76, 0xfc, 0x71, 0xf6, 0x5d,
- 0x64, 0x1a, 0x29, 0xe4, 0x64, 0x1a, 0xd1, 0x3f, 0xad, 0xd8, 0xf3, 0xd3, 0x7e, 0xde, 0x02, 0xb1,
- 0x02, 0xcf, 0xe0, 0x1e, 0xf8, 0xed, 0xe6, 0x3d, 0x70, 0x3e, 0x7f, 0x51, 0xe7, 0x5c, 0x00, 0xff,
- 0xd2, 0x82, 0x19, 0x8e, 0x90, 0x3c, 0x44, 0x7e, 0xac, 0xf3, 0x30, 0x48, 0xfa, 0x3b, 0x95, 0x6f,
- 0x3c, 0xfb, 0xa3, 0x8c, 0xc9, 0x1a, 0xea, 0x39, 0x59, 0x4d, 0xb9, 0x81, 0x4e, 0x90, 0xd6, 0xf1,
- 0xc4, 0xc1, 0x71, 0xed, 0x3f, 0xb3, 0x00, 0xf1, 0x66, 0x8c, 0x73, 0x99, 0x9e, 0x76, 0xac, 0x54,
- 0xd3, 0x04, 0x25, 0xac, 0x46, 0x41, 0xb0, 0x86, 0x75, 0x2a, 0xc3, 0x93, 0x7a, 0x4d, 0x2e, 0xf6,
- 0x7f, 0x4d, 0x3e, 0xc1, 0x88, 0xfe, 0xd0, 0x10, 0xa4, 0x6d, 0xb4, 0xd1, 0x5d, 0x98, 0x68, 0x38,
- 0x6d, 0x67, 0xcb, 0xf5, 0xdc, 0xd8, 0x25, 0x51, 0x2f, 0x33, 0x94, 0x15, 0x0d, 0x4f, 0xbc, 0x13,
- 0x6a, 0x25, 0xd8, 0xa0, 0x83, 0x16, 0x00, 0xda, 0xa1, 0xbb, 0xef, 0x7a, 0xa4, 0xc5, 0xae, 0xc2,
- 0xcc, 0x51, 0x8b, 0xdb, 0x56, 0xc8, 0x52, 0xac, 0x61, 0x64, 0x38, 0xf6, 0x14, 0x1f, 0x9d, 0x63,
- 0xcf, 0xd0, 0x09, 0x1d, 0x7b, 0x86, 0x07, 0x72, 0xec, 0xc1, 0xf0, 0x98, 0x3c, 0xbb, 0xe9, 0xff,
- 0x35, 0xd7, 0x23, 0x42, 0x60, 0xe3, 0xee, 0x5b, 0xf3, 0x47, 0x87, 0xe5, 0xc7, 0x70, 0x26, 0x06,
- 0xce, 0xa9, 0x89, 0xbe, 0x04, 0x73, 0x8e, 0xe7, 0x05, 0xf7, 0xd5, 0xa8, 0xad, 0x46, 0x0d, 0xc7,
- 0x4b, 0x62, 0xc5, 0x8f, 0x2d, 0x3f, 0x79, 0x74, 0x58, 0x9e, 0x5b, 0xca, 0xc1, 0xc1, 0xb9, 0xb5,
- 0xed, 0x5d, 0x38, 0x57, 0x27, 0xa1, 0xcc, 0x14, 0xab, 0xb6, 0xd8, 0x26, 0x94, 0xc2, 0x14, 0x53,
- 0x19, 0x28, 0x46, 0x8b, 0x16, 0xc7, 0x53, 0x32, 0x91, 0x84, 0x90, 0xfd, 0x17, 0x16, 0x8c, 0x0a,
- 0xbb, 0xef, 0x33, 0x90, 0x65, 0x96, 0x0c, 0x7d, 0x64, 0x39, 0x9b, 0xf1, 0xb2, 0xce, 0xe4, 0x6a,
- 0x22, 0xab, 0x29, 0x4d, 0xe4, 0xd3, 0xbd, 0x88, 0xf4, 0xd6, 0x41, 0xfe, 0x78, 0x11, 0xa6, 0x4c,
- 0x9b, 0xf7, 0x33, 0x18, 0x82, 0x0d, 0x18, 0x8d, 0x84, 0x83, 0x45, 0x21, 0xdf, 0x10, 0x36, 0x3d,
- 0x89, 0x89, 0x95, 0x8b, 0x70, 0xa9, 0x90, 0x44, 0x32, 0x3d, 0x37, 0x8a, 0x8f, 0xd0, 0x73, 0xa3,
- 0x9f, 0xdb, 0xc1, 0xd0, 0x69, 0xb8, 0x1d, 0xd8, 0xbf, 0xce, 0x98, 0xbf, 0x5e, 0x7e, 0x06, 0x72,
- 0xc1, 0x75, 0xf3, 0x98, 0xb0, 0x7b, 0xac, 0x2c, 0xd1, 0xa9, 0x1c, 0xf9, 0xe0, 0x1f, 0x5b, 0x30,
- 0x2e, 0x10, 0xcf, 0xa0, 0xdb, 0xdf, 0x61, 0x76, 0xfb, 0x89, 0x1e, 0xdd, 0xce, 0xe9, 0xef, 0xdf,
- 0x2d, 0xa8, 0xfe, 0xd6, 0x82, 0x30, 0x1e, 0x28, 0x77, 0xc8, 0x18, 0xbd, 0x0d, 0x06, 0x8d, 0xc0,
- 0x13, 0x87, 0xf9, 0x93, 0x89, 0x07, 0x2f, 0x2f, 0x3f, 0xd6, 0x7e, 0x63, 0x85, 0xcd, 0x1c, 0x4c,
- 0x83, 0x30, 0x16, 0x07, 0x68, 0xe2, 0x60, 0x1a, 0x84, 0x31, 0x66, 0x10, 0xd4, 0x04, 0x88, 0x9d,
- 0xb0, 0x45, 0x62, 0x5a, 0x26, 0x82, 0x01, 0xe4, 0xef, 0xc2, 0x4e, 0xec, 0x7a, 0x0b, 0xae, 0x1f,
- 0x47, 0x71, 0xb8, 0x50, 0xf5, 0xe3, 0xdb, 0x21, 0xbf, 0x1b, 0x68, 0x2e, 0xb9, 0x8a, 0x16, 0xd6,
- 0xe8, 0x4a, 0x9f, 0x30, 0xd6, 0xc6, 0xb0, 0xf9, 0x50, 0xb8, 0x21, 0xca, 0xb1, 0xc2, 0xb0, 0x5f,
- 0x67, 0x3c, 0x99, 0x0d, 0xd0, 0xc9, 0xbc, 0x65, 0x7f, 0x77, 0x4c, 0x0d, 0x2d, 0x7b, 0x25, 0xa8,
- 0xe8, 0x3e, 0xb9, 0xbd, 0x59, 0x20, 0x6d, 0x58, 0xf7, 0x2f, 0x48, 0x1c, 0x77, 0xd1, 0x77, 0x76,
- 0xbd, 0x1f, 0xbf, 0xd4, 0x87, 0x97, 0x9e, 0xe0, 0xc5, 0x98, 0x05, 0xa0, 0x65, 0x81, 0x3a, 0xab,
- 0xb5, 0x74, 0x76, 0x97, 0x15, 0x09, 0xc0, 0x09, 0x0e, 0x5a, 0x14, 0x37, 0x4b, 0xae, 0x9f, 0x7b,
- 0x22, 0x75, 0xb3, 0x94, 0x9f, 0xaf, 0x5d, 0x2d, 0x5f, 0x86, 0x71, 0x95, 0x31, 0xaf, 0xc6, 0x13,
- 0x8f, 0x89, 0xd0, 0x08, 0xab, 0x49, 0x31, 0xd6, 0x71, 0xd0, 0x26, 0x4c, 0x47, 0x3c, 0x9d, 0x9f,
- 0x8a, 0x80, 0xc5, 0xf5, 0x06, 0xcf, 0xcb, 0x77, 0xe7, 0xba, 0x09, 0x3e, 0x66, 0x45, 0x7c, 0xb3,
- 0x4a, 0xc7, 0xae, 0x34, 0x09, 0xf4, 0x16, 0x4c, 0x79, 0x7a, 0x5a, 0xf3, 0x9a, 0x50, 0x2b, 0x28,
- 0xb3, 0x4c, 0x23, 0xe9, 0x79, 0x0d, 0xa7, 0xb0, 0xa9, 0x10, 0xa0, 0x97, 0x88, 0xa8, 0x6d, 0x8e,
- 0xdf, 0x22, 0x91, 0xc8, 0xf7, 0xc5, 0x84, 0x80, 0x5b, 0x39, 0x38, 0x38, 0xb7, 0x36, 0x7a, 0x03,
- 0x26, 0xe4, 0xe7, 0x6b, 0x6e, 0x8b, 0x89, 0xf1, 0xaf, 0x06, 0xc3, 0x06, 0x26, 0xba, 0x0f, 0x17,
- 0xe4, 0xff, 0xcd, 0xd0, 0xd9, 0xde, 0x76, 0x1b, 0xc2, 0x6b, 0x94, 0x7b, 0x40, 0x2c, 0x49, 0x97,
- 0x8a, 0xd5, 0x2c, 0xa4, 0xe3, 0xc3, 0xf2, 0x65, 0x31, 0x6a, 0x99, 0x70, 0x36, 0x89, 0xd9, 0xf4,
- 0xd1, 0x3a, 0x9c, 0xdb, 0x21, 0x8e, 0x17, 0xef, 0xac, 0xec, 0x90, 0xc6, 0xae, 0xdc, 0x44, 0xcc,
- 0x19, 0x52, 0x33, 0x99, 0xbd, 0xd1, 0x8d, 0x82, 0xb3, 0xea, 0xa1, 0xf7, 0x60, 0xae, 0xdd, 0xd9,
- 0xf2, 0xdc, 0x68, 0x67, 0x23, 0x88, 0xd9, 0x53, 0xb7, 0x4a, 0x38, 0x27, 0xbc, 0x26, 0x95, 0x23,
- 0x68, 0x2d, 0x07, 0x0f, 0xe7, 0x52, 0x40, 0x1f, 0xc2, 0x85, 0xd4, 0x62, 0x10, 0x3e, 0x5c, 0x53,
- 0xf9, 0x31, 0x30, 0xeb, 0x59, 0x15, 0x84, 0x4f, 0x56, 0x16, 0x08, 0x67, 0x37, 0xf1, 0xd1, 0x0c,
- 0x20, 0x3e, 0xa0, 0x95, 0x35, 0xe9, 0x06, 0x7d, 0x15, 0x26, 0xf4, 0x55, 0x24, 0x0e, 0x98, 0x2b,
- 0xfd, 0x52, 0xf8, 0x0b, 0xd9, 0x48, 0xad, 0x28, 0x1d, 0x86, 0x0d, 0x8a, 0x36, 0x81, 0xec, 0xef,
- 0x43, 0xb7, 0x60, 0xac, 0xe1, 0xb9, 0xc4, 0x8f, 0xab, 0xb5, 0x5e, 0xde, 0xfe, 0x2b, 0x02, 0x47,
- 0x0c, 0x98, 0x08, 0x1a, 0xc8, 0xcb, 0xb0, 0xa2, 0x60, 0xff, 0x66, 0x01, 0xca, 0x7d, 0x22, 0x50,
- 0xa6, 0x74, 0x80, 0xd6, 0x40, 0x3a, 0xc0, 0x25, 0x99, 0x3e, 0x6f, 0x23, 0x75, 0xff, 0x4c, 0xa5,
- 0xc6, 0x4b, 0x6e, 0xa1, 0x69, 0xfc, 0x81, 0xed, 0x26, 0x75, 0x35, 0xe2, 0x50, 0x5f, 0x8b, 0x5e,
- 0xe3, 0xf9, 0x60, 0x78, 0x70, 0x89, 0x3e, 0x57, 0x15, 0x6c, 0xff, 0x7a, 0x01, 0x2e, 0xa8, 0x21,
- 0xfc, 0x9b, 0x3b, 0x70, 0x77, 0xba, 0x07, 0xee, 0x14, 0x14, 0xe9, 0xf6, 0x6d, 0x18, 0xa9, 0x1f,
- 0x44, 0x8d, 0xd8, 0x1b, 0x40, 0x00, 0x7a, 0xc6, 0x8c, 0x7a, 0xa3, 0x8e, 0x69, 0x23, 0xf2, 0xcd,
- 0xff, 0x6b, 0xc1, 0xf4, 0xe6, 0x4a, 0xad, 0x1e, 0x34, 0x76, 0x49, 0xbc, 0xc4, 0xd5, 0x44, 0x58,
- 0xc8, 0x3f, 0xd6, 0x43, 0xca, 0x35, 0x59, 0x12, 0xd3, 0x65, 0x18, 0xda, 0x09, 0xa2, 0x38, 0xfd,
- 0xca, 0x76, 0x23, 0x88, 0x62, 0xcc, 0x20, 0xf6, 0x1f, 0x5a, 0x30, 0xcc, 0x92, 0xbe, 0xf6, 0x4b,
- 0x0e, 0x3c, 0xc8, 0x77, 0xa1, 0xd7, 0x60, 0x84, 0x6c, 0x6f, 0x93, 0x46, 0x2c, 0x66, 0x55, 0xba,
- 0xe9, 0x8d, 0xac, 0xb2, 0x52, 0x7a, 0xe8, 0xb3, 0xc6, 0xf8, 0x5f, 0x2c, 0x90, 0xd1, 0x3d, 0x28,
- 0xc5, 0xee, 0x1e, 0x59, 0x6a, 0x36, 0xc5, 0x3b, 0xc5, 0x43, 0x78, 0x45, 0x6e, 0x4a, 0x02, 0x38,
- 0xa1, 0x65, 0x7f, 0xbd, 0x00, 0x90, 0xb8, 0x1a, 0xf7, 0xfb, 0xc4, 0xe5, 0xae, 0xfc, 0xc7, 0x57,
- 0x32, 0xf2, 0x1f, 0xa3, 0x84, 0x60, 0x46, 0xf6, 0x63, 0x35, 0x4c, 0xc5, 0x81, 0x86, 0x69, 0xe8,
- 0x24, 0xc3, 0xb4, 0x02, 0xb3, 0x89, 0xab, 0xb4, 0x19, 0x37, 0x82, 0x45, 0xa4, 0xdf, 0x4c, 0x03,
- 0x71, 0x37, 0xbe, 0xfd, 0x03, 0x16, 0x08, 0x77, 0x83, 0x01, 0x16, 0xf3, 0xbb, 0x32, 0x55, 0xa9,
- 0x11, 0xc8, 0xf6, 0x72, 0xbe, 0xff, 0x85, 0x08, 0x5f, 0xab, 0x0e, 0x0f, 0x23, 0x68, 0xad, 0x41,
- 0xcb, 0x6e, 0x82, 0x80, 0x56, 0x08, 0x53, 0x32, 0xf4, 0xef, 0xcd, 0x35, 0x80, 0x26, 0xc3, 0xd5,
- 0x52, 0x1f, 0x2a, 0x56, 0x55, 0x51, 0x10, 0xac, 0x61, 0xd9, 0x3f, 0x5a, 0x80, 0x71, 0x19, 0x38,
- 0x95, 0xde, 0xe3, 0xfb, 0xb7, 0x72, 0xa2, 0xac, 0x09, 0x2c, 0x57, 0x28, 0x25, 0xac, 0x82, 0xeb,
- 0xeb, 0xb9, 0x42, 0x25, 0x00, 0x27, 0x38, 0xe8, 0x39, 0x18, 0x8d, 0x3a, 0x5b, 0x0c, 0x3d, 0x65,
- 0x44, 0x5f, 0xe7, 0xc5, 0x58, 0xc2, 0xd1, 0x97, 0x60, 0x86, 0xd7, 0x0b, 0x83, 0xb6, 0xd3, 0xe2,
- 0x1a, 0xa4, 0x61, 0xe5, 0xd5, 0x36, 0xb3, 0x9e, 0x82, 0x1d, 0x1f, 0x96, 0xcf, 0xa7, 0xcb, 0x98,
- 0xee, 0xb1, 0x8b, 0x8a, 0xfd, 0x55, 0x40, 0xdd, 0xb1, 0x60, 0xd1, 0xdb, 0xdc, 0x4c, 0xc2, 0x0d,
- 0x49, 0xb3, 0x97, 0x52, 0x51, 0x77, 0xc2, 0x92, 0x86, 0xac, 0xbc, 0x16, 0x56, 0xf5, 0xe9, 0xce,
- 0x9b, 0x49, 0xbb, 0xe4, 0xa0, 0x1b, 0x30, 0xc2, 0x99, 0xaa, 0x20, 0xdf, 0xe3, 0xcd, 0x4a, 0x73,
- 0xe4, 0x61, 0x81, 0xea, 0x05, 0x5f, 0x16, 0xf5, 0xd1, 0x7b, 0x30, 0xde, 0x0c, 0xee, 0xfb, 0xf7,
- 0x9d, 0xb0, 0xb9, 0x54, 0xab, 0x8a, 0x75, 0x99, 0x29, 0x9b, 0x55, 0x12, 0x34, 0xdd, 0x39, 0x88,
- 0xe9, 0x67, 0x13, 0x10, 0xd6, 0xc9, 0xa1, 0x4d, 0x16, 0xdf, 0x6a, 0xdb, 0x6d, 0xad, 0x3b, 0xed,
- 0x5e, 0x76, 0x6d, 0x2b, 0x12, 0x49, 0xa3, 0x3c, 0x29, 0x82, 0x60, 0x71, 0x00, 0x4e, 0x08, 0xd9,
- 0x5f, 0x3b, 0x07, 0xc6, 0x7e, 0x30, 0xf2, 0x32, 0x58, 0xa7, 0x94, 0x97, 0x01, 0xc3, 0x18, 0xd9,
- 0x6b, 0xc7, 0x07, 0x15, 0x37, 0xec, 0x95, 0xd8, 0x67, 0x55, 0xe0, 0x74, 0xd3, 0x94, 0x10, 0xac,
- 0xe8, 0x64, 0x27, 0xcf, 0x28, 0x7e, 0x8c, 0xc9, 0x33, 0x86, 0xce, 0x30, 0x79, 0xc6, 0x06, 0x8c,
- 0xb6, 0xdc, 0x18, 0x93, 0x76, 0x20, 0x04, 0x8a, 0xcc, 0x95, 0x70, 0x9d, 0xa3, 0x74, 0x87, 0x6e,
- 0x17, 0x00, 0x2c, 0x89, 0xa0, 0xb7, 0xd5, 0x1e, 0x18, 0xc9, 0x97, 0xc7, 0xbb, 0x9f, 0x37, 0x32,
- 0x77, 0x81, 0x48, 0x96, 0x31, 0xfa, 0xb0, 0xc9, 0x32, 0xd6, 0x64, 0x8a, 0x8b, 0xb1, 0x7c, 0x33,
- 0x50, 0x96, 0xc1, 0xa2, 0x4f, 0x62, 0x0b, 0x23, 0x19, 0x48, 0xe9, 0xf4, 0x92, 0x81, 0xfc, 0x80,
- 0x05, 0x17, 0xda, 0x59, 0x79, 0x71, 0x44, 0x8a, 0x8a, 0xd7, 0x06, 0x4e, 0xfc, 0x63, 0x34, 0xc8,
- 0x2e, 0x66, 0x99, 0x68, 0x38, 0xbb, 0x39, 0x3a, 0xd0, 0xe1, 0x56, 0x53, 0xe4, 0xb5, 0x78, 0x26,
- 0x27, 0xab, 0x48, 0x8f, 0x5c, 0x22, 0x9b, 0x19, 0xb9, 0x2c, 0x3e, 0x9d, 0x97, 0xcb, 0x62, 0xe0,
- 0x0c, 0x16, 0x49, 0x3e, 0x91, 0xc9, 0x8f, 0x9c, 0x4f, 0xe4, 0x6d, 0x95, 0x4f, 0xa4, 0x47, 0x14,
- 0x21, 0x9e, 0x2d, 0xa4, 0x6f, 0x16, 0x11, 0x2d, 0x13, 0xc8, 0xf4, 0xe9, 0x64, 0x02, 0x31, 0x98,
- 0x3d, 0x4f, 0x46, 0xf1, 0x42, 0x1f, 0x66, 0x6f, 0xd0, 0xed, 0xcd, 0xee, 0x79, 0xd6, 0x93, 0xd9,
- 0x87, 0xca, 0x7a, 0x72, 0x57, 0xcf, 0x22, 0x82, 0xfa, 0xa4, 0xc9, 0xa0, 0x48, 0x03, 0xe6, 0x0e,
- 0xb9, 0xab, 0x1f, 0x41, 0xe7, 0xf2, 0xe9, 0xaa, 0x93, 0xa6, 0x9b, 0x6e, 0xd6, 0x21, 0xd4, 0x9d,
- 0x93, 0xe4, 0xfc, 0xd9, 0xe4, 0x24, 0xb9, 0x70, 0xea, 0x39, 0x49, 0x1e, 0x3b, 0x83, 0x9c, 0x24,
- 0x8f, 0x7f, 0xac, 0x39, 0x49, 0xe6, 0x1e, 0x41, 0x4e, 0x92, 0x8d, 0x24, 0x27, 0xc9, 0xc5, 0xfc,
- 0x29, 0xc9, 0xb0, 0x7b, 0xcb, 0xc9, 0x44, 0x72, 0x17, 0x4a, 0x6d, 0xe9, 0xb5, 0x2d, 0xc2, 0x1c,
- 0x65, 0x27, 0x43, 0xcc, 0x72, 0xed, 0xe6, 0x53, 0xa2, 0x40, 0x38, 0x21, 0x45, 0xe9, 0x26, 0x99,
- 0x49, 0x9e, 0xe8, 0xa1, 0x7a, 0xcb, 0x52, 0x6a, 0xe4, 0xe7, 0x23, 0xb1, 0xff, 0xbf, 0x02, 0x5c,
- 0xea, 0xbd, 0xae, 0x13, 0x8d, 0x48, 0x2d, 0xd1, 0xe0, 0xa7, 0x34, 0x22, 0xfc, 0x9a, 0x91, 0x60,
- 0x0d, 0x1c, 0xda, 0xe2, 0x3a, 0xcc, 0x2a, 0x83, 0x37, 0xcf, 0x6d, 0x1c, 0x68, 0x49, 0x12, 0x95,
- 0xf3, 0x4d, 0x3d, 0x8d, 0x80, 0xbb, 0xeb, 0xa0, 0x25, 0x98, 0x36, 0x0a, 0xab, 0x15, 0x71, 0x9d,
- 0x50, 0x2a, 0x98, 0xba, 0x09, 0xc6, 0x69, 0x7c, 0xfb, 0x1b, 0x16, 0x3c, 0x9e, 0x13, 0xae, 0x7b,
- 0xe0, 0xc8, 0x0d, 0xdb, 0x30, 0xdd, 0x36, 0xab, 0xf6, 0x09, 0xf0, 0x62, 0x04, 0x05, 0x57, 0x7d,
- 0x4d, 0x01, 0x70, 0x9a, 0xe8, 0xf2, 0xd5, 0xdf, 0xfe, 0xe3, 0x4b, 0x9f, 0xfa, 0xbd, 0x3f, 0xbe,
- 0xf4, 0xa9, 0x3f, 0xf8, 0xe3, 0x4b, 0x9f, 0xfa, 0xbf, 0x8f, 0x2e, 0x59, 0xbf, 0x7d, 0x74, 0xc9,
- 0xfa, 0xbd, 0xa3, 0x4b, 0xd6, 0x1f, 0x1c, 0x5d, 0xb2, 0xfe, 0xe8, 0xe8, 0x92, 0xf5, 0xf5, 0x3f,
- 0xb9, 0xf4, 0xa9, 0x77, 0x0b, 0xfb, 0x2f, 0xff, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x64, 0x22,
- 0x56, 0xbb, 0xf6, 0xe3, 0x00, 0x00,
+ // 12666 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x24, 0x49,
+ 0x56, 0xd8, 0x55, 0xb7, 0xbe, 0xfa, 0xe9, 0x3b, 0x67, 0x66, 0x57, 0xa3, 0xdd, 0x9d, 0x9e, 0xad,
+ 0xbd, 0x9b, 0x9b, 0xfd, 0x92, 0x6e, 0x67, 0x77, 0x6f, 0x97, 0xdb, 0xbb, 0x05, 0x49, 0x2d, 0xcd,
+ 0xf4, 0xce, 0x48, 0xd3, 0x9b, 0xad, 0x99, 0xb9, 0x5b, 0x96, 0xf3, 0x95, 0xba, 0x53, 0xad, 0x5a,
+ 0x95, 0xaa, 0x7a, 0xab, 0xaa, 0x35, 0xa3, 0x0d, 0x88, 0xb0, 0x8f, 0x0f, 0x1b, 0xc3, 0x8f, 0x0b,
+ 0x43, 0xd8, 0x18, 0x08, 0x1c, 0x61, 0xe3, 0x80, 0x33, 0xb6, 0x23, 0x30, 0x18, 0xf0, 0x81, 0x6d,
+ 0x8c, 0xfd, 0x03, 0xfe, 0x60, 0xf0, 0x9f, 0x23, 0x82, 0xb0, 0x0c, 0x82, 0xb0, 0x83, 0x1f, 0x76,
+ 0x38, 0x4c, 0x84, 0x23, 0x90, 0xb1, 0x71, 0xe4, 0x67, 0x65, 0x56, 0x57, 0x75, 0xb7, 0x66, 0x35,
+ 0xda, 0x85, 0xb8, 0x7f, 0xdd, 0xf9, 0x5e, 0xbe, 0xcc, 0xca, 0x8f, 0x97, 0x2f, 0x5f, 0xbe, 0x0f,
+ 0x78, 0x63, 0xf7, 0xf5, 0x68, 0xc1, 0x0d, 0x16, 0x77, 0x3b, 0x5b, 0x24, 0xf4, 0x49, 0x4c, 0xa2,
+ 0xc5, 0x7d, 0xe2, 0x37, 0x83, 0x70, 0x51, 0x00, 0x9c, 0xb6, 0xbb, 0xd8, 0x08, 0x42, 0xb2, 0xb8,
+ 0xff, 0xd2, 0x62, 0x8b, 0xf8, 0x24, 0x74, 0x62, 0xd2, 0x5c, 0x68, 0x87, 0x41, 0x1c, 0x20, 0xc4,
+ 0x71, 0x16, 0x9c, 0xb6, 0xbb, 0x40, 0x71, 0x16, 0xf6, 0x5f, 0x9a, 0x7f, 0xb1, 0xe5, 0xc6, 0x3b,
+ 0x9d, 0xad, 0x85, 0x46, 0xb0, 0xb7, 0xd8, 0x0a, 0x5a, 0xc1, 0x22, 0x43, 0xdd, 0xea, 0x6c, 0xb3,
+ 0x7f, 0xec, 0x0f, 0xfb, 0xc5, 0x49, 0xcc, 0xaf, 0x27, 0xcd, 0x90, 0x07, 0x31, 0xf1, 0x23, 0x37,
+ 0xf0, 0xa3, 0x17, 0x9d, 0xb6, 0x1b, 0x91, 0x70, 0x9f, 0x84, 0x8b, 0xed, 0xdd, 0x16, 0x85, 0x45,
+ 0x26, 0xc2, 0xe2, 0xfe, 0x4b, 0x5b, 0x24, 0x76, 0xba, 0x7a, 0x34, 0xff, 0x4a, 0x42, 0x6e, 0xcf,
+ 0x69, 0xec, 0xb8, 0x3e, 0x09, 0x0f, 0x24, 0x8d, 0xc5, 0x90, 0x44, 0x41, 0x27, 0x6c, 0x90, 0x13,
+ 0xd5, 0x8a, 0x16, 0xf7, 0x48, 0xec, 0x64, 0x7c, 0xfd, 0xfc, 0x62, 0x5e, 0xad, 0xb0, 0xe3, 0xc7,
+ 0xee, 0x5e, 0x77, 0x33, 0x9f, 0xed, 0x57, 0x21, 0x6a, 0xec, 0x90, 0x3d, 0xa7, 0xab, 0xde, 0xcb,
+ 0x79, 0xf5, 0x3a, 0xb1, 0xeb, 0x2d, 0xba, 0x7e, 0x1c, 0xc5, 0x61, 0xba, 0x92, 0xfd, 0x4d, 0x0b,
+ 0x2e, 0x2f, 0xdd, 0xab, 0xaf, 0x7a, 0x4e, 0x14, 0xbb, 0x8d, 0x65, 0x2f, 0x68, 0xec, 0xd6, 0xe3,
+ 0x20, 0x24, 0x77, 0x03, 0xaf, 0xb3, 0x47, 0xea, 0x6c, 0x20, 0xd0, 0x0b, 0x30, 0xb6, 0xcf, 0xfe,
+ 0x57, 0x2b, 0x73, 0xd6, 0x65, 0xeb, 0x6a, 0x69, 0x79, 0xe6, 0x37, 0x0f, 0xcb, 0x9f, 0x38, 0x3a,
+ 0x2c, 0x8f, 0xdd, 0x15, 0xe5, 0x58, 0x61, 0xa0, 0x2b, 0x30, 0xb2, 0x1d, 0x6d, 0x1e, 0xb4, 0xc9,
+ 0x5c, 0x81, 0xe1, 0x4e, 0x09, 0xdc, 0x91, 0xb5, 0x3a, 0x2d, 0xc5, 0x02, 0x8a, 0x16, 0xa1, 0xd4,
+ 0x76, 0xc2, 0xd8, 0x8d, 0xdd, 0xc0, 0x9f, 0x2b, 0x5e, 0xb6, 0xae, 0x0e, 0x2f, 0xcf, 0x0a, 0xd4,
+ 0x52, 0x4d, 0x02, 0x70, 0x82, 0x43, 0xbb, 0x11, 0x12, 0xa7, 0x79, 0xdb, 0xf7, 0x0e, 0xe6, 0x86,
+ 0x2e, 0x5b, 0x57, 0xc7, 0x92, 0x6e, 0x60, 0x51, 0x8e, 0x15, 0x86, 0xfd, 0xe3, 0x05, 0x18, 0x5b,
+ 0xda, 0xde, 0x76, 0x7d, 0x37, 0x3e, 0x40, 0x77, 0x61, 0xc2, 0x0f, 0x9a, 0x44, 0xfe, 0x67, 0x5f,
+ 0x31, 0x7e, 0xed, 0xf2, 0x42, 0xf7, 0xca, 0x5c, 0xd8, 0xd0, 0xf0, 0x96, 0x67, 0x8e, 0x0e, 0xcb,
+ 0x13, 0x7a, 0x09, 0x36, 0xe8, 0x20, 0x0c, 0xe3, 0xed, 0xa0, 0xa9, 0xc8, 0x16, 0x18, 0xd9, 0x72,
+ 0x16, 0xd9, 0x5a, 0x82, 0xb6, 0x3c, 0x7d, 0x74, 0x58, 0x1e, 0xd7, 0x0a, 0xb0, 0x4e, 0x04, 0x6d,
+ 0xc1, 0x34, 0xfd, 0xeb, 0xc7, 0xae, 0xa2, 0x5b, 0x64, 0x74, 0x9f, 0xc9, 0xa3, 0xab, 0xa1, 0x2e,
+ 0x9f, 0x3b, 0x3a, 0x2c, 0x4f, 0xa7, 0x0a, 0x71, 0x9a, 0xa0, 0xfd, 0x01, 0x4c, 0x2d, 0xc5, 0xb1,
+ 0xd3, 0xd8, 0x21, 0x4d, 0x3e, 0x83, 0xe8, 0x15, 0x18, 0xf2, 0x9d, 0x3d, 0x22, 0xe6, 0xf7, 0xb2,
+ 0x18, 0xd8, 0xa1, 0x0d, 0x67, 0x8f, 0x1c, 0x1f, 0x96, 0x67, 0xee, 0xf8, 0xee, 0xfb, 0x1d, 0xb1,
+ 0x2a, 0x68, 0x19, 0x66, 0xd8, 0xe8, 0x1a, 0x40, 0x93, 0xec, 0xbb, 0x0d, 0x52, 0x73, 0xe2, 0x1d,
+ 0x31, 0xdf, 0x48, 0xd4, 0x85, 0x8a, 0x82, 0x60, 0x0d, 0xcb, 0x7e, 0x00, 0xa5, 0xa5, 0xfd, 0xc0,
+ 0x6d, 0xd6, 0x82, 0x66, 0x84, 0x76, 0x61, 0xba, 0x1d, 0x92, 0x6d, 0x12, 0xaa, 0xa2, 0x39, 0xeb,
+ 0x72, 0xf1, 0xea, 0xf8, 0xb5, 0xab, 0x99, 0x1f, 0x6b, 0xa2, 0xae, 0xfa, 0x71, 0x78, 0xb0, 0xfc,
+ 0xb8, 0x68, 0x6f, 0x3a, 0x05, 0xc5, 0x69, 0xca, 0xf6, 0x7f, 0x28, 0xc0, 0x85, 0xa5, 0x0f, 0x3a,
+ 0x21, 0xa9, 0xb8, 0xd1, 0x6e, 0x7a, 0x85, 0x37, 0xdd, 0x68, 0x77, 0x23, 0x19, 0x01, 0xb5, 0xb4,
+ 0x2a, 0xa2, 0x1c, 0x2b, 0x0c, 0xf4, 0x22, 0x8c, 0xd2, 0xdf, 0x77, 0x70, 0x55, 0x7c, 0xf2, 0x39,
+ 0x81, 0x3c, 0x5e, 0x71, 0x62, 0xa7, 0xc2, 0x41, 0x58, 0xe2, 0xa0, 0x75, 0x18, 0x6f, 0xb0, 0x0d,
+ 0xd9, 0x5a, 0x0f, 0x9a, 0x84, 0x4d, 0x66, 0x69, 0xf9, 0x79, 0x8a, 0xbe, 0x92, 0x14, 0x1f, 0x1f,
+ 0x96, 0xe7, 0x78, 0xdf, 0x04, 0x09, 0x0d, 0x86, 0xf5, 0xfa, 0xc8, 0x56, 0xfb, 0x6b, 0x88, 0x51,
+ 0x82, 0x8c, 0xbd, 0x75, 0x55, 0xdb, 0x2a, 0xc3, 0x6c, 0xab, 0x4c, 0x64, 0x6f, 0x13, 0xf4, 0x12,
+ 0x0c, 0xed, 0xba, 0x7e, 0x73, 0x6e, 0x84, 0xd1, 0x7a, 0x8a, 0xce, 0xf9, 0x4d, 0xd7, 0x6f, 0x1e,
+ 0x1f, 0x96, 0x67, 0x8d, 0xee, 0xd0, 0x42, 0xcc, 0x50, 0xed, 0x3f, 0xb5, 0xa0, 0xcc, 0x60, 0x6b,
+ 0xae, 0x47, 0x6a, 0x24, 0x8c, 0xdc, 0x28, 0x26, 0x7e, 0x6c, 0x0c, 0xe8, 0x35, 0x80, 0x88, 0x34,
+ 0x42, 0x12, 0x6b, 0x43, 0xaa, 0x16, 0x46, 0x5d, 0x41, 0xb0, 0x86, 0x45, 0x19, 0x42, 0xb4, 0xe3,
+ 0x84, 0x6c, 0x7d, 0x89, 0x81, 0x55, 0x0c, 0xa1, 0x2e, 0x01, 0x38, 0xc1, 0x31, 0x18, 0x42, 0xb1,
+ 0x1f, 0x43, 0x40, 0x5f, 0x80, 0xe9, 0xa4, 0xb1, 0xa8, 0xed, 0x34, 0xe4, 0x00, 0xb2, 0x2d, 0x53,
+ 0x37, 0x41, 0x38, 0x8d, 0x6b, 0xff, 0x13, 0x4b, 0x2c, 0x1e, 0xfa, 0xd5, 0x1f, 0xf3, 0x6f, 0xb5,
+ 0x7f, 0xc5, 0x82, 0xd1, 0x65, 0xd7, 0x6f, 0xba, 0x7e, 0x0b, 0x7d, 0x05, 0xc6, 0xe8, 0xd9, 0xd4,
+ 0x74, 0x62, 0x47, 0xf0, 0xbd, 0xcf, 0x68, 0x7b, 0x4b, 0x1d, 0x15, 0x0b, 0xed, 0xdd, 0x16, 0x2d,
+ 0x88, 0x16, 0x28, 0x36, 0xdd, 0x6d, 0xb7, 0xb7, 0xde, 0x23, 0x8d, 0x78, 0x9d, 0xc4, 0x4e, 0xf2,
+ 0x39, 0x49, 0x19, 0x56, 0x54, 0xd1, 0x4d, 0x18, 0x89, 0x9d, 0xb0, 0x45, 0x62, 0xc1, 0x00, 0x33,
+ 0x19, 0x15, 0xaf, 0x89, 0xe9, 0x8e, 0x24, 0x7e, 0x83, 0x24, 0xc7, 0xc2, 0x26, 0xab, 0x8a, 0x05,
+ 0x09, 0xfb, 0x6f, 0x8f, 0xc0, 0xc5, 0x95, 0x7a, 0x35, 0x67, 0x5d, 0x5d, 0x81, 0x91, 0x66, 0xe8,
+ 0xee, 0x93, 0x50, 0x8c, 0xb3, 0xa2, 0x52, 0x61, 0xa5, 0x58, 0x40, 0xd1, 0xeb, 0x30, 0xc1, 0x0f,
+ 0xa4, 0x1b, 0x8e, 0xdf, 0xf4, 0xe4, 0x10, 0x9f, 0x17, 0xd8, 0x13, 0x77, 0x35, 0x18, 0x36, 0x30,
+ 0x4f, 0xb8, 0xa8, 0xae, 0xa4, 0x36, 0x63, 0xde, 0x61, 0xf7, 0x83, 0x16, 0xcc, 0xf0, 0x66, 0x96,
+ 0xe2, 0x38, 0x74, 0xb7, 0x3a, 0x31, 0x89, 0xe6, 0x86, 0x19, 0xa7, 0x5b, 0xc9, 0x1a, 0xad, 0xdc,
+ 0x11, 0x58, 0xb8, 0x9b, 0xa2, 0xc2, 0x99, 0xe0, 0x9c, 0x68, 0x77, 0x26, 0x0d, 0xc6, 0x5d, 0xcd,
+ 0xa2, 0xef, 0xb5, 0x60, 0xbe, 0x11, 0xf8, 0x71, 0x18, 0x78, 0x1e, 0x09, 0x6b, 0x9d, 0x2d, 0xcf,
+ 0x8d, 0x76, 0xf8, 0x3a, 0xc5, 0x64, 0x9b, 0x71, 0x82, 0x9c, 0x39, 0x54, 0x48, 0x62, 0x0e, 0x2f,
+ 0x1d, 0x1d, 0x96, 0xe7, 0x57, 0x72, 0x49, 0xe1, 0x1e, 0xcd, 0xa0, 0x5d, 0x40, 0xf4, 0x28, 0xad,
+ 0xc7, 0x4e, 0x8b, 0x24, 0x8d, 0x8f, 0x0e, 0xde, 0xf8, 0x63, 0x47, 0x87, 0x65, 0xb4, 0xd1, 0x45,
+ 0x02, 0x67, 0x90, 0x45, 0xef, 0xc3, 0x79, 0x5a, 0xda, 0xf5, 0xad, 0x63, 0x83, 0x37, 0x37, 0x77,
+ 0x74, 0x58, 0x3e, 0xbf, 0x91, 0x41, 0x04, 0x67, 0x92, 0x9e, 0x5f, 0x81, 0x0b, 0x99, 0x53, 0x85,
+ 0x66, 0xa0, 0xb8, 0x4b, 0xb8, 0x08, 0x52, 0xc2, 0xf4, 0x27, 0x3a, 0x0f, 0xc3, 0xfb, 0x8e, 0xd7,
+ 0x11, 0xab, 0x14, 0xf3, 0x3f, 0x9f, 0x2b, 0xbc, 0x6e, 0xd9, 0x0d, 0x98, 0x58, 0x71, 0xda, 0xce,
+ 0x96, 0xeb, 0xb9, 0xb1, 0x4b, 0x22, 0xf4, 0x69, 0x28, 0x3a, 0xcd, 0x26, 0x3b, 0x22, 0x4b, 0xcb,
+ 0x17, 0x8e, 0x0e, 0xcb, 0xc5, 0xa5, 0x26, 0xe5, 0xd5, 0xa0, 0xb0, 0x0e, 0x30, 0xc5, 0x40, 0xcf,
+ 0xc1, 0x50, 0x33, 0x0c, 0xda, 0x73, 0x05, 0x86, 0x49, 0x87, 0x6a, 0xa8, 0x12, 0x06, 0xed, 0x14,
+ 0x2a, 0xc3, 0xb1, 0x7f, 0xbd, 0x00, 0x4f, 0xae, 0x90, 0xf6, 0xce, 0x5a, 0x3d, 0x67, 0xd3, 0x5d,
+ 0x85, 0xb1, 0xbd, 0xc0, 0x77, 0xe3, 0x20, 0x8c, 0x44, 0xd3, 0xec, 0x34, 0x59, 0x17, 0x65, 0x58,
+ 0x41, 0xd1, 0x65, 0x18, 0x6a, 0x27, 0x92, 0xc0, 0x84, 0x94, 0x22, 0x98, 0x0c, 0xc0, 0x20, 0x14,
+ 0xa3, 0x13, 0x91, 0x50, 0x9c, 0x82, 0x0a, 0xe3, 0x4e, 0x44, 0x42, 0xcc, 0x20, 0x09, 0x3b, 0xa5,
+ 0x8c, 0x56, 0x6c, 0xab, 0x14, 0x3b, 0xa5, 0x10, 0xac, 0x61, 0xa1, 0x1a, 0x94, 0x22, 0x35, 0xa9,
+ 0xc3, 0x83, 0x4f, 0xea, 0x24, 0xe3, 0xb7, 0x6a, 0x26, 0x13, 0x22, 0x06, 0x1b, 0x18, 0xe9, 0xcb,
+ 0x6f, 0x7f, 0xb5, 0x00, 0x88, 0x0f, 0xe1, 0x5f, 0xb2, 0x81, 0xbb, 0xd3, 0x3d, 0x70, 0x99, 0x92,
+ 0xd7, 0xad, 0xa0, 0xe1, 0x78, 0x69, 0x16, 0x7e, 0x5a, 0xa3, 0xf7, 0x63, 0x16, 0xa0, 0x15, 0xd7,
+ 0x6f, 0x92, 0xf0, 0x0c, 0xae, 0x1d, 0x27, 0x3b, 0x48, 0x6f, 0xc1, 0xd4, 0x8a, 0xe7, 0x12, 0x3f,
+ 0xae, 0xd6, 0x56, 0x02, 0x7f, 0xdb, 0x6d, 0xa1, 0xcf, 0xc1, 0x14, 0xbd, 0x85, 0x05, 0x9d, 0xb8,
+ 0x4e, 0x1a, 0x81, 0xcf, 0x04, 0x56, 0x7a, 0x77, 0x41, 0x47, 0x87, 0xe5, 0xa9, 0x4d, 0x03, 0x82,
+ 0x53, 0x98, 0xf6, 0xef, 0xd3, 0x0f, 0x0d, 0xf6, 0xda, 0x81, 0x4f, 0xfc, 0x78, 0x25, 0xf0, 0x9b,
+ 0xfc, 0x62, 0xf3, 0x39, 0x18, 0x8a, 0x69, 0xc7, 0xf9, 0x47, 0x5e, 0x91, 0x53, 0x4b, 0xbb, 0x7b,
+ 0x7c, 0x58, 0x7e, 0xac, 0xbb, 0x06, 0xfb, 0x20, 0x56, 0x07, 0x7d, 0x1b, 0x8c, 0x44, 0xb1, 0x13,
+ 0x77, 0x22, 0xf1, 0xd9, 0x4f, 0xcb, 0xcf, 0xae, 0xb3, 0xd2, 0xe3, 0xc3, 0xf2, 0xb4, 0xaa, 0xc6,
+ 0x8b, 0xb0, 0xa8, 0x80, 0x9e, 0x85, 0xd1, 0x3d, 0x12, 0x45, 0x4e, 0x4b, 0xca, 0xa4, 0xd3, 0xa2,
+ 0xee, 0xe8, 0x3a, 0x2f, 0xc6, 0x12, 0x8e, 0x9e, 0x81, 0x61, 0x12, 0x86, 0x41, 0x28, 0x56, 0xd5,
+ 0xa4, 0x40, 0x1c, 0x5e, 0xa5, 0x85, 0x98, 0xc3, 0xec, 0xff, 0x68, 0xc1, 0xb4, 0xea, 0x2b, 0x6f,
+ 0xeb, 0x0c, 0x84, 0x8f, 0x77, 0x00, 0x1a, 0xf2, 0x03, 0x23, 0xc6, 0xef, 0xc6, 0xaf, 0x5d, 0xc9,
+ 0x3c, 0x52, 0xbb, 0x86, 0x31, 0xa1, 0xac, 0x8a, 0x22, 0xac, 0x51, 0xb3, 0xff, 0xb5, 0x05, 0xe7,
+ 0x52, 0x5f, 0x74, 0xcb, 0x8d, 0x62, 0xf4, 0x6e, 0xd7, 0x57, 0x2d, 0x0c, 0xf6, 0x55, 0xb4, 0x36,
+ 0xfb, 0x26, 0xb5, 0xe6, 0x64, 0x89, 0xf6, 0x45, 0x37, 0x60, 0xd8, 0x8d, 0xc9, 0x9e, 0xfc, 0x98,
+ 0x67, 0x7a, 0x7e, 0x0c, 0xef, 0x55, 0x32, 0x23, 0x55, 0x5a, 0x13, 0x73, 0x02, 0xf6, 0x8f, 0x14,
+ 0xa1, 0xc4, 0x97, 0xed, 0xba, 0xd3, 0x3e, 0x83, 0xb9, 0xa8, 0xc2, 0x10, 0xa3, 0xce, 0x3b, 0xfe,
+ 0xe9, 0xec, 0x8e, 0x8b, 0xee, 0x2c, 0xd0, 0x9b, 0x05, 0x17, 0x5e, 0x14, 0x33, 0xa3, 0x45, 0x98,
+ 0x91, 0x40, 0x0e, 0xc0, 0x96, 0xeb, 0x3b, 0xe1, 0x01, 0x2d, 0x9b, 0x2b, 0x32, 0x82, 0x2f, 0xf6,
+ 0x26, 0xb8, 0xac, 0xf0, 0x39, 0x59, 0xd5, 0xd7, 0x04, 0x80, 0x35, 0xa2, 0xf3, 0xaf, 0x41, 0x49,
+ 0x21, 0x9f, 0xe4, 0x54, 0x9e, 0xff, 0x02, 0x4c, 0xa7, 0xda, 0xea, 0x57, 0x7d, 0x42, 0x3f, 0xd4,
+ 0xbf, 0xc1, 0xb8, 0x80, 0xe8, 0xf5, 0xaa, 0xbf, 0x2f, 0xd8, 0xdd, 0x07, 0x70, 0xde, 0xcb, 0xe0,
+ 0xb2, 0x62, 0xaa, 0x06, 0xe7, 0xca, 0x4f, 0x8a, 0xcf, 0x3e, 0x9f, 0x05, 0xc5, 0x99, 0x6d, 0xd0,
+ 0x83, 0x2a, 0x68, 0xd3, 0x35, 0xef, 0x78, 0xac, 0xbf, 0xe2, 0xbe, 0x78, 0x5b, 0x94, 0x61, 0x05,
+ 0xa5, 0x2c, 0xec, 0xbc, 0xea, 0xfc, 0x4d, 0x72, 0x50, 0x27, 0x1e, 0x69, 0xc4, 0x41, 0xf8, 0x91,
+ 0x76, 0xff, 0x29, 0x3e, 0xfa, 0x9c, 0x03, 0x8e, 0x0b, 0x02, 0xc5, 0x9b, 0xe4, 0x80, 0x4f, 0x85,
+ 0xfe, 0x75, 0xc5, 0x9e, 0x5f, 0xf7, 0xf3, 0x16, 0x4c, 0xaa, 0xaf, 0x3b, 0x83, 0xad, 0xbe, 0x6c,
+ 0x6e, 0xf5, 0xa7, 0x7a, 0x2e, 0xf0, 0x9c, 0x4d, 0xfe, 0x17, 0x8c, 0x49, 0x09, 0x9c, 0x5a, 0x18,
+ 0xd0, 0xa1, 0xa1, 0xa7, 0xca, 0x47, 0x39, 0x21, 0x83, 0x7c, 0xd7, 0x4d, 0x72, 0xb0, 0x19, 0x50,
+ 0x01, 0x27, 0xfb, 0xbb, 0x8c, 0x59, 0x1b, 0xea, 0x39, 0x6b, 0xbf, 0x58, 0x80, 0x0b, 0x6a, 0x04,
+ 0x0c, 0x11, 0xe2, 0x2f, 0xfb, 0x18, 0xbc, 0x04, 0xe3, 0x4d, 0xb2, 0xed, 0x74, 0xbc, 0x58, 0xa9,
+ 0x8e, 0x86, 0xb9, 0xfa, 0xb0, 0x92, 0x14, 0x63, 0x1d, 0xe7, 0x04, 0xc3, 0xf6, 0xd3, 0xe3, 0xec,
+ 0x74, 0x88, 0x1d, 0xba, 0x82, 0xa9, 0x7c, 0xa9, 0x29, 0x00, 0x27, 0x74, 0x05, 0xa0, 0x50, 0xf6,
+ 0x3d, 0x03, 0xc3, 0xee, 0x1e, 0x95, 0x16, 0x0a, 0xa6, 0x10, 0x50, 0xa5, 0x85, 0x98, 0xc3, 0xd0,
+ 0xa7, 0x60, 0xb4, 0x11, 0xec, 0xed, 0x39, 0x7e, 0x93, 0x31, 0xed, 0xd2, 0xf2, 0x38, 0x15, 0x28,
+ 0x56, 0x78, 0x11, 0x96, 0x30, 0xf4, 0x24, 0x0c, 0x39, 0x61, 0x2b, 0x9a, 0x1b, 0x62, 0x38, 0x63,
+ 0xb4, 0xa5, 0xa5, 0xb0, 0x15, 0x61, 0x56, 0x4a, 0x25, 0xd9, 0xfb, 0x41, 0xb8, 0xeb, 0xfa, 0xad,
+ 0x8a, 0x1b, 0x32, 0xb1, 0x54, 0x93, 0x64, 0xef, 0x29, 0x08, 0xd6, 0xb0, 0xd0, 0x1a, 0x0c, 0xb7,
+ 0x83, 0x30, 0x8e, 0xe6, 0x46, 0xd8, 0x70, 0x3f, 0x9d, 0xb3, 0x95, 0xf8, 0xd7, 0xd6, 0x82, 0x30,
+ 0x4e, 0x3e, 0x80, 0xfe, 0x8b, 0x30, 0xaf, 0x8e, 0xbe, 0x0d, 0x8a, 0xc4, 0xdf, 0x9f, 0x1b, 0x65,
+ 0x54, 0xe6, 0xb3, 0xa8, 0xac, 0xfa, 0xfb, 0x77, 0x9d, 0x30, 0xe1, 0x33, 0xab, 0xfe, 0x3e, 0xa6,
+ 0x75, 0xd0, 0x97, 0xa0, 0x24, 0x1f, 0x0f, 0x22, 0x71, 0xb5, 0xcc, 0x5c, 0x62, 0x58, 0x20, 0x61,
+ 0xf2, 0x7e, 0xc7, 0x0d, 0xc9, 0x1e, 0xf1, 0xe3, 0x28, 0x51, 0xff, 0x48, 0x68, 0x84, 0x13, 0x6a,
+ 0xe8, 0x4b, 0x52, 0x9f, 0xb1, 0x1e, 0x74, 0xfc, 0x38, 0x9a, 0x2b, 0xb1, 0xee, 0x65, 0x6a, 0x9a,
+ 0xef, 0x26, 0x78, 0x69, 0x85, 0x07, 0xaf, 0x8c, 0x0d, 0x52, 0x08, 0xc3, 0xa4, 0xe7, 0xee, 0x13,
+ 0x9f, 0x44, 0x51, 0x2d, 0x0c, 0xb6, 0xc8, 0x1c, 0xb0, 0x9e, 0x5f, 0xcc, 0x56, 0xc0, 0x06, 0x5b,
+ 0x64, 0x79, 0xf6, 0xe8, 0xb0, 0x3c, 0x79, 0x4b, 0xaf, 0x83, 0x4d, 0x12, 0xe8, 0x0e, 0x4c, 0x51,
+ 0x11, 0xda, 0x4d, 0x88, 0x8e, 0xf7, 0x23, 0xca, 0xe4, 0x67, 0x6c, 0x54, 0xc2, 0x29, 0x22, 0xe8,
+ 0x2d, 0x28, 0x79, 0xee, 0x36, 0x69, 0x1c, 0x34, 0x3c, 0x32, 0x37, 0xc1, 0x28, 0x66, 0x6e, 0xab,
+ 0x5b, 0x12, 0x89, 0x5f, 0x51, 0xd4, 0x5f, 0x9c, 0x54, 0x47, 0x77, 0xe1, 0xb1, 0x98, 0x84, 0x7b,
+ 0xae, 0xef, 0xd0, 0xed, 0x20, 0x24, 0x5e, 0xa6, 0xc6, 0x9e, 0x64, 0xeb, 0xed, 0x92, 0x18, 0xba,
+ 0xc7, 0x36, 0x33, 0xb1, 0x70, 0x4e, 0x6d, 0x74, 0x1b, 0xa6, 0xd9, 0x4e, 0xa8, 0x75, 0x3c, 0xaf,
+ 0x16, 0x78, 0x6e, 0xe3, 0x60, 0x6e, 0x8a, 0x11, 0xfc, 0x94, 0xd4, 0x53, 0x57, 0x4d, 0x30, 0xbd,
+ 0x93, 0x27, 0xff, 0x70, 0xba, 0x36, 0xda, 0x62, 0x7a, 0xcb, 0x4e, 0xe8, 0xc6, 0x07, 0x74, 0xfd,
+ 0x92, 0x07, 0xf1, 0xdc, 0x74, 0xcf, 0x1b, 0xae, 0x8e, 0xaa, 0x94, 0x9b, 0x7a, 0x21, 0x4e, 0x13,
+ 0xa4, 0x5b, 0x3b, 0x8a, 0x9b, 0xae, 0x3f, 0x37, 0xc3, 0x38, 0x86, 0xda, 0x19, 0x75, 0x5a, 0x88,
+ 0x39, 0x8c, 0xe9, 0x2c, 0xe9, 0x8f, 0xdb, 0x94, 0x83, 0xce, 0x32, 0xc4, 0x44, 0x67, 0x29, 0x01,
+ 0x38, 0xc1, 0xa1, 0xc7, 0x72, 0x1c, 0x1f, 0xcc, 0x21, 0x86, 0xaa, 0xb6, 0xcb, 0xe6, 0xe6, 0x97,
+ 0x30, 0x2d, 0x47, 0xb7, 0x60, 0x94, 0xf8, 0xfb, 0x6b, 0x61, 0xb0, 0x37, 0x77, 0x2e, 0x7f, 0xcf,
+ 0xae, 0x72, 0x14, 0xce, 0xd0, 0x93, 0x2b, 0x8a, 0x28, 0xc6, 0x92, 0x04, 0x7a, 0x00, 0x73, 0x19,
+ 0x33, 0xc2, 0x27, 0xe0, 0x3c, 0x9b, 0x80, 0xcf, 0x8b, 0xba, 0x73, 0x9b, 0x39, 0x78, 0xc7, 0x3d,
+ 0x60, 0x38, 0x97, 0x3a, 0xfa, 0x2e, 0x98, 0xe4, 0x1b, 0x8a, 0x3f, 0x78, 0x44, 0x73, 0x17, 0xd8,
+ 0xd7, 0x5c, 0xce, 0xdf, 0x9c, 0x1c, 0x71, 0xf9, 0x82, 0xe8, 0xd0, 0xa4, 0x5e, 0x1a, 0x61, 0x93,
+ 0x9a, 0xbd, 0x05, 0x53, 0x8a, 0x6f, 0xb1, 0xa5, 0x83, 0xca, 0x30, 0x4c, 0x19, 0xb2, 0xd4, 0x29,
+ 0x94, 0xe8, 0x4c, 0x31, 0x45, 0x35, 0xe6, 0xe5, 0x6c, 0xa6, 0xdc, 0x0f, 0xc8, 0xf2, 0x41, 0x4c,
+ 0xf8, 0xbd, 0xb0, 0xa8, 0xcd, 0x94, 0x04, 0xe0, 0x04, 0xc7, 0xfe, 0x7f, 0x5c, 0xee, 0x49, 0x98,
+ 0xe3, 0x00, 0xc7, 0xc1, 0x0b, 0x30, 0xb6, 0x13, 0x44, 0x31, 0xc5, 0x66, 0x6d, 0x0c, 0x27, 0x92,
+ 0xce, 0x0d, 0x51, 0x8e, 0x15, 0x06, 0x7a, 0x03, 0x26, 0x1b, 0x7a, 0x03, 0xe2, 0x2c, 0x53, 0x43,
+ 0x60, 0xb4, 0x8e, 0x4d, 0x5c, 0xf4, 0x3a, 0x8c, 0xb1, 0xe7, 0xca, 0x46, 0xe0, 0x89, 0x1b, 0xa8,
+ 0x3c, 0x90, 0xc7, 0x6a, 0xa2, 0xfc, 0x58, 0xfb, 0x8d, 0x15, 0x36, 0xba, 0x02, 0x23, 0xb4, 0x0b,
+ 0xd5, 0x9a, 0x38, 0x45, 0x94, 0x56, 0xe0, 0x06, 0x2b, 0xc5, 0x02, 0x6a, 0xff, 0x9d, 0x82, 0x36,
+ 0xca, 0xf4, 0x4e, 0x45, 0x50, 0x0d, 0x46, 0xef, 0x3b, 0x6e, 0xec, 0xfa, 0x2d, 0x21, 0x2e, 0x3c,
+ 0xdb, 0xf3, 0x48, 0x61, 0x95, 0xee, 0xf1, 0x0a, 0xfc, 0xd0, 0x13, 0x7f, 0xb0, 0x24, 0x43, 0x29,
+ 0x86, 0x1d, 0xdf, 0xa7, 0x14, 0x0b, 0x83, 0x52, 0xc4, 0xbc, 0x02, 0xa7, 0x28, 0xfe, 0x60, 0x49,
+ 0x06, 0xbd, 0x0b, 0x20, 0x97, 0x25, 0x69, 0x8a, 0x67, 0xc2, 0x17, 0xfa, 0x13, 0xdd, 0x54, 0x75,
+ 0x96, 0xa7, 0xe8, 0x91, 0x9a, 0xfc, 0xc7, 0x1a, 0x3d, 0x3b, 0x66, 0x62, 0x55, 0x77, 0x67, 0xd0,
+ 0x77, 0x52, 0x4e, 0xe0, 0x84, 0x31, 0x69, 0x2e, 0xc5, 0x62, 0x70, 0x9e, 0x1b, 0x4c, 0x2a, 0xde,
+ 0x74, 0xf7, 0x88, 0xce, 0x35, 0x04, 0x11, 0x9c, 0xd0, 0xb3, 0x7f, 0xb9, 0x08, 0x73, 0x79, 0xdd,
+ 0xa5, 0x8b, 0x8e, 0x3c, 0x70, 0xe3, 0x15, 0x2a, 0x0d, 0x59, 0xe6, 0xa2, 0x5b, 0x15, 0xe5, 0x58,
+ 0x61, 0xd0, 0xd9, 0x8f, 0xdc, 0x96, 0xbc, 0xd4, 0x0c, 0x27, 0xb3, 0x5f, 0x67, 0xa5, 0x58, 0x40,
+ 0x29, 0x5e, 0x48, 0x9c, 0x48, 0xbc, 0x43, 0x6b, 0xab, 0x04, 0xb3, 0x52, 0x2c, 0xa0, 0xba, 0xc6,
+ 0x64, 0xa8, 0x8f, 0xc6, 0xc4, 0x18, 0xa2, 0xe1, 0xd3, 0x1d, 0x22, 0xf4, 0x65, 0x80, 0x6d, 0xd7,
+ 0x77, 0xa3, 0x1d, 0x46, 0x7d, 0xe4, 0xc4, 0xd4, 0x95, 0x2c, 0xb5, 0xa6, 0xa8, 0x60, 0x8d, 0x22,
+ 0x7a, 0x15, 0xc6, 0xd5, 0x06, 0xac, 0x56, 0x98, 0x52, 0x5e, 0x7b, 0xe4, 0x4c, 0xb8, 0x51, 0x05,
+ 0xeb, 0x78, 0xf6, 0x7b, 0xe9, 0xf5, 0x22, 0x76, 0x80, 0x36, 0xbe, 0xd6, 0xa0, 0xe3, 0x5b, 0xe8,
+ 0x3d, 0xbe, 0xf6, 0x6f, 0x14, 0x61, 0xda, 0x68, 0xac, 0x13, 0x0d, 0xc0, 0xb3, 0xae, 0xd3, 0x73,
+ 0xce, 0x89, 0x89, 0xd8, 0x7f, 0x76, 0xff, 0xad, 0xa2, 0x9f, 0x85, 0x74, 0x07, 0xf0, 0xfa, 0xe8,
+ 0xcb, 0x50, 0xf2, 0x9c, 0x88, 0x69, 0x5f, 0x88, 0xd8, 0x77, 0x83, 0x10, 0x4b, 0xee, 0x11, 0x4e,
+ 0x14, 0x6b, 0x47, 0x0d, 0xa7, 0x9d, 0x90, 0xa4, 0x07, 0x32, 0x95, 0x7d, 0xa4, 0xa1, 0x83, 0xea,
+ 0x04, 0x15, 0x90, 0x0e, 0x30, 0x87, 0xa1, 0xd7, 0x61, 0x22, 0x24, 0x6c, 0x55, 0xac, 0x50, 0x51,
+ 0x8e, 0x2d, 0xb3, 0xe1, 0x44, 0xe6, 0xc3, 0x1a, 0x0c, 0x1b, 0x98, 0x89, 0x28, 0x3f, 0xd2, 0x43,
+ 0x94, 0x7f, 0x16, 0x46, 0xd9, 0x0f, 0xb5, 0x02, 0xd4, 0x6c, 0x54, 0x79, 0x31, 0x96, 0xf0, 0xf4,
+ 0x82, 0x19, 0x1b, 0x70, 0xc1, 0x3c, 0x07, 0x53, 0x15, 0x87, 0xec, 0x05, 0xfe, 0xaa, 0xdf, 0x6c,
+ 0x07, 0xae, 0x1f, 0xa3, 0x39, 0x18, 0x62, 0xa7, 0x03, 0xdf, 0xdb, 0x43, 0x94, 0x02, 0x1e, 0xa2,
+ 0x82, 0xb9, 0xfd, 0xbb, 0x05, 0x98, 0xac, 0x10, 0x8f, 0xc4, 0x84, 0x5f, 0x65, 0x22, 0xb4, 0x06,
+ 0xa8, 0x15, 0x3a, 0x0d, 0x52, 0x23, 0xa1, 0x1b, 0x34, 0x75, 0x6d, 0x6c, 0x91, 0x3f, 0x0e, 0x5d,
+ 0xef, 0x82, 0xe2, 0x8c, 0x1a, 0xe8, 0x1d, 0x98, 0x6c, 0x87, 0xc4, 0x50, 0x22, 0x5a, 0x79, 0xd2,
+ 0x48, 0x4d, 0x47, 0xe4, 0x82, 0xb0, 0x51, 0x84, 0x4d, 0x52, 0xe8, 0x3b, 0x60, 0x26, 0x08, 0xdb,
+ 0x3b, 0x8e, 0x5f, 0x21, 0x6d, 0xe2, 0x37, 0xa9, 0xa4, 0x2f, 0x54, 0x10, 0xe7, 0x8f, 0x0e, 0xcb,
+ 0x33, 0xb7, 0x53, 0x30, 0xdc, 0x85, 0x8d, 0xde, 0x81, 0xd9, 0x76, 0x18, 0xb4, 0x9d, 0x16, 0x5b,
+ 0x28, 0x42, 0xa0, 0xe1, 0xdc, 0xe7, 0x85, 0xa3, 0xc3, 0xf2, 0x6c, 0x2d, 0x0d, 0x3c, 0x3e, 0x2c,
+ 0x9f, 0x63, 0x03, 0x45, 0x4b, 0x12, 0x20, 0xee, 0x26, 0x63, 0xb7, 0xe0, 0x42, 0x25, 0xb8, 0xef,
+ 0xdf, 0x77, 0xc2, 0xe6, 0x52, 0xad, 0xaa, 0xe9, 0x0e, 0x36, 0xe4, 0xdd, 0x95, 0x1b, 0x63, 0x64,
+ 0x9e, 0x53, 0x5a, 0x4d, 0x2e, 0xbf, 0xac, 0xb9, 0x1e, 0xc9, 0xd1, 0x51, 0xfc, 0xbd, 0x82, 0xd1,
+ 0x52, 0x82, 0xaf, 0x1e, 0x3e, 0xac, 0xdc, 0x87, 0x8f, 0xb7, 0x61, 0x6c, 0xdb, 0x25, 0x5e, 0x13,
+ 0x93, 0x6d, 0x31, 0x33, 0x9f, 0xce, 0x7f, 0x5f, 0x5e, 0xa3, 0x98, 0x52, 0x27, 0xc5, 0x6f, 0xbe,
+ 0x6b, 0xa2, 0x32, 0x56, 0x64, 0xd0, 0x2e, 0xcc, 0xc8, 0xab, 0x95, 0x84, 0x8a, 0x4d, 0xfc, 0x6c,
+ 0xaf, 0xfb, 0x9a, 0x49, 0x9c, 0x4d, 0x20, 0x4e, 0x91, 0xc1, 0x5d, 0x84, 0xe9, 0x55, 0x77, 0x8f,
+ 0x1e, 0x57, 0x43, 0x6c, 0x49, 0xb3, 0xab, 0x2e, 0xbb, 0xb5, 0xb3, 0x52, 0xfb, 0x27, 0x2d, 0x78,
+ 0xbc, 0x6b, 0x64, 0x84, 0xf6, 0xe2, 0x94, 0x67, 0x21, 0xad, 0x4d, 0x28, 0xf4, 0xd7, 0x26, 0xd8,
+ 0xff, 0xd4, 0x82, 0xf3, 0xab, 0x7b, 0xed, 0xf8, 0xa0, 0xe2, 0x9a, 0x8f, 0x33, 0xaf, 0xc1, 0xc8,
+ 0x1e, 0x69, 0xba, 0x9d, 0x3d, 0x31, 0x73, 0x65, 0xc9, 0xd2, 0xd7, 0x59, 0xe9, 0xf1, 0x61, 0x79,
+ 0xb2, 0x1e, 0x07, 0xa1, 0xd3, 0x22, 0xbc, 0x00, 0x0b, 0x74, 0x76, 0x30, 0xba, 0x1f, 0x90, 0x5b,
+ 0xee, 0x9e, 0x2b, 0xed, 0x05, 0x7a, 0x6a, 0xd4, 0x16, 0xe4, 0x80, 0x2e, 0xbc, 0xdd, 0x71, 0xfc,
+ 0xd8, 0x8d, 0x0f, 0xc4, 0xbb, 0x93, 0x24, 0x82, 0x13, 0x7a, 0xf6, 0x37, 0x2d, 0x98, 0x96, 0xbc,
+ 0x64, 0xa9, 0xd9, 0x0c, 0x49, 0x14, 0xa1, 0x79, 0x28, 0xb8, 0x6d, 0xd1, 0x4b, 0x10, 0xbd, 0x2c,
+ 0x54, 0x6b, 0xb8, 0xe0, 0xb6, 0x51, 0x0d, 0x4a, 0xdc, 0xec, 0x20, 0x59, 0x5c, 0x03, 0x19, 0x2f,
+ 0xb0, 0x1e, 0x6c, 0xca, 0x9a, 0x38, 0x21, 0x22, 0xa5, 0x62, 0x76, 0x0e, 0x15, 0xcd, 0x47, 0xab,
+ 0x1b, 0xa2, 0x1c, 0x2b, 0x0c, 0x74, 0x15, 0xc6, 0xfc, 0xa0, 0xc9, 0xad, 0x40, 0xf8, 0x9e, 0x66,
+ 0x4b, 0x76, 0x43, 0x94, 0x61, 0x05, 0xb5, 0x7f, 0xd8, 0x82, 0x09, 0xf9, 0x65, 0x03, 0x0a, 0xe8,
+ 0x74, 0x6b, 0x25, 0xc2, 0x79, 0xb2, 0xb5, 0xa8, 0x80, 0xcd, 0x20, 0x86, 0x5c, 0x5d, 0x3c, 0x89,
+ 0x5c, 0x6d, 0xff, 0x44, 0x01, 0xa6, 0x64, 0x77, 0xea, 0x9d, 0xad, 0x88, 0xc4, 0x68, 0x13, 0x4a,
+ 0x0e, 0x1f, 0x72, 0x22, 0x57, 0xec, 0x33, 0xd9, 0x17, 0x3a, 0x63, 0x7e, 0x12, 0x51, 0x67, 0x49,
+ 0xd6, 0xc6, 0x09, 0x21, 0xe4, 0xc1, 0xac, 0x1f, 0xc4, 0xec, 0xd8, 0x53, 0xf0, 0x5e, 0x0f, 0x23,
+ 0x69, 0xea, 0x17, 0x05, 0xf5, 0xd9, 0x8d, 0x34, 0x15, 0xdc, 0x4d, 0x18, 0xad, 0x4a, 0x25, 0x52,
+ 0x31, 0xff, 0x0a, 0xa7, 0xcf, 0x42, 0xb6, 0x0e, 0xc9, 0xfe, 0x35, 0x0b, 0x4a, 0x12, 0xed, 0x2c,
+ 0xde, 0xc0, 0xd6, 0x61, 0x34, 0x62, 0x93, 0x20, 0x87, 0xc6, 0xee, 0xd5, 0x71, 0x3e, 0x5f, 0xc9,
+ 0x69, 0xce, 0xff, 0x47, 0x58, 0xd2, 0x60, 0x5a, 0x70, 0xd5, 0xfd, 0x8f, 0x89, 0x16, 0x5c, 0xf5,
+ 0x27, 0xe7, 0x84, 0xf9, 0x6f, 0xac, 0xcf, 0x9a, 0xaa, 0x80, 0x0a, 0x9d, 0xed, 0x90, 0x6c, 0xbb,
+ 0x0f, 0xd2, 0x42, 0x67, 0x8d, 0x95, 0x62, 0x01, 0x45, 0xef, 0xc2, 0x44, 0x43, 0x2a, 0x8f, 0x13,
+ 0x36, 0x70, 0xa5, 0xa7, 0x2a, 0x5e, 0xbd, 0xda, 0x70, 0x0b, 0xd1, 0x15, 0xad, 0x3e, 0x36, 0xa8,
+ 0x99, 0x96, 0x09, 0xc5, 0x7e, 0x96, 0x09, 0x09, 0xdd, 0xdc, 0xb7, 0x75, 0xfb, 0xa7, 0x2c, 0x18,
+ 0xe1, 0x2a, 0xc8, 0xc1, 0x74, 0xb6, 0xda, 0x23, 0x56, 0x32, 0x76, 0x77, 0x69, 0xa1, 0x78, 0x94,
+ 0x42, 0xeb, 0x50, 0x62, 0x3f, 0x98, 0x2a, 0xa6, 0x98, 0x6f, 0x1a, 0xcb, 0x5b, 0xd5, 0x3b, 0x78,
+ 0x57, 0x56, 0xc3, 0x09, 0x05, 0xfb, 0x47, 0x8b, 0x94, 0x55, 0x25, 0xa8, 0xc6, 0x09, 0x6e, 0x3d,
+ 0xba, 0x13, 0xbc, 0xf0, 0xa8, 0x4e, 0xf0, 0x16, 0x4c, 0x37, 0xb4, 0x27, 0xaf, 0x64, 0x26, 0xaf,
+ 0xf6, 0x5c, 0x24, 0xda, 0xeb, 0x18, 0x57, 0xc3, 0xad, 0x98, 0x44, 0x70, 0x9a, 0x2a, 0xfa, 0x4e,
+ 0x98, 0xe0, 0xf3, 0x2c, 0x5a, 0x19, 0x62, 0xad, 0x7c, 0x2a, 0x7f, 0xbd, 0xe8, 0x4d, 0xb0, 0x95,
+ 0x58, 0xd7, 0xaa, 0x63, 0x83, 0x98, 0xfd, 0xcb, 0x63, 0x30, 0xbc, 0xba, 0x4f, 0xfc, 0xf8, 0x0c,
+ 0x18, 0x52, 0x03, 0xa6, 0x5c, 0x7f, 0x3f, 0xf0, 0xf6, 0x49, 0x93, 0xc3, 0x4f, 0x72, 0xb8, 0x3e,
+ 0x26, 0x48, 0x4f, 0x55, 0x0d, 0x12, 0x38, 0x45, 0xf2, 0x51, 0xdc, 0xda, 0xaf, 0xc3, 0x08, 0x9f,
+ 0x7b, 0x71, 0x65, 0xcf, 0x54, 0xb0, 0xb3, 0x41, 0x14, 0xbb, 0x20, 0xd1, 0x28, 0x70, 0x8d, 0xbe,
+ 0xa8, 0x8e, 0xde, 0x83, 0xa9, 0x6d, 0x37, 0x8c, 0x62, 0x7a, 0xdd, 0x8e, 0x62, 0x67, 0xaf, 0xfd,
+ 0x10, 0xb7, 0x74, 0x35, 0x0e, 0x6b, 0x06, 0x25, 0x9c, 0xa2, 0x8c, 0x5a, 0x30, 0x49, 0x2f, 0x8e,
+ 0x49, 0x53, 0xa3, 0x27, 0x6e, 0x4a, 0xa9, 0xe1, 0x6e, 0xe9, 0x84, 0xb0, 0x49, 0x97, 0x32, 0x93,
+ 0x06, 0xbb, 0x68, 0x8e, 0x31, 0x89, 0x42, 0x31, 0x13, 0x7e, 0xc3, 0xe4, 0x30, 0xca, 0x93, 0x98,
+ 0x31, 0x4b, 0xc9, 0xe4, 0x49, 0x9a, 0xc9, 0xca, 0x57, 0xa0, 0x44, 0xe8, 0x10, 0x52, 0xc2, 0xe2,
+ 0xb1, 0x61, 0x71, 0xb0, 0xbe, 0xae, 0xbb, 0x8d, 0x30, 0x30, 0xf5, 0x23, 0xab, 0x92, 0x12, 0x4e,
+ 0x88, 0xa2, 0x15, 0x18, 0x89, 0x48, 0xe8, 0x92, 0x48, 0x3c, 0x3b, 0xf4, 0x98, 0x46, 0x86, 0xc6,
+ 0x6d, 0xa8, 0xf9, 0x6f, 0x2c, 0xaa, 0xd2, 0xe5, 0xe5, 0xb0, 0xdb, 0x10, 0x7b, 0x69, 0xd0, 0x96,
+ 0xd7, 0x12, 0x2b, 0xc5, 0x02, 0x8a, 0xde, 0x82, 0xd1, 0x90, 0x78, 0x4c, 0x01, 0x37, 0x39, 0xf8,
+ 0x22, 0xe7, 0xfa, 0x3c, 0x5e, 0x0f, 0x4b, 0x02, 0xe8, 0x26, 0xa0, 0x90, 0x50, 0x19, 0xc2, 0xf5,
+ 0x5b, 0xca, 0xc4, 0x43, 0xbc, 0x1f, 0x3c, 0x21, 0xda, 0x3f, 0x87, 0x13, 0x0c, 0x69, 0x5d, 0x89,
+ 0x33, 0xaa, 0xa1, 0xeb, 0x30, 0xab, 0x4a, 0xab, 0x7e, 0x14, 0x3b, 0x7e, 0x83, 0xb0, 0xa7, 0x83,
+ 0x52, 0x22, 0x15, 0xe1, 0x34, 0x02, 0xee, 0xae, 0x63, 0x7f, 0x9d, 0x8a, 0x33, 0x74, 0xb4, 0xce,
+ 0x40, 0x16, 0x78, 0xd3, 0x94, 0x05, 0x2e, 0xe6, 0xce, 0x5c, 0x8e, 0x1c, 0x70, 0x64, 0xc1, 0xb8,
+ 0x36, 0xb3, 0xc9, 0x9a, 0xb5, 0x7a, 0xac, 0xd9, 0x0e, 0xcc, 0xd0, 0x95, 0x7e, 0x7b, 0x8b, 0xb9,
+ 0x13, 0x35, 0xd9, 0xc2, 0x2c, 0x3c, 0xdc, 0xc2, 0x54, 0x86, 0xb8, 0xb7, 0x52, 0x04, 0x71, 0x57,
+ 0x13, 0xe8, 0x35, 0xa9, 0x8d, 0x2a, 0x1a, 0xa6, 0x5b, 0x5c, 0xd3, 0x74, 0x7c, 0x58, 0x9e, 0xd1,
+ 0x3e, 0x44, 0xd7, 0x3e, 0xd9, 0x5f, 0x91, 0xdf, 0xc8, 0x99, 0xcd, 0x22, 0x94, 0x1a, 0x6a, 0xb1,
+ 0x58, 0xa6, 0x31, 0xb9, 0x5a, 0x0e, 0x38, 0xc1, 0xa1, 0x7b, 0x94, 0x5e, 0x41, 0xd2, 0xd6, 0x86,
+ 0xf4, 0x82, 0x82, 0x19, 0xc4, 0x7e, 0x19, 0x60, 0xf5, 0x01, 0x69, 0xf0, 0xa5, 0xae, 0x3f, 0xea,
+ 0x5a, 0xf9, 0x8f, 0xba, 0xf6, 0x7f, 0xb2, 0x60, 0x6a, 0x6d, 0xc5, 0xb8, 0x26, 0x2e, 0x00, 0xf0,
+ 0xbb, 0xd1, 0xbd, 0x7b, 0x1b, 0xf2, 0xbd, 0x82, 0xab, 0x9c, 0x55, 0x29, 0xd6, 0x30, 0xd0, 0x45,
+ 0x28, 0x7a, 0x1d, 0x5f, 0x5c, 0x59, 0x46, 0x8f, 0x0e, 0xcb, 0xc5, 0x5b, 0x1d, 0x1f, 0xd3, 0x32,
+ 0xcd, 0xc0, 0xaf, 0x38, 0xb0, 0x81, 0x5f, 0x5f, 0x37, 0x21, 0x54, 0x86, 0xe1, 0xfb, 0xf7, 0xdd,
+ 0x26, 0x37, 0xc6, 0x16, 0x6f, 0x29, 0xf7, 0xee, 0x55, 0x2b, 0x11, 0xe6, 0xe5, 0xf6, 0xd7, 0x8a,
+ 0x30, 0xbf, 0xe6, 0x91, 0x07, 0x1f, 0xd2, 0x20, 0x7d, 0x50, 0xf3, 0xc4, 0x93, 0xc9, 0x8b, 0x27,
+ 0xb5, 0xc5, 0xec, 0x3f, 0x1e, 0xdb, 0x30, 0xca, 0x0d, 0x04, 0xa4, 0x79, 0xfa, 0x1b, 0x59, 0xad,
+ 0xe7, 0x0f, 0xc8, 0x82, 0xd0, 0xce, 0x71, 0x13, 0x2c, 0x75, 0xd2, 0x8a, 0x52, 0x2c, 0x89, 0xcf,
+ 0x7f, 0x0e, 0x26, 0x74, 0xcc, 0x13, 0x59, 0x45, 0xff, 0x8d, 0x22, 0xcc, 0xd0, 0x1e, 0x3c, 0xd2,
+ 0x89, 0xb8, 0xd3, 0x3d, 0x11, 0xa7, 0x6d, 0x19, 0xdb, 0x7f, 0x36, 0xde, 0x4d, 0xcf, 0xc6, 0x4b,
+ 0x79, 0xb3, 0x71, 0xd6, 0x73, 0xf0, 0xbd, 0x16, 0x9c, 0x5b, 0xf3, 0x82, 0xc6, 0x6e, 0xca, 0x68,
+ 0xf7, 0x55, 0x18, 0xa7, 0x7c, 0x3c, 0x32, 0xbc, 0x61, 0x0c, 0xff, 0x28, 0x01, 0xc2, 0x3a, 0x9e,
+ 0x56, 0xed, 0xce, 0x9d, 0x6a, 0x25, 0xcb, 0xad, 0x4a, 0x80, 0xb0, 0x8e, 0x67, 0xff, 0xb6, 0x05,
+ 0x4f, 0x5d, 0x5f, 0x59, 0x4d, 0x96, 0x62, 0x97, 0x67, 0x17, 0xbd, 0x05, 0x36, 0xb5, 0xae, 0x24,
+ 0xb7, 0xc0, 0x0a, 0xeb, 0x85, 0x80, 0x7e, 0x5c, 0xbc, 0x16, 0x7f, 0xd6, 0x82, 0x73, 0xd7, 0xdd,
+ 0x98, 0x1e, 0xcb, 0x69, 0x1f, 0x23, 0x7a, 0x2e, 0x47, 0x6e, 0x1c, 0x84, 0x07, 0x69, 0x1f, 0x23,
+ 0xac, 0x20, 0x58, 0xc3, 0xe2, 0x2d, 0xef, 0xbb, 0x11, 0xed, 0x69, 0xc1, 0x54, 0x45, 0x61, 0x51,
+ 0x8e, 0x15, 0x06, 0xfd, 0xb0, 0xa6, 0x1b, 0xb2, 0xab, 0xc4, 0x81, 0xe0, 0xb0, 0xea, 0xc3, 0x2a,
+ 0x12, 0x80, 0x13, 0x1c, 0xfb, 0x27, 0x2d, 0xb8, 0x70, 0xdd, 0xeb, 0x44, 0x31, 0x09, 0xb7, 0x23,
+ 0xa3, 0xb3, 0x2f, 0x43, 0x89, 0xc8, 0xeb, 0xba, 0xe8, 0xab, 0x12, 0x30, 0xd5, 0x3d, 0x9e, 0x3b,
+ 0x38, 0x29, 0xbc, 0x01, 0x2c, 0xe0, 0x4f, 0x66, 0xb9, 0xfd, 0x0b, 0x05, 0x98, 0xbc, 0xb1, 0xb9,
+ 0x59, 0xbb, 0x4e, 0x62, 0x71, 0x8a, 0xf5, 0x57, 0x35, 0x63, 0x4d, 0x63, 0xd6, 0xeb, 0x52, 0xd4,
+ 0x89, 0x5d, 0x6f, 0x81, 0x7b, 0xd4, 0x2e, 0x54, 0xfd, 0xf8, 0x76, 0x58, 0x8f, 0x43, 0xd7, 0x6f,
+ 0x65, 0xea, 0xd8, 0xe4, 0x59, 0x5b, 0xcc, 0x3b, 0x6b, 0xd1, 0xcb, 0x30, 0xc2, 0x5c, 0x7a, 0xe5,
+ 0xf5, 0xe4, 0x09, 0x75, 0xa7, 0x60, 0xa5, 0xc7, 0x87, 0xe5, 0xd2, 0x1d, 0x5c, 0xe5, 0x7f, 0xb0,
+ 0x40, 0x45, 0x77, 0x60, 0x7c, 0x27, 0x8e, 0xdb, 0x37, 0x88, 0xd3, 0x24, 0xa1, 0xe4, 0x0e, 0x97,
+ 0xb2, 0xb8, 0x03, 0x1d, 0x04, 0x8e, 0x96, 0x6c, 0xa8, 0xa4, 0x2c, 0xc2, 0x3a, 0x1d, 0xbb, 0x0e,
+ 0x90, 0xc0, 0x4e, 0x49, 0xbf, 0x60, 0xff, 0x91, 0x05, 0xa3, 0xdc, 0xbb, 0x2a, 0x44, 0x9f, 0x87,
+ 0x21, 0xf2, 0x80, 0x34, 0x84, 0xe4, 0x98, 0xd9, 0xe1, 0x44, 0xf0, 0xe0, 0xda, 0x72, 0xfa, 0x1f,
+ 0xb3, 0x5a, 0xe8, 0x06, 0x8c, 0xd2, 0xde, 0x5e, 0x57, 0xae, 0x66, 0x4f, 0xe7, 0x7d, 0xb1, 0x9a,
+ 0x76, 0x2e, 0xab, 0x88, 0x22, 0x2c, 0xab, 0x33, 0xcd, 0x6f, 0xa3, 0x5d, 0xa7, 0x0c, 0x2c, 0xee,
+ 0x75, 0xce, 0x6e, 0xae, 0xd4, 0x38, 0x92, 0xa0, 0xc6, 0x35, 0xbf, 0xb2, 0x10, 0x27, 0x44, 0xec,
+ 0x4d, 0x28, 0xd1, 0x49, 0x5d, 0xf2, 0x5c, 0xa7, 0xb7, 0xd2, 0xf9, 0x79, 0x28, 0x49, 0x05, 0x70,
+ 0x24, 0x1c, 0x74, 0x18, 0x55, 0xa9, 0x1f, 0x8e, 0x70, 0x02, 0xb7, 0xb7, 0xe1, 0x3c, 0xb3, 0xa6,
+ 0x70, 0xe2, 0x1d, 0x63, 0x8f, 0xf5, 0x5f, 0xcc, 0x2f, 0x88, 0x8b, 0x18, 0x9f, 0x99, 0x39, 0xcd,
+ 0xa3, 0x60, 0x42, 0x52, 0x4c, 0x2e, 0x65, 0xf6, 0x9f, 0x0c, 0xc1, 0x13, 0xd5, 0x7a, 0xbe, 0xe3,
+ 0xdd, 0xeb, 0x30, 0xc1, 0xc5, 0x34, 0xba, 0xb4, 0x1d, 0x4f, 0xb4, 0xab, 0xde, 0x1a, 0x37, 0x35,
+ 0x18, 0x36, 0x30, 0xd1, 0x53, 0x50, 0x74, 0xdf, 0xf7, 0xd3, 0xc6, 0xb9, 0xd5, 0xb7, 0x37, 0x30,
+ 0x2d, 0xa7, 0x60, 0x2a, 0xf1, 0x71, 0x56, 0xaa, 0xc0, 0x4a, 0xea, 0x7b, 0x13, 0xa6, 0xdc, 0xa8,
+ 0x11, 0xb9, 0x55, 0x9f, 0xf2, 0x99, 0xc4, 0x69, 0x33, 0x51, 0x12, 0xd0, 0x4e, 0x2b, 0x28, 0x4e,
+ 0x61, 0x6b, 0x7c, 0x7d, 0x78, 0x60, 0xa9, 0xb1, 0xaf, 0xc7, 0x0a, 0x15, 0x88, 0xdb, 0xec, 0xeb,
+ 0x22, 0x66, 0x28, 0x28, 0x04, 0x62, 0xfe, 0xc1, 0x11, 0x96, 0x30, 0x7a, 0x03, 0x6b, 0xec, 0x38,
+ 0xed, 0xa5, 0x4e, 0xbc, 0x53, 0x71, 0xa3, 0x46, 0xb0, 0x4f, 0xc2, 0x03, 0x76, 0x79, 0x1e, 0x4b,
+ 0x6e, 0x60, 0x0a, 0xb0, 0x72, 0x63, 0xa9, 0x46, 0x31, 0x71, 0x77, 0x1d, 0x53, 0x2a, 0x84, 0xd3,
+ 0x90, 0x0a, 0x97, 0x60, 0x5a, 0x36, 0x53, 0x27, 0x11, 0x3b, 0x23, 0xc6, 0x59, 0xc7, 0x94, 0x3b,
+ 0xb5, 0x28, 0x56, 0xdd, 0x4a, 0xe3, 0xa3, 0xd7, 0x60, 0xd2, 0xf5, 0xdd, 0xd8, 0x75, 0xe2, 0x20,
+ 0x64, 0x27, 0x2c, 0xbf, 0x27, 0xb3, 0x47, 0xd1, 0xaa, 0x0e, 0xc0, 0x26, 0x9e, 0xfd, 0xc7, 0x43,
+ 0x30, 0xcb, 0xa6, 0xed, 0x5b, 0x2b, 0xec, 0x63, 0xb3, 0xc2, 0xee, 0x74, 0xaf, 0xb0, 0xd3, 0x10,
+ 0x77, 0x3f, 0xca, 0x65, 0xf6, 0x1e, 0x94, 0x94, 0x7d, 0xb5, 0x74, 0x11, 0xb0, 0x72, 0x5c, 0x04,
+ 0xfa, 0x4b, 0x1f, 0xf2, 0x19, 0xb7, 0x98, 0xf9, 0x8c, 0xfb, 0xf7, 0x2d, 0x48, 0xcc, 0x4c, 0xd1,
+ 0x0d, 0x28, 0xb5, 0x03, 0x66, 0xca, 0x11, 0x4a, 0xfb, 0xa8, 0x27, 0x32, 0x0f, 0x2a, 0x7e, 0x28,
+ 0xf2, 0xf1, 0xab, 0xc9, 0x1a, 0x38, 0xa9, 0x8c, 0x96, 0x61, 0xb4, 0x1d, 0x92, 0x7a, 0xcc, 0x5c,
+ 0x39, 0xfb, 0xd2, 0xe1, 0x6b, 0x84, 0xe3, 0x63, 0x59, 0xd1, 0xfe, 0x45, 0x0b, 0x80, 0xbf, 0x94,
+ 0x3a, 0x7e, 0x8b, 0x9c, 0x81, 0xf6, 0xb7, 0x02, 0x43, 0x51, 0x9b, 0x34, 0x7a, 0x19, 0xd9, 0x24,
+ 0xfd, 0xa9, 0xb7, 0x49, 0x23, 0x19, 0x70, 0xfa, 0x0f, 0xb3, 0xda, 0xf6, 0xf7, 0x03, 0x4c, 0x25,
+ 0x68, 0xd5, 0x98, 0xec, 0xa1, 0x17, 0x0d, 0x47, 0xb9, 0x8b, 0x29, 0x47, 0xb9, 0x12, 0xc3, 0xd6,
+ 0x14, 0x8d, 0xef, 0x41, 0x71, 0xcf, 0x79, 0x20, 0x34, 0x49, 0xcf, 0xf7, 0xee, 0x06, 0xa5, 0xbf,
+ 0xb0, 0xee, 0x3c, 0xe0, 0x77, 0xa6, 0xe7, 0xe5, 0x02, 0x59, 0x77, 0x1e, 0x1c, 0x73, 0x53, 0x1a,
+ 0xc6, 0xa4, 0x6e, 0xb9, 0x51, 0xfc, 0xd5, 0xff, 0x92, 0xfc, 0x67, 0xcb, 0x8e, 0x36, 0xc2, 0xda,
+ 0x72, 0x7d, 0xf1, 0x6e, 0x38, 0x50, 0x5b, 0xae, 0x9f, 0x6e, 0xcb, 0xf5, 0x07, 0x68, 0xcb, 0xf5,
+ 0xd1, 0x07, 0x30, 0x2a, 0xde, 0xe8, 0x99, 0xfd, 0xbc, 0xa9, 0xa5, 0xca, 0x6b, 0x4f, 0x3c, 0xf1,
+ 0xf3, 0x36, 0x17, 0xe5, 0x9d, 0x50, 0x94, 0xf6, 0x6d, 0x57, 0x36, 0x88, 0xfe, 0xae, 0x05, 0x53,
+ 0xe2, 0x37, 0x26, 0xef, 0x77, 0x48, 0x14, 0x0b, 0xd9, 0xf3, 0xb3, 0x83, 0xf7, 0x41, 0x54, 0xe4,
+ 0x5d, 0xf9, 0xac, 0x64, 0xb3, 0x26, 0xb0, 0x6f, 0x8f, 0x52, 0xbd, 0x40, 0xff, 0xdc, 0x82, 0xf3,
+ 0x7b, 0xce, 0x03, 0xde, 0x22, 0x2f, 0xc3, 0x4e, 0xec, 0x06, 0xc2, 0x1f, 0xe0, 0xf3, 0x83, 0x4d,
+ 0x7f, 0x57, 0x75, 0xde, 0x49, 0x69, 0x3a, 0x7c, 0x3e, 0x0b, 0xa5, 0x6f, 0x57, 0x33, 0xfb, 0x35,
+ 0xbf, 0x0d, 0x63, 0x72, 0xbd, 0x65, 0xdc, 0xbc, 0x2b, 0xba, 0x60, 0x7d, 0x62, 0x13, 0x09, 0xdd,
+ 0x5b, 0x8d, 0xb6, 0x23, 0xd6, 0xda, 0x23, 0x6d, 0xe7, 0x3d, 0x98, 0xd0, 0xd7, 0xd8, 0x23, 0x6d,
+ 0xeb, 0x7d, 0x38, 0x97, 0xb1, 0x96, 0x1e, 0x69, 0x93, 0xf7, 0xe1, 0x62, 0xee, 0xfa, 0x78, 0x94,
+ 0x0d, 0xdb, 0xbf, 0x60, 0xe9, 0x7c, 0xf0, 0x0c, 0x54, 0xf0, 0x2b, 0xa6, 0x0a, 0xfe, 0x52, 0xef,
+ 0x9d, 0x93, 0xa3, 0x87, 0x7f, 0x57, 0xef, 0x34, 0xe5, 0xea, 0xe8, 0x2d, 0x18, 0xf1, 0x68, 0x89,
+ 0x34, 0x0e, 0xb1, 0xfb, 0xef, 0xc8, 0x44, 0x96, 0x62, 0xe5, 0x11, 0x16, 0x14, 0xec, 0x5f, 0xb1,
+ 0x60, 0xe8, 0x0c, 0x46, 0x02, 0x9b, 0x23, 0xf1, 0x62, 0x2e, 0x69, 0x11, 0x9a, 0x6b, 0x01, 0x3b,
+ 0xf7, 0x57, 0x65, 0xf8, 0xb1, 0x9c, 0x81, 0xf9, 0xbf, 0x05, 0x18, 0xa7, 0x4d, 0x49, 0x2b, 0xc6,
+ 0x37, 0x60, 0xd2, 0x73, 0xb6, 0x88, 0x27, 0xdf, 0x71, 0xd3, 0x0a, 0x93, 0x5b, 0x3a, 0x10, 0x9b,
+ 0xb8, 0xb4, 0xf2, 0xb6, 0xfe, 0xa4, 0x2d, 0xe4, 0x17, 0x55, 0xd9, 0x78, 0xef, 0xc6, 0x26, 0x2e,
+ 0xbd, 0xbb, 0xdf, 0x77, 0xe2, 0xc6, 0x8e, 0x50, 0xa6, 0xa8, 0xee, 0xde, 0xa3, 0x85, 0x98, 0xc3,
+ 0xa8, 0x00, 0x27, 0x57, 0xe7, 0x5d, 0x7a, 0x33, 0x0c, 0x7c, 0x21, 0x1e, 0x2b, 0x01, 0x0e, 0x9b,
+ 0x60, 0x9c, 0xc6, 0xcf, 0xf0, 0x98, 0x1f, 0x66, 0x36, 0x9a, 0x03, 0x78, 0xcc, 0xa3, 0x1a, 0x9c,
+ 0x77, 0xfd, 0x86, 0xd7, 0x69, 0x92, 0x3b, 0x3e, 0x97, 0xee, 0x3c, 0xf7, 0x03, 0xd2, 0x14, 0x02,
+ 0xb4, 0x32, 0xa7, 0xad, 0x66, 0xe0, 0xe0, 0xcc, 0x9a, 0xf6, 0x5f, 0x83, 0x73, 0xb7, 0x02, 0xa7,
+ 0xb9, 0xec, 0x78, 0x8e, 0xdf, 0x20, 0x61, 0xd5, 0x6f, 0xf5, 0xb5, 0x12, 0xd3, 0x6d, 0xba, 0x0a,
+ 0xfd, 0x6c, 0xba, 0xec, 0x1d, 0x40, 0x7a, 0x03, 0xc2, 0x36, 0x19, 0xc3, 0xa8, 0xcb, 0x9b, 0x12,
+ 0xcb, 0xff, 0xd3, 0xd9, 0xd2, 0x75, 0x57, 0xcf, 0x34, 0xab, 0x5b, 0x5e, 0x80, 0x25, 0x21, 0xfb,
+ 0x75, 0xc8, 0xf4, 0x47, 0xec, 0xaf, 0xb6, 0xb1, 0x5f, 0x85, 0x59, 0x56, 0xf3, 0x64, 0x2a, 0x05,
+ 0xfb, 0x07, 0x2d, 0x98, 0xde, 0x48, 0xc5, 0xb8, 0xb8, 0xc2, 0xde, 0x5a, 0x33, 0xf4, 0xee, 0x75,
+ 0x56, 0x8a, 0x05, 0xf4, 0xd4, 0xf5, 0x7b, 0x7f, 0x61, 0x41, 0x49, 0x45, 0x67, 0x3a, 0x03, 0xa1,
+ 0x76, 0xc5, 0x10, 0x6a, 0x33, 0xf5, 0x4e, 0xaa, 0x3b, 0x79, 0x32, 0x2d, 0xba, 0xa9, 0xa2, 0x35,
+ 0xf4, 0x50, 0x39, 0x25, 0x64, 0xb8, 0x6f, 0xff, 0x94, 0x19, 0xd2, 0x41, 0xc6, 0x6f, 0x60, 0x66,
+ 0x5a, 0x0a, 0xf7, 0x63, 0x62, 0xa6, 0xa5, 0xfa, 0x93, 0xc3, 0xfd, 0x6a, 0x5a, 0x97, 0xd9, 0xa9,
+ 0xf0, 0xed, 0xcc, 0x95, 0x81, 0xed, 0x4d, 0x15, 0x24, 0xa5, 0x2c, 0x5c, 0x13, 0x44, 0xe9, 0x31,
+ 0x63, 0x64, 0xe2, 0x1f, 0x8f, 0xa4, 0x95, 0x54, 0xb1, 0x6f, 0xc0, 0x74, 0x6a, 0xc0, 0xd0, 0xab,
+ 0x30, 0xdc, 0xde, 0x71, 0x22, 0x92, 0x32, 0x4d, 0x1d, 0xae, 0xd1, 0xc2, 0xe3, 0xc3, 0xf2, 0x94,
+ 0xaa, 0xc0, 0x4a, 0x30, 0xc7, 0xb6, 0xff, 0xa7, 0x05, 0x43, 0x1b, 0x41, 0xf3, 0x2c, 0x16, 0xd3,
+ 0x9b, 0xc6, 0x62, 0x7a, 0x32, 0x2f, 0x0e, 0x61, 0xee, 0x3a, 0x5a, 0x4b, 0xad, 0xa3, 0x4b, 0xb9,
+ 0x14, 0x7a, 0x2f, 0xa1, 0x3d, 0x18, 0x67, 0xd1, 0x0d, 0x85, 0xa9, 0xec, 0xcb, 0xc6, 0xfd, 0xaa,
+ 0x9c, 0xba, 0x5f, 0x4d, 0x6b, 0xa8, 0xda, 0x2d, 0xeb, 0x59, 0x18, 0x15, 0xe6, 0x9a, 0x69, 0xa7,
+ 0x0d, 0x81, 0x8b, 0x25, 0xdc, 0xfe, 0xa9, 0x22, 0x18, 0xd1, 0x14, 0xd1, 0xaf, 0x59, 0xb0, 0x10,
+ 0x72, 0x2f, 0xd8, 0x66, 0xa5, 0x13, 0xba, 0x7e, 0xab, 0xde, 0xd8, 0x21, 0xcd, 0x8e, 0xe7, 0xfa,
+ 0xad, 0x6a, 0xcb, 0x0f, 0x54, 0xf1, 0xea, 0x03, 0xd2, 0xe8, 0xb0, 0x37, 0x97, 0x3e, 0xa1, 0x1b,
+ 0x95, 0x39, 0xd4, 0xb5, 0xa3, 0xc3, 0xf2, 0x02, 0x3e, 0x11, 0x6d, 0x7c, 0xc2, 0xbe, 0xa0, 0xdf,
+ 0xb6, 0x60, 0x91, 0x07, 0x19, 0x1c, 0xbc, 0xff, 0x3d, 0x6e, 0xa3, 0x35, 0x49, 0x2a, 0x21, 0xb2,
+ 0x49, 0xc2, 0xbd, 0xe5, 0xd7, 0xc4, 0x80, 0x2e, 0xd6, 0x4e, 0xd6, 0x16, 0x3e, 0x69, 0xe7, 0xec,
+ 0x7f, 0x57, 0x84, 0x49, 0x3a, 0x8a, 0x49, 0x6c, 0x9a, 0x57, 0x8d, 0x25, 0xf1, 0x74, 0x6a, 0x49,
+ 0xcc, 0x1a, 0xc8, 0xa7, 0x13, 0x96, 0x26, 0x82, 0x59, 0xcf, 0x89, 0xe2, 0x1b, 0xc4, 0x09, 0xe3,
+ 0x2d, 0xe2, 0x70, 0x33, 0xa1, 0xe2, 0x89, 0x4d, 0x9a, 0x94, 0xfa, 0xeb, 0x56, 0x9a, 0x18, 0xee,
+ 0xa6, 0x8f, 0xf6, 0x01, 0x31, 0x5b, 0xa7, 0xd0, 0xf1, 0x23, 0xfe, 0x2d, 0xae, 0x78, 0x8f, 0x39,
+ 0x59, 0xab, 0xf3, 0xa2, 0x55, 0x74, 0xab, 0x8b, 0x1a, 0xce, 0x68, 0x41, 0xb3, 0x61, 0x1b, 0x1e,
+ 0xd4, 0x86, 0x6d, 0xa4, 0x8f, 0x67, 0xd4, 0x1e, 0xcc, 0x88, 0x59, 0xd9, 0x76, 0x5b, 0xe2, 0x90,
+ 0xfe, 0x52, 0xca, 0xc6, 0xd5, 0x1a, 0xdc, 0x50, 0xa9, 0x8f, 0x81, 0xab, 0xfd, 0xdd, 0x70, 0x8e,
+ 0x36, 0x67, 0xfa, 0xf1, 0x44, 0x88, 0xc0, 0xf4, 0x6e, 0x67, 0x8b, 0x78, 0x24, 0x96, 0x65, 0xa2,
+ 0xd1, 0x4c, 0xb1, 0xdf, 0xac, 0x9d, 0xc8, 0x96, 0x37, 0x4d, 0x12, 0x38, 0x4d, 0xd3, 0xfe, 0x19,
+ 0x0b, 0x98, 0xb5, 0xfc, 0x19, 0x1c, 0x7f, 0x5f, 0x30, 0x8f, 0xbf, 0xb9, 0x3c, 0x0e, 0x94, 0x73,
+ 0xf2, 0xbd, 0xc2, 0xa7, 0xa5, 0x16, 0x06, 0x0f, 0x0e, 0xa4, 0xec, 0xdf, 0x5f, 0xe2, 0xfa, 0x3f,
+ 0x16, 0xdf, 0x90, 0x2a, 0x28, 0x00, 0xfa, 0x1e, 0x18, 0x6b, 0x38, 0x6d, 0xa7, 0xc1, 0xc3, 0xd8,
+ 0xe6, 0x6a, 0x7f, 0x8c, 0x4a, 0x0b, 0x2b, 0xa2, 0x06, 0xd7, 0x66, 0x7c, 0x46, 0x7e, 0xa5, 0x2c,
+ 0xee, 0xab, 0xc1, 0x50, 0x4d, 0xce, 0xef, 0xc2, 0xa4, 0x41, 0xec, 0x91, 0x5e, 0x7d, 0xbf, 0x87,
+ 0x1f, 0x17, 0xea, 0xc6, 0xb2, 0x07, 0xb3, 0xbe, 0xf6, 0x9f, 0x32, 0x47, 0x29, 0x4e, 0x7f, 0xb2,
+ 0xdf, 0x81, 0xc0, 0x38, 0xa9, 0xe6, 0x0d, 0x90, 0x22, 0x83, 0xbb, 0x29, 0xdb, 0xff, 0xd0, 0x82,
+ 0xc7, 0x75, 0x44, 0x2d, 0x5e, 0x43, 0x3f, 0x7d, 0x72, 0x05, 0xc6, 0x82, 0x36, 0x09, 0x9d, 0xe4,
+ 0x4e, 0x76, 0x55, 0x0e, 0xfa, 0x6d, 0x51, 0x7e, 0x2c, 0xe2, 0x09, 0x4a, 0xea, 0xb2, 0x1c, 0xab,
+ 0x9a, 0xc8, 0x86, 0x11, 0x36, 0x18, 0x91, 0x88, 0xa5, 0xc1, 0xcc, 0x14, 0xd9, 0xd3, 0x6a, 0x84,
+ 0x05, 0xc4, 0xfe, 0x7e, 0x8b, 0x2f, 0x2c, 0xbd, 0xeb, 0xe8, 0x7d, 0x98, 0xd9, 0xa3, 0xd7, 0xb7,
+ 0xd5, 0x07, 0xed, 0x90, 0xab, 0xd1, 0xe5, 0x38, 0x3d, 0xdf, 0x6f, 0x9c, 0xb4, 0x8f, 0x4c, 0x8c,
+ 0xd9, 0xd6, 0x53, 0xc4, 0x70, 0x17, 0x79, 0xfb, 0xcf, 0x0a, 0x7c, 0x27, 0x32, 0xa9, 0xee, 0x59,
+ 0x18, 0x6d, 0x07, 0xcd, 0x95, 0x6a, 0x05, 0x8b, 0x11, 0x52, 0xec, 0xaa, 0xc6, 0x8b, 0xb1, 0x84,
+ 0xa3, 0x6b, 0x00, 0xe4, 0x41, 0x4c, 0x42, 0xdf, 0xf1, 0x94, 0xe1, 0x87, 0x12, 0x9e, 0x56, 0x15,
+ 0x04, 0x6b, 0x58, 0xb4, 0x4e, 0x3b, 0x0c, 0xf6, 0xdd, 0x26, 0xf3, 0x36, 0x2c, 0x9a, 0x75, 0x6a,
+ 0x0a, 0x82, 0x35, 0x2c, 0x7a, 0x55, 0xee, 0xf8, 0x11, 0x3f, 0x00, 0x9d, 0x2d, 0x11, 0x20, 0x6f,
+ 0x2c, 0xb9, 0x2a, 0xdf, 0xd1, 0x81, 0xd8, 0xc4, 0x45, 0x4b, 0x30, 0x12, 0x3b, 0xcc, 0x9c, 0x61,
+ 0x38, 0xdf, 0x2c, 0x71, 0x93, 0x62, 0xe8, 0x71, 0x4d, 0x69, 0x05, 0x2c, 0x2a, 0xa2, 0x77, 0x24,
+ 0x0b, 0xe6, 0x2c, 0x59, 0xd8, 0x03, 0xe7, 0x2e, 0x5b, 0x9d, 0x7d, 0xeb, 0x3c, 0x58, 0xd8, 0x19,
+ 0x1b, 0xb4, 0xec, 0xef, 0x2b, 0x01, 0x24, 0xd2, 0x1e, 0xfa, 0xa0, 0x8b, 0x45, 0xbc, 0xd0, 0x5b,
+ 0x3e, 0x3c, 0x3d, 0xfe, 0x80, 0x7e, 0xc0, 0x82, 0x71, 0xc7, 0xf3, 0x82, 0x86, 0x13, 0xb3, 0x51,
+ 0x2e, 0xf4, 0x66, 0x51, 0xa2, 0xfd, 0xa5, 0xa4, 0x06, 0xef, 0xc2, 0xcb, 0xd2, 0x52, 0x41, 0x83,
+ 0xf4, 0xed, 0x85, 0xde, 0x30, 0xfa, 0x8c, 0xbc, 0x04, 0xf0, 0xe5, 0x31, 0x9f, 0xbe, 0x04, 0x94,
+ 0x18, 0x37, 0xd6, 0xe4, 0x7f, 0x74, 0xc7, 0x88, 0x24, 0x37, 0x94, 0x1f, 0x92, 0xc2, 0x10, 0x7a,
+ 0xfa, 0x05, 0x91, 0x43, 0x35, 0xdd, 0x2f, 0x6a, 0x38, 0x3f, 0x6e, 0x8b, 0x26, 0x5d, 0xf7, 0xf1,
+ 0x89, 0x7a, 0x0f, 0xa6, 0x9b, 0xe6, 0x71, 0x2b, 0x56, 0xd3, 0xa7, 0xf3, 0xe8, 0xa6, 0x4e, 0xe7,
+ 0xe4, 0x80, 0x4d, 0x01, 0x70, 0x9a, 0x30, 0xaa, 0x71, 0x0f, 0xb5, 0xaa, 0xbf, 0x1d, 0x08, 0xbb,
+ 0x72, 0x3b, 0x77, 0x2e, 0x0f, 0xa2, 0x98, 0xec, 0x51, 0xcc, 0xe4, 0x1c, 0xdd, 0x10, 0x75, 0xb1,
+ 0xa2, 0x82, 0xde, 0x82, 0x11, 0xe6, 0x36, 0x1c, 0xcd, 0x8d, 0xe5, 0xeb, 0x01, 0xcd, 0x88, 0x17,
+ 0xc9, 0xa6, 0x62, 0x7f, 0x23, 0x2c, 0x28, 0xa0, 0x1b, 0x32, 0x2c, 0x4e, 0x54, 0xf5, 0xef, 0x44,
+ 0x84, 0x85, 0xc5, 0x29, 0x2d, 0x7f, 0x32, 0x89, 0x78, 0xc3, 0xcb, 0x33, 0x23, 0x98, 0x1b, 0x35,
+ 0xa9, 0xbc, 0x22, 0xfe, 0xcb, 0xc0, 0xe8, 0x73, 0x90, 0xdf, 0x3d, 0x33, 0x78, 0x7a, 0x32, 0x9c,
+ 0x77, 0x4d, 0x12, 0x38, 0x4d, 0xf3, 0x4c, 0x8f, 0xcf, 0x79, 0x1f, 0x66, 0xd2, 0x1b, 0xeb, 0x91,
+ 0x1e, 0xd7, 0x7f, 0x34, 0x04, 0x53, 0xe6, 0x42, 0x40, 0x8b, 0x50, 0x12, 0x44, 0x54, 0x10, 0x4f,
+ 0xb5, 0xb6, 0xd7, 0x25, 0x00, 0x27, 0x38, 0x2c, 0x88, 0x29, 0xab, 0xae, 0xd9, 0x01, 0x26, 0x41,
+ 0x4c, 0x15, 0x04, 0x6b, 0x58, 0x54, 0x88, 0xde, 0x0a, 0x82, 0x58, 0x1d, 0x05, 0x6a, 0xb5, 0x2c,
+ 0xb3, 0x52, 0x2c, 0xa0, 0xf4, 0x08, 0xd8, 0x25, 0xa1, 0x4f, 0x3c, 0x53, 0x93, 0xa9, 0x8e, 0x80,
+ 0x9b, 0x3a, 0x10, 0x9b, 0xb8, 0xf4, 0x48, 0x0b, 0x22, 0xb6, 0xfc, 0x84, 0xa8, 0x9e, 0xd8, 0x55,
+ 0xd6, 0xb9, 0xdb, 0xbc, 0x84, 0xa3, 0x2f, 0xc1, 0xe3, 0xca, 0xcb, 0x1d, 0x73, 0xcd, 0xb0, 0x6c,
+ 0x71, 0xc4, 0xb8, 0x59, 0x3f, 0xbe, 0x92, 0x8d, 0x86, 0xf3, 0xea, 0xa3, 0x37, 0x61, 0x4a, 0x88,
+ 0xc0, 0x92, 0xe2, 0xa8, 0x69, 0xac, 0x70, 0xd3, 0x80, 0xe2, 0x14, 0x36, 0xaa, 0xc0, 0x0c, 0x2d,
+ 0x61, 0x52, 0xa8, 0xa4, 0xc0, 0xbd, 0xf5, 0xd5, 0x59, 0x7f, 0x33, 0x05, 0xc7, 0x5d, 0x35, 0xd0,
+ 0x12, 0x4c, 0x73, 0x19, 0x85, 0xde, 0x29, 0xd9, 0x3c, 0x08, 0x77, 0x0f, 0xb5, 0x11, 0x6e, 0x9b,
+ 0x60, 0x9c, 0xc6, 0x47, 0xaf, 0xc3, 0x84, 0x13, 0x36, 0x76, 0xdc, 0x98, 0x34, 0xe2, 0x4e, 0xc8,
+ 0xfd, 0x40, 0x34, 0x6b, 0x8f, 0x25, 0x0d, 0x86, 0x0d, 0x4c, 0xfb, 0x03, 0x38, 0x97, 0xe1, 0x29,
+ 0x46, 0x17, 0x8e, 0xd3, 0x76, 0xe5, 0x37, 0xa5, 0x2c, 0x24, 0x97, 0x6a, 0x55, 0xf9, 0x35, 0x1a,
+ 0x16, 0x5d, 0x9d, 0x4c, 0x25, 0xae, 0x65, 0x2f, 0x50, 0xab, 0x73, 0x4d, 0x02, 0x70, 0x82, 0x63,
+ 0xff, 0x16, 0x80, 0xa6, 0xd0, 0x19, 0xc0, 0x3e, 0xee, 0x75, 0x98, 0x90, 0x29, 0x37, 0xb4, 0x50,
+ 0xef, 0xea, 0x33, 0xaf, 0x6b, 0x30, 0x6c, 0x60, 0xd2, 0xbe, 0xf9, 0x2a, 0x50, 0x7d, 0xca, 0x1e,
+ 0x33, 0x09, 0x53, 0x9f, 0xe0, 0xa0, 0x17, 0x60, 0x2c, 0x22, 0xde, 0xf6, 0x2d, 0xd7, 0xdf, 0x15,
+ 0x0b, 0x5b, 0x71, 0xe1, 0xba, 0x28, 0xc7, 0x0a, 0x03, 0x2d, 0x43, 0xb1, 0xe3, 0x36, 0xc5, 0x52,
+ 0x96, 0x07, 0x7e, 0xf1, 0x4e, 0xb5, 0x72, 0x7c, 0x58, 0x7e, 0x3a, 0x2f, 0x93, 0x08, 0xbd, 0xda,
+ 0x47, 0x0b, 0x74, 0xfb, 0xd1, 0xca, 0x59, 0x6f, 0x03, 0x23, 0x27, 0x7c, 0x1b, 0xb8, 0x06, 0x20,
+ 0xbe, 0x5a, 0xae, 0xe5, 0x62, 0x32, 0x6b, 0xd7, 0x15, 0x04, 0x6b, 0x58, 0x28, 0x82, 0xd9, 0x46,
+ 0x48, 0x1c, 0x79, 0x87, 0xe6, 0x3e, 0x4f, 0x63, 0x0f, 0xaf, 0x20, 0x58, 0x49, 0x13, 0xc3, 0xdd,
+ 0xf4, 0x51, 0x00, 0xb3, 0x4d, 0x11, 0x54, 0x21, 0x69, 0xb4, 0x74, 0x72, 0x47, 0x2b, 0x66, 0x90,
+ 0x93, 0x26, 0x84, 0xbb, 0x69, 0xa3, 0x2f, 0xc3, 0xbc, 0x2c, 0xec, 0x8e, 0x63, 0xc1, 0xb6, 0x4b,
+ 0x91, 0xc7, 0x5f, 0xaf, 0xe4, 0x62, 0xe1, 0x1e, 0x14, 0x10, 0x86, 0x11, 0xf6, 0x96, 0x14, 0xcd,
+ 0x8d, 0xb3, 0x73, 0xee, 0xb9, 0x7c, 0x65, 0x00, 0x5d, 0xeb, 0x0b, 0xec, 0x1d, 0x4a, 0x98, 0x94,
+ 0x27, 0xcf, 0x72, 0xac, 0x10, 0x0b, 0x4a, 0x68, 0x1b, 0xc6, 0x1d, 0xdf, 0x0f, 0x62, 0x87, 0x8b,
+ 0x50, 0x13, 0xf9, 0xb2, 0x9f, 0x46, 0x78, 0x29, 0xa9, 0xc1, 0xa9, 0x2b, 0x2b, 0x55, 0x0d, 0x82,
+ 0x75, 0xc2, 0xe8, 0x3e, 0x4c, 0x07, 0xf7, 0x29, 0x73, 0x94, 0x5a, 0x8a, 0x68, 0x6e, 0x92, 0xb5,
+ 0xf5, 0xca, 0x80, 0x7a, 0x5a, 0xa3, 0xb2, 0xc6, 0xb5, 0x4c, 0xa2, 0x38, 0xdd, 0x0a, 0x5a, 0x30,
+ 0xb4, 0xd5, 0x53, 0x89, 0x3b, 0x4b, 0xa2, 0xad, 0xd6, 0x95, 0xd3, 0x2c, 0x2e, 0x0a, 0x37, 0x91,
+ 0x66, 0xbb, 0x7f, 0x3a, 0x15, 0x17, 0x25, 0x01, 0x61, 0x1d, 0x0f, 0xed, 0xc0, 0x44, 0xf2, 0x64,
+ 0x15, 0x46, 0x2c, 0x2a, 0xdb, 0xf8, 0xb5, 0x6b, 0x83, 0x7d, 0x5c, 0x55, 0xab, 0xc9, 0x6f, 0x0e,
+ 0x7a, 0x09, 0x36, 0x28, 0xcf, 0x7f, 0x1b, 0x8c, 0x6b, 0x13, 0x7b, 0xa2, 0x28, 0xb8, 0x6f, 0xc2,
+ 0x4c, 0x7a, 0xea, 0x4e, 0xe4, 0x41, 0xf0, 0xbf, 0x0a, 0x30, 0x9d, 0xf1, 0x72, 0xc5, 0xb2, 0x91,
+ 0xa4, 0x18, 0x6a, 0x92, 0x7c, 0xc4, 0x64, 0x8b, 0x85, 0x01, 0xd8, 0xa2, 0xe4, 0xd1, 0xc5, 0x5c,
+ 0x1e, 0x2d, 0x58, 0xe1, 0xd0, 0x87, 0x61, 0x85, 0xe6, 0xe9, 0x33, 0x3c, 0xd0, 0xe9, 0x73, 0x0a,
+ 0xec, 0xd3, 0x38, 0xc0, 0x46, 0x07, 0x38, 0xc0, 0x7e, 0xb4, 0x00, 0x33, 0x69, 0x0b, 0xdf, 0x33,
+ 0x78, 0xef, 0x78, 0xcb, 0x78, 0xef, 0xc8, 0xce, 0xed, 0x93, 0xb6, 0x3b, 0xce, 0x7b, 0xfb, 0xc0,
+ 0xa9, 0xb7, 0x8f, 0xe7, 0x06, 0xa2, 0xd6, 0xfb, 0x1d, 0xe4, 0x1f, 0x15, 0xe0, 0x42, 0xba, 0xca,
+ 0x8a, 0xe7, 0xb8, 0x7b, 0x67, 0x30, 0x36, 0xb7, 0x8d, 0xb1, 0x79, 0x71, 0x90, 0xaf, 0x61, 0x5d,
+ 0xcb, 0x1d, 0xa0, 0x7b, 0xa9, 0x01, 0x5a, 0x1c, 0x9c, 0x64, 0xef, 0x51, 0xfa, 0x66, 0x11, 0x2e,
+ 0x65, 0xd6, 0x4b, 0x9e, 0x0b, 0xd6, 0x8c, 0xe7, 0x82, 0x6b, 0xa9, 0xe7, 0x02, 0xbb, 0x77, 0xed,
+ 0xd3, 0x79, 0x3f, 0x10, 0xee, 0xd0, 0x2c, 0x62, 0xe8, 0x43, 0xbe, 0x1d, 0x18, 0xee, 0xd0, 0x8a,
+ 0x10, 0x36, 0xe9, 0xfe, 0x55, 0x7a, 0x33, 0xf8, 0x2d, 0x0b, 0x2e, 0x66, 0xce, 0xcd, 0x19, 0xe8,
+ 0xd5, 0x37, 0x4c, 0xbd, 0xfa, 0xb3, 0x03, 0xaf, 0xd6, 0x1c, 0x45, 0xfb, 0x1f, 0x17, 0x73, 0xbe,
+ 0x85, 0x69, 0x26, 0x6f, 0xc3, 0xb8, 0xd3, 0x68, 0x90, 0x28, 0x5a, 0x0f, 0x9a, 0x2a, 0x82, 0xe6,
+ 0x8b, 0x4c, 0xda, 0x48, 0x8a, 0x8f, 0x0f, 0xcb, 0xf3, 0x69, 0x12, 0x09, 0x18, 0xeb, 0x14, 0xcc,
+ 0xa0, 0xbf, 0x85, 0x53, 0x0d, 0xfa, 0x7b, 0x0d, 0x60, 0x5f, 0xe9, 0x2b, 0xd2, 0x6a, 0x4e, 0x4d,
+ 0x93, 0xa1, 0x61, 0xa1, 0xef, 0x62, 0xb7, 0x00, 0x6e, 0x0c, 0xc4, 0x97, 0xe2, 0xcb, 0x03, 0xce,
+ 0x95, 0x6e, 0x58, 0xc4, 0xe3, 0x6e, 0x28, 0x95, 0xb0, 0x22, 0x89, 0xbe, 0x03, 0x66, 0x22, 0x1e,
+ 0xd6, 0x69, 0xc5, 0x73, 0x22, 0xe6, 0xc4, 0x25, 0x56, 0x21, 0x0b, 0xa6, 0x51, 0x4f, 0xc1, 0x70,
+ 0x17, 0x36, 0x5a, 0x93, 0x1f, 0xc5, 0x62, 0x50, 0xf1, 0x85, 0x79, 0x25, 0xf9, 0x20, 0x91, 0x0b,
+ 0xed, 0x7c, 0x7a, 0xf8, 0xd9, 0xc0, 0x6b, 0x35, 0xed, 0x1f, 0x1d, 0x82, 0x27, 0x7a, 0x30, 0x31,
+ 0xb4, 0x64, 0x1a, 0x01, 0x3c, 0x9f, 0xd6, 0xff, 0xcd, 0x67, 0x56, 0x36, 0x14, 0x82, 0xa9, 0xb5,
+ 0x52, 0xf8, 0xd0, 0x6b, 0xe5, 0x87, 0x2c, 0x4d, 0x33, 0xcb, 0x4d, 0x85, 0xbf, 0x70, 0x42, 0xe6,
+ 0x7c, 0x8a, 0xaa, 0xda, 0xed, 0x0c, 0x7d, 0xe7, 0xb5, 0x81, 0xbb, 0x33, 0xb0, 0x02, 0xf4, 0x6c,
+ 0x9f, 0x8c, 0xbe, 0x6a, 0xc1, 0xd3, 0x99, 0xfd, 0x35, 0x8c, 0x96, 0x16, 0xa1, 0xd4, 0xa0, 0x85,
+ 0x9a, 0x63, 0x68, 0xe2, 0x31, 0x2f, 0x01, 0x38, 0xc1, 0x31, 0x6c, 0x93, 0x0a, 0x7d, 0x6d, 0x93,
+ 0xfe, 0xad, 0x05, 0x5d, 0x0b, 0xf8, 0x0c, 0x38, 0x69, 0xd5, 0xe4, 0xa4, 0x9f, 0x1c, 0x64, 0x2e,
+ 0x73, 0x98, 0xe8, 0xef, 0x4f, 0xc3, 0x63, 0x39, 0x9e, 0x60, 0xfb, 0x30, 0xdb, 0x6a, 0x10, 0xd3,
+ 0xe5, 0x56, 0x7c, 0x4c, 0xa6, 0x77, 0x72, 0x4f, 0xff, 0x5c, 0x7e, 0x21, 0xee, 0x42, 0xc1, 0xdd,
+ 0x4d, 0xa0, 0xaf, 0x5a, 0x70, 0xde, 0xb9, 0x1f, 0x75, 0xa5, 0x2a, 0x15, 0x6b, 0xe6, 0x95, 0x4c,
+ 0x3d, 0x6d, 0x9f, 0xd4, 0xa6, 0x3c, 0xab, 0x57, 0x16, 0x16, 0xce, 0x6c, 0x0b, 0x61, 0x11, 0xf4,
+ 0x98, 0xca, 0xdb, 0x3d, 0x9c, 0xc2, 0xb3, 0x5c, 0xf6, 0x38, 0x4f, 0x95, 0x10, 0xac, 0xe8, 0xa0,
+ 0xbb, 0x50, 0x6a, 0x49, 0x3f, 0x5a, 0xc1, 0xb3, 0x33, 0x0f, 0xc1, 0x4c, 0x67, 0x5b, 0xee, 0x3b,
+ 0xa2, 0x40, 0x38, 0x21, 0x85, 0xde, 0x84, 0xa2, 0xbf, 0x1d, 0xf5, 0x4a, 0x87, 0x95, 0xb2, 0xe5,
+ 0xe3, 0x01, 0x17, 0x36, 0xd6, 0xea, 0x98, 0x56, 0x44, 0x37, 0xa0, 0x18, 0x6e, 0x35, 0xc5, 0xd3,
+ 0x42, 0xa6, 0x5c, 0x8a, 0x97, 0x2b, 0xd9, 0x8b, 0x84, 0x53, 0xc2, 0xcb, 0x15, 0x4c, 0x49, 0xa0,
+ 0x1a, 0x0c, 0x33, 0xa7, 0x29, 0xf1, 0x82, 0x90, 0x29, 0x90, 0xf6, 0x70, 0x3e, 0xe4, 0x51, 0x19,
+ 0x18, 0x02, 0xe6, 0x84, 0xd0, 0x5b, 0x30, 0xd2, 0x60, 0x19, 0xa3, 0x84, 0xe2, 0x27, 0x3b, 0x5c,
+ 0x57, 0x57, 0x4e, 0x29, 0xfe, 0x82, 0xca, 0xcb, 0xb1, 0xa0, 0x80, 0x36, 0x61, 0xa4, 0x41, 0xda,
+ 0x3b, 0xdb, 0x91, 0xd0, 0xe7, 0x7c, 0x26, 0x93, 0x56, 0x8f, 0x04, 0x69, 0x82, 0x2a, 0xc3, 0xc0,
+ 0x82, 0x16, 0xfa, 0x1c, 0x14, 0xb6, 0x1b, 0xc2, 0x93, 0x2a, 0xf3, 0x0d, 0xc1, 0x8c, 0x94, 0xb1,
+ 0x3c, 0x72, 0x74, 0x58, 0x2e, 0xac, 0xad, 0xe0, 0xc2, 0x76, 0x03, 0x6d, 0xc0, 0xe8, 0x36, 0xf7,
+ 0xad, 0x17, 0x01, 0x6c, 0x3e, 0x9d, 0xed, 0xf6, 0xdf, 0xe5, 0x7e, 0xcf, 0x3d, 0x80, 0x04, 0x00,
+ 0x4b, 0x22, 0x2c, 0x5e, 0xb0, 0x8a, 0x11, 0x20, 0x02, 0xe7, 0x2f, 0x9c, 0x2c, 0xae, 0x83, 0x50,
+ 0x73, 0x28, 0x2a, 0x58, 0xa3, 0x88, 0xbe, 0x02, 0x25, 0x47, 0xa6, 0xc6, 0x14, 0x41, 0x70, 0x5e,
+ 0xce, 0xdc, 0x8e, 0xbd, 0xb3, 0x86, 0xf2, 0xb5, 0xac, 0x90, 0x70, 0x42, 0x14, 0xed, 0xc2, 0xe4,
+ 0x7e, 0xd4, 0xde, 0x21, 0x72, 0xfb, 0xb2, 0x98, 0x38, 0x39, 0xc7, 0xd5, 0x5d, 0x81, 0xe8, 0x86,
+ 0x71, 0xc7, 0xf1, 0xba, 0x38, 0x0e, 0x73, 0x1c, 0xbb, 0xab, 0x13, 0xc3, 0x26, 0x6d, 0x3a, 0xfc,
+ 0xef, 0x77, 0x82, 0xad, 0x83, 0x98, 0x88, 0x48, 0xfb, 0x99, 0xc3, 0xff, 0x36, 0x47, 0xe9, 0x1e,
+ 0x7e, 0x01, 0xc0, 0x92, 0x08, 0xdd, 0xe0, 0x8e, 0x4c, 0x3b, 0x2b, 0x74, 0x39, 0xcf, 0xe6, 0x0e,
+ 0x4f, 0x57, 0x7f, 0x93, 0x41, 0x61, 0x9c, 0x31, 0x21, 0xc5, 0x38, 0x62, 0x7b, 0x27, 0x88, 0x03,
+ 0x3f, 0xc5, 0x8d, 0x67, 0xf3, 0x39, 0x62, 0x2d, 0x03, 0xbf, 0x9b, 0x23, 0x66, 0x61, 0xe1, 0xcc,
+ 0xb6, 0x50, 0x13, 0xa6, 0xda, 0x41, 0x18, 0xdf, 0x0f, 0x42, 0xb9, 0xbe, 0x50, 0x8f, 0x4b, 0xbe,
+ 0x81, 0x29, 0x5a, 0x64, 0x76, 0xe0, 0x26, 0x04, 0xa7, 0x68, 0xa2, 0x2f, 0xc2, 0x68, 0xd4, 0x70,
+ 0x3c, 0x52, 0xbd, 0x3d, 0x77, 0x2e, 0xff, 0xa8, 0xa9, 0x73, 0x94, 0x9c, 0xd5, 0xc5, 0x26, 0x47,
+ 0xa0, 0x60, 0x49, 0x0e, 0xad, 0xc1, 0x30, 0x4b, 0xdf, 0xc2, 0x92, 0x04, 0xe4, 0x04, 0x5b, 0xeb,
+ 0xb2, 0x95, 0xe6, 0x1c, 0x89, 0x15, 0x63, 0x5e, 0x9d, 0xee, 0x01, 0x21, 0xeb, 0x06, 0xd1, 0xdc,
+ 0x85, 0xfc, 0x3d, 0x20, 0x44, 0xe4, 0xdb, 0xf5, 0x5e, 0x7b, 0x40, 0x21, 0xe1, 0x84, 0x28, 0xe5,
+ 0xc7, 0x94, 0x87, 0x3e, 0x96, 0xcf, 0x8f, 0xf3, 0x39, 0x28, 0xe3, 0xc7, 0x94, 0x7f, 0x52, 0x12,
+ 0xf6, 0x1f, 0x8c, 0x76, 0xcb, 0x27, 0xec, 0x76, 0xf4, 0x7d, 0x56, 0x97, 0xe9, 0xc0, 0x67, 0x07,
+ 0x55, 0xd6, 0x9c, 0xa2, 0x64, 0xfa, 0x55, 0x0b, 0x1e, 0x6b, 0x67, 0x7e, 0x88, 0x38, 0xec, 0x07,
+ 0xd3, 0xf9, 0xf0, 0x4f, 0x57, 0x89, 0x3c, 0xb2, 0xe1, 0x38, 0xa7, 0xa5, 0xb4, 0xf4, 0x5f, 0xfc,
+ 0xd0, 0xd2, 0xff, 0x3a, 0x8c, 0x31, 0x81, 0x32, 0x89, 0xec, 0x37, 0x90, 0x01, 0x1e, 0x13, 0x1b,
+ 0x56, 0x44, 0x45, 0xac, 0x48, 0xa0, 0x1f, 0xb6, 0xe0, 0xa9, 0x74, 0xd7, 0x31, 0x61, 0x60, 0x11,
+ 0x25, 0x9a, 0x5f, 0xcc, 0xd6, 0xc4, 0xf7, 0x3f, 0x55, 0xeb, 0x85, 0x7c, 0xdc, 0x0f, 0x01, 0xf7,
+ 0x6e, 0x0c, 0x55, 0x32, 0x6e, 0x86, 0x23, 0xe6, 0xcb, 0xe2, 0x00, 0xb7, 0xc3, 0x57, 0x60, 0x62,
+ 0x2f, 0xe8, 0xf8, 0xd2, 0x3b, 0x46, 0xf8, 0x3e, 0x33, 0x2d, 0xf6, 0xba, 0x56, 0x8e, 0x0d, 0xac,
+ 0xd4, 0x9d, 0x72, 0xec, 0x61, 0xef, 0x94, 0xe8, 0xdd, 0x54, 0x9a, 0xf8, 0x52, 0xbe, 0x6c, 0x21,
+ 0xae, 0xdf, 0x27, 0x48, 0x16, 0x7f, 0xb6, 0xf7, 0xa0, 0xaf, 0x5b, 0x19, 0x02, 0x3c, 0xbf, 0x19,
+ 0x7f, 0xde, 0xbc, 0x19, 0x5f, 0x49, 0xdf, 0x8c, 0xbb, 0x34, 0xa1, 0xc6, 0xa5, 0x78, 0xf0, 0x18,
+ 0xfd, 0x83, 0x06, 0x68, 0xb4, 0x3d, 0xb8, 0xdc, 0xef, 0x58, 0x62, 0xa6, 0x92, 0x4d, 0x65, 0x43,
+ 0x90, 0x98, 0x4a, 0x36, 0xab, 0x15, 0xcc, 0x20, 0x83, 0x46, 0xf0, 0xb1, 0xff, 0xbb, 0x05, 0xc5,
+ 0x5a, 0xd0, 0x3c, 0x03, 0xcd, 0xee, 0x17, 0x0c, 0xcd, 0xee, 0x13, 0x39, 0xe9, 0xfb, 0x73, 0xf5,
+ 0xb8, 0xab, 0x29, 0x3d, 0xee, 0x53, 0x79, 0x04, 0x7a, 0x6b, 0x6d, 0x7f, 0xba, 0x08, 0xe3, 0xb5,
+ 0xa0, 0xa9, 0x6c, 0xee, 0xff, 0xfd, 0xc3, 0xd8, 0xdc, 0xe7, 0xc6, 0x5b, 0xd6, 0x28, 0x33, 0x0b,
+ 0x4b, 0xe9, 0xce, 0xfb, 0x97, 0xcc, 0xf4, 0xfe, 0x1e, 0x71, 0x5b, 0x3b, 0x31, 0x69, 0xa6, 0x3f,
+ 0xe7, 0xec, 0x4c, 0xef, 0xff, 0xab, 0x05, 0xd3, 0xa9, 0xd6, 0x91, 0x97, 0xe5, 0x1b, 0xf8, 0x90,
+ 0x1a, 0xbd, 0xd9, 0xbe, 0xce, 0x84, 0x0b, 0x00, 0xea, 0xd9, 0x4c, 0x6a, 0xbb, 0x98, 0xd4, 0xaf,
+ 0xde, 0xd5, 0x22, 0xac, 0x61, 0xa0, 0x57, 0x61, 0x3c, 0x0e, 0xda, 0x81, 0x17, 0xb4, 0x0e, 0x6e,
+ 0x12, 0x19, 0x33, 0x4a, 0x3d, 0x6e, 0x6e, 0x26, 0x20, 0xac, 0xe3, 0xd9, 0x3f, 0x5b, 0xe4, 0x1f,
+ 0xea, 0xc7, 0xee, 0xb7, 0xd6, 0xe4, 0xc7, 0x7b, 0x4d, 0x7e, 0xd3, 0x82, 0x19, 0xda, 0x3a, 0xb3,
+ 0x5e, 0x93, 0x87, 0xad, 0xca, 0x15, 0x66, 0xf5, 0xc8, 0x15, 0x76, 0x85, 0xf2, 0xae, 0x66, 0xd0,
+ 0x89, 0x85, 0xb6, 0x4c, 0x63, 0x4e, 0xb4, 0x14, 0x0b, 0xa8, 0xc0, 0x23, 0x61, 0x28, 0x3c, 0xfe,
+ 0x74, 0x3c, 0x12, 0x86, 0x58, 0x40, 0x65, 0x2a, 0xb1, 0xa1, 0x9c, 0x54, 0x62, 0x2c, 0x02, 0xa6,
+ 0xb0, 0x98, 0x12, 0x62, 0x8f, 0x16, 0x01, 0x53, 0x9a, 0x52, 0x25, 0x38, 0xf6, 0x2f, 0x14, 0x61,
+ 0xa2, 0x16, 0x34, 0x93, 0x87, 0xab, 0x57, 0x8c, 0x87, 0xab, 0xcb, 0xa9, 0x87, 0xab, 0x19, 0x1d,
+ 0xf7, 0x5b, 0xcf, 0x54, 0x1f, 0xd5, 0x33, 0xd5, 0xbf, 0xb1, 0xd8, 0xac, 0x55, 0x36, 0xea, 0x22,
+ 0x19, 0xf7, 0x4b, 0x30, 0xce, 0x18, 0x12, 0x73, 0x31, 0x95, 0xaf, 0x39, 0x2c, 0xa3, 0xc5, 0x46,
+ 0x52, 0x8c, 0x75, 0x1c, 0x74, 0x15, 0xc6, 0x22, 0xe2, 0x84, 0x8d, 0x1d, 0xc5, 0xe3, 0xc4, 0x5b,
+ 0x07, 0x2f, 0xc3, 0x0a, 0x8a, 0xde, 0x4e, 0x82, 0x2f, 0x16, 0xf3, 0xd3, 0x4a, 0xeb, 0xfd, 0xe1,
+ 0x5b, 0x24, 0x3f, 0xe2, 0xa2, 0x7d, 0x0f, 0x50, 0x37, 0xfe, 0x00, 0x66, 0x64, 0x65, 0x33, 0xcc,
+ 0x5a, 0xa9, 0x2b, 0xc4, 0xda, 0x9f, 0x5b, 0x30, 0x55, 0x0b, 0x9a, 0x74, 0xeb, 0xfe, 0x55, 0xda,
+ 0xa7, 0x7a, 0xe4, 0xd9, 0x91, 0x1e, 0x91, 0x67, 0xff, 0xb1, 0x05, 0xa3, 0xb5, 0xa0, 0x79, 0x06,
+ 0x3a, 0xf6, 0xcf, 0x9b, 0x3a, 0xf6, 0xc7, 0x73, 0x96, 0x44, 0x8e, 0x5a, 0xfd, 0x97, 0x8a, 0x30,
+ 0x49, 0xfb, 0x19, 0xb4, 0xe4, 0x2c, 0x19, 0x23, 0x62, 0x0d, 0x30, 0x22, 0x54, 0xcc, 0x0d, 0x3c,
+ 0x2f, 0xb8, 0x9f, 0x9e, 0xb1, 0x35, 0x56, 0x8a, 0x05, 0x14, 0xbd, 0x00, 0x63, 0xed, 0x90, 0xec,
+ 0xbb, 0x41, 0x27, 0x4a, 0x7b, 0x53, 0xd7, 0x44, 0x39, 0x56, 0x18, 0xf4, 0xde, 0x15, 0xb9, 0x7e,
+ 0x83, 0x48, 0xfb, 0xb2, 0x21, 0x66, 0x5f, 0xc6, 0x43, 0xca, 0x6b, 0xe5, 0xd8, 0xc0, 0x42, 0xf7,
+ 0xa0, 0xc4, 0xfe, 0x33, 0x8e, 0x72, 0xf2, 0x24, 0x67, 0x22, 0x8f, 0x8b, 0x20, 0x80, 0x13, 0x5a,
+ 0xe8, 0x1a, 0x40, 0x2c, 0x2d, 0xe1, 0x22, 0xe1, 0xec, 0xaf, 0x64, 0x6d, 0x65, 0x23, 0x17, 0x61,
+ 0x0d, 0x0b, 0x3d, 0x0f, 0xa5, 0xd8, 0x71, 0xbd, 0x5b, 0xae, 0x4f, 0x22, 0x61, 0x49, 0x28, 0xd2,
+ 0xb4, 0x88, 0x42, 0x9c, 0xc0, 0xa9, 0xac, 0xc3, 0x42, 0x49, 0xf0, 0x14, 0x89, 0x63, 0x0c, 0x9b,
+ 0xc9, 0x3a, 0xb7, 0x54, 0x29, 0xd6, 0x30, 0xec, 0xd7, 0xe1, 0x42, 0x2d, 0x68, 0xd6, 0x82, 0x30,
+ 0x5e, 0x0b, 0xc2, 0xfb, 0x4e, 0xd8, 0x94, 0xf3, 0x57, 0x96, 0x19, 0x43, 0x28, 0xef, 0x19, 0xe6,
+ 0x3b, 0xd3, 0xc8, 0x05, 0xf2, 0x32, 0x93, 0x76, 0x4e, 0xe8, 0xf6, 0xf5, 0xbf, 0x0b, 0x8c, 0x51,
+ 0xa4, 0xf2, 0x76, 0xa2, 0x2f, 0xc3, 0x54, 0x44, 0x6e, 0xb9, 0x7e, 0xe7, 0x81, 0xbc, 0x1f, 0xf7,
+ 0xf0, 0xa9, 0xab, 0xaf, 0xea, 0x98, 0x5c, 0xcb, 0x66, 0x96, 0xe1, 0x14, 0x35, 0x3a, 0x84, 0x61,
+ 0xc7, 0x5f, 0x8a, 0xee, 0x44, 0x24, 0x14, 0x79, 0x23, 0xd9, 0x10, 0x62, 0x59, 0x88, 0x13, 0x38,
+ 0x5d, 0x32, 0xec, 0xcf, 0x46, 0xe0, 0xe3, 0x20, 0x88, 0xe5, 0x22, 0x63, 0x99, 0xc7, 0xb4, 0x72,
+ 0x6c, 0x60, 0xa1, 0x35, 0x40, 0x51, 0xa7, 0xdd, 0xf6, 0xd8, 0x03, 0xb8, 0xe3, 0x5d, 0x0f, 0x83,
+ 0x4e, 0x9b, 0x3f, 0x3e, 0x8a, 0xa4, 0x5d, 0xf5, 0x2e, 0x28, 0xce, 0xa8, 0x41, 0x19, 0xc3, 0x76,
+ 0xc4, 0x7e, 0x8b, 0x68, 0x12, 0x5c, 0xf3, 0x5d, 0x67, 0x45, 0x58, 0xc2, 0xe8, 0x3c, 0xb3, 0xe6,
+ 0x39, 0xe6, 0x48, 0x32, 0xcf, 0x58, 0x95, 0x62, 0x0d, 0xc3, 0xfe, 0x1e, 0x76, 0xc0, 0xb0, 0xf4,
+ 0x80, 0x71, 0x27, 0x24, 0x68, 0x0f, 0x26, 0xdb, 0xec, 0xe8, 0x17, 0x81, 0xd6, 0xc5, 0x80, 0x3f,
+ 0x9c, 0x9d, 0x21, 0x4f, 0x17, 0xa6, 0x93, 0xc3, 0x26, 0x75, 0xfb, 0xa7, 0x67, 0x18, 0x1f, 0xab,
+ 0xf3, 0xeb, 0xdf, 0xa8, 0xf0, 0x1e, 0x10, 0xb2, 0xee, 0x7c, 0xbe, 0x1e, 0x22, 0x39, 0x72, 0x84,
+ 0x07, 0x02, 0x96, 0x75, 0xd1, 0xdb, 0xec, 0x95, 0x97, 0x33, 0x8f, 0x7e, 0x79, 0xc6, 0x39, 0x96,
+ 0xf1, 0xa0, 0x2b, 0x2a, 0x62, 0x8d, 0x08, 0xba, 0x05, 0x93, 0x22, 0x9b, 0x9c, 0x50, 0x34, 0x15,
+ 0x0d, 0x45, 0xc2, 0x24, 0xd6, 0x81, 0xc7, 0xe9, 0x02, 0x6c, 0x56, 0x46, 0x2d, 0x78, 0x4a, 0x4b,
+ 0xad, 0x9a, 0x61, 0xeb, 0xca, 0x79, 0xd1, 0xd3, 0x47, 0x87, 0xe5, 0xa7, 0x36, 0x7b, 0x21, 0xe2,
+ 0xde, 0x74, 0xd0, 0x6d, 0xb8, 0xe0, 0x34, 0x62, 0x77, 0x9f, 0x54, 0x88, 0xd3, 0xf4, 0x5c, 0x9f,
+ 0x98, 0xe1, 0x48, 0x2e, 0x1e, 0x1d, 0x96, 0x2f, 0x2c, 0x65, 0x21, 0xe0, 0xec, 0x7a, 0xe8, 0xf3,
+ 0x50, 0x6a, 0xfa, 0x91, 0x18, 0x83, 0x11, 0x23, 0x6b, 0x70, 0xa9, 0xb2, 0x51, 0x57, 0xdf, 0x9f,
+ 0xfc, 0xc1, 0x49, 0x05, 0xd4, 0xe2, 0xca, 0x26, 0x75, 0xb7, 0x1b, 0xed, 0x8a, 0x31, 0x93, 0xd6,
+ 0x12, 0x18, 0x7e, 0x7a, 0x5c, 0xcb, 0xaa, 0x2c, 0xc9, 0x0d, 0x17, 0x3e, 0x83, 0x30, 0x7a, 0x0b,
+ 0x10, 0x15, 0x7e, 0xdc, 0x06, 0x59, 0x6a, 0xb0, 0x78, 0xf7, 0x4c, 0x37, 0x37, 0x66, 0xb8, 0x45,
+ 0xa1, 0x7a, 0x17, 0x06, 0xce, 0xa8, 0x85, 0x6e, 0x50, 0x0e, 0xa4, 0x97, 0x0a, 0xc3, 0x7f, 0x29,
+ 0x30, 0xcf, 0x55, 0x48, 0x3b, 0x24, 0x0d, 0x27, 0x26, 0x4d, 0x93, 0x22, 0x4e, 0xd5, 0xa3, 0xe7,
+ 0x93, 0x4a, 0x7d, 0x05, 0xa6, 0xb9, 0x7a, 0x77, 0xfa, 0x2b, 0x7a, 0xd7, 0xdc, 0x09, 0xa2, 0x78,
+ 0x83, 0xc4, 0xf7, 0x83, 0x70, 0x57, 0xc4, 0x10, 0x4c, 0xc2, 0xd9, 0x26, 0x20, 0xac, 0xe3, 0x51,
+ 0xd9, 0x92, 0x3d, 0xb3, 0x56, 0x2b, 0xec, 0xd5, 0x6b, 0x2c, 0xd9, 0x27, 0x37, 0x78, 0x31, 0x96,
+ 0x70, 0x89, 0x5a, 0xad, 0xad, 0xb0, 0x17, 0xac, 0x14, 0x6a, 0xb5, 0xb6, 0x82, 0x25, 0x1c, 0x91,
+ 0xee, 0x8c, 0xcc, 0x53, 0xf9, 0x9a, 0xc2, 0x6e, 0x3e, 0x3e, 0x60, 0x52, 0x66, 0x1f, 0x66, 0x54,
+ 0x2e, 0x68, 0x1e, 0x5c, 0x31, 0x9a, 0x9b, 0x66, 0x8b, 0x64, 0xf0, 0xc8, 0x8c, 0x4a, 0xf7, 0x5a,
+ 0x4d, 0x51, 0xc2, 0x5d, 0xb4, 0x8d, 0x30, 0x37, 0x33, 0x7d, 0x53, 0x97, 0x2d, 0x42, 0x29, 0xea,
+ 0x6c, 0x35, 0x83, 0x3d, 0xc7, 0xf5, 0xd9, 0x83, 0x93, 0x26, 0xb8, 0xd4, 0x25, 0x00, 0x27, 0x38,
+ 0x68, 0x0d, 0xc6, 0x1c, 0xa9, 0x58, 0x45, 0xf9, 0x71, 0x2f, 0x94, 0x3a, 0x95, 0x89, 0xe5, 0x4a,
+ 0x95, 0xaa, 0xea, 0xa2, 0x37, 0x60, 0x52, 0xb8, 0x66, 0x0a, 0xab, 0xea, 0x73, 0xa6, 0x17, 0x4f,
+ 0x5d, 0x07, 0x62, 0x13, 0x17, 0x7d, 0x17, 0x4c, 0x51, 0x2a, 0x09, 0x63, 0x9b, 0x3b, 0x3f, 0x08,
+ 0x47, 0xd4, 0x52, 0xd2, 0xe8, 0x95, 0x71, 0x8a, 0x18, 0x6a, 0xc2, 0x93, 0x4e, 0x27, 0x0e, 0x98,
+ 0x72, 0xda, 0x5c, 0xff, 0x9b, 0xc1, 0x2e, 0xf1, 0xd9, 0xbb, 0xd0, 0xd8, 0xf2, 0xe5, 0xa3, 0xc3,
+ 0xf2, 0x93, 0x4b, 0x3d, 0xf0, 0x70, 0x4f, 0x2a, 0xe8, 0x0e, 0x8c, 0xc7, 0x81, 0x27, 0xdc, 0x21,
+ 0xa2, 0xb9, 0xc7, 0xf2, 0xc3, 0x74, 0x6d, 0x2a, 0x34, 0x5d, 0x31, 0xa3, 0xaa, 0x62, 0x9d, 0x0e,
+ 0xda, 0xe4, 0x7b, 0x8c, 0x05, 0x30, 0x26, 0xd1, 0xdc, 0xe3, 0xf9, 0x03, 0xa3, 0xe2, 0x1c, 0x9b,
+ 0x5b, 0x50, 0xd4, 0xc4, 0x3a, 0x19, 0x74, 0x1d, 0x66, 0xdb, 0xa1, 0x1b, 0xb0, 0x85, 0xad, 0x1e,
+ 0x06, 0xe6, 0xcc, 0x2c, 0x24, 0xb5, 0x34, 0x02, 0xee, 0xae, 0x43, 0x2f, 0x6e, 0xb2, 0x70, 0xee,
+ 0x22, 0x4f, 0x69, 0xc7, 0x85, 0x59, 0x5e, 0x86, 0x15, 0x14, 0xad, 0x33, 0xbe, 0xcc, 0xaf, 0x58,
+ 0x73, 0xf3, 0xf9, 0xf1, 0x42, 0xf4, 0xab, 0x18, 0x17, 0x74, 0xd4, 0x5f, 0x9c, 0x50, 0xa0, 0xe7,
+ 0x46, 0xb4, 0xe3, 0x84, 0xa4, 0x16, 0x06, 0x0d, 0xc2, 0x3b, 0xc3, 0xcd, 0xcf, 0x9f, 0xe0, 0x71,
+ 0x56, 0xe9, 0xb9, 0x51, 0xcf, 0x42, 0xc0, 0xd9, 0xf5, 0xe6, 0xbf, 0x1d, 0x66, 0xbb, 0x38, 0xf9,
+ 0x89, 0x4c, 0xe7, 0xff, 0x6c, 0x18, 0x4a, 0x4a, 0xf1, 0x8b, 0x16, 0x4d, 0x7d, 0xfe, 0xc5, 0xb4,
+ 0x3e, 0x7f, 0x8c, 0xca, 0x9f, 0xba, 0x0a, 0x7f, 0xd3, 0x30, 0xfc, 0x2a, 0xe4, 0xa7, 0xba, 0xd3,
+ 0xb5, 0x1e, 0x7d, 0xfd, 0x5c, 0xb5, 0x7b, 0x7c, 0x71, 0xe0, 0x87, 0x81, 0xa1, 0x9e, 0xaa, 0x81,
+ 0x01, 0xb3, 0x77, 0xd3, 0xab, 0x6e, 0x3b, 0x68, 0x56, 0x6b, 0xe9, 0x74, 0xb6, 0x35, 0x5a, 0x88,
+ 0x39, 0x8c, 0x5d, 0x56, 0xa8, 0xd8, 0xc1, 0x2e, 0x2b, 0xa3, 0x0f, 0x79, 0x59, 0x91, 0x04, 0x70,
+ 0x42, 0x0b, 0x79, 0x30, 0xdb, 0x30, 0x33, 0x11, 0x2b, 0xdf, 0xd6, 0x67, 0xfa, 0xe6, 0x04, 0xee,
+ 0x68, 0x29, 0x0a, 0x57, 0xd2, 0x54, 0x70, 0x37, 0x61, 0xf4, 0x06, 0x8c, 0xbd, 0x1f, 0x44, 0x6c,
+ 0x5b, 0x88, 0xb3, 0x57, 0x7a, 0x13, 0x8e, 0xbd, 0x7d, 0xbb, 0xce, 0xca, 0x8f, 0x0f, 0xcb, 0xe3,
+ 0xb5, 0xa0, 0x29, 0xff, 0x62, 0x55, 0x01, 0x3d, 0x80, 0x0b, 0x06, 0xc7, 0x52, 0xdd, 0x85, 0xc1,
+ 0xbb, 0xfb, 0x94, 0x68, 0xee, 0x42, 0x35, 0x8b, 0x12, 0xce, 0x6e, 0x80, 0xb2, 0x01, 0x3f, 0x10,
+ 0x59, 0xbc, 0xe5, 0xf9, 0xce, 0x8e, 0xf1, 0x92, 0x1e, 0x94, 0x21, 0x85, 0x80, 0xbb, 0xeb, 0xd8,
+ 0xdf, 0xe0, 0x7a, 0x72, 0xa1, 0x4d, 0x23, 0x51, 0xc7, 0x3b, 0x8b, 0x84, 0x66, 0xab, 0x86, 0xa2,
+ 0xef, 0xa1, 0xdf, 0x62, 0x7e, 0xc3, 0x62, 0x6f, 0x31, 0x9b, 0x64, 0xaf, 0xed, 0x39, 0xf1, 0x59,
+ 0x78, 0x5e, 0xbc, 0x0d, 0x63, 0xb1, 0x68, 0xad, 0x57, 0x0e, 0x36, 0xad, 0x53, 0xec, 0x3d, 0x4a,
+ 0x9d, 0xfc, 0xb2, 0x14, 0x2b, 0x32, 0xf6, 0xbf, 0xe4, 0x33, 0x20, 0x21, 0x67, 0xa0, 0x74, 0xa9,
+ 0x98, 0x4a, 0x97, 0x72, 0x9f, 0x2f, 0xc8, 0x51, 0xbe, 0xfc, 0x0b, 0xb3, 0xdf, 0xec, 0x92, 0xf5,
+ 0x71, 0x7f, 0x04, 0xb4, 0x7f, 0xdc, 0x82, 0xf3, 0x59, 0x56, 0x33, 0x54, 0x5a, 0xe3, 0x57, 0x3c,
+ 0xf5, 0x28, 0xaa, 0x46, 0xf0, 0xae, 0x28, 0xc7, 0x0a, 0x63, 0xe0, 0xf4, 0x26, 0x27, 0x8b, 0xc1,
+ 0x77, 0x1b, 0xcc, 0xec, 0xd7, 0xe8, 0x4d, 0xee, 0x4a, 0x65, 0xa9, 0xf4, 0xd4, 0x27, 0x73, 0xa3,
+ 0xb2, 0x7f, 0xae, 0x00, 0xe7, 0xf9, 0xab, 0xc6, 0xd2, 0x7e, 0xe0, 0x36, 0x6b, 0x41, 0x53, 0x38,
+ 0x96, 0xbd, 0x03, 0x13, 0x6d, 0xed, 0x5e, 0xde, 0x2b, 0x0a, 0x98, 0x7e, 0x7f, 0x4f, 0xee, 0x47,
+ 0x7a, 0x29, 0x36, 0x68, 0xa1, 0x26, 0x4c, 0x90, 0x7d, 0xb7, 0xa1, 0x54, 0xe3, 0x85, 0x13, 0x9f,
+ 0x0d, 0xaa, 0x95, 0x55, 0x8d, 0x0e, 0x36, 0xa8, 0x3e, 0x82, 0x6c, 0x85, 0xf6, 0x4f, 0x58, 0xf0,
+ 0x78, 0x4e, 0xcc, 0x30, 0xda, 0xdc, 0x7d, 0xf6, 0x7e, 0x24, 0x12, 0x9f, 0xa9, 0xe6, 0xf8, 0xab,
+ 0x12, 0x16, 0x50, 0xf4, 0x45, 0x00, 0xfe, 0x2a, 0x44, 0xaf, 0x0b, 0xe2, 0xd3, 0x07, 0x8b, 0xa5,
+ 0xa3, 0x05, 0x5c, 0x91, 0xf5, 0xb1, 0x46, 0xcb, 0xfe, 0x99, 0x22, 0x0c, 0xb3, 0x57, 0x08, 0xb4,
+ 0x06, 0xa3, 0x3b, 0x3c, 0x42, 0xf9, 0x20, 0xc1, 0xd0, 0x93, 0x7b, 0x17, 0x2f, 0xc0, 0xb2, 0x32,
+ 0x5a, 0x87, 0x73, 0xc2, 0x79, 0xb1, 0x42, 0x3c, 0xe7, 0x40, 0x5e, 0xdf, 0x79, 0xb2, 0x30, 0x95,
+ 0x1e, 0xaf, 0xda, 0x8d, 0x82, 0xb3, 0xea, 0xa1, 0x37, 0xbb, 0xe2, 0x92, 0xf2, 0xd8, 0xee, 0x4a,
+ 0xd8, 0xef, 0x13, 0x9b, 0xf4, 0x0d, 0x98, 0x6c, 0x77, 0x29, 0x2a, 0x86, 0x93, 0x8b, 0x88, 0xa9,
+ 0x9c, 0x30, 0x71, 0x99, 0xb9, 0x4c, 0x87, 0x19, 0x07, 0x6d, 0xee, 0x84, 0x24, 0xda, 0x09, 0xbc,
+ 0xa6, 0xc8, 0xdf, 0x9f, 0x98, 0xcb, 0xa4, 0xe0, 0xb8, 0xab, 0x06, 0xa5, 0xb2, 0xed, 0xb8, 0x5e,
+ 0x27, 0x24, 0x09, 0x95, 0x11, 0x93, 0xca, 0x5a, 0x0a, 0x8e, 0xbb, 0x6a, 0xd0, 0x75, 0x74, 0x41,
+ 0x24, 0x7f, 0x97, 0x21, 0x2d, 0x94, 0x0d, 0xd4, 0xa8, 0x74, 0x6d, 0xe9, 0x11, 0x66, 0x49, 0x58,
+ 0x89, 0xa8, 0xf4, 0xf1, 0x5a, 0x6a, 0x61, 0xe1, 0xd4, 0x22, 0xa9, 0x3c, 0x4c, 0x0a, 0xf2, 0x3f,
+ 0xb0, 0xe0, 0x5c, 0x86, 0xad, 0x25, 0x67, 0x55, 0x2d, 0x37, 0x8a, 0x55, 0x42, 0x24, 0x8d, 0x55,
+ 0xf1, 0x72, 0xac, 0x30, 0xe8, 0x7e, 0xe0, 0xcc, 0x30, 0xcd, 0x00, 0x85, 0x2d, 0x93, 0x80, 0x9e,
+ 0x8c, 0x01, 0xa2, 0xcb, 0x30, 0xd4, 0x89, 0x48, 0x28, 0x73, 0x77, 0x4b, 0xfe, 0xcd, 0x54, 0xa5,
+ 0x0c, 0x42, 0x45, 0xd3, 0x96, 0xd2, 0x52, 0x6a, 0xa2, 0x29, 0x57, 0x3d, 0x72, 0x98, 0xfd, 0xb5,
+ 0x22, 0x5c, 0xcc, 0xb5, 0xa5, 0xa6, 0x5d, 0xda, 0x0b, 0x7c, 0x37, 0x0e, 0xd4, 0x0b, 0x17, 0x8f,
+ 0x07, 0x44, 0xda, 0x3b, 0xeb, 0xa2, 0x1c, 0x2b, 0x0c, 0x74, 0x05, 0x86, 0xd9, 0xcd, 0xbe, 0x2b,
+ 0xe5, 0xd3, 0x72, 0x85, 0x87, 0xa9, 0xe0, 0xe0, 0x81, 0xd3, 0xe9, 0x3d, 0x03, 0x43, 0xed, 0x20,
+ 0xf0, 0xd2, 0xcc, 0x88, 0x76, 0x37, 0x08, 0x3c, 0xcc, 0x80, 0xe8, 0x53, 0x62, 0x1c, 0x52, 0x4f,
+ 0x3a, 0xd8, 0x69, 0x06, 0x91, 0x36, 0x18, 0xcf, 0xc2, 0xe8, 0x2e, 0x39, 0x08, 0x5d, 0xbf, 0x95,
+ 0x7e, 0xea, 0xbb, 0xc9, 0x8b, 0xb1, 0x84, 0x9b, 0x19, 0x4f, 0x46, 0x4f, 0x3b, 0x0f, 0xde, 0x58,
+ 0xdf, 0xa3, 0xed, 0x87, 0x8a, 0x30, 0x8d, 0x97, 0x2b, 0xdf, 0x9a, 0x88, 0x3b, 0xdd, 0x13, 0x71,
+ 0xda, 0x79, 0xf0, 0xfa, 0xcf, 0xc6, 0x2f, 0x59, 0x30, 0xcd, 0xa2, 0x82, 0x8b, 0x78, 0x36, 0x6e,
+ 0xe0, 0x9f, 0x81, 0xe8, 0xf6, 0x0c, 0x0c, 0x87, 0xb4, 0xd1, 0x74, 0x72, 0x2b, 0xd6, 0x13, 0xcc,
+ 0x61, 0xe8, 0x49, 0x18, 0x62, 0x5d, 0xa0, 0x93, 0x37, 0xc1, 0xf3, 0x82, 0x54, 0x9c, 0xd8, 0xc1,
+ 0xac, 0x94, 0x39, 0x16, 0x63, 0xd2, 0xf6, 0x5c, 0xde, 0xe9, 0x44, 0xd5, 0xff, 0xf1, 0x70, 0x2c,
+ 0xce, 0xec, 0xda, 0x87, 0x73, 0x2c, 0xce, 0x26, 0xd9, 0xfb, 0x5a, 0xf4, 0x3f, 0x0a, 0x70, 0x29,
+ 0xb3, 0xde, 0xc0, 0x8e, 0xc5, 0xbd, 0x6b, 0x9f, 0x8e, 0xc5, 0x46, 0xb6, 0x21, 0x45, 0xf1, 0x0c,
+ 0x0d, 0x29, 0x86, 0x06, 0x95, 0x1c, 0x87, 0x07, 0xf0, 0xf7, 0xcd, 0x1c, 0xb2, 0x8f, 0x89, 0xbf,
+ 0x6f, 0x66, 0xdf, 0x72, 0xae, 0x75, 0x7f, 0x51, 0xc8, 0xf9, 0x16, 0x76, 0xc1, 0xbb, 0x4a, 0xf9,
+ 0x0c, 0x03, 0x46, 0x42, 0x12, 0x9e, 0xe0, 0x3c, 0x86, 0x97, 0x61, 0x05, 0x45, 0xae, 0xe6, 0x39,
+ 0x5b, 0xc8, 0x4f, 0x7d, 0x9a, 0xdb, 0xd4, 0x82, 0xf9, 0x32, 0xa3, 0x07, 0xdf, 0x49, 0x7b, 0xd1,
+ 0xae, 0x6b, 0x97, 0xf2, 0xe2, 0xe0, 0x97, 0xf2, 0x89, 0xec, 0x0b, 0x39, 0x5a, 0x82, 0xe9, 0x3d,
+ 0xd7, 0xa7, 0x6c, 0xf3, 0xc0, 0x14, 0x45, 0x55, 0x20, 0x89, 0x75, 0x13, 0x8c, 0xd3, 0xf8, 0xf3,
+ 0x6f, 0xc0, 0xe4, 0xc3, 0xab, 0x23, 0xbf, 0x59, 0x84, 0x27, 0x7a, 0x6c, 0x7b, 0xce, 0xeb, 0x8d,
+ 0x39, 0xd0, 0x78, 0x7d, 0xd7, 0x3c, 0xd4, 0xe0, 0xfc, 0x76, 0xc7, 0xf3, 0x0e, 0x98, 0xad, 0x22,
+ 0x69, 0x4a, 0x0c, 0x21, 0x2b, 0xaa, 0x90, 0xff, 0x6b, 0x19, 0x38, 0x38, 0xb3, 0x26, 0x7a, 0x0b,
+ 0x50, 0x20, 0xf2, 0x2e, 0x27, 0x21, 0x85, 0xd8, 0xc0, 0x17, 0x93, 0xcd, 0x78, 0xbb, 0x0b, 0x03,
+ 0x67, 0xd4, 0xa2, 0x42, 0x3f, 0x3d, 0x95, 0x0e, 0x54, 0xb7, 0x52, 0x42, 0x3f, 0xd6, 0x81, 0xd8,
+ 0xc4, 0x45, 0xd7, 0x61, 0xd6, 0xd9, 0x77, 0x5c, 0x1e, 0x62, 0x52, 0x12, 0xe0, 0x52, 0xbf, 0x52,
+ 0x82, 0x2d, 0xa5, 0x11, 0x70, 0x77, 0x9d, 0x94, 0xeb, 0xee, 0x48, 0xbe, 0xeb, 0x6e, 0x6f, 0xbe,
+ 0xd8, 0x4f, 0xa7, 0x6b, 0xff, 0x67, 0x8b, 0x1e, 0x5f, 0x5c, 0x78, 0x37, 0xc3, 0x6d, 0xbd, 0x01,
+ 0x93, 0x4a, 0x37, 0xa9, 0x79, 0xd1, 0xaa, 0x71, 0x58, 0xd1, 0x81, 0xd8, 0xc4, 0xe5, 0x0b, 0x22,
+ 0x4a, 0x1c, 0x3a, 0x0c, 0xd1, 0x5d, 0xb8, 0xc9, 0x2b, 0x0c, 0xf4, 0x25, 0x18, 0x6d, 0xba, 0xfb,
+ 0x6e, 0x14, 0x84, 0x62, 0xb3, 0x9c, 0xd0, 0x2c, 0x3e, 0xe1, 0x83, 0x15, 0x4e, 0x06, 0x4b, 0x7a,
+ 0xf6, 0x0f, 0x15, 0x60, 0x52, 0xb6, 0xf8, 0x76, 0x27, 0x88, 0x9d, 0x33, 0x38, 0x96, 0xaf, 0x1b,
+ 0xc7, 0xf2, 0xa7, 0x7a, 0xc5, 0x0a, 0x60, 0x5d, 0xca, 0x3d, 0x8e, 0x6f, 0xa7, 0x8e, 0xe3, 0x4f,
+ 0xf7, 0x27, 0xd5, 0xfb, 0x18, 0xfe, 0x57, 0x16, 0xcc, 0x1a, 0xf8, 0x67, 0x70, 0x1a, 0xac, 0x99,
+ 0xa7, 0xc1, 0xd3, 0x7d, 0xbf, 0x21, 0xe7, 0x14, 0xf8, 0x7a, 0x21, 0xd5, 0x77, 0xc6, 0xfd, 0xdf,
+ 0x87, 0xa1, 0x1d, 0x27, 0x6c, 0xf6, 0x0a, 0x94, 0xdc, 0x55, 0x69, 0xe1, 0x86, 0x13, 0x36, 0x39,
+ 0x0f, 0x7f, 0x41, 0x65, 0x6b, 0x75, 0xc2, 0x66, 0x5f, 0xff, 0x25, 0xd6, 0x14, 0x7a, 0x1d, 0x46,
+ 0xa2, 0x46, 0xd0, 0x56, 0xd6, 0x85, 0x97, 0x79, 0x26, 0x57, 0x5a, 0x72, 0x7c, 0x58, 0x46, 0x66,
+ 0x73, 0xb4, 0x18, 0x0b, 0xfc, 0xf9, 0x16, 0x94, 0x54, 0xd3, 0x8f, 0xd4, 0x37, 0xe4, 0x77, 0x8b,
+ 0x70, 0x2e, 0x63, 0x5d, 0xa0, 0xc8, 0x18, 0xad, 0x97, 0x06, 0x5c, 0x4e, 0x1f, 0x72, 0xbc, 0x22,
+ 0x76, 0x63, 0x69, 0x8a, 0xf9, 0x1f, 0xb8, 0xd1, 0x3b, 0x11, 0x49, 0x37, 0x4a, 0x8b, 0xfa, 0x37,
+ 0x4a, 0x1b, 0x3b, 0xb3, 0xa1, 0xa6, 0x0d, 0xa9, 0x9e, 0x3e, 0xd2, 0x39, 0xfd, 0xd3, 0x22, 0x9c,
+ 0xcf, 0x0a, 0x31, 0x82, 0xbe, 0x3b, 0x95, 0x76, 0xe9, 0x95, 0x41, 0x83, 0x93, 0xf0, 0x5c, 0x4c,
+ 0x22, 0x26, 0xdb, 0x82, 0x99, 0x88, 0xa9, 0xef, 0x30, 0x8b, 0x36, 0x99, 0x43, 0x61, 0xc8, 0xd3,
+ 0x65, 0xc9, 0x2d, 0xfe, 0xd9, 0x81, 0x3b, 0x20, 0xf2, 0x6c, 0x45, 0x29, 0x87, 0x42, 0x59, 0xdc,
+ 0xdf, 0xa1, 0x50, 0xb6, 0x3c, 0xef, 0xc2, 0xb8, 0xf6, 0x35, 0x8f, 0x74, 0xc6, 0x77, 0xe9, 0x89,
+ 0xa2, 0xf5, 0xfb, 0x91, 0xce, 0xfa, 0x4f, 0x58, 0x90, 0xb2, 0xe9, 0x53, 0x2a, 0x29, 0x2b, 0x57,
+ 0x25, 0x75, 0x19, 0x86, 0xc2, 0xc0, 0x23, 0xe9, 0x4c, 0x3c, 0x38, 0xf0, 0x08, 0x66, 0x10, 0x8a,
+ 0x11, 0x27, 0x0a, 0x89, 0x09, 0xfd, 0xb2, 0x25, 0xae, 0x51, 0xcf, 0xc0, 0xb0, 0x47, 0xf6, 0x89,
+ 0xd4, 0x46, 0x28, 0x9e, 0x7c, 0x8b, 0x16, 0x62, 0x0e, 0xb3, 0x7f, 0x69, 0x08, 0x9e, 0xea, 0xe9,
+ 0x92, 0x4b, 0xaf, 0x2c, 0x2d, 0x27, 0x26, 0xf7, 0x9d, 0x83, 0x74, 0x9c, 0xf0, 0xeb, 0xbc, 0x18,
+ 0x4b, 0x38, 0xb3, 0x40, 0xe6, 0xa1, 0x46, 0x53, 0x0a, 0x3c, 0x11, 0x61, 0x54, 0x40, 0x4d, 0xc5,
+ 0x51, 0xf1, 0x34, 0x14, 0x47, 0xd7, 0x00, 0xa2, 0xc8, 0x5b, 0xf5, 0xa9, 0x04, 0xd6, 0x14, 0xa6,
+ 0xcd, 0x49, 0x48, 0xda, 0xfa, 0x2d, 0x01, 0xc1, 0x1a, 0x16, 0xaa, 0xc0, 0x4c, 0x3b, 0x0c, 0x62,
+ 0xae, 0x0f, 0xad, 0x70, 0x23, 0x99, 0x61, 0xd3, 0x1b, 0xb2, 0x96, 0x82, 0xe3, 0xae, 0x1a, 0xe8,
+ 0x55, 0x18, 0x17, 0x1e, 0x92, 0xb5, 0x20, 0xf0, 0x84, 0xaa, 0x46, 0x99, 0x5c, 0xd4, 0x13, 0x10,
+ 0xd6, 0xf1, 0xb4, 0x6a, 0x4c, 0xc9, 0x3a, 0x9a, 0x59, 0x8d, 0x2b, 0x5a, 0x35, 0xbc, 0x54, 0xb8,
+ 0xa1, 0xb1, 0x81, 0xc2, 0x0d, 0x25, 0xca, 0xab, 0xd2, 0xc0, 0xef, 0x4a, 0xd0, 0x57, 0xdd, 0xf3,
+ 0xf3, 0x43, 0x70, 0x4e, 0x2c, 0x9c, 0x47, 0xbd, 0x5c, 0xee, 0x74, 0x2f, 0x97, 0xd3, 0x50, 0x6f,
+ 0x7d, 0x6b, 0xcd, 0x9c, 0xf5, 0x9a, 0xf9, 0x46, 0x11, 0x46, 0xf8, 0x54, 0x9c, 0x81, 0x0c, 0xbf,
+ 0x26, 0x94, 0x7e, 0x3d, 0x02, 0xed, 0xf0, 0xbe, 0x2c, 0x54, 0x9c, 0xd8, 0xe1, 0xe7, 0x97, 0x62,
+ 0xa3, 0x89, 0x7a, 0x10, 0x2d, 0x18, 0x8c, 0x76, 0x3e, 0xa5, 0xd5, 0x02, 0x4e, 0x43, 0x63, 0xbb,
+ 0x5f, 0x06, 0x88, 0xe2, 0xd0, 0xf5, 0x5b, 0x94, 0x86, 0x08, 0xd9, 0xf4, 0x5c, 0x8f, 0xd6, 0xeb,
+ 0x0a, 0x99, 0xf7, 0x21, 0x59, 0x82, 0x0a, 0x80, 0x35, 0x8a, 0xf3, 0xaf, 0x41, 0x49, 0x21, 0xf7,
+ 0x53, 0x01, 0x4c, 0xe8, 0xa7, 0xde, 0x17, 0x60, 0x3a, 0xd5, 0xd6, 0x89, 0x34, 0x08, 0xbf, 0x6c,
+ 0xc1, 0x34, 0xef, 0xf2, 0xaa, 0xbf, 0x2f, 0x36, 0xfb, 0x07, 0x70, 0xde, 0xcb, 0xd8, 0x74, 0x62,
+ 0x46, 0x07, 0xdf, 0xa4, 0x4a, 0x63, 0x90, 0x05, 0xc5, 0x99, 0x6d, 0xa0, 0xab, 0x30, 0xc6, 0x5d,
+ 0x76, 0x1c, 0x4f, 0xb8, 0x59, 0x4c, 0xf0, 0xd4, 0x1d, 0xbc, 0x0c, 0x2b, 0xa8, 0xfd, 0x7b, 0x16,
+ 0xcc, 0xf2, 0x9e, 0xdf, 0x24, 0x07, 0xea, 0x76, 0xfc, 0x51, 0xf6, 0x5d, 0x64, 0x26, 0x29, 0xe4,
+ 0x64, 0x26, 0xd1, 0x3f, 0xad, 0xd8, 0xf3, 0xd3, 0x7e, 0xce, 0x02, 0xb1, 0x02, 0xcf, 0xe0, 0x1e,
+ 0xf8, 0xed, 0xe6, 0x3d, 0x70, 0x3e, 0x7f, 0x51, 0xe7, 0x5c, 0x00, 0xff, 0xdc, 0x82, 0x19, 0x8e,
+ 0x90, 0x3c, 0x44, 0x7e, 0xa4, 0xf3, 0x30, 0x48, 0xba, 0x3c, 0x95, 0x9f, 0x3c, 0xfb, 0xa3, 0x8c,
+ 0xc9, 0x1a, 0xea, 0x39, 0x59, 0x4d, 0xb9, 0x81, 0x4e, 0x90, 0x06, 0xf2, 0xc4, 0xc1, 0x74, 0xed,
+ 0x3f, 0xb1, 0x00, 0xf1, 0x66, 0x8c, 0x73, 0x99, 0x9e, 0x76, 0xac, 0x54, 0xd3, 0x04, 0x25, 0xac,
+ 0x46, 0x41, 0xb0, 0x86, 0x75, 0x2a, 0xc3, 0x93, 0x7a, 0x4d, 0x2e, 0xf6, 0x7f, 0x4d, 0x3e, 0xc1,
+ 0x88, 0x7e, 0x63, 0x08, 0xd2, 0x36, 0xda, 0xe8, 0x2e, 0x4c, 0x34, 0x9c, 0xb6, 0xb3, 0xe5, 0x7a,
+ 0x6e, 0xec, 0x92, 0xa8, 0x97, 0x19, 0xca, 0x8a, 0x86, 0x27, 0xde, 0x09, 0xb5, 0x12, 0x6c, 0xd0,
+ 0x41, 0x0b, 0x00, 0xed, 0xd0, 0xdd, 0x77, 0x3d, 0xd2, 0x62, 0x57, 0x61, 0xe6, 0xd8, 0xc5, 0x6d,
+ 0x2b, 0x64, 0x29, 0xd6, 0x30, 0x32, 0x1c, 0x81, 0x8a, 0x8f, 0xce, 0x11, 0x68, 0xe8, 0x84, 0x8e,
+ 0x40, 0xc3, 0x03, 0x39, 0x02, 0x61, 0x78, 0x4c, 0x9e, 0xdd, 0xf4, 0xff, 0x9a, 0xeb, 0x11, 0x21,
+ 0xb0, 0x71, 0x77, 0xaf, 0xf9, 0xa3, 0xc3, 0xf2, 0x63, 0x38, 0x13, 0x03, 0xe7, 0xd4, 0x44, 0x5f,
+ 0x84, 0x39, 0xc7, 0xf3, 0x82, 0xfb, 0x6a, 0xd4, 0x56, 0xa3, 0x86, 0xe3, 0x25, 0xb1, 0xe5, 0xc7,
+ 0x96, 0x9f, 0x3c, 0x3a, 0x2c, 0xcf, 0x2d, 0xe5, 0xe0, 0xe0, 0xdc, 0xda, 0x29, 0x3f, 0xa2, 0xb1,
+ 0xbe, 0x7e, 0x44, 0xbb, 0x70, 0xae, 0x4e, 0x42, 0x99, 0x89, 0x56, 0x6d, 0xc9, 0x4d, 0x28, 0x85,
+ 0x29, 0x26, 0x34, 0x50, 0x0c, 0x18, 0x2d, 0x4e, 0xa8, 0x64, 0x3a, 0x09, 0x21, 0xfb, 0xcf, 0x2c,
+ 0x18, 0x15, 0x76, 0xe2, 0x67, 0x20, 0xfb, 0x2c, 0x19, 0xfa, 0xcb, 0x72, 0x36, 0xa3, 0x66, 0x9d,
+ 0xc9, 0xd5, 0x5c, 0x56, 0x53, 0x9a, 0xcb, 0xa7, 0x7b, 0x11, 0xe9, 0xad, 0xb3, 0xfc, 0xb1, 0x22,
+ 0x4c, 0x99, 0x36, 0xf2, 0x67, 0x30, 0x04, 0x1b, 0x30, 0x1a, 0x09, 0x87, 0x8c, 0x42, 0xbe, 0xe1,
+ 0x6c, 0x7a, 0x12, 0x13, 0xab, 0x18, 0xe1, 0x82, 0x21, 0x89, 0x64, 0x7a, 0x7a, 0x14, 0x1f, 0xa1,
+ 0xa7, 0x47, 0x3f, 0x37, 0x85, 0xa1, 0xd3, 0x70, 0x53, 0xb0, 0x7f, 0x95, 0x1d, 0x16, 0x7a, 0xf9,
+ 0x19, 0xc8, 0x11, 0xd7, 0xcd, 0x63, 0xc5, 0xee, 0xb1, 0xb2, 0x44, 0xa7, 0x72, 0xe4, 0x89, 0x7f,
+ 0x66, 0xc1, 0xb8, 0x40, 0x3c, 0x83, 0x6e, 0x7f, 0x87, 0xd9, 0xed, 0x27, 0x7a, 0x74, 0x3b, 0xa7,
+ 0xbf, 0xff, 0xa0, 0xa0, 0xfa, 0x5b, 0x0b, 0xc2, 0x78, 0xa0, 0xdc, 0x24, 0x63, 0xf4, 0xf6, 0x18,
+ 0x34, 0x02, 0x4f, 0x1c, 0xfe, 0x4f, 0x26, 0x1e, 0xc2, 0xbc, 0xfc, 0x58, 0xfb, 0x8d, 0x15, 0x36,
+ 0x73, 0x60, 0x0d, 0xc2, 0x58, 0x1c, 0xb8, 0x89, 0x03, 0x6b, 0x10, 0xc6, 0x98, 0x41, 0x50, 0x13,
+ 0x20, 0x76, 0xc2, 0x16, 0x89, 0x69, 0x99, 0x08, 0x36, 0x90, 0xbf, 0x0b, 0x3b, 0xb1, 0xeb, 0x2d,
+ 0xb8, 0x7e, 0x1c, 0xc5, 0xe1, 0x42, 0xd5, 0x8f, 0x6f, 0x87, 0xfc, 0x2e, 0xa1, 0xb9, 0xfc, 0x2a,
+ 0x5a, 0x58, 0xa3, 0x2b, 0x7d, 0xc8, 0x58, 0x1b, 0xc3, 0xe6, 0xc3, 0xe2, 0x86, 0x28, 0xc7, 0x0a,
+ 0xc3, 0x7e, 0x8d, 0xf1, 0x64, 0x36, 0x40, 0x27, 0xf3, 0xc6, 0xfd, 0xed, 0x31, 0x35, 0xb4, 0xec,
+ 0x55, 0xa1, 0xa2, 0xfb, 0xfc, 0xf6, 0x66, 0x81, 0xb4, 0x61, 0xdd, 0x1f, 0x21, 0x71, 0x0c, 0x46,
+ 0xdf, 0xd9, 0xf5, 0xde, 0xfc, 0x62, 0x1f, 0x5e, 0x7a, 0x82, 0x17, 0x66, 0x16, 0xe0, 0x96, 0x05,
+ 0x02, 0xad, 0xd6, 0xd2, 0xd9, 0x63, 0x56, 0x24, 0x00, 0x27, 0x38, 0x68, 0x51, 0xdc, 0x44, 0xb9,
+ 0x3e, 0xef, 0x89, 0xd4, 0x4d, 0x54, 0x7e, 0xbe, 0x76, 0x15, 0x7d, 0x09, 0xc6, 0x55, 0x46, 0xbe,
+ 0x1a, 0x4f, 0x6c, 0x26, 0x42, 0x2f, 0xac, 0x26, 0xc5, 0x58, 0xc7, 0x41, 0x9b, 0x30, 0x1d, 0xf1,
+ 0x74, 0x81, 0x2a, 0xc2, 0x16, 0xd7, 0x33, 0x3c, 0x27, 0xdf, 0xa9, 0xeb, 0x26, 0xf8, 0x98, 0x15,
+ 0xf1, 0xcd, 0x2a, 0x1d, 0xc1, 0xd2, 0x24, 0xd0, 0x9b, 0x30, 0xe5, 0xe9, 0x69, 0xd3, 0x6b, 0x42,
+ 0x0d, 0xa1, 0xcc, 0x38, 0x8d, 0xa4, 0xea, 0x35, 0x9c, 0xc2, 0xa6, 0x42, 0x83, 0x5e, 0x22, 0xa2,
+ 0xc2, 0x39, 0x7e, 0x8b, 0x44, 0x22, 0x9f, 0x18, 0x13, 0x1a, 0x6e, 0xe5, 0xe0, 0xe0, 0xdc, 0xda,
+ 0xe8, 0x75, 0x98, 0x90, 0x9f, 0xaf, 0xb9, 0x39, 0x26, 0xc6, 0xc2, 0x1a, 0x0c, 0x1b, 0x98, 0xe8,
+ 0x3e, 0x5c, 0x90, 0xff, 0x37, 0x43, 0x67, 0x7b, 0xdb, 0x6d, 0x08, 0x2f, 0x53, 0xee, 0x31, 0xb1,
+ 0x24, 0x5d, 0x30, 0x56, 0xb3, 0x90, 0x8e, 0x0f, 0xcb, 0x97, 0xc5, 0xa8, 0x65, 0xc2, 0xd9, 0x24,
+ 0x66, 0xd3, 0x47, 0xeb, 0x70, 0x6e, 0x87, 0x38, 0x5e, 0xbc, 0xb3, 0xb2, 0x43, 0x1a, 0xbb, 0x72,
+ 0x13, 0x31, 0xe7, 0x49, 0xcd, 0xc4, 0xf6, 0x46, 0x37, 0x0a, 0xce, 0xaa, 0x87, 0xde, 0x85, 0xb9,
+ 0x76, 0x67, 0xcb, 0x73, 0xa3, 0x9d, 0x8d, 0x20, 0x66, 0x4f, 0xe3, 0x2a, 0xa1, 0x9d, 0xf0, 0xb2,
+ 0x54, 0x8e, 0xa3, 0xb5, 0x1c, 0x3c, 0x9c, 0x4b, 0x01, 0x7d, 0x00, 0x17, 0x52, 0x8b, 0x41, 0xf8,
+ 0x7c, 0x4d, 0xe5, 0xc7, 0xd8, 0xac, 0x67, 0x55, 0x10, 0x3e, 0x5c, 0x59, 0x20, 0x9c, 0xdd, 0xc4,
+ 0x87, 0x33, 0x98, 0x78, 0x9f, 0x56, 0xd6, 0xa4, 0x1b, 0xf4, 0x15, 0x98, 0xd0, 0x57, 0x91, 0x38,
+ 0x60, 0xae, 0x64, 0x1f, 0xfe, 0xda, 0x6a, 0xe3, 0xb2, 0x91, 0x5a, 0x51, 0x3a, 0x0c, 0x1b, 0x14,
+ 0x6d, 0x02, 0xd9, 0xdf, 0x87, 0x6e, 0xc1, 0x58, 0xc3, 0x73, 0x89, 0x1f, 0x57, 0x6b, 0xbd, 0xa2,
+ 0x09, 0xac, 0x08, 0x1c, 0x31, 0x60, 0x22, 0x28, 0x21, 0x2f, 0xc3, 0x8a, 0x82, 0xfd, 0xeb, 0x05,
+ 0x28, 0xf7, 0x89, 0x70, 0x99, 0xd2, 0x19, 0x5a, 0x03, 0xe9, 0x0c, 0x97, 0x64, 0x7a, 0xbe, 0x8d,
+ 0xd4, 0x7d, 0x35, 0x95, 0x7a, 0x2f, 0xb9, 0xb5, 0xa6, 0xf1, 0x07, 0xb6, 0xb3, 0xd4, 0xd5, 0x8e,
+ 0x43, 0x7d, 0x2d, 0x80, 0x8d, 0xe7, 0x86, 0xe1, 0xc1, 0x25, 0xfa, 0x5c, 0xd5, 0xb1, 0xfd, 0xab,
+ 0x05, 0xb8, 0xa0, 0x86, 0xf0, 0xaf, 0xee, 0xc0, 0xdd, 0xe9, 0x1e, 0xb8, 0x53, 0x50, 0xbc, 0xdb,
+ 0xb7, 0x61, 0xa4, 0x7e, 0x10, 0x35, 0x62, 0x6f, 0x00, 0x01, 0xe8, 0x19, 0x33, 0xaa, 0x8e, 0x3a,
+ 0xa6, 0x8d, 0xc8, 0x3a, 0x7f, 0xd3, 0x82, 0xe9, 0xcd, 0x95, 0x5a, 0x3d, 0x68, 0xec, 0x92, 0x78,
+ 0x89, 0xab, 0x95, 0xb0, 0x90, 0x7f, 0xac, 0x87, 0x94, 0x6b, 0xb2, 0x24, 0xa6, 0xcb, 0x30, 0xb4,
+ 0x13, 0x44, 0x71, 0xfa, 0x55, 0xee, 0x46, 0x10, 0xc5, 0x98, 0x41, 0xec, 0xdf, 0xb7, 0x60, 0x98,
+ 0x25, 0x95, 0xed, 0x97, 0x7c, 0x78, 0x90, 0xef, 0x42, 0xaf, 0xc2, 0x08, 0xd9, 0xde, 0x26, 0x8d,
+ 0x58, 0xcc, 0xaa, 0x74, 0xeb, 0x1b, 0x59, 0x65, 0xa5, 0xf4, 0xd0, 0x67, 0x8d, 0xf1, 0xbf, 0x58,
+ 0x20, 0xa3, 0x7b, 0x50, 0x8a, 0xdd, 0x3d, 0xb2, 0xd4, 0x6c, 0x8a, 0x77, 0x8d, 0x87, 0xf0, 0xa2,
+ 0xdc, 0x94, 0x04, 0x70, 0x42, 0xcb, 0xfe, 0x5a, 0x01, 0x20, 0x71, 0x4d, 0xee, 0xf7, 0x89, 0xcb,
+ 0x5d, 0xf9, 0x95, 0xaf, 0x64, 0xe4, 0x57, 0x46, 0x09, 0xc1, 0x8c, 0xec, 0xca, 0x6a, 0x98, 0x8a,
+ 0x03, 0x0d, 0xd3, 0xd0, 0x49, 0x86, 0x69, 0x05, 0x66, 0x13, 0xd7, 0x6a, 0x33, 0xce, 0x04, 0x8b,
+ 0x78, 0xbf, 0x99, 0x06, 0xe2, 0x6e, 0x7c, 0xfb, 0x07, 0x2c, 0x10, 0xee, 0x09, 0x03, 0x2c, 0xe6,
+ 0x77, 0x64, 0x2a, 0x54, 0x23, 0x50, 0xee, 0xe5, 0x7c, 0x7f, 0x0d, 0x11, 0x1e, 0x57, 0x1d, 0x1e,
+ 0x46, 0x50, 0x5c, 0x83, 0x96, 0xdd, 0x04, 0x01, 0xad, 0x10, 0xa6, 0x64, 0xe8, 0xdf, 0x9b, 0x6b,
+ 0x00, 0x4d, 0x86, 0xab, 0xa5, 0x56, 0x54, 0xac, 0xaa, 0xa2, 0x20, 0x58, 0xc3, 0xb2, 0x7f, 0xa4,
+ 0x00, 0xe3, 0x32, 0x30, 0x2b, 0xbd, 0xc7, 0xf7, 0x6f, 0xe5, 0x44, 0x59, 0x19, 0x58, 0x2e, 0x52,
+ 0x4a, 0x58, 0x05, 0xef, 0xd7, 0x73, 0x91, 0x4a, 0x00, 0x4e, 0x70, 0xd0, 0xb3, 0x30, 0x1a, 0x75,
+ 0xb6, 0x18, 0x7a, 0xca, 0xe8, 0xbe, 0xce, 0x8b, 0xb1, 0x84, 0xa3, 0x2f, 0xc2, 0x0c, 0xaf, 0x17,
+ 0x06, 0x6d, 0xa7, 0xc5, 0x35, 0x4e, 0xc3, 0xca, 0x0b, 0x6e, 0x66, 0x3d, 0x05, 0x3b, 0x3e, 0x2c,
+ 0x9f, 0x4f, 0x97, 0x31, 0x5d, 0x65, 0x17, 0x15, 0xfb, 0x2b, 0x80, 0xba, 0x63, 0xcd, 0xa2, 0xb7,
+ 0xb8, 0x59, 0x85, 0x1b, 0x92, 0x66, 0x2f, 0x25, 0xa4, 0xee, 0xb4, 0x25, 0x0d, 0x5f, 0x79, 0x2d,
+ 0xac, 0xea, 0xd3, 0x9d, 0x37, 0x93, 0x76, 0xe1, 0x41, 0x37, 0x60, 0x84, 0x33, 0x55, 0x41, 0xbe,
+ 0xc7, 0x1b, 0x97, 0xe6, 0xf8, 0xc3, 0x02, 0xe1, 0x0b, 0xbe, 0x2c, 0xea, 0xa3, 0x77, 0x61, 0xbc,
+ 0x19, 0xdc, 0xf7, 0xef, 0x3b, 0x61, 0x73, 0xa9, 0x56, 0x15, 0xeb, 0x32, 0x53, 0x36, 0xab, 0x24,
+ 0x68, 0xba, 0x33, 0x11, 0xd3, 0xe7, 0x26, 0x20, 0xac, 0x93, 0x43, 0x9b, 0x2c, 0x7e, 0xd6, 0xb6,
+ 0xdb, 0x5a, 0x77, 0xda, 0xbd, 0xec, 0xe0, 0x56, 0x24, 0x92, 0x46, 0x79, 0x52, 0x04, 0xd9, 0xe2,
+ 0x00, 0x9c, 0x10, 0xb2, 0xbf, 0x7a, 0x0e, 0x8c, 0xfd, 0x60, 0xe4, 0x7d, 0xb0, 0x4e, 0x29, 0xef,
+ 0x03, 0x86, 0x31, 0xb2, 0xd7, 0x8e, 0x0f, 0x2a, 0x6e, 0xd8, 0x2b, 0x71, 0xd0, 0xaa, 0xc0, 0xe9,
+ 0xa6, 0x29, 0x21, 0x58, 0xd1, 0xc9, 0x4e, 0xce, 0x51, 0xfc, 0x08, 0x93, 0x73, 0x0c, 0x9d, 0x61,
+ 0x72, 0x8e, 0x0d, 0x18, 0x6d, 0xb9, 0x31, 0x26, 0xed, 0x40, 0x08, 0x14, 0x99, 0x2b, 0xe1, 0x3a,
+ 0x47, 0xe9, 0x0e, 0x0d, 0x2f, 0x00, 0x58, 0x12, 0x41, 0x6f, 0xa9, 0x3d, 0x30, 0x92, 0x2f, 0x8f,
+ 0x77, 0x3f, 0x87, 0x64, 0xee, 0x02, 0x91, 0x8c, 0x63, 0xf4, 0x61, 0x93, 0x71, 0xac, 0xc9, 0x14,
+ 0x1a, 0x63, 0xf9, 0x66, 0xa3, 0x2c, 0x43, 0x46, 0x9f, 0xc4, 0x19, 0x46, 0xb2, 0x91, 0xd2, 0xe9,
+ 0x25, 0x1b, 0xf9, 0x01, 0x0b, 0x2e, 0xb4, 0xb3, 0xf2, 0xee, 0x88, 0x14, 0x18, 0xaf, 0x0e, 0x9c,
+ 0x58, 0xc8, 0x68, 0x90, 0x5d, 0xcc, 0x32, 0xd1, 0x70, 0x76, 0x73, 0x74, 0xa0, 0xc3, 0xad, 0xa6,
+ 0xc8, 0x9b, 0xf1, 0x4c, 0x4e, 0xd6, 0x92, 0x1e, 0xb9, 0x4a, 0x36, 0x33, 0x72, 0x65, 0x7c, 0x32,
+ 0x2f, 0x57, 0xc6, 0xc0, 0x19, 0x32, 0x92, 0x7c, 0x25, 0x93, 0x1f, 0x3a, 0x5f, 0xc9, 0x5b, 0x2a,
+ 0x5f, 0x49, 0x8f, 0xa8, 0x43, 0x3c, 0x1b, 0x49, 0xdf, 0x2c, 0x25, 0x5a, 0xa6, 0x91, 0xe9, 0xd3,
+ 0xc9, 0x34, 0x62, 0x30, 0x7b, 0x9e, 0xec, 0xe2, 0xf9, 0x3e, 0xcc, 0xde, 0xa0, 0xdb, 0x9b, 0xdd,
+ 0xf3, 0xac, 0x2a, 0xb3, 0x0f, 0x95, 0x55, 0xe5, 0xae, 0x9e, 0xa5, 0x04, 0xf5, 0x49, 0xc3, 0x41,
+ 0x91, 0x06, 0xcc, 0x4d, 0x72, 0x57, 0x3f, 0x82, 0xce, 0xe5, 0xd3, 0x55, 0x27, 0x4d, 0x37, 0xdd,
+ 0xac, 0x43, 0xa8, 0x3b, 0xe7, 0xc9, 0xf9, 0xb3, 0xc9, 0x79, 0x72, 0xe1, 0xd4, 0x73, 0x9e, 0x3c,
+ 0x76, 0x06, 0x39, 0x4f, 0x1e, 0xff, 0x48, 0x73, 0x9e, 0xcc, 0x3d, 0x82, 0x9c, 0x27, 0x1b, 0x49,
+ 0xce, 0x93, 0x8b, 0xf9, 0x53, 0x92, 0x61, 0x27, 0x97, 0x93, 0xe9, 0xe4, 0x2e, 0x94, 0xda, 0xd2,
+ 0xcb, 0x5b, 0x84, 0x45, 0xca, 0x4e, 0xb6, 0x98, 0xe5, 0x0a, 0xce, 0xa7, 0x44, 0x81, 0x70, 0x42,
+ 0x8a, 0xd2, 0x4d, 0x32, 0x9f, 0x3c, 0xd1, 0x43, 0xf5, 0x96, 0xa5, 0xd4, 0xc8, 0xcf, 0x77, 0x62,
+ 0xff, 0xad, 0x02, 0x5c, 0xea, 0xbd, 0xae, 0x13, 0x8d, 0x48, 0x2d, 0xd1, 0xe0, 0xa7, 0x34, 0x22,
+ 0xfc, 0x9a, 0x91, 0x60, 0x0d, 0x1c, 0x0a, 0xe3, 0x3a, 0xcc, 0x2a, 0x03, 0x39, 0xcf, 0x6d, 0x1c,
+ 0x68, 0x49, 0x18, 0x95, 0xb3, 0x4e, 0x3d, 0x8d, 0x80, 0xbb, 0xeb, 0xa0, 0x25, 0x98, 0x36, 0x0a,
+ 0xab, 0x15, 0x71, 0x9d, 0x50, 0x2a, 0x98, 0xba, 0x09, 0xc6, 0x69, 0x7c, 0xfb, 0xeb, 0x16, 0x3c,
+ 0x9e, 0x13, 0x0e, 0x7c, 0xe0, 0x48, 0x0f, 0xdb, 0x30, 0xdd, 0x36, 0xab, 0xf6, 0x09, 0x08, 0x63,
+ 0x04, 0x1d, 0x57, 0x7d, 0x4d, 0x01, 0x70, 0x9a, 0xe8, 0xf2, 0xd5, 0xdf, 0xfc, 0xc3, 0x4b, 0x9f,
+ 0xf8, 0x9d, 0x3f, 0xbc, 0xf4, 0x89, 0xdf, 0xfb, 0xc3, 0x4b, 0x9f, 0xf8, 0xeb, 0x47, 0x97, 0xac,
+ 0xdf, 0x3c, 0xba, 0x64, 0xfd, 0xce, 0xd1, 0x25, 0xeb, 0xf7, 0x8e, 0x2e, 0x59, 0x7f, 0x70, 0x74,
+ 0xc9, 0xfa, 0xda, 0x1f, 0x5d, 0xfa, 0xc4, 0x3b, 0x85, 0xfd, 0x97, 0xfe, 0x7f, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xcc, 0x93, 0x27, 0x7c, 0x56, 0xe4, 0x00, 0x00,
}
diff --git a/vendor/k8s.io/api/core/v1/generated.proto b/vendor/k8s.io/api/core/v1/generated.proto
index 077363cff..bfc1fe79b 100644
--- a/vendor/k8s.io/api/core/v1/generated.proto
+++ b/vendor/k8s.io/api/core/v1/generated.proto
@@ -188,7 +188,7 @@ message CSIPersistentVolumeSource {
// Filesystem type to mount.
// Must be a filesystem type supported by the host operating system.
- // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ // Ex. "ext4", "xfs", "ntfs".
// +optional
optional string fsType = 4;
@@ -2964,6 +2964,14 @@ message PodSecurityContext {
// +optional
optional int64 runAsUser = 2;
+ // The GID to run the entrypoint of the container process.
+ // Uses runtime default if unset.
+ // May also be set in SecurityContext. If set in both SecurityContext and
+ // PodSecurityContext, the value specified in SecurityContext takes precedence
+ // for that container.
+ // +optional
+ optional int64 runAsGroup = 6;
+
// Indicates that the container must run as a non-root user.
// If true, the Kubelet will validate the image at runtime to ensure that it
// does not run as UID 0 (root) and fail to start the container if it does.
@@ -4024,6 +4032,13 @@ message SecurityContext {
// +optional
optional int64 runAsUser = 4;
+ // The GID to run the entrypoint of the container process.
+ // Uses runtime default if unset.
+ // May also be set in PodSecurityContext. If set in both SecurityContext and
+ // PodSecurityContext, the value specified in SecurityContext takes precedence.
+ // +optional
+ optional int64 runAsGroup = 8;
+
// Indicates that the container must run as a non-root user.
// If true, the Kubelet will validate the image at runtime to ensure that it
// does not run as UID 0 (root) and fail to start the container if it does.
@@ -4493,9 +4508,8 @@ message VolumeMount {
// mountPropagation determines how mounts are propagated from the host
// to container and the other way around.
- // When not set, MountPropagationHostToContainer is used.
- // This field is alpha in 1.8 and can be reworked or removed in a future
- // release.
+ // When not set, MountPropagationNone is used.
+ // This field is beta in 1.10.
// +optional
optional string mountPropagation = 5;
}
diff --git a/vendor/k8s.io/api/core/v1/types.go b/vendor/k8s.io/api/core/v1/types.go
index 5704983e9..36f456702 100644
--- a/vendor/k8s.io/api/core/v1/types.go
+++ b/vendor/k8s.io/api/core/v1/types.go
@@ -1746,7 +1746,7 @@ type CSIPersistentVolumeSource struct {
// Filesystem type to mount.
// Must be a filesystem type supported by the host operating system.
- // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ // Ex. "ext4", "xfs", "ntfs".
// +optional
FSType string `json:"fsType,omitempty" protobuf:"bytes,4,opt,name=fsType"`
@@ -1821,9 +1821,8 @@ type VolumeMount struct {
SubPath string `json:"subPath,omitempty" protobuf:"bytes,4,opt,name=subPath"`
// mountPropagation determines how mounts are propagated from the host
// to container and the other way around.
- // When not set, MountPropagationHostToContainer is used.
- // This field is alpha in 1.8 and can be reworked or removed in a future
- // release.
+ // When not set, MountPropagationNone is used.
+ // This field is beta in 1.10.
// +optional
MountPropagation *MountPropagationMode `json:"mountPropagation,omitempty" protobuf:"bytes,5,opt,name=mountPropagation,casttype=MountPropagationMode"`
}
@@ -1832,6 +1831,12 @@ type VolumeMount struct {
type MountPropagationMode string
const (
+ // MountPropagationNone means that the volume in a container will
+ // not receive new mounts from the host or other containers, and filesystems
+ // mounted inside the container won't be propagated to the host or other
+ // containers.
+ // Note that this mode corresponds to "private" in Linux terminology.
+ MountPropagationNone MountPropagationMode = "None"
// MountPropagationHostToContainer means that the volume in a container will
// receive new mounts from the host or other containers, but filesystems
// mounted inside the container won't be propagated to the host or other
@@ -2983,6 +2988,13 @@ type PodSecurityContext struct {
// for that container.
// +optional
RunAsUser *int64 `json:"runAsUser,omitempty" protobuf:"varint,2,opt,name=runAsUser"`
+ // The GID to run the entrypoint of the container process.
+ // Uses runtime default if unset.
+ // May also be set in SecurityContext. If set in both SecurityContext and
+ // PodSecurityContext, the value specified in SecurityContext takes precedence
+ // for that container.
+ // +optional
+ RunAsGroup *int64 `json:"runAsGroup,omitempty" protobuf:"varint,6,opt,name=runAsGroup"`
// Indicates that the container must run as a non-root user.
// If true, the Kubelet will validate the image at runtime to ensure that it
// does not run as UID 0 (root) and fail to start the container if it does.
@@ -5165,6 +5177,12 @@ type SecurityContext struct {
// PodSecurityContext, the value specified in SecurityContext takes precedence.
// +optional
RunAsUser *int64 `json:"runAsUser,omitempty" protobuf:"varint,4,opt,name=runAsUser"`
+ // The GID to run the entrypoint of the container process.
+ // Uses runtime default if unset.
+ // May also be set in PodSecurityContext. If set in both SecurityContext and
+ // PodSecurityContext, the value specified in SecurityContext takes precedence.
+ // +optional
+ RunAsGroup *int64 `json:"runAsGroup,omitempty" protobuf:"varint,8,opt,name=runAsGroup"`
// Indicates that the container must run as a non-root user.
// If true, the Kubelet will validate the image at runtime to ensure that it
// does not run as UID 0 (root) and fail to start the container if it does.
diff --git a/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go
index 19d5de8c7..83433be48 100644
--- a/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go
+++ b/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go
@@ -121,7 +121,7 @@ var map_CSIPersistentVolumeSource = map[string]string{
"driver": "Driver is the name of the driver to use for this volume. Required.",
"volumeHandle": "VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.",
"readOnly": "Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).",
- "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
+ "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\".",
"volumeAttributes": "Attributes of the volume to publish.",
"controllerPublishSecretRef": "ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
"nodeStageSecretRef": "NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.",
@@ -1475,6 +1475,7 @@ var map_PodSecurityContext = map[string]string{
"": "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.",
"seLinuxOptions": "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.",
"runAsUser": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.",
+ "runAsGroup": "The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.",
"runAsNonRoot": "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.",
"supplementalGroups": "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container.",
"fsGroup": "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw ",
@@ -1957,6 +1958,7 @@ var map_SecurityContext = map[string]string{
"privileged": "Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.",
"seLinuxOptions": "The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.",
"runAsUser": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.",
+ "runAsGroup": "The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.",
"runAsNonRoot": "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.",
"readOnlyRootFilesystem": "Whether this container has a read-only root filesystem. Default is false.",
"allowPrivilegeEscalation": "AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN",
@@ -2175,7 +2177,7 @@ var map_VolumeMount = map[string]string{
"readOnly": "Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.",
"mountPath": "Path within the container at which the volume should be mounted. Must not contain ':'.",
"subPath": "Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).",
- "mountPropagation": "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationHostToContainer is used. This field is alpha in 1.8 and can be reworked or removed in a future release.",
+ "mountPropagation": "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.",
}
func (VolumeMount) SwaggerDoc() map[string]string {
diff --git a/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go
index c04a105ad..ebdcb890d 100644
--- a/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go
+++ b/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go
@@ -3834,6 +3834,15 @@ func (in *PodSecurityContext) DeepCopyInto(out *PodSecurityContext) {
**out = **in
}
}
+ if in.RunAsGroup != nil {
+ in, out := &in.RunAsGroup, &out.RunAsGroup
+ if *in == nil {
+ *out = nil
+ } else {
+ *out = new(int64)
+ **out = **in
+ }
+ }
if in.RunAsNonRoot != nil {
in, out := &in.RunAsNonRoot, &out.RunAsNonRoot
if *in == nil {
@@ -5067,6 +5076,15 @@ func (in *SecurityContext) DeepCopyInto(out *SecurityContext) {
**out = **in
}
}
+ if in.RunAsGroup != nil {
+ in, out := &in.RunAsGroup, &out.RunAsGroup
+ if *in == nil {
+ *out = nil
+ } else {
+ *out = new(int64)
+ **out = **in
+ }
+ }
if in.RunAsNonRoot != nil {
in, out := &in.RunAsNonRoot, &out.RunAsNonRoot
if *in == nil {
diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/api/resource/zz_generated.deepcopy.go
index 186d9007e..fc36d9811 100644
--- a/vendor/k8s.io/apimachinery/pkg/api/resource/zz_generated.deepcopy.go
+++ b/vendor/k8s.io/apimachinery/pkg/api/resource/zz_generated.deepcopy.go
@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-// This file was autogenerated by deepcopy-gen. Do not edit it manually!
+// Code generated by deepcopy-gen. DO NOT EDIT.
package resource
diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go
index 2aa209025..73308d86e 100644
--- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go
+++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go
@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-// This file was autogenerated by deepcopy-gen. Do not edit it manually!
+// Code generated by deepcopy-gen. DO NOT EDIT.
package v1
@@ -57,9 +57,8 @@ func (in *APIGroup) DeepCopy() *APIGroup {
func (in *APIGroup) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -90,9 +89,8 @@ func (in *APIGroupList) DeepCopy() *APIGroupList {
func (in *APIGroupList) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -154,9 +152,8 @@ func (in *APIResourceList) DeepCopy() *APIResourceList {
func (in *APIResourceList) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -190,9 +187,8 @@ func (in *APIVersions) DeepCopy() *APIVersions {
func (in *APIVersions) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -252,9 +248,8 @@ func (in *DeleteOptions) DeepCopy() *DeleteOptions {
func (in *DeleteOptions) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -294,9 +289,8 @@ func (in *ExportOptions) DeepCopy() *ExportOptions {
func (in *ExportOptions) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -320,9 +314,8 @@ func (in *GetOptions) DeepCopy() *GetOptions {
func (in *GetOptions) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -568,9 +561,8 @@ func (in *List) DeepCopy() *List {
func (in *List) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -619,9 +611,8 @@ func (in *ListOptions) DeepCopy() *ListOptions {
func (in *ListOptions) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MicroTime.
@@ -643,8 +634,7 @@ func (in *ObjectMeta) DeepCopyInto(out *ObjectMeta) {
if *in == nil {
*out = nil
} else {
- *out = new(Time)
- (*in).DeepCopyInto(*out)
+ *out = (*in).DeepCopy()
}
}
if in.DeletionGracePeriodSeconds != nil {
@@ -847,9 +837,8 @@ func (in *Status) DeepCopy() *Status {
func (in *Status) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -916,6 +905,26 @@ func (in *Timestamp) DeepCopy() *Timestamp {
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in Verbs) DeepCopyInto(out *Verbs) {
+ {
+ in := &in
+ *out = make(Verbs, len(*in))
+ copy(*out, *in)
+ return
+ }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Verbs.
+func (in Verbs) DeepCopy() Verbs {
+ if in == nil {
+ return nil
+ }
+ out := new(Verbs)
+ in.DeepCopyInto(out)
+ return *out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *WatchEvent) DeepCopyInto(out *WatchEvent) {
*out = *in
in.Object.DeepCopyInto(&out.Object)
@@ -936,7 +945,6 @@ func (in *WatchEvent) DeepCopy() *WatchEvent {
func (in *WatchEvent) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.defaults.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.defaults.go
index 88d7af085..40d9ab00e 100644
--- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.defaults.go
+++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.defaults.go
@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-// This file was autogenerated by defaulter-gen. Do not edit it manually!
+// Code generated by defaulter-gen. DO NOT EDIT.
package v1
diff --git a/vendor/k8s.io/apimachinery/pkg/labels/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/labels/zz_generated.deepcopy.go
index d22cddbff..a536f9ec9 100644
--- a/vendor/k8s.io/apimachinery/pkg/labels/zz_generated.deepcopy.go
+++ b/vendor/k8s.io/apimachinery/pkg/labels/zz_generated.deepcopy.go
@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-// This file was autogenerated by deepcopy-gen. Do not edit it manually!
+// Code generated by deepcopy-gen. DO NOT EDIT.
package labels
diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go b/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go
index 1a9bba106..da642fa73 100644
--- a/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go
+++ b/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go
@@ -36,6 +36,21 @@ func ParseResourceArg(arg string) (*GroupVersionResource, GroupResource) {
return gvr, ParseGroupResource(arg)
}
+// ParseKindArg takes the common style of string which may be either `Kind.group.com` or `Kind.version.group.com`
+// and parses it out into both possibilities. This code takes no responsibility for knowing which representation was intended
+// but with a knowledge of all GroupKinds, calling code can take a very good guess. If there are only two segments, then
+// `*GroupVersionResource` is nil.
+// `Kind.group.com` -> `group=com, version=group, kind=Kind` and `group=group.com, kind=Kind`
+func ParseKindArg(arg string) (*GroupVersionKind, GroupKind) {
+ var gvk *GroupVersionKind
+ if strings.Count(arg, ".") >= 2 {
+ s := strings.SplitN(arg, ".", 3)
+ gvk = &GroupVersionKind{Group: s[2], Version: s[1], Kind: s[0]}
+ }
+
+ return gvk, ParseGroupKind(arg)
+}
+
// GroupResource specifies a Group and a Resource, but does not force a version. This is useful for identifying
// concepts during lookup stages without having partially valid types
type GroupResource struct {
@@ -58,6 +73,15 @@ func (gr *GroupResource) String() string {
return gr.Resource + "." + gr.Group
}
+func ParseGroupKind(gk string) GroupKind {
+ i := strings.Index(gk, ".")
+ if i == -1 {
+ return GroupKind{Kind: gk}
+ }
+
+ return GroupKind{Group: gk[i+1:], Kind: gk[:i]}
+}
+
// ParseGroupResource turns "resource.group" string into a GroupResource struct. Empty strings are allowed
// for each field.
func ParseGroupResource(gr string) GroupResource {
diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go b/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go
index 08b755381..3d94a3041 100644
--- a/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go
+++ b/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go
@@ -431,6 +431,7 @@ func (s *Scheme) Convert(in, out interface{}, context interface{}) error {
return err
}
unstructuredOut.SetUnstructuredContent(content)
+ unstructuredOut.GetObjectKind().SetGroupVersionKind(gvk)
return nil
}
diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go
index 2b795b5b8..111f056c8 100644
--- a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go
+++ b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go
@@ -98,6 +98,20 @@ func init() {
jsoniter.RegisterTypeDecoderFunc("interface {}", decodeNumberAsInt64IfPossible)
}
+// CaseSensitiveJsonIterator returns a jsoniterator API that's configured to be
+// case-sensitive when unmarshalling, and otherwise compatible with
+// the encoding/json standard library.
+func CaseSensitiveJsonIterator() jsoniter.API {
+ return jsoniter.Config{
+ EscapeHTML: true,
+ SortMapKeys: true,
+ ValidateJsonRawMessage: true,
+ CaseSensitive: true,
+ }.Froze()
+}
+
+var caseSensitiveJsonIterator = CaseSensitiveJsonIterator()
+
// gvkWithDefaults returns group kind and version defaulting from provided default
func gvkWithDefaults(actual, defaultGVK schema.GroupVersionKind) schema.GroupVersionKind {
if len(actual.Kind) == 0 {
@@ -162,7 +176,7 @@ func (s *Serializer) Decode(originalData []byte, gvk *schema.GroupVersionKind, i
types, _, err := s.typer.ObjectKinds(into)
switch {
case runtime.IsNotRegisteredError(err), isUnstructured:
- if err := jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal(data, into); err != nil {
+ if err := caseSensitiveJsonIterator.Unmarshal(data, into); err != nil {
return nil, actual, err
}
return into, actual, nil
@@ -186,7 +200,7 @@ func (s *Serializer) Decode(originalData []byte, gvk *schema.GroupVersionKind, i
return nil, actual, err
}
- if err := jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal(data, obj); err != nil {
+ if err := caseSensitiveJsonIterator.Unmarshal(data, obj); err != nil {
return nil, actual, err
}
return obj, actual, nil
@@ -195,7 +209,7 @@ func (s *Serializer) Decode(originalData []byte, gvk *schema.GroupVersionKind, i
// Encode serializes the provided object to the given writer.
func (s *Serializer) Encode(obj runtime.Object, w io.Writer) error {
if s.yaml {
- json, err := jsoniter.ConfigCompatibleWithStandardLibrary.Marshal(obj)
+ json, err := caseSensitiveJsonIterator.Marshal(obj)
if err != nil {
return err
}
@@ -208,7 +222,7 @@ func (s *Serializer) Encode(obj runtime.Object, w io.Writer) error {
}
if s.pretty {
- data, err := jsoniter.ConfigCompatibleWithStandardLibrary.MarshalIndent(obj, "", " ")
+ data, err := caseSensitiveJsonIterator.MarshalIndent(obj, "", " ")
if err != nil {
return err
}
diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/runtime/zz_generated.deepcopy.go
index 82cf19ce1..ba89cd235 100644
--- a/vendor/k8s.io/apimachinery/pkg/runtime/zz_generated.deepcopy.go
+++ b/vendor/k8s.io/apimachinery/pkg/runtime/zz_generated.deepcopy.go
@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-// This file was autogenerated by deepcopy-gen. Do not edit it manually!
+// Code generated by deepcopy-gen. DO NOT EDIT.
package runtime
@@ -72,9 +72,8 @@ func (in *Unknown) DeepCopy() *Unknown {
func (in *Unknown) DeepCopyObject() Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -108,7 +107,6 @@ func (in *VersionedObjects) DeepCopy() *VersionedObjects {
func (in *VersionedObjects) DeepCopyObject() Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
diff --git a/vendor/k8s.io/apimachinery/pkg/util/net/http.go b/vendor/k8s.io/apimachinery/pkg/util/net/http.go
index bc2a531b9..76eb8b4fa 100644
--- a/vendor/k8s.io/apimachinery/pkg/util/net/http.go
+++ b/vendor/k8s.io/apimachinery/pkg/util/net/http.go
@@ -61,6 +61,9 @@ func JoinPreservingTrailingSlash(elem ...string) string {
// differentiate probable errors in connection behavior between normal "this is
// disconnected" should use the method.
func IsProbableEOF(err error) bool {
+ if err == nil {
+ return false
+ }
if uerr, ok := err.(*url.Error); ok {
err = uerr.Err
}
diff --git a/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go b/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go
index d4cec0b88..1e7d3ce0b 100644
--- a/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go
+++ b/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go
@@ -63,7 +63,11 @@ func HandleCrash(additionalHandlers ...func(interface{})) {
// logPanic logs the caller tree when a panic occurs.
func logPanic(r interface{}) {
callers := getCallers(r)
- glog.Errorf("Observed a panic: %#v (%v)\n%v", r, r, callers)
+ if _, ok := r.(string); ok {
+ glog.Errorf("Observed a panic: %s\n%v", r, callers)
+ } else {
+ glog.Errorf("Observed a panic: %#v (%v)\n%v", r, r, callers)
+ }
}
func getCallers(r interface{}) string {
diff --git a/vendor/k8s.io/apimachinery/pkg/watch/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/watch/zz_generated.deepcopy.go
index 738d0a29c..b1b19d118 100644
--- a/vendor/k8s.io/apimachinery/pkg/watch/zz_generated.deepcopy.go
+++ b/vendor/k8s.io/apimachinery/pkg/watch/zz_generated.deepcopy.go
@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-// This file was autogenerated by deepcopy-gen. Do not edit it manually!
+// Code generated by deepcopy-gen. DO NOT EDIT.
package watch
diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go
new file mode 100644
index 000000000..d06482d55
--- /dev/null
+++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/doc.go
@@ -0,0 +1,19 @@
+/*
+Copyright 2018 The Kubernetes Authors.
+
+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.
+*/
+
+// +k8s:deepcopy-gen=package
+// +groupName=client.authentication.k8s.io
+package clientauthentication // import "k8s.io/client-go/pkg/apis/clientauthentication"
diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/register.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/register.go
new file mode 100644
index 000000000..e4fbc3ea9
--- /dev/null
+++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/register.go
@@ -0,0 +1,50 @@
+/*
+Copyright 2018 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package clientauthentication
+
+import (
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+)
+
+// GroupName is the group name use in this package
+const GroupName = "client.authentication.k8s.io"
+
+// SchemeGroupVersion is group version used to register these objects
+var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal}
+
+// Kind takes an unqualified kind and returns a Group qualified GroupKind
+func Kind(kind string) schema.GroupKind {
+ return SchemeGroupVersion.WithKind(kind).GroupKind()
+}
+
+// Resource takes an unqualified resource and returns a Group qualified GroupResource
+func Resource(resource string) schema.GroupResource {
+ return SchemeGroupVersion.WithResource(resource).GroupResource()
+}
+
+var (
+ SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
+ AddToScheme = SchemeBuilder.AddToScheme
+)
+
+func addKnownTypes(scheme *runtime.Scheme) error {
+ scheme.AddKnownTypes(SchemeGroupVersion,
+ &ExecCredential{},
+ )
+ return nil
+}
diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/types.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/types.go
new file mode 100644
index 000000000..5c05825f6
--- /dev/null
+++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/types.go
@@ -0,0 +1,70 @@
+/*
+Copyright 2018 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package clientauthentication
+
+import (
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+
+// ExecCredentials is used by exec-based plugins to communicate credentials to
+// HTTP transports.
+type ExecCredential struct {
+ metav1.TypeMeta
+
+ // Spec holds information passed to the plugin by the transport. This contains
+ // request and runtime specific information, such as if the session is interactive.
+ Spec ExecCredentialSpec
+
+ // Status is filled in by the plugin and holds the credentials that the transport
+ // should use to contact the API.
+ // +optional
+ Status *ExecCredentialStatus
+}
+
+// ExecCredenitalSpec holds request and runtime specific information provided by
+// the transport.
+type ExecCredentialSpec struct {
+ // Response is populated when the transport encounters HTTP status codes, such as 401,
+ // suggesting previous credentials were invalid.
+ // +optional
+ Response *Response
+
+ // Interactive is true when the transport detects the command is being called from an
+ // interactive prompt.
+ // +optional
+ Interactive bool
+}
+
+// ExecCredentialStatus holds credentials for the transport to use.
+type ExecCredentialStatus struct {
+ // ExpirationTimestamp indicates a time when the provided credentials expire.
+ // +optional
+ ExpirationTimestamp *metav1.Time
+ // Token is a bearer token used by the client for request authentication.
+ Token string
+}
+
+// Response defines metadata about a failed request, including HTTP status code and
+// response headers.
+type Response struct {
+ // Headers holds HTTP headers returned by the server.
+ Header map[string][]string
+ // Code is the HTTP status code returned by the server.
+ Code int32
+}
diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go
new file mode 100644
index 000000000..016adb28a
--- /dev/null
+++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/doc.go
@@ -0,0 +1,23 @@
+/*
+Copyright 2018 The Kubernetes Authors.
+
+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.
+*/
+
+// +k8s:deepcopy-gen=package
+// +k8s:conversion-gen=k8s.io/client-go/pkg/apis/clientauthentication
+// +k8s:openapi-gen=true
+// +k8s:defaulter-gen=TypeMeta
+
+// +groupName=client.authentication.k8s.io
+package v1alpha1 // import "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1"
diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/register.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/register.go
new file mode 100644
index 000000000..2acd13dea
--- /dev/null
+++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/register.go
@@ -0,0 +1,55 @@
+/*
+Copyright 2018 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1alpha1
+
+import (
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+)
+
+// GroupName is the group name use in this package
+const GroupName = "client.authentication.k8s.io"
+
+// SchemeGroupVersion is group version used to register these objects
+var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"}
+
+// Resource takes an unqualified resource and returns a Group qualified GroupResource
+func Resource(resource string) schema.GroupResource {
+ return SchemeGroupVersion.WithResource(resource).GroupResource()
+}
+
+var (
+ SchemeBuilder runtime.SchemeBuilder
+ localSchemeBuilder = &SchemeBuilder
+ AddToScheme = localSchemeBuilder.AddToScheme
+)
+
+func init() {
+ // We only register manually written functions here. The registration of the
+ // generated functions takes place in the generated files. The separation
+ // makes the code compile even when the generated files are missing.
+ localSchemeBuilder.Register(addKnownTypes)
+}
+
+func addKnownTypes(scheme *runtime.Scheme) error {
+ scheme.AddKnownTypes(SchemeGroupVersion,
+ &ExecCredential{},
+ )
+ metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
+ return nil
+}
diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go
new file mode 100644
index 000000000..8920d3187
--- /dev/null
+++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/types.go
@@ -0,0 +1,70 @@
+/*
+Copyright 2018 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1alpha1
+
+import (
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+
+// ExecCredentials is used by exec-based plugins to communicate credentials to
+// HTTP transports.
+type ExecCredential struct {
+ metav1.TypeMeta `json:",inline"`
+
+ // Spec holds information passed to the plugin by the transport. This contains
+ // request and runtime specific information, such as if the session is interactive.
+ Spec ExecCredentialSpec `json:"spec,omitempty"`
+
+ // Status is filled in by the plugin and holds the credentials that the transport
+ // should use to contact the API.
+ // +optional
+ Status *ExecCredentialStatus `json:"status,omitempty"`
+}
+
+// ExecCredenitalSpec holds request and runtime specific information provided by
+// the transport.
+type ExecCredentialSpec struct {
+ // Response is populated when the transport encounters HTTP status codes, such as 401,
+ // suggesting previous credentials were invalid.
+ // +optional
+ Response *Response `json:"response,omitempty"`
+
+ // Interactive is true when the transport detects the command is being called from an
+ // interactive prompt.
+ // +optional
+ Interactive bool `json:"interactive,omitempty"`
+}
+
+// ExecCredentialStatus holds credentials for the transport to use.
+type ExecCredentialStatus struct {
+ // ExpirationTimestamp indicates a time when the provided credentials expire.
+ // +optional
+ ExpirationTimestamp *metav1.Time `json:"expirationTimestamp,omitempty"`
+ // Token is a bearer token used by the client for request authentication.
+ Token string `json:"token,omitempty"`
+}
+
+// Response defines metadata about a failed request, including HTTP status code and
+// response headers.
+type Response struct {
+ // Header holds HTTP headers returned by the server.
+ Header map[string][]string `json:"header,omitempty"`
+ // Code is the HTTP status code returned by the server.
+ Code int32 `json:"code,omitempty"`
+}
diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go
new file mode 100644
index 000000000..bf28baef2
--- /dev/null
+++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.conversion.go
@@ -0,0 +1,141 @@
+// +build !ignore_autogenerated
+
+/*
+Copyright 2018 The Kubernetes Authors.
+
+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.
+*/
+
+// Code generated by conversion-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+ unsafe "unsafe"
+
+ v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ conversion "k8s.io/apimachinery/pkg/conversion"
+ runtime "k8s.io/apimachinery/pkg/runtime"
+ clientauthentication "k8s.io/client-go/pkg/apis/clientauthentication"
+)
+
+func init() {
+ localSchemeBuilder.Register(RegisterConversions)
+}
+
+// RegisterConversions adds conversion functions to the given scheme.
+// Public to allow building arbitrary schemes.
+func RegisterConversions(scheme *runtime.Scheme) error {
+ return scheme.AddGeneratedConversionFuncs(
+ Convert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential,
+ Convert_clientauthentication_ExecCredential_To_v1alpha1_ExecCredential,
+ Convert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec,
+ Convert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec,
+ Convert_v1alpha1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus,
+ Convert_clientauthentication_ExecCredentialStatus_To_v1alpha1_ExecCredentialStatus,
+ Convert_v1alpha1_Response_To_clientauthentication_Response,
+ Convert_clientauthentication_Response_To_v1alpha1_Response,
+ )
+}
+
+func autoConvert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential(in *ExecCredential, out *clientauthentication.ExecCredential, s conversion.Scope) error {
+ if err := Convert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec(&in.Spec, &out.Spec, s); err != nil {
+ return err
+ }
+ out.Status = (*clientauthentication.ExecCredentialStatus)(unsafe.Pointer(in.Status))
+ return nil
+}
+
+// Convert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential is an autogenerated conversion function.
+func Convert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential(in *ExecCredential, out *clientauthentication.ExecCredential, s conversion.Scope) error {
+ return autoConvert_v1alpha1_ExecCredential_To_clientauthentication_ExecCredential(in, out, s)
+}
+
+func autoConvert_clientauthentication_ExecCredential_To_v1alpha1_ExecCredential(in *clientauthentication.ExecCredential, out *ExecCredential, s conversion.Scope) error {
+ if err := Convert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec(&in.Spec, &out.Spec, s); err != nil {
+ return err
+ }
+ out.Status = (*ExecCredentialStatus)(unsafe.Pointer(in.Status))
+ return nil
+}
+
+// Convert_clientauthentication_ExecCredential_To_v1alpha1_ExecCredential is an autogenerated conversion function.
+func Convert_clientauthentication_ExecCredential_To_v1alpha1_ExecCredential(in *clientauthentication.ExecCredential, out *ExecCredential, s conversion.Scope) error {
+ return autoConvert_clientauthentication_ExecCredential_To_v1alpha1_ExecCredential(in, out, s)
+}
+
+func autoConvert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec(in *ExecCredentialSpec, out *clientauthentication.ExecCredentialSpec, s conversion.Scope) error {
+ out.Response = (*clientauthentication.Response)(unsafe.Pointer(in.Response))
+ out.Interactive = in.Interactive
+ return nil
+}
+
+// Convert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec is an autogenerated conversion function.
+func Convert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec(in *ExecCredentialSpec, out *clientauthentication.ExecCredentialSpec, s conversion.Scope) error {
+ return autoConvert_v1alpha1_ExecCredentialSpec_To_clientauthentication_ExecCredentialSpec(in, out, s)
+}
+
+func autoConvert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec(in *clientauthentication.ExecCredentialSpec, out *ExecCredentialSpec, s conversion.Scope) error {
+ out.Response = (*Response)(unsafe.Pointer(in.Response))
+ out.Interactive = in.Interactive
+ return nil
+}
+
+// Convert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec is an autogenerated conversion function.
+func Convert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec(in *clientauthentication.ExecCredentialSpec, out *ExecCredentialSpec, s conversion.Scope) error {
+ return autoConvert_clientauthentication_ExecCredentialSpec_To_v1alpha1_ExecCredentialSpec(in, out, s)
+}
+
+func autoConvert_v1alpha1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus(in *ExecCredentialStatus, out *clientauthentication.ExecCredentialStatus, s conversion.Scope) error {
+ out.ExpirationTimestamp = (*v1.Time)(unsafe.Pointer(in.ExpirationTimestamp))
+ out.Token = in.Token
+ return nil
+}
+
+// Convert_v1alpha1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus is an autogenerated conversion function.
+func Convert_v1alpha1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus(in *ExecCredentialStatus, out *clientauthentication.ExecCredentialStatus, s conversion.Scope) error {
+ return autoConvert_v1alpha1_ExecCredentialStatus_To_clientauthentication_ExecCredentialStatus(in, out, s)
+}
+
+func autoConvert_clientauthentication_ExecCredentialStatus_To_v1alpha1_ExecCredentialStatus(in *clientauthentication.ExecCredentialStatus, out *ExecCredentialStatus, s conversion.Scope) error {
+ out.ExpirationTimestamp = (*v1.Time)(unsafe.Pointer(in.ExpirationTimestamp))
+ out.Token = in.Token
+ return nil
+}
+
+// Convert_clientauthentication_ExecCredentialStatus_To_v1alpha1_ExecCredentialStatus is an autogenerated conversion function.
+func Convert_clientauthentication_ExecCredentialStatus_To_v1alpha1_ExecCredentialStatus(in *clientauthentication.ExecCredentialStatus, out *ExecCredentialStatus, s conversion.Scope) error {
+ return autoConvert_clientauthentication_ExecCredentialStatus_To_v1alpha1_ExecCredentialStatus(in, out, s)
+}
+
+func autoConvert_v1alpha1_Response_To_clientauthentication_Response(in *Response, out *clientauthentication.Response, s conversion.Scope) error {
+ out.Header = *(*map[string][]string)(unsafe.Pointer(&in.Header))
+ out.Code = in.Code
+ return nil
+}
+
+// Convert_v1alpha1_Response_To_clientauthentication_Response is an autogenerated conversion function.
+func Convert_v1alpha1_Response_To_clientauthentication_Response(in *Response, out *clientauthentication.Response, s conversion.Scope) error {
+ return autoConvert_v1alpha1_Response_To_clientauthentication_Response(in, out, s)
+}
+
+func autoConvert_clientauthentication_Response_To_v1alpha1_Response(in *clientauthentication.Response, out *Response, s conversion.Scope) error {
+ out.Header = *(*map[string][]string)(unsafe.Pointer(&in.Header))
+ out.Code = in.Code
+ return nil
+}
+
+// Convert_clientauthentication_Response_To_v1alpha1_Response is an autogenerated conversion function.
+func Convert_clientauthentication_Response_To_v1alpha1_Response(in *clientauthentication.Response, out *Response, s conversion.Scope) error {
+ return autoConvert_clientauthentication_Response_To_v1alpha1_Response(in, out, s)
+}
diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go
new file mode 100644
index 000000000..c6dbbce4d
--- /dev/null
+++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.deepcopy.go
@@ -0,0 +1,137 @@
+// +build !ignore_autogenerated
+
+/*
+Copyright 2018 The Kubernetes Authors.
+
+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.
+*/
+
+// Code generated by deepcopy-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+ runtime "k8s.io/apimachinery/pkg/runtime"
+)
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ExecCredential) DeepCopyInto(out *ExecCredential) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ in.Spec.DeepCopyInto(&out.Spec)
+ if in.Status != nil {
+ in, out := &in.Status, &out.Status
+ if *in == nil {
+ *out = nil
+ } else {
+ *out = new(ExecCredentialStatus)
+ (*in).DeepCopyInto(*out)
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecCredential.
+func (in *ExecCredential) DeepCopy() *ExecCredential {
+ if in == nil {
+ return nil
+ }
+ out := new(ExecCredential)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ExecCredential) DeepCopyObject() runtime.Object {
+ if c := in.DeepCopy(); c != nil {
+ return c
+ }
+ return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ExecCredentialSpec) DeepCopyInto(out *ExecCredentialSpec) {
+ *out = *in
+ if in.Response != nil {
+ in, out := &in.Response, &out.Response
+ if *in == nil {
+ *out = nil
+ } else {
+ *out = new(Response)
+ (*in).DeepCopyInto(*out)
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecCredentialSpec.
+func (in *ExecCredentialSpec) DeepCopy() *ExecCredentialSpec {
+ if in == nil {
+ return nil
+ }
+ out := new(ExecCredentialSpec)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ExecCredentialStatus) DeepCopyInto(out *ExecCredentialStatus) {
+ *out = *in
+ if in.ExpirationTimestamp != nil {
+ in, out := &in.ExpirationTimestamp, &out.ExpirationTimestamp
+ if *in == nil {
+ *out = nil
+ } else {
+ *out = (*in).DeepCopy()
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecCredentialStatus.
+func (in *ExecCredentialStatus) DeepCopy() *ExecCredentialStatus {
+ if in == nil {
+ return nil
+ }
+ out := new(ExecCredentialStatus)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Response) DeepCopyInto(out *Response) {
+ *out = *in
+ if in.Header != nil {
+ in, out := &in.Header, &out.Header
+ *out = make(map[string][]string, len(*in))
+ for key, val := range *in {
+ if val == nil {
+ (*out)[key] = nil
+ } else {
+ (*out)[key] = make([]string, len(val))
+ copy((*out)[key], val)
+ }
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Response.
+func (in *Response) DeepCopy() *Response {
+ if in == nil {
+ return nil
+ }
+ out := new(Response)
+ in.DeepCopyInto(out)
+ return out
+}
diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.defaults.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.defaults.go
new file mode 100644
index 000000000..2bd0078a3
--- /dev/null
+++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1/zz_generated.defaults.go
@@ -0,0 +1,32 @@
+// +build !ignore_autogenerated
+
+/*
+Copyright 2018 The Kubernetes Authors.
+
+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.
+*/
+
+// Code generated by defaulter-gen. DO NOT EDIT.
+
+package v1alpha1
+
+import (
+ runtime "k8s.io/apimachinery/pkg/runtime"
+)
+
+// RegisterDefaults adds defaulters functions to the given scheme.
+// Public to allow building arbitrary schemes.
+// All generated defaulters are covering - they call all nested defaulters.
+func RegisterDefaults(scheme *runtime.Scheme) error {
+ return nil
+}
diff --git a/vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go
new file mode 100644
index 000000000..f8b15d848
--- /dev/null
+++ b/vendor/k8s.io/client-go/pkg/apis/clientauthentication/zz_generated.deepcopy.go
@@ -0,0 +1,137 @@
+// +build !ignore_autogenerated
+
+/*
+Copyright 2018 The Kubernetes Authors.
+
+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.
+*/
+
+// Code generated by deepcopy-gen. DO NOT EDIT.
+
+package clientauthentication
+
+import (
+ runtime "k8s.io/apimachinery/pkg/runtime"
+)
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ExecCredential) DeepCopyInto(out *ExecCredential) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ in.Spec.DeepCopyInto(&out.Spec)
+ if in.Status != nil {
+ in, out := &in.Status, &out.Status
+ if *in == nil {
+ *out = nil
+ } else {
+ *out = new(ExecCredentialStatus)
+ (*in).DeepCopyInto(*out)
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecCredential.
+func (in *ExecCredential) DeepCopy() *ExecCredential {
+ if in == nil {
+ return nil
+ }
+ out := new(ExecCredential)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ExecCredential) DeepCopyObject() runtime.Object {
+ if c := in.DeepCopy(); c != nil {
+ return c
+ }
+ return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ExecCredentialSpec) DeepCopyInto(out *ExecCredentialSpec) {
+ *out = *in
+ if in.Response != nil {
+ in, out := &in.Response, &out.Response
+ if *in == nil {
+ *out = nil
+ } else {
+ *out = new(Response)
+ (*in).DeepCopyInto(*out)
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecCredentialSpec.
+func (in *ExecCredentialSpec) DeepCopy() *ExecCredentialSpec {
+ if in == nil {
+ return nil
+ }
+ out := new(ExecCredentialSpec)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ExecCredentialStatus) DeepCopyInto(out *ExecCredentialStatus) {
+ *out = *in
+ if in.ExpirationTimestamp != nil {
+ in, out := &in.ExpirationTimestamp, &out.ExpirationTimestamp
+ if *in == nil {
+ *out = nil
+ } else {
+ *out = (*in).DeepCopy()
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecCredentialStatus.
+func (in *ExecCredentialStatus) DeepCopy() *ExecCredentialStatus {
+ if in == nil {
+ return nil
+ }
+ out := new(ExecCredentialStatus)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Response) DeepCopyInto(out *Response) {
+ *out = *in
+ if in.Header != nil {
+ in, out := &in.Header, &out.Header
+ *out = make(map[string][]string, len(*in))
+ for key, val := range *in {
+ if val == nil {
+ (*out)[key] = nil
+ } else {
+ (*out)[key] = make([]string, len(val))
+ copy((*out)[key], val)
+ }
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Response.
+func (in *Response) DeepCopy() *Response {
+ if in == nil {
+ return nil
+ }
+ out := new(Response)
+ in.DeepCopyInto(out)
+ return out
+}
diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go
new file mode 100644
index 000000000..dfd434d0c
--- /dev/null
+++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go
@@ -0,0 +1,280 @@
+/*
+Copyright 2018 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package exec
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "net/http"
+ "os"
+ "os/exec"
+ "sync"
+ "time"
+
+ "github.com/golang/glog"
+ "golang.org/x/crypto/ssh/terminal"
+ "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/apimachinery/pkg/runtime/serializer"
+ "k8s.io/client-go/pkg/apis/clientauthentication"
+ "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1"
+ "k8s.io/client-go/tools/clientcmd/api"
+)
+
+const execInfoEnv = "KUBERNETES_EXEC_INFO"
+
+var scheme = runtime.NewScheme()
+var codecs = serializer.NewCodecFactory(scheme)
+
+func init() {
+ v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"})
+ v1alpha1.AddToScheme(scheme)
+ clientauthentication.AddToScheme(scheme)
+}
+
+var (
+ // Since transports can be constantly re-initialized by programs like kubectl,
+ // keep a cache of initialized authenticators keyed by a hash of their config.
+ globalCache = newCache()
+ // The list of API versions we accept.
+ apiVersions = map[string]schema.GroupVersion{
+ v1alpha1.SchemeGroupVersion.String(): v1alpha1.SchemeGroupVersion,
+ }
+)
+
+func newCache() *cache {
+ return &cache{m: make(map[string]*Authenticator)}
+}
+
+func cacheKey(c *api.ExecConfig) string {
+ return fmt.Sprintf("%#v", c)
+}
+
+type cache struct {
+ mu sync.Mutex
+ m map[string]*Authenticator
+}
+
+func (c *cache) get(s string) (*Authenticator, bool) {
+ c.mu.Lock()
+ defer c.mu.Unlock()
+ a, ok := c.m[s]
+ return a, ok
+}
+
+// put inserts an authenticator into the cache. If an authenticator is already
+// associated with the key, the first one is returned instead.
+func (c *cache) put(s string, a *Authenticator) *Authenticator {
+ c.mu.Lock()
+ defer c.mu.Unlock()
+ existing, ok := c.m[s]
+ if ok {
+ return existing
+ }
+ c.m[s] = a
+ return a
+}
+
+// GetAuthenticator returns an exec-based plugin for providing client credentials.
+func GetAuthenticator(config *api.ExecConfig) (*Authenticator, error) {
+ return newAuthenticator(globalCache, config)
+}
+
+func newAuthenticator(c *cache, config *api.ExecConfig) (*Authenticator, error) {
+ key := cacheKey(config)
+ if a, ok := c.get(key); ok {
+ return a, nil
+ }
+
+ gv, ok := apiVersions[config.APIVersion]
+ if !ok {
+ return nil, fmt.Errorf("exec plugin: invalid apiVersion %q", config.APIVersion)
+ }
+
+ a := &Authenticator{
+ cmd: config.Command,
+ args: config.Args,
+ group: gv,
+
+ stdin: os.Stdin,
+ stderr: os.Stderr,
+ interactive: terminal.IsTerminal(int(os.Stdout.Fd())),
+ now: time.Now,
+ environ: os.Environ,
+ }
+
+ for _, env := range config.Env {
+ a.env = append(a.env, env.Name+"="+env.Value)
+ }
+
+ return c.put(key, a), nil
+}
+
+// Authenticator is a client credential provider that rotates credentials by executing a plugin.
+// The plugin input and output are defined by the API group client.authentication.k8s.io.
+type Authenticator struct {
+ // Set by the config
+ cmd string
+ args []string
+ group schema.GroupVersion
+ env []string
+
+ // Stubbable for testing
+ stdin io.Reader
+ stderr io.Writer
+ interactive bool
+ now func() time.Time
+ environ func() []string
+
+ // Cached results.
+ //
+ // The mutex also guards calling the plugin. Since the plugin could be
+ // interactive we want to make sure it's only called once.
+ mu sync.Mutex
+ cachedToken string
+ exp time.Time
+}
+
+// WrapTransport instruments an existing http.RoundTripper with credentials returned
+// by the plugin.
+func (a *Authenticator) WrapTransport(rt http.RoundTripper) http.RoundTripper {
+ return &roundTripper{a, rt}
+}
+
+type roundTripper struct {
+ a *Authenticator
+ base http.RoundTripper
+}
+
+func (r *roundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
+ // If a user has already set credentials, use that. This makes commands like
+ // "kubectl get --token (token) pods" work.
+ if req.Header.Get("Authorization") != "" {
+ return r.base.RoundTrip(req)
+ }
+
+ token, err := r.a.token()
+ if err != nil {
+ return nil, fmt.Errorf("getting token: %v", err)
+ }
+ req.Header.Set("Authorization", "Bearer "+token)
+
+ res, err := r.base.RoundTrip(req)
+ if err != nil {
+ return nil, err
+ }
+ if res.StatusCode == http.StatusUnauthorized {
+ resp := &clientauthentication.Response{
+ Header: res.Header,
+ Code: int32(res.StatusCode),
+ }
+ if err := r.a.refresh(token, resp); err != nil {
+ glog.Errorf("refreshing token: %v", err)
+ }
+ }
+ return res, nil
+}
+
+func (a *Authenticator) tokenExpired() bool {
+ if a.exp.IsZero() {
+ return false
+ }
+ return a.now().After(a.exp)
+}
+
+func (a *Authenticator) token() (string, error) {
+ a.mu.Lock()
+ defer a.mu.Unlock()
+ if a.cachedToken != "" && !a.tokenExpired() {
+ return a.cachedToken, nil
+ }
+
+ return a.getToken(nil)
+}
+
+// refresh executes the plugin to force a rotation of the token.
+func (a *Authenticator) refresh(token string, r *clientauthentication.Response) error {
+ a.mu.Lock()
+ defer a.mu.Unlock()
+
+ if token != a.cachedToken {
+ // Token already rotated.
+ return nil
+ }
+
+ _, err := a.getToken(r)
+ return err
+}
+
+// getToken executes the plugin and reads the credentials from stdout. It must be
+// called while holding the Authenticator's mutex.
+func (a *Authenticator) getToken(r *clientauthentication.Response) (string, error) {
+ cred := &clientauthentication.ExecCredential{
+ Spec: clientauthentication.ExecCredentialSpec{
+ Response: r,
+ Interactive: a.interactive,
+ },
+ }
+
+ data, err := runtime.Encode(codecs.LegacyCodec(a.group), cred)
+ if err != nil {
+ return "", fmt.Errorf("encode ExecCredentials: %v", err)
+ }
+
+ env := append(a.environ(), a.env...)
+ env = append(env, fmt.Sprintf("%s=%s", execInfoEnv, data))
+
+ stdout := &bytes.Buffer{}
+ cmd := exec.Command(a.cmd, a.args...)
+ cmd.Env = env
+ cmd.Stderr = a.stderr
+ cmd.Stdout = stdout
+ if a.interactive {
+ cmd.Stdin = a.stdin
+ }
+
+ if err := cmd.Run(); err != nil {
+ return "", fmt.Errorf("exec: %v", err)
+ }
+
+ _, gvk, err := codecs.UniversalDecoder(a.group).Decode(stdout.Bytes(), nil, cred)
+ if err != nil {
+ return "", fmt.Errorf("decode stdout: %v", err)
+ }
+ if gvk.Group != a.group.Group || gvk.Version != a.group.Version {
+ return "", fmt.Errorf("exec plugin is configured to use API version %s, plugin returned version %s",
+ a.group, schema.GroupVersion{Group: gvk.Group, Version: gvk.Version})
+ }
+
+ if cred.Status == nil {
+ return "", fmt.Errorf("exec plugin didn't return a status field")
+ }
+ if cred.Status.Token == "" {
+ return "", fmt.Errorf("exec plugin didn't return a token")
+ }
+
+ if cred.Status.ExpirationTimestamp != nil {
+ a.exp = cred.Status.ExpirationTimestamp.Time
+ } else {
+ a.exp = time.Time{}
+ }
+ a.cachedToken = cred.Status.Token
+
+ return a.cachedToken, nil
+}
diff --git a/vendor/k8s.io/client-go/rest/config.go b/vendor/k8s.io/client-go/rest/config.go
index c1a11b8f0..72a78bc0a 100644
--- a/vendor/k8s.io/client-go/rest/config.go
+++ b/vendor/k8s.io/client-go/rest/config.go
@@ -77,6 +77,9 @@ type Config struct {
// Callback to persist config for AuthProvider.
AuthConfigPersister AuthProviderConfigPersister
+ // Exec-based authentication provider.
+ ExecProvider *clientcmdapi.ExecConfig
+
// TLSClientConfig contains settings to enable transport layer security
TLSClientConfig
@@ -432,6 +435,7 @@ func CopyConfig(config *Config) *Config {
},
AuthProvider: config.AuthProvider,
AuthConfigPersister: config.AuthConfigPersister,
+ ExecProvider: config.ExecProvider,
TLSClientConfig: TLSClientConfig{
Insecure: config.TLSClientConfig.Insecure,
ServerName: config.TLSClientConfig.ServerName,
diff --git a/vendor/k8s.io/client-go/rest/transport.go b/vendor/k8s.io/client-go/rest/transport.go
index 878c6abf1..b6a067632 100644
--- a/vendor/k8s.io/client-go/rest/transport.go
+++ b/vendor/k8s.io/client-go/rest/transport.go
@@ -20,6 +20,7 @@ import (
"crypto/tls"
"net/http"
+ "k8s.io/client-go/plugin/pkg/client/auth/exec"
"k8s.io/client-go/transport"
)
@@ -59,6 +60,20 @@ func HTTPWrappersForConfig(config *Config, rt http.RoundTripper) (http.RoundTrip
// TransportConfig converts a client config to an appropriate transport config.
func (c *Config) TransportConfig() (*transport.Config, error) {
wt := c.WrapTransport
+ if c.ExecProvider != nil {
+ provider, err := exec.GetAuthenticator(c.ExecProvider)
+ if err != nil {
+ return nil, err
+ }
+ if wt != nil {
+ previousWT := wt
+ wt = func(rt http.RoundTripper) http.RoundTripper {
+ return provider.WrapTransport(previousWT(rt))
+ }
+ } else {
+ wt = provider.WrapTransport
+ }
+ }
if c.AuthProvider != nil {
provider, err := GetAuthProvider(c.Host, c.AuthProvider, c.AuthConfigPersister)
if err != nil {
diff --git a/vendor/k8s.io/client-go/rest/versions.go b/vendor/k8s.io/client-go/rest/versions.go
deleted file mode 100644
index 9d41812f2..000000000
--- a/vendor/k8s.io/client-go/rest/versions.go
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-Copyright 2014 The Kubernetes Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package rest
-
-import (
- "encoding/json"
- "fmt"
- "net/http"
- "path"
-
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-const (
- legacyAPIPath = "/api"
- defaultAPIPath = "/apis"
-)
-
-// TODO: Is this obsoleted by the discovery client?
-
-// ServerAPIVersions returns the GroupVersions supported by the API server.
-// It creates a RESTClient based on the passed in config, but it doesn't rely
-// on the Version and Codec of the config, because it uses AbsPath and
-// takes the raw response.
-func ServerAPIVersions(c *Config) (groupVersions []string, err error) {
- transport, err := TransportFor(c)
- if err != nil {
- return nil, err
- }
- client := http.Client{Transport: transport}
-
- configCopy := *c
- configCopy.GroupVersion = nil
- configCopy.APIPath = ""
- baseURL, _, err := defaultServerUrlFor(&configCopy)
- if err != nil {
- return nil, err
- }
- // Get the groupVersions exposed at /api
- originalPath := baseURL.Path
- baseURL.Path = path.Join(originalPath, legacyAPIPath)
- resp, err := client.Get(baseURL.String())
- if err != nil {
- return nil, err
- }
- var v metav1.APIVersions
- defer resp.Body.Close()
- err = json.NewDecoder(resp.Body).Decode(&v)
- if err != nil {
- return nil, fmt.Errorf("unexpected error: %v", err)
- }
-
- groupVersions = append(groupVersions, v.Versions...)
- // Get the groupVersions exposed at /apis
- baseURL.Path = path.Join(originalPath, defaultAPIPath)
- resp2, err := client.Get(baseURL.String())
- if err != nil {
- return nil, err
- }
- var apiGroupList metav1.APIGroupList
- defer resp2.Body.Close()
- err = json.NewDecoder(resp2.Body).Decode(&apiGroupList)
- if err != nil {
- return nil, fmt.Errorf("unexpected error: %v", err)
- }
-
- for _, g := range apiGroupList.Groups {
- for _, gv := range g.Versions {
- groupVersions = append(groupVersions, gv.GroupVersion)
- }
- }
-
- return groupVersions, nil
-}
diff --git a/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go
index 02d3b606e..67568bf0b 100644
--- a/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go
+++ b/vendor/k8s.io/client-go/rest/zz_generated.deepcopy.go
@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-// This file was autogenerated by deepcopy-gen. Do not edit it manually!
+// Code generated by deepcopy-gen. DO NOT EDIT.
package rest
diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/types.go b/vendor/k8s.io/client-go/tools/clientcmd/api/types.go
index 407dec83a..1391df702 100644
--- a/vendor/k8s.io/client-go/tools/clientcmd/api/types.go
+++ b/vendor/k8s.io/client-go/tools/clientcmd/api/types.go
@@ -119,6 +119,9 @@ type AuthInfo struct {
// AuthProvider specifies a custom authentication plugin for the kubernetes cluster.
// +optional
AuthProvider *AuthProviderConfig `json:"auth-provider,omitempty"`
+ // Exec specifies a custom exec-based authentication plugin for the kubernetes cluster.
+ // +optional
+ Exec *ExecConfig `json:"exec,omitempty"`
// Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields
// +optional
Extensions map[string]runtime.Object `json:"extensions,omitempty"`
@@ -147,6 +150,35 @@ type AuthProviderConfig struct {
Config map[string]string `json:"config,omitempty"`
}
+// ExecConfig specifies a command to provide client credentials. The command is exec'd
+// and outputs structured stdout holding credentials.
+//
+// See the client.authentiction.k8s.io API group for specifications of the exact input
+// and output format
+type ExecConfig struct {
+ // Command to execute.
+ Command string `json:"command"`
+ // Arguments to pass to the command when executing it.
+ // +optional
+ Args []string `json:"args"`
+ // Env defines additional environment variables to expose to the process. These
+ // are unioned with the host's environment, as well as variables client-go uses
+ // to pass argument to the plugin.
+ // +optional
+ Env []ExecEnvVar `json:"env"`
+
+ // Preferred input version of the ExecInfo. The returned ExecCredentials MUST use
+ // the same encoding version as the input.
+ APIVersion string `json:"apiVersion,omitempty"`
+}
+
+// ExecEnvVar is used for setting environment variables when executing an exec-based
+// credential plugin.
+type ExecEnvVar struct {
+ Name string `json:"name"`
+ Value string `json:"value"`
+}
+
// NewConfig is a convenience function that returns a new Config object with non-nil maps
func NewConfig() *Config {
return &Config{
diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go
index e575b23d7..085c088ee 100644
--- a/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go
+++ b/vendor/k8s.io/client-go/tools/clientcmd/api/zz_generated.deepcopy.go
@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-// This file was autogenerated by deepcopy-gen. Do not edit it manually!
+// Code generated by deepcopy-gen. DO NOT EDIT.
package api
@@ -63,6 +63,15 @@ func (in *AuthInfo) DeepCopyInto(out *AuthInfo) {
(*in).DeepCopyInto(*out)
}
}
+ if in.Exec != nil {
+ in, out := &in.Exec, &out.Exec
+ if *in == nil {
+ *out = nil
+ } else {
+ *out = new(ExecConfig)
+ (*in).DeepCopyInto(*out)
+ }
+ }
if in.Extensions != nil {
in, out := &in.Extensions, &out.Extensions
*out = make(map[string]runtime.Object, len(*in))
@@ -210,9 +219,8 @@ func (in *Config) DeepCopy() *Config {
func (in *Config) DeepCopyObject() runtime.Object {
if c := in.DeepCopy(); c != nil {
return c
- } else {
- return nil
}
+ return nil
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -243,6 +251,48 @@ func (in *Context) DeepCopy() *Context {
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ExecConfig) DeepCopyInto(out *ExecConfig) {
+ *out = *in
+ if in.Args != nil {
+ in, out := &in.Args, &out.Args
+ *out = make([]string, len(*in))
+ copy(*out, *in)
+ }
+ if in.Env != nil {
+ in, out := &in.Env, &out.Env
+ *out = make([]ExecEnvVar, len(*in))
+ copy(*out, *in)
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecConfig.
+func (in *ExecConfig) DeepCopy() *ExecConfig {
+ if in == nil {
+ return nil
+ }
+ out := new(ExecConfig)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ExecEnvVar) DeepCopyInto(out *ExecEnvVar) {
+ *out = *in
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecEnvVar.
+func (in *ExecEnvVar) DeepCopy() *ExecEnvVar {
+ if in == nil {
+ return nil
+ }
+ out := new(ExecEnvVar)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Preferences) DeepCopyInto(out *Preferences) {
*out = *in
if in.Extensions != nil {
diff --git a/vendor/k8s.io/client-go/transport/cache.go b/vendor/k8s.io/client-go/transport/cache.go
index 7c40848c7..83291c575 100644
--- a/vendor/k8s.io/client-go/transport/cache.go
+++ b/vendor/k8s.io/client-go/transport/cache.go
@@ -44,6 +44,7 @@ type tlsCacheKey struct {
certData string
keyData string
serverName string
+ dial string
}
func (t tlsCacheKey) String() string {
@@ -51,7 +52,7 @@ func (t tlsCacheKey) String() string {
if len(t.keyData) > 0 {
keyText = "<redacted>"
}
- return fmt.Sprintf("insecure:%v, caData:%#v, certData:%#v, keyData:%s, serverName:%s", t.insecure, t.caData, t.certData, keyText, t.serverName)
+ return fmt.Sprintf("insecure:%v, caData:%#v, certData:%#v, keyData:%s, serverName:%s, dial:%s", t.insecure, t.caData, t.certData, keyText, t.serverName, t.dial)
}
func (c *tlsTransportCache) get(config *Config) (http.RoundTripper, error) {
@@ -75,7 +76,7 @@ func (c *tlsTransportCache) get(config *Config) (http.RoundTripper, error) {
return nil, err
}
// The options didn't require a custom TLS config
- if tlsConfig == nil {
+ if tlsConfig == nil && config.Dial == nil {
return http.DefaultTransport, nil
}
@@ -109,5 +110,6 @@ func tlsConfigKey(c *Config) (tlsCacheKey, error) {
certData: string(c.TLS.CertData),
keyData: string(c.TLS.KeyData),
serverName: c.TLS.ServerName,
+ dial: fmt.Sprintf("%p", c.Dial),
}, nil
}
diff --git a/vendor/k8s.io/client-go/transport/round_trippers.go b/vendor/k8s.io/client-go/transport/round_trippers.go
index c728b1877..de64e0078 100644
--- a/vendor/k8s.io/client-go/transport/round_trippers.go
+++ b/vendor/k8s.io/client-go/transport/round_trippers.go
@@ -17,6 +17,7 @@ limitations under the License.
package transport
import (
+ "bytes"
"fmt"
"net/http"
"strings"
@@ -129,7 +130,7 @@ func SetAuthProxyHeaders(req *http.Request, username string, groups []string, ex
}
for key, values := range extra {
for _, value := range values {
- req.Header.Add("X-Remote-Extra-"+key, value)
+ req.Header.Add("X-Remote-Extra-"+headerKeyEscape(key), value)
}
}
}
@@ -246,7 +247,7 @@ func (rt *impersonatingRoundTripper) RoundTrip(req *http.Request) (*http.Respons
}
for k, vv := range rt.impersonate.Extra {
for _, v := range vv {
- req.Header.Add(ImpersonateUserExtraHeaderPrefix+k, v)
+ req.Header.Add(ImpersonateUserExtraHeaderPrefix+headerKeyEscape(k), v)
}
}
@@ -422,3 +423,110 @@ func (rt *debuggingRoundTripper) RoundTrip(req *http.Request) (*http.Response, e
func (rt *debuggingRoundTripper) WrappedRoundTripper() http.RoundTripper {
return rt.delegatedRoundTripper
}
+
+func legalHeaderByte(b byte) bool {
+ return int(b) < len(legalHeaderKeyBytes) && legalHeaderKeyBytes[b]
+}
+
+func shouldEscape(b byte) bool {
+ // url.PathUnescape() returns an error if any '%' is not followed by two
+ // hexadecimal digits, so we'll intentionally encode it.
+ return !legalHeaderByte(b) || b == '%'
+}
+
+func headerKeyEscape(key string) string {
+ var buf bytes.Buffer
+ for i := 0; i < len(key); i++ {
+ b := key[i]
+ if shouldEscape(b) {
+ // %-encode bytes that should be escaped:
+ // https://tools.ietf.org/html/rfc3986#section-2.1
+ fmt.Fprintf(&buf, "%%%02X", b)
+ continue
+ }
+ buf.WriteByte(b)
+ }
+ return buf.String()
+}
+
+// legalHeaderKeyBytes was copied from net/http/lex.go's isTokenTable.
+// See https://httpwg.github.io/specs/rfc7230.html#rule.token.separators
+var legalHeaderKeyBytes = [127]bool{
+ '%': true,
+ '!': true,
+ '#': true,
+ '$': true,
+ '&': true,
+ '\'': true,
+ '*': true,
+ '+': true,
+ '-': true,
+ '.': true,
+ '0': true,
+ '1': true,
+ '2': true,
+ '3': true,
+ '4': true,
+ '5': true,
+ '6': true,
+ '7': true,
+ '8': true,
+ '9': true,
+ 'A': true,
+ 'B': true,
+ 'C': true,
+ 'D': true,
+ 'E': true,
+ 'F': true,
+ 'G': true,
+ 'H': true,
+ 'I': true,
+ 'J': true,
+ 'K': true,
+ 'L': true,
+ 'M': true,
+ 'N': true,
+ 'O': true,
+ 'P': true,
+ 'Q': true,
+ 'R': true,
+ 'S': true,
+ 'T': true,
+ 'U': true,
+ 'W': true,
+ 'V': true,
+ 'X': true,
+ 'Y': true,
+ 'Z': true,
+ '^': true,
+ '_': true,
+ '`': true,
+ 'a': true,
+ 'b': true,
+ 'c': true,
+ 'd': true,
+ 'e': true,
+ 'f': true,
+ 'g': true,
+ 'h': true,
+ 'i': true,
+ 'j': true,
+ 'k': true,
+ 'l': true,
+ 'm': true,
+ 'n': true,
+ 'o': true,
+ 'p': true,
+ 'q': true,
+ 'r': true,
+ 's': true,
+ 't': true,
+ 'u': true,
+ 'v': true,
+ 'w': true,
+ 'x': true,
+ 'y': true,
+ 'z': true,
+ '|': true,
+ '~': true,
+}
diff --git a/vendor/k8s.io/client-go/transport/transport.go b/vendor/k8s.io/client-go/transport/transport.go
index 15be0a3e6..c2bb7ae5e 100644
--- a/vendor/k8s.io/client-go/transport/transport.go
+++ b/vendor/k8s.io/client-go/transport/transport.go
@@ -52,7 +52,7 @@ func New(config *Config) (http.RoundTripper, error) {
// TLSConfigFor returns a tls.Config that will provide the transport level security defined
// by the provided Config. Will return nil if no transport level security is requested.
func TLSConfigFor(c *Config) (*tls.Config, error) {
- if !(c.HasCA() || c.HasCertAuth() || c.TLS.Insecure) {
+ if !(c.HasCA() || c.HasCertAuth() || c.TLS.Insecure || len(c.TLS.ServerName) > 0) {
return nil, nil
}
if c.HasCA() && c.TLS.Insecure {
diff --git a/vendor/k8s.io/client-go/util/cert/cert.go b/vendor/k8s.io/client-go/util/cert/cert.go
index 2c95754c1..fb7f5facc 100644
--- a/vendor/k8s.io/client-go/util/cert/cert.go
+++ b/vendor/k8s.io/client-go/util/cert/cert.go
@@ -138,23 +138,50 @@ func MakeEllipticPrivateKeyPEM() ([]byte, error) {
// Host may be an IP or a DNS name
// You may also specify additional subject alt names (either ip or dns names) for the certificate
func GenerateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS []string) ([]byte, []byte, error) {
+ caKey, err := rsa.GenerateKey(cryptorand.Reader, 2048)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ caTemplate := x509.Certificate{
+ SerialNumber: big.NewInt(1),
+ Subject: pkix.Name{
+ CommonName: fmt.Sprintf("%s-ca@%d", host, time.Now().Unix()),
+ },
+ NotBefore: time.Now(),
+ NotAfter: time.Now().Add(time.Hour * 24 * 365),
+
+ KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
+ BasicConstraintsValid: true,
+ IsCA: true,
+ }
+
+ caDERBytes, err := x509.CreateCertificate(cryptorand.Reader, &caTemplate, &caTemplate, &caKey.PublicKey, caKey)
+ if err != nil {
+ return nil, nil, err
+ }
+
+ caCertificate, err := x509.ParseCertificate(caDERBytes)
+ if err != nil {
+ return nil, nil, err
+ }
+
priv, err := rsa.GenerateKey(cryptorand.Reader, 2048)
if err != nil {
return nil, nil, err
}
template := x509.Certificate{
- SerialNumber: big.NewInt(1),
+ SerialNumber: big.NewInt(2),
Subject: pkix.Name{
CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()),
},
NotBefore: time.Now(),
NotAfter: time.Now().Add(time.Hour * 24 * 365),
- KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
+ KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
BasicConstraintsValid: true,
- IsCA: true,
}
if ip := net.ParseIP(host); ip != nil {
@@ -166,16 +193,19 @@ func GenerateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS
template.IPAddresses = append(template.IPAddresses, alternateIPs...)
template.DNSNames = append(template.DNSNames, alternateDNS...)
- derBytes, err := x509.CreateCertificate(cryptorand.Reader, &template, &template, &priv.PublicKey, priv)
+ derBytes, err := x509.CreateCertificate(cryptorand.Reader, &template, caCertificate, &priv.PublicKey, caKey)
if err != nil {
return nil, nil, err
}
- // Generate cert
+ // Generate cert, followed by ca
certBuffer := bytes.Buffer{}
if err := pem.Encode(&certBuffer, &pem.Block{Type: CertificateBlockType, Bytes: derBytes}); err != nil {
return nil, nil, err
}
+ if err := pem.Encode(&certBuffer, &pem.Block{Type: CertificateBlockType, Bytes: caDERBytes}); err != nil {
+ return nil, nil, err
+ }
// Generate key
keyBuffer := bytes.Buffer{}
diff --git a/version/version.go b/version/version.go
index 45dc93d91..24daf707c 100644
--- a/version/version.go
+++ b/version/version.go
@@ -4,4 +4,9 @@ package version
// NOTE: remember to bump the version at the top
// of the top-level README.md file when this is
// bumped.
-const Version = "0.12.2-dev"
+const Version = "1.0.1-dev"
+
+// RemoteAPIVersion is the version for the remote
+// client API. It is used to determine compatibility
+// between a remote podman client and its backend
+const RemoteAPIVersion = 1